GabeditSrc250/0000755000175100017510000000000013130743374013475 5ustar allouchealloucheGabeditSrc250/src/0000755000175100017510000000000013130664665014271 5ustar allouchealloucheGabeditSrc250/src/Molcas/0000755000175100017510000000000013130743374015502 5ustar allouchealloucheGabeditSrc250/src/Molcas/MolcasGlobal.h0000644000175100017510000000061613130665225020213 0ustar alloucheallouche #ifndef __GABEDIT_MOLCASGLOBAL_H__ #define __GABEDIT_MOLCASGLOBAL_H__ GtkWidget* molcasWin; MolcasMolecule molcasMolecule; MolcasOptimization molcasOptimization; MolcasSolvation molcasSolvation; MolcasScf molcasScf; MolcasGridIT molcasGridIT; MolcasColorFore molcasColorFore; MolcasColorBack molcasColorBack; MolcasSystemVariables molcasSystemVariables; #endif /* __GABEDIT_MOLCASGLOBAL_H__ */ GabeditSrc250/src/Molcas/MolcasVariables.h0000644000175100017510000000327213130665225020724 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MOLCASVARIABLES_H__ #define __GABEDIT_MOLCASVARIABLES_H__ gint molcasMem(); gint molcasDisk(); gint molcasRamd(); gboolean molcasTrap(); void molcasWorkDir(gchar* workDir); void createSystemVariablesFrame(GtkWidget *win, GtkWidget *box, GtkWidget *OkButton); void putVariablesInTextEditor(); void setMolcasVariablesFromInputFile(gchar* fileName); #endif /* __GABEDIT_MOLCASVARIABLES_H__ */ GabeditSrc250/src/Molcas/MolcasGateWay.c0000644000175100017510000017606313130665225020361 0ustar alloucheallouche/* MolcasGateWay.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Molcas/MolcasTypes.h" #include "../Molcas/MolcasGlobal.h" #include "../Molcas/MolcasBasis.h" #include "../Molcas/MolcasScf.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/GeomZmatrix.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/AtomsProp.h" #include "../Utils/GabeditTextEdit.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" /************************************************************************************************************/ /* 0-> Full (find maximum) ; * 1-> with a fixed symmetry 2-> Witout symmetry ; */ static gint typeOfSymmetry[] = { 0,1,2}; static gint groupSymmetry = 0; static GtkWidget* labelSymmetry = NULL; static GtkWidget *buttonTolerance = NULL; static GtkWidget *buttonView = NULL; static GtkWidget *buttonBasis = NULL; /************************************************************************************************************/ void initGateWayButtons() { labelSymmetry = NULL; buttonTolerance = NULL; buttonView = NULL; } /************************************************************************************************************/ void initMolcasMolecule() { gint i; molcasMolecule.listOfAtoms = NULL; molcasMolecule.totalNumberOfElectrons = 0; molcasMolecule.numberOfValenceElectrons = 0; molcasMolecule.numberOfAtoms = 0; molcasMolecule.numberOfDifferentKindsOfAtoms=0; molcasMolecule.symbol = NULL; molcasMolecule.groupSymbol = NULL; molcasMolecule.numberOfAtomsOfEachType = NULL; molcasMolecule.numberOfAtomsOfEachTypeForAllAtoms = NULL; molcasMolecule.numberOfMolcasGenerators = 0; for(i=0; i<3; i++) molcasMolecule.molcasGenerators[i] = NULL; molcasMolecule.basis = NULL; } /************************************************************************************************************/ void freeMolcasMolecule() { gint i; static gboolean first = TRUE; if(first) { initMolcasMolecule(); first = FALSE; return; } if(molcasMolecule.listOfAtoms) g_free(molcasMolecule.listOfAtoms); molcasMolecule.numberOfAtoms = 0; if(molcasMolecule.groupSymbol) g_free(molcasMolecule.groupSymbol); if(molcasMolecule.symbol) { for(i=0;iposition[0] = X[n]; atomList->position[1] = Y[n]; atomList->position[2] = Z[n]; i = 0; for (i=0;itype = i; atomList++; } /* atomList = molcasMolecule.listOfAtoms; for(n=0; ntype], atomList->position[0], atomList->position[1], atomList->position[2]); atomList++; } */ return 0; } /************************************************************************************************************/ static void setXYZFromGeomXYZ(gint i, gdouble* x, gdouble* y, gdouble *z) { if(!test(GeomXYZ[i].X)) *x = get_value_variableXYZ(GeomXYZ[i].X); else *x = atof(GeomXYZ[i].X); if(!test(GeomXYZ[i].Y)) *y = get_value_variableXYZ(GeomXYZ[i].Y); else *y = atof(GeomXYZ[i].Y); if(!test(GeomXYZ[i].Z)) *z = get_value_variableXYZ(GeomXYZ[i].Z); else *z = atof(GeomXYZ[i].Z); if(Units==0) { *x *= BOHR_TO_ANG; *y *= BOHR_TO_ANG; *z *= BOHR_TO_ANG; } } /************************************************************************************************************/ static gboolean setMolcasMoleculeFromGeomXYZ() { gint i; gchar** symbols = NULL; gdouble* X = NULL; gdouble* Y = NULL; gdouble* Z = NULL; gint numberOfAtoms = NcentersXYZ; gchar pointGroupSymbol[BSIZE]; gchar abelianPointGroupSymbol[BSIZE]; gchar message[BSIZE]; gint maximalOrder = 20; gint nGenerators; gint nMolcas = 0; gint nElements; gchar* generators[3]; gchar* molcasGenerators[3]; gchar* elements[8]; gdouble principalAxisTolerance = getTolerancePrincipalAxis(); gdouble positionTolerance = getTolerancePosition(); if(numberOfAtoms<1) return FALSE; for(i=0;i<3;i++) { generators[i] = g_malloc(100*sizeof(gchar)); molcasGenerators[i] = g_malloc(100*sizeof(gchar)); } for(i=0;i<8;i++) elements[i] = g_malloc(100*sizeof(gchar)); symbols = (gchar**)g_malloc(sizeof(gchar*)*(numberOfAtoms)); if(symbols == NULL) return FALSE; X = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(X == NULL) return FALSE; Y = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Y == NULL) return FALSE; Z = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Z == NULL) return FALSE; molcasMolecule.totalNumberOfElectrons = 0; for(i=0; i0 && strcmp(symb,symbOld)) nb++; sprintf(symbOld,"%s",symb); *basisNumber = g_realloc(*basisNumber, nAtoms*sizeof(gint)); (*basisNumber)[nAtoms-1] = nb; } } } break; } } if(!Ok && nAtoms > 0) { if(listOfAtoms) { for(i=0 ; iposition[0]), &(atomList->position[1]), &(atomList->position[2])); if(!strstr(listOfAtoms[n],"/ANG")) { atomList->position[0] *= BOHR_TO_ANG; atomList->position[1] *= BOHR_TO_ANG; atomList->position[2] *= BOHR_TO_ANG; } atomList->type = basisNumber[n]; atomList++; for(i=0;i<(gint)strlen(symb);i++) if(isdigit(symb[i])) symb[i] = ' '; delete_all_spaces(symb); for(i=1;i<(gint)strlen(symb);i++) symb[i] = tolower(symb[i]); molcasMolecule.symbol[basisNumber[n]] = g_strdup(symb); } for (i=0;itype], atomList->position[0], atomList->position[1], atomList->position[2]); atomList++; } printf("TODEL SYMMETRY : "); for(n=0; n0) { freeMolcasMolecule(); setMolcasMoleculeFromListOfAtoms( numberOfAtoms, listOfAtoms, basisNumber, numberOfBasis,listOfBasis, numberOfMolcasGenerators, molcasGenerators); /* printf("numberOfMolcasGenerators = %d\n",numberOfMolcasGenerators); for(i=0;i0) { gchar** symbols = g_malloc(molcasMolecule.numberOfAtoms*sizeof(gchar*)); gdouble* X = g_malloc(molcasMolecule.numberOfAtoms*sizeof(gdouble)); gdouble* Y = g_malloc(molcasMolecule.numberOfAtoms*sizeof(gdouble)); gdouble* Z = g_malloc(molcasMolecule.numberOfAtoms*sizeof(gdouble)); gint numberOfAtoms = molcasMolecule.numberOfAtoms; setSymbolsXYZFromMolcasMolecule(symbols,X,Y, Z); generateMoleculeUsingAbelianGroup(groupName, &numberOfAtoms, &symbols, &X, &Y, &Z); /* printf("Molecule generate Using groupe Symmetry\n"); for(i=0;iactive) sprintf(molcasSolvation.method,"CPCM"); } /**************************************************************************************************************************************/ static void activateSolvRadioButton(GtkWidget *button, gpointer data) { gchar* type = NULL; GtkWidget *entrySolvation = NULL; GtkWidget *buttonConductor = NULL; if(!GTK_IS_WIDGET(button)) return; entrySolvation = g_object_get_data(G_OBJECT (button), "EntrySolvent"); buttonConductor = g_object_get_data(G_OBJECT (button), "ButtonConductor"); type = g_object_get_data(G_OBJECT (button), "Type"); if(type && !strcmp(type,"PCM")) { if(entrySolvation) gtk_widget_set_sensitive(entrySolvation, TRUE); if(buttonConductor) gtk_widget_set_sensitive(buttonConductor, TRUE); sprintf(molcasSolvation.method,"PCM"); if(buttonConductor && GTK_TOGGLE_BUTTON (buttonConductor)->active) sprintf(molcasSolvation.method,"CPCM"); } else { if(entrySolvation) gtk_widget_set_sensitive(entrySolvation, FALSE); if(buttonConductor) gtk_widget_set_sensitive(buttonConductor, FALSE); sprintf(molcasSolvation.method,"Nothing"); } } /***************************************************************************************/ static void changedEntrySolvent(GtkWidget *entry, gpointer data) { G_CONST_RETURN gchar* entryText = NULL; gchar* tmp = NULL; if(!GTK_IS_WIDGET(entry)) return; entryText = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(entryText)<1)return; tmp = g_strdup(entryText); delete_all_spaces(tmp); sprintf(molcasSolvation.solvent,"%s",tmp); g_free(tmp); } /*********************************************************************************************/ static GtkWidget* addComboListToATable(GtkWidget* table, gchar** list, gint nlist, gint i, gint j, gint k) { GtkWidget *entry = NULL; GtkWidget *combo = NULL; combo = create_combo_box_entry(list, nlist, TRUE, -1, -1); gtk_table_attach(GTK_TABLE(table),combo,j,j+k,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); entry = GTK_BIN (combo)->child; g_object_set_data(G_OBJECT (entry), "Combo",combo); return entry; } /************************************************************************************************************************/ void createSolvationFrame(GtkWidget *win, GtkWidget *box) { GtkWidget* button; GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget *table = gtk_table_new(1,5,FALSE); GtkWidget* entrySolvent = NULL; GtkWidget* buttonConductor = gtk_check_button_new_with_label ("Conductor Version"); static gchar* types[] ={"Nothing","PCM"}; gchar* listSolvents[] = { "Water", "Acetonitrile", "Methanol", "Ethanol", "IsoQuinoline", "Quinoline", "Chloroform", "EthylEther", "MethyleneChloride", "DiChloroEthane", "CarbonTetraChloride", "Benzene", "Toluene", "ChloroBenzene", "NitroMethane", "Heptane", "CycloHexane", "Aniline", "Acetone", "TetraHydroFuran", "DiMethylSulfoxide", "Argon", "Krypton", "Xenon" }; gint nlistSolvents = G_N_ELEMENTS (listSolvents); frame = gtk_frame_new ("Solvation"); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); entrySolvent = addComboListToATable(table, listSolvents, nlistSolvents, 0, 2, 1); add_widget_table(table, buttonConductor, 0, 3); button = addRadioButtonToATable(table, NULL, _("Nothing"), 0, 0,1); g_object_set_data(G_OBJECT (button), "Type",types[0]); g_object_set_data(G_OBJECT (button), "EntrySolvent",entrySolvent); g_object_set_data(G_OBJECT (button), "ButtonConductor",buttonConductor); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateSolvRadioButton),NULL); button = addRadioButtonToATable(table, button, "PCM", 0, 1, 1); g_object_set_data(G_OBJECT (button), "Type",types[1]); g_object_set_data(G_OBJECT (button), "EntrySolvent",entrySolvent); g_object_set_data(G_OBJECT (button), "ButtonConductor",buttonConductor); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateSolvRadioButton),NULL); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE); g_signal_connect(G_OBJECT(entrySolvent),"changed", G_CALLBACK(changedEntrySolvent),button); gtk_entry_set_text(GTK_ENTRY(entrySolvent),"Water"); gtk_widget_set_sensitive(entrySolvent, FALSE); gtk_widget_set_sensitive(buttonConductor, FALSE); sprintf(molcasSolvation.method,"Nothing"); sprintf(molcasSolvation.solvent,"Water"); g_signal_connect(G_OBJECT(buttonConductor),"clicked", G_CALLBACK(activateSolvConductorButton),NULL); } /************************************************************************************************************/ static void putSolvationSewardInTextEditor() { gchar buffer[BSIZE]; if(!strcmp(molcasSolvation.method,"Nothing")) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "RF-Input\n",-1); if(!strcmp(molcasSolvation.method,"PCM") || !strcmp(molcasSolvation.method,"CPCM")) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " PCM-Model\n",-1); sprintf(buffer," Solvent=%s\n",molcasSolvation.solvent); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); if(!strcmp(molcasSolvation.method,"CPCM")) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " Conductor Version\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " AARE=0.4\n",-1); } gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "End of RF-Input\n",-1); } /************************************************************************************************************/ static void putInfoInTextWidget(GtkWidget* textWid) { gchar buffer[BSIZE]; MolcasAtom* atomList = NULL; gint i; gint k; gint n; gdouble principalAxisTolerance = getTolerancePrincipalAxis(); gdouble positionTolerance = getTolerancePosition(); /* if(molcasMolecule.numberOfMolcasGenerators<1) return;*/ if(molcasMolecule.numberOfAtoms<1) return; sprintf(buffer,_("Group symbol = %s\n"),molcasMolecule.groupSymbol); gabedit_text_insert (GABEDIT_TEXT(textWid), NULL, NULL, NULL, buffer, -1); sprintf(buffer,_("Tolerance for principal axis classification : %0.5f\n"),principalAxisTolerance); gabedit_text_insert (GABEDIT_TEXT(textWid), NULL, NULL, NULL,buffer,-1); if(positionTolerance<0) sprintf(buffer,_("Precision for atom position : Min distance between atoms\n\n")); else sprintf(buffer,_("Precision for atom position : %0.5f\n\n"),positionTolerance); gabedit_text_insert (GABEDIT_TEXT(textWid), NULL, NULL, NULL, buffer,-1); sprintf(buffer,_("Total number of electrons : %d\n\n"),molcasMolecule.totalNumberOfElectrons); gabedit_text_insert (GABEDIT_TEXT(textWid), NULL, NULL, NULL,buffer,-1); sprintf(buffer,"================================================================\n"); gabedit_text_insert (GABEDIT_TEXT(textWid), NULL, NULL, NULL, buffer,-1); gabedit_text_insert (GABEDIT_TEXT(textWid), NULL, &molcasColorFore.subProgram, NULL, _("Generators : "),-1); if(molcasMolecule.numberOfMolcasGenerators==0) gabedit_text_insert (GABEDIT_TEXT(textWid), NULL, NULL, NULL, _("Nothing"), -1); for (i=0;ivbox),NULL,&frame); gabedit_text_set_editable(GABEDIT_TEXT(TextWid), TRUE); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), FALSE); Bouton = create_button(Dialogue,"OK"); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), Bouton, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)destroy_button_windows, GTK_OBJECT(Dialogue)); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(Dialogue)); add_button_windows(title,Dialogue); putInfoInTextWidget(TextWid); gtk_window_set_default_size (GTK_WINDOW(Dialogue), ScreenWidth/2, ScreenHeight/2); gtk_widget_show_all(Dialogue); g_free(title); if(GTK_IS_WIDGET(win)) gtk_window_set_transient_for(GTK_WINDOW(Dialogue),GTK_WINDOW(win)); } /**************************************************************************************************************************************/ void createSymmetryFrame(GtkWidget *win, GtkWidget *box) { GtkWidget* button; GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget* label = gtk_label_new(" "); GtkWidget* label0 = gtk_label_new(_("Find maximum")); GtkWidget* label2 = gtk_label_new(_("C1 group")); GtkWidget *table = gtk_table_new(4,3,FALSE); gint i=0; frame = gtk_frame_new (_("Geometry& basis")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); i = 0; button = addRadioButtonToATable(table, NULL, _("Full symmetry"), i, 0,1); add_widget_table(table, label0, i, 1); g_object_set_data(G_OBJECT (button), "Label",label); g_object_set_data(G_OBJECT (button), "Type",&typeOfSymmetry[0]); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), typeOfSymmetry[0]==groupSymmetry); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); i = 1; button = addRadioButtonToATable(table, button, _("Fixed symmetry"), i, 0, 1); add_widget_table(table, label, i, 1); g_object_set_data(G_OBJECT (button), "Label",label); g_object_set_data(G_OBJECT (button), "Type",&typeOfSymmetry[1]); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), typeOfSymmetry[1]==groupSymmetry); buttonTolerance = create_button(win,_(" Tolerance ")); add_widget_table(table, buttonTolerance, i, 2); g_signal_connect(G_OBJECT(buttonTolerance),"clicked", G_CALLBACK(activateToleranceButton),NULL); gtk_widget_set_sensitive(buttonTolerance, FALSE); i = 2; button = addRadioButtonToATable(table, button, _("Without symmetry"), i, 0,1); add_widget_table(table, label2, i, 1); g_object_set_data(G_OBJECT (button), "Label",label); g_object_set_data(G_OBJECT (button), "Type",&typeOfSymmetry[2]); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), typeOfSymmetry[2]==groupSymmetry); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); i = 3; buttonView = create_button(win,_(" Show result ")); gtk_table_attach(GTK_TABLE(table),buttonView,1,1+2,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); /* add_widget_table(table, buttonView, 2, 2);*/ g_signal_connect_swapped(G_OBJECT(buttonView),"clicked", G_CALLBACK(createViewInfoAbelianGroupWindow),GTK_OBJECT(win)); buttonBasis = create_button(win,_(" Set Basis ")); add_widget_table(table, buttonBasis, i, 0); g_signal_connect_swapped(G_OBJECT(buttonBasis),"clicked", G_CALLBACK(createBasisWindow),GTK_OBJECT(win)); labelSymmetry = label; } /************************************************************************************************************/ void putSymmetryInTextEditor() { gchar buffer[BSIZE]; gint i; if(groupSymmetry==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "Group=Full\n",-1); else if (groupSymmetry==2) gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "Group=Nosym\n",-1); /* gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "Group=Generators\n",-1); */ if(groupSymmetry!=1) return; if(molcasMolecule.numberOfMolcasGenerators<1) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "Symmetry\n",-1); for (i=0;iNUMBER_ENTRY_0) line=g_strdup_printf("%s\t%s\t%f",line,Geom[i].NR,getV(Geom[i].R)); if(Geom[i].Nentry>NUMBER_ENTRY_R) line=g_strdup_printf("%s\t%s\t%f",line,Geom[i].NAngle,getV(Geom[i].Angle)); if(Geom[i].Nentry>NUMBER_ENTRY_ANGLE) line=g_strdup_printf("%s\t%s\t%f",line,Geom[i].NDihedral,getV(Geom[i].Dihedral)); prop = prop_atom_get(Geom[i].Symb); gabedit_text_insert (GABEDIT_TEXT(text), NULL,NULL, &prop.color,line,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); } gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "End of Z-Matrix\n",-1); } /************************************************************************************************************/ static void putMoleculeCoordBasisInTextEditor() { gchar buffer[BSIZE]; MolcasAtom* atomList = NULL; gint i; gint k; if(molcasMolecule.numberOfAtoms<1) return; atomList = molcasMolecule.listOfAtoms; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "Coord\n",-1); sprintf(buffer,"%d\n",molcasMolecule.numberOfAtoms); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"Coordinates in Angstrom units\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); for (i=0;i Dep.mk -include Dep.mk GabeditSrc250/src/Molcas/MolcasBasisLibrary.c0000644000175100017510000014213213130665225021374 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include "../../Config.h" #include "../Common/Global.h" #include "../Molcas/MolcasLib.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "../Molcas/MolcasBasisLibrary.h" #include "../Common/StockIcons.h" static GtkWidget* Entry; static GtkWidget* EntryBasisName; static GtkWidget* EntryAuthor; static GtkWidget* EntryPrimitive; static GtkWidget* EntryContraction; static GtkWidget* EntryEcpType; #define lengthList 6 /************************************************************************************************************/ typedef enum { LIST_ATOM_SYMBOL = 0, LIST_BASIS_NAME, LIST_AUTHOR, LIST_PRIMITIVE, LIST_CONTRACTION, LIST_ECPTYPE, LIST_DATA /* column for data, this column is not visible */ }ListColumnsTypes; /************************************************************************************************************/ static gchar *listTitles[]={ "Atom", "Basis Name", "Author","Primitive", "Contraction","ECP Type" }; static MolcasBasis molcasBasis={0,NULL}; static GtkWidget *SetWinDlg = NULL; static GtkWidget *treeView = NULL; typedef struct _DataMolcasTree DataMolcasTree; struct _DataMolcasTree { gint atomNumber; gint basisNumber; }; static gchar selectedRow[100] = "-1"; static void rafreshTreeView(); /********************************************************************************/ typedef enum { MENU_NEW_ATOM = 0, MENU_DELETE_ATOM, MENU_NEW_BASIS, MENU_EDIT_BASIS, MENU_DELETE_BASIS, MENU_SAVE, MENU_CLOSE } EnumMenuType; /********************************************************************************/ static void deleteBasisDlg(GtkWidget *win,gpointer d); static void deleteAtomDlg(GtkWidget *win,gpointer d); static void newBasisDlg(); static void editBasisDlg(); static void newAtomDlg(); /********************************************************************************/ static void freeMolcasBasis() { if(molcasBasis.numberOfAtoms<1) { molcasBasis.numberOfAtoms = 0; molcasBasis.atoms = NULL; return; } molcasBasis.numberOfAtoms = 0; molcasBasis.atoms = NULL; } /********************************************************************************/ void get_molcas_basis_list(gchar* Symb,gchar* outfile,gchar* errfile) { FILE* fout=FOpen(outfile,"w"); FILE* ferr=FOpen(errfile,"w"); gchar bas[BSIZE]; gint atomNumber = -1; gint i; if(molcasBasis.numberOfAtoms<1) { loadMolcasBasis(); if(molcasBasis.numberOfAtoms<1) return; } atomNumber = -1; for(i=0;i=0) for(i=0;i=0) { sensitive[MENU_NEW_ATOM-o] = FALSE; sensitive[MENU_DELETE_ATOM-o] = FALSE; sensitive[MENU_NEW_BASIS-o] = TRUE; sensitive[MENU_EDIT_BASIS-o] = TRUE; sensitive[MENU_DELETE_BASIS-o] = TRUE; sensitive[MENU_SAVE-o] = TRUE; sensitive[MENU_CLOSE-o] = TRUE; for(i=0;i\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*******************************************************************************************************************************/ static GtkUIManager *newMenu(GtkWidget* win) { GtkActionGroup *actionGroup = NULL; GtkUIManager *manager = NULL; GError *error = NULL; manager = gtk_ui_manager_new (); g_signal_connect_swapped (win, "destroy", G_CALLBACK (g_object_unref), manager); actionGroup = gtk_action_group_new ("GabeditEditBasisMolcasLibrary"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntries, numberOfGtkActionEntries, NULL); gtk_ui_manager_insert_action_group (manager, actionGroup, 0); gtk_window_add_accel_group (GTK_WINDOW (win), gtk_ui_manager_get_accel_group (manager)); if (!gtk_ui_manager_add_ui_from_string (manager, uiMenuInfo, -1, &error)) { g_message ("building menus failed: %s", error->message); g_error_free (error); } return manager; } /**********************************************************************************/ static void eventDispatcher(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; GtkTreeIter iter; GtkTreeModel *model; if (!event) return; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); sprintf(selectedRow ,"%s",gtk_tree_path_to_string(path)); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free(path); if (event->type == GDK_BUTTON_PRESS && ((GdkEventButton *) event)->button == 3) { GdkEventButton *bevent = (GdkEventButton *) event; GtkUIManager *manager = GTK_UI_MANAGER(user_data); if(atoi(selectedRow) < 0) set_sensitive_menu(manager, TRUE, 0); else { DataMolcasTree* data = NULL; gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1); if(data) set_sensitive_menu(manager, FALSE, data->basisNumber); } show_menu_popup(manager, bevent->button, bevent->time); } } } GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event); } /********************************************************************************/ static DataMolcasTree* newDataMolcasTree(gint atomNumber, gint basisNumber) { DataMolcasTree* dataTree; dataTree = g_malloc(sizeof(DataMolcasTree)); dataTree->atomNumber = atomNumber; dataTree->basisNumber = basisNumber; return dataTree; } /********************************************************************************/ static void freeDataMolcasTree() { DataMolcasTree* data = NULL; gint i = 0; gchar* pathString = NULL; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); pathString = g_strdup_printf("%d", i); while (gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE) { gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1); if(data) g_free(data); i++; g_free(pathString); pathString = g_strdup_printf("%d", i); } g_free(pathString); } /********************************************************************************/ static gboolean* getExpandInfo() { gint i; gboolean* expandeds = NULL; gint nNodes = 0; gchar* pathString = NULL; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); nNodes = 0; pathString = g_strdup_printf("%d", nNodes); while (gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE) { nNodes++; g_free(pathString); pathString = g_strdup_printf("%d", nNodes); } g_free(pathString); if(nNodes<1) return NULL; expandeds = g_malloc((nNodes+1)*sizeof(gboolean)); for(i=0;iatomNumber; basisNumber = data->basisNumber; if(atomNumber<0) return; if(basisNumber<0) return; if(molcasBasis.atoms[atomNumber].basis[basisNumber].basisName) g_free(molcasBasis.atoms[atomNumber].basis[basisNumber].basisName); if(molcasBasis.atoms[atomNumber].basis[basisNumber].author) g_free(molcasBasis.atoms[atomNumber].basis[basisNumber].author); if(molcasBasis.atoms[atomNumber].basis[basisNumber].primitive) g_free(molcasBasis.atoms[atomNumber].basis[basisNumber].primitive); if(molcasBasis.atoms[atomNumber].basis[basisNumber].contraction) g_free(molcasBasis.atoms[atomNumber].basis[basisNumber].contraction); if(molcasBasis.atoms[atomNumber].basis[basisNumber].ecpType) g_free(molcasBasis.atoms[atomNumber].basis[basisNumber].ecpType); numberOfBasis = molcasBasis.atoms[atomNumber].numberOfBasis; for(i=basisNumber;iatomNumber; basisNumber = data->basisNumber; if(atomNumber<0) return; if(basisNumber<0) return; t =g_strdup_printf(format, molcasBasis.atoms[atomNumber].basis[basisNumber].basisName, molcasBasis.atoms[atomNumber].basis[basisNumber].author, molcasBasis.atoms[atomNumber].symbol ); w = Continue_YesNo(deleteOneBasis, NULL,t); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(SetWinDlg)); } /********************************************************************************/ static void deleteOneAtom(GtkWidget *win, gpointer d) { GtkTreeIter node; DataMolcasTree* data = NULL; gint atomNumber; gint basisNumber; gint numberOfBasis; gint numberOfAtoms; gint i; gboolean* expandeds; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); if(atoi(selectedRow)<0) return; if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); expandeds = getExpandInfo(); if(!data) return; atomNumber = data->atomNumber; basisNumber = data->basisNumber; if(atomNumber<0) return; if(basisNumber>=0) return; numberOfBasis = molcasBasis.atoms[atomNumber].numberOfBasis; numberOfAtoms = molcasBasis.numberOfAtoms; for(i=0;iatomNumber; basisNumber = data->basisNumber; if(atomNumber<0) return; if(basisNumber>=0) return; t =g_strdup_printf(format,molcasBasis.atoms[atomNumber].symbol); w = Continue_YesNo(deleteOneAtom, NULL,t); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(SetWinDlg)); } /********************************************************************************/ static void newAtom() { GtkTreeIter node; DataMolcasTree* data = NULL; gint atomNumber; gint basisNumber; gint numberOfAtoms; MolcasAtom* atoms; gchar* symbol = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry))); gboolean* expandeds; gint i; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); atomNumber = -1; basisNumber = -1; if(data) { atomNumber = data->atomNumber; basisNumber = data->basisNumber; } if(strlen(symbol)<=0) return; numberOfAtoms = molcasBasis.numberOfAtoms; atoms = molcasBasis.atoms; for(i=0;i=0) { MolcasAtom t = molcasBasis.atoms[numberOfAtoms-1]; for(i=numberOfAtoms-1;i>atomNumber;i--) molcasBasis.atoms[i] = molcasBasis.atoms[i-1]; molcasBasis.atoms[atomNumber] = t; } expandeds = getExpandInfo(); freeDataMolcasTree(); rafreshTreeView(); setExpandeds(expandeds,selectedRow); if(expandeds) g_free(expandeds); } /********************************************************************************/ static void setAtom(GtkWidget *w,gpointer data) { gtk_entry_set_text(GTK_ENTRY(Entry),(char *)data); } /********************************************************************************/ static void selectAtom(GtkWidget *w,gpointer entry0) { GtkWidget* Table; GtkWidget* button; GtkWidget* frame; GtkWidget* FenetreTable; guint i; guint j; GtkStyle *button_style; GtkStyle *style; gchar*** Symb = get_periodic_table(); FenetreTable = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(FenetreTable),TRUE); gtk_window_set_title(GTK_WINDOW(FenetreTable),"Select your atom"); gtk_window_set_default_size (GTK_WINDOW(FenetreTable),(gint)(ScreenWidth*0.5),(gint)(ScreenHeight*0.4)); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_container_add(GTK_CONTAINER(FenetreTable),frame); gtk_widget_show (frame); Table = gtk_table_new(PERIODIC_TABLE_N_ROWS-1,PERIODIC_TABLE_N_COLUMNS,TRUE); gtk_container_add(GTK_CONTAINER(frame),Table); button_style = gtk_widget_get_style(FenetreTable); for ( i = 0;iatomNumber; basisNumber = data->basisNumber; sprintf(title,"New Atom"); WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),title); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(SetWinDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); Entry = create_label_entry(hbox," Atom Symbol : ",-1,-1); gtk_entry_set_text(GTK_ENTRY(Entry),"H"); gtk_editable_set_editable((GtkEditable*) Entry,FALSE); Button = gtk_button_new_with_label(" Set "); gtk_box_pack_start (GTK_BOX(hbox), Button, TRUE, TRUE, 5); g_signal_connect(G_OBJECT(Button), "clicked", (GCallback)selectAtom,Entry); gtk_widget_realize(WinDlg); Button = create_button(WinDlg,"Cancel"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,"OK"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)newAtom,GTK_OBJECT(WinDlg)); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /********************************************************************************/ static void newBasis() { GtkTreeIter node; DataMolcasTree* data = NULL; gint atomNumber; gint basisNumber; gint numberOfBasis; MolcasOneBasis* basis; gchar* basisName = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryBasisName))); gchar* author = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryAuthor))); gchar* primitive = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryPrimitive))); gchar* contraction = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryContraction))); gchar* ecpType = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryEcpType))); gboolean* expandeds; gint i; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); if(!data) return; atomNumber = data->atomNumber; basisNumber = data->basisNumber; if(atomNumber<0) return; delete_all_spaces(basisName); if(strlen(basisName)<=0) return; numberOfBasis = molcasBasis.atoms[atomNumber].numberOfBasis; basis = molcasBasis.atoms[atomNumber].basis; for(i=0;i=0) { MolcasOneBasis t = molcasBasis.atoms[atomNumber].basis[numberOfBasis-1]; for(i=numberOfBasis-1;i>basisNumber;i--) molcasBasis.atoms[atomNumber].basis[i] = molcasBasis.atoms[atomNumber].basis[i-1]; molcasBasis.atoms[atomNumber].basis[basisNumber] = t; } expandeds = getExpandInfo(); freeDataMolcasTree(); rafreshTreeView(); setExpandeds(expandeds,selectedRow); if(expandeds) g_free(expandeds); } /********************************************************************************/ static void newBasisDlg() { GtkWidget *WinDlg; GtkWidget *Button; GtkWidget *frame; GtkWidget *vboxframe; GtkTreeIter node; DataMolcasTree* data = NULL; gint atomNumber; gint basisNumber; gchar title[BSIZE]; GtkWidget *table = NULL; GtkWidget *label = NULL; gushort i; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); if(!data) return; atomNumber = data->atomNumber; basisNumber = data->basisNumber; if(atomNumber<0 ) return; sprintf(title,"New Basis for %s atom :",molcasBasis.atoms[atomNumber].symbol); WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),title); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(SetWinDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(4,3,FALSE); gtk_box_pack_start (GTK_BOX (vboxframe), table, TRUE, TRUE, 0); i = 0; label = gtk_label_new(" Basis Name "); add_widget_table(table, label, i, 0); label = gtk_label_new(" : "); add_widget_table(table, label, i, 1); EntryBasisName = gtk_entry_new(); add_widget_table(table, EntryBasisName, i, 2); i = 1; label = gtk_label_new(" Author "); add_widget_table(table, label, i, 0); label = gtk_label_new(" : "); add_widget_table(table, label, i, 1); EntryAuthor = gtk_entry_new(); add_widget_table(table, EntryAuthor, i, 2); i = 2; label = gtk_label_new(" Primitive "); add_widget_table(table, label, i, 0); label = gtk_label_new(" : "); add_widget_table(table, label, i, 1); EntryPrimitive = gtk_entry_new(); add_widget_table(table, EntryPrimitive, i, 2); i = 3; label = gtk_label_new(" Contraction "); add_widget_table(table, label, i, 0); label = gtk_label_new(" : "); add_widget_table(table, label, i, 1); EntryContraction = gtk_entry_new(); add_widget_table(table, EntryContraction, i, 2); i = 4; label = gtk_label_new(" ECP Type "); add_widget_table(table, label, i, 0); label = gtk_label_new(" : "); add_widget_table(table, label, i, 1); EntryEcpType = gtk_entry_new(); add_widget_table(table, EntryEcpType, i, 2); gtk_widget_realize(WinDlg); Button = create_button(WinDlg,"Cancel"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,"OK"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)newBasis,GTK_OBJECT(WinDlg)); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /********************************************************************************/ static void editBasis() { GtkTreeIter node; DataMolcasTree* data = NULL; gint atomNumber; gint basisNumber; MolcasOneBasis* basis; gchar* basisName = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryBasisName))); gchar* author = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryAuthor))); gchar* primitive = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryPrimitive))); gchar* contraction = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryContraction))); gchar* ecpType = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryEcpType))); gboolean* expandeds; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); if(!data) return; atomNumber = data->atomNumber; basisNumber = data->basisNumber; if(atomNumber<0) return; if(basisNumber<0) return; delete_all_spaces(basisName); if(strlen(basisName)<=0) return; basis = molcasBasis.atoms[atomNumber].basis; if(basis[basisNumber].basisName) g_free(basis[basisNumber].basisName); if(basis[basisNumber].author) g_free(basis[basisNumber].author); if(basis[basisNumber].primitive) g_free(basis[basisNumber].primitive); if(basis[basisNumber].contraction) g_free(basis[basisNumber].contraction); if(basis[basisNumber].ecpType) g_free(basis[basisNumber].ecpType); basis[basisNumber].basisName = basisName; if(this_is_a_backspace(author)) basis[basisNumber].author = g_strdup("UNK"); else basis[basisNumber].author = g_strdup(author); if(this_is_a_backspace(primitive)) basis[basisNumber].primitive = g_strdup("UNK"); else basis[basisNumber].primitive = g_strdup(primitive); if(this_is_a_backspace(contraction)) basis[basisNumber].contraction = g_strdup("UNK"); else basis[basisNumber].contraction = g_strdup(contraction); if(this_is_a_backspace(ecpType)) basis[basisNumber].ecpType = g_strdup("UNK"); else basis[basisNumber].ecpType = g_strdup(ecpType); molcasBasis.atoms[atomNumber].basis = basis; expandeds = getExpandInfo(); freeDataMolcasTree(); rafreshTreeView(); setExpandeds(expandeds,selectedRow); if(expandeds) g_free(expandeds); } /********************************************************************************/ static void editBasisDlg() { GtkWidget *WinDlg; GtkWidget *Button; GtkWidget *frame; GtkWidget *vboxframe; GtkTreeIter node; DataMolcasTree* data = NULL; gint atomNumber; gint basisNumber; gchar title[BSIZE]; GtkWidget *table = NULL; GtkWidget *label = NULL; gushort i; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); if(!data) return; atomNumber = data->atomNumber; basisNumber = data->basisNumber; if(atomNumber<0 ) return; sprintf(title,"Edit Basis for %s atom :",molcasBasis.atoms[atomNumber].symbol); WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),title); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(SetWinDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(4,3,FALSE); gtk_box_pack_start (GTK_BOX (vboxframe), table, TRUE, TRUE, 0); i = 0; label = gtk_label_new(" Basis Name "); add_widget_table(table, label, i, 0); label = gtk_label_new(" : "); add_widget_table(table, label, i, 1); EntryBasisName = gtk_entry_new(); if(!strstr(molcasBasis.atoms[atomNumber].basis[basisNumber].basisName,"UNK")) gtk_entry_set_text(GTK_ENTRY(EntryBasisName),molcasBasis.atoms[atomNumber].basis[basisNumber].basisName); add_widget_table(table, EntryBasisName, i, 2); i = 1; label = gtk_label_new(" Author "); add_widget_table(table, label, i, 0); label = gtk_label_new(" : "); add_widget_table(table, label, i, 1); EntryAuthor = gtk_entry_new(); if(!strstr(molcasBasis.atoms[atomNumber].basis[basisNumber].author,"UNK")) gtk_entry_set_text(GTK_ENTRY(EntryAuthor),molcasBasis.atoms[atomNumber].basis[basisNumber].author); add_widget_table(table, EntryAuthor, i, 2); i = 2; label = gtk_label_new(" Primitive "); add_widget_table(table, label, i, 0); label = gtk_label_new(" : "); add_widget_table(table, label, i, 1); EntryPrimitive = gtk_entry_new(); if(!strstr(molcasBasis.atoms[atomNumber].basis[basisNumber].primitive,"UNK")) gtk_entry_set_text(GTK_ENTRY(EntryPrimitive),molcasBasis.atoms[atomNumber].basis[basisNumber].primitive); add_widget_table(table, EntryPrimitive, i, 2); i = 3; label = gtk_label_new(" Contraction "); add_widget_table(table, label, i, 0); label = gtk_label_new(" : "); add_widget_table(table, label, i, 1); EntryContraction = gtk_entry_new(); if(!strstr(molcasBasis.atoms[atomNumber].basis[basisNumber].contraction,"UNK")) gtk_entry_set_text(GTK_ENTRY(EntryContraction),molcasBasis.atoms[atomNumber].basis[basisNumber].contraction); add_widget_table(table, EntryContraction, i, 2); i = 4; label = gtk_label_new(" ECP Type "); add_widget_table(table, label, i, 0); label = gtk_label_new(" : "); add_widget_table(table, label, i, 1); EntryEcpType = gtk_entry_new(); if(!strstr(molcasBasis.atoms[atomNumber].basis[basisNumber].ecpType,"UNK")) gtk_entry_set_text(GTK_ENTRY(EntryEcpType),molcasBasis.atoms[atomNumber].basis[basisNumber].ecpType); add_widget_table(table, EntryEcpType, i, 2); gtk_widget_realize(WinDlg); Button = create_button(WinDlg,"Cancel"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,"OK"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)editBasis,GTK_OBJECT(WinDlg)); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /*******************************************************************************************************/ static void addFeuille(GtkTreeIter *parent, MolcasOneBasis* molcasOneBasis, gint atomNumber, gint basisNumber) { GtkTreeIter feuille; gchar* texts[lengthList]; DataMolcasTree* dataTree; gint i; GtkTreeModel *model; GtkTreeStore *store; model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); store = GTK_TREE_STORE (model); texts[0] = g_strdup(" "); texts[1] = g_strdup(molcasOneBasis->basisName); if(strstr(molcasOneBasis->author,"UNK")) texts[2] = g_strdup(" "); else texts[2] = g_strdup(molcasOneBasis->author); if(strstr(molcasOneBasis->primitive,"UNK")) texts[3] = g_strdup(" "); else texts[3] = g_strdup(molcasOneBasis->primitive); if(strstr(molcasOneBasis->contraction,"UNK")) texts[4] = g_strdup(" "); else texts[4] = g_strdup(molcasOneBasis->contraction); if(strstr(molcasOneBasis->ecpType,"UNK")) texts[5] = g_strdup(" "); else texts[5] = g_strdup(molcasOneBasis->ecpType); dataTree = newDataMolcasTree(atomNumber,basisNumber); gtk_tree_store_append(store, &feuille, parent); gtk_tree_store_set (store, &feuille, LIST_ATOM_SYMBOL, texts[0], -1); gtk_tree_store_set (store, &feuille, LIST_BASIS_NAME, texts[1], -1); gtk_tree_store_set (store, &feuille, LIST_AUTHOR, texts[2], -1); gtk_tree_store_set (store, &feuille, LIST_PRIMITIVE, texts[3], -1); gtk_tree_store_set (store, &feuille, LIST_CONTRACTION, texts[4], -1); gtk_tree_store_set (store, &feuille, LIST_ECPTYPE, texts[5], -1); gtk_tree_store_set (store, &feuille, LIST_DATA, dataTree, -1); for(i=0;i200) return; molcasBasis.numberOfAtoms = natoms; molcasBasis.atoms = g_malloc(natoms*sizeof(MolcasAtom)); for(i=0;i #include "../../Config.h" #include "../Common/Global.h" #include "../Molcas/MolcasTypes.h" #include "../Molcas/MolcasGlobal.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Utils/GabeditTextEdit.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" /************************************************************************************************************/ typedef enum { MOLCAS_TYPE_VARIABLE_MEM = 0, MOLCAS_TYPE_VARIABLE_DISK, MOLCAS_TYPE_VARIABLE_RAMD, MOLCAS_TYPE_VARIABLE_TRAP, MOLCAS_TYPE_VARIABLE_WORKDIR } MolcasTypeVariable; static MolcasTypeVariable typeOfVariables[] = { MOLCAS_TYPE_VARIABLE_MEM, MOLCAS_TYPE_VARIABLE_DISK, MOLCAS_TYPE_VARIABLE_RAMD, MOLCAS_TYPE_VARIABLE_TRAP, MOLCAS_TYPE_VARIABLE_WORKDIR }; static MolcasSystemVariables molcasSystemVariablesTmp; /************************************************************************************************************/ gint molcasMem() { if(strstr(molcasSystemVariables.mem,_("Default"))) return -1; else if(strstr(molcasSystemVariables.mem,_("largest possible"))) return 0; else if(atoi(molcasSystemVariables.mem)>0) return atoi(molcasSystemVariables.mem); else return -1; } /************************************************************************************************************/ gint molcasDisk() { if(strstr(molcasSystemVariables.disk,_("Default"))) return -1; else if(strstr(molcasSystemVariables.disk,_("Limited to 2 GBytes"))) return 0; else if(atoi(molcasSystemVariables.disk)>0) return atoi(molcasSystemVariables.disk); else return -1; } /************************************************************************************************************/ gint molcasRamd() { if(strstr(molcasSystemVariables.ramd,_("Default"))) return -1; else if(atoi(molcasSystemVariables.ramd)>0) return atoi(molcasSystemVariables.ramd); else return -1; } /************************************************************************************************************/ gboolean molcasTrap() { if(strstr(molcasSystemVariables.trap,"ON")) return TRUE; else return FALSE; } /************************************************************************************************************/ void molcasWorkDir(gchar* workDir) { sprintf(workDir,"%s", molcasSystemVariables.workDir); } /************************************************************************************************************/ static void initMolcasSystemVariables(MolcasSystemVariables* mSystemVariables) { sprintf(mSystemVariables->mem,_("Default")); sprintf(mSystemVariables->disk,_("Default")); sprintf(mSystemVariables->ramd,_("Default")); sprintf(mSystemVariables->trap,"ON"); sprintf(mSystemVariables->workDir,_("Default")); } /************************************************************************************************************/ static void initMolcasSystemVariablesTmp() { initMolcasSystemVariables(&molcasSystemVariablesTmp); } /************************************************************************************************************/ static void copySystemVariablesParameters(MolcasSystemVariables* newCopy, MolcasSystemVariables* toCopy) { sprintf( newCopy->mem, "%s", toCopy->mem); sprintf( newCopy->disk, "%s", toCopy->disk); sprintf( newCopy->ramd, "%s",toCopy->ramd); sprintf( newCopy->trap, "%s",toCopy->trap); sprintf( newCopy->workDir, "%s",toCopy->workDir); } /************************************************************************************************************/ static void copySystemVariablesParametersFromTmp(GtkWidget *win, gpointer data) { copySystemVariablesParameters(&molcasSystemVariables, &molcasSystemVariablesTmp); } /**********************************************************************/ static void changedEntriesVariable(GtkWidget *entry, gpointer data) { G_CONST_RETURN gchar* entrytext = NULL; MolcasTypeVariable* type; if(!GTK_IS_WIDGET(entry)) return; type = g_object_get_data(G_OBJECT (entry), "Type"); if(type == NULL) return ; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(entrytext)<1)return; switch(*type) { case MOLCAS_TYPE_VARIABLE_MEM : if(strstr(entrytext,_("Default")) || strstr(entrytext,_("largest possible")) ) { gtk_widget_set_sensitive(entry, FALSE); } else { gtk_widget_set_sensitive(entry, TRUE); } if(strstr(entrytext,_("Default")) || strstr(entrytext,_("largest possible")) || atof(entrytext) != 0) sprintf(molcasSystemVariablesTmp.mem,"%s",entrytext); break; case MOLCAS_TYPE_VARIABLE_DISK : if(strstr(entrytext,_("Default")) || strstr(entrytext,_("Limited to 2 GBytes")) ) { gtk_widget_set_sensitive(entry, FALSE); } else { gtk_widget_set_sensitive(entry, TRUE); } if(strstr(entrytext,_("Default")) || strstr(entrytext,_("Limited to 2 GBytes")) || atof(entrytext) != 0) sprintf(molcasSystemVariablesTmp.disk, "%s", entrytext); break; case MOLCAS_TYPE_VARIABLE_RAMD : if(strstr(entrytext,_("Default"))) { gtk_widget_set_sensitive(entry, FALSE); } else { gtk_widget_set_sensitive(entry, TRUE); } if(strstr(entrytext,_("Default")) || atof(entrytext) != 0) sprintf(molcasSystemVariablesTmp.ramd, "%s",entrytext); break; case MOLCAS_TYPE_VARIABLE_TRAP : gtk_widget_set_sensitive(entry, FALSE); sprintf(molcasSystemVariablesTmp.trap, "%s",entrytext); break; case MOLCAS_TYPE_VARIABLE_WORKDIR : if(strstr(entrytext,_("Default"))) { gtk_widget_set_sensitive(entry, FALSE); } else { gtk_widget_set_sensitive(entry, TRUE); } sprintf(molcasSystemVariablesTmp.workDir, "%s",entrytext); break; } } /*********************************************************************************************/ static GtkWidget* addComboListToATable(GtkWidget* table, gchar** list, gint nlist, gint i, gint j, gint k) { GtkWidget *entry = NULL; GtkWidget *combo = NULL; combo = create_combo_box_entry(list, nlist, TRUE, -1, -1); gtk_table_attach(GTK_TABLE(table),combo,j,j+k,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); entry = GTK_BIN (combo)->child; return entry; } /************************************************************/ void createSystemVariablesFrame(GtkWidget *win, GtkWidget *box, GtkWidget *OkButton) { gushort i; GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget *table = gtk_table_new(5,2,FALSE); GtkWidget* entryMem = NULL; GtkWidget* labelMem = gtk_label_new("MOLCASMEM : "); GtkWidget* entryDisk = NULL; GtkWidget* labelDisk = gtk_label_new("MOLCASDISK : "); GtkWidget* entryRamd = NULL; GtkWidget* labelRamd = gtk_label_new("MOLCASRAMD : "); GtkWidget* entryTrap = NULL; GtkWidget* labelTrap = gtk_label_new("MOLCAS_TRAP : "); GtkWidget* entryWorkDir = NULL; GtkWidget* labelWorkDir = gtk_label_new("WorkDir : "); gint nlistMem = 3; gchar* listMem[] = { _("Default"), _("The largest possible"), "64 MB" }; gint nlistDisk = 3; gchar* listDisk[] = { _("Default"), _("Limited to 2 GBytes"), "1000 MB" }; gint nlistRamd = 2; gchar* listRamd[] = { _("Default"), "100 MB" }; gint nlistTrap = 2; gchar* listTrap[] = { "ON", "OFF" }; gint nlistWorkDir = 2; gchar* listWorkDir[] = { _("Default"), "$HOME/tmp" }; initMolcasSystemVariablesTmp(); initMolcasSystemVariables(&molcasSystemVariables); frame = gtk_frame_new (_("Molcas system variables")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); i = 0; add_widget_table(table, labelMem, i, 0); entryMem = addComboListToATable(table, listMem, nlistMem, i, 1, 1); gtk_widget_set_sensitive(entryMem, FALSE); g_object_set_data(G_OBJECT (entryMem), "Type", &typeOfVariables[MOLCAS_TYPE_VARIABLE_MEM]); g_signal_connect(G_OBJECT(entryMem),"changed", G_CALLBACK(changedEntriesVariable),NULL); i = 1; add_widget_table(table, labelDisk, i, 0); entryDisk = addComboListToATable(table, listDisk, nlistDisk, i, 1, 1); gtk_widget_set_sensitive(entryDisk, FALSE); g_object_set_data(G_OBJECT (entryDisk), "Type",&typeOfVariables[MOLCAS_TYPE_VARIABLE_DISK]); g_signal_connect(G_OBJECT(entryDisk),"changed", G_CALLBACK(changedEntriesVariable),NULL); i = 2; add_widget_table(table, labelRamd, i, 0); entryRamd = addComboListToATable(table, listRamd, nlistRamd, i, 1, 1); gtk_widget_set_sensitive(entryRamd, FALSE); g_object_set_data(G_OBJECT (entryRamd), "Type",&typeOfVariables[MOLCAS_TYPE_VARIABLE_RAMD]); g_signal_connect(G_OBJECT(entryRamd),"changed", G_CALLBACK(changedEntriesVariable),NULL); i = 3; add_widget_table(table, labelTrap, i, 0); entryTrap = addComboListToATable(table, listTrap, nlistTrap, i, 1, 1); gtk_widget_set_sensitive(entryTrap, FALSE); g_object_set_data(G_OBJECT (entryTrap), "Type",&typeOfVariables[MOLCAS_TYPE_VARIABLE_TRAP]); g_signal_connect(G_OBJECT(entryTrap),"changed", G_CALLBACK(changedEntriesVariable),NULL); i = 4; add_widget_table(table, labelWorkDir, i, 0); entryWorkDir = addComboListToATable(table, listWorkDir, nlistWorkDir, i, 1, 1); gtk_widget_set_sensitive(entryWorkDir, FALSE); g_object_set_data(G_OBJECT (entryWorkDir), "Type",&typeOfVariables[MOLCAS_TYPE_VARIABLE_WORKDIR]); g_signal_connect(G_OBJECT(entryWorkDir),"changed", G_CALLBACK(changedEntriesVariable),NULL); if(OkButton) g_signal_connect(G_OBJECT(OkButton), "clicked",G_CALLBACK(copySystemVariablesParametersFromTmp),NULL); } /************************************************************************************************************/ void putVariablesInTextEditor() { gchar buffer[BSIZE]; gboolean trap = molcasTrap(); gint mem = molcasMem(); gint disk = molcasDisk(); gint ramd = molcasRamd(); gchar workDir[BSIZE]; molcasWorkDir(workDir); if( trap && mem <0 && disk <0 && ramd <0 && strcmp(workDir,_("Default"))==0) return; sprintf(buffer,"*----------------------------------------------------------------\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"* Molcas Variables\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); if(!molcasTrap()) { sprintf(buffer,"* MOLCAS_TRAP='OFF'\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.program, NULL, buffer,-1); } if(mem>=0) { sprintf(buffer,"* MOLCASMEM=%d\n",mem); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.program, NULL, buffer,-1); } if(disk>=0) { sprintf(buffer,"* MOLCASDISK=%d\n",disk); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.program, NULL, buffer,-1); } if(ramd>=0) { sprintf(buffer,"* MOLCASRAMD=%d\n",ramd); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.program, NULL, buffer,-1); } if(strcmp(workDir,_("Default")) !=0) { sprintf(buffer,"* MOLCASWORKDIR=%s\n",workDir); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.program, NULL, buffer,-1); } sprintf(buffer,"*----------------------------------------------------------------\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /************************************************************************************************************/ static void setOneValue(gchar* t, gchar* value) { gint i; gint k; gchar* p; p = strstr(t,"="); if(p) { i = sscanf(p+1,"%d",&k); if(i<1) sprintf(value,_("Default")); else sprintf(value,"%d",k); } } /************************************************************************************************************/ static void setTrap(gchar* t, gchar* value) { gint i; gchar* p; p = strstr(t,"="); if(p) { i = sscanf(p+1,"%s",value); if(i<1) sprintf(value,"ON"); if(strstr(value,"ON")) return; if(strstr(value,"OFF")) return; sprintf(value,"ON"); } } /************************************************************************************************************/ static void setWorkDir(gchar* t, gchar* value) { gint i; gchar* p; p = strstr(t,"="); if(p) { i = sscanf(p+1,"%s",value); if(i<1) sprintf(value,_("Default")); } } /************************************************************************************************************/ void setMolcasVariablesFromInputFile(gchar* fileName) { gchar t[BSIZE]; guint taille=BSIZE; FILE* file = NULL; sprintf(molcasSystemVariables.mem,_("Default")); sprintf(molcasSystemVariables.disk,_("Default")); sprintf(molcasSystemVariables.ramd,_("Default")); sprintf(molcasSystemVariables.trap,"ON"); sprintf(molcasSystemVariables.workDir,_("Default")); file = FOpen(fileName, "r"); if(!file) return; while(!feof(file)) { if(!fgets(t, taille, file)) break; if( strstr(t, "MOLCASMEM")) setOneValue(t,molcasSystemVariables.mem); if( strstr(t, "MOLCASDISK")) setOneValue(t,molcasSystemVariables.disk); if( strstr(t, "MOLCASRAMD")) setOneValue(t,molcasSystemVariables.ramd); if( strstr(t, "MOLCAS_TRAP")) setTrap(t,molcasSystemVariables.trap); if( strstr(t, "MOLCASWORKDIR")) setWorkDir(t,molcasSystemVariables.workDir); } fclose(file); return; } GabeditSrc250/src/Molcas/MolcasLib.c0000644000175100017510000024111113130665225017511 0ustar alloucheallouche/* MolcasLib.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include "../Common/GabeditType.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Molcas/MolcasLib.h" /********************************************************************************/ void getMolcasBasisList(gchar* Symb, gchar* outfile, gchar* errfile) { FILE* fout=FOpen(outfile,"w"); FILE* ferr=FOpen(errfile,"w"); gchar *filename = g_strdup_printf("%s%smolcasbasis",gabedit_directory(), G_DIR_SEPARATOR_S); FILE* fin = FOpen(filename,"r"); gchar* t = g_malloc(BSIZE*sizeof(gchar)); gchar* dump = g_malloc(BSIZE*sizeof(gchar)); #define NBASIS 400 gchar* basisName[NBASIS]; gchar* author[NBASIS]; gchar* primitive[NBASIS]; gchar* contraction[NBASIS]; gchar* ecpType[NBASIS]; gchar symb[6]; gint nbas = 0; gint n = 0; gint j; for(j=0;j #include "../../Config.h" #include "../Common/Global.h" #include "../Molcas/MolcasTypes.h" #include "../Molcas/MolcasGlobal.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Utils/GabeditTextEdit.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" static MolcasScf molcasScfTmp; static GtkWidget* entryType = NULL; /************************************************************************************************************/ static void initMolcasScf(MolcasScf* mScf) { gint i; sprintf(mScf->title,"SCF data By Gabedit"); sprintf(mScf->type,"Restricted"); sprintf(mScf->method,"HF"); mScf->typeOfOcupations = 0; mScf->charge[0] = TotalCharges[0]; mScf->charge[1] = -1; mScf->aufBau[0] = 0; mScf->aufBau[1] = 0; for(i = 0; i<8; i++) { mScf->numberOfOccupedOrbitals[i] = -1; mScf->numberOfOccupedOrbitalsBeta[i] = -1; } mScf->numberOfOrbitals = 0; mScf->numberOfOrbitalsBeta = 0; mScf->occupationOrbitals = NULL; mScf->occupationOrbitalsBeta = NULL; mScf->zSpin = SpinMultiplicities[0]-1; mScf->guessOrbitalsCore = FALSE; mScf->numberOfNDDOIterations = 0; mScf->numberOfRHFIterations = 0; for(i = 0; i<4; i++) mScf->convergenceThresholds[i] = -1; mScf->diskSize[0] = 1; /* 1MB */ mScf->diskSize[1] = 0; /* 0 -> default -> The size of the I/O buffer by default (512 kByte) */ mScf->ivo = FALSE; } /************************************************************************************************************/ static void initMolcasScfTmp() { initMolcasScf(&molcasScfTmp); } /************************************************************************************************************/ static void copyScfParameters(MolcasScf* newCopy, MolcasScf* toCopy) { gint i; sprintf( newCopy->title,"%s", toCopy->title); sprintf( newCopy->type, "%s", toCopy->type); sprintf( newCopy->method, "%s", toCopy->method); newCopy->typeOfOcupations = toCopy->typeOfOcupations; for(i = 0; i<2; i++) newCopy->charge[i] = toCopy->charge[i]; for(i = 0; i<2; i++) newCopy->aufBau[i] = toCopy->aufBau[i]; for(i = 0; i<8; i++) newCopy->numberOfOccupedOrbitals[i] = -1; for(i = 0; i<8; i++) newCopy->numberOfOccupedOrbitalsBeta[i] = -1; newCopy->numberOfOrbitals = toCopy->numberOfOrbitals; newCopy->numberOfOrbitalsBeta = toCopy->numberOfOrbitalsBeta; if(newCopy->occupationOrbitals) g_free(newCopy->occupationOrbitals); if(newCopy->occupationOrbitalsBeta) g_free(newCopy->occupationOrbitalsBeta); if(toCopy->numberOfOrbitals>0) newCopy->occupationOrbitals = g_malloc(toCopy->numberOfOrbitals*sizeof(gdouble)); for(i = 0; inumberOfOrbitals; i++) newCopy->occupationOrbitals[i] = toCopy->occupationOrbitals[i]; if(toCopy->numberOfOrbitalsBeta>0) newCopy->occupationOrbitalsBeta = g_malloc(toCopy->numberOfOrbitalsBeta*sizeof(gdouble)); for(i = 0; inumberOfOrbitalsBeta; i++) newCopy->occupationOrbitalsBeta[i] = toCopy->occupationOrbitalsBeta[i]; newCopy->zSpin = toCopy->zSpin; newCopy->guessOrbitalsCore = toCopy->guessOrbitalsCore; newCopy->numberOfNDDOIterations = toCopy->numberOfNDDOIterations; newCopy->numberOfRHFIterations = toCopy->numberOfRHFIterations; for(i=0;i<4;i++) newCopy-> convergenceThresholds [i] = toCopy->convergenceThresholds[i]; for(i=0;i<2;i++) newCopy->diskSize[i] = toCopy->diskSize[i]; newCopy->ivo = toCopy->ivo; } /************************************************************************************************************/ static void copyScfParametersFromTmp(GtkWidget *win, gpointer data) { copyScfParameters(&molcasScf, &molcasScfTmp); TotalCharges[0] = molcasScf.charge[0]; SpinMultiplicities[0] = molcasScf.zSpin+1; } /********************************************************************************/ static void setComboZSpin(GtkWidget *comboZSpin, gboolean restricted) { GList *glist = NULL; gint i; gint nlist = 0; gchar** list = NULL; gint k; gint kinc; gint ne = molcasMolecule.numberOfValenceElectrons - molcasScfTmp.charge[0]; if(restricted) nlist = 1; else { if(ne%2==0) nlist = ne/2+1; else nlist = (ne+1)/2; } if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; t = g_strdup_printf("%d",charge); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /********************************************************************************/ static void setComboCharge(GtkWidget *comboCharge, gboolean restricted) { GList *glist = NULL; gint i; gint nlist = (molcasMolecule.numberOfValenceElectrons-1)/2*2 + 1; gchar** list = NULL; gint k; if(restricted) nlist = (molcasMolecule.numberOfValenceElectrons-1)/2*2 + 1; else nlist = molcasMolecule.numberOfValenceElectrons*2-2+1; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; g_object_set_data(G_OBJECT (entry), "Combo",combo); return entry; } /***********************************************************************************************/ static void initScfEntryType() { entryType = NULL; } /***********************************************************************************************/ void activateScfEntryType() { if(entryType && GTK_IS_WIDGET(entryType)) { gtk_entry_set_text(GTK_ENTRY(entryType)," "); if(SpinMultiplicities[0]==1) gtk_entry_set_text(GTK_ENTRY(entryType),"Restricted"); /* pour activer entryType */ else gtk_entry_set_text(GTK_ENTRY(entryType),"UnRestricted"); /* pour activer entryType */ } } /***********************************************************************************************/ void createScfFrame(GtkWidget *win, GtkWidget *box, GtkWidget *OkButton) { GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget *table = gtk_table_new(3,4,FALSE); GtkWidget* entryMethod = NULL; GtkWidget* labelTypes = gtk_label_new(_("Type : ")); GtkWidget* labelMethods = gtk_label_new(_("Method : ")); gint nlistTypes = 2; gchar* listTypes[] = {"Restricted", "UnRestricted"}; gint nlistMethods = 14; gchar* listMethods[] = { "HF", "BLYP", "B3LYP", "B3LYP5", "HFB", "HFS", "LDA", "LDA5", "LSDA", "LSDA5", "SVWN", "SVWN5", "TLYP", "XPBE" }; GtkWidget* entryCharge = NULL; GtkWidget* comboCharge = NULL; GtkWidget* labelCharge = gtk_label_new(_("Charge : ")); gint nlistCharge = 1; gchar* listCharge[] = {"0"}; GtkWidget* labelNumberOfElectrons = gtk_label_new(" "); GtkWidget* entryZSpin = NULL; GtkWidget* comboZSpin = NULL; GtkWidget* labelZSpin = gtk_label_new(_("2* Z Spin : ")); gint nlistZSpin = 1; gchar* listZSpin[] = {"0"}; initMolcasScfTmp(); initMolcasScf(&molcasScf); frame = gtk_frame_new (_("SCF Program")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); add_widget_table(table, labelTypes, 0, 0); entryType = addComboListToATable(table, listTypes, nlistTypes, 0, 1, 1); gtk_widget_set_sensitive(entryType, FALSE); add_widget_table(table, labelMethods, 0, 2); entryMethod = addComboListToATable(table, listMethods, nlistMethods, 0, 3, 1); gtk_widget_set_sensitive(entryMethod, FALSE); add_widget_table(table, labelCharge, 1, 0); entryCharge = addComboListToATable(table, listCharge, nlistCharge, 1, 1, 1); comboCharge = g_object_get_data(G_OBJECT (entryCharge), "Combo"); gtk_widget_set_sensitive(entryCharge, FALSE); gtk_table_attach(GTK_TABLE(table),labelNumberOfElectrons,2,2+2,1,1+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); add_widget_table(table, labelZSpin, 2, 0); entryZSpin = addComboListToATable(table, listZSpin, nlistZSpin, 2, 1, 1); comboZSpin = g_object_get_data(G_OBJECT (entryZSpin), "Combo"); gtk_widget_set_sensitive(entryZSpin, FALSE); g_signal_connect(G_OBJECT(entryType),"changed", G_CALLBACK(changedEntryType),NULL); g_object_set_data(G_OBJECT (entryType), "Combo", comboCharge); g_signal_connect(G_OBJECT(entryZSpin),"changed", G_CALLBACK(changedEntryZSpin),NULL); g_object_set_data(G_OBJECT (entryCharge), "Combo", comboZSpin); g_object_set_data(G_OBJECT (entryCharge), "Label", labelZSpin); g_object_set_data(G_OBJECT (entryCharge), "LabelNumberOfElectrons", labelNumberOfElectrons); g_signal_connect(G_OBJECT(entryCharge),"changed", G_CALLBACK(changedEntryCharge),NULL); g_signal_connect(G_OBJECT(entryMethod),"changed", G_CALLBACK(changedEntryMethod),NULL); gtk_entry_set_text(GTK_ENTRY(entryMethod),"HF"); activateScfEntryType(); molcasScfTmp.charge[0] = TotalCharges[0]; if(strcmp(molcasScfTmp.type,"Restricted")==0) setComboCharge(comboCharge, TRUE); else setComboCharge(comboCharge, FALSE); if(OkButton) { g_signal_connect(G_OBJECT(OkButton), "clicked",G_CALLBACK(copyScfParametersFromTmp),NULL); g_signal_connect(G_OBJECT(OkButton), "clicked",G_CALLBACK(initScfEntryType),NULL); } } /************************************************************************************************************/ static void putBeginScfInTextEditor() { gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.program, &molcasColorBack.program, " &SCF\n",-1); } /************************************************************************************************************/ static void putTitleScfInTextEditor() { gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "Title=",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, molcasScf.title,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); } /************************************************************************************************************/ static void putMethodScfInTextEditor() { gchar buffer[BSIZE]; if(strcmp(molcasScf.type,"Restricted")==0 && strcmp(molcasScf.method,"HF")==0) return; if(strcmp(molcasScf.type,"UnRestricted")==0) { sprintf(buffer,"UHF\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, buffer,-1); } if(strcmp(molcasScf.method,"HF")!=0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "KSDFT\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, molcasScf.method,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); } } /************************************************************************************************************/ static void putChargeScfInTextEditor() { gchar buffer[BSIZE]; if(molcasScf.typeOfOcupations ==0 ) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "Charge=",-1); if(molcasScf.charge[1]>0) sprintf(buffer,"%d %d\n", molcasScf.charge[0], molcasScf.charge[1]); else sprintf(buffer,"%d\n", molcasScf.charge[0]); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /************************************************************************************************************/ static void putZSpinScfInTextEditor() { gchar buffer[BSIZE]; if(strcmp(molcasScf.type,"Restricted")==0) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "ZSpin=",-1); sprintf(buffer,"%d\n", molcasScf.zSpin); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /************************************************************************************************************/ static void putIterationsScfInTextEditor() { gchar buffer[BSIZE]; if(molcasScf.numberOfNDDOIterations == 0 && molcasScf.numberOfRHFIterations == 0) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "Iterations\n",-1); sprintf(buffer,"* NDDO and RHF iterations\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer," %d %d\n", molcasScf.numberOfNDDOIterations, molcasScf.numberOfRHFIterations); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /************************************************************************************************************/ static void putThresholdScfInTextEditor() { gchar buffer[BSIZE]; gint i; for(i=0; i<4; i++) if(molcasScf.convergenceThresholds[i] <0) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "Threshold\n",-1); sprintf(buffer,"* convergence thresholds \n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"* EThr DThr FThr DltNTh\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"%e %e %e %e\n", molcasScf.convergenceThresholds[0], molcasScf.convergenceThresholds[1], molcasScf.convergenceThresholds[2], molcasScf.convergenceThresholds[3] ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /************************************************************************************************************/ static void putDiskScfInTextEditor() { gchar buffer[BSIZE]; if( molcasScf.diskSize[0] == 1 && molcasScf.diskSize[1] == 0) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "Disk\n",-1); sprintf(buffer,"* 1 -> Semi-direct algorithm writing max 128k words (1MByte) to disk \n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"* 0 -> The size of the I/O buffer by default (512 kByte) \n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"1 0\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /************************************************************************************************************/ static void putIVOScfInTextEditor() { gchar buffer[BSIZE]; if(!molcasScf.ivo) return; if(molcasOptimization.numberOfIterations>0) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "Ivo\n",-1); sprintf(buffer,"* Improve the virtuals for MCSCF\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /************************************************************************************************************/ static void putEndScfInTextEditor() { /* sprintf(buffer,"*----------------------------------------------------------------\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); */ gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.program, &molcasColorBack.program, "End of input\n\n",-1); /* this action is done automatically - all grid & molden files are copied to submit directory.*/ /* if(molcasOptimization.numberOfIterations<1) { gchar buffer[BSIZE]; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n\n", -1); sprintf(buffer,"! cp $Project.scf.molden $MOLCAS_SUBMIT_PWD/$Project.scf.molden\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.shellCommand, &molcasColorBack.shellCommand, buffer, -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n", -1); } */ } /************************************************************************************************************/ void putScfInfoInTextEditor() { copyScfParameters(&molcasScf, &molcasScfTmp); putBeginScfInTextEditor(); putTitleScfInTextEditor(); putMethodScfInTextEditor(); putChargeScfInTextEditor(); putZSpinScfInTextEditor(); putIterationsScfInTextEditor(); putThresholdScfInTextEditor(); putDiskScfInTextEditor(); putIVOScfInTextEditor(); putEndScfInTextEditor(); } /************************************************************************************************************/ GabeditSrc250/src/Molcas/MolcasGridIT.c0000644000175100017510000001153013130665225020125 0ustar alloucheallouche/* MolcasGridIT.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include "../../Config.h" #include "../Common/Global.h" #include "../Molcas/MolcasTypes.h" #include "../Molcas/MolcasGlobal.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Utils/GabeditTextEdit.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" static MolcasGridIT molcasGridITTmp; /************************************************************************************************************/ static void initMolcasGridIT(MolcasGridIT* mGridIt) { mGridIt->ascii = TRUE; mGridIt->all = TRUE; } /************************************************************************************************************/ static void initMolcasGridITTmp() { initMolcasGridIT(&molcasGridITTmp); } /************************************************************************************************************/ static void copyGridITParameters(MolcasGridIT* newCopy, MolcasGridIT* toCopy) { newCopy->ascii = toCopy->ascii; newCopy->all = toCopy->all; } /************************************************************************************************************/ static void putBeginGridITInTextEditor() { gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.program, &molcasColorBack.program, " &GRID_IT\n",-1); } /************************************************************************************************************/ static void putAsciiInTextEditor() { if(!molcasGridIT.ascii) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "ASCII\n",-1); } /************************************************************************************************************/ static void putAllInTextEditor() { if(!molcasGridIT.all) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "ALL\n",-1); } /************************************************************************************************************/ static void putEndGridITInTextEditor() { gchar buffer[BSIZE]; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.program, &molcasColorBack.program, "End of input\n",-1); /* this action is done automatically - all grid & molden files are copied to submit directory.*/ /* sprintf(buffer,"! cp $Project.grid $MOLCAS_SUBMIT_PWD/$Project.grid\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.shellCommand, &molcasColorBack.shellCommand, buffer, -1); */ sprintf(buffer,"* remove the first star in the next file for get the cube files\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.shellCommand, &molcasColorBack.shellCommand, buffer, -1); sprintf(buffer,"*! cp *.cub* $MOLCAS_SUBMIT_PWD/.\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.shellCommand, &molcasColorBack.shellCommand, buffer, -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n", -1); } /************************************************************************************************************/ void putGridITInfoInTextEditor() { initMolcasGridITTmp(); initMolcasGridIT(&molcasGridIT); copyGridITParameters(&molcasGridIT, &molcasGridITTmp); putBeginGridITInTextEditor(); putAsciiInTextEditor(); putAllInTextEditor(); putEndGridITInTextEditor(); } /************************************************************************************************************/ GabeditSrc250/src/Molcas/MolcasBasis.h0000644000175100017510000000266313130665225020060 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MOLCASBASIS_H__ #define __GABEDIT_MOLCASBASIS_H__ GtkWidget* createMolcasBasisWindow(); #endif /* __GABEDIT_MOLCASBASIS_H__ */ GabeditSrc250/src/Molcas/MolcasGridIT.h0000644000175100017510000000266213130665225020140 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MOLCASGRIDIT_H__ #define __GABEDIT_MOLCASGRIDIT_H__ void putGridITInfoInTextEditor(); #endif /* __GABEDIT_MOLCASGRIDIT_H__ */ GabeditSrc250/src/Molcas/Molcas.c0000644000175100017510000002001013130665225017053 0ustar alloucheallouche/* Molcas.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Common/Global.h" #include "../Molcas/MolcasTypes.h" #include "../Molcas/MolcasGlobal.h" #include "../Molcas/MolcasVariables.h" #include "../Molcas/MolcasOptimization.h" #include "../Molcas/MolcasGateWay.h" #include "../Molcas/MolcasSeward.h" #include "../Molcas/MolcasScf.h" #include "../Molcas/MolcasGridIT.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" static GtkWidget *Wins=NULL; static gboolean newFile = FALSE; /************************************************************************************************************/ static void setColors() { static gboolean first = TRUE; if(!first) return; first = FALSE; molcasColorFore.program.red = 65535; molcasColorFore.program.green = 0; molcasColorFore.program.blue = 0; molcasColorBack.program.red = (gushort)(65535/1.2); molcasColorBack.program.green = (gushort)(65535/1.2); molcasColorBack.program.blue = (gushort)(65535/1.2); molcasColorFore.shellCommand.red = 0; molcasColorFore.shellCommand.green = 65535; molcasColorFore.shellCommand.blue = 65535; molcasColorBack.shellCommand.red = (gushort)(65535/2.0); molcasColorBack.shellCommand.green = (gushort)(65535/2.0); molcasColorBack.shellCommand.blue = (gushort)(65535/2.0); molcasColorFore.internCommand.red = 0; molcasColorFore.internCommand.green = 65535; molcasColorFore.internCommand.blue = 0; molcasColorBack.internCommand.red = (gushort)(65535/2.0); molcasColorBack.internCommand.green = (gushort)(65535/2.0); molcasColorBack.internCommand.blue = (gushort)(65535/2.0); molcasColorFore.subProgram.red = 65535; molcasColorFore.subProgram.green = 0; molcasColorFore.subProgram.blue = 65535; } /************************************************************************************************************/ void destroyWinsMolcas(GtkWidget *win) { destroy(Wins,NULL); Wins = NULL; initGateWayButtons(); } /************************************************************************************************************/ static void toCancelWin(GtkWidget* win,gpointer data) { Cancel_YesNo(win,data, destroy_children); } /************************************************************************************************************/ static void putTitleInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"*================================================================\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"* File made in Gabedit\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"*================================================================\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); } /************************************************************************************************************/ static void putInfoInTextEditor(GtkWidget *button, gpointer data) { setColors(); if(newFile) { reset_name_files(); ClearText(text); } else { gint nchar; nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); gabedit_text_set_point(GABEDIT_TEXT(text),nchar); } data_modify(TRUE); putTitleInTextEditor(); putVariablesInTextEditor(); putBeginOptimizationInTextEditor(); putGateWayInfoInTextEditor(); putSewardInfoInTextEditor(); putScfInfoInTextEditor(); putEndOptimizationInTextEditor(); putGridITInfoInTextEditor(); iprogram = PROG_IS_MOLCAS; gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0); } /*********************************************************************************************/ static GtkWidget* addHboxToTable(GtkWidget* table, gint i, gint j, gint ki, gint kj) { GtkWidget *hbox = gtk_hbox_new(TRUE, 5); gtk_table_attach(GTK_TABLE(table),hbox,j,j+kj,i,i+ki, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); return hbox; } /************************************************************************************************************/ static void molcasInputFileWindow(gboolean newInputFile) { GtkWidget *button; GtkWidget *hbox = NULL; GtkWidget *table = gtk_table_new(4,2,FALSE); fileopen.command=g_strdup(NameCommandMolcas); newFile = newInputFile; setMolcasMolecule(); freeMolcasOptimization(); if(molcasMolecule.numberOfAtoms <1) { Message( _( "You must initially define your geometry.\n\n" "From the principal Menu select : Geometry/Draw\n" "and draw (or read) your molecule.") , _("Error"),TRUE); return; } if(Wins) destroy_children(Wins); Wins= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Wins),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Wins),GTK_WINDOW(Fenetre)); gtk_window_set_title(>K_DIALOG(Wins)->window,_("Molcas input")); init_child(Wins, destroyWinsMolcas,_(" Molcas input ")); g_signal_connect(G_OBJECT(Wins),"delete_event",(GCallback)destroy_children,NULL); gtk_widget_realize(Wins); button = create_button(Wins,_("Cancel")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK( toCancelWin),GTK_OBJECT(Wins)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show (button); button = create_button(Wins,_("OK")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->vbox), table, FALSE, TRUE, 5); hbox =addHboxToTable(table, 0, 0, 2, 1); createSystemVariablesFrame(Wins, hbox, button); hbox =addHboxToTable(table, 0, 1, 1, 1); createOptimizationFrame(Wins, hbox); hbox =addHboxToTable(table, 1, 1, 1, 1); createSymmetryFrame(Wins, hbox); hbox =addHboxToTable(table, 2, 0, 1, 2); createSolvationFrame(Wins, hbox); hbox =addHboxToTable(table, 3, 0, 2, 3); createScfFrame(Wins, hbox, button); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(putInfoInTextEditor),GTK_OBJECT(Wins)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(destroy_children),GTK_OBJECT(Wins)); gtk_widget_show_all(Wins); molcasWin = Wins; } /************************************************************************************************************/ void newMolcas() { molcasInputFileWindow(TRUE); } /************************************************************************************************************/ void insertMolcas() { molcasInputFileWindow(FALSE); } GabeditSrc250/src/Molcas/MolcasGateWay.h0000644000175100017510000000354313130665225020356 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MOLCASGATEWAY_H__ #define __GABEDIT_MOLCASGATEWAY_H__ void initGateWayButtons(); void initMolcasMolecule(); void freeMolcasMolecule(); gboolean setMolcasMolecule(); gint resetNumberOfValenceElectrons(); void setMolcasGeometryFromInputFile(gchar* fileName); void createSymmetryFrame(GtkWidget *win, GtkWidget *box); void putVariableConstantsZMatInTextEditor(); void putSymmetryInTextEditor(); void putMoleculeInTextEditor(); void createSolvationFrame(GtkWidget *win, GtkWidget *box); void putGateWayInfoInTextEditor(); #endif /* __GABEDIT_MOLCASGATEWAY_H__ */ GabeditSrc250/src/Molcas/Molcas.h0000644000175100017510000000273313130665225017074 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MOLCAS_H__ #define __GABEDIT_MOLCAS_H__ void destroyWinsMolcas(GtkWidget *win,gpointer data); void newMolcas(); void insertMolcas(); #endif /* __GABEDIT_MOLCAS_H__ */ GabeditSrc250/src/Molcas/MolcasTypes.h0000644000175100017510000000501013130665225020110 0ustar alloucheallouche #ifndef __GABEDIT_MOLCASTYPES_H__ #define __GABEDIT_MOLCASTYPES_H__ typedef struct _MolcasAtom { gdouble position[3]; gint type; }MolcasAtom; typedef struct _MolcasMolecule { gint numberOfAtoms; gint totalNumberOfElectrons; gint numberOfValenceElectrons; gint numberOfDifferentKindsOfAtoms; MolcasAtom* listOfAtoms; gchar** symbol; gchar* groupSymbol; gint* numberOfAtomsOfEachType; gint* numberOfAtomsOfEachTypeForAllAtoms; gint numberOfMolcasGenerators; gchar* molcasGenerators[3]; gchar** basis; }MolcasMolecule; typedef struct _MolcasOptimization { gint numberOfIterations; }MolcasOptimization; typedef struct _MolcasSolvation { gchar method[100]; gchar solvent[100]; }MolcasSolvation; typedef struct _MolcasScf { gchar title[1024]; /* RHF, UHF, BLYP, B3LYP, B3LYP5, HFB, HFS, LDA, LDA5, LSDA, LSDA5, SVWN, SVWN5, TLYP, XPBE */ gchar method[100]; gchar type[100]; /* You can use one and only one for Charge, AUFBAU or OCCUPIED Keyword*/ gint typeOfOcupations; /* 0-> Default, 1-> charge KeyWord 2-> AUFBAU, 3-> Occupied Keyword */ gint charge[2]; /* Charge Key Word : charge and m parameter */ gint aufBau[2]; /* AUFBAU Key Word : number of electrons pair and m parameter */ gint numberOfOccupedOrbitals[8]; /* OCCUPIED (of alpha for UHF)°*/ gint numberOfOccupedOrbitalsBeta[8]; /* beta number of Orbitals occuped for UHF */ gint numberOfOrbitals; gint numberOfOrbitalsBeta; gdouble* occupationOrbitals; /* Occupation (0 to 2 ) by orbitals(of alpha for UHF)°*/ gdouble* occupationOrbitalsBeta; /* beta occupations for UHF */ gint numberOfNDDOIterations; gint numberOfRHFIterations; gdouble convergenceThresholds[4]; /* EThr DThr FThr DltNTh */ gdouble diskSize[2];/* Semi-direct algorithm in Mb and size of the I/O buffer*/ gboolean ivo; /* Improve the virtuals for MCSCF */ /* for UHF program */ gint zSpin; /* the default value is 0 (1) for a system with a even (odd) number of electrons */ gboolean guessOrbitalsCore; /* CORE OR NDDO */ }MolcasScf; typedef struct _MolcasColorBack { GdkColor program; GdkColor shellCommand; GdkColor internCommand; }MolcasColorBack; typedef struct _MolcasColorFore { GdkColor program; GdkColor shellCommand; GdkColor internCommand; GdkColor subProgram; }MolcasColorFore; typedef struct _MolcasSystemVariables { gchar mem[100]; gchar disk[100]; gchar ramd[100]; gchar trap[100]; gchar workDir[100]; }MolcasSystemVariables; typedef struct _MolcasGridIT { gboolean ascii; gboolean all; }MolcasGridIT; #endif /* __GABEDIT_MOLCASTYPES_H__ */ GabeditSrc250/src/Molcas/Dep.mk0000644000175100017510000001073313130664665016554 0ustar allouchealloucheMolcas.o: Molcas.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Molcas/MolcasTypes.h \ ../Molcas/MolcasGlobal.h ../Molcas/MolcasVariables.h \ ../Molcas/MolcasOptimization.h ../Molcas/MolcasGateWay.h \ ../Molcas/MolcasSeward.h ../Molcas/MolcasScf.h ../Molcas/MolcasGridIT.h \ ../Utils/UtilsInterface.h ../Geometry/GeomGlobal.h \ ../Geometry/InterfaceGeom.h ../Utils/Utils.h ../Utils/AtomsProp.h \ ../Utils/Constants.h ../Utils/GabeditTextEdit.h MolcasGateWay.o: MolcasGateWay.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Molcas/MolcasTypes.h \ ../Molcas/MolcasGlobal.h ../Molcas/MolcasBasis.h ../Molcas/MolcasScf.h \ ../Geometry/GeomGlobal.h ../Geometry/GeomConversion.h \ ../Geometry/GeomXYZ.h ../Geometry/GeomZmatrix.h ../Geometry/Fragments.h \ ../Geometry/DrawGeom.h ../Geometry/DrawGeomCairo.h \ ../Geometry/Fragments.h ../Utils/Utils.h ../Utils/UtilsInterface.h \ ../Utils/Constants.h ../Geometry/InterfaceGeom.h ../Common/Windows.h \ ../Utils/AtomsProp.h ../Utils/GabeditTextEdit.h \ ../Symmetry/MoleculeSymmetry.h ../Symmetry/MoleculeSymmetryInterface.h MolcasSeward.o: MolcasSeward.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Molcas/MolcasTypes.h \ ../Molcas/MolcasGlobal.h ../Molcas/MolcasBasis.h ../Molcas/MolcasScf.h \ ../Geometry/GeomGlobal.h ../Geometry/GeomConversion.h \ ../Geometry/GeomXYZ.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/Constants.h \ ../Geometry/InterfaceGeom.h ../Common/Windows.h ../Utils/AtomsProp.h \ ../Utils/GabeditTextEdit.h ../Symmetry/MoleculeSymmetry.h \ ../Symmetry/MoleculeSymmetryInterface.h MolcasScf.o: MolcasScf.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Molcas/MolcasTypes.h \ ../Molcas/MolcasGlobal.h ../Geometry/GeomGlobal.h \ ../Geometry/GeomConversion.h ../Utils/Utils.h ../Utils/UtilsInterface.h \ ../Utils/Constants.h ../Utils/AtomsProp.h ../Utils/GabeditTextEdit.h \ ../Symmetry/MoleculeSymmetry.h ../Symmetry/MoleculeSymmetryInterface.h MolcasGridIT.o: MolcasGridIT.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Molcas/MolcasTypes.h \ ../Molcas/MolcasGlobal.h ../Geometry/GeomGlobal.h \ ../Geometry/GeomConversion.h ../Utils/Utils.h ../Utils/UtilsInterface.h \ ../Utils/Constants.h ../Utils/AtomsProp.h ../Utils/GabeditTextEdit.h \ ../Symmetry/MoleculeSymmetry.h ../Symmetry/MoleculeSymmetryInterface.h MolcasOptimization.o: MolcasOptimization.c ../../Config.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Molcas/MolcasTypes.h \ ../Molcas/MolcasGlobal.h ../Molcas/MolcasGateWay.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/Constants.h \ ../Utils/GabeditTextEdit.h MolcasVariables.o: MolcasVariables.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Molcas/MolcasTypes.h \ ../Molcas/MolcasGlobal.h ../Geometry/GeomGlobal.h \ ../Geometry/GeomConversion.h ../Utils/Utils.h ../Utils/UtilsInterface.h \ ../Utils/Constants.h ../Utils/AtomsProp.h ../Utils/GabeditTextEdit.h \ ../Symmetry/MoleculeSymmetry.h ../Symmetry/MoleculeSymmetryInterface.h MolcasLib.o: MolcasLib.c ../../Config.h ../Common/GabeditType.h \ ../Utils/Utils.h ../Utils/Constants.h ../Molcas/MolcasLib.h MolcasBasisLibrary.o: MolcasBasisLibrary.c ../../Config.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Molcas/MolcasLib.h \ ../Utils/Utils.h ../Utils/UtilsInterface.h ../Utils/AtomsProp.h \ ../Utils/Constants.h ../Molcas/MolcasBasisLibrary.h \ ../Common/StockIcons.h MolcasBasis.o: MolcasBasis.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Molcas/MolcasTypes.h \ ../Molcas/MolcasGlobal.h ../Molcas/MolcasVariables.h \ ../Molcas/MolcasOptimization.h ../Molcas/MolcasGateWay.h \ ../Molcas/MolcasScf.h ../Molcas/MolcasLib.h ../Molcas/MolcasBasis.h \ ../Utils/UtilsInterface.h ../Geometry/GeomGlobal.h \ ../Geometry/InterfaceGeom.h ../Utils/Utils.h ../Utils/AtomsProp.h \ ../Utils/Constants.h GabeditSrc250/src/Molcas/MolcasLib.h0000644000175100017510000000276213130665225017525 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MOLCASLIB_H__ #define __GABEDIT_MOLCASLIB_H__ void getMolcasBasisList(gchar* Symb, gchar* outfile, gchar* errfile); gboolean create_molcas_basis_file(); #endif /* __GABEDIT_MOLCASLIB_H__ */ GabeditSrc250/src/Molcas/MolcasScf.h0000644000175100017510000000301513130665225017522 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MOLCASSCF_H__ #define __GABEDIT_MOLCASSCF_H__ void activateScfEntryType(); void createScfFrame(GtkWidget *win, GtkWidget *box, GtkWidget *OkButton); void putScfInfoInTextEditor(); #endif /* __GABEDIT_MOLCASSCF_H__ */ GabeditSrc250/src/Molcas/MolcasOptimization.c0000644000175100017510000002337313130665225021501 0ustar alloucheallouche/* MolcasOptimization.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include "../../Config.h" #include "../Common/Global.h" #include "../Molcas/MolcasTypes.h" #include "../Molcas/MolcasGlobal.h" #include "../Molcas/MolcasGateWay.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" /************************************************************************************************************/ /* 0-> Single point * 1-> Optimization */ static gint typeOfCalcul[] = { 0,1}; /************************************************************************************************************/ void initMolcasOptimization() { molcasOptimization.numberOfIterations = 0; } /************************************************************************************************************/ void freeMolcasOptimization() { static gboolean first = TRUE; if(first) { initMolcasOptimization(); first = FALSE; return; } molcasOptimization.numberOfIterations = 0; } /**************************************************************************************************************************************/ static void activateRadioButton(GtkWidget *button, gpointer data) { gint* type = NULL; GtkWidget *entryIteration = NULL; GtkWidget *labelIteration = NULL; if(!GTK_IS_WIDGET(button)) return; type = g_object_get_data(G_OBJECT (button), "Type"); entryIteration = g_object_get_data(G_OBJECT (button), "EntryIteration"); labelIteration = g_object_get_data(G_OBJECT (button), "LabelIteration"); if(type) { if(*type == typeOfCalcul[0]) { if(entryIteration) gtk_widget_set_sensitive(entryIteration, FALSE); if(labelIteration) gtk_widget_set_sensitive(labelIteration, FALSE); molcasOptimization.numberOfIterations = 0; } if(*type == typeOfCalcul[1]) { if(entryIteration) gtk_widget_set_sensitive(entryIteration, TRUE); if(labelIteration) gtk_widget_set_sensitive(labelIteration, TRUE); molcasOptimization.numberOfIterations = 15; } } } /**************************************************************************************************************************************/ static void changedEntryMaxIterations(GtkWidget *entry, gpointer data) { G_CONST_RETURN gchar* entryText = NULL; gchar* tmp = NULL; if(!GTK_IS_WIDGET(entry)) return; entryText = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(entryText)<1)return; tmp = g_strdup(entryText); delete_all_spaces(tmp); if(isInteger(tmp)) { if(atoi(tmp)>0) molcasOptimization.numberOfIterations = atoi(tmp); else { molcasOptimization.numberOfIterations = 15; gtk_entry_set_text(GTK_ENTRY(entry),"15"); } } else { molcasOptimization.numberOfIterations = 15; gtk_entry_set_text(GTK_ENTRY(entry),"15"); } g_free(tmp); } /**************************************************************************************************************************************/ static GtkWidget* addRadioButtonToATable(GtkWidget* table, GtkWidget* friendButton, gchar* label, gint i, gint j, gint k) { GtkWidget *newButton; if(friendButton) newButton = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (friendButton)), label); else newButton = gtk_radio_button_new_with_label( NULL, label); gtk_table_attach(GTK_TABLE(table),newButton,j,j+k,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT (newButton), "Type",NULL); return newButton; } /**************************************************************************************************************************************/ void createOptimizationFrame(GtkWidget *win, GtkWidget *box) { GtkWidget* button; GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget *table = gtk_table_new(2,2,FALSE); GtkWidget* entryIteration = gtk_entry_new(); GtkWidget* label = gtk_label_new(_("Number of iterations : ")); frame = gtk_frame_new (_("Type of caclul")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); button = addRadioButtonToATable(table, NULL, _("Single point"), 0, 0,1); g_object_set_data(G_OBJECT (button), "Type",&typeOfCalcul[0]); g_object_set_data(G_OBJECT (button), "EntryIteration",entryIteration); g_object_set_data(G_OBJECT (button), "LabelIteration",label); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); button = addRadioButtonToATable(table, button, _("Optimization of geometry"), 1, 0, 1); g_object_set_data(G_OBJECT (button), "Type",&typeOfCalcul[1]); g_object_set_data(G_OBJECT (button), "EntryIteration",entryIteration); g_object_set_data(G_OBJECT (button), "LabelIteration",label); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE); add_widget_table(table, label, 0, 1); g_signal_connect(G_OBJECT(entryIteration),"changed", G_CALLBACK(changedEntryMaxIterations),button); gtk_entry_set_text(GTK_ENTRY(entryIteration),"15"); add_widget_table(table, entryIteration, 1, 1); gtk_widget_set_sensitive(entryIteration, FALSE); gtk_widget_set_sensitive(label, FALSE); molcasOptimization.numberOfIterations = 0; } /************************************************************************************************************/ void putBeginOptimizationInTextEditor() { gchar buffer[BSIZE]; if(molcasOptimization.numberOfIterations<1) return; /* gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.internCommand, &molcasColorBack.internCommand, ">>> Set output override\n",-1); */ sprintf(buffer,">>> Set maxiter %d\n",molcasOptimization.numberOfIterations); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.internCommand, &molcasColorBack.internCommand, buffer, -1); sprintf(buffer,">>> Do while\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.internCommand, &molcasColorBack.internCommand, buffer, -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); } /************************************************************************************************************/ void putEndOptimizationInTextEditor() { /* gchar buffer[BSIZE];*/ if(molcasOptimization.numberOfIterations<1) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.program, &molcasColorBack.program, " &ALASKA &END\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.program, &molcasColorBack.program, "End Of Input\n\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.program, &molcasColorBack.program, " &SLAPAF &END\n",-1); putVariableConstantsZMatInTextEditor(); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.program, &molcasColorBack.program, "End Of Input\n\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.internCommand, &molcasColorBack.internCommand, ">>> EndDo\n\n",-1); /* this action is done automatically - all grid & molden files are copied to submit directory.*/ /* sprintf(buffer,"! cp $Project.geo.molden $MOLCAS_SUBMIT_PWD/$Project.geo.molden\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.shellCommand, &molcasColorBack.shellCommand, buffer, -1); sprintf(buffer,"! cp $Project.scf.molden $MOLCAS_SUBMIT_PWD/$Project.scf.molden\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.shellCommand, &molcasColorBack.shellCommand, buffer, -1); sprintf(buffer,"! cp $Project.freq.molden $MOLCAS_SUBMIT_PWD/$Project.freq.molden\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.shellCommand, &molcasColorBack.shellCommand, buffer, -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n\n", -1); */ } /************************************************************************************************************/ void putOptimizationInfoInTextEditor() { putBeginOptimizationInTextEditor(); putEndOptimizationInTextEditor(); } /************************************************************************************************************/ GabeditSrc250/src/Molcas/MolcasBasis.c0000644000175100017510000003704013130665225020050 0ustar alloucheallouche/* MolcasBasis.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Molcas/MolcasTypes.h" #include "../Molcas/MolcasGlobal.h" #include "../Molcas/MolcasVariables.h" #include "../Molcas/MolcasOptimization.h" #include "../Molcas/MolcasGateWay.h" #include "../Molcas/MolcasScf.h" #include "../Molcas/MolcasLib.h" #include "../Molcas/MolcasBasis.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" /************************************************************************************************************/ typedef enum { ATOMLIST_SYMBOL = 0, ATOMLIST_DATA, ATOMLIST_NUMBER_OF_COLUMNS, } MolCasAtomsList; typedef enum { BASISLIST_NAME = 0, BASISLIST_DATA, BASISLIST_NUMBER_OF_COLUMNS, } MolCasBAsisList; /************************************************************************************************************/ static GtkWidget *labelInfo = NULL; static GtkWidget *listOfAtoms = NULL; static GtkWidget *listOfBasis = NULL; static GtkWidget *Wins = NULL; static GtkWidget *hBasisBox = NULL; static GtkWidget *vBoxPaned = NULL; static gint numberOfSelectedAtom = -1; /************************************************************************************************************/ static void selectRow(GtkWidget* list, gint row) { GtkTreePath *path; gchar* tmp = g_strdup_printf("%d",row); path = gtk_tree_path_new_from_string (tmp); g_free(tmp); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (list)), path); gtk_tree_path_free(path); } /************************************************************************************************************/ static void detroyBasisWindow() { destroy(Wins,NULL); Wins = NULL; labelInfo = NULL; listOfAtoms = NULL; listOfBasis = NULL; hBasisBox = NULL; vBoxPaned = NULL; numberOfSelectedAtom = -1; } /************************************************************************************************************/ static gint setMolcasMoleculeBasis(gint numAtom) { GtkTreeModel *model; GtkTreeIter iter; gchar* base; gchar* pathString = g_strdup_printf("%d",numAtom); model = gtk_tree_view_get_model(GTK_TREE_VIEW(listOfAtoms)); if(!gtk_tree_model_get_iter_from_string (model, &iter, pathString)) return 1; gtk_tree_model_get (model, &iter, ATOMLIST_DATA, &base, -1); if(numAtom<0) return 0; if(molcasMolecule.numberOfDifferentKindsOfAtoms<1) return 0; if(molcasMolecule.basis[numAtom]) g_free(molcasMolecule.basis[numAtom]); molcasMolecule.basis[numAtom] = g_strdup(base); resetNumberOfValenceElectrons(); return 0; } /************************************************************************************************************/ static gchar* getErrorMessage() { gchar *errfile= g_strdup_printf("%s%stmp%serrfile",gabedit_directory(), G_DIR_SEPARATOR_S, G_DIR_SEPARATOR_S); gchar *terr = NULL; gchar *dump = NULL; gint taille = BSIZE; gchar t[BSIZE]; FILE *fd; fd = FOpen(errfile, "r"); if(!fd) { g_free(errfile); return NULL; } while(!feof(fd)) { if(!fgets(t,taille, fd)) break; dump = terr; if(!terr) terr = g_strdup_printf("%s",t); else { terr = g_strdup_printf("%s%s",terr,t); g_free(dump); } } fclose(fd); #ifdef G_OS_WIN32 unlink (errfile); #else dump = g_strdup_printf("rm %s&",errfile); {int ierr = system(dump);} g_free(dump); #endif g_free(errfile); return terr; } /********************************************************************************/ gboolean addBasis(GtkWidget *list,char *fileName) { gchar *texts[1]; gchar t[BSIZE]; FILE *fd; gboolean OK = FALSE; gchar* data; GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; model = gtk_tree_view_get_model(GTK_TREE_VIEW(list)); store = GTK_LIST_STORE (model); fd = FOpen(fileName, "r"); if(!fd) return FALSE; while(!feof(fd)) { if(!fgets(t,BSIZE,fd))break; if(strlen(t)<1) continue; str_delete_n(t); delete_last_spaces(t); delete_first_spaces(t); texts[0] =g_strdup(t); data =g_strdup(t); gtk_list_store_append(store, &iter); gtk_list_store_set (store, &iter, BASISLIST_NAME, texts[0], BASISLIST_DATA, (gpointer) data, -1); } fclose(fd); OK = TRUE; return OK; } /********************************************************************************/ static GtkWidget *createWidgetListOfBasis(gchar* fileName) { GtkWidget *scrollWin = NULL; GtkWidget *vbox; gchar *title[1]; gboolean creationOfNewHBox = FALSE; GtkWidget *listOfBasis = NULL; GtkListStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; title[0] = g_strdup(_("List of available basis")); if(!hBasisBox) { creationOfNewHBox = TRUE; hBasisBox = gtk_hbox_new(TRUE, 0); gtk_box_pack_start (GTK_BOX (vBoxPaned), hBasisBox, TRUE, TRUE, 2); } vbox = gtk_vbox_new(FALSE, 0); gtk_box_pack_start (GTK_BOX (hBasisBox), vbox, TRUE, TRUE, 2); gtk_widget_show(vbox); scrollWin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWin),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(vbox), scrollWin); store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_POINTER); /* the second column is not visible, used for data */ model = GTK_TREE_MODEL (store); listOfBasis = gtk_tree_view_new_with_model (model); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (listOfBasis), TRUE); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (listOfBasis), TRUE); gtk_tree_view_set_reorderable(GTK_TREE_VIEW (listOfBasis), TRUE); column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, title[0]); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", BASISLIST_NAME, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (listOfBasis), column); gtk_widget_set_size_request(listOfBasis,(gint)(ScreenHeight*0.4),-1); gtk_container_add(GTK_CONTAINER(scrollWin), listOfBasis); if(!addBasis(listOfBasis,fileName) && creationOfNewHBox ) gtk_widget_destroy(hBasisBox); return (listOfBasis); } /********************************************************************************/ gboolean createListOfBasis(gint numAtom) { gboolean OK = TRUE; gchar *terr; #ifndef G_OS_WIN32 gchar *dump; #endif gchar t[BSIZE]; FILE *fd; gchar *outfile= g_strdup_printf("%s%stmp%soutfile",gabedit_directory(), G_DIR_SEPARATOR_S, G_DIR_SEPARATOR_S); gchar *errfile= g_strdup_printf("%s%stmp%serrfile",gabedit_directory(), G_DIR_SEPARATOR_S, G_DIR_SEPARATOR_S); if(numAtom > -1) getMolcasBasisList(molcasMolecule.symbol[numAtom],outfile,errfile); else return FALSE; terr = NULL; fd = FOpen(outfile, "r"); if(fd) { terr=fgets(t,BSIZE,fd); fclose(fd); } if(terr!=NULL) listOfBasis = createWidgetListOfBasis(outfile); else OK = FALSE; #ifdef G_OS_WIN32 unlink (errfile); #else dump = g_strdup_printf("rm %s&",errfile); {int ierr = system(dump);} g_free(dump); #endif g_free(errfile); g_free(outfile); return OK; } /********************************************************************************/ static void selectionABasis(GtkTreeSelection *selection, gpointer data) { GtkTreeModel *model; GtkTreeModel *modelBasis; GtkTreeIter iter; GtkTreeIter iterBasis; gchar* pathString = g_strdup_printf("%d",numberOfSelectedAtom); gchar* base = NULL; gchar* oldBasis = NULL; if(numberOfSelectedAtom<0) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(listOfAtoms)); if(!gtk_tree_model_get_iter_from_string (model, &iter, pathString)) return; gtk_tree_model_get (model, &iter, ATOMLIST_DATA, &oldBasis, -1); g_free(oldBasis); g_free(pathString); if (!gtk_tree_selection_get_selected (selection, &modelBasis, &iterBasis)) return; gtk_tree_model_get (modelBasis, &iterBasis, BASISLIST_DATA, &base, -1); gtk_list_store_set (GTK_LIST_STORE (model), &iter, ATOMLIST_DATA, (gpointer)(gpointer) g_strdup(base), -1); setMolcasMoleculeBasis(numberOfSelectedAtom); } /************************************************************************************************************/ void definelistOfAtoms(GtkWidget* list) { gint i; gchar* basisName; gchar *texts[1]; GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; model = gtk_tree_view_get_model(GTK_TREE_VIEW(list)); store = GTK_LIST_STORE (model); for (i=0 ; i-1) selectRow(listOfBasis,0); } else { terr = getErrorMessage(); if(terr) { gtk_widget_show(labelInfo); gtk_label_set_text( GTK_LABEL(labelInfo),terr); g_free(terr); } } } /************************************************************************************************************/ GtkWidget* createMolcasBasisWindow() { GtkWidget *button; GtkWidget *dlgWin = NULL; GtkWidget *frame = NULL; GtkWidget *vBox = NULL; GtkWidget *hBox = NULL; GtkWidget *hPaned = NULL; GtkWidget *scrollWin = NULL; gchar *titleForAtoms[] = {"Atoms"}; GtkListStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeSelection *select; if(molcasMolecule.numberOfAtoms <1) { dlgWin = Message(_("You must initially define your geometry."),_("Error"),TRUE); return dlgWin; } dlgWin= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(dlgWin),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(dlgWin),GTK_WINDOW(Fenetre)); gtk_window_set_title(>K_DIALOG(dlgWin)->window,_("Molcas Basis")); init_child(dlgWin, detroyBasisWindow ,_(" Molcas Basis ")); g_signal_connect(G_OBJECT(dlgWin),"delete_event",(GCallback)destroy_children,NULL); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (GTK_BOX( GTK_DIALOG(dlgWin)->vbox)), frame, TRUE, TRUE, 5); gtk_widget_realize(dlgWin); vBox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), vBox); hPaned = gtk_hpaned_new(); gtk_box_pack_start (GTK_BOX (vBox), hPaned,TRUE,TRUE, 0); vBoxPaned = gtk_vbox_new(FALSE, 0); gtk_paned_add2(GTK_PANED(hPaned), vBoxPaned); hBox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vBoxPaned), hBox, FALSE, FALSE, 0); labelInfo = gtk_label_new (_("Please select a atom ")); gtk_widget_show (labelInfo); gtk_box_pack_start (GTK_BOX (vBoxPaned), labelInfo, FALSE, FALSE, 0); scrollWin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWin),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); gtk_paned_add1(GTK_PANED(hPaned), scrollWin); store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_POINTER); /* the second column is not visible, used for data */ model = GTK_TREE_MODEL (store); listOfAtoms = gtk_tree_view_new_with_model (model); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (listOfAtoms), TRUE); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (listOfAtoms), TRUE); gtk_tree_view_set_reorderable(GTK_TREE_VIEW (listOfAtoms), TRUE); column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, titleForAtoms[0]); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", ATOMLIST_SYMBOL, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (listOfAtoms), column); definelistOfAtoms(listOfAtoms); gtk_widget_set_size_request(listOfAtoms,(gint)(ScreenHeight*0.1),(gint)(ScreenHeight*0.5)); gtk_container_add(GTK_CONTAINER(scrollWin), listOfAtoms); select = gtk_tree_view_get_selection (GTK_TREE_VIEW (listOfAtoms)); gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE); g_signal_connect (G_OBJECT (select), "changed", G_CALLBACK (selectAnAtoms), NULL); button = create_button(dlgWin,_("Cancel")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), button, FALSE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(destroy_children),GTK_OBJECT(dlgWin)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show (button); /* for(i=0;iaction_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(destroy_children),GTK_OBJECT(dlgWin)); gtk_widget_show_all(dlgWin); Wins = dlgWin; gtk_widget_set_size_request(Wins,-1 ,(gint)(ScreenHeight*0.6)); if(molcasMolecule.numberOfAtoms>0) selectRow(listOfAtoms,0); return dlgWin; } GabeditSrc250/src/Molcas/MolcasSeward.c0000644000175100017510000000652013130665225020233 0ustar alloucheallouche/* MolcasSeward.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Molcas/MolcasTypes.h" #include "../Molcas/MolcasGlobal.h" #include "../Molcas/MolcasBasis.h" #include "../Molcas/MolcasScf.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/AtomsProp.h" #include "../Utils/GabeditTextEdit.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" /************************************************************************************************************/ static void putBeginSewardInTextEditor() { gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.program, &molcasColorBack.program, " &SEWARD\n",-1); } /************************************************************************************************************/ static void putTitleSewardInTextEditor() { gchar buffer[BSIZE]; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.subProgram, NULL, "Title=",-1); sprintf(buffer,"Seward data By Gabedit\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /************************************************************************************************************/ static void putEndSewardInTextEditor() { gabedit_text_insert (GABEDIT_TEXT(text), NULL, &molcasColorFore.program, &molcasColorBack.program, "End of input\n\n",-1); } /************************************************************************************************************/ void putSewardInfoInTextEditor() { putBeginSewardInTextEditor(); putTitleSewardInTextEditor(); putEndSewardInTextEditor(); } /************************************************************************************************************/ GabeditSrc250/src/Mopac/0000755000175100017510000000000013130743374015323 5ustar allouchealloucheGabeditSrc250/src/Mopac/MopacMolecule.h0000644000175100017510000000075413130665225020225 0ustar alloucheallouche #ifndef __GABEDIT_MOPACMOLECULE_H__ #define __GABEDIT_MOPACMOLECULE_H__ void putMopacReactionPathInTextEditor(); gint getMopacMultiplicity(); void initMopacMoleculeButtons(); void initMopacMolecule(); void freeMopacMolecule(); void putMopacMoleculeInfoInTextEditor(); void putMopacChargeMultiplicityInTextEditor(); gboolean setMopacMolecule(); void createMopacChargeMultiplicityFrame(GtkWidget *box); void createReactionPathFrame(GtkWidget *box); #endif /* __GABEDIT_MOPACMOLECULE_H__ */ GabeditSrc250/src/Mopac/MopacRem.h0000644000175100017510000000041613130665225017176 0ustar alloucheallouche#ifndef __GABEDIT_MOPACCONTROL_H__ #define __GABEDIT_MOPACCONTROL_H__ /* gboolean mopacSemiEmperical();*/ gchar* getSeletedJobType(); void putMopacRemInfoInTextEditor(); void createMopacRemFrame(GtkWidget *win, GtkWidget *box); #endif /* __GABEDIT_MOPACCONTROL_H__ */ GabeditSrc250/src/Mopac/Makefile0000644000175100017510000000061413130664665016771 0ustar allouchealloucheOBJECTS = Mopac.o MopacMolecule.o MopacRem.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/Mopac/Mopac.c0000644000175100017510000001744713130665225016541 0ustar alloucheallouche/* Mopac.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Common/Global.h" #include "../Mopac/MopacTypes.h" #include "../Mopac/MopacGlobal.h" #include "../Mopac/MopacMolecule.h" #include "../Mopac/MopacRem.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" static GtkWidget *Wins=NULL; static gboolean newFile = FALSE; /************************************************************************************************************/ static void setColors() { static gboolean first = TRUE; if(!first) return; first = FALSE; mopacColorFore.keyWord.red = 65535; mopacColorFore.keyWord.green = 0; mopacColorFore.keyWord.blue = 0; mopacColorBack.keyWord.red = (gushort)(65535/1.2); mopacColorBack.keyWord.green = (gushort)(65535/1.2); mopacColorBack.keyWord.blue = (gushort)(65535/1.2); mopacColorFore.description.red = 0; mopacColorFore.description.green = 65535; mopacColorFore.description.blue = 65535; mopacColorBack.description.red = (gushort)(65535/2.0); mopacColorBack.description.green = (gushort)(65535/2.0); mopacColorBack.description.blue = (gushort)(65535/2.0); } /************************************************************************************************************/ void destroyWinsMopac(GtkWidget *win) { destroy(Wins,NULL); Wins = NULL; initMopacMoleculeButtons(); } /************************************************************************************************************/ static void toCancelWin(GtkWidget* win,gpointer data) { Cancel_YesNo(win, data, destroy_children); } /************************************************************************************************************/ void putMopacBeginInTextEditor() { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "* ===============================\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "* Input file for Mopac\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "* ===============================\n",-1); } /************************************************************************************************************/ void putMopacKeysInTextEditor() { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " BONDS AUX ",-1); } /************************************************************************************************************/ void putMopacTitleInTextEditor() { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n\nMopac file generated by Gabedit\n",-1); } /************************************************************************************************************/ static void putInfoInTextEditor(GtkWidget *button, gpointer data) { setColors(); if(newFile) { reset_name_files(); ClearText(text); } else { gint nchar; nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); gabedit_text_set_point(GABEDIT_TEXT(text),nchar); } data_modify(TRUE); putMopacBeginInTextEditor(); putMopacRemInfoInTextEditor(); putMopacChargeMultiplicityInTextEditor(); putMopacKeysInTextEditor(); putMopacTitleInTextEditor(); putMopacMoleculeInfoInTextEditor(); iprogram = PROG_IS_MOPAC; fileopen.command=g_strdup(NameCommandMopac); gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0); } /*********************************************************************************************/ static GtkWidget* addHboxToTable(GtkWidget* table, gint i, gint j, gint ki, gint kj) { GtkWidget *hbox = gtk_hbox_new(TRUE, 5); gtk_table_attach(GTK_TABLE(table),hbox,j,j+kj,i,i+ki, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); return hbox; } /************************************************************************************************************/ static void mopacInputFileWindow(gboolean newInputFile) { GtkWidget *button; GtkWidget *hbox = NULL; GtkWidget *hboxChargeMultiplicity = NULL; GtkWidget* comboJobType = NULL; GtkWidget *table = gtk_table_new(4,3,FALSE); newFile = newInputFile; initMopacMolecule(); setMopacMolecule(); if(mopacMolecule.numberOfAtoms <1) { Message( _( "You must initially define your geometry.\n\n" "From the principal Menu select : Geometry/Draw\n" "and draw (or read) your molecule."), "Error",TRUE); return; } if(Wins) destroy_children(Wins); Wins= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Wins),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Wins),GTK_WINDOW(Fenetre)); gtk_window_set_title(>K_DIALOG(Wins)->window,_("Mopac input")); gtk_window_set_modal (GTK_WINDOW (Wins), TRUE); init_child(Wins, destroyWinsMopac,_(" Mopac input ")); g_signal_connect(G_OBJECT(Wins),"delete_event",(GCallback)destroy_children,NULL); gtk_widget_realize(Wins); button = create_button(Wins,_("Cancel")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK( toCancelWin),GTK_OBJECT(Wins)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show (button); button = create_button(Wins,_("OK")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->vbox), table, FALSE, TRUE, 5); hbox =addHboxToTable(table, 0, 0, 1, 1); hboxChargeMultiplicity = hbox; hbox =addHboxToTable(table, 1, 0, 1, 2); createMopacRemFrame(Wins, hbox); createMopacChargeMultiplicityFrame(hboxChargeMultiplicity); hbox =addHboxToTable(table, 2, 0, 1, 2); createReactionPathFrame(hbox); comboJobType = g_object_get_data(G_OBJECT (Wins), "ComboJobType"); if(comboJobType) g_object_set_data(G_OBJECT (comboJobType), "HboxReactionPath", hbox); gtk_widget_set_sensitive(hbox, FALSE); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(putInfoInTextEditor),GTK_OBJECT(Wins)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(destroy_children),GTK_OBJECT(Wins)); gtk_widget_show_all(Wins); mopacWin = Wins; } /************************************************************************************************************/ void newMopac() { mopacInputFileWindow(TRUE); } /************************************************************************************************************/ void insertMopac() { mopacInputFileWindow(FALSE); } GabeditSrc250/src/Mopac/MopacRem.c0000644000175100017510000003513413130665225017176 0ustar alloucheallouche/* MopacRem.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Mopac/MopacTypes.h" #include "../Mopac/MopacGlobal.h" #include "../Mopac/MopacMolecule.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget* comboethod = NULL; /*************************************************************************************************************/ static gchar* listJobView[] = { "Single Point Energy", "Equilibrium structure search", "Frequencies", "Transition structure search", "Theromochemical Calculations", "Molecular Orbitals", "Atomic charges from ElectroStatic Potential", "Reaction path", }; static gchar* listJobReal[] = { "1SCF ", "XYZ ", "FORCE ", "TS ", "THERMO ROT=1 ", "GRAPH VECTORS ", "1SCF ESP ", "RP", }; static guint numberOfJobs = G_N_ELEMENTS (listJobView); static gchar selectedJob[BSIZE]="1SCF"; /*************************************************************************************************************/ static gchar* listHamiltonianMethodsView[] = { "PM7", "PM6", "PM6-DH+", "PM6-DH2", "RM1", "PM3", "AM1", "MNDO", }; static gchar* listHamiltonianMethodsReal[] = { "PM7", "PM6", "PM6-DH+", "PM6-DH2", "RM1", "PM3", "AM1", "MNDO", }; static guint numberOfHamiltonianMethods = G_N_ELEMENTS (listHamiltonianMethodsView); static gchar selectedHamiltonian[BSIZE]="PM7"; /*************************************************************************************************************/ static gchar* listSolventsView[] = { "Nothing", "Water [H2O]", "AceticAcid [CH3COOH]", "Acetone [CH3COCH3]", "Acetonitrile [CH3CN]", "Ammonia [NH3]", "Aniline [C6H5NH2]", "Benzene [C6H6]", "BenzylAlcohol [C6H5CH2OH]", "Bromoform [CHBr3]", "Butanol [C4H9OH]", "isoButanol [(CH3)2CHCH2OH]", "tertButanol [(CH3)3COH]", "CarbonDisulfide [CS2]", "CarbonTetrachloride [CCl4]", "Chloroform [CHCl3]", "Cyclohexane [C6H12]", "Cyclohexanone [C6H10O]", "Dichlorobenzene [C6H4Cl2]", "DiethylEther [(CH3CH2)2O]", "Dioxane [C4H8O2]", "DMFA [(CH3)2NCHO]", "DMSO [(CH3)2SO]", "Ethanol [CH3CH2OH]", "EthylAcetate [CH3COOCH2CH3]", "Dichloroethane [ClCH2CH2Cl]", "EthyleneGlycol [HOCH2CH2OH]", "Formamide [HCONH2]", "FormicAcid [HCOOH]", "Glycerol [C3H8O3]", "HexamethylPhosphoramide [C6H18N3OP]", "Hexane [C6H14]", "Hydrazine [N2H4]", "Methanol [CH3OH]", "MethylEthylKetone [CH3CH2COCH3]", "Dichloromethane [CH2Cl2]", "Methylformamide [HCONHCH3]", "Methypyrrolidinone [C5H9NO]", "Nitrobenzene [C6H5NO2]", "Nitrogen [N2]", "Nitromethane [CH3NO2]", "PhosphorylChloride [POCl3]", "IsoPropanol [(CH3)2CHOH]", "Pyridine [C5H5N]", "Sulfolane [C4H8SO2]", "Tetrahydrofuran [C4H8O]", "Toluene [C6H5CH3]", "Triethylamine [(CH3CH2)3N]", "TrifluoroaceticAcid [CF3COOH]", }; static gchar* listSolventsReal[] = { " ", "EPS=78.39 RSOLV=1.3", "EPS=6.19 RSOLV=2.83", "EPS=20.7 RSOLV=3.08", "EPS=37.5 RSOLV=2.76", "EPS=16.9 RSOLV=2.24", "EPS=6.8 RSOLV=3.31", "EPS=2.3 RSOLV=3.28", "EPS=13.1 RSOLV=3.45", "EPS=4.3 RSOLV=3.26", "EPS=17.5 RSOLV=3.31", "EPS=17.9 RSOLV=3.33", "EPS=12.4 RSOLV=3.35", "EPS=2.6 RSOLV=2.88", "EPS=2.2 RSOLV=3.37", "EPS=4.8 RSOLV=3.17", "EPS=2.0 RSOLV=3.5", "EPS=15.0 RSOLV=3.46", "EPS=9.8 RSOLV=3.54", "EPS=4.34 RSOLV=3.46", "EPS=2.2 RSOLV=3.24", "EPS=37.0 RSOLV=3.13", "EPS=46.7 RSOLV=3.04", "EPS=24.55 RSOLV=2.85", "EPS=6.02 RSOLV=3.39", "EPS=10.66 RSOLV=3.15", "EPS=37.7 RSOLV=2.81", "EPS=109.5 RSOLV=2.51", "EPS=58.5 RSOLV=2.47", "EPS=42.5 RSOLV=3.07", "EPS=43.3 RSOLV=4.1", "EPS=1.88 RSOLV=3.74", "EPS=51.7 RSOLV=2.33", "EPS=32.6 RSOLV=2.53", "EPS=18.5 RSOLV=3.3", "EPS=8.9 RSOLV=2.94", "EPS=182.4 RSOLV=2.86", "EPS=33.0 RSOLV=3.36", "EPS=34.8 RSOLV=3.44", "EPS=1.45 RSOLV=2.36", "EPS=35.87 RSOLV=2.77", "EPS=13.9 RSOLV=3.33", "EPS=19.9 RSOLV=3.12", "EPS=12.4 RSOLV=3.18", "EPS=43.3 RSOLV=3.35", "EPS=7.58 RSOLV=3.18", "EPS=2.38 RSOLV=3.48", "EPS=2.44 RSOLV=3.81", "EPS=42.1 RSOLV=3.12", }; static guint numberOfSolvents = G_N_ELEMENTS (listSolventsView); static gchar selectedSolvent[BSIZE]="Nothing"; /*************************************************************************************************************/ gchar* getSeletedJobType() { return selectedJob; } /*************************************************************************************************************/ static gchar* calculWord(gchar* view) { gint i; for(i=0;i #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Mopac/MopacTypes.h" #include "../Mopac/MopacGlobal.h" #include "../Mopac/MopacRem.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/AtomsProp.h" /************************************************************************************************************/ static gint totalCharge = 0; static gint spinMultiplicity=1; static gint numberOfPointsRP[2] = {10,10}; static gdouble stepValueRP[2] = {0.1,0.1}; static gchar typeRP[2][100] = {"Bond","Nothing"}; static gint atomRP[2] = {1,0}; /************************************************************************************************************/ void putMopacReactionPathInTextEditor() { gchar buffer[BSIZE]; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "1SCF ",-1); sprintf(buffer,"STEP=%g POINT=%d ",stepValueRP[0],numberOfPointsRP[0]); if(strcmp(typeRP[1],"Nothing")) sprintf(buffer,"STEP1=%g POINT1=%d STEP2=%g POINT2=%d", stepValueRP[0],numberOfPointsRP[0], stepValueRP[1],numberOfPointsRP[1] ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /************************************************************************************************************/ gint getMopacMultiplicity() { return spinMultiplicity; } /************************************************************************************************************/ void initMopacMoleculeButtons() { } /************************************************************************************************************/ void initMopacMolecule() { mopacMolecule.listOfAtoms = NULL; mopacMolecule.totalNumberOfElectrons = 0; mopacMolecule.numberOfValenceElectrons = 0; mopacMolecule.numberOfAtoms = 0; } /************************************************************************************************************/ void freeMopacMolecule() { static gboolean first = TRUE; if(first) { initMopacMolecule(); first = FALSE; return; } if(mopacMolecule.listOfAtoms) g_free(mopacMolecule.listOfAtoms); initMopacMolecule(); } /************************************************************************************************************/ static gint setMopacMoleculeFromSXYZ(gint nAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z) { gint n; MopacAtom* atomList = NULL; mopacMolecule.listOfAtoms = NULL; mopacMolecule.numberOfAtoms = 0; if(nAtoms<1) return 1; mopacMolecule.listOfAtoms = (MopacAtom*)g_malloc(sizeof(MopacAtom)*(nAtoms)); if(mopacMolecule.listOfAtoms==NULL) return -1; mopacMolecule.numberOfAtoms = nAtoms; atomList = mopacMolecule.listOfAtoms; for(n=0; nposition[0] = X[n]; atomList->position[1] = Y[n]; atomList->position[2] = Z[n]; atomList->symbol = g_strdup(symbols[n]); atomList++; } return 0; } /************************************************************************************************************/ static void setXYZFromGeomXYZ(gint i, gdouble* x, gdouble* y, gdouble *z) { if(!test(GeomXYZ[i].X)) *x = get_value_variableXYZ(GeomXYZ[i].X); else *x = atof(GeomXYZ[i].X); if(!test(GeomXYZ[i].Y)) *y = get_value_variableXYZ(GeomXYZ[i].Y); else *y = atof(GeomXYZ[i].Y); if(!test(GeomXYZ[i].Z)) *z = get_value_variableXYZ(GeomXYZ[i].Z); else *z = atof(GeomXYZ[i].Z); if(Units==0) { *x *= BOHR_TO_ANG; *y *= BOHR_TO_ANG; *z *= BOHR_TO_ANG; } } /************************************************************************************************************/ static gboolean setMopacMoleculeFromGeomXYZ() { gint i; gchar** symbols = NULL; gdouble* X = NULL; gdouble* Y = NULL; gdouble* Z = NULL; gint numberOfAtoms = NcentersXYZ; if(numberOfAtoms<1) return FALSE; symbols = (gchar**)g_malloc(sizeof(gchar*)*(numberOfAtoms)); if(symbols == NULL) return FALSE; X = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(X == NULL) return FALSE; Y = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Y == NULL) return FALSE; Z = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Z == NULL) return FALSE; mopacMolecule.totalNumberOfElectrons = 0; for(i=0; iNUMBER_ENTRY_0 && !test(Geom[i].R)) k++; if(Geom[i].Nentry>NUMBER_ENTRY_R && !test(Geom[i].Angle)) k++; if(Geom[i].Nentry>NUMBER_ENTRY_ANGLE && !test(Geom[i].Dihedral)) k++; } return k; } /*************************************************************************************************************/ static void putMopacMoleculeInTextEditor() { gchar buffer[BSIZE]; gchar b1[20]; gchar b2[20]; gchar b3[20]; gchar con[20]; gint i; gint k1 = 0; gint k2 = 0; gint k3 = 0; gint nvar = 0; gint k; gboolean RP = FALSE; if(mopacMolecule.numberOfAtoms<1) return; RP =!strcmp(getSeletedJobType(),"RP"); if(MethodeGeom==GEOM_IS_XYZ) nvar = getRealNumberXYZVariables(); else nvar = getRealNumberZmatVariables(); if(MethodeGeom==GEOM_IS_XYZ) for (i=0;iNUMBER_ENTRY_ANGLE) { setValueVariableZmat(Geom[i].R, b1, &k1); setValueVariableZmat(Geom[i].Angle, b2, &k2); setValueVariableZmat(Geom[i].Dihedral, b3, &k3); sprintf(con,"%s %s %s", Geom[i].NR, Geom[i].NAngle, Geom[i].NDihedral); if(nvar==0) { k1 = 1; k2 = 1; k3 = 1;} if(RP) { for(k=0;k<2;k++) { if(!strcmp(typeRP[k],"Bond") && i==atomRP[k]-1) k1 = -1; if(!strcmp(typeRP[k],"Angle") && i==atomRP[k]-1) k2 = -1; if(!strcmp(typeRP[k],"Dihedral") && i==atomRP[k]-1) k3 = -1; } } sprintf(buffer,"%s %s %d %s %d %s %d %s\n", Geom[i].Symb, b1, k1, b2, k2, b3, k3, con ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } else if(Geom[i].Nentry>NUMBER_ENTRY_R) { setValueVariableZmat(Geom[i].R, b1, &k1); setValueVariableZmat(Geom[i].Angle, b2, &k2); sprintf(b3,"0.0"); k3 = 0; sprintf(con,"%s %s %s", Geom[i].NR, Geom[i].NAngle, "0"); if(nvar==0) { k1 = 1; k2 = 1;} if(RP) { for(k=0;k<2;k++) { if(!strcmp(typeRP[k],"Bond") && i==atomRP[k]-1) k1 = -1; if(!strcmp(typeRP[k],"Angle") && i==atomRP[k]-1) k2 = -1; } } sprintf(buffer,"%s %s %d %s %d %s %d %s\n", Geom[i].Symb, b1, k1, b2, k2, b3, k3, con ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } else if(Geom[i].Nentry>NUMBER_ENTRY_0) { setValueVariableZmat(Geom[i].R, b1, &k1); sprintf(b2,"0.0"); k2 = 0; sprintf(b3,"0.0"); k3 = 0; sprintf(con,"%s %s %s", Geom[i].NR, "0", "0"); if(nvar==0) { k1 = 1;} if(RP) for(k=0;k<2;k++) if(!strcmp(typeRP[k],"Bond") && i==atomRP[k]-1) k1 = -1; sprintf(buffer,"%s %s %d %s %d %s %d %s\n", Geom[i].Symb, b1, k1, b2, k2, b3, k3, con ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } else { sprintf(b1,"0.0"); k1 = 0; sprintf(b2,"0.0"); k2 = 0; sprintf(b3,"0.0"); k3 = 0; sprintf(con,"%s %s %s", "0.0", "0", "0"); sprintf(buffer,"%s %s %d %s %d %s %d %s\n", Geom[i].Symb, b1, k1, b2, k2, b3, k3, con ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } } } } /************************************************************************************************************/ static void getMultiplicityName(gint multiplicity, gchar* buffer) { if(multiplicity==1) sprintf(buffer,"Singlet"); else if(multiplicity==2) sprintf(buffer,"Doublet"); else if(multiplicity==3) sprintf(buffer,"Triplet"); else if(multiplicity==4) sprintf(buffer,"Quartet"); else if(multiplicity==5) sprintf(buffer,"Quintet"); else if(multiplicity==6) sprintf(buffer,"Sextet"); else sprintf(buffer,"UNKNOWN"); } /************************************************************************************************************/ void putMopacChargeMultiplicityInTextEditor() { gchar buffer[BSIZE]; gchar mul[20]; getMultiplicityName(spinMultiplicity, mul); if(spinMultiplicity>1) sprintf(buffer,"UHF CHARGE=%d %s ",totalCharge,mul); else sprintf(buffer,"CHARGE=%d %s ",totalCharge,mul); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /************************************************************************************************************/ void putMopacMoleculeInfoInTextEditor() { putMopacMoleculeInTextEditor(); } /************************************************************************************************************/ static void setSpinMultiplicityComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity, gint spin) { GtkWidget *entry = NULL; gchar* t = NULL; if(!comboSpinMultiplicity) return; entry = GTK_BIN (comboSpinMultiplicity)->child; t = g_strdup_printf("%d",spin); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /************************************************************************************************************/ static void setComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity) { GList *glist = NULL; gint i; gint nlist = 0; gchar** list = NULL; gint k; gint kinc; gint ne = mopacMolecule.numberOfValenceElectrons - totalCharge; if(ne%2==0) nlist = ne/2+1; else nlist = (ne+1)/2; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; t = g_strdup_printf("%d",charge); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /********************************************************************************/ static void setComboCharge(GtkWidget *comboCharge) { GList *glist = NULL; gint i; gint nlist; gchar** list = NULL; gint k; nlist = mopacMolecule.numberOfValenceElectrons*2-2+1; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; g_object_set_data(G_OBJECT (entry), "Combo",combo); gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.1),-1); return entry; } /***********************************************************************************************/ static GtkWidget *addMopacChargeToTable(GtkWidget *table, gint i) { GtkWidget* entryCharge = NULL; GtkWidget* comboCharge = NULL; gint nlistCharge = 1; gchar* listCharge[] = {"0"}; add_label_table(table,"Charge",(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryCharge = addComboListToATable(table, listCharge, nlistCharge, i, 2, 1); comboCharge = g_object_get_data(G_OBJECT (entryCharge), "Combo"); gtk_widget_set_sensitive(entryCharge, FALSE); return comboCharge; } /***********************************************************************************************/ static GtkWidget *addMopacSpinToTable(GtkWidget *table, gint i) { GtkWidget* entrySpinMultiplicity = NULL; GtkWidget* comboSpinMultiplicity = NULL; gint nlistspinMultiplicity = 1; gchar* listspinMultiplicity[] = {"0"}; add_label_table(table,_("Spin multiplicity"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entrySpinMultiplicity = addComboListToATable(table, listspinMultiplicity, nlistspinMultiplicity, i, 2, 1); comboSpinMultiplicity = g_object_get_data(G_OBJECT (entrySpinMultiplicity), "Combo"); gtk_widget_set_sensitive(entrySpinMultiplicity, FALSE); g_signal_connect(G_OBJECT(entrySpinMultiplicity),"changed", G_CALLBACK(changedEntrySpinMultiplicity),NULL); return comboSpinMultiplicity; } /***********************************************************************************************/ static GtkWidget *addLabelNumberOfElectronsToTable(GtkWidget *table, gint i, GtkWidget *comboCharge) { GtkWidget* labelNumberOfElectrons = NULL; GtkWidget* hbox = NULL; GtkWidget* entryCharge = GTK_BIN(comboCharge)->child; labelNumberOfElectrons = gtk_label_new(" "); hbox = gtk_hbox_new(0,FALSE); gtk_box_pack_start (GTK_BOX (hbox), labelNumberOfElectrons, FALSE, FALSE, 0); gtk_table_attach(GTK_TABLE(table),hbox,0,0+3,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_SHRINK), 2,2); g_object_set_data(G_OBJECT (entryCharge), "LabelNumberOfElectrons", labelNumberOfElectrons); g_signal_connect(G_OBJECT(entryCharge),"changed", G_CALLBACK(changedEntryCharge),NULL); return labelNumberOfElectrons; } /***********************************************************************************************/ void createMopacChargeMultiplicityFrame(GtkWidget *box) { GtkWidget* frame; GtkWidget* sep; GtkWidget* labelNumberOfElectrons; GtkWidget* vboxFrame; GtkWidget* comboSpinMultiplicity = NULL; GtkWidget* comboCharge = NULL; GtkWidget *table = NULL; gint i; totalCharge = TotalCharges[0]; spinMultiplicity=SpinMultiplicities[0]; table = gtk_table_new(3,5,FALSE); frame = gtk_frame_new (_("Charge & Multiplicty")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); i = 0; comboCharge = addMopacChargeToTable(table, i); i = 1; comboSpinMultiplicity = addMopacSpinToTable(table, i); i = 2; sep = gtk_hseparator_new ();; gtk_table_attach(GTK_TABLE(table),sep,0,0+3,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); i = 3; labelNumberOfElectrons=addLabelNumberOfElectronsToTable(table, i, comboCharge); if(GTK_IS_COMBO_BOX(comboCharge)) g_object_set_data(G_OBJECT (GTK_BIN(comboCharge)->child), "ComboSpinMultiplicity", comboSpinMultiplicity); setComboCharge(comboCharge); setComboSpinMultiplicity(comboSpinMultiplicity); if(GTK_IS_WIDGET(labelNumberOfElectrons)) { gint ne = mopacMolecule.numberOfValenceElectrons - totalCharge; gchar buffer[BSIZE]; sprintf(buffer, _("Number of electrons = %d"),ne); gtk_label_set_text(GTK_LABEL(labelNumberOfElectrons),buffer); } /* activate sensitivity */ /* if(GTK_IS_WIDGET(comboMethod)) setComboMethod(comboMethod); g_object_set_data(G_OBJECT (box), "EntryMethod", GTK_BIN(comboMethod)->child); */ } /************************************************************************************************************/ static void setComboReactionPathVariableType(GtkWidget *comboReactionPathVariableType, gboolean nothing) { GList *glist = NULL; gint i; gchar* listXYZ[] = {"Nothing","X","Y","Z"}; gchar* listZMatrix[] = {"Nothing","Bond","Angle","Dihedral"}; gchar** list = NULL; gint iBegin = 0; gint iEnd = 3; if(!nothing) iBegin = 1; if(MethodeGeom==GEOM_IS_XYZ) list = listXYZ; else list = listZMatrix; if(MethodeGeom!=GEOM_IS_XYZ) { if(mopacMolecule.numberOfAtoms<=2) iEnd-=2; else if(mopacMolecule.numberOfAtoms<=3) iEnd--; } for(i=iBegin;i<=iEnd;i++) glist = g_list_append(glist,list[i]); gtk_combo_box_entry_set_popdown_strings( comboReactionPathVariableType, glist) ; g_list_free(glist); } /********************************************************************************/ static void setComboReactionPathAtoms(GtkWidget *comboReactionPathAtoms) { GList *glist = NULL; gint i; gint nlist; gchar** list = NULL; GtkWidget* entry = NULL; gchar* typeRP = NULL; gint iEnd; if(!comboReactionPathAtoms) return; entry = GTK_BIN (comboReactionPathAtoms)->child; if(!entry) return; typeRP = g_object_get_data(G_OBJECT (entry), "TypeRP"); if(!typeRP) return; nlist = mopacMolecule.numberOfAtoms; iEnd = nlist-1; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild), "ComboAtoms", comboAtoms[k]); g_object_set_data(G_OBJECT (GTK_BIN(comboVariableType[k])->child), "TypeRP", typeRP[k]); g_object_set_data(G_OBJECT (GTK_BIN(comboVariableType[k])->child), "EntryStep", entryStep[k]); g_object_set_data(G_OBJECT (GTK_BIN(comboVariableType[k])->child), "EntryNbPoints", entryNbPoints[k]); } for(k=0;k<2;k++) if(GTK_IS_COMBO_BOX(comboAtoms[k])) { g_object_set_data(G_OBJECT (GTK_BIN(comboAtoms[k])->child), "EntryStep", entryStep[k]); g_object_set_data(G_OBJECT (GTK_BIN(comboAtoms[k])->child), "EntryNbPoints", entryNbPoints[k]); g_object_set_data(G_OBJECT (GTK_BIN(comboAtoms[k])->child), "AtomRP", &atomRP[k]); g_object_set_data(G_OBJECT (GTK_BIN(comboAtoms[k])->child), "TypeRP", typeRP[k]); } for(k=0;k<2;k++) g_object_set_data(G_OBJECT (entryNbPoints[k]), "NumberOfPointsRP", &numberOfPointsRP[k]); for(k=0;k<2;k++) g_object_set_data(G_OBJECT (entryStep[k]), "StepValueRP", &stepValueRP[k]); for(k=0;k<2;k++) g_signal_connect(G_OBJECT(entryStep[k]),"changed", G_CALLBACK(changedEntryReactionPathStep),NULL); for(k=0;k<2;k++) g_signal_connect(G_OBJECT(entryNbPoints[k]),"changed", G_CALLBACK(changedEntryReactionPathNbPoints),NULL); for(k=0;k<2;k++) setComboReactionPathVariableType(comboVariableType[k],k>0); for(k=0;k<2;k++) setComboReactionPathAtoms(comboAtoms[k]); } /************************************************************************************************************/ GabeditSrc250/src/Mopac/MopacGlobal.h0000644000175100017510000000047313130665225017656 0ustar alloucheallouche #ifndef __GABEDIT_MOPACGLOBAL_H__ #define __GABEDIT_MOPACGLOBAL_H__ GtkWidget* mopacWin; MopacMolecule mopacMolecule; MopacColorFore mopacColorFore; MopacColorBack mopacColorBack; MopacFunctional* functionals; MopacStdFunctional* stdFunctionals; gdouble* sumFunctionals; #endif /* __GABEDIT_MOPACGLOBAL_H__ */ GabeditSrc250/src/Mopac/Mopac.h0000644000175100017510000000272513130665225016537 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MOPAC_H__ #define __GABEDIT_MOPAC_H__ void destroyWinsMopac(GtkWidget *win,gpointer data); void newMopac(); void insertMopac(); #endif /* __GABEDIT_MOPAC_H__ */ GabeditSrc250/src/MultiGrid/0000755000175100017510000000000013130743374016164 5ustar allouchealloucheGabeditSrc250/src/MultiGrid/Makefile0000644000175100017510000000060113130664665017626 0ustar allouchealloucheOBJECTS = DomainMG.o GridMG.o PoissonMG.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) $(OGLCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/MultiGrid/PoissonMG.h0000644000175100017510000000370513130665225020216 0ustar alloucheallouche#ifndef __GABEDIT_POISSONMG_H__ #define __GABEDIT_POISSONMG_H__ #include "GridMG.h" typedef GridMG* (*GetSource)(DomainMG); typedef void (*SetBoundary)(GridMG*, GridMG*); typedef struct _PoissonMG PoissonMG; struct _PoissonMG { gdouble diag; GridMG* potential; GridMG* source; SetBoundary setBoundary; Condition condition; }; PoissonMG* getNullPoissonMG(); PoissonMG* getPoissonMGUsingDomain(DomainMG); PoissonMG* getPoissonMG2(GridMG*, GridMG*, Condition, SetBoundary); PoissonMG* getPoissonMG(GridMG*, GridMG*); PoissonMG* getCopyPoissonMG(PoissonMG* ps); void destroyPoissonMG(PoissonMG*); void setOperationPoissonMG(PoissonMG*,OperationTypeMG); DomainMG getDomainPoissonMG(PoissonMG*); gdouble getDiagPoissonMG(PoissonMG*); void prolongationPoissonMG(PoissonMG* ps); void ginterpolationTriLinearPoissonMG(PoissonMG* ps); void ginterpolationCubicPoissonMG(PoissonMG* ps); void restrictionPoissonMG(PoissonMG* ps); void restrictionInjectionPoissonMG(PoissonMG* ps); GridMG* residualPoissonMG(PoissonMG* ps); gdouble residualNormPoissonMG(PoissonMG* ps); void tradesBoundaryPoissonMG(PoissonMG* ps); void smootherPoissonMG(PoissonMG* ps,gint max); void printFilePoissonMG(PoissonMG* ps); void printFileNamePoissonMG(PoissonMG* ps, gchar* fileName); void printPoissonMGAll(PoissonMG* ps); void printMinPoissonMG(PoissonMG* ps); void printMaxPoissonMG(PoissonMG* ps); void printPoissonMG(PoissonMG* ps, gint i, gint j, gint k); GridMG* getPotentialPoissonMG(PoissonMG* ps); GridMG* getSourcePoissonMG(PoissonMG* ps); void solveCGPoissonMG(PoissonMG* ps, gint max, gdouble acc); gdouble solveMGPoissonMG(PoissonMG* ps, gint levelMax); void solveMGPoissonMG2(PoissonMG* ps, gint levelMax,gdouble acc, gint verbose); void solveMGPoissonMG3(PoissonMG* ps, int levelMax, int nIter, gdouble acc, int verbose); void solveSmootherPoissonMG2(PoissonMG* ps, gint max, gint nf); void solveSmootherPoissonMG(PoissonMG* ps, gint imax, gdouble eps); #endif /* __GABEDIT_POISSONMG_H__ */ GabeditSrc250/src/MultiGrid/DomainMG.h0000644000175100017510000000377213130665225017777 0ustar alloucheallouche/* * xSize = total number of grids(includ boundary) * 0..nb-1 and xSize-(nb-1)..xsize = boundary * nb to xSize-nb = interior */ #ifndef __GABEDIT_DOMAINMG_H__ #define __GABEDIT_DOMAINMG_H__ #include "TypesMG.h" typedef struct _DomainMG DomainMG; struct _DomainMG { gint xSize; gint ySize; gint zSize; gint size; gdouble xLength; gdouble yLength; gdouble zLength; gdouble diag; gdouble cc; gdouble fLaplacinaX[MAXBOUNDARY+1]; gdouble fLaplacinaY[MAXBOUNDARY+1]; gdouble fLaplacinaZ[MAXBOUNDARY+1]; gdouble fGradientX[MAXBOUNDARY]; gdouble fGradientY[MAXBOUNDARY]; gdouble fGradientZ[MAXBOUNDARY]; gdouble x0; gdouble y0; gdouble z0; gdouble xh; gdouble yh; gdouble zh; gdouble cellVolume; gint maxLevel; LaplacianOrderMG laplacianOrder; gint nBoundary; glong incx; gint incy; gint incz; gint nShift; gint iXBeginBoundaryLeft; gint iXEndBoundaryLeft; gint iXBeginBoundaryRight; gint iXEndBoundaryRight; gint iYBeginBoundaryLeft; gint iYEndBoundaryLeft; gint iYBeginBoundaryRight; gint iYEndBoundaryRight; gint iZBeginBoundaryLeft; gint iZEndBoundaryLeft; gint iZBeginBoundaryRight; gint iZEndBoundaryRight; gint iXBeginInterior; gint iXEndInterior; gint iYBeginInterior; gint iYEndInterior; gint iZBeginInterior; gint iZEndInterior; }; /* Method of DomainMG struct */ void printDomain(DomainMG*g); gboolean ifEqualDomainMG(DomainMG*g, DomainMG* right); gint getMaxLevelDomainMG1(DomainMG*, gint size); void setMaxLevelDomainMG(DomainMG*); void setParametersDomainMG(DomainMG*); void setCoefsLaplacianDomainMG(DomainMG*); void setCoefsGradientDomainMG(DomainMG*); void destroyDomainMG(DomainMG*); void setLaplacianOrderDomainMG(DomainMG*, const LaplacianOrderMG); void levelUpDomainMG(DomainMG*); void levelDownDomainMG(DomainMG*); DomainMG getDomainMG(gint, gint, gint, gdouble, gdouble, gdouble, gdouble, gdouble, gdouble, LaplacianOrderMG); DomainMG getNullDomainMG(); #endif /* __GABEDIT_DOMAINMG_H__ */ GabeditSrc250/src/MultiGrid/DomainMG.c0000644000175100017510000003004613130665225017764 0ustar alloucheallouche/* DomainMG.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Utils/Vector3d.h" #include "../Utils/Transformation.h" #include "../Utils/Constants.h" #include "DomainMG.h" /*********************************************************/ void printDomain(DomainMG*g) { printf("xSize = %d ySize = %d zSize = %d\n",g->xSize, g->ySize, g->zSize); printf("x0 = %f y0 = %f z0 = %f\n",g->x0, g->y0, g->z0); printf("xLength = %f yLength = %f zLength = %f\n",g->xLength,g->yLength ,g->zLength ); printf("xh = %f yh = %f zh = %f\n",g->xh,g->yh ,g->zh ); printf("size = %d\n",g->size); printf("laplacianOrder = %d\n",g->laplacianOrder); } /*********************************************************/ gboolean ifEqualDomainMG(DomainMG*g, DomainMG* right) { if(g->xSize != right->xSize) return FALSE; if(g->ySize != right->ySize) return FALSE; if(g->zSize != right->zSize) return FALSE; if(g->x0 != right->x0) return FALSE; if(g->y0 != right->y0) return FALSE; if(g->z0 != right->z0) return FALSE; if(g->xLength != right->xLength) return FALSE; if(g->yLength != right->yLength) return FALSE; if(g->zLength != right->zLength) return FALSE; if(g->xh != right->xh) return FALSE; if(g->yh != right->yh) return FALSE; if(g->zh != right->zh) return FALSE; if(g->size != right->size) return FALSE; if(g->laplacianOrder != right->laplacianOrder) return FALSE; return TRUE; } /*********************************************************/ gint setMaxLevelDomainMG1(DomainMG*d , gint size) { size++; gint level = 1; if(size>1) while(size % 2 == 0) { size = size/2; level++; } return level; } /*********************************************************/ void setMaxLevelDomainMG(DomainMG*d) { gint level; d->maxLevel = setMaxLevelDomainMG1(d,d->xSize); level = setMaxLevelDomainMG1(d,d->ySize); if(levelmaxLevel) d->maxLevel = level; level = setMaxLevelDomainMG1(d,d->zSize); if(levelmaxLevel) d->maxLevel = level; } /*********************************************************/ void setParametersDomainMG(DomainMG*d) { d->nBoundary = d->laplacianOrder/2; d->xh = d->xLength/(d->xSize+1); d->yh = d->yLength/(d->ySize+1); d->zh = d->zLength/(d->zSize+1); d->cellVolume = d->xh*d->yh*d->zh; d->size = (d->xSize+2*d->nBoundary)*(d->ySize+2*d->nBoundary)*(d->zSize+2*d->nBoundary); d->incx = (d->ySize +2*d->nBoundary)*(d->zSize +2*d->nBoundary); d->incy = (d->zSize +2*d->nBoundary); d->incz = 1; d->nShift = d->nBoundary-1; d->iXBeginBoundaryLeft = -d->nBoundary + 1; d->iXEndBoundaryLeft = 0; d->iXBeginBoundaryRight = d->xSize + 1; d->iXEndBoundaryRight = d->xSize + d->nBoundary; d->iYBeginBoundaryLeft = -d->nBoundary + 1; d->iYEndBoundaryLeft = 0; d->iYBeginBoundaryRight = d->ySize + 1; d->iYEndBoundaryRight = d->ySize + d->nBoundary; d->iZBeginBoundaryLeft = -d->nBoundary + 1; d->iZEndBoundaryLeft = 0; d->iZBeginBoundaryRight = d->zSize + 1; d->iZEndBoundaryRight = d->zSize + d->nBoundary; d->iXBeginInterior = d->iXEndBoundaryLeft + 1; d->iXEndInterior = d->iXBeginBoundaryRight - 1; d->iYBeginInterior = d->iYEndBoundaryLeft + 1; d->iYEndInterior = d->iYBeginBoundaryRight - 1; d->iZBeginInterior = d->iZEndBoundaryLeft + 1; d->iZEndInterior = d->iZBeginBoundaryRight - 1; setMaxLevelDomainMG(d); /* cout<<"IX = "<< d->iXBeginBoundaryLeft<<" "<iXEndBoundaryLeft<<" " <iXBeginInterior<<" "<iXEndInterior<<" "<< d->iXBeginBoundaryRight<<" "<iXEndBoundaryRight<nBoundary+1)*sizeof(gdouble)); gint i; switch(d->nBoundary) { case 1:{ gdouble c[] = {-2.0, 1.0}; for( i=0;i<=d->nBoundary;i++) coefs[i] = c[i]; break; } case 2:{ gdouble denom = 12.0; gdouble c[] = {-30.0, 16.0, -1.0}; for( i=0;i<=d->nBoundary;i++) coefs[i] = c[i]/denom; break; } case 3:{ gdouble denom = 180.0; gdouble c[] = {-490.0, 270.0,-27.0, 2.0}; for( i=0;i<=d->nBoundary;i++) coefs[i] = c[i]/denom; break; } case 4:{ gdouble denom = 5040.0; gdouble c[] = {-14350.0, 8064.0, -1008.0, 128.0, -9.0}; for( i=0;i<=d->nBoundary;i++) coefs[i] = c[i]/denom; break; } case 5:{ gdouble denom = 25200.0; gdouble c[] = {-73766.0, 42000.0, -6000.0, 1000.0, -125.0, 8.0}; for( i=0;i<=d->nBoundary;i++) coefs[i] = c[i]/denom; break; } case 6:{ gdouble denom = 831600.0; gdouble c[] = {-2480478.0,1425600.0,-222750.0,44000.0,-7425.0,864.0,-50.0}; for( i=0;i<=d->nBoundary;i++) coefs[i] = c[i]/denom; break; } case 7:{ gdouble denom = 75675600.0; gdouble c[] = {-228812298.0,132432300.0,-22072050.0,4904900.0,-1003275.0, 160524.0,-17150.0,900.0}; for( i=0;i<=d->nBoundary;i++) coefs[i] = c[i]/denom; break; } case 8:{ gdouble denom = 302702400.0; gdouble c[] = {-924708642.0,538137600.0,-94174080.0,22830080.0,-5350800.0,1053696.0,-156800.0,15360.0,-735.0}; for( i=0;i<=d->nBoundary;i++) coefs[i] = c[i]/denom; break; } case 9:{ gdouble denom = 15437822400.0; gdouble c[] = {-47541321542.0,+27788080320.0, -5052378240.0,+1309875840.0,-340063920.0,+77728896.0,-14394240.0,+1982880.0,-178605.0,+7840.0}; for( i=0;i<=d->nBoundary;i++) coefs[i] = c[i]/denom; break; } case 10:{ gdouble denom = 293318625600.0; gdouble c[] = {-909151481810.0,+533306592000.0, -99994986000.0,+27349056000.0,-7691922000.0,+1969132032.0,-427329000.0,+73872000.0,-9426375.0,+784000.0,-31752.0}; for( i=0;i<=d->nBoundary;i++) coefs[i] = c[i]/denom; break; } case 11:{ gdouble denom = 3226504881600.0; gdouble c[] = {-10053996959110.0,+5915258949600.0,-1137549798000.0,+325014228000.0,-97504268400.0,+27301195152.0,-6691469400.0,+1365606000.0,-220114125.0,+26087600.0,-2012472.0,+75600.0}; for( i=0;i<=d->nBoundary;i++) coefs[i] = c[i]/denom; break; } case 12:{ gdouble denom = 74209612276800.0; gdouble c[] = {-232272619118930.0,+137002361126400.0,-26911178078400.0,+7973682393600.0,-2522922944850.0,+759845028096.0,-205205061600.0,+47609337600.0,-9112724775.0,+1371462400.0,-151484256.0,+10886400.0,-381150.0}; for( i=0;i<=d->nBoundary;i++) coefs[i] = c[i]/denom; break; } } gdouble x2h = 1.0 / (d->xh * d->xh); gdouble y2h = 1.0 / (d->yh * d->yh); gdouble z2h = 1.0 / (d->zh * d->zh); d->cc = x2h + y2h + z2h; d->cc *= coefs[0]; for(i=1;i<=d->nBoundary;i++) { d->fLaplacinaX[i] = x2h * coefs[i]; d->fLaplacinaY[i] = y2h * coefs[i]; d->fLaplacinaZ[i] = z2h * coefs[i]; } d->diag = 1.0/d->cc; g_free(coefs); } /*********************************************************/ void setCoefsGradientDomainMG(DomainMG*d) { gdouble* coefs = g_malloc(d->nBoundary*sizeof(gdouble)); gint i; switch(d->nBoundary) { case 1:{ gdouble denom = 2.0; gdouble c[] = {-1.0}; for(i=0;inBoundary;i++) coefs[i] = c[i]/denom; break; } case 2:{ gdouble denom =12.0; gdouble c[] = { 1.0, -8.0}; for( i=0;inBoundary;i++) coefs[i] = c[i]/denom; break; } case 3:{ gdouble denom =60.0; gdouble c[] = { -1.0, +9.0, -45.0}; for( i=0;inBoundary;i++) coefs[i] = c[i]/denom; break; } case 4:{ gdouble denom =840.0; gdouble c[] = { 3.0, -32.0, +168.0, -672.0}; for( i=0;inBoundary;i++) coefs[i] = c[i]/denom; break; } case 5:{ gdouble denom =2520.0 ; gdouble c[] = { -2.0, +25.0, -150.0,+600.0, -2100.0}; for( i=0;inBoundary;i++) coefs[i] = c[i]/denom; break; } case 6:{ gdouble denom =27720.0 ; gdouble c[] = { 5.0, -72.0, +495.0, -2200.0, +7425.0, -23760.0}; for( i=0;inBoundary;i++) coefs[i] = c[i]/denom; break; } case 7:{ gdouble denom =360360.0; gdouble c[] = { -15.0, +245.0, -1911.0, +9555.0, -35035.0, +105105.0, -315315.0}; for( i=0;inBoundary;i++) coefs[i] = c[i]/denom; break; } case 8:{ gdouble denom =720720.0; gdouble c[] = { 7.0, -128.0, +1120.0, -6272.0, +25480.0, -81536.0, +224224.0, -640640.0}; for( i=0;inBoundary;i++) coefs[i] = c[i]/denom; break; } } gdouble xxh = 1.0 / (d->xh); gdouble yyh = 1.0 / (d->yh); gdouble zzh = 1.0 / (d->zh); for(i=0;inBoundary;i++) { d->fGradientX[i] = xxh * coefs[i]; d->fGradientY[i] = yyh * coefs[i]; d->fGradientZ[i] = zzh * coefs[i]; } g_free(coefs); } /*********************************************************/ DomainMG getDomainMG(int sx,int sy,int sz,gdouble x00,gdouble y00, gdouble z00, gdouble xL, gdouble yL, gdouble zL, LaplacianOrderMG order) { DomainMG dd; DomainMG* d=ⅆ d->xSize = sx; d->ySize = sy; d->zSize = sz; if(d->xSize%2 == 0) d->xSize--; if(d->ySize%2 == 0) d->ySize--; if(d->zSize%2 == 0) d->zSize--; d->x0 = x00; d->y0 = y00; d->z0 = z00; d->xLength = xL; d->yLength = yL; d->zLength = zL; d->laplacianOrder = order; setParametersDomainMG(d); /* printDomain(d);*/ setCoefsLaplacianDomainMG(d); setCoefsGradientDomainMG(d); return dd; } /*********************************************************/ DomainMG getNullDomainMG() { DomainMG dd; DomainMG* d=ⅆ d->xSize = 0; d->ySize = 0; d->zSize = 0; d->size = 0; d->x0 = 0; d->y0 = 0; d->z0 = 0; d->xLength = 0; d->yLength = 0; d->zLength = 0; d->laplacianOrder = GABEDIT_LAPLACIAN_2; setParametersDomainMG(d); setCoefsLaplacianDomainMG(d); setCoefsGradientDomainMG(d); return dd; } /*********************************************************/ void destroyDomainMG(DomainMG*d) { d->xSize = 0; d->ySize = 0; d->zSize = 0; d->size = 0; d->x0 = 0; d->y0 = 0; d->z0 = 0; d->xLength = 0; d->yLength = 0; d->zLength = 0; d->laplacianOrder = GABEDIT_LAPLACIAN_2; setParametersDomainMG(d); setCoefsLaplacianDomainMG(d); setCoefsGradientDomainMG(d); } /*********************************************************/ void setLaplacianOrderDomainMG(DomainMG*d, const LaplacianOrderMG order) { d->laplacianOrder = order; setParametersDomainMG(d); setCoefsLaplacianDomainMG(d); setCoefsGradientDomainMG(d); } /*********************************************************/ void levelUpDomainMG(DomainMG*d) { d->xSize = (d->xSize+1)*2-1; d->ySize = (d->ySize+1)*2-1; d->zSize = (d->zSize+1)*2-1; setParametersDomainMG(d); setCoefsLaplacianDomainMG(d); setCoefsGradientDomainMG(d); } /*********************************************************/ void levelDownDomainMG(DomainMG*d) { d->xSize = (d->xSize+1)/2-1; d->ySize = (d->ySize+1)/2-1; d->zSize = (d->zSize+1)/2-1; setParametersDomainMG(d); setCoefsLaplacianDomainMG(d); setCoefsGradientDomainMG(d); } /*********************************************************/ GabeditSrc250/src/MultiGrid/GridMG.c0000644000175100017510000023653413130665225017454 0ustar alloucheallouche/* GridMG.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #ifdef ENABLE_OMP #include #endif #include "../Utils/Vector3d.h" #include "../Utils/Transformation.h" #include "../Utils/Constants.h" #include "GridMG.h" #define PRECISION 1e-10 /*********************************************************/ /* private methods for GridMG */ static void initAllGridMG(GridMG* g, gdouble); static void initInteriorGridMG(GridMG* g, gdouble); static void initBoundaryGridMG(GridMG* g, gdouble); static void equalAllGridMG(GridMG* g, GridMG* src); static void equalInteriorGridMG(GridMG* g, GridMG* src); static void equalBoundaryGridMG(GridMG* g, GridMG* src); static void plusEqualAllGridMG(GridMG* g, GridMG* src); static void plusEqualInteriorGridMG(GridMG* g, GridMG* src); static void plusEqualBoundaryGridMG(GridMG* g, GridMG* src); static void moinsEqualAllGridMG(GridMG* g, GridMG* src); static void moinsEqualInteriorGridMG(GridMG* g, GridMG* src); static void moinsEqualBoundaryGridMG(GridMG* g, GridMG* src); static void multEqualAllGridMG(GridMG* g, GridMG* src); static void multEqualInteriorGridMG(GridMG* g, GridMG* src); static void multEqualBoundaryGridMG(GridMG* g, GridMG* src); static void multEqualAllRealGridMG(GridMG* g, gdouble a); static void multEqualInteriorRealGridMG(GridMG* g, gdouble a); static void multEqualBoundaryRealGridMG(GridMG* g, gdouble a); static void divEqualAllRealGridMG(GridMG* g, gdouble a); static void divEqualInteriorRealGridMG(GridMG* g, gdouble a); static void divEqualBoundaryRealGridMG(GridMG* g, gdouble a); static gdouble dotAllGridMG(GridMG* g, GridMG* src); static gdouble dotInteriorGridMG(GridMG* g, GridMG* src); static gdouble dotBoundaryGridMG(GridMG* g, GridMG* src); static gdouble normAllGridMG(GridMG* g); static gdouble normInteriorGridMG(GridMG* g); static gdouble normBoundaryGridMG(GridMG* g); static gdouble normDiffAllGridMG(GridMG* g, GridMG* src); static gdouble normDiffInteriorGridMG(GridMG* g, GridMG* src); static gdouble normDiffBoundaryGridMG(GridMG* g, GridMG* src); static gdouble sommeAllGridMG(GridMG* g); static gdouble sommeInteriorGridMG(GridMG* g); static gdouble sommeBoundaryGridMG(GridMG* g); static void tradesBoundaryPeriodicGridMG(GridMG* g); static void printAllGridMG(GridMG* g); static void printInteriorGridMG(GridMG* g); static void printBoundaryGridMG(GridMG* g); /*********************************************************/ void destroyGridMG(GridMG* g) { if(g && g->values) g_free(g->values); } /*********************************************************/ GridMG* getNewGridMG() { GridMG* g=g_malloc(sizeof(GridMG)); g->domain.xSize = 0; g->domain.ySize = 0; g->domain.zSize = 0; g->domain.size = 0; g->operationType = GABEDIT_ALL; g->values = NULL; return g; } /*********************************************************/ GridMG* getNewGridMGUsingDomain(DomainMG* domain) { glong i; GridMG* g=g_malloc(sizeof(GridMG)); g->domain = *domain; g->operationType = GABEDIT_ALL; g->values = g_malloc(g->domain.size*sizeof(gdouble)); #ifdef ENABLE_OMP #pragma omp parallel for private(i) #endif for(i = 0;idomain.size;i++) g->values[i] = 0.0; return g; } /*********************************************************/ GridMG* getNewGridMGFromOldGrid(GridMG* src) { GridMG* g=g_malloc(sizeof(GridMG)); g->domain = src->domain; g->operationType = GABEDIT_ALL; g->values = NULL; equalAllGridMG(g,src); return g; } /*********************************************************/ void initAllGridMG(GridMG* g, gdouble value) { gint i; #ifdef ENABLE_OMP #pragma omp parallel for private(i) #endif for(i = 0;idomain.size;i++) g->values[i] = value; } /*********************************************************/ void initInteriorGridMG(GridMG* g, gdouble value) { DomainMG domain = g->domain; if(domain.size<=0) return; int ix; int iy; int iz; int iXBegin = domain.iXBeginInterior; int iXEnd = domain.iXEndInterior; int iYBegin = domain.iYBeginInterior; int iYEnd = domain.iYEndInterior; int iZBegin = domain.iZBeginInterior; int iZEnd = domain.iZEndInterior; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = iXBegin;ix <=iXEnd;ix++) for(iy = iYBegin;iy <=iYEnd;iy++) for(iz = iZBegin;iz <=iZEnd;iz++) setValGridMG(g,ix,iy,iz, value); } /*********************************************************/ void initBoundaryGridMG(GridMG* g, gdouble value) { int ix; int iy; int iz; DomainMG domain = g->domain; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix=domain.iXBeginBoundaryLeft;ix<=domain.iXEndBoundaryLeft;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, value); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix=domain.iXBeginBoundaryRight;ix<=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, value); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryLeft;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, value); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryRight;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, value); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) { for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryLeft;iz++) setValGridMG(g,ix,iy,iz, value); for(iz = domain.iZBeginBoundaryRight;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, value); } } /*********************************************************/ void initGridMG(GridMG*g, gdouble sommeValue) { switch(g->operationType) { case GABEDIT_ALL: initAllGridMG(g, sommeValue);break; case GABEDIT_INTERIOR: initInteriorGridMG(g, sommeValue);break; case GABEDIT_BOUNDARY: initBoundaryGridMG(g, sommeValue);break; } } /*********************************************************/ void addGaussian(GridMG* g, gdouble Z, gdouble x1, gdouble y1, gdouble z1, gdouble sigma) { gdouble sigma2 = sigma*sigma; DomainMG* domain = &g->domain; GridMG* tmp = getNewGridMGUsingDomain(domain); gdouble x0 = domain->x0; gdouble y0 = domain->y0; gdouble z0 = domain->z0; gdouble xh = domain->xh; gdouble yh = domain->yh; gdouble zh = domain->zh; gdouble r2x; gdouble r2y; gdouble r2z; gdouble r20x=2*sigma2*xh*xh; gdouble r20y=2*sigma2*yh*yh; gdouble r20z=2*sigma2*zh*zh; gdouble x, y , z; int ix, iy, iz; gdouble s = 0; gdouble ex = 0; for(ix=domain->iXBeginBoundaryLeft;ix<=domain->iXEndBoundaryRight;ix++) { x = x0 + ix*domain->xh; r2x = (x-x1)*(x-x1); for(iy = domain->iYBeginBoundaryLeft;iy <=domain->iYEndBoundaryRight;iy++) { y = y0 + iy*domain->yh; r2y = (y-y1)*(y-y1); for(iz = domain->iZBeginBoundaryLeft;iz <=domain->iZEndBoundaryRight;iz++) { z = z0 + iz*domain->zh; r2z = (z-z1)*(z-z1); ex = exp(-r2x/r20x)*exp(-r2y/r20y)*exp(-r2z/r20z); setValGridMG(tmp, ix, iy, iz, ex); s += ex; } } } s *= xh*yh*zh; if(fabs(s)>PRECISION) { OperationTypeMG operation = getOperationGridMG(g); setOperationGridMG(tmp, GABEDIT_INTERIOR); setOperationGridMG(g, GABEDIT_INTERIOR); multEqualRealGridMG(tmp,Z/s); plusEqualGridMG( g, tmp); setOperationGridMG(g, operation); } destroyGridMG(tmp); } /*********************************************************/ static void equalAllGridMG(GridMG* g, GridMG* src) { if (g != src) { gint i; destroyGridMG(g); g->domain = src->domain; g->operationType = src->operationType; g->values = g_malloc(g->domain.size*sizeof(gdouble)); #ifdef ENABLE_OMP #pragma omp parallel for private(i) #endif for(i = 0;idomain.size;i++) g->values[i] = src->values[i]; } } /*********************************************************/ static void equalInteriorGridMG(GridMG* g, GridMG* src) { DomainMG domain = src->domain; if (g == src) return; if(!ifEqualDomainMG(&g->domain,&src->domain)) { destroyGridMG(g); g->domain = src->domain; g->values = g_malloc(domain.size*sizeof(gdouble)); } g->operationType = src->operationType; int ix; int iy; int iz; int iXBegin = domain.iXBeginInterior; int iXEnd = domain.iXEndInterior; int iYBegin = domain.iYBeginInterior; int iYEnd = domain.iYEndInterior; int iZBegin = domain.iZBeginInterior; int iZEnd = domain.iZEndInterior; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = iXBegin ; ix <=iXEnd ; ix++) for(iy = iYBegin ; iy <=iYEnd ; iy++) { for(iz = iZBegin ; iz <=iZEnd ; iz++) setValGridMG(g,ix,iy,iz, getValGridMG(src,ix,iy,iz)); } } /*********************************************************/ static void equalBoundaryGridMG(GridMG* g, GridMG* src) { DomainMG domain = src->domain; if (g == src) return; if(!ifEqualDomainMG(&g->domain,&src->domain))return; int ix; int iy; int iz; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix=domain.iXBeginBoundaryLeft;ix<=domain.iXEndBoundaryLeft;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(src,ix,iy,iz)); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix=domain.iXBeginBoundaryRight;ix<=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(src,ix,iy,iz)); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) { for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryLeft;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(src,ix,iy,iz)); for(iy = domain.iYBeginBoundaryRight;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(src,ix,iy,iz)); } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) { for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryLeft;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(src,ix,iy,iz)); for(iz = domain.iZBeginBoundaryRight;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(src,ix,iy,iz)); } } /*********************************************************/ void equalGridMG(GridMG*g, GridMG* src) { switch(g->operationType) { case GABEDIT_ALL: equalAllGridMG(g, src);break; case GABEDIT_INTERIOR: equalInteriorGridMG(g, src);break; case GABEDIT_BOUNDARY: equalBoundaryGridMG(g, src);break; } } /*********************************************************/ void copyGridMG(GridMG*g, GridMG* src) { equalGridMG(g,src); } /*********************************************************/ static void plusEqualAllGridMG(GridMG* g, GridMG* right) { gint i; if(!ifEqualDomainMG(&g->domain, &right->domain)) return; #ifdef ENABLE_OMP #pragma omp parallel for private(i) #endif for(i = 0;idomain.size;i++) g->values[i] += right->values[i]; } /*********************************************************/ static void plusEqualInteriorGridMG(GridMG* g, GridMG* src) { DomainMG domain = g->domain; int ix; int iy; int iz; int iXBegin = domain.iXBeginInterior; int iXEnd = domain.iXEndInterior; int iYBegin = domain.iYBeginInterior; int iYEnd = domain.iYEndInterior; int iZBegin = domain.iZBeginInterior; int iZEnd = domain.iZEndInterior; if(!ifEqualDomainMG(&g->domain, &src->domain)) return; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = iXBegin;ix <=iXEnd;ix++) for(iy = iYBegin;iy <=iYEnd;iy++) for(iz = iZBegin;iz <=iZEnd;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)+getValGridMG(src,ix,iy,iz)); } /*********************************************************/ static void plusEqualBoundaryGridMG(GridMG* g, GridMG* src) { DomainMG domain = g->domain; int ix; int iy; int iz; if(!ifEqualDomainMG(&g->domain, &src->domain)) return; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix=domain.iXBeginBoundaryLeft;ix<=domain.iXEndBoundaryLeft;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)+getValGridMG(src,ix,iy,iz)); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix=domain.iXBeginBoundaryRight;ix<=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)+getValGridMG(src,ix,iy,iz)); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) { for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryLeft;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)+getValGridMG(src,ix,iy,iz)); for(iy = domain.iYBeginBoundaryRight;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)+getValGridMG(src,ix,iy,iz)); } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) { for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryLeft;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)+getValGridMG(src,ix,iy,iz)); for(iz = domain.iZBeginBoundaryRight;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)+getValGridMG(src,ix,iy,iz)); } } /*********************************************************/ void plusEqualGridMG(GridMG*g, GridMG* src) { switch(g->operationType) { case GABEDIT_ALL: plusEqualAllGridMG(g, src);break; case GABEDIT_INTERIOR: plusEqualInteriorGridMG(g, src);break; case GABEDIT_BOUNDARY: plusEqualBoundaryGridMG(g, src);break; } } /*********************************************************/ static void moinsEqualAllGridMG(GridMG* g, GridMG* src) { gint i; if(!ifEqualDomainMG(&g->domain, &src->domain)) return; #ifdef ENABLE_OMP #pragma omp parallel for private(i) #endif for(i = 0;idomain.size;i++) g->values[i] -= src->values[i]; } /*********************************************************/ static void moinsEqualInteriorGridMG(GridMG* g, GridMG* src) { DomainMG domain = g->domain; int ix; int iy; int iz; int iXBegin = domain.iXBeginInterior; int iXEnd = domain.iXEndInterior; int iYBegin = domain.iYBeginInterior; int iYEnd = domain.iYEndInterior; int iZBegin = domain.iZBeginInterior; int iZEnd = domain.iZEndInterior; if(!ifEqualDomainMG(&g->domain, &src->domain)) return; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = iXBegin;ix <=iXEnd;ix++) for(iy = iYBegin;iy <=iYEnd;iy++) for(iz = iZBegin;iz <=iZEnd;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)-getValGridMG(src,ix,iy,iz)); } /*********************************************************/ static void moinsEqualBoundaryGridMG(GridMG* g, GridMG* src) { DomainMG domain = g->domain; int ix; int iy; int iz; if(!ifEqualDomainMG(&g->domain, &src->domain)) return; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix=domain.iXBeginBoundaryLeft;ix<=domain.iXEndBoundaryLeft;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)-getValGridMG(src,ix,iy,iz)); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix=domain.iXBeginBoundaryRight;ix<=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)-getValGridMG(src,ix,iy,iz)); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) { for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryLeft;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)-getValGridMG(src,ix,iy,iz)); for(iy = domain.iYBeginBoundaryRight;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)-getValGridMG(src,ix,iy,iz)); } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) { for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryLeft;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)-getValGridMG(src,ix,iy,iz)); for(iz = domain.iZBeginBoundaryRight;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)-getValGridMG(src,ix,iy,iz)); } } /*********************************************************/ void moinsEqualGridMG(GridMG*g, GridMG* src) { switch(g->operationType) { case GABEDIT_ALL: moinsEqualAllGridMG(g, src);break; case GABEDIT_INTERIOR: moinsEqualInteriorGridMG(g, src);break; case GABEDIT_BOUNDARY: moinsEqualBoundaryGridMG(g, src);break; } } /*********************************************************/ static void multEqualAllGridMG(GridMG* g, GridMG* src) { gint i; if(!ifEqualDomainMG(&g->domain, &src->domain)) return; #ifdef ENABLE_OMP #pragma omp parallel for private(i) #endif for(i= 0;idomain.size;i++) g->values[i] *= src->values[i]; } /*********************************************************/ static void multEqualInteriorGridMG(GridMG* g, GridMG* src) { DomainMG domain = g->domain; int ix; int iy; int iz; int iXBegin = domain.iXBeginInterior; int iXEnd = domain.iXEndInterior; int iYBegin = domain.iYBeginInterior; int iYEnd = domain.iYEndInterior; int iZBegin = domain.iZBeginInterior; int iZEnd = domain.iZEndInterior; if(!ifEqualDomainMG(&g->domain, &src->domain)) return; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = iXBegin;ix <=iXEnd;ix++) for(iy = iYBegin;iy <=iYEnd;iy++) for(iz = iZBegin;iz <=iZEnd;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)*getValGridMG(src,ix,iy,iz)); } /*********************************************************/ static void multEqualBoundaryGridMG(GridMG* g, GridMG* src) { DomainMG domain = g->domain; int ix; int iy; int iz; if(!ifEqualDomainMG(&g->domain, &src->domain)) return; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix=domain.iXBeginBoundaryLeft;ix<=domain.iXEndBoundaryLeft;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)*getValGridMG(src,ix,iy,iz)); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix=domain.iXBeginBoundaryRight;ix<=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)*getValGridMG(src,ix,iy,iz)); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) { for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryLeft;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)*getValGridMG(src,ix,iy,iz)); for(iy = domain.iYBeginBoundaryRight;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)*getValGridMG(src,ix,iy,iz)); } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) { for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryLeft;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)*getValGridMG(src,ix,iy,iz)); for(iz = domain.iZBeginBoundaryRight;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)*getValGridMG(src,ix,iy,iz)); } } /*********************************************************/ void multEqualGridMG(GridMG*g, GridMG* src) { switch(g->operationType) { case GABEDIT_ALL: multEqualAllGridMG(g, src);break; case GABEDIT_INTERIOR: multEqualInteriorGridMG(g, src);break; case GABEDIT_BOUNDARY: multEqualBoundaryGridMG(g, src);break; } } /*********************************************************/ static void multEqualAllRealGridMG(GridMG* g, gdouble a) { gint i; #ifdef ENABLE_OMP #pragma omp parallel for private(i) #endif for(i = 0;idomain.size;i++) g->values[i] *= a; } /*********************************************************/ static void multEqualInteriorRealGridMG(GridMG* g, gdouble a) { DomainMG domain = g->domain; int ix; int iy; int iz; int iXBegin = domain.iXBeginInterior; int iXEnd = domain.iXEndInterior; int iYBegin = domain.iYBeginInterior; int iYEnd = domain.iYEndInterior; int iZBegin = domain.iZBeginInterior; int iZEnd = domain.iZEndInterior; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = iXBegin;ix <=iXEnd;ix++) for(iy = iYBegin;iy <=iYEnd;iy++) for(iz = iZBegin;iz <=iZEnd;iz++) multValGridMG(g,ix,iy,iz,a); } /*********************************************************/ static void multEqualBoundaryRealGridMG(GridMG* g, gdouble a) { int ix; int iy; int iz; DomainMG domain = g->domain; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix=domain.iXBeginBoundaryLeft;ix<=domain.iXEndBoundaryLeft;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) multValGridMG(g,ix,iy,iz,a); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix=domain.iXBeginBoundaryRight;ix<=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) multValGridMG(g,ix,iy,iz,a); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) { for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryLeft;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) multValGridMG(g,ix,iy,iz,a); for(iy = domain.iYBeginBoundaryRight;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) multValGridMG(g,ix,iy,iz,a); } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) { for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryLeft;iz++) multValGridMG(g,ix,iy,iz,a); for(iz = domain.iZBeginBoundaryRight;iz <=domain.iZEndBoundaryRight;iz++) multValGridMG(g,ix,iy,iz,a); } } /*********************************************************/ void multEqualRealGridMG(GridMG*g, gdouble a) { switch(g->operationType) { case GABEDIT_ALL: multEqualAllRealGridMG(g, a);break; case GABEDIT_INTERIOR: multEqualInteriorRealGridMG(g, a);break; case GABEDIT_BOUNDARY: multEqualBoundaryRealGridMG(g, a);break; } } /*********************************************************/ static void divEqualAllRealGridMG(GridMG* g, gdouble a) { gint i; for(i = 0;idomain.size;i++) g->values[i] /= a; } /*********************************************************/ static void divEqualInteriorRealGridMG(GridMG* g, gdouble a) { DomainMG domain = g->domain; int ix; int iy; int iz; int iXBegin = domain.iXBeginInterior; int iXEnd = domain.iXEndInterior; int iYBegin = domain.iYBeginInterior; int iYEnd = domain.iYEndInterior; int iZBegin = domain.iZBeginInterior; int iZEnd = domain.iZEndInterior; if(a==0) return ; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = iXBegin;ix <=iXEnd;ix++) for(iy = iYBegin;iy <=iYEnd;iy++) for(iz = iZBegin;iz <=iZEnd;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)/a); } /*********************************************************/ static void divEqualBoundaryRealGridMG(GridMG* g, gdouble a) { int ix; int iy; int iz; DomainMG domain = g->domain; if(a==0) return; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix=domain.iXBeginBoundaryLeft;ix<=domain.iXEndBoundaryLeft;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)/a); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix=domain.iXBeginBoundaryRight;ix<=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)/a); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) { for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryLeft;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)/a); for(iy = domain.iYBeginBoundaryRight;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)/a); } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) { for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryLeft;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)/a); for(iz = domain.iZBeginBoundaryRight;iz <=domain.iZEndBoundaryRight;iz++) setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)/a); } } /*********************************************************/ void divEqualRealGridMG(GridMG*g, gdouble a) { switch(g->operationType) { case GABEDIT_ALL: divEqualAllRealGridMG(g, a);break; case GABEDIT_INTERIOR: divEqualInteriorRealGridMG(g, a);break; case GABEDIT_BOUNDARY: divEqualBoundaryRealGridMG(g, a);break; } } /*********************************************************/ gdouble getDiagGridMG(GridMG* g) { return g->domain.diag; } /*********************************************************/ gdouble laplacianGridMG(GridMG* g, GridMG* src) { int ix, iy, iz; DomainMG domain = g->domain; gdouble cc = domain.cc; gdouble diag = domain.diag; gdouble* fcx = domain.fLaplacinaX; gdouble* fcy = domain.fLaplacinaY; gdouble* fcz = domain.fLaplacinaZ; int i; int iXBegin = domain.iXBeginInterior; int iXEnd = domain.iXEndInterior; int iYBegin = domain.iYBeginInterior; int iYEnd = domain.iYEndInterior; int iZBegin = domain.iZBeginInterior; int iZEnd = domain.iZEndInterior; int nBoundary = domain.nBoundary; gdouble v; if(!ifEqualDomainMG(&g->domain,&src->domain)) { destroyGridMG(g); g->domain = src->domain; g->operationType = src->operationType; g->values = g_malloc(domain.size*sizeof(gdouble)); } initBoundaryGridMG(g,0.0); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz,v) #endif for(ix = iXBegin;ix <= iXEnd;ix++) for(iy = iYBegin;iy <= iYEnd;iy++) for(iz = iZBegin;iz <= iZEnd;iz++) { { v = cc * getValGridMG(src, ix,iy,iz); for(i=1;i<=nBoundary;i++) { v += fcx[i] *(getValGridMG(src, ix-i,iy,iz)+getValGridMG(src, ix+i,iy,iz)); v += fcy[i] *(getValGridMG(src, ix,iy-i,iz)+getValGridMG(src, ix,iy+i,iz)); v += fcz[i] *(getValGridMG(src, ix,iy,iz-i)+getValGridMG(src, ix,iy,iz+i)); } setValGridMG(g,ix,iy,iz, v); } } return diag; } /*********************************************************/ gdouble plusLaplacianGridMG(GridMG* g, GridMG* src) { int ix, iy, iz; DomainMG domain = g->domain; gdouble cc = domain.cc; gdouble diag = domain.diag; gdouble* fcx = domain.fLaplacinaX; gdouble* fcy = domain.fLaplacinaY; gdouble* fcz = domain.fLaplacinaZ; int i; int iXBegin = domain.iXBeginInterior; int iXEnd = domain.iXEndInterior; int iYBegin = domain.iYBeginInterior; int iYEnd = domain.iYEndInterior; int iZBegin = domain.iZBeginInterior; int iZEnd = domain.iZEndInterior; int nBoundary = domain.nBoundary; gdouble v; if(!ifEqualDomainMG(&g->domain,&src->domain)) { destroyGridMG(g); g->domain = src->domain; g->operationType = src->operationType; g->values = g_malloc(domain.size*sizeof(gdouble)); initAllGridMG(g, 0.0); } else initBoundaryGridMG(g, 0.0); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz,v) #endif for(ix = iXBegin;ix <= iXEnd;ix++) for(iy = iYBegin;iy <= iYEnd;iy++) for(iz = iZBegin;iz <= iZEnd;iz++) { v = cc * getValGridMG(src, ix,iy,iz); for(i=1;i<=nBoundary;i++) { v += fcx[i] *(getValGridMG(src, ix-i,iy,iz)+getValGridMG(src, ix+i,iy,iz)); v += fcy[i] *(getValGridMG(src, ix,iy-i,iz)+getValGridMG(src, ix,iy+i,iz)); v += fcz[i] *(getValGridMG(src, ix,iy,iz-i)+getValGridMG(src, ix,iy,iz+i)); } setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)+v); } return diag; } /*********************************************************/ gdouble moinsLaplacianGridMG(GridMG* g, GridMG* src) { int ix, iy, iz; DomainMG domain = g->domain; gdouble cc = domain.cc; gdouble diag = domain.diag; gdouble* fcx = domain.fLaplacinaX; gdouble* fcy = domain.fLaplacinaY; gdouble* fcz = domain.fLaplacinaZ; int i; int iXBegin = domain.iXBeginInterior; int iXEnd = domain.iXEndInterior; int iYBegin = domain.iYBeginInterior; int iYEnd = domain.iYEndInterior; int iZBegin = domain.iZBeginInterior; int iZEnd = domain.iZEndInterior; int nBoundary = domain.nBoundary; if(!ifEqualDomainMG(&g->domain,&src->domain)) { destroyGridMG(g); g->domain = src->domain; g->operationType = src->operationType; g->values = g_malloc(domain.size*sizeof(gdouble)); initAllGridMG(g, 0.0); } else initBoundaryGridMG(g, 0.0); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = iXBegin;ix <= iXEnd;ix++) for(iy = iYBegin;iy <= iYEnd;iy++) for(iz = iZBegin;iz <= iZEnd;iz++) { gdouble v; gdouble vx, vy, vz; v = cc * getValGridMG(src, ix,iy,iz); vx = 0.0; vy = 0.0; vz = 0.0; for(i=1;i<=nBoundary;i++) { vx += fcx[i] *(getValGridMG(src, ix-i,iy,iz)+getValGridMG(src, ix+i,iy,iz)); vy += fcy[i] *(getValGridMG(src, ix,iy-i,iz)+getValGridMG(src, ix,iy+i,iz)); vz += fcz[i] *(getValGridMG(src, ix,iy,iz-i)+getValGridMG(src, ix,iy,iz+i)); } setValGridMG(g,ix,iy,iz, getValGridMG(g,ix,iy,iz)-(v + vx + vy + vz)); } return diag; } /*********************************************************/ void averageGridMG(GridMG* g) { int ix, iy, iz; int x0, xp, xm, y0, yp, ym, z0, zp, zm; gdouble face, corner, edge; static gdouble scale = 1.0 / 64.0; DomainMG domain = g->domain; int iXBegin = domain.iXBeginInterior; int iXEnd = domain.iXEndInterior; int iYBegin = domain.iYBeginInterior; int iYEnd = domain.iYEndInterior; int iZBegin = domain.iZBeginInterior; int iZEnd = domain.iZEndInterior; GridMG* src = getNewGridMGFromOldGrid(g); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz,x0,xp,xm,y0,yp,ym,z0,zp,zm,face,corner,edge) #endif for(ix = iXBegin ; ix <= iXEnd ; ix++) { x0 = ix; xp = x0 + 1; xm = x0 - 1; for(iy = iYBegin ; iy <= iYEnd ; iy++) { y0 = iy; yp = y0 + 1; ym = y0 - 1; for(iz = iZBegin ; iz <= iZEnd ; iz++) { z0 = iz; zp = z0 + 1; zm = z0 - 1; face = getValGridMG(src, xm , y0 , z0) + getValGridMG(src, xp , y0 , z0) + getValGridMG(src, x0 , ym , z0) + getValGridMG(src, x0 , yp , z0) + getValGridMG(src, x0 , y0 , zm) + getValGridMG(src, x0 , y0 , zp); corner = getValGridMG(src, xm , ym , zm) + getValGridMG(src, xm , ym , zp) + getValGridMG(src, xm , yp , zm) + getValGridMG(src, xm , yp , zp) + getValGridMG(src, xp , ym , zm) + getValGridMG(src, xp , ym , zp) + getValGridMG(src, xp , yp , zm) + getValGridMG(src, xp , yp , zp); edge = getValGridMG(src, xm , y0 , zm) + getValGridMG(src, xm , ym , z0) + getValGridMG(src, xm , yp , z0) + getValGridMG(src, xm , y0 , zp) + getValGridMG(src, x0 , ym , zm) + getValGridMG(src, x0 , yp , zm) + getValGridMG(src, x0 , ym , zp) + getValGridMG(src, x0 , yp , zp) + getValGridMG(src, xp , y0 , zm) + getValGridMG(src, xp , ym , z0) + getValGridMG(src, xp , yp , z0) + getValGridMG(src, xp , y0 , zp); setValGridMG(g,ix,iy,iz, scale * ( 8.0 * getValGridMG(src, x0 , y0 , z0) + 4.0 * face + 2.0 * edge + corner ) ); } } } destroyGridMG(src); } /*********************************************************/ void resetLaplacianOrderGridMG(GridMG* g, LaplacianOrderMG order) { DomainMG domain = g->domain; DomainMG newDomain = getDomainMG(domain.xSize,domain.ySize,domain.xSize, domain.x0, domain.y0, domain.z0, domain.xLength, domain.yLength, domain.zLength, order); int ix, iy, iz; int ixNew, iyNew, izNew; GridMG* newGrid = getNewGridMGUsingDomain(&newDomain); int iXBegin = domain.iXBeginInterior; int iXEnd = domain.iXEndInterior; int iYBegin = domain.iYBeginInterior; int iYEnd = domain.iYEndInterior; int iZBegin = domain.iZBeginInterior; int iZEnd = domain.iZEndInterior; int iXBeginNew = newDomain.iXBeginInterior; int iYBeginNew = newDomain.iYBeginInterior; int iZBeginNew = newDomain.iZBeginInterior; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz,ixNew,iyNew,izNew) #endif for(ix = iXBegin ; ix <= iXEnd ; ix++) { ixNew = iXBeginNew+ix-iXBegin; iyNew = iYBeginNew ; for(iy = iYBegin ; iy <= iYEnd ; iy++, iyNew++) { izNew = iZBeginNew ; for(iz = iZBegin ; iz <= iZEnd ; iz++, izNew++) setValGridMG(newGrid, ixNew , iyNew , izNew, getValGridMG(g, ix , iy , iz)); } } equalAllGridMG(g,newGrid); destroyGridMG(newGrid); } /*********************************************************/ void reAllocValuesTableGridMG(GridMG* g) { glong i; if(g->domain.size <1) return; if(g->values) g_free(g->values); g->values = g_malloc(g->domain.size*sizeof(gdouble)); #ifdef ENABLE_OMP #pragma omp parallel for private(i) #endif for(i = 0;idomain.size;i++) g->values[i] = 0.0; } /*********************************************************/ void levelUpGridMG(GridMG* g) { levelUpDomainMG(&g->domain); reAllocValuesTableGridMG(g); } /*********************************************************/ void interpolationCubicSrcGridMG(GridMG* g, GridMG* src) { gint ix, iy, iz; DomainMG domain; g->domain = src->domain; levelUpGridMG(g); domain = g->domain; /* * transfer coarse grid pogints to * fine grid along with the * high side image pogint */ /*printf("Je suis dans prolongation de Grid\n");*/ /*printf("xSize =%d\n",xSize);*/ #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = src->domain.iXBeginInterior-1;ix <=src->domain.iXEndInterior+1;ix++) for(iy = src->domain.iYBeginInterior-1;iy <=src->domain.iYEndInterior+1;iy++) for(iz = src->domain.iZBeginInterior-1;iz <=src->domain.iZEndInterior+1;iz++) setValGridMG(g,2*ix,2*iy,2*iz, getValGridMG(src,ix,iy,iz)); /* ginterior center pogints */ #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginInterior;ix <=domain.iXEndInterior;ix += 2) for(iy = domain.iYBeginInterior;iy <=domain.iYEndInterior;iy += 2) for(iz = domain.iZBeginInterior;iz <=domain.iZEndInterior;iz += 2) { setValGridMG(g,ix,iy,iz, 0.125 * getValGridMG(g,ix-1 , iy-1 , iz-1) + 0.125 * getValGridMG(g, ix-1 , iy-1 , iz+1) + 0.125 * getValGridMG(g, ix-1 , iy+1 , iz-1) + 0.125 * getValGridMG(g, ix-1 , iy+1 , iz+1) + 0.125 * getValGridMG(g, ix+1 , iy-1 , iz-1) + 0.125 * getValGridMG(g, ix+1 , iy-1 , iz+1) + 0.125 * getValGridMG(g, ix+1 , iy+1 , iz-1) + 0.125 * getValGridMG(g, ix+1 , iy+1 , iz+1) ); } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginInterior;ix <=domain.iXEndInterior;ix += 2) for(iy = domain.iYBeginInterior;iy <=domain.iYEndInterior;iy += 2) for(iz = domain.iZBeginInterior+1;iz <=domain.iZEndInterior;iz += 2) { setValGridMG(g,ix,iy,iz, 0.5 * getValGridMG(g, ix , iy , iz-1) + 0.5 * getValGridMG(g, ix , iy , iz+1) ); } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginInterior;ix <=domain.iXEndInterior;ix += 2) for(iy = domain.iYBeginInterior+1;iy <=domain.iYEndInterior;iy += 2) for(iz = domain.iZBeginInterior;iz <=domain.iZEndInterior;iz += 2) { setValGridMG(g,ix,iy,iz, 0.5 * getValGridMG(g, ix , (iy-1) , iz) + 0.5 * getValGridMG(g, ix , (iy+1) , iz) ); } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginInterior+1;ix <=domain.iXEndInterior;ix += 2) for(iy = domain.iYBeginInterior;iy <=domain.iYEndInterior;iy += 2) for(iz = domain.iZBeginInterior;iz <=domain.iZEndInterior;iz += 2) { setValGridMG(g,ix,iy,iz, 0.5 * getValGridMG(g, (ix-1) , iy , iz) + 0.5 * getValGridMG(g, (ix+1) , iy , iz) ); } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginInterior;ix <=domain.iXEndInterior;ix += 2) for(iy = domain.iYBeginInterior+1;iy <=domain.iYEndInterior;iy += 2) for(iz = domain.iZBeginInterior+1;iz <=domain.iZEndInterior;iz += 2) { setValGridMG(g,ix,iy,iz, 0.25 * getValGridMG(g, ix , (iy-1) , iz-1) + 0.25 * getValGridMG(g, ix , (iy-1) , iz+1) + 0.25 * getValGridMG(g, ix , (iy+1) , iz-1) + 0.25 * getValGridMG(g, ix , (iy+1) , iz+1) ); } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginInterior+1;ix <=domain.iXEndInterior;ix += 2) for(iy = domain.iYBeginInterior;iy <=domain.iYEndInterior;iy += 2) for(iz = domain.iZBeginInterior+1;iz <=domain.iZEndInterior;iz += 2) { setValGridMG(g,ix,iy,iz, 0.25 * getValGridMG(g, (ix-1) , iy , iz-1) + 0.25 * getValGridMG(g, (ix-1) , iy , iz+1) + 0.25 * getValGridMG(g, (ix+1) , iy , iz-1) + 0.25 * getValGridMG(g, (ix+1) , iy , iz+1) ); } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix = domain.iXBeginInterior+1;ix <=domain.iXEndInterior;ix += 2) for(iy = domain.iYBeginInterior+1;iy <=domain.iYEndInterior;iy += 2) for(iz = domain.iZBeginInterior;iz <=domain.iZEndInterior;iz += 2) { setValGridMG(g,ix,iy,iz, 0.25 * getValGridMG(g, (ix-1) , (iy-1) , iz) + 0.25 * getValGridMG(g, (ix+1) , (iy-1) , iz) + 0.25 * getValGridMG(g, (ix-1) , (iy+1) , iz) + 0.25 * getValGridMG(g, (ix+1) , (iy+1) , iz) ); } } /*********************************************************/ void interpolationCubicGridMG(GridMG* g) { GridMG* newGrid = getNewGridMGFromOldGrid(g); interpolationCubicSrcGridMG(g, newGrid); destroyGridMG(newGrid); } /*********************************************************/ void interpolationTriLinearSrcGridMG(GridMG* g, GridMG* src) { gint ix, iy, iz; gdouble a1, a2, a3, a4; gint iXBegin = src->domain.iXBeginInterior - 1; gint iYBegin = src->domain.iYBeginInterior - 1; gint iZBegin = src->domain.iZBeginInterior - 1; gint iXEnd = src->domain.iXEndInterior + 1; gint iYEnd = src->domain.iYEndInterior + 1; gint iZEnd = src->domain.iZEndInterior + 1; g->domain = src->domain; levelUpGridMG(g); initAllGridMG(g,0.0); addValGridMG(g, iXBegin,iYBegin,iZBegin, getValGridMG(src, iXBegin,iYBegin,iZBegin) ); /* Interpolation of the first xy-plane where z = 0 */ #ifdef ENABLE_OMP #pragma omp parallel for private(ix) #endif for(ix = iXBegin+1 ; ix <=iXEnd ; ix++) { addValGridMG(g, 2*ix-1, iYBegin, iZBegin, 0.5*( getValGridMG(src, ix-1,iYBegin, iZBegin) + getValGridMG(src, ix, iYBegin, iZBegin) ) ); addValGridMG(g, 2*ix, iYBegin, iZBegin , getValGridMG(src, ix, iYBegin, iZBegin)); } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,a1,a2) #endif for(iy = iYBegin+1 ; iy <=iYEnd ; iy++) { addValGridMG(g, iXBegin, 2*iy-1, iZBegin, 0.5*( getValGridMG(src, iXBegin, iy-1, iZBegin) + getValGridMG(src, iXBegin, iy, iZBegin) ) ); addValGridMG(g, iXBegin, 2*iy, iZBegin, getValGridMG(src, iXBegin,iy, iZBegin)); for(ix = iXBegin+1 ; ix <=iXEnd ; ix++) { a1 = 0.5*( getValGridMG(src, ix, iy-1, iZBegin) + getValGridMG(src, ix, iy, iZBegin) ); a2 = 0.5*( getValGridMG(src, ix-1, iy-1, iZBegin) + getValGridMG(src, ix-1, iy, iZBegin) ); addValGridMG(g, 2*ix-1, 2*iy-1, iZBegin, 0.5 * ( a1 + a2)); addValGridMG(g, 2*ix, 2*iy-1, iZBegin, a1); addValGridMG(g, 2*ix-1, 2*iy, iZBegin, 0.5*( getValGridMG(src, ix-1, iy, iZBegin) + getValGridMG(src, ix, iy, iZBegin))); addValGridMG(g, 2*ix, 2*iy, iZBegin, getValGridMG(src, ix, iy, iZBegin)); } } /* Interpolation of other xy-plane where 0domain); reAllocValuesTableGridMG(g); } /*********************************************************/ void restrictionSrcGridMG(GridMG* g, GridMG* src) { gint ix, iy, iz; gint x0, xp, xm, y0, yp, ym, z0, zp, zm; gdouble face, corner, edge; static gdouble scale = 1.0 / 64.0; DomainMG domain; /*printf("Begin restriction\n");*/ g->domain = src->domain; levelDownGridMG(g); domain = g->domain; gint iXBegin = domain.iXBeginInterior; gint iXEnd = domain.iXEndInterior; gint iYBegin = domain.iYBeginInterior; gint iYEnd = domain.iYEndInterior; gint iZBegin = domain.iZBeginInterior; gint iZEnd = domain.iZEndInterior; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz,x0,xp,xm,y0,yp,ym,z0,zp,zm,face,corner,edge) #endif for(ix = iXBegin ; ix <= iXEnd ; ix++) { x0 = 2 * ix; xp = x0 + 1; xm = x0 - 1; for(iy = iYBegin ; iy <= iYEnd ; iy++) { y0 = 2 * iy; yp = y0 + 1; ym = y0 - 1; for(iz = iZBegin ; iz <= iZEnd ; iz++) { z0 = 2 * iz; zp = z0 + 1; zm = z0 - 1; face = getValGridMG(src, xm , y0 , z0) + getValGridMG(src, xp , y0 , z0) + getValGridMG(src, x0 , ym , z0) + getValGridMG(src, x0 , yp , z0) + getValGridMG(src, x0 , y0 , zm) + getValGridMG(src, x0 , y0 , zp); corner = getValGridMG(src, xm , ym , zm) + getValGridMG(src, xm , ym , zp) + getValGridMG(src, xm , yp , zm) + getValGridMG(src, xm , yp , zp) + getValGridMG(src, xp , ym , zm) + getValGridMG(src, xp , ym , zp) + getValGridMG(src, xp , yp , zm) + getValGridMG(src, xp , yp , zp); edge = getValGridMG(src, xm , y0 , zm) + getValGridMG(src, xm , ym , z0) + getValGridMG(src, xm , yp , z0) + getValGridMG(src, xm , y0 , zp) + getValGridMG(src, x0 , ym , zm) + getValGridMG(src, x0 , yp , zm) + getValGridMG(src, x0 , ym , zp) + getValGridMG(src, x0 , yp , zp) + getValGridMG(src, xp , y0 , zm) + getValGridMG(src, xp , ym , z0) + getValGridMG(src, xp , yp , z0) + getValGridMG(src, xp , y0 , zp); setValGridMG(g, ix , iy , iz, scale * ( 8.0 * getValGridMG(src, x0 , y0 , z0) + 4.0 * face + 2.0 * edge + corner )); } } } } /*********************************************************/ void restrictionGridMG(GridMG* g) { GridMG* newGrid = getNewGridMGFromOldGrid(g); restrictionSrcGridMG(g, newGrid); destroyGridMG(newGrid); } /*********************************************************/ void restrictionInjectionSrcGridMG(GridMG* g, GridMG* src) { gint ix, iy, iz; DomainMG domain; gint x0,y0,z0; g->domain = src->domain; levelDownGridMG(g); domain = g->domain; gint iXBegin = domain.iXBeginInterior - 1; gint iXEnd = domain.iXEndInterior + 1; gint iYBegin = domain.iYBeginInterior - 1; gint iYEnd = domain.iYEndInterior + 1; gint iZBegin = domain.iZBeginInterior - 1; gint iZEnd = domain.iZEndInterior + 1; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz,x0,y0,z0) #endif for(ix = iXBegin ; ix <= iXEnd ; ix++) { x0 = 2 * ix; for(iy = iYBegin ; iy <= iYEnd ; iy++) { y0 = 2 * iy; for(iz = iZBegin ; iz <= iZEnd ; iz++) { z0 = 2 * iz; setValGridMG(g, ix , iy , iz, getValGridMG(src, x0 , y0 , z0)); } } } } /*********************************************************/ void restrictionInjectionGridMG(GridMG* g) { GridMG* newGrid = getNewGridMGFromOldGrid(g); restrictionInjectionSrcGridMG(g, newGrid); destroyGridMG(newGrid); } /*********************************************************/ DomainMG getDomainGridMG(GridMG* g) { return g->domain; } /*********************************************************/ static gdouble dotAllGridMG(GridMG* g, GridMG* src) { gdouble p = 0.0; glong i; if(g->domain.size != src->domain.size) { printf(" Error in doAll\n "); return 0.0; } #ifdef ENABLE_OMP #pragma omp parallel for private(i) reduction(+:p) #endif for(i = 0 ; i < g->domain.size ; i++) p += g->values[i]*src->values[i]; p *= g->domain.cellVolume; return p; } /*********************************************************/ static gdouble dotInteriorGridMG(GridMG* g, GridMG* src) { DomainMG domain = g->domain; gint ix; gint iy; gint iz; gint iXBegin = domain.iXBeginInterior; gint iXEnd = domain.iXEndInterior; gint iYBegin = domain.iYBeginInterior; gint iYEnd = domain.iYEndInterior; gint iZBegin = domain.iZBeginInterior; gint iZEnd = domain.iZEndInterior; gdouble p = 0; if(g->domain.size != src->domain.size) { printf(" Error in doInterior\n "); return 0.0; } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) reduction(+:p) #endif for(ix = iXBegin;ix <=iXEnd;ix++) for(iy = iYBegin;iy <=iYEnd;iy++) for(iz = iZBegin;iz <=iZEnd;iz++) { p += getValGridMG(g, ix,iy,iz)*getValGridMG(src, ix,iy,iz); } p *= domain.cellVolume; return p; } /*********************************************************/ static gdouble dotBoundaryGridMG(GridMG* g, GridMG* src) { gint ix; gint iy; gint iz; gdouble p = 0.0; DomainMG domain = g->domain; if(g->domain.size != src->domain.size) { printf(" Error in doBoundary\n "); return 0.0; } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) reduction(+:p) #endif for(ix=domain.iXBeginBoundaryLeft;ix<=domain.iXEndBoundaryLeft;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { p += getValGridMG(g,ix,iy,iz)*getValGridMG(src, ix,iy,iz); } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) reduction(+:p) #endif for(ix=domain.iXBeginBoundaryRight;ix<=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { p += getValGridMG(g,ix,iy,iz)*getValGridMG(src, ix,iy,iz); } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) reduction(+:p) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) { for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryLeft;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { p += getValGridMG(g,ix,iy,iz)*getValGridMG(src, ix,iy,iz); } for(iy = domain.iYBeginBoundaryRight;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { p += getValGridMG(g,ix,iy,iz)*getValGridMG(src, ix,iy,iz); } } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) reduction(+:p) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) { for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryLeft;iz++) { p += getValGridMG(g,ix,iy,iz)*getValGridMG(src, ix,iy,iz); } for(iz = domain.iZBeginBoundaryRight;iz <=domain.iZEndBoundaryRight;iz++) { p += getValGridMG(g,ix,iy,iz)*getValGridMG(src, ix,iy,iz); } } p *= domain.cellVolume; return p; } /*********************************************************/ gdouble dotGridMG(GridMG*g, GridMG* src) { switch(g->operationType) { case GABEDIT_ALL: return dotAllGridMG(g, src);break; case GABEDIT_INTERIOR: return dotInteriorGridMG(g, src);break; case GABEDIT_BOUNDARY: return dotBoundaryGridMG(g, src);break; } return 1.0; } /*********************************************************/ static gdouble normAllGridMG(GridMG* g) { glong i; gdouble n = 0; #ifdef ENABLE_OMP #pragma omp parallel for private(i) reduction(+:n) #endif for(i = 0;i < g->domain.size ; i++) n += g->values[i]*g->values[i]; return sqrt(n*g->domain.cellVolume); } /*********************************************************/ static gdouble normInteriorGridMG(GridMG* g) { DomainMG domain = g->domain; gdouble n = 0; gint ix; gint iy; gint iz; gint iXBegin = domain.iXBeginInterior; gint iXEnd = domain.iXEndInterior; gint iYBegin = domain.iYBeginInterior; gint iYEnd = domain.iYEndInterior; gint iZBegin = domain.iZBeginInterior; gint iZEnd = domain.iZEndInterior; if(g->domain.size<=0) return 0; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) reduction(+:n) #endif for(ix = iXBegin;ix <=iXEnd;ix++) for(iy = iYBegin;iy <=iYEnd;iy++) for(iz = iZBegin;iz <=iZEnd;iz++) n += getValGridMG(g,ix,iy,iz)*getValGridMG(g,ix,iy,iz); return sqrt(n*domain.cellVolume); } /*********************************************************/ static gdouble normBoundaryGridMG(GridMG* g) { gdouble n = 0; DomainMG domain = g->domain; gint ix; gint iy; gint iz; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) reduction(+:n) #endif for(ix=domain.iXBeginBoundaryLeft;ix<=domain.iXEndBoundaryLeft;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) n += getValGridMG(g,ix,iy,iz)*getValGridMG(g,ix,iy,iz); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) reduction(+:n) #endif for(ix=domain.iXBeginBoundaryRight;ix<=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) n += getValGridMG(g,ix,iy,iz)*getValGridMG(g,ix,iy,iz); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) reduction(+:n) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) { for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryLeft;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) n += getValGridMG(g,ix,iy,iz)*getValGridMG(g,ix,iy,iz); for(iy = domain.iYBeginBoundaryRight;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) n += getValGridMG(g,ix,iy,iz)*getValGridMG(g,ix,iy,iz); } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) reduction(+:n) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) { for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryLeft;iz++) n += getValGridMG(g,ix,iy,iz)*getValGridMG(g,ix,iy,iz); for(iz = domain.iZBeginBoundaryRight;iz <=domain.iZEndBoundaryRight;iz++) n += getValGridMG(g,ix,iy,iz)*getValGridMG(g,ix,iy,iz); } return sqrt(n*domain.cellVolume); } /*********************************************************/ gdouble normGridMG(GridMG* g) { gdouble n = 0; switch(g->operationType) { case GABEDIT_ALL: n = normAllGridMG(g);break; case GABEDIT_INTERIOR: n = normInteriorGridMG(g);break; case GABEDIT_BOUNDARY: n = normBoundaryGridMG(g);break; } return n; } /*********************************************************/ static gdouble normDiffAllGridMG(GridMG* g, GridMG* src) { glong i; gdouble n = 0; DomainMG domain = g->domain; #ifdef ENABLE_OMP #pragma omp parallel for private(i) reduction(+:n) #endif for(i = 0;i < domain.size ; i++) n += (g->values[i]-src->values[i])*(g->values[i]-src->values[i]); return sqrt(n/(domain.size)); } /*********************************************************/ static gdouble normDiffInteriorGridMG(GridMG* g, GridMG* src) { DomainMG domain = g->domain; gdouble n = 0; gint ix; gint iy; gint iz; gint iXBegin = domain.iXBeginInterior; gint iXEnd = domain.iXEndInterior; gint iYBegin = domain.iYBeginInterior; gint iYEnd = domain.iYEndInterior; gint iZBegin = domain.iZBeginInterior; gint iZEnd = domain.iZEndInterior; gdouble v; if(domain.size<=0) return 0; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz,v) reduction(+:n) #endif for(ix = iXBegin;ix <=iXEnd;ix++) for(iy = iYBegin;iy <=iYEnd;iy++) for(iz = iZBegin;iz <=iZEnd;iz++) { v = getValGridMG(g,ix, iy, iz)-getValGridMG(src, ix, iy, iz ); n += v*v ; } return sqrt(n/((domain.xSize) * (domain.ySize)*(domain.zSize))); } /*********************************************************/ static gdouble normDiffBoundaryGridMG(GridMG* g, GridMG* src) { gdouble n = 0; gint ix; gint iy; gint iz; gdouble v; DomainMG domain = g->domain; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz,v) reduction(+:n) #endif for(ix=domain.iXBeginBoundaryLeft;ix<=domain.iXEndBoundaryLeft;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { v = getValGridMG(g,ix, iy, iz)-getValGridMG(src, ix, iy, iz ); n += v*v ; } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz,v) reduction(+:n) #endif for(ix=domain.iXBeginBoundaryRight;ix<=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { v = getValGridMG(g,ix, iy, iz)-getValGridMG(src, ix, iy, iz ); n += v*v ; } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz,v) reduction(+:n) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) { for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryLeft;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { v = getValGridMG(g,ix, iy, iz)-getValGridMG(src, ix, iy, iz ); n += v*v ; } for(iy = domain.iYBeginBoundaryRight;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { v = getValGridMG(g,ix, iy, iz)-getValGridMG(src, ix, iy, iz ); n += v*v ; } } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz,v) reduction(+:n) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) { for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryLeft;iz++) { v = getValGridMG(g,ix, iy, iz)-getValGridMG(src, ix, iy, iz ); n += v*v ; } for(iz = domain.iZBeginBoundaryRight;iz <=domain.iZEndBoundaryRight;iz++) { v = getValGridMG(g,ix, iy, iz)-getValGridMG(src, ix, iy, iz ); n += v*v ; } } return sqrt( n/( (domain.ySize) * (domain.zSize )*2*domain.nBoundary + (domain.xSize) * (domain.zSize )*2*domain.nBoundary + (domain.ySize) * (domain.zSize )*2*domain.nBoundary ) ); } /*********************************************************/ gdouble normDiffGridMG(GridMG* g, GridMG* src) { gdouble n = 0; switch(g->operationType) { case GABEDIT_ALL: n = normDiffAllGridMG(g,src);break; case GABEDIT_INTERIOR: n = normDiffInteriorGridMG(g,src);break; case GABEDIT_BOUNDARY: n = normDiffBoundaryGridMG(g,src);break; } return n; } /*********************************************************/ static gdouble sommeAllGridMG(GridMG* g) { glong i; gdouble s = 0; DomainMG domain = g->domain; #ifdef ENABLE_OMP #pragma omp parallel for private(i) reduction(+:s) #endif for(i = 0;i < domain.size ; i++) s += g->values[i]; s *= domain.cellVolume; return s; } /*********************************************************/ static gdouble sommeInteriorGridMG(GridMG* g) { gdouble s = 0; DomainMG domain = g->domain; gint ix; gint iy; gint iz; gint iXBegin = domain.iXBeginInterior; gint iXEnd = domain.iXEndInterior; gint iYBegin = domain.iYBeginInterior; gint iYEnd = domain.iYEndInterior; gint iZBegin = domain.iZBeginInterior; gint iZEnd = domain.iZEndInterior; if(domain.size<=0) return 0; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) reduction(+:s) #endif for(ix = iXBegin;ix <=iXEnd;ix++) for(iy = iYBegin;iy <=iYEnd;iy++) for(iz = iZBegin;iz <=iZEnd;iz++) s += getValGridMG(g,ix,iy,iz); s *= domain.cellVolume; return s; } /*********************************************************/ static gdouble sommeBoundaryGridMG(GridMG* g) { gdouble s = 0; gint ix; gint iy; gint iz; DomainMG domain = g->domain; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) reduction(+:s) #endif for(ix=domain.iXBeginBoundaryLeft;ix<=domain.iXEndBoundaryLeft;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) s += getValGridMG(g,ix,iy,iz); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) reduction(+:s) #endif for(ix=domain.iXBeginBoundaryRight;ix<=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) s += getValGridMG(g,ix,iy,iz); #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) reduction(+:s) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) { for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryLeft;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) s += getValGridMG(g,ix,iy,iz); for(iy = domain.iYBeginBoundaryRight;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) s += getValGridMG(g,ix,iy,iz); } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) reduction(+:s) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) { for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryLeft;iz++) s += getValGridMG(g,ix,iy,iz); for(iz = domain.iZBeginBoundaryRight;iz <=domain.iZEndBoundaryRight;iz++) s += getValGridMG(g,ix,iy,iz); } s *= domain.cellVolume; return s; } /*********************************************************/ gdouble sommeGridMG(GridMG* g) { gdouble s = 0; switch(g->operationType) { case GABEDIT_ALL: s = sommeAllGridMG(g);break; case GABEDIT_INTERIOR: s = sommeInteriorGridMG(g);break; case GABEDIT_BOUNDARY: s = sommeBoundaryGridMG(g);break; } return s; } /*********************************************************/ gdouble normalizeGridMG(GridMG* g) { gdouble sum2 = dotInteriorGridMG(g,g); sum2 = 1/sqrt(sum2); multEqualInteriorRealGridMG(g,sum2); return sum2; } /*********************************************************/ void setOperationGridMG(GridMG* g, const OperationTypeMG operation) { g->operationType = operation; } /*********************************************************/ OperationTypeMG getOperationGridMG(GridMG* g) { return g->operationType; } /*********************************************************/ void tradesBoundaryPeriodicGridMG(GridMG* g) { gint ix; gint iy; gint iz; gint j; DomainMG domain = g->domain; #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz,j) #endif for(ix=domain.iXBeginBoundaryLeft ; ix <= domain.iXEndBoundaryLeft ; ix++) { for(iy = domain.iYBeginBoundaryLeft ; iy <= domain.iYEndBoundaryRight ; iy++) for(iz = domain.iZBeginBoundaryLeft ; iz <= domain.iZEndBoundaryRight ; iz++) { j= domain.iXEndInterior - domain.nBoundary+ix-domain.iXBeginBoundaryLeft; setValGridMG(g, ix, iy, iz, getValGridMG(g, j, iy, iz)); } } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz,j) #endif for(ix=domain.iXBeginBoundaryRight ; ix <= domain.iXEndBoundaryRight ; ix++) { for(iy = domain.iYBeginBoundaryLeft ; iy <= domain.iYEndBoundaryRight ; iy++) for(iz = domain.iZBeginBoundaryLeft ; iz <= domain.iZEndBoundaryRight ; iz++) { j = domain.iXBeginInterior+ix-domain.iXBeginBoundaryRight; setValGridMG(g, ix, iy, iz, getValGridMG(g, j, iy, iz)); } } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz,j) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) { j = domain.iYEndInterior - domain.nBoundary; for(iy = domain.iYBeginBoundaryLeft ; iy <=domain.iYEndBoundaryLeft ; iy++, j++) for(iz = domain.iZBeginBoundaryLeft ; iz <=domain.iZEndBoundaryRight ; iz++) setValGridMG(g, ix, iy, iz, getValGridMG(g, ix, j, iz)); j = domain.iYBeginInterior; for(iy = domain.iYBeginBoundaryRight ; iy <=domain.iYEndBoundaryRight; iy++, j++) for(iz = domain.iZBeginBoundaryLeft; iz <=domain.iZEndBoundaryRight; iz++) setValGridMG(g, ix, iy, iz, getValGridMG(g, ix, j, iz)); } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz,j) #endif for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) { j = domain.iZEndInterior - domain.nBoundary; for(iz = domain.iZBeginBoundaryLeft ; iz <=domain.iZEndBoundaryLeft ; iz++, j++) setValGridMG(g, ix, iy, iz, getValGridMG(g, ix, iy, j)); j = domain.iZBeginInterior; for(iz = domain.iZBeginBoundaryRight ; iz <=domain.iZEndBoundaryRight ; iz++, j++) setValGridMG(g, ix, iy, iz, getValGridMG(g, ix, iy, j)); } } /*********************************************************/ void tradesBoundaryGridMG(GridMG* g, const Condition condition) { switch(condition) { case GABEDIT_CONDITION_PERIODIC : tradesBoundaryPeriodicGridMG(g);break; case GABEDIT_CONDITION_CLUSTER : initBoundaryGridMG(g,0.0);break; case GABEDIT_CONDITION_MULTIPOL : case GABEDIT_CONDITION_EXTERNAL : case GABEDIT_CONDITION_EWALD : printf("Error(Grid Class), I can not set boundaris using MULTIPOL approximation or EXTERNAL\n"); break; } } /**************************************************************************************/ void printGridMG(GridMG* g, const gint ix, const gint iy, const gint iz) { char t[BSIZE]; sprintf(t,"SLICE %4d %4d %4d",ix,iy,iz); printf("%20s %14.8f \n", t, getValGridMG(g, ix, iy, iz)); } /*********************************************************/ void printAllGridMG(GridMG* g) { gint ix; gint iy; gint iz; char t1[BSIZE]; DomainMG domain = g->domain; for(ix=domain.iXBeginBoundaryLeft ; ix<=domain.iXEndBoundaryRight ; ix++) for(iy = domain.iYBeginBoundaryLeft ; iy <=domain.iYEndBoundaryRight ; iy++) for(iz = domain.iZBeginBoundaryLeft ; iz <=domain.iZEndBoundaryRight ; iz++) { sprintf(t1,"%d %d %d %14.8f\n",ix, iy, iz, getValGridMG(g,ix, iy, iz)); printf("%s",t1); } } /*********************************************************/ void printInteriorGridMG(GridMG* g) { char t1[BSIZE]; DomainMG domain = g->domain; gint ix; gint iy; gint iz; gint iXBegin = domain.iXBeginInterior; gint iXEnd = domain.iXEndInterior; gint iYBegin = domain.iYBeginInterior; gint iYEnd = domain.iYEndInterior; gint iZBegin = domain.iZBeginInterior; gint iZEnd = domain.iZEndInterior; for(ix = iXBegin;ix <=iXEnd;ix++) for(iy = iYBegin;iy <=iYEnd;iy++) for(iz = iZBegin;iz <=iZEnd;iz++) { sprintf(t1,"%d %d %d %14.8f\n",ix, iy, iz, getValGridMG(g,ix,iy,iz)); /* sprintf(t1,"%d %d %d %f %f %f %14.8f\n",ix, iy, iz, domain.x0+ix*domain.xh, domain.y0+iy*domain.yh, domain.z0+iz*domain.zh, getValGridMG(g,ix,iy,iz)); */ printf("%s",t1); } } /*********************************************************/ void printBoundaryGridMG(GridMG* g) { char t1[BSIZE]; gint ix; gint iy; gint iz; DomainMG domain = g->domain; for(ix=domain.iXBeginBoundaryLeft;ix<=domain.iXEndBoundaryLeft;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { sprintf(t1,"%d %d %d %14.8f\n",ix, iy, iz, getValGridMG(g,ix, iy, iz)); printf("%s",t1); } for(ix=domain.iXBeginBoundaryRight;ix<=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { sprintf(t1,"%d %d %d %14.8f\n",ix, iy, iz, getValGridMG(g,ix, iy, iz)); printf("%s",t1); } for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) { for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryLeft;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { sprintf(t1,"%d %d %d %14.8f\n",ix, iy, iz, getValGridMG(g,ix, iy, iz)); printf("%s",t1); } for(iy = domain.iYBeginBoundaryRight;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { sprintf(t1,"%d %d %d %14.8f\n",ix, iy, iz, getValGridMG(g,ix, iy, iz)); printf("%s",t1); } } for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) { for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryLeft;iz++) { sprintf(t1,"%d %d %d %14.8f\n",ix, iy, iz, getValGridMG(g,ix, iy, iz)); printf("%s",t1); } for(iz = domain.iZBeginBoundaryRight;iz <=domain.iZEndBoundaryRight;iz++) { sprintf(t1,"%d %d %d %14.8f\n",ix, iy, iz, getValGridMG(g,ix, iy, iz)); printf("%s",t1); } } } /*********************************************************/ void printGridMGAll(GridMG* g) { switch(g->operationType) { case GABEDIT_ALL: printAllGridMG(g);break; case GABEDIT_INTERIOR: printInteriorGridMG(g);break; case GABEDIT_BOUNDARY: printBoundaryGridMG(g);break; } } /*********************************************************/ void printGridFileGridMG(GridMG* g, FILE* file) { DomainMG domain = g->domain; gint ix; gint iy; gint iz; char t1[BSIZE]; fprintf(file,"GABEDIT\n"); fprintf(file,"Poisson density\n"); sprintf(t1,"%d %14.8f %14.8f %14.8f",-(8),domain.x0,domain.y0,domain.z0); fprintf(file,"%s\n",t1); sprintf(t1,"%d %14.8f %14.8f %14.8f",domain.xSize + 2,domain.xh,0.0,0.0); fprintf(file,"%s\n",t1); sprintf(t1,"%d %14.8f %14.8f %14.8f",domain.ySize + 2 ,0.0,domain.yh,0.0); fprintf(file,"%s\n",t1); sprintf(t1,"%d %14.8f %14.8f %14.8f",domain.zSize + 2 ,0.0,0.0,domain.zh); fprintf(file,"%s\n",t1); gdouble x,y,z; x = domain.x0 + domain.iXEndBoundaryLeft * domain.xh; y = domain.y0 + domain.iYEndBoundaryLeft * domain.yh; z = domain.z0 + domain.iZEndBoundaryLeft * domain.zh; sprintf(t1,"%d %14.8f %14.8f %14.8f %14.8f ", 4, 4.0, x, y, z); fprintf(file,"%s\n",t1); x = domain.x0 + domain.iXEndBoundaryLeft * domain.xh; y = domain.y0 + domain.iYEndBoundaryLeft * domain.yh; z = domain.z0 + domain.iZBeginBoundaryRight * domain.zh; sprintf(t1,"%d %14.8f %14.8f %14.8f %14.8f ", 4, 4.0, x, y, z); fprintf(file,"%s\n",t1); x = domain.x0 + domain.iXEndBoundaryLeft * domain.xh; y = domain.y0 + domain.iYBeginBoundaryRight * domain.yh; z = domain.z0 + domain.iZEndBoundaryLeft * domain.zh; sprintf(t1,"%d %14.8f %14.8f %14.8f %14.8f ", 4, 4.0, x, y, z); fprintf(file,"%s\n",t1); x = domain.x0 + domain.iXBeginBoundaryRight * domain.xh; y = domain.y0 + domain.iYEndBoundaryLeft * domain.yh; z = domain.z0 + domain.iZEndBoundaryLeft * domain.zh; sprintf(t1,"%d %14.8f %14.8f %14.8f %14.8f ", 4, 4.0, x, y, z); fprintf(file,"%s\n",t1); x = domain.x0 + domain.iXBeginBoundaryRight * domain.xh; y = domain.y0 + domain.iYBeginBoundaryRight * domain.yh; z = domain.z0 + domain.iZEndBoundaryLeft * domain.zh; sprintf(t1,"%d %14.8f %14.8f %14.8f %14.8f ", 4, 4.0, x, y, z); fprintf(file,"%s\n",t1); x = domain.x0 + domain.iXBeginBoundaryRight * domain.xh; y = domain.y0 + domain.iYEndBoundaryLeft * domain.yh; z = domain.z0 + domain.iZBeginBoundaryRight * domain.zh; sprintf(t1,"%d %14.8f %14.8f %14.8f %14.8f ", 4, 4.0, x, y, z); fprintf(file,"%s\n",t1); x = domain.x0 + domain.iXEndBoundaryLeft * domain.xh; y = domain.y0 + domain.iYBeginBoundaryRight * domain.yh; z = domain.z0 + domain.iZBeginBoundaryRight * domain.zh; sprintf(t1,"%d %14.8f %14.8f %14.8f %14.8f ", 4, 4.0, x, y, z); fprintf(file,"%s\n",t1); x = domain.x0 + domain.iXBeginBoundaryRight * domain.xh; y = domain.y0 + domain.iYBeginBoundaryRight * domain.yh; z = domain.z0 + domain.iZBeginBoundaryRight * domain.zh; sprintf(t1,"%d %14.8f %14.8f %14.8f %14.8f ", 4, 4.0, x, y, z); fprintf(file,"%s\n",t1); sprintf(t1,"%d %d",1,1); fprintf(file,"%s\n",t1); for(ix=domain.iXBeginInterior-1 ; ix<=domain.iXEndInterior + 1 ; ix++) for(iy = domain.iYBeginInterior - 1 ; iy <=domain.iYEndInterior + 1 ; iy++) { for(iz = domain.iZBeginInterior -1 ; iz <=domain.iZEndInterior + 1 ; iz++) { sprintf(t1,"%14.8f",getValGridMG(g,ix, iy, iz)); fprintf(file,"%s ",t1); if((iz+1)%6==0) fprintf(file,"\n"); } if((domain.iZEndBoundaryRight - domain.iZBeginBoundaryLeft +1)%6 != 0) fprintf(file,"\n"); } } /*********************************************************/ void printFileNameGridMG(GridMG* g, char* fileName) { FILE* file; file = fopen(fileName,"w"); if(!file) return; printGridFileGridMG(g,file); fclose(file); } /*********************************************************/ gdouble getMaxGridMG(GridMG* g) { DomainMG domain = g->domain; gint ix; gint iy; gint iz; gint ixMax = domain.iXBeginInterior; gint iyMax = domain.iYBeginInterior; gint izMax = domain.iZBeginInterior; if(domain.size <1) { printf("ERROR Size =%d\n",domain.size); return -1; } #ifdef ENABLE_OMP #pragma omp parallel for private(ix,iy,iz) #endif for(ix=domain.iXBeginInterior ; ix<=domain.iXEndInterior ; ix++) for(iy = domain.iYBeginInterior ; iy <=domain.iYEndInterior ; iy++) for(iz = domain.iZBeginInterior ; iz <=domain.iZEndInterior ; iz++) if(getValGridMG(g,ixMax, iyMax, izMax) < getValGridMG(g,ix, iy, iz)) { ixMax = ix; iyMax = iy; izMax = iz; } return getValGridMG(g,ixMax, iyMax, izMax); } /*********************************************************/ void printMaxGridMG(GridMG* g) { DomainMG domain = g->domain; gint ix; gint iy; gint iz; gint ixMax = domain.iXBeginInterior; gint iyMax = domain.iYBeginInterior; gint izMax = domain.iZBeginInterior; if(domain.size <1) { printf("ERROR Size =%d\n",domain.size); return; } for(ix=domain.iXBeginInterior ; ix<=domain.iXEndInterior ; ix++) for(iy = domain.iYBeginInterior ; iy <=domain.iYEndInterior ; iy++) for(iz = domain.iZBeginInterior ; iz <=domain.iZEndInterior ; iz++) if(getValGridMG(g,ixMax, iyMax, izMax) < getValGridMG(g,ix, iy, iz)) { ixMax = ix; iyMax = iy; izMax = iz; } printf("MAX :"); printGridMG(g, ixMax,iyMax,izMax); } /*********************************************************/ void printMinGridMG(GridMG* g) { DomainMG domain = g->domain; gint ix; gint iy; gint iz; gint ixMin = domain.iXBeginInterior; gint iyMin = domain.iYBeginInterior; gint izMin = domain.iZBeginInterior; if(domain.size <1) { printf("ERROR Size =%d\n",domain.size); return; } for(ix=domain.iXBeginInterior ; ix<=domain.iXEndInterior ; ix++) for(iy = domain.iYBeginInterior ; iy <=domain.iYEndInterior ; iy++) for(iz = domain.iZBeginInterior ; iz <=domain.iZEndInterior ; iz++) if(getValGridMG(g,ixMin, iyMin, izMin) > getValGridMG(g,ix, iy, iz)) { ixMin = ix; iyMin = iy; izMin = iz; } printf("MIN :"); printGridMG(g, ixMin,iyMin,izMin); } /*********************************************************/ gdouble getValGridMG(GridMG* g, gint ix, gint iy, gint iz) { /* gint i = (ix+g->domain.nShift)*g->domain.incx + (iy+g->domain.nShift)*g->domain.incy + (iz+g->domain.nShift)*g->domain.incz; if(i>g->domain.size) printf("ERROR i>size , ix = %d iy = %d iz = %d size = %d i = %d\n",ix,iy,iz,g->domain.size,i); */ return g->values[ (ix+g->domain.nShift)*g->domain.incx + (iy+g->domain.nShift)*g->domain.incy + (iz+g->domain.nShift)*g->domain.incz ]; } /*********************************************************/ void setValGridMG(GridMG* g, gint ix, gint iy, gint iz, gdouble v) { g->values[ (ix+g->domain.nShift)*g->domain.incx + (iy+g->domain.nShift)*g->domain.incy + (iz+g->domain.nShift)*g->domain.incz ]=v; } /*********************************************************/ void addValGridMG(GridMG* g, gint ix, gint iy, gint iz, gdouble v) { g->values[ (ix+g->domain.nShift)*g->domain.incx + (iy+g->domain.nShift)*g->domain.incy + (iz+g->domain.nShift)*g->domain.incz ]+=v; } /*********************************************************/ void multValGridMG(GridMG* g, gint ix, gint iy, gint iz, gdouble v) { g->values[ (ix+g->domain.nShift)*g->domain.incx + (iy+g->domain.nShift)*g->domain.incy + (iz+g->domain.nShift)*g->domain.incz ]*=v; } GabeditSrc250/src/MultiGrid/Dep.mk0000644000175100017510000000143113130664665017231 0ustar allouchealloucheDomainMG.o: DomainMG.c ../../Config.h ../Utils/Vector3d.h \ ../Utils/Transformation.h ../Utils/Constants.h DomainMG.h TypesMG.h GridMG.o: GridMG.c ../../Config.h ../Utils/Vector3d.h \ ../Utils/Transformation.h ../Utils/Constants.h GridMG.h DomainMG.h \ TypesMG.h PoissonMG.o: PoissonMG.c ../../Config.h ../Utils/Vector3d.h \ ../Utils/Transformation.h ../Utils/Constants.h ../Utils/Zlm.h \ ../Utils/../Common/GabeditType.h ../Utils/MathFunctions.h \ ../Utils/Zlm.h PoissonMG.h GridMG.h DomainMG.h TypesMG.h \ ../Common/GabeditType.h ../Display/GlobalOrb.h \ ../Display/../Files/GabeditFileChooser.h ../Display/../../gl2ps/gl2ps.h \ ../Display/Grid.h ../Display/../MultiGrid/PoissonMG.h \ ../Display/IsoSurface.h ../Display/../Common/GabeditType.h \ ../Display/StatusOrb.h GabeditSrc250/src/MultiGrid/TypesMG.h0000644000175100017510000000155413130665225017670 0ustar alloucheallouche#ifndef __GABEDIT_TYPESMG_H__ #define __GABEDIT_TYPESMG_H__ #define MAXBOUNDARY 12 typedef enum { GABEDIT_INTERIOR = 0, GABEDIT_BOUNDARY = 1, GABEDIT_ALL = 2 } OperationTypeMG; typedef enum { GABEDIT_LAPLACIAN_2 = 2, GABEDIT_LAPLACIAN_4 = 4, GABEDIT_LAPLACIAN_6 = 6, GABEDIT_LAPLACIAN_8 = 8, GABEDIT_LAPLACIAN_10 = 10, GABEDIT_LAPLACIAN_12 = 12, GABEDIT_LAPLACIAN_14 = 14, GABEDIT_LAPLACIAN_16 = 16, GABEDIT_LAPLACIAN_18 = 18, GABEDIT_LAPLACIAN_20 = 20, GABEDIT_LAPLACIAN_22 = 22, GABEDIT_LAPLACIAN_24 = 24 } LaplacianOrderMG; typedef enum { GABEDIT_CONDITION_PERIODIC = 0, GABEDIT_CONDITION_CLUSTER = 1, GABEDIT_CONDITION_MULTIPOL = 2, GABEDIT_CONDITION_EWALD = 3, GABEDIT_CONDITION_EXTERNAL = 4 } Condition; typedef enum { GABEDIT_UNK = 0, GABEDIT_CG = 1, GABEDIT_MG = 2, GABEDIT_EXACT = 3, } PoissonSolverMethod; #endif /* __GABEDIT_TYPESMG_H__*/ GabeditSrc250/src/MultiGrid/PoissonMG.c0000644000175100017510000006613613130665225020220 0ustar alloucheallouche/* PoissonMG.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include #include "../Utils/Vector3d.h" #include "../Utils/Transformation.h" #include "../Utils/Constants.h" #include "../Utils/Zlm.h" #include "../Utils/MathFunctions.h" #include "PoissonMG.h" #include "../Common/GabeditType.h" #include "../Display/GlobalOrb.h" #include "../Display/StatusOrb.h" /*********************************************************/ PoissonMG* getPoissonUsingDomain(DomainMG* domain) { PoissonMG * ps = g_malloc(sizeof(PoissonMG)); ps->potential = getNewGridMGUsingDomain(domain); ps->source = getNewGridMGUsingDomain(domain); setOperationGridMG(ps->potential, GABEDIT_ALL); setOperationGridMG(ps->source, GABEDIT_ALL); ps->condition = GABEDIT_CONDITION_MULTIPOL; ps->setBoundary = NULL; ps->diag = 1; return ps; } /*********************************************************/ PoissonMG* getNullPoissonMG() { DomainMG domain = getNullDomainMG(); return getPoissonUsingDomain(&domain); } /*********************************************************/ PoissonMG* getPoissonMG2(GridMG* p, GridMG* s, Condition c, SetBoundary set) { if(!s) return getNullPoissonMG(); /* PoissonMG* ps = getPoissonUsingDomain(&(s->domain)); if(!p) p = getNewGridMGUsingDomain(&(s->domain)); */ PoissonMG * ps = g_malloc(sizeof(PoissonMG)); ps->potential = p; ps->source = s; ps->diag = getDiagGridMG(ps->potential); ps->condition = c; ps->setBoundary = NULL; return ps; } /*********************************************************/ PoissonMG* getPoissonMG(GridMG* p, GridMG* s) { return getPoissonMG2(p,s, GABEDIT_CONDITION_MULTIPOL, NULL); } /*********************************************************/ PoissonMG* getCopyPoissonMG(PoissonMG* ps) { if(!ps) return getNullPoissonMG(); PoissonMG * newps = g_malloc(sizeof(PoissonMG)); newps->potential = getNewGridMGFromOldGrid(ps->potential); newps->source = getNewGridMGFromOldGrid(ps->source); newps->diag = ps->diag ; newps->condition = ps->condition ; newps->setBoundary = ps->setBoundary; return newps; } /*********************************************************/ void destroyPoissonMG(PoissonMG* ps) { destroyGridMG(ps->potential); destroyGridMG(ps->source); ps->diag = 1; } /*********************************************************/ void setOperationPoissonMG(PoissonMG* ps, OperationTypeMG operation) { setOperationGridMG(ps->potential, operation); setOperationGridMG(ps->source, operation); } /*********************************************************/ DomainMG getDomainPoissonMG(PoissonMG* ps) { return getDomainGridMG(ps->potential); } /*********************************************************/ gdouble getDiagPoissonMG(PoissonMG* ps) { return getDiagGridMG(ps->potential); } /*********************************************************/ void prolongationPoissonMG(PoissonMG* ps) { prolongationGridMG(ps->potential); levelUpGridMG(ps->source); ps->diag = getDiagGridMG(ps->potential); } /*********************************************************/ void interpolationTriLinearPoissonMG(PoissonMG* ps) { interpolationTriLinearGridMG(ps->potential); levelUpGridMG(ps->source); ps->diag = getDiagGridMG(ps->potential); } /*********************************************************/ void interpolationCubicPoissonMG(PoissonMG* ps) { interpolationCubicGridMG(ps->potential); levelUpGridMG(ps->source); ps->diag = getDiagGridMG(ps->potential); } /*********************************************************/ void restrictionPoissonMG(PoissonMG* ps) { DomainMG domain = getDomainPoissonMG(ps); GridMG* tau = getNewGridMGUsingDomain(&domain); laplacianGridMG(tau,ps->potential); restrictionGridMG(ps->potential); /*restrictionInjectionGridMG(ps->potential);*/ tradesBoundaryPoissonMG(ps); /* Important pour le calcul du laplacien*/ restrictionGridMG(ps->source); restrictionGridMG(tau); multEqualRealGridMG(tau,-1.0); ps->diag = plusLaplacianGridMG(tau,ps->potential); plusEqualGridMG(ps->source,tau); } /*********************************************************/ void restrictionInjectionPoissonMG(PoissonMG* ps) { DomainMG domain = getDomainPoissonMG(ps); GridMG* tau = getNewGridMGUsingDomain(&domain); laplacianGridMG(tau,ps->potential); restrictionInjectionGridMG(ps->potential); tradesBoundaryPoissonMG(ps); /* Important pour le calcul du laplacien*/ restrictionInjectionGridMG(ps->source); restrictionInjectionGridMG(tau); multEqualRealGridMG(tau,-1.0); ps->diag = plusLaplacianGridMG(tau,ps->potential); plusEqualGridMG(ps->source,tau); destroyGridMG(tau); } /*********************************************************/ GridMG* residualPoissonMG(PoissonMG* ps) { OperationTypeMG opPotential = getOperationGridMG(ps->potential); OperationTypeMG opSource = getOperationGridMG(ps->source); GridMG* res=getNewGridMG(); setOperationGridMG(res, GABEDIT_INTERIOR); setOperationGridMG(ps->potential, GABEDIT_INTERIOR); setOperationGridMG(ps->source, GABEDIT_INTERIOR); copyGridMG(res,ps->source); moinsLaplacianGridMG(res,ps->potential); setOperationGridMG(res, GABEDIT_BOUNDARY); initGridMG(res,0.0); setOperationGridMG(ps->potential, opPotential); setOperationGridMG(ps->source, opSource); setOperationGridMG(res, GABEDIT_INTERIOR); return res; } /*********************************************************/ void setBoundaryEwaldPoissonMG(PoissonMG* ps) { gdouble x,y,z; gdouble xs,ys,zs; gdouble Q = 0; int ixs,iys,izs; gdouble xOff =0, yOff = 0, zOff = 0; DomainMG domain = getDomainPoissonMG(ps); gdouble v = -domain.cellVolume/4/PI; static gdouble PRECISION = 1e-12; printf(_("Set boundaries using ewald sum\n")); setOperationGridMG(ps->potential,GABEDIT_BOUNDARY); initGridMG(ps->potential , 0.0); setOperationGridMG(ps->potential,GABEDIT_ALL); for(ixs=domain.iXBeginInterior;ixs<=domain.iXEndInterior;ixs++) for(iys = domain.iYBeginInterior;iys <=domain.iYEndInterior;iys++) for(izs = domain.iZBeginInterior;izs <=domain.iZEndInterior;izs++) { xs = domain.x0 + ixs*domain.xh - xOff; ys = domain.y0 + iys*domain.yh - yOff; zs = domain.z0 + izs*domain.zh - zOff; Q = getValGridMG(ps->source, ixs, iys, izs)*v; int ix,iy,iz; gdouble x0 = domain.x0 - xOff-xs; gdouble y0 = domain.y0 - yOff-ys; gdouble z0 = domain.z0 - zOff-zs; gdouble invR2; for(ix=domain.iXBeginBoundaryLeft;ix<=domain.iXEndBoundaryLeft;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { x = x0 + ix*domain.xh ; y = y0 + iy*domain.yh ; z = z0 + iz*domain.zh ; invR2 = 1.0 / (x*x + y*y + z*z + PRECISION); addValGridMG(ps->potential, ix, iy, iz, sqrt(invR2) *Q); } for(ix=domain.iXBeginBoundaryRight;ix<=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { x = x0 + ix*domain.xh ; y = y0 + iy*domain.yh ; z = z0 + iz*domain.zh ; invR2 = 1.0 / (x*x + y*y + z*z + PRECISION); addValGridMG(ps->potential, ix, iy, iz, sqrt(invR2) *Q); } for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) { for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryLeft;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { x = x0 + ix*domain.xh ; y = y0 + iy*domain.yh ; z = z0 + iz*domain.zh ; invR2 = 1.0 / (x*x + y*y + z*z + PRECISION); addValGridMG(ps->potential, ix, iy, iz, sqrt(invR2) *Q); } for(iy = domain.iYBeginBoundaryRight;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { x = x0 + ix*domain.xh ; y = y0 + iy*domain.yh ; z = z0 + iz*domain.zh ; invR2 = 1.0 / (x*x + y*y + z*z + PRECISION); addValGridMG(ps->potential, ix, iy, iz, sqrt(invR2) *Q); } } for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) { for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryLeft;iz++) { x = x0 + ix*domain.xh ; y = y0 + iy*domain.yh ; z = z0 + iz*domain.zh ; invR2 = 1.0 / (x*x + y*y + z*z + PRECISION); addValGridMG(ps->potential, ix, iy, iz, sqrt(invR2) *Q); } for(iz = domain.iZBeginBoundaryRight;iz <=domain.iZEndBoundaryRight;iz++) { x = x0 + ix*domain.xh ; y = y0 + iy*domain.yh ; z = z0 + iz*domain.zh ; invR2 = 1.0 / (x*x + y*y + z*z + PRECISION); addValGridMG(ps->potential, ix, iy, iz, sqrt(invR2) *Q); } } } } /*********************************************************/ static void getCOff(PoissonMG* ps, gdouble* pxOff, gdouble* pyOff, gdouble* pzOff) { gdouble temp; gdouble x,y,z; DomainMG domain = getDomainPoissonMG(ps); int ixs,iys,izs; gdouble xOff =0, yOff = 0, zOff = 0; gdouble Q = 0; for(ixs=domain.iXBeginInterior;ixs<=domain.iXEndInterior;ixs++) for(iys = domain.iYBeginInterior;iys <=domain.iYEndInterior;iys++) for(izs = domain.iZBeginInterior;izs <=domain.iZEndInterior;izs++) { x = domain.x0 + ixs*domain.xh; y = domain.y0 + iys*domain.yh; z = domain.z0 + izs*domain.zh; temp = getValGridMG(ps->source,ixs, iys, izs); Q += temp; xOff += temp*x; yOff += temp*y; zOff += temp*z; } if(Q!=0) { *pxOff = xOff/Q; *pyOff = yOff/Q; *pzOff = zOff/Q; } else { *pxOff = 0; *pyOff = 0; *pzOff = 0; } } /*********************************************************/ void setBoundaryMultipolPoissonMG(PoissonMG* ps) { const int lmax = 3; Zlm zlm[lmax+1][2*lmax+1+1]; gint l,m; gint i; static gdouble PRECISION = 1e-12; gdouble temp; gdouble x,y,z; DomainMG domain = getDomainPoissonMG(ps); gdouble Q[lmax+1][2*lmax+1+1]; int ixs,iys,izs; gdouble v = -domain.cellVolume/4/PI; gdouble R[3]; gdouble xOff =0, yOff = 0, zOff = 0; gdouble r; /* printf("Begin Set boundaries using multipole approximation\n");*/ for( l=0; l<=lmax; l++) for( m=-l; m<=l; m++) { zlm[l][m+l] = getZlm(l, m); } /* printf("End Zlm\n");*/ for( l=0; l<=lmax; l++) for( m=-l; m<=l; m++) Q[l][m+l] = 0.0; printf(_("Set boundaries using multipole approximation\n")); setOperationGridMG(ps->potential,GABEDIT_BOUNDARY); initGridMG(ps->potential,0.0); /* printf("End initGridMG\n");*/ setOperationGridMG(ps->potential,GABEDIT_ALL); getCOff(ps, &xOff, &yOff, &zOff); for(ixs=domain.iXBeginInterior;ixs<=domain.iXEndInterior;ixs++) for(iys = domain.iYBeginInterior;iys <=domain.iYEndInterior;iys++) for(izs = domain.iZBeginInterior;izs <=domain.iZEndInterior;izs++) { x = domain.x0 + ixs*domain.xh - xOff; y = domain.y0 + iys*domain.yh - yOff; z = domain.z0 + izs*domain.zh - zOff; temp = getValGridMG(ps->source,ixs, iys, izs)*v; r = sqrt(x*x + y*y + z*z+PRECISION); R[0] = x; R[1] = y; R[2] = z; if(r>0) for( i=0; i<3; i++) R[i] /= r; for( l=0; l<=lmax; l++) { gdouble p = temp*pow(r,l); for( m=-l; m<=l; m++) { Q[l][m+l] += p*getValueZlm(&zlm[l][m+l],R[0],R[1],R[2]); } } } printf(_("Total charge = %f\n"),Q[0][0]*sqrt(4*PI)); printf(_("Center = %f %f %f\n"),xOff, yOff, zOff); for( l=0; l<=lmax; l++) for( m=-l; m<=l; m++) { unsigned int absm = abs(m); gdouble Norm = 1; Norm = sqrt((2*l+1)/(4*PI))*sqrt(factorial(l+absm)*factorial(l-absm))/factorial(l)/pow(2.0,absm); if(m!=0) Norm *= sqrt(2.0); printf("Q(%d,%d)=%f\n",l,m,Q[l][m+l]/Norm); Q[l][m+l] *= 4*PI/(2*l+1); } int ix,iy,iz; gdouble x0 = domain.x0 - xOff; gdouble y0 = domain.y0 - yOff; gdouble z0 = domain.z0 - zOff; gdouble invR; for(ix=domain.iXBeginBoundaryLeft;ix<=domain.iXEndBoundaryLeft;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { x = x0 + ix*domain.xh ; y = y0 + iy*domain.yh ; z = z0 + iz*domain.zh ; invR = 1.0 /sqrt (x*x + y*y + z*z + PRECISION); R[0] = x*invR; R[1] = y*invR; R[2] = z*invR; gdouble v = 0; for( l=0; l<=lmax; l++) { temp = pow(invR,l+1); for( m=-l; m<=l; m++) { if(fabs(Q[l][m+l])<10*PRECISION) continue; v += temp*getValueZlm(&zlm[l][m+l],R[0],R[1],R[2])*Q[l][m+l]; } } setValGridMG(ps->potential, ix, iy, iz, v); } for(ix=domain.iXBeginBoundaryRight;ix<=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { x = x0 + ix*domain.xh ; y = y0 + iy*domain.yh ; z = z0 + iz*domain.zh ; invR = 1.0 /sqrt (x*x + y*y + z*z + PRECISION); R[0] = x*invR; R[1] = y*invR; R[2] = z*invR; gdouble v = 0; for( l=0; l<=lmax; l++) { temp = pow(invR,l+1); for( m=-l; m<=l; m++) { if(fabs(Q[l][m+l])<10*PRECISION) continue; v += temp*getValueZlm(&zlm[l][m+l],R[0],R[1],R[2])*Q[l][m+l]; } } setValGridMG(ps->potential, ix, iy, iz, v); } for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) { for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryLeft;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { x = x0 + ix*domain.xh ; y = y0 + iy*domain.yh ; z = z0 + iz*domain.zh ; invR = 1.0 /sqrt (x*x + y*y + z*z + PRECISION); R[0] = x*invR; R[1] = y*invR; R[2] = z*invR; gdouble v = 0; for( l=0; l<=lmax; l++) { temp = pow(invR,l+1); for( m=-l; m<=l; m++) { if(fabs(Q[l][m+l])<10*PRECISION) continue; v += temp*getValueZlm(&zlm[l][m+l],R[0],R[1],R[2])*Q[l][m+l]; } } setValGridMG(ps->potential, ix, iy, iz, v); } for(iy = domain.iYBeginBoundaryRight;iy <=domain.iYEndBoundaryRight;iy++) for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryRight;iz++) { x = x0 + ix*domain.xh ; y = y0 + iy*domain.yh ; z = z0 + iz*domain.zh ; invR = 1.0 /sqrt (x*x + y*y + z*z + PRECISION); R[0] = x*invR; R[1] = y*invR; R[2] = z*invR; gdouble v = 0; for( l=0; l<=lmax; l++) { temp = pow(invR,l+1); for( m=-l; m<=l; m++) { if(fabs(Q[l][m+l])<10*PRECISION) continue; v += temp*getValueZlm(&zlm[l][m+l],R[0],R[1],R[2])*Q[l][m+l]; } } setValGridMG(ps->potential, ix, iy, iz, v); } } for(ix = domain.iXBeginBoundaryLeft;ix <=domain.iXEndBoundaryRight;ix++) for(iy = domain.iYBeginBoundaryLeft;iy <=domain.iYEndBoundaryRight;iy++) { for(iz = domain.iZBeginBoundaryLeft;iz <=domain.iZEndBoundaryLeft;iz++) { x = x0 + ix*domain.xh ; y = y0 + iy*domain.yh ; z = z0 + iz*domain.zh ; invR = 1.0 /sqrt (x*x + y*y + z*z + PRECISION); R[0] = x*invR; R[1] = y*invR; R[2] = z*invR; gdouble v = 0; for( l=0; l<=lmax; l++) { temp = pow(invR,l+1); for( m=-l; m<=l; m++) { if(fabs(Q[l][m+l])<10*PRECISION) continue; v += temp*getValueZlm(&zlm[l][m+l],R[0],R[1],R[2])*Q[l][m+l]; } } setValGridMG(ps->potential, ix, iy, iz, v); } for(iz = domain.iZBeginBoundaryRight;iz <=domain.iZEndBoundaryRight;iz++) { x = x0 + ix*domain.xh ; y = y0 + iy*domain.yh ; z = z0 + iz*domain.zh ; invR = 1.0 /sqrt (x*x + y*y + z*z + PRECISION); R[0] = x*invR; R[1] = y*invR; R[2] = z*invR; gdouble v = 0; for( l=0; l<=lmax; l++) { temp = pow(invR,l+1); for( m=-l; m<=l; m++) { if(fabs(Q[l][m+l])<10*PRECISION) continue; v += temp*getValueZlm(&zlm[l][m+l],R[0],R[1],R[2])*Q[l][m+l]; } } setValGridMG(ps->potential, ix, iy, iz, v); } } } /*********************************************************/ gdouble residualNormPoissonMG(PoissonMG* ps) { GridMG* res; gdouble normal = 1; res = residualPoissonMG(ps); setOperationGridMG(res, GABEDIT_INTERIOR); normal = normGridMG(res); destroyGridMG(res); return normal; } /*********************************************************/ void tradesBoundaryPoissonMG(PoissonMG* ps) { switch(ps->condition) { case GABEDIT_CONDITION_PERIODIC : case GABEDIT_CONDITION_CLUSTER : tradesBoundaryGridMG(ps->potential, ps->condition); break; case GABEDIT_CONDITION_MULTIPOL : setBoundaryMultipolPoissonMG(ps); break; case GABEDIT_CONDITION_EWALD : setBoundaryEwaldPoissonMG(ps); break; case GABEDIT_CONDITION_EXTERNAL : ps->setBoundary(ps->potential, ps->source); break; } } /*********************************************************/ void smootherPoissonMG(PoissonMG* ps, int max) { OperationTypeMG opPotential = getOperationGridMG(ps->potential); OperationTypeMG opSource = getOperationGridMG(ps->source); GridMG* res =getNewGridMG(); gint i; gdouble rms; setOperationGridMG(res, GABEDIT_INTERIOR); setOperationGridMG(ps->potential, GABEDIT_INTERIOR); setOperationGridMG(ps->source, GABEDIT_INTERIOR); for(i=0;icondition == GABEDIT_CONDITION_PERIODIC) tradesBoundaryPoissonMG(ps); res = residualPoissonMG(ps); rms = normGridMG(res); /* printf("rms = %f\n",rms);*/ multEqualRealGridMG(res, ps->diag*0.8); plusEqualGridMG(ps->potential, res); destroyGridMG(res); } setOperationGridMG(ps->potential, opPotential); setOperationGridMG(ps->source, opSource); } /*********************************************************/ void printFilePoissonMG(PoissonMG* ps) { FILE* file; file = fopen("Poisson.cube","w"); printGridFileGridMG(ps->potential, file); fclose(file); } /*********************************************************/ void printFileNamePoissonMG(PoissonMG* ps, char* fileName) { FILE* file; file = fopen(fileName,"w"); if(!file) return; printGridFileGridMG(ps->potential, file); fclose(file); } /*********************************************************/ void printMinPoissonMG(PoissonMG* ps) { printf("Potential\t"); printMinGridMG(ps->potential); printf("Source\t"); printMinGridMG(ps->source); } /*********************************************************/ void printMaxPoissonMGAll(PoissonMG* ps) { printf("Potential\t"); printMaxGridMG(ps->potential); printf("Source\t"); printMaxGridMG(ps->source); } /*********************************************************/ void printPoissonMG(PoissonMG* ps, int i, int j, int k) { printf("SLICE : %d\t%d\t%d\n",i,j,k); printf("Potential\t"); printGridMG(ps->potential,i,j,k); printf("Source\t\t"); printGridMG(ps->source,i,j,k); } /*********************************************************/ void solveCGPoissonMG(PoissonMG* ps, int max, gdouble acc) { OperationTypeMG opPotential = getOperationGridMG(ps->potential); OperationTypeMG opSource = getOperationGridMG(ps->source); GridMG* d=getNewGridMG(); GridMG* r=getNewGridMG(); GridMG* q=getNewGridMG(); GridMG* t=getNewGridMG(); gdouble deltaNew; gdouble deltaOld; gdouble delta0; gdouble alpha; gdouble beta; gdouble rms; gint i; gdouble scale = 0; gchar tmp[100]; setOperationGridMG(d,GABEDIT_INTERIOR); setOperationGridMG(r,GABEDIT_INTERIOR); setOperationGridMG(q,GABEDIT_INTERIOR); setOperationGridMG(t,GABEDIT_INTERIOR); setOperationGridMG(ps->potential,GABEDIT_INTERIOR); setOperationGridMG(ps->source,GABEDIT_INTERIOR); r = residualPoissonMG(ps); copyGridMG(d,r); deltaNew = dotGridMG(r,r); delta0 = deltaNew; rms = residualNormPoissonMG(ps); tradesBoundaryPoissonMG(ps); copyGridMG(q,r); /* for allocation */ copyGridMG(t,r); /* for allocation */ scale = (gdouble)1.01/max; progress_orb(0,GABEDIT_PROGORB_COMPMEPGRID,TRUE); for(i=0; iacc ;i++) { if(ps->condition == GABEDIT_CONDITION_PERIODIC) tradesBoundaryPoissonMG(ps); laplacianGridMG(q,d); alpha = deltaNew/dotGridMG(d,q); copyGridMG(t,d); multEqualRealGridMG(t,alpha); plusEqualGridMG(ps->potential,t); if((i+1)%50 == 0) { r = residualPoissonMG(ps); } else { copyGridMG(t,q); multEqualRealGridMG(t,-alpha); plusEqualGridMG(r,t); } deltaOld = deltaNew; deltaNew = dotGridMG(r,r); beta = deltaNew/deltaOld; multEqualRealGridMG(d,beta); plusEqualGridMG(d,r); rms = residualNormPoissonMG(ps); /* printf("Solve Poisson by CG i = %d RMS = %f\n",i,rms);*/ progress_orb(scale,GABEDIT_PROGORB_COMPMEPGRID,FALSE); sprintf(tmp,_("MEP : Poisson by CG, rms = %f"),rms); setTextInProgress(tmp); if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPMEPGRID,TRUE); break; } } setOperationGridMG(ps->potential, opPotential); setOperationGridMG(ps->source, opSource); destroyGridMG(d); destroyGridMG(r); destroyGridMG(q); destroyGridMG(t); } /*********************************************************/ gdouble solveMGPoissonMG(PoissonMG* ps, int levelMax) { int level; static int MaxSmmother = 5; gdouble rms = -1; int i; if(levelMax<1) { printf(" Error levelMax=%d < 1\n",levelMax); return rms; } smootherPoissonMG(ps,MaxSmmother); if(levelMax==1) { rms = residualNormPoissonMG(ps); return rms; } PoissonMG* poisson=NULL; GridMG** e = g_malloc((levelMax-1)*sizeof(GridMG*)); GridMG** r = g_malloc((levelMax-1)*sizeof(GridMG*)); level = levelMax -1; i = level - 1; r[i] = residualPoissonMG(ps); setOperationGridMG(r[i], GABEDIT_ALL); restrictionInjectionGridMG(r[i]); e[i] = getNewGridMGFromOldGrid(r[i]); setOperationGridMG(e[i], GABEDIT_ALL); initGridMG(e[i],0.0); poisson = getPoissonMG2(e[i], r[i], ps->condition, NULL); smootherPoissonMG(poisson,MaxSmmother); setOperationGridMG(e[i], GABEDIT_ALL); for(level = levelMax-2; level>=1; level--) { i = level - 1; r[i] = residualPoissonMG(poisson); setOperationGridMG(r[i], GABEDIT_ALL); restrictionInjectionGridMG(r[i]); e[i] = getNewGridMGFromOldGrid(r[i]); setOperationGridMG(e[i], GABEDIT_ALL); initGridMG(e[i],0.0); poisson = getPoissonMG2(e[i], r[i], ps->condition, NULL); smootherPoissonMG(poisson,MaxSmmother); setOperationGridMG(e[i], GABEDIT_ALL); } smootherPoissonMG(poisson,MaxSmmother); setOperationGridMG(e[0], GABEDIT_ALL); for(level = 2; level <= levelMax-1; level++) { i = level - 1; prolongationGridMG(e[i-1]); setOperationGridMG(e[i-1],GABEDIT_INTERIOR); setOperationGridMG(e[i],GABEDIT_INTERIOR); plusEqualGridMG(e[i], e[i-1]); setOperationGridMG(e[i],GABEDIT_ALL); setOperationGridMG(r[i],GABEDIT_ALL); poisson = getPoissonMG2(e[i], r[i], ps->condition, NULL); smootherPoissonMG(poisson,MaxSmmother); } i = levelMax-2; /* printf(" avant prolong e[%d] domain\n",i); printDomain(&(e[i]->domain)); */ prolongationGridMG(e[i]); setOperationGridMG(e[i],GABEDIT_INTERIOR); setOperationGridMG(ps->potential,GABEDIT_INTERIOR); plusEqualGridMG(ps->potential, e[i]); setOperationGridMG(ps->potential,GABEDIT_ALL); smootherPoissonMG(ps,MaxSmmother); rms = residualNormPoissonMG(ps); for(i=0;i=4) { printf("-------------------------------------------\n"); printf("Solve Poisson equation by MultiGrid method\n"); printf("-------------------------------------------\n"); } for(i=0;i<500;i++) { rms = solveMGPoissonMG(ps,levelMax); if(verbose>=4) printf("rms = %f\n",rms); if(rms>0 && rms=4) printf("Number of iterations = %d\n",i+1); break; } } if(verbose>=4) printf("===========================================\n"); } /*********************************************************/ void solveMGPoissonMG3(PoissonMG* ps, int levelMax, int nIter, gdouble acc, int verbose) { gdouble rms = -1; gint i; gdouble scale = 0; gchar tmp[100]; if(verbose>=4) { printf("-------------------------------------------\n"); printf("Solve Poisson equation by MultiGrid method\n"); printf("-------------------------------------------\n"); } progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); setTextInProgress(_("Solve Poisson equation by MultiGrid method, please wait")); scale = (gdouble)1.01/nIter; for(i=0;i=4) printf("rms = %f\n",rms); if(rms>0 && rms=4) printf("Number of iterations = %d\n",i+1); sprintf(tmp,_("MEP : Convergence after %d iterations"),i+1); setTextInProgress(tmp); break; } progress_orb(scale,GABEDIT_PROGORB_COMPMEPGRID,FALSE); sprintf(tmp,_("MEP : Poisson by MultiGrid, rms = %f"),rms); setTextInProgress(tmp); if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPMEPGRID,TRUE); break; } } if(verbose>=4) printf("===========================================\n"); } /*********************************************************/ void solveSmootherPoissonMG2(PoissonMG* ps, int max, int nf) { printf("In solveSmoother---------------\n"); gint n = max/nf; gint i; setOperationGridMG(ps->potential,GABEDIT_ALL); setOperationGridMG(ps->source,GABEDIT_ALL); tradesBoundaryPoissonMG(ps); for(i=1;i<=n;i++) { smootherPoissonMG(ps,nf); printf(" RMS = %f\n",residualNormPoissonMG(ps)); } if(max%nf != 0) smootherPoissonMG(ps,max%nf); } /*********************************************************/ void solveSmootherPoissonMG(PoissonMG* ps, int imax, gdouble eps) { gint i; setOperationGridMG(ps->potential,GABEDIT_ALL); setOperationGridMG(ps->source,GABEDIT_ALL); tradesBoundaryPoissonMG(ps); for(i=1;i<=imax;i++) { smootherPoissonMG(ps,1); if( residualNormPoissonMG(ps) <=eps) break; } } /*********************************************************/ GabeditSrc250/src/MultiGrid/GridMG.h0000644000175100017510000000514013130665225017444 0ustar alloucheallouche#ifndef __GABEDIT_GRIDMG_H__ #define __GABEDIT_GRIDMG_H__ #include "DomainMG.h" typedef struct _GridMG GridMG; struct _GridMG { DomainMG domain; OperationTypeMG operationType; gdouble* values; }; /* public methods for GridMG */ GridMG* getNewGridMG(); GridMG* getNewGridMGUsingDomain(DomainMG* domain); GridMG* getNewGridMGFromOldGrid(GridMG* src); void initGridMG(GridMG* g, gdouble); void equalGridMG(GridMG* g, GridMG* src); void copyGridMG(GridMG* g, GridMG* src); void plusEqualGridMG(GridMG* g, GridMG* src); void moinsEqualGridMG(GridMG* g, GridMG* src); void multEqualGridMG(GridMG* g, GridMG* src); void multEqualRealGridMG(GridMG* g, gdouble a); void divEqualBoundaryGridMG(GridMG* g, gdouble a); gdouble dotGridMG(GridMG* g, GridMG* src); gdouble normGridMG(GridMG* g); gdouble normDiffGridMG(GridMG* g, GridMG* src); gdouble sommeGridMG(GridMG* g); gdouble normalizeGridMG(GridMG* g); void tradesBoundaryGridMG(GridMG* g, const Condition condition); void destroyGridMG(GridMG* g); gdouble* getArrayGridMG(GridMG* g); gdouble getDiagGridMG(GridMG* g); gdouble laplacianGridMG(GridMG* g, GridMG* src); gdouble plusLaplacianGridMG(GridMG* g, GridMG* src); gdouble moinsLaplacianGridMG(GridMG* g, GridMG* src); void averageGridMG(GridMG* g); void resetLaplacianOrderGridMG(GridMG* g, LaplacianOrderMG order); void levelUpGridMG(GridMG* g); GridMG* getInterpolationTriLinearGridMG(GridMG* src); void interpolationTriLinearGridMG(GridMG* g); GridMG* getInterpolationCubicGridMG(GridMG* src); void interpolationCubicGridMG(GridMG* src); GridMG* getProlongationGridMG(GridMG* src); void prolongationGridMG(GridMG* g); void levelDownGridMG(GridMG* g); GridMG* getRestrictionGridMG(GridMG* src); void restrictionGridMG(GridMG* g); GridMG* grtRestrictionInjectionGridMG(GridMG* g, GridMG* src); void restrictionInjectionGridMG(GridMG* g); void addGaussian(GridMG* g, gdouble Z, gdouble x1, gdouble y1, gdouble z1, gdouble sigma); DomainMG getDomainGridMG(GridMG* g); void setOperationGridMG(GridMG* g, const OperationTypeMG); OperationTypeMG getOperationGridMG(GridMG* g); gdouble getValGridMG(GridMG* g, int ix, int iy, int iz); void setValGridMG(GridMG* g, int ix, int iy, int iz, gdouble v); void addValGridMG(GridMG* g, gint ix, gint iy, gint iz, gdouble v); void multValGridMG(GridMG* g, gint ix, gint iy, gint iz, gdouble v); void printGridMG(GridMG* g, const gint ix, const gint iy, const gint iz); void printMaxGridMG(GridMG* g); void printFileNameGridMG(GridMG* g, char* fileName); void printFileGridMG(GridMG* g); void printMinGridMG(GridMG* g); void printGridFileGridMG(GridMG*g,FILE*file); #endif /* __GABEDIT_GRIDMG_H__ */ GabeditSrc250/src/SemiEmpirical/0000755000175100017510000000000013130743374017007 5ustar allouchealloucheGabeditSrc250/src/SemiEmpirical/Makefile0000644000175100017510000000071113130664665020453 0ustar allouchealloucheOBJECTS = AtomSE.o MoleculeSE.o SemiEmpiricalModel.o SemiEmpiricalMD.o SemiEmpirical.o SemiEmpiricalDlg.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/SemiEmpirical/AtomSE.c0000644000175100017510000000775213130665225020314 0ustar alloucheallouche/* AtomSE.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "AtomSE.h" /*****************************************************************/ gdouble getAngleSE(AtomSE *a1,AtomSE* a2,AtomSE* a3) { gdouble* C1 = a1->coordinates; gdouble* C2 = a2->coordinates; gdouble* C3 = a3->coordinates; gdouble x12, x32, y12, y32, z12, z32, l12, l32, dp; x12 = C1[ 0 ] - C2[ 0 ]; y12 = C1[ 1 ] - C2[ 1 ]; z12 = C1[ 2 ] - C2[ 2 ]; x32 = C3[ 0 ] - C2[ 0 ]; y32 = C3[ 1 ] - C2[ 1 ]; z32 = C3[ 2 ] - C2[ 2 ]; l12 = sqrt( x12 * x12 + y12 * y12 + z12 * z12 ); l32 = sqrt( x32 * x32 + y32 * y32 + z32 * z32 ); if( l12 == 0.0 ) { return 0.0; } if( l32 == 0.0 ) { return 0.0; } dp = ( x12 * x32 + y12 * y32 + z12 * z32 ) / (l12 * l32 ); if ( dp < -1.0 ) dp = -1.0; else if ( dp > 1.0 ) dp = 1.0; return RAD_TO_DEG * acos(dp); } /*****************************************************************/ gdouble getTorsionSE(AtomSE* a1,AtomSE* a2,AtomSE* a3,AtomSE* a4) { gdouble* C1 = a1->coordinates; gdouble* C2 = a2->coordinates; gdouble* C3 = a3->coordinates; gdouble* C4 = a4->coordinates; gdouble xij, yij, zij; gdouble xkj, ykj, zkj; gdouble xkl, ykl, zkl; gdouble dx, dy, dz; gdouble gx, gy, gz; gdouble bi, bk; gdouble ct, d, ap, app, bibk; xij = C1[ 0 ] - C2[ 0 ]; yij = C1[ 1 ] - C2[ 1 ]; zij = C1[ 2 ] - C2[ 2 ]; xkj = C3[ 0 ] - C2[ 0 ]; ykj = C3[ 1 ] - C2[ 1 ]; zkj = C3[ 2 ] - C2[ 2 ]; xkl = C3[ 0 ] - C4[ 0 ]; ykl = C3[ 1 ] - C4[ 1 ]; zkl = C3[ 2 ] - C4[ 2 ]; dx = yij * zkj - zij * ykj; dy = zij * xkj - xij * zkj; dz = xij * ykj - yij * xkj; gx = zkj * ykl - ykj * zkl; gy = xkj * zkl - zkj * xkl; gz = ykj * xkl - xkj * ykl; bi = dx * dx + dy * dy + dz * dz; bk = gx * gx + gy * gy + gz * gz; ct = dx * gx + dy * gy + dz * gz; bibk = bi * bk; if ( bibk < 1.0e-6 ) return 0; ct = ct / sqrt( bibk ); if( ct < -1.0 ) ct = -1.0; else if( ct > 1.0 ) ct = 1.0; ap = acos( ct ); d = xkj*(dz*gy-dy*gz) + ykj*(dx*gz-dz*gx) + zkj*(dy*gx-dx*gy); if( d < 0.0 ) ap = -ap; ap = PI - ap; app = 180.0 * ap / PI; if( app > 180.0 ) app = app - 360.0; return( app ); } GabeditSrc250/src/SemiEmpirical/MoleculeSE.c0000644000175100017510000007474713130665225021171 0ustar alloucheallouche/* MoleculeSE.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../Utils/AtomsProp.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/Measure.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomXYZ.h" #include "../Utils/Constants.h" #include "../Utils/Utils.h" #include "AtomSE.h" #include "MoleculeSE.h" void create_GeomXYZ_from_draw_grometry(); static gboolean** bondedMatrix = NULL; #define BOHR_TO_ANG 0.52917726 /**********************************************************************/ MoleculeSE newMoleculeSE() { gint i; MoleculeSE molecule; molecule.nAtoms = 0; molecule.totalCharge = 0; molecule.spinMultiplicity = 0; molecule.atoms = NULL; molecule.energy = 0; for(i=0;i<3;i++) molecule.gradient[i] = NULL; molecule.numberOf2Connections = 0; for(i=0;i<2;i++) molecule.connected2[i] = NULL; molecule.numberOf3Connections = 0; for(i=0;i<3;i++) molecule.connected3[i] = NULL; return molecule; } /**********************************************************************/ void freeMoleculeSE(MoleculeSE* molecule) { gint i; if(molecule->nAtoms<=0) return; if(molecule->atoms != NULL) { for(i=0;inAtoms;i++) { if(molecule->atoms[i].prop.symbol != NULL) g_free(molecule->atoms[i].prop.symbol); if(molecule->atoms[i].mmType !=NULL ) g_free(molecule->atoms[i].mmType); if(molecule->atoms[i].pdbType !=NULL ) g_free(molecule->atoms[i].pdbType); } g_free(molecule->atoms); molecule->atoms = NULL; } molecule->nAtoms = 0; molecule->energy = 0; molecule->totalCharge = 0; molecule->spinMultiplicity = 0; for(i=0;i<3;i++) if(molecule->gradient[i] != NULL) { g_free(molecule->gradient[i]); molecule->gradient[i] = NULL; } molecule->numberOf2Connections = 0; for(i=0;i<2;i++) { if(molecule->connected2[i] != NULL) g_free(molecule->connected2[i]); molecule->connected2[i] = NULL; } molecule->numberOf3Connections = 0; for(i=0;i<3;i++) { if(molecule->connected3[i] != NULL) g_free(molecule->connected3[i]); molecule->connected3[i] = NULL; } } /*****************************************************************************/ static void createBondedMatrix(MoleculeSE* molecule) { gint nAtoms = molecule->nAtoms; gint i; gint j; if(nAtoms<1) return; bondedMatrix = g_malloc(nAtoms*sizeof(gboolean*)); for(i=0;inAtoms; gint i; if(bondedMatrix == NULL) return; for(i=0;iatoms[i]; AtomSE a2 = molecule->atoms[j]; if(molecule->atoms[i].typeConnections) { gint nj = molecule->atoms[j].N-1; if(molecule->atoms[i].typeConnections[nj]>0) return TRUE; else return FALSE; } distance = 0; for (k=0;k<3;k++) { dij = a1.coordinates[k]-a2.coordinates[k]; distance +=dij*dij; } distance = sqrt(distance)/BOHR_TO_ANG; if(distance<(a1.prop.covalentRadii+a2.prop.covalentRadii)) return TRUE; else return FALSE; } /*****************************************************************************/ static void set2Connections(MoleculeSE* molecule) { gint i; gint j; gint k=0; k = molecule->nAtoms; k = k*(k-1)/2; for(i=0;i<2;i++) molecule->connected2[i] = g_malloc(k*sizeof(gint)); k=0; for(i=0;inAtoms-1;i++) for(j=i+1;jnAtoms;j++) { if(isConnected2(molecule,i,j)) { molecule->connected2[0][k]= i; molecule->connected2[1][k]= j; updatebondedMatrix(i,j); k++; } } molecule->numberOf2Connections = k; if(k==0) for(i=0;i<2;i++) { g_free(molecule->connected2[i]); molecule->connected2[i] = NULL; } else for(i=0;i<2;i++) molecule->connected2[i] = g_realloc(molecule->connected2[i],k*sizeof(gint)); /* printing for test*/ /* printf("%d 2 connections : \n",molecule->numberOf2Connections); for(k=0;knumberOf2Connections;k++) { i = molecule->connected2[0][k]; j = molecule->connected2[1][k]; printf("%d-%d ",i,j); } printf("\n"); */ } /*****************************************************************************/ static void permut(gint* a,gint *b) { gint c = *a; *a = *b; *b = c; } /*****************************************************************************/ static gboolean isConnected3(MoleculeSE* molecule,gint n,gint i,gint j, gint k) { gint c; gint a1,a2,a3; for(c=0;cconnected3[0][c]; a2 = molecule->connected3[1][c]; a3 = molecule->connected3[2][c]; if(a1==i && a2 == j && a3 == k) return TRUE; } return FALSE; } /*****************************************************************************/ static gboolean connect3(MoleculeSE* molecule,gint n,gint i,gint j, gint k) { if(i>k)permut(&i,&k); if(!isConnected3(molecule,n,i,j,k)) { molecule->connected3[0][n]= i; molecule->connected3[1][n]= j; molecule->connected3[2][n]= k; updatebondedMatrix(i,j); updatebondedMatrix(i,k); updatebondedMatrix(j,k); return TRUE; } return FALSE; } /*****************************************************************************/ static void set3Connections(MoleculeSE* molecule) { gint i; gint j; gint k=0; gint l=0; gint n=0; k = molecule->numberOf2Connections*molecule->nAtoms; for(i=0;i<3;i++) molecule->connected3[i] = g_malloc(k*sizeof(gint)); n=0; for(k=0;knumberOf2Connections;k++) { i = molecule->connected2[0][k]; j = molecule->connected2[1][k]; for(l=0;lnAtoms;l++) { if(l!=i && l!=j) { if( isConnected2(molecule,i,l)) if( connect3(molecule,n,l,i,j)) n++; if( isConnected2(molecule,j,l)) if( connect3(molecule,n,i,j,l)) n++; } } } molecule->numberOf3Connections = n; if(n==0) for(i=0;i<3;i++) { g_free(molecule->connected3[i]); molecule->connected3[i] = NULL; } else for(i=0;i<3;i++) molecule->connected3[i] = g_realloc(molecule->connected3[i],n*sizeof(gint)); /* printing for test*/ /* printf("%d 3 connections : \n",molecule->numberOf3Connections); for(k=0;knumberOf3Connections;k++) { i = molecule->connected3[0][k]; j = molecule->connected3[1][k]; l = molecule->connected3[2][k]; printf("%d-%d-%d ",i,j,l); } printf("\n"); */ } /*****************************************************************************/ void setConnectionsMoleculeSE(MoleculeSE* molecule) { createBondedMatrix(molecule); /* printf("Set Connection\n");*/ set_text_to_draw(_("Establishing connectivity : 2 connections...")); set_statubar_operation_str(_("Establishing connectivity : 2 connections...")); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); set2Connections(molecule); set_text_to_draw(_("Establishing connectivity : 3 connections...")); set_statubar_operation_str(_("Establishing connectivity : 3 connections...")); drawGeom(); if(StopCalcul) return; while( gtk_events_pending() ) gtk_main_iteration(); set3Connections(molecule); freeBondedMatrix(molecule); } /*****************************************************************************/ MoleculeSE createMoleculeSE(GeomDef* geom,gint natoms, gint charge, gint spin, gboolean connections) { gint i; MoleculeSE molecule = newMoleculeSE(); molecule.nAtoms = natoms; molecule.atoms = g_malloc(molecule.nAtoms*sizeof(AtomSE)); for(i=0;inAtoms; geometry0 = g_malloc((Natoms)*sizeof(GeomDef)); geometry = g_malloc((Natoms)*sizeof(GeomDef)); for(i=0;i<(gint)Natoms;i++) { geometry0[i].X = molecule->atoms[i].coordinates[0]; geometry0[i].Y = molecule->atoms[i].coordinates[1]; geometry0[i].Z = molecule->atoms[i].coordinates[2]; geometry0[i].Charge = molecule->atoms[i].charge; geometry0[i].Prop = prop_atom_get(molecule->atoms[i].prop.symbol); geometry0[i].pdbType = g_strdup(molecule->atoms[i].pdbType); geometry0[i].mmType = g_strdup(molecule->atoms[i].mmType); geometry0[i].Residue = g_strdup(molecule->atoms[i].residueName); geometry0[i].ResidueNumber = molecule->atoms[i].residueNumber; geometry0[i].show = molecule->atoms[i].show; geometry0[i].Variable = molecule->atoms[i].variable; geometry0[i].Layer = molecule->atoms[i].layer; geometry0[i].N = molecule->atoms[i].N; geometry[i].X = molecule->atoms[i].coordinates[0]; geometry[i].Y = molecule->atoms[i].coordinates[1]; geometry[i].Z = molecule->atoms[i].coordinates[2]; geometry[i].Charge = molecule->atoms[i].charge; geometry[i].Prop = prop_atom_get(molecule->atoms[i].prop.symbol); geometry[i].pdbType = g_strdup(molecule->atoms[i].pdbType); geometry[i].mmType = g_strdup(molecule->atoms[i].mmType); geometry[i].Residue = g_strdup(molecule->atoms[i].residueName); geometry[i].ResidueNumber = molecule->atoms[i].residueNumber; geometry[i].show = molecule->atoms[i].show; geometry[i].Variable = molecule->atoms[i].variable; geometry[i].Layer = molecule->atoms[i].layer; geometry[i].N = molecule->atoms[i].N; C[0] += geometry0[i].X; C[1] += geometry0[i].Y; C[2] += geometry0[i].Z; } for(i=0;i<3;i++) C[i] /= Natoms; /* center */ for(i=0;i<(gint)Natoms;i++) { geometry0[i].X -= C[0]; geometry0[i].Y -= C[1]; geometry0[i].Z -= C[2]; geometry[i].X -= C[0]; geometry[i].Y -= C[1]; geometry[i].Z -= C[2]; } for(i=0;i<(gint)Natoms;i++) { geometry0[i].X /=BOHR_TO_ANG; geometry0[i].Y /=BOHR_TO_ANG; geometry0[i].Z /=BOHR_TO_ANG; geometry[i].X /=BOHR_TO_ANG; geometry[i].Y /=BOHR_TO_ANG; geometry[i].Z /=BOHR_TO_ANG; } unselect_all_atoms(); set_text_to_draw(str); set_statubar_operation_str(str); change_of_center(NULL,NULL); reset_all_connections(); create_GeomXYZ_from_draw_grometry(); RebuildGeom = TRUE; drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); } /********************************************************************************/ MoleculeSE copyMoleculeSE(MoleculeSE* m) { gint i; gint j; MoleculeSE molecule = newMoleculeSE(); molecule.energy = m->energy; molecule.nAtoms = m->nAtoms; molecule.totalCharge = m->totalCharge; molecule.spinMultiplicity = m->spinMultiplicity; if( molecule.nAtoms>0) molecule.atoms = g_malloc(molecule.nAtoms*sizeof(AtomSE)); for(i=0;iatoms[i].prop.symbol); for(j=0;j<3;j++) molecule.atoms[i].coordinates[j] = m->atoms[i].coordinates[j]; molecule.atoms[i].charge = m->atoms[i].charge; molecule.atoms[i].mmType = g_strdup(m->atoms[i].mmType); molecule.atoms[i].pdbType = g_strdup(m->atoms[i].pdbType); molecule.atoms[i].residueName = g_strdup(m->atoms[i].residueName); molecule.atoms[i].residueNumber = m->atoms[i].residueNumber; molecule.atoms[i].N = m->atoms[i].N; molecule.atoms[i].layer = m->atoms[i].layer; molecule.atoms[i].show = m->atoms[i].show; molecule.atoms[i].variable = m->atoms[i].variable; if(m->atoms[i].typeConnections) { gint j; molecule.atoms[i].typeConnections = g_malloc(molecule.nAtoms*sizeof(gint)); for(j=0;jatoms[j].N-1; molecule.atoms[i].typeConnections[nj] = m->atoms[i].typeConnections[nj]; } } } if(molecule.nAtoms>0) for(j=0;j<3;j++) /* x, y and z derivatives */ { molecule.gradient[j] = g_malloc(molecule.nAtoms*sizeof(gdouble)); for(i=0;igradient[j][i]; } for(i=0;i<3;i++) molecule.dipole[i] = m->dipole[i]; return molecule; } /******************************************************************************/ static void save_atom_hin_file(FILE* file, char* name, int atomNumber, char* atomPDBType, char* atomMMType, double x, double y, double z, char* symbol, double charge, int N, int* connection, int* connectionType) { int i; fprintf(file,"%s %d ",name,atomNumber); fprintf(file,"%s ",atomPDBType); fprintf(file,"%s ",symbol); fprintf(file,"%s - ",atomMMType); fprintf(file,"%0.14f ",charge); fprintf(file,"%0.14f ",x); fprintf(file,"%0.14f ",y); fprintf(file,"%0.14f ",z); if(N>0) { fprintf(file,"%d ",N); for(i=0;inAtoms; atoms = mol->atoms; fprintf(file,"forcefield Amber99\n"); fprintf(file,"sys 0 0 1\n"); fprintf(file,"view 40 0.1272 55 15 0.247224 0.3713666 0.8949677 -0.8641704 0.5022867 0.0302929 -0.4382806 -0.7808937 0.4451014 6.191 0.64575 -54.754\n"); fprintf(file,"seed -1108\n"); fprintf(file,"mol 1\n"); connection = malloc(nAtoms*sizeof(int)); connectionType = malloc(nAtoms*sizeof(int)); for(i=0;i0) { connection[n] = k+1; connectionType[n] = atoms[i].typeConnections[k]; n++; } } save_atom_hin_file(file,"ATOM",i+1,atoms[i].pdbType, atoms[i].mmType, atoms[i].coordinates[0], atoms[i].coordinates[1], atoms[i].coordinates[2], atoms[i].prop.symbol, atoms[i].charge,n,connection, connectionType); } fprintf(file,"endmol 1\n"); fclose(file); free(connection); free(connectionType); return TRUE; } /*****************************************************************************/ gboolean saveMoleculeSEMol2(MoleculeSE* mol, char* fileName) { int i,n,j; FILE* file = fopen(fileName, "w"); if(!file) return FALSE; n = 0; for(i=0;inAtoms;i++) if(mol->atoms[i].typeConnections) for(j=i+1;jnAtoms;j++) if(mol->atoms[i].typeConnections[j]) n++; fprintf(file,"@MOLECULE\n"); fprintf(file,"MOL2 : Made in CChemI. mol2 file\n"); fprintf(file," %10d %10d %10d\n",mol->nAtoms,n,1); fprintf(file,"SMALL\n"); fprintf(file,"GASTEIGER\n"); fprintf(file,"\n"); fprintf(file,"@ATOM\n"); for (i=0;inAtoms;i++) { fprintf(file,"%7d%1s%-6s%12.4f%10.4f%10.4f%1s%-5s%4d%1s%-8s%10.4f\n", i+1,"",mol->atoms[i].prop.symbol, mol->atoms[i].coordinates[0], mol->atoms[i].coordinates[1], mol->atoms[i].coordinates[2], "",mol->atoms[i].prop.symbol,1," ","LIG111",mol->atoms[i].charge); } fprintf(file,"@BOND\n"); n = 0; for(i=0;inAtoms;i++) if(mol->atoms[i].typeConnections) for(j=i+1;jnAtoms;j++) if(mol->atoms[i].typeConnections[j]) { n++; fprintf(file,"%6d%6d%6d%3s%2d\n",n+1, i+1, j+1, "",mol->atoms[i].typeConnections[j]); } fclose(file); return TRUE; } /*****************************************************************************/ void computeMoleculeSEDipole(MoleculeSE* mol) { int i,k; for(k=0;k<3;k++) mol->dipole[k] = 0; for(i=0;inAtoms;i++) for(k=0;k<3;k++) mol->dipole[k] += mol->atoms[i].charge*mol->atoms[i].coordinates[k]; for(k=0;k<3;k++) mol->dipole[k] *= ANG_TO_BOHR*AUTODEB; } /********************************************************************************/ void readGeomMoleculeSEFromOpenBabelOutputFile(MoleculeSE* mol, char* fileName, int numgeometry) { FILE* file = NULL; char buffer[BSIZE]; char* pdest = NULL; //char* energyTag = "TOTAL ENERGY ="; char* energyTag = "FINAL ENERGY:"; char* geomTag = "Geometry"; char* gradTag = "Gradients:"; double dum; printf("Read geom from %s\n",fileName); file = fopen(fileName, "r"); if(!file) return; while(!feof(file)) { if(!fgets(buffer,BSIZE,file))break; pdest = strstr( buffer, energyTag); if(pdest &&sscanf(pdest+strlen(energyTag)+1,"%lf",&mol->energy)==1) { if(strstr(pdest,"kJ")) mol->energy /= KCALTOKJ; break; } } while(!feof(file)) { if(!fgets(buffer,BSIZE,file))break; if(strstr(buffer, geomTag)) { int i; for(i=0;inAtoms;i++) { if(!fgets(buffer,BSIZE,file))break; //printf("%s\n",buffer); if(sscanf(buffer,"%lf %lf %lf %lf", &dum, &mol->atoms[i].coordinates[0], &mol->atoms[i].coordinates[1], &mol->atoms[i].coordinates[2] )!=4) break; } break; } } while(!feof(file)) { if(!fgets(buffer,BSIZE,file))break; if(strstr(buffer, gradTag)) { int i; for(i=0;inAtoms;i++) { if(!fgets(buffer,BSIZE,file))break; //printf("%s\n",buffer); if(sscanf(buffer,"%lf %lf %lf", &mol->gradient[0][i], &mol->gradient[1][i], &mol->gradient[2][i] )!=3) break; } break; } } /* { int i; for(i=0;inAtoms;i++) mol->atoms[i].typeConnections = NULL; } */ fclose(file); } /********************************************************************************/ gint get_connections_one_atom(gchar* t, gint nAtoms, gint ibeg, gint* connections) { gint k; gint nc; gint nj; gchar** ssplit = NULL; gint nA = 0; /* int ibeg = 12;*/ for(k=0;k0 && is>0) { /* printf("Mult = %d\n",is); printf("nAtoms = %d\n",n); */ mol->nAtoms = n; mol->spinMultiplicity = is; mol->totalCharge = ic; mol->atoms = g_malloc(mol->nAtoms*sizeof(AtomSE)); for(i=0; inAtoms; i++) mol->atoms[i].typeConnections = g_malloc(mol->nAtoms*sizeof(gint)); Ok = TRUE; } break; } } if(!Ok) { printf("Sorry I cannot read geometry from %s file\n",namefile); exit(1); } for(i=0; inAtoms; i++) { int variable = 0; gint ibeg = 12; if(!fgets(t,BSIZE,file)) { printf("Sorry I cannot read geometry from %s file.\n",namefile); exit(1); } deleteFirstSpaces(t); if(t[0]=='#') { i--;continue;} sscanf(t,"%s %s %s %s %d %lf %d %d %lf %lf %lf", symbol,mmType,pdbType,residueName, &mol->atoms[i].residueNumber, &charge,&layer,&variable,&X,&Y,&Z); symbol[0]=toupper(symbol[0]); l=strlen(symbol); if (l==2) symbol[1]=tolower(symbol[1]); mol->atoms[i].prop = prop_atom_get(symbol); mol->atoms[i].mmType=strdup(mmType); mol->atoms[i].pdbType=strdup(pdbType); mol->atoms[i].residueName=strdup(residueName); mol->atoms[i].N=i+1; mol->atoms[i].layer=layer; mol->atoms[i].variable=variable; mol->atoms[i].show=TRUE; mol->atoms[i].coordinates[0] = X; mol->atoms[i].coordinates[1] = Y; mol->atoms[i].coordinates[2] = Z; mol->atoms[i].charge = charge; if(!get_connections_one_atom(t, mol->nAtoms, ibeg, mol->atoms[i].typeConnections)) { printf("Sorry I cannot read the connection for atom # %d from the %s file.\n",i+1,namefile); exit(1); } } fclose(file); if(mol->nAtoms>0) for(j=0;j<3;j++) /* x, y and z derivatives */ { mol->gradient[j] = g_malloc(mol->nAtoms*sizeof(gdouble)); for(i=0;inAtoms;i++) mol->gradient[j][i] = 0.0; } for(i=0;i<3;i++) mol->dipole[i] = 0.0; /* printf("Begin copyMol\n"); *molecule = copyMoleculeSE(mol); printf("End copyMol\n"); */ if(molecule->nAtoms==mol->nAtoms) { for(j=0;j<3;j++) for(i=0;inAtoms;i++) molecule->atoms[i].coordinates[j] = mol->atoms[i].coordinates[j]; } freeMoleculeSE(mol); return TRUE; } /*****************************************************************************/ gboolean addGeometryMoleculeSEToGabedit(MoleculeSE* molecule,FILE* file) { int j,k; int nc; if(!molecule) return FALSE; fprintf(file,"%d %d %d\n",molecule->nAtoms, molecule->totalCharge, molecule->spinMultiplicity); for(j=0;jnAtoms;j++) { nc = 0; for(k=0;knAtoms;k++) if(molecule->atoms[j].typeConnections[k]>0) nc++; fprintf(file," %s %s %s %s %d %0.12lf %d %d %0.12lf %0.12lf %0.12lf %d ", molecule->atoms[j].prop.symbol, molecule->atoms[j].mmType, molecule->atoms[j].pdbType, molecule->atoms[j].residueName, molecule->atoms[j].residueNumber, molecule->atoms[j].charge, molecule->atoms[j].layer, molecule->atoms[j].variable, molecule->atoms[j].coordinates[0], molecule->atoms[j].coordinates[1], molecule->atoms[j].coordinates[2], nc ); for(k=0;knAtoms;k++) { int nk = molecule->atoms[k].N-1; if(molecule->atoms[j].typeConnections[nk]>0) fprintf(file," %d %d", nk+1,molecule->atoms[j].typeConnections[nk]); } fprintf(file," GRADIENT %0.14f %0.14f %0.14f",molecule->gradient[0][j], molecule->gradient[1][j],molecule->gradient[2][j]); fprintf(file,"\n"); } return TRUE; } /*****************************************************************************/ gboolean addMoleculeSEToFile(MoleculeSE* molecule,FILE* file) { int j,k; int nc; if(!molecule) return FALSE; fprintf(file,"Geometry\n"); return addGeometryMoleculeSEToGabedit(molecule,file); } /*****************************************************************************/ gboolean saveMoleculeSETypeSave(MoleculeSE* molecule, char* fileName, char* typeSave) { FILE* file = NULL; int j; int form = 1; printf("Save molecule in %s\n",fileName); if(!molecule) return FALSE; file = fopen(fileName, typeSave); if(!file) return FALSE; fprintf(file,"[Gabedit Format]\n"); fprintf(file,"[GEOCONV]\n"); fprintf(file,"energy\n"); fprintf(file,"%f\n",molecule->energy); fprintf(file,"max-force\n"); fprintf(file,"%f\n",0.0); fprintf(file,"rms-force\n"); fprintf(file,"%f\n",0.0); fprintf(file,"\n"); fprintf(file,"[GEOMETRIES]\n"); { fprintf(file,"%d\n",molecule->nAtoms); fprintf(file,"\n"); for(j=0;jnAtoms;j++) fprintf(file," %s %0.8f %0.8f %0.8f\n", molecule->atoms[j].prop.symbol, molecule->atoms[j].coordinates[0], molecule->atoms[j].coordinates[1], molecule->atoms[j].coordinates[2] ); } fprintf(file,"\n"); fprintf(file,"[GEOMS] %d\n",form); fprintf(file,"%d 3\n",1); fprintf(file,"energy kcal/mol 1\n"); fprintf(file,"deltaE K 1\n"); fprintf(file,"Dipole Debye 3\n"); //molecule->klass->computeDipole(molecule); { fprintf(file,"%0.14f\n",molecule->energy); fprintf(file,"0\n"); fprintf(file,"%0.14f %0.14f %0.14f\n",molecule->dipole[0],molecule->dipole[1],molecule->dipole[2]); addGeometryMoleculeSEToGabedit(molecule,file); } //addVibrationToFile(molecule, file); fclose(file); return TRUE; } /*****************************************************************************/ gboolean saveMoleculeSE(MoleculeSE* molecule, char* fileName) { return saveMoleculeSETypeSave(molecule, fileName, "w"); } /*****************************************************************************/ gdouble getGradientNormMoleculeSE(MoleculeSE* molecule) { int j,k; gdouble norm = 0; if(!molecule) return -1.0; for(j=0;jnAtoms;j++) for(k=0;k<3;k++) norm += molecule->gradient[k][j]*molecule->gradient[k][j]; return sqrt(norm); } GabeditSrc250/src/SemiEmpirical/SemiEmpirical.c0000644000175100017510000007640213130665225021705 0ustar alloucheallouche/* SemiEmpirical.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #ifndef G_OS_WIN32 #include #endif #include "../Common/Global.h" #include "../Utils/AtomsProp.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../SemiEmpirical/AtomSE.h" #include "../SemiEmpirical/MoleculeSE.h" #include "../SemiEmpirical/SemiEmpiricalModel.h" #include "../SemiEmpirical/SemiEmpirical.h" static void calculateGradientMopac(SemiEmpiricalModel* seModel); static void calculateEnergyMopac(SemiEmpiricalModel* seModel); static void calculateGradientFireFly(SemiEmpiricalModel* seModel); static void calculateEnergyFireFly(SemiEmpiricalModel* seModel); static void calculateGradientOpenBabel(SemiEmpiricalModel* seModel); static void calculateEnergyOpenBabel(SemiEmpiricalModel* seModel); static void calculateGradientGeneric(SemiEmpiricalModel* seModel); static void calculateEnergyGeneric(SemiEmpiricalModel* seModel); /****************************************************************/ static void getMultiplicityName(gint multiplicity, gchar* buffer) { if(multiplicity==1) sprintf(buffer,"Singlet"); else if(multiplicity==2) sprintf(buffer,"Doublet"); else if(multiplicity==3) sprintf(buffer,"Triplet"); else if(multiplicity==4) sprintf(buffer,"Quartet"); else if(multiplicity==5) sprintf(buffer,"Quintet"); else if(multiplicity==6) sprintf(buffer,"Sextet"); else sprintf(buffer,"UNKNOWN"); } /*****************************************************************************/ static gboolean getEnergyMopac(gchar* fileNameOut, gdouble* energy) { FILE* file = NULL; gchar buffer[1024]; gchar* pdest = NULL; file = FOpen(fileNameOut, "rb"); if(!file) return FALSE; while(!feof(file)) { if(!fgets(buffer,BSIZE,file))break; pdest = strstr( buffer, " FINAL HEAT OF FORMATION"); if(pdest) { pdest = strstr( buffer, "="); if(pdest) { if(sscanf(pdest+1,"%lf",energy)==1) { fclose(file); return TRUE; } } } } fclose(file); return FALSE; } /*****************************************************************************/ static gboolean getGradientMopac(gchar* fileNameOut, SemiEmpiricalModel *seModel) { FILE* file = NULL; gchar buffer[1024]; gchar* pdest = NULL; gboolean Ok = FALSE; gdouble tmp; gint i; gint j; file = FOpen(fileNameOut, "rb"); if(!file) return FALSE; while(!feof(file)) { if(!fgets(buffer,BSIZE,file))break; pdest = strstr( buffer, "PARAMETER ATOM TYPE VALUE GRADIENT"); if(pdest) { for(i=0;imolecule.nAtoms;i++) for(j=0;j<3;j++) { if(!fgets(buffer,BSIZE,file))break; pdest = strstr( buffer, "CARTESIAN"); if(pdest) { if(sscanf(pdest+12,"%lf %lf",&tmp,&seModel->molecule.gradient[j][i])!=2) { fclose(file); return FALSE; } } } Ok = TRUE; break; } pdest = strstr( buffer, "Cartesian Gradients"); /* MOZYME Keyword */ if(pdest) { gchar td[100]; gint d; if(!fgets(buffer,BSIZE,file))break; /*Atom X ....*/ if(!fgets(buffer,BSIZE,file))break; /* backspace */ for(i=0;imolecule.nAtoms;i++) { if(!fgets(buffer,BSIZE,file)) /* 1 O 0.000 -4.566 0.027 */ { fclose(file); return FALSE; } if(sscanf(buffer,"%d %s %lf %lf %lf",&d, td, &seModel->molecule.gradient[0][i], &seModel->molecule.gradient[1][i], &seModel->molecule.gradient[2][i] ) !=5) { fclose(file); return FALSE; } } Ok = TRUE; break; } } fclose(file); return Ok; } /*****************************************************************************/ static gchar* runOneMopac(SemiEmpiricalModel* seModel, gchar* keyWords) { FILE* file = NULL; FILE* fileSH = NULL; gint j; gchar* fileNameIn = NULL; gchar* fileNameOut = NULL; gchar* fileNameSH = NULL; gchar multiplicityStr[100]; gchar buffer[1024]; MoleculeSE m = seModel->molecule; #ifdef G_OS_WIN32 gchar c='%'; #endif if(m.nAtoms<1) return fileNameOut; #ifndef G_OS_WIN32 fileNameSH = g_strdup_printf("%s%sMopacOne.sh",seModel->workDir,G_DIR_SEPARATOR_S); #else fileNameSH = g_strdup_printf("%s%sMopacOne.bat",seModel->workDir,G_DIR_SEPARATOR_S); #endif fileSH = FOpen(fileNameSH, "w"); if(!fileSH) return FALSE; #ifdef G_OS_WIN32 fprintf(fileSH,"@echo off\n"); fprintf(fileSH,"set PATH=%cPATH%c;\"%s\"\n",c,c,mopacDirectory); #endif getMultiplicityName(seModel->molecule.spinMultiplicity, multiplicityStr); fileNameIn = g_strdup_printf("%s%sOne.mop",seModel->workDir,G_DIR_SEPARATOR_S); file = FOpen(fileNameIn, "w"); if(!file) { if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return FALSE; } fprintf(file,"* ===============================\n"); fprintf(file,"* Input file for Mopac\n"); fprintf(file,"* ===============================\n"); if(seModel->molecule.spinMultiplicity>1) fprintf(file,"%s UHF CHARGE=%d %s\n",keyWords,seModel->molecule.totalCharge,multiplicityStr); else fprintf(file,"%s CHARGE=%d %s\n",keyWords,seModel->molecule.totalCharge,multiplicityStr); fprintf(file,"\n"); fprintf(file,"Mopac file generated by Gabedit\n"); for(j=0;jworkDir,G_DIR_SEPARATOR_S); return fileNameOut; } /**********************************************************************/ static SemiEmpiricalModel newMopacModel(gchar* method, gchar* dirName, SemiEmpiricalModelConstraints constraints) { SemiEmpiricalModel seModel = newSemiEmpiricalModel(method, dirName, constraints); seModel.klass->calculateGradient = calculateGradientMopac; seModel.klass->calculateEnergy = calculateEnergyMopac; return seModel; } /**********************************************************************/ static void calculateGradientMopac(SemiEmpiricalModel* seModel) { gint i; gint j; MoleculeSE m = seModel->molecule; gchar* keyWords = NULL; gchar* fileOut = NULL; if(!seModel) return; if(seModel->molecule.nAtoms<1) return; if(!seModel->method) return; keyWords = g_strdup_printf("%s 1SCF GRAD",seModel->method); fileOut = runOneMopac(seModel, keyWords); if(fileOut) { for(j=0;j<3;j++) for( i=0; imolecule.energy); g_free(fileOut); } } /**********************************************************************/ static void calculateEnergyMopac(SemiEmpiricalModel* seModel) { gchar* keyWords = NULL; gchar* fileOut = NULL; if(!seModel) return; if(seModel->molecule.nAtoms<1) return; if(!seModel->method) return; keyWords = g_strdup_printf("%s 1SCF",seModel->method); fileOut = runOneMopac(seModel, keyWords); if(fileOut) { getEnergyMopac(fileOut, &seModel->molecule.energy); g_free(fileOut); } } /**********************************************************************/ SemiEmpiricalModel createMopacModel (GeomDef* geom,gint Natoms,gint charge, gint spin, gchar* method, gchar* dirName, SemiEmpiricalModelConstraints constraints) { SemiEmpiricalModel seModel = newMopacModel(method, dirName, constraints); seModel.molecule = createMoleculeSE(geom,Natoms, charge, spin,TRUE); setRattleConstraintsParameters(&seModel); return seModel; } /**********************************************************************/ static gboolean getEnergyFireFly(gchar* fileNameOut, gdouble* energy) { FILE* file = NULL; gchar buffer[1024]; gchar* pdest = NULL; gboolean OK = FALSE; file = FOpen(fileNameOut, "rb"); if(!file) return FALSE; while(!feof(file)) { if(!fgets(buffer,BSIZE,file))break; pdest = strstr( buffer, "HEAT OF FORMATION IS"); if(pdest) { pdest = strstr( buffer, "S"); if(pdest) { if(sscanf(pdest+1,"%lf",energy)==1) { OK = TRUE; /* break;*/ } } } } fclose(file); return OK; } /*****************************************************************************/ static gboolean getGradientFireFly(gchar* fileNameOut, SemiEmpiricalModel *seModel) { FILE* file = NULL; gchar buffer[1024]; gchar stmp[1024]; gchar* pdest = NULL; gboolean Ok = FALSE; gint itmp; gint i; gint j; file = FOpen(fileNameOut, "rb"); if(!file) return FALSE; while(!feof(file)) { if(!fgets(buffer,BSIZE,file))break; pdest = strstr( buffer, "ATOM E'X E'Y E'Z"); if(pdest) { for(i=0;imolecule.nAtoms;i++) { if(!fgets(buffer,BSIZE,file))break; if(sscanf(buffer,"%d %s %lf %lf %lf",&itmp, stmp, &seModel->molecule.gradient[0][i], &seModel->molecule.gradient[1][i], &seModel->molecule.gradient[2][i] )!=5) { fclose(file); return FALSE; } for(j=0;j<3;j++) seModel->molecule.gradient[j][i] *= 627.50944796/BOHR_TO_ANG; } Ok = TRUE; break; } } fclose(file); return Ok; } /*****************************************************************************/ static gchar* runOneFireFly(SemiEmpiricalModel* seModel, gchar* keyWords) { FILE* file = NULL; FILE* fileSH = NULL; gint j; gchar* fileNameIn = NULL; gchar* fileNameOut = NULL; gchar* fileNameSH = NULL; gchar multiplicityStr[100]; gchar buffer[1024]; MoleculeSE m = seModel->molecule; gchar* fileNamePrefix = NULL; #ifdef G_OS_WIN32 gchar c='%'; #endif if(m.nAtoms<1) return fileNameOut; #ifndef G_OS_WIN32 fileNameSH = g_strdup_printf("%s%sFireFlyOne.sh",seModel->workDir,G_DIR_SEPARATOR_S); #else fileNameSH = g_strdup_printf("%s%sFireFlyOne.bat",seModel->workDir,G_DIR_SEPARATOR_S); #endif fileSH = FOpen(fileNameSH, "w"); if(!fileSH) return FALSE; #ifdef G_OS_WIN32 fprintf(fileSH,"@echo off\n"); fprintf(fileSH,"set PATH=%cPATH%c;\"%s\"\n",c,c,fireflyDirectory); #endif getMultiplicityName(seModel->molecule.spinMultiplicity, multiplicityStr); fileNameIn = g_strdup_printf("%s%sOne.inp",seModel->workDir,G_DIR_SEPARATOR_S); fileNameOut = g_strdup_printf("%s%sOne.out",seModel->workDir,G_DIR_SEPARATOR_S); file = FOpen(fileNameIn, "w"); if(!file) { if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return FALSE; } fprintf(file,"! ======================================================\n"); fprintf(file,"! Input file for FireFly\n"); fprintf(file,"! ======================================================\n"); if(strstr(keyWords,"RUNTYP")) { sscanf(strstr(keyWords,"RUNTYP"),"%s",buffer); fprintf(file," $CONTRL %s $END\n",buffer); } if(strstr(keyWords,"SCFTYP")) { sscanf(strstr(keyWords,"SCFTYP"),"%s",buffer); fprintf(file," $CONTRL %s $END\n",buffer); } else { if(seModel->molecule.spinMultiplicity==1) fprintf(file," $CONTRL SCFTYP=RHF $END\n"); else fprintf(file," $CONTRL SCFTYP=UHF $END\n"); } fprintf(file," $CONTRL ICHARG=%d MULT=%d $END\n",seModel->molecule.totalCharge,seModel->molecule.spinMultiplicity); if(strstr(keyWords,"GBASIS")) { sscanf(strstr(keyWords,"GBASIS"),"%s",buffer); fprintf(file," $BASIS %s $END\n",buffer); } fprintf(file," $DATA\n"); fprintf(file,"Molecule specification\n"); fprintf(file,"C1\n"); for(j=0;jworkDir,G_DIR_SEPARATOR_S); #ifndef G_OS_WIN32 if(!strcmp(NameCommandFireFly,"pcgamess") || !strcmp(NameCommandFireFly,"nohup pcgamess") || !strcmp(NameCommandFireFly,"firefly") || !strcmp(NameCommandFireFly,"nohup firefly")) { fprintf(fileSH,"mkdir %stmp\n",fileNamePrefix); fprintf(fileSH,"cd %stmp\n",fileNamePrefix); fprintf(fileSH,"cp %s input\n",fileNameIn); fprintf(fileSH,"%s -p -o %s\n",NameCommandFireFly,fileNameOut); fprintf(fileSH,"cd ..\n"); fprintf(fileSH,"rm PUNCH\n"); fprintf(fileSH,"/bin/rm -r %stmp\n",fileNamePrefix); } else fprintf(fileSH,"%s %s",NameCommandFireFly,fileNameIn); #else if(!strcmp(NameCommandFireFly,"pcgamess") || !strcmp(NameCommandFireFly,"firefly") ) { fprintf(fileSH,"mkdir \"%stmp\"\n",fileNamePrefix); addUnitDisk(fileSH, fileNamePrefix); fprintf(fileSH,"cd \"%stmp\"\n",fileNamePrefix); fprintf(fileSH,"copy \"%s\" input\n",fileNameIn); fprintf(fileSH,"%s -p -o \"%s\"\n",NameCommandFireFly,fileNameOut); fprintf(fileSH,"cd ..\n"); fprintf(fileSH,"del PUNCH 2>nul\n"); fprintf(fileSH,"del /Q \"%stmp\"\n",fileNamePrefix); fprintf(fileSH,"rmdir \"%stmp\"\n",fileNamePrefix); } else fprintf(fileSH,"%s %s",NameCommandFireFly,fileNameIn); #endif fclose(fileSH); #ifndef G_OS_WIN32 sprintf(buffer,"chmod u+x %s",fileNameSH); {int ierr = system(buffer);} { int ierr = system(fileNameSH);} #else sprintf(buffer,"\"%s\"",fileNameSH); {int ierr = system(buffer);} #endif unlink(fileNameIn); unlink(fileNameSH); if(fileNamePrefix) g_free(fileNamePrefix); if(fileNameIn) g_free(fileNameIn); if(fileNameSH) g_free(fileNameSH); return fileNameOut; } /**********************************************************************/ static SemiEmpiricalModel newFireFlyModel(gchar* method, gchar* dirName, SemiEmpiricalModelConstraints constraints) { SemiEmpiricalModel seModel = newSemiEmpiricalModel(method, dirName, constraints); seModel.klass->calculateGradient = calculateGradientFireFly; seModel.klass->calculateEnergy = calculateEnergyFireFly; return seModel; } /**********************************************************************/ static void calculateGradientFireFly(SemiEmpiricalModel* seModel) { gint i; gint j; MoleculeSE m = seModel->molecule; gchar* keyWords = NULL; gchar* fileOut = NULL; if(!seModel) return; if(seModel->molecule.nAtoms<1) return; if(!seModel->method) return; keyWords = g_strdup_printf("RUNTYP=GRADIENT GBASIS=%s",seModel->method); fileOut = runOneFireFly(seModel, keyWords); if(fileOut) { for(j=0;j<3;j++) for( i=0; imolecule.energy); g_free(fileOut); } } /**********************************************************************/ static void calculateEnergyFireFly(SemiEmpiricalModel* seModel) { gchar* keyWords = NULL; gchar* fileOut = NULL; if(!seModel) return; if(seModel->molecule.nAtoms<1) return; if(!seModel->method) return; keyWords = g_strdup_printf("RUNTYP=Energy GBASIS=%s",seModel->method); fileOut = runOneFireFly(seModel, keyWords); if(fileOut) { getEnergyFireFly(fileOut, &seModel->molecule.energy); g_free(fileOut); } } /**********************************************************************/ SemiEmpiricalModel createFireFlyModel (GeomDef* geom,gint Natoms,gint charge, gint spin, gchar* method, gchar* dirName, SemiEmpiricalModelConstraints constraints) { SemiEmpiricalModel seModel = newFireFlyModel(method,dirName, constraints); seModel.molecule = createMoleculeSE(geom,Natoms, charge, spin,TRUE); setRattleConstraintsParameters(&seModel); return seModel; } /**********************************************************************/ static gboolean getEnergyOpenBabel(gchar* fileNameOut, gdouble* energy) { FILE* file = NULL; char buffer[1024]; char* pdest = NULL; //char* energyTag = "TOTAL ENERGY ="; char* energyTag = "FINAL ENERGY:"; file = fopen(fileNameOut, "r"); if(!file) return FALSE; while(!feof(file)) { if(!fgets(buffer,BSIZE,file))break; pdest = strstr( buffer, energyTag); if(pdest &&sscanf(pdest+strlen(energyTag)+1,"%lf",energy)==1) { fclose(file); if(strstr(pdest,"kJ")) *energy /= KCALTOKJ; return TRUE; } } fclose(file); return FALSE; } /*****************************************************************************/ static gboolean getGradientOpenBabel(gchar* fileNameOut, SemiEmpiricalModel *seModel) { FILE* file = NULL; char buffer[1024]; char* pdest = NULL; //char* energyTag = "TOTAL ENERGY ="; char* energyTag = "FINAL ENERGY:"; char* gradTag = "Gradients:"; gboolean kj = FALSE; double conv = 1.0; int i; MoleculeSE* mol = &seModel->molecule; file = fopen(fileNameOut, "r"); if(!file) return FALSE; while(!feof(file)) { if(!fgets(buffer,BSIZE,file))break; pdest = strstr( buffer, energyTag); if(pdest &&sscanf(pdest+strlen(energyTag)+1,"%lf",&mol->energy)==1) { if(strstr(pdest,"kJ")) { kj = TRUE;} break; } } while(!feof(file)) { if(!fgets(buffer,BSIZE,file))break; if(strstr(buffer, gradTag)) { for(i=0;inAtoms;i++) { if(!fgets(buffer,BSIZE,file))break; //printf("%s\n",buffer); if(sscanf(buffer,"%lf %lf %lf", &mol->gradient[0][i], &mol->gradient[1][i], &mol->gradient[2][i] )!=3) break; } break; } } if(kj) conv /= KCALTOKJ; mol->energy *= conv; for(i=0;inAtoms;i++) { mol->gradient[0][i] *= conv; mol->gradient[1][i] *= conv; mol->gradient[2][i] *= conv; } fclose(file); return FALSE; } /*****************************************************************************/ static gchar* runOneOpenBabel(SemiEmpiricalModel* seModel, gchar* keyWords) { FILE* fileSH = NULL; char* fileNameIn = NULL; char* fileNameOut = NULL; char* fileNameSH = NULL; char buffer[1024]; MoleculeSE* mol = &seModel->molecule; char* NameCommandOpenBabel = "obgradient"; int rank = 0; #ifdef ENABLE_MPI MPI_Comm_rank( MPI_COMM_WORLD,&rank); #endif #ifdef G_OS_WIN32 char c='%'; #endif if(mol->nAtoms<1) return fileNameOut; #ifndef G_OS_WIN32 fileNameSH = g_strdup_printf("%s%sOpenBabelOne%d.sh",seModel->workDir,G_DIR_SEPARATOR_S,rank); #else fileNameSH = g_strdup_printf("%s%sOpenBabelOne%d.bat",seModel->workDir,G_DIR_SEPARATOR_S,rank); #endif fileSH = fopen(fileNameSH, "w"); if(!fileSH) return FALSE; #ifdef G_OS_WIN32 fprintf(fileSH,"@echo off\n"); #endif fileNameIn = g_strdup_printf("%s%sOne%d.hin",seModel->workDir,G_DIR_SEPARATOR_S,rank); fileNameOut = g_strdup_printf("%s%sOne%d.out",seModel->workDir,G_DIR_SEPARATOR_S,rank); if(!saveMoleculeSEHIN(mol,fileNameIn)) { if(fileNameIn) free(fileNameIn); if(fileNameOut) free(fileNameOut); if(fileNameSH) free(fileNameSH); return FALSE; } #ifndef G_OS_WIN32 if(keyWords) { fprintf(fileSH,"#!/bin/bash\n"); fprintf(fileSH,"export PATH=$PATH:%s\n",openbabelDirectory); fprintf(fileSH,"export BABEL_DATADIR=%s\n",openbabelDirectory); fprintf(fileSH,"%s %s %s > %s 2>/dev/null\n",NameCommandOpenBabel,keyWords,fileNameIn,fileNameOut); fprintf(fileSH,"exit\n"); } else fprintf(fileSH,"%s %s >%s 2>/dev/null",NameCommandOpenBabel,fileNameIn, fileNameOut); #else { if(strstr(openbabelDirectory,"\"")) { fprintf(fileSH,"set PATH=%s;%cPATH%c\n",openbabelDirectory,'%','%'); fprintf(fileSH,"set BABEL_DATADIR=%s\n",openbabelDirectory); } else { fprintf(fileSH,"set PATH=\"%s\";%cPATH%c\n",openbabelDirectory,'%','%'); fprintf(fileSH,"set BABEL_DATADIR=%s\n",openbabelDirectory); } fprintf(fileSH,"%s %s %s > %s\n",NameCommandOpenBabel,keyWords,fileNameIn,fileNameOut); fprintf(fileSH,"exit\n"); } #endif fclose(fileSH); #ifndef G_OS_WIN32 /* sprintf(buffer,"cat %s",fileNameSH); system(buffer); sprintf(buffer,"cat %s",fileNameIn); system(buffer); */ sprintf(buffer,"chmod u+x %s",fileNameSH); system(buffer); system(fileNameSH); /* sprintf(buffer,"cat %s",fileNameOut); system(buffer); */ #else sprintf(buffer,"\"%s\"",fileNameSH); system(buffer); #endif unlink(fileNameIn); unlink(fileNameSH); if(fileNameIn) free(fileNameIn); if(fileNameSH) free(fileNameSH); return fileNameOut; } /**********************************************************************/ static SemiEmpiricalModel newOpenBabelModel(gchar* method, gchar* dirName, SemiEmpiricalModelConstraints constraints) { SemiEmpiricalModel seModel = newSemiEmpiricalModel(method, dirName, constraints); seModel.klass->calculateGradient = calculateGradientOpenBabel; seModel.klass->calculateEnergy = calculateEnergyOpenBabel; return seModel; } /**********************************************************************/ static void calculateGradientOpenBabel(SemiEmpiricalModel* seModel) { char* keyWords = NULL; char* fileOut = NULL; if(!seModel) return; if(seModel->molecule.nAtoms<1) return; if(!seModel->method) return; keyWords = g_strdup_printf("-ff %s",seModel->method); fileOut = runOneOpenBabel(seModel, keyWords); if(fileOut) { getGradientOpenBabel(fileOut, seModel); //getDipoleOpenBabel(fileOut, &seModel->molecule, seModel->molecule.dipole); computeMoleculeSEDipole(&seModel->molecule); free(fileOut); } } /**********************************************************************/ static void calculateEnergyOpenBabel(SemiEmpiricalModel* seModel) { char* keyWords = NULL; char* fileOut = NULL; if(!seModel) return; if(seModel->molecule.nAtoms<1) return; if(!seModel->method) return; keyWords = g_strdup_printf("%s ",seModel->method); fileOut = runOneOpenBabel(seModel, keyWords); if(fileOut) { getEnergyOpenBabel(fileOut, &seModel->molecule.energy); //getDipoleOpenBabel(fileOut, &seModel->molecule, seModel->molecule.dipole); computeMoleculeSEDipole(&seModel->molecule); free(fileOut); } } /**********************************************************************/ SemiEmpiricalModel createOpenBabelModel (GeomDef* geom,gint Natoms,gint charge, gint spin, gchar* method, gchar* dirName, SemiEmpiricalModelConstraints constraints) { SemiEmpiricalModel seModel = newOpenBabelModel(method,dirName, constraints); seModel.molecule = createMoleculeSE(geom,Natoms, charge, spin,TRUE); setRattleConstraintsParameters(&seModel); return seModel; } /**********************************************************************/ static gboolean getDipoleGeneric(char* fileNameOut, double* dipole) { FILE* file = NULL; char buffer[1024]; int i; file = fopen(fileNameOut, "r"); if(!file) return FALSE; if(!fgets(buffer,BSIZE,file)) { fclose(file); return FALSE;}/* first line for energy in Hartree*/ if(!fgets(buffer,BSIZE,file)) { fclose(file); return FALSE;}/* dipole in au */ for(i=0;imolecule.nAtoms;i++) { if(!fgets(buffer,BSIZE,file))break; for(j=0;jmolecule.gradient[0][i], &seModel->molecule.gradient[1][i], &seModel->molecule.gradient[2][i] )!=3) { fclose(file); return FALSE; } for(j=0;j<3;j++) seModel->molecule.gradient[j][i] *= AUTOKCAL/BOHR_TO_ANG; for(j=0;j<3;j++) seModel->molecule.gradient[j][i] = - seModel->molecule.gradient[j][i]; } Ok = TRUE; fclose(file); return Ok; } /*****************************************************************************/ char* runOneGeneric(SemiEmpiricalModel* seModel, char* keyWords) { FILE* file = NULL; FILE* fileSH = NULL; char* fileNameIn = NULL; char* fileNameOut = NULL; char* fileNameSH = NULL; char buffer[1024]; MoleculeSE* mol = &seModel->molecule; char* NameCommandGeneric = seModel->method; int rank = 0; int type = 0; #ifdef ENABLE_MPI MPI_Comm_rank( MPI_COMM_WORLD,&rank); #endif #ifdef OS_WIN32 char c='%'; #endif if(mol->nAtoms<1) return fileNameOut; #ifndef OS_WIN32 fileNameSH = g_strdup_printf("%s%sGenericOne%d.sh",seModel->workDir,G_DIR_SEPARATOR_S,rank); #else fileNameSH = g_strdup_printf("%s%sGenericOne%d.bat",seModel->workDir,G_DIR_SEPARATOR_S,rank); #endif fileSH = fopen(fileNameSH, "w"); if(!fileSH) return FALSE; #ifdef OS_WIN32 fprintf(fileSH,"@echo off\n"); #endif fileNameIn = g_strdup_printf("%s%sOne%d.inp",seModel->workDir,G_DIR_SEPARATOR_S,rank); fileNameOut = g_strdup_printf("%s%sOne%d.out",seModel->workDir,G_DIR_SEPARATOR_S,rank); file = fopen(fileNameIn, "w"); if(!file) { if(fileNameIn) free(fileNameIn); if(fileNameOut) free(fileNameOut); if(fileNameSH) free(fileNameSH); return FALSE; } /* fprintf(file,"# ======================================================\n"); fprintf(file,"# Generic input file made in CChemI\n"); fprintf(file,"# ======================================================\n"); */ if(strstr(keyWords,"ENGRAD")) type = 1; fprintf(file,"%d\n",type); addMoleculeSEToFile(mol,file); fclose(file); #ifndef OS_WIN32 fprintf(fileSH,"%s %s %s",NameCommandGeneric,fileNameIn,fileNameOut); fclose(fileSH); sprintf(buffer,"chmod u+x %s",fileNameSH); system(buffer); system(fileNameSH); #else fprintf(fileSH,"\"%s\" \"%s\" \"%s\"",NameCommandGeneric,fileNameIn,fileNameOut); fclose(fileSH); sprintf(buffer,"\"%s\"",fileNameSH); system(buffer); #endif unlink(fileNameIn); unlink(fileNameSH); if(fileNameIn) free(fileNameIn); if(fileNameSH) free(fileNameSH); return fileNameOut; } /**********************************************************************/ static SemiEmpiricalModel newGenericModel(char* method, char* dirName, SemiEmpiricalModelConstraints constraints) { /* method = nameCommand */ SemiEmpiricalModel seModel = newSemiEmpiricalModel(method, dirName, constraints); seModel.klass->calculateGradient = calculateGradientGeneric; seModel.klass->calculateEnergy = calculateEnergyGeneric; return seModel; } /**********************************************************************/ static void calculateGradientGeneric(SemiEmpiricalModel* seModel) { int i; int j; MoleculeSE m = seModel->molecule; char* keyWords = NULL; char* fileOut = NULL; if(!seModel) return; if(seModel->molecule.nAtoms<1) return; if(!seModel->method) return; keyWords = g_strdup_printf("%s ENGRAD ",seModel->method); fileOut = runOneGeneric(seModel, keyWords); if(fileOut) { for(j=0;j<3;j++) for( i=0; imolecule.energy); getDipoleGeneric(fileOut, seModel->molecule.dipole); free(fileOut); } } /**********************************************************************/ static void calculateEnergyGeneric(SemiEmpiricalModel* seModel) { char* keyWords = NULL; char* fileOut = NULL; if(!seModel) return; if(seModel->molecule.nAtoms<1) return; if(!seModel->method) return; keyWords = g_strdup_printf("%s ",seModel->method); fileOut = runOneGeneric(seModel, keyWords); if(fileOut) { getEnergyGeneric(fileOut, &seModel->molecule.energy); getDipoleGeneric(fileOut, seModel->molecule.dipole); free(fileOut); } } /**********************************************************************/ SemiEmpiricalModel createGenericModel (GeomDef* geom,gint Natoms,gint charge, gint spin, gchar* method, gchar* dirName, SemiEmpiricalModelConstraints constraints) { SemiEmpiricalModel seModel = newGenericModel(method,dirName, constraints); seModel.molecule = createMoleculeSE(geom,Natoms, charge, spin,TRUE); setRattleConstraintsParameters(&seModel); return seModel; } GabeditSrc250/src/SemiEmpirical/SemiEmpiricalDlg.h0000644000175100017510000000357713130665225022344 0ustar alloucheallouche/* SemiEmpiricalDlg.h */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_SEMIEMPIRICALDLG_H__ #define __GABEDIT_SEMIEMPIRICALDLG_H__ /* * type = * "MopacEnergy", "MopacOptimize", "MopacESP", * "AM1FireFlyEnergy", "AM1FireFlyOptimize", * "PM6MopacEnergy", "PM6MopacOptimize", * "PM6MopacESP", * "AM1MopacEnergy", "AM1MopacOptimize", * "AM1MopacESP", * "AM1FireFlyEnergy", "AM1FireFlyOptimize", */ void semiEmpiricalDlg(gchar* type); void semiEmpiricalMolecularDynamicsDlg(); void semiEmpiricalMolecularDynamicsConfoDlg(); #endif /* __GABEDIT_SEMIEMPIRICALDLG_H__ */ GabeditSrc250/src/SemiEmpirical/SemiEmpirical.h0000644000175100017510000000404513130665225021704 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_SEMIEMPIRICAL_H__ #define __GABEDIT_SEMIEMPIRICAL_H__ SemiEmpiricalModel createMopacModel(GeomDef* geom,gint Natoms,gint charge, gint spin, gchar* keywords,gchar* dirName, SemiEmpiricalModelConstraints constraints); SemiEmpiricalModel createFireFlyModel(GeomDef* geom,gint Natoms, gint charge, gint spin, gchar* keywords, gchar* dirName, SemiEmpiricalModelConstraints constraints); SemiEmpiricalModel createOpenBabelModel (GeomDef* geom,gint Natoms,gint charge, gint spin, gchar* method, gchar* dirName, SemiEmpiricalModelConstraints constraints); SemiEmpiricalModel createGenericModel (GeomDef* geom,gint Natoms,gint charge, gint spin, gchar* method, gchar* dirName, SemiEmpiricalModelConstraints constraints); #endif /* __GABEDIT_SEMIEMPIRICAL_H__ */ GabeditSrc250/src/SemiEmpirical/SemiEmpiricalMD.c0000644000175100017510000015656013130665225022132 0ustar alloucheallouche/* SemiEmpiricalMD.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../Utils/AtomsProp.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "AtomSE.h" #include "MoleculeSE.h" #include "SemiEmpiricalModel.h" #include "SemiEmpiricalMD.h" /*********************************************************************************/ static void initMD(SemiEmpiricalMD* seMD, gdouble temperature, gdouble stepSize, MDIntegratorType integratorType, MDThermostatType thermostat, gdouble friction, gdouble collide, gchar* fileNameTraj, gchar* fileNameProp, gint numberOfRunSteps); static void berendsen(SemiEmpiricalMD* seMD); static void bussi(SemiEmpiricalMD* seMD); static void andersen(SemiEmpiricalMD* seMD); static void rescaleVelocities(SemiEmpiricalMD* seMD); static void computeEnergies(SemiEmpiricalMD* seMD); static void applyOneStep(SemiEmpiricalMD* seMD); static void applyVerlet(SemiEmpiricalMD* seMD); static void applyBeeman(SemiEmpiricalMD* seMD); static void applyStochastic(SemiEmpiricalMD* seMD); static gdouble maxwel(gdouble masse, gdouble temperature); static void newProperties(SemiEmpiricalMD* seMD, gchar* comments); static void saveProperties(SemiEmpiricalMD* seMD, gint iStep0, gint iStep, gchar* comments); static void saveTrajectory(SemiEmpiricalMD* seMD, gint iStep); static void getRandVect(gdouble len, gdouble V[]); static gdouble getEKin(SemiEmpiricalMD* seMD); static gdouble getKelvin(SemiEmpiricalMD* seMD); static gdouble drandom(); static gdouble normal(); /**********************************************************************/ SemiEmpiricalModel** runSemiEmpiricalMDConfo( SemiEmpiricalMD* seMD, SemiEmpiricalModel* seModel, gint updateFrequency, gdouble heatTime, gdouble equiTime, gdouble runTime, gdouble heatTemperature, gdouble equiTemperature, gdouble runTemperature, gdouble stepSize, MDIntegratorType integratorType, MDThermostatType thermostat, gdouble friction, gdouble collide, gint numberOfGeometries, gchar* fileNameTraj, gchar* fileNameProp ) { gint i; gint j; gchar* str = NULL; gdouble gradientNorm = 0; gint numberOfHeatSteps = 0; gint numberOfEquiSteps = 0; gint numberOfRunSteps = 0; gdouble currentTemp; gint updateNumber = 0; gint n0 = 0; SemiEmpiricalModel** geometries = NULL; gint iSel = 0; gint stepSel = 1; /* * physical constants in SI units * ------------------------------ * Kb = 1.380662 E-23 J/K * Na = 6.022045 E23 1/mol * e = 1.6021892 E-19 C * eps = 8.85418782 E-12 F/m * * 1 Kcal = 4184.0 J * 1 amu = 1.6605655 E-27 Kg * 1 A = 1.0 E-10 m * * Internally, AKMA units are used: * * timeFactor = SQRT ( ( 1A )**2 * 1amu * Na / 1Kcal ) * kBoltzmann = Na *Kb / 1 Kcal */ /* printf("basname = %s\n",g_path_get_basename(fileNameTraj));*/ if(seModel->molecule.nAtoms<1) return NULL; if(numberOfGeometries<2) return NULL; geometries = g_malloc(numberOfGeometries*sizeof(SemiEmpiricalModel*)); for(i=0;iseModel = seModel; seMD->numberOfAtoms = seModel->molecule.nAtoms; seMD->updateFrequency = updateFrequency; currentTemp = heatTemperature/2; numberOfHeatSteps = heatTime/stepSize*1000; numberOfEquiSteps = equiTime/stepSize*1000;; numberOfRunSteps = runTime/stepSize*1000;; currentTemp = heatTemperature; if(numberOfHeatSteps==0) currentTemp = equiTemperature; if(numberOfHeatSteps==0 && numberOfEquiSteps==0 ) currentTemp = runTemperature; initMD(seMD,currentTemp,stepSize,integratorType, thermostat, friction, collide, fileNameTraj, fileNameProp, numberOfRunSteps); seMD->seModel->klass->calculateGradient(seMD->seModel); computeEnergies(seMD); iSel =-1; if((i+1)%stepSel==0 && (iSel+1)potentialEnergy); redrawMoleculeSE(&seMD->seModel->molecule,str); iSel++; geometries[iSel] = g_malloc(sizeof(SemiEmpiricalModel)); *geometries[iSel] = copySemiEmpiricalModel(seMD->seModel); Waiting(1); } seMD->temperature = heatTemperature; rescaleVelocities(seMD); currentTemp = heatTemperature; n0 = 0; newProperties(seMD," "); /*newProperties(seMD," ----> Heating");*/ for (i = 0; i < numberOfHeatSteps; i++ ) { seMD->temperature = currentTemp; applyOneStep(seMD); currentTemp = heatTemperature + ( runTemperature - heatTemperature ) * ( ( gdouble )( i + 1 )/ numberOfHeatSteps ); seMD->temperature = currentTemp; rescaleVelocities(seMD); if(StopCalcul) break; if (++updateNumber >= seMD->updateFrequency ) { if(str) g_free(str); str = g_strdup_printf(_("MD Heating: %0.2f fs, T = %0.2f K T(t) = %0.2f Kin = %0.4f Pot = %0.4f Tot = %0.4f"), i*stepSize, currentTemp, seMD->kelvin, seMD->kineticEnergy, seMD->potentialEnergy, seMD->totalEnergy ); redrawMoleculeSE(&seMD->seModel->molecule,str); updateNumber = 0; } saveProperties(seMD, n0+i+1, i+1," Heating"); } currentTemp = equiTemperature; seMD->temperature = currentTemp; rescaleVelocities(seMD); if(StopCalcul) numberOfEquiSteps =0; if(StopCalcul) numberOfRunSteps =0; updateNumber = seMD->updateFrequency; n0 += numberOfHeatSteps; /* newProperties(seMD," ----> Equilibrium");*/ for (i = 0; i < numberOfEquiSteps; i++ ) { seMD->temperature = currentTemp; applyOneStep(seMD); seMD->temperature = currentTemp; rescaleVelocities(seMD); if(StopCalcul) break; if (++updateNumber >= seMD->updateFrequency ) { if(str) g_free(str); str = g_strdup_printf(_("MD Equilibrium: %0.2f fs, T = %0.2f K T(t) = %0.2f K Kin = %0.4f Pot = %0.4f Tot = %0.4f"), i*stepSize, currentTemp, seMD->kelvin, seMD->kineticEnergy, seMD->potentialEnergy, seMD->totalEnergy ); redrawMoleculeSE(&seMD->seModel->molecule,str); updateNumber = 0; } saveProperties(seMD, n0+i+1, i+1, " Equilibrium"); } updateNumber = seMD->updateFrequency; currentTemp = runTemperature; seMD->temperature = currentTemp; rescaleVelocities(seMD); if(StopCalcul) numberOfRunSteps =0; updateNumber = seMD->updateFrequency; n0 += numberOfEquiSteps; /* newProperties(seMD," ----> Runing");*/ if(str) g_free(str); str = g_strdup_printf(_("Geometry selected Potential energy = %0.4f"), seMD->potentialEnergy); redrawMoleculeSE(&seMD->seModel->molecule,str); if(numberOfGeometries>2) stepSel = numberOfRunSteps/numberOfGeometries; else stepSel = numberOfRunSteps; /* printf("Isel = %d\n",stepSel);*/ for (i = 0; i < numberOfRunSteps; i++ ) { seMD->temperature = currentTemp; applyOneStep(seMD); if(seMD->thermostat == ANDERSEN) andersen(seMD); if(seMD->thermostat == BERENDSEN) berendsen(seMD); if(seMD->thermostat == BUSSI) bussi(seMD); if(StopCalcul) break; if (++updateNumber >= seMD->updateFrequency ) { if(str) g_free(str); str = g_strdup_printf(_("MD Running: %0.2f fs, T = %0.2f K T(t) = %0.2f K Kin = %0.4f Pot = %0.4f Tot = %0.4f"), i*stepSize, currentTemp, seMD->kelvin, seMD->kineticEnergy, seMD->potentialEnergy, seMD->totalEnergy ); redrawMoleculeSE(&seMD->seModel->molecule,str); updateNumber = 0; saveTrajectory(seMD, i+1); } if((i+1)%stepSel==0 && (iSel+1)potentialEnergy); redrawMoleculeSE(&seMD->seModel->molecule,str); iSel++; geometries[iSel] = g_malloc(sizeof(SemiEmpiricalModel)); *geometries[iSel] = copySemiEmpiricalModel(seMD->seModel); Waiting(1); } saveProperties(seMD, n0+i+1, i+1," Running"); } if(iSelpotentialEnergy); redrawMoleculeSE(&seMD->seModel->molecule,str); iSel++; geometries[iSel] = g_malloc(sizeof(SemiEmpiricalModel)); *geometries[iSel] = copySemiEmpiricalModel(seMD->seModel); Waiting(1); } updateNumber = seMD->updateFrequency; n0 += numberOfRunSteps; seMD->seModel->klass->calculateGradient(seMD->seModel); gradientNorm = 0; for (i = 0; i < seMD->numberOfAtoms; i++) for ( j = 0; j < 3; j++) gradientNorm += seMD->seModel->molecule.gradient[j][i] * seMD->seModel->molecule.gradient[j][i]; gradientNorm = sqrt( gradientNorm ); if(str) g_free(str); str = g_strdup_printf(_("End of MD Simulation. Gradient = %f Ekin = %f (Kcal/mol) EPot = %0.4f ETot = %0.4f T(t) = %0.2f"), (gdouble)gradientNorm, seMD->kineticEnergy, seMD->potentialEnergy, seMD->totalEnergy, seMD->kelvin ); redrawMoleculeSE(&seMD->seModel->molecule,str); g_free(str); if(seMD->fileTraj)fclose(seMD->fileTraj); if(seMD->fileProp)fclose(seMD->fileProp); freeSemiEmpiricalMD(seMD); return geometries; } /**********************************************************************/ void runSemiEmpiricalMD( SemiEmpiricalMD* seMD, SemiEmpiricalModel* seModel, gint updateFrequency, gdouble heatTime, gdouble equiTime, gdouble runTime, gdouble coolTime, gdouble heatTemperature, gdouble equiTemperature, gdouble runTemperature, gdouble coolTemperature, gdouble stepSize, MDIntegratorType integratorType, MDThermostatType thermostat, gdouble friction, gdouble collide, gchar* fileNameTraj, gchar* fileNameProp ) { gint i; gint j; gchar* str = NULL; gdouble gradientNorm = 0; gint numberOfHeatSteps = 0; gint numberOfEquiSteps = 0; gint numberOfRunSteps = 0; gint numberOfCoolSteps = 0; gdouble currentTemp; gint updateNumber = 0; gint n0 = 0; /* * physical constants in SI units * ------------------------------ * Kb = 1.380662 E-23 J/K * Na = 6.022045 E23 1/mol * e = 1.6021892 E-19 C * eps = 8.85418782 E-12 F/m * * 1 Kcal = 4184.0 J * 1 amu = 1.6605655 E-27 Kg * 1 A = 1.0 E-10 m * * Internally, AKMA units are used: * * timeFactor = SQRT ( ( 1A )**2 * 1amu * Na / 1Kcal ) * kBoltzmann = Na *Kb / 1 Kcal */ /* printf("basname = %s\n",g_path_get_basename(fileNameTraj));*/ if(seModel->molecule.nAtoms<1) return; seMD->seModel = seModel; seMD->numberOfAtoms = seModel->molecule.nAtoms; seMD->updateFrequency = updateFrequency; currentTemp = heatTemperature/2; numberOfHeatSteps = heatTime/stepSize*1000; numberOfEquiSteps = equiTime/stepSize*1000;; numberOfRunSteps = runTime/stepSize*1000;; numberOfCoolSteps = coolTime/stepSize*1000;; currentTemp = heatTemperature; if(numberOfHeatSteps==0) currentTemp = equiTemperature; if(numberOfHeatSteps==0 && numberOfEquiSteps==0 ) currentTemp = runTemperature; if(numberOfHeatSteps==0 && numberOfEquiSteps==0 && numberOfRunSteps==0 ) currentTemp = coolTemperature; initMD(seMD,currentTemp,stepSize,integratorType, thermostat, friction, collide, fileNameTraj, fileNameProp, numberOfRunSteps); seMD->seModel->klass->calculateGradient(seMD->seModel); seMD->temperature = heatTemperature; rescaleVelocities(seMD); currentTemp = heatTemperature; n0 = 0; newProperties(seMD," "); /*newProperties(seMD," ----> Heating");*/ for (i = 0; i < numberOfHeatSteps; i++ ) { seMD->temperature = currentTemp; applyOneStep(seMD); currentTemp = heatTemperature + ( runTemperature - heatTemperature ) * ( ( gdouble )( i + 1 )/ numberOfHeatSteps ); seMD->temperature = currentTemp; rescaleVelocities(seMD); if(StopCalcul) break; if (++updateNumber >= seMD->updateFrequency ) { if(str) g_free(str); str = g_strdup_printf(_("MD Heating: %0.2f fs, T = %0.2f K T(t) = %0.2f Kin = %0.4f Pot = %0.4f Tot = %0.4f"), i*stepSize, currentTemp, seMD->kelvin, seMD->kineticEnergy, seMD->potentialEnergy, seMD->totalEnergy ); redrawMoleculeSE(&seMD->seModel->molecule,str); updateNumber = 0; } saveProperties(seMD, n0+i+1, i+1," Heating"); } currentTemp = equiTemperature; seMD->temperature = currentTemp; rescaleVelocities(seMD); if(StopCalcul) numberOfEquiSteps =0; if(StopCalcul) numberOfRunSteps =0; if(StopCalcul) numberOfCoolSteps =0; updateNumber = seMD->updateFrequency; n0 += numberOfHeatSteps; /* newProperties(seMD," ----> Equilibrium");*/ for (i = 0; i < numberOfEquiSteps; i++ ) { seMD->temperature = currentTemp; applyOneStep(seMD); seMD->temperature = currentTemp; rescaleVelocities(seMD); if(StopCalcul) break; if (++updateNumber >= seMD->updateFrequency ) { if(str) g_free(str); str = g_strdup_printf(_("MD Equilibrium: %0.2f fs, T = %0.2f K T(t) = %0.2f K Kin = %0.4f Pot = %0.4f Tot = %0.4f"), i*stepSize, currentTemp, seMD->kelvin, seMD->kineticEnergy, seMD->potentialEnergy, seMD->totalEnergy ); redrawMoleculeSE(&seMD->seModel->molecule,str); updateNumber = 0; } saveProperties(seMD, n0+i+1, i+1, " Equilibrium"); } updateNumber = seMD->updateFrequency; currentTemp = runTemperature; seMD->temperature = currentTemp; rescaleVelocities(seMD); if(StopCalcul) numberOfRunSteps =0; if(StopCalcul) numberOfCoolSteps =0; updateNumber = seMD->updateFrequency; n0 += numberOfEquiSteps; /* newProperties(seMD," ----> Runing");*/ for (i = 0; i < numberOfRunSteps; i++ ) { seMD->temperature = currentTemp; applyOneStep(seMD); if(seMD->thermostat == ANDERSEN) andersen(seMD); if(seMD->thermostat == BERENDSEN) berendsen(seMD); if(seMD->thermostat == BUSSI) bussi(seMD); if(StopCalcul) break; if (++updateNumber >= seMD->updateFrequency ) { if(str) g_free(str); str = g_strdup_printf(_("MD Running: %0.2f fs, T = %0.2f K T(t) = %0.2f K Kin = %0.4f Pot = %0.4f Tot = %0.4f"), i*stepSize, currentTemp, seMD->kelvin, seMD->kineticEnergy, seMD->potentialEnergy, seMD->totalEnergy ); redrawMoleculeSE(&seMD->seModel->molecule,str); updateNumber = 0; saveTrajectory(seMD, i+1); } saveProperties(seMD, n0+i+1, i+1," Running"); } updateNumber = seMD->updateFrequency; if(StopCalcul) numberOfCoolSteps =0; n0 += numberOfRunSteps; /* newProperties(seMD," ----> Cooling");*/ for (i = 0; i < numberOfCoolSteps; i++ ) { currentTemp = runTemperature - ( runTemperature - coolTemperature ) * ( ( gdouble )( i + 1 )/ numberOfCoolSteps ); seMD->temperature = currentTemp; rescaleVelocities(seMD); seMD->temperature = currentTemp; applyOneStep(seMD); if(StopCalcul) break; if (++updateNumber >= seMD->updateFrequency ) { if(str) g_free(str); str = g_strdup_printf(_("MD Cooling: %0.2f fs, T = %0.2f K T(t) = %0.2f K Kin = %0.4f Pot = %0.4f Tot = %0.4f"), i*stepSize, currentTemp, seMD->kelvin, seMD->kineticEnergy, seMD->potentialEnergy, seMD->totalEnergy ); redrawMoleculeSE(&seMD->seModel->molecule,str); updateNumber = 0; } saveProperties(seMD, n0+i+1, i+1," Cooling"); } seMD->seModel->klass->calculateGradient(seMD->seModel); gradientNorm = 0; for (i = 0; i < seMD->numberOfAtoms; i++) for ( j = 0; j < 3; j++) gradientNorm += seMD->seModel->molecule.gradient[j][i] * seMD->seModel->molecule.gradient[j][i]; gradientNorm = sqrt( gradientNorm ); if(str) g_free(str); str = g_strdup_printf(_("End of MD Simulation. Gradient = %f Ekin = %f (Kcal/mol) EPot = %0.4f ETot = %0.4f T(t) = %0.2f"), (gdouble)gradientNorm, seMD->kineticEnergy, seMD->potentialEnergy, seMD->totalEnergy, seMD->kelvin ); redrawMoleculeSE(&seMD->seModel->molecule,str); g_free(str); if(seMD->fileTraj)fclose(seMD->fileTraj); if(seMD->fileProp)fclose(seMD->fileProp); freeSemiEmpiricalMD(seMD); } /*********************************************************************************/ static void initSD(SemiEmpiricalMD* seMD, gdouble friction) { /* gdouble fsInAKMA = 1.0/sqrt(1e-10*1e-10*1.6605655e-27*6.022045e23/4184.0)/1e15;*/ static gdouble fsInAKMA = 0.020454828110640; gint i; seMD->friction = friction/(fsInAKMA)/1000; seMD->positionFriction = NULL; seMD->velocityFriction = NULL; seMD->accelarationFriction = NULL; seMD->gamma = NULL; seMD->positionRandom = NULL; seMD->velocityRandom = NULL; if(seMD->integratorType != STOCHASTIC) return; seMD->positionFriction = g_malloc(seMD->numberOfAtoms *sizeof(gdouble)); seMD->velocityFriction = g_malloc(seMD->numberOfAtoms *sizeof(gdouble)); seMD->accelarationFriction = g_malloc(seMD->numberOfAtoms *sizeof(gdouble)); seMD->gamma = g_malloc(seMD->numberOfAtoms *sizeof(gdouble)); seMD->positionRandom = g_malloc(seMD->numberOfAtoms *sizeof(gdouble*)); for(i=0;inumberOfAtoms;i++) seMD->positionRandom[i] = g_malloc(3*sizeof(gdouble)); seMD->velocityRandom = g_malloc(seMD->numberOfAtoms *sizeof(gdouble*)); for(i=0;inumberOfAtoms;i++) seMD->velocityRandom[i] = g_malloc(3*sizeof(gdouble)); } /*********************************************************************************/ /* static void printTranslation(SemiEmpiricalMD* seMD) { gdouble vtot[3] = {0,0,0}; gint i; gint j; gdouble mass = 1.0; for ( j = 0; j < 3; j++) vtot[j] = 0; for ( i = 0; i < seMD->numberOfAtoms; i++) { mass = seMD->seModel->molecule.atoms[i].prop.masse; for ( j = 0; j < 3; j++) { vtot[j] += mass*seMD->velocity[i][j]; } } printf("Trans velocity = %f %f %f\n",vtot[0], vtot[1], vtot[2]); } */ /*********************************************************************************/ static void removeTranslation(SemiEmpiricalMD* seMD) { gdouble vtot[3] = {0,0,0}; gint i; gint j; gdouble mass = 1.0; gdouble totMass = 0.0; for ( i = 0; i < seMD->numberOfAtoms; i++) { mass = seMD->seModel->molecule.atoms[i].prop.masse; totMass += mass; for ( j = 0; j < 3; j++) { vtot[j] += mass*seMD->velocity[i][j]; } } for ( j = 0; j < 3; j++) vtot[j] /= totMass; for ( i = 0; i < seMD->numberOfAtoms; i++) for ( j = 0; j < 3; j++) seMD->velocity[i][j] -= vtot[j]; /* check */ /* for ( j = 0; j < 3; j++) vtot[j] = 0; for ( i = 0; i < seMD->numberOfAtoms; i++) { mass = seMD->seModel->molecule.atoms[i].prop.masse; for ( j = 0; j < 3; j++) { vtot[j] += mass*seMD->velocity[i][j]; } } printf("Trans velocity = %f %f %f\n",vtot[0], vtot[1], vtot[2]); */ } /**************************************************/ static gboolean InverseTensor(gdouble mat[3][3],gdouble invmat[3][3]) { gdouble t4,t6,t8,t10,t12,t14,t17; gdouble d = 0; t4 = mat[0][0]*mat[1][1]; t6 = mat[0][0]*mat[1][2]; t8 = mat[0][1]*mat[1][0]; t10 = mat[0][2]*mat[1][0]; t12 = mat[0][1]*mat[2][0]; t14 = mat[0][2]*mat[2][0]; d =(t4*mat[2][2]-t6*mat[2][1]-t8*mat[2][2]+t10*mat[2][1]+t12*mat[1][2]-t14*mat[1][1]); if(d == 0) { invmat[0][0] = 0; invmat[0][1] = 0; invmat[0][2] = 0; invmat[1][0] = 0; invmat[1][1] = 0; invmat[1][2] = 0; invmat[2][0] = 0; invmat[2][1] = 0; invmat[2][2] = 0; return FALSE; } t17 = 1/d; invmat[0][0] = (mat[1][1]*mat[2][2]-mat[1][2]*mat[2][1])*t17; invmat[0][1] = -(mat[0][1]*mat[2][2]-mat[0][2]*mat[2][1])*t17; invmat[0][2] = -(-mat[0][1]*mat[1][2]+mat[0][2]*mat[1][1])*t17; invmat[1][0] = -(mat[1][0]*mat[2][2]-mat[1][2]*mat[2][0])*t17; invmat[1][1] = (mat[0][0]*mat[2][2]-t14)*t17; invmat[1][2] = -(t6-t10)*t17; invmat[2][0] = -(-mat[1][0]*mat[2][1]+mat[1][1]*mat[2][0])*t17; invmat[2][1] = -(mat[0][0]*mat[2][1]-t12)*t17; invmat[2][2] = (t4-t8)*t17; return TRUE; } /*********************************************************************************/ /* static void printRotation(SemiEmpiricalMD* seMD) { gdouble vtot[3] = {0,0,0}; gdouble cm[3] = {0,0,0}; gdouble L[3] = {0,0,0}; gint i; gint j; gint k; gdouble mass = 1.0; gdouble totMass = 0.0; gdouble cdel[3]; gdouble vAng[3]={0,0,0}; gdouble tensor[3][3]; gdouble invTensor[3][3]; gdouble xx, xy,xz,yy,yz,zz; AtomSE* atoms = seMD->seModel->molecule.atoms; for ( i = 0; i < seMD->numberOfAtoms; i++) { mass = seMD->seModel->molecule.atoms[i].prop.masse; totMass += mass; for ( j = 0; j < 3; j++) cm[j] += mass*atoms[i].coordinates[j]; for ( j = 0; j < 3; j++) vtot[j] += mass*seMD->velocity[i][j]; } for ( j = 0; j < 3; j++) cm[j] /= totMass; for ( j = 0; j < 3; j++) vtot[j] /= totMass; for ( i = 0; i < seMD->numberOfAtoms; i++) { mass = seMD->seModel->molecule.atoms[i].prop.masse; for ( j = 0; j < 3; j++) L[j] += ( atoms[i].coordinates[(j+1)%3]*seMD->velocity[i][(j+2)%3] - atoms[i].coordinates[(j+2)%3]*seMD->velocity[i][(j+1)%3] )*mass; } for ( j = 0; j < 3; j++) L[j] -= ( cm[(j+1)%3]*vtot[(j+2)%3] - cm[(j+2)%3]*vtot[(j+1)%3] )*totMass; for ( k = 0; k < 3; k++) for ( j = 0; j < 3; j++) tensor[k][j] = 0; xx = 0; yy = 0; zz = 0; xy = 0; xz = 0; yz = 0; for ( i = 0; i < seMD->numberOfAtoms; i++) { mass = seMD->seModel->molecule.atoms[i].prop.masse; for ( j = 0; j < 3; j++) cdel[j] = atoms[i].coordinates[j]-cm[j]; xx += cdel[0]*cdel[0]*mass; xy += cdel[0]*cdel[1]*mass; xz += cdel[0]*cdel[2]*mass; yy += cdel[1]*cdel[1]*mass; yz += cdel[1]*cdel[2]*mass; zz += cdel[2]*cdel[2]*mass; } tensor[0][0] = yy+zz; tensor[1][0] = -xy; tensor[2][0] = -xz; tensor[0][1] = -xy; tensor[1][1] = xx+zz; tensor[2][1] = -yz; tensor[0][2] = -xz; tensor[1][2] = -yz; tensor[2][2] = xx+yy; if(InverseTensor(tensor,invTensor)) { for ( j = 0; j < 3; j++) { vAng[j] = 0; for ( k = 0; k < 3; k++) vAng[j] += invTensor[j][k]*L[k]; } printf("Angular velocity = %f %f %f\n",vAng[0], vAng[1], vAng[2]); } } */ /*********************************************************************************/ static void removeRotation(SemiEmpiricalMD* seMD) { gdouble vtot[3] = {0,0,0}; gdouble cm[3] = {0,0,0}; gdouble L[3] = {0,0,0}; gint i; gint j; gint k; gdouble mass = 1.0; gdouble totMass = 0.0; gdouble cdel[3]; gdouble vAng[3]={0,0,0}; gdouble tensor[3][3]; gdouble invTensor[3][3]; gdouble xx, xy,xz,yy,yz,zz; /* find the center of mass coordinates and total velocity*/ AtomSE* atoms = seMD->seModel->molecule.atoms; for ( i = 0; i < seMD->numberOfAtoms; i++) { mass = seMD->seModel->molecule.atoms[i].prop.masse; totMass += mass; for ( j = 0; j < 3; j++) cm[j] += mass*atoms[i].coordinates[j]; for ( j = 0; j < 3; j++) vtot[j] += mass*seMD->velocity[i][j]; } for ( j = 0; j < 3; j++) cm[j] /= totMass; for ( j = 0; j < 3; j++) vtot[j] /= totMass; /* compute the angular momentum */ for ( i = 0; i < seMD->numberOfAtoms; i++) { mass = seMD->seModel->molecule.atoms[i].prop.masse; for ( j = 0; j < 3; j++) L[j] += ( atoms[i].coordinates[(j+1)%3]*seMD->velocity[i][(j+2)%3] - atoms[i].coordinates[(j+2)%3]*seMD->velocity[i][(j+1)%3] )*mass; } for ( j = 0; j < 3; j++) L[j] -= ( cm[(j+1)%3]*vtot[(j+2)%3] - cm[(j+2)%3]*vtot[(j+1)%3] )*totMass; /* calculate and invert the inertia tensor */ for ( k = 0; k < 3; k++) for ( j = 0; j < 3; j++) tensor[k][j] = 0; xx = 0; yy = 0; zz = 0; xy = 0; xz = 0; yz = 0; for ( i = 0; i < seMD->numberOfAtoms; i++) { mass = seMD->seModel->molecule.atoms[i].prop.masse; for ( j = 0; j < 3; j++) cdel[j] = atoms[i].coordinates[j]-cm[j]; xx += cdel[0]*cdel[0]*mass; xy += cdel[0]*cdel[1]*mass; xz += cdel[0]*cdel[2]*mass; yy += cdel[1]*cdel[1]*mass; yz += cdel[1]*cdel[2]*mass; zz += cdel[2]*cdel[2]*mass; } tensor[0][0] = yy+zz; tensor[1][0] = -xy; tensor[2][0] = -xz; tensor[0][1] = -xy; tensor[1][1] = xx+zz; tensor[2][1] = -yz; tensor[0][2] = -xz; tensor[1][2] = -yz; tensor[2][2] = xx+yy; if(InverseTensor(tensor,invTensor)) { for ( j = 0; j < 3; j++) { vAng[j] = 0; for ( k = 0; k < 3; k++) vAng[j] += invTensor[j][k]*L[k]; } /* eliminate any rotation about the system center of mass */ for ( i = 0; i < seMD->numberOfAtoms; i++) { for ( j = 0; j < 3; j++) cdel[j] = atoms[i].coordinates[j]-cm[j]; for ( j = 0; j < 3; j++) seMD->velocity[i][j] += cdel[(j+1)%3]*vAng[(j+2)%3]- cdel[(j+2)%3]*vAng[(j+1)%3]; } } /* check */ /* for ( j = 0; j < 3; j++) L[j] = 0; for ( i = 0; i < seMD->numberOfAtoms; i++) { mass = seMD->seModel->molecule.atoms[i].prop.masse; for ( j = 0; j < 3; j++) L[j] += ( atoms[i].coordinates[(j+1)%3]*seMD->velocity[i][(j+2)%3] - atoms[i].coordinates[(j+2)%3]*seMD->velocity[i][(j+1)%3] )*mass; } for ( j = 0; j < 3; j++) { vAng[j] = 0; for ( k = 0; k < 3; k++) vAng[j] += invTensor[j][k]*L[k]; } printf("Angular velocity = %f %f %f\n",vAng[0], vAng[1], vAng[2]); */ } /*********************************************************************************/ static void removeTranslationAndRotation(SemiEmpiricalMD* seMD) { removeTranslation(seMD); removeRotation(seMD); } /*********************************************************************************/ static void initMD(SemiEmpiricalMD* seMD, gdouble temperature, gdouble stepSize, MDIntegratorType integratorType, MDThermostatType thermostat, gdouble friction, gdouble collide, gchar* fileNameTraj, gchar* fileNameProp, gint numberOfRunSteps) { gint i; gint j; /* gdouble fsInAKMA = 1.0/sqrt(1e-10*1e-10*1.6605655e-27*6.022045e23/4184.0)/1e15;*/ static gdouble fsInAKMA = 0.020454828110640; gdouble dt = stepSize * fsInAKMA; seMD->collide = collide; seMD->potentialEnergy = 0; seMD->kineticEnergy = 0; seMD->totalEnergy = 0; seMD->kelvin = 0; seMD->temperature = temperature; seMD->thermostat = NONE; seMD->integratorType = integratorType; seMD->thermostat = thermostat; seMD->fileTraj = NULL; seMD->fileProp = NULL; seMD->velocity = g_malloc(seMD->numberOfAtoms *sizeof(gdouble*)); for(i=0;inumberOfAtoms;i++) seMD->velocity[i] = g_malloc(3*sizeof(gdouble)); seMD->a = g_malloc(seMD->numberOfAtoms *sizeof(gdouble*)); for(i=0;inumberOfAtoms;i++) seMD->a[i] = g_malloc(3*sizeof(gdouble)); seMD->aold = NULL; if(seMD->integratorType==BEEMAN) { seMD->aold = g_malloc(seMD->numberOfAtoms *sizeof(gdouble*)); for(i=0;inumberOfAtoms;i++) seMD->aold[i] = g_malloc(3*sizeof(gdouble)); } seMD->coordinatesOld = NULL; seMD->moved = NULL; seMD->update = NULL; if(seMD->seModel->constraints!=NOCONSTRAINTS) { seMD->coordinatesOld = g_malloc(seMD->numberOfAtoms *sizeof(gdouble*)); for(i=0;inumberOfAtoms;i++) seMD->coordinatesOld[i] = g_malloc(3*sizeof(gdouble)); seMD->moved = g_malloc(seMD->numberOfAtoms *sizeof(gboolean)); seMD->update = g_malloc(seMD->numberOfAtoms *sizeof(gboolean)); } if(fileNameTraj) { seMD->fileTraj = FOpen(fileNameTraj, "w"); if(seMD->fileTraj != NULL) { fprintf(seMD->fileTraj,"[Gabedit Format]\n"); fprintf(seMD->fileTraj,"\n"); fprintf(seMD->fileTraj,"[MD]\n"); if(seMD->updateFrequency>0) numberOfRunSteps/=seMD->updateFrequency; fprintf(seMD->fileTraj," %d\n",numberOfRunSteps); } } if(fileNameProp) { seMD->fileProp = FOpen(fileNameProp, "w"); } srand ( (unsigned)time (NULL)); seMD->dt = dt; seMD->dt_2 = dt/2.0; seMD->dt2_2 = dt*dt/2;; seMD->dt_8 = dt/8.0; seMD->dt2_8 = dt*dt/8.0; initSD(seMD, friction); seMD->seModel->klass->calculateGradient(seMD->seModel); for ( i = 0; i < seMD->numberOfAtoms; i++) { gdouble m = seMD->seModel->molecule.atoms[i].prop.masse; for ( j = 0; j < 3; j++) seMD->a[i][j] = -seMD->seModel->molecule.gradient[j][i]/m; if(seMD->aold) for ( j = 0; j < 3; j++) seMD->aold[i][j] = seMD->a[i][j]; } if(temperature<=0) { for ( i = 0; i < seMD->numberOfAtoms; i++) for ( j = 0; j < 3; j++) seMD->velocity[i][j] = 0.0; } else for ( i = 0; i < seMD->numberOfAtoms; i++) { if(seMD->seModel->molecule.atoms[i].variable) { gdouble speed = maxwel(seMD->seModel->molecule.atoms[i].prop.masse,temperature); getRandVect(speed, seMD->velocity[i]); } else { for ( j = 0; j < 3; j++) seMD->velocity[i][j] = 0.0; } } seMD->nvariables = 0; for ( i = 0; i < seMD->numberOfAtoms; i++) if(seMD->seModel->molecule.atoms[i].variable) seMD->nvariables +=1; if(seMD->nvariables==0) { seMD->nvariables= seMD->numberOfAtoms; for ( i = 0; i < seMD->numberOfAtoms; i++) seMD->seModel->molecule.atoms[i].variable = TRUE; if(temperature>0) for ( i = 0; i < seMD->numberOfAtoms; i++) { gdouble speed = maxwel(seMD->seModel->molecule.atoms[i].prop.masse,temperature); getRandVect(speed, seMD->velocity[i]); } } seMD->nfree = 3* seMD->nvariables-seMD->seModel->numberOfRattleConstraintsTerms; removeTranslationAndRotation(seMD); if(seMD->nvariables==seMD->numberOfAtoms) seMD->nfree -=6; if(seMD->nvariables==seMD->numberOfAtoms-1) seMD->nfree -=3; if(seMD->nvariables==seMD->numberOfAtoms-2) seMD->nfree -=1; if( seMD->nfree<1) { StopCalcul = TRUE; seMD->nfree = 1; } removeTranslationAndRotation(seMD); } /*********************************************************************************/ static void rescaleVelocities(SemiEmpiricalMD* seMD) { berendsen(seMD); } /*********************************************************************************/ static void berendsen(SemiEmpiricalMD* seMD) { gint i; gint j; static gdouble fsInAKMA = 0.020454828110640; gdouble ekin = 0; gdouble kelvin = 0; gint nfree = seMD->nfree; static gdouble Kb = 1.9871914e-3; gdouble scale = 1.0; gdouble dt = seMD->dt; gdouble tautemp = 1.0/(seMD->collide)*1000*fsInAKMA; gdouble masse = 1.0; if(seMD->temperature<=0) return; if(nfree<1) return; for ( i = 0; i < seMD->numberOfAtoms; i++) { masse = seMD->seModel->molecule.atoms[i].prop.masse; for ( j = 0; j < 3; j++) ekin += seMD->velocity[i][j]*seMD->velocity[i][j]* masse; } /* ekin /= 2; kelvin = 2* ekin / ( nfree * Kb); */ kelvin = ekin / ( nfree * Kb); /* if(tautemp>dt) tautemp = dt;*/ scale = sqrt(1.0 + (dt/tautemp)*(seMD->temperature/kelvin-1.0)); /* printf("temp = %f kelvin = %f scale = %f\n",seMD->temperature, kelvin, scale);*/ for ( i = 0; i < seMD->numberOfAtoms; i++) if(seMD->seModel->molecule.atoms[i].variable) for ( j = 0; j < 3; j++) seMD->velocity[i][j] *= scale; removeTranslationAndRotation(seMD); } /*********************************************************************************/ static void andersen(SemiEmpiricalMD* seMD) { gint i; /* gdouble fsInAKMA = 1.0/sqrt(1e-10*1e-10*1.6605655e-27*6.022045e23/4184.0)/1e15;*/ static gdouble fsInAKMA = 0.020454828110640; gdouble tau = 1.0/seMD->collide*1000*fsInAKMA; /* in fs */ gdouble rate; static gdouble Kb = 1.9871914e-3; if(seMD->temperature<=0) return; if(seMD->numberOfAtoms<1) return; rate = seMD->dt / tau; rate /= pow(seMD->nvariables,2.0/3.0); for ( i = 0; i < seMD->numberOfAtoms; i++) { gdouble trial = drandom(); if(seMD->seModel->molecule.atoms[i].variable) if(trialseModel->molecule.atoms[i].prop.masse, seMD->temperature ); getRandVect(speed, seMD->velocity[i]); */ double speed = sqrt(Kb* seMD->temperature/seMD->seModel->molecule.atoms[i].prop.masse); double pnorm = normal(); seMD->velocity[i][0] = pnorm*speed; pnorm = normal(); seMD->velocity[i][1] = pnorm*speed; pnorm = normal(); seMD->velocity[i][2] = pnorm*speed; } } } /*********************************************************************************/ static void bussi(SemiEmpiricalMD* seMD) { static gdouble fsInAKMA = 0.020454828110640; gint nfree = seMD->nfree; static gdouble Kb = 1.9871914e-3; gdouble scale = 1.0; gdouble dt = seMD->dt; gdouble tautemp = 1.0/(seMD->collide)*1000*fsInAKMA; gdouble c = exp(-dt/tautemp); gdouble ekin = getEKin(seMD); gdouble kelvin = 2*ekin / ( nfree * Kb); gdouble d = (1.0-c) * (seMD->temperature/kelvin) / (nfree); gdouble r = normal (); gdouble si = 0.0; gdouble s = 0.0; gint i,j; if(seMD->temperature<=0) return; if(nfree<1) return; for(i=0;inumberOfAtoms; i++) if(seMD->seModel->molecule.atoms[i].variable) for ( j = 0; j < 3; j++) seMD->velocity[i][j] *= scale; removeTranslationAndRotation(seMD); } /*********************************************************************************/ static void newAccelaration(SemiEmpiricalMD* seMD) { gint i; gint j; seMD->seModel->klass->calculateGradient(seMD->seModel); for ( i = 0; i < seMD->numberOfAtoms; i++) { gdouble m = seMD->seModel->molecule.atoms[i].prop.masse; if(seMD->aold) for ( j = 0; j < 3; j++) seMD->aold[i][j] = seMD->a[i][j]; for ( j = 0; j < 3; j++) seMD->a[i][j] = -seMD->seModel->molecule.gradient[j][i]/m; } } /*********************************************************************************/ static void computeEnergies(SemiEmpiricalMD* seMD) { seMD->kineticEnergy = getEKin(seMD); seMD->potentialEnergy = seMD->seModel->molecule.energy; seMD->totalEnergy = seMD->kineticEnergy + seMD->potentialEnergy; seMD->kelvin = getKelvin(seMD); } /*********************************************************************************/ static void applyOneStep(SemiEmpiricalMD* seMD) { if(seMD->integratorType==VERLET) applyVerlet(seMD); else if(seMD->integratorType==BEEMAN) applyBeeman(seMD); else applyStochastic(seMD); computeEnergies(seMD); /* printTranslation(seMD); printRotation(seMD); */ /* removeTranslationAndRotation(seMD);*/ } /*********************************************************************************/ static void applyRattleFirstPortion(SemiEmpiricalMD* semiEmpiricalMD) { gint i; gint k; gint maxIter = 100; gdouble omega = 1.2; gdouble tolerance = 1e-6; gboolean done = FALSE; gint nIter = 0; gint a1 = 0; gint a2 = 0; gdouble r2ij; gdouble dot; gdouble invMass1; gdouble invMass2; gdouble delta; gdouble term = 0; gdouble terms[3]; gdouble d; MoleculeSE* m = &semiEmpiricalMD->seModel->molecule; SemiEmpiricalModel* seModel = semiEmpiricalMD->seModel; gdouble deltaMax = 0; if(seModel->constraints==NOCONSTRAINTS) return; for (i = 0; i < semiEmpiricalMD->numberOfAtoms; i++) { semiEmpiricalMD->moved[i] = semiEmpiricalMD->seModel->molecule.atoms[i].variable; semiEmpiricalMD->update[i] = FALSE; } maxIter *= semiEmpiricalMD->seModel->numberOfRattleConstraintsTerms; do{ nIter++; done=TRUE; deltaMax = 0; for (i = 0; i < semiEmpiricalMD->seModel->numberOfRattleConstraintsTerms; i++) { a1 = (gint)semiEmpiricalMD->seModel->rattleConstraintsTerms[0][i]; a2 = (gint)semiEmpiricalMD->seModel->rattleConstraintsTerms[1][i]; if( !semiEmpiricalMD->moved[a1] && !semiEmpiricalMD->moved[a2] ) continue; r2ij = 0; for (k=0;k<3;k++) { d = m->atoms[a2].coordinates[k]-m->atoms[a1].coordinates[k]; r2ij +=d*d; } delta = semiEmpiricalMD->seModel->rattleConstraintsTerms[2][i]-r2ij; if(deltaMaxupdate[a1] = TRUE; semiEmpiricalMD->update[a2] = TRUE; /* here : rattle image for PBC, not yet implemented */ dot = 0; for (k=0;k<3;k++) { d = m->atoms[a2].coordinates[k]-m->atoms[a1].coordinates[k]; dot +=d*(semiEmpiricalMD->coordinatesOld[a2][k]-semiEmpiricalMD->coordinatesOld[a1][k]); } invMass1 = 1/m->atoms[a1].prop.masse; invMass2 = 1/m->atoms[a2].prop.masse; term = omega*delta / (2.0*(invMass1+invMass2)*dot); for (k=0;k<3;k++) { terms[k] = (semiEmpiricalMD->coordinatesOld[a2][k]-semiEmpiricalMD->coordinatesOld[a1][k])*term; } for (k=0;k<3;k++) m->atoms[a1].coordinates[k] -= terms[k]*invMass1; for (k=0;k<3;k++) m->atoms[a2].coordinates[k] += terms[k]*invMass2; invMass1 /= semiEmpiricalMD->dt; invMass2 /= semiEmpiricalMD->dt; for (k=0;k<3;k++) semiEmpiricalMD->velocity[a1][k] -= terms[k]*invMass1; for (k=0;k<3;k++) semiEmpiricalMD->velocity[a2][k] += terms[k]*invMass2; } for (i = 0; i < semiEmpiricalMD->numberOfAtoms; i++) { semiEmpiricalMD->moved[i] = semiEmpiricalMD->update[i]; semiEmpiricalMD->update[i] = FALSE; } }while(!done && nIter=maxIter && deltaMax>tolerance*10) { printf(_("Rattle first portion : Warning, distance constraints not satisfied\n")); } for (i = 0; i < semiEmpiricalMD->numberOfAtoms; i++) if(!m->atoms[i].variable) { for (k=0;k<3;k++) m->atoms[i].coordinates[k] = semiEmpiricalMD->coordinatesOld[i][k]; for (k=0;k<3;k++) semiEmpiricalMD->velocity[i][k] = 0; } } /*********************************************************************************/ static void applyRattleSecondPortion(SemiEmpiricalMD* semiEmpiricalMD) { gint i; gint k; gint maxIter = 100; gdouble omega = 1.2; gdouble tolerance = 1e-6; gboolean done = FALSE; gint nIter = 0; gint a1 = 0; gint a2 = 0; gdouble r2ij; gdouble dot; gdouble invMass1; gdouble invMass2; gdouble term = 0; gdouble terms[3]; gdouble d; MoleculeSE* m = &semiEmpiricalMD->seModel->molecule; SemiEmpiricalModel* seModel = semiEmpiricalMD->seModel; gdouble deltaMax = 0; if(seModel->constraints==NOCONSTRAINTS) return; tolerance /= semiEmpiricalMD->dt; for (i = 0; i < semiEmpiricalMD->numberOfAtoms; i++) { semiEmpiricalMD->moved[i] = semiEmpiricalMD->seModel->molecule.atoms[i].variable; semiEmpiricalMD->update[i] = FALSE; } maxIter *= semiEmpiricalMD->seModel->numberOfRattleConstraintsTerms; do{ nIter++; done=TRUE; deltaMax = 0; for (i = 0; i < semiEmpiricalMD->seModel->numberOfRattleConstraintsTerms; i++) { a1 = (gint)semiEmpiricalMD->seModel->rattleConstraintsTerms[0][i]; a2 = (gint)semiEmpiricalMD->seModel->rattleConstraintsTerms[1][i]; r2ij = semiEmpiricalMD->seModel->rattleConstraintsTerms[2][i]; if( !semiEmpiricalMD->moved[a1] && !semiEmpiricalMD->moved[a2] ) continue; /* here : rattle image for PBC, not yet implemented */ dot = 0; for (k=0;k<3;k++) { d = m->atoms[a2].coordinates[k]-m->atoms[a1].coordinates[k]; dot +=d*(semiEmpiricalMD->velocity[a2][k]-semiEmpiricalMD->velocity[a1][k]); } invMass1 = 1/semiEmpiricalMD->seModel->molecule.atoms[a1].prop.masse; invMass2 = 1/semiEmpiricalMD->seModel->molecule.atoms[a2].prop.masse; term = -dot / ((invMass1+invMass2)*r2ij); if(deltaMaxupdate[a1] = TRUE; semiEmpiricalMD->update[a2] = TRUE; term *= omega; for (k=0;k<3;k++) { d = m->atoms[a2].coordinates[k]-m->atoms[a1].coordinates[k]; terms[k] = d*term; } for (k=0;k<3;k++) semiEmpiricalMD->velocity[a1][k] -= terms[k]*invMass1; for (k=0;k<3;k++) semiEmpiricalMD->velocity[a2][k] += terms[k]*invMass2; } for (i = 0; i < semiEmpiricalMD->numberOfAtoms; i++) { semiEmpiricalMD->moved[i] = semiEmpiricalMD->update[i]; semiEmpiricalMD->update[i] = FALSE; } }while(!done && nIter=maxIter && deltaMax>tolerance*10) { printf(_("Rattle second portion : Warning, velocity constraints not satisfied\n")); } for (i = 0; i < semiEmpiricalMD->numberOfAtoms; i++) if(!m->atoms[i].variable) for (k=0;k<3;k++) semiEmpiricalMD->velocity[i][k] = 0.0; } /*********************************************************************************/ static void applyVerlet(SemiEmpiricalMD* seMD) { gint i; gint j; if(seMD->seModel->constraints!=NOCONSTRAINTS) for (i = 0; i < seMD->numberOfAtoms; i++) for ( j = 0; j < 3; j++) seMD->coordinatesOld[i][j]= seMD->seModel->molecule.atoms[i].coordinates[j]; for (i = 0; i < seMD->numberOfAtoms; i++) { if(!seMD->seModel->molecule.atoms[i].variable) continue; for ( j = 0; j < 3; j++) { seMD->seModel->molecule.atoms[i].coordinates[j] += seMD->velocity[i][j] * seMD->dt + seMD->a[i][j]*seMD->dt2_2; } for ( j = 0; j < 3; j++) seMD->velocity[i][j] += seMD->a[i][j] * seMD->dt_2; } if(seMD->seModel->constraints!=NOCONSTRAINTS) applyRattleFirstPortion(seMD); newAccelaration(seMD); for (i = 0; i < seMD->numberOfAtoms; i++) if(seMD->seModel->molecule.atoms[i].variable) for ( j = 0; j < 3; j++) seMD->velocity[i][j] += seMD->a[i][j] * seMD->dt_2; if(seMD->seModel->constraints!=NOCONSTRAINTS) applyRattleSecondPortion(seMD); } /*********************************************************************************/ static void applyBeeman(SemiEmpiricalMD* seMD) { gint i; gint j; gdouble terms[3]; if(seMD->seModel->constraints!=NOCONSTRAINTS) for (i = 0; i < seMD->numberOfAtoms; i++) for ( j = 0; j < 3; j++) seMD->coordinatesOld[i][j]= seMD->seModel->molecule.atoms[i].coordinates[j]; for (i = 0; i < seMD->numberOfAtoms; i++) { if(!seMD->seModel->molecule.atoms[i].variable) continue; for ( j = 0; j < 3; j++) terms[j] = 5.0*seMD->a[i][j]-seMD->aold[i][j]; for ( j = 0; j < 3; j++) { seMD->seModel->molecule.atoms[i].coordinates[j] += seMD->velocity[i][j] * seMD->dt + terms[j]*seMD->dt2_8; } for ( j = 0; j < 3; j++) seMD->velocity[i][j] += terms[j] * seMD->dt_8; } if(seMD->seModel->constraints!=NOCONSTRAINTS) applyRattleFirstPortion(seMD); newAccelaration(seMD); for (i = 0; i < seMD->numberOfAtoms; i++) if(seMD->seModel->molecule.atoms[i].variable) for ( j = 0; j < 3; j++) seMD->velocity[i][j] += (3.0*seMD->a[i][j]+seMD->aold[i][j]) * seMD->dt_8; if(seMD->seModel->constraints!=NOCONSTRAINTS) applyRattleSecondPortion(seMD); } /**********************************************************************/ static gdouble erfinv( gdouble y ) { static gdouble a[] = {0, 0.886226899, -1.645349621, 0.914624893, -0.140543331 }; static gdouble b[] = {0, -2.118377725, 1.442710462, -0.329097515, 0.012229801 }; static gdouble c[] = {0, -1.970840454, -1.624906493, 3.429567803, 1.641345311 }; static gdouble d[] = {0, 3.543889200, 1.637067800 }; gdouble x=1e100, z; if ( y < -1. ) return x; if ( y > 1. ) return x; if ( y >= -.7 ) { if ( y <= .7 ) { z = y*y; x = y * (((a[4]*z+a[3])*z+a[2])*z+a[1]) / ((((b[4]*z+b[3])*z+b[2])*z+b[1])*z+1); } else if ( y < 1 ) { z = sqrt(-log((1-y)/2)); x = (((c[4]*z+c[3])*z+c[2])*z+c[1]) / ((d[2]*z+d[1])*z+1); } } else { z = sqrt(-log((1+y)/2)); x = -(((c[4]*z+c[3])*z+c[2])*z+c[1]) / ((d[2]*z+d[1])*z+1); } return x; } /**********************************************************************/ static void getRandVect(gdouble len, gdouble V[]) { gdouble l = 0; gint j; for(j=0;j<3;j++) { V [j] = drandom(); l += V[j]*V[j]; } if(l<=0) return; l = sqrt(l); for(j=0;j<3;j++) V [j] *= len/l; } /**********************************************************************/ static gdouble maxwel(gdouble masse, gdouble temperature) { /* * physical constants in SI units * ------------------------------ * Kb = 1.380662 E-23 J/K * Na = 6.022045 E23 1/mol * e = 1.6021892 E-19 C * eps = 8.85418782 E-12 F/m * * 1 Kcal = 4184.0 J * 1 amu = 1.6605655 E-27 Kg * 1 A = 1.0 E-10 m * * Internally, AKMA units are used: * KBOLTZ = Na *Kb / 1 Kcal */ /* gdouble Kb = 6.022045e23*1.380662e-23/4184.0;*/ gdouble Kb = 1.9871914e-3; gdouble beta = sqrt(masse / (2.0*Kb*temperature)); gdouble rho; gdouble xs, ys, zs; rho = drandom(); xs = erfinv(rho)/beta; rho = drandom(); ys = erfinv(rho)/beta; rho = drandom(); zs = erfinv(rho)/beta; return sqrt(xs*xs+ys*ys+zs*zs); } /*********************************************************************************/ static void newProperties(SemiEmpiricalMD* seMD, gchar* comments) { if( seMD->fileProp == NULL) return; fprintf(seMD->fileProp,"time0(fs)\ttime(fs)\tTotal Energy(Kcal/mol)\tPotential Energy(kcal/mol) Kinetic Energy(Kcal/mol)\tT(t) (K)\tTaver(K)\tsigma(T)(K)"); if(comments) fprintf(seMD->fileProp,"%s\n", comments); else fprintf(seMD->fileProp,"\n"); } /*********************************************************************************/ static void saveProperties(SemiEmpiricalMD* seMD, gint iStep0, gint iStep, gchar* comments) { /* gdouble fsInAKMA = 1.0/sqrt(1e-10*1e-10*1.6605655e-27*6.022045e23/4184.0)/1e15;*/ static gdouble fsInAKMA = 0.020454828110640; gdouble dt = seMD->dt/(fsInAKMA); static gdouble Ttot = 0; static gdouble T2tot = 0; gdouble Taver = 0; gdouble T2aver = 0; if( seMD->fileProp == NULL) return; if(iStep==1) { Ttot = 0; T2tot = 0; } Ttot += seMD->kelvin; T2tot += seMD->kelvin*seMD->kelvin; Taver = Ttot/iStep; T2aver = T2tot/iStep; fprintf(seMD->fileProp,"%f\t%f\t%f\t\t%f\t\t%f\t%f\t%f\t%f", (iStep0)*dt, (iStep)*dt, seMD->totalEnergy, seMD->potentialEnergy, seMD->kineticEnergy, seMD->kelvin, Taver, sqrt(fabs(T2aver-Taver*Taver)) ); if(comments) fprintf(seMD->fileProp,"%s\n", comments); else fprintf(seMD->fileProp,"\n"); } /*********************************************************************************/ static void saveTrajectory(SemiEmpiricalMD* seMD, gint iStep) { /* gdouble fsInAKMA = 1.0/sqrt(1e-10*1e-10*1.6605655e-27*6.022045e23/4184.0)/1e15;*/ static gdouble fsInAKMA = 0.020454828110640; gdouble dt = seMD->dt/(fsInAKMA); gint i; if( seMD->fileTraj == NULL) return; fprintf(seMD->fileTraj," %d %f %f %f %f nAtoms time(fs) TotalEnery(Kcal/mol) Kinetic Potential\n", seMD->numberOfAtoms, (iStep)*dt, seMD->totalEnergy, seMD->kineticEnergy, seMD->potentialEnergy ); fprintf(seMD->fileTraj," %s\n", "Coord in Ang, Velocity in AKMA, time in fs"); for (i = 0; i < seMD->numberOfAtoms; i++) { fprintf(seMD->fileTraj," %s %f %f %f %f %f %f %f %s %s %s %d %d\n", seMD->seModel->molecule.atoms[i].prop.symbol, seMD->seModel->molecule.atoms[i].coordinates[0], seMD->seModel->molecule.atoms[i].coordinates[1], seMD->seModel->molecule.atoms[i].coordinates[2], seMD->velocity[i][0], seMD->velocity[i][1], seMD->velocity[i][2], seMD->seModel->molecule.atoms[i].charge, seMD->seModel->molecule.atoms[i].mmType, seMD->seModel->molecule.atoms[i].pdbType, seMD->seModel->molecule.atoms[i].residueName, seMD->seModel->molecule.atoms[i].residueNumber, seMD->seModel->molecule.atoms[i].variable ); } } /**********************************************************************/ void freeSemiEmpiricalMD(SemiEmpiricalMD* seMD) { seMD->seModel = NULL; seMD->numberOfAtoms = 0; seMD->updateFrequency = 0; if(seMD->velocity) { gint i; for(i=0;inumberOfAtoms;i++) if(seMD->velocity[i]) g_free(seMD->velocity[i]); g_free(seMD->velocity); } if(seMD->a) { gint i; for(i=0;inumberOfAtoms;i++) if(seMD->a[i]) g_free(seMD->a[i]); g_free(seMD->a); } if(seMD->aold) { gint i; for(i=0;inumberOfAtoms;i++) if(seMD->aold[i]) g_free(seMD->aold[i]); g_free(seMD->aold); } } /********************************************************************************/ static gdouble getEKin(SemiEmpiricalMD* seMD) { gdouble ekin = 0; gint i; gint j; gdouble masse; for ( i = 0; i < seMD->numberOfAtoms; i++) { masse = seMD->seModel->molecule.atoms[i].prop.masse; for ( j = 0; j < 3; j++) ekin += seMD->velocity[i][j]*seMD->velocity[i][j]* masse; } return ekin/2; } /********************************************************************************/ static gdouble getKelvin(SemiEmpiricalMD* seMD) { gint nfree = seMD->nfree; static gdouble Kb = 1.9871914e-3; if(nfree<1) return 0; return 2*getEKin(seMD) / ( nfree * Kb); } /********************************************************************************/ /* literature references: M. P. Allen, "Brownian Dynamics Simulation of a Chemical Reaction in Solution", Molecular Physics, 40, 1073-1087 (1980) F. Guarnieri and W. C. Still, "A Rapidly Convergent Simulation Method: Mixed Monte Carlo / Stochastic Dynamics", Journal of Computational Chemistry, 15, 1302-1310 (1994) */ /*********************************************************************************/ static void getsFrictionalAndRandomForce(SemiEmpiricalMD* seMD) { gdouble* gamma = seMD->gamma; gdouble* positionFriction = seMD->positionFriction; gdouble* velocityFriction = seMD->velocityFriction; gdouble* accelarationFriction = seMD->accelarationFriction; gdouble** positionRandom = seMD->positionRandom; gdouble** velocityRandom = seMD->velocityRandom; gdouble dt = seMD->dt; gint n = seMD->numberOfAtoms; gint i; gint j; gdouble gdt; gdouble egdt; gdouble ktm = 0; gdouble pterm; gdouble vterm; gdouble psig; gdouble vsig; gdouble rho; gdouble rhoc; gdouble pnorm; gdouble vnorm; static gdouble Kb = 1.9871914e-3; for(i=0;ifriction; /* printf(" friction = %f\n", seMD->friction);*/ for(i=0;i=0.05) { egdt = exp(-gdt); positionFriction[i] = egdt; velocityFriction[i] = (1.0-egdt) / gamma[i]; accelarationFriction[i] = (dt-velocityFriction[i]) / gamma[i]; pterm = 2.0*gdt - 3.0 + (4.0-egdt)*egdt; vterm = 1.0 - egdt*egdt; rho = (1.0-egdt)*(1.0-egdt) / sqrt(pterm*vterm); } /* use series expansions when friction coefficient is small */ else { gdouble gdt2 = gdt * gdt; gdouble gdt3 = gdt * gdt2; gdouble gdt4 = gdt2 * gdt2; gdouble gdt5 = gdt2 * gdt3; gdouble gdt6 = gdt3 * gdt3; gdouble gdt7 = gdt3 * gdt4; gdouble gdt8 = gdt4 * gdt4; gdouble gdt9 = gdt4 * gdt5; accelarationFriction[i] = (gdt2/2.0 - gdt3/6.0 + gdt4/24.0 - gdt5/120.0 + gdt6/720.0 - gdt7/5040.0 + gdt8/40320.0 - gdt9/362880.0) / gamma[i]/gamma[i]; velocityFriction[i] = dt - gamma[i]*accelarationFriction[i]; positionFriction[i] = 1.0 - gamma[i]*velocityFriction[i]; pterm = 2.0*gdt3/3.0 - gdt4/2.0 + 7.0*gdt5/30.0 - gdt6/12.0 + 31.0*gdt7/1260.0 - gdt8/160.0 + 127.0*gdt9/90720.0; vterm = 2.0*gdt - 2.0*gdt2 + 4.0*gdt3/3.0 - 2.0*gdt4/3.0 + 4.0*gdt5/15.0 - 4.0*gdt6/45.0 + 8.0*gdt7/315.0 - 2.0*gdt8/315.0 + 4.0*gdt9/2835.0; rho = sqrt(3.0) * (0.5 - 3.0*gdt/16.0 - 17.0*gdt2/1280.0 + 17.0*gdt3/6144.0 + 40967.0*gdt4/34406400.0 - 57203.0*gdt5/275251200.0 - 1429487.0*gdt6/13212057600.0); } ktm = Kb * seMD->temperature / seMD->seModel->molecule.atoms[i].prop.masse; psig = sqrt(ktm*pterm) / gamma[i]; vsig = sqrt(ktm*vterm); rhoc = sqrt(1.0 - rho*rho); for(j=0;j<3;j++) { pnorm = normal(); vnorm = normal (); positionRandom[i][j] = psig * pnorm; velocityRandom[i][j] = vsig * (rho*pnorm+rhoc*vnorm); } } } } /*********************************************************************************/ static void applyStochastic(SemiEmpiricalMD* seMD) { gdouble* positionFriction = seMD->positionFriction; gdouble* velocityFriction = seMD->velocityFriction; gdouble* accelarationFriction = seMD->accelarationFriction; gdouble** positionRandom = seMD->positionRandom; gdouble** velocityRandom = seMD->velocityRandom; gdouble**v = seMD->velocity; gdouble**a = seMD->a; gint n = seMD->numberOfAtoms; gint i; gint j; AtomSE* atoms = seMD->seModel->molecule.atoms; getsFrictionalAndRandomForce(seMD); if(seMD->seModel->constraints!=NOCONSTRAINTS) for (i = 0; i < seMD->numberOfAtoms; i++) for ( j = 0; j < 3; j++) seMD->coordinatesOld[i][j]= seMD->seModel->molecule.atoms[i].coordinates[j]; for(i=0;iseModel->molecule.atoms[i].variable) continue; for(j=0;j<3;j++) atoms[i].coordinates[j] += v[i][j]*velocityFriction[i] + a[i][j]*accelarationFriction[i] + positionRandom[i][j]; for(j=0;j<3;j++) v[i][j] = v[i][j]*positionFriction[i] + 0.5*a[i][j]*velocityFriction[i]; } if(seMD->seModel->constraints!=NOCONSTRAINTS) applyRattleFirstPortion(seMD); newAccelaration(seMD); for (i = 0; i < n; i++) if(seMD->seModel->molecule.atoms[i].variable) for ( j = 0; j < 3; j++) v[i][j] += 0.5*a[i][j]*velocityFriction[i] + velocityRandom[i][j]; if(seMD->seModel->constraints!=NOCONSTRAINTS) applyRattleSecondPortion(seMD); computeEnergies(seMD); } /*********************************************************************************/ static gdouble drandom() { return (rand()/(gdouble)RAND_MAX); } /*********************************************************************************/ /* "normal" generates a random number from a normal Gaussian distribution with a mean of zero and a variance of one */ static gdouble normal() { gdouble v1,v2,rsq; gdouble factor; static gdouble store; static gboolean compute = TRUE; if (compute) { do{ v1 = 2.0 * drandom() - 1.0; v2 = 2.0 * drandom () - 1.0; rsq = v1*v1 + v2*v2; }while(rsq >= 1.0); compute = FALSE; factor = sqrt(-2.0*log(rsq)/rsq); store = v1 * factor; return v2 * factor; } /* use the second random value computed at the last call */ else { compute = TRUE; return store; } } /*********************************************************************************/ GabeditSrc250/src/SemiEmpirical/Dep.mk0000644000175100017510000000455713130664665020070 0ustar allouchealloucheAtomSE.o: AtomSE.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/AtomsProp.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h AtomSE.h MoleculeSE.o: MoleculeSE.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/AtomsProp.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/Measure.h ../Geometry/GeomGlobal.h ../Geometry/GeomXYZ.h \ ../Utils/Constants.h ../Utils/Utils.h AtomSE.h MoleculeSE.h SemiEmpiricalModel.o: SemiEmpiricalModel.c ../../Config.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/AtomsProp.h ../Utils/Utils.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h AtomSE.h \ MoleculeSE.h SemiEmpiricalModel.h SemiEmpiricalMD.o: SemiEmpiricalMD.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/AtomsProp.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h ../Utils/Utils.h \ AtomSE.h MoleculeSE.h SemiEmpiricalModel.h SemiEmpiricalMD.h SemiEmpirical.o: SemiEmpirical.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/AtomsProp.h ../Utils/Utils.h \ ../Utils/Constants.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h AtomSE.h \ MoleculeSE.h SemiEmpiricalModel.h SemiEmpirical.h SemiEmpiricalDlg.o: SemiEmpiricalDlg.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Utils/Constants.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/Measure.h ../Geometry/ResultsAnalise.h \ ../Geometry/GeomGlobal.h ../Geometry/GeomXYZ.h ../Utils/Utils.h \ ../Utils/AtomsProp.h ../Files/FolderChooser.h \ ../Files/GabeditFolderChooser.h AtomSE.h MoleculeSE.h \ SemiEmpiricalModel.h SemiEmpirical.h SemiEmpiricalMD.h \ SemiEmpiricalDlg.h GabeditSrc250/src/SemiEmpirical/SemiEmpiricalModel.h0000644000175100017510000000473313130665225022671 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_SEMIEMPIRICALMODEL_H__ #define __GABEDIT_SEMIEMPIRICALMODEL_H__ typedef struct _SemiEmpiricalModel SemiEmpiricalModel; typedef struct _SemiEmpiricalModelClass SemiEmpiricalModelClass; typedef struct _SemiEmpiricalModelOptions SemiEmpiricalModelOptions; #define RATTLEDIM 3 /* a1 a2 r12 */ typedef enum { NOCONSTRAINTS = 0, BONDSCONSTRAINTS = 1, BONDSANGLESCONSTRAINTS = 2 } SemiEmpiricalModelConstraints; struct _SemiEmpiricalModel { MoleculeSE molecule; SemiEmpiricalModelClass* klass; gchar* method; gchar* workDir; SemiEmpiricalModelConstraints constraints; gint numberOfRattleConstraintsTerms; gdouble* rattleConstraintsTerms[RATTLEDIM]; }; struct _SemiEmpiricalModelClass { void (*calculateGradient)(SemiEmpiricalModel* seModel); void (*calculateEnergy)(SemiEmpiricalModel* seModel); }; SemiEmpiricalModel newSemiEmpiricalModel(gchar* method, gchar* dirName, SemiEmpiricalModelConstraints constraints); void freeSemiEmpiricalModel(SemiEmpiricalModel* seModel); SemiEmpiricalModel copySemiEmpiricalModel(SemiEmpiricalModel* seModel); void setRattleConstraintsParameters(SemiEmpiricalModel* semiEmpiricalModel); #endif /* __GABEDIT_SEMIEMPIRICALMODEL_H__ */ GabeditSrc250/src/SemiEmpirical/SemiEmpiricalModel.c0000644000175100017510000001624313130665225022663 0ustar alloucheallouche/* SemiEmpiricalModel.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/AtomsProp.h" #include "../Utils/Utils.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "AtomSE.h" #include "MoleculeSE.h" #include "SemiEmpiricalModel.h" void create_GeomXYZ_from_draw_grometry(); /**********************************************************************/ void setRattleConstraintsParameters(SemiEmpiricalModel* semiEmpiricalModel) { gint i; gint j; gint k; gint a1,a2,a3; gdouble r2ij; gdouble d; MoleculeSE* m = &semiEmpiricalModel->molecule; gint numberOfRattleConstraintsTerms = 0; gdouble* rattleConstraintsTerms[RATTLEDIM]; semiEmpiricalModel->numberOfRattleConstraintsTerms = 0; for( i=0; irattleConstraintsTerms[i] = NULL; if(semiEmpiricalModel->constraints==NOCONSTRAINTS) return; numberOfRattleConstraintsTerms = m->numberOf2Connections; if(semiEmpiricalModel->constraints==BONDSANGLESCONSTRAINTS) numberOfRattleConstraintsTerms += m->numberOf3Connections; if(numberOfRattleConstraintsTerms<1) return; for( i=0; inumberOf2Connections; i++) { while( gtk_events_pending() ) gtk_main_iteration(); if(StopCalcul) break; a1 = m->connected2[0][i]; a2 = m->connected2[1][i]; if(!m->atoms[a1].variable &&!m->atoms[a2].variable) continue; r2ij = 0; for (k=0;k<3;k++) { d = m->atoms[a1].coordinates[k]-m->atoms[a2].coordinates[k]; r2ij +=d*d; } rattleConstraintsTerms[0][j] = a1; rattleConstraintsTerms[1][j] = a2; rattleConstraintsTerms[2][j] = r2ij; j++; } if(semiEmpiricalModel->constraints==BONDSANGLESCONSTRAINTS) { gint a1p, a2p; gint* nConnections = NULL; gint* nAngles = NULL; nConnections = g_malloc(m->nAtoms*sizeof(gint)); nAngles = g_malloc(m->nAtoms*sizeof(gint)); for ( i = 0; i < m->nAtoms; i++) { nConnections[i] = 0; nAngles[i] = 0; } for ( i = 0; i < m->nAtoms; i++) if(m->atoms[i].typeConnections) { for ( k = 0; k < m->nAtoms; k++) if(i!=k && m->atoms[i].typeConnections[m->atoms[k].N-1]>0) nConnections[i]++; /* printf("%d %s nCon=%d\n",i,m->atoms[i].mmType,nConnections[i]);*/ } for ( i = 0; i < m->numberOf3Connections; i++) { while( gtk_events_pending() ) gtk_main_iteration(); if(StopCalcul) break; a1 = m->connected3[0][i]; a2 = m->connected3[1][i]; a3 = m->connected3[2][i]; if(!m->atoms[a1].variable &&!m->atoms[a3].variable) continue; if(nAngles[a2]>=2*nConnections[a2]-3) continue; for (k=0;katoms[a1].coordinates[k]-m->atoms[a3].coordinates[k]; r2ij +=d*d; } rattleConstraintsTerms[0][j] = a1; rattleConstraintsTerms[1][j] = a3; rattleConstraintsTerms[2][j] = r2ij; j++; } /* for ( i = 0; i < m->nAtoms; i++) { printf("%d %s nAngle = %d 2*nCon-3=%d\n",i,m->atoms[i].mmType,nAngles[i],2*nConnections[i]-3); } */ if(nConnections) g_free(nConnections); if(nAngles) g_free(nAngles); } if(j<1) { numberOfRattleConstraintsTerms=0; for( i=0; inumberOfRattleConstraintsTerms = numberOfRattleConstraintsTerms; for( i=0; irattleConstraintsTerms[i] = rattleConstraintsTerms[i]; } /**********************************************************************/ SemiEmpiricalModel newSemiEmpiricalModel(gchar* method, gchar* dirName, SemiEmpiricalModelConstraints constraints) { gint i; SemiEmpiricalModel seModel; seModel.molecule = newMoleculeSE(); seModel.klass = g_malloc(sizeof(SemiEmpiricalModelClass)); seModel.klass->calculateGradient = NULL; seModel.klass->calculateEnergy = NULL; seModel.numberOfRattleConstraintsTerms = 0; seModel.constraints = constraints; for(i=0;imolecule); if(seModel->klass != NULL) { g_free(seModel->klass); seModel->klass = NULL; } if(seModel->method != NULL) { g_free(seModel->method); seModel->method = NULL; } if(seModel->workDir != NULL) { g_free(seModel->workDir); seModel->workDir = NULL; } } /*****************************************************************************/ SemiEmpiricalModel copySemiEmpiricalModel(SemiEmpiricalModel* f) { SemiEmpiricalModel seModel = newSemiEmpiricalModel(NULL,NULL,NOCONSTRAINTS); seModel.molecule = copyMoleculeSE(&f->molecule); seModel.method = NULL; if(f->method) seModel.method = g_strdup(f->method); seModel.workDir = NULL; if(f->workDir) seModel.workDir = g_strdup(f->workDir); seModel.klass->calculateGradient = f->klass->calculateGradient; seModel.klass->calculateEnergy = f->klass->calculateEnergy; seModel.constraints = f->constraints; return seModel; } GabeditSrc250/src/SemiEmpirical/SemiEmpiricalDlg.c0000644000175100017510000072424513130665225022341 0ustar alloucheallouche/* SemiEmpiricalDlg.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/Measure.h" #include "../Geometry/ResultsAnalise.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomXYZ.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Files/FolderChooser.h" #include "../Files/GabeditFolderChooser.h" #include "AtomSE.h" #include "MoleculeSE.h" #include "SemiEmpiricalModel.h" #include "SemiEmpirical.h" #include "SemiEmpiricalMD.h" #include "SemiEmpiricalDlg.h" typedef enum { TOLE = 0, TOLD = 1 } TOLptions; #define NINTEGOPTIONS 3 #define NTHERMOPTIONS 4 #define NENTRYTOL 2 #define NCONSTRAINTS 3 static GtkWidget* buttonConstraintsOptions[NCONSTRAINTS]; static GtkWidget* entryTolerance[NENTRYTOL]; static GtkWidget* buttonTolerance[NENTRYTOL]; static GtkWidget* buttonMDOptions[NINTEGOPTIONS]; static GtkWidget* buttonMDThermOptions[NTHERMOPTIONS]; static GtkWidget* entryMDTimes[4]; static GtkWidget* entryMDTemperature[4]; static GtkWidget* entryMDStepSize; static GtkWidget* entryMDRafresh; static GtkWidget* entrySDFriction; static GtkWidget* entrySDCollide; static GtkWidget* entryNumberOfGeom = NULL; static GtkWidget* entryFileNameGeom = NULL; static GtkWidget* entryFileNameTraj = NULL; static GtkWidget* entryFileNameProp = NULL; static GtkWidget* buttonSaveTraj = NULL; static GtkWidget* buttonSaveProp = NULL; static GtkWidget* buttonDirSelector = NULL; static GtkWidget* entryCharge = NULL; static GtkWidget* entrySpinMultiplicity = NULL; static GtkWidget* buttonCreateGaussian = NULL ; static GtkWidget* entryGaussianKeywords = NULL; static GtkWidget* buttonCreateMopac = NULL ; static GtkWidget* entryMopacKeywords = NULL; static GtkWidget* buttonCreateFireFly = NULL ; static GtkWidget* entryFireFlyKeywords = NULL; static GtkWidget* entryOpenBabelKeywords = NULL; static GtkWidget* entryOpenBabelPotential = NULL; static GtkWidget* entryGenericKeywords = NULL; static GtkWidget* entryGenericPotential = NULL; static GtkWidget* buttonPostNone = NULL ; static GtkWidget* buttonPostOpt = NULL ; static GtkWidget* buttonMopac = NULL ; static GtkWidget* buttonFireFly = NULL ; static GtkWidget* buttonOpenBabel = NULL ; static GtkWidget* buttonGeneric = NULL ; static GtkWidget* entryMopacMethod = NULL; static GtkWidget* entryFireFlyMethod = NULL; static GtkWidget* entryOpenBabelMethod = NULL; static GtkWidget* entryGenericMethod = NULL; static GtkWidget* entryMopacHamiltonianSparkle = NULL; static GtkWidget* entryMopacHamiltonian = NULL; static GtkWidget* entryAddMopacKeywords = NULL; static GtkWidget* entryOrcaHamiltonian = NULL; static GtkWidget* entryAddOrcaKeywords = NULL; static GtkWidget* entryAddOpenBabelKeywords = NULL; static gchar* genericProgName = NULL; static gint totalCharge = 0; static gint spinMultiplicity=1; static gint numberOfPointsRP[2] = {10,10}; static gdouble stepValueRP[2] = {0.1,0.1}; static gchar typeRP[2][100] = {"Bond","Nothing"}; static gint atomRP[2] = {1,0}; static GtkWidget* entryFileName = NULL; /*********************************************************************************/ static void addMopacOptions(GtkWidget *box, gchar* type); static void addOrcaOptions(GtkWidget *box, gchar* type); static void addMopacSparkleOptions(GtkWidget *box, gchar* type); static void addOpenBabelOptions(GtkWidget *box, gchar* type); static gboolean runOneGeneric(MoleculeSE* mol, char* fileNamePrefix, char* keyWords, char* genericCommand); /*********************************************************************************/ static void getMultiplicityName(gint multiplicity, gchar* buffer) { if(multiplicity==1) sprintf(buffer,"Singlet"); else if(multiplicity==2) sprintf(buffer,"Doublet"); else if(multiplicity==3) sprintf(buffer,"Triplet"); else if(multiplicity==4) sprintf(buffer,"Quartet"); else if(multiplicity==5) sprintf(buffer,"Quintet"); else if(multiplicity==6) sprintf(buffer,"Sextet"); else sprintf(buffer,"UNKNOWN"); } /*****************************************************************************/ static gboolean getEnergyMopac(gchar* fileNameOut, gdouble* energy) { FILE* file = NULL; gchar buffer[1024]; gchar* pdest = NULL; file = FOpen(fileNameOut, "rb"); if(!file) return FALSE; while(!feof(file)) { if(!fgets(buffer,BSIZE,file))break; pdest = strstr( buffer, " FINAL HEAT OF FORMATION"); if(pdest) { pdest = strstr( buffer, "="); if(pdest) { if(sscanf(pdest+1,"%lf",energy)==1) { fclose(file); return TRUE; } } } } fclose(file); return FALSE; } /*************************************************************************************************************/ static gint getRealNumberXYZVariables() { gint k=0; gint i; for(i=0;iNUMBER_ENTRY_0 && !test(Geom[i].R)) k++; if(Geom[i].Nentry>NUMBER_ENTRY_R && !test(Geom[i].Angle)) k++; if(Geom[i].Nentry>NUMBER_ENTRY_ANGLE && !test(Geom[i].Dihedral)) k++; } return k; } /*************************************************************************************************************/ static gboolean putMopacMoleculeInFile(FILE* file, gboolean RP) { gchar buffer[BSIZE]; gchar b1[20]; gchar b2[20]; gchar b3[20]; gchar con[20]; gint i; gint k1 = 0; gint k2 = 0; gint k3 = 0; gint nvar = 0; gint k; if(MethodeGeom==GEOM_IS_XYZ && NcentersXYZ<1) return FALSE; if(MethodeGeom!=GEOM_IS_XYZ && NcentersZmat<1) return FALSE; if(MethodeGeom==GEOM_IS_XYZ) nvar = getRealNumberXYZVariables(); else nvar = getRealNumberZmatVariables(); if(MethodeGeom==GEOM_IS_XYZ) for (i=0;iNUMBER_ENTRY_ANGLE) { setValueVariableZmat(Geom[i].R, b1, &k1); setValueVariableZmat(Geom[i].Angle, b2, &k2); setValueVariableZmat(Geom[i].Dihedral, b3, &k3); sprintf(con,"%s %s %s", Geom[i].NR, Geom[i].NAngle, Geom[i].NDihedral); if(nvar==0) { k1 = 1; k2 = 1; k3 = 1;} if(RP) { for(k=0;k<2;k++) { if(!strcmp(typeRP[k],"Bond") && i==atomRP[k]-1) k1 = -1; if(!strcmp(typeRP[k],"Angle") && i==atomRP[k]-1) k2 = -1; if(!strcmp(typeRP[k],"Dihedral") && i==atomRP[k]-1) k3 = -1; } } sprintf(buffer,"%s %s %d %s %d %s %d %s\n", Geom[i].Symb, b1, k1, b2, k2, b3, k3, con ); fprintf(file, "%s",buffer); } else if(Geom[i].Nentry>NUMBER_ENTRY_R) { setValueVariableZmat(Geom[i].R, b1, &k1); setValueVariableZmat(Geom[i].Angle, b2, &k2); sprintf(b3,"0.0"); k3 = 0; sprintf(con,"%s %s %s", Geom[i].NR, Geom[i].NAngle, "0"); if(nvar==0) { k1 = 1; k2 = 1;} if(RP) { for(k=0;k<2;k++) { if(!strcmp(typeRP[k],"Bond") && i==atomRP[k]-1) k1 = -1; if(!strcmp(typeRP[k],"Angle") && i==atomRP[k]-1) k2 = -1; } } sprintf(buffer,"%s %s %d %s %d %s %d %s\n", Geom[i].Symb, b1, k1, b2, k2, b3, k3, con ); fprintf(file, "%s",buffer); } else if(Geom[i].Nentry>NUMBER_ENTRY_0) { setValueVariableZmat(Geom[i].R, b1, &k1); sprintf(b2,"0.0"); k2 = 0; sprintf(b3,"0.0"); k3 = 0; sprintf(con,"%s %s %s", Geom[i].NR, "0", "0"); if(nvar==0) { k1 = 1;} if(RP) for(k=0;k<2;k++) if(!strcmp(typeRP[k],"Bond") && i==atomRP[k]-1) k1 = -1; sprintf(buffer,"%s %s %d %s %d %s %d %s\n", Geom[i].Symb, b1, k1, b2, k2, b3, k3, con ); fprintf(file, "%s",buffer); } else { sprintf(b1,"0.0"); k1 = 0; sprintf(b2,"0.0"); k2 = 0; sprintf(b3,"0.0"); k3 = 0; sprintf(con,"%s %s %s", "0.0", "0", "0"); sprintf(buffer,"%s %s %d %s %d %s %d %s\n", Geom[i].Symb, b1, k1, b2, k2, b3, k3, con ); fprintf(file, "%s",buffer); } } } return TRUE; } /*****************************************************************************/ static gboolean runOneMopac(gchar* fileNamePrefix, gchar* keyWords) { FILE* file = NULL; FILE* fileSH = NULL; gint j; gchar* fileNameIn = NULL; gchar* fileNameOut = NULL; gchar* fileNameSH = NULL; gchar multiplicityStr[100]; gchar buffer[1024]; gdouble energy = 0; #ifdef G_OS_WIN32 gchar c='%'; #endif if(!geometry0) return FALSE; #ifndef G_OS_WIN32 fileNameSH = g_strdup_printf("%sMopacOne.sh",fileNamePrefix); #else fileNameSH = g_strdup_printf("%sMopacOne.bat",fileNamePrefix); #endif fileSH = FOpen(fileNameSH, "w"); if(!fileSH) return FALSE; #ifdef G_OS_WIN32 fprintf(fileSH,"@echo off\n"); fprintf(fileSH,"set PATH=%cPATH%c;\"%s\"\n",c,c,mopacDirectory); #endif getMultiplicityName(spinMultiplicity, multiplicityStr); fileNameIn = g_strdup_printf("%sOne.mop",fileNamePrefix); file = FOpen(fileNameIn, "w"); if(!file) { if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return FALSE; } fprintf(file,"* ===============================\n"); fprintf(file,"* Input file for Mopac\n"); fprintf(file,"* ===============================\n"); if(spinMultiplicity>1) fprintf(file,"%s UHF CHARGE=%d %s\n",keyWords,totalCharge,multiplicityStr); else fprintf(file,"%s CHARGE=%d %s\n",keyWords,totalCharge,multiplicityStr); fprintf(file,"\n"); fprintf(file,"Mopac file generated by Gabedit\n"); if(!putMopacMoleculeInFile(file, NULL!=strstr(keyWords,"POINT"))) for(j=0;j<(gint)Natoms;j++) { fprintf(file," %s %f %d %f %d %f %d\n", geometry0[j].Prop.symbol, geometry0[j].X*BOHR_TO_ANG, geometry0[j].Variable, geometry0[j].Y*BOHR_TO_ANG, geometry0[j].Variable, geometry0[j].Z*BOHR_TO_ANG, geometry0[j].Variable ); } fclose(file); { gchar* str = NULL; if(strstr(keyWords,"XYZ") && strstr(keyWords,"PM7")) str = g_strdup_printf("Minimization by PM7/Mopac ... Please wait"); else if(strstr(keyWords,"XYZ") && strstr(keyWords,"PM6-DH2")) str = g_strdup_printf("Minimization by PM6-DH2/Mopac ... Please wait"); else if(strstr(keyWords,"XYZ") && strstr(keyWords,"PM6-DH+")) str = g_strdup_printf("Minimization by PM6-DH+/Mopac ... Please wait"); else if(strstr(keyWords,"SPARKLE") && strstr(keyWords,"PM6")) str = g_strdup_printf("Minimization by Sparkle/PM6/Mopac ... Please wait"); else if(strstr(keyWords,"SPARKLE") && strstr(keyWords,"AM1")) str = g_strdup_printf("Minimization by Sparkle/AM1/Mopac ... Please wait"); else if(strstr(keyWords,"SPARKLE") && strstr(keyWords,"PM3")) str = g_strdup_printf("Minimization by Sparkle/PM3/Mopac ... Please wait"); else if(strstr(keyWords,"XYZ") && strstr(keyWords,"PM6")) str = g_strdup_printf("Minimization by PM6/Mopac ... Please wait"); else if(strstr(keyWords,"XYZ") && strstr(keyWords,"AM1")) str = g_strdup_printf("Minimization by AM1/Mopac ... Please wait"); else if(strstr(keyWords,"ESP") && strstr(keyWords,"PM6-DH2")) str = g_strdup_printf("ESP charges from PM6-DH2/Mopac ... Please wait"); else if(strstr(keyWords,"ESP") && strstr(keyWords,"PM6-DH+")) str = g_strdup_printf("ESP charges from PM6-DH+/Mopac ... Please wait"); else if(strstr(keyWords,"ESP") && strstr(keyWords,"PM6")) str = g_strdup_printf("ESP charges from PM6/Mopac ... Please wait"); else if(strstr(keyWords,"ESP") && strstr(keyWords,"AM1")) str = g_strdup_printf("ESP charges from AM1/Mopac ... Please wait"); else if(strstr(keyWords,"ESP") && strstr(keyWords,"PM7")) str = g_strdup_printf("ESP charges from PM7/Mopac ... Please wait"); else if(strstr(keyWords,"POINT")) str = g_strdup_printf("Reaction path by Mopac ... Please wait"); else if(strstr(keyWords,"PM6-DH2")) str = g_strdup_printf("Computing of energy by PM6-DH2/Mopac .... Please wait"); else if(strstr(keyWords,"PM6-DH+")) str = g_strdup_printf("Computing of energy by PM6-DH+/Mopac .... Please wait"); else if(strstr(keyWords,"PM6")) str = g_strdup_printf("Computing of energy by PM6/Mopac .... Please wait"); else if(strstr(keyWords,"PM7")) str = g_strdup_printf("Computing of energy by PM7/Mopac .... Please wait"); else str = g_strdup_printf("Computing of energy by AM1/Mopac .... Please wait"); set_text_to_draw(str); if(str) g_free(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); } #ifndef G_OS_WIN32 fprintf(fileSH,"%s %s\n",NameCommandMopac,fileNameIn); fclose(fileSH); sprintf(buffer,"chmod u+x %s",fileNameSH); {int ierr= system(buffer);} {int ierr = system(fileNameSH);} #else fprintf(fileSH,"\"%s\" \"%s\"\n",NameCommandMopac,fileNameIn); fclose(fileSH); sprintf(buffer,"\"%s\"",fileNameSH); {int ierr= system(buffer);} #endif fileNameOut = g_strdup_printf("%sOne.out",fileNamePrefix); if(strstr(keyWords,"POINT")==NULL) { if(getEnergyMopac(fileNameOut,&energy)) { gchar* str = NULL; read_geom_from_mopac_output_file(fileNameOut, -1); str = g_strdup_printf("Energy by Mopac = %f", energy); set_text_to_draw(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); Waiting(1); if(str) g_free(str); } else { gchar* str = NULL; str = g_strdup_printf( _( "Sorry, I cannot read the output file : %s " " ; Check also the installation of Mopac..." ), fileNameOut ); set_text_to_draw(str); if(str) g_free(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return FALSE; } } if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return TRUE; } /*****************************************************************************/ static gboolean getEnergyFireFly(gchar* fileNameOut, gdouble* energy) { FILE* file = NULL; gchar buffer[1024]; gchar* pdest = NULL; gboolean OK = FALSE; file = FOpen(fileNameOut, "rb"); if(!file) return FALSE; while(!feof(file)) { if(!fgets(buffer,BSIZE,file))break; pdest = strstr( buffer, "HEAT OF FORMATION IS"); if(pdest) { pdest = strstr( buffer, "S"); if(pdest) { if(sscanf(pdest+1,"%lf",energy)==1) OK = TRUE; } } } fclose(file); return OK; } /*************************************************************************************************************/ static void putFireFlyMoleculeXYZFixed(FILE* file) { gint i,k,l; gint nvar = 0; if(Natoms<2)return; nvar = 0; for(i=0;i nul\n"); fprintf(fileSH,"del /Q \"%stmp\"\n",fileNamePrefix); fprintf(fileSH,"rmdir \"%stmp\"\n",fileNamePrefix); } else fprintf(fileSH,"%s %s",NameCommandFireFly,fileNameIn); #endif fclose(fileSH); { gchar* str = NULL; if(strstr(keyWords,"Optimiz")) str = g_strdup_printf("Minimization by AM1/FireFly ... Please wait"); else str = g_strdup_printf("Computing of energy by AM1/FireFly .... Please wait"); set_text_to_draw(str); if(str) g_free(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); } #ifndef G_OS_WIN32 sprintf(buffer,"chmod u+x %s",fileNameSH); {int ierr= system(buffer);} {int ierr = system(fileNameSH);} #else sprintf(buffer,"\"%s\"",fileNameSH); {int ierr= system(buffer);} #endif if(getEnergyFireFly(fileNameOut,&energy)) { gchar* str = NULL; str = g_strdup_printf("Energy by FireFly = %f", energy); set_text_to_draw(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); Waiting(1); if(str) g_free(str); } else { gchar* str = NULL; str = g_strdup_printf( _( "Sorry, I cannot read the output file : %s" " ; Check also the installation of FireFly...") , fileNameOut ); set_text_to_draw(str); if(str) g_free(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return FALSE; } if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return TRUE; } /*****************************************************************************/ static gboolean getEnergyOpenBabel(gchar* fileNameOut, gdouble* energy) { FILE* file = NULL; char buffer[1024]; char* pdest = NULL; char* energyTag = "FINAL ENERGY:"; file = fopen(fileNameOut, "r"); if(!file) return FALSE; while(!feof(file)) { if(!fgets(buffer,BSIZE,file))break; pdest = strstr( buffer, energyTag); if(pdest &&sscanf(pdest+strlen(energyTag)+1,"%lf",energy)==1) { fclose(file); if(strstr(pdest,"kJ")) *energy /= KCALTOKJ; return TRUE; } } fclose(file); return FALSE; } /*****************************************************************************/ static gboolean saveGeometry(MoleculeSE* molecule, double energy, char* fileNameGeom) { gboolean Ok = FALSE; double oldEnergy = molecule->energy; molecule->energy = energy; Ok = saveMoleculeSE(molecule,fileNameGeom); molecule->energy = oldEnergy; return Ok; } /*************************************************************************************************************/ static gboolean runOneOpenBabel(MoleculeSE* mol, gchar* fileNamePrefix, gchar* NameCommandOpenBabel) { FILE* fileSH = NULL; char* fileNameIn = NULL; char* fileNameOut = NULL; char* fileNameSH = NULL; char buffer[1024]; double energy; MoleculeSE molecule; gboolean newMolSE = FALSE; #ifdef G_OS_WIN32 char c='%'; #endif if(!mol) { molecule = createMoleculeSE(geometry0,(gint)Natoms, totalCharge, spinMultiplicity, TRUE); mol = &molecule; newMolSE = TRUE; } /* else { gint j; for(j=0;jnAtoms;j++) { gchar* symbol = mol->atoms[j].prop.symbol; SAtomsProp prop = prop_atom_get(symbol); fprintf(stderr,"%s %s %s %f %f %f %f\n", symbol, mol->atoms[j].pdbType, mol->atoms[j].mmType, (gdouble)prop.atomicNumber, mol->atoms[j].coordinates[0], mol->atoms[j].coordinates[1], mol->atoms[j].coordinates[2] ); } } */ if(mol->nAtoms<1) return FALSE; #ifndef G_OS_WIN32 fileNameSH =g_strdup_printf("%sOne.sh",fileNamePrefix); #else fileNameSH =g_strdup_printf("%sOne.bat",fileNamePrefix); #endif fileSH = fopen(fileNameSH, "w"); if(!fileSH) return FALSE; #ifdef G_OS_WIN32 fprintf(fileSH,"@echo off\n"); #endif fileNameIn =g_strdup_printf("%sOne.hin",fileNamePrefix); fileNameOut =g_strdup_printf("%sOne.out",fileNamePrefix); if(!saveMoleculeSEHIN(mol, fileNameIn)) { if(fileNameIn) free(fileNameIn); if(fileNameOut) free(fileNameOut); if(fileNameSH) free(fileNameSH); if(mol && newMolSE) freeMoleculeSE(mol); return FALSE; } #ifndef G_OS_WIN32 fprintf(fileSH,"#!/bin/bash\n"); fprintf(fileSH,"export PATH=$PATH:%s\n",openbabelDirectory); fprintf(fileSH,"export BABEL_DATADIR=%s\n",openbabelDirectory); if(!strstr(NameCommandOpenBabel,"obgradient") || !strstr(NameCommandOpenBabel,"obopt")) { fprintf(fileSH,"%s %s > %s\n",NameCommandOpenBabel,fileNameIn,fileNameOut); fprintf(fileSH,"exit\n"); } else { if(!strstr( NameCommandOpenBabel,"obopt")) { char** ssplit = NULL; int nA = 0; int i; ssplit = gab_split(NameCommandOpenBabel); while(ssplit && ssplit[nA]!=NULL) nA++; fprintf(fileSH,"%s ", "obopt"); for(i=1;i %s 2>/dev/null", fileNameIn, fileNameOut); gab_strfreev(ssplit); } else fprintf(fileSH,"%s %s > %s 2>/dev/null", NameCommandOpenBabel, fileNameIn, fileNameOut); } #else if(strstr(openbabelDirectory,"\"")) { fprintf(fileSH,"set PATH=%s;%cPATH%c\n",openbabelDirectory,'%','%'); fprintf(fileSH,"set BABEL_DATADIR=%s\n",openbabelDirectory); } else { fprintf(fileSH,"set PATH=\"%s\";%cPATH%c\n",openbabelDirectory,'%','%'); fprintf(fileSH,"set BABEL_DATADIR=%s\n",openbabelDirectory); } if(!strstr(NameCommandOpenBabel,"obgradient") || !strstr(NameCommandOpenBabel,"obopt")) { fprintf(fileSH,"%s %s > %s\n",NameCommandOpenBabel,fileNameIn,fileNameOut); fprintf(fileSH,"exit\n"); } else { if(!strstr( NameCommandOpenBabel,"obopt")) { char** ssplit = NULL; int nA = 0; int i; ssplit = gab_split(NameCommandOpenBabel); while(ssplit && ssplit[nA]!=NULL) nA++; fprintf(fileSH,"%s ", "obopt"); for(i=1;i %s 2>/dev/null", fileNameIn, fileNameOut); gab_strfreev(ssplit); } else fprintf(fileSH,"%s %s > %s", NameCommandOpenBabel, fileNameIn, fileNameOut); } #endif fclose(fileSH); #ifndef G_OS_WIN32 /* sprintf(buffer,"cat %s",fileNameSH); system(buffer); sprintf(buffer,"cat %s",fileNameIn); system(buffer); */ sprintf(buffer,"chmod u+x %s",fileNameSH); system(buffer); system(fileNameSH); #else sprintf(buffer,"\"%s\"",fileNameSH); system(buffer); #endif if(getEnergyOpenBabel(fileNameOut,&energy)) { printf("Energy by OpenBabel = %f\n", energy); readGeomMoleculeSEFromOpenBabelOutputFile(mol, fileNameOut, -1); mol->energy = energy; if(strstr( NameCommandOpenBabel,"obopt")) { char* str =g_strdup_printf("%s.gab",fileNamePrefix); saveGeometry(mol, energy, str); read_geom_from_gabedit_geom_conv_file(str, 1); if(str) free(str); /* str = g_strdup_printf("Energy by OpenBabel = %f", energy);*/ str = g_strdup_printf("Gradient = %f Energy by OpenBabel = %f",getGradientNormMoleculeSE(mol), energy); set_text_to_draw(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); Waiting(1); /* printf("----------------------------------------- \n"); printf("Optimized geometry saved in %s file\n",str); printf("----------------------------------------- \n"); */ if(str) free(str); } else { gchar* str = NULL; str = g_strdup_printf("Energy by OpenBabel = %f", energy); set_text_to_draw(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); Waiting(1); if(str) g_free(str); /* char* str =g_strdup_printf("%s.gab",fileNamePrefix); saveGeometry(mol, energy, str); printf("----------------------------------------- \n"); printf("Geometry saved in %s file\n",str); printf("----------------------------------------- \n"); if(str) free(str); */ } } else { gchar* str = NULL; str = g_strdup_printf( _( "Sorry, I cannot read the output file : %s" " ; Check also the installation of OpenBabel...") , fileNameOut ); set_text_to_draw(str); if(str) g_free(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); return FALSE; } if(fileNameIn) free(fileNameIn); if(fileNameOut) free(fileNameOut); if(fileNameSH) free(fileNameSH); if(mol && newMolSE) freeMoleculeSE(mol); return TRUE; } /*****************************************************************************/ static gboolean getEnergyOrca(gchar* fileNameOut, gdouble* energy) { FILE* file = NULL; gchar buffer[1024]; gchar* pdest = NULL; gchar* energyTag = "FINAL SINGLE POINT ENERGY"; file = FOpen(fileNameOut, "rb"); if(!file) return FALSE; while(!feof(file)) { if(!fgets(buffer,BSIZE,file))break; pdest = strstr( buffer, energyTag); if(pdest &&sscanf(pdest+strlen(energyTag)+1,"%lf",energy)==1) { fclose(file); *energy *=627.50944796; return TRUE; } } fclose(file); return FALSE; } /*****************************************************************************/ static gboolean runOneOrca(gchar* fileNamePrefix, gchar* keyWords) { FILE* file = NULL; FILE* fileSH = NULL; gchar* fileNameIn = NULL; gchar* fileNameOut = NULL; gchar* fileNameSH = NULL; gchar multiplicityStr[100]; gchar buffer[1024]; gdouble energy = 0; gint i; gint nV; if(!geometry0) return FALSE; #ifndef G_OS_WIN32 fileNameSH = g_strdup_printf("%sOne.sh",fileNamePrefix); #else fileNameSH = g_strdup_printf("%sOne.bat",fileNamePrefix); #endif fileSH = FOpen(fileNameSH, "w"); if(!fileSH) return FALSE; #ifdef G_OS_WIN32 fprintf(fileSH,"@echo off\n"); #endif getMultiplicityName(spinMultiplicity, multiplicityStr); fileNameIn = g_strdup_printf("%sOne.inp",fileNamePrefix); file = FOpen(fileNameIn, "w"); if(!file) { if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return FALSE; } fprintf(file,"# ======================================================\n"); fprintf(file,"# Orca input file made in Gabedit\n"); fprintf(file,"# ======================================================\n"); fprintf(file,"! %s\n",keyWords); if(MethodeGeom==GEOM_IS_XYZ) { fprintf(file,"* xyz %d %d\n",totalCharge,spinMultiplicity); for (i=0;i0) for(i=0;i0) fprintf(file," end #params\n"); */ if(nV>0) { fprintf(file,"%cgeom Constraints\n",'%'); for (i=0;iNUMBER_ENTRY_ANGLE) { gchar R[100]; gchar A[100]; gchar D[100]; sprintf(R,"%s",Geom[i].R); /* if(!test(Geom[i].R)) sprintf(R,"{%s}",Geom[i].R);*/ if(!test(Geom[i].R)) sprintf(R," %lf ",get_value_variableZmat(Geom[i].R)); sprintf(A,"%s",Geom[i].Angle); /* if(!test(Geom[i].Angle)) sprintf(A,"{%s}",Geom[i].Angle);*/ if(!test(Geom[i].Angle)) sprintf(A," %lf ",get_value_variableZmat(Geom[i].Angle)); sprintf(D,"%s",Geom[i].Dihedral); /* if(!test(Geom[i].Dihedral)) sprintf(D,"{%s}",Geom[i].Dihedral);*/ if(!test(Geom[i].Dihedral)) sprintf(D," %lf ",get_value_variableZmat(Geom[i].Dihedral)); fprintf(file," %s %s %s %s %s %s %s\n", Geom[i].Symb, Geom[i].NR, Geom[i].NAngle, Geom[i].NDihedral, R,A,D); } else if(Geom[i].Nentry>NUMBER_ENTRY_R) { gchar R[100]; gchar A[100]; sprintf(R,"%s",Geom[i].R); /* if(!test(Geom[i].R)) sprintf(R,"{%s}",Geom[i].R);*/ if(!test(Geom[i].R)) sprintf(R," %lf ",get_value_variableZmat(Geom[i].R)); sprintf(A,"%s",Geom[i].Angle); /* if(!test(Geom[i].Angle)) sprintf(A,"{%s}",Geom[i].Angle);*/ if(!test(Geom[i].Angle)) sprintf(A," %lf ",get_value_variableZmat(Geom[i].Angle)); /* fprintf(file," %s %s %s %s %s\n", Geom[i].Symb, Geom[i].NR,R, Geom[i].NAngle,A ); */ fprintf(file," %s %s %s %s %s %s %s\n", Geom[i].Symb, Geom[i].NR, Geom[i].NAngle, "0", R,A,"0.0"); } else if(Geom[i].Nentry>NUMBER_ENTRY_0) { gchar R[100]; sprintf(R,"%s",Geom[i].R); if(!test(Geom[i].R)) sprintf(R," %lf ",get_value_variableZmat(Geom[i].R)); /* if(!test(Geom[i].R)) sprintf(R,"{%s}",Geom[i].R);*/ /* fprintf(file," %s %s %s\n", Geom[i].Symb, Geom[i].NR,R);*/ fprintf(file," %s %s %s %s %s %s %s\n", Geom[i].Symb, Geom[i].NR, "0", "0", R,"0.0","0.0"); } else { //fprintf(file," %s \n", Geom[i].Symb); fprintf(file," %s %s %s %s %s %s %s\n", Geom[i].Symb, "0", "0", "0", "0.0","0.0","0.0"); } } fprintf(file,"*\n"); nV = 0; if(NVariables>0) for(i=0;i0) fprintf(file," end #params\n"); */ if(nV>0) { fprintf(file,"%cgeom Constraints\n",'%'); for (i=0;i=NUMBER_ENTRY_R && !test(Geom[i].R)) { fprintf(file," {B %d %d C}\n",atoi(Geom[i].NR)-1,i); } if(Geom[i].Nentry>=NUMBER_ENTRY_ANGLE && !test(Geom[i].Angle)) { fprintf(file," {A %d %d %d C}\n", atoi(Geom[i].NAngle)-1, atoi(Geom[i].NR)-1,i); } if(Geom[i].Nentry>NUMBER_ENTRY_ANGLE && !test(Geom[i].Dihedral)) { fprintf(file," {D %d %d %d %d C}\n", atoi(Geom[i].NDihedral)-1, atoi(Geom[i].NAngle)-1, atoi(Geom[i].NR)-1,i); } } fprintf(file," end #Constraints\n"); fprintf(file," invertConstraints true\n"); fprintf(file," end #geom\n"); } } fclose(file); fileNameOut = g_strdup_printf("%sOne.out",fileNamePrefix); #ifndef G_OS_WIN32 if(!strcmp(NameCommandOrca,"orca") || !strcmp(NameCommandOrca,"nohup orca")) { fprintf(fileSH,"%s %s > %s\n",NameCommandOrca,fileNameIn,fileNameOut); fprintf(fileSH,"exit\n"); } else fprintf(fileSH,"%s %s",NameCommandOrca,fileNameIn); #else if(!strcmp(NameCommandOrca,"orca") ) { if(strstr(orcaDirectory,"\"")) fprintf(fileSH,"set PATH=%s;%cPATH%c\n",orcaDirectory,'%','%'); else fprintf(fileSH,"set PATH=\"%s\";%cPATH%c\n",orcaDirectory,'%','%'); fprintf(fileSH,"%s %s > %s\n",NameCommandOrca,fileNameIn,fileNameOut); fprintf(fileSH,"exit\n"); } else fprintf(fileSH,"%s %s",NameCommandOrca,fileNameIn); #endif fclose(fileSH); { gchar* str = NULL; if(strstr(keyWords,"Opt")) str = g_strdup_printf("Minimization by Orca ... Please wait"); else str = g_strdup_printf("Computing of energy by Orca .... Please wait"); set_text_to_draw(str); if(str) g_free(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); } #ifndef G_OS_WIN32 sprintf(buffer,"chmod u+x %s",fileNameSH); {int ierr= system(buffer);} {int ierr = system(fileNameSH);} #else sprintf(buffer,"\"%s\"",fileNameSH); {int ierr= system(buffer);} #endif if(getEnergyOrca(fileNameOut,&energy)) { gchar* str = NULL; str = g_strdup_printf("Energy by Orca = %f", energy); set_text_to_draw(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); Waiting(1); if(str) g_free(str); } else { gchar* str = NULL; str = g_strdup_printf( _( "Sorry, I cannot read the output file : %s" " ; Check also the installation of Orca..." ), fileNameOut ); set_text_to_draw(str); if(str) g_free(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return FALSE; } if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return TRUE; } /*****************************************************************************/ static void runGeneric(MoleculeSE* mol, char* fileName, char* keys, char* genericCommand) { if(keys && genericCommand) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneGeneric(mol, fileNamePrefix, keys, genericCommand)) { } if(fileNamePrefix) free(fileNamePrefix); } } /*****************************************************************************/ static void runSemiEmpirical(GtkWidget* Win, gpointer data, gchar* type, gchar* keys) { gchar* fileName = NULL; /* fileName */ { gchar* dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileName))); if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR) fileName = g_strdup_printf("%s%s%s",dirName, G_DIR_SEPARATOR_S,tmp); else fileName = g_strdup_printf("%s%s",dirName, tmp); g_free(tmp); g_free(dirName); } gtk_widget_destroy(Win); while( gtk_events_pending() ) gtk_main_iteration(); { gint i; for(i=0;i<4;i++) NumSelAtoms[i] = -1; change_of_center(NULL,NULL); } if(!strcmp(type,"PM6DH2MopacEnergy")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, "PM6-DH2 1SCF")) { } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"PM6DH+MopacEnergy")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, "PM6-DH+ 1SCF")) { } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"PM6MopacEnergy")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, "PM6 1SCF")) { } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"PM7MopacEnergy")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, "PM7 1SCF")) { } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"PM6DH2MopacOptimize")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, "PM6-DH2 XYZ AUX")) { gchar* fileOut = g_strdup_printf("%sOne.aux",fileNamePrefix); find_energy_mopac_aux(fileOut); if(fileOut) g_free(fileOut); } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"PM6DH+MopacOptimize")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, "PM6-DH+ XYZ AUX")) { gchar* fileOut = g_strdup_printf("%sOne.aux",fileNamePrefix); find_energy_mopac_aux(fileOut); if(fileOut) g_free(fileOut); } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"PM6MopacOptimize")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, "PM6 XYZ AUX")) { gchar* fileOut = g_strdup_printf("%sOne.aux",fileNamePrefix); find_energy_mopac_aux(fileOut); if(fileOut) g_free(fileOut); } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"PM7MopacOptimize")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, "PM7 XYZ AUX")) { gchar* fileOut = g_strdup_printf("%sOne.aux",fileNamePrefix); find_energy_mopac_aux(fileOut); if(fileOut) g_free(fileOut); } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"PM6DH2MopacESP")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, "PM6-DH2 1SCF ESP")) { gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix); read_geom_from_mopac_output_file(fileOut, -1); if(fileOut) g_free(fileOut); } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"PM6DH+MopacESP")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, "PM6-DH+ 1SCF ESP")) { gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix); read_geom_from_mopac_output_file(fileOut, -1); if(fileOut) g_free(fileOut); } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"PM6MopacESP")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, "PM6 1SCF ESP")) { gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix); read_geom_from_mopac_output_file(fileOut, -1); if(fileOut) g_free(fileOut); } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"PM7MopacESP")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, "PM7 1SCF ESP")) { gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix); read_geom_from_mopac_output_file(fileOut, -1); if(fileOut) g_free(fileOut); } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"AM1MopacEnergy")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, "AM1 1SCF")) { } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"AM1MopacOptimize")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, "AM1 XYZ AUX")) { gchar* fileOut = g_strdup_printf("%sOne.aux",fileNamePrefix); find_energy_mopac_aux(fileOut); if(fileOut) g_free(fileOut); } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"AM1MopacESP")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, "AM1 1SCF ESP")) { gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix); read_geom_from_mopac_output_file(fileOut, -1); if(fileOut) g_free(fileOut); } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"MopacEnergy") && keys) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, keys)) { } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"MopacOptimize") && keys) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, keys)) { gchar* fileOut = g_strdup_printf("%sOne.aux",fileNamePrefix); find_energy_mopac_aux(fileOut); if(fileOut) g_free(fileOut); } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"MopacOptimizeSparkle") && keys) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, keys)) { gchar* fileOut = g_strdup_printf("%sOne.aux",fileNamePrefix); find_energy_mopac_aux(fileOut); if(fileOut) g_free(fileOut); } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"MopacESP") && keys) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, keys)) { gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix); read_geom_from_mopac_output_file(fileOut, -1); if(fileOut) g_free(fileOut); } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"MopacScan") && keys) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneMopac(fileNamePrefix, keys)) { gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix); find_energy_mopac_scan_output(fileOut); if(fileOut) g_free(fileOut); } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"OrcaEnergy") && keys) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneOrca(fileNamePrefix, keys)) { } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"OrcaOptimize") && keys) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneOrca(fileNamePrefix, keys)) { gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix); find_energy_orca_output(fileOut); if(fileOut) g_free(fileOut); } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"AM1FireFlyEnergy")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneFireFly(fileNamePrefix, "RUNTYP=Energy GBASIS=AM1")) { } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"AM1FireFlyOptimize")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneFireFly(fileNamePrefix, "RUNTYP=Optimize GBASIS=AM1")) { gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix); find_energy_gamess_output_heat(fileOut); if(fileOut) g_free(fileOut); } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"OpenBabelEnergy")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); printf("Keys = %s\n",keys); if(runOneOpenBabel(NULL,fileNamePrefix,keys)) { } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"OpenBabelOptimize")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); if(runOneOpenBabel(NULL,fileNamePrefix, keys)) { gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix); find_energy_gamess_output_heat(fileOut); if(fileOut) g_free(fileOut); } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"GenericEnergy")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); printf("Keys = %s\n",keys); if(runOneGeneric(NULL,fileNamePrefix,"Energy",keys)) { } if(fileNamePrefix) g_free(fileNamePrefix); } else if(!strcmp(type,"GenericOptimize")) { gchar* fileNamePrefix = get_suffix_name_file(fileName); printf("Keys = %s\n",keys); if(runOneGeneric(NULL,fileNamePrefix, "Opt",keys)) { gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix); find_energy_gamess_output_heat(fileOut); if(fileOut) g_free(fileOut); } if(fileNamePrefix) g_free(fileNamePrefix); } } /*****************************************************************************/ static void runAM1FireFlyEnergy(GtkWidget* Win, gpointer data) { totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "AM1FireFlyEnergy",NULL); } /*****************************************************************************/ static void runAM1FireFlyOptimize(GtkWidget* Win, gpointer data) { totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "AM1FireFlyOptimize",NULL); } /*****************************************************************************/ static void runOpenBabelEnergy(GtkWidget* Win, gpointer data) { G_CONST_RETURN gchar* potential = gtk_entry_get_text(GTK_ENTRY(entryOpenBabelPotential)); G_CONST_RETURN gchar* options = gtk_entry_get_text(GTK_ENTRY(entryAddOpenBabelKeywords)); gchar* keys = NULL; /* totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; */ TotalCharges[0] = 0; SpinMultiplicities[0] = 1; if(potential && (options && strlen(options) >1) ) keys = g_strdup_printf("obgradient -ff %s %s",potential, options); else if(potential) keys = g_strdup_printf("obgradient -ff %s",potential); else keys = g_strdup_printf("obgradient -ff MMFF94"); runSemiEmpirical(Win, data, "OpenBabelEnergy",keys); if(keys) g_free(keys); } /*****************************************************************************/ static void runOpenBabelOptimize(GtkWidget* Win, gpointer data) { G_CONST_RETURN gchar* potential = gtk_entry_get_text(GTK_ENTRY(entryOpenBabelPotential)); G_CONST_RETURN gchar* options = gtk_entry_get_text(GTK_ENTRY(entryAddOpenBabelKeywords)); gchar* keys = NULL; /* totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; */ TotalCharges[0] = 0; SpinMultiplicities[0] = 1; if(potential && (options && strlen(options) >1) ) keys = g_strdup_printf("obopt -ff %s %s",potential, options); else if(potential) keys = g_strdup_printf("obopt -ff %s",potential); else keys = g_strdup_printf("obopt -ff MMFF94"); runSemiEmpirical(Win, data, "OpenBabelOptimize",keys); if(keys) g_free(keys); } /*****************************************************************************/ static void runGenericEnergy(GtkWidget* Win, gpointer data) { G_CONST_RETURN gchar* potential = gtk_entry_get_text(GTK_ENTRY(entryGenericPotential)); gchar* keys = NULL; /* totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; */ TotalCharges[0] = 0; SpinMultiplicities[0] = 1; if(potential) keys = g_strdup_printf("%s",potential); else keys = g_strdup_printf("generic"); if(genericProgName) g_free(genericProgName); genericProgName = g_strdup(keys); runSemiEmpirical(Win, data, "GenericEnergy",keys); if(keys) g_free(keys); } /*****************************************************************************/ static void runGenericOptimize(GtkWidget* Win, gpointer data) { G_CONST_RETURN gchar* potential = gtk_entry_get_text(GTK_ENTRY(entryGenericPotential)); gchar* keys = NULL; /* totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; */ TotalCharges[0] = 0; SpinMultiplicities[0] = 1; if(potential) keys = g_strdup_printf("%s",potential); else keys = g_strdup_printf("generic"); runSemiEmpirical(Win, data, "GenericOptimize",keys); if(keys) g_free(keys); } /*****************************************************************************/ static void runPM6DH2MopacEnergy(GtkWidget* Win, gpointer data) { totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "PM6DH2MopacEnergy",NULL); } /*****************************************************************************/ static void runPM6DH2MopacOptimize(GtkWidget* Win, gpointer data) { totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "PM6DH2MopacOptimize",NULL); } /*****************************************************************************/ static void runPM6DH2MopacESP(GtkWidget* Win, gpointer data) { totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "PM6DH2MopacESP",NULL); } /*****************************************************************************/ static void runPM6DHpMopacEnergy(GtkWidget* Win, gpointer data) { totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "PM6DH+MopacEnergy",NULL); } /*****************************************************************************/ static void runPM6DHpMopacOptimize(GtkWidget* Win, gpointer data) { totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "PM6DH+MopacOptimize",NULL); } /*****************************************************************************/ static void runPM6DHpMopacESP(GtkWidget* Win, gpointer data) { totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "PM6DH+MopacESP",NULL); } /*****************************************************************************/ static void runPM6MopacEnergy(GtkWidget* Win, gpointer data) { totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "PM6MopacEnergy",NULL); } /*****************************************************************************/ static void runPM6MopacOptimize(GtkWidget* Win, gpointer data) { totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "PM6MopacOptimize",NULL); } /*****************************************************************************/ static void runPM6MopacESP(GtkWidget* Win, gpointer data) { totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "PM6MopacESP",NULL); } /*****************************************************************************/ static void runPM7MopacEnergy(GtkWidget* Win, gpointer data) { totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "PM7MopacEnergy",NULL); } /*****************************************************************************/ static void runPM7MopacOptimize(GtkWidget* Win, gpointer data) { totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "PM7MopacOptimize",NULL); } /*****************************************************************************/ static void runPM7MopacESP(GtkWidget* Win, gpointer data) { totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "PM7MopacESP",NULL); } /*****************************************************************************/ static void runAM1MopacEnergy(GtkWidget* Win, gpointer data) { totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "AM1MopacEnergy",NULL); } /*****************************************************************************/ static void runAM1MopacOptimize(GtkWidget* Win, gpointer data) { totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "AM1MopacOptimize",NULL); } /*****************************************************************************/ static void runAM1MopacESP(GtkWidget* Win, gpointer data) { totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "AM1MopacESP",NULL); } /*****************************************************************************/ static gboolean getEnergyGeneric(char* fileNameOut, double* energy) { FILE* file = NULL; char buffer[1024]; int i; file = fopen(fileNameOut, "r"); if(!file) return FALSE; if(!fgets(buffer,BSIZE,file)) { fclose(file); return FALSE;}/* first line for energy in Hartree*/ for(i=0;inAtoms<1) return FALSE; #ifndef OS_WIN32 fileNameSH = g_strdup_printf("%sGenericOne.sh",fileNamePrefix); #else fileNameSH = g_strdup_printf("%sGenericOne.bat",fileNamePrefix); #endif fileSH = fopen(fileNameSH, "w"); if(!fileSH) return FALSE; #ifdef OS_WIN32 fprintf(fileSH,"@echo off\n"); #endif fileNameIn = g_strdup_printf("%sOne.inp",fileNamePrefix); fileNameOut = g_strdup_printf("%sOne.out",fileNamePrefix); file = fopen(fileNameIn, "w"); if(!file) { if(fileNameIn) free(fileNameIn); if(fileNameOut) free(fileNameOut); if(fileNameSH) free(fileNameSH); return FALSE; } if(strstr(keyWords,"Opt")) type = 2; if(strstr(keyWords,"ENGRAD")) type = 1; fprintf(file,"%d\n",type); addMoleculeSEToFile(mol,file); fclose(file); { char* str = NULL; if(type==2) str = g_strdup_printf("Minimization by Generic/%s ... Please wait",genericCommand); else str = g_strdup_printf("Energy by Generic/%s ... Please wait",genericCommand); /* printf("%s\n",str);*/ set_text_to_draw(str); if(str) g_free(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); } #ifndef OS_WIN32 fprintf(fileSH,"%s %s %s",genericCommand,fileNameIn,fileNameOut); fclose(fileSH); sprintf(buffer,"chmod u+x %s",fileNameSH); system(buffer); system(fileNameSH); #else fprintf(fileSH,"\"%s\" \"%s\" \"%s\"",genericCommand,fileNameIn,fileNameOut); fclose(fileSH); sprintf(buffer,"\"%s\"",fileNameSH); system(buffer); #endif if(getEnergyGeneric(fileNameOut,&energy)) { gchar* str = NULL; str = g_strdup_printf("Energy by %s = %f", genericCommand,energy); /* printf("%s\n",str);*/ set_text_to_draw(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); if(str) g_free(str); if(strstr(keyWords,"Opt")) { gchar* str = g_strdup_printf("%s.gab",fileNamePrefix); readGeometryFromGenericOutputFile(mol,fileNameOut); saveGeometry(mol, energy, str); read_geom_from_gabedit_geom_conv_file(str, 1); if(str) g_free(str); /* str = g_strdup_printf("Energy by OpenBabel = %f", energy);*/ str = g_strdup_printf("Energy by %s = %f", genericCommand,energy); set_text_to_draw(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); Waiting(1); } } else { gchar* str = NULL; str = g_strdup_printf( ( "Sorry, I cannot read the output file : %s " " ; Check also the installation of Generic..." ), fileNameOut ); /* printf(str);*/ set_text_to_draw(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); if(str) g_free(str); if(fileNameIn) free(fileNameIn); if(fileNameOut) free(fileNameOut); if(fileNameSH) free(fileNameSH); if(mol && newMolSE) freeMoleculeSE(mol); return FALSE; } if(fileNameIn) free(fileNameIn); if(fileNameOut) free(fileNameOut); if(fileNameSH) free(fileNameSH); if(mol && newMolSE) freeMoleculeSE(mol); return TRUE; } /*****************************************************************************/ static void runMopacEnergy(GtkWidget* Win, gpointer data) { G_CONST_RETURN gchar* model = gtk_entry_get_text(GTK_ENTRY(entryMopacHamiltonian)); G_CONST_RETURN gchar* addKeys = gtk_entry_get_text(GTK_ENTRY(entryAddMopacKeywords)); gchar* keys = g_strdup_printf("%s 1SCF %s",model,addKeys); /* printf("addKeys = %s\n",addKeys);*/ totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "MopacEnergy", keys); if(keys) g_free(keys); } /*****************************************************************************/ static void runMopacOptimize(GtkWidget* Win, gpointer data) { G_CONST_RETURN gchar* model = gtk_entry_get_text(GTK_ENTRY(entryMopacHamiltonian)); G_CONST_RETURN gchar* addKeys = gtk_entry_get_text(GTK_ENTRY(entryAddMopacKeywords)); gchar* keys = g_strdup_printf("%s XYZ AUX %s",model,addKeys); /* printf("addKeys = %s\n",addKeys);*/ totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "MopacOptimize",keys); if(keys) g_free(keys); } /*****************************************************************************/ static void runMopacOptimizeSparkle(GtkWidget* Win, gpointer data) { G_CONST_RETURN gchar* model = gtk_entry_get_text(GTK_ENTRY(entryMopacHamiltonianSparkle)); G_CONST_RETURN gchar* addKeys = gtk_entry_get_text(GTK_ENTRY(entryAddMopacKeywords)); gchar* keys = g_strdup_printf("%s SPARKLE XYZ AUX %s",model,addKeys); totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "MopacOptimizeSparkle",keys); if(keys) g_free(keys); } /*****************************************************************************/ static void runMopacESP(GtkWidget* Win, gpointer data) { G_CONST_RETURN gchar* model = gtk_entry_get_text(GTK_ENTRY(entryMopacHamiltonian)); G_CONST_RETURN gchar* addKeys = gtk_entry_get_text(GTK_ENTRY(entryAddMopacKeywords)); gchar* keys = g_strdup_printf("%s ESP %s",model,addKeys); totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "MopacESP",keys); if(keys) g_free(keys); } /*****************************************************************************/ static void runMopacScan(GtkWidget* Win, gpointer data) { G_CONST_RETURN gchar* model = gtk_entry_get_text(GTK_ENTRY(entryMopacHamiltonian)); G_CONST_RETURN gchar* addKeys = gtk_entry_get_text(GTK_ENTRY(entryAddMopacKeywords)); gchar buffer[BSIZE]; gchar* keys = NULL; sprintf(buffer,"STEP=%g POINT=%d ",stepValueRP[0],numberOfPointsRP[0]); if(strcmp(typeRP[1],"Nothing")) sprintf(buffer,"STEP1=%g POINT1=%d STEP2=%g POINT2=%d", stepValueRP[0],numberOfPointsRP[0], stepValueRP[1],numberOfPointsRP[1] ); keys = g_strdup_printf("%s 1SCF %s %s",model,buffer,addKeys); totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "MopacScan",keys); if(keys) g_free(keys); } /*****************************************************************************/ static void runOrcaEnergy(GtkWidget* Win, gpointer data) { G_CONST_RETURN gchar* model = gtk_entry_get_text(GTK_ENTRY(entryOrcaHamiltonian)); G_CONST_RETURN gchar* addKeys = gtk_entry_get_text(GTK_ENTRY(entryAddOrcaKeywords)); gchar* keys = g_strdup_printf("%s %s",model,addKeys); /* printf("addKeys = %s\n",addKeys);*/ totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "OrcaEnergy", keys); if(keys) g_free(keys); } /*****************************************************************************/ static void runOrcaOptimize(GtkWidget* Win, gpointer data) { G_CONST_RETURN gchar* model = gtk_entry_get_text(GTK_ENTRY(entryOrcaHamiltonian)); G_CONST_RETURN gchar* addKeys = gtk_entry_get_text(GTK_ENTRY(entryAddOrcaKeywords)); gchar* keys = g_strdup_printf("%s Opt %s",model,addKeys); /* printf("addKeys = %s\n",addKeys);*/ totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; runSemiEmpirical(Win, data, "OrcaOptimize",keys); if(keys) g_free(keys); } /********************************************************************************/ static void setSpinMultiplicityComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity, gint spin) { GtkWidget *entry = NULL; gchar* t = NULL; if(!comboSpinMultiplicity) return; entry = GTK_BIN (comboSpinMultiplicity)->child; t = g_strdup_printf("%d",spin); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /********************************************************************************/ static void setComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity) { GList *glist = NULL; gint i; gint nlist = 0; gchar** list = NULL; gint k; gint kinc; gint ne = get_number_electrons(0) - totalCharge; if(ne%2==0) nlist = ne/2+1; else nlist = (ne+1)/2; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;i=0;i--) glist = g_list_append(glist,list[i]); gtk_combo_box_entry_set_popdown_strings( comboSpinMultiplicity, glist) ; gtk_combo_box_set_active(GTK_COMBO_BOX(comboSpinMultiplicity), nlist-1); g_list_free(glist); if( SpinMultiplicities[0]%2 == atoi(list[0])%2) setSpinMultiplicityComboSpinMultiplicity(comboSpinMultiplicity, SpinMultiplicities[0]); else SpinMultiplicities[0] = atoi(list[0]); if(list) { for(i=0;ichild; t = g_strdup_printf("%d",charge); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /********************************************************************************/ static void setComboCharge(GtkWidget *comboCharge) { GList *glist = NULL; gint i; gint nlist; gchar** list = NULL; gint k; gint c = (gint)(0.5+get_sum_charges()); gint ic = 0; nlist = get_number_electrons(0)*2-2+1; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;i=0;i--) glist = g_list_append(glist,list[i]); gtk_combo_box_entry_set_popdown_strings( comboCharge, glist) ; gtk_combo_box_set_active(GTK_COMBO_BOX(comboCharge), nlist-ic-1); totalCharge = atoi(list[ic]); g_list_free(glist); if(list) { for(i=0;ichild; g_object_set_data(G_OBJECT (entry), "Combo",combo); gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.1),-1); return entry; } /**********************************************************************/ static GtkWidget *addChargeOfMoleculeToTable(GtkWidget *table, gint i) { GtkWidget* entryCharge = NULL; GtkWidget* comboCharge = NULL; gint nlistCharge = 1; gchar* listCharge[] = {"0"}; add_label_table(table,_("Charge"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryCharge = addComboListToATable(table, listCharge, nlistCharge, i, 2, 1); comboCharge = g_object_get_data(G_OBJECT (entryCharge), "Combo"); gtk_widget_set_sensitive(entryCharge, FALSE); return comboCharge; } /**********************************************************************/ static GtkWidget *addSpinOfMoleculeToTable(GtkWidget *table, gint i) { GtkWidget* entrySpinMultiplicity = NULL; GtkWidget* comboSpinMultiplicity = NULL; gint nlistspinMultiplicity = 1; gchar* listspinMultiplicity[] = {"0"}; add_label_table(table,_("Spin multiplicity"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entrySpinMultiplicity = addComboListToATable(table, listspinMultiplicity, nlistspinMultiplicity, i, 2, 1); comboSpinMultiplicity = g_object_get_data(G_OBJECT (entrySpinMultiplicity), "Combo"); gtk_widget_set_sensitive(entrySpinMultiplicity, FALSE); return comboSpinMultiplicity; } /**********************************************************************/ static void addChargeSpin(GtkWidget *box) { GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget* comboSpinMultiplicity = NULL; GtkWidget* comboCharge = NULL; GtkWidget *table = NULL; gint i; totalCharge = TotalCharges[0]; spinMultiplicity=SpinMultiplicities[0]; table = gtk_table_new(2,5,FALSE); frame = gtk_frame_new (_("Charge & Multiplicity")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; comboCharge = addChargeOfMoleculeToTable(table, i); /*----------------------------------------------------------------------------------*/ i = 1; comboSpinMultiplicity = addSpinOfMoleculeToTable(table, i); /*----------------------------------------------------------------------------------*/ if(GTK_IS_COMBO_BOX(comboCharge)) g_object_set_data(G_OBJECT (GTK_BIN(comboCharge)->child), "ComboSpinMultiplicity", comboSpinMultiplicity); setComboCharge(comboCharge); setComboSpinMultiplicity(comboSpinMultiplicity); entryCharge = GTK_WIDGET(GTK_BIN(comboCharge)->child); entrySpinMultiplicity = GTK_WIDGET(GTK_BIN(comboSpinMultiplicity)->child); g_signal_connect(G_OBJECT(entryCharge),"changed", G_CALLBACK(changedEntryCharge),NULL); } /************************************************************************************************************/ static void setComboReactionPathVariableType(GtkWidget *comboReactionPathVariableType, gboolean nothing) { GList *glist = NULL; gint i; gchar* listXYZ[] = {"Nothing","X","Y","Z"}; gchar* listZMatrix[] = {"Nothing","Bond","Angle","Dihedral"}; gchar** list = NULL; gint iBegin = 0; gint iEnd = 3; if(!nothing) iBegin = 1; if(MethodeGeom==GEOM_IS_XYZ) list = listXYZ; else list = listZMatrix; if(MethodeGeom!=GEOM_IS_XYZ) { if(NcentersZmat<=2) iEnd-=2; else if(NcentersZmat<=3) iEnd--; } for(i=iBegin;i<=iEnd;i++) glist = g_list_append(glist,list[i]); gtk_combo_box_entry_set_popdown_strings( comboReactionPathVariableType, glist) ; g_list_free(glist); } /********************************************************************************/ static void setComboReactionPathAtoms(GtkWidget *comboReactionPathAtoms) { GList *glist = NULL; gint i; gint nlist; gchar** list = NULL; GtkWidget* entry = NULL; gchar* typeRP = NULL; gint iEnd; if(!comboReactionPathAtoms) return; entry = GTK_BIN (comboReactionPathAtoms)->child; if(!entry) return; typeRP = g_object_get_data(G_OBJECT (entry), "TypeRP"); if(!typeRP) return; nlist = NcentersXYZ; if(MethodeGeom!=GEOM_IS_XYZ) nlist = NcentersZmat; iEnd = nlist-1; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild), "ComboAtoms", comboAtoms[k]); g_object_set_data(G_OBJECT (GTK_BIN(comboVariableType[k])->child), "TypeRP", typeRP[k]); g_object_set_data(G_OBJECT (GTK_BIN(comboVariableType[k])->child), "EntryStep", entryStep[k]); g_object_set_data(G_OBJECT (GTK_BIN(comboVariableType[k])->child), "EntryNbPoints", entryNbPoints[k]); } for(k=0;k<2;k++) if(GTK_IS_COMBO_BOX(comboAtoms[k])) { g_object_set_data(G_OBJECT (GTK_BIN(comboAtoms[k])->child), "EntryStep", entryStep[k]); g_object_set_data(G_OBJECT (GTK_BIN(comboAtoms[k])->child), "EntryNbPoints", entryNbPoints[k]); g_object_set_data(G_OBJECT (GTK_BIN(comboAtoms[k])->child), "AtomRP", &atomRP[k]); g_object_set_data(G_OBJECT (GTK_BIN(comboAtoms[k])->child), "TypeRP", typeRP[k]); } for(k=0;k<2;k++) g_object_set_data(G_OBJECT (entryNbPoints[k]), "NumberOfPointsRP", &numberOfPointsRP[k]); for(k=0;k<2;k++) g_object_set_data(G_OBJECT (entryStep[k]), "StepValueRP", &stepValueRP[k]); for(k=0;k<2;k++) g_signal_connect(G_OBJECT(entryStep[k]),"changed", G_CALLBACK(changedEntryReactionPathStep),NULL); for(k=0;k<2;k++) g_signal_connect(G_OBJECT(entryNbPoints[k]),"changed", G_CALLBACK(changedEntryReactionPathNbPoints),NULL); for(k=0;k<2;k++) setComboReactionPathVariableType(comboVariableType[k],k>0); for(k=0;k<2;k++) setComboReactionPathAtoms(comboAtoms[k]); } /**********************************************************************/ static void addGenericOptions(GtkWidget *box, gchar* type) { GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget* comboGenericPotential = NULL; GtkWidget* label = NULL; GtkWidget *table = NULL; gint i; gint j; table = gtk_table_new(2,5,FALSE); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; j = 0; add_label_table(table,_("Name of your generic program"),(gushort)i,(gushort)j); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryGenericPotential = gtk_entry_new(); gtk_widget_set_size_request(GTK_WIDGET(entryGenericPotential),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryGenericPotential, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); if(!genericProgName) genericProgName = g_strdup("myGenericProgram"); gtk_entry_set_text(GTK_ENTRY(entryGenericPotential),genericProgName); /*----------------------------------------------------------------------------------*/ } /************************************************************************************************************/ static void AddOptionsDlg(GtkWidget *NoteBook, GtkWidget *win,gchar* type) { gint i; gint j; GtkWidget *frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vbox; GtkWidget *table; GtkWidget *label; frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(frame), 5); LabelOnglet = gtk_label_new(_("General")); LabelMenu = gtk_label_new(_("General")); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu); g_object_set_data (G_OBJECT (frame), "frame", frame); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); table = gtk_table_new(4,5,FALSE); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); i=-1; /*----------------------------------------------------------------------------------*/ if(!strstr(type,"OpenBabel")) { i++; j = 0; vbox = gtk_vbox_new (FALSE, 0); gtk_table_attach(GTK_TABLE(table),vbox, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); addChargeSpin(vbox); } /*----------------------------------------------------------------------------------*/ if(strstr(type,"Generic")) { i++; j = 0; vbox = gtk_vbox_new (FALSE, 0); gtk_table_attach(GTK_TABLE(table),vbox, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); addGenericOptions(vbox, type); } else if(strstr(type,"OpenBabel")) { i++; j = 0; vbox = gtk_vbox_new (FALSE, 0); gtk_table_attach(GTK_TABLE(table),vbox, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); addOpenBabelOptions(vbox, type); } else if(strstr(type,"Orca")) { i++; j = 0; vbox = gtk_vbox_new (FALSE, 0); gtk_table_attach(GTK_TABLE(table),vbox, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); addOrcaOptions(vbox, type); } else if(strstr(type,"Mopac") && strstr(type,"Sparkle")) { i++; j = 0; vbox = gtk_vbox_new (FALSE, 0); gtk_table_attach(GTK_TABLE(table),vbox, j,j+3,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); addMopacSparkleOptions(vbox, type); } else if(strstr(type,"Mopac") && !strstr(type,"PM6") && !strstr(type,"AM1") && !strstr(type,"PM7")) { i++; j = 0; vbox = gtk_vbox_new (FALSE, 0); gtk_table_attach(GTK_TABLE(table),vbox, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); addMopacOptions(vbox, type); } else if(strstr(type,"MopacScanAM1") || strstr(type,"MopacScanPM6") || strstr(type,"MopacScanPM6DH2") || strstr(type,"MopacScanPM6DH+") || strstr(type,"MopacScanPM7") ) { i++; j = 0; vbox = gtk_vbox_new (FALSE, 0); gtk_table_attach(GTK_TABLE(table),vbox, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); addMopacOptions(vbox, type); } if(strstr(type,"MopacScan")) { i++; j = 0; vbox = gtk_vbox_new (FALSE, 0); gtk_table_attach(GTK_TABLE(table),vbox, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); createReactionPathFrame(vbox); } /*----------------------------------------------------------------------------------*/ i++; j = 0; add_label_table(table,_("Working Folder"),(gushort)i,(gushort)j); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; buttonDirSelector = gabedit_dir_button(); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(buttonDirSelector), g_get_current_dir()); gtk_widget_set_size_request(GTK_WIDGET(buttonDirSelector),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),buttonDirSelector, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; j = 0; add_label_table(table,_("File name"),(gushort)i,(gushort)j); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryFileName = gtk_entry_new(); if(strstr(type,"AM1")) gtk_entry_set_text(GTK_ENTRY(entryFileName),"am1"); if(strstr(type,"PM6")) gtk_entry_set_text(GTK_ENTRY(entryFileName),"pm6"); if(strstr(type,"PM7")) gtk_entry_set_text(GTK_ENTRY(entryFileName),"pm7"); else if(strstr(type,"Mopac")) gtk_entry_set_text(GTK_ENTRY(entryFileName),"mopacFile"); else if(strstr(type,"FireFly")) gtk_entry_set_text(GTK_ENTRY(entryFileName),"fireflyFile"); else if(strstr(type,"Orca")) gtk_entry_set_text(GTK_ENTRY(entryFileName),"orcaFile"); else gtk_entry_set_text(GTK_ENTRY(entryFileName),"myFile"); gtk_widget_set_size_request(GTK_WIDGET(entryFileName),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryFileName, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ } /**********************************************************************/ static GtkWidget *addMopacHamiltonianToTable(GtkWidget *table, gint i) { GtkWidget* entryMopacHamiltonian = NULL; GtkWidget* comboMopacHamiltonian = NULL; gint nlistHamiltonian = 7; gchar* listHamiltonian[] = {"PM7","PM6","PM6-DH+","PM6-DH2","AM1","RM1","PM3","MNDO"}; add_label_table(table,_("Model"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryMopacHamiltonian = addComboListToATable(table, listHamiltonian, nlistHamiltonian, i, 2, 1); comboMopacHamiltonian = g_object_get_data(G_OBJECT (entryMopacHamiltonian), "Combo"); gtk_widget_set_sensitive(entryMopacHamiltonian, FALSE); return comboMopacHamiltonian; } /**********************************************************************/ static void addMopacOptions(GtkWidget *box, gchar* type) { GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget* comboMopacHamiltonian = NULL; GtkWidget* label = NULL; GtkWidget *table = NULL; gint i; gint j; table = gtk_table_new(2,5,FALSE); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; comboMopacHamiltonian = addMopacHamiltonianToTable(table, i); entryMopacHamiltonian = GTK_WIDGET(GTK_BIN(comboMopacHamiltonian)->child); /*----------------------------------------------------------------------------------*/ i++; j = 0; add_label_table(table,_("Additional keywords"),(gushort)i,(gushort)j); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryAddMopacKeywords = gtk_entry_new(); if(strstr(type,"Opt")) gtk_entry_set_text(GTK_ENTRY(entryAddMopacKeywords),"GNORM=0.01"); else if(strstr(type,"Gradient")) gtk_entry_set_text(GTK_ENTRY(entryAddMopacKeywords),"GNORM=0.01"); else if(strstr(type,"Scan")) gtk_entry_set_text(GTK_ENTRY(entryAddMopacKeywords),"GEO-OK EPS=78.39 RSOLV=1.3"); else gtk_entry_set_text(GTK_ENTRY(entryAddMopacKeywords),"BONDS"); gtk_widget_set_size_request(GTK_WIDGET(entryAddMopacKeywords),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryAddMopacKeywords, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); if(strstr(type,"MopacScanAM1")) gtk_entry_set_text(GTK_ENTRY(entryMopacHamiltonian),"AM1"); /*----------------------------------------------------------------------------------*/ } /**********************************************************************/ static GtkWidget *addMopacHamiltonianSparkleToTable(GtkWidget *table, gint i) { GtkWidget* entryMopacHamiltonianSparkle = NULL; GtkWidget* comboMopacHamiltonianSparkle = NULL; gint nlistHamiltonianSparkle = 4; gchar* listHamiltonianSparkle[] = {"AM1","PM7","PM6","PM3"}; add_label_table(table,_("Model"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryMopacHamiltonianSparkle = addComboListToATable(table, listHamiltonianSparkle, nlistHamiltonianSparkle, i, 2, 1); comboMopacHamiltonianSparkle = g_object_get_data(G_OBJECT (entryMopacHamiltonianSparkle), "Combo"); gtk_widget_set_sensitive(entryMopacHamiltonianSparkle, FALSE); return comboMopacHamiltonianSparkle; } /**********************************************************************/ static void addMopacSparkleOptions(GtkWidget *box, gchar* type) { GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget* comboMopacHamiltonianSparkle = NULL; GtkWidget* label = NULL; GtkWidget *table = NULL; gint i; gint j; table = gtk_table_new(2,5,FALSE); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; comboMopacHamiltonianSparkle = addMopacHamiltonianSparkleToTable(table, i); entryMopacHamiltonianSparkle = GTK_WIDGET(GTK_BIN(comboMopacHamiltonianSparkle)->child); /*----------------------------------------------------------------------------------*/ i++; j = 0; add_label_table(table,_("Additional keywords"),(gushort)i,(gushort)j); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryAddMopacKeywords = gtk_entry_new(); if(strstr(type,"Opt")) gtk_entry_set_text(GTK_ENTRY(entryAddMopacKeywords),"GNORM=0.01"); else if(strstr(type,"Gradient")) gtk_entry_set_text(GTK_ENTRY(entryAddMopacKeywords),"GNORM=0.01"); else if(strstr(type,"Scan")) gtk_entry_set_text(GTK_ENTRY(entryAddMopacKeywords),"GEO-OK EPS=78.39 RSOLV=1.3"); else gtk_entry_set_text(GTK_ENTRY(entryAddMopacKeywords),"BONDS"); gtk_widget_set_size_request(GTK_WIDGET(entryAddMopacKeywords),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryAddMopacKeywords, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); if(strstr(type,"MopacScanAM1")) gtk_entry_set_text(GTK_ENTRY(entryMopacHamiltonian),"AM1"); /*----------------------------------------------------------------------------------*/ } /**********************************************************************/ static GtkWidget *addOrcaHamiltonianToTable(GtkWidget *table, gint i) { GtkWidget* entryOrcaHamiltonian = NULL; GtkWidget* comboOrcaHamiltonian = NULL; gint nlistHamiltonian = 2; gchar* listHamiltonian[] = {"PM3","AM1"}; add_label_table(table,_("Model"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryOrcaHamiltonian = addComboListToATable(table, listHamiltonian, nlistHamiltonian, i, 2, 1); comboOrcaHamiltonian = g_object_get_data(G_OBJECT (entryOrcaHamiltonian), "Combo"); gtk_widget_set_sensitive(entryOrcaHamiltonian, FALSE); return comboOrcaHamiltonian; } /**********************************************************************/ static void addOrcaOptions(GtkWidget *box, gchar* type) { GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget* comboOrcaHamiltonian = NULL; GtkWidget* label = NULL; GtkWidget *table = NULL; gint i; gint j; table = gtk_table_new(2,5,FALSE); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; comboOrcaHamiltonian = addOrcaHamiltonianToTable(table, i); entryOrcaHamiltonian = GTK_WIDGET(GTK_BIN(comboOrcaHamiltonian)->child); /*----------------------------------------------------------------------------------*/ i++; j = 0; add_label_table(table,_("Additional keywords"),(gushort)i,(gushort)j); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryAddOrcaKeywords = gtk_entry_new(); gtk_widget_set_size_request(GTK_WIDGET(entryAddOrcaKeywords),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryAddOrcaKeywords, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_entry_set_text(GTK_ENTRY(entryOrcaHamiltonian),"PM3"); /*----------------------------------------------------------------------------------*/ } /**********************************************************************/ static GtkWidget *addOpenBabelPotentialToTable(GtkWidget *table, gint i) { GtkWidget* entryOpenBabelPotential = NULL; GtkWidget* comboOpenBabelPotential = NULL; gint nlistPotential = 4; gchar* listPotential[] = {"MMFF94","MMFF94s","UFF", "GHEMICAL"}; add_label_table(table,_("Model"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryOpenBabelPotential = addComboListToATable(table, listPotential, nlistPotential, i, 2, 1); comboOpenBabelPotential = g_object_get_data(G_OBJECT (entryOpenBabelPotential), "Combo"); gtk_widget_set_sensitive(entryOpenBabelPotential, FALSE); return comboOpenBabelPotential; } /**********************************************************************/ static void addOpenBabelOptions(GtkWidget *box, gchar* type) { GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget* comboOpenBabelPotential = NULL; GtkWidget* label = NULL; GtkWidget *table = NULL; gint i; gint j; table = gtk_table_new(2,5,FALSE); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; comboOpenBabelPotential = addOpenBabelPotentialToTable(table, i); entryOpenBabelPotential = GTK_WIDGET(GTK_BIN(comboOpenBabelPotential)->child); /*----------------------------------------------------------------------------------*/ i++; j = 0; add_label_table(table,_("Additional options"),(gushort)i,(gushort)j); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryAddOpenBabelKeywords = gtk_entry_new(); gtk_widget_set_size_request(GTK_WIDGET(entryAddOpenBabelKeywords),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryAddOpenBabelKeywords, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_entry_set_text(GTK_ENTRY(entryOpenBabelPotential),"MMFF94"); /*----------------------------------------------------------------------------------*/ } /***********************************************************************/ void semiEmpiricalDlg(gchar* type) { GtkWidget *button; GtkWidget *Win; GtkWidget *NoteBook; GtkWidget *parentWindow = GeomDlg; StopCalcul = TRUE; Win= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow)); if(type) { gchar* title = g_strdup_printf(_("%s calculation"),type); gtk_window_set_title(>K_DIALOG(Win)->window,title); g_free(title); } gtk_window_set_modal (GTK_WINDOW (Win), TRUE); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)gtk_widget_destroy,NULL); NoteBook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX (GTK_DIALOG(Win)->vbox), NoteBook,TRUE, TRUE, 0); AddOptionsDlg(NoteBook, Win,type); gtk_widget_realize(Win); button = create_button(Win,"Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,"Ok"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); if(!strcmp(type,"AM1FireFlyEnergy")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runAM1FireFlyEnergy,GTK_OBJECT(Win)); else if(!strcmp(type,"AM1FireFlyOptimize")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runAM1FireFlyOptimize,GTK_OBJECT(Win)); else if(!strcmp(type,"OpenBabelEnergy")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runOpenBabelEnergy,GTK_OBJECT(Win)); else if(!strcmp(type,"OpenBabelOptimize")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runOpenBabelOptimize,GTK_OBJECT(Win)); else if(!strcmp(type,"GenericEnergy")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runGenericEnergy,GTK_OBJECT(Win)); else if(!strcmp(type,"GenericOptimize")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runGenericOptimize,GTK_OBJECT(Win)); else if(!strcmp(type,"PM6DH2MopacEnergy")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM6DH2MopacEnergy,GTK_OBJECT(Win)); else if(!strcmp(type,"PM6DH2MopacOptimize")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM6DH2MopacOptimize,GTK_OBJECT(Win)); else if(!strcmp(type,"PM6DH2MopacESP")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM6DH2MopacESP,GTK_OBJECT(Win)); else if(!strcmp(type,"PM6DH+MopacEnergy")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM6DHpMopacEnergy,GTK_OBJECT(Win)); else if(!strcmp(type,"PM6DH+MopacOptimize")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM6DHpMopacOptimize,GTK_OBJECT(Win)); else if(!strcmp(type,"PM6DH+MopacESP")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM6DHpMopacESP,GTK_OBJECT(Win)); else if(!strcmp(type,"PM6MopacEnergy")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM6MopacEnergy,GTK_OBJECT(Win)); else if(!strcmp(type,"PM6MopacOptimize")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM6MopacOptimize,GTK_OBJECT(Win)); else if(!strcmp(type,"PM6MopacESP")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM6MopacESP,GTK_OBJECT(Win)); else if(!strcmp(type,"PM7MopacEnergy")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM7MopacEnergy,GTK_OBJECT(Win)); else if(!strcmp(type,"PM7MopacOptimize")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM7MopacOptimize,GTK_OBJECT(Win)); else if(!strcmp(type,"PM7MopacESP")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM7MopacESP,GTK_OBJECT(Win)); else if(!strcmp(type,"AM1MopacEnergy")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runAM1MopacEnergy,GTK_OBJECT(Win)); else if(!strcmp(type,"AM1MopacOptimize")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runAM1MopacOptimize,GTK_OBJECT(Win)); else if(!strcmp(type,"AM1MopacESP")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runAM1MopacESP,GTK_OBJECT(Win)); else if(!strcmp(type,"MopacEnergy")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runMopacEnergy,GTK_OBJECT(Win)); else if(!strcmp(type,"MopacOptimize")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runMopacOptimize,GTK_OBJECT(Win)); else if(!strcmp(type,"MopacOptimizeSparkle")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runMopacOptimizeSparkle,GTK_OBJECT(Win)); else if(!strcmp(type,"MopacESP")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runMopacESP,GTK_OBJECT(Win)); else if(strstr(type,"MopacScan")!=NULL) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runMopacScan,GTK_OBJECT(Win)); else if(!strcmp(type,"OrcaEnergy")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runOrcaEnergy,GTK_OBJECT(Win)); else if(!strcmp(type,"OrcaOptimize")) g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runOrcaOptimize,GTK_OBJECT(Win)); gtk_widget_show (button); gtk_widget_show_all(Win); } /*****************************************************************************/ static gboolean saveConfoGeometries(gint numberOfGeometries, SemiEmpiricalModel** geometries, gdouble* energies, gchar* fileNameGeom) { FILE* file = NULL; gint i; gint j; gint nG = 0; gint k; if(numberOfGeometries<1) return FALSE; if(!geometries) return FALSE; if(!energies) return FALSE; for(i=0;imolecule.nAtoms); fprintf(file,"\n"); for(j=0;jmolecule.nAtoms;j++) fprintf(file," %s %f %f %f\n", geometries[i]->molecule.atoms[j].prop.symbol, geometries[i]->molecule.atoms[j].coordinates[0], geometries[i]->molecule.atoms[j].coordinates[1], geometries[i]->molecule.atoms[j].coordinates[2] ); } fprintf(file,"\n"); fprintf(file,"[GEOMS] 1\n"); /* for format # 1 */ fprintf(file,"%d 2\n",nG); fprintf(file,"energy kcal/mol 1\n"); fprintf(file,"deltaE K 1\n"); k = -1; for(i=0;i=0) fprintf(file,"%f\n",(energies[i]-energies[k])*503.21892494); else fprintf(file,"0\n"); fprintf(file,"%d %d %d\n",geometries[i]->molecule.nAtoms, geometries[i]->molecule.totalCharge, geometries[i]->molecule.spinMultiplicity); for(j=0;jmolecule.nAtoms;j++) { int nc = 0; int k; for(k=0;kmolecule.nAtoms;k++) if(geometries[i]->molecule.atoms[j].typeConnections&&geometries[i]->molecule.atoms[j].typeConnections[k]>0) nc++; fprintf(file," %s %s %s %s %d %f %d %d %f %f %f %d ", geometries[i]->molecule.atoms[j].prop.symbol, geometries[i]->molecule.atoms[j].mmType, geometries[i]->molecule.atoms[j].pdbType, geometries[i]->molecule.atoms[j].residueName, geometries[i]->molecule.atoms[j].residueNumber, geometries[i]->molecule.atoms[j].charge, geometries[i]->molecule.atoms[j].layer, geometries[i]->molecule.atoms[j].variable, geometries[i]->molecule.atoms[j].coordinates[0], geometries[i]->molecule.atoms[j].coordinates[1], geometries[i]->molecule.atoms[j].coordinates[2], nc ); for(k=0;k< geometries[i]->molecule.nAtoms;k++) { int nk = geometries[i]->molecule.atoms[k].N-1; if(geometries[i]->molecule.atoms[j].typeConnections && geometries[i]->molecule.atoms[j].typeConnections[nk]>0) fprintf(file," %d %d", nk+1, geometries[i]->molecule.atoms[j].typeConnections[nk]); } fprintf(file,"\n"); /* fprintf(file," %s %s %s %s %d %f %d %f %f %f\n", geometries[i]->molecule.atoms[j].prop.symbol, geometries[i]->molecule.atoms[j].mmType, geometries[i]->molecule.atoms[j].pdbType, geometries[i]->molecule.atoms[j].residueName, geometries[i]->molecule.atoms[j].residueNumber, geometries[i]->molecule.atoms[j].charge, geometries[i]->molecule.atoms[j].layer, geometries[i]->molecule.atoms[j].coordinates[0], geometries[i]->molecule.atoms[j].coordinates[1], geometries[i]->molecule.atoms[j].coordinates[2] ); */ } } fclose(file); return TRUE; } /*****************************************************************************/ static gboolean runOneOptMopac(SemiEmpiricalModel* geom, gdouble* energy, gchar* fileNamePrefix, gchar* keyWords) { FILE* file = NULL; FILE* fileSH = NULL; gint j; gchar* fileNameIn = NULL; gchar* fileNameOut = NULL; gchar* fileNameSH = NULL; gchar multiplicityStr[100]; gchar buffer[1024]; *energy = 0; #ifdef G_OS_WIN32 gchar c='%'; #endif if(!geom) return FALSE; if(geom->molecule.nAtoms<1) return FALSE; #ifndef G_OS_WIN32 fileNameSH = g_strdup_printf("%sMopacOne.sh",fileNamePrefix); #else fileNameSH = g_strdup_printf("%sMopacOne.bat",fileNamePrefix); #endif fileSH = FOpen(fileNameSH, "w"); if(!fileSH) return FALSE; #ifdef G_OS_WIN32 fprintf(fileSH,"set PATH=%cPATH%c;\"%s\"\n",c,c,mopacDirectory); #endif getMultiplicityName(spinMultiplicity, multiplicityStr); fileNameIn = g_strdup_printf("%sOne.mop",fileNamePrefix); file = FOpen(fileNameIn, "w"); if(!file) { if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return FALSE; } fprintf(file,"* ===============================\n"); fprintf(file,"* Input file for Mopac\n"); fprintf(file,"* ===============================\n"); if(spinMultiplicity>1) fprintf(file,"%s UHF CHARGE=%d %s\n",keyWords,totalCharge,multiplicityStr); else fprintf(file,"%s CHARGE=%d %s\n",keyWords,totalCharge,multiplicityStr); fprintf(file,"\n"); fprintf(file,"Mopac file generated by Gabedit\n"); for(j=0;jmolecule.nAtoms;j++) { fprintf(file," %s %f %d %f %d %f %d\n", geom->molecule.atoms[j].prop.symbol, geom->molecule.atoms[j].coordinates[0], geom->molecule.atoms[j].variable, geom->molecule.atoms[j].coordinates[1], geom->molecule.atoms[j].variable, geom->molecule.atoms[j].coordinates[2], geom->molecule.atoms[j].variable ); } fclose(file); { gchar* str = NULL; if(strstr(keyWords,"XYZ") && strstr(keyWords,"PM7")) str = g_strdup_printf("Minimization by PM7/Mopac ... Please wait"); else if(strstr(keyWords,"XYZ") && strstr(keyWords,"PM6-DH2")) str = g_strdup_printf("Minimization by PM6-DH2/Mopac ... Please wait"); else if(strstr(keyWords,"XYZ") && strstr(keyWords,"PM6-DH+")) str = g_strdup_printf("Minimization by PM6-DH+/Mopac ... Please wait"); else if(strstr(keyWords,"SPARKLE") && strstr(keyWords,"PM6")) str = g_strdup_printf("Minimization by Sparkle/PM6/Mopac ... Please wait"); else if(strstr(keyWords,"SPARKLE") && strstr(keyWords,"AM1")) str = g_strdup_printf("Minimization by Sparkle/AM1/Mopac ... Please wait"); else if(strstr(keyWords,"SPARKLE") && strstr(keyWords,"PM3")) str = g_strdup_printf("Minimization by Sparkle/PM3/Mopac ... Please wait"); else if(strstr(keyWords,"XYZ") && strstr(keyWords,"PM6")) str = g_strdup_printf("Minimization by PM6/Mopac ... Please wait"); else if(strstr(keyWords,"XYZ") && strstr(keyWords,"AM1")) str = g_strdup_printf("Minimization by AM1/Mopac ... Please wait"); else if(strstr(keyWords,"ESP") && strstr(keyWords,"PM6-DH2")) str = g_strdup_printf("ESP charges from PM6-DH2/Mopac ... Please wait"); else if(strstr(keyWords,"ESP") && strstr(keyWords,"PM6-DH+")) str = g_strdup_printf("ESP charges from PM6-DH+/Mopac ... Please wait"); else if(strstr(keyWords,"ESP") && strstr(keyWords,"PM6")) str = g_strdup_printf("ESP charges from PM6/Mopac ... Please wait"); else if(strstr(keyWords,"ESP") && strstr(keyWords,"PM7")) str = g_strdup_printf("ESP charges from PM7/Mopac ... Please wait"); else if(strstr(keyWords,"ESP") && strstr(keyWords,"AM1")) str = g_strdup_printf("ESP charges from AM1/Mopac ... Please wait"); else if(strstr(keyWords,"PM6-DH2")) str = g_strdup_printf("Computing of energy by PM6-DH2/Mopac .... Please wait"); else if(strstr(keyWords,"PM6-DH+")) str = g_strdup_printf("Computing of energy by PM6-DH+/Mopac .... Please wait"); else if(strstr(keyWords,"PM6")) str = g_strdup_printf("Computing of energy by PM6/Mopac .... Please wait"); else if(strstr(keyWords,"PM7")) str = g_strdup_printf("Computing of energy by PM7/Mopac .... Please wait"); else str = g_strdup_printf("Computing of energy by AM1/Mopac .... Please wait"); set_text_to_draw(str); if(str) g_free(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); } #ifndef G_OS_WIN32 fprintf(fileSH,"%s %s\n",NameCommandMopac,fileNameIn); fclose(fileSH); sprintf(buffer,"chmod u+x %s",fileNameSH); {int ierr= system(buffer);} {int ierr = system(fileNameSH);} #else fprintf(fileSH,"\"%s\" \"%s\"\n",NameCommandMopac,fileNameIn); fclose(fileSH); sprintf(buffer,"\"%s\"",fileNameSH); {int ierr= system(buffer);} #endif fileNameOut = g_strdup_printf("%sOne.out",fileNamePrefix); if(getEnergyMopac(fileNameOut,energy)) { gchar* str = NULL; read_geom_from_mopac_output_file(fileNameOut, -1); str = g_strdup_printf("Energy by Mopac = %f", *energy); set_text_to_draw(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); Waiting(1); if(str) g_free(str); } else { printf("I cannot read energy = from %s file\n",fileNameOut); if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return FALSE; } if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return TRUE; } /*****************************************************************************/ static gboolean runMopacFiles(gint numberOfGeometries, SemiEmpiricalModel** geometries, gdouble* energies, gchar* fileNamePrefix, gchar* keyWords) { gint i; gint nG = 0; gint nM = 0; gchar* str = NULL; for(i=0;imolecule); /* geometries[i]->molecule = createMoleculeSE(geometry0,Natoms, geometries[i]->molecule.totalCharge, geometries[i]->molecule.spinMultiplicity); */ geometries[i]->molecule = createFromGeomXYZMoleculeSE( geometries[i]->molecule.totalCharge, geometries[i]->molecule.spinMultiplicity,TRUE); nM++; } if(StopCalcul) break; } if(str) g_free(str); if(nM==nG) return TRUE; return FALSE; } /*****************************************************************************/ static gboolean runOneOptGeneric(SemiEmpiricalModel* geom, double* energy, char* fileNamePrefix, char* keyWords, char* genericCommand) { FILE* file = NULL; FILE* fileSH = NULL; char* fileNameIn = NULL; char* fileNameOut = NULL; char* fileNameSH = NULL; char buffer[1024]; int type = 0; MoleculeSE* mol = &geom->molecule; *energy = 0; #ifdef OS_WIN32 char c='%'; #endif if(!geom) return FALSE; if(geom->molecule.nAtoms<1) return FALSE; #ifndef OS_WIN32 fileNameSH = g_strdup_printf("%sGeneOne.sh",fileNamePrefix); #else fileNameSH = g_strdup_printf("%sGeneOne.bat",fileNamePrefix); #endif fileSH = fopen(fileNameSH, "w"); if(!fileSH) return FALSE; fileNameIn = g_strdup_printf("%sOne.inp",fileNamePrefix); fileNameOut = g_strdup_printf("%sOne.out",fileNamePrefix); file = fopen(fileNameIn, "w"); if(!file) { if(fileNameIn) free(fileNameIn); if(fileNameOut) free(fileNameOut); if(fileNameSH) free(fileNameSH); return FALSE; } file = fopen(fileNameIn, "w"); if(!file) { if(fileNameIn) free(fileNameIn); if(fileNameOut) free(fileNameOut); if(fileNameSH) free(fileNameSH); return FALSE; } if(strstr(keyWords,"Opt")) type = 2; if(strstr(keyWords,"ENGRAD")) type = 1; fprintf(file,"%d\n",type); addMoleculeSEToFile(mol,file); fclose(file); { char* str = NULL; if(strstr(keyWords,"OPT")) str = g_strdup_printf("Minimization by Generic/%s ... Please wait",genericCommand); else str = g_strdup_printf("Computing of energy by Generic/%s .... Please wait",genericCommand); /*printf(str);*/ set_text_to_draw(str); if(str) g_free(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); } #ifndef OS_WIN32 fprintf(fileSH,"%s %s %s",genericCommand,fileNameIn,fileNameOut); fclose(fileSH); sprintf(buffer,"chmod u+x %s",fileNameSH); system(buffer); system(fileNameSH); #else fprintf(fileSH,"\"%s\" \"%s\" \"%s\"",genericCommand,fileNameIn,fileNameOut); fclose(fileSH); sprintf(buffer,"\"%s\"",fileNameSH); system(buffer); #endif if(getEnergyGeneric(fileNameOut,energy)) { printf("Energy by Generic = %f\n", *energy); readGeometryFromGenericOutputFile(mol,fileNameOut); } else { if(fileNameIn) free(fileNameIn); if(fileNameOut) free(fileNameOut); if(fileNameSH) free(fileNameSH); return FALSE; } if(fileNameIn) free(fileNameIn); if(fileNameOut) free(fileNameOut); if(fileNameSH) free(fileNameSH); return TRUE; } /*****************************************************************************/ static gboolean runGenericFiles(int numberOfGeometries, SemiEmpiricalModel** geometries, double* energies, char* fileNamePrefix, char* keyWords, char* genericCommand) { int i; int nG = 0; int nM = 0; char* str = NULL; for(i=0;imolecule.nAtoms<1) return FALSE; #ifndef G_OS_WIN32 fileNameSH = g_strdup_printf("%sPCGOne.sh",fileNamePrefix); #else fileNameSH = g_strdup_printf("%sPCGOne.bat",fileNamePrefix); #endif fileSH = FOpen(fileNameSH, "w"); if(!fileSH) return FALSE; #ifdef G_OS_WIN32 fprintf(fileSH,"set PATH=%cPATH%c;\"%s\"\n",c,c,fireflyDirectory); #endif getMultiplicityName(spinMultiplicity, multiplicityStr); fileNameIn = g_strdup_printf("%sOne.inp",fileNamePrefix); file = FOpen(fileNameIn, "w"); if(!file) { if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return FALSE; } fprintf(file,"! ======================================================\n"); fprintf(file,"! Input file for FireFly\n"); fprintf(file,"! ======================================================\n"); if(strstr(keyWords,"RUNTYP")) { sscanf(strstr(keyWords,"RUNTYP"),"%s",buffer); fprintf(file," $CONTRL %s $END\n",buffer); } if(strstr(keyWords,"SCFTYP")) { sscanf(strstr(keyWords,"SCFTYP"),"%s",buffer); fprintf(file," $CONTRL %s $END\n",buffer); } else { if(spinMultiplicity==1) fprintf(file," $CONTRL SCFTYP=RHF $END\n"); else fprintf(file," $CONTRL SCFTYP=UHF $END\n"); } fprintf(file," $CONTRL ICHARG=%d MULT=%d $END\n",totalCharge,spinMultiplicity); if(strstr(keyWords,"GBASIS")) { sscanf(strstr(keyWords,"GBASIS"),"%s",buffer); fprintf(file," $BASIS %s $END\n",buffer); } fprintf(file," $DATA\n"); fprintf(file,"Molecule specification\n"); fprintf(file,"C1\n"); for(j=0;jmolecule.nAtoms;j++) { gchar* symbol = geom->molecule.atoms[j].prop.symbol; SAtomsProp prop = prop_atom_get(symbol); fprintf(file,"%s %f %f %f %f\n", symbol, (gdouble)prop.atomicNumber, geom->molecule.atoms[j].coordinates[0], geom->molecule.atoms[j].coordinates[1], geom->molecule.atoms[j].coordinates[2] ); } fprintf(file," $END\n"); fclose(file); fileNameOut = g_strdup_printf("%sOne.out",fileNamePrefix); #ifndef G_OS_WIN32 if(!strcmp(NameCommandFireFly,"pcgamess") || !strcmp(NameCommandFireFly,"nohup pcgamess")|| !strcmp(NameCommandFireFly,"firefly") || !strcmp(NameCommandFireFly,"nohup firefly")) { fprintf(fileSH,"mkdir %stmp\n",fileNamePrefix); fprintf(fileSH,"cd %stmp\n",fileNamePrefix); fprintf(fileSH,"cp %s input\n",fileNameIn); fprintf(fileSH,"%s -p -o %s\n",NameCommandFireFly,fileNameOut); fprintf(fileSH,"cd ..\n"); fprintf(fileSH,"rm PUNCH\n"); fprintf(fileSH,"/bin/rm -r %stmp\n",fileNamePrefix); } else fprintf(fileSH,"%s %s",NameCommandFireFly,fileNameIn); #else if(!strcmp(NameCommandFireFly,"pcgamess") || !strcmp(NameCommandFireFly,"firefly") ) { fprintf(fileSH,"mkdir \"%stmp\"\n",fileNamePrefix); addUnitDisk(fileSH, fileNamePrefix); fprintf(fileSH,"cd \"%stmp\"\n",fileNamePrefix); fprintf(fileSH,"copy \"%s\" input\n",fileNameIn); fprintf(fileSH,"%s -p -o \"%s\"\n",NameCommandFireFly,fileNameOut); fprintf(fileSH,"cd ..\n"); fprintf(fileSH,"del PUNCH\n"); fprintf(fileSH,"del /Q \"%stmp\"\n",fileNamePrefix); fprintf(fileSH,"rmdir \"%stmp\"\n",fileNamePrefix); } else fprintf(fileSH,"%s %s",NameCommandFireFly,fileNameIn); #endif fclose(fileSH); { gchar* str = NULL; if(strstr(keyWords,"OPTIMIZE")) str = g_strdup_printf("Minimization by AM1/FireFly ... Please wait"); else str = g_strdup_printf("Computing of energy by AM1/FireFly .... Please wait"); set_text_to_draw(str); if(str) g_free(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); } #ifndef G_OS_WIN32 sprintf(buffer,"chmod u+x %s",fileNameSH); {int ierr= system(buffer);} {int ierr = system(fileNameSH);} #else sprintf(buffer,"\"%s\"",fileNameSH); {int ierr= system(buffer);} #endif if(getEnergyFireFly(fileNameOut,energy)) { gchar* str = NULL; read_geom_from_gamess_output_file(fileNameOut, -1); str = g_strdup_printf("Energy by FireFly = %f", *energy); set_text_to_draw(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); Waiting(1); if(str) g_free(str); } else { if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return FALSE; } if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return TRUE; } /*****************************************************************************/ static gboolean runFireFlyFiles(gint numberOfGeometries, SemiEmpiricalModel** geometries, gdouble* energies, gchar* fileNamePrefix, gchar* keyWords) { gint i; gint nG = 0; gint nM = 0; gchar* str = NULL; for(i=0;imolecule); /* geometries[i]->molecule = createMoleculeSE(geometry0,Natoms, geometries[i]->molecule.totalCharge, geometries[i]->molecule.spinMultiplicity); */ geometries[i]->molecule = createFromGeomXYZMoleculeSE( geometries[i]->molecule.totalCharge, geometries[i]->molecule.spinMultiplicity,TRUE); nM++; } if(StopCalcul) break; } if(str) g_free(str); if(nM==nG) return TRUE; return FALSE; } /*************************************************************************************************************************************************/ static gboolean runOpenBabelFiles(gint numberOfGeometries, SemiEmpiricalModel** geometries, gdouble* energies, gchar* fileNamePrefix, gchar* keyWords) { int i; int nG = 0; int nM = 0; gchar* str = NULL; if(!geometries) return FALSE; for(i=0;imolecule); //printf("End setConnectionsMoleculeSE\n"); if(runOneOpenBabel(&geometries[i]->molecule, fileNamePrefix, keyWords)) { energies[i] = geometries[i]->molecule.energy; nM++; } if(StopCalcul) break; } if(str) g_free(str); if(nM==nG) return TRUE; return FALSE; } /*****************************************************************************/ static gboolean testEqualDistances(gdouble* distancesI, gdouble* distancesJ, gint n, gdouble tol) { gint k; if(!distancesI) return FALSE; if(!distancesJ) return FALSE; if(n<1) return FALSE; for ( k = 0; k < n; k++ ) if(fabs(distancesI[k]-distancesJ[k])>tol) return FALSE; return TRUE; } /*****************************************************************************/ static gdouble* getDistancesBetweenAtoms(SemiEmpiricalModel* seModel) { gdouble* distances = NULL; gint i; gint j; gint n; gint k; if(seModel->molecule.nAtoms<1) return distances; n = seModel->molecule.nAtoms*(seModel->molecule.nAtoms-1)/2; distances = g_malloc(n*sizeof(gdouble)); n = 0; for ( i = 0; i < seModel->molecule.nAtoms-1; i++ ) for ( j = i+1; j < seModel->molecule.nAtoms; j++ ) { gdouble x = seModel->molecule.atoms[i].coordinates[0]-seModel->molecule.atoms[j].coordinates[0]; gdouble y = seModel->molecule.atoms[i].coordinates[1]-seModel->molecule.atoms[j].coordinates[1]; gdouble z = seModel->molecule.atoms[i].coordinates[2]-seModel->molecule.atoms[j].coordinates[2]; distances[n++] = x*x + y*y + z*z; } for(i=0;i0) distancesI = getDistancesBetweenAtoms(geometries[i]); n = geometries[i]->molecule.nAtoms*(geometries[i]->molecule.nAtoms-1)/2; for(j=i+1;j0 && fabs(energies[j]-energies[i])molecule.nAtoms==geometries[j]->molecule.nAtoms) { if(tolDistance>0) { distancesJ = getDistancesBetweenAtoms(geometries[j]); if(testEqualDistances(distancesI, distancesJ, n, tolDistance)) removeds[j] = TRUE; if(distancesJ) g_free(distancesJ); distancesJ = NULL; } else removeds[j] = TRUE; } if(tolEnergy<0 && tolDistance>0 && geometries[i]->molecule.nAtoms==geometries[j]->molecule.nAtoms) { distancesJ = getDistancesBetweenAtoms(geometries[j]); if(testEqualDistances(distancesI, distancesJ, n, tolDistance)) removeds[j] = TRUE; if(distancesJ) g_free(distancesJ); distancesJ = NULL; } } if(distancesI) g_free(distancesI); distancesI = NULL; } } /*****************************************************************************/ static void removeIdenticalGeometries(gint* nG, SemiEmpiricalModel*** geoms, gdouble** eners, gdouble tolEnergy, gdouble tolDistance) { gint i; gint numberOfGeometries =*nG; SemiEmpiricalModel** geometries = *geoms; gdouble* energies = *eners; gboolean* removeds = NULL; gint newN = 0; if(numberOfGeometries<1) return; removeds = g_malloc(numberOfGeometries*sizeof(gboolean)); for(i=0;i1) fprintf(file,"%s UHF CHARGE=%d %s\n",keyWords,totalCharge,multiplicityStr); else fprintf(file,"%s CHARGE=%d %s\n",keyWords,totalCharge,multiplicityStr); fprintf(file,"\n"); fprintf(file,"Mopac file generated by Gabedit\n"); for(j=0;jmolecule.nAtoms;j++) { fprintf(file," %s %f %d %f %d %f %d\n", geometries[i]->molecule.atoms[j].prop.symbol, geometries[i]->molecule.atoms[j].coordinates[0], 1, geometries[i]->molecule.atoms[j].coordinates[1], 1, geometries[i]->molecule.atoms[j].coordinates[2], 1 ); } fclose(file); fprintf(fileSH,"%s %s\n",NameCommandMopac,fileName); } fclose(fileSH); #ifndef G_OS_WIN32 { gchar buffer[1024]; sprintf(buffer,"chmod u+x %s",fileNameSH); {int ierr= system(buffer);} } #endif if(fileName) g_free(fileName); if(fileNameSH) g_free(fileNameSH); return TRUE; } /*****************************************************************************/ static gboolean createGaussianFiles(gint numberOfGeometries, SemiEmpiricalModel** geometries, gdouble* energies, gchar* fileNamePrefix, gchar* keyWords) { FILE* file = NULL; FILE* fileSH = NULL; gint i; gint j; gint nG = 0; gchar* fileName = NULL; gchar* fileNameSH = NULL; if(numberOfGeometries<1) return FALSE; if(!geometries) return FALSE; if(!energies) return FALSE; for(i=0;imolecule.nAtoms;j++) { fprintf(file,"%s %f %f %f\n", geometries[i]->molecule.atoms[j].prop.symbol, geometries[i]->molecule.atoms[j].coordinates[0], geometries[i]->molecule.atoms[j].coordinates[1], geometries[i]->molecule.atoms[j].coordinates[2] ); } fprintf(file,"\n"); fclose(file); fprintf(fileSH,"%s %s\n",NameCommandGaussian,fileName); } fclose(fileSH); #ifndef G_OS_WIN32 { gchar buffer[1024]; sprintf(buffer,"chmod u+x %s",fileNameSH); {int ierr= system(buffer);} } #endif if(fileName) g_free(fileName); if(fileNameSH) g_free(fileNameSH); return TRUE; } /*****************************************************************************/ static gboolean createFireFlyFiles(gint numberOfGeometries, SemiEmpiricalModel** geometries, gdouble* energies, gchar* fileNamePrefix, gchar* keyWords) { FILE* file = NULL; FILE* fileSH = NULL; gint i; gint j; gint nG = 0; gchar* fileName = NULL; gchar* fileNameSH = NULL; gchar buffer[1024]; #ifdef G_OS_WIN32 gchar c='%'; #endif if(numberOfGeometries<1) return FALSE; if(!geometries) return FALSE; if(!energies) return FALSE; for(i=0;imolecule.nAtoms;j++) { gchar* symbol = geometries[i]->molecule.atoms[j].prop.symbol; SAtomsProp prop = prop_atom_get(symbol); fprintf(file,"%s %f %f %f %f\n", symbol, (gdouble)prop.atomicNumber, geometries[i]->molecule.atoms[j].coordinates[0], geometries[i]->molecule.atoms[j].coordinates[1], geometries[i]->molecule.atoms[j].coordinates[2] ); } fprintf(file," $END\n"); fclose(file); #ifndef G_OS_WIN32 if(!strcmp(NameCommandFireFly,"pcgamess") || !strcmp(NameCommandFireFly,"nohup pcgamess")|| !strcmp(NameCommandFireFly,"firefly") || !strcmp(NameCommandFireFly,"nohup firefly")) { fprintf(fileSH,"mkdir %stmp%d\n",fileNamePrefix,i+1); fprintf(fileSH,"cd %stmp%d\n",fileNamePrefix,i+1); fprintf(fileSH,"cp %s input\n",fileName); fprintf(fileSH,"%s -p -o %sP_%d.log\n",NameCommandFireFly,fileNamePrefix,i+1); fprintf(fileSH,"cd ..\n"); fprintf(fileSH,"mv PUNCH %sP_%d.pun\n",fileNamePrefix,i+1); fprintf(fileSH,"/bin/rm -r %stmp%d\n",fileNamePrefix,i+1); } else fprintf(fileSH,"%s %s",NameCommandFireFly,fileName); #else if(!strcmp(NameCommandFireFly,"pcgamess") || !strcmp(NameCommandFireFly,"firefly") ) { fprintf(fileSH,"mkdir %stmp%d\n",fileNamePrefix,i+1); addUnitDisk(fileSH, fileNamePrefix); fprintf(fileSH,"cd %stmp%d\n",fileNamePrefix,i+1); fprintf(fileSH,"copy %s input\n",fileName); fprintf(fileSH,"%s -p -o %sP_%d.log\n",NameCommandFireFly,fileNamePrefix,i+1); fprintf(fileSH,"cd ..\n"); fprintf(fileSH,"move PUNCH %sP_%d.pun\n",fileNamePrefix,i+1); fprintf(fileSH,"del /Q %stmp%d\n",fileNamePrefix,i+1); fprintf(fileSH,"rmdir %stmp%d\n",fileNamePrefix,i+1); } else fprintf(fileSH,"%s %s",NameCommandFireFly,fileName); #endif } fclose(fileSH); #ifndef G_OS_WIN32 { gchar buffer[1024]; sprintf(buffer,"chmod u+x %s",fileNameSH); {int ierr= system(buffer);} } #endif if(fileName) g_free(fileName); if(fileNameSH) g_free(fileNameSH); return TRUE; } /*****************************************************************************/ static void semiEmpiricalMDConfo(GtkWidget* Win, gpointer data) { SemiEmpiricalModel seModel; SemiEmpiricalMD seMD; gint updateFrequency = 1; gdouble heatTime; gdouble equiTime; gdouble runTime; gdouble heatTemp; gdouble equiTemp; gdouble runTemp; gdouble stepSize; MDIntegratorType integrator = VERLET; gchar* fileNameGeom = NULL; gchar* fileNameTraj = NULL; gchar* fileNameProp = NULL; gchar* mopacKeywords = NULL; gchar* gaussianKeywords = NULL; gchar* fireflyKeywords = NULL; gdouble friction=40; gdouble collide = 20; MDThermostatType thermostat = NONE; gint numberOfGeometries = 2; SemiEmpiricalModel** geometries = NULL; gdouble* energies = NULL; gboolean optMopac = FALSE; gboolean optFireFly = FALSE; gboolean optOpenBabel = FALSE; gboolean optGeneric = FALSE; gchar* program = NULL; gchar* method = NULL; gdouble tolEnergy = -1; gdouble tolDistance = -1; SemiEmpiricalModelConstraints constraints = NOCONSTRAINTS; gint i; gchar message[BSIZE]="Created files :\n"; gchar* dirName = NULL; constraints = NOCONSTRAINTS; if(GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSCONSTRAINTS])->active) constraints = BONDSCONSTRAINTS; if(GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSANGLESCONSTRAINTS])->active) constraints = BONDSANGLESCONSTRAINTS; if(GTK_TOGGLE_BUTTON (buttonTolerance[TOLE])->active) tolEnergy = atoi(gtk_entry_get_text(GTK_ENTRY(entryTolerance[TOLE]))); if(GTK_TOGGLE_BUTTON (buttonTolerance[TOLD])->active) tolDistance = atoi(gtk_entry_get_text(GTK_ENTRY(entryTolerance[TOLD]))); totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; if(GTK_TOGGLE_BUTTON (buttonMopac)->active) { program = g_strdup("Mopac"); method = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryMopacMethod))); } else if(GTK_TOGGLE_BUTTON (buttonFireFly)->active) { program = g_strdup("FireFly"); method = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFireFlyMethod))); } else if(GTK_TOGGLE_BUTTON (buttonOpenBabel)->active) { program = g_strdup("OpenBabel"); method = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryOpenBabelMethod))); } else { program = g_strdup("Generic"); method = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryGenericMethod))); if(!genericProgName) g_free(genericProgName); genericProgName = g_strdup(method); } updateFrequency = atoi(gtk_entry_get_text(GTK_ENTRY(entryMDRafresh))); if(updateFrequency<0) updateFrequency = 0; heatTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[0]))); equiTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[1]))); runTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[2]))); heatTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[0]))); runTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[2]))); /* equiTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[1])));*/ equiTemp = runTemp; stepSize = atof(gtk_entry_get_text(GTK_ENTRY(entryMDStepSize))); if(GTK_TOGGLE_BUTTON (buttonMDOptions[BEEMAN])->active) integrator = BEEMAN; if(GTK_TOGGLE_BUTTON (buttonMDOptions[STOCHASTIC])->active) integrator = STOCHASTIC; if(GTK_TOGGLE_BUTTON (buttonMDThermOptions[ANDERSEN])->active) thermostat = ANDERSEN; if(GTK_TOGGLE_BUTTON (buttonMDThermOptions[BERENDSEN])->active) thermostat = BERENDSEN; if(GTK_TOGGLE_BUTTON (buttonMDThermOptions[BUSSI])->active) thermostat = BUSSI; if( integrator == STOCHASTIC) friction = atof(gtk_entry_get_text(GTK_ENTRY(entrySDFriction))); collide = atof(gtk_entry_get_text(GTK_ENTRY(entrySDCollide))); if(heatTime<0) heatTime = 1; if(equiTime<0) equiTime = 1; if(runTime<0) runTime = 1; if(heatTemp<0) heatTemp = 0; if(equiTemp<0) runTemp = 300; if(runTemp<0) runTemp = 300; if(stepSize<0) stepSize = 1.0; if(stepSize>5) stepSize = 5.0; optMopac = GTK_TOGGLE_BUTTON (buttonPostOpt)->active && GTK_TOGGLE_BUTTON (buttonMopac)->active; optFireFly = GTK_TOGGLE_BUTTON (buttonPostOpt)->active && GTK_TOGGLE_BUTTON (buttonFireFly)->active; optOpenBabel = GTK_TOGGLE_BUTTON (buttonPostOpt)->active && GTK_TOGGLE_BUTTON (buttonOpenBabel)->active; optGeneric = GTK_TOGGLE_BUTTON (buttonPostOpt)->active && GTK_TOGGLE_BUTTON (buttonGeneric)->active; /* number for geometries */ { gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryNumberOfGeom))); numberOfGeometries = atoi(tmp); if(numberOfGeometries<2) numberOfGeometries = 2; g_free(tmp); } /* fileName for geometries */ { dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileNameGeom))); if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR) fileNameGeom = g_strdup_printf("%s%s%s",dirName, G_DIR_SEPARATOR_S,tmp); else fileNameGeom = g_strdup_printf("%s%s",dirName, tmp); g_free(tmp); } if(GTK_TOGGLE_BUTTON (buttonCreateGaussian)->active) gaussianKeywords = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryGaussianKeywords))); if(GTK_TOGGLE_BUTTON (buttonCreateMopac)->active) mopacKeywords = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryMopacKeywords))); if(GTK_TOGGLE_BUTTON (buttonCreateFireFly)->active) fireflyKeywords = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFireFlyKeywords))); if(GTK_TOGGLE_BUTTON (buttonSaveTraj)->active) { if(!dirName) dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileNameTraj))); if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR) fileNameTraj = g_strdup_printf("%s%s%s",dirName, G_DIR_SEPARATOR_S,tmp); else fileNameTraj = g_strdup_printf("%s%s",dirName, tmp); g_free(tmp); } if(GTK_TOGGLE_BUTTON (buttonSaveProp)->active) { if(!dirName) dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileNameProp))); if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR) fileNameProp = g_strdup_printf("%s%s%s",dirName, G_DIR_SEPARATOR_S,tmp); else fileNameProp = g_strdup_printf("%s%s",dirName, tmp); g_free(tmp); } gtk_widget_destroy(Win); while( gtk_events_pending() ) gtk_main_iteration(); set_sensitive_stop_button( TRUE); StopCalcul = FALSE; if(!strcmp(program,"Mopac")) seModel = createMopacModel(geometry0,Natoms, totalCharge, spinMultiplicity,method,dirName, constraints); else if(!strcmp(program,"FireFly")) seModel = createFireFlyModel(geometry0,Natoms, totalCharge, spinMultiplicity,method,dirName,constraints); else if(!strcmp(program,"OpenBabel")) seModel = createOpenBabelModel(geometry0,Natoms, totalCharge, spinMultiplicity,method,dirName,constraints); else seModel = createGenericModel(geometry0,Natoms, totalCharge, spinMultiplicity,method,dirName,constraints); g_free(program); if(StopCalcul) { set_text_to_draw(" "); set_statubar_operation_str(_("Calculation Canceled ")); drawGeom(); set_sensitive_stop_button( FALSE); return; } set_sensitive_stop_button( TRUE); { gint i; for(i=0;i<4;i++) NumSelAtoms[i] = -1; change_of_center(NULL,NULL); } geometries = runSemiEmpiricalMDConfo(&seMD, &seModel, updateFrequency, heatTime, equiTime, runTime, heatTemp, equiTemp, runTemp, stepSize, integrator, thermostat, friction, collide, numberOfGeometries, fileNameTraj, fileNameProp); freeSemiEmpiricalModel(&seModel); if(!StopCalcul && geometries && numberOfGeometries>0) { gint i; energies = g_malloc(numberOfGeometries*sizeof(gdouble)); for(i=0;imolecule.energy; } if(StopCalcul) { set_text_to_draw(" "); set_statubar_operation_str(_("Calculation canceled")); drawGeom(); } set_sensitive_stop_button( FALSE); set_text_to_draw(" "); /* minimazation by mopac*/ if(optMopac && !StopCalcul) { gchar* fileNamePrefix = get_suffix_name_file(fileNameGeom); gchar* keys=g_strdup_printf("%s XYZ",method); if(runMopacFiles(numberOfGeometries, geometries, energies, fileNamePrefix, keys)) { sortGeometries(numberOfGeometries, geometries, energies); removeIdenticalGeometries(&numberOfGeometries, &geometries, &energies, tolEnergy, tolDistance); if(saveConfoGeometries(numberOfGeometries, geometries, energies, fileNameGeom)) { read_gabedit_file_add_list(fileNameGeom); strcat(message,fileNameGeom); strcat(message,_("\n\tGeometries after minimization by Mopac")); strcat(message,_("\n\tTo read this file : 'Read/Gabedit file'\n\n")); } } if(fileNamePrefix) g_free(fileNamePrefix); if(keys)g_free(keys); } /* minimazation by FireFly AM1*/ if(optFireFly && !StopCalcul) { gchar* fileNamePrefix = get_suffix_name_file(fileNameGeom); gchar* keys=g_strdup_printf("RUNTYP=Optimize GBASIS=%s",method); if(runFireFlyFiles(numberOfGeometries, geometries, energies, fileNamePrefix, keys)) { sortGeometries(numberOfGeometries, geometries, energies); removeIdenticalGeometries(&numberOfGeometries, &geometries, &energies, tolEnergy, tolDistance); if(saveConfoGeometries(numberOfGeometries, geometries, energies, fileNameGeom)) { read_gabedit_file_add_list(fileNameGeom); strcat(message,fileNameGeom); strcat(message,_("\n\tGeometries after minimization by FireFly")); strcat(message,_("\n\tTo read this file : 'Read/Gabedit file'\n\n")); } } if(fileNamePrefix) g_free(fileNamePrefix); if(keys)g_free(keys); } /* minimazation by OpenBabel*/ if(optOpenBabel && !StopCalcul ) { gchar* fileNamePrefix = get_suffix_name_file(fileNameGeom); gchar* keys=g_strdup_printf("obopt -ff %s",method); if(runOpenBabelFiles(numberOfGeometries, geometries, energies, fileNamePrefix, keys)) { char* fileNameGeomOpenBabel =g_strdup_printf("%sOpenBabel.gab",fileNamePrefix); sortGeometries(numberOfGeometries, geometries, energies); removeIdenticalGeometries(&numberOfGeometries, &geometries, &energies, tolEnergy, tolDistance); if(saveConfoGeometries(numberOfGeometries, geometries, energies, fileNameGeom)) { strcat(message,fileNameGeom); strcat(message,("\n\tGeometries after minimization by OpenBabel")); strcat(message,("\n\tTo read this file through Gabedit : 'Read/Gabedit file'\n\n")); } free(fileNameGeomOpenBabel); } if(fileNamePrefix) free(fileNamePrefix); if(keys)free(keys); } /* minimazation by Generic*/ if(optGeneric && !StopCalcul ) { gchar* fileNamePrefix = get_suffix_name_file(fileNameGeom); gchar* keys=g_strdup_printf("Opt"); if(runGenericFiles(numberOfGeometries, geometries, energies, fileNamePrefix, keys, method)) { char* fileNameGeomGeneric =g_strdup_printf("%sGeneric.gab",fileNamePrefix); sortGeometries(numberOfGeometries, geometries, energies); removeIdenticalGeometries(&numberOfGeometries, &geometries, &energies, tolEnergy, tolDistance); if(saveConfoGeometries(numberOfGeometries, geometries, energies, fileNameGeom)) { strcat(message,fileNameGeom); strcat(message,("\n\tGeometries after minimization by Generic")); strcat(message,("\n\tTo read this file through Gabedit : 'Read/Gabedit file'\n\n")); } free(fileNameGeomGeneric); } if(fileNamePrefix) free(fileNamePrefix); if(keys)free(keys); } g_free(method); if(!optMopac && !optFireFly && !optGeneric && !optOpenBabel && !StopCalcul) { /* sort by energies */ sortGeometries(numberOfGeometries, geometries, energies); removeIdenticalGeometries(&numberOfGeometries, &geometries, &energies, tolEnergy, tolDistance); /* printf("fileNameGeom = %s\n",fileNameGeom);*/ if(saveConfoGeometries(numberOfGeometries, geometries, energies, fileNameGeom)) { read_gabedit_file_add_list(fileNameGeom); strcat(message,fileNameGeom); strcat(message,_("\n\tGeometries selected and optimized using your Semi-emperical potentials")); strcat(message,_("\n\tTo read this file : 'Read/Gabedit file'\n\n")); } } if(numberOfGeometries>0 && geometries && !StopCalcul) { if(mopacKeywords) { gchar* fileNamePrefix = get_suffix_name_file(fileNameGeom); createMopacFiles(numberOfGeometries, geometries, energies, fileNamePrefix, mopacKeywords); strcat(message,fileNamePrefix); strcat(message,_("_*.mop\n\tFiles for a post processing by Mopac\n\n")); if(fileNamePrefix) g_free(fileNamePrefix); } if(gaussianKeywords) { gchar* fileNamePrefix = get_suffix_name_file(fileNameGeom); createGaussianFiles(numberOfGeometries, geometries, energies, fileNamePrefix, gaussianKeywords); strcat(message,fileNamePrefix); strcat(message,_("_*.com\n\tFiles for a post processing by Gaussian\n\n")); if(fileNamePrefix) g_free(fileNamePrefix); } if(fireflyKeywords) { gchar* fileNamePrefix = get_suffix_name_file(fileNameGeom); createFireFlyFiles(numberOfGeometries, geometries, energies, fileNamePrefix, fireflyKeywords); strcat(message,fileNamePrefix); strcat(message,_("P_*.inp\n\tFiles for a post processing by FireFly\n\n")); if(fileNamePrefix) g_free(fileNamePrefix); } } if(geometries) { if(!StopCalcul) for(i=0;i20) Message(message,_("Info"),TRUE); if(fileNameGeom)g_free(fileNameGeom); } /*****************************************************************************/ static void semiEmpiricalMD(GtkWidget* Win, gpointer data) { SemiEmpiricalModel seModel; SemiEmpiricalMD seMD; gint updateFrequency = 1; gdouble heatTime; gdouble equiTime; gdouble runTime; gdouble coolTime; gdouble heatTemp; gdouble equiTemp; gdouble runTemp; gdouble coolTemp; gdouble stepSize; MDIntegratorType integrator = VERLET; gchar* fileNameTraj = NULL; gchar* fileNameProp = NULL; gdouble friction=40; gdouble collide = 20; MDThermostatType thermostat = NONE; gchar* program = NULL; gchar* method = NULL; gchar* dirName = NULL; gint totalCharge = 0; gint spinMultiplicity = 1; SemiEmpiricalModelConstraints constraints = NOCONSTRAINTS; constraints = NOCONSTRAINTS; if(GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSCONSTRAINTS])->active) constraints = BONDSCONSTRAINTS; if(GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSANGLESCONSTRAINTS])->active) constraints = BONDSANGLESCONSTRAINTS; totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; if(GTK_TOGGLE_BUTTON (buttonMopac)->active) { program = g_strdup("Mopac"); method = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryMopacMethod))); } if(GTK_TOGGLE_BUTTON (buttonFireFly)->active) { program = g_strdup("FireFly"); method = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFireFlyMethod))); } else if(GTK_TOGGLE_BUTTON (buttonOpenBabel)->active) { program = g_strdup("OpenBabel"); method = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryOpenBabelMethod))); } else if(GTK_TOGGLE_BUTTON (buttonGeneric)->active) { program = g_strdup("Generic"); method = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryGenericMethod))); if(!genericProgName) g_free(genericProgName); genericProgName = g_strdup(method); } updateFrequency = atoi(gtk_entry_get_text(GTK_ENTRY(entryMDRafresh))); if(updateFrequency<0) updateFrequency = 0; heatTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[0]))); equiTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[1]))); runTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[2]))); coolTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[3]))); heatTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[0]))); runTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[2]))); /* equiTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[1])));*/ equiTemp = runTemp; coolTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[3]))); stepSize = atof(gtk_entry_get_text(GTK_ENTRY(entryMDStepSize))); if(GTK_TOGGLE_BUTTON (buttonMDOptions[BEEMAN])->active) integrator = BEEMAN; if(GTK_TOGGLE_BUTTON (buttonMDOptions[STOCHASTIC])->active) integrator = STOCHASTIC; if(GTK_TOGGLE_BUTTON (buttonMDThermOptions[ANDERSEN])->active) thermostat = ANDERSEN; if(GTK_TOGGLE_BUTTON (buttonMDThermOptions[BERENDSEN])->active) thermostat = BERENDSEN; if(GTK_TOGGLE_BUTTON (buttonMDThermOptions[BUSSI])->active) thermostat = BUSSI; if( integrator == STOCHASTIC) friction = atof(gtk_entry_get_text(GTK_ENTRY(entrySDFriction))); collide = atof(gtk_entry_get_text(GTK_ENTRY(entrySDCollide))); if(heatTime<0) heatTime = 1; if(equiTime<0) equiTime = 1; if(runTime<0) runTime = 1; if(coolTime<0) coolTime = 4; if(heatTemp<0) heatTemp = 0; if(equiTemp<0) runTemp = 300; if(runTemp<0) runTemp = 300; if(coolTemp<0) coolTemp = 0; if(stepSize<0) stepSize = 1.0; if(stepSize>5) stepSize = 5.0; dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); if(GTK_TOGGLE_BUTTON (buttonSaveTraj)->active) { gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileNameTraj))); if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR) fileNameTraj = g_strdup_printf("%s%s%s",dirName, G_DIR_SEPARATOR_S,tmp); else fileNameTraj = g_strdup_printf("%s%s",dirName, tmp); g_free(tmp); } if(GTK_TOGGLE_BUTTON (buttonSaveProp)->active) { gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileNameProp))); if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR) fileNameProp = g_strdup_printf("%s%s%s",dirName, G_DIR_SEPARATOR_S,tmp); else fileNameProp = g_strdup_printf("%s%s",dirName, tmp); g_free(tmp); } gtk_widget_destroy(Win); while( gtk_events_pending() ) gtk_main_iteration(); set_sensitive_stop_button( TRUE); StopCalcul = FALSE; if(!strcmp(program,"Mopac")) seModel = createMopacModel(geometry0,Natoms, totalCharge, spinMultiplicity,method,dirName, constraints); else if(!strcmp(program,"FireFly")) seModel = createFireFlyModel(geometry0,Natoms, totalCharge, spinMultiplicity,method,dirName, constraints); else if(!strcmp(program,"OpenBabel")) seModel = createOpenBabelModel(geometry0,Natoms, totalCharge, spinMultiplicity,method,dirName, constraints); else if(!strcmp(program,"Generic")) seModel = createGenericModel(geometry0,Natoms, totalCharge, spinMultiplicity,method,dirName, constraints); g_free(method); g_free(program); if(StopCalcul) { set_text_to_draw(" "); set_statubar_operation_str(_("Calculation Canceled ")); drawGeom(); set_sensitive_stop_button( FALSE); return; } set_sensitive_stop_button( TRUE); { gint i; for(i=0;i<4;i++) NumSelAtoms[i] = -1; change_of_center(NULL,NULL); } runSemiEmpiricalMD(&seMD, &seModel, updateFrequency, heatTime, equiTime, runTime, coolTime, heatTemp, equiTemp, runTemp, coolTemp, stepSize, integrator, thermostat, friction, collide, fileNameTraj, fileNameProp); if(StopCalcul) { set_text_to_draw(" "); set_statubar_operation_str(_("Calculation Canceled ")); drawGeom(); } set_sensitive_stop_button(FALSE); set_text_to_draw(" "); freeSemiEmpiricalModel(&seModel); g_free(dirName); } /********************************************************************************/ static void AddDynamicsOptionsDlg(GtkWidget *NoteBook, GtkWidget *win) { gint i; gint j; GtkWidget *frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vbox; GtkWidget *table; GtkWidget* label; GtkWidget *hseparator = NULL; frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(frame), 5); LabelOnglet = gtk_label_new(_("Molecular Dynamics Options")); LabelMenu = gtk_label_new(_("Molecular Dynamics Options")); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu); g_object_set_data (G_OBJECT (frame), "frame", frame); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (frame), vbox); table = gtk_table_new(20,6,FALSE); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; j = 2; label = gtk_label_new(_("Heating")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 3; label = gtk_label_new(_("Equilibrium")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 4; label = gtk_label_new(_("Production")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 5; label = gtk_label_new(_("Cooling")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 0; label = gtk_label_new(_("Time (ps)")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 2; entryMDTimes[0] = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryMDTimes[0]),"1.0"); gtk_widget_set_size_request(entryMDTimes[0], 60, -1); gtk_table_attach(GTK_TABLE(table),entryMDTimes[0], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 3; entryMDTimes[1] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTimes[1], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTimes[1]),"1.0"); gtk_table_attach(GTK_TABLE(table),entryMDTimes[1], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 4; entryMDTimes[2] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTimes[2], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTimes[2]),"4.0"); gtk_table_attach(GTK_TABLE(table),entryMDTimes[2], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 5; entryMDTimes[3] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTimes[3], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTimes[3]),"4.0"); gtk_table_attach(GTK_TABLE(table),entryMDTimes[3], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 2; j = 0; label = gtk_label_new(_("Temperature (K)")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 2; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 2; j = 2; entryMDTemperature[0] = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[0]),"0.0"); gtk_widget_set_size_request(entryMDTemperature[0], 60, -1); gtk_table_attach(GTK_TABLE(table),entryMDTemperature[0], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ /* i = 2; j = 3; entryMDTemperature[1] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTemperature[1], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[1]),"300.0"); gtk_table_attach(GTK_TABLE(table),entryMDTemperature[1], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); */ /*----------------------------------------------------------------------------------*/ i = 2; j = 4; entryMDTemperature[2] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTemperature[2], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[2]),"300.0"); gtk_table_attach(GTK_TABLE(table),entryMDTemperature[2], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 2; j = 5; entryMDTemperature[3] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTemperature[3], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[3]),"0.0"); gtk_table_attach(GTK_TABLE(table),entryMDTemperature[3], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 3; j = 0; label = gtk_label_new(_("Step size (fs)")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 3; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 3; j = 2; entryMDStepSize = gtk_entry_new(); gtk_widget_set_size_request(entryMDStepSize, 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDStepSize),"1.0"); gtk_table_attach(GTK_TABLE(table),entryMDStepSize, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 4; j = 0; label = gtk_label_new(_("Screen Rafresh after")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 4; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 4; j = 2; entryMDRafresh = gtk_entry_new(); gtk_widget_set_size_request(entryMDRafresh, 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDRafresh),"1"); gtk_table_attach(GTK_TABLE(table),entryMDRafresh, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 4; j = 3; label = gtk_label_new(_("steps")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 5; j = 0; label = gtk_label_new(_("Collide(ps^-1)")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 5; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 5; j = 2; entrySDCollide = gtk_entry_new(); gtk_widget_set_size_request(entrySDCollide, 60, -1); gtk_entry_set_text(GTK_ENTRY(entrySDCollide),"20.0"); gtk_table_attach(GTK_TABLE(table),entrySDCollide, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 6; j = 0; label = gtk_label_new(_("Friction(ps^-1)")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 6; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 6; j = 2; entrySDFriction = gtk_entry_new(); gtk_widget_set_size_request(entrySDFriction, 60, -1); gtk_entry_set_text(GTK_ENTRY(entrySDFriction),"40.0"); gtk_table_attach(GTK_TABLE(table),entrySDFriction, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /* THERMOSTAT */ /*----------------------------------------------------------------------------------*/ i = 3; j = 4; buttonMDThermOptions[NONE]= gtk_radio_button_new_with_label( NULL, "NVE"); gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[NONE], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[NONE]), TRUE); /*----------------------------------------------------------------------------------*/ i = 4; j = 4; buttonMDThermOptions[BERENDSEN]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDThermOptions[NONE])), "Berendsen"); gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[BERENDSEN], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[BERENDSEN]), FALSE); /*----------------------------------------------------------------------------------*/ i = 5; j = 4; buttonMDThermOptions[ANDERSEN]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDThermOptions[NONE])), "Andersen"); gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[ANDERSEN], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[ANDERSEN]), FALSE); /*----------------------------------------------------------------------------------*/ i = 6; j = 4; buttonMDThermOptions[BUSSI]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDThermOptions[NONE])), "Bussi"); gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[BUSSI], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[BUSSI]), FALSE); /*----------------------------------------------------------------------------------*/ i = 7; j = 0; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),hseparator, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 8; j = 0; buttonMDOptions[VERLET]= gtk_radio_button_new_with_label( NULL, _("MD Trajectory via Verlet velocity Algorithm")); gtk_table_attach(GTK_TABLE(table),buttonMDOptions[VERLET], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDOptions[VERLET]), TRUE); /*----------------------------------------------------------------------------------*/ i = 9; j = 0; buttonMDOptions[BEEMAN]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDOptions[VERLET])), _("MD Trajectory via Modified Beeman Algorithm")); gtk_table_attach(GTK_TABLE(table),buttonMDOptions[BEEMAN], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDOptions[BEEMAN]), FALSE); /*----------------------------------------------------------------------------------*/ i = 10; j = 0; buttonMDOptions[STOCHASTIC]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDOptions[VERLET])), _("Stochastic Dynamics via Verlet velocity Algorithm")); gtk_table_attach(GTK_TABLE(table),buttonMDOptions[STOCHASTIC], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDOptions[STOCHASTIC]), FALSE); /*----------------------------------------------------------------------------------*/ i = 11; j = 0; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),hseparator, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 12; j = 0; buttonConstraintsOptions[NOCONSTRAINTS]= gtk_radio_button_new_with_label( NULL, _("No constraints")); gtk_table_attach(GTK_TABLE(table),buttonConstraintsOptions[NOCONSTRAINTS], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonConstraintsOptions[NOCONSTRAINTS]), TRUE); /*----------------------------------------------------------------------------------*/ i = 13; j = 0; buttonConstraintsOptions[BONDSCONSTRAINTS]= gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonConstraintsOptions[NOCONSTRAINTS])), _("Bond constraints")); gtk_table_attach(GTK_TABLE(table),buttonConstraintsOptions[BONDSCONSTRAINTS], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSCONSTRAINTS]), FALSE); /*----------------------------------------------------------------------------------*/ i = 14; j = 0; buttonConstraintsOptions[BONDSANGLESCONSTRAINTS]= gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonConstraintsOptions[NOCONSTRAINTS])), _("Bond & Angle constraints")); gtk_table_attach(GTK_TABLE(table),buttonConstraintsOptions[BONDSANGLESCONSTRAINTS], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSANGLESCONSTRAINTS]), FALSE); /*----------------------------------------------------------------------------------*/ i = 15; j = 0; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),hseparator, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 16; j = 0; buttonSaveTraj = gtk_check_button_new_with_label(_("Save Trajectory in ")); gtk_table_attach(GTK_TABLE(table),buttonSaveTraj, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonSaveTraj), FALSE); /*----------------------------------------------------------------------------------*/ i = 16; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 16; j = 2; entryFileNameTraj = gtk_entry_new(); gtk_widget_set_size_request(entryFileNameTraj, 60, -1); gtk_entry_set_text(GTK_ENTRY(entryFileNameTraj),"traj.gab"); gtk_table_attach(GTK_TABLE(table),entryFileNameTraj, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 17; j = 0; buttonSaveProp = gtk_check_button_new_with_label(_("Save Properties in ")); gtk_table_attach(GTK_TABLE(table),buttonSaveProp, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonSaveProp), FALSE); /*----------------------------------------------------------------------------------*/ i = 17; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 17; j = 2; entryFileNameProp = gtk_entry_new(); gtk_widget_set_size_request(entryFileNameProp, 60, -1); gtk_entry_set_text(GTK_ENTRY(entryFileNameProp),"prop.txt"); gtk_table_attach(GTK_TABLE(table),entryFileNameProp, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 18; j = 0; label = gtk_label_new(_("Folder")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 18; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 18; j = 2; buttonDirSelector = gabedit_dir_button(); gtk_table_attach(GTK_TABLE(table),buttonDirSelector, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); } /**********************************************************************/ static void createInfoMDFrame(GtkWidget *box) { GtkWidget* frame; GtkWidget* hboxFrame; GtkWidget *label = NULL; frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, FALSE, FALSE, 0); hboxFrame = gtk_hbox_new (FALSE, 3); gtk_widget_show (hboxFrame); gtk_container_add (GTK_CONTAINER (frame), hboxFrame); label = gtk_label_new( _( "If \"MD Trajectory via Verlet velocity Algorithm\" is selected :\n" " A molecular dynamic simulation is run using the Verlet velocity Algorithm.\n" " During the production step, the user can select the Andersen or Berendsen thermostat which is then applied.\n" " The Berendsen thermostat is applied for Heating, Equilibrium and Cooling steps.\n" "\n" "If \"MD Trajectory via Modified Beeman Algorithm\" is selected :\n" " A molecular dynamic simulation is run using the Modified Beeman Algorithm.\n" " During the production step, the user can select the Andersen or Berendsen thermostat which is then applied.\n" " The Berendsen thermostat is applied for Heating, Equilibrium and Cooling steps.\n" "\n" "If \"Stochastic Dynamics via Verlet velocity Algorithm\" is selected :\n" " A stochastic dynamic simulation is run using Verlet velocity Algorithm.\n" " The velocities are scaled (Berendsen method)during the Heating, Equilibrium and Cooling steps.\n" ) ); gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hboxFrame), label, FALSE, FALSE, 5); } /**********************************************************************/ static void createInfoConfoFrame(GtkWidget *box) { GtkWidget* frame; GtkWidget* hboxFrame; GtkWidget *label = NULL; frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, FALSE, FALSE, 0); hboxFrame = gtk_hbox_new (FALSE, 3); gtk_widget_show (hboxFrame); gtk_container_add (GTK_CONTAINER (frame), hboxFrame); label = gtk_label_new( _( "During the production step, Gabedit selects a number geometries" "\nAt the end of the molecular dynamic simulation," "\nthe geometries are sorted by energy and are saved in a file." "\nGabedit can also optimize these geometries, interactively." "\nThe very similar molecular strcutures can be removed." "\nGabedit can also creates input files for mopac, FireFly or Gaussian for a post processing." "\n\n" "If \"MD Trajectory via Verlet velocity Algorithm\" is selected :\n" " A molecular dynamic simulation is run using the Verlet velocity Algorithm.\n" " During the production step, the user can select the Andersen or Berendsen thermostat which is then applied.\n" " The Berendsen thermostat is applied for Heating, Equilibrium and Cooling steps.\n" "\n" "If \"MD Trajectory via Modified Beeman Algorithm\" is selected :\n" " A molecular dynamic simulation is run using the Modified Beeman Algorithm.\n" " During the production step, the user can select the Andersen or Berendsen thermostat which is then applied.\n" " The Berendsen thermostat is applied for Heating, Equilibrium and Cooling steps.\n" "\n" "If \"Stochastic Dynamics via Verlet velocity Algorithm\" is selected :\n" " A stochastic dynamic simulation is run using Verlet velocity Algorithm.\n" " The velocities are scaled (Berendsen method)during the Heating, Equilibrium and Cooling steps.\n" ) ); gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hboxFrame), label, FALSE, FALSE, 5); } /**********************************************************************/ static void createPostProcessingFrame(GtkWidget *box) { GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget *table = NULL; GtkWidget *label = NULL; GtkWidget *sep = NULL; gint i; gint j; totalCharge = TotalCharges[0]; spinMultiplicity=SpinMultiplicities[0]; table = gtk_table_new(10,5,FALSE); frame = gtk_frame_new (_("Post Processing")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; j = 0; buttonPostOpt = gtk_radio_button_new_with_label( NULL, _("Minimization of selected geometries")); gtk_table_attach(GTK_TABLE(table),buttonPostOpt, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonPostOpt), TRUE); gtk_widget_show (buttonPostOpt); /*----------------------------------------------------------------------------------*/ i++; j = 0; buttonPostNone =gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonPostOpt)), _("No minimization of selected geometries")); gtk_table_attach(GTK_TABLE(table),buttonPostNone, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonPostNone), FALSE); gtk_widget_show (buttonPostNone); /*----------------------------------------------------------------------------------*/ i++; j = 0; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; j = 0; label = gtk_label_new(_("Remove identical molecular structures")); gtk_table_attach(GTK_TABLE(table),label, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; j = 0; buttonTolerance[TOLE] = gtk_check_button_new_with_label(_("Energy tolerance(KCal/mol)")); gtk_table_attach(GTK_TABLE(table),buttonTolerance[TOLE], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonTolerance[TOLE]), TRUE); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryTolerance[TOLE] = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryTolerance[TOLE]),"1e-2"); gtk_widget_set_size_request(GTK_WIDGET(entryTolerance[TOLE]),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryTolerance[TOLE], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; j = 0; buttonTolerance[TOLD] = gtk_check_button_new_with_label(_("Distance tolerance(Angstrom)")); gtk_table_attach(GTK_TABLE(table),buttonTolerance[TOLD], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonTolerance[TOLD]), TRUE); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryTolerance[TOLD] = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryTolerance[TOLD]),"1e-2"); gtk_widget_set_size_request(GTK_WIDGET(entryTolerance[TOLD]),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryTolerance[TOLD], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; j = 0; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; j = 0; buttonCreateMopac = gtk_check_button_new_with_label(_("Create Mopac files. Keywords ")); gtk_table_attach(GTK_TABLE(table),buttonCreateMopac, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCreateMopac), FALSE); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryMopacKeywords = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryMopacKeywords),"PM7 XYZ AUX"); gtk_table_attach(GTK_TABLE(table),entryMopacKeywords, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; j = 0; buttonCreateGaussian = gtk_check_button_new_with_label(_("Create Gaussian files. Keywords ")); gtk_table_attach(GTK_TABLE(table),buttonCreateGaussian, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCreateGaussian), FALSE); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryGaussianKeywords = gtk_entry_new(); gtk_widget_set_size_request(entryGaussianKeywords, 60, -1); gtk_entry_set_text(GTK_ENTRY(entryGaussianKeywords),"B3LYP/6-31G* Opt"); gtk_table_attach(GTK_TABLE(table),entryGaussianKeywords, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; j = 0; buttonCreateFireFly = gtk_check_button_new_with_label(_("Create FireFly files. Keywords ")); gtk_table_attach(GTK_TABLE(table),buttonCreateFireFly, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCreateFireFly), FALSE); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryFireFlyKeywords = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryFireFlyKeywords),"RUNTYP=Optimize GBASIS=AM1"); gtk_table_attach(GTK_TABLE(table),entryFireFlyKeywords, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); } /********************************************************************************/ static void AddModelOptionsDlg(GtkWidget *NoteBook, GtkWidget *win) { gint i; gint j; GtkWidget *frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vbox; GtkWidget *table; GtkWidget *label; frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(frame), 5); LabelOnglet = gtk_label_new(_("Model")); LabelMenu = gtk_label_new(_("Model")); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu); g_object_set_data (G_OBJECT (frame), "frame", frame); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); table = gtk_table_new(5,3,FALSE); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); i=-1; /*==================================================================================*/ i++; j = 0; buttonMopac = gtk_radio_button_new_with_label( NULL,_("Use Mopac with method")); gtk_table_attach(GTK_TABLE(table),buttonMopac, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMopac), TRUE); gtk_widget_show (buttonMopac); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryMopacMethod = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryMopacMethod),"PM7"); gtk_table_attach(GTK_TABLE(table),entryMopacMethod, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*==================================================================================*/ i++; j = 0; buttonFireFly = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMopac)), _("Use FireFly with method")); gtk_table_attach(GTK_TABLE(table),buttonFireFly, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonFireFly), FALSE); gtk_widget_show (buttonFireFly); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryFireFlyMethod = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryFireFlyMethod),"AM1"); gtk_table_attach(GTK_TABLE(table),entryFireFlyMethod, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*==================================================================================*/ i++; j = 0; buttonOpenBabel = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMopac)), _("Use OpenBabel with method")); gtk_table_attach(GTK_TABLE(table),buttonOpenBabel, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonOpenBabel), FALSE); gtk_widget_show (buttonOpenBabel); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryOpenBabelMethod = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryOpenBabelMethod),"MMFF94"); gtk_table_attach(GTK_TABLE(table),entryOpenBabelMethod, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*==================================================================================*/ i++; j = 0; buttonGeneric = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMopac)), _("Use Generic with command")); gtk_table_attach(GTK_TABLE(table),buttonGeneric, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonGeneric), FALSE); gtk_widget_show (buttonGeneric); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryGenericMethod = gtk_entry_new(); if(!genericProgName) genericProgName = g_strdup("myGenericProgram"); gtk_entry_set_text(GTK_ENTRY(entryGenericMethod),genericProgName); gtk_table_attach(GTK_TABLE(table),entryGenericMethod, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*==================================================================================*/ i++; j = 0; vbox = gtk_vbox_new (FALSE, 0); gtk_table_attach(GTK_TABLE(table),vbox, j,j+3,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); addChargeSpin(vbox); /*==================================================================================*/ } /********************************************************************************/ static void AddInfoConfo(GtkWidget *NoteBook, GtkWidget *win) { GtkWidget *frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vbox; frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(frame), 5); LabelOnglet = gtk_label_new(_("Info")); LabelMenu = gtk_label_new(_("Info")); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu); g_object_set_data (G_OBJECT (frame), "frame", frame); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); createInfoConfoFrame(vbox); } /********************************************************************************/ static void AddInfoMD(GtkWidget *NoteBook, GtkWidget *win) { GtkWidget *frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vbox; frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(frame), 5); LabelOnglet = gtk_label_new(_("Info")); LabelMenu = gtk_label_new(_("Info")); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu); g_object_set_data (G_OBJECT (frame), "frame", frame); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); createInfoMDFrame(vbox); } /********************************************************************************/ static void AddGeneralConfoOptionsDlg(GtkWidget *NoteBook, GtkWidget *win) { gint i; gint j; GtkWidget *frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vbox; GtkWidget *table; GtkWidget *label; frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(frame), 5); LabelOnglet = gtk_label_new(_("General")); LabelMenu = gtk_label_new(_("General")); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu); g_object_set_data (G_OBJECT (frame), "frame", frame); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); table = gtk_table_new(8,5,FALSE); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; j = 0; add_label_table(table,_("Number of selected geometries"),(gushort)i,(gushort)j); /*----------------------------------------------------------------------------------*/ i = 0; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 2; entryNumberOfGeom = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryNumberOfGeom),"10"); gtk_widget_set_size_request(GTK_WIDGET(entryNumberOfGeom),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryNumberOfGeom, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 0; add_label_table(table,_("Geometries saved in File"),(gushort)i,(gushort)j); /*----------------------------------------------------------------------------------*/ i = 1; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 2; entryFileNameGeom = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryFileNameGeom),"conf.gab"); gtk_widget_set_size_request(GTK_WIDGET(entryFileNameGeom),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryFileNameGeom, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 2; j = 0; add_label_table(table,_("Folder"),(gushort)i,(gushort)j); /*----------------------------------------------------------------------------------*/ i = 2; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 2; j = 2; buttonDirSelector = gabedit_dir_button(); gtk_widget_set_size_request(GTK_WIDGET(buttonDirSelector),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),buttonDirSelector, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 3; j = 0; vbox = gtk_vbox_new (FALSE, 0); gtk_table_attach(GTK_TABLE(table),vbox, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); createPostProcessingFrame(vbox); } /********************************************************************************/ static void AddDynamicsConfoOptionsDlg(GtkWidget *NoteBook, GtkWidget *win) { gint i; gint j; GtkWidget *frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vbox; GtkWidget *table; GtkWidget* label; GtkWidget *hseparator = NULL; frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(frame), 5); LabelOnglet = gtk_label_new(_("Molecular Dynamics")); LabelMenu = gtk_label_new(_("Molecular Dynamics")); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu); g_object_set_data (G_OBJECT (frame), "frame", frame); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (frame), vbox); table = gtk_table_new(18,6,FALSE); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; j = 2; label = gtk_label_new(_("Heating")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 3; label = gtk_label_new(_("Equilibrium")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 4; label = gtk_label_new(_("Production")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 0; label = gtk_label_new(_("Time (ps)")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 2; entryMDTimes[0] = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryMDTimes[0]),"0.0"); gtk_widget_set_size_request(entryMDTimes[0], 60, -1); gtk_table_attach(GTK_TABLE(table),entryMDTimes[0], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 3; entryMDTimes[1] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTimes[1], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTimes[1]),"1.0"); gtk_table_attach(GTK_TABLE(table),entryMDTimes[1], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 4; entryMDTimes[2] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTimes[2], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTimes[2]),"10.0"); gtk_table_attach(GTK_TABLE(table),entryMDTimes[2], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 2; j = 0; label = gtk_label_new(_("Temperature (K)")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 2; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 2; j = 2; entryMDTemperature[0] = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[0]),"0.0"); gtk_widget_set_size_request(entryMDTemperature[0], 60, -1); gtk_table_attach(GTK_TABLE(table),entryMDTemperature[0], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ /* i = 2; j = 3; entryMDTemperature[1] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTemperature[1], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[1]),"1000.0"); gtk_table_attach(GTK_TABLE(table),entryMDTemperature[1], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); */ /*----------------------------------------------------------------------------------*/ i = 2; j = 4; entryMDTemperature[2] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTemperature[2], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[2]),"1000.0"); gtk_table_attach(GTK_TABLE(table),entryMDTemperature[2], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 3; j = 0; label = gtk_label_new(_("Step size (fs)")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 3; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 3; j = 2; entryMDStepSize = gtk_entry_new(); gtk_widget_set_size_request(entryMDStepSize, 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDStepSize),"1.0"); gtk_table_attach(GTK_TABLE(table),entryMDStepSize, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 4; j = 0; label = gtk_label_new(_("Screen Rafresh after")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 4; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 4; j = 2; entryMDRafresh = gtk_entry_new(); gtk_widget_set_size_request(entryMDRafresh, 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDRafresh),"1"); gtk_table_attach(GTK_TABLE(table),entryMDRafresh, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 4; j = 3; label = gtk_label_new(_("steps")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 5; j = 0; label = gtk_label_new(_("Collide(ps^-1)")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 5; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 5; j = 2; entrySDCollide = gtk_entry_new(); gtk_widget_set_size_request(entrySDCollide, 60, -1); gtk_entry_set_text(GTK_ENTRY(entrySDCollide),"20.0"); gtk_table_attach(GTK_TABLE(table),entrySDCollide, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 6; j = 0; label = gtk_label_new(_("Friction(ps^-1)")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 6; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 6; j = 2; entrySDFriction = gtk_entry_new(); gtk_widget_set_size_request(entrySDFriction, 60, -1); gtk_entry_set_text(GTK_ENTRY(entrySDFriction),"40.0"); gtk_table_attach(GTK_TABLE(table),entrySDFriction, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /* THERMOSTAT */ /*----------------------------------------------------------------------------------*/ i = 3; j = 4; buttonMDThermOptions[NONE]= gtk_radio_button_new_with_label( NULL, "NVE"); gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[NONE], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[NONE]), TRUE); /*----------------------------------------------------------------------------------*/ i = 4; j = 4; buttonMDThermOptions[BERENDSEN]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDThermOptions[NONE])), "Berendsen"); gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[BERENDSEN], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[BERENDSEN]), FALSE); /*----------------------------------------------------------------------------------*/ i = 5; j = 4; buttonMDThermOptions[ANDERSEN]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDThermOptions[NONE])), "Andersen"); gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[ANDERSEN], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[ANDERSEN]), FALSE); /*----------------------------------------------------------------------------------*/ i = 6; j = 4; buttonMDThermOptions[BUSSI]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDThermOptions[NONE])), "Bussi"); gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[BUSSI], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[BUSSI]), FALSE); /*----------------------------------------------------------------------------------*/ i = 7; j = 0; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),hseparator, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 8; j = 0; buttonMDOptions[VERLET]= gtk_radio_button_new_with_label( NULL, _("MD Trajectory via Verlet velocity Algorithm")); gtk_table_attach(GTK_TABLE(table),buttonMDOptions[VERLET], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDOptions[VERLET]), TRUE); /*----------------------------------------------------------------------------------*/ i = 9; j = 0; buttonMDOptions[BEEMAN]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDOptions[VERLET])), _("MD Trajectory via Modified Beeman Algorithm")); gtk_table_attach(GTK_TABLE(table),buttonMDOptions[BEEMAN], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDOptions[BEEMAN]), FALSE); /*----------------------------------------------------------------------------------*/ i = 10; j = 0; buttonMDOptions[STOCHASTIC]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDOptions[VERLET])), _("Stochastic Dynamics via Verlet velocity Algorithm")); gtk_table_attach(GTK_TABLE(table),buttonMDOptions[STOCHASTIC], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDOptions[STOCHASTIC]), FALSE); /*----------------------------------------------------------------------------------*/ i = 11; j = 0; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),hseparator, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 12; j = 0; buttonConstraintsOptions[NOCONSTRAINTS]= gtk_radio_button_new_with_label( NULL, _("No constraints")); gtk_table_attach(GTK_TABLE(table),buttonConstraintsOptions[NOCONSTRAINTS], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonConstraintsOptions[NOCONSTRAINTS]), TRUE); /*----------------------------------------------------------------------------------*/ i = 13; j = 0; buttonConstraintsOptions[BONDSCONSTRAINTS]= gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonConstraintsOptions[NOCONSTRAINTS])), _("Bond constraints")); gtk_table_attach(GTK_TABLE(table),buttonConstraintsOptions[BONDSCONSTRAINTS], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSCONSTRAINTS]), FALSE); /*----------------------------------------------------------------------------------*/ i = 14; j = 0; buttonConstraintsOptions[BONDSANGLESCONSTRAINTS]= gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonConstraintsOptions[NOCONSTRAINTS])), _("Bond & Angle constraints")); gtk_table_attach(GTK_TABLE(table),buttonConstraintsOptions[BONDSANGLESCONSTRAINTS], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSANGLESCONSTRAINTS]), FALSE); /*----------------------------------------------------------------------------------*/ i = 15; j = 0; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),hseparator, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 16; j = 0; buttonSaveTraj = gtk_check_button_new_with_label(_("Save Trajectory in ")); gtk_table_attach(GTK_TABLE(table),buttonSaveTraj, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonSaveTraj), FALSE); /*----------------------------------------------------------------------------------*/ i = 16; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 16; j = 2; entryFileNameTraj = gtk_entry_new(); gtk_widget_set_size_request(entryFileNameTraj, 60, -1); gtk_entry_set_text(GTK_ENTRY(entryFileNameTraj),"traj.gab"); gtk_table_attach(GTK_TABLE(table),entryFileNameTraj, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 17; j = 0; buttonSaveProp = gtk_check_button_new_with_label(_("Save Properties in ")); gtk_table_attach(GTK_TABLE(table),buttonSaveProp, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonSaveProp), FALSE); /*----------------------------------------------------------------------------------*/ i = 17; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 17; j = 2; entryFileNameProp = gtk_entry_new(); gtk_widget_set_size_request(entryFileNameProp, 60, -1); gtk_entry_set_text(GTK_ENTRY(entryFileNameProp),"prop.txt"); gtk_table_attach(GTK_TABLE(table),entryFileNameProp, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); } /*****************************************************************************/ void semiEmpiricalMolecularDynamicsDlg() { GtkWidget *button; GtkWidget *Win; GtkWidget *NoteBook; GtkWidget *parentWindow = GeomDlg; StopCalcul = TRUE; Win= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow)); gtk_window_set_title(>K_DIALOG(Win)->window,"Molecular Dynamics"); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)gtk_widget_destroy,NULL); NoteBook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX (GTK_DIALOG(Win)->vbox), NoteBook,TRUE, TRUE, 0); AddDynamicsOptionsDlg(NoteBook, Win); AddModelOptionsDlg(NoteBook, Win); AddInfoMD(NoteBook, Win); gtk_widget_realize(Win); button = create_button(Win,"Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,"Ok"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)semiEmpiricalMD,GTK_OBJECT(Win)); gtk_widget_show (button); gtk_widget_show_all(Win); } /***********************************************************************/ void semiEmpiricalMolecularDynamicsConfoDlg() { GtkWidget *button; GtkWidget *Win; GtkWidget *NoteBook; GtkWidget *parentWindow = GeomDlg; StopCalcul = TRUE; Win= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow)); gtk_window_set_title(>K_DIALOG(Win)->window,"Molecular Dynamics Conformational search"); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)gtk_widget_destroy,NULL); NoteBook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX (GTK_DIALOG(Win)->vbox), NoteBook,TRUE, TRUE, 0); AddGeneralConfoOptionsDlg(NoteBook, Win); AddDynamicsConfoOptionsDlg(NoteBook, Win); AddModelOptionsDlg(NoteBook, Win); AddInfoConfo(NoteBook, Win); gtk_widget_realize(Win); button = create_button(Win,"Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,"Ok"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)semiEmpiricalMDConfo,GTK_OBJECT(Win)); gtk_widget_show (button); gtk_widget_show_all(Win); } /***********************************************************************/ GabeditSrc250/src/SemiEmpirical/MoleculeSE.h0000644000175100017510000000535713130665225021165 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MOLECULESE_H__ #define __GABEDIT_MOLECULESE_H__ typedef struct _MoleculeSE { gint nAtoms; AtomSE* atoms; gint spinMultiplicity; gint totalCharge; gdouble energy; gdouble* gradient[3]; gint numberOf2Connections; gint* connected2[2]; gint numberOf3Connections; gint* connected3[3]; gdouble dipole[3]; }MoleculeSE; MoleculeSE newMoleculeSE(); MoleculeSE createMoleculeSE(GeomDef* geom,gint natoms, gint charge, gint spin, gboolean connections); MoleculeSE createFromGeomXYZMoleculeSE(gint charge, gint spin, gboolean connections); void freeMoleculeSE(MoleculeSE* molecule); void redrawMoleculeSE(MoleculeSE* molecule,gchar* str); MoleculeSE copyMoleculeSE(MoleculeSE* m); gboolean saveMoleculeSEHIN(MoleculeSE* mol, char* fileName); gboolean saveMoleculeSEMol2(MoleculeSE* mol, char* fileName); void computeMoleculeSEDipole(MoleculeSE* mol); void readGeomMoleculeSEFromOpenBabelOutputFile(MoleculeSE* mol, char* fileName, int numgeometry); gboolean addGeometryMoleculeSEToGabedit(MoleculeSE* molecule,FILE* file); gboolean addMoleculeSEToFile(MoleculeSE* molecule,FILE* file); gboolean saveMoleculeSETypeSave(MoleculeSE* molecule, char* fileName, char* typeSave); gboolean saveMoleculeSE(MoleculeSE* molecule, char* fileName); gdouble getGradientNormMoleculeSE(MoleculeSE* molecule); void setConnectionsMoleculeSE(MoleculeSE* molecule); gboolean readGeometryFromGenericOutputFile(MoleculeSE* molecule, char* namefile); #endif /* __GABEDIT_MOLECULESE_H__ */ GabeditSrc250/src/SemiEmpirical/SemiEmpiricalMD.h0000644000175100017510000000644013130665225022126 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_SEMIEMPIRICALMD_H__ #define __GABEDIT_SEMIEMPIRICALMD_H__ typedef enum { VERLET = 0, BEEMAN = 1, STOCHASTIC = 2 } MDIntegratorType; typedef enum { NONE = 0, ANDERSEN = 1, BERENDSEN = 2, BUSSI = 3 } MDThermostatType; typedef struct _SemiEmpiricalMD SemiEmpiricalMD; struct _SemiEmpiricalMD { SemiEmpiricalModel* seModel; gint numberOfAtoms; gint updateFrequency; gdouble** coordinatesOld; gdouble** velocity; gdouble** a; gdouble** aold; gdouble dt; gdouble dt_2; gdouble dt2_2; gdouble dt_8; gdouble dt2_8; MDIntegratorType integratorType; gdouble potentialEnergy; gdouble kineticEnergy; gdouble totalEnergy; gdouble kelvin; gboolean* moved; gboolean* update; gdouble* positionFriction; gdouble* velocityFriction; gdouble* accelarationFriction; gdouble** positionRandom; gdouble** velocityRandom; gdouble* gamma; gdouble friction; gdouble temperature; gdouble collide; MDThermostatType thermostat; FILE* fileTraj; FILE* fileProp; gint nfree; gint nvariables; }; void freeSemiEmpiricalMD(SemiEmpiricalMD* seMD); void runSemiEmpiricalMD( SemiEmpiricalMD* seMD, SemiEmpiricalModel* seModel, gint updateFrequency, gdouble heatTime, gdouble equiTime, gdouble runTime, gdouble coolTime, gdouble heatTemperature, gdouble equiTemperature, gdouble runTemperature, gdouble coolTemperature, gdouble stepSize, MDIntegratorType integratorType, MDThermostatType thermostat, gdouble friction, gdouble collide, gchar* fileNameTraj, gchar* fileNameProp ); SemiEmpiricalModel** runSemiEmpiricalMDConfo( SemiEmpiricalMD* seMD, SemiEmpiricalModel* seModel, gint updateFrequency, gdouble heatTime, gdouble equiTime, gdouble runTime, gdouble heatTemperature, gdouble equiTemperature, gdouble runTemperature, gdouble stepSize, MDIntegratorType integratorType, MDThermostatType thermostat, gdouble friction, gdouble collide, gint numberOfGeometries, gchar* fileNameTraj, gchar* fileNameProp ); #endif /* __GABEDIT_SEMIEMPIRICALMD_H__ */ GabeditSrc250/src/SemiEmpirical/AtomSE.h0000644000175100017510000000340013130665225020303 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_ATOMSE_H__ #define __GABEDIT_ATOMSE_H__ typedef struct _AtomSE { gdouble coordinates[3]; gdouble charge; SAtomsProp prop; gchar* mmType; gchar* pdbType; gchar* residueName; gint residueNumber; gint N; gboolean variable; gboolean show; GabEditLayerType layer; gint* typeConnections; }AtomSE; gdouble getAngleSE(AtomSE *a1,AtomSE* a2,AtomSE* a3); gdouble getTorsionSE(AtomSE* a1,AtomSE* a2,AtomSE* a3,AtomSE* a4); #endif /* __GABEDIT_ATOMSE_H__ */ GabeditSrc250/src/DeMon/0000755000175100017510000000000013130743374015266 5ustar allouchealloucheGabeditSrc250/src/DeMon/DeMonTypes.h0000644000175100017510000000315313130665225017466 0ustar alloucheallouche #ifndef __GABEDIT_DEMONTYPES_H__ #define __GABEDIT_DEMONTYPES_H__ typedef struct _DeMonColorBack { GdkColor keyWord; GdkColor description; }DeMonColorBack; typedef struct _DeMonColorFore { GdkColor keyWord; GdkColor description; }DeMonColorFore; typedef struct _DeMonAtom { gdouble position[3]; gchar* symbol; }DeMonAtom; typedef struct _DeMonMolecule { gint numberOfAtoms; gint totalNumberOfElectrons; gint numberOfValenceElectrons; DeMonAtom* listOfAtoms; gchar* auxBasisName; }DeMonMolecule; typedef struct _DeMonBasis { gchar* name; gchar* molecule; int numberOfBasisTypes; gchar** basisNames; }DeMonBasis; typedef struct _DeMonGuessWaveFunction { gboolean fromHCore; gchar* method; gchar* functional; gchar* molecule; gchar* basis; gchar* memory; gint totalCharge; gint spinMultiplicity; }DeMonGuessWaveFunction; typedef enum { LSDAC = 0, PBEC, PW91C, P86C, NewP86C, VWN1LC, VWN1LCRPA, VWN2LC, VWN3LC, VWN4LC, VWN5LC, PW92LC, PZ81LC, LYPC, HFX, Xalpha, SlaterX, Becke88X, PBEX, PW86X, PW91X, mPW91_B88X, mPW91_PW91X,mPW91_mPW91X, G96X } DeMonFunctionalType; typedef enum { XALPHA = 0, HFS, HFB, HFG96, G96LYP, BLYP, SVWN1, SVWN1RPA, SVWN2, SVWN3, SVWN4, SVWN5, SPZ81, SPW92, BPW91, BP86, B3LYP, B3PW91, B3P86, PBE, PW91, mPW_PW91_PW91, mPWPW91, mPW1PW91 } DeMonStdFunctionalType; typedef struct _DeMonFunctional { DeMonFunctionalType type; gchar* name; gchar* comment; }DeMonFunctional; typedef struct _DeMonStdFunctional { DeMonStdFunctionalType type; gchar* name; gint n; DeMonFunctionalType* listOfTypes; gdouble* coefficients; }DeMonStdFunctional; #endif /* __GABEDIT_DEMONTYPES_H__ */ GabeditSrc250/src/DeMon/DeMonBasis.c0000644000175100017510000003735613130665225017432 0ustar alloucheallouche/* DeMonBasis.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../DeMon/DeMonTypes.h" #include "../DeMon/DeMonGlobal.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Utils/GabeditTextEdit.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" static gchar selectedTypeBasis[BSIZE]=""; static gchar** listBasisReal = NULL; static gchar** listBasisView = NULL; static gint numberOfBasis = 0; /*************************************************************************************************************/ static gchar* listTypeBasisView[] = { "Pople Style basis sets", "Pople with one diffuse function", "Dunning basis sets", "Miscellenous and Specialized Basis Sets", }; static gchar* listTypeBasisReal[] = { "Pople", "PopleDiffuseAllAtoms", "Dunning", "Miscellenous", }; static guint numberOfTypeBasis = G_N_ELEMENTS (listTypeBasisView); /*************************************************************************************************************/ static gchar* listPopleBasisView[] = { "DZVP H-Xe LDA double zeta polarizationa basis set", "DZVP-GGA H-Xe GGA double zeta polarizationa basis set", "DZVP2 Be-F, Al-Ar, Sc-Zn Modified DZVP basis set.", "TZVP H, Li, C-F, Si-Cl LDA triple zeta polarization basis set.", "TZVP-GGA Sc-Cu GGA triple zeta polarization basis set. ", "TZVP-FIP1 H, C-F, Na, S, Cl, Cu TZVP with field-induced polarization", "TZVP-FIP2 H, C-F, Na, S, Cl, Cu for alpha, beta (FIP1) and gamma (FIP2) calculations", "DZV H,C LDA double zeta basis set.", "DZV-GGA H,C GGA double zeta basis set.", }; static gchar* listPopleBasisReal[] = { "(DZVP)", "(DZVP-GGA)", "(DZVP2)", "(TZVP)", "(TZVP-GGA)", "(TZVP-FIP1)", "(TZVP-FIP2)", "(DZV)", "(DZV-GGA)", }; static guint numberOfPopleBasis = G_N_ELEMENTS (listPopleBasisView); /*************************************************************************************************************/ /*************************************************************************************************************/ static gchar* listDunningBasisView[] = { "cc-pVDZ Dunning correlation concisistent polarized double zeta", "Aug-cc-pVDZ Same but including diffuse functions", "cc-pVTZ Dunning correlation concisistent polarized triple zeta", "Aug-cc-pVTZ Same but including diffuse functions(g-functions deleted!)", "cc-pVQZ Dunning correlation concisistent polarized quadruple zeta", "Aug-cc-pVQZ with diffuse functions", "cc-pV5Z Dunning correlation concisistent polarized quintuple zeta", "Aug-cc-pV5Z with diffuse functions", "cc-pV6Z Dunning correlation concisistent polarized sextuple zeta", "Aug-cc-pV6Z ... with diffuse functions", }; static gchar* listDunningBasisReal[] = { "(cc-pVDZ)", "(Aug-cc-pVDZ)", "(cc-pVTZ)", "(Aug-cc-pVTZ)", "(cc-pVQZ)", "(Aug-cc-pVQZ)", "(cc-pV5Z)", "(Aug-cc-pV5Z)", "(cc-pV6Z)", "(Aug-cc-pV6Z)", }; static guint numberOfDunningBasis = G_N_ELEMENTS (listDunningBasisView); /*************************************************************************************************************/ static gchar* listMiscellenousBasisView[] = { "EPR-III H-F EPR basis set", "IGLO-II H, Li, B-F, Si NMR basis set", "IGLO-III H, B-F, Si, Cr, Fe NMR basis set", "STO-3G H-Ar STO-3G basis set for testing only", "SAD H, C-F Sadlej FIP basis set", "LIC H-Ne Lie-Clementi basis set", "WACHTERS Sc-Cu Wachters basis set without f functions", "DZ-ANO H-Zn Double zeta ANO basis set from Roos", "ECP|SD Valence basis for SD ECPs", "RECP|SD Valence basis for SD RECPs", "QECP|SD Valence basis for SD QECPs", "ECP|LANL2DZ Valence basis for LANL ECPs", "QECP|LANL2DZ Valence basis for LANL QECPs", "ECP|HW K-Cu Hay-Wadt basis for LANL ECPs", "QECP|HW Rb-Ag, Cs-La, Hf-Au Hay-Wadt basis for LANL QECPs", "MCP|LK Valence basis for LK MCPs", "RMCP|LK Valence basis for LK RMCPs", "XAS-I Li-F XAS augmentation basis for first row", "XAS-II Na-Cl XAS augmentation basis for second row" }; static gchar* listMiscellenousBasisReal[] = { "(EPR-III)", "(IGLO-II)", "(IGLO-III)", "(STO-3G)", "(SAD)", "(LIC)", "(WACHTERS)", "(DZ-ANO)", "(ECP|SD)", "(RECP|SD)", "(QECP|SD)", "(ECP|LANL2DZ)", "(QECP|LANL2DZ)", "(ECP|HW)", "(QECP|HW)", "(MCP|LK)", "(RMCP|LK)", "(XAS-I)", "(XAS-II)", }; static guint numberOfMiscellenousBasis = G_N_ELEMENTS (listMiscellenousBasisView); /*************************************************************************************************************/ static gchar* listAuxBasisView[] = { "GEN-A2*", "A2 auxiliary function", "GEN-A2", "GEN-A2**", "GEN-A3", "GEN-A3*", "GEN-A3**", "GEN-A4", "GEN-A4*", "GEN-A4**" }; static gchar* listAuxBasisReal[] = { "(GEN-A2*)", "(A2)", "(GEN-A2)", "(GEN-A2**)", "(GEN-A3)", "(GEN-A3*)", "(GEN-A3**)", "(GEN-A4)", "(GEN-A4*)", "(GEN-A4**)", }; static guint numberOfAuxBasis = G_N_ELEMENTS (listAuxBasisView); /*************************************************************************************************************/ static void setDeMonBasis(GtkWidget* comboBasis) { gint i; if(strcmp(selectedTypeBasis, "Pople")==0) { listBasisView = listPopleBasisView; listBasisReal = listPopleBasisReal; numberOfBasis = numberOfPopleBasis; } else if(strcmp(selectedTypeBasis, "Dunning")==0) { listBasisView = listDunningBasisView; listBasisReal = listDunningBasisReal; numberOfBasis = numberOfDunningBasis; } else { listBasisView = listMiscellenousBasisView; listBasisReal = listMiscellenousBasisReal; numberOfBasis = numberOfMiscellenousBasis; } if (comboBasis && GTK_IS_COMBO_BOX(comboBasis)) { GtkTreeModel * model = NULL; model = gtk_combo_box_get_model(GTK_COMBO_BOX(comboBasis)); gtk_list_store_clear(GTK_LIST_STORE(model)); for(i=0;ichild; g_object_set_data(G_OBJECT (entry), "Combo",combo); return entry; } /***********************************************************************************************/ void addDeMonTypeBasisToTable(GtkWidget *table, gint i, GtkWidget* comboBasis) { GtkWidget* combo = NULL; add_label_table(table,_("Type"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); combo = create_list_type_basis(comboBasis); gtk_table_attach(GTK_TABLE(table),combo,2,2+1,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); } /***********************************************************************************************/ GtkWidget* addDeMonBasisToTable(GtkWidget *table, gint i) { GtkWidget* entryBasis = NULL; GtkWidget* comboBasis = NULL; gint nlistBasis = 1; gchar* listBasis[] = {" "}; add_label_table(table,_("Basis"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryBasis = addComboListToATable(table, listBasis, nlistBasis, i, 2, 1); comboBasis = g_object_get_data(G_OBJECT (entryBasis), "Combo"); gtk_widget_set_sensitive(entryBasis, TRUE); gtk_editable_set_editable(GTK_EDITABLE(entryBasis),FALSE); g_signal_connect(G_OBJECT(entryBasis),"changed", G_CALLBACK(changedEntryBasis),NULL); return comboBasis; } /***********************************************************************************************/ void addDeMonAuxBasisToTable(GtkWidget *table, gint i, GtkWidget* comboMethod, GtkWidget* comboExcited) { GtkWidget* entryAuxBasis = NULL; GtkWidget* comboAuxBasis = NULL; GtkWidget* label = NULL; label = add_label_table(table,_("Auxiliary basis"),(gushort)i,0); if(comboMethod) g_object_set_data(G_OBJECT (comboMethod), "LabelAuxBasis1", label); if(comboExcited) g_object_set_data(G_OBJECT (comboExcited), "LabelAuxBasis1", label); label = add_label_table(table,":",(gushort)i,1); if(comboMethod) g_object_set_data(G_OBJECT (comboMethod), "LabelAuxBasis2", label); if(comboExcited) g_object_set_data(G_OBJECT (comboExcited), "LabelAuxBasis2", label); entryAuxBasis = addComboListToATable(table, listAuxBasisView, numberOfAuxBasis, i, 2, 1); comboAuxBasis = g_object_get_data(G_OBJECT (entryAuxBasis), "Combo"); gtk_widget_set_sensitive(entryAuxBasis, TRUE); gtk_editable_set_editable(GTK_EDITABLE(entryAuxBasis),FALSE); if(comboMethod) g_object_set_data(G_OBJECT (comboMethod), "ComboAuxBasis", comboAuxBasis); if(comboExcited) g_object_set_data(G_OBJECT (comboExcited), "ComboAuxBasis", comboAuxBasis); g_signal_connect(G_OBJECT(entryAuxBasis),"changed", G_CALLBACK(changedEntryAuxBasis),NULL); demonMolecule.auxBasisName=g_strdup(listAuxBasisReal[0]); } /***********************************************************************************************/ static void putDeMonBasisInTextEditor() { gchar buffer[BSIZE]; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &demonColorFore.keyWord, &demonColorBack.keyWord, "Basis ",-1); sprintf(buffer,"%s\n",demonBasis.name); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } /***********************************************************************************************/ void putDeMonAuxBasisInTextEditor() { gchar buffer[BSIZE]; if(!demonMolecule.auxBasisName) return; if(strcmp(demonMolecule.auxBasisName, "None") != 0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, &demonColorFore.keyWord, &demonColorBack.keyWord, "Auxis ",-1); sprintf(buffer,"%s\n",demonMolecule.auxBasisName); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } } /***********************************************************************************************/ void putDeMonBasisInfoInTextEditor() { putDeMonBasisInTextEditor(); } GabeditSrc250/src/DeMon/DeMonMolecule.h0000644000175100017510000000054613130665225020132 0ustar alloucheallouche #ifndef __GABEDIT_DEMONMOLECULE_H__ #define __GABEDIT_DEMONMOLECULE_H__ gint getDeMonMultiplicity(); void initDeMonMoleculeButtons(); void initDeMonMolecule(); void freeDeMonMolecule(); void putDeMonMoleculeInfoInTextEditor(); gboolean setDeMonMolecule(); void createDeMonChargeMultiplicityFrame(GtkWidget *box); #endif /* __GABEDIT_DEMONMOLECULE_H__ */ GabeditSrc250/src/DeMon/DeMonGuess.c0000644000175100017510000001477613130665225017460 0ustar alloucheallouche/* DeMonGuess.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../DeMon/DeMonTypes.h" #include "../DeMon/DeMonGlobal.h" #include "../DeMon/DeMonBasis.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget *guessFrame = NULL; /*************************************************************************************************************/ static gchar* listGuessMethodView[] = { "TB : A tight-binding SCF starting density is calculated. This is the default.", "CORE : The SCF starting density is obtained from diagonalization of the core Hamiltonian. ", "FERMI : The starting density is obtained by quenching a fractionally occupied SCF solution to integer occupation numbers.", }; static gchar* listGuessMethodReal[] = { "NONE", "GUESS CORE\n", "GUESS FERMI\n", }; static guint numberOfGuessMethods = G_N_ELEMENTS (listGuessMethodView); static gchar selectedGuessMethod[BSIZE]="NONE"; /*************************************************************************************************************/ void initDeMonGuessFrame() { guessFrame = NULL; } /*************************************************************************************************************/ static void putDeMonGuessOptionsInfoInTextEditor() { } /************************************************************************************************************/ static void putDeMonGuessMethodInfoInTextEditor() { if( strcmp(selectedGuessMethod,"NONE")==0 ) return; { gchar buffer[BSIZE]; sprintf(buffer,"%s",selectedGuessMethod); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } } /*************************************************************************************************************/ void putDeMonGuessInfoInTextEditor() { putDeMonGuessMethodInfoInTextEditor(); putDeMonGuessOptionsInfoInTextEditor(); } /************************************************************************************************************/ static void traitementGuessMethod (GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; gchar* res = NULL; gint i; /* gchar* s;*/ if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } for(i=0;i Dep.mk -include Dep.mk GabeditSrc250/src/DeMon/DeMon.h0000644000175100017510000000272513130665225016445 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_DEMON_H__ #define __GABEDIT_DEMON_H__ void destroyWinsDeMon(GtkWidget *win,gpointer data); void newDeMon(); void insertDeMon(); #endif /* __GABEDIT_DEMON_H__ */ GabeditSrc250/src/DeMon/DeMonMolecule.c0000644000175100017510000005641313130665225020131 0ustar alloucheallouche/* DeMonMolecule.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../DeMon/DeMonTypes.h" #include "../DeMon/DeMonGlobal.h" #include "../DeMon/DeMonKeywords.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" /************************************************************************************************************/ static gint totalCharge = 0; static gint spinMultiplicity=1; /************************************************************************************************************/ gint getDeMonMultiplicity() { return spinMultiplicity; } /************************************************************************************************************/ void initDeMonMoleculeButtons() { } /************************************************************************************************************/ void initDeMonMolecule() { demonMolecule.listOfAtoms = NULL; demonMolecule.totalNumberOfElectrons = 0; demonMolecule.numberOfValenceElectrons = 0; demonMolecule.numberOfAtoms = 0; } /************************************************************************************************************/ void freeDeMonMolecule() { static gboolean first = TRUE; if(first) { initDeMonMolecule(); first = FALSE; return; } if(demonMolecule.listOfAtoms) g_free(demonMolecule.listOfAtoms); initDeMonMolecule(); } /************************************************************************************************************/ static gint setDeMonMoleculeFromSXYZ(gint nAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z) { gint n; DeMonAtom* atomList = NULL; demonMolecule.listOfAtoms = NULL; demonMolecule.numberOfAtoms = 0; if(nAtoms<1) return 1; demonMolecule.listOfAtoms = (DeMonAtom*)g_malloc(sizeof(DeMonAtom)*(nAtoms)); if(demonMolecule.listOfAtoms==NULL) return -1; demonMolecule.numberOfAtoms = nAtoms; atomList = demonMolecule.listOfAtoms; for(n=0; nposition[0] = X[n]; atomList->position[1] = Y[n]; atomList->position[2] = Z[n]; atomList->symbol = g_strdup(symbols[n]); atomList++; } return 0; } /************************************************************************************************************/ static void setXYZFromGeomXYZ(gint i, gdouble* x, gdouble* y, gdouble *z) { if(!test(GeomXYZ[i].X)) *x = get_value_variableXYZ(GeomXYZ[i].X); else *x = atof(GeomXYZ[i].X); if(!test(GeomXYZ[i].Y)) *y = get_value_variableXYZ(GeomXYZ[i].Y); else *y = atof(GeomXYZ[i].Y); if(!test(GeomXYZ[i].Z)) *z = get_value_variableXYZ(GeomXYZ[i].Z); else *z = atof(GeomXYZ[i].Z); if(Units==0) { *x *= BOHR_TO_ANG; *y *= BOHR_TO_ANG; *z *= BOHR_TO_ANG; } } /************************************************************************************************************/ static gboolean setDeMonMoleculeFromGeomXYZ() { gint i; gchar** symbols = NULL; gdouble* X = NULL; gdouble* Y = NULL; gdouble* Z = NULL; gint numberOfAtoms = NcentersXYZ; if(numberOfAtoms<1) return FALSE; symbols = (gchar**)g_malloc(sizeof(gchar*)*(numberOfAtoms)); if(symbols == NULL) return FALSE; X = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(X == NULL) return FALSE; Y = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Y == NULL) return FALSE; Z = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Z == NULL) return FALSE; demonMolecule.totalNumberOfElectrons = 0; for(i=0; iposition[k]-atomList->position[k+1]; dd += xx*xx; } if(i==0) d = dd; else if(d>dd) d= dd; atomList++; } d = sqrt(d); return d; } */ /*************************************************************************************************************/ /* static void setFirstAtomToXAxis(gint numberOfAtoms, gdouble* X, gdouble* Y, gdouble*Z) { gdouble d; gdouble s; gdouble c; gint i; gdouble positionTolerance = -1; if(numberOfAtoms<1) return; d = X[0]*X[0]+Y[0]*Y[0]; if(d<1e-10) return; d = sqrt(d); if(positionTolerance<0) positionTolerance= getMinDistance()/50; s = -Y[0]/d; c = +X[0]/d; for (i=0;i0) for(i=0;i0 && nV!= 3*demonMolecule.numberOfAtoms) { sprintf(buffer,"Variables\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &demonColorFore.keyWord, &demonColorBack.keyWord, buffer, -1); for (i=0;iNUMBER_ENTRY_ANGLE) { gchar R[100]; gchar A[100]; gchar D[100]; sprintf(R,"%s",Geom[i].R); sprintf(A,"%s",Geom[i].Angle); sprintf(D,"%s",Geom[i].Dihedral); if(!test(Geom[i].Dihedral)) sprintf(D,"%f",get_value_variableZmat(Geom[i].Dihedral)); sprintf(buffer," %s %s %s %s %s %s %s\n", symb, Geom[i].NR, R, Geom[i].NAngle, A, Geom[i].NDihedral, D ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } else if(Geom[i].Nentry>NUMBER_ENTRY_R) { gchar R[100]; gchar A[100]; sprintf(R,"%s",Geom[i].R); sprintf(A,"%s",Geom[i].Angle); sprintf(buffer," %s %s %s %s %s\n", symb, Geom[i].NR, R, Geom[i].NAngle, A ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } else if(Geom[i].Nentry>NUMBER_ENTRY_0) { gchar R[100]; sprintf(R,"%s",Geom[i].R); sprintf(buffer," %s %s %s\n", symb, Geom[i].NR,R ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } else { sprintf(buffer," %s\n", symb ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } } nV = 0; if(NVariables>0) for(i=0;i0) { sprintf(buffer,"Variables\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,buffer,-1); for (i=0;i=NUMBER_ENTRY_R && !test(Geom[i].R)) { sprintf(buffer,"%s %0.14f\n",Geom[i].R, get_value_variableZmat(Geom[i].R)); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,buffer,-1); } if(Geom[i].Nentry>=NUMBER_ENTRY_ANGLE && !test(Geom[i].Angle)) { sprintf(buffer,"%s %0.14f\n",Geom[i].Angle, get_value_variableZmat(Geom[i].Angle)); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,buffer,-1); } if(Geom[i].Nentry>NUMBER_ENTRY_ANGLE && !test(Geom[i].Dihedral)) { sprintf(buffer,"%s %0.14f\n",Geom[i].Dihedral, get_value_variableZmat(Geom[i].Dihedral)); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,buffer,-1); } } } gabedit_text_insert (GABEDIT_TEXT(text), NULL, &demonColorFore.keyWord, &demonColorBack.keyWord,"# End geometry\n",-1); } } /************************************************************************************************************/ void putDeMonMoleculeInfoInTextEditor() { putDeMonMoleculeInTextEditor(); } /************************************************************************************************************/ /* static GtkWidget* addRadioButtonToATable(GtkWidget* table, GtkWidget* friendButton, gchar* label, gint i, gint j, gint k) { GtkWidget *newButton; if(friendButton) newButton = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (friendButton)), label); else newButton = gtk_radio_button_new_with_label( NULL, label); gtk_table_attach(GTK_TABLE(table),newButton,j,j+k,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); g_object_set_data(G_OBJECT (newButton), "Label",NULL); g_object_set_data(G_OBJECT (newButton), "Type",NULL); return newButton; } */ /********************************************************************************/ static void setSpinMultiplicityComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity, gint spin) { GtkWidget *entry = NULL; gchar* t = NULL; if(!comboSpinMultiplicity) return; entry = GTK_BIN (comboSpinMultiplicity)->child; t = g_strdup_printf("%d",spin); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /************************************************************************************************************/ static void setComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity) { GList *glist = NULL; gint i; gint nlist = 0; gchar** list = NULL; gint k; gint kinc; gint ne = demonMolecule.numberOfValenceElectrons - totalCharge; if(ne%2==0) nlist = ne/2+1; else nlist = (ne+1)/2; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; t = g_strdup_printf("%d",charge); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /********************************************************************************/ static void setComboCharge(GtkWidget *comboCharge) { GList *glist = NULL; gint i; gint nlist; gchar** list = NULL; gint k; nlist = demonMolecule.numberOfValenceElectrons*2-2+1; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; g_object_set_data(G_OBJECT (entry), "Combo",combo); gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.2),-1); return entry; } /***********************************************************************************************/ static GtkWidget *addDeMonChargeToTable(GtkWidget *table, gint i) { GtkWidget* entryCharge = NULL; GtkWidget* comboCharge = NULL; gint nlistCharge = 1; gchar* listCharge[] = {"0"}; add_label_table(table,_("Charge"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryCharge = addComboListToATable(table, listCharge, nlistCharge, i, 2, 1); comboCharge = g_object_get_data(G_OBJECT (entryCharge), "Combo"); gtk_widget_set_sensitive(entryCharge, TRUE); gtk_editable_set_editable(GTK_EDITABLE(entryCharge), FALSE); return comboCharge; } /***********************************************************************************************/ static GtkWidget *addDeMonSpinToTable(GtkWidget *table, gint i) { GtkWidget* entrySpinMultiplicity = NULL; GtkWidget* comboSpinMultiplicity = NULL; gint nlistspinMultiplicity = 1; gchar* listspinMultiplicity[] = {"0"}; add_label_table(table,_("Spin multiplicity"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entrySpinMultiplicity = addComboListToATable(table, listspinMultiplicity, nlistspinMultiplicity, i, 2, 1); comboSpinMultiplicity = g_object_get_data(G_OBJECT (entrySpinMultiplicity), "Combo"); gtk_widget_set_sensitive(entrySpinMultiplicity, TRUE); gtk_editable_set_editable(GTK_EDITABLE(entrySpinMultiplicity), FALSE); g_signal_connect(G_OBJECT(entrySpinMultiplicity),"changed", G_CALLBACK(changedEntrySpinMultiplicity),NULL); return comboSpinMultiplicity; } /***********************************************************************************************/ static GtkWidget *addLabelNumberOfElectronsToTable(GtkWidget *table, gint i, GtkWidget *comboCharge) { GtkWidget* labelNumberOfElectrons = NULL; GtkWidget* hbox = NULL; GtkWidget* entryCharge = GTK_BIN(comboCharge)->child; labelNumberOfElectrons = gtk_label_new(" "); hbox = gtk_hbox_new(0,FALSE); gtk_box_pack_start (GTK_BOX (hbox), labelNumberOfElectrons, FALSE, FALSE, 0); gtk_table_attach(GTK_TABLE(table),hbox,0,0+3,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_SHRINK), 2,2); g_object_set_data(G_OBJECT (entryCharge), "LabelNumberOfElectrons", labelNumberOfElectrons); g_signal_connect(G_OBJECT(entryCharge),"changed", G_CALLBACK(changedEntryCharge),NULL); return labelNumberOfElectrons; } /***********************************************************************************************/ void createDeMonChargeMultiplicityFrame(GtkWidget *box) { GtkWidget* frame; GtkWidget* sep; GtkWidget* labelNumberOfElectrons; GtkWidget* vboxFrame; GtkWidget* comboSpinMultiplicity = NULL; GtkWidget* comboCharge = NULL; GtkWidget *table = NULL; gint i; totalCharge = TotalCharges[0]; spinMultiplicity=SpinMultiplicities[0]; table = gtk_table_new(3,5,FALSE); frame = gtk_frame_new (_("Charge & Multiplicty")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); i = 0; comboCharge = addDeMonChargeToTable(table, i); i = 1; comboSpinMultiplicity = addDeMonSpinToTable(table, i); i = 2; sep = gtk_hseparator_new ();; gtk_table_attach(GTK_TABLE(table),sep,0,0+3,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); i = 3; labelNumberOfElectrons=addLabelNumberOfElectronsToTable(table, i, comboCharge); if(GTK_IS_COMBO_BOX(comboCharge)) g_object_set_data(G_OBJECT (GTK_BIN(comboCharge)->child), "ComboSpinMultiplicity", comboSpinMultiplicity); setComboCharge(comboCharge); setComboSpinMultiplicity(comboSpinMultiplicity); if(GTK_IS_WIDGET(labelNumberOfElectrons)) { gint ne = demonMolecule.numberOfValenceElectrons - totalCharge; gchar buffer[BSIZE]; sprintf(buffer, "Number of electrons = %d",ne); gtk_label_set_text(GTK_LABEL(labelNumberOfElectrons),buffer); } /* activate sensitivity */ /* if(GTK_IS_WIDGET(comboMethod)) setComboMethod(comboMethod); g_object_set_data(G_OBJECT (box), "EntryMethod", GTK_BIN(comboMethod)->child); */ } /************************************************************************************************************/ GabeditSrc250/src/DeMon/DeMon.c0000644000175100017510000001735113130665225016441 0ustar alloucheallouche/* DeMon.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Common/Global.h" #include "../DeMon/DeMonTypes.h" #include "../DeMon/DeMonGlobal.h" #include "../DeMon/DeMonMolecule.h" #include "../DeMon/DeMonKeywords.h" #include "../DeMon/DeMonBasis.h" #include "../DeMon/DeMonGuess.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" static GtkWidget *Wins=NULL; static gboolean newFile = FALSE; /************************************************************************************************************/ static void setColors() { static gboolean first = TRUE; if(!first) return; first = FALSE; demonColorFore.keyWord.red = 65535; demonColorFore.keyWord.green = 0; demonColorFore.keyWord.blue = 0; demonColorBack.keyWord.red = (gushort)(65535/1.2); demonColorBack.keyWord.green = (gushort)(65535/1.2); demonColorBack.keyWord.blue = (gushort)(65535/1.2); demonColorFore.description.red = 0; demonColorFore.description.green = 65535; demonColorFore.description.blue = 65535; demonColorBack.description.red = (gushort)(65535/2.0); demonColorBack.description.green = (gushort)(65535/2.0); demonColorBack.description.blue = (gushort)(65535/2.0); } /************************************************************************************************************/ void destroyWinsDeMon(GtkWidget *win) { destroy(Wins,NULL); Wins = NULL; initDeMonMoleculeButtons(); initDeMonGuessFrame(); /* freeDeMonMolecule(); freeDeMonMpqc(); freeDeMonBasis(); */ } /************************************************************************************************************/ static void toCancelWin(GtkWidget* win,gpointer data) { Cancel_YesNo(win, data, destroy_children); } /************************************************************************************************************/ static void putTitleInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"%c ================================================================\n",'#'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"%c DeMon input file made in Gabedit\n",'#'); // This line is important. Gabedit uses its to know the type of file gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"%c ================================================================\n",'#'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"Title DeMon input file made in Gabedit\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"Visualization molden\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &demonColorFore.keyWord, &demonColorBack.keyWord, buffer, -1); } /************************************************************************************************************/ static void putInfoInTextEditor(GtkWidget *button, gpointer data) { setColors(); if(newFile) { reset_name_files(); ClearText(text); } else { gint nchar; nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); gabedit_text_set_point(GABEDIT_TEXT(text),nchar); } data_modify(TRUE); putTitleInTextEditor(); putDeMonKeywordsInfoInTextEditor(); putDeMonMoleculeInfoInTextEditor(); iprogram = PROG_IS_DEMON; fileopen.command=g_strdup(NameCommandDeMon); gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0); } /*********************************************************************************************/ static GtkWidget* addHboxToTable(GtkWidget* table, gint i, gint j, gint ki, gint kj) { GtkWidget *hbox = gtk_hbox_new(TRUE, 5); gtk_table_attach(GTK_TABLE(table),hbox,j,j+kj,i,i+ki, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); return hbox; } /************************************************************************************************************/ static void demonInputFileWindow(gboolean newInputFile) { GtkWidget *button; GtkWidget *hbox = NULL; GtkWidget *hboxChargeMultiplicity = NULL; GtkWidget *table = gtk_table_new(6,2,FALSE); newFile = newInputFile; initDeMonMolecule(); setDeMonMolecule(); if(demonMolecule.numberOfAtoms <1) { Message( _( "You must initially define your geometry.\n\n" "From the principal Menu select : Geometry/Draw\n" "and draw (or read) your molecule."), _("Error"),TRUE); return; } if(Wins) destroy_children(Wins); Wins= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Wins),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Wins),GTK_WINDOW(Fenetre)); gtk_window_set_title(>K_DIALOG(Wins)->window,_("DeMon input")); gtk_window_set_modal (GTK_WINDOW (Wins), TRUE); init_child(Wins, destroyWinsDeMon,_(" DeMon input ")); g_signal_connect(G_OBJECT(Wins),"delete_event",(GCallback)destroy_children,NULL); gtk_widget_realize(Wins); button = create_button(Wins,_("Cancel")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK( toCancelWin),GTK_OBJECT(Wins)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show (button); button = create_button(Wins,_("OK")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->vbox), table, FALSE, TRUE, 5); hbox =addHboxToTable(table, 0, 0, 1, 1); hboxChargeMultiplicity = hbox; hbox =addHboxToTable(table, 1, 0, 1, 2); initDeMonGuessFrame(); createDeMonKeywordsFrame(Wins, hbox); createDeMonChargeMultiplicityFrame(hboxChargeMultiplicity); hbox =addHboxToTable(table, 2, 0, 1, 2); createDeMonGuessFrame(Wins, hbox); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(putInfoInTextEditor),GTK_OBJECT(Wins)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(destroy_children),GTK_OBJECT(Wins)); gtk_widget_show_all(Wins); demonWin = Wins; } /************************************************************************************************************/ void newDeMon() { demonInputFileWindow(TRUE); } /************************************************************************************************************/ void insertDeMon() { demonInputFileWindow(FALSE); } GabeditSrc250/src/DeMon/Dep.mk0000644000175100017510000000445113130664665016340 0ustar allouchealloucheDeMon.o: DeMon.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../DeMon/DeMonTypes.h \ ../DeMon/DeMonGlobal.h ../DeMon/DeMonMolecule.h ../DeMon/DeMonKeywords.h \ ../DeMon/DeMonBasis.h ../DeMon/DeMonGuess.h ../Utils/UtilsInterface.h \ ../Geometry/GeomGlobal.h ../Geometry/InterfaceGeom.h ../Utils/Utils.h \ ../Utils/AtomsProp.h ../Utils/Constants.h ../Utils/GabeditTextEdit.h DeMonMolecule.o: DeMonMolecule.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../DeMon/DeMonTypes.h \ ../DeMon/DeMonGlobal.h ../DeMon/DeMonKeywords.h ../Geometry/GeomGlobal.h \ ../Geometry/GeomConversion.h ../Geometry/GeomXYZ.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/Constants.h \ ../Utils/GabeditTextEdit.h ../Geometry/InterfaceGeom.h \ ../Common/Windows.h ../Utils/AtomsProp.h DeMonKeywords.o: DeMonKeywords.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../DeMon/DeMonTypes.h \ ../DeMon/DeMonGlobal.h ../DeMon/DeMonMolecule.h ../DeMon/DeMonBasis.h \ ../DeMon/DeMonGuess.h ../Utils/Utils.h ../Utils/UtilsInterface.h \ ../Utils/GabeditTextEdit.h ../Common/Windows.h ../Utils/Constants.h DeMonGuess.o: DeMonGuess.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../DeMon/DeMonTypes.h \ ../DeMon/DeMonGlobal.h ../DeMon/DeMonBasis.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/GabeditTextEdit.h ../Common/Windows.h \ ../Utils/Constants.h DeMonBasis.o: DeMonBasis.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../DeMon/DeMonTypes.h \ ../DeMon/DeMonGlobal.h ../Geometry/GeomGlobal.h \ ../Geometry/GeomConversion.h ../Geometry/GeomXYZ.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/Constants.h \ ../Geometry/InterfaceGeom.h ../Common/Windows.h ../Utils/AtomsProp.h \ ../Utils/GabeditTextEdit.h ../Symmetry/MoleculeSymmetry.h \ ../Symmetry/MoleculeSymmetryInterface.h GabeditSrc250/src/DeMon/DeMonGlobal.h0000644000175100017510000000060113130665225017555 0ustar alloucheallouche #ifndef __GABEDIT_DEMONGLOBAL_H__ #define __GABEDIT_DEMONGLOBAL_H__ GtkWidget* demonWin; DeMonMolecule demonMolecule; DeMonColorFore demonColorFore; DeMonColorBack demonColorBack; DeMonBasis demonBasis; DeMonGuessWaveFunction demonGuessWaveFunction; DeMonFunctional* functionals; DeMonStdFunctional* stdFunctionals; gdouble* sumFunctionals; #endif /* __GABEDIT_DEMONGLOBAL_H__ */ GabeditSrc250/src/DeMon/DeMonKeywords.h0000644000175100017510000000044213130665225020167 0ustar alloucheallouche#ifndef __GABEDIT_DEMONKEYWORDS_H__ #define __GABEDIT_DEMONKEYWORDS_H__ gboolean demonSemiEmperical(); void putDeMonKeywordsInfoInTextEditor(); void createDeMonKeywordsFrame(GtkWidget *win, GtkWidget *box); void setDeMonSCFMethod(gboolean okRHF); #endif /* __GABEDIT_DEMONKEYWORDS_H__ */ GabeditSrc250/src/DeMon/DeMonGuess.h0000644000175100017510000000043613130665225017451 0ustar alloucheallouche#ifndef __GABEDIT_DEMONGUESS_H__ #define __GABEDIT_DEMONGUESS_H__ void initDeMonGuessFrame(); void setSensitiveDeMonGuessMixed(gboolean sensitive); void putDeMonGuessInfoInTextEditor(); void createDeMonGuessFrame(GtkWidget *win, GtkWidget *box); #endif /* __GABEDIT_DEMONGUESS_H__ */ GabeditSrc250/src/DeMon/DeMonBasis.h0000644000175100017510000000073113130665225017422 0ustar alloucheallouche #ifndef __GABEDIT_DEMONBASIS_H__ #define __GABEDIT_DEMONBASIS_H__ void initDeMonBasis(); void freeDeMonBasis(); void addDeMonTypeBasisToTable(GtkWidget *table, gint i, GtkWidget* comboBasis); GtkWidget* addDeMonBasisToTable(GtkWidget *table, gint i); void addDeMonAuxBasisToTable(GtkWidget *table, gint i, GtkWidget* comboMethod, GtkWidget* comboExcited); void putDeMonBasisInfoInTextEditor(); void putDeMonAuxBasisInTextEditor(); #endif /* __GABEDIT_DEMONBASIS_H__ */ GabeditSrc250/src/DeMon/DeMonKeywords.c0000644000175100017510000014623713130665225020177 0ustar alloucheallouche/* DeMonKeywords.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../DeMon/DeMonTypes.h" #include "../DeMon/DeMonGlobal.h" #include "../DeMon/DeMonMolecule.h" #include "../DeMon/DeMonBasis.h" #include "../DeMon/DeMonGuess.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget* comboSCF = NULL; static GtkWidget* combovxc = NULL; static GtkWidget* comboMethod = NULL; static GtkWidget* comboTypeMethod = NULL; static GtkWidget* comboExcited = NULL; static GtkWidget* combotight = NULL; static GtkWidget* combogrid = NULL; static GtkWidget* combodiis = NULL; static GtkWidget* entryShift = NULL; static GtkWidget* entryMixing = NULL; static GtkWidget* entryscfmaxit = NULL; static void setDeMonMethods(); /*************************************************************************************************************/ static gchar* listJobView[] = { "Single Point Energy", "Geometry optimization", "Frequencies", "Frequencies + Thermo", "Transition state", "Equilibrium structure search + Frequencies", "Equilibrium structure search + Frequencies + Thermo", "Transition state + Frequencies", }; static gchar* listJobReal[] = { "SP", "Optimization\n", "Frequencies\n", "Frequencies\nThermo\n", "OptTS\n", "Optimization\nFrequencies\n", "Optimization\nFrequencies\nThermo\n", "OptTS NumFreq\n", }; static guint numberOfJobs = G_N_ELEMENTS (listJobView); static gchar selectedJob[BSIZE]="SP"; /*************************************************************************************************************/ static gchar* listSCFView[] = { "default","unrestricted", "restricted"}; static gchar* listSCFReal[] = { "DEF", "TRUE", "FALSE"}; static guint numberOfSCF = G_N_ELEMENTS (listSCFView); static gchar selectedSCF[BSIZE]="DEF"; /*************************************************************************************************************/ static gchar* listtightView[] = { "Tighten : Default", "No Tighten : The SCF convergence criteria will not be adjusted during an optimization. ", }; static gchar* listtightReal[] = { "NONE", "NOTIGHTEN", }; static guint numberOftight = G_N_ELEMENTS (listtightView); static gchar selectedtight[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listvxcView[] = { "AUXIS : Default. The auxiliary function density is used for the calculation of the exchange-correlation energy and matrix elements of the potential.", "BASIS : The orbital density is used for the calculation of the exchange-correlation energy and matrix elements of the potential.", }; static gchar* listvxcReal[] = { "AUXIS", "BASIS", }; static guint numberOfvxc = G_N_ELEMENTS (listvxcView); static gchar selectedvxc[BSIZE]="AUXIS"; /*************************************************************************************************************/ static gchar* listdiisView[] = { "ON : Default. The DIIS procedure is switched on.", "OFF : The DIIS procedure is switched off. ", }; static gchar* listdiisReal[] = { "NONE", "DIIS OFF \n", }; static guint numberOfdiis = G_N_ELEMENTS (listdiisView); static gchar selecteddiis[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listTypeMethodsView[] = { "Local and gradient corrected functionals", "Hybrid functionals", "Meta-GGA and hybrid meta-GGA's", }; static gchar* listTypeMethodsReal[] = { "DFT", "Hybrid", "Meta-GGA", }; static guint numberOfTypeMethods = G_N_ELEMENTS (listTypeMethodsView); static gchar selectedTypeMethod[BSIZE]="HF"; /*************************************************************************************************************/ static gchar* listHFMethodsView[] = { "HF", }; static gchar* listHFMethodsReal[] = { "HF", }; static guint numberOfHFMethods = G_N_ELEMENTS (listHFMethodsView); /*************************************************************************************************************/ static gchar* listDFTMethodsView[] = { "VWN Dirac exchange with local VWN correlation.", "PZ81 Dirac exchange with local PZ81 correlation.", "PW92 Dirac exchange with local PW92 correlation.", "PW86 PW86 GGA exchange with P86 GGA correlation.", "BLYP B88 GGA exchange with LYP GGA correlation.", "OLYP HC01 GGA exchange with LYP GGA correlation.", "PW91 PW91 GGA exchange and correlation.", "PW91SSF PW91 with full spin scaling function.", "PBE PBE GGA exchange and correlation.", "PBESSF PBE with full spin scaling function.", "PBESOL PBE GGA exchange and correlation for solids.", "XALPHA X_alpha calculation." }; static gchar* listDFTMethodsReal[] = { "VWN\n", "PZ81\n", "PW92\n", "PW86\n", "BLYP\n", "OLYP\n", "PW91\n", "PW91SSF\n", "PBE\n", "PBESSF\n", "PBESOL\n", "XALPHA\n", }; static guint numberOfDFTMethods = G_N_ELEMENTS (listDFTMethodsView); /*************************************************************************************************************/ static gchar* listHybridMethodsView[] = { "B3LYP The popular B3LYP functional (20% HF exchange)", "M06L Minnesota Functional ver.6 (local functional, 0% HF exchange) (BASIS ONLY)", "M06 Minnesota Functional ver.6 (Global hybrid functional, 27% HF exchange) (BASIS ONLY)", "M062X Minnesota Functional ver.6 (Global hybrid functional, 54% HF exchange) (BASIS ONLY)", "M06HF Minnesota Functional ver.6 (Global hybrid functional, 100% HF exchange) (BASIS ONLY)", "M11L Minnesota Functional ver.11 (local functional, 0% HF exchange) (BASIS ONLY)", "MN12 Minnesota Functional ver.12 (local functional, 0% HF exchange) (BASIS ONLY)", }; static gchar* listHybridMethodsReal[] = { "B3LYP\n", "M06L\n", "M06\n", "M062X\n", "M06HF\n", "M11L\n", "MN12\n", }; static guint numberOfHybridMethods = G_N_ELEMENTS (listHybridMethodsView); /*************************************************************************************************************/ static gchar* listMetaGGAMethodsView[] = { "PKZB PKZB meta-GGA exchange and correlation. (BASIS ONLY)", "TPSS TPSS meta-GGA exchange and correlation. (BASIS ONLY)", }; static gchar* listMetaGGAMethodsReal[] = { "PKZB\n", "TPSS\n", }; static guint numberOfMetaGGAMethods = G_N_ELEMENTS (listMetaGGAMethodsView); /*************************************************************************************************************/ static gchar* listDHybridMethodsView[] = { "B2PLYP The new mixture of MP2 and DFT from Grimme", "RI-B2PLYP B2PLYP with RI applied to the MP2 part", }; static gchar* listDHybridMethodsReal[] = { "B2PLYP", "RI-B2PLYP", }; static guint numberOfDHybridMethods = G_N_ELEMENTS (listDHybridMethodsView); /*************************************************************************************************************/ static gchar* listMP2MethodsView[] = { "MP2", "RI-MP2", }; static gchar* listMP2MethodsReal[] = { "MP2", "RI-MP2", }; static guint numberOfMP2Methods = G_N_ELEMENTS (listMP2MethodsView); /*************************************************************************************************************/ static gchar* listHighLevelSingleRefMethodsView[] = { "CCSD Coupled cluster singles and doubles", "CCSD(T) Same with perturbative triples correction", }; static gchar* listHighLevelSingleRefMethodsReal[] = { "CCSD", "CCSD(T)", }; static guint numberOfHighLevelSingleRefMethods = G_N_ELEMENTS (listHighLevelSingleRefMethodsView); /*************************************************************************************************************/ static gchar* listSemiEmpMethodsView[] = { "AM1", "PM3", }; static gchar* listSemiEmpMethodsReal[] = { "AM1", "PM3", }; static guint numberOfSemiEmpMethods = G_N_ELEMENTS (listSemiEmpMethodsView); /*************************************************************************************************************/ static gchar selectedMethod[BSIZE]="HF"; static gchar** listMethodsView = listHybridMethodsView; static gchar** listMethodsReal = listHybridMethodsReal; static guint numberOfMethods = G_N_ELEMENTS (listHybridMethodsView); /*************************************************************************************************************/ static gchar* listScfConvergenceView[] = { "Default", "LooseSCF : loose SCF convergence", "TightSCF : tight SCF convergence", "VeryTightSCF :very tight SCF convergence", }; static gchar* listScfConvergenceReal[] = { "NONE", "TOL=1.E-6", "TOL=1.E-8", "TOL=1.E-10", }; static guint numberOfScfConvergence = G_N_ELEMENTS (listScfConvergenceView); static gchar selectedScfConvergence[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listgridView[] = { "Adaptive : Default", "Medium : Medium grid accuracy is requested", "Coarse : Coarse grid accuracy is requested.", "Fine : Fine grid accuracy is requested.", }; static gchar* listgridReal[] = { "NONE", "GRID FIXED MEDIUM\n", "GRID FIXED COARSE\n", "GRID FIXED FINE\n", }; static guint numberOfgrid = G_N_ELEMENTS (listgridView); static gchar selectedgrid[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listNothingExcitedView[] = { "Nothing", }; static gchar* listNothingExcitedReal[] = { "NONE", }; static guint numberOfNothingExcited = G_N_ELEMENTS (listNothingExcitedView); /*************************************************************************************************************/ static gchar* listSemiEmpExcitedView[] = { "Nothing", "CIS", }; static gchar* listSemiEmpExcitedReal[] = { "NONE", "CIS", }; static guint numberOfSemiEmpExcited = G_N_ELEMENTS (listSemiEmpExcitedView); /*************************************************************************************************************/ static gchar* listHFExcitedView[] = { "Nothing", "CIS", "CIS(D)", }; static gchar* listHFExcitedReal[] = { "NONE", "CIS", "CIS(D)", }; static guint numberOfHFExcited = G_N_ELEMENTS (listHFExcitedView); /*************************************************************************************************************/ static gchar* listDFTExcitedView[] = { "Nothing", "TD-DFT", }; static gchar* listDFTExcitedReal[] = { "NONE", "TD-DFT", }; static guint numberOfDFTExcited = G_N_ELEMENTS (listDFTExcitedView); /*************************************************************************************************************/ static gchar selectedExcited[BSIZE]="NONE"; static gchar** listExcitedView = listNothingExcitedView; static gchar** listExcitedReal = listNothingExcitedReal; static guint numberOfExcited = G_N_ELEMENTS (listNothingExcitedView); /*************************************************************************************************************/ static void putDeMonExcitedInfoInTextEditor() { gchar buffer[BSIZE]; if(!strcmp(selectedExcited,"NONE"))return; sprintf(buffer,"Excitation "); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &demonColorFore.keyWord, &demonColorBack.keyWord, buffer, -1); /* sprintf(buffer," nroots %d # the number of excited states to be calculated.\n",8); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer," maxdim %d # the maximum dimension of the expansion space in the Davidson procedure.\n",30); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); */ sprintf(buffer," # TDA TammDanCoff true Tamm-Dancoff approximation for non-hybride\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); } /*************************************************************************************************************/ static void setDeMonExcited() { GtkTreeIter iter; GtkTreeIter iter0; gint i; if(strcmp(selectedTypeMethod,"HF")==0) { listExcitedView = listHFExcitedView; listExcitedReal = listHFExcitedReal; numberOfExcited = numberOfHFExcited; } else if(strcmp(selectedTypeMethod,"DFT")==0) { listExcitedView = listDFTExcitedView; listExcitedReal = listDFTExcitedReal; numberOfExcited = numberOfDFTExcited; } else if(strcmp(selectedTypeMethod,"Hybrid")==0) { listExcitedView = listDFTExcitedView; listExcitedReal = listDFTExcitedReal; numberOfExcited = numberOfDFTExcited; } else if(strcmp(selectedTypeMethod,"Meta-GGA")==0) { listExcitedView = listDFTExcitedView; listExcitedReal = listDFTExcitedReal; numberOfExcited = numberOfDFTExcited; } else if(strcmp(selectedTypeMethod,"D-Hybrid")==0) { listExcitedView = listDFTExcitedView; listExcitedReal = listDFTExcitedReal; numberOfExcited = numberOfDFTExcited; } else if(strcmp(selectedTypeMethod,"SemiEmp")==0 && strstr(selectedMethod,"/S")) { listExcitedView = listSemiEmpExcitedView; listExcitedReal = listSemiEmpExcitedReal; numberOfExcited = numberOfSemiEmpExcited; } else { listExcitedView = listNothingExcitedView; listExcitedReal = listNothingExcitedReal; numberOfExcited = numberOfNothingExcited; } if (comboExcited && gtk_combo_box_get_active_iter (GTK_COMBO_BOX(comboExcited), &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(GTK_COMBO_BOX(comboExcited)); GtkTreeStore *store = GTK_TREE_STORE(model); gtk_tree_store_clear(store); for(i=0;i #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../FireFly/FireFlyTypes.h" #include "../FireFly/FireFlyGlobal.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget *buttonDiffuseL = NULL; static GtkWidget *buttonDiffuseS = NULL; static GtkWidget *basisFrame = NULL; static GtkWidget *comboBasisType = NULL; /*************************************************************************************************************/ static gchar* listBasisSetView[] = { "MINI", "MIDI", "STO-2G", "STO-3G", "STO-4G", "STO-5G", "STO-6G", "3-21G", "6-21G", "4-31G", "5-31G", "6-31G", "6-311G", "Double Zeta Valance", "Dunning/Hay DZ", "Triple Zeta Valance", "Mclean/Chandler", "SBKJC Valance", "Hay/Wadt Valance" }; static gchar* listBasisSetReal[] = { "GBASIS=MINI", "GBASIS=MIDI", "GBASIS=STO NGAUSS=2", "GBASIS=STO NGAUSS=3", "GBASIS=STO NGAUSS=4", "GBASIS=STO NGAUSS=5", "GBASIS=STO NGAUSS=6", "GBASIS=N21 NGAUSS=3", "GBASIS=N21 NGAUSS=6", "GBASIS=N31 NGAUSS=4", "GBASIS=N31 NGAUSS=5", "GBASIS=N31 NGAUSS=6", "GBASIS=N311 NGAUSS=6", "GBASIS=DZV", "GBASIS=DH", "GBASIS=TZV", "GBASIS=MC", "GBASIS=SBKJC", "GBASIS=HW" }; static guint numberOfBasisSet = G_N_ELEMENTS (listBasisSetView); static gchar selectedBasisSet[BSIZE]="MINI"; /*************************************************************************************************************/ static gchar* listBasisTypeView[] = { N_("Default"),"Cartezian", "Spherical" }; static gchar* listBasisTypeReal[] = { "NONE","d5=.false.", "d5=.true." }; static guint numberOfBasisType = G_N_ELEMENTS (listBasisTypeView); static gchar selectedBasisType[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listBasisDPolView[] = { "0","1", "2","3"}; static gchar* listBasisDPolReal[] = { "NONE","NDFUNC=1", "NDFUNC=2","NDFUNC=3" }; static guint numberOfBasisDPol = G_N_ELEMENTS (listBasisDPolView); static gchar selectedBasisDPol[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listBasisFPolView[] = { "0","1"}; static gchar* listBasisFPolReal[] = { "NONE","NFFUNC=1"}; static guint numberOfBasisFPol = G_N_ELEMENTS (listBasisFPolView); static gchar selectedBasisFPol[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listBasisPPolView[] = { "0","1", "2","3"}; static gchar* listBasisPPolReal[] = { "NONE","NPFUNC=1", "NPFUNC=2","NPFUNC=3" }; static guint numberOfBasisPPol = G_N_ELEMENTS (listBasisPPolView); static gchar selectedBasisPPol[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listBasisPolarView[] = { N_("Default"),"Pople", "Pople N311","Dunning","Huzinaga","Hondo7"}; static gchar* listBasisPolarReal[] = { "NONE","POLAR=POPLE", "POLAR=POPN311","POLAR=DUNNING","POLAR=HUZINAGA","POLAR=HONDO7" }; static guint numberOfBasisPolar = G_N_ELEMENTS (listBasisPolarView); static gchar selectedBasisPolar[BSIZE]="NONE"; /*************************************************************************************************************/ void initFireFlyBasisFrame() { basisFrame = NULL; } /*************************************************************************************************************/ void setSensitiveFireFlyBasisFrame(gboolean sensitive) { if(!basisFrame) return; gtk_widget_set_sensitive(basisFrame, sensitive); } /*************************************************************************************************************/ static void putFireFlyBasisDiffuseFunctions() { if(!GTK_TOGGLE_BUTTON (buttonDiffuseL)->active && !GTK_TOGGLE_BUTTON (buttonDiffuseS)->active) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$BASIS",-1); if(GTK_TOGGLE_BUTTON (buttonDiffuseL)->active) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " DIFFSP=.TRUE.",-1); if(GTK_TOGGLE_BUTTON (buttonDiffuseS)->active) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " DIFFS=.TRUE.",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } /************************************************************************************************************/ static void putFireFlyBasisPolInfoInTextEditor() { gchar* s=NULL; if( strcmp(selectedBasisDPol,"NONE")==0 && strcmp(selectedBasisPPol,"NONE")==0 && strcmp(selectedBasisPPol,"NONE")==0 && strcmp(selectedBasisPolar,"NONE")==0 ) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$BASIS",-1); s=selectedBasisDPol; if(strcmp(s,"NONE")!=0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, s,-1); } s=selectedBasisFPol; if(strcmp(s,"NONE")!=0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, s,-1); } s=selectedBasisPPol; if(strcmp(s,"NONE")!=0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, s,-1); } s=selectedBasisPolar; if(strcmp(s,"NONE")!=0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, s,-1); } gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } /*************************************************************************************************************/ static void putFireFlyBasisSetInfoInTextEditor() { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$BASIS",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedBasisSet,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); if(strcmp(selectedBasisSet,"GBASIS=SBKJC")==0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ECP=SBKJC",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } if(strcmp(selectedBasisSet,"GBASIS=HW")==0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ECP=HW",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } } /*************************************************************************************************************/ static void putFireFlyBasisTypeInfoInTextEditor() { if(strcmp(selectedBasisType,"NONE")==0)return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedBasisType,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } /*************************************************************************************************************/ void putFireFlyBasisInfoInTextEditor() { putFireFlyBasisSetInfoInTextEditor(); putFireFlyBasisTypeInfoInTextEditor(); putFireFlyBasisPolInfoInTextEditor(); putFireFlyBasisDiffuseFunctions(); } /************************************************************************************************************/ static void setFireFlyBasisType() { GtkTreeIter iter; if (!comboBasisType) return; if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX(comboBasisType), &iter)) return; if (comboBasisType && GTK_IS_COMBO_BOX(comboBasisType)) { if(strstr(selectedBasisSet,"CC") || strstr(selectedBasisSet,"PC") ) gtk_combo_box_set_active(GTK_COMBO_BOX(comboBasisType), 2); else gtk_combo_box_set_active(GTK_COMBO_BOX(comboBasisType), 0); } } /************************************************************************************************************/ static void traitementBasisSet (GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; gchar* res = NULL; gint i; /* gchar* s;*/ if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } for(i=0;i Dep.mk -include Dep.mk GabeditSrc250/src/FireFly/FireFlyMolecule.c0000644000175100017510000013332513130665225021023 0ustar alloucheallouche/* FireFlyMolecule.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../FireFly/FireFlyTypes.h" #include "../FireFly/FireFlyGlobal.h" #include "../FireFly/FireFlyControl.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" /************************************************************************************************************/ typedef enum { GABEDIT = 0, GABFIXED }TypeOfSymmetryButton; static gboolean symReduction = TRUE; static GtkWidget* labelSymmetry = NULL; static GtkWidget *buttonTolerance = NULL; static GtkWidget *buttonSymWithCalc = NULL; /************************************************************************************************************/ static gint totalCharge = 0; static gint spinMultiplicity=1; /************************************************************************************************************/ gint getFireFlyMultiplicity() { return spinMultiplicity; } /************************************************************************************************************/ void initFireFlyMoleculeButtons() { labelSymmetry = NULL; buttonTolerance = NULL; buttonSymWithCalc = NULL; } /************************************************************************************************************/ void initFireFlyMolecule() { fireflyMolecule.listOfAtoms = NULL; fireflyMolecule.totalNumberOfElectrons = 0; fireflyMolecule.numberOfValenceElectrons = 0; fireflyMolecule.numberOfAtoms = 0; fireflyMolecule.groupSymmetry = NULL; } /************************************************************************************************************/ void freeFireFlyMolecule() { static gboolean first = TRUE; if(first) { initFireFlyMolecule(); first = FALSE; return; } if(fireflyMolecule.listOfAtoms) g_free(fireflyMolecule.listOfAtoms); if(fireflyMolecule.groupSymmetry) g_free(fireflyMolecule.groupSymmetry); initFireFlyMolecule(); } /************************************************************************************************************/ static gint setFireFlyMoleculeFromSXYZ(gint nAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z) { gint n; FireFlyAtom* atomList = NULL; fireflyMolecule.listOfAtoms = NULL; fireflyMolecule.numberOfAtoms = 0; if(nAtoms<1) return 1; fireflyMolecule.listOfAtoms = (FireFlyAtom*)g_malloc(sizeof(FireFlyAtom)*(nAtoms)); if(fireflyMolecule.listOfAtoms==NULL) return -1; fireflyMolecule.numberOfAtoms = nAtoms; atomList = fireflyMolecule.listOfAtoms; for(n=0; nposition[0] = X[n]; atomList->position[1] = Y[n]; atomList->position[2] = Z[n]; atomList->symbol = g_strdup(symbols[n]); atomList++; } return 0; } /************************************************************************************************************/ static void setXYZFromGeomXYZ(gint i, gdouble* x, gdouble* y, gdouble *z) { if(!test(GeomXYZ[i].X)) *x = get_value_variableXYZ(GeomXYZ[i].X); else *x = atof(GeomXYZ[i].X); if(!test(GeomXYZ[i].Y)) *y = get_value_variableXYZ(GeomXYZ[i].Y); else *y = atof(GeomXYZ[i].Y); if(!test(GeomXYZ[i].Z)) *z = get_value_variableXYZ(GeomXYZ[i].Z); else *z = atof(GeomXYZ[i].Z); if(Units==0) { *x *= BOHR_TO_ANG; *y *= BOHR_TO_ANG; *z *= BOHR_TO_ANG; } } /************************************************************************************************************/ static void setFireFlyFormatGroup(gchar* pointGroupSymbol, gchar* fireflyName) { if(!pointGroupSymbol) return; if(strlen(pointGroupSymbol)<2 || strcmp(pointGroupSymbol,"C1")==0) { sprintf(fireflyName,"%s",pointGroupSymbol); return; } if(strcmp(pointGroupSymbol,"Cinfv")==0) { sprintf(fireflyName,"Cnv 4"); return; } if(strcmp(pointGroupSymbol,"Dinfh")==0) { sprintf(fireflyName,"Dnh 4"); return; } if(isdigit(pointGroupSymbol[1])) { gchar a[3]; sprintf(a,"%c",pointGroupSymbol[1]); gint n=atoi(a); if(pointGroupSymbol[0] !='S') { if(strlen(pointGroupSymbol)>2) sprintf(fireflyName,"%cn%c %d",pointGroupSymbol[0],pointGroupSymbol[2],n); else sprintf(fireflyName,"%cn %d",pointGroupSymbol[0],n); } else sprintf(fireflyName,"%c2n %d",pointGroupSymbol[0],n/2); return; } sprintf(fireflyName,"%s",pointGroupSymbol); return; } /************************************************************************************************************/ static gchar* computeGroupSymmetry() { gint i; gchar** symbols = NULL; gdouble* X = NULL; gdouble* Y = NULL; gdouble* Z = NULL; gint numberOfAtoms = fireflyMolecule.numberOfAtoms; gchar pointGroupSymbol[BSIZE]; gchar message[BSIZE]; gint maximalOrder = 8; gdouble principalAxisTolerance = getTolerancePrincipalAxis(); gdouble positionTolerance = getTolerancePosition(); if(numberOfAtoms<1) return NULL; symbols = (gchar**)g_malloc(sizeof(gchar*)*(numberOfAtoms)); if(symbols == NULL) return NULL; X = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(X == NULL) return NULL; Y = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Y == NULL) return NULL; Z = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Z == NULL) return NULL; for(i=0; iposition[k]-atomList->position[k+1]; dd += xx*xx; } if(i==0) d = dd; else if(d>dd) d= dd; atomList++; } d = sqrt(d); return d; } */ /*************************************************************************************************************/ /* static void setFirstAtomToXAxis(gint numberOfAtoms, gdouble* X, gdouble* Y, gdouble*Z) { gdouble d; gdouble s; gdouble c; gint i; gdouble positionTolerance = getTolerancePosition(); if(numberOfAtoms<1) return; d = X[0]*X[0]+Y[0]*Y[0]; if(d<1e-10) return; d = sqrt(d); if(positionTolerance<0) positionTolerance= getMinDistance()/50; s = -Y[0]/d; c = +X[0]/d; for (i=0;iNUMBER_ENTRY_0 && !test(Geom[i].R)) k++; if(Geom[i].Nentry>NUMBER_ENTRY_R && !test(Geom[i].Angle)) k++; if(Geom[i].Nentry>NUMBER_ENTRY_ANGLE && !test(Geom[i].Dihedral)) k++; } return k; } /*************************************************************************************************************/ static void putFireFlyMoleculeZMatInTextEditor() { gchar buffer[BSIZE]; gint i,k,l; gint nzvar = 0; gint nrzvar = 0; if(MethodeGeom==GEOM_IS_XYZ)return; if(NcentersZmat<2)return; if(NcentersZmat==2) nzvar = 3*NcentersZmat-5; else nzvar = 3*NcentersZmat-6; nrzvar = getRealNumberZmatVariables(); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$CONTRL",-1); sprintf(buffer," COORD=ZMT NZVAR=%d ",nzvar); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$ZMAT\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " IZMAT(1)=\n ",-1); for(i=0;iNUMBER_ENTRY_0) { sprintf(buffer,"1,%d,%s, ",i+1,Geom[i].NR); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if((i+1)%3==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); } } if(NcentersZmat%3!=0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); for(i=0;iNUMBER_ENTRY_R) { sprintf(buffer,"2,%d,%s,%s, ",i+1,Geom[i].NR,Geom[i].NAngle); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if((i+1)%3==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); } } if(NcentersZmat%3!=0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); for(i=0;iNUMBER_ENTRY_ANGLE) { sprintf(buffer,"3,%d,%s,%s,%s, ",i+1,Geom[i].NR,Geom[i].NAngle,Geom[i].NDihedral); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if((i+1)%3==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); } } gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); if(nrzvar==nzvar) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$STATPT\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " IFREEZ(1)=",-1); k = 0; l = 0; for(i=0;iNUMBER_ENTRY_0) { k++; if(test(Geom[i].R)) { l++; sprintf(buffer,"%d, ",k); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(l%5==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); } } } if(l!=0 && l%5!=0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); l = 0; for(i=0;iNUMBER_ENTRY_R) { k++; if(test(Geom[i].Angle)) { l++; sprintf(buffer,"%d, ",k); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(l%5==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); } } } if(l!=0 && l%5!=0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); l = 0; for(i=0;iNUMBER_ENTRY_ANGLE) { k++; if(test(Geom[i].Dihedral)) { l++; sprintf(buffer,"%d, ",k); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(l%5==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); } } } gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } /************************************************************************************************************/ static void setEpsToZero(gint n, gdouble* X, gdouble* Y, gdouble* Z, gdouble eps) { gint i; if(n<1) return; if(!X) return; if(!Y) return; if(!Z) return; if(eps<=0) eps = 1e-3; for(i=0;i1 && strcmp(pointGroupSymbol,"C1")!=0 && isdigit(pointGroupSymbol[1])) setFirstAtomToXAxis(numberOfAtoms, X, Y, Z); */ setFireFlyFormatGroup(fireflyMolecule.groupSymmetry,g); } else { sprintf(g,"C1"); } if(strcmp(g,"C1")==0 || MethodeGeom!=GEOM_IS_XYZ) sprintf(buffer,"%s\n","C1"); else sprintf(buffer,"%s\n\n",g); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(MethodeGeom==GEOM_IS_XYZ) { if(buffer[0]=='T') { gdouble vect[3] = {-1.0,1.0,0.0}; vect[0] = 0.0; vect[1] = 0.0; vect[2] = 1.0; build_rotation_about_an_axis(vect, -135, numberOfAtoms, X, Y,Z); setEpsToZero(numberOfAtoms, X, Y, Z, positionTolerance); vect[0] = -1.0; vect[1] = 1.0; vect[2] = 0.0; build_rotation_about_an_axis(vect, atan(sqrt(2.0))*180/PI, numberOfAtoms, X, Y,Z); setEpsToZero(numberOfAtoms, X, Y, Z, positionTolerance); } if(strlen(buffer)>2 && buffer[0]=='D' && buffer[2]=='d') { gdouble vect[3] = {0.0,0.0,1.0}; gchar* t = strstr(buffer,"d")+1; gint o = 1; if(t && atoi(t)>0) o = atoi(t); build_rotation_about_an_axis(vect, 180/2/o, numberOfAtoms, X, Y,Z); setEpsToZero(numberOfAtoms, X, Y, Z, positionTolerance); } if(strlen(buffer)>2 && buffer[0]=='D' && buffer[2]=='h') { gdouble vect[3] = {0.0,0.0,1.0}; gchar* t = strstr(buffer,"h")+1; gint o = 1; if(t && atoi(t)>0) o = atoi(t); build_rotation_about_an_axis(vect, 2*180/2/o, numberOfAtoms, X, Y,Z); setEpsToZero(numberOfAtoms, X, Y, Z, positionTolerance); } for (i=0;iNUMBER_ENTRY_ANGLE) { sprintf(buffer,"%s %s %s %s %s %s %s\n", Geom[i].Symb, Geom[i].NR,Geom[i].R, Geom[i].NAngle,Geom[i].Angle, Geom[i].NDihedral,Geom[i].Dihedral); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } else if(Geom[i].Nentry>NUMBER_ENTRY_R) { sprintf(buffer,"%s %s %s %s %s\n", Geom[i].Symb, Geom[i].NR,Geom[i].R, Geom[i].NAngle,Geom[i].Angle ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } else if(Geom[i].Nentry>NUMBER_ENTRY_0) { sprintf(buffer,"%s %s %s\n", Geom[i].Symb, Geom[i].NR,Geom[i].R ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } else { sprintf(buffer,"%s \n", Geom[i].Symb ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } } if(NVariables>0 && getRealNumberZmatVariables()>0) { for(i=0;iactive ) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " NOSYM=1 ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } /************************************************************************************************************/ static void putBeginGeometryInTextEditor() { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$DATA\n",-1); } /************************************************************************************************************/ static void putTitleGeometryInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"Molecule specification\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /************************************************************************************************************/ static void putEndGeometryInTextEditor() { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } /************************************************************************************************************/ void putFireFlyGeometryInfoInTextEditor() { putNoSymmetryWithCalcul(); if(MethodeGeom!=GEOM_IS_XYZ) putFireFlyMoleculeZMatInTextEditor(); else putFireFlyMoleculeXYZFixedInTextEditor(); putBeginGeometryInTextEditor(); putTitleGeometryInTextEditor(); putFireFlyMoleculeInTextEditor(); putEndGeometryInTextEditor(); } /**************************************************************************************************************************************/ static void activateRadioButton(GtkWidget *button, gpointer data) { gint* type = NULL; GtkWidget* label = NULL; GtkWidget* comboSymmetry = NULL; gchar buffer[BSIZE]; if(!GTK_IS_WIDGET(button)) return; type = g_object_get_data(G_OBJECT (button), "Type"); label = g_object_get_data(G_OBJECT (button), "Label"); comboSymmetry = g_object_get_data(G_OBJECT (button), "ComboSymmetry"); if(type) { setFireFlyMolecule(); if( GTK_TOGGLE_BUTTON (button)->active && *type == GABFIXED) { if(fireflyMolecule.groupSymmetry) g_free(fireflyMolecule.groupSymmetry); fireflyMolecule.groupSymmetry = g_strdup("C1"); symReduction = FALSE; if(GTK_IS_WIDGET(comboSymmetry)) gtk_widget_set_sensitive(comboSymmetry, TRUE); } if(GTK_TOGGLE_BUTTON (button)->active && *type == GABEDIT) { /* groupSymmetry define in setFireFlyMolecule */ symReduction = TRUE; if(GTK_IS_WIDGET(comboSymmetry)) gtk_widget_set_sensitive(comboSymmetry, FALSE); } if(label) gtk_label_set_text(GTK_LABEL(label)," "); if(GTK_IS_WIDGET(buttonTolerance) && symReduction ) gtk_widget_set_sensitive(buttonTolerance, TRUE); if(GTK_IS_WIDGET(buttonTolerance) && !symReduction ) gtk_widget_set_sensitive(buttonTolerance, FALSE); if(GTK_TOGGLE_BUTTON (button)->active && label && symReduction) { sprintf(buffer,"%s group",fireflyMolecule.groupSymmetry); gtk_label_set_text(GTK_LABEL(label),buffer); } } } /************************************************************************************************************/ static GtkWidget* addRadioButtonToATable(GtkWidget* table, GtkWidget* friendButton, gchar* label, gint i, gint j, gint k) { GtkWidget *newButton; if(friendButton) newButton = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (friendButton)), label); else newButton = gtk_radio_button_new_with_label( NULL, label); gtk_table_attach(GTK_TABLE(table),newButton,j,j+k,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); g_object_set_data(G_OBJECT (newButton), "Label",NULL); g_object_set_data(G_OBJECT (newButton), "Type",NULL); return newButton; } /**************************************************************************************************************************************/ static void resetTolerance(GtkWidget *win) { gchar buffer[BSIZE]; setFireFlyMolecule(); if(labelSymmetry) { sprintf(buffer,"%s group",fireflyMolecule.groupSymmetry); gtk_label_set_text(GTK_LABEL(labelSymmetry),buffer); } } /**************************************************************************************************************************************/ static void activateToleranceButton(GtkWidget *button, gpointer data) { if(!GTK_IS_WIDGET(button)) return; createToleranceWindow(fireflyWin, resetTolerance); } /********************************************************************************/ static void setComboSymmetry(GtkWidget *comboSymmetry) { GList *glist = NULL; glist = g_list_append(glist,"C1"); glist = g_list_append(glist,"Cs"); glist = g_list_append(glist,"Ci"); glist = g_list_append(glist,"C2"); glist = g_list_append(glist,"C3"); glist = g_list_append(glist,"C4"); glist = g_list_append(glist,"C5"); glist = g_list_append(glist,"C6"); glist = g_list_append(glist,"C7"); glist = g_list_append(glist,"C8"); glist = g_list_append(glist,"C2v"); glist = g_list_append(glist,"C3v"); glist = g_list_append(glist,"C4v"); glist = g_list_append(glist,"C5v"); glist = g_list_append(glist,"C6v"); glist = g_list_append(glist,"C7v"); glist = g_list_append(glist,"C8v"); glist = g_list_append(glist,"C2h"); glist = g_list_append(glist,"C3h"); glist = g_list_append(glist,"C4h"); glist = g_list_append(glist,"C5h"); glist = g_list_append(glist,"C6h"); glist = g_list_append(glist,"C7h"); glist = g_list_append(glist,"C8h"); glist = g_list_append(glist,"D2"); glist = g_list_append(glist,"D3"); glist = g_list_append(glist,"D4"); glist = g_list_append(glist,"D5"); glist = g_list_append(glist,"D6"); glist = g_list_append(glist,"D7"); glist = g_list_append(glist,"D8"); glist = g_list_append(glist,"D2h"); glist = g_list_append(glist,"D3h"); glist = g_list_append(glist,"D4h"); glist = g_list_append(glist,"D5h"); glist = g_list_append(glist,"D6h"); glist = g_list_append(glist,"D7h"); glist = g_list_append(glist,"D8h"); glist = g_list_append(glist,"D2d"); glist = g_list_append(glist,"D3d"); glist = g_list_append(glist,"D4d"); glist = g_list_append(glist,"D5d"); glist = g_list_append(glist,"D6d"); glist = g_list_append(glist,"D7d"); glist = g_list_append(glist,"D8d"); glist = g_list_append(glist,"S2"); glist = g_list_append(glist,"S4"); glist = g_list_append(glist,"S6"); glist = g_list_append(glist,"S8"); glist = g_list_append(glist,"S10"); glist = g_list_append(glist,"S12"); glist = g_list_append(glist,"S14"); glist = g_list_append(glist,"S16"); glist = g_list_append(glist,"T"); glist = g_list_append(glist,"Td"); glist = g_list_append(glist,"Th"); glist = g_list_append(glist,"O"); glist = g_list_append(glist,"Oh"); gtk_combo_box_entry_set_popdown_strings( comboSymmetry, glist) ; g_list_free(glist); } /**********************************************************************/ static void changedEntrySymmetry(GtkWidget *entry, gpointer data) { G_CONST_RETURN gchar* entryText = NULL; if(!GTK_IS_WIDGET(entry)) return; entryText = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(entryText)<1)return; if(fireflyMolecule.groupSymmetry) g_free(fireflyMolecule.groupSymmetry); fireflyMolecule.groupSymmetry = g_strdup(entryText); if(strstr(entryText,"C1")) symReduction = FALSE; else symReduction = FALSE; } /************************************************************************************************************/ void createFireFlySymmetryFrame(GtkWidget *win, GtkWidget *box) { GtkWidget* button; GtkWidget* buttonGabedit; GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget* sep; GtkWidget* comboSymmetry = NULL; GtkWidget* entrySymmetry = NULL; GtkWidget* label = gtk_label_new(" "); GtkWidget *table = gtk_table_new(4,3,FALSE); static TypeOfSymmetryButton typeOfSymmetry[] = { GABEDIT, GABFIXED}; gchar* list[] = {"C1"}; frame = gtk_frame_new ("Symmetry"); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); comboSymmetry = create_combo_box_entry(list, 1, TRUE, -1, -1); entrySymmetry = GTK_BIN(comboSymmetry)->child; gtk_widget_set_sensitive(entrySymmetry, FALSE); if(fireflyMolecule.groupSymmetry) g_free(fireflyMolecule.groupSymmetry); fireflyMolecule.groupSymmetry = g_strdup("C1"); button = addRadioButtonToATable(table, NULL, _("Detected by Gabedit"), 0, 0, 1); g_object_set_data(G_OBJECT (button), "Label",label); g_object_set_data(G_OBJECT (button), "Type",&typeOfSymmetry[GABEDIT]); g_object_set_data(G_OBJECT (button), "ComboSymmetry",comboSymmetry); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); add_widget_table(table, label, 0, 1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE); buttonGabedit=button; buttonTolerance = create_button(win,_("Tolerance")); add_widget_table(table, buttonTolerance, 0, 2); g_signal_connect(G_OBJECT(buttonTolerance),"clicked", G_CALLBACK(activateToleranceButton),NULL); labelSymmetry = label; gtk_widget_set_sensitive(buttonTolerance, FALSE); button = addRadioButtonToATable(table, button, _("Fixed Symmetry"), 1, 0,1); g_signal_connect(G_OBJECT(entrySymmetry),"changed", G_CALLBACK(changedEntrySymmetry),NULL); setComboSymmetry(comboSymmetry); gtk_table_attach(GTK_TABLE(table),comboSymmetry,1,1+2,1,1+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); g_object_set_data(G_OBJECT (button), "Label",label); g_object_set_data(G_OBJECT (button), "Type",&typeOfSymmetry[GABFIXED]); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE); g_object_set_data(G_OBJECT (button), "ComboSymmetry",comboSymmetry); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); gtk_widget_set_sensitive(comboSymmetry, FALSE); sep = gtk_hseparator_new ();; gtk_table_attach(GTK_TABLE(table),sep,0,0+3,2,2+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); buttonSymWithCalc = gtk_check_button_new_with_label (_("Symmetry not used during calculation")); gtk_table_attach(GTK_TABLE(table),buttonSymWithCalc,0,0+3,3,3+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonGabedit), FALSE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonGabedit), TRUE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); } /********************************************************************************/ static void setSpinMultiplicityComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity, gint spin) { GtkWidget *entry = NULL; gchar* t = NULL; if(!comboSpinMultiplicity) return; entry = GTK_BIN (comboSpinMultiplicity)->child; t = g_strdup_printf("%d",spin); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /************************************************************************************************************/ static void setComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity) { GList *glist = NULL; gint i; gint nlist = 0; gchar** list = NULL; gint k; gint kinc; gint ne = fireflyMolecule.numberOfValenceElectrons - totalCharge; if(ne%2==0) nlist = ne/2+1; else nlist = (ne+1)/2; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; t = g_strdup_printf("%d",charge); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /********************************************************************************/ static void setComboCharge(GtkWidget *comboCharge) { GList *glist = NULL; gint i; gint nlist; gchar** list = NULL; gint k; nlist = fireflyMolecule.numberOfValenceElectrons*2-2+1; if(nlist<1) return; if(nlist==1) nlist++; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; g_object_set_data(G_OBJECT (entry), "Combo",combo); gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.2),-1); return entry; } /***********************************************************************************************/ static GtkWidget *addFireFlyChargeToTable(GtkWidget *table, gint i) { GtkWidget* entryCharge = NULL; GtkWidget* comboCharge = NULL; gint nlistCharge = 1; gchar* listCharge[] = {"0"}; add_label_table(table,_("Charge"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryCharge = addComboListToATable(table, listCharge, nlistCharge, i, 2, 1); comboCharge = g_object_get_data(G_OBJECT (entryCharge), "Combo"); gtk_widget_set_sensitive(entryCharge, FALSE); return comboCharge; } /***********************************************************************************************/ static GtkWidget *addFireFlySpinToTable(GtkWidget *table, gint i) { GtkWidget* entrySpinMultiplicity = NULL; GtkWidget* comboSpinMultiplicity = NULL; gint nlistspinMultiplicity = 1; gchar* listspinMultiplicity[] = {"0"}; add_label_table(table,_("Spin multiplicity"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entrySpinMultiplicity = addComboListToATable(table, listspinMultiplicity, nlistspinMultiplicity, i, 2, 1); comboSpinMultiplicity = g_object_get_data(G_OBJECT (entrySpinMultiplicity), "Combo"); gtk_widget_set_sensitive(entrySpinMultiplicity, FALSE); g_signal_connect(G_OBJECT(entrySpinMultiplicity),"changed", G_CALLBACK(changedEntrySpinMultiplicity),NULL); return comboSpinMultiplicity; } /***********************************************************************************************/ static GtkWidget *addLabelNumberOfElectronsToTable(GtkWidget *table, gint i, GtkWidget *comboCharge) { GtkWidget* labelNumberOfElectrons = NULL; GtkWidget* hbox = NULL; GtkWidget* entryCharge = GTK_BIN(comboCharge)->child; labelNumberOfElectrons = gtk_label_new(" "); hbox = gtk_hbox_new(0,FALSE); gtk_box_pack_start (GTK_BOX (hbox), labelNumberOfElectrons, FALSE, FALSE, 0); gtk_table_attach(GTK_TABLE(table),hbox,0,0+3,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_SHRINK), 2,2); g_object_set_data(G_OBJECT (entryCharge), "LabelNumberOfElectrons", labelNumberOfElectrons); g_signal_connect(G_OBJECT(entryCharge),"changed", G_CALLBACK(changedEntryCharge),NULL); return labelNumberOfElectrons; } /***********************************************************************************************/ void createFireFlyChargeMultiplicityFrame(GtkWidget *box) { GtkWidget* frame; GtkWidget* sep; GtkWidget* labelNumberOfElectrons; GtkWidget* vboxFrame; GtkWidget* comboSpinMultiplicity = NULL; GtkWidget* comboCharge = NULL; GtkWidget *table = NULL; gint i; totalCharge = TotalCharges[0]; spinMultiplicity=SpinMultiplicities[0]; table = gtk_table_new(3,5,FALSE); frame = gtk_frame_new (_("Charge & Multiplicty")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); i = 0; comboCharge = addFireFlyChargeToTable(table, i); i = 1; comboSpinMultiplicity = addFireFlySpinToTable(table, i); i = 2; sep = gtk_hseparator_new ();; gtk_table_attach(GTK_TABLE(table),sep,0,0+3,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); i = 3; labelNumberOfElectrons=addLabelNumberOfElectronsToTable(table, i, comboCharge); if(GTK_IS_COMBO_BOX(comboCharge)) g_object_set_data(G_OBJECT (GTK_BIN(comboCharge)->child), "ComboSpinMultiplicity", comboSpinMultiplicity); setComboCharge(comboCharge); setComboSpinMultiplicity(comboSpinMultiplicity); if(GTK_IS_WIDGET(labelNumberOfElectrons)) { gint ne = fireflyMolecule.numberOfValenceElectrons - totalCharge; gchar buffer[BSIZE]; sprintf(buffer, _("Number of electrons = %d"),ne); gtk_label_set_text(GTK_LABEL(labelNumberOfElectrons),buffer); } /* activate sensitivity */ /* if(GTK_IS_WIDGET(comboMethod)) setComboMethod(comboMethod); g_object_set_data(G_OBJECT (box), "EntryMethod", GTK_BIN(comboMethod)->child); */ } /************************************************************************************************************/ void putFireFlyChargeAndSpinInfoInTextEditor() { gchar buffer[BSIZE]; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$CONTRL",-1); sprintf(buffer," ICHARG=%d ",totalCharge); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer," MULT=%d ",spinMultiplicity); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } GabeditSrc250/src/FireFly/FireFlySCF.c0000644000175100017510000001310113130665225017656 0ustar alloucheallouche/* FireFlyGuess.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../FireFly/FireFlyTypes.h" #include "../FireFly/FireFlyGlobal.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget *buttonDirectSCF = NULL; static GtkWidget *buttonChangeFock = NULL; static GtkWidget *buttonUHFNO = NULL; static GtkWidget *scfFrame = NULL; /*************************************************************************************************************/ void initFireFlySCFFrame() { scfFrame = NULL; } /*************************************************************************************************************/ void setSensitiveFireFlySCFFrame(gboolean sensitive) { if(!scfFrame) return; gtk_widget_set_sensitive(scfFrame, sensitive); } /*************************************************************************************************************/ static void putFireFlySCFOptionsInfoInTextEditor() { if(!GTK_TOGGLE_BUTTON (buttonDirectSCF)->active && !GTK_TOGGLE_BUTTON (buttonChangeFock)->active && !GTK_TOGGLE_BUTTON (buttonUHFNO)->active ) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$SCF",-1); if(GTK_TOGGLE_BUTTON (buttonDirectSCF)->active) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " DIRSCF=.TRUE.",-1); if(GTK_TOGGLE_BUTTON (buttonChangeFock)->active) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " FDIFF=.TRUE.",-1); if(GTK_TOGGLE_BUTTON (buttonUHFNO)->active) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " UHFNOS=.TRUE.",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } /************************************************************************************************************/ void putFireFlySCFInfoInTextEditor() { putFireFlySCFOptionsInfoInTextEditor(); } /************************************************************************************************************/ void createFireFlySCFFrame(GtkWidget *win, GtkWidget *box) { GtkWidget* frame; GtkWidget* vboxFrame; gint l=0; gint c=0; gint ncases=1; GtkWidget *table = gtk_table_new(3,1,FALSE); buttonDirectSCF = NULL; buttonChangeFock = NULL; buttonUHFNO = NULL; frame = gtk_frame_new (_("SCF options")); scfFrame = frame; gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); /*------------------ DIrectSCF -----------------------------------------*/ l=0; c = 0; ncases=1; buttonDirectSCF = gtk_check_button_new_with_label (_("Direct SCF")); gtk_table_attach(GTK_TABLE(table),buttonDirectSCF,c,c+ncases,l,l+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_SHRINK), 2,2); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonDirectSCF), FALSE); /*------------------ ChangeFock ----------------------------------------*/ l++; c = 0; ncases=1; buttonChangeFock = gtk_check_button_new_with_label (_("Compute only change in Fock matrix")); gtk_table_attach(GTK_TABLE(table),buttonChangeFock,c,c+ncases,l,l+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_SHRINK), 2,2); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonChangeFock), FALSE); /*------------------ UHFNO ----------------------------------------*/ l++; c = 0; ncases=1; buttonUHFNO = gtk_check_button_new_with_label (_("Generate UHF Natural Orbitals")); gtk_table_attach(GTK_TABLE(table),buttonUHFNO,c,c+ncases,l,l+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_SHRINK), 2,2); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonUHFNO), FALSE); } GabeditSrc250/src/FireFly/FireFly.c0000644000175100017510000002056713130665225017340 0ustar alloucheallouche/* FireFly.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Common/Global.h" #include "../FireFly/FireFlyTypes.h" #include "../FireFly/FireFlyGlobal.h" #include "../FireFly/FireFlyMolecule.h" #include "../FireFly/FireFlyControl.h" #include "../FireFly/FireFlyBasis.h" #include "../FireFly/FireFlyGuess.h" #include "../FireFly/FireFlySCF.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" static GtkWidget *Wins=NULL; static gboolean newFile = FALSE; /************************************************************************************************************/ static void setColors() { static gboolean first = TRUE; if(!first) return; first = FALSE; fireflyColorFore.keyWord.red = 65535; fireflyColorFore.keyWord.green = 0; fireflyColorFore.keyWord.blue = 0; fireflyColorBack.keyWord.red = (gushort)(65535/1.2); fireflyColorBack.keyWord.green = (gushort)(65535/1.2); fireflyColorBack.keyWord.blue = (gushort)(65535/1.2); fireflyColorFore.description.red = 0; fireflyColorFore.description.green = 65535; fireflyColorFore.description.blue = 65535; fireflyColorBack.description.red = (gushort)(65535/2.0); fireflyColorBack.description.green = (gushort)(65535/2.0); fireflyColorBack.description.blue = (gushort)(65535/2.0); } /************************************************************************************************************/ void destroyWinsFireFly(GtkWidget *win) { destroy(Wins,NULL); Wins = NULL; initFireFlyMoleculeButtons(); /* freeFireFlyFunctionals(); freeFireFlyStdFunctionals(); freeFireFlyMole(); freeFireFlyGuessWaveFunction(); freeFireFlyMolecule(); freeFireFlyMpqc(); freeFireFlyBasis(); freeFireFlyOptimization(); */ } /************************************************************************************************************/ static void toCancelWin(GtkWidget* win,gpointer data) { Cancel_YesNo(win, data, destroy_children); } /************************************************************************************************************/ static void putTitleInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"%c ================================================================\n",'!'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"%c Input file for FireFly\n",'!'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"%c ================================================================\n",'!'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /************************************************************************************************************/ static void putInfoInTextEditor(GtkWidget *button, gpointer data) { setColors(); if(newFile) { reset_name_files(); ClearText(text); } else { gint nchar; nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); gabedit_text_set_point(GABEDIT_TEXT(text),nchar); } data_modify(TRUE); putTitleInTextEditor(); putFireFlyControlInfoInTextEditor(); putFireFlyChargeAndSpinInfoInTextEditor(); if(!fireflySemiEmperical()) putFireFlyBasisInfoInTextEditor(); putFireFlyGuessInfoInTextEditor(); putFireFlySCFInfoInTextEditor(); putFireFlyGeometryInfoInTextEditor(); /* putFireFlyBasisInfoInTextEditor(); putFireFlyGuessWaveFunctionInfoInTextEditor(); putFireFlyMoleInfoInTextEditor(); if(fireflyMpqc.optimize) putFireFlyOptimizationInfoInTextEditor(); putFireFlyMpqcInfoInTextEditor(); */ iprogram = PROG_IS_FIREFLY; fileopen.command=g_strdup(NameCommandFireFly); gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0); } /*********************************************************************************************/ static GtkWidget* addHboxToTable(GtkWidget* table, gint i, gint j, gint ki, gint kj) { GtkWidget *hbox = gtk_hbox_new(TRUE, 5); gtk_table_attach(GTK_TABLE(table),hbox,j,j+kj,i,i+ki, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); return hbox; } /************************************************************************************************************/ static void fireflyInputFileWindow(gboolean newInputFile) { GtkWidget *button; GtkWidget *hbox = NULL; GtkWidget *hboxSymmetryChargeMultiplicity = NULL; GtkWidget *table = gtk_table_new(6,2,FALSE); newFile = newInputFile; initFireFlyMolecule(); setFireFlyMolecule(); /* initFireFlyMpqc(); initFireFlyMole(); initFireFlyFunctionals(); initFireFlyStdFunctionals(); initFireFlyGuessWaveFunction(); initFireFlyBasis(); initFireFlyOptimization(); */ if(fireflyMolecule.numberOfAtoms <1) { Message( _( "You must initially define your geometry.\n\n" "From the principal Menu select : Geometry/Draw\n" "and draw (or read) your molecule."), _("Error"),TRUE); return; } if(Wins) destroy_children(Wins); Wins= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Wins),GTK_WIN_POS_NONE); gtk_window_set_transient_for(GTK_WINDOW(Wins),GTK_WINDOW(Fenetre)); gtk_window_set_title(>K_DIALOG(Wins)->window,_("FireFly input")); gtk_window_set_modal (GTK_WINDOW (Wins), TRUE); init_child(Wins, destroyWinsFireFly,_(" FireFly input ")); g_signal_connect(G_OBJECT(Wins),"delete_event",(GCallback)destroy_children,NULL); gtk_widget_realize(Wins); button = create_button(Wins,_("Cancel")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK( toCancelWin),GTK_OBJECT(Wins)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show (button); button = create_button(Wins,_("OK")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->vbox), table, FALSE, TRUE, 5); hbox =addHboxToTable(table, 0, 0, 1, 1); hboxSymmetryChargeMultiplicity = hbox; createFireFlySymmetryFrame(Wins, hbox); hbox =addHboxToTable(table, 1, 0, 1, 2); initFireFlyBasisFrame(); initFireFlyGuessFrame(); initFireFlySCFFrame(); createFireFlyControlFrame(Wins, hbox); createFireFlyBasisFrame(Wins, hbox); createFireFlyChargeMultiplicityFrame(hboxSymmetryChargeMultiplicity); hbox =addHboxToTable(table, 2, 0, 1, 2); createFireFlyGuessFrame(Wins, hbox); createFireFlySCFFrame(Wins, hbox); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(putInfoInTextEditor),GTK_OBJECT(Wins)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(destroy_children),GTK_OBJECT(Wins)); gtk_widget_show_all(Wins); fireflyWin = Wins; } /************************************************************************************************************/ void newFireFly() { fireflyInputFileWindow(TRUE); } /************************************************************************************************************/ void insertFireFly() { fireflyInputFileWindow(FALSE); } GabeditSrc250/src/FireFly/FireFlyControl.c0000644000175100017510000011455413130665225020701 0ustar alloucheallouche/* FireFlyRunControl.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../FireFly/FireFlyTypes.h" #include "../FireFly/FireFlyGlobal.h" #include "../FireFly/FireFlyMolecule.h" #include "../FireFly/FireFlyBasis.h" #include "../FireFly/FireFlyGuess.h" #include "../FireFly/FireFlySCF.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget* entrySCFIterations = NULL; static GtkWidget* comboSCF = NULL; static GtkWidget* comboCorrMethod = NULL; static GtkWidget* comboCorrType = NULL; static GtkWidget* buttonTD = NULL; static void setFireFlyCorrType(); /*************************************************************************************************************/ static gchar* listRunView[] = { N_("Single Point Energy"), N_("Equilibrium geometry"), N_("Equilibrium geometry+Frequencies"), N_("Transition State"), N_("Frequencies"), "Raman","Gradient", "Trudge", "IRC", "VSCF", "DRC", "GlobOp", "OptFMO", "GradExtr", "Surface", "Drop", "Morokuma", "Transitn", "FField", "TDHF" }; static gchar* listRunReal[] = { "Energy", "Optimize", "OptimizeFreq", "Sadpoint", "Hessian","Raman", "Gradient", "Trudge", "IRC", "VSCF", "DRC", "GlobOp", "OptFMO", "GradExtr", "Surface", "Drop", "Morokuma", "Transitn", "FField", "TDHF" }; static guint numberOfRuns = G_N_ELEMENTS (listRunView); static gchar selectedRun[BSIZE]="ENERGY"; /*************************************************************************************************************/ static gchar* listSCFView[] = { "RHF", "UHF", "ROHF", "GVB", "MCSCF", "MNDO", "AM1", "PM3", "None" }; static gchar* listSCFReal[] = { "RHF", "UHF", "ROHF", "GVB", "MCSCF", "MNDO", "AM1", "PM3", "NONE" }; static guint numberOfSCF = G_N_ELEMENTS (listSCFView); static gchar selectedSCF[BSIZE]="RHF"; /*************************************************************************************************************/ /* static gchar* listCorrTypeView[] = { "None", "Density Functional Theory", "MPn", "Coupled-Cluster"}; static gchar* listCorrTypeReal[] = { "NONE", "DFTTYP", "MPN","CCTYP"}; */ static gchar* listCorrTypeView[] = { N_("None"), N_("Density Functional Theory"), N_("MPn")}; static gchar* listCorrTypeReal[] = { "NONE", "DFTTYP", "MPN"}; static guint numberOfCorrType = G_N_ELEMENTS (listCorrTypeView); static gchar selectedCorrType[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listNoneView[] = { N_("None")}; static gchar* listNoneReal[] = { "NONE"}; static guint numberOfNone = G_N_ELEMENTS (listNoneView); static gchar* listMPnView[] = { N_("MP2"),N_("MP3"),N_("MP4")}; static gchar* listMPnReal[] = { "MP2","MP3","MP4"}; static guint numberOfMPn = G_N_ELEMENTS (listMPnView); static gchar* listDFTView[] = { N_("B3LYP1 : B3LYP GAUSSIAN, using VWN1 correlation"), N_("Staler"), N_("LSDA"), N_("B88 : Becke 1988 Exchange"), N_("XPW91 : Perdew-Wang 1991 Exchange"), N_("GILL96 : Gill 1996 exchange"), N_("XPBE96 : Perdew-Burke-Ernzerhof 1996 exchange"), N_("OPTX : Handy-Cohen 2001 OPTX exchange"), N_("VWN1RPA : HF exchange, VWN1 correlation"), N_("VWN5 : HF exchange, VWN5 correlation"), N_("PW91LDA : HF exchange, PW91 LDA correlation"), N_("LYP : HF exchange, LYP correlation"), N_("CPBE96 : HF exchange, PBE+PW91 correlation"), N_("CPW91 : HF exchange, PW91 correlation"), N_("SLYP : Slater exchange, LYP correlation"), N_("BLYP : B88 exchange, LYP correlation"), N_("GLYP : Gill 1996 exchange, LYP correlation"), N_("XLYP : Xu and Goddard III, LYP correlation"), N_("OLYP : OPTX exchange, LYP correlation"), N_("SVWN1RPA : Slater exchange, VWN1 correlation"), N_("BVWN1RPA : Becke 1988 exchange, VWN1 correlation"), N_("SVWN5 : Slater exchange, VWN5 correlation"), N_("BVWN5 : Becke 1988 exchange, VWN5 correlation"), N_("PBE96 : PBE exchange, PBE + PW91 correlation"), N_("PBEPW91 : PBE exchange, PW91 correlation"), N_("PW91 : PW91 exchange, PW91 correlation"), N_("B3LYP1 : B3LYP of GAUSSIAN, using VWN1 correlation"), N_("B3LYP5 : B3LYP of GAMESS (US), using VWN5 correlation"), N_("X3LYP : Xu and Goddard III + HF exchange, VWN1 + LYP"), N_("O3LYP1 : Slater + OPTX + HF exchange, VWN1 + LYP correlation"), N_("O3LYP5 : Slater + OPTX + HF exchange, VWN5 + LYP correlation"), N_("BHHLYP : Becke 1988 + HF exchange, LYP correlation"), N_("PBE0 : PBE + HF exchange, PBE + PW91 correlation"), N_("PBE1PW91 : PBE + HF exchange, PW91 correlation"), N_("B3PW91 : Slater + Becke 1988 + HF exchange, PW91 correlation"), }; static gchar* listDFTReal[] = { "B3LYP1", "Staler", "LSDA", "B88", "XPW91", "GILL96", "XPBE96", "OPTX", "VWN1RPA", "VWN5", "PW91LDA", "LYP", "CPBE96", "CPW91", "SLYP", "BLYP", "GLYP", "XLYP", "OLYP", "SVWN1RPA", "BVWN1RPA", "SVWN5", "BVWN5", "PBE96", "PBEPW91", "PW91", "B3LYP1", "B3LYP5", "X3LYP", "O3LYP1", "O3LYP5", "BHHLYP", "PBE0", "PBE1PW91", "B3PW91", }; static guint numberOfDFT = G_N_ELEMENTS (listDFTView); static gchar* listCCView[] = { "LCCD", "CCD", "CCSD", "CCSD(T)","R-CC","CR-CC","CCSD(TQ)","CR-CC(Q)","EOM-CCSD","CR-EOM" }; static gchar* listCCReal[] = { "LCCD", "CCD", "CCSD", "CCSD(T)","R-CC","CR-CC","CCSD(TQ)","CR-CC(Q)","EOM-CCSD","CR-EOM" }; static guint numberOfCC = G_N_ELEMENTS (listCCView); static guint numberOfCorrMethods = 0; static gchar** listCorrMethodsView = NULL; static gchar** listCorrMethodsReal = NULL; static gchar selectedCorrMethod[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listLocalizedView[] = { "None", "Foster-Boys", "Edmiston-Ruedenberg","Pipek-Mezey"}; static gchar* listLocalizedReal[] = { "NONE", "BOYS", "RUEDNBRG","POP" }; static guint numberOfLocalized = G_N_ELEMENTS (listLocalizedView); static gchar selectedLocalized[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listEXEView[] = { N_("Normal Run"), N_("Check"), N_("Debug")}; static gchar* listEXEReal[] = { "NORMAL", "CHECK", "DEBUG" }; static guint numberOfEXE = G_N_ELEMENTS (listEXEView); static gchar selectedEXE[BSIZE]="NORMAL"; /*************************************************************************************************************/ gboolean fireflySemiEmperical() { if( strcmp(selectedSCF,"MNDO")==0 || strcmp(selectedSCF,"AM1")==0 || strcmp(selectedSCF,"PM3")==0 )return TRUE; else return FALSE; } /*************************************************************************************************************/ static gchar* calculWord(gchar* view) { gint i; for(i=0;i Put here the $HESS card.\n You can obtain it from your old frequecncies calculation(.pun or .irc file)\n"),-1); } } /*************************************************************************************************************/ static void putFireFlySCFControlInfoInTextEditor() { G_CONST_RETURN gchar *entrytext; gint maxit=20; if(strcmp(selectedSCF,"NONE")==0)return; if(strcmp(selectedSCF,"MNDO")==0 || strcmp(selectedSCF,"AM1")==0 || strcmp(selectedSCF,"PM3")==0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$BASIS",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " GBASIS=",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedSCF,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); if(getFireFlyMultiplicity()!=1) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " SCFTYP=ROHF ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } } else { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " SCFTYP=",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedSCF,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } entrytext = gtk_entry_get_text(GTK_ENTRY(entrySCFIterations)); maxit=atoi(entrytext); if(maxit==0)maxit=30; if(maxit!=30) { gchar buffer[BSIZE]; sprintf(buffer," MAXIT=%d ",maxit); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } } /*************************************************************************************************************/ static void putFireFlyCorrelationInfoInTextEditor() { if(strcmp(selectedCorrType,"NONE")==0)return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); if(strcmp(selectedCorrType,"MPN")==0) { if(strcmp(selectedCorrMethod,"MP2")==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "MPLEVL=2",-1); if(strcmp(selectedCorrMethod,"MP3")==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "MPLEVL=3",-1); if(strcmp(selectedCorrMethod,"MP4")==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "MPLEVL=4",-1); } if(strcmp(selectedCorrType,"CCTYP")==0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " CCTYP=",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedCorrMethod,-1); } if(strcmp(selectedCorrType,"DFTTYP")==0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " DFTTYP=",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedCorrMethod,-1); } gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } /*************************************************************************************************************/ static void putFireFlyLocalizedInfoInTextEditor() { if(strcmp(selectedLocalized,"NONE")==0)return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " LOCAL=",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedLocalized,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } /*************************************************************************************************************/ static void putFireFlyEXEInfoInTextEditor() { if(strcmp(selectedEXE,"NORMAL")==0)return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " EXETYP=",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedEXE,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } /*************************************************************************************************************/ static void putFireFlyTDHFTDDFT() { if(!buttonTD) return; if(!GTK_TOGGLE_BUTTON (buttonTD)->active) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " CITYP=",-1); if(strcmp(selectedCorrType,"DFTTYP")==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "TDDFT ",-1); else gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "TDHF ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); if(strcmp(selectedCorrType,"DFTTYP")==0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$TDDFT",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " NSTATE=3 ISTSYM=0 ISTATE=1 TDA=.f. ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } else { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$TDHF",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " NSTATE=3 ISTSYM=0 ISTATE=1 ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } } /*************************************************************************************************************/ void putFireFlyControlInfoInTextEditor() { putFireFlyRunTypeInfoInTextEditor(); putFireFlySCFControlInfoInTextEditor(); putFireFlyCorrelationInfoInTextEditor(); putFireFlyLocalizedInfoInTextEditor(); putFireFlyEXEInfoInTextEditor(); putFireFlyTDHFTDDFT(); } /************************************************************************************************************/ void setFireFlyTD(gboolean ok) { if(!buttonTD) return; if(ok) { gtk_widget_set_sensitive(buttonTD, TRUE); } else { gtk_widget_set_sensitive(buttonTD, FALSE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonTD), FALSE); } } /************************************************************************************************************/ static void traitementRunType (GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; gchar* res = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } else return; res = calculWord(data); if(res) sprintf(selectedRun,"%s",res); else sprintf(selectedRun,"Energy"); setFireFlyCorrType(); } /********************************************************************************************************/ static GtkWidget *create_list_runtype() { GtkTreeIter iter; GtkTreeStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; gint i; GtkTreeIter iter0; store = gtk_tree_store_new (1,G_TYPE_STRING); for(i=0;i #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../FireFly/FireFlyTypes.h" #include "../FireFly/FireFlyGlobal.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget *buttonPrintGuess = NULL; static GtkWidget *buttonRotate = NULL; static GtkWidget *guessFrame = NULL; /*************************************************************************************************************/ static gchar* listGuessMethodView[] = { "Huckel", "Core" }; static gchar* listGuessMethodReal[] = { "NONE", "GUESS=HCORE" }; static guint numberOfGuessMethods = G_N_ELEMENTS (listGuessMethodView); static gchar selectedGuessMethod[BSIZE]="NONE"; /*************************************************************************************************************/ void initFireFlyGuessFrame() { guessFrame = NULL; } /*************************************************************************************************************/ void setSensitiveFireFlyGuessFrame(gboolean sensitive) { if(!guessFrame) return; gtk_widget_set_sensitive(guessFrame, sensitive); } /*************************************************************************************************************/ static void putFireFlyGuessOptionsInfoInTextEditor() { if(!GTK_TOGGLE_BUTTON (buttonPrintGuess)->active && !GTK_TOGGLE_BUTTON (buttonRotate)->active) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$GUESS",-1); if(GTK_TOGGLE_BUTTON (buttonPrintGuess)->active) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " PRTMO=.TRUE.",-1); if(GTK_TOGGLE_BUTTON (buttonRotate)->active) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " MIX=.TRUE.",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } /************************************************************************************************************/ static void putFireFlyGuessMethodInfoInTextEditor() { if( strcmp(selectedGuessMethod,"NONE")==0 ) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$GUESS",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedGuessMethod,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &fireflyColorFore.keyWord, &fireflyColorBack.keyWord, "$END\n",-1); } /*************************************************************************************************************/ void putFireFlyGuessInfoInTextEditor() { putFireFlyGuessMethodInfoInTextEditor(); putFireFlyGuessOptionsInfoInTextEditor(); } /************************************************************************************************************/ static void traitementGuessMethod (GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; gchar* res = NULL; gint i; /* gchar* s;*/ if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } for(i=0;i /**************************************************************************/ static void snapshot_pixbuf_free (guchar *pixels, gpointer data) { g_free (pixels); } /**************************************************************************/ /**************************************************************************/ static GdkPixbuf *get_pixbuf_gl(guchar* colorTrans) { gint stride; GdkPixbuf *pixbuf = NULL; GdkPixbuf *tmp = NULL; GdkPixbuf *tmp2 = NULL; guchar *data; gint height; gint width; GLint viewport[4]; glGetIntegerv(GL_VIEWPORT, viewport); width = viewport[2]; height = viewport[3]; stride = width*4; data = g_malloc0 (sizeof (guchar) * stride * height); #ifdef G_OS_WIN32 glReadBuffer(GL_BACK); glReadPixels(0,0,width,height,GL_RGBA,GL_UNSIGNED_BYTE,data); #else glReadBuffer(GL_FRONT); glReadPixels(0,0,width,height,GL_RGBA,GL_UNSIGNED_BYTE,data); #endif tmp = gdk_pixbuf_new_from_data (data, GDK_COLORSPACE_RGB, TRUE, 8, width, height, stride, snapshot_pixbuf_free, NULL); if(tmp) { tmp2 = gdk_pixbuf_flip (tmp, TRUE); g_object_unref (tmp); } if(tmp2) { pixbuf = gdk_pixbuf_rotate_simple (tmp2, GDK_PIXBUF_ROTATE_UPSIDEDOWN); g_object_unref (tmp2); } if(colorTrans) { tmp = gdk_pixbuf_add_alpha(pixbuf, TRUE, colorTrans[0], colorTrans[1], colorTrans[2]); if(tmp!=pixbuf) { g_object_unref (pixbuf); pixbuf = tmp; } } return pixbuf; } /*************************************************************************/ void gabedit_save_image_gl(GtkWidget* widget, gchar *fileName, gchar* type, guchar* colorTrans) { GError *error = NULL; GdkPixbuf *pixbuf = NULL; pixbuf = get_pixbuf_gl(colorTrans); if(pixbuf) { if(!fileName) { GtkClipboard * clipboard; clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); if(clipboard) { gtk_clipboard_clear(clipboard); gtk_clipboard_set_image(clipboard, pixbuf); } } else { if(type && strstr(type,"j") && strstr(type,"g") ) gdk_pixbuf_save(pixbuf, fileName, type, &error, "quality", "100", NULL); else if(type && strstr(type,"png")) gdk_pixbuf_save(pixbuf, fileName, type, &error, "compression", "9", NULL); else if(type && (strstr(type,"tif") || strstr(type,"tiff"))) gdk_pixbuf_save(pixbuf, fileName, "tiff", &error, "compression", "1", NULL); else gdk_pixbuf_save(pixbuf, fileName, type, &error, NULL); } g_object_unref (pixbuf); } } /*******************************************************************************/ /* Save in a png (without background) format file */ /*******************************************************************************/ void save_png_without_background_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; guchar color[3]; gint numCol = get_background_color(color); if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } gtk_widget_hide(GTK_WIDGET(SelecFile)); gtk_window_move(GTK_WINDOW(PrincipalWindow),0,0); glarea_rafresh(GLArea); while( gtk_events_pending() ) gtk_main_iteration(); if(numCol>=0) gabedit_save_image_gl(GLArea, fileName, "png",color); else gabedit_save_image_gl(GLArea, fileName, "png",NULL); } /************************************************************************** * Save the Frame Buffer in a png format file **************************************************************************/ void save_png_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } gtk_widget_hide(GTK_WIDGET(SelecFile)); gtk_window_move(GTK_WINDOW(PrincipalWindow),0,0); while( gtk_events_pending() ) gtk_main_iteration(); glarea_rafresh(GLArea); while( gtk_events_pending() ) gtk_main_iteration(); gabedit_save_image_gl(GLArea, fileName, "png",NULL); } /************************************************************************** * Save the Frame Buffer in a jpeg format file **************************************************************************/ void save_jpeg_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } gtk_widget_hide(GTK_WIDGET(SelecFile)); gtk_window_move(GTK_WINDOW(PrincipalWindow),0,0); glarea_rafresh(GLArea); while( gtk_events_pending() ) gtk_main_iteration(); gabedit_save_image_gl(GLArea, fileName, "jpeg",NULL); } /**************************************************************************/ void copy_to_clipboard() { glarea_rafresh(GLArea); while( gtk_events_pending() ) gtk_main_iteration(); gabedit_save_image_gl(GLArea, NULL, NULL,NULL); } /**************************************************************************/ void copy_to_clipboard_without_background() { glarea_rafresh(GLArea); guchar color[3]; gint numCol = get_background_color(color); while( gtk_events_pending() ) gtk_main_iteration(); if(numCol>-1) gabedit_save_image_gl(GLArea, NULL, NULL,color); else gabedit_save_image_gl(GLArea, NULL, NULL,NULL); } /************************************************************************** * Save the Frame Buffer in a ppm format file **************************************************************************/ static gchar* save_ppm(gchar* fileName) { FILE *file; int i; int j; int k; int width; int height; GLubyte *rgbbuf; static gchar message[1024]; if ((!fileName) || (strcmp(fileName,"") == 0)) { sprintf(message,_("Sorry\n No selected file")); return message; } file = FOpen(fileName,"wb"); if (!file) { sprintf(message,_("Sorry: can't open %s file\n"), fileName); return message; } width = GLArea->allocation.width; height = GLArea->allocation.height; glPixelStorei(GL_PACK_ROW_LENGTH,width); glPixelStorei(GL_PACK_ALIGNMENT,1); rgbbuf = (GLubyte *) malloc(3*width*height*sizeof(GLubyte)); if (!rgbbuf) { sprintf(message,_("Sorry: couldn't allocate memory\n")); fclose(file); return message; } #ifdef G_OS_WIN32 glReadPixels(0,0,width,height,GL_RGB,GL_UNSIGNED_BYTE,rgbbuf); #else glReadBuffer(GL_FRONT); glReadPixels(0,0,width,height,GL_RGB,GL_UNSIGNED_BYTE,rgbbuf); #endif fprintf(file,"P6\n"); fprintf(file,"#Image rendered with gabedit\n"); fprintf(file,"%d\n%d\n255\n", width,height); for(i=height-1; i>= 0; i--){ for(j=0; j< width; j++){ /* int ierr;*/ k = 3*(j + i*width); /* ierr = fwrite( &rgbbuf[k] ,sizeof(*rgbbuf), 1, file); ierr = fwrite( &rgbbuf[k+1] ,sizeof(*rgbbuf), 1, file); ierr = fwrite( &rgbbuf[k+2] ,sizeof(*rgbbuf), 1, file); */ fwrite( &rgbbuf[k] ,sizeof(*rgbbuf), 1, file); fwrite( &rgbbuf[k+1] ,sizeof(*rgbbuf), 1, file); fwrite( &rgbbuf[k+2] ,sizeof(*rgbbuf), 1, file); } } fclose(file); free(rgbbuf); return NULL; } /**************************************************************************/ void save_ppm_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; gchar* message; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } gtk_widget_hide(GTK_WIDGET(SelecFile)); gtk_window_move(GTK_WINDOW(PrincipalWindow),0,0); glarea_rafresh(GLArea); while( gtk_events_pending() ) gtk_main_iteration(); message = save_ppm(fileName); if(message != NULL) { Message(message,_("Error"),TRUE); } } /************************************************************************** * Save the Frame Buffer in a bmp format file **************************************************************************/ static void WLSBL(int val,char* arr) { arr[0] = (char) (val&0xff); arr[1] = (char) ((val>>8) &0xff); arr[2] = (char) ((val>>16)&0xff); arr[3] = (char) ((val>>24)&0xff); } /**************************************************************************/ static gchar* save_bmp(gchar* fileName) { /* int ierr;*/ FILE *file; int i; int j; int width; int height; GLubyte *rgbbuf; GLubyte rgbtmp[3]; int pad; static gchar message[1024]; char bmp_header[]= { 'B','M', 0,0,0,0, 0,0, 0,0, 54,0,0,0, 40,0,0,0, 0,0,0,0, 0,0,0,0, 1,0, 24,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 }; if ((!fileName) || (strcmp(fileName,"") == 0)) { sprintf(message,_("Sorry\n No selected file")); return message; } file = FOpen(fileName,"wb"); if (!file) { sprintf(message,_("Sorry: can't open %s file\n"), fileName); return message; } width = GLArea->allocation.width; height = GLArea->allocation.height; glPixelStorei(GL_PACK_ROW_LENGTH,width); glPixelStorei(GL_PACK_ALIGNMENT,1); rgbbuf = (GLubyte *)malloc(3*width*height*sizeof(GLubyte)); if (!rgbbuf) { sprintf(message,_("Sorry: couldn't allocate memory\n")); fclose(file); return message; } #ifdef G_OS_WIN32 glReadPixels(0,0,width,height,GL_RGB,GL_UNSIGNED_BYTE,rgbbuf); #else glReadBuffer(GL_FRONT); glReadPixels(0,0,width,height,GL_RGB,GL_UNSIGNED_BYTE,rgbbuf); #endif /* The number of bytes on a screenline should be wholly devisible by 4 */ pad = (width*3)%4; if (pad) pad = 4 - pad; WLSBL((int) (3*width+pad)*height+54,bmp_header+2); WLSBL((int) width,bmp_header+18); WLSBL((int) height,bmp_header+22); WLSBL((int) 3*width*height,bmp_header+34); /* ierr = fwrite(bmp_header,1,54,file);*/ fwrite(bmp_header,1,54,file); for (i=0;iallocation.width; height = GLArea->allocation.height; glPixelStorei(GL_PACK_ROW_LENGTH,width); glPixelStorei(GL_PACK_ALIGNMENT,1); rgbbuf = (GLubyte *) malloc(3*width*height*sizeof(GLubyte)); if (!rgbbuf) { Message(_("Sorry: couldn't allocate memory\n"),_("Error"),TRUE); return; } #ifdef G_OS_WIN32 glReadPixels(0,0,width,height,GL_RGB,GL_UNSIGNED_BYTE,rgbbuf); #else glReadBuffer(GL_FRONT); glReadPixels(0,0,width,height,GL_RGB,GL_UNSIGNED_BYTE,rgbbuf); #endif file = FOpen(fileName,"w"); if (!file) { Message(_("Sorry: can't open output file\n"),_("Error"),TRUE); return; } fprintf(file,"%%!PS-Adobe-2.0 EPSF-2.0\n"); fprintf(file,"%%%%BoundingBox: 16 16 %d %d\n",width+16,height+16); fprintf(file,"%%%%Creator: gabedit\n"); fprintf(file,"%%%%Title: gabedit output file\n"); fprintf(file,"%%%%EndComments\n"); ps_header(file); fprintf(file,"/picstr %d string def\n",height*3); fprintf(file,"16 16 translate\n"); fprintf(file,"%d %d scale\n",width,height); fprintf(file,"%d %d 8 [ %d 0 0 %d 0 0] \n",width,height,width,height); fprintf(file,"{ currentfile picstr readhexstring pop }\n"); fprintf(file,"false 3 colorimage\n"); j = k = 0; for (i=0;i70){ fprintf(file,"\n"); k=0; } } fprintf(file,"\nshowpage\n"); fprintf(file,"%%%%Trailer\n"); fclose(file); free(rgbbuf); } /**************************************************************************/ gchar* new_bmp(gchar* dirname, int i) { gchar* fileName = g_strdup_printf("%s%sgab%d.bmp",dirname,G_DIR_SEPARATOR_S,i); gchar* message; if(i==1) { gint j; for(j=0;j<100;j++) { gchar* filestoDelete = g_strdup_printf("%s%sgab%d.bmp",dirname,G_DIR_SEPARATOR_S,j); unlink(filestoDelete); g_free(filestoDelete); } } message = save_bmp(fileName); g_free(fileName); return message; } /**************************************************************************/ gchar* new_ppm(gchar* dirname, int i) { gchar* fileName = g_strdup_printf("%s%sgab%d.ppm",dirname,G_DIR_SEPARATOR_S,i); gchar* message; if(i==1) { gint j; for(j=0;j<100;j++) { gchar* filestoDelete = g_strdup_printf("%s%sgab%d.ppm",dirname,G_DIR_SEPARATOR_S,j); unlink(filestoDelete); g_free(filestoDelete); } } message = save_ppm(fileName); g_free(fileName); return message; } /**************************************************************************/ gchar* new_jpeg(gchar* dirname, int i) { gchar* fileName = g_strdup_printf("%s%sgab%d.jpg",dirname,G_DIR_SEPARATOR_S,i); if(i==1) { gint j; for(j=0;j<100;j++) { gchar* filestoDelete = g_strdup_printf("%s%sgab%d.jpg",dirname,G_DIR_SEPARATOR_S,j); unlink(filestoDelete); g_free(filestoDelete); } } gabedit_save_image_gl(GLArea, fileName, "jpeg",NULL); g_free(fileName); return NULL; } /**************************************************************************/ gchar* new_png(gchar* dirname, int i) { gchar* fileName = g_strdup_printf("%s%sgab%d.png",dirname,G_DIR_SEPARATOR_S,i); if(i==1) { gint j; for(j=0;j<100;j++) { gchar* filestoDelete = g_strdup_printf("%s%sgab%d.png",dirname,G_DIR_SEPARATOR_S,j); unlink(filestoDelete); g_free(filestoDelete); } } gabedit_save_image_gl(GLArea, fileName, "png",NULL); g_free(fileName); return NULL; } /**************************************************************************/ gchar* new_png_without_background(gchar* dirname, int i) { gchar* fileName = g_strdup_printf("%s%sgab%d.png",dirname,G_DIR_SEPARATOR_S,i); guchar color[3]; gint numCol = get_background_color(color); if(i==1) { gint j; for(j=0;j<100;j++) { gchar* filestoDelete = g_strdup_printf("%s%sgab%d.png",dirname,G_DIR_SEPARATOR_S,j); unlink(filestoDelete); g_free(filestoDelete); } } if(numCol>=0) gabedit_save_image_gl(GLArea, fileName, "png",color); else gabedit_save_image_gl(GLArea, fileName, "png",NULL); g_free(fileName); return NULL; } GabeditSrc250/src/Display/GridAdfDensity.c0000644000175100017510000004204713130665225020702 0ustar alloucheallouche/* GridAdf.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "StatusOrb.h" #include "UtilsOrb.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "GLArea.h" #include "AtomicOrbitals.h" #include "Orbitals.h" #include "BondsOrb.h" typedef struct _DataRow { gint symmetryNumber; gint orbitalNumber; }DataRow; static gint numberOfSymmetries = 0; static gchar** labelsSymmetry = NULL; static gint* numberOfOrbitalsBySymmetry = NULL; static gdouble** occupationsBySymmetry = NULL; static gdouble** energiesBySymmetry = NULL; static gint N[3]; static gdouble XYZ0[3]={0.0,0.0,0.0}; static gdouble X[3]={0.0,0.0,0.0}; static gdouble Y[3]={0.0,0.0,0.0}; static gdouble Z[3]={0.0,0.0,0.0}; static gchar adfFileName[2048]; /**************************************************************/ static void free_adf_orb() { gint i; if(numberOfSymmetries<1) return; if(labelsSymmetry) { for(i=0;iN[0]; V = g_malloc((N[0]*N[1]*N[2]+6)*sizeof(gdouble)); if(!set_position(file,label)) { Message(_("Sorry, I can not read density from this file"),_("Error"),TRUE); grid = free_grid(grid); return; } if(!get_values_from_adf_file(file,V)) return; n = -1; for(k=0;kN[2];k++) { for(j=0;jN[1];j++) { for(i=0;iN[0];i++) { x = XYZ0[0] + i*X[0] + j*X[1] + k*X[2]; y = XYZ0[1] + i*Y[0] + j*Y[1] + k*Y[2]; z = XYZ0[2] + i*Z[0] + j*Z[1] + k*Z[2]; /* x = XYZ0[0] + k*X[0] + j*X[1] + i*X[2]; y = XYZ0[1] + k*Y[0] + j*Y[1] + i*Y[2]; z = XYZ0[2] + k*Z[0] + j*Z[1] + i*Z[2]; */ n++; v = V[n]; grid->point[i][j][k].C[0] = x; grid->point[i][j][k].C[1] = y; grid->point[i][j][k].C[2] = z; grid->point[i][j][k].C[3] = v; /*printf("%lf %lf %lf %lf\n",x,y,z,v);*/ if(beg) { beg = FALSE; grid->limits.MinMax[0][3] = v; grid->limits.MinMax[1][3] = v; } else { if(grid->limits.MinMax[0][3]>v) grid->limits.MinMax[0][3] = v; if(grid->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_READGRID,TRUE); break; } progress_orb(scal,GABEDIT_PROGORB_READGRID,FALSE); } if(CancelCalcul) { grid = free_grid(grid); } g_free(V); progress_orb(0,GABEDIT_PROGORB_READGRID,TRUE); return; } /********************************************************************************/ static void read_density() { gchar buffer[BSIZE]; FILE* file = FOpen(adfFileName, "rb"); if(!file) { sprintf(buffer,_("Sorry, i can not open \"%s\" file"),adfFileName); grid = free_grid(grid); Message(buffer,_("Error"),TRUE); return; } sprintf(buffer,"Density"); /* printf("str = %s\n",buffer);*/ get_grid_from_adf_file(file,buffer); if(grid) { limits = grid->limits; create_iso_orbitals(); set_status_label_info(_("Grid"),_("Ok")); } else { set_status_label_info(_("Grid"),_("Nothing")); CancelCalcul = FALSE; } fclose(file); } /********************************************************************************/ static gdouble* read_one_table(FILE* file,gint* n) { gint len = BSIZE; gchar buffer[BSIZE]; gdouble* table = NULL; gdouble V[3]; gint i,k,l,krest; *n = -1; if(!fgets(buffer,len,file))return NULL; if(1 != sscanf(buffer,"%d",n)) { *n = -1; return NULL; } if(*n<1) return NULL; /*printf("*n = %d\n",*n);*/ table = g_malloc(*n* sizeof(gdouble)); k = *n/3; krest = *n % 3; i=0; for(l=0;l0) { if(!fgets(buffer,len,file))return table; l = sscanf(buffer,"%lf %lf %lf",&V[0],&V[1],&V[2]); if(l != krest) { *n = -1; g_free(table); return NULL; } for(l=0;l0) { GeomOrb=g_malloc(Ncenters*sizeof(TypeGeomOrb)); return TRUE; } return FALSE; } /**************************************************************/ static gboolean read_atoms_labels(FILE* file) { gint len = BSIZE; gchar buffer[BSIZE]; gchar buffer1[BSIZE]; gint i; /*printf("je suis dans read atoms labels\n");*/ if(!fgets(buffer,len,file))return FALSE; if(Ncenters<1) return FALSE; for(i=0;i0) { /*printf("C'est OK\n");*/ buildBondsOrb(); RebuildGeom = TRUE; glarea_rafresh(GLArea); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); } /*printf("N = %d %d %d\n",N[0],N[1],N[2]);*/ set_status_label_info(_("Grid"),_("Nothing")); CancelCalcul = FALSE; fclose(file); } /********************************************************************************/ void load_adf_file_density(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); sprintf(adfFileName,"%s",FileName); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_EDENSITY; read_adf_file(FileName); read_density(); } /********************************************************************************/ GabeditSrc250/src/Display/OrbitalsNBO.h0000644000175100017510000000266613130665225020170 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_ORBITALSNBO_H__ #define __GABEDIT_ORBITALSNBO_H__ void read_nbo_orbitals(gchar* FileName); #endif /* __GABEDIT_ORBITALSNBO_H__ */ GabeditSrc250/src/Display/MenuToolBarGL.h0000644000175100017510000000066013130665225020454 0ustar alloucheallouche #ifndef __GABEDIT_MENUTOOLBARGL_H__ #define __GABEDIT_MENUTOOLBARGL_H__ typedef enum { OPERATION_ROTATION_FREE, OPERATION_ROTATION_X, OPERATION_ROTATION_Y, OPERATION_ROTATION_Z, OPERATION_TRANSLATION, OPERATION_ZOOM, } OperationGeomType; void create_toolbar_and_popup_menu_GL(GtkWidget* box); gboolean popuo_menu_GL(guint button, guint32 time); void rafresh_perspective_button(); #endif /* __GABEDIT_MENUTOOLBARGL_H__ */ GabeditSrc250/src/Display/PreferencesOrb.h0000644000175100017510000000332713130665225020751 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_PREFERENCESORB_H__ #define __GABEDIT_PREFERENCESORB_H__ GtkWidget *create_colorsel_frame(GtkWidget *vboxall,gchar* title,GtkWidget**selectors); void set_colors_surfaces(gchar* title); GtkWidget *create_light_positions_frame( GtkWidget *vboxall,gchar* title); void set_light_positions(gchar* title); void create_opengl_frame(GtkWidget* Win,GtkWidget *vbox); void set_camera(); #endif /* __GABEDIT_PREFERENCESORB_H__ */ GabeditSrc250/src/Display/Textures.c0000644000175100017510000001700713130665225017663 0ustar alloucheallouche/* Textures.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #define gl_max 256 /*********************************************************************************************/ GLubyte Texture[16] = { 0x99,0x99,0x99,0x99,0xFF,0xFF,0xFF,0xFF, /*Image (2x2)*/ 0xFF,0xFF,0xFF,0xFF,0x99,0x99,0x99,0x99 }; static GLuint Nom = 0; unsigned char image[256][256][3]; unsigned char image_granite[gl_max][gl_max][3]; /*********************************************************************************************/ int texture_function(int x,int y) { float dx=(128.0-(float)x)/255.0*40.0; float dy=(128.0-(float)y)/255.0*40.0; float a=cos(sqrt(dx*dx+dy*dy)+0); return (int)((a+1.0)/2.0*255); } /*********************************************************************************************/ static float Interpolate(float a,float b,float x) { float ft = x * 3.1415927 ; float f = (1 - cos(ft)) * .5 ; return (a*(1-f) + b*f) ; } /*********************************************************************************************/ float Noise(int x, int y) { int n = x + y * 57 ; n = (n<<13) ^ n; return ( 1.0 - ( (n * (n * n * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0); } /*********************************************************************************************/ float SmoothedNoise_1(float x, float y) { float corners = ( Noise((int) x-1,(int) y-1)+Noise((int) x+1,(int) y-1)+Noise((int) x-1,(int) y+1)+Noise((int) x+1,(int) y+1) ) / 16 ; float sides = ( Noise((int) x-1,(int) y) +Noise((int) x+1,(int) y) +Noise((int) x,(int) y-1) +Noise((int) x,(int) y+1) ) / 8 ; float center = Noise((int) x,(int) y) / 4 ; return (corners + sides + center) ; } /*********************************************************************************************/ float InterpolatedNoise_1(float x, float y) { int integer_X =(int) floor(x) ; float fractional_X = x - integer_X ; int integer_Y =(int) floor(y) ; float fractional_Y = y - integer_Y ; float v1 = SmoothedNoise_1(integer_X, integer_Y) ; float v2 = SmoothedNoise_1(integer_X + 1, integer_Y) ; float v3 = SmoothedNoise_1(integer_X, integer_Y + 1) ; float v4 = SmoothedNoise_1(integer_X + 1, integer_Y + 1) ; float i1 = Interpolate(v1 , v2 , fractional_X) ; float i2 = Interpolate(v3 , v4 , fractional_X) ; return (Interpolate(i1 , i2 , fractional_Y)) ; } /*********************************************************************************************/ float PerlinNoise_2D(float x, float y) { float total = 0 ; float p = 0.25 ; int n = 3 ; float frequency; float amplitude; int i; for (i = 0 ; i <= n ; i++ ) { frequency = 2< 1/Kd ) sum = 1/Kd ; Col[0] = sum * Kd ; Col[1] = sum * Kd ; Col[2] = sum * Kd ; } /*********************************************************************************************/ void create_image_granite() { GLdouble Col[3]; float t = gl_max*gl_max*3 ; float s; int i; int j; for (i=0;i #include #include #include #include "../Display/GlobalOrb.h" #include "../Display/Orbitals.h" #include "../Display/GLArea.h" #include "../Display/UtilsOrb.h" #include "../Utils/UtilsInterface.h" #include "../Display/PlanesMapped.h" #include "../Utils/Utils.h" /********************************************************************************/ static void apply_maps(GtkWidget *Win,gpointer data) { GtkWidget** Entrys =(GtkWidget**)g_object_get_data(G_OBJECT (Win), "Entrys"); gint type = *((gint*)g_object_get_data(G_OBJECT (Win), "Type")); G_CONST_RETURN gchar* temp; gint i0=0; gint i1=1; gint numPlane = -1; gint pvalue = 0; gdouble gap = 0; temp = gtk_entry_get_text(GTK_ENTRY(Entrys[0])); pvalue = atoi(temp); if(!get_a_float(Entrys[1],&gap,_("Error : The projection value should be float."))) return; numPlane = pvalue-1; if(numPlane<0 || numPlane>grid->N[type]) numPlane = grid->N[type]/2; switch(type) { case 0 : i0 = 1;i1 = 2;break; /* plane YZ */ case 1 : i0 = 0;i1 = 2;break; /* plane XZ */ case 2 : i0 = 0;i1 = 1;break; /* plane XY */ } add_maps(i0, i1, numPlane, gap, FALSE); delete_child(Win); /*gtk_widget_destroy(Win);*/ } /********************************************************************************/ static GtkWidget *create_maps_frame( GtkWidget *vboxall,gchar* title,gint type) { GtkWidget *frame; GtkWidget *combo; GtkWidget *vboxframe; GtkWidget *hseparator; GtkWidget **Entrys = (GtkWidget **)g_malloc(2*sizeof(GtkWidget *)); gushort i; GtkWidget *Table; gchar** listvalues; static gint itype = 0; gchar *strLabelPlane = NULL; itype = type; strLabelPlane = g_strdup(_(" Plane number ")); listvalues = g_malloc(grid->N[type]*sizeof(gchar*)); for(i=0;iN[type];i++) { listvalues[i] = g_strdup_printf("%d",i+1); } frame = gtk_frame_new (title); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(3,4,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); i = 0; add_label_at_table(Table,strLabelPlane,i,(gushort)0,GTK_JUSTIFY_LEFT); add_label_at_table(Table," : ",i,(gushort)1,GTK_JUSTIFY_LEFT); combo = create_combo_box_entry(listvalues,grid->N[type], FALSE,-1,-1); Entrys[0] = GTK_BIN(combo)->child; add_widget_table(Table,combo,(gushort)0,(gushort)2); i=1; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(Table),hseparator,0,4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 3,3); i = 2; add_label_at_table(Table, _("Projection "),i,(gushort)0,GTK_JUSTIFY_LEFT); add_label_at_table(Table," : ",i,(gushort)1,GTK_JUSTIFY_LEFT); Entrys[1] = gtk_entry_new (); add_widget_table(Table,Entrys[1],(gushort)i,(gushort)2); add_label_at_table(Table,_(" left if <0, right if >0. and nothing if 0 "),i,(gushort)3,GTK_JUSTIFY_LEFT); g_object_set_data(G_OBJECT (frame), "Entrys",Entrys); g_object_set_data(G_OBJECT (GTK_OBJECT(GTK_COMBO_BOX(combo))), "Entrys",Entrys); g_object_set_data(G_OBJECT (GTK_OBJECT(GTK_COMBO_BOX(combo))), "Type",&itype); g_object_set_data(G_OBJECT(Entrys[0]), "ComboList",GTK_OBJECT(GTK_COMBO_BOX(combo))); gtk_entry_set_text(GTK_ENTRY(Entrys[0]),listvalues[grid->N[type]/2]); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"0.0"); g_free(strLabelPlane); for(i=0;iN[type];i++) { if(listvalues[i]) g_free(listvalues[i]); } g_free(listvalues); gtk_widget_show_all(frame); return frame; } /**************************************************************/ void create_maps(gchar* title,gint type) { GtkWidget *Win; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *button; GtkWidget** Entrys; static gint itype; if(!grid) { if(!CancelCalcul) Message(_("Grid not defined "),_("Error"),TRUE); return; } itype = type; Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),title); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win," Maps "); vboxall = create_vbox(Win); vboxwin = vboxall; frame = create_maps_frame(vboxall,"Maps",type); Entrys = (GtkWidget**) g_object_get_data(G_OBJECT (frame), "Entrys"); g_object_set_data(G_OBJECT (Win), "Entrys",Entrys); g_object_set_data(G_OBJECT (Win), "Type",&itype); hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_maps,GTK_OBJECT(Win)); gtk_widget_show_all (Win); } /********************************************************************************/ static void apply_maps_plane(GtkWidget *Win,gpointer data) { GtkWidget* entry =(GtkWidget*)g_object_get_data(G_OBJECT (Win), "Entry"); gdouble gap; if(!get_a_float(entry, &gap, _("Error : The projection value should be float."))) return; add_maps(0, 1, 0, gap, TRUE); glarea_rafresh(GLArea); delete_child(Win); } /********************************************************************************/ static void destroyWin(GtkWidget *Win) { gtk_widget_destroy(Win); reDrawPlaneMappedPlane = TRUE; } /********************************************************************************/ static GtkWidget *create_maps_frame_plane( GtkWidget *vboxall,gchar* title) { GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *entry = NULL; gushort i; GtkWidget *Table; frame = gtk_frame_new (title); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(1,4,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); i = 0; add_label_at_table(Table, _("Projection "),i,(gushort)0,GTK_JUSTIFY_LEFT); add_label_at_table(Table," : ",i,(gushort)1,GTK_JUSTIFY_LEFT); entry = gtk_entry_new (); add_widget_table(Table, entry, (gushort)i, (gushort)2); add_label_at_table(Table,_(" left if <0, right if >0. and nothing if 0"),i,(gushort)3,GTK_JUSTIFY_LEFT); gtk_entry_set_text(GTK_ENTRY(entry),"0.0"); g_object_set_data(G_OBJECT (frame), "Entry",entry); gtk_widget_show_all(frame); return frame; } /********************************************************************************/ void create_maps_plane(gchar* title) { GtkWidget *Win; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *button; GtkWidget* entry; if(!gridPlaneForPlanesMapped) { Message(_("Grid in plane is not defined "),_("Error"),TRUE); return; } /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),title); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_child(PrincipalWindow,Win,destroyWin,"Plane Colorcoded."); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(Win); vboxwin = vboxall; frame = create_maps_frame_plane(vboxall,"Maps"); entry = (GtkWidget*) g_object_get_data(G_OBJECT (frame), "Entry"); g_object_set_data(G_OBJECT (Win), "Entry",entry); /* buttons box */ hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_maps_plane,GTK_OBJECT(Win)); /* Show all */ gtk_widget_show_all (Win); } /********************************************************************************/ GabeditSrc250/src/Display/ExportGL.c0000644000175100017510000000773413130665225017552 0ustar alloucheallouche/* ExportGL.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "../Geometry/GeomGlobal.h" #include "../Files/FileChooser.h" #include "../Utils/Vector3d.h" #include "../Utils/Transformation.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/HydrogenBond.h" #include "../Display/GLArea.h" #include "../Display/GeomDraw.h" #include "../Display/TriangleDraw.h" #include "../Display/AxisGL.h" #include "../Display/PrincipalAxisGL.h" #include "../Display/ColorMap.h" #include "../Display/BondsOrb.h" #include "../Display/RingsOrb.h" #include #define STICKSIZE 0.2 #define STICKSIZEBALL 0.7 /********************************************************************************/ static void export_file(GabeditFileChooser *SelecteurFichier , gint response_id) { gchar *fileName; FILE* file; gint buffsize = 0; gint state = GL2PS_OVERFLOW; gchar* type = NULL; gint gl2ps_type = GL2PS_PS; if(response_id != GTK_RESPONSE_OK) return; if(!GLArea) return; if(!SelecteurFichier) return; type = (gchar*)g_object_get_data(G_OBJECT (SelecteurFichier), "Type"); if(!type) type = g_strdup("eps"); fileName = gabedit_file_chooser_get_current_file(SelecteurFichier); if(strstr(type,"eps")) gl2ps_type = GL2PS_EPS; if(strstr(type,"tex")) gl2ps_type = GL2PS_TEX; if(strstr(type,"pdf")) gl2ps_type = GL2PS_PDF; if(strstr(type,"svg")) gl2ps_type = GL2PS_SVG; if(strstr(type,"pgf")) gl2ps_type = GL2PS_PGF; file = FOpen(fileName, "wb"); printf("Writing '%s file'... \n",type); while(state == GL2PS_OVERFLOW) { buffsize += 1024*1024; gl2psBeginPage("Gabedit", "Gabedit", NULL, gl2ps_type, GL2PS_BSP_SORT, GL2PS_OCCLUSION_CULL | GL2PS_USE_CURRENT_VIEWPORT | GL2PS_NO_BLENDING, GL_RGBA, 0, NULL, 0, 0, 0, buffsize, file,fileName); redrawGL2PS(); state = gl2psEndPage(); } fclose(file); printf("End Writing '%s file'... \n",type); } /********************************************************************************/ void export_scene(GtkWidget* Win,gchar* type) { gchar* title = g_strdup_printf("Create a %s file",type); gchar* patternsfiles[] = {"*","*.eps","*.ps","*.pdf","*.svg",NULL}; gchar* fileName = g_strdup_printf("gabedit.%s",type); gchar* filter = g_strdup_printf("*.%s",type); GtkWidget* win = choose_file_to_create(title, G_CALLBACK(export_file)); g_object_set_data(G_OBJECT (win), "Type",type); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(win), patternsfiles); gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(win),filter); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(win),fileName); g_free(title); g_free(fileName); g_free(filter); } GabeditSrc250/src/Display/AnimationRotation.h0000644000175100017510000000267313130665225021507 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_ANIMATIONROTATION_H__ #define __GABEDIT_ANIMATIONROTATION_H__ void animationRotationDlg(); #endif /* __GABEDIT_ANIMATIONROTATION_H__ */ GabeditSrc250/src/Display/OrbitalsMopac.c0000644000175100017510000012441613130665225020602 0ustar alloucheallouche/* OrbitalsMopac.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "../Utils/AtomsProp.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/Zlm.h" #include "../Utils/QL.h" #include "../Utils/MathFunctions.h" #include "../Geometry/GeomGlobal.h" #include "GeomDraw.h" #include "GLArea.h" #include "UtilsOrb.h" #include "Basis.h" #include "GeomOrbXYZ.h" #include "AtomicOrbitals.h" #include "StatusOrb.h" #include "Basis.h" #include "Orbitals.h" #include "GeomOrbXYZ.h" #include "BondsOrb.h" /********************************************************************************/ static gboolean read_geomorb_mopac_file_geom(gchar *fileName) { return gl_read_mopac_aux_file_geomi(fileName, -1); } /********************************************************************************/ static void DefineMopacSphericalBasis(gchar** strbasis, gint* nums, gint* pqn, gdouble*zetas, gint nrows) { gint i,k; gint c; CSTF *temp; Zlm Stemp; gint n; NOrb = nrows; temp = g_malloc(NOrb*sizeof(CSTF)); for(k=0;kN || ni<1) { free_one_string_table(strIndices,ni); fclose(file); return NULL; } strMatrix = get_one_block_from_aux_mopac_file(file, "OVERLAP_COEFFICIENTS[", &no); if(!strMatrix) { fclose(file); return NULL; } if(no>N || no<1 ||ni!=no) { free_one_string_table(strMatrix,no); fclose(file); return NULL; } overlapMatrix = g_malloc(N*sizeof(gdouble)); for(i=0;i0) { SymAlphaOrbitals = g_malloc(NOrb*sizeof(gchar*)); SymBetaOrbitals = g_malloc(NOrb*sizeof(gchar*)); for(i=0;i0 && nAlpha==nBeta) { SymAlphaOrbitals = g_malloc(NOrb*sizeof(gchar*)); SymBetaOrbitals = g_malloc(NOrb*sizeof(gchar*)); for(i=0;i0 || (nAlpha>0 && nAlpha==nBeta)) return TRUE; else return FALSE; } /********************************************************************************/ static gboolean set_sym_orbitals_nocomp(gchar* FileName) { FILE *file; gchar** strAlpha = NULL; gchar** strBeta = NULL; gchar** str = NULL; gint nAlpha = 0; gint nBeta = 0; gint n = 0; gint i; gint nBeginAlpha = 0; gint nEndAlpha = 0; gint nBeginBeta = 0; gint nEndBeta = 0; gint nBegin = 0; gint nEnd = 0; file = FOpen(FileName, "rb"); if(file ==NULL) return FALSE; get_number_of_mos(file, &n, &nAlpha, &nBeta, &nBegin, &nEnd, &nBeginAlpha, &nEndAlpha, &nBeginBeta, &nEndBeta); strAlpha = get_one_block_from_aux_mopac_file(file, "ALPHA_M.O.SYMMETRY_LABELS[", &nAlpha); if(strAlpha) { fseek(file, 0L, SEEK_SET); strBeta = get_one_block_from_aux_mopac_file(file, "BETA_M.O.SYMMETRY_LABELS[", &nBeta); } else { fseek(file, 0L, SEEK_SET); str = get_one_block_from_aux_mopac_file(file, "M.O.SYMMETRY_LABELS[", &n); } if(n>0) { SymAlphaOrbitals = g_malloc(NOrb*sizeof(gchar*)); SymBetaOrbitals = g_malloc(NOrb*sizeof(gchar*)); for(i=0;i0 && nAlpha==nBeta) { SymAlphaOrbitals = g_malloc(NOrb*sizeof(gchar*)); SymBetaOrbitals = g_malloc(NOrb*sizeof(gchar*)); for(i=0;i0 || (nAlpha>0 && nAlpha==nBeta)) return TRUE; else { SymAlphaOrbitals = g_malloc(NOrb*sizeof(gchar*)); SymBetaOrbitals = g_malloc(NOrb*sizeof(gchar*)); for(i=0;i0) { EnerAlphaOrbitals = g_malloc(NOrb*sizeof(gdouble)); EnerBetaOrbitals = g_malloc(NOrb*sizeof(gdouble)); for(i=0;i0) { EnerAlphaOrbitals = g_malloc(NOrb*sizeof(gdouble)); for(i=0;i0) { EnerBetaOrbitals = g_malloc(NOrb*sizeof(gdouble)); for(i=0;i0 || (nAlpha>0 && nAlpha==nBeta)) return TRUE; else return FALSE; } /********************************************************************************/ static gboolean set_ener_orbitals_nocomp(gchar* FileName) { FILE *file; gchar** strAlpha = NULL; gchar** strBeta = NULL; gchar** str = NULL; gint nAlpha = 0; gint nBeta = 0; gint n = 0; gint i; gint nBeginAlpha = 0; gint nEndAlpha = 0; gint nBeginBeta = 0; gint nEndBeta = 0; gint nBegin = 0; gint nEnd = 0; file = FOpen(FileName, "rb"); if(file ==NULL) return FALSE; get_number_of_mos(file, &n, &nAlpha, &nBeta, &nBegin, &nEnd, &nBeginAlpha, &nEndAlpha, &nBeginBeta, &nEndBeta); strAlpha = get_one_block_from_aux_mopac_file(file, "ALPHA_EIGENVALUES[", &nAlpha); if(strAlpha) { fseek(file, 0L, SEEK_SET); strBeta = get_one_block_from_aux_mopac_file(file, "BETA_EIGENVALUES[", &nBeta); } else { fseek(file, 0L, SEEK_SET); str = get_one_block_from_aux_mopac_file(file, "EIGENVALUES[", &n); } if(n>0) { EnerAlphaOrbitals = g_malloc(NOrb*sizeof(gdouble)); EnerBetaOrbitals = g_malloc(NOrb*sizeof(gdouble)); for(i=0;i0) { EnerAlphaOrbitals = g_malloc(NOrb*sizeof(gdouble)); for(i=0;i0) { EnerBetaOrbitals = g_malloc(NOrb*sizeof(gdouble)); for(i=0;i0 || (nAlpha>0 && nAlpha==nBeta)) return TRUE; else return FALSE; } /********************************************************************************/ static gboolean set_ener_orbitals(gchar* FileName) { gint i; if(set_ener_orbitals_nocomp(FileName)) return TRUE; if(set_ener_orbitals_comp(FileName)) return TRUE; EnerAlphaOrbitals = g_malloc(NOrb*sizeof(gdouble)); EnerBetaOrbitals = g_malloc(NOrb*sizeof(gdouble)); for(i=0;i0) { OccAlphaOrbitals = g_malloc(NOrb*sizeof(gdouble)); OccBetaOrbitals = g_malloc(NOrb*sizeof(gdouble)); for(i=0;i0 && nAlpha==nBeta) { OccAlphaOrbitals = g_malloc(NOrb*sizeof(gdouble)); OccBetaOrbitals = g_malloc(NOrb*sizeof(gdouble)); for(i=0;i0 || (nAlpha>0 && nAlpha==nBeta)) return TRUE; else return FALSE; } /********************************************************************************/ static gboolean set_occ_orbitals_nocomp(gchar* FileName) { FILE *file; gchar** strAlpha = NULL; gchar** strBeta = NULL; gchar** str = NULL; gint nAlpha = 0; gint nBeta = 0; gint n = 0; gint i; gint nBeginAlpha = 0; gint nEndAlpha = 0; gint nBeginBeta = 0; gint nEndBeta = 0; gint nBegin = 0; gint nEnd = 0; file = FOpen(FileName, "rb"); if(file ==NULL) return FALSE; get_number_of_mos(file, &n, &nAlpha, &nBeta, &nBegin, &nEnd, &nBeginAlpha, &nEndAlpha, &nBeginBeta, &nEndBeta); strAlpha = get_one_block_from_aux_mopac_file(file, "ALPHA_MOLECULAR_ORBITAL_OCCUPANCIES[", &nAlpha); if(strAlpha) { fseek(file, 0L, SEEK_SET); strBeta = get_one_block_from_aux_mopac_file(file, "BETA_MOLECULAR_ORBITAL_OCCUPANCIES[", &nBeta); } else { fseek(file, 0L, SEEK_SET); str = get_one_block_from_aux_mopac_file(file, "MOLECULAR_ORBITAL_OCCUPANCIES[", &n); } if(n>0) { OccAlphaOrbitals = g_malloc(NOrb*sizeof(gdouble)); OccBetaOrbitals = g_malloc(NOrb*sizeof(gdouble)); for(i=0;i=2) OccAlphaOrbitals[i] = 1; for(i=0;i=2) OccBetaOrbitals[i] -= 1; } if(nAlpha>0 && nAlpha==nBeta) { OccAlphaOrbitals = g_malloc(NOrb*sizeof(gdouble)); OccBetaOrbitals = g_malloc(NOrb*sizeof(gdouble)); for(i=0;i=2) OccAlphaOrbitals[i] = 1; for(i=0;i=2) OccBetaOrbitals[i] -= 1; } fclose(file); free_one_string_table(strAlpha, nAlpha); free_one_string_table(strBeta, nBeta); free_one_string_table(str, n); if(n>0 || (nAlpha>0 && nAlpha==nBeta)) return TRUE; else return FALSE; } /********************************************************************************/ static gboolean set_occ_orbitals(gchar* FileName) { if(set_occ_orbitals_nocomp(FileName)) return TRUE; return set_occ_orbitals_comp(FileName); } /********************************************************************************/ static gboolean set_coef_orbitals_comp(gchar* FileName) { FILE *file; gchar** strIndices = NULL; gchar** strCoefs = NULL; gint i,k; gint ni; gint nc; gint nBeginAlpha = 0; gint nEndAlpha = 0; gint nBeginBeta = 0; gint nEndBeta = 0; gint nBegin = 0; gint nEnd = 0; gint n = 0; gint nAlpha = 0; gint nBeta = 0; file = FOpen(FileName, "rb"); if(file ==NULL) return FALSE; get_number_of_mos(file, &n, &nAlpha, &nBeta, &nBegin, &nEnd, &nBeginAlpha, &nEndAlpha, &nBeginBeta, &nEndBeta); if(nAlpha>0) { CoefAlphaOrbitals = CreateTable2(NOrb); for(i=nBeginAlpha-1;i<=nEndAlpha-1;i++) { strIndices = get_one_block_from_aux_mopac_file(file, "ALPHA_MO_INDICES[", &ni); strCoefs = get_one_block_from_aux_mopac_file(file, "ALPHA_MO_COEFFICIENTS[", &nc); if(ni!=nc || ni>NOrb || ni<1) { free_one_string_table(strIndices, ni); free_one_string_table(strCoefs, nc); nAlpha = 0; break; } for(k=0;kNOrb || ni<1) { free_one_string_table(strIndices, ni); free_one_string_table(strCoefs, nc); nAlpha = 0; nBeta = 0; break; } for(k=0;k0) normalize_orbitals(FileName, CoefAlphaOrbitals); if(nBeta>0) normalize_orbitals(FileName, CoefBetaOrbitals); } } else { fseek(file, 0L, SEEK_SET); CoefAlphaOrbitals = CreateTable2(NOrb); CoefBetaOrbitals = CoefAlphaOrbitals; for(i=nBegin-1;i<=nEnd-1;i++) { strIndices = get_one_block_from_aux_mopac_file(file, "MO_INDICES[", &ni); strCoefs = get_one_block_from_aux_mopac_file(file, "MO_COEFFICIENTS[", &nc); if(ni!=nc || ni>NOrb || ni<1) { free_one_string_table(strIndices, ni); free_one_string_table(strCoefs, nc); n = 0; break; } for(k=0;k0) normalize_orbitals(FileName, CoefAlphaOrbitals); } if(file) fclose(file); if(n>0 || (nAlpha>0 && nAlpha==nBeta)) return TRUE; else return FALSE; } /********************************************************************************/ static gboolean set_coef_orbitals_nocomp(gchar* FileName) { FILE *file; gchar** strAlpha = NULL; gchar** strBeta = NULL; gchar** str = NULL; gint nAlpha = 0; gint nBeta = 0; gint n = 0; gint i,j,k; gint nBeginAlpha = 0; gint nEndAlpha = 0; gint nBeginBeta = 0; gint nEndBeta = 0; gint nBegin = 0; gint nEnd = 0; file = FOpen(FileName, "rb"); if(file ==NULL) return FALSE; get_number_of_mos(file, &n, &nAlpha, &nBeta, &nBegin, &nEnd, &nBeginAlpha, &nEndAlpha, &nBeginBeta, &nEndBeta); strAlpha = get_one_block_from_aux_mopac_file(file, "ALPHA_EIGENVECTORS[", &nAlpha); if(strAlpha) { fseek(file, 0L, SEEK_SET); strBeta = get_one_block_from_aux_mopac_file(file, "BETA_EIGENVECTORS[", &nBeta); } else { fseek(file, 0L, SEEK_SET); str = get_one_block_from_aux_mopac_file(file, "EIGENVECTORS[", &n); } if(n>0) { CoefAlphaOrbitals = CreateTable2(NOrb); CoefBetaOrbitals = CoefAlphaOrbitals; k = 0; for(i=nBegin-1;i0 && nAlpha==nBeta) { CoefAlphaOrbitals = CreateTable2(NOrb); CoefBetaOrbitals = CreateTable2(NOrb); k = 0; for(i=nBeginAlpha-1;i0 || (nAlpha>0 && nAlpha==nBeta)) return TRUE; else return FALSE; } /********************************************************************************/ static gboolean set_coef_orbitals(gchar* FileName) { if(set_coef_orbitals_nocomp(FileName)) return TRUE; return set_coef_orbitals_comp(FileName); } /********************************************************************************/ static gboolean set_ener_orbitals_localized(gchar* FileName) { FILE *file; gchar** strAlpha = NULL; gchar** strBeta = NULL; gchar** str = NULL; gint nAlpha = 0; gint nBeta = 0; gint n = 0; gint i; file = FOpen(FileName, "rb"); if(file ==NULL) return FALSE; strAlpha = get_one_block_from_aux_mopac_file(file, "ALPHA_LMO_E[", &nAlpha); if(strAlpha) { fseek(file, 0L, SEEK_SET); strBeta = get_one_block_from_aux_mopac_file(file, "BETA_LMO_E[", &nBeta); } else { fseek(file, 0L, SEEK_SET); str = get_one_block_from_aux_mopac_file(file, "LMO_E[", &n); } if(n>0) { EnerAlphaOrbitals = g_malloc(NOrb*sizeof(gdouble)); EnerBetaOrbitals = g_malloc(NOrb*sizeof(gdouble)); for(i=0;i0) { EnerAlphaOrbitals = g_malloc(NOrb*sizeof(gdouble)); for(i=0;i0) { EnerBetaOrbitals = g_malloc(NOrb*sizeof(gdouble)); for(i=0;i0 || (nAlpha>0 && nAlpha==nBeta)) return TRUE; else return FALSE; } /********************************************************************************/ static gboolean set_coef_orbitals_localized(gchar* FileName) { FILE *file; gchar** strAlpha = NULL; gchar** strBeta = NULL; gchar** str = NULL; gint nAlpha = 0; gint nBeta = 0; gint n = 0; gint i,j,k; file = FOpen(FileName, "rb"); if(file ==NULL) return FALSE; strAlpha = get_one_block_from_aux_mopac_file(file, "ALPHA_LMO_MO[", &nAlpha); if(strAlpha) { fseek(file, 0L, SEEK_SET); strBeta = get_one_block_from_aux_mopac_file(file, "BETA_LMO_MO[", &nBeta); } else { fseek(file, 0L, SEEK_SET); str = get_one_block_from_aux_mopac_file(file, "LMO_MO[", &n); } if(n>0) { gint no = n/NOrb; gint nMax = (no>NOrb)?no:NOrb; CoefAlphaOrbitals = CreateTable2(nMax); CoefBetaOrbitals = CoefAlphaOrbitals; k = 0; for(i=0;i0 && nAlpha==nBeta) { gint no = nAlpha/NOrb; gint nMax = (no>NOrb)?no:NOrb; CoefAlphaOrbitals = CreateTable2(nMax); CoefBetaOrbitals = CreateTable2(nMax); k = 0; for(i=0;i0 || (nAlpha>0 && nAlpha==nBeta)) return TRUE; else return FALSE; } /********************************************************************************/ void read_mopac_orbitals(gchar* FileName) { gint typefile; /* gint typebasis=1;*/ /* Mopac print OM in cartezian presentation even ISPHER=0 or 1 or -1 */ gchar *t = NULL; gint nrs; gchar** strbasis=NULL; gint i; gboolean Ok; gdouble* zetas = NULL; gint* nums = NULL; gint* pqn = NULL; gint nNums = 0; gint nZetas = 0; gint nPqn = 0; typefile =get_type_file_orb(FileName); if(typefile==GABEDIT_TYPEFILE_UNKNOWN) return; if(typefile != GABEDIT_TYPEFILE_MOPAC_AUX) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not read this format from '%s' file\n"),FileName); Message(buffer,_("Error"),TRUE); return ; } free_data_all(); t = get_name_file(FileName); set_status_label_info(_("File name"),t); g_free(t); set_status_label_info(_("File type"),"Mopac"); set_status_label_info(_("Mol. Orb."),"Reading"); free_orbitals(); Ok = read_geomorb_mopac_file_geom(FileName); if(!Ok) { free_geometry(); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); set_status_label_info(_("Mol. Orb."),_("Nothing")); return; } if(Type) g_free(Type); Type = NULL; strbasis=read_basis_types_from_a_mopac_output_file(FileName, &nrs); zetas = read_basis_zeta_from_a_mopac_output_file(FileName, &nZetas); nums = read_basis_atomnums_from_a_mopac_output_file(FileName, &nNums); pqn = read_basis_atompqn_from_a_mopac_output_file(FileName, &nPqn); if(!strbasis || !zetas || !nums || nrs<1 || nZetas<1 || nNums<1 || nPqn<1 || nrs!= nZetas || nrs!=nNums || nrs !=nPqn) { if(GeomOrb) { init_atomic_orbitals(); for(i=0;i #include "GlobalOrb.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Vector3d.h" #include "../Utils/Transformation.h" #include "../Display/StatusOrb.h" #include "../Display/GLArea.h" #include "../Display/AnimationContours.h" #include "../Display/ColorMap.h" #include "../Display/TriangleDraw.h" #include "../Files/FolderChooser.h" #include "../Files/GabeditFolderChooser.h" #include "../Common/Help.h" #include "../Display/PovrayGL.h" #include "../Display/Images.h" static GtkWidget *WinDlg = NULL; static GtkWidget *EntryVelocity = NULL; static GtkWidget *EntryNContours = NULL; static GtkWidget *EntryMinIsoValue = NULL; static GtkWidget *EntryMaxIsoValue = NULL; static GtkWidget *LabelNContours = NULL; static GtkWidget *LabelMinIso = NULL; static GtkWidget *LabelMaxIso = NULL; static GtkWidget *PlayButton = NULL; static GtkWidget *StopButton = NULL; static gboolean play = FALSE; static GtkWidget *buttonCheckFilm = NULL; static GtkWidget *buttonDirFilm = NULL; static GtkWidget* comboListFilm = NULL; static gboolean createFilm = FALSE; static gint numFileFilm = 0; static gchar formatFilm[100] = "BMP"; static gdouble velocity = 0.1; static gint nContours = 10; static gdouble minIsoValue = 0; static gdouble maxIsoValue = 0.1; static gboolean linear = TRUE; static GtkWidget *buttonXYPlanes = NULL; static GtkWidget *buttonXZPlanes = NULL; static GtkWidget *buttonYZPlanes = NULL; static GtkWidget* linearButton = NULL; static GtkWidget* logButton = NULL; typedef enum { XYPLANES = 0, XZPLANES = 1, YZPLANES = 2 } GabEditPlanes; static GabEditPlanes selectedPlanes = XYPLANES; /********************************************************************************/ static void animate(); static void stop_animation(GtkWidget *win, gpointer data); static void play_animation(GtkWidget *win, gpointer data); /********************************************************************************/ static void setMinMaxIsovalues() { gdouble max; gdouble min; gint i; gint j; gint k; if(!grid) return; max = grid->point[0][0][0].C[3]; min = grid->point[0][0][0].C[3]; for(i=0;iN[0];i++) for(j=0;jN[1];j++) for(k=0;kN[2];k++) { if(min>grid->point[i][j][k].C[3]) min = grid->point[i][j][k].C[3]; if(maxpoint[i][j][k].C[3]) max = grid->point[i][j][k].C[3]; } max = fabs(max); minIsoValue = max/20; maxIsoValue = max; } /********************************************************************************/ static void reset_last_directory(GtkWidget *dirSelector, gpointer data) { gchar* dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); gchar* filename = NULL; if(dirname && strlen(dirname)>0) { if(dirname[strlen(dirname)-1] != G_DIR_SEPARATOR) filename = g_strdup_printf("%s%sdump.txt",dirname,G_DIR_SEPARATOR_S); else filename = g_strdup_printf("%sdump.txt",dirname); } else { dirname = g_strdup(g_get_home_dir()); filename = g_strdup_printf("%s%sdump.txt",dirname,G_DIR_SEPARATOR_S); } if(dirname) g_free(dirname); if(filename) { set_last_directory(filename); g_free(filename); } } /********************************************************************************/ static void set_directory(GtkWidget *win, gpointer data) { GtkWidget *dirSelector; dirSelector = selctionOfDir(reset_last_directory, _("Set folder"), GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); gtk_window_set_transient_for(GTK_WINDOW(dirSelector),GTK_WINDOW(PrincipalWindow)); gtk_window_set_transient_for(GTK_WINDOW(dirSelector),GTK_WINDOW(WinDlg)); } /**********************************************************************************************************/ static void new_plane(gint numPlane, gint numberOfContours, gdouble min, gdouble max, GabEditPlanes type) { gint i; gint i0=0; gint i1=1; gdouble* values = NULL; gdouble step = 0; gdouble gap = 0; if(numPlane<0) return; if(numberOfContours<1) return; switch(type) { case YZPLANES : i0 = 1;i1 = 2;break; /* plane YZ */ case XZPLANES : i0 = 0;i1 = 2;break; /* plane XZ */ case XYPLANES : i0 = 0;i1 = 1;break; /* plane XY */ } values = g_malloc(numberOfContours*sizeof(gdouble)); if(linear) { step = (max-min)/(numberOfContours/2); for(i=0;iN[0]/2; break; /* plane YZ */ case XZPLANES : numPlane = grid->N[1]/2; break; /* plane XZ */ case XYPLANES : numPlane = grid->N[2]/2; break; /* plane XY */ } new_plane(numPlane, numberOfContours, minIso, maxIso, selectedPlanes); if(this_is_an_object((GtkObject*)GLArea)) glarea_rafresh(GLArea); } /********************************************************************************/ static void setColorMap(gdouble min, gdouble max) { GtkWidget* handleBoxColorMap = g_object_get_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapContours"); ColorMap* colorMap = NULL; if(handleBoxColorMap) colorMap = g_object_get_data(G_OBJECT(handleBoxColorMap),"ColorMap"); if(colorMap) { gchar* t = NULL; GtkWidget* entryLeft = g_object_get_data(G_OBJECT(handleBoxColorMap), "EntryLeft"); GtkWidget* entryRight = g_object_get_data(G_OBJECT(handleBoxColorMap), "EntryRight"); t = g_strdup_printf("%lf",min); gtk_entry_set_text(GTK_ENTRY(entryLeft),t); g_free(t); gtk_widget_activate(entryLeft); t = g_strdup_printf("%lf",max); gtk_entry_set_text(GTK_ENTRY(entryRight),t); g_free(t); gtk_widget_activate(entryRight); return; } if(handleBoxColorMap) { GtkWidget* entryLeft = g_object_get_data(G_OBJECT(handleBoxColorMap), "EntryLeft"); GtkWidget* entryRight = g_object_get_data(G_OBJECT(handleBoxColorMap), "EntryRight"); GtkWidget* darea = g_object_get_data(G_OBJECT(handleBoxColorMap), "DrawingArea"); gchar* t = NULL; colorMap = new_colorMap_min_max(min,max); g_object_set_data(G_OBJECT(handleBoxColorMap),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryLeft),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryRight),"ColorMap", colorMap); g_object_set_data(G_OBJECT(darea),"ColorMap", colorMap); t = g_strdup_printf("%lf",min); gtk_entry_set_text(GTK_ENTRY(entryLeft),t); g_free(t); t = g_strdup_printf("%lf",max); gtk_entry_set_text(GTK_ENTRY(entryRight),t); g_free(t); } } /********************************************************************************/ static void resetVelocity(GtkWidget *win, gpointer data) { gdouble velo = 0; gchar* t = NULL; if(!GTK_IS_WIDGET(EntryVelocity)) return; velo = atof(gtk_entry_get_text(GTK_ENTRY(EntryVelocity))); if(velo<0) { velo = -velo; t = g_strdup_printf("%lf",velo); gtk_entry_set_text(GTK_ENTRY(EntryVelocity),t); g_free(t); } velocity = velo; if(!play) stop_animation(NULL,NULL); } /********************************************************************************/ static void resetNumberOfContours(GtkWidget *win, gpointer data) { gint nC = 0; gchar* t = NULL; gboolean reBuild = FALSE; if(!GTK_IS_WIDGET(EntryNContours)) return; nC = atoi(gtk_entry_get_text(GTK_ENTRY(EntryNContours))); if(nC<=1) { nC = 10; t = g_strdup_printf("%d",nC); gtk_entry_set_text(GTK_ENTRY(EntryNContours),t); g_free(t); } if(nC%2!=0) { nC = nC/2*2; if(nC==0) nC = 2; t = g_strdup_printf("%d",nC); gtk_entry_set_text(GTK_ENTRY(EntryNContours),t); g_free(t); } if(nContours != nC) reBuild = TRUE; nContours = nC; if(!play) stop_animation(NULL,NULL); if(!win && reBuild) first_plane(); } /********************************************************************************/ static void resetIsoValues(GtkWidget *win, gpointer data) { gdouble minIso = 0; gdouble maxIso = 0; gboolean reBuild = FALSE; gchar t[BSIZE]; if(!GTK_IS_WIDGET(EntryMinIsoValue)) return; if(!GTK_IS_WIDGET(EntryMaxIsoValue)) return; minIso = atof(gtk_entry_get_text(GTK_ENTRY(EntryMinIsoValue))); maxIso = atof(gtk_entry_get_text(GTK_ENTRY(EntryMaxIsoValue))); if(minIsoValue != minIso) reBuild = TRUE; if(minIso<0) { minIso = 0; sprintf(t,"%lf",minIso); gtk_entry_set_text(GTK_ENTRY(EntryMinIsoValue),t); } if(minIsoValue != minIso) reBuild = TRUE; minIsoValue = minIso; if(maxIsoactive) selectedPlanes = XYPLANES; if(GTK_IS_WIDGET(buttonXZPlanes) && GTK_TOGGLE_BUTTON (buttonXZPlanes)->active) selectedPlanes = XZPLANES; if(GTK_IS_WIDGET(buttonYZPlanes) && GTK_TOGGLE_BUTTON (buttonYZPlanes)->active) selectedPlanes = YZPLANES; first_plane(); } /********************************************************************************/ static void addPlanesButtons(GtkWidget* box) { GtkWidget *table; gint i; GtkWidget *separator; table = gtk_table_new(3,3,FALSE); gtk_box_pack_start(GTK_BOX(box), table,TRUE,TRUE,0); i = 0; buttonYZPlanes = gtk_radio_button_new_with_label( NULL,"First direction" ); gtk_table_attach(GTK_TABLE(table),buttonYZPlanes,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); i++; buttonXZPlanes = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonYZPlanes)), "Second direction"); gtk_table_attach(GTK_TABLE(table),buttonXZPlanes,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); i++; buttonXYPlanes = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonYZPlanes)), "Third direction"); gtk_table_attach(GTK_TABLE(table),buttonXYPlanes,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); g_signal_connect (G_OBJECT(buttonXYPlanes), "toggled", G_CALLBACK (buttonPlanesSelected), NULL); g_signal_connect (G_OBJECT(buttonXZPlanes), "toggled", G_CALLBACK (buttonPlanesSelected), NULL); g_signal_connect (G_OBJECT(buttonYZPlanes), "toggled", G_CALLBACK (buttonPlanesSelected), NULL); switch(selectedPlanes) { case XYPLANES : gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonXYPlanes), TRUE); break; case XZPLANES : gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonXZPlanes), TRUE); break; case YZPLANES : gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonYZPlanes), TRUE); break; } i++; separator = gtk_hseparator_new(); gtk_table_attach(GTK_TABLE(table),separator,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); } /********************************************************************************/ static void linearSelected(GtkWidget *widget) { linear = TRUE; first_plane(); } /********************************************************************************/ static void logSelected(GtkWidget *widget) { linear = FALSE; first_plane(); } /********************************************************************************/ static gchar* get_format_image_from_option() { if(strcmp(formatFilm,"BMP")==0) return "bmp"; if(strcmp(formatFilm,"PPM")==0) return "ppm"; if(strcmp(formatFilm,"PNG")==0) return "png"; if(strcmp(formatFilm,"JPEG")==0) return "jpg"; if(strcmp(formatFilm,"PNG transparent")==0) return "png"; if(strcmp(formatFilm,"Povray")==0) return "pov"; return "UNK"; } /********************************************************************************/ static void filmSelected(GtkWidget *widget) { if(GTK_IS_WIDGET(buttonCheckFilm)&& GTK_TOGGLE_BUTTON (buttonCheckFilm)->active) { createFilm = TRUE; if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, TRUE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, TRUE); } else { createFilm = FALSE; if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); } } /********************************************************************************/ static void showMessageEnd() { gchar* format =get_format_image_from_option(); gchar* message = messageAnimatedImage(format); gchar* t = g_strdup_printf(_("\nA series of gab*.%s files was created in \"%s\" directeory.\n\n\n%s"), format, get_last_directory(),message); GtkWidget* winDlg = Message(t,_("Info"),TRUE); g_free(message); gtk_window_set_modal (GTK_WINDOW (winDlg), TRUE); g_free(t); } /********************************************************************************/ static void unActivateFilm() { createFilm = FALSE; numFileFilm = 0; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCheckFilm), FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); } /********************************************************************************************************/ static void set_format_film(GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } if(!data) return; sprintf(formatFilm ,"%s",(gchar*)data); } /********************************************************************************************************/ static GtkWidget *create_list_of_formats() { GtkTreeIter iter; GtkListStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; gint i; gint k; gchar* options[] = {"BMP","PPM", "JPEG", "PNG", "PNG transparent", "Povray"}; guint numberOfElements = G_N_ELEMENTS (options); k = 0; store = gtk_list_store_new (1,G_TYPE_STRING); for(i=0;iN[0]-1; break; /* planes YZ */ case XZPLANES : iMax = grid->N[1]-1; break; /* planes XZ */ case XYPLANES : iMax = grid->N[2]-1; break; /* planes XY */ } numFileFilm = 0; if(GTK_IS_WIDGET(buttonCheckFilm)) gtk_widget_set_sensitive(buttonCheckFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(EntryNContours)) gtk_widget_set_sensitive(EntryNContours, FALSE); if(GTK_IS_WIDGET(LabelNContours)) gtk_widget_set_sensitive(LabelNContours, FALSE); if(GTK_IS_WIDGET(LabelMinIso)) gtk_widget_set_sensitive(LabelMinIso, FALSE); if(GTK_IS_WIDGET(LabelMaxIso)) gtk_widget_set_sensitive(LabelMaxIso, FALSE); if(GTK_IS_WIDGET(EntryMinIsoValue)) gtk_widget_set_sensitive(EntryMinIsoValue, FALSE); if(GTK_IS_WIDGET(EntryMaxIsoValue)) gtk_widget_set_sensitive(EntryMaxIsoValue, FALSE); if(GTK_IS_WIDGET(buttonXYPlanes)) gtk_widget_set_sensitive(buttonXYPlanes, FALSE); if(GTK_IS_WIDGET(buttonXZPlanes)) gtk_widget_set_sensitive(buttonXZPlanes, FALSE); if(GTK_IS_WIDGET(buttonYZPlanes)) gtk_widget_set_sensitive(buttonYZPlanes, FALSE); if(GTK_IS_WIDGET(linearButton)) gtk_widget_set_sensitive(linearButton, FALSE); if(GTK_IS_WIDGET(logButton)) gtk_widget_set_sensitive(logButton, FALSE); numPlane = 0; setAnimateContours(TRUE); while(play) { new_plane(numPlane, numberOfContours, minIso, maxIso, selectedPlanes); while( gtk_events_pending() ) gtk_main_iteration(); glarea_rafresh(GLArea); createImagesFile(); Waiting(velocity); if(aller) numPlane++; else numPlane--; if(numPlane==iMax) { aller = FALSE; } if(numPlane==0) { aller = TRUE; if(numFileFilm>0) showMessageEnd(); unActivateFilm(); while( gtk_events_pending() ) gtk_main_iteration(); } } if(numFileFilm>0) showMessageEnd(); unActivateFilm(); if(GTK_IS_WIDGET(buttonCheckFilm)) gtk_widget_set_sensitive(buttonCheckFilm, TRUE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(EntryNContours)) gtk_widget_set_sensitive(EntryNContours, TRUE); if(GTK_IS_WIDGET(LabelNContours)) gtk_widget_set_sensitive(LabelNContours, TRUE); if(GTK_IS_WIDGET(LabelMinIso)) gtk_widget_set_sensitive(LabelMinIso, TRUE); if(GTK_IS_WIDGET(LabelMaxIso)) gtk_widget_set_sensitive(LabelMaxIso, TRUE); if(GTK_IS_WIDGET(EntryMinIsoValue)) gtk_widget_set_sensitive(EntryMinIsoValue, TRUE); if(GTK_IS_WIDGET(EntryMaxIsoValue)) gtk_widget_set_sensitive(EntryMaxIsoValue, TRUE); if(GTK_IS_WIDGET(buttonXYPlanes)) gtk_widget_set_sensitive(buttonXYPlanes, TRUE); if(GTK_IS_WIDGET(buttonXZPlanes)) gtk_widget_set_sensitive(buttonXZPlanes, TRUE); if(GTK_IS_WIDGET(buttonYZPlanes)) gtk_widget_set_sensitive(buttonYZPlanes, TRUE); if(GTK_IS_WIDGET(linearButton)) gtk_widget_set_sensitive(linearButton, TRUE); if(GTK_IS_WIDGET(logButton)) gtk_widget_set_sensitive(logButton, TRUE); setAnimateContours(FALSE); stop_animation(NULL, NULL); first_plane(); } /********************************************************************************/ void animationContoursDlg() { GtkWidget *Win; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *parentWindow = PrincipalWindow; if(WinDlg) return; if(!grid ) { if( !CancelCalcul) Message(_("Sorry, Grid not define "),_("Error"),TRUE); return; } initAnimationDlg(); Win= gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow)); gtk_window_set_title(GTK_WINDOW(Win),_("contours animation")); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); WinDlg = Win; add_child(PrincipalWindow,Win,destroyAnimationDlg,"Anim. Cont."); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (Win), vbox); hbox = create_hbox_false(vbox); gtk_widget_realize(Win); setMinMaxIsovalues(); addEntrysButtons(vbox); gtk_widget_show_all(vbox); gtk_widget_show_now(Win); fit_windows_position(PrincipalWindow, Win); stop_animation(NULL, NULL); first_plane(); } GabeditSrc250/src/Display/Basis.h0000644000175100017510000000366413130665225017112 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_BASIS_H__ #define __GABEDIT_BASIS_H__ void save_basis_gabedit_format(FILE* file); void PrintBasis(); gboolean DefineBasisType(gchar *fileName); gboolean DefineGabeditBasisType(gchar *fileName); gboolean DefineMoldenBasisType(gchar *fileName); char GetSymmetry(int l); int GetNelectrons(char *symb); void printLineChar(char c,int n); int ReadCommandLines(); int OpenDataFile(char * NameFile); void PrintAllBasis(); void NormaliseAllBasis(); void NormaliseAllNoRadBasis(); void DefineCartBasis(); void DefineSphericalBasis(); void DefineAtomicNumOrb(); gboolean readBasisFromGaussianFChk(gchar *fileName); #endif /* __GABEDIT_BASIS_H__ */ GabeditSrc250/src/Display/ContoursPov.c0000644000175100017510000001662513130665225020346 0ustar alloucheallouche/*ContoursPov.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "../Utils/Vector3d.h" #include "../Utils/Utils.h" #include "../Utils/Transformation.h" #include "../Display/Contours.h" #include #include "../Display/ContoursDraw.h" #include "../Display/ColorMap.h" #include "../Display/TriangleDraw.h" /********************************************************************************/ static gchar *get_pov_cylingre(gdouble C1[],gdouble C2[],gdouble Colors[], gdouble coef) { gchar* temp = NULL; gint i; gdouble d = 0; for(i=0;i<3;i++) d += (C1[i]-C2[i])*(C1[i]-C2[i]); if(d<1e-8) return g_strdup("\n"); temp = g_strdup_printf( "cylinder\n" "{\n" "\t<%14.6f,%14.6f,%14.6f>,\n" "\t<%14.6f,%14.6f,%14.6f> \n" "\twireFrameCylinderRadius*%lf\n" "\ttexture\n" "\t{\n" "\t\tpigment { rgb<%14.6f,%14.6f,%14.6f> }\n" "\t\tfinish {ambient ambientCoef diffuse diffuseCoef specular specularCoef}\n" "\t}\n" "\ttransform { myTransforms }\n" "}\n", C1[0],C1[1],C1[2], C2[0],C2[1],C2[2], coef, Colors[0],Colors[1],Colors[2] ); return temp; } /********************************************************************************/ static void addPlanPovRay(FILE* file, Grid* plansgrid,gint i0,gint i1,gint numplan,gdouble Gap[], gdouble Color[]) { gchar* temp; gint ip = numplan; gint ix=0,iy=0,iz=0; gint ix1=0,iy1=0,iz1=0; gint ix2=0,iy2=0,iz2=0; gint ix3=0,iy3=0,iz3=0; gint ix4,iy4,iz4; gint i,j,ii,jj; gdouble C1[3]; gdouble C2[3]; i = 0; j = 0; ii = plansgrid->N[i0]-1; jj = plansgrid->N[i1]-1; switch(i0) { case 0: ix = i; ix1 = ix2 = ii; ix4 = ix3 = ix; switch(i1) { case 1 : iy = j; iz = ip; iy1 = iy4 = iy; iy2 = iy3 = jj ; iz1 = iz2 = iz3 = iz4 = iz; break; case 2 : iy = ip;iz = j; iy1 = iy2 = iy3 = iy4 = iy; iz1 = iz4 = iz; iz2 = iz3 = jj ; break; } break; case 1: iy = i; iy1 = iy2 = ii; iy3 = iy4 = iy ; switch(i1) { case 0 : ix = j; iz = ip; iz1 = iz2 = iz3 = iz4 = iz; ix1 = ix4 = ix; ix2 = ix3 = jj ; break; case 2 : ix = ip;iz = j; ix1 = ix2 = ix3 = ix4 = ix; iz1 = iz4 = iz; iz2 = iz3 = jj ; break; } break; case 2: iz = i; iz1 = iz2 = ii; iz3 = iz4 = iz ; switch(i1) { case 0 : ix = j; iy = ip; iy1 = iy2 = iy3 = iy4 = iy; ix1 = ix4 = ix; ix2 = ix3 = jj ; break; case 1 : ix = ip;iy = j; ix1 = ix2 = ix3 = ix4 = ix; iy1 = iy4 = iy; iy2 = iy3 = jj ; break; } break; } for(i=0;i<3;i++) Color[i] = 1.0; for(i=0;i<3;i++) C1[i] = plansgrid->point[ix][iy][iz].C[i] + Gap[i]; for(i=0;i<3;i++) C2[i] = plansgrid->point[ix1][iy1][iz1].C[i] + Gap[i]; temp = get_pov_cylingre(C1,C2,Color, 1.0); fprintf(file,"%s",temp); g_free(temp); for(i=0;i<3;i++) C1[i] = C2[i]; for(i=0;i<3;i++) C2[i] = plansgrid->point[ix2][iy2][iz2].C[i] + Gap[i]; temp = get_pov_cylingre(C1,C2,Color, 1.0); fprintf(file,"%s",temp); g_free(temp); for(i=0;i<3;i++) C1[i] = C2[i]; for(i=0;i<3;i++) C2[i] = plansgrid->point[ix3][iy3][iz3].C[i] + Gap[i]; temp = get_pov_cylingre(C1,C2,Color, 1.0); fprintf(file,"%s",temp); g_free(temp); for(i=0;i<3;i++) C1[i] = plansgrid->point[ix][iy][iz].C[i] + Gap[i]; temp = get_pov_cylingre(C1,C2,Color, 1.0); fprintf(file,"%s",temp); g_free(temp); } /********************************************************************************/ static void AddContoursPovRay(FILE* file,Contours contours,gdouble Gap[], gdouble Color[]) { gint i; gint j; gint l; gint n=0; gint N[2] = {contours.N[0],contours.N[1]}; PointsContour** pointscontour= contours.pointscontour; gdouble C1[3]; gdouble C2[3]; gchar* temp; for(i=1;i0) get_color_surface(0,Color); if(Ncontours==1 && values[0]<0) get_color_surface(1,Color); if(Ncontours==1 && values[0]==0) get_color_surface(2,Color); if(Ncontours>1) { addPlanPovRay(file, plansgrid,i0,i1,numplan,Gap, Color); Color[2] = 0.8; } for(i=0;i1) set_Color_From_colorMap(colorMap, Color, values[i]); contours = get_contours(plansgrid,values[i],i0,i1,numplan); AddContoursPovRay(file,contours,Gap,Color); contour_point_free(contours); } g_free(Gap); return 0; } /********************************************************************************/ gint addContoursPovRay(Grid* plansgrid,gint Ncontours,gdouble* values,gint i0,gint i1,gint numplan,gdouble gap) { gchar* fileName = g_strdup_printf("%s%stmp%spovrayContours.pov",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); FILE* file = fopen(fileName,"a"); g_free(fileName); if(!file) return 1; if(Ncontours>0) { addOneContoursPovRay(file, plansgrid,Ncontours,values,i0,i1,numplan,gap); fclose(file); return 0; } else return 1; return 1; } /********************************************************************************/ void deleteContoursPovRayFile() { gchar* fileName = g_strdup_printf("%s%stmp%spovrayContours.pov",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); unlink(fileName); g_free(fileName); } GabeditSrc250/src/Display/GlobalOrb.h0000644000175100017510000000727513130665225017716 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GLOBALORB_H__ #define __GABEDIT_GLOBALORB_H__ #include #include #include #include #include #include #include #include #include "../Files/GabeditFileChooser.h" #include "../../gl2ps/gl2ps.h" #include #include #include "Grid.h" #include "IsoSurface.h" #define PRECISON_CYLINDER 0.001 /* #define PI 3.14159265358979323846 #define ANG_TO_BOHR 1.0/0.52917726 #define BOHR_TO_ANG 0.52917726 #define DEG_TO_RAD 0.017453293 */ #define BUFER_SIZE 8912 #define MAX_FACT 150 #define MAX_J 20 #define NTS 500 #define TMAX 50.0 #define NATOMS 104 #include "../Common/GabeditType.h" /*#include "GabEditType.h"*/ GtkWidget* PrincipalWindow; GtkWidget* GLArea; TypeGeomOrb* GeomOrb; gint ScreenWidth; gint ScreenHeight; TypeFontsStyle FontStyle; gchar *Title; TYPE *Type; CGTF *AOrb; CSTF *SAOrb; gdouble* SOverlaps; gint Ncenters; gint Ntype; gint NAOrb; gint NOrb; /* Maximal number of orbital */ gint NAlphaOrb; /* Alpha orbital number */ gint NBetaOrb; /* Beta orbital number */ gint NTotOcc; gint NAlphaOcc; gint NBetaOcc; gint TypeSelOrb; /* Type of Selected orbital 1 if alpha 2 if beta */ gint NumSelOrb; /* Number of Selected orbital : 0,1,2.... */ FILE* forb; gdouble **CoefAlphaOrbitals; gdouble *OccAlphaOrbitals; gdouble *EnerAlphaOrbitals; gchar **SymAlphaOrbitals; gdouble **CoefBetaOrbitals; gdouble *EnerBetaOrbitals; gdouble *OccBetaOrbitals; gchar **SymBetaOrbitals; GabEditTypeGeom TypeGeom; GabEditTypeGrid TypeGrid; GabEditTypeTexture TypeTexture; GabEditTypeBlend TypeBlend; GabEditTypeWireFrame TypePosWireFrame; GabEditTypeWireFrame TypeNegWireFrame; GabEditTypeSurfShow SurfShow; gboolean PopupMenuIsOpen; IsoSurface* isopositive; IsoSurface* isonegative; IsoSurface* isonull; Grid* grid; Grid* gridPlaneForContours; gboolean reDrawContoursPlane; Grid* gridPlaneForPlanesMapped; gboolean reDrawPlaneMappedPlane; gboolean AOAvailable; gboolean RebuildSurf; gboolean RebuildGeom; gboolean newSurface; gboolean newContours; gboolean DeleteContours; gboolean CancelCalcul; gboolean ShowDipoleOrb; gboolean ShowHBondOrb; gboolean ShowHAtomOrb; gboolean ShowMultiBondsOrb; gboolean ShowVibration; gboolean createBMPFiles; gint numBMPFile; gboolean createPPMFiles; gint numPPMFile; gboolean createPOVFiles; gint numPOVFile; gdouble solventRadius; gdouble alphaFED; #endif /* __GABEDIT_GLOBALORB_H__ */ GabeditSrc250/src/Display/Contours.h0000644000175100017510000000344313130665225017660 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_CONTOURS_H__ #define __GABEDIT_CONTOURS_H__ typedef struct _PointsContour { gint N; Point5* point; }PointsContour; typedef struct _Contours { gint N[2]; PointsContour** pointscontour; }Contours; void contour_point_free(Contours contours); Contours get_contours(Grid* plansgrid,gdouble value,gint i0,gint i1,gint numplan); void create_contours(gchar* title,gint type); void create_contours_plane(gchar* title); void create_contours_isosurface(); #endif /* __GABEDIT_CONTOURS_H__ */ GabeditSrc250/src/Display/IntegralOrbitals.h0000644000175100017510000000326213130665225021310 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_COULOMBORBITALS_H__ #define __GABEDIT_COULOMBORBITALS_H__ void coulomb_orbitals_dlg(); void compute_overlap_matrix(gint typeOrb); void transition_matrix_orbitals_dlg(); void spatial_overlapiijj_orbitals_dlg(); void spatial_overlapij_orbitals_dlg(); void compute_mulliken_charges(); void compute_bondOrders(); void lambda_diagnostic_dlg(); #endif /* __GABEDIT_COULOMBORBITALS_H__ */ GabeditSrc250/src/Display/GeomOrbXYZ.c0000644000175100017510000035024413130665225020010 0ustar alloucheallouche/* GeomOrbXYZ.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "UtilsOrb.h" #include "../Utils/AtomsProp.h" #include "../Utils/Vector3d.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Transformation.h" #include "../Utils/Constants.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/OpenBabel.h" #include "../Utils/Utils.h" #include "../Utils/UtilsGL.h" #include "GLArea.h" #include "StatusOrb.h" #include "AtomicOrbitals.h" #include "BondsOrb.h" #ifdef G_OS_WIN32 #include #include #else #include #endif #define MAXNAME 6 #define MAXATOMTYPE 4 #define MAXRESIDUENAME 4 #define MAXSYMBOL 2 typedef struct _OldGeometry { gint numberOfAtoms; gchar** symbols; gdouble* X; gdouble* Y; gdouble* Z; }OldGeometry; static OldGeometry oldGeometry = {0,NULL,NULL,NULL,NULL}; /***************************************************************************************/ static void free_old_geometry() { gint i; if(oldGeometry.numberOfAtoms==0)return; if(oldGeometry.X) g_free(oldGeometry.X); if(oldGeometry.Y) g_free(oldGeometry.Y); if(oldGeometry.Z) g_free(oldGeometry.Z); for(i=0;i1e-6) return TRUE; for(i=0;i1e-6) return TRUE; for(i=0;i1e-6) return TRUE; return FALSE; } /***************************************************************************************/ void free_geometry() { gint i; set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); set_status_label_info(_("Geometry"),_("Nothing")); init_dipole(); reset_old_geometry(); if(!GeomOrb) { Ncenters = 0; return; } free_atomic_orbitals(); for(i=0;iGeomOrb[i].C[j]) min = GeomOrb[i].C[j]; if(max=(gint)n) break; progress_orb(scal,GABEDIT_PROGORB_READGEOM,FALSE); { char* e = fgets(t,taille,fd);} sscanf(t,"%s %s %s %s",AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3]); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomOrb[j].Symb=g_strdup(AtomCoord[0]); GeomOrb[j].C[0] = atof(ang_to_bohr(AtomCoord[1])); GeomOrb[j].C[1] = atof(ang_to_bohr(AtomCoord[2])); GeomOrb[j].C[2] = atof(ang_to_bohr(AtomCoord[3])); GeomOrb[j].Prop = prop_atom_get(GeomOrb[j].Symb); GeomOrb[j].partialCharge = 0.0; GeomOrb[j].variable = TRUE; GeomOrb[j].nuclearCharge = get_atomic_number_from_symbol(GeomOrb[j].Symb); } fclose(fd); Ncenters = n; if(Ncenters>10000) { TypeGeom = GABEDIT_TYPEGEOM_WIREFRAME; RebuildGeom = TRUE; } else { } } end: g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(OK) { RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); buildBondsOrb(); glarea_rafresh(GLArea); reset_grid_limits(); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); } return OK; } /********************************************************************************/ void gl_read_xyz_file_sel(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_xyz_file(FileName); } /********************************************************************************/ static gchar* get_symb_atom(gchar* symb) { gchar* S; gchar Forbidden[]={'0','1','2','3','4','5','6','7','8','9'}; if(strlen(symb)==1) S = g_strdup(symb); else { gint Ok = 1; gint i; for(i=0;i<10;i++) if(symb[1]== Forbidden[i]) { Ok =0; break; } if(Ok==1) { S = g_strdup_printf("%c%c",toupper(symb[0]),symb[1]); } else S = g_strdup_printf("%c",toupper(symb[0])); } if(!test_atom_define(S)) S = g_strdup_printf("%c",toupper(symb[0])); return S; } /*************************************************************************************/ static gboolean read_atom_pdb_file(gchar* line,gchar* listFields[]) { gint i; gint k = 0; if(strlen(line)<54) return FALSE; /* 0 -> Atom Type */ k = 0; for(i=0;i Residue Name */ k = 1; for(i=0;i Residue Number */ k = 2; for(i=0;i<4;i++) listFields[k][i] = line[23+i-1]; listFields[k][4] = '\0'; /* 3-> x */ k = 3; for(i=0;i<8;i++) listFields[k][i] = line[31+i-1]; listFields[k][8] = '\0'; /* 4-> y */ k = 4; for(i=0;i<8;i++) listFields[k][i] = line[39+i-1]; listFields[k][8] = '\0'; /* 5-> z */ k = 5; for(i=0;i<8;i++) listFields[k][i] = line[47+i-1]; listFields[k][8] = '\0'; /* 6-> Symbol */ k = 6; if(strlen(line)>=78) { for(i=0;i<2;i++) { listFields[k][i] = line[76+i]; } listFields[k][2] = '\0'; if(listFields[k][1]==' ') listFields[k][1] = '\0'; if(listFields[k][0]==' ') listFields[k][0] = '\0'; } else listFields[k][0] = '\0'; /* 7-> Charge */ k = 7; if(strlen(line)>=80) { for(i=0;i<(gint)strlen(line)-79+1;i++) listFields[k][i] = line[79+i-1]; listFields[k][strlen(line)-79+1] = '\0'; if(listFields[k][strlen(line)-79]=='\n') listFields[k][strlen(line)-79]='\0'; } else listFields[k][0] = '\0'; for(i=0;i<8;i++) { delete_last_spaces(listFields[i]); delete_first_spaces(listFields[i]); } return TRUE; } /********************************************************************************/ gboolean gl_read_pdb_file(gchar* FileName) { gchar *t; gchar *tmp=NULL; gboolean OK; FILE *fd; guint taille=BSIZE; guint i; gint j; gchar *listFields[8]; if ((!FileName) || (strcmp(FileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return FALSE ; } fd = FOpen(FileName, "rb"); if(fd==NULL) { gchar* tmp = g_strdup_printf(_("Sorry\n I can not open %s file"), FileName); Message(tmp,_("Error"),TRUE); g_free(tmp); return FALSE ; } for(i=0;i<8;i++) listFields[i]=g_malloc(taille*sizeof(gchar)); t=g_malloc(taille*sizeof(gchar)); OK=TRUE; free_data_all(); tmp = get_name_file(FileName); set_status_label_info(_("File name"),tmp); g_free(tmp); set_status_label_info(_("File type"),"pdb"); set_status_label_info(_("Geometry"),_("Reading")); init_dipole(); j=0; GeomOrb= NULL; while(!feof(fd)) { if(!fgets(t,taille,fd)) break; sscanf(t,"%s",listFields[0]); if(strcmp(listFields[0],"HETATM")!=0 && strcmp(listFields[0],"ATOM")!=0) continue; if(!strcmp(t,"END")) break; if(!read_atom_pdb_file(t,listFields)) continue; /* 0 -> Atom Type 1-> Residue Name 2-> Residue Number * 3-> x 4-> y 5-> z 6-> Symbol 7-> Charge */ GeomOrb=g_realloc(GeomOrb,(j+1)*sizeof(TypeGeomOrb)); if(strlen(listFields[6])<=0) { /* printf("PPPP listFields[6] = %s\n",listFields[6]);*/ GeomOrb[j].Symb= get_symb_atom(listFields[0]); } else GeomOrb[j].Symb= g_strdup(listFields[6]); GeomOrb[j].C[0] = atof(ang_to_bohr(listFields[3])); GeomOrb[j].C[1] = atof(ang_to_bohr(listFields[4])); GeomOrb[j].C[2] = atof(ang_to_bohr(listFields[5])); GeomOrb[j].Prop = prop_atom_get(GeomOrb[j].Symb); GeomOrb[j].partialCharge = 0.0; GeomOrb[j].variable = TRUE; GeomOrb[j].nuclearCharge = get_atomic_number_from_symbol(GeomOrb[j].Symb); j++; } if(j!=0) { Ncenters = j; readBondsPDB(fd); } fclose(fd); OK = FALSE; if(j!=0) OK = TRUE; if(OK) { Ncenters = j; if(Ncenters>1000) { TypeGeom = GABEDIT_TYPEGEOM_WIREFRAME; RebuildGeom = TRUE; } } else { Ncenters = 0; set_status_label_info(_("Geometry"),_("Nothing")); } g_free(t); for(i=0;i<8;i++) g_free(listFields[i]); if(OK) { RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); /* buildBondsOrb();*/ glarea_rafresh(GLArea); reset_grid_limits(); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); } return OK; } /********************************************************************************/ void gl_read_pdb_file_sel(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_pdb_file(FileName); } /*************************************************************************************/ static void read_hin_numbers_of_atoms(FILE* file, int* natoms, int* nresidues) { guint taille = BSIZE; gchar t[BSIZE]; gchar dump[BSIZE]; *natoms = 0; *nresidues = 0; fseek(file, 0L, SEEK_SET); while(!feof(file)) { if(!fgets(t,taille,file)) break; sscanf(t,"%s",dump); g_strdup(dump); if(!strcmp(dump,"ATOM")) (*natoms)++; if(!strcmp(dump,"RES")) (*nresidues)++; } } /*************************************************************************************/ static gboolean read_atom_hin_file(FILE* file,gchar* listFields[]) { guint taille = BSIZE; gchar t[BSIZE]; gchar dump[BSIZE]; gint i; if(!fgets(t,taille,file)) return FALSE; sscanf(t,"%s",dump); g_strdup(dump); if(strcmp(dump,"ATOM")!=0) { if(strcmp(dump,"RES")==0) { sscanf(t,"%s %s %s",dump,dump,listFields[1]); sprintf(listFields[0],"Unknown"); } else return FALSE; } else { /* 0 -> Atom Type PDB Style*/ /* 1 -> Atom Symbol*/ /* 2 -> Atom Type Amber*/ /* 3 -> Atom Charge*/ /* 4 -> x*/ /* 5 -> y*/ /* 6 -> z*/ sscanf(t,"%s %s %s %s %s %s %s %s %s %s",dump,dump,listFields[0],listFields[1],listFields[2],dump,listFields[3],listFields[4],listFields[5],listFields[6]); } for(i=0;i<6;i++) { delete_last_spaces(listFields[i]); delete_first_spaces(listFields[i]); } return TRUE; } /********************************************************************************/ gboolean gl_read_hin_file(gchar* FileName) { gchar *t; gchar *tmp=NULL; gboolean OK; FILE *fd; guint taille=BSIZE; guint i; gint j; gchar *listFields[8]; int natoms = 0; int nresidues = 0; if ((!FileName) || (strcmp(FileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return FALSE ; } fd = FOpen(FileName, "rb"); if(fd==NULL) { gchar* tmp = g_strdup_printf(_("Sorry\n I can not open %s file"), FileName); Message(tmp,_("Error"),TRUE); g_free(tmp); return FALSE ; } read_hin_numbers_of_atoms(fd,&natoms, &nresidues); if(natoms<1) { gchar* tmp = g_strdup_printf(_("Sorry\n I can not read grometry from %s file"), FileName); Message(tmp,_("Error"),TRUE); g_free(tmp); return FALSE ; } OK=TRUE; for(i=0;i<8;i++) listFields[i]=g_malloc(taille*sizeof(gchar)); t=g_malloc(taille*sizeof(gchar)); free_data_all(); tmp = get_name_file(FileName); set_status_label_info(_("File name"),tmp); g_free(tmp); set_status_label_info(_("File type"),"Hyperchem"); set_status_label_info(_("Geometry"),_("Reading")); init_dipole(); j=0; GeomOrb=g_malloc(natoms*sizeof(TypeGeomOrb)); fseek(fd, 0L, SEEK_SET); j = 0; i = -1; /* number residu */ while(!feof(fd)) { if(!read_atom_hin_file(fd,listFields))continue; if(strcmp(listFields[0],"Unknown")==0) { i++; continue; } /* 0 -> Atom Type PDB Style*/ /* 1 -> Atom Symbol*/ /* 2 -> Atom Type Amber*/ /* 3 -> Atom Charge*/ /* 4 -> x*/ /* 5 -> y*/ /* 6 -> z*/ /* printf("%s %s %s %s %s %s %s \n",listFields[0],listFields[1],listFields[2],listFields[3],listFields[4],listFields[5],listFields[6]);*/ GeomOrb[j].Symb= g_strdup(listFields[1]); GeomOrb[j].C[0] = atof(ang_to_bohr(listFields[4])); GeomOrb[j].C[1] = atof(ang_to_bohr(listFields[5])); GeomOrb[j].C[2] = atof(ang_to_bohr(listFields[6])); GeomOrb[j].Prop = prop_atom_get(GeomOrb[j].Symb); GeomOrb[j].partialCharge = atof(listFields[3]); GeomOrb[j].variable = TRUE; GeomOrb[j].nuclearCharge = get_atomic_number_from_symbol(GeomOrb[j].Symb); j++; if(j>=natoms)break; } OK = TRUE; if(natoms!=j) OK = FALSE; if(OK) { Ncenters = natoms; if(Ncenters>10000) { TypeGeom = GABEDIT_TYPEGEOM_WIREFRAME; RebuildGeom = TRUE; } readBondsHIN(fd); } else { Ncenters = 0; set_status_label_info(_("Geometry"),_("Nothing")); } fclose(fd); g_free(t); for(i=0;i<8;i++) g_free(listFields[i]); if(OK) { RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); /* buildBondsOrb();*/ glarea_rafresh(GLArea); reset_grid_limits(); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); } return OK; } /********************************************************************************/ void gl_read_hin_file_sel(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_hin_file(FileName); } /*****************************************************************************************/ static void conversion_to_hin_and_read(GtkWidget *wid,gpointer data) { gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *outputFileName = g_strdup_printf("%s%stmp%sgeom.hin",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); G_CONST_RETURN gchar* inputFileName; gchar inputFileType[100]; gchar outputFileType[] ="hin" ; GtkWidget* entryFileName = NULL; GtkWidget* entryFileType = NULL; G_CONST_RETURN gchar* t0; gchar* t; gchar* strout; gchar* strerr; G_CONST_RETURN gchar* babelCommand =get_open_babel_command(); GtkWidget *Win = (GtkWidget *)data; if(!this_is_an_object((GtkObject*)Win)) return; entryFileName = g_object_get_data (G_OBJECT (Win), "EntryFileName"); entryFileType = g_object_get_data (G_OBJECT (Win), "EntryCombo"); if(!this_is_an_object((GtkObject*)entryFileName)) return; if(!this_is_an_object((GtkObject*)entryFileType)) return; inputFileName = gtk_entry_get_text(GTK_ENTRY(entryFileName)); t0 = gtk_entry_get_text(GTK_ENTRY(entryFileType)); sscanf(t0,"%s",inputFileType); if(strstr(t0,"Automatic")) t = g_strdup_printf("%s %s %s", babelCommand, inputFileName, outputFileName); else t = g_strdup_printf("%s -i%s %s -o%s %s", babelCommand, inputFileType, inputFileName, outputFileType, outputFileName); unlink(fout); unlink(ferr); run_local_command(fout,ferr,t,FALSE); strout = cat_file(fout,FALSE); strerr = cat_file(ferr,FALSE); if(strout) { Message(strout, _("Info"), TRUE); g_free(strout); } if(strerr) { Message(strerr, _("Error"), TRUE); g_free(strerr); } else { gl_read_hin_file(outputFileName); } unlink(fout); unlink(ferr); unlink(outputFileName); g_free(fout); g_free(ferr); g_free(t); g_free(outputFileName); } /********************************************************************************/ void gl_create_babel_read_dialogue() { GtkWidget* okButton = create_babel_read_save_dialogue(TRUE); GtkWidget* win = g_object_get_data (G_OBJECT (okButton), "Window"); g_signal_connect(G_OBJECT(okButton), "clicked", G_CALLBACK(conversion_to_hin_and_read),win); g_signal_connect_swapped(G_OBJECT(okButton), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(win)); } /********************************************************************************/ gboolean gl_read_molden_or_gabedit_file_geom(gchar *FileName,gint type) { gchar *t; gchar *tmp; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; guint idummy; gint iz; guint i; gint j=0; gint l; gboolean Angs = FALSE; gchar title[BSIZE]; gchar titleCap[BSIZE]; gchar tCap[BSIZE]; gchar message[BSIZE]; if(type == 0) { sprintf(title,"[Molden Format]"); sprintf(message,"Sorry\nThis file is not a molden type file"); } else { sprintf(title,"[Gabedit Format]"); sprintf(message,"Sorry\nThis file is not a gabedit type file"); } sprintf(titleCap,"%s",title); uppercase(titleCap); for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); if ((!FileName) || (strcmp(FileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); for(i=0;i<5;i++) g_free(AtomCoord[i]); return FALSE; } t=g_malloc(taille*sizeof(gchar)); fd = FOpen(FileName, "rb"); if(fd ==NULL) { Message(_("Sorry\nI can not open this file"),_("Error"),TRUE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); return FALSE; } if(type==0) { gboolean ok = FALSE; while(!feof(fd)) { if(!fgets(t,taille,fd)) break; uppercase(t); if(strstr( t, "[MOLDEN FORMAT]" )) { ok = TRUE; break; } } if(ok) sprintf(tCap,"%s",t); else sprintf(tCap,"ERROR"); } else{ if(!feof(fd)) { char* e = fgets(t,taille,fd);} sprintf(tCap,"%s",t); } uppercase(tCap); if(!strstr(tCap,titleCap)) { Message(message,_("Error"),TRUE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); return FALSE; } free_data_all(); tmp = get_name_file(FileName); set_status_label_info(_("File name"),tmp); g_free(tmp); if(type == 0) set_status_label_info(_("File type"),"Molden"); else set_status_label_info(_("File type"),"Gabedit"); set_status_label_info(_("Geometry"),_("Reading")); j = 0; while(!feof(fd)) { { char* e = fgets(t,taille,fd);} uppercase(t); if( !strstr( t, "[ATOMS" ) ) continue; if( strstr( t, "ANGS" )) Angs = TRUE; else Angs = FALSE; j = 0; if(GeomOrb) g_free(GeomOrb); GeomOrb = NULL; while( !feof(fd) ) { gint n = 0; { char* e = fgets(t,taille,fd);} n = sscanf(t,"%s %d %d %s %s %s", AtomCoord[0],&idummy,&iz, AtomCoord[1],AtomCoord[2],AtomCoord[3]); if(n<6) break; if(GeomOrb==NULL) GeomOrb=g_malloc(sizeof(TypeGeomOrb)); else GeomOrb=g_realloc(GeomOrb,(j+1)*sizeof(TypeGeomOrb)); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomOrb[j].Symb=g_strdup(AtomCoord[0]); if(!test_atom_define(GeomOrb[j].Symb)) { GeomOrb[j].Symb = get_symbol_using_z(iz); } for(i=0;i<3;i++) GeomOrb[j].C[i]=atof((AtomCoord[i+1])); GeomOrb[j].Prop = prop_atom_get(GeomOrb[j].Symb); GeomOrb[j].partialCharge = 0.0; GeomOrb[j].variable = TRUE; GeomOrb[j].nuclearCharge = get_atomic_number_from_symbol(GeomOrb[j].Symb); j++; } break; } Ncenters = j; fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(Angs) for(j=0;j0 && (gint)numgeom-1 == num) break; }while(!feof(fd)); Ncenters = j+1; fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(Ncenters == 0 ) g_free(GeomOrb); else { DefineType(); /* PrintGeomOrb();*/ } RebuildGeom = TRUE; buildBondsOrb(); reset_grid_limits(); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); return TRUE; } /********************************************************************************/ void gl_get_charges_from_gaussian_output_file(FILE* fd,gint N) { guint taille=BSIZE; gchar t[BSIZE]; gchar dump[BSIZE]; gchar d[BSIZE]; gchar* pdest; gint i; gint ngrad=0; while(!feof(fd) ) { pdest = NULL; { char* e = fgets(t,taille,fd);} pdest = strstr( t, "Total atomic charges"); if(!pdest) /* Gaussian 03 */ pdest = strstr( t, "atomic charges"); if(!pdest) /* Gaussian 09D */ pdest = strstr( t, "Mulliken charges and spin densities:"); if(!pdest) /* Gaussian 09D */ pdest = strstr( t, "Mulliken charges:"); if(pdest) { if(!feof(fd)) { char* e = fgets(t,taille,fd);} else break; for(i=0;i2) break; } } } /********************************************************************************/ void gl_get_natural_charges_from_gaussian_output_file(FILE* fd,gint N) { guint taille=BSIZE; gchar t[BSIZE]; gchar dump[BSIZE]; gchar d[BSIZE]; gchar* pdest; gint i; gint ngrad =0; while(!feof(fd) ) { pdest = NULL; { char* e = fgets(t,taille,fd);} pdest = strstr( t, "Summary of Natural Population Analysis:"); if(!pdest) /* Gaussian 03 */ pdest = strstr( t, "Summary of Natural Population Analysis:"); if(pdest) { if(!feof(fd)) { char* e = fgets(t,taille,fd);} else break; if(!feof(fd)) { char* e = fgets(t,taille,fd);} else break; if(!strstr(t,"Natural Population"))break; if(!feof(fd)) { char* e = fgets(t,taille,fd);} else break; if(!strstr(t,"Natural"))break; if(!feof(fd)) { char* e = fgets(t,taille,fd);} else break; if(!strstr(t,"Charge"))break; if(!feof(fd)) { char* e = fgets(t,taille,fd);} else break; if(!strstr(t,"-------------"))break; for(i=0;i2) break; } } } /********************************************************************************/ void gl_get_esp_charges_from_gaussian_output_file(FILE* fd,gint N) { guint taille=BSIZE; gchar t[BSIZE]; gchar dump[BSIZE]; gchar d[BSIZE]; gchar* pdest; gint i; gint ngrad=0; while(!feof(fd) ) { pdest = NULL; { char* e = fgets(t,taille,fd);} pdest = strstr( t, "Charges from ESP fit"); if(!pdest) /* Gaussian 03 */ pdest = strstr( t, "harges from ESP"); if(pdest) { if(!feof(fd)) { char* e = fgets(t,taille,fd);} else break; if(!feof(fd)) { char* e = fgets(t,taille,fd);} else break; for(i=0;i2) break; } } } /********************************************************************************/ void gl_get_charges_from_gamess_output_file(FILE* fd,gint N) { guint taille=BSIZE; gchar t[BSIZE]; gchar dump[BSIZE]; gchar d[BSIZE]; gchar* pdest; gint i; while(!feof(fd) ) { pdest = NULL; if(!fgets(t,taille,fd)) break; pdest = strstr( t, "TOTAL MULLIKEN AND LOWDIN ATOMIC POPULATIONS"); if(pdest) { if(!fgets(t,taille,fd)) break; for(i=0;i0 && (gint)numgeom-1 == num) break; if(num<0) geompos = ftell(fd); }while(!feof(fd)); Ncenters = j+1; printf("Ncenters=%d\n",Ncenters); if ( Ncenters >0) { long int gp = 0; if(num<0) fseek(fd, geompos, SEEK_SET); fseek(fd, geompos, SEEK_SET); gp = ftell(fd); get_dipole_from_gamess_output_file(fd); fseek(fd, gp, SEEK_SET); gl_get_charges_from_gamess_output_file(fd,Ncenters); /* PrintGeomOrb();*/ } fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(Ncenters == 0 ) g_free(GeomOrb); else { DefineType(); /* PrintGeomOrb();*/ } RebuildGeom = TRUE; buildBondsOrb(); reset_grid_limits(); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); return TRUE; } /********************************************************************************/ void gl_get_charges_from_mpqc_output_file(FILE* fd,gint N) { guint taille=BSIZE; gchar t[BSIZE]; gchar dump[BSIZE]; gchar d[BSIZE]; gint i; gboolean OK = FALSE; fseek(fd, 0L, SEEK_SET); OK = FALSE; while(!feof(fd) ) { if(!fgets(t,taille,fd))break; if(strstr(t, "Natural Population Analysis")) { OK = TRUE; break; } } if(!OK) return; OK = FALSE; while(!feof(fd) ) { if(!fgets(t,taille,fd))break; if(strstr(t, "atom") && strstr(t, "charge")) { OK = TRUE; break; } } if(!OK) return; for(i=0;i")) { gboolean OkUnit = FALSE; do{ if(!fgets(t,taille,fd))break; if(strstr(t,"unit")) { OkUnit = TRUE; if(strstr(t,"angstrom"))unitOfOutAng=TRUE; break; }; }while(!feof(fd)); if(!OkUnit) break; numGeom++; if((gint)numGeom == numGeometry ) { OK = TRUE; break; } if(numGeometry<0 ) { OK = TRUE; break; } } } if(!OK && (numGeom == 0) ) { g_free(t); t = g_strdup_printf(_("Sorry\nI can read Geometry from %s file "),fileName); Message(t,_("Error"),TRUE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); return FALSE; } if(!OK) break; OK = FALSE; while(!feof(fd) ) { if(!fgets(t,taille,fd))break; if ( !(strstr(t,"atoms") && strstr(t,"geometry"))) continue; OK = TRUE; break; } if(!OK) { g_free(t); t = g_strdup_printf(_("Sorry\nI can read Geometry from %s file "),fileName); Message(t,_("Error"),TRUE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); return FALSE; } j=-1; while(!feof(fd) ) { if(!fgets(t,taille,fd))break; if(strstr(t,"}"))break; j++; if(GeomOrb==NULL) GeomOrb=g_malloc(sizeof(TypeGeomOrb)); else GeomOrb=g_realloc(GeomOrb,(j+1)*sizeof(TypeGeomOrb)); for(i=0;i0 && (gint)numgeom-1 == num) break; }while(!feof(file)); Ncenters = j+1; fclose(file); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(Ncenters == 0 ) g_free(GeomOrb); else { DefineType(); /* PrintGeomOrb();*/ } RebuildGeom = TRUE; buildBondsOrb(); reset_grid_limits(); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); return TRUE; } /********************************************************************************/ gboolean gl_read_molpro_file_geomi(gchar *FileName,gint num) { gchar *t; gchar *tmp = NULL; gboolean OK; gchar *AtomCoord[5]; gchar AtomCharge[100]; FILE *fd; guint taille=BSIZE; guint idummy; guint i; gint j=0; gint l; guint numgeom; gchar dum[100]; gint kk; for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); if ((!FileName) || (strcmp(FileName,"") == 0)) { Message(_("Sorry\n No file selected"),_("Error"),TRUE); for(i=0;i<5;i++) g_free(AtomCoord[i]); return FALSE ; } t=g_malloc(taille); fd = FOpen(FileName, "rb"); if(fd ==NULL) { Message(_("Sorry\nI can not open this file"),_("Error"),TRUE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); return FALSE; } free_data_all(); tmp = get_name_file(FileName); set_status_label_info(_("File name"),tmp); g_free(tmp); set_status_label_info(_("File type"),"Molpro"); numgeom =1; do { set_status_label_info(_("Geometry"),_("Reading")); OK=FALSE; while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if ( !strcmp(t," ATOMIC COORDINATES\n")) { { char* e = fgets(t,taille,fd);} { char* e = fgets(t,taille,fd);} { char* e = fgets(t,taille,fd);} numgeom++; OK = TRUE; break; } } if(!OK && (numgeom == 1) ) { Message(_("Sorry\nI can not read geometry in this file"),_("Error"),TRUE); fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); set_status_label_info(_("Geometry"),_("Nothing")); return FALSE; } if(!OK)break; j=-1; while(!feof(fd) ) { { char* e = fgets(t,taille,fd);} if ( !strcmp(t,"\n")) { long int geompos = 0; geompos = ftell(fd); get_dipole_from_molpro_output_file(fd); fseek(fd, geompos, SEEK_SET); break; } j++; if(GeomOrb==NULL) GeomOrb=g_malloc(sizeof(TypeGeomOrb)); else GeomOrb=g_realloc(GeomOrb,(j+1)*sizeof(TypeGeomOrb)); /* kk = sscanf(t,"%d %s %s %s %s %s %s",&idummy, AtomCoord[0],AtomCoord[1],AtomCoord[1], AtomCoord[2],AtomCoord[3], dum); if(kk==7) sscanf(t,"%d %s %s %s %s %s %s",&idummy, AtomCoord[0],AtomCoord[1],dum, AtomCoord[1], AtomCoord[2],AtomCoord[3]); */ kk = sscanf(t,"%d %s %s %s %s %s %s",&idummy, AtomCoord[0],AtomCharge,AtomCoord[1], AtomCoord[2],AtomCoord[3], dum); if(kk==7) sscanf(t,"%d %s %s %s %s %s %s",&idummy, AtomCoord[0],AtomCharge,dum, AtomCoord[1], AtomCoord[2],AtomCoord[3]); for(i=0;i<(gint)strlen(AtomCoord[0]);i++) if(isdigit(AtomCoord[0][i])) AtomCoord[0][i] = ' '; delete_all_spaces(AtomCoord[0]); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); if (atoi(AtomCharge) == 0) sprintf(AtomCoord[0],"X"); GeomOrb[j].Symb=g_strdup(AtomCoord[0]); for(i=0;i<3;i++) GeomOrb[j].C[i]=atof((AtomCoord[i+1])); GeomOrb[j].Prop = prop_atom_get(GeomOrb[j].Symb); GeomOrb[j].partialCharge = 0.0; GeomOrb[j].variable = TRUE; GeomOrb[j].nuclearCharge = get_atomic_number_from_symbol(GeomOrb[j].Symb); } if(num >0 && (gint)numgeom-1 == num) break; }while(!feof(fd)); Ncenters = j+1; fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(Ncenters == 0 ) g_free(GeomOrb); else { DefineType(); /* PrintGeomOrb();*/ } RebuildGeom = TRUE; buildBondsOrb(); reset_grid_limits(); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); return TRUE; } /********************************************************************************/ gboolean gl_read_gaussn_file_geomi_str(gchar *FileName,gint num,gchar* str) { gchar *t; gchar *tmp = NULL; gboolean OK; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; guint idummy; guint i; gint j=0; gint l; guint numgeom; gchar *pdest; gint result; guint itype=0; long int geompos = 0; for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); fd = FOpen(FileName, "rb"); free_data_all(); tmp = get_name_file(FileName); set_status_label_info(_("File name"),tmp); g_free(tmp); set_status_label_info(_("File type"),"Gaussian"); t=g_malloc(taille); numgeom =1; do { set_status_label_info(_("Geometry"),_("Reading")); OK=FALSE; while(!feof(fd)) { { char* e = fgets(t,taille,fd);} pdest = strstr( t,str); result = pdest - t ; if ( result >0 ) { { char* e = fgets(t,taille,fd);} { char* e = fgets(t,taille,fd);} { char* e = fgets(t,taille,fd);} pdest = strstr( t, "Type" ); result = pdest - t ; if(result>0) itype=1; else itype=0; { char* e = fgets(t,taille,fd);} numgeom++; OK = TRUE; break; } } if(!OK && (numgeom == 1) ) { fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); set_status_label_info(_("Geometry"),_("Nothing")); return FALSE; } if(!OK)break; j=-1; while(!feof(fd) ) { { char* e = fgets(t,taille,fd);} pdest = strstr( t, "----------------------------------" ); result = pdest - t ; if ( result >0 ) { geompos = ftell(fd); get_dipole_from_gaussian_output_file(fd); fseek(fd, geompos, SEEK_SET); gl_get_charges_from_gaussian_output_file(fd,j+1); gl_get_natural_charges_from_gaussian_output_file(fd,j+1); fseek(fd, geompos, SEEK_SET); gl_get_esp_charges_from_gaussian_output_file(fd,j+1); fseek(fd, geompos, SEEK_SET); break; } j++; if(GeomOrb==NULL) GeomOrb=g_malloc(sizeof(TypeGeomOrb)); else GeomOrb=g_realloc(GeomOrb,(j+1)*sizeof(TypeGeomOrb)); if(itype==0) sscanf(t,"%d %s %s %s %s",&idummy,AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3]); else sscanf(t,"%d %s %d %s %s %s",&idummy,AtomCoord[0],&idummy,AtomCoord[1],AtomCoord[2],AtomCoord[3]); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomOrb[j].Symb=g_strdup(symb_atom_get((guint)atoi(AtomCoord[0]))); for(i=0;i<3;i++) GeomOrb[j].C[i]=atof(ang_to_bohr(AtomCoord[i+1])); GeomOrb[j].Prop = prop_atom_get(GeomOrb[j].Symb); GeomOrb[j].partialCharge = 0.0; GeomOrb[j].variable = TRUE; GeomOrb[j].nuclearCharge = get_atomic_number_from_symbol(GeomOrb[j].Symb); /* Debug("%s %lf %lf %lf \n",GeomOrb[j].Symb,GeomOrb[j].C[0],GeomOrb[j].C[1],GeomOrb[j].C[2]);*/ } if(num >0 && (gint)numgeom-1 == num) break; }while(!feof(fd)); Ncenters = j+1; fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(Ncenters == 0 ) g_free(GeomOrb); else { DefineType(); /* PrintGeomOrb();*/ } buildBondsOrb(); reset_grid_limits(); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); return TRUE; } /********************************************************************************/ gboolean gl_read_gaussn_file_geomi(gchar *FileName,gint num) { FILE* fd; if ((!FileName) || (strcmp(FileName,"") == 0)) { Message(_("Sorry\n No file selected"),_("Error"),TRUE); return FALSE; } fd = FOpen(FileName, "rb"); if(fd ==NULL) { Message(_("Sorry\nI can not open this file"),_("Error"),TRUE); return FALSE; } fclose(fd); if(gl_read_gaussn_file_geomi_str(FileName,num,"Standard orientation:")) return TRUE; if(gl_read_gaussn_file_geomi_str(FileName,num,"Input orientation:")) return TRUE; /* for calculation with nosym option */ if(!gl_read_gaussn_file_geomi_str(FileName,num,"Z-Matrix orientation:")) { Message(_("Sorry\nI can not read geometry in this file"),_("Error"),TRUE); return FALSE; } return TRUE; } /********************************************************************************/ gboolean gl_read_fchk_gaussn_file_geom(gchar *fileName) { FILE *file; gint i,j; gint n; gchar* tmp = NULL; gdouble* coords = NULL; gdouble* charges = NULL; gdouble* dipole = NULL; gint* z = NULL; gdouble* zn = NULL; file = FOpen(fileName, "rb"); if(file ==NULL) { Message(_("Sorry\nI can not open this file"),_("Error"),TRUE); return FALSE; } j = get_one_int_from_fchk_gaussian_file(file,"Number of atoms "); if(j<1) { Message(_("Sorry\nI can not the number of atoms from this file"),_("Error"),TRUE); return FALSE; } z = get_array_int_from_fchk_gaussian_file(file, "Atomic numbers ", &n); if(n!=j) { Message(_("Sorry\nI can not read the atomic numbers from this file"),_("Error"),TRUE); return FALSE; } coords = get_array_real_from_fchk_gaussian_file(file, "Current cartesian coordinates ", &n); if(n!=3*j) { Message(_("Sorry\nI can not read the current cartesian coordinates from this file"),_("Error"),TRUE); return FALSE; } free_data_all(); tmp = get_name_file(fileName); set_status_label_info(_("File name"),tmp); g_free(tmp); set_status_label_info(_("File type"),"Gaussian fchk"); set_status_label_info(_("Geometry"),_("Reading")); rewind(file); Ncenters = j; GeomOrb=g_malloc(Ncenters*sizeof(TypeGeomOrb)); for(j=0;j0) DefineType(); RebuildGeom = TRUE; buildBondsOrb(); reset_grid_limits(); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); return TRUE; } /********************************************************************************/ gboolean gl_read_mopac_aux_file_geomi(gchar *fileName, gint numgeometry) { gchar *t; gchar *tmp; gboolean OK; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; guint i; gint j=0; gint l; gint numgeom; gchar *pdest; long int geomposok = 0; gchar** elements = NULL; gint nElements = 0; gchar** nuclearCharges = NULL; gint nNuclearCharges = 0; gchar** partialCharges = NULL; gint nPartialCharges = 0; for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(gchar)); t=g_malloc(taille*sizeof(gchar)); fd = FOpen(fileName, "rb"); if(fd ==NULL) { g_free(t); t = g_strdup_printf(_("Sorry\nI can not open %s file "),fileName); Message(t,_("Error"),TRUE); g_free(t); return FALSE; } OK=FALSE; elements = get_one_block_from_aux_mopac_file(fd, "ATOM_EL[", &nElements); if(elements) OK = TRUE; if(!OK) { g_free(t); t = g_strdup_printf(_("Sorry\nI can not read the atom symbols in %s file "),fileName); Message(t,_("Error"),TRUE); g_free(t); fclose(fd); return FALSE; } geomposok = ftell(fd); nuclearCharges = get_one_block_from_aux_mopac_file(fd, "ATOM_CORE[", &nNuclearCharges); if(!nuclearCharges) fseek(fd, geomposok, SEEK_SET); numgeom =0; free_data_all(); tmp = get_name_file(fileName); set_status_label_info(_("File name"),tmp); g_free(tmp); set_status_label_info(_("File type"),"Mopac"); set_status_label_info(_("Geometry"),_("Reading")); while(!feof(fd)) { if(!fgets(t,taille,fd))break; if(numgeometry<0) pdest = strstr( t, "ATOM_X_OPT:ANGSTROMS"); else pdest = strstr( t, "ATOM_X_UPDATED:ANGSTROMS"); if ( pdest ) { numgeom++; geomposok = ftell(fd); if(numgeom == numgeometry ) { OK = TRUE; break; } if(numgeometry<0) { OK = TRUE; } } } if(numgeom == 0) { free_one_string_table(elements, nElements); g_free(t); t = g_strdup_printf(_("Sorry\nI can not read geometry in %s file "),fileName); Message(t,_("Error"),TRUE); g_free(t); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); set_status_label_info(_("Geometry"),_("Nothing")); fclose(fd); return FALSE; } init_dipole(); for(i=0;i<3;i++) Dipole.value[i] = 0; j=-1; fseek(fd, geomposok, SEEK_SET); while(!feof(fd) ) { if(!fgets(t,taille,fd))break; if(strstr( t, "[") || strstr(t,"HEAT_OF_FORM_UPDATED") || strstr( t, "####################################") ||this_is_a_backspace(t)) { break; } if(j+1>nElements)break; j++; if(GeomOrb==NULL) GeomOrb=g_malloc(sizeof(TypeGeomOrb)); else GeomOrb=g_realloc(GeomOrb,(j+1)*sizeof(TypeGeomOrb)); sscanf(t,"%s %s %s",AtomCoord[1],AtomCoord[2],AtomCoord[3]); if(jj) GeomOrb[j].nuclearCharge = atof(nuclearCharges[j]); else GeomOrb[j].nuclearCharge = get_atomic_number_from_symbol(GeomOrb[j].Symb); } Ncenters = j+1; if(Ncenters >0) DefineType(); if(numgeometry<0) { fseek(fd, geomposok, SEEK_SET); partialCharges = get_one_block_from_aux_mopac_file(fd, "ATOM_CHARGES[", &nPartialCharges); if(partialCharges) { for(j=0;j2) break; } } } /********************************************************************************/ gboolean gl_read_qchem_file_geomi(gchar *FileName,gint num) { gchar *t; gchar *tmp = NULL; gboolean OK; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; guint idummy; guint i; gint j=0; gint l; guint numgeom; gchar *pdest; long geompos = 0; for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); fd = FOpen(FileName, "rb"); free_data_all(); tmp = get_name_file(FileName); set_status_label_info(_("File name"),tmp); g_free(tmp); set_status_label_info(_("File type"),"Q-Chem"); t=g_malloc(taille); numgeom =1; do { set_status_label_info(_("Geometry"),_("Reading")); OK=FALSE; while(!feof(fd)) { if(!fgets(t,taille,fd))break; pdest = NULL; if (strstr( t,"Atom") && strstr( t,"X") && strstr( t,"Y") && strstr( t,"Z") ) { if(!fgets(t,taille,fd))break; pdest = strstr( t,"----------------------------------"); } if (pdest) { numgeom++; OK = TRUE; break; } } if(!OK && (numgeom == 1) ) { fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); set_status_label_info(_("Geometry"),_("Nothing")); return FALSE; } if(!OK)break; j=-1; while(!feof(fd) ) { { char* e = fgets(t,taille,fd);} pdest = strstr( t, "----------------------------------" ); if (pdest) { geompos = ftell(fd); get_dipole_from_qchem_output_file(fd); fseek(fd, geompos, SEEK_SET); gl_get_charges_from_qchem_output_file(fd,j+1); fseek(fd, geompos, SEEK_SET); break; } j++; if(GeomOrb==NULL) GeomOrb=g_malloc(sizeof(TypeGeomOrb)); else GeomOrb=g_realloc(GeomOrb,(j+1)*sizeof(TypeGeomOrb)); sscanf(t,"%d %s %s %s %s",&idummy,AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3]); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) { AtomCoord[0][1]=tolower(AtomCoord[0][1]); if(isdigit(AtomCoord[0][1]))l=1; } if(l==1)sprintf(t,"%c",AtomCoord[0][0]); else sprintf(t,"%c%c",AtomCoord[0][0],AtomCoord[0][1]); GeomOrb[j].Symb=g_strdup(t); for(i=0;i<3;i++) GeomOrb[j].C[i]=atof(ang_to_bohr(AtomCoord[i+1])); GeomOrb[j].Prop = prop_atom_get(GeomOrb[j].Symb); GeomOrb[j].partialCharge = 0.0; GeomOrb[j].variable = TRUE; GeomOrb[j].nuclearCharge = get_atomic_number_from_symbol(GeomOrb[j].Symb); } if(num >0 && (gint)numgeom-1 == num) break; }while(!feof(fd)); Ncenters = j+1; fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(Ncenters == 0 ) g_free(GeomOrb); else { DefineType(); } buildBondsOrb(); reset_grid_limits(); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); return TRUE; } /********************************************************************************/ void gl_get_charges_from_nwchem_output_file(FILE* fd,gint N) { guint taille=BSIZE; gchar t[BSIZE]; gchar d3[BSIZE]; gchar d4[BSIZE]; gchar d[BSIZE]; gchar* pdest; gint i; for(i=0;i0 && (gint)numgeom-1 == num) break; }while(!feof(fd)); Ncenters = j+1; fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(Ncenters == 0 ) g_free(GeomOrb); else { DefineType(); } buildBondsOrb(); reset_grid_limits(); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); return lineg; } /********************************************************************************/ void gl_get_charges_from_psicode_output_file(FILE* fd,gint N) { guint taille=BSIZE; gchar t[BSIZE]; gchar d3[BSIZE]; gchar d4[BSIZE]; gchar d[BSIZE]; gchar* pdest; gint i; for(i=0;i0 && (gint)numgeom-1 == num) break; }while(!feof(fd)); Ncenters = j+1; fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(Ncenters == 0 ) g_free(GeomOrb); else { DefineType(); } buildBondsOrb(); reset_grid_limits(); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); return lineg; } /********************************************************************************/ static gboolean goToLine(FILE* file,char* nextString) { static char t[BSIZE]; while(!feof(file)) { if(!fgets(t,BSIZE,file))break; if (strstr(t,nextString)) return TRUE; } return FALSE; } /********************************************************************************/ static gboolean gl_read_geom_nbo_file(gchar *fileName) { gchar *tmp = NULL; FILE *file; gint i; gint k; gint j=0; gint uni=1; gint z = 0; static gchar t[BSIZE]; gint nAtoms, nShell, nExp; if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No file selected"),_("Error"),TRUE); return FALSE; } file = FOpen(fileName, "rb"); if(file == NULL) { Message(_("Sorry\nI cannot open this file"),_("Error"),TRUE); return FALSE; } if(!goToLine(file,"--------")) return FALSE; if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%d %d %d",&nAtoms,&nShell,&nExp); if(!goToLine(file,"--------")) return FALSE; free_data_all(); init_dipole(); GeomOrb=g_malloc(nAtoms*sizeof(TypeGeomOrb)); uni = 1; tmp = get_name_file(fileName); set_status_label_info(_("File name"),tmp); g_free(tmp); set_status_label_info(_("File type"),"NBO"); set_status_label_info(_("Geometry"),_("Reading")); gint ix = 0; j = 0; for(k=0;k0) { gl_get_charges_from_aimall_file(fd,Ncenters); /* PrintGeomOrb();*/ } fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(Ncenters == 0 ) g_free(GeomOrb); else { DefineType(); /* PrintGeomOrb();*/ } RebuildGeom = TRUE; buildBondsOrb(); reset_grid_limits(); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); return TRUE; } /********************************************************************************/ void gl_read_aimall_file_sel(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_aimall_file(FileName); } /********************************************************/ void gl_read_first_dalton_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_dalton_file_geomi(FileName,1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_last_dalton_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_dalton_file_geomi(FileName,-1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_first_gamess_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_gamess_file_geomi(FileName,1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_last_gamess_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_gamess_file_geomi(FileName,-1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_first_gauss_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_gaussn_file_geomi(FileName,1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_last_gauss_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_gaussn_file_geomi(FileName,-1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ gboolean gl_read_fchk_gauss_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); if(gl_read_fchk_gaussn_file_geom(FileName)) { RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); return TRUE; } glarea_rafresh(GLArea); return FALSE; } /********************************************************/ void gl_read_first_molcas_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_molcas_file_geomi(FileName,1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_last_molcas_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_molcas_file_geomi(FileName,-1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_first_molpro_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_molpro_file_geomi(FileName,1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_last_molpro_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_molpro_file_geomi(FileName,-1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_first_mpqc_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_mpqc_file_geomi(fileName,1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_last_mpqc_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_mpqc_file_geomi(fileName,-1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_first_mopac_output_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_mopac_output_file_geomi(FileName,1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_last_mopac_output_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_mopac_output_file_geomi(FileName,-1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_first_mopac_aux_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_mopac_aux_file_geomi(FileName,1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_last_mopac_aux_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_mopac_aux_file_geomi(FileName,-1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_first_orca_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_orca_file_geomi(FileName,1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_last_orca_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_orca_file_geomi(FileName,-1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_hessian_orca_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_orca_file_hessian(FileName); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_first_qchem_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_qchem_file_geomi(FileName,1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_last_qchem_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_qchem_file_geomi(FileName,-1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_first_nwchem_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_nwchem_file_geomi(FileName,1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_nbo_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_geom_nbo_file(FileName); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_last_nwchem_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_nwchem_file_geomi(FileName,-1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_last_psicode_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_psicode_file_geomi(FileName,-1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /********************************************************/ void gl_read_first_psicode_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_psicode_file_geomi(FileName,1); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); } /*******************************************************/ void gl_read_molden_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_molden_file_geom(FileName); } /*******************************************************/ void gl_read_gabedit_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_gabedit_file_geom(FileName); } /*******************************************************/ gboolean gl_read_geom_any_file(gchar* fileName) { GabEditTypeFile fileType = get_type_file(fileName); gboolean Ok = FALSE; if(fileType == GABEDIT_TYPEFILE_XYZ) Ok = gl_read_xyz_file(fileName); else if(fileType == GABEDIT_TYPEFILE_PDB) Ok = gl_read_pdb_file(fileName); else if(fileType == GABEDIT_TYPEFILE_HIN) Ok = gl_read_hin_file(fileName); else if(fileType == GABEDIT_TYPEFILE_AIMALL) Ok = gl_read_aimall_file(fileName); else if(fileType == GABEDIT_TYPEFILE_DALTON) Ok = gl_read_dalton_file_geomi(fileName,-1); else if(fileType == GABEDIT_TYPEFILE_GAMESS) Ok = gl_read_gamess_file_geomi(fileName,-1); else if(fileType == GABEDIT_TYPEFILE_FIREFLY) Ok = gl_read_gamess_file_geomi(fileName,-1); else if(fileType == GABEDIT_TYPEFILE_GAUSSIAN) Ok = gl_read_gaussn_file_geomi(fileName,-1); else if(fileType == GABEDIT_TYPEFILE_MOLCAS) Ok = gl_read_molcas_file_geomi(fileName,-1); else if(fileType == GABEDIT_TYPEFILE_MOLPRO) Ok = gl_read_molpro_file_geomi(fileName,-1); else if(fileType == GABEDIT_TYPEFILE_MOPAC) Ok = gl_read_mopac_output_file_geomi(fileName,-1); else if(fileType == GABEDIT_TYPEFILE_MOPAC_AUX) Ok = gl_read_mopac_aux_file_geomi(fileName,-1); else if(fileType == GABEDIT_TYPEFILE_MPQC) Ok = gl_read_mpqc_file_geomi(fileName,-1); else if(fileType == GABEDIT_TYPEFILE_ORCA) Ok = gl_read_orca_file_geomi(fileName,-1); else if(fileType == GABEDIT_TYPEFILE_QCHEM) Ok = gl_read_qchem_file_geomi(fileName,-1); else if(fileType == GABEDIT_TYPEFILE_NWCHEM) Ok = (0!=gl_read_nwchem_file_geomi(fileName,-1)); else if(fileType == GABEDIT_TYPEFILE_GABEDIT) Ok = gl_read_gabedit_file_geom(fileName); else if(fileType == GABEDIT_TYPEFILE_MOLDEN) Ok = gl_read_molden_file_geom(fileName); else if(fileType == GABEDIT_TYPEFILE_GAUSSIAN_FCHK) Ok = gl_read_fchk_gaussn_file_geom(fileName); else if( fileType == GABEDIT_TYPEFILE_ORCAINPUT|| fileType == GABEDIT_TYPEFILE_FIREFLYINPUT|| fileType == GABEDIT_TYPEFILE_GAMESSINPUT|| fileType == GABEDIT_TYPEFILE_QCHEMINPUT|| fileType == GABEDIT_TYPEFILE_NWCHEMINPUT|| fileType == GABEDIT_TYPEFILE_MOPACINPUT|| fileType == GABEDIT_TYPEFILE_MPQCINPUT|| fileType == GABEDIT_TYPEFILE_GAUSSIANINPUT|| fileType == GABEDIT_TYPEFILE_MOLCASINPUT|| fileType == GABEDIT_TYPEFILE_MOLPROINPUT ) { Message( _( "Sorry, I cannot read this file here\n" "You can read it from the 'Draw Geometry' window, save it in hin and read it from this window 'Display window'\n" ) ,_("Error"),TRUE); return FALSE; } else if(fileType == GABEDIT_TYPEFILE_UNKNOWN) { Message( _( "Sorry, I cannot find the type of your file\n" " Try to read it using openbabel\n" ) ,_("Error"),TRUE); return FALSE; } RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); return Ok; } /*************************************************************************/ void gl_read_geom_any_file_sel(GabeditFileChooser *selecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(selecFile); gtk_widget_hide(GTK_WIDGET(selecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); gl_read_geom_any_file(fileName); } GabeditSrc250/src/Display/PreferencesOrb.c0000644000175100017510000005126713130665225020752 0ustar alloucheallouche/* PreferencesOrb.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Display/GlobalOrb.h" #include "../Display/GLArea.h" #include "../Display/Orbitals.h" #include "../Display/UtilsOrb.h" #include "../Utils/Vector3d.h" #include "../Display/TriangleDraw.h" #include "../Utils/UtilsInterface.h" #include "../Common/Windows.h" #include "../Display/MenuToolBarGL.h" #include "../Utils/QL.h" /********************************************************************************/ void destroy_selectors_window(GtkWidget* Win,gpointer data) { GtkWidget**selectors =(GtkWidget**) g_object_get_data(G_OBJECT (Win), "Selectors"); delete_child(Win); g_free(selectors); } /********************************************************************************/ void apply_colorselections(GtkWidget* Win,gpointer data) { gdouble Col[4]; GdkColor color; GtkColorButton**selectors =(GtkColorButton**) g_object_get_data(G_OBJECT (Win), "Selectors"); /* positive value */ gtk_color_button_get_color (selectors[0], &color); Col[0] = color.red/65535.0; Col[1] = color.green/65535.0; Col[2] = color.blue/65535.0; set_color_surface(0,Col); /* negative value */ gtk_color_button_get_color (selectors[1], &color); Col[0] = color.red/65535.0; Col[1] = color.green/65535.0; Col[2] = color.blue/65535.0; set_color_surface(1,Col); /* density surface */ gtk_color_button_get_color (selectors[2], &color); Col[0] = color.red/65535.0; Col[1] = color.green/65535.0; Col[2] = color.blue/65535.0; set_color_surface(2,Col); RebuildSurf = TRUE; rafresh_window_orb(); destroy_selectors_window(Win,data); } /********************************************************************************/ GtkWidget *create_colorsel_frame(GtkWidget *vboxall,gchar* title,GtkWidget** selectors) { GtkWidget *frame; GtkWidget *Frame; GtkWidget *vboxframe; GtkWidget *selector; GtkWidget *Table; gint num = -1; gdouble v[3]; GdkColor color; Frame = gtk_frame_new (title); gtk_container_set_border_width (GTK_CONTAINER (Frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), Frame); gtk_widget_show (Frame); vboxframe = create_vbox(Frame); Table = gtk_table_new(2,2,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); for(num=0;num<3;num++) { get_color_surface(num,v); frame = NULL; switch(num) { case 0 : frame = gtk_frame_new (_("Positive value"));break; case 1 : frame = gtk_frame_new (_("Negative value"));break; case 2 : frame = gtk_frame_new (_("Density"));break; default : break; } add_widget_table(Table,frame,(gushort)0,(gushort)num); vboxframe = create_vbox(frame); color.red = (gushort)(v[0]*65535); color.green = (gushort)(v[1]*65535); color.blue = (gushort)(v[2]*65535); selector = gtk_color_button_new_with_color (&color); gtk_widget_show(selector); gtk_widget_show(frame); gtk_container_add(GTK_CONTAINER(vboxframe),selector); selectors[num] = selector; } gtk_widget_show(Table); gtk_widget_show(Frame); return Frame; } /********************************************************************************/ void set_colors_surfaces(gchar* title) { GtkWidget *Win; /* GtkWidget *frame;*/ GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *button; GtkWidget **selectors = g_malloc(3*sizeof(GtkWidget*)); /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),title); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Set Colors "); vboxall = create_vbox(Win); vboxwin = vboxall; /* frame = create_colorsel_frame(vboxall,NULL,selectors);*/ create_colorsel_frame(vboxall,NULL,selectors); g_object_set_data(G_OBJECT (Win), "Selectors",selectors); /* buttons box */ hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)destroy_selectors_window,GTK_OBJECT(Win)); gtk_widget_show_all (button); button = create_button(Win,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show_all (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_colorselections,GTK_OBJECT(Win)); /* Show all */ gtk_widget_show (Win); } /********************************************************************************/ void destroy_setlight_window(GtkWidget* Win,gpointer data) { GtkWidget**entrys =(GtkWidget**) g_object_get_data(G_OBJECT (Win), "Entrys"); delete_child(Win); g_free(entrys); } /********************************************************************************/ void apply_ligth_positions(GtkWidget *Win,gpointer data) { GtkWidget** Entrys =(GtkWidget**)g_object_get_data(G_OBJECT (Win), "Entrys"); G_CONST_RETURN gchar* temp; gint i; gint j; gdouble v[3]; for(i=0;i<3;i++) { for(j=0;j<3;j++) { temp = gtk_entry_get_text(GTK_ENTRY(Entrys[j*3+i])); v[j] = atof(temp); } set_light_position(i,v); } destroy_setlight_window(Win,data); glarea_rafresh(GLArea); } /********************************************************************************/ GtkWidget *create_light_positions_frame( GtkWidget *vboxall,gchar* title) { GtkWidget *frame; GtkWidget *vboxframe; GtkWidget **Entrys = g_malloc(9*sizeof(GtkWidget*)); gushort i; gushort j; GtkWidget *Table; gchar** temp[3]; #define NLIGNES 3 #define NCOLUMNS 3 gchar *strcolumns[NCOLUMNS] = {" X "," Y "," Z "}; gchar *strlignes[NLIGNES] = {" Light 1 : "," Light 2 : "," Light 3 : "}; for(i=0;i<3;i++) temp[i] = get_light_position(i); frame = gtk_frame_new (title); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(4,4,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); for(j=1;jGeomOrb[i].C[j]) min = GeomOrb[i].C[j]; if(maxactive; set_camera_values(zn, zf, zo, perspective); rafresh_perspective_button(); } /********************************************************************************/ static void set_sensitive_camera(GtkWidget* buttonPerspective, gpointer data) { if(GTK_IS_WIDGET(buttonPerspective)) { gboolean perspective = GTK_TOGGLE_BUTTON (buttonPerspective)->active; GtkWidget* EntryZNear = (GtkWidget*)g_object_get_data(G_OBJECT (buttonPerspective), "EntryZNear"); GtkWidget* EntryZFar = g_object_get_data(G_OBJECT (buttonPerspective), "EntryZFar"); GtkWidget* buttonOptimal = g_object_get_data(G_OBJECT (buttonPerspective), "ButtonOptimal"); GtkWidget* labelZNear = g_object_get_data(G_OBJECT (buttonPerspective), "LabelZNear"); GtkWidget* labelZFar = g_object_get_data(G_OBJECT (buttonPerspective), "LabelZFar"); if(GTK_IS_WIDGET(EntryZNear))gtk_widget_set_sensitive(EntryZNear,perspective); if(GTK_IS_WIDGET(EntryZFar))gtk_widget_set_sensitive(EntryZFar,perspective); if(GTK_IS_WIDGET(buttonOptimal))gtk_widget_set_sensitive(buttonOptimal,perspective); if(GTK_IS_WIDGET(labelZNear))gtk_widget_set_sensitive(labelZNear,perspective); if(GTK_IS_WIDGET(labelZFar))gtk_widget_set_sensitive(labelZFar,perspective); } } /********************************************************************************/ static GtkWidget* create_camera_frame(GtkWidget* Win,GtkWidget *vbox) { GtkWidget *frame; GtkWidget *vboxframe; GtkWidget* buttonOptimal; GtkWidget* EntryZNear; GtkWidget* EntryZFar; GtkWidget* EntryZoom; GtkWidget *table = gtk_table_new(8,3,FALSE); GtkWidget *hseparator; gushort i; gdouble zNear = 1; gdouble zFar = 100; gdouble Zoom = 45; gdouble aspect = 1; gboolean perspective = TRUE; GtkWidget* buttonPerspective; GtkWidget* buttonNoPerspective; GtkWidget* labelZFar; GtkWidget* labelZNear; get_camera_values(&zNear, &zFar, &Zoom, &aspect, &perspective); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxframe = gtk_vbox_new (FALSE, 0); gtk_widget_show (vboxframe); gtk_container_add (GTK_CONTAINER (frame), vboxframe); gtk_box_pack_start (GTK_BOX (vboxframe), table, TRUE, TRUE, 0); /* ------------------------------------------------------------------*/ i = 4; labelZNear = add_label_table(table,_(" Distance from the viewer to the near clipping plane "),i,0); add_label_table(table," : ",i,1); EntryZNear = gtk_entry_new(); add_widget_table(table,EntryZNear,i,2); gtk_editable_set_editable((GtkEditable*)EntryZNear,TRUE); gtk_entry_set_text (GTK_ENTRY (EntryZNear),g_strdup_printf("%lf",zNear)); /* ------------------------------------------------------------------*/ i = 5; labelZFar = add_label_table(table,_(" Distance from the viewer to the far clipping plane "),i,0); add_label_table(table," : ",i,1); EntryZFar = gtk_entry_new(); add_widget_table(table,EntryZFar,i,2); gtk_editable_set_editable((GtkEditable*)EntryZFar,TRUE); gtk_entry_set_text (GTK_ENTRY (EntryZFar),g_strdup_printf("%lf",zFar)); /* ------------------------------------------------------------------*/ i = 6; add_label_table(table,_(" Zoom factor "),i,0); add_label_table(table," : ",i,1); EntryZoom = gtk_entry_new(); add_widget_table(table,EntryZoom,i,2); gtk_editable_set_editable((GtkEditable*)EntryZoom,TRUE); gtk_entry_set_text (GTK_ENTRY (EntryZoom),g_strdup_printf("%lf",1/Zoom*45.0)); /* ------------------------------------------------------------------*/ i=3; buttonOptimal = gtk_button_new_with_label(_("Get Optimal values") ); add_widget_table(table,buttonOptimal,i,2); gtk_widget_show (buttonOptimal); g_object_set_data(G_OBJECT (frame), "EntryZNear",EntryZNear); g_object_set_data(G_OBJECT (frame), "EntryZFar",EntryZFar); g_object_set_data(G_OBJECT (frame), "EntryZoom",EntryZoom); g_signal_connect_swapped(G_OBJECT(buttonOptimal),"clicked",(GCallback)set_camera_optimal,GTK_OBJECT(Win)); /* ------------------------------------------------------------------*/ i = 0; buttonPerspective = gtk_radio_button_new_with_label(NULL,_("Perspective")); add_widget_table(table,buttonPerspective,i,0); g_object_set_data(G_OBJECT (buttonPerspective), "EntryZNear",EntryZNear); g_object_set_data(G_OBJECT (buttonPerspective), "EntryZFar",EntryZFar); g_object_set_data(G_OBJECT (buttonPerspective), "ButtonOptimal",buttonOptimal); g_object_set_data(G_OBJECT (buttonPerspective), "LabelZNear",labelZNear); g_object_set_data(G_OBJECT (buttonPerspective), "LabelZFar",labelZFar); i = 1; buttonNoPerspective = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonPerspective)), _("No perspective")); add_widget_table(table,buttonNoPerspective,i,0); g_signal_connect(G_OBJECT(buttonPerspective),"clicked",(GCallback)set_sensitive_camera,NULL); if(perspective) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonPerspective), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonNoPerspective), TRUE); /* ------------------------------------------------------------------*/ i = 2; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),hseparator,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); g_object_set_data(G_OBJECT (frame), "ButtonPerspective",buttonPerspective); g_object_set_data(G_OBJECT (frame), "ButtonNoPerspective",buttonNoPerspective); gtk_widget_show_all(frame); return frame; } /********************************************************************************/ void set_camera() { GtkWidget *Win; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *button; GtkWidget* EntryZNear; GtkWidget* EntryZFar; GtkWidget* EntryZoom; GtkWidget* buttonPerspective; GtkWidget* buttonNoPerspective; Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),_("Camera")); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_child(PrincipalWindow,Win,gtk_widget_destroy,"Camera"); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(Win); vboxwin = vboxall; frame = create_camera_frame(Win,vboxall); EntryZNear = (GtkWidget*) g_object_get_data(G_OBJECT (frame), "EntryZNear"); EntryZFar = (GtkWidget*) g_object_get_data(G_OBJECT (frame), "EntryZFar"); EntryZoom = (GtkWidget*) g_object_get_data(G_OBJECT (frame), "EntryZoom"); buttonPerspective = (GtkWidget*) g_object_get_data(G_OBJECT (frame), "ButtonPerspective"); buttonNoPerspective = (GtkWidget*) g_object_get_data(G_OBJECT (frame), "ButtonNoPerspective"); g_object_set_data(G_OBJECT (Win), "EntryZNear",EntryZNear); g_object_set_data(G_OBJECT (Win), "EntryZFar",EntryZFar); g_object_set_data(G_OBJECT (Win), "EntryZoom",EntryZoom); g_object_set_data(G_OBJECT (Win), "ButtonPerspective",buttonPerspective); g_object_set_data(G_OBJECT (Win), "ButtonNoPerspective",buttonNoPerspective); hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("Close")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy, GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,_("Apply")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_camera, GTK_OBJECT(Win)); button = create_button(Win,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_camera, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Win)); gtk_widget_show_all (Win); } /********************************************************************************/ void set_light_positions(gchar* title) { GtkWidget *Win; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *button; GtkWidget** Entrys; /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),title); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Grid "); vboxall = create_vbox(Win); vboxwin = vboxall; frame = create_light_positions_frame(vboxall,_("Ligth positions")); Entrys = (GtkWidget**) g_object_get_data(G_OBJECT (frame), "Entrys"); g_object_set_data(G_OBJECT (Win), "Entrys",Entrys); /* buttons box */ hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)destroy_setlight_window, GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_ligth_positions,GTK_OBJECT(Win)); /* Show all */ gtk_widget_show_all (Win); } /********************************************************************************/ GabeditSrc250/src/Display/GridMolcas.h0000644000175100017510000000310613130665225020064 0ustar alloucheallouche/* GridMolcas.h */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GRIDMOLCAS_H__ #define __GABEDIT_GRIDMOLCAS_H__ void load_molcasgrid_file_orbitals(GabeditFileChooser *SelecFile, gint response_id); void load_molcasgrid_file_density(GabeditFileChooser *SelecFile, gint response_id); #endif /* __GABEDIT_GRIDMOLCAS_H__ */ GabeditSrc250/src/Display/UtilsOrb.h0000644000175100017510000000603313130665225017605 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_UTILSORB_H__ #define __GABEDIT_UTILSORB_H__ void InitializeAll(); gint GetTotalNelectrons(); gdouble GetSumAbsCharges(); void DefineNOccs(); gdouble Dpn(gdouble e,gint n); char GetSymmetry(gint l); gint GetNelectrons(char *symb); void printLineChar(char c,gint n); gdouble **CalculSm12(gdouble *S,gint n,gint nvec); gdouble** CreateTable2(gint N); gdouble** FreeTable2(gdouble **T,gint N); void PrintAllOrb(gdouble** M); gint get_type_file_orb(gchar *fileName); gint get_type_basis_in_gamess_file(gchar *fileName); gint get_type_basis_in_gaussian_file(gchar *fileName); gint get_type_basis_in_qchem_file(gchar *fileName); gint get_type_basis_in_nwchem_file(gchar *fileName); gint get_type_basis_in_gabedit_file(gchar *fileName); gint get_type_basis_in_molden_file(gchar *fileName); gboolean testi(char c); gboolean this_is_a_real(gchar *t); gboolean this_is_a_integer(gchar *t); gboolean testapointeE(char c); gboolean testpointeE(const gchar *t); void free_data_all(); GtkWidget *create_grid_frame( GtkWidget *vboxall,gchar *title); void create_grid(gchar* title); void read_any_file(gchar* FileName); gint get_number_of_point(GtkWidget* Entry); gboolean get_a_float(GtkWidget* Entry,gdouble* value, gchar* erroMessage); void initialise_global_orbitals_variables(); void close_window_orb(GtkWidget*win, gpointer data); void add_glarea_child(GtkWidget* winchild,gchar* title); void create_color_surfaces_file(); void read_color_surfaces_file(); void create_opengl_file(); void read_opengl_file(); void create_grid_sas(gchar* title); void set_scale_ball_stick_dlg(); void createColorMapOptionsWindow(GtkWidget* win); void create_grid_ELF_Dens_analyze(gboolean ongrid); GtkWidget* set_alphaFED_dialog (); void resetAllColorMapOrb(); #endif /* __GABEDIT_UTILSORB_H__ */ GabeditSrc250/src/Display/GridQChem.h0000644000175100017510000000274413130665225017652 0ustar alloucheallouche/* GridM2MSI.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GRIDQCHEM_H__ #define __GABEDIT_GRIDQCHEM_H__ void load_qchemgrid_file(GabeditFileChooser *SelecFile, gint response_id); #endif /* __GABEDIT_GRIDQCHEM_H__ */ GabeditSrc250/src/Display/GeomDraw.h0000644000175100017510000000302713130665225017547 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GEOMDRAW_H__ #define __GABEDIT_GEOMDRAW_H__ GLuint GeomGenList(GLuint geomlist, gdouble scaleBall, gdouble scaleStick, gboolean showBox); void GeomShowList(GLuint geomlist); gint GeomDraw(); #endif /* __GABEDIT_GEOMDRAW_H__ */ GabeditSrc250/src/Display/NCI.h0000644000175100017510000000272013130665225016452 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_NCI_H__ #define __GABEDIT_NCI_H__ void nci2D_analysis_dlg(gchar* title); void nci_surface_dlg(gchar* title); void help_nci(); #endif /* __GABEDIT_NCI_H__ */ GabeditSrc250/src/Display/NCI.c0000644000175100017510000005142113130665225016447 0ustar alloucheallouche/* NCI.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #ifdef ENABLE_OMP #include #endif #include "../Utils/Constants.h" #include "GlobalOrb.h" #include "StatusOrb.h" #include "UtilsOrb.h" #include "ColorMap.h" #include "../Utils/GabeditXYPlot.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Display/Grid.h" #include "../Display/Orbitals.h" /*********************************************************************************************************************************/ static gint compute_nci2D_from_density_grid(Grid* grid, gdouble densityCutOff, gdouble RDGCutOff, gint nBoundary, gdouble**pX, gdouble**pY) { gint i; gint j; gint k; gint kn; gdouble xh, yh, zh; gdouble a, b, c; /* gint N[3] = {0,0,0};*/ gdouble* fcx = NULL; gdouble* fcy = NULL; gdouble* fcz = NULL; gdouble cc = 0; gdouble* lfcx = NULL; gdouble* lfcy = NULL; gdouble* lfcz = NULL; gdouble lcc; GridLimits limits; gdouble scale = 0; gint n; gboolean beg = TRUE; gdouble gx, gy, gz; gdouble oneOver3 = 1.0/3.0; gdouble fourOver3 = 4.0/3.0; gdouble fact = 0.5/pow(3*M_PI*M_PI,oneOver3); gdouble PRECISION = 1.0e-60; gdouble *X; gdouble *Y; gint nPoints = 0; gdouble s; gdouble tensor[6];/* inf matrix */ gdouble xx; gdouble yy; gdouble zz; gdouble xy; gdouble xz; gdouble yz; gdouble lambda2; *pX = NULL; *pY = NULL; if(!test_grid_all_positive(grid)) { Message(_("Sorry\n The current grid is not a grid for electronic density"),_("Error"),TRUE); return nPoints; } if(grid==NULL) return nPoints; if(nBoundary<1) return nPoints; if(grid->N[0]<=2*nBoundary) return nPoints; if(grid->N[1]<=2*nBoundary) return nPoints; if(grid->N[2]<=2*nBoundary) return nPoints; /* for(n=0;n<3;n++) N[n] = grid->N[n];*/ i = 1; j = 0; k = 0; a = grid->point[i][j][k].C[0]-grid->point[0][0][0].C[0]; b = grid->point[i][j][k].C[1]-grid->point[0][0][0].C[1]; c = grid->point[i][j][k].C[2]-grid->point[0][0][0].C[2]; xh = sqrt(a*a+b*b+c*c); i = 0; j = 1; k = 0; a = grid->point[i][j][k].C[0]-grid->point[0][0][0].C[0]; b = grid->point[i][j][k].C[1]-grid->point[0][0][0].C[1]; c = grid->point[i][j][k].C[2]-grid->point[0][0][0].C[2]; yh = sqrt(a*a+b*b+c*c); i = 0; j = 0; k = 1; a = grid->point[i][j][k].C[0]-grid->point[0][0][0].C[0]; b = grid->point[i][j][k].C[1]-grid->point[0][0][0].C[1]; c = grid->point[i][j][k].C[2]-grid->point[0][0][0].C[2]; zh = sqrt(a*a+b*b+c*c); fcx = g_malloc((nBoundary)*sizeof(gdouble)); fcy = g_malloc((nBoundary)*sizeof(gdouble)); fcz = g_malloc((nBoundary)*sizeof(gdouble)); getCoefsGradient(nBoundary, xh, yh, zh, fcx, fcy, fcz); lfcx = g_malloc((nBoundary+1)*sizeof(gdouble)); lfcy = g_malloc((nBoundary+1)*sizeof(gdouble)); lfcz = g_malloc((nBoundary+1)*sizeof(gdouble)); getCoefsLaplacian(nBoundary, xh, yh, zh, lfcx, lfcy, lfcz, &lcc); progress_orb(0,GABEDIT_PROGORB_COMPNCIGRID,TRUE); X = g_malloc(grid->N[0]*grid->N[1]*grid->N[2]*sizeof(gdouble)); Y = g_malloc(grid->N[0]*grid->N[1]*grid->N[2]*sizeof(gdouble)); scale = (gdouble)1.01/grid->N[0]; for(i=nBoundary;iN[0]-nBoundary;i++) { for(j=nBoundary;jN[1]-nBoundary;j++) { for(k=nBoundary;kN[2]-nBoundary;k++) { if(densityCutOff>0 && grid->point[i][j][k].C[3]>densityCutOff) continue; if(grid->point[i][j][k].C[3]point[i+n][j][k].C[3]-grid->point[i-n][j][k].C[3]); gy += fcy[kn] * (grid->point[i][j+n][k].C[3]-grid->point[i][j-n][k].C[3]); gz += fcz[kn] * (grid->point[i][j][k+n].C[3]-grid->point[i][j][k-n].C[3]) ; } s = fact*sqrt(gx*gx+gy*gy+gz*gz)/pow(grid->point[i][j][k].C[3],fourOver3); if(RDGCutOff>0 && s>RDGCutOff) continue; lambda2 = getLambda2(grid,i, j, k, fcx, fcy, fcz, lfcx, lfcy, lfcz, nBoundary); if(fabs(lambda2)>PRECISION) { X[nPoints] = grid->point[i][j][k].C[3]; Y[nPoints] = s; if(lambda2<0) X[nPoints] = - X[nPoints]; nPoints++; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPNCIGRID,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_COMPNCIGRID,FALSE); } printf("nPoints = %d\n",nPoints); progress_orb(0,GABEDIT_PROGORB_COMPNCIGRID,TRUE); if(CancelCalcul) { g_free(X); g_free(Y); nPoints = 0; } if(nPoints>0) { X = g_realloc(X,nPoints*sizeof(gdouble)); Y = g_realloc(Y,nPoints*sizeof(gdouble)); } g_free(fcx); g_free(fcy); g_free(fcz); g_free(lfcx); g_free(lfcy); g_free(lfcz); *pX = X; *pY = Y; return nPoints; } /*********************************************************************************/ static Grid* compute_nci_from_density_grid(Grid* grid, gdouble densityCutOffMin, gdouble densityCutOffMax, gdouble RDGCutOff, gint nBoundary) { gint i; gint j; gint k; gint kn; Grid* nciGrid = NULL; gdouble xh, yh, zh; gdouble a, b, c; gint N[3] = {0,0,0}; gdouble* fcx = NULL; gdouble* fcy = NULL; gdouble* fcz = NULL; gdouble cc = 0; GridLimits limits; gdouble scale = 0; gint n; gboolean beg = TRUE; gdouble gx, gy, gz; gdouble oneOver3 = 1.0/3.0; gdouble fourOver3 = 4.0/3.0; gdouble fact = 0.5/pow(3*M_PI*M_PI,oneOver3); gdouble PRECISION = 1.0e-14; gdouble lambda2; gdouble* lfcx = NULL; gdouble* lfcy = NULL; gdouble* lfcz = NULL; gdouble rho; gdouble lcc; gdouble s; if(!test_grid_all_positive(grid)) { Message(_("Sorry\n The current grid is not a grid for electronic density"),_("Error"),TRUE); return NULL; } if(grid==NULL) return NULL; if(nBoundary<1) return NULL; if(grid->N[0]<=2*nBoundary) return NULL; if(grid->N[1]<=2*nBoundary) return NULL; if(grid->N[2]<=2*nBoundary) return NULL; for(n=0;n<3;n++) N[n] = grid->N[n]; i = 1; j = 0; k = 0; a = grid->point[i][j][k].C[0]-grid->point[0][0][0].C[0]; b = grid->point[i][j][k].C[1]-grid->point[0][0][0].C[1]; c = grid->point[i][j][k].C[2]-grid->point[0][0][0].C[2]; xh = sqrt(a*a+b*b+c*c); i = 0; j = 1; k = 0; a = grid->point[i][j][k].C[0]-grid->point[0][0][0].C[0]; b = grid->point[i][j][k].C[1]-grid->point[0][0][0].C[1]; c = grid->point[i][j][k].C[2]-grid->point[0][0][0].C[2]; yh = sqrt(a*a+b*b+c*c); i = 0; j = 0; k = 1; a = grid->point[i][j][k].C[0]-grid->point[0][0][0].C[0]; b = grid->point[i][j][k].C[1]-grid->point[0][0][0].C[1]; c = grid->point[i][j][k].C[2]-grid->point[0][0][0].C[2]; zh = sqrt(a*a+b*b+c*c); fcx = g_malloc((nBoundary)*sizeof(gdouble)); fcy = g_malloc((nBoundary)*sizeof(gdouble)); fcz = g_malloc((nBoundary)*sizeof(gdouble)); getCoefsGradient(nBoundary, xh, yh, zh, fcx, fcy, fcz); lfcx = g_malloc((nBoundary+1)*sizeof(gdouble)); lfcy = g_malloc((nBoundary+1)*sizeof(gdouble)); lfcz = g_malloc((nBoundary+1)*sizeof(gdouble)); getCoefsLaplacian(nBoundary, xh, yh, zh, lfcx, lfcy, lfcz, &lcc); limits.MinMax[0][0] = grid->limits.MinMax[0][0]; limits.MinMax[1][0] = grid->limits.MinMax[1][0]; limits.MinMax[0][1] = grid->limits.MinMax[0][1]; limits.MinMax[1][1] = grid->limits.MinMax[1][1]; limits.MinMax[0][2] = grid->limits.MinMax[0][2]; limits.MinMax[1][2] = grid->limits.MinMax[1][2]; nciGrid = grid_point_alloc(N,limits); progress_orb(0,GABEDIT_PROGORB_COMPNCIGRID,TRUE); scale = (gdouble)1.01/nciGrid->N[0]; for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { nciGrid->point[i][j][k].C[0] = grid->point[i][j][k].C[0]; nciGrid->point[i][j][k].C[1] = grid->point[i][j][k].C[1]; nciGrid->point[i][j][k].C[2] = grid->point[i][j][k].C[2]; nciGrid->point[i][j][k].C[3] = RDGCutOff; } } } /* printf("densityCutOffMax = %f\n",densityCutOffMax);*/ for(i=nBoundary;iN[0]-nBoundary;i++) { for(j=nBoundary;jN[1]-nBoundary;j++) { for(k=nBoundary;kN[2]-nBoundary;k++) { rho = grid->point[i][j][k].C[3]; if(rhopoint[i+n][j][k].C[3]-grid->point[i-n][j][k].C[3]); gy += fcy[kn] * (grid->point[i][j+n][k].C[3]-grid->point[i][j-n][k].C[3]); gz += fcz[kn] * (grid->point[i][j][k+n].C[3]-grid->point[i][j][k-n].C[3]) ; } s = fact*sqrt(gx*gx+gy*gy+gz*gz)/pow(rho,fourOver3); if(s<=RDGCutOff) { lambda2 = getLambda2(grid,i, j, k, fcx, fcy, fcz, lfcx, lfcy, lfcz, nBoundary); if(lambda2<0) rho = -rho; if(rho >= densityCutOffMin && rho <= densityCutOffMax ) nciGrid->point[i][j][k].C[3] = s; } if(beg) { beg = FALSE; nciGrid->limits.MinMax[0][3] = nciGrid->point[i][j][k].C[3]; nciGrid->limits.MinMax[1][3] = nciGrid->point[i][j][k].C[3]; } else { if(nciGrid->limits.MinMax[0][3]>nciGrid->point[i][j][k].C[3]) nciGrid->limits.MinMax[0][3] = nciGrid->point[i][j][k].C[3]; if(nciGrid->limits.MinMax[1][3]point[i][j][k].C[3]) nciGrid->limits.MinMax[1][3] = nciGrid->point[i][j][k].C[3]; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPNCIGRID,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_COMPNCIGRID,FALSE); } if(CancelCalcul) { nciGrid = free_grid(nciGrid); } else { reset_boundary(nciGrid, nBoundary); } g_free(fcx); g_free(fcy); g_free(fcz); g_free(lfcx); g_free(lfcy); g_free(lfcz); return nciGrid; } /*********************************************************************************/ static void nci2D_analysis(gdouble RDGCut, gdouble densityCut) { gdouble *X = NULL; gdouble *Y = NULL; gint nBoundary = 2; gint nPoints = compute_nci2D_from_density_grid(grid, densityCut, RDGCut, nBoundary, &X, &Y); if(nPoints>0) { GtkWidget* xyplot; GtkWidget* window; window = gabedit_xyplot_new_window(_("NCI 2D analysis"),NULL); xyplot = g_object_get_data(G_OBJECT (window), "XYPLOT"); gabedit_xyplot_add_data_conv(GABEDIT_XYPLOT(xyplot),nPoints, X, Y, 1.0, GABEDIT_XYPLOT_CONV_NONE,NULL); gabedit_xyplot_set_range_xmin (GABEDIT_XYPLOT(xyplot), -densityCut); gabedit_xyplot_set_range_xmax (GABEDIT_XYPLOT(xyplot), densityCut); gabedit_xyplot_set_range_ymin (GABEDIT_XYPLOT(xyplot), 0.0); gabedit_xyplot_set_range_ymax (GABEDIT_XYPLOT(xyplot), RDGCut); gabedit_xyplot_set_x_label (GABEDIT_XYPLOT(xyplot), "sign(λ2) density (au)"); /* gabedit_xyplot_set_x_label (GABEDIT_XYPLOT(xyplot), "sign(λ2) density (au)");*/ gabedit_xyplot_set_y_label (GABEDIT_XYPLOT(xyplot), "Reduced density gradient (au)"); gabedit_xyplot_set_data_line_width (GABEDIT_XYPLOT(xyplot),0); gabedit_xyplot_set_data_point_size (GABEDIT_XYPLOT(xyplot),1); gabedit_xyplot_set_data_point_type (GABEDIT_XYPLOT(xyplot),'.'); gabedit_xyplot_set_data_point_color (GABEDIT_XYPLOT(xyplot),1.0, 0.0,0.0); /*gabedit_xyplot_set_autorange(GABEDIT_XYPLOT(xyplot),NULL);*/ g_free(X); g_free(Y); } } /*********************************************************************************/ static void apply_nci2D_analysis(GtkWidget *Win,gpointer data) { GtkWidget *entryMaxDensity = NULL; GtkWidget *entryMaxRDG = NULL; G_CONST_RETURN gchar* temp; gdouble densityCutOff = 1.0; gdouble RDGCutOff = 2.0; if(!GTK_IS_WIDGET(Win)) return; entryMaxDensity = (GtkWidget *)g_object_get_data(G_OBJECT (Win), "EntryMaxDensity"); entryMaxRDG = (GtkWidget *)g_object_get_data(G_OBJECT (Win), "EntryMaxRDG"); if(entryMaxDensity==NULL) return; if(entryMaxRDG==NULL) return; temp = gtk_entry_get_text(GTK_ENTRY(entryMaxDensity)); if(temp) densityCutOff = atof(temp); temp = gtk_entry_get_text(GTK_ENTRY(entryMaxRDG)); if(temp) RDGCutOff = atof(temp); gtk_widget_destroy (Win); nci2D_analysis(RDGCutOff, densityCutOff); } /********************************************************************************/ void nci2D_analysis_dlg(gchar* title) { GtkWidget *Win; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *vboxframe; GtkWidget *button; GtkWidget *entryMaxDensity; GtkWidget *entryMaxRDG; GtkWidget *Table; gint i,j; if(!test_grid_all_positive(grid)) { Message(_("Sorry\n The current grid is not a grid for electronic density"),_("Error"),TRUE); return; } if(grid==NULL) return; Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),title); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"NCI "); vboxall = create_vbox(Win); vboxwin = vboxall; frame = gtk_frame_new ("Cutoff parameters"); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(4,7,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); i = 0; j = 0; add_label_at_table(Table, _("Max density (au)"),(gushort)i,(gushort)j,GTK_JUSTIFY_LEFT); i = 0; j=1; entryMaxDensity = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entryMaxDensity),100,-1); add_widget_table(Table,entryMaxDensity,(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entryMaxDensity),"1.0"); g_object_set_data (G_OBJECT (Win), "EntryMaxDensity",entryMaxDensity); i = 1; j = 0; add_label_at_table(Table, _("Max RDG (au)"),(gushort)i,(gushort)j,GTK_JUSTIFY_LEFT); i = 1; j=1; entryMaxRDG = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entryMaxRDG),100,-1); add_widget_table(Table,entryMaxRDG,(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entryMaxRDG),"2.0"); g_object_set_data (G_OBJECT (Win), "EntryMaxRDG",entryMaxRDG); hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, G_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,G_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_nci2D_analysis,G_OBJECT(Win)); gtk_widget_show_all (Win); } /*********************************************************************************/ static void apply_nci_surface(GtkWidget *Win,gpointer data) { GtkWidget *entryMaxDensity = NULL; GtkWidget *entryMinDensity = NULL; GtkWidget *entryMaxRDG = NULL; G_CONST_RETURN gchar* temp; gdouble densityCutOffMin = 1.0; gdouble densityCutOffMax = 1.0; gdouble RDGCutOff = 2.0; Grid* nciGrid = NULL; if(!GTK_IS_WIDGET(Win)) return; entryMinDensity = (GtkWidget *)g_object_get_data(G_OBJECT (Win), "EntryMinDensity"); entryMaxDensity = (GtkWidget *)g_object_get_data(G_OBJECT (Win), "EntryMaxDensity"); entryMaxRDG = (GtkWidget *)g_object_get_data(G_OBJECT (Win), "EntryMaxRDG"); if(entryMinDensity==NULL) return; if(entryMaxDensity==NULL) return; if(entryMaxRDG==NULL) return; temp = gtk_entry_get_text(GTK_ENTRY(entryMinDensity)); if(temp) densityCutOffMin = atof(temp); temp = gtk_entry_get_text(GTK_ENTRY(entryMaxDensity)); if(temp) densityCutOffMax = atof(temp); if(densityCutOffMin>densityCutOffMax) swapDouble(&densityCutOffMin,&densityCutOffMax); temp = gtk_entry_get_text(GTK_ENTRY(entryMaxRDG)); if(temp) RDGCutOff = atof(temp); gtk_widget_destroy (Win); nciGrid = compute_nci_from_density_grid(grid, densityCutOffMin, densityCutOffMax, RDGCutOff, 2); if(nciGrid) { free_grid(grid); grid = nciGrid; TypeGrid = GABEDIT_TYPEGRID_NCI; limits = grid->limits; create_iso_orbitals(); } } /********************************************************************************/ void nci_surface_dlg(gchar* title) { GtkWidget *Win; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *vboxframe; GtkWidget *button; GtkWidget *entryMinDensity; GtkWidget *entryMaxDensity; GtkWidget *entryMaxRDG; GtkWidget *Table; gint i,j; if(!test_grid_all_positive(grid)) { Message(_("Sorry\n The current grid is not a grid for electronic density"),_("Error"),TRUE); return; } if(grid==NULL) return; Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),title); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"NCI "); vboxall = create_vbox(Win); vboxwin = vboxall; frame = gtk_frame_new ("Cutoff parameters"); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(3,3,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); i = 0; j = 0; add_label_at_table(Table, _("sign(lambda2) density Min (au)"),(gushort)i,(gushort)j,GTK_JUSTIFY_LEFT); i = 0; j=1; entryMinDensity = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entryMinDensity),100,-1); add_widget_table(Table,entryMinDensity,(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entryMinDensity),"-1.0"); g_object_set_data (G_OBJECT (Win), "EntryMinDensity",entryMinDensity); i = 1; j = 0; add_label_at_table(Table, _("sign(lambda2) density Max (au)"),(gushort)i,(gushort)j,GTK_JUSTIFY_LEFT); i = 1; j=1; entryMaxDensity = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entryMaxDensity),100,-1); add_widget_table(Table,entryMaxDensity,(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entryMaxDensity),"1.0"); g_object_set_data (G_OBJECT (Win), "EntryMaxDensity",entryMaxDensity); i = 2; j = 0; add_label_at_table(Table, _("Reduced densdity Gradient Max (au)"),(gushort)i,(gushort)j,GTK_JUSTIFY_LEFT); i = 2; j=1; entryMaxRDG = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entryMaxRDG),100,-1); add_widget_table(Table,entryMaxRDG,(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entryMaxRDG),"100.0"); g_object_set_data (G_OBJECT (Win), "EntryMaxRDG",entryMaxRDG); hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, G_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,G_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_nci_surface,G_OBJECT(Win)); gtk_widget_show_all (Win); } /********************************************************************************************/ void help_nci() { gchar temp[BSIZE]; GtkWidget* win; sprintf(temp, _( " For more information about the non-covalent interactions (NCI) index,\n" " please read :\n" " * Johnson et al., J. Am. Chem. Soc. 132, 6498 (2010).\n" " * Contreras-Garcia et al., J. Chem. Theory Comput., 7, 625. (2011)\n" ) ); win = Message(temp,_("Info"),FALSE); gtk_window_set_modal (GTK_WINDOW (win), TRUE); } GabeditSrc250/src/Display/GridCube.h0000644000175100017510000000704713130665225017534 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GRIDCUBE_H__ #define __GABEDIT_GRIDCUBE_H__ void square_cube(); void restriction_cube(); void load_cube_gauss_orbitals_file(GabeditFileChooser *SelecFile, gint response_id); void load_cube_gauss_density_file(GabeditFileChooser *SelecFile, gint response_id); void load_cube_gauss_gradient_file(GabeditFileChooser *SelecFile, gint response_id); void load_cube_gauss_laplacian_file(GabeditFileChooser *SelecFile, gint response_id); void load_cube_gauss_normgrad_file(GabeditFileChooser *SelecFile, gint response_id); void load_cube_gauss_potential_file(GabeditFileChooser *SelecFile, gint response_id); void load_cube_molpro_orbital_file(GabeditFileChooser *SelecFile, gint response_id); void load_cube_molpro_orbitals_file(GabeditFileChooser *SelecFile, gint response_id); void load_cube_molpro_density_file(GabeditFileChooser *SelecFile, gint response_id); void load_cube_molpro_density_gradient_file(GabeditFileChooser *SelecFile, gint response_id); void load_cube_molpro_laplacian_density_file(GabeditFileChooser *SelecFile, gint response_id); void load_cube_molpro_laplacian_laplacian_file(GabeditFileChooser *SelecFile, gint response_id); void load_cube_gabedit_file(GabeditFileChooser *SelecFile, gint response_id); void load_dx_grid_file(GabeditFileChooser *selFile, gint response_id); void create_scale_dlg(); void subtract_cube(GabeditFileChooser *SelecFile, gint response_id); void mapping_cube(GabeditFileChooser *SelecFile, gint response_id); void save_cube_gabedit_file(GabeditFileChooser *SelecFile, gint response_id); void mapping_with_mep(gint N[],GridLimits limits, PoissonSolverMethod psMethod); void mapping_with_mep_from_multipol(gint lmax); void mapping_with_mep_from_charges(); void mapping_with_fed(gint n); gboolean read_dx_grid_file(gchar* filename, gboolean showisowin); gboolean read_gauss_molpro_cube_orbitals_file(gchar* filename,gint numorb,gint Norbs,gint typefile, gboolean showisowin); void compute_integral_all_space(); void applyCutLeft0(GtkWidget *Win,gpointer data); void applyCutRight0(GtkWidget *Win,gpointer data); void applyCutLeft1(GtkWidget *Win,gpointer data); void applyCutRight1(GtkWidget *Win,gpointer data); void applyCutLeft2(GtkWidget *Win,gpointer data); void applyCutRight2(GtkWidget *Win,gpointer data); #endif /* __GABEDIT_GRIDCUBE_H__ */ GabeditSrc250/src/Display/Textures.h0000644000175100017510000000271213130665225017665 0ustar alloucheallouche/* Textures.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_TEXTURES_H__ #define __GABEDIT_TEXTURES_H__ void activate_texture(gint); void disable_texture(); #endif /* __GABEDIT_TEXTURES_H__ */ GabeditSrc250/src/Display/OrbitalsQChem.c0000644000175100017510000010361613130665225020537 0ustar alloucheallouche/* OrbitalsQChem.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "../Utils/AtomsProp.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/Zlm.h" #include "../Geometry/GeomGlobal.h" #include "GeomDraw.h" #include "GLArea.h" #include "UtilsOrb.h" #include "Basis.h" #include "GeomOrbXYZ.h" #include "AtomicOrbitals.h" #include "StatusOrb.h" #include "Basis.h" #include "Orbitals.h" #include "GeomOrbXYZ.h" #include "BondsOrb.h" /********************************************************************************/ typedef enum { GABEDIT_ORBLOCALTYPE_BOYS=0, GABEDIT_ORBLOCALTYPE_EDMISTON, GABEDIT_ORBLOCALTYPE_PIPEK, GABEDIT_ORBLOCALTYPE_UNKNOWN } GabEditOrbLocalType; static gchar* titlesLocalOrb[GABEDIT_ORBLOCALTYPE_PIPEK+1]= { "BOYS ORBITAL LOCALIZATION", "EDMISTON-RUEDENBERG ENERGY LOCALIZATION", "MOLECULAR ORBITALS LOCALIZED BY THE POPULATION METHOD" }; typedef enum { GABEDIT_ORBTYPE_ALPHA = 0, GABEDIT_ORBTYPE_BETA, GABEDIT_ORBTYPE_RESTRICTED, GABEDIT_ORBTYPE_MCSCF, GABEDIT_ORBTYPE_EIGENVECTORS, GABEDIT_ORBTYPE_BOYS_ALPHA, GABEDIT_ORBTYPE_BOYS_BETA, GABEDIT_ORBTYPE_BOYS, GABEDIT_ORBTYPE_EDMISTON_ALPHA, GABEDIT_ORBTYPE_EDMISTON_BETA, GABEDIT_ORBTYPE_EDMISTON, GABEDIT_ORBTYPE_PIPEK_ALPHA, GABEDIT_ORBTYPE_PIPEK_BETA, GABEDIT_ORBTYPE_PIPEK, } GabEditOrbType; static gchar* titlesOrb[GABEDIT_ORBTYPE_PIPEK+1]= { "ALPHA MOLECULAR ORBITAL COEFFICIENTS", "BETA MOLECULAR ORBITAL COEFFICIENTS", "RESTRICTED (RHF) MOLECULAR ORBITAL COEFFICIENTS", "MCSCF OPTIMIZED ORBITALS", "EIGENVECTORS", "***** ALPHA ORBITAL LOCALIZATION *****", "****** BETA ORBITAL LOCALIZATION *****", "THE BOYS LOCALIZED ORBITALS ARE", "***** ALPHA ORBITAL LOCALIZATION *****", "****** BETA ORBITAL LOCALIZATION *****", "EDMISTON-RUEDENBERG ENERGY LOCALIZED ORBITALS", "***** ALPHA ORBITAL LOCALIZATION *****", "****** BETA ORBITAL LOCALIZATION *****", "THE PIPEK-MEZEY POPULATION LOCALIZED ORBITALS ARE" }; /********************************************************************************/ static gboolean sphericalBasis = FALSE; /********************************************************************************/ static gboolean read_geomorb_qchem_file_geom(gchar *FileName) { gchar *t; gchar *tmp = NULL; gboolean OK; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; guint i; gint j=0; guint numgeom; long geompos=0; gint idummy; gint l; for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); if ((!FileName) || (strcmp(FileName,"") == 0)) { Message(_("Sorry\n No file selected"),_("Error"),TRUE); for(i=0;i<5;i++) g_free(AtomCoord[i]); return FALSE; } t=g_malloc(taille); fd = FOpen(FileName, "rb"); if(fd ==NULL) { Message(_("Sorry\nI can not open this file"),_("Error"),TRUE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); return FALSE; } init_dipole(); free_data_all(); tmp = get_name_file(FileName); set_status_label_info(_("File name"),tmp); g_free(tmp); set_status_label_info(_("File type"),"Q-Chem"); numgeom =1; do { set_status_label_info(_("Geometry"),"Reading"); OK=FALSE; while(!feof(fd)) { if(!fgets(t,taille,fd))break; if ( strstr( t,"Atom") && strstr( t,"X") && strstr( t,"Y") && strstr( t,"Z")) { if(!fgets(t,taille,fd))break; if(!strstr( t,"----------------------------------")) break; numgeom++; OK = TRUE; break; } } if(!OK && (numgeom == 1) ) { Message(_("Sorry\nI can not read geometry from this file"),_("Error"),TRUE); fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); set_status_label_info(_("Geometry"),_("Nothing")); return FALSE; } if(!OK)break; j=-1; while(!feof(fd) ) { { char* e = fgets(t,taille,fd);} if (strstr( t, "----------------------------------" )) { geompos = ftell(fd); break; } j++; if(GeomOrb==NULL) GeomOrb=g_malloc(sizeof(TypeGeomOrb)); else GeomOrb=g_realloc(GeomOrb,(j+1)*sizeof(TypeGeomOrb)); sscanf(t,"%d %s %s %s %s",&idummy,AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3]); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); if(isdigit(AtomCoord[0][1]))l=1; if(l==1)sprintf(t,"%c",AtomCoord[0][0]); else sprintf(t,"%c%c",AtomCoord[0][0],AtomCoord[0][1]); GeomOrb[j].Symb=g_strdup(t); for(i=0;i<3;i++) GeomOrb[j].C[i]=atof(ang_to_bohr(AtomCoord[i+1])); GeomOrb[j].Prop = prop_atom_get(GeomOrb[j].Symb); } geompos = ftell(fd); }while(!feof(fd)); Ncenters = j+1; if(Ncenters>0) { fseek(fd, geompos, SEEK_SET); get_dipole_from_qchem_output_file(fd); } fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(Ncenters == 0 ) { g_free(GeomOrb); } else { DefineType(); /* PrintGeomOrb();*/ } buildBondsOrb(); RebuildGeom = FALSE; return TRUE; } /********************************************************************************/ static void DefineQChemCartBasis() { gint i,j,k,n; gint l1,l2,l3; gint L; gint *l[3]={NULL,NULL,NULL}; gint m; NAOrb = 0; for(i=0;i=0;l3--) for(l2=Type[GeomOrb[i].NumType].Ao[j].L-l3;l2>=0;l2--) { l1 = Type[GeomOrb[i].NumType].Ao[j].L-l2-l3; l[0][m] = l1; l[1][m] = l2; l[2][m] = l3; m++; } } for(m=0;m<(L+1)*(L+2)/2;m++) { l1 = l[0][m]; l2 = l[1][m]; l3 = l[2][m]; k++; AOrb[k].numberOfFunctions=Type[GeomOrb[i].NumType].Ao[j].N; AOrb[k].NumCenter = i; AOrb[k].Gtf =g_malloc(AOrb[k].numberOfFunctions*sizeof(GTF)); for(n=0;n=klend);kl +=klinc) { M = kl; k++; Stemp = getZlm(L,M); temp[k].numberOfFunctions=Stemp.numberOfCoefficients*Type[GeomOrb[i].NumType].Ao[j].N; temp[k].NumCenter=i; temp[k].Gtf =g_malloc(temp[k].numberOfFunctions*sizeof(GTF)); Nc=-1; for(N=0;N=nrows)break; } sscanf(strbasis[k],"%s",t); if(newAtom && !isdigit(t[0])) /* symbol of atom*/ { newAtom = FALSE; i=get_num_type_from_symbol(t); if(i<0) { Ok = FALSE; break; } Type[i].Norb=0; nconts=0; continue; } sscanf(strbasis[k],"%s %d",shell, &nconts); for(c=0;c=1) ex[c]=atof(temp[0]); if(ne>=2) coef1[c]=atof(temp[1]); if(ne==3) coef2[c]=atof(temp[2]); } if(nconts != 0) { gint j = Type[i].Norb; uppercase(shell); if(strcmp(shell,"SP")==0) Type[i].Norb+=2; else Type[i].Norb++; if(Type[i].Ao == NULL) Type[i].Ao=g_malloc(Type[i].Norb*sizeof(AO)); else Type[i].Ao=g_realloc(Type[i].Ao,Type[i].Norb*sizeof(AO)); for(jj=j;jj< Type[i].Norb;jj++) { Type[i].Ao[jj].Ex = NULL; Type[i].Ao[jj].Coef = NULL; } if(!addOneBasis(i,j,shell,nconts, ex, coef1)) { Ok = FALSE; break; } if(strcmp(shell,"SP")==0) { if(!addOneBasis(i,j+1,"P",nconts, ex, coef2)) { Ok = FALSE; break; } } /* printf("shell =%s ",shell); printf("nconts =%d\n",nconts); */ nconts=0; } } if(!Ok) { if(Type) for(i=0;i0) ncart++; gint no=0; for(n=0;n0) { for(i=0;i #include "GlobalOrb.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Display/StatusOrb.h" #include "../Display/GLArea.h" #include "../Display/AnimationRotation.h" #include "../Files/FolderChooser.h" #include "../Files/GabeditFolderChooser.h" #include "../Common/Help.h" #include "../Display/Images.h" #include "../Display/PovrayGL.h" static GtkWidget *WinDlg = NULL; static GtkWidget *EntryVelocity = NULL; static GtkWidget *EntryNRotation = NULL; static GtkWidget *LabelNRotation = NULL; static GtkWidget *PlayButton = NULL; static GtkWidget *StopButton = NULL; static gboolean play = FALSE; static gdouble velocity = 0.1; static gint nRotation = 10; static GtkWidget *buttonXAxis = NULL; static GtkWidget *buttonYAxis = NULL; static GtkWidget *buttonZAxis = NULL; static GtkWidget *buttonCheckFilm = NULL; static GtkWidget *buttonDirFilm = NULL; static GtkWidget* comboListFilm = NULL; static gboolean createFilm = FALSE; static gint numFileFilm = 0; static gchar formatFilm[100] = "BMP"; typedef enum { XAXIS = 0, YAXIS = 1, ZAXIS = 2 } GabEditAxis; GabEditAxis selectedAxis = YAXIS; /********************************************************************************/ static void animate_rotation(); static void stop_animation(GtkWidget *win, gpointer data); static void play_animation(GtkWidget *win, gpointer data); /********************************************************************************/ static void reset_last_directory(GtkWidget *dirSelector, gpointer data) { gchar* dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); gchar* filename = NULL; if(dirname && strlen(dirname)>0) { if(dirname[strlen(dirname)-1] != G_DIR_SEPARATOR) filename = g_strdup_printf("%s%sdump.txt",dirname,G_DIR_SEPARATOR_S); else filename = g_strdup_printf("%sdump.txt",dirname); } else { dirname = g_strdup(g_get_home_dir()); filename = g_strdup_printf("%s%sdump.txt",dirname,G_DIR_SEPARATOR_S); } if(dirname) g_free(dirname); if(filename) { set_last_directory(filename); g_free(filename); } } /********************************************************************************/ static void set_directory(GtkWidget *win, gpointer data) { GtkWidget *dirSelector; dirSelector = selctionOfDir(reset_last_directory, _("Set folder"), GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); gtk_window_set_transient_for(GTK_WINDOW(dirSelector),GTK_WINDOW(PrincipalWindow)); gtk_window_set_transient_for(GTK_WINDOW(dirSelector),GTK_WINDOW(WinDlg)); } /********************************************************************************/ static void reset_parameters(GtkWidget *win, gpointer data) { gdouble velo = atof(gtk_entry_get_text(GTK_ENTRY(EntryVelocity))); gint nRot = atoi(gtk_entry_get_text(GTK_ENTRY(EntryNRotation))); gchar t[BSIZE]; if(velo<0) { velo = -velo; sprintf(t,"%lf",velo); gtk_entry_set_text(GTK_ENTRY(EntryVelocity),t); } velocity = velo; if(nRot==0) { nRot = 10; sprintf(t,"%d",nRot); gtk_entry_set_text(GTK_ENTRY(EntryNRotation),t); } if(nRot<0) { nRot = -nRot; sprintf(t,"%d",nRot); gtk_entry_set_text(GTK_ENTRY(EntryNRotation),t); } nRotation = nRot; if(!play) stop_animation(NULL,NULL); } /********************************************************************************/ static void play_animation(GtkWidget *win, gpointer data) { play = TRUE; gtk_widget_set_sensitive(PlayButton, FALSE); gtk_widget_set_sensitive(StopButton, TRUE); gtk_window_set_modal (GTK_WINDOW (WinDlg), TRUE); animate_rotation(); } /********************************************************************************/ static void stop_animation(GtkWidget *win, gpointer data) { play = FALSE; if(GTK_IS_WIDGET(PlayButton)) gtk_widget_set_sensitive(PlayButton, TRUE); if(GTK_IS_WIDGET(StopButton)) gtk_widget_set_sensitive(StopButton, FALSE); if(GTK_IS_WIDGET(WinDlg)) gtk_window_set_modal (GTK_WINDOW (WinDlg), FALSE); while( gtk_events_pending() ) gtk_main_iteration(); if(this_is_an_object((GtkObject*)GLArea)) glarea_rafresh(GLArea); } /********************************************************************************/ static void destroyAnimationDlg(GtkWidget *win) { createFilm = FALSE; numFileFilm = 0; stop_animation(NULL, NULL); gtk_widget_destroy(WinDlg); WinDlg = NULL; } /********************************************************************************/ static gchar* get_format_image_from_option() { if(strcmp(formatFilm,"BMP")==0) return "bmp"; if(strcmp(formatFilm,"PPM")==0) return "ppm"; if(strcmp(formatFilm,"PNG")==0) return "png"; if(strcmp(formatFilm,"JPEG")==0) return "jpg"; if(strcmp(formatFilm,"PNG transparent")==0) return "png"; if(strcmp(formatFilm,"Povray")==0) return "pov"; return "UNK"; } /********************************************************************************/ static void filmSelected(GtkWidget *widget) { if(GTK_IS_WIDGET(buttonCheckFilm)&& GTK_TOGGLE_BUTTON (buttonCheckFilm)->active) { createFilm = TRUE; if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, TRUE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, TRUE); } else { createFilm = FALSE; if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); } } /********************************************************************************/ static void showMessageEnd() { gchar* format =get_format_image_from_option(); gchar* message = messageAnimatedImage(format); gchar* t = g_strdup_printf(_("\nA series of gab*.%s files was created in \"%s\" directeory.\n\n\n%s") , format, get_last_directory(),message); GtkWidget* winDlg = Message(t,_("Info"),TRUE); g_free(message); gtk_window_set_modal (GTK_WINDOW (winDlg), TRUE); g_free(t); } /********************************************************************************/ static void unActivateFilm() { createFilm = FALSE; numFileFilm = 0; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCheckFilm), FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); } /********************************************************************************************************/ static void set_format_film(GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } if(!data) return; sprintf(formatFilm ,"%s",(gchar*)data); } /********************************************************************************************************/ static GtkWidget *create_list_of_formats() { GtkTreeIter iter; GtkListStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; gint i; gint k; gchar* options[] = {"BMP","PPM", "JPEG", "PNG", "PNG transparent", "Povray"}; guint numberOfElements = G_N_ELEMENTS (options); k = 0; store = gtk_list_store_new (1,G_TYPE_STRING); for(i=0;iactive) selectedAxis = XAXIS; if(GTK_IS_WIDGET(buttonYAxis) && GTK_TOGGLE_BUTTON (buttonYAxis)->active) selectedAxis = YAXIS; if(GTK_IS_WIDGET(buttonZAxis) && GTK_TOGGLE_BUTTON (buttonZAxis)->active) selectedAxis = ZAXIS; } /********************************************************************************/ static void addEntrysButtons(GtkWidget* box) { GtkWidget *Button; GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *table; gchar t[BSIZE]; gint i; GtkWidget *separator; GtkWidget* formatBox; frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(box), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(11,3,FALSE); gtk_box_pack_start(GTK_BOX(vboxframe), table,TRUE,TRUE,0); i = 0; buttonXAxis = gtk_radio_button_new_with_label( NULL,_("Rotation about X axis")); gtk_table_attach(GTK_TABLE(table),buttonXAxis,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); i++; buttonYAxis = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonXAxis)), _("Rotation about Y axis ")); gtk_table_attach(GTK_TABLE(table),buttonYAxis,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); i++; buttonZAxis = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonXAxis)), _("Rotation about Z axis ")); gtk_table_attach(GTK_TABLE(table),buttonZAxis,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); g_signal_connect (G_OBJECT(buttonXAxis), "toggled", G_CALLBACK (buttonAxisSelected), NULL); g_signal_connect (G_OBJECT(buttonYAxis), "toggled", G_CALLBACK (buttonAxisSelected), NULL); g_signal_connect (G_OBJECT(buttonZAxis), "toggled", G_CALLBACK (buttonAxisSelected), NULL); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonYAxis), TRUE); i++; separator = gtk_hseparator_new(); gtk_table_attach(GTK_TABLE(table),separator,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); i++; add_label_table(table,_(" Time step(s) "),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); EntryVelocity = gtk_entry_new(); gtk_table_attach(GTK_TABLE(table),EntryVelocity,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_editable_set_editable((GtkEditable*) EntryVelocity,TRUE); sprintf(t,"%lf",velocity); gtk_entry_set_text(GTK_ENTRY(EntryVelocity),t); i++; LabelNRotation = add_label_table(table,_(" Number of Rotation by cycle"),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); EntryNRotation = gtk_entry_new(); gtk_table_attach(GTK_TABLE(table),EntryNRotation,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_editable_set_editable((GtkEditable*) EntryNRotation,TRUE); sprintf(t,"%d",nRotation); gtk_entry_set_text(GTK_ENTRY(EntryNRotation),t); i++; separator = gtk_hseparator_new(); gtk_table_attach(GTK_TABLE(table),separator,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); i++; buttonCheckFilm = gtk_check_button_new_with_label (_("Create a film")); createFilm = FALSE; numFileFilm = 0; gtk_table_attach(GTK_TABLE(table),buttonCheckFilm,0,1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); g_signal_connect (G_OBJECT(buttonCheckFilm), "toggled", G_CALLBACK (filmSelected), NULL); formatBox = create_list_of_formats(); gtk_table_attach(GTK_TABLE(table),formatBox,1,1+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); buttonDirFilm = create_button(WinDlg,_("Folder")); gtk_table_attach(GTK_TABLE(table),buttonDirFilm,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); g_signal_connect(G_OBJECT(buttonDirFilm), "clicked",(GCallback)set_directory,NULL); comboListFilm = formatBox; if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCheckFilm), FALSE); i++; separator = gtk_hseparator_new(); gtk_table_attach(GTK_TABLE(table),separator,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); table = gtk_table_new(1,2,TRUE); gtk_box_pack_start (GTK_BOX (vboxframe), table, TRUE, TRUE, 0); i=0; Button = create_button(WinDlg,_("Play")); gtk_table_attach(GTK_TABLE(table),Button,0,0+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); PlayButton = Button; Button = create_button(WinDlg,_("Stop")); gtk_table_attach(GTK_TABLE(table),Button,1,1+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); StopButton = Button; g_signal_connect(G_OBJECT(PlayButton), "clicked",(GCallback)play_animation,NULL); g_signal_connect(G_OBJECT(StopButton), "clicked",(GCallback)stop_animation,NULL); g_signal_connect_swapped (G_OBJECT (EntryVelocity), "activate", (GCallback)reset_parameters, NULL); g_signal_connect_swapped (G_OBJECT (EntryNRotation), "activate", (GCallback)reset_parameters, NULL); } /*****************************************************************************/ static gboolean createImagesFile() { gchar* message = NULL; gchar* t; gchar* format; if(!createFilm) { setTextInProgress(" "); return FALSE; } format =get_format_image_from_option(); t = g_strdup_printf(_("The %s%sgab%d.%s file was created"), get_last_directory(),G_DIR_SEPARATOR_S,numFileFilm, format); if(!strcmp(formatFilm,"BMP")) message = new_bmp(get_last_directory(), ++numFileFilm); if(!strcmp(formatFilm,"PPM")) message = new_ppm(get_last_directory(), ++numFileFilm); if(!strcmp(formatFilm,"JPEG")) message = new_jpeg(get_last_directory(), ++numFileFilm); if(!strcmp(formatFilm,"PNG")) message = new_png(get_last_directory(), ++numFileFilm); if(!strcmp(formatFilm,"Povray")) message = new_pov(get_last_directory(), ++numFileFilm); if(!strcmp(formatFilm,"PNG transparent")) message = new_png_without_background(get_last_directory(), ++numFileFilm); if(message == NULL) setTextInProgress(t); else { GtkWidget* m; createFilm = FALSE; numFileFilm = 0; m = Message(message,_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (m), TRUE); } g_free(t); return TRUE; } /********************************************************************************/ static void animate_rotation() { gdouble phi = -360.0/nRotation; gint i = 0; reset_parameters(NULL, NULL); numFileFilm = 0; if(GTK_IS_WIDGET(buttonCheckFilm)) gtk_widget_set_sensitive(buttonCheckFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(buttonXAxis)) gtk_widget_set_sensitive(buttonXAxis, FALSE); if(GTK_IS_WIDGET(buttonYAxis)) gtk_widget_set_sensitive(buttonYAxis, FALSE); if(GTK_IS_WIDGET(buttonZAxis)) gtk_widget_set_sensitive(buttonZAxis, FALSE); if(GTK_IS_WIDGET(EntryNRotation)) gtk_widget_set_sensitive(EntryNRotation, FALSE); if(GTK_IS_WIDGET(LabelNRotation)) gtk_widget_set_sensitive(LabelNRotation, FALSE); while(play) { rotationAboutAnAxis(GLArea, phi,selectedAxis); while( gtk_events_pending() ) gtk_main_iteration(); glarea_rafresh(GLArea); createImagesFile(); Waiting(velocity); i++; if(i==nRotation) { i = 0; if(numFileFilm>0) showMessageEnd(); unActivateFilm(); while( gtk_events_pending() ) gtk_main_iteration(); } } if(numFileFilm>0) showMessageEnd(); unActivateFilm(); if(GTK_IS_WIDGET(buttonCheckFilm)) gtk_widget_set_sensitive(buttonCheckFilm, TRUE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(buttonXAxis)) gtk_widget_set_sensitive(buttonXAxis, TRUE); if(GTK_IS_WIDGET(buttonYAxis)) gtk_widget_set_sensitive(buttonYAxis, TRUE); if(GTK_IS_WIDGET(buttonZAxis)) gtk_widget_set_sensitive(buttonZAxis, TRUE); if(GTK_IS_WIDGET(EntryNRotation)) gtk_widget_set_sensitive(EntryNRotation, TRUE); if(GTK_IS_WIDGET(LabelNRotation)) gtk_widget_set_sensitive(LabelNRotation, TRUE); stop_animation(NULL, NULL); } /***********************************************************************/ void animationRotationDlg() { GtkWidget *Win; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *parentWindow = PrincipalWindow; if(WinDlg) return; if(Ncenters <1 ) { Message(_("Sorry, the number of atoms can not <1"),_("Error"),TRUE); return; } Win= gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow)); /* gtk_window_set_default_size (GTK_WINDOW(Win),-1,(gint)(ScreenHeight*0.69));*/ gtk_window_set_title(GTK_WINDOW(Win),_("Rotation animation")); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); WinDlg = Win; add_child(PrincipalWindow,Win,destroyAnimationDlg,"Anim. Rot."); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (Win), vbox); hbox = create_hbox_false(vbox); gtk_widget_realize(Win); addEntrysButtons(vbox); gtk_widget_show_all(vbox); gtk_widget_show_now(Win); fit_windows_position(PrincipalWindow, Win); stop_animation(NULL, NULL); } GabeditSrc250/src/Display/OrbitalsGamess.h0000644000175100017510000000270213130665225020760 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_ORBITALSGAMESS_H__ #define __GABEDIT_ORBITALSGAMESS_H__ void read_gamess_orbitals(gchar* FileName); #endif /* __GABEDIT_ORBITALSGAMESS_H__ */ GabeditSrc250/src/Display/Makefile0000644000175100017510000000222713130664665017341 0ustar allouchealloucheOBJECTS = GeomOrbXYZ.o BondsOrb.o GeomDraw.o TriangleDraw.o UtilsOrb.o Basis.o Grid.o IsoSurface.o ViewOrb.o GLArea.o OrbitalsGamess.o OrbitalsMolpro.o OrbitalsOrca.o OrbitalsQChem.o OrbitalsNWChem.o OrbitalsMopac.o OrbitalsNBO.o Orbitals.o StatusOrb.o AtomicOrbitals.o Images.o GridPlans.o Contours.o ContoursDraw.o PreferencesOrb.o GridCube.o GridAdfOrbitals.o GridAdfDensity.o Textures.o Dipole.o AxisGL.o PrincipalAxisGL.o Vibration.o VibrationDraw.o ColorMap.o GridMolcas.o GridQChem.o AnimationRotation.o AnimationIsoSurface.o AnimationContours.o AnimationPlanesMapped.o AnimationGeomConv.o AnimationMD.o PovrayGL.o ContoursPov.o PlanesMappedDraw.o PlanesMapped.o PlanesMappedPov.o SurfacesPov.o RingsPov.o MenuToolBarGL.o LabelsGL.o RingsOrb.o ExportGL.o CaptureOrbitals.o IntegralOrbitals.o GridCP.o AnimationGrids.o NCI.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) $(OGLCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/Display/AnimationMD.c0000644000175100017510000040633713130665225020210 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "../Common/Global.h" #include "GlobalOrb.h" #include "../Utils/AtomsProp.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Display/StatusOrb.h" #include "../Display/GLArea.h" #include "../Display/AnimationMD.h" #include "../Display/GeomOrbXYZ.h" #include "../Display/AtomicOrbitals.h" #include "../Files/FileChooser.h" #include "../Geometry/GeomGlobal.h" #include "../Files/FolderChooser.h" #include "../Files/GabeditFolderChooser.h" #include "../Common/Help.h" #include "../Common/StockIcons.h" #include "../Display/PovrayGL.h" #include "../Display/Images.h" #include "../Display/UtilsOrb.h" #include "../Display/BondsOrb.h" #include "../Utils/GabeditXYPlot.h" #include "../../pixmaps/Open.xpm" static GtkWidget *WinDlg = NULL; static GtkWidget *EntryVelocity = NULL; static GtkWidget *PlayButton = NULL; static GtkWidget *StopButton = NULL; static GtkTreeView *treeView = NULL; static gboolean play = FALSE; static GtkWidget *buttonCheckFilm = NULL; static GtkWidget *buttonDirFilm = NULL; static GtkWidget* comboListFilm = NULL; static gboolean createFilm = FALSE; static gint numFileFilm = 0; static gchar formatFilm[100] = "BMP"; static gint rowSelected = -1; static gchar* inputGaussDirectory = NULL; static gint spinMultiplicity=1; static gint totalCharge = 0; static GtkWidget* buttonChkgauss = NULL; /********************************************************************************/ static void animate(); static void rafreshList(); static void stopAnimation(GtkWidget *win, gpointer data); static void playAnimation(GtkWidget *win, gpointer data); static gboolean set_geometry(gint k); static GtkWidget* addComboListToATable(GtkWidget* table, gchar** list, gint nlist, gint i, gint j, gint k); void add_cancel_ok_button(GtkWidget *Win,GtkWidget *vbox,GtkWidget *entry, GCallback myFunc); static void print_gaussian_geometries(GtkWidget* Win, gpointer data); /************************************************************************************************************/ static void setComboReference(GtkWidget *comboReference) { GList *glist = NULL; gchar** list = NULL; gint n = 0; if(geometriesMD.numberOfGeometries>0) { gint i; list = g_malloc(geometriesMD.numberOfGeometries*sizeof(gchar*)); n = geometriesMD.numberOfGeometries; if(n>10) { n = 10; gtk_editable_set_editable((GtkEditable*)GTK_BIN (comboReference)->child,TRUE); gtk_widget_set_sensitive(GTK_BIN (comboReference)->child, TRUE); } for(i=0;i0) { gint i; for(i=0;ichild; entryText = gtk_entry_get_text(GTK_ENTRY(entryCombo)); gchar** list = NULL; gint n = 0; if(entryText && strstr(entryText,"All atoms")) gtk_entry_set_text(GTK_ENTRY(entry),""); else if(entryText && strstr(entryText,"Non")) gtk_entry_set_text(GTK_ENTRY(entry),""); else if(entryText && strstr(entryText,"numbers")&&geometriesMD.numberOfGeometries>0) { gint i; gint nAtoms = geometriesMD.geometries[0].numberOfAtoms; list = g_malloc(nAtoms*sizeof(gchar*)); n = nAtoms; for(i=0;i0) { gint i,j; gint nAtoms = geometriesMD.geometries[0].numberOfAtoms; list = g_malloc(nAtoms*sizeof(gchar*)); n = 0; for(i=0;i0) { gint i,j; gint nAtoms = geometriesMD.geometries[0].numberOfAtoms; list = g_malloc(nAtoms*sizeof(gchar*)); n = 0; for(i=0;i0) { gint i,j; gint nAtoms = geometriesMD.geometries[0].numberOfAtoms; list = g_malloc(nAtoms*sizeof(gchar*)); n = 0; for(i=0;i0) { gint i; gint pos; gtk_widget_set_sensitive(entry, TRUE); gtk_entry_set_text(GTK_ENTRY(entry),""); for(i=0;i<(n>10?10:n);i++) gtk_editable_insert_text(GTK_EDITABLE(entry), list[i], -1, &pos); for(i=0;ichild), "EntryRMSDAtomsList", entry); g_object_set_data(G_OBJECT (entry), "ComboRMSDMethod", comboRMSMethod); setEntryRMSDAtomsList(entry); g_object_set_data(G_OBJECT (Wins), "EntryRMSDAtomsList",(entry)); g_object_set_data(G_OBJECT (Wins), "ComboRMSDMethod",GTK_BIN(comboRMSMethod)->child); g_object_set_data(G_OBJECT (Wins), "ComboReference",GTK_BIN(comboReference)->child); } setComboReference(comboReference); setComboRMSDMethod(comboRMSMethod); g_signal_connect(G_OBJECT(GTK_BIN(comboRMSMethod)->child),"changed", G_CALLBACK(changedRMSDMethod),NULL); gtk_widget_show_all(table); entry = GTK_BIN (comboReference)->child; return entry; } /*************************************************************************************************************/ static void build_rmsd(GtkWidget* Win, gpointer data) { gint g; GtkWidget* entryReference = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"ComboReference")); GtkWidget* entryMethod = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"ComboRMSDMethod")); GtkWidget* entryList = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"EntryRMSDAtomsList")); gdouble** C0 = NULL; gint nref; gdouble* X = NULL; gdouble* Y = NULL; gint i; G_CONST_RETURN gchar* str = NULL; GtkWidget* xyplot; GtkWidget* window; gint N = geometriesMD.numberOfGeometries; if(geometriesMD.numberOfGeometries<1) return; if(geometriesMD.geometries[0].numberOfAtoms<1) return; if(entryReference) str = gtk_entry_get_text(GTK_ENTRY(entryReference)); if(!str) return; if(strstr(str,"Aver")) nref = -1; else nref = atof(str)-1; C0 = g_malloc(geometriesMD.geometries[0].numberOfAtoms*sizeof(gdouble*)); for(i=0;i=0) { gint j; for(i=0;i0) d /=k/3.0; Y[g] = d; } } else if(strstr(str,"symbol")) { str = gtk_entry_get_text(GTK_ENTRY(entryList)); for(g = 0;g0) d /=k/3.0; Y[g] = d; } } else if(strstr(str,"number")) { str = gtk_entry_get_text(GTK_ENTRY(entryList)); for(g = 0;g0) d /=k/3.0; Y[g] = d; } } else if(strstr(str,"MM")) { str = gtk_entry_get_text(GTK_ENTRY(entryList)); for(g = 0;g0) d /=k/3.0; Y[g] = d; } } else if(strstr(str,"PDB")) { str = gtk_entry_get_text(GTK_ENTRY(entryList)); for(g = 0;g0) d /=k/3.0; Y[g] = d; } } gtk_widget_destroy(Win); window = gabedit_xyplot_new_window(_("RMSD"),NULL); xyplot = g_object_get_data(G_OBJECT (window), "XYPLOT"); gabedit_xyplot_add_data_conv(GABEDIT_XYPLOT(xyplot),N, X, Y, 1.0, GABEDIT_XYPLOT_CONV_NONE,NULL); gabedit_xyplot_set_range_xmin (GABEDIT_XYPLOT(xyplot), 0.0); gabedit_xyplot_set_x_label (GABEDIT_XYPLOT(xyplot), "Frame"); gabedit_xyplot_set_y_label (GABEDIT_XYPLOT(xyplot), "RMSD (Ang)"); if(C0) for(i=0;ichild; entryText = gtk_entry_get_text(GTK_ENTRY(entry)); gchar** list = NULL; gint n = 0; if(entryText && strstr(entryText,"Number")&&geometriesMD.numberOfGeometries>0) { gint i; gint nAtoms = geometriesMD.geometries[0].numberOfAtoms; list = g_malloc(nAtoms*sizeof(gchar*)); n = nAtoms; for(i=0;i0) { gint i,j; gint nAtoms = geometriesMD.geometries[0].numberOfAtoms; list = g_malloc(nAtoms*sizeof(gchar*)); n = 0; for(i=0;i0) { gint i,j; gint nAtoms = geometriesMD.geometries[0].numberOfAtoms; list = g_malloc(nAtoms*sizeof(gchar*)); n = 0; for(i=0;i0) { gint i,j; gint nAtoms = geometriesMD.geometries[0].numberOfAtoms; list = g_malloc(nAtoms*sizeof(gchar*)); n = 0; for(i=0;i0) { gint i; for(i=0;ichild), "ComboVal1", comboVal1); g_object_set_data(G_OBJECT (GTK_BIN(comboMethod)->child), "ComboVal2", comboVal2); g_object_set_data(G_OBJECT (comboVal1), "ComboMethod", comboMethod); g_object_set_data(G_OBJECT (comboVal2), "ComboMethod", comboMethod); setComboVal(comboVal1); setComboVal(comboVal2); g_object_set_data(G_OBJECT (Wins), "EntryMethod",GTK_BIN(comboMethod)->child); g_object_set_data(G_OBJECT (Wins), "EntryVal1",GTK_BIN(comboVal1)->child); g_object_set_data(G_OBJECT (Wins), "EntryVal2",GTK_BIN(comboVal2)->child); } setComboMethod(comboMethod); g_signal_connect(G_OBJECT(GTK_BIN(comboMethod)->child),"changed", G_CALLBACK(changedMethod),NULL); i = 4; add_label_table(table,_(" dr "),i,0); add_label_table(table,":",i,1); entry = gtk_entry_new (); g_object_set_data(G_OBJECT(Wins), "Entrydr", entry); gtk_table_attach(GTK_TABLE(table),entry,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),"0.1"); gtk_editable_set_editable((GtkEditable*)entry,TRUE); gtk_widget_set_sensitive(entry, TRUE); i = 5; add_label_table(table,_(" max r "),i,0); add_label_table(table,":",i,1); entry = gtk_entry_new (); g_object_set_data(G_OBJECT(Wins), "Entrymaxr", entry); gtk_table_attach(GTK_TABLE(table),entry,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),"10.0"); gtk_editable_set_editable((GtkEditable*)entry,TRUE); gtk_widget_set_sensitive(entry, TRUE); gtk_widget_show_all(table); entry = GTK_BIN (comboMethod)->child; return entry; } /*************************************************************************************************************/ static void build_pair_radial_distribution(GtkWidget* Win, gpointer data) { gint g; GtkWidget* entrydr = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"Entrydr")); GtkWidget* entrymaxr = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"Entrymaxr")); GtkWidget* entryVal1 = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"EntryVal1")); GtkWidget* entryVal2 = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"EntryVal2")); GtkWidget* entryMethod = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"EntryMethod")); gdouble dr,maxr; gint N; gint n1,n2; gdouble* X = NULL; gdouble* Y = NULL; gint i; G_CONST_RETURN gchar* str = NULL; GtkWidget* xyplot; GtkWidget* window; if(geometriesMD.numberOfGeometries<1) return; if(entrydr) str = gtk_entry_get_text(GTK_ENTRY(entrydr)); if(!str) return; dr = atof(str); if(dr<1e-10) return; if(entrymaxr) str = gtk_entry_get_text(GTK_ENTRY(entrymaxr)); if(!str) return; maxr = atof(str); N = maxr/dr+1; if(N<2) return; if(entryMethod) str = gtk_entry_get_text(GTK_ENTRY(entryMethod)); if(!str) return; X = g_malloc(N*sizeof(gdouble)); Y = g_malloc(N*sizeof(gdouble)); for(i=0;i=0 && n2>=0) for(g = 0;gmaxr) continue; Y[(gint)(d/dr)]++; } } else if(strstr(str,"Symbol")) { gchar s1[100]; gchar s2[100]; if(entryVal1) str = gtk_entry_get_text(GTK_ENTRY(entryVal1)); if(!str) return; sprintf(s1,"%s",str); if(entryVal2) str = gtk_entry_get_text(GTK_ENTRY(entryVal2)); if(!str) return; sprintf(s2,"%s",str); for(g = 0;gmaxr) continue; Y[(gint)(d/dr)]++; } } } } else if(strstr(str,"MM Type")) { gchar s1[100]; gchar s2[100]; if(entryVal1) str = gtk_entry_get_text(GTK_ENTRY(entryVal1)); if(!str) return; sprintf(s1,"%s",str); if(entryVal2) str = gtk_entry_get_text(GTK_ENTRY(entryVal2)); if(!str) return; sprintf(s2,"%s",str); for(g = 0;gmaxr) continue; Y[(gint)(d/dr)]++; } } } } else if(strstr(str,"PDB Type")) { gchar s1[100]; gchar s2[100]; if(entryVal1) str = gtk_entry_get_text(GTK_ENTRY(entryVal1)); if(!str) return; sprintf(s1,"%s",str); if(entryVal2) str = gtk_entry_get_text(GTK_ENTRY(entryVal2)); if(!str) return; sprintf(s2,"%s",str); for(g = 0;gmaxr) continue; Y[(gint)(d/dr)]++; } } } } gtk_widget_destroy(Win); window = gabedit_xyplot_new_window(_("Pair radial distribution"),NULL); xyplot = g_object_get_data(G_OBJECT (window), "XYPLOT"); gabedit_xyplot_add_data_conv(GABEDIT_XYPLOT(xyplot),N, X, Y, 1.0, GABEDIT_XYPLOT_CONV_NONE,NULL); gabedit_xyplot_set_range_xmin (GABEDIT_XYPLOT(xyplot), 0.0); gabedit_xyplot_set_x_label (GABEDIT_XYPLOT(xyplot), "r(Ang)"); gabedit_xyplot_set_y_label (GABEDIT_XYPLOT(xyplot), "g(r)"); g_free(X); g_free(Y); } /********************************************************************************************************/ static void create_gr_dlg() { GtkWidget *Win; GtkWidget *frame; GtkWidget *vboxall; GtkWidget* vbox; GtkWidget* entry; /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),"compute pair radial distribution"); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"gr"); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(Win); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(vboxall), frame,TRUE,TRUE,0); gtk_widget_show (frame); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); gtk_widget_realize(Win); entry = add_inputgr_entrys(Win,vbox); add_cancel_ok_button(Win,vbox,entry,(GCallback)build_pair_radial_distribution); /* Show all */ gtk_widget_show_all (Win); } /*************************************************************************************************************/ static gint getNumberOfValenceElectrons(gint g) { gint ne = 0; gint a; for(a=0;achild; g_object_set_data(G_OBJECT (entry), "Combo",combo); gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.2),-1); return entry; } /***********************************************************************************************/ static GtkWidget *addChargeToTable(GtkWidget *table, gint i) { GtkWidget* entryCharge = NULL; GtkWidget* comboCharge = NULL; gint nlistCharge = 1; gchar* listCharge[] = {"0"}; add_label_table(table,_("Charge"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryCharge = addComboListToATable(table, listCharge, nlistCharge, i, 2, 1); comboCharge = g_object_get_data(G_OBJECT (entryCharge), "Combo"); gtk_widget_set_sensitive(entryCharge, FALSE); return comboCharge; } /***********************************************************************************************/ static GtkWidget *addSpinToTable(GtkWidget *table, gint i) { GtkWidget* entrySpinMultiplicity = NULL; GtkWidget* comboSpinMultiplicity = NULL; gint nlistspinMultiplicity = 1; gchar* listspinMultiplicity[] = {"0"}; add_label_table(table,_("Spin multiplicity"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entrySpinMultiplicity = addComboListToATable(table, listspinMultiplicity, nlistspinMultiplicity, i, 2, 1); comboSpinMultiplicity = g_object_get_data(G_OBJECT (entrySpinMultiplicity), "Combo"); gtk_widget_set_sensitive(entrySpinMultiplicity, FALSE); g_signal_connect(G_OBJECT(entrySpinMultiplicity),"changed", G_CALLBACK(changedEntrySpinMultiplicity),NULL); return comboSpinMultiplicity; } /*************************************************************************************************************/ static void print_gaussian_geometries_link(GtkWidget* Win, gpointer data) { gint a; gchar* fileName = NULL; FILE* file; gchar p = '%'; gint g; GtkWidget* entry = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"EntryKeywords")); G_CONST_RETURN gchar* supstr = NULL; if(geometriesMD.numberOfGeometries<1) return; if(entry) supstr = gtk_entry_get_text(GTK_ENTRY(entry)); if(!supstr) return; fileName = g_strdup_printf("%s%sgabmd.com",inputGaussDirectory,G_DIR_SEPARATOR_S); file = fopen(fileName, "w"); if(!file) { gchar* t = g_strdup_printf(_("Sorry\n I can not create %s file"),fileName); Message(t,_("Error"),TRUE); if(fileName) g_free(fileName); if(t)g_free(t); return; } for(g = 0;g=geometriesMD.numberOfGeometries || geometriesMD.numberOfGeometries<1) return; fileName = g_strdup_printf("%s%sgabmd_%d.com",inputGaussDirectory,G_DIR_SEPARATOR_S,g); file = fopen(fileName, "w"); if(!file) { if(fileName) g_free(fileName); return; } if(GTK_IS_WIDGET(buttonChkgauss)&& GTK_TOGGLE_BUTTON (buttonChkgauss)->active) fprintf(file,"%cChk=gabmg_%d\n",p,g); fprintf(file,"# %s\n",supstr); fprintf(file,"# Gfinput IOP(6/7=3) pop=full Test\n"); fprintf(file,"# Units(Ang,Deg)\n"); if(g!=0) fprintf(file,"# Guess=read\n"); fprintf(file,"\n File generated by Gabedit(MD)\n\n"); fprintf(file,"%d %d\n",totalCharge,spinMultiplicity); for(a=0;a= geometriesMD.numberOfGeometries) return; if(entry) supstr = gtk_entry_get_text(GTK_ENTRY(entry)); if(supstr) { gchar* t = g_strdup_printf( _( "In %s directory, the gabmd_%d.com was created.\n" ) , inputGaussDirectory,k); print_gaussian_one_geometry(k,supstr); Message(t,_("Info"),TRUE); if(t)g_free(t); } gtk_widget_destroy(Win); } /*************************************************************************************************************/ static gdouble get_velocity_dot_velocity(gint g1, gint g2, gint a) { gdouble p = 0; gint i; if(g1>=geometriesMD.numberOfGeometries) return 0; if(g2>=geometriesMD.numberOfGeometries) return 0; if(a>=geometriesMD.geometries[g1].numberOfAtoms) return 0; if(a>=geometriesMD.geometries[g2].numberOfAtoms) return 0; for(i=0;i<3;i++) p += geometriesMD.geometries[g1].listOfAtoms[a].V[i]*geometriesMD.geometries[g2].listOfAtoms[a].V[i]; return p; } /*************************************************************************************************************/ static gdouble get_averaged_velocity_dot_velocity(gint g1, gint g2) { gdouble p = 0; gint a; if(g1>=geometriesMD.numberOfGeometries) return 0; if(g2>=geometriesMD.numberOfGeometries) return 0; if(geometriesMD.geometries[g1].numberOfAtoms!=geometriesMD.geometries[g2].numberOfAtoms)return 0; for(a=0;a0) p/=geometriesMD.geometries[g1].numberOfAtoms; return p; } /*************************************************************************************************************/ static gdouble* get_velocity_velocity_correlation_function(gint* N, gdouble*time) { gint g; gint gp; gdouble n = 0.0; gdouble* Cvv = NULL; gint nTau = 3*geometriesMD.numberOfGeometries/4; gint ntmax = geometriesMD.numberOfGeometries-nTau; *N = nTau; if(geometriesMD.numberOfGeometries<2) return NULL; *time = geometriesMD.geometries[1].time; Cvv = g_malloc(*N*sizeof(gdouble)); n = 0; for(g=0;g-1"); g_free(X); g_free(Y); } /********************************************************************************/ static void reset_last_directory(GtkWidget *dirSelector, gpointer data) { gchar* dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); gchar* filename = NULL; if(dirname && strlen(dirname)>0) { if(dirname[strlen(dirname)-1] != G_DIR_SEPARATOR) filename = g_strdup_printf("%s%sdump.txt",dirname,G_DIR_SEPARATOR_S); else filename = g_strdup_printf("%sdump.txt",dirname); } else { dirname = g_strdup(g_get_home_dir()); filename = g_strdup_printf("%s%sdump.txt",dirname,G_DIR_SEPARATOR_S); } if(dirname) g_free(dirname); if(filename) { set_last_directory(filename); g_free(filename); } } /********************************************************************************/ static void set_directory(GtkWidget *win, gpointer data) { GtkWidget *dirSelector; dirSelector = selctionOfDir(reset_last_directory, "Set folder", GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); gtk_window_set_transient_for(GTK_WINDOW(dirSelector),GTK_WINDOW(PrincipalWindow)); gtk_window_set_transient_for(GTK_WINDOW(dirSelector),GTK_WINDOW(WinDlg)); } /********************************************************************************/ void initGeometryMD() { geometriesMD.fileName = NULL; geometriesMD.typeOfFile = GABEDIT_TYPEFILE_UNKNOWN; geometriesMD.numberOfGeometries = 0; geometriesMD.geometries = NULL; geometriesMD.velocity = 0.1; rowSelected = -1; } /********************************************************************************/ void freeGeometryMD() { static gboolean begin = TRUE; if(begin) { begin = FALSE; initGeometryMD(); return; } if(geometriesMD.fileName) g_free(geometriesMD.fileName); if(geometriesMD.geometries) { gint i; GeometryMD* geometries = geometriesMD.geometries; for(i=0;i= geometriesMD.numberOfGeometries) return; if(!geometriesMD.geometries) return; if(geometriesMD.numberOfGeometries==1) { freeGeometryMD(); rafreshList(); return; } if(geometriesMD.geometries) { if(geometriesMD.geometries[k].listOfAtoms) g_free(geometriesMD.geometries[k].listOfAtoms); if(geometriesMD.geometries[k].comments) g_free(geometriesMD.geometries[k].comments); } for(j=k;j=geometriesMD.numberOfGeometries) end = geometriesMD.numberOfGeometries-1; if(end<0) end = geometriesMD.numberOfGeometries-1; if(geometriesMD.numberOfGeometries<1) return; if(end=geometriesMD.numberOfGeometries) break; geometriesMD.geometries[k].energy = geometriesMD.geometries[j].energy; geometriesMD.geometries[k].time = geometriesMD.geometries[j].time; geometriesMD.geometries[k].comments = geometriesMD.geometries[j].comments; geometriesMD.geometries[k].listOfAtoms = geometriesMD.geometries[j].listOfAtoms; } geometriesMD.numberOfGeometries -= end-begin+1; if(geometriesMD.numberOfGeometries>0) geometriesMD.geometries = g_realloc(geometriesMD.geometries,geometriesMD.numberOfGeometries*sizeof(GeometryMD)); else { if(geometriesMD.geometries ) g_free(geometriesMD.geometries ); geometriesMD.numberOfGeometries = 0; } rafreshList(); return; } /********************************************************************************/ static void delete_before_selected_geometry() { gint k = rowSelected; if(k<=0) return; if(!geometriesMD.geometries) return; if(geometriesMD.numberOfGeometries==1) { freeGeometryMD(); rafreshList(); return; } delete_geometries_between(0, k-1); return; } /********************************************************************************/ static void delete_after_selected_geometry() { gint k = rowSelected; if(k<0) return; if(k>=geometriesMD.numberOfGeometries-1) return; if(!geometriesMD.geometries) return; if(geometriesMD.numberOfGeometries==1) { freeGeometryMD(); rafreshList(); return; } delete_geometries_between(k+1, geometriesMD.numberOfGeometries-1); return; } /********************************************************************************/ static void delete_half_geometries() { gint k; gint j; if(!geometriesMD.geometries) return; if(geometriesMD.numberOfGeometries<2) return; for(k=1;k0) geometriesMD.geometries = g_realloc(geometriesMD.geometries,geometriesMD.numberOfGeometries*sizeof(GeometryMD)); else { if(geometriesMD.geometries ) g_free(geometriesMD.geometries ); geometriesMD.numberOfGeometries = 0; } rafreshList(); return; } /*************************************************************************************************************/ static gboolean read_gaussian_file_geomi_str(gchar *FileName, gint num, gchar* str, GeometryMD* geometry) { gchar *t; gboolean OK; gchar *AtomCoord[5]; FILE *file; guint idummy; guint i; gint j=0; gint l; guint numgeom; gchar *pdest; gint result; guint itype=0; AtomMD* listOfAtoms = NULL; file = FOpen(FileName, "rb"); t=g_malloc(BSIZE); for(i=0;i<5;i++) AtomCoord[i]=g_malloc(BSIZE*sizeof(char)); numgeom =1; do { OK=FALSE; while(!feof(file)) { { char* e = fgets(t,BSIZE,file);} pdest = strstr( t,str); result = pdest - t ; if ( result >0 ) { { char* e = fgets(t,BSIZE,file);} { char* e = fgets(t,BSIZE,file);} { char* e = fgets(t,BSIZE,file);} pdest = strstr( t, "Type" ); result = pdest - t ; if(result>0) itype=1; else itype=0; { char* e = fgets(t,BSIZE,file);} numgeom++; OK = TRUE; break; } } if(!OK && (numgeom == 1) ) { fclose(file); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); return FALSE; } if(!OK)break; j=-1; while(!feof(file) ) { { char* e = fgets(t,BSIZE,file);} pdest = strstr( t, "----------------------------------" ); result = pdest - t ; if ( result >0 ) { break; } j++; if(listOfAtoms == NULL) listOfAtoms = g_malloc(sizeof(AtomMD)); else listOfAtoms = g_realloc(listOfAtoms, (j+1)*sizeof(AtomMD)); if(itype==0) sscanf(t,"%d %s %s %s %s",&idummy,AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3]); else sscanf(t,"%d %s %d %s %s %s",&idummy,AtomCoord[0],&idummy,AtomCoord[1],AtomCoord[2],AtomCoord[3]); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); sprintf(listOfAtoms[j].symbol,"%s",symb_atom_get((guint)atoi(AtomCoord[0]))); for(i=0;i<3;i++) listOfAtoms[j].C[i]=atof(ang_to_bohr(AtomCoord[i+1])); listOfAtoms[j].partialCharge = 0.0; listOfAtoms[j].variable = TRUE; listOfAtoms[j].nuclearCharge = get_atomic_number_from_symbol(listOfAtoms[j].symbol); sprintf(listOfAtoms[j].mmType,"%s",listOfAtoms[j].symbol); sprintf(listOfAtoms[j].pdbType,"%s",listOfAtoms[j].symbol); sprintf(listOfAtoms[j].resName,"%s",listOfAtoms[j].symbol); listOfAtoms[j].resNumber = j; } if(num >0 && (gint)numgeom-1 == num) break; }while(!feof(file)); fclose(file); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(j+1 == 0 && listOfAtoms ) { g_free(listOfAtoms); listOfAtoms = NULL; } else { geometry->numberOfAtoms = j+1; geometry->listOfAtoms = listOfAtoms; } return TRUE; } /********************************************************************************/ static gboolean read_gaussian_file_geomi(gchar *FileName, gint num, GeometryMD* geometry) { FILE* file; if ((!FileName) || (strcmp(FileName,"") == 0)) { Message(_("Sorry\n No file selected"),_("Error"),TRUE); return FALSE; } file = FOpen(FileName, "rb"); if(file ==NULL) { Message(_("Sorry\nI can not open this file"),_("Error"),TRUE); return FALSE; } fclose(file); if(read_gaussian_file_geomi_str(FileName,num,"Input orientation:", geometry)) return TRUE; if(read_gaussian_file_geomi_str(FileName,num,"Standard orientation:", geometry)) return TRUE; /* for calculation with nosym option */ if(!read_gaussian_file_geomi_str(FileName,num,"Z-Matrix orientation:", geometry)) { Message(_("Sorry\nI can not read geometry in this file"),_("Error"),TRUE); return FALSE; } return TRUE; } #define MAXNAME 6 #define MAXATOMTYPE 4 #define MAXRESIDUENAME 4 #define MAXSYMBOL 2 /******************************************************************************/ static void save_atom_pdb_file(FILE* file, gchar*name, gint atomNumber, gchar* atomType, gchar* residueName, gint residueNumber, gdouble x, gdouble y, gdouble z, gdouble occupancy, gdouble temperature, gchar* symbol, gdouble charge ) { gchar localName[MAXNAME+1]; gchar localAtomType[MAXATOMTYPE+1]; gchar localResidueName[MAXRESIDUENAME+1]; gchar localSymbol[MAXSYMBOL+1]; localName[MAXNAME] = '\0'; localAtomType[MAXATOMTYPE] = '\0'; localResidueName[MAXRESIDUENAME] = '\0'; localSymbol[MAXSYMBOL] = '\0'; if(strlen(name)>MAXNAME) strncpy(localName, name, MAXNAME); else strcpy(localName, name); uppercase(localName); if(strlen(atomType)>MAXATOMTYPE) { strncpy(localAtomType, atomType, MAXATOMTYPE); } else { if(atomType && isdigit(atomType[0])) strcpy(localAtomType,atomType); else { sprintf(localAtomType," %s",atomType); if(strlen(localAtomType)>=MAXATOMTYPE) { if(isdigit(localAtomType[MAXATOMTYPE])) localAtomType[0] = localAtomType[MAXATOMTYPE]; localAtomType[MAXATOMTYPE] = '\0'; } } } if(strlen(residueName)>=MAXRESIDUENAME) strncpy(localResidueName, residueName, MAXRESIDUENAME); else { sprintf(localResidueName," %s",residueName); if(strlen(localResidueName)>=MAXRESIDUENAME) { if(isdigit(localResidueName[MAXRESIDUENAME])) localResidueName[0] = localResidueName[MAXRESIDUENAME]; localResidueName[MAXRESIDUENAME] = '\0'; } } uppercase(localResidueName); if(strlen(symbol)>MAXSYMBOL) strncpy(localSymbol, symbol, MAXSYMBOL); else strcpy(localSymbol,symbol); localSymbol[0] = toupper(localSymbol[0]); if(strlen(localSymbol)>1) localSymbol[1] = tolower(localSymbol[1]); if(atomNumber>99999) atomNumber = 99999; if(residueNumber>9999) residueNumber = 9999; fprintf(file,"%-6s",localName); /* Atom or HETATM */ fprintf(file,"%-6d",atomNumber); fprintf(file,"%-4s",localAtomType); fprintf(file,"%-4s",localResidueName); fprintf(file," "); fprintf(file,"%-4d",residueNumber); fprintf(file," "); fprintf(file,"%-8.3f",x); fprintf(file,"%-8.3f",y); fprintf(file,"%-8.3f",z); fprintf(file,"%-6.2f",occupancy); fprintf(file,"%-6.2f",temperature); fprintf(file," "); fprintf(file," "); fprintf(file,"%-2s",localSymbol); fprintf(file,"%-9.4f\n",charge); } #undef MAXNAME #undef MAXATOMTYPE #undef MAXRESIDUENAME #undef MAXSYMBOL /********************************************************************************/ static gboolean save_geometry_MD_pdb_format(gchar *FileName) { FILE *file; gint j; gboolean OK = TRUE; gchar* temp = NULL; if(geometriesMD.numberOfGeometries<1) return FALSE; file = FOpen(FileName, "w"); if(file == NULL) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not create '%s' file\n"),FileName); Message(buffer,_("Error"),TRUE); return FALSE; } fprintf(file,"HEADER PROTEIN\n"); fprintf(file,"COMPND UNNAMED\n"); temp = get_time_str(); if(temp) fprintf(file,"AUTHOR GENERATED BY GABEDIT %d.%d.%d at %s",MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION,temp); else fprintf(file,"AUTHOR GENERATED BY GABEDIT %d.%d.%d\n",MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION); for(j=0;j1) { if(geometriesMD.geometries[j].listOfAtoms) g_free(geometriesMD.geometries[j].listOfAtoms); if(geometriesMD.geometries[j].comments) g_free(geometriesMD.geometries[j].comments); geometriesMD.numberOfGeometries--; geometriesMD.geometries = g_realloc(geometriesMD.geometries,geometriesMD.numberOfGeometries*sizeof(GeometryMD)); } else { freeGeometryMD(); t = g_strdup_printf(_(" Error : I can not read step number %d from %s file\n"),j,fileName); Message(t,_("Error"),TRUE); g_free(t); rafreshList(); return FALSE; } } rafreshList(); return TRUE; } /*************************************************************************************************************/ static gboolean read_gamess_trj_first_geometry(gchar *FileName, GeometryMD* geometry) { gchar *t; gchar *pos; FILE *file; gint i; gint nAtoms = 0; AtomMD* listOfAtoms = NULL; file = FOpen(FileName, "rb"); t=g_malloc(BSIZE*sizeof(gchar)); if(!t) return FALSE; while(!feof(file)) { if(!fgets(t,BSIZE,file))break; if(strstr( t,"NAT=")) { pos = strstr( t,"AT=")+3; nAtoms = atoi(pos); break; } } if(nAtoms<1) { fclose(file); g_free(t); return FALSE; } listOfAtoms = g_malloc(nAtoms*sizeof(AtomMD)); while(!feof(file)) { if(!fgets(t,BSIZE,file))break; if(strstr( t,"QM PARTICLE COORDINATES")) { for(i=0;ilistOfAtoms = listOfAtoms; geometry->numberOfAtoms = nAtoms; } break; } } fclose(file); g_free(t); return TRUE; } /*************************************************************************************************************/ static gint get_number_of_geomtries_in_gamess_trj(gchar *fileName) { gchar *t; FILE *file; gint nG = 0; file = FOpen(fileName, "rb"); if(!file) return 0; t = g_malloc(BSIZE*sizeof(gchar)); while(!feof(file)) { if(!fgets(t,BSIZE,file))break; if(strstr( t,"MD DATA PACKET")) nG++; } g_free(t); fclose(file); return nG; } /*************************************************************************************************************/ static void scan_geomtries_position_in_gamess_trj(gchar *fileName) { gchar *t; FILE *file; gint j; long int pos = -1; for(j=0;j1) { if(geometriesMD.geometries[j].listOfAtoms) g_free(geometriesMD.geometries[j].listOfAtoms); if(geometriesMD.geometries[j].comments) g_free(geometriesMD.geometries[j].comments); geometriesMD.numberOfGeometries--; geometriesMD.geometries = g_realloc(geometriesMD.geometries,geometriesMD.numberOfGeometries*sizeof(GeometryMD)); } else { freeGeometryMD(); t = g_strdup_printf(_(" Error : I can not read step number %d from %s file\n"),j,fileName); Message(t,_("Error"),TRUE); g_free(t); rafreshList(); return FALSE; } } rafreshList(); return TRUE; } /********************************************************************************/ static gboolean read_gabedit_MD_file(gchar *fileName) { gchar* t; gchar* tmp; gchar* sdum; gchar* sdum1; gchar* sdum2; gchar* sdum3; gchar* pdest; gdouble cdum1, cdum2, cdum3; gdouble vdum1, vdum2, vdum3; gint idum,idum2; gboolean OK; FILE *file; gint i; gint j; gint k; gint nG = 0; gdouble pc; tmp = get_name_file(fileName); set_status_label_info(_("File name"),tmp); g_free(tmp); set_status_label_info(_("File type"),"Gabedit"); file = FOpen(fileName, "rb"); t = g_malloc(BSIZE*sizeof(gchar)); if(file ==NULL) { sprintf(t,_("Sorry\nI can not open %s file "),fileName); Message(t,_("Error"),TRUE); g_free(t); return FALSE; } sdum = g_malloc(BSIZE*sizeof(gchar)); sdum1 = g_malloc(BSIZE*sizeof(gchar)); sdum2 = g_malloc(BSIZE*sizeof(gchar)); sdum3 = g_malloc(BSIZE*sizeof(gchar)); OK=FALSE; freeGeometryMD(); while(!feof(file)) { if(!fgets(t, BSIZE,file))break; pdest = strstr( t, "[MD]"); if (pdest) { if(!fgets(t, BSIZE,file))break; sscanf(t,"%d",&geometriesMD.numberOfGeometries); /* printf("geometriesMD.numberOfGeometries=%d\n",geometriesMD.numberOfGeometries); */ if(geometriesMD.numberOfGeometries<1) break; geometriesMD.geometries = g_malloc(geometriesMD.numberOfGeometries*sizeof(GeometryMD)); geometriesMD.fileName = g_strdup(fileName); geometriesMD.typeOfFile = GABEDIT_TYPEFILE_GABEDIT; for(j=0;j0) geometriesMD.geometries[j].comments=g_strdup(t); else geometriesMD.geometries[j].comments=NULL; if(geometriesMD.geometries[j].numberOfAtoms>0) { geometriesMD.geometries[j].listOfAtoms = g_malloc(geometriesMD.geometries[j].numberOfAtoms*sizeof(AtomMD)); } for(i=0;i0 && nG= geometriesMD.numberOfGeometries) return FALSE; if(GeomOrb) { free_atomic_orbitals(); for(j=0;jchild), "ComboSpinMultiplicity", comboSpinMultiplicity); setComboCharge(comboCharge); setComboSpinMultiplicity(comboSpinMultiplicity); g_signal_connect(G_OBJECT(GTK_BIN(comboCharge)->child),"changed", G_CALLBACK(changedEntryCharge),NULL); i = 4; add_label_table(table,_(" Keywords "),i,0); add_label_table(table,":",i,1); entry = gtk_entry_new (); g_object_set_data(G_OBJECT(Wins), "EntryKeywords", entry); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,2,2+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),"B3LYP/6-31G* Opt"); gtk_editable_set_editable((GtkEditable*)entry,TRUE); gtk_widget_set_sensitive(entry, TRUE); i = 5; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); i = 6; buttonChkgauss = gtk_check_button_new_with_label (_("check file")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonChkgauss), FALSE); gtk_table_attach(GTK_TABLE(table),buttonChkgauss,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); i = 7; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_widget_show_all(table); return entry; } /********************************************************************************************************/ void add_cancel_ok_button(GtkWidget *Win,GtkWidget *vbox,GtkWidget *entry, GCallback myFunc) { GtkWidget *hbox; GtkWidget *button; /* buttons box */ hbox = create_hbox_false(vbox); gtk_widget_realize(Win); button = create_button(Win,"Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,"OK"); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)myFunc,GTK_OBJECT(Win)); if(entry) g_signal_connect_swapped(G_OBJECT (entry), "activate", (GCallback) gtk_button_clicked, GTK_OBJECT (button)); gtk_widget_show_all(vbox); } /********************************************************************************/ static void create_gaussian_file_dlg(gint type) { GtkWidget *Win; GtkWidget *frame; GtkWidget *vboxall; GtkWidget* vbox; GtkWidget* entryKeywords; /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),"Create a serie of input files for Gaussian"); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Input Gaussian"); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(Win); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(vboxall), frame,TRUE,TRUE,0); gtk_widget_show (frame); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); gtk_widget_realize(Win); entryKeywords = add_inputGauss_entrys(Win,vbox,TRUE); if(type==1) add_cancel_ok_button(Win,vbox,entryKeywords,(GCallback)print_gaussian_geometries_link); else if(type==2) add_cancel_ok_button(Win,vbox,entryKeywords,(GCallback)print_gaussian_geometries); else add_cancel_ok_button(Win,vbox,entryKeywords,(GCallback)print_gaussian_selected_geometry); /* Show all */ gtk_widget_show_all (Win); } /********************************************************************************/ static void playAnimation(GtkWidget *win, gpointer data) { play = TRUE; gtk_widget_set_sensitive(PlayButton, FALSE); gtk_widget_set_sensitive(StopButton, TRUE); gtk_window_set_modal (GTK_WINDOW (WinDlg), TRUE); animate(); } /********************************************************************************/ static void stopAnimation(GtkWidget *win, gpointer data) { play = FALSE; if(GTK_IS_WIDGET(PlayButton)) gtk_widget_set_sensitive(PlayButton, TRUE); if(GTK_IS_WIDGET(StopButton)) gtk_widget_set_sensitive(StopButton, FALSE); if(GTK_IS_WIDGET(WinDlg)) gtk_window_set_modal (GTK_WINDOW (WinDlg), FALSE); while( gtk_events_pending() ) gtk_main_iteration(); buildBondsOrb(); RebuildGeom = TRUE; init_dipole(); init_atomic_orbitals(); free_iso_all(); if(this_is_an_object((GtkObject*)GLArea)) glarea_rafresh(GLArea); } /********************************************************************************/ static void destroyDlg(GtkWidget *win) { createFilm = FALSE; numFileFilm = 0; delete_child(WinDlg); freeGeometryMD(); } /********************************************************************************/ static void destroyAnimGeomConvDlg(GtkWidget *win) { createFilm = FALSE; numFileFilm = 0; stopAnimation(NULL, NULL); gtk_widget_destroy(WinDlg); WinDlg = NULL; rowSelected = -1; freeGeometryMD(); } /**********************************************************************************/ static void set_sensitive_option(GtkUIManager *manager, gchar* path) { GtkWidget *wid = gtk_ui_manager_get_widget (manager, path); gboolean sensitive = TRUE; if(geometriesMD.numberOfGeometries<1) sensitive = FALSE; if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid, sensitive); } /**********************************************************************************/ static gboolean show_menu_popup(GtkUIManager *manager, guint button, guint32 time) { GtkWidget *menu = gtk_ui_manager_get_widget (manager, "/MenuGeomMD"); if (GTK_IS_MENU (menu)) { set_sensitive_option(manager,"/MenuGeomMD/SaveGabedit"); set_sensitive_option(manager,"/MenuGeomMD/SavePDB"); set_sensitive_option(manager,"/MenuGeomMD/SaveVelocityAutocorrelation"); set_sensitive_option(manager,"/MenuGeomMD/DisplayVelocityAutocorrelation"); set_sensitive_option(manager,"/MenuGeomMD/CreateGaussInput"); set_sensitive_option(manager,"/MenuGeomMD/CreateGaussInputLink"); set_sensitive_option(manager,"/MenuGeomMD/CreateGaussInputSelected"); set_sensitive_option(manager,"/MenuGeomMD/CreateGr"); set_sensitive_option(manager,"/MenuGeomMD/ComputeRMSD"); set_sensitive_option(manager,"/MenuGeomMD/DeleteGeometry"); set_sensitive_option(manager,"/MenuGeomMD/DeleteHalfGeometries"); set_sensitive_option(manager,"/MenuGeomMD/DeleteBeforeSelectedGeometry"); set_sensitive_option(manager,"/MenuGeomMD/DeleteAfterSelectedGeometry"); gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, time); return TRUE; } else printf("Erreur menu n'est pas un menu\n"); return FALSE; } /**********************************************************************************/ static void event_dispatcher(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; gint row = -1; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); row = atoi(gtk_tree_path_to_string(path)); gtk_tree_path_free(path); } } rowSelected = row; if(!play) stopAnimation(NULL, NULL); if(row>=0) set_geometry(rowSelected); if (event->type == GDK_BUTTON_PRESS && ((GdkEventButton *) event)->button == 3) { GdkEventButton *bevent = (GdkEventButton *) event; GtkUIManager *manager = GTK_UI_MANAGER(user_data); show_menu_popup(manager, bevent->button, bevent->time); } } /**********************************************************************************/ static void rafreshList() { gint i; gint k; GtkTreeIter iter; GtkTreeModel *model = NULL; GtkTreeStore *store = NULL; gchar *texts[3]; gboolean visible[3] = { TRUE, TRUE, TRUE}; gchar* titles[]={"Energy(Hartree)","Time(fs)","Comments"}; GtkCellRenderer *renderer; GtkTreeViewColumn *column; model = gtk_tree_view_get_model(treeView); store = GTK_TREE_STORE (model); gtk_tree_store_clear(store); model = GTK_TREE_MODEL (store); if(geometriesMD.numberOfGeometries>0) { for(i=0;i0) { GtkTreePath *path; rowSelected = 0; path = gtk_tree_path_new_from_string ("0"); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeView)), path); gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW (treeView), path, NULL, FALSE,0.5,0.5); gtk_tree_path_free(path); set_geometry(rowSelected); } reset_parameters(NULL,NULL); } /*****************************************************************************/ static gchar* get_format_image_from_option() { if(strcmp(formatFilm,"BMP")==0) return "bmp"; if(strcmp(formatFilm,"PPM")==0) return "ppm"; if(strcmp(formatFilm,"PNG")==0) return "png"; if(strcmp(formatFilm,"JPEG")==0) return "jpg"; if(strcmp(formatFilm,"PNG transparent")==0) return "png"; if(strcmp(formatFilm,"Povray")==0) return "pov"; return "UNK"; } /********************************************************************************/ static void filmSelected(GtkWidget *widget) { if(GTK_IS_WIDGET(buttonCheckFilm)&& GTK_TOGGLE_BUTTON (buttonCheckFilm)->active) { createFilm = TRUE; if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, TRUE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, TRUE); } else { createFilm = FALSE; if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); } } /********************************************************************************/ static void showMessageEnd() { gchar* format =get_format_image_from_option(); gchar* message = messageAnimatedImage(format); gchar* t = g_strdup_printf(_("\nA series of gab*.%s files was created in \"%s\" directeory.\n\n\n%s") , format, get_last_directory(),message); GtkWidget* winDlg = Message(t,_("Info"),TRUE); g_free(message); gtk_window_set_modal (GTK_WINDOW (winDlg), TRUE); g_free(t); } /********************************************************************************/ static void unActivateFilm() { createFilm = FALSE; numFileFilm = 0; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCheckFilm), FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); } /********************************************************************************************************/ static void set_format_film(GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } if(!data) return; sprintf(formatFilm ,"%s",(gchar*)data); } /********************************************************************************************************/ static GtkWidget *create_list_of_formats() { GtkTreeIter iter; GtkListStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; gint i; gint k; gchar* options[] = {"BMP","PPM", "JPEG", "PNG", "PNG transparent", "Povray"}; guint numberOfElements = G_N_ELEMENTS (options); k = 0; store = gtk_list_store_new (1,G_TYPE_STRING); for(i=0;i=geometriesMD.numberOfGeometries) { m--; step = -1; continue; } if(m<0) { m++; step = +1; continue; } if(m==0 && step<0) { if(numFileFilm>0) showMessageEnd(); unActivateFilm(); } rowSelected = m; t = g_strdup_printf("%d",m); path = gtk_tree_path_new_from_string (t); g_free(t); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeView)), path); gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW (treeView), path, NULL, FALSE,0.5,0.5); gtk_tree_path_free(path); set_geometry(rowSelected); createImagesFile(); Waiting(geometriesMD.velocity); } if(numFileFilm>0) showMessageEnd(); unActivateFilm(); if(GTK_IS_WIDGET(buttonCheckFilm)) gtk_widget_set_sensitive(buttonCheckFilm, TRUE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(treeView))gtk_widget_set_sensitive(GTK_WIDGET(treeView), TRUE); if(GTK_IS_WIDGET(WinDlg)) { GtkWidget* handelbox = g_object_get_data(G_OBJECT (WinDlg), "HandelBox"); if(GTK_IS_WIDGET(handelbox)) gtk_widget_set_sensitive(handelbox, TRUE); } stopAnimation(NULL, NULL); } /********************************************************************************************/ static void help_supported_format() { gchar temp[BSIZE]; GtkWidget* win; sprintf(temp, _( " You can read more geometries from :\n" " * a Gabedit input file.\n" " * a Gamess/FireFly TRJ file.\n" " * a Gaussian output file.\n" ) ); win = Message(temp,_("Info"),FALSE); gtk_window_set_modal (GTK_WINDOW (win), TRUE); } /***************************************************************************/ static void help_animated_file() { GtkWidget* win; gchar* temp = NULL; temp = g_strdup( _( " For create an animated file :\n" " ============================\n" " 1) Read geometries from a Gaussian, Gamess TRJ, FireFly TRJ or from Gabedit file.\n" " 2) Select \"create a series of BMP (or PPM or POV) images\" button.\n" " You can select your favorite directory by clicking to \"Directory\" button.\n" " 3) Click to Play button.\n" " 4) After on cycle Gabedit create a series of BMP(gab*.bmp) or PPM (gab*.ppm) or POV(gab*.pov) files.\n" " From these files, you can create a gif or a png animated file using convert software.\n" " with \"convert -delay 10 -loop 1000 gab*.bmp imageAnim.gif\" command you can create a gif animated file.\n" " with \"convert -delay 10 -loop 1000 gab*.bmp imageAnim.mng\" command you can create a png animated file.\n\n" " For gab*.pov files :\n" " You must initially create files gab*.bmp using gab*.pov files.\n" " Then you can create the animated file using gab*.bmp file.\n\n" " You can use the xPovAnim script (from utils/povray directory) for create the gif animated file from gab*.pov files.\n\n" " convert is a free software. You can download this(for any system) from http://www.imagemagick.org\n" " povray is a free software. You can download this(for any system) from http://www.povray.org\n\n" ) ); win = Message(temp,_("Info"),FALSE); gtk_window_set_modal (GTK_WINDOW (win), TRUE); g_free(temp); } /*********************************************************************************************************************/ static void activate_action (GtkAction *action) { const gchar *name = gtk_action_get_name (action); /* const gchar *typename = G_OBJECT_TYPE_NAME (action);*/ if(!strcmp(name, "File")) { GtkUIManager *manager = g_object_get_data(G_OBJECT(action), "Manager"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/SaveGabedit"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/SavePDB"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/SaveVelocityAutocorrelation"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/DisplayVelocityAutocorrelation"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/CreateGaussInput"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/CreateGaussInputLink"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/CreateGaussInputSelected"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/CreateGr"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/ComputeRMSD"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/DeleteGeometry"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/DeleteHalfGeometries"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/DeleteBeforeSelectedGeometry"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/DeleteAfterSelectedGeometry"); } else if(!strcmp(name, "ReadAuto")) read_file_dlg(); else if(!strcmp(name, "ReadGabedit")) read_gabedit_file_dlg(); else if(!strcmp(name, "ReadGaussian")) read_gaussian_file_dlg(); else if(!strcmp(name, "ReadGamess")) read_gamess_trj_file_dlg(); else if(!strcmp(name, "SaveGabedit")) save_gabedit_file_dlg(); else if(!strcmp(name, "SavePDB")) save_pdb_file_dlg(); else if(!strcmp(name, "SaveVelocityAutocorrelation")) save_velocity_autocorrelation_dlg(); else if(!strcmp(name, "DisplayVelocityAutocorrelation")) display_velocity_velocity_correlation_function(); else if(!strcmp(name, "CreateGaussInput")) create_gaussian_file_dlg(2); else if(!strcmp(name, "CreateGaussInputLink")) create_gaussian_file_dlg(1); else if(!strcmp(name, "CreateGaussInputSelected")) create_gaussian_file_dlg(3); else if(!strcmp(name, "CreateGr")) create_gr_dlg(); else if(!strcmp(name, "ComputeRMSD")) create_rmsd_dlg(); else if(!strcmp(name, "DeleteGeometry")) delete_one_geometry(); else if(!strcmp(name, "DeleteHalfGeometries")) delete_half_geometries(); else if(!strcmp(name, "DeleteBeforeSelectedGeometry")) delete_before_selected_geometry(); else if(!strcmp(name, "DeleteAfterSelectedGeometry")) delete_after_selected_geometry(); else if(!strcmp(name, "Close")) destroyDlg(NULL); else if(!strcmp(name, "HelpSupportedFormat")) help_supported_format(); else if(!strcmp(name, "HelpAnimation")) help_animated_file(); } /*--------------------------------------------------------------------*/ static GtkActionEntry gtkActionEntries[] = { {"File", NULL, N_("_File"), NULL, NULL, G_CALLBACK (activate_action)}, {"Read", NULL, N_("_Read")}, {"ReadAuto", NULL, N_("Read a file(Auto)"), NULL, "Read a file", G_CALLBACK (activate_action) }, {"ReadGabedit", GABEDIT_STOCK_GABEDIT, N_("Read a G_abedit file"), NULL, "Read a Gabedit file", G_CALLBACK (activate_action) }, {"ReadGaussian", GABEDIT_STOCK_GAUSSIAN, N_("Read a _Gaussian output file"), NULL, "Read a Gaussian output file", G_CALLBACK (activate_action) }, {"ReadGamess", GABEDIT_STOCK_GAMESS, N_("Read a Games_s trj file"), NULL, "Read a Gamess trj file", G_CALLBACK (activate_action) }, {"SaveGabedit", GABEDIT_STOCK_SAVE, N_("_Save"), NULL, "Save", G_CALLBACK (activate_action) }, {"SavePDB", GABEDIT_STOCK_PDB, N_("_Save as pdb file "), NULL, "Save as pdb", G_CALLBACK (activate_action) }, {"SaveVelocityAutocorrelation", GABEDIT_STOCK_SAVE, N_("_Save velocity-velocity autocorrelation function"), NULL, "Save velocity-velocity autocorrelation function", G_CALLBACK (activate_action) }, {"DisplayVelocityAutocorrelation", NULL, N_("_Display velocity-velocity autocorrelation function"), NULL, "Display velocity-velocity autocorrelation function", G_CALLBACK (activate_action) }, {"CreateGaussInputSelected", GABEDIT_STOCK_GAUSSIAN, N_("_Create a gaussian input file for the selected geometry"), NULL, "Save", G_CALLBACK (activate_action) }, {"CreateGaussInput", GABEDIT_STOCK_GAUSSIAN, N_("_Create a serie of single input file for Gaussian"), NULL, "Save", G_CALLBACK (activate_action) }, {"CreateGaussInputLink", GABEDIT_STOCK_GAUSSIAN, N_("Create _single input file for Gaussian with more geometries"), NULL, "Save", G_CALLBACK (activate_action) }, {"CreateGr", GABEDIT_STOCK_GAUSSIAN, N_("Compute pair _radial distribution"), NULL, "Gr", G_CALLBACK (activate_action) }, {"ComputeRMSD", GABEDIT_STOCK_GAUSSIAN, N_("_Compute RMSD"), NULL, "RMSD", G_CALLBACK (activate_action) }, {"DeleteGeometry", GABEDIT_STOCK_CUT, N_("_Delete selected geometry"), NULL, "Delete selected geometry", G_CALLBACK (activate_action) }, {"DeleteHalfGeometries", GABEDIT_STOCK_CUT, N_("Remove the _half of the geometries"), NULL, "remove the half of the geometries", G_CALLBACK (activate_action) }, {"DeleteBeforeSelectedGeometry", GABEDIT_STOCK_CUT, N_("Remove geometries before the selected geometry"), NULL, "remove before", G_CALLBACK (activate_action) }, {"DeleteAfterSelectedGeometry", GABEDIT_STOCK_CUT, N_("Remove geometries after the selected geometry"), NULL, "remove before", G_CALLBACK (activate_action) }, {"Close", GABEDIT_STOCK_CLOSE, N_("_Close"), NULL, "Close", G_CALLBACK (activate_action) }, {"Help", NULL, N_("_Help")}, {"HelpSupportedFormat", NULL, N_("_Supported format..."), NULL, "Supported format...", G_CALLBACK (activate_action) }, {"HelpAnimation", NULL, N_("Creation of an _animated file..."), NULL, "Creation of an animated file...", G_CALLBACK (activate_action) }, }; static guint numberOfGtkActionEntries = G_N_ELEMENTS (gtkActionEntries); /********************************************************************************/ /* XML description of the menus for the test app. The parser understands * a subset of the Bonobo UI XML format, and uses GMarkup for parsing */ static const gchar *uiMenuInfo = " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*******************************************************************************************************************************/ static void add_widget (GtkUIManager *manager, GtkWidget *widget, GtkContainer *container) { GtkWidget *handlebox; handlebox =gtk_handle_box_new (); g_object_ref (handlebox); gtk_handle_box_set_handle_position (GTK_HANDLE_BOX(handlebox),GTK_POS_LEFT); /* GTK_SHADOW_NONE, GTK_SHADOW_IN, GTK_SHADOW_OUT, GTK_SHADOW_ETCHED_IN, GTK_SHADOW_ETCHED_OUT */ gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(handlebox),GTK_SHADOW_OUT); gtk_box_pack_start (GTK_BOX (container), handlebox, TRUE, TRUE, 0); gtk_widget_show (widget); gtk_container_add (GTK_CONTAINER (handlebox), widget); gtk_widget_show (handlebox); } /*******************************************************************************************************************************/ static GtkUIManager *create_menu(GtkWidget* box) { GtkActionGroup *actionGroup = NULL; GtkUIManager *manager = NULL; GError *error = NULL; manager = gtk_ui_manager_new (); g_signal_connect_swapped (PrincipalWindow, "destroy", G_CALLBACK (g_object_unref), manager); actionGroup = gtk_action_group_new ("GabeditAnimationGeomConvActions"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntries, numberOfGtkActionEntries, NULL); gtk_ui_manager_insert_action_group (manager, actionGroup, 0); g_signal_connect (manager, "add_widget", G_CALLBACK (add_widget), box); gtk_window_add_accel_group (GTK_WINDOW (PrincipalWindow), gtk_ui_manager_get_accel_group (manager)); if (!gtk_ui_manager_add_ui_from_string (manager, uiMenuInfo, -1, &error)) { g_message (_("building menus failed: %s"), error->message); g_error_free (error); } if(GTK_IS_UI_MANAGER(manager)) { GtkAction *action = NULL; action = gtk_ui_manager_get_action(manager, "/MenuBar/File"); if(G_IS_OBJECT(action)) g_object_set_data(G_OBJECT(action), "Manager", manager); } return manager; } /********************************************************************************/ void geometriesMDDlg() { GtkWidget *Win; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *parentWindow = PrincipalWindow; GtkUIManager *manager = NULL; if(WinDlg) return; initGeometryMD(); Win= gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow)); gtk_window_set_default_size (GTK_WINDOW(Win),-1,(gint)(ScreenHeight*0.69)); gtk_window_set_title(GTK_WINDOW(Win),"Molecular dynamic trajectory"); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); WinDlg = Win; add_child(PrincipalWindow,Win,destroyAnimGeomConvDlg,"M.D."); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (Win), vbox); hbox = create_hbox_false(vbox); manager = create_menu(hbox); hbox = create_hbox_false(vbox); gtk_widget_realize(Win); treeView = addList(hbox, manager); addEntrysButtons(vbox); gtk_widget_show_all(vbox); gtk_widget_show_now(Win); fit_windows_position(PrincipalWindow, Win); rafreshList(); stopAnimation(NULL, NULL); } GabeditSrc250/src/Display/GridMolcas.c0000644000175100017510000006446613130665225020077 0ustar alloucheallouche/* GridMolcas.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "GlobalOrb.h" #include "StatusOrb.h" #include "UtilsOrb.h" #include "GeomOrbXYZ.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "GLArea.h" #include "AtomicOrbitals.h" #include "Orbitals.h" #include "BondsOrb.h" typedef struct _DataRow { gint numGrid; gint totalNumberOfGrids; }DataRow; static gint numberOfOrbitals = 0; static gint totalNumberOfGrids = 0; static gchar** labelsSymmetry = NULL; static gdouble* occupations = NULL; static gdouble* energies = NULL; static gint* numGridOfOrbitals = NULL; static gint selectedRow = -1; static gint N[3]; static gdouble XYZ0[3]={0.0,0.0,0.0}; static gdouble X[3]={0.0,0.0,0.0}; static gdouble Y[3]={0.0,0.0,0.0}; static gdouble Z[3]={0.0,0.0,0.0}; static gchar molcasgridFileName[2048]; static gdouble version = 0.0; /**************************************************************/ static void free_molcasgrid_orb() { gint i; if(numberOfOrbitals<1) return; if(labelsSymmetry) { for(i=0;i=nMaxBlock)break; } else advance_one_block(file); nG++; if(nG>totalNumberOfGrids) nG-=totalNumberOfGrids; } if(k==nMaxBlock) return TRUE; return FALSE; } /********************************************************************************/ static gboolean set_position_label(FILE* file,gchar* label,gchar* buffer, gint len) { while(!feof(file)) { if(!fgets(buffer,len,file)) return FALSE; if(strstr(buffer,label)) return TRUE; } return FALSE; } /********************************************************************************/ static void get_grid_from_molcasgrid_file(FILE* file,gint numOfGrid) { gint i; gint j; gint k; gdouble x; gdouble y; gdouble z; gdouble v; gboolean beg = TRUE; gdouble scal; gdouble* V; gint n; gint nMaxBlock = 0; gint len = BSIZE; gchar buffer[BSIZE]; progress_orb(0,GABEDIT_PROGORB_READGRID,TRUE); scal = (gdouble)101/grid->N[0]; nMaxBlock = N[0]*N[1]*N[2]; V = g_malloc((nMaxBlock+6)*sizeof(gdouble)); if(!set_position_label(file,"Title", buffer, len)) { Message(_("Sorry, I can not read grid from this file"),_("Error"),TRUE); grid = free_grid(grid); return; } if(!get_values_from_molcasgrid_file(file,V, nMaxBlock, numOfGrid)) { Message(_("Sorry, I can not read grid from this file"),_("Error"),TRUE); grid = free_grid(grid); return; } n = -1; /* Grid Molcas 7 */ if(fabs(version)>1e-8) for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { x = XYZ0[0] + i*X[0] + j*X[1] + k*X[2]; y = XYZ0[1] + i*Y[0] + j*Y[1] + k*Y[2]; z = XYZ0[2] + i*Z[0] + j*Z[1] + k*Z[2]; n++; v = V[n]; grid->point[i][j][k].C[0] = x; grid->point[i][j][k].C[1] = y; grid->point[i][j][k].C[2] = z; grid->point[i][j][k].C[3] = v; if(beg) { beg = FALSE; grid->limits.MinMax[0][3] = v; grid->limits.MinMax[1][3] = v; } else { if(grid->limits.MinMax[0][3]>v) grid->limits.MinMax[0][3] = v; if(grid->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_READGRID,TRUE); break; } progress_orb(scal,GABEDIT_PROGORB_READGRID,FALSE); } /* M2Msi Molcas 6 */ else for(k=0;kN[2];k++) { for(j=0;jN[1];j++) { for(i=0;iN[0];i++) { x = XYZ0[0] + i*X[0] + j*X[1] + k*X[2]; y = XYZ0[1] + i*Y[0] + j*Y[1] + k*Y[2]; z = XYZ0[2] + i*Z[0] + j*Z[1] + k*Z[2]; n++; v = V[n]; grid->point[i][j][k].C[0] = x; grid->point[i][j][k].C[1] = y; grid->point[i][j][k].C[2] = z; grid->point[i][j][k].C[3] = v; if(beg) { beg = FALSE; grid->limits.MinMax[0][3] = v; grid->limits.MinMax[1][3] = v; } else { if(grid->limits.MinMax[0][3]>v) grid->limits.MinMax[0][3] = v; if(grid->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_READGRID,TRUE); break; } progress_orb(scal,GABEDIT_PROGORB_READGRID,FALSE); } if(CancelCalcul) { grid = free_grid(grid); } g_free(V); progress_orb(0,GABEDIT_PROGORB_READGRID,TRUE); return; } /********************************************************************************/ static void read_density(gint numOfGrid) { FILE* file = FOpen(molcasgridFileName, "rb"); gchar buffer[BSIZE]; if(!file) { sprintf(buffer,_("Sorry, i can not open \"%s\" file"),molcasgridFileName); grid = free_grid(grid); Message(buffer,_("Error"),TRUE); return; } get_grid_from_molcasgrid_file(file,numOfGrid); if(grid) { limits = grid->limits; create_iso_orbitals(); set_status_label_info(_("Grid"),_("Ok")); } else { set_status_label_info(_("Grid"),_("Nothing")); CancelCalcul = FALSE; } fclose(file); } /********************************************************************************/ static gint get_num_density(FILE* file, gchar* buffer, gint len) { gint numOfGrid = 0; while(!feof(file)) { if(!fgets(buffer,len,file)) return 0; if(strstr(buffer,"GridName=")) { numOfGrid++; if(strstr(buffer,"Density")) return numOfGrid; } } return 0; } /********************************************************************************/ static void read_orbital(GtkWidget *Win,gpointer user_data) { DataRow* data = NULL; GtkWidget* gtklist = GTK_WIDGET(user_data); gchar buffer[BSIZE]; FILE* file = FOpen(molcasgridFileName, "rb"); GtkTreeIter node; GtkTreeModel *model = NULL; gchar pathString[100]; if(!file) { sprintf(buffer,_("Sorry, I can not open \"%s\" file"),molcasgridFileName); grid = free_grid(grid); Message(buffer,_("Error"),TRUE); return; } if(selectedRow<0) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtklist)); sprintf(pathString,"%d",selectedRow); if(!gtk_tree_model_get_iter_from_string (model, &node, pathString)) return; gtk_tree_model_get (model, &node, 4, &data, -1); if(!data) return; get_grid_from_molcasgrid_file(file,data->numGrid); if(grid) { limits = grid->limits; create_iso_orbitals(); set_status_label_info(_("Grid"),_("Ok")); } else { set_status_label_info(_("Grid"),_("Nothing")); CancelCalcul = FALSE; } fclose(file); } /*************************************************************************************************/ static void eventDispatcher(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; GtkTreeIter iter; GtkTreeModel *model; if (!event) return; if (((GdkEventButton *) event)->button != 1) return; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); selectedRow = atoi(gtk_tree_path_to_string(path)); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free(path); if ((GdkEventButton *) event && ((GdkEventButton *) event)->type==GDK_2BUTTON_PRESS) { GtkWidget* button = g_object_get_data(G_OBJECT (widget), "ButtonOk"); gtk_button_clicked (GTK_BUTTON (button)); } } else selectedRow = -1; } GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event); } /********************************************************************************/ static GtkWidget* create_gtk_list_orbitals() { gint i; gint j; GtkWidget* gtklist = NULL; gint *Width = NULL; gint NlistTitle = 4; gchar* Titles[] = {"Nr","Energy","Occ.","Sym."}; gchar* List[4]; GtkListStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeSelection *select; GtkTreeIter iter; GType* types = NULL; types = g_malloc((NlistTitle+1)*sizeof(GType)); for (i=0;inumGrid = numGridOfOrbitals[i]; data->totalNumberOfGrids = totalNumberOfGrids; gtk_list_store_append(store, &iter); for(j=0;j<4;j++) gtk_list_store_set (store, &iter, j, List[j], -1); gtk_list_store_set (store, &iter, 4, data, -1); for(j=0;j<4;j++) g_free(List[j]); } g_signal_connect(gtklist, "button_press_event", G_CALLBACK(eventDispatcher), NULL); return gtklist; } /********************************************************************************/ static void create_list_molcasgrid_orbitals() { GtkWidget *Win; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *button; GtkWidget *gtklist; GtkWidget *scr; if(numberOfOrbitals<1) { Message(_("Sorry, Please load a file before\n"),_("Error"),TRUE); return; } selectedRow=0; /* printf("Norb = %d\n",numberOfOrbitals);*/ /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),"Orbitals"); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_widget_set_size_request (GTK_WIDGET(Win), 3*ScreenWidth/10,(gint)(ScreenHeight*0.69)); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Orbitals List "); vboxall = create_vbox(Win); frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_add(GTK_CONTAINER(vboxall),frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); gtklist = create_gtk_list_orbitals(); scr=gtk_scrolled_window_new(NULL,NULL); gtk_box_pack_start(GTK_BOX (vboxframe), scr,TRUE, TRUE, 2); gtk_container_add(GTK_CONTAINER(scr),gtklist); set_base_style(gtklist,50000,50000,50000); gtk_widget_show_all (vboxall); /* buttons box */ hbox = create_hbox_false(vboxall); gtk_widget_realize(Win); button = create_button(Win,"Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,"OK"); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)read_orbital,gtklist); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Win)); g_object_set_data(G_OBJECT (gtklist), "ButtonOk",button); gtk_widget_show_now(Win); fit_windows_position(PrincipalWindow, Win); gtk_widget_show_all (Win); } /******************************************************************************/ static gint read_one_integer(FILE* file, gchar* label, gchar* buffer, gint len) { while(!feof(file)) { if(!fgets(buffer,len,file)) return -1; if(strstr(buffer,label)) { gchar* pos = strstr(buffer,"=")+1; gint n = -1; if( pos && 1 == sscanf(pos,"%d",&n)) return n; else return -1; } } return 0; } /**************************************************************/ static gboolean read_info_orbitals(FILE* file) { gint len = BSIZE; gchar buffer[BSIZE]; gint i; gint iGrid = 0; fseek(file, 0L, SEEK_SET); numberOfOrbitals = read_one_integer(file,"N_of_MO=",buffer,len); if(numberOfOrbitals<1) return FALSE; occupations = g_malloc(numberOfOrbitals*sizeof(gdouble)); energies = g_malloc(numberOfOrbitals*sizeof(gdouble)); numGridOfOrbitals = g_malloc(numberOfOrbitals*sizeof(gint)); labelsSymmetry = g_malloc(numberOfOrbitals*sizeof(gchar*)); fseek(file, 0L, SEEK_SET); totalNumberOfGrids = read_one_integer(file,"N_of_Grids=",buffer,len); if(totalNumberOfGrids<1) return FALSE; for(i=0;itotalNumberOfGrids)break; if( pos && 3 == sscanf(pos,"%s %lf %lf",st, &nt, &et)) { i++; labelsSymmetry[i] = g_strdup(st); energies[i] = et; numGridOfOrbitals[i] = iGrid; pos = strstr(buffer,"(")+1; if(pos) sscanf(pos,"%lf",&occupations[i]); /* this is a orbitals */ } if(iGrid>=totalNumberOfGrids)break; } } { for(i=0;i1) buffer1[1] = tolower(buffer1[1]); if(strlen(buffer1)>2) buffer1[2] = tolower(buffer1[2]); GeomOrb[i].Symb = g_strdup(buffer1); GeomOrb[i].Prop = prop_atom_get(GeomOrb[i].Symb); GeomOrb[i].partialCharge = 0.0; GeomOrb[i].variable = TRUE; GeomOrb[i].nuclearCharge = get_atomic_number_from_symbol(GeomOrb[i].Symb); } } return Ok; } /**************************************************************/ static void read_molcasgrid_orbitals_file(gchar* filename) { FILE* file = FOpen(filename, "rb"); gchar* tmp; gchar buffer[BSIZE]; gboolean Ok = TRUE; CancelCalcul = FALSE; if(!file) { sprintf(buffer,_("I can not open %s file"),filename); Message(buffer,_("Error"),TRUE); return ; } free_data_all(); tmp = get_name_file(filename); set_status_label_info(_("File name"),tmp); g_free(tmp); set_status_label_info(_("File type"),_("Molcas grid formatted file")); Ncenters = 0; Ok = read_molcasgrid_geometry(file); if(Ok) { init_atomic_orbitals(); Ok = read_info_orbitals(file); if(Ok) { fseek(file, 0L, SEEK_SET); Ok = read_molcasgrid_grid_limits(file, N, XYZ0, X, Y, Z,&version); if(!Ok) { free_data_all(); Message(_("Sorry, I can not grid information from thi file\n"),_("Error"),TRUE); } } else { free_data_all(); Message(_("Sorry, No grid available in this file\n"),_("Error"),TRUE); Ok = FALSE; } } buildBondsOrb(); RebuildGeom = TRUE; glarea_rafresh(GLArea); if(Ok) init_atomic_orbitals(); if(Ncenters>0) set_status_label_info(_("Geometry"),_("Ok")); /*printf("N = %d %d %d\n",N[0],N[1],N[2]);*/ if(Ok) set_status_label_info(_("Grid"),_("Ok")); else set_status_label_info(_("Grid"),_("Nothing")); CancelCalcul = FALSE; fclose(file); } /**************************************************************/ static void read_molcasgrid_density_file(gchar* filename) { FILE* file = FOpen(filename, "rb"); gchar* tmp; gint len = BSIZE; gchar buffer[BSIZE]; gboolean Ok = TRUE; gint nMO = 0; gint numGridDensity = 0; CancelCalcul = FALSE; if(!file) { sprintf(buffer,_("I can not open %s file"),filename); Message(buffer,_("Error"),TRUE); return ; } free_data_all(); tmp = get_name_file(filename); set_status_label_info(_("File name"),tmp); g_free(tmp); set_status_label_info(_("File type"),_("Molcas grid formatted file")); Ncenters = 0; /* read geometry */ Ok = read_molcasgrid_geometry(file); if(Ok) { init_atomic_orbitals(); fseek(file, 0L, SEEK_SET); nMO = read_one_integer(file,"N_of_MO=",buffer,len); fseek(file, 0L, SEEK_SET); totalNumberOfGrids = read_one_integer(file,"N_of_Grids=",buffer,len); if(totalNumberOfGrids>1) { fseek(file, 0L, SEEK_SET); Ok = read_molcasgrid_grid_limits(file, N, XYZ0, X, Y, Z,&version); if(!Ok) { free_data_all(); Message(_("Sorry, I can not grid information from thi file\n"),_("Error"),TRUE); } } else { free_data_all(); Message(_("Sorry, No grid available in this file\n"),_("Error"),TRUE); Ok = FALSE; } } if(Ok) { fseek(file, 0L, SEEK_SET); numGridDensity = get_num_density(file,buffer,len); if(numGridDensity<1) { free_data_all(); Message(_("Sorry, No density available in this file\n"),_("Error"),TRUE); Ok = FALSE; } } buildBondsOrb(); RebuildGeom = TRUE; glarea_rafresh(GLArea); if(Ok) init_atomic_orbitals(); if(Ncenters>0) set_status_label_info(_("Geometry"),_("Ok")); /*printf("N = %d %d %d\n",N[0],N[1],N[2]);*/ if(Ok) set_status_label_info(_("Grid"),_("Ok")); else set_status_label_info(_("Grid"),_("Nothing")); CancelCalcul = FALSE; fseek(file, 0L, SEEK_SET); fclose(file); if(Ok) read_density(numGridDensity); } /********************************************************************************/ void load_molcasgrid_file_orbitals(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); sprintf(molcasgridFileName,"%s",FileName); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_ORBITAL; read_molcasgrid_orbitals_file(FileName); create_list_molcasgrid_orbitals(); } /********************************************************************************/ void load_molcasgrid_file_density(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); sprintf(molcasgridFileName,"%s",FileName); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_EDENSITY; read_molcasgrid_density_file(FileName); } /********************************************************************************/ GabeditSrc250/src/Display/GridPlans.c0000644000175100017510000004167313130665225017731 0ustar alloucheallouche/* GridPlans.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include "../Display/GlobalOrb.h" #include "../Display/Orbitals.h" #include "../Display/UtilsOrb.h" #include "../Utils/UtilsInterface.h" #include "../Display/GridPlans.h" #include "../Display/Contours.h" #include "../Display/PlanesMapped.h" #include "../Utils/Utils.h" #include "../Display/StatusOrb.h" #include "../Display/GLArea.h" /**************************************************************/ Plane get_plane(Point5 C, Point5 V, gdouble *len, gint *N) { Plane plane; gint i; for(i=0;i<3;i++) { plane.Center.C[i] = C.C[i]; plane.Vector.C[i] = V.C[i]; } plane.len[0] = len[0]; plane.len[1] = len[1]; plane.N[0] = N[0]; plane.N[1] = N[1]; plane.point = g_malloc( plane.N[0]*sizeof(Point5*)); for(i=0;i< plane.N[0] ;i++) plane.point[i] = g_malloc(plane.N[1]*sizeof(Point5)); return plane; } /**************************************************************/ Plane* free_plane(Plane *plane) { gint i; for(i=0;i< plane->N[0] ;i++) if(plane->point[i]) g_free(plane->point[i]); if(plane->point) g_free(plane->point); plane->point = NULL; return plane; } /**************************************************************/ void set_vector_plane(Plane *plane) { gint i; gint j; gdouble n; /* Normalize Vector */ n = 0.0; for(i=0;i<3;i++) n += plane->Vector.C[i]*plane->Vector.C[i]; n = sqrt(n); for(i=0;i<3;i++) plane->Vector.C[i] /= n; j = 0; for(i=1;i<3;i++) if(plane->Vector.C[i]>plane->Vector.C[j]) j = i; plane->V[0].C[j] = 0.0; plane->V[0].C[(j+1)%3] = 1; plane->V[0].C[(j+2)%3] = 1; n = 0.0; for(i=0;i<3;i++) n += plane->Vector.C[i]*plane->V[0].C[i]; if(plane->Vector.C[j] != 0) plane->V[0].C[j] = -n/plane->Vector.C[j]; else { for(i=0;i<3;i++) plane->V[0].C[i] = 1; plane->V[0].C[(j+1)%3] = 1.0; } /*Debug("Vector plane = %lf %lf %lf \n", plane->V[0].C[0], plane->V[0].C[1] , plane->V[0].C[2] );*/ n = 0.0; for(i=0;i<3;i++) n += plane->V[0].C[i]*plane->V[0].C[i]; n = sqrt(n); for(i=0;i<3;i++) plane->V[0].C[i] /= n; for(i=0;i<3;i++) plane->V[1].C[i] = plane->Vector.C[(i+1)%3]*plane->V[0].C[(i+2)%3]- plane->Vector.C[(i+2)%3]*plane->V[0].C[(i+1)%3]; } /**************************************************************/ void set_points_plane(Plane *plane) { gint i; gint j; gint k; gdouble step0 = plane->len[0]/(plane->N[0]-1); gdouble step1 = plane->len[1]/(plane->N[1]-1); gdouble pos0 = -plane->len[0]/2; gdouble pos1 = -plane->len[1]/2; for(i=0;iN[0];i++) for(j=0;jN[1];j++) { for(k=0;k<3;k++) plane->point[i][j].C[k] = plane->Center.C[k] +plane->V[0].C[k]*(pos0+i*step0) +plane->V[1].C[k]*(pos1+j*step1); } plane->limits[0][0] = plane->point[0][0].C[0]; /* xmin */ plane->limits[0][1] = plane->point[0][0].C[0]; /* xmax */ plane->limits[1][0] = plane->point[0][0].C[0]; /* ymin */ plane->limits[1][1] = plane->point[0][0].C[0]; /* ymax */ plane->limits[2][0] = plane->point[0][0].C[0]; /* zmin */ plane->limits[2][1] = plane->point[0][0].C[0]; /* zmax */ for(i=0;iN[0];i++) for(j=0;jN[1];j++) for(k=0;k<3;k++) { if(plane->limits[k][0]> plane->point[i][j].C[0] ) plane->limits[k][0] = plane->point[i][j].C[0]; if(plane->limits[k][1]< plane->point[i][j].C[0] ) plane->limits[k][1] = plane->point[i][j].C[0]; } } /**************************************************************/ void print_vector_plane(Plane *plane) { gint i; gint j; gint k; printf("Plane properties\n"); printf("Center :"); for(i=0;i<3;i++) printf(" %lf ",plane->Center.C[i]); printf("\n "); printf("Vector :"); for(i=0;i<3;i++) printf(" %lf ",plane->Vector.C[i]); printf("\n "); printf("V0 :"); for(i=0;i<3;i++) printf(" %lf ",plane->V[0].C[i]); printf("\n "); printf("V1 :"); for(i=0;i<3;i++) printf(" %lf ",plane->V[1].C[i]); printf("\n "); printf("Grid :\n"); for(i=0;iN[0];i++) for(j=0;jN[1];j++) { printf(" %d %d : ",i,j); for(k=0;k<3;k++) printf(" %lf ",plane->point[i][j].C[k]); printf("\n "); } printf("Xlimits : %lf %lf\n",plane->limits[0][0],plane->limits[0][1]); printf("Ylimits : %lf %lf\n",plane->limits[1][0],plane->limits[1][1]); printf("Zlimits : %lf %lf\n",plane->limits[2][0],plane->limits[2][1]); } /**************************************************************/ Grid* plane_grid_point_alloc(Plane *plane,GridLimits limits) { Grid* planegrid = g_malloc(sizeof(Grid)); gint i,j; planegrid->N[0] = plane->N[0]; planegrid->N[1] = plane->N[1]; planegrid->N[2] = 1; planegrid->point = g_malloc( planegrid->N[0]*sizeof(Point5**)); for(i=0;i< planegrid->N[0] ;i++) { planegrid->point[i] = g_malloc(planegrid->N[1]*sizeof(Point5*)); for(j=0;j< planegrid->N[1] ;j++) planegrid->point[i][j] = g_malloc(planegrid->N[2]*sizeof(Point5)); } for(i=0;i<2;i++) for(j=0;j<3;j++) planegrid->limits.MinMax[i][j] = limits.MinMax[i][j]; return planegrid; } /**************************************************************/ Grid* grid_point_free(Grid* planegrid) { gint i,j; if(!planegrid) return NULL; for(i=0;i< planegrid->N[0] ;i++) { for(j=0;j< planegrid->N[1] ;j++) g_free(planegrid->point[i][j]); g_free(planegrid->point[i]); } g_free(planegrid->point); g_free(planegrid); planegrid=NULL; return planegrid; } /**************************************************************/ Grid* define_planegrid_point(Plane *plane,Func3d func) { Grid* planegrid; GridLimits limits; gint i; gint j; gint k; gdouble x; gdouble y; gdouble z; gdouble v; gboolean beg = TRUE; limits.MinMax[0][0] = plane->limits[0][0]; limits.MinMax[1][0] = plane->limits[0][1]; limits.MinMax[0][1] = plane->limits[1][0]; limits.MinMax[1][1] = plane->limits[1][1]; limits.MinMax[0][2] = plane->limits[2][0]; limits.MinMax[1][2] = plane->limits[2][1]; planegrid = plane_grid_point_alloc(plane,limits); for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { x = plane->point[i][j].C[0]; y = plane->point[i][j].C[1]; z = plane->point[i][j].C[2]; for(k=0;kN[2];k++) { v = func( x, y, z,NumSelOrb); planegrid->point[i][j][k].C[0] = x; planegrid->point[i][j][k].C[1] = y; planegrid->point[i][j][k].C[2] = z; planegrid->point[i][j][k].C[3] = v; if(beg) { beg = FALSE; planegrid->limits.MinMax[0][2] = z; planegrid->limits.MinMax[1][2] = z; planegrid->limits.MinMax[0][3] = v; planegrid->limits.MinMax[1][3] = v; } else { if(planegrid->limits.MinMax[0][2]>z) planegrid->limits.MinMax[0][2] = z; if(planegrid->limits.MinMax[1][2]limits.MinMax[1][2] = z; if(planegrid->limits.MinMax[0][3]>v) planegrid->limits.MinMax[0][3] = v; if(planegrid->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } } } /* Debug("Vlimits = %lf %lf \n", planegrid->limits.MinMax[0][3] , planegrid->limits.MinMax[1][3] ); */ return planegrid; } /**************************************************************/ Grid* define_plane_grid(Point5 C, Point5 V, gdouble *len, gint *N) { Grid* planegrid; Plane plane; if(!GeomOrb) { Message(_("Sorry, Please load a file before\n"),_("Error"),TRUE); return NULL; } if(!CoefAlphaOrbitals) { Message(_("Sorry, Please load the MO before\n"),_("Error"),TRUE); return NULL; } if(!AOAvailable &&(TypeGrid == GABEDIT_TYPEGRID_DDENSITY || TypeGrid == GABEDIT_TYPEGRID_ADENSITY)) { Message(_("Sorry, No atomic orbitals available.\nPlease use a gabedit file for load : \n" "Geometry, Molecular and Atomic Orbitals\n"),_("Error"),TRUE); return NULL; } plane = get_plane(C,V,len,N); set_vector_plane(&plane); set_points_plane(&plane); /*print_vector_plane(&plane);*/ set_status_label_info("Grid","Computing for contours"); switch(TypeGrid) { case GABEDIT_TYPEGRID_ORBITAL : planegrid = define_planegrid_point(&plane,get_value_orbital); break; case GABEDIT_TYPEGRID_EDENSITY : planegrid = define_planegrid_point(&plane,get_value_electronic_density); break; case GABEDIT_TYPEGRID_DDENSITY : planegrid = define_planegrid_point(&plane,get_value_electronic_density_bonds); break; case GABEDIT_TYPEGRID_ADENSITY : planegrid = define_planegrid_point(&plane,get_value_electronic_density_atomic); break; case GABEDIT_TYPEGRID_SDENSITY : planegrid = define_planegrid_point(&plane,get_value_spin_density); break; default : return NULL; } /*print_grid_point(planegrid);*/ set_status_label_info("Grid","Ok"); free_plane(&plane); return planegrid; } /********************************************************************************/ void apply_planegrid_center_vector(GtkWidget *Win,gpointer data) { GtkWidget** Entrys =(GtkWidget**)g_object_get_data(G_OBJECT (Win), "Entrys"); gchar* type = g_object_get_data(G_OBJECT (Win), "Type"); gint i; gint N[2]; gdouble len[2]; Point5 C; Point5 V; N[0] = get_number_of_point(Entrys[8]); if(N[0]<=0) return; N[1] = get_number_of_point(Entrys[9]); if(N[1]<=0) return; if(!get_a_float(Entrys[6],&len[0],_("Error : The length of plane should be a float."))) return; if(len[0]<=0) { Message(_("Error : The length of plane should be positive. "),_("Error"),TRUE); return; } if(!get_a_float(Entrys[7],&len[1],_(" Error : The length of plane should be a float."))) return; if(len[1]<=0) { Message(_("Error : The length of plane should be positive. "),_("Error"),TRUE); return; } for(i=0;i<5;i+=2) { if(!get_a_float(Entrys[i],&C.C[i/2],_("Error : A non float value in a float area."))) return; } for(i=1;i<6;i+=2) { if(!get_a_float(Entrys[i],&V.C[i/2],_("Error : A non float value in a float area."))) return; } if( sqrt(V.C[0] * V.C[0] + V.C[1] * V.C[1] + V.C[2] * V.C[2])<1e-6) { Message(_("Error : The length of normal Vector should be > 1e-6. "),_("Error"),TRUE); return; } /* Debug("V = %lf %lf %lf \n",V.C[0] , V.C[1] , V.C[2]); */ if(type) { if(strstr(type,"Maps")) { gridPlaneForPlanesMapped = define_plane_grid(C,V,len,N); create_maps_plane(_("Definition of Maps")); reDrawPlaneMappedPlane = FALSE; } else { gridPlaneForContours = define_plane_grid(C,V,len,N); create_contours_plane(_("Definition of contours")); reDrawContoursPlane = FALSE; } } delete_child(Win); } /********************************************************************************/ GtkWidget *create_planegrid_frame_center_vector( GtkWidget *vboxall,gchar* title) { #define NLIGNES 7 #define NCOLUMNS 4 GtkWidget *frame; GtkWidget *Label; GtkWidget *vboxframe; GtkWidget *hseparator; GtkWidget **Entrys = (GtkWidget **)g_malloc(10*sizeof(GtkWidget *)); gushort i; gushort j; gushort k; GtkWidget *Table; gchar *strlabels[NLIGNES][NCOLUMNS]; strlabels[0][0] = g_strdup(" "); strlabels[0][1] = g_strdup(" "); strlabels[0][2] = g_strdup(_("Center of plan")); strlabels[0][3] = g_strdup(_("Vector perpendicular to plan")); strlabels[1][0] = g_strdup(" X "); strlabels[1][1] = g_strdup(" : "); strlabels[1][2] = g_strdup("0.0"); strlabels[1][3] = g_strdup("1.0"); strlabels[2][0] = g_strdup(" Y "); strlabels[2][1] = g_strdup(" : "); strlabels[2][2] = g_strdup("0.0"); strlabels[2][3] = g_strdup("1.0"); strlabels[3][0] = g_strdup(" Z "); strlabels[3][1] = g_strdup(" : "); strlabels[3][2] = g_strdup("0.0"); strlabels[3][3] = g_strdup("1.0"); strlabels[4][0] = g_strdup(" "); strlabels[4][1] = g_strdup(" "); strlabels[4][2] = g_strdup(_("First direction")); strlabels[4][3] = g_strdup(_("Second direction")); strlabels[5][0] = g_strdup(_(" Length ")); strlabels[5][1] = g_strdup(" : "); strlabels[5][2] = g_strdup("10.0"); strlabels[5][3] = g_strdup("10.0"); strlabels[6][0] = g_strdup(_(" N points ")); strlabels[6][1] = g_strdup(" : "); strlabels[6][2] = g_strdup("40"); strlabels[6][3] = g_strdup("40"); frame = gtk_frame_new (title); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(NLIGNES+1,NCOLUMNS,FALSE); gtk_box_pack_start (GTK_BOX(vboxframe), Table, TRUE, TRUE, 1); for(i=0;i<4;i++) for(j=0;jnext) { BondType* data=(BondType*)list->data; i = data->n1; j = data->n2; if(!ShowHAtomOrb && (strcmp("H",GeomOrb[i].Symb)==0 || strcmp("H",GeomOrb[j].Symb)==0)) continue; if(data->bondType == GABEDIT_BONDTYPE_HYDROGEN) draw_hbond(i,j,1.0/10.0*scaleStick); else draw_bond(i,j,1.0/3.0*scaleStick, data->bondType); } return TRUE; } /************************************************************************/ static gint GeomDrawSpaceFill(gdouble scaleBall) { int i; for(i = 0;inext) { BondType* data=(BondType*)list->data; i = data->n1; j = data->n2; if(!ShowHAtomOrb && (strcmp("H",GeomOrb[i].Symb)==0 || strcmp("H",GeomOrb[j].Symb)==0)) continue; if(data->bondType == GABEDIT_BONDTYPE_HYDROGEN) draw_hbond(i,j,0.07*scaleStick); else draw_bond_for_stick(i, j, g*scaleStick, data->bondType); } return TRUE; } /************************************************************************/ static gint GeomDrawWireFrame(gdouble scaleBall) { int i; int j; gboolean* Ok = NULL; GList* list = NULL; if(Ncenters>0) Ok = g_malloc(Ncenters*sizeof(gboolean)); for(i = 0;inext) { BondType* data=(BondType*)list->data; i = data->n1; j = data->n2; if(!ShowHAtomOrb && (strcmp("H",GeomOrb[i].Symb)==0 || strcmp("H",GeomOrb[j].Symb)==0)) continue; if(data->bondType == GABEDIT_BONDTYPE_HYDROGEN) draw_wireframe(i,j,1); else draw_wireframe(i,j, 2); Ok[i] = TRUE; Ok[j] = TRUE; } for(i = 0;i0) { Debug("Pseudo potential for center %s\n",Type[i].Symb); Debug("==============================\n\n"); Debug("-\t- --------- ---------\n"); Debug("l\tn Eps Tau\n"); Debug("-\t- --------- ---------\n"); } else Debug("No Pseudo potential for %s\n",Type[i].Symb); for(j=0;j1) sym[1]=tolower(sym[1]); /*i=GetNumType(sym);*/ i=atoi(sym)-1; if(i>-1) { sym = g_strdup( GeomOrb[i].Symb); i = GeomOrb[i].NumType; Type[i].Symb=g_strdup(sym); Type[i].N=GetNelectrons(sym); j=-1; while(!feof(forb)) { { char* e = fgets(t,taille,forb);} if(!strcmp(t,"\n") || t[1]=='*') break; j++; Type[i].Norb=j+1; if(j == 0) Type[i].Ao=g_malloc(sizeof(AO)); else Type[i].Ao=g_realloc(Type[i].Ao,(j+1)*sizeof(AO)); ok= ReadOneBasis(i,j,t,&nsym); if(nsym==2) { Type[i].Norb=j+2; j++; } if(!ok) { j = j - nsym; if(j==0) Type[i].Ao=g_malloc(sizeof(AO)); else Type[i].Ao=g_realloc(Type[i].Ao,(j+1)*sizeof(AO)); Type[i].Norb=j+1; } } } else { if(!strcmp(t,"\n") || !strcmp(t," ") ) { g_free(sym); g_free(t); for(i=0;i0) { nAtoms++; while(!feof(forb)) { { char* e = fgets(t,BSIZE,forb);} if(this_is_a_backspace(t) || strstr(t,"[")) break; } } else { if(this_is_a_backspace(t) || strstr(t,"[")) break; } if(strstr(t,"[")) break; } fclose(forb); return nAtoms; } /**********************************************/ gboolean DefineGabeditMoldenBasisType(gchar *fileName,gchar* title) { gchar *sym; gchar *t; gchar *pdest; gint taille=BSIZE; gint i; gint j; gboolean ok; gint nsym; gint* numAtoms = NULL; gint nAtoms = 0; gint nC = getNumberOfBasisCenters(fileName, title); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message("Sorry\n No file selected","Error",TRUE); return FALSE; } t=g_malloc(taille*sizeof(gchar)); forb = FOpen(fileName, "rb"); if(forb == NULL) { gchar buffer[BSIZE]; sprintf(buffer,"Sorry, I can not open '%s' file\n",fileName); Message(buffer,"Error",TRUE); return FALSE; } ok = FALSE; while(!feof(forb)) { { char* e = fgets(t,taille,forb);} pdest = strstr(t,title); if(pdest != NULL) { ok = TRUE; break; } } if(!ok) { gchar buffer[BSIZE]; sprintf(buffer,"Sorry\nI can not read basis from '%s' file\n",fileName); Message(buffer,"Error",TRUE); return FALSE; } sym=g_malloc(10*sizeof(char)); /* printf("nC = %d\n",nC);*/ /* basis available for all centers */ if(nC==Ncenters) { Ntype = Ncenters; for(i=0;i-1 && i-1) { sym = g_strdup( GeomOrb[i].Symb); i = GeomOrb[i].NumType; /* printf("numType = %d\n",i);*/ Type[i].Symb=g_strdup(sym); Type[i].N=GetNelectrons(sym); j=-1; while(!feof(forb)) { { char* e = fgets(t,taille,forb);} /* Debug("t = %s\n",t);*/ if(this_is_a_backspace(t) || strstr(t,"[")) { /*Debug("This is a backspace\n");*/ break; } /* else Debug("This is not a backspace\n"); */ j++; Type[i].Norb=j+1; /* Debug("debut Alloc %d %d \n",i,j); Debug("point %d \n",Type[i].Ao); */ if(j == 0) Type[i].Ao=g_malloc(sizeof(AO)); else Type[i].Ao=g_realloc(Type[i].Ao,(j+1)*sizeof(AO)); /* Debug("debut ReadOne i=%d j = %d \n",i,j); Debug("debut t = %s \n",t); */ ok= ReadOneBasis(i,j,t,&nsym); /*Debug("nsym apres = %d\n",nsym);*/ if(nsym==2) { Type[i].Norb = j+2; j++; } if(!ok) { j = j - nsym; if(j==0) Type[i].Ao=g_malloc(sizeof(AO)); else Type[i].Ao=g_realloc(Type[i].Ao,(j+1)*sizeof(AO)); Type[i].Norb=j+1; } } } else { /*Debug("else = %s\n",t);*/ if(this_is_a_backspace(t) || strstr(t,"[")) { g_free(sym); g_free(t); for(i=0;i=0;l3--) for(l2=Type[GeomOrb[i].NumType].Ao[j].L-l3;l2>=0;l2--) { l1 = Type[GeomOrb[i].NumType].Ao[j].L-l2-l3; l[0][m] = l1; l[1][m] = l2; l[2][m] = l3; m++; } } for(m=0;m<(L+1)*(L+2)/2;m++) { l1 = l[0][m]; l2 = l[1][m]; l3 = l[2][m]; k++; AOrb[k].numberOfFunctions=Type[GeomOrb[i].NumType].Ao[j].N; AOrb[k].NumCenter = i; AOrb[k].Gtf =g_malloc(AOrb[k].numberOfFunctions*sizeof(GTF)); for(n=0;n=klend);kl +=klinc) { if(kl!=0) inc = 2*kl; else inc = 1; for(M=kl;M>=-kl;M -=inc) { /*Debug("L =%d kl=%d M=%d \n",L,kl,M);*/ k++; Stemp = getZlm(L,M); temp[k].numberOfFunctions=Stemp.numberOfCoefficients*Type[GeomOrb[i].NumType].Ao[j].N; temp[k].NumCenter=i; /*Debug("M=%d N=%d\n",M,temp[k].N);*/ temp[k].Gtf =g_malloc(temp[k].numberOfFunctions*sizeof(GTF)); Nc=-1; for(N=0;N=klend);kl +=klinc) { if(kl!=0) inc = 2*kl; else inc = 1; for(M=kl;M>=-kl;M -=inc) { if(L==1) m = M+abs(L); else m++; Stemp = getZlm(L,M); nCoefs[m] = Stemp.numberOfCoefficients; for(n=0;n=0;l3--) for(l2=abs(L)-l3;l2>=0;l2--) { l1 = abs(L)-l2-l3; l[0][m][0] = l1; l[1][m][0] = l2; l[2][m][0] = l3; m++; } } } /********************************************************************************/ gboolean readBasisFromGaussianFChk(gchar *fileName) { FILE *file; gint n; gint nS; gint c; gint nShells = 0; gint nPrimitives = 0; gint lMax = 0; gint contMax = 0; gint* shellTypes = NULL; gint* nPrimitivesByShell = NULL; gint* numAtoms = NULL; gdouble* primitiveExponents = NULL; gdouble* contractionsCoefs = NULL; gdouble* contractionsCoefsSP = NULL; gdouble* coordinatesForShells = NULL; gint** l[3] = {NULL,NULL,NULL}; gdouble** coefs = NULL; gint* nCoefs = NULL; CGTF *temp = NULL; gint kOrb, kPrimitive; gint m; gint nBasis; gboolean sp = FALSE; gint llMax = 0; file = FOpen(fileName, "rb"); if(file ==NULL) { Message(_("Sorry\nI can not open this file"),_("Error"),TRUE); return FALSE; } nBasis = get_one_int_from_fchk_gaussian_file(file,"Number of basis functions "); if(nBasis<1) { Message(_("Sorry\nI can not read the number of basis functions"),_("Error"),TRUE); fclose(file); return FALSE; } nShells = get_one_int_from_fchk_gaussian_file(file,"Number of contracted shells "); if(nShells<1) { Message(_("Sorry\nI can not the number of contracted shells"),_("Error"),TRUE); fclose(file); return FALSE; } nPrimitives = get_one_int_from_fchk_gaussian_file(file,"Number of primitive shells "); if(nPrimitives<1) { Message(_("Sorry\nI can not the number of primitive shells"),_("Error"),TRUE); fclose(file); return FALSE; } rewind(file); lMax = get_one_int_from_fchk_gaussian_file(file,"Highest angular momentum "); if(lMax<0) { Message(_("Sorry\nI can not the value of the highest angular momentum"),_("Error"),TRUE); fclose(file); return FALSE; } rewind(file); contMax = get_one_int_from_fchk_gaussian_file(file,"Largest degree of contraction "); if(contMax<1) { Message(_("Sorry\nI can not the value of the largest degree of contraction"),_("Error"),TRUE); fclose(file); return FALSE; } rewind(file); shellTypes = get_array_int_from_fchk_gaussian_file(file, "Shell types ", &n); if(!shellTypes || n!=nShells) { Message(_("Sorry\nI can not read the shell types"),_("Error"),TRUE); if(shellTypes) g_free(shellTypes); fclose(file); return FALSE; } for(nS = 0;nSnext) { BondType* data=(BondType*)list->data; gint i = data->n1; gint j = data->n2; connected[i][0]++; connected[j][0]++; k = connected[i][0]; connected[i][k]=j; k = connected[j][0]; connected[j][k]=i; } } /************************************************************************/ gboolean inRing(gint currentAtom, gint rootAtom, gint ringSize, gboolean initialize) { gint i; if (initialize) { done = FALSE; bonds = 0; rSize = ringSize; initStack(); if(nAtoms != Ncenters) buildConnectionsForRings(); if(Ncenters<1) return FALSE; } else inStack[currentAtom] = TRUE; if (done) return TRUE; else if ( ( currentAtom == rootAtom ) && ( bonds == ringSize ) ) return TRUE; else if ( ( currentAtom == rootAtom ) && ( bonds > 2 ) && ( ringSize < 3 ) ) return TRUE; if ( bonds < ringSize ) { gint numberOfConnections = connected[ currentAtom ][ 0 ]; for (i = 1; i <= numberOfConnections; i++ ) { gint newAtom = connected[currentAtom][i]; if ( ! ( inStack[newAtom] ) ) { bonds++; done = inRing( newAtom, rootAtom, ringSize, FALSE ); } if (done) return TRUE; } } inStack[currentAtom] = FALSE; bonds--; return FALSE; } /************************************************************************/ static gboolean isConnected(gint i, gint j) { gint k; for(k=0;k1) { ringAtoms = g_malloc(rSize*sizeof(gint)); for(i=0;i=rSize) break; } } } if(ringAtoms) { for(i=1;i GPOINTER_TO_INT(b)) return 1; return -1; } /************************************************************************/ static gboolean compare2List(GList* L1, GList* L2) { GList*ll1 = g_list_copy(L1); GList*ll2 = g_list_copy(L2); GList*l1 = NULL; GList*l2 = NULL; gboolean Ok; ll1 = g_list_sort(ll1, (GCompareFunc)cmp_fonction); ll2 = g_list_sort(ll2, (GCompareFunc)cmp_fonction); Ok = TRUE; for(l1=ll1, l2=ll2; l1 != NULL && l2 != NULL ; l1 = l1->next, l2 = l2->next) { if(GPOINTER_TO_INT(l1->data) != GPOINTER_TO_INT(l2->data)) { Ok = FALSE; break; } } g_list_free(ll1); g_list_free(ll2); if(l1 != NULL || l2 != NULL) Ok = FALSE; return Ok; } /************************************************************************/ static gboolean isCoplanar(GList* ring, gdouble epsilon) /* epsilon on degre */ { GList*l = NULL; V3d normal = {0,0,0}; V3d v = {0,0,0}; V3d v1 = {0,0,0}; V3d v2 = {0,0,0}; V3d p[] = {{0,0,0}, {0,0,0}, {0,0,0} }; gint i; gint j; gint k; gdouble tol = 0.1; tol = cos((90-epsilon)/180.0*PI); for(l=ring, j=0; j<3 ; l = l->next, j++) { if(!l) return TRUE; i = GPOINTER_TO_INT(l->data); for(k=0;k<3;k++) p[j][k] = GeomOrb[i].C[k]; } for(k=0;k<3;k++) v1[k] = p[1][k] - p[0][k]; for(k=0;k<3;k++) v2[k] = p[2][k] - p[0][k]; v3d_cross(v1,v2, normal); v3d_normal(normal); for( ; l != NULL ; l = l->next) { i = GPOINTER_TO_INT(l->data); for(k=0;k<3;k++) v[k] = GeomOrb[i].C[k]-p[0][k]; v3d_normal(v); if(fabs(v3d_dot(normal, v))>tol) return FALSE; } return TRUE; } /************************************************************************/ static GList** deleteNotCorrectRingsSize(gint* nR, GList** rings) { gint n; gint n1; gint i; gint nRings = *nR; for(n=0;n=ringSizeMin) { i++; continue;} for(n1=n+1;n10) rings = g_realloc(rings, nRings*sizeof(GList*)); else if(rings) {g_free(rings); rings = NULL; nRings = 0;} *nR = nRings; return rings; } /************************************************************************/ static GList** deleteNotRings(gint* nR, GList** rings, gboolean deleteNotPlaner) { gint n; gint n1; gint i; gint nRings = *nR; if(nRings<1) return rings; if(!rings) return rings; if(ringsSize) g_free(ringsSize); ringsSize = g_malloc(nRings*sizeof(gint)); for(n=0;ndata); end = begin; for(l=glist; l != NULL; l = l->next) { ringsSize[n]++; end = GPOINTER_TO_INT(l->data); for(l2=l->next; l2 != NULL; l2 = l2->next) { i= GPOINTER_TO_INT(l2->data); if(i==end) { ringsSize[n] = -1; break; } } if(ringsSize[n]<0) break; } if(!isConnected(begin, end)) ringsSize[n] = -1; /* this is not a ring */ } rings = deleteNotCorrectRingsSize(&nRings, rings); for(n=0;nnext) { i1= GPOINTER_TO_INT(l->data); l0 = l->next; if(l0 != NULL) l0 = l0->next; for(l1=l0; l1 != NULL; l1 = l1->next) { i2 = GPOINTER_TO_INT(l1->data); if(isConnected(i1,i2)) { if(l1->next != NULL ) ringsSize[n] = -1; else if( l!= rings[n]) ringsSize[n] = -1; } } } } rings = deleteNotCorrectRingsSize(&nRings, rings); *nR = nRings; return rings; } /************************************************************************/ gboolean findRings(gint currentAtom, gint rootAtom, gint ringIndex, gint depth, gboolean initialize) { gint i; gint numberOfConnections; gboolean endSearch =TRUE; gboolean e =TRUE; GList* first; GList* l; if (initialize) { initStack(); if(rings) g_free(rings); nRings = 1; rings = g_malloc(sizeof(GList*)); rings[0] = NULL; } inStack[currentAtom] = TRUE; for(l=rings[ringIndex]; l != NULL; l = l->next) if(GPOINTER_TO_INT(l->data)== currentAtom) return TRUE; rings[ringIndex] = g_list_append(rings[ringIndex],GINT_TO_POINTER(currentAtom)); if ( !initialize && ( depth>=ringSizeMax-1 ) ) return TRUE; /* max ring */ if ( !initialize && ( currentAtom == rootAtom ) ) return TRUE; /* end of cycle */ if( connected[ currentAtom ][ 0 ]==0) return TRUE; /* end of tree */ numberOfConnections = connected[ currentAtom ][ 0 ]; first = g_list_copy(rings[ringIndex]); for (i = 1; i <= numberOfConnections; i++ ) { gint newAtom = connected[currentAtom][i]; if(inStack[newAtom]) continue; rings = g_realloc(rings,(nRings+1)*sizeof(GList*)); rings[nRings] = g_list_copy(first); nRings++; e = findRings( newAtom, rootAtom, nRings-1, depth+1, FALSE); if(!e) endSearch = FALSE; } inStack[currentAtom] = FALSE; for (i = 1; i <= numberOfConnections; i++ ) { gint newAtom = connected[currentAtom][i]; inStack[newAtom] = FALSE; } return endSearch; } /************************************************************************/ static void printRings(gint nRings, GList** rings) { gint i; for(i=0;inext) printf("%d ",1+GPOINTER_TO_INT(l->data)); printf("\n"); } } /************************************************************************/ void findAllRingsForOneAtom(gint numAtom) { if(Ncenters<1) return; buildConnectionsForRings(); findRings(numAtom, numAtom, 0, 0, TRUE); rings = deleteNotRings(&nRings, rings, FALSE); printRings(nRings, rings); } /************************************************************************/ static GList** findAllRings(gint* nR, gint ringMinSize, gint ringMaxSize, gboolean deleteNotPlaner) { gint numAtom; gint nRingsAll = 0; GList** ringsAll = NULL; gint n0 = 0; gint i; *nR = 0; if(Ncenters<1) return NULL; ringSizeMax = ringMaxSize; ringSizeMin = ringMinSize; buildConnectionsForRings(); for(numAtom=0;numAtom0) break; printRings(1, &rings[n]); */ ringSize = ringsSize[n]; if(ringSize<=6) { if(!randumColors) { Diffuse = color_r[ringSize]; Specular = color_r[ringSize]; Ambiant = color_r[ringSize]; } else { randumC[0] = rand()/(double)RAND_MAX; randumC[1] = rand()/(double)RAND_MAX; randumC[2] = rand()/(double)RAND_MAX; Diffuse = randumC; Specular = randumC; Ambiant = randumC; } } else { Diffuse = color_r[0]; Specular = color_r[0]; Ambiant = color_r[0]; } glMaterialdv(GL_FRONT_AND_BACK,GL_SPECULAR,Specular); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,Diffuse); glMaterialdv(GL_FRONT_AND_BACK,GL_AMBIENT,Ambiant); glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,120); glBegin(GL_POLYGON); for(l = rings[n]; l != NULL; l = l->next) { k = GPOINTER_TO_INT(l->data); glNormal3f(0.0,0.0,1.0); glVertex3f(GeomOrb[k].C[0],GeomOrb[k].C[1],GeomOrb[k].C[2]); } k = GPOINTER_TO_INT(rings[n]->data);; glNormal3f(0.0,0.0,1.0); glVertex3f(GeomOrb[k].C[0],GeomOrb[k].C[1],GeomOrb[k].C[2]); glEnd(); } glEndList(); if(TypeBlend == GABEDIT_BLEND_YES) glDisable(GL_BLEND); messagesNumberOfRings(nRings, rings); AddRingsPovRay(rings, nRings, ringsSize, color_r); for(n=0;n1e-10) nLength = 1/nLength; for(i=0;i1e-10) qLength = 1/qLength; thetas[i] = M_PI/2-acos(vDot(q[i],n)*qLength*nLength); thetas[i] = thetas[i]/M_PI*180.0; while(thetas[i]>=360) thetas[i] -= 360; if(thetas[i]>180) thetas[i] = 180-thetas[i]; } sprintf(tmp1,"%s"," "); for(i=0;ilistRMS[j].rms) k = j; if(k!=i) { ConformerTypes2 t = listRMS[i]; listRMS[i] = listRMS[k]; listRMS[k] = t; } } } static void printListRMS(ConformerTypes2 listRMS[], gint nRMS, gdouble cutOff) { gint i; for(i=0;i=1;i--) numAtoms[i]=numAtoms[i-1]; numAtoms[0] = zero; } /* static void permutationLeft(gint numAtoms[], gint nAtoms) { gint end=numAtoms[0]; gint i; for(i=0;i0) break; printRings(1, &rings[n]); */ ringSize = ringsSize[n]; ConformerTypes2* listRMS=g_malloc(ringSize*2*nConfos*sizeof(ConformerTypes2)); //printf("Ring number %d\n",n+1); i=0; for(l = rings[n]; l != NULL; l = l->next) { k = GPOINTER_TO_INT(l->data); //printf("%s[%d] ",GeomOrb[k].Symb,k+1); numAtoms[i] = k; i++; } //printf("\n"); for(i=0;iN[i0]-1; jj = plansgrid->N[i1]-1; switch(i0) { case 0: ix = i; ix1 = ix2 = ii; ix4 = ix3 = ix; switch(i1) { case 1 : iy = j; iz = ip; iy1 = iy4 = iy; iy2 = iy3 = jj ; iz1 = iz2 = iz3 = iz4 = iz; break; case 2 : iy = ip;iz = j; iy1 = iy2 = iy3 = iy4 = iy; iz1 = iz4 = iz; iz2 = iz3 = jj ; break; } break; case 1: iy = i; iy1 = iy2 = ii; iy3 = iy4 = iy ; switch(i1) { case 0 : ix = j; iz = ip; iz1 = iz2 = iz3 = iz4 = iz; ix1 = ix4 = ix; ix2 = ix3 = jj ; break; case 2 : ix = ip;iz = j; ix1 = ix2 = ix3 = ix4 = ix; iz1 = iz4 = iz; iz2 = iz3 = jj ; break; } break; case 2: iz = i; iz1 = iz2 = ii; iz3 = iz4 = iz ; switch(i1) { case 0 : ix = j; iy = ip; iy1 = iy2 = iy3 = iy4 = iy; ix1 = ix4 = ix; ix2 = ix3 = jj ; break; case 1 : ix = ip;iy = j; ix1 = ix2 = ix3 = ix4 = ix; iy1 = iy4 = iy; iy2 = iy3 = jj ; break; } break; } x1 = plansgrid->point[ix1][iy1][iz1].C[0] - plansgrid->point[ix][iy][iz].C[0]; y1 = plansgrid->point[ix1][iy1][iz1].C[1] - plansgrid->point[ix][iy][iz].C[1]; z1 = plansgrid->point[ix1][iy1][iz1].C[2] - plansgrid->point[ix][iy][iz].C[2]; x2 = plansgrid->point[ix2][iy2][iz2].C[0] - plansgrid->point[ix1][iy1][iz1].C[0] ; y2 = plansgrid->point[ix2][iy2][iz2].C[1] - plansgrid->point[ix1][iy1][iz1].C[1] ; z2 = plansgrid->point[ix2][iy2][iz2].C[2] - plansgrid->point[ix1][iy1][iz1].C[2] ; Gap[0] = (y1 * z2) - (z1 * y2); Gap[1] = (z1 * x2) - (x1 * z2); Gap[2] = (x1 * y2) - (y1 * x2); Module = sqrt(Gap[0]*Gap[0] + Gap[1]*Gap[1] +Gap[2]*Gap[2]); for(i=0;i<3;i++) Gap[i] = Gap[i]/Module*gap; return Gap; } /*********************************************************************************************************/ static void PlanDraw(Grid* plansgrid,gint i0,gint i1,gint numplan,gdouble Gap[]) { gdouble x; gdouble y; gdouble z; gint ip = numplan; gint ix=0,iy=0,iz=0; gint ix1=0,iy1=0,iz1=0; gint ix2=0,iy2=0,iz2=0; gint ix3=0,iy3=0,iz3=0; gint ix4,iy4,iz4; gint i,j,ii,jj; i = 0; j = 0; ii = plansgrid->N[i0]-1; jj = plansgrid->N[i1]-1; switch(i0) { case 0: ix = i; ix1 = ix2 = ii; ix4 = ix3 = ix; switch(i1) { case 1 : iy = j; iz = ip; iy1 = iy4 = iy; iy2 = iy3 = jj ; iz1 = iz2 = iz3 = iz4 = iz; break; case 2 : iy = ip;iz = j; iy1 = iy2 = iy3 = iy4 = iy; iz1 = iz4 = iz; iz2 = iz3 = jj ; break; } break; case 1: iy = i; iy1 = iy2 = ii; iy3 = iy4 = iy ; switch(i1) { case 0 : ix = j; iz = ip; iz1 = iz2 = iz3 = iz4 = iz; ix1 = ix4 = ix; ix2 = ix3 = jj ; break; case 2 : ix = ip;iz = j; ix1 = ix2 = ix3 = ix4 = ix; iz1 = iz4 = iz; iz2 = iz3 = jj ; break; } break; case 2: iz = i; iz1 = iz2 = ii; iz3 = iz4 = iz ; switch(i1) { case 0 : ix = j; iy = ip; iy1 = iy2 = iy3 = iy4 = iy; ix1 = ix4 = ix; ix2 = ix3 = jj ; break; case 1 : ix = ip;iy = j; ix1 = ix2 = ix3 = ix4 = ix; iy1 = iy4 = iy; iy2 = iy3 = jj ; break; } break; } glLineWidth(3); /* glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);*/ glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); glBegin(GL_POLYGON); x = plansgrid->point[ix][iy][iz].C[0] + Gap[0]; y = plansgrid->point[ix][iy][iz].C[1] + Gap[1]; z = plansgrid->point[ix][iy][iz].C[2] + Gap[2]; glVertex3f(x,y,z); x = plansgrid->point[ix1][iy1][iz1].C[0] + Gap[0]; y = plansgrid->point[ix1][iy1][iz1].C[1] + Gap[1]; z = plansgrid->point[ix1][iy1][iz1].C[2] + Gap[2]; glVertex3f(x,y,z); x = plansgrid->point[ix2][iy2][iz2].C[0] + Gap[0]; y = plansgrid->point[ix2][iy2][iz2].C[1] + Gap[1]; z = plansgrid->point[ix2][iy2][iz2].C[2] + Gap[2]; glVertex3f(x,y,z); x = plansgrid->point[ix3][iy3][iz3].C[0] + Gap[0]; y = plansgrid->point[ix3][iy3][iz3].C[1] + Gap[1]; z = plansgrid->point[ix3][iy3][iz3].C[2] + Gap[2]; glVertex3f(x,y,z); glEnd(); glLineWidth(1.5); glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); } /*********************************************************************************************************/ static void drawAllRectangles(Grid* plansgrid,gint i0,gint i1,gint numplan,gdouble Gap[]) { gdouble x; gdouble y; gdouble z; gint ip = numplan; gint ix=0,iy=0,iz=0; gint ix1=0,iy1=0,iz1=0; gint ix2=0,iy2=0,iz2=0; gint ix3=0,iy3=0,iz3=0; gint ix4,iy4,iz4; gint i,j,ii,jj; ColorMap* colorMap = get_colorMap(); V4d Diffuse = {0.7,0.7,0.7,0.8}; V4d Specular = {0.8,0.8,0.8,0.8 }; V4d Ambiant = {1.0,1.0,1.0,0.8}; glMaterialdv(GL_FRONT_AND_BACK,GL_SPECULAR,Specular); glMaterialdv(GL_FRONT_AND_BACK,GL_AMBIENT,Ambiant); glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,120); glDisable ( GL_LIGHTING ) ; glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); for(i=0;iN[i0]-1;i++) for(j=0;jN[i1]-1;j++) { ii = i+1; jj = j+1; switch(i0) { case 0: ix = i; ix1 = ix2 = ii; ix4 = ix3 = ix; switch(i1) { case 1 : iy = j; iz = ip; iy1 = iy4 = iy; iy2 = iy3 = jj ; iz1 = iz2 = iz3 = iz4 = iz; break; case 2 : iy = ip;iz = j; iy1 = iy2 = iy3 = iy4 = iy; iz1 = iz4 = iz; iz2 = iz3 = jj ; break; } break; case 1: iy = i; iy1 = iy2 = ii; iy3 = iy4 = iy ; switch(i1) { case 0 : ix = j; iz = ip; iz1 = iz2 = iz3 = iz4 = iz; ix1 = ix4 = ix; ix2 = ix3 = jj ; break; case 2 : ix = ip;iz = j; ix1 = ix2 = ix3 = ix4 = ix; iz1 = iz4 = iz; iz2 = iz3 = jj ; break; } break; case 2: iz = i; iz1 = iz2 = ii; iz3 = iz4 = iz ; switch(i1) { case 0 : ix = j; iy = ip; iy1 = iy2 = iy3 = iy4 = iy; ix1 = ix4 = ix; ix2 = ix3 = jj ; break; case 1 : ix = ip;iy = j; ix1 = ix2 = ix3 = ix4 = ix; iy1 = iy4 = iy; iy2 = iy3 = jj ; break; } break; } glBegin(GL_POLYGON); set_Color_From_colorMap(colorMap, Diffuse, plansgrid->point[ix][iy][iz].C[3]); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,Diffuse); glMaterialdv(GL_FRONT_AND_BACK,GL_AMBIENT,Diffuse); glColor4dv(Diffuse); x = plansgrid->point[ix][iy][iz].C[0] + Gap[0]; y = plansgrid->point[ix][iy][iz].C[1] + Gap[1]; z = plansgrid->point[ix][iy][iz].C[2] + Gap[2]; glVertex3f(x,y,z); set_Color_From_colorMap(colorMap, Diffuse, plansgrid->point[ix1][iy1][iz1].C[3]); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,Diffuse); glMaterialdv(GL_FRONT_AND_BACK,GL_AMBIENT,Diffuse); glColor4dv(Diffuse); x = plansgrid->point[ix1][iy1][iz1].C[0] + Gap[0]; y = plansgrid->point[ix1][iy1][iz1].C[1] + Gap[1]; z = plansgrid->point[ix1][iy1][iz1].C[2] + Gap[2]; glVertex3f(x,y,z); set_Color_From_colorMap(colorMap, Diffuse, plansgrid->point[ix2][iy2][iz2].C[3]); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,Diffuse); glMaterialdv(GL_FRONT_AND_BACK,GL_AMBIENT,Diffuse); glColor4dv(Diffuse); x = plansgrid->point[ix2][iy2][iz2].C[0] + Gap[0]; y = plansgrid->point[ix2][iy2][iz2].C[1] + Gap[1]; z = plansgrid->point[ix2][iy2][iz2].C[2] + Gap[2]; glVertex3f(x,y,z); set_Color_From_colorMap(colorMap, Diffuse, plansgrid->point[ix3][iy3][iz3].C[3]); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,Diffuse); glMaterialdv(GL_FRONT_AND_BACK,GL_AMBIENT,Diffuse); glColor4dv(Diffuse); x = plansgrid->point[ix3][iy3][iz3].C[0] + Gap[0]; y = plansgrid->point[ix3][iy3][iz3].C[1] + Gap[1]; z = plansgrid->point[ix3][iy3][iz3].C[2] + Gap[2]; glVertex3f(x,y,z); glEnd(); } glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); glEnable ( GL_LIGHTING ) ; } /*********************************************************************************************************/ GLuint PlanesMappedGenOneList(Grid* plansgrid,gint i0,gint i1,gint numplan,gdouble gap) { GLuint mapslist; gdouble *Gap; if(!plansgrid) return 0; Gap = GetGapVector(plansgrid,i0,i1,numplan,gap); mapslist = glGenLists(1); glNewList(mapslist, GL_COMPILE); if(TypeBlend == GABEDIT_BLEND_YES) glEnable(GL_BLEND); else glDisable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,120); PlanDraw(plansgrid,i0,i1,numplan,Gap); drawAllRectangles(plansgrid, i0, i1, numplan, Gap); if(TypeBlend == GABEDIT_BLEND_YES) glEnable(GL_BLEND); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glEndList(); g_free(Gap); return mapslist; } /*********************************************************************************************************/ static void setColorMap() { GtkWidget* handleBoxColorMapPlanesMapped = g_object_get_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapPlanesMapped"); ColorMap* colorMap = g_object_get_data(G_OBJECT( handleBoxColorMapPlanesMapped),"ColorMap"); if(colorMap) return; if(handleBoxColorMapPlanesMapped) { GtkWidget* entryLeft = g_object_get_data(G_OBJECT(handleBoxColorMapPlanesMapped), "EntryLeft"); GtkWidget* entryRight = g_object_get_data(G_OBJECT(handleBoxColorMapPlanesMapped), "EntryRight"); GtkWidget* darea = g_object_get_data(G_OBJECT(handleBoxColorMapPlanesMapped), "DrawingArea"); colorMap = new_colorMap_min_max(-0.5,0.5); g_object_set_data(G_OBJECT(handleBoxColorMapPlanesMapped),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryLeft),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryRight),"ColorMap", colorMap); g_object_set_data(G_OBJECT(darea),"ColorMap", colorMap); } } /********************************************************************************/ void showColorMapPlanesMapped() { GtkWidget* handleBoxColorMapPlanesMapped = g_object_get_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapPlanesMapped"); ColorMap* colorMap = g_object_get_data(G_OBJECT( handleBoxColorMapPlanesMapped),"ColorMap"); if(!colorMap) setColorMap(); color_map_show(handleBoxColorMapPlanesMapped); } /********************************************************************************/ void hideColorMapPlanesMapped() { GtkWidget* handleBoxColorMapPlanesMapped = g_object_get_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapPlanesMapped"); color_map_hide(handleBoxColorMapPlanesMapped); } /********************************************************************************/ GLuint PlanesMappedGenLists(GLuint mapslist,Grid* plansgrid, gint i0,gint i1,gint numplan,gdouble gap) { if (glIsList(mapslist) == GL_TRUE) glDeleteLists(mapslist,1); if(plansgrid && numplan>=0) { mapslist = PlanesMappedGenOneList(plansgrid, i0, i1, numplan, gap); } return mapslist; } /********************************************************************************/ void PlanesMappedShowLists(GLuint list) { if (glIsList(list) == GL_TRUE) glCallList(list); } /********************************************************************************/ GabeditSrc250/src/Display/AtomicOrbitals.c0000644000175100017510000004047113130665225020755 0ustar alloucheallouche/* AtomicOrbitals.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "../Utils/AtomsProp.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "GeomDraw.h" #include "GLArea.h" #include "UtilsOrb.h" #include "Basis.h" #include "GeomOrbXYZ.h" #include "StatusOrb.h" /********************************************************************************/ void save_ao_orbitals_gabedit_format(FILE* file) { gint i; gint j; gint k; fprintf(file,"[AO]\n"); for(i=0;i0) NOcc++; i = 0; /* Debug("atof t = %d\n",atoi(t));*/ while(!feof(fd) && atoi(t)!=0) { sscanf(t,"%d %lf",&idump,&CoefOrbitals[n][i]); { char* e = fgets(t,taille,fd);} i++; } /* Debug("i = %d\n",i);*/ if(n == NOrb-1) OK = FALSE; } }while(!feof(fd)); end: /*Debug("End of read n = %d\n",n);*/ fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); switch(itype) { case 1 : for(j=0;j1.0) { GeomOrb[j].OccBetaOrbitals[i] = GeomOrb[j].OccAlphaOrbitals[i]/2; GeomOrb[j].OccAlphaOrbitals[i] = GeomOrb[j].OccBetaOrbitals[i]; } else GeomOrb[j].OccBetaOrbitals[i] = 0.0; } } } /* print_atomic_orbitals();*/ if(OkAlpha || OkBeta) { AOAvailable = TRUE; set_status_label_info(_("At. Orb."),_("Ok")); glarea_rafresh(GLArea); /* for geometry*/ } else { AOAvailable = FALSE; set_status_label_info(_("At. Orb."),_("Nothing")); } } GabeditSrc250/src/Display/Vibration.c0000644000175100017510000074220513130665225020002 0ustar alloucheallouche/* Vibration.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "GlobalOrb.h" #include "../Utils/AtomsProp.h" #include "../Utils/Utils.h" #include "../Utils/QL.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Display/StatusOrb.h" #include "../Display/GLArea.h" #include "../Display/Vibration.h" #include "../Display/GeomOrbXYZ.h" #include "../Display/AtomicOrbitals.h" #include "../Files/FileChooser.h" #include "../Geometry/GeomGlobal.h" #include "../Spectrum/IRSpectrum.h" #include "../Spectrum/RamanSpectrum.h" #include "../Spectrum/IGVPT2Spectrum.h" #include "../Files/FolderChooser.h" #include "../Files/GabeditFolderChooser.h" #include "../Common/Help.h" #include "../Common/StockIcons.h" #include "../Display/Images.h" #include "../Display/PovrayGL.h" #include "../Display/BondsOrb.h" #include "../Display/UtilsOrb.h" static GtkWidget *WinDlg = NULL; static GtkWidget *EntryScal = NULL; static GtkWidget *EntryThreshold = NULL; static GtkWidget *EntryVelocity = NULL; static GtkWidget *EntryRadius = NULL; static GtkWidget *EntryNSteps = NULL; static GtkWidget *LabelNSteps = NULL; static GtkWidget *PlayButton = NULL; static GtkWidget *StopButton = NULL; static GtkTreeView *treeView = NULL; static gboolean play = FALSE; static GtkWidget *buttonCheckFilm = NULL; static GtkWidget *buttonDirFilm = NULL; static GtkWidget* comboListFilm = NULL; static gboolean createFilm = FALSE; static gint numFileFilm = 0; static gchar formatFilm[100] = "BMP"; static gint spinMultiplicity=1; static gint totalCharge = 0; static GtkWidget* buttonChkgauss = NULL; static void add_cchemi_option(FILE* cchemiFile, G_CONST_RETURN gchar* dirNameStr); typedef struct _MMData { gchar symbol[20]; gchar mm[20]; gchar pdb[20]; gchar rname[20]; gint rNum; gdouble charge; gint nConnections; gint* connections; }MMData; /********************************************************************************/ static void animate_vibration(); static void rafreshList(); static void stop_vibration(GtkWidget *win, gpointer data); static void play_vibration(GtkWidget *win, gpointer data); static void read_modes_dlg(); static void free_vibration(); static void create_hybryd_QMMM_file_dlg(gboolean run); /************************************************************************************************************/ /* We assume that the modes are mass-weighted */ static void normalize_modes() { gint i; gint j; gint mode; double effectiveMass; if(vibration.numberOfFrequencies<1) return; if(vibration.numberOfAtoms<1) return; for(mode = 0;mode1e-10) effectiveMass = 1.0/effectiveMass; else effectiveMass = 1.0; vibration.modes[mode].effectiveMass = effectiveMass; } for(mode = 0;mode0) { nblock = nFreqs/nf; if(nFreqs%nf!=0) nblock++; } for(j=0;j-1) for(k=0;k-1) hessian[jh][ih[k]] = v[k]; } } } for(i=0;i0) frequencies[i] = sqrt(frequencies[i])*219474.63633664; else frequencies[i] = -sqrt(-frequencies[i])*219474.63633664; /* for(i=0;ichild; g_object_set_data(G_OBJECT (entry), "Combo",combo); gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.2),-1); return entry; } /***********************************************************************************************/ static GtkWidget *addChargeToTable(GtkWidget *table, gint i) { GtkWidget* entryCharge = NULL; GtkWidget* comboCharge = NULL; gint nlistCharge = 1; gchar* listCharge[] = {"0"}; add_label_table(table,_("Charge"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryCharge = addComboListToATable(table, listCharge, nlistCharge, i, 2, 1); comboCharge = g_object_get_data(G_OBJECT (entryCharge), "Combo"); gtk_widget_set_sensitive(entryCharge, FALSE); return comboCharge; } /***********************************************************************************************/ static GtkWidget *addSpinToTable(GtkWidget *table, gint i) { GtkWidget* entrySpinMultiplicity = NULL; GtkWidget* comboSpinMultiplicity = NULL; gint nlistspinMultiplicity = 1; gchar* listspinMultiplicity[] = {"0"}; add_label_table(table,_("Spin multiplicity"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entrySpinMultiplicity = addComboListToATable(table, listspinMultiplicity, nlistspinMultiplicity, i, 2, 1); comboSpinMultiplicity = g_object_get_data(G_OBJECT (entrySpinMultiplicity), "Combo"); gtk_widget_set_sensitive(entrySpinMultiplicity, FALSE); g_signal_connect(G_OBJECT(entrySpinMultiplicity),"changed", G_CALLBACK(changedEntrySpinMultiplicity),NULL); return comboSpinMultiplicity; } /********************************************************************************/ /* See Calculation of NMR and EPR parameters: theory and applications By Martin Kaupp, Michael Buhl, Vladimir G. Malkin Published by Wiley-VCH, 2004, ISBN 3527307796, 9783527307791 Page 163, Equation 10.39 See also : Toyama et al, J. Mol. Spec. 13,193 (1964), Eq. 7 */ /********************************************************************************/ static gdouble* get_centrifuge_parameters() { gint i; gint j; gint mode; gdouble I[3] = {0,0,0}; gdouble alpha = 0; gdouble beta = 0; gdouble* akOverI = NULL; gdouble a = 0; if(vibration.numberOfFrequencies<1) return NULL; if(vibration.numberOfAtoms<1) return NULL; akOverI = g_malloc(vibration.numberOfFrequencies*sizeof(gdouble)); for(i=0;i0;i--) if(fileNameBas[i]=='.') { fileNameBas[i]='\0'; break; } /* Equilibrium geometry */ if(GTK_IS_WIDGET(buttonChkgauss)&& GTK_TOGGLE_BUTTON (buttonChkgauss)->active) { fprintf(file,"%cChk=%s\n",p,fileNameBas); } fprintf(file,"# %s\n",allKeys); fprintf(file,"# Test Symm(PG=C1)\n"); fprintf(file,"# Units(Ang,Deg)\n"); fprintf(file,"\n Equilibrium geometry, made in Gabedit\n\n"); fprintf(file,"%d %d\n",totalCharge,spinMultiplicity); for(i=0;iactive) link = TRUE; for(j=0;jchild), "ComboSpinMultiplicity", comboSpinMultiplicity); setComboCharge(comboCharge); setComboSpinMultiplicity(comboSpinMultiplicity); g_signal_connect(G_OBJECT(GTK_BIN(comboCharge)->child),"changed", G_CALLBACK(changedEntryCharge),NULL); /*----------------------------------------------------------------------------------*/ i++; add_label_table(table,_(" Energy keywords "),i,0); add_label_table(table,":",i,1); entry = gtk_entry_new (); g_object_set_data(G_OBJECT(Wins), "EntryEnergyKeywords", entry); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,2,2+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),"B3LYP/6-311++G** SCF(Tight) Int=UltraFine"); gtk_editable_set_editable((GtkEditable*)entry,TRUE); gtk_widget_set_sensitive(entry, TRUE); /*----------------------------------------------------------------------------------*/ i++; add_label_table(table,_(" Prop. keywords "),i,0); add_label_table(table,":",i,1); entry = gtk_entry_new (); g_object_set_data(G_OBJECT(Wins), "EntryPropKeywords", entry); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,2,2+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),"NMR"); gtk_editable_set_editable((GtkEditable*)entry,TRUE); gtk_widget_set_sensitive(entry, TRUE); /*----------------------------------------------------------------------------------*/ i++; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); /*----------------------------------------------------------------------------------*/ i++; buttonChkgauss = gtk_check_button_new_with_label (_("check file")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonChkgauss), FALSE); gtk_table_attach(GTK_TABLE(table),buttonChkgauss,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); /*----------------------------------------------------------------------------------*/ i++; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); /*----------------------------------------------------------------------------------*/ gtk_widget_show_all(table); return entry; } /********************************************************************************************************/ static void add_cancel_ok_button(GtkWidget *Win,GtkWidget *vbox,GtkWidget *entry, GCallback myFunc) { GtkWidget *hbox; GtkWidget *button; /* buttons box */ hbox = create_hbox_false(vbox); gtk_widget_realize(Win); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)myFunc,GTK_OBJECT(Win)); if(entry) g_signal_connect_swapped(G_OBJECT (entry), "activate", (GCallback) gtk_button_clicked, GTK_OBJECT (button)); gtk_widget_show_all(vbox); } /********************************************************************************/ static void create_gaussian_correction_vibration_file_dlg() { GtkWidget *Win; GtkWidget *frame; GtkWidget *vboxall; GtkWidget* vbox; GtkWidget* entryKeywords; if(vibration.numberOfFrequencies<1) { gchar* t = g_strdup_printf(_("Sorry\n You should read the geometries befor")); Message(t,_("Error"),TRUE); return; } /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),"Create multiple input file for Gaussian"); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 2); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Input Gaussian"); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(Win); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 2); gtk_box_pack_start(GTK_BOX(vboxall), frame,TRUE,TRUE,0); gtk_widget_show (frame); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); gtk_widget_realize(Win); entryKeywords = add_inputGauss_entrys(Win,vbox); add_cancel_ok_button(Win,vbox,entryKeywords,(GCallback)print_gaussian_correction_vibration_geometries_link); /* Show all */ gtk_widget_show_all (Win); } /********************************************************************************/ static void print_gaussian_qff_one_geometry(gchar* fileNameBas, FILE* file, G_CONST_RETURN gchar* keys, gboolean link, gint mode1, gint mode2, gdouble delta1, gdouble delta2, gdouble akOverI1) { gint i; gchar p = '%'; gchar ad1 = '+'; gchar ad2 = '+'; if(mode1<0) return; if(delta1<0) ad1 = '-'; if(delta2<0) ad2 = '-'; fprintf(file,"--Link1--\n"); if(link) fprintf(file,"%cChk=%s\n",p,fileNameBas); fprintf(file,"# %s\n",keys); if(link) fprintf(file,"# Guess(Read)\n"); fprintf(file,"# Test NoSymm\n"); fprintf(file,"# Units(Ang,Deg)\n"); if(mode2<0) fprintf(file,"\nMode: Freq= %0.12lf Mass= %0.12lf Q= Qeq %c %0.12lf akI=%lf\n\n", vibration.modes[mode1].frequence, vibration.modes[mode1].effectiveMass, ad1, fabs(delta1), akOverI1 ); else fprintf(file,"\nMode1: f1= %0.12lf m1= %0.12lf Q1=Qeq%c%0.12lf\nMode2: f2= %0.12lf m2= %0.12lf Q2=Qeq%c%0.12lf \n\n", vibration.modes[mode1].frequence, vibration.modes[mode1].effectiveMass, ad1, fabs(delta1), vibration.modes[mode2].frequence, vibration.modes[mode2].effectiveMass, ad2, fabs(delta2) ); fprintf(file,"%d %d\n",totalCharge,spinMultiplicity); for(i=0;iactive); gboolean oneFile =(GTK_IS_WIDGET(buttonOneFile)&& GTK_TOGGLE_BUTTON (buttonOneFile)->active); gboolean reducedCoordinates =(GTK_IS_WIDGET(buttonReducedCoordinates)&& GTK_TOGGLE_BUTTON (buttonReducedCoordinates)->active); gchar* allKeys = NULL; gdouble delta = 1; gboolean link = FALSE; gchar* fileNameBas = NULL; gdouble* akOverI = NULL; gint k = 0; gdouble* deltas = NULL; if(vibration.numberOfFrequencies<1) return; if(vibration.numberOfAtoms<1) return; if(buttonDirSelector) dirNameStr = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); if(!dirNameStr) return; if(entryFileName) fileNameStr = gtk_entry_get_text(GTK_ENTRY(entryFileName)); if(!fileNameStr) return; if(entryEnergyKeywords) energyKeys = gtk_entry_get_text(GTK_ENTRY(entryEnergyKeywords)); if(!energyKeys) return; if(entryPropKeywords) propKeys = gtk_entry_get_text(GTK_ENTRY(entryPropKeywords)); if(!propKeys) return; if(entryDelta) deltastr = gtk_entry_get_text(GTK_ENTRY(entryDelta)); if(!deltastr) return; delta = fabs(atof(deltastr)); if(delta==0) return; allKeys = g_strdup_printf("%s %s",energyKeys, propKeys); fileNameBas = g_path_get_basename(fileNameStr); for(i=strlen(fileNameBas);i>0;i--) if(fileNameBas[i]=='.') { fileNameBas[i]='\0'; break; } if(oneFile) fileName = g_strdup_printf("%s%s%s",dirNameStr,G_DIR_SEPARATOR_S,fileNameStr); else fileName = g_strdup_printf("%s%s%s_%d.com",dirNameStr,G_DIR_SEPARATOR_S,fileNameBas,k); file = fopen(fileName, "w"); if(!file) { gchar* t = g_strdup_printf(_("Sorry\n I can not create %s file"),fileName); Message(t,_("Error"),TRUE); if(fileName) g_free(fileName); if(t)g_free(t); return; } /* Equilibrium geometry */ if(GTK_IS_WIDGET(buttonChkgauss)&& GTK_TOGGLE_BUTTON (buttonChkgauss)->active) { fprintf(file,"%cChk=%s\n",p,fileNameBas); } fprintf(file,"# %s\n",allKeys); fprintf(file,"# Test NoSymm\n"); fprintf(file,"# Units(Ang,Deg)\n"); fprintf(file,"\n Equilibrium geometry, made in Gabedit\n\n"); fprintf(file,"%d %d\n",totalCharge,spinMultiplicity); for(i=0;iactive) link = TRUE; for(j=0;jchild), "ComboSpinMultiplicity", comboSpinMultiplicity); setComboCharge(comboCharge); setComboSpinMultiplicity(comboSpinMultiplicity); g_signal_connect(G_OBJECT(GTK_BIN(comboCharge)->child),"changed", G_CALLBACK(changedEntryCharge),NULL); /*----------------------------------------------------------------------------------*/ i++; add_label_table(table,_(" Energy keywords "),i,0); add_label_table(table,":",i,1); entry = gtk_entry_new (); g_object_set_data(G_OBJECT(Wins), "EntryEnergyKeywords", entry); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,2,2+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),"B3LYP/6-311++G** SCF(Tight)"); gtk_editable_set_editable((GtkEditable*)entry,TRUE); gtk_widget_set_sensitive(entry, TRUE); /*----------------------------------------------------------------------------------*/ i++; add_label_table(table,_(" Prop. keywords "),i,0); add_label_table(table,":",i,1); entry = gtk_entry_new (); g_object_set_data(G_OBJECT(Wins), "EntryPropKeywords", entry); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,2,2+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),"Pop=full"); gtk_editable_set_editable((GtkEditable*)entry,TRUE); gtk_widget_set_sensitive(entry, TRUE); /*----------------------------------------------------------------------------------*/ i++; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); /*----------------------------------------------------------------------------------*/ i++; buttonReducedCoordinates = gtk_check_button_new_with_label (_("dimensionless reduced coordinates (step without unit)")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonReducedCoordinates), TRUE); gtk_table_attach(GTK_TABLE(table),buttonReducedCoordinates,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT(Wins), "ButtonReducedCoordinates", buttonReducedCoordinates); /*----------------------------------------------------------------------------------*/ i++; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); /*----------------------------------------------------------------------------------*/ i++; buttonOneFile = gtk_check_button_new_with_label (_("OneFile")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonOneFile), TRUE); gtk_table_attach(GTK_TABLE(table),buttonOneFile,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT(Wins), "ButtonOneFile", buttonOneFile); /*----------------------------------------------------------------------------------*/ i++; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); /*----------------------------------------------------------------------------------*/ i++; buttonDiagonal = gtk_check_button_new_with_label (_("Only diagonal terms")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonDiagonal), FALSE); gtk_table_attach(GTK_TABLE(table),buttonDiagonal,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT(Wins), "ButtonDiagonal", buttonDiagonal); /*----------------------------------------------------------------------------------*/ i++; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); /*----------------------------------------------------------------------------------*/ i++; buttonChkgauss = gtk_check_button_new_with_label (_("check file")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonChkgauss), FALSE); gtk_table_attach(GTK_TABLE(table),buttonChkgauss,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); /*----------------------------------------------------------------------------------*/ i++; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); /*----------------------------------------------------------------------------------*/ gtk_widget_show_all(table); return entry; } /********************************************************************************************************/ static void create_gaussian_qff_file_dlg() { GtkWidget *Win; GtkWidget *frame; GtkWidget *vboxall; GtkWidget* vbox; GtkWidget* entryKeywords; if(vibration.numberOfFrequencies<1) { gchar* t = g_strdup_printf(_("Sorry\n You should read the geometries befor")); Message(t,_("Error"),TRUE); return; } /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),"Create multiple input file for Gaussian"); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 2); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Input Gaussian"); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(Win); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 2); gtk_box_pack_start(GTK_BOX(vboxall), frame,TRUE,TRUE,0); gtk_widget_show (frame); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); gtk_widget_realize(Win); entryKeywords = add_inputGauss_qff_entrys(Win,vbox); add_cancel_ok_button(Win,vbox,entryKeywords,(GCallback)print_gaussian_qff_geometries_link); /* Show all */ gtk_widget_show_all (Win); } /********************************************************************************/ static void print_cchemi_qff_one_geometry(G_CONST_RETURN gchar* dirNameStr,gchar* fileNameBas, FILE* file, G_CONST_RETURN gchar* model, G_CONST_RETURN gchar* QMkeys, MMData* mmData, gint mode1, gint mode2, gdouble delta1, gdouble delta2, gdouble akOverI1) { gint i; gchar p = '%'; gchar ad1 = '+'; gchar ad2 = '+'; if(mode1<0) return; if(delta1<0) ad1 = '-'; if(delta2<0) ad2 = '-'; fprintf(file,"RunType= Energy\n"); fprintf(file,"Model= %s\n",model); fprintf(file,"QMKeys= %s\n",QMkeys); fprintf(file,"mopacCommand=mopac\n"); fprintf(file,"orcaCommand=orca\n"); fprintf(file,"fireflyCommand=firefly\n"); fprintf(file,"gaussianCommand=runGauss\n"); fprintf(file,"genericCommand=runGeneric\n"); add_cchemi_option(file, dirNameStr); if(mode2<0) fprintf(file,"\n#Mode: Freq= %0.12lf Mass= %0.12lf Q= Qeq %c %0.12lf akI=%lf\n\n", vibration.modes[mode1].frequence, vibration.modes[mode1].effectiveMass, ad1, fabs(delta1), akOverI1 ); else fprintf(file,"\n# Mode1: f1= %0.12lf m1= %0.12lf Q1=Qeq%c%0.12lf\n# Mode2: f2= %0.12lf m2= %0.12lf Q2=Qeq%c%0.12lf \n\n", vibration.modes[mode1].frequence, vibration.modes[mode1].effectiveMass, ad1, fabs(delta1), vibration.modes[mode2].frequence, vibration.modes[mode2].effectiveMass, ad2, fabs(delta2) ); fprintf(file,"#Geometry, nAtoms, charge, spin multiplicity.\n"); fprintf(file,"#For each atom : symbol, MMType, pdbType, residueName, numResidue, charge, layer, x(Ang),y,z, nconn, num1, type1, num2, type2,...\n"); fprintf(file,"Geometry\n"); fprintf(file,"%d %d %d\n",vibration.numberOfAtoms,totalCharge,spinMultiplicity); for(i=0;i0) mmData[i].connections=g_malloc(2*mmData[i].nConnections*sizeof(gint)); for(k=0;k<2*mmData[i].nConnections;k++) {nn=fscanf(file," %d",&mmData[i].connections[k]); if(nn!=1) break;} if(nn!=1) break; } if(i!=vibration.numberOfAtoms) { gchar* t = g_strdup_printf(_("Error during the read of %s file\nPlease check it"),fileName); Message(t,_("Error"),TRUE); if(t)g_free(t); } fclose(file); } else { { gchar* t = g_strdup_printf(_("Sorry, I cannot read the %s file\nI use the default values for the mm type"),fileName); Message(t,_("Warning"),TRUE); if(t)g_free(t); } for(i=0;iactive); gboolean reducedCoordinates =(GTK_IS_WIDGET(buttonReducedCoordinates)&& GTK_TOGGLE_BUTTON (buttonReducedCoordinates)->active); gdouble delta = 1; gboolean link = FALSE; gchar* fileNameBas = NULL; gdouble* akOverI = NULL; gint k = 0; gdouble* deltas = NULL; MMData* mmData = NULL; if(vibration.numberOfFrequencies<1) return; if(vibration.numberOfAtoms<1) return; if(buttonDirSelector) dirNameStr = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); if(!dirNameStr) return; if(entryFileName) fileNameStr = gtk_entry_get_text(GTK_ENTRY(entryFileName)); if(!fileNameStr) return; if(entryQMKeywords) QMkeys = gtk_entry_get_text(GTK_ENTRY(entryQMKeywords)); if(!QMkeys) return; if(entryModel) model = gtk_entry_get_text(GTK_ENTRY(entryModel)); if(!model) return; if(entryDelta) deltastr = gtk_entry_get_text(GTK_ENTRY(entryDelta)); if(!deltastr) return; delta = fabs(atof(deltastr)); if(delta==0) return; mmData =read_mm_data(dirNameStr); if(!mmData) return ; fileNameBas = g_path_get_basename(fileNameStr); for(i=strlen(fileNameBas);i>0;i--) if(fileNameBas[i]=='.') { fileNameBas[i]='\0'; break; } fileName = g_strdup_printf("%s%s%s_%d.ici",dirNameStr,G_DIR_SEPARATOR_S,fileNameBas,k); file = fopen(fileName, "w"); if(!file) { gchar* t = g_strdup_printf(_("Sorry\n I can not create %s file"),fileName); Message(t,_("Error"),TRUE); if(fileName) g_free(fileName); if(t)g_free(t); return; } /* Equilibrium geometry */ fprintf(file,"RunType= Energy\n"); fprintf(file,"Model= %s\n",model); fprintf(file,"QMKeys= %s\n",QMkeys); fprintf(file,"mopacCommand=mopac\n"); fprintf(file,"orcaCommand=orca\n"); fprintf(file,"fireflyCommand=firefly\n"); fprintf(file,"gaussianCommand=runGauss\n"); fprintf(file,"genericCommand=runGeneric\n"); add_cchemi_option(file, dirNameStr); fprintf(file,"#Equilibrium geometry, made in Gabedit\n"); fprintf(file,"#Geometry, nAtoms, charge, spin multiplicity.\n"); fprintf(file,"#For each atom : symbol, MMType, pdbType, residueName, numResidue, charge, layer, x(Ang),y,z, nconn, num1, type1, num2, type2,...\n"); fprintf(file,"Geometry\n"); fprintf(file,"%d %d %d\n",vibration.numberOfAtoms,totalCharge,spinMultiplicity); for(i=0;iactive) link = TRUE; for(j=0;jchild), "ComboSpinMultiplicity", comboSpinMultiplicity); setComboCharge(comboCharge); setComboSpinMultiplicity(comboSpinMultiplicity); g_signal_connect(G_OBJECT(GTK_BIN(comboCharge)->child),"changed", G_CALLBACK(changedEntryCharge),NULL); /*----------------------------------------------------------------------------------*/ i++; add_label_table(table,_(" Model "),i,0); add_label_table(table,":",i,1); entry = gtk_entry_new (); g_object_set_data(G_OBJECT(Wins), "EntryModel", entry); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,2,2+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),"Mopac"); gtk_editable_set_editable((GtkEditable*)entry,TRUE); gtk_widget_set_sensitive(entry, TRUE); /*----------------------------------------------------------------------------------*/ i++; add_label_table(table,_(" QM keywords "),i,0); add_label_table(table,":",i,1); entry = gtk_entry_new (); g_object_set_data(G_OBJECT(Wins), "EntryQMKeywords", entry); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,2,2+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),"PM6-DH+"); gtk_editable_set_editable((GtkEditable*)entry,TRUE); gtk_widget_set_sensitive(entry, TRUE); /*----------------------------------------------------------------------------------*/ i++; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); /*----------------------------------------------------------------------------------*/ i++; buttonReducedCoordinates = gtk_check_button_new_with_label (_("dimensionless reduced coordinates (step without unit)")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonReducedCoordinates), TRUE); gtk_table_attach(GTK_TABLE(table),buttonReducedCoordinates,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT(Wins), "ButtonReducedCoordinates", buttonReducedCoordinates); /*----------------------------------------------------------------------------------*/ i++; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); /*----------------------------------------------------------------------------------*/ i++; buttonDiagonal = gtk_check_button_new_with_label (_("Only diagonal terms")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonDiagonal), FALSE); gtk_table_attach(GTK_TABLE(table),buttonDiagonal,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT(Wins), "ButtonDiagonal", buttonDiagonal); /*----------------------------------------------------------------------------------*/ i++; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); /*----------------------------------------------------------------------------------*/ gtk_widget_show_all(table); return entry; } /********************************************************************************************************/ static void create_cchemi_qff_file_dlg() { GtkWidget *Win; GtkWidget *frame; GtkWidget *vboxall; GtkWidget* vbox; GtkWidget* entryKeywords; if(vibration.numberOfFrequencies<1) { gchar* t = g_strdup_printf(_("Sorry\n You should read the geometries befor")); Message(t,_("Error"),TRUE); return; } /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),"Create input files for CChemI"); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 2); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Input CChemI"); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(Win); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 2); gtk_box_pack_start(GTK_BOX(vboxall), frame,TRUE,TRUE,0); gtk_widget_show (frame); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); gtk_widget_realize(Win); entryKeywords = add_inputCChemI_qff_entrys(Win,vbox); add_cancel_ok_button(Win,vbox,entryKeywords,(GCallback)print_cchemi_qff_geometries); /* Show all */ gtk_widget_show_all (Win); } /********************************************************************************/ static void print_gaussian_along_vibration_one_geometry(gchar* fileNameBas, FILE* file, G_CONST_RETURN gchar* keys, gint mode, gdouble delta) { gint i; gchar ad = '+'; if(delta<0) ad ='-'; fprintf(file,"# %s\n",keys); fprintf(file,"# Test Symm(PG=C1)\n"); fprintf(file,"# Units(Ang,Deg)\n"); fprintf(file,"\nMode: freq=%lf Mass= %lf Q= Qeq %c %lf\n\n", vibration.modes[mode].frequence, vibration.modes[mode].effectiveMass, ad, fabs(delta)*BOHR_TO_ANG ); fprintf(file,"%d %d\n", totalCharge, spinMultiplicity); for(i=0;i0;i--) if(fileNameBas[i]=='.') { fileNameBas[i]='\0'; break; } j = rowSelected; print_gaussian_along_vibration_one_geometry(fileNameBas, file, allKeys, j, delta); fclose(file); if(fileNameBas) g_free(fileNameBas); gtk_widget_destroy(Win); { gchar* t = g_strdup_printf(_("The %s file was created"),fileName); Message(t,_("Error"),TRUE); if(t)g_free(t); } } /********************************************************************************/ static GtkWidget* add_inputGauss_entrys_along_one_frequency(GtkWidget *Wins,GtkWidget *vbox) { GtkWidget* entry; GtkWidget* sep; GtkWidget *table = gtk_table_new(11,4,FALSE); GtkWidget* comboSpinMultiplicity = NULL; GtkWidget* comboCharge = NULL; GtkWidget* buttonDirSelector = NULL; GtkWidget* entryFileName = NULL; GtkWidget* entryDelta = NULL; GtkWidget* label = NULL; gint i; gint j; totalCharge = 0; spinMultiplicity=1; gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; j = 0; add_label_table(table,_("Working Folder"),(gushort)i,(gushort)j); j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); j = 2; buttonDirSelector = gabedit_dir_button(); gtk_widget_set_size_request(GTK_WIDGET(buttonDirSelector),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),buttonDirSelector, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); g_object_set_data(G_OBJECT(Wins), "ButtonDirSelector", buttonDirSelector); /*----------------------------------------------------------------------------------*/ i++; j = 0; add_label_table(table,_("File name"),(gushort)i,(gushort)j); j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); j = 2; entryFileName = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryFileName),"freq.com"); gtk_widget_set_size_request(GTK_WIDGET(entryFileName),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryFileName, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); g_object_set_data(G_OBJECT(Wins), "EntryFileName", entryFileName); /*----------------------------------------------------------------------------------*/ i++; j = 0; add_label_table(table,_("Step (Ang)"),(gushort)i,(gushort)j); j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); j = 2; entryDelta = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryDelta),"0.1"); gtk_widget_set_size_request(GTK_WIDGET(entryDelta),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryDelta, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); g_object_set_data(G_OBJECT(Wins), "EntryDelta", entryDelta); /*----------------------------------------------------------------------------------*/ i++; comboCharge = addChargeToTable(table, i); /*----------------------------------------------------------------------------------*/ i++; comboSpinMultiplicity = addSpinToTable(table, i); /*----------------------------------------------------------------------------------*/ i++; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); if(GTK_IS_COMBO_BOX(comboCharge)) g_object_set_data(G_OBJECT (GTK_BIN(comboCharge)->child), "ComboSpinMultiplicity", comboSpinMultiplicity); setComboCharge(comboCharge); setComboSpinMultiplicity(comboSpinMultiplicity); g_signal_connect(G_OBJECT(GTK_BIN(comboCharge)->child),"changed", G_CALLBACK(changedEntryCharge),NULL); /*----------------------------------------------------------------------------------*/ i++; add_label_table(table,_(" Energy keywords "),i,0); add_label_table(table,":",i,1); entry = gtk_entry_new (); g_object_set_data(G_OBJECT(Wins), "EntryEnergyKeywords", entry); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,2,2+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),"B3LYP/6-311++G** SCF(Tight) Int=UltraFine"); gtk_editable_set_editable((GtkEditable*)entry,TRUE); gtk_widget_set_sensitive(entry, TRUE); /*----------------------------------------------------------------------------------*/ i++; add_label_table(table,_(" Prop. keywords "),i,0); add_label_table(table,":",i,1); entry = gtk_entry_new (); g_object_set_data(G_OBJECT(Wins), "EntryPropKeywords", entry); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,2,2+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),"NMR"); gtk_editable_set_editable((GtkEditable*)entry,TRUE); gtk_widget_set_sensitive(entry, TRUE); /*----------------------------------------------------------------------------------*/ i++; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); /*----------------------------------------------------------------------------------*/ i++; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); /*----------------------------------------------------------------------------------*/ gtk_widget_show_all(table); return entry; } /********************************************************************************************************/ static void create_gaussian_along_vibration_file_dlg() { GtkWidget *Win; GtkWidget *frame; GtkWidget *vboxall; GtkWidget* vbox; GtkWidget* entryKeywords; if(vibration.numberOfFrequencies<1) { gchar* t = g_strdup_printf(_("Sorry\n You should read the geometries befor")); Message(t,_("Error"),TRUE); return; } /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),"Create a Gaussian input file along the selected mode"); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 2); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Input Gaussian"); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(Win); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 2); gtk_box_pack_start(GTK_BOX(vboxall), frame,TRUE,TRUE,0); gtk_widget_show (frame); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); gtk_widget_realize(Win); entryKeywords = add_inputGauss_entrys_along_one_frequency(Win,vbox); add_cancel_ok_button(Win,vbox,entryKeywords,(GCallback)print_gaussian_along_vibration_geometries); /* Show all */ gtk_widget_show_all (Win); } /********************************************************************************/ static void reset_last_directory(GtkWidget *dirSelector, gpointer data) { gchar* dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); gchar* filename = NULL; if(dirname && strlen(dirname)>0) { if(dirname[strlen(dirname)-1] != G_DIR_SEPARATOR) filename = g_strdup_printf("%s%sdump.txt",dirname,G_DIR_SEPARATOR_S); else filename = g_strdup_printf("%sdump.txt",dirname); } else { dirname = g_strdup(g_get_home_dir()); filename = g_strdup_printf("%s%sdump.txt",dirname,G_DIR_SEPARATOR_S); } if(dirname) g_free(dirname); if(filename) { set_last_directory(filename); g_free(filename); } } /********************************************************************************/ static void set_directory(GtkWidget *win, gpointer data) { GtkWidget *dirSelector; dirSelector = selctionOfDir(reset_last_directory, "Set folder", GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); gtk_window_set_transient_for(GTK_WINDOW(dirSelector),GTK_WINDOW(PrincipalWindow)); gtk_window_set_transient_for(GTK_WINDOW(dirSelector),GTK_WINDOW(WinDlg)); } /********************************************************************************/ void init_vibration() { vibration.numberOfAtoms = 0; vibration.geometry = NULL; vibration.numberOfFrequencies = 0; vibration.modes = NULL; vibration.scal = 0.5; vibration.threshold = 0.001; /* Bohr*/ vibration.velocity = 0.1; vibration.radius = 0.1; vibration.nSteps = 4; rowSelected = -1; ShowVibration = FALSE; } /********************************************************************************/ static void free_vibration() { gint i; gint j; if(vibration.geometry) { for(i=0;ivibration.modes[j].frequence) k = j; if(k!=i) { VibrationMode v = vibration.modes[i]; vibration.modes[i] = vibration.modes[k]; vibration.modes[k] = v; } } } } /********************************************************************************/ static void remove_modes(gint from, gint to) { gint i; gint j; gint d = to - from + 1; if(d<1) return; if(vibration.numberOfFrequencies == d) { free_vibration(); return; } if(vibration.modes) { for(i=from;i<=to;i++) { if(vibration.modes[i].symmetry) g_free(vibration.modes[i].symmetry); for(j=0;j<3;j++) if(vibration.modes[i].vectors[j]) g_free(vibration.modes[i].vectors[j]); } for(i=from;i=2) GeomOrb[j].Symb[1]=tolower(GeomOrb[j].Symb[1]); GeomOrb[j].Prop = prop_atom_get(GeomOrb[j].Symb); GeomOrb = g_realloc(GeomOrb,(j+2)*sizeof(TypeGeomOrb)); j++; } fclose(fd); Ncenters = j; GeomOrb = g_realloc(GeomOrb,Ncenters*sizeof(TypeGeomOrb)); RebuildGeom = TRUE; buildBondsOrb(); reset_grid_limits(); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); glarea_rafresh(GLArea); return TRUE; } /********************************************************************************/ static gboolean read_gabedit_molden_frequencies(gchar *FileName) { gchar t[BSIZE]; gboolean OK; FILE *fd; guint taille=BSIZE; gint j; gint k; gint ne; fd = FOpen(FileName, "rb"); OK=FALSE; while(fd && !feof(fd)) { { char* e = fgets(t,taille,fd);} if ( strstr( t,"[FREQ]") ) { OK = TRUE; break; } } if(!OK) { if(fd) fclose(fd); return FALSE; } vibration.numberOfFrequencies = 0; vibration.modes = g_malloc(sizeof(VibrationMode)); j = 0; while(!feof(fd) && OK ) { if(!fgets(t,taille,fd)) break; if(strstr(t,"[")) break; if(this_is_a_backspace(t)) break; ne = sscanf(t,"%lf",&vibration.modes[j].frequence); if(ne != 1) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not read frequencies from '%s' file\n"),FileName); Message(buffer,_("Error"),TRUE); free_vibration(); fclose(fd); return FALSE; } vibration.modes[j].symmetry = g_strdup("Unknown"); for(k=0;k<3;k++) vibration.modes[j].vectors[k]= g_malloc(vibration.numberOfAtoms*sizeof(gdouble)); vibration.numberOfFrequencies++; vibration.modes = g_realloc( vibration.modes, (vibration.numberOfFrequencies+1)*sizeof(VibrationMode)); j++; } for(j=0; j=numberOfFrequencies) {OK = FALSE; break;} nfs++; vibration.modes[j].frequence = f; vibration.modes[j].IRIntensity = 0.0; vibration.modes[j].effectiveMass = 0.0; vibration.modes[j].RamanIntensity = 0.0; vibration.modes[j].symmetry = g_strdup(sym); for(c=0;c<3;c++) { vibration.modes[j].vectors[c]= g_malloc(vibration.numberOfAtoms*sizeof(gdouble)); for(i=0;i object for obtain the normal modes from MPQC\n" ) , FileName); Message(buffer,_("Error"),TRUE); return FALSE; } vibration.numberOfFrequencies = j+1; vibration.modes = g_realloc(vibration.modes,vibration.numberOfFrequencies*sizeof(VibrationMode)); return TRUE; } /********************************************************************************/ static gboolean read_mopac_aux_modes(FILE* fd, gchar *FileName) { gchar** freqs = NULL; gint nFreqs = 0; gint numberOfFrequencies = 0; gchar** symmetries = NULL; gint nSymmetries = 0; gchar** modes = NULL; gint nModes = 0; gchar** intensities = NULL; gchar** effectiveMass = NULL; gint nIntensities = 0; gint nEffectiveMass = 0; gint i,k, c, im; if(vibration.numberOfAtoms<1) return FALSE; fseek(fd, 0, SEEK_SET); freqs = get_one_block_from_aux_mopac_file(fd, "VIB._FREQ:CM(-1)[", &nFreqs); /* numberOfFrequencies = nFreqs-6;*/ numberOfFrequencies = nFreqs; if(!freqs || numberOfFrequencies 0) GeomOrb = g_realloc(GeomOrb,Ncenters*sizeof(TypeGeomOrb)); else free_geometry(); RebuildGeom = TRUE; buildBondsOrb(); reset_grid_limits(); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); glarea_rafresh(GLArea); return TRUE; } /********************************************************************************/ static gint read_molpro_modes_str(FILE* fd, gchar *FileName, gchar* str) { gchar t[BSIZE]; gchar sdum1[BSIZE]; gchar sdum2[BSIZE]; gboolean OK; guint taille=BSIZE; gint i; gint j; gint k; gint c; gint ne; gint nf; gdouble freq[5]; gdouble IRIntensity[5]; gint nfMax = 5; if(vibration.numberOfAtoms<1) return FALSE; OK=FALSE; while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if ( strstr( t,str) ) { OK = TRUE; break; } } if(!OK) return 1; j = vibration.numberOfFrequencies; while(!feof(fd)) { if(!fgets(t,taille,fd)) { vibration.numberOfFrequencies = j+nfMax; return 2; } if(atof(t)==0) if(!fgets(t,taille,fd)) break; if(!fgets(t,taille,fd)) break; if(!strstr(t,"Wavenumbers")) break; nf = sscanf(t,"%s %s %lf %lf %lf %lf %lf", sdum1,sdum2, &freq[0],&freq[1],&freq[2],&freq[3],&freq[4]); nf -= 2; if(strstr(str,"imaginary")) for(k=0;k1 || normalModesImag>1) { gchar buffer[BSIZE]; free_vibration(); sprintf(buffer,_("Sorry, I can not read the frequencies from '%s' file\n"),FileName); Message(buffer,_("Error"),TRUE); return FALSE; } return TRUE; } /********************************************************************************/ static void read_molpro_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; gint j; FILE* file; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); file = FOpen(FileName, "rb"); stop_vibration(NULL, NULL); if(!file) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not open '%s' file\n"),FileName); Message(buffer,_("Error"),TRUE); return; } if(read_molpro_geom(file,FileName)) { free_vibration(); vibration.numberOfAtoms = Ncenters; vibration.geometry = g_malloc(Ncenters*sizeof(VibrationGeom)); for(j=0;j=vibration.numberOfFrequencies) break; } vibration.modes = g_realloc(vibration.modes,vibration.numberOfFrequencies*sizeof(VibrationMode)); return 0; } /********************************************************************************/ static gint read_dalton_modes_MOLHES(FILE* fd, gchar *FileName) { gchar t[BSIZE]; gchar sdum1[100]; gchar sdum2[100]; gboolean OK; guint taille=BSIZE; gint i; gint j; gint c; gint ne; gint nf; /* gint nfMax = 5;*/ gdouble freq; gint numModes[5]; gint numMode; gchar sym[50]; gdouble IR = 0; gint nModes = vibration.numberOfAtoms*3; gchar sdum[8][50]; if(vibration.numberOfAtoms<1) return 1; OK=FALSE; while(!feof(fd)) { if(!fgets(t,taille,fd))break; if ( strstr( t,"Vibrational Frequencies and IR Intensities") ) { OK = TRUE; break; } } if(!OK) return 1; OK=FALSE; while(!feof(fd)) { if(!fgets(t,taille,fd))break; if ( strstr( t,"cm-1") && strstr( t,"hartrees") ) { if(!fgets(t,taille,fd))break; OK = TRUE; break; } } if(!OK) return 1; vibration.modes = g_realloc(vibration.modes,(nModes)*sizeof(VibrationMode)); j = 0; while(!feof(fd)) { if(!fgets(t,taille,fd)) { vibration.numberOfFrequencies = j; vibration.modes = g_realloc(vibration.modes,(j+1)*sizeof(VibrationMode)); return 2; } if(this_is_a_backspace(t)) continue; if(strstr(t,"Normal Coordinates")) break; nf = sscanf(t,"%d %s %s %s %s", &numMode, sym, sdum1,sdum2, sdum2); if(nf<3) { vibration.numberOfFrequencies = j; vibration.modes = g_realloc(vibration.modes,(j+1)*sizeof(VibrationMode)); return 2; } if(strstr(sdum1,"i")) freq = -atof(sdum1); else freq = atof(sdum1); if(nf==5) IR = atof(sdum2); else IR = 0.0; if(numMode>nModes) { vibration.numberOfFrequencies = j; vibration.modes = g_realloc(vibration.modes,(j+1)*sizeof(VibrationMode)); return 2; } vibration.modes[numMode-1].frequence = freq; vibration.modes[numMode-1].IRIntensity = IR; vibration.modes[numMode-1].effectiveMass = 1.0; vibration.modes[numMode-1].RamanIntensity = 0.0; vibration.modes[numMode-1].symmetry = g_strdup(sym); for(c=0;c<3;c++) vibration.modes[numMode-1].vectors[c]= g_malloc(vibration.numberOfAtoms*sizeof(gdouble)); j++; } if(j<1) { if(vibration.modes) g_free(vibration.modes); vibration.modes = NULL; return 2; } vibration.numberOfFrequencies = j; vibration.modes = g_realloc(vibration.modes,(j)*sizeof(VibrationMode)); if(!strstr(t,"Normal Coordinates")) return 2; if(!fgets(t,taille,fd)) return 1; /* ---- */ if(!fgets(t,taille,fd)) return 1; /* backspace */ j = 0; while(!feof(fd)) { gint nft = 0; if(!fgets(t,taille,fd)) /* backspace */ { return 2; } if(!fgets(t,taille,fd)) /* num modes and frequencies */ { return 2; } nft = sscanf(t,"%d %s %d %s %d %s %d %s %d %s", &numModes[0], sdum[0], &numModes[1], sdum[1], &numModes[2], sdum[2], &numModes[3], sdum[3], &numModes[4], sdum[4]); if(nft<2) return 1; if(!fgets(t,taille,fd)) return 2; /* --------- */ if(!fgets(t,taille,fd)) return 2; /*backspace */ nft /=2; ne = 0; for(i=0;i=vibration.numberOfFrequencies) break; } vibration.modes = g_realloc(vibration.modes,vibration.numberOfFrequencies*sizeof(VibrationMode)); return 0; } /********************************************************************************/ static gint read_dalton_modes(FILE* file, gchar *FileName) { gint ret =0; gint j; free_vibration(); vibration.numberOfAtoms = Ncenters; vibration.geometry = g_malloc(Ncenters*sizeof(VibrationGeom)); for(j=0;j3) { break; } if(!fgets(t,taille,fd)) break; sscanf(t,"%s %s %s",sym[0],sym[1],sym[2]); if(!fgets(t,taille,fd)) break; changeDInE(t); sscanf(t,"%s %s %lf %lf %lf", sdum1,sdum2, &freq[0],&freq[1],&freq[2]); while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if(strstr(t,"Red.")) { changeDInE(t); sscanf(t,"%s %s %s %lf %lf %lf", sdum1,sdum2, sdum3, &mass[0],&mass[1],&mass[2]); break; } } while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if(strstr(t,"IR Inten")) { changeDInE(t); sscanf(t,"%s %s %s %lf %lf %lf", sdum1,sdum2, sdum3, &IRIntensity[0],&IRIntensity[1],&IRIntensity[2]); break; } } while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if(strstr(t,"Raman")) { changeDInE(t); sscanf(t,"%s %s %s %lf %lf %lf", sdum1,sdum2, sdum3, &RamanIntensity[0],&RamanIntensity[1],&RamanIntensity[2]); break; } if(strstr(t,"Atom ") && strstr(t," AN")) break; } if(!(strstr(t,"Atom ") && strstr(t," AN"))) while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if(strstr(t,"Atom ") && strstr(t," AN")) break; } nfOld = vibration.numberOfFrequencies; vibration.numberOfFrequencies += nf; vibration.modes = g_realloc( vibration.modes, vibration.numberOfFrequencies*sizeof(VibrationMode)); for(k=0;k0) GeomOrb = g_realloc(GeomOrb,Ncenters*sizeof(TypeGeomOrb)); else free_geometry(); RebuildGeom = TRUE; buildBondsOrb(); reset_grid_limits(); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); glarea_rafresh(GLArea); return TRUE; } /********************************************************************************/ static gboolean read_adf_modes(FILE* fd, gchar *FileName) { gchar t[BSIZE]; gchar sdum1[BSIZE]; gchar sdum2[BSIZE]; gchar sdum3[BSIZE]; gboolean OK; guint taille=BSIZE; gint i; gint j; gint k; gint c; gint ne; gint nf; gdouble freq[5]; gint nfMax = 3; if(vibration.numberOfAtoms<1) return FALSE; OK=FALSE; while(!feof(fd)) { { char* e = fgets(t,taille,fd);} /* printf("%s",t);*/ if ( strstr( t,"Vibrations and Normal Modes") ) { OK = TRUE; break; } } if(OK) { OK=FALSE; if(fgets(t,taille,fd)) if(fgets(t,taille,fd)) if(fgets(t,taille,fd)) if(fgets(t,taille,fd)) OK = TRUE; } if(!OK) { gchar buffer[BSIZE]; free_vibration(); sprintf(buffer,_("Sorry, I can not read the frequencies from '%s' file\n"),FileName); Message(buffer,_("Error"),TRUE); return FALSE; } j = 0; vibration.modes = g_malloc(sizeof(VibrationMode)); vibration.numberOfFrequencies = 0; while(!feof(fd)) { { char* e = fgets(t,taille,fd);} { char* e = fgets(t,taille,fd);} if(!fgets(t,taille,fd)) { gchar buffer[BSIZE]; vibration.numberOfFrequencies = j+nfMax; free_vibration(); sprintf(buffer,_("Sorry, I can not read the frequencies from '%s' file\n"),FileName); Message(buffer,_("Error"),TRUE); return FALSE; } nf = sscanf(t,"%s %lf %lf %lf", sdum1, &freq[0],&freq[1],&freq[2]); nf -= 1; if(nf<1) break; if(!fgets(t,taille,fd)) break; vibration.modes = g_realloc(vibration.modes,(j+nfMax)*sizeof(VibrationMode)); for(k=0;k0) read_fchk_gaussian_file_frequencies(FileName); } /********************************************************************************/ static gboolean read_qchem_file_frequencies(gchar *FileName) { gchar t[BSIZE]; gchar sdum1[BSIZE]; gchar sdum2[BSIZE]; gboolean OK; FILE *fd; guint taille=BSIZE; gint idum,jdum,kdum; gint nf; gdouble freq[3] = {0,0,0}; gdouble IRIntensity[3] = {0,0,0}; gdouble mass[3] = {1,1,1}; gdouble RamanIntensity[3]={ 0,0,0}; gdouble v[3][3]; gchar sym[3][BSIZE]; gint j; gint k; gint nfOld; init_dipole(); free_vibration(); vibration.numberOfAtoms = Ncenters; vibration.geometry = g_malloc(Ncenters*sizeof(VibrationGeom)); for(j=0;j3) break; /* if(!fgets(t,taille,fd)) break; sscanf(t,"%s %s %s",sym[0],sym[1],sym[2]); */ sprintf(sym[0],"UNKNOWN"); sprintf(sym[1],"UNKNOWN"); sprintf(sym[2],"UNKNOWN"); if(!fgets(t,taille,fd)) break; sscanf(t,"%s %lf %lf %lf", sdum1, &freq[0],&freq[1],&freq[2]); while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if(strstr(t,"Red.")) { sscanf(t,"%s %s %lf %lf %lf", sdum1,sdum2, &mass[0],&mass[1],&mass[2]); break; } } RamanIntensity[0] = 0; RamanIntensity[1] = 0; RamanIntensity[2] = 0; while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if(strstr(t,"IR Intens:")) { sscanf(t,"%s %s %lf %lf %lf", sdum1,sdum2, &IRIntensity[0],&IRIntensity[1],&IRIntensity[2]); } if(strstr(t,"Raman Intens")) { sscanf(t,"%s %s %lf %lf %lf", sdum1,sdum2, &RamanIntensity[0],&RamanIntensity[1],&RamanIntensity[2]); } if(strstr(t,"X Y Z")) break; } if(!strstr(t,"X Y Z")) while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if(strstr(t,"X Y Z")) break; } nfOld = vibration.numberOfFrequencies; vibration.numberOfFrequencies += nf; vibration.modes = g_realloc( vibration.modes, vibration.numberOfFrequencies*sizeof(VibrationMode)); for(k=0;k=2 ) { { char* e = fgets(t,taille,fd);} { char* e = fgets(t,taille,fd);} { char* e = fgets(t,taille,fd);} { char* e = fgets(t,taille,fd);} OK = TRUE; break; } } if(!OK) break; while(!feof(fd) ) { nf = sscanf(t,"%d %d %d %d %d %d",&idum,&idum,&idum,&idum,&idum,&idum); if(nf<1) break; for(i=0;i<6;i++) sprintf(sym[i],"UNKNOWN"); if(!fgets(t,taille,fd)) break;/* back space line */ if(!fgets(t,taille,fd)) break; sscanf(t,"%s %lf %lf %lf %lf %lf %lf", sdum1,&freq[0],&freq[1],&freq[2],&freq[3],&freq[4],&freq[5]); if(!fgets(t,taille,fd)) break;/* back space line */ for(i=0;i<6;i++) RamanIntensity[i] = 0; nfOld = vibration.numberOfFrequencies; vibration.numberOfFrequencies += nf; vibration.modes = g_realloc( vibration.modes, vibration.numberOfFrequencies*sizeof(VibrationMode)); for(k=0;k0) for(i=0;i<3;i++) Ni += vibration.modes[nfOld].vectors[i][j]*vibration.modes[nfOld].vectors[i][j]/mass; } if(Ni>0)vibration.modes[nfOld].effectiveMass /= Ni; /* printf("freq %f masseff %f Ni=%f\n",vibration.modes[nfOld].frequence, vibration.modes[nfOld].effectiveMass,Ni);*/ for(j=0;j0) for(i=0;i<3;i++) vibration.modes[nfOld].vectors[i][j] /= sqrt(mass); } } if(!fgets(t,taille,fd)) break;/* back space */ if(!fgets(t,taille,fd)) break; } }while(!feof(fd)); rafreshList(); if(vibration.numberOfFrequencies<1) { GtkWidget* w = NULL; gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not read frequencies from '%s' file\n"),FileName); w = Message(buffer,_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (w), TRUE); return FALSE; } return TRUE; } /********************************************************************************/ static void read_psicode_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); stop_vibration(NULL, NULL); gl_read_last_psicode_file(SelecFile, response_id); read_psicode_file_frequencies(FileName); } /********************************************************************************/ static gboolean read_orca_file_frequencies(gchar *FileName) { gchar t[BSIZE]; gchar sdum1[BSIZE]; gboolean OK; FILE *fd; guint taille=BSIZE; gint nf; gint n; gdouble freq = 0; gdouble v[6] ={0,0,0,0,0,0}; gint j; gint k; gint nfOld; gint c; gboolean Begin = TRUE; gint nblock, iblock; gint ix; gdouble dum; init_dipole(); free_vibration(); vibration.numberOfAtoms = Ncenters; vibration.geometry = g_malloc(Ncenters*sizeof(VibrationGeom)); printf("nAtoms = %d\n",Ncenters); for(j=0;j2) ix = 0; } if(!fgets(t,taille,fd)) {OK = FALSE;break;};/* new block */ } if(!OK) break; Begin = FALSE; OK=FALSE; while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if (strstr( t,"IR SPECTRUM") ) OK = TRUE; if (strstr( t,"TX") && strstr( t,"TY") && strstr( t,"TZ") && OK ){ OK = TRUE; break;} } if(!OK) {continue;} { char* e = fgets(t,taille,fd);} while(!feof(fd) ) { if(!fgets(t,taille,fd)) break; n = sscanf(t,"%s %lf %lf", sdum1, &freq,&dum); if(n!=3) { break; } k = atoi(t); vibration.modes[k].IRIntensity = dum; } if(!OK) break; OK=FALSE; while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if (strstr( t,"RAMAN SPECTRUM") ) OK = TRUE; if (strstr( t,"Activity") && strstr( t,"Depolarization") && OK ){ OK = TRUE; break;} } if(!OK) {continue;} { char* e = fgets(t,taille,fd);} while(!feof(fd) ) { if(!fgets(t,taille,fd)) break; n = sscanf(t,"%s %lf %lf", sdum1, &freq,&dum); if(n!=3) { break; } k = atoi(t); vibration.modes[k].RamanIntensity = dum; } if(!OK) break; break; }while(!feof(fd)); if((Begin && !OK) || vibration.numberOfFrequencies<1) { GtkWidget* w = NULL; gchar buffer[BSIZE]; vibration.numberOfFrequencies = Ncenters*3; free_vibration(); sprintf(buffer,_("Sorry, I can not read frequencies from '%s' file\n"),FileName); w = Message(buffer,_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (w), TRUE); rafreshList(); return FALSE; } else { GtkWidget* w = NULL; gchar buffer[BSIZE]; sprintf(buffer,_("Warning, the effective masses are not available in an orca ourput file\n" "It is not important for the visualization,\n" "however, it is if you want to generate a geometry along a vibrational mode.\n" "These masses are set here to 1.0\n" ) ); w = Message(buffer,_("Warning"),TRUE); gtk_window_set_modal (GTK_WINDOW (w), TRUE); } /* in orca output file, the mode are already normalized as gaussian*/ /* normalize_modes();*/ rafreshList(); return TRUE; } /********************************************************************************/ static void read_orca_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); stop_vibration(NULL, NULL); gl_read_last_orca_file(SelecFile, response_id); read_orca_file_frequencies(FileName); } /********************************************************************************/ static void read_orca_hessian_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); stop_vibration(NULL, NULL); gl_read_hessian_orca_file(SelecFile, response_id); read_orca_hessian_file_frequencies(FileName); } /********************************************************************************/ static void read_dalton_file_dlg() { GtkWidget* filesel = file_chooser_open(read_dalton_file, "Read last geometry and frequencies from a Dalton output file", GABEDIT_TYPEFILE_DALTON,GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static void read_gamess_file_dlg() { GtkWidget* filesel = file_chooser_open(read_gamess_file, "Read last geometry and frequencies from a Gamess output file", GABEDIT_TYPEFILE_GAMESS,GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static void read_gaussian_file_dlg() { GtkWidget* filesel = file_chooser_open(read_gaussian_file, "Read last geometry and frequencies from a Gaussian output file", GABEDIT_TYPEFILE_GAUSSIAN,GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static void read_fchk_gaussian_file_dlg() { GtkWidget* filesel = file_chooser_open(read_fchk_gaussian_file, "Read geometry and frequencies from a Gaussian fchk file", GABEDIT_TYPEFILE_GAUSSIAN_FCHK,GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static void read_adf_file_dlg() { GtkWidget* filesel = file_chooser_open(read_adf_file, "Read last geometry and frequencies from a ADF output file", GABEDIT_TYPEFILE_ADF,GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static void read_qchem_file_dlg() { GtkWidget* filesel = file_chooser_open(read_qchem_file, "Read last geometry and frequencies from a Q-Chem output file", GABEDIT_TYPEFILE_QCHEM,GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static void read_nwchem_file_dlg() { GtkWidget* filesel = file_chooser_open(read_nwchem_file, "Read last geometry and frequencies from a NWChem output file", GABEDIT_TYPEFILE_NWCHEM,GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static void read_psicode_file_dlg() { GtkWidget* filesel = file_chooser_open(read_psicode_file, "Read last geometry and frequencies from a Psicode output file", GABEDIT_TYPEFILE_PSICODE,GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static void read_orca_file_dlg() { GtkWidget* filesel = file_chooser_open(read_orca_file, "Read last geometry and frequencies from a Orca output file", GABEDIT_TYPEFILE_QCHEM,GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static void read_orca_hessian_file_dlg() { GtkWidget* filesel = file_chooser_open(read_orca_hessian_file, "Read geometry&hessian from a Orca output file", GABEDIT_TYPEFILE_QCHEM,GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static void save_gabedit_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); save_vibration_gabedit_format(FileName); } /********************************************************************************/ static void save_gabedit_file_dlg() { GtkWidget* filesel; if(vibration.numberOfFrequencies<1) { return; } filesel = file_chooser_save(save_gabedit_file, "Save frequencies in gabedit file format", GABEDIT_TYPEFILE_GABEDIT,GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static void play_vibration(GtkWidget *win, gpointer data) { play = TRUE; gtk_widget_set_sensitive(PlayButton, FALSE); gtk_widget_set_sensitive(StopButton, TRUE); gtk_window_set_modal (GTK_WINDOW (WinDlg), TRUE); ShowVibration = FALSE; animate_vibration(); } /********************************************************************************/ static void stop_vibration(GtkWidget *win, gpointer data) { play = FALSE; if(GTK_IS_WIDGET(PlayButton)) gtk_widget_set_sensitive(PlayButton, TRUE); if(GTK_IS_WIDGET(StopButton)) gtk_widget_set_sensitive(StopButton, FALSE); if(GTK_IS_WIDGET(WinDlg)) gtk_window_set_modal (GTK_WINDOW (WinDlg), FALSE); while( gtk_events_pending() ) gtk_main_iteration(); reset_geom_vibration(); buildBondsOrb(); RebuildGeom = TRUE; ShowVibration = TRUE; init_dipole(); init_atomic_orbitals(); free_iso_all(); if(this_is_an_object((GtkObject*)GLArea)) glarea_rafresh(GLArea); } /********************************************************************************/ static void destroyDlg(GtkWidget *win, gpointer data) { createBMPFiles = FALSE; numBMPFile = 0; createPPMFiles = FALSE; numPPMFile = 0; createPOVFiles = FALSE; numPOVFile = 0; delete_child(WinDlg); } /********************************************************************************/ static void destroyVibrationDlg(GtkWidget *win) { createBMPFiles = FALSE; numBMPFile = 0; createPPMFiles = FALSE; numPPMFile = 0; createPOVFiles = FALSE; numPOVFile = 0; stop_vibration(NULL, NULL); gtk_widget_destroy(WinDlg); WinDlg = NULL; rowSelected = -1; ShowVibration = FALSE; } /**********************************************************************************/ static void set_sensitive_option(GtkUIManager *manager, gchar* path) { GtkWidget *wid = gtk_ui_manager_get_widget (manager, path); gboolean sensitive = TRUE; if(vibration.numberOfAtoms<1) sensitive = FALSE; if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid, sensitive); } /**********************************************************************************/ static gboolean show_menu_popup(GtkUIManager *manager, guint button, guint32 time) { GtkWidget *menu = gtk_ui_manager_get_widget (manager, "/MenuVibration"); if (GTK_IS_MENU (menu)) { set_sensitive_option(manager,"/MenuVibration/DrawIRSpectrum"); set_sensitive_option(manager,"/MenuVibration/DrawRamanSpectrum"); set_sensitive_option(manager,"/MenuVibration/SaveGabedit"); set_sensitive_option(manager,"/MenuVibration/CreateGaussInputVibCorrection"); set_sensitive_option(manager,"/MenuVibration/CreateGaussInputQFF"); set_sensitive_option(manager,"/MenuVibration/CreateCChemIInputQFF"); set_sensitive_option(manager,"/MenuVibration/CreateGaussInputVibOneMode"); set_sensitive_option(manager,"/MenuVibration/CreateiGVPT2File"); set_sensitive_option(manager,"/MenuVibration/RuniGVPT2"); set_sensitive_option(manager,"/MenuVibration/RemoveSelectedMode"); set_sensitive_option(manager,"/MenuVibration/RemoveBeforeSelectedMode"); set_sensitive_option(manager,"/MenuVibration/RemoveAfterSelectedMode"); set_sensitive_option(manager,"/MenuVibration/SortModes"); gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, time); return TRUE; } else printf("Erreur menu n'est pas un menu\n"); return FALSE; } /********************************************************************************/ static void event_dispatcher(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; gint row = -1; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); row = atoi(gtk_tree_path_to_string(path)); gtk_tree_path_free(path); } } rowSelected = row; if(!play) stop_vibration(NULL, NULL); if (event->type == GDK_BUTTON_PRESS && ((GdkEventButton *) event)->button == 3) { GdkEventButton *bevent = (GdkEventButton *) event; GtkUIManager *manager = GTK_UI_MANAGER(user_data); show_menu_popup(manager, bevent->button, bevent->time); } } /********************************************************************************/ static void rafreshList() { gint i; gchar *texts[4]; gint k; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(treeView); GtkTreeStore *store = GTK_TREE_STORE (model); gtk_tree_store_clear(store); model = GTK_TREE_MODEL (store); for(i=0;i0) { GtkTreePath *path; rowSelected = 0; path = gtk_tree_path_new_from_string ("0"); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeView)), path); gtk_tree_path_free(path); } reset_parameters(NULL,NULL); } /*****************************************************************************/ static gchar* get_format_image_from_option() { if(strcmp(formatFilm,"BMP")==0) return "bmp"; if(strcmp(formatFilm,"PPM")==0) return "ppm"; if(strcmp(formatFilm,"PNG")==0) return "png"; if(strcmp(formatFilm,"JPEG")==0) return "jpg"; if(strcmp(formatFilm,"PNG transparent")==0) return "png"; if(strcmp(formatFilm,"Povray")==0) return "pov"; return "UNK"; } /********************************************************************************/ static void filmSelected(GtkWidget *widget) { if(GTK_IS_WIDGET(buttonCheckFilm)&& GTK_TOGGLE_BUTTON (buttonCheckFilm)->active) { createFilm = TRUE; if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, TRUE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, TRUE); } else { createFilm = FALSE; if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); } } /********************************************************************************/ static void showMessageEnd() { gchar* format =get_format_image_from_option(); gchar* message = messageAnimatedImage(format); gchar* t = g_strdup_printf(_("\nA series of gab*.%s files was created in \"%s\" directeory.\n\n\n%s") , format, get_last_directory(),message); GtkWidget* winDlg = Message(t,_("Info"),TRUE); g_free(message); gtk_window_set_modal (GTK_WINDOW (winDlg), TRUE); g_free(t); } /********************************************************************************/ static void unActivateFilm() { createFilm = FALSE; numFileFilm = 0; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCheckFilm), FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); } /********************************************************************************************************/ static void set_format_film(GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } if(!data) return; sprintf(formatFilm ,"%s",(gchar*)data); } /********************************************************************************************************/ static GtkWidget *create_list_of_formats() { GtkTreeIter iter; GtkListStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; gint i; gint k; gchar* options[] = {"BMP","PPM", "JPEG", "PNG", "PNG transparent", "Povray"}; guint numberOfElements = G_N_ELEMENTS (options); k = 0; store = gtk_list_store_new (1,G_TYPE_STRING); for(i=0;i1 || k<-1) { k -= step; step = - step; k += step; } if(fabs(k+1)<1e-8) { if(numFileFilm>0) showMessageEnd(); unActivateFilm(); } } if(numFileFilm>0) showMessageEnd(); unActivateFilm(); if(GTK_IS_WIDGET(buttonCheckFilm)) gtk_widget_set_sensitive(buttonCheckFilm, TRUE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(EntryNSteps)) gtk_widget_set_sensitive(EntryNSteps, TRUE); if(GTK_IS_WIDGET(LabelNSteps)) gtk_widget_set_sensitive(LabelNSteps, TRUE); stop_vibration(NULL, NULL); } /********************************************************************************************/ static void help_supported_format() { gchar temp[BSIZE]; GtkWidget* win; sprintf(temp, _( " You can read frequencies and normal modes from :\n" " * a Gabedit input file.\n" " * a Gaussian (g98 and g03) output file.\n" " * a Molpro output file.\n" " * a MPQC output file.\n" " * a ADF output file. Only the 2004 version of ADF is supported\n" " * a Molden input file.\n" ) ); win = Message(temp," Info ",FALSE); gtk_window_set_modal (GTK_WINDOW (win), TRUE); } /***************************************************************************/ static void help_animated_file() { gchar* temp = NULL; GtkWidget* win; temp = g_strdup( _( " For create an animated file :\n" " ============================\n" " 1) Read frequencies and normal modes from a Gaussian, Molpro, Gabedit, Molden, ADF or MPQC output file.\n" " 2) Select \"create a series of BMP (or PPM or POV) images\" button.\n" " You can select your favorite directory by clicking to \"Directory\" button.\n" " 3) Click to Play button.\n" " 4) After on cycle Gabedit create a series of BMP(gab*.bmp) or PPM (gab*.ppm) or POV(gab*.pov) files.\n" " From these files, you can create a gif or a png animated file using convert software.\n" " with \"convert -delay 10 -loop 1000 gab*.bmp imageAnim.gif\" command you can create a gif animated file.\n" " with \"convert -delay 10 -loop 1000 gab*.bmp imageAnim.mng\" command you can create a png animated file.\n\n" " For gab*.pov files :\n" " You must initially create files gab*.bmp using gab*.pov files.\n" " Then you can create the animated file using gab*.bmp file.\n\n" " You can use the xPovAnim script (from utils/povray directory) for create the gif animated file from gab*.pov files.\n\n" " convert is a free software. You can download this(for any system) from http://www.imagemagick.org\n" " povray is a free software. You can download this(for any system) from http://www.povray.org\n\n" ) ); win = Message(temp," Info ",FALSE); gtk_window_set_modal (GTK_WINDOW (win), TRUE); g_free(temp); } /*********************************************************************************************************************/ static void activate_action (GtkAction *action) { const gchar *name = gtk_action_get_name (action); /* const gchar *typename = G_OBJECT_TYPE_NAME (action);*/ if(!strcmp(name, "File")) { GtkUIManager *manager = g_object_get_data(G_OBJECT(action), "Manager"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/SaveGabedit"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/CreateGaussInputVibCorrection"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/CreateGaussInputQFF"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/CreateCChemIInputQFF"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/CreateGaussInputVibOneMode"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/CreateiGVPT2File"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/RuniGVPT2"); } else if(!strcmp(name, "Tools")) { GtkUIManager *manager = g_object_get_data(G_OBJECT(action), "Manager"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/Tools/DrawIRSpectrum"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/Tools/DrawRamanSpectrum"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/Tools/RemoveSelectedMode"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/Tools/RemoveBeforeSelectedMode"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/Tools/RemoveAfterSelectedMode"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/Tools/SortModes"); } else if(!strcmp(name, "ReadAuto")) read_modes_dlg(); else if(!strcmp(name, "ReadGabedit")) read_gabedit_file_dlg(); else if(!strcmp(name, "ReadDalton")) read_dalton_file_dlg(); else if(!strcmp(name, "ReadGamess")) read_gamess_file_dlg(); else if(!strcmp(name, "ReadGaussian")) read_gaussian_file_dlg(); else if(!strcmp(name, "ReadGaussianFChk")) read_fchk_gaussian_file_dlg(); else if(!strcmp(name, "ReadMolpro")) read_molpro_file_dlg(); else if(!strcmp(name, "ReadMopacAux")) read_mopac_aux_file_dlg(); else if(!strcmp(name, "ReadMPQC")) read_mpqc_file_dlg(); else if(!strcmp(name, "ReadADF")) read_adf_file_dlg(); else if(!strcmp(name, "ReadOrca")) read_orca_file_dlg(); else if(!strcmp(name, "ReadOrcaHessian")) read_orca_hessian_file_dlg(); else if(!strcmp(name, "ReadFireFly")) read_gamess_file_dlg(); else if(!strcmp(name, "ReadQChem")) read_qchem_file_dlg(); else if(!strcmp(name, "ReadNWChem")) read_nwchem_file_dlg(); else if(!strcmp(name, "ReadPsicode")) read_psicode_file_dlg(); else if(!strcmp(name, "ReadMolden")) read_molden_file_dlg(); else if(!strcmp(name, "RemoveSelectedMode")) remove_selected_mode(); else if(!strcmp(name, "RemoveBeforeSelectedMode")) remove_all_modes_before_selected_mode(); else if(!strcmp(name, "RemoveAfterSelectedMode")) remove_all_modes_after_selected_mode(); else if(!strcmp(name, "SortModes")) sort_modes(); else if(!strcmp(name, "SaveGabedit")) save_gabedit_file_dlg(); else if(!strcmp(name, "CreateGaussInputVibCorrection")) create_gaussian_correction_vibration_file_dlg(); else if(!strcmp(name, "CreateGaussInputQFF")) create_gaussian_qff_file_dlg(); else if(!strcmp(name, "CreateCChemIInputQFF")) create_cchemi_qff_file_dlg(); else if(!strcmp(name, "CreateGaussInputVibOneMode")) create_gaussian_along_vibration_file_dlg(); else if(!strcmp(name, "CreateiGVPT2File")) create_hybryd_QMMM_file_dlg(FALSE); else if(!strcmp(name, "RuniGVPT2")) create_hybryd_QMMM_file_dlg(TRUE); else if(!strcmp(name, "DrawIRSpectrum")) create_window_irspectrum(); else if(!strcmp(name, "DrawRamanSpectrum")) create_window_ramanspectrum(); else if(!strcmp(name, "HelpSupportedFormat")) help_supported_format(); else if(!strcmp(name, "HelpAnimation")) help_animated_file(); else if(!strcmp(name, "Close")) destroyDlg(NULL,NULL); } /*********************************************************************************************************************/ static GtkActionEntry gtkActionEntries[] = { {"File", NULL, "_File", NULL, NULL, G_CALLBACK (activate_action)}, {"Read", NULL, "_Read"}, {"ReadAuto", NULL, "Read (Auto)", NULL, "Read(Auto)", G_CALLBACK (activate_action) }, {"ReadGabedit", GABEDIT_STOCK_GABEDIT, "Read a G_abedit file", NULL, "Read a Gabedit file", G_CALLBACK (activate_action) }, {"ReadDalton", GABEDIT_STOCK_DALTON, "Read a _Dalton output file", NULL, "Read a Dalton output file", G_CALLBACK (activate_action) }, {"ReadGamess", GABEDIT_STOCK_GAMESS, "Read a _Gamess output file", NULL, "Read a Gamess output file", G_CALLBACK (activate_action) }, {"ReadGaussian", GABEDIT_STOCK_GAUSSIAN, "Read a _Gaussian output file", NULL, "Read a Gaussian output file", G_CALLBACK (activate_action) }, {"ReadGaussianFChk", GABEDIT_STOCK_GAUSSIAN, "Read a _Gaussian fchk file", NULL, "Read a Gaussian fchk file", G_CALLBACK (activate_action) }, {"ReadMolpro", GABEDIT_STOCK_MOLPRO, "Read a Mol_pro output file", NULL, "Read Molpro output file", G_CALLBACK (activate_action) }, {"ReadMopacAux", GABEDIT_STOCK_MOPAC, "Read a _Mopac aux file", NULL, "Read Mopac aux file", G_CALLBACK (activate_action) }, {"ReadMPQC", GABEDIT_STOCK_MPQC, "Read a MP_QC output file", NULL, "Read a MPQC output file", G_CALLBACK (activate_action) }, {"ReadADF", GABEDIT_STOCK_ADF, "Read a _ADF output file", NULL, "Read a ADF output file", G_CALLBACK (activate_action) }, {"ReadOrca", GABEDIT_STOCK_ORCA, "Read a _Orca output file", NULL, "Read a Orca output file", G_CALLBACK (activate_action) }, {"ReadOrcaHessian", GABEDIT_STOCK_ORCA, "Read a _Hessian Orca file", NULL, "Read a Hessian Orca output file", G_CALLBACK (activate_action) }, {"ReadFireFly", GABEDIT_STOCK_FIREFLY, "Read a _FireFly output file", NULL, "Read a FireFly output file", G_CALLBACK (activate_action) }, {"ReadNWChem", GABEDIT_STOCK_NWCHEM, "Read a _NWChem output file", NULL, "Read a NWChem output file", G_CALLBACK (activate_action) }, {"ReadPsicode", GABEDIT_STOCK_PSICODE, "Read a _Psicode output file", NULL, "Read a Psicode output file", G_CALLBACK (activate_action) }, {"ReadQChem", GABEDIT_STOCK_QCHEM, "Read a _Q-Chem output file", NULL, "Read a Q-Chem output file", G_CALLBACK (activate_action) }, {"ReadMolden", GABEDIT_STOCK_MOLDEN, "Read a Mol_den output file", NULL, "Read a Molden file", G_CALLBACK (activate_action) }, {"RemoveSelectedMode", GABEDIT_STOCK_CUT, "_Remove the selected mode", NULL, "Remove selected mode", G_CALLBACK (activate_action) }, {"RemoveBeforeSelectedMode", GABEDIT_STOCK_CUT, "Remove all modes _before the selected mode", NULL, "Remove before selected mode", G_CALLBACK (activate_action) }, {"RemoveAfterSelectedMode", GABEDIT_STOCK_CUT, "Remove all modes _after the selected mode", NULL, "Remove after selected mode", G_CALLBACK (activate_action) }, {"SortModes", GABEDIT_STOCK_CUT, "Sort", NULL, "Sort", G_CALLBACK (activate_action) }, {"SaveGabedit", GABEDIT_STOCK_SAVE, "_Save", NULL, "Save", G_CALLBACK (activate_action) }, {"CreateGaussInputVibCorrection", GABEDIT_STOCK_SAVE, "_Gaussian input file for compute the vibrational corrections", NULL, "_Gaussian input", G_CALLBACK (activate_action) }, {"CreateGaussInputQFF", GABEDIT_STOCK_SAVE, "_Gaussian input files to compute the QFF derivatives", NULL, "_Gaussian input", G_CALLBACK (activate_action) }, {"CreateCChemIInputQFF", GABEDIT_STOCK_SAVE, "_CChemI input files to compute the QFF derivatives", NULL, "_CChemI input", G_CALLBACK (activate_action) }, {"CreateGaussInputVibOneMode", GABEDIT_STOCK_SAVE, "_Gaussian input file using a geometry along the selected mode", NULL, "_Gaussian input", G_CALLBACK (activate_action) }, {"CreateiGVPT2File", GABEDIT_STOCK_SAVE, "_iGVPT2 QM/MMFF94 input file", NULL, "_iGVPT2 input", G_CALLBACK (activate_action) }, {"RuniGVPT2", GABEDIT_STOCK_SAVE, "_run iGVPT2 QM/MMFF94", NULL, "_run iGVPT2 QM/MMFF94", G_CALLBACK (activate_action) }, {"Close", GABEDIT_STOCK_CLOSE, "_Close", NULL, "Close", G_CALLBACK (activate_action) }, {"Tools", NULL, "_Tools", NULL, NULL, G_CALLBACK (activate_action)}, {"DrawIRSpectrum", GABEDIT_STOCK_DRAW, "Draw _IR Spectrum", NULL, "Draw IR Spectrum", G_CALLBACK (activate_action) }, {"DrawRamanSpectrum", GABEDIT_STOCK_DRAW, "Draw _Raman Spectrum", NULL, "Draw Raman Spectrum", G_CALLBACK (activate_action) }, {"Help", NULL, "_Help"}, {"HelpSupportedFormat", NULL, "_Supported format...", NULL, "Supported format...", G_CALLBACK (activate_action) }, {"HelpAnimation", NULL, "Creation of an _animated file...", NULL, "Creation of an animated file...", G_CALLBACK (activate_action) }, }; static guint numberOfGtkActionEntries = G_N_ELEMENTS (gtkActionEntries); /********************************************************************************/ /* XML description of the menus for the test app. The parser understands * a subset of the Bonobo UI XML format, and uses GMarkup for parsing */ static const gchar *uiMenuInfo = " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*******************************************************************************************************************************/ static void add_widget (GtkUIManager *manager, GtkWidget *widget, GtkContainer *container) { GtkWidget *handlebox; handlebox =gtk_handle_box_new (); g_object_ref (handlebox); gtk_handle_box_set_handle_position (GTK_HANDLE_BOX(handlebox),GTK_POS_LEFT); /* GTK_SHADOW_NONE, GTK_SHADOW_IN, GTK_SHADOW_OUT, GTK_SHADOW_ETCHED_IN, GTK_SHADOW_ETCHED_OUT */ gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(handlebox),GTK_SHADOW_OUT); gtk_box_pack_start (GTK_BOX (container), handlebox, TRUE, TRUE, 0); gtk_widget_show (widget); gtk_container_add (GTK_CONTAINER (handlebox), widget); gtk_widget_show (handlebox); } /*******************************************************************************************************************************/ static GtkUIManager *create_menu(GtkWidget* box) { GtkActionGroup *actionGroup = NULL; GtkUIManager *manager = NULL; GError *error = NULL; manager = gtk_ui_manager_new (); g_signal_connect_swapped (PrincipalWindow, "destroy", G_CALLBACK (g_object_unref), manager); actionGroup = gtk_action_group_new ("GabeditVibrationActions"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntries, numberOfGtkActionEntries, NULL); gtk_ui_manager_insert_action_group (manager, actionGroup, 0); g_signal_connect (manager, "add_widget", G_CALLBACK (add_widget), box); gtk_window_add_accel_group (GTK_WINDOW (PrincipalWindow), gtk_ui_manager_get_accel_group (manager)); if (!gtk_ui_manager_add_ui_from_string (manager, uiMenuInfo, -1, &error)) { g_message (_("building menus failed: %s"), error->message); g_error_free (error); } if(GTK_IS_UI_MANAGER(manager)) { GtkAction *action = NULL; action = gtk_ui_manager_get_action(manager, "/MenuBar/File"); if(G_IS_OBJECT(action)) g_object_set_data(G_OBJECT(action), "Manager", manager); action = gtk_ui_manager_get_action(manager, "/MenuBar/Tools"); if(G_IS_OBJECT(action)) g_object_set_data(G_OBJECT(action), "Manager", manager); } return manager; } /********************************************************************************/ void vibrationDlg() { GtkWidget *Win; GtkWidget *vbox; GtkWidget *hbox; GtkUIManager *manager = NULL; /* GtkWidget *button; GtkWidget *menuButton; */ GtkWidget *parentWindow = PrincipalWindow; if(WinDlg) return; Win= gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow)); gtk_window_set_default_size (GTK_WINDOW(Win),-1,(gint)(ScreenHeight*0.69)); gtk_window_set_title(GTK_WINDOW(Win),"Vibration"); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); WinDlg = Win; add_child(PrincipalWindow,Win,destroyVibrationDlg,"Vibration"); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (Win), vbox); hbox = create_hbox_false(vbox); manager = create_menu(hbox); hbox = create_hbox_false(vbox); gtk_widget_realize(Win); treeView = addList(hbox, manager); addEntrysButtons(vbox); gtk_widget_show_all(vbox); gtk_widget_show_now(Win); fit_windows_position(PrincipalWindow, Win); rafreshList(); stop_vibration(NULL, NULL); } /*************************************************************************/ void read_modes(GabeditFileChooser *selecFile, gint response_id) { gchar *fileName; GabEditTypeFile fileType = GABEDIT_TYPEFILE_UNKNOWN; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(selecFile); gtk_widget_hide(GTK_WIDGET(selecFile)); while( gtk_events_pending() ) gtk_main_iteration(); fileType = get_type_file(fileName); if(fileType == GABEDIT_TYPEFILE_GAMESS) read_gamess_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_FIREFLY) read_gamess_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_GAUSSIAN) read_gaussian_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_MOLPRO) read_molpro_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_MOPAC) read_mopac_aux_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_MOPAC_AUX) read_mopac_aux_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_ORCA) read_orca_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_QCHEM) read_qchem_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_NWCHEM) read_nwchem_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_PSICODE) read_psicode_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_GABEDIT) read_gabedit_molden_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_MOLDEN) read_gabedit_molden_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_UNKNOWN) { Message( _("Sorry, I cannot find the type of your file\n") ," Error ",TRUE); } } /********************************************************************************/ static void read_modes_dlg() { GtkWidget* filesel = file_chooser_open(read_modes, "Read geometry and frequencies", GABEDIT_TYPEFILE_UNKNOWN,GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static void print_hybrid_QMMM(gchar* fileNameBas, FILE* file, G_CONST_RETURN gchar* keys) { gint i; gint j; gint** connected = NULL; //buildConnectionsForRings if(BondsOrb) { GList* list; gint i = 0; gint k = 0; gint nAtoms = Ncenters; connected = g_malloc(nAtoms*sizeof(gint*)); for(i=0;inext) { BondType* data=(BondType*)list->data; gint i = data->n1; gint j = data->n2; connected[i][0]++; connected[j][0]++; k = connected[i][0]; connected[i][k]=j; k = connected[j][0]; connected[j][k]=i; } } fprintf(file,"%s\n",keys); fprintf(file,"Geometry\n"); fprintf(file,"%d %d %d\n", vibration.numberOfAtoms, totalCharge, spinMultiplicity); for(i=0;i0;i--) if(fileNameBas[i]=='.') { fileNameBas[i]='\0'; break; } print_hybrid_QMMM(fileNameBas, file, allKeys); fclose(file); if(fileNameBas) g_free(fileNameBas); gtk_widget_destroy(Win); { gchar* t = g_strdup_printf(_("The %s file was created"),fileName); Message(t,_("Error"),TRUE); if(t)g_free(t); } } /********************************************************************************/ static void run_hybrid_QMMM_win(GtkWidget* Win, gpointer data) { gint i; gint j; gchar* fileName = NULL; FILE* file; GtkWidget* buttonDirSelector = (GtkWidget*)g_object_get_data(G_OBJECT(Win), "ButtonDirSelector"); GtkWidget* entryFileName = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"EntryFileName")); GtkWidget* comboModel = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"ComboModel")); GtkWidget* entryModel = NULL; G_CONST_RETURN gchar* fileNameStr = NULL; G_CONST_RETURN gchar* dirNameStr = NULL; G_CONST_RETURN gchar* modelStr = NULL; gchar* allKeys = NULL; gchar* fileNameBas = NULL; gchar* fileNameRes = NULL; gchar* command = NULL; gchar* old = NULL; gchar* result = NULL; if(vibration.numberOfFrequencies<1) return; if(vibration.numberOfAtoms<1) return; if(buttonDirSelector) dirNameStr = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); if(!dirNameStr) return; if(entryFileName) fileNameStr = gtk_entry_get_text(GTK_ENTRY(entryFileName)); printf("fileName = %s\n", fileNameStr); if(!fileNameStr) return; if(!comboModel) printf("!comboModel\n"); if(!comboModel) return; entryModel = (GtkWidget*)(g_object_get_data(G_OBJECT(comboModel),"Entry")); if(!entryModel) return; modelStr = gtk_entry_get_text(GTK_ENTRY(entryModel)); if(!modelStr) return; allKeys = g_strdup_printf( "RunType=HybridMM\n" "VPT2Model=%s\n" "PropModel=GVPT2\n" "maxFrequencyDifferenceFermi=200\n" "MartinCutOff1=1.0\n" "MartinCutOff2=1.0\n" "QFFnModes=3\n" "mmff94Charges=TRUE\n" "\n", modelStr); fileName = g_strdup_printf("%s%s%s",dirNameStr,G_DIR_SEPARATOR_S,fileNameStr); file = fopen(fileName, "w"); if(!file) { gchar* t = g_strdup_printf(_("Sorry\n I can not create %s file"),fileName); Message(t,_("Error"),TRUE); if(fileName) g_free(fileName); if(t)g_free(t); return; } fileNameBas = g_path_get_basename(fileNameStr); for(i=strlen(fileNameBas);i>0;i--) if(fileNameBas[i]=='.') { fileNameBas[i]='\0'; break; } print_hybrid_QMMM(fileNameBas, file, allKeys); fclose(file); fileNameRes = g_strdup_printf("%s.out", fileNameBas); command = g_strdup_printf("%s%siGVPT2%sbin%sigvpt2 %s > %s", g_get_home_dir(), G_DIR_SEPARATOR_S, G_DIR_SEPARATOR_S, G_DIR_SEPARATOR_S, fileName, fileNameRes); system(command); file = fopen(fileNameRes, "r"); if(file) { gchar* t = g_malloc(BSIZE*sizeof(gchar)); result = g_strdup_printf("%s",""); while(!feof(file)) { if(!fgets(t,BSIZE,file))break; old = result; result = g_strdup_printf("%s%s",old,t); if(old) g_free(old); } if(result) { GtkWidget* message = AnharmonicResultTxt(result,"iGVPT2 result"); gtk_window_set_default_size (GTK_WINDOW(message),(gint)(ScreenWidth*0.8),-1); gtk_widget_set_size_request(message,(gint)(ScreenWidth*0.45),-1); /* gtk_window_set_modal (GTK_WINDOW (message), TRUE);*/ gtk_window_set_transient_for(GTK_WINDOW(message),GTK_WINDOW(PrincipalWindow)); } fclose(file); g_free(t); } if(fileNameRes) g_free(fileNameRes); if(fileNameBas) g_free(fileNameBas); gtk_widget_destroy(Win); { gchar* t = g_strdup_printf(_("The %s file was created"),fileName); Message(t,_("Error"),TRUE); if(t)g_free(t); } } /***********************************************************************************************/ static GtkWidget *addVPT2ModelsToTable(GtkWidget *table, gint i) { GtkWidget* entry = NULL; GtkWidget* combo = NULL; gint nlist = 2; gchar* list[] = {"HDCPT2","GVPT2"}; add_label_table(table,_("Model"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entry = addComboListToATable(table, list, nlist, i, 2, 1); combo = g_object_get_data(G_OBJECT (entry), "Combo"); g_object_set_data(G_OBJECT(combo), "Entry", entry); gtk_widget_set_sensitive(entry, FALSE); return combo; } /********************************************************************************/ static GtkWidget* add_inputiGVPT2(GtkWidget *Wins,GtkWidget *vbox) { GtkWidget* entry; GtkWidget* sep; GtkWidget *table = gtk_table_new(8,4,FALSE); GtkWidget* comboModel = NULL; GtkWidget* buttonDirSelector = NULL; GtkWidget* entryFileName = NULL; GtkWidget* label = NULL; gint i; gint j; gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; j = 0; add_label_table(table,_("Working Folder"),(gushort)i,(gushort)j); j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); j = 2; buttonDirSelector = gabedit_dir_button(); gtk_widget_set_size_request(GTK_WIDGET(buttonDirSelector),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),buttonDirSelector, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); g_object_set_data(G_OBJECT(Wins), "ButtonDirSelector", buttonDirSelector); /*----------------------------------------------------------------------------------*/ i++; j = 0; add_label_table(table,_("File name"),(gushort)i,(gushort)j); j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); j = 2; entryFileName = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryFileName),"iGVPT2.ici"); gtk_widget_set_size_request(GTK_WIDGET(entryFileName),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryFileName, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); g_object_set_data(G_OBJECT(Wins), "EntryFileName", entryFileName); /*----------------------------------------------------------------------------------*/ i++; comboModel = addVPT2ModelsToTable(table, i); g_object_set_data(G_OBJECT(Wins), "ComboModel", comboModel); /*----------------------------------------------------------------------------------*/ i++; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); /*----------------------------------------------------------------------------------*/ gtk_widget_show_all(table); return entryFileName; } /********************************************************************************************************/ static void create_hybryd_QMMM_file_dlg(gboolean run) { GtkWidget *Win; GtkWidget *frame; GtkWidget *vboxall; GtkWidget* vbox; GtkWidget* entryKeywords; if(vibration.numberOfFrequencies<1) { gchar* t = g_strdup_printf(_("Sorry\n You should read the geometries befor")); Message(t,_("Error"),TRUE); return; } /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),"Create a iGVPT2 input file for an anharmonic calculation"); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 2); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Input iGVPT2"); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(Win); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 2); gtk_box_pack_start(GTK_BOX(vboxall), frame,TRUE,TRUE,0); gtk_widget_show (frame); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); gtk_widget_realize(Win); entryKeywords = add_inputiGVPT2(Win,vbox); if(!run) add_cancel_ok_button(Win,vbox,entryKeywords,(GCallback)print_hybrid_QMMM_win); else add_cancel_ok_button(Win,vbox,entryKeywords,(GCallback)run_hybrid_QMMM_win); /* Show all */ gtk_widget_show_all (Win); } /********************************************************************************/ GabeditSrc250/src/Display/PovrayGL.h0000644000175100017510000000034613130665225017546 0ustar alloucheallouche #ifndef __GABEDIT_POVRAYGL_H__ #define __GABEDIT_POVRAYGL_H__ gchar* new_pov(gchar* dirname, int i); void create_save_povray_orb(GtkWidget* Win); void exportPOVDlg(GtkWidget *parentWindow); #endif /* __GABEDIT_POVRAYGL_H__ */ GabeditSrc250/src/Display/GLArea.h0000644000175100017510000000641213130665225017136 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GLAREA_H__ #define __GABEDIT_GLAREA_H__ void resetBeginNegative(); gdouble getScaleBall(); gdouble getScaleStick(); gboolean getShowOneSurface(); gboolean getShowBox(); void setShowBox(gboolean c); void setScaleBall(gdouble a); void setScaleStick(gdouble a); void setShowOneSurface(gboolean a); gint getOptCol(); void setOptCol(gint i); void build_rings(gint size); void delete_rings_all(); gboolean get_show_symbols(); gboolean get_show_numbers(); void set_show_symbols(gboolean ac); void set_show_numbers(gboolean ac); gint get_background_color(guchar color[]); void getQuat(gdouble q[]); gboolean sourceIsOn(gint numsSource); void setAnimateContours(gboolean anim); void setAnimatePlanesMapped(gboolean anim); void get_orgin_molecule(gdouble orig[]); void get_camera_values(gdouble* zn, gdouble* zf, gdouble* angle, gdouble* aspect, gboolean* persp); void set_camera_values(gdouble zn, gdouble zf, gdouble zo, gboolean persp); gboolean get_light(gint num,gdouble v[]); gchar** get_light_position(gint num); void set_light_position(gint num,gdouble v[]); void set_default_operation(); void set_operation_type(gint i); void set_light_on_off(gint i); void add_void_maps(); void add_maps(gint ii0, gint ii1, gint inumplan, gdouble igap, gboolean newGrid); void set_contours_values_from_plane(gdouble minv,gdouble maxv,gint N,gdouble gap, gboolean linear); void add_void_contours(); void set_contours_values(gint N,gdouble* cvalues,gint ii0,gint ii1,gint inumplan,gdouble gap); void add_objects_for_new_grid(); void add_surface(); void set_background_optcolor(gint i); gboolean NewGLArea(GtkWidget *widget); void Define_Iso(gdouble isovale); void Define_Grid(); gint glarea_rafresh(GtkWidget *widget); void free_grid_all(); void free_iso_all(); void free_surfaces_all(); void free_planes_mapped_all(); void free_contours_all(); void free_objects_all(); void rafresh_window_orb(); void rotationAboutAnAxis(GtkWidget *widget, gdouble phi, gint axe); gint redrawGL2PS(); #endif /* __GABEDIT_GLAREA_H__ */ GabeditSrc250/src/Display/OrbitalsOrca.c0000644000175100017510000005007413130665225020425 0ustar alloucheallouche/* OrbitalsOrca.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Common/Global.h" #include "GlobalOrb.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/Zlm.h" #include "GeomDraw.h" #include "GLArea.h" #include "GeomOrbXYZ.h" #include "UtilsOrb.h" #include "StatusOrb.h" #include "Basis.h" #include "Orbitals.h" /********************************************************************************/ void read_orca_orbitals_using_orca_2mkl(gchar* fileName) { gchar* fileNameBas = NULL; gchar* convertOrcaMolden = NULL; gchar* moldenFile = NULL; FILE* file= NULL; gchar* t = NULL; gint l = 0; gint i = 0; fileNameBas = g_strdup(fileName); l = strlen(fileNameBas)-1; for(i=l;i>=0;i--) { if(fileNameBas[i]=='.') { fileNameBas[i]='\0'; break; } } if(!fileNameBas || strlen(fileNameBas)<1) { gchar buffer[BSIZE]; sprintf(buffer, _("Sorry, I can not read orbitals from the orca file\n")); Message(buffer,_("Error"),TRUE); return; } #ifdef G_OS_WIN32 convertOrcaMolden = g_strdup_printf("%s%sorca_2mkl %s -molden",orcaDirectory,G_DIR_SEPARATOR_S,fileNameBas); #else convertOrcaMolden = g_strdup_printf("orca_2mkl %s -molden",fileNameBas); #endif t = get_name_file(fileName); set_status_label_info(_("File name"),t); g_free(t); set_status_label_info(_("File type"),"Orca"); set_status_label_info(_("Mol. Orb."),"Reading"); {int ierr = system(convertOrcaMolden);} g_free(convertOrcaMolden); moldenFile = g_strdup_printf("%s.molden.input",fileNameBas); file = FOpen(moldenFile, "rb"); if(file == NULL) { gchar buffer[BSIZE]; sprintf(buffer, _("Sorry, I cannot create the molden file using orca_2mkl")); Message(buffer,_("Error"),TRUE); return; } fclose(file); read_molden_orbitals(moldenFile); g_free(moldenFile); } /**********************************************/ static void DefineOrcaSphericalBasis() { gint i,j,k; gint c; gint kl; gint L,M; CGTF *temp; Zlm Stemp; gint N,Nc,n; gint inc; gint klbeg; gint klend; gint klinc; NOrb = 0; for(i=0;i=klend);kl +=klinc) { if(kl!=0) inc = 2*kl; else inc = 1; for(M=kl;M>=-kl;M -=inc) { /*Debug("L =%d kl=%d M=%d \n",L,kl,M);*/ k++; Stemp = getZlm(L,M); temp[k].numberOfFunctions=Stemp.numberOfCoefficients*Type[GeomOrb[i].NumType].Ao[j].N; temp[k].NumCenter=i; /* Debug("M=%d N=%d\n",M,temp[k].N);*/ temp[k].Gtf =g_malloc(temp[k].numberOfFunctions*sizeof(GTF)); Nc=-1; for(N=0;Nstrlen("There are ")+10) sscanf(strstr(t,"There are ")+strlen("There are "),"%d",&nGroups); /* Debug("nGroups = %d\n",nGroups);*/ } if(ok && nGroups>0) break; } /* printf("nGroups = %d\n",nGroups);*/ if(nGroups<=0) ok = FALSE; if(!ok) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry\nI can not read basis from '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); return FALSE; } /* Debug("Ntype = %d\n",Ntype);*/ /* numAtoms = g_malloc(Ncenters*sizeof(gint));*/ /* for(i=0;i-1 && i-1) { i = GeomOrb[i].NumType; /* Debug("numType = %d\n",i);*/ Type[i].Symb=g_strdup(sym); Type[i].N=GetNelectrons(sym); j=-1; while(!feof(forb)) { { char* e = fgets(t,BSIZE,forb);} /* Debug("t = %s\n",t);*/ if(this_is_a_backspace(t) || strstr(t,"end")) break; j++; Type[i].Norb=j+1; /* Debug("debut Alloc %d %d \n",i,j); Debug("point %d \n",Type[i].Ao); */ if(j == 0) Type[i].Ao=g_malloc(sizeof(AO)); else Type[i].Ao=g_realloc(Type[i].Ao,(j+1)*sizeof(AO)); /* Debug("debut ReadOne i=%d j = %d \n",i,j);*/ /* Debug("debut t = %s \n",t);*/ ok= ReadOneOrcaBasis(i,j,t,&nsym); /* Debug("nsym apres = %d\n",nsym);*/ if(nsym==2) { Type[i].Norb = j+2; j++; } if(!ok) { j = j - nsym; if(j==0) Type[i].Ao=g_malloc(sizeof(AO)); else Type[i].Ao=g_realloc(Type[i].Ao,(j+1)*sizeof(AO)); Type[i].Norb=j+1; } } } else { break; } } } /* Debug("nGroups = %d nAtoms = %d\n",nGroups,nAtoms);*/ for(i=0;iNOrb-1) { nR=0; break; } if(nR<=0) break; for(i=0;i0) (*nOcc)++; { char* e = fgets(t,BSIZE,file);} /* Debug("%s\n",t);*/ for(i=0;i0 && UHF) { CoefAlphaOrbitals = CoefOrbitals; EnerAlphaOrbitals = EnerOrbitals; SymAlphaOrbitals = SymOrbitals; OccAlphaOrbitals = OccOrbitals; NAlphaOcc = NOcc; NAlphaOrb = nReadOrb; CoefOrbitals = CreateTable2(NOrb); EnerOrbitals = g_malloc(NOrb*sizeof(gdouble)); OccOrbitals = g_malloc(NOrb*sizeof(gdouble)); SymOrbitals = g_malloc(NOrb*sizeof(gchar*)); /* Debug("Begin Beta read_one_block_orbitals_in_orca_output_file \n");*/ nReadOrb = read_one_block_orbitals_in_orca_output_file(file, ncart, CoefOrbitals, EnerOrbitals, SymOrbitals, OccOrbitals,&NOcc); /* Debug("nRead Beta = %d\n",nReadOrb);*/ if(nReadOrb>0) { CoefBetaOrbitals = CoefOrbitals; EnerBetaOrbitals = EnerOrbitals; OccBetaOrbitals = OccOrbitals; SymBetaOrbitals = SymOrbitals; NBetaOcc = NOcc; NBetaOrb = nReadOrb; } else { FreeTable2(CoefOrbitals,NOrb); g_free(EnerOrbitals); g_free(OccOrbitals); g_free(SymOrbitals); FreeTable2(CoefAlphaOrbitals,NOrb); g_free(EnerAlphaOrbitals); g_free(OccAlphaOrbitals); g_free(SymAlphaOrbitals); } } else if(nReadOrb>0) { gint i; CoefAlphaOrbitals = CoefOrbitals; EnerAlphaOrbitals = EnerOrbitals; SymAlphaOrbitals = SymOrbitals; OccAlphaOrbitals = OccOrbitals; NAlphaOcc = NOcc; NAlphaOrb = nReadOrb; CoefBetaOrbitals = CoefOrbitals; EnerBetaOrbitals = EnerOrbitals; SymBetaOrbitals = SymOrbitals; OccBetaOrbitals = g_malloc(NOrb*sizeof(gdouble)); NBetaOcc = NOcc; NBetaOrb = nReadOrb; for(i=0;i1) { OccBetaOrbitals[i] = OccOrbitals[i]-1; OccOrbitals[i] = 1; } } } else { FreeTable2(CoefOrbitals,NOrb); g_free(EnerOrbitals); g_free(OccOrbitals); g_free(SymOrbitals); } if(nReadOrb>0) OK = TRUE; /* Debug("End of read Orbitals OK = %d\n",OK);*/ fclose(file); g_free(t); return OK; } /********************************************************************************/ void read_orca_orbitals_from_output_file(gchar* fileName) { gint typefile; gboolean Ok = FALSE; gchar *t = NULL; typefile =get_type_file_orb(fileName); if(typefile==GABEDIT_TYPEFILE_UNKNOWN) return; if(typefile != GABEDIT_TYPEFILE_ORCA) { Message(_("Sorry, This file is not in Orca output file\n"),_("Error"),TRUE); return ; } free_data_all(); t = get_name_file(fileName); set_status_label_info(_("File name"),t); g_free(t); set_status_label_info(_("File type"),"Orca"); set_status_label_info(_("Mol. Orb."),"Reading"); free_orbitals(); if(!gl_read_orca_file_geomi(fileName,-1)) { set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); set_status_label_info(_("Mol. Orb."),_("Nothing")); return; } InitializeAll(); if(!DefineOrcaBasisType(fileName)) { set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); set_status_label_info(_("Mol. Orb."),_("Nothing")); return; } /* Debug("End define Basis Type NAOrb = %d \n",NAOrb);*/ /* PrintBasis();*/ /* Debug("End Print Basis\n");*/ /* Debug("Begin DefineOrcaSphericalBasis\n");*/ DefineOrcaSphericalBasis(); /* Debug("End DefineOrcaSphericalBasis\n");*/ /* PrintAllBasis();*/ NormaliseAllBasis(); /* Debug("Basis after normalisation\n"); PrintAllBasis(); */ /* Debug("Spherical basis(Norb=%d)\n",NAOrb);*/ DefineNOccs(); Ok = read_last_orbitals_in_orca_output_file(fileName); /* Debug("End read_last_orbitals_in_orca_output_file\n");*/ if(Ok) { /* PrintAllOrb(CoefAlphaOrbitals); Debug("End PrintAllOrb Alpha\n"); PrintAllOrb(CoefBetaOrbitals); Debug("End PrintAllOrb Beta\n"); */ set_status_label_info(_("Mol. Orb."),_("Ok")); glarea_rafresh(GLArea); /* for geometry */ NumSelOrb = NAlphaOcc-1; /* Debug("End NumSelOrb %d\n",NumSelOrb); Debug("End NAlphaOrb %d\n",NAlphaOrb); Debug("End NBetaOrb %d\n",NBetaOrb); */ create_list_orbitals(); } else { set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); set_status_label_info(_("Mol. Orb."),_("Nothing")); } } #undef NCOLS GabeditSrc250/src/Display/OrbitalsNBO.c0000644000175100017510000005760013130665225020161 0ustar alloucheallouche/* OrbitalsNBO.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "../Utils/AtomsProp.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/Zlm.h" #include "../Utils/Constants.h" #include "../Geometry/GeomGlobal.h" #include "GeomDraw.h" #include "GLArea.h" #include "UtilsOrb.h" #include "Basis.h" #include "GeomOrbXYZ.h" #include "AtomicOrbitals.h" #include "StatusOrb.h" #include "Basis.h" #include "Orbitals.h" #include "GeomOrbXYZ.h" #include "BondsOrb.h" #include "LabelsGL.h" /********************************************************************************/ typedef enum { GABEDIT_ORBLOCALTYPE_BOYS=0, GABEDIT_ORBLOCALTYPE_EDMISTON, GABEDIT_ORBLOCALTYPE_PIPEK, GABEDIT_ORBLOCALTYPE_UNKNOWN } GabEditOrbLocalType; typedef enum { GABEDIT_ORBTYPE_ALPHA = 0, GABEDIT_ORBTYPE_BETA, GABEDIT_ORBTYPE_MOLECULAR, GABEDIT_ORBTYPE_MCSCF, GABEDIT_ORBTYPE_EIGENVECTORS, GABEDIT_ORBTYPE_BOYS_ALPHA, GABEDIT_ORBTYPE_BOYS_BETA, GABEDIT_ORBTYPE_BOYS, GABEDIT_ORBTYPE_EDMISTON_ALPHA, GABEDIT_ORBTYPE_EDMISTON_BETA, GABEDIT_ORBTYPE_EDMISTON, GABEDIT_ORBTYPE_PIPEK_ALPHA, GABEDIT_ORBTYPE_PIPEK_BETA, GABEDIT_ORBTYPE_PIPEK, } GabEditOrbType; /********************************************************************************/ static gboolean sphericalBasis = TRUE; /********************************************************************************/ static void get_charges_from_nbo_output_file(FILE* file,gint nAtoms) { /* charges not available in a nbo file. I set it to 0.0 */ gint i; for(i=0;i=klend);kl +=klinc) { if(kl!=0) inc = 2*kl; else inc = 1; for(M=kl;M>=-kl;M -=inc) { /*Debug("L =%d kl=%d M=%d \n",L,kl,M);*/ k++; Stemp = getZlm(L,M); temp[k].numberOfFunctions=Stemp.numberOfCoefficients*Type[GeomOrb[i].NumType].Ao[j].N; temp[k].NumCenter=i; /* Debug("M=%d N=%d\n",M,temp[k].N);*/ temp[k].Gtf =g_malloc(temp[k].numberOfFunctions*sizeof(GTF)); Nc=-1; for(N=0;N=0;l3--) for(l2=Type[GeomOrb[i].NumType].Ao[j].L-l3;l2>=0;l2--) { l1 = Type[GeomOrb[i].NumType].Ao[j].L-l2-l3; l[0][m] = l1; l[1][m] = l2; l[2][m] = l3; m++; } } for(m=0;m<(L+1)*(L+2)/2;m++) { l1 = l[0][m]; l2 = l[1][m]; l3 = l[2][m]; k++; AOrb[k].numberOfFunctions=Type[GeomOrb[i].NumType].Ao[j].N; AOrb[k].NumCenter = i; AOrb[k].Gtf =g_malloc(AOrb[k].numberOfFunctions*sizeof(GTF)); for(n=0;n0 && numTypes[is][k]/100 == numTypes[is][k-1]/100) continue; Type[i].Ao[j].L = l; Type[i].Ao[j].N = ncont; Type[i].Ao[j].Ex=g_malloc(Type[i].Ao[j].N*sizeof(gdouble)); Type[i].Ao[j].Coef=g_malloc(Type[i].Ao[j].N*sizeof(gdouble)); for(jj=0;jj2*radius) { p2 = 2*radius; p1 = lengt-p2; p = lengt; } else { p2 = lengt/2; p1 = p2; p = lengt; } Center[0] = (Base1Pos[0]*p2 + Base2Pos[0]*p1)/p; Center[1] = (Base1Pos[1]*p2 + Base2Pos[1]*p1)/p; Center[2] = (Base1Pos[2]*p2 + Base2Pos[2]*p1)/p; */ Cylinder_Draw_Color(radius/2,Base1Pos,Center,Specular,Diffuse,Ambiant); Diffuse[2] *=0.9; Ambiant[2] *=0.9; Diffuse[1] =0.9; /* draw_prism(radius,Center,Base2Pos,Specular,Diffuse,Ambiant);*/ draw_prism(radius/1.5,Center,Base2Pos,Specular,Diffuse,Ambiant); } /************************************************************************/ static void draw_vectors() { gint m = rowSelected; gint j; gdouble x0, y0, z0; gdouble x1, y1, z1; if(m<0) return; for(j=0;j #endif #include "../Utils/Vector3d.h" #include "../Utils/GTF.h" #include "../Display/GLArea.h" #include "../Display/Orbitals.h" #include "../Display/OrbitalsMolpro.h" #include "../Display/OrbitalsGamess.h" #include "../Display/OrbitalsQChem.h" #include "../Display/GeomOrbXYZ.h" #include "../Display/BondsOrb.h" #include "../Display/UtilsOrb.h" #include "../Display/TriangleDraw.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" #include "../Files/FileChooser.h" #include "../Common/Windows.h" #include "../Display/Vibration.h" #include "../Display/ContoursPov.h" #include "../Display/PlanesMappedPov.h" #include "../Display/LabelsGL.h" #include "../Display/StatusOrb.h" #define WIDTHSCR 0.3 typedef gboolean (*FuncCompCoulomb)(gint N[],GridLimits limits, gint typeOrbi, gint i, gint typeOrbj, gint j, gdouble* pInteg, gdouble* pNorm, gdouble* pNormj, gdouble* pOverlap); /********************************************************************************/ /* */ gdouble compute_spatial_overlap_analytic(gint typeOrbi, gint i, gint typeOrbj, gint j, gdouble schwarzCutOff) { gdouble** CoefI = CoefAlphaOrbitals; gdouble** CoefJ = CoefAlphaOrbitals; gint k,kp; gint l,lp; gdouble scal; gchar tmp[BSIZE]; gint* p; gint* q; gdouble* cci; gdouble* ccj; gint kk; gint ll; gulong delta = 0; gint pos = 0; gdouble cc = 0; gulong nAll = 0; gdouble integ; gint N; gdouble pqrs; gdouble* mnmn; gulong nComp = 0; integ = 0; if(typeOrbi != typeOrbj ) { /* stop calculation */ CancelCalcul = TRUE; return integ ; } if(typeOrbi == 2) CoefI = CoefBetaOrbitals; if(typeOrbj == 2) CoefJ = CoefBetaOrbitals; N = NAOrb*(NAOrb+1)/2; if(N<1)return -1.0; mnmn = g_malloc(N*sizeof(gdouble)); p = g_malloc(N*sizeof(gint)); q = g_malloc(N*sizeof(gint)); cci = g_malloc(N*sizeof(gdouble)); ccj = g_malloc(N*sizeof(gdouble)); sprintf(tmp,_("Computing of <%d %d|delta(ri,rj)| %d %d>.... Please wait"),i+1,i+1,j+1,j+1); setTextInProgress(tmp); kk = 0; for(k=0;k=pos) { pos += delta; #ifdef ENABLE_OMP #ifndef G_OS_WIN32 #pragma omp critical progress_orb_txt(scal,tmp,FALSE); #endif #else progress_orb_txt(scal,tmp,FALSE); #endif } } #ifdef ENABLE_OMP #ifdef G_OS_WIN32 setTextInProgress(_("Computing of spatial integrale, pleasse wait...")); #endif #pragma omp parallel for private(k,kp,l,lp,kk,ll,pqrs,cc) reduction(+:integ,nAll,nComp,pos) #endif for(kk=0;kk=pos) { pos += delta; #ifdef ENABLE_OMP #ifndef G_OS_WIN32 #pragma omp critical progress_orb_txt(scal,tmp,FALSE); #endif #else progress_orb_txt(scal,tmp,FALSE); #endif } cc = (cci[kk]*ccj[ll]+cci[ll]*ccj[kk]); if(fabs(cc*mnmn[kk]*mnmn[ll])>=schwarzCutOff) { pqrs = overlap4CGTF(&AOrb[k],&AOrb[kp],&AOrb[l],&AOrb[lp]); integ += cc*pqrs; nComp++; } } } } sprintf(tmp,"# of all = %ld, # of computed %ld\n",nAll, nComp); progress_orb_txt(0,tmp,TRUE); g_free(mnmn); g_free(p); g_free(q); g_free(cci); g_free(ccj); return integ; } /********************************************************************************/ void compute_transition_matrix_analytic(gint typeOrbi, gint i, gint typeOrbj, gint j, gdouble integ[]) { gint k; gint l; gdouble** CoefI = CoefAlphaOrbitals; gdouble** CoefJ = CoefAlphaOrbitals; gdouble s = 0; integ[0] = 0; integ[1] = 0; integ[2] = 0; if(typeOrbi != typeOrbj ) return; if(typeOrbi == 2) CoefI = CoefBetaOrbitals; if(typeOrbj == 2) CoefJ = CoefBetaOrbitals; s = 0; #ifdef ENABLE_OMP printf("# proc = %d\n", omp_get_num_procs ()); #pragma omp parallel for private(k) reduction(+:s) #endif for(k=0;k.... Please wait"),i+1,i+1,j+1,j+1); if(typeOrbi == 2) CoefI = CoefBetaOrbitals; if(typeOrbj == 2) CoefJ = CoefBetaOrbitals; kk = 0; for(k=0;k=pos) { pos += delta; #ifdef ENABLE_OMP #ifndef G_OS_WIN32 #pragma omp critical progress_orb_txt(scal,tmp,FALSE); #endif #else progress_orb_txt(scal,tmp,FALSE); #endif } } #ifdef ENABLE_OMP #ifdef G_OS_WIN32 setTextInProgress(_("Computing of eri, pleasse wait...")); #endif #pragma omp parallel for private(k,kp,l,lp,kk,ll,eri,cc,ccmn) reduction(+:v,nAll,nComp,pos) #endif for(kk=0;kk=pos) { pos += delta; #ifdef ENABLE_OMP #ifndef G_OS_WIN32 #pragma omp critical progress_orb_txt(scal,tmp,FALSE); #endif #else progress_orb_txt(scal,tmp,FALSE); #endif } cc = (cci[kk]*ccj[ll]+cci[ll]*ccj[kk]); /* Schwarz screening */ ccmn = cc*mnmn[kk]*mnmn[ll]; if(fabs(ccmn)data); indices = gtk_tree_path_get_indices(path); numOrbs[i++] = indices[0]; if(i>=*n) break; } } return numOrbs; } /********************************************************************************/ static void numeriButtonClicked(GtkWidget *numericButton,gpointer data) { GtkWidget* frameGrid = g_object_get_data (G_OBJECT (numericButton), "FrameGrid"); GtkWidget* labelSchwarz = g_object_get_data (G_OBJECT (numericButton), "LabelSchwarz"); GtkWidget* entrySchwarz = g_object_get_data (G_OBJECT (numericButton), "EntrySchwarz"); gboolean checked = GTK_TOGGLE_BUTTON (numericButton)->active; if(GTK_IS_WIDGET(frameGrid))gtk_widget_set_sensitive(frameGrid, checked); if(GTK_IS_WIDGET(labelSchwarz)) gtk_widget_set_sensitive(labelSchwarz, !checked); if(GTK_IS_WIDGET(entrySchwarz))gtk_widget_set_sensitive(entrySchwarz, !checked); } /********************************************************************************/ static void apply_coulomb_orbitals(GtkWidget *Win,gpointer data) { GtkWidget** entriestmp = NULL; G_CONST_RETURN gchar* temp; gchar* dump; gint i; gint j; GridLimits limitstmp; gint NumPointstmp[3]; GtkWidget *entries[3][6]; gdouble V[3][3]; GtkWidget* alphaList = g_object_get_data (G_OBJECT (Win), "AlphaList"); GtkWidget* betaList = g_object_get_data (G_OBJECT (Win), "BetaList"); GtkWidget* numericButton = g_object_get_data (G_OBJECT (Win), "NumericButton"); GtkWidget* entrySchwarz = g_object_get_data (G_OBJECT (Win), "EntrySchwarz"); gint* numAlphaOrbs = NULL; gint* numBetaOrbs = NULL; gint nAlpha = 0; gint nBeta = 0; gdouble integ, normi, normj, overlap; gchar* result = NULL; FuncCompCoulomb compute_coulomb = compute_coulomb_integrale_iijj_poisson; gboolean numeric = FALSE; gdouble schwarzCutOff = 1e-8; if(GTK_IS_WIDGET(Win)) { entriestmp = (GtkWidget **)g_object_get_data(G_OBJECT (Win), "Entries"); } else return; if(entriestmp==NULL) return; if(!GTK_IS_WIDGET(numericButton)) return; numeric = GTK_TOGGLE_BUTTON (numericButton)->active; if(!numeric) { if(!GTK_IS_WIDGET(entrySchwarz)) return; schwarzCutOff = atof(gtk_entry_get_text(GTK_ENTRY(entrySchwarz))); } destroy_win_list(); if(numeric) { for(i=0;i<3;i++) for(j=0;j<6;j++) entries[i][j] = entriestmp[i*6+j]; for(i=0;i<3;i++) { for(j=3;j<5;j++) { temp = gtk_entry_get_text(GTK_ENTRY(entries[i][j])); dump = NULL; if(temp && strlen(temp)>0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { limitstmp.MinMax[j-3][i] = atof(dump); } else { GtkWidget* message = Message(_("Error : an entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } temp = gtk_entry_get_text(GTK_ENTRY(entries[i][5])); NumPointstmp[i] = atoi(temp); if(NumPointstmp[i] <=2) { GtkWidget* message = Message(_("Error : The number of points should be > 2. "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } } for(i=0;i<3;i++) { if( limitstmp.MinMax[0][i]> limitstmp.MinMax[1][i]) { GtkWidget* message = Message(_("Error : The minimal value should be smaller than the maximal value "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } } for(i=0;i<3;i++) { for(j=0;j<3;j++) { V[i][j] = 0; temp = gtk_entry_get_text(GTK_ENTRY(entries[i][j])); dump = NULL; if(temp && strlen(temp)>0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { V[i][j] = atof(dump); } else { GtkWidget* message = Message(_("Error : an entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } } for(i=0;i<3;i++) { gdouble norm = 0.0; for(j=0;j<3;j++) norm += V[i][j]*V[i][j]; if(fabs(norm)<1e-8) { GtkWidget* message = Message(_("Error : the norm is equal to 0 "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } for(j=0;j<3;j++) V[i][j] /= sqrt(norm); } for(j=0;j<3;j++) originOfCube[j] = 0; for(j=0;j<3;j++) firstDirection[j] = V[0][j]; for(j=0;j<3;j++) secondDirection[j] = V[1][j]; for(j=0;j<3;j++) thirdDirection[j] = V[2][j]; for(i=0;i<3;i++) { NumPoints[i] =NumPointstmp[i] ; for(j=0;j<2;j++) limits.MinMax[j][i] =limitstmp.MinMax[j][i]; } } /* end if numeric */ CancelCalcul = FALSE; /* printf("DirName = %s\n",dirName);*/ numAlphaOrbs = get_num_of_selected_orbitals(alphaList, &nAlpha); numBetaOrbs = get_num_of_selected_orbitals(betaList, &nBeta); if(nAlpha+nBeta<1) { GtkWidget* message = Message(_("Error : You should select at last one orbital"),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } else if(nAlpha+nBeta==1) { gint i = -1; gint typeOrb = -1; delete_child(Win); if(nAlpha==1 && numAlphaOrbs) { typeOrb = 1; i = numAlphaOrbs[0]; } else if(nBeta==1 && numBetaOrbs) { typeOrb = 2; i = numBetaOrbs[0]; } if(i>-1 && typeOrb>0) { gint ii = i+1; if(numeric) { if(compute_coulomb( NumPoints,limits, typeOrb, i, typeOrb, i, &integ, &normi, &normj, &overlap) ) result = g_strdup_printf( "<%d|%d> = %lf\n" "<%d %d|1/r12|%d %d> = %0.12lf Hartree\n", ii,ii,normi, ii,ii,ii,ii,integ); else result = g_strdup_printf("Canceled? !\n If not see your terminal "); } else { setTextInProgress(_("Analytic computing of coulomb integral")); integ = get_coulomb_analytic(typeOrb, i, typeOrb, i, schwarzCutOff); normi = get_overlap_analytic(typeOrb, i, typeOrb, i); result = g_strdup_printf( "<%d|%d> = %lf\n" "<%d %d|1/r12|%d %d> = %0.12lf Hartree\n", ii,ii,normi, ii,ii,ii,ii,integ); } } } else { gint typeOrbi = 1; gint typeOrbj = 1; delete_child(Win); if(numAlphaOrbs) for(i=0;i = %lf\n" "<%d|%d> = %lf\n" "<%d|%d> = %lf\n" "<%d %d|1/r12|%d %d> = %0.12lf Hartree\n", ii,ii,normi, jj,jj,normj, ii,jj,overlap, ii,ii,jj,jj, integ); } else if(!numeric) { setTextInProgress(_("Analytic computing of coulomb integral")); integ = get_coulomb_analytic(typeOrbi, ii, typeOrbj, jj, schwarzCutOff); normi = get_overlap_analytic(typeOrbi, ii, typeOrbi, ii); normj = get_overlap_analytic(typeOrbj, jj, typeOrbj, jj); overlap = get_overlap_analytic(typeOrbi, ii, typeOrbj, jj); ii++; jj++; tmp = g_strdup_printf( "<%d|%d> = %lf\n" "<%d|%d> = %lf\n" "<%d|%d> = %lf\n" "<%d %d|1/r12|%d %d> = %0.12lf Hartree\n", ii,ii,normi, jj,jj,normj, ii,jj,overlap, ii,ii,jj,jj, integ); } if(tmp) { gchar* old = result; if(old) { result = g_strdup_printf("%s%s",old,tmp); g_free(old); } else result = g_strdup_printf("%s",tmp); } } typeOrbi = 2; typeOrbj = 2; if(numBetaOrbs) for(i=0;i = %lf\n" "<%d|%d> = %lf\n" "<%d|%d> = %lf\n" "<%d %d|1/r12|%d %d> = %0.12lf Hartree\n", ii,ii,normi, jj,jj,normj, ii,jj,overlap, ii,ii,jj,jj, integ); } else if(!numeric) { setTextInProgress(_("Analytic computing of coulomb integral")); integ = get_coulomb_analytic(typeOrbi, ii, typeOrbj, jj, schwarzCutOff); normi = get_overlap_analytic(typeOrbi, ii, typeOrbi, ii); normj = get_overlap_analytic(typeOrbj, jj, typeOrbj, jj); overlap = get_overlap_analytic(typeOrbi, ii, typeOrbj, jj); ii++; jj++; tmp = g_strdup_printf( "<%d|%d> = %lf\n" "<%d|%d> = %lf\n" "<%d|%d> = %lf\n" "<%d %d|1/r12|%d %d> = %0.12lf Hartree\n", ii,ii,normi, jj,jj,normj, ii,jj,overlap, ii,ii,jj,jj, integ); } if(tmp) { gchar* old = result; if(old) { result = g_strdup_printf("%s%s",old,tmp); g_free(old); } else result = g_strdup_printf("%s",tmp); } } typeOrbi = 1; typeOrbj = 2; if(numAlphaOrbs && numBetaOrbs) for(i=0;i = %lf\n" "<%d|%d> = %lf\n" "<%d|%d> = %lf\n" "<%d %d|1/r12|%d %d> = %0.12lf Hartree\n", ii,ii,normi, jj,jj,normj, ii,jj,overlap, ii,ii,jj,jj, integ); } else if(!numeric) { setTextInProgress(_("Analytic computing of coulomb integral")); integ = get_coulomb_analytic(typeOrbi, ii, typeOrbj, jj, schwarzCutOff); normi = get_overlap_analytic(typeOrbi, ii, typeOrbi, ii); normj = get_overlap_analytic(typeOrbj, jj, typeOrbj, jj); overlap = get_overlap_analytic(typeOrbi, ii, typeOrbj, jj); ii++; jj++; tmp = g_strdup_printf( "<%d|%d> = %lf\n" "<%d|%d> = %lf\n" "<%d|%d> = %lf\n" "<%d %d|1/r12|%d %d> = %0.12lf Hartree\n", ii,ii,normi, jj,jj,normj, ii,jj,overlap, ii,ii,jj,jj, integ); } if(tmp) { gchar* old = result; if(old) { result = g_strdup_printf("%s%s",old,tmp); g_free(old); } else result = g_strdup_printf("%s",tmp); } } } if(result && !CancelCalcul) { GtkWidget* message = MessageTxt(result,_("Result")); gtk_window_set_modal (GTK_WINDOW (message), TRUE); gtk_window_set_transient_for(GTK_WINDOW(message),GTK_WINDOW(PrincipalWindow)); } /* printf("Selected alpha orbitals : "); for(i=0;i"); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Grid "); vboxall = create_vbox(Win); vboxwin = vboxall; hbox = gtk_hbox_new (TRUE, 0); gtk_box_pack_start (GTK_BOX (vboxall), hbox, TRUE, TRUE, 0); label = gtk_label_new(""); gtk_label_set_markup(GTK_LABEL(label), "Use mouse + the Ctrl key (or the shift key) to select several orbitals\n"); gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); hbox = create_orbitals_list(vboxall); alphaList = g_object_get_data (G_OBJECT (hbox), "AlphaList"); g_object_set_data (G_OBJECT (Win), "AlphaList",alphaList); betaList = g_object_get_data (G_OBJECT (hbox), "BetaList"); g_object_set_data (G_OBJECT (Win), "BetaList",betaList); gtk_box_pack_start (GTK_BOX (vboxall), gtk_hseparator_new(), TRUE, TRUE, 5); frameMethod = gtk_frame_new(_("Method")); gtk_box_pack_start (GTK_BOX (vboxall), frameMethod, TRUE, TRUE, 2); vbox = create_vbox(frameMethod); gtk_widget_show_all (vbox); table = gtk_table_new(2,2,FALSE); gtk_container_add(GTK_CONTAINER(vbox),table); gtk_widget_show (table); numericButton = gtk_check_button_new_with_label ( _("Numerical computing of the Coulomb integral (Large box is recommended)")); gtk_table_attach(GTK_TABLE(table),numericButton,0,0+2,0,0+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); g_signal_connect(G_OBJECT(numericButton), "clicked",(GCallback)numeriButtonClicked,NULL); g_object_set_data (G_OBJECT (Win), "NumericButton",numericButton); label = gtk_label_new(_(" Schwarz cutoff : ")); gtk_table_attach(GTK_TABLE(table),label,0,0+1,1,1+1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); g_object_set_data (G_OBJECT (Win), "LabelSchwarz",label); g_object_set_data (G_OBJECT (numericButton), "LabelSchwarz",label); entrySchwarz = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entrySchwarz),"1e-8"); gtk_table_attach(GTK_TABLE(table),entrySchwarz,1,1+1,1,1+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); g_object_set_data (G_OBJECT (Win), "EntrySchwarz",entrySchwarz); g_object_set_data (G_OBJECT (numericButton), "EntrySchwarz",entrySchwarz); frameGrid = create_grid_frame(vboxall,"Box & Grid"); entries = (GtkWidget**) g_object_get_data (G_OBJECT (frameGrid), "Entries"); g_object_set_data (G_OBJECT (Win), "Entries",entries); g_object_set_data (G_OBJECT (Win), "FrameGrid",frameGrid); g_object_set_data (G_OBJECT (numericButton), "FrameGrid",frameGrid); gtk_widget_set_sensitive(frameGrid, GTK_TOGGLE_BUTTON (numericButton)->active); if(!AOrb && SAOrb) { gtk_button_clicked (GTK_BUTTON (numericButton)); gtk_widget_set_sensitive(numericButton, FALSE); } hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("OK")); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_coulomb_orbitals,G_OBJECT(Win)); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, G_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,G_OBJECT(Win)); gtk_widget_show (button); gtk_widget_show_all (Win); if(NAlphaOcc-1>=0) { select_row(alphaList,NAlphaOcc-1); if(NAlphaOcc+1<=NOrb) select_row(alphaList,NAlphaOcc); } else { select_row(alphaList,0); if(2<=NOrb) select_row(alphaList,1); } } /********************************************************************************/ void compute_overlap_matrix(gint typeOrb) { gint i,j,k,l; gchar* result = NULL; gdouble** matrix = NULL; gdouble** CoefI = CoefAlphaOrbitals; gdouble** CoefJ = CoefAlphaOrbitals; gchar* tmp = NULL; gdouble o; gint nAll = 0; gint delta = 0; gint pos = 0; gdouble scal; gchar str[BSIZE]; if(typeOrb != 1) { CoefI = CoefBetaOrbitals; CoefJ = CoefBetaOrbitals; } if(NAOrb<1) { GtkWidget* message = Message(_("Error : You should read orbitals"),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(!AOrb && !SAOrb) { GtkWidget* message = Message(_("Sorry, Please load the MO before\n"),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(!AOrb && SAOrb) { GtkWidget* message = Message(_("Sorry, That does not work with Slater basis set\n"),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } destroy_win_list(); sprintf(str,_("Computing of overlap matrix between orbitals... Please wait")); setTextInProgress(str); scal = 0.01; delta = (gint)(NAOrb*(NAOrb+1)/2*scal); if(delta<1) delta = 1; pos = delta; matrix = g_malloc(NAOrb*sizeof(gdouble*)); for(i=0;i=pos) { pos += delta; progress_orb_txt(scal,str,FALSE); } } for(k=0;kk=%d \n",k);*/ for(l=k+1;l=pos) { pos += delta; progress_orb_txt(scal,str,FALSE); } } if(CancelCalcul) break; } progress_orb_txt(0," ",TRUE); result = g_malloc(NAOrb*(NAOrb+1)/2*100*sizeof(gchar)); tmp = g_malloc(BSIZE*sizeof(gchar)); if(typeOrb == 1) sprintf(result," Alpha overlap matrix\n"); else sprintf(result," Beta overlap matrix\n"); setTextInProgress(_("Preparation of text to show... Please wait")); for(i=0;i = %lf\n",i+1,j+1,matrix[i][j]); strcat(result,tmp); if(CancelCalcul) break; } g_free(tmp); progress_orb_txt(0," ",TRUE); if(result && !CancelCalcul) { GtkWidget* message = MessageTxt(result,_("Overlap matrix")); gtk_window_set_modal (GTK_WINDOW (message), TRUE); gtk_window_set_transient_for(GTK_WINDOW(message),GTK_WINDOW(PrincipalWindow)); } if(matrix) { for(i=0;i = %lf\n" "<%d|%d> = %lf\n" "<%d|%d> = %lf\n" "<%d|vec r|%d> = %lf %lf %lf au (Magnitude=%lf)\n" "<%d|vec r|%d> = %lf %lf %lf Debye (Magnitude=%lf)\n\n", ii,ii,*pNormi, jj,jj,*pNormj, ii,jj,*pOverlap, ii,jj, integ[0], integ[1], integ[2], m, ii,jj, integ[0]*AUTODEB, integ[1]*AUTODEB, integ[2]*AUTODEB, m*AUTODEB ); } else if(!numeric) { setTextInProgress(_("Analytic computing of coulomb integral")); compute_transition_matrix_analytic(typeOrbi, ii, typeOrbj, jj, integ); *pNormi = get_overlap_analytic(typeOrbi, ii, typeOrbi, ii); *pNormj = get_overlap_analytic(typeOrbj, jj, typeOrbj, jj); *pOverlap = get_overlap_analytic(typeOrbi, ii, typeOrbj, jj); ii++; jj++; m = sqrt(integ[0]*integ[0]+integ[1]*integ[1]+integ[2]*integ[2]); tmp = g_strdup_printf( "<%d|%d> = %lf\n" "<%d|%d> = %lf\n" "<%d|%d> = %lf\n" "<%d|vec r|%d> = %lf %lf %lf au (Magnitude=%lf)\n" "<%d|vec r|%d> = %lf %lf %lf Debye (Magnitude=%lf)\n\n", ii,ii,*pNormi, jj,jj,*pNormj, ii,jj,*pOverlap, ii,jj, integ[0], integ[1], integ[2], m, ii,jj, integ[0]*AUTODEB, integ[1]*AUTODEB, integ[2]*AUTODEB, m*AUTODEB ); } return tmp; } /********************************************************************************/ static void apply_transition_matrix(GtkWidget *Win,gpointer data) { GtkWidget** entriestmp = NULL; G_CONST_RETURN gchar* temp; gchar* dump; gint i; gint j; GridLimits limitstmp; gint NumPointstmp[3]; GtkWidget *entries[3][6]; gdouble V[3][3]; GtkWidget* alphaList = g_object_get_data (G_OBJECT (Win), "AlphaList"); GtkWidget* betaList = g_object_get_data (G_OBJECT (Win), "BetaList"); GtkWidget* numericButton = g_object_get_data (G_OBJECT (Win), "NumericButton"); gint* numAlphaOrbs = NULL; gint* numBetaOrbs = NULL; gint nAlpha = 0; gint nBeta = 0; gdouble integ[3], normi, normj, overlap; gchar* result = NULL; gboolean numeric = FALSE; if(GTK_IS_WIDGET(Win)) { entriestmp = (GtkWidget **)g_object_get_data(G_OBJECT (Win), "Entries"); } else return; if(entriestmp==NULL) return; if(!GTK_IS_WIDGET(numericButton)) return; numeric = GTK_TOGGLE_BUTTON (numericButton)->active; destroy_win_list(); if(numeric) { for(i=0;i<3;i++) for(j=0;j<6;j++) entries[i][j] = entriestmp[i*6+j]; for(i=0;i<3;i++) { for(j=3;j<5;j++) { temp = gtk_entry_get_text(GTK_ENTRY(entries[i][j])); dump = NULL; if(temp && strlen(temp)>0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { limitstmp.MinMax[j-3][i] = atof(dump); } else { GtkWidget* message = Message(_("Error : an entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } temp = gtk_entry_get_text(GTK_ENTRY(entries[i][5])); NumPointstmp[i] = atoi(temp); if(NumPointstmp[i] <=2) { GtkWidget* message = Message(_("Error : The number of points should be > 2. "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } } for(i=0;i<3;i++) { if( limitstmp.MinMax[0][i]> limitstmp.MinMax[1][i]) { GtkWidget* message = Message(_("Error : The minimal value should be smaller than the maximal value "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } } for(i=0;i<3;i++) { for(j=0;j<3;j++) { V[i][j] = 0; temp = gtk_entry_get_text(GTK_ENTRY(entries[i][j])); dump = NULL; if(temp && strlen(temp)>0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { V[i][j] = atof(dump); } else { GtkWidget* message = Message(_("Error : an entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } } for(i=0;i<3;i++) { gdouble norm = 0.0; for(j=0;j<3;j++) norm += V[i][j]*V[i][j]; if(fabs(norm)<1e-8) { GtkWidget* message = Message(_("Error : the norm is equal to 0 "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } for(j=0;j<3;j++) V[i][j] /= sqrt(norm); } for(j=0;j<3;j++) originOfCube[j] = 0; for(j=0;j<3;j++) firstDirection[j] = V[0][j]; for(j=0;j<3;j++) secondDirection[j] = V[1][j]; for(j=0;j<3;j++) thirdDirection[j] = V[2][j]; for(i=0;i<3;i++) { NumPoints[i] =NumPointstmp[i] ; for(j=0;j<2;j++) limits.MinMax[j][i] =limitstmp.MinMax[j][i]; } } /* end if numeric */ CancelCalcul = FALSE; /* printf("DirName = %s\n",dirName);*/ numAlphaOrbs = get_num_of_selected_orbitals(alphaList, &nAlpha); numBetaOrbs = get_num_of_selected_orbitals(betaList, &nBeta); if(nAlpha+nBeta<1) { GtkWidget* message = Message(_("Error : You should select at last one orbital"),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } else if(nAlpha+nBeta==1) { gint i = -1; gint typeOrb = -1; delete_child(Win); if(nAlpha==1 && numAlphaOrbs) { typeOrb = 1; i = numAlphaOrbs[0]; } else if(nBeta==1 && numBetaOrbs) { typeOrb = 2; i = numBetaOrbs[0]; } if(i>-1 && typeOrb>0) { result = compute_transition_matrix( NumPoints,limits, typeOrb, i, typeOrb, i, integ, &normi, &normj, &overlap, numeric); } } else { gint typeOrbi = 1; gint typeOrbj = 1; delete_child(Win); if(numAlphaOrbs) for(i=0;i"); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Grid "); vboxall = create_vbox(Win); vboxwin = vboxall; hbox = gtk_hbox_new (TRUE, 0); gtk_box_pack_start (GTK_BOX (vboxall), hbox, TRUE, TRUE, 0); label = gtk_label_new(""); gtk_label_set_markup(GTK_LABEL(label), "Use mouse + the Ctrl key (or the shift key) to select several orbitals\n"); gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); hbox = create_orbitals_list(vboxall); alphaList = g_object_get_data (G_OBJECT (hbox), "AlphaList"); g_object_set_data (G_OBJECT (Win), "AlphaList",alphaList); betaList = g_object_get_data (G_OBJECT (hbox), "BetaList"); g_object_set_data (G_OBJECT (Win), "BetaList",betaList); gtk_box_pack_start (GTK_BOX (vboxall), gtk_hseparator_new(), TRUE, TRUE, 5); frameMethod = gtk_frame_new(_("Method")); gtk_box_pack_start (GTK_BOX (vboxall), frameMethod, TRUE, TRUE, 2); vbox = create_vbox(frameMethod); gtk_widget_show_all (vbox); table = gtk_table_new(2,2,FALSE); gtk_container_add(GTK_CONTAINER(vbox),table); gtk_widget_show (table); numericButton = gtk_check_button_new_with_label ( _("Numerical computing (Large box is recommended)")); gtk_table_attach(GTK_TABLE(table),numericButton,0,0+2,0,0+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); g_signal_connect(G_OBJECT(numericButton), "clicked",(GCallback)numeriButtonClicked,NULL); g_object_set_data (G_OBJECT (Win), "NumericButton",numericButton); frameGrid = create_grid_frame(vboxall,"Box & Grid"); entries = (GtkWidget**) g_object_get_data (G_OBJECT (frameGrid), "Entries"); g_object_set_data (G_OBJECT (Win), "Entries",entries); g_object_set_data (G_OBJECT (Win), "FrameGrid",frameGrid); g_object_set_data (G_OBJECT (numericButton), "FrameGrid",frameGrid); gtk_widget_set_sensitive(frameGrid, GTK_TOGGLE_BUTTON (numericButton)->active); if(!AOrb && SAOrb) { gtk_button_clicked (GTK_BUTTON (numericButton)); gtk_widget_set_sensitive(numericButton, FALSE); } hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("OK")); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_transition_matrix,G_OBJECT(Win)); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, G_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,G_OBJECT(Win)); gtk_widget_show (button); gtk_widget_show_all (Win); if(NAlphaOcc-1>=0) { select_row(alphaList,NAlphaOcc-1); if(NAlphaOcc+1<=NOrb) select_row(alphaList,NAlphaOcc); } else { select_row(alphaList,0); if(2<=NOrb) select_row(alphaList,1); } } /********************************************************************************/ gchar* compute_spatial_overlapiijj(gint N[],GridLimits limits, gint typeOrbi, gint ii, gint typeOrbj, gint jj, gdouble* integ, gdouble* pNormi, gdouble* pNormj, gdouble* pOverlap, gboolean numeric, gdouble schwarzCutOff) { gchar* tmp = NULL; if(numeric) { if(!compute_spatial_overlapiijj_numeric(N, limits, typeOrbi, ii, typeOrbj, jj, integ, pNormi, pNormj, pOverlap)) return tmp; if(CancelCalcul) return tmp; ii++; jj++; tmp = g_strdup_printf( "<%d|%d> = %lf\n" "<%d|%d> = %lf\n" "<%d|%d> = %lf\n" "<%d %d|delta(ri,rj)|%d %d> = %0.12lf\n", ii,ii,*pNormi, jj,jj,*pNormj, ii,jj,*pOverlap, ii,ii,jj,jj, *integ ); } else if(!numeric) { setTextInProgress(_("Analytic computing of spatial overlap integral")); *integ = compute_spatial_overlap_analytic(typeOrbi, ii, typeOrbj, jj,schwarzCutOff); if(CancelCalcul) return tmp; *pNormi = get_overlap_analytic(typeOrbi, ii, typeOrbi, ii); *pNormj = get_overlap_analytic(typeOrbj, jj, typeOrbj, jj); *pOverlap = get_overlap_analytic(typeOrbi, ii, typeOrbj, jj); ii++; jj++; tmp = g_strdup_printf( "<%d|%d> = %lf\n" "<%d|%d> = %lf\n" "<%d|%d> = %lf\n" "<%d %d|delta(ri,rj)|%d %d> = %0.12lf\n", ii,ii,*pNormi, jj,jj,*pNormj, ii,jj,*pOverlap, ii,ii,jj,jj, *integ ); } return tmp; } /********************************************************************************/ static void apply_spatial_overlapiijj(GtkWidget *Win,gpointer data) { GtkWidget** entriestmp = NULL; G_CONST_RETURN gchar* temp; gchar* dump; gint i; gint j; GridLimits limitstmp; gint NumPointstmp[3]; GtkWidget *entries[3][6]; gdouble V[3][3]; GtkWidget* alphaList = NULL; GtkWidget* betaList = NULL; GtkWidget* numericButton = NULL; GtkWidget* entrySchwarz = NULL; gint* numAlphaOrbs = NULL; gint* numBetaOrbs = NULL; gint nAlpha = 0; gint nBeta = 0; gdouble integ[3], normi, normj, overlap; gchar* result = NULL; gboolean numeric = FALSE; gdouble schwarzCutOff; if(GTK_IS_WIDGET(Win)) { entriestmp = (GtkWidget **)g_object_get_data(G_OBJECT (Win), "Entries"); alphaList = g_object_get_data (G_OBJECT (Win), "AlphaList"); betaList = g_object_get_data (G_OBJECT (Win), "BetaList"); numericButton = g_object_get_data (G_OBJECT (Win), "NumericButton"); entrySchwarz = g_object_get_data (G_OBJECT (Win), "EntrySchwarz"); } else return; if(entriestmp==NULL) return; if(!GTK_IS_WIDGET(numericButton)) return; if(!GTK_IS_WIDGET(entrySchwarz)) return; temp = gtk_entry_get_text(GTK_ENTRY(entrySchwarz)); schwarzCutOff = atof(temp); numeric = GTK_TOGGLE_BUTTON (numericButton)->active; destroy_win_list(); if(numeric) { for(i=0;i<3;i++) for(j=0;j<6;j++) entries[i][j] = entriestmp[i*6+j]; for(i=0;i<3;i++) { for(j=3;j<5;j++) { temp = gtk_entry_get_text(GTK_ENTRY(entries[i][j])); dump = NULL; if(temp && strlen(temp)>0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { limitstmp.MinMax[j-3][i] = atof(dump); } else { GtkWidget* message = Message(_("Error : an entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } temp = gtk_entry_get_text(GTK_ENTRY(entries[i][5])); NumPointstmp[i] = atoi(temp); if(NumPointstmp[i] <=2) { GtkWidget* message = Message(_("Error : The number of points should be > 2. "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } } for(i=0;i<3;i++) { if( limitstmp.MinMax[0][i]> limitstmp.MinMax[1][i]) { GtkWidget* message = Message(_("Error : The minimal value should be smaller than the maximal value "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } } for(i=0;i<3;i++) { for(j=0;j<3;j++) { V[i][j] = 0; temp = gtk_entry_get_text(GTK_ENTRY(entries[i][j])); dump = NULL; if(temp && strlen(temp)>0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { V[i][j] = atof(dump); } else { GtkWidget* message = Message(_("Error : an entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } } for(i=0;i<3;i++) { gdouble norm = 0.0; for(j=0;j<3;j++) norm += V[i][j]*V[i][j]; if(fabs(norm)<1e-8) { GtkWidget* message = Message(_("Error : the norm is equal to 0 "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } for(j=0;j<3;j++) V[i][j] /= sqrt(norm); } for(j=0;j<3;j++) originOfCube[j] = 0; for(j=0;j<3;j++) firstDirection[j] = V[0][j]; for(j=0;j<3;j++) secondDirection[j] = V[1][j]; for(j=0;j<3;j++) thirdDirection[j] = V[2][j]; for(i=0;i<3;i++) { NumPoints[i] =NumPointstmp[i] ; for(j=0;j<2;j++) limits.MinMax[j][i] =limitstmp.MinMax[j][i]; } } /* end if numeric */ CancelCalcul = FALSE; /* printf("DirName = %s\n",dirName);*/ numAlphaOrbs = get_num_of_selected_orbitals(alphaList, &nAlpha); numBetaOrbs = get_num_of_selected_orbitals(betaList, &nBeta); if(nAlpha+nBeta<1) { GtkWidget* message = Message(_("Error : You should select at last one orbital"),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } else if(nAlpha+nBeta==1) { gint i = -1; gint typeOrb = -1; delete_child(Win); if(nAlpha==1 && numAlphaOrbs) { typeOrb = 1; i = numAlphaOrbs[0]; } else if(nBeta==1 && numBetaOrbs) { typeOrb = 2; i = numBetaOrbs[0]; } if(i>-1 && typeOrb>0) { result = compute_spatial_overlapiijj( NumPoints,limits, typeOrb, i, typeOrb, i, integ, &normi, &normj, &overlap, numeric, schwarzCutOff); } } else { gint typeOrbi = 1; gint typeOrbj = 1; delete_child(Win); if(numAlphaOrbs) for(i=0;i"); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Grid "); vboxall = create_vbox(Win); vboxwin = vboxall; hbox = gtk_hbox_new (TRUE, 0); gtk_box_pack_start (GTK_BOX (vboxall), hbox, TRUE, TRUE, 0); label = gtk_label_new(""); gtk_label_set_markup(GTK_LABEL(label), "Use mouse + the Ctrl key (or the shift key) to select several orbitals\n"); gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); hbox = create_orbitals_list(vboxall); alphaList = g_object_get_data (G_OBJECT (hbox), "AlphaList"); g_object_set_data (G_OBJECT (Win), "AlphaList",alphaList); betaList = g_object_get_data (G_OBJECT (hbox), "BetaList"); g_object_set_data (G_OBJECT (Win), "BetaList",betaList); gtk_box_pack_start (GTK_BOX (vboxall), gtk_hseparator_new(), TRUE, TRUE, 5); frameMethod = gtk_frame_new(_("Method")); gtk_box_pack_start (GTK_BOX (vboxall), frameMethod, TRUE, TRUE, 2); vbox = create_vbox(frameMethod); gtk_widget_show_all (vbox); table = gtk_table_new(2,2,FALSE); gtk_container_add(GTK_CONTAINER(vbox),table); gtk_widget_show (table); numericButton = gtk_check_button_new_with_label ( _("Numerical computing (Large box is recommended)")); gtk_table_attach(GTK_TABLE(table),numericButton,0,0+2,0,0+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); g_signal_connect(G_OBJECT(numericButton), "clicked",(GCallback)numeriButtonClicked,NULL); g_object_set_data (G_OBJECT (Win), "NumericButton",numericButton); label = gtk_label_new(_(" Schwarz cutoff : ")); gtk_table_attach(GTK_TABLE(table),label,0,0+1,1,1+1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); g_object_set_data (G_OBJECT (Win), "LabelSchwarz",label); g_object_set_data (G_OBJECT (numericButton), "LabelSchwarz",label); entrySchwarz = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entrySchwarz),"1e-8"); gtk_table_attach(GTK_TABLE(table),entrySchwarz,1,1+1,1,1+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); g_object_set_data (G_OBJECT (Win), "EntrySchwarz",entrySchwarz); g_object_set_data (G_OBJECT (numericButton), "EntrySchwarz",entrySchwarz); frameGrid = create_grid_frame(vboxall,"Box & Grid"); entries = (GtkWidget**) g_object_get_data (G_OBJECT (frameGrid), "Entries"); g_object_set_data (G_OBJECT (Win), "Entries",entries); g_object_set_data (G_OBJECT (Win), "FrameGrid",frameGrid); g_object_set_data (G_OBJECT (numericButton), "FrameGrid",frameGrid); gtk_widget_set_sensitive(frameGrid, GTK_TOGGLE_BUTTON (numericButton)->active); if(!AOrb && SAOrb) { gtk_button_clicked (GTK_BUTTON (numericButton)); gtk_widget_set_sensitive(numericButton, FALSE); } hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("OK")); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_spatial_overlapiijj,G_OBJECT(Win)); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, G_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,G_OBJECT(Win)); gtk_widget_show (button); gtk_widget_show_all (Win); if(NAlphaOcc-1>=0) { select_row(alphaList,NAlphaOcc-1); if(NAlphaOcc+1<=NOrb) select_row(alphaList,NAlphaOcc); } else { select_row(alphaList,0); if(2<=NOrb) select_row(alphaList,1); } } /********************************************************************************/ gchar* compute_spatial_overlapij(gint N[],GridLimits limits, gint typeOrbi, gint ii, gint typeOrbj, gint jj, gdouble* integ, gdouble* pNormi, gdouble* pNormj, gdouble* pOverlap) { gchar* tmp = NULL; if(!compute_spatial_overlapij_numeric(N, limits, typeOrbi, ii, typeOrbj, jj, integ, pNormi, pNormj, pOverlap)) return tmp; if(CancelCalcul) return tmp; ii++; jj++; tmp = g_strdup_printf( "<%d|%d> = %lf\n" "<%d|%d> = %lf\n" "<%d|%d> = %lf\n" "< |%d| | |%d|> = %0.12lf\n", ii,ii,*pNormi, jj,jj,*pNormj, ii,jj,*pOverlap, ii,jj, *integ ); return tmp; } /********************************************************************************/ static void apply_spatial_overlapij(GtkWidget *Win,gpointer data) { GtkWidget** entriestmp = NULL; G_CONST_RETURN gchar* temp; gchar* dump; gint i; gint j; GridLimits limitstmp; gint NumPointstmp[3]; GtkWidget *entries[3][6]; gdouble V[3][3]; GtkWidget* alphaList = NULL; GtkWidget* betaList = NULL; gint* numAlphaOrbs = NULL; gint* numBetaOrbs = NULL; gint nAlpha = 0; gint nBeta = 0; gdouble integ[3], normi, normj, overlap; gchar* result = NULL; if(GTK_IS_WIDGET(Win)) { entriestmp = (GtkWidget **)g_object_get_data(G_OBJECT (Win), "Entries"); alphaList = g_object_get_data (G_OBJECT (Win), "AlphaList"); betaList = g_object_get_data (G_OBJECT (Win), "BetaList"); } else return; if(entriestmp==NULL) return; destroy_win_list(); for(i=0;i<3;i++) for(j=0;j<6;j++) entries[i][j] = entriestmp[i*6+j]; for(i=0;i<3;i++) { for(j=3;j<5;j++) { temp = gtk_entry_get_text(GTK_ENTRY(entries[i][j])); dump = NULL; if(temp && strlen(temp)>0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { limitstmp.MinMax[j-3][i] = atof(dump); } else { GtkWidget* message = Message(_("Error : an entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } temp = gtk_entry_get_text(GTK_ENTRY(entries[i][5])); NumPointstmp[i] = atoi(temp); if(NumPointstmp[i] <=2) { GtkWidget* message = Message(_("Error : The number of points should be > 2. "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } } for(i=0;i<3;i++) { if( limitstmp.MinMax[0][i]> limitstmp.MinMax[1][i]) { GtkWidget* message = Message(_("Error : The minimal value should be smaller than the maximal value "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } } for(i=0;i<3;i++) { for(j=0;j<3;j++) { V[i][j] = 0; temp = gtk_entry_get_text(GTK_ENTRY(entries[i][j])); dump = NULL; if(temp && strlen(temp)>0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { V[i][j] = atof(dump); } else { GtkWidget* message = Message(_("Error : an entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } } for(i=0;i<3;i++) { gdouble norm = 0.0; for(j=0;j<3;j++) norm += V[i][j]*V[i][j]; if(fabs(norm)<1e-8) { GtkWidget* message = Message(_("Error : the norm is equal to 0 "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } for(j=0;j<3;j++) V[i][j] /= sqrt(norm); } for(j=0;j<3;j++) originOfCube[j] = 0; for(j=0;j<3;j++) firstDirection[j] = V[0][j]; for(j=0;j<3;j++) secondDirection[j] = V[1][j]; for(j=0;j<3;j++) thirdDirection[j] = V[2][j]; for(i=0;i<3;i++) { NumPoints[i] =NumPointstmp[i] ; for(j=0;j<2;j++) limits.MinMax[j][i] =limitstmp.MinMax[j][i]; } CancelCalcul = FALSE; /* printf("DirName = %s\n",dirName);*/ numAlphaOrbs = get_num_of_selected_orbitals(alphaList, &nAlpha); numBetaOrbs = get_num_of_selected_orbitals(betaList, &nBeta); if(nAlpha+nBeta<1) { GtkWidget* message = Message(_("Error : You should select at last one orbital"),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } else if(nAlpha+nBeta==1) { gint i = -1; gint typeOrb = -1; delete_child(Win); if(nAlpha==1 && numAlphaOrbs) { typeOrb = 1; i = numAlphaOrbs[0]; } else if(nBeta==1 && numBetaOrbs) { typeOrb = 2; i = numBetaOrbs[0]; } if(i>-1 && typeOrb>0) { result = compute_spatial_overlapij( NumPoints,limits, typeOrb, i, typeOrb, i, integ, &normi, &normj, &overlap); } } else { gint typeOrbi = 1; gint typeOrbj = 1; delete_child(Win); if(numAlphaOrbs) for(i=0;i"); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Grid "); vboxall = create_vbox(Win); vboxwin = vboxall; hbox = gtk_hbox_new (TRUE, 0); gtk_box_pack_start (GTK_BOX (vboxall), hbox, TRUE, TRUE, 0); label = gtk_label_new(""); gtk_label_set_markup(GTK_LABEL(label), "Use mouse + the Ctrl key (or the shift key) to select several orbitals\n"); gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); hbox = create_orbitals_list(vboxall); alphaList = g_object_get_data (G_OBJECT (hbox), "AlphaList"); g_object_set_data (G_OBJECT (Win), "AlphaList",alphaList); betaList = g_object_get_data (G_OBJECT (hbox), "BetaList"); g_object_set_data (G_OBJECT (Win), "BetaList",betaList); gtk_box_pack_start (GTK_BOX (vboxall), gtk_hseparator_new(), TRUE, TRUE, 5); frameGrid = create_grid_frame(vboxall,"Box & Grid"); entries = (GtkWidget**) g_object_get_data (G_OBJECT (frameGrid), "Entries"); g_object_set_data (G_OBJECT (Win), "Entries",entries); g_object_set_data (G_OBJECT (Win), "FrameGrid",frameGrid); gtk_widget_set_sensitive(frameGrid, TRUE); hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("OK")); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_spatial_overlapij,G_OBJECT(Win)); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, G_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,G_OBJECT(Win)); gtk_widget_show (button); gtk_widget_show_all (Win); if(NAlphaOcc-1>=0) { select_row(alphaList,NAlphaOcc-1); if(NAlphaOcc+1<=NOrb) select_row(alphaList,NAlphaOcc); } else { select_row(alphaList,0); if(2<=NOrb) select_row(alphaList,1); } } /************************************************************************************************************/ static void setPartialChargesToCalculated(GtkWidget *win) { gint i; gdouble* charges = NULL; if(GTK_IS_WIDGET(win)) charges = g_object_get_data(G_OBJECT (win), "Charges"); if(!charges) return; for(i=0;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); txtWid = create_text_widget(vboxframe,NULL,&frame); if(message) gabedit_text_insert (GABEDIT_TEXT(txtWid), NULL, NULL, NULL,message,-1); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), FALSE); button = create_button(dlgWin,_("Partial charges of molecule <= Calculated charges")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)setPartialChargesToCalculated, GTK_OBJECT(dlgWin)); button = create_button(dlgWin,"Close"); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)destroyCalculatedChargesDlg, GTK_OBJECT(dlgWin)); add_button_windows(title,dlgWin); gtk_window_set_default_size (GTK_WINDOW(dlgWin), (gint)(ScreenHeight*0.6), (gint)(ScreenHeight*0.5)); gtk_widget_show_all(dlgWin); g_object_set_data(G_OBJECT (dlgWin), "Charges",charges); return dlgWin; } /********************************************************************************/ void compute_mulliken_charges() { gint i,k,l; gchar* result = NULL; gdouble* charges = NULL; gchar* tmp = NULL; gdouble o; gint nAll = 0; gint delta = 0; gint pos = 0; gdouble scal; gchar str[BSIZE]; gint kk=0; if(Ncenters<1) return; if(!AOrb && (!SAOrb || !SOverlaps)) return; destroy_win_list(); sprintf(str,_("Computing of mulliken charges... Please wait")); setTextInProgress(str); scal = 0.01; delta = (gint)(NAOrb*(NAOrb+1)/2*scal); if(delta<1) delta = 1; pos = delta; charges = g_malloc(Ncenters*sizeof(gdouble)); for(i=0;i=pos) { pos += delta; progress_orb_txt(scal,str,FALSE); } } } progress_orb_txt(0," ",TRUE); result = g_malloc(Ncenters*100*sizeof(gchar)); tmp = g_malloc(BSIZE*sizeof(gchar)); sprintf(result," Mulliken charges\n"); setTextInProgress(_("Preparation of text to show... Please wait")); for(i=0;ij) ii = j*Ncenters + i - j*(j+1)/2; if((gint)(bondOrders[ii]+0.5)==1) { BondType* A=g_malloc(sizeof(BondType)); A->n1 = i; A->n2 = j; A->bondType = GABEDIT_BONDTYPE_SINGLE; BondsOrb = g_list_append(BondsOrb,A); } else if((gint)(bondOrders[ii]+0.5)==2) { BondType* A=g_malloc(sizeof(BondType)); A->n1 = i; A->n2 = j; A->bondType = GABEDIT_BONDTYPE_DOUBLE; BondsOrb = g_list_append(BondsOrb,A); } else if((gint)(bondOrders[ii]+0.5)==3) { BondType* A=g_malloc(sizeof(BondType)); A->n1 = i; A->n2 = j; A->bondType = GABEDIT_BONDTYPE_TRIPLE; BondsOrb = g_list_append(BondsOrb,A); } else if(ShowHBondOrb && hbonded(i,j)) { BondType* A=g_malloc(sizeof(BondType)); A->n1 = i; A->n2 = j; A->bondType = GABEDIT_BONDTYPE_HYDROGEN; BondsOrb = g_list_append(BondsOrb,A); } } } RebuildGeom = TRUE; glarea_rafresh(GLArea); } /************************************************************************************************************/ static void destroyCalculatedBondOrdersDlg(GtkWidget *win) { gdouble* bondOrders = NULL; if(GTK_IS_WIDGET(win)) bondOrders = g_object_get_data(G_OBJECT (win), "BondOrders"); if(bondOrders) g_free(bondOrders); if(GTK_IS_WIDGET(win)) delete_child(win); if(GTK_IS_WIDGET(win)) gtk_widget_destroy(win); } /********************************************************************************/ static GtkWidget* showCalculatedBondOrdersDlg(gchar *message,gchar *title,gdouble* bondOrders) { GtkWidget *dlgWin = NULL; GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *txtWid; GtkWidget *button; dlgWin = gtk_dialog_new(); gtk_widget_realize(GTK_WIDGET(dlgWin)); gtk_window_set_title(GTK_WINDOW(dlgWin),title); gtk_window_set_position(GTK_WINDOW(dlgWin),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (dlgWin), TRUE); gtk_window_set_transient_for(GTK_WINDOW(dlgWin),GTK_WINDOW(PrincipalWindow)); g_signal_connect(G_OBJECT(dlgWin), "delete_event", (GCallback)destroyCalculatedBondOrdersDlg, NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(dlgWin)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); txtWid = create_text_widget(vboxframe,NULL,&frame); if(message) gabedit_text_insert (GABEDIT_TEXT(txtWid), NULL, NULL, NULL,message,-1); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), FALSE); button = create_button(dlgWin,_("Multiple bonds <= Calculated bondOrders")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)setBondOrdersToCalculated, GTK_OBJECT(dlgWin)); button = create_button(dlgWin,"Close"); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)destroyCalculatedBondOrdersDlg, GTK_OBJECT(dlgWin)); add_button_windows(title,dlgWin); gtk_window_set_default_size (GTK_WINDOW(dlgWin), (gint)(ScreenHeight*0.6), (gint)(ScreenHeight*0.5)); gtk_widget_show_all(dlgWin); g_object_set_data(G_OBJECT (dlgWin), "BondOrders",bondOrders); return dlgWin; } /********************************************************************************/ void compute_bondOrders() { gint i,j,k,l,m; gchar* result = NULL; gdouble* bondOrders = NULL; gchar* tmp = NULL; gdouble o; gint nAll = 0; gint delta = 0; gint pos = 0; gdouble scal; gchar str[BSIZE]; gdouble** S = NULL; gdouble** Pa = NULL; gdouble** Pb = NULL; gdouble** PS = NULL; gint n2 = Ncenters*(Ncenters+1)/2; gint kk; if(Ncenters<1) return; if(!AOrb && (!SAOrb || !SOverlaps)) return; destroy_win_list(); sprintf(str,_("Computing of bond order matrix... Please wait")); setTextInProgress(str); scal = 0.01; delta = (gint)(NAOrb*(NAOrb+1)/2*scal); if(delta<1) delta = 1; pos = delta; bondOrders = g_malloc(n2*sizeof(gdouble)); for(i=0;i=pos) { pos += delta; progress_orb_txt(scal,str,FALSE); } } } for(k=0;kj) ii = j*Ncenters + i - j*(j+1)/2; bondOrders[ii] += PS[k][l]*PS[l][k]; } /* printf(" k %d %f\n",i, PS[k][k]);*/ s1 += PS[k][k]; } /* printf(" s1 = %f\n",s1);*/ for(k=0;kj) ii = j*Ncenters + i - j*(j+1)/2; bondOrders[ii] += PS[k][l]*PS[l][k]; } /* printf(" k %d %f\n",i, PS[k][k]);*/ s2 += PS[k][k]; } /* printf(" s2 = %f\n",s2);*/ progress_orb_txt(0," ",TRUE); for(i=0;ij) ii = j*Ncenters + i - j*(j+1)/2; if(CancelCalcul) break; sprintf(tmp,"Bond %d-%d : %lf\n",i+1,j+1,bondOrders[ii]); strcat(result,tmp); if(CancelCalcul) break; } g_free(tmp); progress_orb_txt(0," ",TRUE); if(result && !CancelCalcul) { GtkWidget* message = showCalculatedBondOrdersDlg(result,"Bond orders ",bondOrders); gtk_window_set_modal (GTK_WINDOW (message), TRUE); gtk_window_set_transient_for(GTK_WINDOW(message),GTK_WINDOW(PrincipalWindow)); } g_free(result); } /********************************************************************************/ static void messageErrorTrans(gchar* fileName) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not read transition properties from '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); } /********************************************************************************/ /* static gboolean read_tansition_properties(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gchar type1[20]; gchar type2[20]; gint i1; gint i2; gdouble coef; gboolean OK = TRUE; gint numberOfTransitions = 0; gint* fromI = NULL; gint* toI = NULL; gchar** fromType = NULL; gchar** toType = NULL; gdouble* coefficients = NULL; gchar *FileName; FILE *fd; int ne = 0; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; while(!feof(fd)) { if(!fgets(t,BSIZE,fd))break; ne = sscanf(t,"%d %s %d %s %lf",&i1,type1, &i2, type2, &coef); if(ne==5 && i1<=NAOrb && i2<=NAOrb && i1>0 && i2>0) { numberOfTransitions++; coefficients = g_realloc(coefficients, numberOfTransitions*sizeof(gdouble)); fromI = g_realloc(fromI, numberOfTransitions*sizeof(gint)); toI = g_realloc(toI, numberOfTransitions*sizeof(gint)); fromType = g_realloc(fromType, numberOfTransitions*sizeof(gchar*)); toType = g_realloc(toType, numberOfTransitions*sizeof(gchar*)); coefficients[numberOfTransitions-1] = coef; fromI[numberOfTransitions-1] = i1; toI[numberOfTransitions-1] = i2; fromType[numberOfTransitions-1] = g_strdup(type1); toType[numberOfTransitions-1] = g_strdup(type2); printf("t=%s\n",t); } else { OK= FALSE; break;} } if(numberOfTransitions>0 && OK) { //createIRSpectrumWin(numberOfFrequencies, frequencies, intensities); } else { OK = FALSE; messageErrorTrans(FileName); } if(coefficients) g_free(coefficients); if(fromType) { gint i; for(i=0;i0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { limitstmp.MinMax[j-3][i] = atof(dump); } else { GtkWidget* message = Message(_("Error : an entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } temp = gtk_entry_get_text(GTK_ENTRY(entries[i][5])); NumPointstmp[i] = atoi(temp); if(NumPointstmp[i] <=2) { GtkWidget* message = Message(_("Error : The number of points should be > 2. "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } } for(i=0;i<3;i++) { if( limitstmp.MinMax[0][i]> limitstmp.MinMax[1][i]) { GtkWidget* message = Message(_("Error : The minimal value should be smaller than the maximal value "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } } for(i=0;i<3;i++) { for(j=0;j<3;j++) { V[i][j] = 0; temp = gtk_entry_get_text(GTK_ENTRY(entries[i][j])); dump = NULL; if(temp && strlen(temp)>0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { V[i][j] = atof(dump); } else { GtkWidget* message = Message(_("Error : an entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } } for(i=0;i<3;i++) { gdouble norm = 0.0; for(j=0;j<3;j++) norm += V[i][j]*V[i][j]; if(fabs(norm)<1e-8) { GtkWidget* message = Message(_("Error : the norm is equal to 0 "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } for(j=0;j<3;j++) V[i][j] /= sqrt(norm); } for(j=0;j<3;j++) originOfCube[j] = 0; for(j=0;j<3;j++) firstDirection[j] = V[0][j]; for(j=0;j<3;j++) secondDirection[j] = V[1][j]; for(j=0;j<3;j++) thirdDirection[j] = V[2][j]; for(i=0;i<3;i++) { NumPoints[i] =NumPointstmp[i] ; for(j=0;j<2;j++) limits.MinMax[j][i] =limitstmp.MinMax[j][i]; } CancelCalcul = FALSE; /* printf("DirName = %s\n",dirName);*/ FileName = gabedit_file_chooser_get_current_file(GABEDIT_FILE_CHOOSER(buttonFileSelector)); fd = FOpen(FileName, "rb"); if(!fd) { GtkWidget* message = Message(_("I cannot open the data file "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } while(!feof(fd)) { gdouble scale = 1.0; if(!fgets(t,BSIZE,fd))break; ne = sscanf(t,"%d %s %d %s %lf",&i1,type1, &i2, type2, &coef); if(ne!=5 ) { ne = sscanf(t,"%d %d %lf",&i1, &i2, &coef); ne=5; sprintf(type1,"A"); sprintf(type2,"A"); scale = sqrt(2.0);} if(ne==5 && i1<=NAOrb && i2<=NAOrb && i1>0 && i2>0) { numberOfTransitions++; coefficients = g_realloc(coefficients, numberOfTransitions*sizeof(gdouble)); fromI = g_realloc(fromI, numberOfTransitions*sizeof(gint)); toI = g_realloc(toI, numberOfTransitions*sizeof(gint)); fromType = g_realloc(fromType, numberOfTransitions*sizeof(gchar*)); toType = g_realloc(toType, numberOfTransitions*sizeof(gchar*)); coefficients[numberOfTransitions-1] = coef*scale; fromI[numberOfTransitions-1] = i1-1; toI[numberOfTransitions-1] = i2-1; fromType[numberOfTransitions-1] = 1; toType[numberOfTransitions-1] = 1; if(strstr(type1,"B") || strstr(type1,"b")) fromType[numberOfTransitions-1] = 2; if(strstr(type2,"B") || strstr(type2,"b")) toType[numberOfTransitions-1] = 2; printf("t=%s\n",t); } else { OK= FALSE; break;} } if(numberOfTransitions==0 || !OK) { messageErrorTrans(FileName); if(coefficients) g_free(coefficients); if(fromType) g_free(fromType); if(toType) g_free(toType); if(fromI) g_free(fromI); if(toI) g_free(toI); return; } fclose(fd); /* computing */ { gint typeOrbi = 1; gint typeOrbj = 1; gdouble lambda = 0.0; gdouble sum = 0.0; gdouble cc = 0.0; gchar* old; delete_child(Win); for(i=0;i0) lambda /= sum; /* put result in result variable */ old = result; if(old) { result = g_strdup_printf("%s\nSum = %f\nLambda = %f\n",old,sum,lambda); g_free(old); } else result = g_strdup_printf("Sum = %f\nLambda = %f\n",sum,lambda); } if(result && !CancelCalcul) { GtkWidget* message = MessageTxt(result,_("Result")); gtk_window_set_default_size (GTK_WINDOW(message),(gint)(ScreenWidth*0.8),-1); gtk_widget_set_size_request(message,(gint)(ScreenWidth*0.45),-1); /* gtk_window_set_modal (GTK_WINDOW (message), TRUE);*/ gtk_window_set_transient_for(GTK_WINDOW(message),GTK_WINDOW(PrincipalWindow)); } set_label_title(NULL,0,0); if(CancelCalcul) CancelCalcul = FALSE; if(coefficients) g_free(coefficients); if(fromType) g_free(fromType); if(toType) g_free(toType); if(fromI) g_free(fromI); if(toI) g_free(toI); } /***************************************************************************/ static void help_trans_prop() { gchar temp[BSIZE]; GtkWidget* win; sprintf(temp, _(" Lambda is calculated as in M.J.G. Peach et al. J. Chem. Phys. 128, 044118 (2008).\n\n" " You must select the file containing the transition properties. \n\n" " The text file must contain 5 columns by line.\n" " First line : an integer. The electron is excited from this orbital.\n" " second line : a character B or A. The spin of electron.\n" " Third line : an integer. The electron is excited to this orbital.\n" " Forth line : a character B or A. The spin of electron.\n" " Fifth line : a float. The largest coefficients in the CI expansion.\n\n" " Example :\n" " 5 B 6 B 0.401\n" " 4 A 7 B 0.205\n\n" " A text file with 3 columns by line is also accepted.\n" " Example :\n" " 5 6 0.401\n" " 4 7 0.205\n\n" ) ); win = Message(temp,_(" Info "),FALSE); gtk_window_set_modal (GTK_WINDOW (win), TRUE); } /********************************************************************************/ void lambda_diagnostic_dlg() { GtkWidget *Win; GtkWidget *frameGrid; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *button; /* GtkWidget *label;*/ GtkWidget** entries; GtkWidget *buttonFileSelector; G_CONST_RETURN gchar* temp; static gboolean first = TRUE; if(!GeomOrb) { Message(_("Sorry, Please read the MO before\n"),_("Error"),TRUE); return; } if(!CoefAlphaOrbitals) { Message(_("Sorry, Please load the MO before\n"),_("Error"),TRUE); return; } if(!AOrb && !SAOrb) { Message(_("Sorry, Please load the MO before\n"),_("Error"),TRUE); return; } if(!AOAvailable &&(TypeGrid == GABEDIT_TYPEGRID_DDENSITY || TypeGrid == GABEDIT_TYPEGRID_ADENSITY)) { Message(_("Sorry, No atomic orbitals available.\nPlease use a gabedit file for load : \n" "Geometry, Molecular and Atomic Orbitals\n"),_("Error"),TRUE); return; } Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),"Lambda diagnostic"); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Grid "); vboxall = create_vbox(Win); vboxwin = vboxall; hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vboxall), hbox, TRUE, TRUE, 0); /* label = gtk_label_new(_("File containing the transition properties :")); gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); */ buttonFileSelector = gtk_file_chooser_button_new(_("select the file containing the transition properties(5columns : num1 type(alpha or beta) num2 type coefficient)"), GTK_FILE_CHOOSER_ACTION_OPEN); g_object_set_data (G_OBJECT (Win), "ButtonFileSelector",buttonFileSelector); gtk_box_pack_start (GTK_BOX (hbox), buttonFileSelector, TRUE, TRUE, 5); button = create_button(Win,_("Help")); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 5); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)help_trans_prop,G_OBJECT(Win)); gtk_box_pack_start (GTK_BOX (vboxall), gtk_hseparator_new(), TRUE, TRUE, 5); frameGrid = create_grid_frame(vboxall,"Box & Grid"); entries = (GtkWidget**) g_object_get_data (G_OBJECT (frameGrid), "Entries"); if(first) { temp = gtk_entry_get_text(GTK_ENTRY(entries[3])); if(temp && strlen(temp)>0) { gchar* newval = g_strdup_printf("%f",atof(temp)*5); gtk_entry_set_text(GTK_ENTRY(entries[3]),newval); } first = FALSE; } g_object_set_data (G_OBJECT (Win), "Entries",entries); g_object_set_data (G_OBJECT (Win), "FrameGrid",frameGrid); gtk_widget_set_sensitive(frameGrid, TRUE); hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("OK")); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_lambda_diagnostic,G_OBJECT(Win)); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, G_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,G_OBJECT(Win)); gtk_widget_show (button); gtk_widget_show_all (Win); } GabeditSrc250/src/Display/ExportGL.h0000644000175100017510000000022513130665225017543 0ustar alloucheallouche #ifndef __GABEDIT_EXPORTGL_H__ #define __GABEDIT_EXPORTGL_H__ void export_scene(GtkWidget* Win,gchar* type); #endif /* __GABEDIT_EXPORTGL_H__ */ GabeditSrc250/src/Display/OrbitalsDalton.c0000644000175100017510000003456213130665225020766 0ustar alloucheallouche/* OrbitalsDalton.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "../Utils/AtomsProp.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "GeomDraw.h" #include "GLArea.h" #include "UtilsOrb.h" #include "Basis.h" #include "GeomOrbXYZ.h" #include "AtomicOrbitals.h" #include "StatusOrb.h" #include "Basis.h" #include "Orbitals.h" #define MAXSYM 8 /*****************************************/ typedef struct _OneBasisSymmetry { gint numsym; gchar *sym; gint nOrbs; gint* numbOrbs; gint** numOrbs; gint** signe; }OneBasisSymmetry; /*****************************************/ static void DefineType() { gint i,j; gint OK; Ntype =1; GeomOrb[0].NumType=0; for(i=1;i0) { GeomOrb=g_malloc(natoms*sizeof(TypeGeomOrb)); fgets(t,taille,file); } for(j=0;j0) { basisSymmetry[i].numbOrbs = g_malloc(nO[i]*sizeof(gint)); basisSymmetry[i].numOrbs = g_malloc(nO[i]*sizeof(gint*)); basisSymmetry[i].signe = g_malloc(nO[i]*sizeof(gint*)); } for(j=0;j%s nOAvant = %d\n",strbasis[row], nO); nO += sscanf(strbasis[row],"%s %s %s %s", dum, dum, dum, dum); printf("------->%s nOApres = %d\n",strbasis[row], nO); } } } } printf("nBlock = %d\n", nBlock); for(i = 0; i< nBlock; i++) { printf("nE = %d nO = %d numCenter = %d\n", nExp[i], nOrbs[i], nCents[i]); } printf("\n"); for(row = 0; row0) { new_val = gtk_progress_bar_get_fraction( GTK_PROGRESS_BAR(ProgressBar) ) + scal; if (new_val > 1) new_val = 1; } else { new_val = gtk_progress_bar_get_fraction( GTK_PROGRESS_BAR(ProgressBar) ) - scal; if (new_val > 1) new_val = 1; if (new_val <0 ) new_val = 0; } gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (ProgressBar), new_val); gtk_widget_set_sensitive(button, TRUE); gtk_statusbar_pop(GTK_STATUSBAR(StatusProgress),idStatus); gtk_statusbar_push(GTK_STATUSBAR(StatusProgress),idStatus, str); while( gtk_events_pending() ) gtk_main_iteration(); return TRUE; } /********************************************************************************/ gint progress_orb(gdouble scal,GabEditTypeProgressOrb type,gboolean reset) { gdouble new_val; gchar *t = NULL; guint idStatus = 0; if(reset) { gtk_widget_show(ProgressBar); new_val = 0; gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (ProgressBar), new_val); gtk_widget_set_sensitive(button, FALSE); idStatus= gtk_statusbar_get_context_id(GTK_STATUSBAR(StatusProgress),"Testing"); gtk_statusbar_pop(GTK_STATUSBAR(StatusProgress),idStatus); while( gtk_events_pending() ) gtk_main_iteration(); return TRUE; } else if(scal>0) { new_val = gtk_progress_bar_get_fraction( GTK_PROGRESS_BAR(ProgressBar) ) + scal; if (new_val > 1) new_val = 1; } else { new_val = gtk_progress_bar_get_fraction( GTK_PROGRESS_BAR(ProgressBar) ) - scal; if (new_val > 1) new_val = 1; if (new_val <0 ) new_val = 0; } while( gtk_events_pending() ) gtk_main_iteration(); /* Set the new value */ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (ProgressBar), new_val); switch(type) { case GABEDIT_PROGORB_UNK : t = g_strdup_printf(_(" %.0f%%"),new_val*100); break; case GABEDIT_PROGORB_READGEOM: t = g_strdup_printf(_(" Geometry Reading : %.0f%%"),new_val*100); break; case GABEDIT_PROGORB_SAVEGEOM: t = g_strdup_printf(_(" Recording of the geometry : %.0f%%"),new_val*100); break; case GABEDIT_PROGORB_COMPINTEG: t = g_strdup_printf(_(" Computing of an integral : %.0f%%"),new_val*100); break; case GABEDIT_PROGORB_COMPGRID : if(TypeGrid == GABEDIT_TYPEGRID_EDENSITY) t = g_strdup_printf(_(" Computing of the electronic density grid : %.0f%%"),new_val*100); else if(TypeGrid == GABEDIT_TYPEGRID_ORBITAL) t = g_strdup_printf(_(" Grid computing for an orbital : %.0f%%"),new_val*100); else if(TypeGrid == GABEDIT_TYPEGRID_ELFBECKE || TypeGrid == GABEDIT_TYPEGRID_ELFSAVIN) t = g_strdup_printf(_(" Grid computing for the ELF : %.0f%%"),new_val*100); else if(TypeGrid == GABEDIT_TYPEGRID_FEDELECTROPHILIC) t = g_strdup_printf(_(" Grid computing for the Electro. susceptibility : %.0f%%"),new_val*100); else if(TypeGrid == GABEDIT_TYPEGRID_FEDNUCLEOPHILIC) t = g_strdup_printf(_(" Grid computing for the Nucleo. susceptibility : %.0f%%"),new_val*100); else if(TypeGrid == GABEDIT_TYPEGRID_FEDRADICAL) t = g_strdup_printf(_(" Grid computing for the Radical. susceptibility : %.0f%%"),new_val*100); else t = g_strdup_printf(_(" Grid Computing : %.0f%%"),new_val*100); break; case GABEDIT_PROGORB_SCALEGRID : t = g_strdup_printf(_(" Scale grid : %.0f%%"),new_val*100); break; case GABEDIT_PROGORB_SUBSGRID : t = g_strdup_printf(_(" Substract grid : %.0f%%"),new_val*100); break; case GABEDIT_PROGORB_COMPISOSURFACE : t = g_strdup_printf(_(" Isosurface Computing : %.0f%%"),new_val*100); break; case GABEDIT_PROGORB_SAVEGRID : t = g_strdup_printf(_(" Save Grid : %.0f%%"),new_val*100); break; case GABEDIT_PROGORB_READGRID : t = g_strdup_printf(_(" Grid reading : %.0f%%"),new_val*100); break; case GABEDIT_PROGORB_MAPGRID : t = g_strdup_printf(_(" Grid mapping : %.0f%%"),new_val*100); break; case GABEDIT_PROGORB_COMPLAPGRID : t = g_strdup_printf(_(" Computing of the laplacian of the grid : %.0f%%"),new_val*100); break; case GABEDIT_PROGORB_COMPGRADGRID : t = g_strdup_printf(_(" Computing of the gradient of the grid : %.0f%%"),new_val*100); break; case GABEDIT_PROGORB_COMPNCIGRID : t = g_strdup_printf(_(" Computing NCI from the density grid : %.0f%%"),new_val*100); break; case GABEDIT_PROGORB_COMPL2GRID : t = g_strdup_printf(_(" Computing sign of middle eigenvalue hessian * grid : %.0f%%"),new_val*100); break; case GABEDIT_PROGORB_SCANFILEGRID : t = g_strdup_printf(_(" Scan file for get the total orbitals number .....")); break; case GABEDIT_PROGORB_COMPMEPGRID : t = g_strdup_printf(_(" Computing of the MEP : %.0f%%"),new_val*100); break; case GABEDIT_PROGORB_COMPMULTIPOL : t = g_strdup_printf(_(" Multipole Computing : %.0f%%"),new_val*100); break; } if(type!= GABEDIT_PROGORB_SCANFILEGRID || (type==GABEDIT_PROGORB_SCANFILEGRID && scal==0)) { idStatus= gtk_statusbar_get_context_id(GTK_STATUSBAR(StatusProgress),"Testing"); gtk_statusbar_pop(GTK_STATUSBAR(StatusProgress),idStatus); gtk_statusbar_push(GTK_STATUSBAR(StatusProgress),idStatus, t); } if( type==GABEDIT_PROGORB_READGRID || type==GABEDIT_PROGORB_COMPGRID || type==GABEDIT_PROGORB_COMPINTEG || type == GABEDIT_PROGORB_SCANFILEGRID || type==GABEDIT_PROGORB_COMPMULTIPOL || type==GABEDIT_PROGORB_COMPLAPGRID || type==GABEDIT_PROGORB_COMPGRADGRID || type==GABEDIT_PROGORB_COMPNCIGRID || type==GABEDIT_PROGORB_COMPL2GRID || type==GABEDIT_PROGORB_COMPMEPGRID ) gtk_widget_set_sensitive(button, TRUE); g_free(t); while( gtk_events_pending() ) gtk_main_iteration(); return TRUE; } /***********************************************************/ void set_status_label_info(gchar* type,gchar* txt) { gchar* tlabels[2][4]={{_("File name"),_("File type"),_("Geometry"),_("Mol. Orb.")}, {_("At. Orb."),_("Grid"),_("IsoSurface")," "}}; guint idStatus = 0; gint i; gint j; for(i=0;i<2;i++) for(j=0;j<4;j++) if(strcmp(type,tlabels[i][j])==0) { gchar*t = g_strdup_printf(" %s : %s ",tlabels[i][j],txt); idStatus= gtk_statusbar_get_context_id(GTK_STATUSBAR(Status[i][j]),"Testing"); gtk_statusbar_pop(GTK_STATUSBAR(Status[i][j]),idStatus); gtk_statusbar_push(GTK_STATUSBAR(Status[i][j]),idStatus, t); g_free(t); break; } progress_orb(0,GABEDIT_PROGORB_READGEOM,TRUE); while( gtk_events_pending() ) gtk_main_iteration(); } /***********************************************************/ void cancel_calcul(GtkWidget* win,gpointer data) { CancelCalcul = TRUE; } /***********************************************************/ GtkWidget *create_progress_bar_orb(GtkWidget *box) { GtkWidget *pbar; GtkWidget *table; table = gtk_table_new(1,4,FALSE); gtk_box_pack_start (GTK_BOX(box), table, FALSE, TRUE, 2); gtk_widget_show (table); StatusProgress = gtk_statusbar_new(); gtk_widget_show(StatusProgress); gtk_table_attach(GTK_TABLE(table),StatusProgress,0,2,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); pbar = gtk_progress_bar_new (); gtk_widget_show(pbar); gtk_table_attach(GTK_TABLE(table),pbar,2,3,0,1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); /* gtk_progress_bar_set_bar_style(GTK_PROGRESS_BAR(pbar),GTK_PROGRESS_DISCRETE); gtk_progress_bar_set_discrete_blocks(GTK_PROGRESS_BAR(pbar),15); */ button = gtk_button_new_with_label(_("Cancel")); gtk_table_attach(GTK_TABLE(table),button,3,4,0,1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); gtk_widget_show_all (button); gtk_widget_set_sensitive(button, FALSE); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)cancel_calcul,NULL); tableProgressBar = table; return pbar; } /********************************************************************************/ void create_status_bar_orb(GtkWidget* box) { GtkWidget *handlebox; GtkWidget* table; gchar* label[2][4]={{_(" File name : Nothing"),_(" File type : Nothing"),_(" Geometry : Nothing"),_(" Mol. Orb. : Nothing")}, {_(" Atomic orb. : Nothing"),_(" Grid : Nothing"),_(" Iso Surface : Nothing"),_(" Right mouse button for popup menu.")}}; guint idStatus = 0; gint i; gint j; handlebox = gtk_handle_box_new (); gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(handlebox),GTK_SHADOW_NONE); gtk_handle_box_set_handle_position (GTK_HANDLE_BOX(handlebox),GTK_POS_LEFT); gtk_widget_show (handlebox); gtk_box_pack_start (GTK_BOX (box), handlebox, FALSE, FALSE, 0); table = gtk_table_new(2,4,FALSE); gtk_container_add (GTK_CONTAINER (handlebox), table); /* Mode Status */ for(i=0;i<2;i++) for(j=0;j<4;j++) { Status[i][j] = gtk_statusbar_new(); gtk_widget_show(Status[i][j]); gtk_table_attach(GTK_TABLE(table),Status[i][j],j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); idStatus= gtk_statusbar_get_context_id(GTK_STATUSBAR(Status[i][j]),"Testing"); gtk_statusbar_pop(GTK_STATUSBAR(Status[i][j]),idStatus); gtk_statusbar_push(GTK_STATUSBAR(Status[i][j]),idStatus, label[i][j]); } gtk_widget_show(table); handleboxStatus = handlebox; } /********************************************************************************/ void create_status_progress_bar_orb(GtkWidget* vbox) { ProgressBar = create_progress_bar_orb(vbox); } /********************************************************************************/ GabeditSrc250/src/Display/ColorMap.c0000644000175100017510000005716713130665225017567 0ustar alloucheallouche/* ColorMap.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Common/Global.h" #include "GlobalOrb.h" #include #include "../Utils/Utils.h" #include "../Utils/UtilsCairo.h" #include "../Utils/Constants.h" #include "ColorMap.h" #include "GLArea.h" /* static ColorMap myColorMap = {0,NULL}; static GtkWidget *handleboxShow; static GdkGC *gc = NULL; */ /******************************************************************************************************************************/ /* static void print_colorMap(ColorMap* colorMap) { gint i; printf("Number of Color = %d\n",colorMap->numberOfColors); for(i=0; inumberOfColors; i++) { printf("%lf %0.2f %0.2f %0.2f\n",colorMap->colorValue[i].value,colorMap->colorValue[i].color[0],colorMap->colorValue[i].color[1],colorMap->colorValue[i].color[2]); } printf("\n"); } */ /******************************************************************************************************************************/ void colormap_free(ColorMap* colorMap) { if(!colorMap) return; if(!colorMap->colorValue) { colorMap->numberOfColors = 0; return; } g_free(colorMap->colorValue); colorMap->numberOfColors = 0; } /******************************************************************************************************************************/ static void colormap_alloc(ColorMap* colorMap, gint numberOfColors) { if(colorMap->colorValue) colormap_free(colorMap); if(numberOfColors<1) numberOfColors = 1; colorMap->numberOfColors = numberOfColors; colorMap->colorValue = g_malloc(numberOfColors*sizeof(OneColorValue)); } /******************************************************************************************************************************/ static ColorMap new_colorMap(gdouble color[], gdouble value) { gint c; ColorMap colorMap = {0,NULL}; colormap_alloc(&colorMap, 1); for(c=0; c<3; c++) colorMap.colorValue[0].color[c] = color[c]; colorMap.colorValue[0].value = value; return colorMap; } /******************************************************************************************************************************/ static void add_to_colorMap(ColorMap* colorMap, gdouble color[], gdouble value) { gint i; gint c; OneColorValue* colorValue = NULL; colorValue = g_malloc((colorMap->numberOfColors+1)*sizeof(OneColorValue)); for(i=0; inumberOfColors; i++) colorValue[i] = colorMap->colorValue[i]; for(c=0;c<3;c++) colorValue[colorMap->numberOfColors].color[c] = color[c]; colorValue[colorMap->numberOfColors].value = value; g_free( colorMap->colorValue); colorMap->colorValue = colorValue; colorMap->numberOfColors++; } /******************************************************************************************************************************/ static void sort_colorMap(ColorMap* colorMap) { gint i; gint j; gint k; OneColorValue tmp; for(i=0;inumberOfColors-1;i++) { k = i; for(j=i+1;jnumberOfColors;j++) if(colorMap->colorValue[k].value>colorMap->colorValue[j].value) k = j; if(k != i) { tmp = colorMap->colorValue[i]; colorMap->colorValue[i] = colorMap->colorValue[k]; colorMap->colorValue[k] = tmp; } } } /******************************************************************************************************************************/ ColorMap* new_colorMap_min_max_multicolor(gdouble minValue, gdouble maxValue) { gint i; gint j; gint k; gdouble h = 0; gint ns = 4; gint nc = 20; gint n = nc *ns+1; gdouble color[3]; ColorMap* colorMap; h = (maxValue-minValue)/(n-1) ; color[0] = 1.0; color[1] = 0.0; color[2] = 0.0; colorMap = g_malloc(sizeof(ColorMap)); *colorMap = new_colorMap(color, minValue); k = 1; for(j=0;jN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { v = grid->point[i][j][k].C[4] ; if(beg) { beg = FALSE; minValue = v; maxValue = v; } else { if(minValue > v) minValue = v; if(maxValue < v) maxValue = v; } } } } h = (maxValue-minValue)/(n-1) ; color[0] = 1.0; color[1] = 0.0; color[2] = 0.0; colorMap = g_malloc(sizeof(ColorMap)); *colorMap = new_colorMap(color, minValue); k = 1; for(j=0;jN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { v = grid->point[i][j][k].C[4] ; if(beg) { beg = FALSE; minValue = v; maxValue = v; } else { if(minValue > v) minValue = v; if(maxValue < v) maxValue = v; } } } } for(c=0;c<3;c++) color[c] = Color[c]; max = color[0]; if(maxN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { v = grid->point[i][j][k].C[4] ; if(beg) { beg = FALSE; minValue = v; maxValue = v; } else { if(minValue > v) minValue = v; if(maxValue < v) maxValue = v; } } } } max1 = color1[0]; if(max1numberOfColors<1) { for(c=0;c<3;c++) color[c] = 0.5; return; } if(value<=colorMap->colorValue[i].value) { for(c=0;c<3;c++) color[c] = colorMap->colorValue[i].color[c]; return; } i = colorMap->numberOfColors-1; if(value>=colorMap->colorValue[i].value) { for(c=0;c<3;c++) color[c] = colorMap->colorValue[i].color[c]; return; } k = 0; for(i=1;inumberOfColors-1;i++) { if(value>=colorMap->colorValue[i].value && value<=colorMap->colorValue[i+1].value) { k = i; break; } } l = colorMap->colorValue[k+1].value-colorMap->colorValue[k].value; l1 = value-colorMap->colorValue[k].value; l2 = l-l1; if(l>0 && l1>=0 && l2>=0) { l1 = l1/l; l2 = l2/l; for(c=0;c<3;c++) color[c] = colorMap->colorValue[k].color[c]*l2+colorMap->colorValue[k+1].color[c]*l1; } else for(c=0;c<3;c++) color[c] = colorMap->colorValue[k].color[c]; } /******************************************************************************************************************************/ void reset_colorMap(GtkWidget* entry, gpointer data) { gdouble maxValue = 0; gdouble minValue = 0; G_CONST_RETURN gchar* tmp; ColorMap* colorMap = g_object_get_data(G_OBJECT(entry),"ColorMap"); ColorMap* newColorMap = NULL; GtkWidget* handlebox = g_object_get_data(G_OBJECT(entry), "Handlebox"); GtkWidget* darea = g_object_get_data(G_OBJECT(entry), "DrawingArea"); GtkWidget* otherEntry = g_object_get_data(G_OBJECT(entry), "OtherEntry"); if(!colorMap) return; if(colorMap->numberOfColors<1) return; if(data) /* this is right entry */ { minValue = colorMap->colorValue[0].value; tmp = gtk_entry_get_text(GTK_ENTRY(entry)); maxValue = atof(tmp); } else { maxValue = colorMap->colorValue[colorMap->numberOfColors-1].value; tmp = gtk_entry_get_text(GTK_ENTRY(entry)); minValue = atof(tmp); } newColorMap = new_colorMap_min_max(minValue, maxValue); colormap_free(colorMap); g_free(colorMap); colorMap = newColorMap; g_object_set_data(G_OBJECT(entry),"ColorMap", colorMap); g_object_set_data(G_OBJECT(handlebox),"ColorMap", colorMap); g_object_set_data(G_OBJECT(darea),"ColorMap", colorMap); g_object_set_data(G_OBJECT(otherEntry),"ColorMap", colorMap); /* print_colorMap(&myColorMap);*/ RebuildSurf = TRUE; glarea_rafresh(GLArea); color_map_hide(handlebox); color_map_refresh(handlebox); color_map_show(handlebox); } /********************************************************************************/ static gint configure_event( GtkWidget *widget, GdkEventConfigure *event ) { gint height = 0; GdkColor color; GdkColor tmpcolor; GdkColormap *colormap = NULL; GdkPixmap *pixmap = (GdkPixmap *)g_object_get_data(G_OBJECT(widget), "Pixmap"); PangoFontDescription *font_desc = pango_font_description_from_string ("helvetica bold 12"); cairo_t* cr = (cairo_t *)g_object_get_data(G_OBJECT(widget), "Cairo"); gboolean Ok = TRUE; GdkVisual* vis; gchar t[BSIZE]; ColorMap* myColorMap = g_object_get_data(G_OBJECT(widget),"ColorMap"); GdkGC *gc = g_object_get_data(G_OBJECT(widget),"Gdkgc"); gint i; if (pixmap) g_object_unref(pixmap); if (cr) cairo_destroy (cr); pixmap = gdk_pixmap_new(widget->window, widget->allocation.width, widget->allocation.height, -1); cr = gdk_cairo_create (pixmap); colormap = gdk_drawable_get_colormap(widget->window); height = widget->allocation.height; vis = gdk_colormap_get_visual(colormap); if(vis->depth >15) Ok = TRUE; else Ok = FALSE; color.red = 40000; color.green = 40000; color.blue = 40000; gdk_colormap_alloc_color(colormap, &color, FALSE, TRUE); if(Ok) { gdouble max = myColorMap->colorValue[myColorMap->numberOfColors-1].value; gdouble min = myColorMap->colorValue[0].value; for(i=0;iallocation.width;i++) { gdouble v = i/(gdouble)(widget->allocation.width)*(max-min)+min; gdouble color[3]; set_Color_From_colorMap(myColorMap, color, v); tmpcolor.red = (gushort)(color[0]*65535); tmpcolor.green = (gushort)(color[1]*65535); tmpcolor.blue = (gushort)(color[2]*65535); gdk_colormap_alloc_color(colormap, &tmpcolor, FALSE, TRUE); gdk_gc_set_foreground(gc,&tmpcolor); gdk_draw_line(pixmap,gc,i,0,i,height); } for(i=widget->allocation.width/4;iallocation.width-widget->allocation.width/8;i+=widget->allocation.width/4) { gdouble v = i/(gdouble)(widget->allocation.width)*(max-min)+min; { gint x = i; gint y = height-height/4; if(fabs(v)>1e-3) sprintf(t,"%0.3f",v); else sprintf(t,"%0.3e",v); color.red = 0; color.green = 0; color.blue = 0; gdk_colormap_alloc_color(colormap, &color,TRUE,TRUE); gdk_gc_set_foreground(gc,&color); gdk_gc_set_line_attributes(gc,0,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); if(font_desc) gabedit_cairo_string(cr, widget, font_desc, gc, x, y, t, TRUE,TRUE); } } } else { gdk_gc_set_foreground(gc,&color); for(i=0;iallocation.width;i++) gdk_draw_line(pixmap,gc,i,0,i,height); } g_object_set_data(G_OBJECT(widget), "Pixmap", pixmap); g_object_set_data(G_OBJECT(widget), "Cairo", cr); if(font_desc) pango_font_description_free (font_desc); return TRUE; } /********************************************************************************/ static gint expose_event(GtkWidget *widget,GdkEventExpose *event ) { GdkPixmap *pixmap = NULL; if(event->count >0) return FALSE; pixmap = (GdkPixmap *)g_object_get_data(G_OBJECT(widget), "Pixmap"); if(pixmap) gdk_draw_drawable(widget->window, widget->style->fg_gc[GTK_WIDGET_STATE (widget)], pixmap, event->area.x, event->area.y, event->area.x, event->area.y, event->area.width, event->area.height); return FALSE; } /********************************************************************************/ static GtkWidget *add_drawing_area(GtkWidget *table, gint i) { GtkWidget *darea; GdkPixmap *pixmap = NULL; cairo_t* cr = NULL; darea = gtk_drawing_area_new(); gtk_widget_set_size_request(GTK_WIDGET(darea), 300, -1); gtk_table_attach(GTK_TABLE(table),darea,i,i+1,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 0,0); gtk_widget_realize(darea); pixmap = gdk_pixmap_new(darea->window,darea->allocation.width,darea->allocation.height,-1); cr = gdk_cairo_create (pixmap); g_object_set_data(G_OBJECT(darea), "Pixmap", pixmap); g_object_set_data(G_OBJECT(darea), "Cairo", cr); g_signal_connect(G_OBJECT(darea),"configure_event",(GCallback)configure_event,NULL); g_signal_connect(G_OBJECT(darea),"expose_event",(GCallback)expose_event,NULL); return darea; } /******************************************************************************************************************************/ GtkWidget* create_color_map_show(GtkWidget* box, ColorMap* colorMap, gchar* label) { GtkWidget *handlebox; GtkWidget* table; GtkWidget* entry; GtkWidget* entryLeft; GtkWidget* entryRight; GtkWidget *darea; GdkGC *gc = NULL; gint i; handlebox = gtk_handle_box_new (); gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(handlebox),GTK_SHADOW_NONE); gtk_handle_box_set_handle_position (GTK_HANDLE_BOX(handlebox),GTK_POS_LEFT); gtk_widget_show (handlebox); gtk_box_pack_start (GTK_BOX (box), handlebox, FALSE, FALSE, 0); table = gtk_table_new(1,4,FALSE); gtk_container_add (GTK_CONTAINER (handlebox), table); i = 0; if(label) { GtkWidget* labelWid = gtk_label_new(label); gtk_widget_show(labelWid); gtk_table_attach(GTK_TABLE(table),labelWid,i,i+1,0,1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 0,0); } i = 1; entry = gtk_entry_new(); gtk_widget_set_size_request(entry,80,-1); gtk_widget_show(entry); gtk_table_attach(GTK_TABLE(table),entry,i,i+1,0,i, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 0,0); entryLeft = entry; i = 2; gc = gdk_gc_new(PrincipalWindow->window); darea = add_drawing_area(table, i); i = 3; entry = gtk_entry_new(); gtk_widget_set_size_request(entry,80,-1); gtk_widget_show(entry); gtk_table_attach(GTK_TABLE(table),entry,i,i+1,0,1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 0,0); entryRight = entry; gtk_widget_show(table); g_object_set_data(G_OBJECT(handlebox), "EntryLeft", entryLeft); g_object_set_data(G_OBJECT(handlebox), "EntryRight", entryRight); g_object_set_data(G_OBJECT(handlebox), "DrawingArea", darea); g_object_set_data(G_OBJECT(handlebox),"ColorMap", colorMap); g_object_set_data(G_OBJECT(handlebox),"Gdkgc", gc); g_object_set_data(G_OBJECT(darea),"ColorMap", colorMap); g_object_set_data(G_OBJECT(darea),"Gdkgc", gc); g_object_set_data(G_OBJECT(entryLeft), "DrawingArea", darea); g_object_set_data(G_OBJECT(entryRight), "DrawingArea", darea); g_object_set_data(G_OBJECT(entryLeft),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryRight),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryLeft),"Handlebox", handlebox); g_object_set_data(G_OBJECT(entryRight),"Handlebox", handlebox); g_object_set_data(G_OBJECT(entryLeft),"DrawingArea", darea); g_object_set_data(G_OBJECT(entryRight),"DrawingArea", darea); g_object_set_data(G_OBJECT(entryLeft),"OtherEntry", entryRight); g_object_set_data(G_OBJECT(entryRight),"OtherEntry", entryLeft); g_signal_connect(G_OBJECT (entryLeft), "activate",(GCallback)reset_colorMap, NULL); g_signal_connect(G_OBJECT (entryRight), "activate",(GCallback)reset_colorMap, GTK_OBJECT(entryLeft)); return handlebox; } /******************************************************************************************************************************/ void color_map_show(GtkWidget* handlebox) { GtkWidget* entryLeft = g_object_get_data(G_OBJECT(handlebox), "EntryLeft"); GtkWidget* entryRight = g_object_get_data(G_OBJECT(handlebox), "EntryRight"); ColorMap* myColorMap = g_object_get_data(G_OBJECT(handlebox), "ColorMap"); gchar tmp[BSIZE]; if(myColorMap->numberOfColors>0) { if(fabs(myColorMap->colorValue[0].value)>1e-3) sprintf(tmp,"%0.3f",myColorMap->colorValue[0].value); else if(fabs(myColorMap->colorValue[0].value)<1e-8) sprintf(tmp,"%0.1e",myColorMap->colorValue[0].value); else sprintf(tmp,"%lf",myColorMap->colorValue[0].value); gtk_entry_set_text(GTK_ENTRY(entryLeft),tmp); if(fabs(myColorMap->colorValue[myColorMap->numberOfColors-1].value)>1e-3) sprintf(tmp,"%0.3f",myColorMap->colorValue[myColorMap->numberOfColors-1].value); else if(fabs(myColorMap->colorValue[myColorMap->numberOfColors-1].value)<1e-8) sprintf(tmp,"%0.1e",myColorMap->colorValue[myColorMap->numberOfColors-1].value); else sprintf(tmp,"%lf",myColorMap->colorValue[myColorMap->numberOfColors-1].value); gtk_entry_set_text(GTK_ENTRY(entryRight),tmp); } gtk_widget_show_all(handlebox); } /******************************************************************************************************************************/ void color_map_refresh(GtkWidget* handlebox) { GtkWidget* darea = g_object_get_data(G_OBJECT(handlebox), "DrawingArea"); configure_event(darea, NULL); } /******************************************************************************************************************************/ void color_map_hide(GtkWidget* handlebox) { gtk_widget_hide(handlebox); } GabeditSrc250/src/Display/GridCP.c0000644000175100017510000014055413130665225017154 0ustar alloucheallouche/* GridCP.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ /* See W. Tang et al J. Phys. Condens. Matter 21 (2009) 084204 */ #include "../../Config.h" #ifdef ENABLE_OMP #include #endif #include "../Display/GlobalOrb.h" #include "../Display/StatusOrb.h" #include "../Display/UtilsOrb.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Display/GLArea.h" #include "../Display/AtomicOrbitals.h" #include "../Display/Orbitals.h" #include "../Display/ColorMap.h" #include "../Display/GeomOrbXYZ.h" #include "../Display/BondsOrb.h" #include "../Display/GridCP.h" /* Point with a volume number : * i>0 : point of volume # i * i<0 : the critical point of volume # -i * i= : point not yet assigned */ #define TOL 1e-12 /* the g_list_remove use thread */ /**************************************************************************/ GList* myg_list_remove (GList *list, gconstpointer data) { GList *l; l = list; while (l) { if (l->data != data) l = l->next; else { if (l->prev) l->prev->next = l->next; if (l->next) l->next->prev = l->prev; if (list == l) list = list->next; g_free (l); break; } } return list; } /* the g_list_prepend use thread */ /**************************************************************************/ GList* myg_list_prepend (GList *list, gpointer data) { GList *new_list; new_list = g_malloc(sizeof(GList)); new_list->data = data; new_list->next = list; if (list) { new_list->prev = list->prev; if (list->prev) list->prev->next = new_list; list->prev = new_list; } else new_list->prev = NULL; return new_list; } /**************************************************************************/ void myg_list_free (GList *list) { GList* l = NULL; GList* next = NULL; for(l=list;l!=NULL;l=next) { next = l->next; if(l) g_free(l); } } /**************************************************************************/ void destroyListOfPointIndex(GList* listPointIndex) { GList* list = NULL; for(list=listPointIndex;list!=NULL;list=list->next) { PointIndex* data=(PointIndex*)list->data; if(data) g_free(data); } myg_list_free(listPointIndex); } /**************************************************************************/ PointIndex* newPointIndex(gint i, gint j, gint k) { PointIndex* data=g_malloc(sizeof(PointIndex)); data->i = i; data->j = j; data->k = k; return data; } /**************************************************************************/ void destroyListOfCriticalPoints(GList* listCriticalPoint) { GList* list = NULL; for(list=listCriticalPoint;list!=NULL;list=list->next) { CriticalPoint* data=(CriticalPoint*)list->data; if(data) g_free(data); } myg_list_free(listCriticalPoint); } /**************************************************************************/ CriticalPoint* newCriticalPoint(gint i, gint j, gint k, gint numV) { CriticalPoint* data=g_malloc(sizeof(CriticalPoint)); data->index[0] = i; data->index[1] = j; data->index[2] = k; data->rank = 0; data->signature = 0; data->lambda[0] = 0; data->lambda[1] = 0; data->lambda[2] = 0; data->integral = 0; data->volume = 0; data->nuclearCharge = 0; data->numVolume = numV; data->numCenter = 0; return data; } /**************************************************************************/ static void computeGrad(GridCP* gridCP) { gint i,j,k; Grid* grid = NULL; Point5*** points = NULL; gdouble dx,dy,dz; gdouble drx,dry,drz; gint i1,i2, j1,j2, k1,k2; gdouble c; if(!gridCP) return; grid = gridCP->grid; if(!grid) return; points = grid->point; progress_orb_txt(0,_("Computing of gradient on each point..., Please wait"),TRUE); for(i=0;i< grid->N[0] ;i++) { i1 = i+1; i2 = i-1; if(i2<0) i2 = i; if(i1>grid->N[0]-1) i1 = i; for(j=0;j< grid->N[1] ;j++) { j1 = j+1; j2 = j-1; if(j2<0) j2 = j; if(j1>grid->N[1]-1) j1 = j; for(k=0;k< grid->N[2] ;k++) { k1 = k+1; k2 = k-1; if(k2<0) k2 = k; if(k1>grid->N[2]-1) k1 = k; dx = points[i1][j][k].C[0]-points[i2][j][k].C[0]; dy = points[i1][j][k].C[1]-points[i2][j][k].C[1]; dz = points[i1][j][k].C[2]-points[i2][j][k].C[2]; drx = sqrt(dx*dx+dy*dy+dz*dz); gridCP->grad[0][i][j][k] = (points[i1][j][k].C[3]-points[i2][j][k].C[3])/drx; dx = points[i][j1][k].C[0]-points[i][j2][k].C[0]; dy = points[i][j1][k].C[1]-points[i][j2][k].C[1]; dz = points[i][j1][k].C[2]-points[i][j2][k].C[2]; dry = sqrt(dx*dx+dy*dy+dz*dz); gridCP->grad[1][i][j][k] = (points[i][j1][k].C[3]-points[i][j2][k].C[3])/dry; dx = points[i][j][k1].C[0]-points[i][j][k2].C[0]; dy = points[i][j][k1].C[1]-points[i][j][k2].C[1]; dz = points[i][j][k1].C[2]-points[i][j][k2].C[2]; drz = sqrt(dx*dx+dy*dy+dz*dz); gridCP->grad[2][i][j][k] = (points[i][j][k1].C[3]-points[i][j][k2].C[3])/drz; if( points[i1][j][k].C[3]grad[0][i][j][k] = 0; if( points[i][j1][k].C[3]grad[1][i][j][k] = 0; if( points[i][j][k1].C[3]grad[2][i][j][k] = 0; /* gridCP->grad[0][i][j][k] /= 2; gridCP->grad[1][i][j][k] /= 2; gridCP->grad[2][i][j][k] /= 2; c = 1; if(fabs(gridCP->grad[0][i][j][k]) >TOL) { dx = fabs((points[i1][j][k].C[0]-points[i2][j][k].C[0])/2/gridCP->grad[0][i][j][k]); if(c>dx) c = dx; } if(fabs(gridCP->grad[1][i][j][k]) >TOL) { dy = fabs((points[i][j1][k].C[1]-points[i][j2][k].C[1])/2/gridCP->grad[1][i][j][k]); if(c>dy) c = dy; } if(fabs(gridCP->grad[2][i][j][k]) >TOL) { dz = fabs((points[i][j][k1].C[2]-points[i][j][k2].C[2])/2/gridCP->grad[2][i][j][k]); if(c>dz) c = dz; } if(c>0) { gridCP->grad[0][i][j][k] *= c; gridCP->grad[1][i][j][k] *= c; gridCP->grad[2][i][j][k] *= c; } */ c= fabs(gridCP->grad[0][i][j][k]); if(c < fabs(gridCP->grad[1][i][j][k])) c = fabs(gridCP->grad[1][i][j][k]); if(c < fabs(gridCP->grad[2][i][j][k])) c = fabs(gridCP->grad[2][i][j][k]); if(c>0) { c = 1.0/c; gridCP->grad[0][i][j][k] *= c; gridCP->grad[1][i][j][k] *= c; gridCP->grad[2][i][j][k] *= c; } /* if(points[i][j][k].C[3]>TOL && fabs(gridCP->grad[0][i][j][k])grad[1][i][j][k])grad[2][i][j][k])grad[0][i][j][k],gridCP->grad[1][i][j][k],gridCP->grad[2][i][j][k]); */ } } } } /**************************************************************************/ static void resetKnown(GridCP* gridCP) { gint i,j,k; if(!gridCP) return; for(i=0;i< grid->N[0] ;i++) for(j=0;j< grid->N[1] ;j++) for(k=0;k< grid->N[2] ;k++) gridCP->known[i][j][k] = 0; } /**************************************************************************/ static void initGridCP(GridCP* gridCP, Grid* grid, Grid* gridAux) { gint i,j,k; gint c; if(!gridCP) return; gridCP->grid = grid; gridCP->gridAux = gridAux; gridCP->volumeNumberOfPoints = NULL; gridCP->known = NULL; for(c=0;c<3;c++) gridCP->grad[c] = NULL; gridCP->criticalPoints = NULL; gridCP->integral = 0; gridCP->nuclearCharge = 0; if(!grid) return; if(gridAux) { for(c=0;c<3;c++) if(grid->N[c] != gridAux->N[c]) { printf(_("The Cube of the 2 grids should be equals\n")); return; } } for(c=0;c<3;c++) if(grid->N[c]<1) return; gridCP->volumeNumberOfPoints = g_malloc( grid->N[0]*sizeof(gint**)); for(i=0;i< grid->N[0] ;i++) { gridCP->volumeNumberOfPoints[i] = g_malloc(grid->N[1]*sizeof(gint*)); for(j=0;j< grid->N[1] ;j++) { gridCP->volumeNumberOfPoints[i][j] = g_malloc(grid->N[2]*sizeof(gint)); for(k=0;k< grid->N[2] ;k++) gridCP->volumeNumberOfPoints[i][j][k] = 0; } } gridCP->known = g_malloc( grid->N[0]*sizeof(gint**)); for(i=0;i< grid->N[0] ;i++) { gridCP->known[i] = g_malloc(grid->N[1]*sizeof(gint*)); for(j=0;j< grid->N[1] ;j++) { gridCP->known[i][j] = g_malloc(grid->N[2]*sizeof(gint)); for(k=0;k< grid->N[2] ;k++) gridCP->known[i][j][k] = 0; } } for(c=0;c<3;c++) { gridCP->grad[c] = g_malloc( grid->N[0]*sizeof(gdouble**)); for(i=0;i< grid->N[0] ;i++) { gridCP->grad[c][i] = g_malloc(grid->N[1]*sizeof(gdouble*)); for(j=0;j< grid->N[1] ;j++) { gridCP->grad[c][i][j] = g_malloc(grid->N[2]*sizeof(gdouble)); for(k=0;k< grid->N[2] ;k++) gridCP->grad[c][i][j][k] = 0; } } } gridCP->dv = 1; if(grid) { Point5*** points = grid->point; gdouble xx = points[1][0][0].C[0]-points[0][0][0].C[0]; gdouble yy = points[0][1][0].C[1]-points[0][0][0].C[1]; gdouble zz = points[0][0][1].C[2]-points[0][0][0].C[2]; gridCP->dv = fabs(xx*yy*zz); } computeGrad(gridCP); } /**************************************************************************/ void destroyGridCP(GridCP* gridCP) { gint i,j; gint c; if(!gridCP) return; if(gridCP->volumeNumberOfPoints) { for(i=0;i< grid->N[0] ;i++) { if(gridCP->volumeNumberOfPoints[i]) { for(j=0;j< grid->N[1] ;j++) if(gridCP->volumeNumberOfPoints[i][j]) g_free(gridCP->volumeNumberOfPoints[i][j]); g_free(gridCP->volumeNumberOfPoints[i]); } } g_free(gridCP->volumeNumberOfPoints); } if(gridCP->known) { for(i=0;i< grid->N[0] ;i++) { if(gridCP->known[i]) { for(j=0;j< grid->N[1] ;j++) if(gridCP->known[i][j]) g_free(gridCP->known[i][j]); g_free(gridCP->known[i]); } } g_free(gridCP->known); } for(c=0;c<3;c++) if(gridCP->grad[c]) { for(i=0;i< grid->N[0] ;i++) { if(gridCP->grad[c][i]) { for(j=0;j< grid->N[1] ;j++) if(gridCP->grad[c][i][j]) g_free(gridCP->grad[c][i][j]); g_free(gridCP->grad[c][i]); } } g_free(gridCP->grad[c]); } destroyListOfCriticalPoints(gridCP->criticalPoints); gridCP->criticalPoints = NULL; } /**************************************************************************/ static gint setArroundTo(GridCP* gridCP, gint current[3], gboolean kn) { gint ic,jc,kc; gint i1,i2; gint j1,j2; gint k1,k2; gint*** vP; gint I[3]; gint J[3]; gint K[3]; gint i, j, k; gint n = 0; if(!gridCP) return 0; if(!gridCP->grid) return 0; vP = gridCP->volumeNumberOfPoints; i = current[0]; j = current[1]; k = current[2]; i1 = i+1; i2 = i-1; if(i2<0) i2 = i; if(i1>gridCP->grid->N[0]-1) i1 = i; j1 = j+1; j2 = j-1; if(j2<0) j2 = j; if(j1>gridCP->grid->N[1]-1) j1 = j; k1 = k+1; k2 = k-1; if(k2<0) k2 = k; if(k1>gridCP->grid->N[2]-1) k1 = k; I[0] = i2; I[1] = i; I[2] = i1; J[0] = j2; J[1] = j; J[2] = j1; K[0] = k2; K[1] = k; K[2] = k1; for(ic=0;ic<3;ic++) for(jc=0;jc<3;jc++) for(kc=0;kc<3;kc++) { if(ic==1 && jc==1 && kc ==1) continue; if(gridCP->known[I[ic]][J[jc]][K[kc]] != 1 && vP[I[ic]][J[jc]][K[kc]]==vP[i][j][k]) { gridCP->known[I[ic]][J[jc]][K[kc]] = kn; n++; } } return n; } /**************************************************************************/ static gboolean isVolumeEdge(GridCP* gridCP, gint current[3]) { gint ic,jc,kc; gint i1,i2; gint j1,j2; gint k1,k2; gint*** vP; gint I[3]; gint J[3]; gint K[3]; gint i, j, k; if(!gridCP) return FALSE; if(!gridCP->grid) return FALSE; vP = gridCP->volumeNumberOfPoints; i = current[0]; j = current[1]; k = current[2]; i1 = i+1; i2 = i-1; if(i2<0) i2 = i; if(i1>gridCP->grid->N[0]-1) i1 = i; j1 = j+1; j2 = j-1; if(j2<0) j2 = j; if(j1>gridCP->grid->N[1]-1) j1 = j; k1 = k+1; k2 = k-1; if(k2<0) k2 = k; if(k1>gridCP->grid->N[2]-1) k1 = k; I[0] = i2; I[1] = i; I[2] = i1; J[0] = j2; J[1] = j; J[2] = j1; K[0] = k2; K[1] = k; K[2] = k1; for(ic=0;ic<3;ic++) for(jc=0;jc<3;jc++) for(kc=0;kc<3;kc++) if( 2!=gridCP->known[I[ic]][J[jc]][K[kc]] && abs(vP[i][j][k]) != abs(vP[I[ic]][J[jc]][K[kc]])) { return TRUE; } return FALSE; } /**************************************************************************/ static gboolean isMax(GridCP* gridCP, gint current[3]) { gint ic,jc,kc; gint i1,i2; gint j1,j2; gint k1,k2; Point5 ***points = NULL; gint I[3]; gint J[3]; gint K[3]; gint i, j, k; if(!gridCP) return FALSE; if(!gridCP->grid) return FALSE; points = gridCP->grid->point; i = current[0]; j = current[1]; k = current[2]; i1 = i+1; i2 = i-1; if(i2<0) i2 = i; if(i1>gridCP->grid->N[0]-1) i1 = i; j1 = j+1; j2 = j-1; if(j2<0) j2 = j; if(j1>gridCP->grid->N[1]-1) j1 = j; k1 = k+1; k2 = k-1; if(k2<0) k2 = k; if(k1>gridCP->grid->N[2]-1) k1 = k; I[0] = i2; I[1] = i; I[2] = i1; J[0] = j2; J[1] = j; J[2] = j1; K[0] = k2; K[1] = k; K[2] = k1; for(ic=0;ic<3;ic++) for(jc=0;jc<3;jc++) for(kc=0;kc<3;kc++) if(points[I[ic]][J[jc]][K[kc]].C[3]>points[I[1]][J[1]][K[1]].C[3]) return FALSE; return TRUE; } /**************************************************************************/ static void nextPointOnGrid(GridCP* gridCP, gint current[3], gint next[3]) { gint i,j,k; gint ic,jc,kc; gint i1,i2; gint j1,j2; gint k1,k2; gdouble dx; gdouble dy; gdouble dz; Point5 ***points = NULL; gint im, jm, km; gdouble rhoCenter; gdouble rhoMax; gdouble rho; gint I[3]; gint J[3]; gint K[3]; if(!gridCP) return; if(!gridCP->grid) return; points = gridCP->grid->point; i = current[0]; j = current[1]; k = current[2]; i1 = i+1; i2 = i-1; if(i2<0) i2 = i; if(i1>gridCP->grid->N[0]-1) i1 = i; j1 = j+1; j2 = j-1; if(j2<0) j2 = j; if(j1>gridCP->grid->N[1]-1) j1 = j; k1 = k+1; k2 = k-1; if(k2<0) k2 = k; if(k1>gridCP->grid->N[2]-1) k1 = k; I[0] = i2; I[1] = i; I[2] = i1; J[0] = j2; J[1] = j; J[2] = j1; K[0] = k2; K[1] = k; K[2] = k1; /* printf("I = %d %d %d\n", I[0],I[1],I[2]); printf("J = %d %d %d\n", J[0],J[1],J[2]); printf("K = %d %d %d\n", K[0],K[1],K[2]); printf("index = %d %d %d\n", i, j, k); */ im = 1; jm = 1; km = 1; /*printf("%d %d %d rho = %lf\n",I[im],J[jm],K[km],points[I[im]][J[jm]][K[km]].C[3]);*/ rhoCenter = points[I[1]][J[1]][K[1]].C[3]; rhoMax = rhoCenter; for(ic=0;ic<3;ic++) for(jc=0;jc<3;jc++) for(kc=0;kc<3;kc++) { /*printf("%d %d %d rho = %lf\n",I[ic],J[jc],K[kc],points[I[ic]][J[jc]][K[kc]].C[3]);*/ if(ic==1 && jc==1 && kc==1) continue; if(gridCP->known[I[ic]][J[jc]][K[kc]] >1) continue; rho =points[I[ic]][J[jc]][K[kc]].C[3]; dx =points[I[ic]][J[jc]][K[kc]].C[0]-points[I[1]][J[1]][K[1]].C[0]; dy =points[I[ic]][J[jc]][K[kc]].C[1]-points[I[1]][J[1]][K[1]].C[1]; dz =points[I[ic]][J[jc]][K[kc]].C[2]-points[I[1]][J[1]][K[1]].C[2]; rho = rhoCenter + (rho-rhoCenter)/sqrt(dx*dx+dy*dy+dz*dz); if(rho>rhoMax) { rhoMax = rho; im = ic; jm = jc; km = kc; } } /*printf("indexNEW = %d %d %d\n", IM, JM, KM);*/ next[0] = I[im]; next[1] = J[jm]; next[2] = K[km]; } /**************************************************************************/ static void nextPoint(GridCP* gridCP, gdouble deltaR[3], gint current[3], gint next[3]) { gdouble gradrl[3]; gint c; gint i,j,k; if(!gridCP) return; if(!gridCP->grid) return; /* nextPointOnGrid(gridCP, current, next); return; */ i = current[0]; j = current[1]; k = current[2]; for(c=0;c<3;c++) gradrl[c] = gridCP->grad[c][i][j][k]; if((gint)rint(gradrl[0]) ==0 && (gint)rint(gradrl[1]) ==0 && (gint)rint(gradrl[2]) ==0) { if(isMax(gridCP,current)) { for(c=0;c<3;c++) next[c] = current[c]; for(c=0;c<3;c++) deltaR[c] = 0.0; return; } else { nextPointOnGrid(gridCP, current, next); for(c=0;c<3;c++) deltaR[c] = 0.0; } } else { for(c=0;c<3;c++) next[c] = current[c] + (gint)rint(gradrl[c]); for(c=0;c<3;c++) deltaR[c] += gradrl[c]-(gint)rint(gradrl[c]); for(c=0;c<3;c++) next[c] += (gint)rint(deltaR[c]); for(c=0;c<3;c++) deltaR[c] -= (gint)rint(deltaR[c]); for(c=0;c<3;c++) if(next[c]<0 ) next[c] = 0; for(c=0;c<3;c++) if(next[c]>gridCP->grid->N[c]-1) next[c] = gridCP->grid->N[c]-1; i = current[0]; j = current[1]; k = current[2]; gridCP->known[i][j][k] = 1; i = next[0]; j = next[1]; k = next[2]; if(gridCP->known[i][j][k]==1) { nextPointOnGrid(gridCP, current, next); for(c=0;c<3;c++) deltaR[c] = 0.0; } } } /**************************************************************************/ static GList* addSurroundingEqualPoints(GridCP* gridCP, gint current[3], GList* listOfVisitedPoints) { gint i,j,k; gint ic,jc,kc; gint i1,i2; gint j1,j2; gint k1,k2; Point5 ***points = NULL; gint I[3]; gint J[3]; gint K[3]; gdouble rho0 = 0; gdouble dRho = 0; if(!gridCP) return listOfVisitedPoints; if(!gridCP->grid) return listOfVisitedPoints; points = gridCP->grid->point; i = current[0]; j = current[1]; k = current[2]; i1 = i+1; i2 = i-1; if(i2<0) i2 = i; if(i1>gridCP->grid->N[0]-1) i1 = i; j1 = j+1; j2 = j-1; if(j2<0) j2 = j; if(j1>gridCP->grid->N[1]-1) j1 = j; k1 = k+1; k2 = k-1; if(k2<0) k2 = k; if(k1>gridCP->grid->N[2]-1) k1 = k; I[0] = i2; I[1] = i; I[2] = i1; J[0] = j2; J[1] = j; J[2] = j1; K[0] = k2; K[1] = k; K[2] = k1; rho0 = points[I[1]][J[1]][K[1]].C[3]; for(ic=0;ic<3;ic++) for(jc=0;jc<3;jc++) for(kc=0;kc<3;kc++) { if(ic==1 && jc==1 && kc==1) continue; dRho =points[I[ic]][J[jc]][K[kc]].C[3]-rho0; if(fabs(dRho)known[I[ic]][J[jc]][K[kc]] = 1; } } return listOfVisitedPoints; } /**************************************************************************/ static GList* assentTrajectory(GridCP* gridCP, gint current[3], gboolean ongrid) { GList* listOfVisitedPoints = NULL; /*Point5 ***points = NULL;*/ gint next[3]; gdouble deltaR[3] = {0,0,0}; gint l; gint imax; PointIndex* data; gint c; if(!gridCP) return listOfVisitedPoints; if(!gridCP->grid) return listOfVisitedPoints; /* points = gridCP->grid->point;*/ for(c=0;c<3;c++) if(grid->N[c]<1) return listOfVisitedPoints; data = newPointIndex(current[0], current[1], current[2]); listOfVisitedPoints = myg_list_prepend(listOfVisitedPoints,data); imax = grid->N[0]* grid->N[1]* grid->N[2]; for(l=0;lgrid) return; points = gridCP->grid->point; for(i=0;i<3;i++) if(grid->N[i]<1) return; vP = gridCP->volumeNumberOfPoints; if(gridCP->criticalPoints) { destroyListOfCriticalPoints(gridCP->criticalPoints); gridCP->criticalPoints = NULL; } progress_orb_txt(0,str,TRUE); resetKnown(gridCP); /* for(i=0;iN[0];i++) for(j=0;jN[1];j++) for(k=0;kN[2];k++) if(points[i][j][k].C[3]known[i][j][k] = 2; */ scal = 1.1/(grid->N[0]-1); #ifdef ENABLE_OMP #pragma omp parallel for private(i) #endif for(i=0;iN[0];i++) { gint j,k; gint current[3]; #ifdef ENABLE_OMP #ifndef G_OS_WIN32 #pragma omp critical progress_orb_txt(scal,str,FALSE); #endif #else progress_orb_txt(scal,str,FALSE); #endif if(!CancelCalcul) for(j=0;jN[1];j++) { if(!CancelCalcul) for(k=0;kN[2];k++) { GList* listOfVisitedPoints = NULL; current[0] = i; current[1] = j; current[2] = k; if(vP[i][j][k] != 0) continue; /*if(gridCP->known[i][j][k]!=0) continue;*/ if(points[i][j][k].C[3]next) { PointIndex* data=(PointIndex*)list->data; vP[data->i] [data->j] [data->k] = icp; } destroyListOfPointIndex(listOfVisitedPoints); listOfVisitedPoints = NULL; } else { numberOfCriticalPoints++; CriticalPoint* data = NULL; GList* list=NULL; gint icp = numberOfCriticalPoints; for(list=listOfVisitedPoints;list!=NULL;list=list->next) { PointIndex* data=(PointIndex*)list->data; vP[data->i] [data->j] [data->k] = icp; } destroyListOfPointIndex(listOfVisitedPoints); listOfVisitedPoints = NULL; vP[current[0]][current[1]][current[2]] = -icp; data = newCriticalPoint(current[0], current[1], current[2],numberOfCriticalPoints); gridCP->criticalPoints = myg_list_prepend(gridCP->criticalPoints,data); } } } } progress_orb_txt(0," ",TRUE); resetKnown(gridCP); } /**************************************************************************/ static gint refineEdge(GridCP* gridCP, gboolean ongrid) { gint i,j,k; gint*** vP = NULL; Point5 ***points = NULL; gboolean ***known = NULL; gchar* str ="Refine grid points adjacent to Bader surface... Please wait"; gdouble scal; gint current[3]; gint ne = 0; GList* list=NULL; if(!gridCP) return 0; if(!gridCP->grid) return 0; points = gridCP->grid->point; known = gridCP->known; for(i=0;i<3;i++) if(grid->N[i]<1) return 0; vP = gridCP->volumeNumberOfPoints; progress_orb_txt(0,str,TRUE); resetKnown(gridCP); for(i=0;iN[0];i++) for(j=0;jN[1];j++) for(k=0;kN[2];k++) { current[0] = i; current[1] = j; current[2] = k; if(points[i][j][k].C[3]N[0];i++) for(j=0;jN[1];j++) for(k=0;kN[2];k++) { current[0] = i; current[1] = j; current[2] = k; if(vP[i][j][k]>0 && !isMax(gridCP,current) && isVolumeEdge(gridCP,current)) { ne++; setArroundTo(gridCP, current, 0); known[i][j][k] = 1; } else known[i][j][k] = 2; } ne = 0; for(i=0;iN[0];i++) for(j=0;jN[1];j++) for(k=0;kN[2];k++) { if(known[i][j][k]==1) { ne++; vP[i][j][k] = 0; known[i][j][k]=0; } } scal = 1.1/(grid->N[0]-1); #ifdef ENABLE_OMP #pragma omp parallel for private(i) #endif for(i=0;iN[0];i++) { gint current[3]; gint j,k; GList* listOfVisitedPoints = NULL; #ifdef ENABLE_OMP #ifndef G_OS_WIN32 #pragma omp critical progress_orb_txt(scal,str,FALSE); #endif #else progress_orb_txt(scal,str,FALSE); #endif if(!CancelCalcul) for(j=0;jN[1];j++) { if(CancelCalcul) break; for(k=0;kN[2];k++) { current[0] = i; current[1] = j; current[2] = k; if(vP[i][j][k]!=0) continue; if(gridCP->known[i][j][k] !=0 ) continue; if(CancelCalcul) break; listOfVisitedPoints = assentTrajectory(gridCP, current, ongrid); vP[i][j][k] = abs(vP[current[0]][current[1]][current[2]]); #ifdef ENABLE_OMP #pragma omp critical #endif for(list=listOfVisitedPoints;list!=NULL;list=list->next) { PointIndex* data=(PointIndex*)list->data; known[data->i] [data->j] [data->k] = 0; } destroyListOfPointIndex(listOfVisitedPoints); } } } progress_orb_txt(0," ",TRUE); resetKnown(gridCP); return ne; } /**************************************************************************/ static void assignPointsZero(GridCP* gridCP) { GList* criticalPoint = gridCP->criticalPoints; gint*** vP = gridCP->volumeNumberOfPoints; GList* list = NULL; gint i,j,k; gdouble scal; Grid* grid = gridCP->grid; gchar* str = _("Assignation of points with f = 0..., Please wait"); gdouble dx, dy, dz; gdouble r; progress_orb_txt(0,str,TRUE); scal = 1.1/(grid->N[0]-1); for(i=0;iN[0];i++) { progress_orb_txt(scal,str,FALSE); if(CancelCalcul) break; for(j=0;jN[1];j++) for(k=0;kN[2];k++) { gdouble rmin = 0; CriticalPoint* dataMin = NULL; if(vP[i][j][k]!=0) continue; if(CancelCalcul) break; for(list=criticalPoint;list!=NULL;list=list->next) { CriticalPoint* data=(CriticalPoint*)list->data; gint ii = data->index[0]; gint jj = data->index[1]; gint kk = data->index[2]; dx = gridCP->grid->point[i][j][k].C[0]-gridCP->grid->point[ii][jj][kk].C[0]; dy = gridCP->grid->point[i][j][k].C[1]-gridCP->grid->point[ii][jj][kk].C[1]; dz = gridCP->grid->point[i][j][k].C[2]-gridCP->grid->point[ii][jj][kk].C[2]; r = (dx*dx + dy*dy + dz*dz); if(dataMin == NULL || rindex[0]; gint jj = dataMin->index[1]; gint kk = dataMin->index[2]; vP[i][j][k] = abs(vP[ii][jj][kk]); } } } progress_orb_txt(0," ",TRUE); } /**************************************************************************/ static gchar* addToResult(gchar* result, gchar* tmp) { gchar* old = result; if(!tmp) return result; if(old) { result = g_strdup_printf("%s%s",old,tmp); g_free(old); } else result = g_strdup_printf("%s",tmp); return result; } /**************************************************************************/ static void removeAttractor0(GridCP* gridCP) { GList* list=NULL; GList* next=NULL; gint*** vP = gridCP->volumeNumberOfPoints; for(list=gridCP->criticalPoints;list!=NULL;list=next) { CriticalPoint* data = (CriticalPoint*) list->data; next = list->next; gint i = data->index[0]; gint j = data->index[1]; gint k = data->index[2]; if(gridCP->grid->point[i][j][k].C[3]criticalPoints=myg_list_remove(gridCP->criticalPoints, data); g_free(data); } } } /**************************************************************************/ static void removeNonSignificantAttractor(GridCP* gridCP) { GList* list=NULL; GList* next=NULL; gint n = gridCP->grid->N[0]*gridCP->grid->N[1]*gridCP->grid->N[2]/1000; for(list=gridCP->criticalPoints;list!=NULL;list=next) { CriticalPoint* data = (CriticalPoint*) list->data; next = list->next; if(data->volume/gridCP->dvvolume/gridCP->dv));*/ gridCP->criticalPoints=myg_list_remove(gridCP->criticalPoints, data); g_free(data); } } } /************************************************************************************************************/ static void setPartialChargeToAIM(GtkWidget *win) { GridCP* gridCP = NULL; GList* list = NULL; if(GTK_IS_WIDGET(win)) gridCP = g_object_get_data(G_OBJECT (win), "GridCP"); if(!gridCP) return; for(list=gridCP->criticalPoints;list!=NULL;list=list->next) { CriticalPoint* data = (CriticalPoint*) list->data; gint c= data->numCenter; GeomOrb[c].partialCharge = data->nuclearCharge-data->integral; } glarea_rafresh(GLArea); } /************************************************************************************************************/ static void destroyResultDlg(GtkWidget *win) { GridCP* gridCP = NULL; if(GTK_IS_WIDGET(win)) gridCP = g_object_get_data(G_OBJECT (win), "GridCP"); if(gridCP) { destroyGridCP(gridCP); g_free(gridCP); } if(GTK_IS_WIDGET(win)) delete_child(win); if(GTK_IS_WIDGET(win)) gtk_widget_destroy(win); } /********************************************************************************/ static GtkWidget* showResultDlg(gchar *message,gchar *title,GridCP* gridCP) { GtkWidget *dlgWin = NULL; GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *txtWid; GtkWidget *button; dlgWin = gtk_dialog_new(); gtk_widget_realize(GTK_WIDGET(dlgWin)); gtk_window_set_title(GTK_WINDOW(dlgWin),title); gtk_window_set_position(GTK_WINDOW(dlgWin),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (dlgWin), TRUE); gtk_window_set_transient_for(GTK_WINDOW(dlgWin),GTK_WINDOW(PrincipalWindow)); g_signal_connect(G_OBJECT(dlgWin), "delete_event", (GCallback)destroyResultDlg, NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(dlgWin)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); txtWid = create_text_widget(vboxframe,NULL,&frame); if(message) gabedit_text_insert (GABEDIT_TEXT(txtWid), NULL, NULL, NULL,message,-1); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), FALSE); button = create_button(dlgWin,_("Partial charges of molecule <= AIM charges")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)setPartialChargeToAIM, GTK_OBJECT(dlgWin)); button = create_button(dlgWin,"Close"); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)destroyResultDlg, GTK_OBJECT(dlgWin)); add_button_windows(title,dlgWin); gtk_window_set_default_size (GTK_WINDOW(dlgWin), (gint)(ScreenHeight*0.6), (gint)(ScreenHeight*0.5)); gtk_widget_show_all(dlgWin); g_object_set_data(G_OBJECT (dlgWin), "GridCP",gridCP); return dlgWin; } /**************************************************************************/ static void showGridCP(GridCP* gridCP) { GList* list=NULL; gchar* result =NULL; gchar* tmp = NULL; gint nc = 0; gdouble xx, yy, zz; gint n0 = 0, n1 = 0, n2 = 0; gint i,j,k; gdouble sum = 0; Point5*** points = gridCP->grid->point; result = addToResult(result, _("Geometry (Ang)\n")); result = addToResult(result, "==============\n"); for(j=0; j<(gint)Ncenters; j++) { tmp = g_strdup_printf("%s[%d] %lf %lf %lf\n", GeomOrb[j].Prop.symbol, j+1, GeomOrb[j].C[0]*BOHR_TO_ANG, GeomOrb[j].C[1]*BOHR_TO_ANG, GeomOrb[j].C[2]*BOHR_TO_ANG); result = addToResult(result, tmp); if(tmp) g_free(tmp); } result = addToResult(result, "---------------------------------------------------------------------\n"); n0 = gridCP->grid->N[0]; n1 = gridCP->grid->N[1]; n2 = gridCP->grid->N[2]; xx = points[n0-1][0][0].C[0]-points[0][0][0].C[0]; yy = points[0][n1-1][0].C[1]-points[0][0][0].C[1]; zz = points[0][0][n2-1].C[2]-points[0][0][0].C[2]; tmp = g_strdup_printf( _( "Grid point density (Ang^-1) on the first direction(>10 is recommended) = %lf\n" "density of the grid(Ang^-1) on the second direction(>10 is recommended) = %lf\n" "density of the grid(Ang^-1) on the third direction(>10 is recommended) = %lf\n" ), n0/(xx*BOHR_TO_ANG), n1/(yy*BOHR_TO_ANG), n2/(zz*BOHR_TO_ANG) ); result = addToResult(result, tmp); if(tmp) g_free(tmp); sum = 0; for(i=0;idv; tmp = g_strdup_printf( _("sum of values on the 6 faces of the cube(should be near to 0) = %lf \n"), sum ); result = addToResult(result, tmp); if(tmp) g_free(tmp); result = addToResult(result, "---------------------------------------------------------------------\n"); if(gridCP->criticalPoints) { tmp = g_strdup_printf("%14s %14s %28s %10s %10s %s\n", " ",_("Position(Ang)")," ",_("Nearest at."),_(" AIM Charge "), _("Old charge (read from CCP output file)")); result = addToResult(result, tmp); if(tmp) g_free(tmp); } for(list=gridCP->criticalPoints;list!=NULL;list=list->next) { CriticalPoint* data = (CriticalPoint*) list->data; gint i = data->index[0]; gint j = data->index[1]; gint k = data->index[2]; gint c= data->numCenter; tmp = g_strdup_printf("%+14.8f %+14.8f %+14.8f ", gridCP->grid->point[i][j][k].C[0]*BOHR_TO_ANG, gridCP->grid->point[i][j][k].C[1]*BOHR_TO_ANG, gridCP->grid->point[i][j][k].C[2]*BOHR_TO_ANG); result = addToResult(result, tmp); if(tmp) g_free(tmp); tmp = g_strdup_printf("%2s[%d]%5s", GeomOrb[c].Prop.symbol, c+1," "); result = addToResult(result, tmp); if(tmp) g_free(tmp); tmp = g_strdup_printf("%+14.8f %+14.8f \n", data->nuclearCharge-data->integral, GeomOrb[c].partialCharge ); result = addToResult(result, tmp); if(tmp) g_free(tmp); } result = addToResult(result, "---------------------------------------------------------------------\n"); nc = 0; for(list=gridCP->criticalPoints;list!=NULL;list=list->next) { CriticalPoint* data = (CriticalPoint*) list->data; gint i = data->index[0]; gint j = data->index[1]; gint k = data->index[2]; gint c= data->numCenter; if(data->volume/gridCP->dv<=8) continue; nc++; tmp = g_strdup_printf(_("Attracteur number %d\n"),nc); result = addToResult(result, tmp); if(tmp) g_free(tmp); result = addToResult(result,"====================\n"); tmp = g_strdup_printf(_("Position(Ang) = %lf %lf %lf\n"), gridCP->grid->point[i][j][k].C[0]*BOHR_TO_ANG, gridCP->grid->point[i][j][k].C[1]*BOHR_TO_ANG, gridCP->grid->point[i][j][k].C[2]*BOHR_TO_ANG); result = addToResult(result, tmp); if(tmp) g_free(tmp); tmp = g_strdup_printf("Index = %d %d %d rho = %14.10e\n",i,j,k,gridCP->grid->point[i][j][k].C[3]); result = addToResult(result, tmp); if(tmp) g_free(tmp); tmp = g_strdup_printf(_("Nearest atom = %s[%d]\n"), GeomOrb[c].Prop.symbol, c+1); result = addToResult(result, tmp); if(tmp) g_free(tmp); tmp = g_strdup_printf(_("Number of electrons in the volume of this attractor = %lf\n"), data->integral); result = addToResult(result, tmp); if(tmp) g_free(tmp); tmp = g_strdup_printf(_("Nuclear charge of the nearest atom = %lf\n"),data->nuclearCharge); result = addToResult(result, tmp); if(tmp) g_free(tmp); tmp = g_strdup_printf(_("Charge in the volume of this attractor = %lf\n"), data->nuclearCharge-data->integral); result = addToResult(result, tmp); if(tmp) g_free(tmp); tmp = g_strdup_printf(_("# of points in this volume = %d\n"), (gint)(data->volume/gridCP->dv)); result = addToResult(result, tmp); if(tmp) g_free(tmp); } result = addToResult(result, "---------------------------------------------------------------------\n"); tmp = g_strdup_printf(_("Total number of electrons = %lf\n"), gridCP->integral); result = addToResult(result, tmp); if(tmp) g_free(tmp); tmp = g_strdup_printf(_("Total nuclear charges = %lf\n"),gridCP->nuclearCharge); result = addToResult(result, tmp); if(tmp) g_free(tmp); tmp = g_strdup_printf(_("Total charge = %lf\n"), gridCP->nuclearCharge-gridCP->integral); result = addToResult(result, tmp); if(tmp) g_free(tmp); result = addToResult(result, "---------------------------------------------------------------------\n"); if(result && !CancelCalcul) { showResultDlg(result,_("AIM charges"),gridCP); } else if(!result && !CancelCalcul) { GtkWidget* message = MessageTxt(_("Oups a problem...."),_("Attractors")); gtk_window_set_modal (GTK_WINDOW (message), TRUE); gtk_window_set_transient_for(GTK_WINDOW(message),GTK_WINDOW(PrincipalWindow)); } if(result) g_free(result); } /**************************************************************************/ static void computeNumCenters(GridCP* gridCP) { GList* list=NULL; gint c; gdouble dx, dy, dz; gdouble r; gdouble rold = 0; for(list=gridCP->criticalPoints;list!=NULL;list=list->next) { CriticalPoint* data = (CriticalPoint*) list->data; gint i = data->index[0]; gint j = data->index[1]; gint k = data->index[2]; data->numCenter = 0; for(c=0; c<(gint)Ncenters; c++) { dx = GeomOrb[c].C[0]-gridCP->grid->point[i][j][k].C[0]; dy = GeomOrb[c].C[1]-gridCP->grid->point[i][j][k].C[1]; dz = GeomOrb[c].C[2]-gridCP->grid->point[i][j][k].C[2]; r = sqrt(dx*dx + dy*dy + dz*dz); if(c==0 || rnumCenter = c; rold = r; } } } } /**************************************************************************/ void computeCharges(GridCP* gridCP) { GList* criticalPoint = gridCP->criticalPoints; gint*** vP = gridCP->volumeNumberOfPoints; Point5 ***points = gridCP->grid->point; GList* list = NULL; gint i,j,k; gint nc = 0; gint nc2 = 0; gdouble scal=0; gchar* str = _("Computing of charges..., Please wait"); gdouble* integ = NULL; gdouble* volume = NULL; computeNumCenters(gridCP); nc = 0; for(i=0;iN[0];i++) for(j=0;jN[1];j++) for(k=0;kN[2];k++) { gint n = abs(vP[i][j][k]); if(ncnext) nc2++; if(nc>0) integ = g_malloc(nc*sizeof(gdouble)); for(i=0;i0) volume = g_malloc(nc*sizeof(gdouble)); for(i=0;iN[0]; progress_orb_txt(0,str,TRUE); if(nc>0) for(i=0;iN[0];i++) { progress_orb_txt(scal,str,FALSE); for(j=0;jN[1];j++) for(k=0;kN[2];k++) { gint n = abs(vP[i][j][k])-1; if(n>=0) integ[n] += points[i][j][k].C[3]; if(n>=0) volume[n] += 1; } } progress_orb_txt(0," ",TRUE); for(list=criticalPoint;list!=NULL;list=list->next) { CriticalPoint* data=(CriticalPoint*)list->data; gint numV = data->numVolume; gint n = abs(numV)-1; data->integral = 0; data->volume = 0; if(n>=0) { data->integral = integ[n]; data->volume = volume[n]; } data->integral *= gridCP->dv; data->volume *= gridCP->dv; data->nuclearCharge = GeomOrb[data->numCenter].nuclearCharge; } if(integ) g_free(integ); if(volume) g_free(volume); for(i=0;iN[0];i++) for(j=0;jN[1];j++) for(k=0;kN[2];k++) gridCP->integral += points[i][j][k].C[3]; gridCP->integral *= gridCP->dv; for(j=0; j<(gint)Ncenters; j++) gridCP->nuclearCharge += GeomOrb[j].nuclearCharge; progress_orb_txt(0," ",TRUE); } /**************************************************************************/ void computeAIMCharges(Grid* grid, gboolean ongrid) { GridCP* gridCP = g_malloc(sizeof(GridCP)); if(!test_grid_all_positive(grid)) { Message(_("Sorry\n The current grid is not a grid for electronic density!!!"),_("Error"),TRUE); return; } initGridCP(gridCP, grid,NULL); assignGridCP(gridCP, ongrid); if(!CancelCalcul && !ongrid) { gint N = gridCP->grid->N[0]*gridCP->grid->N[1]*gridCP->grid->N[2]/1000; gint nold = refineEdge(gridCP, ongrid); gint n = refineEdge(gridCP, ongrid); gint iter = 0; while(abs(n-nold)>N) { iter++; if(iter>30) break; nold = n; n = refineEdge(gridCP, ongrid); } } if(!CancelCalcul) removeAttractor0(gridCP); if(!CancelCalcul) computeCharges(gridCP); if(!CancelCalcul) removeNonSignificantAttractor(gridCP); if(!CancelCalcul) showGridCP(gridCP); CancelCalcul = FALSE; progress_orb_txt(0," ",TRUE); } /**************************************************************************/ void computeELFEletrons(GridCP* gridCP) { GList* criticalPoint = gridCP->criticalPoints; gint*** vP = gridCP->volumeNumberOfPoints; Point5 ***points = gridCP->gridAux->point; GList* list = NULL; gint i,j,k; computeNumCenters(gridCP); progress_orb_txt(0,_("Computing of the number of electrons at each attractor..., Please wait"),TRUE); for(list=criticalPoint;list!=NULL;list=list->next) { CriticalPoint* data=(CriticalPoint*)list->data; gint numV = data->numVolume; data->integral = 0; data->volume = 0; for(i=0;iN[0];i++) for(j=0;jN[1];j++) for(k=0;kN[2];k++) { if(vP[i][j][k]==numV || vP[i][j][k]==-numV) { data->integral += points[i][j][k].C[3]; data->volume += 1; } } data->integral *= gridCP->dv; data->volume *= gridCP->dv; data->nuclearCharge = GeomOrb[data->numCenter].nuclearCharge; } for(i=0;iN[0];i++) for(j=0;jN[1];j++) for(k=0;kN[2];k++) gridCP->integral += points[i][j][k].C[3]; gridCP->integral *= gridCP->dv; for(j=0; j<(gint)Ncenters; j++) gridCP->nuclearCharge += GeomOrb[j].nuclearCharge; progress_orb_txt(0," ",TRUE); } /**************************************************************************/ static void showELFGridCP(GridCP* gridCP) { GList* list=NULL; gchar* result =NULL; gchar* tmp = NULL; gint nc = 0; gdouble xx, yy, zz; gint n0 = 0, n1 = 0, n2 = 0; gint i,j,k; gdouble sum = 0; Point5*** points = gridCP->gridAux->point; result = addToResult(result, _("Geometry (Ang)\n")); result = addToResult(result, "==============\n"); for(j=0; j<(gint)Ncenters; j++) { tmp = g_strdup_printf("%s[%d] %lf %lf %lf\n", GeomOrb[j].Prop.symbol, j+1, GeomOrb[j].C[0]*BOHR_TO_ANG, GeomOrb[j].C[1]*BOHR_TO_ANG, GeomOrb[j].C[2]*BOHR_TO_ANG); result = addToResult(result, tmp); if(tmp) g_free(tmp); } result = addToResult(result, "---------------------------------------------------------------------\n"); n0 = gridCP->grid->N[0]; n1 = gridCP->grid->N[1]; n2 = gridCP->grid->N[2]; xx = points[n0-1][0][0].C[0]-points[0][0][0].C[0]; yy = points[0][n1-1][0].C[1]-points[0][0][0].C[1]; zz = points[0][0][n2-1].C[2]-points[0][0][0].C[2]; tmp = g_strdup_printf( _( "Grid point density (Ang^-1) on the first direction(>10 is recommended) = %lf\n" "density of the grid(Ang^-1) on the second direction(>10 is recommended) = %lf\n" "density of the grid(Ang^-1) on the third direction(>10 is recommended) = %lf\n" ), n0/(xx*BOHR_TO_ANG), n1/(yy*BOHR_TO_ANG), n2/(zz*BOHR_TO_ANG) ); result = addToResult(result, tmp); if(tmp) g_free(tmp); sum = 0; for(i=0;idv; tmp = g_strdup_printf( _("sum of values on the 6 faces of the cube(should be near to 0) = %lf \n"), sum ); result = addToResult(result, tmp); if(tmp) g_free(tmp); result = addToResult(result, "---------------------------------------------------------------------\n"); if(gridCP->criticalPoints) { tmp = g_strdup_printf("%14s %14s %28s %10s %10s\n", " ",_("Position(Ang)")," ",_("Nearest at."),_(" # electrons")); result = addToResult(result, tmp); if(tmp) g_free(tmp); } for(list=gridCP->criticalPoints;list!=NULL;list=list->next) { CriticalPoint* data = (CriticalPoint*) list->data; gint i = data->index[0]; gint j = data->index[1]; gint k = data->index[2]; gint c= data->numCenter; tmp = g_strdup_printf("%+14.8f %+14.8f %+14.8f ", gridCP->grid->point[i][j][k].C[0]*BOHR_TO_ANG, gridCP->grid->point[i][j][k].C[1]*BOHR_TO_ANG, gridCP->grid->point[i][j][k].C[2]*BOHR_TO_ANG); result = addToResult(result, tmp); if(tmp) g_free(tmp); tmp = g_strdup_printf("%2s[%d]%5s", GeomOrb[c].Prop.symbol, c+1," "); result = addToResult(result, tmp); if(tmp) g_free(tmp); tmp = g_strdup_printf("%+14.8f\n", data->integral); result = addToResult(result, tmp); if(tmp) g_free(tmp); } result = addToResult(result, "---------------------------------------------------------------------\n"); nc = 0; for(list=gridCP->criticalPoints;list!=NULL;list=list->next) { CriticalPoint* data = (CriticalPoint*) list->data; gint i = data->index[0]; gint j = data->index[1]; gint k = data->index[2]; gint c= data->numCenter; if(data->volume/gridCP->dv<=8) continue; nc++; tmp = g_strdup_printf(_("Attracteur number %d\n"),nc); result = addToResult(result, tmp); if(tmp) g_free(tmp); result = addToResult(result,"====================\n"); tmp = g_strdup_printf(_("Position(Ang) = %lf %lf %lf\n"), gridCP->grid->point[i][j][k].C[0]*BOHR_TO_ANG, gridCP->grid->point[i][j][k].C[1]*BOHR_TO_ANG, gridCP->grid->point[i][j][k].C[2]*BOHR_TO_ANG); result = addToResult(result, tmp); if(tmp) g_free(tmp); tmp = g_strdup_printf("Index = %d %d %d rho = %14.10e\n",i,j,k,gridCP->gridAux->point[i][j][k].C[3]); result = addToResult(result, tmp); if(tmp) g_free(tmp); tmp = g_strdup_printf(_("Nearest atom = %s[%d]\n"), GeomOrb[c].Prop.symbol, c+1); result = addToResult(result, tmp); if(tmp) g_free(tmp); tmp = g_strdup_printf(_("Number of electrons in the volume of this attractor = %lf\n"), data->integral); result = addToResult(result, tmp); if(tmp) g_free(tmp); tmp = g_strdup_printf(_("Nuclear charge of the nearest atom = %lf\n"),data->nuclearCharge); result = addToResult(result, tmp); if(tmp) g_free(tmp); tmp = g_strdup_printf(_("# of points in this volume = %d\n"), (gint)(data->volume/gridCP->dv)); result = addToResult(result, tmp); if(tmp) g_free(tmp); } result = addToResult(result, "---------------------------------------------------------------------\n"); tmp = g_strdup_printf(_("Total number of electrons = %lf\n"), gridCP->integral); result = addToResult(result, tmp); result = addToResult(result, "---------------------------------------------------------------------\n"); if(result && !CancelCalcul) { GtkWidget* message = MessageTxt(result,_("ELF analysis")); gtk_window_set_modal (GTK_WINDOW (message), TRUE); gtk_window_set_transient_for(GTK_WINDOW(message),GTK_WINDOW(PrincipalWindow)); } else if(!result && !CancelCalcul) { GtkWidget* message = MessageTxt(_("Oups a problem...."),_("Attractors")); gtk_window_set_modal (GTK_WINDOW (message), FALSE); gtk_window_set_transient_for(GTK_WINDOW(message),GTK_WINDOW(PrincipalWindow)); } if(result) g_free(result); } /**************************************************************************/ void computeELFAttractors(Grid* gridELF, Grid* gridDens, gboolean ongrid) { GridCP* gridCP = g_malloc(sizeof(GridCP)); if(!test_grid_all_positive(gridELF)) { Message(_("Sorry\n The current grid is not a grid for ELF!!!"),_("Error"),TRUE); return; } if(!test_grid_all_positive(gridDens)) { Message(_("Sorry\n The second grid is not a grid for electronic density!!!"),_("Error"),TRUE); return; } if(gridELF && gridDens) { gint c; for(c=0;c<3;c++) if(gridELF->N[c] != gridDens->N[c]) { Message(_("Sorry\n The Cubes of the 2 grids should be equals!!!"),_("Error"),TRUE); return; } } initGridCP(gridCP, gridELF,gridDens); assignGridCP(gridCP, ongrid); if(!CancelCalcul) refineEdge(gridCP,ongrid); if(!CancelCalcul) removeAttractor0(gridCP); if(!CancelCalcul) assignPointsZero(gridCP); if(!CancelCalcul) computeELFEletrons(gridCP); if(!CancelCalcul) removeNonSignificantAttractor(gridCP); if(!CancelCalcul) showELFGridCP(gridCP); CancelCalcul = FALSE; progress_orb_txt(0," ",TRUE); } #undef TOL GabeditSrc250/src/Display/AnimationGeomConv.c0000644000175100017510000053552713130665225021431 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "GlobalOrb.h" #include "../Utils/AtomsProp.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Display/StatusOrb.h" #include "../Display/GLArea.h" #include "../Display/AnimationGeomConv.h" #include "../Display/GeomOrbXYZ.h" #include "../Display/AtomicOrbitals.h" #include "../Files/FileChooser.h" #include "../Geometry/GeomGlobal.h" #include "../Files/FolderChooser.h" #include "../Files/GabeditFolderChooser.h" #include "../Common/Help.h" #include "../Common/StockIcons.h" #include "../Display/PovrayGL.h" #include "../Display/Images.h" #include "../Display/UtilsOrb.h" #include "../Display/BondsOrb.h" #include "../Utils/GabeditXYPlot.h" #include "../../pixmaps/Open.xpm" static GtkWidget *WinDlg = NULL; static GtkWidget *EntryVelocity = NULL; static GtkWidget *PlayButton = NULL; static GtkWidget *StopButton = NULL; static GtkTreeView *treeView = NULL; static gboolean play = FALSE; static GtkWidget *buttonCheckFilm = NULL; static GtkWidget *buttonDirFilm = NULL; static GtkWidget* comboListFilm = NULL; static gboolean createFilm = FALSE; static gint numFileFilm = 0; static gchar formatFilm[100] = "BMP"; static gint rowSelected = -1; static gchar* inputGaussDirectory = NULL; static gint spinMultiplicity=1; static gint totalCharge = 0; static GtkWidget* buttonChkgauss = NULL; /********************************************************************************/ static void animate(); static void rafreshList(); static void stopAnimation(GtkWidget *win, gpointer data); static void playAnimation(GtkWidget *win, gpointer data); static gboolean set_geometry(gint k); static GtkWidget* addComboListToATable(GtkWidget* table, gchar** list, gint nlist, gint i, gint j, gint k); static void add_cancel_ok_button(GtkWidget *Win,GtkWidget *vbox,GtkWidget *entry, GCallback myFunc); /************************************************************************************************************/ static void setComboMethod(GtkWidget *comboMethod) { GList *glist = NULL; glist = g_list_append(glist,"Number"); glist = g_list_append(glist,"Symbol"); glist = g_list_append(glist,"MM Type"); glist = g_list_append(glist,"PDB Type"); gtk_combo_box_entry_set_popdown_strings(comboMethod, glist) ; g_list_free(glist); } /********************************************************************************/ static void setComboVal(GtkWidget *comboVal) { GList *glist = NULL; GtkWidget *comboMethod = g_object_get_data(G_OBJECT (comboVal), "ComboMethod"); G_CONST_RETURN gchar* entryText = NULL; GtkWidget *entry = GTK_BIN (comboMethod)->child; entryText = gtk_entry_get_text(GTK_ENTRY(entry)); gchar** list = NULL; gint n = 0; if(entryText && strstr(entryText,"Number")&&geometryConvergence.numberOfGeometries>0) { gint i; gint nAtoms = geometryConvergence.geometries[0].numberOfAtoms; list = g_malloc(nAtoms*sizeof(gchar*)); n = nAtoms; for(i=0;i0) { gint i,j; gint nAtoms = geometryConvergence.geometries[0].numberOfAtoms; list = g_malloc(nAtoms*sizeof(gchar*)); n = 0; for(i=0;i0) { gint i,j; gint nAtoms = geometryConvergence.geometries[0].numberOfAtoms; list = g_malloc(nAtoms*sizeof(gchar*)); n = 0; for(i=0;i0) { gint i,j; gint nAtoms = geometryConvergence.geometries[0].numberOfAtoms; list = g_malloc(nAtoms*sizeof(gchar*)); n = 0; for(i=0;i0) { gint i; for(i=0;ichild), "ComboVal1", comboVal1); g_object_set_data(G_OBJECT (GTK_BIN(comboMethod)->child), "ComboVal2", comboVal2); g_object_set_data(G_OBJECT (comboVal1), "ComboMethod", comboMethod); g_object_set_data(G_OBJECT (comboVal2), "ComboMethod", comboMethod); setComboVal(comboVal1); setComboVal(comboVal2); g_object_set_data(G_OBJECT (Wins), "EntryMethod",GTK_BIN(comboMethod)->child); g_object_set_data(G_OBJECT (Wins), "EntryVal1",GTK_BIN(comboVal1)->child); g_object_set_data(G_OBJECT (Wins), "EntryVal2",GTK_BIN(comboVal2)->child); } setComboMethod(comboMethod); g_signal_connect(G_OBJECT(GTK_BIN(comboMethod)->child),"changed", G_CALLBACK(changedMethod),NULL); i = 4; add_label_table(table,_(" dr "),i,0); add_label_table(table,":",i,1); entry = gtk_entry_new (); g_object_set_data(G_OBJECT(Wins), "Entrydr", entry); gtk_table_attach(GTK_TABLE(table),entry,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),"0.1"); gtk_editable_set_editable((GtkEditable*)entry,TRUE); gtk_widget_set_sensitive(entry, TRUE); i = 5; add_label_table(table,_(" max r "),i,0); add_label_table(table,":",i,1); entry = gtk_entry_new (); g_object_set_data(G_OBJECT(Wins), "Entrymaxr", entry); gtk_table_attach(GTK_TABLE(table),entry,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),"10.0"); gtk_editable_set_editable((GtkEditable*)entry,TRUE); gtk_widget_set_sensitive(entry, TRUE); gtk_widget_show_all(table); entry = GTK_BIN (comboMethod)->child; return entry; } /*************************************************************************************************************/ static void build_pair_radial_distribution(GtkWidget* Win, gpointer data) { gint g; GtkWidget* entrydr = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"Entrydr")); GtkWidget* entrymaxr = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"Entrymaxr")); GtkWidget* entryVal1 = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"EntryVal1")); GtkWidget* entryVal2 = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"EntryVal2")); GtkWidget* entryMethod = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"EntryMethod")); gdouble dr,maxr; gint N; gint n1,n2; gdouble* X = NULL; gdouble* Y = NULL; gint i; G_CONST_RETURN gchar* str = NULL; GtkWidget* xyplot; GtkWidget* window; if(geometryConvergence.numberOfGeometries<1) return; if(entrydr) str = gtk_entry_get_text(GTK_ENTRY(entrydr)); if(!str) return; dr = atof(str); if(dr<1e-10) return; if(entrymaxr) str = gtk_entry_get_text(GTK_ENTRY(entrymaxr)); if(!str) return; maxr = atof(str); N = maxr/dr+1; if(N<2) return; if(entryMethod) str = gtk_entry_get_text(GTK_ENTRY(entryMethod)); if(!str) return; X = g_malloc(N*sizeof(gdouble)); Y = g_malloc(N*sizeof(gdouble)); for(i=0;i=0 && n2>=0) for(g = 0;gmaxr) continue; Y[(gint)(d/dr)]++; } } else if(strstr(str,"Symbol")) { gchar s1[100]; gchar s2[100]; if(entryVal1) str = gtk_entry_get_text(GTK_ENTRY(entryVal1)); if(!str) return; sprintf(s1,"%s",str); if(entryVal2) str = gtk_entry_get_text(GTK_ENTRY(entryVal2)); if(!str) return; sprintf(s2,"%s",str); for(g = 0;gmaxr) continue; Y[(gint)(d/dr)]++; } } } } else if(strstr(str,"MM Type")) { gchar s1[100]; gchar s2[100]; if(entryVal1) str = gtk_entry_get_text(GTK_ENTRY(entryVal1)); if(!str) return; sprintf(s1,"%s",str); if(entryVal2) str = gtk_entry_get_text(GTK_ENTRY(entryVal2)); if(!str) return; sprintf(s2,"%s",str); for(g = 0;gmaxr) continue; Y[(gint)(d/dr)]++; } } } } else if(strstr(str,"PDB Type")) { gchar s1[100]; gchar s2[100]; if(entryVal1) str = gtk_entry_get_text(GTK_ENTRY(entryVal1)); if(!str) return; sprintf(s1,"%s",str); if(entryVal2) str = gtk_entry_get_text(GTK_ENTRY(entryVal2)); if(!str) return; sprintf(s2,"%s",str); for(g = 0;gmaxr) continue; Y[(gint)(d/dr)]++; } } } } gtk_widget_destroy(Win); window = gabedit_xyplot_new_window(_("Pair radial distribution"),NULL); xyplot = g_object_get_data(G_OBJECT (window), "XYPLOT"); gabedit_xyplot_add_data_conv(GABEDIT_XYPLOT(xyplot),N, X, Y, 1.0, GABEDIT_XYPLOT_CONV_NONE,NULL); gabedit_xyplot_set_range_xmin (GABEDIT_XYPLOT(xyplot), 0.0); gabedit_xyplot_set_x_label (GABEDIT_XYPLOT(xyplot), "r(Ang)"); gabedit_xyplot_set_y_label (GABEDIT_XYPLOT(xyplot), "g(r)"); g_free(X); g_free(Y); } /********************************************************************************************************/ static void create_gr_dlg() { GtkWidget *Win; GtkWidget *frame; GtkWidget *vboxall; GtkWidget* vbox; GtkWidget* entry; /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),"compute radial distribution"); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"gr"); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(Win); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(vboxall), frame,TRUE,TRUE,0); gtk_widget_show (frame); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); gtk_widget_realize(Win); entry = add_inputgr_entrys(Win,vbox); add_cancel_ok_button(Win,vbox,entry,(GCallback)build_pair_radial_distribution); /* Show all */ gtk_widget_show_all (Win); } /*************************************************************************************************************/ static gint getNumberOfValenceElectrons(gint g) { gint ne = 0; gint a; for(a=0;achild; g_object_set_data(G_OBJECT (entry), "Combo",combo); gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.2),-1); return entry; } /***********************************************************************************************/ static GtkWidget *addChargeToTable(GtkWidget *table, gint i) { GtkWidget* entryCharge = NULL; GtkWidget* comboCharge = NULL; gint nlistCharge = 1; gchar* listCharge[] = {"0"}; add_label_table(table,_("Charge"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryCharge = addComboListToATable(table, listCharge, nlistCharge, i, 2, 1); comboCharge = g_object_get_data(G_OBJECT (entryCharge), "Combo"); gtk_widget_set_sensitive(entryCharge, FALSE); return comboCharge; } /***********************************************************************************************/ static GtkWidget *addSpinToTable(GtkWidget *table, gint i) { GtkWidget* entrySpinMultiplicity = NULL; GtkWidget* comboSpinMultiplicity = NULL; gint nlistspinMultiplicity = 1; gchar* listspinMultiplicity[] = {"0"}; add_label_table(table,_("Spin multiplicity"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entrySpinMultiplicity = addComboListToATable(table, listspinMultiplicity, nlistspinMultiplicity, i, 2, 1); comboSpinMultiplicity = g_object_get_data(G_OBJECT (entrySpinMultiplicity), "Combo"); gtk_widget_set_sensitive(entrySpinMultiplicity, FALSE); g_signal_connect(G_OBJECT(entrySpinMultiplicity),"changed", G_CALLBACK(changedEntrySpinMultiplicity),NULL); return comboSpinMultiplicity; } /*************************************************************************************************************/ static void print_gaussian_geometries_link(GtkWidget* Win, gpointer data) { gint a; gchar* fileName = NULL; FILE* file; gchar p = '%'; gint g; GtkWidget* entry = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"EntryKeywords")); G_CONST_RETURN gchar* supstr = NULL; gchar layer[20] = " "; if(geometryConvergence.numberOfGeometries<1) return; if(entry) supstr = gtk_entry_get_text(GTK_ENTRY(entry)); if(!supstr) return; fileName = g_strdup_printf("%s%sgabmg.com",inputGaussDirectory,G_DIR_SEPARATOR_S); file = fopen(fileName, "w"); if(!file) { gchar* t = g_strdup_printf(_("Sorry\n I can not create %s file"),fileName); Message(t,_("Error"),TRUE); if(fileName) g_free(fileName); if(t)g_free(t); return; } for(g = 0;gactive) fprintf(file,"%cChk=gabmg\n",p); fprintf(file,"# %s\n",supstr); fprintf(file,"# Test\n"); fprintf(file,"# Units(Ang,Deg)\n"); /* if(g!=0) fprintf(file,"# Guess=read\n");*/ fprintf(file,"\n File generated by Gabedit(Multiple Geometries)\n\n"); for(a=0;a=geometryConvergence.numberOfGeometries || geometryConvergence.numberOfGeometries<1) return; fileName = g_strdup_printf("%s%sgabmg_%d.com",inputGaussDirectory,G_DIR_SEPARATOR_S,g); file = fopen(fileName, "w"); if(!file) { if(fileName) g_free(fileName); return; } if(GTK_IS_WIDGET(buttonChkgauss)&& GTK_TOGGLE_BUTTON (buttonChkgauss)->active) fprintf(file,"%cChk=gabmg_%d\n",p,g); fprintf(file,"# %s\n",supstr); fprintf(file,"# Test\n"); fprintf(file,"# Units(Ang,Deg)\n"); /* if(g!=0) fprintf(file,"# Guess=read\n");*/ fprintf(file,"\n File generated by Gabedit(Multiple Geometries)\n\n"); for(a=0;a0) { if(dirname[strlen(dirname)-1] != G_DIR_SEPARATOR) filename = g_strdup_printf("%s%sdump.txt",dirname,G_DIR_SEPARATOR_S); else filename = g_strdup_printf("%sdump.txt",dirname); } else { dirname = g_strdup(g_get_home_dir()); filename = g_strdup_printf("%s%sdump.txt",dirname,G_DIR_SEPARATOR_S); } if(dirname) g_free(dirname); if(filename) { set_last_directory(filename); g_free(filename); } } /********************************************************************************/ static void set_directory(GtkWidget *win, gpointer data) { GtkWidget *dirSelector; dirSelector = selctionOfDir(reset_last_directory, _("Set folder"), GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); gtk_window_set_transient_for(GTK_WINDOW(dirSelector),GTK_WINDOW(PrincipalWindow)); gtk_window_set_transient_for(GTK_WINDOW(dirSelector),GTK_WINDOW(WinDlg)); } /********************************************************************************/ void initGeometryConvergence() { geometryConvergence.fileName = NULL; geometryConvergence.typeOfFile = GABEDIT_TYPEFILE_UNKNOWN; geometryConvergence.numberOfGeometries = 0; geometryConvergence.numGeometry = NULL; geometryConvergence.velocity = 0.1; geometryConvergence.energy = NULL; geometryConvergence.maxForce = NULL; geometryConvergence.rmsForce= NULL; geometryConvergence.maxStep = NULL; geometryConvergence.rmsStep = NULL; geometryConvergence.geometries = NULL; geometryConvergence.comments = NULL; rowSelected = -1; } /********************************************************************************/ void freeGeometryConvergence() { static gboolean begin = TRUE; if(begin) { begin = FALSE; initGeometryConvergence(); return; } if(geometryConvergence.fileName) g_free(geometryConvergence.fileName); if(geometryConvergence.numGeometry) g_free(geometryConvergence.numGeometry); if(geometryConvergence.energy) g_free(geometryConvergence.energy); if(geometryConvergence.maxForce) g_free(geometryConvergence.maxForce); if(geometryConvergence.rmsForce) g_free(geometryConvergence.rmsForce); if(geometryConvergence.maxStep) g_free(geometryConvergence.maxStep); if(geometryConvergence.rmsStep) g_free(geometryConvergence.rmsStep); if(geometryConvergence.geometries) { gint i; Geometry* geometries = geometryConvergence.geometries; for(i=0;i= geometryConvergence.numberOfGeometries) return; if(!geometryConvergence.geometries) return; if(geometryConvergence.numberOfGeometries==1) { freeGeometryConvergence(); rafreshList(); return; } if(geometryConvergence.geometries) if(geometryConvergence.geometries[k].listOfAtoms) g_free(geometryConvergence.geometries[k].listOfAtoms); for(j=k;jnumberOfAtoms = nn; geometry->listOfAtoms = listOfAtoms; OK = TRUE; break; } else { nn = atoi(t); if(!fgets(t, BSIZE,file)) break; for(i=0; inumberOfAtoms == 0 ) { if(geometry->listOfAtoms) g_free(geometry->listOfAtoms); } return TRUE; } /********************************************************************************/ static gboolean read_dalton_file_geomi(gchar *FileName, gint num, Geometry* geometry) { gchar *t; gboolean OK; gchar *AtomCoord[5]; FILE *file; guint i; gint j=0; gint l; guint numgeom; Atom* listOfAtoms = NULL; gchar dum[100]; gint kk; if ((!FileName) || (strcmp(FileName,"") == 0)) { Message(_("Sorry\n No file selected"),_("Error"),TRUE); return FALSE ; } file = FOpen(FileName, "rb"); if(file ==NULL) { Message(_("Sorry\nI can not open this file"),_("Error"),TRUE); return FALSE; } t=g_malloc(BSIZE); for(i=0;i<5;i++) AtomCoord[i]=g_malloc(BSIZE*sizeof(char)); numgeom =1; do { OK=FALSE; while(!feof(file)) { {char* e = fgets(t,BSIZE,file);} /* if (strstr(t,"Next geometry"))*/ if(strstr(t,"Next geometry") || strstr(t,"Final geometry")) { {char* e = fgets(t,BSIZE,file);} {char* e = fgets(t,BSIZE,file);} numgeom++; OK = TRUE; break; } } if(!OK && (numgeom == 1) ) { Message(_("Sorry\nI can not read geometry in this file"),_("Error"),TRUE); fclose(file); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); return FALSE; } if(!OK)break; j=-1; while(!feof(file) ) { {char* e = fgets(t,BSIZE,file);} if (!strcmp(t,"\n")) { break; } j++; if(listOfAtoms == NULL) listOfAtoms = g_malloc(sizeof(Atom)); else listOfAtoms = g_realloc(listOfAtoms, (j+1)*sizeof(Atom)); kk = sscanf(t,"%s %s %s %s %s",AtomCoord[0],AtomCoord[1], AtomCoord[2],AtomCoord[3], dum); if(kk==5) sscanf(t,"%s %s %s %s %s",AtomCoord[0],dum, AtomCoord[1], AtomCoord[2],AtomCoord[3]); for(i=0;i<(gint)strlen(AtomCoord[0]);i++) if(isdigit(AtomCoord[0][i])) AtomCoord[0][i] = ' '; delete_all_spaces(AtomCoord[0]); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); sprintf(listOfAtoms[j].symbol,"%s",AtomCoord[0]); sprintf(listOfAtoms[j].mmType,"%s",AtomCoord[0]); sprintf(listOfAtoms[j].pdbType,"%s",AtomCoord[0]); for(i=0;i<3;i++) listOfAtoms[j].C[i]=atof((AtomCoord[i+1])); listOfAtoms[j].partialCharge = 0.0; listOfAtoms[j].nuclearCharge = get_atomic_number_from_symbol(listOfAtoms[j].symbol); listOfAtoms[j].variable = 0; } if(num >0 && (gint)numgeom-1 == num) break; }while(!feof(file)); fclose(file); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(j+1 == 0 && listOfAtoms ) { g_free(listOfAtoms); } else { geometry->numberOfAtoms = j+1; geometry->listOfAtoms = listOfAtoms; } return TRUE; } /********************************************************************************/ static gboolean read_gamess_file_geomi(gchar *FileName, gint num, Geometry* geometry) { gchar *t; gboolean OK; gchar *AtomCoord[5]; FILE *file; guint i; gint j=0; gint l; guint numgeom; Atom* listOfAtoms = NULL; gchar dum[100]; if ((!FileName) || (strcmp(FileName,"") == 0)) { Message(_("Sorry\n No file selected"),_("Error"),TRUE); return FALSE ; } file = FOpen(FileName, "rb"); if(file ==NULL) { Message(_("Sorry\nI can not open this file"),_("Error"),TRUE); return FALSE; } t=g_malloc(BSIZE*sizeof(gchar)); for(i=0;i<5;i++) AtomCoord[i]=g_malloc(BSIZE*sizeof(char)); numgeom =1; do { OK=FALSE; while(!feof(file)) { {char* e = fgets(t,BSIZE,file);} if(strstr(t,"COORDINATES OF ALL ATOMS ARE (ANGS)")) { {char* e = fgets(t,BSIZE,file);} {char* e = fgets(t,BSIZE,file);} numgeom++; OK = TRUE; break; } } if(!OK && (numgeom == 1) ) { Message(_("Sorry\nI can not read geometry in this file"),_("Error"),TRUE); fclose(file); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); return FALSE; } if(!OK)break; j=-1; while(!feof(file) ) { {char* e = fgets(t,BSIZE,file);} if (this_is_a_backspace(t)) { break; } j++; if(listOfAtoms == NULL) listOfAtoms = g_malloc(sizeof(Atom)); else listOfAtoms = g_realloc(listOfAtoms, (j+1)*sizeof(Atom)); /* printf("t=%s\n",t);*/ sscanf(t,"%s %s %s %s %s",AtomCoord[0],dum, AtomCoord[1], AtomCoord[2],AtomCoord[3]); for(i=0;i<(gint)strlen(AtomCoord[0]);i++) if(isdigit(AtomCoord[0][i])) AtomCoord[0][i] = ' '; delete_all_spaces(AtomCoord[0]); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); sprintf(AtomCoord[0],"%s",get_symbol_using_z(atoi(dum))); sprintf(listOfAtoms[j].symbol,"%s",AtomCoord[0]); sprintf(listOfAtoms[j].mmType,"%s",AtomCoord[0]); sprintf(listOfAtoms[j].pdbType,"%s",AtomCoord[0]); for(i=0;i<3;i++) listOfAtoms[j].C[i]=atof((AtomCoord[i+1]))*ANG_TO_BOHR; listOfAtoms[j].partialCharge = 0.0; listOfAtoms[j].nuclearCharge = get_atomic_number_from_symbol(listOfAtoms[j].symbol); listOfAtoms[j].variable = 0; } if(num >0 && (gint)numgeom-1 == num) break; }while(!feof(file)); fclose(file); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(j+1 == 0 && listOfAtoms ) { g_free(listOfAtoms); } else { geometry->numberOfAtoms = j+1; geometry->listOfAtoms = listOfAtoms; } return TRUE; } /********************************************************************************/ static gboolean read_gamess_output(gchar* fileName) { gchar *pdest; gint k=0; gchar *maxGrad = NULL; gchar *rmsGrad = NULL; gchar *temp = NULL; gchar *tmp = NULL; gchar *t = NULL; FILE *file; gboolean OK; temp = get_name_file(fileName); set_status_label_info(_("File name"),temp); g_free(temp); set_status_label_info(_("File type"),"Gamess"); file = FOpen(fileName, "rb"); if(!file) { t = g_strdup_printf(_(" Error : I can not open file %s\n"),fileName); Message(t,_("Error"),TRUE); if(t) g_free(t); return FALSE; } t=g_malloc(BSIZE*sizeof(gchar)); maxGrad = g_malloc(50*sizeof(gchar)); rmsGrad = g_malloc(50*sizeof(gchar)); temp = g_malloc(50*sizeof(gchar)); tmp = g_malloc(50*sizeof(gchar)); OK = TRUE; while(!feof(file)) { if(!fgets(t,BSIZE,file)) break; /* pdest = strstr( t,"NSERCH= ");*/ pdest = strstr( t,"1NSERCH="); if( pdest == NULL) pdest = strstr( t,"POINT NSERCH="); if( pdest != NULL ) { OK = TRUE; while(!feof(file) && OK ) { if(!fgets(t, BSIZE,file)) { OK = FALSE; break; } if(strstr(t,"COORDINATES OF ALL ATOMS ARE (ANGS)")) { if(!fgets(t, BSIZE,file)) { OK = FALSE; break; } if(!fgets(t, BSIZE,file)) { OK = FALSE; break; } OK = TRUE; break; } } if(!OK) break; OK = TRUE; while(!feof(file) && OK ) { if(!fgets(t, BSIZE,file)) { OK = FALSE; break; } if(strstr(t,"NSERCH") && strstr(t,"ENERGY=")) { gchar* t1 = strstr(t,"ENERGY="); if(t1) sscanf(t1+7,"%s",tmp); /* energy */ else { OK = FALSE; break; } OK = TRUE; break; } } if(!OK) break; OK = TRUE; while(!feof(file) && OK ) { if(!fgets(t, BSIZE,file)) { OK = FALSE; break; } if(strstr(t,"MAXIMUM GRADIENT =")&& strstr(t,"RMS GRADIENT =")) { gchar* t1 = strstr(t,"MAXIMUM GRADIENT ="); if(t1) sscanf(t1+19,"%s",maxGrad); /* maxGrad */ else { OK = FALSE; break; } t1 = strstr(t,"RMS GRADIENT ="); if(t1) sscanf(t1+15,"%s",rmsGrad); /* rmsGrad */ else { OK = FALSE; break; } OK = TRUE; break; } } if(!OK) break; } if(pdest != NULL) { geometryConvergence.numberOfGeometries++; if(geometryConvergence.numberOfGeometries == 1 ) { geometryConvergence.typeOfFile = GABEDIT_TYPEFILE_GAMESS; geometryConvergence.fileName = g_strdup(fileName); geometryConvergence.numGeometry = g_malloc(sizeof(gint)); geometryConvergence.numGeometry[0] = 1; geometryConvergence.energy = g_malloc(sizeof(gdouble)); geometryConvergence.energy[0] = atof(tmp); geometryConvergence.maxStep = g_malloc(sizeof(gdouble)); geometryConvergence.maxStep[0] = atof(maxGrad); geometryConvergence.rmsStep = g_malloc(sizeof(gdouble)); geometryConvergence.rmsStep[0] = atof(rmsGrad); } else { geometryConvergence.numGeometry = g_realloc(geometryConvergence.numGeometry,geometryConvergence.numberOfGeometries*sizeof(gint)); k = geometryConvergence.numberOfGeometries-1; geometryConvergence.numGeometry[k] = k+1; geometryConvergence.energy = g_realloc(geometryConvergence.energy,geometryConvergence.numberOfGeometries*sizeof(gdouble)); geometryConvergence.energy[k] = atof(tmp); geometryConvergence.maxStep = g_realloc(geometryConvergence.maxStep, geometryConvergence.numberOfGeometries*sizeof(gdouble)); geometryConvergence.maxStep[k] = atof(maxGrad); geometryConvergence.rmsStep = g_realloc(geometryConvergence.rmsStep, geometryConvergence.numberOfGeometries*sizeof(gdouble)); geometryConvergence.rmsStep[k] = atof(rmsGrad); } OK = TRUE; } } if(!OK) { freeGeometryConvergence(); sprintf(t,_("Sorry\nI can not read energy or convergence parameters from %s file "),fileName); Message(t,_("Error"),TRUE); OK = FALSE; } fclose(file); g_free(t); g_free(temp); g_free(maxGrad); g_free(rmsGrad); g_free(tmp); if(geometryConvergence.numberOfGeometries>0) { gint i; geometryConvergence.geometries = g_malloc(geometryConvergence.numberOfGeometries*sizeof(Geometry)); for(i=0;i0 && (gint)numgeom-1 == num) break; }while(!feof(file)); fclose(file); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(j+1 == 0 && listOfAtoms ) { g_free(listOfAtoms); } else { geometry->numberOfAtoms = j+1; geometry->listOfAtoms = listOfAtoms; } return TRUE; } /********************************************************************************/ static gboolean read_gamess_irc(gchar* fileName) { gint k=0; gchar *temp = NULL; gchar *tmp = NULL; gchar *t = NULL; FILE *file; gboolean OK; temp = get_name_file(fileName); set_status_label_info(_("File name"),temp); g_free(temp); set_status_label_info(_("File type"),"Gamess"); file = FOpen(fileName, "rb"); if(!file) { t = g_strdup_printf(_(" Error : I can not open file %s\n"),fileName); Message(t,_("Error"),TRUE); if(t) g_free(t); return FALSE; } t=g_malloc(BSIZE*sizeof(gchar)); temp = g_malloc(50*sizeof(gchar)); tmp = g_malloc(50*sizeof(gchar)); OK = TRUE; while(!feof(file)) { if(!fgets(t,BSIZE,file)) break; if( strstr( t,"POINT=") && strstr( t,"E=") ) { sscanf(strstr(t,"E=")+2,"%s",tmp); /* energy */ OK = TRUE; while(!feof(file) && OK ) { if(!fgets(t, BSIZE,file)) { OK = FALSE; break; } if(strstr(t,"CARTESIAN COORDINATES (BOHR)")) { OK = TRUE; break; } } if(!OK) break; geometryConvergence.numberOfGeometries++; if(geometryConvergence.numberOfGeometries == 1 ) { geometryConvergence.typeOfFile = GABEDIT_TYPEFILE_GAMESS; geometryConvergence.fileName = g_strdup(fileName); geometryConvergence.numGeometry = g_malloc(sizeof(gint)); geometryConvergence.numGeometry[0] = 1; geometryConvergence.energy = g_malloc(sizeof(gdouble)); geometryConvergence.energy[0] = atof(tmp); geometryConvergence.maxStep = NULL; geometryConvergence.rmsStep = NULL; } else { geometryConvergence.numGeometry = g_realloc(geometryConvergence.numGeometry,geometryConvergence.numberOfGeometries*sizeof(gint)); k = geometryConvergence.numberOfGeometries-1; geometryConvergence.numGeometry[k] = k+1; geometryConvergence.energy = g_realloc(geometryConvergence.energy,geometryConvergence.numberOfGeometries*sizeof(gdouble)); geometryConvergence.energy[k] = atof(tmp); geometryConvergence.maxStep = NULL; geometryConvergence.rmsStep = NULL; } OK = TRUE; } } if(!OK) { freeGeometryConvergence(); sprintf(t,_("Sorry\nI can not read energy from %s file "),fileName); Message(t,_("Error"),TRUE); OK = FALSE; } fclose(file); g_free(t); g_free(temp); g_free(tmp); if(geometryConvergence.numberOfGeometries>0) { gint i; geometryConvergence.geometries = g_malloc(geometryConvergence.numberOfGeometries*sizeof(Geometry)); for(i=0;i0 ) { {char* e = fgets(t,BSIZE,file);} {char* e = fgets(t,BSIZE,file);} {char* e = fgets(t,BSIZE,file);} pdest = strstr( t, "Type" ); result = pdest - t ; if(result>0) itype=1; else itype=0; {char* e = fgets(t,BSIZE,file);} numgeom++; OK = TRUE; break; } } if(!OK && (numgeom == 1) ) { fclose(file); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); return FALSE; } if(!OK)break; j=-1; while(!feof(file) ) { {char* e = fgets(t,BSIZE,file);} pdest = strstr( t, "----------------------------------" ); result = pdest - t ; if ( result >0 ) { break; } j++; if(listOfAtoms == NULL) listOfAtoms = g_malloc(sizeof(Atom)); else listOfAtoms = g_realloc(listOfAtoms, (j+1)*sizeof(Atom)); if(itype==0) sscanf(t,"%d %s %s %s %s",&idummy,AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3]); else sscanf(t,"%d %s %d %s %s %s",&idummy,AtomCoord[0],&idummy,AtomCoord[1],AtomCoord[2],AtomCoord[3]); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); sprintf(listOfAtoms[j].symbol,"%s",symb_atom_get((guint)atoi(AtomCoord[0]))); sprintf(listOfAtoms[j].mmType,"%s",listOfAtoms[j].symbol); sprintf(listOfAtoms[j].pdbType,"%s",listOfAtoms[j].symbol); for(i=0;i<3;i++) listOfAtoms[j].C[i]=atof(ang_to_bohr(AtomCoord[i+1])); listOfAtoms[j].partialCharge = 0.0; listOfAtoms[j].nuclearCharge = get_atomic_number_from_symbol(listOfAtoms[j].symbol); listOfAtoms[j].variable = 0; } if(num >0 && (gint)numgeom-1 == num) break; }while(!feof(file)); fclose(file); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(j+1 == 0 && listOfAtoms ) { g_free(listOfAtoms); listOfAtoms = NULL; } else { geometry->numberOfAtoms = j+1; geometry->listOfAtoms = listOfAtoms; } return TRUE; } /********************************************************************************/ static gboolean read_gaussian_file_geomi(gchar *FileName, gint num, Geometry* geometry) { FILE* file; if ((!FileName) || (strcmp(FileName,"") == 0)) { Message(_("Sorry\n No file selected"),_("Error"),TRUE); return FALSE; } file = FOpen(FileName, "rb"); if(file ==NULL) { Message(_("Sorry\nI can not open this file"),_("Error"),TRUE); return FALSE; } fclose(file); if(read_gaussian_file_geomi_str(FileName,num,"Standard orientation:", geometry)) return TRUE; if(read_gaussian_file_geomi_str(FileName,num,"Input orientation:", geometry)) return TRUE; /* for calculation with nosym option */ if(!read_gaussian_file_geomi_str(FileName,num,"Z-Matrix orientation:", geometry)) { Message(_("Sorry\nI can not read geometry in this file"),_("Error"),TRUE); return FALSE; } return TRUE; } /********************************************************************************/ static gboolean read_molpro_file_geomi(gchar *FileName, gint num, Geometry* geometry) { gchar *t; gboolean OK; gchar *AtomCoord[5]; FILE *file; guint idummy; guint i; gint j=0; gint l; guint numgeom; Atom* listOfAtoms = NULL; if ((!FileName) || (strcmp(FileName,"") == 0)) { Message(_("Sorry\n No file selected"),_("Error"),TRUE); return FALSE ; } file = FOpen(FileName, "rb"); if(file ==NULL) { Message(_("Sorry\nI can not open this file"),_("Error"),TRUE); return FALSE; } t=g_malloc(BSIZE); for(i=0;i<5;i++) AtomCoord[i]=g_malloc(BSIZE*sizeof(char)); numgeom =1; do { OK=FALSE; while(!feof(file)) { {char* e = fgets(t,BSIZE,file);} if (strstr(t,"Optimization point")) { OK=TRUE; break; } } if(!OK) break; OK=FALSE; while(!feof(file)) { {char* e = fgets(t,BSIZE,file);} if ( !strcmp(t," ATOMIC COORDINATES\n")) { {char* e = fgets(t,BSIZE,file);} {char* e = fgets(t,BSIZE,file);} if(strstr(t,"Q_EFF"))continue; {char* e = fgets(t,BSIZE,file);} numgeom++; OK = TRUE; break; } } if(!OK && (numgeom == 1) ) { Message(_("Sorry\nI can not read geometry in this file"),_("Error"),TRUE); fclose(file); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); return FALSE; } if(!OK)break; j=-1; while(!feof(file) ) { {char* e = fgets(t,BSIZE,file);} if ( !strcmp(t,"\n")) { break; } j++; if(listOfAtoms == NULL) listOfAtoms = g_malloc(sizeof(Atom)); else listOfAtoms = g_realloc(listOfAtoms, (j+1)*sizeof(Atom)); sscanf(t,"%d %s %s %s %s %s",&idummy, AtomCoord[0],AtomCoord[1],AtomCoord[1], AtomCoord[2],AtomCoord[3]); for(i=0;i<(gint)strlen(AtomCoord[0]);i++) if(isdigit(AtomCoord[0][i])) AtomCoord[0][i] = ' '; delete_all_spaces(AtomCoord[0]); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); sprintf(listOfAtoms[j].symbol,"%s",AtomCoord[0]); sprintf(listOfAtoms[j].mmType,"%s",listOfAtoms[j].symbol); sprintf(listOfAtoms[j].pdbType,"%s",listOfAtoms[j].symbol); for(i=0;i<3;i++) listOfAtoms[j].C[i]=atof((AtomCoord[i+1])); listOfAtoms[j].partialCharge = 0.0; listOfAtoms[j].nuclearCharge = get_atomic_number_from_symbol(listOfAtoms[j].symbol); listOfAtoms[j].variable = 0; } if(num >0 && (gint)numgeom-1 == num) break; }while(!feof(file)); fclose(file); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(j+1 == 0 && listOfAtoms ) { g_free(listOfAtoms); OK = FALSE; } else { geometry->numberOfAtoms = j+1; geometry->listOfAtoms = listOfAtoms; OK = TRUE; } return OK; } /********************************************************************************/ static gboolean read_mpqc_file_geomi(gchar *fileName,gint numGeometry, Geometry* geometry) { gchar *t; gboolean OK; gchar *AtomCoord[5]; FILE *file; guint idummy; guint i; gint j=0; gint l; guint numGeom; gdouble tmpReal; Atom* listOfAtoms = NULL; file = FOpen(fileName, "rb"); if(file ==NULL) { Message(_("Sorry\nI can not open this file"),_("Error"),TRUE); return FALSE; } t=g_malloc(BSIZE); for(i=0;i<5;i++) AtomCoord[i]=g_malloc(BSIZE*sizeof(char)); numGeom = 0; do { gboolean unitOfOutAng = FALSE; OK=FALSE; while(!feof(file)) { if(!fgets(t,BSIZE,file)) break; if (strstr(t,"")) { gboolean OkUnit = FALSE; do{ if(!fgets(t,BSIZE,file))break; if(strstr(t,"unit")) { OkUnit = TRUE; if(strstr(t,"angstrom"))unitOfOutAng=TRUE; break; }; }while(!feof(file)); if(!OkUnit) break; numGeom++; if((gint)numGeom == numGeometry ) { OK = TRUE; break; } if(numGeometry<0 ) { OK = TRUE; break; } } } if(!OK && (numGeom == 0) ) { g_free(t); t = g_strdup_printf(_("Sorry\nI can read Geometry from %s file "),fileName); Message(t,_("Error"),TRUE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); return FALSE; } if(!OK) break; OK = FALSE; while(!feof(file) ) { if(!fgets(t,BSIZE,file))break; if ( !(strstr(t,"atoms") && strstr(t,"geometry"))) continue; OK = TRUE; break; } if(!OK) { g_free(t); t = g_strdup_printf(_("Sorry\nI can read Geometry from %s file "),fileName); Message(t,_("Error"),TRUE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); return FALSE; } j=-1; while(!feof(file) ) { if(!fgets(t,BSIZE,file))break; if(strstr(t,"}"))break; j++; if(listOfAtoms==NULL) listOfAtoms=g_malloc(sizeof(Atom)); else listOfAtoms=g_realloc(listOfAtoms,(j+1)*sizeof(Atom)); for(i=0;inumberOfAtoms = j + 1; geometry->listOfAtoms = listOfAtoms; } return TRUE; } /********************************************************************************/ static gboolean read_mopac_aux_file_geomi(gchar *FileName, gint numgeometry, Geometry* geometry) { gchar *t; /* gboolean OK;*/ gchar *AtomCoord[5]; FILE *file; guint i; gint j=0; gint l; guint numgeom = 0; Atom* listOfAtoms = NULL; gchar* pdest = NULL; gint nElements = 0; gchar** elements = NULL; long int geomposok = 0; gchar** nuclearCharges = NULL; gint nNuclearCharges = 0; if ((!FileName) || (strcmp(FileName,"") == 0)) { Message(_("Sorry\n No file selected"),_("Error"),TRUE); return FALSE ; } file = FOpen(FileName, "rb"); if(file ==NULL) { Message(_("Sorry\nI can not open this file"),_("Error"),TRUE); return FALSE; } elements = get_one_block_from_aux_mopac_file(file, "ATOM_EL[", &nElements); if(!elements) { Message(_("Sorry\nI can not read the symbol of atoms from this file"),_("Error"),TRUE); fclose(file); return FALSE; } geomposok = ftell(file); nuclearCharges = get_one_block_from_aux_mopac_file(file, "ATOM_CORE[", &nNuclearCharges); if(!nuclearCharges) fseek(file, geomposok, SEEK_SET); t=g_malloc(BSIZE*sizeof(gchar)); for(i=0;i<5;i++) AtomCoord[i]=g_malloc(BSIZE*sizeof(gchar)); fseek(file, 0, SEEK_SET); while(!feof(file)) { if(!fgets(t,BSIZE,file))break; if(numgeometry<0) pdest = strstr( t, "ATOM_X_OPT:ANGSTROMS"); else pdest = strstr( t, "ATOM_X_UPDATED:ANGSTROMS"); if ( pdest ) { numgeom++; geomposok = ftell(file); if(numgeom == numgeometry ) { /* OK = TRUE;*/ break; } /* if(numgeometry<0) { OK = TRUE; } */ } } if(numgeom == 0) { free_one_string_table(elements, nElements); g_free(t); t = g_strdup_printf(_("Sorry\nI can not read geometry in %s file "),FileName); Message(t,_("Error"),TRUE); g_free(t); return FALSE; } init_dipole(); for(i=0;i<3;i++) Dipole.value[i] = 0; j=-1; fseek(file, geomposok, SEEK_SET); while(!feof(file) ) { if(!fgets(t,BSIZE,file))break; if(strstr( t, "[") || strstr(t,"HEAT_OF_FORM_UPDATED") || strstr( t, "####################################") ||this_is_a_backspace(t)) { break; } if(j+1>nElements)break; j++; if(listOfAtoms == NULL) listOfAtoms = g_malloc(sizeof(Atom)); else listOfAtoms = g_realloc(listOfAtoms, (j+1)*sizeof(Atom)); sscanf(t,"%s %s %s",AtomCoord[1],AtomCoord[2],AtomCoord[3]); if(jj) listOfAtoms[j].nuclearCharge = atof(nuclearCharges[j]); else listOfAtoms[j].nuclearCharge = get_atomic_number_from_symbol(listOfAtoms[j].symbol); } fclose(file); free_one_string_table(elements, nElements); free_one_string_table(nuclearCharges, nNuclearCharges); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(j+1 == 0 && listOfAtoms ) { g_free(listOfAtoms); } else { geometry->numberOfAtoms = j+1; geometry->listOfAtoms = listOfAtoms; } return TRUE; } /********************************************************************************/ static gboolean read_qchem_file_geomi(gchar *FileName, gint num, Geometry* geometry) { gchar *t; gboolean OK; gchar *AtomCoord[5]; FILE *file; guint idummy; guint i; gint j=0; gint l; guint numgeom; Atom* listOfAtoms = NULL; gchar* pdest = NULL; if ((!FileName) || (strcmp(FileName,"") == 0)) { Message(_("Sorry\n No file selected"),_("Error"),TRUE); return FALSE ; } file = FOpen(FileName, "rb"); if(file ==NULL) { Message(_("Sorry\nI can not open this file"),_("Error"),TRUE); return FALSE; } t=g_malloc(BSIZE); for(i=0;i<5;i++) AtomCoord[i]=g_malloc(BSIZE*sizeof(gchar)); numgeom =1; do { OK=FALSE; while(!feof(file)) { if(!fgets(t,BSIZE,file))break; pdest = strstr( t, "Atom X Y Z"); if(pdest) { if(!fgets(t,BSIZE,file))break; pdest = strstr( t, "----------------------------------------"); } if (pdest) { numgeom++; OK = TRUE; break; } } if(!OK && (numgeom == 1) ) { Message(_("Sorry\nI can not read geometry in this file"),_("Error"),TRUE); fclose(file); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); return FALSE; } if(!OK)break; j=-1; while(!feof(file) ) { {char* e = fgets(t,BSIZE,file);} if ( strstr( t, "----------------------------------------")) { break; } j++; if(listOfAtoms == NULL) listOfAtoms = g_malloc(sizeof(Atom)); else listOfAtoms = g_realloc(listOfAtoms, (j+1)*sizeof(Atom)); sscanf(t,"%d %s %s %s %s",&idummy,AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3]); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if(isdigit(AtomCoord[0][1]))l=1; if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); if(l==1)sprintf(t,"%c",AtomCoord[0][0]); else sprintf(t,"%c%c",AtomCoord[0][0],AtomCoord[0][1]); sprintf(listOfAtoms[j].symbol,"%s",t); sprintf(listOfAtoms[j].mmType,"%s",listOfAtoms[j].symbol); sprintf(listOfAtoms[j].pdbType,"%s",listOfAtoms[j].symbol); for(i=0;i<3;i++) listOfAtoms[j].C[i]=atof((AtomCoord[i+1]))*ANG_TO_BOHR; listOfAtoms[j].partialCharge = 0.0; listOfAtoms[j].nuclearCharge = get_atomic_number_from_symbol(listOfAtoms[j].symbol); listOfAtoms[j].variable = 0; } if(num >0 && (gint)numgeom-1 == num) break; }while(!feof(file)); fclose(file); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(j+1 == 0 && listOfAtoms ) { g_free(listOfAtoms); } else { geometry->numberOfAtoms = j+1; geometry->listOfAtoms = listOfAtoms; } return TRUE; } /*********************************************************************/ static gboolean read_xyz_file_geomi(gchar *fileName, gint geometryNumber, Geometry* geometry) { gchar* t; gboolean OK; gchar* AtomCoord[5]; FILE *file; gint i; gint j; gint l; gint numgeom = 0; gint nn = 0; Atom* listOfAtoms = NULL; file = FOpen(fileName, "rb"); if(file ==NULL) { t = g_strdup_printf(_("Sorry\nI can not open %s file "),fileName); Message(t,_("Error"),TRUE); g_free(t); return FALSE; } t = g_malloc(BSIZE*sizeof(gchar)); for(i=0;i<5;i++) AtomCoord[i] = g_malloc(BSIZE*sizeof(gchar)); numgeom =0; OK=TRUE; while(!feof(file)) { if(!fgets(t, BSIZE,file))break; str_delete_n(t); delete_last_spaces(t); delete_first_spaces(t); if(!isInteger(t))break; numgeom++; if(numgeom == geometryNumber) { nn = atoi(t); if(nn<1)break; listOfAtoms=g_malloc(nn*sizeof(Atom)); if(!fgets(t, BSIZE,file))break; /* title */ for(j=0; jnumberOfAtoms = nn; geometry->listOfAtoms = listOfAtoms; } return TRUE; } /********************************************************************************/ static gboolean save_geometry_convergence_gabedit_format(gchar *FileName) { FILE *file; gint j; gboolean OK = TRUE; file = FOpen(FileName, "w"); if(file == NULL) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not create '%s' file\n"),FileName); Message(buffer,_("Error"),TRUE); return FALSE; } fprintf(file,"[Gabedit Format]\n"); fprintf(file,"\n"); fprintf(file,"[GEOCONV]\n"); if(geometryConvergence.energy) { fprintf(file," energy\n"); for(j=0;j0) { geometryConvergence.geometries = g_malloc(geometryConvergence.numberOfGeometries*sizeof(Geometry)); for(i=0;i0) { gint i; geometryConvergence.geometries = g_malloc(geometryConvergence.numberOfGeometries*sizeof(Geometry)); for(i=0;i0) { nSF++; if(nSF != nE) { OK = FALSE; break; } k = geometryConvergence.numberOfGeometries-1; {char* e = fgets(t,BSIZE,file);} sscanf(t,"%s %s %lf", temp,temp,&geometryConvergence.maxForce[k]); {char* e = fgets(t,BSIZE,file);} sscanf(t,"%s %s %lf", temp,temp,&geometryConvergence.rmsForce[k]); {char* e = fgets(t,BSIZE,file);} sscanf(t,"%s %s %lf", temp,temp,&geometryConvergence.maxStep[k]); {char* e = fgets(t,BSIZE,file);} sscanf(t,"%s %s %lf", temp,temp,&geometryConvergence.rmsStep[k]); } } if(!OK) { freeGeometryConvergence(); sprintf(t,_("Sorry\nI can not read energy or convergence parameters from %s file "),fileName); Message(t,_("Error"),TRUE); OK = FALSE; } if(nSF0) { geometryConvergence.numberOfGeometries = nSF; geometryConvergence.numGeometry = g_realloc(geometryConvergence.numGeometry,geometryConvergence.numberOfGeometries*sizeof(gint)); geometryConvergence.energy = g_realloc(geometryConvergence.energy,geometryConvergence.numberOfGeometries*sizeof(gdouble)); geometryConvergence.maxForce = g_realloc(geometryConvergence.maxForce,geometryConvergence.numberOfGeometries*sizeof(gdouble)); geometryConvergence.rmsForce = g_realloc(geometryConvergence.rmsForce, geometryConvergence.numberOfGeometries*sizeof(gdouble)); geometryConvergence.maxStep = g_realloc(geometryConvergence.maxStep, geometryConvergence.numberOfGeometries*sizeof(gdouble)); geometryConvergence.rmsStep = g_realloc(geometryConvergence.rmsStep, geometryConvergence.numberOfGeometries*sizeof(gdouble)); } else { freeGeometryConvergence(); sprintf(t,_("Sorry\nI can not read energy or convergence parameters from %s file "),fileName); Message(t,_("Error"),TRUE); OK = FALSE; } } fclose(file); g_free(t); g_free(temp); if(geometryConvergence.numberOfGeometries>0) { gint i; geometryConvergence.geometries = g_malloc(geometryConvergence.numberOfGeometries*sizeof(Geometry)); for(i=0;i0) { geometryConvergence.numberOfGeometries = nSF; geometryConvergence.numGeometry = g_realloc(geometryConvergence.numGeometry,geometryConvergence.numberOfGeometries*sizeof(gint)); geometryConvergence.energy = g_realloc(geometryConvergence.energy,geometryConvergence.numberOfGeometries*sizeof(gdouble)); geometryConvergence.rmsStep = g_realloc(geometryConvergence.rmsStep, geometryConvergence.numberOfGeometries*sizeof(gdouble)); } else { freeGeometryConvergence(); sprintf(t,_("Sorry\nI can not read energy or convergence parameters from %s file "),fileName); Message(t,_("Error"),TRUE); OK = FALSE; } } fclose(file); g_free(t); g_free(temp); g_free(tmp); if(geometryConvergence.numberOfGeometries>0) { gint i; geometryConvergence.geometries = g_malloc(geometryConvergence.numberOfGeometries*sizeof(Geometry)); for(i=0;i0) { pdest = strstr( t,":"); if(pdest) { pdest++; nSF++; k = geometryConvergence.numberOfGeometries-1; sscanf(pdest,"%lf",&geometryConvergence.maxStep[k]); } } } if(!OK) { freeGeometryConvergence(); sprintf(t,_("Sorry\nI can not read energy or convergence parameters from %s file "),fileName); Message(t,_("Error"),TRUE); OK = FALSE; } if(nSF0) { geometryConvergence.numberOfGeometries = nSF; geometryConvergence.numGeometry = g_realloc(geometryConvergence.numGeometry,geometryConvergence.numberOfGeometries*sizeof(gint)); geometryConvergence.energy = g_realloc(geometryConvergence.energy,geometryConvergence.numberOfGeometries*sizeof(gdouble)); geometryConvergence.maxStep = g_realloc(geometryConvergence.maxStep, geometryConvergence.numberOfGeometries*sizeof(gdouble)); } else { freeGeometryConvergence(); sprintf(t,_("Sorry\nI can not read energy or convergence parameters from %s file "),fileName); Message(t,_("Error"),TRUE); OK = FALSE; } } fclose(file); g_free(t); g_free(temp); if(geometryConvergence.numberOfGeometries>0) { gint i; geometryConvergence.geometries = g_malloc(geometryConvergence.numberOfGeometries*sizeof(Geometry)); for(i=0;i0) { gint i; geometryConvergence.geometries = g_malloc(geometryConvergence.numberOfGeometries*sizeof(Geometry)); for(i=0;i0) { geometryConvergence.numberOfGeometries = nSF; geometryConvergence.numGeometry = g_realloc(geometryConvergence.numGeometry,geometryConvergence.numberOfGeometries*sizeof(gint)); geometryConvergence.energy = g_realloc(geometryConvergence.energy,geometryConvergence.numberOfGeometries*sizeof(gdouble)); geometryConvergence.maxForce = g_realloc(geometryConvergence.maxForce, geometryConvergence.numberOfGeometries*sizeof(gdouble)); } else { freeGeometryConvergence(); sprintf(t,_("Sorry\nI can not read energy or convergence parameters from %s file "),fileName); Message(t,_("Error"),TRUE); OK = FALSE; } } fclose(file); g_free(t); g_free(temp); g_free(tmp); if(geometryConvergence.numberOfGeometries>0) { gint i; geometryConvergence.geometries = g_malloc(geometryConvergence.numberOfGeometries*sizeof(Geometry)); for(i=0;i0) { if(!fgets(t, BSIZE,file)) break; /* title */ str_delete_n(t); delete_last_spaces(t); delete_first_spaces(t); if(comments==NULL) comments = g_malloc(sizeof(gchar*)); else comments = g_realloc(comments, (nGeom+1)*sizeof(gchar*)); comments[nGeom] = g_strdup(t); for(i=0;i0) { geometryConvergence.numberOfGeometries = nGeom; geometryConvergence.typeOfFile = GABEDIT_TYPEFILE_XYZ; geometryConvergence.fileName = g_strdup(fileName); geometryConvergence.numGeometry = g_malloc(nGeom*sizeof(gint)); geometryConvergence.comments = comments; for(i=0;i0) { gint i; geometryConvergence.geometries = g_malloc(geometryConvergence.numberOfGeometries*sizeof(Geometry)); for(i=0;i Atom Type PDB Style*/ /* 1 -> Atom Symbol*/ /* 2 -> Atom Type Amber*/ /* 3 -> Atom Charge*/ /* 4 -> x*/ /* 5 -> y*/ /* 6 -> z*/ sscanf(t,"%s %s %s %s %s %s %s %s %s %s",dump,dump,listFields[0],listFields[1],listFields[2],dump,listFields[3],listFields[4],listFields[5],listFields[6]); } for(i=0;i<6;i++) { delete_last_spaces(listFields[i]); delete_first_spaces(listFields[i]); } return TRUE; } /********************************************************************************/ gboolean read_one_hin_file(gchar* FileName, Geometry* geometry) { gchar *t; gboolean OK; FILE *fd; guint taille=BSIZE; guint i; gint j; gint k; gchar *listFields[8]; int natoms = 0; int nresidues = 0; Atom* listOfAtoms = NULL; if ((!FileName) || (strcmp(FileName,"") == 0)) return FALSE ; fd = FOpen(FileName, "rb"); if(fd==NULL) return FALSE ; read_hin_numbers_of_atoms(fd,&natoms, &nresidues); if(natoms<1) return FALSE ; OK=TRUE; for(i=0;i<8;i++) listFields[i]=g_malloc(taille*sizeof(gchar)); for(i=0;i<8;i++) sprintf(listFields[i]," "); t=g_malloc(taille*sizeof(gchar)); init_dipole(); j=0; listOfAtoms = g_malloc(natoms*sizeof(Atom)); fseek(fd, 0L, SEEK_SET); j = 0; i = -1; /* number residu */ while(!feof(fd)) { if(!read_atom_hin_file(fd,listFields))continue; if(strcmp(listFields[0],"Unknown")==0) { i++; continue; } /* 0 -> Atom Type PDB Style*/ /* 1 -> Atom Symbol*/ /* 2 -> Atom Type Amber*/ /* 3 -> Atom Charge*/ /* 4 -> x*/ /* 5 -> y*/ /* 6 -> z*/ /* printf("%s %s %s %s %s %s %s \n",listFields[0],listFields[1],listFields[2],listFields[3],listFields[4],listFields[5],listFields[6]);*/ sprintf(listOfAtoms[j].symbol,"%s",listFields[1]); sprintf(listOfAtoms[j].mmType,"%s",listFields[2]); sprintf(listOfAtoms[j].pdbType,"%s",listFields[0]); for(k=0;k<3;k++) listOfAtoms[j].C[k]=atof(ang_to_bohr(listFields[k+4])); listOfAtoms[j].partialCharge = atof(listFields[3]); listOfAtoms[j].nuclearCharge = get_atomic_number_from_symbol(listOfAtoms[j].symbol); listOfAtoms[j].variable = 0; j++; if(j>=natoms)break; } fclose(fd); OK = TRUE; if(natoms!=j) OK = FALSE; if(OK) { geometry->numberOfAtoms = natoms; geometry->listOfAtoms = listOfAtoms; } else { if(listOfAtoms) g_free(listOfAtoms); } g_free(t); for(i=0;i<8;i++) g_free(listFields[i]); return OK; } /********************************************************************************/ static void read_hin_files(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; GSList* lists = NULL; GSList* cur = NULL; if(response_id != GTK_RESPONSE_OK) return; lists = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(SelecFile)); stopAnimation(NULL, NULL); freeGeometryConvergence(); cur = lists; geometryConvergence.numberOfGeometries = 0; while(cur != NULL) { geometryConvergence.numberOfGeometries++; cur = cur->next; } if(geometryConvergence.numberOfGeometries>0) { gint k = 0; geometryConvergence.geometries = g_malloc(geometryConvergence.numberOfGeometries*sizeof(Geometry)); geometryConvergence.comments = g_malloc(geometryConvergence.numberOfGeometries*sizeof(gchar*)); cur = lists; while(cur != NULL) { FileName = (gchar*)(cur->data); if(read_one_hin_file(FileName, &geometryConvergence.geometries[k])) { geometryConvergence.comments[k] = g_strdup(get_name_file(FileName)); k++; } cur = cur->next; } if(k<=0) { freeGeometryConvergence(); } else if(k!=geometryConvergence.numberOfGeometries) { geometryConvergence.numberOfGeometries = k; geometryConvergence.geometries = g_realloc(geometryConvergence.geometries, geometryConvergence.numberOfGeometries*sizeof(Geometry)); } if(k>0) { gint i = 0; geometryConvergence.typeOfFile = GABEDIT_TYPEFILE_XYZ; geometryConvergence.fileName = g_strdup("MultipleFile"); geometryConvergence.numGeometry = g_malloc(k*sizeof(gint)); for(i=0;i= geometryConvergence.numberOfGeometries) return FALSE; if(GeomOrb) { free_atomic_orbitals(); for(j=0;jwindow == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); row = atoi(gtk_tree_path_to_string(path)); gtk_tree_path_free(path); } } rowSelected = row; if(!play) stopAnimation(NULL, NULL); if(row>=0) set_geometry(rowSelected); if (event->type == GDK_BUTTON_PRESS && ((GdkEventButton *) event)->button == 3) { GdkEventButton *bevent = (GdkEventButton *) event; GtkUIManager *manager = GTK_UI_MANAGER(user_data); show_menu_popup(manager, bevent->button, bevent->time); } } /**********************************************************************************/ static void rafreshList() { gint i; gint k; GtkTreeIter iter; GtkTreeModel *model = NULL; GtkTreeStore *store = NULL; gchar *texts[7]; gboolean visible[7] = { TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE}; gchar* titles[]={"Energy","MAX step","RMS step", "MAX Force","RMS Force","Number of Geometry","Comments"}; GtkCellRenderer *renderer; GtkTreeViewColumn *column; model = gtk_tree_view_get_model(treeView); store = GTK_TREE_STORE (model); gtk_tree_store_clear(store); model = GTK_TREE_MODEL (store); if(geometryConvergence.numberOfGeometries>0) { if(!geometryConvergence.energy) { visible[0] = FALSE;} if(!geometryConvergence.maxStep) { visible[1] = FALSE;} if(!geometryConvergence.rmsStep) { visible[2] = FALSE;} if(!geometryConvergence.maxForce) { visible[3] = FALSE;} if(!geometryConvergence.rmsForce) { visible[4] = FALSE;} if(!geometryConvergence.numGeometry) { visible[5] = FALSE;} if(!geometryConvergence.comments) { visible[6] = FALSE;} } else { for(i=0;i<7;i++) visible[i] = FALSE; } if(!visible[0]) visible[5] = TRUE; else visible[5] = FALSE; do { column = gtk_tree_view_get_column(treeView, 0); if(column) gtk_tree_view_remove_column(treeView, column); }while(column != NULL); for(k=0;k<7;k++) { if(!visible[k]) continue; column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, titles[k]); gtk_tree_view_column_set_reorderable(column, TRUE); gtk_tree_view_column_set_resizable(column,TRUE); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", k, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (treeView), column); } for(i=0;i0) { GtkTreePath *path; rowSelected = 0; path = gtk_tree_path_new_from_string ("0"); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeView)), path); gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW (treeView), path, NULL, FALSE,0.5,0.5); gtk_tree_path_free(path); set_geometry(rowSelected); } reset_parameters(NULL,NULL); } /*****************************************************************************/ static gchar* get_format_image_from_option() { if(strcmp(formatFilm,"BMP")==0) return "bmp"; if(strcmp(formatFilm,"PPM")==0) return "ppm"; if(strcmp(formatFilm,"PNG")==0) return "png"; if(strcmp(formatFilm,"JPEG")==0) return "jpg"; if(strcmp(formatFilm,"PNG transparent")==0) return "png"; if(strcmp(formatFilm,"Povray")==0) return "pov"; return "UNK"; } /********************************************************************************/ static void filmSelected(GtkWidget *widget) { if(GTK_IS_WIDGET(buttonCheckFilm)&& GTK_TOGGLE_BUTTON (buttonCheckFilm)->active) { createFilm = TRUE; if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, TRUE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, TRUE); } else { createFilm = FALSE; if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); } } /********************************************************************************/ static void showMessageEnd() { gchar* format =get_format_image_from_option(); gchar* message = messageAnimatedImage(format); gchar* t = g_strdup_printf( _("\nA series of gab*.%s files was created in \"%s\" directeory.\n\n\n%s") , format, get_last_directory(),message); GtkWidget* winDlg = Message(t,_("Info"),TRUE); g_free(message); gtk_window_set_modal (GTK_WINDOW (winDlg), TRUE); g_free(t); } /********************************************************************************/ static void unActivateFilm() { createFilm = FALSE; numFileFilm = 0; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCheckFilm), FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); } /********************************************************************************************************/ static void set_format_film(GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } if(!data) return; sprintf(formatFilm ,"%s",(gchar*)data); } /********************************************************************************************************/ static GtkWidget *create_list_of_formats() { GtkTreeIter iter; GtkListStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; gint i; gint k; gchar* options[] = {"BMP","PPM", "JPEG", "PNG", "PNG transparent", "Povray"}; guint numberOfElements = G_N_ELEMENTS (options); k = 0; store = gtk_list_store_new (1,G_TYPE_STRING); for(i=0;i=geometryConvergence.numberOfGeometries) { m--; step = -1; continue; } if(m<0) { m++; step = +1; continue; } if(m==0 && step<0) { if(numFileFilm>0) showMessageEnd(); unActivateFilm(); } rowSelected = m; t = g_strdup_printf("%d",m); path = gtk_tree_path_new_from_string (t); g_free(t); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeView)), path); gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW (treeView), path, NULL, FALSE,0.5,0.5); gtk_tree_path_free(path); set_geometry(rowSelected); createImagesFile(); Waiting(geometryConvergence.velocity); } if(numFileFilm>0) showMessageEnd(); unActivateFilm(); if(GTK_IS_WIDGET(buttonCheckFilm)) gtk_widget_set_sensitive(buttonCheckFilm, TRUE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(treeView))gtk_widget_set_sensitive(GTK_WIDGET(treeView), TRUE); if(GTK_IS_WIDGET(WinDlg)) { GtkWidget* handelbox = g_object_get_data(G_OBJECT (WinDlg), "HandelBox"); if(GTK_IS_WIDGET(handelbox)) gtk_widget_set_sensitive(handelbox, TRUE); } stopAnimation(NULL, NULL); } /********************************************************************************************/ static void help_supported_format() { gchar temp[BSIZE]; GtkWidget* win; sprintf(temp, _( " You can read more geometries from :\n" " * a Gabedit input file.\n" " * a Dalton output file.\n" " * a Gamess output file.\n" " * a Gamess IRC file.\n" " * a Gaussian output file.\n" " * a Molpro log file.\n" " * a Mopac aux file.\n" " * a MPQC output file.\n" " * a FireFly output file.\n" " * a Q-Chem output file.\n" " * a Molden input file.\n" " * a XYZ file.\n" " * multiple Hyperchem files.\n" ) ); win = Message(temp," Info ",FALSE); gtk_window_set_modal (GTK_WINDOW (win), TRUE); } /********************************************************************************/ static void set_entry_inputGaussDir(GtkWidget* dirSelector, gint response_id) { gchar* dirname = NULL; GtkWidget *entry; if(response_id != GTK_RESPONSE_OK) return; dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); entry = (GtkWidget*)(g_object_get_data(G_OBJECT(dirSelector),"EntryFile")); gtk_entry_set_text(GTK_ENTRY(entry),dirname); if(inputGaussDirectory) g_free(inputGaussDirectory); inputGaussDirectory = g_strdup(dirname); } /********************************************************************************/ static void set_entry_inputGaussDir_selection(GtkWidget* entry) { GtkWidget *dirSelector; dirSelector = selctionOfDir(set_entry_inputGaussDir, "Select folder for the input Gaussian files", GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); g_signal_connect(G_OBJECT(dirSelector),"delete_event", (GCallback)gtk_widget_destroy,NULL); g_object_set_data(G_OBJECT (dirSelector), "EntryFile", entry); g_signal_connect (dirSelector, "response", G_CALLBACK (set_entry_inputGaussDir), GTK_OBJECT(dirSelector)); g_signal_connect (dirSelector, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(dirSelector)); gtk_widget_show(dirSelector); } /********************************************************************************/ static GtkWidget* add_inputGauss_entrys(GtkWidget *Wins,GtkWidget *vbox,gboolean expand) { GtkWidget *button; GtkWidget* entry; GtkWidget* sep; GtkWidget *table = gtk_table_new(8,4,FALSE); GtkWidget* comboSpinMultiplicity = NULL; GtkWidget* comboCharge = NULL; gint i; totalCharge = 0; spinMultiplicity=1; if(!inputGaussDirectory) inputGaussDirectory = g_strdup_printf("%s",g_get_home_dir()); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); i = 0; add_label_table(table,_(" Directory "),i,0); add_label_table(table,":",i,1); entry = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),inputGaussDirectory); gtk_editable_set_editable((GtkEditable*)entry,FALSE); gtk_widget_set_sensitive(entry, FALSE); button = create_button_pixmap(Wins,open_xpm,NULL); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(GTK_OBJECT (button), "clicked", G_CALLBACK(set_entry_inputGaussDir_selection), GTK_OBJECT(entry)); add_widget_table(table,button,i,3); i = 1; comboCharge = addChargeToTable(table, i); i = 2; comboSpinMultiplicity = addSpinToTable(table, i); i = 3; sep = gtk_hseparator_new ();; gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); if(GTK_IS_COMBO_BOX(comboCharge)) g_object_set_data(G_OBJECT (GTK_BIN(comboCharge)->child), "ComboSpinMultiplicity", comboSpinMultiplicity); setComboCharge(comboCharge); setComboSpinMultiplicity(comboSpinMultiplicity); g_signal_connect(G_OBJECT(GTK_BIN(comboCharge)->child),"changed", G_CALLBACK(changedEntryCharge),NULL); i = 4; add_label_table(table,_(" Keywords "),i,0); add_label_table(table,":",i,1); entry = gtk_entry_new (); g_object_set_data(G_OBJECT(Wins), "EntryKeywords", entry); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,2,2+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),"B3LYP/6-31G* Opt"); gtk_editable_set_editable((GtkEditable*)entry,TRUE); gtk_widget_set_sensitive(entry, TRUE); i = 5; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); i = 6; buttonChkgauss = gtk_check_button_new_with_label (_("check file")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonChkgauss), FALSE); gtk_table_attach(GTK_TABLE(table),buttonChkgauss,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); i = 7; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_widget_show_all(table); return entry; } /********************************************************************************************************/ static void add_cancel_ok_button(GtkWidget *Win,GtkWidget *vbox,GtkWidget *entry, GCallback myFunc) { GtkWidget *hbox; GtkWidget *button; /* buttons box */ hbox = create_hbox_false(vbox); gtk_widget_realize(Win); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)myFunc,GTK_OBJECT(Win)); if(entry) g_signal_connect_swapped(G_OBJECT (entry), "activate", (GCallback) gtk_button_clicked, GTK_OBJECT (button)); gtk_widget_show_all(vbox); } /********************************************************************************/ static void create_gaussian_file_dlg(gboolean oneFile) { GtkWidget *Win; GtkWidget *frame; GtkWidget *vboxall; GtkWidget* vbox; GtkWidget* entryKeywords; if(geometryConvergence.numberOfGeometries<1) { gchar* t = g_strdup_printf(_("Sorry\n You should read the geometries befor")); Message(t,_("Error"),TRUE); return; } /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),"Create multiple input files for Gaussian"); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 2); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Input Gaussian"); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(Win); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 2); gtk_box_pack_start(GTK_BOX(vboxall), frame,TRUE,TRUE,0); gtk_widget_show (frame); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); gtk_widget_realize(Win); entryKeywords = add_inputGauss_entrys(Win,vbox,TRUE); if(oneFile) add_cancel_ok_button(Win,vbox,entryKeywords,(GCallback)print_gaussian_geometries_link); else add_cancel_ok_button(Win,vbox,entryKeywords,(GCallback)print_gaussian_geometries); /* Show all */ gtk_widget_show_all (Win); } /***************************************************************************/ static void help_animated_file() { GtkWidget* win; gchar* temp = NULL; temp = g_strdup( _( " For create an animated file :\n" " ============================\n" " 1) Read geometries from a Dalton, Gaussian, Molpro, Gabedit, Molden, MPQC or from XYZ file.\n" " 2) Select \"create a series of BMP (or PPM or POV) images\" button.\n" " You can select your favorite directory by clicking to \"Directory\" button.\n" " 3) Click to Play button.\n" " 4) After on cycle Gabedit create a series of BMP(gab*.bmp) or PPM (gab*.ppm) or POV(gab*.pov) files.\n" " From these files, you can create a gif or a png animated file using convert software.\n" " with \"convert -delay 10 -loop 1000 gab*.bmp imageAnim.gif\" command you can create a gif animated file.\n" " with \"convert -delay 10 -loop 1000 gab*.bmp imageAnim.mng\" command you can create a png animated file.\n\n" " For gab*.pov files :\n" " You must initially create files gab*.bmp using gab*.pov files.\n" " Then you can create the animated file using gab*.bmp file.\n\n" " You can use the xPovAnim script (from utils/povray directory) for create the gif animated file from gab*.pov files.\n\n" " convert is a free software. You can download this(for any system) from http://www.imagemagick.org\n" " povray is a free software. You can download this(for any system) from http://www.povray.org\n\n" ) ); win = Message(temp,_("Info"),FALSE); gtk_window_set_modal (GTK_WINDOW (win), TRUE); g_free(temp); } /*********************************************************************************************************************/ static void activate_action (GtkAction *action) { const gchar *name = gtk_action_get_name (action); /* const gchar *typename = G_OBJECT_TYPE_NAME (action);*/ if(!strcmp(name, "File")) { GtkUIManager *manager = g_object_get_data(G_OBJECT(action), "Manager"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/SaveGabedit"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/SaveMobcal"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/DeleteGeometry"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/CreateGaussInput"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/CreateGaussInputLink"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/CreateGr"); } else if(!strcmp(name, "ReadAuto")) read_file_dlg(); else if(!strcmp(name, "ReadGabedit")) read_gabedit_file_dlg(); else if(!strcmp(name, "ReadDalton")) read_dalton_file_dlg(); else if(!strcmp(name, "ReadGamess")) read_gamess_file_dlg(); else if(!strcmp(name, "ReadGamessIRC")) read_gamess_irc_file_dlg(); else if(!strcmp(name, "ReadFireFlyIRC")) read_gamess_irc_file_dlg(); else if(!strcmp(name, "ReadGaussian")) read_gaussian_file_dlg(); else if(!strcmp(name, "ReadMolpro")) read_molpro_file_dlg(); else if(!strcmp(name, "ReadMopac")) read_mopac_file_dlg(); else if(!strcmp(name, "ReadMPQC")) read_mpqc_file_dlg(); else if(!strcmp(name, "ReadFireFly")) read_gamess_file_dlg(); else if(!strcmp(name, "ReadQChem")) read_qchem_file_dlg(); else if(!strcmp(name, "ReadMolden")) read_molden_file_dlg(); else if(!strcmp(name, "ReadXYZ")) read_xyz_file_dlg(); else if(!strcmp(name, "ReadHIN")) read_hin_multiple_files_dlg(); else if(!strcmp(name, "SaveGabedit")) save_gabedit_file_dlg(); else if(!strcmp(name, "SaveMobcal")) save_mobcal_file_dlg(); else if(!strcmp(name, "DeleteGeometry")) delete_one_geometry(); else if(!strcmp(name, "Close")) destroyDlg(NULL); else if(!strcmp(name, "HelpSupportedFormat")) help_supported_format(); else if(!strcmp(name, "HelpAnimation")) help_animated_file(); else if(!strcmp(name, "CreateGaussInput")) create_gaussian_file_dlg(FALSE); else if(!strcmp(name, "CreateGaussInputLink")) create_gaussian_file_dlg(TRUE); else if(!strcmp(name, "CreateGr")) create_gr_dlg(TRUE); } /*--------------------------------------------------------------------*/ static GtkActionEntry gtkActionEntries[] = { {"File", NULL, N_("_File"), NULL, NULL, G_CALLBACK (activate_action)}, {"Read", NULL, N_("_Read")}, {"ReadAuto", NULL, N_("Read a file(Auto)"), NULL, "Read a file", G_CALLBACK (activate_action) }, {"ReadGabedit", GABEDIT_STOCK_GABEDIT, N_("Read a G_abedit file"), NULL, "Read a Gabedit file", G_CALLBACK (activate_action) }, {"ReadDalton", GABEDIT_STOCK_DALTON, N_("Read a _Dalton output file"), NULL, "Read a Dalton output file", G_CALLBACK (activate_action) }, {"ReadGamess", GABEDIT_STOCK_GAMESS, N_("Read a _Gamess output file"), NULL, "Read a Gamess output file", G_CALLBACK (activate_action) }, {"ReadGamessIRC", GABEDIT_STOCK_GAMESS, N_("Read a _Gamess IRC file"), NULL, "Read a Gamess IRC file", G_CALLBACK (activate_action) }, {"ReadFireFlyIRC", GABEDIT_STOCK_FIREFLY, N_("Read a _FireFly IRC file"), NULL, "Read a FireFly IRC file", G_CALLBACK (activate_action) }, {"ReadGaussian", GABEDIT_STOCK_GAUSSIAN, N_("Read a _Gaussian output file"), NULL, "Read a Gaussian output file", G_CALLBACK (activate_action) }, {"ReadMolpro", GABEDIT_STOCK_MOLPRO, N_("Read a Mol_pro output file"), NULL, "Read Molpro output file", G_CALLBACK (activate_action) }, {"ReadMopac", GABEDIT_STOCK_MOPAC, N_("Read a _Mopac aux file"), NULL, "Read a Mopac aux file", G_CALLBACK (activate_action) }, {"ReadMPQC", GABEDIT_STOCK_MPQC, N_("Read a MP_QC output file"), NULL, "Read a MPQC output file", G_CALLBACK (activate_action) }, {"ReadFireFly", GABEDIT_STOCK_FIREFLY, N_("Read a _FireFly output file"), NULL, "Read a FireFly output file", G_CALLBACK (activate_action) }, {"ReadQChem", GABEDIT_STOCK_QCHEM, N_("Read a Q-_Chem output file"), NULL, "Read a Q-Chem output file", G_CALLBACK (activate_action) }, {"ReadMolden", GABEDIT_STOCK_MOLDEN, N_("Read a Mol_den output file"), NULL, "Read a Molden file", G_CALLBACK (activate_action) }, {"CreateGaussInput", GABEDIT_STOCK_GAUSSIAN, N_("_Create multiple input file for Gaussian"), NULL, "Save", G_CALLBACK (activate_action) }, {"CreateGaussInputLink", GABEDIT_STOCK_GAUSSIAN, N_("_Create single input file for Gaussian with more geometries"), NULL, "Save", G_CALLBACK (activate_action) }, {"CreateGr", GABEDIT_STOCK_GAUSSIAN, N_("_Compute pair radial distribution"), NULL, "gr", G_CALLBACK (activate_action) }, {"ReadXYZ", NULL, N_("Read a _xyz file"), NULL, "Read a xyz file", G_CALLBACK (activate_action) }, {"ReadHIN", NULL, N_("Read a _Hyperchem files"), NULL, "Read a hyperchem files", G_CALLBACK (activate_action) }, {"SaveGabedit", GABEDIT_STOCK_SAVE, N_("_Save in Gabedit format"), NULL, "Save", G_CALLBACK (activate_action) }, {"SaveMobcal", GABEDIT_STOCK_SAVE, N_("_Save in Mobcal format"), NULL, "Save in mobcal format", G_CALLBACK (activate_action) }, {"DeleteGeometry", GABEDIT_STOCK_CUT, N_("_Delete selected geometry"), NULL, "Delete selected geometry", G_CALLBACK (activate_action) }, {"Close", GABEDIT_STOCK_CLOSE, N_("_Close"), NULL, "Close", G_CALLBACK (activate_action) }, {"Help", NULL, N_("_Help")}, {"HelpSupportedFormat", NULL, N_("_Supported format..."), NULL, "Supported format...", G_CALLBACK (activate_action) }, {"HelpAnimation", NULL, N_("Creation of an _animated file..."), NULL, "Creation of an animated file...", G_CALLBACK (activate_action) }, }; static guint numberOfGtkActionEntries = G_N_ELEMENTS (gtkActionEntries); /********************************************************************************/ /* XML description of the menus for the test app. The parser understands * a subset of the Bonobo UI XML format, and uses GMarkup for parsing */ static const gchar *uiMenuInfo = " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*******************************************************************************************************************************/ static void add_widget (GtkUIManager *manager, GtkWidget *widget, GtkContainer *container) { GtkWidget *handlebox; handlebox =gtk_handle_box_new (); g_object_ref (handlebox); gtk_handle_box_set_handle_position (GTK_HANDLE_BOX(handlebox),GTK_POS_LEFT); /* GTK_SHADOW_NONE, GTK_SHADOW_IN, GTK_SHADOW_OUT, GTK_SHADOW_ETCHED_IN, GTK_SHADOW_ETCHED_OUT */ gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(handlebox),GTK_SHADOW_OUT); gtk_box_pack_start (GTK_BOX (container), handlebox, TRUE, TRUE, 0); gtk_widget_show (widget); gtk_container_add (GTK_CONTAINER (handlebox), widget); gtk_widget_show (handlebox); } /*******************************************************************************************************************************/ static GtkUIManager *create_menu(GtkWidget* box) { GtkActionGroup *actionGroup = NULL; GtkUIManager *manager = NULL; GError *error = NULL; manager = gtk_ui_manager_new (); g_signal_connect_swapped (PrincipalWindow, "destroy", G_CALLBACK (g_object_unref), manager); actionGroup = gtk_action_group_new ("GabeditAnimationGeomConvActions"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntries, numberOfGtkActionEntries, NULL); gtk_ui_manager_insert_action_group (manager, actionGroup, 0); g_signal_connect (manager, "add_widget", G_CALLBACK (add_widget), box); gtk_window_add_accel_group (GTK_WINDOW (PrincipalWindow), gtk_ui_manager_get_accel_group (manager)); if (!gtk_ui_manager_add_ui_from_string (manager, uiMenuInfo, -1, &error)) { g_message (_("building menus failed: %s"), error->message); g_error_free (error); } if(GTK_IS_UI_MANAGER(manager)) { GtkAction *action = NULL; action = gtk_ui_manager_get_action(manager, "/MenuBar/File"); if(G_IS_OBJECT(action)) g_object_set_data(G_OBJECT(action), "Manager", manager); } return manager; } /********************************************************************************/ void geometryConvergenceDlg() { GtkWidget *Win; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *parentWindow = PrincipalWindow; GtkUIManager *manager = NULL; if(WinDlg) return; initGeometryConvergence(); Win= gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow)); gtk_window_set_default_size (GTK_WINDOW(Win),-1,(gint)(ScreenHeight*0.69)); gtk_window_set_title(GTK_WINDOW(Win),"Multiple Geometries"); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); WinDlg = Win; add_child(PrincipalWindow,Win,destroyAnimGeomConvDlg,"Mult. Geom."); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (Win), vbox); hbox = create_hbox_false(vbox); manager = create_menu(hbox); hbox = create_hbox_false(vbox); gtk_widget_realize(Win); treeView = addList(hbox, manager); addEntrysButtons(vbox); gtk_widget_show_all(vbox); gtk_widget_show_now(Win); fit_windows_position(PrincipalWindow, Win); rafreshList(); stopAnimation(NULL, NULL); } GabeditSrc250/src/Display/GridAdfOrbitals.h0000644000175100017510000000031113130665225021033 0ustar alloucheallouche #ifndef __GABEDIT_GRIDADFORBITALS_H__ #define __GABEDIT_GRIDADFORBITALS_H__ void load_adf_file_orbitals(GabeditFileChooser *SelecFile, gint response_id); #endif /* __GABEDIT_GRIDADFORBITALS_H__ */ GabeditSrc250/src/Display/AnimationGrids.h0000644000175100017510000000365613130665225020762 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permision is hereby granted, free of charge, to any person obtaining a copy of this software and asociated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permision notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_ANIMATIONGRIDS_H__ #define __GABEDIT_ANIMATIONGRIDS_H__ typedef struct _AtomGrid { gchar symbol[5]; gdouble C[3]; gchar mmType[5]; gchar pdbType[5]; gdouble partialCharge; gboolean variable; gdouble nuclearCharge; }AtomGrid; typedef struct _GeomGrid { gint numberOfAtoms; AtomGrid* listOfAtoms; }GeomGrid; typedef struct _AnimationGrids { gdouble velocity; gdouble isovalue; GabEditTypeFile typeOfFile; gint numberOfFiles; GeomGrid* geometries; Grid** grids; gchar** fileNames; }AnimationGrids; AnimationGrids animationGrids; void initAnimationGrids(); void animationGridsDlg(); #endif /* __GABEDIT_ANIMATIONGRIDS_H__ */ GabeditSrc250/src/Display/ContoursPov.h0000644000175100017510000000040113130665225020334 0ustar alloucheallouche #ifndef __GABEDIT_CONTOURSPOV_H__ #define __GABEDIT_CONTOURSPOV_H__ gint addContoursPovRay(Grid* plansgrid,gint Ncontours,gdouble* values,gint i0,gint i1,gint numplan,gdouble gap); void deleteContoursPovRayFile(); #endif /* __GABEDIT_CONTOURSPOV_H__ */ GabeditSrc250/src/Display/OrbitalsNWChem.h0000644000175100017510000000270213130665225020662 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_ORBITALSNWCHEM_H__ #define __GABEDIT_ORBITALSNWCHEM_H__ void read_nwchem_orbitals(gchar* FileName); #endif /* __GABEDIT_ORBITALSNWCHEM_H__ */ GabeditSrc250/src/Display/IsoSurface.c0000644000175100017510000003205013130665225020076 0ustar alloucheallouche/* IsoSurface.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "tables.h" #include "StatusOrb.h" #include "../Utils/Utils.h" #define PRECISION 1e-10 /******************************************************************************************************************************/ gdouble Norme(Vertex *Vect) { return sqrt( (Vect->C[0])* (Vect->C[0]) + (Vect->C[1])* (Vect->C[1]) + (Vect->C[2])* (Vect->C[2]) ); } /******************************************************************************************************************************/ void Normalize(Vertex *Vect) { gdouble inv = Norme(Vect); if(inv>0) inv = 1.0/inv; Vect->C[0] = - Vect->C[0] *inv; Vect->C[1] = - Vect->C[1] *inv; Vect->C[2] = - Vect->C[2] *inv; } /******************************************************************************************************************************/ gdouble InterpVal(gdouble val1,gdouble val2,gdouble valc1,gdouble valc2,gdouble isolevel) { gdouble factor; if(fabs(isolevel-val1)C[0] = InterpVal(grid->point[i+1][j][k].C[3],grid->point[i][j][k].C[3], grid->point[i+2][j][k].C[3]-grid->point[i][j][k].C[3], grid->point[i+1][j][k].C[3]-grid->point[i-1][j][k].C[3],isolevel); Normal->C[1] = InterpVal(grid->point[i][j][k].C[3],grid->point[i+1][j][k].C[3], grid->point[i][j+1][k].C[3],grid->point[i+1][j+1][k].C[3],isolevel) - InterpVal(grid->point[i][j][k].C[3],grid->point[i+1][j][k].C[3], grid->point[i][j-1][k].C[3],grid->point[i+1][j-1][k].C[3],isolevel); Normal->C[2] = InterpVal(grid->point[i][j][k].C[3],grid->point[i+1][j][k].C[3], grid->point[i][j][k+1].C[3],grid->point[i+1][j][k+1].C[3],isolevel) - InterpVal(grid->point[i][j][k].C[3],grid->point[i+1][j][k].C[3], grid->point[i][j][k-1].C[3],grid->point[i+1][j][k-1].C[3],isolevel); } /******************************************************************************************************************************/ void NormalY(gint i,gint j,gint k,gdouble isolevel,Grid *grid,Vertex *Normal) { Normal->C[1] = InterpVal(grid->point[i][j+1][k].C[3],grid->point[i][j][k].C[3], grid->point[i][j+2][k].C[3]-grid->point[i][j][k].C[3], grid->point[i][j+1][k].C[3]-grid->point[i][j-1][k].C[3],isolevel); Normal->C[0] = InterpVal(grid->point[i][j][k].C[3],grid->point[i][j+1][k].C[3], grid->point[i+1][j][k].C[3],grid->point[i+1][j+1][k].C[3],isolevel) - InterpVal(grid->point[i][j][k].C[3],grid->point[i][j+1][k].C[3], grid->point[i-1][j][k].C[3],grid->point[i-1][j+1][k].C[3],isolevel); Normal->C[2] = InterpVal(grid->point[i][j][k].C[3],grid->point[i][j+1][k].C[3], grid->point[i][j][k+1].C[3],grid->point[i][j+1][k+1].C[3],isolevel) - InterpVal(grid->point[i][j][k].C[3],grid->point[i][j+1][k].C[3], grid->point[i][j][k-1].C[3],grid->point[i][j+1][k-1].C[3],isolevel); } /******************************************************************************************************************************/ void NormalZ(gint i,gint j,gint k,gdouble isolevel,Grid *grid,Vertex *Normal) { Normal->C[2] = InterpVal(grid->point[i][j][k+1].C[3],grid->point[i][j][k].C[3], grid->point[i][j][k+2].C[3]-grid->point[i][j][k].C[3], grid->point[i][j][k+1].C[3]-grid->point[i][j][k-1].C[3],isolevel); Normal->C[1] = InterpVal(grid->point[i][j][k].C[3],grid->point[i][j][k+1].C[3], grid->point[i][j+1][k].C[3],grid->point[i][j+1][k+1].C[3],isolevel) - InterpVal(grid->point[i][j][k].C[3],grid->point[i][j][k+1].C[3], grid->point[i][j-1][k].C[3],grid->point[i][j-1][k+1].C[3],isolevel); Normal->C[0] = InterpVal(grid->point[i][j][k].C[3],grid->point[i][j][k+1].C[3], grid->point[i+1][j][k].C[3],grid->point[i+1][j][k+1].C[3],isolevel) - InterpVal(grid->point[i][j][k].C[3],grid->point[i][j][k+1].C[3], grid->point[i-1][j][k].C[3],grid->point[i-1][j][k+1].C[3],isolevel); } /******************************************************************************************************************************/ IsoSurface* iso_alloc(gint N[]) { IsoSurface* iso = g_malloc(sizeof(IsoSurface)); gint i,j; iso->N[0] = N[0]; iso->N[1] = N[1]; iso->N[2] = N[2]; iso->cube = g_malloc( iso->N[0]*sizeof(Cube**)); for(i=0;i< iso->N[0] ;i++) { iso->cube[i] = g_malloc(iso->N[1]*sizeof(Cube*)); for(j=0;j< iso->N[1] ;j++) iso->cube[i][j] = g_malloc(iso->N[2]*sizeof(Cube)); } return iso; } /**************************************************************/ IsoSurface* iso_free(IsoSurface* iso) { gint i,j,k; if(!iso) return NULL; for(i=1;iN[0]-2;i++) { for(j=1;jN[1]-2;j++) { for(k=1;kN[2]-2;k++) { Cube cube = iso->cube[i][j][k]; if(cube.vertex) g_free(cube.vertex); if(cube.triangles) g_free(cube.triangles); } } } for(i=0;i< iso->N[0] ;i++) { for(j=0;j< iso->N[1] ;j++) g_free(iso->cube[i][j]); g_free(iso->cube[i]); } g_free(iso->cube); g_free(iso); iso=NULL; return iso; } /**************************************************************/ void Interpolate(gint i,gint j,gint k,gint ip,gint jp,gint kp,gdouble isolevel,Grid *grid, Vertex *vertex, gboolean mapping) { gint c; gdouble val1 = grid->point[i][j][k].C[3]; gdouble val2 = grid->point[ip][jp][kp].C[3]; gdouble coef; if( fabs(isolevel-val1)C[c] = grid->point[i][j][k].C[c]; if(mapping) vertex->C[3] = grid->point[i][j][k].C[4]; return; } if( fabs(isolevel-val2)C[c] = grid->point[ip][jp][kp].C[c]; if(mapping) vertex->C[3] = grid->point[ip][jp][kp].C[4]; return; } if( fabs(val1-val2)C[c] = grid->point[i][j][k].C[c]; if(mapping) vertex->C[3] = grid->point[i][j][k].C[4]; return; } coef = (isolevel-val1)/(val2-val1); /* Debug("%d %d %d %d %d %d coef=%lf val1 = %lf val2 = %lf \n",i,j,k,ip,jp,kp,coef,val1,val2);*/ for(c=0;c<3;c++) vertex->C[c] = grid->point[i][j][k].C[c]+coef*(grid->point[ip][jp][kp].C[c]-grid->point[i][j][k].C[c]); if(mapping) { vertex->C[3] = grid->point[i][j][k].C[4]+coef*(grid->point[ip][jp][kp].C[4]-grid->point[i][j][k].C[4]); } return; } /**************************************************************/ Cube get_cube(gint i,gint j, gint k,gdouble isolevel,Grid* grid, gboolean mapping) { Cube cube; gint index = 0; gint n; gint c; Vertex V; /* Debug("%d %d %d\n",i,j,k);*/ if( grid->point[i][j][k].C[3]point[i+1][j][k].C[3]point[i+1][j][k+1].C[3]point[i][j][k+1].C[3]point[i][j+1][k].C[3]point[i+1][j+1][k].C[3]point[i+1][j+1][k+1].C[3]point[i][j+1][k+1].C[3]C[0]); printf(" %lf, ", cube.triangles[n].vertex[c]->C[1]); printf(" %lf) ", cube.triangles[n].vertex[c]->C[2]); } printf("\nNormals: "); for(c=0;c<3;c++) { printf("(%lf, ", cube.triangles[n].Normal[c].C[0]); printf("%lf, ", cube.triangles[n].Normal[c].C[1]); printf("%lf) ", cube.triangles[n].Normal[c].C[2]); printf("\n"); } printf("\n"); } } /**************************************************************/ IsoSurface* define_iso_surface(Grid* grid, gdouble isolevel, gboolean mapping) { IsoSurface* iso; gint i; gint j; gint k; gint n=0; gdouble scal; iso = iso_alloc(grid->N); progress_orb(0,GABEDIT_PROGORB_COMPISOSURFACE,TRUE); scal = (gdouble)1.01/(grid->N[0]); for(i=1;iN[0]-2;i++) { progress_orb(scal,GABEDIT_PROGORB_COMPISOSURFACE,FALSE); for(j=1;jN[1]-2;j++) { for(k=1;kN[2]-2;k++) { iso->cube[i][j][k] = get_cube(i,j,k,isolevel,grid, mapping); n+=iso->cube[i][j][k].Ntriangles; } } } iso->grid = grid; return iso; } /**************************************************************/ GabeditSrc250/src/Display/OrbitalsQChem.h0000644000175100017510000000267613130665225020550 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_ORBITALSQCHEM_H__ #define __GABEDIT_ORBITALSQCHEM_H__ void read_qchem_orbitals(gchar* FileName); #endif /* __GABEDIT_ORBITALSQCHEM_H__ */ GabeditSrc250/src/Display/ViewOrb.c0000644000175100017510000001032213130665225017406 0ustar alloucheallouche/* ViewOrb.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "UtilsOrb.h" #include "../Utils/Vector3d.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Geometry/GeomGlobal.h" #include "GLArea.h" #include "StatusOrb.h" #include "ColorMap.h" /*************************************************************************/ int view_orb(GtkWidget* Parent,int argc, char **argv) { GtkWidget* vboxwin; GtkWidget* hboxwin; GtkWidget* handleBoxColorMapGrid; GtkWidget* handleBoxColorMapContours; GtkWidget* handleBoxColorMapPlanesMapped; static gboolean first = TRUE; init_dipole(); if(!first) { if(PrincipalWindow) { gtk_widget_hide(GTK_WIDGET(PrincipalWindow)); gtk_widget_show(GTK_WIDGET(PrincipalWindow)); /* if(argc>1) read_any_file(argv[1]);*/ return 0; } } /* initialisation */ initialise_global_orbitals_variables(); read_opengl_file(); /* Create new top level window. */ PrincipalWindow = gtk_window_new( GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(PrincipalWindow), _("Gabedit : Orbitals/Density/Vibration")); gtk_container_set_reallocate_redraws (GTK_CONTAINER (PrincipalWindow), TRUE); gtk_window_set_default_size (GTK_WINDOW(PrincipalWindow),(gint)(ScreenWidth*0.5),(gint)(ScreenHeight*0.69)); gtk_container_set_border_width(GTK_CONTAINER(PrincipalWindow), 1); init_child(PrincipalWindow,gtk_widget_destroy," Draw Dens. Orb. "); /* g_signal_connect(G_OBJECT(PrincipalWindow),"delete_event",(GCallback)close_window_orb,NULL);*/ g_signal_connect(G_OBJECT(PrincipalWindow), "delete-event",G_CALLBACK(gtk_widget_hide_on_delete), NULL); gtk_window_set_transient_for(GTK_WINDOW(PrincipalWindow),GTK_WINDOW(Parent)); vboxwin = create_vbox(PrincipalWindow); gtk_widget_realize(PrincipalWindow); hboxwin = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX(vboxwin), hboxwin, TRUE, TRUE, 2); gtk_widget_show (hboxwin); if (!NewGLArea(hboxwin)) return 0; create_status_bar_orb(vboxwin); create_status_progress_bar_orb(vboxwin); handleBoxColorMapGrid = create_color_map_show(vboxwin,NULL," Grid "); g_object_set_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapGrid ", handleBoxColorMapGrid); handleBoxColorMapContours = create_color_map_show(vboxwin,NULL, "Contours "); g_object_set_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapContours", handleBoxColorMapContours); handleBoxColorMapPlanesMapped = create_color_map_show(vboxwin,NULL," Planes colorcoded"); g_object_set_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapPlanesMapped", handleBoxColorMapPlanesMapped); set_icone(PrincipalWindow); gtk_widget_show(GTK_WIDGET(PrincipalWindow)); color_map_hide(handleBoxColorMapGrid); color_map_hide(handleBoxColorMapContours); color_map_hide(handleBoxColorMapPlanesMapped); /* if(argc>1) read_any_file(argv[1]);*/ first = FALSE; gtk_window_move(GTK_WINDOW(PrincipalWindow),0,0); InitializeAll(); /*printCoefZlm();*/ return 0; } GabeditSrc250/src/Display/ContoursDraw.h0000644000175100017510000000344313130665225020476 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_CONTOURSDRAW_H__ #define __GABEDIT_CONTOURSDRAW_H__ void set_dotted_negative_contours(gboolean dotted); gboolean get_dotted_negative_contours(); gdouble* GetGapVector(Grid* plansgrid,gint i0,gint i1,gint numplan,gdouble gap); GLuint ContoursGenLists(GLuint contourslist,Grid* plansgrid,gint Ncontours,gdouble* values,gint i0,gint i1,gint numplan,gdouble gap); void ContoursShowLists(GLuint list); void showColorMapContours(); void hideColorMapContours(); #endif /* __GABEDIT_CONTOURSDRAW_H__ */ GabeditSrc250/src/Display/PlanesMappedPov.c0000644000175100017510000003162613130665225021101 0ustar alloucheallouche/*PlanesMappedPov.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "../Utils/Vector3d.h" #include "../Utils/Utils.h" #include "../Utils/Transformation.h" #include "../Display/PlanesMapped.h" #include #include "../Display/PlanesMappedDraw.h" #include "../Display/ColorMap.h" /********************************************************************************/ static gchar *get_pov_cylingre(gdouble C1[],gdouble C2[],gdouble Colors[], gdouble coef) { gchar* temp = NULL; gint i; gdouble d = 0; for(i=0;i<3;i++) d += (C1[i]-C2[i])*(C1[i]-C2[i]); if(d<1e-8) return g_strdup("\n"); temp = g_strdup_printf( "cylinder\n" "{\n" "\t<%14.6f,%14.6f,%14.6f>,\n" "\t<%14.6f,%14.6f,%14.6f> \n" "\twireFrameCylinderRadius*%lf\n" "\ttexture\n" "\t{\n" "\t\tpigment { rgb<%14.6f,%14.6f,%14.6f> }\n" "\t\tfinish {ambient ambientCoef diffuse diffuseCoef specular specularCoef}\n" "\t}\n" "\ttransform { myTransforms }\n" "}\n", C1[0],C1[1],C1[2], C2[0],C2[1],C2[2], coef, Colors[0],Colors[1],Colors[2] ); return temp; } /********************************************************************************/ static gchar *get_pov_mesh2( gdouble C1[],gdouble C2[], gdouble C3[], gdouble C4[], gdouble N1[],gdouble N2[], gdouble N3[], gdouble N4[], gdouble color1[], gdouble color2[], gdouble color3[], gdouble color4[]) { gchar* temp = NULL; gchar* t = NULL; gint i; gdouble d = 0; for(i=0;i<3;i++) d += (C1[i]-C2[i])*(C1[i]-C2[i]); if(d<1e-8) return g_strdup("\n"); d = 0; for(i=0;i<3;i++) d += (C2[i]-C3[i])*(C2[i]-C3[i]); if(d<1e-8) return g_strdup("\n"); d = 0; for(i=0;i<3;i++) d += (C3[i]-C4[i])*(C3[i]-C4[i]); if(d<1e-8) return g_strdup("\n"); d = 0; for(i=0;i<3;i++) d += (C1[i]-C4[i])*(C1[i]-C4[i]); if(d<1e-8) return g_strdup("\n"); if(TypeBlend == GABEDIT_BLEND_YES) t = g_strdup(" filter surfaceTransCoef"); else t = g_strdup(" "); temp = g_strdup_printf("mesh2\n" "{\n" "\tvertex_vectors{ 4,\n" "\t\t<%lf, %lf, %lf>\n" "\t\t<%lf, %lf, %lf>\n" "\t\t<%lf, %lf, %lf>\n" "\t\t<%lf, %lf, %lf>\n" "\t}\n" "\tnormal_vectors{ 4,\n" "\t\t<%lf, %lf, %lf>\n" "\t\t<%lf, %lf, %lf>\n" "\t\t<%lf, %lf, %lf>\n" "\t\t<%lf, %lf, %lf>\n" "\t}\n" "\ttexture_list{ 4,\n" "\t\ttexture{pigment{rgb<%lf,%lf,%lf> %s} finish {ambient ambientCoef diffuse diffuseCoef specular specularCoef}}\n" "\t\ttexture{pigment{rgb<%lf,%lf,%lf> %s} finish {ambient ambientCoef diffuse diffuseCoef specular specularCoef}}\n" "\t\ttexture{pigment{rgb<%lf,%lf,%lf> %s} finish {ambient ambientCoef diffuse diffuseCoef specular specularCoef}}\n" "\t\ttexture{pigment{rgb<%lf,%lf,%lf> %s} finish {ambient ambientCoef diffuse diffuseCoef specular specularCoef}}\n" "\t}\n" "\tface_indices{2,<0,1,2> 0, 1, 2 <2,3,0> 2, 3, 0 }\n" "\ttransform { myTransforms }\n" "}\n", C1[0], C1[1], C1[2], C2[0], C2[1], C2[2], C3[0], C3[1], C3[2], C4[0], C4[1], C4[2], N1[0], N1[1], N1[2], N2[0], N2[1], N2[2], N3[0], N3[1], N3[2], N4[0], N4[1], N4[2], color1[0], color1[1], color1[2], t, color2[0], color2[1], color2[2], t, color3[0], color3[1], color3[2], t, color4[0], color4[1], color4[2], t ); if(t) g_free(t); return temp; } /********************************************************************************/ static void addPlanPovRay(FILE* file, Grid* plansgrid,gint i0,gint i1,gint numPlane,gdouble Gap[]) { gchar* temp; gint ip = numPlane; gint ix=0,iy=0,iz=0; gint ix1=0,iy1=0,iz1=0; gint ix2=0,iy2=0,iz2=0; gint ix3=0,iy3=0,iz3=0; gint ix4,iy4,iz4; gint i,j,ii,jj; gdouble C1[3]; gdouble C2[3]; gdouble Color[3]; i = 0; j = 0; ii = plansgrid->N[i0]-1; jj = plansgrid->N[i1]-1; switch(i0) { case 0: ix = i; ix1 = ix2 = ii; ix4 = ix3 = ix; switch(i1) { case 1 : iy = j; iz = ip; iy1 = iy4 = iy; iy2 = iy3 = jj ; iz1 = iz2 = iz3 = iz4 = iz; break; case 2 : iy = ip;iz = j; iy1 = iy2 = iy3 = iy4 = iy; iz1 = iz4 = iz; iz2 = iz3 = jj ; break; } break; case 1: iy = i; iy1 = iy2 = ii; iy3 = iy4 = iy ; switch(i1) { case 0 : ix = j; iz = ip; iz1 = iz2 = iz3 = iz4 = iz; ix1 = ix4 = ix; ix2 = ix3 = jj ; break; case 2 : ix = ip;iz = j; ix1 = ix2 = ix3 = ix4 = ix; iz1 = iz4 = iz; iz2 = iz3 = jj ; break; } break; case 2: iz = i; iz1 = iz2 = ii; iz3 = iz4 = iz ; switch(i1) { case 0 : ix = j; iy = ip; iy1 = iy2 = iy3 = iy4 = iy; ix1 = ix4 = ix; ix2 = ix3 = jj ; break; case 1 : ix = ip;iy = j; ix1 = ix2 = ix3 = ix4 = ix; iy1 = iy4 = iy; iy2 = iy3 = jj ; break; } break; } for(i=0;i<3;i++) Color[i] = 1.0; for(i=0;i<3;i++) C1[i] = plansgrid->point[ix][iy][iz].C[i] + Gap[i]; for(i=0;i<3;i++) C2[i] = plansgrid->point[ix1][iy1][iz1].C[i] + Gap[i]; temp = get_pov_cylingre(C1,C2,Color, 1.0); fprintf(file,"%s",temp); g_free(temp); for(i=0;i<3;i++) C1[i] = C2[i]; for(i=0;i<3;i++) C2[i] = plansgrid->point[ix2][iy2][iz2].C[i] + Gap[i]; temp = get_pov_cylingre(C1,C2,Color, 1.0); fprintf(file,"%s",temp); g_free(temp); for(i=0;i<3;i++) C1[i] = C2[i]; for(i=0;i<3;i++) C2[i] = plansgrid->point[ix3][iy3][iz3].C[i] + Gap[i]; temp = get_pov_cylingre(C1,C2,Color, 1.0); fprintf(file,"%s",temp); g_free(temp); for(i=0;i<3;i++) C1[i] = plansgrid->point[ix][iy][iz].C[i] + Gap[i]; temp = get_pov_cylingre(C1,C2,Color, 1.0); fprintf(file,"%s",temp); g_free(temp); } /********************************************************************************/ static gdouble* GetGapVector(Grid* plansgrid,gint i0,gint i1,gint numPlane,gdouble gap) { gdouble x1,y1,z1; gdouble x2,y2,z2; gint ip = numPlane; gint ix=0,iy=0,iz=0; gint ix1=0,iy1=0,iz1=0; gint ix2=0,iy2=0,iz2=0; gint ix3,iy3,iz3; gint ix4,iy4,iz4; gint i,j,ii,jj; gdouble *Gap = g_malloc(3*sizeof(gdouble)); gdouble Module; i = 0; j = 0; ii = plansgrid->N[i0]-1; jj = plansgrid->N[i1]-1; switch(i0) { case 0: ix = i; ix1 = ix2 = ii; ix4 = ix3 = ix; switch(i1) { case 1 : iy = j; iz = ip; iy1 = iy4 = iy; iy2 = iy3 = jj ; iz1 = iz2 = iz3 = iz4 = iz; break; case 2 : iy = ip;iz = j; iy1 = iy2 = iy3 = iy4 = iy; iz1 = iz4 = iz; iz2 = iz3 = jj ; break; } break; case 1: iy = i; iy1 = iy2 = ii; iy3 = iy4 = iy ; switch(i1) { case 0 : ix = j; iz = ip; iz1 = iz2 = iz3 = iz4 = iz; ix1 = ix4 = ix; ix2 = ix3 = jj ; break; case 2 : ix = ip;iz = j; ix1 = ix2 = ix3 = ix4 = ix; iz1 = iz4 = iz; iz2 = iz3 = jj ; break; } break; case 2: iz = i; iz1 = iz2 = ii; iz3 = iz4 = iz ; switch(i1) { case 0 : ix = j; iy = ip; iy1 = iy2 = iy3 = iy4 = iy; ix1 = ix4 = ix; ix2 = ix3 = jj ; break; case 1 : ix = ip;iy = j; ix1 = ix2 = ix3 = ix4 = ix; iy1 = iy4 = iy; iy2 = iy3 = jj ; break; } break; } x1 = plansgrid->point[ix1][iy1][iz1].C[0] - plansgrid->point[ix][iy][iz].C[0]; y1 = plansgrid->point[ix1][iy1][iz1].C[1] - plansgrid->point[ix][iy][iz].C[1]; z1 = plansgrid->point[ix1][iy1][iz1].C[2] - plansgrid->point[ix][iy][iz].C[2]; x2 = plansgrid->point[ix2][iy2][iz2].C[0] - plansgrid->point[ix1][iy1][iz1].C[0] ; y2 = plansgrid->point[ix2][iy2][iz2].C[1] - plansgrid->point[ix1][iy1][iz1].C[1] ; z2 = plansgrid->point[ix2][iy2][iz2].C[2] - plansgrid->point[ix1][iy1][iz1].C[2] ; Gap[0] = (y1 * z2) - (z1 * y2); Gap[1] = (z1 * x2) - (x1 * z2); Gap[2] = (x1 * y2) - (y1 * x2); Module = sqrt(Gap[0]*Gap[0] + Gap[1]*Gap[1] +Gap[2]*Gap[2]); for(i=0;i<3;i++) Gap[i] = Gap[i]/Module*gap; return Gap; } /***************************************************************************************************************/ static ColorMap* get_colorMap() { GtkWidget* handleBoxColorMapPlanesMapped = g_object_get_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapPlanesMapped"); ColorMap* colorMap = g_object_get_data(G_OBJECT(handleBoxColorMapPlanesMapped),"ColorMap"); return colorMap; } /***************************************************************************************************************/ static void AddOnePlaneMappedPovRay(FILE* file, Grid* plansgrid, gint i0, gint i1, gint numPlane, gdouble gap) { gchar* temp = NULL; gint ip = numPlane; gint ix=0,iy=0,iz=0; gint ix1=0,iy1=0,iz1=0; gint ix2=0,iy2=0,iz2=0; gint ix3=0,iy3=0,iz3=0; gint ix4,iy4,iz4; gint i,j,ii,jj; gint k; ColorMap* colorMap = get_colorMap(); gdouble color1[] = {0.7,0.7,0.7,0.8}; gdouble color2[] = {0.7,0.7,0.7,0.8}; gdouble color3[] = {0.7,0.7,0.7,0.8}; gdouble color4[] = {0.7,0.7,0.7,0.8}; gdouble C1[3]; gdouble C2[3]; gdouble C3[3]; gdouble C4[3]; gdouble N1[3] = {1,1,1}; gdouble N2[3] = {1,1,1}; gdouble N3[3] = {1,1,1}; gdouble N4[3] = {1,1,1}; gdouble*Gap; Gap = GetGapVector(plansgrid, i0, i1, numPlane, gap); addPlanPovRay(file, plansgrid, i0, i1, numPlane, Gap); for(i=0;iN[i0]-1;i++) for(j=0;jN[i1]-1;j++) { ii = i+1; jj = j+1; switch(i0) { case 0: ix = i; ix1 = ix2 = ii; ix4 = ix3 = ix; switch(i1) { case 1 : iy = j; iz = ip; iy1 = iy4 = iy; iy2 = iy3 = jj ; iz1 = iz2 = iz3 = iz4 = iz; break; case 2 : iy = ip;iz = j; iy1 = iy2 = iy3 = iy4 = iy; iz1 = iz4 = iz; iz2 = iz3 = jj ; break; } break; case 1: iy = i; iy1 = iy2 = ii; iy3 = iy4 = iy ; switch(i1) { case 0 : ix = j; iz = ip; iz1 = iz2 = iz3 = iz4 = iz; ix1 = ix4 = ix; ix2 = ix3 = jj ; break; case 2 : ix = ip;iz = j; ix1 = ix2 = ix3 = ix4 = ix; iz1 = iz4 = iz; iz2 = iz3 = jj ; break; } break; case 2: iz = i; iz1 = iz2 = ii; iz3 = iz4 = iz ; switch(i1) { case 0 : ix = j; iy = ip; iy1 = iy2 = iy3 = iy4 = iy; ix1 = ix4 = ix; ix2 = ix3 = jj ; break; case 1 : ix = ip;iy = j; ix1 = ix2 = ix3 = ix4 = ix; iy1 = iy4 = iy; iy2 = iy3 = jj ; break; } break; } set_Color_From_colorMap(colorMap, color1, plansgrid->point[ix][iy][iz].C[3]); for(k=0;k<3;k++) C1[k] = plansgrid->point[ix][iy][iz].C[k] + Gap[k]; set_Color_From_colorMap(colorMap, color2, plansgrid->point[ix1][iy1][iz1].C[3]); for(k=0;k<3;k++) C2[k] = plansgrid->point[ix1][iy1][iz1].C[k] + Gap[k]; set_Color_From_colorMap(colorMap, color3, plansgrid->point[ix2][iy2][iz2].C[3]); for(k=0;k<3;k++) C3[k] = plansgrid->point[ix2][iy2][iz2].C[k] + Gap[k]; set_Color_From_colorMap(colorMap, color4, plansgrid->point[ix3][iy3][iz3].C[3]); for(k=0;k<3;k++) C4[k] = plansgrid->point[ix3][iy3][iz3].C[k] + Gap[k]; temp = get_pov_mesh2(C1, C2, C3, C4, N1, N2, N3, N4, color1, color2, color3, color4); fprintf(file,"%s",temp); g_free(temp); } g_free(Gap); } /*********************************************************************************************************/ gint addPlaneMappedPovRay(Grid* plansgrid, gint i0,gint i1,gint numPlane, gdouble gap) { gchar* fileName = g_strdup_printf("%s%stmp%spovrayPlanesMapped.pov",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); FILE* file = fopen(fileName,"a"); g_free(fileName); if(!file) return 1; if(!plansgrid) return 1; AddOnePlaneMappedPovRay(file, plansgrid, i0, i1, numPlane, gap); fclose(file); return 0; } /*********************************************************************************************************/ void deletePlanesMappedPovRayFile() { gchar* fileName = g_strdup_printf("%s%stmp%spovrayPlanesMapped.pov",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); unlink(fileName); g_free(fileName); } GabeditSrc250/src/Display/GridAdfDensity.h0000644000175100017510000000030413130665225020675 0ustar alloucheallouche #ifndef __GABEDIT_GRIDADFDENSITY_H__ #define __GABEDIT_GRIDADFDENSITY_H__ void load_adf_file_density(GabeditFileChooser *SelecFile, gint response_id); #endif /* __GABEDIT_GRIDADFDENSITY_H__ */ GabeditSrc250/src/Display/AnimationIsoSurface.h0000644000175100017510000000270313130665225021745 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_ANIMATIONISOSURFACE_H__ #define __GABEDIT_ANIMATIONISOSURFACE_H__ void animationIsoSurfaceDlg(); #endif /* __GABEDIT_ANIMATIONISOSURFACE_H__ */ GabeditSrc250/src/Display/AxisGL.c0000644000175100017510000005075613130665225017177 0ustar alloucheallouche/* AxisGL.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "../Geometry/GeomGlobal.h" #include "../Utils/Vector3d.h" #include "../Utils/Transformation.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Utils/UtilsGL.h" #include "../Utils/Utils.h" #include "../Common/Windows.h" #include "GLArea.h" #include "../Display/UtilsOrb.h" #define Deg_Rad 180.0/PI /************************************************************************/ typedef struct _AxisDef { gboolean show; gboolean negative; gdouble origin[3]; gdouble radius; gdouble scal; gdouble xColor[3]; gdouble yColor[3]; gdouble zColor[3]; }AxisDef; static AxisDef axis; /************************************************************************/ void getAxisProperties(gboolean* show, gboolean* negative, gdouble origin[], gdouble* radius, gdouble* scal, gdouble xColor[], gdouble yColor[], gdouble zColor[]) { gint i; *show = axis.show; *negative = axis.negative; for(i=0;i<3;i++) origin [i] = axis.origin[i]; *radius = axis.radius; *scal = axis.scal; for(i=0;i<3;i++) { xColor[i] = axis.xColor[i]; yColor[i] = axis.yColor[i]; zColor[i] = axis.zColor[i]; } } /************************************************************************/ void initAxis() { axis.show = FALSE; axis.negative = FALSE; axis.origin[0] = 0; axis.origin[1] = 0; axis.origin[2] = 0; axis.radius = 0.25; axis.scal = 5; axis.xColor[0] = 1.0; axis.xColor[1] = 0.0; axis.xColor[2] = 0.0; axis.yColor[0] = 0.0; axis.yColor[1] = 1.0; axis.yColor[2] = 0.0; axis.zColor[0] = 0.0; axis.zColor[1] = 1.0; axis.zColor[2] = 1.0; } /******************************************************************/ void save_axis_properties() { gchar *axesfile; FILE *file; axesfile = g_strdup_printf("%s%saxes",gabedit_directory(),G_DIR_SEPARATOR_S); file = fopen(axesfile, "w"); fprintf(file,"%d\n",axis.show); fprintf(file,"%d\n",axis.negative); fprintf(file,"%lf %lf %lf\n",axis.origin[0],axis.origin[1],axis.origin[2]); fprintf(file,"%lf\n",axis.radius); fprintf(file,"%lf\n",axis.scal); fprintf(file,"%lf %lf %lf\n",axis.xColor[0],axis.xColor[1],axis.xColor[2]); fprintf(file,"%lf %lf %lf\n",axis.yColor[0],axis.yColor[1],axis.yColor[2]); fprintf(file,"%lf %lf %lf\n",axis.zColor[0],axis.zColor[1],axis.zColor[2]); fclose(file); g_free(axesfile); } /******************************************************************/ void read_axis_properties() { gchar *axesfile; FILE *file; gint n; initAxis(); axesfile = g_strdup_printf("%s%saxes",gabedit_directory(),G_DIR_SEPARATOR_S); file = fopen(axesfile, "rb"); if(!file) return; n = fscanf(file,"%d\n",&axis.show); if(n != 1) { initAxis(); return ; fclose(file); g_free(axesfile);} n = fscanf(file,"%d\n",&axis.negative); if(n != 1) { initAxis(); return ; fclose(file); g_free(axesfile);} n = fscanf(file,"%lf %lf %lf\n",&axis.origin[0],&axis.origin[1],&axis.origin[2]); if(n != 3) { initAxis(); return ; fclose(file); g_free(axesfile);} n = fscanf(file,"%lf\n",&axis.radius); if(n != 1) { initAxis(); return ; fclose(file); g_free(axesfile);} n = fscanf(file,"%lf\n",&axis.scal); if(n != 1) { initAxis(); return ; fclose(file); g_free(axesfile);} n = fscanf(file,"%lf %lf %lf\n",&axis.xColor[0],&axis.xColor[1],&axis.xColor[2]); if(n != 3) { initAxis(); return ; fclose(file); g_free(axesfile);} n = fscanf(file,"%lf %lf %lf\n",&axis.yColor[0],&axis.yColor[1],&axis.yColor[2]); if(n != 3) { initAxis(); return ; fclose(file); g_free(axesfile);} n = fscanf(file,"%lf %lf %lf\n",&axis.zColor[0],&axis.zColor[1],&axis.zColor[2]); if(n != 3) { initAxis(); return ; fclose(file); g_free(axesfile);} fclose(file); g_free(axesfile); } /******************************************************************/ static void set_axis(GtkWidget* fp,gpointer data) { GtkWidget** entrys = (GtkWidget**)data; gdouble *vX = g_object_get_data(G_OBJECT (fp), "XColor"); gdouble *vY = g_object_get_data(G_OBJECT (fp), "YColor"); gdouble *vZ = g_object_get_data(G_OBJECT (fp), "ZColor"); gboolean *negative = g_object_get_data(G_OBJECT (fp), "Negative"); G_CONST_RETURN gchar* tentry; gint i; tentry = gtk_entry_get_text(GTK_ENTRY(entrys[0])); axis.scal = atof(tentry); if(axis.scal<1e-6) axis.scal = 1.0; for(i=1;i<4;i++) { tentry = gtk_entry_get_text(GTK_ENTRY(entrys[i])); axis.origin[i-1] = atof(tentry)*ANG_TO_BOHR; } tentry = gtk_entry_get_text(GTK_ENTRY(entrys[4])); axis.radius = atof(tentry)*ANG_TO_BOHR; if(axis.radius<1e-6) axis.radius = 0.1; for(i=0;i<3;i++) { axis.xColor[i] = vX[i]; axis.yColor[i] = vY[i]; axis.zColor[i] = vZ[i]; } axis.negative = *negative; rafresh_window_orb(); } /******************************************************************/ static void set_negative(GtkWidget* button,gpointer data) { gboolean *negative= g_object_get_data(G_OBJECT (button), "Negative"); *negative = !(*negative); } /******************************************************************/ static void set_axis_color(GtkColorSelection *Sel,gpointer *d) { GdkColor color; gdouble *v = g_object_get_data(G_OBJECT (Sel), "Color"); gtk_color_selection_get_current_color(Sel, &color); v[0] =color.red/65535.0; v[1] =color.green/65535.0; v[2] =color.blue/65535.0; } /******************************************************************/ static void set_axis_button_color(GtkObject *button,gpointer *data) { GtkStyle *style = g_object_get_data(G_OBJECT (button), "Style"); gdouble *v = g_object_get_data(G_OBJECT (button), "Color"); GtkWidget *OldButton = g_object_get_data(G_OBJECT (button), "Button"); style = gtk_style_copy(style); style->bg[0].red=(gushort)(v[0]*65535.0); style->bg[0].green=(gushort)(v[1]*65535.0); style->bg[0].blue=(gushort)(v[2]*65535.0); gtk_widget_set_style(OldButton, style); } /******************************************************************/ static void open_color_dlg_axis(GtkWidget *button,gpointer data) { GtkColorSelectionDialog *colorDlg; GtkStyle* style = g_object_get_data(G_OBJECT (button), "Style"); GtkWidget *win = g_object_get_data(G_OBJECT (button), "Win"); gdouble* v = g_object_get_data(G_OBJECT (button), "Color");; GdkColor color; colorDlg = (GtkColorSelectionDialog *)gtk_color_selection_dialog_new("Set Axis Color"); color.red = (gushort)(v[0]*65535); color.green = (gushort)(v[1]*65535); color.blue = (gushort)(v[2]*65535); gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (colorDlg->colorsel), &color); gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (colorDlg->colorsel), &color); gtk_window_set_transient_for(GTK_WINDOW(colorDlg),GTK_WINDOW(win)); gtk_window_set_position(GTK_WINDOW(colorDlg),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (colorDlg), TRUE); g_signal_connect(G_OBJECT(colorDlg), "delete_event",(GCallback)destroy_button_windows,NULL); g_signal_connect(G_OBJECT(colorDlg), "delete_event",G_CALLBACK(gtk_widget_destroy),NULL); g_object_set_data(G_OBJECT (colorDlg->colorsel), "Color", v); gtk_widget_hide(colorDlg->help_button); g_signal_connect_swapped(G_OBJECT(colorDlg->ok_button),"clicked", (GCallback)set_axis_color,GTK_OBJECT(colorDlg->colorsel)); g_object_set_data(G_OBJECT (colorDlg->ok_button), "Color", v); g_object_set_data(G_OBJECT (colorDlg->ok_button), "Button", button); g_object_set_data(G_OBJECT (colorDlg->ok_button), "Style", style); g_signal_connect(G_OBJECT(colorDlg->ok_button),"clicked", (GCallback)set_axis_button_color,NULL); g_signal_connect_swapped(G_OBJECT(colorDlg->ok_button), "clicked", (GCallback)destroy_button_windows,GTK_OBJECT(colorDlg)); g_signal_connect_swapped(G_OBJECT(colorDlg->ok_button),"clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(colorDlg)); g_signal_connect_swapped(G_OBJECT(colorDlg->cancel_button), "clicked", (GCallback)destroy_button_windows,GTK_OBJECT(colorDlg)); g_signal_connect_swapped(G_OBJECT(colorDlg->cancel_button),"clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(colorDlg)); add_button_windows(" Set Color ",GTK_WIDGET(colorDlg)); gtk_widget_show(GTK_WIDGET(colorDlg)); } /*********************************************************************/ void set_axis_dialog () { GtkWidget *fp; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox; GtkWidget *button; GtkStyle *style; static GtkWidget* entrys[5]; static gdouble vX[3]; static gdouble vY[3]; static gdouble vZ[3]; static gboolean negative; gchar* tlabel[5]={"Factor","X Origin (Ang)","Y Origin (Ang)","Z Origin (Ang)","Radius"}; gint i; GtkWidget* table; /* principal Window */ fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(fp),TRUE); gtk_window_set_title(GTK_WINDOW(fp),_("Set the axis parameters")); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(PrincipalWindow)); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)gtk_widget_destroy,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(9,3,FALSE); gtk_box_pack_start(GTK_BOX(vboxframe), table,TRUE,TRUE,0); for(i=0;i<5;i++) { add_label_table(table,tlabel[i],(gushort)i,0); add_label_table(table," : ",(gushort)i,1); entrys[i] = gtk_entry_new (); gtk_table_attach(GTK_TABLE(table),entrys[i],2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); if(i!=0) { if(i==4) { gchar* t = g_strdup_printf("%lf",axis.radius*BOHR_TO_ANG); gtk_entry_set_text(GTK_ENTRY(entrys[i]),t); g_free(t); } else { gchar* t = g_strdup_printf("%lf",axis.origin[i-1]*BOHR_TO_ANG); gtk_entry_set_text(GTK_ENTRY(entrys[i]),t); g_free(t); } } else { gchar* t = g_strdup_printf("%lf",axis.scal); gtk_entry_set_text(GTK_ENTRY(entrys[i]),t); g_free(t); } } i = 5; add_label_table(table,_("Color for the X axis"),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); style = gtk_widget_get_style(fp); button = gtk_button_new_with_label(" "); style = gtk_style_copy(style); style->bg[0].red=axis.xColor[0]*65535.0; style->bg[0].green=axis.xColor[1]*65535.0; style->bg[0].blue=axis.xColor[2]*65535.0; vX[0] = axis.xColor[0]; vX[1] = axis.xColor[1]; vX[2] = axis.xColor[2]; gtk_widget_set_style(button, style ); gtk_table_attach(GTK_TABLE(table),button,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_widget_show (button); g_object_set_data(G_OBJECT (button), "Style", style); g_object_set_data(G_OBJECT (button), "Win", fp); g_object_set_data(G_OBJECT (button), "Color", vX); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)open_color_dlg_axis, NULL); i++; add_label_table(table,_("Color for the Y axis"),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); style = gtk_widget_get_style(fp); button = gtk_button_new_with_label(" "); style = gtk_style_copy(style); style->bg[0].red=axis.yColor[0]*65535.0; style->bg[0].green=axis.yColor[1]*65535.0; style->bg[0].blue=axis.yColor[2]*65535.0; vY[0] = axis.yColor[0]; vY[1] = axis.yColor[1]; vY[2] = axis.yColor[2]; gtk_widget_set_style(button, style ); gtk_table_attach(GTK_TABLE(table),button,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_widget_show (button); g_object_set_data(G_OBJECT (button), "Style", style); g_object_set_data(G_OBJECT (button), "Win", fp); g_object_set_data(G_OBJECT (button), "Color", vY); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)open_color_dlg_axis, NULL); hbox = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vboxframe), hbox, FALSE, FALSE, 1); i++; add_label_table(table,_("Color for the Z axis"),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); style = gtk_widget_get_style(fp); button = gtk_button_new_with_label(" "); style = gtk_style_copy(style); style->bg[0].red=axis.zColor[0]*65535.0; style->bg[0].green=axis.zColor[1]*65535.0; style->bg[0].blue=axis.zColor[2]*65535.0; vZ[0] = axis.zColor[0]; vZ[1] = axis.zColor[1]; vZ[2] = axis.zColor[2]; gtk_widget_set_style(button, style ); gtk_widget_set_style(button, style ); gtk_table_attach(GTK_TABLE(table),button,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_widget_show (button); g_object_set_data(G_OBJECT (button), "Style", style); g_object_set_data(G_OBJECT (button), "Win", fp); g_object_set_data(G_OBJECT (button), "Color", vZ); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)open_color_dlg_axis, NULL); i++; button = gtk_check_button_new_with_label (_("Show the negative part of the axes")); negative = axis.negative; g_object_set_data(G_OBJECT (button), "Negative", &negative); gtk_table_attach(GTK_TABLE(table),button,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), negative); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)set_negative, NULL); hbox = create_hbox(vboxall); button = create_button(PrincipalWindow,"Close"); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(PrincipalWindow,"Apply"); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_object_set_data(G_OBJECT (button), "XColor", vX); g_object_set_data(G_OBJECT (button), "YColor", vY); g_object_set_data(G_OBJECT (button), "ZColor", vZ); g_object_set_data(G_OBJECT (button), "Negative", &negative); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(set_axis),(gpointer)entrys); gtk_widget_show (button); button = create_button(PrincipalWindow,"OK"); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_object_set_data(G_OBJECT (button), "XColor", vX); g_object_set_data(G_OBJECT (button), "YColor", vY); g_object_set_data(G_OBJECT (button), "ZColor", vZ); g_object_set_data(G_OBJECT (button), "Negative", &negative); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(set_axis),(gpointer)entrys); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(fp)); gtk_widget_show (button); gtk_widget_show_all(fp); } /************************************************************************/ gboolean testShowAxis() { return axis.show; } /************************************************************************/ void showAxis() { axis.show = TRUE; } /************************************************************************/ void hideAxis() { axis.show = FALSE; } /************************************************************************/ static void rotatedVector(V3d v) { V3d vz={0.0,0.0,1.0}; V3d vert; gdouble angle; v3d_cross(vz,v,vert); angle = acos(v3d_dot(vz,v)/v3d_length(v))*Deg_Rad; if(fabs(angle)<1e-6) return; if(fabs(angle-180)<1e-6) glRotated(angle, 1.0, 0.0, 0.0); else glRotated(angle, vert[0],vert[1],vert[2]); } /************************************************************************/ static void drawPrism(GLdouble radius,V3d Base1Pos,V3d Base2Pos) { V3d Direction; double lengt; GLUquadricObj *obj; glPushMatrix(); glTranslated(Base1Pos[0],Base1Pos[1],Base1Pos[2]); Direction[0] = Base2Pos[0]-Base1Pos[0]; Direction[1] = Base2Pos[1]-Base1Pos[1]; Direction[2] = Base2Pos[2]-Base1Pos[2]; lengt = v3d_length(Direction); rotatedVector(Direction); obj = gluNewQuadric(); gluQuadricNormals(obj, GL_SMOOTH); gluQuadricDrawStyle(obj, GLU_FILL); gluCylinder (obj,radius,radius/5,lengt,10,10); gluDeleteQuadric(obj); glPopMatrix(); } /***************************************************************************************************************/ static void drawPrismColor(GLdouble radius,V3d Base1Pos,V3d Base2Pos, V4d Specular,V4d Diffuse,V4d Ambiant) { glMaterialdv(GL_FRONT_AND_BACK,GL_SPECULAR,Specular); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,Diffuse); glMaterialdv(GL_FRONT_AND_BACK,GL_AMBIENT,Ambiant); glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,50); drawPrism(radius,Base1Pos,Base2Pos); } /***************************************************************************************************************/ static void drawAxis(V3d vector, GLdouble radius,V3d origin, V4d specular,V4d diffuse,V4d ambiant) { V3d top; V3d bottom; V3d center; double lengt; gint i; V4d diffuseFleche; V4d ambiantFleche; bottom[0] = origin[0]; bottom[1] = origin[1]; bottom[2] = origin[2]; if(axis.negative) { bottom[0] -= vector[0]; bottom[1] -= vector[1]; bottom[2] -= vector[2]; } top[0] = origin[0] + vector[0]; top[1] = origin[1] + vector[1]; top[2] = origin[2] + vector[2]; lengt = v3d_length(vector); if(radius<0.1) radius = 0.1; if(axis.negative) lengt *=2; center[0] = top[0]; center[1] = top[1]; center[2] = top[2]; top[0] += (top[0]-bottom[0])/lengt*2*radius; top[1] += (top[1]-bottom[1])/lengt*2*radius; top[2] += (top[2]-bottom[2])/lengt*2*radius; Cylinder_Draw_Color(radius/2,bottom,center,specular,diffuse,ambiant); for(i=0;i<3;i++) { diffuseFleche[i] = diffuse[i] *0.6; ambiantFleche[i] = ambiant[i] *0.6; } diffuseFleche[3] = diffuse[3]; ambiantFleche[3] = ambiant[3]; drawPrismColor(radius/1.5,center,top,specular,diffuseFleche,ambiantFleche); } /************************************************************************/ GLuint axisGenList(GLuint axisList) { V4d specular = {1.0f,1.0f,1.0f,1.0f}; V4d xDiffuse = {1.0f,1.0f,1.0f,1.0f}; V4d xAmbiant = {1.0f,1.0f,1.0f,1.0f}; V4d yDiffuse = {1.0f,1.0f,1.0f,1.0f}; V4d yAmbiant = {1.0f,1.0f,1.0f,1.0f}; V4d zDiffuse = {1.0f,1.0f,1.0f,1.0f}; V4d zAmbiant = {1.0f,1.0f,1.0f,1.0f}; V3d vectorX = {1,0,0}; V3d vectorY = {0,1,0}; V3d vectorZ = {0,0,1}; GLdouble radius = axis.radius; gint i; for(i=0;i<3;i++) { xDiffuse[i] = axis.xColor[i]; yDiffuse[i] = axis.yColor[i]; zDiffuse[i] = axis.zColor[i]; xAmbiant[i] = xDiffuse[i]/10; yAmbiant[i] = yDiffuse[i]/10; zAmbiant[i] = zDiffuse[i]/10; } xDiffuse[3] = 1; yDiffuse[3] = 1; zDiffuse[3] = 1; for(i=0;i<3;i++) { vectorX[i] *= axis.scal; vectorY[i] *= axis.scal; vectorZ[i] *= axis.scal; } if (glIsList(axisList) == GL_TRUE) glDeleteLists(axisList,1); axisList = glGenLists(1); glNewList(axisList, GL_COMPILE); drawAxis(vectorX, radius, axis.origin, specular, xDiffuse, xAmbiant); drawAxis(vectorY, radius, axis.origin, specular, yDiffuse, yAmbiant); drawAxis(vectorZ, radius, axis.origin, specular, zDiffuse, zAmbiant); glEndList(); return axisList; } /************************************************************************/ void axisShowList(GLuint axisList) { if(TypeGeom==GABEDIT_TYPEGEOM_NO) return; if(!axis.show) return; if (glIsList(axisList) == GL_TRUE) glCallList(axisList); } /************************************************************************/ GabeditSrc250/src/Display/OrbitalsNWChem.c0000644000175100017510000007266613130665225020675 0ustar alloucheallouche/* OrbitalsNWChem.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "../Utils/AtomsProp.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/Zlm.h" #include "../Geometry/GeomGlobal.h" #include "GeomDraw.h" #include "GLArea.h" #include "UtilsOrb.h" #include "Basis.h" #include "GeomOrbXYZ.h" #include "AtomicOrbitals.h" #include "StatusOrb.h" #include "Basis.h" #include "Orbitals.h" #include "GeomOrbXYZ.h" #include "BondsOrb.h" /********************************************************************************/ typedef enum { GABEDIT_ORBLOCALTYPE_BOYS=0, GABEDIT_ORBLOCALTYPE_EDMISTON, GABEDIT_ORBLOCALTYPE_PIPEK, GABEDIT_ORBLOCALTYPE_UNKNOWN } GabEditOrbLocalType; static gchar* titlesLocalOrb[GABEDIT_ORBLOCALTYPE_PIPEK+1]= { "BOYS ORBITAL LOCALIZATION", "EDMISTON-RUEDENBERG ENERGY LOCALIZATION", "MOLECULAR ORBITALS LOCALIZED BY THE POPULATION METHOD" }; typedef enum { GABEDIT_ORBTYPE_ALPHA = 0, GABEDIT_ORBTYPE_BETA, GABEDIT_ORBTYPE_RESTRICTED, GABEDIT_ORBTYPE_MCSCF, GABEDIT_ORBTYPE_EIGENVECTORS, GABEDIT_ORBTYPE_BOYS_ALPHA, GABEDIT_ORBTYPE_BOYS_BETA, GABEDIT_ORBTYPE_BOYS, GABEDIT_ORBTYPE_EDMISTON_ALPHA, GABEDIT_ORBTYPE_EDMISTON_BETA, GABEDIT_ORBTYPE_EDMISTON, GABEDIT_ORBTYPE_PIPEK_ALPHA, GABEDIT_ORBTYPE_PIPEK_BETA, GABEDIT_ORBTYPE_PIPEK, } GabEditOrbType; static gchar* titlesOrb[GABEDIT_ORBTYPE_PIPEK+1]= { "Final Alpha Molecular Orbital Analysis", "Final Beta Molecular Orbital Analysis", "Final Molecular Orbital Analysis", "MCSCF OPTIMIZED ORBITALS", "EIGENVECTORS", "***** ALPHA ORBITAL LOCALIZATION *****", "****** BETA ORBITAL LOCALIZATION *****", "THE BOYS LOCALIZED ORBITALS ARE", "***** ALPHA ORBITAL LOCALIZATION *****", "****** BETA ORBITAL LOCALIZATION *****", "EDMISTON-RUEDENBERG ENERGY LOCALIZED ORBITALS", "***** ALPHA ORBITAL LOCALIZATION *****", "****** BETA ORBITAL LOCALIZATION *****", "THE PIPEK-MEZEY POPULATION LOCALIZED ORBITALS ARE" }; /********************************************************************************/ static gboolean sphericalBasis = FALSE; /********************************************************************************/ static gulong read_geomorb_nwchem_file_geom(gchar *FileName) { gulong lineg = gl_read_nwchem_file_geomi(FileName,-1); if(Ncenters != 0 ) { DefineType(); /* PrintGeomOrb();*/ } return lineg; } /********************************************************************************/ static void DefineNWChemCartBasis() { gint i,j,k,n; gint l1,l2,l3; gint L; gint *l[3]={NULL,NULL,NULL}; gint m; NAOrb = 0; for(i=0;i=0;l3--) for(l2=Type[GeomOrb[i].NumType].Ao[j].L-l3;l2>=0;l2--) { l1 = Type[GeomOrb[i].NumType].Ao[j].L-l2-l3; l[0][m] = l1; l[1][m] = l2; l[2][m] = l3; m++; } } for(m=0;m<(L+1)*(L+2)/2;m++) { l1 = l[0][m]; l2 = l[1][m]; l3 = l[2][m]; k++; AOrb[k].numberOfFunctions=Type[GeomOrb[i].NumType].Ao[j].N; AOrb[k].NumCenter = i; AOrb[k].Gtf =g_malloc(AOrb[k].numberOfFunctions*sizeof(GTF)); for(n=0;n=klend);kl +=klinc) { M = kl; k++; Stemp = getZlm(L,M); temp[k].numberOfFunctions=Stemp.numberOfCoefficients*Type[GeomOrb[i].NumType].Ao[j].N; temp[k].NumCenter=i; temp[k].Gtf =g_malloc(temp[k].numberOfFunctions*sizeof(GTF)); Nc=-1; for(N=0;N0) NAlphaOcc++; NAlphaOrb = NOrb; break; case GABEDIT_ORBTYPE_BETA : case GABEDIT_ORBTYPE_BOYS_BETA: case GABEDIT_ORBTYPE_EDMISTON_BETA: case GABEDIT_ORBTYPE_PIPEK_BETA: CoefBetaOrbitals = CoefOrbitals; EnerBetaOrbitals = EnerOrbitals; SymBetaOrbitals = SymOrbitals; OccBetaOrbitals = OccOrbitals; NBetaOcc = 0; for(i=0;i0) NBetaOcc++; NBetaOrb = NOrb; break; case GABEDIT_ORBTYPE_RESTRICTED: case GABEDIT_ORBTYPE_MCSCF: case GABEDIT_ORBTYPE_EIGENVECTORS: case GABEDIT_ORBTYPE_BOYS: case GABEDIT_ORBTYPE_EDMISTON: case GABEDIT_ORBTYPE_PIPEK: CoefAlphaOrbitals = CoefOrbitals; EnerAlphaOrbitals = EnerOrbitals; SymAlphaOrbitals = SymOrbitals; OccAlphaOrbitals = OccOrbitals; NAlphaOcc = 0; for(i=0;i0) NAlphaOcc++; for(i=0;i=0 && j<=NOrb) CoefOrbitals[i][j-1]=c; if(strlen(t)>44) { k = sscanf(t+40,"%d %lf", &j, &c); if(k==2 && j>=0 && j<=NOrb) CoefOrbitals[i][j-1]=c; } } } /* Debug("End ncart\n");*/ }while(!feof(fd)); /* Debug("End of read \n");*/ fclose(fd); g_free(t); g_free(dum); CoefAlphaOrbitals = CoefOrbitals; EnerAlphaOrbitals = EnerOrbitals; return TRUE; } /********************************************************************************/ void read_nwchem_orbitals(gchar* FileName) { gint typefile; gchar *t = NULL; gint nrs = 0; gchar** strbasis=NULL; gint i; gboolean Ok; GabEditOrbLocalType typeLocal; gint typebasis = -1; /* gint j,jj; */ gulong lineg = 0; typefile =get_type_file_orb(FileName); if(typefile==GABEDIT_TYPEFILE_UNKNOWN) return; if(typefile != GABEDIT_TYPEFILE_NWCHEM) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not read this format from '%s' file\n"),FileName); Message(buffer,_("Error"),TRUE); return ; } free_data_all(); t = get_name_file(FileName); set_status_label_info(_("File name"),t); g_free(t); set_status_label_info(_("File type"),"NWChem"); set_status_label_info(_("Mol. Orb."),"Reading"); free_orbitals(); typebasis = get_type_basis_in_nwchem_file(FileName); if(typebasis == -1) { gchar buffer[BSIZE]; sprintf(buffer, _( "Sorry, Gabedit does not support mixed spherical and contaminant cartezian basis functions\n\n" ) ); Message(buffer,_("Error"),TRUE); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); set_status_label_info(_("Mol. Orb."),_("Nothing")); return; } lineg = read_geomorb_nwchem_file_geom(FileName); if(lineg == 0) { free_geometry(); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); set_status_label_info(_("Mol. Orb."),_("Nothing")); return; } strbasis=read_basis_from_a_nwchem_output_file(FileName, &nrs,lineg); /* printf("nrs=%d\n",nrs);*/ if(strbasis==NULL) { if(GeomOrb) { init_atomic_orbitals(); for(i=0;i #define STICKSIZE 0.2 #define STICKSIZEBALL 0.7 typedef struct _RGB { /* Red Green Blue */ gdouble Colors[3]; }RGB; typedef struct _XYZRC { /* X=C[0], Y=C[1], Z =C[2] Radius=C[3] */ gdouble C[4]; /* RGB Colors */ RGB P; }XYZRC; /********************************************************************************/ static gboolean degenerated_cylinder(gdouble* v1, gdouble* v2) { gdouble d = 0; gint i; for(i=0;i<3;i++) d += (v1[i]-v2[i])*(v1[i]-v2[i]); if(dGeomOrb[i].C[k]) min = GeomOrb[i].C[k]; min -=20; return min; } /********************************************************************************/ static gint get_num_min_rayonIJ(gint i, gint j) { if(GeomOrb[i].Prop.radii;\n" "#declare CBas2_A%d = <%lf, %lf, %lf>;\n" "#declare Col1_A%d = <%lf, %lf, %lf>;\n" "#declare Col2_A%d = <%lf, %lf, %lf>;\n" "object\n" "{\n" "\tarrow (CBas1_A%d, CBas2_A%d, %lf, Col1_A%d, Col2_A%d)\n" "}\n", i, C1.C[0], C1.C[1], C1.C[2], i, C2.C[0], C2.C[1], C2.C[2], i,C1.P.Colors[0],C1.P.Colors[1],C1.P.Colors[2], i,C2.P.Colors[0],C2.P.Colors[1],C2.P.Colors[2], i,i,ep,i,i ); else temp = g_strdup(" "); return temp; } /********************************************************************************/ static gchar *get_pov_vibration() { gchar *temp=NULL; gchar *tempold=NULL; gchar *t=NULL; gint m = rowSelected; gint j; gdouble x0, y0, z0; gdouble x1, y1, z1; if(!ShowVibration || m<0) return g_strdup( " "); temp = g_strdup( "// Vibration arrows \n"); for(j=0;j;\n" "#declare CDipole2 = <%lf, %lf, %lf>;\n" "#declare ColDipole1 = <%lf, %lf, %lf>;\n" "#declare ColDipole2 = <%lf, %lf, %lf>;\n" "object\n" "{\n" "\tarrow (CDipole1, CDipole2, %lf, ColDipole1, ColDipole2)\n" "}\n", C1.C[0],C1.C[1],C1.C[2], C2.C[0],C2.C[1],C2.C[2], C1.P.Colors[0],C1.P.Colors[1],C1.P.Colors[2], C2.P.Colors[0],C2.P.Colors[1],C2.P.Colors[2], ep ); else temp = g_strdup(" "); return temp; } /********************************************************************************/ static gchar *get_pov_xyz_axes() { gboolean show; gboolean negative; gdouble origin[3]; gdouble originX[3]; gdouble originY[3]; gdouble originZ[3]; gdouble radius; gdouble scale; gdouble xColor[3]; gdouble yColor[3]; gdouble zColor[3]; gdouble vectorX[3] = {1,0,0}; gdouble vectorY[3] = {0,1,0}; gdouble vectorZ[3] = {0,0,1}; gint i; gchar* temp; getAxisProperties(&show, &negative, origin, &radius, &scale, xColor, yColor, zColor); if(!show) return NULL; for(i=0;i<3;i++) vectorX[i] *= scale; for(i=0;i<3;i++) vectorY[i] *= scale; for(i=0;i<3;i++) vectorZ[i] *= scale; for(i=0;i<3;i++) originX[i] = origin[i]; for(i=0;i<3;i++) originY[i] = origin[i]; for(i=0;i<3;i++) originZ[i] = origin[i]; if(negative) { for(i=0;i<3;i++) originX[i] -=vectorX[i]; for(i=0;i<3;i++) originY[i] -=vectorY[i]; for(i=0;i<3;i++) originZ[i] -=vectorZ[i]; for(i=0;i<3;i++) vectorX[i] = originX[i]+2*vectorX[i]; for(i=0;i<3;i++) vectorY[i] = originY[i]+2*vectorY[i]; for(i=0;i<3;i++) vectorZ[i] = originZ[i]+2*vectorZ[i]; } else { for(i=0;i<3;i++) vectorX[i] += originX[i]; for(i=0;i<3;i++) vectorY[i] += originY[i]; for(i=0;i<3;i++) vectorZ[i] += originZ[i]; } temp = g_strdup_printf( "// XYZ Axes\n" "#declare COriginAxes1 = <%lf, %lf, %lf>;\n" "#declare COriginAxes2 = <%lf, %lf, %lf>;\n" "#declare COriginAxes3 = <%lf, %lf, %lf>;\n" "#declare CTeteAxes1 = <%lf, %lf, %lf>;\n" "#declare CTeteAxes2 = <%lf, %lf, %lf>;\n" "#declare CTeteAxes3 = <%lf, %lf, %lf>;\n" "#declare ColorAxes1 = <%lf, %lf, %lf>;\n" "#declare ColorConeAxes1 = <%lf, %lf, %lf>;\n" "#declare ColorAxes2 = <%lf, %lf, %lf>;\n" "#declare ColorConeAxes2 = <%lf, %lf, %lf>;\n" "#declare ColorAxes3 = <%lf, %lf, %lf>;\n" "#declare ColorConeAxes3 = <%lf, %lf, %lf>;\n" "#declare AxesRadius = %lf;\n" "object\n" "{\n" "\tarrow (COriginAxes1, CTeteAxes1, AxesRadius, ColorAxes1, ColorConeAxes1)\n" "}\n" "object\n" "{\n" "\tarrow (COriginAxes2, CTeteAxes2, AxesRadius, ColorAxes2, ColorConeAxes2)\n" "}\n" "object\n" "{\n" "\tarrow (COriginAxes3, CTeteAxes3, AxesRadius, ColorAxes3, ColorConeAxes3)\n" "}\n", originX[0],originX[1],originX[2], originY[0],originY[1],originY[2], originZ[0],originZ[1],originZ[2], vectorX[0],vectorX[1],vectorX[2], vectorY[0],vectorY[1],vectorY[2], vectorZ[0],vectorZ[1],vectorZ[2], xColor[0],xColor[1],xColor[2], xColor[0]/2,xColor[1]/2,xColor[2]/2, yColor[0],yColor[1],yColor[2], yColor[0]/2,yColor[1]/2,yColor[2]/2, zColor[0],zColor[1],zColor[2], zColor[0]/2,zColor[1]/2,zColor[2]/2, radius/2 ); return temp; } /********************************************************************************/ static gchar *get_pov_principal_axes() { gboolean show; gboolean negative; gboolean def; gdouble origin[3]; gdouble firstOrigin[3]; gdouble secondOrigin[3]; gdouble thirdOrigin[3]; gdouble radius; gdouble scale; gdouble firstColor[3]; gdouble secondColor[3]; gdouble thirdColor[3]; gdouble firstVector[3] = {1,0,0}; gdouble secondVector[3] = {0,1,0}; gdouble thirdVector[3] = {0,0,1}; gint i; gchar* temp = NULL; getPrincipalAxisProperties(&show,&negative, &def, origin, &radius, &scale, firstVector,secondVector,thirdVector, firstColor,secondColor, thirdColor); if(!def || !show) return NULL; for(i=0;i<3;i++) firstVector[i] *= scale; for(i=0;i<3;i++) secondVector[i] *= scale; for(i=0;i<3;i++) thirdVector[i] *= scale; for(i=0;i<3;i++) firstOrigin[i] = origin[i]; for(i=0;i<3;i++) secondOrigin[i] = origin[i]; for(i=0;i<3;i++) thirdOrigin[i] = origin[i]; if(negative) { for(i=0;i<3;i++) firstOrigin[i] -=firstVector[i]; for(i=0;i<3;i++) secondOrigin[i] -=secondVector[i]; for(i=0;i<3;i++) thirdOrigin[i] -=thirdVector[i]; for(i=0;i<3;i++) firstVector[i] = 2*firstVector[i]+firstOrigin[i]; for(i=0;i<3;i++) secondVector[i] = 2*secondVector[i]+secondOrigin[i]; for(i=0;i<3;i++) thirdVector[i] = 2*thirdVector[i]+thirdOrigin[i]; } else { for(i=0;i<3;i++) firstVector[i] = firstVector[i]+firstOrigin[i]; for(i=0;i<3;i++) secondVector[i] = secondVector[i]+secondOrigin[i]; for(i=0;i<3;i++) thirdVector[i] = thirdVector[i]+thirdOrigin[i]; } temp = g_strdup_printf( "// Principal Axes\n" "#declare COriginPrincipalAxe1 = <%lf, %lf, %lf>;\n" "#declare COriginPrincipalAxe2 = <%lf, %lf, %lf>;\n" "#declare COriginPrincipalAxe3 = <%lf, %lf, %lf>;\n" "#declare CTetePrincipalAxe1 = <%lf, %lf, %lf>;\n" "#declare CTetePrincipalAxe2 = <%lf, %lf, %lf>;\n" "#declare CTetePrincipalAxe3 = <%lf, %lf, %lf>;\n" "#declare ColorPrincipalAxe1 = <%lf, %lf, %lf>;\n" "#declare ColorConePrincipalAxe1 = <%lf, %lf, %lf>;\n" "#declare ColorPrincipalAxe2 = <%lf, %lf, %lf>;\n" "#declare ColorConePrincipalAxe2 = <%lf, %lf, %lf>;\n" "#declare ColorPrincipalAxe3 = <%lf, %lf, %lf>;\n" "#declare ColorConePrincipalAxe3 = <%lf, %lf, %lf>;\n" "#declare PrincipalAxeRadius = %lf;\n" "object\n" "{\n" "\tarrow (COriginPrincipalAxe1, CTetePrincipalAxe1, PrincipalAxeRadius, ColorPrincipalAxe1, ColorConePrincipalAxe1)\n" "}\n" "object\n" "{\n" "\tarrow (COriginPrincipalAxe2, CTetePrincipalAxe2, PrincipalAxeRadius, ColorPrincipalAxe2, ColorConePrincipalAxe2)\n" "}\n" "object\n" "{\n" "\tarrow (COriginPrincipalAxe3, CTetePrincipalAxe3, PrincipalAxeRadius, ColorPrincipalAxe3, ColorConePrincipalAxe3)\n" "}\n", firstOrigin[0],firstOrigin[1],firstOrigin[2], secondOrigin[0],secondOrigin[1],secondOrigin[2], thirdOrigin[0],thirdOrigin[1],thirdOrigin[2], firstVector[0],firstVector[1],firstVector[2], secondVector[0],secondVector[1],secondVector[2], thirdVector[0],thirdVector[1],thirdVector[2], firstColor[0],firstColor[1],firstColor[2], firstColor[0]/2,firstColor[1]/2,firstColor[2]/2, secondColor[0],secondColor[1],secondColor[2], secondColor[0]/2,secondColor[1]/2,secondColor[2]/2, thirdColor[0],thirdColor[1],thirdColor[2], thirdColor[0]/2,thirdColor[1]/2,thirdColor[2]/2, radius/2 ); return temp; } /********************************************************************************/ static gchar *get_pov_ball(gint num, gdouble scale) { gchar *temp; XYZRC Center = get_prop_center(num,1.0); temp = g_strdup_printf( "sphere\n" "{\n" "\t<%14.6f,%14.6f,%14.6f> %14.6f\n" "\ttexture\n" "\t{\n" "\t\tpigment { rgb<%14.6f,%14.6f,%14.6f> }\n" "\t\tfinish {ambient ambientCoef diffuse diffuseCoef specular specularCoef}\n" "\t}\n" "}\n" , Center.C[0],Center.C[1],Center.C[2],Center.C[3]*scale, Center.P.Colors[0], Center.P.Colors[1], Center.P.Colors[2] ); return temp; } /********************************************************************************/ static gchar *get_pov_cylingre(gdouble C1[],gdouble C2[],gdouble Colors[],gdouble ep) { gchar* temp = NULL; gint i; gdouble d = 0; for(i=0;i<3;i++) d += (C1[i]-C2[i])*(C1[i]-C2[i]); if(d<1e-8) return g_strdup("\n"); temp = g_strdup_printf( "cylinder\n" "{\n" "\t<%14.6f,%14.6f,%14.6f>,\n" "\t<%14.6f,%14.6f,%14.6f> \n" "\t%14.6f\n" "\ttexture\n" "\t{\n" "\t\tpigment { rgb<%14.6f,%14.6f,%14.6f> }\n" "\t\tfinish {ambient ambientCoef diffuse diffuseCoef specular specularCoef}\n" "\t}\n" "}\n", C1[0],C1[1],C1[2], C2[0],C2[1],C2[2], ep, Colors[0],Colors[1],Colors[2] ); return temp; } /********************************************************************************/ static gchar *get_pov_one_stick(gint i,gint j, GabEditBondType bondType) { gchar *temp; gchar *temp1; gchar *temp2; XYZRC Center1; XYZRC Center2; gint l; /* gint k;*/ gdouble ep; gdouble poid1; gdouble poid2; gdouble poid; gdouble C[3]; V3d CC1; V3d CC2; Center1 = get_prop_center(i, 1.0); Center2 = get_prop_center(j, 1.0); /* k =get_num_min_rayonIJ(i,j); if(k==i) ep = Center1.C[3]; else ep = Center2.C[3]; */ ep = STICKSIZEBALL; /* if(TypeGeom == GABEDIT_TYPEGEOM_STICK ) ep /=4;*/ if(TypeGeom == GABEDIT_TYPEGEOM_STICK ) ep =STICKSIZE; else ep/=2; if(TypeGeom==GABEDIT_TYPEGEOM_WIREFRAME ) ep =STICKSIZE/2; ep *= getScaleStick(); poid1 = GeomOrb[i].Prop.covalentRadii+GeomOrb[i].Prop.radii; poid2 = GeomOrb[j].Prop.covalentRadii+GeomOrb[j].Prop.radii; poid = poid1 + poid2 ; for(l=0;l<3;l++) CC1[l] =Center1.C[l]; for(l=0;l<3;l++) CC2[l] =Center2.C[l]; if(bondType == GABEDIT_BONDTYPE_SINGLE || !ShowMultiBondsOrb) { for(l=0;l<3;l++) C[l] =(Center1.C[l]*poid2+Center2.C[l]*poid1)/poid; temp1 = get_pov_cylingre(Center1.C,C,Center1.P.Colors,ep); temp2 = get_pov_cylingre(C,Center2.C,Center2.P.Colors,ep); temp = g_strdup_printf("%s%s",temp1,temp2); g_free(temp1); g_free(temp2); } else if(bondType == GABEDIT_BONDTYPE_DOUBLE && TypeGeom == GABEDIT_TYPEGEOM_STICK) { gchar* temp3; V3d vScal = {ep*1.5,ep*1.5,ep*1.5}; gdouble C1[3]; gdouble C2[3]; V3d cros; V3d sub; V3d CRing; gdouble C10[3]; gdouble C20[3]; getCentreRing(i,j, CRing); v3d_sub(CRing, CC1, C10); v3d_sub(CRing, CC2, C20); v3d_cross(C10, C20, cros); v3d_sub(CC1, CC2, sub); v3d_cross(cros, sub, vScal); if(v3d_dot(vScal,vScal)!=0) { v3d_normal(vScal); v3d_scale(vScal, ep*1.5); } else getvScaleBond(ep*1.5*2, C10,C20, vScal); for(l=0;l<3;l++) C1[l] = Center1.C[l]; for(l=0;l<3;l++) C2[l] = Center2.C[l]; for(l=0;l<3;l++) C[l] =(C1[l]*poid2+C2[l]*poid1)/poid; temp1 = get_pov_cylingre(C1,C,Center1.P.Colors,ep); temp2 = get_pov_cylingre(C,C2,Center2.P.Colors,ep); temp = g_strdup_printf("%s%s",temp1,temp2); g_free(temp1); g_free(temp2); for(l=0;l<3;l++) C1[l] = Center1.C[l]-vScal[l]; for(l=0;l<3;l++) C2[l] = Center2.C[l]-vScal[l]; for(l=0;l<3;l++) C[l] =(C1[l]*poid2+C2[l]*poid1)/poid; temp1 = get_pov_cylingre(C1,C,Center1.P.Colors,ep/3); temp2 = get_pov_cylingre(C,C2,Center2.P.Colors,ep/3); temp3 = temp; temp = g_strdup_printf("%s%s%s",temp3,temp1,temp2); g_free(temp1); g_free(temp2); g_free(temp3); } else if(bondType == GABEDIT_BONDTYPE_TRIPLE && TypeGeom == GABEDIT_TYPEGEOM_STICK) { gchar* temp3; V3d vScal = {ep*1.5,ep*1.5,ep*1.5}; gdouble C1[3]; gdouble C2[3]; V3d cros; V3d sub; V3d CRing; gdouble C10[3]; gdouble C20[3]; getCentreRing(i,j, CRing); v3d_sub(CRing, CC1, C10); v3d_sub(CRing, CC2, C20); v3d_cross(C10, C20, cros); v3d_sub(CC1, CC2, sub); v3d_cross(cros, sub, vScal); if(v3d_dot(vScal,vScal)!=0) { v3d_normal(vScal); v3d_scale(vScal, ep*1.5); } else getvScaleBond(ep*1.5*2, C10,C20, vScal); for(l=0;l<3;l++) C1[l] = Center1.C[l]-vScal[l]; for(l=0;l<3;l++) C2[l] = Center2.C[l]-vScal[l]; for(l=0;l<3;l++) C[l] =(C1[l]*poid2+C2[l]*poid1)/poid; temp1 = get_pov_cylingre(C1,C,Center1.P.Colors,ep/3); temp2 = get_pov_cylingre(C,C2,Center2.P.Colors,ep/3); temp = g_strdup_printf("%s%s",temp1,temp2); g_free(temp1); g_free(temp2); for(l=0;l<3;l++) C1[l] = Center1.C[l]; for(l=0;l<3;l++) C2[l] = Center2.C[l]; for(l=0;l<3;l++) C[l] =(C1[l]*poid2+C2[l]*poid1)/poid; temp1 = get_pov_cylingre(C1,C,Center1.P.Colors,ep); temp2 = get_pov_cylingre(C,C2,Center2.P.Colors,ep); temp3 = temp; temp = g_strdup_printf("%s%s%s",temp3,temp1,temp2); g_free(temp3); g_free(temp1); g_free(temp2); for(l=0;l<3;l++) C1[l] = Center1.C[l]+vScal[l]; for(l=0;l<3;l++) C2[l] = Center2.C[l]+vScal[l]; for(l=0;l<3;l++) C[l] =(C1[l]*poid2+C2[l]*poid1)/poid; temp1 = get_pov_cylingre(C1,C,Center1.P.Colors,ep/3); temp2 = get_pov_cylingre(C,C2,Center2.P.Colors,ep/3); temp3 = temp; temp = g_strdup_printf("%s%s%s",temp3,temp1,temp2); g_free(temp3); g_free(temp1); g_free(temp2); } else if(bondType == GABEDIT_BONDTYPE_DOUBLE) { gchar* temp3; V3d vScal = {ep*0.5,ep*0.5,ep*0.5}; gdouble C1[3]; gdouble C2[3]; V3d cros; V3d sub; V3d CRing; gdouble C10[3]; gdouble C20[3]; getCentreRing(i,j, CRing); v3d_sub(CRing, CC1, C10); v3d_sub(CRing, CC2, C20); v3d_cross(C10, C20, cros); v3d_sub(CC1, CC2, sub); v3d_cross(cros, sub, vScal); if(v3d_dot(vScal,vScal)!=0) { v3d_normal(vScal); v3d_scale(vScal, ep*0.5); } else getvScaleBond(ep*0.5*2, C10,C20, vScal); for(l=0;l<3;l++) C1[l] = Center1.C[l]-vScal[l]; for(l=0;l<3;l++) C2[l] = Center2.C[l]-vScal[l]; for(l=0;l<3;l++) C[l] =(C1[l]*poid2+C2[l]*poid1)/poid; temp1 = get_pov_cylingre(C1,C,Center1.P.Colors,ep/3); temp2 = get_pov_cylingre(C,C2,Center2.P.Colors,ep/3); temp = g_strdup_printf("%s%s",temp1,temp2); g_free(temp1); g_free(temp2); for(l=0;l<3;l++) C1[l] = Center1.C[l]+vScal[l]; for(l=0;l<3;l++) C2[l] = Center2.C[l]+vScal[l]; for(l=0;l<3;l++) C[l] =(C1[l]*poid2+C2[l]*poid1)/poid; temp1 = get_pov_cylingre(C1,C,Center1.P.Colors,ep/3); temp2 = get_pov_cylingre(C,C2,Center2.P.Colors,ep/3); temp3 = temp; temp = g_strdup_printf("%s%s%s",temp3,temp1,temp2); g_free(temp1); g_free(temp2); g_free(temp3); } else if(bondType == GABEDIT_BONDTYPE_TRIPLE) { gchar* temp3; V3d vScal = {ep*0.5,ep*0.5,ep*0.5}; gdouble C1[3]; gdouble C2[3]; V3d cros; V3d sub; V3d CRing; gdouble C10[3]; gdouble C20[3]; getCentreRing(i,j, CRing); v3d_sub(CRing, CC1, C10); v3d_sub(CRing, CC2, C20); v3d_cross(C10, C20, cros); v3d_sub(CC1, CC2, sub); v3d_cross(cros, sub, vScal); if(v3d_dot(vScal,vScal)!=0) { v3d_normal(vScal); v3d_scale(vScal, ep*0.5*2); } else getvScaleBond(ep*0.5*2*2, C10,C20, vScal); for(l=0;l<3;l++) C1[l] = Center1.C[l]-vScal[l]; for(l=0;l<3;l++) C2[l] = Center2.C[l]-vScal[l]; for(l=0;l<3;l++) C[l] =(C1[l]*poid2+C2[l]*poid1)/poid; temp1 = get_pov_cylingre(C1,C,Center1.P.Colors,ep/3); temp2 = get_pov_cylingre(C,C2,Center2.P.Colors,ep/3); temp = g_strdup_printf("%s%s",temp1,temp2); g_free(temp1); g_free(temp2); for(l=0;l<3;l++) C1[l] = Center1.C[l]; for(l=0;l<3;l++) C2[l] = Center2.C[l]; for(l=0;l<3;l++) C[l] =(C1[l]*poid2+C2[l]*poid1)/poid; temp1 = get_pov_cylingre(C1,C,Center1.P.Colors,ep/3); temp2 = get_pov_cylingre(C,C2,Center2.P.Colors,ep/3); temp3 = temp; temp = g_strdup_printf("%s%s%s",temp3,temp1,temp2); g_free(temp3); g_free(temp1); g_free(temp2); for(l=0;l<3;l++) C1[l] = Center1.C[l]+vScal[l]; for(l=0;l<3;l++) C2[l] = Center2.C[l]+vScal[l]; for(l=0;l<3;l++) C[l] =(C1[l]*poid2+C2[l]*poid1)/poid; temp1 = get_pov_cylingre(C1,C,Center1.P.Colors,ep/3); temp2 = get_pov_cylingre(C,C2,Center2.P.Colors,ep/3); temp3 = temp; temp = g_strdup_printf("%s%s%s",temp3,temp1,temp2); g_free(temp3); g_free(temp1); g_free(temp2); } else temp = g_strdup_printf(" "); return temp; } /********************************************************************************/ static gchar *get_pov_one_hbond(gint i,gint j) { gchar *temp; XYZRC Center1; XYZRC Center2; gint l; gint k; gdouble ep; gdouble poid1; gdouble poid2; gdouble poid; gint n = 10; gdouble A[3]; gdouble B[3]; gdouble K[3]; gchar *dump; gchar *temp1; gint ibreak; Center1 = get_prop_center(i, 1.0); Center2 = get_prop_center(j, 1.0); k =get_num_min_rayonIJ(i,j); if(k==i) ep = Center1.C[3]; else ep = Center2.C[3]; if(TypeGeom == GABEDIT_TYPEGEOM_STICK ) ep /=4; else ep/=2; if(TypeGeom==GABEDIT_TYPEGEOM_WIREFRAME ) ep /=4; poid1 = GeomOrb[i].Prop.covalentRadii+GeomOrb[i].Prop.radii; poid2 = GeomOrb[j].Prop.covalentRadii+GeomOrb[j].Prop.radii; poid = poid1 + poid2 ; ibreak = (gint)(poid1*n/poid); for(l=0;l<3;l++) K[l] =(Center2.C[l]-Center1.C[l])/(n*5/3); for(l=0;l<3;l++) A[l] =Center1.C[l]; temp = NULL; for(i=0;i\n" "}\n\n", m[0][0],m[0][1],m[0][2], m[1][0],m[1][1],m[1][2], m[2][0],m[2][1],m[2][2], m[3][0],m[3][1],m[3][2] ); return temp; } /********************************************************************************/ static gchar *get_pov_declare_arrow() { gchar *temp; temp = g_strdup( "// arrow\n" "#macro arrow (P1, P2, r, C1, C2) \n" "\tunion {\n" "\t\tcylinder\n" "\t\t{\n" "\t\t\tP1,P2,r\n" "\t\t\ttexture\n" "\t\t\t{\n" "\t\t\t\tpigment { rgb C1}\n" "\t\t\t\tfinish {ambient ambientCoef diffuse diffuseCoef specular specularCoef}\n" "\t\t\t}\n" "\t\t}\n" "\t\tcone\n" "\t\t{\n" "\t\t\tP2,r*2.0/1.5,P2+(P2-P1)*4*r/vlength(P2-P1),0\n" "\t\t\ttexture\n" "\t\t\t{\n" "\t\t\t\tpigment { rgb C2}\n" "\t\t\t\tfinish {ambient ambientCoef diffuse diffuseCoef specular specularCoef}\n" "\t\t\t}\n" "\t\t}\n" "\t\tno_shadow\n" "\t}\n" "#end\n" "\n" ); return temp; } /********************************************************************************/ static gchar *get_pov_declare_threeCylinders_wireframe() { gchar *temp; temp = g_strdup( "// TriangleCylinders\n" "#macro threeCylinders ( P1, P2, P3, r) \n" "\tunion {\n" "\t\t#if (vlength(P1-P2)>0)\n" "\t\t\tcylinder { P1 , P2, r}\n" "\t\t#end\n" "\t\t#if (vlength(P2-P3)>0)\n" "\t\t\tcylinder { P2 , P3, r}\n" "\t\t#end\n" "\t\t#if (vlength(P1-P3)>0)\n" "\t\t\tcylinder { P3 , P1, r}\n" "\t\t#end\n" "\t}\n" "#end\n" "\n" ); return temp; } /********************************************************************************/ static gchar *get_pov_declare_threeCylinders_wireframe_color() { gchar *temp; temp = g_strdup( "// TriangleCylindersColor\n" "#macro threeCylindersColor ( P1, P2, P3, C1, C2, C3, r) \n" "\tunion {\n" "\t\t#if (vlength(P1-P2)>0)\n" "\t\t\tcylinder { P1 , P2, r texture {pigment { rgb C1}} finish {ambient ambientCoef diffuse diffuseCoef specular specularCoef} }\n" "\t\t#end\n" "\t\t#if (vlength(P2-P3)>0)\n" "\t\t\tcylinder { P2 , P3, r texture {pigment { rgb C2}} finish {ambient ambientCoef diffuse diffuseCoef specular specularCoef} }\n" "\t\t#end\n" "\t\t#if (vlength(P1-P3)>0)\n" "\t\t\tcylinder { P3 , P1, r texture {pigment { rgb C3}} finish {ambient ambientCoef diffuse diffuseCoef specular specularCoef} }\n" "\t\t#end\n" "\t}\n" "#end\n" "\n" ); return temp; } /********************************************************************************/ static gchar *get_pov_camera() { gchar *temp; gdouble f = 5; gdouble position = 10; gdouble zn, zf, angle; gboolean perspective; gdouble aspect = 1.0; gdouble H = 100; gdouble W = 100; gdouble fov = 0; gdouble d = 0; gdouble origin[3]; get_camera_values(&zn, &zf, &angle, &aspect, &perspective); get_orgin_molecule(origin); fov = angle; position = zf/2; f = 0; d = zf-zn; if(d !=0) { H = 2*d*tan(PI/360*angle); W = aspect*H; fov = 360/PI*atan(W/2/d); } if(fov<0) fov = 360+fov; if(fov>180) fov = 179.99; if(perspective) temp = g_strdup_printf( "// CAMERA\n" "camera\n" "{\n" "\tright %0.14f *x\n" "\tup y\n" "\tdirection -z\n" "\tangle %0.14f\n" "\tlocation < 0.000000, 0.00000, %0.14f >\n" "\tlook_at < 0.000000, 0.00000, %0.14f >\n" "\ttranslate < %0.14f , %0.14f , 0.000000 >\n" "}\n\n", aspect, fov, position,f, -origin[0], -origin[1] ); else temp = g_strdup_printf( "// CAMERA\n" "camera\n" "{\torthographic\n" "\tright %0.14f *x\n" "\tup y\n" "\tdirection -z\n" "\tlocation < 0.000000, 0.00000, %14.8f >\n" "\t scale %0.14f\n" "\ttranslate < %0.14f , %0.14f , 0.000000 >\n" "}\n\n", aspect, position, angle, -origin[0], -origin[1] ); return temp; } /********************************************************************************/ static gchar *get_pov_light_source(gchar* title,gchar* color,gdouble x,gdouble y, gdouble z) { gchar *temp; temp = g_strdup_printf("%s%s\t<%10.6f,%10.6f,%10.6f>\n\tcolor %s\n}\n", title, "light_source\n" "{\n\n", x,y,z,color); return temp; } /********************************************************************************/ static gchar *get_pov_light_sources() { gchar *temp; gchar* dump1; gchar* dump2; gchar* dump3; gdouble v[3]; /* calcul of Ymax*/ if(get_light(0,v)) dump1 = get_pov_light_source("// LIGHT 1\n","0.6*White",v[0],v[1],v[2]); else dump1 = g_strdup(" "); if(get_light(1,v)) dump2 = get_pov_light_source("// LIGHT 2\n","0.6*White",v[0],v[1],v[2]); else dump2 = g_strdup(" "); if(get_light(2,v)) dump3 = get_pov_light_source("// LIGHT 3\n","0.6*White",v[0],v[1],v[2]); else dump3 = g_strdup(" "); temp = g_strdup_printf("%s %s %s",dump1, dump2,dump3); g_free(dump1); g_free(dump2); g_free(dump3); return temp; } /********************************************************************************/ static gchar *get_pov_begin_molecule() { gchar *temp; temp = g_strdup( "\n# declare molecule = union {\n"); return temp; } /********************************************************************************/ static gchar *get_pov_end_molecule() { gchar *temp; temp = g_strdup("transform { myTransforms }\n}\n\nobject {molecule}"); return temp; } /********************************************************************************/ static gchar *get_pov_atoms() { gchar *temp=NULL; gchar *tempold=NULL; gchar *t=NULL; gint i=0; temp = g_strdup( "// ATOMS \n"); for(i=0;i<(gint)Ncenters;i++) { if(!ShowHAtomOrb && strcmp("H",GeomOrb[i].Symb)==0) continue; tempold = temp; t =get_pov_ball(i,1.0*getScaleBall()); if(tempold) { temp = g_strdup_printf("%s%s",tempold,t); g_free(tempold); } else temp = g_strdup_printf("%s",t); if(t) g_free(t); } return temp; } /********************************************************************************/ static gchar *get_pov_ball_for_stick(gint num, gdouble radius) { gchar *temp; XYZRC Center = get_prop_center(num,1.0); temp = g_strdup_printf( "sphere\n" "{\n" "\t<%14.6f,%14.6f,%14.6f> %14.6f\n" "\ttexture\n" "\t{\n" "\t\tpigment { rgb<%14.6f,%14.6f,%14.6f> }\n" "\t\tfinish {ambient ambientCoef diffuse diffuseCoef specular specularCoef}\n" "\t}\n" "}\n" , Center.C[0],Center.C[1],Center.C[2], radius, Center.P.Colors[0], Center.P.Colors[1], Center.P.Colors[2] ); return temp; } /********************************************************************************/ static gchar *get_pov_atoms_for_stick() { gchar *temp=NULL; gchar *tempold=NULL; gchar *t=NULL; gint i=0; temp = g_strdup( "// ATOMS \n"); for(i=0;i<(gint)Ncenters;i++) { if(!ShowHAtomOrb && strcmp("H",GeomOrb[i].Symb)==0) continue; tempold = temp; if(TypeGeom==GABEDIT_TYPEGEOM_WIREFRAME) t =get_pov_ball_for_stick(i,STICKSIZE/2*getScaleStick()); else t =get_pov_ball_for_stick(i,STICKSIZE*getScaleStick()); if(tempold) { temp = g_strdup_printf("%s%s",tempold,t); g_free(tempold); } else temp = g_strdup_printf("%s",t); if(t) g_free(t); } return temp; } /********************************************************************************/ static gchar *get_pov_bonds() { gchar *temp = NULL; gint i,j; gchar* t; gchar* tempold; gboolean* Ok = NULL; GList* list = NULL; if(Ncenters>0) Ok = g_malloc(Ncenters*sizeof(gboolean)); for(i=0;i<(gint)Ncenters;i++) Ok[i] = FALSE; temp = g_strdup( "// BONDS \n"); for(list=BondsOrb;list!=NULL;list=list->next) { BondType* data=(BondType*)list->data; i = data->n1; j = data->n2; if(!ShowHAtomOrb && (strcmp("H",GeomOrb[i].Symb)==0 || strcmp("H",GeomOrb[j].Symb)==0)) continue; if(data->bondType == GABEDIT_BONDTYPE_HYDROGEN) { tempold = temp; t =get_pov_one_hbond(i,j); if(tempold) { temp = g_strdup_printf("%s%s",tempold,t); g_free(tempold); } else temp = g_strdup_printf("%s",t); } else { Ok[i] = TRUE; Ok[j] = TRUE; tempold = temp; t =get_pov_one_stick(i,j,data->bondType); if(tempold) { temp = g_strdup_printf("%s%s",tempold,t); g_free(tempold); } else temp = g_strdup_printf("%s",t); } } for(i=0;i<(gint)Ncenters;i++) if(!Ok[i]) { if(!ShowHAtomOrb && strcmp("H",GeomOrb[i].Symb)==0) continue; tempold = temp; t =get_pov_ball(i, 0.5*getScaleBall()); if(tempold) { temp = g_strdup_printf("%s%s",tempold,t); g_free(tempold); } else temp = g_strdup_printf("%s",t); if(t) g_free(t); } if(Ok) g_free(Ok); return temp; } /********************************************************************************/ static void save_pov_surfaces(FILE* file) { gchar* fileName = g_strdup_printf("%s%stmp%spovraySurfaces.pov",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar* fileNameLast = g_strdup_printf("%s%stmp%spovrayLastSurface.pov",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); FILE* fileSurfaces = fopen(fileName,"rb"); FILE* fileLastSurface = fopen(fileNameLast,"rb"); gchar* t = g_malloc(BSIZE*sizeof(gchar)); g_free(fileName); g_free(fileNameLast); if(!fileSurfaces) { g_free(t); return; } while(!feof(fileSurfaces)) { if(!fgets(t, BSIZE,fileSurfaces)) break; fprintf(file,"%s",t); } fclose(fileSurfaces); if(!fileLastSurface) { g_free(t); return; } while(!feof(fileLastSurface)) { if(!fgets(t, BSIZE,fileLastSurface)) break; fprintf(file,"%s",t); } fclose(fileLastSurface); g_free(t); } /********************************************************************************/ static void save_pov_contours(FILE* file) { gchar* fileName = g_strdup_printf("%s%stmp%spovrayContours.pov",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); FILE* fileContours = fopen(fileName,"rb"); gchar* t = g_malloc(BSIZE*sizeof(gchar)); g_free(fileName); if(!fileContours) { g_free(t); return; } while(!feof(fileContours)) { if(!fgets(t, BSIZE,fileContours)) break; fprintf(file,"%s",t); } fclose(fileContours); } /********************************************************************************/ static void save_pov_planes_mapped(FILE* file) { gchar* fileName = g_strdup_printf("%s%stmp%spovrayPlanesMapped.pov",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); FILE* filePlanesMapped = fopen(fileName,"rb"); gchar* t = g_malloc(BSIZE*sizeof(gchar)); g_free(fileName); if(!filePlanesMapped) { g_free(t); return; } while(!feof(filePlanesMapped)) { if(!fgets(t, BSIZE,filePlanesMapped)) break; fprintf(file,"%s",t); } fclose(filePlanesMapped); } /********************************************************************************/ static void save_pov_rings(FILE* file) { gchar* fileName = g_strdup_printf("%s%stmp%spovrayRings.pov",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); FILE* fileRings = fopen(fileName,"rb"); gchar* t = g_malloc(BSIZE*sizeof(gchar)); g_free(fileName); if(!fileRings) { g_free(t); return; } while(!feof(fileRings)) { if(!fgets(t, BSIZE,fileRings)) break; fprintf(file,"%s",t); } fclose(fileRings); } /********************************************************************************/ static gchar* create_povray_file(gchar* fileName, gboolean saveCamera, gboolean newCamera) { FILE* file; gchar* temp; static gchar message[1024]; static gchar* camera = NULL; static gchar* background = NULL; static gchar* light = NULL; if(!GLArea) { sprintf(message,"Sorry\n OpenGl window is not open"); return message; } if ((!fileName) || (strcmp(fileName,"") == 0)) { sprintf(message,"Sorry\n Problem with the name of file"); return message; } file = FOpen(fileName, "w"); if (!file) { sprintf(message,"Sorry\n I can not open %s file ",fileName); return message; } temp =get_pov_epilogue(); fprintf(file,"%s",temp); g_free(temp); temp = get_pov_matrix_transformation(); fprintf(file,"%s",temp); g_free(temp); temp = get_pov_declare_finish_option(); fprintf(file,"%s",temp); g_free(temp); temp = get_pov_declare_arrow(); fprintf(file,"%s",temp); g_free(temp); if(newCamera) { temp =get_pov_camera(); fprintf(file,"%s",temp); if(saveCamera) { if(camera) g_free(camera); camera = g_strdup(temp); } g_free(temp); } else { if(camera) fprintf(file,"%s",camera); else { printf("Erreur : No new camera et camera =NULL\n"); temp =get_pov_camera(); fprintf(file,"%s",temp); g_free(temp); } } if(newCamera) { temp = get_pov_light_sources(); fprintf(file,"%s",temp); if(saveCamera) { if(light) g_free(light); light = g_strdup(temp); } g_free(temp); } else { if(light) fprintf(file,"%s",light); else { printf("Erreur : No new camera et camera =NULL\n"); temp = get_pov_light_sources(); fprintf(file,"%s",temp); g_free(temp); } } if(newCamera) { gdouble xmin = get_min(0); gdouble ymin = get_min(1); gdouble zmin = get_min(2); temp = get_pov_background(xmin,ymin,zmin); fprintf(file,"%s",temp); if(saveCamera) { if(background) g_free(background); background = g_strdup(temp); } g_free(temp); } else { if(background) fprintf(file,"%s",background); else { gdouble xmin = get_min(0); gdouble ymin = get_min(1); gdouble zmin = get_min(2); printf("Erreur : No new camera and background =NULL\n"); temp = get_pov_background(xmin,ymin,zmin); fprintf(file,"%s",temp); g_free(temp); } } if(Ncenters<1) { fclose(file); return NULL; } temp = get_pov_begin_molecule(); fprintf(file,"%s",temp); g_free(temp); if(TypeGeom==GABEDIT_TYPEGEOM_BALLSTICK || TypeGeom==GABEDIT_TYPEGEOM_SPACE) { temp = get_pov_atoms(); fprintf(file,"%s",temp); g_free(temp); } else if(TypeGeom==GABEDIT_TYPEGEOM_STICK || TypeGeom==GABEDIT_TYPEGEOM_WIREFRAME) { temp = get_pov_atoms_for_stick(); fprintf(file,"%s",temp); g_free(temp); } if(TypeGeom==GABEDIT_TYPEGEOM_BALLSTICK || TypeGeom==GABEDIT_TYPEGEOM_STICK || TypeGeom==GABEDIT_TYPEGEOM_WIREFRAME) { temp = get_pov_bonds(); fprintf(file,"%s",temp); g_free(temp); } if(Dipole.def && ShowDipoleOrb) { temp = get_pov_dipole(); fprintf(file,"%s",temp); g_free(temp); } temp = get_pov_xyz_axes(); if(temp) { fprintf(file,"%s",temp); g_free(temp); } temp = get_pov_principal_axes(); if(temp) { fprintf(file,"%s",temp); g_free(temp); } temp = get_pov_vibration(); if(temp) { fprintf(file,"%s",temp); g_free(temp); } temp = get_pov_end_molecule(); fprintf(file,"%s",temp); g_free(temp); temp = get_pov_declare_surface_options(); fprintf(file,"%s",temp); g_free(temp); temp = get_pov_declare_threeCylinders_wireframe(); fprintf(file,"%s",temp); g_free(temp); temp = get_pov_declare_threeCylinders_wireframe_color(); fprintf(file,"%s",temp); g_free(temp); save_pov_surfaces(file); save_pov_contours(file); save_pov_planes_mapped(file); save_pov_rings(file); fclose(file); return NULL; } /********************************************************************************/ static void save_povray_file(GabeditFileChooser *w , gint response_id) { gchar *fileName; gchar* message = NULL; GtkWidget* m; if(response_id != GTK_RESPONSE_OK) return; if(!GLArea) return; fileName = gabedit_file_chooser_get_current_file(w); message = create_povray_file(fileName, FALSE, TRUE); if(message) { m = Message(message,"Error",TRUE); gtk_window_set_modal (GTK_WINDOW (m), TRUE); } } /**************************************************************************/ gchar* new_pov(gchar* dirname, int i) { gchar* fileName = g_strdup_printf("%s%sgab%d.pov",dirname,G_DIR_SEPARATOR_S,i); gchar* message; if(i==1) { gint j; for(j=0;j<100;j++) { gchar* filestoDelete = g_strdup_printf("%s%sgab%d.pov",dirname,G_DIR_SEPARATOR_S,j); unlink(filestoDelete); g_free(filestoDelete); } message = create_povray_file(fileName,TRUE,TRUE); } else message = create_povray_file(fileName,FALSE,FALSE); g_free(fileName); return message; } /********************************************************************************/ void create_save_povray_orb(GtkWidget* Win) { gchar* title = g_strdup_printf("Create a povray file"); gchar* patternsfiles[] = {"*","*.pov",NULL}; gchar* fileName = g_strdup_printf("gabedit.pov"); gchar* filter = g_strdup_printf("*.pov"); GtkWidget* win = choose_file_to_create(title, G_CALLBACK(save_povray_file)); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(win), patternsfiles); gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(win),filter); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(win),fileName); g_free(title); g_free(fileName); g_free(filter); } /********************************************************************************/ static void create_images_window (GtkWidget* parent, gchar* fileName, gint width, gint height) { GtkWidget *window; GtkWidget *scrolled_window; GtkWidget *table; GtkWidget *vbox; window = gtk_window_new(GTK_WINDOW_TOPLEVEL); vbox = create_vbox(window); g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); gtk_window_set_title (GTK_WINDOW (window), fileName); gtk_container_set_border_width (GTK_CONTAINER (window), 0); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 1); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0); gtk_widget_show (scrolled_window); table = gtk_table_new (1, 1, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 1); gtk_table_set_col_spacings (GTK_TABLE (table), 1); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); gtk_container_set_focus_hadjustment (GTK_CONTAINER (table), gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window))); gtk_container_set_focus_vadjustment (GTK_CONTAINER (table), gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window))); gtk_widget_show (table); { GtkWidget* image = gtk_image_new_from_file (fileName); if(image) gtk_table_attach(GTK_TABLE(table),image, 0,0+1,0,0+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_widget_show (image); } gtk_window_set_default_size (GTK_WINDOW (window), width+30, height+30); gtk_widget_realize(window); gtk_widget_show (window); gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); if(parent) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parent)); } } /*****************************************************************************/ static gboolean create_cmd_pov(G_CONST_RETURN gchar* command, gchar* fileNameCMD, gchar* fileNamePov, gchar* fileNameIMG) { gchar* commandStr = g_strdup(command); FILE* fcmd = NULL; fcmd = FOpen(fileNameCMD, "w"); if(!fcmd) { Message("\nI can not create cmd file\n ","Error",TRUE); return FALSE; } #ifndef G_OS_WIN32 fprintf(fcmd,"#!/bin/sh\n"); fprintf(fcmd,"rm %s\n",fileNameIMG); fprintf(fcmd,"%s +I%s +O%s\n",commandStr, fileNamePov, fileNameIMG); #else /* fprintf(fcmd,"setlocal\n");*/ fprintf(fcmd,"set PATH=\"%s\";%cPATH%c\n",povrayDirectory,'%','%'); fprintf(fcmd,"del %s\n",fileNameIMG); fprintf(fcmd,"%s +I%s +O%s\n",commandStr, fileNamePov, fileNameIMG); /* fprintf(fcmd,"endlocal");*/ #endif fclose(fcmd); #ifndef G_OS_WIN32 { gchar buffer[BSIZE]; sprintf(buffer,"chmod u+x %s",fileNameCMD); {int ierr = system(buffer);} } #endif if(commandStr) g_free(commandStr); return TRUE; } /*****************************************************************************/ static void exportPOVRay(GtkWidget* Win, gboolean runPovray) { gchar* fileNamePOV = NULL; gchar* fileNameIMG = NULL; gchar* fileNameCMD = NULL; GtkWidget *entryFileName = g_object_get_data(G_OBJECT (Win), "EntryFileName"); GtkWidget *buttonDirSelector =g_object_get_data(G_OBJECT (Win), "ButtonDirSelector"); GtkWidget *entryCommand = g_object_get_data(G_OBJECT (Win), "EntryCommand"); GtkWidget *parent = g_object_get_data(G_OBJECT (Win), "ParentWindow"); /* fileName */ if(entryFileName && buttonDirSelector ) { gchar* dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileName))); gint l = 0; gint i; if(tmp) l = strlen(tmp); for(i=l-1;i>=1;i--) if(tmp[i]=='.') tmp[i]='\0'; if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR) { fileNamePOV = g_strdup_printf("%s%s%s.pov",dirName, G_DIR_SEPARATOR_S,tmp); fileNameIMG = g_strdup_printf("%s%s%s.png",dirName, G_DIR_SEPARATOR_S,tmp); #ifndef G_OS_WIN32 fileNameCMD = g_strdup_printf("%s%s%s.cmd",dirName, G_DIR_SEPARATOR_S,tmp); #else fileNameCMD = g_strdup_printf("%s%s%s.bat",dirName, G_DIR_SEPARATOR_S,tmp); #endif } else { fileNamePOV = g_strdup_printf("%s%s.pov",dirName, tmp); fileNameIMG = g_strdup_printf("%s%s.png",dirName, tmp); #ifndef G_OS_WIN32 fileNameCMD = g_strdup_printf("%s%s.cmd",dirName, tmp); #else fileNameCMD = g_strdup_printf("%s%s.bat",dirName, tmp); #endif } g_free(tmp); g_free(dirName); } if(fileNamePOV) { applyPovrayOptions(NULL,NULL); gchar* message = create_povray_file(fileNamePOV, FALSE, TRUE); if(message) { GtkWidget *m = Message(message,"Error",TRUE); gtk_window_set_modal (GTK_WINDOW (m), TRUE); } else { G_CONST_RETURN gchar* command = gtk_entry_get_text(GTK_ENTRY(entryCommand)); if(create_cmd_pov(command, fileNameCMD, fileNamePOV, fileNameIMG)) { if(runPovray) { gint width = 500; gint height = 500; if(GLArea) { width = GLArea->allocation.width; height = GLArea->allocation.height; } gtk_widget_hide(Win); while( gtk_events_pending() ) gtk_main_iteration(); { int ierr = system(fileNameCMD);} create_images_window (parent,fileNameIMG, width, height); } else { gchar* t = g_strdup_printf( "\n2 files was created :\n" " -\"%s\" a povray input file\n" " -\"%s\" a batch file for run povray\n", fileNamePOV,fileNameCMD); GtkWidget* winDlg = Message(t,"Info",TRUE); gtk_window_set_modal (GTK_WINDOW (winDlg), TRUE); g_free(t); } } else { gchar* t = g_strdup_printf("\nSorry, I cannot create the %s file\n",fileNameCMD); GtkWidget* winDlg = Message(t,"Info",TRUE); gtk_window_set_modal (GTK_WINDOW (winDlg), TRUE); g_free(t); } } } gtk_widget_destroy(Win); } /*****************************************************************************/ static void savePOVRay(GtkWidget* Win, gpointer data) { gboolean runPovray = FALSE; exportPOVRay(Win, runPovray); } /*****************************************************************************/ static void runPOVRay(GtkWidget* Win, gpointer data) { gboolean runPovray = TRUE; exportPOVRay(Win, runPovray); } /**********************************************************************/ static void AddPOVRayLocationDlg(GtkWidget *box, GtkWidget *Win) { gint i = 0; gint j = 0; GtkWidget *label; GtkWidget *buttonDirSelector; GtkWidget *entryFileName; GtkWidget *table; table = gtk_table_new(2,3,FALSE); gtk_box_pack_start (GTK_BOX (box), table, TRUE, TRUE, 0); i++; j = 0; add_label_table(table,"Folder",(gushort)i,(gushort)j); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; buttonDirSelector = gabedit_dir_button(); /* gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (buttonDirSelector), g_getenv("PWD"));*/ gtk_widget_set_size_request(GTK_WIDGET(buttonDirSelector),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),buttonDirSelector, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; j = 0; add_label_table(table,"File name",(gushort)i,(gushort)j); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryFileName = gtk_entry_new(); gtk_table_attach(GTK_TABLE(table),entryFileName, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_entry_set_text(GTK_ENTRY(entryFileName),"gabeditPOV"); g_object_set_data(G_OBJECT (Win), "EntryFileName",entryFileName); g_object_set_data(G_OBJECT (Win), "ButtonDirSelector",buttonDirSelector); } /************************************************************************************************************/ static void AddPOVRayRunDlg(GtkWidget *box, GtkWidget *Win) { gint i = 0; gint j = 0; GtkWidget *entryCommand; GtkWidget *table; GtkWidget* label; gint width = 500; gint height = 500; gchar* tmp = NULL; if(GLArea) { width = GLArea->allocation.width; height = GLArea->allocation.height; } table = gtk_table_new(2,3,FALSE); gtk_box_pack_start (GTK_BOX (box), table, TRUE, TRUE, 0); i = 0; j = 0; label = gtk_label_new ("Command for run povray : "); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); j++; entryCommand = gtk_entry_new(); gtk_table_attach(GTK_TABLE(table),entryCommand, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), 1,1); tmp = g_strdup_printf("%s +W%d +H%d",NameCommandPovray, width,height); gtk_entry_set_text(GTK_ENTRY(entryCommand),tmp); g_free(tmp); g_object_set_data(G_OBJECT (Win), "EntryCommand",entryCommand); gtk_widget_set_size_request(GTK_WIDGET(entryCommand),400,-1); } /**********************************************************************/ void exportPOVDlg(GtkWidget *parentWindow) { GtkWidget *button; GtkWidget *Win; gchar* title = "POV Ray export"; GtkWidget *hseparator = NULL; Win= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow)); gtk_window_set_title(>K_DIALOG(Win)->window,title); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)gtk_widget_destroy,NULL); createPOVBackgroundFrame(GTK_WIDGET (GTK_DIALOG(Win)->vbox)); AddPOVRayLocationDlg(GTK_WIDGET (GTK_DIALOG(Win)->vbox), Win); hseparator = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->vbox), hseparator, TRUE, TRUE, 0); AddPOVRayRunDlg(GTK_WIDGET (GTK_DIALOG(Win)->vbox), Win); gtk_widget_realize(Win); button = create_button(Win,"Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,"Save"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)savePOVRay,GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,"Run PovRay"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPOVRay,GTK_OBJECT(Win)); gtk_widget_show (button); gtk_widget_show_all(Win); g_object_set_data(G_OBJECT (Win), "ParentWindow",parentWindow); } GabeditSrc250/src/Display/AnimationIsoSurface.c0000644000175100017510000006025013130665225021741 0ustar alloucheallouche/* AnimationIsoSurface.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "GlobalOrb.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Vector3d.h" #include "../Utils/Transformation.h" #include "../Display/StatusOrb.h" #include "../Display/GLArea.h" #include "../Display/AnimationIsoSurface.h" #include "../Display/ColorMap.h" #include "../Display/TriangleDraw.h" #include "../Files/FolderChooser.h" #include "../Files/GabeditFolderChooser.h" #include "../Common/Help.h" #include "../Display/Images.h" #include "../Display/PovrayGL.h" static GtkWidget *WinDlg = NULL; static GtkWidget *EntryVelocity = NULL; static GtkWidget *EntryNIsoSurface = NULL; static GtkWidget *EntryMinIsoValue = NULL; static GtkWidget *EntryMaxIsoValue = NULL; static GtkWidget *LabelNIsoSurface = NULL; static GtkWidget *LabelMinIso = NULL; static GtkWidget *LabelMaxIso = NULL; static GtkWidget *PlayButton = NULL; static GtkWidget *StopButton = NULL; static gboolean play = FALSE; static GtkWidget *buttonCheckFilm = NULL; static GtkWidget *buttonDirFilm = NULL; static GtkWidget* comboListFilm = NULL; static gboolean createFilm = FALSE; static gint numFileFilm = 0; static gchar formatFilm[100] = "BMP"; static gdouble velocity = 0.1; static gint nIsoSurface = 10; static gdouble minIsoValue = 0.01; static gdouble maxIsoValue = 0.02; static gdouble colorP[4] = {1.0,1.0,1.0,1.0}; static gdouble colorN[4] = {1.0,1.0,1.0,1.0}; static gdouble colorD[4] = {1.0,1.0,1.0,1.0}; static gboolean linear = TRUE; /********************************************************************************/ static void animate(); static void stop_animation(GtkWidget *win, gpointer data); static void play_animation(GtkWidget *win, gpointer data); /********************************************************************************/ static void reset_last_directory(GtkWidget *dirSelector, gpointer data) { gchar* dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); gchar* filename = NULL; if(dirname && strlen(dirname)>0) { if(dirname[strlen(dirname)-1] != G_DIR_SEPARATOR) filename = g_strdup_printf("%s%sdump.txt",dirname,G_DIR_SEPARATOR_S); else filename = g_strdup_printf("%sdump.txt",dirname); } else { dirname = g_strdup(g_get_home_dir()); filename = g_strdup_printf("%s%sdump.txt",dirname,G_DIR_SEPARATOR_S); } if(dirname) g_free(dirname); if(filename) { set_last_directory(filename); g_free(filename); } } /********************************************************************************/ static void set_directory(GtkWidget *win, gpointer data) { GtkWidget *dirSelector; dirSelector = selctionOfDir(reset_last_directory, "Set folder", GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); gtk_window_set_transient_for(GTK_WINDOW(dirSelector),GTK_WINDOW(PrincipalWindow)); gtk_window_set_transient_for(GTK_WINDOW(dirSelector),GTK_WINDOW(WinDlg)); } /**************************************************************************/ static void setColorsSurfaces(gdouble value) { GtkWidget* handleBoxColorMap = g_object_get_data(G_OBJECT(WinDlg), "HandleboxColorMapIsoSurface"); ColorMap* colorMap = g_object_get_data(G_OBJECT(handleBoxColorMap),"ColorMap"); gdouble v; gdouble color[3]; gdouble C[3]; gint i; v = fabs(value); set_Color_From_colorMap(colorMap, color, v); for(i=0;i<3;i++) C[i] = color[i]; set_color_surface(0,C); set_color_surface(2,C); v = -v; set_Color_From_colorMap(colorMap, color, v); for(i=0;i<3;i++) C[i] = color[i]; set_color_surface(1,C); } /********************************************************************************/ static void setColorMap(gdouble min, gdouble max) { GtkWidget* handleBoxColorMap = g_object_get_data(G_OBJECT(WinDlg), "HandleboxColorMapIsoSurface"); ColorMap* colorMap = g_object_get_data(G_OBJECT( handleBoxColorMap),"ColorMap"); if(colorMap) { gchar* t = NULL; GtkWidget* entryLeft = g_object_get_data(G_OBJECT(handleBoxColorMap), "EntryLeft"); GtkWidget* entryRight = g_object_get_data(G_OBJECT(handleBoxColorMap), "EntryRight"); t = g_strdup_printf("%lf",min); gtk_entry_set_text(GTK_ENTRY(entryLeft),t); g_free(t); gtk_widget_activate(entryLeft); t = g_strdup_printf("%lf",max); gtk_entry_set_text(GTK_ENTRY(entryRight),t); g_free(t); gtk_widget_activate(entryRight); return; } if(handleBoxColorMap) { GtkWidget* entryLeft = g_object_get_data(G_OBJECT(handleBoxColorMap), "EntryLeft"); GtkWidget* entryRight = g_object_get_data(G_OBJECT(handleBoxColorMap), "EntryRight"); GtkWidget* darea = g_object_get_data(G_OBJECT(handleBoxColorMap), "DrawingArea"); gchar* t = NULL; colorMap = new_colorMap_min_max(min,max); g_object_set_data(G_OBJECT(handleBoxColorMap),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryLeft),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryRight),"ColorMap", colorMap); g_object_set_data(G_OBJECT(darea),"ColorMap", colorMap); t = g_strdup_printf("%lf",min); gtk_entry_set_text(GTK_ENTRY(entryLeft),t); g_free(t); t = g_strdup_printf("%lf",max); gtk_entry_set_text(GTK_ENTRY(entryRight),t); g_free(t); } } /********************************************************************************/ static void reset_parameters(GtkWidget *win, gpointer data) { gdouble velo = atof(gtk_entry_get_text(GTK_ENTRY(EntryVelocity))); gint nSurf = atoi(gtk_entry_get_text(GTK_ENTRY(EntryNIsoSurface))); gdouble minIso = atof(gtk_entry_get_text(GTK_ENTRY(EntryMinIsoValue))); gdouble maxIso = atof(gtk_entry_get_text(GTK_ENTRY(EntryMaxIsoValue))); gchar t[BSIZE]; if(velo<0) { velo = -velo; sprintf(t,"%lf",velo); gtk_entry_set_text(GTK_ENTRY(EntryVelocity),t); } velocity = velo; if(nSurf<=1) { nSurf = 10; sprintf(t,"%d",nSurf); gtk_entry_set_text(GTK_ENTRY(EntryNIsoSurface),t); } if(nSurf<0) { nSurf = -nSurf; sprintf(t,"%d",nSurf); gtk_entry_set_text(GTK_ENTRY(EntryNIsoSurface),t); } nIsoSurface = nSurf; if(minIso<0) { minIso = -minIso; if(minIso==0) minIso = 0.01; sprintf(t,"%lf",minIso); gtk_entry_set_text(GTK_ENTRY(EntryMinIsoValue),t); } minIsoValue = minIso; if(maxIso<0) { maxIso = -maxIso; if(maxIso==0) maxIso = 0.05; sprintf(t,"%lf",maxIso); gtk_entry_set_text(GTK_ENTRY(EntryMaxIsoValue),t); } maxIsoValue = maxIso; if(data) setColorMap(-maxIsoValue, maxIsoValue); if(!play) stop_animation(NULL,NULL); } /********************************************************************************/ static void play_animation(GtkWidget *win, gpointer data) { play = TRUE; gtk_widget_set_sensitive(PlayButton, FALSE); gtk_widget_set_sensitive(StopButton, TRUE); gtk_window_set_modal (GTK_WINDOW (WinDlg), TRUE); animate(); } /********************************************************************************/ static void stop_animation(GtkWidget *win, gpointer data) { play = FALSE; if(GTK_IS_WIDGET(PlayButton)) gtk_widget_set_sensitive(PlayButton, TRUE); if(GTK_IS_WIDGET(StopButton)) gtk_widget_set_sensitive(StopButton, FALSE); if(GTK_IS_WIDGET(WinDlg)) gtk_window_set_modal (GTK_WINDOW (WinDlg), FALSE); while( gtk_events_pending() ) gtk_main_iteration(); if(this_is_an_object((GtkObject*)GLArea)) glarea_rafresh(GLArea); set_color_surface(0,colorP); set_color_surface(1,colorN); set_color_surface(2,colorD); } /********************************************************************************/ static void destroyAnimationDlg(GtkWidget *win) { createFilm = FALSE; numFileFilm = 0; stop_animation(NULL, NULL); gtk_widget_destroy(WinDlg); WinDlg = NULL; } /********************************************************************************/ static void linearSelected(GtkWidget *widget) { linear = TRUE; } /********************************************************************************/ static void logSelected(GtkWidget *widget) { linear = FALSE; } /********************************************************************************/ static gchar* get_format_image_from_option() { if(strcmp(formatFilm,"BMP")==0) return "bmp"; if(strcmp(formatFilm,"PPM")==0) return "ppm"; if(strcmp(formatFilm,"PNG")==0) return "png"; if(strcmp(formatFilm,"JPEG")==0) return "jpg"; if(strcmp(formatFilm,"PNG transparent")==0) return "png"; if(strcmp(formatFilm,"Povray")==0) return "pov"; return "UNK"; } /********************************************************************************/ static void filmSelected(GtkWidget *widget) { if(GTK_IS_WIDGET(buttonCheckFilm)&& GTK_TOGGLE_BUTTON (buttonCheckFilm)->active) { createFilm = TRUE; if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, TRUE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, TRUE); } else { createFilm = FALSE; if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); } } /********************************************************************************/ static void showMessageEnd() { gchar* format =get_format_image_from_option(); gchar* message = messageAnimatedImage(format); gchar* t = g_strdup_printf(_("\nA series of gab*.%s files was created in \"%s\" directeory.\n\n\n%s") , format, get_last_directory(),message); GtkWidget* winDlg = Message(t,_("Info"),TRUE); g_free(message); gtk_window_set_modal (GTK_WINDOW (winDlg), TRUE); g_free(t); } /********************************************************************************/ static void unActivateFilm() { createFilm = FALSE; numFileFilm = 0; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCheckFilm), FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); } /********************************************************************************************************/ static void set_format_film(GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } if(!data) return; sprintf(formatFilm ,"%s",(gchar*)data); } /********************************************************************************************************/ static GtkWidget *create_list_of_formats() { GtkTreeIter iter; GtkListStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; gint i; gint k; gchar* options[] = {"BMP","PPM", "JPEG", "PNG", "PNG transparent", "Povray"}; guint numberOfElements = G_N_ELEMENTS (options); k = 0; store = gtk_list_store_new (1,G_TYPE_STRING); for(i=0;i0) showMessageEnd(); unActivateFilm(); while( gtk_events_pending() ) gtk_main_iteration(); } } if(numFileFilm>0) showMessageEnd(); unActivateFilm(); if(GTK_IS_WIDGET(buttonCheckFilm)) gtk_widget_set_sensitive(buttonCheckFilm, TRUE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(EntryNIsoSurface)) gtk_widget_set_sensitive(EntryNIsoSurface, TRUE); if(GTK_IS_WIDGET(LabelNIsoSurface)) gtk_widget_set_sensitive(LabelNIsoSurface, TRUE); if(GTK_IS_WIDGET(LabelMinIso)) gtk_widget_set_sensitive(LabelMinIso, TRUE); if(GTK_IS_WIDGET(LabelMaxIso)) gtk_widget_set_sensitive(LabelMaxIso, TRUE); if(GTK_IS_WIDGET(EntryMinIsoValue)) gtk_widget_set_sensitive(EntryMinIsoValue, TRUE); if(GTK_IS_WIDGET(EntryMaxIsoValue)) gtk_widget_set_sensitive(EntryMaxIsoValue, TRUE); stop_animation(NULL, NULL); } /***********************************************************************/ void animationIsoSurfaceDlg() { GtkWidget *Win; GtkWidget *vbox; /* GtkWidget *hbox;*/ GtkWidget *parentWindow = PrincipalWindow; if(WinDlg) return; if(!grid ) { if( !CancelCalcul) Message(_("Sorry, Grid not define "),"Error",TRUE); return; } get_color_surface(0,colorP); get_color_surface(1,colorN); get_color_surface(2,colorD); Win= gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow)); gtk_window_set_title(GTK_WINDOW(Win),"Isosurface animation"); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); WinDlg = Win; add_child(PrincipalWindow,Win,destroyAnimationDlg,"Anim. IsoSurf."); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (Win), vbox); /* hbox = create_hbox_false(vbox);*/ create_hbox_false(vbox); gtk_widget_realize(Win); addEntrysButtons(vbox); gtk_widget_show_all(vbox); gtk_widget_show_now(Win); fit_windows_position(PrincipalWindow, Win); stop_animation(NULL, NULL); } GabeditSrc250/src/Display/AnimationPlanesMapped.c0000644000175100017510000005445013130665225022254 0ustar alloucheallouche/* AnimationPlanesMapped.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "GlobalOrb.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Vector3d.h" #include "../Utils/Transformation.h" #include "../Display/StatusOrb.h" #include "../Display/GLArea.h" #include "../Display/AnimationPlanesMapped.h" #include "../Display/ColorMap.h" #include "../Display/TriangleDraw.h" #include "../Files/FolderChooser.h" #include "../Files/GabeditFolderChooser.h" #include "../Common/Help.h" #include "../Display/Images.h" #include "../Display/PovrayGL.h" static GtkWidget *WinDlg = NULL; static GtkWidget *EntryVelocity = NULL; static GtkWidget *PlayButton = NULL; static GtkWidget *StopButton = NULL; static gboolean play = FALSE; static GtkWidget *buttonCheckFilm = NULL; static GtkWidget *buttonDirFilm = NULL; static GtkWidget* comboListFilm = NULL; static gboolean createFilm = FALSE; static gint numFileFilm = 0; static gchar formatFilm[100] = "BMP"; static gdouble velocity = 0.1; static GtkWidget *buttonXYPlanes = NULL; static GtkWidget *buttonXZPlanes = NULL; static GtkWidget *buttonYZPlanes = NULL; typedef enum { XYPLANES = 0, XZPLANES = 1, YZPLANES = 2 } GabEditPlanes; static GabEditPlanes selectedPlanes = XYPLANES; /********************************************************************************/ static void animate(); static void stop_animation(GtkWidget *win, gpointer data); static void play_animation(GtkWidget *win, gpointer data); /********************************************************************************/ static void reset_last_directory(GtkWidget *dirSelector, gpointer data) { gchar* dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); gchar* filename = NULL; if(dirname && strlen(dirname)>0) { if(dirname[strlen(dirname)-1] != G_DIR_SEPARATOR) filename = g_strdup_printf("%s%sdump.txt",dirname,G_DIR_SEPARATOR_S); else filename = g_strdup_printf("%sdump.txt",dirname); } else { dirname = g_strdup(g_get_home_dir()); filename = g_strdup_printf("%s%sdump.txt",dirname,G_DIR_SEPARATOR_S); } if(dirname) g_free(dirname); if(filename) { set_last_directory(filename); g_free(filename); } } /********************************************************************************/ static void set_directory(GtkWidget *win, gpointer data) { GtkWidget *dirSelector; dirSelector = selctionOfDir(reset_last_directory, _("Set folder"), GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); gtk_window_set_transient_for(GTK_WINDOW(dirSelector),GTK_WINDOW(PrincipalWindow)); gtk_window_set_transient_for(GTK_WINDOW(dirSelector),GTK_WINDOW(WinDlg)); } /**********************************************************************************************************/ static void new_plane(gint numPlane, GabEditPlanes type) { gint i0=0; gint i1=1; gdouble gap = 0; if(numPlane<0) return; switch(type) { case YZPLANES : i0 = 1;i1 = 2;break; /* plane YZ */ case XZPLANES : i0 = 0;i1 = 2;break; /* plane XZ */ case XYPLANES : i0 = 0;i1 = 1;break; /* plane XY */ } free_planes_mapped_all(); add_maps(i0, i1, numPlane, gap, FALSE); } /********************************************************************************/ static void first_plane() { gint numPlane; numPlane = 0; switch(selectedPlanes) { case YZPLANES : numPlane = grid->N[0]/2; break; /* plane YZ */ case XZPLANES : numPlane = grid->N[1]/2; break; /* plane XZ */ case XYPLANES : numPlane = grid->N[2]/2; break; /* plane XY */ } new_plane(numPlane, selectedPlanes); if(this_is_an_object((GtkObject*)GLArea)) glarea_rafresh(GLArea); } /********************************************************************************/ static void setColorMap(gdouble min, gdouble max) { GtkWidget* handleBoxColorMap = g_object_get_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapPlanesMapped"); ColorMap* colorMap = NULL; if(handleBoxColorMap) colorMap = g_object_get_data(G_OBJECT(handleBoxColorMap),"ColorMap"); if(colorMap) { gchar* t = NULL; GtkWidget* entryLeft = g_object_get_data(G_OBJECT(handleBoxColorMap), "EntryLeft"); GtkWidget* entryRight = g_object_get_data(G_OBJECT(handleBoxColorMap), "EntryRight"); t = g_strdup_printf("%lf",min); gtk_entry_set_text(GTK_ENTRY(entryLeft),t); g_free(t); gtk_widget_activate(entryLeft); t = g_strdup_printf("%lf",max); gtk_entry_set_text(GTK_ENTRY(entryRight),t); g_free(t); gtk_widget_activate(entryRight); return; } if(handleBoxColorMap) { GtkWidget* entryLeft = g_object_get_data(G_OBJECT(handleBoxColorMap), "EntryLeft"); GtkWidget* entryRight = g_object_get_data(G_OBJECT(handleBoxColorMap), "EntryRight"); GtkWidget* darea = g_object_get_data(G_OBJECT(handleBoxColorMap), "DrawingArea"); gchar* t = NULL; colorMap = new_colorMap_min_max(min,max); g_object_set_data(G_OBJECT(handleBoxColorMap),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryLeft),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryRight),"ColorMap", colorMap); g_object_set_data(G_OBJECT(darea),"ColorMap", colorMap); t = g_strdup_printf("%lf",min); gtk_entry_set_text(GTK_ENTRY(entryLeft),t); g_free(t); t = g_strdup_printf("%lf",max); gtk_entry_set_text(GTK_ENTRY(entryRight),t); g_free(t); } } /********************************************************************************/ static void setMinMaxIsovalues() { gdouble max; gdouble min; gint i; gint j; gint k; if(!grid) return; max = grid->point[0][0][0].C[3]; min = grid->point[0][0][0].C[3]; for(i=0;iN[0];i++) for(j=0;jN[1];j++) for(k=0;kN[2];k++) { if(min>grid->point[i][j][k].C[3]) min = grid->point[i][j][k].C[3]; if(maxpoint[i][j][k].C[3]) max = grid->point[i][j][k].C[3]; } setColorMap(min, max); } /********************************************************************************/ static void resetVelocity(GtkWidget *win, gpointer data) { gdouble velo = atof(gtk_entry_get_text(GTK_ENTRY(EntryVelocity))); gchar* t = NULL; if(velo<0) { velo = -velo; t = g_strdup_printf("%lf",velo); gtk_entry_set_text(GTK_ENTRY(EntryVelocity),t); g_free(t); } velocity = velo; if(!play) stop_animation(NULL,NULL); } /********************************************************************************/ static void play_animation(GtkWidget *win, gpointer data) { play = TRUE; gtk_widget_set_sensitive(PlayButton, FALSE); gtk_widget_set_sensitive(StopButton, TRUE); gtk_window_set_modal (GTK_WINDOW (WinDlg), TRUE); animate(); } /********************************************************************************/ static void stop_animation(GtkWidget *win, gpointer data) { play = FALSE; if(GTK_IS_WIDGET(PlayButton)) gtk_widget_set_sensitive(PlayButton, TRUE); if(GTK_IS_WIDGET(StopButton)) gtk_widget_set_sensitive(StopButton, FALSE); if(GTK_IS_WIDGET(WinDlg)) gtk_window_set_modal (GTK_WINDOW (WinDlg), FALSE); while( gtk_events_pending() ) gtk_main_iteration(); if(this_is_an_object((GtkObject*)GLArea)) glarea_rafresh(GLArea); setAnimatePlanesMapped(FALSE); } /********************************************************************************/ static void destroyAnimationDlg(GtkWidget *win) { createFilm = FALSE; numFileFilm = 0; free_planes_mapped_all(); stop_animation(NULL, NULL); gtk_widget_destroy(WinDlg); WinDlg = NULL; buttonXYPlanes = NULL; buttonXZPlanes = NULL; buttonYZPlanes = NULL; } /********************************************************************************/ static void buttonPlanesSelected(GtkWidget *widget) { if(GTK_IS_WIDGET(buttonXYPlanes) && GTK_TOGGLE_BUTTON (buttonXYPlanes)->active) selectedPlanes = XYPLANES; if(GTK_IS_WIDGET(buttonXZPlanes) && GTK_TOGGLE_BUTTON (buttonXZPlanes)->active) selectedPlanes = XZPLANES; if(GTK_IS_WIDGET(buttonYZPlanes) && GTK_TOGGLE_BUTTON (buttonYZPlanes)->active) selectedPlanes = YZPLANES; first_plane(); } /********************************************************************************/ static void addPlanesButtons(GtkWidget* box) { GtkWidget *table; gint i; GtkWidget *separator; table = gtk_table_new(3,3,FALSE); gtk_box_pack_start(GTK_BOX(box), table,TRUE,TRUE,0); i = 0; buttonYZPlanes = gtk_radio_button_new_with_label( NULL,_("First direction")); gtk_table_attach(GTK_TABLE(table),buttonYZPlanes,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); i++; buttonXZPlanes = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonYZPlanes)), _("Second direction")); gtk_table_attach(GTK_TABLE(table),buttonXZPlanes,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); i++; buttonXYPlanes = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonYZPlanes)), _("Third direction")); gtk_table_attach(GTK_TABLE(table),buttonXYPlanes,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); g_signal_connect (G_OBJECT(buttonXYPlanes), "toggled", G_CALLBACK (buttonPlanesSelected), NULL); g_signal_connect (G_OBJECT(buttonXZPlanes), "toggled", G_CALLBACK (buttonPlanesSelected), NULL); g_signal_connect (G_OBJECT(buttonYZPlanes), "toggled", G_CALLBACK (buttonPlanesSelected), NULL); switch(selectedPlanes) { case XYPLANES : gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonXYPlanes), TRUE); break; case XZPLANES : gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonXZPlanes), TRUE); break; case YZPLANES : gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonYZPlanes), TRUE); break; } i++; separator = gtk_hseparator_new(); gtk_table_attach(GTK_TABLE(table),separator,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); } /********************************************************************************/ static gchar* get_format_image_from_option() { if(strcmp(formatFilm,"BMP")==0) return "bmp"; if(strcmp(formatFilm,"PPM")==0) return "ppm"; if(strcmp(formatFilm,"PNG")==0) return "png"; if(strcmp(formatFilm,"JPEG")==0) return "jpg"; if(strcmp(formatFilm,"PNG transparent")==0) return "png"; if(strcmp(formatFilm,"Povray")==0) return "pov"; return "UNK"; } /********************************************************************************/ static void filmSelected(GtkWidget *widget) { if(GTK_IS_WIDGET(buttonCheckFilm)&& GTK_TOGGLE_BUTTON (buttonCheckFilm)->active) { createFilm = TRUE; if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, TRUE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, TRUE); } else { createFilm = FALSE; if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); } } /********************************************************************************/ static void showMessageEnd() { gchar* format =get_format_image_from_option(); gchar* message = messageAnimatedImage(format); gchar* t = g_strdup_printf(_("\nA series of gab*.%s files was created in \"%s\" directeory.\n\n\n%s"), format, get_last_directory(),message); GtkWidget* winDlg = Message(t,_("Info"),TRUE); g_free(message); gtk_window_set_modal (GTK_WINDOW (winDlg), TRUE); g_free(t); } /********************************************************************************/ static void unActivateFilm() { createFilm = FALSE; numFileFilm = 0; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCheckFilm), FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); } /********************************************************************************************************/ static void set_format_film(GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } if(!data) return; sprintf(formatFilm ,"%s",(gchar*)data); } /********************************************************************************************************/ static GtkWidget *create_list_of_formats() { GtkTreeIter iter; GtkListStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; gint i; gint k; gchar* options[] = {"BMP","PPM", "JPEG", "PNG", "PNG transparent", "Povray"}; guint numberOfElements = G_N_ELEMENTS (options); k = 0; store = gtk_list_store_new (1,G_TYPE_STRING); for(i=0;iN[0]-1; break; /* planes YZ */ case XZPLANES : iMax = grid->N[1]-1; break; /* planes XZ */ case XYPLANES : iMax = grid->N[2]-1; break; /* planes XY */ } numFileFilm = 0; if(GTK_IS_WIDGET(buttonCheckFilm)) gtk_widget_set_sensitive(buttonCheckFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(buttonXYPlanes)) gtk_widget_set_sensitive(buttonXYPlanes, FALSE); if(GTK_IS_WIDGET(buttonXZPlanes)) gtk_widget_set_sensitive(buttonXZPlanes, FALSE); if(GTK_IS_WIDGET(buttonYZPlanes)) gtk_widget_set_sensitive(buttonYZPlanes, FALSE); numPlane = 0; setAnimatePlanesMapped(TRUE); while(play) { new_plane(numPlane, selectedPlanes); while( gtk_events_pending() ) gtk_main_iteration(); glarea_rafresh(GLArea); createImagesFile(); Waiting(velocity); if(aller) numPlane++; else numPlane--; if(numPlane==iMax) { aller = FALSE; } if(numPlane==0) { aller = TRUE; if(numFileFilm>0) showMessageEnd(); unActivateFilm(); while( gtk_events_pending() ) gtk_main_iteration(); } } if(numFileFilm>0) showMessageEnd(); unActivateFilm(); if(GTK_IS_WIDGET(buttonCheckFilm)) gtk_widget_set_sensitive(buttonCheckFilm, TRUE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(buttonXYPlanes)) gtk_widget_set_sensitive(buttonXYPlanes, TRUE); if(GTK_IS_WIDGET(buttonXZPlanes)) gtk_widget_set_sensitive(buttonXZPlanes, TRUE); if(GTK_IS_WIDGET(buttonYZPlanes)) gtk_widget_set_sensitive(buttonYZPlanes, TRUE); setAnimatePlanesMapped(FALSE); stop_animation(NULL, NULL); first_plane(); } /********************************************************************************/ void animationPlanesMappedDlg() { GtkWidget *Win; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *parentWindow = PrincipalWindow; if(WinDlg) return; if(!grid ) { if( !CancelCalcul) Message(_("Sorry, Grid not define "),_("Error"),TRUE); return; } Win= gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow)); gtk_window_set_title(GTK_WINDOW(Win),_("Planes colorcoed animation")); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); WinDlg = Win; add_child(PrincipalWindow,Win,destroyAnimationDlg,"Anim.Planes."); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (Win), vbox); hbox = create_hbox_false(vbox); gtk_widget_realize(Win); setMinMaxIsovalues(); addEntrysButtons(vbox); gtk_widget_show_all(vbox); gtk_widget_show_now(Win); fit_windows_position(PrincipalWindow, Win); stop_animation(NULL, NULL); first_plane(); } GabeditSrc250/src/Display/RingsPov.c0000644000175100017510000001243413130665225017606 0ustar alloucheallouche/*RingsPov.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "../Utils/Vector3d.h" #include "../Utils/Utils.h" #include "../Utils/Transformation.h" #include "../Display/RingsOrb.h" #include /********************************************************************************/ static void v_cross(gdouble* p1, gdouble* p2, gdouble* p3, gdouble* cross) { gdouble v1[] = { p2[0]-p1[0], p2[1]-p1[1],p2[2]-p1[2] }; gdouble v2[] = { p3[0]-p1[0], p3[1]-p1[1],p3[2]-p1[2] }; cross[0] = (v1[1] * v2[2]) - (v1[2] * v2[1]); cross[1] = (v1[2] * v2[0]) - (v1[0] * v2[2]); cross[2] = (v1[0] * v2[1]) - (v1[1] * v2[0]); } /********************************************************************************/ static gchar *get_pov_polygon(GList* polygon, gint size, gdouble Colors[]) { gchar* temp = NULL; gchar* t1 = NULL; gchar* t2 = NULL; gint i; gint j; gint c; GList* l = NULL; gdouble C[3] = {0,0,0}; gdouble N1[3] = {0,0,1}; gdouble N2[3] = {0,0,1}; gdouble N3[3] = {0,0,1}; if(size<3) return g_strdup("\n"); if(!polygon) return g_strdup("\n"); for(l=polygon; l != NULL; l=l->next) { i = GPOINTER_TO_INT(l->data); for(c = 0; c<3;c++) C[c] += GeomOrb[i].C[c]/size; } if(TypeBlend == GABEDIT_BLEND_YES) temp = g_strdup_printf( "mesh\n" "{\n" "\t#declare myColor = rgb<%14.6f,%14.6f,%14.6f>;\n" "\t#declare myTexture = texture{ pigment { myColor filter surfaceTransCoef } finish {ambient ambientCoef diffuse diffuseCoef specular specularCoef} }\n", Colors[0],Colors[1],Colors[2] ); else temp = g_strdup_printf( "mesh\n" "{\n" "\t#declare myColor = rgb<%14.6f,%14.6f,%14.6f>;\n" "\t#declare myTexture = texture{ pigment { myColor } finish {ambient ambientCoef diffuse diffuseCoef specular specularCoef} }\n", Colors[0],Colors[1],Colors[2] ); for(l=polygon; l != NULL; l=l->next) { i = GPOINTER_TO_INT(l->data); if(l->next != NULL) j = GPOINTER_TO_INT((l->next)->data); else j = GPOINTER_TO_INT(polygon->data); if(l==polygon) { v_cross(C,GeomOrb[i].C, GeomOrb[j].C, N1); v_cross(GeomOrb[i].C, GeomOrb[j].C, C, N2); v_cross(GeomOrb[j].C, C, GeomOrb[i].C, N3); } t1 = g_strdup_printf( "\tsmooth_triangle{\n" "\t\t<%14.6f,%14.6f,%14.6f>, <%14.6f,%14.6f,%14.6f>,\n" "\t\t<%14.6f,%14.6f,%14.6f>, <%14.6f,%14.6f,%14.6f>,\n" "\t\t<%14.6f,%14.6f,%14.6f>, <%14.6f,%14.6f,%14.6f>\n" "\t\ttexture{ myTexture }\n" "\t}\n", C[0],C[1],C[2], N1[0],N1[1],N1[2], GeomOrb[i].C[0], GeomOrb[i].C[1],GeomOrb[i].C[2], N2[0],N2[1],N2[2], GeomOrb[j].C[0], GeomOrb[j].C[1],GeomOrb[j].C[2], N3[0],N3[1],N3[2] ); t2 = temp; temp = g_strdup_printf("%s%s", t2, t1); g_free(t1); g_free(t2); } t1 = g_strdup_printf( "\ttransform { myTransforms }\n" "}\n" ); t2 = temp; temp = g_strdup_printf("%s%s", t2, t1); g_free(t1); g_free(t2); return temp; } /********************************************************************************/ void AddRingsPovRay(GList** rings, gint nRings, gint* ringsSize, V4d colors[]) { gint i; gchar* temp; gdouble* color= NULL; gdouble randumC[3]={0,0,0}; gchar* fileName = g_strdup_printf("%s%stmp%spovrayRings.pov",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); FILE* file = fopen(fileName,"a"); g_free(fileName); if(!file) return; for(i=0;iN[0]-nBoundary-1;i++) { for(j=nBoundary;jN[1]-nBoundary-1;j++) { for(k=nBoundary;kN[2]-nBoundary-1;k++) { for(n=0;ncube[i][j][k].Ntriangles;n++) { TriangleShow ( iso->cube[i][j][k].triangles[n].vertex[0]->C, iso->cube[i][j][k].triangles[n].vertex[1]->C, iso->cube[i][j][k].triangles[n].vertex[2]->C, iso->cube[i][j][k].triangles[n].Normal[0].C, iso->cube[i][j][k].triangles[n].Normal[1].C, iso->cube[i][j][k].triangles[n].Normal[2].C ); } } } } /* glEnd();*/ } /********************************************************************************/ void TriangleShowColorMap(V3d V1,V3d V2,V3d V3,V3d N1,V3d N2,V3d N3, V4d color1,V4d color2,V4d color3) { glBegin(GL_TRIANGLES); if(TypeTexture != GABEDIT_TYPETEXTURE_NONE) glTexCoord2f(V1[0],V1[1]); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,color1); glNormal3d(N1[0],N1[1],N1[2]); glVertex3d(V1[0],V1[1],V1[2]); if(TypeTexture != GABEDIT_TYPETEXTURE_NONE) glTexCoord2f(V2[0],V2[1]); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,color2); glNormal3d(N2[0],N2[1],N2[2]); glVertex3d(V2[0],V2[1],V2[2]); if(TypeTexture != GABEDIT_TYPETEXTURE_NONE) glTexCoord2f(V3[0],V3[1]); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,color3); glNormal3d(N3[0],N3[1],N3[2]); glVertex3d(V3[0],V3[1],V3[2]); glEnd(); } /**************************************************************************/ static ColorMap* get_colorMap_mapping_cube() { GtkWidget* handleBoxColorMapGrid = g_object_get_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapGrid "); ColorMap* colorMap = g_object_get_data(G_OBJECT(handleBoxColorMapGrid),"ColorMap"); return colorMap; } /********************************************************************************/ void IsoDrawMapped(IsoSurface* iso) { GLdouble alpha = get_alpha_opacity(); gint i; gint j; gint k; gint n=0; V4d Diffuse = {0.5,0.5,0.5,1.0}; V4d Specular = {0.8,0.8,0.8,1.0 }; V4d Ambiant = {0.2,0.2,0.2,alpha}; gdouble value; V4d color1 = {0.5,0.5,0.5,alpha}; V4d color2 = {0.5,0.5,0.5,alpha}; V4d color3 = {0.5,0.5,0.5,alpha}; ColorMap* colorMap = get_colorMap_mapping_cube(); if(TypeBlend == GABEDIT_BLEND_NO) alpha = 1.0; glMaterialdv(GL_FRONT_AND_BACK,GL_SPECULAR,Specular); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,Diffuse); glMaterialdv(GL_FRONT_AND_BACK,GL_AMBIENT,Ambiant); glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,120); for(i=1;iN[0]-2;i++) { for(j=1;jN[1]-2;j++) { for(k=1;kN[2]-2;k++) { for(n=0;ncube[i][j][k].Ntriangles;n++) { value = iso->cube[i][j][k].triangles[n].vertex[0]->C[3]; set_Color_From_colorMap(colorMap, color1, value); value = iso->cube[i][j][k].triangles[n].vertex[1]->C[3]; set_Color_From_colorMap(colorMap, color2, value); value = iso->cube[i][j][k].triangles[n].vertex[2]->C[3]; set_Color_From_colorMap(colorMap, color3, value); TriangleShowColorMap ( iso->cube[i][j][k].triangles[n].vertex[0]->C, iso->cube[i][j][k].triangles[n].vertex[1]->C, iso->cube[i][j][k].triangles[n].vertex[2]->C, iso->cube[i][j][k].triangles[n].Normal[0].C, iso->cube[i][j][k].triangles[n].Normal[1].C, iso->cube[i][j][k].triangles[n].Normal[2].C, color1,color2,color3 ); } } } } } /********************************************************************************/ void IsoDraw( IsoSurface* iso) { if(iso->grid->mapped) IsoDrawMapped(iso); else IsoDrawNoMapped(iso); } /*********************************************************************************************/ GLuint IsoGenOneList(IsoSurface* isosurface,gint type) { GLuint isolist; GLdouble alpha = get_alpha_opacity(); if(!isosurface) return 0; if(TypeBlend == GABEDIT_BLEND_NO) alpha = 1.0; isolist = glGenLists(1); glNewList(isolist, GL_COMPILE); /* glEnable (GL_POLYGON_SMOOTH);*/ if(type==1) if(TypeNegWireFrame == GABEDIT_NEG_WIREFRAME_YES) { glLineWidth(2); glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); } else { glLineWidth(1.5); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); } else if(TypePosWireFrame == GABEDIT_POS_WIREFRAME_YES) { glLineWidth(2); glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); } else { glLineWidth(1.5); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); } if(TypeBlend == GABEDIT_BLEND_YES) glEnable(GL_BLEND); else glDisable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /*glDepthMask(FALSE);*/ if(TypeTexture != GABEDIT_TYPETEXTURE_NONE) activate_texture(type); else disable_texture(); switch(type) { case 0 : /* positive */ { gdouble* Diffuse = color_positive; V4d Specular = {0.8,0.8,0.8,alpha}; V4d Ambiant = {0.2,0.2,0.2,alpha}; color_positive[3] = alpha; glMaterialdv(GL_FRONT_AND_BACK,GL_SPECULAR,Specular); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,Diffuse); glMaterialdv(GL_FRONT_AND_BACK,GL_AMBIENT,Ambiant); glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,120); IsoDraw(isosurface); break; } case 1 :/* negative */ { gdouble* Diffuse = color_negative; V4d Specular = {0.8,0.8,0.8,alpha}; V4d Ambiant = {0.2,0.2,0.2,alpha}; color_negative[3] = alpha; glMaterialdv(GL_FRONT_AND_BACK,GL_SPECULAR,Specular); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,Diffuse); glMaterialdv(GL_FRONT_AND_BACK,GL_AMBIENT,Ambiant); glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,120); IsoDraw(isosurface); break; } case 2: { gdouble* Diffuse = color_density; V4d Specular = {0.8,0.8,0.8,alpha}; V4d Ambiant = {0.2,0.2,0.2,alpha}; color_density[3] = alpha; glMaterialdv(GL_FRONT_AND_BACK,GL_SPECULAR,Specular); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,Diffuse); glMaterialdv(GL_FRONT_AND_BACK,GL_AMBIENT,Ambiant); glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,120); IsoDraw(isosurface); } }/*end switch*/ if(TypeBlend == GABEDIT_BLEND_YES) { /*glDepthMask(TRUE);*/ glDisable(GL_BLEND); } glLineWidth(1.5); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); if(TypeTexture != GABEDIT_TYPETEXTURE_NONE) disable_texture(); glEndList(); return isolist; } /********************************************************************************/ void IsoGenLists(GLuint *positiveSurface, GLuint *negativeSurface, GLuint *nullSurface, IsoSurface* isopositive,IsoSurface* isonegative,IsoSurface* isonull) { if (glIsList(*positiveSurface) == GL_TRUE) glDeleteLists(*positiveSurface,1); if (glIsList(*negativeSurface) == GL_TRUE) glDeleteLists(*negativeSurface,1); if (glIsList(*nullSurface) == GL_TRUE) glDeleteLists(*nullSurface,1); if( TypeGrid == GABEDIT_TYPEGRID_EDENSITY) *positiveSurface = IsoGenOneList(isopositive,2); else { *positiveSurface = IsoGenOneList(isopositive,0); *negativeSurface = IsoGenOneList(isonegative,1); *nullSurface = IsoGenOneList(isonull,3); } } /********************************************************************************/ void IsoShowLists(GLuint positiveSurface, GLuint negativeSurface, GLuint nullSurface) { if(SurfShow == GABEDIT_SURFSHOW_NO) return; if(SurfShow == GABEDIT_SURFSHOW_POSNEG ||SurfShow == GABEDIT_SURFSHOW_POSITIVE) { if (glIsList(positiveSurface) == GL_TRUE) glCallList(positiveSurface); } if(SurfShow == GABEDIT_SURFSHOW_POSNEG ||SurfShow == GABEDIT_SURFSHOW_NEGATIVE) { if (glIsList(negativeSurface) == GL_TRUE) glCallList(negativeSurface); } if (glIsList(nullSurface) == GL_TRUE) glCallList(nullSurface); } /*********************************************************************************************/ void CubeDraw(Grid* grid) { gint ix,iy,iz; gint ix1,iy1,iz1; gdouble x,y,z; if(!grid) return; glLineWidth(3); ix1 = grid->N[0]-1; iy1 = grid->N[1]-1; iz1 = grid->N[2]-1; glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); glBegin(GL_POLYGON); ix = 0; iy = 0; iz = 0; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = ix1; iy = 0; iz = 0; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = ix1; iy = iy1; iz = 0; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = 0; iy = iy1; iz = 0; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = 0; iy = 0; iz = 0; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); glEnd(); glBegin(GL_POLYGON); ix = 0; iy = 0; iz = 0; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = ix1; iy = 0; iz = 0; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = ix1; iy = 0; iz = iz1; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = 0; iy = 0; iz = iz1; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = 0; iy = 0; iz = 0; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); glEnd(); glBegin(GL_POLYGON); ix = 0; iy = 0; iz = 0; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = 0; iy = iy1; iz = 0; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = 0; iy = iy1; iz = iz1; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = 0; iy = 0; iz = iz1; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = 0; iy = 0; iz = 0; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); glEnd(); glBegin(GL_POLYGON); ix = ix1; iy = iy1; iz = iz1; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = 0; iy = iy1; iz = iz1; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = 0; iy = 0; iz = iz1; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = ix1; iy = 0; iz = iz1; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = ix1; iy = iy1; iz = iz1; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); glEnd(); glBegin(GL_POLYGON); ix = ix1; iy = iy1; iz = iz1; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = ix1; iy = iy1; iz = 0; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = ix1; iy = 0; iz = 0; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = ix1; iy = 0; iz = iz1; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); ix = ix1; iy = iy1; iz = iz1; x = grid->point[ix][iy][iz].C[0]; y = grid->point[ix][iy][iz].C[1]; z = grid->point[ix][iy][iz].C[2]; glVertex3f(x,y,z); glEnd(); glLineWidth(1.5); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); } /*********************************************************************************************/ void BoxGenLists(GLuint *box) { V4d Color = {1.0,1.0,1.0,0.8}; if (glIsList(*box) == GL_TRUE) glDeleteLists(*box,1); *box = glGenLists(1); glNewList(*box, GL_COMPILE); glDisable ( GL_LIGHTING ) ; glColor4dv(Color); CubeDraw(grid); glEnable ( GL_LIGHTING ) ; glEndList(); } /********************************************************************************/ void BoxShowLists(GLuint box) { if (glIsList(box) == GL_TRUE) glCallList(box); } GabeditSrc250/src/Display/ColorMap.h0000644000175100017510000000462613130665225017564 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_COLORMAP_H__ #define __GABEDIT_COLORMAP_H__ typedef enum { COLORMAP_GRID = 0, OLORMAP_CONTOUR, COLORMAP_ISOSURFACE, COLORMAP_MAX } ColorMapTypes; typedef struct _OneColorValue { gdouble color[3]; gdouble value; }OneColorValue; typedef struct _ColorMap { gint numberOfColors; OneColorValue* colorValue; }ColorMap; void colormap_free(ColorMap* colorMap); ColorMap* new_colorMap_fromGrid_multicolor(Grid* grid); ColorMap* new_colorMap_min_max_multicolor(gdouble minValue, gdouble maxValue); ColorMap* new_colorMap_min_max_unicolor(gdouble minValue, gdouble maxValue, gdouble color[]); ColorMap* new_colorMap_fromGrid_unicolor(Grid* grid, gdouble color[]); ColorMap* new_colorMap_fromGrid(Grid* grid); ColorMap* new_colorMap_min_max(gdouble minValue, gdouble maxValue); void set_Color_From_colorMap(ColorMap* colorMap, gdouble color[], gdouble value); GtkWidget* create_color_map_show(GtkWidget* box, ColorMap* colorMap, gchar* label); void color_map_show(GtkWidget* handlebox); void color_map_refresh(GtkWidget* handlebox); void color_map_hide(GtkWidget* handlebox); #endif /* __GABEDIT_COLORMAP_H__ */ GabeditSrc250/src/Display/OrbitalsMolpro.h0000644000175100017510000000270213130665225021011 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_ORBITALSMOLPRO_H__ #define __GABEDIT_ORBITALSMOLPRO_H__ void read_molpro_orbitals(gchar* FileName); #endif /* __GABEDIT_ORBITALSMOLPRO_H__ */ GabeditSrc250/src/Display/AnimationGeomConv.h0000644000175100017510000000406413130665225021421 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_ANIMATIONGEOMCONV_H__ #define __GABEDIT_ANIMATIONGEOMCONV_H__ typedef struct _Atom { gchar symbol[5]; gdouble C[3]; gchar mmType[5]; gchar pdbType[5]; gboolean variable; gdouble partialCharge; gdouble nuclearCharge; }Atom; typedef struct _Geometry { gint numberOfAtoms; Atom* listOfAtoms; }Geometry; typedef struct _GeometryConvergence { gchar* fileName; GabEditTypeFile typeOfFile; gint numberOfGeometries; gint* numGeometry; gdouble* energy; gdouble* maxForce; gdouble* rmsForce; gdouble* maxStep; gdouble* rmsStep; gdouble velocity; Geometry* geometries; gchar** comments; }GeometryConvergence; GeometryConvergence geometryConvergence; void initGeometryConvergence(); void geometryConvergenceDlg(); #endif /* __GABEDIT_ANIMATIONGEOMCONV_H__ */ GabeditSrc250/src/Display/GeomOrbXYZ.h0000644000175100017510000001260313130665225020007 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GEOMORBXYZ_H__ #define __GABEDIT_GEOMORBXYZ_H__ void DefineType(); void reset_old_geometry(); gboolean this_is_a_new_geometry(); void free_geometry(); void gl_create_babel_read_dialogue(); void gl_read_xyz_file_sel(GabeditFileChooser *SelecFile, gint response_id); void gl_read_pdb_file_sel(GabeditFileChooser *SelecFile, gint response_id); void gl_read_hin_file_sel(GabeditFileChooser *SelecFile, gint response_id); void gl_read_aimall_file_sel(GabeditFileChooser *SelecFile, gint response_id); void gl_read_first_dalton_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_last_dalton_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_first_gamess_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_last_gamess_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_first_gauss_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_last_gauss_file(GabeditFileChooser *SelecFile, gint response_id); gboolean gl_read_fchk_gauss_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_first_molcas_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_last_molcas_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_first_molpro_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_last_molpro_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_first_mpqc_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_last_mpqc_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_first_mopac_output_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_last_mopac_output_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_first_mopac_aux_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_last_mopac_aux_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_first_nwchem_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_last_nwchem_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_first_psicode_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_last_psicode_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_nbo_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_first_qchem_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_last_qchem_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_first_orca_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_last_orca_file(GabeditFileChooser *SelecFile, gint response_id); void gl_read_hessian_orca_file(GabeditFileChooser *SelecFile, gint response_id); gboolean gl_read_xyz_file(gchar *FileName); gboolean gl_read_molpro_file_geom_pos(gchar *FileName,long int pos); gboolean gl_read_dalton_file_geomi(gchar *FileName,gint num); gboolean gl_read_gamess_file_geomi(gchar *FileName,gint num); gboolean gl_read_molpro_file_geomi(gchar *FileName,gint num); gboolean gl_read_mopac_output_file_geomi(gchar *FileName,gint num); gboolean gl_read_mopac_aux_file_geomi(gchar *FileName,gint num); gboolean gl_read_molcas_file_geomi(gchar *FileName,gint num); gboolean gl_read_gaussn_file_geomi(gchar *FileName,gint num); gboolean gl_read_fchk_gaussn_file_geom(gchar *FileName); gboolean gl_read_mpqc_file_geomi(gchar *FileName,gint num); gboolean gl_read_orca_file_geomi(gchar *FileName,gint num); gboolean gl_read_qchem_file_geomi(gchar *FileName,gint num); gulong gl_read_nwchem_file_geomi(gchar *FileName,gint num); gboolean gl_read_xyz_file_geomi(gchar *FileName,gint num); void gl_read_gabedit_file(GabeditFileChooser *SelecFile, gint response_id); gboolean gl_read_gabedit_file_geom(gchar *FileName); void gl_read_molden_file(GabeditFileChooser *SelecFile, gint response_id); gboolean gl_read_molden_file_geom(gchar* FileName); gboolean gl_read_molden_gabedit_geom_conv_file(gchar *fileName, gint geometryNumber, GabEditTypeFile type); gdouble get_cube_length(); void reset_grid_limits(); void gl_get_charges_from_mopac_output_file(FILE* fd); void gl_read_geom_any_file_sel(GabeditFileChooser *selecFile, gint response_id); #endif /* __GABEDIT_GEOMORBXYZ_H__ */ GabeditSrc250/src/Display/GLArea.c0000644000175100017510000014211713130665225017134 0ustar alloucheallouche/* GLArea.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include /* #include */ #include "GlobalOrb.h" #include "../Utils/Vector3d.h" #include "../Utils/Transformation.h" #include "../Utils/UtilsGL.h" #include "GeomDraw.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "UtilsOrb.h" #include "GeomOrbXYZ.h" #include "Basis.h" #include "TriangleDraw.h" #include "ContoursDraw.h" #include "PlanesMappedDraw.h" #include "ContoursPov.h" #include "PlanesMappedPov.h" #include "SurfacesPov.h" #include "Orbitals.h" #include "StatusOrb.h" #include "GridPlans.h" #include "Dipole.h" #include "AxisGL.h" #include "PrincipalAxisGL.h" #include "VibrationDraw.h" #include "Images.h" #include "PovrayGL.h" #include "MenuToolBarGL.h" #include "LabelsGL.h" #include "RingsOrb.h" #include "RingsPov.h" /* static pthread_mutex_t theRender_mutex = PTHREAD_MUTEX_INITIALIZER;*/ static gint OperationType = OPERATION_ROTATION_FREE; static gint numberOfSurfaces = 0; static GLuint* positiveSurfaces = NULL; static GLuint* negativeSurfaces = NULL; static GLuint* nullSurfaces = NULL; static GLuint listRings[] = {0,0,0,0,0,0}; static gboolean selectedListRings[] = {FALSE,FALSE,FALSE,FALSE,FALSE,FALSE}; static gint nMaxListRings = G_N_ELEMENTS (listRings); static GLuint GeomList = 0; static GLuint VibList = 0; static GLuint DipList = 0; static GLuint axisList = 0; static GLuint principalAxisList = 0; static GLuint* contoursLists = NULL; static GLuint* planesMappedLists = NULL; static gint i0Contours = 0; static gint i1Contours = 1; static gint i0PlaneMapped = 0; static gint i1PlaneMapped = 1; static gint numPlaneContours = 0; static gint numPlaneMaps = 0; static gint numberOfContours = 0; static gdouble* values = NULL; static gint optcol = 0; static gint nPlanesContours = 0; static gint nPlanesMapped = 0; static gboolean newPlaneMapped = FALSE; static gint newPlaneGridForContours = FALSE; static gint newPlaneGridForPlanesMapped = FALSE; static gdouble gapContours = 0.0; static gdouble gapPlanesMapped = 0.0; static gboolean lightOnOff[3] = { TRUE,FALSE,FALSE}; static gdouble Trans[3] = { 0,0,-50.0}; static V4d light0_position = {0.0, 0.0,50.0,0.0}; static V4d light1_position = {0.0, 50.0,50.0,0.0}; static V4d light2_position = {50.0, 0.0,50.0,0.0}; static gdouble zNear = 1.0; static gdouble zFar = 100.0; static GLdouble Zoom = 45; static gboolean perspective = TRUE; static gboolean animateContours = FALSE; static gboolean animatePlanesMapped = FALSE; /*********************************************************************************************/ static gdouble scaleBall = 1.0; static gdouble scaleStick = 1.0; static gboolean showOneSurface = TRUE; static gboolean showBox = TRUE; /*********************************************************************************************/ static V4d BackColor[7] = { {0.0, 0.0, 0.0, 1.0}, /* black */ {1.0, 1.0, 1.0, 1.0}, /* white */ {1.0, 0.0, 0.0, 1.0}, /* red */ {0.0, 1.0, 0.0, 1.0}, /* green */ {0.0, 0.0, 1.0, 1.0}, /* blue */ {1.0, 0.5, 0.5, 1.0}, /* peach */ {0.7, 0.7, 0.7, 1.0}, /* Grey */ }; /*********************************************************************************************/ gdouble getScaleBall() { return scaleBall; } /*********************************************************************************************/ gdouble getScaleStick() { return scaleStick; } /*********************************************************************************************/ gboolean getShowOneSurface() { return showOneSurface; } /*********************************************************************************************/ gboolean getShowBox() { return showBox; } /*********************************************************************************************/ void setShowBox(gboolean c) { showBox = c; } /*********************************************************************************************/ void setScaleBall(gdouble a) { scaleBall = fabs(a); } /*********************************************************************************************/ void setScaleStick(gdouble a) { scaleStick = fabs(a); } /*********************************************************************************************/ void setShowOneSurface(gboolean a) { showOneSurface = a; } /*********************************************************************************************/ gint getOptCol() { return optcol; } /*********************************************************************************************/ void setOptCol(gint i) { optcol = i; if(optcol<-1 || optcol>6) optcol = 0; } /*********************************************************************************************/ void build_rings(gint size) { if(size<3 || size > nMaxListRings-1+3) return ; selectedListRings[size-3] = TRUE; IsoRingsAllGenLists(&listRings[size-3], size,size); } /*********************************************************************************************/ void delete_rings_all() { gint i; for(i=0;i0) max = fabs(GeomOrb[0].C[0]); else max = 10; for(i=0;i<(gint)Ncenters;i++) { if(max-5-max) y0 = -5-max; glMaterialdv(GL_FRONT_AND_BACK,GL_SPECULAR,Specular); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,Diffuse1); glMaterialdv(GL_FRONT_AND_BACK,GL_AMBIENT,Ambiant); glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,100); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glRotatef(-5,0,1,0); for(i=0;i=0 && numsSource<=2) return lightOnOff[numsSource]; else return FALSE; } /*********************************************************************************************/ void get_orgin_molecule(gdouble orig[]) { gint i = 0; for(i=0;i<3;i++) orig[i] = Trans[i]; /* if(!perspective) for(i=0;i<3;i++) orig[i] /= 10; */ } /*********************************************************************************************/ void get_camera_values(gdouble* zn, gdouble* zf, gdouble* angle, gdouble* aspect, gboolean* persp) { gdouble width = 500; gdouble height = 500; if(GLArea) { width = GLArea->allocation.width; height = GLArea->allocation.height; } *aspect = width/height; *zn = zNear; *zf = zFar; *angle = Zoom; *persp = perspective; } /*********************************************************************************************/ static gint redraw(GtkWidget *widget, gpointer data); /*********************************************************************************************/ void set_camera_values(gdouble zn, gdouble zf, gdouble zo, gboolean persp) { zNear = zn; zFar = zf; Zoom = zo; Trans[2] = -zf/2; perspective = persp; redraw(GLArea,NULL); } /*********************************************************************************************/ gboolean get_light(gint num,gdouble v[]) { gint i; v[0] = v[1] = v[2] = 0; if(num<0 || num>2) return FALSE; switch(num) { case 0 : for(i=0;i<3;i++) v[i] = light0_position[i]; break; case 1 : for(i=0;i<3;i++) v[i] = light1_position[i]; break; case 2 : for(i=0;i<3;i++) v[i] = light2_position[i]; break; } return lightOnOff[num]; } /*********************************************************************************************/ gchar** get_light_position(gint num) { gint i; gchar** t = g_malloc(3*sizeof(gchar*)); switch(num) { case 0 : for(i=0;i<3;i++) t[i] = g_strdup_printf("%lf",light0_position[i]); break; case 1 : for(i=0;i<3;i++) t[i] = g_strdup_printf("%lf",light1_position[i]); break; case 2 : for(i=0;i<3;i++) t[i] = g_strdup_printf("%lf",light2_position[i]); break; } return t; } /*********************************************************************************************/ void set_light_position(gint num,gdouble v[]) { gint i; switch(num) { case 0 : for(i=0;i<3;i++) light0_position[i] = v[i]; break; case 1 : for(i=0;i<3;i++) light1_position[i] = v[i]; break; case 2 : for(i=0;i<3;i++) light2_position[i] = v[i]; break; } } /*********************************************************************************************/ void set_operation_type(gint i) { OperationType = i; } /*********************************************************************************************/ void set_light_on_off(gint i) { lightOnOff[i] = !lightOnOff[i] ; } /*********************************************************************************************/ void add_surface() { numberOfSurfaces++; if(!positiveSurfaces) positiveSurfaces = g_malloc(sizeof(GLuint)); else positiveSurfaces = g_realloc(positiveSurfaces, numberOfSurfaces*sizeof(GLuint)); positiveSurfaces[numberOfSurfaces-1] = 0; if(!negativeSurfaces) negativeSurfaces = g_malloc(sizeof(GLuint)); else negativeSurfaces = g_realloc(negativeSurfaces, numberOfSurfaces*sizeof(GLuint)); negativeSurfaces[numberOfSurfaces-1] = 0; if(!nullSurfaces) nullSurfaces = g_malloc(sizeof(GLuint)); else nullSurfaces = g_realloc(nullSurfaces, numberOfSurfaces*sizeof(GLuint)); nullSurfaces[numberOfSurfaces-1] = 0; RebuildSurf = TRUE; addLastSurface(); } /*********************************************************************************************/ void add_maps(gint ii0, gint ii1, gint inumPlane, gdouble igap, gboolean newGrid) { i0PlaneMapped = ii0; i1PlaneMapped = ii1; numPlaneMaps = inumPlane; gapPlanesMapped = igap; newPlaneGridForPlanesMapped = newGrid; if(numPlaneMaps>=0) { newPlaneMapped = TRUE; nPlanesMapped++; reDrawPlaneMappedPlane = TRUE; if(!planesMappedLists) planesMappedLists = g_malloc(sizeof(GLuint)); else planesMappedLists = g_realloc(planesMappedLists, nPlanesMapped*sizeof(GLuint)); } } /*********************************************************************************************/ void add_void_maps() { if(nPlanesMapped<1) return; i0PlaneMapped = 0; i1PlaneMapped = 1; numPlaneMaps = -1; gapPlanesMapped = 0; newPlaneGridForPlanesMapped = FALSE; newPlaneMapped = TRUE; nPlanesMapped++; reDrawPlaneMappedPlane = TRUE; if(!planesMappedLists) planesMappedLists = g_malloc(sizeof(GLuint)); else planesMappedLists = g_realloc(planesMappedLists, nPlanesMapped*sizeof(GLuint)); planesMappedLists[nPlanesMapped-1] = 0; } /********************************************************/ void free_planes_mapped_all() { if(planesMappedLists) { gint i; for(i=0;i=0) glClearColor(BackColor[optcol][0],BackColor[optcol][1],BackColor[optcol][2],BackColor[optcol][3]); else { glClearColor(BackColor[4][0],BackColor[4][1],BackColor[4][2],BackColor[4][3]); } } /********************************************************/ void free_contours_all() { if(contoursLists) { gint i; for(i=0;imapped ); if(fabs(isovalue)>1e-13) isonegative=define_iso_surface(grid,-isovalue, grid->mapped ); if(isopositive != NULL || isonegative != NULL) set_status_label_info("IsoSurface","Ok"); } RebuildSurf = TRUE; } /********************************************************/ void Define_Grid() { free_grid_all(); /* free_contours_all(); free_planes_mapped_all(); */ grid = define_grid(NumPoints,limits); if(grid) { if(!showOneSurface || numberOfSurfaces<1 ) add_surface(); free_iso_all(); limits.MinMax[0][3] = grid->limits.MinMax[0][3]; limits.MinMax[1][3] = grid->limits.MinMax[1][3]; } } /********************************************************/ static V4d Quat; static GLdouble BeginX = 0; static GLdouble BeginY = 0; /*********************************************************************************************/ void resetBeginNegative() { BeginX = -1; BeginY = -1; } /*********************************************************************************************/ void getQuat(gdouble q[]) { gint i; for(i=0;i<4;i++) q[i] = Quat[i]; } /*********************************************************************************************/ static void SetLight() { static float lmodel_ambient[] = {0.1, 0.1, 0.1, 0.1}; static float lmodel_twoside[] = {GL_TRUE}; static float lmodel_local[] = {GL_FALSE}; static V4d light0_ambient = {0.5, 0.5, 0.5, 1.0}; static V4d light0_diffuse = {1.0, 1.0, 1.0, 0.0}; static V4d light0_specular = {1.0, 1.0, 1.0, 0.0}; static V4d light1_ambient = {1.0, 1.0, 1.0, 1.0}; static V4d light1_diffuse = {1.0, 1.0, 1.0, 0.0}; static V4d light1_specular = {1.0, 1.0, 1.0, 0.0}; static V4d light2_ambient = {0.1, 0.1, 0.1, 1.0}; static V4d light2_diffuse = {1.0, 1.0, 1.0, 0.0}; static V4d light2_specular = {1.0, 1.0, 1.0, 0.0}; glLightdv(GL_LIGHT0, GL_AMBIENT, light0_ambient); glLightdv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse); glLightdv(GL_LIGHT0, GL_SPECULAR, light0_specular); glLightdv(GL_LIGHT0, GL_POSITION, light0_position); glLightdv(GL_LIGHT1, GL_AMBIENT, light1_ambient); glLightdv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse); glLightdv(GL_LIGHT1, GL_SPECULAR, light1_specular); glLightdv(GL_LIGHT1, GL_POSITION, light1_position); glLightdv(GL_LIGHT2, GL_AMBIENT, light2_ambient); glLightdv(GL_LIGHT2, GL_DIFFUSE, light2_diffuse); glLightdv(GL_LIGHT2, GL_SPECULAR, light2_specular); glLightdv(GL_LIGHT2, GL_POSITION, light2_position); glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, lmodel_local); glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); glEnable(GL_LIGHTING); glDisable(GL_LIGHT0); glDisable(GL_LIGHT1); glDisable(GL_LIGHT2); if(lightOnOff[0]) glEnable(GL_LIGHT0); if(lightOnOff[1]) glEnable(GL_LIGHT1); if(lightOnOff[2]) glEnable(GL_LIGHT2); } /*****************************************************************************/ void InitGL() { /* static GLdouble fog_color[4] = { 0.0, 0.0, 0.0, 0.0 };*/ /* remove back faces */ glEnable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); glColorMaterial(GL_FRONT_AND_BACK,GL_DIFFUSE); /*glEnable(GL_COLOR_MATERIAL);*/ glEnable(GL_NORMALIZE); glShadeModel(GL_SMOOTH); SetLight(); init_labels_font(); glInitFonts(); /* glFogi(GL_FOG_MODE, GL_EXP); glFogf(GL_FOG_DENSITY, 0.15); glFogdv(GL_FOG_COLOR, fog_color); */ } /*****************************************************************************/ gint init(GtkWidget *widget) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); if(!GTK_IS_WIDGET(widget)) return TRUE; if(!GTK_WIDGET_REALIZED(widget)) return TRUE; if (gdk_gl_drawable_gl_begin (gldrawable, glcontext)) { glViewport(0,0, widget->allocation.width, widget->allocation.height); InitGL(); gdk_window_invalidate_rect (gtk_widget_get_parent_window (widget), &widget->allocation, TRUE); /* gdk_window_process_updates (gtk_widget_get_parent_window (widget), TRUE);*/ } return TRUE; } /*****************************************************************************/ static void redrawGeometry() { gint i; if (RebuildGeom || glIsList(GeomList) != GL_TRUE ) { /* Debug("Re Gen Geom List\n");*/ GeomList = GeomGenList(GeomList, scaleBall, scaleStick, getShowBox()); GeomShowList(GeomList); DipList = DipGenList(DipList); DipShowList(DipList); axisList = axisGenList(axisList); axisShowList(axisList); principalAxisList = principalAxisGenList(principalAxisList); principalAxisShowList(principalAxisList); VibList = VibGenList(VibList); VibShowList(VibList); RebuildGeom = FALSE; delete_rings_all(); } else { /* Debug("from Lists GeomList = %d\n",GeomList);*/ GeomShowList(GeomList); DipShowList(DipList); axisShowList(axisList); principalAxisShowList(principalAxisList); VibShowList(VibList); for(i=0;i0) { gint i; IsoGenLists(&positiveSurfaces[numberOfSurfaces-1], &negativeSurfaces[numberOfSurfaces-1], &nullSurfaces[numberOfSurfaces-1],isopositive,isonegative,isonull); createLastSurfacePovRay(); for(i=0;i0) { if(nPlanesContours==1 && !animateContours ) showColorMapContours(); else hideColorMapContours(); if(newPlaneGridForContours) { /* Debug("Begin Contourlist calculation\n"); Debug("GridPlans = %d\n",gridPlaneForContours); Debug("numberOfContours = %d\n",numberOfContours); Debug("values = %d\n",values); */ contoursLists[nPlanesContours-1]= ContoursGenLists(contoursLists[nPlanesContours-1],gridPlaneForContours,numberOfContours,values,i0Contours,i1Contours,numPlaneContours,gapContours); addContoursPovRay(gridPlaneForContours,numberOfContours,values,i0Contours,i1Contours,numPlaneContours,gapContours); /* Debug("End Contourlist calculation\n");*/ newPlaneGridForContours = FALSE; if(nPlanesContours!=1) { if(gridPlaneForContours) g_free(gridPlaneForContours); gridPlaneForContours = NULL; } } else { contoursLists[nPlanesContours-1]= ContoursGenLists(contoursLists[nPlanesContours-1],grid,numberOfContours,values,i0Contours,i1Contours,numPlaneContours,gapContours); addContoursPovRay(grid,numberOfContours,values,i0Contours,i1Contours,numPlaneContours,gapContours); } newContours = FALSE; reBuildFirstPlaneContours = FALSE; } if(nPlanesContours>1 && gridPlaneForContours) { if(gridPlaneForContours) g_free(gridPlaneForContours); gridPlaneForContours = NULL; } if(reBuildFirstPlaneContours && nPlanesContours==1 && BeginX == -1 ) { deleteContoursPovRayFile(); if(gridPlaneForContours && reDrawContoursPlane) { contoursLists[nPlanesContours-1]= ContoursGenLists(contoursLists[nPlanesContours-1],gridPlaneForContours,numberOfContours,values,i0Contours,i1Contours,numPlaneContours,gapContours); addContoursPovRay(gridPlaneForContours,numberOfContours,values,i0Contours,i1Contours,numPlaneContours,gapContours); } else if(reDrawContoursPlane) { contoursLists[nPlanesContours-1]= ContoursGenLists(contoursLists[nPlanesContours-1],grid,numberOfContours,values,i0Contours,i1Contours,numPlaneContours,gapContours); addContoursPovRay(grid,numberOfContours,values,i0Contours,i1Contours,numPlaneContours,gapContours); } } for(i=0;i0) { if(nPlanesMapped==1 && !animatePlanesMapped) showColorMapPlanesMapped(); else hideColorMapPlanesMapped(); if(newPlaneGridForPlanesMapped) { planesMappedLists[nPlanesMapped-1]= PlanesMappedGenLists(planesMappedLists[nPlanesMapped-1],gridPlaneForPlanesMapped,i0PlaneMapped,i1PlaneMapped,numPlaneMaps,gapPlanesMapped); addPlaneMappedPovRay(gridPlaneForPlanesMapped,i0PlaneMapped,i1PlaneMapped,numPlaneMaps,gapPlanesMapped); newPlaneGridForPlanesMapped = FALSE; if(nPlanesMapped!=1) { if(gridPlaneForPlanesMapped) g_free(gridPlaneForPlanesMapped); gridPlaneForPlanesMapped = NULL; } } else { planesMappedLists[nPlanesMapped-1]= PlanesMappedGenLists(planesMappedLists[nPlanesMapped-1],grid,i0PlaneMapped,i1PlaneMapped,numPlaneMaps,gapPlanesMapped); addPlaneMappedPovRay(grid,i0PlaneMapped,i1PlaneMapped,numPlaneMaps,gapPlanesMapped); } newPlaneMapped = FALSE; reBuildFirstPlaneMapped = FALSE; } if(nPlanesMapped>1 && gridPlaneForPlanesMapped) { if(gridPlaneForPlanesMapped) g_free(gridPlaneForPlanesMapped); gridPlaneForPlanesMapped = NULL; } if(reBuildFirstPlaneMapped && nPlanesMapped==1 && BeginX == -1 ) { deletePlanesMappedPovRayFile(); if(gridPlaneForPlanesMapped&& reDrawPlaneMappedPlane) { planesMappedLists[nPlanesMapped-1]= PlanesMappedGenLists(planesMappedLists[nPlanesMapped-1],gridPlaneForPlanesMapped,i0PlaneMapped,i1PlaneMapped,numPlaneMaps,gapPlanesMapped); addPlaneMappedPovRay(gridPlaneForPlanesMapped,i0PlaneMapped,i1PlaneMapped,numPlaneMaps,gapPlanesMapped); } else if(reDrawPlaneMappedPlane) { planesMappedLists[nPlanesMapped-1]= PlanesMappedGenLists(planesMappedLists[nPlanesMapped-1],grid,i0PlaneMapped,i1PlaneMapped,numPlaneMaps,gapPlanesMapped); addPlaneMappedPovRay(grid,i0PlaneMapped,i1PlaneMapped,numPlaneMaps,gapPlanesMapped); } } for(i=0;iallocation.width/(GLdouble)widget->allocation.height,1,100); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if(optcol==-1) drawChecker(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(perspective) mYPerspective(Zoom,(GLdouble)widget->allocation.width/(GLdouble)widget->allocation.height,zNear,zFar); else { gdouble fw = (GLdouble)widget->allocation.width/(GLdouble)widget->allocation.height; gdouble fh = 1.0; glOrtho(-fw,fw,-fh,fh,-1,1); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if(perspective) glTranslatef(Trans[0],Trans[1],Trans[2]); else { glTranslatef(Trans[0]/10,Trans[1]/10,0); glScalef(1/Zoom*2,1/Zoom*2,1/Zoom*2); } SetLight(); build_rotmatrix(m,Quat); glMultMatrixd(&m[0][0]); redrawGeometry(); redrawSurfaces(); redrawBox(); redrawContours(); redrawPlanesMapped(); if(get_show_symbols() || get_show_numbers() || get_show_charges()) showLabelSymbolsNumbersCharges(); if(get_show_dipole()) showLabelDipole(); if(get_show_distances()) showLabelDistances(); if(get_show_axes()) showLabelAxes(); if(get_show_axes()) showLabelPrincipalAxes(); showLabelTitle(GLArea->allocation.width,GLArea->allocation.height); /* Swap backbuffer to front */ glFlush(); return TRUE; } /*****************************************************************************/ static gint redraw(GtkWidget *widget, gpointer data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); GLdouble m[4][4]; if(!GTK_IS_WIDGET(widget)) return TRUE; if(!GTK_WIDGET_REALIZED(widget)) return TRUE; if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; glMatrixMode(GL_PROJECTION); glLoadIdentity(); addFog(); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); set_background_color(); mYPerspective(45,(GLdouble)widget->allocation.width/(GLdouble)widget->allocation.height,1,100); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if(optcol==-1) drawChecker(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(perspective) mYPerspective(Zoom,(GLdouble)widget->allocation.width/(GLdouble)widget->allocation.height,zNear,zFar); else { gdouble fw = (GLdouble)widget->allocation.width/(GLdouble)widget->allocation.height; gdouble fh = 1.0; glOrtho(-fw,fw,-fh,fh,-1,1); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if(perspective) glTranslatef(Trans[0],Trans[1],Trans[2]); else { glTranslatef(Trans[0]/10,Trans[1]/10,0); glScalef(1/Zoom*2,1/Zoom*2,1/Zoom*2); } SetLight(); build_rotmatrix(m,Quat); glMultMatrixd(&m[0][0]); redrawGeometry(); redrawSurfaces(); redrawBox(); redrawContours(); redrawPlanesMapped(); if(get_show_symbols() || get_show_numbers() || get_show_charges()) showLabelSymbolsNumbersCharges(); if(get_show_dipole()) showLabelDipole(); if(get_show_distances()) showLabelDistances(); if(get_show_axes()) showLabelAxes(); if(get_show_axes()) showLabelPrincipalAxes(); showLabelTitle(GLArea->allocation.width,GLArea->allocation.height); /* glEnable(GL_DEPTH_TEST); glDepthMask(GL_TRUE); glDepthRange(0.0f,1.0f); */ if (gdk_gl_drawable_is_double_buffered (gldrawable)) gdk_gl_drawable_swap_buffers (gldrawable); else glFlush (); gdk_gl_drawable_gl_end (gldrawable); while( gtk_events_pending() ) gtk_main_iteration(); createImagesFiles(); /* gtk_widget_queue_draw(PrincipalWindow);*/ return TRUE; } /*********************************************************************************/ /* When widget is exposed it's contents are redrawn. */ static gint draw(GtkWidget *widget, GdkEventExpose *event) { static gint i = 0; i++; if (!GTK_IS_WIDGET(widget)) return TRUE; if(!GTK_WIDGET_REALIZED(widget)) return TRUE; /* Draw only last expose. */ if (event->count > 0) return FALSE; redraw(widget,NULL); return FALSE; } /*****************************************************************************/ /* When GLArea widget size changes, viewport size is set to match the new size */ static gint reshape(GtkWidget *widget, GdkEventConfigure *event) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); if(!GTK_IS_WIDGET(widget)) return TRUE; if(!GTK_WIDGET_REALIZED(widget)) return TRUE; if (gdk_gl_drawable_gl_begin (gldrawable, glcontext)) { /* pthread_mutex_lock (&theRender_mutex);*/ glViewport(0,0, widget->allocation.width, widget->allocation.height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(perspective) mYPerspective(Zoom,(GLdouble)widget->allocation.width/(GLdouble)widget->allocation.height,zNear,zFar); else { gdouble fw = (GLdouble)widget->allocation.width/(GLdouble)widget->allocation.height; gdouble fh = 1.0; glOrtho(-fw,fw,-fh,fh,-1,1); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gdk_gl_drawable_gl_end (gldrawable); /* pthread_mutex_unlock (&theRender_mutex);*/ gdk_window_invalidate_rect (gtk_widget_get_parent_window (widget), &widget->allocation, TRUE); gdk_window_process_updates (gtk_widget_get_parent_window (widget), TRUE); } return TRUE; } /********************************************************************************/ static gint set_key_press(GtkWidget* wid, GdkEventKey *event, gpointer data) { if((event->keyval == GDK_Control_L || event->keyval == GDK_Control_R) ) g_object_set_data(G_OBJECT (wid), "ControlKeyPressed", GINT_TO_POINTER(1)); if((event->keyval == GDK_Alt_L || event->keyval == GDK_Alt_R) ) g_object_set_data(G_OBJECT (wid), "ControlKeyPressed", GINT_TO_POINTER(1)); if((event->keyval == GDK_c || event->keyval == GDK_C) ) { gint ControlKeyPressed = GPOINTER_TO_INT(g_object_get_data(G_OBJECT (wid), "ControlKeyPressed")); if(ControlKeyPressed) { /* printf("Copy to clipboard\n");*/ copy_to_clipboard(); } } GTK_WIDGET_GET_CLASS(wid)->key_press_event(wid, event); return TRUE; } /********************************************************************************/ static gint set_key_release(GtkWidget* wid, GdkEventKey *event, gpointer data) { if((event->keyval == GDK_Control_L || event->keyval == GDK_Control_R) ) g_object_set_data(G_OBJECT (wid), "ControlKeyPressed", GINT_TO_POINTER(0)); if((event->keyval == GDK_Alt_L || event->keyval == GDK_Alt_R) ) g_object_set_data(G_OBJECT (wid), "ControlKeyPressed", GINT_TO_POINTER(0)); return TRUE; } /***************************************************************************** * event_dispatcher ******************************************************************************/ static gint event_dispatcher(GtkWidget *DrawingArea, GdkEvent *event, gpointer data) { GdkEventButton *bevent; switch (event->type) { case GDK_BUTTON_PRESS: { bevent = (GdkEventButton *) event; if (bevent->button == 3) /* Right Button ==> Popup Menu */ { PopupMenuIsOpen = TRUE; popuo_menu_GL(bevent->button, bevent->time); } return TRUE; } default : return TRUE; } return FALSE; } /******************************************************************************/ gint glarea_button_release (GtkWidget *widget, GdkEventButton *event) { if (event->button == 1 || event->button == 2) { resetBeginNegative(); redraw(widget,NULL); return TRUE; } return FALSE; } /******************************************************************************/ gint glarea_button_press(GtkWidget *widget, GdkEventButton *event) { if (event->button == 1 || event->button == 2) { /* beginning of drag, reset mouse position */ BeginX= event->x; BeginY = event->y; return TRUE; } return FALSE; } /*****************************************************************/ static void rotation(GtkWidget *widget, GdkEventMotion *event,gint x, gint y) { gdouble width; gdouble height; width = widget->allocation.width; height = widget->allocation.height; GLdouble spin_quat[4]; /* drag in progress, simulate trackball */ trackball(spin_quat, (2.0*BeginX- width) / width, ( height - 2.0*BeginY) / height, ( 2.0*x - width) / width, ( height - 2.0*y) / height); add_quats(spin_quat, Quat, Quat); BeginX = x; BeginY = y; } /*****************************************************************/ void rotationAboutAnAxis(GtkWidget *widget, gdouble phi, gint axe) { GLdouble spin_quat[4] = {0,0,0,0}; gdouble phiRad = phi/180*PI; if(axe<0 || axe>2) return; spin_quat[axe] = 1.0; v3d_scale(spin_quat,sin(phiRad/2)); spin_quat[3] = cos(phiRad/2); add_quats(spin_quat, Quat, Quat); } /*****************************************************************/ static void rotationXYZ(GtkWidget *widget, GdkEventMotion *event,gint x, gint y, gint axe) { GLdouble spin_quat[4]; gint width = widget->allocation.width; gint height = widget->allocation.height; if(axe==0) { BeginX = x = widget->allocation.width/2; } if(axe==1) { BeginY = y = widget->allocation.height/2; } if(axe==2) { gdouble phi = 1; if(abs(BeginX-x)>abs(BeginY-y)) { gdouble sign = 1.0; if(BeginY> height/2 && BeginXx) sign = -1; phi = sign* fabs(BeginX-x)/width*180; } else { gdouble sign = 1.0; if(BeginX> width/2 && BeginY>y) sign = -1; if(BeginX< width/2 && BeginYallocation.width;*/ height = widget->allocation.height; /* zooming drag */ Zoom -= ((y - BeginY) / height) * 40; if (Zoom < 0.1) Zoom = 0.1; if (Zoom > 500) Zoom = 500; BeginX = x; BeginY = y; } /*****************************************************************/ static void translate(GtkWidget *widget, GdkEventMotion *event,gint x,gint y) { gdouble width; gdouble height; width = widget->allocation.width; height = widget->allocation.height; Trans[0] += ((x - BeginX) / width) * 40; Trans[1] += ((BeginY - y) / height) * 40; BeginX = x; BeginY = y; } /******************************************************************************/ gint glarea_motion_notify(GtkWidget *widget, GdkEventMotion *event) { gint x, y; GdkModifierType state; if (event->is_hint) { #if !defined(G_OS_WIN32) gdk_window_get_pointer(event->window, &x, &y, &state); #else state = event->state; #endif } else state = event->state; x = event->x; y = event->y; if (state & GDK_BUTTON1_MASK) { switch(OperationType) { case OPERATION_ROTATION_FREE : rotation(widget,event,x,y); redraw(widget,NULL); break; case OPERATION_ROTATION_X : rotationXYZ(widget,event,x,y,0); redraw(widget,NULL); break; case OPERATION_ROTATION_Y : rotationXYZ(widget,event,x,y,1); redraw(widget,NULL); break; case OPERATION_ROTATION_Z : rotationXYZ(widget,event,x,y,2); redraw(widget,NULL); break; case OPERATION_ZOOM : zoom(widget,event,x,y); redraw(widget,NULL); break; case OPERATION_TRANSLATION : translate(widget,event,x,y); redraw(widget,NULL); break; } } if (state & GDK_BUTTON2_MASK) { rotation(widget,event,x,y); redraw(widget,NULL); } return TRUE; } /******************************************************************************/ gint glarea_rafresh(GtkWidget *widget) { if(!widget) return FALSE; redraw(GLArea,NULL); return TRUE; } /******************************************************************************/ void rafresh_window_orb() { if(GLArea != NULL) { gint j; RebuildGeom = TRUE; RebuildSurf = TRUE; for(j=0;jbutton, bevent->time); } /********************************************************************************/ static void add_menu_button(GtkWidget *Win, GtkWidget *box) { GtkWidget* menuButton; menuButton = gtk_button_new_with_label("M"); gtk_box_pack_start (GTK_BOX (box), menuButton, FALSE, TRUE, 0); g_signal_connect(G_OBJECT(menuButton), "button_press_event",G_CALLBACK(open_menu), NULL); gtk_widget_show (menuButton); } /********************************************************************************************/ gboolean NewGLArea(GtkWidget* vboxwin) { GtkWidget* frame; /* gchar *info_str; */ GtkWidget* table; GtkWidget* hboxtoolbar; GtkWidget* vbox; #define DIMAL 13 /* int k = 0;*/ GdkGLConfig *glconfig; /* k = 0; if(openGLOptions.alphaSize!=0) { attrlist[k++] = GDK_GL_ALPHA_SIZE; attrlist[k++] = 1; } if(openGLOptions.depthSize!=0) { attrlist[k++] = GDK_GL_DEPTH_SIZE; attrlist[k++] = 1; } if(openGLOptions.doubleBuffer!=0) attrlist[k++] = GDK_GL_DOUBLEBUFFER; */ set_show_symbols(FALSE); set_show_distances(FALSE); trackball(Quat , 0.0, 0.0, 0.0, 0.0); frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 0); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_box_pack_start (GTK_BOX (vboxwin), frame, TRUE, TRUE, 0); gtk_widget_show (frame); table = gtk_table_new(2,2,FALSE); gtk_container_add(GTK_CONTAINER(frame),table); gtk_widget_show(GTK_WIDGET(table)); /* hboxtoolbar = gtk_hbox_new (FALSE, 0); gtk_widget_show (hboxtoolbar); gtk_table_attach(GTK_TABLE(table), hboxtoolbar,0,1,0,1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK ), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND ), 0,0); */ vbox = gtk_vbox_new (FALSE, 0); gtk_table_attach(GTK_TABLE(table), vbox, 0,1, 0,1, GTK_FILL , GTK_FILL, 0, 0); gtk_widget_show(vbox); add_menu_button(PrincipalWindow, vbox); hboxtoolbar = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hboxtoolbar, TRUE, TRUE, 0); gtk_widget_show(hboxtoolbar); gtk_quit_add_destroy(1, GTK_OBJECT(PrincipalWindow)); /* Create new OpenGL widget. */ /* pthread_mutex_init (&theRender_mutex, NULL);*/ GLArea = gtk_drawing_area_new (); gtk_drawing_area_size(GTK_DRAWING_AREA(GLArea),(gint)(ScreenHeight*0.2),(gint)(ScreenHeight*0.2)); gtk_table_attach(GTK_TABLE(table),GLArea,1,2,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND ), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND ), 0,0); gtk_widget_show(GTK_WIDGET(GLArea)); /* Events for widget must be set before X Window is created */ gtk_widget_set_events(GLArea, GDK_EXPOSURE_MASK| GDK_BUTTON_PRESS_MASK| GDK_BUTTON_RELEASE_MASK| GDK_POINTER_MOTION_MASK| GDK_POINTER_MOTION_HINT_MASK | GDK_SCROLL_MASK ); /* prepare GL */ glconfig = configure_gl(); if (!glconfig) { g_assert_not_reached (); } if (!gtk_widget_set_gl_capability (GLArea, glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE)) { g_assert_not_reached (); } g_signal_connect(G_OBJECT(GLArea), "realize", G_CALLBACK(init), NULL); g_signal_connect(G_OBJECT(GLArea), "configure_event", G_CALLBACK(reshape), NULL); g_signal_connect(G_OBJECT(GLArea), "expose_event", G_CALLBACK(draw), NULL); /*gtk_widget_set_size_request(GTK_WIDGET(GLArea ),(gint)(ScreenHeight*0.2),(gint)(ScreenHeight*0.2));*/ gtk_widget_realize(GTK_WIDGET(PrincipalWindow)); /* info_str = gdk_gl_get_info(); Debug("%s\n",info_str); g_free(info_str); */ g_signal_connect (G_OBJECT(GLArea), "button_press_event", G_CALLBACK(glarea_button_press), NULL); g_signal_connect_after(G_OBJECT(GLArea), "button_press_event", G_CALLBACK(event_dispatcher), NULL); g_signal_connect_after(G_OBJECT(GLArea), "motion_notify_event", G_CALLBACK(glarea_motion_notify), NULL); g_signal_connect (G_OBJECT(GLArea), "button_release_event", G_CALLBACK(glarea_button_release), NULL); create_toolbar_and_popup_menu_GL(hboxtoolbar); g_signal_connect(G_OBJECT (PrincipalWindow), "key_press_event", (GCallback) set_key_press, GLArea); g_signal_connect(G_OBJECT (PrincipalWindow), "key_release_event", (GCallback) set_key_release, NULL); return TRUE; } /*****************************************************************************/ GabeditSrc250/src/Display/Dep.mk0000644000175100017510000000000013130664665016725 0ustar allouchealloucheGabeditSrc250/src/Display/Contours.c0000644000175100017510000010570513130665225017657 0ustar alloucheallouche/* Contours.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include "GlobalOrb.h" #include "Orbitals.h" #include "GLArea.h" #include "UtilsOrb.h" #include "../Utils/UtilsInterface.h" #include "Contours.h" #include "../Utils/Utils.h" static void reset_limits_values(GtkWidget *Win,gpointer data); static gboolean linear = TRUE; /**************************************************************/ PointsContour** contour_point_alloc(gint N[],gint i0, gint i1) { PointsContour** points; gint i; gint j; points = g_malloc(N[i0]*sizeof(PointsContour*)); for(i=0;i< N[i0] ;i++) { points[i] = g_malloc(N[i1]*sizeof(PointsContour)); for( j = 0; j0 && contours.pointscontour[i][j].point) g_free(contours.pointscontour[i][j].point); } g_free(contours.pointscontour[i]); } } g_free(contours.pointscontour); } /**************************************************************/ void set_contour_point(PointsContour** pointscontour,Grid* plansgrid,gdouble value,gint i0,gint i1,gint numplan) { gint i; gint j; gint k; gint c; Point5 t[4]; gdouble u1; gdouble u2; gdouble v1; gdouble v2; gint ip = numplan; gint ix=0,iy=0,iz=0; gint ix1=0,iy1=0,iz1=0; gint ix2=0,iy2=0,iz2=0; gint ix3=0,iy3=0,iz3=0; gint ix4=0,iy4=0,iz4=0; for( i = 0; iN[i0]-1;i++) { for( j = 0; jN[i1]-1;j++) { switch(i0) { case 0: ix = i; ix1 = ix2 = ix + 1; ix4 = ix3 = ix; switch(i1) { case 1 : iy = j; iz = ip; iy1 = iy4 = iy; iy2 = iy3 = iy+1 ; iz1 = iz2 = iz3 = iz4 = iz; break; case 2 : iy = ip;iz = j; iy1 = iy2 = iy3 = iy4 = iy; iz1 = iz4 = iz; iz2 = iz3 = iz+1 ; break; } break; case 1: iy = i; iy1 = iy2 = iy + 1; iy3 = iy4 = iy ; switch(i1) { case 0 : ix = j; iz = ip; iz1 = iz2 = iz3 = iz4 = iz; ix1 = ix4 = ix; ix2 = ix3 = ix+1 ; break; case 2 : ix = ip;iz = j; ix1 = ix2 = ix3 = ix4 = ix; iz1 = iz4 = iz; iz2 = iz3 = iz+1 ; break; } break; case 2: iz = i; iz1 = iz2 = iz + 1; iz3 = iz4 = iz ; switch(i1) { case 0 : ix = j; iy = ip; iy1 = iy2 = iy3 = iy4 = iy; ix1 = ix4 = ix; ix2 = ix3 = ix+1 ; break; case 1 : ix = ip;iy = j; ix1 = ix2 = ix3 = ix4 = ix; iy1 = iy4 = iy; iy2 = iy3 = iy+1 ; break; } break; } v1 = plansgrid->point[ix][iy][iz].C[3]-value, v2 = plansgrid->point[ix1][iy1][iz1].C[3]-value; k = -1; if( v1*v2 <0 ) { k++; for(c=0;c<3;c++) { u1 = plansgrid->point[ix][iy][iz].C[c]; u2 = plansgrid->point[ix1][iy1][iz1].C[c]; if(v1==0) t[k].C[c] = u1; else t[k].C[c] = u1 - v1 *(u2-u1)/(v2-v1); } t[k].C[3] =value; } v1 = v2; v2 = plansgrid->point[ix2][iy2][iz2].C[3]-value; if( v1*v2 <0 ) { k++; for(c=0;c<3;c++) { u1 = plansgrid->point[ix1][iy1][iz1].C[c]; u2 = plansgrid->point[ix2][iy2][iz2].C[c]; if(v1==0) t[k].C[c] = u1; else t[k].C[c] = u1 - v1 *(u2-u1)/(v2-v1); } t[k].C[3] =value; } v1 = v2; v2 = plansgrid->point[ix3][iy3][iz3].C[3]-value; if( v1*v2 <0 ) { k++; for(c=0;c<3;c++) { u1 = plansgrid->point[ix2][iy2][iz2].C[c]; u2 = plansgrid->point[ix3][iy3][iz3].C[c]; if(v1==0) t[k].C[c] = u1; else t[k].C[c] = u1 - v1 *(u2-u1)/(v2-v1); } t[k].C[3] =value; } v1 = v2; v2 = plansgrid->point[ix4][iy4][iz4].C[3]-value; if( v1*v2 <0 ) { k++; for(c=0;c<3;c++) { u1 = plansgrid->point[ix3][iy3][iz3].C[c]; u2 = plansgrid->point[ix4][iy4][iz4].C[c]; if(v1==0) t[k].C[c] = u1; else t[k].C[c] = u1 - v1 *(u2-u1)/(v2-v1); } t[k].C[3] =value; } pointscontour[i][j].N = k+1; pointscontour[i][j].point = NULL; if(pointscontour[i][j].N>0) { pointscontour[i][j].point = g_malloc(pointscontour[i][j].N*sizeof(Point5)); for(k=0;kN,i0,i1); set_contour_point(pointscontour,plansgrid,value,i0,i1,numplan); contours.N[0] = plansgrid->N[i0]; contours.N[1] = plansgrid->N[i1]; contours.pointscontour = pointscontour; return contours; } /********************************************************************************/ void create_contours_surface_one_plane(gint type, gdouble value) { gint i0 = 0; gint i1 = 1; gdouble gap = 0; gint numplane = 0; switch(type) { case 0 : i0 = 1;i1 = 2;break; /* plane YZ */ case 1 : i0 = 0;i1 = 2;break; /* plane XZ */ case 2 : i0 = 0;i1 = 1;break; /* plane XY */ } for(numplane=0;numplaneN[type];numplane++) { gdouble* values = g_malloc(sizeof(gdouble)); *values = value; set_contours_values(1, values, i0, i1, numplane, gap); glarea_rafresh(GLArea); } } /********************************************************************************/ void create_contours_surface(gboolean first, gboolean second, gboolean third, gdouble value) { if(first) create_contours_surface_one_plane(0, value); if(second) create_contours_surface_one_plane(1, value); if(third) create_contours_surface_one_plane(2, value); } /********************************************************************************/ static void apply_contours_isosurface(GtkWidget *Win,gpointer data) { GtkWidget* Entry =(GtkWidget*)g_object_get_data(G_OBJECT (Win), "Entry"); gchar* temp; gdouble isovalue; temp = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry))); delete_first_spaces(temp); delete_last_spaces(temp); if(this_is_a_real(temp)) isovalue = atof(temp); else { GtkWidget* message =Message(_("Error : one entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(fabs(isovalue)>fabs(limits.MinMax[1][3]) && fabs(isovalue)>fabs(limits.MinMax[0][3])) { gchar buffer[1024]; sprintf(buffer,_("Error : The isovalue value should between %lf and %lf"),fabs(limits.MinMax[1][3]),fabs(limits.MinMax[0][3])); GtkWidget* message = Message(buffer,_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } delete_child(Win); create_contours_surface(TRUE, TRUE, FALSE, atof(temp)); } /********************************************************************************/ static void getiso(GtkWidget *button,gpointer data) { GtkWidget* Entry =(GtkWidget*)g_object_get_data(G_OBJECT (button), "Entry"); GtkWidget* EntryPercent =(GtkWidget*)g_object_get_data(G_OBJECT (button), "EntryPercent"); gchar* temp; gdouble isovalue = 0.1; gdouble percent = 100; gboolean square = TRUE; gdouble precision =1e-6; temp = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryPercent))); delete_first_spaces(temp); delete_last_spaces(temp); if(this_is_a_real(temp)) percent = fabs(atof(temp)); else { GtkWidget* message =Message(_("Error : one entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); if(temp) g_free(temp); return; } if(temp) g_free(temp); if(percent<0) percent = 0; if(percent>100) percent = 100; if( TypeGrid == GABEDIT_TYPEGRID_ELFSAVIN || TypeGrid == GABEDIT_TYPEGRID_ELFBECKE || TypeGrid == GABEDIT_TYPEGRID_FEDELECTROPHILIC || TypeGrid == GABEDIT_TYPEGRID_FEDNUCLEOPHILIC || TypeGrid == GABEDIT_TYPEGRID_FEDRADICAL ) square = FALSE; if(!compute_isovalue_percent_from_grid(grid, square, percent, precision, &isovalue)) return; temp = g_strdup_printf("%f",isovalue); gtk_entry_set_text(GTK_ENTRY(Entry),temp); if(temp) g_free(temp); } /********************************************************************************/ static GtkWidget *create_iso_frame( GtkWidget *vboxall,gchar* title) { GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *Entry; GtkWidget *EntryPercent; gushort i; gushort j; GtkWidget *Table; gdouble v; GtkWidget* button; #define NLIGNES 3 #define NCOLUMNS 3 gchar *strlabels[NLIGNES][NCOLUMNS]; strlabels[0][0] = g_strdup(_(" Min ")); strlabels[1][0] = g_strdup(_(" Max ")); strlabels[2][0] = g_strdup(_(" Value ")); strlabels[0][1] = g_strdup(" : "); strlabels[1][1] = g_strdup(" : "); strlabels[2][1] = g_strdup(" : "); if(fabs(limits.MinMax[0][3])>1e6) strlabels[0][2] = g_strdup_printf(" %e ",limits.MinMax[0][3]); else strlabels[0][2] = g_strdup_printf(" %lf ",limits.MinMax[0][3]); if(fabs(limits.MinMax[1][3])>1e6) strlabels[1][2] = g_strdup_printf(" %e ",limits.MinMax[1][3]); else strlabels[1][2] = g_strdup_printf(" %lf ",limits.MinMax[1][3]); v = limits.MinMax[1][3]/4; if(v>0.2 && fabs(limits.MinMax[1][3])>0.01 && fabs(limits.MinMax[0][3])<0.01) v= 0.01; if(TypeGrid == GABEDIT_TYPEGRID_SAS) v = 0; if(TypeGrid == GABEDIT_TYPEGRID_ELFSAVIN) v = 0.8; if(TypeGrid == GABEDIT_TYPEGRID_ELFBECKE) v = 0.8; if(TypeGrid == GABEDIT_TYPEGRID_FEDELECTROPHILIC) v *= 3; if(TypeGrid == GABEDIT_TYPEGRID_FEDNUCLEOPHILIC) v *= 3; if(TypeGrid == GABEDIT_TYPEGRID_FEDRADICAL) v *= 3; strlabels[2][2] = g_strdup_printf("%lf",v); frame = gtk_frame_new (title); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(3,3,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); for(i=0;i<3;i++) for(j=0;j<3;j++) if(i+j != 4) add_label_at_table(Table,strlabels[i][j],i,(gushort)j,GTK_JUSTIFY_LEFT); Entry= gtk_entry_new (); add_widget_table(Table,Entry,(gushort)2,(gushort)2); gtk_entry_set_text(GTK_ENTRY( Entry),strlabels[2][2]); for(i=0;i<3;i++) { for(j=0;j<3;j++) g_free(strlabels[i][j]); } gtk_box_pack_start (GTK_BOX (vboxframe), gtk_hseparator_new (), TRUE, TRUE, 0); Table = gtk_table_new(1,3,FALSE); gtk_box_pack_start (GTK_BOX (vboxframe), Table, TRUE, TRUE, 0); EntryPercent= gtk_entry_new (); gtk_widget_set_size_request(EntryPercent,60,-1); add_widget_table(Table,EntryPercent,0,0); gtk_entry_set_text(GTK_ENTRY( EntryPercent),"99"); g_object_set_data(G_OBJECT (frame), "EntryPercent",EntryPercent); add_label_at_table(Table,"%",0,1,GTK_JUSTIFY_LEFT); button = gtk_button_new_with_label(" Get Isovalue "); g_object_set_data(G_OBJECT (frame), "ButtonGet",button); gtk_table_attach(GTK_TABLE(Table),button,2,3,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_widget_show_all(frame); g_object_set_data(G_OBJECT (frame), "Entry",Entry); g_object_set_data(G_OBJECT (button), "EntryPercent",EntryPercent); g_object_set_data(G_OBJECT (button), "Entry",Entry); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)getiso,GTK_OBJECT(Entry)); return frame; #undef NLIGNES #undef NCOLUMNS } /********************************************************************************/ void create_contours_isosurface() { GtkWidget *Win; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *button; GtkWidget* Entry; if(!grid ) { if( !CancelCalcul) Message(_("Grid not defined "),_("Error"),TRUE); return; } /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),_("Draw contours for an isosurface")); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Iso surface "); vboxall = create_vbox(Win); vboxwin = vboxall; frame = create_iso_frame(vboxall,_("Iso-Value")); Entry = (GtkWidget*) g_object_get_data(G_OBJECT (frame), "Entry"); g_object_set_data(G_OBJECT (Win), "Entry",Entry); /* buttons box */ hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_contours_isosurface,GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT (Entry), "activate", (GCallback) gtk_button_clicked, GTK_OBJECT (button)); /* Show all */ gtk_widget_show_all (Win); } /********************************************************************************/ void apply_contours(GtkWidget *Win,gpointer data) { GtkWidget** Entrys =(GtkWidget**)g_object_get_data(G_OBJECT (Win), "Entrys"); gint type = *((gint*)g_object_get_data(G_OBJECT (Win), "Type")); guint handel_id = *((guint*)g_object_get_data(G_OBJECT (Entrys[0]), "HandelId")); GtkObject* Combo =(GtkObject*)g_object_get_data(G_OBJECT (Entrys[0]), "ComboList"); G_CONST_RETURN gchar* temp; gint i; gint N; gdouble min; gdouble max; gint i0=0; gint i1=1; gint numplane = -1; gdouble* values = NULL; gdouble step = 0; gint pvalue = 0; gdouble gap = 0; temp = gtk_entry_get_text(GTK_ENTRY(Entrys[0])); pvalue = atoi(temp); N = get_number_of_point(Entrys[1]); if(N<=0) return; if(!get_a_float(Entrys[2],&min, _("Error : The minimal value should be float."))) return; if(!get_a_float(Entrys[3],&max,_("Error : The maximal value should be float."))) return; if( max<=min) { GtkWidget* message = Message(_("Error : The minimal value should be smaller than the maximal value "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(!get_a_float(Entrys[4],&gap,_("Error : The projection value should be float."))) return; numplane = pvalue-1; if(numplane <0 || numplane>=grid->N[type]) numplane = grid->N[type]/2; switch(type) { case 0 : i0 = 1;i1 = 2;break; /* plane YZ */ case 1 : i0 = 0;i1 = 2;break; /* plane XZ */ case 2 : i0 = 0;i1 = 1;break; /* plane XY */ } /* Debug("N = %d\n",N);*/ values = g_malloc(N*sizeof(gdouble)); if(linear) { step = (max-min)/(N-1); for(i=0;i=grid->N[type]) numplane = grid->N[type]/2; for(i=0;iN[i0];i++) for(j=0;jN[i1];j++) { switch(type) { case 0 : ix = numplane;iy = i;iz = j;break; case 1 : ix = i;iy = numplane;iz = j;break; case 2 : ix = i;iy = j;iz = numplane;break; } if(i==0 && j==0) { min = grid->point[ix][iy][iz].C[3]; max = grid->point[ix][iy][iz].C[3]; } else { if(min>grid->point[ix][iy][iz].C[3]) min = grid->point[ix][iy][iz].C[3]; if(maxpoint[ix][iy][iz].C[3]) max = grid->point[ix][iy][iz].C[3]; } } temp = g_strdup_printf("%lf",min); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),temp); /*g_free(temp);*/ temp = g_strdup_printf(" >= %lf ",min); gtk_label_set_text(GTK_LABEL(LabelMin),temp); /*g_free(temp);*/ if(fabs(max-min)<1e-5) max +=1e-4; temp = g_strdup_printf("%lf",max); gtk_entry_set_text(GTK_ENTRY(Entrys[3]),temp); /*g_free(temp);*/ temp = g_strdup_printf(" <= %lf ",max); gtk_label_set_text(GTK_LABEL(LabelMax),temp); /*g_free(temp);*/ } /********************************************************************************/ static void linearSelected(GtkWidget *widget) { linear = TRUE; } /********************************************************************************/ static void logSelected(GtkWidget *widget) { linear = FALSE; } /********************************************************************************/ GtkWidget *create_contours_frame( GtkWidget *vboxall,gchar* title,gint type) { #define NLIGNES 8 #define NCOLUMNS 4 GtkWidget *frame; GtkWidget *combo; GtkWidget *Label; GtkWidget *LabelMin = NULL; GtkWidget *LabelMax = NULL; GtkWidget *vboxframe; GtkWidget *hseparator; GtkWidget *linearButton; GtkWidget *logButton; static guint handel_id = 0; GtkWidget **Entrys = (GtkWidget **)g_malloc(5*sizeof(GtkWidget *)); gushort i; gushort j; GtkWidget *Table; gchar** listvalues; gint ix=0,iy=0,iz=0; gdouble min = 0; gdouble max = 0; static gint itype = 0; gchar *strlabels[NLIGNES][NCOLUMNS]; itype = type; strlabels[0][0] = g_strdup(_(" Plane number ")); listvalues = g_malloc(grid->N[type]*sizeof(gchar*)); for(i=0;iN[type];i++) { switch(type) { case 0 : ix = i;iy = 0;iz = 0;break; case 1 : ix = 0;iy = i;iz = 0;break; case 2 : ix = 0;iy = 0;iz = i;break; } listvalues[i] = g_strdup_printf("%d",i+1); if(i==0) { min = grid->point[ix][iy][iz].C[3]; max = grid->point[ix][iy][iz].C[3]; } else { if(min>grid->point[ix][iy][iz].C[3]) min = grid->point[ix][iy][iz].C[3]; if(maxpoint[ix][iy][iz].C[3]) max = grid->point[ix][iy][iz].C[3]; } } strlabels[1][0] = g_strdup(_(" Numbre of contours ")); strlabels[2][0] = g_strdup(_(" Min iso-value ")); strlabels[3][0] = g_strdup(_(" Max iso-value ")); strlabels[4][0] = NULL; strlabels[5][0] = NULL; strlabels[6][0] = NULL; strlabels[7][0] = g_strdup(_(" Projection ")); strlabels[0][1] = g_strdup(" : "); strlabels[1][1] = g_strdup(" : "); strlabels[2][1] = g_strdup(" : "); strlabels[3][1] = g_strdup(" : "); strlabels[4][1] = NULL; strlabels[5][1] = NULL; strlabels[6][1] = NULL; strlabels[7][1] = g_strdup(" : "); strlabels[0][2] = g_strdup(" "); strlabels[1][2] = g_strdup("10"); strlabels[2][2] = g_strdup_printf("%lf",9*min/10); strlabels[3][2] = g_strdup_printf("%lf",9*max/10); strlabels[4][2] = NULL; strlabels[5][2] = NULL; strlabels[6][2] = NULL; strlabels[7][2] = g_strdup("0.0"); strlabels[0][3] = g_strdup(" "); strlabels[1][3] = g_strdup(" "); strlabels[2][3] = g_strdup_printf(" >= %lf ",min); strlabels[3][3] = g_strdup_printf(" <= %lf ",max); strlabels[4][3] = NULL; strlabels[5][3] = NULL; strlabels[6][3] = NULL; strlabels[7][3] = g_strdup(_(" left if <0, right if >0. and nothing if 0")); frame = gtk_frame_new (title); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(NLIGNES+1,NCOLUMNS,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); for(i=0;iN[type], FALSE,-1,-1); Entrys[0] = GTK_BIN(combo)->child; add_widget_table(Table,combo,(gushort)0,(gushort)2); Entrys[1] = gtk_entry_new (); add_widget_table(Table,Entrys[1],(gushort)1,(gushort)2); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),strlabels[1][2]); Entrys[2] = gtk_entry_new (); add_widget_table(Table,Entrys[2],(gushort)2,(gushort)2); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),strlabels[2][2]); Entrys[3] = gtk_entry_new (); add_widget_table(Table,Entrys[3],(gushort)3,(gushort)2); gtk_entry_set_text(GTK_ENTRY(Entrys[3]),strlabels[3][2]); Entrys[4] = gtk_entry_new (); add_widget_table(Table,Entrys[4],(gushort)7,(gushort)2); gtk_entry_set_text(GTK_ENTRY(Entrys[4]),strlabels[7][2]); i=4; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(Table),hseparator,0,4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 3,3); i=5; linearButton = gtk_radio_button_new_with_label( NULL,_("Linear scale")); add_widget_table(Table, linearButton,i,0); logButton = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (linearButton)), _("logarithmic scale")); gtk_table_attach(GTK_TABLE(Table), logButton,1,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); g_signal_connect (G_OBJECT(linearButton), "toggled", G_CALLBACK (linearSelected), NULL); g_signal_connect (G_OBJECT(logButton), "toggled", G_CALLBACK (logSelected), NULL); if(linear) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (linearButton), TRUE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (logButton), FALSE); } else { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (linearButton), FALSE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (logButton), TRUE); } i=6; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(Table),hseparator,0,4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 3,3); g_object_set_data(G_OBJECT (frame), "Entrys",Entrys); g_object_set_data(G_OBJECT (GTK_OBJECT(GTK_COMBO_BOX(combo))), "Entrys",Entrys); g_object_set_data(G_OBJECT (GTK_OBJECT(GTK_COMBO_BOX(combo))), "LabelMin",LabelMin); g_object_set_data(G_OBJECT (GTK_OBJECT(GTK_COMBO_BOX(combo))), "LabelMax",LabelMax); g_object_set_data(G_OBJECT (GTK_OBJECT(GTK_COMBO_BOX(combo))), "Type",&itype); handel_id = g_signal_connect(G_OBJECT(GTK_COMBO_BOX(combo)), "changed",G_CALLBACK(reset_limits_values),NULL); g_object_set_data(G_OBJECT(Entrys[0]), "HandelId",&handel_id); g_object_set_data(G_OBJECT(Entrys[0]), "ComboList",GTK_OBJECT(GTK_COMBO_BOX(combo))); gtk_entry_set_text(GTK_ENTRY(Entrys[0]),listvalues[grid->N[type]/2]); for(i=0;iN[type];i++) { if(listvalues[i]) g_free(listvalues[i]); } g_free(listvalues); gtk_widget_show_all(frame); return frame; } /**************************************************************/ void create_contours(gchar* title,gint type) { GtkWidget *Win; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *button; GtkWidget** Entrys; static gint itype; if(!grid) { if(!CancelCalcul) Message(_("Grid not defined "),_("Error"),TRUE); return; } itype = type; /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),title); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win," Contours "); vboxall = create_vbox(Win); vboxwin = vboxall; frame = create_contours_frame(vboxall,"Contours",type); Entrys = (GtkWidget**) g_object_get_data(G_OBJECT (frame), "Entrys"); g_object_set_data(G_OBJECT (Win), "Entrys",Entrys); g_object_set_data(G_OBJECT (Win), "Type",&itype); /* buttons box */ hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,"Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,"OK"); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_contours,GTK_OBJECT(Win)); /* Show all */ gtk_widget_show_all (Win); } /********************************************************************************/ void apply_contours_plane(GtkWidget *Win,gpointer data) { GtkWidget** Entrys =(GtkWidget**)g_object_get_data(G_OBJECT (Win), "Entrys"); gint N; gdouble minv; gdouble maxv; gdouble gap; N = get_number_of_point(Entrys[0]); if(N<=0) return; if(!get_a_float(Entrys[1],&minv,_("Error : The minimal value should be float."))) return; if(!get_a_float(Entrys[2],&maxv,_("Error : The maximal value should be float."))) return; if(!get_a_float(Entrys[3],&gap,_("Error : The projection value should be float."))) return; if( maxv<=minv) { GtkWidget* message = Message(_("Error : The minimal value should be smaller than the maximal value "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } /* Debug("N = %d min = %lf max = %lf\n",N,minv,maxv);*/ set_contours_values_from_plane(minv,maxv,N,gap,linear); /*Debug("N = %d min = %lf max = %lf\n",N,minv,maxv);*/ glarea_rafresh(GLArea); delete_child(Win); } /********************************************************************************/ static void destroyWin(GtkWidget *Win) { gtk_widget_destroy(Win); reDrawContoursPlane = TRUE; } /********************************************************************************/ GtkWidget *create_contours_frame_plane( GtkWidget *vboxall,gchar* title) { #define NLIGNESP 7 #define NCOLUMNSP 4 GtkWidget *frame; GtkWidget *Label; GtkWidget *vboxframe; GtkWidget *hseparator; GtkWidget *linearButton; GtkWidget *logButton; GtkWidget **Entrys = (GtkWidget **)g_malloc(4*sizeof(GtkWidget *)); gushort i; gushort j; GtkWidget *Table; gdouble min = 0; gdouble max = 0; gchar *strlabels[NLIGNESP][NCOLUMNSP]; for(i=0;iN[0];i++) for(j=0;jN[1];j++) { if( i==0 && j == 0) { min = gridPlaneForContours->point[i][j][0].C[3]; max = gridPlaneForContours->point[i][j][0].C[3]; } else { if(min>gridPlaneForContours->point[i][j][0].C[3]) min = gridPlaneForContours->point[i][j][0].C[3]; if(maxpoint[i][j][0].C[3]) max = gridPlaneForContours->point[i][j][0].C[3]; } } strlabels[0][0] = g_strdup(" Numbre of contours "); strlabels[1][0] = g_strdup(" Min iso-value "); strlabels[2][0] = g_strdup(" Max iso-value "); strlabels[3][0] = NULL; strlabels[4][0] = NULL; strlabels[5][0] = NULL; strlabels[6][0] = g_strdup(" Projection "); strlabels[0][1] = g_strdup(" : "); strlabels[1][1] = g_strdup(" : "); strlabels[2][1] = g_strdup(" : "); strlabels[3][1] = NULL; strlabels[4][1] = NULL; strlabels[5][1] = NULL; strlabels[6][1] = g_strdup(" : "); strlabels[0][2] = g_strdup("10"); strlabels[1][2] = g_strdup_printf("%lf",9*min/10); strlabels[2][2] = g_strdup_printf("%lf",9*max/10); strlabels[3][2] = NULL; strlabels[4][2] = NULL; strlabels[5][2] = NULL; strlabels[6][2] = g_strdup("0.0"); strlabels[0][3] = g_strdup(""); strlabels[1][3] = g_strdup_printf(" >= %lf ",min); strlabels[2][3] = g_strdup_printf(" <= %lf ",max); strlabels[3][3] = NULL; strlabels[4][3] = NULL; strlabels[5][3] = NULL; strlabels[6][3] = g_strdup(" left if <0, right if >0. and nothing if 0"); frame = gtk_frame_new (title); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(NLIGNESP,NCOLUMNSP,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); for(i=0;i<3;i++) for(j=0;j0) { fseek(fd, geompos, SEEK_SET); get_dipole_from_gamess_output_file(fd); fseek(fd, geompos, SEEK_SET); get_charges_from_gamess_output_file(fd,Ncenters); } fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(Ncenters == 0 ) { g_free(GeomOrb); g_free(znuc); znuc = NULL; } else { DefineType(); /* PrintGeomOrb();*/ } buildBondsOrb(); RebuildGeom = FALSE; return znuc; } /********************************************************************************/ static void DefineGamessCartBasis() { gint i,j,k,n; gint l1,l2,l3; gint L; gint *l[3]={NULL,NULL,NULL}; gint m; NAOrb = 0; for(i=0;i=0;l3--) for(l2=Type[GeomOrb[i].NumType].Ao[j].L-l3;l2>=0;l2--) { l1 = Type[GeomOrb[i].NumType].Ao[j].L-l2-l3; l[0][m] = l1; l[1][m] = l2; l[2][m] = l3; m++; } } for(m=0;m<(L+1)*(L+2)/2;m++) { l1 = l[0][m]; l2 = l[1][m]; l3 = l[2][m]; k++; AOrb[k].numberOfFunctions=Type[GeomOrb[i].NumType].Ao[j].N; AOrb[k].NumCenter = i; AOrb[k].Gtf =g_malloc(AOrb[k].numberOfFunctions*sizeof(GTF)); for(n=0;n=4) ex[nconts]=atof(temp[0]); if(ne>=5) coef1[nconts]=atof(temp[1]); if(ne==6) coef2[nconts]=atof(temp[2]); nconts++; } if(!Ok) { if(Type) for(i=0;i0) {ibegin=1;break;} } } break; case GABEDIT_ORBTYPE_BOYS: case GABEDIT_ORBTYPE_EDMISTON: case GABEDIT_ORBTYPE_PIPEK: { char* e = fgets(t,taille,fd);} } ncart=NOrb/5; if(NOrb%5>0) ncart++; gint no=0; for(n=0;nNOrb-1) break; } if(k1<1) { break; } { char* e = fgets(t,taille,fd);} k2 = sscanf(t,"%lf %lf %lf %lf %lf", &EnerOrb[0], &EnerOrb[1], &EnerOrb[2], &EnerOrb[3], &EnerOrb[4]); for(i=0;i0) { { char* e = fgets(t,taille,fd);} /* Debug("%d %d %d %d %d\n",NumOrb[0],NumOrb[1],NumOrb[2],NumOrb[3],NumOrb[4]);*/ k3 = sscanf(t,"%s %s %s %s %s",SymOrb[0],SymOrb[1],SymOrb[2],SymOrb[3],SymOrb[4]); /* Debug("%s %s %s %s %s\n",SymOrb[0],SymOrb[1],SymOrb[2],SymOrb[3],SymOrb[4]);*/ for(i=0;idef[i] && nG65) nG = 65; return nG; } /**********************************************/ void InitializeAll() { CoefAlphaOrbitals = NULL; EnerAlphaOrbitals = NULL; TypeSelOrb = 1; NumSelOrb = -1; free_objects_all(); } /**********************************************/ gdouble** CreateTable2(gint N) { gdouble** T; gint i; gint j; T = g_malloc(N*sizeof(gdouble*)) ; for(i=0;i0) N +=Type[GeomOrb[i].NumType].N; } return N; } /**********************************************/ gdouble GetSumAbsCharges() { gdouble s = 0; gint i; for(i=0;i0 && !strstr(t,"**********")) ktype = GABEDIT_TYPEFILE_XYZ; if( ktype == GABEDIT_TYPEFILE_UNKNOWN) { while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if(strstr(t,"PROGRAM SYSTEM MOLPRO")) { ktype = GABEDIT_TYPEFILE_MOLPRO; break; } if(strstr(t,"GAMESS VERSION") || strstr(t,"PC GAMESS")) { ktype = GABEDIT_TYPEFILE_GAMESS; break; } if(strstr(t,"Welcome to Q-Chem")) { ktype = GABEDIT_TYPEFILE_QCHEM; break; } if(strstr(t,"Northwest Computational Chemistry Package")) { ktype = GABEDIT_TYPEFILE_NWCHEM; break; } uppercase(t); if(strstr(t, "ENTERING GAUSSIAN" )) { ktype = GABEDIT_TYPEFILE_GAUSSIAN; break; } if(strstr( t, "[MOLDEN FORMAT]" )) { ktype = GABEDIT_TYPEFILE_MOLDEN; break; } } } rewind(fd); if( ktype == GABEDIT_TYPEFILE_UNKNOWN) { while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if(strstr(t,"* O R C A *")) { ktype = GABEDIT_TYPEFILE_ORCA; break; } } } rewind(fd); if( ktype == GABEDIT_TYPEFILE_UNKNOWN) { while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if(strstr(t,"GAMESS")) { { char* e = fgets(t,taille,fd);} if(strstr(t,"FROM IOWA STATE UNIVERSITY")) ktype = GABEDIT_TYPEFILE_GAMESS; break; } } } rewind(fd); if( ktype == GABEDIT_TYPEFILE_UNKNOWN) { { char* e = fgets(t,taille,fd);} if(strstr(t,"START OF MOPAC FILE")) ktype = GABEDIT_TYPEFILE_MOPAC_AUX; } rewind(fd); if( ktype == GABEDIT_TYPEFILE_UNKNOWN) { { char* e = fgets(t,taille,fd);} if(strstr(t,"BEGIN IRC")) ktype = GABEDIT_TYPEFILE_GAMESSIRC; } rewind(fd); if( ktype == GABEDIT_TYPEFILE_UNKNOWN) { while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if(strstr(t,"in the AO basis:")) { { char* e = fgets(t,taille,fd);} if(strstr(t,"------------------")) ktype = GABEDIT_TYPEFILE_NBO; break; } } } fclose(fd); g_free(t); if(ktype==GABEDIT_TYPEFILE_UNKNOWN) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not determine the type of '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); } return ktype; } /**********************************************************/ /* return -1 : undefined 0 : cartezian 1 : Spherical */ gint get_type_basis_in_gamess_file(gchar *fileName) { gchar *t; FILE *fd; guint taille=BSIZE; gint ktype = -1; t=g_malloc(taille); fd = FOpen(fileName, "rb"); if(fd ==NULL) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not open '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); g_free(t); return ktype; } ktype = 0; while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if(strstr( t, "ISPHER=")) { gchar t1[50]; gchar t2[50]; sscanf(t,"%s %s",t1,t2); if(strstr(t2,"-")) ktype = 1; else if(atoi(t2)==0) ktype = -1; break; } } fclose(fd); g_free(t); return ktype; } /**********************************************************/ /* return -1 : undefined 0 : cartezian 1 : Spherical */ gint get_type_basis_in_gaussian_file(gchar *fileName) { gchar *t; FILE *fd; guint taille=BSIZE; gint ktype = -1; t=g_malloc(taille); fd = FOpen(fileName, "rb"); if(fd ==NULL) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not open '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); g_free(t); return ktype; } ktype = 0; while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if(strstr( t, "(5D, 7F)")) { ktype = 1; break; } if(strstr( t, "(6D, 7F)")) { ktype = 0; break; } if(strstr( t, "(6D, 10F)")) { ktype = 0; break; } } fclose(fd); g_free(t); return ktype; } /**********************************************************/ /* return -1 : undefined 0 : cartezian 1 : Spherical */ gint get_type_basis_in_nwchem_file(gchar *fileName) { gchar *t; FILE *fd; guint taille=BSIZE; gint ktype = -1; t=g_malloc(taille); fd = FOpen(fileName, "rb"); if(fd ==NULL) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not open '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); g_free(t); return ktype; } ktype = 0; while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if(strstr( t, "ao basis") && strstr( t, "spherical")) {ktype=1;break;} if(strstr( t, "ao basis") && strstr( t, "cart")) {ktype=0;break;} } fclose(fd); g_free(t); return ktype; } /**********************************************************/ /* return -1 : undefined 0 : cartezian 1 : Spherical */ gint get_type_basis_in_qchem_file(gchar *fileName) { gchar *t; FILE *fd; guint taille=BSIZE; gint ktype = -1; gint ks = 0; gint kc = 0; t=g_malloc(taille); fd = FOpen(fileName, "rb"); if(fd ==NULL) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not open '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); g_free(t); return ktype; } ktype = 0; while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if(strstr( t, " d 1 ")) ks++; if(strstr( t, " f 1 ")) ks++; if(strstr( t, " g 1 ")) ks++; if(strstr( t, " h 1 ")) ks++; if(strstr( t, " i 1 ")) ks++; if(strstr( t, " j 1 ")) ks++; if(strstr( t, " dxx ")) kc++; if(strstr( t, " fxyz ")) kc++; if(strstr( t, " gxxxx ")) kc++; if(strstr( t, " hxxxxx ")) kc++; if(strstr( t, " ixxxxx ")) kc++; if(strstr( t, " jxxxxx ")) kc++; } /* printf("ks = %d kc = %d\n",ks,kc);*/ if(ks>0 && kc ==0) ktype = 1; else if(ks==0 && kc >0) ktype = 0; else if(ks==0 && kc==0) ktype = 0; else ktype= -1; fclose(fd); g_free(t); return ktype; } /**********************************************************/ /* return -1 : undefined 0 : cartezian 1 : Spherical */ gint get_type_basis_in_gabedit_file(gchar *fileName) { gchar *t; FILE *fd; guint taille=BSIZE; gint ktype = -1; t=g_malloc(taille); fd = FOpen(fileName, "rb"); if(fd ==NULL) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not open '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); g_free(t); return ktype; } ktype = -1; { char* e = fgets(t,taille,fd);} uppercase(t); if(strstr( t, "[GABEDIT FORMAT]")) { if(strstr( t, "SPHE")) ktype = 1; else ktype = 0; } fclose(fd); g_free(t); return ktype; } /**********************************************************/ /* return -1 : undefined 0 : cartezian 1 : Spherical */ gint get_type_basis_in_molden_file(gchar *fileName) { gchar *t; FILE *fd; guint taille=BSIZE; gint ktype = -1; t=g_malloc(taille); fd = FOpen(fileName, "rb"); if(fd ==NULL) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not open '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); g_free(t); return ktype; } ktype = -1; { char* e = fgets(t,taille,fd);} uppercase(t); //if(strstr( t, "[MOLDEN FORMAT]")) { ktype = 0; while(!feof(fd)) { { char* e = fgets(t,taille,fd);} uppercase(t); if(strstr( t, "[5D")) { ktype = 1; break; } } } fclose(fd); g_free(t); return ktype; } /**********************************************************/ void PrintAllOrb(gdouble** M) { gint i,j; gint Nblock; gint Nrest; gint Nb; gint Nbmax=5; gint Nbj,Nej; gint l; char *XYZ[]={"x","y","z"}; Nblock = NAOrb/Nbmax; Nrest = NAOrb%Nbmax; if(Nrest !=0) Nblock++; for(Nb=0;Nb1e-6) { k = i; break; } } if(C1[k]!=0) { for(i=0;i<3;i++) if(k!=i) p += C1[i]*C2[i]; C2[k] = -p/C1[k]; } for(i=0;i<3;i++) C3[i] = C1[(i+1)%3]*C2[(i+2)%3] - C2[(i+1)%3]*C1[(i+2)%3]; for(i=0;i<3;i++) { temp = g_strdup_printf("%lf",C2[i]); gtk_entry_set_text(GTK_ENTRY(entries[1][i]),temp); g_free(temp); temp = g_strdup_printf("%lf",C3[i]); gtk_entry_set_text(GTK_ENTRY(entries[2][i]),temp); g_free(temp); } return ; } /* reset z for second direction, reset third direction */ if(ii==1 && jj <= 1) { gdouble C1[3]; gdouble C2[3]; gdouble C3[3]; gdouble p = 0; for(i=0;i<3;i++) C1[i] = atof(gtk_entry_get_text(GTK_ENTRY(entries[0][i]))); for(i=0;i<3;i++) C2[i] = atof(gtk_entry_get_text(GTK_ENTRY(entries[1][i]))); k = 2; if(C1[k]!=0) { for(i=0;i<3;i++) if(k!=i) p += C1[i]*C2[i]; C2[k] = -p/C1[k]; } for(i=0;i<3;i++) C3[i] = C1[(i+1)%3]*C2[(i+2)%3] - C2[(i+1)%3]*C1[(i+2)%3]; temp = g_strdup_printf("%lf",C2[k]); gtk_entry_set_text(GTK_ENTRY(entries[1][k]),temp); g_free(temp); for(i=0;i<3;i++) { temp = g_strdup_printf("%lf",C3[i]); gtk_entry_set_text(GTK_ENTRY(entries[2][i]),temp); g_free(temp); } return; } if(jj==3) { gdouble min = 0; gdouble max = 0; min = atof(gtk_entry_get_text(GTK_ENTRY(entries[ii][jj]))); max = -min; nG = (gint)fabs(max-min)*6; nG = getOptimalN(nG); sprintf(tnG,"%d",nG); temp = g_strdup_printf("%lf",max); gtk_entry_set_text(GTK_ENTRY(entries[ii][jj+1]),temp); g_free(temp); gtk_entry_set_text(GTK_ENTRY(entries[ii][jj+2]),tnG); if(ii<2) { temp = g_strdup_printf("%lf",min); gtk_entry_set_text(GTK_ENTRY(entries[ii+1][jj]),temp); g_free(temp); } return; } if(jj==4&& ii<2) { gdouble max = 0; max = atof(gtk_entry_get_text(GTK_ENTRY(entries[ii][jj]))); temp = g_strdup_printf("%lf",max); gtk_entry_set_text(GTK_ENTRY(entries[ii+1][jj]),temp); g_free(temp); return; } if(jj==5 && ii<2) { gint nPoints = 10; nPoints = atoi(gtk_entry_get_text(GTK_ENTRY(entries[ii][jj]))); temp = g_strdup_printf("%d", nPoints); gtk_entry_set_text(GTK_ENTRY(entries[ii+1][jj]),temp); g_free(temp); return; } } /********************************************************************************/ GtkWidget *create_grid_frame( GtkWidget *vboxall,gchar* title) { GtkWidget *frame; GtkWidget *vboxframe; gushort i; gushort j; GtkWidget *Table; gchar* temp = NULL; static GtkWidget* entries[3][6]; gint nG = (gint)fabs(limits.MinMax[1][1]-limits.MinMax[0][1])*6; gchar tnG[100]="49"; nG = getOptimalN(nG); sprintf(tnG,"%d",nG); frame = gtk_frame_new (title); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(4,7,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); /* first line , titles */ i = 0; j = 0; j++; add_label_at_table(Table, _("Vx"),(gushort)i,(gushort)j,GTK_JUSTIFY_CENTER); j++; add_label_at_table(Table, _("Vy"),(gushort)i, (gushort)j,GTK_JUSTIFY_CENTER); j++; add_label_at_table(Table, _("Vz"),(gushort)i, (gushort)j,GTK_JUSTIFY_CENTER); j++; add_label_at_table(Table, _("Minimum"),(gushort)i, (gushort)j,GTK_JUSTIFY_CENTER); j++; add_label_at_table(Table, _("Maximum"),(gushort)i, (gushort)j,GTK_JUSTIFY_CENTER); j++; add_label_at_table(Table, _("Number of points"),(gushort)i, (gushort)j,GTK_JUSTIFY_CENTER); /* First direction */ j = 0; i++; add_label_at_table(Table, _("First direction "),(gushort)i,(gushort)j,GTK_JUSTIFY_LEFT); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),50,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),"1.0"); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),50,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),"0.0"); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),50,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),"0.0"); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),100,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); temp = g_strdup_printf("%lf",limits.MinMax[0][0]); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),temp); if(temp) g_free(temp); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),100,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); temp = g_strdup_printf("%lf",limits.MinMax[1][0]); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),temp); if(temp) g_free(temp); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),100,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),tnG); /* Second direction */ j = 0; i++; add_label_at_table(Table, _("Second direction "),(gushort)i,(gushort)j,GTK_JUSTIFY_LEFT); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),50,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),"0.0"); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),50,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),"1.0"); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),50,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),"0.0"); gtk_widget_set_sensitive(entries[i-1][j-1], FALSE); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),100,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); temp = g_strdup_printf("%lf",limits.MinMax[0][1]); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),temp); if(temp) g_free(temp); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),100,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); temp = g_strdup_printf("%lf",limits.MinMax[1][1]); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),temp); if(temp) g_free(temp); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),100,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),tnG); /* Third direction */ j = 0; i++; add_label_at_table(Table, _("Third direction "),(gushort)i,(gushort)j,GTK_JUSTIFY_LEFT); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),50,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),"0.0"); gtk_widget_set_sensitive(entries[i-1][j-1], FALSE); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),50,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),"0.0"); gtk_widget_set_sensitive(entries[i-1][j-1], FALSE); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),50,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),"1.0"); gtk_widget_set_sensitive(entries[i-1][j-1], FALSE); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),100,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); temp = g_strdup_printf("%lf",limits.MinMax[0][2]); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),temp); if(temp) g_free(temp); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),100,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); temp = g_strdup_printf("%lf",limits.MinMax[1][2]); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),temp); if(temp) g_free(temp); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),100,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),tnG); for(i=0;i<3;i++) for(j=0;j<6;j++) { g_object_set_data (G_OBJECT (entries[i][j]), "Entries", &entries); } for(i=0;i<3;i++) for(j=0;j<6;j++) g_signal_connect(G_OBJECT(entries[i][j]), "changed",G_CALLBACK(change_entry_value),entries[i][j]); gtk_widget_show_all(frame); g_object_set_data (G_OBJECT (frame), "Entries",&entries); return frame; } /********************************************************************************/ void create_grid(gchar* title) { GtkWidget *Win; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *button; GtkWidget** entries; if(!GeomOrb) { Message(_("Sorry, Please load a file before\n"),_("Error"),TRUE); return; } if(!CoefAlphaOrbitals && TypeGrid != GABEDIT_TYPEGRID_MEP_CHARGES) { Message(_("Sorry, Please load the MO before\n"),_("Error"),TRUE); return; } if(TypeGrid == GABEDIT_TYPEGRID_MEP_CHARGES) { gdouble s= GetSumAbsCharges(); if(s<1e-6) Message(_("Sorry, All partial charges are null\n"),_("Error"),TRUE); return; } if(!AOAvailable &&(TypeGrid == GABEDIT_TYPEGRID_DDENSITY || TypeGrid == GABEDIT_TYPEGRID_ADENSITY)) { Message(_("Sorry, No atomic orbitals available.\nPlease use a gabedit file for load : \n" "Geometry, Molecular and Atomic Orbitals\n"),_("Error"),TRUE); return; } Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),title); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Grid "); vboxall = create_vbox(Win); vboxwin = vboxall; frame = create_grid_frame(vboxall,_("Box & Grid")); entries = (GtkWidget**) g_object_get_data (G_OBJECT (frame), "Entries"); g_object_set_data (G_OBJECT (Win), "Entries",entries); hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, G_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,G_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)applygrid,G_OBJECT(Win)); gtk_widget_show_all (Win); } /********************************************************************************/ void applyelfdens(GtkWidget *Win,gpointer data) { GtkWidget** entriestmp = NULL; G_CONST_RETURN gchar* temp; gchar* dump; gint i; gint j; GridLimits limitstmp; gint NumPointstmp[3]; GtkWidget *entries[3][6]; gdouble V[3][3]; Grid* gridDens = NULL; gboolean ongrid = TRUE; if(GTK_IS_WIDGET(Win)) { entriestmp = (GtkWidget **)g_object_get_data(G_OBJECT (Win), "Entries"); ongrid = GPOINTER_TO_INT(g_object_get_data(G_OBJECT (Win), "OnGrid")); } else return; if(entriestmp==NULL) return; for(i=0;i<3;i++) for(j=0;j<6;j++) entries[i][j] = entriestmp[i*6+j]; for(i=0;i<3;i++) { for(j=3;j<5;j++) { temp = gtk_entry_get_text(GTK_ENTRY(entries[i][j])); dump = NULL; if(temp && strlen(temp)>0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { limitstmp.MinMax[j-3][i] = atof(dump); } else { GtkWidget* message = Message(_("Error : one entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } temp = gtk_entry_get_text(GTK_ENTRY(entries[i][5])); NumPointstmp[i] = atoi(temp); if(NumPointstmp[i] <=2) { GtkWidget* message = Message(_("Error : The number of points should be > 2. "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } } for(i=0;i<3;i++) { if( limitstmp.MinMax[0][i]> limitstmp.MinMax[1][i]) { GtkWidget* message = Message(_("Error : The minimal value should be smaller than the maximal value "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } } for(i=0;i<3;i++) { for(j=0;j<3;j++) { V[i][j] = 0; temp = gtk_entry_get_text(GTK_ENTRY(entries[i][j])); dump = NULL; if(temp && strlen(temp)>0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { V[i][j] = atof(dump); } else { GtkWidget* message = Message(_("Error : one entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } } for(i=0;i<3;i++) { gdouble norm = 0.0; for(j=0;j<3;j++) norm += V[i][j]*V[i][j]; if(fabs(norm)<1e-8) { GtkWidget* message = Message(_("Error : the norm is equal to 0 "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } for(j=0;j<3;j++) V[i][j] /= sqrt(norm); } for(j=0;j<3;j++) originOfCube[j] = 0; for(j=0;j<3;j++) firstDirection[j] = V[0][j]; for(j=0;j<3;j++) secondDirection[j] = V[1][j]; for(j=0;j<3;j++) thirdDirection[j] = V[2][j]; for(i=0;i<3;i++) { NumPoints[i] =NumPointstmp[i] ; for(j=0;j<2;j++) limits.MinMax[j][i] =limitstmp.MinMax[j][i]; } delete_child(Win); free_grid_all(); grid = define_grid_ELFSAVIN(NumPoints,limits); if(grid) { add_surface(); free_iso_all(); limits.MinMax[0][3] = grid->limits.MinMax[0][3]; limits.MinMax[1][3] = grid->limits.MinMax[1][3]; } gridDens = define_grid_electronic_density(NumPoints,limits); computeELFAttractors(grid, gridDens, ongrid); Define_Iso(0.9); glarea_rafresh(GLArea); } /********************************************************************************/ void create_grid_ELF_Dens_analyze(gboolean ongrid) { GtkWidget *Win; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *button; GtkWidget** entries; if(!GeomOrb) { Message(_("Sorry, Please load a file before\n"),_("Error"),TRUE); return; } if(!CoefAlphaOrbitals && TypeGrid != GABEDIT_TYPEGRID_MEP_CHARGES) { Message(_("Sorry, Please load the MO before\n"),_("Error"),TRUE); return; } if(TypeGrid == GABEDIT_TYPEGRID_MEP_CHARGES) { gdouble s= GetSumAbsCharges(); if(s<1e-6) Message(_("Sorry, All partial charges are null\n"),_("Error"),TRUE); return; } if(!AOAvailable &&(TypeGrid == GABEDIT_TYPEGRID_DDENSITY || TypeGrid == GABEDIT_TYPEGRID_ADENSITY)) { Message(_("Sorry, No atomic orbitals available.\nPlease use a gabedit file for load : \n" "Geometry, Molecular and Atomic Orbitals\n"),_("Error"),TRUE); return; } Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),_("ELF Attractors")); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Grid "); vboxall = create_vbox(Win); vboxwin = vboxall; frame = create_grid_frame(vboxall,_("Box & Grid")); entries = (GtkWidget**) g_object_get_data (G_OBJECT (frame), "Entries"); g_object_set_data (G_OBJECT (Win), "Entries",entries); g_object_set_data (G_OBJECT (Win), "OnGrid",GINT_TO_POINTER(ongrid)); hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, G_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,G_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)applyelfdens,G_OBJECT(Win)); gtk_widget_show_all (Win); } /********************************************************************************/ void read_any_file(gchar* FileName) { gint filetype = get_type_file_orb(FileName); switch(filetype) { case GABEDIT_TYPEFILE_GAMESS : read_gamess_orbitals(FileName);break; case GABEDIT_TYPEFILE_GAUSSIAN : read_gauss_orbitals(FileName);break; case GABEDIT_TYPEFILE_MOLPRO : read_molpro_orbitals(FileName);break; case GABEDIT_TYPEFILE_QCHEM : read_qchem_orbitals(FileName);break; case GABEDIT_TYPEFILE_MOLDEN : read_molden_orbitals(FileName);break; case GABEDIT_TYPEFILE_GABEDIT : read_gabedit_orbitals(FileName);break; case GABEDIT_TYPEFILE_XYZ : gl_read_xyz_file(FileName);break; case GABEDIT_TYPEFILE_GAUSSIANINPUT : case GABEDIT_TYPEFILE_MOLCASINPUT : case GABEDIT_TYPEFILE_MOLPROINPUT : case GABEDIT_TYPEFILE_UNKNOWN : break; } } /********************************************************************************/ gint get_number_of_point(GtkWidget* Entry) { gchar* t = NULL; gint N = -1; G_CONST_RETURN gchar* temp = gtk_entry_get_text(GTK_ENTRY(Entry)); if(temp) { t = g_strdup(temp); delete_first_spaces(t); delete_last_spaces(t); } if(t && !this_is_a_integer(t)) { GtkWidget* win = Message(_("Error : The number of points should be integer. "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (win), TRUE); g_free(t); return -1; } if(t) g_free(t); N = atoi(temp); if(N<=0) { GtkWidget* win = Message(_("Error : The number of points should be positive. "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (win), TRUE); return -1; } return N; } /********************************************************************************/ gboolean get_a_float(GtkWidget* Entry,gdouble* value, gchar* errorMessage) { G_CONST_RETURN gchar* temp; gchar* t = NULL; temp = gtk_entry_get_text(GTK_ENTRY(Entry)); if(temp&& strlen(temp)>0) { t = g_strdup(temp); delete_first_spaces(t); delete_last_spaces(t); } else { GtkWidget* win = Message(errorMessage,_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (win), TRUE); return FALSE; } if(t && !this_is_a_real(t)) { GtkWidget* win = Message(errorMessage,_("Error"),TRUE); g_free(t); gtk_window_set_modal (GTK_WINDOW (win), TRUE); return FALSE; } if(t) g_free(t); *value = atof(temp); return TRUE; } /********************************************************************************/ void initialise_global_orbitals_variables() { gint i; PopupMenuIsOpen = FALSE; BondsOrb = NULL; GeomOrb = NULL; GLArea = NULL; Ncenters =0; ShowDipoleOrb = TRUE; ShowHBondOrb = FALSE; ShowHAtomOrb = TRUE; ShowMultiBondsOrb = TRUE; ShowVibration = FALSE; TypeGrid = GABEDIT_TYPEGRID_ORBITAL; TypeGeom = GABEDIT_TYPEGEOM_STICK; TypeBlend = GABEDIT_BLEND_NO; TypePosWireFrame = GABEDIT_POS_WIREFRAME_NO; TypeNegWireFrame = GABEDIT_NEG_WIREFRAME_NO; SurfShow = GABEDIT_SURFSHOW_POSNEG; TypeTexture = GABEDIT_TYPETEXTURE_NONE; Title = NULL; ScreenWidth = gdk_screen_width(); ScreenHeight = gdk_screen_height(); for(i=0;i<3;i++) limits.MinMax[0][i] = -5; for(i=0;i<3;i++) limits.MinMax[1][i] = 5; NumPoints[0] = 49; NumPoints[1] = 49; NumPoints[2] = 49; CoefAlphaOrbitals = NULL; EnerAlphaOrbitals = NULL; OccAlphaOrbitals = NULL; SymAlphaOrbitals = NULL; CoefBetaOrbitals = NULL; EnerBetaOrbitals = NULL; OccBetaOrbitals = NULL; SymBetaOrbitals = NULL; isopositive = NULL; isonegative = NULL; isonull = NULL; grid = NULL; gridPlaneForContours = NULL; gridPlaneForPlanesMapped = NULL; reDrawContoursPlane = FALSE; reDrawPlaneMappedPlane = FALSE; AOAvailable = FALSE; RebuildSurf = TRUE; RebuildGeom = TRUE; newContours = TRUE; newSurface = FALSE; DeleteContours = FALSE; CancelCalcul = FALSE; init_vibration(); createBMPFiles = FALSE; numBMPFile = 0; createPPMFiles = FALSE; numPPMFile = 0; createPOVFiles = FALSE; numPOVFile = 0; AOrb = NULL; SAOrb = NULL; SOverlaps = NULL; solventRadius = 1.4; alphaFED = 3.0; /* eV^-1 */ } /********************************************************************************/ void close_window_orb(GtkWidget*win, gpointer data) { if(!GTK_IS_WIDGET(PrincipalWindow)) return; CancelCalcul = TRUE; while( gtk_events_pending() ) gtk_main_iteration(); free_data_all(); free_objects_all(); destroy_children(PrincipalWindow); GLArea = NULL; PrincipalWindow = NULL; } /********************************************************************************/ void add_glarea_child(GtkWidget* winchild,gchar* title) { if(GLArea) { add_child(PrincipalWindow,winchild,gtk_widget_destroy,title); g_signal_connect(G_OBJECT(winchild),"delete_event",(GCallback)delete_child,NULL); } else { add_button_windows(title,winchild); g_signal_connect(G_OBJECT(winchild), "delete_event",(GCallback)destroy_button_windows,NULL); g_signal_connect(G_OBJECT(winchild), "delete_event",G_CALLBACK(gtk_widget_destroy),NULL); } } /*************************************************************************************/ void create_color_surfaces_file() { gchar *colorsurface; FILE *fd; gdouble v[4]; gint i; gint j; gint n=3; colorsurface = g_strdup_printf("%s/colorssurface",gabedit_directory()); fd = FOpen(colorsurface, "w"); if(fd) { fprintf(fd,"%d\n",n); for(i=0;i0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { limitstmp.MinMax[j-3][i] = atof(dump); } else { GtkWidget* message = Message(_("Error : one entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } temp = gtk_entry_get_text(GTK_ENTRY(entries[i][5])); NumPointstmp[i] = atoi(temp); if(NumPointstmp[i] <=2) { GtkWidget* message = Message(_("Error : The number of points should be > 2. "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } } { temp = gtk_entry_get_text(GTK_ENTRY(entries[3][0])); dump = NULL; if(temp && strlen(temp)>0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { solventRadius = atof(dump); } else { GtkWidget* message = Message(_("Error : The solvent radius should be a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } for(i=0;i<3;i++) { if( limitstmp.MinMax[0][i]> limitstmp.MinMax[1][i]) { GtkWidget* message = Message(_("Error : The minimal value should be smaller than the maximal value "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } } for(i=0;i<3;i++) { for(j=0;j<3;j++) { V[i][j] = 0; temp = gtk_entry_get_text(GTK_ENTRY(entries[i][j])); dump = NULL; if(temp && strlen(temp)>0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { V[i][j] = atof(dump); } else { GtkWidget* message = Message(_("Error : one entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } } for(i=0;i<3;i++) { gdouble norm = 0.0; for(j=0;j<3;j++) norm += V[i][j]*V[i][j]; if(fabs(norm)<1e-8) { GtkWidget* message = Message(_("Error : the norm is equal to 0 "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } for(j=0;j<3;j++) V[i][j] /= sqrt(norm); } for(j=0;j<3;j++) originOfCube[j] = 0; for(j=0;j<3;j++) firstDirection[j] = V[0][j]; for(j=0;j<3;j++) secondDirection[j] = V[1][j]; for(j=0;j<3;j++) thirdDirection[j] = V[2][j]; for(i=0;i<3;i++) { NumPoints[i] =NumPointstmp[i] ; for(j=0;j<2;j++) limits.MinMax[j][i] =limitstmp.MinMax[j][i]; } delete_child(Win); if(TypeGrid == GABEDIT_TYPEGRID_SAS) { TypeGrid = GABEDIT_TYPEGRID_SAS; Define_Grid(); Define_Iso(0.0); } if(TypeGrid == GABEDIT_TYPEGRID_SASMAP) { TypeGrid = GABEDIT_TYPEGRID_SAS; Define_Grid(); Define_Iso(0.0); CancelCalcul = FALSE; mapping_with_mep_from_charges(); } glarea_rafresh(GLArea); } /*************************************************************************************/ static GtkWidget *create_grid_sas_frame( GtkWidget *vboxall,gchar* title) { GtkWidget *frame; GtkWidget *vboxframe; gushort i; gushort j; GtkWidget *Table; gchar* temp = NULL; static GtkWidget* entries[4][6]; gint nG = (gint)fabs(limits.MinMax[1][1]-limits.MinMax[0][1])*6; gchar tnG[100]="49"; gchar sr[100]="1.4"; nG = getOptimalN(nG); sprintf(tnG,"%d",nG); sprintf(sr,"%lf",solventRadius); frame = gtk_frame_new (title); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(4,7,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); /* first line , titles */ i = 0; j = 0; j++; add_label_at_table(Table, _("Vx"),(gushort)i,(gushort)j,GTK_JUSTIFY_CENTER); j++; add_label_at_table(Table, _("Vy"),(gushort)i, (gushort)j,GTK_JUSTIFY_CENTER); j++; add_label_at_table(Table, _("Vz"),(gushort)i, (gushort)j,GTK_JUSTIFY_CENTER); j++; add_label_at_table(Table, _("Minimum"),(gushort)i, (gushort)j,GTK_JUSTIFY_CENTER); j++; add_label_at_table(Table, _("Maximum"),(gushort)i, (gushort)j,GTK_JUSTIFY_CENTER); j++; add_label_at_table(Table, _("Number of points"),(gushort)i, (gushort)j,GTK_JUSTIFY_CENTER); /* First direction */ j = 0; i++; add_label_at_table(Table, _("First direction "),(gushort)i,(gushort)j,GTK_JUSTIFY_LEFT); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),50,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),"1.0"); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),50,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),"0.0"); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),50,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),"0.0"); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),100,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); temp = g_strdup_printf("%lf",limits.MinMax[0][0]); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),temp); if(temp) g_free(temp); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),100,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); temp = g_strdup_printf("%lf",limits.MinMax[1][0]); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),temp); if(temp) g_free(temp); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),100,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),tnG); /* Second direction */ j = 0; i++; add_label_at_table(Table, _("Second direction "),(gushort)i,(gushort)j,GTK_JUSTIFY_LEFT); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),50,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),"0.0"); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),50,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),"1.0"); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),50,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),"0.0"); gtk_widget_set_sensitive(entries[i-1][j-1], FALSE); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),100,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); temp = g_strdup_printf("%lf",limits.MinMax[0][1]); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),temp); if(temp) g_free(temp); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),100,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); temp = g_strdup_printf("%lf",limits.MinMax[1][1]); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),temp); if(temp) g_free(temp); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),100,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),tnG); /* Third direction */ j = 0; i++; add_label_at_table(Table, _("Third direction "),(gushort)i,(gushort)j,GTK_JUSTIFY_LEFT); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),50,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),"0.0"); gtk_widget_set_sensitive(entries[i-1][j-1], FALSE); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),50,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),"0.0"); gtk_widget_set_sensitive(entries[i-1][j-1], FALSE); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),50,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),"1.0"); gtk_widget_set_sensitive(entries[i-1][j-1], FALSE); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),100,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); temp = g_strdup_printf("%lf",limits.MinMax[0][2]); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),temp); if(temp) g_free(temp); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),100,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); temp = g_strdup_printf("%lf",limits.MinMax[1][2]); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),temp); if(temp) g_free(temp); j++; entries[i-1][j-1] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][j-1]),100,-1); add_widget_table(Table,entries[i-1][j-1],(gushort)i,(gushort)j); gtk_entry_set_text(GTK_ENTRY(entries[i-1][j-1]),tnG); /* Slovent radius */ j = 0; i++; { GtkWidget *Label; GtkWidget *hbox = gtk_hbox_new(0,FALSE); Label = gtk_label_new ("Solvent radius (Angstrum) "); gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT); gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 0); gtk_table_attach(GTK_TABLE(Table),hbox,j,j+2,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 3,3); } j+=2; entries[i-1][0] = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entries[i-1][0]),50,-1); gtk_table_attach(GTK_TABLE(Table),GTK_WIDGET(entries[i-1][0]),j,j+3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 3,3); gtk_entry_set_text(GTK_ENTRY(entries[i-1][0]),sr); for(i=0;i<3;i++) for(j=0;j<6;j++) { g_object_set_data (G_OBJECT (entries[i][j]), "Entries", &entries); } g_object_set_data (G_OBJECT (entries[3][0]), "Entries", &entries); for(i=0;i<3;i++) for(j=0;j<6;j++) g_signal_connect(G_OBJECT(entries[i][j]), "changed",G_CALLBACK(change_entry_value),entries[i][j]); gtk_widget_show_all(frame); g_object_set_data (G_OBJECT (frame), "Entries",&entries); return frame; } /********************************************************************************/ void create_grid_sas(gchar* title) { GtkWidget *Win; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *button; GtkWidget** entries; if(!GeomOrb) { Message(_("Sorry, Please load a file before\n"),_("Error"),TRUE); return; } Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),title); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Grid "); vboxall = create_vbox(Win); vboxwin = vboxall; frame = create_grid_sas_frame(vboxall,_("Box & Grid & Solvent radius")); entries = (GtkWidget**) g_object_get_data (G_OBJECT (frame), "Entries"); g_object_set_data (G_OBJECT (Win), "Entries",entries); hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, G_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,G_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)applygridsas,G_OBJECT(Win)); gtk_widget_show_all (Win); } /********************************************************************************/ static void apply_set_scale_ball_stick(GtkWidget *Win,gpointer data) { GtkWidget* entryBall = NULL; GtkWidget* entryStick = NULL; gdouble sBall = 1; gdouble sStick = 1; if(!GTK_IS_WIDGET(Win)) return; entryBall = g_object_get_data (G_OBJECT (Win), "EntryBall"); entryStick = g_object_get_data (G_OBJECT (Win), "EntryStick"); if(entryBall) sBall = atof(gtk_entry_get_text(GTK_ENTRY(entryBall))); if(entryStick) sStick = atof(gtk_entry_get_text(GTK_ENTRY(entryStick))); RebuildGeom = TRUE; setScaleBall(sBall); setScaleStick(sStick); glarea_rafresh(GLArea); } /********************************************************************************/ static void apply_set_scale_ball_stick_close(GtkWidget *Win,gpointer data) { apply_set_scale_ball_stick(Win,data); delete_child(Win); } /********************************************************************************/ static GtkWidget *add_entry_scale(GtkWidget *table, gchar* strLabel, gint il, gdouble val) { gushort i; gushort j; GtkWidget *entry; GtkWidget *label; /*----------------------------------------------------------------------------------*/ i = il; j = 0; label = gtk_label_new(strLabel); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = il; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = il; j = 2; entry = gtk_entry_new(); { gchar* v = g_strdup_printf("%lf",val); if(v)gtk_entry_set_text(GTK_ENTRY(entry),v); else gtk_entry_set_text(GTK_ENTRY(entry),"1.0"); if(v) g_free(v); } gtk_table_attach(GTK_TABLE(table),entry, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); return entry; } /********************************************************************************/ void set_scale_ball_stick_dlg() { GtkWidget *Win; GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *hbox; GtkWidget *table; GtkWidget *vboxall; GtkWidget *button; GtkWidget *entryBall; GtkWidget *entryStick; Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),_("Scale Ball&Stick")); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"ScaleBallStick"); vboxall = create_vbox(Win); frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(2,3,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),table); entryBall = add_entry_scale(table, _("Scale Ball"), 0,getScaleBall()); g_object_set_data (G_OBJECT (Win), "EntryBall",entryBall); entryStick = add_entry_scale(table, _("Scale Stick"), 1,getScaleStick()); g_object_set_data (G_OBJECT (Win), "EntryStick",entryStick); hbox = create_hbox_false(vboxall); gtk_widget_realize(Win); button = create_button(Win,_("OK")); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_set_scale_ball_stick_close,G_OBJECT(Win)); button = create_button(Win,_("Apply")); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_set_scale_ball_stick,G_OBJECT(Win)); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, G_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,G_OBJECT(Win)); gtk_widget_show (button); gtk_widget_show_all (Win); } /*********************************************************************************************************/ static void resetGridColorMap() { GtkWidget* handleBoxColorMapGrid = g_object_get_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapGrid"); if(handleBoxColorMapGrid) { GtkWidget* entryLeft = g_object_get_data(G_OBJECT(handleBoxColorMapGrid), "EntryLeft"); GtkWidget* entryRight = g_object_get_data(G_OBJECT(handleBoxColorMapGrid), "EntryRight"); GtkWidget* darea = g_object_get_data(G_OBJECT(handleBoxColorMapGrid), "DrawingArea"); ColorMap* colorMap = g_object_get_data(G_OBJECT( handleBoxColorMapGrid),"ColorMap"); if(colorMap && entryLeft && entryRight && darea && colorMap->numberOfColors>0) { gdouble minValue = colorMap->colorValue[0].value; gdouble maxValue = colorMap->colorValue[colorMap->numberOfColors-1].value; ColorMap* newColorMap = new_colorMap_min_max(minValue, maxValue); colormap_free(colorMap); g_free(colorMap); colorMap = newColorMap; g_object_set_data(G_OBJECT(handleBoxColorMapGrid),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryLeft),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryRight),"ColorMap", colorMap); g_object_set_data(G_OBJECT(darea),"ColorMap", colorMap); color_map_refresh(handleBoxColorMapGrid); if(GTK_WIDGET_VISIBLE(handleBoxColorMapGrid)) { gtk_widget_hide(handleBoxColorMapGrid); gtk_widget_show(handleBoxColorMapGrid); } } } } /*********************************************************************************************************/ static void resetPlanesMappedColorMap() { GtkWidget* handleBoxColorMapPlanesMapped = g_object_get_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapPlanesMapped"); if(handleBoxColorMapPlanesMapped) { GtkWidget* entryLeft = g_object_get_data(G_OBJECT(handleBoxColorMapPlanesMapped), "EntryLeft"); GtkWidget* entryRight = g_object_get_data(G_OBJECT(handleBoxColorMapPlanesMapped), "EntryRight"); GtkWidget* darea = g_object_get_data(G_OBJECT(handleBoxColorMapPlanesMapped), "DrawingArea"); ColorMap* colorMap = g_object_get_data(G_OBJECT( handleBoxColorMapPlanesMapped),"ColorMap"); if(colorMap && entryLeft && entryRight && darea && colorMap->numberOfColors>0) { gdouble minValue = colorMap->colorValue[0].value; gdouble maxValue = colorMap->colorValue[colorMap->numberOfColors-1].value; ColorMap* newColorMap = new_colorMap_min_max(minValue, maxValue); colormap_free(colorMap); g_free(colorMap); colorMap = newColorMap; g_object_set_data(G_OBJECT(handleBoxColorMapPlanesMapped),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryLeft),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryRight),"ColorMap", colorMap); g_object_set_data(G_OBJECT(darea),"ColorMap", colorMap); color_map_refresh(handleBoxColorMapPlanesMapped); if(GTK_WIDGET_VISIBLE(handleBoxColorMapPlanesMapped)) { gtk_widget_hide(handleBoxColorMapPlanesMapped); gtk_widget_show(handleBoxColorMapPlanesMapped); } } } } /*********************************************************************************************************/ static void resetContoursColorMap() { GtkWidget* handleBoxColorMapContours = g_object_get_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapContours"); if(handleBoxColorMapContours) { GtkWidget* entryLeft = g_object_get_data(G_OBJECT(handleBoxColorMapContours), "EntryLeft"); GtkWidget* entryRight = g_object_get_data(G_OBJECT(handleBoxColorMapContours), "EntryRight"); GtkWidget* darea = g_object_get_data(G_OBJECT(handleBoxColorMapContours), "DrawingArea"); ColorMap* colorMap = g_object_get_data(G_OBJECT( handleBoxColorMapContours),"ColorMap"); if(colorMap && entryLeft && entryRight && darea && colorMap->numberOfColors>0) { gdouble minValue = colorMap->colorValue[0].value; gdouble maxValue = colorMap->colorValue[colorMap->numberOfColors-1].value; ColorMap* newColorMap = new_colorMap_min_max(minValue, maxValue); colormap_free(colorMap); g_free(colorMap); colorMap = newColorMap; g_object_set_data(G_OBJECT(handleBoxColorMapContours),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryLeft),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryRight),"ColorMap", colorMap); g_object_set_data(G_OBJECT(darea),"ColorMap", colorMap); color_map_refresh(handleBoxColorMapContours); if(GTK_WIDGET_VISIBLE(handleBoxColorMapContours)) { gtk_widget_hide(handleBoxColorMapContours); gtk_widget_show(handleBoxColorMapContours); } } } } /*********************************************************************************************************/ void resetAllColorMapOrb() { resetGridColorMap(); resetContoursColorMap(); resetPlanesMappedColorMap(); resetBeginNegative(); glarea_rafresh(GLArea); } /*********************************************************************************************************************/ static void set_alphaFED(GtkWidget *button,gpointer data) { GtkWidget* entry = (GtkWidget*)data; G_CONST_RETURN gchar* temp; gchar* dump = NULL; GtkWidget* Win = g_object_get_data (G_OBJECT (button), "Win"); if(!GTK_IS_WIDGET(data)) return; temp = gtk_entry_get_text(GTK_ENTRY(entry)); if(temp && strlen(temp)>0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump) && atof(dump)>=0 && atof(dump)<=100) { alphaFED = atof(dump); if(dump) g_free(dump); gtk_widget_destroy(Win); } else { GtkWidget* message = Message(_("Error : alpha should be a real between 0 and 100 "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); if(dump) g_free(dump); gtk_window_set_transient_for(GTK_WINDOW(message),GTK_WINDOW(Win)); return; } } /*********************************************************************/ GtkWidget* set_alphaFED_dialog () { GtkWidget *fp; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox; GtkWidget *button; GtkWidget *label; GtkWidget* entry; GtkWidget *hseparator; gchar* tlabel="Alpha(eV^-1) : "; gchar* val = NULL; gchar* info = "f (x,y,z) = (2 - n)/2{\n" " [sum_j(1 to N) O_j Phi_j (x,y,z)^2 e^(-alpha(e_HOMO -e_j ))]/\n" " [sum_j(1 to N) O_j e^(-alpha(e_HOMO -e_j ))]\n" "}\n" "+ n/2 {\n" " [sum_j(1 to N) (2-O_j) Phi_j (x,y,z)^2 e^(+alpha(e_LUMO -e_j ))]/\n" " [sum_j(1 to N) (2-O_j) e^(+alpha(e_LUMO -e_j ))]\n" "}\n\n" "n = 0 for an electrophilic reaction,\n" " 1 for a radical reaction, and\n" " 2 for a nucleophilic reaction.\n" "N is the number of orbitals.\n" "O_j is the number of electrons in orbital j.\n" "Phi_j(x,y,z) is the value of the orbital j at point (x,y,z).\n" "e_j is the energy of orbital j.\n"; fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(fp),TRUE); gtk_window_set_title(GTK_WINDOW(fp),_("Set alpha for FED calculation")); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)gtk_widget_destroy,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox = create_hbox(vboxframe); label = gtk_label_new (info); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, FALSE, 0); hseparator = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (vboxframe), hseparator, TRUE, FALSE, 0); hbox = create_hbox(vboxframe); label = gtk_label_new (tlabel); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, FALSE, 0); entry = gtk_entry_new (); gtk_widget_show (entry); gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, TRUE, 0); val = g_strdup_printf("%f",alphaFED); gtk_entry_set_text(GTK_ENTRY(entry),val); if(val) g_free(val); hbox = create_hbox(vboxall); button = create_button(PrincipalWindow,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(set_alphaFED),(gpointer)entry); g_object_set_data (G_OBJECT (button), "Win", fp); gtk_widget_show (button); button = create_button(PrincipalWindow,_("Cancel")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(fp)); gtk_widget_show (button); gtk_widget_show_all(fp); return fp; } GabeditSrc250/src/Display/ContoursDraw.c0000644000175100017510000003105413130665225020470 0ustar alloucheallouche/*ContoursDraw.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Display/GlobalOrb.h" #include "../Utils/Vector3d.h" #include "../Utils/Transformation.h" #include "../Display/Contours.h" #include "../Display/ColorMap.h" #include "../Display/TriangleDraw.h" static gboolean dottedNegtaiveContours = FALSE; /**************************************************************************/ void set_dotted_negative_contours(gboolean dotted) { dottedNegtaiveContours = dotted; } /**************************************************************************/ gboolean get_dotted_negative_contours() { return dottedNegtaiveContours; } /**************************************************************************/ static ColorMap* get_colorMap_contours() { GtkWidget* handleBoxColorMapContours = g_object_get_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapContours"); ColorMap* colorMap = g_object_get_data(G_OBJECT(handleBoxColorMapContours),"ColorMap"); return colorMap; } /********************************************************************************/ gdouble* GetGapVector(Grid* plansgrid,gint i0,gint i1,gint numplan,gdouble gap) { gdouble x1,y1,z1; gdouble x2,y2,z2; gint ip = numplan; gint ix=0,iy=0,iz=0; gint ix1=0,iy1=0,iz1=0; gint ix2=0,iy2=0,iz2=0; gint ix3,iy3,iz3; gint ix4,iy4,iz4; gint i,j,ii,jj; gdouble *Gap = g_malloc(3*sizeof(gdouble)); gdouble Module; i = 0; j = 0; ii = plansgrid->N[i0]-1; jj = plansgrid->N[i1]-1; switch(i0) { case 0: ix = i; ix1 = ix2 = ii; ix4 = ix3 = ix; switch(i1) { case 1 : iy = j; iz = ip; iy1 = iy4 = iy; iy2 = iy3 = jj ; iz1 = iz2 = iz3 = iz4 = iz; break; case 2 : iy = ip;iz = j; iy1 = iy2 = iy3 = iy4 = iy; iz1 = iz4 = iz; iz2 = iz3 = jj ; break; } break; case 1: iy = i; iy1 = iy2 = ii; iy3 = iy4 = iy ; switch(i1) { case 0 : ix = j; iz = ip; iz1 = iz2 = iz3 = iz4 = iz; ix1 = ix4 = ix; ix2 = ix3 = jj ; break; case 2 : ix = ip;iz = j; ix1 = ix2 = ix3 = ix4 = ix; iz1 = iz4 = iz; iz2 = iz3 = jj ; break; } break; case 2: iz = i; iz1 = iz2 = ii; iz3 = iz4 = iz ; switch(i1) { case 0 : ix = j; iy = ip; iy1 = iy2 = iy3 = iy4 = iy; ix1 = ix4 = ix; ix2 = ix3 = jj ; break; case 1 : ix = ip;iy = j; ix1 = ix2 = ix3 = ix4 = ix; iy1 = iy4 = iy; iy2 = iy3 = jj ; break; } break; } x1 = plansgrid->point[ix1][iy1][iz1].C[0] - plansgrid->point[ix][iy][iz].C[0]; y1 = plansgrid->point[ix1][iy1][iz1].C[1] - plansgrid->point[ix][iy][iz].C[1]; z1 = plansgrid->point[ix1][iy1][iz1].C[2] - plansgrid->point[ix][iy][iz].C[2]; x2 = plansgrid->point[ix2][iy2][iz2].C[0] - plansgrid->point[ix1][iy1][iz1].C[0] ; y2 = plansgrid->point[ix2][iy2][iz2].C[1] - plansgrid->point[ix1][iy1][iz1].C[1] ; z2 = plansgrid->point[ix2][iy2][iz2].C[2] - plansgrid->point[ix1][iy1][iz1].C[2] ; Gap[0] = (y1 * z2) - (z1 * y2); Gap[1] = (z1 * x2) - (x1 * z2); Gap[2] = (x1 * y2) - (y1 * x2); Module = sqrt(Gap[0]*Gap[0] + Gap[1]*Gap[1] +Gap[2]*Gap[2]); for(i=0;i<3;i++) Gap[i] = Gap[i]/Module*gap; return Gap; } /*********************************************************************************************************/ void PlanDraw(Grid* plansgrid,gint i0,gint i1,gint numplan,gdouble Gap[]) { gdouble x; gdouble y; gdouble z; gint ip = numplan; gint ix=0,iy=0,iz=0; gint ix1=0,iy1=0,iz1=0; gint ix2=0,iy2=0,iz2=0; gint ix3=0,iy3=0,iz3=0; gint ix4,iy4,iz4; gint i,j,ii,jj; i = 0; j = 0; ii = plansgrid->N[i0]-1; jj = plansgrid->N[i1]-1; switch(i0) { case 0: ix = i; ix1 = ix2 = ii; ix4 = ix3 = ix; switch(i1) { case 1 : iy = j; iz = ip; iy1 = iy4 = iy; iy2 = iy3 = jj ; iz1 = iz2 = iz3 = iz4 = iz; break; case 2 : iy = ip;iz = j; iy1 = iy2 = iy3 = iy4 = iy; iz1 = iz4 = iz; iz2 = iz3 = jj ; break; } break; case 1: iy = i; iy1 = iy2 = ii; iy3 = iy4 = iy ; switch(i1) { case 0 : ix = j; iz = ip; iz1 = iz2 = iz3 = iz4 = iz; ix1 = ix4 = ix; ix2 = ix3 = jj ; break; case 2 : ix = ip;iz = j; ix1 = ix2 = ix3 = ix4 = ix; iz1 = iz4 = iz; iz2 = iz3 = jj ; break; } break; case 2: iz = i; iz1 = iz2 = ii; iz3 = iz4 = iz ; switch(i1) { case 0 : ix = j; iy = ip; iy1 = iy2 = iy3 = iy4 = iy; ix1 = ix4 = ix; ix2 = ix3 = jj ; break; case 1 : ix = ip;iy = j; ix1 = ix2 = ix3 = ix4 = ix; iy1 = iy4 = iy; iy2 = iy3 = jj ; break; } break; } glLineWidth(3); /* glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);*/ glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); glBegin(GL_POLYGON); x = plansgrid->point[ix][iy][iz].C[0] + Gap[0]; y = plansgrid->point[ix][iy][iz].C[1] + Gap[1]; z = plansgrid->point[ix][iy][iz].C[2] + Gap[2]; glVertex3f(x,y,z); x = plansgrid->point[ix1][iy1][iz1].C[0] + Gap[0]; y = plansgrid->point[ix1][iy1][iz1].C[1] + Gap[1]; z = plansgrid->point[ix1][iy1][iz1].C[2] + Gap[2]; glVertex3f(x,y,z); x = plansgrid->point[ix2][iy2][iz2].C[0] + Gap[0]; y = plansgrid->point[ix2][iy2][iz2].C[1] + Gap[1]; z = plansgrid->point[ix2][iy2][iz2].C[2] + Gap[2]; glVertex3f(x,y,z); x = plansgrid->point[ix3][iy3][iz3].C[0] + Gap[0]; y = plansgrid->point[ix3][iy3][iz3].C[1] + Gap[1]; z = plansgrid->point[ix3][iy3][iz3].C[2] + Gap[2]; glVertex3f(x,y,z); glEnd(); glLineWidth(1.5); glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); } /*********************************************************************************************************/ static void ContoursDraw(Contours contours,gdouble Gap[], gdouble value) { gint i; gint j; gint k = 0; gint n=0; gint N[2] = {contours.N[0],contours.N[1]}; PointsContour** pointscontour= contours.pointscontour; gdouble x, y, z; glLineWidth(0.5); /*for(i=1;i0) get_color_surface(0,Color); if(Ncontours==1 && values[0]<0) get_color_surface(1,Color); if(Ncontours==1 && values[0]==0) get_color_surface(2,Color); if(Ncontours>1) PlanDraw(plansgrid,i0,i1,numplan,Gap); /* glDisable(GL_COLOR_MATERIAL);*/ glDisable(GL_BLEND); glEnable(GL_LINE_SMOOTH); for(i=0;i1) set_Color_From_colorMap(colorMap, Color, values[i]); /* printf("i = %d vale = %f\n",i,values[i]);*/ glColor4dv(Color); contours = get_contours(plansgrid,values[i],i0,i1,numplan); /* printf("End get_contours\n");*/ ContoursDraw(contours,Gap,values[i]); /* printf("End ContoursDraw\n");*/ contour_point_free(contours); /* printf("End contour_point_free\n");*/ } glEnable ( GL_LIGHTING ) ; } if(TypeBlend == GABEDIT_BLEND_YES) { glEnable(GL_BLEND); } glLineWidth(1); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glEndList(); g_free(Gap); return contourslist; } /********************************************************************************/ static void setColorMap() { GtkWidget* handleBoxColorMapContours = g_object_get_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapContours"); ColorMap* colorMap = g_object_get_data(G_OBJECT( handleBoxColorMapContours),"ColorMap"); if(colorMap) return; if(handleBoxColorMapContours) { GtkWidget* entryLeft = g_object_get_data(G_OBJECT(handleBoxColorMapContours), "EntryLeft"); GtkWidget* entryRight = g_object_get_data(G_OBJECT(handleBoxColorMapContours), "EntryRight"); GtkWidget* darea = g_object_get_data(G_OBJECT(handleBoxColorMapContours), "DrawingArea"); colorMap = new_colorMap_min_max(-0.5,0.5); g_object_set_data(G_OBJECT(handleBoxColorMapContours),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryLeft),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryRight),"ColorMap", colorMap); g_object_set_data(G_OBJECT(darea),"ColorMap", colorMap); } } /********************************************************************************/ void showColorMapContours() { GtkWidget* handleBoxColorMapContours = g_object_get_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapContours"); ColorMap* colorMap = g_object_get_data(G_OBJECT( handleBoxColorMapContours),"ColorMap"); if(!colorMap) setColorMap(); color_map_show(handleBoxColorMapContours); } /********************************************************************************/ void hideColorMapContours() { GtkWidget* handleBoxColorMapContours = g_object_get_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapContours"); color_map_hide(handleBoxColorMapContours); } /********************************************************************************/ GLuint ContoursGenLists(GLuint contourslist,Grid* plansgrid,gint Ncontours,gdouble* values,gint i0,gint i1,gint numplan,gdouble gap) { if (glIsList(contourslist) == GL_TRUE) glDeleteLists(contourslist,1); if(Ncontours>0) { contourslist = ContoursPlanGenOneList(plansgrid,Ncontours,values,i0,i1,numplan,gap); } return contourslist; } /********************************************************************************/ void ContoursShowLists(GLuint list) { if (glIsList(list) == GL_TRUE) glCallList(list); } /********************************************************************************/ GabeditSrc250/src/Display/Vibration.h0000644000175100017510000000401413130665225017774 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_VIBRATION_H__ #define __GABEDIT_VIBRATION_H__ typedef struct _VibrationMode { gdouble frequence; gdouble effectiveMass; gdouble IRIntensity; gdouble RamanIntensity; gchar* symmetry; gdouble* vectors[3]; }VibrationMode; typedef struct _VibrationGeom { gchar* symbol; gdouble coordinates[3]; gdouble partialCharge; gboolean variable; gdouble nuclearCharge; }VibrationGeom; typedef struct _Vibration { gint numberOfAtoms; VibrationGeom* geometry; gint numberOfFrequencies; VibrationMode* modes; gdouble scal; gdouble velocity; gdouble radius; gdouble threshold; gint nSteps; }Vibration; Vibration vibration; gint rowSelected; void init_vibration(); void vibrationDlg(); #endif /* __GABEDIT_VIBRATION_H__ */ GabeditSrc250/src/Display/MenuToolBarGL.c0000644000175100017510000042026713130665225020460 0ustar alloucheallouche/* MenuToolBarGL.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "../Display/GeomOrbXYZ.h" #include "../Display/UtilsOrb.h" #include "../Display/GridCube.h" #include "../Display/GridAdfOrbitals.h" #include "../Display/GridAdfDensity.h" #include "../Display/GridMolcas.h" #include "../Display/GridQChem.h" #include "../Display/GridCP.h" #include "../Utils/AtomsProp.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/HydrogenBond.h" #include "../Utils/PovrayUtils.h" #include "../Files/FileChooser.h" #include "../Display/GLArea.h" #include "../Display/Orbitals.h" #include "../Display/Images.h" #include "../Display/GridPlans.h" #include "../Display/Contours.h" #include "../Display/PlanesMapped.h" #include "../Display/PreferencesOrb.h" #include "../Display/PreferencesOrb.h" #include "../Display/Vibration.h" #include "../Display/AnimationRotation.h" #include "../Display/AnimationGeomConv.h" #include "../Display/AnimationGrids.h" #include "../Display/AnimationMD.h" #include "../Display/AnimationContours.h" #include "../Display/AnimationPlanesMapped.h" #include "../Display/AnimationIsoSurface.h" #include "../Display/Dipole.h" #include "../Display/AxisGL.h" #include "../Display/PrincipalAxisGL.h" #include "../Display/PovrayGL.h" #include "../Display/ExportGL.h" #include "../Display/StatusOrb.h" #include "../Display/LabelsGL.h" #include "../Display/RingsOrb.h" #include "../Display/ContoursDraw.h" #include "../Display/CaptureOrbitals.h" #include "../Display/IntegralOrbitals.h" #include "../Display/BondsOrb.h" #include "../Display/TriangleDraw.h" #include "../Display/NCI.h" #include "../Common/StockIcons.h" enum { BACKGROUND_BLACK, BACKGROUND_WHITE, BACKGROUND_RED1, BACKGROUND_GREEN1, BACKGROUND_BLUE1, BACKGROUND_PEACH, BACKGROUND_GRAY, BACKGROUND_CHECKER }; /*********************************************************************************************************************/ static GtkUIManager *manager = NULL; static GtkWidget* handleBoxToolBar = NULL; static gboolean ViewToolBar = TRUE; static GtkToolbar* toolBar = NULL; /*********************************************************************************************************************/ static void view_toolbar () { if(!handleBoxToolBar) return; if(ViewToolBar) gtk_widget_hide (GTK_WIDGET(handleBoxToolBar)); else gtk_widget_show (GTK_WIDGET(handleBoxToolBar)); ViewToolBar = !ViewToolBar; } /********************************************************************************/ static void set_optimal_view() { gint i,j; gdouble min = 0; gdouble max = 0; gboolean perspective = FALSE; gdouble zn, zf, zo; gdouble aspect; if(!GeomOrb || Ncenters<1 ) return; min = GeomOrb[0].C[0]; max = GeomOrb[0].C[0]; for(i=0;iGeomOrb[i].C[j]) min = GeomOrb[i].C[j]; if(maxgrid->limits.MinMax[0][j]) min = grid->limits.MinMax[0][j]; if(maxlimits.MinMax[1][j]) max = grid->limits.MinMax[1][j]; } } get_camera_values(&zn, &zf, &zo, &aspect, &perspective); zn = 1; zf = fabs(max-min)*5; if(Ncenters<2) zf = 100; if(perspective) zo = 1.0; else { gdouble d = fabs(max-min); if(d>1e-10) zo = 20/d; else zo = 1.0; } zo = 1/zo*45; set_camera_values(zn,zf,zo,perspective); } /*********************************************************************************************************************/ static void activate_action (GtkAction *action) { const gchar *name = gtk_action_get_name (action); /* const gchar *typename = G_OBJECT_TYPE_NAME (action);*/ if(!strcmp(name,"GeometryAuto")) file_chooser_open(gl_read_geom_any_file_sel,_("Read geometry"),GABEDIT_TYPEFILE_UNKNOWN,GABEDIT_TYPEWIN_ORB); if(!strcmp(name,"GeometryXYZ")) file_chooser_open(gl_read_xyz_file_sel,_("Read a xyz file"),GABEDIT_TYPEFILE_XYZ,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name,"GeometryPDB")) file_chooser_open(gl_read_pdb_file_sel,_("Read a pdb file"),GABEDIT_TYPEFILE_PDB,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name,"GeometryHIN")) file_chooser_open(gl_read_hin_file_sel,_("Read a hyperchem file"),GABEDIT_TYPEFILE_HIN,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name,"GeometryAIMAll")) file_chooser_open(gl_read_aimall_file_sel,_("Read a AIMAll file"),GABEDIT_TYPEFILE_AIMALL,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name,"GeometryOpenBabel")) gl_create_babel_read_dialogue(); else if(!strcmp(name,"GeometryDaltonFirst")) file_chooser_open(gl_read_first_dalton_file,_("Read the first geometry in a Dalton output file"),GABEDIT_TYPEFILE_DALTON,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name,"GeometryDaltonLast")) file_chooser_open(gl_read_last_dalton_file,_("Read the last geometry in a Dalton output file"),GABEDIT_TYPEFILE_DALTON,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name,"GeometryGamessFirst")) file_chooser_open(gl_read_first_gamess_file,_("Read the first geometry in a Gamess output file"),GABEDIT_TYPEFILE_GAMESS,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name,"GeometryGamessLast")) file_chooser_open(gl_read_last_gamess_file,_("Read the last geometry in a Gamess output file"),GABEDIT_TYPEFILE_GAMESS,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name,"GeometryGaussianFirst")) file_chooser_open(gl_read_first_gauss_file,_("Read the first geometry in a Gaussian output file"),GABEDIT_TYPEFILE_GAUSSIAN,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryGaussianLast")) file_chooser_open(gl_read_last_gauss_file,_("Read the last geometry in a Gaussian output file"),GABEDIT_TYPEFILE_GAUSSIAN,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryGaussianFChk")) file_chooser_open(gl_read_fchk_gauss_file,_("Read the geometry in a Gaussian fchk file"),GABEDIT_TYPEFILE_GAUSSIAN_FCHK,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryMolcasFirst")) file_chooser_open(gl_read_first_molcas_file,_("Read the first geometry in a Molcas output file"),GABEDIT_TYPEFILE_MOLCAS,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryMolcasLast")) file_chooser_open(gl_read_last_molcas_file,_("Read the last geometry in a Molcas output file"),GABEDIT_TYPEFILE_MOLCAS,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryMolproFirst")) file_chooser_open(gl_read_first_molpro_file,_("Read the first geometry in a Molpro output file"),GABEDIT_TYPEFILE_MOLPRO,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryMolproLast")) file_chooser_open(gl_read_last_molpro_file,_("Read the last geometry in a Molpro output file"),GABEDIT_TYPEFILE_MOLPRO,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryMopacOutFirst")) file_chooser_open(gl_read_first_mopac_output_file,_("Read the first geometry from a Mopac output file"),GABEDIT_TYPEFILE_MOPAC,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryMopacOutLast")) file_chooser_open(gl_read_last_mopac_output_file,_("Read the last geometry from a Mopac output file"),GABEDIT_TYPEFILE_MOPAC,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryMopacAuxFirst")) file_chooser_open(gl_read_first_mopac_aux_file,_("Read the first geometry from a Mopac aux file"),GABEDIT_TYPEFILE_MOPAC_AUX,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryMopacAuxLast")) file_chooser_open(gl_read_last_mopac_aux_file,_("Read the last geometry from a Mopac aux file"),GABEDIT_TYPEFILE_MOPAC_AUX,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryMPQCFirst")) file_chooser_open(gl_read_first_mpqc_file,_("Read the first geometry from a MPQC output file"),GABEDIT_TYPEFILE_MPQC,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryMPQCLast")) file_chooser_open(gl_read_last_mpqc_file,_("Read the last geometry from a MPQC output file"),GABEDIT_TYPEFILE_MPQC,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name,"GeometryOrcaFirst")) file_chooser_open(gl_read_first_orca_file,_("Read the first geometry in a Orca output file"),GABEDIT_TYPEFILE_ORCA,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name,"GeometryOrcaLast")) file_chooser_open(gl_read_last_orca_file,_("Read the last geometry in a Orca output file"),GABEDIT_TYPEFILE_ORCA,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name,"GeometryOrcaHessian")) file_chooser_open(gl_read_hessian_orca_file,_("Read the geometry from a Orca hessian file"),GABEDIT_TYPEFILE_ORCA,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name,"GeometryFireFlyFirst")) file_chooser_open(gl_read_first_gamess_file,_("Read the first geometry in a FireFly output file"),GABEDIT_TYPEFILE_GAMESS,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name,"GeometryFireFlyLast")) file_chooser_open(gl_read_last_gamess_file,_("Read the last geometry in a FireFly output file"),GABEDIT_TYPEFILE_GAMESS,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryQChemFirst")) file_chooser_open(gl_read_first_qchem_file,_("Read the first geometry from a Q-Chem output file"),GABEDIT_TYPEFILE_QCHEM,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryQChemLast")) file_chooser_open(gl_read_last_qchem_file,_("Read the last geometry from a Q-Chem output file"),GABEDIT_TYPEFILE_QCHEM,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryNWChemFirst")) file_chooser_open(gl_read_first_nwchem_file,_("Read the first geometry from a NWChem output file"),GABEDIT_TYPEFILE_NWCHEM,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryNWChemLast")) file_chooser_open(gl_read_last_nwchem_file,_("Read the last geometry from a NWChem output file"),GABEDIT_TYPEFILE_NWCHEM,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryPsicodeFirst")) file_chooser_open(gl_read_first_psicode_file,_("Read the first geometry from a Psicode output file"),GABEDIT_TYPEFILE_PSICODE,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryPsicodeLast")) file_chooser_open(gl_read_last_psicode_file,_("Read the last geometry from a Psicode output file"),GABEDIT_TYPEFILE_PSICODE,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryNBO")) file_chooser_open(gl_read_nbo_file,_("Read the geometry from a NBO output file(.31)"),GABEDIT_TYPEFILE_NBO_BASIS,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryGabedit")) file_chooser_open(gl_read_gabedit_file,_("Read geometry from a gabedit file"),GABEDIT_TYPEFILE_GABEDIT,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name ,"GeometryMolden")) file_chooser_open(gl_read_molden_file,_("Read geometry from a molden file"),GABEDIT_TYPEFILE_MOLDEN,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "OrbitalsAuto")) file_chooser_open(read_orbitals_sel,_("Read Geometry and Orbitals(Auto)"),GABEDIT_TYPEFILE_UNKNOWN,GABEDIT_TYPEWIN_ORB); /* else if(!strcmp(name , "OrbitalsDalton")) file_chooser_open(read_dalton_orbitals_sel,"Read Geometry and Orbitals from a Dalton output file",GABEDIT_TYPEFILE_DALTON,GABEDIT_TYPEWIN_ORB); */ else if(!strcmp(name , "OrbitalsNBO")) file_chooser_open(read_nbo_orbitals_sel,_("Read Geometry and Orbitals from a NBO output files (.31 and .xx)"),GABEDIT_TYPEFILE_NBO,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "OrbitalsGamess")) file_chooser_open(read_gamess_orbitals_sel,_("Read Geometry and Orbitals from a Gamess output file"),GABEDIT_TYPEFILE_GAMESS,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "OrbitalsOrca")) file_chooser_open(read_orca_orbitals_sel,_("Read Geometry and Orbitals from a Orca files"),GABEDIT_TYPEFILE_ORCA,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "OrbitalsOrca2mkl")) file_chooser_open(read_orca_orbitals_sel_2mkl,_("Read Geometry and Orbitals from a Orca files"),GABEDIT_TYPEFILE_ORCA,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "OrbitalsFireFly")) file_chooser_open(read_gamess_orbitals_sel,_("Read Geometry and Orbitals from a FireFly output file"),GABEDIT_TYPEFILE_GAMESS,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "OrbitalsNWChem")) file_chooser_open(read_nwchem_orbitals_sel,_("Read Geometry and Orbitals from a NWChem output file"),GABEDIT_TYPEFILE_NWCHEM,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "OrbitalsQChem")) file_chooser_open(read_qchem_orbitals_sel,_("Read Geometry and Orbitals from a Q-Chem output file"),GABEDIT_TYPEFILE_QCHEM,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "OrbitalsMopac")) file_chooser_open(read_mopac_orbitals_sel,_("Read Geometry and Orbitals from a Mopac output file"),GABEDIT_TYPEFILE_MOPAC_AUX,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "OrbitalsGaussian")) file_chooser_open(read_gauss_orbitals_sel,_("Read Geometry and Orbitals from a Gaussian output file"),GABEDIT_TYPEFILE_GAUSSIAN,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "OrbitalsGaussianFChk")) file_chooser_open(read_fchk_gauss_orbitals_sel,_("Read Geometry and Orbitals from a Gaussian fchk file"),GABEDIT_TYPEFILE_GAUSSIAN_FCHK,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "OrbitalsMolpro")) file_chooser_open(read_molpro_orbitals_sel,_("Read Geometry and Orbitals from a Molpro output file"),GABEDIT_TYPEFILE_MOLPRO,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "OrbitalsGabeditRead")) file_chooser_open(read_gabedit_orbitals_sel,_("Read Geometry and Orbitals from a Gabedit file"),GABEDIT_TYPEFILE_GABEDIT,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "OrbitalsMolden")) file_chooser_open(read_molden_orbitals_sel,_("Read Geometry and Orbitals from a Molden file"),GABEDIT_TYPEFILE_MOLDEN,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "OrbitalsGabeditSave")) { if(Type) file_chooser_save(save_gabedit_orbitals_sel,_("Save Geometry and Orbitals in a Gabedit file"),GABEDIT_TYPEFILE_GABEDIT,GABEDIT_TYPEWIN_ORB); else Message(_("Sorry, I cannot save this type of orbitals \n(probably these are molpro or mopac orbitals)"),_("Error"),TRUE); } else if(!strcmp(name , "OrbitalsSelection")) { TypeGrid = GABEDIT_TYPEGRID_ORBITAL; create_list_orbitals(); } else if(!strcmp(name , "OrbitalsCapture")) { TypeGrid = GABEDIT_TYPEGRID_ORBITAL; capture_orbitals_dlg(); } else if(!strcmp(name , "OrbitalsCoulomb")) { TypeGrid = GABEDIT_TYPEGRID_ORBITAL; coulomb_orbitals_dlg(); } else if(!strcmp(name , "OrbitalsTransition")) { TypeGrid = GABEDIT_TYPEGRID_ORBITAL; transition_matrix_orbitals_dlg(); } else if(!strcmp(name , "OrbitalsSpatialOverlapIIJJ")) { TypeGrid = GABEDIT_TYPEGRID_ORBITAL; spatial_overlapiijj_orbitals_dlg(); } else if(!strcmp(name , "OrbitalsSpatialOverlapIJ")) { TypeGrid = GABEDIT_TYPEGRID_ORBITAL; spatial_overlapij_orbitals_dlg(); } else if(!strcmp(name , "OrbitalsLambdaDiagnostic")) { TypeGrid = GABEDIT_TYPEGRID_ORBITAL; lambda_diagnostic_dlg(); } else if(!strcmp(name , "OrbitalsOverlap")) { TypeGrid = GABEDIT_TYPEGRID_ORBITAL; compute_overlap_matrix(1); } else if(!strcmp(name , "MullikenCharges")) { TypeGrid = GABEDIT_TYPEGRID_ORBITAL; compute_mulliken_charges(); } else if(!strcmp(name , "BondOrder")) { TypeGrid = GABEDIT_TYPEGRID_ORBITAL; compute_bondOrders(); } else if(!strcmp(name , "CubeLoadGaussianOrbitals" )) file_chooser_open(load_cube_gauss_orbitals_file,_("Load Gaussian orbitals cube file"),GABEDIT_TYPEFILE_CUBEGAUSS,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadGaussianDensity")) file_chooser_open(load_cube_gauss_density_file,_("Load Gaussian density cube file"),GABEDIT_TYPEFILE_CUBEGAUSS,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadGaussianDensityGradient")) file_chooser_open(load_cube_gauss_gradient_file,_("Load Gaussian gradient cube file"),GABEDIT_TYPEFILE_CUBEGAUSS,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadGaussianLaplacian" )) file_chooser_open(load_cube_gauss_laplacian_file,_("Load Gaussian laplacian cube file"),GABEDIT_TYPEFILE_CUBEGAUSS,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadGaussianNormGradient")) file_chooser_open(load_cube_gauss_normgrad_file,_("Load Gaussian norm gradient cube file"),GABEDIT_TYPEFILE_CUBEGAUSS,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadGaussianPotential")) file_chooser_open(load_cube_gauss_potential_file,_("Load Gaussian potential cube file"),GABEDIT_TYPEFILE_CUBEGAUSS,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadMolproOrbitalsOne")) file_chooser_open(load_cube_molpro_orbital_file,_("Load Molpro one orbital cube file"),GABEDIT_TYPEFILE_CUBEMOLPRO,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadMolproOrbitalsSeveral")) file_chooser_open(load_cube_molpro_orbitals_file,_("Load Molpro several orbitals cube file"),GABEDIT_TYPEFILE_CUBEMOLPRO,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadMolproDensityOne")) file_chooser_open(load_cube_molpro_density_file,_("Load Molpro density cube file"),GABEDIT_TYPEFILE_CUBEMOLPRO,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadMolproDensityGradient")) file_chooser_open(load_cube_molpro_density_gradient_file,_("Load Molpro gradient cube file"),GABEDIT_TYPEFILE_CUBEMOLPRO,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadMolproDensityGradientLaplacianDensity")) file_chooser_open(load_cube_molpro_laplacian_density_file,_("Load density from Molpro laplacian cube file"),GABEDIT_TYPEFILE_CUBEMOLPRO,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadMolproDensityGradientLaplacianLaplacian")) file_chooser_open(load_cube_molpro_laplacian_laplacian_file,_("Load Molpro laplacian cube file"),GABEDIT_TYPEFILE_CUBEMOLPRO,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadAdfOrbitals")) file_chooser_open(load_adf_file_orbitals,_("Load orbitals from adf file"),GABEDIT_TYPEFILE_CUBEADF,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadAdfDensity")) file_chooser_open(load_adf_file_density,_("Load density from adf file"),GABEDIT_TYPEFILE_CUBEADF,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadMolcasGridOrbitals")) file_chooser_open(load_molcasgrid_file_orbitals,_("Load Orbitals from molcasgrid file"),GABEDIT_TYPEFILE_MOLCASGRID,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadMolcasGridDensity")) file_chooser_open(load_molcasgrid_file_density,_("Load density from molcasgrid file"),GABEDIT_TYPEFILE_MOLCASGRID,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadGabeditRead")) file_chooser_open(load_cube_gabedit_file,_("Load Gabedit cube file"),GABEDIT_TYPEFILE_CUBEGABEDIT,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadDXRead")) file_chooser_open(load_dx_grid_file,_("Load DX grid file"),GABEDIT_TYPEFILE_CUBEDX,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadQChem")) file_chooser_open(load_qchemgrid_file,_("Load Q-Chem Grid file"),GABEDIT_TYPEFILE_CUBEQCHEM,GABEDIT_TYPEWIN_ORB); else if(!strcmp(name , "CubeLoadGabeditSave")) { if(!grid) Message(_("Sorry, you have not a default grid"),_("Error"),TRUE); else file_chooser_save(save_cube_gabedit_file,"Save density",GABEDIT_TYPEFILE_CUBEGABEDIT,GABEDIT_TYPEWIN_ORB); } else if(!strcmp(name , "CubeSubtract")) { if(!grid) Message(_("Sorry, you have not a default grid"),_("Error"),TRUE); else file_chooser_open(subtract_cube,"Subtract",GABEDIT_TYPEFILE_CUBEGABEDIT,GABEDIT_TYPEWIN_ORB); } else if(!strcmp(name , "CubeScale")) { if(!grid) Message(_("Sorry, you have not a default grid"),_("Error"),TRUE); else create_scale_dlg(); } else if(!strcmp(name , "CubeSquare")) { if(!grid) Message(_("Sorry, you have not a default grid"),_("Error"),TRUE); else square_cube(); } else if(!strcmp(name , "CubeRestriction")) { if(!grid) Message(_("Sorry, you have not a default grid"),_("Error"),TRUE); else restriction_cube(); } else if(!strcmp(name , "CubeCutLeft0")) { if(!grid) Message(_("Sorry, you have not a default grid"),_("Error"),TRUE); else applyCutLeft0(NULL,NULL); } else if(!strcmp(name , "CubeCutLeft1")) { if(!grid) Message(_("Sorry, you have not a default grid"),_("Error"),TRUE); else applyCutLeft1(NULL,NULL); } else if(!strcmp(name , "CubeCutLeft2")) { if(!grid) Message(_("Sorry, you have not a default grid"),_("Error"),TRUE); else applyCutLeft2(NULL,NULL); } else if(!strcmp(name , "CubeCutRight0")) { if(!grid) Message(_("Sorry, you have not a default grid"),_("Error"),TRUE); else applyCutRight0(NULL,NULL); } else if(!strcmp(name , "CubeCutRight1")) { if(!grid) Message(_("Sorry, you have not a default grid"),_("Error"),TRUE); else applyCutRight1(NULL,NULL); } else if(!strcmp(name , "CubeCutRight2")) { if(!grid) Message(_("Sorry, you have not a default grid"),_("Error"),TRUE); else applyCutRight2(NULL,NULL); } else if(!strcmp(name , "CubeAIMChargesNearGrid")) { if(!grid) Message(_("Sorry, you have not a default grid"),_("Error"),TRUE); else computeAIMCharges(grid, FALSE); } else if(!strcmp(name , "CubeAIMChargesOnGrid")) { if(!grid) Message(_("Sorry, you have not a default grid"),_("Error"),TRUE); else computeAIMCharges(grid, TRUE); } else if(!strcmp(name , "CubeColorMapping")) { if(!grid) Message(_("Sorry, you have not a default grid"),_("Error"),TRUE); else file_chooser_open(mapping_cube,"Color Mapping",GABEDIT_TYPEFILE_CUBEGABEDIT,GABEDIT_TYPEWIN_ORB); } else if(!strcmp(name , "ComputeIntegralSpace")) { if(!grid) Message(_("Sorry, you have not a default grid"),_("Error"),TRUE); else compute_integral_all_space(); } else if(!strcmp(name , "DensityElectronic")) { TypeGrid = GABEDIT_TYPEGRID_EDENSITY; create_grid(_("Calculation of molecular electronic density grid")); } else if(!strcmp(name , "DensityBonds")) { TypeGrid = GABEDIT_TYPEGRID_DDENSITY; create_grid(_("Calculation of (molecular - atomic) density grid")); } else if(!strcmp(name , "DensitySpin")) { TypeGrid = GABEDIT_TYPEGRID_SDENSITY; create_grid(_("Calculation of molecular electronic spin density grid")); } else if(!strcmp(name , "DensityAtomics")) { TypeGrid = GABEDIT_TYPEGRID_ADENSITY; create_grid(_("Calculation of atomic electronic density grid")); } else if(!strcmp(name , "ELFBecke")) { TypeGrid = GABEDIT_TYPEGRID_ELFBECKE; create_grid(_("Calculation of Becke ELF")); } else if(!strcmp(name , "ELFSavin")) { TypeGrid = GABEDIT_TYPEGRID_ELFSAVIN; create_grid(_("Calculation of Savin ELF")); } else if(!strcmp(name , "ELFSavinAttractors")) { TypeGrid = GABEDIT_TYPEGRID_ELFSAVIN; create_grid_ELF_Dens_analyze(TRUE); } else if(!strcmp(name , "FEDElectrophilic")) { TypeGrid = GABEDIT_TYPEGRID_FEDELECTROPHILIC; create_grid(_("Calculation of FED Electrophilic susceptibility")); } else if(!strcmp(name , "FEDNucleophilic")) { TypeGrid = GABEDIT_TYPEGRID_FEDNUCLEOPHILIC; create_grid(_("Calculation of FED Nucleophilic susceptibility")); } else if(!strcmp(name , "FEDRadical")) { TypeGrid = GABEDIT_TYPEGRID_FEDRADICAL; create_grid(_("Calculation of FED Radical susceptibility")); } else if(!strcmp(name , "FEDSetAlpha")) { set_alphaFED_dialog (); } else if(!strcmp(name , "SASCompute")) { TypeGrid = GABEDIT_TYPEGRID_SAS; create_grid_sas(_("Compute Solvent Accessible Surface")); } else if(!strcmp(name , "SASMappCompute")) { TypeGrid = GABEDIT_TYPEGRID_SASMAP; create_grid_sas(_("Compute Solvent Accessible Surface")); } else if(!strcmp(name , "MEPOrbitalsMultipol")) { TypeGrid = GABEDIT_TYPEGRID_MEP_MULTIPOL; CancelCalcul = FALSE; create_grid(_("Calculation of MEP using Molecular Orbitals")); } else if(!strcmp(name , "MEPOrbitalsCG")) { TypeGrid = GABEDIT_TYPEGRID_MEP_CG; CancelCalcul = FALSE; create_grid(_("Calculation of MEP from Molecular Orbitals/Poisson by Congugate Gradient")); } else if(!strcmp(name , "MEPOrbitalsMG")) { TypeGrid = GABEDIT_TYPEGRID_MEP_MG; CancelCalcul = FALSE; create_grid(_("Calculation of MEP from Molecular Orbitals/Poisson by Multigrid")); } else if(!strcmp(name , "MEPOrbitalsExact")) { TypeGrid = GABEDIT_TYPEGRID_MEP_EXACT; CancelCalcul = FALSE; create_grid(_("Calculation of MEP from Molecular Orbitals/Exact")); } else if(!strcmp(name , "MEPFromCharges")) { TypeGrid = GABEDIT_TYPEGRID_MEP_CHARGES; CancelCalcul = FALSE; create_grid(_("Calculation of MEP from partial charges of atoms")); } else if(!strcmp(name , "MEPGridMultipol")) { CancelCalcul = FALSE; Grid* esp = compute_mep_grid_using_multipol_from_density_grid(grid, get_multipole_rank()); if(esp) { free_grid(grid); grid = esp; TypeGrid = GABEDIT_TYPEGRID_MEP_MULTIPOL; limits = grid->limits; create_iso_orbitals(); } } else if(!strcmp(name , "MEPGridExact")) { CancelCalcul = FALSE; Grid* esp = compute_mep_grid_exact(grid->N,grid->limits); if(esp) { free_grid(grid); grid = esp; TypeGrid = GABEDIT_TYPEGRID_MEP_EXACT; limits = grid->limits; create_iso_orbitals(); } } else if(!strcmp(name , "MEPGridCG")) { CancelCalcul = FALSE; Grid* esp = solve_poisson_equation_from_density_grid(grid,GABEDIT_CG); if(esp) { free_grid(grid); grid = esp; TypeGrid = GABEDIT_TYPEGRID_MEP_CG; limits = grid->limits; create_iso_orbitals(); } } else if(!strcmp(name , "MEPGridMG")) { CancelCalcul = FALSE; Grid* esp = solve_poisson_equation_from_density_grid(grid,GABEDIT_MG); if(esp) { free_grid(grid); grid = esp; TypeGrid = GABEDIT_TYPEGRID_MEP_MG; limits = grid->limits; create_iso_orbitals(); } } else if(!strcmp(name , "MEPMappingCharges")) { CancelCalcul = FALSE; mapping_with_mep_from_charges(); } else if(!strcmp(name , "MEPMappingMultipol")) { CancelCalcul = FALSE; mapping_with_mep_from_multipol(get_multipole_rank()); } else if(!strcmp(name , "MEPMappingCG")) { CancelCalcul = FALSE; mapping_with_mep(grid->N,grid->limits, GABEDIT_CG); } else if(!strcmp(name , "MEPMappingMG")) { CancelCalcul = FALSE; mapping_with_mep(grid->N,grid->limits, GABEDIT_MG); } else if(!strcmp(name , "MEPMappingExact")) { CancelCalcul = FALSE; mapping_with_mep(grid->N,grid->limits, GABEDIT_EXACT); } else if(!strcmp(name , "FEDElectrophilicMapping")) { CancelCalcul = FALSE; mapping_with_fed(0); } else if(!strcmp(name , "FEDNucleophilicMapping")) { CancelCalcul = FALSE; mapping_with_fed(2); } else if(!strcmp(name , "FEDRadicalMapping")) { CancelCalcul = FALSE; mapping_with_fed(1); } else if(!strcmp(name , "CubeComputeLaplacian")) { Grid* lapGrid = get_grid_laplacian(grid,2); if(lapGrid) { free_grid(grid); grid = lapGrid; TypeGrid = GABEDIT_TYPEGRID_ORBITAL; limits = grid->limits; create_iso_orbitals(); } } else if(!strcmp(name , "CubeComputeNormGradient")) { Grid* gradGrid = get_grid_norm_gradient(grid,2); if(gradGrid) { free_grid(grid); grid = gradGrid; TypeGrid = GABEDIT_TYPEGRID_ORBITAL; limits = grid->limits; create_iso_orbitals(); } } else if(!strcmp(name , "CubeSignLambda2Density")) { Grid* sl2Grid = get_grid_sign_lambda2_density(grid,2); if(sl2Grid) { free_grid(grid); grid = sl2Grid; TypeGrid = GABEDIT_TYPEGRID_ORBITAL; limits = grid->limits; create_iso_orbitals(); } } else if(!strcmp(name , "NCISurface")) { nci_surface_dlg("NCI Surface"); } else if(!strcmp(name , "NCI2D")) { nci2D_analysis_dlg("NCI 2D analysis"); } else if(!strcmp(name , "NCIHelp")) { help_nci(); } else if(!strcmp(name , "ContoursFirst")) create_contours(_("Contours in a plane perpendicular to first direction"),0); else if(!strcmp(name , "ContoursSecond")) create_contours(_("Contours in a plane perpendicular to second direction"),1); else if(!strcmp(name , "ContoursThird")) create_contours(_("Contours in a plane perpendicular to third direction"),2); else if(!strcmp(name , "ContoursOther")) { create_planeGrid_center_vector("Contours"); glarea_rafresh(GLArea); } else if(!strcmp(name , "ContoursIsoSurface")) { create_contours_isosurface(); } else if(!strcmp(name , "ContoursDelete")) { free_contours_all(); glarea_rafresh(GLArea); } else if(!strcmp(name , "PlanesColorCodedFirst")) create_maps(_("Plane perpendicular to first direction"),0); else if(!strcmp(name , "PlanesColorCodedSecond")) create_maps(_("Plane perpendicular to second direction"),1); else if(!strcmp(name , "PlanesColorCodedThird")) create_maps(_("Plane perpendicular to third direction"),2); else if(!strcmp(name , "PlanesColorCodedOther")) { create_planeGrid_center_vector("Maps"); glarea_rafresh(GLArea); } else if(!strcmp(name , "PlanesColorCodedDelete")) { free_planes_mapped_all(); glarea_rafresh(GLArea); } else if(!strcmp(name , "SurfacesResetIsovalue")) { CancelCalcul = FALSE; newSurface = FALSE; create_iso_orbitals(); } else if(!strcmp(name , "SurfacesNew")) { CancelCalcul = FALSE; newSurface = TRUE; create_iso_orbitals(); } else if(!strcmp(name , "SurfacesDelete")) { free_surfaces_all(); glarea_rafresh(GLArea); } else if(!strcmp(name , "Rings3")) { build_rings(3); glarea_rafresh(GLArea); } else if(!strcmp(name , "Rings4")) { build_rings(4); glarea_rafresh(GLArea); } else if(!strcmp(name , "Rings5")) { build_rings(5); glarea_rafresh(GLArea); } else if(!strcmp(name , "Rings6")) { build_rings(6); glarea_rafresh(GLArea); } else if(!strcmp(name , "Rings7")) { build_rings(7); glarea_rafresh(GLArea); } else if(!strcmp(name , "Rings8")) { build_rings(8); glarea_rafresh(GLArea); } else if(!strcmp(name , "RingsDelete")) { delete_rings_all(); glarea_rafresh(GLArea); } else if(!strcmp(name , "ConformerType")) { build_rings(6); computeConformerType(); glarea_rafresh(GLArea); } else if(!strcmp(name , "RenderOptimal")) set_optimal_view(); else if(!strcmp(name , "SetCamera")) set_camera(); else if(!strcmp(name , "SetLigthPositions")) set_light_positions(_("Set Light Positions")); else if(!strcmp(name , "SetSurfaceColors")) set_colors_surfaces(_("Set Surface Colors")); else if(!strcmp(name , "SetDipole")) { GtkWidget* win = set_dipole_dialog(); RebuildGeom = TRUE; gtk_window_set_transient_for(GTK_WINDOW(win),GTK_WINDOW(PrincipalWindow)); } else if(!strcmp(name , "SetDipoleDensity")) { RebuildGeom = TRUE; compute_total_dipole(); glarea_rafresh(GLArea); } else if(!strcmp(name , "SetDipoleCT")) { compute_charge_transfer_dipole(); RebuildGeom = TRUE; glarea_rafresh(GLArea); } else if(!strcmp(name , "SetMultipleBonds")) { RebuildGeom = TRUE; buildMultipleBonds(); glarea_rafresh(GLArea); } else if(!strcmp(name , "SetAllBonds")) { RebuildGeom = TRUE; buildBondsOrb(); glarea_rafresh(GLArea); } else if(!strcmp(name , "SetPropertiesOfAtoms")) create_table_prop(); else if(!strcmp(name , "SetHydrogenBondsParameters")) { RebuildGeom = TRUE; set_HBonds_dialog (PrincipalWindow); } else if(!strcmp(name , "SetXYZAxesProperties")) { RebuildGeom = TRUE; set_axis_dialog(); } else if(!strcmp(name , "SetPrincipalAxesProperties")) { RebuildGeom = TRUE; set_principal_axisGL_dialog(); } else if(!strcmp(name , "SetPovrayBackGround")) createPovrayOptionsWindow(PrincipalWindow); else if(!strcmp(name , "SetColorMap")) createColorMapOptionsWindow(PrincipalWindow); else if(!strcmp(name , "SetTitle")) set_title_dlg(); else if(!strcmp(name , "SetOpacity")) set_opacity_dlg(); else if(!strcmp(name , "SetScaleBallStick")) set_scale_ball_stick_dlg(); else if(!strcmp(name , "ScreenCaptureJPG")) { GtkWidget* chooser = file_chooser_save(save_jpeg_file,_("Save image in jpg file format"),GABEDIT_TYPEFILE_JPEG,GABEDIT_TYPEWIN_ORB); fit_windows_position(PrincipalWindow, chooser); } else if(!strcmp(name , "ScreenCapturePPM")) { GtkWidget* chooser = file_chooser_save(save_ppm_file,_("Save image in ppm file format"),GABEDIT_TYPEFILE_PPM,GABEDIT_TYPEWIN_ORB); fit_windows_position(PrincipalWindow, chooser); } else if(!strcmp(name , "ScreenCaptureBMP")) { GtkWidget* chooser = file_chooser_save(save_bmp_file,_("Save image in bmp file format"),GABEDIT_TYPEFILE_BMP,GABEDIT_TYPEWIN_ORB); fit_windows_position(PrincipalWindow, chooser); } else if(!strcmp(name , "ScreenCapturePNG")) { GtkWidget* chooser = file_chooser_save(save_png_file,_("Save image in png file format"),GABEDIT_TYPEFILE_PNG,GABEDIT_TYPEWIN_ORB); fit_windows_position(PrincipalWindow, chooser); } else if(!strcmp(name , "ScreenCaptureTIF")) { GtkWidget* chooser = file_chooser_save(save_png_file,_("Save image in tif file format"),GABEDIT_TYPEFILE_TIF,GABEDIT_TYPEWIN_ORB); fit_windows_position(PrincipalWindow, chooser); } else if(!strcmp(name , "ScreenCapturePNGWithoutBackGround")) { GtkWidget* chooser = file_chooser_save(save_png_without_background_file,_("Save image in png file format"),GABEDIT_TYPEFILE_PNG,GABEDIT_TYPEWIN_ORB); fit_windows_position(PrincipalWindow, chooser); } else if(!strcmp(name , "ScreenCapturePS")) { GtkWidget* chooser = file_chooser_save(save_ps_file,_("Save image in ps file format"),GABEDIT_TYPEFILE_PS,GABEDIT_TYPEWIN_ORB); fit_windows_position(PrincipalWindow, chooser); } else if(!strcmp(name , "ScreenCaptureClipBoard")) { copy_to_clipboard(); } else if(!strcmp(name , "ScreenCaptureClipBoardWithoutBackground")) { copy_to_clipboard_without_background(); } else if(!strcmp(name , "ExportPovray")) { /* create_save_povray_orb(PrincipalWindow);*/ exportPOVDlg(PrincipalWindow); } else if(!strcmp(name , "ExportEPS")) export_scene(PrincipalWindow,"eps"); else if(!strcmp(name , "ExportPS")) export_scene(PrincipalWindow,"ps"); else if(!strcmp(name , "ExportPDF")) export_scene(PrincipalWindow,"pdf"); else if(!strcmp(name , "ExportSVG")) export_scene(PrincipalWindow,"svg"); else if(!strcmp(name , "AnimationVibration")) vibrationDlg(); else if(!strcmp(name , "AnimationGeometryConvergence")) geometryConvergenceDlg(); else if(!strcmp(name , "AnimationGrids")) animationGridsDlg(); else if(!strcmp(name , "AnimationMD")) geometriesMDDlg(); else if(!strcmp(name , "AnimationRotation")) animationRotationDlg(); else if(!strcmp(name , "AnimationContours")) animationContoursDlg(); else if(!strcmp(name , "AnimationPlanesColorcoded")) animationPlanesMappedDlg(); else if(!strcmp(name , "AnimationIsosurface")) animationIsoSurfaceDlg(); else if(!strcmp(name , "Close")) { gtk_widget_hide(PrincipalWindow); /* close_window_orb(NULL,NULL);*/ } if(strstr(name,"Geometry")) destroy_win_list(); if(strstr(name,"CubeLoad")) destroy_win_list(); } /*********************************************************************************************************************/ static GtkActionEntry gtkActionEntries[] = { {"Geometry", NULL, N_("_Geometry")}, {"GeometryAuto", NULL, N_("Read (Auto)"), NULL, "Read the geometry from file", G_CALLBACK (activate_action) }, {"GeometryXYZ", NULL, N_("Read the geometry from a _xyz file"), NULL, "Read the geometry from a xyz file", G_CALLBACK (activate_action) }, {"GeometryPDB", GABEDIT_STOCK_PDB, N_("Read the geometry from a _pdb file"), NULL, "Read the geometry from a pdb file", G_CALLBACK (activate_action) }, {"GeometryHIN", NULL, N_("Read the geometry from a _hyperchem file"), NULL, "Read the geometry from a hyperchem file", G_CALLBACK (activate_action) }, {"GeometryAIMAll", NULL, N_("Read the geometry from a _AIMAll file"), NULL, "Read the geometry from a AIMAll file", G_CALLBACK (activate_action) }, {"GeometryOpenBabel", GABEDIT_STOCK_OPEN_BABEL, N_("Other format (using Open _Babel)"), NULL, "Other format (using Open _Babel)", G_CALLBACK (activate_action) }, {"GeometryDalton", GABEDIT_STOCK_DALTON, N_("Geometry _Dalton")}, {"GeometryDaltonFirst", GABEDIT_STOCK_DALTON, N_("Read the _first geometry from a Dalton output log file"), NULL, "Read the first geometry from a Dalton output file", G_CALLBACK (activate_action) }, {"GeometryDaltonLast", GABEDIT_STOCK_DALTON, N_("Read the _last geometry from a Dalton output log file"), NULL, "Read the last geometry from a Dalton output file", G_CALLBACK (activate_action) }, {"GeometryGamess", GABEDIT_STOCK_GAMESS, N_("Geometry Ga_mess")}, {"GeometryGamessFirst", GABEDIT_STOCK_GAMESS, N_("Read the _first geometry from a Gamess output log file"), NULL, "Read the first geometry from a Gamess output file", G_CALLBACK (activate_action) }, {"GeometryGamessLast", GABEDIT_STOCK_GAMESS, N_("Read the _last geometry from a Gamess output log file"), NULL, "Read the last geometry from a Gamess output file", G_CALLBACK (activate_action) }, {"GeometryGaussian", GABEDIT_STOCK_GAUSSIAN, N_("Geometry _Gaussian")}, {"GeometryGaussianFirst", GABEDIT_STOCK_GAUSSIAN, N_("Read the _first geometry from a gaussian log file"), NULL, "Read the first geometry from a gaussian log file", G_CALLBACK (activate_action) }, {"GeometryGaussianLast", GABEDIT_STOCK_GAUSSIAN, N_("Read the _last geometry from a gaussian file"), NULL, "Read the last geometry from a gaussian log file", G_CALLBACK (activate_action) }, {"GeometryGaussianFChk", GABEDIT_STOCK_GAUSSIAN, N_("Read the geometry from a gaussian fchk file"), NULL, "Read the geometry from a gaussian fchk file", G_CALLBACK (activate_action) }, {"GeometryMolcas", GABEDIT_STOCK_MOLCAS, N_("Geometry Mol_cas")}, {"GeometryMolcasFirst", GABEDIT_STOCK_MOLCAS, N_("Read the _first geometry from a molcas output file"), NULL, "Read the first geometry from a molcas output file", G_CALLBACK (activate_action) }, {"GeometryMolcasLast", GABEDIT_STOCK_MOLCAS, N_("Read the _last geometry from a molcas output file"), NULL, "Read the last geometry from a molcas output file", G_CALLBACK (activate_action) }, {"GeometryMolpro", GABEDIT_STOCK_MOLPRO, N_("Geometry Mol_pro")}, {"GeometryMolproFirst", GABEDIT_STOCK_MOLPRO, N_("Read the _first geometry from a molpro output file"), NULL, "Read the first geometry from a molpro output file", G_CALLBACK (activate_action) }, {"GeometryMolproLast", GABEDIT_STOCK_MOLPRO, N_("Read the _last geometry from a molpro output file"), NULL, "Read the last geometry from a molpro output file", G_CALLBACK (activate_action) }, {"GeometryMopac", GABEDIT_STOCK_MOPAC, N_("Geometry _Mopac")}, {"GeometryMopacOutFirst", GABEDIT_STOCK_MOPAC, N_("Read the _first geometry from a Mopac output file"), NULL, "Read the first geometry from a Mopac output file", G_CALLBACK (activate_action) }, {"GeometryMopacOutLast", GABEDIT_STOCK_MOPAC, N_("Read the _last geometry from a Mopac output file"), NULL, "Read the last geometry from a Mopac-Chem output file", G_CALLBACK (activate_action) }, {"GeometryMopacAuxFirst", GABEDIT_STOCK_MOPAC, N_("Read the _first geometry from a Mopac aux file"), NULL, "Read the first geometry from a Mopac aux file", G_CALLBACK (activate_action) }, {"GeometryMopacAuxLast", GABEDIT_STOCK_MOPAC, N_("Read the _last geometry from a Mopac aux file"), NULL, "Read the last geometry from a Mopac-Chem aux file", G_CALLBACK (activate_action) }, {"GeometryMPQC", GABEDIT_STOCK_MPQC, N_("Geometry MP_QC")}, {"GeometryMPQCFirst", GABEDIT_STOCK_MPQC, N_("Read the _first geometry from a MPQC output file"), NULL, "Read the first geometry from a MPQC output file", G_CALLBACK (activate_action) }, {"GeometryMPQCLast", GABEDIT_STOCK_MPQC, N_("Read the _last geometry from a MPQC output file"), NULL, "Read the last geometry from a MPQC output file", G_CALLBACK (activate_action) }, {"GeometryOrca", GABEDIT_STOCK_ORCA, N_("Geometry _Orca")}, {"GeometryOrcaFirst", GABEDIT_STOCK_ORCA, N_("Read the _first geometry from a Orca output file"), NULL, "Read the first geometry from a Orca output file", G_CALLBACK (activate_action) }, {"GeometryOrcaLast", GABEDIT_STOCK_ORCA, N_("Read the _last geometry from a ORCA output file"), NULL, "Read the last geometry from a Orca output file", G_CALLBACK (activate_action) }, {"GeometryOrcaHessian", GABEDIT_STOCK_ORCA, N_("Read the geometry from a _hessian a ORCA output file"), NULL, "Read the last geometry from a Orca output file", G_CALLBACK (activate_action) }, {"GeometryFireFly", GABEDIT_STOCK_FIREFLY, N_("Geometry _FireFly")}, {"GeometryFireFlyFirst", GABEDIT_STOCK_FIREFLY, N_("Read the _first geometry from a FireFly output log file"), NULL, "Read the first geometry from a FireFly output file", G_CALLBACK (activate_action) }, {"GeometryFireFlyLast", GABEDIT_STOCK_FIREFLY, N_("Read the _last geometry from a FireFly output log file"), NULL, "Read the last geometry from a FireFly output file", G_CALLBACK (activate_action) }, {"GeometryNWChem", GABEDIT_STOCK_NWCHEM, N_("Geometry _NWChem")}, {"GeometryNWChemFirst", GABEDIT_STOCK_NWCHEM, N_("Read the _first geometry from a NWChem output file"), NULL, "Read the first geometry from a _NWChem output file", G_CALLBACK (activate_action) }, {"GeometryNWChemLast", GABEDIT_STOCK_NWCHEM, N_("Read the _last geometry from a _NWChem output file"), NULL, "Read the last geometry from a _NWChem output file", G_CALLBACK (activate_action) }, {"GeometryPsicode", GABEDIT_STOCK_PSICODE, N_("Geometry _Psicode")}, {"GeometryPsicodeFirst", GABEDIT_STOCK_PSICODE, N_("Read the _first geometry from a Psicode output file"), NULL, "Read the first geometry from a _Psicode output file", G_CALLBACK (activate_action) }, {"GeometryPsicodeLast", GABEDIT_STOCK_PSICODE, N_("Read the _last geometry from a _Psicode output file"), NULL, "Read the last geometry from a _Psicode output file", G_CALLBACK (activate_action) }, {"GeometryNBO", GABEDIT_STOCK_NBO, N_("Read from a _NBO file (.31)"), NULL, "Read the geometry from a NBO file(.31)", G_CALLBACK (activate_action) }, {"GeometryQChem", GABEDIT_STOCK_QCHEM, N_("Geometry Q-_Chem")}, {"GeometryQChemFirst", GABEDIT_STOCK_QCHEM, N_("Read the _first geometry from a Q-Chem output file"), NULL, "Read the first geometry from a Q-Chem output file", G_CALLBACK (activate_action) }, {"GeometryQChemLast", GABEDIT_STOCK_QCHEM, N_("Read the _last geometry from a Q-Chem output file"), NULL, "Read the last geometry from a Q-Chem output file", G_CALLBACK (activate_action) }, {"GeometryGabedit", GABEDIT_STOCK_GABEDIT, N_("Read from a G_abedit file"), NULL, "Read the geometry from a Gabedit file", G_CALLBACK (activate_action) }, {"GeometryMolden", GABEDIT_STOCK_MOLDEN, N_("Read from a Mol_den file"), NULL, "Read the from a Molden file", G_CALLBACK (activate_action) }, {"Orbitals", NULL, N_("_Orbitals")}, {"OrbitalsAuto", NULL, N_("Read geometry and orbitals (_Auto)"), NULL, "Read geometry and orbitals from a Gamess output file", G_CALLBACK (activate_action) }, /* {"OrbitalsDalton", GABEDIT_STOCK_DALTON, "Read geometry and orbitals from a _Dalton output file", NULL, "Read geometry and orbitals from a Dalton output file", G_CALLBACK (activate_action) }, */ {"OrbitalsGamess", GABEDIT_STOCK_GAMESS, N_("Read geometry and orbitals from a _Gamess output file"), NULL, "Read geometry and orbitals from a Gamess output file", G_CALLBACK (activate_action) }, {"OrbitalsGaussian", GABEDIT_STOCK_GAUSSIAN, N_("Read geometry and orbitals from a _Gaussian log file"), NULL, "Read geometry and orbitals from a Gaussian log file", G_CALLBACK (activate_action) }, {"OrbitalsGaussianFChk", GABEDIT_STOCK_GAUSSIAN, N_("Read geometry and orbitals from a _Gaussian fchk file"), NULL, "Read geometry and orbitals from a Gaussian fchk file", G_CALLBACK (activate_action) }, {"OrbitalsMolpro", GABEDIT_STOCK_MOLPRO, N_("Read geometry and orbitals from a Mol_pro output file"), NULL, "Read geometry and orbitals from a Molpro output file", G_CALLBACK (activate_action) }, {"OrbitalsOrca", GABEDIT_STOCK_ORCA, N_("Read geometry and orbitals from a _Orca output file"), NULL, "Read geometry and orbitals from a Orca output files", G_CALLBACK (activate_action) }, {"OrbitalsOrca2mkl", GABEDIT_STOCK_ORCA, N_("Read geometry and orbitals from a _Orca files using orca_2mkl"), NULL, "Read geometry and orbitals from a Orca output files", G_CALLBACK (activate_action) }, {"OrbitalsFireFly", GABEDIT_STOCK_FIREFLY, N_("Read geometry and orbitals from a _FireFly output file"), NULL, "Read geometry and orbitals from a FireFly output file", G_CALLBACK (activate_action) }, {"OrbitalsNWChem", GABEDIT_STOCK_NWCHEM, N_("Read geometry and orbitals from a _NWChem output file"), NULL, "Read geometry and orbitals from a NWChem output file", G_CALLBACK (activate_action) }, {"OrbitalsNBO", GABEDIT_STOCK_NBO, N_("Read geometry and orbitals from a _NBO output file"), NULL, "Read geometry and orbitals from a NBO output file", G_CALLBACK (activate_action) }, {"OrbitalsQChem", GABEDIT_STOCK_QCHEM, N_("Read geometry and orbitals from a Q-_Chem output file"), NULL, "Read geometry and orbitals from a Q-Chem output file", G_CALLBACK (activate_action) }, {"OrbitalsMopac", GABEDIT_STOCK_MOPAC, N_("Read geometry and orbitals from a _Mopac aux file"), NULL, "Read geometry and orbitals from a Mopac aux file", G_CALLBACK (activate_action) }, {"OrbitalsGabeditRead", GABEDIT_STOCK_GABEDIT, N_("Read geometry and orbitals from a G_abedit file"), NULL, "Read geometry and orbitals from a Gabedit file", G_CALLBACK (activate_action) }, {"OrbitalsMolden", GABEDIT_STOCK_MOLDEN, N_("Read geometry and orbitals from a Mol_den file"), NULL, "Read geometry and orbitals from a Molden file", G_CALLBACK (activate_action) }, {"OrbitalsGabeditSave", GABEDIT_STOCK_SAVE, N_("Save in a G_abedit file"), NULL, "Save in Gabedit file", G_CALLBACK (activate_action) }, {"OrbitalsSelection", GABEDIT_STOCK_SELECT_ALL, N_("_Selection"), NULL, "Select an orbital", G_CALLBACK (activate_action) }, {"OrbitalsCapture", GABEDIT_STOCK_SELECT_ALL, N_("_Slideshow"), NULL, "Slideshow", G_CALLBACK (activate_action) }, {"OrbitalsCoulomb", NULL, N_("_Coulomb integral"), NULL, "Coulomb", G_CALLBACK (activate_action) }, {"OrbitalsTransition", NULL, N_("_Transition matrix elements"), NULL, "TM", G_CALLBACK (activate_action) }, {"OrbitalsSpatialOverlapIIJJ", NULL, N_("_Spatial overlap matrix "), NULL, "TM", G_CALLBACK (activate_action) }, {"OrbitalsSpatialOverlapIJ", NULL, N_("_Spatial overlap matrix <|i| | |j| > "), NULL, "TM", G_CALLBACK (activate_action) }, {"OrbitalsLambdaDiagnostic", NULL, N_("_Lambda diagnostic "), NULL, "TM", G_CALLBACK (activate_action) }, {"OrbitalsOverlap", NULL, N_("Compute _overlap matrix"), NULL, "Overlap", G_CALLBACK (activate_action) }, {"MullikenCharges", NULL, N_("Compute _Mulliken charges"), NULL, "Mulliken", G_CALLBACK (activate_action) }, {"BondOrder", NULL, N_("Compute _Bond orders"), NULL, "Bond orders", G_CALLBACK (activate_action) }, {"Cube", NULL, N_("_Cube&Grid")}, {"CubeLoadGaussian", GABEDIT_STOCK_GAUSSIAN, N_("Load _Gaussian cube")}, {"CubeLoadGaussianOrbitals", NULL, N_("_Orbitals file"), NULL, "Read cube from a Gaussian cube orbitals file", G_CALLBACK (activate_action) }, {"CubeLoadGaussianDensity", NULL, N_("_Density only file"), NULL, "Read a Gaussian cube file contain density only", G_CALLBACK (activate_action) }, {"CubeLoadGaussianDensityGradient", NULL, N_("Density and _Gradient file"), NULL, "Read a Gaussian cube file contain density and gradient", G_CALLBACK (activate_action) }, {"CubeLoadGaussianLaplacian", NULL, N_("_Laplacian file"), NULL, "Read a Gaussian cube file contain laplacian", G_CALLBACK (activate_action) }, {"CubeLoadGaussianNormGradient", NULL, N_("_Norm gradient file"), NULL, "Read a Gaussian cube file contain the norm of gradient", G_CALLBACK (activate_action) }, {"CubeLoadGaussianPotential", NULL, N_("_Potential file"), NULL, "Read a Gaussian cube file contain a potential", G_CALLBACK (activate_action) }, {"CubeLoadMolpro", GABEDIT_STOCK_MOLPRO, N_("Load Mol_pro cube")}, {"CubeLoadMolproOrbitals", NULL, N_("Load Molpro cube _orbitals")}, {"CubeLoadMolproOrbitalsOne", NULL, N_("_One Orbitale"), NULL, "Read a Molpro cube file contain one orbital", G_CALLBACK (activate_action) }, {"CubeLoadMolproOrbitalsSeveral", NULL, N_("_Several Orbitals"), NULL, "Read a Molpro cube file contain several orbitals", G_CALLBACK (activate_action) }, {"CubeLoadMolproDensityOne", NULL, N_("Contain the _Density only"), NULL, "Read a Molpro cube file contain the density", G_CALLBACK (activate_action) }, {"CubeLoadMolproDensityGradient", NULL, N_("Contain the Density and the _Gradient"), NULL, "Read a Molpro cube file contain the density and the gradient of density", G_CALLBACK (activate_action) }, {"CubeLoadMolproDensityGradientLaplacian", NULL, N_("Density , Gradient and _Laplacian file")}, {"CubeLoadMolproDensityGradientLaplacianDensity", NULL, N_("Load _Density"), NULL, "Read the density from a Molpro cube file contain density, gradient and laplacian", G_CALLBACK (activate_action) }, {"CubeLoadMolproDensityGradientLaplacianLaplacian", NULL, N_("Load _Laplacian"), NULL, "Read the laplacian from a Molpro cube file contain density, gradient and laplacian", G_CALLBACK (activate_action) }, {"CubeLoadAdf", GABEDIT_STOCK_ADF, N_("Load _Adf tape 41")}, {"CubeLoadAdfOrbitals", NULL, N_("_Orbitals"), NULL, "Read the orbitals from a ADF tape 41 file", G_CALLBACK (activate_action) }, {"CubeLoadAdfDensity", NULL, N_("_Density"), NULL, "Read the density from a ADF tape 41 file", G_CALLBACK (activate_action) }, {"CubeLoadMolcas", GABEDIT_STOCK_MOLCAS, N_("Load Mol_cas")}, {"CubeLoadMolcasGridOrbitals", NULL, N_("_Orbitals"), NULL, "Read the orbitals from a Grid ascii file", G_CALLBACK (activate_action) }, {"CubeLoadMolcasGridDensity", NULL, N_("_Density"), NULL, "Read the density from a Grid ascii file", G_CALLBACK (activate_action) }, {"CubeLoadQChem", GABEDIT_STOCK_QCHEM, N_("Load _Q-Chem grid file"), NULL, "Read a Q-Chem cube file", G_CALLBACK (activate_action) }, {"CubeLoadDXRead",NULL, N_("Load _DX cube file"), NULL, "Read a DX grid file", G_CALLBACK (activate_action) }, {"CubeLoadGabeditRead", GABEDIT_STOCK_GABEDIT, N_("Load G_abedit cube file"), NULL, "Read a Gabedit cube file", G_CALLBACK (activate_action) }, {"CubeLoadGabeditSave", GABEDIT_STOCK_SAVE, N_("_Save"), NULL, "Save in a Gabedit cube file", G_CALLBACK (activate_action) }, {"CubeComputeLaplacian", NULL, N_("Compute _laplacian"), NULL, "Compute laplacian", G_CALLBACK (activate_action) }, {"CubeComputeNormGradient", NULL, N_("Compute the norm of the _gradient"), NULL, "Compute the norm of the _gradient", G_CALLBACK (activate_action) }, {"CubeSignLambda2Density", NULL, N_("Multiply by the sign of the _middle eigenvalue of hessian"), NULL, "Compute sign _lambda2 * grid", G_CALLBACK (activate_action) }, {"CubeSubtract", NULL, N_("Su_btract"), NULL, "Subtract", G_CALLBACK (activate_action) }, {"CubeScale", NULL, N_("Scal_e"), NULL, "Scale", G_CALLBACK (activate_action) }, {"CubeSquare", NULL, N_("S_quare"), NULL, "Square", G_CALLBACK (activate_action) }, {"CubeRestriction", NULL, N_("_Restriction"), NULL, "Restriction", G_CALLBACK (activate_action) }, {"CubeCut", NULL, N_("Remove half space")}, {"CubeCutLeft0", NULL, N_("_left, direction 1"), NULL, "CubeCutLeft0", G_CALLBACK (activate_action) }, {"CubeCutLeft1", NULL, N_("_left, direction 2"), NULL, "CubeCutLeft1", G_CALLBACK (activate_action) }, {"CubeCutLeft2", NULL, N_("_left, direction 3"), NULL, "CubeCutLeft2", G_CALLBACK (activate_action) }, {"CubeCutRight0", NULL, N_("right, ditection _1"), NULL, "CubeCutRight0", G_CALLBACK (activate_action) }, {"CubeCutRight1", NULL, N_("right, ditection _2"), NULL, "CubeCutRight1", G_CALLBACK (activate_action) }, {"CubeCutRight2", NULL, N_("right, ditection _3"), NULL, "CubeCutRight2", G_CALLBACK (activate_action) }, {"CubeAIMChargesNearGrid", NULL, N_("AIM Charges[W. Tang et al J. Phys. Cond.. Matt. 21, 084204(09)]"), NULL, "AIM Charges", G_CALLBACK (activate_action) }, {"CubeAIMChargesOnGrid", NULL, N_("AIM Charges[OnGrid]"), NULL, "AIM Charges on grid", G_CALLBACK (activate_action) }, {"CubeColorMapping", NULL, N_("_Color Mapping"), NULL, "Color Mapping", G_CALLBACK (activate_action) }, {"ComputeIntegralSpace", NULL, N_("_Compute integral in all space"), NULL, "ComputeIntegralSpace", G_CALLBACK (activate_action) }, {"Density", NULL, N_("_Density")}, {"DensityElectronic", NULL, N_("_Electronic"), NULL, "Compute and draw electronic density", G_CALLBACK (activate_action) }, {"DensityBonds", NULL, N_("_Bonds"), NULL, "Compute and draw bonds (electronic-atomics)", G_CALLBACK (activate_action) }, {"DensitySpin", NULL, N_("_Spin"), NULL, "Compute and draw spin density", G_CALLBACK (activate_action) }, {"DensityAtomics", NULL, N_("_Atomic"), NULL, "Compute and draw electronic density of atoms", G_CALLBACK (activate_action) }, {"ELF", NULL, N_("_ELF")}, {"ELFBecke", NULL, N_("Compute _Becke Electron Localization Function[see JCP,92(1990)5397]"), NULL, "Compute Becke Electron Localization Function", G_CALLBACK (activate_action) }, {"ELFSavin", NULL, N_("Compute _Savin Electron Localization Function[see Can.J.Chem.,74(1996)1088]"), NULL, "Compute Savin Electron Localization Function", G_CALLBACK (activate_action) }, {"ELFSavinAttractors", NULL, N_("Compute _Savin ELF + Attractors"), NULL, "Compute Savin ELF+Attractors", G_CALLBACK (activate_action) }, {"Fukui", NULL, N_("_Fukui")}, {"FEDElectrophilic", NULL, N_("Compute Frontier MO _electrophilic susceptibility"), NULL, "Compute Frontier MO electrophilic susceptibility", G_CALLBACK (activate_action) }, {"FEDNucleophilic", NULL, N_("Compute Frontier MO _nucleophilic susceptibility"), NULL, "Compute Frontier MO nucleophilic susceptibility", G_CALLBACK (activate_action) }, {"FEDRadical", NULL, N_("Compute Frontier MO _radical susceptibility"), NULL, "Compute Frontier MO radical susceptibility", G_CALLBACK (activate_action) }, {"FEDSetAlpha", NULL, N_("Set the value of _alpha parameter"), NULL, "Set the value of _alpha parameter", G_CALLBACK (activate_action) }, {"NCI", NULL, N_("_NCI")}, {"NCI2D", NULL, N_("_NCI 2D analysis"), NULL, "NCI 2D analysis", G_CALLBACK (activate_action) }, {"NCISurface", NULL, N_("Compute _NCI surface"), NULL, "Compute NCI from density grid", G_CALLBACK (activate_action) }, {"NCIHelp", NULL, N_("_Refs for non-covalent interactions (NCI) index analysis"), NULL, "help nci", G_CALLBACK (activate_action) }, {"SAS", NULL, N_("_SAS")}, {"SASCompute", NULL, N_("_Solvent Accessible Surface"), NULL, "Compute and draw Solvent Accessible Surface", G_CALLBACK (activate_action) }, {"SASMappCompute", NULL, N_("Solvent Accessible Surface _mapped by MEP from charges"), NULL, "Compute and draw Solvent Accessible Surface mapped by MEP from charges", G_CALLBACK (activate_action) }, {"MEP", NULL, N_("_MEP")}, {"MEPMapping", NULL, N_("_Mapped the current grid")}, {"MEPOrbitals", NULL, N_("Using _Molecular Orbitals")}, {"MEPGrid", NULL, N_("Using Current _Grid")}, {"MEPMappingExact", NULL, N_("MEP Exact (very slow)"), NULL, "MEP Exact(very slow)", G_CALLBACK (activate_action) }, {"MEPMappingMG", NULL, N_("MEP by solving Poisson Equation using _Multigrid method"), NULL, "MEP by solving Poisson Equation using Multigrid method", G_CALLBACK (activate_action) }, {"MEPMappingCG", NULL, N_("MEP by solving Poisson Equation using _Congugate Gradient method"), NULL, "MEP by solving Poisson Equation using Congugate Gradient method", G_CALLBACK (activate_action) }, {"MEPMappingMultipol", NULL, N_("MEP using Multipole"), NULL, "MEP using Multipole", G_CALLBACK (activate_action) }, {"MEPMappingCharges", NULL, N_("MEP using partial charges"), NULL, "MEP using partial charges", G_CALLBACK (activate_action) }, {"FEDElectrophilicMapping", NULL, N_("Mapping by the _electrophilic susceptibility"), NULL, "Mapping by the _electrophilic susceptibility", G_CALLBACK (activate_action) }, {"FEDNucleophilicMapping", NULL, N_("Mapping by the _nucleophilic susceptibility"), NULL, "Mapping by the _nucleophilic susceptibility", G_CALLBACK (activate_action) }, {"FEDRadicalMapping", NULL, N_("Mapping by the _radical susceptibility"), NULL, "Mapping by the _radical susceptibility", G_CALLBACK (activate_action) }, {"MEPOrbitalsExact", NULL, N_("MEP exact(very slow)"), NULL, "MEP exact (very slow)", G_CALLBACK (activate_action) }, {"MEPOrbitalsMG", NULL, N_("MEP by solving Poisson Equation using _Multigrid method"), NULL, "MEP by solving Poisson Equation using Multigrid method", G_CALLBACK (activate_action) }, {"MEPOrbitalsCG", NULL, N_("MEP by solving Poisson Equation using _Congugate Gradient method"), NULL, "MEP by solving Poisson Equation using Congugate Gradient method", G_CALLBACK (activate_action) }, {"MEPOrbitalsMultipol", NULL, N_("MEP using Multipole"), NULL, "MEP using Multipole", G_CALLBACK (activate_action) }, {"MEPGridExact", NULL, N_("MEP Exact (very slow)"), NULL, "MEP Exact(very slow)", G_CALLBACK (activate_action) }, {"MEPGridMG", NULL, N_("MEP by solving Poisson Equation using _Multigrid method"), NULL, "MEP by solving Poisson Equation using Multigrid method", G_CALLBACK (activate_action) }, {"MEPGridCG", NULL, N_("MEP by solving Poisson Equation using _Congugate Gradient method"), NULL, "MEP by solving Poisson Equation using Congugate Gradient method", G_CALLBACK (activate_action) }, {"MEPGridMultipol", NULL, N_("MEP using Multipole"), NULL, "MEP using Multipole", G_CALLBACK (activate_action) }, {"MEPFromCharges", NULL, N_("MEP using partial _charges"), NULL, "MEP using partial charges", G_CALLBACK (activate_action) }, {"Contours", NULL, N_("Co_ntours")}, {"ContoursFirst", NULL, N_("plane perpendicular to the _first direction"), NULL, "contours in a plane perpendicular to first direction", G_CALLBACK (activate_action) }, {"ContoursSecond", NULL, N_("plane perpendicular to the _second direction"), NULL, "contours in a plane perpendicular to second direction", G_CALLBACK (activate_action) }, {"ContoursThird", NULL, N_("plane perpendicular to the _third direction"), NULL, "contours in a plane perpendicular to the third direction", G_CALLBACK (activate_action) }, {"ContoursOther", NULL, N_("_Others plane"), NULL, "contours in a any other plane", G_CALLBACK (activate_action) }, {"ContoursIsoSurface", NULL, N_("Iso _surface as contours"), NULL, "Iso-surface as contours", G_CALLBACK (activate_action) }, {"ContoursDelete", NULL, N_("_Delete all"), NULL, "delete all contours", G_CALLBACK (activate_action) }, {"PlanesColorCoded", NULL, N_("_Planes colorcoded")}, {"PlanesColorCodedFirst", NULL, N_("plane perpendicular to the _first direction"), NULL, "Color-coded plane, plane perpendicular to first direction", G_CALLBACK (activate_action) }, {"PlanesColorCodedSecond", NULL, N_("plane perpendicular to the _second direction"), NULL, "Color-coded plane, plane perpendicular to second direction", G_CALLBACK (activate_action) }, {"PlanesColorCodedThird", NULL, N_("plane perpendicular to the _third direction"), NULL, "Color-coded plane, plane perpendicular to third direction", G_CALLBACK (activate_action) }, {"PlanesColorCodedOther", NULL, N_("_Other plane"), NULL, "any other Color-coded plane", G_CALLBACK (activate_action) }, {"PlanesColorCodedDelete", NULL, N_("_Delete all"), NULL, "delete all color-coded planes", G_CALLBACK (activate_action) }, {"Surfaces", NULL, N_("_Surfaces")}, {"SurfacesResetIsovalue", NULL, N_("re_set isovalue"), NULL, "re_set the isovalue for the last surface", G_CALLBACK (activate_action) }, {"SurfacesNew", NULL, N_("_new"), NULL, "new surface", G_CALLBACK (activate_action) }, {"SurfacesDelete", NULL, N_("_delete all"), NULL, "delete all surfaces", G_CALLBACK (activate_action) }, {"Rings", NULL, N_("_Rings")}, {"Rings3", NULL, N_("Find and show _triangles"), NULL, "Find and show triangles", G_CALLBACK (activate_action) }, {"Rings4", NULL, N_("Find and show _squares & rectangles"), NULL, "Find and show squares & rectangles", G_CALLBACK (activate_action) }, {"Rings5", NULL, N_("Find and show _pentagons"), NULL, "Find and show pentagons", G_CALLBACK (activate_action) }, {"Rings6", NULL, N_("Find and show he_xagons"), NULL, "Find and show hexagons", G_CALLBACK (activate_action) }, {"Rings7", NULL, N_("Find and show he_ptagons"), NULL, "Find and show heptagons", G_CALLBACK (activate_action) }, {"Rings8", NULL, N_("Find and show _octagons"), NULL, "Find and show octagons", G_CALLBACK (activate_action) }, {"RingsDelete", NULL, N_("_delete all"), NULL, "delete all rings", G_CALLBACK (activate_action) }, {"ConformerType", NULL, N_("Find and show conformer Type with hexagones"), NULL, "Find and show conformer type", G_CALLBACK (activate_action) }, {"Render", NULL, N_("_Render")}, {"RenderGeometry", NULL, N_("_Geometry")}, {"RenderLabel", NULL, N_("Labe_l")}, {"RenderSurface", NULL, N_("_Surface")}, {"RenderSurfacePositive", NULL, N_("_Positive surface")}, {"RenderSurfaceNegative", NULL, N_("_Negative surface")}, {"RenderBackGround", NULL, N_("_BackGround")}, {"RenderLight", NULL, N_("_Light")}, {"RenderOptimal", GABEDIT_STOCK_O, N_("_Optimal"), NULL, "Optimal camera", G_CALLBACK (activate_action) }, {"Set", NULL, N_("_Set")}, {"Operation", NULL, N_("_Operation")}, {"SetCamera", GABEDIT_STOCK_CAMERA, N_("_Camera"), NULL, "set the camera", G_CALLBACK (activate_action) }, {"SetLigthPositions", NULL, N_("_Ligth positions"), NULL, "set Ligth positions", G_CALLBACK (activate_action) }, {"SetSurfaceColors", NULL, N_("_Surface colors"), NULL, "set surface colors", G_CALLBACK (activate_action) }, {"SetDipole", NULL, N_("_Dipole"), NULL, "set dipole", G_CALLBACK (activate_action) }, {"SetDipoleDensity", NULL, N_("_Compute Dipole from density"), NULL, "Compute Dipole from density", G_CALLBACK (activate_action) }, {"SetDipoleCT", NULL, N_("_Compute Charge transfert Dipole from density difference"), NULL, "Compute CT Dipole from density difference", G_CALLBACK (activate_action) }, {"SetAllBonds", NULL, N_("Compute all _bonds"), NULL, "Compute all bonds", G_CALLBACK (activate_action) }, {"SetMultipleBonds", NULL, N_("Compute _multiple bonds"), NULL, "Compute multiple bonds", G_CALLBACK (activate_action) }, {"SetPropertiesOfAtoms", NULL, N_("P_roperties of atoms"), NULL, "set the properties of atoms", G_CALLBACK (activate_action) }, {"SetHydrogenBondsParameters", NULL, N_("_Hydrogen bonds parameters"), NULL, "set the Hydrogen bonds parameters", G_CALLBACK (activate_action) }, {"SetXYZAxesProperties", NULL, N_("XYZ _Axes properties"), NULL, "set the properties of the XYZ Axes", G_CALLBACK (activate_action) }, {"SetPrincipalAxesProperties", NULL, N_("_Principal Axes properties"), NULL, "set the properties of the principal Axes", G_CALLBACK (activate_action) }, {"SetPovrayBackGround", NULL, N_("_Povray background"), NULL, "set the background for the Povray file", G_CALLBACK (activate_action) }, {"SetColorMap", NULL, N_("Color _mapping"), NULL, "set the color mapping options", G_CALLBACK (activate_action) }, {"SetTitle", NULL, "_Title", NULL, N_("Set title"), G_CALLBACK (activate_action) }, {"SetScaleBallStick", NULL, N_("_Scale ball&stick"), NULL, "Scale ball&stick", G_CALLBACK (activate_action) }, {"SetOpacity", NULL, N_("_Opacity"), NULL, "Set opacity", G_CALLBACK (activate_action) }, {"ScreenCapture", NULL, N_("Screen Ca_pture")}, {"ScreenCaptureJPG", NULL, N_("_JPG format"), NULL, "save image in a JPG file", G_CALLBACK (activate_action) }, {"ScreenCapturePPM", NULL, N_("_PPM format"), NULL, "save image in a PPM file", G_CALLBACK (activate_action) }, {"ScreenCaptureBMP", NULL, N_("_BMP format"), NULL, "save image in a BMP file", G_CALLBACK (activate_action) }, {"ScreenCapturePNG", NULL, N_("_PNG format"), NULL, "save image in a PNG file", G_CALLBACK (activate_action) }, {"ScreenCapturePNGWithoutBackGround", NULL, N_("_PNG format(tansparent background)"), NULL, "save image in a PNG file without background", G_CALLBACK (activate_action) }, {"ScreenCaptureTIF", NULL, N_("_TIF format"), NULL, "save image in a tif file", G_CALLBACK (activate_action) }, {"ScreenCapturePS", NULL, N_("P_S format"), NULL, "save image in a PS file", G_CALLBACK (activate_action) }, {"ScreenCaptureClipBoard", NULL, N_("_Copy to clipboard (Ctrl C or Alt C)"), NULL, "copy to clipboard", G_CALLBACK (activate_action) }, {"ScreenCaptureClipBoardWithoutBackground", NULL, N_("Copy to _clipboard (Without background)"), NULL, "copy to clipboard", G_CALLBACK (activate_action) }, {"Export", NULL, N_("_Export")}, {"ExportPovray", NULL, N_("_Povray"), NULL, "export in a povray file", G_CALLBACK (activate_action) }, {"ExportEPS", NULL, N_("_EPS"), NULL, "export in a eps file", G_CALLBACK (activate_action) }, {"ExportPS", NULL, N_("_PS"), NULL, "export in a ps file", G_CALLBACK (activate_action) }, {"ExportPDF", NULL, N_("_PDF"), NULL, "export in a pdf file", G_CALLBACK (activate_action) }, {"ExportSVG", NULL, N_("_SVG"), NULL, "export in a svg file", G_CALLBACK (activate_action) }, {"Animation", NULL, N_("_Animation")}, {"AnimationVibration", NULL, N_("_Vibration"), NULL, "Vibration", G_CALLBACK (activate_action) }, {"AnimationGeometryConvergence", NULL, N_("_several geometries (Convergence/IRC)"), NULL, "several geometries (Convergence/IRC)", G_CALLBACK (activate_action) }, {"AnimationGrids", NULL, N_("_several grids"), NULL, "several grids", G_CALLBACK (activate_action) }, {"AnimationMD", NULL, N_("_Molecular dynamics trajectory"), NULL, "Molecular dynamics trajectory", G_CALLBACK (activate_action) }, {"AnimationRotation", NULL, N_("_Rotation"), NULL, "Animation of the rotation", G_CALLBACK (activate_action) }, {"AnimationContours", NULL, N_("_Contours"), NULL, "Animation of the contours", G_CALLBACK (activate_action) }, {"AnimationPlanesColorcoded", NULL, N_("_Planes colorcoded"), NULL, "Animation of the color-coded planes", G_CALLBACK (activate_action) }, {"AnimationIsosurface", NULL, N_("_Isosurface"), NULL, "Animation of the surfaces", G_CALLBACK (activate_action) }, {"View", NULL, N_("_View")}, {"Close", GABEDIT_STOCK_CLOSE, N_("_Close"), NULL, "Close this window", G_CALLBACK (activate_action) }, }; static guint numberOfGtkActionEntries = G_N_ELEMENTS (gtkActionEntries); /*********************************************************************************************************************/ static void toggle_action (GtkAction *action) { const gchar *name = gtk_action_get_name (action); if(!strcmp(name,"RenderSurfaceTransparency")) { if(TypeBlend==GABEDIT_BLEND_YES) TypeBlend = GABEDIT_BLEND_NO; else TypeBlend = GABEDIT_BLEND_YES; RebuildSurf = TRUE; glarea_rafresh(GLArea); } else if(!strcmp(name,"RenderLightOnOff1")) { set_light_on_off(0); glarea_rafresh(GLArea); } else if(!strcmp(name,"RenderLightOnOff2")) { set_light_on_off(1); glarea_rafresh(GLArea); } else if(!strcmp(name,"RenderLightOnOff3")) { set_light_on_off(2); glarea_rafresh(GLArea); } else if(!strcmp(name,"RenderDipole")) { ShowDipoleOrb = !ShowDipoleOrb; glarea_rafresh(GLArea); } else if(!strcmp(name,"RenderBox")) { setShowBox (!getShowBox()); RebuildGeom = TRUE; glarea_rafresh(GLArea); } else if(!strcmp(name,"ShowOnlyOneSurface")) { setShowOneSurface(!getShowOneSurface()); glarea_rafresh(GLArea); } else if(!strcmp(name,"RenderHydrogenBonds")) { ShowHBondOrb = !ShowHBondOrb; buildHBonds(); RebuildGeom = TRUE; glarea_rafresh(GLArea); } else if(!strcmp(name,"RenderHydrogenAtoms")) { ShowHAtomOrb = !ShowHAtomOrb; RebuildGeom = TRUE; glarea_rafresh(GLArea); } else if(!strcmp(name,"RenderMultiBonds")) { ShowMultiBondsOrb = !ShowMultiBondsOrb; RebuildGeom = TRUE; glarea_rafresh(GLArea); } else if(!strcmp(name,"RenderXYZAxes")) { if(testShowAxis()) hideAxis(); else showAxis(); glarea_rafresh(GLArea); } else if(!strcmp(name,"RenderPrincipalAxes")) { if(testShowPrincipalAxisGL()) hidePrincipalAxisGL(); else showPrincipalAxisGL(); glarea_rafresh(GLArea); } else if(!strcmp(name,"RenderPerspective")) { gboolean perspective = FALSE; gdouble aspect, zn, zf, zo; get_camera_values(&zn, &zf, &zo, &aspect, &perspective); perspective = !perspective; set_camera_values(zn,zf,zo,perspective); } else if(!strcmp(name , "ShowToolBar")) view_toolbar(); else if(!strcmp(name,"ShowStatusHandleBox")) { gboolean show = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); show_handlebox_status(show); } else if(!strcmp(name,"ShowProgressBar")) { gboolean show = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); show_progress_bar(show); } else if(!strcmp(name,"RenderLabelSymbols")) { gboolean show = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); set_show_symbols(show); glarea_rafresh(GLArea); } else if(!strcmp(name,"RenderLabelNumbers")) { gboolean show = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); set_show_numbers(show); glarea_rafresh(GLArea); } else if(!strcmp(name,"RenderLabelCharges")) { gboolean show = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); set_show_charges(show); glarea_rafresh(GLArea); } else if(!strcmp(name,"RenderLabelDistances")) { gboolean show = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); set_show_distances(show); glarea_rafresh(GLArea); } else if(!strcmp(name,"RenderLabelDipole")) { gboolean show = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); set_show_dipole(show); glarea_rafresh(GLArea); } else if(!strcmp(name,"RenderLabelAxes")) { gboolean show = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); set_show_axes(show); glarea_rafresh(GLArea); } else if(!strcmp(name,"RenderLabelsOrtho")) { gboolean ortho = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); set_labels_ortho(ortho); glarea_rafresh(GLArea); } else if(!strcmp(name , "RingsDeleteNotPlaner")) { gboolean showNotPlaner = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); ringsSetNotPlanar(!showNotPlaner); } else if(!strcmp(name , "RingsRandumColors")) { gboolean randumColors = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); ringsSetRandumColors(randumColors); } else if(!strcmp(name , "ContoursNegativeDotted")) { gboolean dotted = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); set_dotted_negative_contours(dotted); } } /*********************************************************************************************************************/ static GtkToggleActionEntry gtkActionToggleEntries[] = { { "RenderSurfaceTransparency", NULL, N_("_Transparency"), NULL, "render transparency", G_CALLBACK (toggle_action), FALSE }, { "RenderLightOnOff1", NULL, N_("OnOff _1"), NULL, "On/Of the light number 1", G_CALLBACK (toggle_action), TRUE }, { "RenderLightOnOff2", NULL, N_("OnOff _2"), NULL, "On/Of the light number 2", G_CALLBACK (toggle_action), FALSE }, { "RenderLightOnOff3", NULL, N_("OnOff _3"), NULL, "On/Of the light number 3", G_CALLBACK (toggle_action), FALSE }, { "RenderBox", NULL, N_("Show _box"), NULL, "Show box", G_CALLBACK (toggle_action), FALSE }, { "RenderDipole", NULL, N_("Show _dipole"), NULL, "Show dipole", G_CALLBACK (toggle_action), FALSE }, { "RenderHydrogenAtoms", NULL, N_("Show _hydrogen atoms"), NULL, "Show hydrogen atoms", G_CALLBACK (toggle_action), FALSE }, { "RenderHydrogenBonds", NULL, N_("Show _hydrogen bonds"), NULL, "Show hydrogen bonds", G_CALLBACK (toggle_action), FALSE }, { "RenderMultiBonds", NULL, N_("Show double and triple _bonds"), NULL, "Show double and triple bonds", G_CALLBACK (toggle_action), FALSE }, { "RenderXYZAxes", NULL, N_("Show XYZ _Axes"), NULL, "Show XYZ Axes", G_CALLBACK (toggle_action), FALSE }, { "RenderPrincipalAxes", NULL, N_("Show the _principal Axes"), NULL, "Show principal Axes", G_CALLBACK (toggle_action), FALSE }, { "RenderPerspective", GABEDIT_STOCK_PERSPECTIVE, N_("Perspective"), NULL, "Perspective/Orthographic", G_CALLBACK (toggle_action), TRUE}, { "ShowToolBar", NULL, N_("_Show toolbar"), NULL, "show toolbar", G_CALLBACK (toggle_action), TRUE }, { "ShowStatusHandleBox", NULL, N_("_show status handlebox"), NULL, "show status handlebox", G_CALLBACK (toggle_action), TRUE}, { "ShowProgressBar", NULL, N_("_show progress bar"), NULL, "show progress bar", G_CALLBACK (toggle_action), TRUE}, { "RenderLabelSymbols", NULL, N_("show symbo_ls"), NULL, "show symbols", G_CALLBACK (toggle_action), TRUE}, { "RenderLabelNumbers", NULL, N_("show _numbers"), NULL, "show numbers", G_CALLBACK (toggle_action), TRUE}, { "RenderLabelCharges", NULL, N_("show _charges"), NULL, "show charges", G_CALLBACK (toggle_action), TRUE}, { "RenderLabelDistances", NULL, N_("show _distances"), NULL, "show distances", G_CALLBACK (toggle_action), TRUE}, { "RenderLabelDipole", NULL, N_("show _dipole value"), NULL, "show dipole value", G_CALLBACK (toggle_action), TRUE}, { "RenderLabelAxes", NULL, N_("show _axis labels"), NULL, "show axis labels", G_CALLBACK (toggle_action), TRUE}, { "RenderLabelsOrtho", NULL, N_("_orthographic labels"), NULL, "orthographic labels", G_CALLBACK (toggle_action), TRUE}, { "RingsDeleteNotPlaner", NULL, N_("Show ring with not co-_planer atoms"), NULL, "Show ring with not co-planer atoms", G_CALLBACK (toggle_action), TRUE}, { "RingsRandumColors", NULL, N_("_randum colors"), NULL, "randum colors", G_CALLBACK (toggle_action), TRUE}, { "ContoursNegativeDotted", NULL, N_("_dotted contours for negative values"), NULL, "dotted contours for negative values", G_CALLBACK (toggle_action), FALSE}, { "ShowOnlyOneSurface", NULL, N_("Show only _one surface"), NULL, "Show one surface", G_CALLBACK (toggle_action), FALSE }, }; static guint numberOfGtkActionToggleEntries = G_N_ELEMENTS (gtkActionToggleEntries); /*********************************************************************************************************************/ enum { GEOMETRY_STICK, GEOMETRY_BALLSTICK, GEOMETRY_WIREFRAME, GEOMETRY_SPACEFILL, GEOMETRY_NO }; static void render_geometry_radio_action (GtkAction *action) { /* const gchar *name = gtk_action_get_name (action); */ gint value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action)); /* gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)), */ switch(value) { case GEOMETRY_STICK : TypeGeom = GABEDIT_TYPEGEOM_STICK; RebuildGeom = TRUE; glarea_rafresh(GLArea); break; case GEOMETRY_BALLSTICK : TypeGeom = GABEDIT_TYPEGEOM_BALLSTICK; RebuildGeom = TRUE; glarea_rafresh(GLArea); break; case GEOMETRY_WIREFRAME : TypeGeom = GABEDIT_TYPEGEOM_WIREFRAME; RebuildGeom = TRUE; glarea_rafresh(GLArea); break; case GEOMETRY_SPACEFILL : TypeGeom = GABEDIT_TYPEGEOM_SPACE; RebuildGeom = TRUE; glarea_rafresh(GLArea); break; case GEOMETRY_NO : TypeGeom = GABEDIT_TYPEGEOM_NO; glarea_rafresh(GLArea); break; } } /*********************************************************************************************************************/ static GtkRadioActionEntry rendereGeometryEntries[] = { { "RenderGeometryStick", GABEDIT_STOCK_RENDER_STICK, N_("_Stick"), NULL, "render stick", GEOMETRY_STICK }, { "RenderGeometryWireFrame", GABEDIT_STOCK_RENDER_WIREFRAME, N_("_WireFrame"), NULL, "render wireframe", GEOMETRY_WIREFRAME }, { "RenderGeometryBallAndStick", GABEDIT_STOCK_RENDER_BALL_STICK, N_("_Ball&Stick"), NULL, "render Ball&Stick", GEOMETRY_BALLSTICK }, { "RenderGeometrySpaceFill", NULL, N_("Space_Fill"), NULL, "render Space Fill", GEOMETRY_SPACEFILL }, { "RenderGeometryNothing", NULL, N_("_Nothing"), NULL, "hide geometry", GEOMETRY_NO }, }; static guint numberOfRenderGeometryEntries = G_N_ELEMENTS (rendereGeometryEntries); /*********************************************************************************************************************/ enum { SURFACE_POSITIVE_FILL, SURFACE_POSITIVE_WIREFRAME }; /*********************************************************************************************************************/ static void render_surface_positive_radio_action (GtkAction *action) { gint value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action)); switch(value) { case SURFACE_POSITIVE_FILL: TypePosWireFrame = GABEDIT_POS_WIREFRAME_NO; RebuildSurf = TRUE; glarea_rafresh(GLArea); break; case SURFACE_POSITIVE_WIREFRAME: TypePosWireFrame = GABEDIT_POS_WIREFRAME_YES; RebuildSurf = TRUE; glarea_rafresh(GLArea); break; } } /*********************************************************************************************************************/ static GtkRadioActionEntry renderSurfacePositiveEntries[] = { { "RenderSurfacePositiveFill", NULL, N_("_Fill"), NULL, "render fill the positive surface", SURFACE_POSITIVE_FILL }, { "RenderSurfacePositiveWireFrame", NULL, N_("_WireFrame"), NULL, "render wireframe the positive surface", SURFACE_POSITIVE_WIREFRAME }, }; static guint numberOfRenderSurfacePositiveEntrie = G_N_ELEMENTS (renderSurfacePositiveEntries); /*********************************************************************************************************************/ enum { SURFACE_NEGATIVE_FILL, SURFACE_NEGATIVE_WIREFRAME }; static void render_surface_negative_radio_action (GtkAction *action) { gint value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action)); switch(value) { case SURFACE_NEGATIVE_FILL: TypeNegWireFrame = GABEDIT_NEG_WIREFRAME_NO; RebuildSurf = TRUE; glarea_rafresh(GLArea); break; case SURFACE_NEGATIVE_WIREFRAME: TypeNegWireFrame = GABEDIT_NEG_WIREFRAME_YES; RebuildSurf = TRUE; glarea_rafresh(GLArea); break; } } static GtkRadioActionEntry renderSurfaceNegativeEntries[] = { { "RenderSurfaceNegariveFill", NULL, N_("_Fill"), NULL, "render fill the negative surface", SURFACE_NEGATIVE_FILL }, { "RenderSurfaceNegativeWireFrame", NULL, N_("_WireFrame"), NULL, "render wireframe the negative surface", SURFACE_NEGATIVE_WIREFRAME }, }; static guint numberOfRenderSurfaceNegativeEntries = G_N_ELEMENTS (renderSurfaceNegativeEntries); /*********************************************************************************************************************/ enum { SURFACE_POSITIVENEGATIVE, SURFACE_POSITIVE, SURFACE_NEGATIVE, SURFACE_NO }; static void render_surface_radio_action (GtkAction *action) { gint value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action)); switch(value) { case SURFACE_POSITIVENEGATIVE: SurfShow = GABEDIT_SURFSHOW_POSNEG; glarea_rafresh(GLArea); break; case SURFACE_POSITIVE: SurfShow = GABEDIT_SURFSHOW_POSITIVE; glarea_rafresh(GLArea); break; case SURFACE_NEGATIVE: SurfShow = GABEDIT_SURFSHOW_NEGATIVE; glarea_rafresh(GLArea); break; case SURFACE_NO: SurfShow = GABEDIT_SURFSHOW_NO; glarea_rafresh(GLArea); break; } } static GtkRadioActionEntry renderSurfaceEntries[] = { { "RenderSurfacePositiveNegativeShow", NULL, N_("Positive_&Neg_ative"), NULL, "show the Positive&Neg_ative surfaces", SURFACE_POSITIVENEGATIVE }, { "RenderSurfacePositiveShow", NULL, N_("_Positive"), NULL, "show the Positive surface", SURFACE_POSITIVE }, { "RenderSurfaceNegativeShow", NULL, N_("_Negative"), NULL, "show the Neg_ative surfaces", SURFACE_NEGATIVE }, { "RenderSurfaceNothingShow", NULL, N_("N_othing"), NULL, "hide surfaces", SURFACE_NO }, }; static guint numberOfRenderSurfaceEntries = G_N_ELEMENTS (renderSurfaceEntries); /*********************************************************************************************************************/ enum { TEXTURE_NO, TEXTURE_1, TEXTURE_2, TEXTURE_3, }; static void render_surface_texture_radio_action (GtkAction *action) { gint value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action)); switch(value) { case TEXTURE_NO: TypeTexture = GABEDIT_TYPETEXTURE_NONE; RebuildSurf = TRUE; glarea_rafresh(GLArea); break; case TEXTURE_1: TypeTexture = GABEDIT_TYPETEXTURE_1; RebuildSurf = TRUE; glarea_rafresh(GLArea); break; case TEXTURE_2: TypeTexture = GABEDIT_TYPETEXTURE_2; RebuildSurf = TRUE; glarea_rafresh(GLArea); break; case TEXTURE_3: TypeTexture = GABEDIT_TYPETEXTURE_3; RebuildSurf = TRUE; glarea_rafresh(GLArea); break; } } static GtkRadioActionEntry renderSurfaceTextureEntries[] = { { "RenderSurfaceTextureNothing", NULL, N_("_No Texture"), NULL, "No Texture", TEXTURE_NO }, { "RenderSurfaceTexture1", NULL, N_("Texture _1"), NULL, "Texture number 1", TEXTURE_1 }, { "RenderSurfaceTexture2", NULL, N_("Texture _2"), NULL, "Texture number 2", TEXTURE_2 }, { "RenderSurfaceTexture3", NULL, N_("Texture _3"), NULL, "Texture number 3", TEXTURE_3 }, }; static guint numberOfRenderSurfacetextureEntries = G_N_ELEMENTS (renderSurfaceTextureEntries); /*********************************************************************************************************************/ static void render_background_radio_action (GtkAction *action) { /* const gchar *name = gtk_action_get_name (action); */ gint value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action)); if(value>=BACKGROUND_BLACK && value<=BACKGROUND_CHECKER) { if( value==BACKGROUND_CHECKER) set_background_optcolor(-1); else set_background_optcolor(value-BACKGROUND_BLACK); while( gtk_events_pending() ) gtk_main_iteration(); glarea_rafresh(GLArea); glarea_rafresh(GLArea); } } static GtkRadioActionEntry renderBackGroundEntries[] = { { "RenderBackGroundBlack", NULL, N_("_Black"), NULL, "Black background", BACKGROUND_BLACK }, { "RenderBackGroundWhite", NULL, N_("_White"), NULL, "White background", BACKGROUND_WHITE }, { "RenderBackGroundRed", NULL, N_("_Red"), NULL, "Red background", BACKGROUND_RED1 }, { "RenderBackGroundGreen", NULL, N_("_Green"), NULL, "Green background", BACKGROUND_GREEN1 }, { "RenderBackGroundBlue", NULL, N_("_Blue"), NULL, "Blue background", BACKGROUND_BLUE1 }, { "RenderBackGroundPeach", NULL, N_("_Peach"), NULL, "Peach background", BACKGROUND_PEACH }, { "RenderBackGroundGray", NULL, N_("_Gray"), NULL, "Gray background", BACKGROUND_GRAY }, { "RenderBackGroundCheckerAndSky", NULL, N_("_Checker&sky"), NULL, "Checker&sky", BACKGROUND_CHECKER }, }; static guint numberOfBackGroundEntries = G_N_ELEMENTS (renderBackGroundEntries); /*********************************************************************************************************************/ enum { OPERATION_ROTATION_FREE, OPERATION_ROTATION_X, OPERATION_ROTATION_Y, OPERATION_ROTATION_Z, OPERATION_TRANSLATION, OPERATION_ZOOM, }; static void render_operation_radio_action (GtkAction *action) { gint value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action)); if(value>=OPERATION_ROTATION_FREE && value<=OPERATION_ZOOM) set_operation_type(value-OPERATION_ROTATION_FREE); } static GtkRadioActionEntry operationEntries[] = { { "OperationRotationFree", GABEDIT_STOCK_ROTATION, N_("_Free rotation"), "R", "Free rotation", OPERATION_ROTATION_FREE }, { "OperationRotationX", GABEDIT_STOCK_ROTATION_X, N_("Rotation about _X axis"), "X", "Rotation about X axis", OPERATION_ROTATION_X }, { "OperationRotationY", GABEDIT_STOCK_ROTATION_Y, N_("Rotation about _Y axis"), "Y", "Rotation about Y axis", OPERATION_ROTATION_Y }, { "OperationRotationZ", GABEDIT_STOCK_ROTATION_Z, N_("Rotation about _Z axis"), "Z", "Rotation about Z axis", OPERATION_ROTATION_Z }, { "OperationZoom", GABEDIT_STOCK_ZOOM, N_("Z_oom"), "o", "Zoom axis", OPERATION_ZOOM }, { "OperationTranslation", GABEDIT_STOCK_TRANSLATE, N_("_Translation"), "T", "Translation", OPERATION_TRANSLATION }, }; static guint numberOfOperationEntries = G_N_ELEMENTS (operationEntries); /*********************************************************************************************************************/ /* XML description of the menus for the test app. The parser understands * a subset of the Bonobo UI XML format, and uses GMarkup for parsing */ static const gchar *uiMenuInfo = " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" /*" \n"*/ " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" /* " \n" */ " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" /* " \n" */ " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*********************************************************************************************************************/ static void set_init_gtkActionToggleEntries() { gdouble aspect, zn, zf, zo; gboolean perspective = FALSE; if(TypeBlend==GABEDIT_BLEND_YES) gtkActionToggleEntries[0].is_active = TRUE; /* "RenderSurfaceTransparency" */ else gtkActionToggleEntries[0].is_active = FALSE; /* "RenderSurfaceTransparency" */ gtkActionToggleEntries[1].is_active = TRUE; /* RenderLightOnOff1 */ gtkActionToggleEntries[2].is_active = FALSE; /* RenderLightOnOff2 */ gtkActionToggleEntries[3].is_active = FALSE; /* RenderLightOnOff3 */ gtkActionToggleEntries[4].is_active = getShowBox(); /* RenderBox */ gtkActionToggleEntries[5].is_active = ShowDipoleOrb; /* RenderDipole */ gtkActionToggleEntries[6].is_active = ShowHAtomOrb ; /* RenderHydrogenBonds */ gtkActionToggleEntries[7].is_active = ShowHBondOrb ; /* RenderHydrogenBonds */ gtkActionToggleEntries[8].is_active = ShowMultiBondsOrb ; /* RenderMultiBonds */ gtkActionToggleEntries[9].is_active = testShowAxis() ; /* RenderXYZAxes */ gtkActionToggleEntries[10].is_active = testShowPrincipalAxisGL() ; /* RenderPrincipalAxes */ get_camera_values(&zn, &zf, &zo, &aspect, &perspective); gtkActionToggleEntries[11].is_active = perspective; /* RenderPerspective */ gtkActionToggleEntries[12].is_active = TRUE; /* ShowToolBar */ gtkActionToggleEntries[13].is_active = TRUE; /* ShowStatusHandleBox */ gtkActionToggleEntries[14].is_active = TRUE; /* ShowProgressBar */ gtkActionToggleEntries[15].is_active = FALSE; /* RenderLabelSymbols */ gtkActionToggleEntries[16].is_active = FALSE; /* RenderLabelNumbers */ gtkActionToggleEntries[17].is_active = FALSE; /* RenderLabelCharges */ gtkActionToggleEntries[18].is_active = FALSE; /* RenderLabelDistances */ gtkActionToggleEntries[19].is_active = FALSE; /* RenderLabelDipole */ gtkActionToggleEntries[20].is_active = FALSE; /* RenderLabelAxes */ gtkActionToggleEntries[21].is_active = get_labels_ortho(); /* RenderLabelsOrtho*/ gtkActionToggleEntries[22].is_active = !ringsGetNotPlanar(); /* RingsDeleteNotPlaner*/ gtkActionToggleEntries[23].is_active = ringsGetRandumColors(); /* RingsRandumColors*/ gtkActionToggleEntries[24].is_active = get_dotted_negative_contours(); /* "ContoursNegativeDotted" */ gtkActionToggleEntries[25].is_active = getShowOneSurface(); /* "ShowOnlyOneSurface" */ } /*******************************************************************************************************************************/ static void add_widget (GtkUIManager *merge, GtkWidget *widget, GtkContainer *container) { GtkWidget *handlebox; if (!GTK_IS_TOOLBAR (widget)) return; handlebox =gtk_handle_box_new (); g_object_ref (handlebox); gtk_handle_box_set_handle_position (GTK_HANDLE_BOX(handlebox),GTK_POS_TOP); /* GTK_SHADOW_NONE, GTK_SHADOW_IN, GTK_SHADOW_OUT, GTK_SHADOW_ETCHED_IN, GTK_SHADOW_ETCHED_OUT */ gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(handlebox),GTK_SHADOW_OUT); gtk_box_pack_start (GTK_BOX (container), handlebox, FALSE, FALSE, 0); if (GTK_IS_TOOLBAR (widget)) { GtkToolbar *toolbar; toolbar = GTK_TOOLBAR (widget); gtk_toolbar_set_show_arrow (toolbar, TRUE); gtk_toolbar_set_style(toolbar, GTK_TOOLBAR_ICONS); gtk_toolbar_set_orientation(toolbar, GTK_ORIENTATION_VERTICAL); toolBar = toolbar; handleBoxToolBar = handlebox; } gtk_widget_show (widget); gtk_container_add (GTK_CONTAINER (handlebox), widget); gtk_widget_show (handlebox); } /*******************************************************************************************************************************/ void create_toolbar_and_popup_menu_GL(GtkWidget* box) { GtkActionGroup *actionGroup = NULL; GtkUIManager *merge = NULL; GError *error = NULL; merge = gtk_ui_manager_new (); g_signal_connect_swapped (PrincipalWindow, "destroy", G_CALLBACK (g_object_unref), merge); actionGroup = gtk_action_group_new ("GabeditPopupMenuGLActions"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntries, numberOfGtkActionEntries, NULL); set_init_gtkActionToggleEntries(); gtk_action_group_add_toggle_actions (actionGroup, gtkActionToggleEntries, numberOfGtkActionToggleEntries, NULL); gtk_action_group_add_radio_actions (actionGroup, rendereGeometryEntries, numberOfRenderGeometryEntries, GEOMETRY_STICK, G_CALLBACK (render_geometry_radio_action), NULL); /* gtk_action_group_add_radio_actions (actionGroup, renderBackGroundEntries, numberOfBackGroundEntries, BACKGROUND_BLACK, G_CALLBACK (render_background_radio_action), NULL);*/ if(getOptCol()>=0) gtk_action_group_add_radio_actions (actionGroup, renderBackGroundEntries, numberOfBackGroundEntries, getOptCol(), G_CALLBACK (render_background_radio_action), NULL); else gtk_action_group_add_radio_actions (actionGroup, renderBackGroundEntries, numberOfBackGroundEntries, BACKGROUND_CHECKER, G_CALLBACK (render_background_radio_action), NULL); gtk_action_group_add_radio_actions (actionGroup, renderSurfaceTextureEntries, numberOfRenderSurfacetextureEntries, TEXTURE_NO, G_CALLBACK (render_surface_texture_radio_action), NULL); gtk_action_group_add_radio_actions (actionGroup, renderSurfaceEntries, numberOfRenderSurfaceEntries, SURFACE_POSITIVENEGATIVE, G_CALLBACK (render_surface_radio_action), NULL); gtk_action_group_add_radio_actions (actionGroup, renderSurfacePositiveEntries, numberOfRenderSurfacePositiveEntrie, SURFACE_POSITIVE_FILL, G_CALLBACK (render_surface_positive_radio_action), NULL); gtk_action_group_add_radio_actions (actionGroup, renderSurfaceNegativeEntries, numberOfRenderSurfaceNegativeEntries, SURFACE_NEGATIVE_FILL, G_CALLBACK (render_surface_negative_radio_action), NULL); gtk_action_group_add_radio_actions (actionGroup, operationEntries, numberOfOperationEntries, OPERATION_ROTATION_FREE, G_CALLBACK (render_operation_radio_action), NULL); gtk_ui_manager_insert_action_group (merge, actionGroup, 0); g_signal_connect (merge, "add_widget", G_CALLBACK (add_widget), box); gtk_window_add_accel_group (GTK_WINDOW (PrincipalWindow), gtk_ui_manager_get_accel_group (merge)); if (!gtk_ui_manager_add_ui_from_string (merge, uiMenuInfo, -1, &error)) { g_message (_("building menus failed: %s"), error->message); g_error_free (error); } manager = merge; } /*********************************************************************************************************************/ static void set_sensitive_orbitals() { GtkWidget *orbSave = gtk_ui_manager_get_widget (manager, "/MenuGL/Orbitals/OrbitalsGabeditSave"); GtkWidget *orbSelection = gtk_ui_manager_get_widget (manager, "/MenuGL/Orbitals/OrbitalsSelection"); GtkWidget *orbCapture = gtk_ui_manager_get_widget (manager, "/MenuGL/Orbitals/OrbitalsCapture"); GtkWidget *orbCoulomb = gtk_ui_manager_get_widget (manager, "/MenuGL/Orbitals/OrbitalsCoulomb"); GtkWidget *orbTransition = gtk_ui_manager_get_widget (manager, "/MenuGL/Orbitals/OrbitalsTransition"); GtkWidget *orbSpatialOverlapiijj = gtk_ui_manager_get_widget (manager, "/MenuGL/Orbitals/OrbitalsSpatialOverlapIIJJ"); GtkWidget *orbSpatialOverlapij = gtk_ui_manager_get_widget (manager, "/MenuGL/Orbitals/OrbitalsSpatialOverlapIJ"); GtkWidget *orbLambdaDiagnostic = gtk_ui_manager_get_widget (manager, "/MenuGL/Orbitals/OrbitalsLambdaDiagnostic"); GtkWidget *mullikenCharges = gtk_ui_manager_get_widget (manager, "/MenuGL/Orbitals/MullikenCharges"); GtkWidget *bondorder = gtk_ui_manager_get_widget (manager, "/MenuGL/Orbitals/BondOrder"); /* GtkWidget *orbOverlap = gtk_ui_manager_get_widget (manager, "/MenuGL/Orbitals/OrbitalsOverlap");*/ gboolean sensitive = TRUE; if(NAOrb<1) sensitive = FALSE; if(GTK_IS_WIDGET(orbSave)) gtk_widget_set_sensitive(orbSave, sensitive); if(GTK_IS_WIDGET(orbSelection)) gtk_widget_set_sensitive(orbSelection, sensitive); if(GTK_IS_WIDGET(orbCapture)) gtk_widget_set_sensitive(orbCapture, sensitive); if(GTK_IS_WIDGET(orbCoulomb)) gtk_widget_set_sensitive(orbCoulomb, sensitive); if(GTK_IS_WIDGET(orbTransition)) gtk_widget_set_sensitive(orbTransition, sensitive); if(GTK_IS_WIDGET(mullikenCharges)) gtk_widget_set_sensitive(mullikenCharges, sensitive); if(GTK_IS_WIDGET(bondorder)) gtk_widget_set_sensitive(bondorder, sensitive); /* if(GTK_IS_WIDGET(orbOverlap)) gtk_widget_set_sensitive(orbOverlap, sensitive);*/ if(GTK_IS_WIDGET(orbSpatialOverlapiijj)) gtk_widget_set_sensitive(orbSpatialOverlapiijj, sensitive); if(GTK_IS_WIDGET(orbSpatialOverlapij)) gtk_widget_set_sensitive(orbSpatialOverlapij, sensitive); if(GTK_IS_WIDGET(orbLambdaDiagnostic)) gtk_widget_set_sensitive(orbLambdaDiagnostic, sensitive); } /*********************************************************************************************************************/ static void set_sensitive_cube() { GtkWidget *cubeSave = gtk_ui_manager_get_widget (manager, "/MenuGL/Cube/CubeLoadGabeditSave"); GtkWidget *cubeSubtract = gtk_ui_manager_get_widget (manager, "/MenuGL/Cube/CubeSubtract"); GtkWidget *cubeScale = gtk_ui_manager_get_widget (manager, "/MenuGL/Cube/CubeScale"); GtkWidget *cubeSquare = gtk_ui_manager_get_widget (manager, "/MenuGL/Cube/CubeSquare"); GtkWidget *cubeRestriction = gtk_ui_manager_get_widget (manager, "/MenuGL/Cube/CubeRestriction"); GtkWidget *cubeCut = gtk_ui_manager_get_widget (manager, "/MenuGL/Cube/CubeCut"); GtkWidget *cubeAUMChargesNear = gtk_ui_manager_get_widget (manager, "/MenuGL/Cube/CubeAIMChargesNearGrid"); GtkWidget *cubeAUMChargesOn = gtk_ui_manager_get_widget (manager, "/MenuGL/Cube/CubeAIMChargesOnGrid"); GtkWidget *cubeColor = gtk_ui_manager_get_widget (manager, "/MenuGL/Cube/CubeColorMapping"); GtkWidget *cubeIntegral = gtk_ui_manager_get_widget (manager, "/MenuGL/Cube/ComputeIntegralSpace"); GtkWidget *cubeComputeLap = gtk_ui_manager_get_widget (manager, "/MenuGL/Cube/CubeComputeLaplacian"); GtkWidget *cubeComputeGard = gtk_ui_manager_get_widget (manager, "/MenuGL/Cube/CubeComputeNormGradient"); GtkWidget *cubesl2Gard = gtk_ui_manager_get_widget (manager, "/MenuGL/Cube/CubeSignLambda2Density"); gboolean sensitive = TRUE; if(!grid) sensitive = FALSE; if(GTK_IS_WIDGET(cubeSave)) gtk_widget_set_sensitive(cubeSave, sensitive); if(GTK_IS_WIDGET(cubeSubtract)) gtk_widget_set_sensitive(cubeSubtract, sensitive); if(GTK_IS_WIDGET(cubeScale)) gtk_widget_set_sensitive(cubeScale, sensitive); if(GTK_IS_WIDGET(cubeSquare)) gtk_widget_set_sensitive(cubeSquare, sensitive); if(GTK_IS_WIDGET(cubeRestriction)) gtk_widget_set_sensitive(cubeRestriction, sensitive); if(GTK_IS_WIDGET(cubeCut)) gtk_widget_set_sensitive(cubeCut, sensitive); if(GTK_IS_WIDGET(cubeAUMChargesNear)) gtk_widget_set_sensitive(cubeAUMChargesNear, sensitive); if(GTK_IS_WIDGET(cubeAUMChargesOn)) gtk_widget_set_sensitive(cubeAUMChargesOn, sensitive); if(GTK_IS_WIDGET(cubeColor)) gtk_widget_set_sensitive(cubeColor, sensitive); if(GTK_IS_WIDGET(cubeIntegral)) gtk_widget_set_sensitive(cubeIntegral, sensitive); if(GTK_IS_WIDGET(cubeComputeLap)) gtk_widget_set_sensitive(cubeComputeLap, sensitive); if(GTK_IS_WIDGET(cubeComputeGard)) gtk_widget_set_sensitive(cubeComputeGard, sensitive); if(GTK_IS_WIDGET(cubesl2Gard)) gtk_widget_set_sensitive(cubesl2Gard, sensitive); } /*********************************************************************************************************************/ static void set_sensitive_density() { GtkWidget *density = gtk_ui_manager_get_widget (manager, "/MenuGL/Density"); GtkWidget *elf = gtk_ui_manager_get_widget (manager, "/MenuGL/ELF"); GtkWidget *nci = gtk_ui_manager_get_widget (manager, "/MenuGL/NCI"); GtkWidget *fed = gtk_ui_manager_get_widget (manager, "/MenuGL/Fukui"); GtkWidget *atomic = gtk_ui_manager_get_widget (manager, "/MenuGL/Density/DensityAtomics"); GtkWidget *bonds = gtk_ui_manager_get_widget (manager, "/MenuGL/Density/DensityBonds"); GtkWidget *sas = gtk_ui_manager_get_widget (manager, "/MenuGL/SAS"); GtkWidget *esp = gtk_ui_manager_get_widget (manager, "/MenuGL/MEP"); GtkWidget *espOrb = gtk_ui_manager_get_widget (manager, "/MenuGL/MEP/MEPOrbitals"); GtkWidget *espGrid = gtk_ui_manager_get_widget (manager, "/MenuGL/MEP/MEPGrid"); GtkWidget *espMapping = gtk_ui_manager_get_widget (manager, "/MenuGL/MEP/MEPMapping"); GtkWidget *espMappingMG = gtk_ui_manager_get_widget (manager, "/MenuGL/MEP/MEPMapping/MEPMappingMG"); GtkWidget *espMappingExact = gtk_ui_manager_get_widget (manager, "/MenuGL/MEP/MEPMapping/MEPMappingExact"); GtkWidget *espMappingCG = gtk_ui_manager_get_widget (manager, "/MenuGL/MEP/MEPMapping/MEPMappingCG"); GtkWidget *espMappingMP = gtk_ui_manager_get_widget (manager, "/MenuGL/MEP/MEPMapping/MEPMappingMultipol"); GtkWidget *fedElectroMapping = gtk_ui_manager_get_widget (manager, "/MenuGL/Fukui/FEDElectrophilicMapping"); GtkWidget *fedNucleoMapping = gtk_ui_manager_get_widget (manager, "/MenuGL/Fukui/FEDNucleophilicMapping"); GtkWidget *fedRadicalMapping = gtk_ui_manager_get_widget (manager, "/MenuGL/Fukui/FEDRadicalMapping"); if(GTK_IS_WIDGET(esp)) gtk_widget_set_sensitive(esp, FALSE); if(GTK_IS_WIDGET(espGrid)) gtk_widget_set_sensitive(espGrid, FALSE); if(GTK_IS_WIDGET(espOrb)) gtk_widget_set_sensitive(espOrb, FALSE); if(GTK_IS_WIDGET(espMapping)) gtk_widget_set_sensitive(espMapping, FALSE); if(GTK_IS_WIDGET(espMappingExact)) gtk_widget_set_sensitive(espMappingExact, FALSE); if(GTK_IS_WIDGET(espMappingMG)) gtk_widget_set_sensitive(espMappingMG, FALSE); if(GTK_IS_WIDGET(espMappingCG)) gtk_widget_set_sensitive(espMappingCG, FALSE); if(GTK_IS_WIDGET(espMappingMP)) gtk_widget_set_sensitive(espMappingMP, FALSE); if(GTK_IS_WIDGET(fedElectroMapping)) gtk_widget_set_sensitive(fedElectroMapping, FALSE); if(GTK_IS_WIDGET(fedNucleoMapping)) gtk_widget_set_sensitive(fedNucleoMapping, FALSE); if(GTK_IS_WIDGET(fedRadicalMapping)) gtk_widget_set_sensitive(fedRadicalMapping, FALSE); if(!GeomOrb) { if(GTK_IS_WIDGET(sas)) gtk_widget_set_sensitive(sas, FALSE); if(GTK_IS_WIDGET(density)) gtk_widget_set_sensitive(density, FALSE); if(GTK_IS_WIDGET(elf)) gtk_widget_set_sensitive(elf, FALSE); if(GTK_IS_WIDGET(nci)) gtk_widget_set_sensitive(nci, FALSE); if(GTK_IS_WIDGET(fed)) gtk_widget_set_sensitive(fed, FALSE); return; } if(GeomOrb && GTK_IS_WIDGET(esp)) gtk_widget_set_sensitive(esp, TRUE); if( grid && GTK_IS_WIDGET(espGrid)) gtk_widget_set_sensitive(espGrid, TRUE); if( CoefAlphaOrbitals && GeomOrb && GTK_IS_WIDGET(espOrb)) gtk_widget_set_sensitive(espOrb, TRUE); if( grid && GeomOrb && GTK_IS_WIDGET(espMapping)) gtk_widget_set_sensitive(espMapping, TRUE); if( grid && CoefAlphaOrbitals && GeomOrb && GTK_IS_WIDGET(espMapping)) { if(GTK_IS_WIDGET(espMappingExact) && AOrb) gtk_widget_set_sensitive(espMappingExact, TRUE); if(GTK_IS_WIDGET(espMappingMG)) gtk_widget_set_sensitive(espMappingMG, TRUE); if(GTK_IS_WIDGET(espMappingCG)) gtk_widget_set_sensitive(espMappingCG, TRUE); if(GTK_IS_WIDGET(espMappingMP)) gtk_widget_set_sensitive(espMappingMP, TRUE); } if( grid && GeomOrb) { if(GTK_IS_WIDGET(fedElectroMapping)) gtk_widget_set_sensitive(fedElectroMapping, TRUE); if(GTK_IS_WIDGET(fedNucleoMapping)) gtk_widget_set_sensitive(fedNucleoMapping, TRUE); if(GTK_IS_WIDGET(fedRadicalMapping)) gtk_widget_set_sensitive(fedRadicalMapping, TRUE); } if(GTK_IS_WIDGET(sas)) gtk_widget_set_sensitive(sas, TRUE); if(GTK_IS_WIDGET(nci)) gtk_widget_set_sensitive(nci, FALSE); if(grid && GTK_IS_WIDGET(nci)) gtk_widget_set_sensitive(nci, TRUE); if(!GeomOrb || !CoefAlphaOrbitals) { if(GTK_IS_WIDGET(density)) gtk_widget_set_sensitive(density, FALSE); if(GTK_IS_WIDGET(elf)) gtk_widget_set_sensitive(elf, FALSE); if(GTK_IS_WIDGET(fed)) gtk_widget_set_sensitive(fed, FALSE); return; } if(GTK_IS_WIDGET(density)) gtk_widget_set_sensitive(density, TRUE); if(GTK_IS_WIDGET(elf)) gtk_widget_set_sensitive(elf, TRUE); if(GTK_IS_WIDGET(fed)) gtk_widget_set_sensitive(fed, TRUE); if(!AOAvailable) { if(GTK_IS_WIDGET(atomic)) gtk_widget_set_sensitive(atomic, FALSE); if(GTK_IS_WIDGET(bonds)) gtk_widget_set_sensitive(bonds, FALSE); return; } if(GTK_IS_WIDGET(atomic)) gtk_widget_set_sensitive(atomic, TRUE); if(GTK_IS_WIDGET(bonds)) gtk_widget_set_sensitive(bonds, TRUE); } /*********************************************************************************************************************/ static void set_sensitive_contours() { GtkWidget *contours = gtk_ui_manager_get_widget (manager, "/MenuGL/Contours"); GtkWidget *contours1 = gtk_ui_manager_get_widget (manager, "/MenuGL/Contours/ContoursFirst"); GtkWidget *contours2 = gtk_ui_manager_get_widget (manager, "/MenuGL/Contours/ContoursSecond"); GtkWidget *contours3 = gtk_ui_manager_get_widget (manager, "/MenuGL/Contours/ContoursThird"); GtkWidget *contoursOther = gtk_ui_manager_get_widget (manager, "/MenuGL/Contours/ContoursOther"); GtkWidget *contoursIsoSurface = gtk_ui_manager_get_widget (manager, "/MenuGL/Contours/ContoursIsoSurface"); gboolean s = TRUE; if(!GeomOrb) { gtk_widget_set_sensitive(contours, FALSE); return; } gtk_widget_set_sensitive(contours, TRUE); if(!grid) s = FALSE; if(GTK_IS_WIDGET(contours1)) gtk_widget_set_sensitive(contours1, s); if(GTK_IS_WIDGET(contours2)) gtk_widget_set_sensitive(contours2, s); if(GTK_IS_WIDGET(contours3)) gtk_widget_set_sensitive(contours3, s); if(GTK_IS_WIDGET(contoursIsoSurface)) gtk_widget_set_sensitive(contoursIsoSurface, s); if(!GeomOrb || !CoefAlphaOrbitals) { if(GTK_IS_WIDGET(contoursOther)) gtk_widget_set_sensitive(contoursOther, FALSE); return; } if(GTK_IS_WIDGET(contoursOther)) gtk_widget_set_sensitive(contoursOther, TRUE); } /*********************************************************************************************************************/ static void set_sensitive_colorcoded_planes() { GtkWidget *colorcodedplanes = gtk_ui_manager_get_widget (manager, "/MenuGL/PlanesColorCoded"); GtkWidget *colorcodedplanes1 = gtk_ui_manager_get_widget (manager, "/MenuGL/PlanesColorCoded/PlanesColorCodedFirst"); GtkWidget *colorcodedplanes2 = gtk_ui_manager_get_widget (manager, "/MenuGL/PlanesColorCoded/PlanesColorCodedSecond"); GtkWidget *colorcodedplanes3 = gtk_ui_manager_get_widget (manager, "/MenuGL/PlanesColorCoded/PlanesColorCodedThird"); GtkWidget *colorcodedplanesOther = gtk_ui_manager_get_widget (manager, "/MenuGL/PlanesColorCoded/PlanesColorCodedOther"); gboolean s = TRUE; if(!GeomOrb) { gtk_widget_set_sensitive(colorcodedplanes, FALSE); return; } gtk_widget_set_sensitive(colorcodedplanes, TRUE); if(!grid) s = FALSE; if(GTK_IS_WIDGET(colorcodedplanes1)) gtk_widget_set_sensitive(colorcodedplanes1, s); if(GTK_IS_WIDGET(colorcodedplanes2)) gtk_widget_set_sensitive(colorcodedplanes2, s); if(GTK_IS_WIDGET(colorcodedplanes3)) gtk_widget_set_sensitive(colorcodedplanes3, s); if(!GeomOrb || !CoefAlphaOrbitals) { if(GTK_IS_WIDGET(colorcodedplanesOther)) gtk_widget_set_sensitive(colorcodedplanesOther, FALSE); return; } if(GTK_IS_WIDGET(colorcodedplanesOther)) gtk_widget_set_sensitive(colorcodedplanesOther, TRUE); } /*********************************************************************************************************************/ static void set_sensitive_surfaces() { GtkWidget *surfaces = gtk_ui_manager_get_widget (manager, "/MenuGL/Surfaces"); gboolean s = TRUE; if(!grid) s = FALSE; if(GTK_IS_WIDGET(surfaces)) gtk_widget_set_sensitive(surfaces, s); } /*********************************************************************************************************************/ static void set_sensitive_set() { GtkWidget *computeDipole = gtk_ui_manager_get_widget (manager, "/MenuGL/Set/SetDipoleDensity"); GtkWidget *computeCTDipole = gtk_ui_manager_get_widget (manager, "/MenuGL/Set/SetDipoleCT"); gboolean sensitive = TRUE; if(!grid) sensitive = FALSE; if(GTK_IS_WIDGET(computeDipole)) gtk_widget_set_sensitive(computeDipole, sensitive); if(GTK_IS_WIDGET(computeCTDipole)) gtk_widget_set_sensitive(computeCTDipole, sensitive); } /*********************************************************************************************************************/ static void set_sensitive_export() { GtkWidget *povray = gtk_ui_manager_get_widget (manager, "/MenuGL/Export"); gboolean sensitive = TRUE; if(!GeomOrb) sensitive = FALSE; if(GTK_IS_WIDGET(povray)) gtk_widget_set_sensitive(povray, sensitive); } /*********************************************************************************************************************/ static void set_sensitive_animation() { GtkWidget *rotation = gtk_ui_manager_get_widget (manager, "/MenuGL/Animation/AnimationRotation"); GtkWidget *contours = gtk_ui_manager_get_widget (manager, "/MenuGL/Animation/AnimationContours"); GtkWidget *colorPlane = gtk_ui_manager_get_widget (manager, "/MenuGL/Animation/AnimationPlanesColorcoded"); GtkWidget *surfaces = gtk_ui_manager_get_widget (manager, "/MenuGL/Animation/AnimationIsosurface"); gboolean sRotation = TRUE; gboolean sContours = TRUE; gboolean sPlanes = TRUE; gboolean sSurface = TRUE; if(!grid) { sSurface = FALSE; sPlanes = FALSE; sContours = FALSE; } if(!GeomOrb) sRotation = FALSE; if(GTK_IS_WIDGET(rotation)) gtk_widget_set_sensitive(rotation, sRotation); if(GTK_IS_WIDGET(contours)) gtk_widget_set_sensitive(contours, sContours); if(GTK_IS_WIDGET(colorPlane)) gtk_widget_set_sensitive(colorPlane, sPlanes); if(GTK_IS_WIDGET(surfaces)) gtk_widget_set_sensitive(surfaces, sSurface); } /*********************************************************************************************************************/ static void set_sensitive_png_background() { guchar color[3]; gint numCol = get_background_color(color); GtkWidget *pngTrans = gtk_ui_manager_get_widget (manager, "/MenuGL/ScreenCapture/ScreenCapturePNGWithoutBackGround"); GtkWidget *clipTrans = gtk_ui_manager_get_widget (manager, "/MenuGL/ScreenCapture/ScreenCaptureClipBoardWithoutBackground"); gboolean sensitive = TRUE; if(numCol<0) sensitive = FALSE; if(GTK_IS_WIDGET(pngTrans)) gtk_widget_set_sensitive(pngTrans, sensitive); if(GTK_IS_WIDGET(clipTrans)) gtk_widget_set_sensitive(clipTrans, sensitive); } /*********************************************************************************************************************/ gboolean popuo_menu_GL(guint button, guint32 time) { GtkWidget *menu = gtk_ui_manager_get_widget (manager, "/MenuGL"); if (GTK_IS_MENU (menu)) { set_sensitive_orbitals(); set_sensitive_cube(); set_sensitive_density(); set_sensitive_contours(); set_sensitive_colorcoded_planes(); set_sensitive_surfaces(); set_sensitive_set(); set_sensitive_export(); set_sensitive_animation(); set_sensitive_png_background(); gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, time); return TRUE; } else printf(_("Error : I cannot show the menu!\n")); return FALSE; } /*********************************************************************************************************************/ void rafresh_perspective_button() { GtkAction * action = gtk_ui_manager_get_action(manager, "/ToolbarGL/RenderPerspective"); if(GTK_IS_TOGGLE_ACTION(action)) { gboolean perspective = FALSE; gdouble aspect, zn, zf, zo; get_camera_values(&zn, &zf, &zo, &aspect, &perspective); gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), perspective); } } /*********************************************************************************************************************/ GabeditSrc250/src/Display/Orbitals.c0000644000175100017510000022711213130665225017617 0ustar alloucheallouche/* Orbitals.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "../Utils/AtomsProp.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/GabeditTextEdit.h" #include "../Utils/Constants.h" #include "../Spectrum/DOS.h" #include "GeomDraw.h" #include "GLArea.h" #include "UtilsOrb.h" #include "Basis.h" #include "GeomOrbXYZ.h" #include "AtomicOrbitals.h" #include "StatusOrb.h" #include "Orbitals.h" /* #include "OrbitalsDalton.h" */ #include "OrbitalsGamess.h" #include "OrbitalsMolpro.h" #include "OrbitalsQChem.h" #include "OrbitalsNWChem.h" #include "OrbitalsMopac.h" #include "OrbitalsOrca.h" #include "OrbitalsNBO.h" #define WIDTHSCR 0.56 static gint TypeSelOrbtmp = 1; static gint NumSelOrbtmp = -1; void create_iso_orbitals(); static gboolean sphericalBasis = FALSE; static GtkWidget* winList = NULL; /********************************************************************************/ static void resetViewOrbCoef(GtkWidget* textWidget); /************************************************************************************************************/ static gint getNumSelectOrb(gint numRow) { gint n = -1; gint i; if(numRow<0) return -1; for(i=0;ifabs(limits.MinMax[1][3]) && fabs(isovalue)>fabs(limits.MinMax[0][3])) { gchar buffer[BSIZE]; sprintf(buffer,_("Error : The isovalue value should between %lf and %lf"),fabs(limits.MinMax[1][3]),fabs(limits.MinMax[0][3])); GtkWidget* message = Message(buffer,_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } /* if(isovalue0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { limitstmp.MinMax[j-3][i] = atof(dump); } else { GtkWidget* message = Message(_("Error : one entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } temp = gtk_entry_get_text(GTK_ENTRY(entries[i][5])); NumPointstmp[i] = atoi(temp); if(NumPointstmp[i] <=2) { GtkWidget* message = Message(_("Error : The number of points should be > 2. "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } } for(i=0;i<3;i++) { if( limitstmp.MinMax[0][i]> limitstmp.MinMax[1][i]) { GtkWidget* message = Message(_("Error : The minimal value should be smaller than the maximal value "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } } for(i=0;i<3;i++) { for(j=0;j<3;j++) { V[i][j] = 0; temp = gtk_entry_get_text(GTK_ENTRY(entries[i][j])); dump = NULL; if(temp && strlen(temp)>0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { V[i][j] = atof(dump); } else { GtkWidget* message = Message(_("Error : one entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } } for(i=0;i<3;i++) { gdouble norm = 0.0; for(j=0;j<3;j++) norm += V[i][j]*V[i][j]; if(fabs(norm)<1e-8) { GtkWidget* message = Message(_("Error : the norm is equal to 0 "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } for(j=0;j<3;j++) V[i][j] /= sqrt(norm); } for(j=0;j<3;j++) originOfCube[j] = 0; for(j=0;j<3;j++) firstDirection[j] = V[0][j]; for(j=0;j<3;j++) secondDirection[j] = V[1][j]; for(j=0;j<3;j++) thirdDirection[j] = V[2][j]; for(i=0;i<3;i++) { NumPoints[i] =NumPointstmp[i] ; for(j=0;j<2;j++) limits.MinMax[j][i] =limitstmp.MinMax[j][i]; } /* for(i=0;i<3;i++) printf("%f %f %d\n",limits.MinMax[0][i], limits.MinMax[1][i], NumPoints[i]); */ delete_child(Win); TypeSelOrb = TypeSelOrbtmp; NumSelOrb = NumSelOrbtmp; /* printf("Define_Grid\n");*/ Define_Grid(); /* printf("create_iso_orbitals\n");*/ create_iso_orbitals(); } /********************************************************************************/ static void applycutoff(GtkWidget *Win,gpointer data) { GtkWidget* entry =(GtkWidget*)g_object_get_data(G_OBJECT (Win), "Entry"); GtkWidget *alphalist = g_object_get_data(G_OBJECT (Win), "AlphaList"); GtkWidget *betalist = g_object_get_data(G_OBJECT (Win), "BetaList"); gchar* temp; gdouble cutoff; gint i,j; temp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry))); cutoff =fabs(atof(temp)); for(j=0;jbutton != 1) return; type = (gint*)g_object_get_data(G_OBJECT (widget), "Type"); TypeSelOrbtmp = *type; otherlist = g_object_get_data(G_OBJECT (gtklist), "OtherList"); if(otherlist) gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (otherlist))); if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); NumSelOrbtmp = getNumSelectOrb(atoi(gtk_tree_path_to_string(path))); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free(path); if ((GdkEventButton *) event && ((GdkEventButton *) event)->type==GDK_2BUTTON_PRESS) { GtkWidget* button = g_object_get_data(G_OBJECT (widget), "ButtonOk"); gtk_button_clicked (GTK_BUTTON (button)); } } else NumSelOrbtmp = -1; } GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event); if(NumSelOrbtmp>=0) { GtkWidget* textWidget = g_object_get_data(G_OBJECT (gtklist), "CoefOrbWidget"); if(textWidget) resetViewOrbCoef(textWidget); } } /********************************************************************************/ GtkWidget* create_gtk_list_orbitals(gint N,gdouble* Energies,gdouble* Occ,gchar** sym, gint* widall) { gint i; gint j; GtkWidget* gtklist = NULL; gint *Width = NULL; gint NlistTitle = 4; gchar* Titles[] = {"Nr","Energy","Occ.","Sym."}; gchar* List[4]; GtkListStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeSelection *select; GtkTreeIter iter; GType* types; Width = g_malloc(NlistTitle*sizeof(gint)); for (j=0;j100) percent = 100; if( TypeGrid == GABEDIT_TYPEGRID_ELFSAVIN || TypeGrid == GABEDIT_TYPEGRID_ELFBECKE || TypeGrid == GABEDIT_TYPEGRID_FEDELECTROPHILIC || TypeGrid == GABEDIT_TYPEGRID_FEDNUCLEOPHILIC || TypeGrid == GABEDIT_TYPEGRID_FEDRADICAL || TypeGrid == GABEDIT_TYPEGRID_EDENSITY ) square = FALSE; if(!compute_isovalue_percent_from_grid(grid, square, percent, precision, &isovalue)) return; temp = g_strdup_printf("%f",isovalue); gtk_entry_set_text(GTK_ENTRY(Entry),temp); if(temp) g_free(temp); } /********************************************************************************/ GtkWidget *create_iso_frame( GtkWidget *vboxall,gchar* title) { GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *Entry; GtkWidget *EntryPercent; gushort i; gushort j; GtkWidget *Table; gdouble v; GtkWidget* button; #define NLIGNES 3 #define NCOLUMNS 3 gchar *strlabels[NLIGNES][NCOLUMNS]; strlabels[0][0] = g_strdup(_(" Min ")); strlabels[1][0] = g_strdup(_(" Max ")); strlabels[2][0] = g_strdup(_(" Value ")); strlabels[0][1] = g_strdup(" : "); strlabels[1][1] = g_strdup(" : "); strlabels[2][1] = g_strdup(" : "); if(fabs(limits.MinMax[0][3])>1e6) strlabels[0][2] = g_strdup_printf(" %e ",limits.MinMax[0][3]); else strlabels[0][2] = g_strdup_printf(" %lf ",limits.MinMax[0][3]); if(fabs(limits.MinMax[1][3])>1e6) strlabels[1][2] = g_strdup_printf(" %e ",limits.MinMax[1][3]); else strlabels[1][2] = g_strdup_printf(" %lf ",limits.MinMax[1][3]); v = limits.MinMax[1][3]/4; if(v>0.2 && fabs(limits.MinMax[1][3])>0.01 && fabs(limits.MinMax[0][3])<0.01) v= 0.01; if(TypeGrid == GABEDIT_TYPEGRID_SAS) v = 0; if(TypeGrid == GABEDIT_TYPEGRID_ELFSAVIN) v = 0.8; if(TypeGrid == GABEDIT_TYPEGRID_ELFBECKE) v = 0.8; if(TypeGrid == GABEDIT_TYPEGRID_FEDELECTROPHILIC) v *= 3; if(TypeGrid == GABEDIT_TYPEGRID_FEDNUCLEOPHILIC) v *= 3; if(TypeGrid == GABEDIT_TYPEGRID_FEDRADICAL) v *= 3; if(TypeGrid == GABEDIT_TYPEGRID_NCI) v = 0.1; strlabels[2][2] = g_strdup_printf("%lf",v); frame = gtk_frame_new (title); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(3,3,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); for(i=0;i<3;i++) for(j=0;j<3;j++) if(i+j != 4) add_label_at_table(Table,strlabels[i][j],i,(gushort)j,GTK_JUSTIFY_LEFT); Entry= gtk_entry_new (); add_widget_table(Table,Entry,(gushort)2,(gushort)2); gtk_entry_set_text(GTK_ENTRY( Entry),strlabels[2][2]); for(i=0;i<3;i++) { for(j=0;j<3;j++) g_free(strlabels[i][j]); } gtk_box_pack_start (GTK_BOX (vboxframe), gtk_hseparator_new (), TRUE, TRUE, 0); Table = gtk_table_new(1,3,FALSE); gtk_box_pack_start (GTK_BOX (vboxframe), Table, TRUE, TRUE, 0); EntryPercent= gtk_entry_new (); gtk_widget_set_size_request(EntryPercent,60,-1); add_widget_table(Table,EntryPercent,0,0); gtk_entry_set_text(GTK_ENTRY( EntryPercent),"99"); g_object_set_data(G_OBJECT (frame), "EntryPercent",EntryPercent); add_label_at_table(Table,"%",0,1,GTK_JUSTIFY_LEFT); button = gtk_button_new_with_label(" Get Isovalue "); g_object_set_data(G_OBJECT (frame), "ButtonGet",button); gtk_table_attach(GTK_TABLE(Table),button,2,3,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_widget_show_all(frame); g_object_set_data(G_OBJECT (frame), "Entry",Entry); g_object_set_data(G_OBJECT (button), "EntryPercent",EntryPercent); g_object_set_data(G_OBJECT (button), "Entry",Entry); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)getiso,GTK_OBJECT(Entry)); return frame; #undef NLIGNES #undef NCOLUMNS } /********************************************************************************/ static void reset_new_surface() { newSurface = FALSE; } /********************************************************************************/ void create_iso_orbitals() { GtkWidget *Win; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *button; GtkWidget* Entry; /* printf("Begin create_iso_orbitals\n"); */ if(!grid ) { if( !CancelCalcul) Message(_("Grid not defined "),_("Error"),TRUE); return; } /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),_("Calculations of isosurfaces for an orbital")); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Iso surface "); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)reset_new_surface,NULL); vboxall = create_vbox(Win); vboxwin = vboxall; frame = create_iso_frame(vboxall,_("Iso-Value")); Entry = (GtkWidget*) g_object_get_data(G_OBJECT (frame), "Entry"); g_object_set_data(G_OBJECT (Win), "Entry",Entry); /* buttons box */ hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)applyiso,GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT (Entry), "activate", (GCallback) gtk_button_clicked, GTK_OBJECT (button)); /* Show all */ gtk_widget_show_all (Win); } /********************************************************************************/ void create_grid_orbitals() { TypeGrid = GABEDIT_TYPEGRID_ORBITAL; create_grid("Calculations of grid for an orbital"); } /********************************************************************************/ static void create_alpha_dos(GtkWidget *parentWindow,gpointer data) { gint n = NAlphaOrb; createDOSSpectrumFromEnergiesTable(parentWindow, EnerAlphaOrbitals, n); } /********************************************************************************/ static void create_beta_dos(GtkWidget *parentWindow,gpointer data) { gint n = NBetaOrb; createDOSSpectrumFromEnergiesTable(parentWindow, EnerBetaOrbitals, n); } /********************************************************************************/ static void create_all_dos(GtkWidget *parentWindow,gpointer data) { gint i; gint n = NAlphaOrb + NBetaOrb; gdouble *energies = NULL; if(n<1)return; if(!EnerAlphaOrbitals && NAlphaOrb>0) return; if(!EnerBetaOrbitals && NBetaOrb>0) return; energies = g_malloc(n*sizeof(gdouble)); for(i=0;i -1) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (betalist))); selectRow(alphalist,getNumSelectRow(NumSelOrb)); } if(TypeSelOrb == 2 && NumSelOrb > -1) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (alphalist))); selectRow(betalist,getNumSelectRow(NumSelOrb)); } winList = Win; } /********************************************************************************/ gchar* get_sym_orb(gchar *allstr) { gchar* begin = NULL; gchar* end = NULL; begin = strstr(allstr,"("); if(begin) { end = strstr(begin+1,")"); if(end) { gint l = end-begin; gint i; gchar *sym; if(l<=0) return g_strdup(_("Unknown")); sym = g_malloc(l*sizeof(gchar)); for(i=0;i3) { for(i=0;i0) NOcc++; } for(i=0;i3) { for(i=0;i<1;i++) if(EnerOrb[i]>0) NOcc++; } for(i=0;i3) { for(i=0;i<2;i++) if(EnerOrb[i]>0) NOcc++; } for(i=0;i3) { for(i=0;i<3;i++) if(EnerOrb[i]>0) NOcc++; } for(i=0;i3) { for(i=0;i<4;i++) if(EnerOrb[i]>0) NOcc++; } for(i=0;i0) NOcc++; sscanf(t,"%d %lf",&idump,&CoefOrbitals[n][0]); for(i=1;i0 && nA<=nBasis) { EnerAlphaOrbitals = g_malloc(NOrb*sizeof(gdouble)); for(i=0;i0 && nB<=nBasis) { EnerBetaOrbitals = g_malloc(NOrb*sizeof(gdouble)); for(i=0;i1.0) { NBetaOcc++; OccBetaOrbitals[i] = OccAlphaOrbitals[i]/2; OccAlphaOrbitals[i] = OccBetaOrbitals[i]; } else OccBetaOrbitals[i] = 0.0; } if(NBetaOrb>0) OkBeta = TRUE; } if(OkAlpha || OkBeta) { read_gabedit_atomic_orbitals(FileName); set_status_label_info(_("Mol. Orb."),_("Ok")); glarea_rafresh(GLArea); /* for geometry*/ NumSelOrb = NAlphaOcc-1; create_list_orbitals(); } else { set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); set_status_label_info(_("Mol. Orb."),_("Nothing")); } DefineType(); } /********************************************************************************/ void read_molden_orbitals(gchar* FileName) { gint i; gint typefile; gint typebasis; gboolean OkAlpha = FALSE; gboolean OkBeta = FALSE; gchar *t = NULL; typefile =get_type_file_orb(FileName); if(typefile==GABEDIT_TYPEFILE_UNKNOWN) return; if(typefile != GABEDIT_TYPEFILE_MOLDEN) { Message(_("Sorry, This file is not in Molden Format\n"),_("Error"),TRUE); return ; } free_data_all(); t = get_name_file(FileName); set_status_label_info(_("File name"),t); g_free(t); set_status_label_info(_("File type"),"Molden"); set_status_label_info(_("Mol. Orb."),_("Reading")); free_orbitals(); if(!gl_read_molden_file_geom(FileName)) { set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); set_status_label_info(_("Mol. Orb."),_("Nothing")); return; } InitializeAll(); if(!DefineMoldenBasisType(FileName)) { set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); set_status_label_info(_("Mol. Orb."),_("Nothing")); return; } /* Debug("End define Basis Type NAOrb = %d \n",NAOrb); PrintBasis(); Debug("End Print Basis\n"); */ typebasis =get_type_basis_in_molden_file(FileName); /* printf("typebasis = %d\n",typebasis);*/ if(typebasis == 1) { DefineSphericalBasis(); sphericalBasis = TRUE; } else { DefineCartBasis(); sphericalBasis = FALSE; } /* Debug("End DefineBasis\n");*/ /* PrintAllBasis();*/ NormaliseAllBasis(); /* Debug("Basis after normalisation\n");*/ /* PrintAllBasis();*/ /* Debug("Spherical basis(Norb=%d)\n",NAOrb);*/ DefineNOccs(); OkBeta = read_orbitals_in_gabedit_or_molden_file(FileName,2);/* if beta orbital*/ /* Debug("Ok = %d\n",Ok);*/ OkAlpha = read_orbitals_in_gabedit_or_molden_file(FileName,1); if(!OkBeta && OkAlpha) { CoefBetaOrbitals = CoefAlphaOrbitals; EnerBetaOrbitals = EnerAlphaOrbitals; SymBetaOrbitals = SymAlphaOrbitals; NBetaOrb = NAlphaOrb; OccBetaOrbitals = g_malloc(NOrb*sizeof(gdouble)); NBetaOcc = 0; for(i=0;i1.0) { NBetaOcc++; OccBetaOrbitals[i] = OccAlphaOrbitals[i]/2; OccAlphaOrbitals[i] = OccBetaOrbitals[i]; } else OccBetaOrbitals[i] = 0.0; } if(NBetaOrb>0) OkBeta = TRUE; } /* Debug("NA = %d\n",NAlphaOcc);*/ /* Debug("NB = %d\n",NBetaOcc);*/ if(OkBeta || OkAlpha) { /* PrintAllOrb(CoefAlphaOrbitals); Debug("End Orb\n"); */ set_status_label_info(_("Mol. Orb."),_("Ok")); glarea_rafresh(GLArea); /* for geometry */ NumSelOrb = NAlphaOcc-1; /* Debug("NumSelOrb = %d\n",NumSelOrb);*/ create_list_orbitals(); } else { set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); set_status_label_info(_("Mol. Orb."),_("Nothing")); } DefineType(); } /********************************************************************************/ void read_dalton_orbitals_sel(GabeditFileChooser *SelecFile, gint response_id) { /* gchar *FileName;*/ if(response_id != GTK_RESPONSE_OK) return; /* FileName = gabedit_file_chooser_get_current_file(SelecFile);*/ gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); /* read_dalton_orbitals(FileName);*/ } /********************************************************************************/ void read_gamess_orbitals_sel(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); read_gamess_orbitals(FileName); } /********************************************************************************/ void read_nbo_orbitals_sel(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); read_nbo_orbitals(FileName); } /********************************************************************************/ /********************************************************************************/ void read_orca_orbitals_sel_2mkl(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); read_orca_orbitals_using_orca_2mkl(fileName); } /********************************************************************************/ void read_orca_orbitals_sel(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); read_orca_orbitals_from_output_file(fileName); } /********************************************************************************/ void read_qchem_orbitals_sel(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); read_qchem_orbitals(FileName); } /********************************************************************************/ void read_nwchem_orbitals_sel(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); read_nwchem_orbitals(FileName); } /********************************************************************************/ void read_mopac_orbitals_sel(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); read_mopac_orbitals(FileName); } /********************************************************************************/ void read_gauss_orbitals_sel(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); read_gauss_orbitals(FileName); } /********************************************************************************/ void read_fchk_gauss_orbitals_sel(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); read_fchk_gauss_orbitals(FileName); } /********************************************************************************/ void read_molpro_orbitals_sel(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); read_molpro_orbitals(FileName); sphericalBasis = TRUE; } /********************************************************************************/ void read_gabedit_orbitals_sel(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); read_gabedit_orbitals(FileName); } /********************************************************************************/ void save_gabedit_orbitals_sel(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); save_gabedit_orbitals(FileName); } /********************************************************************************/ void read_molden_orbitals_sel(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); read_molden_orbitals(FileName); } /*******************************************************/ gboolean read_orbitals(gchar* fileName) { GabEditTypeFile fileType = get_type_file(fileName); if(fileType == GABEDIT_TYPEFILE_GAMESS) read_gamess_orbitals(fileName); else if(fileType == GABEDIT_TYPEFILE_FIREFLY) read_gamess_orbitals(fileName); else if(fileType == GABEDIT_TYPEFILE_GAUSSIAN) read_gauss_orbitals(fileName); else if(fileType == GABEDIT_TYPEFILE_GAUSSIAN_FCHK) read_fchk_gauss_orbitals(fileName); else if(fileType == GABEDIT_TYPEFILE_MOLPRO) read_molpro_orbitals(fileName); else if(fileType == GABEDIT_TYPEFILE_MOPAC) read_mopac_orbitals(fileName); else if(fileType == GABEDIT_TYPEFILE_MOPAC_AUX) read_mopac_orbitals(fileName); else if(fileType == GABEDIT_TYPEFILE_ORCA) read_orca_orbitals_from_output_file(fileName); else if(fileType == GABEDIT_TYPEFILE_NWCHEM) read_nwchem_orbitals(fileName); else if(fileType == GABEDIT_TYPEFILE_QCHEM) read_qchem_orbitals(fileName); else if(fileType == GABEDIT_TYPEFILE_GABEDIT) read_gabedit_orbitals(fileName); else if(fileType == GABEDIT_TYPEFILE_MOLDEN) read_molden_orbitals(fileName); else if(fileType == GABEDIT_TYPEFILE_UNKNOWN) { Message( _("Sorry, I cannot find the type of your file\n") ," Error ",TRUE); return FALSE; } return TRUE; } /*************************************************************************/ void read_orbitals_sel(GabeditFileChooser *selecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(selecFile); gtk_widget_hide(GTK_WIDGET(selecFile)); while( gtk_events_pending() ) gtk_main_iteration(); add_objects_for_new_grid(); read_orbitals(fileName); } GabeditSrc250/src/Display/PrincipalAxisGL.h0000644000175100017510000000137513130665225021037 0ustar alloucheallouche #ifndef __GABEDIT_PRINCIPALAXISGL_H__ #define __GABEDIT_PRINCIPALAXISGL_H__ void getPrincipalAxisInertias(gdouble* I); void getPrincipalAxisProperties(gboolean* show, gboolean* negative, gboolean* def, gdouble origin[], gdouble* radius, gdouble* scal, gdouble firstVector[],gdouble secondVector[], gdouble thirdVector[], gdouble firstColor[],gdouble secondColor[], gdouble thirdColor[]); void initPrincipalAxisGL(); void save_principal_axis_properties(); void read_principal_axis_properties(); void set_principal_axisGL_dialog (); gboolean testShowPrincipalAxisGL(); void showPrincipalAxisGL(); void hidePrincipalAxisGL(); GLuint principalAxisGenList(GLuint axisList); void principalAxisShowList(GLuint axisList); #endif /* __GABEDIT_PRINCIPALAXISGL_H__ */ GabeditSrc250/src/Display/Grid.c0000644000175100017510000027515613130665225016740 0ustar alloucheallouche/* Grid.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #ifdef ENABLE_OMP #include #endif #include "../Utils/Constants.h" #include "GlobalOrb.h" #include "StatusOrb.h" #include "UtilsOrb.h" #include "ColorMap.h" #include "../MultiGrid/PoissonMG.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/Zlm.h" #include "../Utils/MathFunctions.h" #include "../Utils/GTF.h" #include "../Utils/QL.h" /************************************************************************/ static gdouble get_value_elf_becke(gdouble x,gdouble y,gdouble z,gint dump); static gdouble get_value_elf_savin(gdouble x,gdouble y,gdouble z,gint dump); static gdouble get_value_sas(gdouble x,gdouble y,gdouble z,gint dump); static gdouble get_value_fed(gdouble x,gdouble y,gdouble z,gdouble alpha, gint n, gdouble eHOMO, gdouble eLUMO); static gdouble get_energy_homo(); static gdouble get_energy_lumo(); /************************************************************************/ gdouble get_value_STF(gdouble x,gdouble y,gdouble z,gint i,gint n) { gdouble v = 0.0; gdouble d = 0; gdouble de = 0; gdouble xi = x-SAOrb[i].Stf[n].C[0]; gdouble yi = y-SAOrb[i].Stf[n].C[1]; gdouble zi = z-SAOrb[i].Stf[n].C[2]; gint ll = SAOrb[i].Stf[n].l[0]+ SAOrb[i].Stf[n].l[1]+ SAOrb[i].Stf[n].l[2]; d = (xi*xi)+(yi*yi)+(zi*zi); d = sqrt(d); de =d*SAOrb[i].Stf[n].Ex; if(de>40) return 1e-14; v = SAOrb[i].Stf[n].Coef*pow(d,SAOrb[i].Stf[n].pqn-1-ll)* pow(xi,SAOrb[i].Stf[n].l[0])* pow(yi,SAOrb[i].Stf[n].l[1])* pow(zi,SAOrb[i].Stf[n].l[2])* exp(-de); return v; } /**************************************************************/ gdouble get_value_CSTF(gdouble x,gdouble y,gdouble z,gint i) { gdouble v = 0.0; gint n; for(n=0;n40) return 1e-14; v = AOrb[i].Gtf[n].Coef* pow(xi,AOrb[i].Gtf[n].l[0])* pow(yi,AOrb[i].Gtf[n].l[1])* pow(zi,AOrb[i].Gtf[n].l[2])* exp(-d); return v; } /**************************************************************/ gdouble get_value_CGTF(gdouble x,gdouble y,gdouble z,gint i) { gdouble v = 0.0; gint n; for(n=0;n1e-10) v+=CoefAlphaOrbitals[k][i]*get_value_CBTF(x,y,z,i); } else for(i=0;i1e-10) v+=CoefBetaOrbitals[k][i]*get_value_CBTF(x,y,z,i); } return v; } /**************************************************************/ gdouble get_value_electronic_density_on_atom(gdouble x,gdouble y,gdouble z,gint n) { gdouble v1 = 0.0; gdouble v2 = 0.0; gdouble cgv = 0.0; gint i; gint k1; gint k2; gdouble *PhiAlpha = g_malloc(GeomOrb[n].NAlphaOrb*sizeof(gdouble)); gdouble *PhiBeta = g_malloc(GeomOrb[n].NBetaOrb*sizeof(gdouble)); for(k1=0;k11e-8) v1 += GeomOrb[n].OccAlphaOrbitals[k1]*PhiAlpha[k1]*PhiAlpha[k1]; v2 = 0.0; for(k2=0;k21e-8) v2 += GeomOrb[n].OccBetaOrbitals[k2]*PhiBeta[k2]*PhiBeta[k2]; g_free(PhiAlpha); g_free(PhiBeta); return v1+v2; } /**************************************************************/ gdouble get_value_electronic_density_atomic(gdouble x,gdouble y,gdouble z,gint dump) { gdouble v = 0.0; gint i; for(i=0;i1e-8) PhiAlpha[k1] += CoefAlphaOrbitals[k1][i]*cgv; for(k2=0;k21e-8) PhiBeta[k2] += CoefBetaOrbitals[k2][i]*cgv; } v1 = 0.0; for(k1=0;k11e-8) v1 += OccAlphaOrbitals[k1]*PhiAlpha[k1]*PhiAlpha[k1]; v2 = 0.0; for(k2=0;k21e-8) v2 += OccBetaOrbitals[k2]*PhiBeta[k2]*PhiBeta[k2]; g_free(PhiAlpha); g_free(PhiBeta); return v1+v2; } /**************************************************************/ gdouble get_value_electronic_density_bonds(gdouble x,gdouble y,gdouble z,gint dump) { gdouble v = 0.0; v = get_value_electronic_density(x,y,z,dump); v -= get_value_electronic_density_atomic(x,y,z,dump); return v; } /**************************************************************/ gdouble get_value_spin_density(gdouble x,gdouble y,gdouble z,gint dump) { gdouble v1 = 0.0; gdouble v2 = 0.0; gdouble cgv = 0.0; gint i; gint k1; gint k2; gdouble *PhiAlpha = g_malloc(NAlphaOrb*sizeof(gdouble)); gdouble *PhiBeta = g_malloc(NBetaOrb*sizeof(gdouble)); for(k1=0;k11e-8) v1 += OccAlphaOrbitals[k1]*PhiAlpha[k1]*PhiAlpha[k1]; v2 = 0.0; for(k2=0;k21e-8) v2 += OccBetaOrbitals[k2]*PhiBeta[k2]*PhiBeta[k2]; g_free(PhiAlpha); g_free(PhiBeta); return v1-v2; } /**************************************************************/ gdouble get_value_electrostatic_potential(gdouble x,gdouble y,gdouble z,gdouble* XkXl) { gdouble v = 0.0; gint i; gint j; gint k; gint kl = 0; gdouble C[] = {x,y,z}; gdouble schwarzCutOff = 1e-2; if(!AOrb) return 0; for(i=0;ischwarzCutOff) XkXl[kl++] = ionicPotentialCGTF(&AOrb[i], &AOrb[j], C, 1.0); else XkXl[kl++] = 0; } /*if(kl!=NAOrb*(NAOrb+1)/2) exit(1);*/ if(kl!=NAOrb*(NAOrb+1)/2) printf("Erreur\n"); v = 0; for(k=0;k1e-8) { kl = 0; for(i=0;i1e-8) { kl = 0; for(i=0;iN[0];i++) for(j=0;jN[1];j++) for(k=0;kN[2];k++) if(grid->point[i][j][k].C[3]<0 && fabs(grid->point[i][j][k].C[3])>PRECISION) return FALSE; return TRUE; } /**************************************************************/ void reset_limits_for_grid(Grid* grid) { gint i,j,k; gdouble v; v = grid->point[0][0][0].C[3]; grid->limits.MinMax[0][3] = v; grid->limits.MinMax[1][3] = v; if(!CancelCalcul) #ifdef ENABLE_OMP #pragma omp parallel for private(v,i,j,k) #endif for(i=0;iN[0];i++) for(j=0;jN[1];j++) for(k=0;kN[2];k++) { v = grid->point[i][j][k].C[3]; if(grid->limits.MinMax[0][3]>v) grid->limits.MinMax[0][3] = v; if(grid->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } /**************************************************************/ Grid* grid_point_alloc(gint N[],GridLimits limits) { Grid* grid = g_malloc(sizeof(Grid)); gint i,j; grid->N[0] = N[0]; grid->N[1] = N[1]; grid->N[2] = N[2]; grid->point = g_malloc( grid->N[0]*sizeof(Point5**)); for(i=0;i< grid->N[0] ;i++) { grid->point[i] = g_malloc(grid->N[1]*sizeof(Point5*)); for(j=0;j< grid->N[1] ;j++) grid->point[i][j] = g_malloc(grid->N[2]*sizeof(Point5)); } grid->limits = limits; grid->mapped = FALSE; return grid; } /**************************************************************/ Grid* free_grid(Grid* localGrid) { gint i,j; gboolean id = (localGrid==grid); if(!localGrid) return NULL; for(i=0;i< localGrid->N[0] ;i++) { for(j=0;j< localGrid->N[1] ;j++) g_free(localGrid->point[i][j]); g_free(localGrid->point[i]); } g_free(localGrid->point); g_free(localGrid); localGrid=NULL; if(id) { GtkWidget* handleBoxColorMapGrid = g_object_get_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapGrid "); color_map_hide(handleBoxColorMapGrid); } return localGrid; } /**************************************************************/ Grid* copyGrid(Grid* grid) { Grid *newGrid = NULL; gint i,j,k; newGrid = grid_point_alloc(grid->N,grid->limits); for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { newGrid->point[i][j][k].C[0] = grid->point[i][j][k].C[0]; newGrid->point[i][j][k].C[1] = grid->point[i][j][k].C[1]; newGrid->point[i][j][k].C[2] = grid->point[i][j][k].C[2]; newGrid->point[i][j][k].C[3] = grid->point[i][j][k].C[3]; } } } return newGrid; } /**************************************************************/ void print_grid_point(Grid* grid) { gint i; gint j; gint k; gint n=-1; printf("%d %d %d \n",grid->N[0],grid->N[1],grid->N[2]); for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { n++; printf("%lf %lf %lf %lf \n", grid->point[i][j][k].C[0], grid->point[i][j][k].C[1], grid->point[i][j][k].C[2], grid->point[i][j][k].C[3]); } } } printf("Vlimits = %lf %lf \n", grid->limits.MinMax[0][3] , grid->limits.MinMax[1][3] ); } /**************************************************************/ Grid* define_grid_point_fed(gint N[],GridLimits limits,gint n) { Grid* grid; gint i; gint j; gint k; gdouble x; gdouble y; gdouble z; gdouble v; gdouble scale; gdouble V0[3]; gdouble V1[3]; gdouble V2[3]; gdouble firstPoint[3]; gdouble eHOMO = get_energy_homo(); gdouble eLUMO = get_energy_lumo(); gdouble alpha = alphaFED*AUTOEV; /* gdouble alpha = alphaFED;*/ if(eHOMO>1e8) return NULL; if(eLUMO>1e8 && n!=0) return NULL; grid = grid_point_alloc(N,limits); for(i=0;i<3;i++) { V0[i] = firstDirection[i] *(grid->limits.MinMax[1][0]-grid->limits.MinMax[0][0]); V1[i] = secondDirection[i]*(grid->limits.MinMax[1][1]-grid->limits.MinMax[0][1]); V2[i] = thirdDirection[i] *(grid->limits.MinMax[1][2]-grid->limits.MinMax[0][2]); } for(i=0;i<3;i++) { firstPoint[i] = V0[i] + V1[i] + V2[i]; /* firstPoint[i] = originOfCube[i] - firstPoint[i]/2;*/ firstPoint[i] = limits.MinMax[0][i]; } for(i=0;i<3;i++) { V0[i] /= grid->N[0]-1; V1[i] /= grid->N[1]-1; V2[i] /= grid->N[2]-1; } progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); scale = (gdouble)1.01/grid->N[0]; /* printf("Alpha = %f, n = %d eH = %f eL = %f\n",alpha,n,eHOMO, eLUMO);*/ #ifdef ENABLE_OMP printf("# proc = %d\n", omp_get_num_procs ()); #ifdef G_OS_WIN32 setTextInProgress(_("Computing of grid, pleasse wait...")); #endif #pragma omp parallel for private(x,y,z,v,i,j,k) #endif for(i=0;iN[0];i++) { if(!CancelCalcul) for(j=0;jN[1];j++) for(k=0;kN[2];k++) { x = firstPoint[0] + i*V0[0] + j*V1[0] + k*V2[0]; y = firstPoint[1] + i*V0[1] + j*V1[1] + k*V2[1]; z = firstPoint[2] + i*V0[2] + j*V1[2] + k*V2[2]; v = get_value_fed( x, y, z, alpha, n, eHOMO, eLUMO); grid->point[i][j][k].C[0] = x; grid->point[i][j][k].C[1] = y; grid->point[i][j][k].C[2] = z; grid->point[i][j][k].C[3] = v; } #ifdef ENABLE_OMP #ifndef G_OS_WIN32 #pragma omp critical progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); #endif #else progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); #endif } if(CancelCalcul) progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); v = grid->point[0][0][0].C[3]; grid->limits.MinMax[0][3] = v; grid->limits.MinMax[1][3] = v; if(!CancelCalcul) #ifdef ENABLE_OMP #pragma omp parallel for private(v,i,j,k) #endif for(i=0;iN[0];i++) for(j=0;jN[1];j++) for(k=0;kN[2];k++) { v = grid->point[i][j][k].C[3]; if(grid->limits.MinMax[0][3]>v) grid->limits.MinMax[0][3] = v; if(grid->limits.MinMax[1][3]limits.MinMax[1][3] = v; } if(CancelCalcul) { grid = free_grid(grid); } return grid; } /**************************************************************/ Grid* define_grid_point(gint N[],GridLimits limits,Func3d func) { Grid* grid; gint i; gint j; gint k; gdouble x; gdouble y; gdouble z; gdouble v; gdouble scale; gdouble V0[3]; gdouble V1[3]; gdouble V2[3]; gdouble firstPoint[3]; grid = grid_point_alloc(N,limits); for(i=0;i<3;i++) { V0[i] = firstDirection[i] *(grid->limits.MinMax[1][0]-grid->limits.MinMax[0][0]); V1[i] = secondDirection[i]*(grid->limits.MinMax[1][1]-grid->limits.MinMax[0][1]); V2[i] = thirdDirection[i] *(grid->limits.MinMax[1][2]-grid->limits.MinMax[0][2]); } for(i=0;i<3;i++) { firstPoint[i] = V0[i] + V1[i] + V2[i]; /*firstPoint[i] = originOfCube[i] - firstPoint[i]/2;*/ firstPoint[i] = limits.MinMax[0][i]; } for(i=0;i<3;i++) { V0[i] /= grid->N[0]-1; V1[i] /= grid->N[1]-1; V2[i] /= grid->N[2]-1; } progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); scale = (gdouble)1.01/grid->N[0]; #ifdef ENABLE_OMP printf("# proc = %d\n", omp_get_num_procs ()); #ifdef G_OS_WIN32 setTextInProgress(_("Computing of grid, pleasse wait...")); #endif #pragma omp parallel for private(x,y,z,v,i,j,k) #endif for(i=0;iN[0];i++) { if(!CancelCalcul) for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { x = firstPoint[0] + i*V0[0] + j*V1[0] + k*V2[0]; y = firstPoint[1] + i*V0[1] + j*V1[1] + k*V2[1]; z = firstPoint[2] + i*V0[2] + j*V1[2] + k*V2[2]; v = func( x, y, z,NumSelOrb); grid->point[i][j][k].C[0] = x; grid->point[i][j][k].C[1] = y; grid->point[i][j][k].C[2] = z; grid->point[i][j][k].C[3] = v; } } #ifdef ENABLE_OMP #ifndef G_OS_WIN32 #pragma omp critical { /* printf("progress_orb\n");*/ progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); /* printf("end progress_orb\n");*/ } #endif #else progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); #endif } /* printf("end loop\n");*/ if(CancelCalcul) progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); v = grid->point[0][0][0].C[3]; grid->limits.MinMax[0][3] = v; grid->limits.MinMax[1][3] = v; if(!CancelCalcul) #ifdef ENABLE_OMP #pragma omp parallel for private(v,i,j,k) #endif for(i=0;iN[0];i++) for(j=0;jN[1];j++) for(k=0;kN[2];k++) { v = grid->point[i][j][k].C[3]; if(grid->limits.MinMax[0][3]>v) grid->limits.MinMax[0][3] = v; if(grid->limits.MinMax[1][3]limits.MinMax[1][3] = v; } if(CancelCalcul) { grid = free_grid(grid); } return grid; } /**************************************************************/ Grid* define_grid(gint N[],GridLimits limits) { Grid *grid = NULL; set_status_label_info(_("Grid"),_("Computing")); CancelCalcul = FALSE; /* printf("Begin dfine_grid\n");*/ switch(TypeGrid) { case GABEDIT_TYPEGRID_ORBITAL : grid = define_grid_point(N,limits,get_value_orbital); break; case GABEDIT_TYPEGRID_EDENSITY : grid = define_grid_point(N,limits,get_value_electronic_density); break; case GABEDIT_TYPEGRID_DDENSITY : grid = define_grid_point(N,limits,get_value_electronic_density_bonds); break; case GABEDIT_TYPEGRID_ADENSITY : grid = define_grid_point(N,limits,get_value_electronic_density_atomic); break; case GABEDIT_TYPEGRID_SDENSITY : grid = define_grid_point(N,limits,get_value_spin_density); break; case GABEDIT_TYPEGRID_ELFBECKE : grid = define_grid_point(N,limits,get_value_elf_becke); break; case GABEDIT_TYPEGRID_ELFSAVIN : grid = define_grid_point(N,limits,get_value_elf_savin); break; case GABEDIT_TYPEGRID_FEDELECTROPHILIC : grid = define_grid_point_fed( N, limits,0); break; case GABEDIT_TYPEGRID_FEDRADICAL : grid = define_grid_point_fed( N, limits,1); break; case GABEDIT_TYPEGRID_FEDNUCLEOPHILIC : grid = define_grid_point_fed( N, limits,2); break; case GABEDIT_TYPEGRID_SAS : case GABEDIT_TYPEGRID_SASMAP : grid = define_grid_point(N,limits,get_value_sas); break; case GABEDIT_TYPEGRID_MEP_CHARGES : grid = compute_mep_grid_using_partial_charges(N, limits); break; case GABEDIT_TYPEGRID_MEP_MULTIPOL : grid = compute_mep_grid_using_multipol_from_orbitals(N, limits, get_multipole_rank()); break; case GABEDIT_TYPEGRID_MEP_CG : grid = solve_poisson_equation_from_orbitals(N,limits, GABEDIT_CG); break; case GABEDIT_TYPEGRID_MEP_MG : grid = solve_poisson_equation_from_orbitals(N,limits, GABEDIT_MG); break; case GABEDIT_TYPEGRID_MEP_EXACT : grid = compute_mep_grid_exact(N,limits); break; case GABEDIT_TYPEGRID_NCI : break; } /* printf("end dfine_grid\n");*/ if(grid) set_status_label_info(_("Grid"),_("Ok")); else set_status_label_info(_("Grid"),_("Nothing")); /* printf("end dfine_grid\n");*/ return grid; } /*********************************************************************************/ Grid* compute_fed_grid_using_cube_grid(Grid* grid, gint n) { if(!grid) return NULL; return define_grid_point_fed(grid->N,grid->limits,n); } /**************************************************************/ Grid* define_grid_electronic_density(gint N[],GridLimits limits) { Grid *grid = NULL; GabEditTypeGrid TypeGridOld = TypeGrid; gchar* t = g_strdup_printf(_("Computing Grid for electronic density")); set_status_label_info(_("Grid"),t); g_free(t); CancelCalcul = FALSE; TypeGrid = GABEDIT_TYPEGRID_EDENSITY; grid = define_grid_point(N,limits,get_value_electronic_density); TypeGrid = TypeGridOld; if(grid) set_status_label_info(_("Grid"),_("Ok")); else set_status_label_info(_("Grid"),_("Nothing")); return grid; } /**************************************************************/ Grid* define_grid_FED(gint N[],GridLimits limits, gint n) { Grid *grid = NULL; GabEditTypeGrid TypeGridOld = TypeGrid; gchar* t = NULL; if(n==0) t = g_strdup_printf(_("Computing FED Grid for a electrophilic reaction")); else if(n==2) t = g_strdup_printf(_("Computing FED Grid for a nucleophilic reaction")); else t = g_strdup_printf(_("Computing FED Grid for a radical reaction")); set_status_label_info(_("Grid"),t); g_free(t); CancelCalcul = FALSE; if(n==0) TypeGrid = GABEDIT_TYPEGRID_FEDELECTROPHILIC; else if(n==2) TypeGrid = GABEDIT_TYPEGRID_FEDNUCLEOPHILIC; else TypeGrid = GABEDIT_TYPEGRID_FEDRADICAL; grid = define_grid_point_fed(N,limits,n); TypeGrid = TypeGridOld; if(grid) set_status_label_info(_("Grid"),_("Ok")); else set_status_label_info(_("Grid"),_("Nothing")); return grid; } /**************************************************************/ Grid* define_grid_ELFBECKE(gint N[],GridLimits limits) { Grid *grid = NULL; GabEditTypeGrid TypeGridOld = TypeGrid; gchar* t = g_strdup_printf(_("Computing Grid for ELF(Becke)")); set_status_label_info(_("Grid"),t); g_free(t); CancelCalcul = FALSE; TypeGrid = GABEDIT_TYPEGRID_ELFBECKE; grid = define_grid_point(N,limits,get_value_elf_becke); TypeGrid = TypeGridOld; if(grid) set_status_label_info(_("Grid"),_("Ok")); else set_status_label_info(_("Grid"),_("Nothing")); return grid; } /**************************************************************/ Grid* define_grid_ELFSAVIN(gint N[],GridLimits limits) { Grid *grid = NULL; GabEditTypeGrid TypeGridOld = TypeGrid; gchar* t = g_strdup_printf(_("Computing Grid for ELF(Savin)")); set_status_label_info(_("Grid"),t); g_free(t); CancelCalcul = FALSE; TypeGrid = GABEDIT_TYPEGRID_ELFSAVIN; grid = define_grid_point(N,limits,get_value_elf_savin); TypeGrid = TypeGridOld; if(grid) set_status_label_info(_("Grid"),_("Ok")); else set_status_label_info(_("Grid"),_("Nothing")); return grid; } /**************************************************************/ Grid* define_grid_orb(gint N[],GridLimits limits, gint typeOrb, gint i) { Grid *grid = NULL; GabEditTypeGrid TypeGridOld = TypeGrid; gint TypeSelOrbOld = TypeSelOrb; gint NumSelOrbOld = NumSelOrb; gchar* t = g_strdup_printf(_("Computing Grid for orb # %d"),i); set_status_label_info(_("Grid"),t); g_free(t); CancelCalcul = FALSE; TypeGrid = GABEDIT_TYPEGRID_ORBITAL; TypeSelOrb = typeOrb; NumSelOrb = i; grid = define_grid_point(N,limits,get_value_orbital); TypeGrid = TypeGridOld; TypeSelOrb = TypeSelOrbOld; NumSelOrb = NumSelOrbOld; if(grid) set_status_label_info(_("Grid"),_("Ok")); else set_status_label_info(_("Grid"),_("Nothing")); return grid; } /**************************************************************/ gboolean compute_coulomb_integrale_iijj(gint N[],GridLimits limits, gint typeOrbi, gint i, gint typeOrbj, gint j, gdouble* pInteg, gdouble* pNormi, gdouble* pNormj, gdouble* pOverlap) { Grid *gridi = NULL; Grid *gridj = NULL; gint ki,li,mi; gint kj,lj,mj; gdouble scale; gdouble normi = 0; gdouble normj = 0; gdouble overlap = 0; gdouble r12 = 0; gdouble xx,yy,zz; gdouble integ = 0; gdouble dv = 0; gdouble PRECISION = 1e-10; *pInteg = -1; *pNormi = -1; *pNormj = -1; *pOverlap = -1; gridi = define_grid_orb(N, limits, typeOrbi, i); if(!gridi) return FALSE; gridj = 0; gridj = define_grid_orb(N, limits, typeOrbj, j); if(!gridj) return FALSE; set_status_label_info(_("Grid"),_("Comp. phi_i^2 and phi_j^2")); scale = (gdouble)1.01/gridi->N[0]; progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); #ifdef ENABLE_OMP printf("# proc = %d\n", omp_get_num_procs ()); #ifdef G_OS_WIN32 setTextInProgress(_("Computing of phi_i and phi_j, pleasse wait...")); #endif #pragma omp parallel for private(ki,li,mi) reduction(+:overlap) #endif for(ki=0;kiN[0];ki++) { if(!CancelCalcul) for(li=0;liN[1];li++) { for(mi=0;miN[2];mi++) { overlap += gridi->point[ki][li][mi].C[3]*gridj->point[ki][li][mi].C[3]; gridi->point[ki][li][mi].C[3] = gridi->point[ki][li][mi].C[3]* gridi->point[ki][li][mi].C[3]; gridj->point[ki][li][mi].C[3] = gridj->point[ki][li][mi].C[3]* gridj->point[ki][li][mi].C[3]; } } #ifdef ENABLE_OMP #ifndef G_OS_WIN32 #pragma omp critical progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); #endif #else progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); #endif } progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); set_status_label_info(_("Grid"),_("Comp. ")); scale = (gdouble)1.01/gridi->N[0]; #ifdef ENABLE_OMP #ifdef G_OS_WIN32 setTextInProgress(_("Computing of , please wait...")); #endif #pragma omp parallel for private(ki,li,mi) reduction(+:normi) #endif for(ki=0;kiN[0];ki++) { if(!CancelCalcul) for(li=0;liN[1];li++) for(mi=0;miN[2];mi++) normi += gridi->point[ki][li][mi].C[3]; #ifdef ENABLE_OMP #ifndef G_OS_WIN32 #pragma omp critical progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); #endif #else progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); #endif } progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); set_status_label_info(_("Grid"),_("Comp. ")); scale = (gdouble)1.01/gridj->N[0]; #ifdef ENABLE_OMP #ifdef G_OS_WIN32 setTextInProgress(_("Computing of , please wait...")); #endif #pragma omp parallel for private(ki,li,mi) reduction(+:normj) #endif for(ki=0;kiN[0];ki++) { if(!CancelCalcul) for(li=0;liN[1];li++) for(mi=0;miN[2];mi++) normj += gridj->point[ki][li][mi].C[3]; #ifdef ENABLE_OMP #ifndef G_OS_WIN32 #pragma omp critical progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); #endif #else progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); #endif } progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); if(CancelCalcul) { free_grid(gridi); free_grid(gridj); return FALSE; } set_status_label_info(_("Grid"),_("Computing of Coulomb int.")); scale = (gdouble)1.01/gridi->N[0]; progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); #ifdef ENABLE_OMP #ifdef G_OS_WIN32 setTextInProgress(_("Computing of Coulomb integral, please wait...")); #endif #pragma omp parallel for private(xx,yy,zz,r12,ki,li,mi,kj,lj,mj) reduction(+:integ) #endif for(ki=0;kiN[0];ki++) { if(!CancelCalcul) for(li=0;liN[1];li++) for(mi=0;miN[2];mi++) for(kj=0;kjN[0];kj++) for(lj=0;ljN[1];lj++) for(mj=0;mjN[2];mj++) { xx = gridi->point[ki][li][mi].C[0]-gridj->point[kj][lj][mj].C[0]; yy = gridi->point[ki][li][mi].C[1]-gridj->point[kj][lj][mj].C[1]; zz = gridi->point[ki][li][mi].C[2]-gridj->point[kj][lj][mj].C[2]; r12 = xx*xx+yy*yy+zz*zz; if(r12>PRECISION) integ += gridi->point[ki][li][mi].C[3]*gridj->point[kj][lj][mj].C[3]/sqrt(r12); } #ifdef ENABLE_OMP #ifndef G_OS_WIN32 #pragma omp critical progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); #endif #else progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); #endif } progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); xx = gridi->point[1][0][0].C[0]-gridi->point[0][0][0].C[0]; yy = gridi->point[0][1][0].C[1]-gridi->point[0][0][0].C[1]; zz = gridi->point[0][0][1].C[2]-gridi->point[0][0][0].C[2]; dv = fabs(xx*yy*zz); free_grid(gridi); free_grid(gridj); if(CancelCalcul) return FALSE; *pInteg = integ*dv*dv; *pNormi = normi*dv; *pNormj = normj*dv; *pOverlap = overlap*dv; return TRUE; } /*********************************************************************************/ void reset_boundary(Grid* grid, gint nBoundary) { gint i; gint j; gint k; /* left */ for(i=0;iN[1];j++) for(k=0;kN[2];k++) grid->point[i][j][k].C[3] = grid->point[nBoundary][j][k].C[3]; /* right */ for(i=grid->N[0]-nBoundary;iN[0];i++) for(j=0;jN[1];j++) for(k=0;kN[2];k++) grid->point[i][j][k].C[3] = grid->point[grid->N[0]-nBoundary-1][j][k].C[3]; /* front */ for(j=0;jN[0];i++) for(k=0;kN[2];k++) grid->point[i][j][k].C[3] = grid->point[i][nBoundary][k].C[3]; /* back */ for(j=grid->N[1]-nBoundary;jN[1];j++) for(i=0;iN[0];i++) for(k=0;kN[2];k++) grid->point[i][j][k].C[3] = grid->point[i][grid->N[1]-nBoundary-1][k].C[3]; /* top */ for(k=0;kN[1];j++) for(i=0;iN[0];i++) grid->point[i][j][k].C[3] = grid->point[i][j][nBoundary].C[3]; /* bottom */ for(k=grid->N[2]-nBoundary;kN[2];k++) for(j=0;jN[1];j++) for(i=0;iN[0];i++) grid->point[i][j][k].C[3] = grid->point[i][j][grid->N[2]-nBoundary-1].C[3]; } /*******************************************************************************************/ Grid* get_grid_laplacian(Grid* grid, gint nBoundary) { gint i; gint j; gint k; gdouble v; Grid* lapGrid = NULL; gdouble xh, yh, zh; gdouble a, b, c; gint N[3] = {0,0,0}; gdouble* fcx = NULL; gdouble* fcy = NULL; gdouble* fcz = NULL; gdouble cc = 0; GridLimits limits; gdouble scale = 0; gint n; gboolean beg = TRUE; if(grid==NULL) return NULL; if(nBoundary<1) return NULL; if(grid->N[0]<=2*nBoundary) return NULL; if(grid->N[1]<=2*nBoundary) return NULL; if(grid->N[2]<=2*nBoundary) return NULL; for(n=0;n<3;n++) N[n] = grid->N[n]; i = 1; j = 0; k = 0; a = grid->point[i][j][k].C[0]-grid->point[0][0][0].C[0]; b = grid->point[i][j][k].C[1]-grid->point[0][0][0].C[1]; c = grid->point[i][j][k].C[2]-grid->point[0][0][0].C[2]; xh = sqrt(a*a+b*b+c*c); i = 0; j = 1; k = 0; a = grid->point[i][j][k].C[0]-grid->point[0][0][0].C[0]; b = grid->point[i][j][k].C[1]-grid->point[0][0][0].C[1]; c = grid->point[i][j][k].C[2]-grid->point[0][0][0].C[2]; yh = sqrt(a*a+b*b+c*c); i = 0; j = 0; k = 1; a = grid->point[i][j][k].C[0]-grid->point[0][0][0].C[0]; b = grid->point[i][j][k].C[1]-grid->point[0][0][0].C[1]; c = grid->point[i][j][k].C[2]-grid->point[0][0][0].C[2]; zh = sqrt(a*a+b*b+c*c); fcx = g_malloc((nBoundary+1)*sizeof(gdouble)); fcy = g_malloc((nBoundary+1)*sizeof(gdouble)); fcz = g_malloc((nBoundary+1)*sizeof(gdouble)); getCoefsLaplacian(nBoundary, xh, yh, zh, fcx, fcy, fcz, &cc); limits.MinMax[0][0] = grid->limits.MinMax[0][0]; limits.MinMax[1][0] = grid->limits.MinMax[1][0]; limits.MinMax[0][1] = grid->limits.MinMax[0][1]; limits.MinMax[1][1] = grid->limits.MinMax[1][1]; limits.MinMax[0][2] = grid->limits.MinMax[0][2]; limits.MinMax[1][2] = grid->limits.MinMax[1][2]; lapGrid = grid_point_alloc(N,limits); progress_orb(0,GABEDIT_PROGORB_COMPLAPGRID,TRUE); scale = (gdouble)1.01/lapGrid->N[0]; for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { lapGrid->point[i][j][k].C[0] = grid->point[i][j][k].C[0]; lapGrid->point[i][j][k].C[1] = grid->point[i][j][k].C[1]; lapGrid->point[i][j][k].C[2] = grid->point[i][j][k].C[2]; lapGrid->point[i][j][k].C[3] = 0; } } } for(i=nBoundary;iN[0]-nBoundary;i++) { for(j=nBoundary;jN[1]-nBoundary;j++) { for(k=nBoundary;kN[2]-nBoundary;k++) { v = cc*grid->point[i][j][k].C[3]; for(n=1;n<=nBoundary;n++) { v += fcx[n] *(grid->point[i-n][j][k].C[3]+grid->point[i+n][j][k].C[3]); v += fcy[n] *(grid->point[i][j-n][k].C[3]+grid->point[i][j+n][k].C[3]); v += fcz[n] *(grid->point[i][j][k-n].C[3]+grid->point[i][j][k+n].C[3]); } lapGrid->point[i][j][k].C[3] = v; if(beg) { beg = FALSE; lapGrid->limits.MinMax[0][3] = v; lapGrid->limits.MinMax[1][3] = v; } else { if(lapGrid->limits.MinMax[0][3]>v) lapGrid->limits.MinMax[0][3] = v; if(lapGrid->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPLAPGRID,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_COMPLAPGRID,FALSE); } if(CancelCalcul) { lapGrid = free_grid(lapGrid); } else { reset_boundary(lapGrid, nBoundary); } g_free(fcx); g_free(fcy); g_free(fcz); return lapGrid; } /*************************************************************************************/ Grid* get_grid_norm_gradient(Grid* grid, gint nBoundary) { gint i; gint j; gint k; gint kn; Grid* gardGrid = NULL; gdouble xh, yh, zh; gdouble a, b, c; gint N[3] = {0,0,0}; gdouble* fcx = NULL; gdouble* fcy = NULL; gdouble* fcz = NULL; gdouble cc = 0; GridLimits limits; gdouble scale = 0; gint n; gboolean beg = TRUE; gdouble gx, gy, gz; if(grid==NULL) return NULL; if(nBoundary<1) return NULL; if(grid->N[0]<=2*nBoundary) return NULL; if(grid->N[1]<=2*nBoundary) return NULL; if(grid->N[2]<=2*nBoundary) return NULL; for(n=0;n<3;n++) N[n] = grid->N[n]; i = 1; j = 0; k = 0; a = grid->point[i][j][k].C[0]-grid->point[0][0][0].C[0]; b = grid->point[i][j][k].C[1]-grid->point[0][0][0].C[1]; c = grid->point[i][j][k].C[2]-grid->point[0][0][0].C[2]; xh = sqrt(a*a+b*b+c*c); i = 0; j = 1; k = 0; a = grid->point[i][j][k].C[0]-grid->point[0][0][0].C[0]; b = grid->point[i][j][k].C[1]-grid->point[0][0][0].C[1]; c = grid->point[i][j][k].C[2]-grid->point[0][0][0].C[2]; yh = sqrt(a*a+b*b+c*c); i = 0; j = 0; k = 1; a = grid->point[i][j][k].C[0]-grid->point[0][0][0].C[0]; b = grid->point[i][j][k].C[1]-grid->point[0][0][0].C[1]; c = grid->point[i][j][k].C[2]-grid->point[0][0][0].C[2]; zh = sqrt(a*a+b*b+c*c); fcx = g_malloc((nBoundary)*sizeof(gdouble)); fcy = g_malloc((nBoundary)*sizeof(gdouble)); fcz = g_malloc((nBoundary)*sizeof(gdouble)); getCoefsGradient(nBoundary, xh, yh, zh, fcx, fcy, fcz); limits.MinMax[0][0] = grid->limits.MinMax[0][0]; limits.MinMax[1][0] = grid->limits.MinMax[1][0]; limits.MinMax[0][1] = grid->limits.MinMax[0][1]; limits.MinMax[1][1] = grid->limits.MinMax[1][1]; limits.MinMax[0][2] = grid->limits.MinMax[0][2]; limits.MinMax[1][2] = grid->limits.MinMax[1][2]; gardGrid = grid_point_alloc(N,limits); progress_orb(0,GABEDIT_PROGORB_COMPGRADGRID,TRUE); scale = (gdouble)1.01/gardGrid->N[0]; for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { gardGrid->point[i][j][k].C[0] = grid->point[i][j][k].C[0]; gardGrid->point[i][j][k].C[1] = grid->point[i][j][k].C[1]; gardGrid->point[i][j][k].C[2] = grid->point[i][j][k].C[2]; gardGrid->point[i][j][k].C[3] = 0; } } } for(i=nBoundary;iN[0]-nBoundary;i++) { for(j=nBoundary;jN[1]-nBoundary;j++) { for(k=nBoundary;kN[2]-nBoundary;k++) { gx = gy = gz = 0.0; for(n=-nBoundary, kn=0 ; knpoint[i+n][j][k].C[3]-grid->point[i-n][j][k].C[3]); gy += fcy[kn] * (grid->point[i][j+n][k].C[3]-grid->point[i][j-n][k].C[3]); gz += fcz[kn] * (grid->point[i][j][k+n].C[3]-grid->point[i][j][k-n].C[3]) ; } gardGrid->point[i][j][k].C[3] = sqrt(gx*gx+gy*gy+gz*gz); if(beg) { beg = FALSE; gardGrid->limits.MinMax[0][3] = gardGrid->point[i][j][k].C[3]; gardGrid->limits.MinMax[1][3] = gardGrid->point[i][j][k].C[3]; } else { if(gardGrid->limits.MinMax[0][3]>gardGrid->point[i][j][k].C[3]) gardGrid->limits.MinMax[0][3] = gardGrid->point[i][j][k].C[3]; if(gardGrid->limits.MinMax[1][3]point[i][j][k].C[3]) gardGrid->limits.MinMax[1][3] = gardGrid->point[i][j][k].C[3]; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPGRADGRID,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_COMPGRADGRID,FALSE); } if(CancelCalcul) { gardGrid = free_grid(gardGrid); } else { reset_boundary(gardGrid, nBoundary); } g_free(fcx); g_free(fcy); g_free(fcz); return gardGrid; } /*******************************************************************************************/ Grid* get_grid_sign_lambda2_density(Grid* grid, gint nBoundary) { gint i; gint j; gint k; gint kn; Grid* sl2Grid = NULL; gdouble xh, yh, zh; gdouble a, b, c; gint N[3] = {0,0,0}; gdouble* fcx = NULL; gdouble* fcy = NULL; gdouble* fcz = NULL; gdouble cc = 0; GridLimits limits; gdouble scale = 0; gint n; gboolean beg = TRUE; gdouble gx, gy, gz; gdouble PRECISION = 1.0e-60; gdouble lambda2; gdouble* lfcx = NULL; gdouble* lfcy = NULL; gdouble* lfcz = NULL; gdouble rho; gdouble lcc; if(grid==NULL) return NULL; if(nBoundary<1) return NULL; if(grid->N[0]<=2*nBoundary) return NULL; if(grid->N[1]<=2*nBoundary) return NULL; if(grid->N[2]<=2*nBoundary) return NULL; for(n=0;n<3;n++) N[n] = grid->N[n]; i = 1; j = 0; k = 0; a = grid->point[i][j][k].C[0]-grid->point[0][0][0].C[0]; b = grid->point[i][j][k].C[1]-grid->point[0][0][0].C[1]; c = grid->point[i][j][k].C[2]-grid->point[0][0][0].C[2]; xh = sqrt(a*a+b*b+c*c); i = 0; j = 1; k = 0; a = grid->point[i][j][k].C[0]-grid->point[0][0][0].C[0]; b = grid->point[i][j][k].C[1]-grid->point[0][0][0].C[1]; c = grid->point[i][j][k].C[2]-grid->point[0][0][0].C[2]; yh = sqrt(a*a+b*b+c*c); i = 0; j = 0; k = 1; a = grid->point[i][j][k].C[0]-grid->point[0][0][0].C[0]; b = grid->point[i][j][k].C[1]-grid->point[0][0][0].C[1]; c = grid->point[i][j][k].C[2]-grid->point[0][0][0].C[2]; zh = sqrt(a*a+b*b+c*c); fcx = g_malloc((nBoundary)*sizeof(gdouble)); fcy = g_malloc((nBoundary)*sizeof(gdouble)); fcz = g_malloc((nBoundary)*sizeof(gdouble)); getCoefsGradient(nBoundary, xh, yh, zh, fcx, fcy, fcz); lfcx = g_malloc((nBoundary+1)*sizeof(gdouble)); lfcy = g_malloc((nBoundary+1)*sizeof(gdouble)); lfcz = g_malloc((nBoundary+1)*sizeof(gdouble)); getCoefsLaplacian(nBoundary, xh, yh, zh, lfcx, lfcy, lfcz, &lcc); limits.MinMax[0][0] = grid->limits.MinMax[0][0]; limits.MinMax[1][0] = grid->limits.MinMax[1][0]; limits.MinMax[0][1] = grid->limits.MinMax[0][1]; limits.MinMax[1][1] = grid->limits.MinMax[1][1]; limits.MinMax[0][2] = grid->limits.MinMax[0][2]; limits.MinMax[1][2] = grid->limits.MinMax[1][2]; sl2Grid = grid_point_alloc(N,limits); progress_orb(0,GABEDIT_PROGORB_COMPL2GRID,TRUE); scale = (gdouble)1.01/sl2Grid->N[0]; for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { sl2Grid->point[i][j][k].C[0] = grid->point[i][j][k].C[0]; sl2Grid->point[i][j][k].C[1] = grid->point[i][j][k].C[1]; sl2Grid->point[i][j][k].C[2] = grid->point[i][j][k].C[2]; sl2Grid->point[i][j][k].C[3] = grid->point[i][j][k].C[3]; } } } for(i=nBoundary;iN[0]-nBoundary;i++) { for(j=nBoundary;jN[1]-nBoundary;j++) { for(k=nBoundary;kN[2]-nBoundary;k++) { lambda2 = getLambda2(grid,i, j, k, fcx, fcy, fcz, lfcx, lfcy, lfcz, nBoundary); if(lambda2<0) sl2Grid->point[i][j][k].C[3] = -sl2Grid->point[i][j][k].C[3]; if(beg) { beg = FALSE; sl2Grid->limits.MinMax[0][3] = sl2Grid->point[i][j][k].C[3]; sl2Grid->limits.MinMax[1][3] = sl2Grid->point[i][j][k].C[3]; } else { if(sl2Grid->limits.MinMax[0][3]>sl2Grid->point[i][j][k].C[3]) sl2Grid->limits.MinMax[0][3] = sl2Grid->point[i][j][k].C[3]; if(sl2Grid->limits.MinMax[1][3]point[i][j][k].C[3]) sl2Grid->limits.MinMax[1][3] = sl2Grid->point[i][j][k].C[3]; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPL2GRID,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_COMPL2GRID,FALSE); } if(CancelCalcul) { sl2Grid = free_grid(sl2Grid); } else { reset_boundary(sl2Grid, nBoundary); } g_free(fcx); g_free(fcy); g_free(fcz); g_free(lfcx); g_free(lfcy); g_free(lfcz); return sl2Grid; } /*********************************************************************************/ static gdouble get_grad_value_STF(gdouble x,gdouble y,gdouble z,gint i,gint n,gint id) { /* gdouble v = 0.0; gdouble d = 0; gdouble xi = x-SAOrb[i].Stf[n].C[0]; gdouble yi = y-SAOrb[i].Stf[n].C[1]; gdouble zi = z-SAOrb[i].Stf[n].C[2]; gint l[3] = {SAOrb[i].Stf[n].l[0],SAOrb[i].Stf[n].l[1],SAOrb[i].Stf[n].l[2]}; d = (xi*xi)+(yi*yi)+(zi*zi); d *=SAOrb[i].Stf[n].Ex; if(d>40) return 1e-14; d = exp(-d); l[id]++; v = -2*SAOrb[i].Stf[n].Ex*SAOrb[i].Stf[n].Coef* pow(xi,l[0])* pow(yi,l[1])* pow(zi,l[2])*d; l[id]-=2; if(l[id]>=0) v+= (l[id]+1)*SAOrb[i].Stf[n].Coef* pow(xi,l[0])* pow(yi,l[1])* pow(zi,l[2])*d; return v; */ return 0; } /*********************************************************************************/ static gdouble get_grad_value_CSTF(gdouble x,gdouble y,gdouble z,gint i, gint id) { gdouble v = 0.0; gint n; for(n=0;n40) return 1e-14; d = exp(-d); l[id]++; v = -2*AOrb[i].Gtf[n].Ex*AOrb[i].Gtf[n].Coef* pow(xi,l[0])* pow(yi,l[1])* pow(zi,l[2])*d; l[id]-=2; if(l[id]>=0) v+= (l[id]+1)*AOrb[i].Gtf[n].Coef* pow(xi,l[0])* pow(yi,l[1])* pow(zi,l[2])*d; return v; } /*********************************************************************************/ static gdouble get_grad_value_CGTF(gdouble x,gdouble y,gdouble z,gint i, gint id) { gdouble v = 0.0; gint n; for(n=0;n1e-10) v+=CoefAlphaOrbitals[k][i]*get_grad_value_CBTF(x,y,z,i,id); } else for(i=0;i1e-10) v+=CoefBetaOrbitals[k][i]*get_grad_value_CBTF(x,y,z,i,id); } return v; } */ /*********************************************************************************/ /* static gdouble get_norm2_grad_value_orbital(gdouble x,gdouble y,gdouble z,gint k) { gdouble vx = get_grad_value_orbital( x, y, z, k, 0); gdouble vy = get_grad_value_orbital( x, y, z, k, 1); gdouble vz = get_grad_value_orbital( x, y, z, k, 2); return vx*vx+vy*vy+vz*vz; } */ /*********************************************************************************/ /* static gdouble get_norm_grad_value_orbital(gdouble x,gdouble y,gdouble z,gint k) { return sqrt(get_norm2_grad_value_orbital(x,y,z,k)); } */ /*********************************************************************************/ /* static gdouble get_grad_value_electronic_density(gdouble x,gdouble y,gdouble z,gint id) { gdouble v1 = 0.0; gdouble v2 = 0.0; gdouble cgv = 0.0; gdouble dcgv = 0.0; gint i; gint k1; gint k2; gdouble *PhiAlpha = g_malloc(NAlphaOrb*sizeof(gdouble)); gdouble *dPhiAlpha = g_malloc(NAlphaOrb*sizeof(gdouble)); gdouble *PhiBeta = g_malloc(NBetaOrb*sizeof(gdouble)); gdouble *dPhiBeta = g_malloc(NBetaOrb*sizeof(gdouble)); for(k1=0;k11e-8) { PhiAlpha[k1] += CoefAlphaOrbitals[k1][i]*cgv; dPhiAlpha[k1] += CoefAlphaOrbitals[k1][i]*dcgv; } for(k2=0;k21e-8) { PhiBeta[k2] += CoefBetaOrbitals[k2][i]*cgv; dPhiBeta[k2] += CoefBetaOrbitals[k2][i]*dcgv; } } v1 = 0.0; for(k1=0;k11e-8) v1 += OccAlphaOrbitals[k1]*PhiAlpha[k1]*dPhiAlpha[k1]; v2 = 0.0; for(k2=0;k21e-8) v2 += OccBetaOrbitals[k2]*PhiBeta[k2]*dPhiBeta[k2]; g_free(PhiAlpha); g_free(dPhiAlpha); g_free(PhiBeta); g_free(dPhiBeta); return 2*(v1+v2); } */ /*********************************************************************************/ /* static gdouble get_norm2_grad_value_electronic_density(gdouble x,gdouble y,gdouble z) { gdouble vx = get_grad_value_electronic_density( x, y, z, 0); gdouble vy = get_grad_value_electronic_density( x, y, z, 1); gdouble vz = get_grad_value_electronic_density( x, y, z, 2); return vx*vx+vy*vy+vz*vz; } */ /*********************************************************************************/ /* f (x,y,z) = (2 - n)/2 { [sum_j(1 to N) O_j Phi_j (x,y,z)^2 e^(-alpha(e_HOMO -e_j ))]/ [sum_j(1 to N) O_j e^(-alpha(e_HOMO -e_j ))] } + n/2 { [sum_j(1 to N) (2-O_j) Phi_j (x,y,z)^2 e^(+alpha(e_LUMO -e_j ))]/ [sum_j(1 to N) (2-O_j) e^(+alpha(e_LUMO -e_j ))] } n = 0 for an electrophilic reaction, 1 for a radical reaction, and 2 for a nucleophilic reaction. N is the number of orbitals. O_j is the number of electrons in orbital j. Phi_j(x,y,z) is the value of the orbital j at point (x,y,z). e_j is the energy of orbital j. */ static gdouble get_value_fed(gdouble x,gdouble y,gdouble z,gdouble alpha, gint n, gdouble eHOMO, gdouble eLUMO) { gdouble s1_1 = 0.0; gdouble s1_2 = 0.0; gdouble s2_1 = 0.0; gdouble s2_2 = 0.0; gdouble de = 0; gdouble d = 0; gdouble cgv; gint i; gint k1; gint k2; gdouble *PhiAlpha = g_malloc(NAlphaOrb*sizeof(gdouble)); gdouble *PhiBeta = g_malloc(NBetaOrb*sizeof(gdouble)); for(k1=0;k11e-8) { de = exp(-alpha*(eHOMO-EnerAlphaOrbitals[k1])); d = OccAlphaOrbitals[k1]*de; s1_1 += d*PhiAlpha[k1]; s1_2 += d; } if(n!=2) for(k1=0;k11e-8) { de = exp(-alpha*(eHOMO-EnerBetaOrbitals[k1])); d = OccBetaOrbitals[k1]* de; s1_1 += d*PhiBeta[k1]; s1_2 += d; } if(n!=0) for(k1=0;k11e-8) { de = exp(alpha*(eLUMO-EnerAlphaOrbitals[k1])); d = (1-OccAlphaOrbitals[k1])*de; s2_1 += d*PhiAlpha[k1]; s2_2 += d; } if(n!=0) for(k1=0;k11e-8) { de = exp(alpha*(eLUMO-EnerBetaOrbitals[k1])); d = (1-OccBetaOrbitals[k1])*de; s2_1 += d*PhiBeta[k1]; s2_2 += d; } g_free(PhiAlpha); g_free(PhiBeta); if(s1_2<1e-12) s1_2 = 1; if(s2_2<1e-12) s2_2 = 1; return (2.-n)/2.*s1_1/s1_2 + n/2.*s2_1/s2_2; } /****************************************************************/ static gdouble get_energy_homo() { gdouble e = 0; gint k; if(NAlphaOrb<1) return 1e10; e =EnerAlphaOrbitals[0]; for(k=1;k1e-8 && EnerAlphaOrbitals[k]>e) e =EnerAlphaOrbitals[k]; for(k=0;k1e-8 && EnerBetaOrbitals[k]>e) e = EnerBetaOrbitals[k]; return e; } /****************************************************************/ static gdouble get_energy_lumo() { gdouble e = 0; gint k; gboolean begin = TRUE; if(NAlphaOrb<1) return 1e10; e =EnerAlphaOrbitals[0]; for(k=0;k1e-8) { PhiAlpha[k1] += CoefAlphaOrbitals[k1][i]*cgv; dPhiAlphaX[k1] += CoefAlphaOrbitals[k1][i]*dcgvX; dPhiAlphaY[k1] += CoefAlphaOrbitals[k1][i]*dcgvY; dPhiAlphaZ[k1] += CoefAlphaOrbitals[k1][i]*dcgvZ; } for(k2=0;k21e-8) { PhiBeta[k2] += CoefBetaOrbitals[k2][i]*cgv; dPhiBetaX[k2] += CoefBetaOrbitals[k2][i]*dcgvX; dPhiBetaY[k2] += CoefBetaOrbitals[k2][i]*dcgvY; dPhiBetaZ[k2] += CoefBetaOrbitals[k2][i]*dcgvZ; } } v1X = 0.0; v1Y = 0.0; v1Z = 0.0; rho = 0; for(k1=0;k11e-8) { v1X += OccAlphaOrbitals[k1]*PhiAlpha[k1]*dPhiAlphaX[k1]; v1Y += OccAlphaOrbitals[k1]*PhiAlpha[k1]*dPhiAlphaY[k1]; v1Z += OccAlphaOrbitals[k1]*PhiAlpha[k1]*dPhiAlphaZ[k1]; rho += OccAlphaOrbitals[k1]*PhiAlpha[k1]*PhiAlpha[k1]; sphi += OccAlphaOrbitals[k1]*( dPhiAlphaX[k1]*dPhiAlphaX[k1] + dPhiAlphaY[k1]*dPhiAlphaY[k1] + dPhiAlphaZ[k1]*dPhiAlphaZ[k1] ); } v2X = 0.0; v2Y = 0.0; v2Z = 0.0; for(k2=0;k21e-8) { v2X += OccBetaOrbitals[k2]*PhiBeta[k2]*dPhiBetaX[k2]; v2Y += OccBetaOrbitals[k2]*PhiBeta[k2]*dPhiBetaY[k2]; v2Z += OccBetaOrbitals[k2]*PhiBeta[k2]*dPhiBetaZ[k2]; rho += OccBetaOrbitals[k2]*PhiBeta[k2]*PhiBeta[k2]; sphi +=OccBetaOrbitals[k2]*( dPhiBetaX[k2]*dPhiBetaX[k2] + dPhiBetaY[k2]*dPhiBetaY[k2] + dPhiBetaZ[k2]*dPhiBetaZ[k2] ); } vX = (v1X+v2X)*2; vY = (v1Y+v2Y)*2; vZ = (v1Z+v2Z)*2; grho2 = vX*vX + vY*vY +vZ*vZ ; g_free(PhiAlpha); g_free(dPhiAlphaX); g_free(dPhiAlphaY); g_free(dPhiAlphaZ); g_free(PhiBeta); g_free(dPhiBetaX); g_free(dPhiBetaY); g_free(dPhiBetaZ); D = sphi - grho2/4.0/rho; Dh = co*pow(rho,5.0/3.0); XBE2 = D/Dh; XBE2 = XBE2*XBE2; return 1.0/(1.0+XBE2); } /*********************************************************************************/ static gdouble get_value_elf_savin(gdouble x,gdouble y,gdouble z,gint dump) { gdouble grho2 = 0; gdouble rho = 0; gdouble sphi = 0; gdouble t = 0; gdouble th = 0; gdouble cf = 3.0/10.0*pow(3*PI*PI,2.0/3); gdouble XS2 = 0; gdouble epsilon = 2.87e-5; /* This value constrains ELF to be less than 0.5 for rho<1e-3*/ /* see Can. J. Chem. Vol. 74,1996 page 1088 */ gdouble v1X = 0.0; gdouble v1Y = 0.0; gdouble v1Z = 0.0; gdouble v2X = 0.0; gdouble v2Y = 0.0; gdouble v2Z = 0.0; gdouble vX = 0.0; gdouble vY = 0.0; gdouble vZ = 0.0; gdouble cgv = 0.0; gdouble dcgvX = 0.0; gdouble dcgvY = 0.0; gdouble dcgvZ = 0.0; gint i; gint k1; gint k2; gdouble *PhiAlpha = g_malloc(NAlphaOrb*sizeof(gdouble)); gdouble *dPhiAlphaX = g_malloc(NAlphaOrb*sizeof(gdouble)); gdouble *dPhiAlphaY = g_malloc(NAlphaOrb*sizeof(gdouble)); gdouble *dPhiAlphaZ = g_malloc(NAlphaOrb*sizeof(gdouble)); gdouble *PhiBeta = g_malloc(NBetaOrb*sizeof(gdouble)); gdouble *dPhiBetaX = g_malloc(NBetaOrb*sizeof(gdouble)); gdouble *dPhiBetaY = g_malloc(NBetaOrb*sizeof(gdouble)); gdouble *dPhiBetaZ = g_malloc(NBetaOrb*sizeof(gdouble)); for(k1=0;k11e-8) { PhiAlpha[k1] += CoefAlphaOrbitals[k1][i]*cgv; dPhiAlphaX[k1] += CoefAlphaOrbitals[k1][i]*dcgvX; dPhiAlphaY[k1] += CoefAlphaOrbitals[k1][i]*dcgvY; dPhiAlphaZ[k1] += CoefAlphaOrbitals[k1][i]*dcgvZ; } for(k2=0;k21e-8) { PhiBeta[k2] += CoefBetaOrbitals[k2][i]*cgv; dPhiBetaX[k2] += CoefBetaOrbitals[k2][i]*dcgvX; dPhiBetaY[k2] += CoefBetaOrbitals[k2][i]*dcgvY; dPhiBetaZ[k2] += CoefBetaOrbitals[k2][i]*dcgvZ; } } v1X = 0.0; v1Y = 0.0; v1Z = 0.0; rho = 0; for(k1=0;k11e-8) { v1X += OccAlphaOrbitals[k1]*(PhiAlpha[k1]*dPhiAlphaX[k1]); v1Y += OccAlphaOrbitals[k1]*(PhiAlpha[k1]*dPhiAlphaY[k1]); v1Z += OccAlphaOrbitals[k1]*(PhiAlpha[k1]*dPhiAlphaZ[k1]); rho += OccAlphaOrbitals[k1]*PhiAlpha[k1]*PhiAlpha[k1]; sphi += OccAlphaOrbitals[k1]*( dPhiAlphaX[k1]*dPhiAlphaX[k1] + dPhiAlphaY[k1]*dPhiAlphaY[k1] + dPhiAlphaZ[k1]*dPhiAlphaZ[k1] ); } v2X = 0.0; v2Y = 0.0; v2Z = 0.0; for(k2=0;k21e-8) { v2X += OccBetaOrbitals[k2]*(PhiBeta[k2]*dPhiBetaX[k2]); v2Y += OccBetaOrbitals[k2]*(PhiBeta[k2]*dPhiBetaY[k2]); v2Z += OccBetaOrbitals[k2]*(PhiBeta[k2]*dPhiBetaZ[k2]); rho += OccBetaOrbitals[k2]*PhiBeta[k2]*PhiBeta[k2]; sphi +=OccBetaOrbitals[k2]*( dPhiBetaX[k2]*dPhiBetaX[k2] + dPhiBetaY[k2]*dPhiBetaY[k2] + dPhiBetaZ[k2]*dPhiBetaZ[k2] ); } vX = (v1X+v2X)*2; vY = (v1Y+v2Y)*2; vZ = (v1Z+v2Z)*2; grho2 = vX*vX + vY*vY +vZ*vZ ; g_free(PhiAlpha); g_free(dPhiAlphaX); g_free(dPhiAlphaY); g_free(dPhiAlphaZ); g_free(PhiBeta); g_free(dPhiBetaX); g_free(dPhiBetaY); g_free(dPhiBetaZ); t = sphi/2 - grho2/8.0/rho; th = cf*pow(rho,5.0/3.0); XS2 = (t+epsilon)/th; XS2 = XS2*XS2; return 1.0/(1.0+XS2); } /*********************************************************************************/ static gdouble get_value_sas(gdouble x,gdouble y,gdouble z,gint dump) { gdouble RProb = solventRadius*ANG_TO_BOHR; gdouble ri2 = 0; gdouble ri6 = 0; gdouble xi = 0; gdouble yi = 0; gdouble zi = 0; gdouble sigmai = 0; gdouble sigmai2 = 0; gdouble sigmai6 = 0; gdouble v = 0; gdouble t = 0; gint i; gdouble PRECISION = 1e-10; for(i=0;i1e10) v = 1e10; return v; } /*********************************************************************************/ gdouble** compute_multipol_from_grid(Grid* grid, gint lmax, gdouble xOff, gdouble yOff, gdouble zOff) { gint i; gint j; gint k; gint l; gint m; gdouble x; gdouble y; gdouble z; gdouble r; gdouble temp; gdouble p; gdouble** Q = g_malloc((lmax+1)*sizeof(gdouble*)); Zlm** slm = g_malloc((lmax+1)*sizeof(Zlm*)); gdouble PRECISION = 1e-13; gdouble dv = 0; gdouble scale; for(l=0;l<=lmax;l++) { Q[l] = g_malloc((2*l+1)*sizeof(gdouble)); slm[l] = g_malloc((2*l+1)*sizeof(Zlm)); for(m=-l;m<=l;m++) { Q[l][l+m] = 0.0; slm[l][l+m]=getZlm(l,m); } } dv = (grid->point[1][0][0].C[0]-grid->point[0][0][0].C[0])* (grid->point[0][1][0].C[1]-grid->point[0][0][0].C[1])* (grid->point[0][0][1].C[2]-grid->point[0][0][0].C[2]); dv = -fabs(dv); progress_orb(0,GABEDIT_PROGORB_COMPMULTIPOL,TRUE); scale = (gdouble)1.01/grid->N[0]; for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { x = grid->point[i][j][k].C[0]-xOff; y = grid->point[i][j][k].C[1]-yOff; z = grid->point[i][j][k].C[2]-zOff; r = sqrt(x*x + y*y + z*z+PRECISION); temp = grid->point[i][j][k].C[3]*dv; x /= r; y /= r; z /= r; for(l=0; l<=lmax; l++) { p = temp*pow(r,l); for(m=-l; m<=l; m++) { Q[l][m+l] += p*getValueZlm(&slm[l][m+l],x,y,z); } } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPMULTIPOL,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_COMPMULTIPOL,FALSE); } for(l=0;l<=lmax;l++) if(slm[l])g_free(slm[l]); if(slm) g_free(slm); if(CancelCalcul) { if(Q) { for(l=0;l<=lmax;l++) if(Q[l])g_free(Q[l]); g_free(Q); } Q = NULL; } return Q; } /**************************************************************/ static void define_xyz_grid(Grid*grid) { gint i; gint j; gint k; gdouble x; gdouble y; gdouble z; gdouble V0[3]; gdouble V1[3]; gdouble V2[3]; gdouble firstPoint[3]; for(i=0;i<3;i++) { V0[i] = firstDirection[i] *(grid->limits.MinMax[1][0]-grid->limits.MinMax[0][0]); V1[i] = secondDirection[i]*(grid->limits.MinMax[1][1]-grid->limits.MinMax[0][1]); V2[i] = thirdDirection[i] *(grid->limits.MinMax[1][2]-grid->limits.MinMax[0][2]); } for(i=0;i<3;i++) { firstPoint[i] = V0[i] + V1[i] + V2[i]; /* firstPoint[i] = originOfCube[i] - firstPoint[i]/2;*/ firstPoint[i] = limits.MinMax[0][i]; } for(i=0;i<3;i++) { V0[i] /= grid->N[0]-1; V1[i] /= grid->N[1]-1; V2[i] /= grid->N[2]-1; } for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { x = firstPoint[0] + i*V0[0] + j*V1[0] + k*V2[0]; y = firstPoint[1] + i*V0[1] + j*V1[1] + k*V2[1]; z = firstPoint[2] + i*V0[2] + j*V1[2] + k*V2[2]; grid->point[i][j][k].C[0] = x; grid->point[i][j][k].C[1] = y; grid->point[i][j][k].C[2] = z; } } } } /*********************************************************************************/ Grid* compute_mep_grid_using_partial_charges_cube_grid(Grid* grid) { gint i; gint j; gint k; gdouble x; gdouble y; gdouble z; gdouble r; /* gdouble temp;*/ gdouble PRECISION = 1e-13; Grid* esp = NULL; gdouble invR = 1.0; gdouble v; gint n; gboolean beg = TRUE; gdouble scale; if(!grid) return NULL; esp = grid_point_alloc(grid->N,grid->limits); progress_orb(0,GABEDIT_PROGORB_COMPMEPGRID,TRUE); scale = (gdouble)1.01/grid->N[0]; for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { x = grid->point[i][j][k].C[0]; y = grid->point[i][j][k].C[1]; z = grid->point[i][j][k].C[2]; esp->point[i][j][k].C[0] = x; esp->point[i][j][k].C[1] = y; esp->point[i][j][k].C[2] = z; r = sqrt(x*x + y*y + z*z+PRECISION); invR = 1.0 /r; /* temp = esp->point[i][j][k].C[3];*/ x *= invR; y *= invR; z *= invR; v = 0; for(n=0;npoint[i][j][k].C[0]-GeomOrb[n].C[0]; y = esp->point[i][j][k].C[1]-GeomOrb[n].C[1]; z = esp->point[i][j][k].C[2]-GeomOrb[n].C[2]; r = sqrt(x*x + y*y + z*z+PRECISION); invR = 1.0 /r; v+= invR*GeomOrb[n].partialCharge; } esp->point[i][j][k].C[3]=v; if(beg) { beg = FALSE; esp->limits.MinMax[0][3] = v; esp->limits.MinMax[1][3] = v; } else { if(esp->limits.MinMax[0][3]>v) esp->limits.MinMax[0][3] = v; if(esp->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPMEPGRID,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_COMPMEPGRID,FALSE); } if(CancelCalcul) { esp = free_grid(esp); } return esp; } /*********************************************************************************/ Grid* compute_mep_grid_using_partial_charges(gint N[], GridLimits limits) { gint i; gint j; gint k; gdouble x; gdouble y; gdouble z; gdouble r; /* gdouble temp;*/ gdouble PRECISION = 1e-13; Grid* esp = NULL; gdouble invR = 1.0; gdouble v; gint n; gboolean beg = TRUE; gdouble scale; esp = grid_point_alloc(N,limits); define_xyz_grid(esp); progress_orb(0,GABEDIT_PROGORB_COMPMEPGRID,TRUE); scale = (gdouble)1.01/N[0]; for(i=0;ipoint[i][j][k].C[0]; y = esp->point[i][j][k].C[1]; z = esp->point[i][j][k].C[2]; r = sqrt(x*x + y*y + z*z+PRECISION); invR = 1.0 /r; /* temp = esp->point[i][j][k].C[3];*/ x *= invR; y *= invR; z *= invR; v = 0; for(n=0;npoint[i][j][k].C[0]-GeomOrb[n].C[0]; y = esp->point[i][j][k].C[1]-GeomOrb[n].C[1]; z = esp->point[i][j][k].C[2]-GeomOrb[n].C[2]; r = sqrt(x*x + y*y + z*z+PRECISION); invR = 1.0 /r; v+= invR*GeomOrb[n].partialCharge; } esp->point[i][j][k].C[3]=v; if(beg) { beg = FALSE; esp->limits.MinMax[0][3] = v; esp->limits.MinMax[1][3] = v; } else { if(esp->limits.MinMax[0][3]>v) esp->limits.MinMax[0][3] = v; if(esp->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPMEPGRID,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_COMPMEPGRID,FALSE); } if(CancelCalcul) { esp = free_grid(esp); } return esp; } /*********************************************************/ static void getCOff(Grid* grid, gdouble* pxOff, gdouble* pyOff, gdouble* pzOff) { gdouble temp; gdouble x,y,z; int i,j,k; gdouble xOff =0, yOff = 0, zOff = 0; gdouble Q = 0; for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { x = grid->point[i][j][k].C[0]; y = grid->point[i][j][k].C[1]; z = grid->point[i][j][k].C[2]; temp = grid->point[i][j][k].C[3]; Q += temp; xOff += temp*x; yOff += temp*y; zOff += temp*z; } } } if(Q!=0) { *pxOff = xOff/Q; *pyOff = yOff/Q; *pzOff = zOff/Q; } else { *pxOff = 0; *pyOff = 0; *pzOff = 0; } } /*********************************************************************************/ Grid* compute_mep_grid_using_multipol_from_density_grid(Grid* grid, gint lmax) { gint i; gint j; gint k; gint l; gint m; gdouble x; gdouble y; gdouble z; gdouble r; gdouble temp; gdouble PRECISION = 1e-13; Grid* esp = NULL; gdouble** Q = NULL; gdouble invR = 1.0; gdouble v; Zlm** slm = NULL; gint n; gboolean beg = TRUE; gdouble scale; gdouble xOff=0, yOff=0, zOff=0; if(!test_grid_all_positive(grid)) { Message(_("Sorry\n The current grid is not a grid for electronic density"),_("Error"),TRUE); return NULL; } getCOff(grid,&xOff, &yOff, &zOff); Q = compute_multipol_from_grid(grid,lmax, xOff, yOff, zOff); if(!Q) return NULL; esp = grid_point_alloc(grid->N,grid->limits); slm = g_malloc((lmax+1)*sizeof(Zlm*)); for(l=0;l<=lmax;l++) { slm[l] = g_malloc((2*l+1)*sizeof(Zlm)); for(m=-l;m<=l;m++) slm[l][l+m]=getZlm(l,m); } printf("Electronic values. All values in AU\n"); printf("Center %f %f %f\n", xOff, yOff, zOff); for(l=0; l<=lmax; l++) for(m=-l; m<=l; m++) { unsigned int absm = abs(m); gdouble Norm = 1; Norm = sqrt((2*l+1)/(4*PI))*sqrt(factorial(l+absm)*factorial(l-absm))/factorial(l)/pow(2.0,absm); if(m!=0) Norm *= sqrt(2.0); printf("Q[%d][%d] = %lf\n",l,m,Q[l][m+l]/Norm); Q[l][m+l] *= 4*PI/(2*l+1); } progress_orb(0,GABEDIT_PROGORB_COMPMEPGRID,TRUE); scale = (gdouble)1.01/grid->N[0]; for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { x = grid->point[i][j][k].C[0]; y = grid->point[i][j][k].C[1]; z = grid->point[i][j][k].C[2]; esp->point[i][j][k].C[0] = x; esp->point[i][j][k].C[1] = y; esp->point[i][j][k].C[2] = z; x -=xOff; y -=yOff; z -=zOff; r = sqrt(x*x + y*y + z*z+PRECISION); invR = 1.0 /r; temp = grid->point[i][j][k].C[3]; x *= invR; y *= invR; z *= invR; v = 0; for(l=0; l<=lmax; l++) { temp = pow(invR,l+1); for(m=-l; m<=l; m++) { if(fabs(Q[l][m+l])<10*PRECISION) continue; v += temp*getValueZlm(&slm[l][m+l],x,y,z)*Q[l][m+l]; } } for(n=0;npoint[i][j][k].C[0]-GeomOrb[n].C[0]; y = grid->point[i][j][k].C[1]-GeomOrb[n].C[1]; z = grid->point[i][j][k].C[2]-GeomOrb[n].C[2]; r = sqrt(x*x + y*y + z*z+PRECISION); invR = 1.0 /r; v+= invR*GeomOrb[n].nuclearCharge; } esp->point[i][j][k].C[3]=v; if(beg) { beg = FALSE; esp->limits.MinMax[0][3] = v; esp->limits.MinMax[1][3] = v; } else { if(esp->limits.MinMax[0][3]>v) esp->limits.MinMax[0][3] = v; if(esp->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPMEPGRID,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_COMPMEPGRID,FALSE); } if(Q) { for(l=0;l<=lmax;l++) if(Q[l])g_free(Q[l]); g_free(Q); } if(slm) { for(l=0;l<=lmax;l++) if(slm[l])g_free(slm[l]); g_free(slm); } if(CancelCalcul) { esp = free_grid(esp); } return esp; } /*********************************************************************************/ Grid* compute_mep_grid_using_multipol_from_orbitals(gint N[],GridLimits limits, gint lmax) { Grid* eGrid = NULL; Grid* esp = NULL; TypeGrid = GABEDIT_TYPEGRID_EDENSITY; eGrid = define_grid_point(N,limits,get_value_electronic_density); esp = compute_mep_grid_using_multipol_from_density_grid(eGrid, lmax); eGrid=free_grid(eGrid); set_status_label_info(_("Grid")," "); return esp; } /*********************************************************************************/ Grid* solve_poisson_equation_from_density_grid(Grid* grid, PoissonSolverMethod psMethod) { gint i; gint j; gint k; Grid* esp = NULL; DomainMG domain; gdouble xL; gdouble yL; gdouble zL; GridMG* source = NULL; GridMG* potential = NULL; gdouble fourPI = -4*PI; PoissonMG* ps= NULL; gint Nx, Ny, Nz; LaplacianOrderMG laplacianOrder= GABEDIT_LAPLACIAN_2; /* LaplacianOrderMG laplacianOrder= GABEDIT_LAPLACIAN_4;*/ gdouble PRECISION = 1e-13; if(!test_grid_all_positive(grid)) { Message(_("Sorry\n The current grid is not a grid for electronic density"),_("Error"),TRUE); return NULL; } if(!grid) return NULL; Nx = grid->N[0]-laplacianOrder; Ny = grid->N[1]-laplacianOrder; Nz = grid->N[2]-laplacianOrder; if(Nx%2==0 || Ny%2==0 || Nz%2==0) { printf("The number of steps should be odd\n"); return NULL; } xL = fabs(limits.MinMax[1][0]-limits.MinMax[0][0]); yL = fabs(limits.MinMax[1][1]-limits.MinMax[0][1]); zL = fabs(limits.MinMax[1][2]-limits.MinMax[0][2]); domain = getDomainMG(Nx,Ny,Nz, limits.MinMax[0][0], limits.MinMax[0][1], limits.MinMax[0][2], xL, yL, zL, laplacianOrder); /* printDomain(&domain);*/ source = getNewGridMGUsingDomain(&domain); potential = getNewGridMGUsingDomain(&domain); progress_orb(0,GABEDIT_PROGORB_COMPMEPGRID,TRUE); setTextInProgress(_("Compute of the source grid for the Poisson equation")); for(i=0;iN[0];i++) for(j=0;jN[1];j++) for(k=0;kN[2];k++) { setValGridMG(source,i,j,k,grid->point[i][j][k].C[3]*fourPI); } ps = getPoissonMG(potential, source); /* ps->condition=GABEDIT_CONDITION_EWALD; ps->condition=GABEDIT_CONDITION_CLUSTER; ps->condition=GABEDIT_CONDITION_PERIODIC; */ if(ps->condition==GABEDIT_CONDITION_EWALD) setTextInProgress(_("Set boundary values from EWALD ")); else if(ps->condition==GABEDIT_CONDITION_CLUSTER) setTextInProgress(_("Set boundary values to 0 ")); else if(ps->condition==GABEDIT_CONDITION_PERIODIC) setTextInProgress(_("Periodic boundary conditions ")); else setTextInProgress(_("Set boundary values from multipole ")); tradesBoundaryPoissonMG(ps); setTextInProgress(_("Solve the Poisson equation")); /* solve poisson */ /*solveMGPoissonMG(ps, domain.maxLevel);*/ if(psMethod==GABEDIT_CG) solveCGPoissonMG(ps, 2000, 1e-6); else solveMGPoissonMG3(ps, domain.maxLevel, 1000, 1e-6, 0); if(CancelCalcul) { destroyPoissonMG(ps); /* destroy of source and potential Grid */ esp = free_grid(esp); return NULL; } progress_orb(0,GABEDIT_PROGORB_COMPMEPGRID,TRUE); setTextInProgress(_("End the resolution of the Poisson equation")); /*smootherPoissonMG(ps,100);*/ esp = copyGrid(grid); for(i=0;iN[0];i++) for(j=0;jN[1];j++) for(k=0;kN[2];k++) { gdouble v = 0; gint n; gdouble x,y,z,r,invR; for(n=0;npoint[i][j][k].C[0]-GeomOrb[n].C[0]; y = esp->point[i][j][k].C[1]-GeomOrb[n].C[1]; z = esp->point[i][j][k].C[2]-GeomOrb[n].C[2]; r = sqrt(x*x + y*y + z*z+PRECISION); invR = 1.0 /r; v+= invR*GeomOrb[n].nuclearCharge; } esp->point[i][j][k].C[3] = v-getValGridMG(ps->potential, i, j, k); } destroyPoissonMG(ps); /* destroy of source and potential Grid */ reset_limits_for_grid(esp); return esp; } /*********************************************************************************/ Grid* solve_poisson_equation_from_orbitals(gint N[],GridLimits limits, PoissonSolverMethod psMethod) { Grid* eGrid = NULL; Grid* esp = NULL; TypeGrid = GABEDIT_TYPEGRID_EDENSITY; eGrid = define_grid_point(N,limits,get_value_electronic_density); if(psMethod == GABEDIT_CG) TypeGrid = GABEDIT_TYPEGRID_MEP_CG; else TypeGrid = GABEDIT_TYPEGRID_MEP_MG; if(!eGrid) return NULL; esp = solve_poisson_equation_from_density_grid(eGrid, psMethod); eGrid=free_grid(eGrid); set_status_label_info(_("Grid")," "); return esp; } /*********************************************************************************/ Grid* compute_mep_grid_exact(gint N[],GridLimits limits) { gint i; Grid* esp = NULL; gboolean beg = TRUE; gdouble scale; gdouble V0[3]; gdouble V1[3]; gdouble V2[3]; gdouble firstPoint[3]; if(!AOrb) { Message(_("Sorry\n This option is implemented only for Gaussian Basis Function"),_("Error"),TRUE); return NULL; } esp = grid_point_alloc(N,limits); for(i=0;i<3;i++) { V0[i] = firstDirection[i] *(esp->limits.MinMax[1][0]-esp->limits.MinMax[0][0]); V1[i] = secondDirection[i]*(esp->limits.MinMax[1][1]-esp->limits.MinMax[0][1]); V2[i] = thirdDirection[i] *(esp->limits.MinMax[1][2]-esp->limits.MinMax[0][2]); } for(i=0;i<3;i++) { firstPoint[i] = V0[i] + V1[i] + V2[i]; /* firstPoint[i] = originOfCube[i] - firstPoint[i]/2;*/ firstPoint[i] = limits.MinMax[0][i]; } for(i=0;i<3;i++) { V0[i] /= esp->N[0]-1; V1[i] /= esp->N[1]-1; V2[i] /= esp->N[2]-1; } #ifndef G_OS_WIN32 progress_orb(0,GABEDIT_PROGORB_COMPMEPGRID,TRUE); #endif scale = (gdouble)1.01/esp->N[0]; #ifdef ENABLE_OMP /*#pragma omp parallel for private(i)*/ #endif for(i=0;iN[0];i++) { gint j; gint k; gdouble x; gdouble y; gdouble z; gdouble r; gdouble PRECISION = 1e-13; gdouble invR = 1.0; gdouble v; gint n; gdouble* XkXl = g_malloc(NAOrb*(NAOrb+1)/2*sizeof(gdouble)); if(!CancelCalcul) for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { x = firstPoint[0] + i*V0[0] + j*V1[0] + k*V2[0]; y = firstPoint[1] + i*V0[1] + j*V1[1] + k*V2[1]; z = firstPoint[2] + i*V0[2] + j*V1[2] + k*V2[2]; esp->point[i][j][k].C[0] = x; esp->point[i][j][k].C[1] = y; esp->point[i][j][k].C[2] = z; v = 0; v = get_value_electrostatic_potential( x, y, z, XkXl); for(n=0;npoint[i][j][k].C[0]-GeomOrb[n].C[0]; y = esp->point[i][j][k].C[1]-GeomOrb[n].C[1]; z = esp->point[i][j][k].C[2]-GeomOrb[n].C[2]; r = sqrt(x*x + y*y + z*z+PRECISION); invR = 1.0 /r; v+= invR*GeomOrb[n].nuclearCharge; } esp->point[i][j][k].C[3]=v; } } #ifndef G_OS_WIN32 #ifdef ENABLE_OMP /*#pragma omp critical*/ #endif g_free(XkXl); progress_orb(scale,GABEDIT_PROGORB_COMPMEPGRID,FALSE); #endif } if(CancelCalcul) progress_orb(0,GABEDIT_PROGORB_COMPMEPGRID,TRUE); if(!CancelCalcul) for(i=0;iN[0];i++) { gint j; gint k; gdouble v; for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { v = esp->point[i][j][k].C[3]; if(beg) { beg = FALSE; esp->limits.MinMax[0][3] = v; esp->limits.MinMax[1][3] = v; } else { if(esp->limits.MinMax[0][3]>v) esp->limits.MinMax[0][3] = v; if(esp->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } } } if(CancelCalcul) { esp = free_grid(esp); } return esp; } /*********************************************************************************/ Grid* compute_mep_grid_using_orbitals(gint N[],GridLimits limits) { Grid* esp = NULL; TypeGrid = GABEDIT_TYPEGRID_EDENSITY; esp = compute_mep_grid_exact(N, limits); set_status_label_info(_("Grid")," "); return esp; } /**************************************************************/ gboolean compute_coulomb_integrale_iijj_poisson(gint N[],GridLimits limits, gint typeOrbi, gint i, gint typeOrbj, gint j, gdouble* pInteg, gdouble* pNorm, gdouble* pNormj, gdouble* pOverlap) { Grid *gridi = NULL; Grid *gridj = NULL; Grid *potential = NULL; gint k,l,m; gdouble scale; gdouble norm = 0; gdouble normj = 0; gdouble overlap = 0; gdouble xx,yy,zz; gdouble integ = 0; gdouble dv = 0; gdouble PRECISION = 1e-10; *pInteg = -1; *pNorm = -1; *pNormj = -1; *pOverlap = -1; gridi = define_grid_orb(N, limits, typeOrbi, i); if(!gridi) return FALSE; if(CancelCalcul) return FALSE; gridj = 0; if(i==j) gridj = copyGrid(gridi); else gridj = define_grid_orb(N, limits, typeOrbj, j); if(!gridj) return FALSE; if(CancelCalcul) return FALSE; set_status_label_info(_("Grid"),_("Comp. phi_i^2 and phi_j^2")); scale = (gdouble)1.01/gridi->N[0]; for(k=0;kN[0];k++) { for(l=0;lN[1];l++) { for(m=0;mN[2];m++) { overlap += gridi->point[k][l][m].C[3]*gridj->point[k][l][m].C[3]; gridi->point[k][l][m].C[3] = gridi->point[k][l][m].C[3]* gridi->point[k][l][m].C[3]; gridj->point[k][l][m].C[3] = gridj->point[k][l][m].C[3]* gridj->point[k][l][m].C[3]; norm += gridi->point[k][l][m].C[3]; normj += gridj->point[k][l][m].C[3]; } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); } progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); if(CancelCalcul) { free_grid(gridi); free_grid(gridj); return FALSE; } set_status_label_info(_("Grid"),_("Computing of Coulomb int.")); potential = solve_poisson_equation_from_density_grid(gridi, GABEDIT_MG); if(CancelCalcul || !potential) { free_grid(gridi); free_grid(gridj); if(potential) free_grid(potential); return FALSE; } scale = (gdouble)1.01/gridi->N[0]; progress_orb(0,GABEDIT_PROGORB_COMPINTEG,TRUE); for(k=0;kN[0];k++) { for(l=0;lN[1];l++) for(m=0;mN[2];m++) { gdouble v = 0; gint n; gdouble x,y,z,r,invR; for(n=0;npoint[k][l][m].C[0]-GeomOrb[n].C[0]; y = potential->point[k][l][m].C[1]-GeomOrb[n].C[1]; z = potential->point[k][l][m].C[2]-GeomOrb[n].C[2]; r = sqrt(x*x + y*y + z*z+PRECISION); invR = 1.0 /r; v+= invR*GeomOrb[n].nuclearCharge; } integ += -(potential->point[k][l][m].C[3]-v)*gridj->point[k][l][m].C[3]; } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPINTEG,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_COMPINTEG,FALSE); } progress_orb(0,GABEDIT_PROGORB_COMPINTEG,TRUE); xx = gridi->point[1][0][0].C[0]-gridi->point[0][0][0].C[0]; yy = gridi->point[0][1][0].C[1]-gridi->point[0][0][0].C[1]; zz = gridi->point[0][0][1].C[2]-gridi->point[0][0][0].C[2]; dv = fabs(xx*yy*zz); free_grid(gridi); free_grid(gridj); free_grid(potential); if(CancelCalcul) return FALSE; *pInteg = integ*dv; *pNorm = norm*dv; *pNormj = normj*dv; *pOverlap = overlap*dv; return TRUE; } /******************************************************************************************************************/ gboolean compute_transition_matrix_numeric(gint N[],GridLimits limits, gint typeOrbi, gint i, gint typeOrbj, gint j, gdouble* pInteg, gdouble* pNormi, gdouble* pNormj, gdouble* pOverlap) { Grid *gridi = NULL; Grid *gridj = NULL; gint ki,li,mi; gdouble scale; gdouble normi = 0; gdouble normj = 0; gdouble overlap = 0; gdouble xx,yy,zz; gdouble dv = 0; pInteg[0] = 0; pInteg[1] = 0; pInteg[2] = 0; *pNormi = -1; *pNormj = -1; *pOverlap = -1; gridi = define_grid_orb(N, limits, typeOrbi, i); if(!gridi) return FALSE; gridj = 0; gridj = define_grid_orb(N, limits, typeOrbj, j); if(!gridj) return FALSE; set_status_label_info(_("Grid"),_("Comp. phi_i*phi_j")); scale = (gdouble)1.01/gridi->N[0]; for(ki=0;kiN[0];ki++) { for(li=0;liN[1];li++) { for(mi=0;miN[2];mi++) { overlap += gridi->point[ki][li][mi].C[3]*gridj->point[ki][li][mi].C[3]; normi += gridi->point[ki][li][mi].C[3]*gridi->point[ki][li][mi].C[3]; normj += gridj->point[ki][li][mi].C[3]*gridj->point[ki][li][mi].C[3]; gridi->point[ki][li][mi].C[3] = gridi->point[ki][li][mi].C[3]* gridj->point[ki][li][mi].C[3]; } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); } progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); if(CancelCalcul) { free_grid(gridi); free_grid(gridj); return FALSE; } set_status_label_info(_("Grid"),_("Computing of .")); scale = (gdouble)1.01/gridi->N[0]; progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); for(ki=0;kiN[0];ki++) { for(li=0;liN[1];li++) for(mi=0;miN[2];mi++) { xx = gridi->point[ki][li][mi].C[0]; yy = gridi->point[ki][li][mi].C[1]; zz = gridi->point[ki][li][mi].C[2]; pInteg[0] += xx*gridi->point[ki][li][mi].C[3]; pInteg[1] += yy*gridi->point[ki][li][mi].C[3]; pInteg[2] += zz*gridi->point[ki][li][mi].C[3]; } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); } progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); xx = gridi->point[1][0][0].C[0]-gridi->point[0][0][0].C[0]; yy = gridi->point[0][1][0].C[1]-gridi->point[0][0][0].C[1]; zz = gridi->point[0][0][1].C[2]-gridi->point[0][0][0].C[2]; dv = fabs(xx*yy*zz); free_grid(gridi); free_grid(gridj); if(CancelCalcul) return FALSE; pInteg[0] *= dv; pInteg[1] *= dv; pInteg[2] *= dv; *pNormi = normi*dv; *pNormj = normj*dv; *pOverlap = overlap*dv; return TRUE; } /******************************************************************************************************************/ gboolean compute_spatial_overlapij_numeric(gint N[],GridLimits limits, gint typeOrbi, gint i, gint typeOrbj, gint j, gdouble* pInteg, gdouble* pNormi, gdouble* pNormj, gdouble* pOverlap) { Grid *gridi = NULL; Grid *gridj = NULL; gint ki,li,mi; gdouble scale; gdouble normi = 0; gdouble normj = 0; gdouble overlap = 0; gdouble xx,yy,zz; gdouble dv = 0; *pInteg = 0; *pNormi = -1; *pNormj = -1; *pOverlap = -1; gridi = define_grid_orb(N, limits, typeOrbi, i); if(!gridi) return FALSE; gridj = 0; gridj = define_grid_orb(N, limits, typeOrbj, j); if(!gridj) return FALSE; set_status_label_info(_("Grid"),_("Comp. |phi_i*phi_j|")); scale = (gdouble)1.01/gridi->N[0]; for(ki=0;kiN[0];ki++) { for(li=0;liN[1];li++) { for(mi=0;miN[2];mi++) { overlap += gridi->point[ki][li][mi].C[3]*gridj->point[ki][li][mi].C[3]; normi += gridi->point[ki][li][mi].C[3]*gridi->point[ki][li][mi].C[3]; normj += gridj->point[ki][li][mi].C[3]*gridj->point[ki][li][mi].C[3]; gridi->point[ki][li][mi].C[3] = fabs(gridi->point[ki][li][mi].C[3]* gridj->point[ki][li][mi].C[3]); } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); } progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); if(CancelCalcul) { free_grid(gridi); free_grid(gridj); return FALSE; } set_status_label_info(_("Grid"),_("Computing of < |i| | |j| >.")); scale = (gdouble)1.01/gridi->N[0]; progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); for(ki=0;kiN[0];ki++) { for(li=0;liN[1];li++) for(mi=0;miN[2];mi++) { *pInteg += gridi->point[ki][li][mi].C[3]; } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); } progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); xx = gridi->point[1][0][0].C[0]-gridi->point[0][0][0].C[0]; yy = gridi->point[0][1][0].C[1]-gridi->point[0][0][0].C[1]; zz = gridi->point[0][0][1].C[2]-gridi->point[0][0][0].C[2]; dv = fabs(xx*yy*zz); free_grid(gridi); free_grid(gridj); if(CancelCalcul) return FALSE; *pInteg *= dv; *pNormi = normi*dv; *pNormj = normj*dv; *pOverlap = overlap*dv; return TRUE; } /******************************************************************************************************************/ gboolean compute_spatial_overlapiijj_numeric(gint N[],GridLimits limits, gint typeOrbi, gint i, gint typeOrbj, gint j, gdouble* pInteg, gdouble* pNormi, gdouble* pNormj, gdouble* pOverlap) { Grid *gridi = NULL; Grid *gridj = NULL; gint ki,li,mi; gdouble scale; gdouble normi = 0; gdouble normj = 0; gdouble overlap = 0; gdouble xx,yy,zz; gdouble dv = 0; *pInteg = 0; *pNormi = -1; *pNormj = -1; *pOverlap = -1; gridi = define_grid_orb(N, limits, typeOrbi, i); if(!gridi) return FALSE; gridj = 0; gridj = define_grid_orb(N, limits, typeOrbj, j); if(!gridj) return FALSE; set_status_label_info(_("Grid"),_("Comp. phi_i*phi_j")); scale = (gdouble)1.01/gridi->N[0]; for(ki=0;kiN[0];ki++) { for(li=0;liN[1];li++) { for(mi=0;miN[2];mi++) { overlap += gridi->point[ki][li][mi].C[3]*gridj->point[ki][li][mi].C[3]; normi += gridi->point[ki][li][mi].C[3]*gridi->point[ki][li][mi].C[3]; normj += gridj->point[ki][li][mi].C[3]*gridj->point[ki][li][mi].C[3]; gridi->point[ki][li][mi].C[3] = gridi->point[ki][li][mi].C[3]* gridj->point[ki][li][mi].C[3]; } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); } progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); if(CancelCalcul) { free_grid(gridi); free_grid(gridj); return FALSE; } set_status_label_info(_("Grid"),_("Computing of .")); scale = (gdouble)1.01/gridi->N[0]; progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); for(ki=0;kiN[0];ki++) { for(li=0;liN[1];li++) for(mi=0;miN[2];mi++) { *pInteg += gridi->point[ki][li][mi].C[3]*gridi->point[ki][li][mi].C[3]; } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); } progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); xx = gridi->point[1][0][0].C[0]-gridi->point[0][0][0].C[0]; yy = gridi->point[0][1][0].C[1]-gridi->point[0][0][0].C[1]; zz = gridi->point[0][0][1].C[2]-gridi->point[0][0][0].C[2]; dv = fabs(xx*yy*zz); free_grid(gridi); free_grid(gridj); if(CancelCalcul) return FALSE; *pInteg *= dv; *pNormi = normi*dv; *pNormj = normj*dv; *pOverlap = overlap*dv; return TRUE; } /**************************************************************/ gboolean compute_integrale_from_grid(Grid* grid, gboolean square, gdouble* pInteg) { gint k,l,m; gdouble scale; gdouble integ = 0; gdouble dv = 0; gdouble xx,yy,zz; if(!grid) return FALSE; if(CancelCalcul) return FALSE; if(square) set_status_label_info(_("Grid"),_("Comp. integ f^2(x,y,z) dv from grid")); else set_status_label_info(_("Grid"),_("Comp. integ f(,xy,z) dv from grid")); scale = (gdouble)1.01/grid->N[0]; for(k=0;kN[0];k++) { for(l=0;lN[1];l++) { for(m=0;mN[2];m++) { if(square) integ += grid->point[k][l][m].C[3]*grid->point[k][l][m].C[3]; else integ += grid->point[k][l][m].C[3]; } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_COMPGRID,FALSE); } progress_orb(0,GABEDIT_PROGORB_COMPGRID,TRUE); if(CancelCalcul) return FALSE; xx = grid->point[1][0][0].C[0]-grid->point[0][0][0].C[0]; yy = grid->point[0][1][0].C[1]-grid->point[0][0][0].C[1]; zz = grid->point[0][0][1].C[2]-grid->point[0][0][0].C[2]; dv = fabs(xx*yy*zz); *pInteg = integ*dv; return TRUE; } /*************************************************************************************/ gboolean compute_integrale_from_grid_all_space(Grid* grid, gdouble* pInteg) { gint k,l,m; gdouble integ = 0; gdouble dv = 0; gdouble xx,yy,zz; if(!grid) return FALSE; if(CancelCalcul) return FALSE; for(k=0;kN[0];k++) { for(l=0;lN[1];l++) { for(m=0;mN[2];m++) { integ += grid->point[k][l][m].C[3]; } if(CancelCalcul) return FALSE; } } if(CancelCalcul) return FALSE; xx = grid->point[1][0][0].C[0]-grid->point[0][0][0].C[0]; yy = grid->point[0][1][0].C[1]-grid->point[0][0][0].C[1]; zz = grid->point[0][0][1].C[2]-grid->point[0][0][0].C[2]; dv = fabs(xx*yy*zz); *pInteg = integ*dv; return TRUE; } /**************************************************************/ gboolean compute_integrale_from_grid_foranisovalue(Grid* grid, gboolean square, gdouble isovalue, gdouble* pInteg) { gint k,l,m; /* gdouble scale;*/ gdouble integ = 0; gdouble dv = 0; gdouble xx,yy,zz; if(!grid) return FALSE; if(CancelCalcul) return FALSE; /* scale = (gdouble)1.01/grid->N[0];*/ for(k=0;kN[0];k++) { for(l=0;lN[1];l++) { for(m=0;mN[2];m++) { if(!square && grid->point[k][l][m].C[3]point[k][l][m].C[3])point[k][l][m].C[3]*grid->point[k][l][m].C[3]; else integ += grid->point[k][l][m].C[3]; } if(CancelCalcul) return FALSE; } } if(CancelCalcul) return FALSE; xx = grid->point[1][0][0].C[0]-grid->point[0][0][0].C[0]; yy = grid->point[0][1][0].C[1]-grid->point[0][0][0].C[1]; zz = grid->point[0][0][1].C[2]-grid->point[0][0][0].C[2]; dv = fabs(xx*yy*zz); *pInteg = integ*dv; return TRUE; } /**************************************************************/ gboolean compute_isovalue_percent_from_grid(Grid* grid, gboolean square, gdouble percent, gdouble precision, gdouble* pIsovalue) { gdouble integAll = 0; gdouble integ = 0; gdouble isoMin = 0; gdouble isoMax = 0; gdouble iso = 0; gchar tmp[BSIZE]; if(!grid) return FALSE; if(CancelCalcul) return FALSE; if(percent>100) percent = 100; if(percent<0) percent = 0; if(precision<1e-10) precision = 1e-3; if(!compute_integrale_from_grid(grid, square, &integAll)) return FALSE; /* printf("integAll = %f\n",integAll);*/ if(integAll<1e-10) return FALSE; if(square) set_status_label_info(_("Grid"),_("Comp. integ f^2(x,y,z) dv from grid")); else set_status_label_info(_("Grid"),_("Comp. integ f(,xy,z) dv from grid")); isoMax = fabs(limits.MinMax[1][3]); /* printf("isoMin = %f\n",isoMin); printf("isoMax = %f\n",isoMax); */ while(fabs(isoMax-isoMin)>precision) { iso = (isoMax+isoMin)/2; sprintf(tmp,_("Computing integrale for isovalue = %f, (IsoMax-IsoMin) = %f, precision = %f"),iso, fabs(isoMax-isoMin),precision); set_status_label_info(_("Grid"),tmp); if(!compute_integrale_from_grid_foranisovalue(grid, square, iso, &integ)) return FALSE; /* printf("iso = %f %%=%f\n",iso,integ/integAll*100);*/ if(integ/integAll*100point[i][j][k].C[3]; yy = lfcy[0]*grid->point[i][j][k].C[3]; zz = lfcz[0]*grid->point[i][j][k].C[3]; for(n=1;n<=nBoundary;n++) { xx += lfcx[n] *(grid->point[i-n][j][k].C[3]+grid->point[i+n][j][k].C[3]); yy += lfcy[n] *(grid->point[i][j-n][k].C[3]+grid->point[i][j+n][k].C[3]); zz += lfcz[n] *(grid->point[i][j][k-n].C[3]+grid->point[i][j][k+n].C[3]); } /* extra-diagonal elements */ xy = 0; xz = 0; yz = 0; for(n=-nBoundary, kn=0 ; knpoint[i+n][j+nn][k].C[3]-grid->point[i+n][j-nn][k].C[3]); xy += fcx[kn] * g; /* compute grady rho at i-n*/ g = 0; for(nn=-nBoundary, knn=0 ; knnpoint[i-n][j+nn][k].C[3]-grid->point[i-n][j-nn][k].C[3]); xy += -fcx[kn] * g; /* compute gradz rho at i+n*/ g = 0; for(nn=-nBoundary, knn=0 ; knnpoint[i+n][j][k+nn].C[3]-grid->point[i+n][j][k-nn].C[3]); xz += fcx[kn] * g; /* compute gradz rho at i-n*/ g = 0; for(nn=-nBoundary, knn=0 ; knnpoint[i-n][j][k+nn].C[3]-grid->point[i-n][j][k-nn].C[3]); xz += -fcx[kn] * g; /* compute gradz rho at j+n*/ g = 0; for(nn=-nBoundary, knn=0 ; knnpoint[i][j+n][k+nn].C[3]-grid->point[i][j+n][k-nn].C[3]); yz += fcy[kn] * g; /* compute gradz rho at j-n*/ g = 0; for(nn=-nBoundary, knn=0 ; knnpoint[i][j-n][k+nn].C[3]-grid->point[i][j-n][k-nn].C[3]); yz += -fcy[kn] * g; } /* xy = -xy; xz = -xz; yz = -yz; */ tensor[0] = xx; tensor[1] = xy; tensor[2] = yy; tensor[3] = xz; tensor[4] = yz; tensor[5] = zz; /* printf("tensor\n"); printf("%0.12f\n",xx); printf("%0.12f %0.12f\n",xy,yy); printf("%0.12f %0.12f %0.12f\n",xz,yz,zz); */ d[1] = 0; if(eigen(tensor, 3, d, eigv)) { if(d[0]>d[1]) swapDouble(&d[0],&d[1]); if(d[0]>d[2]) swapDouble(&d[0],&d[2]); if(d[1]>d[2]) swapDouble(&d[1],&d[2]); } return d[1]; } /*******************************************************************************************/ gboolean get_charge_transfer_centers(Grid* grid, gdouble* CN, gdouble* CP, gdouble *qn, gdouble* qp, gdouble* H) { gint i; gint j; gint k; gint c; gdouble sp = 0; gdouble sn = 0; gdouble scale = 1; gdouble xx,yy,zz,dv; gdouble HP[3]; gdouble HN[3]; gdouble Dx; gdouble norm = 0; gdouble DCT[3]; *qp = 0; *qn = 0; for(c=0;c<3;c++) CP[c] = 0.0; for(c=0;c<3;c++) CN[c] = 0.0; if(grid==NULL) return FALSE; progress_orb(0,GABEDIT_PROGORB_UNK,TRUE); scale = (gdouble)1.01/grid->N[0]; xx = grid->point[1][0][0].C[0]-grid->point[0][0][0].C[0]; yy = grid->point[0][1][0].C[1]-grid->point[0][0][0].C[1]; zz = grid->point[0][0][1].C[2]-grid->point[0][0][0].C[2]; dv = fabs(xx*yy*zz); for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { if(grid->point[i][j][k].C[3]>=0) { sp += grid->point[i][j][k].C[3]; for(c=0;c<3;c++) CP[c] += grid->point[i][j][k].C[3]*grid->point[i][j][k].C[c]; } else { sn += grid->point[i][j][k].C[3]; for(c=0;c<3;c++) CN[c] += grid->point[i][j][k].C[3]*grid->point[i][j][k].C[c]; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_UNK,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_UNK,FALSE); } progress_orb(0,GABEDIT_PROGORB_UNK,TRUE); if(CancelCalcul) { for(c=0;c<3;c++) CP[c] = 0.0; for(c=0;c<3;c++) CN[c] = 0.0; return FALSE; } if(fabs(sp)>1e-10) for(c=0;c<3;c++) CP[c] /= sp; if(fabs(sn)>1e-10) for(c=0;c<3;c++) CN[c] /= sn; *qp = sp*dv; *qn = sn*dv; /* computing of Hindex */ /* Norm of DCT */ for(c=0;c<3;c++) DCT[c] = (CP[c]-CN[c]); norm = 0; for(c=0;c<3;c++) norm += DCT[c]*DCT[c]; norm = sqrt(norm); /* nomalized vector along the DCT vector */ if(norm>0) for(c=0;c<3;c++) DCT[c] /=norm; progress_orb(0,GABEDIT_PROGORB_UNK,TRUE); for(c=0;c<3;c++) HP[c] = 0; for(c=0;c<3;c++) HN[c] = 0; for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { if(grid->point[i][j][k].C[3]>=0) { for(c=0;c<3;c++) HP[c] += grid->point[i][j][k].C[3]*(grid->point[i][j][k].C[c]-CP[c])*(grid->point[i][j][k].C[c]-CP[c])*DCT[c]*DCT[c]; } else { for(c=0;c<3;c++) HN[c] += grid->point[i][j][k].C[3]*(grid->point[i][j][k].C[c]-CN[c])*(grid->point[i][j][k].C[c]-CN[c])*DCT[c]*DCT[c]; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_UNK,TRUE); break; } progress_orb(scale,GABEDIT_PROGORB_UNK,FALSE); } progress_orb(0,GABEDIT_PROGORB_UNK,TRUE); if(CancelCalcul) { for(c=0;c<3;c++) CP[c] = 0.0; for(c=0;c<3;c++) CN[c] = 0.0; *H = 0; *qp = 0; *qn = 0; return FALSE; } if(fabs(sp)>1e-10) for(c=0;c<3;c++) HP[c] /= sp; if(fabs(sn)>1e-10) for(c=0;c<3;c++) HN[c] /= sn; *H = 0; norm = 0; for(c=0;c<3;c++) norm += HP[c]; *H += sqrt(fabs(norm)); norm = 0; for(c=0;c<3;c++) norm += HN[c]; *H += sqrt(fabs(norm)); *H /= 2; return TRUE; } GabeditSrc250/src/Display/LabelsGL.c0000644000175100017510000005627313130665225017475 0ustar alloucheallouche/* GLArea.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Common/Global.h" #include "GlobalOrb.h" #include "../Utils/Vector3d.h" #include "../Utils/Transformation.h" #include "../Utils/UtilsGL.h" #include "../Utils/Constants.h" #include "../Geometry/GeomGlobal.h" #include "../Display/AxisGL.h" #include "../Display/PrincipalAxisGL.h" #include "../Display/UtilsOrb.h" #include "../Display/GLArea.h" #include "../Utils/UtilsInterface.h" static gboolean showSymbols = FALSE; static gboolean showNumbers = FALSE; static gboolean showCharges = FALSE; static gboolean showDistances = FALSE; static gboolean showDipole = FALSE; static gboolean showAxes = FALSE; static gchar fontName[BSIZE] = "sans 14"; static gchar fontNameTitle[BSIZE] = "sans 48"; static gboolean ortho = FALSE; static gchar* strTitle = NULL; static gint xTitle = 0; static gint yTitle = 0; static GdkColor colorTitle = {65535,0,0}; static gboolean initColor = TRUE; /*********************************************************************************************/ void init_labels_font() { sprintf(fontName,"%s",FontsStyleLabel.fontname); sprintf(fontNameTitle,"%s","sans 48"); } /*********************************************************************************************/ gboolean get_labels_ortho() { return ortho; } /*********************************************************************************************/ void set_labels_ortho(gboolean o) { ortho = o; } /*********************************************************************************************/ gboolean get_show_symbols() { return showSymbols; } /*********************************************************************************************/ void set_show_symbols(gboolean ac) { showSymbols=ac; } /*********************************************************************************************/ gboolean get_show_charges() { return showCharges; } /*********************************************************************************************/ gboolean get_show_numbers() { return showNumbers; } /*********************************************************************************************/ void set_show_numbers(gboolean ac) { showNumbers=ac; } /*********************************************************************************************/ void set_show_charges(gboolean ac) { showCharges=ac; } /*********************************************************************************************/ void showLabelSymbolsNumbersCharges() { gint i; gchar buffer[BSIZE]; gchar bSymbol[10]; gchar bNumber[BSIZE]; gchar bCharge[10]; V4d color = {0.8,0.8,0.8,1.0 }; if(Ncenters<1) return; glInitFontsUsing(FontsStyleLabel.fontname); color[0] = FontsStyleLabel.TextColor.red/65535.0; color[1] = FontsStyleLabel.TextColor.green/65535.0; color[2] = FontsStyleLabel.TextColor.blue/65535.0; glDisable ( GL_LIGHTING ) ; glColor4dv(color); for(i=0;i<(gint)Ncenters;i++) { if(showSymbols) sprintf(bSymbol,"%s",GeomOrb[i].Symb); else bSymbol[0]='\0'; if(showNumbers) sprintf(bNumber,"[%d]",i+1); else bNumber[0]='\0'; if(showCharges) sprintf(bCharge,"%0.3f",GeomOrb[i].partialCharge); else bCharge[0]='\0'; sprintf(buffer,"%s%s%s",bSymbol,bNumber,bCharge); if(ortho) glPrintOrtho(GeomOrb[i].C[0], GeomOrb[i].C[1], GeomOrb[i].C[2], buffer , TRUE, TRUE); else { /* glPrint(GeomOrb[i].C[0], GeomOrb[i].C[1], GeomOrb[i].C[2], buffer);*/ glPrintScale(GeomOrb[i].C[0], GeomOrb[i].C[1], GeomOrb[i].C[2], 1.1*GeomOrb[i].Prop.radii,buffer); } } glEnable ( GL_LIGHTING ) ; glDeleteFontsList(); } /*********************************************************************************************/ gboolean get_show_distances() { return showDistances; } /*********************************************************************************************/ void set_show_distances(gboolean ac) { showDistances=ac; } /*********************************************************************************************/ void showLabelDistances() { gint i; gint k; gint j; gdouble distance; gdouble tmp[3]; gchar buffer[BSIZE]; V4d color = {0.8,0.8,0.8,1.0 }; if(Ncenters<1) return; color[0] = FontsStyleLabel.TextColor.red/65535.0; color[1] = FontsStyleLabel.TextColor.green/65535.0; color[2] = FontsStyleLabel.TextColor.blue/65535.0; glInitFontsUsing(FontsStyleLabel.fontname); glDisable ( GL_LIGHTING ) ; glColor4dv(color); for(i=0;i<(gint)Ncenters;i++) for(j=i+1;j<(gint)Ncenters;j++) { for(k=0;k<3;k++) tmp[k] = (GeomOrb[i].C[k] - GeomOrb[j].C[k]); distance = v3d_length(tmp); if(distance>=(GeomOrb[i].Prop.covalentRadii + GeomOrb[j].Prop.covalentRadii)) continue; for(k=0;k<3;k++) tmp[k] = (GeomOrb[i].C[k] + GeomOrb[j].C[k])/2; sprintf(buffer, "%0.3f",distance*BOHR_TO_ANG); if(ortho) glPrintOrtho(tmp[0], tmp[1], tmp[2], buffer, TRUE, TRUE); else { /* glPrint(tmp[0], tmp[1], tmp[2], buffer);*/ gdouble r = GeomOrb[i].Prop.radii; if(GeomOrb[j].Prop.radii>r)r = GeomOrb[j].Prop.radii; glPrintScale(tmp[0], tmp[1], tmp[2], 1.1*r,buffer); } } glEnable ( GL_LIGHTING ) ; glDeleteFontsList(); } /*********************************************************************************************/ gboolean get_show_dipole() { return showDipole; } /*********************************************************************************************/ void set_show_dipole(gboolean ac) { showDipole=ac; } /*********************************************************************************************/ void showLabelDipole() { gint i; V4d color = {0.8,0.8,0.8,1.0 }; V3d Base1Pos = {Dipole.origin[0],Dipole.origin[1],Dipole.origin[2]}; V3d Base2Pos = {Dipole.origin[0]+Dipole.value[0],Dipole.origin[1]+Dipole.value[1],Dipole.origin[2]+Dipole.value[2]}; GLdouble radius = Dipole.radius; V3d Center; GLdouble p1=90; GLdouble p2=10; GLdouble p = p1 + p2; GLdouble scal = 2; gdouble module; gchar buffer[BSIZE]; if(Ncenters<1) return; if(!showDipole) return; if(!ShowDipoleOrb) return; color[0] = FontsStyleLabel.TextColor.red/65535.0; color[1] = FontsStyleLabel.TextColor.green/65535.0; color[2] = FontsStyleLabel.TextColor.blue/65535.0; glInitFontsUsing(FontsStyleLabel.fontname); glDisable ( GL_LIGHTING ) ; glColor4dv(color); if(radius<0.1) radius = 0.1; Base2Pos[0] = Base1Pos[0]+Dipole.value[0]*scal; Base2Pos[1] = Base1Pos[1]+Dipole.value[1]*scal; Base2Pos[2] = Base1Pos[2]+Dipole.value[2]*scal; Center[0] = (Base1Pos[0]*p2 + Base2Pos[0]*p1)/p; Center[1] = (Base1Pos[1]*p2 + Base2Pos[1]*p1)/p; Center[2] = (Base1Pos[2]*p2 + Base2Pos[2]*p1)/p; module = 0; for(i=0;i<3;i++) module += Dipole.value[i]*Dipole.value[i]; module = sqrt(module); module *= AUTODEB; sprintf(buffer,"%0.3f D",module); if(ortho) glPrintOrtho(Center[0], Center[1], Center[2], buffer, TRUE, TRUE); else { /* glPrint(Center[0], Center[1], Center[2], buffer); */ glPrintScale(Center[0], Center[1], Center[2], 1.1*radius,buffer); } glEnable ( GL_LIGHTING ) ; glDeleteFontsList(); } /*********************************************************************************************/ gboolean get_show_axes() { return showAxes; } /*********************************************************************************************/ void set_show_axes(gboolean ac) { showAxes=ac; } /*********************************************************************************************/ void showLabelAxes() { gint i; V4d color = {0.8,0.8,0.8,1.0 }; gchar buffer[BSIZE]; gboolean show; gboolean negative; gdouble origin[3]; gdouble radius; gdouble scal; gdouble xColor[3]; gdouble yColor[3]; gdouble zColor[3]; gdouble vectorX[] = {1,0,0}; gdouble vectorY[] = {0,1,0}; gdouble vectorZ[] = {0,0,1}; if(!showAxes) return; if(!testShowAxis()) return; getAxisProperties(&show, &negative, origin, &radius, &scal, xColor, yColor, zColor); for(i=0;i<3;i++) { vectorX[i] *= scal; vectorY[i] *= scal; vectorZ[i] *= scal; } for(i=0;i<3;i++) { vectorX[i] += origin[i]; vectorY[i] += origin[i]; vectorZ[i] += origin[i]; } color[0] = FontsStyleLabel.TextColor.red/65535.0; color[1] = FontsStyleLabel.TextColor.green/65535.0; color[2] = FontsStyleLabel.TextColor.blue/65535.0; glInitFontsUsing(FontsStyleLabel.fontname); if(radius<0.1) radius = 0.1; glDisable ( GL_LIGHTING ) ; glColor4dv(color); if(ortho) { sprintf(buffer,"X"); glPrintOrtho(vectorX[0], vectorX[1], vectorX[2], buffer, TRUE, TRUE); sprintf(buffer,"Y"); glPrintOrtho(vectorY[0], vectorY[1], vectorY[2], buffer, TRUE, TRUE); sprintf(buffer,"Z"); glPrintOrtho(vectorZ[0], vectorZ[1], vectorZ[2], buffer, TRUE, TRUE); } else { /* sprintf(buffer,"X"); glPrint(vectorX[0], vectorX[1], vectorX[2], buffer); sprintf(buffer,"Y"); glPrint(vectorY[0], vectorY[1], vectorY[2], buffer); sprintf(buffer,"Z"); glPrint(vectorZ[0], vectorZ[1], vectorZ[2], buffer); */ sprintf(buffer,"X"); glPrintScale(vectorX[0], vectorX[1], vectorX[2], 1.1*radius, buffer); sprintf(buffer,"Y"); glPrintScale(vectorY[0], vectorY[1], vectorY[2], 1.1*radius, buffer); sprintf(buffer,"Z"); glPrintScale(vectorZ[0], vectorZ[1], vectorZ[2], 1.1*radius, buffer); } glEnable ( GL_LIGHTING ) ; glDeleteFontsList(); } /*********************************************************************************************/ void showLabelPrincipalAxes() { gint i; V4d color = {0.8,0.8,0.8,1.0 }; gchar buffer[BSIZE]; gboolean show; gboolean negative; gboolean def; gdouble origin[3]; gdouble radius; gdouble scal; gdouble c1[3]; gdouble c2[3]; gdouble c3[3]; gdouble v1[] = {1,0,0}; gdouble v2[] = {0,1,0}; gdouble v3[] = {0,0,1}; gdouble I[] = {1,1,1}; if(!showAxes) return; if(!testShowPrincipalAxisGL()) return; getPrincipalAxisProperties(&show, &negative, &def, origin, &radius, &scal, v1,v2, v3, c1,c2, c3); if(!def) return; getPrincipalAxisInertias(I); for(i=0;i<3;i++) { v1[i] *= scal; v2[i] *= scal; v3[i] *= scal; } for(i=0;i<3;i++) { v1[i] += origin[i]; v2[i] += origin[i]; v3[i] += origin[i]; } color[0] = FontsStyleLabel.TextColor.red/65535.0; color[1] = FontsStyleLabel.TextColor.green/65535.0; color[2] = FontsStyleLabel.TextColor.blue/65535.0; glInitFontsUsing(FontsStyleLabel.fontname); if(radius<0.1) radius = 0.1; glDisable ( GL_LIGHTING ) ; glColor4dv(color); if(ortho) { sprintf(buffer,"I=%0.3f",I[0]); glPrintOrtho(v1[0], v1[1], v1[2], buffer, TRUE, TRUE); sprintf(buffer,"I=%0.3f",I[1]); glPrintOrtho(v2[0], v2[1], v2[2], buffer, TRUE, TRUE); sprintf(buffer,"I=%0.3f",I[2]); glPrintOrtho(v3[0], v3[1], v3[2], buffer, TRUE, TRUE); } else { /* sprintf(buffer,"I=%0.3f",I[0]); glPrint(v1[0], v1[1], v1[2], buffer); sprintf(buffer,"I=%0.3f",I[1]); glPrint(v2[0], v2[1], v2[2], buffer); sprintf(buffer,"I=%0.3f",I[2]); glPrint(v3[0], v3[1], v3[2], buffer); */ sprintf(buffer,"I=%0.3f",I[0]); glPrintScale(v1[0], v1[1], v1[2], 1.1*radius, buffer); sprintf(buffer,"I=%0.3f",I[1]); glPrintScale(v2[0], v2[1], v2[2], 1.1*radius, buffer); sprintf(buffer,"I=%0.3f",I[2]); glPrintScale(v3[0], v3[1], v3[2], 1.1*radius, buffer); } glEnable ( GL_LIGHTING ) ; glDeleteFontsList(); } /*********************************************************************************************/ void showLabelTitle(gint width, gint height) { V4d color = {0.8,0.8,0.8,1.0 }; if(Ncenters<1) return; if(!strTitle) return; if(xTitle<0) return; if(yTitle<0) return; if(initColor) { colorTitle.red = FontsStyleLabel.TextColor.red; colorTitle.green = FontsStyleLabel.TextColor.green; colorTitle.blue = FontsStyleLabel.TextColor.blue; initColor = FALSE; } color[0] = colorTitle.red/65535.0; color[1] = colorTitle.green/65535.0; color[2] = colorTitle.blue/65535.0; glInitFontsUsing(fontNameTitle); glDisable ( GL_LIGHTING ) ; glColor4dv(color); glLoadIdentity(); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); gluOrtho2D(0, width, 0, height); glPrintWin(xTitle/100.0*width,(yTitle)/100.0*height+glTextHeight(),height, strTitle); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glEnable ( GL_LIGHTING ) ; glDeleteFontsList(); } /*********************************************************************************************/ gchar* get_label_title() { return strTitle; } /*********************************************************************************************/ void set_label_title(gchar* str, gint x, gint y) { if(strTitle) g_free(strTitle); strTitle = NULL; if(str) strTitle = g_strdup(str); if(x>=0) xTitle = x; if(y>=0) yTitle = y; } /********************************************************************************/ static void apply_set_title(GtkWidget *Win,gpointer data) { GtkWidget* entry = NULL; GtkWidget* xSpinButton = NULL; GtkWidget* ySpinButton = NULL; GtkWidget* fontButton = NULL; GtkWidget* colorButton = NULL; gdouble xValue = 0; gdouble yValue = 0; G_CONST_RETURN gchar* fontStr = NULL; G_CONST_RETURN gchar* str = NULL; if(!GTK_IS_WIDGET(Win)) return; entry = g_object_get_data (G_OBJECT (Win), "Entry"); xSpinButton = g_object_get_data (G_OBJECT (Win), "XSpinButton"); ySpinButton = g_object_get_data (G_OBJECT (Win), "YSpinButton"); fontButton = g_object_get_data (G_OBJECT (Win), "FontButton"); colorButton = g_object_get_data (G_OBJECT (Win), "ColorButton"); str = gtk_entry_get_text(GTK_ENTRY(entry)); fontStr = gtk_font_button_get_font_name(GTK_FONT_BUTTON(fontButton)); xValue = gtk_spin_button_get_value (GTK_SPIN_BUTTON(xSpinButton)); yValue = gtk_spin_button_get_value (GTK_SPIN_BUTTON(ySpinButton)); if(xValue>=0 && xValue<=100) xTitle = xValue; if(yValue>=0 && yValue<=100) yTitle = yValue; if(fontStr) sprintf(fontNameTitle,"%s",fontStr); if(str && strlen(str)>1) { if(strTitle) g_free(strTitle); strTitle = g_strdup(str); } if(colorButton) gtk_color_button_get_color (GTK_COLOR_BUTTON(colorButton), &colorTitle); glarea_rafresh(GLArea); } /********************************************************************************/ static void apply_set_title_close(GtkWidget *Win,gpointer data) { apply_set_title(Win,data); delete_child(Win); } /********************************************************************************/ static GtkWidget *add_entry_title( GtkWidget *table, gchar* strLabel, gint il) { gushort i; gushort j; GtkWidget *entry; GtkWidget *label; /*----------------------------------------------------------------------------------*/ i = il; j = 0; label = gtk_label_new(strLabel); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = il; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = il; j = 2; entry = gtk_entry_new(); if(strTitle) gtk_entry_set_text(GTK_ENTRY(entry),strTitle); else gtk_entry_set_text(GTK_ENTRY(entry),""); gtk_table_attach(GTK_TABLE(table),entry, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); return entry; } /********************************************************************************/ static GtkWidget *add_font_button( GtkWidget *table, gchar* strLabel, gint il) { gushort i; gushort j; GtkWidget *fontButton; GtkWidget *label; /*----------------------------------------------------------------------------------*/ i = il; j = 0; label = gtk_label_new(strLabel); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = il; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = il; j = 2; fontButton = gtk_font_button_new_with_font (fontNameTitle); gtk_table_attach(GTK_TABLE(table),fontButton, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); return fontButton; } /********************************************************************************/ static GtkWidget *add_spin_button( GtkWidget *table, gchar* strLabel, gint il) { gushort i; gushort j; GtkWidget *spinButton; GtkWidget *label; /*----------------------------------------------------------------------------------*/ i = il; j = 0; label = gtk_label_new(strLabel); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = il; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = il; j = 2; spinButton = gtk_spin_button_new_with_range (0, 100, 1); gtk_table_attach(GTK_TABLE(table),spinButton, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); return spinButton; } /********************************************************************************/ static GtkWidget *add_color_button( GtkWidget *table, gchar* strLabel, gint il) { gushort i; gushort j; GtkWidget *colorButton; GtkWidget *label; if(initColor) { colorTitle.red = FontsStyleLabel.TextColor.red; colorTitle.green = FontsStyleLabel.TextColor.green; colorTitle.blue = FontsStyleLabel.TextColor.blue; initColor = FALSE; } /*----------------------------------------------------------------------------------*/ i = il; j = 0; label = gtk_label_new(strLabel); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = il; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = il; j = 2; colorButton = gtk_color_button_new_with_color(&colorTitle); gtk_table_attach(GTK_TABLE(table),colorButton, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); return colorButton; } /********************************************************************************/ void set_title_dlg() { GtkWidget *Win; GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *hbox; GtkWidget *table; GtkWidget *vboxall; GtkWidget *xSpinButton; GtkWidget *ySpinButton; GtkWidget *fontButton; GtkWidget *button; GtkWidget *entry; GtkWidget *colorButton; Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),_("Set title")); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,_("Title ")); vboxall = create_vbox(Win); frame = gtk_frame_new (_("Set title")); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(5,3,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),table); entry = add_entry_title(table, _("Title"), 0); xSpinButton = add_spin_button( table, _("X position(%)"), 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(xSpinButton),xTitle); ySpinButton = add_spin_button( table, _("Y position(%)"), 2); gtk_spin_button_set_value(GTK_SPIN_BUTTON(ySpinButton),yTitle); fontButton = add_font_button(table, _("Font"), 3); colorButton = add_color_button(table, _("Color"), 4); g_object_set_data (G_OBJECT (Win), "Entry",entry); g_object_set_data (G_OBJECT (Win), "XSpinButton",xSpinButton); g_object_set_data (G_OBJECT (Win), "YSpinButton",ySpinButton); g_object_set_data (G_OBJECT (Win), "FontButton",fontButton); g_object_set_data (G_OBJECT (Win), "ColorButton",colorButton); hbox = create_hbox_false(vboxall); gtk_widget_realize(Win); button = create_button(Win,_("OK")); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_set_title_close,G_OBJECT(Win)); button = create_button(Win,_("Apply")); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_set_title,G_OBJECT(Win)); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, G_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,G_OBJECT(Win)); gtk_widget_show (button); gtk_widget_show_all (Win); } GabeditSrc250/src/Display/GridCube.c0000644000175100017510000020401413130665225017520 0ustar alloucheallouche/* GridCube.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Display/GlobalOrb.h" #include "../Display/StatusOrb.h" #include "../Display/UtilsOrb.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "../Display/GLArea.h" #include "../Display/AtomicOrbitals.h" #include "../Display/Orbitals.h" #include "../Display/ColorMap.h" #include "../Display/GeomOrbXYZ.h" #include "../Display/BondsOrb.h" typedef enum { GABEDIT_CUBE_GABEDIT, GABEDIT_CUBE_GAUSS_ORB, GABEDIT_CUBE_GAUSS_DEN, GABEDIT_CUBE_GAUSS_GRAD, GABEDIT_CUBE_GAUSS_LAP, GABEDIT_CUBE_GAUSS_NGRAD, GABEDIT_CUBE_GAUSS_POT, GABEDIT_CUBE_MOLPRO_ORB1, GABEDIT_CUBE_MOLPRO_ORBN, GABEDIT_CUBE_MOLPRO_DEN, GABEDIT_CUBE_MOLPRO_DEN_GRAD, GABEDIT_CUBE_MOLPRO_LAPDEN, GABEDIT_CUBE_MOLPRO_LAPLAP } GabEditTypeCube; typedef gboolean (*FuncGetVal)(FILE*,gint,gint,gint,gdouble []); Grid* get_grid_from_gauss_molpro_cube_file(gint typefile,FILE* file,gint num,gint n,gint N[], gdouble XYZ0[3],gdouble X[3],gdouble Y[3],gdouble Z[3]); /**************************************************************************/ static void applyRestrictionCube() { gint i, j, k; gboolean beg = TRUE; gdouble v; gdouble scal; gint N[3]; Grid* newGrid; GridLimits newLimits; gint c; gint ii, jj, kk; if(grid->N[0]<3) return; if(grid->N[1]<3) return; if(grid->N[2]<3) return; N[0] = (grid->N[0]-1)/2+1; N[1] = (grid->N[1]-1)/2+1; N[2] = (grid->N[2]-1)/2+1; newLimits = grid->limits; for(c=0;c<3;c++) newLimits.MinMax[0][c] = grid->point[0][0][0].C[c]; i = (grid->N[0]-1)-(grid->N[0]-1)%2; j = (grid->N[1]-1)-(grid->N[1]-1)%2; k = (grid->N[2]-1)-(grid->N[2]-1)%2; for(c=0;c<3;c++) newLimits.MinMax[1][c] = grid->point[i][j][k].C[c]; newGrid = grid_point_alloc(N,newLimits); progress_orb(0,GABEDIT_PROGORB_SCALEGRID,TRUE); scal = (gdouble)1.01/grid->N[0]*2; for(i=0;iN[0];i+=2) { ii = i/2; for(j=0;jN[1];j+=2) { jj = j/2; for(k=0;kN[2];k+=2) { kk = k/2; for( c=0;c<4;c++) newGrid->point[ii][jj][kk].C[c] = grid->point[i][j][k].C[c]; v = grid->point[i][j][k].C[3]; if(beg) { beg = FALSE; newGrid->limits.MinMax[0][3] = v; newGrid->limits.MinMax[1][3] = v; } else { if(newGrid->limits.MinMax[0][3]>v) newGrid->limits.MinMax[0][3] = v; if(newGrid->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_SCALEGRID,TRUE); break; } progress_orb(scal,GABEDIT_PROGORB_SCALEGRID,FALSE); } progress_orb(0,GABEDIT_PROGORB_SCALEGRID,TRUE); if(CancelCalcul) newGrid = free_grid(newGrid); else { grid = free_grid(grid); grid = newGrid; limits = grid->limits; } } /**************************************************************************/ static void applySquareCube() { gint i, j, k; gboolean beg = TRUE; gdouble v; gdouble scal; TypeGrid = GABEDIT_TYPEGRID_EDENSITY; progress_orb(0,GABEDIT_PROGORB_SCALEGRID,TRUE); scal = (gdouble)1.01/grid->N[0]; for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { grid->point[i][j][k].C[3] = grid->point[i][j][k].C[3]*grid->point[i][j][k].C[3]; v = grid->point[i][j][k].C[3]; if(beg) { beg = FALSE; grid->limits.MinMax[0][3] = v; grid->limits.MinMax[1][3] = v; } else { if(grid->limits.MinMax[0][3]>v) grid->limits.MinMax[0][3] = v; if(grid->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_SCALEGRID,TRUE); break; } progress_orb(scal,GABEDIT_PROGORB_SCALEGRID,FALSE); } progress_orb(0,GABEDIT_PROGORB_SCALEGRID,TRUE); if(CancelCalcul) grid = free_grid(grid); else { limits = grid->limits; } } /********************************************************************************/ void square_cube() { applySquareCube(); create_iso_orbitals(); } /********************************************************************************/ void restriction_cube() { applyRestrictionCube(); create_iso_orbitals(); } /**************************************************************************/ void scale_cube_file(gdouble factor) { gint i, j, k; gboolean beg = TRUE; gdouble v; gdouble scal; progress_orb(0,GABEDIT_PROGORB_SCALEGRID,TRUE); scal = (gdouble)1.01/grid->N[0]; for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { grid->point[i][j][k].C[3] *= factor; v = grid->point[i][j][k].C[3]; if(beg) { beg = FALSE; grid->limits.MinMax[0][3] = v; grid->limits.MinMax[1][3] = v; } else { if(grid->limits.MinMax[0][3]>v) grid->limits.MinMax[0][3] = v; if(grid->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_SCALEGRID,TRUE); break; } progress_orb(scal,GABEDIT_PROGORB_SCALEGRID,FALSE); } progress_orb(0,GABEDIT_PROGORB_SCALEGRID,TRUE); if(CancelCalcul) grid = free_grid(grid); else { limits = grid->limits; } } /********************************************************************************/ static void applyScale(GtkWidget *Win,gpointer data) { GtkWidget* entry =(GtkWidget*)g_object_get_data(G_OBJECT (Win), "Entry"); gchar* temp; gdouble factor; temp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry))); delete_first_spaces(temp); delete_last_spaces(temp); if(this_is_a_real(temp)) factor = atof(temp); else { GtkWidget* message =Message(_("Error : your value is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); if(temp) g_free(temp); return; } if(temp) g_free(temp); scale_cube_file(factor); create_iso_orbitals(); delete_child(Win); glarea_rafresh(GLArea); } /********************************************************************************/ void create_scale_dlg() { GtkWidget *Win; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *button; GtkWidget* entry; GtkWidget* vboxframe; GtkWidget* table; if(!grid ) { if( !CancelCalcul) Message(_("Sorry, Grid is not defined "),_("Error"),TRUE); return; } Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),_("Scale grid")); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,_("Scale grid")); vboxall = create_vbox(Win); vboxwin = vboxall; frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(1,3,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),table); add_label_table(table,_("Factor"),0,0); add_label_table(table,":",0,1); entry= gtk_entry_new (); add_widget_table(table,entry,0,2); gtk_entry_set_text(GTK_ENTRY(entry),"-1"); gtk_widget_show_all(frame); g_object_set_data(G_OBJECT (Win), "Entry",entry); hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)applyScale,GTK_OBJECT(Win)); gtk_widget_show_all (Win); } /**************************************************************************/ void subtract_cube_file(gchar* filename) { FILE* file = FOpen(filename, "rb"); gint len = BSIZE; gchar t[BSIZE]; gint Natoms; gdouble XYZ0[3]; gint N[3]; gdouble X[3]; gdouble Y[3]; gdouble Z[3]; Grid* tmpGrid; gdouble xh, yh, zh; gdouble scal; gint i, j, k; gboolean beg = TRUE; gdouble v; if(!file) { sprintf(t,_("Sorry, I can not open %s file"),filename); Message(t,_("Error"),TRUE); return ; } if(!fgets(t,len,file)) /* Title */ { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return ; } if(!fgets(t,len,file)) /* Type */ { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return; } if(!fgets(t,len,file)) /* NAtoms, X-Origin, Y-Origin, Z-Origin */ { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return; } if(sscanf(t,"%d %lf %lf %lf",&Natoms,&XYZ0[0],&XYZ0[1],&XYZ0[2])!=4) { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return; }; Natoms = abs(Natoms); if(Natoms != Ncenters) Message(_("The number of atoms in cube file is not equal to default value"),_("Warning"),TRUE); for(i=0;i<3;i++) if(fabs(XYZ0[i]-grid->point[0][0][0].C[i])>1e-6) { Message(_("Sorry, probleme with origin of cube"),_("Error"),TRUE); fclose(file); return; } if(!fgets(t,len,file)) /* Nx, X0,Y0,Z0 */ { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return; } if(sscanf(t,"%d %lf %lf %lf",&N[0],&X[0],&Y[0],&Z[0])!=4) { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return; }; xh = grid->point[1][0][0].C[0]-grid->point[0][0][0].C[0]; yh = grid->point[0][1][0].C[0]-grid->point[0][0][0].C[0]; zh = grid->point[0][0][1].C[0]-grid->point[0][0][0].C[0]; if(N[0] != grid->N[0]) { Message(_("Sorry, problem with number of points at x direction"),_("Error"),TRUE); return; } if(fabs(xh-X[0])>1e-6 || fabs(yh-Y[0])>1e-6 || fabs(zh-Z[0])>1e-6) { Message(_("Sorry, problem with X vecteor"),_("Error"),TRUE); return; } if(!fgets(t,len,file)) /* Ny, X1,Y1,Z1 */ { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return; } if(sscanf(t,"%d %lf %lf %lf",&N[1],&X[1],&Y[1],&Z[1])!=4) { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return; }; xh = grid->point[1][0][0].C[1]-grid->point[0][0][0].C[1]; yh = grid->point[0][1][0].C[1]-grid->point[0][0][0].C[1]; zh = grid->point[0][0][1].C[1]-grid->point[0][0][0].C[1]; if(N[1] != grid->N[1]) { Message(_("Sorry, problem with number of points at y direction"),_("Error"),TRUE); return; } if(fabs(xh-X[1])>1e-6 || fabs(yh-Y[1])>1e-6 || fabs(zh-Z[1])>1e-6) { Message(_("Sorry, problem with Y vecteor"),_("Error"),TRUE); return; } if(!fgets(t,len,file)) /* Nz, X2, Y2,Z2 */ { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return; } if(sscanf(t,"%d %lf %lf %lf",&N[2],&X[2],&Y[2],&Z[2])!=4) { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return; }; xh = grid->point[1][0][0].C[2]-grid->point[0][0][0].C[2]; yh = grid->point[0][1][0].C[2]-grid->point[0][0][0].C[2]; zh = grid->point[0][0][1].C[2]-grid->point[0][0][0].C[2]; if(N[1] != grid->N[1]) { Message(_("Sorry, problem with number of points at z direction"),_("Error"),TRUE); return; } if(fabs(xh-X[2])>1e-6 || fabs(yh-Y[2])>1e-6 || fabs(zh-Z[2])>1e-6) { Message(_("Sorry, problem with Z vecteor"),_("Error"),TRUE); return; } j=-1; while(!feof(file) && (j+1<(gint)Natoms)) { j++; if(!fgets(t,len,file)) { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); return; } /* printf("%s\n",t);*/ } tmpGrid = get_grid_from_gauss_molpro_cube_file(0,file,1,1,N,XYZ0,X,Y,Z); if(!tmpGrid) { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); return; } progress_orb(0,GABEDIT_PROGORB_SUBSGRID,TRUE); scal = (gdouble)1.01/grid->N[0]; for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { grid->point[i][j][k].C[3] -= tmpGrid->point[i][j][k].C[3]; v = grid->point[i][j][k].C[3]; if(beg) { beg = FALSE; grid->limits.MinMax[0][3] = v; grid->limits.MinMax[1][3] = v; } else { if(grid->limits.MinMax[0][3]>v) grid->limits.MinMax[0][3] = v; if(grid->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_SUBSGRID,TRUE); break; } progress_orb(scal,GABEDIT_PROGORB_SUBSGRID,FALSE); } progress_orb(0,GABEDIT_PROGORB_SUBSGRID,TRUE); free_grid(tmpGrid); fclose(file); limits = grid->limits; create_iso_orbitals(); } /**************************************************************************/ void mapping_cube_by_an_other_cube(Grid* tmpGrid) { gdouble scal; gint i, j, k; ColorMap* colorMap = NULL; if(!tmpGrid) return; progress_orb(0,GABEDIT_PROGORB_MAPGRID,TRUE); scal = (gdouble)1.01/grid->N[0]; for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { grid->point[i][j][k].C[4] = tmpGrid->point[i][j][k].C[3]; } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_MAPGRID,TRUE); break; } progress_orb(scal,GABEDIT_PROGORB_MAPGRID,FALSE); } progress_orb(0,GABEDIT_PROGORB_MAPGRID,TRUE); limits = grid->limits; grid->mapped = TRUE; RebuildSurf = TRUE; colorMap = new_colorMap_fromGrid(grid); { GtkWidget* handleBoxColorMapGrid = g_object_get_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapGrid "); if(handleBoxColorMapGrid) { GtkWidget* entryLeft = g_object_get_data(G_OBJECT(handleBoxColorMapGrid), "EntryLeft"); GtkWidget* entryRight = g_object_get_data(G_OBJECT(handleBoxColorMapGrid), "EntryRight"); GtkWidget* darea = g_object_get_data(G_OBJECT(handleBoxColorMapGrid), "DrawingArea"); g_object_set_data(G_OBJECT(handleBoxColorMapGrid),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryLeft),"ColorMap", colorMap); g_object_set_data(G_OBJECT(entryRight),"ColorMap", colorMap); g_object_set_data(G_OBJECT(darea),"ColorMap", colorMap); color_map_show(handleBoxColorMapGrid); } else { printf("Error handleBoxColorMapGrid ==NULL\n"); } } if(TypeGrid == GABEDIT_TYPEGRID_SAS) { Define_Iso(0.0); glarea_rafresh(GLArea); } else create_iso_orbitals(); } /**************************************************************************/ void read_mapping_cube_file(gchar* filename) { FILE* file = FOpen(filename, "rb"); gint len = BSIZE; gchar t[BSIZE]; gint Natoms; gdouble XYZ0[3]; gint N[3]; gdouble X[3]; gdouble Y[3]; gdouble Z[3]; Grid* tmpGrid; gdouble xh, yh, zh; gint i, j; if(!file) { sprintf(t,_("Sorry, I can not open %s file"),filename); Message(t,_("Error"),TRUE); return ; } if(!fgets(t,len,file)) /* Title */ { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return ; } if(!fgets(t,len,file)) /* Type */ { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return; } if(!fgets(t,len,file)) /* NAtoms, X-Origin, Y-Origin, Z-Origin */ { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return; } if(sscanf(t,"%d %lf %lf %lf",&Natoms,&XYZ0[0],&XYZ0[1],&XYZ0[2])!=4) { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return; }; Natoms = abs(Natoms); if(Natoms != Ncenters) Message(_("The number of atoms in cube file is not equal to default value"),_("Warning"),TRUE); for(i=0;i<3;i++) if(fabs(XYZ0[i]-grid->point[0][0][0].C[i])>1e-6) { Message(_("Sorry, probleme with origin of cube"),_("Error"),TRUE); fclose(file); return; } if(!fgets(t,len,file)) /* Nx, X0,Y0,Z0 */ { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return; } if(sscanf(t,"%d %lf %lf %lf",&N[0],&X[0],&Y[0],&Z[0])!=4) { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return; }; xh = grid->point[1][0][0].C[0]-grid->point[0][0][0].C[0]; yh = grid->point[0][1][0].C[0]-grid->point[0][0][0].C[0]; zh = grid->point[0][0][1].C[0]-grid->point[0][0][0].C[0]; if(N[0] != grid->N[0]) { Message(_("Sorry, problem with number of points at x direction"),_("Error"),TRUE); return; } if(fabs(xh-X[0])>1e-6 || fabs(yh-Y[0])>1e-6 || fabs(zh-Z[0])>1e-6) { Message(_("Sorry, problem with X vecteor"),_("Error"),TRUE); return; } if(!fgets(t,len,file)) /* Ny, X1,Y1,Z1 */ { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return; } if(sscanf(t,"%d %lf %lf %lf",&N[1],&X[1],&Y[1],&Z[1])!=4) { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return; }; xh = grid->point[1][0][0].C[1]-grid->point[0][0][0].C[1]; yh = grid->point[0][1][0].C[1]-grid->point[0][0][0].C[1]; zh = grid->point[0][0][1].C[1]-grid->point[0][0][0].C[1]; if(N[1] != grid->N[1]) { Message(_("Sorry, problem with number of points at y direction"),_("Error"),TRUE); return; } if(fabs(xh-X[1])>1e-6 || fabs(yh-Y[1])>1e-6 || fabs(zh-Z[1])>1e-6) { Message(_("Sorry, problem with Y vecteor"),_("Error"),TRUE); return; } if(!fgets(t,len,file)) /* Nz, X2, Y2,Z2 */ { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return; } if(sscanf(t,"%d %lf %lf %lf",&N[2],&X[2],&Y[2],&Z[2])!=4) { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); fclose(file); return; }; xh = grid->point[1][0][0].C[2]-grid->point[0][0][0].C[2]; yh = grid->point[0][1][0].C[2]-grid->point[0][0][0].C[2]; zh = grid->point[0][0][1].C[2]-grid->point[0][0][0].C[2]; if(N[1] != grid->N[1]) { Message(_("Sorry, problem with number of points at z direction"),_("Error"),TRUE); return; } if(fabs(xh-X[2])>1e-6 || fabs(yh-Y[2])>1e-6 || fabs(zh-Z[2])>1e-6) { Message(_("Sorry, problem with Z vecteor"),_("Error"),TRUE); return; } j=-1; while(!feof(file) && (j+1<(gint)Natoms)) { j++; if(!fgets(t,len,file)) { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); return; } /* printf("%s\n",t);*/ } tmpGrid = get_grid_from_gauss_molpro_cube_file(0,file,1,1,N,XYZ0,X,Y,Z); fclose(file); if(!tmpGrid) { sprintf(t,_("Sorry, I can not read cube from %s file"),filename); Message(t,_("Error"),TRUE); return; } mapping_cube_by_an_other_cube(tmpGrid); free_grid(tmpGrid); } /********************************************************************************/ void save_grid_gabedit_cube_file(gchar* filename) { FILE* file = FOpen(filename, "w"); gint i, j, k; gdouble scal; gdouble dum; gdouble xh, yh, zh; fprintf(file,"Grid file generated by Gabedit\n"); fprintf(file,"Density\n"); fprintf(file,"%d %0.14le %0.14le %0.14le\n",Ncenters,grid->point[0][0][0].C[0],grid->point[0][0][0].C[1],grid->point[0][0][0].C[2]); xh = grid->point[1][0][0].C[0]-grid->point[0][0][0].C[0]; yh = grid->point[0][1][0].C[0]-grid->point[0][0][0].C[0]; zh = grid->point[0][0][1].C[0]-grid->point[0][0][0].C[0]; fprintf(file,"%d %0.14le %0.14le %0.14le\n",grid->N[0],xh, yh, zh); xh = grid->point[1][0][0].C[1]-grid->point[0][0][0].C[1]; yh = grid->point[0][1][0].C[1]-grid->point[0][0][0].C[1]; zh = grid->point[0][0][1].C[1]-grid->point[0][0][0].C[1]; fprintf(file,"%d %0.14le %0.14le %0.14le\n",grid->N[1],xh, yh, zh); xh = grid->point[1][0][0].C[2]-grid->point[0][0][0].C[2]; yh = grid->point[0][1][0].C[2]-grid->point[0][0][0].C[2]; zh = grid->point[0][0][1].C[2]-grid->point[0][0][0].C[2]; fprintf(file,"%d %0.14le %0.14le %0.14le\n",grid->N[2],xh, yh, zh); set_status_label_info(_("Geometry"),_("Writing...")); progress_orb(0,GABEDIT_PROGORB_SAVEGEOM,TRUE); scal = (gdouble)1.01/Ncenters; dum = 0.0; for(j=0; j<(gint)Ncenters; j++) { progress_orb(scal,GABEDIT_PROGORB_SAVEGEOM,FALSE); fprintf(file,"%d %0.14le %0.14le %0.14le %0.14le\n",(gint)GeomOrb[j].Prop.atomicNumber,dum,GeomOrb[j].C[0],GeomOrb[j].C[1],GeomOrb[j].C[2]); } set_status_label_info(_("Geometry"),_("Ok")); progress_orb(0,GABEDIT_PROGORB_SAVEGRID,TRUE); scal = (gdouble)1.01/grid->N[0]; set_status_label_info(_("Grid"),_("Writing...")); for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { fprintf(file,"%0.14le ",grid->point[i][j][k].C[3]); if((k+1)%6==0) fprintf(file,"\n"); } if(grid->N[2]%6 !=0) fprintf(file,"\n"); } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_SAVEGRID,TRUE); break; } progress_orb(scal,GABEDIT_PROGORB_SAVEGRID,FALSE); } progress_orb(0,GABEDIT_PROGORB_SAVEGRID,TRUE); set_status_label_info(_("Grid"),_("Ok")); CancelCalcul = FALSE; fclose(file); } /************************************************************************/ gint get_orbitals_number_from_molpro_cube_file(FILE* file,gint N[]) { gint len = BSIZE; gchar t[BSIZE]; long int k = 0; gint norbs; gint nval = 6; /* gdouble V[6]; */ /*Debug("Begin scan orbitals molpro cube file \n");*/ progress_orb(0,GABEDIT_PROGORB_SCANFILEGRID,TRUE); progress_orb(0,GABEDIT_PROGORB_SCANFILEGRID,FALSE); while(!feof(file) && !CancelCalcul) { if(!fgets(t,len,file)) /* Nx, X0,X1,X2 */ break; /* Debug("t = %s",t);*/ nval = (strlen(t)+1)/13; /* nval = numb_of_string_by_row(t);*/ /* nval =sscanf(t,"%lf %lf %lf %lf %lf %lf", &V[0], &V[1], &V[2], &V[3], &V[4], &V[5] ); */ k += nval; /* Debug("k=%d\n",k);*/ if(k%N[2]==0) progress_orb(-0.1,GABEDIT_PROGORB_SCANFILEGRID,FALSE); } if(!CancelCalcul) { /* Debug("End scan orbitals molpro cube file %ld\n",k);*/ norbs = k/((long int)N[0]*(long int)N[1]*(long int)N[2]); } else norbs = 0; progress_orb(0,GABEDIT_PROGORB_SCANFILEGRID,TRUE); return norbs; } /****************************************************************************************************************/ gboolean get_values_from_gauss_molpro_cube_density_file(FILE* file,gint numblock,gint nblocks,gint N2,gdouble V[]) { gint len = BSIZE; gchar t[BSIZE]; gint k = 0; gint i; gint n = nblocks*N2; gdouble* tmpV = g_malloc((nblocks*N2+6)*sizeof(gdouble)); gint nval = 6; /*Debug("Begin read den n = %d\n",n);*/ while(!feof(file)) { if(!fgets(t,len,file)) /* Nx, X0,X1,X2 */ { Message(_("I can not read cube from this file\n"),_("Error"),TRUE); g_free(tmpV); return FALSE; } /* Debug("t = %s",t);*/ nval =sscanf(t,"%lf %lf %lf %lf %lf %lf", &tmpV[k], &tmpV[k+1], &tmpV[k+2], &tmpV[k+3], &tmpV[k+4], &tmpV[k+5] ); if(k+5>=n-1) break; k += nval; /* Debug("k=%d\n",k);*/ } /* Debug("End read den\n");*/ k=(numblock-1)*N2; for(i=0;i=n-1) break; /* Debug("Error t =%s ",t);*/ Message(_("I can not read cube from this file\n"),_("Error"),TRUE); g_free(tmpV); return FALSE; } if(k+5>=n-1) break; k += 6; /* Debug("k=%d\n",k);*/ } /* Debug("End read orb\n");*/ k=numorb-1; for(i=0;i cube orbitals file * typefile = 1 => cube density file */ Grid* get_grid_from_gauss_molpro_cube_file(gint typefile,FILE* file,gint num,gint n,gint N[], gdouble XYZ0[3],gdouble X[3],gdouble Y[3],gdouble Z[3]) { Grid* grid; gint i; gint j; gint k; gdouble x; gdouble y; gdouble z; gdouble v; gboolean beg = TRUE; gdouble scal; GridLimits limits; gdouble* V; FuncGetVal Func; if(typefile==0) Func = get_values_from_gauss_molpro_cube_orbitals_file; else Func = get_values_from_gauss_molpro_cube_density_file; for(i=0;i<3;i++) limits.MinMax[0][i] = XYZ0[i]; limits.MinMax[1][0] = XYZ0[0] + (N[0]-1)*X[0] + (N[1]-1)*X[1] + (N[2]-1)*X[2]; limits.MinMax[1][1] = XYZ0[1] + (N[0]-1)*Y[0] + (N[1]-1)*Y[1] + (N[2]-1)*Y[2]; limits.MinMax[1][2] = XYZ0[2] + (N[0]-1)*Z[0] + (N[1]-1)*Z[1] + (N[2]-1)*Z[2]; grid = grid_point_alloc(N,limits); progress_orb(0,GABEDIT_PROGORB_READGRID,TRUE); scal = (gdouble)1.01/grid->N[0]; V = g_malloc((N[2]+6)*sizeof(gdouble)); for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { if(!Func(file,num,n,N[2],V)) { /* Debug("Error Free Grid\n");*/ grid = free_grid(grid); /* Debug("ENd Free Grid\n");*/ return NULL; } /* Debug("\n");*/ for(k=0;kN[2];k++) { x = XYZ0[0] + i*X[0] + j*X[1] + k*X[2]; y = XYZ0[1] + i*Y[0] + j*Y[1] + k*Y[2]; z = XYZ0[2] + i*Z[0] + j*Z[1] + k*Z[2]; v = V[k]; /* Debug("%lf %lf %lf %lf \n",x,y,z,v);*/ grid->point[i][j][k].C[0] = x; grid->point[i][j][k].C[1] = y; grid->point[i][j][k].C[2] = z; grid->point[i][j][k].C[3] = v; if(beg) { beg = FALSE; grid->limits.MinMax[0][3] = v; grid->limits.MinMax[1][3] = v; } else { if(grid->limits.MinMax[0][3]>v) grid->limits.MinMax[0][3] = v; if(grid->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_READGRID,TRUE); break; } progress_orb(scal,GABEDIT_PROGORB_READGRID,FALSE); } if(CancelCalcul) { grid = free_grid(grid); } g_free(V); progress_orb(0,GABEDIT_PROGORB_READGRID,TRUE); return grid; } /**************************************************************/ gboolean read_geometry_from_gauss_cube_file(FILE* file,gint Natoms) { gchar *AtomCoord[3]; gint len = BSIZE; gchar t[BSIZE]; gint i; gint j; gint N; gdouble dum; gdouble scal; gboolean OK = TRUE; for(i=0;i<3;i++) AtomCoord[i]=g_malloc(len*sizeof(gchar)); Ncenters = Natoms; GeomOrb=g_malloc(Ncenters*sizeof(TypeGeomOrb)); set_status_label_info(_("Geometry"),_("Reading")); progress_orb(0,GABEDIT_PROGORB_READGEOM,TRUE); scal = (gdouble)1.01/Ncenters; j=-1; while(!feof(file) && (j<(gint)Ncenters)) { j++; if(j>=(gint)Ncenters) break; progress_orb(scal,GABEDIT_PROGORB_READGEOM,FALSE); if(!fgets(t,len,file)) { OK = FALSE; break; } if(5 != sscanf(t,"%d %lf %s %s %s",&N,&dum,AtomCoord[0],AtomCoord[1],AtomCoord[2])) { OK = FALSE; break; } GeomOrb[j].Symb=symb_atom_get((guint)N); /* Debug("Symb = %s ", GeomOrb[j].Symb);*/ for(i=0;i<3;i++) { /* GeomOrb[j].C[i] = atof(ang_to_bohr(AtomCoord[i]));*/ GeomOrb[j].C[i] = atof(AtomCoord[i]); /* Debug("%lf ", GeomOrb[j].C[i]);*/ } /* Debug("\n");*/ GeomOrb[j].Prop = prop_atom_get(GeomOrb[j].Symb); GeomOrb[j].partialCharge = 0.0; GeomOrb[j].variable = TRUE; GeomOrb[j].nuclearCharge = get_atomic_number_from_symbol(GeomOrb[j].Symb); } for(i=0;i<3;i++) g_free(AtomCoord[i]); if(OK) { buildBondsOrb(); RebuildGeom = TRUE; if(this_is_a_new_geometry()) free_objects_all(); glarea_rafresh(GLArea); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); } else { free_data_all(); set_status_label_info(_("Geometry"),_("Nothing")); } return OK; } /**************************************************************/ gboolean read_grid_limits_from_gauss_cube_file(FILE* file,gint N[],gdouble X[3],gdouble Y[3],gdouble Z[3]) { gint len = BSIZE; gchar t[BSIZE]; if(!fgets(t,len,file)) /* Nx, X0,Y0,Z0 */ { Message(_("I can not read cube from this file\n"),_("Error"),TRUE); fclose(file); return FALSE; } if(sscanf(t,"%d %lf %lf %lf",&N[0],&X[0],&Y[0],&Z[0])!=4) { Message(_("I can not read cube from this file\n"),_("Error"),TRUE); fclose(file); return FALSE; }; if(!fgets(t,len,file)) /* Ny, X1,Y1,Z1 */ { Message(_("I can not read cube from this file\n"),_("Error"),TRUE); fclose(file); return FALSE; } if(sscanf(t,"%d %lf %lf %lf",&N[1],&X[1],&Y[1],&Z[1])!=4) { Message(_("I can not read cube from this file\n"),_("Error"),TRUE); fclose(file); return FALSE; }; if(!fgets(t,len,file)) /* Nz, X2, Y2,Z2 */ { Message(_("I can not read cube from this file\n"),_("Error"),TRUE); fclose(file); return FALSE; } if(sscanf(t,"%d %lf %lf %lf",&N[2],&X[2],&Y[2],&Z[2])!=4) { Message(_("I can not read cube from this file\n"),_("Error"),TRUE); fclose(file); return FALSE; }; return TRUE; } /**************************************************************/ gint* read_numorbs_from_gauss_cube_file(FILE* file) { gint len = BSIZE; gchar t[BSIZE]; gchar** allints; gint norbs; gint* numorbs = NULL; gint i; gint k; if(!fgets(t,len,file)) { Message(_("I can not read cube from this file\n"),_("Error"),TRUE); return NULL; } allints =gab_split (t); norbs = atoi(allints[0]); if(norbs<=0) { if(allints) g_strfreev(allints); return NULL; } numorbs = g_malloc((norbs+1)*sizeof(gint)); numorbs[0] = norbs; for(i=1;i<=norbs && allints[i]!=NULL;i++) numorbs[i] = atoi(allints[i]); g_strfreev(allints); if(i==(norbs+1)) { return numorbs; } k = i; /* Debug("k=%d\n",k);*/ while(!feof(file)) { if(!fgets(t,len,file)) { Message(_("I can not read cube from this file\n"),_("Error"),TRUE); return NULL; } /* Debug("t =%s\n",t);*/ allints =gab_split (t); for(i=0;i+k<=norbs && allints[i]!=NULL;i++) numorbs[i+k] = atoi(allints[i]); g_strfreev(allints); if(i+k==(norbs+1)) { return numorbs; } k = k+i; } return numorbs; } /**********************************************************************************************************/ static GtkWidget *create_orbitals_number_frame( GtkWidget *vboxall,GtkWidget **entry,gint norbs) { GtkWidget *frame; GtkWidget *combo; GtkWidget *vboxframe; #define NL 2 gchar *LabelLeft[NL]; gchar **tlistnum=NULL; gushort i; GtkWidget *Table; LabelLeft[0] = g_strdup(_("Total number of orbitals")); LabelLeft[1] = g_strdup(_("Orbital number")); tlistnum = g_malloc(norbs*sizeof(gchar*)); for(i=0;ichild; gtk_widget_set_sensitive(entry[0],FALSE); gtk_widget_show_all(frame); for (i=0;inorbs) numorb = norbs; set_status_label_info("Grid","Reading..."); if(typefile==0) grid = get_grid_from_gauss_molpro_cube_file(0,file,numorb,norbs,N,XYZ0,X,Y,Z); else grid = get_grid_from_gauss_molpro_cube_file(1,file,numorb,norbs,N,XYZ0,X,Y,Z); if(grid) { limits = grid->limits; if(showisowin) create_iso_orbitals(); set_status_label_info("Grid","Ok"); } else { set_status_label_info("Grid","Nothing"); CancelCalcul = FALSE; } fclose(file); return (grid!=NULL); } /********************************************************************************/ static void apply_read_orb(GtkWidget *button,gpointer data) { GtkWidget **entry = (GtkWidget **)data; GtkWidget *Win = g_object_get_data(G_OBJECT (button), "Window"); gchar* FileName =(gchar*)g_object_get_data(G_OBJECT (button), "FileName"); gint* Norbs =(gint*)g_object_get_data(G_OBJECT (button), "Norbs"); gint* TypeFile =(gint*)g_object_get_data(G_OBJECT (button), "TypeFile"); G_CONST_RETURN gchar* t; gint numorb; if(!this_is_an_object((GtkObject*)entry[0])) return; t = gtk_entry_get_text(GTK_ENTRY(entry[0])); numorb = atoi(t); if(numorb>*Norbs || numorb<=0) { Message(_("Error detected in gabedit\n Please contat the author for this bug"),_("Error"),TRUE); g_free(FileName); g_free(Norbs); delete_child(Win); return; } delete_child(Win); read_gauss_molpro_cube_orbitals_file(FileName,numorb,*Norbs,*TypeFile,TRUE); g_free(FileName); g_free(Norbs); g_free(TypeFile); } /********************************************************************************/ /* * typefile = 0 => Gaussian * typefile = 1 => Molpro */ static void create_window_list_orbitals_numbers(GtkWidget *w,gint norbs,gchar* filename,gint typefile) { GtkWidget *fp; GtkWidget *sep; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *hbox; GtkWidget *button; GtkWidget **entry; gchar *title = _("Orbitals available "); gint* Norbs=g_malloc(sizeof(gint)); gint* TypeFile=g_malloc(sizeof(gint)); gchar* FileName = g_strdup(filename); *Norbs = norbs; *TypeFile = typefile; entry=g_malloc(sizeof(GtkWidget *)); /* Principal Window */ fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(fp),title); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); gtk_widget_realize(fp); add_glarea_child(fp," Orb. List "); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); vboxall = create_vbox(fp); vboxwin = vboxall; frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_add(GTK_CONTAINER(vboxall),frame); gtk_widget_show (frame); vboxall = create_vbox(frame); /* Debug("Creation of orbitals numbers frame\n");*/ frame = create_orbitals_number_frame(vboxall,entry,norbs); sep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(vboxwin), sep, FALSE, FALSE, 2); gtk_widget_show(sep); hbox = create_hbox(vboxwin); gtk_widget_realize(fp); button = create_button(fp,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(fp,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_object_set_data(G_OBJECT (button), "Window", fp); g_object_set_data(G_OBJECT (button), "FileName", FileName); g_object_set_data(G_OBJECT (button), "Norbs", Norbs); g_object_set_data(G_OBJECT (button), "TypeFile", TypeFile); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(apply_read_orb),(gpointer)entry); gtk_widget_show_all(fp); } /**************************************************************/ void read_gauss_molpro_cube_file(GabEditTypeCube typefile,gchar* filename) { FILE* file = FOpen(filename, "rb"); gchar* tmp; gint len = BSIZE; gchar t[BSIZE]; gint Natoms; gdouble XYZ0[3]; gint type; gint N[3]; gdouble X[3]; gdouble Y[3]; gdouble Z[3]; gint* numorbs = NULL; gint norbs = 1; CancelCalcul = FALSE; if(!file) { Message(_("I can not open file\n"),_("Error"),TRUE); return ; } free_data_all(); tmp = get_name_file(filename); set_status_label_info(_("File Name"),tmp); g_free(tmp); switch(typefile) { case GABEDIT_CUBE_GABEDIT : set_status_label_info(_("File type"),"Gabedit Cube"); break; case GABEDIT_CUBE_GAUSS_ORB : case GABEDIT_CUBE_GAUSS_DEN : case GABEDIT_CUBE_GAUSS_GRAD : case GABEDIT_CUBE_GAUSS_LAP : case GABEDIT_CUBE_GAUSS_NGRAD : case GABEDIT_CUBE_GAUSS_POT : set_status_label_info(_("File type"),"Gaussian Cube"); break; case GABEDIT_CUBE_MOLPRO_ORB1 : case GABEDIT_CUBE_MOLPRO_ORBN : case GABEDIT_CUBE_MOLPRO_DEN : case GABEDIT_CUBE_MOLPRO_DEN_GRAD : case GABEDIT_CUBE_MOLPRO_LAPDEN : case GABEDIT_CUBE_MOLPRO_LAPLAP : set_status_label_info(_("File type"),"Molpro Cube"); break; } if(!fgets(t,len,file)) /* Title */ { Message(_("I can not read cube from this file\n"),_("Error"),TRUE); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); fclose(file); return ; } /* Debug("t = %s\n",t);*/ if(!fgets(t,len,file)) /* Type */ { Message(_("I can not read cube from this file\n"),_("Error"),TRUE); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); fclose(file); return; } /* Debug("t = %s\n",t);*/ if(!fgets(t,len,file)) /* NAtoms, X-Origin, Y-Origin, Z-Origin */ { Message(_("I can not read cube from this file\n"),_("Error"),TRUE); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); fclose(file); return; } /* Debug("t = %s\n",t);*/ if(sscanf(t,"%d %lf %lf %lf",&Natoms,&XYZ0[0],&XYZ0[1],&XYZ0[2])!=4) { Message(_("I can not read cube from this file\n"),_("Error"),TRUE); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); fclose(file); return; }; if(Natoms<0) type = 0; else type = 1; Natoms = abs(Natoms); /* Debug("t = %s\n",t);*/ /* Debug("read limits %s\n");*/ if(!read_grid_limits_from_gauss_cube_file(file,N,X,Y,Z)) { set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); return; } /* Debug("read geometry %s\n");*/ if(!read_geometry_from_gauss_cube_file(file,Natoms)) { set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); return; } /* Debug("Natoms = %d\n",Natoms);*/ /* Debug("X = %lf %lf %lf \n",X[0],X[1],X[2]);*/ /* Debug("Y = %lf %lf %lf \n",Y[0],Y[1],Y[2]);*/ /* Debug("Z = %lf %lf %lf \n",Z[0],Z[1],Z[2]);*/ if(type==0 && typefile ==GABEDIT_CUBE_GAUSS_ORB) { if(typefile != GABEDIT_CUBE_GAUSS_ORB) { TypeGrid = GABEDIT_TYPEGRID_ORBITAL; Message(_("Warning : This file is a orbitals cube file\nI read The first orbital\n"),_("Warning"),TRUE); } numorbs = read_numorbs_from_gauss_cube_file(file); if(numorbs) { norbs = numorbs[0]; g_free(numorbs); } if(norbs<=1) { set_status_label_info("Grid","Reading..."); grid = get_grid_from_gauss_molpro_cube_file(0,file,norbs,norbs,N,XYZ0,X,Y,Z); } else { /* Debug("Creation of window orbitals list norbs = %d \n",norbs);*/ create_window_list_orbitals_numbers(NULL,norbs,filename,0); /* Debug("End Creation of window orbitals list\n");*/ } } else if(type==0 && typefile ==GABEDIT_CUBE_MOLPRO_ORBN) { norbs = get_orbitals_number_from_molpro_cube_file(file,N); if(norbs==0) { grid = NULL; if(!CancelCalcul) Message(_("Sorry this is not a orbitals molpro cube file\n"),_("Error"),TRUE); CancelCalcul = FALSE; } else if(norbs==1) { Message(_("One orbital detected in this file\n"),_("Warning"),TRUE); set_status_label_info("Grid","Reading..."); grid = get_grid_from_gauss_molpro_cube_file(0,file,norbs,norbs,N,XYZ0,X,Y,Z); } else { /* Debug("Creation of window orbitals list norbs = %d \n",norbs);*/ create_window_list_orbitals_numbers(NULL,norbs,filename,1); /* Debug("End Creation of window orbitals list\n");*/ } /* Debug("Total number of orbitals = %d ",norbs);*/ } else { set_status_label_info("Grid","Reading..."); switch(typefile) { case GABEDIT_CUBE_GAUSS_ORB: Message(_("Error : This file is not a orbitals cube file\n"),_("Error"),TRUE); grid = NULL; break; case GABEDIT_CUBE_GAUSS_DEN: grid = get_grid_from_gauss_molpro_cube_file(1,file,1,1,N,XYZ0,X,Y,Z); break; case GABEDIT_CUBE_GAUSS_GRAD: grid = get_grid_from_gauss_molpro_cube_file(1,file,1,4,N,XYZ0,X,Y,Z); break; case GABEDIT_CUBE_GAUSS_LAP: grid = get_grid_from_gauss_molpro_cube_file(1,file,1,1,N,XYZ0,X,Y,Z); break; case GABEDIT_CUBE_GAUSS_NGRAD: grid = get_grid_from_gauss_molpro_cube_file(1,file,1,1,N,XYZ0,X,Y,Z); break; case GABEDIT_CUBE_GAUSS_POT: grid = get_grid_from_gauss_molpro_cube_file(1,file,1,1,N,XYZ0,X,Y,Z); break; case GABEDIT_CUBE_MOLPRO_ORB1: grid = get_grid_from_gauss_molpro_cube_file(0,file,1,1,N,XYZ0,X,Y,Z); break; case GABEDIT_CUBE_GABEDIT: grid = get_grid_from_gauss_molpro_cube_file(0,file,1,1,N,XYZ0,X,Y,Z); break; case GABEDIT_CUBE_MOLPRO_ORBN: grid = NULL; break; case GABEDIT_CUBE_MOLPRO_DEN: grid = get_grid_from_gauss_molpro_cube_file(1,file,1,1,N,XYZ0,X,Y,Z); break; case GABEDIT_CUBE_MOLPRO_DEN_GRAD: grid = get_grid_from_gauss_molpro_cube_file(1,file,1,4,N,XYZ0,X,Y,Z); break; case GABEDIT_CUBE_MOLPRO_LAPDEN: grid = get_grid_from_gauss_molpro_cube_file(1,file,1,5,N,XYZ0,X,Y,Z); break; case GABEDIT_CUBE_MOLPRO_LAPLAP: grid = get_grid_from_gauss_molpro_cube_file(1,file,5,5,N,XYZ0,X,Y,Z); break; } } if(grid) { limits = grid->limits; create_iso_orbitals(); set_status_label_info("Grid","Ok"); } else { set_status_label_info("Grid","Nothing"); CancelCalcul = FALSE; } fclose(file); } /********************************************************************************/ void load_cube_gauss_orbitals_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_ORBITAL; add_objects_for_new_grid(); read_gauss_molpro_cube_file(GABEDIT_CUBE_GAUSS_ORB,FileName); } /********************************************************************************/ void load_cube_gauss_density_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_EDENSITY; add_objects_for_new_grid(); read_gauss_molpro_cube_file(GABEDIT_CUBE_GAUSS_DEN,FileName); } /********************************************************************************/ void load_cube_gauss_gradient_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_EDENSITY; add_objects_for_new_grid(); read_gauss_molpro_cube_file(GABEDIT_CUBE_GAUSS_GRAD,FileName); } /********************************************************************************/ void load_cube_gauss_laplacian_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_ORBITAL; add_objects_for_new_grid(); read_gauss_molpro_cube_file(GABEDIT_CUBE_GAUSS_LAP,FileName); } /********************************************************************************/ void load_cube_gauss_normgrad_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_EDENSITY; add_objects_for_new_grid(); read_gauss_molpro_cube_file(GABEDIT_CUBE_GAUSS_NGRAD,FileName); } /********************************************************************************/ void load_cube_gauss_potential_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_ORBITAL; add_objects_for_new_grid(); read_gauss_molpro_cube_file(GABEDIT_CUBE_GAUSS_POT,FileName); } /********************************************************************************/ void load_cube_molpro_orbital_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_ORBITAL; add_objects_for_new_grid(); read_gauss_molpro_cube_file(GABEDIT_CUBE_MOLPRO_ORB1,FileName); } /********************************************************************************/ void load_cube_molpro_orbitals_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_ORBITAL; add_objects_for_new_grid(); read_gauss_molpro_cube_file(GABEDIT_CUBE_MOLPRO_ORBN,FileName); } /********************************************************************************/ void load_cube_molpro_density_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_EDENSITY; add_objects_for_new_grid(); read_gauss_molpro_cube_file(GABEDIT_CUBE_MOLPRO_DEN,FileName); } /********************************************************************************/ void load_cube_molpro_density_gradient_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_EDENSITY; add_objects_for_new_grid(); read_gauss_molpro_cube_file(GABEDIT_CUBE_MOLPRO_DEN_GRAD,FileName); } /********************************************************************************/ void load_cube_molpro_laplacian_density_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_EDENSITY; add_objects_for_new_grid(); read_gauss_molpro_cube_file(GABEDIT_CUBE_MOLPRO_LAPDEN,FileName); } /********************************************************************************/ void load_cube_molpro_laplacian_laplacian_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_ORBITAL; add_objects_for_new_grid(); read_gauss_molpro_cube_file(GABEDIT_CUBE_MOLPRO_LAPLAP,FileName); } /********************************************************************************/ void load_cube_gabedit_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_ORBITAL; add_objects_for_new_grid(); read_gauss_molpro_cube_file(GABEDIT_CUBE_GABEDIT,FileName); } /********************************************************************************/ void subtract_cube(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(!grid) { Message(_("Sorry, you have not a default grid"),_("Error"),TRUE); return; } if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_ORBITAL; subtract_cube_file(FileName); } /********************************************************************************/ void mapping_cube(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(!grid) { Message(_("Sorry, you have not a default grid"),_("Error"),TRUE); return; } if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); if(TypeGrid != GABEDIT_TYPEGRID_SAS) TypeGrid = GABEDIT_TYPEGRID_ORBITAL; read_mapping_cube_file(FileName); } /********************************************************************************/ void save_cube_gabedit_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(!grid) { Message(_("Sorry, you have not a default grid"),_("Error"),TRUE); return; } if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); save_grid_gabedit_cube_file(FileName); } /********************************************************************************/ void mapping_with_mep(gint N[],GridLimits limits, PoissonSolverMethod psMethod) { Grid* mep = NULL; GabEditTypeGrid oldTypeGrid = TypeGrid; if (psMethod==GABEDIT_EXACT) mep = compute_mep_grid_exact(N, limits); else if(psMethod != GABEDIT_UNK) mep = solve_poisson_equation_from_orbitals(N,limits, psMethod); else mep = compute_mep_grid_using_multipol_from_orbitals(N, limits, get_multipole_rank()); TypeGrid = oldTypeGrid; if(!mep) return; mapping_cube_by_an_other_cube(mep); free_grid(mep); } /********************************************************************************/ void mapping_with_mep_from_multipol(gint lmax) { Grid* mep = NULL; GabEditTypeGrid oldTypeGrid = TypeGrid; mep = compute_mep_grid_using_multipol_from_orbitals(grid->N, grid->limits, lmax); TypeGrid = oldTypeGrid; if(!mep) return; mapping_cube_by_an_other_cube(mep); free_grid(mep); } /********************************************************************************/ void mapping_with_mep_from_charges() { Grid* mep = NULL; GabEditTypeGrid oldTypeGrid = TypeGrid; gdouble s= GetSumAbsCharges(); if(s<1e-6) { Message(_("Sorry, All partial charges are null\n"),_("Error"),TRUE); return; } mep = compute_mep_grid_using_partial_charges_cube_grid(grid); TypeGrid = oldTypeGrid; if(!mep) return; mapping_cube_by_an_other_cube(mep); free_grid(mep); } /********************************************************************************/ void mapping_with_fed(gint n) { Grid* mep = NULL; GabEditTypeGrid oldTypeGrid = TypeGrid; if(n==0) TypeGrid = GABEDIT_TYPEGRID_FEDELECTROPHILIC; else if(n==2) TypeGrid = GABEDIT_TYPEGRID_FEDNUCLEOPHILIC; else TypeGrid = GABEDIT_TYPEGRID_FEDRADICAL; mep = compute_fed_grid_using_cube_grid(grid, n); TypeGrid = oldTypeGrid; if(!mep) return; mapping_cube_by_an_other_cube(mep); free_grid(mep); } /********************************************************************************/ static Grid* get_grid_from_dx_file(FILE* file, gint N[], gdouble XYZ0[3],gdouble X[3],gdouble Y[3],gdouble Z[3]) { Grid* grid; gint i; gint j; gint k; gdouble x; gdouble y; gdouble z; gdouble v; gboolean beg = TRUE; gdouble scal; GridLimits limits; gboolean Ok = FALSE; gchar t[BSIZE]; gint len = BSIZE; while(!Ok) { if(!fgets(t,len,file)) return NULL; if(strstr(t,"class array")) { Ok = TRUE; break; } } if(!Ok) return NULL; for(i=0;i<3;i++) limits.MinMax[0][i] = XYZ0[i]; limits.MinMax[1][0] = XYZ0[0] + (N[0]-1)*X[0] + (N[1]-1)*X[1] + (N[2]-1)*X[2]; limits.MinMax[1][1] = XYZ0[1] + (N[0]-1)*Y[0] + (N[1]-1)*Y[1] + (N[2]-1)*Y[2]; limits.MinMax[1][2] = XYZ0[2] + (N[0]-1)*Z[0] + (N[1]-1)*Z[1] + (N[2]-1)*Z[2]; grid = grid_point_alloc(N,limits); progress_orb(0,GABEDIT_PROGORB_READGRID,TRUE); scal = (gdouble)1.01/grid->N[0]; for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { while(!feof(file)) { if(fgets(t,len,file)) if(1==sscanf(t,"%lf", &v))break; } x = XYZ0[0] + i*X[0] + j*X[1] + k*X[2]; y = XYZ0[1] + i*Y[0] + j*Y[1] + k*Y[2]; z = XYZ0[2] + i*Z[0] + j*Z[1] + k*Z[2]; grid->point[i][j][k].C[0] = x; grid->point[i][j][k].C[1] = y; grid->point[i][j][k].C[2] = z; grid->point[i][j][k].C[3] = v; if(beg) { beg = FALSE; grid->limits.MinMax[0][3] = v; grid->limits.MinMax[1][3] = v; } else { if(grid->limits.MinMax[0][3]>v) grid->limits.MinMax[0][3] = v; if(grid->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_READGRID,TRUE); break; } progress_orb(scal,GABEDIT_PROGORB_READGRID,FALSE); } if(CancelCalcul) { grid = free_grid(grid); } progress_orb(0,GABEDIT_PROGORB_READGRID,TRUE); return grid; } /**************************************************************/ gboolean read_dx_grid_file(gchar* filename, gboolean showisowin) { FILE* file = FOpen(filename, "rb"); gchar* tmp; gint len = BSIZE; gchar t[BSIZE]; gdouble XYZ0[3]; gint N[3]; gdouble X[3]; gdouble Y[3]; gdouble Z[3]; gboolean Ok = FALSE; gchar* p; gchar dum[100]; CancelCalcul = FALSE; if(!file) { Message(_("I can not open file\n"),_("Error"),TRUE); return FALSE; } free_data_all(); tmp = get_name_file(filename); set_status_label_info(_("File Name"),tmp); g_free(tmp); set_status_label_info(_("File type"),"dx grid"); while(!Ok) { if(!fgets(t,len,file)) { Message(_("I can not read grid from this file\n"),_("Error"),TRUE); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); fclose(file); return FALSE; } if(strstr(t,"gridpositions counts")) { Ok = TRUE; break; } } if(!Ok) { Message(_("I can not read grid from this file\n"),_("Error"),TRUE); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); fclose(file); return FALSE; } p = strstr(t,"gridpositions counts")+strlen("gridpositions counts"); if(3!=sscanf(p,"%d %d %d",&N[0], &N[1], &N[2])) { Message(_("I can not read cube from this file\n"),_("Error"),TRUE); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); fclose(file); return FALSE; } if(!fgets(t,len,file) || sscanf(t,"%s %lf %lf %lf",dum,&XYZ0[0],&XYZ0[1],&XYZ0[2])!=4) { Message(_("I can not read grid from this file\n"),_("Error"),TRUE); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); fclose(file); return FALSE; } if(!fgets(t,len,file) || sscanf(t,"%s %lf %lf %lf",dum,&X[0],&X[1],&X[2])!=4) { Message(_("I can not read grid from this file\n"),_("Error"),TRUE); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); fclose(file); return FALSE; } if(!fgets(t,len,file) || sscanf(t,"%s %lf %lf %lf",dum,&Y[0],&Y[1],&Y[2])!=4) { Message(_("I can not read grid from this file\n"),_("Error"),TRUE); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); fclose(file); return FALSE; } if(!fgets(t,len,file) || sscanf(t,"%s %lf %lf %lf",dum,&Z[0],&Z[1],&Z[2])!=4) { Message(_("I can not read grid from this file\n"),_("Error"),TRUE); set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); fclose(file); return FALSE; } grid = get_grid_from_dx_file(file,N,XYZ0,X,Y,Z); if(grid) { limits = grid->limits; if(showisowin) create_iso_orbitals(); set_status_label_info("Grid","Ok"); } else { set_status_label_info("Grid","Nothing"); CancelCalcul = FALSE; } fclose(file); return (grid!=NULL); } /********************************************************************************/ void load_dx_grid_file(GabeditFileChooser *selFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(selFile); gtk_widget_hide(GTK_WIDGET(selFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_ORBITAL; add_objects_for_new_grid(); read_dx_grid_file(fileName,TRUE); } /********************************************************************************/ void compute_integral_all_space() { gdouble integ; gchar* result = NULL; if(compute_integrale_from_grid_all_space(grid,&integ)) result = g_strdup_printf("Integral = %0.12lf",integ); else result = g_strdup_printf("Canceled? !\n If not see your terminal "); if(result && !CancelCalcul) { GtkWidget* message = MessageTxt(result,_("Result")); gtk_window_set_modal (GTK_WINDOW (message), TRUE); gtk_window_set_transient_for(GTK_WINDOW(message),GTK_WINDOW(PrincipalWindow)); } if(CancelCalcul) CancelCalcul = FALSE; } /********************************************************************************/ void cut_cube(gint dir, gboolean left) { gint i, j, k; gboolean beg = TRUE; gdouble v; gdouble scal; gint N[3]; Grid* newGrid; GridLimits newLimits; gint c; gint ii, jj, kk; gint min[3]; gint max[3]; if(grid->N[0]<3) return; if(grid->N[1]<3) return; if(grid->N[2]<3) return; for(i=0;i<=2;i++) N[i] = grid->N[i]; N[dir] = (grid->N[dir]+1)/2; newLimits = grid->limits; for(i=0;i<=2;i++) { min[i] = 0; max[i] = N[i]-1; if(left && dir==i) { min[i] = N[i]-1; if(grid->N[i]%2==0) min[i]++; max[i] = grid->N[i]-1; } } for(c=0;c<3;c++) newLimits.MinMax[0][c] = grid->point[min[0]][min[1]][min[2]].C[c]; for(c=0;c<3;c++) newLimits.MinMax[1][c] = grid->point[max[0]][max[1]][max[2]].C[c]; newGrid = grid_point_alloc(N,newLimits); progress_orb(0,GABEDIT_PROGORB_SCALEGRID,TRUE); scal = (gdouble)1.01/(max[0]-min[0]+1); for(i=min[0];i<=max[0];i++) { ii=i-min[0]; for(j=min[1];j<=max[1];j++) { jj=j-min[1]; for(k=min[2];k<=max[2];k++) { kk=k-min[2]; for( c=0;c<4;c++) newGrid->point[ii][jj][kk].C[c] = grid->point[i][j][k].C[c]; v = grid->point[i][j][k].C[3]; if(beg) { beg = FALSE; newGrid->limits.MinMax[0][3] = v; newGrid->limits.MinMax[1][3] = v; } else { if(newGrid->limits.MinMax[0][3]>v) newGrid->limits.MinMax[0][3] = v; if(newGrid->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_SCALEGRID,TRUE); break; } progress_orb(scal,GABEDIT_PROGORB_SCALEGRID,FALSE); } progress_orb(0,GABEDIT_PROGORB_SCALEGRID,TRUE); if(CancelCalcul) newGrid = free_grid(newGrid); else { grid = free_grid(grid); grid = newGrid; limits = grid->limits; } } /********************************************************************************/ void applyCutLeft0(GtkWidget *Win,gpointer data) { cut_cube(0,TRUE); create_iso_orbitals(); glarea_rafresh(GLArea); } /********************************************************************************/ void applyCutRight0(GtkWidget *Win,gpointer data) { cut_cube(0,FALSE); create_iso_orbitals(); glarea_rafresh(GLArea); } /********************************************************************************/ void applyCutLeft1(GtkWidget *Win,gpointer data) { cut_cube(1,TRUE); create_iso_orbitals(); glarea_rafresh(GLArea); } /********************************************************************************/ void applyCutRight1(GtkWidget *Win,gpointer data) { cut_cube(1,FALSE); create_iso_orbitals(); glarea_rafresh(GLArea); } /********************************************************************************/ void applyCutLeft2(GtkWidget *Win,gpointer data) { cut_cube(2,TRUE); create_iso_orbitals(); glarea_rafresh(GLArea); } /********************************************************************************/ void applyCutRight2(GtkWidget *Win,gpointer data) { cut_cube(2,FALSE); create_iso_orbitals(); glarea_rafresh(GLArea); } /********************************************************************************/ GabeditSrc250/src/Display/AnimationPlanesMapped.h0000644000175100017510000000271313130665225022254 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_ANIMATIONPLANESMAPPED_H__ #define __GABEDIT_ANIMATIONPLANESMAPPED_H__ void animationPlanesMappedDlg(); #endif /* __GABEDIT_ANIMATIONPLANESMAPPED_H__ */ GabeditSrc250/src/Display/CaptureOrbitals.c0000644000175100017510000011725413130665225021150 0ustar alloucheallouche/* CaptureOrbitals.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Display/GlobalOrb.h" #include "../Utils/Vector3d.h" #include "../Display/GLArea.h" #include "../Display/Orbitals.h" #include "../Display/OrbitalsMolpro.h" #include "../Display/OrbitalsGamess.h" #include "../Display/OrbitalsQChem.h" #include "../Display/GeomOrbXYZ.h" #include "../Display/BondsOrb.h" #include "../Display/UtilsOrb.h" #include "../Display/TriangleDraw.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Files/FileChooser.h" #include "../Common/Windows.h" #include "../Display/Vibration.h" #include "../Display/ContoursPov.h" #include "../Display/PlanesMappedPov.h" #include "../Display/LabelsGL.h" #include "../Display/Images.h" #define WIDTHSCR 0.3 /********************************************************************************/ static void resize_image(GtkWidget *widget, gint width, gint height) { GdkPixbuf *pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(widget)); if (pixbuf == NULL) return; pixbuf = gdk_pixbuf_scale_simple(pixbuf, width, height, GDK_INTERP_BILINEAR); gtk_image_set_from_pixbuf(GTK_IMAGE(widget), pixbuf); } /********************************************************************************/ static void get_image_size(GtkWidget *widget, gint* width, gint* height) { GdkPixbuf *pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(widget)); *width = 0; *height = 0; if (pixbuf == NULL) return; *width = gdk_pixbuf_get_width (pixbuf); *height = gdk_pixbuf_get_height (pixbuf); } /********************************************************************************/ static void export_slides_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; GtkWidget *window = NULL; gchar* type = NULL; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } window = g_object_get_data (G_OBJECT (SelecFile), "Window"); type = g_object_get_data (G_OBJECT (SelecFile), "Type"); if(!window) return; if(!type) return; gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); gabedit_save_image(window, fileName, type); } /********************************************************************************/ static void export_png_file_dlg(GtkWidget *window, gpointer data) { static gchar* type ="png"; GtkWidget* chooser = file_chooser_save(export_slides_file,"Capture slides in png file",GABEDIT_TYPEFILE_PNG,GABEDIT_TYPEWIN_ORB); g_object_set_data (G_OBJECT (chooser), "Window",window); g_object_set_data (G_OBJECT (chooser), "Type",type); gtk_window_set_modal (GTK_WINDOW (chooser), TRUE); } /********************************************************************************/ static void export_jpeg_file_dlg(GtkWidget *window, gpointer data) { static gchar* type ="jpeg"; GtkWidget* chooser = file_chooser_save(export_slides_file,"capture slides in jpeg file",GABEDIT_TYPEFILE_JPEG,GABEDIT_TYPEWIN_ORB); g_object_set_data (G_OBJECT (chooser), "Window",window); g_object_set_data (G_OBJECT (chooser), "Type",type); gtk_window_set_modal (GTK_WINDOW (chooser), TRUE); } /********************************************************************************/ static void create_images_window (gint n, gint* numOrbs,gchar* prefix,gchar* title, gdouble scal, gint nCols) { GtkWidget *window; GtkWidget *scrolled_window; GtkWidget *table; GtkWidget *hbox; GtkWidget *button; gint nRows = n; GtkWidget *vbox; gint i; gint j; gint k; gint iw=100; if(nCols<1) nCols = 1; nRows = n/nCols+1; window = gtk_window_new(GTK_WINDOW_TOPLEVEL); vbox = create_vbox(window); g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); gtk_window_set_title (GTK_WINDOW (window), title); gtk_container_set_border_width (GTK_CONTAINER (window), 0); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0); gtk_widget_show (scrolled_window); table = gtk_table_new (nRows, nCols, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 1); gtk_table_set_col_spacings (GTK_TABLE (table), 1); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); gtk_container_set_focus_hadjustment (GTK_CONTAINER (table), gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window))); gtk_container_set_focus_vadjustment (GTK_CONTAINER (table), gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window))); gtk_widget_show (table); k = 0; for (i = 0; i < nRows; i++) { for (j = 0; j < nCols; j++) { gchar* fileName = g_strdup_printf("%s_%d.png",prefix,numOrbs[k++]); GtkWidget* image = gtk_image_new_from_file (fileName); gint width; gint height; gint h = (gint)(ScreenHeight*scal); gint w = h; get_image_size(image, &width, &height); w = (gint)(width*h*1.0/height); iw = w; if(image) gtk_table_attach(GTK_TABLE(table),image, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_widget_show (image); if(image && height>h) resize_image(image, w, h); else iw = width; if(k>=n)break; } if(k>=n)break; } iw = (iw+15)*nCols; if(iw>(gint)(0.95*ScreenWidth)) iw = (gint)(0.95*ScreenWidth); gtk_window_set_default_size (GTK_WINDOW (window), iw, (gint)(ScreenHeight*0.9)); hbox = create_hbox_false(vbox); gtk_widget_realize(window); button = create_button(window,"Screen capture PNG"); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)export_png_file_dlg,G_OBJECT(table)); button = create_button(window,"Screen capture JPEG"); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)export_jpeg_file_dlg,G_OBJECT(table)); gtk_widget_show (window); } /********************************************************************************/ static gint* get_num_of_selected_orbitals(GtkWidget *gtklist, gint* n) { gint* numOrbs = NULL; *n = 0; if (gtklist == NULL) return NULL; if(!GTK_IS_TREE_VIEW(gtklist)) return NULL; { GtkTreeSelection *selection; GtkTreeModel *model; GList *selected_rows = NULL; GList *row; GtkTreePath *path = NULL; gint* indices = NULL; gint i = 0; selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(gtklist)); if(selection) selected_rows = gtk_tree_selection_get_selected_rows (selection, &model); *n = gtk_tree_selection_count_selected_rows(selection); if(*n<1) return numOrbs; numOrbs = g_malloc(*n*sizeof(gint)); i =0; for (row = g_list_first (selected_rows); row != NULL; row = g_list_next (row)) { path = (GtkTreePath *)(row->data); indices = gtk_tree_path_get_indices(path); numOrbs[i++] = indices[0]; if(i>=*n) break; } } return numOrbs; } /********************************************************************************/ static void apply_capture_orbitals(GtkWidget *Win,gpointer data) { GtkWidget** entriestmp = NULL; G_CONST_RETURN gchar* temp; gchar* dump; gint i; gint j; GridLimits limitstmp; gint NumPointstmp[3]; GtkWidget *entries[3][6]; gdouble V[3][3]; GtkWidget* buttonDirSelector = g_object_get_data (G_OBJECT (Win), "ButtonDirSelector"); gchar* dirName = NULL; GtkWidget* entryIsoValue = g_object_get_data (G_OBJECT (Win), "EntryIsoValue"); gdouble isovalue = 0.1; GtkWidget* alphaList = g_object_get_data (G_OBJECT (Win), "AlphaList"); GtkWidget* betaList = g_object_get_data (G_OBJECT (Win), "BetaList"); gint* numAlphaOrbs = NULL; gint* numBetaOrbs = NULL; gint nAlpha = 0; gint nBeta = 0; gint iAlpha = -1; gint iBeta = -1; GtkWidget* numberButton = g_object_get_data (G_OBJECT (Win), "NumberButton"); GtkWidget* energyButton = g_object_get_data (G_OBJECT (Win), "EnergyButton"); GtkWidget* symmetryButton = g_object_get_data (G_OBJECT (Win), "SymmetryButton"); GtkWidget* occButton = g_object_get_data (G_OBJECT (Win), "OccButton"); GtkWidget* homoLumoButton = g_object_get_data (G_OBJECT (Win), "HomoLumoButton"); GtkWidget* entryPrefix=g_object_get_data (G_OBJECT (Win), "EntryPrefix"); GtkWidget* columnSpinButton = g_object_get_data (G_OBJECT (Win), "ColumnSpinButton"); GtkWidget* scaleSpinButton = g_object_get_data (G_OBJECT (Win), "ScaleSpinButton"); gboolean showNumberButton = FALSE; gboolean showEnergyButton = FALSE; gboolean showSymmetryButton = FALSE; gboolean showOccButton = FALSE; gboolean showHomoLumoButton = FALSE; gchar* prefix = NULL; gdouble scale = 0.2; gint nCols = 3; if(GTK_IS_WIDGET(Win)) { entriestmp = (GtkWidget **)g_object_get_data(G_OBJECT (Win), "Entries"); } else return; if(entriestmp==NULL) return; for(i=0;i<3;i++) for(j=0;j<6;j++) entries[i][j] = entriestmp[i*6+j]; for(i=0;i<3;i++) { for(j=3;j<5;j++) { temp = gtk_entry_get_text(GTK_ENTRY(entries[i][j])); dump = NULL; if(temp && strlen(temp)>0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { limitstmp.MinMax[j-3][i] = atof(dump); } else { GtkWidget* message = Message(_("Error : one entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } temp = gtk_entry_get_text(GTK_ENTRY(entries[i][5])); NumPointstmp[i] = atoi(temp); if(NumPointstmp[i] <=2) { GtkWidget* message = Message(_("Error : The number of points should be > 2. "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } } for(i=0;i<3;i++) { if( limitstmp.MinMax[0][i]> limitstmp.MinMax[1][i]) { GtkWidget* message = Message(_("Error : The minimal value should be smaller than the maximal value "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } } for(i=0;i<3;i++) { for(j=0;j<3;j++) { V[i][j] = 0; temp = gtk_entry_get_text(GTK_ENTRY(entries[i][j])); dump = NULL; if(temp && strlen(temp)>0) { dump = g_strdup(temp); delete_first_spaces(dump); delete_last_spaces(dump); } if(dump && strlen(dump)>0 && this_is_a_real(dump)) { V[i][j] = atof(dump); } else { GtkWidget* message = Message(_("Error : one entry is not a float "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(dump) g_free(dump); } } for(i=0;i<3;i++) { gdouble norm = 0.0; for(j=0;j<3;j++) norm += V[i][j]*V[i][j]; if(fabs(norm)<1e-8) { GtkWidget* message = Message(_("Error : the norm is equal to 0 "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } for(j=0;j<3;j++) V[i][j] /= sqrt(norm); } for(j=0;j<3;j++) originOfCube[j] = 0; for(j=0;j<3;j++) firstDirection[j] = V[0][j]; for(j=0;j<3;j++) secondDirection[j] = V[1][j]; for(j=0;j<3;j++) thirdDirection[j] = V[2][j]; for(i=0;i<3;i++) { NumPoints[i] =NumPointstmp[i] ; for(j=0;j<2;j++) limits.MinMax[j][i] =limitstmp.MinMax[j][i]; } if(buttonDirSelector) { dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); if(!dirName) dirName = g_strdup(g_get_current_dir()); if(dirName && dirName[strlen(dirName)-1] != G_DIR_SEPARATOR) { gchar* tmp = dirName; dirName = g_strdup_printf("%s%s",tmp, G_DIR_SEPARATOR_S); g_free(tmp); } } if(entryIsoValue) { temp = gtk_entry_get_text(GTK_ENTRY(entryIsoValue)); if(temp) isovalue = atof(temp); } /* printf("DirName = %s\n",dirName);*/ numAlphaOrbs = get_num_of_selected_orbitals(alphaList, &nAlpha); numBetaOrbs = get_num_of_selected_orbitals(betaList, &nBeta); /* printf("Selected alpha orbitals : "); for(i=0;i0) pLabel = g_strdup_printf("%s ",prefix); else pLabel = g_strdup(" "); if(showNumberButton) nLabel = g_strdup_printf(" n=%d ",ii+1); else nLabel = g_strdup(" "); if(showEnergyButton) eLabel = g_strdup_printf(" E=%0.6e ",EnerAlphaOrbitals[ii]); else eLabel = g_strdup(" "); if(showOccButton) oLabel = g_strdup_printf(" Occ=%0.3f ",OccAlphaOrbitals[ii]); else oLabel = g_strdup(" "); if(showSymmetryButton) sLabel = g_strdup_printf(" Sym=%s ",SymAlphaOrbitals[ii]); else sLabel = g_strdup(" "); if(showHomoLumoButton) { gint nh = ii+1-NAlphaOcc; if(nh==0) hLabel = g_strdup_printf("Homo"); else if(nh<0) hLabel = g_strdup_printf("Homo%d",nh); else { if(nh==1) hLabel = g_strdup_printf("Lumo"); else hLabel = g_strdup_printf("Lumo+%d",nh-1); } } else hLabel = g_strdup(" "); title = g_strdup_printf("%s%s%s%s%s%s",pLabel,hLabel,nLabel,eLabel,oLabel,sLabel); free_surfaces_all(); NumSelOrb = numAlphaOrbs[i]; Define_Grid(); Define_Iso(fabs(isovalue)); set_label_title(title,0,0); glarea_rafresh(GLArea); while( gtk_events_pending() ) gtk_main_iteration(); gabedit_save_image_gl(GLArea, fileName, "png",NULL); g_free(fileName); g_free(title); g_free(pLabel); g_free(nLabel); g_free(eLabel); g_free(sLabel); g_free(oLabel); g_free(hLabel); } iAlpha = i; if(iAlpha != nAlpha) nBeta = 0; TypeSelOrb = 2; for(i=0;i0) pLabel = g_strdup_printf("%s ",prefix); else pLabel = g_strdup(" "); if(showNumberButton) nLabel = g_strdup_printf(" n=%d ",ii+1); else nLabel = g_strdup(" "); if(showEnergyButton) eLabel = g_strdup_printf(" E=%0.6e ",EnerBetaOrbitals[ii]); else eLabel = g_strdup(" "); if(showOccButton) oLabel = g_strdup_printf(" Occ=%0.3f ",OccBetaOrbitals[ii]); else oLabel = g_strdup(" "); if(showSymmetryButton) sLabel = g_strdup_printf(" Sym=%s ",SymBetaOrbitals[ii]); else sLabel = g_strdup(" "); if(showHomoLumoButton) { gint nh = ii+1-NAlphaOcc; if(nh==0) hLabel = g_strdup_printf("Homo"); else if(nh<0) hLabel = g_strdup_printf("Homo%d",nh); else { if(nh==1) hLabel = g_strdup_printf("Lumo"); else hLabel = g_strdup_printf("Lumo+%d",nh-1); } } else hLabel = g_strdup(" "); title = g_strdup_printf("%s%s%s%s%s%s",pLabel,hLabel,nLabel,eLabel,oLabel,sLabel); free_surfaces_all(); NumSelOrb = numBetaOrbs[i]; Define_Grid(); Define_Iso(fabs(isovalue)); set_label_title(title,0,0); glarea_rafresh(GLArea); while( gtk_events_pending() ) gtk_main_iteration(); gabedit_save_image_gl(GLArea, fileName, "png",NULL); g_free(fileName); g_free(title); g_free(pLabel); g_free(nLabel); g_free(eLabel); g_free(sLabel); g_free(oLabel); g_free(hLabel); } iBeta = i; if(nAlpha>0 && iAlpha==nAlpha) { gchar* prefix = g_strdup_printf("%sgabOrbAlpha",dirName); create_images_window (nAlpha, numAlphaOrbs,prefix,_("Alpha orbitals"),scale,nCols); g_free(prefix); } if(nBeta>0 && iBeta==nBeta) { gchar* prefix = g_strdup_printf("%sgabOrbBeta",dirName); create_images_window (nBeta, numBetaOrbs,prefix,_("Beta Orbitals"),scale,nCols); g_free(prefix); } set_label_title(NULL,0,0); if(numAlphaOrbs) g_free(numAlphaOrbs); if(numBetaOrbs) g_free(numBetaOrbs); if(dirName) g_free(dirName); if(prefix) g_free(prefix); if(CancelCalcul) CancelCalcul = FALSE; } /********************************************************************************/ static GtkWidget *create_folder_frame( GtkWidget *vboxall,gchar* title) { GtkWidget *frame; GtkWidget *vboxframe; gushort i; gushort j; GtkWidget *table; GtkWidget *buttonDirSelector; GtkWidget *label; frame = gtk_frame_new (title); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(1,3,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),table); /*----------------------------------------------------------------------------------*/ i = 0; j = 0; label = gtk_label_new(_("Folder")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 2; buttonDirSelector = gabedit_dir_button(); gtk_table_attach(GTK_TABLE(table),buttonDirSelector, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_widget_show_all(frame); g_object_set_data (G_OBJECT (frame), "ButtonDirSelector",buttonDirSelector); return frame; } /********************************************************************************/ static GtkWidget *create_isovalue_frame( GtkWidget *vboxall,gchar* title) { GtkWidget *frame; GtkWidget *vboxframe; gushort i; gushort j; GtkWidget *table; GtkWidget *entryIsoValue; GtkWidget *label; frame = gtk_frame_new (title); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(1,3,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),table); /*----------------------------------------------------------------------------------*/ i = 0; j = 0; label = gtk_label_new(_("Isovalue")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 2; entryIsoValue = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryIsoValue),"0.1"); gtk_table_attach(GTK_TABLE(table),entryIsoValue, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_widget_show_all(frame); g_object_set_data (G_OBJECT (frame), "EntryIsoValue",entryIsoValue); return frame; } /********************************************************************************/ static GtkWidget *create_labels_frame( GtkWidget *vboxall,gchar* title) { GtkWidget *frame; GtkWidget *vboxframe; gushort i; gushort j; GtkWidget *table; GtkWidget *numberButton; GtkWidget *energyButton; GtkWidget *symmetryButton; GtkWidget *occButton; GtkWidget *homoLumoButton; GtkWidget *label; GtkWidget *entryPrefix; frame = gtk_frame_new (title); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(1,8,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),table); /*----------------------------------------------------------------------------------*/ i = 0; j = 0; numberButton = gtk_check_button_new_with_label (_("Number")); gtk_table_attach(GTK_TABLE(table),numberButton, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 1; energyButton = gtk_check_button_new_with_label (_("Energy")); gtk_table_attach(GTK_TABLE(table),energyButton, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 2; symmetryButton = gtk_check_button_new_with_label (_("Symbol")); gtk_table_attach(GTK_TABLE(table),symmetryButton, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 3; occButton = gtk_check_button_new_with_label (_("Occ. #")); gtk_table_attach(GTK_TABLE(table),occButton, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 4; homoLumoButton = gtk_check_button_new_with_label (_("Homo/Lumo number")); gtk_table_attach(GTK_TABLE(table),homoLumoButton, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 5; label = gtk_label_new(_("prefix")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 6; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 7; entryPrefix = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryPrefix),""); gtk_table_attach(GTK_TABLE(table),entryPrefix, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_widget_show_all(frame); g_object_set_data (G_OBJECT (frame), "EntryPrefix",entryPrefix); g_object_set_data (G_OBJECT (frame), "NumberButton",numberButton); g_object_set_data (G_OBJECT (frame), "EnergyButton",energyButton); g_object_set_data (G_OBJECT (frame), "SymmetryButton",symmetryButton); g_object_set_data (G_OBJECT (frame), "OccButton",occButton); g_object_set_data (G_OBJECT (frame), "HomoLumoButton",homoLumoButton); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(numberButton), TRUE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(energyButton), FALSE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(symmetryButton), FALSE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(homoLumoButton), TRUE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(occButton), FALSE); return frame; } /********************************************************************************/ static GtkWidget *create_slides_frame( GtkWidget *vboxall,gchar* title) { GtkWidget *frame; GtkWidget *vboxframe; gushort i; gushort j; GtkWidget *table; GtkWidget *scaleSpinButton; GtkWidget *columnSpinButton; GtkWidget *label; frame = gtk_frame_new (title); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(1,6,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),table); /*----------------------------------------------------------------------------------*/ i = 0; j = 0; label = gtk_label_new(_("Nubmer of slides by row")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 2; columnSpinButton = gtk_spin_button_new_with_range (1, 100, 1); gtk_table_attach(GTK_TABLE(table),columnSpinButton, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_spin_button_set_value (GTK_SPIN_BUTTON (columnSpinButton), 3); /*----------------------------------------------------------------------------------*/ i = 0; j = 3; label = gtk_label_new(_("Slide size/Screen size")); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 4,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 4; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 5; scaleSpinButton = gtk_spin_button_new_with_range (0.1, 1.0, 0.1); gtk_table_attach(GTK_TABLE(table),scaleSpinButton, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_spin_button_set_value (GTK_SPIN_BUTTON (scaleSpinButton), 0.25); gtk_widget_show_all(frame); g_object_set_data (G_OBJECT (frame), "ColumnSpinButton",columnSpinButton); g_object_set_data (G_OBJECT (frame), "ScaleSpinButton",scaleSpinButton); return frame; } /********************************************************************************/ static GtkWidget* new_gtk_list_orbitals(gint N,gdouble* Energies,gdouble* Occ,gchar** sym, gint* widall) { gint i; gint j; GtkWidget* gtklist = NULL; gint *Width = NULL; gint NlistTitle = 4; gchar* Titles[] = {"Nr","Energy","Occ.","Sym."}; gchar* List[4]; GtkListStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeSelection *select; GtkTreeIter iter; GType* types; Width = g_malloc(NlistTitle*sizeof(gint)); for (j=0;jUse mouse + the Ctrl key (or the shift key) to select several orbitals\n"); gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); hbox = create_orbitals_list(vboxall); alphaList = g_object_get_data (G_OBJECT (hbox), "AlphaList"); g_object_set_data (G_OBJECT (Win), "AlphaList",alphaList); betaList = g_object_get_data (G_OBJECT (hbox), "BetaList"); g_object_set_data (G_OBJECT (Win), "BetaList",betaList); hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,"OK"); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_capture_orbitals,G_OBJECT(Win)); button = create_button(Win,"Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, G_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,G_OBJECT(Win)); gtk_widget_show (button); gtk_widget_show_all (Win); } GabeditSrc250/src/Display/TriangleDraw.h0000644000175100017510000000371113130665225020425 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_TRIANGLEDRAW_H__ #define __GABEDIT_TRIANGLEDRAW_H__ #include "../Utils/Vector3d.h" #include "../Utils/Transformation.h" void get_color_surface(gint num,gdouble v[]); void set_color_surface(gint num,gdouble v[]); void TriangeShow(V3d V1,V3d V2,V3d V3,V3d N); void IsoDraw( IsoSurface* iso); void IsoGenLists(GLuint *positiveSurface, GLuint *negativeSurface, GLuint *nullSurface, IsoSurface* isopositive,IsoSurface* isonegative,IsoSurface* isonull); void IsoShowLists(GLuint positiveSurface, GLuint negativeSurface, GLuint nullSurface); void set_opacity_dlg(); void BoxGenLists(GLuint *box); void BoxShowLists(GLuint box); #endif /* __GABEDIT_TRIANGLEDRAW_H__ */ GabeditSrc250/src/Display/OrbitalsMopac.h0000644000175100017510000000267613130665225020612 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_ORBITALSMOPAC_H__ #define __GABEDIT_ORBITALSMOPAC_H__ void read_mopac_orbitals(gchar* FileName); #endif /* __GABEDIT_ORBITALSMOPAC_H__ */ GabeditSrc250/src/Display/AnimationGrids.c0000644000175100017510000012403413130665225020747 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "GlobalOrb.h" #include "../Utils/AtomsProp.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Display/StatusOrb.h" #include "../Display/GLArea.h" #include "../Display/AnimationGrids.h" #include "../Display/GridCube.h" #include "../Display/GeomOrbXYZ.h" #include "../Display/AtomicOrbitals.h" #include "../Files/FileChooser.h" #include "../Geometry/GeomGlobal.h" #include "../Files/FolderChooser.h" #include "../Files/GabeditFolderChooser.h" #include "../Common/Help.h" #include "../Common/StockIcons.h" #include "../Display/PovrayGL.h" #include "../Display/Images.h" #include "../Display/UtilsOrb.h" #include "../Display/BondsOrb.h" static GtkWidget *WinDlg = NULL; static GtkWidget *EntryVelocity = NULL; static GtkWidget *EntryIsoValue = NULL; static GtkWidget *PlayButton = NULL; static GtkWidget *StopButton = NULL; static GtkTreeView *treeView = NULL; static gboolean play = FALSE; static GtkWidget *buttonCheckFilm = NULL; static GtkWidget *buttonDirFilm = NULL; static GtkWidget* comboListFilm = NULL; static gboolean createFilm = FALSE; static gint numFileFilm = 0; static gchar formatFilm[100] = "BMP"; static gint rowSelected = -1; /********************************************************************************/ static void animate(); static void rafreshList(); static void stopAnimation(GtkWidget *win, gpointer data); static void playAnimation(GtkWidget *win, gpointer data); static gboolean set_grid(gint k); /*************************************************************************************************************/ static void reset_last_directory(GtkWidget *dirSelector, gpointer data) { gchar* dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); gchar* filename = NULL; if(dirname && strlen(dirname)>0) { if(dirname[strlen(dirname)-1] != G_DIR_SEPARATOR) filename = g_strdup_printf("%s%sdump.txt",dirname,G_DIR_SEPARATOR_S); else filename = g_strdup_printf("%sdump.txt",dirname); } else { dirname = g_strdup(g_get_home_dir()); filename = g_strdup_printf("%s%sdump.txt",dirname,G_DIR_SEPARATOR_S); } if(dirname) g_free(dirname); if(filename) { set_last_directory(filename); g_free(filename); } } /********************************************************************************/ static void set_directory(GtkWidget *win, gpointer data) { GtkWidget *dirSelector; dirSelector = selctionOfDir(reset_last_directory, _("Set folder"), GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); gtk_window_set_transient_for(GTK_WINDOW(dirSelector),GTK_WINDOW(PrincipalWindow)); gtk_window_set_transient_for(GTK_WINDOW(dirSelector),GTK_WINDOW(WinDlg)); } /********************************************************************************/ void initAnimationGrids() { animationGrids.typeOfFile = GABEDIT_TYPEFILE_UNKNOWN; animationGrids.numberOfFiles = 0; animationGrids.geometries = NULL; animationGrids.fileNames = NULL; animationGrids.grids = NULL; rowSelected = -1; animationGrids.velocity = 0.0; animationGrids.isovalue = 0.1; } /********************************************************************************/ void freeAnimationGrids() { static gboolean begin = TRUE; if(begin) { begin = FALSE; initAnimationGrids(); return; } if(animationGrids.geometries) { gint i; GeomGrid* geometries = animationGrids.geometries; for(i=0;i= animationGrids.numberOfFiles) return; if(!animationGrids.geometries) return; if(animationGrids.numberOfFiles==1) { freeAnimationGrids(); rafreshList(); return; } if(animationGrids.geometries) if(animationGrids.geometries[k].listOfAtoms) g_free(animationGrids.geometries[k].listOfAtoms); if(animationGrids.grids) if(animationGrids.grids[k]) free_grid(animationGrids.grids[k]); if(animationGrids.fileNames) if(animationGrids.fileNames[k]) g_free(animationGrids.fileNames[k]); for(j=k;j= animationGrids.numberOfFiles) return FALSE; if(!GeomOrb) return FALSE; if(Ncenters<1) return FALSE; nAtoms = Ncenters; listOfAtoms = g_malloc(nAtoms*sizeof(AtomGrid)); for(j=0;jnext; } if(animationGrids.numberOfFiles>0) { gint k = 0; animationGrids.geometries = g_malloc(animationGrids.numberOfFiles*sizeof(GeomGrid)); animationGrids.fileNames = g_malloc(animationGrids.numberOfFiles*sizeof(gchar*)); animationGrids.grids = g_malloc(animationGrids.numberOfFiles*sizeof(Grid*)); for(k=0;kdata); if(read_gauss_molpro_cube_orbitals_file(fileName,0,0,GABEDIT_TYPEFILE_CUBEGABEDIT, FALSE)) { set_geometry(k); animationGrids.fileNames[k] = g_strdup(fileName); animationGrids.grids[k] = copyGrid(grid); k++; } cur = cur->next; } if(k<=0) { freeAnimationGrids(); } else if(k!=animationGrids.numberOfFiles) { animationGrids.numberOfFiles = k; animationGrids.geometries = g_realloc(animationGrids.geometries, animationGrids.numberOfFiles*sizeof(GeomGrid)); animationGrids.fileNames = g_realloc(animationGrids.fileNames, animationGrids.numberOfFiles*sizeof(gchar*)); animationGrids.grids = g_realloc(animationGrids.grids, animationGrids.numberOfFiles*sizeof(Grid*)); } if(k>0) { animationGrids.typeOfFile = GABEDIT_TYPEFILE_CUBEDX; } } rafreshList(); } /*************************************************************************************************************/ static void read_dx_files(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; GSList* lists = NULL; GSList* cur = NULL; if(response_id != GTK_RESPONSE_OK) return; gtk_widget_hide(GTK_WIDGET(SelecFile)); lists = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(SelecFile)); stopAnimation(NULL, NULL); freeAnimationGrids(); cur = lists; animationGrids.numberOfFiles = 0; while(cur != NULL) { animationGrids.numberOfFiles++; cur = cur->next; } if(animationGrids.numberOfFiles>0) { gint k = 0; animationGrids.geometries = g_malloc(animationGrids.numberOfFiles*sizeof(GeomGrid)); animationGrids.fileNames = g_malloc(animationGrids.numberOfFiles*sizeof(gchar*)); animationGrids.grids = g_malloc(animationGrids.numberOfFiles*sizeof(Grid*)); for(k=0;kdata); if(read_dx_grid_file(fileName, FALSE)) { animationGrids.fileNames[k] = g_strdup(fileName); set_geometry(k); animationGrids.grids[k] = copyGrid(grid); k++; } cur = cur->next; } if(k<=0) { freeAnimationGrids(); } else if(k!=animationGrids.numberOfFiles) { animationGrids.numberOfFiles = k; animationGrids.geometries = g_realloc(animationGrids.geometries,animationGrids.numberOfFiles*sizeof(GeomGrid)); animationGrids.fileNames = g_realloc(animationGrids.fileNames, animationGrids.numberOfFiles*sizeof(gchar*)); animationGrids.grids = g_realloc(animationGrids.grids, animationGrids.numberOfFiles*sizeof(Grid*)); } if(k>0) { animationGrids.typeOfFile = GABEDIT_TYPEFILE_CUBEDX; } } rafreshList(); } /*************************************************************************/ static void read_files(GabeditFileChooser *selecFile, gint response_id) { gchar *fileName; GabEditTypeFile fileType = GABEDIT_TYPEFILE_UNKNOWN; GSList* lists = NULL; if(response_id != GTK_RESPONSE_OK) return; lists = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(selecFile)); if(!lists) { Message( _("Sorry, I cannot no selected files\n"),_("Error"),TRUE); return; } fileName = (gchar*)lists->data; gtk_widget_hide(GTK_WIDGET(selecFile)); while( gtk_events_pending() ) gtk_main_iteration(); fileType = get_type_file(fileName); if(fileType == GABEDIT_TYPEFILE_CUBEGABEDIT) read_gabedit_files(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_CUBEDX) read_dx_files(selecFile, response_id); else { Message( _("Sorry, I cannot find the type of your file\n") ,_("Error"),TRUE); } } /********************************************************************************/ static void read_gabedit_files_dlg() { GtkWidget* filesel = file_chooser_open(read_gabedit_files, _("Read grids from a Gabedit file"), GABEDIT_TYPEFILE_CUBEGABEDIT,GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static void read_dx_files_dlg() { GtkWidget* filesel = file_chooser_open(read_dx_files, _("Read grids from dx files"), GABEDIT_TYPEFILE_CUBEDX,GABEDIT_TYPEWIN_ORB); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(filesel),TRUE); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static void read_files_dlg() { GtkWidget* filesel = file_chooser_open(read_files, _("Read grids from a file"), GABEDIT_TYPEFILE_UNKNOWN,GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean set_grid(gint k) { AtomGrid* listOfAtoms = NULL; gint nAtoms = 0; gint j; if(k<0 || k >= animationGrids.numberOfFiles) return FALSE; if(!animationGrids.grids[k]) return FALSE; if(GeomOrb) { free_atomic_orbitals(); for(j=0;j0) GeomOrb=g_malloc(nAtoms*sizeof(TypeGeomOrb)); for(j=0;j0) init_atomic_orbitals(); init_dipole(); buildBondsOrb(); RebuildGeom = TRUE; grid = copyGrid(animationGrids.grids[k]); Define_Iso(animationGrids.isovalue); glarea_rafresh(GLArea); return TRUE; } /********************************************************************************/ static void playAnimation(GtkWidget *win, gpointer data) { play = TRUE; gtk_widget_set_sensitive(PlayButton, FALSE); gtk_widget_set_sensitive(StopButton, TRUE); gtk_window_set_modal (GTK_WINDOW (WinDlg), TRUE); animate(); } /********************************************************************************/ static void stopAnimation(GtkWidget *win, gpointer data) { play = FALSE; if(GTK_IS_WIDGET(PlayButton)) gtk_widget_set_sensitive(PlayButton, TRUE); if(GTK_IS_WIDGET(StopButton)) gtk_widget_set_sensitive(StopButton, FALSE); if(GTK_IS_WIDGET(WinDlg)) gtk_window_set_modal (GTK_WINDOW (WinDlg), FALSE); while( gtk_events_pending() ) gtk_main_iteration(); buildBondsOrb(); RebuildGeom = TRUE; init_dipole(); init_atomic_orbitals(); free_iso_all(); if(this_is_an_object((GtkObject*)GLArea)) glarea_rafresh(GLArea); } /********************************************************************************/ static void destroyDlg(GtkWidget *win) { createFilm = FALSE; numFileFilm = 0; delete_child(WinDlg); freeAnimationGrids(); } /********************************************************************************/ static void destroyAnimAnimGridDlg(GtkWidget *win) { createFilm = FALSE; numFileFilm = 0; stopAnimation(NULL, NULL); gtk_widget_destroy(WinDlg); WinDlg = NULL; rowSelected = -1; freeAnimationGrids(); } /**********************************************************************************/ static void set_sensitive_option(GtkUIManager *manager, gchar* path) { GtkWidget *wid = gtk_ui_manager_get_widget (manager, path); gboolean sensitive = TRUE; if(animationGrids.numberOfFiles<1) sensitive = FALSE; if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid, sensitive); } /**********************************************************************************/ static gboolean show_menu_popup(GtkUIManager *manager, guint button, guint32 time) { GtkWidget *menu = gtk_ui_manager_get_widget (manager, "/MenuAnimGrid"); if (GTK_IS_MENU (menu)) { set_sensitive_option(manager,"/MenuAnimGrid/DeleteGrid"); gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, time); return TRUE; } else printf("Erreur menu n'est pas un menu\n"); return FALSE; } /**********************************************************************************/ static void event_dispatcher(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; gint row = -1; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); row = atoi(gtk_tree_path_to_string(path)); gtk_tree_path_free(path); } } rowSelected = row; if(!play) stopAnimation(NULL, NULL); if(row>=0) set_grid(rowSelected); if (event->type == GDK_BUTTON_PRESS && ((GdkEventButton *) event)->button == 3) { GdkEventButton *bevent = (GdkEventButton *) event; GtkUIManager *manager = GTK_UI_MANAGER(user_data); show_menu_popup(manager, bevent->button, bevent->time); } } /********************************************************************************/ static void reset_parameters(GtkWidget *win, gpointer data) { gdouble velo = atof(gtk_entry_get_text(GTK_ENTRY(EntryVelocity))); gdouble isovalue = atof(gtk_entry_get_text(GTK_ENTRY(EntryIsoValue))); gchar* t; if(velo<0) { velo = -velo; t = g_strdup_printf("%lf",velo); gtk_entry_set_text(GTK_ENTRY(EntryVelocity),t); g_free(t); } animationGrids.velocity = velo; animationGrids.isovalue = isovalue; if(!play) stopAnimation(NULL,NULL); } /**********************************************************************************/ static void rafreshList() { gint i; gint k; GtkTreeIter iter; GtkTreeModel *model = NULL; GtkTreeStore *store = NULL; gchar *texts[1]; gchar* titles[]={"Comments"}; GtkCellRenderer *renderer; GtkTreeViewColumn *column; model = gtk_tree_view_get_model(treeView); store = GTK_TREE_STORE (model); gtk_tree_store_clear(store); model = GTK_TREE_MODEL (store); do { column = gtk_tree_view_get_column(treeView, 0); if(column) gtk_tree_view_remove_column(treeView, column); }while(column != NULL); for(k=0;k<1;k++) { column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, titles[k]); gtk_tree_view_column_set_reorderable(column, TRUE); gtk_tree_view_column_set_resizable(column,TRUE); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", k, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (treeView), column); } for(i=0;i0) { GtkTreePath *path; rowSelected = 0; path = gtk_tree_path_new_from_string ("0"); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeView)), path); gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW (treeView), path, NULL, FALSE,0.5,0.5); gtk_tree_path_free(path); set_grid(rowSelected); } reset_parameters(NULL,NULL); } /*****************************************************************************/ static gchar* get_format_image_from_option() { if(strcmp(formatFilm,"BMP")==0) return "bmp"; if(strcmp(formatFilm,"PPM")==0) return "ppm"; if(strcmp(formatFilm,"PNG")==0) return "png"; if(strcmp(formatFilm,"JPEG")==0) return "jpg"; if(strcmp(formatFilm,"PNG transparent")==0) return "png"; if(strcmp(formatFilm,"Povray")==0) return "pov"; return "UNK"; } /********************************************************************************/ static void filmSelected(GtkWidget *widget) { if(GTK_IS_WIDGET(buttonCheckFilm)&& GTK_TOGGLE_BUTTON (buttonCheckFilm)->active) { createFilm = TRUE; if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, TRUE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, TRUE); } else { createFilm = FALSE; if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); } } /********************************************************************************/ static void showMessageEnd() { gchar* format =get_format_image_from_option(); gchar* message = messageAnimatedImage(format); gchar* t = g_strdup_printf( _("\nA series of gab*.%s files was created in \"%s\" directeory.\n\n\n%s") , format, get_last_directory(),message); GtkWidget* winDlg = Message(t,_("Info"),TRUE); g_free(message); gtk_window_set_modal (GTK_WINDOW (winDlg), TRUE); g_free(t); } /********************************************************************************/ static void unActivateFilm() { createFilm = FALSE; numFileFilm = 0; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCheckFilm), FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); } /********************************************************************************************************/ static void set_format_film(GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } if(!data) return; sprintf(formatFilm ,"%s",(gchar*)data); } /********************************************************************************************************/ static GtkWidget *create_list_of_formats() { GtkTreeIter iter; GtkListStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; gint i; gint k; gchar* options[] = {"BMP","PPM", "JPEG", "PNG", "PNG transparent", "Povray"}; guint numberOfElements = G_N_ELEMENTS (options); k = 0; store = gtk_list_store_new (1,G_TYPE_STRING); for(i=0;i=animationGrids.numberOfFiles) { m--; step = -1; continue; } if(m<0) { m++; step = +1; continue; } if(m==0 && step<0) { if(numFileFilm>0) showMessageEnd(); unActivateFilm(); } rowSelected = m; t = g_strdup_printf("%d",m); path = gtk_tree_path_new_from_string (t); g_free(t); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeView)), path); gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW (treeView), path, NULL, FALSE,0.5,0.5); gtk_tree_path_free(path); set_grid(rowSelected); createImagesFile(); Waiting(animationGrids.velocity); } if(numFileFilm>0) showMessageEnd(); unActivateFilm(); if(GTK_IS_WIDGET(buttonCheckFilm)) gtk_widget_set_sensitive(buttonCheckFilm, TRUE); if(GTK_IS_WIDGET(comboListFilm)) gtk_widget_set_sensitive(comboListFilm, FALSE); if(GTK_IS_WIDGET(buttonDirFilm)) gtk_widget_set_sensitive(buttonDirFilm, FALSE); if(GTK_IS_WIDGET(treeView))gtk_widget_set_sensitive(GTK_WIDGET(treeView), TRUE); if(GTK_IS_WIDGET(WinDlg)) { GtkWidget* handelbox = g_object_get_data(G_OBJECT (WinDlg), "HandelBox"); if(GTK_IS_WIDGET(handelbox)) gtk_widget_set_sensitive(handelbox, TRUE); } stopAnimation(NULL, NULL); } /********************************************************************************************/ static void help_supported_format() { gchar temp[BSIZE]; GtkWidget* win; sprintf(temp, _( " You can read grids from :\n" " * Gabedit cube input files.\n" " * DX files.\n" ) ); win = Message(temp," Info ",FALSE); gtk_window_set_modal (GTK_WINDOW (win), TRUE); } /********************************************************************************/ static void help_animated_file() { GtkWidget* win; gchar* temp = NULL; temp = g_strdup( _( " For create an animated file :\n" " ============================\n" " 1) Read grids from Gabedit or from DX files.\n" " 2) Select \"create a series of BMP (or PPM or POV) images\" button.\n" " You can select your favorite directory by clicking to \"Directory\" button.\n" " 3) Click to Play button.\n" " 4) After on cycle Gabedit create a series of BMP(gab*.bmp) or PPM (gab*.ppm) or POV(gab*.pov) files.\n" " From these files, you can create a gif or a png animated file using convert software.\n" " with \"convert -delay 10 -loop 1000 gab*.bmp imageAnim.gif\" command you can create a gif animated file.\n" " with \"convert -delay 10 -loop 1000 gab*.bmp imageAnim.mng\" command you can create a png animated file.\n\n" " For gab*.pov files :\n" " You must initially create files gab*.bmp using gab*.pov files.\n" " Then you can create the animated file using gab*.bmp file.\n\n" " You can use the xPovAnim script (from utils/povray directory) for create the gif animated file from gab*.pov files.\n\n" " convert is a free software. You can download this(for any system) from http://www.imagemagick.org\n" " povray is a free software. You can download this(for any system) from http://www.povray.org\n\n" ) ); win = Message(temp,_("Info"),FALSE); gtk_window_set_modal (GTK_WINDOW (win), TRUE); g_free(temp); } /*********************************************************************************************************************/ static void activate_action (GtkAction *action) { const gchar *name = gtk_action_get_name (action); /* const gchar *typename = G_OBJECT_TYPE_NAME (action);*/ if(!strcmp(name, "File")) { GtkUIManager *manager = g_object_get_data(G_OBJECT(action), "Manager"); if(GTK_IS_UI_MANAGER(manager)) set_sensitive_option(manager,"/MenuBar/File/DeleteGrid"); } else if(!strcmp(name, "ReadAuto")) read_files_dlg(); else if(!strcmp(name, "ReadGabedit")) read_gabedit_files_dlg(); else if(!strcmp(name, "ReadDX")) read_dx_files_dlg(); else if(!strcmp(name, "DeleteGrid")) delete_one_grid(); else if(!strcmp(name, "Close")) destroyDlg(NULL); else if(!strcmp(name, "HelpSupportedFormat")) help_supported_format(); else if(!strcmp(name, "HelpAnimation")) help_animated_file(); } /*--------------------------------------------------------------------*/ static GtkActionEntry gtkActionEntries[] = { {"File", NULL, N_("_File"), NULL, NULL, G_CALLBACK (activate_action)}, {"Read", NULL, N_("_Read")}, {"ReadAuto", NULL, N_("Read a file(Auto)"), NULL, "Read grids", G_CALLBACK (activate_action) }, {"ReadGabedit", GABEDIT_STOCK_GABEDIT, N_("Read G_abedit cube files"), NULL, "Read Gabedit cube files", G_CALLBACK (activate_action) }, {"ReadDX", NULL, N_("Read grids from _DX files"), NULL, "Read grids from DX files", G_CALLBACK (activate_action) }, {"DeleteGrid", GABEDIT_STOCK_CUT, N_("_Delete selected grid"), NULL, "Delete selected grid", G_CALLBACK (activate_action) }, {"Close", GABEDIT_STOCK_CLOSE, N_("_Close"), NULL, "Close", G_CALLBACK (activate_action) }, {"Help", NULL, N_("_Help")}, {"HelpSupportedFormat", NULL, N_("_Supported format..."), NULL, "Supported format...", G_CALLBACK (activate_action) }, {"HelpAnimation", NULL, N_("Creation of an _animated file..."), NULL, "Creation of an animated file...", G_CALLBACK (activate_action) }, }; static guint numberOfGtkActionEntries = G_N_ELEMENTS (gtkActionEntries); /********************************************************************************/ /* XML description of the menus for the test app. The parser understands * a subset of the Bonobo UI XML format, and uses GMarkup for parsing */ static const gchar *uiMenuInfo = " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*******************************************************************************************************************************/ static void add_widget (GtkUIManager *manager, GtkWidget *widget, GtkContainer *container) { GtkWidget *handlebox; handlebox =gtk_handle_box_new (); g_object_ref (handlebox); gtk_handle_box_set_handle_position (GTK_HANDLE_BOX(handlebox),GTK_POS_LEFT); /* GTK_SHADOW_NONE, GTK_SHADOW_IN, GTK_SHADOW_OUT, GTK_SHADOW_ETCHED_IN, GTK_SHADOW_ETCHED_OUT */ gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(handlebox),GTK_SHADOW_OUT); gtk_box_pack_start (GTK_BOX (container), handlebox, TRUE, TRUE, 0); gtk_widget_show (widget); gtk_container_add (GTK_CONTAINER (handlebox), widget); gtk_widget_show (handlebox); } /*******************************************************************************************************************************/ static GtkUIManager *create_menu(GtkWidget* box) { GtkActionGroup *actionGroup = NULL; GtkUIManager *manager = NULL; GError *error = NULL; manager = gtk_ui_manager_new (); g_signal_connect_swapped (PrincipalWindow, "destroy", G_CALLBACK (g_object_unref), manager); actionGroup = gtk_action_group_new ("GabeditAnimationAnimGridActions"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntries, numberOfGtkActionEntries, NULL); gtk_ui_manager_insert_action_group (manager, actionGroup, 0); g_signal_connect (manager, "add_widget", G_CALLBACK (add_widget), box); gtk_window_add_accel_group (GTK_WINDOW (PrincipalWindow), gtk_ui_manager_get_accel_group (manager)); if (!gtk_ui_manager_add_ui_from_string (manager, uiMenuInfo, -1, &error)) { g_message (_("building menus failed: %s"), error->message); g_error_free (error); } if(GTK_IS_UI_MANAGER(manager)) { GtkAction *action = NULL; action = gtk_ui_manager_get_action(manager, "/MenuBar/File"); if(G_IS_OBJECT(action)) g_object_set_data(G_OBJECT(action), "Manager", manager); } return manager; } /********************************************************************************/ void animationGridsDlg() { GtkWidget *Win; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *parentWindow = PrincipalWindow; GtkUIManager *manager = NULL; if(WinDlg) return; initAnimationGrids(); Win= gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow)); gtk_window_set_default_size (GTK_WINDOW(Win),-1,(gint)(ScreenHeight*0.69)); gtk_window_set_title(GTK_WINDOW(Win),"Multiple Grids"); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); WinDlg = Win; add_child(PrincipalWindow,Win,destroyAnimAnimGridDlg,"Mult. Grid"); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (Win), vbox); hbox = create_hbox_false(vbox); manager = create_menu(hbox); hbox = create_hbox_false(vbox); gtk_widget_realize(Win); treeView = addList(hbox, manager); addEntrysButtons(vbox); gtk_widget_show_all(vbox); gtk_widget_show_now(Win); fit_windows_position(PrincipalWindow, Win); rafreshList(); stopAnimation(NULL, NULL); } GabeditSrc250/src/Display/BondsOrb.c0000644000175100017510000002511413130665225017546 0ustar alloucheallouche/* BondsOrb.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "BondsOrb.h" #include "../Utils/Vector3d.h" #include "../Utils/Transformation.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/HydrogenBond.h" /************************************************************************/ static gboolean append_to_bonds_list(BondType* newData) { GList* list; if(!newData) return FALSE; for(list=BondsOrb;list!=NULL;list=list->next) { BondType* data=(BondType*)list->data; gint i = data->n1; gint j = data->n2; if(i==newData->n1 && j==newData->n2) return FALSE; if(j==newData->n1 && i==newData->n2) return FALSE; } BondsOrb = g_list_append(BondsOrb,newData); return TRUE; } /************************************************************************/ static gint getBondType(gint ia,gint ja) { GList* list = NULL; gint i,j; for(list=BondsOrb;list!=NULL;list=list->next) { BondType* data=(BondType*)list->data; i = data->n1; j = data->n2; if(ia==i && ja==j) return data->bondType; if(ia==j && ja==i) return data->bondType; } return -1; } /************************************************************************/ static gboolean bonded(gint i,gint j) { GLdouble distance; V3d dif; gint k; for(k=0;k<3;k++) dif[k] = (GeomOrb[i].C[k] - GeomOrb[j].C[k]); distance = v3d_length(dif); if(distance<(GeomOrb[i].Prop.covalentRadii + GeomOrb[j].Prop.covalentRadii)) return TRUE; else return FALSE; } /************************************************************************/ gboolean hbonded(gint i,gint j) { gdouble minDistanceH; gdouble maxDistanceH; gdouble minDistanceH2; gdouble maxDistanceH2; gdouble minAngleH; gdouble maxAngleH; gdouble distance2; gdouble angle; gchar* strAngle; Point A; Point B; gdouble dx, dy, dz; gint k; gint kH; gint kO; if(strcmp(GeomOrb[i].Symb,"H") == 0 ) { kH = i; kO = j; if(!atomCanDoHydrogenBond(GeomOrb[j].Symb)) return FALSE; } else { if(strcmp(GeomOrb[j].Symb,"H") == 0 ) { kH = j; kO = i; if(!atomCanDoHydrogenBond(GeomOrb[i].Symb)) return FALSE; } else return FALSE; } minDistanceH = getMinDistanceHBonds(); minDistanceH2 = minDistanceH*minDistanceH*ANG_TO_BOHR*ANG_TO_BOHR; maxDistanceH = getMaxDistanceHBonds(); maxDistanceH2 = maxDistanceH*maxDistanceH*ANG_TO_BOHR*ANG_TO_BOHR; minAngleH = getMinAngleHBonds(); maxAngleH = getMaxAngleHBonds(); dx = GeomOrb[i].C[0] - GeomOrb[j].C[0]; dy = GeomOrb[i].C[1] - GeomOrb[j].C[1]; dz = GeomOrb[i].C[2] - GeomOrb[j].C[2]; distance2 = (dx*dx+dy*dy+dz*dz); if(distance2maxDistanceH2) return FALSE; for(k=0;k=minAngleH &&angle<=maxAngleH) return TRUE; } return FALSE; } /************************************************************************/ void freeBondsOrb() { GList* list; if(!BondsOrb) return; for(list=BondsOrb;list!=NULL;list=list->next) { if(list->data) g_free(list->data); } g_list_free(BondsOrb); BondsOrb = NULL; } /************************************************************************/ void buildMultipleBonds() { GList* list; gint i; gint* nBonds = NULL; if(!BondsOrb) return; if(Ncenters<2) return ; nBonds =g_malloc(Ncenters*sizeof(gint)); for(i = 0;inext) { BondType* data=(BondType*)list->data; gint i = data->n1; gint j = data->n2; gint k = 0; if(data->bondType == GABEDIT_BONDTYPE_SINGLE) k = 1; if(data->bondType == GABEDIT_BONDTYPE_DOUBLE) k = 2; if(data->bondType == GABEDIT_BONDTYPE_TRIPLE) k = 3; if(i>=0 && i=0 && jnext) { BondType* data=(BondType*)list->data; GList* list2; gint i = data->n1; gint j = data->n2; gint ij=0; if(i>=0 && i=0 && jnext;list2!=NULL;list2=list2->next) { BondType* data2=(BondType*)list2->data; gint i = data2->n1; gint j = data2->n2; if(i>=0 && i=0 && jdata; list->data = list2->data; list2->data = t; } } } for(list=BondsOrb;list!=NULL;list=list->next) { BondType* data=(BondType*)list->data; gint i = data->n1; gint j = data->n2; if(data->bondType == GABEDIT_BONDTYPE_HYDROGEN) continue; if( nBonds[i] < GeomOrb[i].Prop.maximumBondValence -1 && nBonds[j] < GeomOrb[j].Prop.maximumBondValence -1 ) { data->bondType = GABEDIT_BONDTYPE_TRIPLE; nBonds[i] += 2; nBonds[j] += 2; } else if( nBonds[i] < GeomOrb[i].Prop.maximumBondValence && nBonds[j] < GeomOrb[j].Prop.maximumBondValence ) { data->bondType = GABEDIT_BONDTYPE_DOUBLE; nBonds[i] += 1; nBonds[j] += 1; } } g_free(nBonds); } /************************************************************************/ void buildHBonds() { gint i; gint j; for(i = 0;in1 = i; A->n2 = j; A->bondType = GABEDIT_BONDTYPE_HYDROGEN; BondsOrb = g_list_append(BondsOrb,A); } } } /************************************************************************/ void buildBondsOrb() { gint i; gint j; freeBondsOrb(); if(Ncenters<1) return ; for(i = 0;in1 = i; A->n2 = j; A->bondType = GABEDIT_BONDTYPE_SINGLE; BondsOrb = g_list_append(BondsOrb,A); } else if(ShowHBondOrb && hbonded(i,j)) { BondType* A=g_malloc(sizeof(BondType)); A->n1 = i; A->n2 = j; A->bondType = GABEDIT_BONDTYPE_HYDROGEN; BondsOrb = g_list_append(BondsOrb,A); } } if(ShowMultiBondsOrb) buildMultipleBonds(); } /************************************************************************/ static gint get_connections_one_connect_pdb(gchar* t) { gint k; gint ni; gint nj; gchar** split = NULL; gint nA = 0; split = gab_split(t); nA = 0; while(split && split[nA]!=NULL) nA++; if(nA<3) { g_strfreev(split); return 0; } ni = atoi(split[1])-1; if(ni<0 || ni>Ncenters-1) { g_strfreev(split); return 0; } else for(k=0;kNcenters-1) continue; A=g_malloc(sizeof(BondType)); A->n1 = ni; A->n2 = nj; A->bondType = GABEDIT_BONDTYPE_SINGLE; if(!append_to_bonds_list(A)) g_free(A); } g_strfreev(split); return 1; } /************************************************************************/ void readBondsPDB(FILE* file) { gchar tmp[100]; gchar *t; guint taille=BSIZE; gint n = 0; t=g_malloc(taille*sizeof(gchar)); fseek(file, 0L, SEEK_SET); freeBondsOrb(); while(!feof(file)) { gint res = 0; if(!fgets(t,taille,file)) break; sscanf(t,"%s",tmp); uppercase(tmp); if(strcmp(tmp,"CONECT")!=0) continue; if(!strcmp(t,"END")) break; res = get_connections_one_connect_pdb(t); if(res==0) break; n += res; } if(n==0) buildBondsOrb(); else { if(ShowHBondOrb) buildHBonds(); if(ShowMultiBondsOrb) buildMultipleBonds(); } } /********************************************************************************/ static gint get_connections_one_atom_hin(gchar* t, gint ni) { gint k; gint nc; gint nj; gchar** split = NULL; gint nA = 0; gint type = 1; split = gab_split(t); nA = 0; while(split && split[nA]!=NULL) nA++; if(nA<11) { g_strfreev(split); return 0; } nc = atoi(split[10]); for(k=0;k<2*nc;k+=2) { BondType* A=NULL; if(!split[11+k]) break; if(!split[11+k+1]) break; nj = atoi(split[11+k])-1; if(nj<0 || nj>Ncenters-1) continue; type = 1; if(strstr(split[11+k+1],"d"))type = 2; if(strstr(split[11+k+1],"D"))type = 2; if(strstr(split[11+k+1],"t"))type = 3; if(strstr(split[11+k+1],"T"))type = 3; A=g_malloc(sizeof(BondType)); A->n1 = ni; A->n2 = nj; A->bondType = GABEDIT_BONDTYPE_SINGLE; if(type==2) A->bondType = GABEDIT_BONDTYPE_DOUBLE; if(type==3) A->bondType = GABEDIT_BONDTYPE_TRIPLE; if(!append_to_bonds_list(A)) g_free(A); } g_strfreev(split); return 1; } /********************************************************************************/ void readBondsHIN(FILE* file) { gchar tmp[100]; gchar *t; guint taille=BSIZE; gint n = 0; gint i=0; t=g_malloc(taille*sizeof(gchar)); if(Ncenters<1) return; freeBondsOrb(); i=0; fseek(file, 0L, SEEK_SET); while(!feof(file)) { gint res = 0; if(!fgets(t,taille,file)) break; sscanf(t,"%s",tmp); uppercase(tmp); if(strcmp(tmp,"ATOM")!=0) continue; res = get_connections_one_atom_hin(t, i); if(res==0) break; n += res; i++; } if(n==0) buildBondsOrb(); else { if(ShowHBondOrb) buildHBonds(); } } GabeditSrc250/src/Display/SurfacesPov.c0000644000175100017510000003306513130665225020302 0ustar alloucheallouche/* SurfacesPov.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "../Geometry/GeomGlobal.h" #include "../Utils/Vector3d.h" #include "../Utils/Transformation.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/HydrogenBond.h" #include "../Utils/PovrayUtils.h" #include "../Display/GLArea.h" #include "../Display/GeomDraw.h" #include "../Display/TriangleDraw.h" #include "../Display/AxisGL.h" #include "../Display/PrincipalAxisGL.h" #include "../Display/ColorMap.h" #include /********************************************************************************/ static gboolean degenerated_cylinder(Vertex* v1, Vertex* v2) { gdouble d = 0; gint i; for(i=0;i<3;i++) d += (v1->C[i]-v2->C[i])*(v1->C[i]-v2->C[i]); if(dN[0]-2;i++) { for(j=1;jN[1]-2;j++) { for(k=1;kN[2]-2;k++) { for(n=0;ncube[i][j][k].Ntriangles;n++) { if(degenerated_triangle( iso->cube[i][j][k].triangles[n].vertex[0], iso->cube[i][j][k].triangles[n].vertex[1], iso->cube[i][j][k].triangles[n].vertex[2] ) ) continue; fprintf(file,"threeCylinders\n"); fprintf(file,"\t(\n"); for(c=0;c<3;c++) { fprintf(file,"\t<%lf, %lf, %lf>,\n", iso->cube[i][j][k].triangles[n].vertex[c]->C[0], iso->cube[i][j][k].triangles[n].vertex[c]->C[1], iso->cube[i][j][k].triangles[n].vertex[c]->C[2] ); } fprintf(file,"\twireFrameCylinderRadius\n"); fprintf(file,"\t)\n"); } } } } fprintf(file,"\ttexture\n"); fprintf(file,"\t{\n"); fprintf(file,"\t\tpigment { rgb<%14.6f,%14.6f,%14.6f>}\n", color[0], color[1], color[2]); fprintf(file,"\t\tfinish {ambient ambientCoef diffuse diffuseCoef specular specularCoef}\n"); fprintf(file,"\t}\n"); fprintf(file,"}\n"); } /**************************************************************************/ static ColorMap* get_colorMap_mapping_cube() { GtkWidget* handleBoxColorMapGrid = g_object_get_data(G_OBJECT(PrincipalWindow), "HandleboxColorMapGrid "); ColorMap* colorMap = g_object_get_data(G_OBJECT(handleBoxColorMapGrid),"ColorMap"); return colorMap; } /********************************************************************************/ static void save_pov_one_surface_wireframe_colorMapped(FILE* file, IsoSurface* iso) { gint i; gint j; gint k; gint c; gint n; gdouble value; gdouble color[4]; gdouble color1[4]; gdouble color2[4]; gint m; ColorMap* colorMap = get_colorMap_mapping_cube(); if(!iso) return; fprintf(file,"union{\n"); for(i=1;iN[0]-2;i++) { for(j=1;jN[1]-2;j++) { for(k=1;kN[2]-2;k++) { for(n=0;ncube[i][j][k].Ntriangles;n++) { if(degenerated_triangle( iso->cube[i][j][k].triangles[n].vertex[0], iso->cube[i][j][k].triangles[n].vertex[1], iso->cube[i][j][k].triangles[n].vertex[2] ) ) continue; fprintf(file,"threeCylindersColor\n"); fprintf(file,"\t(\n"); for(c=0;c<3;c++) { fprintf(file,"\t<%lf, %lf, %lf>,\n", iso->cube[i][j][k].triangles[n].vertex[c]->C[0], iso->cube[i][j][k].triangles[n].vertex[c]->C[1], iso->cube[i][j][k].triangles[n].vertex[c]->C[2] ); } for(c=0;c<3;c++) { value = iso->cube[i][j][k].triangles[n].vertex[c]->C[3]; set_Color_From_colorMap(colorMap, color1, value); value = iso->cube[i][j][k].triangles[n].vertex[(c+1)%3]->C[3]; set_Color_From_colorMap(colorMap, color2, value); for(m=0;m<3;m++) color[m] = (color1[m] + color2[m])/2; fprintf(file,"\t<%lf, %lf, %lf>,\n", color[0],color[1], color[2] ); } fprintf(file,"\twireFrameCylinderRadius\n"); fprintf(file,"\t)\n"); } } } } fprintf(file,"}\n"); } /********************************************************************************/ static void save_pov_one_surface_colorMapped(FILE* file, IsoSurface* iso) { gint i; gint j; gint k; gint c; gint n; gdouble color[4]; gdouble value; ColorMap* colorMap = get_colorMap_mapping_cube(); if(!iso) return; for(i=1;iN[0]-2;i++) { for(j=1;jN[1]-2;j++) { for(k=1;kN[2]-2;k++) { for(n=0;ncube[i][j][k].Ntriangles;n++) { fprintf(file,"mesh2\n"); fprintf(file,"{\n"); fprintf(file,"\tvertex_vectors{ 3,\n"); for(c=0;c<3;c++) { fprintf(file,"\t\t<%lf, %lf, %lf>", iso->cube[i][j][k].triangles[n].vertex[c]->C[0], iso->cube[i][j][k].triangles[n].vertex[c]->C[1], iso->cube[i][j][k].triangles[n].vertex[c]->C[2] ); if(c==2) fprintf(file,"\n"); else fprintf(file,",\n"); } fprintf(file,"\t}\n"); fprintf(file,"\tnormal_vectors{ 3,\n"); for(c=0;c<3;c++) { fprintf(file,"\t\t<%lf, %lf, %lf>", iso->cube[i][j][k].triangles[n].Normal[c].C[0], iso->cube[i][j][k].triangles[n].Normal[c].C[1], iso->cube[i][j][k].triangles[n].Normal[c].C[2] ); if(c==2) fprintf(file,"\n"); else fprintf(file,",\n"); } fprintf(file,"\t}\n"); fprintf(file,"\ttexture_list{ 3,\n"); for(c=0;c<3;c++) { value = iso->cube[i][j][k].triangles[n].vertex[c]->C[3]; set_Color_From_colorMap(colorMap, color, value); if(TypeBlend == GABEDIT_BLEND_YES) fprintf(file, "\t\ttexture{pigment{rgb<%lf,%lf,%lf> filter surfaceTransCoef} finish {ambient ambientCoef diffuse diffuseCoef specular specularCoef}}\n", color[0], color[1], color[2]); else fprintf(file, "\t\ttexture{pigment{rgb<%lf,%lf,%lf>} finish {ambient ambientCoef diffuse diffuseCoef specular specularCoef}}\n", color[0], color[1], color[2]); } fprintf(file,"\t}\n"); fprintf(file,"\tface_indices{1,<0,1,2> 0, 1, 2 }\n"); fprintf(file,"}\n"); } } } } } /********************************************************************************/ static void save_pov_one_surface_default(FILE* file, IsoSurface* iso, gdouble color[]) { gint i; gint j; gint k; gint c; gint n; gint nt = 0; if(!iso) return; if(iso->N[0]<4) return; if(iso->N[1]<4) return; if(iso->N[2]<4) return; for(i=1;iN[0]-2;i++) for(j=1;jN[1]-2;j++) for(k=1;kN[2]-2;k++) nt += iso->cube[i][j][k].Ntriangles; if(nt<1) return; fprintf(file,"mesh{\n"); for(i=1;iN[0]-2;i++) { for(j=1;jN[1]-2;j++) { for(k=1;kN[2]-2;k++) { for(n=0;ncube[i][j][k].Ntriangles;n++) { fprintf(file,"smooth_triangle\n"); fprintf(file,"\t{\n"); for(c=0;c<3;c++) { fprintf(file,"\t<%lf, %lf, %lf>, <%lf, %lf,%lf>", iso->cube[i][j][k].triangles[n].vertex[c]->C[0], iso->cube[i][j][k].triangles[n].vertex[c]->C[1], iso->cube[i][j][k].triangles[n].vertex[c]->C[2], iso->cube[i][j][k].triangles[n].Normal[c].C[0], iso->cube[i][j][k].triangles[n].Normal[c].C[1], iso->cube[i][j][k].triangles[n].Normal[c].C[2] ); if(c==2) fprintf(file,"\n"); else fprintf(file,",\n"); } fprintf(file,"\t}\n"); } } } } fprintf(file,"\ttexture\n"); fprintf(file,"\t{\n"); if(TypeBlend == GABEDIT_BLEND_YES) fprintf(file,"\t\tpigment { rgb<%14.6f,%14.6f,%14.6f> filter surfaceTransCoef}\n", color[0], color[1], color[2]); else fprintf(file,"\t\tpigment { rgb<%14.6f,%14.6f,%14.6f>}\n", color[0], color[1], color[2]); fprintf(file,"\t\tfinish {ambient ambientCoef diffuse diffuseCoef specular specularCoef}\n"); fprintf(file,"\t}\n"); fprintf(file,"}\n"); } /********************************************************************************/ static void save_pov_surfaces(FILE* file) { gdouble color[4]; if(!isopositive && !isonegative && !isonull) return; if(SurfShow == GABEDIT_SURFSHOW_NO) return; fprintf(file,"# declare surfaces = union{\n"); if( TypeGrid == GABEDIT_TYPEGRID_EDENSITY && (SurfShow == GABEDIT_SURFSHOW_POSNEG ||SurfShow == GABEDIT_SURFSHOW_POSITIVE)) { if(isopositive && isopositive->grid && isopositive->grid->mapped) { if(TypePosWireFrame == GABEDIT_POS_WIREFRAME_YES) save_pov_one_surface_wireframe_colorMapped(file, isopositive); else save_pov_one_surface_colorMapped(file, isopositive); } else { get_color_surface(2,color); if(TypePosWireFrame == GABEDIT_POS_WIREFRAME_YES) save_pov_one_surface_wireframe(file, isopositive, color); else save_pov_one_surface_default(file, isopositive, color); } } else { if(SurfShow == GABEDIT_SURFSHOW_POSNEG ||SurfShow == GABEDIT_SURFSHOW_POSITIVE) { if(isopositive && isopositive->grid && isopositive->grid->mapped) { if(TypePosWireFrame == GABEDIT_POS_WIREFRAME_YES) save_pov_one_surface_wireframe_colorMapped(file, isopositive); else save_pov_one_surface_colorMapped(file, isopositive); } else { get_color_surface(0,color); if(TypePosWireFrame == GABEDIT_POS_WIREFRAME_YES) save_pov_one_surface_wireframe(file, isopositive, color); else save_pov_one_surface_default(file, isopositive, color); } } if(SurfShow == GABEDIT_SURFSHOW_POSNEG ||SurfShow == GABEDIT_SURFSHOW_NEGATIVE) { if(isonegative && isonegative->grid && isonegative->grid->mapped) { if(TypeNegWireFrame == GABEDIT_NEG_WIREFRAME_YES) save_pov_one_surface_wireframe_colorMapped(file, isonegative); else save_pov_one_surface_colorMapped(file, isonegative); } else { get_color_surface(1,color); if(TypeNegWireFrame == GABEDIT_NEG_WIREFRAME_YES) save_pov_one_surface_wireframe(file, isonegative, color); else save_pov_one_surface_default(file, isonegative, color); } } if(isonull && isonull->grid && isonull->grid->mapped) { save_pov_one_surface_colorMapped(file, isonull); } else { get_color_surface(2,color); save_pov_one_surface_default(file, isonull, color); } } fprintf(file,"\ntransform { myTransforms }\n"); fprintf(file,"}\n\n"); fprintf(file,"object {surfaces}\n\n"); } /*********************************************************************************************************/ gint createLastSurfacePovRay() { gchar* fileName = g_strdup_printf("%s%stmp%spovrayLastSurface.pov",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); FILE* file = fopen(fileName,"w"); g_free(fileName); if(!file) return 1; save_pov_surfaces(file); fclose(file); return 0; } /********************************************************************************/ void addLastSurface() { gchar* fileName = g_strdup_printf("%s%stmp%spovraySurfaces.pov",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar* fileNameLast = g_strdup_printf("%s%stmp%spovrayLastSurface.pov",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); FILE* fileSurfaces = fopen(fileName,"a"); FILE* fileLastSurface = fopen(fileNameLast,"rb"); gchar* t = g_malloc(BSIZE*sizeof(gchar)); g_free(fileName); g_free(fileNameLast); if(!fileLastSurface) { g_free(t); return; } if(!fileSurfaces) { g_free(t); return; } while(!feof(fileLastSurface)) { if(!fgets(t, BSIZE,fileLastSurface)) break; fprintf(fileSurfaces,"%s",t); } fclose(fileSurfaces); fclose(fileLastSurface); } /*********************************************************************************************************/ void deleteSurfacesPovRayFile() { gchar* fileName = g_strdup_printf("%s%stmp%spovraySurfaces.pov",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar* fileNameLast = g_strdup_printf("%s%stmp%spovrayLastSurface.pov",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); unlink(fileName); g_free(fileName); unlink(fileNameLast); g_free(fileNameLast); } /********************************************************************************/ GabeditSrc250/src/Display/RingsPov.h0000644000175100017510000000032413130665225017606 0ustar alloucheallouche #ifndef __GABEDIT_RINGSPOV_H__ #define __GABEDIT_RINGSPOV_H__ void AddRingsPovRay(GList** rings, gint nRings, gint* ringsSize, V4d colors[]); void deleteRingsPovRayFile(); #endif /* __GABEDIT_RINGSPOV_H__ */ GabeditSrc250/src/Display/GridAdfOrbitals.c0000644000175100017510000005607413130665225021047 0ustar alloucheallouche/* GridAdf.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "StatusOrb.h" #include "UtilsOrb.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "GLArea.h" #include "AtomicOrbitals.h" #include "Orbitals.h" #include "BondsOrb.h" typedef struct _DataRow { gint symmetryNumber; gint orbitalNumber; }DataRow; static gint numberOfSymmetries = 0; static gchar** labelsSymmetry = NULL; static gint* numberOfOrbitalsBySymmetry = NULL; static gdouble** occupationsBySymmetry = NULL; static gdouble** energiesBySymmetry = NULL; static gint selectedRow = -1; static gint N[3]; static gdouble XYZ0[3]={0.0,0.0,0.0}; static gdouble X[3]={0.0,0.0,0.0}; static gdouble Y[3]={0.0,0.0,0.0}; static gdouble Z[3]={0.0,0.0,0.0}; static gchar adfFileName[2048]; /**************************************************************/ static void free_adf_orb() { gint i; if(numberOfSymmetries<1) return; if(labelsSymmetry) { for(i=0;iN[0]; /*printf("N = %d %d %d\n",N[0],N[1],N[2]);*/ V = g_malloc((N[0]*N[1]*N[2]+6)*sizeof(gdouble)); if(!set_position(file,label,orbitalNumber)) { Message(_("Sorry, I can not read this orbital"),_("Error"),TRUE); grid = free_grid(grid); return; } if(!get_values_from_adf_file(file,V)) return; n = -1; for(k=0;kN[2];k++) { for(j=0;jN[1];j++) { for(i=0;iN[0];i++) { x = XYZ0[0] + i*X[0] + j*X[1] + k*X[2]; y = XYZ0[1] + i*Y[0] + j*Y[1] + k*Y[2]; z = XYZ0[2] + i*Z[0] + j*Z[1] + k*Z[2]; n++; v = V[n]; grid->point[i][j][k].C[0] = x; grid->point[i][j][k].C[1] = y; grid->point[i][j][k].C[2] = z; grid->point[i][j][k].C[3] = v; /*printf("%lf %lf %lf %lf\n",x,y,z,v);*/ if(beg) { beg = FALSE; grid->limits.MinMax[0][3] = v; grid->limits.MinMax[1][3] = v; } else { if(grid->limits.MinMax[0][3]>v) grid->limits.MinMax[0][3] = v; if(grid->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_READGRID,TRUE); break; } progress_orb(scal,GABEDIT_PROGORB_READGRID,FALSE); } if(CancelCalcul) { grid = free_grid(grid); } g_free(V); progress_orb(0,GABEDIT_PROGORB_READGRID,TRUE); return; } /********************************************************************************/ static void read_orbital(GtkWidget *Win,gpointer user_data) { DataRow* data = NULL; GtkWidget* gtklist = GTK_WIDGET(user_data); gchar buffer[BSIZE]; FILE* file = FOpen(adfFileName, "rb"); GtkTreeIter node; GtkTreeModel *model = NULL; gchar pathString[100]; if(!file) { sprintf(buffer,_("Sorry, i can not open \"%s\" file"),adfFileName); grid = free_grid(grid); Message(buffer,_("Error"),TRUE); return; } if(selectedRow<0) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtklist)); sprintf(pathString,"%d",selectedRow); if(!gtk_tree_model_get_iter_from_string (model, &node, pathString)) return; gtk_tree_model_get (model, &node, 4, &data, -1); if(!data) return; sprintf(buffer,"SCF_%s",labelsSymmetry[data->symmetryNumber]); get_grid_from_adf_file(file,buffer,data->orbitalNumber); if(grid) { limits = grid->limits; create_iso_orbitals(); set_status_label_info(_("Grid"),_("Ok")); } else { set_status_label_info(_("Grid"),_("Nothing")); CancelCalcul = FALSE; } fclose(file); } /********************************************************************************/ static void eventDispatcher(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; GtkTreeIter iter; GtkTreeModel *model; if (!event) return; if (((GdkEventButton *) event)->button != 1) return; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); selectedRow = atoi(gtk_tree_path_to_string(path)); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free(path); if ((GdkEventButton *) event && ((GdkEventButton *) event)->type==GDK_2BUTTON_PRESS) { GtkWidget* button = g_object_get_data(G_OBJECT (widget), "ButtonOk"); gtk_button_clicked (GTK_BUTTON (button)); } } else selectedRow = -1; } GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event); } /********************************************************************************/ static GtkWidget* create_gtk_list_orbitals() { gint i; gint j; gint k; gint l; GtkWidget* gtklist = NULL; gint *Width = NULL; gint NlistTitle = 4; gchar* Titles[] = {"Nr","Energy","Occ.","Sym."}; gchar* List[4]; GtkListStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeSelection *select; GtkTreeIter iter; GType* types = NULL; types = g_malloc((NlistTitle+1)*sizeof(GType)); for (i=0;isymmetryNumber = k; data->orbitalNumber = l; gtk_list_store_append(store, &iter); for(j=0;j<4;j++) gtk_list_store_set (store, &iter, j, List[j], -1); gtk_list_store_set (store, &iter, 4, data, -1); for(j=0;j<4;j++) g_free(List[j]); } g_signal_connect(gtklist, "button_press_event", G_CALLBACK(eventDispatcher), NULL); return gtklist; } /********************************************************************************/ static void create_list_adf_orbitals() { GtkWidget *Win; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *button; GtkWidget *gtklist; GtkWidget *scr; if(numberOfSymmetries<1) { Message(_("Sorry, Please load a file before\n"),_("Error"),TRUE); return; } /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),_("Orbitals")); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_widget_set_size_request (GTK_WIDGET(Win), 3*ScreenWidth/10,(gint)(ScreenHeight*0.69)); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Orbitals List "); vboxall = create_vbox(Win); frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_add(GTK_CONTAINER(vboxall),frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); gtklist = create_gtk_list_orbitals(); scr=gtk_scrolled_window_new(NULL,NULL); gtk_box_pack_start(GTK_BOX (vboxframe), scr,TRUE, TRUE, 2); gtk_container_add(GTK_CONTAINER(scr),gtklist); set_base_style(gtklist,50000,50000,50000); /* buttons box */ hbox = create_hbox_false(vboxall); gtk_widget_realize(Win); button = create_button(Win,"Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,"OK"); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)read_orbital,gtklist); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Win)); g_object_set_data(G_OBJECT (gtklist), "ButtonOk",button); gtk_widget_show_now(Win); fit_windows_position(PrincipalWindow, Win); gtk_widget_show_all (Win); } /**************************************************************/ static gdouble* read_one_table(FILE* file,gint* n) { gint len = BSIZE; gchar buffer[BSIZE]; gdouble* table = NULL; gdouble V[3]; gint i,k,l,krest; *n = -1; if(!fgets(buffer,len,file))return NULL; if(1 != sscanf(buffer,"%d",n)) { *n = -1; return NULL; } if(*n<1) return NULL; /*printf("*n = %d\n",*n);*/ table = g_malloc(*n* sizeof(gdouble)); k = *n/3; krest = *n % 3; i=0; for(l=0;l0) { if(!fgets(buffer,len,file))return table; l = sscanf(buffer,"%lf %lf %lf",&V[0],&V[1],&V[2]); if(l != krest) { *n = -1; g_free(table); return NULL; } for(l=0;l0) { GeomOrb=g_malloc(Ncenters*sizeof(TypeGeomOrb)); return TRUE; } return FALSE; } /**************************************************************/ static gboolean read_atoms_labels(FILE* file) { gint len = BSIZE; gchar buffer[BSIZE]; gchar buffer1[BSIZE]; gint i; /*printf("je suis dans read atoms labels\n");*/ if(!fgets(buffer,len,file))return FALSE; if(Ncenters<1) return FALSE; for(i=0;i0) { /*printf("C'est OK\n");*/ buildBondsOrb(); RebuildGeom = TRUE; glarea_rafresh(GLArea); init_atomic_orbitals(); set_status_label_info(_("Geometry"),_("Ok")); } /*printf("N = %d %d %d\n",N[0],N[1],N[2]);*/ set_status_label_info(_("Grid"),_("Nothing")); CancelCalcul = FALSE; fclose(file); } /********************************************************************************/ void load_adf_file_orbitals(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); sprintf(adfFileName,"%s",FileName); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); TypeGrid = GABEDIT_TYPEGRID_ORBITAL; read_adf_file(FileName); create_list_adf_orbitals(); } /********************************************************************************/ GabeditSrc250/src/Display/Dipole.c0000644000175100017510000003402613130665225017254 0ustar alloucheallouche/* Dipole.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "../Display/UtilsOrb.h" #include "../Geometry/GeomGlobal.h" #include "../Utils/Vector3d.h" #include "../Utils/Transformation.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Utils/UtilsGL.h" #include "../Utils/Utils.h" #include "../Common/Windows.h" #include "../Utils/GabeditTextEdit.h" /********************************************************************************/ static void create_frame_dipole(GtkWidget *Dialogue,GtkWidget *vboxframe, gdouble DN[], gdouble DE[], gdouble D[], gdouble ne, gdouble z) { GtkWidget *vbox; GtkWidget *Table; GtkWidget *Frame; GtkWidget *Label; guint i; guint j; gdouble ModuleN; gdouble ModuleE; gdouble Module; gchar* textlabel[7][6] = { {" "," "," X "," Y "," Z "," Norm"}, {_("Nuclear Dipole(Debye)"),":"," "," "," "," "}, {_("Electronic Dipole(Debye)"),":"," "," "," "," "}, {_("Total Dipole(Debye)"),":"," "," "," "," "}, {_("Ne = Number of electrons from grid density"),":"," "," "," "," "}, {_("Nn = Nuclear charge"),":"," "," "," "," "}, {"Nn - Ne",":"," "," "," "," "}, }; for(i=0;i<3; i++) { D[i] *=AUTODEB; DN[i] *=AUTODEB; DE[i] *=AUTODEB; } Module = sqrt(D[0]*D[0] + D[1]*D[1] + D[2]*D[2]) ; ModuleE = sqrt(DE[0]*DE[0] + DE[1]*DE[1] + DE[2]*DE[2]) ; ModuleN = sqrt(DN[0]*DN[0] + DN[1]*DN[1] + DN[2]*DN[2]) ; j = 1; for(i=0;i<3;i++) textlabel[j][i+2] = g_strdup_printf("%.8f ",DN[i]); textlabel[j][5] = g_strdup_printf("%.8f ",ModuleN); j = 2; for(i=0;i<3;i++) textlabel[j][i+2] = g_strdup_printf("%.8f ",DE[i]); textlabel[j][5] = g_strdup_printf("%.8f ",ModuleE); j = 3; for(i=0;i<3;i++) textlabel[j][i+2] = g_strdup_printf("%.8f ",D[i]); textlabel[j][5] = g_strdup_printf("%.8f ",Module); j = 4; textlabel[j][2] = g_strdup_printf("%.8f ",ne); j = 5; textlabel[j][2] = g_strdup_printf("%.8f ",z); j = 6; textlabel[j][2] = g_strdup_printf("%.8f ",z-ne); Frame = create_frame(Dialogue,vboxframe,_("Dipole computed from grid density")); vbox = create_vbox(Frame); Table = gtk_table_new(7,6,FALSE); gtk_container_add(GTK_CONTAINER(vbox),Table); for(j=0;j<7;j++) for(i=0;i<6;i++) { Label = add_label_table(Table,textlabel[j][i],(gushort)j,(gushort)i); if(j==0) set_fg_style(Label,0,0,0); if(j==1) set_fg_style(Label,10000,0,0); if(j==2) set_fg_style(Label,0,10000,0); if(j==3) set_fg_style(Label,0,0,0); if(j==4) set_fg_style(Label,0,0,10000); if(j==5) set_fg_style(Label,0,0,10000); if(j==6) set_fg_style(Label,0,0,10000); gtk_widget_hide(Label); gtk_widget_show(Label); } gtk_widget_show_all(Table); gtk_widget_show_all(Frame); } /********************************************************************************/ static void create_dipole_window(gdouble DN[], gdouble DE[], gdouble D[], gdouble ne, gdouble z) { GtkWidget *Dialogue = NULL; GtkWidget *Button; GtkWidget *frame, *vboxframe; gchar * title = g_strdup(_("Dipole Computed using electronic density at the grid")); Dialogue = gtk_dialog_new(); gtk_widget_realize(GTK_WIDGET(Dialogue)); gtk_window_set_title(GTK_WINDOW(Dialogue),title); gtk_window_set_modal (GTK_WINDOW (Dialogue), TRUE); gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(Dialogue), "delete_event", (GCallback)destroy_button_windows, NULL); g_signal_connect(G_OBJECT(Dialogue), "delete_event", (GCallback)gtk_widget_destroy, NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); create_frame_dipole(Dialogue,vboxframe, DN, DE, D, ne,z); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), FALSE); Button = create_button(Dialogue,"OK"); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), Button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)destroy_button_windows, GTK_OBJECT(Dialogue)); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(Dialogue)); add_button_windows(title,Dialogue); gtk_widget_show_all(Dialogue); g_free(title); } /*****************************************/ gdouble compute_electronic_dipole(gdouble D[]) { gdouble s = 0.0; gdouble dV; int c, i, j, k; V3d vx; V3d vy; V3d vz; V3d vxy; for(c=0;c<3;c++) D[c] = 0.0; for(c=0;c<3;c++) { vx[c] = grid->point[1][0][0].C[c]-grid->point[0][0][0].C[c]; vy[c] = grid->point[0][1][0].C[c]-grid->point[0][0][0].C[c]; vz[c] = grid->point[0][0][1].C[c]-grid->point[0][0][0].C[c]; } v3d_cross(vx, vy, vxy); dV = v3d_dot(vxy, vz); /* printf("dV Cross dot=%lf\n",dV);*/ dV = fabs(dV); for(i=0;iN[0];i++) { for(j=0;jN[1];j++) { for(k=0;kN[2];k++) { s += grid->point[i][j][k].C[3]; for(c=0;c<3;c++) D[c] -= grid->point[i][j][k].C[c]*grid->point[i][j][k].C[3]; } } } s *= dV; for(c=0;c<3;c++) D[c] *= dV; /* printf("s=%lf\n",s); printf("dV=%lf\n",dV); */ return s; } /*****************************************/ gdouble compute_nuclear_dipole(gdouble D[]) { int j; int i; gdouble z = 0.0; for(j=0;j<3;j++) D[j] = 0.0; for(i=0;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); txtWid = create_text_widget(vboxframe,NULL,&frame); if(message) gabedit_text_insert (GABEDIT_TEXT(txtWid), NULL, NULL, NULL,message,-1); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), FALSE); button = create_button(dlgWin,"Close"); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(dlgWin)); add_button_windows(title,dlgWin); gtk_window_set_default_size (GTK_WINDOW(dlgWin), (gint)(ScreenHeight*0.6), (gint)(ScreenHeight*0.5)); gtk_widget_show_all(dlgWin); return dlgWin; } /************************************************************************/ void compute_charge_transfer_dipole() { gdouble D[3]; gint c; gdouble CN[3]; gdouble CP[3]; gdouble QCTp; gdouble QCTm; gdouble H; gchar* str = NULL; gchar* tmp = NULL; gdouble module; gdouble dist; if(!grid) { GtkWidget* message =Message(_("Sorry, Grid not defined "),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (message), TRUE); return; } if(!get_charge_transfer_centers(grid, CN, CP, &QCTm, &QCTp,&H)) return; for(c=0;c<3;c++) D[c] = CP[c] - CN[c]; Dipole.def = TRUE; for(c=0;c<3;c++) Dipole.value[c] = D[c]*(fabs(QCTp)+fabs(QCTm))/2; for(c=0;c<3;c++) Dipole.value[c] *= AUTODEB; for(c=0;c<3;c++) Dipole.origin[c] = CN[c]; dist = 0; for(c=0;c<3;c++) dist += D[c]*D[c]; dist = sqrt(dist); str = g_strdup_printf( " Index of Spatial Extent in Charge-Transfer Excitations\n" " See Le Bahers et al. J. Chem. Theory Comput. 7, 2498 (2011)\n\n" ); tmp = str; str = g_strdup_printf("%s Donor center (Bohr) = %f %f %f\n",tmp,CN[0],CN[1],CN[2]); g_free(tmp); tmp = str; str = g_strdup_printf("%s Acceptor center (Bohr) = %f %f %f\n",tmp,CP[0],CP[1],CP[2]); g_free(tmp); tmp = str; str = g_strdup_printf("%s H index (Bohr) = %f\n",tmp,H); g_free(tmp); tmp = str; str = g_strdup_printf("%s DCT Distance bteween the 2 centers(Bohr) = %f\n\n",tmp,dist); g_free(tmp); tmp = str; str = g_strdup_printf("%s Sum of positive density difference = %f\n",tmp,QCTp); g_free(tmp); tmp = str; str = g_strdup_printf("%s Sum of negative density difference = %f\n\n",tmp,QCTm); g_free(tmp); for(c=0;c<3;c++) CP[c] *= BOHR_TO_ANG; for(c=0;c<3;c++) CN[c] *= BOHR_TO_ANG; tmp = str; str = g_strdup_printf("%s Donor center (Ang) = %f %f %f\n",tmp,CN[0],CN[1],CN[2]); g_free(tmp); tmp = str; str = g_strdup_printf("%s Acceptor center (Ang) = %f %f %f\n",tmp,CP[0],CP[1],CP[2]); g_free(tmp); tmp = str; str = g_strdup_printf("%s H index (Ang) = %f\n",tmp,H*BOHR_TO_ANG); g_free(tmp); tmp = str; str = g_strdup_printf("%s DCT Distance bteween the 2 centers(Ang) = %f\n\n",tmp,dist*BOHR_TO_ANG); g_free(tmp); tmp = str; str = g_strdup_printf("%s t = DCT-H (Ang) = %f\n\n",tmp,(dist-H)*BOHR_TO_ANG); g_free(tmp); tmp = str; str = g_strdup_printf("%s Dipole (Debye) = %f %f %f\n\n",tmp,Dipole.value[0],Dipole.value[1],Dipole.value[2]); g_free(tmp); tmp = str; str = g_strdup_printf( "%s Please note that the vector showed in \"Display window\" is not the dipole.\n" " It is a vector from the donor center to acceptor center\n",tmp); g_free(tmp); for(c=0;c<3;c++) Dipole.value[c] = D[c]; showResultDlg(str,"Charge-Transfer"); g_free(str); //for(c=0;c<3;c++) Dipole.value[c] /= (fabs(QCTp)+fabs(QCTm))/2; } GabeditSrc250/src/Display/StatusOrb.h0000644000175100017510000000350713130665225017773 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_STATUSORB_H__ #define __GABEDIT_STATUSORB_H__ void set_button_sensitive(gboolean sens); void setTextInProgress(gchar* t); gint progress_orb_txt(gdouble scal,gchar* str,gboolean reset); gint progress_orb(gdouble scal, GabEditTypeProgressOrb type,gboolean reset); void set_status_label_info(gchar* type,gchar* txt); void create_status_bar_orb(GtkWidget* box); void create_status_progress_bar_orb(GtkWidget* vbox); void show_handlebox_status(gboolean show); void show_progress_bar(gboolean show); #endif /* __GABEDIT_STATUSORB_H__ */ GabeditSrc250/src/Display/RingsOrb.h0000644000175100017510000000366613130665225017600 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_RINGSORB_H__ #define __GABEDIT_RINGSORB_H__ gboolean ringsGetRandumColors(); void ringsSetRandumColors(gboolean ac); gboolean ringsGetNotPlanar(); void ringsSetNotPlanar(gboolean ac); void buildConnectionsForRings(); gboolean inRing(gint currentAtom, gint rootAtom, gint ringSize, gboolean initialize); gint* getRing(); void getCentreRing(gint i, gint j, gdouble C[]); gint** getRings(gint ringSize, gint* nRings); void findAllRingsForOneAtom(gint numAtom); void IsoRingsAllGenLists(GLuint *myList, gint ringSizeMin, gint ringSizeMax); void IsoRingsAllShowLists(GLuint myList); void computeConformerType(); #endif /* __GABEDIT_RINGSORB_H__ */ GabeditSrc250/src/Display/PlanesMapped.h0000644000175100017510000000274013130665225020414 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_PLANESMAPPED_H__ #define __GABEDIT_PLANESMAPPED_H__ void create_maps(gchar* title,gint type); void create_maps_plane(gchar* title); #endif /* __GABEDIT_PLANESMAPPED_H__ */ GabeditSrc250/src/Display/Dipole.h0000644000175100017510000000302613130665225017255 0ustar alloucheallouche/* Dipole.h */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_DIPOLE_H__ #define __GABEDIT_DIPOLE_H__ void compute_total_dipole(); GLuint DipGenList(GLuint diplist); void DipShowList(GLuint diplist); void compute_charge_transfer_dipole(); #endif /* __GABEDIT_DIPOLE_H__ */ GabeditSrc250/src/Display/CaptureOrbitals.h0000644000175100017510000000266613130665225021155 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_CAPTUREORBITALS_H__ #define __GABEDIT_CAPTUREORBITALS_H__ void capture_orbitals_dlg(); #endif /* __GABEDIT_CAPTUREORBITALS_H__ */ GabeditSrc250/src/Display/PlanesMappedPov.h0000644000175100017510000000037013130665225021076 0ustar alloucheallouche #ifndef __GABEDIT_PLANESMAPPEDPOV_H__ #define __GABEDIT_PLANESMAPPEDPOV_H__ gint addPlaneMappedPovRay(Grid* plansgrid, gint i0,gint i1,gint numPlane, gdouble gap); void deletePlanesMappedPovRayFile(); #endif /* __GABEDIT_PLANESMAPPEDPOV_H__ */ GabeditSrc250/src/Display/OrbitalsMolpro.c0000644000175100017510000013065213130665225021012 0ustar alloucheallouche/* OrbitalsMolpro.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "../Utils/AtomsProp.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/Zlm.h" #include "../Utils/GTF.h" #include "GeomDraw.h" #include "GLArea.h" #include "UtilsOrb.h" #include "Basis.h" #include "GeomOrbXYZ.h" #include "AtomicOrbitals.h" #include "StatusOrb.h" #include "Basis.h" #include "Orbitals.h" #define MAXSYM 8 /********************************************************************************/ typedef struct _TypeFileListOrb { long int geompos; long int baspos; gint norbtype; long int* orbpos; gchar** prognames; gchar** orbtypes; }TypeFileListOrb; /********************************************************************************/ typedef struct _OneBasis { gint numbasis; gint numsym; gchar *sym; gint ncenters; gint* numcenters; gint* signe; gchar *type; gint nexps; gdouble* exps; gdouble* coefs; gint* numstandards; }OneBasis; /********************************************************************************/ typedef struct _TypeBasisBySym { gint Nbasis; OneBasis* Basis; }TypeBasisBySym; /********************************************************************************/ typedef struct _OneOrbital { gint numorb; gint numsym; gdouble energy; gdouble occ; gint ncoefs; gdouble* coefs; }OneOrbital; /********************************************************************************/ typedef struct _TypeOrbitalsBySym { gint NumSym; gint NOrbs; OneOrbital* Orbs; }TypeOrbitalsBySym; /********************************************************************************/ void PrintMolproOneBasis(OneBasis bas) { gint i=0; Debug(" %d %d %s \n",bas.numbasis,bas.numsym,bas.sym); Debug(" ncenters = %d : ",bas.ncenters); for(i=0;iAOrb[k].M ) k = j; } else /* orbital p : px, py and pz */ { if(abs(AOrb[j].M)>abs(AOrb[k].M) ) k = j; else if(abs(AOrb[j].M)==abs(AOrb[k].M) &&AOrb[j].M>AOrb[k].M ) k = j; } } } } if( k!= i) { temp =AOrb[k]; AOrb[k] = AOrb[i]; AOrb[i] = temp; } } } /*****************************************************************************************************/ void define_standard_spherical_basis_from_molpro_basis(TypeBasisBySym BasisBySym[MAXSYM],gint maxsym) { gint i; gint j; gint k; gint ic; gint c; gint L,M; CGTF *temp; Zlm Stemp; gint N,Nc,n; gchar* t; gint naorbs; naorbs = 0; for(i=0;i=nrows-1) end = begin+1; else { end = begin+1; while(endatoi(t) && !this_is_a_real(tsym) ) { if(imaxsym) maxsym = Basis[j].numsym; i = Basis[j].numsym-1; BasisBySym[i].Nbasis++; if(!BasisBySym[i].Basis) BasisBySym[i].Basis = g_malloc(sizeof(OneBasis)); else BasisBySym[i].Basis = g_realloc(BasisBySym[i].Basis,BasisBySym[i].Nbasis*sizeof(OneBasis)); BasisBySym[i].Basis[BasisBySym[i].Nbasis-1] = Basis[j]; } return maxsym; } /********************************************************************************/ void PrintMolproOneOrb(OneOrbital orb) { gint i=0; Debug(" %d %d %lf %lf \n",orb.numorb,orb.numsym,orb.occ,orb.energy); Debug("Ncoefs = : %d\n ",orb.ncoefs); for(i=0;i=nrows-1) end = begin+1; else { end = begin+1; while(end0) { norbs+=1; orbs=g_realloc(orbs,norbs*sizeof(OneOrbital)); orbs[norbs-1] = orb; } } if(norbs==0) g_free(orbs); *norbitals = norbs; /* for(i=0;i1e-6) break; nrows++; strorb = g_realloc(strorb,nrows*sizeof(gchar*)); strorb[nrows-1] = g_strdup(t); } orbs = get_orbitals_from_strorbs(strorb,nrows,&norbitals,type); if(norbitals>0) { OrbitalsBySym[orbs[0].numsym-1].NumSym= orbs[0].numsym; OrbitalsBySym[orbs[0].numsym-1].NOrbs= norbitals; OrbitalsBySym[orbs[0].numsym-1].Orbs= orbs; if(orbs[0].numsym>*maxsym) *maxsym = orbs[0].numsym; } /* Debug("Orbitals for one sym\n"); for(i=0;i0) Nocc = k+1; /* printf("Nocc=%d\n",Nocc); Debug("NumSym = %d NumOrbs = %d\n",i,j); Debug("NBasis= %d NumOrbs = %d\n",BasisBySym[numsym].Nbasis,OrbitalsBySym[i].Orbs[j].ncoefs); */ SymOrbitals[k] = g_strdup(BasisBySym[numsym].Basis[0].sym); for(n=0;n Alpha end Beta * itype = 1 => Alpha * itype = 2 => Beta */ switch(itype) { case 0 : CoefAlphaOrbitals = CoefOrbitals ; EnerAlphaOrbitals = EnerOrbitals; OccAlphaOrbitals = g_malloc(NAOrb*sizeof(gdouble)); for(i=0;i1e-6) OccAlphaOrbitals[i] = 1.0; else OccAlphaOrbitals[i] = OccOrbitals[i]; } SymAlphaOrbitals = SymOrbitals ; NAlphaOrb = Norb; NAlphaOcc = Nocc; CoefBetaOrbitals = CoefOrbitals ; EnerBetaOrbitals = EnerOrbitals; OccBetaOrbitals = g_malloc(NAOrb*sizeof(gdouble)); for(i=0;i1e-6) OccBetaOrbitals[i] = OccOrbitals[i]-1; else OccBetaOrbitals[i] = 0.0; } SymBetaOrbitals = SymOrbitals ; NBetaOrb = Norb; NBetaOcc = Nocc; break; case 1 : CoefAlphaOrbitals = CoefOrbitals ; EnerAlphaOrbitals = EnerOrbitals; OccAlphaOrbitals = g_malloc(NAOrb*sizeof(gdouble)); for(i=0;i=2 && strstr(onelistorb.prognames[onelistorb.norbtype-2],tmp)) onelistorb.prognames[onelistorb.norbtype-1] = g_strdup_printf("%s_%d",tmp,onelistorb.norbtype); else onelistorb.prognames[onelistorb.norbtype-1] = g_strdup(tmp); if(!onelistorb.orbtypes) onelistorb.orbtypes = g_malloc(sizeof(gchar*)); else onelistorb.orbtypes = g_realloc(onelistorb.orbtypes,onelistorb.norbtype*sizeof(gchar*)); onelistorb.orbtypes[onelistorb.norbtype-1] = g_strdup("ELECTRON ORBITALS"); if(!onelistorb.orbpos) onelistorb.orbpos = g_malloc(sizeof(long int)); else onelistorb.orbpos = g_realloc(onelistorb.orbpos,onelistorb.norbtype*sizeof(long int)); onelistorb.orbpos[onelistorb.norbtype-1] = pos; /*Debug("\t\t\tELECTRON ORBITALS\n");*/ break; } if(strstr(t, "NATURAL ORBITALS" )) { onelistorb.norbtype++; if(!onelistorb.prognames) onelistorb.prognames = g_malloc(sizeof(gchar*)); else onelistorb.prognames = g_realloc(onelistorb.prognames,onelistorb.norbtype*sizeof(gchar*)); if(onelistorb.norbtype>=2 && strstr(onelistorb.prognames[onelistorb.norbtype-2],tmp)) onelistorb.prognames[onelistorb.norbtype-1] = g_strdup_printf("%s_%d",tmp,onelistorb.norbtype); else onelistorb.prognames[onelistorb.norbtype-1] = g_strdup(tmp); if(!onelistorb.orbtypes) onelistorb.orbtypes = g_malloc(sizeof(gchar*)); else onelistorb.orbtypes = g_realloc(onelistorb.orbtypes,onelistorb.norbtype*sizeof(gchar*)); onelistorb.orbtypes[onelistorb.norbtype-1] = g_strdup("NATURAL ORBITALS"); if(!onelistorb.orbpos) onelistorb.orbpos = g_malloc(sizeof(long int)); else onelistorb.orbpos = g_realloc(onelistorb.orbpos,onelistorb.norbtype*sizeof(long int)); onelistorb.orbpos[onelistorb.norbtype-1] = pos; /*Debug("\t\t\tNATURAL ORBITALS\n");*/ break; } if(strstr(t, "Natural orbitals" )) { onelistorb.norbtype++; if(!onelistorb.prognames) onelistorb.prognames = g_malloc(sizeof(gchar*)); else onelistorb.prognames = g_realloc(onelistorb.prognames,onelistorb.norbtype*sizeof(gchar*)); if(onelistorb.norbtype>=2 && strstr(onelistorb.prognames[onelistorb.norbtype-2],tmp)) onelistorb.prognames[onelistorb.norbtype-1] = g_strdup_printf("%s_%d",tmp,onelistorb.norbtype); else onelistorb.prognames[onelistorb.norbtype-1] = g_strdup(tmp); if(!onelistorb.orbtypes) onelistorb.orbtypes = g_malloc(sizeof(gchar*)); else onelistorb.orbtypes = g_realloc(onelistorb.orbtypes,onelistorb.norbtype*sizeof(gchar*)); onelistorb.orbtypes[onelistorb.norbtype-1] = g_strdup("Natural orbitals"); if(!onelistorb.orbpos) onelistorb.orbpos = g_malloc(sizeof(long int)); else onelistorb.orbpos = g_realloc(onelistorb.orbpos,onelistorb.norbtype*sizeof(long int)); onelistorb.orbpos[onelistorb.norbtype-1] = pos; /*Debug("\t\t\tNatural orbitals\n");*/ break; } pos++; { char* e = fgets(t,taille,fd);} }/* End while */ }/* End if */ if(!strstr(t,"PROGRAM *") && !strstr(t, "ATOMIC COORDINATES")) { pos++; { char* e = fgets(t,taille,fd);} } }/* End while */ break; }/* End if*/ if(!strstr(t, "ATOMIC COORDINATES")) { pos++; { char* e = fgets(t,taille,fd);} } }/* End while */ /* Debug */ /* { gint i; Debug("Geometry pos = %ld\n",onelistorb.geompos); Debug("Basis pos = %ld\n",onelistorb.baspos); Debug("Norb = %ld\n",onelistorb.norbtype); for(i=0;i0) { n++; if(!listorb) listorb = g_malloc(sizeof(TypeFileListOrb)); else listorb = g_realloc(listorb,n*sizeof(TypeFileListOrb)); listorb[n-1] = onelistorb; } }/* End if */ if(!strstr(t, "ATOMIC COORDINATES")) { pos++; { char* e = fgets(t,taille,fd);} } }/* End while */ fclose(fd); /* Debug*/ /* { gint j; for(j=0;jnorbtype-1 || numorb<0) return; for(i=0;inorbtype-1 || numorb<0) return; t = gtk_entry_get_text(GTK_ENTRY(entry[1])); numprog=-1; for(i=0;i-1) { label = g_object_get_data (G_OBJECT (entry[1]), "Label"); if(this_is_an_object((GtkObject*)label)) gtk_label_set_text(GTK_LABEL(label),listorb[numorb].orbtypes[numprog]); } } /********************************************************************************/ void apply_orbs(GtkWidget *button,gpointer data) { GtkWidget **entry = (GtkWidget **)data; GtkWidget *Win = g_object_get_data (G_OBJECT (button), "Window"); TypeFileListOrb* listorb=NULL; gint nbasis; OneBasis* Basis; gint maxsym; TypeBasisBySym BasisBySym[MAXSYM]; TypeOrbitalsBySym OrbitalsBySym[MAXSYM]; G_CONST_RETURN gchar* t; gchar* FileName; gint i; gint* norb; gint norbtype; gint numorb; gint numprog; gint type; long int newpos = -1; free_data_all(); if(!this_is_an_object((GtkObject*)entry[0])) return; if(!this_is_an_object((GtkObject*)entry[1])) return; norb = (gint*)g_object_get_data(G_OBJECT (entry[0]), "Norb"); norbtype = *norb; listorb = g_object_get_data(G_OBJECT (entry[0]), "ListOrb"); t = gtk_entry_get_text(GTK_ENTRY(entry[0])); numorb = atoi(t)-1; if(numorb>norbtype-1 || numorb<0) { Message(_("Error detected in gabedit\ni Please contat the author for this bug"),_("Error"),TRUE); delete_child(Win); return; } t = gtk_entry_get_text(GTK_ENTRY(entry[1])); numprog=-1; for(i=0;i0 || NBetaOrb>0) { set_status_label_info(_("Mol. Orb."),"Ok"); if(NAlphaOrb>0) { TypeSelOrb = 1; NumSelOrb = NAlphaOcc-1; } else { TypeSelOrb = 2; NumSelOrb = NBetaOcc-1; } create_list_orbitals(); } else { set_status_label_info(_("File name"),_("Nothing")); set_status_label_info(_("File type"),_("Nothing")); set_status_label_info(_("Mol. Orb."),_("Nothing")); } } } delete_child(Win); } /********************************************************************************/ GtkWidget *create_orbitals_list_frame( GtkWidget *vboxall,GtkWidget **entry,TypeFileListOrb* listorb,gint norbtype,gchar* FileName) { GtkWidget *frame; GtkWidget *combo; GtkWidget *vboxframe; GtkWidget *label; #define NL 3 gchar *LabelLeft[NL]; gchar **tlistgeom = NULL; gushort i; GtkWidget *Table; gint* norb = g_malloc(sizeof(gint*)); *norb = norbtype; LabelLeft[0] = g_strdup("Geometry number"); LabelLeft[1] = g_strdup("Program"); LabelLeft[2] = g_strdup("Type"); if(norbtype>0) tlistgeom = g_malloc(norbtype*sizeof(gchar*)); for(i=0;ichild; gtk_widget_set_sensitive(entry[0],FALSE); g_object_set_data(G_OBJECT (entry[0]), "FileName",FileName); g_object_set_data(G_OBJECT (entry[0]), "Combo",combo); g_object_set_data(G_OBJECT (entry[0]), "Norb", norb); g_object_set_data(G_OBJECT (entry[0]), "ListOrb", listorb); g_signal_connect(G_OBJECT(GTK_COMBO_BOX(combo)), "changed",G_CALLBACK(changed_geom),entry); add_label_table(Table,LabelLeft[1],1,0); add_label_table(Table,":",1,1); combo = create_combo_box_entry(listorb[0].prognames,listorb[0].norbtype,TRUE,-1,-1); add_widget_table(Table,combo,1,2); entry[1] = GTK_BIN(combo)->child; gtk_widget_set_sensitive(entry[1],FALSE); g_object_set_data(G_OBJECT (entry[1]), "Combo",combo); g_object_set_data(G_OBJECT (entry[1]), "Norb", norb); g_object_set_data(G_OBJECT (entry[1]), "ListOrb", listorb); add_label_table(Table,LabelLeft[2],2,0); add_label_table(Table,":",2,1); label = add_label_table(Table,listorb[0].orbtypes[0],2,2); g_object_set_data(G_OBJECT (entry[1]), "Label", label); g_signal_connect(G_OBJECT(GTK_COMBO_BOX(combo)), "changed",G_CALLBACK(changed_program),entry); gtk_widget_show_all(frame); for (i=0;ibg[0].red=(gushort)(v[0]*65535.0); style->bg[0].green=(gushort)(v[1]*65535.0); style->bg[0].blue=(gushort)(v[2]*65535.0); gtk_widget_set_style(OldButton, style); } /******************************************************************/ static void open_color_dlg_axis(GtkWidget *button,gpointer data) { GtkColorSelectionDialog *colorDlg; GtkStyle* style = g_object_get_data(G_OBJECT (button), "Style"); GtkWidget *win = g_object_get_data(G_OBJECT (button), "Win"); gdouble* v = g_object_get_data(G_OBJECT (button), "Color");; GdkColor color; colorDlg = (GtkColorSelectionDialog *)gtk_color_selection_dialog_new(_("Set Dipole Color")); color.red = (gushort)(v[0]*65535); color.green = (gushort)(v[1]*65535); color.blue = (gushort)(v[2]*65535); gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (colorDlg->colorsel), &color); gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (colorDlg->colorsel), &color); gtk_window_set_transient_for(GTK_WINDOW(colorDlg),GTK_WINDOW(win)); gtk_window_set_position(GTK_WINDOW(colorDlg),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (colorDlg), TRUE); g_signal_connect(G_OBJECT(colorDlg), "delete_event",(GCallback)destroy_button_windows,NULL); g_signal_connect(G_OBJECT(colorDlg), "delete_event",G_CALLBACK(gtk_widget_destroy),NULL); g_object_set_data(G_OBJECT (colorDlg->colorsel), "Color", v); gtk_widget_hide(colorDlg->help_button); g_signal_connect_swapped(G_OBJECT(colorDlg->ok_button),"clicked", (GCallback)set_axis_color,GTK_OBJECT(colorDlg->colorsel)); g_object_set_data(G_OBJECT (colorDlg->ok_button), "Color", v); g_object_set_data(G_OBJECT (colorDlg->ok_button), "Button", button); g_object_set_data(G_OBJECT (colorDlg->ok_button), "Style", style); g_signal_connect(G_OBJECT(colorDlg->ok_button),"clicked", (GCallback)set_axis_button_color,NULL); g_signal_connect_swapped(G_OBJECT(colorDlg->ok_button), "clicked", (GCallback)destroy_button_windows,GTK_OBJECT(colorDlg)); g_signal_connect_swapped(G_OBJECT(colorDlg->ok_button),"clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(colorDlg)); g_signal_connect_swapped(G_OBJECT(colorDlg->cancel_button), "clicked", (GCallback)destroy_button_windows,GTK_OBJECT(colorDlg)); g_signal_connect_swapped(G_OBJECT(colorDlg->cancel_button),"clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(colorDlg)); add_button_windows(" Set Color ",GTK_WIDGET(colorDlg)); gtk_widget_show(GTK_WIDGET(colorDlg)); } /*********************************************************************/ void set_principal_axisGL_dialog () { GtkWidget *fp; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox; GtkWidget *button; GtkStyle *style; GtkWidget *table; static GtkWidget* entrys[5]; static gdouble vFirst[3]; static gdouble vSecond[3]; static gdouble vThird[3]; static gboolean negative; gchar* tlabel[5]={"Factor","X Origin(Ang)","Y Origin(Ang)","Z Origin(Ang)","Radius"}; gint i; gchar tmp[1024]; /* principal Window */ fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(fp),_("Set the principal axis parameters")); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(PrincipalWindow)); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)gtk_widget_destroy,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(9,4,FALSE); gtk_box_pack_start(GTK_BOX(vboxframe), table,TRUE,TRUE,0); for(i=0;i<5;i++) { add_label_table(table,tlabel[i],(gushort)i,0); add_label_table(table," : ",(gushort)i,1); entrys[i] = gtk_entry_new (); gtk_widget_show (entrys[i]); gtk_table_attach(GTK_TABLE(table),entrys[i],2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); if(i!=0) { if(i==4) { gchar* t = g_strdup_printf("%lf",axis.radius*BOHR_TO_ANG); gtk_entry_set_text(GTK_ENTRY(entrys[i]),t); g_free(t); } else { gchar* t = g_strdup_printf("%lf",axis.origin[i-1]*BOHR_TO_ANG); gtk_entry_set_text(GTK_ENTRY(entrys[i]),t); g_free(t); } } else { gchar* t = g_strdup_printf("%lf",axis.scal); gtk_entry_set_text(GTK_ENTRY(entrys[i]),t); g_free(t); } } i = 5; add_label_table(table,_("Color for the first axis "),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); style = gtk_widget_get_style(fp); button = gtk_button_new_with_label(" "); style = gtk_style_copy(style); style->bg[0].red=axis.firstColor[0]*65535.0; style->bg[0].green=axis.firstColor[1]*65535.0; style->bg[0].blue=axis.firstColor[2]*65535.0; vFirst[0] = axis.firstColor[0]; vFirst[1] = axis.firstColor[1]; vFirst[2] = axis.firstColor[2]; gtk_widget_set_style(button, style ); gtk_table_attach(GTK_TABLE(table),button,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_widget_show (button); g_object_set_data(G_OBJECT (button), "Style", style); g_object_set_data(G_OBJECT (button), "Win", fp); g_object_set_data(G_OBJECT (button), "Color", vFirst); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)open_color_dlg_axis, NULL); sprintf(tmp," I = %0.6f",axis.inertia[0]); add_label_table(table,tmp,(gushort)i,3); i++; add_label_table(table,_("Color for the second axis "),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); style = gtk_widget_get_style(fp); button = gtk_button_new_with_label(" "); style = gtk_style_copy(style); style->bg[0].red=axis.secondColor[0]*65535.0; style->bg[0].green=axis.secondColor[1]*65535.0; style->bg[0].blue=axis.secondColor[2]*65535.0; vSecond[0] = axis.secondColor[0]; vSecond[1] = axis.secondColor[1]; vSecond[2] = axis.secondColor[2]; gtk_widget_set_style(button, style ); gtk_table_attach(GTK_TABLE(table),button,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_widget_show (button); g_object_set_data(G_OBJECT (button), "Style", style); g_object_set_data(G_OBJECT (button), "Win", fp); g_object_set_data(G_OBJECT (button), "Color", vSecond); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)open_color_dlg_axis, NULL); sprintf(tmp," I = %0.6f",axis.inertia[1]); add_label_table(table,tmp,(gushort)i,3); i++; add_label_table(table,_("Color for the third axis "),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); style = gtk_widget_get_style(fp); button = gtk_button_new_with_label(" "); style = gtk_style_copy(style); style->bg[0].red=axis.thirdColor[0]*65535.0; style->bg[0].green=axis.thirdColor[1]*65535.0; style->bg[0].blue=axis.thirdColor[2]*65535.0; vThird[0] = axis.thirdColor[0]; vThird[1] = axis.thirdColor[1]; vThird[2] = axis.thirdColor[2]; gtk_widget_set_style(button, style ); gtk_table_attach(GTK_TABLE(table),button,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_widget_show (button); g_object_set_data(G_OBJECT (button), "Style", style); g_object_set_data(G_OBJECT (button), "Win", fp); g_object_set_data(G_OBJECT (button), "Color", vThird); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)open_color_dlg_axis, NULL); sprintf(tmp," I = %0.6f",axis.inertia[2]); add_label_table(table,tmp,(gushort)i,3); i++; button = gtk_check_button_new_with_label (_("Show the negative part of the axes")); negative = axis.negative; g_object_set_data(G_OBJECT (button), "Negative", &negative); gtk_table_attach(GTK_TABLE(table),button,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), negative); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)set_negative, NULL); hbox = create_hbox(vboxall); button = create_button(PrincipalWindow,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_object_set_data(G_OBJECT (button), "FirstColor", vFirst); g_object_set_data(G_OBJECT (button), "SecondColor", vSecond); g_object_set_data(G_OBJECT (button), "ThirdColor", vThird); g_object_set_data(G_OBJECT (button), "Negative", &negative); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(set_axis),(gpointer)entrys); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(PrincipalWindow,_("Apply")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_object_set_data(G_OBJECT (button), "FirstColor", vFirst); g_object_set_data(G_OBJECT (button), "SecondColor", vSecond); g_object_set_data(G_OBJECT (button), "ThirdColor", vThird); g_object_set_data(G_OBJECT (button), "Negative", &negative); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(set_axis),(gpointer)entrys); gtk_widget_show (button); button = create_button(PrincipalWindow,_("Close")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(fp)); gtk_widget_show (button); gtk_widget_show_all(fp); } /************************************************************************/ gboolean testShowPrincipalAxisGL() { return axis.show; } /************************************************************************/ void showPrincipalAxisGL() { axis.show = TRUE; } /************************************************************************/ void hidePrincipalAxisGL() { axis.show = FALSE; } /************************************************************************/ static void rotatedVector(V3d v) { V3d vz={0.0,0.0,1.0}; V3d vert; gdouble angle; v3d_cross(vz,v,vert); angle = acos(v3d_dot(vz,v)/v3d_length(v))*Deg_Rad; if(fabs(angle)<1e-6) return; if(fabs(angle-180)<1e-6) glRotated(angle, 1.0, 0.0, 0.0); else glRotated(angle, vert[0],vert[1],vert[2]); } /************************************************************************/ static void drawPrism(GLdouble radius,V3d Base1Pos,V3d Base2Pos) { V3d Direction; double lengt; GLUquadricObj *obj; glPushMatrix(); glTranslated(Base1Pos[0],Base1Pos[1],Base1Pos[2]); Direction[0] = Base2Pos[0]-Base1Pos[0]; Direction[1] = Base2Pos[1]-Base1Pos[1]; Direction[2] = Base2Pos[2]-Base1Pos[2]; lengt = v3d_length(Direction); rotatedVector(Direction); obj = gluNewQuadric(); gluQuadricNormals(obj, GL_SMOOTH); gluQuadricDrawStyle(obj, GLU_FILL); gluCylinder (obj,radius,radius/5,lengt,10,10); gluDeleteQuadric(obj); glPopMatrix(); } /***************************************************************************************************************/ static void drawPrismColor(GLdouble radius,V3d Base1Pos,V3d Base2Pos, V4d Specular,V4d Diffuse,V4d Ambiant) { glMaterialdv(GL_FRONT_AND_BACK,GL_SPECULAR,Specular); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,Diffuse); glMaterialdv(GL_FRONT_AND_BACK,GL_AMBIENT,Ambiant); glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,50); drawPrism(radius,Base1Pos,Base2Pos); } /***************************************************************************************************************/ static void drawAxis(V3d vector, GLdouble radius,V3d origin, V4d specular,V4d diffuse,V4d ambiant) { V3d bottom; V3d top; V3d center; double lengt; gint i; V4d diffuseFleche; V4d ambiantFleche; bottom[0] = origin[0]; bottom[1] = origin[1]; bottom[2] = origin[2]; if(axis.negative) { bottom[0] -= vector[0]; bottom[1] -= vector[1]; bottom[2] -= vector[2]; } top[0] = origin[0] + vector[0]; top[1] = origin[1] + vector[1]; top[2] = origin[2] + vector[2]; lengt = v3d_length(vector); if(radius<0.1) radius = 0.1; if(axis.negative) lengt *=2; center[0] = top[0]; center[1] = top[1]; center[2] = top[2]; top[0] += (top[0]-bottom[0])/lengt*2*radius; top[1] += (top[1]-bottom[1])/lengt*2*radius; top[2] += (top[2]-bottom[2])/lengt*2*radius; Cylinder_Draw_Color(radius/2,bottom,center,specular,diffuse,ambiant); for(i=0;i<3;i++) { diffuseFleche[i] = diffuse[i] *0.6; ambiantFleche[i] = ambiant[i] *0.6; } diffuseFleche[3] = diffuse[3]; ambiantFleche[3] = ambiant[3]; drawPrismColor(radius/1.5,center,top,specular,diffuseFleche,ambiantFleche); } /************************************************************************/ GLuint principalAxisGenList(GLuint axisList) { V4d specular = {1.0f,1.0f,1.0f,1.0f}; V4d FirstDiffuse = {1.0f,1.0f,1.0f,1.0f}; V4d FirstAmbiant = {1.0f,1.0f,1.0f,1.0f}; V4d secondDiffuse = {1.0f,1.0f,1.0f,1.0f}; V4d secondAmbiant = {1.0f,1.0f,1.0f,1.0f}; V4d thirdDiffuse = {1.0f,1.0f,1.0f,1.0f}; V4d thirdAmbiant = {1.0f,1.0f,1.0f,1.0f}; V3d firstVector = {1.0f,1.0f,1.0f}; V3d secondVector = {1.0f,1.0f,1.0f}; V3d thirdVector = {1.0f,1.0f,1.0f}; GLdouble radius = axis.radius; gint i; if (glIsList(axisList) == GL_TRUE) glDeleteLists(axisList,1); compute_the_principal_axis(); if(!axis.def) return 0; for(i=0;i<3;i++) { FirstDiffuse[i] = axis.firstColor[i]; secondDiffuse[i] = axis.secondColor[i]; thirdDiffuse[i] = axis.thirdColor[i]; FirstAmbiant[i] = FirstDiffuse[i]/10; secondAmbiant[i] = secondDiffuse[i]/10; thirdAmbiant[i] = thirdDiffuse[i]/10; } FirstDiffuse[3] = 1; FirstAmbiant[3] = 1; secondDiffuse[3] = 1; secondAmbiant[3] = 1; thirdDiffuse[3] = 1; thirdAmbiant[3] = 1; for(i=0;i<3;i++) { firstVector[i] = axis.firstVector[i]*axis.scal; secondVector[i] = axis.secondVector[i]*axis.scal; thirdVector[i] = axis.thirdVector[i]*axis.scal; } axisList = glGenLists(1); glNewList(axisList, GL_COMPILE); drawAxis(firstVector, radius, axis.origin, specular, FirstDiffuse, FirstAmbiant); drawAxis(secondVector, radius, axis.origin, specular, secondDiffuse, secondAmbiant); drawAxis(thirdVector, radius, axis.origin, specular, thirdDiffuse, thirdAmbiant); glEndList(); return axisList; } /************************************************************************/ void principalAxisShowList(GLuint axisList) { if(TypeGeom==GABEDIT_TYPEGEOM_NO) return; if(!axis.show) return; if(!axis.def) return; if (glIsList(axisList) == GL_TRUE) glCallList(axisList); } /************************************************************************/ GabeditSrc250/src/Display/AxisGL.h0000644000175100017510000000075413130665225017175 0ustar alloucheallouche #ifndef __GABEDIT_AXISGL_H__ #define __GABEDIT_AXISGL_H__ void getAxisProperties(gboolean* show, gboolean* negative, gdouble origin[], gdouble* radius, gdouble* scal, gdouble xColor[], gdouble yColor[], gdouble zColor[]); void initAxis(); void save_axis_properties(); void read_axis_properties(); void set_axis_dialog (); gboolean testShowAxis(); void showAxis(); void hideAxis(); GLuint axisGenList(GLuint axisList); void axisShowList(GLuint axisList); #endif /* __GABEDIT_AXISGL_H__ */ GabeditSrc250/src/Display/GridQChem.c0000644000175100017510000003447313130665225017651 0ustar alloucheallouche/* GridQChem.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "GlobalOrb.h" #include "StatusOrb.h" #include "UtilsOrb.h" #include "GeomOrbXYZ.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "GLArea.h" #include "AtomicOrbitals.h" #include "Orbitals.h" #include "BondsOrb.h" typedef struct _DataRow { gint numGrid; gint totalNumberOfGrids; }DataRow; /********************************************************************************/ static gboolean set_position_label(FILE* file,gchar* label,gchar* buffer, gint len) { while(!feof(file)) { if(!fgets(buffer,len,file)) return FALSE; if(strstr(buffer,label)) return TRUE; } return FALSE; } /********************************************************************************/ static void get_grid_from_qchem_file(gchar* fileName, gint numOfGrid) { FILE* file = FOpen(fileName, "rb"); gint i; gint j; gint k; gdouble x; gdouble y; gdouble z; gdouble v; gboolean beg = TRUE; gdouble scal; gint n; gint len = BSIZE; gchar buffer[BSIZE]; gboolean Ok = TRUE; CancelCalcul = FALSE; if(!file) { sprintf(buffer,_("I can not open %s file\n"),fileName); Message(buffer,_("Error"),TRUE); return; } progress_orb(0,GABEDIT_PROGORB_READGRID,TRUE); scal = (gdouble)101/grid->N[2]; while(!feof(file)) { if(!fgets(buffer,len,file)) break; if(strstr(buffer,"X") && strstr(buffer,"Y") && strstr(buffer,"Z")) { Ok = TRUE; break; } } if(!Ok) { Message(_("Sorry, I can not read grid from this file"),_("Error"),TRUE); grid = free_grid(grid); return; } n = -1; for(k=0;kN[0];k++) { for(j=0;jN[1];j++) { for(i=0;iN[2];i++) { if(!fgets(buffer,len,file)) { Message(_("Sorry, I can not read grid from this file"),_("Error"),TRUE); grid = free_grid(grid); return; } if( 3 != sscanf(buffer,"%lf %lf %lf",&x, &y, &z) ) { Message(_("Sorry, I can not read grid from this file"),_("Error"),TRUE); grid = free_grid(grid); return; } v = atof(&buffer[13*3+(numOfGrid-1)*13]); /* printf("x = %lf y = %lf z = %lf v %e\n",x,y,z,v);*/ n++; grid->point[k][j][i].C[0] = x; grid->point[k][j][i].C[1] = y; grid->point[k][j][i].C[2] = z; grid->point[k][j][i].C[3] = v; if(beg) { beg = FALSE; grid->limits.MinMax[0][3] = v; grid->limits.MinMax[1][3] = v; } else { if(grid->limits.MinMax[0][3]>v) grid->limits.MinMax[0][3] = v; if(grid->limits.MinMax[1][3]limits.MinMax[1][3] = v; } } } if(CancelCalcul) { progress_orb(0,GABEDIT_PROGORB_READGRID,TRUE); break; } progress_orb(scal,GABEDIT_PROGORB_READGRID,FALSE); } if(CancelCalcul) { grid = free_grid(grid); } progress_orb(0,GABEDIT_PROGORB_READGRID,TRUE); return; } /********************************************************************************/ static gchar** get_list_of_grids(gchar* fileName, gint *nE) { FILE* file = FOpen(fileName, "rb"); gboolean Ok = TRUE; gint len = BSIZE; gchar buffer[BSIZE]; gchar** gridsList = NULL; gint n; gint i; gint j; *nE = 0; CancelCalcul = FALSE; if(!file) { sprintf(buffer,_("I can not open %s file\n, I read list of grids from this file"),fileName); Message(buffer,_("Error"),TRUE); return NULL; } while(!feof(file)) { if(!fgets(buffer,len,file)) return NULL; if(strstr(buffer,"X") && strstr(buffer,"Y") && strstr(buffer,"Z")) { Ok = TRUE; break; } } if(!Ok) return NULL; delete_last_spaces(buffer); n = (strlen(buffer)+1)/13-3; if(n<1) return NULL; gridsList = g_malloc((n+1)*sizeof(gchar*)); for(i=0;i0) set_status_label_info(_("Geometry"),_("Ok")); /*printf("N = %d %d %d\n",N[0],N[1],N[2]);*/ CancelCalcul = FALSE; fclose(file); return TRUE; } /********************************************************************************/ GtkWidget *create_grids_list_frame( GtkWidget *vboxall,gchar** gridsList,gint n, gchar* fileName) { GtkWidget *frame; GtkWidget *combo; GtkWidget *vboxframe; GtkWidget *entry; GtkWidget *table; frame = gtk_frame_new (_("Selection your grid")); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(1,3,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),table); add_label_table(table,_(" Grid Name "),0,0); add_label_table(table,":",0,1); combo = create_combo_box_entry(gridsList,n,TRUE,-1,-1); gtk_table_attach(GTK_TABLE(table),combo,2,4,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); gtk_widget_show (combo); entry = GTK_BIN(combo)->child; gtk_widget_set_sensitive(entry,FALSE); g_object_set_data(G_OBJECT (entry), "FileName",fileName); g_object_set_data(G_OBJECT (entry), "Combo",combo); g_object_set_data(G_OBJECT (entry), "N", GINT_TO_POINTER(n)); g_object_set_data(G_OBJECT (entry), "GridsList", gridsList); g_object_set_data(G_OBJECT (frame), "Entry", entry); return entry; } /********************************************************************************/ static void apply_read_grid(GtkWidget *button,gpointer data) { GtkWidget *entry = (GtkWidget *)data; GtkWidget *Win = g_object_get_data (G_OBJECT (button), "Window"); gchar** gridsList = NULL; gint n = 0; gchar* fileName = NULL; G_CONST_RETURN gchar* t; gint i; gint numOfGrid = 1; if(!this_is_an_object((GtkObject*)entry)) return; n = GPOINTER_TO_INT(g_object_get_data(G_OBJECT (entry), "N")); gridsList = g_object_get_data(G_OBJECT (entry), "GridsList"); t = gtk_entry_get_text(GTK_ENTRY(entry)); numOfGrid = 0; for(i=0;i=1) { get_grid_from_qchem_file(fileName, numOfGrid); if(grid) { limits = grid->limits; create_iso_orbitals(); set_status_label_info(_("Grid"),_("Ok")); } else { set_status_label_info(_("Grid"),_("Nothing")); CancelCalcul = FALSE; } } delete_child(Win); } /********************************************************************************/ void create_window_list_grids(GtkWidget *w, gchar** gridsList,gint n, gchar* fileName) { GtkWidget *fp; GtkWidget *sep; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *hbox; GtkWidget *button; GtkWidget *entry; /* Principal Window */ fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(fp),_("Grids available")); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(PrincipalWindow)); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); gtk_widget_realize(fp); add_glarea_child(fp," Grid List "); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); vboxall = create_vbox(fp); vboxwin = vboxall; entry = create_grids_list_frame(vboxall, gridsList, n, fileName); sep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(vboxwin), sep, FALSE, FALSE, 2); gtk_widget_show(sep); /* boutons box */ hbox = create_hbox(vboxwin); gtk_widget_realize(fp); button = create_button(fp,"Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(fp,"OK"); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_object_set_data(G_OBJECT (button), "Window", fp); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(apply_read_grid),(gpointer)entry); /* Show all */ gtk_widget_show_all(fp); } /**************************************************************/ static gboolean read_qchemgrid_file(gchar* fileName) { gint n; gchar** gridsList = get_list_of_grids(fileName, &n); /* printf("n=%d\n",n);*/ if( n==1) { get_grid_from_qchem_file(fileName, 1); if(grid) { limits = grid->limits; create_iso_orbitals(); set_status_label_info(_("Grid"),_("Ok")); } else { set_status_label_info(_("Grid"),_("Nothing")); CancelCalcul = FALSE; } } else create_window_list_grids(NULL, gridsList, n, fileName); return TRUE; } /********************************************************************************/ void load_qchemgrid_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; gchar *fileNameOut; gboolean rg = FALSE; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); fileNameOut = g_strdup_printf("%s.out",get_suffix_name_file(fileName)); TypeGrid = GABEDIT_TYPEGRID_ORBITAL; rg = read_qchemout_file(fileNameOut); if(rg) read_qchemgrid_file(fileName); } /********************************************************************************/ GabeditSrc250/src/Spectrum/0000755000175100017510000000000013130743374016066 5ustar allouchealloucheGabeditSrc250/src/Spectrum/VASPSpectra.h0000644000175100017510000000021513130665225020326 0ustar alloucheallouche #ifndef __GABEDIT_VASPSPECTRA_H__ #define __GABEDIT_VASPSPECTRA_H__ void read_vasp_xml_file_dlg(); #endif /* __GABEDIT_VASPSPECTRA_H__ */ GabeditSrc250/src/Spectrum/RamanSpectrum.h0000644000175100017510000000042713130665225021021 0ustar alloucheallouche #ifndef __GABEDIT_RAMANSPECTRUM_H__ #define __GABEDIT_RAMANSPECTRUM_H__ void createRamanSpectrum(GtkWidget *parentWindow, GabEditTypeFile typeOfFile); void createRamanSpectrumFromVibration(GtkWidget *parentWindow, Vibration ibration); #endif /* __GABEDIT_RAMANSPECTRUM_H__ */ GabeditSrc250/src/Spectrum/VASPSpectra.c0000644000175100017510000005471513130665225020337 0ustar alloucheallouche/* VASPSpectra.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Files/FileChooser.h" #include "../Common/Windows.h" #include "../Utils/GabeditXYPlot.h" #include "../Display/Vibration.h" /********************************************************************************/ static void g_list_free_all (GList * list, GDestroyNotify free_func) { g_list_foreach (list, (GFunc) free_func, NULL); g_list_free (list); } /********************************************************************************/ static GdkColor get_fore_color(GabeditXYPlot *xyplot) { GdkGCValues values; GdkColormap *colormap; GdkColor color; gdk_gc_get_values(xyplot->fore_gc, &values); colormap = gdk_window_get_colormap(GTK_WIDGET(xyplot)->window); gdk_colormap_query_color(colormap, values.foreground.pixel,&color); return color; } /********************************************************************************/ static void free_list(GList* list) { /* GList* current = NULL; if(!list) return; current = g_list_first(list); for(; current != NULL; current = current->next) { gdouble* data = (gdouble*)current->data; if(data) g_free(data); } g_list_free(list); */ g_list_free_all(list, g_free); } /********************************************************************************/ static void add_new_data(GabeditXYPlot* xyplot, GList* X, GList* Y, gchar* color) { gint numberOfPoints = 0; if(X && Y) { GList* current = NULL; current = g_list_first(X); for(; current != NULL; current = current->next) numberOfPoints++; } //printf("Np=%d\n",numberOfPoints); if(numberOfPoints>0) { GList* cx = g_list_first(X); GList* cy = g_list_first(Y); gint loop; XYPlotData *data = g_malloc(sizeof(XYPlotData)); GdkColor c = get_fore_color(GABEDIT_XYPLOT(xyplot)); if(color) gdk_color_parse (color, &c); data->size=numberOfPoints; data->x = g_malloc(numberOfPoints*sizeof(gdouble)); data->y = g_malloc(numberOfPoints*sizeof(gdouble)); loop = 0; for(; cx != NULL; cx = cx->next, cy = cy->next) { data->x[loop] = *(gdouble*)(cx->data); data->y[loop] = *(gdouble*)(cy->data); loop++; } sprintf(data->point_str,"+"); data->point_pango = NULL; gabedit_xyplot_add_data (GABEDIT_XYPLOT(xyplot), data); data->point_size=0; data->line_width=2; data->point_color.red=c.red; data->point_color.green=c.green; data->point_color.blue=c.blue; data->line_color.red=c.green; data->line_color.green=c.red; data->line_color.blue=c.blue; data->line_style=GDK_LINE_SOLID; gabedit_xyplot_add_data (GABEDIT_XYPLOT(xyplot), data); gabedit_xyplot_set_autorange(GABEDIT_XYPLOT(xyplot), NULL); } } /********************************************************************************/ static void createVASPSpectraWin(gchar* title, GList* X, GList* Y, GList* Z, gchar* xlabel, gchar* ylabel) { GtkWidget* window = gabedit_xyplot_new_window(title, NULL); GabeditXYPlot *xyplot = g_object_get_data(G_OBJECT (window), "XYPLOT"); set_icone(window); if(!xyplot || !G_IS_OBJECT(xyplot)) return; if(X && Y) add_new_data(xyplot, X, Y,"red"); if(X && Z) add_new_data(xyplot, X, Z,"blue"); if(!X) fprintf(stderr,"attention X = NULL\n"); if(xlabel) gabedit_xyplot_set_x_label (GABEDIT_XYPLOT(xyplot), xlabel); if(ylabel) gabedit_xyplot_set_y_label (GABEDIT_XYPLOT(xyplot), ylabel); } /********************************************************************************/ static void messageErrorFreq(gchar* fileName) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not read energies from '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); } /********************************************************************************/ /* static void messageErrorInt(gchar* fileName) { gchar buffer[BSIZE]; sprintf(buffer,"Sorry, I can not read energies from '%s' file\n",fileName); Message(buffer,"Error",TRUE); } */ /* Ref : J. Mater. Chem. C, 2015, 3, 8625-8633 */ /********************************************************************************/ static GList* computeAbsorptionCoefficient(GList* listEnergies, GList* listEpsiReal, GList* listEpsiImag) { GList* listAlpha = NULL; GList* ce = listEnergies; GList* cr = listEpsiReal; GList* ci = listEpsiImag; gdouble eVTocm1=1.0/(AUTOEV)*AU_TO_CM1; gdouble fact=eVTocm1*sqrt(2.0); for(; ce && cr && ci ; ce = ce->next, cr = cr->next, ci = ci->next) { gdouble e = *(gdouble*)(ce->data); gdouble r = *(gdouble*)(cr->data); gdouble i = *(gdouble*)(ci->data); gdouble alpha=fact*sqrt(fabs(sqrt(r*r+i*i)-r)); gdouble* data = g_malloc(sizeof(gdouble)); *data = alpha; listAlpha=g_list_append(listAlpha, (gpointer) data); } return listAlpha; } /********************************************************************************/ static GList* computeRefractiveIndex(GList* listEpsiReal, GList* listEpsiImag) { GList* listIndex = NULL; GList* cr = listEpsiReal; GList* ci = listEpsiImag; gdouble fact=1.0/sqrt(2.0); for(; cr && ci ; cr = cr->next, ci = ci->next) { gdouble r = *(gdouble*)(cr->data); gdouble i = *(gdouble*)(ci->data); gdouble n=fact*sqrt(fabs(sqrt(r*r+i*i)+r)); gdouble* data = g_malloc(sizeof(gdouble)); *data = n; listIndex=g_list_append(listIndex, (gpointer) data); } return listIndex; } /********************************************************************************/ static GList* computeExtinctionCoefficient(GList* listEpsiReal, GList* listEpsiImag) { GList* listExtinctionCoefficient = NULL; GList* cr = listEpsiReal; GList* ci = listEpsiImag; gdouble fact=1.0/sqrt(2.0); for(; cr && ci ; cr = cr->next, ci = ci->next) { gdouble r = *(gdouble*)(cr->data); gdouble i = *(gdouble*)(ci->data); gdouble k=fact*sqrt(fabs(sqrt(r*r+i*i)-r)); gdouble* data = g_malloc(sizeof(gdouble)); *data = k; listExtinctionCoefficient=g_list_append(listExtinctionCoefficient, (gpointer) data); } return listExtinctionCoefficient; } /********************************************************************************/ static GList* computeReflectivity(GList* listn, GList* listk) { GList* listR = NULL; GList* cn = listn; GList* ck = listk; for(; cn && ck ; cn = cn->next, ck = ck->next) { gdouble n = *(gdouble*)(cn->data); gdouble k = *(gdouble*)(ck->data); gdouble R=((n-1)*(n-1)+k*k)/((n+1)*(n+1)+k*k); gdouble* data = g_malloc(sizeof(gdouble)); *data = R; listR=g_list_append(listR, (gpointer) data); } return listR; } /********************************************************************************/ static GList* computeConductivityReal(GList* listEnergies, GList* listEpsiReal, GList* listEpsiImag) { GList* list = NULL; GList* ce = listEnergies; GList* cr = listEpsiReal; GList* ci = listEpsiImag; gdouble eVTofsm1=0.241804; gdouble fact=eVTofsm1/2.0; for(; ce && cr && ci ; ce = ce->next, cr = cr->next, ci = ci->next) { gdouble e = *(gdouble*)(ce->data); gdouble r = *(gdouble*)(cr->data); gdouble i = *(gdouble*)(ci->data); gdouble sigma=fact*e*i; gdouble* data = g_malloc(sizeof(gdouble)); *data = sigma; list=g_list_append(list, (gpointer) data); } return list; } static GList* computeConductivityImag(GList* listEnergies, GList* listEpsiReal, GList* listEpsiImag) { GList* list = NULL; GList* ce = listEnergies; GList* cr = listEpsiReal; GList* ci = listEpsiImag; gdouble eVTofsm1=0.241804; gdouble fact=eVTofsm1/2.0; for(; ce && cr && ci ; ce = ce->next, cr = cr->next, ci = ci->next) { gdouble e = *(gdouble*)(ce->data); gdouble r = *(gdouble*)(cr->data); gdouble i = *(gdouble*)(ci->data); gdouble sigma=fact*e*(1-r); gdouble* data = g_malloc(sizeof(gdouble)); *data = sigma; list=g_list_append(list, (gpointer) data); } return list; } /********************************************************************************/ static GList* computeEnergyLossFunction(GList* listEpsiReal, GList* listEpsiImag) { GList* list = NULL; GList* cr = listEpsiReal; GList* ci = listEpsiImag; for(; cr && ci ; cr = cr->next, ci = ci->next) { gdouble r = *(gdouble*)(cr->data); gdouble i = *(gdouble*)(ci->data); gdouble m=(r*r+i*i); gdouble L=(m==0)?0:i/m; gdouble* data = g_malloc(sizeof(gdouble)); *data = L; list=g_list_append(list, (gpointer) data); } return list; } /********************************************************************************/ static gboolean read_lists_vasp_xml_file(FILE* fd, gchar* tag, gint direction, GList** plistEnergies, GList** plistEpsi) { GList* listEnergies = *plistEnergies; GList* listEpsi = *plistEpsi; gchar t[BSIZE]; gboolean OK = TRUE; gdouble e, exx, eyy, ezz, exy, exz, eyz; gint numberOfPoints = 0; if(!goToStr(fd, tag)) { gchar buffer[BSIZE]; sprintf(buffer,_("I cannot read dielectric function from the VASP xml file\nChech your file\n")); Message(buffer,_("Error"),TRUE); return FALSE; } while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"")) { // printf("%s\n",(strstr(t,"")+strlen(""))); if(7==sscanf(strstr(t,"")+strlen(""),"%lf %lf %lf %lf %lf %lf %lf", &e, &exx, &eyy, &ezz, &exy, &exz, &eyz)) { double* data; data = g_malloc(sizeof(gdouble)); *data = e; listEnergies=g_list_append(listEnergies, (gpointer) data); data = g_malloc(sizeof(gdouble)); *data = exx; if(direction == 1) *data = eyy; if(direction == 2) *data = ezz; if(direction == 3) *data = exy; if(direction == 4) *data = exz; if(direction == 5) *data = eyz; if(direction == 6) *data = (exx+eyy+ezz)/3; listEpsi=g_list_append(listEpsi, (gpointer) data); numberOfPoints++; } else { OK = FALSE; break; } } if(strstr(t,"")) { OK = TRUE; break; } } *plistEnergies = listEnergies; *plistEpsi = listEpsi; return OK; } /********************************************************************************/ static gboolean read_dielectric_vasp_xml_file(gchar* fileName, GtkWidget* entry_options, GtkWidget* entry_directions, GtkWidget** toggle_functions) { gchar t[BSIZE]; gboolean OK; FILE *fd; gint ne; gint numberOfPoints = 0; gdouble* energies = NULL; gdouble* intensities = NULL; gdouble a; gdouble b = 1; GList* listEnergies = NULL; GList* listEpsiImag = NULL; GList* listEpsiReal = NULL; GList* listAlpha = NULL; GList* listRefractiveIndex = NULL; GList* listExtinctionCoefficient = NULL; GList* listReflectivity = NULL; GList* listSigmaReal = NULL; GList* listSigmaImag = NULL; GList* listEnergyLoss = NULL; gchar* option = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry_options))); G_CONST_RETURN gchar* tdirection = gtk_entry_get_text(GTK_ENTRY(entry_directions)); gint direction = 0; gchar* directions[] = {"XX","YY","ZZ","XY","XZ","YZ","XYZ"}; gint nDirections = sizeof (directions)/sizeof(directions[0]); gint i; for(i=0;i-1)"); } if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle_functions[1]))) { listRefractiveIndex = computeRefractiveIndex(listEpsiReal, listEpsiImag); if(listRefractiveIndex) createVASPSpectraWin("Refractive index",listEnergies, listRefractiveIndex,NULL,"Frequency(eV)","Refractive index"); } if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle_functions[2]))) { listExtinctionCoefficient = computeExtinctionCoefficient(listEpsiReal, listEpsiImag); if(listExtinctionCoefficient) createVASPSpectraWin("Extinction coefficient",listEnergies, listExtinctionCoefficient,NULL,"Frequency(eV)","Extinction coefficient"); } if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle_functions[3]))) { listReflectivity = computeReflectivity(listRefractiveIndex, listExtinctionCoefficient); if(listExtinctionCoefficient) createVASPSpectraWin("Reflectivity",listEnergies, listReflectivity,NULL,"Frequency(eV)","Reflectivity"); } if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle_functions[4]))) { listSigmaReal = computeConductivityReal(listEnergies, listEpsiReal, listEpsiImag); listSigmaImag = computeConductivityImag(listEnergies, listEpsiReal, listEpsiImag); if(listSigmaReal && listSigmaImag) createVASPSpectraWin("Conductivity",listEnergies, listSigmaReal,listSigmaImag,"Frequency(eV)","Conductivity(1/fs)"); } if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle_functions[5]))) { listEnergyLoss = computeEnergyLossFunction(listEpsiReal, listEpsiImag); if(listEnergyLoss) createVASPSpectraWin("Energy loss",listEnergies, listEnergyLoss,NULL,"Frequency(eV)","Loss function"); } free_list(listEnergies); free_list(listEpsiReal); free_list(listEpsiImag); free_list(listAlpha); free_list(listRefractiveIndex); free_list(listExtinctionCoefficient); free_list(listReflectivity); free_list(listEnergyLoss); free_list(listSigmaReal); free_list(listSigmaImag); fclose(fd); return TRUE; } /********************************************************************************/ static gboolean apply_dielectric_vasp(GtkWidget *window,gpointer data) { if(!window) printf("window = NULL\n"); gint direction = 0; gchar* fileName = (gchar*)g_object_get_data(G_OBJECT(window), "FileName"); GtkWidget* entry_options= g_object_get_data(G_OBJECT (window), "EntryOptions"); GtkWidget* entry_directions= g_object_get_data(G_OBJECT (window), "EntryDirections"); if(!entry_options) printf("entry_options= = NULL\n"); GtkWidget** toggle_functions = g_object_get_data(G_OBJECT (window), "ToggleFunctions"); if(!toggle_functions) printf("toggle_functions= = NULL\n"); read_dielectric_vasp_xml_file(fileName, entry_options, entry_directions, toggle_functions); gtk_widget_destroy(window); return TRUE; } /********************************************************************************/ static gboolean create_dielectric_vasp_xml_win_dlg(gchar* fileName, GList* lists) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* table = NULL; GtkWidget* tmp_label = NULL; GtkWidget* vbox = NULL; gint i; gint nOptions = 0; gchar** listOptions = NULL; GtkWidget* entry_options = NULL; GtkWidget* hseparator = NULL; GtkWidget* hbox = NULL; GtkWidget* vbox_window = NULL; GtkWidget* frame = NULL; GList* cOption = NULL; gchar* functions[] = {"Absorption coefficient","Refractive index","Extinction coefficient","Reflectivity","Conductivity","Energy loss"}; gint nFunctions = sizeof (functions)/sizeof(functions[0]); gchar* directions[] = {"XX","YY","ZZ","XY","XZ","YZ","XYZ"}; gchar** listDirections = NULL; gint nDirections = sizeof (directions)/sizeof(directions[0]); GtkWidget* entry_directions = NULL; GtkWidget* button; gint il = 0; GtkWidget** toggle_functions = g_malloc(nFunctions*sizeof(GtkWidget*)); nOptions = 0; for(cOption = g_list_first(lists); cOption != NULL; cOption = cOption->next) nOptions++; if(nOptions<1) return FALSE; listOptions = g_malloc(nOptions*sizeof(gchar*)); i = 0; for(cOption = g_list_first(lists); cOption != NULL; cOption = cOption->next) { gchar* data = (gchar*)cOption->data; listOptions[i] = g_strdup(data); i++; } listDirections = g_malloc(nDirections*sizeof(gchar*)); for(i=0;i")) { lists=g_list_append(lists, (gpointer) g_strdup("")); } else { gint i; for(i=0;i=0;i--) { if(t[i]=='>') t[i] = '\0'; break;} if(pos) lists=g_list_append(lists, (gpointer) g_strdup(pos)); } } } if(lists==NULL) { gchar buffer[BSIZE]; if(fd) fclose(fd); sprintf(buffer,_("I cannot read dielectric function from the VASP xml file\nCheck your '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); return FALSE; } fclose(fd); create_dielectric_vasp_xml_win_dlg(fileName,lists); free_list(lists); return TRUE; } /********************************************************************************/ void read_vasp_xml_file_dlg() { GtkWidget* filesel = file_chooser_open(read_dielectric_vasp_xml_file_dlg, _("Read dielectric function from a vasp.xml file"), GABEDIT_TYPEFILE_XML,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } GabeditSrc250/src/Spectrum/DOS.c0000644000175100017510000001641113130665225016660 0ustar alloucheallouche/* DOSSpectrum.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Files/FileChooser.h" #include "../Common/Windows.h" #include "../Utils/GabeditXYPlot.h" #include "../Display/Vibration.h" #include "SpectrumWin.h" /********************************************************************************/ static void createDOSSpectrumWin(gint numberOfStates, gdouble* energies, gdouble* intensities) { GtkWidget* window = spectrum_win_new_with_xy(_("Density of states"), numberOfStates, energies, intensities); GtkWidget* hbox = g_object_get_data(G_OBJECT (window), "HBoxData"); GabeditXYPlot *xyplot = g_object_get_data(G_OBJECT (window), "XYPLOT"); spectrum_win_set_half_width(window, 0.5); set_icone(window); if(!hbox) return; spectrum_win_set_xlabel(window, "eV"); spectrum_win_set_ylabel(window, _("Intensity")); if(!xyplot || !G_IS_OBJECT(xyplot)) return; gabedit_xyplot_set_autorange(xyplot,NULL); } /********************************************************************************/ static void messageErrorFreq(gchar* fileName) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not read energies from '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); } /********************************************************************************/ /* static void messageErrorInt(gchar* fileName) { gchar buffer[BSIZE]; sprintf(buffer,"Sorry, I can not read energies from '%s' file\n",fileName); Message(buffer,"Error",TRUE); } */ /********************************************************************************/ static gboolean read_gabedit_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; gchar t[BSIZE]; gboolean OK; FILE *fd; gint ne; gint numberOfStates = 0; gdouble* energies = NULL; gdouble* intensities = NULL; gdouble a; gdouble b = 1; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); OK=FALSE; while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"[DOS")) { OK = TRUE; break; } } if(!OK) { messageErrorFreq(FileName); if(fd) fclose(fd); return FALSE; } while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"[")) break; if(this_is_a_backspace(t)) break; ne = sscanf(t,"%lf",&a); if(ne != 1) { messageErrorFreq(FileName); if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(fd); return FALSE; } numberOfStates++; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); energies[numberOfStates-1] = a; intensities[numberOfStates-1] = b; } if(numberOfStates>0) { createDOSSpectrumWin(numberOfStates, energies, intensities); } else { messageErrorFreq(FileName); } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(fd); return TRUE; } /********************************************************************************/ static void read_gabedit_file_dlg() { GtkWidget* filesel = file_chooser_open(read_gabedit_file, _("Read energies from a Gabedit file"), GABEDIT_TYPEFILE_GABEDIT,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_sample_1column_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gboolean OK = TRUE; gint numberOfStates = 0; gdouble* energies = NULL; gdouble* intensities = NULL; gchar *FileName; FILE *fd; gdouble a; gdouble b = 1; int ne = 0; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; while(!feof(fd)) { if(!fgets(t,BSIZE,fd))break; ne = sscanf(t,"%lf",&a); if(ne==1) { numberOfStates++; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); energies[numberOfStates-1] = a; intensities[numberOfStates-1] = b; } } if(numberOfStates>0) { createDOSSpectrumWin(numberOfStates, energies, intensities); } else { OK = FALSE; messageErrorFreq(FileName); } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(fd); return OK; } /********************************************************************************/ static void read_sample_1column_file_dlg() { GtkWidget* filesel = file_chooser_open(read_sample_1column_file, _("Read energies from a sample file(1 column : Energy(eV))"), GABEDIT_TYPEFILE_TXT,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ void createDOSSpectrum(GtkWidget *parentWindow, GabEditTypeFile typeOfFile) { if(typeOfFile==GABEDIT_TYPEFILE_GABEDIT) read_gabedit_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_TXT) read_sample_1column_file_dlg(); } /********************************************************************************/ void createDOSSpectrumFromEnergiesTable(GtkWidget *parentWindow, gdouble* auEnergies, gint nEnergies) { gint numberOfStates = nEnergies; gdouble* energies = NULL; gdouble* intensities = NULL; gint j; if(numberOfStates<1) { GtkWidget* mess=Message(_("The number of states should be > 0"),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (mess), TRUE); return; } energies = g_malloc(numberOfStates*sizeof(gdouble)); intensities = g_malloc(numberOfStates*sizeof(gdouble)); for (j=0; j < numberOfStates; j++) { energies[j] = auEnergies[j]*AUTOEV; intensities[j] = 1; } createDOSSpectrumWin(numberOfStates, energies, intensities); if(energies) g_free(energies); if(intensities) g_free(intensities); } GabeditSrc250/src/Spectrum/Makefile0000644000175100017510000000074113130664665017535 0ustar allouchealloucheOBJECTS = SpectrumWin.o IRSpectrum.o RamanSpectrum.o UVSpectrum.o ECDSpectrum.o NMRSpectrum.o DOS.o VASPSpectra.o IGVPT2Spectrum.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/Spectrum/SpectrumWin.c0000644000175100017510000012363513130665225020522 0ustar alloucheallouche/* SpectrumWin.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include #include "../Common/Global.h" #include "../Utils/GabeditXYPlot.h" #include "SpectrumWin.h" /****************************************************************************************/ static gdouble get_ymax(XYPlotData* dataCurve) { gdouble ymax = 1; gint loop; if(dataCurve->size<1) return 1.0; ymax = dataCurve->y[0]; for (loop=1; loopsize; loop++) if(ymaxy[loop]) ymax = dataCurve->y[loop]; return ymax; } /****************************************************************************************/ static gdouble get_ymin(XYPlotData* dataCurve) { gdouble ymin = 1; gint loop; if(dataCurve->size<1) return 0.0; ymin = dataCurve->y[0]; for (loop=1; loopsize; loop++) if(yminy[loop]) ymin = dataCurve->y[loop]; return ymin; } /****************************************************************************************/ static void set_ymax_to_one(XYPlotData* dataCurve, XYPlotData* dataPeaks) { gdouble ymax = 0; gint loop; if(dataCurve->size<1) return; ymax = dataCurve->y[0]; for (loop=1; loopsize; loop++) if(ymaxy[loop]) ymax = dataCurve->y[loop]; if(ymax!=0) for (loop=0; loopsize; loop++) dataCurve->y[loop] /= ymax; if(ymax!=0) for (loop=0; loopsize; loop++) dataPeaks->y[loop] /= ymax; } /****************************************************************************************/ static void build_data_xyplot_curve_noconv(XYPlotWinData* winData, XYPlotData* dataCurve) { gint loop; gint line_width = winData->line_width; gint point_size = winData->point_size; GdkColor line_color = winData->line_color; GdkColor point_color = winData->point_color; if(dataCurve->x && dataCurve->y) { line_width = dataCurve->line_width; point_size = dataCurve->point_size; line_color = dataCurve->line_color; point_color = dataCurve->point_color; } dataCurve->size=winData->size; if(dataCurve->size>0) { if(dataCurve->x) g_free(dataCurve->x); if(dataCurve->y) g_free(dataCurve->y); dataCurve->x = (gdouble*)g_malloc(sizeof(gdouble)*dataCurve->size); dataCurve->y = (gdouble*)g_malloc(sizeof(gdouble)*dataCurve->size); } for (loop=0; loopsize; loop++){ dataCurve->x[loop]=winData->x[loop]*winData->scaleX+winData->shiftX; dataCurve->y[loop]=winData->y[loop]*winData->scaleY; } sprintf(dataCurve->point_str,"+"); dataCurve->point_size=point_size; dataCurve->line_width=line_width; dataCurve->point_color=point_color; dataCurve->line_color=line_color; dataCurve->line_style=winData->line_style; } /********************************************************************************/ static gdouble lorentzianLineshape(gdouble rel_offset) { return 1.0 / (1.0 + rel_offset * rel_offset); } /********************************************************************************/ static gdouble gaussianLineshape(gdouble rel_offset) { gdouble nln2 = -log(2.0); return exp(nln2 * rel_offset * rel_offset); } /****************************************************************************************/ static void build_data_xyplot_curve_withconv(XYPlotWinData* winData, XYPlotData* dataCurve) { gint i; gint j; gdouble (*lineshape)(gdouble); gint line_width = winData->line_width; gint point_size = winData->point_size; GdkColor line_color = winData->line_color; GdkColor point_color = winData->point_color; gint n = 0; gdouble xx = winData->xmin; gdouble h0 = winData->halfWidth/20; if(dataCurve->x && dataCurve->y) { line_width = dataCurve->line_width; point_size = dataCurve->point_size; line_color = dataCurve->line_color; point_color = dataCurve->point_color; } if(winData->convType==GABEDIT_CONV_TYPE_LORENTZ) lineshape = lorentzianLineshape; else lineshape = gaussianLineshape; if(dataCurve->size>0 && winData->size) { if(dataCurve->x) g_free(dataCurve->x); if(dataCurve->y) g_free(dataCurve->y); dataCurve->x = NULL; dataCurve->y = NULL; } dataCurve->size=0; xx = winData->xmin; h0 = winData->halfWidth/10; n = (gint)((winData->xmax-winData->xmin)/h0+0.5)+winData->size; if(n>0) dataCurve->x = (gdouble*)g_malloc(sizeof(gdouble)*n); if(winData->size>0 && n>0) do { gdouble dmin = 0.0; gdouble d = 0.0; gint jmin = 0; for (j=0; j < winData->size; j++) { gdouble center = (gdouble) winData->x[j]*winData->scaleX+winData->shiftX; d = fabs(xx - center); if(dx[dataCurve->size] = xx; if(dminx[jmin]*winData->scaleX+winData->shiftX) { xx = (gdouble) winData->x[jmin]*winData->scaleX+winData->shiftX; dataCurve->x[dataCurve->size] = xx; xx += h0+1e-8; } else { xx = (gdouble) winData->x[jmin]*winData->scaleX+winData->shiftX; dataCurve->x[dataCurve->size] = xx; xx += h0+1e-8; } } else { if(dmin> 5*winData->halfWidth) xx += h0+dmin/5; else xx += h0; } dataCurve->size++; }while(xxxmax && dataCurve->sizesize>0) { dataCurve->x = (gdouble*)g_realloc(dataCurve->x,sizeof(gdouble)*dataCurve->size); dataCurve->y = (gdouble*)g_malloc(sizeof(gdouble)*dataCurve->size); } if(winData->size>0) for (i=0; i < dataCurve->size; i++) { gdouble yy = 0.0; for (j=0; j < winData->size; j++) { gdouble center = (gdouble) winData->x[j]*winData->scaleX+winData->shiftX; gdouble rel_offset = (dataCurve->x[i] - center) / winData->halfWidth; yy += winData->y[j]*lineshape(rel_offset)*winData->scaleY; } dataCurve->y[i] = yy; } sprintf(dataCurve->point_str,"+"); dataCurve->point_size=point_size; dataCurve->line_width=line_width; dataCurve->point_color=point_color; dataCurve->line_color=line_color; dataCurve->line_style=winData->line_style; } /****************************************************************************************/ static void build_data_xyplot_curve(XYPlotWinData* winData, XYPlotData* dataCurve) { switch(winData->convType) { case GABEDIT_CONV_TYPE_NONE : build_data_xyplot_curve_noconv(winData, dataCurve); break; case GABEDIT_CONV_TYPE_LORENTZ : case GABEDIT_CONV_TYPE_GAUSS : build_data_xyplot_curve_withconv(winData, dataCurve); } } /****************************************************************************************/ static void build_data_xyplot_peaks(XYPlotWinData* winData, XYPlotData* dataPeaks) { gint loop; gint line_width = winData->line_width; gint point_size = winData->point_size; GdkColor line_color = winData->line_color; GdkColor point_color = winData->point_color; line_color.red *=0.9; line_color.green *=0.9; line_color.blue *=0.9; point_color.red *=0.9; point_color.green *=0.9; point_color.blue *=0.9; if(dataPeaks->x && dataPeaks->y) { line_width = dataPeaks->line_width; point_size = dataPeaks->point_size; line_color = dataPeaks->line_color; point_color = dataPeaks->point_color; } dataPeaks->size=3*winData->size+2; if(dataPeaks->size>0) { if(dataPeaks->x) g_free(dataPeaks->x); if(dataPeaks->y) g_free(dataPeaks->y); dataPeaks->x = (gdouble*)g_malloc(sizeof(gdouble)*dataPeaks->size); dataPeaks->y = (gdouble*)g_malloc(sizeof(gdouble)*dataPeaks->size); } dataPeaks->x[0]=winData->xmin; /* dataPeaks->y[0]=winData->ymin;*/ dataPeaks->y[0]=0; dataPeaks->x[dataPeaks->size-1]=winData->xmax; /* dataPeaks->y[dataPeaks->size-1]=winData->ymin;*/ dataPeaks->y[dataPeaks->size-1]=0; for (loop=0; loopsize; loop++){ gint iold = loop*3+1; gdouble xx = winData->x[loop]*winData->scaleX+winData->shiftX; dataPeaks->x[iold]=xx; /* dataPeaks->y[iold]=winData->ymin;*/ dataPeaks->y[iold]=0; dataPeaks->x[iold+1]=xx; dataPeaks->y[iold+1]=winData->y[loop]*winData->scaleY; dataPeaks->x[iold+2]=xx; /* dataPeaks->y[iold+2]=winData->ymin;*/ dataPeaks->y[iold+2]=0; } sprintf(dataPeaks->point_str,"+"); dataPeaks->point_size=point_size; dataPeaks->line_width=line_width; dataPeaks->point_color=point_color; dataPeaks->line_color=line_color; dataPeaks->line_style=winData->line_style; } /****************************************************************************************/ static void build_data_xyplot(XYPlotWinData* winData) { XYPlotData* dataPeaks = NULL; XYPlotData* dataCurve = NULL; if(!winData->showDataPeaks && !winData->showDataCurve) return; if(!winData->dataPeaks) { winData->dataPeaks = (XYPlotData*)g_malloc(sizeof(XYPlotData)); winData->dataPeaks->size = 0; winData->dataPeaks->x = NULL; winData->dataPeaks->y = NULL; } if(!winData->dataCurve) { winData->dataCurve = (XYPlotData*)g_malloc(sizeof(XYPlotData)); winData->dataCurve->size = 0; winData->dataCurve->x = NULL; winData->dataCurve->y = NULL; } dataPeaks = winData->dataPeaks; dataCurve = winData->dataCurve; build_data_xyplot_curve(winData, dataCurve); build_data_xyplot_peaks(winData, dataPeaks); if(winData->ymaxToOne) set_ymax_to_one(dataCurve, dataPeaks); } /****************************************************************************************/ static XYPlotWinData* get_win_data(GabeditXYPlot *xyplot, gint size, gdouble* x, gdouble* y) { XYPlotWinData* winData = (XYPlotWinData*)g_malloc(sizeof(XYPlotWinData)); gint loop; winData->showDataPeaks = FALSE; winData->showDataCurve = TRUE; winData->dataPeaks = NULL; winData->dataCurve = NULL; winData->size=size; winData->x = NULL; winData->y = NULL; gabedit_xyplot_get_range (GABEDIT_XYPLOT(xyplot), &(winData->xmin), &(winData->xmax), &(winData->ymin), &(winData->ymax)); if(size>0) { winData->x = (gdouble*) g_malloc(sizeof(gdouble)*size); winData->y = (gdouble*) g_malloc(sizeof(gdouble)*size); for(loop=0;loopx[loop] = x[loop]; winData->y[loop] = y[loop]; } } winData->point_size=0; winData->line_width=1; winData->point_color.red=0; winData->point_color.green=0; winData->point_color.blue=0; winData->line_color.red=65000; winData->line_color.green=0; winData->line_color.blue=0; winData->line_style=GDK_LINE_SOLID; winData->halfWidth = fabs(winData->xmax-winData->xmin)/30; winData->convType = GABEDIT_CONV_TYPE_LORENTZ; winData->scaleX = 1; winData->scaleY = 1; winData->shiftX = 0; winData->ymaxToOne = FALSE; build_data_xyplot(winData); return winData; } /****************************************************************************************/ static void gabedit_xyplot_add_windata(GabeditXYPlot *xyplot, XYPlotWinData* data) { GList* data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); if (!data_list || g_list_find (data_list, (gpointer)data)==NULL) { data_list=g_list_append(data_list, (gpointer) data); g_object_set_data(G_OBJECT (xyplot), "DataList", data_list); } } /****************************************************************************************/ static void gabedit_xyplot_show_curve_peaks(GabeditXYPlot *xyplot) { GList* data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); GList* current = NULL; XYPlotWinData* data; if(!data_list) return; current=g_list_first(data_list); for(; current != NULL; current = current->next) { data = (XYPlotWinData*)current->data; if(data->showDataPeaks) gabedit_xyplot_add_data(xyplot, data->dataPeaks); if(data->showDataCurve) gabedit_xyplot_add_data(xyplot, data->dataCurve); } } /****************************************************************************************/ static void gabedit_xyplot_refresh_dat(GabeditXYPlot *xyplot) { GList* data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); GList* current = NULL; XYPlotWinData* data = NULL; if(!data_list) return; current=g_list_first(data_list); for(; current != NULL; current = current->next) { data = (XYPlotWinData*)current->data; if(data->convType!=GABEDIT_CONV_TYPE_NONE) { gabedit_xyplot_get_range (GABEDIT_XYPLOT(xyplot), &(data->xmin), &(data->xmax), &(data->ymin), &(data->ymax)); build_data_xyplot(data); } } } /****************************************************************************************/ static void toggle_no_convolution_toggled(GtkToggleButton *togglebutton, gpointer user_data) { GtkWidget* xyplot = NULL; GList* data_list = NULL; GList* current = NULL; XYPlotWinData* data; if(!user_data || !G_IS_OBJECT(user_data)) return; if(!gtk_toggle_button_get_active(togglebutton)) return; xyplot = GTK_WIDGET(user_data); data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); if(!data_list) return; current=g_list_first(data_list); for(; current != NULL; current = current->next) { data = (XYPlotWinData*)current->data; if(data->convType!=GABEDIT_CONV_TYPE_NONE) { data->convType=GABEDIT_CONV_TYPE_NONE; build_data_xyplot(data); } } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /********************************************************************************/ static void toggle_lorentzian_toggled(GtkToggleButton *togglebutton, gpointer user_data) { GtkWidget* xyplot = NULL; GList* data_list = NULL; GList* current = NULL; XYPlotWinData* data; if(!user_data || !G_IS_OBJECT(user_data)) return; if(!gtk_toggle_button_get_active(togglebutton)) return; xyplot = GTK_WIDGET(user_data); data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); if(!data_list) return; current=g_list_first(data_list); for(; current != NULL; current = current->next) { data = (XYPlotWinData*)current->data; if(data->convType!=GABEDIT_CONV_TYPE_LORENTZ) { data->convType=GABEDIT_CONV_TYPE_LORENTZ; build_data_xyplot(data); } } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /********************************************************************************/ static void toggle_gaussian_toggled(GtkToggleButton *togglebutton, gpointer user_data) { GtkWidget* xyplot = NULL; GList* data_list = NULL; GList* current = NULL; XYPlotWinData* data; if(!user_data || !G_IS_OBJECT(user_data)) return; if(!gtk_toggle_button_get_active(togglebutton)) return; xyplot = GTK_WIDGET(user_data); data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); if(!data_list) return; current=g_list_first(data_list); for(; current != NULL; current = current->next) { data = (XYPlotWinData*)current->data; if(data->convType!=GABEDIT_CONV_TYPE_GAUSS) { data->convType=GABEDIT_CONV_TYPE_GAUSS; build_data_xyplot(data); } } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /********************************************************************************/ static void toggle_show_peaks_toggled(GtkToggleButton *togglebutton, gpointer user_data) { GtkWidget* xyplot = NULL; GList* data_list = NULL; GList* current = NULL; XYPlotWinData* data; gboolean showPeaks = FALSE; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); if(!data_list) return; showPeaks = gtk_toggle_button_get_active(togglebutton); current=g_list_first(data_list); for(; current != NULL; current = current->next) { data = (XYPlotWinData*)current->data; gabedit_xyplot_remove_data(GABEDIT_XYPLOT(xyplot), (gpointer)data->dataPeaks); if(data->showDataPeaks!=showPeaks) { data->showDataPeaks=showPeaks; build_data_xyplot(data); if(data->showDataPeaks) gabedit_xyplot_add_data(GABEDIT_XYPLOT(xyplot), (gpointer)data->dataPeaks); } } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /********************************************************************************/ static void toggle_ymax_to_one_toggled(GtkToggleButton *togglebutton, gpointer user_data) { GtkWidget* xyplot = NULL; GList* data_list = NULL; GList* current = NULL; XYPlotWinData* data; gboolean ymaxToOne = FALSE; gdouble ymin = 0; gdouble ymax = 0; gdouble a; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); if(!data_list) return; ymaxToOne = gtk_toggle_button_get_active(togglebutton); current=g_list_first(data_list); for(; current != NULL; current = current->next) { data = (XYPlotWinData*)current->data; gabedit_xyplot_remove_data(GABEDIT_XYPLOT(xyplot), (gpointer)data->dataCurve); if(data->ymaxToOne!=ymaxToOne) { data->ymaxToOne=ymaxToOne; build_data_xyplot(data); gabedit_xyplot_add_data(GABEDIT_XYPLOT(xyplot), (gpointer)data->dataCurve); a =get_ymin(data->dataCurve); if(ymin>a) ymin = a; a =get_ymax(data->dataCurve); if(ymaxx; y=event->y; if (event->is_hint || (event->window != xyplot->window)) gdk_window_get_pointer (xyplot->window, &x, &y, NULL); if(gabedit_xyplot_get_point(GABEDIT_XYPLOT(xyplot), x, y, &xv, &yv)) snprintf(str, 50, _("Mouse position: %lf, %lf"), xv, yv); else sprintf(str, " "); context_id=gtk_statusbar_get_context_id (GTK_STATUSBAR(statusbar), "mouse position"); gtk_statusbar_push (GTK_STATUSBAR(statusbar), context_id, str); return TRUE; } /********************************************************************************/ static void activate_entry_xmin(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; gdouble a; GtkWidget* xyplot = NULL; gdouble xmin; gdouble ymin; gdouble xmax; gdouble ymax; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); a = atof(t); gabedit_xyplot_get_range (GABEDIT_XYPLOT(xyplot), &xmin, &xmax, &ymin, &ymax); if(a>= xmax) { gchar* tmp = g_strdup_printf("%0.3f",xmin); gtk_entry_set_text(GTK_ENTRY(entry),tmp); g_free(tmp); return; } gabedit_xyplot_set_range_xmin (GABEDIT_XYPLOT(xyplot), a); gabedit_xyplot_refresh_dat(GABEDIT_XYPLOT(xyplot)); } /********************************************************************************/ static void activate_entry_xmax(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; gdouble a; GtkWidget* xyplot = NULL; gdouble xmin; gdouble ymin; gdouble xmax; gdouble ymax; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); a = atof(t); gabedit_xyplot_get_range (GABEDIT_XYPLOT(xyplot), &xmin, &xmax, &ymin, &ymax); if(a<=xmin) { gchar* tmp = g_strdup_printf("%0.3f",xmax); gtk_entry_set_text(GTK_ENTRY(entry),tmp); g_free(tmp); return; } gabedit_xyplot_set_range_xmax (GABEDIT_XYPLOT(xyplot), a); gabedit_xyplot_refresh_dat(GABEDIT_XYPLOT(xyplot)); } /********************************************************************************/ static void activate_entry_half_width(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; gdouble a; GtkWidget* xyplot = NULL; gdouble xmin; gdouble ymin; gdouble xmax; gdouble ymax; GList* data_list = NULL; GList* current = NULL; XYPlotWinData* data; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); a = atof(t); gabedit_xyplot_get_range (GABEDIT_XYPLOT(xyplot), &xmin, &xmax, &ymin, &ymax); if(a<= 0) { gchar* tmp = g_strdup_printf("%0.3f",fabs(xmax-xmin)/30); gtk_entry_set_text(GTK_ENTRY(entry),tmp); g_free(tmp); return; } data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); if(!data_list) return; current=g_list_first(data_list); for(; current != NULL; current = current->next) { data = (XYPlotWinData*)current->data; data->halfWidth = a; if(data->convType!=GABEDIT_CONV_TYPE_NONE) { build_data_xyplot(data); } } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /********************************************************************************/ static void activate_entry_scale_x(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; gdouble a; GtkWidget* xyplot = NULL; gdouble xmin; gdouble ymin; gdouble xmax; gdouble ymax; GList* data_list = NULL; GList* current = NULL; XYPlotWinData* data; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); a = atof(t); gabedit_xyplot_get_range (GABEDIT_XYPLOT(xyplot), &xmin, &xmax, &ymin, &ymax); if(a<= 0) { gchar* tmp = g_strdup_printf("%0.3f",1.0); gtk_entry_set_text(GTK_ENTRY(entry),tmp); g_free(tmp); return; } data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); if(!data_list) return; current=g_list_first(data_list); for(; current != NULL; current = current->next) { data = (XYPlotWinData*)current->data; data->scaleX = a; build_data_xyplot(data); } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /********************************************************************************/ static void activate_entry_scale_y(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; gdouble a; GtkWidget* xyplot = NULL; gdouble xmin; gdouble ymin; gdouble xmax; gdouble ymax; GList* data_list = NULL; GList* current = NULL; XYPlotWinData* data; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); a = atof(t); gabedit_xyplot_get_range (GABEDIT_XYPLOT(xyplot), &xmin, &xmax, &ymin, &ymax); if(a<= 0) { gchar* tmp = g_strdup_printf("%0.3f",1.0); gtk_entry_set_text(GTK_ENTRY(entry),tmp); g_free(tmp); return; } data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); if(!data_list) return; current=g_list_first(data_list); for(; current != NULL; current = current->next) { data = (XYPlotWinData*)current->data; data->scaleY = a; build_data_xyplot(data); } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /********************************************************************************/ static void activate_entry_shift_x(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; gdouble a; GtkWidget* xyplot = NULL; gdouble xmin; gdouble ymin; gdouble xmax; gdouble ymax; GList* data_list = NULL; GList* current = NULL; XYPlotWinData* data; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); a = atof(t); gabedit_xyplot_get_range (GABEDIT_XYPLOT(xyplot), &xmin, &xmax, &ymin, &ymax); data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); if(!data_list) return; current=g_list_first(data_list); for(; current != NULL; current = current->next) { data = (XYPlotWinData*)current->data; data->shiftX = a; build_data_xyplot(data); } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /*************************************************************************************/ static void gabedit_xyplot_autorange(GabeditXYPlot *xyplot) { GList* data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); GList* current = NULL; XYPlotWinData* data; GtkWidget *entry_half_width = g_object_get_data(G_OBJECT (xyplot), "EntryHalfWidth"); GtkWidget *entry_scale_x = g_object_get_data(G_OBJECT (xyplot), "EntryScaleX"); GtkWidget *entry_scale_y = g_object_get_data(G_OBJECT (xyplot), "EntryScaleY"); GtkWidget *entry_shift_x = g_object_get_data(G_OBJECT (xyplot), "EntryShiftX"); GtkWidget*entry_x_min = g_object_get_data(G_OBJECT (xyplot), "EntryXMin"); GtkWidget*entry_x_max = g_object_get_data(G_OBJECT (xyplot), "EntryXMax"); if(!data_list) return; current=g_list_first(data_list); if(!current) return; data = (XYPlotWinData*)current->data; if(data->dataCurve) gabedit_xyplot_set_autorange (xyplot, data->dataCurve); if(data->dataPeaks) gabedit_xyplot_set_autorange (xyplot, data->dataPeaks); if(data->convType!=GABEDIT_CONV_TYPE_NONE && (data->dataCurve ||data->dataPeaks )) { gchar tmp[100]; gabedit_xyplot_get_range (GABEDIT_XYPLOT(xyplot), &(data->xmin), &(data->xmax), &(data->ymin), &(data->ymax)); sprintf(tmp,"%0.3f",data->xmin); gtk_entry_set_text(GTK_ENTRY(entry_x_min),tmp); sprintf(tmp,"%0.3f",data->xmax); gtk_entry_set_text(GTK_ENTRY(entry_x_max),tmp); gabedit_xyplot_set_range_ymin (GABEDIT_XYPLOT(xyplot), data->ymin); gabedit_xyplot_set_range_ymin (GABEDIT_XYPLOT(xyplot), data->ymax); data->halfWidth = fabs(data->xmax-data->xmin)/30; build_data_xyplot(data); sprintf(tmp,"%0.3f",data->halfWidth); gtk_entry_set_text(GTK_ENTRY(entry_half_width),tmp); sprintf(tmp,"%0.3f",data->scaleX); gtk_entry_set_text(GTK_ENTRY(entry_scale_x),tmp); sprintf(tmp,"%0.3f",data->scaleY); gtk_entry_set_text(GTK_ENTRY(entry_scale_y),tmp); sprintf(tmp,"%0.3f",data->shiftX); gtk_entry_set_text(GTK_ENTRY(entry_shift_x),tmp); } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void spectrum_win_add_data(GtkWidget *winXYPlot, gint size, gdouble* x, gdouble* y) { GabeditXYPlot *xyplot = g_object_get_data(G_OBJECT (winXYPlot), "XYPLOT"); XYPlotWinData* winData = NULL; if(!xyplot || !G_IS_OBJECT(xyplot)) return; winData = get_win_data(xyplot, size, x, y); gabedit_xyplot_add_windata(xyplot, winData); gabedit_xyplot_refresh_dat(GABEDIT_XYPLOT(xyplot)); gabedit_xyplot_show_curve_peaks(GABEDIT_XYPLOT(xyplot)); } /****************************************************************************************/ void spectrum_win_autorange(GtkWidget *winXYPlot) { GabeditXYPlot *xyplot = g_object_get_data(G_OBJECT (winXYPlot), "XYPLOT"); if(!xyplot || !G_IS_OBJECT(xyplot)) return; gabedit_xyplot_autorange(xyplot); } /****************************************************************************************/ static void free_data(GtkWidget *window) { GtkWidget* xyplot = g_object_get_data(G_OBJECT (window), "XYPLOT"); GList* data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); GList* current = NULL; XYPlotWinData* data = NULL; if(!data_list) return; current=g_list_first(data_list); for(; current != NULL; current = current->next) { data = (XYPlotWinData*)current->data; if(data) { if(data->dataCurve) gabedit_xyplot_remove_data(GABEDIT_XYPLOT(xyplot), (gpointer)data->dataCurve); if(data->dataPeaks) gabedit_xyplot_remove_data(GABEDIT_XYPLOT(xyplot), (gpointer)data->dataPeaks); if(data->dataCurve && data->dataCurve->x) g_free(data->dataCurve->x); if(data->dataCurve && data->dataCurve->y) g_free(data->dataCurve->y); if(data->dataCurve) g_free(data->dataCurve); if(data->dataPeaks && data->dataPeaks->x) g_free(data->dataPeaks->x); if(data->dataPeaks && data->dataPeaks->y) g_free(data->dataPeaks->y); if(data->dataPeaks) g_free(data->dataPeaks); if(data->x) g_free(data->x); if(data->y) g_free(data->y); } g_free(data); } g_object_set_data(G_OBJECT (xyplot), "DataList",NULL); } /****************************************************************************************/ void spectrum_win_remove_data(GtkWidget *window) { free_data(window); } /****************************************************************************************/ static void destroy_spectrum_win(GtkWidget *window, gpointer data) { free_data(window); gtk_widget_destroy(window); } /****************************************************************************************/ GtkWidget* spectrum_win_new(gchar* title) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* table1 = NULL; GtkWidget* table2 = NULL; GtkWidget* frame_xyplot = NULL; GtkWidget* xyplot = NULL; GtkWidget* tmp_label = NULL; GtkWidget* vbox = NULL; GtkWidget* entry_x_min = NULL; GtkWidget* entry_x_max = NULL; GtkWidget *statusbar = NULL; GtkWidget *frame_set_data = NULL; GtkWidget *toggle_no_convolution = NULL; GtkWidget *toggle_lorentzian = NULL; GtkWidget *toggle_gaussian = NULL; GtkWidget *toggle_show_peaks = NULL; GtkWidget *toggle_ymax_to_one = NULL; GtkWidget *entry_half_width = NULL; GtkWidget *entry_scale_x = NULL; GtkWidget *entry_scale_y = NULL; GtkWidget *entry_shift_x = NULL; GtkWidget* hbox_data = NULL; GtkWidget* first_hbox = NULL; GList* data_list = NULL; gdouble xmin = 0; gdouble xmax = 10; gchar tmp[100]; gtk_window_set_title (GTK_WINDOW (window), title); gtk_signal_connect (GTK_OBJECT (window), "delete_event", G_CALLBACK (destroy_spectrum_win), NULL); gtk_container_set_border_width (GTK_CONTAINER (window), 10); table1=gtk_table_new(5, 3, FALSE); gtk_container_add(GTK_CONTAINER(window), table1); gtk_widget_show(table1); frame_xyplot=gtk_frame_new("XY GabeditPlot"); gtk_table_attach(GTK_TABLE(table1), frame_xyplot, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show(frame_xyplot); xyplot = gabedit_xyplot_new(); gtk_container_add(GTK_CONTAINER(frame_xyplot), xyplot); gtk_widget_show (xyplot); g_object_set_data (G_OBJECT (window), "XYPLOT",xyplot); frame_set_data=gtk_frame_new(_("Set data")); gtk_table_attach(GTK_TABLE(table1), frame_set_data, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 5); gtk_widget_show(frame_set_data); table2=gtk_table_new(2, 5, FALSE); gtk_container_add(GTK_CONTAINER(frame_set_data), table2); gtk_widget_show(table2); hbox_data = gtk_hbox_new(FALSE,2); gtk_table_attach(GTK_TABLE(table2), hbox_data, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(hbox_data); first_hbox = hbox_data; toggle_no_convolution = gtk_radio_button_new_with_label( NULL,_("No convolution")); gtk_box_pack_start(GTK_BOX(hbox_data), toggle_no_convolution, FALSE, FALSE, 2); gtk_widget_show(toggle_no_convolution); toggle_lorentzian = gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle_no_convolution)),_("Lorentzian lineshape") ); gtk_box_pack_start(GTK_BOX(hbox_data), toggle_lorentzian, FALSE, FALSE, 2); gtk_widget_show(toggle_lorentzian); toggle_gaussian = gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle_no_convolution)),_("Gaussian lineshape") ); gtk_box_pack_start(GTK_BOX(hbox_data), toggle_gaussian, FALSE, FALSE, 2); gtk_widget_show(toggle_gaussian); toggle_show_peaks = gtk_check_button_new_with_label(_("Show peaks")); gtk_box_pack_start(GTK_BOX(hbox_data), toggle_show_peaks, FALSE, FALSE, 2); gtk_widget_show(toggle_show_peaks); toggle_ymax_to_one = gtk_check_button_new_with_label(_("Set ymax=1")); gtk_box_pack_start(GTK_BOX(hbox_data), toggle_ymax_to_one, FALSE, FALSE, 2); gtk_widget_show(toggle_ymax_to_one); hbox_data = gtk_hbox_new(FALSE,2); gtk_table_attach(GTK_TABLE(table2), hbox_data, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(hbox_data); tmp_label=gtk_label_new(_("X Min: ")); gtk_box_pack_start(GTK_BOX(hbox_data), tmp_label, FALSE, FALSE, 2); gtk_widget_show(tmp_label); entry_x_min = gtk_entry_new(); gtk_widget_set_size_request(entry_x_min,50,-1); sprintf(tmp,"%0.3f",xmin); gtk_entry_set_text(GTK_ENTRY(entry_x_min),tmp); gtk_box_pack_start(GTK_BOX(hbox_data), entry_x_min, FALSE, FALSE, 2); gtk_widget_show(entry_x_min); tmp_label=gtk_label_new(_("X Max: ")); gtk_box_pack_start(GTK_BOX(hbox_data), tmp_label, FALSE, FALSE, 2); gtk_widget_show(tmp_label); entry_x_max = gtk_entry_new(); gtk_widget_set_size_request(entry_x_max,50,-1); sprintf(tmp,"%0.3f",xmax); gtk_entry_set_text(GTK_ENTRY(entry_x_max),tmp); gtk_box_pack_start(GTK_BOX(hbox_data), entry_x_max, FALSE, FALSE, 2); gtk_widget_show(entry_x_max); tmp_label=gtk_label_new(_("Half-Width : ")); gtk_box_pack_start(GTK_BOX(hbox_data), tmp_label, FALSE, FALSE, 2); gtk_widget_show(tmp_label); entry_half_width = gtk_entry_new(); gtk_widget_set_size_request(entry_half_width,50,-1); gtk_entry_set_text(GTK_ENTRY(entry_half_width),"0.25"); gtk_box_pack_start(GTK_BOX(hbox_data), entry_half_width, FALSE, FALSE, 2); gtk_widget_show(entry_half_width); tmp_label=gtk_label_new(_("Scale X : ")); gtk_box_pack_start(GTK_BOX(hbox_data), tmp_label, FALSE, FALSE, 2); gtk_widget_show(tmp_label); entry_scale_x = gtk_entry_new(); gtk_widget_set_size_request(entry_scale_x,50,-1); gtk_entry_set_text(GTK_ENTRY(entry_scale_x),"1.0"); gtk_box_pack_start(GTK_BOX(hbox_data), entry_scale_x, FALSE, FALSE, 2); gtk_widget_show(entry_scale_x); tmp_label=gtk_label_new(_("Scale Y : ")); gtk_box_pack_start(GTK_BOX(hbox_data), tmp_label, FALSE, FALSE, 2); gtk_widget_show(tmp_label); entry_scale_y = gtk_entry_new(); gtk_widget_set_size_request(entry_scale_y,50,-1); gtk_entry_set_text(GTK_ENTRY(entry_scale_y),"1.0"); gtk_box_pack_start(GTK_BOX(hbox_data), entry_scale_y, FALSE, FALSE, 2); gtk_widget_show(entry_scale_y); tmp_label=gtk_label_new(_("Shift X : ")); gtk_box_pack_start(GTK_BOX(hbox_data), tmp_label, FALSE, FALSE, 2); gtk_widget_show(tmp_label); entry_shift_x = gtk_entry_new(); gtk_widget_set_size_request(entry_shift_x,50,-1); gtk_entry_set_text(GTK_ENTRY(entry_shift_x),"0.0"); gtk_box_pack_start(GTK_BOX(hbox_data), entry_shift_x, FALSE, FALSE, 2); gtk_widget_show(entry_shift_x); g_object_set_data(G_OBJECT (xyplot), "DataList", data_list); statusbar=gtk_statusbar_new(); gtk_table_attach(GTK_TABLE(table1), statusbar, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show (statusbar); g_object_set_data(G_OBJECT (xyplot), "StatusBar", statusbar); vbox = gtk_vbox_new(FALSE,2); gtk_table_attach(GTK_TABLE(table1), vbox, 0, 1, 4, 5, GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(vbox); gabedit_xyplot_set_range(GABEDIT_XYPLOT(xyplot), 0.0, 10, 0, 20); gabedit_xyplot_set_x_legends_digits(GABEDIT_XYPLOT(xyplot), 5); gabedit_xyplot_set_y_legends_digits(GABEDIT_XYPLOT(xyplot), 5); g_signal_connect (G_OBJECT (entry_x_min), "activate", (GCallback)activate_entry_xmin, xyplot); g_signal_connect (G_OBJECT (entry_x_max), "activate", (GCallback)activate_entry_xmax, xyplot); g_signal_connect(G_OBJECT(toggle_no_convolution), "toggled", G_CALLBACK(toggle_no_convolution_toggled), xyplot); g_signal_connect(G_OBJECT(toggle_lorentzian), "toggled", G_CALLBACK(toggle_lorentzian_toggled), xyplot); g_signal_connect(G_OBJECT(toggle_gaussian), "toggled", G_CALLBACK(toggle_gaussian_toggled), xyplot); g_signal_connect (G_OBJECT (entry_half_width), "activate", (GCallback)activate_entry_half_width, xyplot); g_signal_connect (G_OBJECT (entry_scale_x), "activate", (GCallback)activate_entry_scale_x, xyplot); g_signal_connect (G_OBJECT (entry_scale_y), "activate", (GCallback)activate_entry_scale_y, xyplot); g_signal_connect (G_OBJECT (entry_shift_x), "activate", (GCallback)activate_entry_shift_x, xyplot); g_signal_connect(G_OBJECT(toggle_show_peaks), "toggled", G_CALLBACK(toggle_show_peaks_toggled), xyplot); g_signal_connect(G_OBJECT(toggle_ymax_to_one), "toggled", G_CALLBACK(toggle_ymax_to_one_toggled), xyplot); g_signal_connect_after(G_OBJECT(xyplot), "motion-notify-event", G_CALLBACK(xyplot_motion_notify_event), NULL); gtk_widget_show (window); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle_show_peaks), FALSE); toggle_show_peaks_toggled(GTK_TOGGLE_BUTTON(toggle_show_peaks), xyplot); g_object_set_data(G_OBJECT (xyplot), "EntryHalfWidth", entry_half_width); g_object_set_data(G_OBJECT (xyplot), "EntryScaleX", entry_scale_x); g_object_set_data(G_OBJECT (xyplot), "EntryScaleY", entry_scale_y); g_object_set_data(G_OBJECT (xyplot), "EntryShiftX", entry_shift_x); g_object_set_data(G_OBJECT (xyplot), "EntryXMin", entry_x_min); g_object_set_data(G_OBJECT (xyplot), "EntryXMax", entry_x_max); g_object_set_data(G_OBJECT (xyplot), "HBoxData", first_hbox); g_object_set_data(G_OBJECT (xyplot), "HBoxData2", hbox_data); g_object_set_data(G_OBJECT (xyplot), "VBox", vbox); g_object_set_data(G_OBJECT (xyplot), "Window", window); g_object_set_data(G_OBJECT (window), "HBoxData", first_hbox); g_object_set_data(G_OBJECT (window), "HBoxData2", hbox_data); g_object_set_data(G_OBJECT (window), "VBox", vbox); g_object_set_data(G_OBJECT (window), "NoConvolutionButton", toggle_no_convolution); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle_lorentzian), TRUE); toggle_lorentzian_toggled((GtkToggleButton*)toggle_lorentzian,xyplot); gabedit_xyplot_set_font (GABEDIT_XYPLOT(xyplot), "sans 10"); gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(Fenetre)); gabedit_xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_HMAJOR_GRID, FALSE); gabedit_xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_VMAJOR_GRID, FALSE); gabedit_xyplot_reflect_x (GABEDIT_XYPLOT(xyplot), FALSE); gabedit_xyplot_reflect_y (GABEDIT_XYPLOT(xyplot), FALSE); return window; } /****************************************************************************************/ void spectrum_win_relect_x(GtkWidget* winSpectrum, gboolean active) { GtkWidget* xyplot = g_object_get_data (G_OBJECT (winSpectrum), "XYPLOT"); gabedit_xyplot_reflect_x (GABEDIT_XYPLOT(xyplot), active); } /****************************************************************************************/ void spectrum_win_relect_y(GtkWidget* winSpectrum, gboolean active) { GtkWidget* xyplot = g_object_get_data (G_OBJECT (winSpectrum), "XYPLOT"); gabedit_xyplot_reflect_y (GABEDIT_XYPLOT(xyplot), active); } /****************************************************************************************/ void spectrum_win_set_half_width(GtkWidget* winSpectrum, gdouble value) { gchar tmp[100]; GtkWidget* xyplot = g_object_get_data (G_OBJECT (winSpectrum), "XYPLOT"); GtkWidget *entry_half_width = g_object_get_data(G_OBJECT (xyplot), "EntryHalfWidth"); sprintf(tmp,"%0.3f",value); gtk_entry_set_text(GTK_ENTRY(entry_half_width),tmp); activate_entry_half_width(entry_half_width, xyplot); } /****************************************************************************************/ void spectrum_win_set_xmin(GtkWidget* winSpectrum, gdouble value) { gchar tmp[100]; GtkWidget* xyplot = g_object_get_data (G_OBJECT (winSpectrum), "XYPLOT"); GtkWidget *entry_x_min = g_object_get_data(G_OBJECT (xyplot), "EntryXMin"); sprintf(tmp,"%0.3f",value); gtk_entry_set_text(GTK_ENTRY(entry_x_min),tmp); activate_entry_xmin(entry_x_min, xyplot); } /****************************************************************************************/ void spectrum_win_set_xmax(GtkWidget* winSpectrum, gdouble value) { gchar tmp[100]; GtkWidget* xyplot = g_object_get_data (G_OBJECT (winSpectrum), "XYPLOT"); GtkWidget *entry_x_max = g_object_get_data(G_OBJECT (xyplot), "EntryXMax"); sprintf(tmp,"%0.3f",value); gtk_entry_set_text(GTK_ENTRY(entry_x_max),tmp); activate_entry_xmax(entry_x_max, xyplot); } /****************************************************************************************/ void spectrum_win_set_ymin(GtkWidget* winSpectrum, gdouble value) { GtkWidget* xyplot = g_object_get_data (G_OBJECT (winSpectrum), "XYPLOT"); gabedit_xyplot_set_range_ymin (GABEDIT_XYPLOT(xyplot), value); } /****************************************************************************************/ void spectrum_win_set_ymax(GtkWidget* winSpectrum, gdouble value) { GtkWidget* xyplot = g_object_get_data (G_OBJECT (winSpectrum), "XYPLOT"); gabedit_xyplot_set_range_ymax (GABEDIT_XYPLOT(xyplot), value); } /****************************************************************************************/ void spectrum_win_set_xlabel(GtkWidget* winSpectrum, gchar* label) { GtkWidget* xyplot = g_object_get_data (G_OBJECT (winSpectrum), "XYPLOT"); if(!xyplot) printf("ERROR xyplot =0\n"); gabedit_xyplot_set_x_label (GABEDIT_XYPLOT(xyplot), label); } /****************************************************************************************/ void spectrum_win_set_ylabel(GtkWidget* winSpectrum, gchar* label) { GtkWidget* xyplot = g_object_get_data (G_OBJECT (winSpectrum), "XYPLOT"); gabedit_xyplot_set_y_label (GABEDIT_XYPLOT(xyplot), label); } /****************************************************************************************/ void spectrum_win_reset_ymin_ymax(GtkWidget *xyplot) { GList* data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); GList* current = NULL; XYPlotWinData* data = NULL; if(!data_list) return; current=g_list_first(data_list); if(current) data = (XYPlotWinData*)current->data; if(data && data->ymaxToOne) { gabedit_xyplot_set_range_ymin (GABEDIT_XYPLOT(xyplot), 0.0); gabedit_xyplot_set_range_ymax (GABEDIT_XYPLOT(xyplot), 1.0); } } /****************************************************************************************/ /* GtkWidget* spectrum_win_new_testing(gchar* title) { GtkWidget* window = spectrum_win_new(title); gint size = 20; gint i; gdouble x[20]; gdouble y[20]; for(i=0;i #include #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Files/FileChooser.h" #include "../Common/Windows.h" #include "../Utils/GabeditXYPlot.h" #include "../Display/Vibration.h" #include "SpectrumWin.h" /********************************************************************************/ static void check_microm_cmm1_toggled(GtkToggleButton *togglebutton, gpointer user_data) { GtkWidget* xyplot = NULL; GList* data_list = NULL; GList* current = NULL; XYPlotWinData* data; gboolean microm = FALSE; GtkWidget* window = NULL; gdouble xmax = 0; gdouble ymax = 0; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); if(!data_list) return; window = g_object_get_data(G_OBJECT (xyplot), "Window"); microm = gtk_toggle_button_get_active(togglebutton); current=g_list_first(data_list); for(; current != NULL; current = current->next) { gint loop; data = (XYPlotWinData*)current->data; for (loop=0; loopsize; loop++) { if(data->x[loop]!=0) { if(microm) data->x[loop]= 10000.0/data->x[loop]; else data->x[loop]= 10000.0/data->x[loop]; } else data->x[loop]= 1.0e-10; if(xmaxx[loop]) xmax = data->x[loop]; if(ymaxy[loop]) ymax = data->y[loop]; } } xmax = xmax*1.5; ymax = ymax*2.0; spectrum_win_set_xmin(window, 0.0); spectrum_win_set_xmax(window, xmax); spectrum_win_set_ymax(window, ymax); spectrum_win_set_half_width(window, fabs(xmax/50)); spectrum_win_reset_ymin_ymax(GTK_WIDGET(xyplot)); if(microm) spectrum_win_set_xlabel(window,"µm"); else spectrum_win_set_xlabel(window,"cm-1"); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /********************************************************************************/ static void reflectXY(GtkWidget *buttonReflect, gpointer user_data) { GtkWidget* xyplot = NULL; GList* data_list = NULL; GList* current = NULL; XYPlotWinData* data; gboolean microm = FALSE; GtkWidget* window = NULL; gdouble xmax = 0; gdouble ymax = 0; gboolean rx; gboolean ry; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); if(!data_list) return; window = g_object_get_data(G_OBJECT (xyplot), "Window"); gabedit_xyplot_get_reflects (GABEDIT_XYPLOT (xyplot),&rx, &ry); gabedit_xyplot_reflect_x (GABEDIT_XYPLOT(xyplot), !rx); gabedit_xyplot_reflect_y (GABEDIT_XYPLOT(xyplot), !ry); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /********************************************************************************/ static GtkWidget* createRamanSpectrumWin(gint numberOfFrequencies, gdouble* frequencies, gdouble* intensities) { GtkWidget* window = spectrum_win_new_with_xy(_("Raman spectrum"), numberOfFrequencies, frequencies, intensities); GtkWidget* hbox = g_object_get_data(G_OBJECT (window), "HBoxData"); GtkWidget* xyplot = g_object_get_data(G_OBJECT (window), "XYPLOT"); GtkWidget* check_microm_cmm1 = NULL; GtkWidget* tmp_hbox = NULL; GtkWidget* buttonReflect = NULL; spectrum_win_relect_x(window, TRUE); spectrum_win_relect_y(window, TRUE); spectrum_win_set_half_width(window, 20.0); spectrum_win_set_xmin(window, 0.0); set_icone(window); if(!hbox) return window; tmp_hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), tmp_hbox, FALSE, FALSE, 30); gtk_widget_show(tmp_hbox); check_microm_cmm1 = gtk_check_button_new_with_label("microm<=>cm-1"); gtk_box_pack_start(GTK_BOX(tmp_hbox), check_microm_cmm1, FALSE, FALSE, 4); gtk_widget_show(check_microm_cmm1); g_signal_connect(G_OBJECT(check_microm_cmm1), "toggled", G_CALLBACK(check_microm_cmm1_toggled), xyplot); gabedit_xyplot_set_x_label (GABEDIT_XYPLOT(xyplot), "cm-1"); g_signal_connect(G_OBJECT(check_microm_cmm1), "toggled", G_CALLBACK(check_microm_cmm1_toggled), xyplot); spectrum_win_set_xlabel(window, "cm-1"); buttonReflect = create_button(window,_("Reflect")); gtk_box_pack_start(GTK_BOX(tmp_hbox), buttonReflect, FALSE, FALSE, 4); g_signal_connect(G_OBJECT(buttonReflect), "clicked", G_CALLBACK(reflectXY), xyplot); gtk_widget_show(buttonReflect); return window; } /********************************************************************************/ static void messageErrorFreq(gchar* fileName) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not read frequencies from '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); } /********************************************************************************/ static void messageErrorInt(gchar* fileName) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not read frequencies from '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); } /********************************************************************************/ static gboolean read_gabedit_molden_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; gchar t[BSIZE]; gboolean OK; FILE *fd; gint i; gint ne; gint numberOfFrequencies = 0; gdouble* frequencies = NULL; gdouble* intensities = NULL; gdouble a; gdouble b; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); OK=FALSE; while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"[FREQ")) { OK = TRUE; break; } } if(!OK) { messageErrorFreq(FileName); if(fd) fclose(fd); return FALSE; } while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"[")) break; if(this_is_a_backspace(t)) break; ne = sscanf(t,"%lf",&a); if(ne != 1) { messageErrorFreq(FileName); if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); fclose(fd); return FALSE; } numberOfFrequencies++; frequencies = g_realloc(frequencies, numberOfFrequencies*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfFrequencies*sizeof(gdouble)); frequencies[numberOfFrequencies-1] = a; intensities[numberOfFrequencies-1] = 0; } if(numberOfFrequencies<1) { messageErrorFreq(FileName); if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); fclose(fd); return FALSE; } OK = FALSE; if(strstr(t,"[INT"))OK = TRUE; while(!feof(fd) && !OK) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"[INT")) { OK = TRUE; break; } } if(!OK) { messageErrorInt(FileName); if(fd) fclose(fd); return FALSE; } for(i=0;i0) { createRamanSpectrumWin(numberOfFrequencies, frequencies, intensities); } else { messageErrorFreq(FileName); } if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); fclose(fd); return TRUE; } /********************************************************************************/ static void read_gamess_file_dlg() { GtkWidget* filesel = file_chooser_open(read_gamess_file, _("Read last frequencies and intensities from a Gamess output file"), GABEDIT_TYPEFILE_GAMESS,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_gaussian_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gchar sdum1[BSIZE]; gchar sdum2[BSIZE]; gchar sdum3[BSIZE]; gboolean OK; gint nf; gint i; gdouble freq[3] = {0,0,0}; gdouble RamanIntensity[3] = {0,0,0}; gint numberOfFrequencies = 0; gdouble* frequencies = NULL; gdouble* intensities = NULL; gchar *FileName; FILE *fd; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; do { OK=FALSE; while(!feof(fd)) { if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} /* if ( strstr( t,"reduced masses") )*/ if ( strstr( t,"and normal coordinates:") ) { OK = TRUE; numberOfFrequencies = 0; break; } } while(!feof(fd) ) { if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} if(!strstr(t,"Frequencies --"))continue; if(this_is_a_backspace(t)) break; nf = sscanf(t,"%s %s %lf %lf %lf", sdum1,sdum2, &freq[0],&freq[1],&freq[2]); nf -=2; if(nf<=0 || nf>3) break; while(!feof(fd)) { if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} if(strstr(t,"Raman")) { sscanf(t,"%s %s %s %lf %lf %lf", sdum1,sdum2, sdum3, &RamanIntensity[0],&RamanIntensity[1],&RamanIntensity[2]); break; } } for(i=0;i0) { createRamanSpectrumWin(numberOfFrequencies, frequencies, intensities); } else { messageErrorFreq(FileName); } if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); fclose(fd); return TRUE; } /********************************************************************************/ static void read_gaussian_file_dlg() { GtkWidget* filesel = file_chooser_open(read_gaussian_file, _("Read last frequencies and intensities from a Gaussian output file"), GABEDIT_TYPEFILE_GAUSSIAN,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_adf_file(GabeditFileChooser *SelecFile, gint response_id) { return FALSE; } /********************************************************************************/ static void read_adf_file_dlg() { GtkWidget* filesel = file_chooser_open(read_adf_file, _("Read last frequencies and intensities from a ADF output file"), GABEDIT_TYPEFILE_MOLPRO,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_orca_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; gchar t[BSIZE]; gchar sdum1[BSIZE]; gboolean OK; FILE *fd; guint taille=BSIZE; gint n; gdouble freq = 0; gdouble RamanIntensity = 0; gint numberOfFrequencies = 0; gdouble *frequencies = NULL; gdouble *intensities = NULL; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; do { OK=FALSE; while(!feof(fd)) { if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} if (strstr( t,"RAMAN SPECTRUM") ) OK = TRUE; if (strstr( t,"Activity") && strstr( t,"Depolarization") && OK ){ OK = TRUE; break;} } if(!OK) break; numberOfFrequencies = 0; if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); frequencies = NULL; intensities = NULL; if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} while(!feof(fd) ) { if(!fgets(t,taille,fd)) break; if(atoi(t)<=0) break; n = sscanf(t,"%s %lf %lf", sdum1, &freq,&RamanIntensity); if(n==3) { numberOfFrequencies++; frequencies = g_realloc(frequencies, numberOfFrequencies*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfFrequencies*sizeof(gdouble)); frequencies[numberOfFrequencies-1] = freq; intensities[numberOfFrequencies-1] = RamanIntensity; } } }while(!feof(fd)); if(numberOfFrequencies>0) { createRamanSpectrumWin(numberOfFrequencies, frequencies, intensities); } else { messageErrorFreq(FileName); } if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); fclose(fd); return TRUE; } /********************************************************************************/ static void read_orca_file_dlg() { GtkWidget* filesel = file_chooser_open(read_orca_file, _("Read last frequencies and intensities from a Orca output file"), GABEDIT_TYPEFILE_QCHEM,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_sample_2columns_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gboolean OK = TRUE; gint numberOfFrequencies = 0; gdouble* frequencies = NULL; gdouble* intensities = NULL; gchar *FileName; FILE *fd; gdouble a; gdouble b; int ne = 0; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; while(!feof(fd)) { if(!fgets(t,BSIZE,fd))break; ne = sscanf(t,"%lf %lf",&a,&b); if(ne==2) { numberOfFrequencies++; frequencies = g_realloc(frequencies, numberOfFrequencies*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfFrequencies*sizeof(gdouble)); frequencies[numberOfFrequencies-1] = a; intensities[numberOfFrequencies-1] = b; } } if(numberOfFrequencies>0) { createRamanSpectrumWin(numberOfFrequencies, frequencies, intensities); } else { OK = FALSE; messageErrorFreq(FileName); } if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); fclose(fd); return OK; } /********************************************************************************/ static void read_sample_2columns_file_dlg() { GtkWidget* filesel = file_chooser_open(read_sample_2columns_file, _("Read frequencies and intensities from a sample file(2columns : first = Energy(cm-1), second = intensity)"), GABEDIT_TYPEFILE_TXT,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_qchem_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; gint i; gchar t[BSIZE]; gchar sdum1[BSIZE]; gchar sdum2[BSIZE]; gboolean OK; FILE *fd; guint taille=BSIZE; gint idum; gint nf; gdouble freq[3] = {0,0,0}; gdouble RamanIntensity[3] = {0,0,0}; gint numberOfFrequencies = 0; gdouble *frequencies = NULL; gdouble *intensities = NULL; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; do { OK=FALSE; while(!feof(fd)) { if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} if (strstr( t,"VIBRATIONAL ANALYSIS") ) OK = TRUE; if (strstr( t,"Mode:") && OK ){ OK = TRUE; break;} } if(!OK) break; while(!feof(fd) ) { if(!strstr(t,"Mode:")) break; nf = sscanf(t,"%s %d %d %d",sdum1,&idum,&idum,&idum); nf--; if(nf<0 || nf>3) break; if(!fgets(t,taille,fd)) break; sscanf(t,"%s %lf %lf %lf", sdum1, &freq[0],&freq[1],&freq[2]); while(!feof(fd)) { if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} if(strstr(t,"Raman Intens")) { sscanf(t,"%s %s %lf %lf %lf", sdum1,sdum2, &RamanIntensity[0],&RamanIntensity[1],&RamanIntensity[2]); break; } } for(i=0;i0) { createRamanSpectrumWin(numberOfFrequencies, frequencies, intensities); } else { messageErrorFreq(FileName); } if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); fclose(fd); return TRUE; } /********************************************************************************/ static void read_qchem_file_dlg() { GtkWidget* filesel = file_chooser_open(read_qchem_file, _("Read last frequencies and intensities from a Q-Chem output file"), GABEDIT_TYPEFILE_QCHEM,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ void createRamanSpectrum(GtkWidget *parentWindow, GabEditTypeFile typeOfFile) { if(typeOfFile==GABEDIT_TYPEFILE_GABEDIT) read_gabedit_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_DALTON) read_dalton_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_MOLDEN) read_molden_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_MOLPRO) read_molpro_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_ORCA) read_orca_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_GAMESS) read_gamess_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_FIREFLY) read_gamess_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_QCHEM) read_qchem_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_GAUSSIAN) read_gaussian_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_ADF) read_adf_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_MPQC) read_mpqc_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_TXT) read_sample_2columns_file_dlg(); } /********************************************************************************/ void createRamanSpectrumFromVibration(GtkWidget *parentWindow, Vibration ibration) { gint numberOfFrequencies = vibration.numberOfFrequencies; gdouble* frequencies = NULL; gdouble* intensities = NULL; gint j; if(numberOfFrequencies<1) { GtkWidget* mess=Message(_("Sorry, For draw spectrum, Please read a file before"),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (mess), TRUE); return; } frequencies = g_malloc(numberOfFrequencies*sizeof(gdouble)); intensities = g_malloc(numberOfFrequencies*sizeof(gdouble)); for (j=0; j < vibration.numberOfFrequencies; j++) { frequencies[j] = vibration.modes[j].frequence; intensities[j] = vibration.modes[j].RamanIntensity; } createRamanSpectrumWin(numberOfFrequencies, frequencies, intensities); if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); } GabeditSrc250/src/Spectrum/IRSpectrum.h0000644000175100017510000000062013130665225020270 0ustar alloucheallouche#ifndef __GABEDIT_IRSPECTRUM_H__ #define __GABEDIT_IRSPECTRUM_H__ #include "../Display/Vibration.h" void createIRSpectrum(GtkWidget *parentWindow, GabEditTypeFile typeOfFile); void createIRSpectrumFromVibration(GtkWidget *parentWindow, Vibration ibration); GtkWidget* createIRSpectrumWin(gint numberOfFrequencies, gdouble* frequencies, gdouble* intensities); #endif /* __GABEDIT_IRSPECTRUM_H__ */ GabeditSrc250/src/Spectrum/IRSpectrum.c0000644000175100017510000013106213130665225020270 0ustar alloucheallouche/* IRSpectrum.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Files/FileChooser.h" #include "../Common/Windows.h" #include "../Utils/GabeditXYPlot.h" #include "../Display/Vibration.h" #include "../Spectrum/SpectrumWin.h" #include "../Spectrum/IGVPT2Spectrum.h" /********************************************************************************/ static void check_microm_cmm1_toggled(GtkToggleButton *togglebutton, gpointer user_data) { GtkWidget* xyplot = NULL; GList* data_list = NULL; GList* current = NULL; XYPlotWinData* data; gboolean microm = FALSE; GtkWidget* window = NULL; gdouble xmax = 0; gdouble ymax = 0; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); if(!data_list) return; window = g_object_get_data(G_OBJECT (xyplot), "Window"); microm = gtk_toggle_button_get_active(togglebutton); current=g_list_first(data_list); for(; current != NULL; current = current->next) { gint loop; data = (XYPlotWinData*)current->data; for (loop=0; loopsize; loop++) { if(data->x[loop]!=0) { if(microm) data->x[loop]= 10000.0/data->x[loop]; else data->x[loop]= 10000.0/data->x[loop]; } else data->x[loop]= 1.0e-10; if(xmaxx[loop]) xmax = data->x[loop]; if(ymaxy[loop]) ymax = data->y[loop]; } } xmax = xmax*1.5; ymax = ymax*2.0; spectrum_win_set_xmin(window, 0.0); spectrum_win_set_xmax(window, xmax); spectrum_win_set_ymax(window, ymax); spectrum_win_set_half_width(window, fabs(xmax/50)); spectrum_win_reset_ymin_ymax(GTK_WIDGET(xyplot)); if(microm) { spectrum_win_set_xlabel(window, "µm"); } else spectrum_win_set_xlabel(window, "cm-1"); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /********************************************************************************/ static void reflectXY(GtkWidget *buttonReflect, gpointer user_data) { GtkWidget* xyplot = NULL; GList* data_list = NULL; GList* current = NULL; XYPlotWinData* data; gboolean microm = FALSE; gdouble xmax = 0; gdouble ymax = 0; gboolean rx; gboolean ry; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); if(!data_list) return; gabedit_xyplot_get_reflects (GABEDIT_XYPLOT (xyplot),&rx, &ry); gabedit_xyplot_reflect_x (GABEDIT_XYPLOT(xyplot), !rx); gabedit_xyplot_reflect_y (GABEDIT_XYPLOT(xyplot), !ry); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /********************************************************************************/ GtkWidget* createIRSpectrumWin(gint numberOfFrequencies, gdouble* frequencies, gdouble* intensities) { GtkWidget* window = spectrum_win_new_with_xy(_("IR spectrum"), numberOfFrequencies, frequencies, intensities); GtkWidget* hbox = g_object_get_data(G_OBJECT (window), "HBoxData"); GtkWidget* hbox2 = g_object_get_data(G_OBJECT (window), "HBoxData2"); GtkWidget* xyplot = g_object_get_data(G_OBJECT (window), "XYPLOT"); GtkWidget* check_microm_cmm1 = NULL; GtkWidget* tmp_hbox = NULL; GtkWidget* buttonReflect = NULL; spectrum_win_relect_x(window, TRUE); spectrum_win_relect_y(window, TRUE); spectrum_win_set_half_width(window, 20.0); spectrum_win_set_xmin(window, 0.0); set_icone(window); if(!hbox) return window; if(!hbox2) return window; tmp_hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), tmp_hbox, FALSE, FALSE, 30); gtk_widget_show(tmp_hbox); check_microm_cmm1 = gtk_check_button_new_with_label("microm<=>cm-1"); gtk_box_pack_start(GTK_BOX(tmp_hbox), check_microm_cmm1, FALSE, FALSE, 4); gtk_widget_show(check_microm_cmm1); g_signal_connect(G_OBJECT(check_microm_cmm1), "toggled", G_CALLBACK(check_microm_cmm1_toggled), xyplot); spectrum_win_set_xlabel(window, "cm-1"); tmp_hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox2), tmp_hbox, FALSE, FALSE, 30); gtk_widget_show(tmp_hbox); buttonReflect = create_button(window,_(" Reflect ")); gtk_box_pack_start(GTK_BOX(tmp_hbox), buttonReflect, FALSE, FALSE, 4); g_signal_connect(G_OBJECT(buttonReflect), "clicked", G_CALLBACK(reflectXY), xyplot); gtk_widget_show(buttonReflect); return window; } /********************************************************************************/ static void messageErrorFreq(gchar* fileName) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not read frequencies from '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); } /********************************************************************************/ static void messageErrorInt(gchar* fileName) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not read frequencies from '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); } /********************************************************************************/ static gboolean read_gabedit_molden_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; gchar t[BSIZE]; gboolean OK; FILE *fd; gint i; gint ne; gint numberOfFrequencies = 0; gdouble* frequencies = NULL; gdouble* intensities = NULL; gdouble a; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); OK=FALSE; while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"[FREQ")) { OK = TRUE; break; } } if(!OK) { messageErrorFreq(FileName); if(fd) fclose(fd); return FALSE; } while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"[")) break; if(this_is_a_backspace(t)) break; ne = sscanf(t,"%lf",&a); if(ne != 1) { messageErrorFreq(FileName); if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); fclose(fd); return FALSE; } numberOfFrequencies++; frequencies = g_realloc(frequencies, numberOfFrequencies*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfFrequencies*sizeof(gdouble)); frequencies[numberOfFrequencies-1] = a; intensities[numberOfFrequencies-1] = 0; } if(numberOfFrequencies<1) { messageErrorFreq(FileName); if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); fclose(fd); return FALSE; } OK = FALSE; if(strstr(t,"[INT"))OK = TRUE; while(!feof(fd) && !OK) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"[INT")) { OK = TRUE; break; } } if(!OK) { messageErrorInt(FileName); if(fd) fclose(fd); return FALSE; } for(i=0;i0) { createIRSpectrumWin(numberOfFrequencies, frequencies, intensities); } else { messageErrorFreq(FileName); if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); return FALSE; } if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); return TRUE; } /********************************************************************************/ static void read_molpro_file_dlg() { GtkWidget* filesel = file_chooser_open(read_molpro_file, _("Read frequencies and intensities from a Molpro output file"), GABEDIT_TYPEFILE_MOLPRO,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gint read_dalton_modes_MOLHES(FILE* fd, gchar *FileName) { gchar t[BSIZE]; gchar sdum1[100]; gchar sdum2[100]; gboolean OK; gint nf; gdouble freq; gint numMode; gchar sym[50]; gdouble IR = 0; gint numberOfFrequencies = 0; gdouble* frequencies = NULL; gdouble* intensities = NULL; OK=FALSE; while(!feof(fd)) { if(!fgets(t,BSIZE,fd))break; if ( strstr( t,"Vibrational Frequencies and IR Intensities") ) { OK = TRUE; break; } } if(!OK) { messageErrorFreq(FileName); if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); return 1; } OK=FALSE; while(!feof(fd)) { if(!fgets(t,BSIZE,fd))break; if ( strstr( t,"cm-1") && strstr( t,"hartrees") ) { if(!fgets(t,BSIZE,fd))break; OK = TRUE; break; } } if(!OK) { messageErrorFreq(FileName); if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); return 1; } while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) { messageErrorFreq(FileName); if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); return 2; } if(this_is_a_backspace(t)) continue; if(strstr(t,"Normal Coordinates")) break; nf = sscanf(t,"%d %s %s %s %s", &numMode, sym, sdum1,sdum2, sdum2); if(nf<3) { messageErrorFreq(FileName); if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); return 2; } if(strstr(sdum1,"i")) freq = -atof(sdum1); else freq = atof(sdum1); if(nf==5) IR = atof(sdum2); else IR = 0.0; numberOfFrequencies++; frequencies = g_realloc(frequencies, numberOfFrequencies*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfFrequencies*sizeof(gdouble)); frequencies[numberOfFrequencies-1] = freq; intensities[numberOfFrequencies-1] = IR; } if(numberOfFrequencies>0) { createIRSpectrumWin(numberOfFrequencies, frequencies, intensities); } else { messageErrorFreq(FileName); if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); } if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); return 0; } /********************************************************************************/ static gboolean read_dalton_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; FILE *fd; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); read_dalton_modes_MOLHES(fd, FileName); fclose(fd); return TRUE; } /********************************************************************************/ static void read_dalton_file_dlg() { GtkWidget* filesel = file_chooser_open(read_dalton_file, _("Read last frequencies and intensities from a Dalton output file"), GABEDIT_TYPEFILE_DALTON,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_gamess_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gboolean OK; gint i; gint nf; gint nir; gint nfMax = 5; gdouble freq[5]; gdouble ir[5]; gchar* sdum[5*2]; gchar* tmp; gint numberOfFrequencies = 0; gdouble* frequencies = NULL; gdouble* intensities = NULL; gchar *FileName; FILE *fd; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); OK=FALSE; while(!feof(fd)) { if(!fgets(t,BSIZE,fd))break; if ( strstr( t,"FREQUENCY:") ) { OK = TRUE; break; } } if(!OK) { messageErrorFreq(FileName); if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); return FALSE; } for(i=0;i0) { createIRSpectrumWin(numberOfFrequencies, frequencies, intensities); } else { messageErrorFreq(FileName); } if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); fclose(fd); return TRUE; } /********************************************************************************/ static void read_gamess_file_dlg() { GtkWidget* filesel = file_chooser_open(read_gamess_file, _("Read last frequencies and intensities from a Gamess output file"), GABEDIT_TYPEFILE_GAMESS,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_gamess_anharmonic_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gchar sdum1[BSIZE]; gchar sdum2[BSIZE]; gchar sdum3[BSIZE]; gint nf; gint i; gdouble freq[3] = {0,0,0}; gdouble IRIntensity[3] = {0,0,0}; gint numberOfFrequencies = 0; gdouble* frequencies = NULL; gdouble* intensities = NULL; gchar *FileName; FILE *fd; gchar** allreals = NULL; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; do { while(!feof(fd)) { if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} /* if ( strstr( t,"reduced masses") )*/ if ( strstr( t,"IR INTENSITIES ARE CALCULATED USING DIPOLE MOMENTS") ) { if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);}/* MODE FREQUENCY, CM-1 INTENSITY, KM/MOL */ numberOfFrequencies = 0; break; } } while(!feof(fd) ) { gint k; if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} if(strstr(t,"FINISHED")) break; if(this_is_a_backspace(t)) break; allreals =gab_split (t); k = 0; while(allreals && allreals[k]) k++; if(k==3) { numberOfFrequencies++; frequencies = g_realloc(frequencies, numberOfFrequencies*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfFrequencies*sizeof(gdouble)); frequencies[numberOfFrequencies-1] = atof(allreals[1]); intensities[numberOfFrequencies-1] = atof(allreals[2]); } g_strfreev(allreals); allreals = NULL; } }while(!feof(fd)); if(numberOfFrequencies>0) { createIRSpectrumWin(numberOfFrequencies, frequencies, intensities); } else { messageErrorFreq(FileName); } if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); fclose(fd); return TRUE; } /********************************************************************************/ static void read_gamess_anharmonic_file_dlg() { GtkWidget* filesel = file_chooser_open(read_gamess_anharmonic_file, _("Read last Anharmonic Infrared spectrum from a GAMESS output file"), GABEDIT_TYPEFILE_GAUSSIAN,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_gaussian_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gchar sdum1[BSIZE]; gchar sdum2[BSIZE]; gchar sdum3[BSIZE]; gint nf; gint i; gdouble freq[3] = {0,0,0}; gdouble IRIntensity[3] = {0,0,0}; gint numberOfFrequencies = 0; gdouble* frequencies = NULL; gdouble* intensities = NULL; gchar *FileName; FILE *fd; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; do { while(!feof(fd)) { if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} /* if ( strstr( t,"reduced masses") )*/ if ( strstr( t,"and normal coordinates:") ) { numberOfFrequencies = 0; break; } } while(!feof(fd) ) { if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} if(!strstr(t,"Frequencies --"))continue; if(this_is_a_backspace(t)) break; nf = sscanf(t,"%s %s %lf %lf %lf", sdum1,sdum2, &freq[0],&freq[1],&freq[2]); nf -=2; if(nf<=0 || nf>3) break; while(!feof(fd)) { if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} if(strstr(t,"IR Inten")) { sscanf(t,"%s %s %s %lf %lf %lf", sdum1,sdum2, sdum3, &IRIntensity[0],&IRIntensity[1],&IRIntensity[2]); break; } } for(i=0;i0) { createIRSpectrumWin(numberOfFrequencies, frequencies, intensities); } else { messageErrorFreq(FileName); } if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); fclose(fd); return TRUE; } /********************************************************************************/ static void read_gaussian_file_dlg() { GtkWidget* filesel = file_chooser_open(read_gaussian_file, _("Read last frequencies and intensities from a Gaussian output file"), GABEDIT_TYPEFILE_GAUSSIAN,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_gaussian_anharmonic_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gchar sdum1[BSIZE]; gchar sdum2[BSIZE]; gchar sdum3[BSIZE]; gint nf; gint i; gdouble freq[3] = {0,0,0}; gdouble IRIntensity[3] = {0,0,0}; gint numberOfFrequencies = 0; gdouble* frequencies = NULL; gdouble* intensities = NULL; gchar *FileName; FILE *fd; gchar** allreals = NULL; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; do { while(!feof(fd)) { if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} /* if ( strstr( t,"reduced masses") )*/ if ( strstr( t,"Anharmonic Infrared Spectroscopy") ) { numberOfFrequencies = 0; break; } } while(!feof(fd) ) { gboolean fundamental = FALSE; gboolean overtones = FALSE; gboolean combination = FALSE; while(!feof(fd)) { if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} /* if ( strstr( t,"reduced masses") )*/ if ( strstr( t,"Fundamental Bands") ) { fundamental = TRUE; overtones = FALSE; combination = FALSE; if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);}/* ----- */ if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} /* Mode(Quanta) */ break; } if ( strstr( t,"Overtones") ) { fundamental = FALSE; overtones = TRUE; combination = FALSE; if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} break; } if ( strstr( t,"Combination Bands") ) { fundamental = FALSE; overtones = FALSE; combination = TRUE; if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} break; } } while(!feof(fd)) { gint k; if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} if(strstr(t,"Leave")) break; if(this_is_a_backspace(t)) break; allreals =gab_split (t); k = 0; while(allreals && allreals[k]) k++; if(k==5 && fundamental) { numberOfFrequencies++; frequencies = g_realloc(frequencies, numberOfFrequencies*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfFrequencies*sizeof(gdouble)); frequencies[numberOfFrequencies-1] = atof(allreals[2]); intensities[numberOfFrequencies-1] = atof(allreals[4]); } if(k==4 && overtones) { numberOfFrequencies++; frequencies = g_realloc(frequencies, numberOfFrequencies*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfFrequencies*sizeof(gdouble)); frequencies[numberOfFrequencies-1] = atof(allreals[2]); intensities[numberOfFrequencies-1] = atof(allreals[3]); } if(k==5 && combination) { numberOfFrequencies++; frequencies = g_realloc(frequencies, numberOfFrequencies*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfFrequencies*sizeof(gdouble)); frequencies[numberOfFrequencies-1] = atof(allreals[3]); intensities[numberOfFrequencies-1] = atof(allreals[4]); } g_strfreev(allreals); allreals = NULL; } if(strstr(t,"Leave")) break; if(combination) break; } }while(!feof(fd)); if(numberOfFrequencies>0) { createIRSpectrumWin(numberOfFrequencies, frequencies, intensities); } else { messageErrorFreq(FileName); } if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); fclose(fd); return TRUE; } /********************************************************************************/ static void read_gaussian_anharmonic_file_dlg() { GtkWidget* filesel = file_chooser_open(read_gaussian_anharmonic_file, _("Read last Anharmonic Infrared spectrum from a Gaussian output file"), GABEDIT_TYPEFILE_GAUSSIAN,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_qchem_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; gint i; gchar t[BSIZE]; gchar sdum1[BSIZE]; gchar sdum2[BSIZE]; gboolean OK; FILE *fd; guint taille=BSIZE; gint idum; gint nf; gdouble freq[3] = {0,0,0}; gdouble IRIntensity[3] = {0,0,0}; gint numberOfFrequencies = 0; gdouble *frequencies = NULL; gdouble *intensities = NULL; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; do { OK=FALSE; while(!feof(fd)) { if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} if (strstr( t,"VIBRATIONAL ANALYSIS") ) OK = TRUE; if (strstr( t,"Mode:") && OK ){ OK = TRUE; break;} } if(!OK) break; while(!feof(fd) ) { if(!strstr(t,"Mode:")) break; nf = sscanf(t,"%s %d %d %d",sdum1,&idum,&idum,&idum); nf--; if(nf<0 || nf>3) break; if(!fgets(t,taille,fd)) break; sscanf(t,"%s %lf %lf %lf", sdum1, &freq[0],&freq[1],&freq[2]); while(!feof(fd)) { if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} if(strstr(t,"IR Intens:")) { sscanf(t,"%s %s %lf %lf %lf", sdum1,sdum2, &IRIntensity[0],&IRIntensity[1],&IRIntensity[2]); break; } } for(i=0;i0) { createIRSpectrumWin(numberOfFrequencies, frequencies, intensities); } else { messageErrorFreq(FileName); } if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); fclose(fd); return TRUE; } /********************************************************************************/ static void read_qchem_file_dlg() { GtkWidget* filesel = file_chooser_open(read_qchem_file, _("Read last frequencies and intensities from a Q-Chem output file"), GABEDIT_TYPEFILE_QCHEM,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_nwchem_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; gchar t[BSIZE]; gchar sdum1[BSIZE]; gboolean OK; FILE *fd; guint taille=BSIZE; gint numberOfFrequencies = 0; gdouble *frequencies = NULL; gdouble *intensities = NULL; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; do { OK=FALSE; while(!feof(fd) ) { if(!fgets(t,taille,fd)) break; if(strstr(t,"Projected Infra Red Intensities")) { numberOfFrequencies = 0; if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); frequencies = NULL; intensities = NULL; if(!fgets(t,taille,fd)) break; if(!fgets(t,taille,fd)) break; while(!feof(fd) ) { if(!fgets(t,taille,fd)) break; if(strstr(t,"---------"))break; numberOfFrequencies++; frequencies = g_realloc(frequencies, numberOfFrequencies*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfFrequencies*sizeof(gdouble)); sscanf(t,"%s %lf %s %s %s %lf", sdum1,&frequencies[numberOfFrequencies-1],sdum1,sdum1,sdum1, &intensities[numberOfFrequencies-1]); } OK = TRUE; } } if(!OK) break; }while(!feof(fd)); if(numberOfFrequencies>0) { createIRSpectrumWin(numberOfFrequencies, frequencies, intensities); } else { messageErrorFreq(FileName); } if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); fclose(fd); return TRUE; } /********************************************************************************/ static void read_nwchem_file_dlg() { GtkWidget* filesel = file_chooser_open(read_nwchem_file, _("Read last frequencies and intensities from a NWChem output file"), GABEDIT_TYPEFILE_NWCHEM,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_psicode_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; gchar t[BSIZE]; gchar sdum1[BSIZE]; gboolean OK; FILE *fd; guint taille=BSIZE; gint numberOfFrequencies = 0; gdouble *frequencies = NULL; gdouble *intensities = NULL; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; do { OK=FALSE; while(!feof(fd) ) { if(!fgets(t,taille,fd)) break; if(strstr(t,"Projected Infra Red Intensities")) { numberOfFrequencies = 0; if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); frequencies = NULL; intensities = NULL; if(!fgets(t,taille,fd)) break; if(!fgets(t,taille,fd)) break; while(!feof(fd) ) { if(!fgets(t,taille,fd)) break; if(strstr(t,"---------"))break; numberOfFrequencies++; frequencies = g_realloc(frequencies, numberOfFrequencies*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfFrequencies*sizeof(gdouble)); sscanf(t,"%s %lf %s %s %s %lf", sdum1,&frequencies[numberOfFrequencies-1],sdum1,sdum1,sdum1, &intensities[numberOfFrequencies-1]); } OK = TRUE; } } if(!OK) break; }while(!feof(fd)); if(numberOfFrequencies>0) { createIRSpectrumWin(numberOfFrequencies, frequencies, intensities); } else { messageErrorFreq(FileName); } if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); fclose(fd); return TRUE; } /********************************************************************************/ static void read_psicode_file_dlg() { GtkWidget* filesel = file_chooser_open(read_psicode_file, _("Read last frequencies and intensities from a Psicode output file"), GABEDIT_TYPEFILE_PSICODE,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_adf_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gchar sdum1[BSIZE]; gchar sdum2[BSIZE]; gchar sdum3[BSIZE]; gboolean OK; guint taille=BSIZE; gint i; gint k; gint ne; gint nf; gdouble freq[5]; gint numberOfFrequencies = 0; gdouble* frequencies = NULL; gdouble* intensities = NULL; gdouble a1,b1,c1,a2,b2,c2,a3,b3,c3; gchar *FileName; FILE *fd; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) { messageErrorFreq(FileName); if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); return FALSE; } OK=FALSE; while(!feof(fd)) { if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} /* printf("%s",t);*/ if ( strstr( t,"Vibrations and Normal Modes") ) { OK = TRUE; break; } } if(OK) { OK=FALSE; if(fgets(t,taille,fd)) if(fgets(t,taille,fd)) if(fgets(t,taille,fd)) if(fgets(t,taille,fd)) OK = TRUE; } if(!OK) { messageErrorFreq(FileName); if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); return FALSE; } numberOfFrequencies = 0; while(!feof(fd)) { if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} if(!fgets(t,taille,fd)) { messageErrorFreq(FileName); if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); return FALSE; } nf = sscanf(t,"%s %lf %lf %lf", sdum1, &freq[0],&freq[1],&freq[2]); nf -= 1; if(nf<1) break; if(!fgets(t,taille,fd)) break; for(k=0;k0 && OK) { createIRSpectrumWin(numberOfFrequencies, frequencies, intensities); } else { messageErrorFreq(FileName); if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); return FALSE; } if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); return TRUE; } /********************************************************************************/ static void read_adf_file_dlg() { GtkWidget* filesel = file_chooser_open(read_adf_file, _("Read last frequencies and intensities from a ADF output file"), GABEDIT_TYPEFILE_MOLPRO,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_orca_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; gchar t[BSIZE]; gchar sdum1[BSIZE]; gboolean OK; FILE *fd; guint taille=BSIZE; gint n; gdouble freq = 0; gdouble IRIntensity = 0; gint numberOfFrequencies = 0; gdouble *frequencies = NULL; gdouble *intensities = NULL; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; do { OK=FALSE; while(!feof(fd)) { if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} if (strstr( t,"IR SPECTRUM") ) OK = TRUE; if (strstr( t,"TX") && strstr( t,"TY") && strstr( t,"TZ") && OK ){ OK = TRUE; break;} } if(!OK) break; numberOfFrequencies = 0; if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); frequencies = NULL; intensities = NULL; if(!feof(fd)) { char* e = fgets(t,BSIZE,fd);} while(!feof(fd) ) { if(!fgets(t,taille,fd)) break; if(atoi(t)<=0) break; n = sscanf(t,"%s %lf %lf", sdum1, &freq,&IRIntensity); if(n==3) { numberOfFrequencies++; frequencies = g_realloc(frequencies, numberOfFrequencies*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfFrequencies*sizeof(gdouble)); frequencies[numberOfFrequencies-1] = freq; intensities[numberOfFrequencies-1] = IRIntensity; } } }while(!feof(fd)); if(numberOfFrequencies>0) { createIRSpectrumWin(numberOfFrequencies, frequencies, intensities); } else { messageErrorFreq(FileName); } if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); fclose(fd); return TRUE; } /********************************************************************************/ static void read_orca_file_dlg() { GtkWidget* filesel = file_chooser_open(read_orca_file, _("Read last frequencies and intensities from a Orca output file"), GABEDIT_TYPEFILE_ORCA,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_sample_2columns_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gboolean OK = TRUE; gint numberOfFrequencies = 0; gdouble* frequencies = NULL; gdouble* intensities = NULL; gchar *FileName; FILE *fd; gdouble a; gdouble b; int ne = 0; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; while(!feof(fd)) { if(!fgets(t,BSIZE,fd))break; ne = sscanf(t,"%lf %lf",&a,&b); if(ne==2) { numberOfFrequencies++; frequencies = g_realloc(frequencies, numberOfFrequencies*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfFrequencies*sizeof(gdouble)); frequencies[numberOfFrequencies-1] = a; intensities[numberOfFrequencies-1] = b; } } if(numberOfFrequencies>0) { createIRSpectrumWin(numberOfFrequencies, frequencies, intensities); } else { OK = FALSE; messageErrorFreq(FileName); } if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); fclose(fd); return OK; } /********************************************************************************/ static void read_sample_2columns_file_dlg() { GtkWidget* filesel = file_chooser_open(read_sample_2columns_file, _("Read frequencies and intensities from a sample file(2columns : first = Energy(cm-1), second = intensity)"), GABEDIT_TYPEFILE_TXT,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_igvpt2_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gboolean OK = TRUE; gint numberOfFrequencies = 0; gdouble* frequencies = NULL; gdouble* intensities = NULL; gchar *fileName; gdouble a; gdouble b; int ne = 0; FILE* file; gchar* result; gchar* old; if(response_id != GTK_RESPONSE_OK) return FALSE; fileName = gabedit_file_chooser_get_current_file(SelecFile); file = fopen(fileName, "r"); if(file) { gchar* t = g_malloc(BSIZE*sizeof(gchar)); result = g_strdup_printf("%s",""); while(!feof(file)) { if(!fgets(t,BSIZE,file))break; old = result; result = g_strdup_printf("%s%s",old,t); if(old) g_free(old); } if(result) { GtkWidget* message = AnharmonicResultTxt(result,"iGVPT2 result"); gtk_window_set_default_size (GTK_WINDOW(message),(gint)(ScreenWidth*0.8),-1); gtk_widget_set_size_request(message,(gint)(ScreenWidth*0.45),-1); /* gtk_window_set_modal (GTK_WINDOW (message), TRUE);*/ /* gtk_window_set_transient_for(GTK_WINDOW(message),GTK_WINDOW(PrincipalWindow));*/ } fclose(file); g_free(t); } return OK; } /********************************************************************************/ static void read_igvpt2_file_dlg() { GtkWidget* filesel = file_chooser_open(read_igvpt2_file, _("Read frequencies and intensities from an iGVPT2 output file"), GABEDIT_TYPEFILE_ORCA,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ void createIRSpectrum(GtkWidget *parentWindow, GabEditTypeFile typeOfFile) { if(typeOfFile==GABEDIT_TYPEFILE_GABEDIT) read_gabedit_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_MOLDEN) read_molden_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_MOLPRO) read_molpro_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_DALTON) read_dalton_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_GAMESS) read_gamess_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_GAMESS_ANHARMONIC) read_gamess_anharmonic_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_ORCA) read_orca_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_FIREFLY) read_gamess_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_GAUSSIAN) read_gaussian_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_GAUSSIAN_ANHARMONIC) read_gaussian_anharmonic_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_NWCHEM) read_nwchem_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_PSICODE) read_psicode_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_QCHEM) read_qchem_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_ADF) read_adf_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_MPQC) read_mpqc_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_TXT) read_sample_2columns_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_IGVPT2) read_igvpt2_file_dlg(); } /********************************************************************************/ void createIRSpectrumFromVibration(GtkWidget *parentWindow, Vibration ibration) { gint numberOfFrequencies = vibration.numberOfFrequencies; gdouble* frequencies = NULL; gdouble* intensities = NULL; gint j; if(numberOfFrequencies<1) { GtkWidget* mess=Message(_("For draw spectrum,Sorry, Please read a file before"),_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (mess), TRUE); return; } frequencies = g_malloc(numberOfFrequencies*sizeof(gdouble)); intensities = g_malloc(numberOfFrequencies*sizeof(gdouble)); for (j=0; j < vibration.numberOfFrequencies; j++) { frequencies[j] = vibration.modes[j].frequence; intensities[j] = vibration.modes[j].IRIntensity; } createIRSpectrumWin(numberOfFrequencies, frequencies, intensities); if(frequencies) g_free(frequencies); if(intensities) g_free(intensities); } GabeditSrc250/src/Spectrum/DOS.h0000644000175100017510000000044213130665225016662 0ustar alloucheallouche #ifndef __GABEDIT_DOSSPECTRUM_H__ #define __GABEDIT_DOSSPECTRUM_H__ void createDOSSpectrum(GtkWidget *parentWindow, GabEditTypeFile typeOfFile); void createDOSSpectrumFromEnergiesTable(GtkWidget *parentWindow, gdouble* auEnergies, gint nEnergies); #endif /* __GABEDIT_DOSSPECTRUM_H__ */ GabeditSrc250/src/Spectrum/IGVPT2Spectrum.h0000644000175100017510000000034013130665225020730 0ustar alloucheallouche #ifndef __GABEDIT_IGVPT2SPECTRUM_H__ #define __GABEDIT_IGVPT2SPECTRUM_H__ GtkWidget* AnharmonicResultTxt(gchar *message,gchar *title); void create_igvpt2_file_dlg(gboolean run); #endif /* __GABEDIT_IGVPT2SPECTRUM_H__ */ GabeditSrc250/src/Spectrum/NMRSpectrum.h0000644000175100017510000000041113130665225020410 0ustar alloucheallouche #ifndef __GABEDIT_NMRSPECTRUM_H__ #define __GABEDIT_NMRSPECTRUM_H__ void createNMRSpectrum(GtkWidget *parentWindow, GabEditTypeFile typeOfFile); void createNMR2Spectrum(GtkWidget *parentWindow, GabEditTypeFile typeOfFile); #endif /* __GABEDIT_NMRSPECTRUM_H__ */ GabeditSrc250/src/Spectrum/IGVPT2Spectrum.c0000644000175100017510000006405413130665225020737 0ustar alloucheallouche/* IRSpectrum.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Files/FileChooser.h" #include "../Common/Windows.h" #include "../Utils/GabeditXYPlot.h" #include "../Display/Vibration.h" #include "../Spectrum/IRSpectrum.h" #include "../Spectrum/SpectrumWin.h" #include "../Utils/GabeditTextEdit.h" /********************************************************************************/ static gchar* searchPosTxt(gchar* str, gchar* tag, gint num, gint numCols[]) { gchar* t1=NULL; gchar* t2=NULL; gint i; gdouble dum1; gdouble dum2; gint nR = 0; gint nM=0; gchar tmp[7][50]; gint nc; for(i=0;i<4;i++) numCols[i] = -1; t1 = strstr(str,tag); for(i=1;i0) { fundF = g_malloc(nFund*sizeof(gdouble)); fundI = g_malloc(nFund*sizeof(gdouble)); getValuesOneColInBlock(tFund, numCols[2], fundF); getValuesOneColInBlock(tFund, numCols[3], fundI); } tOver = searchPosTxt(str, "Overtones",2, numCols); nOver = getNumberOfLinesInBlock(tOver); if(nOver>0) { overF = g_malloc(nOver*sizeof(gdouble)); overI = g_malloc(nOver*sizeof(gdouble)); getValuesOneColInBlock(tOver, numCols[2], overF); getValuesOneColInBlock(tOver, numCols[3], overI); } tComb = searchPosTxt(str, "Combination Bands",2, numCols); nComb = getNumberOfLinesInBlock(tComb); if(nComb>0) { combF = g_malloc(nComb*sizeof(gdouble)); combI = g_malloc(nComb*sizeof(gdouble)); getValuesOneColInBlock(tComb, numCols[2], overF); getValuesOneColInBlock(tComb, numCols[3], overI); } /* printf("nFund = %d\n",nFund); printf("nOver = %d\n",nOver); printf("nComb = %d\n",nComb); */ nFreqs = nFund + nOver + nComb; if(nFreqs>0) { freqs = g_malloc(nFreqs*sizeof(gdouble)); intensities = g_malloc(nFreqs*sizeof(gdouble)); } k = 0; for(i=0;i0) { fundF = g_malloc(n*sizeof(gdouble)); fundI = g_malloc(n*sizeof(gdouble)); getValuesOneColInBlock(t2, numCols[2], fundF); getValuesOneColInBlock(t2, numCols[3], fundI); createIRSpectrumWin(n, fundF, fundI); } if(fundF) g_free(fundF); if(fundI) g_free(fundI); } /********************************************************************************/ void applyHarmonic(GtkWidget *dlgWin, gchar *data) { GtkWidget *text = (GtkWidget*)g_object_get_data(G_OBJECT(dlgWin),"TxtWidget"); GtkTextBuffer *buffer; GtkTextIter start; GtkTextIter end; GtkTextIter iterStart; GtkTextIter iterEnd; gchar* str; gchar* t1=NULL; gchar* t2=NULL; gchar* t3=NULL; gdouble* fundF = NULL; gdouble* fundI = NULL; gint i; gint n; gint numCols[4]; if(!GTK_IS_TEXT_VIEW (text)) return; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); gtk_text_buffer_get_bounds (buffer, &start, &end); iterStart = start; iterEnd = end; str = gtk_text_iter_get_text(&iterStart, &iterEnd); t2 = searchPosTxt(str, "Fundamental",2, numCols); n = getNumberOfLinesInBlock(t2); if(n>0) { fundF = g_malloc(n*sizeof(gdouble)); fundI = g_malloc(n*sizeof(gdouble)); getValuesOneColInBlock(t2, numCols[0], fundF); getValuesOneColInBlock(t2, numCols[1], fundI); createIRSpectrumWin(n, fundF, fundI); } if(fundF) g_free(fundF); if(fundI) g_free(fundI); } /********************************************************************************/ GtkWidget* AnharmonicResultTxt(gchar *message,gchar *title) { GtkWidget *dlgWin = NULL; GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *txtWid; GtkWidget *button; dlgWin = gtk_dialog_new(); gtk_widget_realize(GTK_WIDGET(dlgWin)); gtk_window_set_title(GTK_WINDOW(dlgWin),title); gtk_window_set_transient_for(GTK_WINDOW(dlgWin),GTK_WINDOW(Fenetre)); gtk_window_set_position(GTK_WINDOW(dlgWin),GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(dlgWin), "delete_event", (GCallback)destroy_button_windows, NULL); g_signal_connect(G_OBJECT(dlgWin), "delete_event", (GCallback)gtk_widget_destroy, NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(dlgWin)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); txtWid = create_text_widget(vboxframe,NULL,&frame); if(message) { gabedit_text_insert (GABEDIT_TEXT(txtWid), NULL, NULL, NULL,message,-1); gtk_text_view_set_editable((GtkTextView *)txtWid, TRUE); } gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), FALSE); button = create_button(dlgWin,_("Harmonic spectrum")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)applyHarmonic, GTK_OBJECT(dlgWin)); button = create_button(dlgWin,_("Anharmonic spectrum/Fundamentals")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)applyAnharmonic, GTK_OBJECT(dlgWin)); button = create_button(dlgWin,_("Anharmonic spectrum/All")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)applyAnharmonicAll, GTK_OBJECT(dlgWin)); button = create_button(dlgWin,_("Close")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)destroy_button_windows, GTK_OBJECT(dlgWin)); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(dlgWin)); add_button_windows(title,dlgWin); gtk_window_set_default_size (GTK_WINDOW(dlgWin), (gint)(ScreenHeight*0.4), (gint)(ScreenHeight*0.4)); gtk_widget_show_all(dlgWin); g_object_set_data(G_OBJECT (dlgWin), "TxtWidget", txtWid); return dlgWin; } /********************************************************************************/ static void save_igvpt2(gchar* fileNameBas, FILE* file, G_CONST_RETURN gchar* keys, G_CONST_RETURN gchar* harmonicFileName) { fprintf(file,"%s\n",keys); fprintf(file,"Geometry\n"); fprintf(file,"%s\n", harmonicFileName); fprintf(file,"\n"); } /********************************************************************************/ static void save_igvpt2_win(GtkWidget* Win, gpointer data) { gint i; gint j; gchar* fileName = NULL; FILE* file; GtkWidget* buttonDirSelector = (GtkWidget*)g_object_get_data(G_OBJECT(Win), "ButtonDirSelector"); GtkWidget* entryFileName = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"EntryFileName")); GtkWidget* entryHarmonicFileName = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"EntryHarmonicFileName")); GtkWidget* comboModel = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"ComboModel")); GtkWidget* entryModel = NULL; G_CONST_RETURN gchar* fileNameStr = NULL; G_CONST_RETURN gchar* dirNameStr = NULL; G_CONST_RETURN gchar* modelStr = NULL; gchar* allKeys = NULL; gchar* fileNameBas = NULL; G_CONST_RETURN gchar* harmonicFileName = NULL; if(buttonDirSelector) dirNameStr = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); if(entryHarmonicFileName) harmonicFileName = gtk_entry_get_text (GTK_ENTRY(entryHarmonicFileName)); if(!dirNameStr) return; if(entryFileName) fileNameStr = gtk_entry_get_text(GTK_ENTRY(entryFileName)); printf("fileName = %s\n", fileNameStr); if(!fileNameStr) return; if(!comboModel) printf("!comboModel\n"); if(!comboModel) return; entryModel = (GtkWidget*)(g_object_get_data(G_OBJECT(comboModel),"Entry")); if(!entryModel) return; modelStr = gtk_entry_get_text(GTK_ENTRY(entryModel)); if(!modelStr) return; allKeys = g_strdup_printf( "RunType=HybridMM\n" "VPT2Model=%s\n" "PropModel=GVPT2\n" "maxFrequencyDifferenceFermi=200\n" "MartinCutOff1=1.0\n" "MartinCutOff2=1.0\n" "QFFnModes=3\n" "mmff94Charges=TRUE\n" "\n", modelStr); fileName = g_strdup_printf("%s%s%s",dirNameStr,G_DIR_SEPARATOR_S,fileNameStr); file = fopen(fileName, "w"); if(!file) { gchar* t = g_strdup_printf(_("Sorry\n I can not create %s file"),fileName); Message(t,_("Error"),TRUE); if(fileName) g_free(fileName); if(t)g_free(t); return; } fileNameBas = g_path_get_basename(fileNameStr); for(i=strlen(fileNameBas);i>0;i--) if(fileNameBas[i]=='.') { fileNameBas[i]='\0'; break; } save_igvpt2(fileNameBas, file, allKeys, harmonicFileName); fclose(file); if(fileNameBas) g_free(fileNameBas); gtk_widget_destroy(Win); { gchar* t = g_strdup_printf(_("The %s file was created"),fileName); Message(t,_("Error"),TRUE); if(t)g_free(t); } } /********************************************************************************/ static void run_igvpt2_win(GtkWidget* Win, gpointer data) { gint i; gint j; gchar* fileName = NULL; FILE* file; GtkWidget* buttonDirSelector = (GtkWidget*)g_object_get_data(G_OBJECT(Win), "ButtonDirSelector"); GtkWidget* entryFileName = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"EntryFileName")); GtkWidget* entryHarmonicFileName = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"EntryHarmonicFileName")); GtkWidget* comboModel = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"ComboModel")); GtkWidget* entryModel = NULL; G_CONST_RETURN gchar* fileNameStr = NULL; G_CONST_RETURN gchar* dirNameStr = NULL; G_CONST_RETURN gchar* modelStr = NULL; gchar* allKeys = NULL; gchar* fileNameBas = NULL; gchar* fileNameRes = NULL; gchar* command = NULL; gchar* old = NULL; gchar* result = NULL; G_CONST_RETURN gchar* harmonicFileName = NULL; if(buttonDirSelector) dirNameStr = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); if(entryHarmonicFileName) harmonicFileName = gtk_entry_get_text (GTK_ENTRY(entryHarmonicFileName)); if(!dirNameStr) return; if(entryFileName) fileNameStr = gtk_entry_get_text(GTK_ENTRY(entryFileName)); printf("fileName = %s\n", fileNameStr); if(!fileNameStr) return; if(!comboModel) printf("!comboModel\n"); if(!comboModel) return; entryModel = (GtkWidget*)(g_object_get_data(G_OBJECT(comboModel),"Entry")); if(!entryModel) return; modelStr = gtk_entry_get_text(GTK_ENTRY(entryModel)); if(!modelStr) return; allKeys = g_strdup_printf( "RunType=HybridMM\n" "VPT2Model=%s\n" "PropModel=GVPT2\n" "maxFrequencyDifferenceFermi=200\n" "MartinCutOff1=1.0\n" "MartinCutOff2=1.0\n" "QFFnModes=3\n" "mmff94Charges=TRUE\n" "\n", modelStr); fileName = g_strdup_printf("%s%s%s",dirNameStr,G_DIR_SEPARATOR_S,fileNameStr); file = fopen(fileName, "w"); if(!file) { gchar* t = g_strdup_printf(_("Sorry\n I can not create %s file"),fileName); Message(t,_("Error"),TRUE); if(fileName) g_free(fileName); if(t)g_free(t); return; } fileNameBas = g_path_get_basename(fileNameStr); for(i=strlen(fileNameBas);i>0;i--) if(fileNameBas[i]=='.') { fileNameBas[i]='\0'; break; } save_igvpt2(fileNameBas, file, allKeys, harmonicFileName); fclose(file); fileNameRes = g_strdup_printf("%s.out", fileNameBas); command = g_strdup_printf("%s%siGVPT2%sbin%sigvpt2 %s > %s", g_get_home_dir(), G_DIR_SEPARATOR_S, G_DIR_SEPARATOR_S, G_DIR_SEPARATOR_S, fileName, fileNameRes); system(command); file = fopen(fileNameRes, "r"); if(file) { gchar* t = g_malloc(BSIZE*sizeof(gchar)); result = g_strdup_printf("%s",""); while(!feof(file)) { if(!fgets(t,BSIZE,file))break; old = result; result = g_strdup_printf("%s%s",old,t); if(old) g_free(old); } if(result) { GtkWidget* message = AnharmonicResultTxt(result,"iGVPT2 result"); gtk_window_set_default_size (GTK_WINDOW(message),(gint)(ScreenWidth*0.8),-1); gtk_widget_set_size_request(message,(gint)(ScreenWidth*0.45),-1); /* gtk_window_set_modal (GTK_WINDOW (message), TRUE);*/ } fclose(file); g_free(t); } if(fileNameRes) g_free(fileNameRes); if(fileNameBas) g_free(fileNameBas); gtk_widget_destroy(Win); { gchar* t = g_strdup_printf(_("The %s file was created"),fileName); Message(t,_("Error"),TRUE); if(t)g_free(t); } } /**********************************************************************/ static GtkWidget* addComboListToATable(GtkWidget* table, gchar** list, gint nlist, gint i, gint j, gint k) { GtkWidget *entry = NULL; GtkWidget *combo = NULL; combo = create_combo_box_entry(list, nlist, TRUE, -1, -1); gtk_table_attach(GTK_TABLE(table),combo,j,j+k,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_SHRINK), 2,2); entry = GTK_BIN (combo)->child; g_object_set_data(G_OBJECT (entry), "Combo",combo); gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.2),-1); return entry; } /***********************************************************************************************/ static GtkWidget *addVPT2ModelsToTable(GtkWidget *table, gint i) { GtkWidget* entry = NULL; GtkWidget* combo = NULL; gint nlist = 2; gchar* list[] = {"HDCPT2","GVPT2"}; add_label_table(table,_("Model"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entry = addComboListToATable(table, list, nlist, i, 2, 1); combo = g_object_get_data(G_OBJECT (entry), "Combo"); g_object_set_data(G_OBJECT(combo), "Entry", entry); gtk_widget_set_sensitive(entry, FALSE); return combo; } /********************************************************************************/ static void set_entry_freqs_file_name(GtkWidget* SelFile, gint response_id) { GtkWidget *entry = NULL; gchar *longfile = NULL; if(response_id != GTK_RESPONSE_OK) return; entry = (GtkWidget*)(g_object_get_data(G_OBJECT(SelFile),"EntryFile")); longfile = gabedit_file_chooser_get_current_file(GABEDIT_FILE_CHOOSER(SelFile)); gtk_entry_set_text(GTK_ENTRY(entry),longfile); } /********************************************************************************/ static void set_entry_freqs_file_name_selection(GtkWidget* entry) { GtkWidget *SelFile; SelFile = gabedit_file_chooser_new(_("File chooser"), GTK_FILE_CHOOSER_ACTION_OPEN); gtk_window_set_modal (GTK_WINDOW (SelFile), TRUE); gabedit_file_chooser_hide_hidden(GABEDIT_FILE_CHOOSER(SelFile)); g_signal_connect(G_OBJECT(SelFile),"delete_event", (GCallback)gtk_widget_destroy,NULL); g_object_set_data(G_OBJECT (SelFile), "EntryFile", entry); g_signal_connect (SelFile, "response", G_CALLBACK (set_entry_freqs_file_name), GTK_OBJECT(SelFile)); g_signal_connect (SelFile, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(SelFile)); /* g_signal_connect (SelFile, "close", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(SelFile));*/ gtk_widget_show(SelFile); } /***********************************************************************************************/ static GtkWidget *addHarmonicFileNameToTable(GtkWidget *Wins, GtkWidget *table, gint i) { GtkWidget* entry; GtkWidget* button; add_label_table(table,_("File name of harmonic modes"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entry = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entry,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),"OrcaHessian.hess"); gtk_editable_set_editable((GtkEditable*)entry,TRUE); gtk_widget_set_sensitive(entry, TRUE); button = create_button(Wins,"Change"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(GTK_OBJECT (button), "clicked", G_CALLBACK(set_entry_freqs_file_name_selection), GTK_OBJECT(entry)); add_widget_table(table,button,i,3); /* g_signal_connect(G_OBJECT (entrybabel), "changed", (GCallback)changed_ffn, NULL);*/ return entry; } /********************************************************************************/ static GtkWidget* add_inputiGVPT2(GtkWidget *Wins,GtkWidget *vbox) { GtkWidget* entry; GtkWidget* sep; GtkWidget *table = gtk_table_new(8,4,FALSE); GtkWidget* comboModel = NULL; GtkWidget* buttonDirSelector = NULL; GtkWidget* entryFileName = NULL; GtkWidget* label = NULL; gint i; gint j; gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; j = 0; add_label_table(table,_("Working Folder"),(gushort)i,(gushort)j); j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); j = 2; buttonDirSelector = gabedit_dir_button(); gtk_widget_set_size_request(GTK_WIDGET(buttonDirSelector),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),buttonDirSelector, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); g_object_set_data(G_OBJECT(Wins), "ButtonDirSelector", buttonDirSelector); /*----------------------------------------------------------------------------------*/ i++; j = 0; add_label_table(table,_("File name"),(gushort)i,(gushort)j); j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); j = 2; entryFileName = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryFileName),"iGVPT2.ici"); gtk_widget_set_size_request(GTK_WIDGET(entryFileName),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryFileName, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); g_object_set_data(G_OBJECT(Wins), "EntryFileName", entryFileName); /*----------------------------------------------------------------------------------*/ i++; entry = addHarmonicFileNameToTable(Wins, table, i); g_object_set_data(G_OBJECT(Wins), "EntryHarmonicFileName", entry); /*----------------------------------------------------------------------------------*/ i++; comboModel = addVPT2ModelsToTable(table, i); g_object_set_data(G_OBJECT(Wins), "ComboModel", comboModel); /*----------------------------------------------------------------------------------*/ i++; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep,0,0+4,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); /*----------------------------------------------------------------------------------*/ gtk_widget_show_all(table); return entryFileName; } /********************************************************************************************************/ void create_igvpt2_file_dlg(gboolean run) { GtkWidget *Win; GtkWidget *frame; GtkWidget *vboxall; GtkWidget* vbox; Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),"iGVPT2 input file for an anharmonic calculation"); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 2); /*gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(PrincipalWindow));*/ gtk_window_set_modal (GTK_WINDOW (Win), TRUE); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(Win); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 2); gtk_box_pack_start(GTK_BOX(vboxall), frame,TRUE,TRUE,0); gtk_widget_show (frame); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); gtk_widget_realize(Win); add_inputiGVPT2(Win,vbox); if(!run) add_cancel_ok_buttons(Win,vbox,(GCallback)save_igvpt2_win); else add_cancel_ok_buttons(Win,vbox,(GCallback)run_igvpt2_win); /* Show all */ gtk_widget_show_all (Win); } /********************************************************************************/ GabeditSrc250/src/Spectrum/Dep.mk0000644000175100017510000000550213130664665017136 0ustar allouchealloucheSpectrumWin.o: SpectrumWin.c ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/GabeditXYPlot.h SpectrumWin.h IRSpectrum.o: IRSpectrum.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/UtilsInterface.h ../Utils/Utils.h ../Files/FileChooser.h \ ../Common/Windows.h ../Utils/GabeditXYPlot.h ../Display/Vibration.h \ SpectrumWin.h RamanSpectrum.o: RamanSpectrum.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/UtilsInterface.h ../Utils/Utils.h ../Files/FileChooser.h \ ../Common/Windows.h ../Utils/GabeditXYPlot.h ../Display/Vibration.h \ SpectrumWin.h UVSpectrum.o: UVSpectrum.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/UtilsInterface.h ../Utils/Utils.h ../Files/FileChooser.h \ ../Common/Windows.h ../Utils/GabeditXYPlot.h ../Display/Vibration.h \ SpectrumWin.h ECDSpectrum.o: ECDSpectrum.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/UtilsInterface.h ../Utils/Utils.h ../Files/FileChooser.h \ ../Common/Windows.h ../Utils/GabeditXYPlot.h ../Display/Vibration.h \ SpectrumWin.h NMRSpectrum.o: NMRSpectrum.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/UtilsInterface.h ../Utils/Utils.h ../Utils/Jacobi.h \ ../Utils/QL.h ../Files/FileChooser.h ../Common/Windows.h \ ../Utils/GabeditXYPlot.h ../Display/Vibration.h SpectrumWin.h DOS.o: DOS.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/UtilsInterface.h ../Utils/Utils.h ../Files/FileChooser.h \ ../Common/Windows.h ../Utils/GabeditXYPlot.h ../Display/Vibration.h \ SpectrumWin.h VASPSpectra.o: VASPSpectra.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/UtilsInterface.h ../Utils/Utils.h ../Files/FileChooser.h \ ../Common/Windows.h ../Utils/GabeditXYPlot.h ../Display/Vibration.h IGVPT2Spectrum.o: IGVPT2Spectrum.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/UtilsInterface.h ../Utils/Utils.h ../Files/FileChooser.h \ ../Common/Windows.h ../Utils/GabeditXYPlot.h ../Display/Vibration.h \ ../Spectrum/IRSpectrum.h ../Spectrum/../Display/Vibration.h \ ../Spectrum/SpectrumWin.h ../Spectrum/../Utils/GabeditXYPlot.h \ ../Utils/GabeditTextEdit.h GabeditSrc250/src/Spectrum/SpectrumWin.h0000644000175100017510000000603513130665225020521 0ustar alloucheallouche/* SpectrumWin.h */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_SPECTRUMWIN_H__ #define __GABEDIT_SPECTRUMWIN_H__ #include #include #include "../Utils/GabeditXYPlot.h" typedef enum { GABEDIT_CONV_TYPE_NONE, GABEDIT_CONV_TYPE_LORENTZ, GABEDIT_CONV_TYPE_GAUSS, } GabeditConvType; typedef struct { gdouble *x, *y; guint size; guint point_size; guint line_width; GdkColor point_color, line_color; GdkLineStyle line_style; XYPlotData* dataPeaks; XYPlotData* dataCurve; gboolean showDataPeaks; gboolean showDataCurve; gdouble xmin; gdouble xmax; gdouble ymin; gdouble ymax; gdouble halfWidth; GabeditConvType convType; gdouble scaleX; gdouble scaleY; gdouble shiftX; gboolean ymaxToOne; }XYPlotWinData; void spectrum_win_add_data(GtkWidget *winSpectrum, gint size, gdouble* x, gdouble* y); void spectrum_win_remove_data(GtkWidget *winSpectrum); void spectrum_win_autorange(GtkWidget *winSpectrum); GtkWidget* spectrum_win_new (gchar* title); GtkWidget* spectrum_win_new_with_xy(gchar* title, gint size, gdouble* x, gdouble* y); void spectrum_win_relect_x(GtkWidget* winSpectrum, gboolean active); void spectrum_win_relect_y(GtkWidget* winSpectrum, gboolean active); void spectrum_win_set_half_width(GtkWidget* winSpectrum, gdouble value); void spectrum_win_set_xmin(GtkWidget* winSpectrum, gdouble value); void spectrum_win_set_xmax(GtkWidget* winSpectrum, gdouble value); void spectrum_win_set_ymin(GtkWidget* winSpectrum, gdouble value); void spectrum_win_set_ymax(GtkWidget* winSpectrum, gdouble value); void spectrum_win_reset_ymin_ymax(GtkWidget *xyplot); void spectrum_win_set_xlabel(GtkWidget* winSpectrum, gchar* label); void spectrum_win_set_ylabel(GtkWidget* winSpectrum, gchar* label); #endif /* __GABEDIT_SPECTRUMWIN_H__ */ GabeditSrc250/src/Spectrum/ECDSpectrum.h0000644000175100017510000000027313130665225020355 0ustar alloucheallouche #ifndef __GABEDIT_ECDSPECTRUM_H__ #define __GABEDIT_ECDSPECTRUM_H__ void createECDSpectrum(GtkWidget *parentWindow, GabEditTypeFile typeOfFile); #endif /* __GABEDIT_ECDSPECTRUM_H__ */ GabeditSrc250/src/Spectrum/NMRSpectrum.c0000644000175100017510000014745113130665225020423 0ustar alloucheallouche/* NMRSpectrum.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #ifdef ENABLE_OMP #include #endif #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/Jacobi.h" #include "../Utils/QL.h" #include "../Files/FileChooser.h" #include "../Common/Windows.h" #include "../Utils/GabeditXYPlot.h" #include "../Display/Vibration.h" #include "SpectrumWin.h" #define NMAXGROUP 14 static void createNMRSpectrumWin(gint numberOfStates, gdouble* energies, gdouble* intensities,gboolean showButtonParms); /********************************************************************************/ /* static void printInfMatrix(gdouble* M, gint n) { gint i,j; gint l = 0; for ( i=0 ; iNMAXGROUP+2) { gchar tmp[BSIZE]; sprintf(tmp,_("Sorry\nThe number of spins is larger than %d.\n"), NMAXGROUP+2); Message(tmp,_("Warning"),TRUE); return; } if(nCoup<1) return; frequencies = g_malloc(nSpins*sizeof(gdouble)); ppmJCouplings = g_malloc(nCoup*sizeof(gdouble)); jj = -1 ; nSpins = 0; for (iGroup=0 ; iGroup .0001 ) { frequencies[ik] = fabs(eValues[jb]-eValues[ja]) ; intensities[ik] = transProb[ii]; ik++; } ii++; } /* printf("End calculate of intensity\n");*/ if(eValues) g_free(eValues); if(transProb) g_free(transProb); nFrequencies = ik; if(nFrequencies>0) { frequencies = g_realloc(frequencies,nFrequencies*sizeof(gdouble)); intensities = g_realloc(intensities,nFrequencies*sizeof(gdouble)); } *n = nFrequencies; *X = frequencies; *Y = intensities; /* printf("End printing\n");*/ } /********************************************************************************/ static void initTables(gint nSpins, gint* binomialCoef, gint* basis, gint *start) { /* binomialCoef binomial coefficients. nSpins+1 elements */ /* bIndex element i is locn of fn i in basis[] */ /* start indexes to successive Fz blocks in basis[]. nSpins+1 elements */ /* basis : coded basis functions : 2**nSpins*nSpins*/ gint m,k,i,j,ik; gint nBasis; gint* sumSpin = NULL; binomialCoef[0] = 1; start[0] = 0; for(i=1, k=nSpins, m=1; i<=nSpins; i++, k--, m++) { binomialCoef[i] = (binomialCoef[i-1] * k) / m; start[i] = start[i-1] + binomialCoef[i-1]; } nBasis = 1 << nSpins; /* basis = -1 (alpha) or +1(beta) */ for ( i=0 ; isumSpin[j]) k = j; if(k!=i) { gint t = sumSpin[k]; sumSpin[k]= sumSpin[i]; sumSpin[i]= t; for ( j=0 ; j .0001 ) { frequenciesSpectrum[ik] = fabs(eValues[jb]-eValuesPrev[ja]); gintensities[ik] = transProb[ii]; ik++; } } /* printf("End gintensities calculations\n");*/ return ik; } /********************************************************************************/ static gint getSizeMax(gint nSpins, gint* binomialCoef) { gint sizeMax = 0; gint i; for(i=0; i<=nSpins; i++) if( binomialCoef[i]>sizeMax) sizeMax = binomialCoef[i]; return sizeMax; } /********************************************************************************/ static gint getSizeTrans(gint nSpins, gint* binomialCoef) { gint size = 0; gint i; for(i=1; i<=nSpins; i++) size += binomialCoef[i]*binomialCoef[i-1]; return size; } /********************************************************************************/ /* static void prgintMatInf(gint istart, gint size, gdouble* mat, char* name) { gint i,j,ik; ik = 0; if(name) printf("%s\n",name); for ( i=istart ; i0) continue; for(j=i+1;j0) { gdouble t = gintensities[i]; gintensities[i] = gintensities[j]; gintensities[j] = t; break; } } } for(i=0;iNMAXGROUP+2) { gchar tmp[BSIZE]; sprintf(tmp,_("Sorry\nThe number of spins is larger than %d.\n"), NMAXGROUP+2); Message(tmp,_("Warning"),TRUE); return; } if(nCoup<1) return; frequencies = malloc(nSpins*sizeof(gdouble)); ppmJCouplings = malloc(nCoup*sizeof(gdouble)); /* frequency array and coupling matrix*/ buildFreqAndJ(operatingFrequency, nGroups, numberOfSpins, chemichalShifts, JCouplings, nCoup, frequencies, ppmJCouplings); /* printf("End build FreqJ\n");*/ /* basis set */ nBasis = 1<0) { /* gint i; for(i=0;iNMAXGROUP+2) { gchar tmp[BSIZE]; sprintf(tmp,_("Sorry\nThe number of spins is larger than %d.\n"), NMAXGROUP+2); Message(tmp,_("Warning"),TRUE); return; } if(nCoup<1) return; frequencies = malloc(nSpins*sizeof(gdouble)); ppmJCouplings = malloc(nCoup*sizeof(gdouble)); /* frequency array and coupling matrix*/ buildFreqAndJ(operatingFrequency, nGroups, numberOfSpins, chemichalShifts, JCouplings, nCoup, frequencies, ppmJCouplings); /* basis set */ nBasis = 1<0) { /* nFrequencies = removeIdenticalFrequencies(nFrequencies, frequenciesSpectrum, gintensities); if(nFrequencies>0) */ { frequenciesSpectrum = realloc(frequenciesSpectrum,nFrequencies*sizeof(gdouble)); gintensities = realloc(gintensities,nFrequencies*sizeof(gdouble)); } } if(nFrequencies<1) { /* printf("nFrequencies=%d\n",nFrequencies);*/ if(frequenciesSpectrum) free(frequenciesSpectrum); if(gintensities) free(gintensities); } *n = nFrequencies; *X = frequenciesSpectrum; *Y = gintensities; /* printf("End Computing\n");*/ } /********************************************************************************/ void computeNMRSpectrumNonCoupled( gint nGroups, gint* numberOfSpins, gdouble* chemichalShifts, gint *n, gdouble**X, gdouble** Y) { gint nSpins = 0 ; gint nCoup = 0; gint k; gint iGroup; gdouble* frequenciesSpectrum = NULL; gdouble* gintensities = NULL; gint nFrequencies = 0; *n = 0; *X = NULL; *Y = NULL; getNumberOfSpinsCouples(nGroups, numberOfSpins, &nSpins, &nCoup); if(nSpins<1) return; if(nCoup<1) return; nFrequencies = nSpins; frequenciesSpectrum = malloc(nSpins*sizeof(gdouble)); gintensities = malloc(nSpins*sizeof(gdouble)); nSpins = 0; for (iGroup=0 ; iGroupnMax) nGroups = nMax; fseek(file, pos, SEEK_SET); numberOfSpins = g_malloc(nGroups*sizeof(gint)); chemichalShifts = g_malloc(nGroups*sizeof(gdouble)); JCouplings = g_malloc(nGroups*sizeof(gdouble*)); {int it = fscanf(file,"%lf",&operatingFrequency);} for(i=0;i0) computeNMRSpectrum(operatingFrequency, nGroups, numberOfSpins, chemichalShifts, JCouplings,&n, &X, &Y,2); if(!X) return; /* spectrum */ /* for ( i=0 ; i0) window = spectrum_win_new_with_xy(_("NMR spectrum"), numberOfStates, energies, intensities); else window = spectrum_win_new(_("NMR spectrum")); hbox = g_object_get_data(G_OBJECT (window), "HBoxData"); xyplot = g_object_get_data(G_OBJECT (window), "XYPLOT"); if(!hbox) return; spectrum_win_relect_x(window, TRUE); spectrum_win_set_half_width(window, 0.002); spectrum_win_set_xmin(window, 0.0); spectrum_win_set_ymin(window, 0.0); if(xyplot) { gabedit_xyplot_show_right_legends (GABEDIT_XYPLOT(xyplot), FALSE); gabedit_xyplot_show_top_legends (GABEDIT_XYPLOT(xyplot), FALSE); } set_icone(window); spectrum_win_set_xlabel(window, _("Frequency(ppm)")); spectrum_win_set_ylabel(window, _("Intensity")); parametersWindow = new_parameters_window(window); if(showButtonParams) { button = create_button(window,_("Set parameters")); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 2); gtk_widget_show_all (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_window_present),parametersWindow); apply(window); } toggle_no_convolution = g_object_get_data(G_OBJECT (window), "NoConvolutionButton"); if(toggle_no_convolution) gtk_widget_hide(toggle_no_convolution); } /********************************************************************************/ void createNMRSpectrum(GtkWidget *parentWindow, GabEditTypeFile typeOfFile) { createNMRSpectrumWin(0, NULL, NULL,TRUE); } /********************************************************************************/ static void messageErrorFreq(gchar* fileName) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not read energies from '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); } /********************************************************************************/ static gboolean read_sample_2columns_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gboolean OK = TRUE; gint numberOfStates = 0; gdouble* energies = NULL; gdouble* intensities = NULL; gchar *FileName; FILE *fd; gdouble a; gdouble b; int ne = 0; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; while(!feof(fd)) { if(!fgets(t,BSIZE,fd))break; ne = sscanf(t,"%lf %lf",&a,&b); if(ne==2) { numberOfStates++; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); energies[numberOfStates-1] = a; intensities[numberOfStates-1] = b; } } if(numberOfStates>0) { createNMRSpectrumWin(numberOfStates, energies, intensities,FALSE); } else { OK = FALSE; messageErrorFreq(FileName); } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(fd); return OK; } /********************************************************************************/ static void read_sample_2columns_file_dlg() { GtkWidget* filesel = file_chooser_open(read_sample_2columns_file, _("Read energies and intensities from a sample file(2columns : first = Energy(eV), second = intensity)"), GABEDIT_TYPEFILE_TXT,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ void createNMR2Spectrum(GtkWidget *parentWindow, GabEditTypeFile typeOfFile) { if(typeOfFile==GABEDIT_TYPEFILE_TXT) read_sample_2columns_file_dlg(); } /********************************************************************************/ GabeditSrc250/src/Spectrum/UVSpectrum.h0000644000175100017510000000026713130665225020317 0ustar alloucheallouche #ifndef __GABEDIT_UVSPECTRUM_H__ #define __GABEDIT_UVSPECTRUM_H__ void createUVSpectrum(GtkWidget *parentWindow, GabEditTypeFile typeOfFile); #endif /* __GABEDIT_UVSPECTRUM_H__ */ GabeditSrc250/src/Spectrum/UVSpectrum.c0000644000175100017510000011243513130665225020313 0ustar alloucheallouche/* UVSpectrum.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Files/FileChooser.h" #include "../Common/Windows.h" #include "../Utils/GabeditXYPlot.h" #include "../Display/Vibration.h" #include "SpectrumWin.h" /********************************************************************************/ static void check_nm_ev_toggled(GtkToggleButton *togglebutton, gpointer user_data) { GtkWidget* xyplot = NULL; GList* data_list = NULL; GList* current = NULL; XYPlotWinData* data; gboolean nm = FALSE; GtkWidget* window = NULL; gdouble xmax = 0; gdouble ymax = 0; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); if(!data_list) return; window = g_object_get_data(G_OBJECT (xyplot), "Window"); nm = gtk_toggle_button_get_active(togglebutton); current=g_list_first(data_list); for(; current != NULL; current = current->next) { gint loop; data = (XYPlotWinData*)current->data; for (loop=0; loopsize; loop++) { if(fabs(data->x[loop])>1e-10) { if(nm) data->x[loop]= 1239.8424121/data->x[loop]; else data->x[loop]= 1239.8424121/data->x[loop]; } else data->x[loop]= 1e-10; if(xmaxx[loop]) xmax = data->x[loop]; if(ymaxy[loop]) ymax = data->y[loop]; } } xmax = xmax*1.5; ymax = ymax*2.0; spectrum_win_set_xmin(window, 0.0); spectrum_win_set_xmax(window, xmax); spectrum_win_set_ymax(window, ymax); spectrum_win_set_half_width(window, fabs(xmax/50)); spectrum_win_reset_ymin_ymax(GTK_WIDGET(xyplot)); if(nm) { spectrum_win_set_xlabel(window, "nm"); } else { spectrum_win_set_xlabel(window, "eV"); } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /********************************************************************************/ static void createUVSpectrumWin(gint numberOfStates, gdouble* energies, gdouble* intensities) { GtkWidget* window = spectrum_win_new_with_xy(_("UV/Visible spectrum"), numberOfStates, energies, intensities); GtkWidget* hbox = g_object_get_data(G_OBJECT (window), "HBoxData"); GtkWidget* xyplot = g_object_get_data(G_OBJECT (window), "XYPLOT"); GtkWidget* check_nm_ev = NULL; GtkWidget* tmp_hbox = NULL; spectrum_win_set_half_width(window, 0.05); spectrum_win_set_xmin(window, 0.0); set_icone(window); if(!hbox) return; tmp_hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), tmp_hbox, FALSE, FALSE, 30); gtk_widget_show(tmp_hbox); check_nm_ev = gtk_check_button_new_with_label("nm<=>eV"); gtk_box_pack_start(GTK_BOX(tmp_hbox), check_nm_ev, FALSE, FALSE, 4); gtk_widget_show(check_nm_ev); g_signal_connect(G_OBJECT(check_nm_ev), "toggled", G_CALLBACK(check_nm_ev_toggled), xyplot); spectrum_win_set_xlabel(window, "eV"); spectrum_win_set_ylabel(window, _("Intensity")); } /********************************************************************************/ static void messageErrorFreq(gchar* fileName) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not read energies from '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); } /********************************************************************************/ /* static void messageErrorInt(gchar* fileName) { gchar buffer[BSIZE]; sprintf(buffer,"Sorry, I can not read energies from '%s' file\n",fileName); Message(buffer,"Error",TRUE); } */ /********************************************************************************/ static gboolean read_gabedit_molden_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; gchar t[BSIZE]; gboolean OK; FILE *fd; gint ne; gint numberOfStates = 0; gdouble* energies = NULL; gdouble* intensities = NULL; gdouble a; gdouble b; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); OK=FALSE; while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"[UV")) { OK = TRUE; break; } } if(!OK) { messageErrorFreq(FileName); if(fd) fclose(fd); return FALSE; } while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"[")) break; if(this_is_a_backspace(t)) break; ne = sscanf(t,"%lf %lf",&a, &b); if(ne != 2) { messageErrorFreq(FileName); if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(fd); return FALSE; } numberOfStates++; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); energies[numberOfStates-1] = a; intensities[numberOfStates-1] = b; } if(numberOfStates>0) { createUVSpectrumWin(numberOfStates, energies, intensities); } else { messageErrorFreq(FileName); } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(fd); return TRUE; } /********************************************************************************/ static void read_gabedit_file_dlg() { GtkWidget* filesel = file_chooser_open(read_gabedit_molden_file, _("Read energies and intensities from a Gabedit file"), GABEDIT_TYPEFILE_GABEDIT,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static void read_molden_file_dlg() { GtkWidget* filesel = file_chooser_open(read_gabedit_molden_file, _("Read energies and intensities from a Molden file"), GABEDIT_TYPEFILE_MOLDEN,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_mpqc_file(GabeditFileChooser *SelecFile, gint response_id) { return FALSE; } /********************************************************************************/ static void read_mpqc_file_dlg() { GtkWidget* filesel = file_chooser_open(read_mpqc_file, _("Read energies and intensities from a MPQC output file"), GABEDIT_TYPEFILE_MPQC,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_molpro_file(GabeditFileChooser *SelecFile, gint response_id) { return FALSE; } /********************************************************************************/ static void read_molpro_file_dlg() { GtkWidget* filesel = file_chooser_open(read_molpro_file, _("Read energies and intensities from a Molpro output file"), GABEDIT_TYPEFILE_MOLPRO,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gint read_dalton_modes_MOLHES(FILE* fd, gchar *FileName) { return 1; } /********************************************************************************/ static gboolean read_dalton_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; FILE *fd; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); read_dalton_modes_MOLHES(fd, FileName); fclose(fd); return TRUE; } /********************************************************************************/ static void read_dalton_file_dlg() { GtkWidget* filesel = file_chooser_open(read_dalton_file, _("Read energies and intensities from a Dalton output file"), GABEDIT_TYPEFILE_DALTON,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_gamess_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gboolean OK; gint numberOfStates = 0; gdouble* energies = NULL; gdouble* intensities = NULL; gchar *FileName; gchar** allreals = NULL; FILE *fd; gint k = 0; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; do { OK=FALSE; while(!feof(fd)) { { char* e = fgets(t,BSIZE,fd);} if ( strstr( t,"EXCITATION") && strstr( t,"STATE") && strstr( t,"OSCILLATOR") ) { { char* e = fgets(t,BSIZE,fd);} /* second row of title */ { char* e = fgets(t,BSIZE,fd);} /* ground state */ OK = TRUE; numberOfStates = 0; break; } } while(!feof(fd) ) { { char* e = fgets(t,BSIZE,fd);} if(this_is_a_backspace(t)) break; allreals =gab_split (t); k = 0; /* printf("t=%s\n",t);*/ while(allreals && allreals[k]) { /*printf("k=%d %s\n",k,allreals[k]);*/ k++; } /* printf("k=%d\n",k);*/ if(k==8)/* Second column = symmetry */ { numberOfStates++; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); energies[numberOfStates-1] = atof(allreals[3]); intensities[numberOfStates-1] = atof(allreals[7]); } if(k==7)/* Second column = energy in au */ { numberOfStates++; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); energies[numberOfStates-1] = atof(allreals[2]); intensities[numberOfStates-1] = atof(allreals[6]); } g_strfreev(allreals); allreals = NULL; } }while(!feof(fd)); if(numberOfStates>0) { createUVSpectrumWin(numberOfStates, energies, intensities); } else { messageErrorFreq(FileName); } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(fd); return TRUE; return FALSE; } /********************************************************************************/ static void read_gamess_file_dlg() { GtkWidget* filesel = file_chooser_open(read_gamess_file, _("Read energies and intensities from a Gamess output file"), GABEDIT_TYPEFILE_GAMESS,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_firefly_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gboolean OK; gint numberOfStates = 0; gdouble* energies = NULL; gdouble* intensities = NULL; gchar *FileName; gchar** allreals = NULL; FILE *fd; gint k = 0; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; do { OK=FALSE; while(!feof(fd)) { { char* e = fgets(t,BSIZE,fd);} if ( strstr( t," EXCITATION ENERGIES") ) { { char* e = fgets(t,BSIZE,fd);} { char* e = fgets(t,BSIZE,fd);} OK = TRUE; numberOfStates = 0; break; } } while(!feof(fd) ) { { char* e = fgets(t,BSIZE,fd);} if(this_is_a_backspace(t)) break; allreals =gab_split (t); k = 0; while(allreals && allreals[k] && k<7) k++; if(k==7) { numberOfStates++; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); energies[numberOfStates-1] = atof(allreals[2]); intensities[numberOfStates-1] = atof(allreals[6]); } g_strfreev(allreals); allreals = NULL; } }while(!feof(fd)); if(numberOfStates>0) { createUVSpectrumWin(numberOfStates, energies, intensities); } else { messageErrorFreq(FileName); } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(fd); return TRUE; return FALSE; } /********************************************************************************/ static void read_firefly_file_dlg() { GtkWidget* filesel = file_chooser_open(read_firefly_file, _("Read energies and intensities from a FireFly output file"), GABEDIT_TYPEFILE_FIREFLY,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_gaussian_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gboolean OK; gint numberOfStates = 0; gdouble* energies = NULL; gdouble* intensities = NULL; gchar *FileName; FILE *fd; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; do { OK=FALSE; while(!feof(fd)) { { char* e = fgets(t,BSIZE,fd);} /* if ( strstr( t,"reduced masses") )*/ if ( strstr( t,"Excitation energies and oscillator strengths:") ) { OK = TRUE; numberOfStates = 0; break; } } while(!feof(fd) ) { { char* e = fgets(t,BSIZE,fd);} if(strstr(t,"Excited State")&& strstr(t,"eV")) { char* egal = strstr(t,"eV")-10; numberOfStates++; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); energies[numberOfStates-1] = atof(egal); egal = strstr(t,"f=")+2; intensities[numberOfStates-1] = atof(egal); } } }while(!feof(fd)); if(numberOfStates>0) { createUVSpectrumWin(numberOfStates, energies, intensities); } else { messageErrorFreq(FileName); } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(fd); return TRUE; } /********************************************************************************/ static void read_gaussian_file_dlg() { GtkWidget* filesel = file_chooser_open(read_gaussian_file, _("Read energies and intensities from a Gaussian output file"), GABEDIT_TYPEFILE_GAUSSIAN,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_qchem_file_str(gchar *fileName, gchar* strType) { gchar t[BSIZE]; gboolean OK; gint numberOfStates = 0; gdouble* energies = NULL; gdouble* intensities = NULL; FILE *fd; if(!fileName) return FALSE; fd = FOpen(fileName, "rb"); if(!fd) return FALSE; do { OK=FALSE; while(!feof(fd)) { { char* e = fgets(t,BSIZE,fd);} if ( strstr( t,strType)) { OK = TRUE; numberOfStates = 1; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); energies[numberOfStates-1] = -1.0; intensities[numberOfStates-1] = -1.0; break; } } if(!OK) break; while(!feof(fd) ) { if(!fgets(t,BSIZE,fd)) break; if ( strstr( t,"Excitation Energies") ) break; if(strstr(t,"Excited state")&& strstr(t,"excitation energy (eV)")) { gchar* egal = strstr(t,"=")+1; energies[numberOfStates-1] = atof(egal); } if(strstr(t,"Strength :")) { gchar* egal = strstr(t,":")+1; intensities[numberOfStates-1] = atof(egal); numberOfStates++; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); } } }while(!feof(fd)); if(numberOfStates>1 && intensities[numberOfStates-1]>=0) { numberOfStates--; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); createUVSpectrumWin(numberOfStates, energies, intensities); } else { messageErrorFreq(fileName); } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(fd); return TRUE; } /********************************************************************************/ static gboolean apply_qchem(GtkWidget *button,gpointer data) { GtkComboBox *combo = (GtkComboBox *)data; GtkWidget *window = g_object_get_data (G_OBJECT (button), "Window"); GtkTreeIter iter; gchar* type = NULL; gboolean res = FALSE; if (gtk_combo_box_get_active_iter (combo, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combo); gchar* fileName = g_object_get_data(G_OBJECT (combo), "FileName"); gtk_tree_model_get (model, &iter, 0, &type, -1); if(!type) return FALSE; if(!fileName) return FALSE; res = read_qchem_file_str(fileName, type); } gtk_widget_destroy(window); return res; } /********************************************************************************************************/ static GtkWidget *add_qchem_types_combo(GtkWidget *hbox, gint nTypes, gchar** listTypes) { GtkTreeIter iter; GtkTreeStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; gint i; store = gtk_tree_store_new (1,G_TYPE_STRING); for(i=0;i0) { createUVSpectrumWin(numberOfStates, energies, intensities); } else { messageErrorFreq(FileName); } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(fd); return TRUE; } /********************************************************************************/ static void read_orca_file_dlg() { GtkWidget* filesel = file_chooser_open(read_orca_file, _("Read energies and intensities from a Orca output file"), GABEDIT_TYPEFILE_ORCA,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_nwchem_tddft_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; gchar t[BSIZE]; gboolean OK; FILE *fd; guint taille=BSIZE; gint n; gdouble ener = 0; gdouble intensity = 0; gint numberOfStates = 0; gdouble *energies = NULL; gdouble *intensities = NULL; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; do { OK=FALSE; while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if (strstr( t,"NWChem TDDFT Module") ) {OK = TRUE; break;} } if(!OK) break; numberOfStates = 0; if(energies) g_free(energies); if(intensities) g_free(intensities); energies = NULL; intensities = NULL; while(!feof(fd) ) { if(!fgets(t,taille,fd)) break; if (!(strstr( t,"Root") && strstr( t,"eV") && strstr( t,"(") && strstr( t,")")) ) continue; n = sscanf( strstr( t,"(")+1,"%lf",&ener); if(n==1) { while(!feof(fd) ) { if(!fgets(t,taille,fd)) break; if(strstr(t,"Dipole Oscillator Strength")) { intensity=0.0; if(strstr(t,"Spin forbidden") || 1==sscanf( strstr(t,"Dipole Oscillator Strength")+strlen("Dipole Oscillator Strength"),"%lf",&intensity)) { numberOfStates++; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); energies[numberOfStates-1] = ener; intensities[numberOfStates-1] = intensity; } break; } } } } }while(!feof(fd)); if(numberOfStates>0) { OK = TRUE; createUVSpectrumWin(numberOfStates, energies, intensities); } else { OK = FALSE; } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(fd); return OK; } /********************************************************************************/ static gboolean read_nwchem_eom_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; gchar t[BSIZE]; gboolean OK; FILE *fd; guint taille=BSIZE; gint n; gdouble ener = 0; gdouble intensity = 0; gint numberOfStates = 0; gdouble *energies = NULL; gdouble *intensities = NULL; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; do { OK=FALSE; while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if (strstr( t,"Dim. of EOMCC iter. space") ) {OK = TRUE; break;} } if(!OK) break; numberOfStates = 0; if(energies) g_free(energies); if(intensities) g_free(intensities); energies = NULL; intensities = NULL; while(!feof(fd) ) { if(!fgets(t,taille,fd)) break; if (!(strstr( t,"/ eV ="))) continue; n = sscanf( strstr( t,"=")+1,"%lf",&ener); if(n==1) { while(!feof(fd) ) { if(!fgets(t,taille,fd)) break; if(strstr(t,"Oscillator Strength ")) { intensity=0.0; if(strstr(t,"Spin forbidden") || 1==sscanf( strstr(t,"Oscillator Strength ")+strlen("Oscillator Strength "),"%lf",&intensity)) { numberOfStates++; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); energies[numberOfStates-1] = ener; intensities[numberOfStates-1] = intensity; } break; } } } } }while(!feof(fd)); if(numberOfStates>0) { OK = TRUE; createUVSpectrumWin(numberOfStates, energies, intensities); } else { OK = FALSE; } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(fd); return OK; } /********************************************************************************/ static gboolean read_nwchem_file(GabeditFileChooser *SelecFile, gint response_id) { if(response_id != GTK_RESPONSE_OK) return FALSE; if(!read_nwchem_tddft_file(SelecFile, response_id)&& !read_nwchem_eom_file(SelecFile, response_id)) { gchar* FileName = gabedit_file_chooser_get_current_file(SelecFile); FILE* fd = FOpen(FileName, "rb"); if(!fd) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I cannot open '%s' file\n"),FileName); Message(buffer,_("Error"),TRUE); } else { messageErrorFreq(FileName); fclose(fd); } return FALSE; } return TRUE; } /********************************************************************************/ static void read_nwchem_file_dlg() { GtkWidget* filesel = file_chooser_open(read_nwchem_file, _("Read energies and intensities from a NWChem output file"), GABEDIT_TYPEFILE_NWCHEM,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ /* static gboolean read_psicode_tddft_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; gchar t[BSIZE]; gboolean OK; FILE *fd; guint taille=BSIZE; gint n; gdouble ener = 0; gdouble intensity = 0; gint numberOfStates = 0; gdouble *energies = NULL; gdouble *intensities = NULL; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; do { OK=FALSE; while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if (strstr( t,"Psicode TDDFT Module") ) {OK = TRUE; break;} } if(!OK) break; numberOfStates = 0; if(energies) g_free(energies); if(intensities) g_free(intensities); energies = NULL; intensities = NULL; while(!feof(fd) ) { if(!fgets(t,taille,fd)) break; if (!(strstr( t,"Root") && strstr( t,"eV") && strstr( t,"(") && strstr( t,")")) ) continue; n = sscanf( strstr( t,"(")+1,"%lf",&ener); if(n==1) { while(!feof(fd) ) { if(!fgets(t,taille,fd)) break; if(strstr(t,"Dipole Oscillator Strength")) { intensity=0.0; if(strstr(t,"Spin forbidden") || 1==sscanf( strstr(t,"Dipole Oscillator Strength")+strlen("Dipole Oscillator Strength"),"%lf",&intensity)) { numberOfStates++; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); energies[numberOfStates-1] = ener; intensities[numberOfStates-1] = intensity; } break; } } } } }while(!feof(fd)); if(numberOfStates>0) { OK = TRUE; createUVSpectrumWin(numberOfStates, energies, intensities); } else { OK = FALSE; } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(fd); return OK; } */ /********************************************************************************/ static gboolean read_psicode_eom_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; gchar t[BSIZE]; gchar dum[BSIZE]; gboolean OK; FILE *fd; guint taille=BSIZE; gint n; gdouble ener = 0; gdouble intensity = 0; gint numberOfStates = 0; gdouble *energies = NULL; gdouble *intensities = NULL; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; do { OK=FALSE; while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if ( strstr( t,"State") && strstr( t,"(cm") && strstr( t,"(nm)") && strstr( t,"(eV)") && strstr( t,"(au)") ) {OK = TRUE; break;} } if(!OK) break; numberOfStates = 0; if(energies) g_free(energies); if(intensities) g_free(intensities); energies = NULL; intensities = NULL; while(!feof(fd) ) { if(!fgets(t,taille,fd)) break; if(this_is_a_backspace(t)) break; n = sscanf(t, "%s %s %lf %s %s %s %lf",dum,dum,&ener,dum,dum,dum,&intensity); if(n==7) { numberOfStates++; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); energies[numberOfStates-1] = ener; intensities[numberOfStates-1] = intensity; } } }while(!feof(fd)); if(numberOfStates>0) { OK = TRUE; createUVSpectrumWin(numberOfStates, energies, intensities); } else { OK = FALSE; } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(fd); return OK; } /********************************************************************************/ static gboolean read_psicode_file(GabeditFileChooser *SelecFile, gint response_id) { if(response_id != GTK_RESPONSE_OK) return FALSE; /* if(!read_psicode_tddft_file(SelecFile, response_id)&& !read_psicode_eom_file(SelecFile, response_id))*/ if(!read_psicode_eom_file(SelecFile, response_id)) { gchar* FileName = gabedit_file_chooser_get_current_file(SelecFile); FILE* fd = FOpen(FileName, "rb"); if(!fd) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I cannot open '%s' file\n"),FileName); Message(buffer,_("Error"),TRUE); } else { messageErrorFreq(FileName); fclose(fd); } return FALSE; } return TRUE; } /********************************************************************************/ static void read_psicode_file_dlg() { GtkWidget* filesel = file_chooser_open(read_psicode_file, _("Read energies and intensities from a Psicode output file"), GABEDIT_TYPEFILE_NWCHEM,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_adf_file(GabeditFileChooser *SelecFile, gint response_id) { return FALSE; } /********************************************************************************/ static void read_adf_file_dlg() { GtkWidget* filesel = file_chooser_open(read_adf_file, _("Read energies and intensities from a ADF output file"), GABEDIT_TYPEFILE_MOLPRO,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_sample_2columns_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gboolean OK = TRUE; gint numberOfStates = 0; gdouble* energies = NULL; gdouble* intensities = NULL; gchar *FileName; FILE *fd; gdouble a; gdouble b; int ne = 0; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(FileName, "rb"); if(!fd) return FALSE; while(!feof(fd)) { if(!fgets(t,BSIZE,fd))break; ne = sscanf(t,"%lf %lf",&a,&b); if(ne==2) { numberOfStates++; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); energies[numberOfStates-1] = a; intensities[numberOfStates-1] = b; } } if(numberOfStates>0) { createUVSpectrumWin(numberOfStates, energies, intensities); } else { OK = FALSE; messageErrorFreq(FileName); } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(fd); return OK; } /********************************************************************************/ static void read_sample_2columns_file_dlg() { GtkWidget* filesel = file_chooser_open(read_sample_2columns_file, _("Read energies and intensities from a sample file(2columns : first = Energy(eV), second = intensity)"), GABEDIT_TYPEFILE_TXT,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ void createUVSpectrum(GtkWidget *parentWindow, GabEditTypeFile typeOfFile) { if(typeOfFile==GABEDIT_TYPEFILE_GABEDIT) read_gabedit_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_DALTON) read_dalton_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_MOLDEN) read_molden_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_MOLPRO) read_molpro_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_GAMESS) read_gamess_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_GAUSSIAN) read_gaussian_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_ADF) read_adf_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_MPQC) read_mpqc_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_ORCA) read_orca_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_FIREFLY) read_firefly_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_QCHEM) read_qchem_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_NWCHEM) read_nwchem_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_PSICODE) read_psicode_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_TXT) read_sample_2columns_file_dlg(); } /********************************************************************************/ GabeditSrc250/src/Spectrum/ECDSpectrum.c0000644000175100017510000006652413130665225020363 0ustar alloucheallouche/* ECDSpectrum.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Files/FileChooser.h" #include "../Common/Windows.h" #include "../Utils/GabeditXYPlot.h" #include "../Display/Vibration.h" #include "SpectrumWin.h" /********************************************************************************/ static void check_nm_ev_toggled(GtkToggleButton *togglebutton, gpointer user_data) { GtkWidget* xyplot = NULL; GList* data_list = NULL; GList* current = NULL; XYPlotWinData* data; gboolean nm = FALSE; GtkWidget* window = NULL; gdouble xmax = 0; gdouble ymax = 0; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); data_list = g_object_get_data(G_OBJECT (xyplot), "DataList"); if(!data_list) return; window = g_object_get_data(G_OBJECT (xyplot), "Window"); nm = gtk_toggle_button_get_active(togglebutton); current=g_list_first(data_list); for(; current != NULL; current = current->next) { gint loop; data = (XYPlotWinData*)current->data; for (loop=0; loopsize; loop++) { if(fabs(data->x[loop])>1e-10) { if(nm) data->x[loop]= 1239.8424121/data->x[loop]; else data->x[loop]= 1239.8424121/data->x[loop]; } else data->x[loop]= 1e-10; if(xmaxx[loop]) xmax = data->x[loop]; if(ymaxy[loop]) ymax = data->y[loop]; } } xmax = xmax*1.5; ymax = ymax*2.0; spectrum_win_set_xmin(window, 0.0); spectrum_win_set_xmax(window, xmax); spectrum_win_set_ymax(window, ymax); spectrum_win_set_half_width(window, fabs(xmax/50)); spectrum_win_reset_ymin_ymax(GTK_WIDGET(xyplot)); if(nm) { spectrum_win_set_xlabel(window, "nm"); } else { spectrum_win_set_xlabel(window, "eV"); } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /********************************************************************************/ static void createECDSpectrumWin(gint numberOfStates, gdouble* energies, gdouble* intensities) { GtkWidget* window = spectrum_win_new_with_xy(_("ECD/Visible spectrum"), numberOfStates, energies, intensities); GtkWidget* hbox = g_object_get_data(G_OBJECT (window), "HBoxData"); GtkWidget* xyplot = g_object_get_data(G_OBJECT (window), "XYPLOT"); GtkWidget* check_nm_ev = NULL; GtkWidget* tmp_hbox = NULL; spectrum_win_set_half_width(window, 0.05); spectrum_win_set_xmin(window, 0.0); set_icone(window); if(!hbox) return; tmp_hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), tmp_hbox, FALSE, FALSE, 30); gtk_widget_show(tmp_hbox); check_nm_ev = gtk_check_button_new_with_label("nm<=>eV"); gtk_box_pack_start(GTK_BOX(tmp_hbox), check_nm_ev, FALSE, FALSE, 4); gtk_widget_show(check_nm_ev); g_signal_connect(G_OBJECT(check_nm_ev), "toggled", G_CALLBACK(check_nm_ev_toggled), xyplot); spectrum_win_set_xlabel(window, "eV"); spectrum_win_set_ylabel(window, _("Intensity")); } /********************************************************************************/ static void messageErrorFreq(gchar* fileName) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I can not read energies from '%s' file\n"),fileName); Message(buffer,_("Error"),TRUE); } /********************************************************************************/ /* static void messageErrorInt(gchar* fileName) { gchar buffer[BSIZE]; sprintf(buffer,"Sorry, I can not read energies from '%s' file\n",fileName); Message(buffer,"Error",TRUE); } */ /********************************************************************************/ static gboolean read_gabedit_molden_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; gchar t[BSIZE]; gboolean OK; FILE *file; gint ne; gint numberOfStates = 0; gdouble* energies = NULL; gdouble* intensities = NULL; gdouble a; gdouble b; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); file = FOpen(FileName, "rb"); OK=FALSE; while(!feof(file)) { if(!fgets(t,BSIZE,file)) break; if(strstr(t,"[ECD")) { OK = TRUE; break; } } if(!OK) { messageErrorFreq(FileName); if(file) fclose(file); return FALSE; } while(!feof(file)) { if(!fgets(t,BSIZE,file)) break; if(strstr(t,"[")) break; if(this_is_a_backspace(t)) break; ne = sscanf(t,"%lf %lf",&a, &b); if(ne != 2) { messageErrorFreq(FileName); if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(file); return FALSE; } numberOfStates++; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); energies[numberOfStates-1] = a; intensities[numberOfStates-1] = b; } if(numberOfStates>0) { createECDSpectrumWin(numberOfStates, energies, intensities); } else { messageErrorFreq(FileName); } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(file); return TRUE; } /********************************************************************************/ static void read_gabedit_file_dlg() { GtkWidget* filesel = file_chooser_open(read_gabedit_molden_file, _("Read energies and intensities from a Gabedit file"), GABEDIT_TYPEFILE_GABEDIT,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static void read_molden_file_dlg() { GtkWidget* filesel = file_chooser_open(read_gabedit_molden_file, _("Read energies and intensities from a Molden file"), GABEDIT_TYPEFILE_MOLDEN,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_mpqc_file(GabeditFileChooser *SelecFile, gint response_id) { return FALSE; } /********************************************************************************/ static void read_mpqc_file_dlg() { GtkWidget* filesel = file_chooser_open(read_mpqc_file, _("Read energies and intensities from a MPQC output file"), GABEDIT_TYPEFILE_MPQC,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_molpro_file(GabeditFileChooser *SelecFile, gint response_id) { return FALSE; } /********************************************************************************/ static void read_molpro_file_dlg() { GtkWidget* filesel = file_chooser_open(read_molpro_file, _("Read energies and intensities from a Molpro output file"), GABEDIT_TYPEFILE_MOLPRO,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gint read_dalton_modes_MOLHES(FILE* file, gchar *FileName) { return 1; } /********************************************************************************/ static gboolean read_dalton_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; FILE *file; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); file = FOpen(FileName, "rb"); read_dalton_modes_MOLHES(file, FileName); fclose(file); return TRUE; } /********************************************************************************/ static void read_dalton_file_dlg() { GtkWidget* filesel = file_chooser_open(read_dalton_file, _("Read energies and intensities from a Dalton output file"), GABEDIT_TYPEFILE_DALTON,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_gamess_file(GabeditFileChooser *SelecFile, gint response_id) { return FALSE; } /********************************************************************************/ static void read_gamess_file_dlg() { GtkWidget* filesel = file_chooser_open(read_gamess_file, _("Read energies and intensities from a Gamess output file"), GABEDIT_TYPEFILE_GAMESS,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_firefly_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gboolean OK; gint numberOfStates = 0; gdouble* energies = NULL; gdouble* intensities = NULL; gchar *FileName; gchar** allreals = NULL; FILE *file; gint k = 0; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); file = FOpen(FileName, "rb"); if(!file) return FALSE; do { OK=FALSE; while(!feof(file)) { if(!feof(file)) { char* e = fgets(t,BSIZE,file);} if ( strstr( t," EXCITATION ENERGIES") ) { if(!feof(file)) { char* e = fgets(t,BSIZE,file);} if(!feof(file)) { char* e = fgets(t,BSIZE,file);} OK = TRUE; numberOfStates = 0; break; } } while(!feof(file) ) { if(!feof(file)) { char* e = fgets(t,BSIZE,file);} if(this_is_a_backspace(t)) break; allreals =gab_split (t); k = 0; while(allreals && allreals[k] && k<7) k++; if(k==7) { numberOfStates++; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); energies[numberOfStates-1] = atof(allreals[2]); intensities[numberOfStates-1] = atof(allreals[6]); } g_strfreev(allreals); allreals = NULL; } }while(!feof(file)); if(numberOfStates>0) { createECDSpectrumWin(numberOfStates, energies, intensities); } else { messageErrorFreq(FileName); } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(file); return TRUE; return FALSE; } /********************************************************************************/ static void read_firefly_file_dlg() { GtkWidget* filesel = file_chooser_open(read_firefly_file, _("Read energies and intensities from a FireFly output file"), GABEDIT_TYPEFILE_FIREFLY,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_gaussian_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gdouble* energies = NULL; gdouble* intensities = NULL; gchar *FileName; FILE *file; long int posEnergies = -1; long int posRotatoryStrengths = -1; gint numberOfStates = 0; gint numberOfStatesRotatoryStrengths = 0; gint i; gint idum; gdouble x,y,z; gint ne; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); file = FOpen(FileName, "rb"); if(!file) return FALSE; while(!feof(file)) { if(!fgets(t,BSIZE,file))break; if ( strstr( t,"Excitation energies and oscillator strengths:") ) { posEnergies = ftell(file); numberOfStates = 0; } if(strstr(t,"Excited State")&& strstr(t,"eV")) numberOfStates++; if ( strstr( t,"state") && strstr( t,"R(length)") ) { posRotatoryStrengths = ftell(file); numberOfStatesRotatoryStrengths = 0; while(!feof(file)) { if(!fgets(t,BSIZE,file))break; i = atoi(t); if(i==numberOfStatesRotatoryStrengths+1) numberOfStatesRotatoryStrengths++; else break; } } } /* printf("ns = %d nr = %d\n",numberOfStates,numberOfStatesRotatoryStrengths); printf("pe = %ld pR = %ld\n",posEnergies,posRotatoryStrengths); */ if(numberOfStates != numberOfStatesRotatoryStrengths || numberOfStates==0 || numberOfStatesRotatoryStrengths == 0 || posRotatoryStrengths > posEnergies || posRotatoryStrengths ==-1 || posEnergies==-1) { messageErrorFreq(FileName); fclose(file); return FALSE; } energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); fseek(file, posRotatoryStrengths, SEEK_SET); for(i=0;i1 && intensities[numberOfStates-1]>=0) { numberOfStates--; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); createECDSpectrumWin(numberOfStates, energies, intensities); } else { messageErrorFreq(fileName); } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(file); return TRUE; } /********************************************************************************/ static gboolean apply_qchem(GtkWidget *button,gpointer data) { GtkComboBox *combo = (GtkComboBox *)data; GtkWidget *window = g_object_get_data (G_OBJECT (button), "Window"); GtkTreeIter iter; gchar* type = NULL; gboolean res = FALSE; if (gtk_combo_box_get_active_iter (combo, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combo); gchar* fileName = g_object_get_data(G_OBJECT (combo), "FileName"); gtk_tree_model_get (model, &iter, 0, &type, -1); if(!type) return FALSE; if(!fileName) return FALSE; res = read_qchem_file_str(fileName, type); } gtk_widget_destroy(window); return res; } /********************************************************************************************************/ static GtkWidget *add_qchem_types_combo(GtkWidget *hbox, gint nTypes, gchar** listTypes) { GtkTreeIter iter; GtkTreeStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; gint i; store = gtk_tree_store_new (1,G_TYPE_STRING); for(i=0;i0) { createECDSpectrumWin(numberOfStates, energies, intensities); } else { messageErrorFreq(FileName); } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(fd); return TRUE; } /********************************************************************************/ static void read_orca_file_dlg() { GtkWidget* filesel = file_chooser_open(read_orca_file, _("Read energies and intensities from a Orca output file"), GABEDIT_TYPEFILE_ORCA,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_adf_file(GabeditFileChooser *SelecFile, gint response_id) { return FALSE; } /********************************************************************************/ static void read_adf_file_dlg() { GtkWidget* filesel = file_chooser_open(read_adf_file, _("Read energies and intensities from a ADF output file"), GABEDIT_TYPEFILE_MOLPRO,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ static gboolean read_sample_2columns_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gboolean OK = TRUE; gint numberOfStates = 0; gdouble* energies = NULL; gdouble* intensities = NULL; gchar *FileName; FILE *file; gdouble a; gdouble b; int ne = 0; if(response_id != GTK_RESPONSE_OK) return FALSE; FileName = gabedit_file_chooser_get_current_file(SelecFile); file = FOpen(FileName, "rb"); if(!file) return FALSE; while(!feof(file)) { if(!fgets(t,BSIZE,file))break; ne = sscanf(t,"%lf %lf",&a,&b); if(ne==2) { numberOfStates++; energies = g_realloc(energies, numberOfStates*sizeof(gdouble)); intensities = g_realloc(intensities, numberOfStates*sizeof(gdouble)); energies[numberOfStates-1] = a; intensities[numberOfStates-1] = b; } } if(numberOfStates>0) { createECDSpectrumWin(numberOfStates, energies, intensities); } else { OK = FALSE; messageErrorFreq(FileName); } if(energies) g_free(energies); if(intensities) g_free(intensities); fclose(file); return OK; } /********************************************************************************/ static void read_sample_2columns_file_dlg() { GtkWidget* filesel = file_chooser_open(read_sample_2columns_file, _("Read energies and intensities from a sample file(2columns : first = Energy(eV), second = intensity)"), GABEDIT_TYPEFILE_TXT,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } /********************************************************************************/ void createECDSpectrum(GtkWidget *parentWindow, GabEditTypeFile typeOfFile) { if(typeOfFile==GABEDIT_TYPEFILE_GABEDIT) read_gabedit_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_DALTON) read_dalton_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_MOLDEN) read_molden_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_MOLPRO) read_molpro_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_GAMESS) read_gamess_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_GAUSSIAN) read_gaussian_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_ADF) read_adf_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_MPQC) read_mpqc_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_ORCA) read_orca_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_FIREFLY) read_firefly_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_QCHEM) read_qchem_file_dlg(); if(typeOfFile==GABEDIT_TYPEFILE_TXT) read_sample_2columns_file_dlg(); } /********************************************************************************/ GabeditSrc250/src/NetWork/0000755000175100017510000000000013130743374015655 5ustar allouchealloucheGabeditSrc250/src/NetWork/FilesTransfer.c0000644000175100017510000000526113130665225020572 0ustar alloucheallouche/*FilesTransfert.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ /**************************************************************** * * * Files Transfer between local host and a remote host * * ftp Client for a local Windows 95/98 system * * rcp Client for a local unix/Linux system * * * ****************************************************************/ #include "../../Config.h" #include /* definition of G_OS_WIN32 if windows */ #include "../Common/Global.h" #include "../NetWork/Ftp.h" #include "../NetWork/Scp.h" /*********************************************************************/ int get_file(char* fout,char* ferr,char* filename,char* localdir,char* remotedir, char *hostname,char *username,char* password) { if(fileopen.netWorkProtocol == GABEDIT_NETWORK_FTP_RSH) { return ftp_get_file(fout,ferr,filename,localdir,remotedir,hostname,username,password); } else { return scp_get_file(fout,ferr,filename,localdir,remotedir,hostname,username,password); } } /******************************************************/ int put_file(char* fout,char* ferr,char* filename,char* localdir,char* remotedir, char *hostname,char *username,char* password) { if(fileopen.netWorkProtocol == GABEDIT_NETWORK_FTP_RSH) { return ftp_put_file(fout,ferr,filename,localdir,remotedir,hostname,username,password); } else { return scp_put_file(fout,ferr,filename,localdir,remotedir,hostname,username,password); } } GabeditSrc250/src/NetWork/FilesTransfer.h0000644000175100017510000000323713130665225020600 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_FILESTRANSFER_H__ #define __GABEDIT_FILESTRANSFER_H__ int get_file(char* fout,char* ferr,char* filename,char* localdir,char* remotedir, char *hostname,char *username,char* password); int put_file(char* fout,char* ferr,char* filename,char* localdir,char* remotedir, char *hostname,char *username,char* password); #endif /* __GABEDIT_FILESTRANSFER_H__ */ GabeditSrc250/src/NetWork/Makefile0000644000175100017510000000066213130664665017326 0ustar allouchealloucheOBJECTS = Ftp.o Process.o Rsh.o Ssh.o Scp.o FilesTransfer.o RemoteCommand.o Batch.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/NetWork/Process.h0000644000175100017510000000306413130665225017445 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_PROCESS_H__ #define __GABEDIT_PROCESS_H__ void run_process_all(gboolean remote); void run_process_user(gboolean remote,gchar *remoteuser,gchar *remotehost,gchar *remotepassword); void create_process_remote(gboolean all); #endif /* __GABEDIT_PROCESS_H__ */ GabeditSrc250/src/NetWork/Process.c0000644000175100017510000010677113130665225017451 0ustar alloucheallouche/* Process.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Run.h" #include "../Common/Windows.h" #include "../NetWork/RemoteCommand.h" #include "../NetWork/Process.h" #ifndef G_OS_WIN32 #include #include #include #include #include #endif /* G_OS_WIN32*/ static gint Nlist = 0; static gint NlistTitle = 0; static gchar** Titles = NULL; static gchar*** List = NULL; static GtkWidget* KillButton1 = NULL; static GtkWidget* KillButton2 = NULL; static GtkWidget* KillAllButton = NULL; static GtkWidget* WinUserProcess = NULL; static gchar selectedRow[100] = "-1"; static GtkWidget* EntryRemote = NULL; static GtkWidget* EntryLogin = NULL; static GtkWidget* EntryPassWord = NULL; static gboolean Remote = FALSE; static gchar* RemoteHost = NULL; static gchar* RemoteUser = NULL; static gchar* RemotePassWord = NULL; /********************************************************************************/ static void destroy_win_user_process(GtkWidget* Win, gpointer data) { destroy_children(Win); WinUserProcess = NULL; } /********************************************************************************/ static gboolean authorized_type(gchar* type) { gchar *Atypes[]={"UID","PID","PPID","CMD"}; gint i; for(i=0;i<4;i++) if(strstr(type,Atypes[i])) return TRUE; return FALSE; } /********************************************************************************/ static gchar* get_title_bordure() { gchar *str = NULL; gchar *dump = NULL; gchar *temp = NULL; gint i = 0; str = g_strdup_printf(" "); for(i=0;i-1) { NumChildren = g_malloc(sizeof(gint)); NumChildren[0] = num; (*Numb)++; } else return NULL; while(num>-1) { num = get_num_child(num); if(num>-1) { NumChildren = g_realloc(NumChildren,(*Numb+1)*sizeof(gint)); NumChildren[*Numb] = num; (*Numb)++; } } return NumChildren; } /********************************************************************************/ static gchar *get_string_all_children(gint row) { gint Numb = 0; gint *NumChildren = NULL; gint j; gchar* rowprocess = NULL; gchar* str = NULL; gchar* dump = NULL; NumChildren = get_all_children(row,&Numb); if(Numb>0) str = get_title_process(); for(j=0;j0) { for(i=0;i0) { nlisthost = recenthosts.nhosts; for(i=0;ichild; g_object_set_data (G_OBJECT (entry[0]), "Combo",combo); g_signal_connect(G_OBJECT(GTK_COMBO_BOX(combo)), "changed",G_CALLBACK(changed_host),entry); i = 1; add_label_table(Table,_("Login "),(gushort)(i),0); add_label_table(Table," : ",(gushort)(i),1); combo = create_combo_box_entry(tlistuser,nlistuser,TRUE,-1,-1); gtk_table_attach(GTK_TABLE(Table),combo,2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); entry[1] = GTK_BIN(combo)->child; g_object_set_data (G_OBJECT (entry[1]), "Combo",combo); i = 2; if(fileopen.netWorkProtocol==GABEDIT_NETWORK_SSH) { #ifdef G_OS_WIN32 add_label_table(Table,_("Password "),(gushort)(i),0); add_label_table(Table," : ",(gushort)(i),1); entry[i] = gtk_entry_new (); gtk_entry_set_visibility(GTK_ENTRY (entry[i]),FALSE); gtk_table_attach(GTK_TABLE(Table),entry[i],2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); #else entry[i] = gtk_entry_new (); #endif } else { entry[i] = gtk_entry_new (); } if(fileopen.remotehost) gtk_entry_set_text(GTK_ENTRY(entry[0]),fileopen.remotehost); if(fileopen.remoteuser) gtk_entry_set_text(GTK_ENTRY(entry[1]),fileopen.remoteuser); if(fileopen.remotepass) gtk_entry_set_text(GTK_ENTRY(entry[2]),fileopen.remotepass); for (i=0;iactive) scom = g_strdup("kill"); else scom = g_strdup("kill -KILL"); /* killing of children before */ if(GTK_TOGGLE_BUTTON (KillAllButton)->active) { NumChildren = get_all_children(atoi(selectedRow),&Numb); if(Numb>0) { for(i=Numb-1;i>=0;i--) { command = g_strdup_printf("%s %s",scom,get_pid(NumChildren[i])); if(Remote) { /*rsh (fout,ferr,command, RemoteUser,RemoteHost);*/ remote_command (fout,ferr,command,RemoteHost,RemoteUser,RemotePassWord); t = cat_file(ferr,FALSE); } else { t = run_command(command); } if(t) { Message(t,_("Info"),TRUE); g_free(t); } g_free(command); } if(NumChildren) g_free(NumChildren); } } /* killing of parent */ command = g_strdup_printf("%s %s",scom,get_pid(atoi(selectedRow))); if(Remote) { /* rsh (fout,ferr,command, RemoteUser,RemoteHost);*/ remote_command (fout,ferr,command,RemoteHost,RemoteUser,RemotePassWord); t = cat_file(ferr,FALSE); } else { t = run_command(command); } if(WinUserProcess) { destroy_children(WinUserProcess); WinUserProcess = NULL; run_process_user(Remote,RemoteUser,RemoteHost,RemotePassWord); } if(t) { if(!GTK_TOGGLE_BUTTON (KillAllButton)->active) Message(t,_("Error"),TRUE); g_free(t); } g_free(scom); g_free(command); g_free(ferr); g_free(fout); } /********************************************************************************/ static GtkWidget* create_options_frame(GtkWidget *hbox) { GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *Table; GtkWidget *button1; GtkWidget *button2; GtkWidget *button3; frame = gtk_frame_new (_("Options")); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_box_pack_start (GTK_BOX( hbox), frame, TRUE, TRUE, 3); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(2,2,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); button1 = gtk_radio_button_new_with_label( NULL,"kill " ); add_widget_table(Table,button1,0,0); button2 = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (button1)), "kill -KILL "); add_widget_table(Table,button2,0,1); button3 = gtk_check_button_new_with_label(_("Kill all children process ")); add_widget_table(Table,button3,1,0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button2), TRUE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button3), TRUE); KillButton1 = button1; KillButton2 = button2; KillAllButton = button3; return frame; } /********************************************************************************/ static void create_kill_process(GtkWidget*Win,gint row) { GtkWidget *fp; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *hbox; GtkWidget *button; gchar *title = g_strdup_printf(_("Kill a process")); /* Principal Window */ fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(fp),title); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Fenetre)); gtk_widget_realize(fp); init_child(fp,gtk_widget_destroy,_(" Kill ")); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)destroy_children,NULL); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); vboxall = create_vbox(fp); vboxwin = vboxall; frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_add(GTK_CONTAINER(vboxall),frame); gtk_widget_show (frame); vboxall = create_vbox(frame); hbox = create_hbox(vboxall); frame = create_label_frame(hbox,row); hbox = create_hbox(vboxall); frame = create_children_frame(hbox,row); hbox = create_hbox(vboxall); frame = create_options_frame(hbox); /* boutons box */ hbox = create_hbox(vboxwin); gtk_widget_realize(fp); button = create_button(fp,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)destroy_children,GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(fp,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)kill_process,GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)destroy_children,GTK_OBJECT(fp)); gtk_widget_show_all(fp); } /*************************************************************************************************/ static void eventDispatcher(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; GtkTreeIter iter; GtkTreeModel *model; if (!event) return; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); sprintf(selectedRow ,"%s",gtk_tree_path_to_string(path)); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free(path); if (event->type == GDK_2BUTTON_PRESS && ((GdkEventButton *) event)->button == 1) create_kill_process(widget,atoi(selectedRow)); } else sprintf(selectedRow,"-1"); } GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event); } /********************************************************************************/ static void init_list() { Nlist = 0; NlistTitle = 0; Titles = NULL; List = NULL; } /********************************************************************************/ static void free_list() { gint i; gint j; if(Nlist == 0 || NlistTitle == 0) { init_list(); return; } if(Titles) { for(i=0;iNlistTitle) { gchar buffer[BSIZE]; gint i; for(i=1; i<=nListAll-NlistTitle;i++) { if(strlen(List[Nlist][NlistTitle-1+i])<1) continue; sprintf(buffer,"%s",List[Nlist][NlistTitle-1]); sprintf(List[Nlist][NlistTitle-1],"%s %s",buffer,List[Nlist][NlistTitle-1+i]); } } Nlist++; } fclose(fd); #ifdef G_OS_WIN32 unlink (namefile); #else dump = g_strdup_printf("rm %s",namefile); {int ierre = system(dump);} g_free(dump); #endif } g_free(t); } /********************************************************************************/ static GtkWidget* create_list_result_command(GtkWidget* gtklist,gchar* strerr,gchar* title) { GtkWidget *Win; GtkWidget *frame; GtkWidget *scr; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *button; GtkWidget* Text; GtkWidget* Frame[2]; Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),title); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_widget_realize(Win); init_child(Win,gtk_widget_destroy,_(" List of process ")); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)destroy_children,NULL); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); vboxall = create_vbox(Win); vboxwin = vboxall; frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_add(GTK_CONTAINER(vboxall),frame); gtk_widget_show (frame); vboxall = create_vbox(frame); Frame[0] = NULL; Frame[1] = NULL; if(gtklist) { frame = gtk_frame_new (_("Output")); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_add(GTK_CONTAINER(vboxall),frame); gtk_widget_show (frame); vbox = create_vbox(frame); scr=gtk_scrolled_window_new(NULL,NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scr), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX (vbox), scr,TRUE, TRUE, 2); gtk_container_add(GTK_CONTAINER(scr),gtklist); set_base_style(gtklist,50000,50000,50000); Frame[0] = frame; } Text = NULL; if(strerr) { Text = create_text_widget(vboxall,_("Error"),&Frame[1]); set_font (Text,FontsStyleResult.fontname); set_base_style(Text,FontsStyleResult.BaseColor.red ,FontsStyleResult.BaseColor.green ,FontsStyleResult.BaseColor.blue); set_text_style(Text,FontsStyleResult.TextColor.red ,0,0); } /* boutons box */ hbox = gtk_hbox_new (FALSE, 4); gtk_box_pack_start (GTK_BOX(vboxwin), hbox, FALSE, FALSE, 5); gtk_box_set_homogeneous(GTK_BOX(hbox), FALSE); gtk_widget_realize(Win); button = create_button(Win,_("OK")); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, FALSE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)destroy_win_user_process,GTK_OBJECT(Win)); gtk_widget_show (button); gtk_window_set_default_size (GTK_WINDOW(Win), 4*ScreenWidth/5, 4*ScreenHeight/5); if(Frame[0]) { gtk_widget_set_size_request(GTK_WIDGET(Frame[0]),-1,3*ScreenHeight/5); if(Frame[1]) gtk_widget_set_size_request(GTK_WIDGET(Frame[1]),-1,1*ScreenHeight/10); } if(Text && strerr) gabedit_text_insert (GABEDIT_TEXT(Text), NULL, NULL, NULL,strerr,-1); return Win; } /********************************************************************************/ void run_process_all(gboolean remote) { gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *command; GtkWidget* Text[2]; GtkWidget* Frame[2]; GtkWidget* Win; gchar *strout; gchar *Uidstrout; gchar *strerr; G_CONST_RETURN gchar *remoteuser = NULL; G_CONST_RETURN gchar *remotehost = NULL; G_CONST_RETURN gchar *remotepassword = NULL; gchar *title = NULL; Remote = remote; #ifdef G_OS_WIN32 if(!remote) { Message(_("Sorry, This option is available for unix system only"),_("Error"),TRUE); g_free(fout); g_free(ferr); return; } #endif if(remote) { remotehost = gtk_entry_get_text(GTK_ENTRY(EntryRemote)); remoteuser = gtk_entry_get_text(GTK_ENTRY(EntryLogin)); remotepassword = gtk_entry_get_text(GTK_ENTRY(EntryPassWord)); command = g_strdup_printf("ps -lef"); title = g_strdup_printf(_("All process in %s host "),remotehost); /*rsh (fout,ferr,command, remoteuser,remotehost);*/ remote_command (fout,ferr,command,remotehost,remoteuser,remotepassword); g_free(command); add_host(remotehost,remoteuser,"","tmp"); } else { command = g_strdup("ps -lef"); title = g_strdup_printf(_("All process in local host ")); run_local_command(fout,ferr,command,FALSE); g_free(command); } Win = create_text_result_command(Text,Frame,title); g_free(title); strout = cat_file(fout,FALSE); strerr = cat_file(ferr,FALSE); if(!strout && !strerr) destroy_children(Win); else { if(strout) { Uidstrout = strout; while(Uidstrout[0] != '\0' && Uidstrout[0] != 'U' && Uidstrout[0] != 'I' && Uidstrout[0] != 'D') Uidstrout++; gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,Uidstrout,-1); g_free(strout); } if(strerr) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,strerr,-1); g_free(strerr); } gtk_widget_show_all(Win); if(!strout) gtk_widget_hide(Frame[0]); } g_free(fout); g_free(ferr); } /********************************************************************************/ void run_process_user(gboolean remote,gchar *remoteuser,gchar *remotehost,gchar *remotepassword) { gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *command; GtkWidget* gtklist; GtkWidget* Win; gchar *strerr; G_CONST_RETURN gchar *localuser = NULL; gchar localhost[100]; gchar *title = NULL; Remote = remote; #ifdef G_OS_WIN32 if(!remote) { Message(_("Sorry, This option is available for unix system only"),_("Error"),TRUE); g_free(fout); g_free(ferr); return; } #else localuser = get_local_user(); gethostname(localhost,100); #endif /* G_OS_WIN32 */ if(!localuser && !remote) { Message(_("Sorry, I can not obtain user name"),_("Error"),TRUE); g_free(fout); g_free(ferr); return; } if(remote) { if(!remotehost) { G_CONST_RETURN gchar* remotehost0 = gtk_entry_get_text(GTK_ENTRY(EntryRemote)); if(RemoteHost) g_free(RemoteHost); RemoteHost = g_strdup(remotehost0); remotehost = g_strdup(remotehost0); } if(!remoteuser) { G_CONST_RETURN gchar* remoteuser0 = gtk_entry_get_text(GTK_ENTRY(EntryLogin)); if(RemoteUser) g_free(RemoteUser); RemoteUser = g_strdup(remoteuser0); remoteuser = g_strdup(remoteuser0); } if(!remotepassword) { G_CONST_RETURN gchar* remotepassword0 = gtk_entry_get_text(GTK_ENTRY(EntryPassWord)); if(RemotePassWord) g_free(RemotePassWord); RemotePassWord = g_strdup(remotepassword0); remotepassword = g_strdup(remotepassword0); } command = g_strdup_printf("ps -fu %s",remoteuser); remote_command (fout,ferr,command,remotehost,remoteuser,remotepassword); g_free(command); add_host(remotehost,remoteuser,"","tmp"); title = g_strdup_printf(_("Process in host : \"%s\" ; for user : \"%s\" "),remotehost,remoteuser); } else { command = g_strdup_printf("ps -lfu %s",localuser); run_local_command(fout,ferr,command,FALSE); g_free(command); title = g_strdup_printf(_("Process in host : \"%s\" ; for user : \"%s\" "),localhost,localuser); } if(WinUserProcess) destroy_children(WinUserProcess); get_list_from_file(fout); reduce_list(); gtklist = create_gtk_list_process(); strerr = cat_file(ferr,FALSE); Win = create_list_result_command(gtklist,strerr,title); g_free(title); WinUserProcess = Win; gtk_widget_show_all(Win); g_free(fout); g_free(ferr); } /********************************************************************************/ GabeditSrc250/src/NetWork/Rsh.h0000644000175100017510000000275013130665225016564 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_RSH_H__ #define __GABEDIT_RSH_H__ void rsh (char *fout,char *ferr,const char* cmd, const char* hostname,const char* username,const char *password); #endif /* __GABEDIT_RSH_H__ */ GabeditSrc250/src/NetWork/Ftp.c0000644000175100017510000004513713130665225016562 0ustar alloucheallouche/*Ftp.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ /**************************************************************** * * * Files Transfer between local host and a remote host * * ftp Client for a local Windows 95/98 system * * rcp Client for a local unix/Linux system * * * ****************************************************************/ #include "../../Config.h" #include /* definition of G_OS_WIN32 if windows */ #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Common/Status.h" #ifndef BUFSIZ #define BUFSIZ 8192 #endif #ifdef G_OS_WIN32 #include #include #include #include #include #include #include #else /* G_OS_WIN32 */ #include #include #include #include #include #include #include #include #include #include #include #endif /* G_OS_WIN32 */ /*****************************************/ char *HostName = NULL; char *UserName = NULL; char *PassWord = NULL; char *home; static int data = -1; static struct sockaddr_in remote_addr; static int cinput = -1; static int coutput = -1; static FILE* FileErr = NULL; static FILE* FileOut = NULL; static long FileSize = 0; /*********************************************************************/ static void CloseSocket(int s) { #ifndef G_OS_WIN32 close(s); #else closesocket(s); #endif } /*********************************************************************/ int ReadMsg(int cin, char *szBuffer, int len) { int ret; if( (ret=recv(cin,szBuffer,len,0)) <= 0) return 0; if(szBuffer[strlen(szBuffer)-2]=='\r') szBuffer[strlen(szBuffer)-2]=' '; return ret; } /*********************************************************************/ int SendMsg(int cout, char *szBuffer, int len) { if( send(cout,szBuffer,len,0) <= 0) return 0; return 1; } /************************************************ * put_file_to_data : put file in data socket * *************************************************/ long put_file_to_data(int fout,char* filename) { FILE *fin = NULL; long bytes = 0; char c; char buf[2]; buf[1] = '\0'; if( (fin = FOpen(filename,"r")) != NULL) { while (!feof(fin) && (c = getc(fin)) != EOF) { if(c == '\n') { buf[0] ='\r'; SendMsg(fout,buf,1); } buf[0] =c; SendMsg(fout,buf,1); bytes++; } fclose(fin); return bytes; } return 0; } /**************************************************** * get_file_from_data : get file from data socket * ****************************************************/ long get_file_from_data(int din,char* filename) { FILE *fout = NULL; long bytes = 0; char buf[2]; long step = FileSize/100; gchar* str = g_strdup_printf(_("Get \"%s\" File from \"%s\" host : %%p%%%%"),filename,HostName); buf[1] = '\0'; if( (fout = FOpen(filename,"w")) != NULL && !stopDownLoad) { while (ReadMsg(din,buf, 1)>0 && buf[0] != EOF && !stopDownLoad) { if(buf[0] != '\r') putc(buf[0], fout); bytes++; if(bytes%step == 0) { progress_connection((gdouble)0.01,str,FALSE); } } fclose(fout); g_free(str); return bytes; } return 0; } /**************************************** * get_reply : get replay of ftp server * ****************************************/ int get_reply() { char reply_string[BUFSIZ]; memset (reply_string, 0, BUFSIZ); #ifdef G_OS_WIN32 Sleep(50); #endif for (;;) { if(ReadMsg(cinput,reply_string, sizeof(reply_string))<=0) { fprintf(FileErr,_("Error in get_reply\n")); fflush(FileErr); return 1; }; fprintf(FileOut,"%s",reply_string); fflush(FileOut); if(strstr(reply_string,"incorrect") || strstr(reply_string,"failed")) { fprintf(FileErr, "Login failed.\n"); return 1; } if(strstr(reply_string,"No such file or directory")) { fprintf(FileErr, "No such file or directory\n"); return 2; } if(strstr(reply_string,"command not understood")) { fprintf(FileErr, "command not understood\n"); return 3; } return 0; } } /************************************************ * ftp_command : execute command in ftp connection * ************************************************/ int ftp_command(char *fmt,...) { va_list ap ; char cmd_string[BUFSIZ]; memset (cmd_string, 0, BUFSIZ); if (coutput<0) { fprintf (FileErr,"No control connection for command\n"); return -1; } va_start(ap,fmt); vsprintf(cmd_string, fmt, ap); va_end(ap); strcat(cmd_string,"\r\n"); SendMsg(cinput,cmd_string,strlen(cmd_string)); return get_reply() ; } /************************************************************ * data_connection : new socket for data * ************************************************************/ int data_connection(char *mode,char *cmd,char *filename) { struct sockaddr_in data_addr; struct sockaddr_in from_addr; int s; char *pos; char *pos1; int datain = -1; #ifdef G_OS_WIN32 gint len = sizeof (data_addr); #else socklen_t len = sizeof (data_addr); #endif memset((char *)&data_addr,0, sizeof (data_addr)); data_addr.sin_addr.s_addr = INADDR_ANY;; data_addr.sin_family = AF_INET; if (data != -1) close (data); data = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (getsockname(cinput, (struct sockaddr *)&data_addr, &len) < 0) { fprintf(FileErr,"ftp: getsockname"); return -1; } data_addr.sin_port = 0; if (bind(data, (struct sockaddr *)&data_addr, sizeof (data_addr)) < 0) { fprintf(FileErr,"ftp: bind"); return -1; } if (getsockname(data, (struct sockaddr *)&data_addr, &len) < 0) { fprintf(FileErr,"ftp: getsockname"); return -1; } if (listen(data, 1) < 0) { fprintf(FileErr,"ftp: listen"); return -1; } pos = (char *) &data_addr.sin_addr; pos1 = (char *) &data_addr.sin_port; /* printf ("PORT %d,%d,%d,%d,%d,%d\r\n", pos[0] & 0xff, pos[1] & 0xff, pos[2] & 0xff, pos[3] & 0xff, pos1[0] & 0xff, pos1[1] & 0xff); */ if( ftp_command ( "PORT %d,%d,%d,%d,%d,%d", pos[0] & 0xff, pos[1] & 0xff, pos[2] & 0xff, pos[3] & 0xff, pos1[0] & 0xff, pos1[1] & 0xff ) != 0) return -1; if(ftp_command(cmd,filename) != 0) return -1; if( (datain = data)<0) { fprintf(FileErr,"ftp: fdopen"); return -1; } s = accept(datain, (struct sockaddr *) &from_addr, &len); if (s < 0) { fprintf(FileErr,"ftp: accept"); CloseSocket(data); data = -1; return -1; } CloseSocket(data); data = s; return data; } /******************************************** * login : put user name and password name * ********************************************/ int login(char* host,char *user,char *pass) { int n = 0; n = ftp_command("USER %s", user); if (n == 0) { n = ftp_command("PASS %s", pass); } else return -1; if (n != 0) { fflush(FileErr); return -1; } return 0; } #ifdef G_OS_WIN32 /************************************************ * hostCheck : check the remote host name and * * fill the server address structure * * Window version * *************************************************/ static gboolean hostCheck (const char* hostname) { HostName = NULL; memset(&remote_addr, 0, sizeof(remote_addr)); remote_addr.sin_addr.s_addr=inet_addr(hostname); remote_addr.sin_family = AF_INET; if(remote_addr.sin_addr.s_addr==(u_long)INADDR_NONE) { /* we must have gotten a host name instead of an IP address; resolve! */ struct hostent* hostInfo=gethostbyname(hostname); if(!hostInfo) { fprintf(FileErr,"Invalid hostname!"); return FALSE; } remote_addr.sin_family = hostInfo->h_addrtype; memcpy((void*)&remote_addr.sin_addr.s_addr, hostInfo->h_addr, hostInfo->h_length); } HostName = g_strdup(hostname); return TRUE; } /************************************************************************ * rresvport : the windows hack of rresvport; * * bind a socket to a reserved port using the given protocol, if any * * Window version * ************************************************************************/ static int rresvport (u_short* alport, int sProto) { struct sockaddr_in sin; int s; sin.sin_family=AF_INET; sin.sin_addr.s_addr=INADDR_ANY; s=socket(AF_INET, SOCK_STREAM, sProto); if(s<0) return -1; for((*alport)=IPPORT_RESERVED-1; (*alport)>IPPORT_RESERVED/2; (*alport)--) { sin.sin_port=htons((u_short)(*alport)); if(bind(s, (struct sockaddr*)&sin, sizeof(sin))==0) return s; if(WSAGetLastError()!=WSAEADDRINUSE) break; } /* ran out of available ports or weird error; shouldn't happen too often...*/ closesocket(s); return -1; } /******************************************************** * initSocket : standard socket initialization procedure * * Window version * *********************************************************/ static int initSocket () { /* get port number for ftp */ struct servent FAR* sp=getservbyname("ftp", "tcp"); LPPROTOENT lpProto; SOCKET ftpClient; /* the local rsh port; determined dynamically */ u_short ftpPort; /* the rsh protocol ("tcp") */ u_short ftpProto; int on=1; struct linger linger; /* struct hostent *hp = NULL;*/ if(sp==NULL) { fprintf(FileErr, "Cannot determine port number for the ftp client."); return INVALID_SOCKET; } remote_addr.sin_port = sp->s_port; /* get protocol number for tcp */ lpProto=getprotobyname("tcp"); if(!lpProto) ftpProto = IPPROTO_TCP; else ftpProto = lpProto->p_proto; /* create socket */ ftpClient=rresvport(&ftpPort, ftpProto); if(ftpClient==INVALID_SOCKET) { fprintf(FileErr, "Cannot allocate socket for the ftp client."); return INVALID_SOCKET; } if(setsockopt(ftpClient, SOL_SOCKET, SO_KEEPALIVE, (char*)&on, sizeof(on))<0) { fprintf(FileErr, "Cannot set SO_KEEPALIVE!\n"); return INVALID_SOCKET; } linger.l_onoff=1; linger.l_linger=60; if(setsockopt(ftpClient, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(linger))<0) { fprintf(FileErr,"Cannot set SO_LINGER!\n"); return INVALID_SOCKET; } return ftpClient; } #else /************************************************ * hostCheck : check the remote host name and * * fill the server address structure * * Unix version * *************************************************/ static gboolean hostCheck (const char* hostname) { struct hostent *hp = NULL; memset((char *)&remote_addr, 0,sizeof (remote_addr)); remote_addr.sin_addr.s_addr = inet_addr(hostname); if (remote_addr.sin_addr.s_addr != (u_long)INADDR_NONE) { remote_addr.sin_family = AF_INET; HostName = g_strdup(hostname); } else { hp = gethostbyname(hostname); if (!hp) { fprintf(FileErr, "ftp: unknown host %s ", hostname); return FALSE; } remote_addr.sin_family = hp->h_addrtype; memcpy(&remote_addr.sin_addr,hp->h_addr_list[0],hp->h_length); HostName = g_strdup(hp->h_name); } return TRUE; } /******************************************************** * initSocket : standard socket initialization procedure * * Unix version * *********************************************************/ static int initSocket () { struct servent *sp; int s; s = socket(remote_addr.sin_family, SOCK_STREAM, 0); if (s < 0) { fprintf(FileErr,"ftp: socket"); return -1; } sp = getservbyname("ftp", "tcp"); remote_addr.sin_port = sp->s_port; return s; } #endif /*G_OS_WIN32*/ /******************************************** * tcpopen : open tcp connection * ********************************************/ int tcpopen(char *host) { int s; #ifdef G_OS_WIN32 gint len; #else socklen_t len; #endif #ifdef G_OS_WIN32 if( !winsockCheck(FileErr) ) return -1; #endif if( !hostCheck(host) ) return -1; if((s = initSocket())<0) return -1; while (connect(s, (struct sockaddr *)&remote_addr, sizeof (remote_addr)) < 0) { fprintf(FileErr,"ftp: connection impossible"); return -1; } len = sizeof (remote_addr); if (getsockname(s, (struct sockaddr *)&remote_addr, &len) < 0) { fprintf(FileErr,"ftp: getsockname"); CloseSocket(s); return -1; } cinput = s; coutput = s; if (cinput<0 || coutput <0) { if(s>=0) CloseSocket(s); return -1; } return get_reply(); } /********************************************************************************/ void ftp_disconnect() { if (data != -1) CloseSocket(data); data = -1; if(coutput) #ifndef G_OS_WIN32 ftp_command("QUIT"); #endif if(FileOut) fclose(FileOut); FileOut = NULL; if(FileErr) fclose(FileErr); FileErr = NULL; if(HostName) g_free(HostName); HostName = NULL; if(UserName) g_free(UserName); UserName = NULL; if(PassWord) g_free(PassWord); PassWord = NULL; #ifdef G_OS_WIN32 if(cinput) CloseSocket(cinput); if(coutput) CloseSocket(coutput); shutdown(coutput, 2); #else if(cinput) CloseSocket(cinput); #endif cinput = -1; coutput = -1; #ifdef G_OS_WIN32 WSACleanup(); #endif } /********************************************************************************/ int ftp_connection(char *hostname,char *username,char* password) { int code = 0; if(tcpopen(hostname) == 0) { if((code = login(hostname,username,password))!=0) { return code; } UserName = g_strdup(username); PassWord = g_strdup(password); code = ftp_command("PWD"); if(code != 0) return code; code = ftp_command("TYPE %s", "A"); if(code != 0) return code; return 0; } return -1; } /*********************************************************************/ static long get_file_size(char* filename) { char cmd_string[BUFSIZ]; char reply_string[BUFSIZ]; long size; int i; memset (cmd_string, 0, BUFSIZ); if (coutput<0) { fprintf (FileErr,"No control connection for command\n"); return -1; } sprintf(cmd_string,"SIZE %s\r\n",filename); ftp_command("TYPE %s", "A"); SendMsg(cinput,cmd_string,strlen(cmd_string)); memset (reply_string, 0, BUFSIZ); #ifdef G_OS_WIN32 Sleep(50); #endif if(ReadMsg(cinput,reply_string, sizeof(reply_string))<=0) { fprintf(FileErr,"Error in get_file_size\n"); fflush(FileErr); return -1; } if(strstr(reply_string,"No such file or directory")) { fprintf(FileErr, "No such file or directory\n"); return -1; } if(strstr(reply_string,"command not understood")) { fprintf(FileErr, "command not understood\n"); return -1; } if(strstr(reply_string,":")) { sscanf(strstr(reply_string,":")+1,"%ld",&size); } else sscanf(reply_string,"%d %ld",&i,&size); return size; } /*********************************************************************/ int ftp_get_file(char* fout,char* ferr,char* filename,char* localdir,char* remotedir, char *hostname,char *username,char* password) { int finput = -1; int code = 0; long bytes = 0; gchar* str = g_strdup_printf(_("Get \"%s\" File from remote host : %%p%%"),filename); FileOut = FOpen(fout,"w"); FileErr = FOpen(ferr,"w"); if( !FileOut || !FileErr) { return -1; } show_progress_connection(); progress_connection(0,_("Connecting...."),FALSE); if( !cinput || !coutput || !HostName || strcmp(HostName,hostname) || !UserName || strcmp(UserName,username) ) { if( (code = ftp_connection(hostname,username,password)) != 0) goto closeall; } if( (code = chdir(localdir)) != 0) goto closeall; if( (code = ftp_command("CWD %s",remotedir)) != 0) goto closeall; progress_connection(0,"Get File size ",FALSE); FileSize = get_file_size(filename); /* if( (code = ftp_command("SIZE %s",filename)) != 0) goto closeall; */ progress_connection(0,"Data connecting....",FALSE); if( (finput = data_connection("r","RETR %s",filename))<0) { code = -1; goto closeall; } progress_connection(0,str,FALSE); if( (bytes = get_file_from_data(finput,filename)) == 0) { code = -1; goto closeall; } if (data != -1) { CloseSocket(data); #ifdef G_OS_WIN32 shutdown(data, 2); #endif } data = -1; finput = -1; get_reply(); fprintf (FileOut," %ld bytes received.\n",bytes); closeall : g_free(str); FileSize = 0; hide_progress_connection(); progress_connection(0," ",TRUE); if(finput>=0) CloseSocket(finput); finput = -1; ftp_disconnect(); return code; } /******************************************************/ int ftp_put_file(char* fout,char* ferr,char* filename,char* localdir,char* remotedir, char *hostname,char *username,char* password) { int foutput = -1; int code = 0; long bytes = 0; stopDownLoad = FALSE; FileOut = FOpen(fout,"w"); FileErr = FOpen(ferr,"w"); if( !FileOut || !FileErr) { return -1; } if( !cinput || !coutput || !HostName || strcmp(HostName,hostname) || !UserName || strcmp(UserName,username) ) { if( (code = ftp_connection(hostname,username,password)) != 0) goto closeall; } if( (code = chdir(localdir)) != 0) goto closeall; if( (code = ftp_command("CWD %s",remotedir)) != 0) goto closeall; if( (foutput = data_connection("w","STOR %s",filename))<0) { code = -1; goto closeall; } if( (bytes = put_file_to_data(foutput,filename))<0) { code = -1; goto closeall; } if(foutput>=0) CloseSocket(foutput); foutput = -1; get_reply(); fprintf (FileOut," %ld bytes sent.\n",bytes); closeall : if(foutput>=0) CloseSocket(foutput); ftp_disconnect(); return code; } /******************************************************/ GabeditSrc250/src/NetWork/Ssh.c0000644000175100017510000001233413130665225016557 0ustar alloucheallouche/* Ssh.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ /**************************************************************** * * * Execute a shell command in remote host * * plink - Remote Shell Client for Windows system * * ssh - Remote Shell Client using ssh system * * command for a unix/Linux system * * * ****************************************************************/ #include "../../Config.h" #include /* definition of G_OS_WIN32 if windows */ #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #ifdef G_OS_WIN32 #include #include #include #include #include #include static gchar* cmdGlobal = NULL; static gchar* foutGlobal = NULL; static gchar* ferrGlobal = NULL; static gchar* userNameGlobal = NULL; static gchar* rhostGlobal = NULL; static gchar* passWordGlobal = NULL; static long clientThread () { gchar *command; #ifndef G_OS_WIN32 FILE* f = stdout; #endif /* FILE* FileOut =freopen(foutGlobal, "w", stdout); */ FILE* FileErr =freopen(ferrGlobal, "w", stderr); gchar* fileouttmp = g_strdup_printf("%s%stmp%sfouttmp",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); command = g_strdup_printf( "%s -pw %s %s@%s %s > \"%s\"", plinkCommand,passWordGlobal, userNameGlobal,rhostGlobal,cmdGlobal ,fileouttmp); /* printf("%s\n",command);*/ system(command); g_free(command); command = g_strdup_printf("copy \"%s\" \"%s\"",fileouttmp,foutGlobal); system(command); g_free(command); g_free(fileouttmp); /* fclose(FileOut); */ fclose(FileErr); return 0; } /******************************************************** * ssh : main processing routine; connect to server, * * pass command line and wait for results * *********************************************************/ void ssh (char *fout,char *ferr,const char* cmd, const char *rhost,const char* userName, const char* password ) { HANDLE threadHnd; DWORD threadID; int i; cmdGlobal = g_strdup(cmd); foutGlobal = g_strdup(fout); ferrGlobal = g_strdup(ferr); userNameGlobal = g_strdup(userName); rhostGlobal = g_strdup(rhost); cmdGlobal = g_strdup(cmd); passWordGlobal = g_strdup(password); if(strstr(cmdGlobal,"&")) for(i=0;i<(int)strlen(cmdGlobal);i++) { if(cmdGlobal[i]=='&') cmdGlobal[i] = ' '; } /* printf("cmd = %s\n",cmdGlobal); printf("fout = %s\n",foutGlobal); printf("ferr = %s\n",ferrGlobal); */ unlink(fout); unlink(ferr); threadHnd=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)clientThread, (LPVOID)0, 0, (LPDWORD)&threadID); if(!threadHnd) { FILE* FileErr = FOpen(ferr,"w"); fprintf(FileErr,_("Cannot start client thread...\n")); fclose(FileErr); goto end; } /*printf("End start client thread cmd = %s\n",cmd);*/ if(!strstr(cmd,"&")) if(threadHnd) { DWORD exitCode=0; GetExitCodeThread(threadHnd, &exitCode); while(exitCode==STILL_ACTIVE) { Sleep(50); GetExitCodeThread(threadHnd, &exitCode); } CloseHandle(threadHnd); } if(strstr(cmd,"&") && threadHnd) Sleep(500); WSACleanup(); end : return; } #else /* G_SO_WIN32 */ /******************************************************** * rsh : main processing routine; connect to server, * * pass command line and wait for results * *********************************************************/ #include #include void ssh (char *fout,char *ferr,const char* cmd, const char *rhost,const char* userName, const char* password ) { gchar *command; command = g_strdup_printf( "sh -c \"sh -c 'ssh -l%s %s %s' >%s 2>%s\"", userName,rhost,cmd, fout,ferr); unlink(fout); unlink(ferr); {int ierr = system(command);} g_free(command); } #endif /* G_SO_WIN32 */ /*********************************************************/ GabeditSrc250/src/NetWork/RemoteCommand.c0000644000175100017510000000443513130665225020557 0ustar alloucheallouche/* Rsh.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ /**************************************************************** * * * Execute a shell command in remote host * * rsh - Remote Shell Client for Windows 95/98 system * * rsh - Remote Shell Client using rsh system * * command for a unix/Linux system * * * ****************************************************************/ #include "../../Config.h" #include /* definition of G_OS_WIN32 if windows */ #include "../Common/Global.h" #include "../NetWork/Rsh.h" #include "../NetWork/Ssh.h" void remote_command (char *fout,char *ferr,const char* cmd, const char *hostname,const char* username,const char *password) { if(fileopen.netWorkProtocol == GABEDIT_NETWORK_FTP_RSH) { rsh(fout,ferr,cmd,hostname,username,password); } else { ssh(fout,ferr,cmd,hostname,username,password); } } GabeditSrc250/src/NetWork/Ftp.h0000644000175100017510000000321113130665225016552 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_FTP_H__ #define __GABEDIT_FTP_H__ int ftp_get_file(char* fout,char* ferr,char* filename,char* localdir,char* remotedir, char *hostname,char *username,char* password); int ftp_put_file(char* fout,char* ferr,char* filename,char* localdir,char* remotedir, char *hostname,char *username,char* password); #endif /* __GABEDIT_FTP_H__ */ GabeditSrc250/src/NetWork/Batch.h0000644000175100017510000000305013130665225017043 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_BATCH_H__ #define __GABEDIT_BATCH_H__ void run_batch_all(gboolean remote); void run_batch_user(gboolean remote,gchar *remoteuser,gchar *remotehost,gchar *remotepassword); void create_batch_remote(gboolean all); #endif /* __GABEDIT_BATCH_H__ */ GabeditSrc250/src/NetWork/Dep.mk0000644000175100017510000000331313130664665016723 0ustar allouchealloucheFtp.o: Ftp.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Utils/Utils.h ../Common/Status.h Process.o: Process.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/Constants.h \ ../Utils/GabeditTextEdit.h ../Common/Run.h ../Common/Windows.h \ ../NetWork/RemoteCommand.h ../NetWork/Process.h Rsh.o: Rsh.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Utils/Utils.h Ssh.o: Ssh.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Utils/Utils.h Scp.o: Scp.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Utils/Utils.h ../Common/Status.h FilesTransfer.o: FilesTransfer.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../NetWork/Ftp.h ../NetWork/Scp.h RemoteCommand.o: RemoteCommand.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../NetWork/Rsh.h ../NetWork/Ssh.h Batch.o: Batch.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/Constants.h \ ../Utils/GabeditTextEdit.h ../Common/Run.h ../Common/Windows.h \ ../NetWork/Batch.h RemoteCommand.h GabeditSrc250/src/NetWork/Ssh.h0000644000175100017510000000033113130665225016556 0ustar alloucheallouche #ifndef __GABEDIT_SSH_H__ #define __GABEDIT_SSH_H__ void ssh (char *fout,char *ferr,const char* cmd, const char *hostname,const char* username, const char* password ); #endif /* __GABEDIT_SSH_H__ */ GabeditSrc250/src/NetWork/Scp.c0000644000175100017510000002450313130665225016550 0ustar alloucheallouche/* Scp.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ /**************************************************************** * * * Scp command * * pscp - Remote Shell Client for Windows system * * scp - Remote Shell Client using ssh system * * command for a unix/Linux system * * * ****************************************************************/ #include "../../Config.h" #include /* definition of G_OS_WIN32 if windows */ #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Common/Status.h" #ifdef G_OS_WIN32 #include #include #include #include #include #include static gchar* cmdGlobal = NULL; static gchar* foutGlobal = NULL; static gchar* ferrGlobal = NULL; /********************************************************/ static gchar* createUnixFile(gchar* winFile) { gchar *unixFile = g_strdup_printf("%s%stmp%sunix.txt",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); FILE* FileUnix = NULL; FILE* FileWin = NULL; char c; FileUnix = FOpen(unixFile,"wb"); if(!FileUnix) { g_free(unixFile); return NULL; } FileWin = FOpen(winFile,"r"); if(!FileWin) { g_free(unixFile); return NULL; } while (!feof(FileWin) && (c = getc(FileWin)) != EOF) { if(c == '\r') continue; if(c == '\n') { /*putc('\r', FileUnix);*/ putc('\n', FileUnix); } else putc(c, FileUnix); } fclose(FileWin); fclose(FileUnix); return unixFile; } /********************************************************/ static long clientThread () { if(system(cmdGlobal)==0) { FILE* FileOut = FOpen(foutGlobal,"w"); fprintf(FileOut,"Ok\n"); fclose(FileOut); return 0; } else { FILE* FileErr = FOpen(ferrGlobal,"w"); FILE* FileOut = FOpen(foutGlobal,"w"); fprintf(FileErr,_("Sorry, I Cannot get file at remot host...\n")); fprintf(FileOut,_("Sorry, I Cannot get file at remot host...\n")); fclose(FileErr); fclose(FileOut); return 1; } } /******************************************************** * scp : main processing routine; connect to server, * * pass command line and wait for results * *********************************************************/ int run_scp(gchar* fout,gchar* ferr,char* cmd, gchar* message) { HANDLE threadHnd; DWORD threadID; FILE* FileOut; FILE* FileErr; if(cmdGlobal) g_free(cmdGlobal); cmdGlobal = g_strdup(cmd); show_progress_connection(); progress_connection(0,message,FALSE); threadHnd=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)clientThread, (LPVOID)0, 0, (LPDWORD)&threadID); if(!threadHnd) { FILE* FileErr = FOpen(ferr,"w"); fprintf(FileErr,_("Cannot start client thread...\n")); fclose(FileErr); hide_progress_connection(); progress_connection(0," ",TRUE); WSACleanup(); return 1; } /*printf("End start client thread\n");*/ FileErr = FOpen(ferr,"w"); FileOut = FOpen(fout,"w"); if(threadHnd) { DWORD exitCode=0; GetExitCodeThread(threadHnd, &exitCode); while(exitCode==STILL_ACTIVE) { Sleep(50); GetExitCodeThread(threadHnd, &exitCode); while(gtk_events_pending()) gtk_main_iteration(); if(stopDownLoad) { fprintf(FileOut,_("Download Stopped\n")); break; } } CloseHandle(threadHnd); } fclose(FileErr); fclose(FileOut); hide_progress_connection(); progress_connection(0," ",TRUE); Sleep(500); WSACleanup(); return 0; } /******************************************************/ int scp_put_file(gchar* fout,gchar* ferr, char* filename,char* localdir,char* remotedir, char *hostname,char *username,char* password) { gchar* winFile = g_strdup_printf("%s\\%s",localdir,filename); gchar* unixFile = createUnixFile(winFile); if(!unixFile) { FILE* FileErr = FOpen(ferr,"w"); fprintf(FileErr,_("Sorry, I Cannot put file at remot host...\n")); fclose(FileErr); g_free(winFile); return 1; } cmdGlobal = g_strdup_printf( "%s -pw %s \"%s\" %s@%s:%s/%s", pscpCommand, password, unixFile, username,hostname,remotedir,filename); g_free(winFile); unlink(fout); unlink(ferr); if(system(cmdGlobal)!=0) { FILE* FileErr = FOpen(ferr,"w"); fprintf(FileErr,_("Sorry, I Cannot put %s file at remot host...\n"),filename); fclose(FileErr); unlink(unixFile); g_free(unixFile); return 1; } /* return run_scp(fout,ferr,cmdGlobal); */ unlink(unixFile); g_free(unixFile); return 0; } /******************************************************/ int scp_get_file(gchar* fout,gchar* ferr, char* filename,char* localdir,char* remotedir, char *hostname,char *username,char* password) { gchar* message; gchar* cmd = NULL; foutGlobal = g_strdup(fout); ferrGlobal = g_strdup(ferr); message = g_strdup_printf( _("Get \"%s/%s\" file from \"%s\" host..."), remotedir,filename,hostname ); cmd = g_strdup_printf( "%s -pw %s %s@%s:%s/%s \"%s\\%s\"", pscpCommand, password, username,hostname, remotedir,filename, localdir,filename ); unlink(fout); unlink(ferr); return run_scp(fout,ferr,cmd,message); } #else /* G_OS_WIN32 */ /******************************************************** * ssh : main processing routine; connect to server, * * pass command line and wait for results * *********************************************************/ #include #include #include #include #include #include #include extern char **environ; static int endchild = 0; static pid_t pidchild = -1; static pid_t pidparent = -1; /********************************************************/ static void* clientThread (gpointer data) { char* cmd = (char*)data; pidchild = getpid(); pidparent = getppid(); pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL); pthread_setcancelstate(PTHREAD_CANCEL_ASYNCHRONOUS,NULL); pthread_testcancel(); {int ierr = system(cmd);} pthread_testcancel(); endchild = 1; pthread_exit((void*)0); return (void*)0; } /********************************************************/ int run_scp(gchar* fout,gchar* ferr,char* cmd,char* message) { pthread_attr_t attr; pthread_t threadId; int ret; FILE* FileOut; FILE* FileErr; /*printf("cmd = %s\n",cmd);*/ show_progress_connection(); progress_connection(0,message,FALSE); pthread_attr_init(&attr); pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); pthread_attr_setstacksize(&attr,1000); endchild = 0; ret = pthread_create(&threadId, &attr, clientThread, cmd); pthread_detach(threadId); if(ret) { FILE* FileErr = FOpen(ferr,"w"); fprintf(FileErr,_("Cannot start client thread...\n")); fclose(FileErr); return 0; } else FileErr = FOpen(ferr,"w"); FileOut = FOpen(fout,"w"); while(endchild==0) { while(gtk_events_pending()) gtk_main_iteration(); if(stopDownLoad) { if(pthread_cancel(threadId)!=0) { progress_connection(0,_("Sorry I can not stop download"),FALSE); } else { if(pidchild != -1) { /* char t[BSIZE]; sprintf(t,"kill %d",pidchild); system(t); */ /*printf("pid child = %d\n",pidchild);*/ } pidchild =-1; fprintf(FileOut,_("Download Stopped\n")); break; } } } fclose(FileErr); fclose(FileOut); hide_progress_connection(); progress_connection(0," ",TRUE); if(pidparent!=-1) { /* char t[BSIZE]; sprintf(t,"kill %d",pidparent); printf("pid parent = %d\n",pidparent); system(t); */ pidparent =-1; } return 0; } /********************************************************/ int scp_put_file(char* fout,char* ferr, char* filename,char* localdir,char* remotedir, char *hostname,char *username,char* password) { gchar *command; gchar* message; message = g_strdup_printf( _("Put %s/%s file at %s host..."), remotedir,filename,hostname ); show_progress_connection(); progress_connection(0,message,FALSE); command = g_strdup_printf( "sh -c \"sh -c 'scp %s/%s %s@%s:%s/%s' >%s 2>%s\"", localdir,filename,username,hostname,remotedir,filename, fout,ferr); unlink(fout); unlink(ferr); if(system(command)==0) { g_free(command); hide_progress_connection(); progress_connection(0," ",TRUE); } else { g_free(command); return 1; } return 0; } /********************************************************/ int scp_get_file(char* fout,char* ferr, char* filename,char* localdir,char* remotedir, char *hostname,char *username,char* password) { gchar *command; gchar* message; message = g_strdup_printf( _("Get \"%s/%s\" file from \"%s\" host..."), remotedir,filename,hostname ); command = g_strdup_printf( "sh -c \"sh -c 'scp %s@%s:%s/%s %s/%s' \"", username,hostname, remotedir,filename, localdir,"." ); unlink(fout); unlink(ferr); if(run_scp(ferr,fout,command,message)==0) g_free(command); else { g_free(command); return 1; } return 0; } #endif /* G_SO_WIN32 */ /*********************************************************/ GabeditSrc250/src/NetWork/RemoteCommand.h0000644000175100017510000000302013130665225020551 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_REMOTECOMMAND_H__ #define __GABEDIT_REMOTECOMMAND_H__ void remote_command (char *fout,char *ferr,const char* cmd, const char* hostname,const char* userName,const char *password); #endif /* __GABEDIT_REMOTECOMMAND_H__ */ GabeditSrc250/src/NetWork/Batch.c0000644000175100017510000006776413130665225017064 0ustar alloucheallouche/* Batch.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Run.h" #include "../Common/Windows.h" #include "../NetWork/Batch.h" #include "RemoteCommand.h" #ifndef G_OS_WIN32 #include #include #include #include #include #endif /* G_OS_WIN32*/ static GtkWidget* WinUserBatch = NULL; static gchar selectedRow[100] = "-1"; static GtkWidget* EntryRemote = NULL; static GtkWidget* EntryLogin = NULL; static GtkWidget* EntryPassWord = NULL; static gboolean Remote = FALSE; static gchar* RemoteHost = NULL; static gchar* RemoteUser = NULL; static gchar* RemotePassWord = NULL; static gint Nlist = 0; static gint NlistTitle = 0; static gchar** Titles = NULL; static gchar*** List = NULL; /********************************************************************************/ static void destroy_win_user_batch(GtkWidget* Win, gpointer data) { destroy_children(Win); WinUserBatch = NULL; } /********************************************************************************/ static void init_list() { Nlist = 0; NlistTitle = 0; Titles = NULL; List = NULL; } /********************************************************************************/ static void free_list() { gint i; gint j; if(!Nlist || !NlistTitle) { init_list(); return; } for(i=0;i0) { sprintf(Titles[n-1],"%s","Job id"); for(i=n;i0) { sprintf(Titles[n-1],"%s","Time Use"); for(i=n;i1 && !strstr(List[Nlist][0],"--------") ) Nlist++; if(i<2) break; } fclose(fd); unlink (namefile); } g_free(t); } /********************************************************************************/ static gint get_num_colonne_pid() { gint i = 0; for(i=0;i=0) { title = g_strdup(Titles[num]); rowbatch = g_strdup(List[row][num]); } else { title = g_strdup(" "); rowbatch = g_strdup(" "); } str = g_strdup_printf("%s : %s",title,rowbatch); g_free(title); g_free(rowbatch); frame = gtk_frame_new (_("Jobs to kill")); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_box_pack_start (GTK_BOX( box), frame, TRUE, TRUE, 3); gtk_widget_show (frame); vboxframe = create_vbox(frame); Label = gtk_label_new(str); set_font (Label,FontsStyleResult.fontname); gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT); gtk_box_pack_start (GTK_BOX(vboxframe), Label, FALSE, FALSE, 3); g_free(str); return frame; } /********************************************************************************/ static gchar *get_pid(gint row) { gint num = get_num_colonne_pid(); gchar*pid; if(num>=0) pid = g_strdup(List[row][num]); else pid = g_strdup(" "); return pid; } /********************************************************************************/ static void kill_batch(GtkWidget *Win,gpointer data) { gchar *command = NULL; gchar *scom = NULL; gchar *t = NULL; gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); scom = g_strdup(NameCommandBatchKill); command = g_strdup_printf("%s %s",scom,get_pid(atoi(selectedRow))); if(Remote) { remote_command (fout,ferr,command,RemoteHost,RemoteUser,RemotePassWord); t = cat_file(ferr,FALSE); } else { t = run_command(command); } if(WinUserBatch) { destroy_children(WinUserBatch); WinUserBatch = NULL; run_batch_user(Remote,RemoteUser,RemoteHost,RemotePassWord); } if(t) g_free(t); g_free(scom); g_free(command); g_free(ferr); g_free(fout); } /********************************************************************************/ static void create_kill_batch(GtkWidget*Win, gchar* rowPath) { GtkWidget *fp; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *hbox; GtkWidget *button; gchar *title = g_strdup_printf(_("Kill a jobs")); /* Principal Window */ fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(fp),title); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Fenetre)); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); gtk_widget_realize(fp); init_child(fp,gtk_widget_destroy,_(" Kill ")); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)destroy_children,NULL); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); vboxall = create_vbox(fp); vboxwin = vboxall; frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_add(GTK_CONTAINER(vboxall),frame); gtk_widget_show (frame); vboxall = create_vbox(frame); hbox = create_hbox(vboxall); frame = create_label_frame(hbox,rowPath); hbox = create_hbox(vboxwin); gtk_widget_realize(fp); button = create_button(fp,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)destroy_children,GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(fp,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)kill_batch,GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)destroy_children,GTK_OBJECT(fp)); gtk_widget_show_all(fp); } /*************************************************************************************************/ static void eventDispatcher(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; GtkTreeIter iter; GtkTreeModel *model; if (!event) return; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); sprintf(selectedRow ,"%s",gtk_tree_path_to_string(path)); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free(path); if (event->type == GDK_2BUTTON_PRESS && ((GdkEventButton *) event)->button == 1) create_kill_batch(widget,selectedRow); } else sprintf(selectedRow,"-1"); } GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event); } /********************************************************************************/ static GtkWidget* create_gtk_list_batch() { gint i; gint j; GtkWidget* gtklist = NULL; gint *Width = NULL; GtkListStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeSelection *select; GtkTreeIter iter; GType* types = NULL; if(NlistTitle<1) return gtklist; Width = g_malloc(NlistTitle*sizeof(gint)); for (j=0;j0) { for(i=0;i0) { nlisthost = recenthosts.nhosts; for(i=0;ichild; g_object_set_data (G_OBJECT (entry[0]), "Combo",combo); g_signal_connect(G_OBJECT(GTK_COMBO_BOX(combo)), "changed",G_CALLBACK(changed_host),entry); i = 1; add_label_table(Table,_("Login "),(gushort)(i),0); add_label_table(Table," : ",(gushort)(i),1); combo = create_combo_box_entry(tlistuser,nlistuser,TRUE,-1,-1); gtk_table_attach(GTK_TABLE(Table),combo,2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); entry[1] = GTK_BIN(combo)->child; g_object_set_data (G_OBJECT (entry[1]), "Combo",combo); i = 2; if(defaultNetWorkProtocol==GABEDIT_NETWORK_SSH) { #ifdef G_OS_WIN32 add_label_table(Table,_("Password "),(gushort)(i),0); add_label_table(Table," : ",(gushort)(i),1); entry[i] = gtk_entry_new (); gtk_entry_set_visibility(GTK_ENTRY (entry[i]),FALSE); gtk_table_attach(GTK_TABLE(Table),entry[i],2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); #else entry[i] = gtk_entry_new (); #endif } else { entry[i] = gtk_entry_new (); } if(fileopen.remotehost) gtk_entry_set_text(GTK_ENTRY(entry[0]),fileopen.remotehost); if(fileopen.remoteuser) gtk_entry_set_text(GTK_ENTRY(entry[1]),fileopen.remoteuser); if(fileopen.remotepass) gtk_entry_set_text(GTK_ENTRY(entry[2]),fileopen.remotepass); for (i=0;i /* definition of G_OS_WIN32 if windows */ #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #ifdef G_OS_WIN32 #include #include #include #include #include #include /* local socket address structure */ struct sockaddr_in anaddr; /* server socket address structure */ struct sockaddr_in saddr; /* the local rsh port; determined dynamically */ u_short rshPort; /* the local rsh port for client FileErr output */ u_short rshErrPort; /* the remote rsh port; basically, the 'shell' port from services */ u_short rshSPort; /* the rsh protocol ("tcp") */ u_short rshProto; /* the rsh client socket for outgoing connections */ SOCKET rshClient=INVALID_SOCKET; /* the rsh client socket for FileErr input */ SOCKET rshClientErr=INVALID_SOCKET; char userName[64]; char cmd[4096]; /* set when a connection has been detected on the FileErr channel */ int FileErrFlag=0; /* socket options variables */ int on=1; struct linger linger; static FILE* FileErr = NULL; static FILE* FileOut = NULL; /******************************************************************** * winsockError :displays the current Winsock error in text format * ********************************************************************/ void winsockError() { int errCode; fprintf(FileErr, "Winsock error: "); errCode=WSAGetLastError(); switch(errCode) { case WSAENETDOWN: fprintf(FileErr, "The network subsystem has failed.\n"); break; case WSAEINTR: fprintf(FileErr, "A blocking call was cancelled. This can be caused by\n1) a short response time, or\n2) User interrupts the process.\n"); break; case WSAEINPROGRESS: fprintf(FileErr, "A blocking call is in progress.\n"); break; case WSAENOBUFS: fprintf(FileErr, "No buffer space is available.\n"); break; case WSAENOTSOCK: fprintf(FileErr, "Invalid socket descriptor.\n"); break; case WSAEADDRINUSE: fprintf(FileErr, "The specified address is already in use.\n"); break; case WSAEADDRNOTAVAIL: fprintf(FileErr, "The specified address is not available\nfrom the local machine.\n"); break; case WSAECONNREFUSED: fprintf(FileErr, "The connection attempt was refused.\n"); break; case WSAEINVAL: fprintf(FileErr, "The socket is not bound to an address.\n"); break; case WSAEISCONN: fprintf(FileErr, "The socket is already connected.\n"); break; case WSAEMFILE: fprintf(FileErr, "The maximum number of sockets has exceeded.\n"); break; case WSAENETUNREACH: fprintf(FileErr, "Network cannot be reached from this host at this time.\n"); break; case WSAETIMEDOUT: fprintf(FileErr, "Attempt to connect timed out without establishing a connection.\n"); break; case WSAENOTCONN: fprintf(FileErr, "The socket is not connected.\n"); break; case WSAESHUTDOWN: fprintf(FileErr, "The socket has been shut down.\n"); break; case WSAECONNABORTED: fprintf(FileErr, "The virtual circuit was aborted due to timeout or other failure.\n"); break; case WSAECONNRESET: fprintf(FileErr, "The virtual circuit was reset by the remote side.\n"); break; case WSAEACCES: fprintf(FileErr, "The requested address is a broadcast address.\n"); break; case WSAENETRESET: fprintf(FileErr, "The connection must be reset.\n"); break; case WSAHOST_NOT_FOUND: fprintf(FileErr, "Authoritative Answer Host is not found.\n"); break; default: fprintf(FileErr, "%d.\n", errCode); break; } } /************************************************************************ * error : display an error message and possibly the last Winsock error * *************************************************************************/ void error (char* message, int ex) { fprintf(FileErr,"%s\n",message); /* Message(message,"Error",TRUE);*/ winsockError(); if(ex) { WSACleanup(); return; } } /************************************************************************ * rresvport : the windows hack of rresvport; * * bind a socket to a reserved port using the given protocol, if any * ************************************************************************/ int rresvport (u_short* alport, int sProto) { struct sockaddr_in sin; int s; sin.sin_family=AF_INET; sin.sin_addr.s_addr=INADDR_ANY; s=socket(AF_INET, SOCK_STREAM, sProto); if(s<0) return -1; for((*alport)=IPPORT_RESERVED-1; (*alport)>IPPORT_RESERVED/2; (*alport)--) { sin.sin_port=htons((u_short)(*alport)); if(bind(s, (struct sockaddr*)&sin, sizeof(sin))==0) return s; if(WSAGetLastError()!=WSAEADDRINUSE) break; } /* ran out of available ports or weird error; shouldn't happen too often...*/ closesocket(s); return -1; } /**************************************************** * send to the server the assembled command buffer * *****************************************************/ void sendcommand (const char* buff, int bufflen, SOCKET rshClient,int flag) { if(send(rshClient, buff, bufflen, flag) < bufflen) error("Error sending command.", 0); } /**************************************************** * receive : receive a string from the given socket * *****************************************************/ int receive (SOCKET rshClient, char* buff, int blen) { int bufflen; int totallen=0; do { bufflen=recv(rshClient, buff+totallen, blen-totallen, 0); if(bufflen==SOCKET_ERROR) return bufflen; totallen+=bufflen; } while(bufflen && totallenh_addr, hostInfo->h_length); } return TRUE; } /******************************************************** * initSocket : standard socket initialization procedure * *********************************************************/ gboolean initSocket () { /* get port number for rsh */ struct servent FAR* sp=getservbyname("shell", "tcp"); LPPROTOENT lpProto; if(sp==NULL) { error("Cannot determine port number for the rsh client.",1); return FALSE; } rshSPort=htons(sp->s_port); /* get protocol number for tcp */ lpProto=getprotobyname("tcp"); if(!lpProto) rshProto=IPPROTO_TCP; else rshProto=lpProto->p_proto; /* create socket */ rshClient=rresvport(&rshPort, rshProto); if(rshClient==INVALID_SOCKET) { error("Cannot allocate socket for the rsh client.",1); return FALSE; } if(setsockopt(rshClient, SOL_SOCKET, SO_KEEPALIVE, (char*)&on, sizeof(on))<0) { error("Cannot set SO_KEEPALIVE!\n", 0); return FALSE; } linger.l_onoff=1; linger.l_linger=60; if(setsockopt(rshClient, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(linger))<0) { error("Cannot set SO_LINGER!\n", 0); return FALSE; } return TRUE; } /******************************************************************** * openErrSocket : an additional socket is created for FileErr output * *********************************************************************/ gboolean initErrSocket () { /* create the new socket and bind it to the client FileErr port */ rshErrPort=IPPORT_RESERVED-1; rshClientErr=rresvport(&rshErrPort,0); if(rshClientErr==INVALID_SOCKET) { error("Cannot create FileErr socket!", 0); return FALSE; } if(setsockopt(rshClientErr, SOL_SOCKET, SO_KEEPALIVE, (char*)&on, sizeof(on))<0) error("Cannot set SO_KEEPALIVE!", 0); linger.l_onoff=0; linger.l_linger=60; if(setsockopt(rshClientErr, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(linger))<0) error("Cannot set SO_LINGER!", 0); /* now listen... */ if(listen(rshClientErr, 5)) error("Cannot listen!",1); return TRUE; } /******************************************************** * rsh_command : pass the command string to the rsh server * * and retrieve the results * *********************************************************/ void rsh_command (const char* cmd, const char* userName) { char cmdbuff[2048]; int cmdbufflen=0; char buff[2048]; int respbufflen; int firstbuf; int i = 0; /*memset(cmdbuff, 0, 2048*sizeof(char));*/ for(i=0;i<2047;i++) { cmdbuff[i] = ' '; } /* local FileErr port */ sprintf(cmdbuff+cmdbufflen, "%d", rshErrPort); cmdbufflen=strlen(cmdbuff)+1; /* remot user */ strcpy(cmdbuff+cmdbufflen, userName); cmdbufflen+=strlen(userName)+1; /* local user */ strcpy(cmdbuff+cmdbufflen, userName); cmdbufflen+=strlen(userName)+1; /* command */ strcpy(cmdbuff+cmdbufflen, cmd); cmdbufflen+=strlen(cmd)+1; sendcommand(cmdbuff, cmdbufflen, rshClient,0); /* for some reason first buffer has nul char at begining */ /* Debug("End Send command\n");*/ firstbuf = 1; if(!strstr(cmd,"&")) while((respbufflen=receive(rshClient, buff, 2047))>0) { fprintf(FileOut, "%s", buff); /* fwrite(buff, respbufflen, 1, FileOut);*/ } } /******************************************************** * clientThread : this is the FileErr client thread; * * it is started before sending the command string * * to the server; its purpose is to accept connections * * from the server and receive the FileErr output * *********************************************************/ long clientThread () { struct sockaddr anaddr; int len=sizeof(anaddr); char buff[2048]; SOCKET rshServer=accept(rshClientErr, (struct sockaddr FAR*)&anaddr, &len); if(rshServer==INVALID_SOCKET) { error("Error connecting to the FileErr server port!", 0); return 0; } FileErrFlag=1; /* mark connection made*/ while(receive(rshServer, buff, 2047)>0) fprintf(FileErr, "%s", buff); FileErrFlag=0; closesocket(rshClientErr); shutdown(rshClientErr, 2); closesocket(rshServer); shutdown(rshServer, 2); return 0; } /******************************************************** * rsh : main processing routine; connect to server, * * pass command line and wait for results * *********************************************************/ void rsh (char *fout,char *ferr,const char* cmd, const char *hostname,const char* userName,char *passwod) { HANDLE threadHnd = NULL; FileOut = FOpen(fout,"w"); FileErr = FOpen(ferr,"w"); /* Debug("fout=%s\n",fout); Debug("fout=%s\n",ferr); Debug("Begin winsockCheck\n"); */ if( !winsockCheck(FileErr) ) goto closeall; /* Debug("End winsockCheck\n"); Debug("Begin hostCeck\n"); */ if( !hostCheck(hostname) ) goto closeall; /* Debug("End hostCeck\n"); Debug("Begin initSocket\n"); */ if( !initSocket() ) goto closeall; /* Debug("End initSocket\n");*/ if(!initErrSocket()) { error("Cannot create error socket!", 0); goto closeall; } saddr.sin_family=AF_INET; saddr.sin_port=rshSPort; if(connect(rshClient, (struct sockaddr FAR*)&saddr, sizeof(saddr))) { error("Cannot connect to RSH port!\n",1); goto closeall; } if(rshClientErr!=INVALID_SOCKET) { DWORD threadID; threadHnd=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)clientThread, (LPVOID)0, 0, (LPDWORD)&threadID); if(!threadHnd) { error("Cannot start client thread...",1); goto closeall; } } /* Debug("cmd = %sg\n",cmd);*/ rsh_command(cmd, userName); /* Debug("End rsh_command\n");*/ closesocket(rshClient); shutdown(rshClient, 2); if(!strstr(cmd,"&")) if(threadHnd) { DWORD exitCode=0; GetExitCodeThread(threadHnd, &exitCode); while(exitCode==STILL_ACTIVE && FileErrFlag) { Sleep(50); GetExitCodeThread(threadHnd, &exitCode); } CloseHandle(threadHnd); } if(strstr(cmd,"&") && threadHnd) { Sleep(500); shutdown(rshClientErr, 2); } /* Debug("End rThread\n");*/ WSACleanup(); closeall : if(FileOut) fclose(FileOut); if(FileErr) fclose(FileErr); } #else /* G_SO_WIN32 */ /******************************************************** * rsh : main processing routine; connect to server, * * pass command line and wait for results * *********************************************************/ #include void rsh (char *fout,char *ferr,const char* cmd, const char *hostname,const char* userName,char *passwod) { gchar *commandrcp; commandrcp = g_strdup_printf( "sh -c \"sh -c 'rsh -l%s %s %s' >%s 2>%s\"", userName,hostname,cmd, fout,ferr); /* Debug("%s\n",commandrcp);*/ {int ierr = system(commandrcp);} g_free(commandrcp); } #endif /* G_SO_WIN32 */ /*********************************************************/ GabeditSrc250/src/NetWork/Scp.h0000644000175100017510000000056313130665225016555 0ustar alloucheallouche #ifndef __GABEDIT_SCP_H__ #define __GABEDIT_SCP_H__ int scp_put_file(char* fout,char* ferr, char* filename,char* localdir,char* remotedir, char *hostname,char *username,char* password); int scp_get_file(char* fout,char* ferr, char* filename,char* localdir,char* remotedir, char *hostname,char *username,char* password); #endif /* __GABEDIT_SCP_H__ */ GabeditSrc250/src/Orca/0000755000175100017510000000000013130743374015150 5ustar allouchealloucheGabeditSrc250/src/Orca/OrcaBasis.h0000644000175100017510000000071713130665225017172 0ustar alloucheallouche #ifndef __GABEDIT_ORCABASIS_H__ #define __GABEDIT_ORCABASIS_H__ void initOrcaBasis(); void freeOrcaBasis(); void addOrcaTypeBasisToTable(GtkWidget *table, gint i, GtkWidget* comboBasis); GtkWidget* addOrcaBasisToTable(GtkWidget *table, gint i); void addOrcaAuxBasisToTable(GtkWidget *table, gint i, GtkWidget* comboMethod, GtkWidget* comboExcited); void putOrcaBasisInfoInTextEditor(); void putOrcaAuxBasisInTextEditor(); #endif /* __GABEDIT_ORCABASIS_H__ */ GabeditSrc250/src/Orca/OrcaMolecule.c0000644000175100017510000005743313130665225017700 0ustar alloucheallouche/* OrcaMolecule.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Orca/OrcaTypes.h" #include "../Orca/OrcaGlobal.h" #include "../Orca/OrcaKeywords.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" /************************************************************************************************************/ static gint totalCharge = 0; static gint spinMultiplicity=1; /************************************************************************************************************/ gint getOrcaMultiplicity() { return spinMultiplicity; } /************************************************************************************************************/ void initOrcaMoleculeButtons() { } /************************************************************************************************************/ void initOrcaMolecule() { orcaMolecule.listOfAtoms = NULL; orcaMolecule.totalNumberOfElectrons = 0; orcaMolecule.numberOfValenceElectrons = 0; orcaMolecule.numberOfAtoms = 0; } /************************************************************************************************************/ void freeOrcaMolecule() { static gboolean first = TRUE; if(first) { initOrcaMolecule(); first = FALSE; return; } if(orcaMolecule.listOfAtoms) g_free(orcaMolecule.listOfAtoms); initOrcaMolecule(); } /************************************************************************************************************/ static gint setOrcaMoleculeFromSXYZ(gint nAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z) { gint n; OrcaAtom* atomList = NULL; orcaMolecule.listOfAtoms = NULL; orcaMolecule.numberOfAtoms = 0; if(nAtoms<1) return 1; orcaMolecule.listOfAtoms = (OrcaAtom*)g_malloc(sizeof(OrcaAtom)*(nAtoms)); if(orcaMolecule.listOfAtoms==NULL) return -1; orcaMolecule.numberOfAtoms = nAtoms; atomList = orcaMolecule.listOfAtoms; for(n=0; nposition[0] = X[n]; atomList->position[1] = Y[n]; atomList->position[2] = Z[n]; atomList->symbol = g_strdup(symbols[n]); atomList++; } return 0; } /************************************************************************************************************/ static void setXYZFromGeomXYZ(gint i, gdouble* x, gdouble* y, gdouble *z) { if(!test(GeomXYZ[i].X)) *x = get_value_variableXYZ(GeomXYZ[i].X); else *x = atof(GeomXYZ[i].X); if(!test(GeomXYZ[i].Y)) *y = get_value_variableXYZ(GeomXYZ[i].Y); else *y = atof(GeomXYZ[i].Y); if(!test(GeomXYZ[i].Z)) *z = get_value_variableXYZ(GeomXYZ[i].Z); else *z = atof(GeomXYZ[i].Z); if(Units==0) { *x *= BOHR_TO_ANG; *y *= BOHR_TO_ANG; *z *= BOHR_TO_ANG; } } /************************************************************************************************************/ static gboolean setOrcaMoleculeFromGeomXYZ() { gint i; gchar** symbols = NULL; gdouble* X = NULL; gdouble* Y = NULL; gdouble* Z = NULL; gint numberOfAtoms = NcentersXYZ; if(numberOfAtoms<1) return FALSE; symbols = (gchar**)g_malloc(sizeof(gchar*)*(numberOfAtoms)); if(symbols == NULL) return FALSE; X = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(X == NULL) return FALSE; Y = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Y == NULL) return FALSE; Z = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Z == NULL) return FALSE; orcaMolecule.totalNumberOfElectrons = 0; for(i=0; iposition[k]-atomList->position[k+1]; dd += xx*xx; } if(i==0) d = dd; else if(d>dd) d= dd; atomList++; } d = sqrt(d); return d; } */ /*************************************************************************************************************/ /* static void setFirstAtomToXAxis(gint numberOfAtoms, gdouble* X, gdouble* Y, gdouble*Z) { gdouble d; gdouble s; gdouble c; gint i; gdouble positionTolerance = -1; if(numberOfAtoms<1) return; d = X[0]*X[0]+Y[0]*Y[0]; if(d<1e-10) return; d = sqrt(d); if(positionTolerance<0) positionTolerance= getMinDistance()/50; s = -Y[0]/d; c = +X[0]/d; for (i=0;i0) for(i=0;i0 && nV!= 3*orcaMolecule.numberOfAtoms) { sprintf(buffer,"%cgeom Constraints\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &orcaColorFore.keyWord, &orcaColorBack.keyWord, buffer, -1); for (i=0;iNUMBER_ENTRY_ANGLE) { gchar R[100]; gchar A[100]; gchar D[100]; sprintf(R,"%s",Geom[i].R); if(!test(Geom[i].R)) sprintf(R,"%f",get_value_variableZmat(Geom[i].R)); sprintf(A,"%s",Geom[i].Angle); if(!test(Geom[i].Angle)) sprintf(A,"%f",get_value_variableZmat(Geom[i].Angle)); sprintf(D,"%s",Geom[i].Dihedral); if(!test(Geom[i].Dihedral)) sprintf(D,"%f",get_value_variableZmat(Geom[i].Dihedral)); sprintf(buffer," %s %s %s %s %s %s %s\n", symb, Geom[i].NR, Geom[i].NAngle, Geom[i].NDihedral, R, A, D); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } else if(Geom[i].Nentry>NUMBER_ENTRY_R) { gchar R[100]; gchar A[100]; sprintf(R,"%s",Geom[i].R); if(!test(Geom[i].R)) sprintf(R,"%f",get_value_variableZmat(Geom[i].R)); sprintf(A,"%s",Geom[i].Angle); if(!test(Geom[i].Angle)) sprintf(A,"%f",get_value_variableZmat(Geom[i].Angle)); sprintf(buffer," %s %s %s %s %s %s %s\n", symb, Geom[i].NR, Geom[i].NAngle, "0", R, A, "0.0"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } else if(Geom[i].Nentry>NUMBER_ENTRY_0) { gchar R[100]; sprintf(R,"%s",Geom[i].R); if(!test(Geom[i].R)) sprintf(R,"%f",get_value_variableZmat(Geom[i].R)); sprintf(buffer," %s %s %s\n", symb, Geom[i].NR,R ); sprintf(buffer," %s %s %s %s %s %s %s\n", symb, Geom[i].NR, "0", "0", R, "0.0", "0.0"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } else { sprintf(buffer," %s %s %s %s %s %s %s\n", symb, "0", "0", "0", "0.0", "0.0", "0.0"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } } sprintf(buffer,"*\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &orcaColorFore.keyWord, &orcaColorBack.keyWord, buffer, -1); nV = 0; if(NVariables>0) for(i=0;i0) { sprintf(buffer,"%cgeom Constraints\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,buffer,-1); for (i=0;i=NUMBER_ENTRY_R && !test(Geom[i].R)) { sprintf(buffer," {B %d %d C}\n",atoi(Geom[i].NR)-1,i); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,buffer,-1); } if(Geom[i].Nentry>=NUMBER_ENTRY_ANGLE && !test(Geom[i].Angle)) { sprintf(buffer," {A %d %d %d C}\n", atoi(Geom[i].NAngle)-1, atoi(Geom[i].NR)-1,i); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,buffer,-1); } if(Geom[i].Nentry>NUMBER_ENTRY_ANGLE && !test(Geom[i].Dihedral)) { sprintf(buffer," {D %d %d %d %d C}\n", atoi(Geom[i].NDihedral)-1, atoi(Geom[i].NAngle)-1, atoi(Geom[i].NR)-1,i); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,buffer,-1); } } gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," end #Constraints\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," invertConstraints true\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &orcaColorFore.keyWord, &orcaColorBack.keyWord," end #geom\n",-1); } } } /************************************************************************************************************/ void putOrcaMoleculeInfoInTextEditor() { putOrcaMoleculeInTextEditor(); } /************************************************************************************************************/ /* static GtkWidget* addRadioButtonToATable(GtkWidget* table, GtkWidget* friendButton, gchar* label, gint i, gint j, gint k) { GtkWidget *newButton; if(friendButton) newButton = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (friendButton)), label); else newButton = gtk_radio_button_new_with_label( NULL, label); gtk_table_attach(GTK_TABLE(table),newButton,j,j+k,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); g_object_set_data(G_OBJECT (newButton), "Label",NULL); g_object_set_data(G_OBJECT (newButton), "Type",NULL); return newButton; } */ /********************************************************************************/ static void setSpinMultiplicityComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity, gint spin) { GtkWidget *entry = NULL; gchar* t = NULL; if(!comboSpinMultiplicity) return; entry = GTK_BIN (comboSpinMultiplicity)->child; t = g_strdup_printf("%d",spin); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /************************************************************************************************************/ static void setComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity) { GList *glist = NULL; gint i; gint nlist = 0; gchar** list = NULL; gint k; gint kinc; gint ne = orcaMolecule.numberOfValenceElectrons - totalCharge; if(ne%2==0) nlist = ne/2+1; else nlist = (ne+1)/2; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; t = g_strdup_printf("%d",charge); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /********************************************************************************/ static void setComboCharge(GtkWidget *comboCharge) { GList *glist = NULL; gint i; gint nlist; gchar** list = NULL; gint k; nlist = orcaMolecule.numberOfValenceElectrons*2-2+1; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; g_object_set_data(G_OBJECT (entry), "Combo",combo); gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.2),-1); return entry; } /***********************************************************************************************/ static GtkWidget *addOrcaChargeToTable(GtkWidget *table, gint i) { GtkWidget* entryCharge = NULL; GtkWidget* comboCharge = NULL; gint nlistCharge = 1; gchar* listCharge[] = {"0"}; add_label_table(table,_("Charge"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryCharge = addComboListToATable(table, listCharge, nlistCharge, i, 2, 1); comboCharge = g_object_get_data(G_OBJECT (entryCharge), "Combo"); gtk_widget_set_sensitive(entryCharge, TRUE); gtk_editable_set_editable(GTK_EDITABLE(entryCharge), FALSE); return comboCharge; } /***********************************************************************************************/ static GtkWidget *addOrcaSpinToTable(GtkWidget *table, gint i) { GtkWidget* entrySpinMultiplicity = NULL; GtkWidget* comboSpinMultiplicity = NULL; gint nlistspinMultiplicity = 1; gchar* listspinMultiplicity[] = {"0"}; add_label_table(table,_("Spin multiplicity"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entrySpinMultiplicity = addComboListToATable(table, listspinMultiplicity, nlistspinMultiplicity, i, 2, 1); comboSpinMultiplicity = g_object_get_data(G_OBJECT (entrySpinMultiplicity), "Combo"); gtk_widget_set_sensitive(entrySpinMultiplicity, TRUE); gtk_editable_set_editable(GTK_EDITABLE(entrySpinMultiplicity), FALSE); g_signal_connect(G_OBJECT(entrySpinMultiplicity),"changed", G_CALLBACK(changedEntrySpinMultiplicity),NULL); return comboSpinMultiplicity; } /***********************************************************************************************/ static GtkWidget *addLabelNumberOfElectronsToTable(GtkWidget *table, gint i, GtkWidget *comboCharge) { GtkWidget* labelNumberOfElectrons = NULL; GtkWidget* hbox = NULL; GtkWidget* entryCharge = GTK_BIN(comboCharge)->child; labelNumberOfElectrons = gtk_label_new(" "); hbox = gtk_hbox_new(0,FALSE); gtk_box_pack_start (GTK_BOX (hbox), labelNumberOfElectrons, FALSE, FALSE, 0); gtk_table_attach(GTK_TABLE(table),hbox,0,0+3,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_SHRINK), 2,2); g_object_set_data(G_OBJECT (entryCharge), "LabelNumberOfElectrons", labelNumberOfElectrons); g_signal_connect(G_OBJECT(entryCharge),"changed", G_CALLBACK(changedEntryCharge),NULL); return labelNumberOfElectrons; } /***********************************************************************************************/ void createOrcaChargeMultiplicityFrame(GtkWidget *box) { GtkWidget* frame; GtkWidget* sep; GtkWidget* labelNumberOfElectrons; GtkWidget* vboxFrame; GtkWidget* comboSpinMultiplicity = NULL; GtkWidget* comboCharge = NULL; GtkWidget *table = NULL; gint i; totalCharge = TotalCharges[0]; spinMultiplicity=SpinMultiplicities[0]; table = gtk_table_new(3,5,FALSE); frame = gtk_frame_new (_("Charge & Multiplicty")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); i = 0; comboCharge = addOrcaChargeToTable(table, i); i = 1; comboSpinMultiplicity = addOrcaSpinToTable(table, i); i = 2; sep = gtk_hseparator_new ();; gtk_table_attach(GTK_TABLE(table),sep,0,0+3,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); i = 3; labelNumberOfElectrons=addLabelNumberOfElectronsToTable(table, i, comboCharge); if(GTK_IS_COMBO_BOX(comboCharge)) g_object_set_data(G_OBJECT (GTK_BIN(comboCharge)->child), "ComboSpinMultiplicity", comboSpinMultiplicity); setComboCharge(comboCharge); setComboSpinMultiplicity(comboSpinMultiplicity); if(GTK_IS_WIDGET(labelNumberOfElectrons)) { gint ne = orcaMolecule.numberOfValenceElectrons - totalCharge; gchar buffer[BSIZE]; sprintf(buffer, "Number of electrons = %d",ne); gtk_label_set_text(GTK_LABEL(labelNumberOfElectrons),buffer); } /* activate sensitivity */ /* if(GTK_IS_WIDGET(comboMethod)) setComboMethod(comboMethod); g_object_set_data(G_OBJECT (box), "EntryMethod", GTK_BIN(comboMethod)->child); */ } /************************************************************************************************************/ GabeditSrc250/src/Orca/OrcaGlobal.h0000644000175100017510000000056113130665225017326 0ustar alloucheallouche #ifndef __GABEDIT_ORCAGLOBAL_H__ #define __GABEDIT_ORCAGLOBAL_H__ GtkWidget* orcaWin; OrcaMolecule orcaMolecule; OrcaColorFore orcaColorFore; OrcaColorBack orcaColorBack; OrcaBasis orcaBasis; OrcaGuessWaveFunction orcaGuessWaveFunction; OrcaFunctional* functionals; OrcaStdFunctional* stdFunctionals; gdouble* sumFunctionals; #endif /* __GABEDIT_ORCAGLOBAL_H__ */ GabeditSrc250/src/Orca/OrcaBasis.c0000644000175100017510000012176413130665225017173 0ustar alloucheallouche/* OrcaBasis.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Orca/OrcaTypes.h" #include "../Orca/OrcaGlobal.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Utils/GabeditTextEdit.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" static gchar selectedTypeBasis[BSIZE]=""; static gchar** listBasisReal = NULL; static gchar** listBasisView = NULL; static gint numberOfBasis = 0; /*************************************************************************************************************/ static gchar* listTypeBasisView[] = { "Pople Style basis sets", "Pople with one diffuse function on non-hydrogen atoms", "Pople with one diffuse function on all atoms", "Dunning basis sets", "Ahlrichs basis sets", "Def2 Ahlrichs basis sets", "Jensen Basis Sets", "Atomic Natural Orbital Basis Sets", "Miscellenous and Specialized Basis Sets", }; static gchar* listTypeBasisReal[] = { "Pople", "PopleDiffuseNonHydrogen", "PopleDiffuseAllAtoms", "Dunning", "Ahlrichs", "Def2Ahlrichs", "Jensen", "ANO", "Miscellenous", }; static guint numberOfTypeBasis = G_N_ELEMENTS (listTypeBasisView); /*************************************************************************************************************/ static gchar* listPopleBasisView[] = { "3-21G Pople 3-21G", "3-21GSP Buenker 3-21GSP", "4-22GSP Buenker 4-22GSP", "6-31G Pople 6-31G and its modifications", "6-311G Pople 6-311G and its modifications", "3-21G* 3-21G plus one polarisation function all non-hydrogens atoms", "3-21GSP* 3-21GSP plus one polarisation function all non-hydrogens atoms", "4-22GSP* 4-22GSP plus one polarisation function all non-hydrogens atoms", "6-31G* 6-31G plus one polarisation function all non-hydrogens atoms", "6-311G* 6-311G plus one polarisation function all non-hydrogens atoms", "3-21G** 3-21G plus one polarisation function all atoms", "3-21GSP** 3-21GSP plus one polarisation function all atoms", "4-22GSP** 4-22GSP plus one polarisation function all atoms", "6-31G** 6-31G plus one polarisation function all atoms", "6-311G** 6-311G plus one polarisation function all atoms", "3-21G(2d) 3-21G plus two polarisation functions all non-hydrogens atoms", "3-21GSP(2d) 3-21GSP plus two polarisation functions all non-hydrogens atoms", "4-22GSP(2d) 4-22GSP plus two polarisation functions all non-hydrogens atoms", "6-31G(2d) 6-31G plus two polarisation functions all non-hydrogens atoms", "6-311G(2d) 6-311G plus two polarisation functions all non-hydrogens atoms", "3-21G(2d,2p) 3-21G plus two polarisation functions all atoms", "3-21GSP(2d,2p) 3-21GSP plus two polarisation functions all atoms", "4-22GSP(2d,2p) 4-22GSP plus two polarisation functions all atoms", "6-31G(2d,2p) 6-31G plus two polarisation functions all atoms", "6-311G(2d,2p) 6-311G plus two polarisation functions all atoms", "3-21G(2df) 3-21G plus three polarisation functions all non-hydrogens atoms", "3-21GSP(2df) 3-21GSP plus three polarisation functions all non-hydrogens atoms", "4-22GSP(2df) 4-22GSP plus three polarisation functions all non-hydrogens atoms", "6-31G(2df) 6-31G plus three polarisation functions all non-hydrogens atoms", "6-311G(2df) 6-311G plus three polarisation functions all non-hydrogens atoms", "3-21G(2df,2pd) 3-21G plus three polarisation functions all atoms", "3-21GSP(2df,2pd) 3-21GSP plus three polarisation functions all atoms", "4-22GSP(2df,2pd) 4-22GSP plus three polarisation functions all atoms", "6-31G(2df,2pd) 6-31G plus three polarisation functions all atoms", "6-311G(2df,2pd) 6-311G plus three polarisation functions all atoms", "3-21G(3df) 3-21G plus four polarisation functions all non-hydrogens atoms", "3-21GSP(3df) 3-21GSP plus four polarisation functions all non-hydrogens atoms", "4-22GSP(3df) 4-22GSP plus four polarisation functions all non-hydrogens atoms", "6-31G(3df) 6-31G plus four polarisation functions all non-hydrogens atoms", "6-311G(3df) 6-311G plus four polarisation functions all non-hydrogens atoms", "3-21G(3df,3pd) 3-21G plus four polarisation functions all atoms", "3-21GSP(3df,3pd) 3-21GSP plus four polarisation functions all atoms", "4-22GSP(3df,3pd) 4-22GSP plus four polarisation functions all atoms", "6-31G(3df,3pd) 6-31G plus four polarisation functions all atoms", "6-311G(3df,3pd) 6-311G plus four polarisation functions all atoms", }; static gchar* listPopleBasisReal[] = { "3-21G", "3-21GSP", "4-22GSP", "6-31G", "6-311G", "3-21G*", "3-21GSP*", "4-22GSP*", "6-31G*", "6-311G*", "3-21G**", "3-21GSP**", "4-22GSP**", "6-31G**", "6-311G**", "3-21G(2d)", "3-21GSP(2d)", "4-22GSP(2d)", "6-31G(2d)", "6-311G(2d)", "3-21G(2d,2p)", "3-21GSP(2d,2p)", "4-22GSP(2d,2p)", "6-31G(2d,2p)", "6-311G(2d,2p)", "3-21G(2df)", "3-21GSP(2df)", "4-22GSP(2df)", "6-31G(2df)", "6-311G(2df)", "3-21G(2df,2pd)", "3-21GSP(2df,2pd)", "4-22GSP(2df,2pd)", "6-31G(2df,2pd)", "6-311G(2df,2pd)", "3-21G(3df)", "3-21GSP(3df)", "4-22GSP(3df)", "6-31G(3df)", "6-311G(3df)", "3-21G(3df,3pd)", "3-21GSP(3df,3pd)", "4-22GSP(3df,3pd)", "6-31G(3df,3pd)", "6-311G(3df,3pd)", }; static guint numberOfPopleBasis = G_N_ELEMENTS (listPopleBasisView); /*************************************************************************************************************/ static gchar* listPopleDiffuseNonHydrogenBasisView[] = { "3-21+G 3-21G plus diffuse functions on all non-hydrogens atoms", "3-21+GSP 3-21GSP plus diffuse functions on all non-hydrogens atoms", "4-22+GSP 4-22GSP plus diffuse functions on all non-hydrogens atoms", "6-31+G 6-31G plus diffuse functions on all non-hydrogens atoms", "6-311+G 6-311G plus diffuse functions on all non-hydrogens atoms", "3-21+G* 3-21G + diff. non-hydrogens + 1 pol. non-hydrogens", "3-21+GSP* 3-21GSP + diff. non-hydrogens + 1 pol. non-hydrogens", "4-22+GSP* 4-22GSP + diff. non-hydrogens + 1 pol. non-hydrogens", "6-31+G* 6-31G + diff. non-hydrogens + 1 pol. non-hydrogens", "6-311+G* 6-311G + diff. non-hydrogens + 1 pol. non-hydrogens", "3-21+G** 3-21G + diff. non-hydrogens + 1 pol. ", "3-21+GSP** 3-21GSP + diff. non-hydrogens + 1 pol. ", "4-22+GSP** 4-22GSP + diff. non-hydrogens + 1 pol. ", "6-31+G** 6-31G + diff. non-hydrogens + 1 pol. ", "6-311+G** 6-311G + diff. non-hydrogens + 1 pol. ", "3-21+G(2d) 3-21G + diff. non-hydrogens + 2 pol. non-hydrogens", "3-21+GSP(2d) 3-21GSP + diff. non-hydrogens + 2 pol. non-hydrogens", "4-22+GSP(2d) 4-22GSP + diff. non-hydrogens + 2 pol. non-hydrogens", "6-31+G(2d) 6-31G + diff. non-hydrogens + 2 pol. non-hydrogens", "6-311+G(2d) 6-311G + diff. non-hydrogens + 2 pol. non-hydrogens", "3-21+G(2d,2p) 3-21G + diff. non-hydrogens + 2 pol.", "3-21+GSP(2d,2p) 3-21GSP + diff. non-hydrogens + 2 pol.", "4-22+GSP(2d,2p) 4-22GSP + diff. non-hydrogens + 2 pol.", "6-31+G(2d,2p) 6-31G + diff. non-hydrogens + 2 pol.", "6-311+G(2d,2p) 6-311G + diff. non-hydrogens + 2 pol.", "3-21+G(2df) 3-21G + diff. non-hydrogens + 3 pol. non-hydrogens", "3-21+GSP(2df) 3-21GSP + diff. non-hydrogens + 3 pol. non-hydrogens", "4-22+GSP(2df) 4-22GSP + diff. non-hydrogens + 3 pol. non-hydrogens", "6-31+G(2df) 6-31G + diff. non-hydrogens + 3 pol. non-hydrogens", "6-311+G(2df) 6-311G + diff. non-hydrogens + 3 pol. non-hydrogens", "3-21+G(2df,2pd) 3-21G + diff. non-hydrogens + 3 pol.", "3-21+GSP(2df,2pd) 3-21GSP + diff. non-hydrogens + 3 pol.", "4-22+GSP(2df,2pd) 4-22GSP + diff. non-hydrogens + 3 pol.", "6-31+G(2df,2pd) 6-31G + diff. non-hydrogens + 3 pol.", "6-311+G(2df,2pd) 6-311G + diff. non-hydrogens + 3 pol.", "3-21+G(3df) 3-21G + diff. non-hydrogens + 4 pol. non-hydrogens", "3-21+GSP(3df) 3-21GSP + diff. non-hydrogens + 4 pol. non-hydrogens", "4-22+GSP(3df) 4-22GSP + diff. non-hydrogens + 4 pol. non-hydrogens", "6-31+G(3df) 6-31G + diff. non-hydrogens + 4 pol. non-hydrogens", "6-311+G(3df) 6-311G + diff. non-hydrogens + 4 pol. non-hydrogens", "3-21+G(3df,3pd) 3-21G + diff. non-hydrogens + 4 pol.", "3-21+GSP(3df,3pd) 3-21GSP + diff. non-hydrogens + 4 pol.", "4-22+GSP(3df,3pd) 4-22GSP + diff. non-hydrogens + 4 pol.", "6-31+G(3df,3pd) 6-31G + diff. non-hydrogens + 4 pol.", "6-311+G(3df,3pd) 6-311G + diff. non-hydrogens + 4 pol.", }; static gchar* listPopleDiffuseNonHydrogenBasisReal[] = { "3-21+G", "3-21+GSP", "4-22+GSP", "6-31+G", "6-311+G", "3-21+G*", "3-21+GSP*", "4-22+GSP*", "6-31+G*", "6-311+G*", "3-21+G**", "3-21+GSP**", "4-22+GSP**", "6-31+G**", "6-311+G**", "3-21+G(2d)", "3-21+GSP(2d)", "4-22+GSP(2d)", "6-31+G(2d)", "6-311+G(2d)", "3-21+G(2d,2p)", "3-21+GSP(2d,2p)", "4-22+GSP(2d,2p)", "6-31+G(2d,2p)", "6-311+G(2d,2p)", "3-21+G(2df)", "3-21+GSP(2df)", "4-22+GSP(2df)", "6-31+G(2df)", "6-311+G(2df)", "3-21+G(2df,2pd)", "3-21+GSP(2df,2pd)", "4-22+GSP(2df,2pd)", "6-31+G(2df,2pd)", "6-311+G(2df,2pd)", "3-21+G(3df)", "3-21+GSP(3df)", "4-22+GSP(3df)", "6-31+G(3df)", "6-311+G(3df)", "3-21+G(3df,3pd)", "3-21+GSP(3df,3pd)", "4-22+GSP(3df,3pd)", "6-31+G(3df,3pd)", "6-311+G(3df,3pd)", }; static guint numberOfPopleDiffuseNonHydrogenBasis = G_N_ELEMENTS (listPopleDiffuseNonHydrogenBasisView); /*************************************************************************************************************/ static gchar* listPopleDiffuseAllAtomsBasisView[] = { "3-21++G 3-21G plus diffuse functions on all atoms", "3-21++GSP 3-21GSP plus diffuse functions on all atoms", "4-22++GSP 4-22GSP plus diffuse functions on all atoms", "6-31++G 6-31G plus diffuse functions on all atoms", "6-311++G 6-311G plus diffuse functions on all atoms", "3-21++G* 3-21G + diff. + 1 pol. non-hydrogens", "3-21++GSP* 3-21GSP + diff. + 1 pol. non-hydrogens", "4-22++GSP* 4-22GSP + diff. + 1 pol. non-hydrogens", "6-31++G* 6-31G + diff. + 1 pol. non-hydrogens", "6-311++G* 6-311G + diff. + 1 pol. non-hydrogens", "3-21++G** 3-21G + diff. + 1 pol. ", "3-21++GSP** 3-21GSP + diff. + 1 pol. ", "4-22++GSP** 4-22GSP + diff. + 1 pol. ", "6-31++G** 6-31G + diff. + 1 pol. ", "6-311++G** 6-311G + diff. + 1 pol. ", "3-21++G(2d) 3-21G + diff. + 2 pol. non-hydrogens", "3-21++GSP(2d) 3-21GSP + diff. + 2 pol. non-hydrogens", "4-22++GSP(2d) 4-22GSP + diff. + 2 pol. non-hydrogens", "6-31++G(2d) 6-31G + diff. + 2 pol. non-hydrogens", "6-311++G(2d) 6-311G + diff. + 2 pol. non-hydrogens", "3-21++G(2d,2p) 3-21G + diff. + 2 pol.", "3-21++GSP(2d,2p) 3-21GSP + diff. + 2 pol.", "4-22++GSP(2d,2p) 4-22GSP + diff. + 2 pol.", "6-31++G(2d,2p) 6-31G + diff. + 2 pol.", "6-311++G(2d,2p) 6-311G + diff. + 2 pol.", "3-21++G(2df) 3-21G + diff. + 3 pol. non-hydrogens", "3-21++GSP(2df) 3-21GSP + diff. + 3 pol. non-hydrogens", "4-22++GSP(2df) 4-22GSP + diff. + 3 pol. non-hydrogens", "6-31++G(2df) 6-31G + diff. + 3 pol. non-hydrogens", "6-311++G(2df) 6-311G + diff. + 3 pol. non-hydrogens", "3-21++G(2df,2pd) 3-21G + diff. + 3 pol.", "3-21++GSP(2df,2pd) 3-21GSP + diff. + 3 pol.", "4-22++GSP(2df,2pd) 4-22GSP + diff. + 3 pol.", "6-31++G(2df,2pd) 6-31G + diff. + 3 pol.", "6-311++G(2df,2pd) 6-311G + diff. + 3 pol.", "3-21++G(3df) 3-21G + diff. + 4 pol. non-hydrogens", "3-21++GSP(3df) 3-21GSP + diff. + 4 pol. non-hydrogens", "4-22++GSP(3df) 4-22GSP + diff. + 4 pol. non-hydrogens", "6-31++G(3df) 6-31G + diff. + 4 pol. non-hydrogens", "6-311++G(3df) 6-311G + diff. + 4 pol. non-hydrogens", "3-21++G(3df,3pd) 3-21G + diff. + 4 pol.", "3-21++GSP(3df,3pd) 3-21GSP + diff. + 4 pol.", "4-22++GSP(3df,3pd) 4-22GSP + diff. + 4 pol.", "6-31++G(3df,3pd) 6-31G + diff. + 4 pol.", "6-311++G(3df,3pd) 6-311G + diff. + 4 pol.", }; static gchar* listPopleDiffuseAllAtomsBasisReal[] = { "3-21++G", "3-21++GSP", "4-22++GSP", "6-31++G", "6-311++G", "3-21++G*", "3-21++GSP*", "4-22++GSP*", "6-31++G*", "6-311++G*", "3-21++G**", "3-21++GSP**", "4-22++GSP**", "6-31++G**", "6-311++G**", "3-21++G(2d)", "3-21++GSP(2d)", "4-22++GSP(2d)", "6-31++G(2d)", "6-311++G(2d)", "3-21++G(2d,2p)", "3-21++GSP(2d,2p)", "4-22++GSP(2d,2p)", "6-31++G(2d,2p)", "6-311++G(2d,2p)", "3-21++G(2df)", "3-21++GSP(2df)", "4-22++GSP(2df)", "6-31++G(2df)", "6-311++G(2df)", "3-21++G(2df,2pd)", "3-21++GSP(2df,2pd)", "4-22++GSP(2df,2pd)", "6-31++G(2df,2pd)", "6-311++G(2df,2pd)", "3-21++G(3df)", "3-21++GSP(3df)", "4-22++GSP(3df)", "6-31++G(3df)", "6-311++G(3df)", "3-21++G(3df,3pd)", "3-21++GSP(3df,3pd)", "4-22++GSP(3df,3pd)", "6-31++G(3df,3pd)", "6-311++G(3df,3pd)", }; static guint numberOfPopleDiffuseAllAtomsBasis = G_N_ELEMENTS (listPopleDiffuseAllAtomsBasisView); /*************************************************************************************************************/ static gchar* listDunningBasisView[] = { "cc-pVDZ Dunning correlation concisistent polarized double zeta", "cc-(p)VDZ Same but no polarization on hydrogens", "Aug-cc-pVDZ Same but including diffuse functions", "cc-pVTZ Dunning correlation concisistent polarized triple zeta", "cc-(p)VTZ Same but no polarization on hydrogen", "Aug-cc-pVTZ Same but including diffuse functions(g-functions deleted!)", "cc-pVQZ Dunning correlation concisistent polarized quadruple zeta", "Aug-cc-pVQZ with diffuse functions", "cc-pV5Z Dunning correlation concisistent polarized quintuple zeta", "Aug-cc-pV5Z with diffuse functions", "cc-pV6Z Dunning correlation concisistent polarized sextuple zeta", "Aug-cc-pV6Z ... with diffuse functions", "cc-pCVDZ Core-polarized double-zeta correlation consistent basis set", "cc-pCVTZ Same for triple zeta", "cc-pCVQZ Same for quadruple zeta", "cc-pCV5Z Same for quintuple zeta", "cc-pV6Z Same for sextuple zeta", "Aug-pCVDZ Same double zeta with diffuse functions augmented", "Aug-pCVTZ Same for triple zeta", "Aug-pCVQZ Same for quadruple zeta", "Aug-pCV5Z Same for quintuple zeta", "Aug-cc-pV6Z Same for sextuple zeta", "DUNNING-DZP Dunning's original double zeta basis set", }; static gchar* listDunningBasisReal[] = { "cc-pVDZ", "cc-(p)VDZ", "Aug-cc-pVDZ", "cc-pVTZ", "cc-(p)VTZ", "Aug-cc-pVTZ", "cc-pVQZ", "Aug-cc-pVQZ", "cc-pV5Z", "Aug-cc-pV5Z", "cc-pV6Z", "Aug-cc-pV6Z", "cc-pCVDZ", "cc-pCVTZ", "cc-pCVQZ", "cc-pCV5Z", "cc-pV6Z", "Aug-pCVDZ", "Aug-pCVTZ", "Aug-pCVQZ", "Aug-pCV5Z", "Aug-cc-pV6Z", }; static guint numberOfDunningBasis = G_N_ELEMENTS (listDunningBasisView); /*************************************************************************************************************/ static gchar* listAhlrichsBasisView[] = { "SV Ahlrichs split valence basis set", "VDZ Ahlrichs split valence basis set", "VTZ Ahlrichs Valence triple zeta basis set", "TZV Ahlrichs triple-zeta valence basis set. NOT identical to VTZ", "QZVP Ahlrichs quadruple-zeta basis set. P is already polarized", "DZ Ahlrichs double zeta basis set", "QZVPP(-g,-f) QZVPP with higest polarization functions deleted", "SV(P) SV + One polar set on all non-hydrogens atoms", "VDZ(P) VDZ + One polar set on all non-hydrogens atoms", "VTZ(P) VTZ + One polar set on all non-hydrogens atoms", "TZV(P) TZV + One polar set on all non-hydrogens atoms", "DZ(P) DZ + One polar set on all non-hydrogens atoms", "SVP SV + One polar set on all atoms", "VDZP VDZ + One polar set on all atoms", "VTZP VTZ + One polar set on all atoms", "TZVP TZV + One polar set on all atoms", "DZP DZ + One polar set on all atoms", "SV(2D) SV + Two polar set on all non-hydrogens atoms", "VDZ(2D) VDZ + Two polar set on all non-hydrogens atoms", "VTZ(2D) VTZ + Two polar set on all non-hydrogens atoms", "TZV(2D) TZV + Two polar set on all non-hydrogens atoms", "DZ(2D) DZ + Two polar set on all non-hydrogens atoms", "SV(2D,2P) SV + Two polar set on all atoms", "VDZ(2D,2P) VDZ + Two polar set on all atoms", "VTZ(2D,2P) VTZ + Two polar set on all atoms", "TZV(2D,2P) TZV + Two polar set on all atoms", "DZ(2D,2P) DZ + Two polar set on all atoms", "SV(2df) SV + Three polar set on all non-hydrogens atoms", "VDZ(2df) VDZ + Three polar set on all non-hydrogens atoms", "VTZ(2df) VTZ + Three polar set on all non-hydrogens atoms", "TZV(2df) TZV + Three polar set on all non-hydrogens atoms", "DZ(2df) DZ + Three polar set on all non-hydrogens atoms", "SV(2df,2pd) SV + Three polar set on all atoms", "VDZ(2df,2pd) VDZ + Three polar set on all atoms", "VTZ(2df,2pd) VTZ + Three polar set on all atoms", "TZV(2df,2pd) TZV + Three polar set on all atoms", "DZ(2df,2pd) DZ + Three polar set on all atoms", "SV(PP) SV + Three polar set on all non-hydrogens atoms", "VDZ(PP) VDZ + Three polar set on all non-hydrogens atoms", "VTZ(PP) VTZ + Three polar set on all non-hydrogens atoms", "TZV(PP) TZV + Three polar set on all non-hydrogens atoms", "DZ(PP) DZ + Three polar set on all non-hydrogens atoms", "SVPP SV + Three polar set on all atoms", "VDZPP VDZ + Three polar set on all atoms", "VTZPP VTZ + Three polar set on all atoms", "TZVPP TZV + Three polar set on all atoms", "DZPP DZ + Three polar set on all atoms", "SV(P)+ SV plus Pople diff. func. + 1 polar on non-hydrogens", "VDZ(P)+ VDZ plus Pople diff. func. + 1 polar on non-hydrogens", "VTZ(P)+ VTZ plus Pople diff. func. + 1 polar on non-hydrogens", "TZV(P)+ TZV plus Pople diff. func. + 1 polar on non-hydrogens", "SVP++ SV plus Pople diff. func. + One polar set on all atoms", "TZVP++ TZV plus Pople diff. func. + One polar set on all atoms", "TZV(2D) TZV lus Pople diff. func. + One polar set on all atoms", "aug-SV(P) SV plus Dunning diff. One polar set on all non-hydrogens atoms", "aug-VDZ(P) VDZ plus Dunning diff. One polar set on all non-hydrogens atoms", "aug-VTZ(P) VTZ plus Dunning diff. One polar set on all non-hydrogens atoms", "aug-TZV(P) TZV plus Dunning diff. One polar set on all non-hydrogens atoms", "aug-DZ(P) DZ plus Dunning diff. One polar set on all non-hydrogens atoms", "aug-SVP SV plus Dunning diff. One polar set on all atoms", "aug-VDZP VDZ plus Dunning diff. One polar set on all atoms", "aug-VTZP VTZ plus Dunning diff. One polar set on all atoms", "aug-TZVP TZV plus Dunning diff. One polar set on all atoms", "aug-DZP DZ plus Dunning diff. One polar set on all atoms", "aug-SV(2D) SV plus Dunning diff. Two polar set on all non-hydrogens atoms", "aug-VDZ(2D) VDZ plus Dunning diff. Two polar set on all non-hydrogens atoms", "aug-VTZ(2D) VTZ plus Dunning diff. Two polar set on all non-hydrogens atoms", "aug-TZV(2D) TZV plus Dunning diff. Two polar set on all non-hydrogens atoms", "aug-DZ(2D) DZ plus Dunning diff. Two polar set on all non-hydrogens atoms", "aug-SV(2D,2P) SV plus Dunning diff. Two polar set on all atoms", "aug-VDZ(2D,2P) VDZ plus Dunning diff. Two polar set on all atoms", "aug-VTZ(2D,2P) VTZ plus Dunning diff. Two polar set on all atoms", "aug-TZV(2D,2P) TZV plus Dunning diff. Two polar set on all atoms", "aug-DZ(2D,2P) DZ plus Dunning diff. Two polar set on all atoms", "aug-SV(2df) SV plus Dunning diff. Three polar set on all non-hydrogens atoms", "aug-VDZ(2df) VDZ plus Dunning diff. Three polar set on all non-hydrogens atoms", "aug-VTZ(2df) VTZ plus Dunning diff. Three polar set on all non-hydrogens atoms", "aug-TZV(2df) TZV plus Dunning diff. Three polar set on all non-hydrogens atoms", "aug-DZ(2df) DZ plus Dunning diff. Three polar set on all non-hydrogens atoms", "aug-SV(2df,2pd) SV plus Dunning diff. Three polar set on all atoms", "aug-VDZ(2df,2pd) VDZ plus Dunning diff. Three polar set on all atoms", "aug-VTZ(2df,2pd) VTZ plus Dunning diff. Three polar set on all atoms", "aug-TZV(2df,2pd) TZV plus Dunning diff. Three polar set on all atoms", "aug-DZ(2df,2pd) DZ plus Dunning diff. Three polar set on all atoms", "aug-SV(PP) SV plus Dunning diff. Three polar set on all non-hydrogens atoms", "aug-VDZ(PP) VDZ plus Dunning diff. Three polar set on all non-hydrogens atoms", "aug-VTZ(PP) VTZ plus Dunning diff. Three polar set on all non-hydrogens atoms", "aug-TZV(PP) TZV plus Dunning diff. Three polar set on all non-hydrogens atoms", "aug-DZ(PP) DZ plus Dunning diff. Three polar set on all non-hydrogens atoms", "aug-SVPP SV plus Dunning diff. Three polar set on all atoms", "aug-VDZPP VDZ plus Dunning diff. Three polar set on all atoms", "aug-VTZPP VTZ plus Dunning diff. Three polar set on all atoms", "aug-TZVPP TZV plus Dunning diff. Three polar set on all atoms", "aug-DZPP DZ plus Dunning diff. Three polar set on all atoms", }; static gchar* listAhlrichsBasisReal[] = { "SV", "VDZ", "VTZ", "TZV", "QZVP", "DZ", "QZVPP(-g,-f)", "SV(P)", "VDZ(P)", "VTZ(P)", "TZV(P)", "DZ(P)", "SVP", "VDZP", "VTZP ", "TZVP ", "DZP", "SV(2D)", "VDZ(2D)", "VTZ(2D)", "TZV(2D)", "DZ(2D)", "SV(2D,2P)", "VDZ(2D,2P)", "VTZ(2D,2P)", "TZV(2D,2P)", "DZ(2D,2P)", "SV(2df)", "VDZ(2df)", "VTZ(2df)", "TZV(2df)", "DZ(2df)", "SV(2df,2pd)", "VDZ(2df,2pd)", "VTZ(2df,2pd)", "TZV(2df,2pd)", "DZ(2df,2pd)", "SV(PP)", "VDZ(PP)", "VTZ(PP)", "TZV(PP)", "DZ(PP)", "SVPP", "VDZPP", "VTZPP", "TZVPP", "DZPP", "SV(P)+", "VDZ(P)+", "VTZ(P)+", "TZV(P)+", "SVP++", "TZVP++", "TZV(2D)", "aug-SV(P)", "aug-VDZ(P)", "aug-VTZ(P)", "aug-TZV(P)", "aug-DZ(P)", "aug-SVP", "aug-VDZP", "aug-VTZP", "aug-TZVP", "aug-DZP", "aug-SV(2D)", "aug-VDZ(2D)", "aug-VTZ(2D)", "aug-TZV(2D)", "aug-DZ(2D)", "aug-SV(2D,2P)", "aug-VDZ(2D,2P)", "aug-VTZ(2D,2P)", "aug-TZV(2D,2P)", "aug-DZ(2D,2P)", "aug-SV(2df)", "aug-VDZ(2df)", "aug-VTZ(2df)", "aug-TZV(2df)", "aug-DZ(2df)", "aug-SV(2df,2pd)", "aug-VDZ(2df,2pd)", "aug-VTZ(2df,2pd)", "aug-TZV(2df,2pd)", "aug-DZ(2df,2pd)", "aug-SV(PP)", "aug-VDZ(PP)", "aug-VTZ(PP)", "aug-TZV(PP)", "aug-DZ(PP)", "aug-SVPP", "aug-VDZPP", "aug-VTZPP", "aug-TZVPP", "aug-DZPP", }; static guint numberOfAhlrichsBasis = G_N_ELEMENTS (listAhlrichsBasisView); /*************************************************************************************************************/ static gchar* listDef2AhlrichsBasisView[] = { "Def2-SV(P) SV basis set with 'new' polarization functions", "Def2-SVP", "Def2-TZVP TZVP basis set with 'new' polarization functions", "Def2-TZVP(-f) Delete the f-polarization functions from def2-TZVP", "Def2-TZVP(-df) delete the double d-function and replace it by the older single d-function.", "Def2-TZVPP TZVPP basis set with 'new' polarization functions", "Def2-aug-TZVPP Same but with diffuse functions from aug-cc-pVTZ", "Def2-QZVPP Very accurate quadruple-zeta basis.", "Def2-QZVPP(-g,-f) higest angular momentum polarization functions deleted", }; static gchar* listDef2AhlrichsBasisReal[] = { "Def2-SV(P)", "Def2-SVP", "Def2-TZVP", "Def2-TZVP(-f)", "Def2-TZVP(-df)", "Def2-TZVPP", "Def2-aug-TZVPP", "Def2-QZVPP", "Def2-QZVPP(-g,-f)", }; static guint numberOfDef2AhlrichsBasis = G_N_ELEMENTS (listDef2AhlrichsBasisView); /*************************************************************************************************************/ static gchar* listJensenBasisView[] = { "PC-1 Polarization consistent basis sets (H-Ar) optimized for DFT", "PC-2 double zeta polarization consistent basis sets (H-Ar) optimized for DFT", "PC-3 triple zeta polarization consistent basis sets (H-Ar) optimized for DFT", "PC-4 quadruple zeta polarization consistent basis sets (H-Ar) optimized for DFT", "Aug-PC-1 PC-1 with augmentations by diffuse functions", "Aug-PC-2 PC-2 with augmentations by diffuse functions", "Aug-PC-3 PC-3 with augmentations by diffuse functions", "Aug-PC-4 PC-4 with augmentations by diffuse functions", }; static gchar* listJensenBasisReal[] = { "PC-1", "PC-2", "PC-3", "PC-4", "Aug-PC-1", "Aug-PC-2", "Aug-PC-3", "Aug-PC-4", }; static guint numberOfJensenBasis = G_N_ELEMENTS (listJensenBasisView); /*************************************************************************************************************/ static gchar* listANOBasisView[] = { "ano-pVDZ better than the cc-pVDZ (but much larger number of primitives of course)", "ano-pVTZ", "ano-pVQZ", "ano-pV5Z", "saug-ano-pVDZ ano-pVDZ augmentation with a single set of s,p functions.", "saug-ano-pVTZ ano-pVTZ augmentation with a single set of s,p functions.", "saug-ano-pVQZ ano-pVQZ augmentation with a single set of s,p functions. ", "saug-ano-pV5Z ano-pV5Z augmentation with a single set of s,p functions.", "aug-ano-pVDZ ano-pVDZ full augmentation with spd", "aug-ano-pVTZ ano-pVTZ full augmentation with spdf", "aug-ano-pVQZ ano-pVQZ full augmentation with spdfg", "BNANO-DZP (Bonn-ANO-DZP), small DZP type ANO basis set from the Bonn group", "BNANO-TZ2P (Bonn-ANO-TZ2P), slightly larger triple-zeta ANO with two pol. Bonn group", "BNANO-TZ3P Same but with a contracted set of f-polarization functions on the heavy atoms", "NASA-AMES-ANO The original NASA/AMES ANO basis set (quadruple-zeta type)", "BAUSCHLICHER ANO First row transition metal ANO sets", "ROOS-ANO-DZP A fairly large DZP basis set from Roos, same size as aug-ano-pVDZ", "ROOS-ANO-TZP A fairly large TZP basis from Roos, same size as aug-ano-pVTZ", }; static gchar* listANOBasisReal[] = { "ano-pVDZ", "ano-pVTZ", "ano-pVQZ", "ano-pV5Z", "saug-ano-pVDZ", "saug-ano-pVTZ", "saug-ano-pVQZ", "saug-ano-pV5Z", "aug-ano-pVDZ", "aug-ano-pVTZ", "aug-ano-pVQZ", "BNANO-DZP", "BNANO-TZ2P", "BNANO-TZ3P", "NASA-AMES-ANO", "BAUSCHLICHER", "ROOS-ANO-DZP", "ROOS-ANO-TZP", }; static guint numberOfANOBasis = G_N_ELEMENTS (listANOBasisView); /*************************************************************************************************************/ static gchar* listMiscellenousBasisView[] = { "DGAUSS DGauss polarized valence double zeta basis set", "DZVP-DFT DGauss polarized valence double zeta basis set", "SADLEJ-PVTZ Sadlej's polarized triple zeta basis for poarlizability and related calculations", "EPR-II Barone's Basis set for EPR calculations (double zeta)", "EPR-III Barone's Basis set for EPR calculations (triple-zeta)", "IGLO-II Kutzelniggs basis set for NMR and EPR calculations", "IGLO-III Kutzelniggs basis set for NMR and EPR calculations (accurate)", "Partridge-1 Accurate uncontracted basis set", "Partridge-2 Accurate uncontracted basis set", "Partridge-3 Accurate uncontracted basis set", "Wachters Good first row transition metal basis set", }; static gchar* listMiscellenousBasisReal[] = { "DGAUSS", "DZVP-DFT", "SADLEJ-PVTZ", "EPR-II", "EPR-III", "IGLO-II", "IGLO-III", "Partridge-1", "Partridge-2", "Partridge-3", "Wachters", }; static guint numberOfMiscellenousBasis = G_N_ELEMENTS (listMiscellenousBasisView); /*************************************************************************************************************/ static gchar* listAuxBasisView[] = { "AutoAux Automatic construction of a general purpose fitting basis", "DEMON/J The DeMon/J Coulomb fitting basis", "DGAUSS/J The DGauss A1 Coulomb fitting basis", "SV/J (=VDZ/J) Ahlrichs Coulomb fitting basis for the SVP basis", "TZV/J (=VTZ/J) Ahlrichs Coulomb fitting basis for the TZV or TZVP basis", "QZVPP/J Ahlrichs Coulomb fitting for the QZVPP basis", "Def2-SVP/J Ahlrichs Coulomb fitting for def-SVP", "Def2-TZVPP/J Ahlrichs Coulomb fitting for def2-TZVPP/J", "Def2-QZVPP/J Ahlrichs Coulomb fitting for def2-QZVPP/J", "SV/J(-f) Same as SV/J but with the highest angular momentum aux-function deleted", "TZV/J(-f) Same as TZV/J but with the highest angular momentum aux-function deleted", "SV/C (=VDZ/C) The Ahlrichs correlation fitting basis for MP2-RI with SVP", "TZV/C (=VTZ/C) The Ahlrichs correlation fitting basis for MP2-RI with TZVP", "TZVPP/C (=VTZPP/C) The Ahlrichs correlation fitting basis for MP2-RI with extended triple-z bases", "QZVP/C Correlation fitting for the QZVP basis", "QZVPP/C Correlation fitting for the QZVPP basis", "Def2-SVP/C Correlation fitting for the def2-SVP basis", "Def2-TZVP/C Correlation fitting for the def2-TZVP basis", "Def2-TZVPP/C Correlation fitting for the def2-TZVPP basis", "Def2-QZVPP/C Correlation fitting for the def2-QZVPP basis", "cc-pVDZ/C Aux-basis for the cc-pVDZ orbital basis", "cc-pVTZ/C Aux-basis for the cc-pVTZ orbital basis", "cc-pVQZ/C Aux-basis for the cc-pVQZ orbital basis", "cc-pV5Z/C Aux-basis for the cc-pV5Z orbital basis", "cc-pV6Z/C Aux-basis for the cc-pV6Z orbital basis,", "Aug-cc-pVDZ/C Aux-basis for the aug-cc-pVDZ orbital basis", "Aug-cc-pVTZ/C Aux-basis for the aug-cc-pVTZ orbital basis", "Aug-SV/C Aux basis for SVP and related bases but with diffuse functions", "Aug-TZV/C Aux basis for TZVP and related bases but with diffuse functions", "Aug-TZVPP/C Aux basis for TZVPP and related bases but with diffuse functions", "SVP/JK Coulomb+Exchange fitting for SVP", "TZVPP/JK Coulomb+Exchange fitting for TZVPP", "QZVPP/JK Coulomb+Exchange fitting for QZVPP", "Def2-SVP/JK Coulomb+Exchange fitting for def2-SVP", "Def2-TZVPP/JK Coulomb+Exchange fitting for def2-TZVPP", "Def2-QZVPP/JK Coulomb+Exchange fitting for def2-QZVPP", "cc-pVDZ/JK Coulomb+Exchange fitting for cc-pVDZ", "cc-pVTZ/JK Coulomb+Exchange fitting for cc-pVTZ", "cc-pVQZ/JK Coulomb+Exchange fitting for cc-pVQZ", "cc-pV5Z/JK Coulomb+Exchange fitting for cc-pV5Z", "cc-pV6Z/JK Coulomb+Exchange fitting for cc-pV6Z", }; static gchar* listAuxBasisReal[] = { "AutoAux", "DEMON/J", "DGAUSS/J", "SV/J", "TZV/J", "QZVPP/J", "Def2-SVP/J", "Def2-TZVPP/J", "Def2-QZVPP/J", "SV/J(-f)", "TZV/J(-f)", "SV/C (=VDZ/C)", "TZV/C (=VTZ/C)", "TZVPP/C (=VTZPP/C)", "QZVP/C", "QZVPP/C", "Def2-SVP/C", "Def2-TZVP/C", "Def2-TZVPP/C", "Def2-QZVPP/C", "cc-pVDZ/C", "cc-pVTZ/C", "cc-pVQZ/C", "cc-pV5Z/C", "cc-pV6Z/C", "Aug-cc-pVDZ/C", "Aug-cc-pVTZ/C", "Aug-SV/C", "Aug-TZV/C", "Aug-TZVPP/C", "SVP/JK", "TZVPP/JK", "QZVPP/JK", "Def2-SVP/JK", "Def2-TZVPP/JK", "Def2-QZVPP/JK", "cc-pVDZ/JK", "cc-pVTZ/JK", "cc-pVQZ/JK", "cc-pV5Z/JK", "cc-pV6Z/JK", }; static guint numberOfAuxBasis = G_N_ELEMENTS (listAuxBasisView); /*************************************************************************************************************/ static void setOrcaBasis(GtkWidget* comboBasis) { gint i; if(strcmp(selectedTypeBasis, "Pople")==0) { listBasisView = listPopleBasisView; listBasisReal = listPopleBasisReal; numberOfBasis = numberOfPopleBasis; } else if(strcmp(selectedTypeBasis, "PopleDiffuseNonHydrogen")==0) { listBasisView = listPopleDiffuseNonHydrogenBasisView; listBasisReal = listPopleDiffuseNonHydrogenBasisReal; numberOfBasis = numberOfPopleDiffuseNonHydrogenBasis; } else if(strcmp(selectedTypeBasis, "PopleDiffuseAllAtoms")==0) { listBasisView = listPopleDiffuseAllAtomsBasisView; listBasisReal = listPopleDiffuseAllAtomsBasisReal; numberOfBasis = numberOfPopleDiffuseAllAtomsBasis; } else if(strcmp(selectedTypeBasis, "Dunning")==0) { listBasisView = listDunningBasisView; listBasisReal = listDunningBasisReal; numberOfBasis = numberOfDunningBasis; } else if(strcmp(selectedTypeBasis, "Ahlrichs")==0) { listBasisView = listAhlrichsBasisView; listBasisReal = listAhlrichsBasisReal; numberOfBasis = numberOfAhlrichsBasis; } else if(strcmp(selectedTypeBasis, "Def2Ahlrichs")==0) { listBasisView = listDef2AhlrichsBasisView; listBasisReal = listDef2AhlrichsBasisReal; numberOfBasis = numberOfDef2AhlrichsBasis; } else if(strcmp(selectedTypeBasis, "Jensen")==0) { listBasisView = listJensenBasisView; listBasisReal = listJensenBasisReal; numberOfBasis = numberOfJensenBasis; } else if(strcmp(selectedTypeBasis, "ANO")==0) { listBasisView = listANOBasisView; listBasisReal = listANOBasisReal; numberOfBasis = numberOfANOBasis; } else { listBasisView = listMiscellenousBasisView; listBasisReal = listMiscellenousBasisReal; numberOfBasis = numberOfMiscellenousBasis; } if (comboBasis && GTK_IS_COMBO_BOX(comboBasis)) { GtkTreeModel * model = NULL; model = gtk_combo_box_get_model(GTK_COMBO_BOX(comboBasis)); gtk_list_store_clear(GTK_LIST_STORE(model)); for(i=0;ichild; g_object_set_data(G_OBJECT (entry), "Combo",combo); return entry; } /***********************************************************************************************/ void addOrcaTypeBasisToTable(GtkWidget *table, gint i, GtkWidget* comboBasis) { GtkWidget* combo = NULL; add_label_table(table,_("Type"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); combo = create_list_type_basis(comboBasis); gtk_table_attach(GTK_TABLE(table),combo,2,2+1,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); } /***********************************************************************************************/ GtkWidget* addOrcaBasisToTable(GtkWidget *table, gint i) { GtkWidget* entryBasis = NULL; GtkWidget* comboBasis = NULL; gint nlistBasis = 1; gchar* listBasis[] = {" "}; add_label_table(table,_("Basis"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryBasis = addComboListToATable(table, listBasis, nlistBasis, i, 2, 1); comboBasis = g_object_get_data(G_OBJECT (entryBasis), "Combo"); gtk_widget_set_sensitive(entryBasis, TRUE); gtk_editable_set_editable(GTK_EDITABLE(entryBasis),FALSE); g_signal_connect(G_OBJECT(entryBasis),"changed", G_CALLBACK(changedEntryBasis),NULL); return comboBasis; } /***********************************************************************************************/ void addOrcaAuxBasisToTable(GtkWidget *table, gint i, GtkWidget* comboMethod, GtkWidget* comboExcited) { GtkWidget* entryAuxBasis = NULL; GtkWidget* comboAuxBasis = NULL; GtkWidget* label = NULL; label = add_label_table(table,_("Auxiliary basis"),(gushort)i,0); if(comboMethod) g_object_set_data(G_OBJECT (comboMethod), "LabelAuxBasis1", label); if(comboExcited) g_object_set_data(G_OBJECT (comboExcited), "LabelAuxBasis1", label); label = add_label_table(table,":",(gushort)i,1); if(comboMethod) g_object_set_data(G_OBJECT (comboMethod), "LabelAuxBasis2", label); if(comboExcited) g_object_set_data(G_OBJECT (comboExcited), "LabelAuxBasis2", label); entryAuxBasis = addComboListToATable(table, listAuxBasisView, numberOfAuxBasis, i, 2, 1); comboAuxBasis = g_object_get_data(G_OBJECT (entryAuxBasis), "Combo"); gtk_widget_set_sensitive(entryAuxBasis, TRUE); gtk_editable_set_editable(GTK_EDITABLE(entryAuxBasis),FALSE); if(comboMethod) g_object_set_data(G_OBJECT (comboMethod), "ComboAuxBasis", comboAuxBasis); if(comboExcited) g_object_set_data(G_OBJECT (comboExcited), "ComboAuxBasis", comboAuxBasis); g_signal_connect(G_OBJECT(entryAuxBasis),"changed", G_CALLBACK(changedEntryAuxBasis),NULL); orcaMolecule.auxBasisName=g_strdup(listAuxBasisReal[0]); } /***********************************************************************************************/ static void putOrcaBasisInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer," %s ",orcaBasis.name); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } /***********************************************************************************************/ void putOrcaAuxBasisInTextEditor() { gchar buffer[BSIZE]; if(!orcaMolecule.auxBasisName) return; sprintf(buffer," %s",orcaMolecule.auxBasisName); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } /***********************************************************************************************/ void putOrcaBasisInfoInTextEditor() { putOrcaBasisInTextEditor(); } GabeditSrc250/src/Orca/Makefile0000644000175100017510000000064513130664665016622 0ustar allouchealloucheOBJECTS = Orca.o OrcaMolecule.o OrcaKeywords.o OrcaGuess.o OrcaBasis.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/Orca/Orca.h0000644000175100017510000000271713130665225016212 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_ORCA_H__ #define __GABEDIT_ORCA_H__ void destroyWinsOrca(GtkWidget *win,gpointer data); void newOrca(); void insertOrca(); #endif /* __GABEDIT_ORCA_H__ */ GabeditSrc250/src/Orca/OrcaGuess.c0000644000175100017510000001455213130665225017214 0ustar alloucheallouche/* OrcaGuess.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Orca/OrcaTypes.h" #include "../Orca/OrcaGlobal.h" #include "../Orca/OrcaBasis.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget *guessFrame = NULL; /*************************************************************************************************************/ static gchar* listGuessMethodView[] = { "Default", "PATOM : polarized atoms guess", "PMODEL : model potential guess", "HUECKEL : extended Huckel guess", "HCORE : one-electron matrix guess", }; static gchar* listGuessMethodReal[] = { "NONE", "PATOM", "PMODEL", "HUECKEL", "HCORE", }; static guint numberOfGuessMethods = G_N_ELEMENTS (listGuessMethodView); static gchar selectedGuessMethod[BSIZE]="NONE"; /*************************************************************************************************************/ void initOrcaGuessFrame() { guessFrame = NULL; } /*************************************************************************************************************/ static void putOrcaGuessOptionsInfoInTextEditor() { } /************************************************************************************************************/ static void putOrcaGuessMethodInfoInTextEditor() { if( strcmp(selectedGuessMethod,"NONE")==0 ) return; { gchar buffer[BSIZE]; sprintf(buffer," %s ",selectedGuessMethod); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } } /*************************************************************************************************************/ void putOrcaGuessInfoInTextEditor() { putOrcaGuessMethodInfoInTextEditor(); putOrcaGuessOptionsInfoInTextEditor(); } /************************************************************************************************************/ static void traitementGuessMethod (GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; gchar* res = NULL; gint i; /* gchar* s;*/ if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } for(i=0;i #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Orca/OrcaTypes.h" #include "../Orca/OrcaGlobal.h" #include "../Orca/OrcaMolecule.h" #include "../Orca/OrcaBasis.h" #include "../Orca/OrcaGuess.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget* comboSCF = NULL; static GtkWidget* comboMethod = NULL; static GtkWidget* comboTypeMethod = NULL; static GtkWidget* comboExcited = NULL; static void setOrcaMethods(); /*************************************************************************************************************/ static gchar* listJobView[] = { "Single Point Energy", "Equilibrium structure search", "Frequencies", "Transition state", "Equilibrium structure search + Frequencies", "Transition state + Frequencies", }; static gchar* listJobReal[] = { "SP", "Opt", "NumFreq", "OptTS", "Opt NumFreq", "OptTS NumFreq", }; static guint numberOfJobs = G_N_ELEMENTS (listJobView); static gchar selectedJob[BSIZE]="SP"; /*************************************************************************************************************/ static gchar* listSCFView[] = { "default","unrestricted", "restricted"}; static gchar* listSCFReal[] = { "DEF", "TRUE", "FALSE"}; static guint numberOfSCF = G_N_ELEMENTS (listSCFView); static gchar selectedSCF[BSIZE]="DEF"; /*************************************************************************************************************/ static gchar* listTypeMethodsView[] = { "Hartree-Fock", "Local and gradient corrected functionals", "Hybrid functionals", "Meta-GGA and hybrid meta-GGA's", "Perturbatively corrected double hybrid functional", "Second Order Many Body Perturbation Theory", "High-level Single Reference Methods", "Semiempirical Methods", }; static gchar* listTypeMethodsReal[] = { "HF", "DFT", "Hybrid", "Meta-GGA", "D-Hybrid", "MP2", "HL-SR", "SemiEmp", }; static guint numberOfTypeMethods = G_N_ELEMENTS (listTypeMethodsView); static gchar selectedTypeMethod[BSIZE]="HF"; /*************************************************************************************************************/ static gchar* listHFMethodsView[] = { "HF", }; static gchar* listHFMethodsReal[] = { "HF", }; static guint numberOfHFMethods = G_N_ELEMENTS (listHFMethodsView); /*************************************************************************************************************/ static gchar* listDFTMethodsView[] = { "HFS Hartree-Fock-Slater Exchange only functional", "LDA Local density approximation", "VWN5 Vosko-Wilk-Nusair local density approx", "VWN3 Vosko-Wilk-Nusair local density approx.", "PWLDA Perdew-Wang parameterization of LDA", "BP86 Becke '88 exchange and Perdew '86 correlation", "BLYP Becke '88 exchange and Lee-Yang-Parr correlation", "OLYP Handy's 'optimal' exchange and Lee-Yang-Parr correlation", "GLYP Gill's '96 exchange and Lee-Yang-Parr correlation", "XLYP The Xu and Goddard exchange and Lee-Yang-Parr correlation", "PW91 Perdew-Wang '91 GGA functional", "mPWPW Modified PW exchange and PW correlation", "mPWLYP Modified PW exchange and LYP correlation", "PBE Perdew-Burke-Erzerhoff GGA functional", "RPBE 'Modified' PBE", "REVPBE 'Revised' PBE", "PWP Perdew-Wang '91 exchange and Perdew 86 correlation" }; static gchar* listDFTMethodsReal[] = { "HFS", "LDA", "VWN5", "VWN3", "PWLDA", "BP86", "BLYP", "OLYP", "GLYP", "XLYP", "PW91", "mPWPW", "mPWLYP", "PBE", "RPBE", "REVPBE", "PWP", }; static guint numberOfDFTMethods = G_N_ELEMENTS (listDFTMethodsView); /*************************************************************************************************************/ static gchar* listHybridMethodsView[] = { "B1LYP The one-parameter hybrid Becke'88 exchange and LYP correlation (25% HF exchange)", "B3LYP The popular B3LYP functional (20% HF exchange)", "O3LYP The Handy hybrid functional", "X3LYP The Xu and Goddard hybrid functional", "B1P The one parameter hybrid version of BP86", "B3P The three parameter hybrid version of BP86", "B3PW The three parameter hybrid version of PW91", "PW1PW One parameter hybrid version of PW91", "mPW1PW One parameter hybrid version of mPWPW", "mPW1LYP One parameter hybrid version of mPWLYP", "PBE0 One parameter hybrid version of PBE", }; static gchar* listHybridMethodsReal[] = { "B1LYP", "B3LYP", "O3LYP", "X3LYP", "B1P", "B3P", "B3PW", "PW1PW", "mPW1PW", "mPW1LYP", "PBE0", }; static guint numberOfHybridMethods = G_N_ELEMENTS (listHybridMethodsView); /*************************************************************************************************************/ static gchar* listMetaGGAMethodsView[] = { "TPSS The TPSS meta-GGA functional", "TPSSh The hybrid version of TPSS", "TPSS0 A 25% exchange version of TPSShi", }; static gchar* listMetaGGAMethodsReal[] = { "TPSS", "TPSSh", "TPSS0", }; static guint numberOfMetaGGAMethods = G_N_ELEMENTS (listMetaGGAMethodsView); /*************************************************************************************************************/ static gchar* listDHybridMethodsView[] = { "B2PLYP The new mixture of MP2 and DFT from Grimme", "RI-B2PLYP B2PLYP with RI applied to the MP2 part", "B2PLYP-D B2PLYP with Van der Waals correction", "RI-B2PLYP RIJONX The same but with RI also applied in the SCF part", "mPW2PLYP mPW exchange instead of B88 (also with RI and RIJONX as above for B2PYLP)", "mPW is supposed to improve on weak interactions", "B2GP-PLYP Gershom Martin's 'general purpose' reparameterization", "B2K-PLYP Gershom Martin's 'kinetic' reparameterization", "B2T-PLYP Gershom Martin's 'thermochemistry' reparameterization", }; static gchar* listDHybridMethodsReal[] = { "B2PLYP", "RI-B2PLYP", "B2PLYP-D", "RI-B2PLYP", "mPW2PLYP", "mPW", "B2GP-PLYP", "B2K-PLYP", "B2T-PLYP", }; static guint numberOfDHybridMethods = G_N_ELEMENTS (listDHybridMethodsView); /*************************************************************************************************************/ static gchar* listMP2MethodsView[] = { "MP2", "RI-MP2", "SCS-MP2 Spin-component scaled MP2", "RI-SCS-MP2 Spin-component scaled RI-MP2", }; static gchar* listMP2MethodsReal[] = { "MP2", "RI-MP2", "SCS-MP2", "RI-SCS-MP2", }; static guint numberOfMP2Methods = G_N_ELEMENTS (listMP2MethodsView); /*************************************************************************************************************/ static gchar* listHighLevelSingleRefMethodsView[] = { "CCSD Coupled cluster singles and doubles", "CCSD(T) Same with perturbative triples correction", "QCISD Quadratic Configuration interaction", "QCISD(T) Same with perturbative triples correction", "CPF/1 Coupled pair functional", "NCPF/1 A 'new' modified coupled pair functional", "CEPA/1 Coupled electron pair approximation", "NCEPA/1 The CEPA analogue of NCPF/1", "MP3 MP3 energies", "SCS-MP3 Grimme's refined version of MP3", }; static gchar* listHighLevelSingleRefMethodsReal[] = { "CCSD", "CCSD(T)", "QCISD", "QCISD(T)", "CPF/1", "NCPF/1", "CEPA/1", "NCEPA/1", "MP3", "SCS-MP3 ", }; static guint numberOfHighLevelSingleRefMethods = G_N_ELEMENTS (listHighLevelSingleRefMethodsView); /*************************************************************************************************************/ static gchar* listSemiEmpMethodsView[] = { "ZINDO/S", "ZINDO/1", "ZINDO/2", "NDDO/1", "NDDO/2", "MNDO", "AM1", "PM3", }; static gchar* listSemiEmpMethodsReal[] = { "ZINDO/S", "ZINDO/1", "ZINDO/2", "NDDO/1", "NDDO/2", "MNDO", "AM1", "PM3", }; static guint numberOfSemiEmpMethods = G_N_ELEMENTS (listSemiEmpMethodsView); /*************************************************************************************************************/ static gchar selectedMethod[BSIZE]="HF"; static gchar** listMethodsView = listHybridMethodsView; static gchar** listMethodsReal = listHybridMethodsReal; static guint numberOfMethods = G_N_ELEMENTS (listHybridMethodsView); /*************************************************************************************************************/ static gchar* listScfConvergenceView[] = { "Default", "TightSCF : tight SCF convergence", "LooseSCF : loose SCF convergence", "SloppySCF: sloppy SCF convergence", "StrongSCF: strong SCF convergence", "VeryTightSCF :very tight SCF convergence", "ScfConv6 : energy convergence check and ETol=10-6", "ScfConv7 : energy convergence check and ETol=10-7", "ScfConv8 : energy convergence check and ETol=10-8", "ScfConv9 : energy convergence check and ETol=10-9", "ScfConv10: energy convergence check and ETol=10-10", }; static gchar* listScfConvergenceReal[] = { "NONE", "TightSCF", "LooseSCF", "SloppySCF", "StrongSCF", "VeryTightSCF", "ScfConv6", "ScfConv7", "ScfConv8", "ScfConv9", "ScfConv10", }; static guint numberOfScfConvergence = G_N_ELEMENTS (listScfConvergenceView); static gchar selectedScfConvergence[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listNothingExcitedView[] = { "Nothing", }; static gchar* listNothingExcitedReal[] = { "NONE", }; static guint numberOfNothingExcited = G_N_ELEMENTS (listNothingExcitedView); /*************************************************************************************************************/ static gchar* listSemiEmpExcitedView[] = { "Nothing", "CIS", }; static gchar* listSemiEmpExcitedReal[] = { "NONE", "CIS", }; static guint numberOfSemiEmpExcited = G_N_ELEMENTS (listSemiEmpExcitedView); /*************************************************************************************************************/ static gchar* listHFExcitedView[] = { "Nothing", "CIS", "CIS(D)", }; static gchar* listHFExcitedReal[] = { "NONE", "CIS", "CIS(D)", }; static guint numberOfHFExcited = G_N_ELEMENTS (listHFExcitedView); /*************************************************************************************************************/ static gchar* listDFTExcitedView[] = { "Nothing", "TD-DFT", }; static gchar* listDFTExcitedReal[] = { "NONE", "TD-DFT", }; static guint numberOfDFTExcited = G_N_ELEMENTS (listDFTExcitedView); /*************************************************************************************************************/ static gchar selectedExcited[BSIZE]="NONE"; static gchar** listExcitedView = listNothingExcitedView; static gchar** listExcitedReal = listNothingExcitedReal; static guint numberOfExcited = G_N_ELEMENTS (listNothingExcitedView); /*************************************************************************************************************/ static void putOrcaExcitedInfoInTextEditor() { gchar buffer[BSIZE]; if(!strcmp(selectedExcited,"NONE"))return; if(strstr(selectedExcited,"CIS")) sprintf(buffer,"%ccis\n",'%'); else sprintf(buffer,"%ctddft\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer," nroots %d # the number of excited states to be calculated.\n",8); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer," maxdim %d # the maximum dimension of the expansion space in the Davidson procedure.\n",30); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); if(!strcmp(selectedExcited,"CIS(D)") || !strcmp(selectedTypeMethod,"D-Hybrid")) { sprintf(buffer, " dcorr 1\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } sprintf(buffer, " # dcorr n\n" " # n=1-4. The meaning of the four algorithms\n" " # algorithm 1 Is perhaps the best for small systems. May use a\n" " # lot of disk space\n" " # algorithm 2 Stores less integrals\n" " # algorithm 3 Is good if the system is large and only a few\n" " # states are to be made. Safes disk and main memory.\n" " # algorithm 4 Uses only transformed RI integrals. May be the\n" " # fastest for large systems and a larger number of states\n" ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); if(!strcmp(selectedTypeMethod,"DFT")) { sprintf(buffer," # TammDanCoff true Tamm-Dancoff approximation for non-hybride\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } sprintf(buffer," # Triplets true : do triplets states\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer," # EWin -3,100 (orbital energy window in Eh)\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer," # Etol 1e-3 the required convergence of the energies of the excited states (in Eh)\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer," # Rtol 1e-5 required convergence on the norm of the residual vectors.\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer," # DoQuad true Quadrupole contributions (and magnetic dipole contributions)\n"); sprintf(buffer," # essential for metal edges. For ligand edges, the contributions are much smaller.\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); if(!strcmp(selectedExcited,"CIS")) sprintf(buffer," end #cis\n"); else sprintf(buffer," end #tddft\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /*************************************************************************************************************/ static void setOrcaExcited() { GtkTreeIter iter; GtkTreeIter iter0; gint i; if(strcmp(selectedTypeMethod,"HF")==0) { listExcitedView = listHFExcitedView; listExcitedReal = listHFExcitedReal; numberOfExcited = numberOfHFExcited; } else if(strcmp(selectedTypeMethod,"DFT")==0) { listExcitedView = listDFTExcitedView; listExcitedReal = listDFTExcitedReal; numberOfExcited = numberOfDFTExcited; } else if(strcmp(selectedTypeMethod,"Hybrid")==0) { listExcitedView = listDFTExcitedView; listExcitedReal = listDFTExcitedReal; numberOfExcited = numberOfDFTExcited; } else if(strcmp(selectedTypeMethod,"Meta-GGA")==0) { listExcitedView = listDFTExcitedView; listExcitedReal = listDFTExcitedReal; numberOfExcited = numberOfDFTExcited; } else if(strcmp(selectedTypeMethod,"D-Hybrid")==0) { listExcitedView = listDFTExcitedView; listExcitedReal = listDFTExcitedReal; numberOfExcited = numberOfDFTExcited; } else if(strcmp(selectedTypeMethod,"SemiEmp")==0 && strstr(selectedMethod,"/S")) { listExcitedView = listSemiEmpExcitedView; listExcitedReal = listSemiEmpExcitedReal; numberOfExcited = numberOfSemiEmpExcited; } else { listExcitedView = listNothingExcitedView; listExcitedReal = listNothingExcitedReal; numberOfExcited = numberOfNothingExcited; } if (comboExcited && gtk_combo_box_get_active_iter (GTK_COMBO_BOX(comboExcited), &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(GTK_COMBO_BOX(comboExcited)); GtkTreeStore *store = GTK_TREE_STORE(model); gtk_tree_store_clear(store); for(i=0;iwindow,_("Orca input")); gtk_window_set_modal (GTK_WINDOW (Wins), TRUE); init_child(Wins, destroyWinsOrca,_(" Orca input ")); g_signal_connect(G_OBJECT(Wins),"delete_event",(GCallback)destroy_children,NULL); gtk_widget_realize(Wins); button = create_button(Wins,_("Cancel")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK( toCancelWin),GTK_OBJECT(Wins)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show (button); button = create_button(Wins,_("OK")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->vbox), table, FALSE, TRUE, 5); hbox =addHboxToTable(table, 0, 0, 1, 1); hboxChargeMultiplicity = hbox; hbox =addHboxToTable(table, 1, 0, 1, 2); initOrcaGuessFrame(); createOrcaKeywordsFrame(Wins, hbox); createOrcaChargeMultiplicityFrame(hboxChargeMultiplicity); hbox =addHboxToTable(table, 2, 0, 1, 2); createOrcaGuessFrame(Wins, hbox); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(putInfoInTextEditor),GTK_OBJECT(Wins)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(destroy_children),GTK_OBJECT(Wins)); gtk_widget_show_all(Wins); orcaWin = Wins; } /************************************************************************************************************/ void newOrca() { orcaInputFileWindow(TRUE); } /************************************************************************************************************/ void insertOrca() { orcaInputFileWindow(FALSE); } GabeditSrc250/src/Orca/Dep.mk0000644000175100017510000000443413130664665016223 0ustar allouchealloucheOrca.o: Orca.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Orca/OrcaTypes.h \ ../Orca/OrcaGlobal.h ../Orca/OrcaMolecule.h ../Orca/OrcaKeywords.h \ ../Orca/OrcaBasis.h ../Orca/OrcaGuess.h ../Utils/UtilsInterface.h \ ../Geometry/GeomGlobal.h ../Geometry/InterfaceGeom.h ../Utils/Utils.h \ ../Utils/AtomsProp.h ../Utils/Constants.h ../Utils/GabeditTextEdit.h OrcaMolecule.o: OrcaMolecule.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Orca/OrcaTypes.h \ ../Orca/OrcaGlobal.h ../Orca/OrcaKeywords.h ../Geometry/GeomGlobal.h \ ../Geometry/GeomConversion.h ../Geometry/GeomXYZ.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/Constants.h \ ../Utils/GabeditTextEdit.h ../Geometry/InterfaceGeom.h \ ../Common/Windows.h ../Utils/AtomsProp.h OrcaKeywords.o: OrcaKeywords.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Orca/OrcaTypes.h \ ../Orca/OrcaGlobal.h ../Orca/OrcaMolecule.h ../Orca/OrcaBasis.h \ ../Orca/OrcaGuess.h ../Utils/Utils.h ../Utils/UtilsInterface.h \ ../Utils/GabeditTextEdit.h ../Common/Windows.h ../Utils/Constants.h OrcaGuess.o: OrcaGuess.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Orca/OrcaTypes.h \ ../Orca/OrcaGlobal.h ../Orca/OrcaBasis.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/GabeditTextEdit.h \ ../Common/Windows.h ../Utils/Constants.h OrcaBasis.o: OrcaBasis.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Orca/OrcaTypes.h \ ../Orca/OrcaGlobal.h ../Geometry/GeomGlobal.h \ ../Geometry/GeomConversion.h ../Geometry/GeomXYZ.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/Constants.h \ ../Geometry/InterfaceGeom.h ../Common/Windows.h ../Utils/AtomsProp.h \ ../Utils/GabeditTextEdit.h ../Symmetry/MoleculeSymmetry.h \ ../Symmetry/MoleculeSymmetryInterface.h GabeditSrc250/src/Orca/OrcaTypes.h0000644000175100017510000000312213130665225017226 0ustar alloucheallouche #ifndef __GABEDIT_ORCATYPES_H__ #define __GABEDIT_ORCATYPES_H__ typedef struct _OrcaColorBack { GdkColor keyWord; GdkColor description; }OrcaColorBack; typedef struct _OrcaColorFore { GdkColor keyWord; GdkColor description; }OrcaColorFore; typedef struct _OrcaAtom { gdouble position[3]; gchar* symbol; }OrcaAtom; typedef struct _OrcaMolecule { gint numberOfAtoms; gint totalNumberOfElectrons; gint numberOfValenceElectrons; OrcaAtom* listOfAtoms; gchar* auxBasisName; }OrcaMolecule; typedef struct _OrcaBasis { gchar* name; gchar* molecule; int numberOfBasisTypes; gchar** basisNames; }OrcaBasis; typedef struct _OrcaGuessWaveFunction { gboolean fromHCore; gchar* method; gchar* functional; gchar* molecule; gchar* basis; gchar* memory; gint totalCharge; gint spinMultiplicity; }OrcaGuessWaveFunction; typedef enum { LSDAC = 0, PBEC, PW91C, P86C, NewP86C, VWN1LC, VWN1LCRPA, VWN2LC, VWN3LC, VWN4LC, VWN5LC, PW92LC, PZ81LC, LYPC, HFX, Xalpha, SlaterX, Becke88X, PBEX, PW86X, PW91X, mPW91_B88X, mPW91_PW91X,mPW91_mPW91X, G96X } OrcaFunctionalType; typedef enum { XALPHA = 0, HFS, HFB, HFG96, G96LYP, BLYP, SVWN1, SVWN1RPA, SVWN2, SVWN3, SVWN4, SVWN5, SPZ81, SPW92, BPW91, BP86, B3LYP, B3PW91, B3P86, PBE, PW91, mPW_PW91_PW91, mPWPW91, mPW1PW91 } OrcaStdFunctionalType; typedef struct _OrcaFunctional { OrcaFunctionalType type; gchar* name; gchar* comment; }OrcaFunctional; typedef struct _OrcaStdFunctional { OrcaStdFunctionalType type; gchar* name; gint n; OrcaFunctionalType* listOfTypes; gdouble* coefficients; }OrcaStdFunctional; #endif /* __GABEDIT_ORCATYPES_H__ */ GabeditSrc250/src/Orca/OrcaKeywords.h0000644000175100017510000000043313130665225017733 0ustar alloucheallouche#ifndef __GABEDIT_ORCAKEYWORDS_H__ #define __GABEDIT_ORCAKEYWORDS_H__ gboolean orcaSemiEmperical(); void putOrcaKeywordsInfoInTextEditor(); void createOrcaKeywordsFrame(GtkWidget *win, GtkWidget *box); void setOrcaSCFMethod(gboolean okRHF); #endif /* __GABEDIT_ORCAKEYWORDS_H__ */ GabeditSrc250/src/Common/0000755000175100017510000000000013130743374015514 5ustar allouchealloucheGabeditSrc250/src/Common/Help.c0000644000175100017510000002555013130665225016555 0ustar alloucheallouche/* Help.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" /***************************************************************************/ void help_commands() { gchar temp[BSIZE]; GtkWidget* win; sprintf(temp, _(" * For add a command to the list:\n" " Type the new command and enter. \n" " This command becomes the default command.\n\n" " * For change the default command:\n" " Select a command from the list and type enter.\n\n" " * For remove a command from the list:\n" " Select the command to be removed and clicks on the\n" " \"Remove from list\" button.\n\n\n" " * NB:\n" " You can choose as commands the name of any\n" " script which accepts any number of parameters.\n" " However last parameter accepted by script must be the name\n" " of data file(included the extension \n" " .com for Gaussian, Molpro, Molcas and\n" " .inp for Gamess, FireFly and Q-Chem).\n" ) ); win = Message(temp,_(" Info "),FALSE); gtk_window_set_modal (GTK_WINDOW (win), TRUE); } /***************************************************************************/ void help_ftp_rsh() { gchar temp[BSIZE]; GtkWidget* win; sprintf(temp, _(" To be able to use this protocol:\n\n" " * the server must support rsh \n" " * on the remot host\n" " - edit .rhosts file and add the line: \n" " yourlocalmachine yourlocallogin\n" " - save file and \n" " - excecute the orders \n" " chmod a-wx .rhosts\n" " chmod u+rw .rhosts\n" ) ); win = Message(temp,_(" Info "),FALSE); gtk_window_set_modal (GTK_WINDOW (win), TRUE); } #ifdef G_OS_WIN32 /***************************************************************************/ void help_ssh() { gchar temp[2048]; GtkWidget* win; sprintf(temp, _(" To be able to use ssh protocol:\n\n" " * the server must support ssh protocol.\n\n" " * on the local host,the pscp and plink programs must installed\n" " the 2 programes are livred with Gabedit\n" " but you can download the programs from \n" " http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html\n" ) ); win = Message(temp," Info ",FALSE); gtk_window_set_modal (GTK_WINDOW (win), TRUE); } #else /***************************************************************************/ void help_ssh() { gchar temp[2048]; GtkWidget* win; sprintf(temp, _(" To be able to use ssh protocol:\n\n" " * the server must support ssh protocol.\n\n" " * the local host must support ssh protocol.\n\n" " * on the local host, excecute the orders:\n" " ssh-keygen -t rsa (for create id_rsa ans id_rsa.pub files)\n" " ssh-keygen -t dsa (for create id_dsa ans id_dsa.pub files)\n" " for the 2 ordres : you must create the codes without passphrase.\n\n" " copy id_rsa.pub, id_dsa.pub files at HOME directory at REMOT host.\n" " (example scp id_*.pub remotlogin@remotehost:.)\n\n" " * on the remot host, excecute the orders:\n" " cat id_rsa.pub >> .ssh/authorized_keys\n" " cat id_dsa.pub >> .ssh/authorized_keys2\n" " chmod go-w .ssh/authorized_keys\n" " chmod go-w .ssh/authorized_keys2\n" ) ); win = Message(temp,_(" Info "),FALSE); gtk_window_set_modal (GTK_WINDOW (win), TRUE); } #endif /* G_OS_WIN32 */ /***************************************************************************/ void help_variables_buttons() { gchar *temp; temp= g_strdup_printf( _(" In this frame you have 6 buttons :\n\n" "New : For create a new variable\n" "Edit : For modify the selected variable\n" "Delete : For delete the selected variable\n" "<= All : For tansform all variables in constants\n" "<= One : For tansform the selected variable in constant\n" "Help : For view this window\n" ) ); Message(temp," Info ",FALSE); g_free(temp); } /***************************************************************************/ void help_geometry_buttons() { gchar *temp; temp= g_strdup_printf( _(" In this frame you have 8 buttons :\n\n" "New : For create a new center\n" "Edit : For modify a selected center\n" "Delete Last : For delete the last center\n" "Draw : For draw your geometry\n" "Save in file : For save your geometry in file\n" "All => : For tansform all contants in variables\n" "One => : For tansform the contants of selected center in variables\n" "Help : For view this window\n" ) ); Message(temp," Info ",FALSE); g_free(temp); } /***************************************************************************/ gchar* messagePovray() { #ifndef G_OS_WIN32 gchar* t = g_strdup_printf( _("You can create an animated file using gab*.pov files. For this :\n" " You must initially create files gab*.bmp using gab*.pov files. For example :\n" " povray +Igab1.pov +Ogab1.bmp +W900 +H900\n" " povray +Igab2.pov +Ogab2.bmp +W900 +H900\n" " .........................................\n" " povray +Igabn.pov +Ogabn.bmp +W900 +H900\n" " Then you can create the animated file from gab*.bmp files using convert program :\n" " convert -delay 10 -loop 1000 gab*.bmp imageAnim.gif (for a gif animated file)\n" " convert -delay 10 -loop 1000 gab*.bmp imageAnim.mng (for a png animated file)\n\n" " You can also use the xPovAnim shell (from utils/povray of Gabedit directory) for create the gif animated file from gab*.pov files.\n\n" " povray is a free software. You can download this(for any system) from http://www.povray.org\n" " convert is a free software. You can download this(for any system) from http://www.imagemagick.org\n" " (in Linux convert is probably installed)\n\n" ) ); return t; #else gchar* t = g_strdup_printf( _("You can create an animated file using gab*.pov files. For this :\n" " You must initially create files gab*.bmp using gab*.pov files.\n" " run povray\n" " in toolbar select '[320x240, AA 0.3]'\n" " int toolbar add '+W500 +H500' option\n" " click to Queue icon, you abtain a new window.\n" " click to add File and select all gab*.pov files created by Gabedit\n" " click to OK\n" " Then you can create the animated file from gab*.bmp files using convert program, for this :\n" " copy 'xAnim.bat' from Gabedit directory in directory of gab*pov files\n" " click to xAnim.bat\n\n" " convert is a free software. You can download this(for any system) from http://www.imagemagick.org\n" " povray is a free software. You can download this(for any system) from http://www.povray.org\n\n" ) ); return t; #endif } /***************************************************************************/ gchar* messageBMP() { #ifndef G_OS_WIN32 gchar* t = g_strdup( _(" You can create an animated file using convert software :\n" " convert -delay 10 -loop 1000 gab*.bmp imageAnim.gif (for a gif animated file)\n" " or\n" " convert -delay 10 -loop 1000 gab*.bmp imageAnim.mng (for a png animated file)\n\n" "convert is a free software. You can download this(for any system) from http://www.imagemagick.org\n" "(in Linux convert is probably installed)\n\n" ) ); return t; #else gchar* t = g_strdup( _("You can create an animated file using convert software, for this :\n" " copy 'xAmin.bat' from Gabedit directory in directory of gab*.bmp files\n" " or\n" " click to xAnim.bat\n\n" "convert is a free software. You can download this(for any system) from http://www.imagemagick.org\n\n" ) ); return t; #endif } /***************************************************************************/ gchar* messagePPM() { #ifndef G_OS_WIN32 gchar* t = g_strdup( _(" You can create an animated file using convert software :\n" " convert -delay 10 -loop 1000 gab*.ppm imageAnim.gif (for a gif animated file)\n" " or\n" " convert -delay 10 -loop 1000 gab*.ppm imageAnim.mng (for a png animated file)\n\n" "convert is a free software. You can download this(for any system) from http://www.imagemagick.org\n" "(in Linux convert is probably installed)\n\n" ) ); return t; #else gchar* t = g_strdup( _("You can create an animated file using convert software, for this :\n" " copy 'xAminPPM.bat' from Gabedit directory in directory of gab*.ppm files\n" " or\n" " click to xAnimPPM.bat\n\n" "convert is a free software. You can download this(for any system) from http://www.imagemagick.org\n\n" ) ); return t; #endif } /***************************************************************************/ gchar* messageAnimatedImage(gchar* format) { if(strcmp(format,"pov")==0) return messagePovray(); gchar* t = g_strdup_printf( _(" You can create an animated file using convert software :\n" " convert -delay 10 -loop 1000 gab*.%s imageAnim.gif (for a gif animated file)\n" " or\n" " convert -delay 10 -loop 1000 gab*.%s imageAnim.mng (for a png animated file)\n\n" "convert is a free software. You can download this(for any system) from http://www.imagemagick.org\n" "(in Linux convert is probably installed)\n\n"), format, format ); return t; } /***************************************************************************/ GabeditSrc250/src/Common/Run.c0000644000175100017510000071630413130665225016435 0ustar alloucheallouche/* Run.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #ifdef G_OS_WIN32 #include #else #endif /* G_OS_WIN32 */ #include #include #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Files/ListeFiles.h" #include "../Files/FileChooser.h" #include "../Files/GabeditFolderChooser.h" #include "../NetWork/RemoteCommand.h" #include "../NetWork/FilesTransfer.h" #include "../Molcas/MolcasVariables.h" static GtkWidget* ButtonLocal = NULL; static GtkWidget* ButtonRemote = NULL; static GtkWidget* ButtonDeMon = NULL; static GtkWidget* ButtonGamess = NULL; static GtkWidget* ButtonGauss = NULL; static GtkWidget* ButtonMolcas = NULL; static GtkWidget* ButtonMolpro = NULL; static GtkWidget* ButtonMPQC = NULL; static GtkWidget* ButtonOrca = NULL; static GtkWidget* ButtonNWChem = NULL; static GtkWidget* ButtonPsicode = NULL; static GtkWidget* ButtonFireFly = NULL; static GtkWidget* ButtonQChem = NULL; static GtkWidget* ButtonMopac = NULL; static GtkWidget* ButtonOther = NULL; static GtkWidget* EntryFileData = NULL; static GtkWidget* EntryCommand = NULL; static GtkWidget* ComboCommand = NULL; static GtkWidget* FrameRemote = NULL; static GtkWidget* FrameNetWork = NULL; static GtkWidget* LabelDataFile = NULL; static GtkWidget* LabelExtFile = NULL; static GtkWidget *buttonDirSelector = NULL; static GtkWidget* LabelPassWord1 = NULL; static GtkWidget* LabelPassWord2 = NULL; static GtkWidget* EntryPassWord = NULL; static gint typeButton[4] = {0, 1, 2, 3}; /* local, remote, ftp, ssh */ /********************************************************************************/ static void changedEntryFileData(GtkWidget *entry,gpointer data); /********************************************************************************/ static gboolean save_local_doc(gchar *NomFichier) { gchar *temp; FILE *fd; gint i; fd = FOpen(NomFichier, "wb"); if(fd == NULL) { Message("Sorry, I can not save file","Error",TRUE); return FALSE; } temp=gabedit_text_get_chars(text,0,-1); for(i=0;iactive) { if(button == ButtonGamess ) { #ifdef G_OS_WIN32 if(ButtonLocal && GTK_TOGGLE_BUTTON (ButtonLocal)->active) { for(i=0;iactive) { if(fileopen.command && strlen(fileopen.command)>0) gtk_entry_set_text (GTK_ENTRY (EntryCommand), fileopen.command); } else if(fileopen.command && !strstr(fileopen.command,"gamess.") && strlen(fileopen.command)>0) gtk_entry_set_text (GTK_ENTRY (EntryCommand), fileopen.command); gtk_label_set_text(GTK_LABEL(LabelExtFile), ".inp"); gtk_widget_show(LabelDataFile); iprogram = PROG_IS_GAMESS; } else if(button == ButtonDeMon ) { for(i=0;i0) gtk_entry_set_text (GTK_ENTRY (EntryCommand), fileopen.command); gtk_label_set_text(GTK_LABEL(LabelExtFile), ".inp"); gtk_widget_show(LabelDataFile); iprogram = PROG_IS_DEMON; } else if(button == ButtonGauss ) { for(i=0;i0) gtk_entry_set_text (GTK_ENTRY (EntryCommand), fileopen.command); gtk_label_set_text(GTK_LABEL(LabelExtFile), ".com"); gtk_widget_show(LabelDataFile); iprogram = PROG_IS_GAUSS; } else if(button == ButtonMPQC) { for(i=0;i0) gtk_entry_set_text (GTK_ENTRY (EntryCommand), fileopen.command); gtk_label_set_text(GTK_LABEL(LabelExtFile), ".com"); gtk_widget_show(LabelDataFile); iprogram = PROG_IS_MPQC; } else if(button == ButtonMolcas) { for(i=0;i0) gtk_entry_set_text (GTK_ENTRY (EntryCommand), fileopen.command); gtk_label_set_text(GTK_LABEL(LabelExtFile), ".com"); gtk_widget_show(LabelDataFile); iprogram = PROG_IS_MOLCAS; } else if(button == ButtonMolpro ) { for(i=0;i0) gtk_entry_set_text (GTK_ENTRY (EntryCommand), fileopen.command); gtk_label_set_text(GTK_LABEL(LabelExtFile), ".com"); gtk_widget_show(LabelDataFile); iprogram = PROG_IS_MOLPRO; } else if(button == ButtonFireFly ) { for(i=0;i0) gtk_entry_set_text (GTK_ENTRY (EntryCommand), fileopen.command); gtk_label_set_text(GTK_LABEL(LabelExtFile), ".inp"); gtk_widget_show(LabelDataFile); iprogram = PROG_IS_FIREFLY; } else if(button == ButtonOrca ) { for(i=0;i0) gtk_entry_set_text (GTK_ENTRY (EntryCommand), fileopen.command); gtk_label_set_text(GTK_LABEL(LabelExtFile), ".inp"); gtk_widget_show(LabelDataFile); iprogram = PROG_IS_ORCA; } else if(button == ButtonNWChem ) { for(i=0;i0) gtk_entry_set_text (GTK_ENTRY (EntryCommand), fileopen.command); gtk_label_set_text(GTK_LABEL(LabelExtFile), ".nw"); gtk_widget_show(LabelDataFile); iprogram = PROG_IS_NWCHEM; } else if(button == ButtonPsicode ) { for(i=0;i0) gtk_entry_set_text (GTK_ENTRY (EntryCommand), fileopen.command); gtk_label_set_text(GTK_LABEL(LabelExtFile), ".psi"); gtk_widget_show(LabelDataFile); iprogram = PROG_IS_PSICODE; } else if(button == ButtonQChem ) { for(i=0;i0) gtk_entry_set_text (GTK_ENTRY (EntryCommand), fileopen.command); gtk_label_set_text(GTK_LABEL(LabelExtFile), ".inp"); gtk_widget_show(LabelDataFile); iprogram = PROG_IS_QCHEM; } else if(button == ButtonMopac ) { for(i=0;i0) gtk_entry_set_text (GTK_ENTRY (EntryCommand), fileopen.command); gtk_label_set_text(GTK_LABEL(LabelExtFile), ".mop"); gtk_widget_show(LabelDataFile); iprogram = PROG_IS_MOPAC; } else { #ifdef G_OS_WIN32 gtk_entry_set_text (GTK_ENTRY (EntryCommand), "type"); glist = g_list_append(glist,"type"); glist = g_list_append(glist,"ls -l"); #else gtk_entry_set_text (GTK_ENTRY (EntryCommand), "ls -l"); glist = g_list_append(glist,"ls -l"); #endif gtk_combo_box_entry_set_popdown_strings( ComboCommand, glist) ; if(fileopen.command && strlen(fileopen.command)>0) gtk_entry_set_text (GTK_ENTRY (EntryCommand), fileopen.command); gtk_widget_hide(LabelDataFile); g_list_free(glist); iprogram = PROG_IS_OTHER; } } changedEntryFileData(EntryFileData,NULL); } /********************************************************************************/ GtkWidget* create_text_result_command(GtkWidget* Text[],GtkWidget* Frame[],gchar* title) { GtkWidget *Win; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *button; /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),title); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(Fenetre)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); gtk_widget_realize(Win); init_child(Win,gtk_widget_destroy," Run "); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)destroy_children,NULL); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); vboxall = create_vbox(Win); vboxwin = vboxall; frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_add(GTK_CONTAINER(vboxall),frame); gtk_widget_show (frame); vboxall = create_vbox(frame); Text[0] = create_text_widget(vboxall,_("Output"),&Frame[0]); set_font (Text[0],FontsStyleResult.fontname); set_base_style(Text[0],FontsStyleResult.BaseColor.red ,FontsStyleResult.BaseColor.green ,FontsStyleResult.BaseColor.blue); set_text_style(Text[0],FontsStyleResult.TextColor.red ,FontsStyleResult.TextColor.green ,FontsStyleResult.TextColor.blue); Text[1] = create_text_widget(vboxall,_("Error"),&Frame[1]); set_font (Text[1],FontsStyleResult.fontname); set_base_style(Text[1],FontsStyleResult.BaseColor.red ,FontsStyleResult.BaseColor.green ,FontsStyleResult.BaseColor.blue); set_text_style(Text[1],FontsStyleResult.TextColor.red ,0,0); /* boutons box */ hbox = gtk_hbox_new (FALSE, 4); gtk_box_pack_start (GTK_BOX(vboxwin), hbox, FALSE, FALSE, 5); gtk_box_set_homogeneous(GTK_BOX(hbox), FALSE); gtk_widget_realize(Win); button = create_button(Win,_("OK")); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, FALSE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)destroy_children,G_OBJECT(Win)); gtk_widget_show (button); gtk_window_set_default_size (GTK_WINDOW(Win), 3*ScreenWidth/5, 3*ScreenHeight/5); gtk_widget_set_size_request(GTK_WIDGET(Text[0]),-1,1*ScreenHeight/5); return Win; } /********************************************************************************/ void put_text_in_texts_widget(GtkWidget* Text[],gchar* fout,gchar* ferr) { gchar *strout; gchar *strerr; strout = cat_file(fout,TRUE); strerr = cat_file(ferr,TRUE); if(strout) { gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,strout,-1); g_free(strout); } if(strerr) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,strerr,-1); g_free(strerr); } else { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,"Ok",-1); } } /********************************************************************************/ void get_file_frome_remote_host(GtkWidget* wid,gpointer data) { gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); GtkWidget* Text[2]; gchar* temp = NULL; gint type = *((gint*)data); Text[0] = TextOutput; Text[1] = TextError; gtk_notebook_set_current_page((GtkNotebook*)NoteBookInfo,1); ClearText(Text[0]); ClearText(Text[1]); /* Debug("Begin get_file_freom\n");*/ while( gtk_events_pending() ) gtk_main_iteration(); if(fileopen.remotepass) g_free(fileopen.remotepass); fileopen.remotepass = g_strdup(gtk_entry_get_text(GTK_ENTRY(ResultEntryPass))); switch(type) { case ALLFILES : case LOGFILE : /* get file.log */ /* Debug("Get File frome remote : %s %s %s %s \n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir,fileopen.logfile);*/ get_file(fout,ferr,fileopen.logfile,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); /* Debug("End get_file\n");*/ /* Debug("End Get File frome remote : %s %s %s %s \n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir,fileopen.logfile);*/ temp = g_strdup_printf(_("\nGet %s file from remote host :\n"),fileopen.logfile); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,temp,-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,temp,-1); g_free(temp); put_text_in_texts_widget(Text,fout,ferr); view_result(NULL,NULL); if(type==LOGFILE || iprogram == PROG_IS_GAUSS) break; if(type==LOGFILE || iprogram == PROG_IS_GAMESS) break; case OUTFILE : /* get file.out */ /* Debug("Get File frome remote : %s %s %s %s \n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir,fileopen.outputfile);*/ get_file(fout,ferr,fileopen.outputfile,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); /* Debug("End Get File frome remote : %s %s %s %s \n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir,fileopen.outputfile);*/ temp = g_strdup_printf(_("\nGet %s file from remote host :\n"),fileopen.outputfile); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,temp,-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,temp,-1); g_free(temp); put_text_in_texts_widget(Text,fout,ferr); view_result(NULL,NULL); if(type==OUTFILE) break; case MOLDENFILE : /* get file.molden */ /* Debug("Get File frome remote : %s %s %s %s \n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir,fileopen.moldenfile);*/ if(iprogram == PROG_IS_GAUSS) get_file(fout,ferr,fileopen.moldenfile,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); else if(iprogram == PROG_IS_MOLCAS) { #ifdef G_OS_WIN32 { gchar filename[BSIZE]; sprintf(filename,"%s.scf.molden",fileopen.projectname); get_file(fout,ferr,filename,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); temp = g_strdup_printf(_("\nGet %s file from remote host :\n"),filename); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,temp,-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,temp,-1); g_free(temp); put_text_in_texts_widget(Text,fout,ferr); sprintf(filename,"%s.geo.molden",fileopen.projectname); get_file(fout,ferr,filename,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); temp = g_strdup_printf(_("\nGet %s file from remote host :\n"),filename); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,temp,-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,temp,-1); g_free(temp); put_text_in_texts_widget(Text,fout,ferr); sprintf(filename,"%s.freq.molden",fileopen.projectname); get_file(fout,ferr,filename,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); temp = g_strdup_printf(_("\nGet %s file from remote host :\n"),filename); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,temp,-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,temp,-1); g_free(temp); put_text_in_texts_widget(Text,fout,ferr); sprintf(filename,"%s.grid",fileopen.projectname); get_file(fout,ferr,filename,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); temp = g_strdup_printf(_("\nGet %s file from remote host :\n"),filename); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,temp,-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,temp,-1); g_free(temp); put_text_in_texts_widget(Text,fout,ferr); } #else if(!strstr(fileopen.moldenfile,"*") || fileopen.netWorkProtocol != GABEDIT_NETWORK_FTP_RSH) { gchar filename[BSIZE]; get_file(fout,ferr,fileopen.moldenfile,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); temp = g_strdup_printf(_("\nGet %s file from remote host :\n"),fileopen.moldenfile); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,temp,-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,temp,-1); g_free(temp); put_text_in_texts_widget(Text,fout,ferr); sprintf(filename,"%s.grid",fileopen.projectname); get_file(fout,ferr,filename,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); temp = g_strdup_printf(_("\nGet %s file from remote host :\n"),filename); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,temp,-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,temp,-1); g_free(temp); put_text_in_texts_widget(Text,fout,ferr); } else { gchar filename[BSIZE]; sprintf(filename,"%s.scf.molden",fileopen.projectname); get_file(fout,ferr,filename,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); temp = g_strdup_printf(_("\nGet %s file from remote host :\n"),filename); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,temp,-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,temp,-1); g_free(temp); put_text_in_texts_widget(Text,fout,ferr); sprintf(filename,"%s.geo.molden",fileopen.projectname); get_file(fout,ferr,filename,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); temp = g_strdup_printf(_("\nGet %s file from remote host :\n"),filename); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,temp,-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,temp,-1); g_free(temp); put_text_in_texts_widget(Text,fout,ferr); sprintf(filename,"%s.freq.molden",fileopen.projectname); get_file(fout,ferr,filename,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); temp = g_strdup_printf(_("\nGet %s file from remote host :\n"),filename); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,temp,-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,temp,-1); g_free(temp); put_text_in_texts_widget(Text,fout,ferr); sprintf(filename,"%s.grid",fileopen.projectname); get_file(fout,ferr,filename,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); temp = g_strdup_printf(_("\nGet %s file from remote host :\n"),filename); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,temp,-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,temp,-1); g_free(temp); put_text_in_texts_widget(Text,fout,ferr); } #endif } else if(iprogram == PROG_IS_MOLPRO) { lowercase(fileopen.moldenfile); get_file(fout,ferr,fileopen.moldenfile,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); temp = g_strdup_printf(_("\nGet %s file from remote host :\n"),fileopen.moldenfile); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,temp,-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,temp,-1); g_free(temp); put_text_in_texts_widget(Text,fout,ferr); } /* Debug("End Get File frome remote : %s %s %s %s \n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir,fileopen.moldenfile);*/ } g_free(fout); g_free(ferr); } #ifdef G_OS_WIN32 gboolean createGamessCsh(gchar* filename) { FILE* file = fopen(filename,"wb"); if(file==NULL) { return FALSE; } fprintf(file,"#!./csh -f\n"); fprintf(file,"# 03 Feb 05 - A.R. ALLOUCHE\n"); fprintf(file,"#\n"); fprintf(file,"set TARGET=sockets\n"); fprintf(file,"#\n"); fprintf(file,"set JOB=$1\n"); fprintf(file,"set VERNO=$2\n"); fprintf(file,"set NCPUS=1\n"); fprintf(file,"set NNODES=1\n"); fprintf(file,"\n"); fprintf(file,"set SCR=\"$PWD\\\\scratch\"\n"); fprintf(file,"set SCK=\"$PWD\\\\temp\"\n"); fprintf(file,"set HOSTLIST=$3\n"); fprintf(file,"\n"); fprintf(file,"if ((-x \"$PWD/temp\") && (-x \"$PWD/scratch\")) then\n"); fprintf(file,"else\n"); fprintf(file,"echo \" Error: /temp and /scratch folders are missing \"\n"); fprintf(file,"echo \" please create them in WinGAMESS' root folder;\"\n"); fprintf(file,"echo \" gabeditRunGms.csh exiting .. \"\n"); fprintf(file,"exit\n"); fprintf(file,"endif\n"); fprintf(file,"\n"); fprintf(file,"if (null$VERNO == null) set VERNO=05\n"); fprintf(file,"if (null$NNODES == null) set NNODES=1\n"); fprintf(file,"\n"); fprintf(file,"if ($JOB:r.inp == $JOB) set JOB=$JOB:r\n"); fprintf(file,"\n"); fprintf(file,"# file assignments.\n"); fprintf(file,"unset echo\n"); fprintf(file,"setenv GMSPATH \"$PWD\"\n"); fprintf(file,"setenv GMSJOBNAME $JOB\n"); fprintf(file,"setenv master $HOSTLIST\n"); fprintf(file,"setenv ERICFMT \"$GMSPATH/ericfmt.dat\"\n"); fprintf(file,"setenv EXTBAS /dev/null\n"); fprintf(file,"setenv IRCDATA \"$SCK/$JOB.irc\"\n"); fprintf(file,"setenv INPUT \"$SCR/$JOB.F05\"\n"); fprintf(file,"setenv PUNCH \"$SCK/$JOB.dat\"\n"); fprintf(file,"setenv AOINTS \"$SCR/$JOB.F08\"\n"); fprintf(file,"setenv MOINTS \"$SCR/$JOB.F09\"\n"); fprintf(file,"setenv DICTNRY \"$SCR/$JOB.F10\"\n"); fprintf(file,"setenv DRTFILE \"$SCR/$JOB.F11\"\n"); fprintf(file,"setenv CIVECTR \"$SCR/$JOB.F12\"\n"); fprintf(file,"setenv CASINTS \"$SCR/$JOB.F13\"\n"); fprintf(file,"setenv CIINTS \"$SCR/$JOB.F14\"\n"); fprintf(file,"setenv WORK15 \"$SCR/$JOB.F15\"\n"); fprintf(file,"setenv WORK16 \"$SCR/$JOB.F16\"\n"); fprintf(file,"setenv CSFSAVE \"$SCR/$JOB.F17\"\n"); fprintf(file,"setenv FOCKDER \"$SCR/$JOB.F18\"\n"); fprintf(file,"setenv WORK19 \"$SCR/$JOB.F19\"\n"); fprintf(file,"setenv DASORT \"$SCR/$JOB.F20\"\n"); fprintf(file,"setenv DFTINTS \"$SCR/$JOB.F21\"\n"); fprintf(file,"setenv DFTGRID \"$SCR/$JOB.F22\"\n"); fprintf(file,"setenv JKFILE \"$SCR/$JOB.F23\"\n"); fprintf(file,"setenv ORDINT \"$SCR/$JOB.F24\"\n"); fprintf(file,"setenv EFPIND \"$SCR/$JOB.F25\"\n"); fprintf(file,"setenv PCMDATA \"$SCR/$JOB.F26\"\n"); fprintf(file,"setenv PCMINTS \"$SCR/$JOB.F27\"\n"); fprintf(file,"setenv SVPWRK1 \"$SCR/$JOB.F26\"\n"); fprintf(file,"setenv SVPWRK2 \"$SCR/$JOB.F27\"\n"); fprintf(file,"setenv MLTPL \"$SCR/$JOB.F28\"\n"); fprintf(file,"setenv MLTPLT \"$SCR/$JOB.F29\"\n"); fprintf(file,"setenv DAFL30 \"$SCR/$JOB.F30\"\n"); fprintf(file,"setenv SOINTX \"$SCR/$JOB.F31\"\n"); fprintf(file,"setenv SOINTY \"$SCR/$JOB.F32\"\n"); fprintf(file,"setenv SOINTZ \"$SCR/$JOB.F33\"\n"); fprintf(file,"setenv SORESC \"$SCR/$JOB.F34\"\n"); fprintf(file,"setenv SIMEN \"$SCK/$JOB.simen\"\n"); fprintf(file,"setenv SIMCOR \"$SCK/$JOB.simcor\"\n"); fprintf(file,"setenv GCILIST \"$SCR/$JOB.F37\"\n"); fprintf(file,"setenv HESSIAN \"$SCR/$JOB.F38\"\n"); fprintf(file,"setenv SOCCDAT \"$SCR/$JOB.F40\"\n"); fprintf(file,"setenv AABB41 \"$SCR/$JOB.F41\"\n"); fprintf(file,"setenv BBAA42 \"$SCR/$JOB.F42\"\n"); fprintf(file,"setenv BBBB43 \"$SCR/$JOB.F43\"\n"); fprintf(file,"setenv MCQD50 \"$SCR/$JOB.F50\"\n"); fprintf(file,"setenv MCQD51 \"$SCR/$JOB.F51\"\n"); fprintf(file,"setenv MCQD52 \"$SCR/$JOB.F52\"\n"); fprintf(file,"setenv MCQD53 \"$SCR/$JOB.F53\"\n"); fprintf(file,"setenv MCQD54 \"$SCR/$JOB.F54\"\n"); fprintf(file,"setenv MCQD55 \"$SCR/$JOB.F55\"\n"); fprintf(file,"setenv MCQD56 \"$SCR/$JOB.F56\"\n"); fprintf(file,"setenv MCQD57 \"$SCR/$JOB.F57\"\n"); fprintf(file,"setenv MCQD58 \"$SCR/$JOB.F58\"\n"); fprintf(file,"setenv MCQD59 \"$SCR/$JOB.F59\"\n"); fprintf(file,"setenv MCQD60 \"$SCR/$JOB.F60\"\n"); fprintf(file,"setenv MCQD61 \"$SCR/$JOB.F61\"\n"); fprintf(file,"setenv MCQD62 \"$SCR/$JOB.F62\"\n"); fprintf(file,"setenv MCQD63 \"$SCR/$JOB.F63\"\n"); fprintf(file,"setenv MCQD64 \"$SCR/$JOB.F64\"\n"); fprintf(file,"setenv NMRINT1 \"$SCR/$JOB.F61\"\n"); fprintf(file,"setenv NMRINT2 \"$SCR/$JOB.F62\"\n"); fprintf(file,"setenv NMRINT3 \"$SCR/$JOB.F63\"\n"); fprintf(file,"setenv NMRINT4 \"$SCR/$JOB.F64\"\n"); fprintf(file,"setenv NMRINT5 \"$SCR/$JOB.F65\"\n"); fprintf(file,"setenv NMRINT6 \"$SCR/$JOB.F66\"\n"); fprintf(file,"setenv DCPHFH2 \"$SCR/$JOB.F67\"\n"); fprintf(file,"setenv DCPHF21 \"$SCR/$JOB.F68\"\n"); fprintf(file,"setenv GVVPT \"$SCR/$JOB.F69\"\n"); fprintf(file,"setenv CCREST \"$SCR/$JOB.F70\"\n"); fprintf(file,"setenv CCDIIS \"$SCR/$JOB.F71\"\n"); fprintf(file,"setenv CCINTS \"$SCR/$JOB.F72\"\n"); fprintf(file,"setenv CCT1AMP \"$SCR/$JOB.F73\"\n"); fprintf(file,"setenv CCT2AMP \"$SCR/$JOB.F74\"\n"); fprintf(file,"setenv CCT3AMP \"$SCR/$JOB.F75\"\n"); fprintf(file,"setenv CCVM \"$SCR/$JOB.F76\"\n"); fprintf(file,"setenv CCVE \"$SCR/$JOB.F77\"\n"); fprintf(file,"setenv CCQUADS \"$SCR/$JOB.F78\"\n"); fprintf(file,"setenv QUADSVO \"$SCR/$JOB.F79\"\n"); fprintf(file,"setenv EOMSTAR \"$SCR/$JOB.F80\"\n"); fprintf(file,"setenv EOMVEC1 \"$SCR/$JOB.F81\"\n"); fprintf(file,"setenv EOMVEC2 \"$SCR/$JOB.F82\"\n"); fprintf(file,"setenv EOMHC1 \"$SCR/$JOB.F83\"\n"); fprintf(file,"setenv EOMHC2 \"$SCR/$JOB.F84\"\n"); fprintf(file,"setenv EOMHHHH \"$SCR/$JOB.F85\"\n"); fprintf(file,"setenv EOMPPPP \"$SCR/$JOB.F86\"\n"); fprintf(file,"setenv EOMRAMP \"$SCR/$JOB.F87\"\n"); fprintf(file,"setenv EOMRTMP \"$SCR/$JOB.F88\"\n"); fprintf(file,"setenv EOMDG12 \"$SCR/$JOB.F89\"\n"); fprintf(file,"setenv MMPP \"$SCR/$JOB.F90\"\n"); fprintf(file,"setenv MMHPP \"$SCR/$JOB.F91\"\n"); fprintf(file,"setenv MMCIVEC \"$SCR/$JOB.F92\"\n"); fprintf(file,"setenv MMCIVC1 \"$SCR/$JOB.F93\"\n"); fprintf(file,"setenv MMCIITR \"$SCR/$JOB.F94\"\n"); fprintf(file,"setenv EOMVL1 \"$SCR/$JOB.F95\"\n"); fprintf(file,"setenv EOMVL2 \"$SCR/$JOB.F96\"\n"); fprintf(file,"setenv EOMLVEC \"$SCR/$JOB.F97\"\n"); fprintf(file,"setenv EOMHL1 \"$SCR/$JOB.F98\"\n"); fprintf(file,"setenv EOMHL2 \"$SCR/$JOB.F99\"\n"); fprintf(file,"setenv OLI201 \"$SCR/$JOB.F201\"\n"); fprintf(file,"setenv OLI202 \"$SCR/$JOB.F202\"\n"); fprintf(file,"setenv OLI203 \"$SCR/$JOB.F203\"\n"); fprintf(file,"setenv OLI204 \"$SCR/$JOB.F204\"\n"); fprintf(file,"setenv OLI205 \"$SCR/$JOB.F205\"\n"); fprintf(file,"setenv OLI206 \"$SCR/$JOB.F206\"\n"); fprintf(file,"setenv OLI207 \"$SCR/$JOB.F207\"\n"); fprintf(file,"setenv OLI208 \"$SCR/$JOB.F208\"\n"); fprintf(file,"setenv OLI209 \"$SCR/$JOB.F209\"\n"); fprintf(file,"setenv OLI210 \"$SCR/$JOB.F210\"\n"); fprintf(file,"setenv OLI211 \"$SCR/$JOB.F211\"\n"); fprintf(file,"setenv OLI212 \"$SCR/$JOB.F212\"\n"); fprintf(file,"setenv OLI213 \"$SCR/$JOB.F213\"\n"); fprintf(file,"setenv OLI214 \"$SCR/$JOB.F214\"\n"); fprintf(file,"setenv OLI215 \"$SCR/$JOB.F215\"\n"); fprintf(file,"setenv OLI216 \"$SCR/$JOB.F216\"\n"); fprintf(file,"setenv OLI217 \"$SCR/$JOB.F217\"\n"); fprintf(file,"setenv OLI218 \"$SCR/$JOB.F218\"\n"); fprintf(file,"setenv OLI219 \"$SCR/$JOB.F219\"\n"); fprintf(file,"setenv OLI220 \"$SCR/$JOB.F220\"\n"); fprintf(file,"setenv OLI221 \"$SCR/$JOB.F221\"\n"); fprintf(file,"setenv OLI222 \"$SCR/$JOB.F222\"\n"); fprintf(file,"setenv OLI223 \"$SCR/$JOB.F223\"\n"); fprintf(file,"setenv OLI224 \"$SCR/$JOB.F224\"\n"); fprintf(file,"setenv OLI225 \"$SCR/$JOB.F225\"\n"); fprintf(file,"setenv OLI226 \"$SCR/$JOB.F226\"\n"); fprintf(file,"setenv OLI227 \"$SCR/$JOB.F227\"\n"); fprintf(file,"setenv OLI228 \"$SCR/$JOB.F228\"\n"); fprintf(file,"setenv OLI229 \"$SCR/$JOB.F229\"\n"); fprintf(file,"setenv OLI230 \"$SCR/$JOB.F230\"\n"); fprintf(file,"setenv OLI231 \"$SCR/$JOB.F231\"\n"); fprintf(file,"setenv OLI232 \"$SCR/$JOB.F232\"\n"); fprintf(file,"setenv OLI233 \"$SCR/$JOB.F233\"\n"); fprintf(file,"setenv OLI234 \"$SCR/$JOB.F234\"\n"); fprintf(file,"setenv OLI235 \"$SCR/$JOB.F235\"\n"); fprintf(file,"setenv OLI236 \"$SCR/$JOB.F236\"\n"); fprintf(file,"setenv OLI237 \"$SCR/$JOB.F237\"\n"); fprintf(file,"setenv OLI238 \"$SCR/$JOB.F238\"\n"); fprintf(file,"setenv OLI239 \"$SCR/$JOB.F239\"\n"); fprintf(file,"setenv VB2000PATH \"$GMSPATH/VB2000\"\n"); fprintf(file,"\n"); fprintf(file,"#\n"); fprintf(file,"if ((-x \"$GMSPATH/gamess.$VERNO.exe\") && (-x \"$GMSPATH/ddikick.exe\")) then\n"); fprintf(file,"else\n"); fprintf(file,"echo The GAMESS executable gamess.$VERNO.exe or else\n"); fprintf(file,"echo the DDIKICK executable ddikick.exe\n"); fprintf(file,"echo could not be found in directory $GMSPATH,\n"); fprintf(file,"echo or else they did not properly link to executable permission.\n"); fprintf(file,"exit 8\n"); fprintf(file,"endif\n"); fprintf(file,"#\n"); fprintf(file,"# OK, now we are ready to execute!\n"); fprintf(file,"# The kickoff program initiates GAMESS process(es) on all CPUs/nodes.\n"); fprintf(file,"#\n"); fprintf(file,"if ((-x \"$GMSPATH/gamess.$VERNO.exe\") && (-x \"$GMSPATH/ddikick.exe\")) then\n"); fprintf(file,"set echo\n"); fprintf(file,"\"$GMSPATH/ddikick.exe\" \"$GMSPATH/gamess.$VERNO.exe\" $JOB "); fprintf(file,"-ddi $NNODES $NCPUS $HOSTLIST "); fprintf(file,"-scr \"$SCR\" < /dev/null\n"); fprintf(file,"unset echo\n"); fprintf(file,"else\n"); fprintf(file,"echo The GAMESS executable gamess.$VERNO.exe or else\n"); fprintf(file,"echo the DDIKICK executable ddikick.exe\n"); fprintf(file,"echo could not be found in directory $GMSPATH,\n"); fprintf(file,"echo or else they did not properly link to executable permission.\n"); fprintf(file,"exit 8\n"); fprintf(file,"endif\n"); fprintf(file,"echo ----- accounting info -----\n"); fprintf(file,"exit\n"); fclose(file); return TRUE; } gboolean createGamessBat(gchar* filename, gchar* command, gint nproc) { FILE* file = fopen(filename,"wb"); if(file==NULL) { return FALSE; } fprintf(file,"rem @echo off\n"); fprintf(file,"set nameLog=%c~n1.log\n",'%'); fprintf(file,"set nameFile=%c~n1\n",'%'); fflush(file); fprintf(file,"set PATH=%s;%s\n",gamessDirectory,g_getenv("PATH")); fflush(file); fprintf(file,"set WDIR=%c~dp1\n",'%'); fprintf(file,"set GAMESSDIR=%s\n",gamessDirectory); fprintf(file,"set AUXDATADIR=%cGAMESSDIR%c\\auxdata\n",'%','%'); fprintf(file,"set RESTARTDIR=%cWDIR%c\\scr%cnameFile%c\n",'%','%','%','%'); fprintf(file,"set SCRATCHDIR=%cWDIR%c\\tmp%cnameFile%c\n",'%','%','%','%'); fprintf(file,"cd %cDIR%c\n",'%','%'); fprintf(file,"del parameters.gms\n"); fprintf(file,"echo GAMESSDIR=%cGAMESSDIR%c> parameters.gms\n",'%','%'); fprintf(file,"echo AUXDATADIR=%cAUXDATADIR%c>> parameters.gms\n",'%','%'); fprintf(file,"echo RESTARTDIR=%cRESTARTDIR%c>> parameters.gms\n",'%','%'); fprintf(file,"echo SCRARTCHDIR=%cSCRATCHDIR%c>> parameters.gms\n",'%','%'); fflush(file); fprintf(file,"mkdir %cRESTARTDIR%c\n",'%','%'); fprintf(file,"mkdir %cSCRATCHDIR%c\n",'%','%'); fflush(file); if(strstr(command,"11-64")) fprintf(file,"%s\\rungms.bat %c~n1.inp 11-64 %d 0 %cnameLog%c\n",gamessDirectory,'%',nproc,'%','%'); else fprintf(file,"%s\\rungms.bat %c~n1.inp 11-32 %d 0 %cnameLog%c\n",gamessDirectory,'%',nproc,'%','%'); fprintf(file,"del/S/F/P %cRESTARTDIR%c\n",'%','%'); fprintf(file,"rmdir %cRESTARTDIR%c\n",'%','%'); fprintf(file,"del/S/F/P %cSCRATCHDIR%c\n",'%','%'); fprintf(file,"rmdir %cSCRATCHDIR%c\n",'%','%'); fclose(file); return TRUE; } #endif /***********************************************************************************************************/ static gboolean create_cmd_firefly(G_CONST_RETURN gchar* command, gboolean local, gchar* cmddir, gchar* cmdfile, gchar* cmdall) { gchar* commandStr = g_strdup(command); FILE* fcmd = NULL; #ifndef G_OS_WIN32 gchar buffer[BSIZE]; #endif delete_last_spaces(commandStr); delete_first_spaces(commandStr); if(local) sprintf(cmddir,"%s", fileopen.localdir); else sprintf(cmddir,"%s%stmp", gabedit_directory(), G_DIR_SEPARATOR_S); #ifndef G_OS_WIN32 sprintf(cmdfile,"%s.cmd", fileopen.projectname); #else if(!local) sprintf(cmdfile,"%s.cmd", fileopen.projectname); else sprintf(cmdfile,"%s.bat", fileopen.projectname); #endif sprintf(cmdall,"%s%s%s",cmddir,G_DIR_SEPARATOR_S,cmdfile); fcmd = FOpen(cmdall, "w"); if(!fcmd) { if(local) Message(_("\nI can not create cmd file\n"),_("Error"),TRUE); return FALSE; } #ifndef G_OS_WIN32 fprintf(fcmd,"#!/bin/sh\n"); #endif if(local) { #ifdef G_OS_WIN32 addUnitDisk(fcmd, fileopen.localdir); #endif fprintf(fcmd,"cd %s\n", fileopen.localdir); } #ifdef G_OS_WIN32 if(local) { if( !strcmp(commandStr,"pcgamess") || !strcmp(commandStr,"nohup pcgamess") || !strcmp(commandStr,"firefly") || !strcmp(commandStr,"nohup firefly") ) { fprintf(fcmd,"set RND=%cRANDOM%c\n",'%','%'); fprintf(fcmd,"mkdir \"%s\\tmp\"\n",g_get_home_dir()); fprintf(fcmd,"mkdir \"%s\\tmp\\%cRND%c%s\"\n",g_get_home_dir(),'%','%',fileopen.projectname); addUnitDisk(fcmd, g_get_home_dir()); fprintf(fcmd,"cd \"%s\\tmp\\%cRND%c%s\"\n",g_get_home_dir(),'%','%',fileopen.projectname); fprintf(fcmd,"copy \"%s\\%s\" \"%s\\tmp\\%cRND%c%s\\input\"\n",fileopen.localdir,fileopen.datafile,g_get_home_dir(),'%','%',fileopen.projectname); fprintf(fcmd,"%s -o \"%s\\%s.log\"\n",commandStr,fileopen.localdir,fileopen.projectname); fprintf(fcmd,"move \"%s\\tmp\\%cRND%c%s\\PUNCH\" \"%s\\%s.pun\"\n",g_get_home_dir(),'%','%',fileopen.projectname, fileopen.localdir,fileopen.projectname); fprintf(fcmd,"move \"%s\\tmp\\%cRND%c%s\\IRCDATA\" \"%s\\%s.irc\"\n",g_get_home_dir(),'%','%',fileopen.projectname, fileopen.localdir,fileopen.projectname); addUnitDisk(fcmd, fileopen.localdir); fprintf(fcmd,"cd \"%s\"\n",fileopen.localdir); fprintf(fcmd,"del /Q \"%s\\tmp\\%cRND%c%s\\*\"\n",g_get_home_dir(),'%','%',fileopen.projectname); fprintf(fcmd,"rmdir \"%s\\tmp\\%cRND%c%s\"\n",g_get_home_dir(),'%','%',fileopen.projectname); fprintf(fcmd,"exit\n"); } else { fprintf(fcmd,"%s -i %s\\%s\n",command,fileopen.localdir,fileopen.datafile); fprintf(fcmd,"exit\n"); } } else { if( !strcmp(commandStr,"pcgamess") || !strcmp(commandStr,"nohup pcgamess") || !strcmp(commandStr,"firefly") || !strcmp(commandStr,"nohup firefly") ) { fprintf(fcmd,"#!/bin/sh\n"); if(fileopen.remotedir[0]!='/') fprintf(fcmd,"export DEFAULTDIR=$HOME/%s\n",fileopen.remotedir); else fprintf(fcmd,"export DEFAULTDIR=%s\n",fileopen.remotedir); fprintf(fcmd,"cd $DEFAULTDIR\n"); fprintf(fcmd,"export fileinput=%s\n",fileopen.datafile); fprintf(fcmd,"export filename=%s\n",fileopen.projectname); fprintf(fcmd,"testTMPDIR=\"x$FIREFLY_TMPDIR\"\n"); fprintf(fcmd,"if [ $testTMPDIR = \"x\" ]\n"); fprintf(fcmd,"then\n"); fprintf(fcmd,"export FIREFLY_TMPDIR=$HOME/tmp\n"); fprintf(fcmd,"fi\n"); fprintf(fcmd,"export FIREFLYDIR=$FIREFLY_TMPDIR/$RANDOM\n"); fprintf(fcmd,"if [ ! -s \"$FIREFLY_TMPDIR\" ]\n"); fprintf(fcmd,"then\n"); fprintf(fcmd,"mkdir $FIREFLY_TMPDIR\n"); fprintf(fcmd,"fi\n"); fprintf(fcmd,"mkdir $FIREFLYDIR\n"); fprintf(fcmd,"cd $FIREFLYDIR\n"); fprintf(fcmd,"cp $DEFAULTDIR/$fileinput input\n"); fprintf(fcmd,"%s -o $DEFAULTDIR/$filename.log\n",commandStr); fprintf(fcmd,"mv -f $FIREFLYDIR/PUNCH $DEFAULTDIR/$filename.pun\n"); fprintf(fcmd,"if [ -s \"$FIREFLYDIR/IRCDATA\" ]\n"); fprintf(fcmd,"then\n"); fprintf(fcmd,"mv -f $FIREFLYDIR/IRCDATA $DEFAULTDIR/$filename.irc\n"); fprintf(fcmd,"fi\n"); fprintf(fcmd,"cd $DEFAULTDIR\n"); fprintf(fcmd,"/bin/rm -r $FIREFLYDIR\n"); } else { fprintf(fcmd,"%s %s &\n",command,fileopen.datafile); fprintf(fcmd,"exit\n"); } } #else if( !strcmp(commandStr,"pcgamess") || !strcmp(commandStr,"nohup pcgamess") || !strcmp(commandStr,"firefly") || !strcmp(commandStr,"nohup firefly") ) { if(local) fprintf(fcmd,"export DEFAULTDIR=%s\n",fileopen.localdir); else { if(fileopen.remotedir[0]!='/') fprintf(fcmd,"export DEFAULTDIR=$HOME/%s\n",fileopen.remotedir); else fprintf(fcmd,"export DEFAULTDIR=%s\n",fileopen.remotedir); } fprintf(fcmd,"cd $DEFAULTDIR\n"); fprintf(fcmd,"export fileinput=%s\n",fileopen.datafile); fprintf(fcmd,"export filename=%s\n",fileopen.projectname); fprintf(fcmd,"testTMPDIR=\"x$FIREFLY_TMPDIR\"\n"); fprintf(fcmd,"if [ $testTMPDIR = \"x\" ]\n"); fprintf(fcmd,"then\n"); fprintf(fcmd,"export FIREFLY_TMPDIR=$HOME/tmp\n"); fprintf(fcmd,"fi\n"); fprintf(fcmd,"export FIREFLYDIR=$FIREFLY_TMPDIR/$RANDOM\n"); fprintf(fcmd,"if [ ! -s \"$FIREFLY_TMPDIR\" ]\n"); fprintf(fcmd,"then\n"); fprintf(fcmd,"mkdir $FIREFLY_TMPDIR\n"); fprintf(fcmd,"fi\n"); fprintf(fcmd,"mkdir $FIREFLYDIR\n"); fprintf(fcmd,"cd $FIREFLYDIR\n"); fprintf(fcmd,"cp $DEFAULTDIR/$fileinput input\n"); fprintf(fcmd,"%s -o $DEFAULTDIR/$filename.log\n",commandStr); fprintf(fcmd,"mv -f $FIREFLYDIR/PUNCH $DEFAULTDIR/$filename.pun\n"); fprintf(fcmd,"if [ -s \"$FIREFLYDIR/IRCDATA\" ]\n"); fprintf(fcmd,"then\n"); fprintf(fcmd,"mv -f $FIREFLYDIR/IRCDATA $DEFAULTDIR/$filename.irc\n"); fprintf(fcmd,"fi\n"); fprintf(fcmd,"cd $DEFAULTDIR\n"); fprintf(fcmd,"/bin/rm -r $FIREFLYDIR\n"); } else { if(!local) { fprintf(fcmd,"%s %s &\n",command,fileopen.datafile); fprintf(fcmd,"exit\n"); } else { fprintf(fcmd,"%s %s\n",command,fileopen.datafile); fprintf(fcmd,_("echo Job %s.inp finished.\n"),fileopen.projectname); } } #endif fclose(fcmd); #ifndef G_OS_WIN32 sprintf(buffer,"chmod u+x %s",cmdall); { int i = system(buffer);} #endif if(commandStr) g_free(commandStr); return TRUE; } /***********************************************************************************************************/ static gboolean create_runDeMon_bash() { FILE* file = FOpen("runDeMon", "w"); if(!file) return FALSE; fprintf(file,"#!/bin/bash\n"); fprintf(file,"filename=$1 ; [ 0 = $# ] || shift\n"); fprintf(file,"\n"); fprintf(file,"if [ -z \"$filename\" ]\n"); fprintf(file,"then\n"); fprintf(file," clear\n"); fprintf(file," echo \" \"\n"); fprintf(file," echo \"Usage Example:\"\n"); fprintf(file," echo \" runDeMon h2o.inp \"\n"); fprintf(file," echo \" input file : h2o.inp\"\n"); fprintf(file," echo \"===========================================\"\n"); fprintf(file," echo \" \"\n"); fprintf(file," exit 1\n"); fprintf(file,"fi\n"); fprintf(file,"fileinp=$filename\n"); fprintf(file,"filename=${fileinp%c.inp}\n",'%'); fprintf(file,"filename=${filename%c.com}\n",'%'); fprintf(file,"\n"); fprintf(file,"[ -z \"$CREX_ROOT\" ] && echo \"Error you must define CREX_ROOT global variable\" && echo \"deMon must be installed in \\$CREX_ROOT/DeMon\" && echo \"The name of executable must be binary\" && exit 1\n"); fprintf(file,"\n"); fprintf(file,"[ -z \"$TMPDIR\" ] && export TMPDIR=/tmp\n"); fprintf(file,"\n"); fprintf(file,"DEFAULTDIR=`pwd`\n"); fprintf(file,"fn=`echo \"$filename\" | sed \"s/.*\\///\" | sed \"s/\\..*//\"`\n"); fprintf(file,"cpid=$$\n"); fprintf(file,"export DEMONTMP=$TMPDIR/$fn_$cpid\n"); fprintf(file,"mkdir $DEMONTMP\n"); fprintf(file,"\n"); fprintf(file,"# echo $DEMONTMP\n"); fprintf(file,"\n"); fprintf(file,"# echo Begin $filename\n"); fprintf(file,"# echo DEMONTMP=$DEMONTMP\n"); fprintf(file,"cp $fileinp $DEMONTMP/deMon.inp\n"); fprintf(file,"cp $CREX_ROOT/deMon/AUXIS $DEMONTMP/.\n"); fprintf(file,"cp $CREX_ROOT/deMon/BASIS $DEMONTMP/.\n"); fprintf(file,"cp $CREX_ROOT/deMon/ECPS $DEMONTMP/. \n"); fprintf(file,"cp $CREX_ROOT/deMon/MECPS $DEMONTMP/. 2>/dev/null\n"); fprintf(file,"\n"); fprintf(file,"cd $DEMONTMP\n"); fprintf(file,"touch deMon.out\n"); fprintf(file,"touch deMon.mol\n"); fprintf(file,"rm $DEFAULTDIR/${fn}.out $DEFAULTDIR/${fn}.molden 2>/dev/null\n"); fprintf(file,"ln -s $DEMONTMP/deMon.out $DEFAULTDIR/${fn}.out\n"); fprintf(file,"ln -s $DEMONTMP/deMon.mol $DEFAULTDIR/${fn}.molden\n"); fprintf(file,"$CREX_ROOT/deMon/binary \n"); fprintf(file,"rm $DEFAULTDIR/${fn}.out $DEFAULTDIR/${fn}.molden 2>/dev/null\n"); fprintf(file,"cp $DEMONTMP/deMon.out $DEFAULTDIR/${fn}.out\n"); fprintf(file,"cp $DEMONTMP/deMon.mol $DEFAULTDIR/${fn}.molden\n"); fprintf(file,"cd $DEFAULTDIR\n"); fprintf(file,"#echo End $filename\n"); fprintf(file,"\n"); fprintf(file,"/bin/rm -r $DEMONTMP\n"); fclose(file); return TRUE; } /***********************************************************************************************************/ static gboolean create_cmd_demon(G_CONST_RETURN gchar* command, gboolean local, gchar* cmddir, gchar* cmdfile, gchar* cmdall) { FILE* fcmd = NULL; gchar* commandStr = g_strdup(command); #ifndef G_OS_WIN32 gchar buffer[BSIZE]; #endif delete_last_spaces(commandStr); delete_first_spaces(commandStr); if(local) sprintf(cmddir,"%s", fileopen.localdir); else sprintf(cmddir,"%s%stmp", gabedit_directory(), G_DIR_SEPARATOR_S); #ifndef G_OS_WIN32 sprintf(cmdfile,"%s.cmd", fileopen.projectname); #else if(!local) sprintf(cmdfile,"%s.cmd", fileopen.projectname); else sprintf(cmdfile,"%s.bat", fileopen.projectname); #endif sprintf(cmdall,"%s%s%s",cmddir,G_DIR_SEPARATOR_S,cmdfile); fcmd = FOpen(cmdall, "w"); if(!fcmd) { if(local) Message(_("\nI can not create cmd file\n"),_("Error"),TRUE); return FALSE; } #ifndef G_OS_WIN32 fprintf(fcmd,"#!/bin/sh\n"); #else if(local) { if(strstr(demonDirectory,"\"")) fprintf(fcmd,"set PATH=%s;%cPATH%c\n",demonDirectory,'%','%'); else fprintf(fcmd,"set PATH=\"%s\";%cPATH%c\n",demonDirectory,'%','%'); } #endif if(local) { #ifdef G_OS_WIN32 addUnitDisk(fcmd, fileopen.localdir); #endif fprintf(fcmd,"cd %s\n", fileopen.localdir); } else fprintf(fcmd,"cd %s\n", fileopen.remotedir); if(!strcmp(commandStr,"default")) { create_runDeMon_bash(); fprintf(fcmd,"chmod u+x ./runDeMon ; nohup ./runDeMon %s &\n",fileopen.datafile); fprintf(fcmd,"exit\n"); } else { fprintf(fcmd,"%s %s &\n",command,fileopen.datafile); fprintf(fcmd,"exit\n"); } fclose(fcmd); #ifndef G_OS_WIN32 sprintf(buffer,"chmod u+x %s",cmdall); { int i = system(buffer);} #endif if(commandStr) g_free(commandStr); return TRUE; } /***********************************************************************************************************/ static gboolean create_cmd_orca(G_CONST_RETURN gchar* command, gboolean local, gchar* cmddir, gchar* cmdfile, gchar* cmdall) { FILE* fcmd = NULL; gchar* commandStr = g_strdup(command); #ifndef G_OS_WIN32 gchar buffer[BSIZE]; #endif delete_last_spaces(commandStr); delete_first_spaces(commandStr); if(local) sprintf(cmddir,"%s", fileopen.localdir); else sprintf(cmddir,"%s%stmp", gabedit_directory(), G_DIR_SEPARATOR_S); #ifndef G_OS_WIN32 sprintf(cmdfile,"%s.cmd", fileopen.projectname); #else if(!local) sprintf(cmdfile,"%s.cmd", fileopen.projectname); else sprintf(cmdfile,"%s.bat", fileopen.projectname); #endif sprintf(cmdall,"%s%s%s",cmddir,G_DIR_SEPARATOR_S,cmdfile); fcmd = FOpen(cmdall, "w"); if(!fcmd) { if(local) Message(_("\nI can not create cmd file\n"),_("Error"),TRUE); return FALSE; } #ifndef G_OS_WIN32 fprintf(fcmd,"#!/bin/sh\n"); #else if(local) { if(strstr(orcaDirectory,"\"")) fprintf(fcmd,"set PATH=%s;%cPATH%c\n",orcaDirectory,'%','%'); else fprintf(fcmd,"set PATH=\"%s\";%cPATH%c\n",orcaDirectory,'%','%'); } #endif if(local) { #ifdef G_OS_WIN32 addUnitDisk(fcmd, fileopen.localdir); #endif fprintf(fcmd,"cd %s\n", fileopen.localdir); } else fprintf(fcmd,"cd %s\n", fileopen.remotedir); if(!strcmp(commandStr,"orca") || !strcmp(commandStr,"nohup orca")) { fprintf(fcmd,"%s %s > %s.out &\n",command,fileopen.datafile,fileopen.projectname); fprintf(fcmd,"exit\n"); } else { fprintf(fcmd,"%s %s &\n",command,fileopen.datafile); fprintf(fcmd,"exit\n"); } fclose(fcmd); #ifndef G_OS_WIN32 sprintf(buffer,"chmod u+x %s",cmdall); { int i = system(buffer);} #endif if(commandStr) g_free(commandStr); return TRUE; } /***********************************************************************************************************/ static gboolean create_cmd_nwchem(G_CONST_RETURN gchar* command, gboolean local, gchar* cmddir, gchar* cmdfile, gchar* cmdall) { FILE* fcmd = NULL; gchar* commandStr = g_strdup(command); #ifndef G_OS_WIN32 gchar buffer[BSIZE]; #endif delete_last_spaces(commandStr); delete_first_spaces(commandStr); if(local) sprintf(cmddir,"%s", fileopen.localdir); else sprintf(cmddir,"%s%stmp", gabedit_directory(), G_DIR_SEPARATOR_S); #ifndef G_OS_WIN32 sprintf(cmdfile,"%s.cmd", fileopen.projectname); #else if(!local) sprintf(cmdfile,"%s.cmd", fileopen.projectname); else sprintf(cmdfile,"%s.bat", fileopen.projectname); #endif sprintf(cmdall,"%s%s%s",cmddir,G_DIR_SEPARATOR_S,cmdfile); fcmd = FOpen(cmdall, "w"); if(!fcmd) { if(local) Message(_("\nI can not create cmd file\n"),_("Error"),TRUE); return FALSE; } #ifndef G_OS_WIN32 fprintf(fcmd,"#!/bin/sh\n"); #else if(local) { if(strstr(nwchemDirectory,"\"")) fprintf(fcmd,"set PATH=%s;%cPATH%c\n",nwchemDirectory,'%','%'); else fprintf(fcmd,"set PATH=\"%s\";%cPATH%c\n",nwchemDirectory,'%','%'); } #endif if(local) { #ifdef G_OS_WIN32 addUnitDisk(fcmd, fileopen.localdir); #endif fprintf(fcmd,"cd %s\n", fileopen.localdir); } else fprintf(fcmd,"cd %s\n", fileopen.remotedir); if(!strcmp(commandStr,"nwchem") || !strcmp(commandStr,"nohup nwchem")) { #ifdef G_OS_WIN32 fprintf(fcmd,"del %s.db\n",fileopen.projectname); #else fprintf(fcmd,"rm -f %s.db\n",fileopen.projectname); #endif fprintf(fcmd,"%s %s > %s.out &\n",command,fileopen.datafile,fileopen.projectname); fprintf(fcmd,"exit\n"); } else { fprintf(fcmd,"%s %s &\n",command,fileopen.datafile); fprintf(fcmd,"exit\n"); } fclose(fcmd); #ifndef G_OS_WIN32 sprintf(buffer,"chmod u+x %s",cmdall); { int i = system(buffer);} #endif if(commandStr) g_free(commandStr); return TRUE; } /***********************************************************************************************************/ static gboolean create_cmd_psicode(G_CONST_RETURN gchar* command, gboolean local, gchar* cmddir, gchar* cmdfile, gchar* cmdall) { FILE* fcmd = NULL; gchar* commandStr = g_strdup(command); #ifndef G_OS_WIN32 gchar buffer[BSIZE]; #endif delete_last_spaces(commandStr); delete_first_spaces(commandStr); if(local) sprintf(cmddir,"%s", fileopen.localdir); else sprintf(cmddir,"%s%stmp", gabedit_directory(), G_DIR_SEPARATOR_S); #ifndef G_OS_WIN32 sprintf(cmdfile,"%s.cmd", fileopen.projectname); #else if(!local) sprintf(cmdfile,"%s.cmd", fileopen.projectname); else sprintf(cmdfile,"%s.bat", fileopen.projectname); #endif sprintf(cmdall,"%s%s%s",cmddir,G_DIR_SEPARATOR_S,cmdfile); fcmd = FOpen(cmdall, "w"); if(!fcmd) { if(local) Message(_("\nI can not create cmd file\n"),_("Error"),TRUE); return FALSE; } #ifndef G_OS_WIN32 fprintf(fcmd,"#!/bin/sh\n"); #else if(local) { if(strstr(psicodeDirectory,"\"")) fprintf(fcmd,"set PATH=%s;%cPATH%c\n",psicodeDirectory,'%','%'); else fprintf(fcmd,"set PATH=\"%s\";%cPATH%c\n",psicodeDirectory,'%','%'); } #endif if(local) { #ifdef G_OS_WIN32 addUnitDisk(fcmd, fileopen.localdir); #endif fprintf(fcmd,"cd %s\n", fileopen.localdir); } else fprintf(fcmd,"cd %s\n", fileopen.remotedir); if(!strcmp(commandStr,"psi4") || !strcmp(commandStr,"nohup psi4")) { #ifdef G_OS_WIN32 fprintf(fcmd,"del %s.db\n",fileopen.projectname); #else fprintf(fcmd,"rm -f %s.db\n",fileopen.projectname); #endif fprintf(fcmd,"%s -i %s -o %s.out &\n",command,fileopen.datafile,fileopen.projectname); fprintf(fcmd,"exit\n"); } else { fprintf(fcmd,"%s %s &\n",command,fileopen.datafile); fprintf(fcmd,"exit\n"); } fclose(fcmd); #ifndef G_OS_WIN32 sprintf(buffer,"chmod u+x %s",cmdall); { int i = system(buffer);} #endif if(commandStr) g_free(commandStr); return TRUE; } /***********************************************************************************************************/ static gboolean create_cmd_qchem(G_CONST_RETURN gchar* command, gboolean local, gchar* cmddir, gchar* cmdfile, gchar* cmdall) { FILE* fcmd = NULL; gchar* commandStr = g_strdup(command); #ifndef G_OS_WIN32 gchar buffer[BSIZE]; #endif delete_last_spaces(commandStr); delete_first_spaces(commandStr); if(local) sprintf(cmddir,"%s", fileopen.localdir); else sprintf(cmddir,"%s%stmp", gabedit_directory(), G_DIR_SEPARATOR_S); #ifndef G_OS_WIN32 sprintf(cmdfile,"%s.cmd", fileopen.projectname); #else if(!local) sprintf(cmdfile,"%s.cmd", fileopen.projectname); else sprintf(cmdfile,"%s.bat", fileopen.projectname); #endif sprintf(cmdall,"%s%s%s",cmddir,G_DIR_SEPARATOR_S,cmdfile); fcmd = FOpen(cmdall, "w"); if(!fcmd) { if(local) Message(_("\nI can not create cmd file\n"),_("Error"),TRUE); return FALSE; } #ifndef G_OS_WIN32 fprintf(fcmd,"#!/bin/sh\n"); #endif if(local) { #ifdef G_OS_WIN32 addUnitDisk(fcmd, fileopen.localdir); #endif fprintf(fcmd,"cd %s\n", fileopen.localdir); } else fprintf(fcmd,"cd %s\n", fileopen.remotedir); #ifdef G_OS_WIN32 fprintf(fcmd,"%s %s &\n",command,fileopen.datafile); fprintf(fcmd,"exit\n"); #else if(!strcmp(commandStr,"qchem") || !strcmp(commandStr,"nohup qchem")) { if(local) fprintf(fcmd,"export DEFAULTDIR=%s\n",fileopen.localdir); else fprintf(fcmd,"export DEFAULTDIR=%s\n",fileopen.remotedir); fprintf(fcmd,"cd $DEFAULTDIR\n"); fprintf(fcmd,"export fileinput=%s\n",fileopen.datafile); fprintf(fcmd,"export filename=%s\n",fileopen.projectname); fprintf(fcmd,"testTMPDIR=\"x$QCSCRATCH\"\n"); fprintf(fcmd,"if [ $testTMPDIR = \"x\" ]\n"); fprintf(fcmd,"then\n"); fprintf(fcmd,"export QCSCRATCH=$HOME/tmp\n"); fprintf(fcmd,"fi\n"); fprintf(fcmd,"export QCHEMTMPDIR=$QCSCRATCH/$RANDOM\n"); fprintf(fcmd,"if [ ! -s \"$QCSCRATCH\" ]\n"); fprintf(fcmd,"then\n"); fprintf(fcmd,"mkdir $QCSCRATCH\n"); fprintf(fcmd,"fi\n"); fprintf(fcmd,"mkdir $QCHEMTMPDIR\n"); fprintf(fcmd,"qchem $DEFAULTDIR/$fileinput $DEFAULTDIR/$filename.out\n"); fprintf(fcmd,"cd $DEFAULTDIR\n"); fprintf(fcmd,"/bin/rm -r $QCHEMTMPDIR\n"); } else { if(!local) { fprintf(fcmd,"%s %s &\n",command,fileopen.datafile); fprintf(fcmd,"exit\n"); } else { fprintf(fcmd,"%s %s\n",command,fileopen.datafile); fprintf(fcmd,_("echo Job %s.inp finished.\n"),fileopen.projectname); } } #endif fclose(fcmd); #ifndef G_OS_WIN32 sprintf(buffer,"chmod u+x %s",cmdall); { int i = system(buffer);} #endif if(commandStr) g_free(commandStr); return TRUE; } /***********************************************************************************************************/ static gboolean create_cmd_mopac(G_CONST_RETURN gchar* command, gboolean local, gchar* cmddir, gchar* cmdfile, gchar* cmdall) { FILE* fcmd = NULL; gchar* commandStr = g_strdup(command); #ifndef G_OS_WIN32 gchar buffer[BSIZE]; #endif delete_last_spaces(commandStr); delete_first_spaces(commandStr); if(local) sprintf(cmddir,"%s", fileopen.localdir); else sprintf(cmddir,"%s%stmp", gabedit_directory(), G_DIR_SEPARATOR_S); #ifndef G_OS_WIN32 sprintf(cmdfile,"%s.cmd", fileopen.projectname); #else if(!local) sprintf(cmdfile,"%s.cmd", fileopen.projectname); else sprintf(cmdfile,"%s.bat", fileopen.projectname); #endif sprintf(cmdall,"%s%s%s",cmddir,G_DIR_SEPARATOR_S,cmdfile); fcmd = FOpen(cmdall, "w"); if(!fcmd) { if(local) Message(_("\nI can not create cmd file\n"),_("Error"),TRUE); return FALSE; } #ifndef G_OS_WIN32 fprintf(fcmd,"#!/bin/sh\n"); #endif if(local) { #ifdef G_OS_WIN32 addUnitDisk(fcmd, fileopen.localdir); #endif fprintf(fcmd,"cd %s\n", fileopen.localdir); } else fprintf(fcmd,"cd %s\n", fileopen.remotedir); #ifdef G_OS_WIN32 if(strstr(mopacDirectory,"\"")) fprintf(fcmd,"set PATH=%s;%cPATH%c\n",mopacDirectory,'%','%'); else fprintf(fcmd,"set PATH=\"%s\";%cPATH%c\n",mopacDirectory,'%','%'); fprintf(fcmd,"%s %s &\n",command,fileopen.datafile); fprintf(fcmd,"exit\n"); #else if(!local) { fprintf(fcmd,"%s %s &\n",command,fileopen.datafile); fprintf(fcmd,"exit\n"); } else { fprintf(fcmd,"%s %s&\n",command,fileopen.datafile); fprintf(fcmd,"exit\n"); } #endif fclose(fcmd); #ifndef G_OS_WIN32 sprintf(buffer,"chmod u+x %s",cmdall); { int i = system(buffer);} #endif if(commandStr) g_free(commandStr); return TRUE; } /***********************************************************************************************************/ static gboolean create_cmd_gamess(G_CONST_RETURN gchar* command, gboolean local, gchar* cmddir, gchar* cmdfile, gchar* cmdall) { FILE* fcmd = NULL; #ifndef G_OS_WIN32 gchar buffer[BSIZE]; #endif if(local) sprintf(cmddir,"%s", fileopen.localdir); else sprintf(cmddir,"%s%stmp", gabedit_directory(), G_DIR_SEPARATOR_S); #ifndef G_OS_WIN32 sprintf(cmdfile,"%s.cmd", fileopen.projectname); #else if(!local) sprintf(cmdfile,"%s.cmd", fileopen.projectname); else sprintf(cmdfile,"%s.bat", fileopen.projectname); #endif sprintf(cmdall,"%s%s%s",cmddir,G_DIR_SEPARATOR_S,cmdfile); fcmd = FOpen(cmdall, "w"); if(!fcmd) { if(local) Message(_("\nI can not create cmd file\n"),_("Error"),TRUE); return FALSE; } #ifndef G_OS_WIN32 if(strcmp(command,"submitGMS")==0) { fprintf(fcmd,"#!/bin/sh\n"); if(local) { if(fileopen.localdir[0]!='/') fprintf(fcmd,"export DEFAULTDIR=$HOME/%s\n",fileopen.localdir); else fprintf(fcmd,"export DEFAULTDIR=%s\n",fileopen.localdir); } else { if(fileopen.remotedir[0]!='/') fprintf(fcmd,"export DEFAULTDIR=$HOME/%s\n",fileopen.remotedir); else fprintf(fcmd,"export DEFAULTDIR=%s\n",fileopen.remotedir); } } #endif if(local) { #ifdef G_OS_WIN32 addUnitDisk(fcmd, fileopen.localdir); #endif fprintf(fcmd,"cd %s\n", fileopen.localdir); } else fprintf(fcmd,"cd %s\n", fileopen.remotedir); #ifndef G_OS_WIN32 if(strcmp(command,"submitGMS")==0) { fprintf(fcmd,"export fileinput=%s\n",fileopen.datafile); fprintf(fcmd,"export filename=%s\n",fileopen.projectname); fprintf(fcmd,"export RUNGAMESSDIR=`which rungms`\n"); fprintf(fcmd,"if [ x$RUNGAMESSDIR = \"x\" ]\n"); fprintf(fcmd,"then\n"); fprintf(fcmd," echo 'Sorry, the Gamess directory is not in you path'>$DEFAULTDIR/$filename.log\n"); fprintf(fcmd," echo 'You should add the gamess directory to you path (.login or .cshrc or .basshrc)'>>$DEFAULTDIR/$filename.log\n"); fprintf(fcmd,"exit\n"); fprintf(fcmd,"fi\n"); fprintf(fcmd,"export GAMESSDIR=`dirname $RUNGAMESSDIR`\n"); fprintf(fcmd,"testTMPDIR=\"x$TGAMESSUS_TMPDIR\"\n"); fprintf(fcmd,"if [ $testTMPDIR = \"x\" ]\n"); fprintf(fcmd,"then\n"); fprintf(fcmd,"export TGAMESSUS_TMPDIR=$HOME/tmp\n"); fprintf(fcmd,"fi\n"); fprintf(fcmd,"export TGAMESSUSDIR=$TGAMESSUS_TMPDIR/$RANDOM\n"); fprintf(fcmd,"if [ ! -s \"$TGAMESSUS_TMPDIR\" ]\n"); fprintf(fcmd,"then\n"); fprintf(fcmd,"mkdir $TGAMESSUS_TMPDIR\n"); fprintf(fcmd,"fi\n"); fprintf(fcmd,"mkdir $TGAMESSUSDIR\n"); fprintf(fcmd,"cd $TGAMESSUSDIR\n"); fprintf(fcmd,"cp $DEFAULTDIR/$fileinput .\n"); fprintf(fcmd,"cp -r $GAMESSDIR/* .\n"); fprintf(fcmd,"mv gamess.*.x gamess.00.x\n"); fprintf(fcmd,"VERNO=00\n"); fprintf(fcmd,"NNODES=1\n"); fprintf(fcmd,"sh -c './rungms $filename $VERNO $NNODES > $DEFAULTDIR/$filename.log' 2>err.log\n"); fprintf(fcmd,"cd $DEFAULTDIR\n"); fprintf(fcmd,"cp $TGAMESSUSDIR/$filename.dat $DEFAULTDIR/.\n"); fprintf(fcmd,"chmod -R u+w $TGAMESSUSDIR\n"); fprintf(fcmd,"/bin/rm -r $TGAMESSUSDIR\n"); } else fprintf(fcmd,"%s %s &\n",command,fileopen.projectname); fprintf(fcmd,"exit\n"); #else if(!local) { fprintf(fcmd,"%s %s &\n",command,fileopen.datafile); fprintf(fcmd,"exit\n"); } else { gchar localhost[100]; gchar versionNumber[10]="05"; gchar* begin= strstr(command,"."); if(begin) { gchar* end; gchar* k; gint i = 0; end= strstr(begin+1,"."); if(end) for(k=begin+1;k \"%s\\%s\" \n", fileopen.projectname, versionNumber, localhost,fileopen.localdir,fileopen.logfile); fprintf(fcmd,"copy \"%s\\temp\\%s.dat\" \"%s\\%s.dat\"\n", gamessDirectory,fileopen.projectname, fileopen.localdir,fileopen.projectname); fprintf(fcmd,"copy \"%s\\temp\\%s.dat\" \"%s\\%s.pun\"\n", gamessDirectory,fileopen.projectname, fileopen.localdir,fileopen.projectname); fprintf(fcmd,_("echo Job %s.inp finished.\n"),fileopen.projectname); } else { gchar com[BSIZE]; gint nproc = 0; gchar buffer[BSIZE]; sprintf(buffer,"%s\\gabeditRunGms.csh",gamessDirectory); sprintf(buffer,"%s%sgabeditRun.bat",cmddir,G_DIR_SEPARATOR_S); sscanf(command,"%s %d",com,&nproc); if(nproc<1) nproc = 1; if(!createGamessBat(buffer,com,nproc)) return FALSE; fprintf(fcmd,"%s %s\n",buffer,fileopen.datafile); } } #endif fclose(fcmd); #ifndef G_OS_WIN32 sprintf(buffer,"chmod u+x %s",cmdall); { int i = system(buffer);} #endif return TRUE; } /***********************************************************************************************************/ static gboolean create_cmd_gaussian(G_CONST_RETURN gchar* command, gboolean local, gchar* cmddir, gchar* cmdfile, gchar* cmdall) { FILE* fcmd = NULL; #ifndef G_OS_WIN32 gchar buffer[BSIZE]; #endif if(local) sprintf(cmddir,"%s", fileopen.localdir); else sprintf(cmddir,"%s%stmp", gabedit_directory(), G_DIR_SEPARATOR_S); #ifndef G_OS_WIN32 sprintf(cmdfile,"%s.cmd", fileopen.projectname); #else if(!local) sprintf(cmdfile,"%s.cmd", fileopen.projectname); else sprintf(cmdfile,"%s.bat", fileopen.projectname); #endif sprintf(cmdall,"%s%s%s",cmddir,G_DIR_SEPARATOR_S,cmdfile); fcmd = FOpen(cmdall, "w"); if(!fcmd) { if(local) Message(_("\nI can not create cmd file\n"),_("Error"),TRUE); return FALSE; } if(local) { #ifdef G_OS_WIN32 fprintf(fcmd,"@echo off\n"); if(fileopen.localdir && strlen(fileopen.localdir)>2 && fileopen.localdir[1]==':' ) fprintf(fcmd,"%c%c\n", fileopen.localdir[0],fileopen.localdir[1]); else if(fileopen.localdir && strlen(fileopen.localdir)>3 && fileopen.localdir[0]=='"' && fileopen.localdir[2]==':' ) fprintf(fcmd,"%c%c\n", fileopen.localdir[1],fileopen.localdir[2]); fprintf(fcmd,"cd \"%s\"\n", fileopen.localdir); #else fprintf(fcmd,"cd %s\n", fileopen.localdir); #endif } else fprintf(fcmd,"cd %s\n", fileopen.remotedir); #ifndef G_OS_WIN32 fprintf(fcmd,"%s %s &\n",command,fileopen.datafile); fprintf(fcmd,"exit\n"); #else if(!local) { fprintf(fcmd,"%s %s &\n",command,fileopen.datafile); fprintf(fcmd,"exit\n"); } else { if(strstr(gaussDirectory,"\"")) fprintf(fcmd,"set PATH=%s;%cPATH%c\n",gaussDirectory,'%','%'); else fprintf(fcmd,"set PATH=\"%s\";%cPATH%c\n",gaussDirectory,'%','%'); if(!strcmp(command,"g03.exe")||!strcmp(command,"g98.exe")) { fprintf(fcmd,"set GAUSS_EXEDIR=%s\n",gaussDirectory); fprintf(fcmd,"del/Q %s 2>nul\n",fileopen.logfile); fprintf(fcmd,"%s%s%s %s %s\n",gaussDirectory,G_DIR_SEPARATOR_S,command,fileopen.datafile, fileopen.logfile); } else fprintf(fcmd,"%s %s \n",command,fileopen.datafile); } #endif fclose(fcmd); #ifndef G_OS_WIN32 sprintf(buffer,"chmod u+x %s",cmdall); { int i = system(buffer);} #endif return TRUE; } /***********************************************************************************************************/ static gboolean create_cmd_molcas(G_CONST_RETURN gchar* command, gboolean local, gchar* cmddir, gchar* cmdfile, gchar* cmdall) { FILE* fcmd = NULL; gchar buffer[BSIZE]; gint i; if(local) sprintf(cmddir,"%s", fileopen.localdir); else sprintf(cmddir,"%s%stmp", gabedit_directory(), G_DIR_SEPARATOR_S); #ifndef G_OS_WIN32 sprintf(cmdfile,"%s.cmd", fileopen.projectname); #else if(!local) sprintf(cmdfile,"%s.cmd", fileopen.projectname); else sprintf(cmdfile,"%s.bat", fileopen.projectname); #endif sprintf(cmdall,"%s%s%s",cmddir,G_DIR_SEPARATOR_S,cmdfile); fcmd = FOpen(cmdall, "w"); if(!fcmd) { if(local) Message(_("\nI can not create cmd file\n"),_("Error"),TRUE); return FALSE; } #ifndef G_OS_WIN32 fprintf(fcmd,"#! /bin/sh\n"); fprintf(fcmd,"#********************************************\n"); fprintf(fcmd,"# file created by Gabedit\n"); fprintf(fcmd,"#********************************************\n"); if(!molcasTrap()) { fprintf(fcmd,"MOLCAS_TRAP='OFF'\n"); fprintf(fcmd,"export MOLCAS_TRAP\n"); } i = molcasMem(); if(i>=0) { fprintf(fcmd,"MOLCASMEM=%d\n",i); fprintf(fcmd,"export MOLCASMEM\n"); } i = molcasDisk(); if(i>=0) { fprintf(fcmd,"MOLCASDISK=%d\n",i); fprintf(fcmd,"export MOLCASDISK\n"); } i = molcasRamd(); if(i>=0) { fprintf(fcmd,"MOLCASRAMD=%d\n",i); fprintf(fcmd,"export MOLCASRAMD\n"); } molcasWorkDir(buffer); if(strcmp(buffer,"Default") != 0) { fprintf(fcmd,"WorkDir=%s\n",buffer); fprintf(fcmd,"export WorkDir\n"); } fprintf(fcmd,"#--------------------------------------------\n"); fprintf(fcmd,"Project=%s\n", fileopen.projectname); fprintf(fcmd,"export Project\n"); fprintf(fcmd,"#--------------------------------------------\n"); if(local) { fprintf(fcmd,"cd %s\n", fileopen.localdir); } else fprintf(fcmd,"cd %s\n", fileopen.remotedir); fprintf(fcmd,"%s %s > %s&\n", command, fileopen.datafile, fileopen.outputfile); fprintf(fcmd,"exit\n"); fclose(fcmd); sprintf(buffer,"chmod u+x %s",cmdall); { int i = system(buffer);} #else if(!local) { fprintf(fcmd,"#! /bin/sh\n"); fprintf(fcmd,"#********************************************\n"); fprintf(fcmd,"# file created by Gabedit\n"); fprintf(fcmd,"#********************************************\n"); if(!molcasTrap()) { fprintf(fcmd,"MOLCAS_TRAP='OFF'\n"); fprintf(fcmd,"export MOLCAS_TRAP\n"); } i = molcasMem(); if(i>=0) { fprintf(fcmd,"MOLCASMEM=%d\n",i); fprintf(fcmd,"export MOLCASMEM\n"); } i = molcasDisk(); if(i>=0) { fprintf(fcmd,"MOLCASDISK=%d\n",i); fprintf(fcmd,"export MOLCASDISK\n"); } i = molcasRamd(); if(i>=0) { fprintf(fcmd,"MOLCASRAMD=%d\n",i); fprintf(fcmd,"export MOLCASRAMD\n"); } molcasWorkDir(buffer); if(strcmp(buffer,"Default") != 0) { fprintf(fcmd,"WorkDir=%s\n",buffer); fprintf(fcmd,"export WorkDir\n"); } fprintf(fcmd,"#--------------------------------------------\n"); fprintf(fcmd,"Project=%s\n", fileopen.projectname); fprintf(fcmd,"export Project\n"); fprintf(fcmd,"#--------------------------------------------\n"); if(local) fprintf(fcmd,"cd %s\n", fileopen.localdir); else fprintf(fcmd,"cd %s\n", fileopen.remotedir); fprintf(fcmd,"%s %s > %s&\n", command, fileopen.datafile, fileopen.outputfile); fprintf(fcmd,"exit\n"); fclose(fcmd); } else { fprintf(fcmd,"@echo off\n"); fprintf(fcmd,"@rem ********************************************\n"); fprintf(fcmd,"@rem file created by Gabedit\n"); fprintf(fcmd,"@rem *******************************************\n"); if(!molcasTrap()) { fprintf(fcmd,"set MOLCAS_TRAP='OFF'\n"); } i = molcasMem(); if(i>=0) { fprintf(fcmd,"set MOLCASMEM=%d\n",i); } i = molcasDisk(); if(i>=0) { fprintf(fcmd,"set MOLCASDISK=%d\n",i); } i = molcasRamd(); if(i>=0) { fprintf(fcmd,"set MOLCASRAMD=%d\n",i); } molcasWorkDir(buffer); if(strcmp(buffer,"Default") != 0) { fprintf(fcmd,"set WorkDir=%s\n",buffer); } fprintf(fcmd,"@rem --------------------------------------------\n"); fprintf(fcmd,"set Project=%s\n", fileopen.projectname); fprintf(fcmd,"@rem --------------------------------------------\n"); if(local) { addUnitDisk(fcmd, fileopen.localdir); fprintf(fcmd,"cd %s\n", fileopen.localdir); } else fprintf(fcmd,"cd %s\n", fileopen.remotedir); fprintf(fcmd,"%s %s > %s\n", command, fileopen.datafile, fileopen.outputfile); fclose(fcmd); } #endif return TRUE; } /***********************************************************************************************************/ static gboolean create_cmd_molpro(G_CONST_RETURN gchar* command, gboolean local, gchar* cmddir, gchar* cmdfile, gchar* cmdall) { FILE* fcmd = NULL; #ifndef G_OS_WIN32 gchar buffer[BSIZE]; #endif if(local) sprintf(cmddir,"%s", fileopen.localdir); else sprintf(cmddir,"%s%stmp", gabedit_directory(), G_DIR_SEPARATOR_S); #ifndef G_OS_WIN32 sprintf(cmdfile,"%s.cmd", fileopen.projectname); #else if(!local) sprintf(cmdfile,"%s.cmd", fileopen.projectname); else sprintf(cmdfile,"%s.bat", fileopen.projectname); #endif sprintf(cmdall,"%s%s%s",cmddir,G_DIR_SEPARATOR_S,cmdfile); fcmd = FOpen(cmdall, "w"); if(!fcmd) { if(local) Message(_("\nI can not create cmd file\n"),_("Error"),TRUE); return FALSE; } if(local) { #ifdef G_OS_WIN32 addUnitDisk(fcmd, fileopen.localdir); #endif fprintf(fcmd,"cd %s\n", fileopen.localdir); } else fprintf(fcmd,"cd %s\n", fileopen.remotedir); #ifndef G_OS_WIN32 fprintf(fcmd,"%s %s &\n",command,fileopen.datafile); fprintf(fcmd,"exit\n"); fclose(fcmd); sprintf(buffer,"chmod u+x %s",cmdall); { int i = system(buffer);} #else if(!local) { fprintf(fcmd,"%s %s &\n",command,fileopen.datafile); fprintf(fcmd,"exit\n"); fclose(fcmd); } else { fprintf(fcmd,"%s %s \n",command,fileopen.datafile); fclose(fcmd); } #endif return TRUE; } /***********************************************************************************************************/ static gboolean create_cmd_mpqc(G_CONST_RETURN gchar* command, gboolean local, gchar* cmddir, gchar* cmdfile, gchar* cmdall) { FILE* fcmd = NULL; #ifndef G_OS_WIN32 gchar buffer[BSIZE]; #endif if(local) sprintf(cmddir,"%s", fileopen.localdir); else sprintf(cmddir,"%s%stmp", gabedit_directory(), G_DIR_SEPARATOR_S); #ifndef G_OS_WIN32 sprintf(cmdfile,"%s.cmd", fileopen.projectname); #else if(!local) sprintf(cmdfile,"%s.cmd", fileopen.projectname); else sprintf(cmdfile,"%s.bat", fileopen.projectname); #endif sprintf(cmdall,"%s%s%s",cmddir,G_DIR_SEPARATOR_S,cmdfile); fcmd = FOpen(cmdall, "w"); if(!fcmd) { if(local) Message(_("\nI can not create cmd file\n"),_("Error"),TRUE); return FALSE; } if(local) { #ifdef G_OS_WIN32 addUnitDisk(fcmd, fileopen.localdir); #endif fprintf(fcmd,"cd %s\n", fileopen.localdir); } else fprintf(fcmd,"cd %s\n", fileopen.remotedir); #ifndef G_OS_WIN32 fprintf(fcmd,"%s %s > %s &\n",command,fileopen.datafile, fileopen.outputfile); fprintf(fcmd,"exit\n"); #else if(!local) { fprintf(fcmd,"%s %s > %s &\n",command,fileopen.datafile, fileopen.outputfile); fprintf(fcmd,"exit\n"); } else fprintf(fcmd,"%s %s > %s\n",command,fileopen.datafile, fileopen.outputfile); #endif fclose(fcmd); #ifndef G_OS_WIN32 sprintf(buffer,"chmod u+x %s",cmdall); { int i = system(buffer);} #endif return TRUE; } /***********************************************************************************************************/ static gboolean create_cmd_other(G_CONST_RETURN gchar* command, gboolean local, gchar* cmddir, gchar* cmdfile, gchar* cmdall) { FILE* fcmd = NULL; #ifndef G_OS_WIN32 gchar buffer[BSIZE]; #endif if(local) sprintf(cmddir,"%s", fileopen.localdir); else sprintf(cmddir,"%s%stmp", gabedit_directory(), G_DIR_SEPARATOR_S); sprintf(cmdfile,"%s.cmd", fileopen.projectname); sprintf(cmdall,"%s%s%s",cmddir,G_DIR_SEPARATOR_S,cmdfile); fcmd = FOpen(cmdall, "w"); if(!fcmd) { if(local) Message(_("\nI can not create cmd file\n"),_("Error"),TRUE); return FALSE; } if(local) { #ifdef G_OS_WIN32 addUnitDisk(fcmd, fileopen.localdir); fprintf(fcmd,"cd %s\n", fileopen.localdir); #endif } else fprintf(fcmd,"cd %s\n", fileopen.remotedir); #ifndef G_OS_WIN32 fprintf(fcmd,"%s\n",command); fprintf(fcmd,"exit\n"); fclose(fcmd); sprintf(buffer,"chmod u+x %s",cmdall); { int i = system(buffer);} #else if(!local) { fprintf(fcmd,"%s\n",command); fprintf(fcmd,"exit\n"); fclose(fcmd); } else { fprintf(fcmd,"%s\n",command); fclose(fcmd); } #endif return TRUE; } /********************************************************************************/ static void run_remote_demon(GtkWidget *b,gpointer data) { gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar cmdfile[BSIZE]; gchar cmddir[BSIZE]; gchar cmdall[BSIZE]; GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *temp; gchar *NomFichier; gchar *Command; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; gint code = 0; G_CONST_RETURN gchar *localdir; entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.remotehost = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[2]))); fileopen.remoteuser = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[3]))); fileopen.remotepass = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[4]))); fileopen.remotedir = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[5]))); fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); /* fileopen.netWorkProtocol Deja defini dans run_program*/ /* Debug("remote demon : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_ORCA],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_ORCA, fileopen.command, fileopen.netWorkProtocol); add_host(fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); title = g_strdup_printf(_("Run DeMon at host :%s, Login : %s"),fileopen.remotehost,fileopen.remoteuser); Win = create_text_result_command(Text,Frame,title); g_free(title); gtk_widget_show_all(Win); while( gtk_events_pending() ) gtk_main_iteration(); gtk_widget_set_sensitive(Win, FALSE); if(!this_is_a_backspace(fileopen.remotedir)) { /* Make Working directory */ /* Debug("Make dir remote demon : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ Command = g_strdup_printf("mkdir %s",fileopen.remotedir); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); g_free(Command); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { /* put file.com */ /* Debug("Put File remote demon : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ code = put_file(fout,ferr,fileopen.datafile,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if( code==0 ) { if(!create_cmd_demon(entrytext0, FALSE, cmddir, cmdfile, cmdall)) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nI can not create cmd file\n"),-1); gtk_widget_set_sensitive(Win, TRUE); return; } code = 0; } if(code == 0) { code = put_file(fout,ferr,cmdfile,cmddir,"./", fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); unlink(cmdall); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("chmod u+x %s",cmdfile); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("./%s>/dev/null&",cmdfile); remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nRun DeMon at remote host :\n"),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nRun DeMon at remote host :\n"),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } gtk_widget_set_sensitive(Win, TRUE); g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_remote_orca(GtkWidget *b,gpointer data) { gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar cmdfile[BSIZE]; gchar cmddir[BSIZE]; gchar cmdall[BSIZE]; GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *temp; gchar *NomFichier; gchar *Command; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; gint code = 0; G_CONST_RETURN gchar *localdir; entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.remotehost = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[2]))); fileopen.remoteuser = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[3]))); fileopen.remotepass = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[4]))); fileopen.remotedir = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[5]))); fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); /* fileopen.netWorkProtocol Deja defini dans run_program*/ /* Debug("remote orca : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_ORCA],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_ORCA, fileopen.command, fileopen.netWorkProtocol); add_host(fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); title = g_strdup_printf(_("Run Orca at host :%s, Login : %s"),fileopen.remotehost,fileopen.remoteuser); Win = create_text_result_command(Text,Frame,title); g_free(title); gtk_widget_show_all(Win); while( gtk_events_pending() ) gtk_main_iteration(); gtk_widget_set_sensitive(Win, FALSE); if(!this_is_a_backspace(fileopen.remotedir)) { /* Make Working directory */ /* Debug("Make dir remote orca : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ Command = g_strdup_printf("mkdir %s",fileopen.remotedir); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); g_free(Command); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { /* put file.com */ /* Debug("Put File remote orca : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ code = put_file(fout,ferr,fileopen.datafile,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if( code==0 ) { if(!create_cmd_orca(entrytext0, FALSE, cmddir, cmdfile, cmdall)) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nI can not create cmd file\n"),-1); gtk_widget_set_sensitive(Win, TRUE); return; } code = 0; } if(code == 0) { code = put_file(fout,ferr,cmdfile,cmddir,"./", fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); unlink(cmdall); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("chmod u+x %s",cmdfile); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("./%s>/dev/null&",cmdfile); remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nRun Orca at remote host :\n"),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nRun Orca at remote host :\n"),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } gtk_widget_set_sensitive(Win, TRUE); g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_remote_nwchem(GtkWidget *b,gpointer data) { gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar cmdfile[BSIZE]; gchar cmddir[BSIZE]; gchar cmdall[BSIZE]; GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *temp; gchar *NomFichier; gchar *Command; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; gint code = 0; G_CONST_RETURN gchar *localdir; entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.nw",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.remotehost = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[2]))); fileopen.remoteuser = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[3]))); fileopen.remotepass = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[4]))); fileopen.remotedir = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[5]))); fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); /* fileopen.netWorkProtocol Deja defini dans run_program*/ /* Debug("remote nwchem : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_NWCHEM],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_NWCHEM, fileopen.command, fileopen.netWorkProtocol); add_host(fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); title = g_strdup_printf(_("Run NWChem at host :%s, Login : %s"),fileopen.remotehost,fileopen.remoteuser); Win = create_text_result_command(Text,Frame,title); g_free(title); gtk_widget_show_all(Win); while( gtk_events_pending() ) gtk_main_iteration(); gtk_widget_set_sensitive(Win, FALSE); if(!this_is_a_backspace(fileopen.remotedir)) { /* Make Working directory */ /* Debug("Make dir remote nwchem : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ Command = g_strdup_printf("mkdir %s",fileopen.remotedir); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); g_free(Command); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { /* put file.com */ /* Debug("Put File remote nwchem : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ code = put_file(fout,ferr,fileopen.datafile,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if( code==0 ) { if(!create_cmd_nwchem(entrytext0, FALSE, cmddir, cmdfile, cmdall)) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nI can not create cmd file\n"),-1); gtk_widget_set_sensitive(Win, TRUE); return; } code = 0; } if(code == 0) { code = put_file(fout,ferr,cmdfile,cmddir,"./", fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); unlink(cmdall); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("chmod u+x %s",cmdfile); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("./%s>/dev/null&",cmdfile); remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nRun NWChem at remote host :\n"),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nRun NWChem at remote host :\n"),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } gtk_widget_set_sensitive(Win, TRUE); g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_remote_psicode(GtkWidget *b,gpointer data) { gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar cmdfile[BSIZE]; gchar cmddir[BSIZE]; gchar cmdall[BSIZE]; GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *temp; gchar *NomFichier; gchar *Command; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; gint code = 0; G_CONST_RETURN gchar *localdir; entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.psi",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.remotehost = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[2]))); fileopen.remoteuser = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[3]))); fileopen.remotepass = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[4]))); fileopen.remotedir = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[5]))); fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); /* fileopen.netWorkProtocol Deja defini dans run_program*/ /* Debug("remote psicode : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_PSICODE],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_PSICODE, fileopen.command, fileopen.netWorkProtocol); add_host(fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); title = g_strdup_printf(_("Run Psicode at host :%s, Login : %s"),fileopen.remotehost,fileopen.remoteuser); Win = create_text_result_command(Text,Frame,title); g_free(title); gtk_widget_show_all(Win); while( gtk_events_pending() ) gtk_main_iteration(); gtk_widget_set_sensitive(Win, FALSE); if(!this_is_a_backspace(fileopen.remotedir)) { /* Make Working directory */ /* Debug("Make dir remote psicode : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ Command = g_strdup_printf("mkdir %s",fileopen.remotedir); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); g_free(Command); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { /* put file.com */ /* Debug("Put File remote psicode : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ code = put_file(fout,ferr,fileopen.datafile,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if( code==0 ) { if(!create_cmd_psicode(entrytext0, FALSE, cmddir, cmdfile, cmdall)) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nI can not create cmd file\n"),-1); gtk_widget_set_sensitive(Win, TRUE); return; } code = 0; } if(code == 0) { code = put_file(fout,ferr,cmdfile,cmddir,"./", fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); unlink(cmdall); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("chmod u+x %s",cmdfile); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("./%s>/dev/null&",cmdfile); remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nRun Psicode at remote host :\n"),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nRun Psicode at remote host :\n"),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } gtk_widget_set_sensitive(Win, TRUE); g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_remote_firefly(GtkWidget *b,gpointer data) { gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar cmdfile[BSIZE]; gchar cmddir[BSIZE]; gchar cmdall[BSIZE]; GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *temp; gchar *NomFichier; gchar *Command; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; gint code = 0; G_CONST_RETURN gchar *localdir; entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.remotehost = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[2]))); fileopen.remoteuser = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[3]))); fileopen.remotepass = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[4]))); fileopen.remotedir = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[5]))); fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); /* fileopen.netWorkProtocol Deja defini dans run_program*/ /* Debug("remote pcgamess : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_FIREFLY],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_FIREFLY, fileopen.command, fileopen.netWorkProtocol); add_host(fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); title = g_strdup_printf(_("Run FireFly at host :%s, Login : %s"),fileopen.remotehost,fileopen.remoteuser); Win = create_text_result_command(Text,Frame,title); g_free(title); gtk_widget_show_all(Win); while( gtk_events_pending() ) gtk_main_iteration(); gtk_widget_set_sensitive(Win, FALSE); if(!this_is_a_backspace(fileopen.remotedir)) { /* Make Working directory */ /* Debug("Make dir remote pcgamess : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ Command = g_strdup_printf("mkdir %s",fileopen.remotedir); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); g_free(Command); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { /* put file.com */ /* Debug("Put File remote pcgamess : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ code = put_file(fout,ferr,fileopen.datafile,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if( code==0 ) { if(!create_cmd_firefly(entrytext0, FALSE, cmddir, cmdfile, cmdall)) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL, _("\nI can not create cmd file\n "),-1); gtk_widget_set_sensitive(Win, TRUE); return; } code = 0; } if(code == 0) { code = put_file(fout,ferr,cmdfile,cmddir,"./", fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); unlink(cmdall); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("chmod u+x %s",cmdfile); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nchmod for cmd file :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nchmod for cmd file :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("$HOME/%s>/dev/null&",cmdfile); remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nRun FireFly at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nRun FireFly at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } gtk_widget_set_sensitive(Win, TRUE); g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_remote_qchem(GtkWidget *b,gpointer data) { gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar cmdfile[BSIZE]; gchar cmddir[BSIZE]; gchar cmdall[BSIZE]; GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *temp; gchar *NomFichier; gchar *Command; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; gint code = 0; G_CONST_RETURN gchar *localdir; entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.remotehost = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[2]))); fileopen.remoteuser = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[3]))); fileopen.remotepass = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[4]))); fileopen.remotedir = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[5]))); fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); /* fileopen.netWorkProtocol Deja defini dans run_program*/ /* Debug("remote qchem : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_QCHEM],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_QCHEM, fileopen.command, fileopen.netWorkProtocol); add_host(fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); title = g_strdup_printf(_("Run Q-Chem at host :%s, Login : %s"),fileopen.remotehost,fileopen.remoteuser); Win = create_text_result_command(Text,Frame,title); g_free(title); gtk_widget_show_all(Win); while( gtk_events_pending() ) gtk_main_iteration(); gtk_widget_set_sensitive(Win, FALSE); if(!this_is_a_backspace(fileopen.remotedir)) { /* Make Working directory */ /* Debug("Make dir remote qchem : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ Command = g_strdup_printf("mkdir %s",fileopen.remotedir); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); g_free(Command); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { /* put file.com */ /* Debug("Put File remote qchem : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ code = put_file(fout,ferr,fileopen.datafile,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if( code==0 ) { if(!create_cmd_qchem(entrytext0, FALSE, cmddir, cmdfile, cmdall)) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL, _("\nI can not create cmd file\n "),-1); gtk_widget_set_sensitive(Win, TRUE); return; } code = 0; } if(code == 0) { code = put_file(fout,ferr,cmdfile,cmddir,"./", fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); unlink(cmdall); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("chmod u+x %s",cmdfile); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nchmod for cmd file :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nchmod for cmd file :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("./%s>/dev/null&",cmdfile); remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nRun Q-Chem at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nRun Q-Chem at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } gtk_widget_set_sensitive(Win, TRUE); g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_remote_mopac(GtkWidget *b,gpointer data) { gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar cmdfile[BSIZE]; gchar cmddir[BSIZE]; gchar cmdall[BSIZE]; GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *temp; gchar *NomFichier; gchar *Command; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; gint code = 0; G_CONST_RETURN gchar *localdir; entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.mop",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.aux",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.remotehost = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[2]))); fileopen.remoteuser = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[3]))); fileopen.remotepass = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[4]))); fileopen.remotedir = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[5]))); fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); /* fileopen.netWorkProtocol Deja defini dans run_program*/ /* Debug("remote mopac : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_MOPAC],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_MOPAC, fileopen.command, fileopen.netWorkProtocol); add_host(fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); title = g_strdup_printf(_("Run Mopac at host :%s, Login : %s"),fileopen.remotehost,fileopen.remoteuser); Win = create_text_result_command(Text,Frame,title); g_free(title); gtk_widget_show_all(Win); while( gtk_events_pending() ) gtk_main_iteration(); gtk_widget_set_sensitive(Win, FALSE); if(!this_is_a_backspace(fileopen.remotedir)) { /* Make Working directory */ /* Debug("Make dir remote mopac : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ Command = g_strdup_printf("mkdir %s",fileopen.remotedir); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); g_free(Command); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { /* put file.com */ /* Debug("Put File remote mopac : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ code = put_file(fout,ferr,fileopen.datafile,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if( code==0 ) { if(!create_cmd_mopac(entrytext0, FALSE, cmddir, cmdfile, cmdall)) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL, _("\nI can not create cmd file\n "),-1); gtk_widget_set_sensitive(Win, TRUE); return; } code = 0; } if(code == 0) { code = put_file(fout,ferr,cmdfile,cmddir,"./", fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); unlink(cmdall); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("chmod u+x %s",cmdfile); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("./%s>/dev/null&",cmdfile); remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nRun Mopac at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nRun Mopac at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } gtk_widget_set_sensitive(Win, TRUE); g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_remote_gamess(GtkWidget *b,gpointer data) { gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar cmdfile[BSIZE]; gchar cmddir[BSIZE]; gchar cmdall[BSIZE]; GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *temp; gchar *NomFichier; gchar *Command; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; gint code = 0; G_CONST_RETURN gchar *localdir; entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.remotehost = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[2]))); fileopen.remoteuser = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[3]))); fileopen.remotepass = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[4]))); fileopen.remotedir = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[5]))); fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); /* fileopen.netWorkProtocol Deja defini dans run_program*/ /* Debug("remote gauss : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_GAMESS],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_GAMESS, fileopen.command, fileopen.netWorkProtocol); add_host(fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); title = g_strdup_printf(_("Run Gamess at host :%s, Login : %s"),fileopen.remotehost,fileopen.remoteuser); Win = create_text_result_command(Text,Frame,title); g_free(title); gtk_widget_show_all(Win); while( gtk_events_pending() ) gtk_main_iteration(); gtk_widget_set_sensitive(Win, FALSE); if(!this_is_a_backspace(fileopen.remotedir)) { /* Make Working directory */ /* Debug("Make dir remote gauss : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ Command = g_strdup_printf("mkdir %s",fileopen.remotedir); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); g_free(Command); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { /* put file.com */ /* Debug("Put File remote gauss : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ code = put_file(fout,ferr,fileopen.datafile,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if( code==0 ) { if(!create_cmd_gamess(entrytext0, FALSE, cmddir, cmdfile, cmdall)) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nI can not create cmd file\n"),-1); gtk_widget_set_sensitive(Win, TRUE); return; } code = 0; } if(code == 0) { code = put_file(fout,ferr,cmdfile,cmddir,"./", fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); unlink(cmdall); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("chmod u+x %s",cmdfile); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("./%s>/dev/null&",cmdfile); remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nRun gamess at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nRun gamess at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } gtk_widget_set_sensitive(Win, TRUE); g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_remote_gaussian(GtkWidget *b,gpointer data) { gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar cmdfile[BSIZE]; gchar cmddir[BSIZE]; gchar cmdall[BSIZE]; GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *temp; gchar *NomFichier; gchar *Command; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; gint code = 0; G_CONST_RETURN gchar *localdir; entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.remotehost = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[2]))); fileopen.remoteuser = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[3]))); fileopen.remotepass = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[4]))); fileopen.remotedir = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[5]))); fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); /* fileopen.netWorkProtocol Deja defini dans run_program*/ /* Debug("remote gauss : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_GAUSSIAN],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_GAUSSIAN, fileopen.command, fileopen.netWorkProtocol); add_host(fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); title = g_strdup_printf(_("Run Gaussian at host :%s, Login : %s"),fileopen.remotehost,fileopen.remoteuser); Win = create_text_result_command(Text,Frame,title); g_free(title); gtk_widget_show_all(Win); while( gtk_events_pending() ) gtk_main_iteration(); gtk_widget_set_sensitive(Win, FALSE); if(!this_is_a_backspace(fileopen.remotedir)) { /* Make Working directory */ /* Debug("Make dir remote gauss : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ Command = g_strdup_printf("mkdir %s",fileopen.remotedir); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); g_free(Command); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { /* put file.com */ /* Debug("Put File remote gauss : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ code = put_file(fout,ferr,fileopen.datafile,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if( code==0 ) { if(!create_cmd_gaussian(entrytext0, FALSE, cmddir, cmdfile, cmdall)) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nI can not create cmd file\n"),-1); gtk_widget_set_sensitive(Win, TRUE); return; } code = 0; } if(code == 0) { code = put_file(fout,ferr,cmdfile,cmddir,"./", fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); unlink(cmdall); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("chmod u+x %s",cmdfile); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("./%s>/dev/null&",cmdfile); remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nRun gaussian at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nRun gaussian at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } gtk_widget_set_sensitive(Win, TRUE); g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_remote_molcas(GtkWidget *b,gpointer data) { gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar cmdfile[BSIZE]; gchar cmddir[BSIZE]; gchar cmdall[BSIZE]; GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *temp; gchar *NomFichier; gchar *Command; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; gint code = 0; G_CONST_RETURN gchar *localdir; entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname); /* fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname);*/ fileopen.moldenfile=g_strdup_printf("'%s.*.molden'", fileopen.projectname); fileopen.remotehost = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[2]))); fileopen.remoteuser = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[3]))); fileopen.remotepass = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[4]))); fileopen.remotedir = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[5]))); fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); /* fileopen.netWorkProtocol Deja defini dans run_program*/ /* Debug("remote molcas : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_MOLCAS],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_MOLCAS, fileopen.command, fileopen.netWorkProtocol); add_host(fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); title = g_strdup_printf(_("Run molcas at host :%s, Login : %s"),fileopen.remotehost,fileopen.remoteuser); Win = create_text_result_command(Text,Frame,title); g_free(title); gtk_widget_show_all(Win); while( gtk_events_pending() ) gtk_main_iteration(); gtk_widget_set_sensitive(Win, FALSE); if(!this_is_a_backspace(fileopen.remotedir)) { /* Make Working directory */ /* Debug("Make dir remote molcas : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ Command = g_strdup_printf("mkdir %s",fileopen.remotedir); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); g_free(Command); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { /* put file.com */ /* Debug("Put File remote molcas : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ code = put_file(fout,ferr,fileopen.datafile,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if( code==0 ) { if(!create_cmd_molcas(entrytext0, FALSE, cmddir, cmdfile, cmdall)) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nI can not create cmd file\n"),-1); gtk_widget_set_sensitive(Win, TRUE); return; } code = 0; } if(code == 0) { code = put_file(fout,ferr,cmdfile,cmddir,"./", fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); unlink(cmdall); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("chmod u+x %s",cmdfile); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("./%s>/dev/null&",cmdfile); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nRun molcas at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nRun molcas at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } gtk_widget_set_sensitive(Win, TRUE); g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_remote_molpro(GtkWidget *b,gpointer data) { gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar cmdfile[BSIZE]; gchar cmddir[BSIZE]; gchar cmdall[BSIZE]; GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *temp; gchar *Tompon; gchar *pdest; gchar *t; gchar *NomFichier; gchar *Command; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; gint code = 0; G_CONST_RETURN gchar *localdir; entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); /*Debug("localdir = %s\n",fileopen.localdir);*/ g_free(temp); fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname); lowercase(fileopen.moldenfile); fileopen.remotehost = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[2]))); fileopen.remoteuser = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[3]))); fileopen.remotepass = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[4]))); fileopen.remotedir = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[5]))); fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); /* fileopen.netWorkProtocol Deja defini dans run_program*/ /* Debug("remote molpro : %s %s %s\n",fileopen.remotehost,fileopen.remoteuser,fileopen.remotedir);*/ Tompon=gabedit_text_get_chars(text,0,-1); pdest = strstr( Tompon, fileopen.moldenfile); if( pdest == NULL ) { pdest = strstr( Tompon,"put,molden"); if(pdest) { temp = strstr(pdest,";"); t = strstr(pdest,"\n"); if(temp && t && t/dev/null&",cmdfile); /*rsh (fout,ferr,Command,fileopen.remoteuser,fileopen.remotehost);*/ remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nRun molpro at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nRun molpro at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } gtk_widget_set_sensitive(Win, TRUE); g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_remote_mpqc(GtkWidget *b,gpointer data) { gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar cmdfile[BSIZE]; gchar cmddir[BSIZE]; gchar cmdall[BSIZE]; GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *temp; gchar *NomFichier; gchar *Command; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; gint code = 0; G_CONST_RETURN gchar *localdir; entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname); fileopen.remotehost = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[2]))); fileopen.remoteuser = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[3]))); fileopen.remotepass = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[4]))); fileopen.remotedir = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[5]))); fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_MPQC],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_MPQC, fileopen.command, fileopen.netWorkProtocol); add_host(fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir); if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); title = g_strdup_printf(_("Run MPQC at host :%s, Login : %s"),fileopen.remotehost,fileopen.remoteuser); Win = create_text_result_command(Text,Frame,title); g_free(title); gtk_widget_show_all(Win); while( gtk_events_pending() ) gtk_main_iteration(); gtk_widget_set_sensitive(Win, FALSE); if(!this_is_a_backspace(fileopen.remotedir)) { /* Make Working directory */ Command = g_strdup_printf("mkdir %s",fileopen.remotedir); remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); g_free(Command); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { /* put file.com */ code = put_file(fout,ferr,fileopen.datafile,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if( code==0 ) { if(!create_cmd_mpqc(entrytext0, FALSE, cmddir, cmdfile, cmdall)) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nI can not create cmd file\n"),-1); gtk_widget_set_sensitive(Win, TRUE); return; } code = 0; } if(code == 0) { code = put_file(fout,ferr,cmdfile,cmddir,"./", fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); unlink(cmdall); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("chmod u+x %s",cmdfile); remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("./%s>/dev/null&",cmdfile); remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nRun MPQC at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nRun MPQC at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } gtk_widget_set_sensitive(Win, TRUE); g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_remote_other(GtkWidget *b,gpointer data) { gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar cmdfile[BSIZE]; gchar cmddir[BSIZE]; gchar cmdall[BSIZE]; GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *temp; gchar *NomFichier; gchar *Command; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; gint code = 0; G_CONST_RETURN gchar *localdir; entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.remotehost = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[2]))); fileopen.remoteuser = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[3]))); fileopen.remotepass = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[4]))); fileopen.remotedir = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[5]))); fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); /* fileopen.netWorkProtocol Deja defini dans run_program*/ /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_OTHER],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_OTHER, fileopen.command, fileopen.netWorkProtocol); add_host(fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir); if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); title = g_strdup_printf(_("Run \"%s %s\" Command at host : %s, Login : %s"), entrytext0, fileopen.datafile, fileopen.remotehost,fileopen.remoteuser); Win = create_text_result_command(Text,Frame,title); g_free(title); gtk_widget_show_all(Win); while( gtk_events_pending() ) gtk_main_iteration(); gtk_widget_set_sensitive(Win, FALSE); if(!this_is_a_backspace(fileopen.remotedir)) { /* Make Working directory */ Command = g_strdup_printf("mkdir %s",fileopen.remotedir); remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); g_free(Command); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nMake Working Directory remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { /* put file.com */ code = put_file(fout,ferr,fileopen.datafile,fileopen.localdir,fileopen.remotedir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut Data File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if( code==0 ) { if(!create_cmd_other(entrytext0, FALSE, cmddir, cmdfile, cmdall)) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nI can not create cmd file\n"),-1); gtk_widget_set_sensitive(Win, TRUE); return; } code = 0; } if(code == 0) { code = put_file(fout,ferr,cmdfile,cmddir,"./", fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nPut CMD File at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); unlink(cmdall); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("chmod u+x %s",cmdfile); remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nchmod for cmd file :\n"),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } if(code == 0) { Command = g_strdup_printf("./%s>/dev/null&",cmdfile); remote_command (fout,ferr,Command,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass); gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,_("\nRun gaussian at remote host :\n "),-1); gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,_("\nRun gaussian at remote host :\n "),-1); put_text_in_texts_widget(Text,fout,ferr); while( gtk_events_pending() ) gtk_main_iteration(); } gtk_widget_set_sensitive(Win, TRUE); g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_local_demon(GtkWidget *b,gpointer data) { #ifdef G_OS_WIN32 gchar *fout = g_strdup_printf("\"%s%stmp%sfout\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("\"%s%stmp%sferr\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #else gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #endif GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *strout; gchar *strerr; gchar *temp; gchar *NomFichier; gchar Command[BSIZE]; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; G_CONST_RETURN gchar *localdir; gchar cmdFileAllName[BSIZE]; gchar cmdDir[BSIZE]; gchar cmdFile[BSIZE]; unlink(fout); unlink(ferr); entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotedir = NULL; /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotepass = NULL; fileopen.remotedir = NULL; fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_ORCA],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_ORCA, fileopen.command, fileopen.netWorkProtocol); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); if(!create_cmd_demon(entrytext0, TRUE, cmdDir, cmdFile, cmdFileAllName)) return; #ifdef G_OS_WIN32 sprintf(Command ,"\"%s\"",cmdFileAllName); #else sprintf(Command ,"%s",cmdFileAllName); #endif run_local_command(fout,ferr,Command,TRUE); title = g_strdup_printf(_("Run DeMon in local : %s"),Command); Win = create_text_result_command(Text,Frame,title); g_free(title); strout = cat_file(fout,FALSE); strerr = cat_file(ferr,FALSE); if(!strout && !strerr) destroy_children(Win); else { if(strout) { gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,strout,-1); g_free(strout); } if(strerr) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,strerr,-1); g_free(strerr); } gtk_widget_show_all(Win); if(!strout) gtk_widget_hide(Frame[0]); } g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_local_orca(GtkWidget *b,gpointer data) { #ifdef G_OS_WIN32 gchar *fout = g_strdup_printf("\"%s%stmp%sfout\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("\"%s%stmp%sferr\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #else gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #endif GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *strout; gchar *strerr; gchar *temp; gchar *NomFichier; gchar Command[BSIZE]; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; G_CONST_RETURN gchar *localdir; gchar cmdFileAllName[BSIZE]; gchar cmdDir[BSIZE]; gchar cmdFile[BSIZE]; unlink(fout); unlink(ferr); entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotedir = NULL; /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotepass = NULL; fileopen.remotedir = NULL; fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_ORCA],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_ORCA, fileopen.command, fileopen.netWorkProtocol); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); if(!create_cmd_orca(entrytext0, TRUE, cmdDir, cmdFile, cmdFileAllName)) return; #ifdef G_OS_WIN32 sprintf(Command ,"\"%s\"",cmdFileAllName); #else sprintf(Command ,"%s",cmdFileAllName); #endif run_local_command(fout,ferr,Command,TRUE); title = g_strdup_printf(_("Run Orca in local : %s"),Command); Win = create_text_result_command(Text,Frame,title); g_free(title); strout = cat_file(fout,FALSE); strerr = cat_file(ferr,FALSE); if(!strout && !strerr) destroy_children(Win); else { if(strout) { gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,strout,-1); g_free(strout); } if(strerr) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,strerr,-1); g_free(strerr); } gtk_widget_show_all(Win); if(!strout) gtk_widget_hide(Frame[0]); } g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_local_nwchem(GtkWidget *b,gpointer data) { #ifdef G_OS_WIN32 gchar *fout = g_strdup_printf("\"%s%stmp%sfout\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("\"%s%stmp%sferr\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #else gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #endif GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *strout; gchar *strerr; gchar *temp; gchar *NomFichier; gchar Command[BSIZE]; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; G_CONST_RETURN gchar *localdir; gchar cmdFileAllName[BSIZE]; gchar cmdDir[BSIZE]; gchar cmdFile[BSIZE]; unlink(fout); unlink(ferr); entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.nw",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotedir = NULL; /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotepass = NULL; fileopen.remotedir = NULL; fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_NWCHEM],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_NWCHEM, fileopen.command, fileopen.netWorkProtocol); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); if(!create_cmd_nwchem(entrytext0, TRUE, cmdDir, cmdFile, cmdFileAllName)) return; #ifdef G_OS_WIN32 sprintf(Command ,"\"%s\"",cmdFileAllName); #else sprintf(Command ,"%s",cmdFileAllName); #endif run_local_command(fout,ferr,Command,TRUE); title = g_strdup_printf(_("Run NWChem in local : %s"),Command); Win = create_text_result_command(Text,Frame,title); g_free(title); strout = cat_file(fout,FALSE); strerr = cat_file(ferr,FALSE); if(!strout && !strerr) destroy_children(Win); else { if(strout) { gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,strout,-1); g_free(strout); } if(strerr) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,strerr,-1); g_free(strerr); } gtk_widget_show_all(Win); if(!strout) gtk_widget_hide(Frame[0]); } g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_local_psicode(GtkWidget *b,gpointer data) { #ifdef G_OS_WIN32 gchar *fout = g_strdup_printf("\"%s%stmp%sfout\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("\"%s%stmp%sferr\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #else gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #endif GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *strout; gchar *strerr; gchar *temp; gchar *NomFichier; gchar Command[BSIZE]; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; G_CONST_RETURN gchar *localdir; gchar cmdFileAllName[BSIZE]; gchar cmdDir[BSIZE]; gchar cmdFile[BSIZE]; unlink(fout); unlink(ferr); entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.psi",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotedir = NULL; /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotepass = NULL; fileopen.remotedir = NULL; fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_PSICODE],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_PSICODE, fileopen.command, fileopen.netWorkProtocol); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); if(!create_cmd_psicode(entrytext0, TRUE, cmdDir, cmdFile, cmdFileAllName)) return; #ifdef G_OS_WIN32 sprintf(Command ,"\"%s\"",cmdFileAllName); #else sprintf(Command ,"%s",cmdFileAllName); #endif run_local_command(fout,ferr,Command,TRUE); title = g_strdup_printf(_("Run Psicode in local : %s"),Command); Win = create_text_result_command(Text,Frame,title); g_free(title); strout = cat_file(fout,FALSE); strerr = cat_file(ferr,FALSE); if(!strout && !strerr) destroy_children(Win); else { if(strout) { gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,strout,-1); g_free(strout); } if(strerr) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,strerr,-1); g_free(strerr); } gtk_widget_show_all(Win); if(!strout) gtk_widget_hide(Frame[0]); } g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_local_firefly(GtkWidget *b,gpointer data) { #ifdef G_OS_WIN32 gchar *fout = g_strdup_printf("\"%s%stmp%sfout\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("\"%s%stmp%sferr\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #else gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #endif GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *strout; gchar *strerr; gchar *temp; gchar *NomFichier; gchar Command[BSIZE]; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; G_CONST_RETURN gchar *localdir; gchar cmdFileAllName[BSIZE]; gchar cmdDir[BSIZE]; gchar cmdFile[BSIZE]; unlink(fout); unlink(ferr); entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotedir = NULL; /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotepass = NULL; fileopen.remotedir = NULL; fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_FIREFLY],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_FIREFLY, fileopen.command, fileopen.netWorkProtocol); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); if(!create_cmd_firefly(entrytext0, TRUE, cmdDir, cmdFile, cmdFileAllName)) return; #ifdef G_OS_WIN32 sprintf(Command ,"\"%s\"",cmdFileAllName); #else sprintf(Command ,"%s",cmdFileAllName); #endif run_local_command(fout,ferr,Command,TRUE); title = g_strdup_printf(_("Run FireFly in local : %s"),Command); Win = create_text_result_command(Text,Frame,title); g_free(title); strout = cat_file(fout,FALSE); strerr = cat_file(ferr,FALSE); if(!strout && !strerr) destroy_children(Win); else { if(strout) { gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,strout,-1); g_free(strout); } if(strerr) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,strerr,-1); g_free(strerr); } gtk_widget_show_all(Win); if(!strout) gtk_widget_hide(Frame[0]); } g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_local_qchem(GtkWidget *b,gpointer data) { #ifdef G_OS_WIN32 gchar *fout = g_strdup_printf("\"%s%stmp%sfout\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("\"%s%stmp%sferr\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #else gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #endif GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *strout; gchar *strerr; gchar *temp; gchar *NomFichier; gchar Command[BSIZE]; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; G_CONST_RETURN gchar *localdir; gchar cmdFileAllName[BSIZE]; gchar cmdDir[BSIZE]; gchar cmdFile[BSIZE]; unlink(fout); unlink(ferr); entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotedir = NULL; /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotepass = NULL; fileopen.remotedir = NULL; fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_QCHEM],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_QCHEM, fileopen.command, fileopen.netWorkProtocol); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); if(!create_cmd_qchem(entrytext0, TRUE, cmdDir, cmdFile, cmdFileAllName)) return; #ifdef G_OS_WIN32 sprintf(Command ,"\"%s\"",cmdFileAllName); #else sprintf(Command ,"%s",cmdFileAllName); #endif run_local_command(fout,ferr,Command,TRUE); title = g_strdup_printf(_("Run Q-Chem in local : %s"),Command); Win = create_text_result_command(Text,Frame,title); g_free(title); strout = cat_file(fout,FALSE); strerr = cat_file(ferr,FALSE); if(!strout && !strerr) destroy_children(Win); else { if(strout) { gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,strout,-1); g_free(strout); } if(strerr) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,strerr,-1); g_free(strerr); } gtk_widget_show_all(Win); if(!strout) gtk_widget_hide(Frame[0]); } g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_local_mopac(GtkWidget *b,gpointer data) { #ifdef G_OS_WIN32 gchar *fout = g_strdup_printf("\"%s%stmp%sfout\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("\"%s%stmp%sferr\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #else gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #endif GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *strout; gchar *strerr; gchar *temp; gchar *NomFichier; gchar Command[BSIZE]; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; G_CONST_RETURN gchar *localdir; gchar cmdFileAllName[BSIZE]; gchar cmdDir[BSIZE]; gchar cmdFile[BSIZE]; unlink(fout); unlink(ferr); entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.mop",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.aux",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotedir = NULL; /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotepass = NULL; fileopen.remotedir = NULL; fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_MOPAC],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_MOPAC, fileopen.command, fileopen.netWorkProtocol); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); if(!create_cmd_mopac(entrytext0, TRUE, cmdDir, cmdFile, cmdFileAllName)) return; #ifdef G_OS_WIN32 sprintf(Command ,"\"%s\"",cmdFileAllName); #else sprintf(Command ,"%s",cmdFileAllName); #endif run_local_command(fout,ferr,Command,TRUE); title = g_strdup_printf(_("Run Mopac in local : %s"),Command); Win = create_text_result_command(Text,Frame,title); g_free(title); strout = cat_file(fout,FALSE); strerr = cat_file(ferr,FALSE); if(!strout && !strerr) destroy_children(Win); else { if(strout) { gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,strout,-1); g_free(strout); } if(strerr) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,strerr,-1); g_free(strerr); } gtk_widget_show_all(Win); if(!strout) gtk_widget_hide(Frame[0]); } g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_local_gamess(GtkWidget *b,gpointer data) { #ifdef G_OS_WIN32 gchar *fout = g_strdup_printf("\"%s%stmp%sfout\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("\"%s%stmp%sferr\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #else gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #endif GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *strout; gchar *strerr; gchar *temp; gchar *NomFichier; gchar Command[BSIZE]; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; G_CONST_RETURN gchar *localdir; gchar cmdFileAllName[BSIZE]; gchar cmdDir[BSIZE]; gchar cmdFile[BSIZE]; unlink(fout); unlink(ferr); entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotedir = NULL; /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotepass = NULL; fileopen.remotedir = NULL; fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_GAMESS],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_GAMESS, fileopen.command, fileopen.netWorkProtocol); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); if(!create_cmd_gamess(entrytext0, TRUE, cmdDir, cmdFile, cmdFileAllName)) return; #ifdef G_OS_WIN32 sprintf(Command ,"\"%s\"",cmdFileAllName); #else sprintf(Command ,"%s&",cmdFileAllName); #endif run_local_command(fout,ferr,Command,TRUE); title = g_strdup_printf(_("Run gamess in local : %s"),Command); Win = create_text_result_command(Text,Frame,title); g_free(title); strout = cat_file(fout,FALSE); strerr = cat_file(ferr,FALSE); if(!strout && !strerr) destroy_children(Win); else { if(strout) { gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,strout,-1); g_free(strout); } if(strerr) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,strerr,-1); g_free(strerr); } gtk_widget_show_all(Win); if(!strout) gtk_widget_hide(Frame[0]); } g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_local_gaussian(GtkWidget *b,gpointer data) { #ifdef G_OS_WIN32 gchar *fout = g_strdup_printf("\"%s%stmp%sfout\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("\"%s%stmp%sferr\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #else gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #endif GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *strout; gchar *strerr; gchar *temp; gchar *NomFichier; gchar Command[BSIZE]; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; G_CONST_RETURN gchar *localdir; gchar cmdFileAllName[BSIZE]; gchar cmdDir[BSIZE]; gchar cmdFile[BSIZE]; unlink(fout); unlink(ferr); entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotedir = NULL; /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotepass = NULL; fileopen.remotedir = NULL; fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_GAUSSIAN],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_GAUSSIAN, fileopen.command, fileopen.netWorkProtocol); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); if(!create_cmd_gaussian(entrytext0, TRUE, cmdDir, cmdFile, cmdFileAllName)) return; sprintf(Command ,"%s",cmdFileAllName); run_local_command(fout,ferr,Command,TRUE); title = g_strdup_printf(_("Run gaussian in local : %s"),Command); Win = create_text_result_command(Text,Frame,title); g_free(title); strout = cat_file(fout,FALSE); strerr = cat_file(ferr,FALSE); if(!strout && !strerr) destroy_children(Win); else { if(strout) { gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,strout,-1); g_free(strout); } if(strerr) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,strerr,-1); g_free(strerr); } gtk_widget_show_all(Win); if(!strout) gtk_widget_hide(Frame[0]); } g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_local_molcas(GtkWidget *b,gpointer data) { #ifdef G_OS_WIN32 gchar *fout = g_strdup_printf("\"%s%stmp%sfout\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("\"%s%stmp%sferr\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #else gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #endif GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *strout; gchar *strerr; gchar *temp; gchar *NomFichier; gchar *Command; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; G_CONST_RETURN gchar *localdir; gchar cmdFileAllName[BSIZE]; gchar cmdDir[BSIZE]; gchar cmdFile[BSIZE]; unlink(fout); unlink(ferr); entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname); /* fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname);*/ fileopen.moldenfile=g_strdup_printf("'%s.*.molden'", fileopen.projectname); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotedir = NULL; /* save file */ NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotepass = NULL; fileopen.remotedir = NULL; fileopen.command = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryall[1]))); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_MOLCAS],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,GABEDIT_TYPENODE_MOLCAS, fileopen.command, fileopen.netWorkProtocol); /* Save file in local host */ if(!save_local_doc(NomFichier)) return; data_modify(FALSE); entry=entryall[1]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); if(!create_cmd_molcas(entrytext0, TRUE, cmdDir, cmdFile, cmdFileAllName)) return; Command = g_strdup_printf("%s ",cmdFileAllName); create_popup_win(_("\nPlease Wait\n")); run_local_command(fout,ferr,Command,TRUE); title = g_strdup_printf(_("Run molcas in local : %s"),Command); Win = create_text_result_command(Text,Frame,title); g_free(title); strout = cat_file(fout,FALSE); strerr = cat_file(ferr,FALSE); if(!strout && !strerr) destroy_children(Win); else { if(strout) { gabedit_text_insert (GABEDIT_TEXT(Text[0]), NULL, NULL, NULL,strout,-1); g_free(strout); } if(strerr) { gabedit_text_insert (GABEDIT_TEXT(Text[1]), NULL, NULL, NULL,strerr,-1); g_free(strerr); } gtk_widget_show_all(Win); if(!strout) gtk_widget_hide(Frame[0]); } g_free(fout); g_free(ferr); } /********************************************************************************/ static void run_local_molpro(GtkWidget *b,gpointer data) { #ifdef G_OS_WIN32 gchar *fout = g_strdup_printf("\"%s%stmp%sfout\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("\"%s%stmp%sferr\"",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #else gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); #endif GtkWidget* Win; GtkWidget* Text[2]; GtkWidget* Frame[2]; gchar *strout; gchar *strerr; gchar *temp; gchar *t; gchar *NomFichier; gchar Command[BSIZE]; GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext0; gchar *entrytext; gchar* title; gchar *pdest; gchar *Tompon; G_CONST_RETURN gchar *localdir; gchar cmdFileAllName[BSIZE]; gchar cmdDir[BSIZE]; gchar cmdFile[BSIZE]; unlink(fout); unlink(ferr); entryall=(GtkWidget **)data; entry=entryall[0]; entrytext0 = gtk_entry_get_text(GTK_ENTRY(entry)); localdir = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); entrytext = get_dir_file_name(localdir,entrytext0); temp = get_suffix_name_file(entrytext); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotedir = NULL; Tompon=gabedit_text_get_chars(text,0,-1); pdest = strstr( Tompon, fileopen.moldenfile); if( pdest == NULL ) { pdest = strstr( Tompon,"put,molden"); if(pdest) { temp = strstr(pdest,";"); t = strstr(pdest,"\n"); if(temp && t && tactive) { fileopen.netWorkProtocol = GABEDIT_NETWORK_SSH; } else { fileopen.netWorkProtocol = GABEDIT_NETWORK_FTP_RSH; } if(GTK_TOGGLE_BUTTON (ButtonLocal)->active) { if (GTK_TOGGLE_BUTTON (ButtonGamess)->active) run_local_gamess(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonGauss)->active) run_local_gaussian(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonMolcas)->active) run_local_molcas(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonMPQC)->active) run_local_mpqc(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonMolpro)->active) run_local_molpro(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonOrca)->active) run_local_orca(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonDeMon)->active) run_local_demon(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonNWChem)->active) run_local_nwchem(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonPsicode)->active) run_local_psicode(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonFireFly)->active) run_local_firefly(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonQChem)->active) run_local_qchem(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonMopac)->active) run_local_mopac(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonOther)->active) run_local_other(NULL,data); } else { if (GTK_TOGGLE_BUTTON (ButtonGamess)->active) run_remote_gamess(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonGauss)->active) run_remote_gaussian(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonMolcas)->active) run_remote_molcas(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonMPQC)->active) run_remote_mpqc(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonMolpro)->active) run_remote_molpro(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonOrca)->active) run_remote_orca(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonDeMon)->active) run_remote_demon(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonNWChem)->active) run_remote_nwchem(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonPsicode)->active) run_remote_psicode(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonFireFly)->active) run_remote_firefly(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonQChem)->active) run_remote_qchem(NULL,data); else if (GTK_TOGGLE_BUTTON (ButtonMopac)->active) run_remote_mopac(NULL,data); else run_remote_other(NULL,data); } gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0); } /********************************************************************************/ /* static void set_entrys_folder(GtkWidget* selFolder) { GtkWidget *entry = (GtkWidget*)(g_object_get_data(G_OBJECT(selFolder),"EntryDirectory")); gchar *dirname = gabedit_folder_chooser_get_current_folder((GabeditFolderChooser *)selFolder); gchar *longfile = g_strdup_printf("%s%sdump.txt",dirname, G_DIR_SEPARATOR_S); gtk_entry_set_text(GTK_ENTRY(entry),dirname); set_last_directory(longfile); } */ /********************************************************************************/ /* static void set_entry_directory_selection(GtkWidget* table) { GtkWidget *selFolder; GtkWidget *Win = (GtkWidget*)(g_object_get_data(G_OBJECT(table),"Window")); GtkWidget *entrydirectory = (GtkWidget*)(g_object_get_data(G_OBJECT(table),"Entry")); selFolder = gabedit_folder_chooser_new("Folder chooser"); add_child(Win,selFolder,gtk_widget_destroy," Folder selection "); g_signal_connect(G_OBJECT(selFolder),"delete_event",(GCallback)delete_child,NULL); g_object_set_data (G_OBJECT (selFolder), "EntryDirectory", entrydirectory); g_signal_connect (selFolder, "response", G_CALLBACK (set_entrys_folder), G_OBJECT(selFolder)); g_signal_connect (selFolder, "response", G_CALLBACK (delete_child), G_OBJECT(selFolder)); gtk_widget_show(selFolder); } */ /********************************************************************************/ static GtkWidget *create_hbox_browser_run(GtkWidget* Wins,GtkWidget* Table, gchar *LabelRight,gchar *LabelLeft, gchar *deffile,gushort row) { GtkWidget *Entry = NULL; GtkWidget* Label; Label = add_label_table(Table,LabelLeft,row,0); Label = add_label_table(Table,":",row,1); Entry = gtk_entry_new(); if(deffile) gtk_entry_set_text(GTK_ENTRY(Entry),deffile); gtk_table_attach(GTK_TABLE(Table),Entry,2,3,row,row+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); { GtkWidget *Label; GtkWidget *hbox = gtk_hbox_new(0,FALSE); Label = gtk_label_new (LabelRight); gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT); gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 0); add_widget_table(Table,hbox,row,3); LabelExtFile = Label; } g_object_set_data (G_OBJECT (Table), "Entry", Entry); g_object_set_data (G_OBJECT (Table), "Label", Label); g_object_set_data (G_OBJECT (Table), "Window", Wins); return Entry; } /********************************************************************************/ GtkWidget* create_server_frame(GtkWidget* hbox) { GtkWidget *frame; GtkWidget *Table; GtkWidget *vboxframe; frame = gtk_frame_new ("Server"); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_box_pack_start (GTK_BOX( hbox), frame, TRUE, TRUE, 5); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(2,1,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); ButtonLocal = gtk_radio_button_new_with_label( NULL,"Local" ); add_widget_table(Table,ButtonLocal,0,0); ButtonRemote = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonLocal)), "Remote host "); add_widget_table(Table,ButtonRemote,1,0); return frame; } /********************************************************************************/ GtkWidget* create_programs_frame(GtkWidget *hbox) { GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *Table; frame = gtk_frame_new ("Program"); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_box_pack_start (GTK_BOX( hbox), frame, TRUE, TRUE, 5); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(4,4,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); ButtonDeMon = gtk_radio_button_new_with_label( NULL,"DeMon" ); add_widget_table(Table,ButtonDeMon,0,0); ButtonGamess = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonDeMon)), "Gamess "); add_widget_table(Table,ButtonGamess,0,1); ButtonGauss = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonGamess)), "Gaussian "); add_widget_table(Table,ButtonGauss,0,2); ButtonMolcas = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonGauss)), "Molcas "); add_widget_table(Table,ButtonMolcas,0,3); ButtonMolpro = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonGauss)), "Molpro "); add_widget_table(Table,ButtonMolpro,1,0); ButtonMopac = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonGauss)), "Mopac "); add_widget_table(Table,ButtonMopac,1,1); ButtonMPQC = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonGauss)), "MPQC "); add_widget_table(Table,ButtonMPQC,1,2); ButtonOrca = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonGauss)), "Orca "); add_widget_table(Table,ButtonOrca,1,3); ButtonNWChem = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonGauss)), "NWChem "); add_widget_table(Table,ButtonNWChem,2,0); ButtonFireFly = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonGauss)), "FireFly "); add_widget_table(Table,ButtonFireFly,2,1); ButtonQChem = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonGauss)), "Q-Chem "); add_widget_table(Table,ButtonQChem,2,2); ButtonPsicode = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonGauss)), "Psicode "); add_widget_table(Table,ButtonPsicode,2,3); ButtonOther = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonGauss)), "Other "); add_widget_table(Table,ButtonOther,3,0); return frame; } /********************************************************************************/ static GtkWidget *create_local_frame( GtkWidget *vboxall) { GtkWidget *frame; GtkWidget *vboxframe; gushort i; gushort j; GtkWidget *table; GtkWidget *label; gchar* title = "Local"; frame = gtk_frame_new (title); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(1,3,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),table); /*----------------------------------------------------------------------------------*/ i = 0; j = 0; label = gtk_label_new("Folder"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 2; buttonDirSelector = gabedit_dir_button(); gtk_table_attach(GTK_TABLE(table),buttonDirSelector, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); if(fileopen.localdir && strcmp(fileopen.localdir,"NoName")!=0) gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(buttonDirSelector), fileopen.localdir); gtk_widget_show_all(frame); g_object_set_data (G_OBJECT (frame), "ButtonDirSelector",buttonDirSelector); return frame; } /********************************************************************************/ GtkWidget *create_local_remote_frame(GtkWidget *Window, GtkWidget *vboxall,GtkWidget **entry,gchar* type) { GtkWidget* frame; GtkWidget* vboxframe; GtkWidget* Table; GtkWidget* Label; GtkWidget* combo; #define NLAB 2 gchar *LabelRight[NLAB]; gchar *LabelLeft[NLAB]; gchar *liste[NLAB]; gint i; GtkWidget *hbox = gtk_hbox_new(0,FALSE); LabelLeft[0] = g_strdup("Save data in file"); LabelLeft[1] = g_strdup("Command to execute"); LabelRight[0] = g_strdup(".com"); LabelRight[1] = g_strdup(" DataFile.com "); liste[0] = g_strdup(fileopen.projectname); if(strstr(type,"Molpro")) liste[1] = g_strdup(NameCommandMolpro); else if(strstr(type,"Molcas")) liste[1] = g_strdup(NameCommandMolcas); else liste[1] = g_strdup(NameCommandGaussian); frame = gtk_frame_new ("Local/Remote"); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(2,5,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); entry[0] = create_hbox_browser_run(Window,Table, LabelRight[0],LabelLeft[0], liste[0],0); add_label_table(Table,LabelLeft[1],1,0); add_label_table(Table,":",1,1); if(strstr(type,"Molpro")) combo = create_combo_box_entry(molproCommands.commands,molproCommands.numberOfCommands,TRUE,-1,-1); else if(strstr(type,"Molcas")) combo = create_combo_box_entry(molcasCommands.commands,molcasCommands.numberOfCommands,TRUE,-1,-1); else combo = create_combo_box_entry(gaussianCommands.commands,gaussianCommands.numberOfCommands,TRUE,-1,-1); ComboCommand = combo; entry[1] = GTK_BIN(combo)->child; gtk_entry_set_text (GTK_ENTRY (entry[1]), liste[1]); if(fileopen.command && strlen(fileopen.command)>0) gtk_entry_set_text (GTK_ENTRY (entry[1]), fileopen.command); add_widget_table(Table,combo,1,2); Label = gtk_label_new(LabelRight[1]); LabelDataFile = Label; gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT); gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 0); gtk_table_attach(GTK_TABLE(Table),hbox,3,5,1,1+1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); for (i=0;iactive) sprintf(buffer,"%s.inp",entrytext); else if (ButtonFireFly && GTK_TOGGLE_BUTTON (ButtonFireFly)->active) sprintf(buffer,"%s.inp",entrytext); else if (ButtonQChem && GTK_TOGGLE_BUTTON (ButtonQChem)->active) sprintf(buffer,"%s.inp",entrytext); else if (ButtonOrca && GTK_TOGGLE_BUTTON (ButtonOrca)->active) sprintf(buffer,"%s.inp",entrytext); else if (ButtonNWChem && GTK_TOGGLE_BUTTON (ButtonNWChem)->active) sprintf(buffer,"%s.nw",entrytext); else if (ButtonPsicode && GTK_TOGGLE_BUTTON (ButtonPsicode)->active) sprintf(buffer,"%s.psi",entrytext); else if (ButtonMopac && GTK_TOGGLE_BUTTON (ButtonMopac)->active) sprintf(buffer,"%s.mop",entrytext); else sprintf(buffer,"%s.com",entrytext); gtk_label_set_text(GTK_LABEL(LabelDataFile), buffer); } } /********************************************************************************/ void changed_user(GtkWidget *combo,gpointer data) { GtkWidget **entry = (GtkWidget **)data; gint nlistdir = 1; G_CONST_RETURN gchar *hostname; G_CONST_RETURN gchar *username; gint numhost = -1; gint numuser = -1; GtkWidget* combodir = NULL; gint i; gint j; GList *glist = NULL; if(!entry[1]) return; if(!entry[2]) return; if(!entry[3]) return; if(!entry[5]) return; if (!GTK_IS_WIDGET((GtkWidget*)entry[1])) return; if (!GTK_IS_WIDGET((GtkWidget*)entry[2])) return; if (!GTK_IS_WIDGET((GtkWidget*)entry[3])) return; if (!GTK_IS_WIDGET((GtkWidget*)entry[5])) return; if ((GTK_OBJECT_FLAGS((GtkObject*)entry[1]) & GTK_IN_DESTRUCTION)) return; if ((GTK_OBJECT_FLAGS((GtkObject*)entry[2]) & GTK_IN_DESTRUCTION)) return; if ((GTK_OBJECT_FLAGS((GtkObject*)entry[3]) & GTK_IN_DESTRUCTION)) return; if ((GTK_OBJECT_FLAGS((GtkObject*)entry[5]) & GTK_IN_DESTRUCTION)) return; hostname = gtk_entry_get_text(GTK_ENTRY(entry[2])); username = gtk_entry_get_text(GTK_ENTRY(entry[3])); combodir = g_object_get_data (G_OBJECT (entry[5]), "Combo"); if(!combodir) return; if(recenthosts.nhosts>0) { for(i=0;i=0;i--) glist = g_list_append(glist,recenthosts.hosts[numhost].users[numuser].dirs[i]); } else return; if (!(GTK_OBJECT_FLAGS((GtkObject*)combodir) & GTK_IN_DESTRUCTION)) gtk_combo_box_entry_set_popdown_strings( combodir, glist) ; g_list_free(glist); } /********************************************************************************/ void changed_host(GtkWidget *combo,gpointer data) { GtkWidget **entry = (GtkWidget **)data; gint nlistuser = 1; G_CONST_RETURN gchar *hostname; gint numhost = -1; GtkWidget* combouser = NULL; gint i; GList *glist = NULL; if(!entry[1]) return; if(!entry[2]) return; if(!entry[3]) return; if(!entry[5]) return; if (!GTK_IS_WIDGET((GtkWidget*)entry[1])) return; if (!GTK_IS_WIDGET((GtkWidget*)entry[2])) return; if (!GTK_IS_WIDGET((GtkWidget*)entry[3])) return; if (!GTK_IS_WIDGET((GtkWidget*)entry[5])) return; if ((GTK_OBJECT_FLAGS((GtkObject*)entry[1]) & GTK_IN_DESTRUCTION)) return; if ((GTK_OBJECT_FLAGS((GtkObject*)entry[2]) & GTK_IN_DESTRUCTION)) return; if ((GTK_OBJECT_FLAGS((GtkObject*)entry[3]) & GTK_IN_DESTRUCTION)) return; if ((GTK_OBJECT_FLAGS((GtkObject*)entry[5]) & GTK_IN_DESTRUCTION)) return; hostname = gtk_entry_get_text(GTK_ENTRY(entry[2])); combouser = g_object_get_data (G_OBJECT (entry[3]), "Combo"); if(!combouser) return; if(recenthosts.nhosts>0) { for(i=0;i0) { nlisthost = recenthosts.nhosts; for(i=0;ichild; g_object_set_data (G_OBJECT (entry[i]), "Combo",combo); g_signal_connect(G_OBJECT(GTK_COMBO_BOX(combo)), "changed",G_CALLBACK(changed_host),entry); i = 3; add_label_table(Table,LabelLeft[i-2],(gushort)(i-2),0); add_label_table(Table,":",(gushort)(i-2),1); combo = create_combo_box_entry(tlistuser,nlistuser,TRUE,-1,-1); add_widget_table(Table,combo,(gushort)(i-2),2); entry[i] = GTK_BIN(combo)->child; g_object_set_data (G_OBJECT (entry[i]), "Combo",combo); g_signal_connect(G_OBJECT(GTK_COMBO_BOX(combo)), "changed",G_CALLBACK(changed_user),entry); i = 4; { LabelPassWord1 = add_label_table(Table,LabelLeft[i-2],(gushort)(i-2),0); LabelPassWord2 = add_label_table(Table,":",(gushort)(i-2),1); entry[i] = gtk_entry_new (); gtk_entry_set_visibility(GTK_ENTRY (entry[i]),FALSE); add_widget_table(Table,entry[i],(gushort)(i-2),2); EntryPassWord = entry[i]; } i = 5; add_label_table(Table,LabelLeft[i-2],(gushort)(i-2),0); add_label_table(Table,":",(gushort)(i-2),1); combo = create_combo_box_entry(tlistdir,nlistdir,TRUE,-1,-1); add_widget_table(Table,combo,(gushort)(i-2),2); entry[i] = GTK_BIN(combo)->child; g_object_set_data (G_OBJECT (entry[i]), "Combo",combo); gtk_widget_show_all(frame); if(fileopen.remotehost) gtk_entry_set_text(GTK_ENTRY(entry[2]),fileopen.remotehost); if(fileopen.remoteuser) gtk_entry_set_text(GTK_ENTRY(entry[3]),fileopen.remoteuser); if(fileopen.remotepass) gtk_entry_set_text(GTK_ENTRY(entry[4]),fileopen.remotepass); if(fileopen.remotedir && !this_is_a_backspace(fileopen.remotedir)) gtk_entry_set_text(GTK_ENTRY(entry[5]),fileopen.remotedir); else gtk_entry_set_text(GTK_ENTRY(entry[5]),"tmp"); for (i=0;ichild1_size = 1; gtk_widget_show (GTK_WIDGET(Hpaned)); } else { GTK_PANED(Hpaned)->child1_size = (gint)(ScreenHeight*0.15); gtk_widget_set_size_request(GTK_WIDGET(FrameList),(gint)(ScreenHeight*0.15),-1); gtk_widget_hide (GTK_WIDGET(Hpaned)); gtk_widget_show (GTK_WIDGET(FrameList)); gtk_widget_show (GTK_WIDGET(Hpaned)); } ViewList = !ViewList; } /*********************************************************************************************************************/ static void view_toolbar () { if(!handleBoxToolBar) return; if(ViewToolBar) gtk_widget_hide (GTK_WIDGET(handleBoxToolBar)); else gtk_widget_show (GTK_WIDGET(handleBoxToolBar)); ViewToolBar = !ViewToolBar; } /********************************************************************************/ static void cut_text() { if(gtk_notebook_get_current_page(GTK_NOTEBOOK(NoteBookText))==0) gabedit_text_cut_clipboard(text); else gabedit_text_cut_clipboard(textresult); } /********************************************************************************/ static void copy_text() { if(gtk_notebook_get_current_page(GTK_NOTEBOOK(NoteBookText))==0) gabedit_text_copy_clipboard(text); else gabedit_text_copy_clipboard(textresult); } /********************************************************************************/ static void paste_text() { if(gtk_notebook_get_current_page(GTK_NOTEBOOK(NoteBookText))==0) gabedit_text_paste_clipboard(text); else gabedit_text_paste_clipboard(textresult); } /*********************************************************************************************************************/ static void activate_action (GtkAction *action) { const gchar *name = gtk_action_get_name (action); /* const gchar *typename = G_OBJECT_TYPE_NAME (action);*/ if(!strcmp(name,"GamessInput")) new_gamess(NULL, NULL); else if(!strcmp(name,"DeMonInput")) new_demon(NULL, NULL); else if(!strcmp(name,"GaussianInput")) new_gauss(NULL, NULL); else if(!strcmp(name,"MolcasInput")) new_molcas(NULL, NULL); else if(!strcmp(name,"MolproInput")) new_molpro(NULL, NULL); else if(!strcmp(name,"MopacInput")) new_mopac(NULL, NULL); else if(!strcmp(name,"MPQCInput")) new_mpqc(NULL, NULL); else if(!strcmp(name,"NWChemInput")) new_nwchem(NULL, NULL); else if(!strcmp(name,"PsicodeInput")) new_psicode(NULL, NULL); else if(!strcmp(name,"OrcaInput")) new_orca(NULL, NULL); else if(!strcmp(name,"FireFlyInput")) new_firefly(NULL, NULL); else if(!strcmp(name,"QChemInput")) new_qchem(NULL, NULL); else if(!strcmp(name,"OtherInput")) new_other(NULL, NULL); else if(!strcmp(name,"Open")) open_file(NULL, NULL); else if(!strcmp(name,"Include")) inserrer_doc(); else if(!strcmp(name,"SaveAs")) save_as_doc(); else if(!strcmp(name,"Save")) save_doc(); else if(!strcmp(name,"Print")) create_print_page(); else if(!strcmp(name,"Exit")) { if(imodif == DATA_MOD_NO ) exit_all(NULL,NULL); else Save_YesNo(); } else if(!strcmp(name,"Cut")) cut_text(); else if(!strcmp(name,"Copy")) copy_text(); else if(!strcmp(name,"Paste")) paste_text(); else if(!strcmp(name,"Find")) find_text_win(); else if(!strcmp(name,"SelectAll")) select_all(); else if(!strcmp(name,"InsertGaussianGeometry")) { iprogram = PROG_IS_GAUSS; insert_gaussian(2); } else if(!strcmp(name,"InsertGaussianMultiStep")) { iprogram = PROG_IS_GAUSS; insert_doc_gauss();} else if(!strcmp(name,"InsertMolcasAddToFile")) { iprogram = PROG_IS_MOLCAS; insertMolcas();} else if(!strcmp(name,"InsertMolproGeneral")) {iprogram = PROG_IS_MOLPRO; insert_molpro(1); } else if(!strcmp(name,"InsertMolproGeometry")) {iprogram = PROG_IS_MOLPRO; insert_molpro(2); } else if(!strcmp(name,"InsertMolproBasis")) { iprogram = PROG_IS_MOLPRO; insert_molpro(3);} else if(!strcmp(name,"InsertMolproCommands")) { iprogram = PROG_IS_MOLPRO; insert_molpro(4);} else if(!strcmp(name,"GeometryMolpro")) {iprogram = PROG_IS_MOLPRO; insert_molpro(2); } else if(!strcmp(name,"GeometryGaussian")) {iprogram = PROG_IS_GAUSS; insert_gaussian(2); } else if(!strcmp(name,"GeometryEdit")) {edit_geometry();} else if(!strcmp(name,"GeometryDraw")) { if(GeomDrawingArea==NULL) create_window_drawing(); else rafresh_drawing(); } else if(!strcmp(name,"DisplayDensity")) { draw_density_orbitals_gamess_or_gauss_or_molcas_or_molpro(NULL,NULL); } else if(!strcmp(name,"ToolsUnitConversion")) {create_conversion_dlg();} else if(!strcmp(name,"ToolsProcessLocalAll")) {run_process_all(FALSE);} else if(!strcmp(name,"ToolsProcessLocalUser")) {run_process_user(FALSE,NULL,NULL,NULL);} else if(!strcmp(name,"ToolsProcessRemoteAll")) {create_process_remote(TRUE);} else if(!strcmp(name,"ToolsProcessRemoteUser")) {create_process_remote(FALSE);} else if(!strcmp(name,"ToolsBatchLocalAll")) {run_batch_all(FALSE);} else if(!strcmp(name,"ToolsBatchLocalUser")) {run_batch_user(FALSE,NULL,NULL,NULL);} else if(!strcmp(name,"ToolsBatchRemoteAll")) {create_batch_remote(TRUE);} else if(!strcmp(name,"ToolsBatchRemoteUser")) {create_batch_remote(FALSE);} else if(!strcmp(name,"ToolsOpenBabel")) {create_babel_dialogue();} else if(!strcmp(name,"ToolsXYPlot")) { gabedit_xyplot_new_window(NULL,Fenetre);} else if(!strcmp(name,"ToolsContoursPlot")) { gabedit_contoursplot_new_window(NULL,Fenetre);} else if(!strcmp(name,"ToolsIRSpectrumGabedit")) { createIRSpectrum(Fenetre,GABEDIT_TYPEFILE_GABEDIT);} else if(!strcmp(name,"ToolsIRSpectrumDalton")) { createIRSpectrum(Fenetre,GABEDIT_TYPEFILE_DALTON);} else if(!strcmp(name,"ToolsIRSpectrumGamess")) { createIRSpectrum(Fenetre,GABEDIT_TYPEFILE_GAMESS);} else if(!strcmp(name,"ToolsIRSpectrumGamessAnharmonic")) { createIRSpectrum(Fenetre,GABEDIT_TYPEFILE_GAMESS_ANHARMONIC);} else if(!strcmp(name,"ToolsIRSpectrumNWChem")) { createIRSpectrum(Fenetre,GABEDIT_TYPEFILE_NWCHEM);} else if(!strcmp(name,"ToolsIRSpectrumPsicode")) { createIRSpectrum(Fenetre,GABEDIT_TYPEFILE_PSICODE);} else if(!strcmp(name,"ToolsIRSpectrumOrca")) { createIRSpectrum(Fenetre,GABEDIT_TYPEFILE_ORCA);} else if(!strcmp(name,"ToolsIRSpectrumFireFly")) { createIRSpectrum(Fenetre,GABEDIT_TYPEFILE_FIREFLY);} else if(!strcmp(name,"ToolsIRSpectrumGaussian")) { createIRSpectrum(Fenetre,GABEDIT_TYPEFILE_GAUSSIAN);} else if(!strcmp(name,"ToolsIRSpectrumGaussianAnharmonic")) { createIRSpectrum(Fenetre,GABEDIT_TYPEFILE_GAUSSIAN_ANHARMONIC);} else if(!strcmp(name,"ToolsIRSpectrumMolpro")) { createIRSpectrum(Fenetre,GABEDIT_TYPEFILE_MOLPRO);} else if(!strcmp(name,"ToolsIRSpectrumQChem")) { createIRSpectrum(Fenetre,GABEDIT_TYPEFILE_QCHEM);} else if(!strcmp(name,"ToolsIRSpectrumAdf")) { createIRSpectrum(Fenetre,GABEDIT_TYPEFILE_ADF);} else if(!strcmp(name,"ToolsIRSpectrumMolden")) { createIRSpectrum(Fenetre,GABEDIT_TYPEFILE_MOLDEN);} else if(!strcmp(name,"ToolsIRSpectrumiGVPT2")) { createIRSpectrum(Fenetre,GABEDIT_TYPEFILE_IGVPT2);} else if(!strcmp(name,"ToolsIRSpectrumTxt")) { createIRSpectrum(Fenetre,GABEDIT_TYPEFILE_TXT);} else if(!strcmp(name,"ToolsRamanSpectrumGabedit")) { createRamanSpectrum(Fenetre,GABEDIT_TYPEFILE_GABEDIT);} else if(!strcmp(name,"ToolsRamanSpectrumGamess")) { createRamanSpectrum(Fenetre,GABEDIT_TYPEFILE_GAMESS);} else if(!strcmp(name,"ToolsRamanSpectrumGaussian")) { createRamanSpectrum(Fenetre,GABEDIT_TYPEFILE_GAUSSIAN);} else if(!strcmp(name,"ToolsRamanSpectrumNWChem")) { createRamanSpectrum(Fenetre,GABEDIT_TYPEFILE_NWCHEM);} else if(!strcmp(name,"ToolsRamanSpectrumPsicode")) { createRamanSpectrum(Fenetre,GABEDIT_TYPEFILE_PSICODE);} else if(!strcmp(name,"ToolsRamanSpectrumQChem")) { createRamanSpectrum(Fenetre,GABEDIT_TYPEFILE_QCHEM);} else if(!strcmp(name,"ToolsRamanSpectrumOrca")) { createRamanSpectrum(Fenetre,GABEDIT_TYPEFILE_ORCA);} else if(!strcmp(name,"ToolsRamanSpectrumFireFly")) { createRamanSpectrum(Fenetre,GABEDIT_TYPEFILE_GAMESS);} else if(!strcmp(name,"ToolsRamanSpectrumMolden")) { createRamanSpectrum(Fenetre,GABEDIT_TYPEFILE_MOLDEN);} else if(!strcmp(name,"ToolsRamanSpectrumTxt")) { createRamanSpectrum(Fenetre,GABEDIT_TYPEFILE_TXT);} else if(!strcmp(name,"ToolsUVSpectrumGabedit")) { createUVSpectrum(Fenetre,GABEDIT_TYPEFILE_GABEDIT);} else if(!strcmp(name,"ToolsUVSpectrumGamess")) { createUVSpectrum(Fenetre,GABEDIT_TYPEFILE_GAMESS);} else if(!strcmp(name,"ToolsUVSpectrumGaussian")) { createUVSpectrum(Fenetre,GABEDIT_TYPEFILE_GAUSSIAN);} else if(!strcmp(name,"ToolsUVSpectrumFireFly")) { createUVSpectrum(Fenetre,GABEDIT_TYPEFILE_FIREFLY);} else if(!strcmp(name,"ToolsUVSpectrumNWChem")) { createUVSpectrum(Fenetre,GABEDIT_TYPEFILE_NWCHEM);} else if(!strcmp(name,"ToolsUVSpectrumPsicode")) { createUVSpectrum(Fenetre,GABEDIT_TYPEFILE_PSICODE);} else if(!strcmp(name,"ToolsUVSpectrumOrca")) { createUVSpectrum(Fenetre,GABEDIT_TYPEFILE_ORCA);} else if(!strcmp(name,"ToolsUVSpectrumQChem")) { createUVSpectrum(Fenetre,GABEDIT_TYPEFILE_QCHEM);} else if(!strcmp(name,"ToolsUVSpectrumTxt")) { createUVSpectrum(Fenetre,GABEDIT_TYPEFILE_TXT);} else if(!strcmp(name,"ToolsECDSpectrumGabedit")) { createECDSpectrum(Fenetre,GABEDIT_TYPEFILE_GABEDIT);} else if(!strcmp(name,"ToolsECDSpectrumGaussian")) { createECDSpectrum(Fenetre,GABEDIT_TYPEFILE_GAUSSIAN);} else if(!strcmp(name,"ToolsECDSpectrumNWChem")) { createECDSpectrum(Fenetre,GABEDIT_TYPEFILE_NWCHEM);} else if(!strcmp(name,"ToolsECDSpectrumPsicode")) { createECDSpectrum(Fenetre,GABEDIT_TYPEFILE_PSICODE);} else if(!strcmp(name,"ToolsECDSpectrumOrca")) { createECDSpectrum(Fenetre,GABEDIT_TYPEFILE_ORCA);} else if(!strcmp(name,"ToolsECDSpectrumTxt")) { createECDSpectrum(Fenetre,GABEDIT_TYPEFILE_TXT);} else if(!strcmp(name,"ToolsNMRSpectrumTxt")) { createNMRSpectrum(Fenetre,GABEDIT_TYPEFILE_TXT);} else if(!strcmp(name,"ToolsNMR2SpectrumTxt")) { createNMR2Spectrum(Fenetre,GABEDIT_TYPEFILE_TXT);} else if(!strcmp(name,"ToolsVASPOptic")) { read_vasp_xml_file_dlg();} else if(!strcmp(name,"ToolsVASPBands")) { read_bands_vasp_xml_file_dlg();} else if(!strcmp(name,"ToolsVASPDOS")) { read_dos_vasp_xml_file_dlg();} else if(!strcmp(name,"ToolsiGVPT2Read")) { createIRSpectrum(Fenetre,GABEDIT_TYPEFILE_IGVPT2);} else if(!strcmp(name,"ToolsiGVPT2Save")) { create_igvpt2_file_dlg(FALSE);} else if(!strcmp(name,"ToolsiGVPT2Run")) { create_igvpt2_file_dlg(TRUE);} else if(!strcmp(name,"ToolsVibCorrectionsGaussian")) {read_vibcorrection_gaussian_file_dlg(); } else if(!strcmp(name,"ToolsVib2MRQFF")) {read_2mrqff_file_dlg(); } else if(!strcmp(name,"ToolsAutoCorrelationGaussian")) {read_admp_build_dipole_dipole_autocorrelation_dlg(); } else if(!strcmp(name,"ToolsAutoCorrelationDipole")) {read_dipole_build_dipole_dipole_autocorrelation_dlg(); } else if(!strcmp(name,"ToolsIsotopeDistribution")) { compute_distribution_dlg(Fenetre, NULL); } else if(!strcmp(name,"RunAbinitio")) {create_run();} else if(!strcmp(name,"RunViewResult")) {view_result();} else if(!strcmp(name,"SettingsMolecularMechanicsParameters")) {setMMParamatersDlg();} else if(!strcmp(name,"SettingsPDBTemplate")) {setPDBTemplateDlg();} else if(!strcmp(name,"SettingsBasisMolcas")) {setMolcasBasisDlg();} else if(!strcmp(name,"SettingsBasisMolpro")) {setMolproBasisDlg();} else if(!strcmp(name,"SettingsBasisMPQC")) {setMPQCBasisDlg();} else if(!strcmp(name,"SettingsPreferences")) {create_preferences();} else if(!strcmp(name,"HelpAbout")) {show_about();} else if(!strcmp(name,"HelpVersion")) {show_version();} } /*********************************************************************************************************************/ static GtkActionEntry gtkActionEntries[] = { {"File", NULL, N_("_File")}, {"FileNew", GTK_STOCK_NEW, N_("_New")}, {"DeMonInput", GABEDIT_STOCK_DEMON, N_("_DeMon input"), NULL, "New DeMon input file", G_CALLBACK (activate_action) }, {"GamessInput", GABEDIT_STOCK_GAMESS, N_("_Gamess input"), NULL, "New Gamess input file", G_CALLBACK (activate_action) }, {"GaussianInput", GABEDIT_STOCK_GAUSSIAN, N_("_Gaussian input"), NULL, "New Gaussian input file", G_CALLBACK (activate_action) }, {"MolcasInput", GABEDIT_STOCK_MOLCAS, N_("Mol_cas input"), NULL, "New Molcas input file", G_CALLBACK (activate_action) }, {"MolproInput", GABEDIT_STOCK_MOLPRO, N_("Mol_pro input"), NULL, "New Molpro input file", G_CALLBACK (activate_action) }, {"MopacInput", GABEDIT_STOCK_MOPAC, N_("_Mopac input"), NULL, "New Mopac input file", G_CALLBACK (activate_action) }, {"MPQCInput", GABEDIT_STOCK_MPQC, N_("MP_QC input"), NULL, "New MPQC input file", G_CALLBACK (activate_action) }, {"NWChemInput", GABEDIT_STOCK_NWCHEM, N_("_NWChem input"), NULL, "New NWChem input file", G_CALLBACK (activate_action) }, {"PsicodeInput", GABEDIT_STOCK_PSICODE, N_("_Psicode input"), NULL, "New psicode input file", G_CALLBACK (activate_action) }, {"OrcaInput", GABEDIT_STOCK_ORCA, N_("_Orca input"), NULL, "New Orca input file", G_CALLBACK (activate_action) }, {"FireFlyInput", GABEDIT_STOCK_FIREFLY, N_("_FireFly input"), NULL, "New FireFly input file", G_CALLBACK (activate_action) }, {"QChemInput", GABEDIT_STOCK_QCHEM, N_("Q-_Chem input"), NULL, "New Q-Chem input file", G_CALLBACK (activate_action) }, {"OtherInput", NULL, N_("_Other"), NULL, "Other", G_CALLBACK (activate_action) }, {"Open", GTK_STOCK_OPEN, N_("_Open"), "O", "open a file", G_CALLBACK (activate_action) }, {"Save", GTK_STOCK_SAVE, N_("_Save"), "S", "Save", G_CALLBACK (activate_action) }, {"SaveAs", GTK_STOCK_SAVE_AS, N_("Save _as"), "s", "Save as", G_CALLBACK (activate_action) }, {"Include", GABEDIT_STOCK_INSERT, N_("_Include"), "I", "Include a file", G_CALLBACK (activate_action) }, {"Print", GTK_STOCK_PRINT, N_("_Print"), "P", "Print", G_CALLBACK (activate_action) }, {"Exit", GTK_STOCK_QUIT, N_("E_xit"), "Q", "Exit", G_CALLBACK (activate_action) }, {"Edit", NULL, "_Edit"}, {"Cut", GTK_STOCK_CUT, N_("C_ut"), "X", "Cut the selected text to the clipboard", G_CALLBACK (activate_action) }, {"Copy", GTK_STOCK_COPY, N_("_Copy"), "C", "Copy the selected text to the clipboard", G_CALLBACK (activate_action) }, {"Paste", GTK_STOCK_PASTE, N_("_Paste"), "V", "Paste the text from the clipboard", G_CALLBACK (activate_action) }, {"Find", GTK_STOCK_FIND, N_("_Find"), "F", "Find a string", G_CALLBACK (activate_action) }, {"SelectAll", GABEDIT_STOCK_SELECT_ALL, N_("Select _all"), "A", "Select All", G_CALLBACK (activate_action) }, {"Insert", NULL, N_("_Insert")}, {"InsertGaussian", GABEDIT_STOCK_GAUSSIAN, N_("_Gaussian")}, {"InsertMolcas", GABEDIT_STOCK_MOLCAS, N_("Mol_cas")}, {"InsertMolpro", GABEDIT_STOCK_MOLPRO, N_("Mol_pro")}, {"InsertGaussianMultiStep", NULL, N_("_Add Input File(Multi-Step Job)"), NULL, "Add Input File(Multi-Step Job)", G_CALLBACK (activate_action) }, {"InsertGaussianGeometry", NULL, N_("G_eometry"), NULL, "Insert Gaussian geometry", G_CALLBACK (activate_action) }, {"InsertMolproGeneral", NULL, N_("_General"), NULL, "Insert Molpro general", G_CALLBACK (activate_action) }, {"InsertMolproGeometry", NULL, N_("G_eometry"), NULL, "Insert Molpro geometry", G_CALLBACK (activate_action) }, {"InsertMolproBasis", NULL, N_("_Basis"), NULL, "Insert Molpro basis", G_CALLBACK (activate_action) }, {"InsertMolproCommands", NULL, N_("_Commands"), NULL, "Insert Molpro commands", G_CALLBACK (activate_action) }, {"InsertMolcasAddToFile", NULL, N_("_Add to file"), NULL, "Insert Molcas add to file", G_CALLBACK (activate_action) }, {"View", NULL, N_("_View")}, {"Geometry", NULL, N_("_Geometry")}, {"GeometryMolpro", GABEDIT_STOCK_MOLPRO, N_("Mol_pro"), NULL, "Edit Molpro geometry", G_CALLBACK (activate_action) }, {"GeometryGaussian", GABEDIT_STOCK_GAUSSIAN, N_("_Gaussian"), NULL, "Edit Gaussian geometry", G_CALLBACK (activate_action) }, {"GeometryEdit", NULL, N_("_Edit"), NULL, "Edit geometry", G_CALLBACK (activate_action) }, {"GeometryDraw", GABEDIT_STOCK_GEOMETRY, N_("_Draw"), NULL, "Draw geometry", G_CALLBACK (activate_action) }, {"DisplayDensity", GABEDIT_STOCK_ORBITALS, N_("_Display"), NULL, "Display Geometry/Orbitals/Density/Vibration", G_CALLBACK (activate_action) }, {"Tools", NULL, N_("_Tools")}, {"ToolsProcess", NULL, N_("_Process")}, {"ToolsProcessLocal", NULL, N_("_Local")}, {"ToolsUnitConversion", GABEDIT_STOCK_CONVERT_UNIT, N_("Unit _conversion utility"), NULL, "Unit conversion utility", G_CALLBACK (activate_action) }, {"ToolsProcessLocalAll", NULL, N_("_All local process"), NULL, "All local process", G_CALLBACK (activate_action) }, {"ToolsProcessLocalUser", NULL, N_("_User local process"), NULL, "User local process", G_CALLBACK (activate_action) }, {"ToolsProcessRemote", NULL, N_("_Remote")}, {"ToolsProcessRemoteAll", NULL, N_("_All remote process"), NULL, "All remote process", G_CALLBACK (activate_action) }, {"ToolsProcessRemoteUser", NULL, N_("_User remote process"), NULL, "User remote process", G_CALLBACK (activate_action) }, {"ToolsBatch", NULL, N_("_Batch")}, {"ToolsBatchLocal", NULL, N_("_Local")}, {"ToolsBatchLocalAll", NULL, N_("_All local batch jobs"), NULL, "All local batch jobs", G_CALLBACK (activate_action) }, {"ToolsBatchLocalUser", NULL, N_("_User local batch jobs"), NULL, "User local batch jobs", G_CALLBACK (activate_action) }, {"ToolsBatchRemote", NULL, N_("_Remote")}, {"ToolsBatchRemoteAll", NULL, N_("_All remote batch jobs"), NULL, "All remote batch jobs", G_CALLBACK (activate_action) }, {"ToolsBatchRemoteUser", NULL, N_("_User remote batch jobs"), NULL, "User remote batch jobs", G_CALLBACK (activate_action) }, {"ToolsOpenBabel", GABEDIT_STOCK_OPEN_BABEL, N_("Open B_abel"), NULL, "Open babel", G_CALLBACK (activate_action) }, {"ToolsContoursPlot", GABEDIT_STOCK_GABEDIT, N_("Contours plotter"), NULL, "ContoursPlotter", G_CALLBACK (activate_action) }, {"ToolsXYPlot", GABEDIT_STOCK_GABEDIT, N_("XY plotter"), NULL, "XYPlotter", G_CALLBACK (activate_action) }, {"ToolsIRSpectrum", NULL, "_IR spectrum"}, {"ToolsIRSpectrumGabedit", GABEDIT_STOCK_GABEDIT, N_("Read frequencies and intensities from a _Gabedit file"), NULL, "Gabedit", G_CALLBACK (activate_action) }, {"ToolsIRSpectrumDalton", GABEDIT_STOCK_DALTON, N_("Read frequencies and intensities from a _Dalton output file"), NULL, "Dalton", G_CALLBACK (activate_action) }, {"ToolsIRSpectrumGamess", GABEDIT_STOCK_GAMESS, N_("Read frequencies and intensities from a _Gamess output file"), NULL, "Gamess", G_CALLBACK (activate_action) }, {"ToolsIRSpectrumGamessAnharmonic", GABEDIT_STOCK_GAMESS, N_("Read Anharmonic IR spectrum from a _Gamess output file"), NULL, "Gamess", G_CALLBACK (activate_action) }, {"ToolsIRSpectrumGaussian", GABEDIT_STOCK_GAUSSIAN, N_("Read frequencies and intensities from a _Gaussian output file"), NULL, "Gaussian", G_CALLBACK (activate_action) }, {"ToolsIRSpectrumGaussianAnharmonic", GABEDIT_STOCK_GAUSSIAN, N_("Read Anharmonic IR spectrum from a _Gaussian output file"), NULL, "Gaussian", G_CALLBACK (activate_action) }, {"ToolsIRSpectrumMolpro", GABEDIT_STOCK_MOLPRO, N_("Read frequencies and intensities from a _Molpro output file"), NULL, "Molpro", G_CALLBACK (activate_action) }, {"ToolsIRSpectrumNWChem", GABEDIT_STOCK_NWCHEM, N_("Read frequencies and intensities from a _NWChem output file"), NULL, "NWChem", G_CALLBACK (activate_action) }, {"ToolsIRSpectrumPsicode", GABEDIT_STOCK_PSICODE, N_("Read frequencies and intensities from a _Psicode output file"), NULL, "Psicode", G_CALLBACK (activate_action) }, {"ToolsIRSpectrumOrca", GABEDIT_STOCK_ORCA, N_("Read frequencies and intensities from a _Orca output file"), NULL, "Orca", G_CALLBACK (activate_action) }, {"ToolsIRSpectrumFireFly", GABEDIT_STOCK_FIREFLY, N_("Read frequencies and intensities from a _FireFly output file"), NULL, "FireFly", G_CALLBACK (activate_action) }, {"ToolsIRSpectrumQChem", GABEDIT_STOCK_QCHEM, N_("Read frequencies and intensities from a _Q-Chem output file"), NULL, "QChem", G_CALLBACK (activate_action) }, {"ToolsIRSpectrumAdf", GABEDIT_STOCK_ADF, N_("Read frequencies and intensities from a _ADF output file"), NULL, "ADF", G_CALLBACK (activate_action) }, {"ToolsIRSpectrumMolden", GABEDIT_STOCK_MOLDEN, N_("Read frequencies and intensities from a Mo_lden file"), NULL, "Molden", G_CALLBACK (activate_action) }, {"ToolsIRSpectrumiGVPT2", GABEDIT_STOCK_GABEDIT, N_("Read frequencies and intensities from a _iGVPT2 output file"), NULL, "iGVPT2", G_CALLBACK (activate_action) }, {"ToolsIRSpectrumTxt", NULL, N_("Read frequencies and intensities from an ASCII XY file(2 columns)"), NULL, "Txt", G_CALLBACK (activate_action) }, {"ToolsRamanSpectrum", NULL, N_("_Raman spectrum")}, {"ToolsRamanSpectrumGabedit", GABEDIT_STOCK_GABEDIT, N_("Read frequencies and intensities from a _Gabedit file"), NULL, "Gabedit", G_CALLBACK (activate_action) }, {"ToolsRamanSpectrumGamess", GABEDIT_STOCK_GAMESS, N_("Read frequencies and intensities from a Game_ss output file"), NULL, "Gamess", G_CALLBACK (activate_action) }, {"ToolsRamanSpectrumGaussian", GABEDIT_STOCK_GAUSSIAN, N_("Read frequencies and intensities from a _Gaussian output file"), NULL, "Gaussian", G_CALLBACK (activate_action) }, {"ToolsRamanSpectrumNWChem", GABEDIT_STOCK_NWCHEM, N_("Read frequencies and intensities from a _NWChem output file"), NULL, "NWChem", G_CALLBACK (activate_action) }, {"ToolsRamanSpectrumPsicode", GABEDIT_STOCK_PSICODE, N_("Read frequencies and intensities from a _Psicode output file"), NULL, "Psicode", G_CALLBACK (activate_action) }, {"ToolsRamanSpectrumQChem", GABEDIT_STOCK_QCHEM, N_("Read frequencies and intensities from a _QChem output file"), NULL, "Psicode", G_CALLBACK (activate_action) }, {"ToolsRamanSpectrumOrca", GABEDIT_STOCK_ORCA, N_("Read frequencies and intensities from a _Orca output file"), NULL, "Orca", G_CALLBACK (activate_action) }, {"ToolsRamanSpectrumFireFly", GABEDIT_STOCK_FIREFLY, N_("Read frequencies and intensities from a _FireFly output file"), NULL, "FireFly", G_CALLBACK (activate_action) }, {"ToolsRamanSpectrumMolden", GABEDIT_STOCK_MOLDEN, N_("Read frequencies and intensities from a Mo_lden file"), NULL, "Molden", G_CALLBACK (activate_action) }, {"ToolsRamanSpectrumTxt", NULL, N_("Read frequencies and intensities from an ASCII XY file(2 columns)"), NULL, "Txt", G_CALLBACK (activate_action) }, {"ToolsUVSpectrum", NULL, "_UV spectrum"}, {"ToolsUVSpectrumGabedit", GABEDIT_STOCK_GABEDIT, N_("Read energies and intensities from a _Gabedit file"), NULL, "Gabedit", G_CALLBACK (activate_action) }, {"ToolsUVSpectrumGamess", GABEDIT_STOCK_GAMESS, N_("Read energies and intensities from a _Gamess output file"), NULL, "Gamess", G_CALLBACK (activate_action) }, {"ToolsUVSpectrumGaussian", GABEDIT_STOCK_GAUSSIAN, N_("Read energies and intensities from a _Gaussian output file"), NULL, "Gaussian", G_CALLBACK (activate_action) }, {"ToolsUVSpectrumFireFly", GABEDIT_STOCK_FIREFLY, N_("Read energies and intensities from a _FireFly output file"), NULL, "FireFly", G_CALLBACK (activate_action) }, {"ToolsUVSpectrumNWChem", GABEDIT_STOCK_NWCHEM, N_("Read energies and intensities from a NWChem output file"), NULL, "NWChem", G_CALLBACK (activate_action) }, {"ToolsUVSpectrumPsicode", GABEDIT_STOCK_PSICODE, N_("Read energies and intensities from a Psicode output file"), NULL, "Psicode", G_CALLBACK (activate_action) }, {"ToolsUVSpectrumOrca", GABEDIT_STOCK_ORCA, N_("Read energies and intensities from a Orca output file"), NULL, "Orca", G_CALLBACK (activate_action) }, {"ToolsUVSpectrumQChem", GABEDIT_STOCK_QCHEM, N_("Read energies and intensities from a Q_Chem output file"), NULL, "QChem", G_CALLBACK (activate_action) }, {"ToolsUVSpectrumTxt", NULL, N_("Read energies and intensities from an ASCII XY file(2 columns)"), NULL, "Txt", G_CALLBACK (activate_action) }, {"ToolsECDSpectrum", NULL, N_("_ECD spectrum")}, {"ToolsECDSpectrumGabedit", GABEDIT_STOCK_GABEDIT, N_("Read energies and intensities from a _Gabedit file"), NULL, "Gabedit", G_CALLBACK (activate_action) }, {"ToolsECDSpectrumGaussian", GABEDIT_STOCK_GAUSSIAN, N_("Read energies and intensities from a _Gaussian output file"), NULL, "Gaussian", G_CALLBACK (activate_action) }, {"ToolsECDSpectrumNWChem", GABEDIT_STOCK_NWCHEM, N_("Read energies and intensities from a _NWChem output file"), NULL, "NWChem", G_CALLBACK (activate_action) }, {"ToolsECDSpectrumPsicode", GABEDIT_STOCK_PSICODE, N_("Read energies and intensities from a _Psicode output file"), NULL, "Psicode", G_CALLBACK (activate_action) }, {"ToolsECDSpectrumOrca", GABEDIT_STOCK_ORCA, N_("Read energies and intensities from a _Orca output file"), NULL, "Orca", G_CALLBACK (activate_action) }, {"ToolsECDSpectrumTxt", NULL, N_("Read energies and intensities from an ASCII XY file(2 columns)"), NULL, "Txt", G_CALLBACK (activate_action) }, {"ToolsNMRSpectrum", NULL, N_("_NMR spectrum")}, {"ToolsNMRSpectrumTxt", NULL, N_("NMR Spin-Spin Splitting Simulation"), NULL, "Txt", G_CALLBACK (activate_action) }, {"ToolsNMR2SpectrumTxt", NULL, N_("Read NMR frequencies and intensities from an ASCII XY file(2 columns)"), NULL, "Txt", G_CALLBACK (activate_action) }, {"ToolsVibCorrections", NULL, N_("Ro_vibrational corrections")}, {"ToolsVibCorrectionsGaussian", NULL, N_("Read Gaussian output file to compute the ro-vibrational corrections"), NULL, "Gaussian", G_CALLBACK (activate_action) }, {"ToolsVibQFF", NULL, N_("_QFF potentials")}, {"ToolsVib2MRQFF", NULL, N_("Read energies and compute the 2MR-QFF constants"), NULL, "Gabedit", G_CALLBACK (activate_action) }, {"ToolsAutoCorrelation", NULL, N_("_Auto correlation")}, {"ToolsAutoCorrelationGaussian", NULL, N_("Read Gaussian output file to compute the dipole-dipole auto correlation function"), NULL, "Gaussian", G_CALLBACK (activate_action) }, {"ToolsAutoCorrelationDipole", NULL, N_("Read an assci text file (4 cols: time(fs),mux,muy,muz) to compute the dipole-dipole auto correlation function"), NULL, "TXT", G_CALLBACK (activate_action) }, {"ToolsIsotopeDistribution", NULL, N_("Compute the isotope distribution for a molecule"), NULL, "Isotope distribution", G_CALLBACK (activate_action) }, {"ToolsVASP", NULL, N_("_VASP")}, {"ToolsVASPOptic", NULL, N_("Read _dielectric from a VASP xml file and compute optic properties"), NULL,"Txt", G_CALLBACK (activate_action)}, {"ToolsVASPBands", NULL, N_("Read energies from xml file and draw bands structure"), NULL,"Txt", G_CALLBACK (activate_action)}, {"ToolsVASPDOS", NULL, N_("Read DOS from xml file"), NULL,"Txt", G_CALLBACK (activate_action)}, {"ToolsiGVPT2", NULL, N_("_iGVPT2")}, {"ToolsiGVPT2Read", NULL, N_("Read frequencies and intensities from an iGVPT2 output file"), NULL,"out", G_CALLBACK (activate_action)}, {"ToolsiGVPT2Save", NULL, N_("Create an QM/MMFF94 iGVPT2 input file"), NULL,"ici", G_CALLBACK (activate_action)}, {"ToolsiGVPT2Run", NULL, N_("Create an QM/MMFF94 input file & Run iGVPT2"), NULL,"ici", G_CALLBACK (activate_action)}, {"Run", NULL, N_("_Run")}, {"RunAbinitio", GTK_STOCK_EXECUTE, N_("_Run a Computation Chemistry program"), "R", "Run a program", G_CALLBACK (activate_action) }, {"RunViewResult", NULL, N_("_View result of calculation"), NULL, "View result of calculation", G_CALLBACK (activate_action) }, {"Settings", NULL, N_("_Settings")}, {"SettingsMolecularMechanicsParameters", NULL, N_("_Molecular Mechanics Parameters"), NULL, "Set Molecular Mechanics Parameters", G_CALLBACK (activate_action) }, {"SettingsPDBTemplate", NULL, N_("_PDB Template"), NULL, "Set PDB Template", G_CALLBACK (activate_action) }, {"SettingsBasis", NULL, N_("_Basis")}, {"SettingsBasisMolcas", GABEDIT_STOCK_MOLCAS, N_("Mol_cas"), NULL, "Set molcas basis list", G_CALLBACK (activate_action) }, {"SettingsBasisMolpro", GABEDIT_STOCK_MOLPRO, N_("Mol_pro"), NULL, "Set molpro basis list", G_CALLBACK (activate_action) }, {"SettingsBasisMPQC", GABEDIT_STOCK_MPQC, N_("MP_QC"), NULL, "Set MPQC basis list", G_CALLBACK (activate_action) }, {"SettingsPreferences", GTK_STOCK_PREFERENCES, N_("P_references"), NULL, "Set preference parameters", G_CALLBACK (activate_action) }, {"Window", NULL, N_("_Window"), NULL, NULL, G_CALLBACK (activate_action)}, {"Help", NULL, N_("_Help")}, {"HelpAbout", GTK_STOCK_ABOUT, N_("_About..."), NULL, "About...", G_CALLBACK (activate_action) }, {"HelpVersion", NULL, N_("_Version..."), NULL, "Version...", G_CALLBACK (activate_action) }, }; static guint numberOfGtkActionEntries = G_N_ELEMENTS (gtkActionEntries); /*********************************************************************************************************************/ static void toggle_action (GtkAction *action) { const gchar *name = gtk_action_get_name (action); /* const gchar *typename = G_OBJECT_TYPE_NAME (action);*/ if(!strcmp(name,"ViewWindowsFrame")) { view_windows_frame(); } else if(!strcmp(name,"ViewProjectsList")) { view_projects_list( );} else if(!strcmp(name,"ViewToolbar")) { view_toolbar(); } else if(!strcmp(name,"ViewMiniIcons")) { view_icons(); } } static GtkToggleActionEntry gtkActionToggleEntries[] = { { "ViewWindowsFrame", NULL, N_("Show _Windows frame"), NULL, "Show windows frame", G_CALLBACK (toggle_action), FALSE }, { "ViewProjectsList", NULL, N_("Show _Projects List"), NULL, "Show projects List", G_CALLBACK (toggle_action), TRUE }, { "ViewToolbar", NULL, N_("Show toolbar"), NULL, "Show toolbar", G_CALLBACK (toggle_action), TRUE}, { "ViewMiniIcons", NULL, N_("Mini icons"), NULL, "Mini icons", G_CALLBACK (toggle_action), TRUE} }; static guint numberOfGtkActionToggleEntries = G_N_ELEMENTS (gtkActionToggleEntries); /*********************************************************************************************************************/ /* XML description of the menus for the test app. The parser understands * a subset of the Bonobo UI XML format, and uses GMarkup for parsing */ static const gchar *uiInfo = " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" /*" \n"*/ " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" /*" \n"*/ " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" /*" \n"*/ " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" /* " \n" */ " \n" " \n" " \n" " \n" " \n" " \n" ; /*******************************************************************************************************************************/ static void add_widget (GtkUIManager *merge, GtkWidget *widget, GtkContainer *container) { GtkWidget *handlebox; handlebox =gtk_handle_box_new (); g_object_ref (handlebox); gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(handlebox),GTK_SHADOW_NONE); gtk_box_pack_start (GTK_BOX (container), handlebox, FALSE, FALSE, 0); if (GTK_IS_TOOLBAR (widget)) { GtkToolbar *toolbar; toolbar = GTK_TOOLBAR (widget); gtk_toolbar_set_show_arrow (toolbar, TRUE); gtk_toolbar_set_style(toolbar, GTK_TOOLBAR_ICONS); gtk_toolbar_set_orientation(toolbar, GTK_ORIENTATION_HORIZONTAL); toolBar = toolbar; handleBoxToolBar = handlebox; } gtk_widget_show (widget); gtk_container_add (GTK_CONTAINER (handlebox), widget); } /*******************************************************************************************************************************/ void add_menu_toolbar() { GtkWidget *box; GtkUIManager *merge; GError *error = NULL; GtkActionGroup *actionGroup = NULL; box = gtk_vbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vboxmain), box, FALSE, FALSE, 0); gtk_widget_show (box); merge = gtk_ui_manager_new (); g_signal_connect_swapped (Fenetre, "destroy", G_CALLBACK (g_object_unref), merge); actionGroup = gtk_action_group_new ("GabeditActions"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntries, numberOfGtkActionEntries, NULL); gtk_action_group_add_toggle_actions (actionGroup, gtkActionToggleEntries, numberOfGtkActionToggleEntries, NULL); gtk_ui_manager_insert_action_group (merge, actionGroup, 0); g_signal_connect (merge, "add_widget", G_CALLBACK (add_widget), box); gtk_window_add_accel_group (GTK_WINDOW (Fenetre), gtk_ui_manager_get_accel_group (merge)); if (!gtk_ui_manager_add_ui_from_string (merge, uiInfo, -1, &error)) { g_message (_("building menus failed: %s"), error->message); g_error_free (error); } manager = merge; } /*********************************************************************************************************************/ static void activate_action_window (GtkAction *action, gpointer data) { const gchar *name = gtk_action_get_name (action); if(strstr(name,"WinDynamic")) { GtkWidget* win = (GtkWidget*)data; if(GTK_IS_WIDGET(win)) { gtk_widget_hide(win); gtk_widget_show(win); } } } /*******************************************************************************************************************************/ void window_add(gchar *str,GtkWidget* Win) { guint merge_id; static GtkActionGroup *dag = NULL; GtkActionEntry *actionEntry; GtkAction *action; gchar* name; gchar* label; GList* listOfActions = NULL; GList* list = NULL; gint i; gchar* tmp; if(!manager) return; merge_id = gtk_ui_manager_new_merge_id (GTK_UI_MANAGER (manager)); if(!dag) { dag = gtk_action_group_new ("WindowActions"); gtk_action_group_set_translation_domain(dag,GETTEXT_PACKAGE); gtk_ui_manager_insert_action_group (manager, dag, 0); } listOfActions = gtk_action_group_list_actions(dag); i = 0; list = listOfActions; tmp = g_strdup_printf("WinDynamic%s", str); while(list != NULL) { G_CONST_RETURN gchar* nameAction; action = (GtkAction *)(list->data); if(!GTK_IS_ACTION(action)) break; nameAction = gtk_action_get_name(GTK_ACTION(action)); if(strstr(nameAction,tmp)) i++; list = list->next; } g_free(tmp); if(i==0) { name = g_strdup_printf ("WinDynamic%s", str); label = g_strdup_printf ("%s", str); } else { name = g_strdup_printf ("WinDynamic%s%d", str,i); label = g_strdup_printf ("%s%d", str,i); } actionEntry = g_malloc(sizeof(GtkActionEntry)); actionEntry->name = name; actionEntry->stock_id = NULL; actionEntry->label = label; actionEntry->accelerator = NULL; actionEntry->tooltip = NULL; actionEntry->callback = G_CALLBACK(activate_action_window); gtk_action_group_add_actions (dag, actionEntry, 1, Win); gtk_ui_manager_add_ui(GTK_UI_MANAGER (manager), merge_id, "/menubar/_Window", name, name, GTK_UI_MANAGER_MENUITEM, TRUE); g_object_set_data(G_OBJECT(Win),"WinId",GUINT_TO_POINTER(merge_id)); gtk_ui_manager_ensure_update (manager); } /*******************************************************************************************************************************/ void window_delete(GtkWidget* Win) { guint merge_id; if(!manager) return; merge_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (Win), "WinId")); gtk_ui_manager_remove_ui(GTK_UI_MANAGER (manager), merge_id); gtk_ui_manager_ensure_update (manager); } GabeditSrc250/src/Common/StockIcons.c0000644000175100017510000002657213130665225017751 0ustar alloucheallouche/* StockIcons.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../pixmaps/A0d.xpm" #include "../../pixmaps/A0p.xpm" #include "../../pixmaps/About.xpm" #include "../../pixmaps/Apply.xpm" #include "../../pixmaps/Book_close.xpm" #include "../../pixmaps/Book_open.xpm" #include "../../pixmaps/Book_parent.xpm" #include "../../pixmaps/Camera.xpm" #include "../../pixmaps/Cancel.xpm" #include "../../pixmaps/Close.xpm" #include "../../pixmaps/ConvertUnit.xpm" #include "../../pixmaps/Copy.xpm" #include "../../pixmaps/Cut.xpm" #include "../../pixmaps/DeleteAtom.xpm" #include "../../pixmaps/Draw.xpm" #include "../../pixmaps/Driver.xpm" #include "../../pixmaps/Error.xpm" #include "../../pixmaps/Exit.xpm" #include "../../pixmaps/Find.xpm" #include "../../pixmaps/Gaussian.xpm" #include "../../pixmaps/Geometry.xpm" #include "../../pixmaps/Help.xpm" #include "../../pixmaps/Hide.xpm" #include "../../pixmaps/AdjustH.xpm" #include "../../pixmaps/Home.xpm" #include "../../pixmaps/H.xpm" #include "../../pixmaps/Gabedit.xpm" #include "../../pixmaps/Info.xpm" #include "../../pixmaps/InsertAtom.xpm" #include "../../pixmaps/InsertFragment.xpm" #include "../../pixmaps/ChangeBond.xpm" #include "../../pixmaps/CutBond.xpm" #include "../../pixmaps/DeleteCut.xpm" #include "../../pixmaps/AddBond.xpm" #include "../../pixmaps/Insert.xpm" #include "../../pixmaps/Measure.xpm" #include "../../pixmaps/Molcas.xpm" #include "../../pixmaps/Molden.xpm" #include "../../pixmaps/Molpro.xpm" #include "../../pixmaps/Orca.xpm" #include "../../pixmaps/Vasp.xpm" #include "../../pixmaps/QChem.xpm" #include "../../pixmaps/Mopac.xpm" #include "../../pixmaps/Adf.xpm" #include "../../pixmaps/Dalton.xpm" #include "../../pixmaps/DeMon.xpm" #include "../../pixmaps/Gamess.xpm" #include "../../pixmaps/FireFly.xpm" #include "../../pixmaps/MoveAtom.xpm" #include "../../pixmaps/MPQC.xpm" #include "../../pixmaps/NWChem.xpm" #include "../../pixmaps/Psicode.xpm" #include "../../pixmaps/NBO.xpm" #include "../../pixmaps/New.xpm" #include "../../pixmaps/Next.xpm" #include "../../pixmaps/No.xpm" #include "../../pixmaps/Ok.xpm" #include "../../pixmaps/OpenBabel.xpm" #include "../../pixmaps/Open.xpm" #include "../../pixmaps/Orbitals.xpm" #include "../../pixmaps/Ortho.xpm" #include "../../pixmaps/Page.xpm" #include "../../pixmaps/Paste.xpm" #include "../../pixmaps/Perspective.xpm" #include "../../pixmaps/Play.xpm" #include "../../pixmaps/Print.xpm" #include "../../pixmaps/Question.xpm" #include "../../pixmaps/RenderBallStick.xpm" #include "../../pixmaps/RenderStick.xpm" #include "../../pixmaps/RenderWireFrame.xpm" #include "../../pixmaps/RotateLocal.xpm" #include "../../pixmaps/Rotate.xpm" #include "../../pixmaps/RotateX.xpm" #include "../../pixmaps/RotateY.xpm" #include "../../pixmaps/RotateZLocal.xpm" #include "../../pixmaps/RotateZ.xpm" #include "../../pixmaps/Run.xpm" #include "../../pixmaps/SaveAs.xpm" #include "../../pixmaps/SelectAll.xpm" #include "../../pixmaps/SaveMini.xpm" #include "../../pixmaps/Save.xpm" #include "../../pixmaps/ScaleBall.xpm" #include "../../pixmaps/ScaleDipole.xpm" #include "../../pixmaps/ScaleStick.xpm" #include "../../pixmaps/SelectResidue.xpm" #include "../../pixmaps/Select.xpm" #include "../../pixmaps/Stop.xpm" #include "../../pixmaps/Translate.xpm" #include "../../pixmaps/Warning.xpm" #include "../../pixmaps/Yes.xpm" #include "../../pixmaps/Zoom.xpm" #include "../../pixmaps/Pdb.xpm" #include "../../pixmaps/O.xpm" #include "../../pixmaps/AtomToInsert.xpm" #include "../../pixmaps/Knot.xpm" #include "StockIcons.h" #include static void add_one_icon(GtkIconFactory *icon_factory, gchar* name, char** xpm) { GdkPixbuf *pixbuf; GtkIconSet *iconset; pixbuf = gdk_pixbuf_new_from_xpm_data((const char**)xpm); iconset = gtk_icon_set_new_from_pixbuf(pixbuf); g_object_unref(G_OBJECT(pixbuf)); gtk_icon_factory_add(icon_factory, name, iconset); gtk_icon_set_unref(iconset); } void gabedit_gtk_stock_init() { GtkIconFactory *icon_factory; static gboolean stock_inited = FALSE; if (stock_inited) return; stock_inited = TRUE; /* Setup the icon factory. */ icon_factory = gtk_icon_factory_new(); gtk_icon_factory_add_default(icon_factory); add_one_icon(icon_factory, GABEDIT_STOCK_A0D, a0d_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_A0P, a0p_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_ABOUT, about_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_APPLY, apply_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_BOOK_CLOSE, book_close_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_BOOK_OPEN, book_open_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_BOOK_PARENT, book_parent_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_CAMERA, camera_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_CANCEL, cancel_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_CLOSE, close_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_COPY, copy_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_CUT, cut_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_DELETE_ATOM, delete_atom_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_DRAW, draw_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_IFRAG, insert_fragment_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_DRIVER, driver_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_ERROR , error_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_EXIT , exit_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_FIND , find_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_GAUSSIAN, gaussian_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_GEOMETRY, geometry_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_HELP, help_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_HIDE, hide_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_ADJUST_H, adjust_h_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_HOME, home_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_H, H); add_one_icon(icon_factory, GABEDIT_STOCK_GABEDIT, gabedit_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_INFO, info_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_INSERT_ATOM, insert_atom_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_CHANGE_BOND, change_bond_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_CUT_BOND, cut_bond_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_DELETE_CUT, delete_cut_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_ADD_BOND, add_bond_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_INSERT, insert_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_MEASURE, measure_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_MOLCAS, molcas_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_MOLDEN, molden_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_MOLPRO, molpro_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_ORCA, orca_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_VASP, vasp_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_QCHEM, qchem_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_MOPAC, mopac_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_ADF, adf_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_DALTON, dalton_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_DEMON, demon_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_GAMESS, gamess_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_NWCHEM, nwchem_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_PSICODE, psicode_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_NBO, nbo_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_FIREFLY, firefly_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_MOVE_ATOM, move_atom_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_MPQC, mpqc_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_NEW, new_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_NEXTW, next_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_NO, no_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_OK, ok_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_OPEN_BABEL,open_babel_xpm ); add_one_icon(icon_factory, GABEDIT_STOCK_CONVERT_UNIT,convert_unit_xpm ); add_one_icon(icon_factory, GABEDIT_STOCK_OPEN, open_xpm ); add_one_icon(icon_factory, GABEDIT_STOCK_ORBITALS, orbitals_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_ORTHO, ortho_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_PAGE, page_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_PASTE, paste_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_PERSPECTIVE, perspective_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_PLAY, play_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_PRINT, print_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_QUESTION, question_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_RENDER_BALL_STICK, render_ballstick_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_RENDER_STICK, render_stick_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_RENDER_WIREFRAME, render_wireframe_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_ROTATION_LOCAL, rotate_local_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_ROTATION, rotate_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_ROTATION_X, rotatex_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_ROTATION_Y, rotatey_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_ROTATION_Z, rotatez_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_ROTATION_Z_LOCAL, rotatez_local_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_RUN, run_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_SAVE_AS, saveas_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_SELECT_ALL, selectall_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_SAVE_MINI, savemini_xpm ); add_one_icon(icon_factory, GABEDIT_STOCK_SAVE, save_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_SCALE_BALL, scale_ball_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_SCALE_DIPOLE, scale_dipole_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_SCALE_STICK, scale_stick_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_SELECT_RESIDUE, selectresidue_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_SELECT, select_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_STOP, stop_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_TRANSLATE, translate_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_WARNING, warning_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_YES, yes_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_ZOOM, zoom_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_PDB, pdb_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_O, o_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_ATOMTOINSERT, atomtoinsert_xpm); add_one_icon(icon_factory, GABEDIT_STOCK_KNOT, knot_xpm); g_object_unref(G_OBJECT(icon_factory)); } GabeditSrc250/src/Common/SplashScreen.h0000644000175100017510000000270113130665225020255 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_SPLASHSCREEN_H__ #define __GABEDIT_SPLASHSCREEN_H__ void splash_screen(); void create_about_frame(); #endif /* __GABEDIT_SPLASHSCREEN_H__ */ GabeditSrc250/src/Common/Gabedit.c0000644000175100017510000000776213130665225017231 0ustar alloucheallouche/* Gabedit.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include #include "Global.h" #include "MenuToolBar.h" #include "TextEdit.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Geometry/GeomGlobal.h" #include "SplashScreen.h" #include "Install.h" #include "../Files/ListeFiles.h" #include "Windows.h" #include "StockIcons.h" GtkWidget *hseparator; int main(int argc, char *argv[]) { GtkWidget* vboxp; gchar* poDir = NULL; gint ierr; srand((unsigned int)time(NULL)); /* printf("%s",g_filename_from_utf8("My test\n",-1,0,0,0)); exit(1); */ /* g_setenv("LANG","en_US",TRUE); g_setenv("GDM_LANG","en_US",TRUE); */ /* setlocale(LC_ALL,"");*/ setlocale(LC_ALL,"C"); poDir = g_build_filename (g_get_current_dir(),"locale",NULL); bindtextdomain (GETTEXT_PACKAGE, poDir); /* printf("poDir = %s\n",poDir);*/ g_free (poDir); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); /* if (!g_thread_supported ()){ g_thread_init (NULL); } gdk_threads_init (); gdk_threads_enter (); */ gtk_init(&argc, &argv); gtk_gl_init(&argc, &argv); setlocale(LC_NUMERIC,"C"); gabedit_gtk_stock_init(); /* Initialisation */ initialise_global_variables(); /* set_default_styles();*/ Fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Fenetre),"Gabedit"); gtk_widget_set_size_request (GTK_WIDGET(Fenetre), 2*ScreenWidth/5, 2*ScreenHeight/5); #ifdef G_OS_WIN32 gtk_window_set_default_size (GTK_WINDOW(Fenetre), ScreenWidth, ScreenHeight-65); gtk_window_set_position(GTK_WINDOW(Fenetre),GTK_WIN_POS_CENTER); #else gtk_window_set_default_size (GTK_WINDOW(Fenetre), ScreenWidth, ScreenHeight-80); #endif gtk_widget_set_size_request (GTK_WIDGET(Fenetre), 2*ScreenWidth/5, 2*ScreenHeight/5); gtk_window_set_default_size (GTK_WINDOW(Fenetre), 2*ScreenWidth/5, 2*ScreenHeight/5); gtk_widget_realize(Fenetre); g_signal_connect(G_OBJECT(Fenetre), "delete_event",(GCallback)exit_all,NULL); cree_p_vbox(); vboxp = vboxmain; add_menu_toolbar(); cree_vboxs_list_text(); cree_text_notebook(); create_frame_windows(vboxp); cree_files_out_err_notebook(vboxtexts); read_ressource_file(); /* set_default_styles();*/ ListeFiles(vboxlistfiles); resetFontLabelErrOut(); if(argc>1) get_doc(argv[1]); imodif = DATA_MOD_NO; set_icon_default(); set_icone(Fenetre); user_install_verify(splash_screen); set_default_styles(); set_path(); ierr = chdir(g_get_home_dir()); gtk_main(); /* gdk_threads_leave ();*/ return 0; } GabeditSrc250/src/Common/Makefile0000644000175100017510000000076213130664665017166 0ustar allouchealloucheOBJECTS = Gabedit.o Help.o Install.o Preferences.o Printer.o Run.o SplashScreen.o TextEdit.o Windows.o Status.o Exit.o MenuToolBar.o StockIcons.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/Common/Exit.c0000644000175100017510000001475513130665225016603 0ustar alloucheallouche/* Exit.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include "../../Config.h" #include "../Common/Global.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/HydrogenBond.h" #include "../Files/ListeFiles.h" #include "../MolecularMechanics/Atom.h" #include "../MolecularMechanics/Molecule.h" #include "../MolecularMechanics/ForceField.h" #include "../MolecularMechanics/MolecularMechanics.h" #include "../MolecularMechanics/PDBTemplate.h" #include "../Geometry/PersonalFragments.h" #include "../Utils/AtomsProp.h" #include "../Molpro/MolproBasisLibrary.h" #include "../Molcas/MolcasBasisLibrary.h" #include "../MPQC/MPQCBasisLibrary.h" void create_color_surfaces_file(); void create_opengl_file(); void save_axis_properties(); void save_principal_axis_properties(); typedef enum { SAVELISTFILES = 0, SAVEHOSTSFILE, SAVEMMPARAMETERS, SAVEPDBTEMPLATE, SAVEFRAGMENT, SAVEATOMPROP, SAVEMOLPROBASIS, SAVEMOLCASBASIS, SAVEMPQCBASIS, } SaveOptions; #define NOPTIONS 9 static GtkWidget* buttonOptions[NOPTIONS]; /********************************************************************************/ static void ExitGabedit(GtkWidget *widget, gchar *data) { if(GTK_TOGGLE_BUTTON (buttonOptions[SAVELISTFILES])->active) parse_liste_files(); if(GTK_TOGGLE_BUTTON (buttonOptions[SAVEHOSTSFILE])->active) create_hosts_file(); if(GTK_TOGGLE_BUTTON (buttonOptions[SAVEMMPARAMETERS])->active) saveAmberParameters(); if(GTK_TOGGLE_BUTTON (buttonOptions[SAVEPDBTEMPLATE])->active) savePersonalPDBTpl(NULL); if(GTK_TOGGLE_BUTTON (buttonOptions[SAVEFRAGMENT])->active) savePersonalFragments(NULL); if(GTK_TOGGLE_BUTTON (buttonOptions[SAVEATOMPROP])->active) save_atoms_prop(); if(GTK_TOGGLE_BUTTON (buttonOptions[SAVEMOLPROBASIS])->active) saveMolproBasis(); if(GTK_TOGGLE_BUTTON (buttonOptions[SAVEMOLCASBASIS])->active) saveMolcasBasis(); if(GTK_TOGGLE_BUTTON (buttonOptions[SAVEMPQCBASIS])->active) saveMPQCBasis(); create_commands_file(); create_network_file(); create_fonts_file(); create_color_surfaces_file(); create_opengl_file(); create_drawmolecule_file(); save_axis_properties(); #ifdef DRAWGEOMGL save_axes_geom_properties(); #endif save_principal_axis_properties(); save_HBonds_properties(); gtk_main_quit(); } /***********************************************************************/ static void AddFrame(GtkWidget *box) { gint i; GtkWidget *frame; GtkWidget *vbox; gchar *options[NOPTIONS]={ _("Save list of recent projects"), _("Save list of recent host systems"), _("Save the Molecular mechanics parameters"), _("Save the PDB Templates parameters"), _("Save the Personal Fragments"), _("Save the atoms properties"), _("Save the list of Molpro basis"), _("Save the list of Molcas basis"), _("Save the list of MPQC basis") }; frame = gtk_frame_new("Action"); gtk_container_set_border_width(GTK_CONTAINER(frame), 5); gtk_container_add (GTK_CONTAINER (box), frame); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (frame), vbox); for(i=0;iwindow,"Exit"); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); gtk_button_box_set_layout (GTK_BUTTON_BOX (GTK_DIALOG(Win)->action_area), GTK_BUTTONBOX_END); gtk_box_set_homogeneous(GTK_BOX( GTK_DIALOG(Win)->action_area), TRUE); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)gtk_widget_destroy,NULL); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_box_pack_start(GTK_BOX (GTK_DIALOG(Win)->vbox), vbox,TRUE, TRUE, 0); gtk_widget_realize(Win); label = create_label_with_pixmap(Win,_("Are you sure you want to exit?"),_("Question")); gtk_box_pack_start (GTK_BOX(vbox), label, TRUE, TRUE, 5); AddFrame(vbox); button = create_button(Win,"No"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,"Yes"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)ExitGabedit,GTK_OBJECT(Win)); gtk_widget_grab_default(button); gtk_widget_show (button); gtk_widget_show_all(Win); } /***********************************************************************/ GabeditSrc250/src/Common/Windows.c0000644000175100017510000000664513130665225017323 0ustar alloucheallouche/* Windows.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "Global.h" #include "../Utils/Utils.h" #include "../Common/MenuToolBar.h" #include /********************************************************************************/ void create_frame_windows(GtkWidget *box) { GtkWidget *frame; GtkWidget *hbox; frame = gtk_frame_new (_("Windows")); g_object_ref (frame); g_object_set_data_full (G_OBJECT (Fenetre), "frame", frame, (GDestroyNotify) g_object_unref); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_box_pack_start (GTK_BOX (box), frame, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_widget_set_size_request(GTK_WIDGET(frame),-1,(gint)(ScreenHeight*0.05)); /* gtk_widget_set_size_request(GTK_WIDGET(frame),-1,height);*/ /* Debug("height = %d\n",height);*/ gtk_widget_show (frame); hbox = gtk_hbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), hbox); gtk_widget_show (hbox); HboxWins = hbox; FrameWins = frame; } /********************************************************************************/ void destroy_button_windows(GtkWidget *Win) { GtkWidget *button = g_object_get_data (G_OBJECT (Win), "ButtonWins"); if(button) gtk_widget_destroy (button); window_delete(Win); } /********************************************************************************/ void show_windows(GtkWidget *Win,gpointer data) { gtk_widget_hide (Win); gtk_widget_show (Win); } /********************************************************************************/ GtkWidget *add_button_windows(gchar *title,GtkWidget *Win) { GtkWidget *button; button = gtk_button_new_with_label(title); gtk_box_pack_start (GTK_BOX(HboxWins),button, FALSE, FALSE, 1); gtk_widget_show (button); g_object_set_data(G_OBJECT (Win), "ButtonWins", button); g_object_set_data(G_OBJECT (Win), "ButtonStr", g_strdup(title)); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)show_windows, GTK_OBJECT(Win)); window_add(title,Win); return button; } /********************************************************************************/ GabeditSrc250/src/Common/Run.h0000644000175100017510000000304213130665225016426 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_RUN_H__ #define __GABEDIT_RUN_H__ void get_file_frome_remote_host(GtkWidget* wid,gpointer data); GtkWidget* create_text_result_command(GtkWidget* Text[],GtkWidget* Frame[],gchar* title); void create_run (); #endif /* __GABEDIT_RUN_H__ */ GabeditSrc250/src/Common/Printer.c0000644000175100017510000004225613130665225017312 0ustar alloucheallouche/* Printer.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/GabeditTextEdit.h" #include "Printer.h" #include "../Files/FileChooser.h" #include "Windows.h" #ifndef G_OS_WIN32 static GtkWidget *FrameOptions = NULL; static GtkWidget *VboxOptions = NULL; static GtkWidget *Wins; static gchar *ProgName = NULL; static GtkWidget *ButtonYes; static GtkWidget *ButtonNo; static EntryPrint entrys; static GtkWidget *ButtonDisplay; void create_print_page(); /********************************************************************************/ void change_of_chars(GtkWidget* w,gpointer data) { gchar *orientation; gchar *sheets; orientation = g_strdup(gtk_entry_get_text(GTK_ENTRY(entrys.Orientation))); lowercase(orientation); sheets = g_strdup(gtk_entry_get_text(GTK_ENTRY(entrys.NbSheets))); if (strstr((gchar *)orientation,_("landscape")) && strstr((gchar *)sheets,"1") ) gtk_entry_set_text(GTK_ENTRY(entrys.Format),"140"); if (strstr((gchar *)orientation,_("landscape")) && strstr((gchar *)sheets,"2") ) gtk_entry_set_text(GTK_ENTRY(entrys.Format),"80"); if ( !strstr((gchar *)orientation,_("landscape")) && strstr((gchar *)sheets,"1") ) gtk_entry_set_text(GTK_ENTRY(entrys.Format),"100"); if ( !strstr((gchar *)orientation,_("landscape")) && strstr((gchar *)sheets,"2") ) gtk_entry_set_text(GTK_ENTRY(entrys.Format),"80"); if(orientation) g_free(orientation); if(sheets) g_free(sheets); } /********************************************************************************/ void print_file(GtkWidget* w,gpointer data) { G_CONST_RETURN gchar *filename; G_CONST_RETURN gchar *printname; G_CONST_RETURN gchar *nbcopies; gchar *orientation; G_CONST_RETURN gchar *format; G_CONST_RETURN gchar *sheets; G_CONST_RETURN gchar *psfile = NULL; gchar *command = NULL; gchar *t = NULL; filename = gtk_entry_get_text(GTK_ENTRY(entrys.FileToPrint)); printname = gtk_entry_get_text(GTK_ENTRY(entrys.PrinterName)); nbcopies = gtk_entry_get_text(GTK_ENTRY(entrys.NbCopies)); if (!strcmp((gchar *)ProgName,"a2ps") ) { orientation = g_strdup(gtk_entry_get_text(GTK_ENTRY(entrys.Orientation))); lowercase(orientation); format = gtk_entry_get_text(GTK_ENTRY(entrys.Format)); sheets = gtk_entry_get_text(GTK_ENTRY(entrys.NbSheets)); if (GTK_TOGGLE_BUTTON (ButtonYes)->active || data) { if(!data) { psfile = gtk_entry_get_text(GTK_ENTRY(entrys.FileToCreate)); t = g_strdup_printf("-o%s",psfile); } else t = g_strdup("-Pdisplay"); } else { if (strstr((gchar *)printname,_("Default")) ) t = g_strdup(" "); else t = g_strdup_printf("-P%s",printname); } if (strstr((gchar *)orientation,_("landscape")) && strstr((gchar *)sheets,"1") ) command = g_strdup_printf("a2ps -%s --chars-per-line=%s -n%s --%s %s %s",sheets,format,nbcopies,orientation,t,filename); else command = g_strdup_printf("a2ps -%s --chars-per-line=%s -n%s --%s %s %s",sheets,format,nbcopies,orientation,t,filename); g_free(t); t = run_command(command); if(t) { if(!this_is_a_backspace(t)) Message(t,"Info",TRUE); g_free(t); } g_free(command); if(orientation) g_free(orientation); } else { if (strstr((gchar *)printname,_("Default")) ) command = g_strdup_printf("lpr -#%s %s",nbcopies,filename); else command = g_strdup_printf("lpr -P%s -#%s %s",printname,nbcopies,filename); t = run_command(command); if(t) { printf("t=%s",t); if(!this_is_a_backspace(t)) Message(t,_("Info"),TRUE); g_free(t); } g_free(command); } } /********************************************************************************/ GtkWidget *file_to_print(GtkWidget* box) { GtkWidget *Entry = NULL; GtkWidget *hbox = box; GtkWidget *Frame; GtkWidget *vbox; static gchar* patterns[] = {"*.com *.xyz *.gzmt *.zmt","*.com","*.xyz", "*.gzmt","*.zmt","*.log","*.out","*",NULL}; gchar *filename = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); Frame = create_frame(Wins,box,_("File to print")); vbox = create_vbox(Frame); hbox = create_hbox(vbox); hbox = create_hbox_browser(Wins,vbox,_("File Name :"),filename,patterns); Entry = (GtkWidget*)(g_object_get_data(G_OBJECT(hbox),"Entry")); g_free(filename); return Entry; } /********************************************************************************/ GtkWidget *create_frame_with_list(GtkWidget* box,gchar *title,gchar **liste,gint n) { GtkWidget *Frame; GtkWidget *vbox; GtkWidget *Entry; Frame = create_frame(Wins,box,title); vbox = create_vbox(Frame); Entry = create_combo_box_entry_liste(Wins,vbox,NULL,liste,n); return Entry; } /********************************************************************************/ GtkWidget *create_orientation(GtkWidget* box) { GtkWidget *Entry; gchar *liste[2] = {N_("Portrait"),N_("Landscape")}; Entry = create_frame_with_list(box,_(" Orientation "),liste,2); gtk_widget_set_sensitive(Entry,FALSE); g_signal_connect(G_OBJECT(Entry), "changed", G_CALLBACK(change_of_chars), NULL); return Entry; } /********************************************************************************/ GtkWidget *create_format(GtkWidget* box) { GtkWidget *Entry; gchar *liste[9] = {"70","80","90","100","110","120","130","140","150"}; Entry = create_frame_with_list(box,_(" chars by line "),liste,9); gtk_widget_set_sensitive(Entry,FALSE); gtk_entry_set_text(GTK_ENTRY(Entry),"100"); return Entry; } /********************************************************************************/ GtkWidget *create_page_by_papier(GtkWidget* box) { GtkWidget *Entry; gchar *liste[2] = {"1","2"}; Entry = create_frame_with_list(box,_(" pages by paper "),liste,2); gtk_widget_set_sensitive(Entry,FALSE); g_signal_connect(G_OBJECT(Entry), "changed", G_CALLBACK(change_of_chars), NULL); return Entry; } /********************************************************************************/ void show_hbox_file(GtkWidget* win,gpointer hbox) { gtk_widget_show_all(GTK_WIDGET(hbox)); gtk_widget_set_sensitive(hbox, TRUE); } /********************************************************************************/ void hide_hbox_file(GtkWidget* win,gpointer hbox) { gtk_widget_show_all(GTK_WIDGET(hbox)); gtk_widget_set_sensitive(hbox, FALSE); } /********************************************************************************/ GtkWidget *create_print_in_file(GtkWidget* box) { GtkWidget *Entry = NULL; GtkWidget *hbox = box; GtkWidget *Frame; GtkWidget *vbox; static gchar* patterns[] = {"*.ps *.eps","*.ps","*.eps","*",NULL}; Frame = create_frame(Wins,box,_("Print in file")); vbox = create_vbox(Frame); hbox = create_hbox(vbox); ButtonYes = gtk_radio_button_new_with_label( NULL,_("Yes")); gtk_box_pack_start (GTK_BOX (hbox), ButtonYes, TRUE, TRUE, 0); gtk_widget_show (ButtonYes); ButtonNo = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonYes)), "No"); gtk_box_pack_start (GTK_BOX (hbox), ButtonNo, TRUE, TRUE, 0); gtk_widget_show (ButtonNo); hbox = create_hbox_browser(Wins,vbox,_(" File Name :"),"gabedit.ps",patterns); Entry = (GtkWidget*)(g_object_get_data(G_OBJECT(hbox),"Entry")); g_signal_connect(G_OBJECT (ButtonYes), "clicked", G_CALLBACK(show_hbox_file), hbox); g_signal_connect(G_OBJECT (ButtonNo), "clicked", G_CALLBACK(hide_hbox_file), hbox); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ButtonNo), TRUE); return Entry; } /********************************************************************************/ void create_frame_options_a2ps(gchar *title) { GtkWidget *vbox; GtkWidget *hbox; FrameOptions = create_frame(Wins,VboxOptions,title); vbox = create_vbox(FrameOptions); hbox = create_hbox(vbox); entrys.Orientation = create_orientation(hbox); entrys.NbSheets = create_page_by_papier(hbox); entrys.Format = create_format(hbox); hbox = create_hbox(vbox); entrys.FileToCreate = create_print_in_file(hbox); } /********************************************************************************************************/ static void traite_option(GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } if(ProgName) g_free(ProgName); ProgName = g_strdup((gchar *)data); if(FrameOptions) gtk_widget_set_sensitive(FrameOptions, FALSE); if (!strcmp((gchar *)data,"a2ps") ) { if(!FrameOptions) create_frame_options_a2ps(_("a2ps options")); else gtk_widget_set_sensitive(FrameOptions, TRUE); gtk_widget_set_sensitive(ButtonDisplay, TRUE); } else gtk_widget_set_sensitive(ButtonDisplay, FALSE); } /********************************************************************************************************/ static GtkWidget *CreateListeProg(GtkWidget* box) { GtkTreeIter iter; GtkTreeStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; store = gtk_tree_store_new (1,G_TYPE_STRING); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "a2ps", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "lpr", -1); model = GTK_TREE_MODEL (store); combobox = gtk_combo_box_new_with_model (model); g_object_unref (model); gtk_box_pack_start (GTK_BOX (box), combobox, TRUE, TRUE, 1); g_signal_connect (G_OBJECT(combobox), "changed", G_CALLBACK(traite_option), NULL); renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", 0, NULL); return combobox; } /********************************************************************************/ GtkWidget *create_prog_frame(GtkWidget* box) { GtkWidget *Frame; GtkWidget *vbox; GtkWidget *combobox; Frame = create_frame(Wins,box," Program "); vbox = create_vbox(Frame); combobox = CreateListeProg(vbox); g_object_set_data(G_OBJECT(Frame),"ComboBox",combobox); return Frame; } /********************************************************************************/ GtkWidget *create_name_print_frame(GtkWidget* box) { GtkWidget *Entry; gchar *liste[3] = {N_("Default"),"lp0","lp1"}; Entry = create_frame_with_list(box,_(" Printer Name "),liste,3); return Entry; } /********************************************************************************/ GtkWidget *create_number_of_copies(GtkWidget* box) { GtkWidget *Entry; gchar *liste[10] = {"1","2","3","4","5","6","7","8","9","10"}; Entry = create_frame_with_list(box,_(" Number of copies "),liste,10); gtk_widget_set_sensitive(Entry,FALSE); return Entry; } /********************************************************************************/ void create_print_page() { GtkWidget *Frame; GtkWidget *button; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *combobox; /* Wins = gtk_print_unix_dialog_new("Gabedit : Print",Fenetre); gtk_widget_show(Wins); return; */ ProgName = g_strdup("a2ps"); Wins= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Wins),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Wins),GTK_WINDOW(Fenetre)); gtk_window_set_title(>K_DIALOG(Wins)->window,_("Gabedit : Print")); gtk_widget_realize(Wins); init_child(Wins,gtk_widget_destroy,_(" Print ")); g_signal_connect(G_OBJECT(Wins),"delete_event",(GCallback)destroy_children,NULL); Frame = create_frame(Wins,GTK_DIALOG(Wins)->vbox,NULL); vbox = create_vbox(Frame); entrys.FileToPrint = file_to_print(vbox); hbox = create_hbox(vbox); Frame = create_prog_frame(hbox); combobox = g_object_get_data(G_OBJECT(Frame),"ComboBox"); entrys.PrinterName = create_name_print_frame(hbox); entrys.NbCopies = create_number_of_copies(hbox); create_hseparator(vbox); VboxOptions = GTK_DIALOG(Wins)->vbox; FrameOptions = NULL; button = create_button(Wins,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked",G_CALLBACK(destroy_children),GTK_OBJECT(Wins)); gtk_widget_show (button); button = create_button(Wins,_("Display")); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(print_file),&button); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, TRUE, TRUE, 0); gtk_widget_show (button); ButtonDisplay = button; button = create_button(Wins,_("Print")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(print_file),NULL); g_signal_connect_swapped(GTK_OBJECT(button), "clicked",G_CALLBACK(destroy_children),GTK_OBJECT(Wins)); gtk_widget_grab_default(button); gtk_widget_show (button); gtk_widget_show_all(Wins); create_frame_options_a2ps(_("a2ps options")); gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0); } /********************************************************************************/ #else /* G_OS_WIN32 */ #include void create_print_page() { PRINTDLG pd; DOCINFO di; gchar* szMessage; gchar* temp; gint nchar; GtkWidget* TextWid; guint nlignes; guint RowByPage = 50; gchar *curent; gchar *next ; gchar tab[5] = " " ; guint i; guint j; guint k; if( gtk_notebook_get_current_page(GTK_NOTEBOOK(NoteBookText))==0) TextWid = text; else TextWid = textresult; temp= gabedit_text_get_chars(TextWid,0,-1); if(!temp) { Message(_("Error, No text to print\n"),_("Error"),TRUE); return; } nchar = gabedit_text_get_length(GABEDIT_TEXT(TextWid)); if(nchar<1) { Message(_("Error, No text to print\n"),_("Error"),TRUE); return; } next = temp; /* Debug("Nombre Total de characters = %d\n",nchar);*/ nlignes = 0; for(i=0;i<(guint)nchar;i++) { if(next[i] == '\n') nlignes ++; } /* Debug("Nombre Total de lignes = %d\n",nlignes);*/ memset (&pd, 0, sizeof(PRINTDLG)); memset (&di, 0, sizeof(DOCINFO)); di.cbSize = sizeof(DOCINFO); if( gtk_notebook_get_current_page(GTK_NOTEBOOK(NoteBookText))==0) di.lpszDocName = fileopen.datafile; else di.lpszDocName = fileopen.outputfile; pd.lStructSize = sizeof(PRINTDLG); pd.Flags = PD_PAGENUMS | PD_RETURNDC; pd.nFromPage = 1; pd.nToPage = nlignes/RowByPage +1; pd.nMinPage = 1; pd.nMaxPage = nlignes/RowByPage +1; szMessage = 0; if (PrintDlg (&pd)) { if (pd.hDC) { if (StartDoc (pd.hDC, &di) != SP_ERROR) { for(i =0 ;i 1) new_val = 1.0; gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (ProgressBar), new_val); while( gtk_events_pending() ) gtk_main_iteration(); return TRUE; } /********************************************************************************/ static GtkWidget *create_progress_bar(GtkWidget *box) { GtkWidget *pbar; GtkWidget *button; GtkWidget *table; table = gtk_table_new(1,4,FALSE); gtk_box_pack_start (GTK_BOX(box), table, FALSE, TRUE, 2); gtk_widget_show (table); pbar = gtk_progress_bar_new (); gtk_table_attach(GTK_TABLE(table),pbar,0,2,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); button = gtk_button_new_with_label(_(" Cancel ")); ButtonCancel = button; gtk_widget_show_all (button); gtk_table_attach(GTK_TABLE(table),button,2,3,0,1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); gtk_widget_show_all (table); ProgressTable = table; g_signal_connect(G_OBJECT(button), "clicked", (GCallback)stop_download,NULL); stopDownLoad = FALSE; return pbar; } /********************************************************************************/ void create_status_progress_connection_bar(GtkWidget* vbox) { ProgressBar = create_progress_bar(vbox); } /********************************************************************************/ GabeditSrc250/src/Common/Install.c0000644000175100017510000011553613130665225017277 0ustar alloucheallouche/* Install.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "Global.h" #include "../Utils/UtilsInterface.h" #include "Preferences.h" #include "../Utils/Utils.h" #include "../Common/Install.h" #include "../Utils/AtomsProp.h" #include "../Molpro/MolproLib.h" #include "../Molcas/MolcasLib.h" #include "../MPQC/MPQCLib.h" #include "../MolecularMechanics/CreateMolecularMechanicsFile.h" #include "../MolecularMechanics/CreateDefaultPDBTpl.h" #include "../../pixmaps/Gabedit.xpm" #include "../../pixmaps/Book_close.xpm" #include "../../pixmaps/Page.xpm" #ifdef G_OS_WIN32 #include #include #define mkdir(p,m) _mkdir(p) #ifndef S_ISDIR #define S_ISDIR(mode) ((mode)&_S_IFDIR) #endif #endif /* G_OS_WIN32 */ #define PAGE_STYLE(widget) gtk_widget_set_style(widget, page_style) #define TITLE_STYLE(widget) gtk_widget_set_style(widget, title_style) #define NUM_PAGES 12 #define EEK_PAGE (NUM_PAGES - 1) #define WILBER_WIDTH 62 #define USER_INSTALL "" enum { LIST_PIXBUF = 0, LIST_NAME, }; void create_color_surfaces_file(); void set_color_surface(gint,gdouble[]); GtkWidget *create_colorsel_frame(GtkWidget *,gchar*,GtkWidget**); static GdkPixbuf *bookPixbuf = NULL; static GdkPixbuf *pagePixbuf = NULL; static GtkWidget *user_install_dialog = NULL; static GtkWidget *notebook = NULL; static GtkWidget *title_pixmap = NULL; static GtkWidget *title_label = NULL; static GtkWidget *footer_label = NULL; static GtkWidget *log_page = NULL; static GtkWidget *prop_page = NULL; static GtkWidget *commands_network_page = NULL; static GtkWidget *fontscolors_page = NULL; static GtkWidget *colorsurfaces_page = NULL; static GtkWidget *molpro_basis_page = NULL; static GtkWidget *molcas_basis_page = NULL; static GtkWidget *mpqc_basis_page = NULL; static GtkWidget *mm_file_page = NULL; static GtkWidget *continue_button = NULL; static GtkWidget *cancel_button = NULL; static GtkWidget *action_area = NULL; static GtkStyle *title_style = NULL; static GtkStyle *page_style = NULL; static GdkColormap *colormap = NULL; static GdkGC *white_gc = NULL; static GdkColor black_color; static GdkColor white_color; static GdkColor title_color; static struct { gboolean directory; gchar *text; gchar *description; }tree_items[] = { { FALSE, "atomsprop", N_( "The \"atomsprop\" file is used to store atoms properties\n" "that affect GABEDIT's default atoms properties behavior.\n" "You can configured this file with \n" "Setting/Preferences in Gabedit menu." ) }, { FALSE, "commands", N_( "The \"commands\" file is used to store commands\n" "for execute FireFly, Gamess-US, Gaussian, Molcas, Molpro, \nMopac, MPQC, NWChem, Orca, Psicode or Q-Chem program.\n" ) }, { FALSE, "network", N_( "The \"network\" file is used to store network\n" "protocols : ftp, rsh or ssh.\n" ) }, { FALSE, "fonts", N_( "The \"fonts\" file is used to store fonts style\n" ) }, { FALSE, "listfile", N_( "GABEDIT save the recent files.\n" "We save only 20 recent files by type.\n" ) }, { FALSE, "hosts", N_( "GABEDIT save the recent remote hosts information.\n" "We save only 20 recent remote host.\n" ) }, { FALSE, "colorsurfaces", N_( "The \"colorsurfaces\" file is used to store color surfaces(Density, Orbitals,...).\n" ) }, { FALSE, "molprobasis", N_( "GABEDIT uses this file if libmol program is not installed at your local host.\n" "Please note that this file contains the list of basis(only the names of basis)\n" "supported by molpro2002.6.\n" ) }, { FALSE, "molcasbasis", N_( "GABEDIT uses this file for obtain the list of basis available in Molcas.\n" "Please note that this file contains the list of basis(only the names of basis)\n" "supported by Molcas7.\n" ) }, { FALSE, "mpqcBasis", N_( "GABEDIT uses this file for obtain the list of basis available in MPQC.\n" "Please note that this file contains the list of basis(only the names of basis)\n" "supported by MPQC2.2.2\n" ) }, { FALSE, "MolecularMechanics.prm", N_( "GABEDIT uses this file for load Molecular mechanics parameters/\n" ) }, { TRUE, "tmp", N_( "This subdirectory is used by the GABEDIT to store\n" "tempory files." ) } }; static gint num_tree_items = sizeof(tree_items) / sizeof(tree_items[0]); struct stat stat_buf; static gboolean user_install_run(); static void user_install_prop(); static void user_install_prop_done(); static void user_install_commands_network(); static void user_install_commands_network_done(); static void user_install_fontscolors(); static void user_install_fontscolors_done(); static void user_install_colorsurfaces(); static void user_install_colorsurfaces_done(); static void user_install_molpro_basis(); static void user_install_molpro_basis_done(); static void user_install_molcas_basis(); static void user_install_molcas_basis_done(); static void user_install_mpqc_basis(); static void user_install_mpqc_basis_done(); static void user_install_mm_file(); static void user_install_mm_file_done(); /********************************************************************************/ static void set_pixbuf() { if(!bookPixbuf) bookPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) book_close_xpm); if(!pagePixbuf) pagePixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) page_xpm); } /********************************************************************************/ static void user_install_notebook_set_current_page(GtkNotebook *notebook, gint index) { gchar *title; gchar *footer; GtkWidget *page; page = gtk_notebook_get_nth_page(notebook, index); title = g_object_get_data(G_OBJECT(page), "title"); footer = g_object_get_data(G_OBJECT(page), "footer"); gtk_label_set_text(GTK_LABEL(title_label), title); gtk_label_set_text(GTK_LABEL(footer_label), footer); if (index == EEK_PAGE) { gtk_widget_set_size_request(title_pixmap, title_pixmap->allocation.width, title_pixmap->allocation.height); } gtk_notebook_set_current_page(notebook, index); } /********************************************************************************/ static GtkWidget *user_install_notebook_append_page(GtkNotebook *notebook, gchar *title, gchar *footer) { GtkWidget *page; page = gtk_vbox_new(FALSE, 6); g_object_set_data(G_OBJECT(page), "title", title); g_object_set_data(G_OBJECT(page), "footer", footer); gtk_notebook_append_page(notebook, page, NULL); gtk_widget_show(page); return page; } /********************************************************************************/ static void add_label(GtkBox *box, gchar *text) { GtkWidget *label; label = gtk_label_new(text); PAGE_STYLE(label); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_box_pack_start(box, label, FALSE, FALSE, 0); gtk_widget_show(label); } /********************************************************************************/ static void user_install_treeview_select_row(GtkTreeSelection *selection, gpointer data) { GtkTreeIter iter; GtkTreeModel *model; gchar* pathString; gint row = -1; GtkNotebook *notebook; notebook = (GtkNotebook*)data; if (!gtk_tree_selection_get_selected (selection, &model, &iter)) return; pathString =gtk_tree_model_get_string_from_iter(model, &iter); if(strstr(pathString,":")) { gchar* t = strstr(pathString,":")+1; row = 1 + atoi(t); } else row = 0; if(row>=0) gtk_notebook_set_current_page(notebook, row); } /********************************************************************************/ static void user_install_cancel_callback(GtkWidget *widget, gpointer data) { static gint timeout = 0; if (timeout) gtk_main_quit (); gtk_widget_destroy(continue_button); user_install_notebook_set_current_page(GTK_NOTEBOOK(notebook), EEK_PAGE); timeout = g_timeout_add(1024, (GtkFunction)gtk_main_quit, (gpointer)0); } /********************************************************************************/ static gint user_install_corner_expose(GtkWidget *widget, GdkEventExpose *eevent, gpointer data) { switch ((GtkCornerType)data) { case GTK_CORNER_TOP_LEFT: gdk_draw_arc(widget->window, white_gc, TRUE, 0, 0, widget->allocation.width * 2, widget->allocation.height * 2, 90 * 64, 180 * 64); break; case GTK_CORNER_BOTTOM_LEFT: gdk_draw_arc(widget->window, white_gc, TRUE, 0, -widget->allocation.height, widget->allocation.width * 2, widget->allocation.height * 2, 180 * 64, 270 * 64); break; case GTK_CORNER_TOP_RIGHT: gdk_draw_arc(widget->window, white_gc, TRUE, -widget->allocation.width, 0, widget->allocation.width * 2, widget->allocation.height * 2, 0 * 64, 90 * 64); break; case GTK_CORNER_BOTTOM_RIGHT: gdk_draw_arc(widget->window, white_gc, TRUE, -widget->allocation.width, -widget->allocation.height, widget->allocation.width * 2, widget->allocation.height * 2, 270 * 64, 360 * 64); break; default: return FALSE; } return TRUE; } /********************************************************************************/ static void user_install_continue_callback(GtkWidget *widget, gpointer data) { static gint notebook_index = 0; UserInstallCallback callback; callback = (UserInstallCallback)data; switch (notebook_index) { case 0: break; case 1: /* Creating the directories can take some time on NFS, so inform * the user and set the buttons insensitive */ gtk_widget_set_sensitive(continue_button, FALSE); gtk_widget_set_sensitive(cancel_button, FALSE); gtk_label_set_text(GTK_LABEL(footer_label), _("Please wait while your personal\n" "GABEDIT directory is being created...")); while (gtk_events_pending()) gtk_main_iteration(); if (user_install_run()) gtk_widget_set_sensitive(continue_button, TRUE); gtk_widget_set_sensitive(cancel_button, TRUE); break; case 2: user_install_prop(); break; case 3: user_install_prop_done(); user_install_commands_network(); break; case 4: user_install_commands_network_done(); user_install_fontscolors(); break; case 5: user_install_fontscolors_done(); user_install_colorsurfaces(); break; case 6: user_install_colorsurfaces_done(); user_install_molpro_basis(); break; case 7: user_install_molpro_basis_done(); user_install_molcas_basis(); break; case 8: user_install_molcas_basis_done(); user_install_mpqc_basis(); break; case 9: user_install_mpqc_basis_done(); user_install_mm_file(); break; case 10: user_install_mm_file_done(); gtk_widget_destroy(user_install_dialog); g_object_unref(white_gc); g_object_unref(title_style); g_object_unref(page_style); (* callback)(); return; break; case EEK_PAGE: default: g_assert_not_reached(); } if (notebook_index < NUM_PAGES - 1) user_install_notebook_set_current_page(GTK_NOTEBOOK(notebook), ++notebook_index); } /********************************************************************************/ void create_buttons_dialog(GtkWidget* dialog,UserInstallCallback callback) { GtkWidget* button; button = create_button(dialog,_("Cancel")); gtk_box_pack_end (GTK_BOX(action_area), button, FALSE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", G_CALLBACK(user_install_cancel_callback),GTK_OBJECT(dialog)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); cancel_button = button; gtk_widget_show_all (button); button = create_button(dialog,_(" Continue ")); gtk_box_pack_end (GTK_BOX(action_area), button, FALSE, TRUE, 0); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); continue_button = button; g_signal_connect(G_OBJECT(button), "clicked", (GCallback)user_install_continue_callback,callback); gtk_widget_show_all (button); } /********************************************************************************/ void user_install_dialog_create(UserInstallCallback callback) { GtkWidget *dialog; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *ebox; GtkWidget *table; GtkWidget *darea; GtkWidget *page; GtkWidget *sep; PangoFontDescription *large_font_desc; gchar* Version_S = g_strdup_printf("%d.%d.%d",MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION); gchar* temp = NULL; dialog = user_install_dialog = gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(dialog),GTK_WIN_POS_CENTER); gtk_window_set_title(>K_DIALOG(dialog)->window,_("Gabedit User Installation")); gtk_widget_realize (dialog); set_icone(GTK_WIDGET(dialog)); action_area = gtk_hbox_new(FALSE, 8); gtk_box_set_homogeneous(GTK_BOX(action_area), FALSE); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), action_area); /* B/W Style for the page contents */ page_style = gtk_style_copy(gtk_widget_get_default_style()); colormap = gtk_widget_get_colormap(dialog); black_color.red = 0; black_color.green = 0; black_color.blue = 0; gdk_colormap_alloc_color (colormap, &black_color, FALSE, TRUE); white_color.red = 65535; white_color.green = 65535; white_color.blue = 65535; gdk_colormap_alloc_color (colormap, &white_color, FALSE, TRUE); page_style->fg[GTK_STATE_NORMAL] = black_color; page_style->text[GTK_STATE_NORMAL] = black_color; page_style->bg[GTK_STATE_NORMAL] = white_color; /* gdk_font_unref(page_style->font); page_style->font = dialog->style->font; gdk_font_ref(page_style->font); */ /* B/Colored Style for the page title */ title_style = gtk_style_copy(page_style); if (gdk_color_parse("royal blue", &title_color) && gdk_colormap_alloc_color(colormap, &title_color, FALSE, TRUE)) { title_style->bg[GTK_STATE_NORMAL] = title_color; } large_font_desc = pango_font_description_from_string ("sans bold 20"); if (large_font_desc) { title_style->font_desc = large_font_desc; } /* W/W GC for the corner */ white_gc = gdk_gc_new(dialog->window); gdk_gc_set_foreground(white_gc, &white_color); TITLE_STYLE(dialog); footer_label = gtk_label_new(NULL); PAGE_STYLE(footer_label); gtk_label_set_justify(GTK_LABEL(footer_label), GTK_JUSTIFY_RIGHT); gtk_box_pack_start(GTK_BOX(action_area), footer_label, FALSE, FALSE, 8); gtk_widget_show(footer_label); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), vbox); ebox = gtk_event_box_new(); TITLE_STYLE(ebox); gtk_widget_set_events(ebox, GDK_EXPOSURE_MASK); gtk_widget_set_size_request(ebox, WILBER_WIDTH + 16, -1); gtk_box_pack_start(GTK_BOX(vbox), ebox, FALSE, FALSE, 0); gtk_widget_show(ebox); hbox = gtk_hbox_new(FALSE, 8); gtk_container_set_border_width(GTK_CONTAINER(hbox), 8); gtk_container_add(GTK_CONTAINER(ebox), hbox); gtk_widget_show(hbox); title_pixmap = create_pixmap(dialog,gabedit_xpm); gtk_box_pack_start(GTK_BOX(hbox), title_pixmap, FALSE, FALSE, 8); gtk_widget_show(title_pixmap); title_label = gtk_label_new(NULL); TITLE_STYLE(title_label); gtk_label_set_justify(GTK_LABEL(title_label), GTK_JUSTIFY_LEFT); gtk_box_pack_start(GTK_BOX(hbox), title_label, FALSE, FALSE, 0); gtk_widget_show(title_label); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); gtk_widget_show(hbox); ebox = gtk_event_box_new(); TITLE_STYLE(ebox); gtk_widget_set_size_request(ebox, 16, -1); gtk_box_pack_start(GTK_BOX(hbox), ebox, FALSE, FALSE, 0); gtk_widget_show(ebox); ebox = gtk_event_box_new(); PAGE_STYLE(ebox); gtk_box_pack_start(GTK_BOX(hbox), ebox, TRUE, TRUE, 0); gtk_widget_show(ebox); table = gtk_table_new(3, 3, FALSE); gtk_table_set_col_spacing(GTK_TABLE(table), 1, 8); gtk_container_add(GTK_CONTAINER(ebox), table); gtk_widget_show(table); darea = gtk_drawing_area_new(); TITLE_STYLE(darea); gtk_widget_set_size_request(GTK_WIDGET(darea), 16, 16); g_signal_connect_after(G_OBJECT(darea), "expose_event", (GCallback)user_install_corner_expose, (gpointer)GTK_CORNER_TOP_LEFT); gtk_table_attach(GTK_TABLE(table), darea, 0,1, 0,1, GTK_SHRINK, GTK_SHRINK, 0, 0); gtk_widget_show(darea); darea = gtk_drawing_area_new(); TITLE_STYLE(darea); gtk_widget_set_size_request(GTK_WIDGET(darea), 16, 16); g_signal_connect_after(G_OBJECT(darea), "expose_event", (GCallback)user_install_corner_expose, (gpointer)GTK_CORNER_BOTTOM_LEFT); gtk_table_attach(GTK_TABLE(table), darea, 0,1, 2,3, GTK_SHRINK, GTK_SHRINK, 0, 0); gtk_widget_show(darea); notebook = gtk_notebook_new(); gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), FALSE); gtk_notebook_set_show_border(GTK_NOTEBOOK(notebook), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), notebook, 1,2, 1,2); gtk_widget_show(notebook); gtk_widget_show(vbox); /* Page 1 */ temp = g_strdup_printf("Welcome to The GABEDIT %s User Installation",Version_S); g_free(Version_S); page = user_install_notebook_append_page(GTK_NOTEBOOK(notebook), temp, _("Click \"Continue\" to enter the GABEDIT user installation.")); add_label(GTK_BOX(page), _( "Gabedit is a Graphical User Interface to FireFly, Gamess-US, Gaussian, Molcas, Molpro, \nMopac, MPQC , NWChem, Orca, Psicode and Q-Chem\n" "computational chemistry packages.\n" "It can display a variety of calculation results including support for most major molecular file formats.\n" "The advanced 'Molecule Builder' allows to rapidly sketch in molecules and examine them in 3D\n" "Graphics can be exported to various formats, including animations\n" "\n" "Gabedit can creates input file for the computational chemistry packages(CCP) cited above.\n" "Gabedit can graphically display a variety of the CCP calculation results\n" "Gabedit can display UV-Vis, IR and Raman computed spectra.\n" "Gabedit can generate a povray file for geometry, surfaces, contours, planes colorcoded.\n" "Gabedit can save picture in BMP, JPEG, PNG, PPM, PDF and PS format.\n" "It can generate automatically a series of pictures for animation(vibration, geometry convergence, ....).\n" ) ); sep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(page), sep, FALSE, FALSE, 2); gtk_widget_show(sep); add_label(GTK_BOX(page), _( "Copyright (c) 2002-2017 Abdul-Rahman Allouche.\n" "All rights reserved.\n" "\nGabedit is free.\n" ) ); /* Page 2 */ { GtkWidget *hbox; GtkWidget *vbox; GtkWidget *notebook2; GtkWidget *page2; GtkWidget *label; GtkTreeIter main_node; GtkTreeIter sub_node; gchar *str; GtkTreeStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkWidget* treeView; GtkTreeSelection *select; gint i; gchar *node[1]; set_pixbuf(); page = user_install_notebook_append_page(GTK_NOTEBOOK(notebook), _("Personal GABEDIT Directory"), _( "Click \"Continue\" to create " "your personal GABEDIT directory.") ); hbox = gtk_hbox_new(FALSE, 8); gtk_box_pack_start(GTK_BOX(page), hbox, FALSE, FALSE, 0); gtk_widget_show(hbox); store = gtk_tree_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING); model = GTK_TREE_MODEL (store); treeView = gtk_tree_view_new_with_model (model); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeView), FALSE); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeView), FALSE); PAGE_STYLE(treeView); column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, " "); gtk_tree_view_column_set_reorderable(column, FALSE); renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_add_attribute (column, renderer, "pixbuf", LIST_PIXBUF); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_add_attribute (column, renderer, "text", LIST_NAME); gtk_tree_view_append_column (GTK_TREE_VIEW (treeView), column); gtk_box_pack_start(GTK_BOX(hbox), treeView, FALSE, FALSE, 0); gtk_widget_show(treeView); vbox = gtk_vbox_new(FALSE, 6); gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); gtk_widget_show(vbox); str = g_strdup_printf(_("For a proper GABEDIT installation, a subdirectory named\n" "%s needs to be created."), gabedit_directory()); add_label(GTK_BOX(vbox), str); g_free(str); add_label(GTK_BOX(vbox), _( "This subdirectory will contain a number of important files.\n" "Click on one of the files or subdirectories in the tree\n" "to get more information about the selected item." ) ); notebook2 = gtk_notebook_new(); gtk_container_set_border_width(GTK_CONTAINER(notebook2), 8); gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook2), FALSE); gtk_notebook_set_show_border(GTK_NOTEBOOK(notebook2), FALSE); gtk_box_pack_start(GTK_BOX(vbox), notebook2, TRUE, TRUE, 0); gtk_widget_show(notebook2); /* empty page */ page2 = gtk_vbox_new(FALSE, 0); gtk_widget_show(page2); gtk_notebook_append_page(GTK_NOTEBOOK(notebook2), page2, NULL); node[0] = (gchar *)gabedit_directory(); gtk_tree_store_append(store, &main_node, NULL); gtk_tree_store_set (store, &main_node, LIST_NAME, node[0], -1); gtk_tree_store_set (store, &main_node, LIST_PIXBUF, bookPixbuf, -1); select = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeView)); gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE); g_signal_connect (G_OBJECT (select), "changed", G_CALLBACK (user_install_treeview_select_row), notebook2); for (i = 0; i < num_tree_items; i++) { node[0] = tree_items[i].text; if (tree_items[i].directory) { gtk_tree_store_append(store, &sub_node, &main_node); gtk_tree_store_set (store, &sub_node, LIST_NAME, node[0], -1); gtk_tree_store_set (store, &sub_node, LIST_PIXBUF, bookPixbuf, -1); } else { gtk_tree_store_append(store, &sub_node, &main_node); gtk_tree_store_set (store, &sub_node, LIST_NAME, node[0], -1); gtk_tree_store_set (store, &sub_node, LIST_PIXBUF, pagePixbuf, -1); } page2 = gtk_vbox_new(FALSE, 0); label = gtk_label_new(tree_items[i].description); PAGE_STYLE(label); PAGE_STYLE(label); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_box_pack_start(GTK_BOX(page2), label, TRUE, TRUE, 0); gtk_widget_show(label); gtk_widget_show(page2); gtk_notebook_append_page(GTK_NOTEBOOK(notebook2), page2, NULL); } { GtkTreePath *path = gtk_tree_path_new_from_string ("0"); gtk_tree_view_expand_to_path(GTK_TREE_VIEW(treeView), path); gtk_tree_path_free(path); } } /* Page 3 */ page = log_page = user_install_notebook_append_page(GTK_NOTEBOOK(notebook), _("Creation of Directories"), NULL); /* Page 4 */ page = prop_page = user_install_notebook_append_page(GTK_NOTEBOOK(notebook), _("GABEDIT Atoms Properties"), _("Click \"Continue\" to accept the settings above.")); add_label(GTK_BOX(page),_("Setting for atoms properties.")); sep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(page), sep, FALSE, FALSE, 2); gtk_widget_show(sep); /* Page 5 */ page = commands_network_page = user_install_notebook_append_page(GTK_NOTEBOOK(notebook), _("GABEDIT Commands/Network"), _("Click \"Continue\" to accept the settings above.")); add_label(GTK_BOX(commands_network_page), _( "To execute FireFly, Gamess-US, Gaussian, Molcas, Molpro, \nMopac, MPQC, NWChem, Orca, Psicode and Q-Chem program, " "GABEDIT needs to know commands system.\n" "GABEDIT needs to know network protocols.\n" "You can change them after installation (Settings/Preferences)." ) ); sep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(page), sep, FALSE, FALSE, 2); gtk_widget_show (sep); /* Page 6 */ page = fontscolors_page = user_install_notebook_append_page(GTK_NOTEBOOK(notebook), _("GABEDIT Fonts/Colors setting"), _("Click \"Continue\" to accept the settings above.")); add_label(GTK_BOX(fontscolors_page), _( "Setting for Text Font and Text Colors, " "GABEDIT needs to know the defaults Fonts/Colors for Data and Result editors." ) ); sep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(page), sep, FALSE, FALSE, 2); gtk_widget_show (sep); /* Page 7 */ page = colorsurfaces_page = user_install_notebook_append_page(GTK_NOTEBOOK(notebook), _("GABEDIT Color Surfaces setting"), _("Click \"Continue\" to accept the settings above.")); add_label(GTK_BOX(colorsurfaces_page), _("Setting for color surfaces, " "GABEDIT needs to know the defaults Color for surfaces(density,Orbitals,....)." ) ); sep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(page), sep, FALSE, FALSE, 2); gtk_widget_show (sep); /* Page 8 */ page = molpro_basis_page = user_install_notebook_append_page(GTK_NOTEBOOK(notebook), _("GABEDIT creation of molpro basis list file"), _("Click \"Continue\" for next page.")); add_label(GTK_BOX(molpro_basis_page), _( "If the libmol program (delivered with molpro) is not installed on your local host,\n" "GABEDIT uses this file for get the list of basis(only the names of basis)supported by molpro.\n" "Please note that this file contains the list of basis supported by molpro2002.6." ) ); /* Page 9 */ page = molcas_basis_page = user_install_notebook_append_page(GTK_NOTEBOOK(notebook), _("GABEDIT creation of molcas basis list file"), _("Click \"Continue\" for next page.")); add_label(GTK_BOX(molcas_basis_page), _( "GABEDIT uses this file for get the list of basis(only the names of basis)supported by molcas.\n" "Please note that this file contains the list of basis supported by Molcas7." ) ); /* Page 10 */ page = mpqc_basis_page = user_install_notebook_append_page(GTK_NOTEBOOK(notebook), _("GABEDIT creation of mpqc basis list file"), _("Click \"Continue\" for next page.")); add_label(GTK_BOX(mpqc_basis_page), _( "GABEDIT uses this file for get the list of basis(only the names of basis)supported by MPQC.\n" "Please note that this file contains the list of basis supported by MPQC2.2.2." ) ); /* Page 11 */ page = mm_file_page = user_install_notebook_append_page(GTK_NOTEBOOK(notebook), _("GABEDIT creation of Molecular Mechanics file"), _("Click \"Continue\" to start GABEDIT.")); add_label(GTK_BOX(mm_file_page), _("Gabedit use this file for load molecular mechanics parameters ")); /* EEK page */ page = user_install_notebook_append_page(GTK_NOTEBOOK(notebook), _("Aborting Installation..."), NULL); user_install_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0); create_buttons_dialog(dialog,callback); gtk_widget_show_all(dialog); } /********************************************************************************/ void user_install_verify(UserInstallCallback user_install_callback) { gboolean properly_installed = TRUE; const gchar *filename; struct stat stat_buf; filename = gabedit_directory(); if (stat(filename, &stat_buf) != 0) properly_installed = FALSE; /* If there is already a proper installation, invoke the callback */ if (properly_installed) (* user_install_callback)(); else user_install_dialog_create(user_install_callback); } /********************************************************************************/ /* Local functions */ static gboolean user_install_run() { #ifndef G_OS_WIN32 FILE *pfp; #endif gchar *str; gchar *t1; gchar *t2; gint i; GtkWidget *table; GtkWidget *log_text; #ifdef G_OS_WIN32 gint Ok = 1; t1 = g_strdup_printf("%s",gabedit_directory()); str = g_strdup_printf("%s %s","mkdir", gabedit_directory()); Ok = 1; if (mkdir (t1, 0755) < 0) Ok = 0; if(Ok) for(i=0;i #include #include #include #include #include #include "../Files/GabeditFileChooser.h" #include "../Common/GabeditType.h" #define NBNOD GABEDIT_TYPENODE_OTHER + 1 #define PROG_IS_DEMON GABEDIT_TYPENODE_DEMON #define PROG_IS_GAMESS GABEDIT_TYPENODE_GAMESS #define PROG_IS_GAUSS GABEDIT_TYPENODE_GAUSSIAN #define PROG_IS_MOLCAS GABEDIT_TYPENODE_MOLCAS #define PROG_IS_MOLPRO GABEDIT_TYPENODE_MOLPRO #define PROG_IS_MPQC GABEDIT_TYPENODE_MPQC #define PROG_IS_ORCA GABEDIT_TYPENODE_ORCA #define PROG_IS_FIREFLY GABEDIT_TYPENODE_FIREFLY #define PROG_IS_QCHEM GABEDIT_TYPENODE_QCHEM #define PROG_IS_NWCHEM GABEDIT_TYPENODE_NWCHEM #define PROG_IS_PSICODE GABEDIT_TYPENODE_PSICODE #define PROG_IS_MOPAC GABEDIT_TYPENODE_MOPAC #define PROG_IS_OTHER -1 #define GEOM_IS_XYZ GABEDIT_TYPENODE_XYZ #define GEOM_IS_ZMAT GABEDIT_TYPENODE_GZMAT #define GEOM_IS_OTHER -1 #define DATA_MOD_YES 1 #define DATA_MOD_NO 0 #define MAJOR_VERSION 2 #define MINOR_VERSION 5 #define MICRO_VERSION 0 /**** Structures *********/ typedef struct _FileOpen { gchar *projectname; /* without .com or .log or .molden */ gchar *datafile; gchar *outputfile; gchar *logfile; gchar *moldenfile; gchar *localhost; gchar *localdir; gchar *remotehost; gchar *remoteuser; gchar *remotepass; gchar *remotedir; gchar *command; GabEditNetWork netWorkProtocol; }FileOpen; typedef struct _FontsStyle { gchar *fontname; GdkColor BaseColor; GdkColor TextColor; }FontsStyle; typedef struct _WidgetChildren { gint nchildren; GtkWidget **children; GabeditSignalFunc *destroychildren; }WidgetChildren; typedef struct _User { gint ndirs; gchar *username; gchar *password; gchar **dirs; }User; typedef struct _Host { gint nusers; gchar *hostname; User *users; }Host; typedef struct _RecentHosts { gint nhosts; Host *hosts; }RecentHosts; typedef struct _CommandsList { gint numberOfCommands; gint numberOfDefaultCommand; gchar** commands; }CommandsList; typedef struct _CommandsBatch { gint numberOfTypes; gchar** types; gchar** commandListAll; gchar** commandListUser; gchar** commandKill; gchar** jobIdTitle; }CommandsBatch; /**** Global variables *********/ GtkWidget *Fenetre; GtkWidget *vboxlistfiles; GtkWidget *vboxtexts; GtkWidget *vboxmain; GtkWidget *BarreMenu; GtkWidget *text; GtkWidget *treeViewProjects; GtkTreeIter *noeud[NBNOD]; GtkWidget *NoteBookText; GtkWidget *NoteBookInfo; GtkWidget *TextOutput; GtkWidget *TextError; GtkWidget *textresult; GtkWidget *HboxWins; GtkWidget *FrameWins; GtkWidget *FrameList; GtkWidget *Hpaned; GtkWidget *ResultEntryPass; GtkWidget *ResultLocalFrame; GtkWidget *ResultRemoteFrame; gint iedit; gint imodif; gint iframe; gchar *NameCommandGamess; gchar *NameCommandGaussian; gchar *NameCommandMolcas; gchar *NameCommandMolpro; gchar *NameCommandMPQC; gchar *NameCommandFireFly; gchar *NameCommandQChem; gchar *NameCommandOrca; gchar *NameCommandDeMon; gchar *NameCommandNWChem; gchar *NameCommandPsicode; gchar *NameCommandMopac; gchar *NameCommandPovray; gint ScreenWidth; gint ScreenHeight; FontsStyle FontsStyleData; FontsStyle FontsStyleResult; FontsStyle FontsStyleOther; FontsStyle FontsStyleLabel; RecentHosts recenthosts; int iprogram; gboolean MeasureIsHide; FileOpen fileopen; gchar* lastdirectory; GabEditNetWork defaultNetWorkProtocol; gchar* pscpCommand; gchar* plinkCommand; gchar* pscpplinkDirectory; gchar* babelCommand; gchar* gamessDirectory; gchar* fireflyDirectory; gchar* orcaDirectory; gchar* demonDirectory; gchar* nwchemDirectory; gchar* psicodeDirectory; gchar* mopacDirectory; gchar* gaussDirectory; gchar* povrayDirectory; gchar* openbabelDirectory; CommandsList demonCommands; CommandsList gamessCommands; CommandsList gaussianCommands; CommandsList molcasCommands; CommandsList molproCommands; CommandsList mpqcCommands; CommandsList orcaCommands; CommandsList nwchemCommands; CommandsList psicodeCommands; CommandsList fireflyCommands; CommandsList qchemCommands; CommandsList mopacCommands; CommandsList povrayCommands; gchar *NameTypeBatch; gchar *NameCommandBatchAll; gchar *NameCommandBatchUser; gchar *NameCommandBatchKill; gchar *NamejobIdTitleBatch; CommandsBatch batchCommands; OpenGLOptions openGLOptions; gint colorMapType; gdouble colorMapColors[3][3]; gdouble alpha_opacity; gdouble multipole_rank; #endif /* __GABEDIT_GLOBAL_H__ */ GabeditSrc250/src/Common/TextEdit.h0000644000175100017510000000323413130665225017417 0ustar alloucheallouche/* TextEdit.h */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_TEXTEDIT_H__ #define __GABEDIT_TEXTEDIT_H__ GtkStyle *set_text_style(GtkWidget *text,gushort red,gushort green,gushort blue); GtkStyle *set_base_style(GtkWidget *text,gushort red,gushort green,gushort blue); void set_font (GtkWidget *view, gchar *fontname); void find_text_win(); void cree_text_notebook(); #endif /* __GABEDIT_TEXTEDIT_H__ */ GabeditSrc250/src/Common/TextEdit.c0000644000175100017510000003200213130665225017405 0ustar alloucheallouche/* TextEdit.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/GabeditTextEdit.h" #include "../Geometry/ResultsAnalise.h" #include "Windows.h" #define COUPER 7 #define COPIER 8 #define COLLER 9 #define SELECTALL 10 #define FIND 11 #define DIML 10 /********************************************************************************/ gchar *liste[DIML]; guint nliste = 1; void find_text_win(); /******************************************************************************/ static void change_liste(G_CONST_RETURN gchar *str) { gboolean OK; guint i; OK=FALSE; for(i=0;i0;i--) liste[i]=liste[i-1]; liste[0]=g_strdup(str); } } /********************************************************************************/ static void find_text_forward(GtkWidget *wid,gpointer entry) { GtkWidget* view; GtkWidget* label; gchar* t; G_CONST_RETURN gchar *str; guint i; gint n; str = gtk_entry_get_text(GTK_ENTRY(entry)); change_liste(str); i=gtk_notebook_get_current_page(GTK_NOTEBOOK(NoteBookText)); view = text; if(i==1)view = textresult; label = g_object_get_data(G_OBJECT (entry), "Label"); gtk_label_set_text(GTK_LABEL(label)," "); n = gabedit_text_search_forward(view, str); if(n>0) t = g_strdup_printf(_(" %d strings found and marked in red"),n); else t = g_strdup_printf(_(" no strings found")); gtk_label_set_text(GTK_LABEL(label),t); g_free(t); } /********************************************************************************/ static void find_text_backward(GtkWidget *wid,gpointer entry) { GtkWidget* view; GtkWidget* label; gchar* t; G_CONST_RETURN gchar *str; guint i; gint n; str = gtk_entry_get_text(GTK_ENTRY(entry)); change_liste(str); i=gtk_notebook_get_current_page(GTK_NOTEBOOK(NoteBookText)); view = text; if(i==1)view = textresult; label = g_object_get_data(G_OBJECT (entry), "Label"); gtk_label_set_text(GTK_LABEL(label)," "); n = gabedit_text_search_backward(view, str); if(n>0) t = g_strdup_printf(_(" %d strings found and marked in red"),n); else t = g_strdup_printf(_(" no strings found")); gtk_label_set_text(GTK_LABEL(label),t); g_free(t); } /*****************************************************************************************/ static void find_text_all(GtkWidget *wid,gpointer entry) { GtkWidget* view; GtkWidget* label; gchar* t; G_CONST_RETURN gchar *str; guint i; gint n; str = gtk_entry_get_text(GTK_ENTRY(entry)); change_liste(str); i=gtk_notebook_get_current_page(GTK_NOTEBOOK(NoteBookText)); view = text; if(i==1)view = textresult; label = g_object_get_data(G_OBJECT (entry), "Label"); gtk_label_set_text(GTK_LABEL(label)," "); n = gabedit_text_search_all(view, str); if(n>0) t = g_strdup_printf(_(" %d strings found and marked in red"),n); else t = g_strdup_printf(_(" no strings found")); gtk_label_set_text(GTK_LABEL(label),t); g_free(t); } /*****************************************************************************************/ GtkWidget *create_combo_box_entry_liste_find(GtkWidget* Window,GtkWidget* hbox,gchar *lname,gchar **liste,int n) { int i; GtkWidget *label; GtkWidget *combo; GtkWidget *combo_entry; GList *combo_items = NULL; label = gtk_label_new (lname); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE,FALSE, 2); combo = gtk_combo_box_entry_new_text (); gtk_widget_set_size_request(combo, (gint)(ScreenHeight*0.150), -1); gtk_widget_show (combo); gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 2); for (i=0;ichild; gtk_widget_show (combo_entry); gtk_entry_set_text (GTK_ENTRY (combo_entry), liste[0]); return combo_entry; } /*****************************************************************************************/ void find_text_win() { GtkWidget *fp; GtkWidget *frame; GtkWidget *entry; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox1; GtkWidget *hbox2; GtkWidget *button; GtkWidget *label; GtkWidget *hseparator; if(nliste==1)liste[0]=g_strdup(""); fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Fenetre)); gtk_window_set_title(GTK_WINDOW(fp),"Search"); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Fenetre)); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); g_signal_connect(G_OBJECT(fp), "delete_event", (GCallback)destroy_button_windows, NULL); g_signal_connect(G_OBJECT(fp), "delete_event", (GCallback)gtk_widget_destroy, NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (_("FIND")); gtk_container_set_border_width (GTK_CONTAINER (frame), 2); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox1 = gtk_hbox_new (FALSE, 5); g_object_ref (hbox1); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (vboxframe), hbox1, FALSE, FALSE, 2); entry= create_combo_box_entry_liste_find(fp,hbox1,_(" String to find :"),liste,nliste); hseparator = gtk_hseparator_new (); gtk_widget_show (hseparator); gtk_box_pack_start (GTK_BOX (vboxframe), hseparator, FALSE, FALSE, 1); label = gtk_label_new(" "); gtk_box_pack_start (GTK_BOX (vboxframe), label, FALSE, FALSE, 4); g_object_set_data(G_OBJECT (entry), "Label", label); hbox2 = gtk_hbox_new (TRUE, 0); g_object_ref (hbox2); gtk_widget_show (hbox2); gtk_box_pack_start (GTK_BOX (vboxall), hbox2, FALSE, FALSE, 4); button = gtk_button_new_with_label (_("All")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(find_text_all),(gpointer)entry); button = gtk_button_new_with_label (_("Forward")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(find_text_forward),(gpointer)entry); button = gtk_button_new_with_label (_("Backward")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(find_text_backward),(gpointer)entry); button = gtk_button_new_with_label ("Close"); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button),"clicked", (GCallback)destroy_button_windows, GTK_OBJECT(fp)); g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(fp)); gtk_widget_show (button); add_button_windows(_(" Find "),fp); gtk_widget_show_all(fp); } /*****************************************************************************************/ GtkWidget *AddBarResult(GtkWidget *Frame) { GtkWidget *hboxframe; GtkWidget *frame; GtkWidget *vbox; /* For result NoteBook */ hboxframe = gtk_hbox_new (FALSE, 0); gtk_widget_show (hboxframe); gtk_container_add(GTK_CONTAINER(Frame),hboxframe); vbox = gtk_vbox_new (TRUE, 0); gtk_widget_show (vbox); gtk_box_pack_start (GTK_BOX(hboxframe), vbox, TRUE, TRUE, 2); frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(frame), 2); gtk_container_add(GTK_CONTAINER(vbox),frame); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_box_pack_start (GTK_BOX(hboxframe), vbox, FALSE, FALSE, 2); create_bar_result(vbox); return frame; } /*****************************************************************************************/ void AjoutePageNotebook(char *label,GtkWidget **TextP) { GtkWidget *scrolledwindow; GtkWidget *Frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkStyle *stylered; GtkStyle *styledef; Frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(Frame), 2); LabelOnglet = gtk_label_new(label); LabelMenu = gtk_label_new(label); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBookText), Frame, LabelOnglet, LabelMenu); g_object_set_data(G_OBJECT (Frame), "Frame", Frame); if(strcmp(label,_("Data")) ) Frame = AddBarResult(Frame); scrolledwindow = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow); gtk_container_add (GTK_CONTAINER (Frame), scrolledwindow); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_NEVER,GTK_POLICY_AUTOMATIC ); *TextP = gabedit_text_new (); set_tab_size (*TextP, 8); /* gabedit_text_set_word_wrap (GABEDIT_TEXT(*TextP), FALSE);*/ /* GABEDIT_TEXT(*TextP)->default_tab_width=7; */ g_object_ref (*TextP); g_object_set_data_full (G_OBJECT (Frame), "text", *TextP, (GDestroyNotify) g_object_unref); gtk_widget_show (*TextP); gtk_container_add (GTK_CONTAINER (scrolledwindow), *TextP); g_object_set_data(G_OBJECT (*TextP), "LabelOnglet", LabelOnglet); if( !strcmp(label,_("Data")) ) { static guint start_pos = 0; static guint end_pos = 0; styledef = gtk_style_copy(LabelOnglet->style); stylered = gtk_style_copy(LabelOnglet->style); stylered->fg[0].red=65535; stylered->fg[0].green=0; stylered->fg[0].blue=0; g_object_set_data(G_OBJECT (*TextP), "StyleDef", styledef); g_object_set_data(G_OBJECT (*TextP), "StyleRed", stylered); g_object_set_data(G_OBJECT (*TextP), "StartPos", &start_pos); g_object_set_data(G_OBJECT (*TextP), "EndPos", &end_pos); } } /*****************************************************************************************/ void view_result_calcul(GtkWidget *noteb,gpointer d) { int numpage; numpage = gtk_notebook_get_current_page ((GtkNotebook *)noteb); if(numpage == 0) get_result(); } /*****************************************************************************************/ void set_imodif(GtkWidget *wid, gpointer data) { data_modify(TRUE); } /*****************************************************************************************/ void cree_text_notebook() { GtkWidget *hbox; hbox =create_hbox_false(vboxtexts); iedit=1; NoteBookText = gtk_notebook_new(); g_object_set_data_full (G_OBJECT (NoteBookText), "Fenetre", Fenetre, (GDestroyNotify) g_object_unref); g_signal_connect(G_OBJECT(NoteBookText),"switch_page", (GCallback)view_result_calcul,NULL); gtk_box_pack_start(GTK_BOX (vboxtexts), NoteBookText,TRUE, TRUE, 0); AjoutePageNotebook(_("Data"),&text); gabedit_text_set_editable (GABEDIT_TEXT (text), TRUE); set_font (text,FontsStyleData.fontname); set_base_style(text,FontsStyleData.BaseColor.red ,FontsStyleData.BaseColor.green ,FontsStyleData.BaseColor.blue); set_text_style(text,FontsStyleData.TextColor.red ,FontsStyleData.TextColor.green ,FontsStyleData.TextColor.blue); AjoutePageNotebook(_("Result"),&textresult); gabedit_text_set_editable (GABEDIT_TEXT (textresult), TRUE); set_font (textresult,FontsStyleResult.fontname); set_base_style(textresult,FontsStyleResult.BaseColor.red ,FontsStyleResult.BaseColor.green ,FontsStyleResult.BaseColor.blue); set_text_style(textresult,FontsStyleResult.TextColor.red ,FontsStyleResult.TextColor.green ,FontsStyleResult.TextColor.blue); { GtkTextBuffer *buffer; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); if(buffer) g_signal_connect(G_OBJECT(buffer),"changed", (GCallback)set_imodif,NULL); } } /*****************************************************************************************/ GabeditSrc250/src/Common/Printer.h0000644000175100017510000000315213130665225017307 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_PRINTER_H__ #define __GABEDIT_PRINTER_H__ typedef struct _EntryPrint { GtkWidget* FileToPrint; GtkWidget* PrinterName; GtkWidget* NbCopies; GtkWidget* Orientation; GtkWidget* Format; GtkWidget* NbSheets; GtkWidget* FileToCreate; }EntryPrint; void create_print_page(); #endif /* __GABEDIT_PRINTER_H__ */ GabeditSrc250/src/Common/GabeditType.h0000644000175100017510000002532513130665225020073 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GABEDITTYPE_H__ #define __GABEDIT_GABEDITTYPE_H__ #define MAXISOTOP 10 typedef void (*GabeditSignalFunc)(GtkWidget*); typedef enum { GABEDIT_NETWORK_FTP_RSH = 0, GABEDIT_NETWORK_SSH } GabEditNetWork; typedef struct _SAtomsProp { gchar *name; gchar *symbol; guint atomicNumber; gdouble covalentRadii; gdouble bondOrderRadii; gdouble vanDerWaalsRadii; gdouble radii; guint maximumBondValence; gdouble masse; gdouble electronegativity; GdkColor color; gint nIsotopes; gint iMass[MAXISOTOP]; gdouble rMass[MAXISOTOP]; gdouble abundances[MAXISOTOP]; }SAtomsProp; typedef enum { GABEDIT_TYPEWIN_GEOM, GABEDIT_TYPEWIN_ORB, GABEDIT_TYPEWIN_OTHER, } GabEditTypeWin; typedef enum { GABEDIT_TYPETEXTURE_1, GABEDIT_TYPETEXTURE_2, GABEDIT_TYPETEXTURE_3, GABEDIT_TYPETEXTURE_NONE } GabEditTypeTexture; typedef enum { GABEDIT_TYPENODE_DEMON=0, GABEDIT_TYPENODE_FIREFLY, GABEDIT_TYPENODE_GAMESS, GABEDIT_TYPENODE_GAUSSIAN, GABEDIT_TYPENODE_MOLCAS, GABEDIT_TYPENODE_MOLPRO, GABEDIT_TYPENODE_MOPAC, GABEDIT_TYPENODE_MPQC, GABEDIT_TYPENODE_NWCHEM, GABEDIT_TYPENODE_PSICODE, GABEDIT_TYPENODE_ORCA, GABEDIT_TYPENODE_QCHEM, GABEDIT_TYPENODE_GABEDIT, GABEDIT_TYPENODE_XYZ, GABEDIT_TYPENODE_MOL2, GABEDIT_TYPENODE_TINKER, GABEDIT_TYPENODE_PDB, GABEDIT_TYPENODE_GZMAT, GABEDIT_TYPENODE_MZMAT, GABEDIT_TYPENODE_HIN, GABEDIT_TYPENODE_OTHER } GabEditTypeNode; typedef enum { GABEDIT_TYPEFILE_GAUSSIAN, GABEDIT_TYPEFILE_GAUSSIAN_ANHARMONIC, GABEDIT_TYPEFILE_MOLCAS, GABEDIT_TYPEFILE_MOLPRO, GABEDIT_TYPEFILE_DALTON, GABEDIT_TYPEFILE_DEMON, GABEDIT_TYPEFILE_GAMESS, GABEDIT_TYPEFILE_GAMESS_ANHARMONIC, GABEDIT_TYPEFILE_TURBOMOLE, GABEDIT_TYPEFILE_MOLPRO_LOG, GABEDIT_TYPEFILE_MOLDEN, GABEDIT_TYPEFILE_GABEDIT, GABEDIT_TYPEFILE_MOBCAL, GABEDIT_TYPEFILE_XYZ, GABEDIT_TYPEFILE_GAMESSIRC, GABEDIT_TYPEFILE_MOL2, GABEDIT_TYPEFILE_MOL, GABEDIT_TYPEFILE_TINKER, GABEDIT_TYPEFILE_PDB, GABEDIT_TYPEFILE_GZMAT, GABEDIT_TYPEFILE_MZMAT, GABEDIT_TYPEFILE_HIN, GABEDIT_TYPEFILE_AIMALL, GABEDIT_TYPEFILE_CCHEMI, GABEDIT_TYPEFILE_DEMONINPUT, GABEDIT_TYPEFILE_GAMESSINPUT, GABEDIT_TYPEFILE_GAUSSIANINPUT, GABEDIT_TYPEFILE_GAUSSIAN_FCHK, GABEDIT_TYPEFILE_MOLCASINPUT, GABEDIT_TYPEFILE_MOLPROINPUT, GABEDIT_TYPEFILE_MPQCINPUT, GABEDIT_TYPEFILE_ORCAINPUT, GABEDIT_TYPEFILE_FIREFLYINPUT, GABEDIT_TYPEFILE_QCHEMINPUT, GABEDIT_TYPEFILE_NWCHEMINPUT, GABEDIT_TYPEFILE_PSICODEINPUT, GABEDIT_TYPEFILE_MOPACINPUT, GABEDIT_TYPEFILE_MPQC, GABEDIT_TYPEFILE_JPEG, GABEDIT_TYPEFILE_PPM, GABEDIT_TYPEFILE_BMP, GABEDIT_TYPEFILE_PNG, GABEDIT_TYPEFILE_TIF, GABEDIT_TYPEFILE_PS, GABEDIT_TYPEFILE_ADF, GABEDIT_TYPEFILE_ORCA, GABEDIT_TYPEFILE_VASPOUTCAR, GABEDIT_TYPEFILE_VASPPOSCAR, GABEDIT_TYPEFILE_VASPXML, GABEDIT_TYPEFILE_FIREFLY, GABEDIT_TYPEFILE_QCHEM, GABEDIT_TYPEFILE_NWCHEM, GABEDIT_TYPEFILE_PSICODE, GABEDIT_TYPEFILE_MOPAC, GABEDIT_TYPEFILE_MOPAC_AUX, GABEDIT_TYPEFILE_MOPAC_SCAN, GABEDIT_TYPEFILE_MOPAC_IRC, GABEDIT_TYPEFILE_CUBEGAUSS, GABEDIT_TYPEFILE_CUBEMOLPRO, GABEDIT_TYPEFILE_CUBEADF, GABEDIT_TYPEFILE_MOLCASGRID, GABEDIT_TYPEFILE_CUBEMOLCAS, GABEDIT_TYPEFILE_CUBEQCHEM, GABEDIT_TYPEFILE_CUBEGABEDIT, GABEDIT_TYPEFILE_CUBEDX, GABEDIT_TYPEFILE_TRJ, GABEDIT_TYPEFILE_TXT, GABEDIT_TYPEFILE_NBO_BASIS, GABEDIT_TYPEFILE_NBO, GABEDIT_TYPEFILE_XML, GABEDIT_TYPEFILE_IGVPT2, GABEDIT_TYPEFILE_UNKNOWN, } GabEditTypeFile; typedef enum { GABEDIT_TYPEFILEGEOM_NEW, GABEDIT_TYPEFILEGEOM_GABEDIT, GABEDIT_TYPEFILEGEOM_MOLDEN, GABEDIT_TYPEFILEGEOM_XYZ, GABEDIT_TYPEFILEGEOM_MOL, GABEDIT_TYPEFILEGEOM_MOL2, GABEDIT_TYPEFILEGEOM_TINKER, GABEDIT_TYPEFILEGEOM_PDB, GABEDIT_TYPEFILEGEOM_HIN, GABEDIT_TYPEFILEGEOM_AIMALL, GABEDIT_TYPEFILEGEOM_DALTONIN, GABEDIT_TYPEFILEGEOM_DALTONFIRST, GABEDIT_TYPEFILEGEOM_DALTONLAST, GABEDIT_TYPEFILEGEOM_DEMONIN, GABEDIT_TYPEFILEGEOM_DEMONFIRST, GABEDIT_TYPEFILEGEOM_DEMONLAST, GABEDIT_TYPEFILEGEOM_GAMESSIN, GABEDIT_TYPEFILEGEOM_GAMESSFIRST, GABEDIT_TYPEFILEGEOM_GAMESSLAST, GABEDIT_TYPEFILEGEOM_GAUSSIN, GABEDIT_TYPEFILEGEOM_GAUSSOUTFIRST, GABEDIT_TYPEFILEGEOM_GAUSSOUTLAST, GABEDIT_TYPEFILEGEOM_GAUSSIAN_FCHK, GABEDIT_TYPEFILEGEOM_MOLCASIN, GABEDIT_TYPEFILEGEOM_MOLCASOUTFIRST, GABEDIT_TYPEFILEGEOM_MOLCASOUTLAST, GABEDIT_TYPEFILEGEOM_MOLPROIN, GABEDIT_TYPEFILEGEOM_MOLPROOUTFIRST, GABEDIT_TYPEFILEGEOM_MOLPROOUTLAST, GABEDIT_TYPEFILEGEOM_MPQCIN, GABEDIT_TYPEFILEGEOM_MPQCOUTFIRST, GABEDIT_TYPEFILEGEOM_MPQCOUTLAST, GABEDIT_TYPEFILEGEOM_ORCAIN, GABEDIT_TYPEFILEGEOM_ORCAOUTFIRST, GABEDIT_TYPEFILEGEOM_ORCAOUTLAST, GABEDIT_TYPEFILEGEOM_VASPIN, GABEDIT_TYPEFILEGEOM_VASPPOSCAR, GABEDIT_TYPEFILEGEOM_VASPOUTFIRST, GABEDIT_TYPEFILEGEOM_VASPOUTLAST, GABEDIT_TYPEFILEGEOM_VASPXMLFIRST, GABEDIT_TYPEFILEGEOM_VASPXMLLAST, GABEDIT_TYPEFILEGEOM_QCHEMIN, GABEDIT_TYPEFILEGEOM_QCHEMOUTFIRST, GABEDIT_TYPEFILEGEOM_QCHEMOUTLAST, GABEDIT_TYPEFILEGEOM_NWCHEMIN, GABEDIT_TYPEFILEGEOM_NWCHEMOUTFIRST, GABEDIT_TYPEFILEGEOM_NWCHEMOUTLAST, GABEDIT_TYPEFILEGEOM_PSICODEIN, GABEDIT_TYPEFILEGEOM_PSICODEOUTFIRST, GABEDIT_TYPEFILEGEOM_PSICODEOUTLAST, GABEDIT_TYPEFILEGEOM_MOPACIN, GABEDIT_TYPEFILEGEOM_MOPACOUTFIRST, GABEDIT_TYPEFILEGEOM_MOPACOUTLAST, GABEDIT_TYPEFILEGEOM_MOPACAUX, GABEDIT_TYPEFILEGEOM_MOPACOUTSCAN, GABEDIT_TYPEFILEGEOM_FIREFLYIN, GABEDIT_TYPEFILEGEOM_FIREFLYFIRST, GABEDIT_TYPEFILEGEOM_FIREFLYLAST, GABEDIT_TYPEFILEGEOM_GAMESSIRC, GABEDIT_TYPEFILEGEOM_TURBOMOLEFIRST, GABEDIT_TYPEFILEGEOM_TURBOMOLELAST, GABEDIT_TYPEFILEGEOM_GAUSSIAN_ZMATRIX, GABEDIT_TYPEFILEGEOM_MOPAC_ZMATRIX, GABEDIT_TYPEFILEGEOM_UNKNOWN } GabEditTypeFileGeom; typedef enum { GABEDIT_TYPEGRID_ORBITAL, GABEDIT_TYPEGRID_EDENSITY, GABEDIT_TYPEGRID_DDENSITY, GABEDIT_TYPEGRID_ADENSITY, GABEDIT_TYPEGRID_SDENSITY, GABEDIT_TYPEGRID_ELFBECKE, GABEDIT_TYPEGRID_ELFSAVIN, GABEDIT_TYPEGRID_FEDELECTROPHILIC, GABEDIT_TYPEGRID_FEDNUCLEOPHILIC, GABEDIT_TYPEGRID_FEDRADICAL, GABEDIT_TYPEGRID_NCI, GABEDIT_TYPEGRID_SAS, GABEDIT_TYPEGRID_SASMAP, GABEDIT_TYPEGRID_MEP_CHARGES, GABEDIT_TYPEGRID_MEP_MULTIPOL, GABEDIT_TYPEGRID_MEP_CG, GABEDIT_TYPEGRID_MEP_MG, GABEDIT_TYPEGRID_MEP_EXACT, } GabEditTypeGrid; typedef enum { GABEDIT_TYPEGEOM_NO, GABEDIT_TYPEGEOM_BALLSTICK, GABEDIT_TYPEGEOM_STICK, GABEDIT_TYPEGEOM_SPACE, GABEDIT_TYPEGEOM_WIREFRAME } GabEditTypeGeom; typedef enum { GABEDIT_SURFSHOW_NO, GABEDIT_SURFSHOW_POSNEG, GABEDIT_SURFSHOW_POSITIVE, GABEDIT_SURFSHOW_NEGATIVE } GabEditTypeSurfShow; typedef enum { GABEDIT_BLEND_NO, GABEDIT_BLEND_YES } GabEditTypeBlend; typedef enum { GABEDIT_POS_WIREFRAME_NO, GABEDIT_POS_WIREFRAME_YES, GABEDIT_NEG_WIREFRAME_NO, GABEDIT_NEG_WIREFRAME_YES } GabEditTypeWireFrame; typedef enum { GABEDIT_PROGORB_UNK, GABEDIT_PROGORB_READGEOM, GABEDIT_PROGORB_SAVEGEOM, GABEDIT_PROGORB_COMPISOSURFACE, GABEDIT_PROGORB_COMPGRID, GABEDIT_PROGORB_COMPINTEG, GABEDIT_PROGORB_SCALEGRID, GABEDIT_PROGORB_SUBSGRID, GABEDIT_PROGORB_READGRID, GABEDIT_PROGORB_SAVEGRID, GABEDIT_PROGORB_MAPGRID, GABEDIT_PROGORB_SCANFILEGRID, GABEDIT_PROGORB_COMPMULTIPOL, GABEDIT_PROGORB_COMPLAPGRID, GABEDIT_PROGORB_COMPGRADGRID, GABEDIT_PROGORB_COMPNCIGRID, GABEDIT_PROGORB_COMPL2GRID, GABEDIT_PROGORB_COMPMEPGRID, } GabEditTypeProgressOrb; typedef struct _LXYZ LXYZ; struct _LXYZ { gdouble Coef; gint l[3]; }; typedef struct _Zlm Zlm; struct _Zlm { gint l; gint m; gint numberOfCoefficients; LXYZ* lxyz; }; typedef struct _GTF { gdouble Ex; gdouble Coef; gint l[3]; gdouble C[3]; }GTF; typedef struct _AO { gint L; gint N; gdouble* Ex; gdouble* Coef; }AO; typedef struct _TYPE { char* Symb; gint N; /* Number of electrons*/ gint Norb; AO *Ao; }TYPE; typedef struct _CGTF { gint numberOfFunctions; gint NumCenter; GTF* Gtf; gint L; /* used if spherical basis*/ gint M; /* used if spherical basis*/ }CGTF; typedef struct _RGBColor { guchar rgb[3]; }RGBColor; typedef struct _TypeGeomOrb { gchar* Symb; gdouble C[3]; gdouble partialCharge; gdouble nuclearCharge; gboolean variable; SAtomsProp Prop; guint Sphere; gint N; gint NumType; gint NAOrb; gint* NumOrb; gint NOrb; gint NAlphaOrb; gint NBetaOrb; gdouble **CoefAlphaOrbitals; gdouble *OccAlphaOrbitals; gdouble *EnerAlphaOrbitals; gchar **SymAlphaOrbitals; gdouble **CoefBetaOrbitals; gdouble *EnerBetaOrbitals; gdouble *OccBetaOrbitals; gchar **SymBetaOrbitals; }TypeGeomOrb; typedef struct _TypeFontsStyle { gchar *fontname; GdkColor BaseColor; GdkColor TextColor; }TypeFontsStyle; typedef gdouble (*Func3d)(gdouble ,gdouble,gdouble,gint); typedef struct _STF { gdouble Ex; gdouble Coef; gint l[3]; gdouble C[3]; gint pqn; }STF; typedef struct _CSTF { gint N; gint NumCenter; STF* Stf; gint L; /* used if spherical basis*/ gint M; /* used if spherical basis*/ }CSTF; typedef struct _OpenGLOptions { gint rgba; gint doubleBuffer; gint alphaSize; gint depthSize; gint numberOfSubdivisionsCylindre; gint numberOfSubdivisionsSphere; gint activateText; }OpenGLOptions; typedef enum { GABEDIT_BONDTYPE_SINGLE = 0, GABEDIT_BONDTYPE_DOUBLE, GABEDIT_BONDTYPE_TRIPLE, GABEDIT_BONDTYPE_HYDROGEN, } GabEditBondType; typedef struct _BondType BondType; struct _BondType { gint n1; gint n2; GabEditBondType bondType; }; typedef struct _DipoleDef { gboolean def; gdouble origin[3]; gdouble value[3]; gdouble radius; gdouble color[3]; }DipoleDef; #endif /* __GABEDIT_GABEDITTYPE_H__ */ GabeditSrc250/src/Common/MenuToolBar.h0000644000175100017510000000033013130665225020046 0ustar alloucheallouche #ifndef __GABEDIT_MENUTOOLBAR_H__ #define __GABEDIT_MENUTOOLBAR_H__ void add_menu_toolbar(); void window_add(gchar *str,GtkWidget* Win); void window_delete(GtkWidget* Win); #endif /* __GABEDIT_MENUTOOLBAR_H__ */ GabeditSrc250/src/Common/Preferences.h0000644000175100017510000000367713130665225020141 0ustar alloucheallouche/* Preferences.h */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_PREFERENCES_H__ #define __GABEDIT_PREFERENCES_H__ void create_preferences(); void create_execucte_commands(GtkWidget *Wins,GtkWidget *Box, gboolean expand); void create_network_protocols(GtkWidget *Wins,GtkWidget *Box,gboolean expand); void modify_gaussian_command(); void modify_molpro_command(); void create_font_color_in_box(GtkWidget *Win,GtkWidget *Box); void set_font_other (gchar *fontname); #ifdef G_OS_WIN32 void create_gamess_directory(GtkWidget *Wins,GtkWidget *vbox,gboolean expand); void create_pscpplink_directory(GtkWidget *Wins,GtkWidget *vbox,gboolean expand); #endif #endif /* __GABEDIT_PREFERENCES_H__ */ GabeditSrc250/src/Common/StockIcons.h0000644000175100017510000001122713130665225017745 0ustar alloucheallouche #ifndef __GABEDIT_STOCKICONS_H__ #define __GABEDIT_STOCKICONS_H__ #define GABEDIT_STOCK_A0D "gabedit-a0d" #define GABEDIT_STOCK_A0P "gabedit-a0p" #define GABEDIT_STOCK_ABOUT "gabedit-about" #define GABEDIT_STOCK_APPLY "gabedit-apply" #define GABEDIT_STOCK_BOOK_CLOSE "gabedit-book-close" #define GABEDIT_STOCK_BOOK_OPEN "gabedit-book-open" #define GABEDIT_STOCK_BOOK_PARENT "gabedit-book-parent" #define GABEDIT_STOCK_CAMERA "gabedit-book-camera" #define GABEDIT_STOCK_CANCEL "gabedit-cancel" #define GABEDIT_STOCK_CLOSE "gabedit-close" #define GABEDIT_STOCK_COPY "gabedit-copy" #define GABEDIT_STOCK_CUT "gabedit-cut" #define GABEDIT_STOCK_DELETE_ATOM "gabedit-delete-atom" #define GABEDIT_STOCK_DRAW "gabedit-draw" #define GABEDIT_STOCK_IFRAG "gabedit-ifrag" #define GABEDIT_STOCK_DRIVER "gabedit-driver" #define GABEDIT_STOCK_ERROR "gabedit-error" #define GABEDIT_STOCK_EXIT "gabedit-exit" #define GABEDIT_STOCK_FIND "gabedit-find" #define GABEDIT_STOCK_GAUSSIAN "gabedit-gaussian" #define GABEDIT_STOCK_GEOMETRY "gabedit-geometry" #define GABEDIT_STOCK_HELP "gabedit-help" #define GABEDIT_STOCK_HIDE "gabedit-hide" #define GABEDIT_STOCK_ADJUST_H "gabedit-adjust-h" #define GABEDIT_STOCK_HOME "gabedit-home" #define GABEDIT_STOCK_H "gabedit-h" #define GABEDIT_STOCK_GABEDIT "gabedit-gabedit" #define GABEDIT_STOCK_INFO "gabedit-info" #define GABEDIT_STOCK_INSERT_ATOM "gabedit-insert-atom" #define GABEDIT_STOCK_INSERT "gabedit-insert" #define GABEDIT_STOCK_CHANGE_BOND "gabedit-change-bond" #define GABEDIT_STOCK_CUT_BOND "gabedit-cut-bond" #define GABEDIT_STOCK_DELETE_CUT "gabedit-delete-cut" #define GABEDIT_STOCK_ADD_BOND "gabedit-add-bond" #define GABEDIT_STOCK_MEASURE "gabedit-measure" #define GABEDIT_STOCK_MOLCAS "gabedit-molcas" #define GABEDIT_STOCK_MOLDEN "gabedit-molden" #define GABEDIT_STOCK_MOLPRO "gabedit-molpro" #define GABEDIT_STOCK_QCHEM "gabedit-qchem" #define GABEDIT_STOCK_ORCA "gabedit-orca" #define GABEDIT_STOCK_VASP "gabedit-vasp" #define GABEDIT_STOCK_MOPAC "gabedit-mopac" #define GABEDIT_STOCK_ADF "gabedit-adf" #define GABEDIT_STOCK_DALTON "gabedit-dalton" #define GABEDIT_STOCK_GAMESS "gabedit-gamess" #define GABEDIT_STOCK_DEMON "gabedit-demon" #define GABEDIT_STOCK_NWCHEM "gabedit-nwchem" #define GABEDIT_STOCK_PSICODE "gabedit-psicode" #define GABEDIT_STOCK_NBO "gabedit-nbo" #define GABEDIT_STOCK_FIREFLY "gabedit-firefly" #define GABEDIT_STOCK_MOVE_ATOM "gabedit-move-atom" #define GABEDIT_STOCK_MPQC "gabedit-mpqc" #define GABEDIT_STOCK_NEW "gabedit-new" #define GABEDIT_STOCK_NEXTW "gabedit-next" #define GABEDIT_STOCK_NO "gabedit-no" #define GABEDIT_STOCK_OK "gabedit-ok" #define GABEDIT_STOCK_OPEN_BABEL "gabedit-open-babel" #define GABEDIT_STOCK_CONVERT_UNIT "gabedit-convert-unit" #define GABEDIT_STOCK_OPEN "gabedit-open" #define GABEDIT_STOCK_ORBITALS "gabedit-orbitals" #define GABEDIT_STOCK_ORTHO "gabedit-ortho" #define GABEDIT_STOCK_PAGE "gabedit-page" #define GABEDIT_STOCK_PASTE "gabedit-paste" #define GABEDIT_STOCK_PERSPECTIVE "gabedit-perspective" #define GABEDIT_STOCK_PLAY "gabedit-play" #define GABEDIT_STOCK_PRINT "gabedit-print" #define GABEDIT_STOCK_QUESTION "gabedit-question" #define GABEDIT_STOCK_RENDER_BALL_STICK "gabedit-render-ball-stick" #define GABEDIT_STOCK_RENDER_STICK "gabedit-render-stick" #define GABEDIT_STOCK_RENDER_WIREFRAME "gabedit-render-wireframe" #define GABEDIT_STOCK_ROTATION_LOCAL "gabedit-rotate-local" #define GABEDIT_STOCK_ROTATION "gabedit-rotate" #define GABEDIT_STOCK_ROTATION_X "gabedit-rotate-x" #define GABEDIT_STOCK_ROTATION_Y "gabedit-rotate-y" #define GABEDIT_STOCK_ROTATION_Z "gabedit-rotate-z" #define GABEDIT_STOCK_ROTATION_Z_LOCAL "gabedit-rotate-z-local" #define GABEDIT_STOCK_RUN "gabedit-run" #define GABEDIT_STOCK_SAVE_AS "gabedit-save-as" #define GABEDIT_STOCK_SELECT_ALL "gabedit-select-all" #define GABEDIT_STOCK_SAVE_MINI "gabedit-save-mini" #define GABEDIT_STOCK_SAVE "gabedit-save" #define GABEDIT_STOCK_SCALE_BALL "gabedit-scale-ball" #define GABEDIT_STOCK_SCALE_DIPOLE "gabedit-scale-dipole" #define GABEDIT_STOCK_SCALE_STICK "gabedit-scale-stick" #define GABEDIT_STOCK_SELECT_RESIDUE "gabedit-select-residue" #define GABEDIT_STOCK_SELECT "gabedit-select" #define GABEDIT_STOCK_STOP "gabedit-stop" #define GABEDIT_STOCK_TRANSLATE "gabedit-translate" #define GABEDIT_STOCK_WARNING "gabedit-warning" #define GABEDIT_STOCK_YES "gabedit-yes" #define GABEDIT_STOCK_ZOOM "gabedit-zoom" #define GABEDIT_STOCK_PDB "gabedit-pdb" #define GABEDIT_STOCK_O "gabedit-o" #define GABEDIT_STOCK_ATOMTOINSERT "gabedit-atomtoinsert" #define GABEDIT_STOCK_KNOT "gabedit-knot" void gabedit_gtk_stock_init(); #endif /* __GABEDIT_STOCKICONS_H__ */ GabeditSrc250/src/Common/Dep.mk0000644000175100017510000001725713130664665016576 0ustar allouchealloucheGabedit.o: Gabedit.c ../../Config.h Global.h \ ../Files/GabeditFileChooser.h ../Common/GabeditType.h MenuToolBar.h \ TextEdit.h ../Utils/UtilsInterface.h ../Utils/Utils.h \ ../Utils/AtomsProp.h ../Geometry/GeomGlobal.h SplashScreen.h Install.h \ ../Files/ListeFiles.h Windows.h StockIcons.h Help.o: Help.c ../../Config.h Global.h ../Files/GabeditFileChooser.h \ ../Common/GabeditType.h ../Utils/UtilsInterface.h ../Utils/Constants.h Install.o: Install.c ../../Config.h Global.h \ ../Files/GabeditFileChooser.h ../Common/GabeditType.h \ ../Utils/UtilsInterface.h Preferences.h ../Utils/Utils.h \ ../Common/Install.h ../Utils/AtomsProp.h ../Molpro/MolproLib.h \ ../Molcas/MolcasLib.h ../MPQC/MPQCLib.h \ ../MolecularMechanics/CreateMolecularMechanicsFile.h \ ../MolecularMechanics/CreateDefaultPDBTpl.h ../../pixmaps/Gabedit.xpm \ ../../pixmaps/Book_close.xpm ../../pixmaps/Page.xpm Preferences.o: Preferences.c ../../Config.h Global.h \ ../Files/GabeditFileChooser.h ../Common/GabeditType.h ../Common/Help.h \ ../Utils/UtilsInterface.h ../Utils/AtomsProp.h ../Utils/Utils.h \ ../Utils/Constants.h Windows.h TextEdit.h ../Utils/Vector3d.h \ ../Display/PreferencesOrb.h ../Display/GLArea.h ../Display/UtilsOrb.h \ ../Geometry/ResultsAnalise.h ../Geometry/GeomGlobal.h \ ../Files/FolderChooser.h ../Files/GabeditFolderChooser.h \ ../../pixmaps/Open.xpm Printer.o: Printer.c ../../Config.h Global.h \ ../Files/GabeditFileChooser.h ../Common/GabeditType.h \ ../Utils/UtilsInterface.h ../Utils/Utils.h ../Utils/GabeditTextEdit.h \ Printer.h ../Files/FileChooser.h Windows.h Run.o: Run.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Utils/Utils.h ../Utils/Constants.h ../Utils/GabeditTextEdit.h \ ../Common/Windows.h ../Files/ListeFiles.h ../Files/FileChooser.h \ ../Files/GabeditFolderChooser.h ../NetWork/RemoteCommand.h \ ../NetWork/FilesTransfer.h ../Molcas/MolcasVariables.h SplashScreen.o: SplashScreen.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Utils/Utils.h ../Utils/AtomsProp.h ../Common/Status.h \ ../Common/Windows.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/PersonalFragments.h ../MolecularMechanics/Atom.h \ ../MolecularMechanics/Molecule.h ../MolecularMechanics/ForceField.h \ ../MolecularMechanics/MolecularMechanics.h \ ../MolecularMechanics/PDBTemplate.h ../Molpro/MolproBasisLibrary.h \ ../Molcas/MolcasBasisLibrary.h ../MPQC/MPQCBasisLibrary.h \ ../Display/UtilsOrb.h TextEdit.o: TextEdit.c ../../Config.h Global.h \ ../Files/GabeditFileChooser.h ../Common/GabeditType.h \ ../Utils/UtilsInterface.h ../Utils/Utils.h ../Utils/GabeditTextEdit.h \ ../Geometry/ResultsAnalise.h Windows.h Windows.o: Windows.c ../../Config.h Global.h \ ../Files/GabeditFileChooser.h ../Common/GabeditType.h ../Utils/Utils.h \ ../Common/MenuToolBar.h Status.o: Status.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Utils.h \ ../Geometry/ResultsAnalise.h ../Common/Status.h Exit.o: Exit.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Geometry/Fragments.h \ ../Geometry/DrawGeom.h ../Geometry/DrawGeomCairo.h \ ../Geometry/Fragments.h ../Utils/HydrogenBond.h ../Files/ListeFiles.h \ ../MolecularMechanics/Atom.h ../MolecularMechanics/Molecule.h \ ../MolecularMechanics/ForceField.h \ ../MolecularMechanics/MolecularMechanics.h \ ../MolecularMechanics/PDBTemplate.h ../Geometry/PersonalFragments.h \ ../Utils/AtomsProp.h ../Molpro/MolproBasisLibrary.h \ ../Molcas/MolcasBasisLibrary.h ../MPQC/MPQCBasisLibrary.h MenuToolBar.o: MenuToolBar.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Common/Run.h ../Geometry/InterfaceGeom.h \ ../Files/FileChooser.h ../Common/TextEdit.h ../Common/Preferences.h \ ../Molcas/Molcas.h ../Molcas/MolcasBasisLibrary.h \ ../MPQC/MPQCBasisLibrary.h ../Molpro/Molpro.h \ ../Molpro/MolproBasisLibrary.h ../Gaussian/Gaussian.h \ ../Utils/AtomsProp.h ../Utils/GabeditTextEdit.h ../Utils/ConvUtils.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/GeomGlobal.h ../Geometry/OpenBabel.h ../Common/Printer.h \ ../NetWork/Process.h ../NetWork/Batch.h \ ../MolecularMechanics/SetMMParameters.h \ ../MolecularMechanics/SetPDBTemplate.h ../Common/StockIcons.h \ ../Display/Vibration.h ../Utils/GabeditXYPlot.h \ ../Utils/GabeditContoursPlot.h ../Spectrum/IRSpectrum.h \ ../Spectrum/RamanSpectrum.h ../Spectrum/UVSpectrum.h \ ../Spectrum/ECDSpectrum.h ../Spectrum/NMRSpectrum.h \ ../VibrationalCorrections/GabeditGaussianInput.h \ ../IsotopeDistribution/IsotopeDistributionCalculatorDlg.h \ ../IsotopeDistribution/../IsotopeDistribution/IsotopeDistributionCalculator.h StockIcons.o: StockIcons.c ../../pixmaps/A0d.xpm ../../pixmaps/A0p.xpm \ ../../pixmaps/About.xpm ../../pixmaps/Apply.xpm \ ../../pixmaps/Book_close.xpm ../../pixmaps/Book_open.xpm \ ../../pixmaps/Book_parent.xpm ../../pixmaps/Camera.xpm \ ../../pixmaps/Cancel.xpm ../../pixmaps/Close.xpm \ ../../pixmaps/ConvertUnit.xpm ../../pixmaps/Copy.xpm \ ../../pixmaps/Cut.xpm ../../pixmaps/DeleteAtom.xpm \ ../../pixmaps/Draw.xpm ../../pixmaps/Driver.xpm ../../pixmaps/Error.xpm \ ../../pixmaps/Exit.xpm ../../pixmaps/Find.xpm \ ../../pixmaps/Gaussian.xpm ../../pixmaps/Geometry.xpm \ ../../pixmaps/Help.xpm ../../pixmaps/Hide.xpm ../../pixmaps/AdjustH.xpm \ ../../pixmaps/Home.xpm ../../pixmaps/H.xpm ../../pixmaps/Gabedit.xpm \ ../../pixmaps/Info.xpm ../../pixmaps/InsertAtom.xpm \ ../../pixmaps/InsertFragment.xpm ../../pixmaps/ChangeBond.xpm \ ../../pixmaps/CutBond.xpm ../../pixmaps/DeleteCut.xpm \ ../../pixmaps/AddBond.xpm ../../pixmaps/Insert.xpm \ ../../pixmaps/Measure.xpm ../../pixmaps/Molcas.xpm \ ../../pixmaps/Molden.xpm ../../pixmaps/Molpro.xpm \ ../../pixmaps/Orca.xpm ../../pixmaps/QChem.xpm ../../pixmaps/Mopac.xpm \ ../../pixmaps/Adf.xpm ../../pixmaps/Dalton.xpm ../../pixmaps/Gamess.xpm \ ../../pixmaps/FireFly.xpm ../../pixmaps/MoveAtom.xpm \ ../../pixmaps/MPQC.xpm ../../pixmaps/NWChem.xpm \ ../../pixmaps/Psicode.xpm ../../pixmaps/NBO.xpm ../../pixmaps/New.xpm \ ../../pixmaps/Next.xpm ../../pixmaps/No.xpm ../../pixmaps/Ok.xpm \ ../../pixmaps/OpenBabel.xpm ../../pixmaps/Open.xpm \ ../../pixmaps/Orbitals.xpm ../../pixmaps/Ortho.xpm \ ../../pixmaps/Page.xpm ../../pixmaps/Paste.xpm \ ../../pixmaps/Perspective.xpm ../../pixmaps/Play.xpm \ ../../pixmaps/Print.xpm ../../pixmaps/Question.xpm \ ../../pixmaps/RenderBallStick.xpm ../../pixmaps/RenderStick.xpm \ ../../pixmaps/RenderWireFrame.xpm ../../pixmaps/RotateLocal.xpm \ ../../pixmaps/Rotate.xpm ../../pixmaps/RotateX.xpm \ ../../pixmaps/RotateY.xpm ../../pixmaps/RotateZLocal.xpm \ ../../pixmaps/RotateZ.xpm ../../pixmaps/Run.xpm \ ../../pixmaps/SaveAs.xpm ../../pixmaps/SelectAll.xpm \ ../../pixmaps/SaveMini.xpm ../../pixmaps/Save.xpm \ ../../pixmaps/ScaleBall.xpm ../../pixmaps/ScaleDipole.xpm \ ../../pixmaps/ScaleStick.xpm ../../pixmaps/SelectResidue.xpm \ ../../pixmaps/Select.xpm ../../pixmaps/Stop.xpm \ ../../pixmaps/Translate.xpm ../../pixmaps/Warning.xpm \ ../../pixmaps/Yes.xpm ../../pixmaps/Zoom.xpm ../../pixmaps/Pdb.xpm \ ../../pixmaps/O.xpm ../../pixmaps/AtomToInsert.xpm \ ../../pixmaps/Knot.xpm StockIcons.h GabeditSrc250/src/Common/SplashScreen.c0000644000175100017510000006012413130665225020253 0ustar alloucheallouche/* SplashScreen.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Common/Status.h" #include "../Common/Windows.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/PersonalFragments.h" #include "../MolecularMechanics/Atom.h" #include "../MolecularMechanics/Molecule.h" #include "../MolecularMechanics/ForceField.h" #include "../MolecularMechanics/MolecularMechanics.h" #include "../MolecularMechanics/PDBTemplate.h" #include "../Molpro/MolproBasisLibrary.h" #include "../Molcas/MolcasBasisLibrary.h" #include "../MPQC/MPQCBasisLibrary.h" #include "../Display/UtilsOrb.h" static GdkGC *gc = NULL; /*static guint IdTimer = 0;*/ static GtkWidget *status = NULL; static guint idStatus = 0; static gint splash_screen_cb(gpointer data); static gint progress( gpointer data,gdouble step); /********************************************************************************/ static void set_statubar_str(gchar* str) { if(str) { gtk_statusbar_pop(GTK_STATUSBAR(status),idStatus); gtk_statusbar_push(GTK_STATUSBAR(status),idStatus,str); } while(gtk_events_pending()) gtk_main_iteration(); } /*************************************************************************************/ static void read_ressource_files(GtkWidget* MainFrame,GtkWidget* ProgressBar) { gdouble t[] = {0.20,0.10,0.10,0.10,0.10,0.20,0.20}; gint i = 0; static gdouble step = 2; set_statubar_str(" "); define_default_atoms_prop(); set_statubar_str(_("Load atom properties.....")); if(!read_atoms_prop()) { Waiting(step*t[i]); progress( ProgressBar,t[i]); set_statubar_str(_("I can not load atom properties from file, define default values.....")); define_default_atoms_prop(); } else { Waiting(step*t[i]); progress( ProgressBar,t[i]); } i++; set_statubar_str(_("Load default commands from \"commands\" file.....")); read_commands_file(); Waiting(step*t[i]); progress( ProgressBar,t[i]); i++; set_statubar_str(_("Load recent fonts styles.....")); read_fonts_file(); Waiting(step*t[i]); progress( ProgressBar,t[i]); i++; set_statubar_str(_("Load recent hosts list.....")); read_hosts_file(); Waiting(step*t[i]); progress( ProgressBar,t[i]); i++; set_statubar_str(_("Load recent surfaces colors.....")); read_color_surfaces_file(); Waiting(step*t[i]); progress( ProgressBar,t[i]); i++; set_statubar_str(_("Load list of recent projects.....")); Waiting(step*t[i]); progress( ProgressBar,t[i]); i++; set_statubar_str(_("Load Molecular mechanics parameters.....")); loadAmberParameters(); LoadPDBTpl(); Waiting(step*t[i]); progress( ProgressBar,t[i]); set_statubar_str(_("Load Personal Fragments.....")); loadPersonalFragments(NULL); set_statubar_str(_("Load the list of the bases supported by Molpro......")); loadMolproBasis(); set_statubar_str(_("Load the list of the bases supported by Molcas......")); loadMolcasBasis(); set_statubar_str(_("Load the list of the bases supported by MPQC......")); loadMPQCBasis(); set_statubar_str(" "); Waiting(step*0.05); splash_screen_cb(MainFrame); } /********************************************************************************/ static gint show_gabedit(gpointer data) { gtk_widget_show_all(Fenetre); //gtk_window_move(GTK_WINDOW(Fenetre),0,0); hide_progress_connection(); gtk_widget_hide (GTK_WIDGET(FrameWins)); { gchar* fileName = g_strdup_printf("%s%sdump.txt", g_get_home_dir(), G_DIR_SEPARATOR_S); set_last_directory(fileName); g_free(fileName); } return FALSE; } /********************************************************************************/ /* show the splash screen*/ static gint splash_screen_cb(gpointer data) { gtk_widget_hide(GTK_WIDGET(data)); /* gtk_timeout_remove(IdTimer);*/ gtk_object_destroy(GTK_OBJECT(data)); show_gabedit(NULL); return FALSE; } /********************************************************************************/ /* static gint progress( gpointer data)*/ static gint progress( gpointer data, gdouble step) { gdouble new_val; if(!this_is_an_object((GtkObject*)data)) { return FALSE; } new_val = gtk_progress_bar_get_fraction( GTK_PROGRESS_BAR(data) ) + step; if (new_val > 1) new_val = 1; gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (data), (gdouble)(new_val)); return TRUE; } /***********************************************************/ static GtkWidget *create_progress_bar_splash(GtkWidget *box) { GtkWidget *table; GtkWidget *ProgressBar; table = gtk_table_new(1,2,FALSE); gtk_box_pack_start (GTK_BOX(box), table, FALSE, TRUE, 2); status = gtk_statusbar_new(); gtk_widget_show(status); gtk_table_attach(GTK_TABLE(table),status,0,1,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); idStatus = gtk_statusbar_get_context_id(GTK_STATUSBAR(status)," "); ProgressBar = gtk_progress_bar_new(); gtk_table_attach(GTK_TABLE(table),ProgressBar,1,2,0,1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); gtk_widget_show (table); return ProgressBar; } /********************************************************************************/ static gint configure_event( GtkWidget *widget, GdkEventConfigure *event ) { gint height = 0; GdkColor color; GdkColor tmpcolor; GdkColormap *colormap = NULL; GdkPixmap *pixmap = (GdkPixmap *)g_object_get_data(G_OBJECT(widget), "Pixmap"); PangoFontDescription* font_desc = (PangoFontDescription*)g_object_get_data(G_OBJECT(widget), "FontDesc"); gchar* txt = (gchar*)g_object_get_data(G_OBJECT(widget), "Text"); GdkColor *pcolor = (GdkColor*)g_object_get_data(G_OBJECT(widget), "Color"); gint* lentxt = (gint*)g_object_get_data(G_OBJECT(widget), "LenTxt"); gboolean Ok = TRUE; GdkVisual* vis; gint i; gint x; gint y; if (pixmap) g_object_unref(pixmap); pixmap = gdk_pixmap_new(widget->window, widget->allocation.width, widget->allocation.height, -1); color = *pcolor; colormap = gdk_drawable_get_colormap(widget->window); height = widget->allocation.height; vis = gdk_colormap_get_visual(colormap); if(vis->depth >15) Ok = TRUE; else Ok = FALSE; gdk_colormap_alloc_color(colormap, &color, FALSE, TRUE); if(Ok) for(i=0;iallocation.width;i++) { gdouble t= 0.1+i/(gdouble)(widget->allocation.width)/4; tmpcolor.red = (gushort)(color.red*t); tmpcolor.green = (gushort)(color.green*t); tmpcolor.blue = (gushort)(color.blue*t); gdk_colormap_alloc_color(colormap, &tmpcolor, FALSE, TRUE); gdk_gc_set_foreground(gc,&tmpcolor); gdk_draw_line(pixmap,gc,i,0,i,height); } else { gdk_gc_set_foreground(gc,&color); for(i=0;iallocation.width;i++) gdk_draw_line(pixmap,gc,i,0,i,height); } if(strstr(txt,"Copyright")) { gdk_draw_line(pixmap,widget->style->black_gc,0,0,widget->allocation.width,0); gdk_draw_line(pixmap,widget->style->white_gc,0,1,widget->allocation.width,1); gdk_draw_line(pixmap,widget->style->black_gc,0,2,widget->allocation.width,2); } if(strstr(txt,"Gabedit") && !strstr(txt,"Copyright")) { x = 20; y = 10; gabedit_draw_string(widget, pixmap, font_desc, widget->style->black_gc , x+height/20,y+height/18, txt, FALSE, FALSE); gabedit_draw_string(widget, pixmap, font_desc, widget->style->white_gc , x,y, txt, FALSE, FALSE); } else if(strstr(txt,"Allouche") && !strstr(txt,"Copyright")) { x = widget->allocation.width/4; y = 10; gabedit_draw_string(widget, pixmap, font_desc, widget->style->black_gc , x+height/20,y+height/18, txt, FALSE, FALSE); gabedit_draw_string(widget, pixmap, font_desc, widget->style->white_gc , x,y, txt, FALSE, FALSE); } else if(strstr(txt,_("Graphical"))) { x = 6; y = 10; tmpcolor.red = 0; tmpcolor.green =60000; tmpcolor.blue = 65535; gdk_colormap_alloc_color(colormap, &tmpcolor, FALSE, TRUE); gdk_gc_set_foreground(gc,&tmpcolor); if(vis->depth >15) { gabedit_draw_string(widget, pixmap, font_desc, widget->style->black_gc , x+height/15,y+height/15, txt, FALSE, FALSE); gabedit_draw_string(widget, pixmap, font_desc, gc , x,y, txt, FALSE, FALSE); } else gabedit_draw_string(widget, pixmap, font_desc, gc , x,y, txt, FALSE, FALSE); } else { x = 6; y = 10; gabedit_draw_string(widget, pixmap, font_desc, widget->style->black_gc , x+height/20,y+height/18, txt, FALSE, FALSE); gabedit_draw_string(widget, pixmap, font_desc, widget->style->white_gc , x,y, txt, FALSE, FALSE); } if(strstr(txt,"Gabedit")) { gdouble t; gchar* Version_S = g_strdup_printf("%d.%d.%d",MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION); gint width = 0; gint dum = 0; x = *lentxt; gabedit_string_get_pixel_size(Fenetre, font_desc, Version_S, &i, &dum); width = 9.0/8*i; #ifdef G_OS_WIN32 x = *lentxt-(gint)(i/15.0); #endif tmpcolor.red = 20000; tmpcolor.green = 10000; tmpcolor.blue = 20000; if(!gdk_color_parse("sky blue",&tmpcolor)) { tmpcolor.red = 65000; tmpcolor.green = 10000; tmpcolor.blue = 65000; } t = 0.1 + 0.25; t = 0.5; tmpcolor.red = (gushort)(tmpcolor.red*t); tmpcolor.green = (gushort)(tmpcolor.green*t); tmpcolor.blue = (gushort)(tmpcolor.blue*t); gdk_colormap_alloc_color(colormap, &tmpcolor, FALSE, TRUE); gdk_gc_set_foreground(gc,&tmpcolor); gdk_draw_arc(pixmap, gc, TRUE,x,0, width, widget->allocation.height, 0, 360*64); tmpcolor.red = 10000; tmpcolor.green = 10000; tmpcolor.blue = 50000; gdk_colormap_alloc_color(colormap, &tmpcolor, FALSE, TRUE); gdk_gc_set_foreground(gc,&tmpcolor); x = *lentxt + 1.0/20*i; gabedit_draw_string(widget, pixmap, font_desc, gc , x,5, Version_S, FALSE, FALSE); g_free(Version_S); } g_object_set_data(G_OBJECT(widget), "Pixmap", pixmap); return TRUE; } /********************************************************************************/ static gint expose_event(GtkWidget *widget,GdkEventExpose *event ) { GdkPixmap *pixmap = NULL; if(event->count >0) return FALSE; pixmap = (GdkPixmap *)g_object_get_data(G_OBJECT(widget), "Pixmap"); if(pixmap) gdk_draw_drawable(widget->window, widget->style->fg_gc[GTK_WIDGET_STATE (widget)], pixmap, event->area.x, event->area.y, event->area.x, event->area.y, event->area.width, event->area.height); return FALSE; } /********************************************************************************/ static void create_welcome_frame_popup(GtkWidget *vbox,GtkWidget *MainFrame) { GtkWidget *vboxframe; GtkWidget *darea; gint height = 0; gint width = 0; gint widthVersion = 0; gint heightVersion = 0; gchar* txt = g_strdup(_(" Welcome to :")); GdkPixmap *pixmap = NULL; GdkColor* color = g_malloc(sizeof(GdkColor)); gchar* Version_S = g_strdup_printf("%d.%d.%d",MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION); gint* lentxt = g_malloc(sizeof(gint)); PangoFontDescription *font_desc = pango_font_description_from_string ("sans bold 20"); /* if(!gdk_color_parse("royal blue",color))*/ if(!gdk_color_parse("sky blue",color)) /* if(!gdk_color_parse("dark orange",color))*/ { color->red = 40000; color->green = 40000; color->blue = 40000; } gabedit_string_get_pixel_size(Fenetre, font_desc, txt, lentxt, &height); gabedit_string_get_pixel_size(Fenetre, font_desc, Version_S, &widthVersion, &heightVersion); height += 10; width = *lentxt + widthVersion; g_free(Version_S); vboxframe = vbox; darea = gtk_drawing_area_new(); gtk_widget_set_size_request(GTK_WIDGET(darea), width, height); gtk_box_pack_start (GTK_BOX(vboxframe),darea, FALSE, FALSE, 0); gtk_widget_realize(darea); pixmap = gdk_pixmap_new(darea->window,darea->allocation.width,darea->allocation.height,-1); g_object_set_data(G_OBJECT(darea), "Text", txt); g_object_set_data(G_OBJECT(darea), "Pixmap", pixmap); g_object_set_data(G_OBJECT(darea), "FontDesc", font_desc); g_object_set_data(G_OBJECT(darea), "Color", color); g_object_set_data(G_OBJECT(darea), "LenTxt", lentxt); g_signal_connect(G_OBJECT(darea),"configure_event",(GCallback)configure_event,NULL); g_signal_connect(G_OBJECT(darea),"expose_event",(GCallback)expose_event,NULL); /* gtk_widget_show(darea);*/ } /********************************************************************************/ static void create_name_frame_popup(GtkWidget *vbox,GtkWidget *MainFrame) { GtkWidget *vboxframe; GtkWidget *darea; gint height = 0; gint width = 0; gint widthVersion = 0; gint heightVersion = 0; gchar* txt = g_strdup(_("Abdul-Rahman Allouche presents : ")); GdkPixmap *pixmap = NULL; GdkColor* color = g_malloc(sizeof(GdkColor)); gchar* Version_S = g_strdup_printf("%d.%d.%d",MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION); gint* lentxt = g_malloc(sizeof(gint)); PangoFontDescription *font_desc = pango_font_description_from_string ("sans bold 16"); /* if(!gdk_color_parse("royal blue",color))*/ if(!gdk_color_parse("sky blue",color)) /* if(!gdk_color_parse("dark orange",color))*/ { color->red = 40000; color->green = 40000; color->blue = 40000; } gabedit_string_get_pixel_size(Fenetre, font_desc, txt, lentxt, &height); gabedit_string_get_pixel_size(Fenetre, font_desc, Version_S, &widthVersion, &heightVersion); height += 10; width = *lentxt + widthVersion; g_free(Version_S); vboxframe = vbox; darea = gtk_drawing_area_new(); gtk_widget_set_size_request(GTK_WIDGET(darea), width, height); gtk_box_pack_start (GTK_BOX(vboxframe),darea, FALSE, FALSE, 0); gtk_widget_realize(darea); pixmap = gdk_pixmap_new(darea->window,darea->allocation.width,darea->allocation.height,-1); g_object_set_data(G_OBJECT(darea), "Text", txt); g_object_set_data(G_OBJECT(darea), "Pixmap", pixmap); g_object_set_data(G_OBJECT(darea), "FontDesc", font_desc); g_object_set_data(G_OBJECT(darea), "Color", color); g_object_set_data(G_OBJECT(darea), "LenTxt", lentxt); g_signal_connect(G_OBJECT(darea),"configure_event",(GCallback)configure_event,NULL); g_signal_connect(G_OBJECT(darea),"expose_event",(GCallback)expose_event,NULL); /* gtk_widget_show(darea);*/ } /********************************************************************************/ static void create_program_frame_popup(GtkWidget *vbox,GtkWidget *MainFrame) { GtkWidget *vboxframe; GtkWidget *darea; gint height = 0; gint width = 0; gint widthVersion = 0; gint heightVersion = 0; gchar* txt = g_strdup(" The Gabedit "); GdkPixmap *pixmap = NULL; GdkColor* color = g_malloc(sizeof(GdkColor)); gchar* Version_S = g_strdup_printf("%d.%d.%d",MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION); gint* lentxt = g_malloc(sizeof(gint)); PangoFontDescription *font_desc = pango_font_description_from_string ("sans bold 50"); /* if(!gdk_color_parse("royal blue",color))*/ if(!gdk_color_parse("sky blue",color)) /* if(!gdk_color_parse("dark orange",color))*/ { color->red = 40000; color->green = 40000; color->blue = 40000; } gabedit_string_get_pixel_size(Fenetre, font_desc, txt, lentxt, &height); gabedit_string_get_pixel_size(Fenetre, font_desc, Version_S, &widthVersion, &heightVersion); height += heightVersion/4; *lentxt = *lentxt + 4.0/8*widthVersion; width = *lentxt + 9.0/8*widthVersion+2; g_free(Version_S); vboxframe = vbox; darea = gtk_drawing_area_new(); gtk_widget_set_size_request(GTK_WIDGET(darea), width, height); gtk_box_pack_start (GTK_BOX(vboxframe),darea, FALSE, FALSE, 0); gtk_widget_realize(darea); pixmap = gdk_pixmap_new(darea->window,darea->allocation.width,darea->allocation.height,-1); g_object_set_data(G_OBJECT(darea), "Text", txt); g_object_set_data(G_OBJECT(darea), "Pixmap", pixmap); g_object_set_data(G_OBJECT(darea), "FontDesc", font_desc); g_object_set_data(G_OBJECT(darea), "Color", color); g_object_set_data(G_OBJECT(darea), "LenTxt", lentxt); g_signal_connect(G_OBJECT(darea),"configure_event",(GCallback)configure_event,NULL); g_signal_connect(G_OBJECT(darea),"expose_event",(GCallback)expose_event,NULL); /* gtk_widget_show(darea);*/ } /********************************************************************************/ static void create_gui_frame_popup(GtkWidget *vbox,GtkWidget *MainFrame) { GtkWidget *vboxframe; GtkWidget *darea; gint height = 0; gint width = 0; gint widthVersion = 0; gint heightVersion = 0; /* gchar* txt = g_strdup("The Graphical User Interface for Gamess, Gaussian, Molcas, Molpro, MPQC, PG Gamess and Q-Chem ab initio programs"); */ gchar* txt = g_strdup(_("The Graphical User Interface for computational chemistry packages")); GdkPixmap *pixmap = NULL; GdkColor* color = g_malloc(sizeof(GdkColor)); gchar* Version_S = g_strdup_printf("%d.%d.%d",MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION); gint* lentxt = g_malloc(sizeof(gint)); PangoFontDescription *font_desc = pango_font_description_from_string ("sans bold 16"); /* if(!gdk_color_parse("royal blue",color))*/ if(!gdk_color_parse("sky blue",color)) /* if(!gdk_color_parse("dark orange",color))*/ { color->red = 40000; color->green = 40000; color->blue = 40000; } gabedit_string_get_pixel_size(Fenetre, font_desc, txt, lentxt, &height); gabedit_string_get_pixel_size(Fenetre, font_desc, Version_S, &widthVersion, &heightVersion); height += 20; width = *lentxt + widthVersion; g_free(Version_S); vboxframe = vbox; darea = gtk_drawing_area_new(); gtk_widget_set_size_request(GTK_WIDGET(darea), width, height); gtk_box_pack_start (GTK_BOX(vboxframe),darea, FALSE, FALSE, 0); gtk_widget_realize(darea); pixmap = gdk_pixmap_new(darea->window,darea->allocation.width,darea->allocation.height,-1); g_object_set_data(G_OBJECT(darea), "Text", txt); g_object_set_data(G_OBJECT(darea), "Pixmap", pixmap); g_object_set_data(G_OBJECT(darea), "FontDesc", font_desc); g_object_set_data(G_OBJECT(darea), "Color", color); g_object_set_data(G_OBJECT(darea), "LenTxt", lentxt); g_signal_connect(G_OBJECT(darea),"configure_event",(GCallback)configure_event,NULL); g_signal_connect(G_OBJECT(darea),"expose_event",(GCallback)expose_event,NULL); /* gtk_widget_show(darea);*/ } /********************************************************************************/ static void create_splash_popupwin() { GtkWidget *MainFrame; GtkWidget *ProgressBar; GtkWidget *vbox = gtk_vbox_new(0,FALSE); MainFrame = gtk_window_new (GTK_WINDOW_POPUP); /* center it on the screen*/ gtk_window_set_position(GTK_WINDOW (MainFrame), GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (MainFrame), 4); /* set up key and mound button press to hide splash screen*/ gtk_widget_add_events(MainFrame, GDK_BUTTON_PRESS_MASK| GDK_BUTTON_RELEASE_MASK| GDK_KEY_PRESS_MASK); gtk_widget_realize(MainFrame); gc = gdk_gc_new(MainFrame->window); gtk_container_add (GTK_CONTAINER (MainFrame), vbox); /* create_name_frame_popup(vbox,MainFrame);*/ create_welcome_frame_popup(vbox, MainFrame); create_program_frame_popup(vbox,MainFrame); create_gui_frame_popup(vbox,MainFrame); ProgressBar = create_progress_bar_splash(vbox); g_object_set_data(G_OBJECT(ProgressBar), "MainFrame", MainFrame); gtk_widget_show_all(MainFrame); /* for force expose */ gtk_widget_set_size_request (GTK_WIDGET(MainFrame), -1, 20); /* go into main loop, processing events.*/ while(gtk_events_pending()) gtk_main_iteration(); /* IdTimer = gtk_timeout_add(10, (GtkFunction)progress, ProgressBar);*/ read_ressource_files(MainFrame,ProgressBar); } /********************************************************************************/ void splash_screen() { create_splash_popupwin(); } /********************************************************************************/ static void create_copyright_frame_popup(GtkWidget *vbox,GtkWidget *MainFrame) { GtkWidget *vboxframe; GtkWidget *darea; gint height = 0; gint width = 0; gint widthVersion = 0; gint heightVersion = 0; gchar* txt = g_strdup("Copyright (c) 2002-2017 Abdul-Rahman Allouche."); GdkPixmap *pixmap = NULL; GdkColor* color = g_malloc(sizeof(GdkColor)); gchar* Version_S = g_strdup_printf("%d.%d.%d",MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION); gint* lentxt = g_malloc(sizeof(gint)); PangoFontDescription *font_desc = pango_font_description_from_string ("sans bold 16"); /* if(!gdk_color_parse("dark orange",color))*/ /* if(!gdk_color_parse("royal blue",color))*/ if(!gdk_color_parse("sky blue",color)) /* if(!gdk_color_parse("black",color))*/ { color->red = 40000; color->green = 40000; color->blue = 40000; } gabedit_string_get_pixel_size(Fenetre, font_desc, txt, lentxt, &height); gabedit_string_get_pixel_size(Fenetre, font_desc, Version_S, &widthVersion, &heightVersion); height += 20; width = *lentxt + widthVersion; g_free(Version_S); vboxframe = vbox; darea = gtk_drawing_area_new(); gtk_widget_set_size_request(GTK_WIDGET(darea), width, height); gtk_box_pack_start (GTK_BOX(vboxframe),darea, FALSE, FALSE, 0); gtk_widget_realize(darea); pixmap = gdk_pixmap_new(darea->window,darea->allocation.width,darea->allocation.height,-1); g_object_set_data(G_OBJECT(darea), "Text", txt); g_object_set_data(G_OBJECT(darea), "Pixmap", pixmap); g_object_set_data(G_OBJECT(darea), "FontDesc", font_desc); g_object_set_data(G_OBJECT(darea), "Color", color); g_object_set_data(G_OBJECT(darea), "LenTxt", lentxt); g_signal_connect(G_OBJECT(darea),"configure_event",(GCallback)configure_event,NULL); g_signal_connect(G_OBJECT(darea),"expose_event",(GCallback)expose_event,NULL); } /********************************************************************************/ void create_about_frame() { GtkWidget *MainFrame; GtkWidget *vbox = gtk_vbox_new(0,FALSE); MainFrame = gtk_window_new (GTK_WINDOW_POPUP); /* center it on the screen*/ gtk_window_set_position(GTK_WINDOW (MainFrame), GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (MainFrame), 4); gtk_widget_add_events(MainFrame, GDK_BUTTON_PRESS_MASK| GDK_BUTTON_RELEASE_MASK| GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK); g_signal_connect(G_OBJECT(MainFrame),"button_release_event", G_CALLBACK(gtk_widget_destroy),NULL); g_signal_connect(G_OBJECT(MainFrame),"key_press_event", G_CALLBACK(gtk_widget_destroy),NULL); gtk_widget_realize(MainFrame); gc = gdk_gc_new(MainFrame->window); /* gtk_widget_show(vbox);*/ gtk_container_add (GTK_CONTAINER (MainFrame), vbox); create_name_frame_popup(vbox,MainFrame); create_program_frame_popup(vbox,MainFrame); create_gui_frame_popup(vbox,MainFrame); create_copyright_frame_popup(vbox,MainFrame); gtk_widget_show_all(MainFrame); } /********************************************************************************/ GabeditSrc250/src/Common/BasisGlobal.h0000644000175100017510000000304713130665225020051 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_BASISGLOBAL_H__ #define __GABEDIT_BASISGLOBAL_H__ typedef struct _BasisType { gchar *CenterName; gchar *BasisName; }BasisType; BasisType *BasisT; BasisType *BasisC; gint NSymbType; gint NSymbCenter; #endif /* __GABEDIT_BASISGLOBAL_H__ */ GabeditSrc250/src/Common/Exit.h0000644000175100017510000000020313130665225016567 0ustar alloucheallouche#ifndef __GABEDIT_EXIT_H__ #define __GABEDIT_EXIT_H__ void ExitDlg(GtkWidget* w, gpointer data); #endif /* __GABEDIT_EXIT_H__ */ GabeditSrc250/src/Common/Preferences.c0000644000175100017510000042711313130665225020127 0ustar alloucheallouche/* Preferences.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "Global.h" #include "../Common/Help.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "Windows.h" #include "TextEdit.h" #include "../Utils/Vector3d.h" #include "../Display/PreferencesOrb.h" #include "../Display/GLArea.h" #include "../Display/UtilsOrb.h" #include "../Geometry/ResultsAnalise.h" #include "../Geometry/GeomGlobal.h" #include "../Files/FolderChooser.h" #include "../Files/GabeditFolderChooser.h" void rafresh_drawing(); void set_color_surface(gint num,gdouble v[]); #include "../../pixmaps/Open.xpm" static GtkWidget* entrybabel = NULL; GtkWidget *NoteBook; static GtkWidget *Wins = NULL; static GtkWidget *EntryDeMon = NULL; static GtkWidget *EntryGamess = NULL; static GtkWidget *EntryGaussian = NULL; static GtkWidget *EntryMolcas = NULL; static GtkWidget *EntryMolpro = NULL; static GtkWidget *EntryMopac = NULL; static GtkWidget *EntryPovray = NULL; static GtkWidget *EntryMPQC = NULL; static GtkWidget *EntryFireFly = NULL; static GtkWidget *EntryQChem = NULL; static GtkWidget *EntryOrca = NULL; static GtkWidget *EntryNWChem = NULL; static GtkWidget *EntryPsicode = NULL; static GtkWidget *ComboDeMon = NULL; static GtkWidget *ComboGamess = NULL; static GtkWidget *ComboGaussian = NULL; static GtkWidget *ComboMolcas = NULL; static GtkWidget *ComboMolpro = NULL; static GtkWidget *ComboMopac = NULL; static GtkWidget *ComboPovray = NULL; static GtkWidget *ComboMPQC = NULL; static GtkWidget *ComboFireFly = NULL; static GtkWidget *ComboQChem = NULL; static GtkWidget *ComboOrca = NULL; static GtkWidget *ComboNWChem = NULL; static GtkWidget *ComboPsicode = NULL; static GtkWidget *ButtonDeMon = NULL; static GtkWidget *ButtonGamess = NULL; static GtkWidget *ButtonGaussian = NULL; static GtkWidget *ButtonMolcas = NULL; static GtkWidget *ButtonMolpro = NULL; static GtkWidget *ButtonMopac = NULL; static GtkWidget *ButtonPovray = NULL; static GtkWidget *ButtonMPQC = NULL; static GtkWidget *ButtonFireFly = NULL; static GtkWidget *ButtonQChem = NULL; static GtkWidget *ButtonOrca = NULL; static GtkWidget *ButtonNWChem = NULL; static GtkWidget *ButtonPsicode = NULL; static GtkWidget *EntryBatchType = NULL; GtkWidget *selectors[3]; GdkColor ColorTemp; gchar *FontTemp; static gboolean instal = FALSE; /********************************************************************************/ void destroy_preferences_window(GtkWidget*Win) { destroy_children(Wins); Wins = NULL; } /********************************************************************************/ void modify_color_surfaces() { gdouble Col[4]; GdkColor color; /* positive value */ gtk_color_button_get_color ((GtkColorButton*)selectors[0], &color); Col[0] = color.red/65535.0; Col[1] = color.green/65535.0; Col[2] = color.blue/65535.0; set_color_surface(0,Col); /* negative value */ gtk_color_button_get_color ((GtkColorButton*)selectors[1], &color); Col[0] = color.red/65535.0; Col[1] = color.green/65535.0; Col[2] = color.blue/65535.0; set_color_surface(1,Col); /* density surface */ gtk_color_button_get_color ((GtkColorButton*)selectors[2], &color); Col[0] = color.red/65535.0; Col[1] = color.green/65535.0; Col[2] = color.blue/65535.0; set_color_surface(2,Col); rafresh_window_orb(); } /********************************************************************************/ void create_color_surfaces(GtkWidget *Wins,GtkWidget *Frame) { GtkWidget *vbox; vbox = create_vbox(Frame); create_colorsel_frame(vbox,NULL,selectors); } /********************************************************************************/ static void remove_gamess_command() { G_CONST_RETURN gchar *strcom; GList *glist = NULL; gint i; gint inList = -1; if(gamessCommands.numberOfCommands<2) return; strcom = gtk_entry_get_text (GTK_ENTRY (EntryGamess)); for(i=0;i=0;i--) glist = g_list_append(glist,gamessCommands.commands[i]); gtk_combo_box_entry_set_popdown_strings( ComboGamess, glist) ; g_list_free(glist); if(gamessCommands.numberOfCommands<2) gtk_widget_set_sensitive(ButtonGamess, FALSE); else gtk_widget_set_sensitive(ButtonGamess, TRUE); } /********************************************************************************/ static void remove_gaussian_command() { G_CONST_RETURN gchar *strcom; GList *glist = NULL; gint i; gint inList = -1; if(gaussianCommands.numberOfCommands<2) return; strcom = gtk_entry_get_text (GTK_ENTRY (EntryGaussian)); for(i=0;i=0;i--) glist = g_list_append(glist,gaussianCommands.commands[i]); gtk_combo_box_entry_set_popdown_strings( ComboGaussian, glist) ; g_list_free(glist); if(gaussianCommands.numberOfCommands<2) gtk_widget_set_sensitive(ButtonGaussian, FALSE); else gtk_widget_set_sensitive(ButtonGaussian, TRUE); } /********************************************************************************/ static void remove_molcas_command() { G_CONST_RETURN gchar *strcom; GList *glist = NULL; gint i; gint inList = -1; if(molcasCommands.numberOfCommands<2) return; strcom = gtk_entry_get_text (GTK_ENTRY (EntryMolcas)); for(i=0;i=0;i--) glist = g_list_append(glist,molcasCommands.commands[i]); gtk_combo_box_entry_set_popdown_strings( ComboMolcas, glist) ; g_list_free(glist); if(molcasCommands.numberOfCommands<2) gtk_widget_set_sensitive(ButtonMolcas, FALSE); else gtk_widget_set_sensitive(ButtonMolcas, TRUE); } /********************************************************************************/ static void remove_mpqc_command() { G_CONST_RETURN gchar *strcom; GList *glist = NULL; gint i; gint inList = -1; if(mpqcCommands.numberOfCommands<2) return; strcom = gtk_entry_get_text (GTK_ENTRY (EntryMPQC)); for(i=0;i=0;i--) glist = g_list_append(glist,mpqcCommands.commands[i]); gtk_combo_box_entry_set_popdown_strings( ComboMPQC, glist) ; g_list_free(glist); if(mpqcCommands.numberOfCommands<2) gtk_widget_set_sensitive(ButtonMPQC, FALSE); else gtk_widget_set_sensitive(ButtonMPQC, TRUE); } /********************************************************************************/ static void remove_molpro_command() { G_CONST_RETURN gchar *strcom; GList *glist = NULL; gint i; gint inList = -1; if(molproCommands.numberOfCommands<2) return; strcom = gtk_entry_get_text (GTK_ENTRY (EntryMolpro)); for(i=0;i=0;i--) glist = g_list_append(glist,molproCommands.commands[i]); gtk_combo_box_entry_set_popdown_strings( ComboMolpro, glist) ; g_list_free(glist); if(molproCommands.numberOfCommands<2) gtk_widget_set_sensitive(ButtonMolpro, FALSE); else gtk_widget_set_sensitive(ButtonMolpro, TRUE); } /********************************************************************************/ static void remove_demon_command() { G_CONST_RETURN gchar *strcom; GList *glist = NULL; gint i; gint inList = -1; if(demonCommands.numberOfCommands<2) return; strcom = gtk_entry_get_text (GTK_ENTRY (EntryDeMon)); for(i=0;i=0;i--) glist = g_list_append(glist,demonCommands.commands[i]); gtk_combo_box_entry_set_popdown_strings( ComboDeMon, glist) ; g_list_free(glist); if(demonCommands.numberOfCommands<2) gtk_widget_set_sensitive(ButtonDeMon, FALSE); else gtk_widget_set_sensitive(ButtonDeMon, TRUE); } /********************************************************************************/ /********************************************************************************/ static void remove_firefly_command() { G_CONST_RETURN gchar *strcom; GList *glist = NULL; gint i; gint inList = -1; if(fireflyCommands.numberOfCommands<2) return; strcom = gtk_entry_get_text (GTK_ENTRY (EntryFireFly)); for(i=0;i=0;i--) glist = g_list_append(glist,fireflyCommands.commands[i]); gtk_combo_box_entry_set_popdown_strings( ComboFireFly, glist) ; g_list_free(glist); if(fireflyCommands.numberOfCommands<2) gtk_widget_set_sensitive(ButtonFireFly, FALSE); else gtk_widget_set_sensitive(ButtonFireFly, TRUE); } /********************************************************************************/ static void remove_mopac_command() { G_CONST_RETURN gchar *strcom; GList *glist = NULL; gint i; gint inList = -1; if(mopacCommands.numberOfCommands<2) return; strcom = gtk_entry_get_text (GTK_ENTRY (EntryMopac)); for(i=0;i=0;i--) glist = g_list_append(glist,mopacCommands.commands[i]); gtk_combo_box_entry_set_popdown_strings( ComboMopac, glist) ; g_list_free(glist); if(mopacCommands.numberOfCommands<2) gtk_widget_set_sensitive(ButtonMopac, FALSE); else gtk_widget_set_sensitive(ButtonMopac, TRUE); } /********************************************************************************/ static void remove_qchem_command() { G_CONST_RETURN gchar *strcom; GList *glist = NULL; gint i; gint inList = -1; if(qchemCommands.numberOfCommands<2) return; strcom = gtk_entry_get_text (GTK_ENTRY (EntryQChem)); for(i=0;i=0;i--) glist = g_list_append(glist,qchemCommands.commands[i]); gtk_combo_box_entry_set_popdown_strings( ComboQChem, glist) ; g_list_free(glist); if(qchemCommands.numberOfCommands<2) gtk_widget_set_sensitive(ButtonQChem, FALSE); else gtk_widget_set_sensitive(ButtonQChem, TRUE); } /********************************************************************************/ static void remove_orca_command() { G_CONST_RETURN gchar *strcom; GList *glist = NULL; gint i; gint inList = -1; if(orcaCommands.numberOfCommands<2) return; strcom = gtk_entry_get_text (GTK_ENTRY (EntryOrca)); for(i=0;i=0;i--) glist = g_list_append(glist,orcaCommands.commands[i]); gtk_combo_box_entry_set_popdown_strings( ComboOrca, glist) ; g_list_free(glist); if(orcaCommands.numberOfCommands<2) gtk_widget_set_sensitive(ButtonOrca, FALSE); else gtk_widget_set_sensitive(ButtonOrca, TRUE); } /********************************************************************************/ static void remove_nwchem_command() { G_CONST_RETURN gchar *strcom; GList *glist = NULL; gint i; gint inList = -1; if(nwchemCommands.numberOfCommands<2) return; strcom = gtk_entry_get_text (GTK_ENTRY (EntryNWChem)); for(i=0;i=0;i--) glist = g_list_append(glist,nwchemCommands.commands[i]); gtk_combo_box_entry_set_popdown_strings( ComboNWChem, glist) ; g_list_free(glist); if(nwchemCommands.numberOfCommands<2) gtk_widget_set_sensitive(ButtonNWChem, FALSE); else gtk_widget_set_sensitive(ButtonNWChem, TRUE); } /********************************************************************************/ static void remove_psicode_command() { G_CONST_RETURN gchar *strcom; GList *glist = NULL; gint i; gint inList = -1; if(psicodeCommands.numberOfCommands<2) return; strcom = gtk_entry_get_text (GTK_ENTRY (EntryPsicode)); for(i=0;i=0;i--) glist = g_list_append(glist,psicodeCommands.commands[i]); gtk_combo_box_entry_set_popdown_strings( ComboPsicode, glist) ; g_list_free(glist); if(psicodeCommands.numberOfCommands<2) gtk_widget_set_sensitive(ButtonPsicode, FALSE); else gtk_widget_set_sensitive(ButtonPsicode, TRUE); } /********************************************************************************/ static void remove_povray_command() { G_CONST_RETURN gchar *strcom; GList *glist = NULL; gint i; gint inList = -1; if(povrayCommands.numberOfCommands<2) return; strcom = gtk_entry_get_text (GTK_ENTRY (EntryPovray)); for(i=0;i=0;i--) glist = g_list_append(glist,povrayCommands.commands[i]); gtk_combo_box_entry_set_popdown_strings( ComboPovray, glist) ; g_list_free(glist); if(povrayCommands.numberOfCommands<2) gtk_widget_set_sensitive(ButtonPovray, FALSE); else gtk_widget_set_sensitive(ButtonPovray, TRUE); } /********************************************************************************/ void apply_all() { modify_gaussian_command(); modify_molpro_command(); modify_demon_command(); modify_color_surfaces(); } /********************************************************************************/ void set_temp_font(GtkFontSelectionDialog *Sel,gpointer *d) { FontTemp = gtk_font_selection_dialog_get_font_name(Sel); } /********************************************************************************/ void set_font_other (gchar *fontname) { GtkStyle *style; PangoFontDescription *font_desc = NULL; style = gtk_widget_get_default_style (); font_desc = pango_font_description_from_string (fontname); if (font_desc) { style->font_desc = font_desc; /* gtk_widget_set_default_style(style); */ } else { gchar* temp= NULL; temp = g_strdup_printf(N_("Unknown font,\n%s\nPlease select a other\n"),fontname); Message(temp,"ERROR",TRUE); g_free(temp); } } /********************************************************************************/ static void set_button_font(GtkWidget *button,gpointer *data) { GtkWidget *hbox; GtkWidget *label; gchar *Type = g_object_get_data(G_OBJECT (button), "Type"); gtk_widget_hide (GTK_WIDGET(button)); hbox = g_object_get_data(G_OBJECT (button), "Hbox"); gtk_widget_destroy(GTK_WIDGET(hbox)); hbox = gtk_hbox_new (TRUE, 0); label = gtk_label_new(FontTemp); gtk_container_add(GTK_CONTAINER(hbox),label); gtk_container_add(GTK_CONTAINER(button),hbox); g_object_set_data(G_OBJECT (button), "Hbox", hbox); gtk_widget_show_all (GTK_WIDGET(button)); if(strstr(Type,"Data")) { set_font (text, FontTemp); if( FontsStyleData.fontname ) g_free(FontsStyleData.fontname); FontsStyleData.fontname = g_strdup(FontTemp); } else if(strstr(Type,"Result")) { set_font (textresult, FontTemp); set_font (TextOutput, FontTemp); set_font (TextError, FontTemp); if( FontsStyleResult.fontname ) g_free(FontsStyleResult.fontname); FontsStyleResult.fontname = g_strdup(FontTemp); } else if(strstr(Type,"Label")) { if( FontsStyleLabel.fontname ) g_free(FontsStyleLabel.fontname); FontsStyleLabel.fontname = g_strdup(FontTemp); if(GeomDrawingArea) rafresh_drawing(); } else { set_font_other (FontTemp); if( FontsStyleOther.fontname ) g_free(FontsStyleOther.fontname); FontsStyleOther.fontname = g_strdup(FontTemp); } } /********************************************************************************/ static void open_font_dlg(GtkWidget *button,gpointer tdata) { GtkFontSelectionDialog *FontDlg; FontDlg = (GtkFontSelectionDialog *)gtk_font_selection_dialog_new(_("Font selection")); gtk_window_set_position(GTK_WINDOW(FontDlg),GTK_WIN_POS_CENTER); if(!instal) { add_child(Wins, GTK_WIDGET(FontDlg), gtk_widget_destroy, _(" Font selction ")); g_signal_connect(G_OBJECT(FontDlg),"delete_event",(GCallback)delete_child,NULL); } else { gtk_window_set_modal (GTK_WINDOW (FontDlg), TRUE); gtk_window_set_transient_for(GTK_WINDOW(FontDlg),GTK_WINDOW(Wins)); } gtk_font_selection_dialog_set_font_name ((GtkFontSelectionDialog *)FontDlg,(gchar*)tdata); /* gtk_widget_hide(FontDlg->help_button);*/ g_signal_connect_swapped(GTK_OBJECT(FontDlg->ok_button),"clicked", (GCallback)set_temp_font,GTK_OBJECT(FontDlg)); g_signal_connect_swapped(GTK_OBJECT(FontDlg->ok_button),"clicked", (GCallback)set_button_font,GTK_OBJECT(button)); if(!instal) { g_signal_connect_swapped(GTK_OBJECT(FontDlg->ok_button),"clicked",G_CALLBACK(delete_child),GTK_OBJECT(FontDlg)); g_signal_connect_swapped(GTK_OBJECT(FontDlg->cancel_button),"clicked",G_CALLBACK(delete_child),GTK_OBJECT(FontDlg)); } else { g_signal_connect_swapped(GTK_OBJECT(FontDlg->ok_button),"clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(FontDlg)); g_signal_connect_swapped(GTK_OBJECT(FontDlg->cancel_button),"clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(FontDlg)); } gtk_widget_show(GTK_WIDGET(FontDlg)); } /********************************************************************************/ void set_temp_color(GtkColorSelection *Sel,gpointer *d) { gtk_color_selection_get_current_color(Sel, &ColorTemp); } /********************************************************************************/ static void set_button_color(GtkObject *b,gpointer *data) { GtkWidget *hbox; GtkWidget *button = GTK_WIDGET(b); gchar *Type = g_object_get_data(G_OBJECT (button), "Type"); gtk_widget_hide (GTK_WIDGET(button)); hbox = g_object_get_data(G_OBJECT (button), "Hbox"); gtk_widget_destroy(GTK_WIDGET(hbox)); hbox = create_hbox_pixmap_color(Wins,ColorTemp.red,ColorTemp.green,ColorTemp.blue); gtk_container_add(GTK_CONTAINER(button),hbox); g_object_set_data(G_OBJECT (button), "Hbox", hbox); gtk_widget_show (hbox); gtk_widget_show_all (GTK_WIDGET(button)); if(strstr(Type,"Data _Back")) { set_base_style(text,ColorTemp.red,ColorTemp.green,ColorTemp.blue); FontsStyleData.BaseColor = ColorTemp; } else if(strstr(Type,"Data _Fore")) { set_text_style(text,ColorTemp.red,ColorTemp.green,ColorTemp.blue); FontsStyleData.TextColor = ColorTemp; } if(strstr(Type,"Result _Back")) { set_base_style(textresult,ColorTemp.red,ColorTemp.green,ColorTemp.blue); set_base_style(TextOutput,ColorTemp.red,ColorTemp.green,ColorTemp.blue); set_base_style(TextError,ColorTemp.red,ColorTemp.green,ColorTemp.blue); FontsStyleResult.BaseColor = ColorTemp; } else if(strstr(Type,"Result _Fore")) { set_text_style(textresult,ColorTemp.red,ColorTemp.green,ColorTemp.blue); set_text_style(TextOutput,ColorTemp.red,ColorTemp.green,ColorTemp.blue); set_text_style(TextError,ColorTemp.red,ColorTemp.green,ColorTemp.blue); FontsStyleResult.TextColor = ColorTemp; } else if(strstr(Type,"Label_Fore")) { FontsStyleLabel.TextColor = ColorTemp; if(GeomDrawingArea) rafresh_drawing(); } } /********************************************************************************/ static void open_color_dlg(GtkWidget *button,gpointer tcolor) { GtkColorSelectionDialog *ColorDlg; ColorDlg = (GtkColorSelectionDialog *)gtk_color_selection_dialog_new(_("Set Atom Color")); if(tcolor) { GdkColor* color = (GdkColor*)tcolor; gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (ColorDlg->colorsel), color); } gtk_window_set_position(GTK_WINDOW(ColorDlg),GTK_WIN_POS_CENTER); if(!instal) { add_child(Wins,GTK_WIDGET(ColorDlg),gtk_widget_destroy,_(" Set Color ")); g_signal_connect(G_OBJECT(ColorDlg),"delete_event",(GCallback)delete_child,NULL); } else { gtk_window_set_modal (GTK_WINDOW (ColorDlg), TRUE); gtk_window_set_transient_for(GTK_WINDOW(ColorDlg),GTK_WINDOW(Wins)); } gtk_widget_hide(ColorDlg->help_button); g_signal_connect_swapped(GTK_OBJECT(ColorDlg->ok_button),"clicked", (GCallback)set_temp_color,GTK_OBJECT(ColorDlg->colorsel)); g_signal_connect_swapped(GTK_OBJECT(ColorDlg->ok_button),"clicked", (GCallback)set_button_color,GTK_OBJECT(button)); if(!instal) { g_signal_connect_swapped(GTK_OBJECT(ColorDlg->ok_button),"clicked",G_CALLBACK(delete_child),GTK_OBJECT(ColorDlg)); g_signal_connect_swapped(GTK_OBJECT(ColorDlg->cancel_button),"clicked",G_CALLBACK(delete_child),GTK_OBJECT(ColorDlg)); } else { g_signal_connect_swapped(GTK_OBJECT(ColorDlg->ok_button),"clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(ColorDlg)); g_signal_connect_swapped(GTK_OBJECT(ColorDlg->cancel_button),"clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(ColorDlg)); } gtk_widget_show(GTK_WIDGET(ColorDlg)); } /********************************************************************************/ GtkWidget* add_button_color(GtkWidget *hbox,gushort red,gushort green,gushort blue) { GtkWidget *button; GdkColor* color = g_malloc(sizeof(GdkColor)); color->red = red; color->green = green; color->blue = blue; button = create_button_pixmap_color(Wins,red,green,blue); g_object_set_data_full (G_OBJECT (button), "InitialCOlor", color,g_free); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)open_color_dlg,color); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 1); return button; } /********************************************************************************/ GtkWidget* add_label_color(GtkWidget *hbox,gchar *tlabel) { GtkWidget *label; label = gtk_label_new (tlabel); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 1); return label; } /********************************************************************************/ void add_frame_label(GtkWidget *hboxall) { GtkWidget *vbox; GtkWidget *frame; GtkWidget *button; GtkWidget *label; GtkWidget *hboxbutton; gchar *type; gchar *tfont; gchar *tlabel = g_strdup("Label"); GtkWidget *table = gtk_table_new(2,3,FALSE); frame = create_frame(Wins,hboxall,tlabel); vbox = create_vbox(frame); gtk_container_add(GTK_CONTAINER(vbox),table); add_label_table(table,_(" Default font "),0,0); add_label_table(table," : ",0,1); hboxbutton = gtk_hbox_new (TRUE, 0); gtk_widget_set_size_request(GTK_WIDGET(hboxbutton), -1, (gint)(ScreenHeight/50)); tfont = g_strdup(FontsStyleLabel.fontname); label = gtk_label_new(tfont); button = gtk_button_new(); gtk_container_add(GTK_CONTAINER(hboxbutton),label); gtk_container_add(GTK_CONTAINER(button),hboxbutton); g_object_set_data(G_OBJECT (button), "Hbox", hboxbutton); add_widget_table(table,button,0,2); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)open_font_dlg,(gpointer)tfont); type = g_strdup_printf("%s",tlabel); g_object_set_data(G_OBJECT (button), "Type", type); add_label_table(table,_(" Foreground color "),1,0); add_label_table(table," : ",1,1); hboxbutton = gtk_hbox_new (FALSE, 0); button = add_button_color(hboxbutton, FontsStyleLabel.TextColor.red,FontsStyleLabel.TextColor.green,FontsStyleLabel.TextColor.blue); add_widget_table(table,hboxbutton,1,2); type = g_strdup_printf("%s_Fore",tlabel); g_object_set_data(G_OBJECT (button), "Type", type); } /********************************************************************************/ void add_frame_data_result(GtkWidget *hboxall,gchar *tlabel) { GtkWidget *hboxbutton; GtkWidget *vbox; GtkWidget *frame; GtkWidget *button; GtkWidget *label; gchar *type; gchar *tfont; GtkWidget *table = gtk_table_new(3,3,FALSE); frame = create_frame(Wins,hboxall,tlabel); vbox = create_vbox(frame); gtk_container_add(GTK_CONTAINER(vbox),table); add_label_table(table," Default font ",0,0); add_label_table(table," : ",0,1); hboxbutton = gtk_hbox_new (TRUE, 0); gtk_widget_set_size_request(GTK_WIDGET(hboxbutton), -1, (gint)(ScreenHeight/50)); if(strstr(tlabel,"Data")) tfont = g_strdup(FontsStyleData.fontname); else tfont = g_strdup(FontsStyleResult.fontname); label = gtk_label_new(tfont); button = gtk_button_new(); gtk_container_add(GTK_CONTAINER(hboxbutton),label); gtk_container_add(GTK_CONTAINER(button),hboxbutton); g_object_set_data(G_OBJECT (button), "Hbox", hboxbutton); add_widget_table(table,button,0,2); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)open_font_dlg,(gpointer)tfont); type = g_strdup_printf("%s",tlabel); g_object_set_data(G_OBJECT (button), "Type", type); add_label_table(table,_(" Background color "),1,0); add_label_table(table," : ",1,1); if(strstr(tlabel,"Data")) { hboxbutton = gtk_hbox_new (FALSE, 0); button = add_button_color(hboxbutton, FontsStyleData.BaseColor.red,FontsStyleData.BaseColor.green,FontsStyleData.BaseColor.blue); } else { hboxbutton = gtk_hbox_new (FALSE, 0); button = add_button_color(hboxbutton, FontsStyleResult.BaseColor.red,FontsStyleResult.BaseColor.green,FontsStyleResult.BaseColor.blue); } add_widget_table(table,hboxbutton,1,2); type = g_strdup_printf("%s_Back",tlabel); g_object_set_data(G_OBJECT (button), "Type", type); add_label_table(table,_(" Foreground color "),2,0); add_label_table(table," : ",2,1); if(strstr(tlabel,"Data")) { hboxbutton = gtk_hbox_new (FALSE, 0); button = add_button_color(hboxbutton, FontsStyleData.TextColor.red,FontsStyleData.TextColor.green,FontsStyleData.TextColor.blue); } else { hboxbutton = gtk_hbox_new (FALSE, 0); button = add_button_color(hboxbutton, FontsStyleResult.TextColor.red,FontsStyleResult.TextColor.green,FontsStyleResult.TextColor.blue); } add_widget_table(table,hboxbutton,2,2); type = g_strdup_printf("%s_Fore",tlabel); g_object_set_data(G_OBJECT (button), "Type", type); } /********************************************************************************/ void create_font_color(GtkWidget *Wins,GtkWidget *Frame) { GtkWidget *vbox; GtkWidget *hbox; GtkWidget *hboxall; gtk_widget_realize(Wins); vbox = create_vbox(Frame); hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 1); hboxall = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), hboxall, FALSE, FALSE, 1); add_frame_data_result(hboxall,_(" Data ")); hboxall = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), hboxall, FALSE, FALSE, 1); add_frame_data_result(hboxall,_(" Result ")); hboxall = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), hboxall, FALSE, FALSE, 1); add_frame_label(hboxall); /* add_frame_other(hboxall);*/ } /********************************************************************************/ void create_font_color_in_box(GtkWidget *Win,GtkWidget *Box) { GtkWidget *vbox; GtkWidget *hbox; GtkWidget *Frame; GtkWidget *hboxall; Frame= gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(Frame), 10); gtk_container_add(GTK_CONTAINER(Box),Frame); Wins = Win; instal = TRUE; gtk_widget_realize(Wins); vbox = create_vbox(Frame); hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 1); hboxall = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), hboxall, FALSE, FALSE, 1); add_frame_data_result(hboxall,_(" Data ")); hboxall = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), hboxall, FALSE, FALSE, 1); add_frame_data_result(hboxall,_(" Result ")); hboxall = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), hboxall, FALSE, FALSE, 1); add_frame_label(hboxall); hboxall = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), hboxall, FALSE, FALSE, 1); /* add_frame_other(hboxall);*/ gtk_widget_show_all(Frame); } /********************************************************************************/ static void modify_batch_command(GtkWidget *Entry,gpointer data) { GtkWidget* entryType = GTK_WIDGET(data); G_CONST_RETURN gchar* textType = gtk_entry_get_text (GTK_ENTRY (entryType)); G_CONST_RETURN gchar* textEntry = gtk_entry_get_text (GTK_ENTRY (Entry)); GtkWidget* entryAll = g_object_get_data(G_OBJECT (entryType), "EntryAll"); GtkWidget* entryUser = g_object_get_data(G_OBJECT (entryType), "EntryUser"); GtkWidget* entryKill = g_object_get_data(G_OBJECT (entryType), "EntryKill"); GtkWidget* entryJobId = g_object_get_data(G_OBJECT (entryType), "EntryJobId"); gchar* temp = g_strdup(textEntry); gint n=-1; gint i; if(!temp) return; if(strlen(temp)<1) return; for(i=0;ichild; add_widget_table(table,combo,(gushort)i,2); gtk_editable_set_editable((GtkEditable*)EntryBatchType,FALSE); gtk_entry_set_text (GTK_ENTRY (EntryBatchType),NameTypeBatch); /* ------------------------------------------------------------------*/ i = 1; add_label_table(table,_(" Command for list of all Job "),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); entry = gtk_entry_new(); add_widget_table(table,entry,(gushort)i,2); gtk_entry_set_text (GTK_ENTRY (entry),NameCommandBatchAll); g_object_set_data(G_OBJECT (EntryBatchType), "EntryAll", entry); gtk_editable_set_editable((GtkEditable*)entry,FALSE); gtk_widget_set_sensitive(entry, FALSE); g_signal_connect(G_OBJECT (entry), "changed", (GCallback)modify_batch_command,EntryBatchType); /* ------------------------------------------------------------------*/ i = 2; add_label_table(table,N_(" Command for list of user Job "),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); entry = gtk_entry_new(); add_widget_table(table,entry,(gushort)i,2); gtk_entry_set_text (GTK_ENTRY (entry),NameCommandBatchUser); g_object_set_data(G_OBJECT (EntryBatchType), "EntryUser", entry); gtk_editable_set_editable((GtkEditable*)entry,FALSE); gtk_widget_set_sensitive(entry, FALSE); g_signal_connect(G_OBJECT (entry), "changed", (GCallback)modify_batch_command,EntryBatchType); /* ------------------------------------------------------------------*/ i = 3; add_label_table(table,_(" Command for kill a Job "),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); entry = gtk_entry_new(); add_widget_table(table,entry,(gushort)i,2); gtk_entry_set_text (GTK_ENTRY (entry),NameCommandBatchKill); g_object_set_data(G_OBJECT (EntryBatchType), "EntryKill", entry); gtk_editable_set_editable((GtkEditable*)entry,FALSE); gtk_widget_set_sensitive(entry, FALSE); g_signal_connect(G_OBJECT (entry), "changed", (GCallback)modify_batch_command,EntryBatchType); /* ------------------------------------------------------------------*/ i = 4; add_label_table(table,_(" Title for Job id "),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); entry = gtk_entry_new(); add_widget_table(table,entry,(gushort)i,2); gtk_entry_set_text (GTK_ENTRY (entry),NamejobIdTitleBatch); g_object_set_data(G_OBJECT (EntryBatchType), "EntryJobId", entry); gtk_editable_set_editable((GtkEditable*)entry,FALSE); gtk_widget_set_sensitive(entry, FALSE); g_signal_connect(G_OBJECT (entry), "changed", (GCallback)modify_batch_command,EntryBatchType); /* ------------------------------------------------------------------*/ g_signal_connect(G_OBJECT (EntryBatchType), "changed", (GCallback)modify_batch_entrys, NULL); gtk_entry_set_text (GTK_ENTRY (EntryBatchType)," "); gtk_entry_set_text (GTK_ENTRY (EntryBatchType),NameTypeBatch); gtk_widget_show_all(frame); } /********************************************************************************/ /* static void changed_babel(GtkWidget* wid) { if(babelCommand) g_free(babelCommand); babelCommand = g_strdup(gtk_entry_get_text(GTK_ENTRY(entrybabel))); } static void set_entry_babel(GtkWidget* SelFile, gint response_id) { GtkWidget *entry = NULL; gchar *longfile = NULL; if(response_id != GTK_RESPONSE_OK) return; entry = (GtkWidget*)(g_object_get_data(G_OBJECT(SelFile),"EntryFile")); longfile = gabedit_file_chooser_get_current_file(GABEDIT_FILE_CHOOSER(SelFile)); gtk_entry_set_text(GTK_ENTRY(entry),longfile); if(babelCommand) g_free(babelCommand); babelCommand = g_strdup(gtk_entry_get_text(GTK_ENTRY(entrybabel))); } static void set_entry_babel_selction(GtkWidget* entry) { GtkWidget *SelFile; SelFile = gabedit_file_chooser_new(_("File chooser"), GTK_FILE_CHOOSER_ACTION_OPEN); gtk_window_set_modal (GTK_WINDOW (SelFile), TRUE); gabedit_file_chooser_hide_hidden(GABEDIT_FILE_CHOOSER(SelFile)); g_signal_connect(G_OBJECT(SelFile),"delete_event", (GCallback)gtk_widget_destroy,NULL); g_object_set_data(G_OBJECT (SelFile), "EntryFile", entry); g_signal_connect (SelFile, "response", G_CALLBACK (set_entry_babel), GTK_OBJECT(SelFile)); g_signal_connect (SelFile, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(SelFile)); // g_signal_connect (SelFile, "close", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(SelFile)); gtk_widget_show(SelFile); } */ /********************************************************************************/ #ifdef G_OS_WIN32 static void set_entry_gamessdir(GtkWidget* dirSelector, gint response_id) { gchar* dirname = NULL; GtkWidget *entry; if(response_id != GTK_RESPONSE_OK) return; dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); entry = (GtkWidget*)(g_object_get_data(G_OBJECT(dirSelector),"EntryFile")); gtk_entry_set_text(GTK_ENTRY(entry),dirname); if(gamessDirectory) g_free(gamessDirectory); gamessDirectory = g_strdup(dirname); } /********************************************************************************/ static void set_entry_gamessDir_selection(GtkWidget* entry) { GtkWidget *dirSelector; dirSelector = selctionOfDir(set_entry_gamessdir, _("Select Gamess folder"), GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); g_signal_connect(G_OBJECT(dirSelector),"delete_event", (GCallback)gtk_widget_destroy,NULL); g_object_set_data(G_OBJECT (dirSelector), "EntryFile", entry); g_signal_connect (dirSelector, "response", G_CALLBACK (set_entry_gamessdir), GTK_OBJECT(dirSelector)); g_signal_connect (dirSelector, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(dirSelector)); gtk_widget_show(dirSelector); } /********************************************************************************/ static void set_entry_demondir(GtkWidget* dirSelector, gint response_id) { gchar* dirname = NULL; gchar* t = NULL; GtkWidget *entry; if(response_id != GTK_RESPONSE_OK) return; dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); entry = (GtkWidget*)(g_object_get_data(G_OBJECT(dirSelector),"EntryFile")); gtk_entry_set_text(GTK_ENTRY(entry),dirname); if(demonDirectory) g_free(demonDirectory); demonDirectory = g_strdup(dirname); t = g_strdup_printf("%s;%s",demonDirectory,g_getenv("PATH")); g_setenv("PATH",t,TRUE); g_free(t); } /********************************************************************************/ static void set_entry_demonDir_selection(GtkWidget* entry) { GtkWidget *dirSelector; dirSelector = selctionOfDir(set_entry_demondir, _("Select Orca folder"), GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); g_signal_connect(G_OBJECT(dirSelector),"delete_event", (GCallback)gtk_widget_destroy,NULL); g_object_set_data(G_OBJECT (dirSelector), "EntryFile", entry); g_signal_connect (dirSelector, "response", G_CALLBACK (set_entry_demondir), GTK_OBJECT(dirSelector)); g_signal_connect (dirSelector, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(dirSelector)); gtk_widget_show(dirSelector); } /********************************************************************************/ static void set_entry_orcadir(GtkWidget* dirSelector, gint response_id) { gchar* dirname = NULL; gchar* t = NULL; GtkWidget *entry; if(response_id != GTK_RESPONSE_OK) return; dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); entry = (GtkWidget*)(g_object_get_data(G_OBJECT(dirSelector),"EntryFile")); gtk_entry_set_text(GTK_ENTRY(entry),dirname); if(orcaDirectory) g_free(orcaDirectory); orcaDirectory = g_strdup(dirname); t = g_strdup_printf("%s;%s",orcaDirectory,g_getenv("PATH")); g_setenv("PATH",t,TRUE); g_free(t); } /********************************************************************************/ static void set_entry_orcaDir_selection(GtkWidget* entry) { GtkWidget *dirSelector; dirSelector = selctionOfDir(set_entry_orcadir, _("Select Orca folder"), GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); g_signal_connect(G_OBJECT(dirSelector),"delete_event", (GCallback)gtk_widget_destroy,NULL); g_object_set_data(G_OBJECT (dirSelector), "EntryFile", entry); g_signal_connect (dirSelector, "response", G_CALLBACK (set_entry_orcadir), GTK_OBJECT(dirSelector)); g_signal_connect (dirSelector, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(dirSelector)); gtk_widget_show(dirSelector); } /********************************************************************************/ static void set_entry_nwchemdir(GtkWidget* dirSelector, gint response_id) { gchar* dirname = NULL; gchar* t = NULL; GtkWidget *entry; if(response_id != GTK_RESPONSE_OK) return; dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); entry = (GtkWidget*)(g_object_get_data(G_OBJECT(dirSelector),"EntryFile")); gtk_entry_set_text(GTK_ENTRY(entry),dirname); if(nwchemDirectory) g_free(nwchemDirectory); nwchemDirectory = g_strdup(dirname); t = g_strdup_printf("%s;%s",nwchemDirectory,g_getenv("PATH")); g_setenv("PATH",t,TRUE); g_free(t); } /********************************************************************************/ static void set_entry_nwchemDir_selection(GtkWidget* entry) { GtkWidget *dirSelector; dirSelector = selctionOfDir(set_entry_nwchemdir, _("Select NWChem folder"), GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); g_signal_connect(G_OBJECT(dirSelector),"delete_event", (GCallback)gtk_widget_destroy,NULL); g_object_set_data(G_OBJECT (dirSelector), "EntryFile", entry); g_signal_connect (dirSelector, "response", G_CALLBACK (set_entry_nwchemdir), GTK_OBJECT(dirSelector)); g_signal_connect (dirSelector, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(dirSelector)); gtk_widget_show(dirSelector); } /********************************************************************************/ static void set_entry_psicodedir(GtkWidget* dirSelector, gint response_id) { gchar* dirname = NULL; gchar* t = NULL; GtkWidget *entry; if(response_id != GTK_RESPONSE_OK) return; dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); entry = (GtkWidget*)(g_object_get_data(G_OBJECT(dirSelector),"EntryFile")); gtk_entry_set_text(GTK_ENTRY(entry),dirname); if(psicodeDirectory) g_free(psicodeDirectory); psicodeDirectory = g_strdup(dirname); t = g_strdup_printf("%s;%s",psicodeDirectory,g_getenv("PATH")); g_setenv("PATH",t,TRUE); g_free(t); } /********************************************************************************/ static void set_entry_psicodeDir_selection(GtkWidget* entry) { GtkWidget *dirSelector; dirSelector = selctionOfDir(set_entry_psicodedir, _("Select Psicode folder"), GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); g_signal_connect(G_OBJECT(dirSelector),"delete_event", (GCallback)gtk_widget_destroy,NULL); g_object_set_data(G_OBJECT (dirSelector), "EntryFile", entry); g_signal_connect (dirSelector, "response", G_CALLBACK (set_entry_psicodedir), GTK_OBJECT(dirSelector)); g_signal_connect (dirSelector, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(dirSelector)); gtk_widget_show(dirSelector); } /********************************************************************************/ static void set_entry_fireflydir(GtkWidget* dirSelector, gint response_id) { gchar* dirname = NULL; gchar* t = NULL; GtkWidget *entry; if(response_id != GTK_RESPONSE_OK) return; dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); entry = (GtkWidget*)(g_object_get_data(G_OBJECT(dirSelector),"EntryFile")); gtk_entry_set_text(GTK_ENTRY(entry),dirname); if(fireflyDirectory) g_free(fireflyDirectory); fireflyDirectory = g_strdup(dirname); t = g_strdup_printf("%s;%s",fireflyDirectory,g_getenv("PATH")); g_setenv("PATH",t,TRUE); g_free(t); } /********************************************************************************/ static void set_entry_fireflyDir_selection(GtkWidget* entry) { GtkWidget *dirSelector; dirSelector = selctionOfDir(set_entry_fireflydir, _("Select FireFly folder"), GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); g_signal_connect(G_OBJECT(dirSelector),"delete_event", (GCallback)gtk_widget_destroy,NULL); g_object_set_data(G_OBJECT (dirSelector), "EntryFile", entry); g_signal_connect (dirSelector, "response", G_CALLBACK (set_entry_fireflydir), GTK_OBJECT(dirSelector)); g_signal_connect (dirSelector, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(dirSelector)); gtk_widget_show(dirSelector); } /********************************************************************************/ static void set_entry_mopacdir(GtkWidget* dirSelector, gint response_id) { gchar* dirname = NULL; gchar* t = NULL; GtkWidget *entry; if(response_id != GTK_RESPONSE_OK) return; dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); entry = (GtkWidget*)(g_object_get_data(G_OBJECT(dirSelector),"EntryFile")); gtk_entry_set_text(GTK_ENTRY(entry),dirname); if(mopacDirectory) g_free(mopacDirectory); mopacDirectory = g_strdup(dirname); t = g_strdup_printf("%s;%s",mopacDirectory,g_getenv("PATH")); g_setenv("PATH",t,TRUE); g_free(t); } /********************************************************************************/ static void set_entry_mopacDir_selection(GtkWidget* entry) { GtkWidget *dirSelector; dirSelector = selctionOfDir(set_entry_mopacdir, _("Select Mopac folder"), GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); g_signal_connect(G_OBJECT(dirSelector),"delete_event", (GCallback)gtk_widget_destroy,NULL); g_object_set_data(G_OBJECT (dirSelector), "EntryFile", entry); g_signal_connect (dirSelector, "response", G_CALLBACK (set_entry_mopacdir), GTK_OBJECT(dirSelector)); g_signal_connect (dirSelector, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(dirSelector)); gtk_widget_show(dirSelector); } /********************************************************************************/ static void set_entry_povraydir(GtkWidget* dirSelector, gint response_id) { gchar* dirname = NULL; gchar* t = NULL; GtkWidget *entry; if(response_id != GTK_RESPONSE_OK) return; dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); entry = (GtkWidget*)(g_object_get_data(G_OBJECT(dirSelector),"EntryFile")); gtk_entry_set_text(GTK_ENTRY(entry),dirname); if(povrayDirectory) g_free(povrayDirectory); povrayDirectory = g_strdup(dirname); t = g_strdup_printf("%s;%s",povrayDirectory,g_getenv("PATH")); g_setenv("PATH",t,TRUE); g_free(t); } /********************************************************************************/ static void set_entry_povrayDir_selection(GtkWidget* entry) { GtkWidget *dirSelector; dirSelector = selctionOfDir(set_entry_povraydir, _("Select PovRay folder"), GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); g_signal_connect(G_OBJECT(dirSelector),"delete_event", (GCallback)gtk_widget_destroy,NULL); g_object_set_data(G_OBJECT (dirSelector), "EntryFile", entry); g_signal_connect (dirSelector, "response", G_CALLBACK (set_entry_povraydir), GTK_OBJECT(dirSelector)); g_signal_connect (dirSelector, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(dirSelector)); gtk_widget_show(dirSelector); } /********************************************************************************/ static void set_entry_gaussdir(GtkWidget* dirSelector, gint response_id) { gchar* dirname = NULL; gchar* t = NULL; GtkWidget *entry; if(response_id != GTK_RESPONSE_OK) return; dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); entry = (GtkWidget*)(g_object_get_data(G_OBJECT(dirSelector),"EntryFile")); gtk_entry_set_text(GTK_ENTRY(entry),dirname); if(gaussDirectory) g_free(gaussDirectory); gaussDirectory = g_strdup(dirname); t = g_strdup_printf("%s;%s",gaussDirectory,g_getenv("PATH")); g_setenv("PATH",t,TRUE); g_free(t); } /********************************************************************************/ static void set_entry_gaussDir_selection(GtkWidget* entry) { GtkWidget *dirSelector; dirSelector = selctionOfDir(set_entry_gaussdir, _("Select Gaussian folder"), GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); g_signal_connect(G_OBJECT(dirSelector),"delete_event", (GCallback)gtk_widget_destroy,NULL); g_object_set_data(G_OBJECT (dirSelector), "EntryFile", entry); g_signal_connect (dirSelector, "response", G_CALLBACK (set_entry_gaussdir), GTK_OBJECT(dirSelector)); g_signal_connect (dirSelector, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(dirSelector)); gtk_widget_show(dirSelector); } #endif /********************************************************************************/ static void set_entry_openbabeldir(GtkWidget* dirSelector, gint response_id) { gchar* dirname = NULL; gchar* t = NULL; GtkWidget *entry; if(response_id != GTK_RESPONSE_OK) return; dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); entry = (GtkWidget*)(g_object_get_data(G_OBJECT(dirSelector),"EntryFile")); gtk_entry_set_text(GTK_ENTRY(entry),dirname); if(openbabelDirectory) g_free(openbabelDirectory); openbabelDirectory = g_strdup(dirname); t = g_strdup_printf("%s;%s",openbabelDirectory,g_getenv("PATH")); g_setenv("PATH",t,TRUE); g_free(t); if(babelCommand) g_free(babelCommand); babelCommand = g_strdup_printf("%s%sobabel",openbabelDirectory,G_DIR_SEPARATOR_S); } /********************************************************************************/ static void set_entry_openbabelDir_selection(GtkWidget* entry) { GtkWidget *dirSelector; dirSelector = selctionOfDir(set_entry_openbabeldir, _("Select PovRay folder"), GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); g_signal_connect(G_OBJECT(dirSelector),"delete_event", (GCallback)gtk_widget_destroy,NULL); g_object_set_data(G_OBJECT (dirSelector), "EntryFile", entry); g_signal_connect (dirSelector, "response", G_CALLBACK (set_entry_openbabeldir), GTK_OBJECT(dirSelector)); g_signal_connect (dirSelector, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(dirSelector)); gtk_widget_show(dirSelector); } /********************************************************************************/ void create_execucte_commands(GtkWidget *Wins,GtkWidget *vbox,gboolean expand) { GtkWidget *hbox; GtkWidget *label; GtkWidget *frame; GtkWidget *combo; GtkWidget *button; frame = gtk_frame_new (_("Commands to execute Computational Chemistry Packages")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vbox), frame, expand, expand, 0); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); /* ------------------------------------------------------------------*/ hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 3); label = gtk_label_new (_("Command for execute Gamess : ")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 3); combo = create_combo_box_entry(gamessCommands.commands,gamessCommands.numberOfCommands,TRUE,-1,-1); ComboGamess = combo; EntryGamess = GTK_BIN(combo)->child; gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 3); gtk_entry_set_text (GTK_ENTRY (EntryGamess),NameCommandGamess ); g_signal_connect(G_OBJECT (EntryGamess), "activate", (GCallback)modify_gamess_command, NULL); button = create_button(Wins,_(" Remove from list ")); ButtonGamess = button; gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); if(gamessCommands.numberOfCommands<2) gtk_widget_set_sensitive(button, FALSE); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(remove_gamess_command),NULL); button = create_button(Wins,_(" Help ")); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(help_commands),NULL); /* ------------------------------------------------------------------*/ gtk_widget_realize(Wins); create_hseparator(vbox); /* ------------------------------------------------------------------*/ hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 3); label = gtk_label_new (_("Command for execute DeMon : ")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 3); combo = create_combo_box_entry(demonCommands.commands,demonCommands.numberOfCommands,TRUE,-1,-1); ComboDeMon = combo; EntryDeMon = GTK_BIN(combo)->child; gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 3); gtk_entry_set_text (GTK_ENTRY (EntryDeMon),NameCommandDeMon); g_signal_connect(G_OBJECT (EntryDeMon), "activate", (GCallback)modify_demon_command, NULL); button = create_button(Wins,_(" Remove from list ")); ButtonDeMon = button; gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); if(demonCommands.numberOfCommands<2) gtk_widget_set_sensitive(button, FALSE); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(remove_demon_command),NULL); button = create_button(Wins,_(" Help ")); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(help_commands),NULL); /* ------------------------------------------------------------------*/ create_hseparator(vbox); /* ------------------------------------------------------------------*/ hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 3); label = gtk_label_new (_("Command for execute Gaussian : ")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 3); combo = create_combo_box_entry(gaussianCommands.commands,gaussianCommands.numberOfCommands,TRUE,-1,-1); ComboGaussian = combo; EntryGaussian = GTK_BIN(combo)->child; gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 3); gtk_entry_set_text (GTK_ENTRY (EntryGaussian),NameCommandGaussian ); g_signal_connect(G_OBJECT (EntryGaussian), "activate", (GCallback)modify_gaussian_command, NULL); button = create_button(Wins,_(" Remove from list ")); ButtonGaussian = button; gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); if(gaussianCommands.numberOfCommands<2) gtk_widget_set_sensitive(button, FALSE); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(remove_gaussian_command),NULL); button = create_button(Wins,_(" Help ")); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(help_commands),NULL); /* ------------------------------------------------------------------*/ create_hseparator(vbox); /* ------------------------------------------------------------------*/ hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 3); label = gtk_label_new (_("Command for execute Molpro : ")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 3); combo = create_combo_box_entry(molproCommands.commands,molproCommands.numberOfCommands,TRUE,-1,-1); ComboMolpro = combo; EntryMolpro = GTK_BIN(combo)->child; gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 3); gtk_entry_set_text (GTK_ENTRY (EntryMolpro),NameCommandMolpro); g_signal_connect(G_OBJECT (EntryMolpro), "activate", (GCallback)modify_molpro_command, NULL); button = create_button(Wins,_(" Remove from list ")); ButtonMolpro = button; gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); if(molproCommands.numberOfCommands<2) gtk_widget_set_sensitive(button, FALSE); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(remove_molpro_command),NULL); button = create_button(Wins,_(" Help ")); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(help_commands),NULL); /* ------------------------------------------------------------------*/ create_hseparator(vbox); /* ------------------------------------------------------------------*/ hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 3); label = gtk_label_new (_("Command for execute Molcas : ")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 3); combo = create_combo_box_entry(molcasCommands.commands,molcasCommands.numberOfCommands,TRUE,-1,-1); ComboMolcas = combo; EntryMolcas = GTK_BIN(combo)->child; gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 3); gtk_entry_set_text (GTK_ENTRY (EntryMolcas),NameCommandMolcas); g_signal_connect(G_OBJECT (EntryMolcas), "activate", (GCallback)modify_molcas_command, NULL); button = create_button(Wins,_(" Remove from list ")); ButtonMolcas = button; gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); if(molcasCommands.numberOfCommands<2) gtk_widget_set_sensitive(button, FALSE); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(remove_molcas_command),NULL); button = create_button(Wins,_(" Help ")); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(help_commands),NULL); /* ------------------------------------------------------------------*/ create_hseparator(vbox); /* ------------------------------------------------------------------*/ hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 3); label = gtk_label_new (_("Command for execute MPQC : ")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 3); combo = create_combo_box_entry(mpqcCommands.commands,mpqcCommands.numberOfCommands,TRUE,-1,-1); ComboMPQC = combo; EntryMPQC = GTK_BIN(combo)->child; gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 3); gtk_entry_set_text (GTK_ENTRY (EntryMPQC),NameCommandMPQC); g_signal_connect(G_OBJECT (EntryMPQC), "activate", (GCallback)modify_mpqc_command, NULL); button = create_button(Wins,_(" Remove from list ")); ButtonMPQC = button; gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); if(mpqcCommands.numberOfCommands<2) gtk_widget_set_sensitive(button, FALSE); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(remove_mpqc_command),NULL); button = create_button(Wins,_(" Help ")); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(help_commands),NULL); /* ------------------------------------------------------------------*/ create_hseparator(vbox); /* ------------------------------------------------------------------*/ hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 3); label = gtk_label_new (_("Command for execute Orca : ")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 3); combo = create_combo_box_entry(orcaCommands.commands,orcaCommands.numberOfCommands,TRUE,-1,-1); ComboOrca = combo; EntryOrca = GTK_BIN(combo)->child; gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 3); gtk_entry_set_text (GTK_ENTRY (EntryOrca),NameCommandOrca); g_signal_connect(G_OBJECT (EntryOrca), "activate", (GCallback)modify_orca_command, NULL); button = create_button(Wins,_(" Remove from list ")); ButtonOrca = button; gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); if(orcaCommands.numberOfCommands<2) gtk_widget_set_sensitive(button, FALSE); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(remove_orca_command),NULL); button = create_button(Wins,_(" Help ")); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(help_commands),NULL); create_hseparator(vbox); /* ------------------------------------------------------------------*/ hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 3); label = gtk_label_new (_("Command for execute NWChem : ")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 3); combo = create_combo_box_entry(nwchemCommands.commands,nwchemCommands.numberOfCommands,TRUE,-1,-1); ComboNWChem = combo; EntryNWChem = GTK_BIN(combo)->child; gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 3); gtk_entry_set_text (GTK_ENTRY (EntryNWChem),NameCommandNWChem); g_signal_connect(G_OBJECT (EntryNWChem), "activate", (GCallback)modify_nwchem_command, NULL); button = create_button(Wins,_(" Remove from list ")); ButtonNWChem = button; gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); if(nwchemCommands.numberOfCommands<2) gtk_widget_set_sensitive(button, FALSE); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(remove_nwchem_command),NULL); button = create_button(Wins,_(" Help ")); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(help_commands),NULL); create_hseparator(vbox); /* ------------------------------------------------------------------*/ hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 3); label = gtk_label_new (_("Command for execute Psicode : ")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 3); combo = create_combo_box_entry(psicodeCommands.commands,psicodeCommands.numberOfCommands,TRUE,-1,-1); ComboPsicode = combo; EntryPsicode = GTK_BIN(combo)->child; gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 3); gtk_entry_set_text (GTK_ENTRY (EntryPsicode),NameCommandPsicode); g_signal_connect(G_OBJECT (EntryPsicode), "activate", (GCallback)modify_psicode_command, NULL); button = create_button(Wins,_(" Remove from list ")); ButtonPsicode = button; gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); if(psicodeCommands.numberOfCommands<2) gtk_widget_set_sensitive(button, FALSE); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(remove_psicode_command),NULL); button = create_button(Wins,_(" Help ")); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(help_commands),NULL); create_hseparator(vbox); /* ------------------------------------------------------------------*/ hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 3); label = gtk_label_new (_("Command for execute FireFly : ")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 3); combo = create_combo_box_entry(fireflyCommands.commands,fireflyCommands.numberOfCommands,TRUE,-1,-1); ComboFireFly = combo; EntryFireFly = GTK_BIN(combo)->child; gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 3); gtk_entry_set_text (GTK_ENTRY (EntryFireFly),NameCommandFireFly); g_signal_connect(G_OBJECT (EntryFireFly), "activate", (GCallback)modify_firefly_command, NULL); button = create_button(Wins,_(" Remove from list ")); ButtonFireFly = button; gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); if(fireflyCommands.numberOfCommands<2) gtk_widget_set_sensitive(button, FALSE); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(remove_firefly_command),NULL); button = create_button(Wins,_(" Help ")); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(help_commands),NULL); /* ------------------------------------------------------------------*/ create_hseparator(vbox); /* ------------------------------------------------------------------*/ hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 3); label = gtk_label_new (_("Command for execute Q-Chem : ")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 3); combo = create_combo_box_entry(qchemCommands.commands,qchemCommands.numberOfCommands,TRUE,-1,-1); ComboQChem = combo; EntryQChem = GTK_BIN(combo)->child; gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 3); gtk_entry_set_text (GTK_ENTRY (EntryQChem),NameCommandQChem); g_signal_connect(G_OBJECT (EntryQChem), "activate", (GCallback)modify_qchem_command, NULL); button = create_button(Wins,_(" Remove from list ")); ButtonQChem = button; gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); if(qchemCommands.numberOfCommands<2) gtk_widget_set_sensitive(button, FALSE); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(remove_qchem_command),NULL); button = create_button(Wins,_(" Help ")); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(help_commands),NULL); /* ------------------------------------------------------------------*/ create_hseparator(vbox); /* ------------------------------------------------------------------*/ hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 3); label = gtk_label_new (_("Command for execute Mopac : ")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 3); combo = create_combo_box_entry(mopacCommands.commands,mopacCommands.numberOfCommands,TRUE,-1,-1); ComboMopac = combo; EntryMopac = GTK_BIN(combo)->child; gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 3); gtk_entry_set_text (GTK_ENTRY (EntryMopac),NameCommandMopac); g_signal_connect(G_OBJECT (EntryMopac), "activate", (GCallback)modify_mopac_command, NULL); button = create_button(Wins,_(" Remove from list ")); ButtonMopac = button; gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); if(mopacCommands.numberOfCommands<2) gtk_widget_set_sensitive(button, FALSE); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(remove_mopac_command),NULL); button = create_button(Wins,_(" Help ")); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(help_commands),NULL); /* ------------------------------------------------------------------*/ create_hseparator(vbox); /* ------------------------------------------------------------------*/ hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 3); label = gtk_label_new (_("Command for execute Povray : ")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 3); combo = create_combo_box_entry(povrayCommands.commands,povrayCommands.numberOfCommands,TRUE,-1,-1); ComboPovray = combo; EntryPovray = GTK_BIN(combo)->child; gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 3); gtk_entry_set_text (GTK_ENTRY (EntryPovray),NameCommandPovray); g_signal_connect(G_OBJECT (EntryPovray), "activate", (GCallback)modify_povray_command, NULL); button = create_button(Wins,_(" Remove from list ")); ButtonPovray = button; gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); if(povrayCommands.numberOfCommands<2) gtk_widget_set_sensitive(button, FALSE); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(remove_povray_command),NULL); button = create_button(Wins,_(" Help ")); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 3); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(help_commands),NULL); /* ------------------------------------------------------------------*/ /* ------------------------------------------------------------------*/ create_hseparator(vbox); /*#ifdef G_OS_WIN32*/ /* // Remove it. Now babelCommand=openbabelDirectory/obabel { GtkWidget* entry; GtkWidget *table = gtk_table_new(1,3,FALSE); if(!babelCommand) babelCommand = g_strdup_printf("%s%sbabel.exe",g_get_current_dir(),G_DIR_SEPARATOR_S); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); add_label_table(table,_("Command for Open Babel : "),0,0); entry = gtk_entry_new (); entrybabel = entry; gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,1,1+1,0,0+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),babelCommand); gtk_editable_set_editable((GtkEditable*)entry,TRUE); gtk_widget_set_sensitive(entry, TRUE); button = create_button_pixmap(Wins,open_xpm,NULL); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(GTK_OBJECT (button), "clicked", G_CALLBACK(set_entry_babel_selction), GTK_OBJECT(entry)); add_widget_table(table,button,0,2); g_signal_connect(G_OBJECT (entrybabel), "changed", (GCallback)changed_babel, NULL); } */ /*#endif*/ create_hseparator(vbox); gtk_widget_show_all(frame); } #ifdef G_OS_WIN32 /********************************************************************************/ void create_gamess_directory(GtkWidget *Wins,GtkWidget *vbox,gboolean expand) { GtkWidget *frame; GtkWidget *button; frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vbox), frame, expand, expand, 0); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); { GtkWidget* entry; GtkWidget *table = gtk_table_new(1,3,FALSE); if(!gamessDirectory) gamessDirectory = g_strdup_printf("%s",g_get_home_dir()); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); add_label_table(table,_("Gamess directory : "),0,0); entry = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,1,1+1,0,0+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),gamessDirectory); gtk_editable_set_editable((GtkEditable*)entry,FALSE); gtk_widget_set_sensitive(entry, FALSE); button = create_button_pixmap(Wins,open_xpm,NULL); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(GTK_OBJECT (button), "clicked", G_CALLBACK(set_entry_gamessDir_selection), GTK_OBJECT(entry)); add_widget_table(table,button,0,2); } gtk_widget_show_all(frame); } #endif #ifdef G_OS_WIN32 /********************************************************************************/ void create_demon_directory(GtkWidget *Wins,GtkWidget *vbox,gboolean expand) { GtkWidget *frame; GtkWidget *button; frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vbox), frame, expand, expand, 0); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); { GtkWidget* entry; GtkWidget *table = gtk_table_new(1,3,FALSE); if(!demonDirectory) demonDirectory = g_strdup_printf("%s",g_get_home_dir()); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); add_label_table(table,_("Orca directory : "),0,0); entry = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,1,1+1,0,0+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),demonDirectory); gtk_editable_set_editable((GtkEditable*)entry,FALSE); gtk_widget_set_sensitive(entry, FALSE); button = create_button_pixmap(Wins,open_xpm,NULL); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(GTK_OBJECT (button), "clicked", G_CALLBACK(set_entry_demonDir_selection), GTK_OBJECT(entry)); add_widget_table(table,button,0,2); } gtk_widget_show_all(frame); } #endif #ifdef G_OS_WIN32 /********************************************************************************/ void create_orca_directory(GtkWidget *Wins,GtkWidget *vbox,gboolean expand) { GtkWidget *frame; GtkWidget *button; frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vbox), frame, expand, expand, 0); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); { GtkWidget* entry; GtkWidget *table = gtk_table_new(1,3,FALSE); if(!orcaDirectory) orcaDirectory = g_strdup_printf("%s",g_get_home_dir()); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); add_label_table(table,_("Orca directory : "),0,0); entry = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,1,1+1,0,0+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),orcaDirectory); gtk_editable_set_editable((GtkEditable*)entry,FALSE); gtk_widget_set_sensitive(entry, FALSE); button = create_button_pixmap(Wins,open_xpm,NULL); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(GTK_OBJECT (button), "clicked", G_CALLBACK(set_entry_orcaDir_selection), GTK_OBJECT(entry)); add_widget_table(table,button,0,2); } gtk_widget_show_all(frame); } #endif #ifdef G_OS_WIN32 /********************************************************************************/ void create_nwchem_directory(GtkWidget *Wins,GtkWidget *vbox,gboolean expand) { GtkWidget *frame; GtkWidget *button; frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vbox), frame, expand, expand, 0); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); { GtkWidget* entry; GtkWidget *table = gtk_table_new(1,3,FALSE); if(!nwchemDirectory) nwchemDirectory = g_strdup_printf("%s",g_get_home_dir()); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); add_label_table(table,_("NWChem directory : "),0,0); entry = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,1,1+1,0,0+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),nwchemDirectory); gtk_editable_set_editable((GtkEditable*)entry,FALSE); gtk_widget_set_sensitive(entry, FALSE); button = create_button_pixmap(Wins,open_xpm,NULL); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(GTK_OBJECT (button), "clicked", G_CALLBACK(set_entry_nwchemDir_selection), GTK_OBJECT(entry)); add_widget_table(table,button,0,2); } gtk_widget_show_all(frame); } #endif #ifdef G_OS_WIN32 /********************************************************************************/ void create_psicode_directory(GtkWidget *Wins,GtkWidget *vbox,gboolean expand) { GtkWidget *frame; GtkWidget *button; frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vbox), frame, expand, expand, 0); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); { GtkWidget* entry; GtkWidget *table = gtk_table_new(1,3,FALSE); if(!psicodeDirectory) psicodeDirectory = g_strdup_printf("%s",g_get_home_dir()); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); add_label_table(table,_("Psicode directory : "),0,0); entry = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,1,1+1,0,0+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),psicodeDirectory); gtk_editable_set_editable((GtkEditable*)entry,FALSE); gtk_widget_set_sensitive(entry, FALSE); button = create_button_pixmap(Wins,open_xpm,NULL); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(GTK_OBJECT (button), "clicked", G_CALLBACK(set_entry_psicodeDir_selection), GTK_OBJECT(entry)); add_widget_table(table,button,0,2); } gtk_widget_show_all(frame); } #endif #ifdef G_OS_WIN32 /********************************************************************************/ void create_firefly_directory(GtkWidget *Wins,GtkWidget *vbox,gboolean expand) { GtkWidget *frame; GtkWidget *button; frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vbox), frame, expand, expand, 0); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); { GtkWidget* entry; GtkWidget *table = gtk_table_new(1,3,FALSE); if(!fireflyDirectory) fireflyDirectory = g_strdup_printf("%s",g_get_home_dir()); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); add_label_table(table,_("FireFly directory : "),0,0); entry = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,1,1+1,0,0+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),fireflyDirectory); gtk_editable_set_editable((GtkEditable*)entry,FALSE); gtk_widget_set_sensitive(entry, FALSE); button = create_button_pixmap(Wins,open_xpm,NULL); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(GTK_OBJECT (button), "clicked", G_CALLBACK(set_entry_fireflyDir_selection), GTK_OBJECT(entry)); add_widget_table(table,button,0,2); } gtk_widget_show_all(frame); } #endif #ifdef G_OS_WIN32 /********************************************************************************/ void create_mopac_directory(GtkWidget *Wins,GtkWidget *vbox,gboolean expand) { GtkWidget *frame; GtkWidget *button; frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vbox), frame, expand, expand, 0); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); { GtkWidget* entry; GtkWidget *table = gtk_table_new(1,3,FALSE); if(!mopacDirectory) mopacDirectory = g_strdup_printf("%s",g_get_home_dir()); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); add_label_table(table,_("Mopac directory : "),0,0); entry = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,1,1+1,0,0+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),mopacDirectory); gtk_editable_set_editable((GtkEditable*)entry,FALSE); gtk_widget_set_sensitive(entry, FALSE); button = create_button_pixmap(Wins,open_xpm,NULL); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(GTK_OBJECT (button), "clicked", G_CALLBACK(set_entry_mopacDir_selection), GTK_OBJECT(entry)); add_widget_table(table,button,0,2); } gtk_widget_show_all(frame); } /********************************************************************************/ void create_povray_directory(GtkWidget *Wins,GtkWidget *vbox,gboolean expand) { GtkWidget *frame; GtkWidget *button; frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vbox), frame, expand, expand, 0); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); { GtkWidget* entry; GtkWidget *table = gtk_table_new(1,3,FALSE); if(!povrayDirectory) povrayDirectory = g_strdup_printf("%s",g_get_home_dir()); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); add_label_table(table,_("PovRay directory : "),0,0); entry = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,1,1+1,0,0+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),povrayDirectory); gtk_editable_set_editable((GtkEditable*)entry,FALSE); gtk_widget_set_sensitive(entry, FALSE); button = create_button_pixmap(Wins,open_xpm,NULL); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(GTK_OBJECT (button), "clicked", G_CALLBACK(set_entry_povrayDir_selection), GTK_OBJECT(entry)); add_widget_table(table,button,0,2); } gtk_widget_show_all(frame); } /********************************************************************************/ void create_gauss_directory(GtkWidget *Wins,GtkWidget *vbox,gboolean expand) { GtkWidget *frame; GtkWidget *button; frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vbox), frame, expand, expand, 0); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); { GtkWidget* entry; GtkWidget *table = gtk_table_new(1,3,FALSE); if(!gaussDirectory) gaussDirectory = g_strdup_printf("%s",g_get_home_dir()); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); add_label_table(table,_("Gaussian directory : "),0,0); entry = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,1,1+1,0,0+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),gaussDirectory); gtk_editable_set_editable((GtkEditable*)entry,FALSE); gtk_widget_set_sensitive(entry, FALSE); button = create_button_pixmap(Wins,open_xpm,NULL); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(GTK_OBJECT (button), "clicked", G_CALLBACK(set_entry_gaussDir_selection), GTK_OBJECT(entry)); add_widget_table(table,button,0,2); } gtk_widget_show_all(frame); } #endif /********************************************************************************/ void create_openbabel_directory(GtkWidget *Wins,GtkWidget *vbox,gboolean expand) { GtkWidget *frame; GtkWidget *button; frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vbox), frame, expand, expand, 0); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); { GtkWidget* entry; GtkWidget *table = gtk_table_new(1,3,FALSE); if(!openbabelDirectory) openbabelDirectory = g_strdup_printf("%s",g_get_home_dir()); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); add_label_table(table,_("Open babel directory : "),0,0); entry = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,1,1+1,0,0+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),openbabelDirectory); gtk_editable_set_editable((GtkEditable*)entry,FALSE); gtk_widget_set_sensitive(entry, FALSE); button = create_button_pixmap(Wins,open_xpm,NULL); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(GTK_OBJECT (button), "clicked", G_CALLBACK(set_entry_openbabelDir_selection), GTK_OBJECT(entry)); add_widget_table(table,button,0,2); } gtk_widget_show_all(frame); } /********************************************************************************/ void AddPageColorSurf(GtkWidget *NoteBook) { GtkWidget *Frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; Frame= gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(Frame), 10); LabelOnglet = gtk_label_new(_(" Surface colors ")); LabelMenu = gtk_label_new(_(" Surface colors ")); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), Frame, LabelOnglet, LabelMenu); create_color_surfaces(Wins,Frame); gtk_widget_show(Frame); } /********************************************************************************/ static void set_network(GtkWidget *Button, gpointer data) { if(!data) defaultNetWorkProtocol = GABEDIT_NETWORK_FTP_RSH; else defaultNetWorkProtocol = GABEDIT_NETWORK_SSH; set_sensitive_remote_frame(TRUE); } /********************************************************************************/ void AddPageFont(GtkWidget *NoteBook) { GtkWidget *Frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; Frame= gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(Frame), 10); LabelOnglet = gtk_label_new(_(" Fonts/Colors ")); LabelMenu = gtk_label_new(_(" Fonts/Colors ")); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), Frame, LabelOnglet, LabelMenu); create_font_color(Wins,Frame); gtk_widget_show_all(Frame); } /********************************************************************************/ void AddPageProp(GtkWidget *NoteBook) { GtkWidget *Frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; Frame= gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(Frame), 10); gtk_widget_set_size_request(GTK_WIDGET(Frame), (gint)(ScreenHeight*0.6), (gint)(ScreenHeight*0.3)); LabelOnglet = gtk_label_new(_(" Properties of atoms ")); LabelMenu = gtk_label_new(_(" Properties of atoms ")); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), Frame, LabelOnglet, LabelMenu); create_table_prop_in_window(Wins,Frame); gtk_widget_show_all(Frame); } #ifdef G_OS_WIN32 /********************************************************************************/ static void set_entry_pscpplinkdir(GtkWidget* dirSelector, gint response_id) { gchar* dirname = NULL; GtkWidget *entry; if(response_id != GTK_RESPONSE_OK) return; dirname = gabedit_folder_chooser_get_current_folder(GABEDIT_FOLDER_CHOOSER(dirSelector)); entry = (GtkWidget*)(g_object_get_data(G_OBJECT(dirSelector),"EntryFile")); gtk_entry_set_text(GTK_ENTRY(entry),dirname); /*if(strcmp(dirname,pscpplinkDirectory)!=0)*/ { gchar* t = g_strdup_printf("%s;%s",dirname,g_getenv("PATH")); g_setenv("PATH",t,TRUE); g_free(t); } if(pscpplinkDirectory) g_free(pscpplinkDirectory); pscpplinkDirectory = g_strdup(dirname); } /********************************************************************************/ static void set_entry_pscpplinkDir_selection(GtkWidget* entry) { GtkWidget *dirSelector; dirSelector = selctionOfDir(set_entry_pscpplinkdir, _("Select pscp & plink folder"), GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (dirSelector), TRUE); g_signal_connect(G_OBJECT(dirSelector),"delete_event", (GCallback)gtk_widget_destroy,NULL); g_object_set_data(G_OBJECT (dirSelector), "EntryFile", entry); g_signal_connect (dirSelector, "response", G_CALLBACK (set_entry_pscpplinkdir), GTK_OBJECT(dirSelector)); g_signal_connect (dirSelector, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(dirSelector)); gtk_widget_show(dirSelector); } /********************************************************************************/ void create_pscpplink_directory(GtkWidget *Wins,GtkWidget *vbox,gboolean expand) { GtkWidget *frame; GtkWidget *button; frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vbox), frame, expand, expand, 0); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); { GtkWidget* entry; GtkWidget *table = gtk_table_new(1,3,FALSE); if(!pscpplinkDirectory) pscpplinkDirectory = g_strdup_printf("%s",g_get_home_dir()); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); add_label_table(table,_("pscp & plink directory : "),0,0); entry = gtk_entry_new (); gtk_widget_set_size_request(GTK_WIDGET(entry),-1,32); gtk_table_attach(GTK_TABLE(table),entry,1,1+1,0,0+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_entry_set_text (GTK_ENTRY (entry),pscpplinkDirectory); gtk_editable_set_editable((GtkEditable*)entry,FALSE); gtk_widget_set_sensitive(entry, FALSE); button = create_button_pixmap(Wins,open_xpm,NULL); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(GTK_OBJECT (button), "clicked", G_CALLBACK(set_entry_pscpplinkDir_selection), GTK_OBJECT(entry)); add_widget_table(table,button,0,2); } gtk_widget_show_all(frame); } #endif /* and G_OS_WIN32 for pscp and plink */ /********************************************************************************/ void create_network_protocols(GtkWidget* Win,GtkWidget *vbox,gboolean expand) { GtkWidget *frame; GtkWidget *ButtonFtpRsh; GtkWidget *ButtonSsh; GtkWidget *button; GtkWidget *vboxframe; GtkWidget *table = gtk_table_new(2,2,TRUE); gchar ftprsh[] = N_("FTP and Rsh protocols"); gchar ssh[] = N_("ssh protocol "); frame = gtk_frame_new (_("Default NetWork protocol")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vbox), frame, expand, expand, 0); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxframe = gtk_vbox_new (FALSE, 0); gtk_widget_show (vboxframe); gtk_container_add (GTK_CONTAINER (frame), vboxframe); gtk_box_pack_start (GTK_BOX (vboxframe), table, expand, expand, 0); ButtonFtpRsh = gtk_radio_button_new_with_label( NULL,ftprsh); add_widget_table(table,ButtonFtpRsh,0,0); gtk_widget_show (ButtonFtpRsh); if(defaultNetWorkProtocol==GABEDIT_NETWORK_FTP_RSH) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ButtonFtpRsh), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ButtonFtpRsh), FALSE); button = create_button(Win," Help "); add_widget_table(table,button,0,1); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(help_ftp_rsh),NULL); ButtonSsh = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonFtpRsh)), ssh); add_widget_table(table,ButtonSsh,1,0); gtk_widget_show (ButtonSsh); if(defaultNetWorkProtocol==GABEDIT_NETWORK_SSH) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ButtonSsh), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ButtonSsh), FALSE); g_signal_connect(G_OBJECT (ButtonSsh), "clicked", G_CALLBACK(set_network), ButtonSsh); g_signal_connect(G_OBJECT (ButtonFtpRsh), "clicked", G_CALLBACK(set_network), NULL); button = create_button(Win,_(" Help ")); add_widget_table(table,button,1,1); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(help_ssh),NULL); #ifdef G_OS_WIN32 #endif gtk_widget_show_all(frame); } /********************************************************************************/ void AddPageOthers(GtkWidget *NoteBook) { GtkWidget *Frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vbox; Frame= gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(Frame), 10); /* gtk_widget_set_size_request(GTK_WIDGET(Frame), (gint)(ScreenHeight*0.6), (gint)(ScreenHeight*0.3));*/ LabelOnglet = gtk_label_new(_(" Others ")); LabelMenu = gtk_label_new(_(" Others ")); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), Frame, LabelOnglet, LabelMenu); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (Frame), vbox); #ifdef G_OS_WIN32 create_demon_directory(Wins,vbox,FALSE); create_gamess_directory(Wins,vbox,FALSE); create_orca_directory(Wins,vbox,FALSE); create_nwchem_directory(Wins,vbox,FALSE); create_psicode_directory(Wins,vbox,FALSE); create_firefly_directory(Wins,vbox,FALSE); create_mopac_directory(Wins,vbox,FALSE); create_gauss_directory(Wins,vbox,FALSE); create_povray_directory(Wins,vbox,FALSE); #endif create_openbabel_directory(Wins,vbox,FALSE); create_opengl_frame(Wins,vbox); gtk_widget_show_all(Frame); } /********************************************************************************/ void AddPageCommands(GtkWidget *NoteBook) { GtkWidget *Frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vbox; Frame= gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(Frame), 10); /* gtk_widget_set_size_request(GTK_WIDGET(Frame), (gint)(ScreenHeight*0.6), (gint)(ScreenHeight*0.3));*/ LabelOnglet = gtk_label_new(_(" Commands ")); LabelMenu = gtk_label_new(_(" Commands ")); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), Frame, LabelOnglet, LabelMenu); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (Frame), vbox); create_execucte_commands(Wins,vbox,FALSE); gtk_widget_show_all(Frame); } /********************************************************************************/ void AddPageBatch(GtkWidget *NoteBook) { GtkWidget *Frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vbox; Frame= gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(Frame), 10); /* gtk_widget_set_size_request(GTK_WIDGET(Frame), (gint)(ScreenHeight*0.6), (gint)(ScreenHeight*0.3));*/ LabelOnglet = gtk_label_new(_(" Batch ")); LabelMenu = gtk_label_new(_(" Batch ")); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), Frame, LabelOnglet, LabelMenu); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (Frame), vbox); create_batch_commands(Wins,vbox,FALSE); gtk_widget_show_all(Frame); } /********************************************************************************/ void AddPageNetWork(GtkWidget *NoteBook) { GtkWidget *Frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vbox; Frame= gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(Frame), 10); /* gtk_widget_set_size_request(GTK_WIDGET(Frame), (gint)(ScreenHeight*0.6), (gint)(ScreenHeight*0.3));*/ LabelOnglet = gtk_label_new(_(" NetWork ")); LabelMenu = gtk_label_new(_(" NetWork ")); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), Frame, LabelOnglet, LabelMenu); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (Frame), vbox); #ifdef G_OS_WIN32 create_pscpplink_directory(Wins,vbox,FALSE); #endif create_network_protocols(Wins,vbox,FALSE); gtk_widget_show_all(Frame); } /********************************************************************************/ void create_preferences() { GtkWidget *button; if(instal) Wins= gtk_dialog_new (); else { if(!Wins) Wins= gtk_dialog_new (); else { gtk_widget_hide(Wins); gtk_widget_show(Wins); return; } } instal = FALSE; gtk_window_set_position(GTK_WINDOW(Wins),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Wins),GTK_WINDOW(Fenetre)); gtk_window_set_default_size (GTK_WINDOW(Wins), (gushort)(2.9*ScreenWidth/5), (gushort)(2.9*ScreenHeight/5)); /* gtk_window_set_modal (GTK_WINDOW (Wins), TRUE);*/ /* Connection des signaux "delete" et "destroy" */ init_child(Wins,gtk_widget_destroy,_("Preferences ")); g_signal_connect(G_OBJECT(Wins),"delete_event",(GCallback)destroy_preferences_window,NULL); gtk_window_set_title(>K_DIALOG(Wins)->window,_("Preferences")); /* NoteBook Options */ NoteBook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX (GTK_DIALOG(Wins)->vbox), NoteBook,TRUE, TRUE, 0); AddPageProp(NoteBook); AddPageFont(NoteBook); gtk_widget_show(NoteBook); gtk_widget_show(GTK_WIDGET(GTK_DIALOG(Wins)->vbox)); AddPageColorSurf(NoteBook); AddPageCommands(NoteBook); AddPageNetWork(NoteBook); AddPageBatch(NoteBook); AddPageOthers(NoteBook); gtk_widget_realize(Wins); button = create_button(Wins,"Close"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked",(GCallback)destroy_preferences_window,GTK_OBJECT(Wins)); gtk_widget_show_all (button); button = create_button(Wins,_("Save&Apply&Close")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(apply_all),NULL); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(create_ressource_file),NULL); g_signal_connect_swapped(GTK_OBJECT(button), "clicked",(GCallback)destroy_preferences_window,GTK_OBJECT(Wins)); gtk_widget_grab_default(button); gtk_widget_show_all (button); button = create_button(Wins,_("Apply&Close")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(apply_all),NULL); g_signal_connect_swapped(GTK_OBJECT(button), "clicked",(GCallback)destroy_preferences_window,GTK_OBJECT(Wins)); gtk_widget_grab_default(button); gtk_widget_show_all (button); button = create_button(Wins,_("Apply")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(apply_all),NULL); gtk_widget_grab_default(button); gtk_widget_show_all (button); gtk_widget_show(Wins); } /********************************************************************************/ static void setNumberOfSubdivisions(GtkWidget *Entry, gpointer data) { static gchar* typeEntry[] = {"CYLINDER","SPHERE"}; G_CONST_RETURN gchar* textEntry = gtk_entry_get_text(GTK_ENTRY(Entry)); gint value = 0; if(textEntry && strlen(textEntry)>0) value = atof(textEntry); if(value<1)return; if(strcmp((gchar*)data,typeEntry[0])==0) { openGLOptions.numberOfSubdivisionsCylindre = value; } else { openGLOptions.numberOfSubdivisionsSphere = value; } } /********************************************************************************/ static void set_opengl(GtkWidget *Button, gpointer data) { gchar* typeButton[] = {"RGBA","DOUBLEBUFFER" ,"ALPHASIZE","DEPTHSIZE","Activate Text"}; gint i; for(i=0;i<5;i++) if(strcmp((gchar*)data,typeButton[i])==0) { switch(i) { case 0: if(openGLOptions.rgba==0) openGLOptions.rgba=1; else openGLOptions.rgba=0; break; case 1: if(openGLOptions.doubleBuffer==0) openGLOptions.doubleBuffer = 1; else openGLOptions.doubleBuffer = 0; break; case 2: if(openGLOptions.alphaSize==0) openGLOptions.alphaSize = 1; else openGLOptions.alphaSize = 0; break; case 3: if(openGLOptions.depthSize==0) openGLOptions.depthSize = 1; else openGLOptions.depthSize = 0; break; case 4: if(openGLOptions.activateText==0) openGLOptions.activateText = 1; else openGLOptions.activateText = 0; break; } break; } } /********************************************************************************/ void create_opengl_frame(GtkWidget* Win,GtkWidget *vbox) { GtkWidget *frame; GtkWidget *vboxframe; GtkWidget* buttonRGBA; GtkWidget* buttonALPHASIZE; GtkWidget* buttonDEPTHSIZE; GtkWidget* buttonDOUBLEBUFFER; GtkWidget* buttonActivateText; GtkWidget* EntryCylinder; GtkWidget* EntrySphere; GtkWidget* combo; GtkWidget *table = gtk_table_new(2,6,FALSE); static gchar* typeButton[] = {"RGBA","DOUBLEBUFFER" ,"ALPHASIZE","DEPTHSIZE","Activate Text"}; static gchar* values[] = {"5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","40","50","60","80","100"}; static gchar* typeEntry[] = {"CYLINDER","SPHERE"}; gushort i; gint nv = sizeof(values)/sizeof(gchar*); frame = gtk_frame_new (_("OpenGL Options")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxframe = gtk_vbox_new (FALSE, 0); gtk_widget_show (vboxframe); gtk_container_add (GTK_CONTAINER (frame), vboxframe); gtk_box_pack_start (GTK_BOX (vboxframe), table, TRUE, TRUE, 0); /* ------------------------------------------------------------------*/ i = 0; add_label_table(table,_(" Number Of Subdivisions for a Cylinder "),i,0); add_label_table(table," : ",i,1); combo = create_combo_box_entry(values,nv,TRUE,-1,-1); EntryCylinder = GTK_BIN(combo)->child; add_widget_table(table,combo,i,2); gtk_editable_set_editable((GtkEditable*)EntryCylinder,FALSE); gtk_entry_set_text (GTK_ENTRY (EntryCylinder),g_strdup_printf("%d",openGLOptions.numberOfSubdivisionsCylindre)); g_signal_connect (G_OBJECT (EntryCylinder), "changed",(GCallback)setNumberOfSubdivisions,typeEntry[0]); /* ------------------------------------------------------------------*/ i = 1; add_label_table(table,_(" Number Of Subdivisions for a Sphere "),i,0); add_label_table(table," : ",i,1); combo = create_combo_box_entry(values,nv,TRUE,-1,-1); EntrySphere = GTK_BIN(combo)->child; add_widget_table(table,combo,i,2); gtk_editable_set_editable((GtkEditable*)EntrySphere,FALSE); gtk_entry_set_text (GTK_ENTRY (EntrySphere),g_strdup_printf("%d",openGLOptions.numberOfSubdivisionsSphere)); g_signal_connect (G_OBJECT (EntrySphere), "changed",(GCallback)setNumberOfSubdivisions,typeEntry[1]); /* ------------------------------------------------------------------*/ buttonRGBA = gtk_check_button_new_with_label("RGBA" ); add_widget_table(table,buttonRGBA,0,3); gtk_widget_show (buttonRGBA); if(openGLOptions.rgba!=0) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonRGBA), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonRGBA), FALSE); buttonDOUBLEBUFFER = gtk_check_button_new_with_label("DOUBLEBUFFER" ); add_widget_table(table,buttonDOUBLEBUFFER,1,3); gtk_widget_show (buttonDOUBLEBUFFER); if(openGLOptions.doubleBuffer!=0) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonDOUBLEBUFFER), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonDOUBLEBUFFER), FALSE); buttonALPHASIZE = gtk_check_button_new_with_label("ALPHASIZE=1(0 if not)" ); add_widget_table(table,buttonALPHASIZE,0,4); gtk_widget_show (buttonALPHASIZE); if(openGLOptions.alphaSize!=0) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonALPHASIZE), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonALPHASIZE), FALSE); buttonDEPTHSIZE = gtk_check_button_new_with_label("DEPTHSIZE=1(0 if not)" ); add_widget_table(table,buttonDEPTHSIZE,1,4); gtk_widget_show (buttonDEPTHSIZE); if(openGLOptions.depthSize!=0) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonDEPTHSIZE), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonDEPTHSIZE), FALSE); buttonActivateText = gtk_check_button_new_with_label("Activate Text" ); add_widget_table(table,buttonActivateText,0,5); gtk_widget_show (buttonActivateText); if(openGLOptions.activateText!=0) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonActivateText), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonActivateText), FALSE); g_signal_connect (G_OBJECT (buttonRGBA), "clicked", G_CALLBACK(set_opengl), typeButton[0]); g_signal_connect (G_OBJECT (buttonDOUBLEBUFFER), "clicked", G_CALLBACK(set_opengl), typeButton[1]); g_signal_connect (G_OBJECT (buttonALPHASIZE), "clicked", G_CALLBACK(set_opengl), typeButton[2]); g_signal_connect (G_OBJECT (buttonDEPTHSIZE), "clicked", G_CALLBACK(set_opengl), typeButton[3]); g_signal_connect (G_OBJECT (buttonActivateText), "clicked", G_CALLBACK(set_opengl), typeButton[4]); gtk_widget_show_all(frame); } /********************************************************************************/ static void apply_set_opacity(GtkWidget *Win,gpointer data) { GtkWidget* opacitySpinButton = NULL; gdouble a = 0; if(!GTK_IS_WIDGET(Win)) return; opacitySpinButton = g_object_get_data (G_OBJECT (Win), "OpacitySpinButton"); a = gtk_spin_button_get_value (GTK_SPIN_BUTTON(opacitySpinButton)); if(a>=0 && a<=100) alpha_opacity = a/100; rafresh_window_orb(); } /********************************************************************************/ static void apply_set_opacity_close(GtkWidget *Win,gpointer data) { apply_set_opacity(Win,data); delete_child(Win); } /********************************************************************************/ static GtkWidget *add_spin_button( GtkWidget *table, gchar* strLabel, gint il) { gushort i; gushort j; GtkWidget *spinButton; GtkWidget *label; /*----------------------------------------------------------------------------------*/ i = il; j = 0; label = gtk_label_new(strLabel); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = il; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = il; j = 2; spinButton = gtk_spin_button_new_with_range (0, 100, 1); gtk_table_attach(GTK_TABLE(table),spinButton, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); return spinButton; } /********************************************************************************/ void set_opacity_dlg() { GtkWidget *Win; GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *hbox; GtkWidget *table; GtkWidget *vboxall; GtkWidget *opacitySpinButton; GtkWidget *button; Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),_("Set opacity")); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_glarea_child(Win,"Opacity "); vboxall = create_vbox(Win); frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(5,3,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),table); opacitySpinButton = add_spin_button( table, _("Opacity coefficient : "), 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(opacitySpinButton),(gint)(alpha_opacity*100)); g_object_set_data (G_OBJECT (Win), "OpacitySpinButton",opacitySpinButton); hbox = create_hbox_false(vboxall); gtk_widget_realize(Win); button = create_button(Win,_("OK")); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_set_opacity_close,G_OBJECT(Win)); button = create_button(Win,_("Apply")); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_set_opacity,G_OBJECT(Win)); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, G_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,G_OBJECT(Win)); gtk_widget_show (button); gtk_widget_show_all (Win); } /*********************************************************************************************************************/ static void applyColorMapOptions(GtkWidget *dialogWindow, gpointer data) { GtkWidget* buttonMultiColor; GtkWidget* button2Colors; /* GtkWidget* buttonUniColor;*/ GtkWidget* selectorUniColor; GtkWidget* selector2Colors1; GtkWidget* selector2Colors2; if(!GTK_IS_WIDGET(dialogWindow)) return; buttonMultiColor = g_object_get_data(G_OBJECT (dialogWindow), "ButtonMultiColor"); button2Colors = g_object_get_data(G_OBJECT (dialogWindow), "Button2Colors"); /* buttonUniColor = g_object_get_data(G_OBJECT (dialogWindow), "ButtonUniColor");*/ selectorUniColor = g_object_get_data(G_OBJECT (dialogWindow), "SelectorUniColor"); selector2Colors1 = g_object_get_data(G_OBJECT (dialogWindow), "Selector2Colors1"); selector2Colors2 = g_object_get_data(G_OBJECT (dialogWindow), "Selector2Colors2"); if(!buttonMultiColor) return; if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(buttonMultiColor))) { colorMapType = 1; } else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button2Colors)) && selector2Colors1 && selector2Colors2) { GdkColor color; colorMapType = 2; gtk_color_button_get_color (GTK_COLOR_BUTTON(selector2Colors1), &color); colorMapColors[0][0] = color.red/65535.0; colorMapColors[0][1] = color.green/65535.0; colorMapColors[0][2] = color.blue/65535.0; gtk_color_button_get_color (GTK_COLOR_BUTTON(selector2Colors2), &color); colorMapColors[1][0] = color.red/65535.0; colorMapColors[1][1] = color.green/65535.0; colorMapColors[1][2] = color.blue/65535.0; } else if(selectorUniColor) { GdkColor color; colorMapType = 3; gtk_color_button_get_color (GTK_COLOR_BUTTON(selectorUniColor), &color); colorMapColors[2][0] = color.red/65535.0; colorMapColors[2][1] = color.green/65535.0; colorMapColors[2][2] = color.blue/65535.0; } resetAllColorMapOrb(); } /*********************************************************************************************************************/ static GtkWidget* addRadioButtonColorMapToATable(GtkWidget* table, GtkWidget* friendButton, gchar* label, gint i, gint j, gint k) { GtkWidget *newButton; if(friendButton) newButton = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (friendButton)), label); else newButton = gtk_radio_button_new_with_label( NULL, label); gtk_table_attach(GTK_TABLE(table),newButton,j,j+k,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT (newButton), "Type",NULL); return newButton; } /*********************************************************************************************************************/ static void createColorMapOptionsFrame(GtkWidget* dialogWindow, GtkWidget *box) { GtkWidget* button; GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget *table = gtk_table_new(3,3,TRUE); gint i; GtkWidget *selector; GdkColor color; color.red = 65535; color.green = 65535; color.blue = 65535; frame = gtk_frame_new (_("Color mapping type")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); i = 0; button = NULL; button = addRadioButtonColorMapToATable(table, button, _("Multi color"), i, 0,1); if(colorMapType == 1) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); g_object_set_data(G_OBJECT (dialogWindow), "ButtonMultiColor",button); i = 1; button = addRadioButtonColorMapToATable(table, button, _("2 colors"), i, 0,1); if(colorMapType == 2) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); g_object_set_data(G_OBJECT (dialogWindow), "Button2Colors",button); color.red = (gushort)(colorMapColors[0][0]*65535); color.green = (gushort)(colorMapColors[0][1]*65535); color.blue = (gushort)(colorMapColors[0][2]*65535); selector = gtk_color_button_new_with_color (&color); gtk_table_attach(GTK_TABLE(table),selector,1,2,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT (dialogWindow), "Selector2Colors1",selector); color.red = (gushort)(colorMapColors[1][0]*65535); color.green = (gushort)(colorMapColors[1][1]*65535); color.blue = (gushort)(colorMapColors[1][2]*65535); selector = gtk_color_button_new_with_color (&color); gtk_table_attach(GTK_TABLE(table),selector,2,3,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT (dialogWindow), "Selector2Colors2",selector); i = 2; button = addRadioButtonColorMapToATable(table, button, _("Unicolor"), i, 0,1); if(colorMapType == 3) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); color.red = (gushort)(colorMapColors[2][0]*65535); color.green = (gushort)(colorMapColors[2][1]*65535); color.blue = (gushort)(colorMapColors[2][2]*65535); selector = gtk_color_button_new_with_color (&color); gtk_table_attach(GTK_TABLE(table),selector,1,2,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT (dialogWindow), "SelectorUniColor",selector); g_object_set_data(G_OBJECT (dialogWindow), "ButtonUniColor",button); } /****************************************************************************************************/ void createColorMapOptionsWindow(GtkWidget* win) { GtkWidget *dialogWindow = NULL; GtkWidget *button; GtkWidget *frame; GtkWidget *hbox; gchar title[BSIZE]; dialogWindow = gtk_dialog_new(); gtk_widget_realize(GTK_WIDGET(dialogWindow)); sprintf(title, _("Color Mapping options")); gtk_window_set_title(GTK_WINDOW(dialogWindow),title); gtk_window_set_modal (GTK_WINDOW (dialogWindow), TRUE); gtk_window_set_position(GTK_WINDOW(dialogWindow),GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(dialogWindow), "delete_event", (GCallback)destroy_button_windows, NULL); g_signal_connect(G_OBJECT(dialogWindow), "delete_event", (GCallback)gtk_widget_destroy, NULL); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (GTK_WIDGET(GTK_DIALOG(dialogWindow)->vbox)), frame, TRUE, TRUE, 3); hbox = gtk_hbox_new (FALSE, 3); gtk_widget_show (hbox); gtk_container_add (GTK_CONTAINER (frame), hbox); createColorMapOptionsFrame(dialogWindow,hbox); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(dialogWindow)->action_area), TRUE); button = create_button(dialogWindow,_("Close")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(dialogWindow)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)destroy_button_windows, GTK_OBJECT(dialogWindow)); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(dialogWindow)); button = create_button(dialogWindow,_("Apply")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(dialogWindow)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)applyColorMapOptions, GTK_OBJECT(dialogWindow)); button = create_button(dialogWindow,_("OK")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(dialogWindow)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)applyColorMapOptions, GTK_OBJECT(dialogWindow)); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)destroy_button_windows, GTK_OBJECT(dialogWindow)); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(dialogWindow)); add_button_windows(title,dialogWindow); gtk_widget_show_all(dialogWindow); if(GTK_IS_WIDGET(win)) gtk_window_set_transient_for(GTK_WINDOW(dialogWindow),GTK_WINDOW(win)); } GabeditSrc250/src/Common/Status.h0000644000175100017510000000315413130665225017151 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_STATUS_H__ #define __GABEDIT_STATUS_H__ gboolean stopDownLoad; void stop_download(); void show_progress_connection(); void hide_progress_connection(); gint progress_connection(gdouble scal,gchar* str,gboolean reset); void create_status_progress_connection_bar(GtkWidget* vbox); #endif /* __GABEDIT_STATUS_H__ */ GabeditSrc250/src/Common/Windows.h0000644000175100017510000000302413130665225017314 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_WINDOWS_H__ #define __GABEDIT_WINDOWS_H__ void create_frame_windows(GtkWidget *box); void destroy_button_windows(GtkWidget *Win); GtkWidget *add_button_windows(gchar *title,GtkWidget *Win); #endif /* __GABEDIT_WINDOWS_H__ */ GabeditSrc250/src/Common/Help.h0000644000175100017510000000313613130665225016556 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_HELP_H__ #define __GABEDIT_HELP_H__ void help_commands(); void help_ftp_rsh(); void help_ssh(); void help_variables_buttons(); void help_geometry_buttons(); gchar* messagePovray(); gchar* messageBMP(); gchar* messagePPM(); gchar* messageAnimatedImage(gchar* format); #endif /* __GABEDIT_HELP_H__ */ GabeditSrc250/src/IsotopeDistribution/0000755000175100017510000000000013130743374020306 5ustar allouchealloucheGabeditSrc250/src/IsotopeDistribution/IsotopeDistributionCalculator.c0000644000175100017510000004041013130665225026503 0ustar alloucheallouche/* IsotopeDistributionCalculator.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Files/FileChooser.h" #include "../Files/FolderChooser.h" #include "../Files/GabeditFolderChooser.h" #include "../Common/Help.h" #include "../Common/StockIcons.h" #include "../Utils/GabeditTextEdit.h" #include "../IsotopeDistribution/IsotopeDistributionCalculator.h" #define DEBUGFLAG 0 /************************************************************************************************************/ static gint cmp_2_isodata(gconstpointer a, gconstpointer b); static void free_element_data(ElementData* e); static ElementData get_element_data(gchar* symbol); static void free_elements(ElementData* elements, gint nElements); static ElementData* get_elements(gint nElements, gint* nAtoms, gchar** symbols); /* static void print_elements(ElementData* elements, gint nElements);*/ static void cut_peaks(GList* peaks, gdouble abundPrecision); static gint summarize_peaks(GList* peaks, gdouble precision); static GList *add_peak(GList* oldPeaks, IsotopeData* newPeak); /* static GList *add_peak_zero(GList* oldPeaks);*/ static IsotopeData* new_iso(gdouble mass, gdouble abundance); static IsotopeData* free_iso(IsotopeData* is); static GList* compute_peaks(gint nElements, ElementData* elements, gdouble massPrecision, gdouble abundancePrecision, gchar** error); static gchar* parse_formula(gchar* formula, gchar*** symbolsP, gint* nElementsP, gint** nAtomsP); /************************************************************************************************************/ static gint cmp_2_isodata(gconstpointer a, gconstpointer b) { if(a && b && ((IsotopeData* )a)->mass > ((IsotopeData* )b)->mass) return 1; else if(a && b && ((IsotopeData* )a)->mass == ((IsotopeData* )b)->mass) return 0; else return -1; } /************************************************************************************************************/ static void free_element_data(ElementData* e) { if(e && e->isotopes) g_free(e->isotopes); } /************************************************************************************************************/ static ElementData get_element_data(gchar* symbol) { SAtomsProp prop = prop_atom_get(symbol); ElementData e; gint i; e.nIsotopes = prop.nIsotopes; e.isotopes = NULL; if( e.nIsotopes>0) e.isotopes = g_malloc(sizeof(IsotopeData)*e.nIsotopes); for(i=0;inext) { IsotopeData* data =((IsotopeData*)(peaks->next->data)); if(data && data->abundancenext; } } /************************************************************************************************************/ static gint summarize_peaks(GList* peaks, gdouble precision) { GList* iter; GList* dum; gint nRemoved = 0; for(iter=peaks; iter != NULL; iter=iter->next) { while( iter->next && fabs( ((IsotopeData*)(iter->next->data))->mass - ((IsotopeData*)(iter->data))->mass) < precision) { dum=iter->next; iter->next=dum->next; if(iter->next) iter->next->prev=iter; ((IsotopeData*)(iter->data))->abundance += ((IsotopeData*)(dum->data))->abundance; free_iso((IsotopeData*)(dum->data)); } nRemoved++; } return nRemoved; } /************************************************************************************************************/ static GList *add_peak(GList* oldPeaks, IsotopeData* newPeak) { if(!oldPeaks) return g_list_append(oldPeaks, newPeak); if(oldPeaks->data && ((IsotopeData*)(oldPeaks->data))->mass<1e-12) { free_isotope_distribution(oldPeaks); oldPeaks = NULL; return g_list_append(oldPeaks, newPeak); } return g_list_insert_sorted(oldPeaks, newPeak, cmp_2_isodata); } /************************************************************************************************************/ /* static GList *add_peak_zero(GList* oldPeaks) { IsotopeData* is = new_iso(0,0); if(!is) return oldPeaks; return add_peak(oldPeaks, is); } */ /************************************************************************************************************/ static IsotopeData* new_iso(gdouble mass, gdouble abundance) { IsotopeData* is = g_malloc(sizeof(IsotopeData)); is->mass = mass; is->abundance = abundance; return is; } /************************************************************************************************************/ static IsotopeData* free_iso(IsotopeData* is) { if(is) g_free(is); return NULL; } /************************************************************************************************************/ GList* free_isotope_distribution(GList* isotopeDistribution) { GList* peaks = isotopeDistribution; while(peaks) { free_iso((IsotopeData*)peaks->data); peaks = peaks->next; } g_list_free(peaks); return NULL; } /************************************************************************************************************/ static GList* compute_peaks(gint nElements, ElementData* elements, gdouble massPrecision, gdouble abundancePrecision, gchar** error) { GList* peaks = NULL; GList* newPeaks = NULL; GList* iIter = NULL; IsotopeData* is; gint i; gint j; gint k; gint nRemoved; gint updateCounter = 0; gint frequenceUpdate = 0; if(*error) *error = NULL; if(nElements<1 || elements[0].nAtoms<1 || elements[0].nIsotopes<1) return peaks; is = new_iso(0,1); peaks = add_peak(NULL, is); if(!peaks) { if(*error) *error = g_strdup(_("No enough memory")); return peaks; } frequenceUpdate = 100*nElements; cancelIsotopeDistribution = FALSE; for(i = 0; inext) { for(k=0;kmass = ((IsotopeData*)(iIter->data))->mass + elements[i].isotopes[k].mass; is->abundance = ((IsotopeData*)(iIter->data))->abundance * elements[i].isotopes[k].abundance; newPeaks = add_peak(newPeaks, is); if(!newPeaks) { free_isotope_distribution(peaks); return NULL;} if( (updateCounter++) > frequenceUpdate) { updateCounter = 0; while( gtk_events_pending() ) gtk_main_iteration(); } if(cancelIsotopeDistribution) break; } if(cancelIsotopeDistribution) break; } if(cancelIsotopeDistribution) break; free_isotope_distribution(peaks); peaks = newPeaks; nRemoved = summarize_peaks(peaks,massPrecision); } if(cancelIsotopeDistribution) break; cut_peaks(peaks,abundancePrecision); } if(cancelIsotopeDistribution) { free_isotope_distribution(peaks); peaks = NULL; if(*error) *error = g_strdup(_("Calculation canceled")); } return peaks; } /************************************************************************************************************/ GList* compute_isotope_distribution(gint nElements, gint* nAtoms, gchar** symbols, gdouble massPrecision, gdouble abundancePrecision, gchar** error,gchar** info) { ElementData* elements = NULL; GList* peaks = NULL; if(*error) *error = NULL; if(nElements<1) { if(error) *error = g_strdup(_("Number of elements can not been <1 !")); return peaks; } elements = get_elements(nElements, nAtoms, symbols); /* print_elements(elements, nElements);*/ if(info)*info = get_str_elements(elements, nElements); peaks = compute_peaks(nElements, elements, massPrecision, abundancePrecision, error); free_elements(elements, nElements); return peaks; } /************************************************************************************************************/ static gchar* parse_formula(gchar* formula, gchar*** symbolsP, gint* nElementsP, gint** nAtomsP) { gchar** symbols = NULL; gint nElements; gint* nAtoms = NULL; gchar* c = NULL; gchar* listSymbols = NULL; gchar* listNumbers = NULL; gint l = 0; gint i,j; gchar** nA; gint ns=0; gint nn=0; *symbolsP = NULL; *nElementsP = 0; *nAtomsP = NULL; /* printf("formula=%s\n",formula );*/ if(!formula) return g_strdup(_("Formula not valid")); if(strlen(formula)<1) return g_strdup(_("Formula not valid")); if(islower(*formula)) return g_strdup(_("The first character of your formula is a lower case !")); if(isdigit(*formula)) return g_strdup(_("The first character of your formula is a digit !")); l =strlen(formula); listSymbols = g_malloc((2*l+1)*sizeof(gchar)); for(i=0; i<2*l;i++) listSymbols[i] = ' '; listSymbols[2*l-1] = '\0'; j = 0; listSymbols[j] = formula[j]; for(i=1; inext) { IsotopeData* is = (IsotopeData*) (p->data); if(is) s += is->abundance; } return s; } /*****************************************************************************/ gdouble get_max_abundance_from_list(GList* peaks) { GList* p = peaks; gdouble max = 0; max = 0; for(p = peaks; p != NULL; p = p->next) { IsotopeData* is = (IsotopeData*) (p->data); if(is && is->abundance>max) max = is->abundance; } return max; } GabeditSrc250/src/IsotopeDistribution/Makefile0000644000175100017510000000065413130664665021760 0ustar allouchealloucheOBJECTS = IsotopeDistributionCalculator.o IsotopeDistributionCalculatorDlg.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/IsotopeDistribution/IsotopeDistributionCalculatorDlg.h0000644000175100017510000000311013130665225027133 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_ISOTOPDISTRIBUTIONCALCULATOR_H__ #define __GABEDIT_ISOTOPDISTRIBUTIONCALCULATOR_H__ #include "../IsotopeDistribution/IsotopeDistributionCalculator.h" void compute_distribution_dlg(GtkWidget* winParent, gchar* formula); #endif /* __GABEDIT_ISOTOPDISTRIBUTIONCALCULATOR_H__ */ GabeditSrc250/src/IsotopeDistribution/Dep.mk0000644000175100017510000000207113130664665021354 0ustar allouchealloucheIsotopeDistributionCalculator.o: IsotopeDistributionCalculator.c \ ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/AtomsProp.h ../Utils/Utils.h ../Utils/UtilsInterface.h \ ../Files/FileChooser.h ../Files/FolderChooser.h \ ../Files/GabeditFolderChooser.h ../Common/Help.h ../Common/StockIcons.h \ ../Utils/GabeditTextEdit.h \ ../IsotopeDistribution/IsotopeDistributionCalculator.h IsotopeDistributionCalculatorDlg.o: IsotopeDistributionCalculatorDlg.c \ ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/AtomsProp.h ../Utils/Utils.h ../Utils/UtilsInterface.h \ ../Files/FileChooser.h ../Files/FolderChooser.h \ ../Files/GabeditFolderChooser.h ../Common/Help.h ../Common/StockIcons.h \ ../Utils/GabeditTextEdit.h \ ../IsotopeDistribution/IsotopeDistributionCalculator.h \ ../IsotopeDistribution/IsotopeDistributionCalculatorDlg.h \ ../Utils/GabeditXYPlot.h GabeditSrc250/src/IsotopeDistribution/IsotopeDistributionCalculator.h0000644000175100017510000000424113130665225026512 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_ISOTOPDISTRIBUTIONCALCULATOR_H__ #define __GABEDIT_ISOTOPDISTRIBUTIONCALCULATOR_H__ gboolean cancelIsotopeDistribution; typedef struct _IsotopeData { gdouble mass; gdouble abundance; }IsotopeData; typedef struct _ElementData { gint nAtoms; gint nIsotopes; IsotopeData* isotopes; }ElementData; GList* free_isotope_distribution(GList* isotopeDistribution); GList* compute_isotope_distribution(gint nElements, gint* nAtoms, gchar** symbols, gdouble massPrecision, gdouble abundancePrecision, gchar** error, gchar** info); GList* compute_isotope_distribution_from_formula(gchar* formula, gdouble massPrecision, gdouble abundancePrecision, gchar** error, gchar** info); GList* get_example_isotope_distribution(); gdouble get_sum_abundance_from_list(GList* peaks); gdouble get_max_abundance_from_list(GList* peaks); #endif /* __GABEDIT_ISOTOPDISTRIBUTIONCALCULATOR_H__ */ GabeditSrc250/src/IsotopeDistribution/IsotopeDistributionCalculatorDlg.c0000644000175100017510000006640113130665225027142 0ustar alloucheallouche/* IsotopeDistributionCalculatorDlg.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Files/FileChooser.h" #include "../Files/FolderChooser.h" #include "../Files/GabeditFolderChooser.h" #include "../Common/Help.h" #include "../Common/StockIcons.h" #include "../Utils/GabeditTextEdit.h" #include "../IsotopeDistribution/IsotopeDistributionCalculator.h" #include "../IsotopeDistribution/IsotopeDistributionCalculatorDlg.h" #include "../Utils/GabeditXYPlot.h" #define DEBUGFLAG 0 /*****************************************************************************/ static GtkWidget* getPointsFromList(GtkWidget* list, gdouble** pX, gdouble** pY, gint* pn) { GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(list)); gchar* dataMass = NULL; gchar* dataAbund = NULL; gint i; gint n = 0; gchar* path_string = NULL; gdouble* X = NULL; gdouble* Y = NULL; GtkWidget* xyplot = g_object_get_data(G_OBJECT(list),"XYPlot"); GtkWidget* entryCharge = g_object_get_data(G_OBJECT(list),"EntryCharge"); gdouble charge = 1.0; if(!pX || !pY) return NULL; *pX = NULL; *pY = NULL; if(!xyplot) return NULL; if(!GTK_IS_WIDGET(xyplot)) return NULL; if(entryCharge) { G_CONST_RETURN gchar* tentry; tentry = gtk_entry_get_text(GTK_ENTRY(entryCharge)); charge = atof(tentry); if(charge<1e-12) charge = 1.0; } do{ path_string = g_strdup_printf("%d",n); if(!gtk_tree_model_get_iter_from_string (model, &iter, path_string))break; n++; }while(TRUE); /* printf("Number of ligne = %d\n",n);*/ if(n<1) return NULL; X = g_malloc(n*sizeof(gdouble)); Y = g_malloc(n*sizeof(gdouble)); for(i=0;iactive) convType = GABEDIT_XYPLOT_CONV_GAUSS; color.red = 65000; color.green = 0; color.blue = 0; gabedit_xyplot_add_data_conv(GABEDIT_XYPLOT(xyplot), n, X, Y, halfWidth, convType, &color); gabedit_xyplot_set_range_ymin (GABEDIT_XYPLOT(xyplot), 0); gabedit_xyplot_set_range_ymax (GABEDIT_XYPLOT(xyplot), 100); if(X) { gabedit_xyplot_set_range_xmin (GABEDIT_XYPLOT(xyplot), (gint)(X[0]-10*halfWidth)); gabedit_xyplot_set_range_xmax (GABEDIT_XYPLOT(xyplot), (gint)(X[n-1]+10*halfWidth+0.5)); } if(X) g_free(X); if(Y) g_free(Y); } /********************************************************************************/ static void clearText(GtkWidget* myText) { ClearText(myText); } /********************************************************************************/ static void clearList(GtkWidget* myList) { GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(myList)); GtkListStore *store = GTK_LIST_STORE (model); gtk_list_store_clear(store); } /*****************************************************************************/ static void appendList(GtkWidget* list, GList* peaks, gdouble massPrecision, gdouble abdunPrecision) { GList* p = peaks; #define NC 3 gchar *texts[NC]; gint k; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(list)); GtkListStore *store = GTK_LIST_STORE (model); gdouble max; gdouble min; gint nMass = 13; gint nAbund = 13; gdouble log10 = log(10.0); gdouble absMass = fabs(massPrecision); gdouble absAbund = fabs(abdunPrecision); gchar* formatMass = NULL; gchar* formatAbundFrac = NULL; gchar* formatAbund = NULL; if(absMass>1e-13) { nMass = (gint)(-log(absMass)/log10+0.5); if(nMass<0) nMass = 1; } if(absAbund>1e-13) { nAbund = (gint)(-log(absAbund)/log10+0.5); if(nAbund<0) nAbund = 1; } g_object_set_data(G_OBJECT(list),"Peaks", peaks); model = GTK_TREE_MODEL (store); max = 0; for(p = peaks; p != NULL; p = p->next) { IsotopeData* is = (IsotopeData*) (p->data); if(maxabundance) max = is->abundance; } if(max<1e-10) max = 1.0; min = max; for(p = peaks; p != NULL; p = p->next) { IsotopeData* is = (IsotopeData*) (p->data); if(min>is->abundance) min = is->abundance; } if(min<1e-7) min = 1e-7; formatMass = g_strdup_printf("%%0.%df",nMass); if(min<1e-7) formatAbundFrac = g_strdup_printf("%%0.%de",nAbund+2); else formatAbundFrac = g_strdup_printf("%%0.%df",nAbund+2); if(min/max*100<1e-7) formatAbund = g_strdup_printf("%%0.%de",nAbund); else formatAbund = g_strdup_printf("%%0.%df",nAbund); for(p = peaks; p != NULL; p = p->next) { IsotopeData* is = (IsotopeData*) (p->data); texts[0] = g_strdup_printf(formatMass,is->mass); texts[1] = g_strdup_printf(formatAbundFrac,is->abundance); texts[2] = g_strdup_printf(formatAbund,is->abundance/max*100); gtk_list_store_append (store, &iter); for(k=0;k1) return; Nc = atoi(path_string); path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (model, &iter, path); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 2*numCol, new_text, -1); gtk_tree_path_free (path); return; } /* Rel. abundance(%)*/ if(numCol==2) { gint nc = strlen(new_text); if(nc<1)return; if(!test(new_text)) return; if(atof(new_text)<0) return; if(atof(new_text)>100) return; Nc = atoi(path_string); path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (model, &iter, path); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 2*numCol, new_text, -1); gtk_tree_path_free (path); return; } } /************************************************************/ static GtkWidget* create_peaks_list(GtkWidget *vbox, GList* peaks) { GtkListStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkWidget *list = NULL; GtkWidget *scr; guint i; guint Factor=7; guint widall=0; #define NC 3 gchar *titres[NC]={ N_("Mass"), N_("Frac. Abund."), N_("Rel. Abund.(%)")}; gint width[NC]={14,12,12}; for(i=0;(gint)i100) *pAbund = 100.0; if(*pAbund<1e-6) t = g_strdup_printf("%0.8e",*pAbund); else t = g_strdup_printf("%0.8f",*pAbund); gtk_entry_set_text(GTK_ENTRY(entrys[2]),t); g_free(t); tentry = gtk_entry_get_text(GTK_ENTRY(entrys[0])); if(!tentry) return; if(tentry && strlen(tentry)<1) return; gtk_widget_set_sensitive(calculateButton,FALSE); cancelIsotopeDistribution = FALSE; gtk_widget_set_sensitive(cancelButton,TRUE); t = g_strdup(tentry); newPeaks = compute_isotope_distribution_from_formula(t, *pMass, *pAbund, &error,&info); g_free(t); textWidget = g_object_get_data(G_OBJECT (calculateButton), "TextWidget"); if(textWidget) clearText(textWidget); if(error) { if(textWidget) gabedit_text_insert (GABEDIT_TEXT(textWidget), NULL, NULL, NULL,error,-1); printf("%s\n",error); } else if(newPeaks) { if(textWidget) { gchar* t = NULL; if(info) gabedit_text_insert (GABEDIT_TEXT(textWidget), NULL, NULL, NULL,info,-1); t = g_strdup_printf(_("Sum of frac. abund -1 = \n %0.8e\n"), get_sum_abundance_from_list(newPeaks)-1); gabedit_text_insert (GABEDIT_TEXT(textWidget), NULL, NULL, NULL,t,-1); g_free(t); } } if(error) g_free(error); if(info) g_free(info); /*newPeaks = get_example_isotope_distribution();*/ treeViewPeaks = g_object_get_data(G_OBJECT (calculateButton), "ListView"); if(treeViewPeaks) clearList(treeViewPeaks); appendList(treeViewPeaks, newPeaks,*pMass, *pAbund); if(newPeaks) free_isotope_distribution(newPeaks); g_object_set_data(G_OBJECT(treeViewPeaks),"Peaks", NULL); gtk_widget_set_sensitive(calculateButton,TRUE); cancelIsotopeDistribution = TRUE; gtk_widget_set_sensitive(cancelButton,FALSE); } /********************************************************************/ static void delete_distribution_dlg(GtkWidget* winDlg, gpointer data) { GtkWidget** entrys = g_object_get_data(G_OBJECT (winDlg), "Entrys"); if(entrys) g_free(entrys); gtk_widget_destroy(winDlg); } /********************************************************************/ void compute_distribution_dlg(GtkWidget* winParent, gchar* formula) { GtkWidget *winDlg; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox; GtkWidget *hboxall; GtkWidget *vboxLeft; GtkWidget *vboxRight; GtkWidget *button; GtkWidget *hseparator; GtkWidget *calculateButton; GtkWidget *cancelButton; GtkWidget *clearButton; /* GtkWidget *label;*/ GtkWidget *xyplot; GtkWidget *textWidget; GtkWidget *addPeaksButton; GtkWidget *addConvolutionButton; GtkWidget *toggleLorentzian; GtkWidget *toggleGaussian; gchar* tlabel[]={N_("Chemical formula"),N_("Mass precision (Da)"),N_("Abondance precision (%)")}; GtkWidget** entrys = g_malloc(5*sizeof(GtkWidget*)); gint i; GtkWidget* table; gchar* t = NULL; static gdouble massPrecision = 0.1; static gdouble abundPrecision = 0.01; GtkWidget* treeViewPeaks = NULL; if(!winParent || !GTK_IS_WIDGET(winParent)) return; entrys = (GtkWidget**) g_malloc(5*sizeof(GtkWidget*)); for(i=0;i<5;i++) entrys[i] = NULL; winDlg = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* gtk_window_set_modal(GTK_WINDOW(winDlg),TRUE);*/ gtk_window_set_title(GTK_WINDOW(winDlg),_("Isotope distribution calculation")); gtk_container_set_border_width (GTK_CONTAINER (winDlg), 5); gtk_window_set_position(GTK_WINDOW(winDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(winDlg),GTK_WINDOW(winParent)); g_signal_connect(G_OBJECT(winDlg),"delete_event",(GCallback)delete_distribution_dlg,NULL); vboxall = create_vbox(winDlg); hboxall = gtk_hbox_new(0,FALSE); gtk_box_pack_start (GTK_BOX (vboxall), hboxall, TRUE, TRUE, 0); vboxLeft = gtk_vbox_new(0,FALSE); gtk_box_pack_start (GTK_BOX (hboxall), vboxLeft, FALSE, FALSE, 0); vboxRight = gtk_hbox_new(0,FALSE); gtk_box_pack_start (GTK_BOX (hboxall), vboxRight, TRUE, TRUE, 0); frame = gtk_frame_new (_("Input")); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxLeft), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(5,3,FALSE); gtk_box_pack_start(GTK_BOX(vboxframe), table,TRUE,TRUE,0); for(i=0;i<3;i++) { add_label_table(table,tlabel[i],(gushort)i,0); add_label_table(table," : ",(gushort)i,1); entrys[i] = gtk_entry_new (); gtk_table_attach(GTK_TABLE(table),entrys[i],2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); } if(formula) t = g_strdup_printf("%s",formula); else t = g_strdup_printf("C6H6"); gtk_entry_set_text(GTK_ENTRY(entrys[0]),t); g_free(t); t = g_strdup_printf("%f",massPrecision); gtk_entry_set_text(GTK_ENTRY(entrys[1]),t); g_free(t); g_object_set_data(G_OBJECT (entrys[1]), "MassPrecision", &massPrecision); t = g_strdup_printf("%f",abundPrecision); gtk_entry_set_text(GTK_ENTRY(entrys[2]),t); g_free(t); g_object_set_data(G_OBJECT (entrys[2]), "AbundPrecision", &abundPrecision); i = 3; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),hseparator,0,0+3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); i = 4; button = create_button(winParent,_("Calculate")); gtk_table_attach(GTK_TABLE(table),button,0,0+2,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(calculate_spectrum),(gpointer)entrys); gtk_widget_show (button); calculateButton = button; button = create_button(winParent,_("Cancel")); gtk_table_attach(GTK_TABLE(table),button,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(cancel_calculation),(gpointer)calculateButton); gtk_widget_show (button); cancelButton = button; g_object_set_data(G_OBJECT (button), "CalculateButton", calculateButton); g_object_set_data(G_OBJECT (calculateButton), "CancelButton", button); gtk_widget_set_sensitive(button,FALSE); frame = gtk_frame_new (_("Output")); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxLeft), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(10,4,FALSE); gtk_box_pack_start(GTK_BOX(vboxframe), table,TRUE,TRUE,0); i = 0; hbox = gtk_hbox_new(0,FALSE); gtk_table_attach(GTK_TABLE(table),hbox,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); textWidget = create_text_widget(hbox,NULL,&frame); gtk_widget_set_size_request(textWidget,-1,(gint)(ScreenHeight*0.15)); gabedit_text_set_editable (GABEDIT_TEXT (textWidget), TRUE); set_font (textWidget,FontsStyleResult.fontname); set_base_style(textWidget,FontsStyleResult.BaseColor.red ,FontsStyleResult.BaseColor.green ,FontsStyleResult.BaseColor.blue); set_text_style(textWidget,FontsStyleResult.TextColor.red ,FontsStyleResult.TextColor.green ,FontsStyleResult.TextColor.blue); i = 1; hbox = gtk_hbox_new (TRUE, 0); gtk_table_attach(GTK_TABLE(table),hbox,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); treeViewPeaks = create_peaks_list(hbox, NULL); i = 2; button = create_button(winParent,_("Clear")); gtk_table_attach(GTK_TABLE(table),button,0,0+3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(clearList),(gpointer)treeViewPeaks); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(clearText),(gpointer)textWidget); gtk_widget_show (button); clearButton = button; button = create_button(winParent,_("Close")); gtk_table_attach(GTK_TABLE(table),button,3,3+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_distribution_dlg),(gpointer)winDlg); gtk_widget_show (button); i = 3; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),hseparator,0,0+4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); i=4; add_label_table(table,_("Charge"),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); entrys[3] = gtk_entry_new (); gtk_entry_set_text(GTK_ENTRY(entrys[3]),"1.0"); gtk_widget_set_size_request(entrys[3],30,-1); gtk_table_attach(GTK_TABLE(table),entrys[3],2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); button = create_button(winParent,_("Add peaks")); gtk_table_attach(GTK_TABLE(table),button,3,3+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(addPeaksFromList),(gpointer)treeViewPeaks); gtk_widget_show (button); addPeaksButton = button; i=5; add_label_table(table,_("Half-Width"),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); entrys[4] = gtk_entry_new (); gtk_entry_set_text(GTK_ENTRY(entrys[4]),"0.05"); gtk_widget_set_size_request(entrys[4],30,-1); gtk_table_attach(GTK_TABLE(table),entrys[4],2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); button = create_button(winParent,_("Add convoluted curve")); gtk_table_attach(GTK_TABLE(table),button,3,3+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(addConvFromList),(gpointer)treeViewPeaks); gtk_widget_show (button); addConvolutionButton = button; i = 6; toggleLorentzian = gtk_radio_button_new_with_label( NULL,_("Lorentzian lineshape") ); gtk_table_attach(GTK_TABLE(table),toggleLorentzian,0,0+3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); gtk_widget_show(toggleLorentzian); toggleGaussian = gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggleLorentzian)),_("Gaussian lineshape") ); gtk_table_attach(GTK_TABLE(table),toggleGaussian,3,3+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); gtk_widget_show(toggleGaussian); g_object_set_data(G_OBJECT (clearButton), "ListView", treeViewPeaks); g_object_set_data(G_OBJECT (calculateButton), "ListView", treeViewPeaks); g_object_set_data(G_OBJECT (cancelButton), "ListView", treeViewPeaks); g_object_set_data(G_OBJECT (winDlg), "ListView", treeViewPeaks); g_object_set_data(G_OBJECT (addPeaksButton), "ListView", treeViewPeaks); g_object_set_data(G_OBJECT (toggleLorentzian), "ListView", treeViewPeaks); g_object_set_data(G_OBJECT (toggleGaussian), "ListView", treeViewPeaks); g_object_set_data(G_OBJECT (addConvolutionButton), "ListView", treeViewPeaks); g_object_set_data(G_OBJECT (calculateButton), "WinDlg", winDlg); g_object_set_data(G_OBJECT (cancelButton), "WinDlg", winDlg); g_object_set_data(G_OBJECT (winDlg), "TextWidget", textWidget); g_object_set_data(G_OBJECT (treeViewPeaks), "TextWidget", textWidget); g_object_set_data(G_OBJECT (calculateButton), "TextWidget", textWidget); g_object_set_data(G_OBJECT (addPeaksButton), "TextWidget", textWidget); g_object_set_data(G_OBJECT (toggleGaussian), "TextWidget", textWidget); g_object_set_data(G_OBJECT (toggleLorentzian), "TextWidget", textWidget); g_object_set_data(G_OBJECT (addConvolutionButton), "TextWidget", textWidget); g_object_set_data(G_OBJECT (addConvolutionButton), "ToggleLorentzian", toggleLorentzian); g_object_set_data(G_OBJECT (addConvolutionButton), "EntryHalfWidth", entrys[4]); g_object_set_data(G_OBJECT (treeViewPeaks), "EntryCharge", entrys[3]); g_object_set_data(G_OBJECT (treeViewPeaks), "EntryHalfWidth", entrys[4]); g_object_set_data(G_OBJECT (treeViewPeaks), "ToggleLorentzian", toggleLorentzian); g_object_set_data(G_OBJECT (treeViewPeaks), "ToggleGaussian", toggleGaussian); frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxRight), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(1,1,FALSE); gtk_box_pack_start(GTK_BOX(vboxframe), table,TRUE,TRUE,0); xyplot = gabedit_xyplot_new(); g_object_set_data(G_OBJECT (treeViewPeaks), "XYPlot", xyplot); gabedit_xyplot_set_range(GABEDIT_XYPLOT(xyplot), 0.0, 10, 0, 20); gabedit_xyplot_set_x_legends_digits(GABEDIT_XYPLOT(xyplot), 5); gabedit_xyplot_set_y_legends_digits(GABEDIT_XYPLOT(xyplot), 5); i = 0; gtk_table_attach(GTK_TABLE(table),xyplot,0,0+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); gtk_widget_show (xyplot); g_object_set_data (G_OBJECT (winDlg), "XYPLOT",xyplot); gtk_window_set_default_size (GTK_WINDOW(winDlg),4*gdk_screen_width()/5,4*gdk_screen_height()/5); gtk_widget_show_all(winDlg); gabedit_xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_HMAJOR_GRID, FALSE); gabedit_xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_VMAJOR_GRID, FALSE); gabedit_xyplot_show_top_legends (GABEDIT_XYPLOT(xyplot),FALSE); gabedit_xyplot_show_right_legends (GABEDIT_XYPLOT(xyplot),FALSE); g_object_set_data(G_OBJECT (winDlg), "Entrys", entrys); } GabeditSrc250/src/Files/0000755000175100017510000000000013130743374015326 5ustar allouchealloucheGabeditSrc250/src/Files/GabeditFolderChooser.c0000644000175100017510000000673613130665225021522 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "GabeditFolderChooser.h" /********************************************************************************/ GtkWidget* gabedit_folder_chooser_new(gchar* title) { gboolean multiple = FALSE; GtkWidget *dialog; GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER; dialog = g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG, "action", action, "file-system-backend", "gtk+", "select-multiple", multiple, NULL); if(title) gtk_window_set_title (GTK_WINDOW (dialog), title); gtk_dialog_add_buttons (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); return GTK_WIDGET(dialog); } /*************************************************************************************/ void gabedit_folder_chooser_set_current_folder(GabeditFolderChooser *folderChooser,const gchar *folderName) { g_return_if_fail (folderChooser != NULL); g_return_if_fail (GABEDIT_IS_FOLDER_CHOOSER(folderChooser)); g_return_if_fail (folderName != NULL); gtk_file_chooser_set_filename ((GtkFileChooser *)folderChooser, folderName); /* gtk_file_chooser_set_current_folder ((GtkFileChooser *)folderChooser, folderName); */ } /********************************************************************************/ gchar* gabedit_folder_chooser_get_current_folder(GabeditFolderChooser *folderChooser) { return gtk_file_chooser_get_current_folder((GtkFileChooser *)folderChooser); } /*****************************************************************************************/ void gabedit_folder_chooser_set_filters(GabeditFolderChooser *folderChooser,gchar **patterns) { GtkFileFilter *filter; gint n = 0; g_return_if_fail (folderChooser != NULL); g_return_if_fail (GABEDIT_IS_FOLDER_CHOOSER(folderChooser)); g_return_if_fail (patterns != NULL); while(patterns[n]) { filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, patterns[n]); gtk_file_filter_add_pattern (filter, patterns[n]); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (folderChooser), filter); n++; } } /*************************************************************************************/ GabeditSrc250/src/Files/Makefile0000644000175100017510000000064713130664665017002 0ustar allouchealloucheOBJECTS = FileChooser.o FolderChooser.o ListeFiles.o GabeditFolderChooser.o GabeditFileChooser.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ include Dep.mk #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk GabeditSrc250/src/Files/GabeditFileChooser.c0000644000175100017510000001174713130665225021164 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "GabeditFileChooser.h" /********************************************************************************/ GtkWidget* gabedit_file_chooser_new(gchar* title, GtkFileChooserAction action) { gboolean multiple = FALSE; GtkWidget *dialog; dialog = g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG, "action", action, "file-system-backend", "gtk+", "select-multiple", multiple, NULL); if(title) gtk_window_set_title (GTK_WINDOW (dialog), title); if (action == GTK_FILE_CHOOSER_ACTION_OPEN) { gtk_dialog_add_buttons (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); } else { gtk_dialog_add_buttons (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_OK, NULL); } gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); return GTK_WIDGET(dialog); } /*************************************************************************************/ void gabedit_file_chooser_set_current_file(GabeditFileChooser *fileChooser,const gchar *fileName) { GtkFileChooserAction action; g_return_if_fail (fileChooser != NULL); g_return_if_fail (GABEDIT_IS_FILE_CHOOSER(fileChooser)); g_return_if_fail (fileName != NULL); action = gtk_file_chooser_get_action((GtkFileChooser *)fileChooser); gtk_file_chooser_set_filename ((GtkFileChooser *)fileChooser, fileName); if(action == GTK_FILE_CHOOSER_ACTION_SAVE) { gchar* tmp = g_path_get_basename(fileName); gtk_file_chooser_set_current_name ((GtkFileChooser *)fileChooser, tmp); if(tmp) g_free(tmp); } } /********************************************************************************/ gchar* gabedit_file_chooser_get_current_file(GabeditFileChooser *fileChooser) { return gtk_file_chooser_get_filename((GtkFileChooser *)fileChooser); } /*****************************************************************************************/ void gabedit_file_chooser_set_filters(GabeditFileChooser *fileChooser,gchar **patterns) { GtkFileFilter *filter; GtkFileFilter *filter0 = NULL; gint n = 0; g_return_if_fail (fileChooser != NULL); g_return_if_fail (GABEDIT_IS_FILE_CHOOSER(fileChooser)); g_return_if_fail (patterns != NULL); while(patterns[n]) { filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, patterns[n]); gtk_file_filter_add_pattern (filter, patterns[n]); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (fileChooser), filter); if(n==0) filter0 = filter; n++; } if(filter0)gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (fileChooser), filter0); } /*************************************************************************************/ void gabedit_file_chooser_set_filter(GabeditFileChooser *fileChooser, const gchar *pattern) { GtkFileFilter *filter; g_return_if_fail (fileChooser != NULL); g_return_if_fail (GABEDIT_IS_FILE_CHOOSER(fileChooser)); g_return_if_fail (pattern != NULL); filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, pattern); gtk_file_filter_add_pattern (filter, pattern); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (fileChooser), filter); gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (fileChooser), filter); } /*************************************************************************************/ void gabedit_file_chooser_show_hidden(GabeditFileChooser *fileChooser) { /* gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER (fileChooser), TRUE); */ } /*************************************************************************************/ void gabedit_file_chooser_hide_hidden(GabeditFileChooser *fileChooser) { /* gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER (fileChooser), FALSE); */ } /*************************************************************************************/ GabeditSrc250/src/Files/FileChooser.h0000644000175100017510000000372413130665225017705 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_FILECHOOSER_H__ #define __GABEDIT_FILECHOOSER_H__ GtkWidget* file_chooser(gpointer data,gchar* title,GabEditTypeFile type,GabEditTypeWin typewin, GtkFileChooserAction action); GtkWidget* file_chooser_open(gpointer data,gchar* title,GabEditTypeFile type,GabEditTypeWin typewin); GtkWidget* file_chooser_save(gpointer data,gchar* title,GabEditTypeFile type,GabEditTypeWin typewin); void choose_file_to_open(); void choose_file_to_insert(); void choose_file_to_save(); void choose_file_to_save_end(); void Save_YesNo(); void set_entry_selected_file(GtkWidget* hbox); GtkWidget* choose_file_to_create(gchar* title, GCallback applyFunc); #endif /* __GABEDIT_FILECHOOSER_H__ */ GabeditSrc250/src/Files/GabeditFolderChooser.h0000644000175100017510000000507613130665225021523 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation dir (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GABEDITFOLDERCHOOSER_H__ #define __GABEDIT_GABEDITFOLDERCHOOSER_H__ #define GABEDIT_TYPE_FOLDER_CHOOSER (gtk_file_chooser_get_type()) #define GABEDIT_FOLDER_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GABEDIT_TYPE_FOLDER_CHOOSER,GabeditFolderChooser)) #define GABEDIT_FOLDER_CHOOSER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GABEDIT_TYPE_FOLDER_CHOOSER, GabeditFolderChooser)) #define GABEDIT_IS_FOLDER_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GABEDIT_TYPE_FOLDER_CHOOSER)) #define GABEDIT_IS_FOLDER_CHOOSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GABEDIT_TYPE_FOLDER_CHOOSER)) #define GABEDIT_FOLDER_CHOOSER_GET_CLASS(obj) (G_TYPE_CHECK_GET_CLASS ((obj), GABEDIT_TYPE_FOLDER_CHOOSER, GabeditFolderChooserClass)) typedef struct _GtkFileChooser GabeditFolderChooser; typedef struct _GtkFileChooserClass GabeditFolderChooserClass; GtkWidget* gabedit_folder_chooser_new(gchar* title); void gabedit_folder_chooser_set_current_folder(GabeditFolderChooser *folderChooser,const gchar *folderName); gchar* gabedit_folder_chooser_get_current_folder(GabeditFolderChooser *folderChooser); void gabedit_folder_chooser_set_filters(GabeditFolderChooser *folderChooser,gchar **patterns); #endif /* __GABEDIT_GABEDITFOLDERCHOOSER_H__ */ GabeditSrc250/src/Files/FileChooser.c0000644000175100017510000007226213130665225017703 0ustar alloucheallouche/* FileChooser.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Common/Windows.h" #include "../Common/Exit.h" #include "../Display/UtilsOrb.h" /***************************************************************************************************************************/ GtkWidget* file_chooser(gpointer data,gchar* title,GabEditTypeFile type,GabEditTypeWin typewin, GtkFileChooserAction action) { GtkWidget *gabeditFileChooser; gchar* patternsfiles[] = { "*", "*.inp","*.com","*.mop","*.nw","*.psi", "*.log","*.out","*.fchk", "*.aux","*.gab","*.ici","*.xyz","*.mol2","*.mol","*.tnk","*.pdb","*.hin","*.zmt","*.gzmt", "*.hf","*.gcube","*.cube","*.CUBE","*.grid","*.M2Msi","*.t41","*.dx","*.trj","*.irc","*.txt","*.xml","*", NULL}; GCallback *func = (GCallback *)data; gchar* temp = NULL; if(title) gabeditFileChooser = gabedit_file_chooser_new(title, action); else { if(action == GTK_FILE_CHOOSER_ACTION_OPEN) gabeditFileChooser = gabedit_file_chooser_new(_("Open file"), action); else gabeditFileChooser = gabedit_file_chooser_new(_("Save file"), action); } if(type== GABEDIT_TYPEFILE_CUBEMOLPRO) { temp=patternsfiles[6]; patternsfiles[6]=patternsfiles[7]; patternsfiles[7]=temp; temp = NULL; }; gabedit_file_chooser_hide_hidden(GABEDIT_FILE_CHOOSER(gabeditFileChooser)); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(gabeditFileChooser), patternsfiles); switch(type) { case GABEDIT_TYPEFILE_DALTON : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.out"); temp = g_strdup_printf("%s.out",fileopen.projectname); break; case GABEDIT_TYPEFILE_DEMON : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.out"); temp = g_strdup_printf("%s.out",fileopen.projectname); break; case GABEDIT_TYPEFILE_GAMESS : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.log"); temp = g_strdup_printf("%s.log",fileopen.projectname); break; case GABEDIT_TYPEFILE_FIREFLY : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.log"); temp = g_strdup_printf("%s.log",fileopen.projectname); break; case GABEDIT_TYPEFILE_GAUSSIAN : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.log"); temp = g_strdup_printf("%s.log",fileopen.projectname); break; case GABEDIT_TYPEFILE_MOLCAS : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.out"); temp = g_strdup_printf("%s.out",fileopen.projectname); break; case GABEDIT_TYPEFILE_MOLPRO : if(strstr(title,"geometry")) gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.out"); else gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.out"); temp = g_strdup_printf("%s.out",fileopen.projectname); break; case GABEDIT_TYPEFILE_MOLPRO_LOG : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.log"); temp = g_strdup_printf("%s.log",fileopen.projectname); break; case GABEDIT_TYPEFILE_ORCA : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.out"); temp = g_strdup_printf("%s.out",fileopen.projectname); break; case GABEDIT_TYPEFILE_VASPOUTCAR : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*"); temp = g_strdup_printf("OUTCAR"); break; case GABEDIT_TYPEFILE_VASPXML : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.xml"); temp = g_strdup_printf("%s.xml",fileopen.projectname); break; case GABEDIT_TYPEFILE_VASPPOSCAR : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*"); temp = g_strdup_printf("POSCAR"); break; case GABEDIT_TYPEFILE_QCHEM : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.out"); temp = g_strdup_printf("%s.out",fileopen.projectname); break; case GABEDIT_TYPEFILE_NWCHEM : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.out"); temp = g_strdup_printf("%s.out",fileopen.projectname); break; case GABEDIT_TYPEFILE_PSICODE : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.out"); temp = g_strdup_printf("%s.out",fileopen.projectname); break; case GABEDIT_TYPEFILE_MOPAC : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.out"); temp = g_strdup_printf("%s.out",fileopen.projectname); break; case GABEDIT_TYPEFILE_MOPAC_AUX : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.aux"); temp = g_strdup_printf("%s.aux",fileopen.projectname); break; case GABEDIT_TYPEFILE_ADF : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.out"); temp = g_strdup_printf("%s.out",fileopen.projectname); break; case GABEDIT_TYPEFILE_MOLDEN : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.molden"); temp = g_strdup_printf("%s.molden",fileopen.projectname); break; case GABEDIT_TYPEFILE_GABEDIT : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.gab"); temp = g_strdup_printf("%s.gab",fileopen.projectname); break; case GABEDIT_TYPEFILE_MOBCAL : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.mfj"); temp = g_strdup_printf("%s.mfj",fileopen.projectname); break; case GABEDIT_TYPEFILE_MPQC : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.out"); temp = g_strdup_printf("%s.out",fileopen.projectname); break; case GABEDIT_TYPEFILE_XYZ : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.xyz"); temp = g_strdup_printf("%s.xyz",fileopen.projectname); break; case GABEDIT_TYPEFILE_MOL2 : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.mol2"); temp = g_strdup_printf("%s.mol2",fileopen.projectname); break; case GABEDIT_TYPEFILE_MOL : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.mol"); temp = g_strdup_printf("%s.mol",fileopen.projectname); break; case GABEDIT_TYPEFILE_TINKER : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.tnk"); temp = g_strdup_printf("%s.tnk",fileopen.projectname); break; case GABEDIT_TYPEFILE_PDB : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.pdb"); temp = g_strdup_printf("%s.pdb",fileopen.projectname); break; case GABEDIT_TYPEFILE_HIN : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.hin"); temp = g_strdup_printf("%s.hin",fileopen.projectname); break; case GABEDIT_TYPEFILE_AIMALL : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.sum"); temp = g_strdup_printf("%s.sum",fileopen.projectname); break; case GABEDIT_TYPEFILE_GZMAT : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.gzmt"); temp = g_strdup_printf("%s.gzmt",fileopen.projectname); break; case GABEDIT_TYPEFILE_MZMAT : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.zmt"); temp = g_strdup_printf("%s.zmt",fileopen.projectname); break; case GABEDIT_TYPEFILE_CCHEMI : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.ici"); temp = g_strdup_printf("%s.ici",fileopen.projectname); break; case GABEDIT_TYPEFILE_DEMONINPUT : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.inp"); temp = g_strdup_printf("%s.inp",fileopen.projectname); break; case GABEDIT_TYPEFILE_GAMESSINPUT : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.inp"); temp = g_strdup_printf("%s.inp",fileopen.projectname); break; case GABEDIT_TYPEFILE_FIREFLYINPUT : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.inp"); temp = g_strdup_printf("%s.inp",fileopen.projectname); break; case GABEDIT_TYPEFILE_GAUSSIANINPUT : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.com"); temp = g_strdup_printf("%s.com",fileopen.projectname); break; case GABEDIT_TYPEFILE_GAUSSIAN_FCHK : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.fchk"); temp = g_strdup_printf("%s.fchk",fileopen.projectname); break; case GABEDIT_TYPEFILE_MOLCASINPUT : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.com"); temp = g_strdup_printf("%s.com",fileopen.projectname); break; case GABEDIT_TYPEFILE_MOLPROINPUT : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.com"); temp = g_strdup_printf("%s.com",fileopen.projectname); break; case GABEDIT_TYPEFILE_ORCAINPUT : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.inp"); temp = g_strdup_printf("%s.inp",fileopen.projectname); break; case GABEDIT_TYPEFILE_QCHEMINPUT : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.inp"); temp = g_strdup_printf("%s.inp",fileopen.projectname); break; case GABEDIT_TYPEFILE_NWCHEMINPUT : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.nw"); temp = g_strdup_printf("%s.nw",fileopen.projectname); break; case GABEDIT_TYPEFILE_PSICODEINPUT : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.psi"); temp = g_strdup_printf("%s.psi",fileopen.projectname); break; case GABEDIT_TYPEFILE_MOPACINPUT : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.mop"); temp = g_strdup_printf("%s.mop",fileopen.projectname); break; case GABEDIT_TYPEFILE_JPEG : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.jpg"); temp = g_strdup_printf("%s.jpg",fileopen.projectname); break; case GABEDIT_TYPEFILE_PPM : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.ppm"); temp = g_strdup_printf("%s.ppm",fileopen.projectname); break; case GABEDIT_TYPEFILE_BMP : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.bmp"); temp = g_strdup_printf("%s.bmp",fileopen.projectname); break; case GABEDIT_TYPEFILE_PNG : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.png"); temp = g_strdup_printf("%s.png",fileopen.projectname); break; case GABEDIT_TYPEFILE_TIF : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.tif"); temp = g_strdup_printf("%s.tif",fileopen.projectname); break; case GABEDIT_TYPEFILE_PS : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.ps"); temp = g_strdup_printf("%s.ps",fileopen.projectname); break; case GABEDIT_TYPEFILE_CUBEGAUSS : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.cube"); temp = g_strdup_printf("%s.cube",fileopen.projectname); break; case GABEDIT_TYPEFILE_CUBEMOLPRO : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.CUBE"); temp = g_strdup_printf("%s.CUBE",fileopen.projectname); break; case GABEDIT_TYPEFILE_CUBEADF : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.t41"); temp = g_strdup_printf("%s.t41",fileopen.projectname); break; case GABEDIT_TYPEFILE_MOLCASGRID : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.grid"); temp = g_strdup_printf("%s.grid",fileopen.projectname); break; case GABEDIT_TYPEFILE_CUBEMOLCAS : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.cube"); temp = g_strdup_printf("%s.cube",fileopen.projectname); break; case GABEDIT_TYPEFILE_CUBEQCHEM : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.hf"); temp = g_strdup_printf("%s.hf",fileopen.projectname); break; case GABEDIT_TYPEFILE_CUBEGABEDIT : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.gcube"); temp = g_strdup_printf("%s.gcube",fileopen.projectname); break; case GABEDIT_TYPEFILE_CUBEDX : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.dx"); temp = g_strdup_printf("%s.dx",fileopen.projectname); break; case GABEDIT_TYPEFILE_TRJ : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.trj"); temp = g_strdup_printf("%s.trj",fileopen.projectname); break; case GABEDIT_TYPEFILE_GAMESSIRC : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.irc"); temp = g_strdup_printf("%s.irc",fileopen.projectname); break; case GABEDIT_TYPEFILE_XML : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.xml"); temp = g_strdup_printf("%s.xml",fileopen.projectname); break; case GABEDIT_TYPEFILE_TXT : gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.txt"); temp = g_strdup_printf("%s.txt",fileopen.projectname); break; default :break; } if(temp != NULL) { if(lastdirectory) { gchar* t = g_strdup_printf("%s%s%s",lastdirectory,G_DIR_SEPARATOR_S,temp); gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser),t); g_free(t); g_free(temp); } else { if(fileopen.localdir) { gchar* t = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,temp); gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser),t); g_free(t); g_free(temp); } else { gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser),temp); g_free(temp); } } } else { if(lastdirectory) { gchar* t = g_strdup_printf("%s%sdump.txt",lastdirectory,G_DIR_SEPARATOR_S); gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser),t); g_free(t); } else if(fileopen.localdir) { gchar* t = g_strdup_printf("%s%sdump.txt",fileopen.localdir,G_DIR_SEPARATOR_S); gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser),t); g_free(t); } } if(typewin==GABEDIT_TYPEWIN_ORB) { if(action == GTK_FILE_CHOOSER_ACTION_OPEN) add_glarea_child(gabeditFileChooser,_("Open file ")); else add_glarea_child(gabeditFileChooser,_("Save file ")); } else { add_button_windows(_(" Open file "),gabeditFileChooser); g_signal_connect(G_OBJECT(gabeditFileChooser), "delete_event",(GCallback)destroy_button_windows,NULL); } g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (func),GTK_OBJECT(gabeditFileChooser)); if(typewin==GABEDIT_TYPEWIN_ORB) g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (delete_child), GTK_OBJECT(gabeditFileChooser)); else g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (destroy_button_windows),GTK_OBJECT(gabeditFileChooser)); g_signal_connect_after (gabeditFileChooser, "response", G_CALLBACK (gtk_widget_destroy),GTK_OBJECT(gabeditFileChooser)); gtk_widget_show(gabeditFileChooser); return gabeditFileChooser; } /***************************************************************************************************************************/ GtkWidget* file_chooser_open(gpointer data,gchar* title,GabEditTypeFile type,GabEditTypeWin typewin) { return file_chooser(data, title, type, typewin, GTK_FILE_CHOOSER_ACTION_OPEN); } /***************************************************************************************************************************/ GtkWidget* file_chooser_save(gpointer data,gchar* title,GabEditTypeFile type,GabEditTypeWin typewin) { return file_chooser(data, title, type, typewin, GTK_FILE_CHOOSER_ACTION_SAVE); } /***************************************************************************************************************************/ void choose_file_to_open() { GtkWidget *gabeditFileChooser; gchar* patternsfiles[] = {"*.com","*.mop","*.inp","*.nw","*.psi","*.xyz","*.zmt","*.gzmt","*",NULL}; gabeditFileChooser = gabedit_file_chooser_new(_("Open file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_hide_hidden(GABEDIT_FILE_CHOOSER(gabeditFileChooser)); if(strcmp(fileopen.datafile,"NoName")) { if(fileopen.localdir) { gchar* t = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser),t); g_free(t); } else gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser), fileopen.datafile); } gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(gabeditFileChooser), patternsfiles); if(iprogram == PROG_IS_GAMESS || iprogram == PROG_IS_FIREFLY || iprogram == PROG_IS_DEMON || iprogram == PROG_IS_ORCA || iprogram == PROG_IS_OTHER) gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.inp"); else if(iprogram == PROG_IS_MOPAC) gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.mop"); else if(iprogram == PROG_IS_PSICODE) gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.psi"); else if(iprogram == PROG_IS_NWCHEM) gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.nw"); else gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.com"); g_signal_connect(G_OBJECT(gabeditFileChooser), "delete_event",(GCallback)destroy_button_windows,NULL); g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (show_doc), GTK_OBJECT(gabeditFileChooser)); g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (destroy_button_windows), GTK_OBJECT(gabeditFileChooser)); g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(gabeditFileChooser)); add_button_windows(_(" Open file "),gabeditFileChooser); gtk_widget_show(gabeditFileChooser); } /********************************************************************************/ void choose_file_to_insert() { GtkWidget *gabeditFileChooser; gabeditFileChooser = gabedit_file_chooser_new(_("Include file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_hide_hidden(GABEDIT_FILE_CHOOSER(gabeditFileChooser)); g_signal_connect(G_OBJECT(gabeditFileChooser), "delete_event",(GCallback)destroy_button_windows,NULL); if(fileopen.localdir) { gchar* t = g_strdup_printf("%s%s",fileopen.localdir,G_DIR_SEPARATOR_S); gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser),t); g_free(t); } g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (insert_doc), GTK_OBJECT(gabeditFileChooser)); g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (data_modify),NULL); g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (destroy_button_windows), GTK_OBJECT(gabeditFileChooser)); g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(gabeditFileChooser)); add_button_windows(_(" Include file "),gabeditFileChooser); gtk_widget_show(gabeditFileChooser); } /********************************************************************************/ void choose_file_to_save() { GtkWidget *gabeditFileChooser; gabeditFileChooser = gabedit_file_chooser_new("Save file", GTK_FILE_CHOOSER_ACTION_SAVE); gabedit_file_chooser_hide_hidden(GABEDIT_FILE_CHOOSER(gabeditFileChooser)); if(strcmp(fileopen.datafile,"NoName")) { if(fileopen.localdir) { gchar* t = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser),t); g_free(t); } else gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser),fileopen.datafile); } g_signal_connect(G_OBJECT(gabeditFileChooser), "delete_event",(GCallback)destroy_button_windows,NULL); g_signal_connect (gabeditFileChooser, "response", G_CALLBACK(enreg_selec_doc) , GTK_OBJECT(gabeditFileChooser)); g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (destroy_button_windows), GTK_OBJECT(gabeditFileChooser)); g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(gabeditFileChooser)); add_button_windows(" Save file ",gabeditFileChooser); gtk_widget_show(gabeditFileChooser); } /********************************************************************************/ void choose_file_to_save_end() { GtkWidget *gabeditFileChooser; gabeditFileChooser = gabedit_file_chooser_new(_("Save file"), GTK_FILE_CHOOSER_ACTION_SAVE); gabedit_file_chooser_hide_hidden(GABEDIT_FILE_CHOOSER(gabeditFileChooser)); gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser),fileopen.datafile); g_signal_connect (gabeditFileChooser, "response", G_CALLBACK(enreg_selec_doc) , GTK_OBJECT(gabeditFileChooser)); g_signal_connect (gabeditFileChooser, "response", G_CALLBACK(ExitDlg), GTK_OBJECT(gabeditFileChooser)); g_signal_connect (gabeditFileChooser, "response", G_CALLBACK(gtk_widget_destroy) , GTK_OBJECT(gabeditFileChooser)); gtk_widget_show(gabeditFileChooser); } /********************************************************************************/ void Save_YesNo() { GtkWidget *DialogueMessage = NULL; GtkWidget *Label, *Bouton; GtkWidget *frame, *vboxframe; gchar *t; DialogueMessage = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(DialogueMessage),_("Question")); gtk_window_set_modal (GTK_WINDOW (DialogueMessage), TRUE); gtk_window_set_transient_for(GTK_WINDOW(DialogueMessage),GTK_WINDOW(Fenetre)); gtk_window_set_position(GTK_WINDOW(DialogueMessage),GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(DialogueMessage), "delete_event", (GCallback)gtk_widget_destroy, NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); g_object_ref (frame); g_object_set_data_full (G_OBJECT (DialogueMessage), "frame", frame,(GDestroyNotify) g_object_unref); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(DialogueMessage)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); gtk_widget_realize(DialogueMessage); t=get_name_file(fileopen.datafile); t=g_strdup_printf(_("\"%s\" has been modified. Do you want to save it ?"),t); Label = create_label_with_pixmap(DialogueMessage,t,_("Question")); g_free(t); gtk_box_pack_start( GTK_BOX(vboxframe), Label,TRUE,TRUE,0); /* the Cancel button */ gtk_widget_realize(DialogueMessage); Bouton = create_button(DialogueMessage,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(DialogueMessage)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(DialogueMessage)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); /* the No button */ Bouton = create_button(DialogueMessage,_("No")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(DialogueMessage)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)ExitDlg,NULL); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(DialogueMessage)); /* the Yes button */ Bouton = create_button(DialogueMessage,"Yes"); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(DialogueMessage)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)choose_file_to_save_end,NULL); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(DialogueMessage)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_show_all(DialogueMessage); } /********************************************************************************/ void set_entry_file(GtkWidget* gabeditFileChooser, gint response_id) { GtkWidget *entry; gchar *file; if( response_id != GTK_RESPONSE_OK) return; entry = (GtkWidget*)(g_object_get_data(G_OBJECT(gabeditFileChooser),"Entry")); file = gabedit_file_chooser_get_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser)); gtk_entry_set_text(GTK_ENTRY(entry),file); } /********************************************************************************/ void set_entry_selected_file(GtkWidget* hbox) { GtkWidget *gabeditFileChooser; GtkWidget *entry = (GtkWidget*)(g_object_get_data(G_OBJECT(hbox),"Entry")); GtkWidget *Win = (GtkWidget*)(g_object_get_data(G_OBJECT(hbox),"Window")); gchar** patterns = (gchar**)(g_object_get_data(G_OBJECT(hbox),"Patterns")); gabeditFileChooser = gabedit_file_chooser_new(_("File selection"), GTK_FILE_CHOOSER_ACTION_OPEN); gtk_window_set_modal (GTK_WINDOW (gabeditFileChooser), TRUE); gabedit_file_chooser_hide_hidden(GABEDIT_FILE_CHOOSER(gabeditFileChooser)); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(gabeditFileChooser), patterns); add_child(Win,gabeditFileChooser,gtk_widget_destroy,_(" File selction ")); g_signal_connect(G_OBJECT(gabeditFileChooser),"delete_event",(GCallback)delete_child,NULL); g_object_set_data(G_OBJECT (gabeditFileChooser), "Entry", entry); g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (set_entry_file), GTK_OBJECT(gabeditFileChooser)); g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (delete_child), GTK_OBJECT(gabeditFileChooser)); gtk_widget_show(gabeditFileChooser); } /********************************************************************************/ GtkWidget* choose_file_to_create(gchar* title, GCallback applyFunc) { GtkWidget *gabeditFileChooser; gabeditFileChooser = gabedit_file_chooser_new(title, GTK_FILE_CHOOSER_ACTION_SAVE); gabedit_file_chooser_hide_hidden(GABEDIT_FILE_CHOOSER(gabeditFileChooser)); if(strcmp(fileopen.datafile,"NoName")) { if(fileopen.localdir) { gchar* t = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser),t); g_free(t); } else gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser),fileopen.datafile); } g_signal_connect(G_OBJECT(gabeditFileChooser), "delete_event",(GCallback)destroy_button_windows,NULL); g_signal_connect (gabeditFileChooser, "response", G_CALLBACK(applyFunc) , GTK_OBJECT(gabeditFileChooser)); g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (destroy_button_windows), GTK_OBJECT(gabeditFileChooser)); g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(gabeditFileChooser)); add_button_windows(title,gabeditFileChooser); gtk_widget_show(gabeditFileChooser); return gabeditFileChooser; } GabeditSrc250/src/Files/FolderChooser.h0000644000175100017510000000030413130665225020230 0ustar alloucheallouche #ifndef __GABEDIT_FOLDERCHOOSER_H__ #define __GABEDIT_FOLDERCHOOSER_H__ GtkWidget* selctionOfDir(gpointer data, gchar* title, GabEditTypeWin typewin) ; #endif /* __GABEDIT_FOLDERCHOOSER_H__ */ GabeditSrc250/src/Files/ListeFiles.c0000644000175100017510000027017713130665225017551 0ustar alloucheallouche/* ListeFiles.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "../Common/Global.h" #ifdef G_OS_WIN32 #include #else #include #endif /* G_OS_WIN32 */ #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/ResultsAnalise.h" #include "../Geometry/EnergiesCurves.h" #include "../Common/Windows.h" #include "../Geometry/GeomZmatrix.h" #include "../Common/Run.h" #include "../Common/Status.h" #include "../Molcas/MolcasVariables.h" #include "../Molcas/MolcasGateWay.h" #include "../../pixmaps/DeMonMini.xpm" #include "../../pixmaps/GamessMini.xpm" #include "../../pixmaps/FireFlyMini.xpm" #include "../../pixmaps/Gaussian.xpm" #include "../../pixmaps/MolproMini.xpm" #include "../../pixmaps/MolcasMini.xpm" #include "../../pixmaps/MPQCMini.xpm" #include "../../pixmaps/NWChemMini.xpm" #include "../../pixmaps/PsicodeMini.xpm" #include "../../pixmaps/OrcaMini.xpm" #include "../../pixmaps/QChemMini.xpm" #include "../../pixmaps/MopacMini.xpm" #include "../../pixmaps/GabeditMini.xpm" #include "../../pixmaps/Book_close.xpm" #include "../../pixmaps/Page.xpm" #include "../Common/StockIcons.h" #include "../Files/ListeFiles.h" static GdkPixbuf *demonPixbuf = NULL; static GdkPixbuf *gamessPixbuf = NULL; static GdkPixbuf *gaussianPixbuf = NULL; static GdkPixbuf *molcasPixbuf = NULL; static GdkPixbuf *molproPixbuf = NULL; static GdkPixbuf *mpqcPixbuf = NULL; static GdkPixbuf *fireflyPixbuf = NULL; static GdkPixbuf *nwchemPixbuf = NULL; static GdkPixbuf *psicodePixbuf = NULL; static GdkPixbuf *orcaPixbuf = NULL; static GdkPixbuf *qchemPixbuf = NULL; static GdkPixbuf *mopacPixbuf = NULL; static GdkPixbuf *gabeditPixbuf = NULL; static GdkPixbuf *bookPixbuf = NULL; static GdkPixbuf *pagePixbuf = NULL; typedef enum { LIST_PIXBUF = 0, LIST_NAME, LIST_NODE_FOREGROUND_COLOR, /* this column is not visible */ LIST_DATA /* column for data, this column is not visible */ }ListColumnsTypes; static DataTree** AllFiles=NULL; static int Nfiles = 0; static GtkWidget *checkbutton[NBNOD]; /*static GtkTooltips *GroupeHelp = NULL;*/ static gboolean popupshow = FALSE; #define NL 3 static GtkWidget *LocalLabel[NL]; #define NR 3 static GtkWidget *RemoteLabel[NR]; static gchar selectedRow[100] = "-1"; /********************************************************************************/ static GtkTreeIter* CreeNoeud(GtkTreeView* , gchar *); void CreeFeuille(GtkWidget *treeView, GtkTreeIter *parent,gchar* projectname,gchar*datafile,gchar* localdir, gchar* remotehost,gchar* remoteuser,gchar* remotepass,gchar* remotedir,gint itype, gchar* command, GabEditNetWork netWorkProtocol); static void AddFeuille(GtkTreeView *treeView, GtkTreeIter *parent, DataTree *pfd); static void tree_data_destroy (DataTree* pfd); static void create_window_list_to_clear(); static void clear_one_project(); static void create_set_dialogue_window(); static DataTree* tree_data_new (gchar *projectname,gchar* datafile,gchar* localdir, gchar* remotehost,gchar* remoteuser,gchar* remotepass,gchar* remotedir,gint itype, gchar* command, GabEditNetWork netWorkProtocol); static void create_remote_frame_popup(GtkWidget *hbox,DataTree* data); static void create_local_frame_popup(GtkWidget *hbox,DataTree* data); static void create_info_win(); /********************************************************************************/ static void set_pixbuf() { if(!demonPixbuf) demonPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) demon_mini_xpm); if(!gamessPixbuf) gamessPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) gamess_mini_xpm); if(!gaussianPixbuf) gaussianPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) gaussian_xpm); if(!molcasPixbuf) molcasPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) molcas_mini_xpm); if(!molproPixbuf) molproPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) molpro_mini_xpm); if(!mpqcPixbuf) mpqcPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) mpqc_mini_xpm); if(!nwchemPixbuf) nwchemPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) nwchem_mini_xpm); if(!psicodePixbuf) psicodePixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) psicode_mini_xpm); if(!orcaPixbuf) orcaPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) orca_mini_xpm); if(!qchemPixbuf) qchemPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) qchem_mini_xpm); if(!mopacPixbuf) mopacPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) mopac_mini_xpm); if(!gabeditPixbuf) gabeditPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) gabedit_mini_xpm); if(!fireflyPixbuf) fireflyPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) firefly_mini_xpm); if(!bookPixbuf) bookPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) book_close_xpm); if(!pagePixbuf) pagePixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) page_xpm); } /********************************************************************************/ static void set_sensitive_option(GtkUIManager *manager, gchar* path, gboolean sensitive) { GtkWidget *wid = gtk_ui_manager_get_widget (manager, path); if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid, sensitive); } /**********************************************************************************/ static gboolean show_menu_popup(GtkUIManager *manager, guint button, guint32 time) { GtkWidget *menu = gtk_ui_manager_get_widget (manager, "/MenuRecentProjects"); if (GTK_IS_MENU (menu)) { gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, time); return TRUE; } return FALSE; } /*********************************************************************************************************************/ static void activate_action (GtkAction *action) { const gchar *name = gtk_action_get_name (action); if(!strcmp(name, "Info")) create_info_win(); else if(!strcmp(name, "Cut")) clear_one_project(); else if(!strcmp(name, "Set")) create_set_dialogue_window(); else if(!strcmp(name, "ClearNodes")) create_window_list_to_clear(); else if(!strcmp(name, "Save")) parse_liste_files(); } /*--------------------------------------------------------------------*/ static GtkActionEntry gtkActionEntries[] = { {"Info", GABEDIT_STOCK_INFO, N_("_Info"), NULL, "Info", G_CALLBACK (activate_action) }, {"Cut", GABEDIT_STOCK_CUT, N_("_Cut"), NULL, "Cut", G_CALLBACK (activate_action) }, {"Set", NULL, "_Set", NULL, N_("Set"), G_CALLBACK (activate_action) }, {"ClearNodes", NULL, N_("Clear _nodes"), NULL, "Clear nodes", G_CALLBACK (activate_action) }, {"Save", GABEDIT_STOCK_SAVE, N_("_Save list of projects"), NULL, "Save list of projects", G_CALLBACK (activate_action) }, }; static guint numberOfGtkActionEntries = G_N_ELEMENTS (gtkActionEntries); /********************************************************************************/ /* XML description of the menus for the test app. The parser understands * a subset of the Bonobo UI XML format, and uses GMarkup for parsing */ static const gchar *uiMenuInfo = " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*******************************************************************************************************************************/ static GtkUIManager *create_menu(GtkWidget* win) { GtkActionGroup *actionGroup = NULL; GtkUIManager *manager = NULL; GError *error = NULL; manager = gtk_ui_manager_new (); g_signal_connect_swapped (win, "destroy", G_CALLBACK (g_object_unref), manager); actionGroup = gtk_action_group_new ("GabeditListOfProject"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntries, numberOfGtkActionEntries, NULL); gtk_ui_manager_insert_action_group (manager, actionGroup, 0); gtk_window_add_accel_group (GTK_WINDOW (win), gtk_ui_manager_get_accel_group (manager)); if (!gtk_ui_manager_add_ui_from_string (manager, uiMenuInfo, -1, &error)) { g_message ("building menus failed: %s", error->message); g_error_free (error); } return manager; } /********************************************************************************/ static void set_fileopen(DataTree* data) { if(fileopen.projectname) g_free(fileopen.projectname); if(fileopen.localdir) g_free(fileopen.localdir); if(fileopen.datafile) g_free(fileopen.datafile); if(fileopen.outputfile) g_free(fileopen.outputfile); if(fileopen.logfile) g_free(fileopen.logfile); if(fileopen.moldenfile) g_free(fileopen.moldenfile); fileopen.projectname=g_strdup(data->projectname); fileopen.datafile=g_strdup(data->datafile); fileopen.localdir=g_strdup(data->localdir); if(data->itype == PROG_IS_MOLCAS) { fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname); /* fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname);*/ fileopen.moldenfile=g_strdup_printf("'%s.*.molden'", fileopen.projectname); } else if(data->itype == PROG_IS_MOLPRO) { fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname); } else if(data->itype == PROG_IS_GAUSS) { fileopen.outputfile = g_strdup_printf("%s.log",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname); } else if(data->itype == PROG_IS_MPQC) { fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); } else if(data->itype == PROG_IS_ORCA) { fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); } else if(data->itype == PROG_IS_QCHEM) { fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); } else if(data->itype == PROG_IS_NWCHEM) { fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); } else if(data->itype == PROG_IS_PSICODE) { fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); } else if(data->itype == PROG_IS_MOPAC) { fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.aux",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); } else if(data->itype == PROG_IS_FIREFLY) { fileopen.outputfile = g_strdup_printf("%s.log",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname); } else if(data->itype == PROG_IS_DEMON) { fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); } else if(data->itype == PROG_IS_GAMESS) { fileopen.outputfile = g_strdup_printf("%s.log",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname); } else { fileopen.outputfile = g_strdup_printf("unknown"); fileopen.logfile = g_strdup_printf("unknown"); fileopen.moldenfile = g_strdup_printf("unknown"); } fileopen.remotehost = g_strdup(data->remotehost); fileopen.remoteuser = g_strdup(data->remoteuser); fileopen.remotepass = g_strdup(data->remotepass); fileopen.remotedir = g_strdup(data->remotedir); fileopen.command=g_strdup(data->command); fileopen.netWorkProtocol = data->netWorkProtocol; if(lastdirectory) g_free(lastdirectory); lastdirectory = g_strdup(fileopen.localdir); } /********************************************************************************/ static void set_properties(GtkWidget *Win,gpointer data) { DataTree* newdata = NULL; DataTree* olddata = (DataTree*)(g_object_get_data(G_OBJECT(Win),"Data")); GtkWidget **entrys = (GtkWidget **)(g_object_get_data(G_OBJECT(Win),"Entrys")); GtkWidget **buttons =(GtkWidget **)(g_object_get_data(G_OBJECT(Win),"Buttons")); GtkWidget * buttonSsh = g_object_get_data(G_OBJECT(Win),"ButtonSsh"); /* GtkWidget * buttonFtpRsh = g_object_get_data(G_OBJECT(Win),"ButtonFtpRsh"); */ gchar* remotehost = NULL; gchar* remoteuser = NULL; gchar* remotepass = NULL; gchar* remotedir = NULL; GabEditNetWork netWorkProtocol ; if (GTK_TOGGLE_BUTTON (buttons[0])->active) { remotehost = g_strdup(""); remoteuser = g_strdup(""); remotepass = g_strdup(""); remotedir = g_strdup(""); } else { remotehost = g_strdup(gtk_entry_get_text(GTK_ENTRY(entrys[0]))); remoteuser = g_strdup(gtk_entry_get_text(GTK_ENTRY(entrys[1]))); remotepass = g_strdup(gtk_entry_get_text(GTK_ENTRY(entrys[2]))); remotedir = g_strdup(gtk_entry_get_text(GTK_ENTRY(entrys[3]))); } if (GTK_TOGGLE_BUTTON (buttonSsh)->active) netWorkProtocol = GABEDIT_NETWORK_SSH; else netWorkProtocol = GABEDIT_NETWORK_FTP_RSH; newdata = tree_data_new ( olddata->projectname,olddata->datafile,olddata->localdir, remotehost,remoteuser,remotepass,remotedir, olddata->itype, olddata->command, netWorkProtocol); if(remotehost) g_free(remotehost); if(remoteuser) g_free(remoteuser); if(remotepass) g_free(remotepass); if(remotedir) g_free(remotedir); clear_one_project(); AddFeuille(GTK_TREE_VIEW(treeViewProjects),noeud[newdata->itype],newdata); if(Nfiles==0) AllFiles = g_malloc(sizeof(DataTree*)); else AllFiles = (DataTree**)g_realloc(AllFiles,(Nfiles+1)*sizeof(DataTree*)); Nfiles++; AllFiles[Nfiles-1] = newdata; if( strcmp(fileopen.projectname,newdata->projectname)==0 && strcmp(fileopen.localdir,newdata->localdir)==0 ) { set_fileopen(newdata); change_all_labels(); } } /********************************************************************************/ static void set_password_visibility(GtkWidget *button,gpointer data) { GtkWidget * entryPassWord = g_object_get_data(G_OBJECT (button), "EntryPassWord"); GtkWidget * label1PassWord = g_object_get_data(G_OBJECT (button), "Label1PassWord"); GtkWidget * label2PassWord = g_object_get_data(G_OBJECT (button), "Label2PassWord"); if (GTK_TOGGLE_BUTTON (button)->active) { gboolean Ok = FALSE; if(data != NULL ) Ok = TRUE; gtk_widget_set_sensitive(entryPassWord, Ok); gtk_widget_set_sensitive(label1PassWord, Ok); gtk_widget_set_sensitive(label2PassWord, Ok); } } /********************************************************************************/ static void set_frame_remote_sensitive(GtkWidget *button,gpointer data) { GtkWidget *FrameRemote = GTK_WIDGET(g_object_get_data(G_OBJECT(button),"FrameRemote")); GtkWidget *FrameNetWork = GTK_WIDGET(g_object_get_data(G_OBJECT(button),"FrameNetWork")); if (GTK_TOGGLE_BUTTON (button)->active) { gboolean Ok = FALSE; if(data != NULL ) Ok = TRUE; gtk_widget_set_sensitive(FrameRemote, Ok); gtk_widget_set_sensitive(FrameNetWork, Ok); } } /********************************************************************************/ static void changed_user(GtkWidget *combo,gpointer data) { GtkWidget **entry = (GtkWidget **)data; gint nlistdir = 1; G_CONST_RETURN gchar *hostname; G_CONST_RETURN gchar *username; gint numhost = -1; gint numuser = -1; GtkWidget* combodir = NULL; gint i; gint j; GList *glist = NULL; if(!this_is_an_object((GtkObject*)entry[0])) return; if(!this_is_an_object((GtkObject*)entry[1])) return; if(!this_is_an_object((GtkObject*)entry[3])) return; hostname = gtk_entry_get_text(GTK_ENTRY(entry[0])); username = gtk_entry_get_text(GTK_ENTRY(entry[1])); combodir = g_object_get_data(G_OBJECT (entry[3]), "Combo"); if(!combodir) return; if(recenthosts.nhosts>0) { for(i=0;i0) { for(i=0;ilocaldir,0,2); if( data->itype == PROG_IS_GAUSS || data->itype == PROG_IS_MOLCAS || data->itype == PROG_IS_MOLPRO || data->itype == PROG_IS_MPQC || data->itype == PROG_IS_ORCA || data->itype == PROG_IS_QCHEM || data->itype == PROG_IS_NWCHEM || data->itype == PROG_IS_PSICODE || data->itype == PROG_IS_MOPAC || data->itype == PROG_IS_GAMESS || data->itype == PROG_IS_DEMON || data->itype == PROG_IS_FIREFLY ) add_label_table(Table,_("Files "),1,0); else add_label_table(Table,_("File "),1,0); switch(data->itype) { case PROG_IS_DEMON : t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname); break; case PROG_IS_GAMESS : t = g_strdup_printf("%s, %s.log",data->datafile,data->projectname); break; case PROG_IS_GAUSS : t = g_strdup_printf("%s, %s.log",data->datafile,data->projectname); break; case PROG_IS_MOLCAS : t = g_strdup_printf("%s, %s.out, %s.log, %s.molden",data->datafile,data->projectname,data->projectname,data->projectname); break; case PROG_IS_MOLPRO : t = g_strdup_printf("%s, %s.out, %s.log, %s.molden",data->datafile,data->projectname,data->projectname,data->projectname); break; case PROG_IS_MPQC : t = g_strdup_printf("%s, %s.out, %s.log, %s.molden",data->datafile,data->projectname,data->projectname,data->projectname); break; case PROG_IS_FIREFLY : t = g_strdup_printf("%s, %s.log",data->datafile,data->projectname); break; case PROG_IS_ORCA : t = g_strdup_printf("%s, %s.out, %s.out, %s.out",data->datafile,data->projectname,data->projectname,data->projectname); break; case PROG_IS_QCHEM : t = g_strdup_printf("%s, %s.out, %s.out, %s.out",data->datafile,data->projectname,data->projectname,data->projectname); break; case PROG_IS_NWCHEM : t = g_strdup_printf("%s, %s.out, %s.out, %s.out",data->datafile,data->projectname,data->projectname,data->projectname); break; case PROG_IS_PSICODE : t = g_strdup_printf("%s, %s.out, %s.out, %s.out",data->datafile,data->projectname,data->projectname,data->projectname); break; case PROG_IS_MOPAC : t = g_strdup_printf("%s, %s.out, %s.aux, %s.out",data->datafile,data->projectname,data->projectname,data->projectname); break; case GABEDIT_TYPENODE_GABEDIT : case GABEDIT_TYPENODE_XYZ : case GABEDIT_TYPENODE_MOL2 : case GABEDIT_TYPENODE_TINKER : case GABEDIT_TYPENODE_PDB : case GABEDIT_TYPENODE_GZMAT : case GABEDIT_TYPENODE_MZMAT : case GABEDIT_TYPENODE_HIN : t = g_strdup_printf("%s",data->datafile); break; default : t = g_strdup_printf("%s",data->projectname); } add_label_table(Table,":",1,1); add_label_table(Table,t,1,2); g_free(t); } /* network protocol frame */ { GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *table = gtk_table_new(1,2,FALSE); gchar ftprsh[] = N_("FTP and rsh protocols"); gchar ssh[] = N_("ssh/scp protocols "); frame = gtk_frame_new (_("NetWork protocols")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vboxall), frame, TRUE, TRUE, 0); vboxframe = gtk_vbox_new (TRUE, 0); gtk_widget_show (vboxframe); gtk_container_add (GTK_CONTAINER (frame), vboxframe); gtk_box_pack_start (GTK_BOX (vboxframe), table, TRUE, TRUE, 0); ButtonFtpRsh = gtk_radio_button_new_with_label( NULL,ftprsh); gtk_table_attach(GTK_TABLE(table),ButtonFtpRsh,0,1,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); gtk_widget_show (ButtonFtpRsh); ButtonSsh = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonFtpRsh)), ssh); gtk_table_attach(GTK_TABLE(table),ButtonSsh,1,2,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); gtk_widget_show (ButtonSsh); FrameNetWork = frame; } /* remote frame */ { GtkWidget *combo; GtkWidget *vboxframe; #define NLABEL 4 gchar *LabelLeft[NLABEL]; gushort i; GtkWidget *Table; gchar *tlisthost[NHOSTMAX]; gchar *tlistuser[NHOSTMAX]; gchar *tlistdir[NHOSTMAX]; gint nlisthost = 1; gint nlistuser = 1; gint nlistdir = 1; if(recenthosts.nhosts>0) { nlisthost = recenthosts.nhosts; for(i=0;ichild; g_object_set_data(G_OBJECT (entrys[i]), "Combo",combo); g_signal_connect(G_OBJECT(GTK_COMBO_BOX(combo)), "changed",G_CALLBACK(changed_host),entrys); i = 1; add_label_table(Table,LabelLeft[i],(gushort)(i),0); add_label_table(Table,":",(gushort)(i),1); combo = create_combo_box_entry(tlistuser,nlistuser,TRUE,-1,-1); add_widget_table(Table,combo,(gushort)(i),2); entrys[i] = GTK_BIN(combo)->child; g_object_set_data(G_OBJECT (entrys[i]), "Combo",combo); g_signal_connect(G_OBJECT(GTK_COMBO_BOX(combo)), "changed",G_CALLBACK(changed_user),entrys); i = 2; label1PassWord = add_label_table(Table,LabelLeft[i],(gushort)(i),0); label2PassWord = add_label_table(Table,":",(gushort)(i),1); entrys[i] = gtk_entry_new (); gtk_entry_set_visibility(GTK_ENTRY (entrys[i]),FALSE); add_widget_table(Table,entrys[i],(gushort)(i),2); i = 3; add_label_table(Table,LabelLeft[i],(gushort)(i),0); add_label_table(Table,":",(gushort)(i),1); combo = create_combo_box_entry(tlistdir,nlistdir,TRUE,-1,-1); add_widget_table(Table,combo,(gushort)(i),2); entrys[i] = GTK_BIN(combo)->child; g_object_set_data(G_OBJECT (entrys[i]), "Combo",combo); gtk_widget_show_all(frame); if(data->remotehost) gtk_entry_set_text(GTK_ENTRY(entrys[0]),data->remotehost); if(data->remoteuser) gtk_entry_set_text(GTK_ENTRY(entrys[1]),data->remoteuser); if(data->remotepass) gtk_entry_set_text(GTK_ENTRY(entrys[2]),data->remotepass); if(data->remotedir) gtk_entry_set_text(GTK_ENTRY(entrys[3]),data->remotedir); for (i=0;inetWorkProtocol== GABEDIT_NETWORK_FTP_RSH) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ButtonFtpRsh), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ButtonSsh), TRUE); /* Show all */ gtk_widget_show_all(fp); } /********************************************************************************/ void set_label_infos_file() { gtk_label_set_text(GTK_LABEL(LocalLabel[2]),fileopen.localdir); if(fileopen.remotehost) gtk_label_set_text(GTK_LABEL(RemoteLabel[0]),fileopen.remotehost); else gtk_label_set_text(GTK_LABEL(RemoteLabel[0])," "); if(fileopen.remoteuser) gtk_label_set_text(GTK_LABEL(RemoteLabel[1]),fileopen.remoteuser); else gtk_label_set_text(GTK_LABEL(RemoteLabel[1])," "); if(fileopen.remotedir) gtk_label_set_text(GTK_LABEL(RemoteLabel[2]),fileopen.remotedir); else gtk_label_set_text(GTK_LABEL(RemoteLabel[2])," "); if(fileopen.remotepass && !this_is_a_backspace(fileopen.remotepass)) gtk_entry_set_text(GTK_ENTRY(ResultEntryPass),fileopen.remotepass); else gtk_entry_set_text(GTK_ENTRY(ResultEntryPass),""); if( fileopen.remotehost && !this_is_a_backspace(fileopen.remotehost) && fileopen.remoteuser && !this_is_a_backspace(fileopen.remoteuser) ) { set_sensitive_remote_frame(TRUE); } else set_sensitive_remote_frame(FALSE); } /********************************************************************************/ static void create_remote_frame_popup(GtkWidget *hbox,DataTree* data) { GtkWidget *frame; GtkWidget *Label; GtkWidget *vboxframe; gchar *LabelLeft[4]; gushort i; GtkWidget *Table; gchar* t = NULL; LabelLeft[0] = g_strdup(_("Host")); LabelLeft[1] = g_strdup(_("Login")); LabelLeft[2] = g_strdup(_("Directory")); if(data->itype == PROG_IS_GAUSS || data->itype == PROG_IS_MOLCAS || data->itype == PROG_IS_MOLPRO || data->itype == PROG_IS_MPQC || data->itype == PROG_IS_GAMESS || data->itype == PROG_IS_FIREFLY || data->itype == PROG_IS_DEMON || data->itype == PROG_IS_QCHEM || data->itype == PROG_IS_NWCHEM || data->itype == PROG_IS_PSICODE || data->itype == PROG_IS_MOPAC || data->itype == PROG_IS_ORCA ) LabelLeft[3] = g_strdup(_("Files")); else LabelLeft[3] = g_strdup(_("File")); frame = gtk_frame_new (_("Remote")); gtk_container_set_border_width (GTK_CONTAINER (frame), 2); gtk_box_pack_start (GTK_BOX(hbox),frame, TRUE, TRUE, 1); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(4,3,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); Label = add_label_table(Table,LabelLeft[0],0,0); add_label_table(Table,":",0,1); add_label_table(Table,data->remotehost,0,2); Label = add_label_table(Table,LabelLeft[1],1,0); add_label_table(Table,":",1,1); if(data->remoteuser && strlen(data->remoteuser)<1 && this_is_a_backspace(data->remoteuser)) { add_label_table(Table,data->remoteuser,1,2); } else { gchar* tmp = NULL; if(data->netWorkProtocol== GABEDIT_NETWORK_FTP_RSH) tmp = g_strdup_printf(_("%s [Using rsh/ftp Protocol]"), data->remoteuser); else tmp = g_strdup_printf(_("%s [Using ssh Protocol]"),data->remoteuser); add_label_table(Table,tmp,1,2); g_free(tmp); } Label = add_label_table(Table,LabelLeft[2],2,0); add_label_table(Table,":",2,1); add_label_table(Table,data->remotedir,2,2); if(!data->remotehost || this_is_a_backspace(data->remotehost)) t = g_strdup(""); else switch(data->itype) { case PROG_IS_DEMON : t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname); break; case PROG_IS_GAMESS : t = g_strdup_printf("%s, %s.log",data->datafile,data->projectname); break; case PROG_IS_GAUSS : t = g_strdup_printf("%s, %s.log",data->datafile,data->projectname); break; case PROG_IS_MOLCAS : t = g_strdup_printf("%s, %s.out, %s.log, %s.molden",data->datafile,data->projectname,data->projectname,data->projectname); break; case PROG_IS_MOLPRO : t = g_strdup_printf("%s, %s.out, %s.log, %s.molden",data->datafile,data->projectname,data->projectname,data->projectname); break; case PROG_IS_MPQC : t = g_strdup_printf("%s, %s.out, %s.log, %s.molden",data->datafile,data->projectname,data->projectname,data->projectname); break; case PROG_IS_FIREFLY : t = g_strdup_printf("%s, %s.log",data->datafile,data->projectname); break; case PROG_IS_ORCA : t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname); break; case PROG_IS_QCHEM : t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname); break; case PROG_IS_NWCHEM : t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname); break; case PROG_IS_PSICODE : t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname); break; case PROG_IS_MOPAC : t = g_strdup_printf("%s, %s.out, %s.aux",data->datafile,data->projectname,data->projectname); break; case GABEDIT_TYPENODE_GABEDIT : case GABEDIT_TYPENODE_XYZ : case GABEDIT_TYPENODE_MOL2 : case GABEDIT_TYPENODE_TINKER : case GABEDIT_TYPENODE_PDB : case GABEDIT_TYPENODE_GZMAT : case GABEDIT_TYPENODE_MZMAT : case GABEDIT_TYPENODE_HIN : t = g_strdup_printf("%s",data->datafile); break; default : t = g_strdup_printf("%s",data->projectname); } Label = add_label_table(Table,LabelLeft[3],3,0); add_label_table(Table,":",3,1); add_label_table(Table,t,3,2); g_free(t); for (i=0;i<4;i++) g_free(LabelLeft[i]); } /********************************************************************************/ static void create_local_frame_popup(GtkWidget *hbox,DataTree* data) { GtkWidget *frame; GtkWidget *Label; GtkWidget *vboxframe; gchar *LabelLeft[4]; gushort i; GtkWidget *Table; gchar localhost[100]; G_CONST_RETURN gchar *localuser = get_local_user(); gchar *t; #ifdef G_OS_WIN32 winsockCheck(stderr); #endif gethostname(localhost,100); LabelLeft[0] = g_strdup(_("Host")); LabelLeft[1] = g_strdup(_("Login")); LabelLeft[2] = g_strdup(_("Directory")); if(data->itype == PROG_IS_GAUSS || data->itype == PROG_IS_MOLCAS || data->itype == PROG_IS_MOLPRO || data->itype == PROG_IS_MPQC || data->itype == PROG_IS_GAMESS || data->itype == PROG_IS_DEMON || data->itype == PROG_IS_FIREFLY || data->itype == PROG_IS_QCHEM || data->itype == PROG_IS_NWCHEM || data->itype == PROG_IS_PSICODE || data->itype == PROG_IS_MOPAC || data->itype == PROG_IS_ORCA ) LabelLeft[3] = g_strdup(_("Files")); else LabelLeft[3] = g_strdup(_("File")); frame = gtk_frame_new (_("Local")); gtk_container_set_border_width (GTK_CONTAINER (frame), 2); gtk_box_pack_start (GTK_BOX(hbox),frame, TRUE, TRUE, 1); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(4,3,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); Label = add_label_table(Table,LabelLeft[0],0,0); add_label_table(Table,":",0,1); add_label_table(Table,localhost,0,2); Label = add_label_table(Table,LabelLeft[1],1,0); add_label_table(Table,":",1,1); add_label_table(Table,localuser,1,2); Label = add_label_table(Table,LabelLeft[2],2,0); add_label_table(Table,":",2,1); add_label_table(Table,data->localdir,2,2); switch(data->itype) { case PROG_IS_DEMON : t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname); break; case PROG_IS_GAMESS : t = g_strdup_printf("%s, %s.log",data->datafile,data->projectname); break; case PROG_IS_GAUSS : t = g_strdup_printf("%s, %s.log",data->datafile,data->projectname); break; case PROG_IS_MOLCAS : t = g_strdup_printf("%s, %s.out, %s.log, %s.molden",data->datafile,data->projectname,data->projectname,data->projectname); break; case PROG_IS_MOLPRO : t = g_strdup_printf("%s, %s.out, %s.log, %s.molden",data->datafile,data->projectname,data->projectname,data->projectname); break; case PROG_IS_MPQC : t = g_strdup_printf("%s, %s.out, %s.log, %s.molden",data->datafile,data->projectname,data->projectname,data->projectname); break; case PROG_IS_FIREFLY : t = g_strdup_printf("%s, %s.log",data->datafile,data->projectname); break; case PROG_IS_ORCA : t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname); break; case PROG_IS_QCHEM : t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname); break; case PROG_IS_NWCHEM : t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname); break; case PROG_IS_PSICODE : t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname); break; case PROG_IS_MOPAC : t = g_strdup_printf("%s, %s.out, %s.aux",data->datafile,data->projectname, data->projectname); break; case GABEDIT_TYPENODE_GABEDIT : case GABEDIT_TYPENODE_XYZ : case GABEDIT_TYPENODE_MOL2 : case GABEDIT_TYPENODE_TINKER : case GABEDIT_TYPENODE_PDB : case GABEDIT_TYPENODE_GZMAT : case GABEDIT_TYPENODE_MZMAT : case GABEDIT_TYPENODE_HIN : t = g_strdup_printf("%s",data->datafile); break; default : t = g_strdup_printf("%s",data->datafile); } Label = add_label_table(Table,LabelLeft[3],3,0); add_label_table(Table,":",3,1); add_label_table(Table,t,3,2); g_free(t); for (i=0;i<4;i++) g_free(LabelLeft[i]); } /********************************************************************************/ static gint destroy_popup(gpointer data) { gtk_widget_hide(GTK_WIDGET(data)); gtk_object_destroy(GTK_OBJECT(data)); popupshow = FALSE; return FALSE; } /********************************************************************************/ static void create_popupwin(DataTree* data) { GtkWidget *MainFrame; GtkWidget *hbox = gtk_hbox_new(0,FALSE); popupshow = TRUE; MainFrame = gtk_window_new (GTK_WINDOW_POPUP); /* center it on the screen*/ gtk_window_set_position(GTK_WINDOW (MainFrame), GTK_WIN_POS_MOUSE); /* set up key and mound button press to hide splash screen*/ gtk_widget_add_events(MainFrame, GDK_BUTTON_PRESS_MASK| GDK_BUTTON_RELEASE_MASK| GDK_KEY_PRESS_MASK); g_signal_connect(G_OBJECT(MainFrame),"button_release_event", G_CALLBACK(destroy_popup),NULL); g_signal_connect(G_OBJECT(MainFrame),"key_press_event", G_CALLBACK(gtk_widget_destroy),NULL); gtk_widget_realize(MainFrame); gtk_widget_show(hbox); gtk_container_add (GTK_CONTAINER (MainFrame), hbox); create_local_frame_popup(hbox,data); create_remote_frame_popup(hbox,data); gtk_widget_show_all(MainFrame); /* force it to draw now.*/ /* gdk_flush();*/ /* go into main loop, processing events.*/ while(gtk_events_pending()) gtk_main_iteration(); /* after 3 seconds, destroy the splash screen.*/ /* gtk_timeout_add( 5000, destroy_popup, MainFrame );*/ } /********************************************************************************/ static void create_remote_frame(GtkWidget *hbox) { GtkWidget *frame; GtkWidget *Label; GtkWidget *vboxframe; gchar *LabelLeft[NR]; gushort i; GtkWidget *Table; LabelLeft[0] = g_strdup(_("Host")); LabelLeft[1] = g_strdup(_("Login")); LabelLeft[2] = g_strdup(_("Directory")); frame = gtk_frame_new (_("Remote")); gtk_container_set_border_width (GTK_CONTAINER (frame), 2); gtk_box_pack_start (GTK_BOX(hbox),frame, TRUE, TRUE, 1); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(3,3,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); Label = add_label_table(Table,LabelLeft[0],0,0); add_label_table(Table,":",0,1); RemoteLabel[0] = add_label_table(Table,"",0,2); Label = add_label_table(Table,LabelLeft[1],1,0); add_label_table(Table,":",1,1); RemoteLabel[1] = add_label_table(Table,"",1,2); Label = add_label_table(Table,LabelLeft[2],2,0); add_label_table(Table,":",2,1); RemoteLabel[2] = add_label_table(Table,"",2,2); for (i=0;ifont_desc = font_desc; gtk_widget_set_style(labelOngletOut, style ); } if(labelOngletErr) { style = gtk_style_copy(gtk_widget_get_style(labelOngletErr)); if(!style) return; if(font_desc) style->font_desc = font_desc; gtk_widget_set_style(labelOngletErr, style ); } } /********************************************************************************/ static void AddNotebookPage(GtkWidget* NoteBook,char *label,GtkWidget **TextP) { GtkWidget *scrolledwindow; GtkWidget *Frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vboxframe = NULL; Frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(Frame), 2); LabelOnglet = gtk_label_new(label); gtk_widget_show(LabelOnglet); if(strstr(label,_("Output"))) { GtkStyle* style = gtk_style_copy( gtk_widget_get_default_style ()); /* PangoFontDescription *font_desc = pango_font_description_from_string (FontsStyleLabel.fontname); */ style->fg[0].red=0; style->fg[0].green=0; style->fg[0].blue=65535; /* if(font_desc) style->font_desc = font_desc; */ gtk_widget_set_style(LabelOnglet, style ); vboxframe = create_vbox(Frame); g_object_set_data(G_OBJECT (Fenetre), "LabelOngletOutput", LabelOnglet); } else if(strstr(label,_("Error"))) { /* PangoFontDescription *font_desc = pango_font_description_from_string (FontsStyleLabel.fontname); */ GtkStyle* style = gtk_style_copy(LabelOnglet->style); style->fg[0].red=65535; style->fg[0].green=0; style->fg[0].blue=0; /* if(font_desc) style->font_desc = font_desc; */ gtk_widget_set_style(LabelOnglet, style ); g_object_set_data(G_OBJECT (Fenetre), "LabelOngletError", LabelOnglet); } LabelMenu = gtk_label_new(label); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook),Frame,LabelOnglet, LabelMenu); g_object_set_data(G_OBJECT (Frame), "Frame", Frame); scrolledwindow = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow); if(strstr(label,_("Output"))) { gtk_box_pack_start (GTK_BOX(vboxframe),scrolledwindow, TRUE, TRUE, 1); create_status_progress_connection_bar(vboxframe); } else gtk_container_add (GTK_CONTAINER (Frame), scrolledwindow); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); *TextP = gabedit_text_new (); set_tab_size (*TextP, 8); /* gabedit_text_set_word_wrap (GABEDIT_TEXT(*TextP), FALSE);*/ gtk_widget_show (*TextP); gtk_container_add (GTK_CONTAINER (scrolledwindow), *TextP); } /*****************************************************************************************/ static void create_local_frame(GtkWidget *hbox) { GtkWidget *frame; GtkWidget *Label; GtkWidget *vboxframe; gchar *LabelLeft[NL]; gushort i; GtkWidget *Table; gchar localhost[100]; G_CONST_RETURN gchar *localuser = get_local_user(); #ifdef G_OS_WIN32 winsockCheck(stderr); #endif gethostname(localhost,100); LabelLeft[0] = g_strdup(_("Host")); LabelLeft[1] = g_strdup(_("Login")); LabelLeft[2] = g_strdup(_("Directory")); frame = gtk_frame_new (_("Local")); gtk_container_set_border_width (GTK_CONTAINER (frame), 2); gtk_box_pack_start (GTK_BOX(hbox),frame, TRUE, TRUE, 1); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(3,3,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); Label = add_label_table(Table,LabelLeft[0],0,0); add_label_table(Table,":",0,1); LocalLabel[0] = add_label_table(Table,localhost,0,2); Label = add_label_table(Table,LabelLeft[1],1,0); add_label_table(Table,":",1,1); LocalLabel[1] = add_label_table(Table,localuser,1,2); Label = add_label_table(Table,LabelLeft[2],2,0); add_label_table(Table,":",2,1); LocalLabel[2] = add_label_table(Table," ",2,2); for (i=0;i=0;i--) { if(Nf[AllFiles[i]->itype]<=20) { Nf[AllFiles[i]->itype]++; NfAll++; toprint[i] = TRUE; } else toprint[i] = FALSE; } fd = FOpen(outfile, "w"); if(fd) { fprintf(fd,"%d\n",NfAll); for(i=0;iitype); save_one_line(fd,AllFiles[i]->projectname); save_one_line(fd,AllFiles[i]->datafile); save_one_line(fd,AllFiles[i]->localdir); save_one_line(fd,AllFiles[i]->remotehost); save_one_line(fd,AllFiles[i]->remoteuser); save_one_line(fd,AllFiles[i]->remotedir); save_one_line(fd,AllFiles[i]->command); if(AllFiles[i]->netWorkProtocol == GABEDIT_NETWORK_FTP_RSH) fprintf(fd,"0\n"); else fprintf(fd,"1\n"); } for(i=0;i0) { for(i=0;ilocaldir,G_DIR_SEPARATOR_S,data->datafile); if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) return ; t=g_malloc(taille*sizeof(gchar)); fd = FOpen(NomFichier, "rb"); if(fd == NULL) { //fprintf(stderr,"\nSorry, I can not open file :\n %s\n",NomFichier); g_free(t); t = g_strdup_printf(_("\nSorry, I can not open file :\n %s\n"),NomFichier); Message(t,"ERROR",TRUE); g_free(t); return; } iprogram = get_type_of_program(fd); //fprintf(stderr,"\niprog=%d\n",iprogram); nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0); gabedit_text_set_point(GABEDIT_TEXT(text),0); gabedit_text_forward_delete(GABEDIT_TEXT(text),nchar); while(1) { nchar = fread(t, 1, taille, fd); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, t,nchar); if(ncharitype) { case GABEDIT_TYPENODE_DEMON: case GABEDIT_TYPENODE_GAMESS: case GABEDIT_TYPENODE_GAUSSIAN: case GABEDIT_TYPENODE_MOLCAS: case GABEDIT_TYPENODE_MOLPRO: case GABEDIT_TYPENODE_MPQC: case GABEDIT_TYPENODE_FIREFLY: case GABEDIT_TYPENODE_ORCA: case GABEDIT_TYPENODE_QCHEM: case GABEDIT_TYPENODE_NWCHEM: case GABEDIT_TYPENODE_PSICODE: case GABEDIT_TYPENODE_MOPAC: case NBNOD-1: if(imodif == DATA_MOD_YES) { t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile)); t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t); t = g_strdup_printf(_(" %sYou want to continue?\n"),t); Continue_YesNo(get_doc_no_add_list, data,t); g_free(t); } else get_doc_no_add_list(NULL,data); break; case GABEDIT_TYPENODE_GABEDIT: MethodeGeom = GEOM_IS_XYZ; allname = g_strdup_printf("%s%s%s",data->localdir,G_DIR_SEPARATOR_S,data->datafile); read_gabedit_file_no_add_list(allname); set_last_directory(allname); g_free(allname); break; case GABEDIT_TYPENODE_XYZ: MethodeGeom = GEOM_IS_XYZ; allname = g_strdup_printf("%s%s%s",data->localdir,G_DIR_SEPARATOR_S,data->datafile); read_XYZ_file_no_add_list(allname); set_last_directory(allname); g_free(allname); break; case GABEDIT_TYPENODE_MOL2: MethodeGeom = GEOM_IS_XYZ; allname = g_strdup_printf("%s%s%s",data->localdir,G_DIR_SEPARATOR_S,data->datafile); read_mol2_tinker_file_no_add_list(allname,"MOL2"); set_last_directory(allname); g_free(allname); break; case GABEDIT_TYPENODE_TINKER: MethodeGeom = GEOM_IS_XYZ; allname = g_strdup_printf("%s%s%s",data->localdir,G_DIR_SEPARATOR_S,data->datafile); read_mol2_tinker_file_no_add_list(allname,"TINKER"); set_last_directory(allname); g_free(allname); break; case GABEDIT_TYPENODE_PDB: MethodeGeom = GEOM_IS_XYZ; allname = g_strdup_printf("%s%s%s",data->localdir,G_DIR_SEPARATOR_S,data->datafile); read_pdb_file_no_add_list(allname); set_last_directory(allname); g_free(allname); break; case GABEDIT_TYPENODE_GZMAT: MethodeGeom = GEOM_IS_ZMAT; allname = g_strdup_printf("%s%s%s",data->localdir,G_DIR_SEPARATOR_S,data->datafile); read_ZMatrix_file_no_add_list(allname); set_last_directory(allname); g_free(allname); break; case GABEDIT_TYPENODE_MZMAT: MethodeGeom = GEOM_IS_ZMAT; allname = g_strdup_printf("%s%s%s",data->localdir,G_DIR_SEPARATOR_S,data->datafile); read_ZMatrix_mopac_file_no_add_list(allname); set_last_directory(allname); g_free(allname); break; case GABEDIT_TYPENODE_HIN: MethodeGeom = GEOM_IS_XYZ; allname = g_strdup_printf("%s%s%s",data->localdir,G_DIR_SEPARATOR_S,data->datafile); read_hin_file_no_add_list(allname); set_last_directory(allname); g_free(allname); } } /********************************************************************************/ static void event_dispatcher(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; GtkTreeIter iter; GtkTreeModel *model; if (!event) return; if(popupshow) return; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); sprintf(selectedRow ,"%s", gtk_tree_path_to_string(path)); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free(path); if (event->type == GDK_2BUTTON_PRESS && ((GdkEventButton *) event)->button == 1) { DataTree* data = NULL; gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1); if(data) select_row(data); } else if (event->type == GDK_BUTTON_PRESS && ((GdkEventButton *) event)->button == 2) { DataTree* data = NULL; gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1); if(data) create_popupwin(data); } else if (event->type == GDK_BUTTON_PRESS && ((GdkEventButton *) event)->button == 3) { GdkEventButton *bevent = (GdkEventButton *) event; GtkUIManager *manager = GTK_UI_MANAGER(user_data); if(atoi(selectedRow) < 0) { set_sensitive_option(manager, "/MenuRecentProjects/Cut", FALSE); set_sensitive_option(manager, "/MenuRecentProjects/Set", FALSE); set_sensitive_option(manager, "/MenuRecentProjects/Info", FALSE); } else { DataTree* data = NULL; gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1); if(data) { set_sensitive_option(manager, "/MenuRecentProjects/Cut", TRUE); set_sensitive_option(manager, "/MenuRecentProjects/Set", TRUE); set_sensitive_option(manager, "/MenuRecentProjects/Info", TRUE); } else { set_sensitive_option(manager, "/MenuRecentProjects/Cut", FALSE); set_sensitive_option(manager, "/MenuRecentProjects/Set", FALSE); set_sensitive_option(manager, "/MenuRecentProjects/Info", FALSE); } } show_menu_popup(manager, bevent->button, bevent->time); } } } GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event); } /********************************************************************************/ static void tree_clear_all() { gint i; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeViewProjects)); GtkTreeStore *store = GTK_TREE_STORE (model); if(AllFiles == NULL) return; gtk_tree_store_clear(store); for(i=0;iitype == inode) { ifdel++; if(AllFiles[i]->projectname) g_free(AllFiles[i]->projectname); if(AllFiles[i]->localdir) g_free(AllFiles[i]->localdir); if(AllFiles[i]->remotehost) g_free(AllFiles[i]->remotehost); if(AllFiles[i]->remoteuser) g_free(AllFiles[i]->remoteuser); if(AllFiles[i]->remotepass) g_free(AllFiles[i]->remotepass); if(AllFiles[i]->remotedir) g_free(AllFiles[i]->remotedir); if(AllFiles[i]->command) g_free(AllFiles[i]->command); AllFiles[i]->noeud=NULL; AllFiles[i]->projectname=g_strdup("DELETED"); } } if(Nfiles>ifdel) tmp = g_malloc((Nfiles-ifdel)*sizeof(DataTree*)); else { Nfiles = 0; if(AllFiles) g_free(AllFiles); AllFiles = NULL; return; } ifn =0; for(i=0;iitype != inode) { tmp[ifn]=AllFiles[i]; ifn++; } } Nfiles = ifn; if(AllFiles) g_free(AllFiles); AllFiles = tmp; } /********************************************************************************/ static void tree_clear_one(gint in) { gint i; gboolean expanded[NBNOD]; gchar* pathString; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeViewProjects)); GtkTreeStore *store = GTK_TREE_STORE (model); if(AllFiles == NULL) return; for(i=0;iitype],AllFiles[i]); for(i=0;iitype],AllFiles[i]); for(i=0;iprojectname) g_free(pfd->projectname); if(pfd->localdir) g_free(pfd->localdir); if(pfd->remotehost) g_free(pfd->remotehost); if(pfd->remoteuser) g_free(pfd->remoteuser); if(pfd->remotepass) g_free(pfd->remotepass); if(pfd->remotedir) g_free(pfd->remotedir); if(pfd->command) g_free(pfd->command); pfd->noeud=NULL; pfd->projectname=g_strdup("DELETED"); if(Nfiles>1) tmp = g_malloc((Nfiles-1)*sizeof(DataTree*)); else { Nfiles--; if(AllFiles) g_free(AllFiles); AllFiles = NULL; return; } ifn =0; for(i=0;iprojectname = g_strdup(projectname); pfd->datafile = g_strdup(datafile); pfd->localdir = g_strdup(localdir); if(remotehost) pfd->remotehost = g_strdup(remotehost); else pfd->remotehost = g_strdup(""); if(remoteuser) pfd->remoteuser = g_strdup(remoteuser); else pfd->remoteuser = g_strdup(""); if(remotepass) pfd->remotepass = g_strdup(remotepass); else pfd->remotepass = g_strdup(""); if(remotedir) pfd->remotedir = g_strdup(remotedir); else pfd->remotedir = g_strdup(""); if(command) pfd->command = g_strdup(command); else pfd->command = g_strdup(""); pfd->itype =itype; pfd->netWorkProtocol = netWorkProtocol; return pfd; } /********************************************************************************/ static GtkTreeIter* CreeNoeud(GtkTreeView *treeView,gchar *text) { gchar* t = g_strdup(text); GtkTreeIter* node = g_malloc(sizeof(GtkTreeIter)); GtkTreeModel *model; GtkTreeStore *store; GdkColor nodeColor; nodeColor.red = 0; nodeColor.green = 0; nodeColor.blue = 65535; model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); store = GTK_TREE_STORE (model); gtk_tree_store_append(store, node, NULL); uppercase(t); gtk_tree_store_set (store, node, LIST_NAME, t, -1); if(strstr(t,"FIREFLY")) gtk_tree_store_set (store, node, LIST_PIXBUF, fireflyPixbuf, -1); else if(strstr(t,"GAMESS")) gtk_tree_store_set (store, node, LIST_PIXBUF, gamessPixbuf, -1); else if(strstr(t,"DEMON")) gtk_tree_store_set (store, node, LIST_PIXBUF, demonPixbuf, -1); else if(strstr(t,"GAUSSIAN")) gtk_tree_store_set (store, node, LIST_PIXBUF, gaussianPixbuf, -1); else if(strstr(t,"MOLCAS")) gtk_tree_store_set (store, node, LIST_PIXBUF, molcasPixbuf, -1); else if(strstr(t,"MOLPRO")) gtk_tree_store_set (store, node, LIST_PIXBUF, molproPixbuf, -1); else if(strstr(t,"MPQC")) gtk_tree_store_set (store, node, LIST_PIXBUF, mpqcPixbuf, -1); else if(strstr(t,"NWCHEM")) gtk_tree_store_set (store, node, LIST_PIXBUF, nwchemPixbuf, -1); else if(strstr(t,"PSICODE")) gtk_tree_store_set (store, node, LIST_PIXBUF, psicodePixbuf, -1); else if(strstr(t,"ORCA")) gtk_tree_store_set (store, node, LIST_PIXBUF, orcaPixbuf, -1); else if(strstr(t,"Q-CHEM")) gtk_tree_store_set (store, node, LIST_PIXBUF, qchemPixbuf, -1); else if(strstr(t,"MOPAC Z")) gtk_tree_store_set (store, node, LIST_PIXBUF, bookPixbuf, -1); else if(strstr(t,"MOPAC")) gtk_tree_store_set (store, node, LIST_PIXBUF, mopacPixbuf, -1); else if(strstr(t,"GABEDIT")) gtk_tree_store_set (store, node, LIST_PIXBUF, gabeditPixbuf, -1); else gtk_tree_store_set (store, node, LIST_PIXBUF, bookPixbuf, -1); gtk_tree_store_set (store, node, LIST_NODE_FOREGROUND_COLOR, &nodeColor, -1); gtk_tree_store_set (store, node, LIST_DATA, NULL, -1); g_free(t); return node; } /********************************************************************************/ static int file_in_list(gchar *projectname,gchar*datafile,gchar* localdir,gint itype) { int i; for(i=0;ilocaldir) && !strcmp(projectname,AllFiles[i]->projectname) && !strcmp(datafile,AllFiles[i]->datafile) && itype == AllFiles[i]->itype) { if(AllFiles[i]->remotehost) g_free(AllFiles[i]->remotehost); if(fileopen.remotehost) AllFiles[i]->remotehost = g_strdup(fileopen.remotehost); else AllFiles[i]->remotehost =NULL; if(fileopen.remoteuser) AllFiles[i]->remoteuser = g_strdup(fileopen.remoteuser); else AllFiles[i]->remoteuser =g_strdup(""); if(fileopen.remotepass) AllFiles[i]->remotepass = g_strdup(fileopen.remotepass); else AllFiles[i]->remotepass =g_strdup(""); if(fileopen.remotedir) AllFiles[i]->remotedir = g_strdup(fileopen.remotedir); else AllFiles[i]->remotedir =g_strdup(""); if(fileopen.command) AllFiles[i]->command = g_strdup(fileopen.command); else AllFiles[i]->command =g_strdup(""); return i; } return -1; } /********************************************************************************/ static void AddFeuille(GtkTreeView *treeView, GtkTreeIter *parent,DataTree *pfd) { GtkTreeIter feuille; gchar *text; GtkTreeModel *model; GtkTreeStore *store; model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); store = GTK_TREE_STORE (model); text = g_strdup(pfd->projectname); gtk_tree_store_append(store, &feuille, parent); gtk_tree_store_set (store, &feuille, LIST_PIXBUF, pagePixbuf, -1); gtk_tree_store_set (store, &feuille, LIST_NAME, text, -1); pfd->noeud = &feuille; gtk_tree_store_set (store, &feuille, LIST_DATA, pfd, -1); g_free(text); } /********************************************************************************/ void CreeFeuille(GtkWidget *treeView, GtkTreeIter *parent,gchar* projectname,gchar*datafile,gchar* localdir, gchar* remotehost,gchar* remoteuser,gchar* remotepass,gchar* remotedir,gint itype, gchar* command, GabEditNetWork netWorkProtocol) { DataTree* pfd; int ifile = file_in_list(projectname,datafile,localdir,itype); if( itype<0 || itype>=NBNOD) return; if( ifile != -1 ) { if(AllFiles[ifile]->itype==iprogram) return; else parent=tree_clear(parent,ifile); } pfd = tree_data_new (projectname,datafile,localdir,remotehost,remoteuser,remotepass,remotedir,itype, command, netWorkProtocol); AddFeuille(GTK_TREE_VIEW(treeView),parent,pfd); if(Nfiles==0) AllFiles = g_malloc(sizeof(DataTree*)); else AllFiles = (DataTree**)g_realloc(AllFiles,(Nfiles+1)*sizeof(DataTree*)); Nfiles++; AllFiles[Nfiles-1] = pfd; } /********************************************************************************/ static void clear_one_project() { int ifile = -1; GtkTreeIter node; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeViewProjects)); DataTree* data = NULL; if(atoi(selectedRow)<0) return; if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); if(!data) return; if( data->itype<0 || data->itype>=NBNOD) return; ifile = file_in_list(data->projectname, data->datafile, data->localdir, data->itype); if( ifile != -1 ) { GtkTreeIter* parent; parent = noeud[data->itype]; parent = tree_clear(parent,ifile); } } /********************************************************************************/ static void to_clear_lists(GtkWidget *wid,gpointer data) { gint i; gint k = 0; for(i=0;iactive) k++; if(k == NBNOD) tree_clear_all(); else if(k != 0) for(i=0;iactive) tree_clear_one(i); } /********************************************************************************/ static void select_all_buttons(GtkWidget *wid,gpointer data) { gint i; for(i=0;ivbox), frame, TRUE, TRUE, 8); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vbox = gtk_vbox_new (TRUE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (frame), vbox); /* Select all and unselect all */ hbox = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0); ButtonUnSelAll = gtk_radio_button_new_with_label( NULL,_(" Unselect all") ); gtk_box_pack_end (GTK_BOX (hbox), ButtonUnSelAll, TRUE, TRUE, 0); gtk_widget_show (ButtonUnSelAll); ButtonSelAll = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonUnSelAll)), _("Select all ")); gtk_box_pack_start (GTK_BOX (hbox), ButtonSelAll, TRUE, TRUE, 0); gtk_widget_show (ButtonSelAll); create_hseparator(vbox); for(i=0;iaction_area), FALSE); /* The CANCEL button */ button = create_button(Dialogue,_("Cancel")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)destroy_button_windows,GTK_OBJECT(Dialogue)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Dialogue)); /* The OK button */ button = create_button(Dialogue,"OK"); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)to_clear_lists,NULL); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)destroy_button_windows,GTK_OBJECT(Dialogue)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Dialogue)); if(atoi(selectedRow)>-1) { gint i; GtkTreeIter node; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeViewProjects)); gtk_tree_model_get_iter_from_string (model, &node, selectedRow); GtkTreePath* path1 = gtk_tree_model_get_path(model, &node); GtkTreePath* path2; gboolean Ok = FALSE; for(i=0;iitype>= 0 && p->itypeitype]), TRUE); } } } add_button_windows(title,Dialogue); gtk_widget_show_all(Dialogue); } /********************************************************************************/ void ListeFiles(GtkWidget* vbox) { GtkWidget *Scr; GtkUIManager *manager = NULL; GtkTreeStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; set_pixbuf(); Scr = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (Scr), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(vbox), Scr); gtk_widget_set_size_request(Scr, (gint)(ScreenHeight*0.15), (gint)(ScreenHeight*0.1)); FrameList = vbox; store = gtk_tree_store_new (4, GDK_TYPE_PIXBUF, G_TYPE_STRING, GDK_TYPE_COLOR, G_TYPE_POINTER); model = GTK_TREE_MODEL (store); treeViewProjects = gtk_tree_view_new_with_model (model); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeViewProjects), TRUE); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeViewProjects), TRUE); column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("Recent Projects")); gtk_tree_view_column_set_reorderable(column, TRUE); renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_add_attribute (column, renderer, "pixbuf", LIST_PIXBUF); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_add_attribute (column, renderer, "text", LIST_NAME); gtk_tree_view_column_add_attribute (column, renderer, "foreground_gdk", LIST_NODE_FOREGROUND_COLOR); gtk_tree_view_append_column (GTK_TREE_VIEW (treeViewProjects), column); gtk_container_add(GTK_CONTAINER(Scr), treeViewProjects); noeud[GABEDIT_TYPENODE_DEMON]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"DeMon"); noeud[GABEDIT_TYPENODE_FIREFLY]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"FireFly"); noeud[GABEDIT_TYPENODE_GAMESS]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gamess"); noeud[GABEDIT_TYPENODE_GAUSSIAN]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gaussian"); noeud[GABEDIT_TYPENODE_MOLCAS]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Molcas"); noeud[GABEDIT_TYPENODE_MOLPRO]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Molpro"); noeud[GABEDIT_TYPENODE_MOPAC]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Mopac"); noeud[GABEDIT_TYPENODE_MPQC]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"MPQC"); noeud[GABEDIT_TYPENODE_NWCHEM]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"NWChem"); noeud[GABEDIT_TYPENODE_PSICODE]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Psicode"); noeud[GABEDIT_TYPENODE_ORCA]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"ORCA"); noeud[GABEDIT_TYPENODE_QCHEM]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Q-Chem"); noeud[GABEDIT_TYPENODE_GABEDIT]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gabedit"); noeud[GABEDIT_TYPENODE_XYZ]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"XYZ"); noeud[GABEDIT_TYPENODE_MOL2]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Mol2"); noeud[GABEDIT_TYPENODE_PDB]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"PDB"); noeud[GABEDIT_TYPENODE_TINKER]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Tinker"); noeud[GABEDIT_TYPENODE_GZMAT]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gauss zmat"); noeud[GABEDIT_TYPENODE_MZMAT]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Mopac zmat"); noeud[GABEDIT_TYPENODE_HIN]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Hyperchem"); noeud[GABEDIT_TYPENODE_OTHER]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Others"); add_liste_files(); manager = create_menu(Fenetre); g_signal_connect(treeViewProjects, "button_press_event", G_CALLBACK(event_dispatcher), manager); } /********************************************************************************/ GabeditSrc250/src/Files/GabeditFileChooser.h0000644000175100017510000000537713130665225021173 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation dir (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GABEDITFILECHOOSER_H__ #define __GABEDIT_GABEDITFILECHOOSER_H__ #define GABEDIT_TYPE_FILE_CHOOSER (gtk_file_chooser_get_type()) #define GABEDIT_FILE_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GABEDIT_TYPE_FILE_CHOOSER,GabeditFileChooser)) #define GABEDIT_FILE_CHOOSER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GABEDIT_TYPE_FILE_CHOOSER, GabeditFileChooser)) #define GABEDIT_IS_FILE_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GABEDIT_TYPE_FILE_CHOOSER)) #define GABEDIT_IS_FILE_CHOOSER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GABEDIT_TYPE_FILE_CHOOSER)) #define GABEDIT_FILE_CHOOSER_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GABEDIT_TYPE_FILE_CHOOSER, GabeditFileChooserClass)) typedef struct _GtkFileChooser GabeditFileChooser; typedef struct _GtkFileChooserClass GabeditFileChooserClass; GtkWidget* gabedit_file_chooser_new(gchar* title, GtkFileChooserAction action); void gabedit_file_chooser_set_current_file(GabeditFileChooser *fileChooser,const gchar *fileName); gchar* gabedit_file_chooser_get_current_file(GabeditFileChooser *fileChooser); void gabedit_file_chooser_set_filters(GabeditFileChooser *fileChooser, gchar **patterns); void gabedit_file_chooser_set_filter(GabeditFileChooser *fileChooser,const gchar *pattern); void gabedit_file_chooser_show_hidden(GabeditFileChooser *fileChooser); void gabedit_file_chooser_hide_hidden(GabeditFileChooser *fileChooser); #endif /* __GABEDIT_GABEDITFILECHOOSER_H__ */ GabeditSrc250/src/Files/ListeFiles.h0000644000175100017510000000345113130665225017543 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_LISTEFILES_H__ #define __GABEDIT_LISTEFILES_H__ void resetFontLabelErrOut(); void set_label_infos_file(); void parse_liste_files(); void ListeFiles(GtkWidget* vbox); void CreeFeuille(GtkWidget* treeView, GtkTreeIter *parent,gchar* projectname,gchar*datafile,gchar* localdir, gchar* remotehost,gchar* remoteuser,gchar* remotepass,gchar* remotedir,gint itype, gchar* command, GabEditNetWork netWorkProtocol); void cree_files_out_err_notebook(GtkWidget* box); #endif /* __GABEDIT_LISTEFILES_H__ */ GabeditSrc250/src/Files/Dep.mk0000644000175100017510000000323013130664665016372 0ustar allouchealloucheFileChooser.o: FileChooser.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Utils/Utils.h ../Common/Windows.h ../Common/Exit.h \ ../Display/UtilsOrb.h FolderChooser.o: FolderChooser.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Utils/Utils.h ../Common/Windows.h ../Common/Exit.h \ ../Display/UtilsOrb.h ../Files/GabeditFolderChooser.h ListeFiles.o: ListeFiles.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/Constants.h \ ../Utils/GabeditTextEdit.h ../Geometry/GeomGlobal.h \ ../Geometry/GeomXYZ.h ../Geometry/ResultsAnalise.h \ ../Geometry/EnergiesCurves.h ../Common/Windows.h \ ../Geometry/GeomZmatrix.h ../Common/Run.h ../Common/Status.h \ ../Molcas/MolcasVariables.h ../Molcas/MolcasGateWay.h \ ../../pixmaps/GamessMini.xpm ../../pixmaps/FireFlyMini.xpm \ ../../pixmaps/Gaussian.xpm ../../pixmaps/MolproMini.xpm \ ../../pixmaps/MolcasMini.xpm ../../pixmaps/MPQCMini.xpm \ ../../pixmaps/NWChemMini.xpm ../../pixmaps/PsicodeMini.xpm \ ../../pixmaps/OrcaMini.xpm ../../pixmaps/QChemMini.xpm \ ../../pixmaps/MopacMini.xpm ../../pixmaps/GabeditMini.xpm \ ../../pixmaps/Book_close.xpm ../../pixmaps/Page.xpm \ ../Common/StockIcons.h ../Files/ListeFiles.h GabeditFolderChooser.o: GabeditFolderChooser.c ../../Config.h \ GabeditFolderChooser.h GabeditFileChooser.o: GabeditFileChooser.c ../../Config.h \ GabeditFileChooser.h GabeditSrc250/src/Files/FolderChooser.c0000644000175100017510000000656113130665225020236 0ustar alloucheallouche/* FolderChooser.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Common/Windows.h" #include "../Common/Exit.h" #include "../Display/UtilsOrb.h" #include "../Files/GabeditFolderChooser.h" /************************************************************************************************************/ GtkWidget* selctionOfDir(gpointer data, gchar* title, GabEditTypeWin typewin) { GtkWidget *folderChooser; GCallback *func = (GCallback *)data; gchar* lastDir = get_last_directory(); if(title) folderChooser = gabedit_folder_chooser_new(title); else folderChooser = gabedit_folder_chooser_new(_("Select a folder")); if(lastDir) { gabedit_folder_chooser_set_current_folder( GABEDIT_FOLDER_CHOOSER(folderChooser),lastDir); } if(typewin==GABEDIT_TYPEWIN_ORB) { add_glarea_child(folderChooser,_("Dir selector")); } else { add_button_windows(_(" Dir selector "),folderChooser); g_signal_connect(G_OBJECT(folderChooser), "delete_event",(GCallback)destroy_button_windows,NULL); g_signal_connect(G_OBJECT(folderChooser), "delete_event",G_CALLBACK(gtk_widget_destroy),NULL); } g_signal_connect (folderChooser, "response", G_CALLBACK (func), NULL); if(typewin==GABEDIT_TYPEWIN_ORB) g_signal_connect_swapped (folderChooser, "response", G_CALLBACK (delete_child), GTK_OBJECT(folderChooser)); else g_signal_connect_swapped (folderChooser, "response", G_CALLBACK (destroy_button_windows), GTK_OBJECT(folderChooser)); g_signal_connect_swapped (folderChooser, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(folderChooser)); if(typewin==GABEDIT_TYPEWIN_ORB) g_signal_connect_swapped (folderChooser, "close", G_CALLBACK (delete_child), GTK_OBJECT(folderChooser)); else g_signal_connect_swapped (folderChooser, "close", G_CALLBACK (destroy_button_windows), GTK_OBJECT(folderChooser)); g_signal_connect_swapped (folderChooser, "close", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(folderChooser)); gtk_widget_show(folderChooser); return folderChooser; } GabeditSrc250/src/MolecularMechanics/0000755000175100017510000000000013130743374020022 5ustar allouchealloucheGabeditSrc250/src/MolecularMechanics/CreateDefaultPDBTpl.h0000644000175100017510000000024713130665225023712 0ustar alloucheallouche #ifndef __GABEDIT_CREATEDEFAULTPDBTPL_H__ #define __GABEDIT_CREATEDEFAULTPDBTPL_H__ gboolean CreateDefaultPDBTpl(); #endif /* __GABEDIT_CREATEDEFAULTPDBTPL_H__ */ GabeditSrc250/src/MolecularMechanics/Molecule.h0000644000175100017510000000362713130665225021746 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MOLECULE_H__ #define __GABEDIT_MOLECULE_H__ typedef struct _Molecule { gint nAtoms; AtomMol* atoms; gdouble energy; gdouble* gradient[3]; gint numberOf2Connections; gint* connected2[2]; gint numberOf3Connections; gint* connected3[3]; gint numberOf4Connections; gint* connected4[4]; gint numberOfNonBonded; gint* nonBonded[2]; }Molecule; Molecule newMolecule(); Molecule createMolecule(GeomDef* geom,gint natoms,gboolean connections); void freeMolecule(Molecule* molecule); void redrawMolecule(Molecule* molecule,gchar* str); Molecule copyMolecule(Molecule* m); #endif /* __GABEDIT_MOLECULE_H__ */ GabeditSrc250/src/MolecularMechanics/ConjugateGradient.h0000644000175100017510000000444613130665225023576 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_CONJUGATEGRADIENT_H__ #define __GABEDIT_CONJUGATEGRADIENT_H__ typedef struct _ConjugateGradient ConjugateGradient; typedef struct _ConjugateGradientOptions ConjugateGradientOptions; struct _ConjugateGradientOptions { gdouble gradientNorm; gint maxIterations; gint updateFrequency; gint maxLines; gdouble initialStep; gint method; }; struct _ConjugateGradient { ForceField* forceField; gint numberOfAtoms; gint updateFrequency; gint maxIterations; gint updateNumber; gint maxLine; gdouble epsilon; gdouble initialStep; gdouble rmsDeplacment; gdouble maxDeplacment; gdouble gradientNorm; gdouble lastInitialBracket; gdouble initialBracket; gdouble term; gdouble* lastGradient[3]; gdouble* direction[3]; Molecule* temporaryMolecule; }; void freeConjugateGradient(ConjugateGradient* conjugateGradient); void runConjugateGradient(ConjugateGradient* conjugateGradient, ForceField* forceField, ConjugateGradientOptions conjugateGradientOptions); #endif /* __GABEDIT_CONJUGATEGRADIENT_H__ */ GabeditSrc250/src/MolecularMechanics/PDBTemplate.h0000644000175100017510000000207113130665225022272 0ustar alloucheallouche #ifndef __GABEDIT_PDBTEMPLATE_H__ #define __GABEDIT_PDBTEMPLATE_H__ typedef struct _PDBTemplate PDBTemplate; typedef struct _PDBResidueTemplate PDBResidueTemplate; typedef struct _PDBTypeTemplate PDBTypeTemplate; /************************************/ struct _PDBTypeTemplate { gchar* pdbType; gchar* mmType; gdouble charge; }; /************************************/ struct _PDBResidueTemplate { gchar* residueName; gint numberOfTypes; PDBTypeTemplate* typeTemplates; }; /************************************/ struct _PDBTemplate { gint numberOfResidues; PDBResidueTemplate* residueTemplates; }; PDBTemplate* LoadPersonalPDBTpl(); PDBTemplate* LoadDefaultPDBTpl(); void LoadPDBTpl(); gchar* getMMTypeFromPDBTpl(gchar* residueName,gchar* pdbType,gdouble* charge); gint getHydrogensFromPDBTpl(gchar* residueName,gchar* pdbType, gchar** hAtoms); PDBTemplate* getPointerPDBTemplate(); void setPointerPDBTemplate(PDBTemplate* ptr); void savePersonalPDBTpl(GtkWidget* win); gchar** getListPDBTypes(gchar* residueName, gint* nlist); #endif /* __GABEDIT_PDBTEMPLATE_H__ */ GabeditSrc250/src/MolecularMechanics/SavePDBTemplate.h0000644000175100017510000000027713130665225023117 0ustar alloucheallouche #ifndef __GABEDIT_SAVEPDBTEMPLATE_H__ #define __GABEDIT_SAVEPDBTEMPLATE_H__ gboolean savePDBTemplate(PDBTemplate* pdbTemplate,gchar* filename); #endif /* __GABEDIT_SAVEPDBTEMPLATE_H__ */ GabeditSrc250/src/MolecularMechanics/Makefile0000644000175100017510000000130413130664665021465 0ustar allouchealloucheOBJECTS = Atom.o Molecule.o ForceField.o MolecularMechanics.o ConjugateGradient.o SteepestDescent.o QuasiNewton.o MolecularMechanicsDlg.o CreateMolecularMechanicsFile.o CreatePersonalMMFile.o LoadMMParameters.o SetMMParameters.o CreateDefaultPDBTpl.o LoadPDBTemplate.o PDBTemplate.o SetPDBTemplate.o SavePDBTemplate.o CalculTypesAmber.o MolecularDynamics.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/MolecularMechanics/MolecularMechanics.c0000644000175100017510000022176713130665225023741 0ustar alloucheallouche/* MolecularMechanics.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #ifdef ENABLE_OMP #include #endif #include "../Common/Global.h" #include "../Utils/AtomsProp.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "Atom.h" #include "Molecule.h" #include "ForceField.h" #include "MolecularMechanics.h" #include "LoadMMParameters.h" #include "CreatePersonalMMFile.h" #include "CreateMolecularMechanicsFile.h" static AmberParameters* staticAmberParameters = NULL; /* static void calculateGradientNumericAmber(ForceField* forceField);*/ static void calculateGradientAmber(ForceField* forceField); static void calculateEnergyAmber(ForceField* forceField); static gdouble calculateEnergyTmpAmber(ForceField* forceField,Molecule* m); /**********************************************************************/ AmberParameters newAmberParameters() { AmberParameters amberParameters; amberParameters.numberOfTypes = 0; amberParameters.atomTypes = NULL; amberParameters.numberOfStretchTerms = 0; amberParameters.bondStretchTerms = NULL; amberParameters.numberOfBendTerms = 0; amberParameters.angleBendTerms = NULL; amberParameters.numberOfDihedralTerms = 0; amberParameters.dihedralAngleTerms = NULL; amberParameters.numberOfImproperTorsionTerms = 0; amberParameters.improperTorsionTerms = NULL; amberParameters.numberOfNonBonded = 0; amberParameters.nonBondedTerms = NULL; amberParameters.numberOfHydrogenBonded = 0; amberParameters.hydrogenBondedTerms = NULL; amberParameters.numberOfPairWise = 0; amberParameters.pairWiseTerms = NULL; return amberParameters; } /**********************************************************************/ static void freeAmberParameters(AmberParameters* amberParameters) { gint i; for(i=0;inumberOfTypes;i++) if(amberParameters->atomTypes[i].name) g_free(amberParameters->atomTypes[i].name); for(i=0;inumberOfTypes;i++) if(amberParameters->atomTypes[i].name) g_free(amberParameters->atomTypes[i].description); amberParameters->numberOfTypes = 0; if(amberParameters->atomTypes ) g_free(amberParameters->atomTypes ); amberParameters->atomTypes = NULL; amberParameters->numberOfStretchTerms = 0; if(amberParameters->bondStretchTerms) g_free(amberParameters->bondStretchTerms); amberParameters->bondStretchTerms = NULL; amberParameters->numberOfBendTerms = 0; if(amberParameters->angleBendTerms) g_free(amberParameters->angleBendTerms); amberParameters->angleBendTerms = NULL; for(i=0;inumberOfDihedralTerms;i++) { if(amberParameters->dihedralAngleTerms[i].divisor) g_free(amberParameters->dihedralAngleTerms[i].divisor); if(amberParameters->dihedralAngleTerms[i].barrier) g_free(amberParameters->dihedralAngleTerms[i].barrier); if(amberParameters->dihedralAngleTerms[i].phase) g_free(amberParameters->dihedralAngleTerms[i].phase); if(amberParameters->dihedralAngleTerms[i].n) g_free(amberParameters->dihedralAngleTerms[i].n); } amberParameters->numberOfDihedralTerms = 0; if(amberParameters->dihedralAngleTerms) g_free(amberParameters->dihedralAngleTerms); amberParameters->dihedralAngleTerms = NULL; amberParameters->numberOfImproperTorsionTerms = 0; if(amberParameters->improperTorsionTerms) g_free(amberParameters->improperTorsionTerms); amberParameters->improperTorsionTerms = NULL; amberParameters->numberOfNonBonded = 0; if(amberParameters->nonBondedTerms) g_free(amberParameters->nonBondedTerms); amberParameters->nonBondedTerms = NULL; amberParameters->numberOfHydrogenBonded = 0; if(amberParameters->hydrogenBondedTerms) g_free(amberParameters->hydrogenBondedTerms); amberParameters->hydrogenBondedTerms = NULL; } /**********************************************************************/ static gint getNumberType(AmberParameters* amberParameters, gchar* type) { gint i; gint nTypes = amberParameters->numberOfTypes; AmberAtomTypes* types = amberParameters->atomTypes; gint len = strlen(type); if(strcmp(type,"X")==0) return -1; for(i=0;icalculateGradient = calculateGradientAmber; /*forceField.klass->calculateGradient = calculateGradientNumericAmber;*/ forceField.klass->calculateEnergy = calculateEnergyAmber; forceField.klass->calculateEnergyTmp = calculateEnergyTmpAmber; forceField.options.type = AMBER; forceField.options.coulomb = TRUE; forceField.options.hydrogenBonded = TRUE; forceField.options.improperTorsion = TRUE; return forceField; } /**********************************************************************/ static ForceField newPairWiseModel() { ForceField forceField = newForceField(); forceField.klass->calculateGradient = calculateGradientAmber; forceField.klass->calculateEnergy = calculateEnergyAmber; forceField.klass->calculateEnergyTmp = calculateEnergyTmpAmber; forceField.options.type = PAIRWISE; forceField.options.coulomb = TRUE; forceField.options.vanderWals = TRUE; forceField.options.bondStretch = FALSE; forceField.options.angleBend = FALSE; forceField.options.dihedralAngle = FALSE; forceField.options.improperTorsion = FALSE; forceField.options.nonBonded = FALSE; forceField.options.hydrogenBonded = FALSE; return forceField; } /**********************************************************************/ static gboolean isIonic(gchar* mmType) { if(!strcmp(mmType,"Li")) return TRUE; if(!strcmp(mmType,"Na")) return TRUE; if(!strcmp(mmType,"K")) return TRUE; if(!strcmp(mmType,"Rb")) return TRUE; if(!strcmp(mmType,"Cs")) return TRUE; if(!strcmp(mmType,"Ca")) return TRUE; if(!strcmp(mmType,"Sr")) return TRUE; if(!strcmp(mmType,"Ba")) return TRUE; if(!strcmp(mmType,"Zn")) return TRUE; if(!strcmp(mmType,"IB")) return TRUE; if(!strcmp(mmType,"Cl")) return TRUE; return FALSE; } /**********************************************************************/ static gboolean getStretchParameters( AmberParameters* amberParameters, gint a1Type, gint a2Type, gdouble* forceConstant,gdouble* equilibriumDistance) { gint i; forceConstant[0] = 0.0; equilibriumDistance[0] = 0.0; if(a1Type>a2Type) { gint t; t = a1Type; a1Type = a2Type; a2Type = t; } for(i=0;inumberOfStretchTerms;i++) { if( a1Type == amberParameters->bondStretchTerms[i].numbers[0] && a2Type == amberParameters->bondStretchTerms[i].numbers[1] ) { forceConstant[0] = amberParameters->bondStretchTerms[i].forceConstant; equilibriumDistance[0] = amberParameters->bondStretchTerms[i].equilibriumDistance; return TRUE; } } return FALSE; } /**********************************************************************/ static gboolean getBendParameters(AmberParameters* amberParameters,gint a1Type, gint a2Type, gint a3Type, gdouble* forceConstant, gdouble* equilibriumAngle) { gint i; forceConstant[0] = 0.0; equilibriumAngle[0] = 0.0; if(a1Type>a3Type) { gint t; t = a1Type; a1Type = a3Type; a3Type = t; } for(i=0;inumberOfBendTerms;i++) { if( a1Type == amberParameters->angleBendTerms[i].numbers[0] && a2Type == amberParameters->angleBendTerms[i].numbers[1] && a3Type == amberParameters->angleBendTerms[i].numbers[2] ) { forceConstant[0] = amberParameters->angleBendTerms[i].forceConstant; equilibriumAngle[0] = amberParameters->angleBendTerms[i].equilibriumAngle; return TRUE; } } return FALSE; } /**********************************************************************/ static gboolean getHydrogenBondedParameters(AmberParameters* amberParameters, gint a1Type, gint a2Type, gdouble c[], gdouble d[] ) { gint i; AmberAtomTypes* types = amberParameters->atomTypes; c[0] = 0.0; d[0] = 0.0; if(types[a2Type].name[0]=='H') { gint t = a1Type; a1Type = a2Type; a2Type = t; } for(i=0;inumberOfHydrogenBonded;i++) { if( a1Type == amberParameters->hydrogenBondedTerms[i].numbers[0] && a2Type == amberParameters->hydrogenBondedTerms[i].numbers[1] ) { c[0] = amberParameters->hydrogenBondedTerms[i].c; d[0] = amberParameters->hydrogenBondedTerms[i].d; return TRUE; } } return FALSE; } /**********************************************************************/ static gboolean getNonBondedParameters(AmberParameters* amberParameters, gint atomType, gdouble* r, gdouble* epsilon ) { gint i; r[0] = 1.0; epsilon[0] = 0.0; for(i=0;inumberOfNonBonded;i++) { if( atomType == amberParameters->nonBondedTerms[i].number ) { r[0] = amberParameters->nonBondedTerms[i].r; epsilon[0] = amberParameters->nonBondedTerms[i].epsilon; /*printf("r = %f eps = %f\n",r[0],epsilon[0]);*/ return TRUE; } } return FALSE; } /**********************************************************************/ static gboolean getPairWiseParameters(AmberParameters* amberParameters, gint a1Type, gint a2Type, gdouble* a, gdouble* beta, gdouble* c6, gdouble* c8, gdouble* c10, gdouble* b) { gint i; a[0] = 0.0; beta[0] = 1.0; c6[0] = 0.0; c8[0] = 0.0; c10[0] = 0.0; b[0] = 1.0; for(i=0;inumberOfPairWise;i++) { if( ( a1Type == amberParameters->pairWiseTerms[i].numbers[0] && a2Type == amberParameters->pairWiseTerms[i].numbers[1] ) || ( a1Type == amberParameters->pairWiseTerms[i].numbers[1] && a2Type == amberParameters->pairWiseTerms[i].numbers[0] ) ) { a[0] = amberParameters->pairWiseTerms[i].a; beta[0] = amberParameters->pairWiseTerms[i].beta; c6[0] = amberParameters->pairWiseTerms[i].c6; c8[0] = amberParameters->pairWiseTerms[i].c8; c10[0] = amberParameters->pairWiseTerms[i].c10; b[0] = amberParameters->pairWiseTerms[i].b; return TRUE; } } return FALSE; } /**********************************************************************/ static gboolean getImproperTorsionParameters( AmberParameters* amberParameters, gint a1Type, gint a2Type, gint a3Type, gint a4Type, gdouble* forceConstant, gdouble* equilibriumAngle, gdouble* terms ) { gint i; forceConstant[0] = 0.0; equilibriumAngle[0] = 0.0; terms[0] = 0.0; if(a1Type>a4Type) { gint t; t = a1Type; a1Type = a4Type; a4Type = t; t = a2Type; a2Type = a3Type; a3Type = t; } for(i=0;inumberOfImproperTorsionTerms;i++) { if( a1Type == amberParameters->improperTorsionTerms[i].numbers[0] && a2Type == amberParameters->improperTorsionTerms[i].numbers[1] && a3Type == amberParameters->improperTorsionTerms[i].numbers[2] && a4Type == amberParameters->improperTorsionTerms[i].numbers[3] ) { forceConstant[0] = amberParameters->improperTorsionTerms[i].barrier; equilibriumAngle[0] = amberParameters->improperTorsionTerms[i].phase; terms[0] = amberParameters->improperTorsionTerms[i].n; return TRUE; } } return FALSE; } /**********************************************************************/ static gint getNumberDihedralParameters( AmberParameters* amberParameters, gint a1Type, gint a2Type, gint a3Type, gint a4Type, gint *n) { gint i; gint a1Typet; gint a2Typet; gint a3Typet; gint a4Typet; gboolean btype; gboolean Ok; gint types[4]; gint k; *n = 0; a1Typet = a4Type; a2Typet = a3Type; a3Typet = a2Type; a4Typet = a1Type; /* Je cherche d'abord sans les -1 */ for(i=0;inumberOfDihedralTerms;i++) { types[0] = a1Type; types[1] = a2Type; types[2] = a3Type; types[3] = a4Type; Ok = TRUE; for(k=0;k<4;k++) { btype = (types[k] == amberParameters->dihedralAngleTerms[i].numbers[k]); if(!btype) { Ok = FALSE; break; } } if(!Ok) { types[0] = a1Typet; types[1] = a2Typet; types[2] = a3Typet; types[3] = a4Typet; Ok = TRUE; for(k=0;k<4;k++) { btype = (types[k] == amberParameters->dihedralAngleTerms[i].numbers[k]); if(!btype) { Ok = FALSE; break; } } } if(Ok) { *n =i; return amberParameters->dihedralAngleTerms[i].nSomme; } } /* Je cherche d'abord avec les -1 */ for(i=0;inumberOfDihedralTerms;i++) { types[0] = a1Type; types[1] = a2Type; types[2] = a3Type; types[3] = a4Type; Ok = TRUE; for(k=0;k<4;k++) { btype = (amberParameters->dihedralAngleTerms[i].numbers[k] == -1) || (types[k] == amberParameters->dihedralAngleTerms[i].numbers[k]); if(!btype) { Ok = FALSE; break; } } if(!Ok) { types[0] = a1Typet; types[1] = a2Typet; types[2] = a3Typet; types[3] = a4Typet; Ok = TRUE; for(k=0;k<4;k++) { btype = (amberParameters->dihedralAngleTerms[i].numbers[k] == -1) || (types[k] == amberParameters->dihedralAngleTerms[i].numbers[k]); if(!btype) { Ok = FALSE; break; } } } if(Ok) { *n =i; return amberParameters->dihedralAngleTerms[i].nSomme; } } return 0; } /**********************************************************************/ static gboolean canHydrogenBond(AmberParameters* amberParameters, gint a1Type, gint a2Type ) { AmberAtomTypes* types = amberParameters->atomTypes; if( a1Type>-1 && a2Type>-1) if( types[a1Type].name[0] == 'H' || types[a2Type].name[0] == 'H' ) return TRUE; return FALSE; } /**********************************************************************/ static void setRattleConstraintsParameters(ForceField* forceField) { gint i; gint j; gint k; gint a1,a2,a3; gdouble r2; gdouble d; Molecule* m = &forceField->molecule; gint numberOfRattleConstraintsTerms = 0; gdouble* rattleConstraintsTerms[RATTLEDIM]; forceField->numberOfRattleConstraintsTerms = 0; for( i=0; irattleConstraintsTerms[i] = NULL; if(m->nAtoms<1) return; if(forceField->options.rattleConstraints==NOCONSTRAINTS) return; numberOfRattleConstraintsTerms = m->numberOf2Connections; if(forceField->options.rattleConstraints==BONDSANGLESCONSTRAINTS) numberOfRattleConstraintsTerms += m->numberOf3Connections; if(numberOfRattleConstraintsTerms<1) return; for( i=0; inumberOf2Connections; i++) { while( gtk_events_pending() ) gtk_main_iteration(); if(StopCalcul) break; a1 = m->connected2[0][i]; a2 = m->connected2[1][i]; if(!m->atoms[a1].variable &&!m->atoms[a2].variable) continue; r2 = 0; for (k=0;k<3;k++) { d = m->atoms[a1].coordinates[k]-m->atoms[a2].coordinates[k]; r2 +=d*d; } rattleConstraintsTerms[0][j] = a1; rattleConstraintsTerms[1][j] = a2; rattleConstraintsTerms[2][j] = r2; j++; } if(forceField->options.rattleConstraints==BONDSANGLESCONSTRAINTS) { gint a1p, a2p; gint* nConnections = NULL; gint* nAngles = NULL; nConnections = g_malloc(m->nAtoms*sizeof(gint)); nAngles = g_malloc(m->nAtoms*sizeof(gint)); for ( i = 0; i < m->nAtoms; i++) { nConnections[i] = 0; nAngles[i] = 0; } for ( i = 0; i < m->nAtoms; i++) if(m->atoms[i].typeConnections) { for ( k = 0; k < m->nAtoms; k++) if(i!=k && m->atoms[i].typeConnections[m->atoms[k].N-1]>0) nConnections[i]++; /* printf("%d %s nCon=%d\n",i,m->atoms[i].mmType,nConnections[i]);*/ } for ( i = 0; i < m->numberOf3Connections; i++) { while( gtk_events_pending() ) gtk_main_iteration(); if(StopCalcul) break; a1 = m->connected3[0][i]; a2 = m->connected3[1][i]; a3 = m->connected3[2][i]; if(!m->atoms[a1].variable &&!m->atoms[a3].variable) continue; if(nAngles[a2]>=2*nConnections[a2]-3) continue; for (k=0;katoms[a1].coordinates[k]-m->atoms[a3].coordinates[k]; r2 +=d*d; } rattleConstraintsTerms[0][j] = a1; rattleConstraintsTerms[1][j] = a3; rattleConstraintsTerms[2][j] = r2; j++; } /* for ( i = 0; i < m->nAtoms; i++) { printf("%d %s nAngle = %d 2*nCon-3=%d\n",i,m->atoms[i].mmType,nAngles[i],2*nConnections[i]-3); } */ if(nConnections) g_free(nConnections); if(nAngles) g_free(nAngles); } if(j<1) { numberOfRattleConstraintsTerms=0; for( i=0; inumberOfRattleConstraintsTerms = numberOfRattleConstraintsTerms; for( i=0; irattleConstraintsTerms[i] = rattleConstraintsTerms[i]; printf(_("number Of RattleConstraintsTerms = %d\n"), forceField->numberOfRattleConstraintsTerms); printf(_("number free degrees = %d\n"), 3*m->nAtoms-6-forceField->numberOfRattleConstraintsTerms); /* for ( i = 0; i < forceField->numberOfRattleConstraintsTerms; i++) { a1 = (gint)rattleConstraintsTerms[0][i]; a2 = (gint)rattleConstraintsTerms[1][i]; r2 = rattleConstraintsTerms[2][i]; printf("%d %d %s %s r2= %f\n", a1,a2, m->atoms[a1].mmType, m->atoms[a2].mmType, r2); } */ } /**********************************************************************/ static void setStretchParameters(AmberParameters* amberParameters,ForceField* forceField,gint* atomTypes) { gint i; gint a1,a2; gint a1Type, a2Type; gdouble forceConstant, equilibriumDistance; Molecule* m = &forceField->molecule; gint numberOfStretchTerms = 0; gdouble* bondStretchTerms[STRETCHDIM]; numberOfStretchTerms = m->numberOf2Connections; for( i=0; iconnected2[0][i]; a2 = m->connected2[1][i]; a1Type = atomTypes[a1]; a2Type = atomTypes[a2]; if ( ! ( getStretchParameters(amberParameters, a1Type, a2Type,&forceConstant,&equilibriumDistance ) ) ) { gchar l1 = m->atoms[a1].mmType[0]; gchar l2 = m->atoms[a2].mmType[0]; printf( _("**** couldn't find stretch parameters for %s-%s(%d-%d) "), m->atoms[a1].mmType,m->atoms[a2].mmType,a1Type, a2Type); forceConstant = 310; equilibriumDistance = 1.525; if(l1==l2) { forceConstant = 415; equilibriumDistance = 1.5; } else if((l1=='C' && l2=='H' ) || (l1=='H' && l2=='C' )) { forceConstant = 340; equilibriumDistance = 1.09; } else if((l1=='C' && l2=='O' ) || (l1=='O' && l2=='C' )) { forceConstant = 570; equilibriumDistance = 1.229; } else if((l1=='C' && l2=='N' ) || (l1=='N' && l2=='C' )) { forceConstant = 490; equilibriumDistance = 1.335; } if(isIonic( m->atoms[a1].mmType) || isIonic( m->atoms[a2].mmType)) { forceConstant = 0; } printf( _("-> I set force to %f and equilibrium distance to %f\n"), forceConstant,equilibriumDistance); } bondStretchTerms[0][i] = a1; bondStretchTerms[1][i] = a2; bondStretchTerms[2][i] = forceConstant; bondStretchTerms[3][i] = equilibriumDistance; } forceField->numberOfStretchTerms = numberOfStretchTerms; for( i=0; ibondStretchTerms[i] = bondStretchTerms[i]; } /**********************************************************************/ static void setBendParameters(AmberParameters* amberParameters,ForceField* forceField,gint* atomTypes) { gint i; gint a1,a2,a3; gint a1Type, a2Type, a3Type; Molecule* m = &forceField->molecule; gint numberOfBendTerms = 0; gdouble* angleBendTerms[BENDDIM]; gdouble forceConstant, equilibriumAngle; numberOfBendTerms = m->numberOf3Connections; for( i=0; iconnected3[0][i]; a2 = m->connected3[1][i]; a3 = m->connected3[2][i]; a1Type = atomTypes[a1]; a2Type = atomTypes[a2]; a3Type = atomTypes[a3]; if ( ! ( getBendParameters(amberParameters, a1Type, a2Type, a3Type,&forceConstant,&equilibriumAngle ) ) ) { gchar l1 = m->atoms[a1].mmType[0]; gchar l2 = m->atoms[a2].mmType[0]; gchar l3 = m->atoms[a3].mmType[0]; printf(_("**** couldn't find bend parameters for %s-%s-%s "), m->atoms[a1].mmType,m->atoms[a2].mmType,m->atoms[a3].mmType); forceConstant = 60.0; equilibriumAngle = 115.0; if(!strcmp(m->atoms[a2].mmType,"CT")) { forceConstant = 50.0; equilibriumAngle = 109.0; } else if(l1=='H' || l2=='H' || l3=='H') { forceConstant = 50.0; equilibriumAngle = 120.0; } if(isIonic( m->atoms[a1].mmType) || isIonic( m->atoms[a2].mmType) || isIonic( m->atoms[a3].mmType)) { forceConstant = 0; } printf(_("-> I set force to %f and equilibrium angle to %f\n"), forceConstant, equilibriumAngle); } angleBendTerms[0][i] = a1; angleBendTerms[1][i] = a2; angleBendTerms[2][i] = a3; angleBendTerms[3][i] = forceConstant; angleBendTerms[4][i] = equilibriumAngle; } forceField-> numberOfBendTerms = numberOfBendTerms; for( i=0; iangleBendTerms[i] = angleBendTerms[i]; } /**********************************************************************/ static void setDihedralParameters(AmberParameters* amberParameters,ForceField* forceField,gint* atomTypes) { gint i; gint j; gint k; gint l; gint a1,a2,a3,a4; gint a1Type, a2Type, a3Type,a4Type; Molecule* m = &forceField->molecule; gdouble* dihedralAngleTerms[DIHEDRALDIM]; gint numberOfDihedralTerms = 0; gint dim; /* 8 terms 1=a1, 2=a2, 3=a3, 4=a4, 5=Idiv, 6=Pk, 7=Phase, 8=Pn */ /* DIHEDRALDIM 8 */ for( i=0; inumberOf4Connections*sizeof(gdouble)); numberOfDihedralTerms = 0; for ( i = 0; i < m->numberOf4Connections; i++ ) { while( gtk_events_pending() ) gtk_main_iteration(); if(StopCalcul) break; a1 = m->connected4[0][i]; a2 = m->connected4[1][i]; a3 = m->connected4[2][i]; a4 = m->connected4[3][i]; a1Type = atomTypes[a1]; a2Type = atomTypes[a2]; a3Type = atomTypes[a3]; a4Type = atomTypes[a4]; dim = getNumberDihedralParameters(amberParameters, a1Type, a2Type, a3Type, a4Type,&k); if(dim>0) { for(j=0;jdihedralAngleTerms[k].divisor[j]; dihedralAngleTerms[5][numberOfDihedralTerms] = amberParameters->dihedralAngleTerms[k].barrier[j]; dihedralAngleTerms[6][numberOfDihedralTerms] = amberParameters->dihedralAngleTerms[k].phase[j]; dihedralAngleTerms[7][numberOfDihedralTerms] = amberParameters->dihedralAngleTerms[k].n[j]; numberOfDihedralTerms++; if(numberOfDihedralTerms>4*m->numberOf4Connections) { for( l=0; l numberOfDihedralTerms = numberOfDihedralTerms; for( i=0; idihedralAngleTerms[i] = dihedralAngleTerms[i]; } /**********************************************************************/ static void setImproperTorionParameters(AmberParameters* amberParameters, ForceField* forceField,gint* atomTypes) { gint i; gint a1,a2,a3,a4; gint a1Type, a2Type, a3Type,a4Type; Molecule* m = &forceField->molecule; gdouble forceConstant, equilibriumAngle, terms; gint numberOfImproperTorsionTerms = 0; gdouble* improperTorsionTerms[IMPROPERDIHEDRALDIM]; /* 8 terms 1=a1, 2=a2, 3=a3, 4=a4, 5=Idiv, 6=Pk, 7=Phase, 8=Pn */ /* IMPROPERDIHEDRALDIM 8 */ numberOfImproperTorsionTerms = m->numberOf4Connections; for( i=0; inumberOf4Connections*sizeof(gdouble)); for ( i = 0; i < numberOfImproperTorsionTerms; i++ ) { while( gtk_events_pending() ) gtk_main_iteration(); if(StopCalcul) break; a1 = m->connected4[0][i]; a2 = m->connected4[1][i]; a3 = m->connected4[2][i]; a4 = m->connected4[3][i]; a1Type = atomTypes[a1]; a2Type = atomTypes[a2]; a3Type = atomTypes[a3]; a4Type = atomTypes[a4]; getImproperTorsionParameters(amberParameters, a1Type, a2Type, a3Type,a4Type, &forceConstant, &equilibriumAngle, &terms ); improperTorsionTerms[0][i] = a1; improperTorsionTerms[1][i] = a2; improperTorsionTerms[2][i] = a3; improperTorsionTerms[3][i] = a4; improperTorsionTerms[4][i] = forceConstant; improperTorsionTerms[5][i] = equilibriumAngle; improperTorsionTerms[6][i] = terms; } forceField-> numberOfImproperTorsionTerms = numberOfImproperTorsionTerms; for( i=0; iimproperTorsionTerms[i] = improperTorsionTerms[i]; } /**********************************************************************/ static void setHydrogenBondedParameters(AmberParameters* amberParameters,ForceField* forceField,gint* atomTypes) { gint numberOfHydrogenBonded = 0; gint i; gint a1,a2; gint a1Type,a2Type; Molecule* m = &forceField->molecule; gdouble C, D; gdouble* hydrogenBondedTerms[HYDROGENBONDEDDIM]; for( i=0; inumberOfNonBonded*sizeof(gdouble)); for ( i = 0; i < m->numberOfNonBonded; i++ ) { while( gtk_events_pending() ) gtk_main_iteration(); if(StopCalcul) break; a1 = m->nonBonded[0][i]; a2 = m->nonBonded[1][i]; a1Type = atomTypes[a1]; a2Type = atomTypes[a2]; /* printf("a1 = %d a2 = %d %s %s\n",a1,a2, amberParameters->atomTypes[a1Type].name, amberParameters->atomTypes[a2Type].name);*/ if ( canHydrogenBond( amberParameters, a1Type, a2Type ) ) { getHydrogenBondedParameters(amberParameters, a1Type, a2Type, &C, &D ); hydrogenBondedTerms[0][numberOfHydrogenBonded] = a1; hydrogenBondedTerms[1][numberOfHydrogenBonded] = a2; hydrogenBondedTerms[2][numberOfHydrogenBonded] = C; hydrogenBondedTerms[3][numberOfHydrogenBonded] = D; numberOfHydrogenBonded++; } } if(numberOfHydrogenBonded==0) for( i=0; i numberOfHydrogenBonded = numberOfHydrogenBonded; for( i=0; ihydrogenBondedTerms[i] = hydrogenBondedTerms[i]; } /**********************************************************************/ static void setNonBondedParameters(AmberParameters* amberParameters, ForceField* forceField,gint* atomTypes) { gint numberOfNonBonded = 0; gint i; gint a1,a2,a4; gint a1Type,a2Type,a4Type; Molecule* m = &forceField->molecule; gdouble equilibriumDistance, epsilon; gdouble epsilonProduct; gdouble ri, rj; gdouble Aij, Bij; gdouble* nonBondedTerms[NONBONDEDDIM]; gboolean useHydrogenBonded = forceField->options.hydrogenBonded; /* 5 terms 1=a1, 2=a2, 3=Aij, 4=Bij, 5=Coulomb Factor */ /* NONBONDEDDIM 5 */ for( i=0; inumberOfNonBonded+m->numberOf4Connections)*sizeof(gdouble)); for ( i = 0; i < m->numberOfNonBonded; i++ ) { while( gtk_events_pending() ) gtk_main_iteration(); if(StopCalcul) break; a1 = m->nonBonded[0][i]; a2 = m->nonBonded[1][i]; /* if(a1==a2) { printf("Erreur non bonded\n"); break; } */ a1Type = atomTypes[a1]; a2Type = atomTypes[a2]; if ( !useHydrogenBonded || !canHydrogenBond(amberParameters, a1Type, a2Type ) ) { if ( ! ( getNonBondedParameters(amberParameters, a1Type, &equilibriumDistance, &epsilon ) ) ) printf(_("**** couldn't find non bonded parameters for %s \n"),m->atoms[a1].mmType); epsilonProduct = sqrt(fabs(epsilon)); ri = equilibriumDistance; /*printf("r1 = %f eps1 = %f\n",equilibriumDistance,epsilon);*/ getNonBondedParameters(amberParameters, a2Type, &equilibriumDistance, &epsilon ); /*printf("r2 = %f eps2 = %f\n",equilibriumDistance,epsilon);*/ epsilonProduct *= sqrt(fabs(epsilon)); rj = equilibriumDistance; Bij = ( ri + rj ) * ( ri + rj ); Bij = Bij * Bij * Bij; Aij = Bij * Bij * epsilonProduct; Bij *= epsilonProduct * 2.0; nonBondedTerms[0][numberOfNonBonded] = a1; nonBondedTerms[1][numberOfNonBonded] = a2; nonBondedTerms[2][numberOfNonBonded] = Aij; nonBondedTerms[3][numberOfNonBonded] = Bij; nonBondedTerms[4][numberOfNonBonded] = 1.0; numberOfNonBonded++; } } /* now 1/2 non bonded */ for ( i = 0; i < m->numberOf4Connections; i++ ) { while( gtk_events_pending() ) gtk_main_iteration(); if(StopCalcul) break; a1 = m->connected4[0][i]; a4 = m->connected4[3][i]; /* if(a1==a4) { printf("Erreur a1=a4\n"); break; } */ a1Type = atomTypes[a1]; a4Type = atomTypes[a4]; epsilonProduct = 0; ri = 0; rj = 0; if ( getNonBondedParameters(amberParameters, a1Type, &equilibriumDistance, &epsilon ) ) { epsilonProduct = sqrt(fabs(epsilon)); ri = equilibriumDistance; /*printf("r1 = %f eps1 = %f\n",equilibriumDistance,epsilon);*/ } else { epsilonProduct = 0; } if ( getNonBondedParameters( amberParameters, a4Type, &equilibriumDistance, &epsilon ) ) { epsilonProduct *= sqrt(fabs(epsilon)); rj = equilibriumDistance; /*printf("r2 = %f eps2 = %f\n",equilibriumDistance,epsilon);*/ } else { epsilonProduct = 0; } Bij = ( ri + rj ) * ( ri + rj ); Bij = Bij * Bij * Bij; Aij = Bij * Bij * epsilonProduct / 2.0; Bij *= epsilonProduct; /* Aij = 0; Bij = 0; */ nonBondedTerms[0][numberOfNonBonded] = a1; nonBondedTerms[1][numberOfNonBonded] = a4; nonBondedTerms[2][numberOfNonBonded] = Aij; nonBondedTerms[3][numberOfNonBonded] = Bij; nonBondedTerms[4][numberOfNonBonded] = 1.0/(gdouble)1.2; numberOfNonBonded++; } if(numberOfNonBonded==0) for( i=0; i numberOfNonBonded = numberOfNonBonded; for( i=0; inonBondedTerms[i] = nonBondedTerms[i]; } /**********************************************************************/ static void setPairWiseParameters(AmberParameters* amberParameters, ForceField* forceField,gint* atomTypes) { gint numberOfPairWise = 0; gint i; gint j; gint a1,a2; gint a1Type,a2Type; Molecule* m = &forceField->molecule; gdouble a, beta, c6, c8, c10, b; gdouble* pairWiseTerms[PAIRWISEDIM]; numberOfPairWise = m->nAtoms*(m->nAtoms-1)/2; /* PAIRWISEDIM 8 */ for( i=0; inAtoms; i++ ) for ( j = i+1; j < m->nAtoms; j++ ) { while( gtk_events_pending() ) gtk_main_iteration(); if(StopCalcul) break; a1 = i; a2 = j; a1Type = atomTypes[a1]; a2Type = atomTypes[a2]; if ( ! ( getPairWiseParameters(amberParameters, a1Type,a2Type,&a, &beta,&c6,&c8, &c10,&b) ) ) printf( _("**** couldn't find pair wise parameters for %s-%s\n"), m->atoms[a1].mmType, m->atoms[a2].mmType); pairWiseTerms[0][numberOfPairWise] = a1; pairWiseTerms[1][numberOfPairWise] = a2; pairWiseTerms[2][numberOfPairWise] = a; pairWiseTerms[3][numberOfPairWise] = beta; pairWiseTerms[4][numberOfPairWise] = c6; pairWiseTerms[5][numberOfPairWise] = c8; pairWiseTerms[6][numberOfPairWise] = c10; pairWiseTerms[7][numberOfPairWise] = b; numberOfPairWise++; } if(numberOfPairWise==0) for( i=0; i numberOfPairWise = numberOfPairWise; for( i=0; ipairWiseTerms[i] = pairWiseTerms[i]; } /**********************************************************************/ static void setAtomTypes(AmberParameters* amberParameters,ForceField* forceField,gint* atomTypes) { Molecule* m = &forceField->molecule; gint nAtoms = m->nAtoms; gint i; for(i=0;imolecule; gint* atomTypes = g_malloc(m->nAtoms*sizeof(gint)); AmberParameters amberParameters; if(staticAmberParameters && staticAmberParameters->numberOfTypes >0 ) amberParameters = *staticAmberParameters; else { gchar* persoFileName = g_strdup_printf("%s%sPersonalMM.prm",gabedit_directory(), G_DIR_SEPARATOR_S); gchar* defaultFileName = g_strdup_printf("%s%sMolecularMechanics.prm",gabedit_directory(), G_DIR_SEPARATOR_S); amberParameters = newAmberParameters(); if(!readAmberParameters(&amberParameters,persoFileName)) if(!readAmberParameters(&amberParameters,persoFileName)) { g_free(persoFileName); g_free(defaultFileName); return; } staticAmberParameters = g_malloc(sizeof(AmberParameters)); *staticAmberParameters = amberParameters; g_free(persoFileName); g_free(defaultFileName); } setAtomTypes(&amberParameters,forceField,atomTypes); while( gtk_events_pending() ) gtk_main_iteration(); if(StopCalcul) { return; } while( gtk_events_pending() ) gtk_main_iteration(); if(forceField->options.bondStretch) setStretchParameters(&amberParameters,forceField,atomTypes); if(StopCalcul) return; while( gtk_events_pending() ) gtk_main_iteration(); if(forceField->options.angleBend) setBendParameters(&amberParameters,forceField,atomTypes); if(StopCalcul) return; while( gtk_events_pending() ) gtk_main_iteration(); if(forceField->options.dihedralAngle) setDihedralParameters(&amberParameters, forceField,atomTypes); if(StopCalcul) return; while( gtk_events_pending() ) gtk_main_iteration(); if(forceField->options.improperTorsion) setImproperTorionParameters(&amberParameters,forceField,atomTypes); if(StopCalcul) return; while( gtk_events_pending() ) gtk_main_iteration(); if(forceField->options.hydrogenBonded) setHydrogenBondedParameters(&amberParameters,forceField,atomTypes); if(StopCalcul) return; while( gtk_events_pending() ) gtk_main_iteration(); if(forceField->options.nonBonded) setNonBondedParameters(&amberParameters,forceField,atomTypes); if(StopCalcul) return; while( gtk_events_pending() ) gtk_main_iteration(); if(forceField->options.rattleConstraints!=NOCONSTRAINTS) setRattleConstraintsParameters(forceField); if(StopCalcul) return; while( gtk_events_pending() ) gtk_main_iteration(); /* freeAmberParameters(&amberParameters); */ } /**********************************************************************/ static void setAllPairWiseParameters(ForceField* forceField) { Molecule* m = &forceField->molecule; gint* atomTypes = g_malloc(m->nAtoms*sizeof(gint)); AmberParameters amberParameters; if(staticAmberParameters && staticAmberParameters->numberOfTypes >0 ) amberParameters = *staticAmberParameters; else { gchar* persoFileName = g_strdup_printf("%s%sPersonalMM.prm",gabedit_directory(), G_DIR_SEPARATOR_S); gchar* defaultFileName = g_strdup_printf("%s%sMolecularMechanics.prm",gabedit_directory(), G_DIR_SEPARATOR_S); amberParameters = newAmberParameters(); if(!readAmberParameters(&amberParameters,persoFileName)) if(!readAmberParameters(&amberParameters,persoFileName)) { g_free(persoFileName); g_free(defaultFileName); return; } staticAmberParameters = g_malloc(sizeof(AmberParameters)); *staticAmberParameters = amberParameters; g_free(persoFileName); g_free(defaultFileName); } setAtomTypes(&amberParameters,forceField,atomTypes); while( gtk_events_pending() ) gtk_main_iteration(); if(StopCalcul) { return; } while( gtk_events_pending() ) gtk_main_iteration(); setPairWiseParameters(&amberParameters,forceField,atomTypes); if(StopCalcul) return; while( gtk_events_pending() ) gtk_main_iteration(); if(forceField->options.rattleConstraints!=NOCONSTRAINTS) setRattleConstraintsParameters(forceField); if(StopCalcul) return; while( gtk_events_pending() ) gtk_main_iteration(); /* freeAmberParameters(&amberParameters); */ } /**********************************************************************/ static void calculateGradientBondAmber(ForceField* forceField) { gint i; gint ai, aj; AtomMol atomi,atomj; gdouble rijx, rijy, rijz, forceConstant, equilibriumDistance, term; gdouble forceix, forceiy, forceiz; gdouble bondLength; Molecule* m = &forceField->molecule; gdouble* bondStretchTerms[STRETCHDIM]; gint numberOfStretchTerms = forceField->numberOfStretchTerms; for( i=0; ibondStretchTerms[i]; #ifdef ENABLE_OMP #pragma omp parallel for private(i,ai,aj,forceConstant, equilibriumDistance,atomi,atomj,rijx,rijy,rijz,bondLength,term,forceix,forceiy,forceiz) #endif for ( i = 0; i < numberOfStretchTerms; i++ ) { ai = (gint)bondStretchTerms[0][i]; aj = (gint)bondStretchTerms[1][i]; forceConstant = bondStretchTerms[2][i]; equilibriumDistance = bondStretchTerms[3][i]; atomi = m->atoms[ai]; atomj = m->atoms[aj]; rijx = atomi.coordinates[0] - atomj.coordinates[0]; rijy = atomi.coordinates[1] - atomj.coordinates[1]; rijz = atomi.coordinates[2] - atomj.coordinates[2]; bondLength = sqrt( rijx * rijx + rijy * rijy + rijz * rijz ); if ( bondLength < 1.0e-10 ) bondLength = 1.0e-10; term = - 2*forceConstant * ( bondLength - equilibriumDistance ) / bondLength; forceix = term * rijx; forceiy = term * rijy; forceiz = term * rijz; #ifdef ENABLE_OMP #pragma omp critical #endif { m->gradient[0][ai] -= forceix; m->gradient[1][ai] -= forceiy; m->gradient[2][ai] -= forceiz; m->gradient[0][aj] += forceix; m->gradient[1][aj] += forceiy; m->gradient[2][aj] += forceiz; } } } /**********************************************************************/ static void calculateGradientBendAmber(ForceField* forceField) { gint i; Molecule* m = &forceField->molecule; gdouble* angleBendTerms[BENDDIM]; static gdouble D2R = 1.0/57.29577951308232090712; gint numberOfBendTerms = forceField->numberOfBendTerms; for( i=0; iangleBendTerms[i]; #ifdef ENABLE_OMP #pragma omp parallel for private(i) #endif for ( i = 0; i < numberOfBendTerms; i++ ) { gint ai, aj, ak; AtomMol atomi,atomj,atomk; gdouble term; gdouble thetaDeg, thetaRad, cosTheta; gdouble denominator, absTheta; gdouble delta = 1e-10; gdouble rijx, rijy, rijz; gdouble rkjx, rkjy, rkjz; gdouble rij2, rij, rkj2, rkj,rij3, rkj3; gdouble denominatori, denominatork; gdouble forceix, forceiy, forceiz; gdouble forcejx, forcejy, forcejz; gdouble forcekx, forceky, forcekz; gdouble rijDotrkj; gdouble term2ix, term2iy, term2iz; gdouble term2jx, term2jy, term2jz; gdouble term2kx, term2ky, term2kz; ai = (gint)angleBendTerms[0][i]; aj = (gint)angleBendTerms[1][i]; ak = (gint)angleBendTerms[2][i]; atomi = m->atoms[ai]; atomj = m->atoms[aj]; atomk = m->atoms[ak]; thetaDeg = getAngle(&atomi, &atomj, &atomk); thetaRad = thetaDeg * D2R; absTheta = fabs( thetaDeg ); cosTheta = cos( thetaRad ); if ( ( absTheta > delta ) && ( absTheta < 180.0 - delta ) ) { /*denominator = sqrt( 1 - cosTheta * cosTheta );*/ denominator = sin(thetaRad); if ( denominator < 1.0e-10 ) { printf("cut denominator\n"); denominator = 1.0e-10; } term = 2*angleBendTerms[3][i] * (thetaDeg - angleBendTerms[4][i]) / denominator; term *= D2R; rijx = atomi.coordinates[0] - atomj.coordinates[0]; rijy = atomi.coordinates[1] - atomj.coordinates[1]; rijz = atomi.coordinates[2] - atomj.coordinates[2]; rkjx = atomk.coordinates[0] - atomj.coordinates[0]; rkjy = atomk.coordinates[1] - atomj.coordinates[1]; rkjz = atomk.coordinates[2] - atomj.coordinates[2]; rij2 = rijx * rijx + rijy * rijy + rijz * rijz; rij = sqrt( rij2 ); rkj2 = rkjx * rkjx + rkjy * rkjy + rkjz * rkjz; rkj = sqrt( rkj2 ); rijDotrkj = rijx * rkjx + rijy * rkjy + rijz * rkjz; rij3 = rij2 * rij; rkj3 = rkj2 * rkj; denominatori = rij3 * rkj; if ( denominatori < 1.0e-10 ) { printf("cut denominatori\n"); denominatori = 1.0e-10; } denominatork = rij * rkj3; if ( denominatork < 1.0e-10 ) { printf("cut denominatork\n"); denominatork = 1.0e-10; } term2ix = ( rij2 * rkjx - rijDotrkj * rijx ) / denominatori; term2iy = ( rij2 * rkjy - rijDotrkj * rijy ) / denominatori; term2iz = ( rij2 * rkjz - rijDotrkj * rijz ) / denominatori; term2kx = ( rkj2 * rijx - rijDotrkj * rkjx ) / denominatork; term2ky = ( rkj2 * rijy - rijDotrkj * rkjy ) / denominatork; term2kz = ( rkj2 * rijz - rijDotrkj * rkjz ) / denominatork; term2jx = - term2ix - term2kx; term2jy = - term2iy - term2ky; term2jz = - term2iz - term2kz; forceix = term * term2ix; forceiy = term * term2iy; forceiz = term * term2iz; forcejx = term * term2jx; forcejy = term * term2jy; forcejz = term * term2jz; forcekx = term * term2kx; forceky = term * term2ky; forcekz = term * term2kz; #ifdef ENABLE_OMP #pragma omp critical #endif { m->gradient[0][ai] -= forceix; m->gradient[1][ai] -= forceiy; m->gradient[2][ai] -= forceiz; m->gradient[0][aj] -= forcejx; m->gradient[1][aj] -= forcejy; m->gradient[2][aj] -= forcejz; m->gradient[0][ak] -= forcekx; m->gradient[1][ak] -= forceky; m->gradient[2][ak] -= forcekz; } } } } /**********************************************************************/ static void calculateGradientDihedralAmber(ForceField* forceField) { gint i; Molecule* m = &forceField->molecule; gdouble* dihedralAngleTerms[DIHEDRALDIM]; static gdouble D2R = 1.0/57.29577951308232090712; gint numberOfDihedralTerms = forceField->numberOfDihedralTerms; for(i=0;idihedralAngleTerms[i]; #ifdef ENABLE_OMP #pragma omp parallel for private(i) #endif for ( i = 0; i < numberOfDihedralTerms; i++ ) { gint ai, aj, ak, al; AtomMol atomi,atomj,atomk,atoml; gint j; gdouble rjix, rjiy, rjiz; gdouble rkjx, rkjy, rkjz; gdouble rkix, rkiy, rkiz; gdouble rljx, rljy, rljz; gdouble rlkx, rlky, rlkz; gdouble forceix, forceiy, forceiz; gdouble forcejx, forcejy, forcejz; gdouble forcekx, forceky, forcekz; gdouble forcelx, forcely, forcelz; gdouble rkj; gdouble xt, yt, zt; gdouble xu, yu, zu; gdouble xtu, ytu, ztu; gdouble rt2, ru2, rtru; gdouble cosine1, sine1, cosineN, sineN, cosold, sinold; gdouble cosPhase, sinPhase; gdouble dedxt, dedyt, dedzt; gdouble dedxu, dedyu, dedzu; gdouble dedphi; gint n; gdouble vn; ai = (gint)dihedralAngleTerms[0][i]; aj = (gint)dihedralAngleTerms[1][i]; ak = (gint)dihedralAngleTerms[2][i]; al = (gint)dihedralAngleTerms[3][i]; atomi = m->atoms[ai]; atomj = m->atoms[aj]; atomk = m->atoms[ak]; atoml = m->atoms[al]; rjix = atomj.coordinates[0] - atomi.coordinates[0]; rjiy = atomj.coordinates[1] - atomi.coordinates[1]; rjiz = atomj.coordinates[2] - atomi.coordinates[2]; rkjx = atomk.coordinates[0] - atomj.coordinates[0]; rkjy = atomk.coordinates[1] - atomj.coordinates[1]; rkjz = atomk.coordinates[2] - atomj.coordinates[2]; rlkx = atoml.coordinates[0] - atomk.coordinates[0]; rlky = atoml.coordinates[1] - atomk.coordinates[1]; rlkz = atoml.coordinates[2] - atomk.coordinates[2]; xt = rjiy*rkjz - rkjy*rjiz; yt = rjiz*rkjx - rkjz*rjix; zt = rjix*rkjy - rkjx*rjiy; xu = rkjy*rlkz - rlky*rkjz; yu = rkjz*rlkx - rlkz*rkjx; zu = rkjx*rlky - rlkx*rkjy; xtu = yt*zu - yu*zt; ytu = zt*xu - zu*xt; ztu = xt*yu - xu*yt; rt2 = xt*xt + yt*yt + zt*zt; ru2 = xu*xu + yu*yu + zu*zu; rtru = sqrt(rt2 * ru2); rkj = sqrt(rkjx*rkjx + rkjy*rkjy + rkjz*rkjz); cosine1 = 1.0; sine1 = 0.0; if (rtru <1e-10) rtru = 1e-10; if (rt2 <1e-10) rt2 = 1e-10; if (ru2 <1e-10) ru2 = 1e-10; cosine1 = (xt*xu + yt*yu + zt*zu) / rtru; sine1 = (rkjx*xtu + rkjy*ytu + rkjz*ztu) / (rkj*rtru); n = (gint)dihedralAngleTerms[7][i]; cosPhase = cos(D2R*dihedralAngleTerms[6][i]); sinPhase = sin(D2R*dihedralAngleTerms[6][i]); vn = dihedralAngleTerms[5][i]/dihedralAngleTerms[4][i]; /* compute the multiple angle trigonometry and the phase terms */ cosineN = cosine1; sineN = sine1; for(j=2;j<=n;j++) { cosold = cosineN; sinold = sineN; cosineN = cosine1*cosold - sine1*sinold; sineN = cosine1*sinold + sine1*cosold; } dedphi = vn*n*(cosineN*sinPhase-sineN*cosPhase); /* chain rule terms for first derivative components */ rkix = atomk.coordinates[0] - atomi.coordinates[0]; rkiy = atomk.coordinates[1] - atomi.coordinates[1]; rkiz = atomk.coordinates[2] - atomi.coordinates[2]; rljx = atoml.coordinates[0] - atomj.coordinates[0]; rljy = atoml.coordinates[1] - atomj.coordinates[1]; rljz = atoml.coordinates[2] - atomj.coordinates[2]; dedxt = dedphi * (yt*rkjz - rkjy*zt) / (rt2*rkj); dedyt = dedphi * (zt*rkjx - rkjz*xt) / (rt2*rkj); dedzt = dedphi * (xt*rkjy - rkjx*yt) / (rt2*rkj); dedxu = -dedphi * (yu*rkjz - rkjy*zu) / (ru2*rkj); dedyu = -dedphi * (zu*rkjx - rkjz*xu) / (ru2*rkj); dedzu = -dedphi * (xu*rkjy - rkjx*yu) / (ru2*rkj); /* compute first derivative components for this angle */ forceix = rkjz*dedyt - rkjy*dedzt; forceiy = rkjx*dedzt - rkjz*dedxt; forceiz = rkjy*dedxt - rkjx*dedyt; forcejx = rkiy*dedzt - rkiz*dedyt + rlkz*dedyu - rlky*dedzu; forcejy = rkiz*dedxt - rkix*dedzt + rlkx*dedzu - rlkz*dedxu; forcejz = rkix*dedyt - rkiy*dedxt + rlky*dedxu - rlkx*dedyu; forcekx = rjiz*dedyt - rjiy*dedzt + rljy*dedzu - rljz*dedyu; forceky = rjix*dedzt - rjiz*dedxt + rljz*dedxu - rljx*dedzu; forcekz = rjiy*dedxt - rjix*dedyt + rljx*dedyu - rljy*dedxu; forcelx = rkjz*dedyu - rkjy*dedzu; forcely = rkjx*dedzu - rkjz*dedxu; forcelz = rkjy*dedxu - rkjx*dedyu; #ifdef ENABLE_OMP #pragma omp critical #endif { m->gradient[0][ai] += forceix; m->gradient[1][ai] += forceiy; m->gradient[2][ai] += forceiz; m->gradient[0][aj] += forcejx; m->gradient[1][aj] += forcejy; m->gradient[2][aj] += forcejz; m->gradient[0][ak] += forcekx; m->gradient[1][ak] += forceky; m->gradient[2][ak] += forcekz; m->gradient[0][al] += forcelx; m->gradient[1][al] += forcely; m->gradient[2][al] += forcelz; } } } /**********************************************************************/ static void calculateGradientImproperTorsion(ForceField* forceField) { } /**********************************************************************/ static void calculateGradientNonBondedAmber(ForceField* forceField) { gint i; gboolean useCoulomb = forceField->options.coulomb; Molecule* m = &forceField->molecule; gdouble* nonBondedTerms[NONBONDEDDIM]; gint numberOfNonBonded = forceField->numberOfNonBonded; for(i=0;inonBondedTerms[i]; /* non-bonded part */ #ifdef ENABLE_OMP #pragma omp parallel for private(i) #endif for ( i = 0; i < numberOfNonBonded; i++ ) { gint ai, aj; AtomMol atomi,atomj; gdouble rijx, rijy, rijz; gdouble forceix, forceiy, forceiz; gdouble forcejx, forcejy, forcejz; gdouble permittivityScale = 1, permittivity = 1; gdouble coulombFactor, factorNonBonded; gdouble rij2, rij; gdouble rij3; gdouble chargei, chargej, coulombTerm; gdouble Aij, Bij, rij6, rij7, rij14, rij8; gdouble term1, term2, term3; coulombFactor = 332.05382 / ( permittivity * permittivityScale ); ai = (gint)nonBondedTerms[0][i]; aj = (gint)nonBondedTerms[1][i]; Aij = nonBondedTerms[2][i]; Bij = nonBondedTerms[3][i]; factorNonBonded = nonBondedTerms[4][i]; atomi = m->atoms[ai]; atomj = m->atoms[aj]; chargei = atomi.charge; chargej = atomj.charge; rijx = atomi.coordinates[0] - atomj.coordinates[0]; rijy = atomi.coordinates[1] - atomj.coordinates[1]; rijz = atomi.coordinates[2] - atomj.coordinates[2]; rij2 = rijx * rijx + rijy * rijy + rijz * rijz; if ( rij2 < 1.0e-2 ) rij2 = 1.0e-2; rij = sqrt( rij2 ); rij3 = rij2 * rij; rij6 = rij3 * rij3; rij7 = rij6 * rij; rij8 = rij7 * rij; rij14 = rij7 * rij7; if(useCoulomb) coulombTerm = ( chargei * chargej * coulombFactor*factorNonBonded ) / rij3; else coulombTerm = 0.0; /*printf("coulombTerm = %f\n",coulombTerm);*/ term1 = 12 * Aij / rij14; term2 = 6 * Bij / rij8; term3 = term1 - term2 + coulombTerm; forceix = term3 * rijx; forceiy = term3 * rijy; forceiz = term3 * rijz; forcejx = - forceix; forcejy = - forceiy; forcejz = - forceiz; #ifdef ENABLE_OMP #pragma omp critical #endif { m->gradient[0][ai] -= forceix; m->gradient[1][ai] -= forceiy; m->gradient[2][ai] -= forceiz; m->gradient[0][aj] -= forcejx; m->gradient[1][aj] -= forcejy; m->gradient[2][aj] -= forcejz; } } } /*********************************************************************/ static void calculateGradientHydrogenBondedAmber(ForceField* forceField) { gint i; Molecule* m = &forceField->molecule; gdouble* hydrogenBondedTerms[HYDROGENBONDEDDIM]; gint numberOfHydrogenBonded = forceField->numberOfHydrogenBonded; for(i=0;ihydrogenBondedTerms[i]; /* Hydrogen-bonded part */ #ifdef ENABLE_OMP #pragma omp parallel for private(i) #endif for ( i = 0; i < numberOfHydrogenBonded; i++ ) { gint ai, aj; AtomMol atomi,atomj; gdouble rijx, rijy, rijz; gdouble forceix, forceiy, forceiz; gdouble forcejx, forcejy, forcejz; gdouble Cij, Dij, rij2, rij4, rij8, rij12, rij14; gdouble term1, term2, term3; ai = (gint)hydrogenBondedTerms[0][i]; aj = (gint)hydrogenBondedTerms[1][i]; Cij = hydrogenBondedTerms[2][i]; Dij = hydrogenBondedTerms[3][i]; atomi = m->atoms[ai]; atomj = m->atoms[aj]; rijx = atomi.coordinates[0] - atomj.coordinates[0]; rijy = atomi.coordinates[1] - atomj.coordinates[1]; rijz = atomi.coordinates[2] - atomj.coordinates[2]; rij2 = rijx * rijx + rijy * rijy + rijz * rijz; if ( rij2 < 1.0e-2 ) rij2 = 1.0e-2; rij4 = rij2 * rij2; rij8 = rij4 * rij4; rij12 = rij8 * rij4; rij14 = rij12 * rij2; term1 = Cij / rij14; term2 = Dij / rij12; term3 = term1 - term2; forceix = term3 * rijx; forceiy = term3 * rijy; forceiz = term3 * rijz; forcejx = - forceix; forcejy = - forceiy; forcejz = - forceiz; #ifdef ENABLE_OMP #pragma omp critical #endif { m->gradient[0][ai] -= forceix; m->gradient[1][ai] -= forceiy; m->gradient[2][ai] -= forceiz; m->gradient[0][aj] -= forcejx; m->gradient[1][aj] -= forcejy; m->gradient[2][aj] -= forcejz; } } } /**********************************************************************/ static void calculateGradientPairWise(ForceField* forceField) { gint i; gint ai, aj; AtomMol atomi,atomj; gdouble rijx, rijy, rijz; gdouble forceix, forceiy, forceiz; gdouble forcejx, forcejy, forcejz; gdouble permittivityScale = 1, permittivity = 1; gdouble coulombFactor; gdouble rij2, rij; gdouble rij3; gdouble chargei, chargej, coulombTerm; gdouble rij6, rij7, rij8, rij9, rij10, rij11, rij12; gdouble term1, term6, term8, term10, termAll; gdouble A, Beta, C6, C8, C10,b; gdouble s, sp, fact, br, brk, ebr; gint n, k; gboolean useCoulomb = forceField->options.coulomb; gboolean useVanderWals = forceField->options.vanderWals; Molecule* m = &forceField->molecule; gdouble* pairWiseTerms[PAIRWISEDIM]; gint numberOfPairWise = forceField->numberOfPairWise; for(i=0;ipairWiseTerms[i]; /* non-bonded part */ coulombFactor = 332.05382 / ( permittivity * permittivityScale ); for ( i = 0; i < numberOfPairWise; i++ ) { ai = (gint)pairWiseTerms[0][i]; aj = (gint)pairWiseTerms[1][i]; A = pairWiseTerms[2][i]; Beta = pairWiseTerms[3][i]; C6 = pairWiseTerms[4][i]; C8 = pairWiseTerms[5][i]; C10 = pairWiseTerms[6][i]; b = pairWiseTerms[7][i]; atomi = m->atoms[ai]; atomj = m->atoms[aj]; chargei = atomi.charge; chargej = atomj.charge; rijx = atomi.coordinates[0] - atomj.coordinates[0]; rijy = atomi.coordinates[1] - atomj.coordinates[1]; rijz = atomi.coordinates[2] - atomj.coordinates[2]; rij2 = rijx * rijx + rijy * rijy + rijz * rijz; if ( rij2 < 1.0e-8 ) rij2 = 1.0e-8; rij = sqrt( rij2 ); rij3 = rij2 * rij; rij6 = rij3 * rij3; rij7 = rij6 * rij; rij8 = rij7 * rij; rij9 = rij8 * rij; rij10 = rij9 * rij; rij11 = rij10 * rij; rij12 = rij11 * rij; if(useCoulomb) coulombTerm = ( chargei * chargej * coulombFactor ) / rij3; else coulombTerm = 0.0; /* printf("A = %f Beta = %f qi = %f qj = %f rij = %f\n",A,Beta,chargei,chargej,rij);*/ /*term1 = -A*Beta/rij*exp(-Beta*rij);*/ term1 = A*Beta/rij*exp(-Beta*rij); br = b*rij; ebr = exp(-b*rij); term6 = 0.0; if(useVanderWals && fabs(C6)>1e-12) { fact = 1.0; s = 1.0; n = 3; brk = 1.0; for(k=1;k<2*n;k++) { fact *= k; brk *= br; s += brk/fact; } sp = s*b; fact *=2*n; brk *= br; s += brk/fact; term6 = b*C6*ebr*s/rij7 -(2*n)*C6*(1-ebr*s)/rij8 -C6*ebr/rij7*sp; } term8 = 0.0; if(useVanderWals && fabs(C8)>1e-12) { fact = 1.0; s = 1.0; n = 4; brk = 1.0; for(k=1;k<2*n;k++) { fact *= k; brk *= br; s += brk/fact; } sp = s*b; fact *=2*n; brk *= br; s += brk/fact; term8 = b*C8*ebr*s/rij9 -(2*n)*C8*(1-ebr*s)/rij10 -C8*ebr/rij9*sp; } term10 = 0.0; if(useVanderWals && fabs(C10)>1e-12) { fact = 1.0; s = 1.0; n = 5; brk = 1.0; for(k=1;k<2*n;k++) { fact *= k; brk *= br; s += brk/fact; } sp = s*b; fact *=2*n; brk *= br; s += brk/fact; term10 = b*C10*ebr*s/rij11 -(2*n)*C10*(1-ebr*s)/rij12 -C10*ebr/rij11*sp; } //termAll = term1 - term6 - term8 - term10 + coulombTerm; termAll = term1 + term6 + term8 + term10 + coulombTerm; forceix = termAll * rijx; forceiy = termAll * rijy; forceiz = termAll * rijz; forcejx = - forceix; forcejy = - forceiy; forcejz = - forceiz; { m->gradient[0][ai] -= forceix; m->gradient[1][ai] -= forceiy; m->gradient[2][ai] -= forceiz; m->gradient[0][aj] -= forcejx; m->gradient[1][aj] -= forcejy; m->gradient[2][aj] -= forcejz; } } } /**********************************************************************/ static void calculateGradientAmber(ForceField* forceField) { gint i; gint j; Molecule* m = &forceField->molecule; for(j=0;j<3;j++) for( i=0; inAtoms;i++) m->gradient[j][i] = 0.0; calculateGradientBondAmber(forceField); if(StopCalcul) return; calculateGradientBendAmber(forceField); if(StopCalcul) return; calculateGradientDihedralAmber(forceField); if(StopCalcul) return; calculateGradientImproperTorsion(forceField); if(StopCalcul) return; calculateGradientNonBondedAmber(forceField); if(StopCalcul) return; calculateGradientHydrogenBondedAmber(forceField); /* printf("Before grad pairwise\n"); for( i=0; inAtoms;i++) for(j=0;j<3;j++) printf(" i = %d j = %d g = %f\n",i,j,m->gradient[j][i]); */ if(StopCalcul) return; calculateGradientPairWise(forceField); if(StopCalcul) return; /* printf("After grad pairwise\n"); for( i=0; inAtoms;i++) for(j=0;j<3;j++) printf(" i = %d j = %d g = %f\n",i,j,m->gradient[j][i]); */ for( i=0; inAtoms;i++) { if(!m->atoms[i].variable) for(j=0;j<3;j++) m->gradient[j][i] = 0.0; } } /**********************************************************************/ /* static void calculateGradientNumericAmber(ForceField* forceField) { gint i; gint j; Molecule* m = &forceField->molecule; gdouble h=0.0001; gdouble E1; gdouble E2; for(j=0;j<3;j++) for( i=0; inAtoms;i++) { while( gtk_events_pending() ) gtk_main_iteration(); if(StopCalcul) return; m->atoms[i].coordinates[j] += h; E1 = calculateEnergyTmpAmber(forceField,&m); m->atoms[i].coordinates[j] -= h+h; E2 = calculateEnergyTmpAmber(forceField,&m); m->atoms[i].coordinates[j] += h; m->gradient[j][i] = (E1-E2)/2/h; } } */ /**********************************************************************/ static gdouble calculateEnergyBondAmber(ForceField* forceField,Molecule* molecule) { gint i; gint ai, aj; AtomMol atomi,atomj; gdouble rijx, rijy, rijz, forceConstant, equilibriumDistance, term; Molecule* m = molecule; gdouble* bondStretchTerms[STRETCHDIM]; gint numberOfStretchTerms = forceField->numberOfStretchTerms; gdouble energy = 0.0; gdouble bondLength; for( i=0; ibondStretchTerms[i]; #ifdef ENABLE_OMP #pragma omp parallel for private(i,ai,aj,forceConstant, equilibriumDistance,atomi,atomj,rijx,rijy,rijz,bondLength,term) reduction(+:energy) #endif for ( i = 0; i < numberOfStretchTerms; i++ ) { ai = (gint)bondStretchTerms[0][i]; aj = (gint)bondStretchTerms[1][i]; forceConstant = bondStretchTerms[2][i]; equilibriumDistance = bondStretchTerms[3][i]; atomi = m->atoms[ai]; atomj = m->atoms[aj]; rijx = atomi.coordinates[0] - atomj.coordinates[0]; rijy = atomi.coordinates[1] - atomj.coordinates[1]; rijz = atomi.coordinates[2] - atomj.coordinates[2]; bondLength = sqrt( rijx * rijx + rijy * rijy + rijz * rijz ); term = bondLength - equilibriumDistance; energy += ( forceConstant ) * term * term; } return energy; } /**********************************************************************/ static gdouble calculateEnergyBendAmber(ForceField* forceField,Molecule* molecule) { gint i; gint ai, aj, ak; AtomMol atomi,atomj, atomk; gdouble thetaDeg; gdouble term; gdouble energy = 0.0; static gdouble D2RxD2R = 1/( RAD_TO_DEG*RAD_TO_DEG); Molecule* m = molecule; gdouble* angleBendTerms[BENDDIM]; gint numberOfBendTerms = forceField->numberOfBendTerms; for( i=0; iangleBendTerms[i]; #ifdef ENABLE_OMP #pragma omp parallel for private(i,ai,aj,ak,atomi,atomj,atomk,thetaDeg,term) reduction(+:energy) #endif for ( i = 0; i < numberOfBendTerms; i++ ) { ai = (gint)angleBendTerms[0][i]; aj = (gint)angleBendTerms[1][i]; ak = (gint)angleBendTerms[2][i]; atomi = m->atoms[ai]; atomj = m->atoms[aj]; atomk = m->atoms[ak]; thetaDeg = getAngle(&atomi, &atomj, &atomk); term = thetaDeg - angleBendTerms[4][i]; term *= term * angleBendTerms[3][i]; term *= D2RxD2R; energy += term; /* printf("f =%f t0 = %f t= %f e= %f\n", angleBendTerms[3][i], angleBendTerms[4][i], thetaDeg, energy); */ } return energy; } /**********************************************************************/ static gdouble calculateEnergyDihedralAmber(ForceField* forceField,Molecule* molecule) { gint i; gint ai, aj, ak, al; AtomMol atomi,atomj, atomk, atoml; gdouble phiDeg; Molecule* m = molecule; gdouble* dihedralAngleTerms[DIHEDRALDIM]; gint numberOfDihedralTerms = forceField->numberOfDihedralTerms; gdouble energy = 0.0; static gdouble D2R = 1.0/57.29577951308232090712; for(i=0;idihedralAngleTerms[i]; #ifdef ENABLE_OMP #pragma omp parallel for private(i,ai,aj,ak,al,atomi,atomj,atomk,atoml,phiDeg) reduction(+:energy) #endif for ( i = 0; i < numberOfDihedralTerms; i++ ) { ai = (gint)dihedralAngleTerms[0][i]; aj = (gint)dihedralAngleTerms[1][i]; ak = (gint)dihedralAngleTerms[2][i]; al = (gint)dihedralAngleTerms[3][i]; atomi = m->atoms[ai]; atomj = m->atoms[aj]; atomk = m->atoms[ak]; atoml = m->atoms[al]; phiDeg = getTorsion( &atomi ,&atomj, &atomk, &atoml); energy += dihedralAngleTerms[5][i]/dihedralAngleTerms[4][i] * ( 1.0 + cos( D2R*(dihedralAngleTerms[7][i] * phiDeg - dihedralAngleTerms[6][i] )) ); } return energy; } /**********************************************************************/ static gdouble calculateEnergyImproperTorsionAmber(ForceField* forceField,Molecule* molecule) { gdouble energy = 0.0; return energy; } /**********************************************************************/ static gdouble calculateEnergyfNonBondedAmber(ForceField* forceField,Molecule* molecule) { gint i; gint ai, aj; AtomMol atomi,atomj; gdouble rij2, rij6, rij12, coulombTerm, factorNonBonded; gdouble rijx, rijy, rijz; gdouble chargei, chargej, Aij, Bij, rij; gdouble permittivityScale = 1, permittivity = 1; gdouble coulombFactor; Molecule* m = molecule; gdouble* nonBondedTerms[NONBONDEDDIM]; gint numberOfNonBonded = forceField->numberOfNonBonded; gboolean useCoulomb = forceField->options.coulomb; gdouble energy = 0.0; for(i=0;inonBondedTerms[i]; /* now for non-bonded term */ coulombFactor = 332.05382 / ( permittivity * permittivityScale ); /*printf("number of Non Bonded terms = %d\n",numberOfNonBonded);*/ #ifdef ENABLE_OMP #pragma omp parallel for private(i,ai,aj,Aij,Bij,factorNonBonded,atomi,atomj,chargei,chargej,rijx,rijy,rijz,rij2,rij,rij6,rij12,coulombTerm) reduction(+:energy) #endif for ( i = 0; i < numberOfNonBonded; i++ ) { ai = (gint)nonBondedTerms[0][i]; aj = (gint)nonBondedTerms[1][i]; Aij = nonBondedTerms[2][i]; Bij = nonBondedTerms[3][i]; factorNonBonded = nonBondedTerms[4][i]; atomi = m->atoms[ai]; atomj = m->atoms[aj]; chargei = atomi.charge; chargej = atomj.charge; rijx = atomi.coordinates[0] - atomj.coordinates[0]; rijy = atomi.coordinates[1] - atomj.coordinates[1]; rijz = atomi.coordinates[2] - atomj.coordinates[2]; rij2 = rijx * rijx + rijy * rijy + rijz * rijz; rij = sqrt( rij2 ); rij6 = rij2 * rij2 * rij2; rij12 = rij6 * rij6; if(useCoulomb) coulombTerm = ( chargei * chargej * coulombFactor*factorNonBonded ) / rij; else coulombTerm = 0.0; energy += Aij / rij12 - Bij / rij6 + coulombTerm; /* printf("A =%f B = %f r= %f e= %f\n", Aij,Bij ,rij,energy); */ } /* printf("Non Bonded energy = %f\n",energy);*/ return energy; } /**********************************************************************/ static gdouble calculateEnergyHydrogenBondedAmber(ForceField* forceField,Molecule* molecule) { gint i; gint ai, aj; AtomMol atomi,atomj; gdouble rij2, rij6, rij12; gdouble rijx, rijy, rijz; gdouble rij4, rij10; gdouble Cij, Dij; Molecule* m = molecule; gdouble* hydrogenBondedTerms[HYDROGENBONDEDDIM]; gint numberOfHydrogenBonded = forceField->numberOfHydrogenBonded; gdouble energy = 0.0; for(i=0;ihydrogenBondedTerms[i]; /* Hydrogen-bonded term */ #ifdef ENABLE_OMP #pragma omp parallel for private(i,ai,aj,Cij,Dij,atomi,atomj,rijx,rijy,rijz,rij2,rij4,rij6,rij10,rij12) reduction(+:energy) #endif for ( i = 0; i < numberOfHydrogenBonded; i++ ) { ai = (gint)hydrogenBondedTerms[0][i]; aj = (gint)hydrogenBondedTerms[1][i]; Cij = hydrogenBondedTerms[2][i]; Dij = hydrogenBondedTerms[3][i]; atomi = m->atoms[ai]; atomj = m->atoms[aj]; rijx = atomi.coordinates[0] - atomj.coordinates[0]; rijy = atomi.coordinates[1] - atomj.coordinates[1]; rijz = atomi.coordinates[2] - atomj.coordinates[2]; rij2 = rijx * rijx + rijy * rijy + rijz * rijz; if ( rij2 < 1.0e-2 ) { printf("i = %d j = %d\n",ai,aj); rij2 = 1.0e-2; } rij4 = rij2 * rij2; rij6 = rij4 * rij2; rij10 = rij6 * rij4; rij12 = rij10 * rij2; energy += Cij / rij12 - Dij / rij10; /* printf("C =%f D = %f r= %f e= %f\n", Cij,Dij ,sqrt(rij2),energy); */ } return energy; } /**********************************************************************/ static gdouble calculateEnergyPairWise(ForceField* forceField,Molecule* molecule) { gint i; gint ai, aj; AtomMol atomi,atomj; gdouble rij2, rij6, rij8, rij10; gdouble coulombTerm; gdouble rijx, rijy, rijz; gdouble chargei, chargej, rij; gdouble permittivityScale = 1, permittivity = 1; gdouble coulombFactor; Molecule* m = molecule; gdouble* pairWiseTerms[PAIRWISEDIM]; gint numberOfPairWise = forceField->numberOfPairWise; gboolean useCoulomb = forceField->options.coulomb; gboolean useVanderWals = forceField->options.vanderWals; gdouble energy = 0.0; gdouble A, Beta; gdouble B6, B8, B10; gdouble c6, c8, c10, b; for(i=0;ipairWiseTerms[i]; /* now for non-bonded term */ coulombFactor = 332.05382/ ( permittivity * permittivityScale ); /* printf("number of Non Bonded terms = %d\n",numberOfPairWise);*/ for ( i = 0; i < numberOfPairWise; i++ ) { ai = (gint)pairWiseTerms[0][i]; aj = (gint)pairWiseTerms[1][i]; A = pairWiseTerms[2][i]; Beta = pairWiseTerms[3][i]; c6 = pairWiseTerms[4][i]; c8 = pairWiseTerms[5][i]; c10 = pairWiseTerms[6][i]; b = pairWiseTerms[7][i]; atomi = m->atoms[ai]; atomj = m->atoms[aj]; chargei = atomi.charge; chargej = atomj.charge; rijx = atomi.coordinates[0] - atomj.coordinates[0]; rijy = atomi.coordinates[1] - atomj.coordinates[1]; rijz = atomi.coordinates[2] - atomj.coordinates[2]; rij2 = rijx * rijx + rijy * rijy + rijz * rijz; //if(rij2<1e-2) rij = 1e-2; rij = sqrt( rij2 ); rij6 = rij2 * rij2 * rij2; rij8 = rij6* rij2; rij10 = rij8 * rij2; if(useCoulomb) coulombTerm = ( chargei * chargej * coulombFactor ) / rij; else coulombTerm = 0.0; B6 = 0; B8 = 0; B10 = 0; /* printf("A = %f Beta = %f qi = %f qj = %f rij = %f\n",A,Beta,chargei,chargej,rij);*/ if(useVanderWals) { gdouble fact = 1.0; gdouble s = 1.0; gdouble br = b*rij; gdouble brk = 1.0; gint k; if(fabs(c6)>1e-12) { for(k=1;k<=2*3;k++) { fact *= k; brk *= br; s += brk/fact; } B6 = c6*(1-exp(-br)*s); } if(fabs(c8)>1e-12) { fact = 1.0; s = 1.0; br = b*rij; brk = 1.0; for(k=1;k<=2*4;k++) { fact *= k; brk *= br; s += brk/fact; } B8 = c8*(1-exp(-br)*s); } if(fabs(c10)>1e-12) { fact = 1.0; s = 1.0; br = b*rij; brk = 1.0; for(k=1;k<=2*5;k++) { fact *= k; brk *= br; s += brk/fact; } B10 = c10*(1-exp(-br)*s); } } energy += A*exp(-Beta*rij) - B6 / rij6 - B8 / rij8 - B10 / rij10 + coulombTerm; } return energy; } /**********************************************************************/ static void calculateEnergyAmber(ForceField* forceField) { Molecule* m = &forceField->molecule; forceField->molecule.energy = calculateEnergyTmpAmber(forceField,m); } /**********************************************************************/ static gdouble calculateEnergyTmpAmber(ForceField* forceField,Molecule* molecule) { gdouble energy = 0.0; energy +=calculateEnergyBondAmber(forceField,molecule); energy +=calculateEnergyBendAmber(forceField,molecule); energy +=calculateEnergyDihedralAmber(forceField,molecule); energy +=calculateEnergyImproperTorsionAmber(forceField,molecule); energy +=calculateEnergyfNonBondedAmber(forceField,molecule); energy +=calculateEnergyHydrogenBondedAmber(forceField,molecule); energy +=calculateEnergyPairWise(forceField,molecule); return energy; } /**********************************************************************/ ForceField createAmberModel (GeomDef* geom, gint Natoms,ForceFieldOptions forceFieldOptions) { ForceField forceField = newAmberModel(); forceField.molecule = createMolecule(geom,Natoms,TRUE); forceField.options = forceFieldOptions; set_text_to_draw(_("Setting of Parameters ...")); set_statubar_operation_str(_("Setting of Parameters ...")); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); setAmberParameters(&forceField); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); return forceField; } /**********************************************************************/ ForceField createPairWiseModel (GeomDef* geom,gint Natoms,ForceFieldOptions forceFieldOptions) { ForceField forceField = newPairWiseModel(); forceField.molecule = createMolecule(geom,Natoms,TRUE); forceField.options = forceFieldOptions; forceField.options.bondStretch = FALSE; forceField.options.angleBend = FALSE; forceField.options.dihedralAngle = FALSE; forceField.options.improperTorsion = FALSE; forceField.options.nonBonded = FALSE; forceField.options.hydrogenBonded = FALSE; set_text_to_draw(_("Setting of Parameters ...")); set_statubar_operation_str(_("Setting of Parameters ...")); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); setAllPairWiseParameters(&forceField); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); return forceField; } /**********************************************************************/ void loadAmberParameters() { AmberParameters amberParameters; gchar* persoFileName = g_strdup_printf("%s%sPersonalMM.prm",gabedit_directory(), G_DIR_SEPARATOR_S); gchar* defaultFileName = g_strdup_printf("%s%sMolecularMechanics.prm",gabedit_directory(), G_DIR_SEPARATOR_S); if(staticAmberParameters != NULL) freeAmberParameters(staticAmberParameters); amberParameters = newAmberParameters(); if(!readAmberParameters(&amberParameters,persoFileName)) if(!readAmberParameters(&amberParameters,defaultFileName)) { createMMFile(); if(!readAmberParameters(&amberParameters,defaultFileName)) { g_free(persoFileName); g_free(defaultFileName); return; } } staticAmberParameters = g_malloc(sizeof(AmberParameters)); *staticAmberParameters = amberParameters; g_free(persoFileName); g_free(defaultFileName); } /**********************************************************************/ void saveAmberParameters() { createPersonalParametersFile(staticAmberParameters); } /**********************************************************************/ AmberParameters* getPointerAmberParameters() { return staticAmberParameters; } /**********************************************************************/ void setPointerAmberParameters(AmberParameters* ptr) { staticAmberParameters = ptr; } /********************************************************************************/ gchar** getListMMTypes(gint* nlist) { gchar** t = NULL; gint i; *nlist = 0; if(!staticAmberParameters || staticAmberParameters->numberOfTypes<=0) return NULL; t = g_malloc(staticAmberParameters->numberOfTypes*sizeof(gchar*)); *nlist = staticAmberParameters->numberOfTypes; for(i=0;inumberOfTypes;i++) t[i] = g_strdup(staticAmberParameters->atomTypes[i].name); return t; } GabeditSrc250/src/MolecularMechanics/SavePDBTemplate.c0000644000175100017510000000653013130665225023110 0ustar alloucheallouche/* SavePDBTemplate.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../MolecularMechanics/PDBTemplate.h" #include "../Utils/Utils.h" /************************************************************/ static void saveTitleResidueTpl(FILE* file) { fprintf(file,"Begin Title\n"); fprintf(file," Residue : PDB type atom Amber type atom charge of atom\n"); fprintf(file,"End\n"); } /**********************************************************************/ static void saveResiduesList(PDBTemplate* pdbTemplate, FILE* file) { gint i; fprintf(file,"Begin Residue List\n"); for(i=0;inumberOfResidues;i++) fprintf(file,"%s\n",pdbTemplate->residueTemplates[i].residueName); fprintf(file,"End\n"); } /**********************************************************************/ static void saveOneResidue(PDBTemplate* pdbTemplate, FILE* file,gint residueNumber) { gint i; gint numberOfTypes = pdbTemplate->residueTemplates[residueNumber].numberOfTypes; PDBTypeTemplate *typeTemplates = pdbTemplate->residueTemplates[residueNumber].typeTemplates; fprintf(file,"Begin %s Residue\n",pdbTemplate->residueTemplates[residueNumber].residueName); for(i=0;inumberOfResidues; for(i=0;i #include #include #include "../Common/Global.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "Atom.h" #include "Molecule.h" #include "ForceField.h" #include "QuasiNewton.h" double maxarg1,maxarg2; #define FMIN(a,b) (maxarg1=(a),maxarg2=(b),(maxarg1) > (maxarg2) ?(maxarg2) : (maxarg1)) #define FMAX(a,b) (maxarg1=(a),maxarg2=(b),(maxarg1) > (maxarg2) ?(maxarg1) : (maxarg2)) static gint lbfgs( gint n , gint m , gdouble x[] , gdouble f , gdouble g[] , gint diagco , gdouble diag[] , gdouble eps , gdouble xtol , gint maxLines,gint iflag[] ); /**********************************************************************/ void runQuasiNewton(QuasiNewton* quasiNewton) { gint j; gint i,i3; gint iter; gint nAtomsX3; gint diagco = FALSE; gdouble* x = NULL; gdouble* g = NULL; gdouble* diag = NULL; gint iflag = 0; gdouble energy = 0; gint nAtoms; gint updateNumber = 0; gchar str[BSIZE]; gdouble gradientNorm; ForceField* forceField = quasiNewton->forceField; if(forceField->molecule.nAtoms<1) return; nAtoms = forceField->molecule.nAtoms; nAtomsX3 = 3*nAtoms; diag = g_malloc(nAtomsX3*sizeof(gdouble)); x = g_malloc(nAtomsX3*sizeof(gdouble)); g = g_malloc(nAtomsX3*sizeof(gdouble)); for(iter=0;itermaxIterations;iter++) { forceField->klass->calculateGradient(forceField); energy = forceField->klass->calculateEnergyTmp(forceField, &forceField->molecule ); /* set x and g table from coordinates and gradient */ if(StopCalcul) break; for(i=0,i3=0;imolecule.atoms[i].variable) continue; x[i3 ] = forceField->molecule.atoms[i].coordinates[0]; x[i3+1] = forceField->molecule.atoms[i].coordinates[1]; x[i3+2] = forceField->molecule.atoms[i].coordinates[2]; g[i3 ] = forceField->molecule.gradient[0][i]; g[i3+1] = forceField->molecule.gradient[1][i]; g[i3+2] = forceField->molecule.gradient[2][i]; i3 += 3; } lbfgs(i3, i3,x, energy,g,diagco,diag, quasiNewton->epsilon,quasiNewton->tolerence, quasiNewton->maxLines, &iflag); /* lbfgs(nAtomsX3, nAtomsX3,x, energy,g,diagco,diag, quasiNewton->epsilon,quasiNewton->tolerence, quasiNewton->maxLines, &iflag); */ /* set coordinates from x */ for(i=0,i3=0;imolecule.atoms[i].variable) { forceField->molecule.atoms[i].coordinates[0] = x[i3]; forceField->molecule.atoms[i].coordinates[1] = x[i3+1]; forceField->molecule.atoms[i].coordinates[2] = x[i3+2]; i3+=3; } } if ( updateNumber >= quasiNewton->updateFrequency ) { gradientNorm = 0; for ( i = 0; i < nAtoms; i++ ) for(j=0;j<3;j++) gradientNorm += forceField->molecule.gradient[j][i] *forceField->molecule.gradient[j][i]; sprintf(str,_("Gradient = %f energy = %f "),sqrt(gradientNorm),energy); redrawMolecule(&forceField->molecule,str); updateNumber = 0; } updateNumber++; if(iflag<=0) break; } gradientNorm = 0; for ( i = 0; i < nAtoms; i++ ) for(j=0;j<3;j++) gradientNorm += forceField->molecule.gradient[j][i] *forceField->molecule.gradient[j][i]; sprintf(str,_("Gradient = %f energy = %f "),sqrt(gradientNorm),energy); redrawMolecule(&forceField->molecule,str); g_free(diag); g_free(x); g_free(g); } /**********************************************************************/ void freeQuasiNewton(QuasiNewton* quasiNewton) { quasiNewton->forceField = NULL; quasiNewton->updateFrequency = 0; quasiNewton->maxIterations = 0; quasiNewton->maxLines = 0; quasiNewton->epsilon = 0; quasiNewton->tolerence = 0; } /**********************************************************************/ static gdouble sqr( gdouble x ) { return x*x; } /******************************************************************************/ static gdouble max3( gdouble x, gdouble y, gdouble z ) { return x < y ? ( y < z ? z : y ) : ( x < z ? z : x ); } /** The purpose of this function is to compute a safeguarded step for * a linesearch and to update an interval of uncertainty for * a minimizer of the function.

*/ static void mcstep ( gdouble stx[] , gdouble fx[] , gdouble dx[] , gdouble sty[] , gdouble fy[] , gdouble dy[] , gdouble stp[] , gdouble fp , gdouble dp , gint brackt[] , gdouble stpmin , gdouble stpmax , gint info[] ) { gint bound; gdouble gamma, p, q, r, s, sgnd, stpc, stpf, stpq, theta; info[0] = 0; if ( ( brackt[0] && ( stp[0] <= FMIN ( stx[0] , sty[0] ) || stp[0] >= FMAX ( stx[0] , sty[0] )) ) || dx[0] * ( stp[0] - stx[0] ) >= 0.0 || stpmax < stpmin ) return; /* Determine if the derivatives have opposite sign.*/ sgnd = dp * ( dx[0] / fabs ( dx[0] ) ); if ( fp > fx[0] ) { /* First case. A higher function value. The minimum is bracketed. If the cubic step is closer to stx than the quadratic step, the cubic step is taken, else the average of the cubic and quadratic steps is taken. */ info[0] = 1; bound = TRUE; theta = 3 * ( fx[0] - fp ) / ( stp[0] - stx[0] ) + dx[0] + dp; s = max3 ( fabs ( theta ) , fabs ( dx[0] ) , fabs ( dp ) ); gamma = s * sqrt ( sqr( theta / s ) - ( dx[0] / s ) * ( dp / s ) ); if ( stp[0] < stx[0] ) gamma = - gamma; p = ( gamma - dx[0] ) + theta; q = ( ( gamma - dx[0] ) + gamma ) + dp; r = p/q; stpc = stx[0] + r * ( stp[0] - stx[0] ); stpq = stx[0] + ( ( dx[0] / ( ( fx[0] - fp ) / ( stp[0] - stx[0] ) + dx[0] ) ) / 2 ) *( stp[0] - stx[0] ); if ( fabs ( stpc - stx[0] ) < fabs ( stpq - stx[0] ) ) stpf = stpc; else stpf = stpc + ( stpq - stpc ) / 2; brackt[0] = TRUE; } else if ( sgnd < 0.0 ) { /* Second case. A lower function value and derivatives of opposite sign. The minimum is bracketed. If the cubic step is closer to stx than the quadratic (secant) step, the cubic step is taken, else the quadratic step is taken. */ info[0] = 2; bound = FALSE; theta = 3 * ( fx[0] - fp ) / ( stp[0] - stx[0] ) + dx[0] + dp; s = max3 ( fabs ( theta ) , fabs ( dx[0] ) , fabs ( dp ) ); gamma = s * sqrt ( sqr( theta / s ) - ( dx[0] / s ) * ( dp / s ) ); if ( stp[0] > stx[0] ) gamma = - gamma; p = ( gamma - dp ) + theta; q = ( ( gamma - dp ) + gamma ) + dx[0]; r = p/q; stpc = stp[0] + r * ( stx[0] - stp[0] ); stpq = stp[0] + ( dp / ( dp - dx[0] ) ) * ( stx[0] - stp[0] ); if ( fabs ( stpc - stp[0] ) > fabs ( stpq - stp[0] ) ) stpf = stpc; else stpf = stpq; brackt[0] = TRUE; } else if ( fabs ( dp ) < fabs ( dx[0] ) ) { /* Third case. A lower function value, derivatives of the same sign, and the magnitude of the derivative decreases. The cubic step is only used if the cubic tends to infinity in the direction of the step or if the minimum of the cubic is beyond stp. Otherwise the cubic step is defined to be either stpmin or stpmax. The quadratic (secant) step is also computed and if the minimum is bracketed then the the step closest to stx is taken, else the step farthest away is taken. */ info[0] = 3; bound = TRUE; theta = 3 * ( fx[0] - fp ) / ( stp[0] - stx[0] ) + dx[0] + dp; s = max3 ( fabs ( theta ) , fabs ( dx[0] ) , fabs ( dp ) ); gamma = s * sqrt ( FMAX ( 0, sqr( theta / s ) - ( dx[0] / s ) * ( dp / s ) ) ); if ( stp[0] > stx[0] ) gamma = - gamma; p = ( gamma - dp ) + theta; q = ( gamma + ( dx[0] - dp ) ) + gamma; r = p/q; if ( r < 0.0 && gamma != 0.0 ) stpc = stp[0] + r * ( stx[0] - stp[0] ); else if ( stp[0] > stx[0] ) stpc = stpmax; else stpc = stpmin; stpq = stp[0] + ( dp / ( dp - dx[0] ) ) * ( stx[0] - stp[0] ); if ( brackt[0] ) { if ( fabs ( stp[0] - stpc ) < fabs ( stp[0] - stpq ) ) stpf = stpc; else stpf = stpq; } else { if ( fabs ( stp[0] - stpc ) > fabs ( stp[0] - stpq ) ) stpf = stpc; else stpf = stpq; } } else { /* Fourth case. A lower function value, derivatives of the same sign, and the magnitude of the derivative does not decrease. If the minimum is not bracketed, the step is either stpmin or stpmax, else the cubic step is taken. */ info[0] = 4; bound = FALSE; if ( brackt[0] ) { theta = 3 * ( fp - fy[0] ) / ( sty[0] - stp[0] ) + dy[0] + dp; s = max3 ( fabs ( theta ) , fabs ( dy[0] ) , fabs ( dp ) ); gamma = s * sqrt ( sqr( theta / s ) - ( dy[0] / s ) * ( dp / s ) ); if ( stp[0] > sty[0] ) gamma = - gamma; p = ( gamma - dp ) + theta; q = ( ( gamma - dp ) + gamma ) + dy[0]; r = p/q; stpc = stp[0] + r * ( sty[0] - stp[0] ); stpf = stpc; } else if ( stp[0] > stx[0] ) { stpf = stpmax; } else { stpf = stpmin; } } /* Update the interval of uncertainty. This update does not depend on the new step or the case analysis above. */ if ( fp > fx[0] ) { sty[0] = stp[0]; fy[0] = fp; dy[0] = dp; } else { if ( sgnd < 0.0 ) { sty[0] = stx[0]; fy[0] = fx[0]; dy[0] = dx[0]; } stx[0] = stp[0]; fx[0] = fp; dx[0] = dp; } /* Compute the new step and safeguard it.*/ stpf = FMIN ( stpmax , stpf ); stpf = FMAX ( stpmin , stpf ); stp[0] = stpf; if ( brackt[0] && bound ) { if ( sty[0] > stx[0] ) { stp[0] = FMIN ( stx[0] + 0.66 * ( sty[0] - stx[0] ) , stp[0] ); } else { stp[0] = FMAX ( stx[0] + 0.66 * ( sty[0] - stx[0] ) , stp[0] ); } } return; } /******************************************************************************/ /* Minimize a function along a search direction. */ void mcsrch ( gint n , gdouble x[] , gdouble f , gdouble g[] , gdouble s[] , gint is0 , gdouble stp[] , gdouble ftol , gdouble xtol , gint maxfev , gint info[] , gint nfev[] , gdouble wa[] ) { gdouble LBFGS_gtol = 0.9; gdouble LBFGS_stpmin = 1e-16; gdouble LBFGS_stpmax = 1e16; static gint infoc[1]; gint j = 0; static gdouble dg = 0, dgm = 0, dginit = 0, dgtest = 0; static gdouble dgx[1]; static gdouble dgxm[1]; static gdouble dgy[1]; static gdouble dgym[1]; static gdouble finit = 0, ftest1 = 0, fm = 0; static gdouble fx[1]; static gdouble fxm[1]; static gdouble fy[1]; static gdouble fym[1]; static gdouble p5 = 0, p66 = 0; static gdouble stx[1]; static gdouble sty[1]; static gdouble stmin = 0, stmax = 0, width = 0, width1 = 0, xtrapf = 0; static gint brackt[1]; static gint stage1 = FALSE; p5 = 0.5; p66 = 0.66; xtrapf = 4; if ( info[0] != - 1 ) { infoc[0] = 1; if ( n <= 0 || stp[0] <= 0 || ftol < 0 || LBFGS_gtol < 0 || xtol < 0 || LBFGS_stpmin < 0 || LBFGS_stpmax < LBFGS_stpmin || maxfev <= 0 ) return; /* * Compute the initial gradient in the search direction * and check that s is a descent direction. */ dginit = 0; for ( j = 0 ; j < n ; j++ ) { dginit = dginit + g [j] * s [is0+j]; } if ( dginit >= 0 ) { printf(_("The search direction is not a descent direction.")); return; } brackt[0] = FALSE; stage1 = TRUE; nfev[0] = 0; finit = f; dgtest = ftol*dginit; width = LBFGS_stpmax - LBFGS_stpmin; width1 = width/p5; for ( j = 0 ; j < n ; j++ ) { wa [j] = x [j]; } /* The variables stx, fx, dgx contain the values of the step, function, and directional derivative at the best step. The variables sty, fy, dgy contain the value of the step, function, and derivative at the other endpoint of the interval of uncertainty. The variables stp, f, dg contain the values of the step, function, and derivative at the current step. */ stx[0] = 0; fx[0] = finit; dgx[0] = dginit; sty[0] = 0; fy[0] = finit; dgy[0] = dginit; } while ( TRUE ) { if ( info[0] != -1 ) { /* Set the minimum and maximum steps to correspond to the present interval of uncertainty. */ if ( brackt[0] ) { stmin = FMIN ( stx[0] , sty[0] ); stmax = FMAX ( stx[0] , sty[0] ); } else { stmin = stx[0]; stmax = stp[0] + xtrapf * ( stp[0] - stx[0] ); } /* Force the step to be within the bounds stpmax and stpmin.*/ stp[0] = FMAX ( stp[0] , LBFGS_stpmin ); stp[0] = FMIN ( stp[0] , LBFGS_stpmax ); /* If an unusual termination is to occur then let stp be the lowest point obtained so far. */ if ( ( brackt[0] && ( stp[0] <= stmin || stp[0] >= stmax ) ) || nfev[0] >= maxfev - 1 || infoc[0] == 0 || ( brackt[0] && stmax - stmin <= xtol * stmax ) ) stp[0] = stx[0]; /* Evaluate the function and gradient at stp and compute the directional derivative. We return to main program to obtain F and G. */ for ( j = 0 ; j < n ; j++ ) x [j] = wa [j] + stp[0] * s [is0+j]; info[0]=-1; return; } info[0]=0; nfev[0] = nfev[0] + 1; dg = 0; for ( j = 0 ; j < n ; j++ ) { dg = dg + g [j] * s [is0+j]; } ftest1 = finit + stp[0]*dgtest; /* Test for convergence.*/ if ( ( brackt[0] && ( stp[0] <= stmin || stp[0] >= stmax ) ) || infoc[0] == 0) info[0] = 6; if ( stp[0] == LBFGS_stpmax && f <= ftest1 && dg <= dgtest ) info[0] = 5; if ( stp[0] == LBFGS_stpmin && ( f > ftest1 || dg >= dgtest ) ) info[0] = 4; if ( nfev[0] >= maxfev ) info[0] = 3; if ( brackt[0] && stmax - stmin <= xtol * stmax ) info[0] = 2; if ( f <= ftest1 && fabs ( dg ) <= LBFGS_gtol * ( - dginit ) ) info[0] = 1; /* Check for termination.*/ if ( info[0] != 0 ) return; /* In the first stage we seek a step for which the modified function has a nonpositive value and nonnegative derivative. */ if ( stage1 && f <= ftest1 && dg >= FMIN ( ftol , LBFGS_gtol ) * dginit ) stage1 = FALSE; /* * A modified function is used to predict the step only if we have not obtained a step for which the modified function has a nonpositive function value and nonnegative derivative, and if a lower function value has been obtained but the decrease is not sufficient. */ if ( stage1 && f <= fx[0] && f > ftest1 ) { /* Define the modified function and derivative values.*/ fm = f - stp[0]*dgtest; fxm[0] = fx[0] - stx[0]*dgtest; fym[0] = fy[0] - sty[0]*dgtest; dgm = dg - dgtest; dgxm[0] = dgx[0] - dgtest; dgym[0] = dgy[0] - dgtest; /* Call cstep to update the interval of uncertainty and to compute the new step. */ mcstep ( stx , fxm , dgxm , sty , fym , dgym , stp , fm , dgm , brackt , stmin , stmax , infoc ); /* Reset the function and gradient values for f.*/ fx[0] = fxm[0] + stx[0]*dgtest; fy[0] = fym[0] + sty[0]*dgtest; dgx[0] = dgxm[0] + dgtest; dgy[0] = dgym[0] + dgtest; } else { /* Call mcstep to update the interval of uncertainty and to compute the new step. */ mcstep ( stx , fx , dgx , sty , fy , dgy , stp , f , dg , brackt , stmin , stmax , infoc ); } /* Force a sufficient decrease in the size of the interval of uncertainty. */ if ( brackt[0] ) { if ( fabs ( sty[0] - stx[0] ) >= p66 * width1 ) stp[0] = stx[0] + p5 * ( sty[0] - stx[0] ); width1 = width; width = fabs ( sty[0] - stx[0] ); } } } /**************************************************************************/ static void arrayCopy(gdouble* a,gdouble*b,gint n) { gint i; for(i=0;idaxpy in lbfgs.f. * There could well be faster ways to carry out this operation; this * code is a straight translation from the Fortran. */ static void daxpy ( gint n , gdouble da , gdouble dx[] , gint ix0, gint incx , gdouble dy[] , gint iy0, gint incy ) { gint i, ix, iy, m, mp1; if ( n <= 0 ) return; if ( da == 0 ) return; if ( ! ( incx == 1 && incy == 1 ) ) { ix = 1; iy = 1; if ( incx < 0 ) ix = ( - n + 1 ) * incx + 1; if ( incy < 0 ) iy = ( - n + 1 ) * incy + 1; for ( i = 0 ; i < n ; i++ ) { dy [iy0+iy] = dy [iy0+iy] + da * dx [ix0+ix]; ix = ix + incx; iy = iy + incy; } return; } m = n % 4; if ( m != 0 ) { for ( i = 0 ; i < m ; i++ ) dy [iy0+i] = dy [iy0+i] + da * dx [ix0+i]; if ( n < 4 ) return; } mp1 = m + 1; for ( i = mp1-1 ; i < n ; i += 4 ) { dy [iy0+i] = dy [iy0+i] + da * dx [ix0+i]; dy [iy0+i + 1] = dy [iy0+i + 1] + da * dx [ix0+i + 1]; dy [iy0+i + 2] = dy [iy0+i + 2] + da * dx [ix0+i + 2]; dy [iy0+i + 3] = dy [iy0+i + 3] + da * dx [ix0+i + 3]; } return; } /** Compute the dot product of two vectors. * Adapted from the subroutine ddot in lbfgs.f. * There could well be faster ways to carry out this operation; this * code is a straight translation from the Fortran. */ static gdouble ddot ( gint n, gdouble dx[], gint ix0, gint incx, gdouble dy[], gint iy0, gint incy ) { gdouble dtemp; gint i, ix, iy, m, mp1; dtemp = 0; if ( n <= 0 ) return 0; if ( !( incx == 1 && incy == 1 ) ) { ix = 1; iy = 1; if ( incx < 0 ) ix = ( - n + 1 ) * incx + 1; if ( incy < 0 ) iy = ( - n + 1 ) * incy + 1; for ( i = 0 ; i < n ; i++ ) { dtemp = dtemp + dx [ix0+ix] * dy [iy0+iy]; ix = ix + incx; iy = iy + incy; } return dtemp; } m = n % 5; if ( m != 0 ) { for ( i = 0 ; i < m ; i++ ) dtemp = dtemp + dx [ix0+i] * dy [iy0+i]; if ( n < 5 ) return dtemp; } mp1 = m + 1; for ( i = mp1-1 ; i < n ; i += 5 ) { dtemp += dx [ix0+i] * dy [ iy0+i] + dx [ix0+i + 1] * dy [iy0+i + 1] + dx [ix0+i + 2] * dy [iy0+i + 2] + dx [ix0+i + 3] * dy [iy0+i + 3] + dx [ix0+i + 4] * dy [iy0+i + 4]; } return dtemp; } /**************************************************************************/ static gint lbfgs( gint n , gint m , gdouble x[] , gdouble f , gdouble g[] , gint diagco , gdouble diag[] , gdouble eps , gdouble xtol , gint maxLines,gint iflag[] ) { gint execute_entire_while_loop = FALSE; static gdouble gtol = 0.8; static gdouble* solution_cache = NULL; static gdouble gnorm = 0, stp1 = 0, ftol = 0; static gdouble stp[1]; static gdouble ys = 0, yy = 0, sq = 0, yr = 0, beta = 0, xnorm = 0; static gint iter = 0, nfun = 0, point = 0, ispt = 0, iypt = 0, maxfev = 0; static gint info[1]; static gint bound = 0, npt = 0, cp = 0, i = 0; static gint nfev[1]; static gint inmc = 0, iycn = 0, iscn = 0; static gint finish = FALSE; static gdouble* w = NULL; static gint wlength = 0; static gint cacheLength = 0; if ( w == NULL || wlength != n*(2*m+1)+2*m ) { if(w) g_free(w); wlength = n*(2*m+1)+2*m; w = g_malloc(wlength*sizeof(gdouble)); } if ( solution_cache == NULL || cacheLength != n ) { if(solution_cache) g_free(solution_cache); cacheLength = n; solution_cache = g_malloc(cacheLength*sizeof(gdouble)); } if ( iflag[0] == 0 ) { /* Initialize.*/ arrayCopy(x,solution_cache,n); iter = 0; if ( n <= 0 || m <= 0 ) { iflag[0]= -3; printf(_("Improper input parameters (n or m are not positive.)") ); } if ( gtol <= 0.0001 ) { printf( _( "lbfgs: gtol is less than or equal to 0.0001." "It has been reset to 0.9." ) ); gtol= 0.9; } nfun= 1; point= 0; finish= FALSE; if ( diagco ) { for ( i = 0 ; i < n ; i++ ) { if ( diag [i] <= 0 ) { iflag[0]=-2; printf( _( "The %d-th diagonal element of the inverse" " hessian approximation is not positive.") ,i ); } } } else { for ( i = 0 ; i < n ; i++) diag [i] = 1; } ispt= n+2*m; iypt= ispt+n*m; for ( i = 0 ; i < n ; i++ ) w [ispt + i] = - g [i] * diag [i]; gnorm = sqrt ( ddot ( n , g , 0, 1 , g , 0, 1 ) ); stp1= 1/gnorm; ftol= 0.0001; maxfev= maxLines; execute_entire_while_loop = TRUE; } while ( TRUE ) { if ( execute_entire_while_loop ) { iter= iter+1; info[0]=0; bound=iter-1; if ( iter != 1 ) { if ( iter > m ) bound = m; ys = ddot ( n , w , iypt + npt , 1 , w , ispt + npt , 1 ); if ( ! diagco ) { yy = ddot( n , w , iypt + npt , 1 , w , iypt + npt , 1 ); for ( i = 0 ; i < n ; i++ ) diag [i] = ys / yy; } else { iflag[0]=2; return 1; } } } if ( execute_entire_while_loop || iflag[0] == 2 ) { if ( iter != 1 ) { if ( diagco ) { for ( i = 0 ; i < n ; i++ ) { if ( diag [i] <= 0 ) { iflag[0]=-2; printf( _( "The %d-th diagonal element" " of the inverse hessian approximation" " is not positive.") , i); } } } cp= point; if ( point == 0 ) cp = m; w [ n + cp -1] = 1 / ys; for ( i = 0 ; i < n ; i++ ) w [i] = - g [i]; cp= point; for ( i = 0 ; i < bound ; i++ ) { cp=cp-1; if ( cp == - 1 ) cp = m - 1; sq = ddot ( n , w , ispt + cp * n , 1 , w , 0 , 1 ); inmc=n+m+cp+1; iycn=iypt+cp*n; w [ inmc -1] = w [ n + cp + 1 -1] * sq; daxpy ( n , - w [ inmc -1] , w , iycn , 1 , w , 0 , 1 ); } for ( i = 0 ; i < n ; i++ ) w [i] = diag [i] * w [i]; for ( i = 0 ; i < bound ; i++ ) { yr = ddot ( n , w , iypt + cp * n , 1 , w , 0 , 1 ); beta = w [ n + cp + 1 -1] * yr; inmc=n+m+cp+1; beta = w [ inmc -1] - beta; iscn=ispt+cp*n; daxpy ( n , beta , w , iscn , 1 , w , 0 , 1 ); cp=cp+1; if ( cp == m ) cp = 0; } for ( i = 0 ; i < n ; i++ ) w [ispt + point * n + i] = w [i]; } nfev[0]=0; stp[0]=1; if ( iter == 1 ) stp[0] = stp1; for ( i = 0 ; i < n ; i++ ) w [i] = g [i]; } mcsrch( n , x , f , g , w , ispt + point * n , stp , ftol , xtol ,maxfev , info , nfev , diag ); if ( info[0] == - 1 ) { iflag[0]=1; return 1; } if ( info[0] != 1 ) { iflag[0]=-1; printf( _( "Line search failed. See documentation of routine mcsrch.\n" " Error return of line search: info = %d Possible causes:\n" " function or gradient are incorrect, or incorrect tolerances.\n" ) ,info[0]); return 0; } nfun= nfun + nfev[0]; npt=point*n; for ( i = 0; i < n ; i++ ) { w [ispt + npt + i] = stp[0] * w [ispt + npt + i]; w [iypt + npt + i] = g [i] - w [i]; } point=point+1; if ( point == m ) point = 0; gnorm = sqrt ( ddot ( n , g , 0 , 1 , g , 0 , 1 ) ); xnorm = sqrt ( ddot ( n , x , 0 , 1 , x , 0 , 1 ) ); xnorm = FMAX ( 1.0 , xnorm ); if ( gnorm / xnorm <= eps ) finish = TRUE; arrayCopy( x,solution_cache,n); if ( finish ) { iflag[0]=0; return 0; } /* from now on, execute whole loop*/ execute_entire_while_loop = TRUE; } } GabeditSrc250/src/MolecularMechanics/ForceField.h0000644000175100017510000000723413130665225022201 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_FORCEFIELD_H__ #define __GABEDIT_FORCEFIELD_H__ #define STRETCHDIM 4 /* a1 a2 Force Re */ #define BENDDIM 5 /* a1 a2 a3 Force Theta0 */ #define DIHEDRALDIM 8 /*a1 a2 a3 a4 Idiv Pk Phase Pn */ #define IMPROPERDIHEDRALDIM 7 /*a1 a2 a3 a4 Pk Phase Pn */ #define NONBONDEDDIM 5 /* a1 a2 Aij Bij CoulombFactor */ #define HYDROGENBONDEDDIM 4 /* a1 a2 Cij Dij */ #define RATTLEDIM 3 /* a1 a2 r12 */ #define PAIRWISEDIM 8 /* a1 a2 A Beta C6 C8 C10 b : potential = A*exp(-Beta*r)-Somme C2n*f2n/r**(2*n) + Zi*Zj/r f2n = 1 - exp(-b*r)*somme((b*r)**k/k!,k=0..2*n) */ typedef struct _ForceField ForceField; typedef struct _ForceFieldClass ForceFieldClass; typedef struct _ForceFieldOptions ForceFieldOptions; typedef enum { AMBER, UFF, PAIRWISE } ForceFieldTypes; typedef enum { NOCONSTRAINTS = 0, BONDSCONSTRAINTS = 1, BONDSANGLESCONSTRAINTS = 2 } ForceFieldConstraints; struct _ForceFieldOptions { ForceFieldTypes type; gboolean bondStretch;/* For Amber */ gboolean angleBend;/* For Amber */ gboolean dihedralAngle;/* For Amber */ gboolean improperTorsion;/* For Amber */ gboolean nonBonded;/* For Amber */ gboolean hydrogenBonded;/* For Amber */ gboolean coulomb; /* For Amber and Pair-Wise */ gboolean vanderWals; /* For Ionic */ ForceFieldConstraints rattleConstraints;/* rattle constraints */ }; struct _ForceField { Molecule molecule; ForceFieldClass* klass; gint numberOfStretchTerms; gint numberOfBendTerms; gint numberOfDihedralTerms; gint numberOfImproperTorsionTerms; gint numberOfNonBonded; gint numberOfHydrogenBonded; gint numberOfRattleConstraintsTerms; gdouble* bondStretchTerms[STRETCHDIM]; gdouble* angleBendTerms[BENDDIM]; gdouble* dihedralAngleTerms[DIHEDRALDIM]; gdouble* improperTorsionTerms[IMPROPERDIHEDRALDIM]; gdouble* nonBondedTerms[NONBONDEDDIM]; gdouble* hydrogenBondedTerms[HYDROGENBONDEDDIM]; gint numberOfPairWise; gdouble* pairWiseTerms[PAIRWISEDIM]; gdouble* rattleConstraintsTerms[RATTLEDIM]; ForceFieldOptions options; }; struct _ForceFieldClass { void (*calculateGradient)(ForceField* forceField); void (*calculateEnergy)(ForceField* forceField); gdouble (*calculateEnergyTmp)(ForceField* forceField,Molecule* m); }; ForceField newForceField(); void freeForceField(ForceField* forceField); ForceField copyForceField(ForceField* forceField); #endif /* __GABEDIT_FORCEFIELD_H__ */ GabeditSrc250/src/MolecularMechanics/CreatePersonalMMFile.h0000644000175100017510000000031713130665225024133 0ustar alloucheallouche #ifndef __GABEDIT_CREATEPERSONALMMFILE_H__ #define __GABEDIT_CREATEPERSONALMMFILE_H__ void createPersonalParametersFile(AmberParameters* amberParameters); #endif /* __GABEDIT_CREATEPERSONALMMFILE_H__ */ GabeditSrc250/src/MolecularMechanics/SteepestDescent.c0000644000175100017510000001467113130665225023277 0ustar alloucheallouche/* SteepestDescent.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/AtomsProp.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "Atom.h" #include "Molecule.h" #include "ForceField.h" #include "SteepestDescent.h" static void Minimize(SteepestDescent* steepestDescent); /**********************************************************************/ void runSteepestDescent( SteepestDescent* steepestDescent, ForceField* forceField, gint updateFrequency, gint maxIterations, gdouble epsilon, gint maxLines ) { steepestDescent->forceField = forceField; steepestDescent->numberOfAtoms = forceField->molecule.nAtoms; steepestDescent->updateFrequency = updateFrequency; steepestDescent->maxIterations = maxIterations; steepestDescent->updateNumber = 0; steepestDescent->epsilon = epsilon; steepestDescent->rmsDeplacment = 0; steepestDescent->maxDeplacment = 0; steepestDescent->gradientNorm = 0; steepestDescent->maxLines=maxLines; Minimize(steepestDescent); } /**********************************************************************/ void freeSteepestDescent(SteepestDescent* steepestDescent) { steepestDescent->forceField = NULL; steepestDescent->numberOfAtoms = 0; steepestDescent->updateFrequency = 0; steepestDescent->maxIterations = 0; steepestDescent->updateNumber = 0; steepestDescent->epsilon = 0; steepestDescent->rmsDeplacment = 0; steepestDescent->maxDeplacment = 0; steepestDescent->gradientNorm = 0; steepestDescent->maxLines=0; } /**********************************************************************/ static void Minimize(SteepestDescent* steepestDescent) { gdouble energy; gint iteration = 0; gdouble lastGradientNorm = 1; gdouble term = 1; gchar* str = g_strdup(" "); gint i; gint j; gdouble f0,f1; gint ii; gdouble fg; steepestDescent->updateNumber = 0; steepestDescent->forceField->klass->calculateGradient(steepestDescent->forceField); steepestDescent->gradientNorm = 0; for ( i = 0; i < steepestDescent->numberOfAtoms; i++ ) for(j=0;j<3;j++) steepestDescent->gradientNorm += steepestDescent->forceField->molecule.gradient[j][i] * steepestDescent->forceField->molecule.gradient[j][i]; lastGradientNorm = sqrt( steepestDescent->gradientNorm ); while( ( lastGradientNorm > steepestDescent->epsilon ) && ( iteration++ < steepestDescent->maxIterations ) ) { if(StopCalcul) break; steepestDescent->forceField->klass->calculateGradient(steepestDescent->forceField); steepestDescent->gradientNorm = 0; for ( i = 0; i < steepestDescent->numberOfAtoms; i++ ) for(j=0;j<3;j++) steepestDescent->gradientNorm += steepestDescent->forceField->molecule.gradient[j][i] * steepestDescent->forceField->molecule.gradient[j][i]; steepestDescent->gradientNorm = sqrt( steepestDescent->gradientNorm ); if(steepestDescent->gradientNorm<1e-12) break; f0 = steepestDescent->forceField->klass->calculateEnergyTmp( steepestDescent->forceField,&steepestDescent->forceField->molecule); term = 0; fg = 1.0; if(steepestDescent->gradientNorm>1) fg = 1.0/steepestDescent->gradientNorm; for(ii=steepestDescent->maxLines;ii>=1;ii--) { while( gtk_events_pending() ) gtk_main_iteration(); if(StopCalcul) break; term = ii*0.01; for ( i = 0; i < steepestDescent->numberOfAtoms; i++ ) { for(j=0;j<3;j++) steepestDescent->forceField->molecule.atoms[i].coordinates[j]-= fg*term*steepestDescent->forceField->molecule.gradient[j][i]; } f1 = steepestDescent->forceField->klass->calculateEnergyTmp( steepestDescent->forceField,&steepestDescent->forceField->molecule); if(f1numberOfAtoms; i++ ) { for(j=0;j<3;j++) steepestDescent->forceField->molecule.atoms[i].coordinates[ j ] += fg*term*steepestDescent->forceField->molecule.gradient[j][i]; } } if(ii<=1) break; lastGradientNorm = steepestDescent->gradientNorm; if ( steepestDescent->updateNumber++ >= steepestDescent->updateFrequency ) { g_free(str); str = g_strdup_printf(_("Gradient = %f "),(gdouble)steepestDescent->gradientNorm); redrawMolecule(&steepestDescent->forceField->molecule,str); steepestDescent->updateNumber = 0; } } steepestDescent->forceField->klass->calculateGradient(steepestDescent->forceField); steepestDescent->gradientNorm = 0; for ( i = 0; i < steepestDescent->numberOfAtoms; i++ ) for(j=0;j<3;j++) steepestDescent->gradientNorm += steepestDescent->forceField->molecule.gradient[j][i] * steepestDescent->forceField->molecule.gradient[j][i]; steepestDescent->gradientNorm = sqrt( steepestDescent->gradientNorm ); energy = steepestDescent->forceField->klass->calculateEnergyTmp( steepestDescent->forceField,&steepestDescent->forceField->molecule); g_free(str); str = g_strdup_printf(_("Gradient = %f Energy = %f (Kcal/mol)"), (gdouble)steepestDescent->gradientNorm,(gdouble)energy); redrawMolecule(&steepestDescent->forceField->molecule,str); g_free(str); } /********************************************************************************/ GabeditSrc250/src/MolecularMechanics/LoadMMParameters.h0000644000175100017510000000031613130665225023326 0ustar alloucheallouche #ifndef __GABEDIT_LOADMMPARAMETERS_H__ #define __GABEDIT_LOADMMPARAMETERS_H__ gboolean readAmberParameters(AmberParameters* amberParameters,gchar* filename); #endif /* __GABEDIT_LOADMMPARAMETERS_H__ */ GabeditSrc250/src/MolecularMechanics/PDBTemplate.c0000644000175100017510000002112013130665225022261 0ustar alloucheallouche/* PDBTemplate.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../MolecularMechanics/PDBTemplate.h" #include "../MolecularMechanics/LoadPDBTemplate.h" #include "../MolecularMechanics/CreateDefaultPDBTpl.h" #include "../MolecularMechanics/SavePDBTemplate.h" static PDBTemplate* staticPDBTemplate = NULL; /************************************************************/ PDBTemplate* freePDBTpl(PDBTemplate* pdbTemplate) { gint i; gint j; if(!pdbTemplate) return NULL; for(i=0;inumberOfResidues;i++) { if(pdbTemplate->residueTemplates[i].residueName) g_free(pdbTemplate->residueTemplates[i].residueName); for(j=0;jresidueTemplates[i].numberOfTypes;j++) { if(pdbTemplate->residueTemplates[i].typeTemplates[j].pdbType) g_free(pdbTemplate->residueTemplates[i].typeTemplates[j].pdbType); if(pdbTemplate->residueTemplates[i].typeTemplates[j].mmType) g_free(pdbTemplate->residueTemplates[i].typeTemplates[j].mmType); } if(pdbTemplate->residueTemplates[i].typeTemplates) g_free(pdbTemplate->residueTemplates[i].typeTemplates); } if(pdbTemplate->residueTemplates) g_free(pdbTemplate->residueTemplates); g_free(pdbTemplate); return NULL; } /************************************************************/ PDBTemplate* LoadPersonalPDBTpl() { gchar* filename = g_strdup_printf("%s%sPersonalPDBTemplate.tpl", gabedit_directory(), G_DIR_SEPARATOR_S); PDBTemplate* pdbTemplate = NULL; pdbTemplate = g_malloc(sizeof(PDBTemplate)); if(!readPDBTemplate(pdbTemplate,filename)) { g_free(pdbTemplate); pdbTemplate = NULL; } g_free(filename); return pdbTemplate; } /************************************************************/ PDBTemplate* LoadDefaultPDBTpl() { PDBTemplate* pdbTemplate = NULL; gchar* filename = g_strdup_printf("%s%sDefaultPDBTemplate.tpl", gabedit_directory(), G_DIR_SEPARATOR_S); pdbTemplate = g_malloc(sizeof(PDBTemplate)); if(!readPDBTemplate(pdbTemplate,filename)) { g_free(pdbTemplate); pdbTemplate = NULL; } g_free(filename); return pdbTemplate; } /************************************************************/ void LoadPDBTpl() { if(staticPDBTemplate) staticPDBTemplate = freePDBTpl(staticPDBTemplate); staticPDBTemplate = LoadPersonalPDBTpl(); if(!staticPDBTemplate) { staticPDBTemplate = LoadDefaultPDBTpl(); if(!staticPDBTemplate) { if(CreateDefaultPDBTpl()) staticPDBTemplate = LoadDefaultPDBTpl(); } } } /************************************************************/ static gint getResiduePDBTplNumber(gchar* residueName) { gint i; if(!staticPDBTemplate) return -1; for(i=0;inumberOfResidues;i++) { if(!strcmp(staticPDBTemplate->residueTemplates[i].residueName,residueName)) return i; } return -1; } /************************************************************/ static gchar* getmmType(gint residueNumber, gchar* pdbType,gdouble* charge) { gint j; PDBTypeTemplate* typeTemplates = staticPDBTemplate->residueTemplates[residueNumber].typeTemplates; gint numberOfTypes = staticPDBTemplate->residueTemplates[residueNumber].numberOfTypes; gchar* mmType = g_strdup("UNK"); for(j=0;jresidueTemplates[residueNumber].typeTemplates; gint numberOfTypes = staticPDBTemplate->residueTemplates[residueNumber].numberOfTypes; gint nH = 0; for(j=0;j10) break; } return nH; } } return nH; } /************************************************************/ gint getHydrogensFromPDBTpl(gchar* residueName,gchar* pdbType, gchar** hAtoms) { gint nH = 0; gint residueNumber = -1; if(!pdbType) return nH; if(pdbType && (pdbType[0]=='H' || pdbType[0]=='h')) return nH; if(!staticPDBTemplate) return nH; residueNumber = getResiduePDBTplNumber(residueName); if(residueNumber==-1) { residueNumber = getResiduePDBTplNumber("ALLRESIDUE"); if(residueNumber==-1) return nH; else return getHydrogens(residueNumber,pdbType, hAtoms); } else { nH = getHydrogens(residueNumber,pdbType, hAtoms); if(nH == 0) { residueNumber = getResiduePDBTplNumber("ALLRESIDUE"); if(residueNumber==-1) return nH; else return getHydrogens(residueNumber,pdbType, hAtoms); } else return nH; } return nH; } /************************************************************/ PDBTemplate* getPointerPDBTemplate() { return staticPDBTemplate; } /************************************************************/ void setPointerPDBTemplate(PDBTemplate* ptr) { staticPDBTemplate = ptr; } /************************************************************/ void savePersonalPDBTpl(GtkWidget* win) { gchar* filename = g_strdup_printf("%s%sPersonalPDBTemplate.tpl", gabedit_directory(), G_DIR_SEPARATOR_S); if(!savePDBTemplate(staticPDBTemplate,filename) && win) { gchar* t = g_strdup_printf("Sorry, I can not create \"%s\" file",filename); GtkWidget* w = Message(t,"Error",TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(win)); g_free(t); return; } g_free(filename); } /************************************************************/ gchar** getListPDBTypes(gchar* residueName, gint* nlist) { gchar** t = NULL; gint j; gint residueNumber = getResiduePDBTplNumber(residueName); PDBTypeTemplate* typeTemplates = NULL; gint numberOfTypes = 0; *nlist = 0; if(residueNumber==-1) residueNumber = getResiduePDBTplNumber("ALLRESIDUE"); if(residueNumber==-1) return NULL; typeTemplates = staticPDBTemplate->residueTemplates[residueNumber].typeTemplates; numberOfTypes = staticPDBTemplate->residueTemplates[residueNumber].numberOfTypes; t = g_malloc(numberOfTypes*sizeof(gchar*)); for(j=0;j #include #include #include "../Common/Global.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/Fragments.h" #include "../Utils/Transformation.h" #include "../Utils/Constants.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Vector3d.h" #include "../Utils/HydrogenBond.h" #include "../Utils/AtomsProp.h" #include "../MolecularMechanics/CalculTypesAmber.h" /**********************************************************************************************************/ typedef struct _Molecule Molecule; struct _Molecule { gint numberOfAtoms; GeomDef* geom; GList* bondsList; gint* numberOfDoubleBonds; gint* numberOfTripleBonds; gint **connected; }; static gboolean *inStack = NULL; static gboolean doneRing = FALSE; static gint nBondsRing = 0; /************************************************************************/ static gboolean bonded(GeomDef* geom, gint i,gint j) { gdouble distance; V3d dif; dif[0] = geom[i].X - geom[j].X; dif[1] = geom[i].Y - geom[j].Y; dif[2] = geom[i].Z - geom[j].Z; distance = v3d_length(dif); if(distance<(geom[i].Prop.covalentRadii + geom[j].Prop.covalentRadii)) return TRUE; else return FALSE; } /************************************************************************/ static gboolean hbonded(GeomDef* geom, gint nAtoms, gint i,gint j) { gdouble minDistanceH; gdouble maxDistanceH; gdouble minDistanceH2; gdouble maxDistanceH2; gdouble minAngleH; gdouble maxAngleH; gdouble distance2; gdouble angle; gchar* strAngle; Point A; Point B; gdouble dx, dy, dz; gint k; gint kH; gint kO; if(!strcmp(geom[i].Prop.symbol,"H")) { kH = i; kO = j; if(!atomCanDoHydrogenBond(geom[j].Prop.symbol)) return FALSE; } else { if(!strcmp(geom[j].Prop.symbol,"H")) { kH = j; kO = i; if(!atomCanDoHydrogenBond(geom[i].Prop.symbol)) return FALSE; } else return FALSE; } minDistanceH = getMinDistanceHBonds(); minDistanceH2 = minDistanceH*minDistanceH*ANG_TO_BOHR*ANG_TO_BOHR; maxDistanceH = getMaxDistanceHBonds(); maxDistanceH2 = maxDistanceH*maxDistanceH*ANG_TO_BOHR*ANG_TO_BOHR; minAngleH = getMinAngleHBonds(); maxAngleH = getMaxAngleHBonds(); dx = geom[i].X - geom[j].X; dy = geom[i].Y - geom[j].Y; dz = geom[i].Z - geom[j].Z; distance2 = (dx*dx+dy*dy+dz*dz); if(distance2maxDistanceH2) return FALSE; for(k=0;k=minAngleH &&angle<=maxAngleH) return TRUE; } return FALSE; } /************************************************************************/ static void freeBonds(GList* bondsList) { GList* list; if(!bondsList) return; for(list=bondsList;list!=NULL;list=list->next) { if(list->data) g_free(list->data); } g_list_free(bondsList); bondsList = NULL; } /************************************************************************/ static void setMultipleBonds(Molecule* m, gint* nBonds) { GList* list; GList* bondsList = m->bondsList; GeomDef* geom = m->geom; if(!bondsList) return; for(list=bondsList;list!=NULL;list=list->next) { BondType* data=(BondType*)list->data; gint i = data->n1; gint j = data->n2; if(data->bondType == GABEDIT_BONDTYPE_HYDROGEN) continue; if( nBonds[i] < geom[i].Prop.maximumBondValence -1 && nBonds[j] < geom[j].Prop.maximumBondValence -1 ) { data->bondType = GABEDIT_BONDTYPE_TRIPLE; nBonds[i] += 2; nBonds[j] += 2; } else if( nBonds[i] < geom[i].Prop.maximumBondValence && nBonds[j] < geom[j].Prop.maximumBondValence ) { data->bondType = GABEDIT_BONDTYPE_DOUBLE; nBonds[i] += 1; nBonds[j] += 1; } } } /************************************************************************/ static gboolean buildBonds(Molecule* m, gboolean buildHbonds) { gint i; gint j; GeomDef* geom = m->geom; gint nAtoms = m->numberOfAtoms; gint* nBonds = NULL; m->bondsList = NULL; if(nAtoms<1) return FALSE; nBonds =g_malloc(nAtoms*sizeof(gint)); for(i = 0;in1 = i; A->n2 = j; nBonds[i]++; nBonds[j]++; A->bondType = GABEDIT_BONDTYPE_SINGLE; m->bondsList = g_list_append(m->bondsList,A); } else if(buildHbonds && hbonded(geom, nAtoms, i,j)) { BondType* A=g_malloc(sizeof(BondType)); A->n1 = i; A->n2 = j; A->bondType = GABEDIT_BONDTYPE_HYDROGEN; m->bondsList = g_list_append(m->bondsList,A); } } setMultipleBonds(m, nBonds); g_free(nBonds); nBonds = NULL; return TRUE; } /************************************************************************/ static void freeStack() { if(inStack) g_free(inStack); inStack = NULL; } /************************************************************************/ static void initStack(gint nAtoms) { gint i; if(inStack) freeStack(); inStack = g_malloc(nAtoms*sizeof(gboolean)); for(i=0;iconnected) return; for(i=0;i< m->numberOfAtoms;i++) { if(m->connected[i]) g_free(m->connected[i]); } g_free(m->connected); m->connected = NULL; } /************************************************************************/ /* static void printConnections(Molecule* m) { gint nAtoms = m->numberOfAtoms; gint i = 0; gint j = 0; gint** connected = m->connected; for(i=0;inumberOfAtoms; GList* bondsList = m->bondsList; gint i = 0; gint k = 0; gint** connected = NULL; if(!bondsList) return; connected = g_malloc(nAtoms*sizeof(gint*)); for(i=0;inext) { BondType* data=(BondType*)list->data; gint i = data->n1; gint j = data->n2; connected[i][0]++; connected[j][0]++; k = connected[i][0]; connected[i][k]=j; k = connected[j][0]; connected[j][k]=i; } m->connected = connected; } /************************************************************************/ static gboolean inRingRecursive(Molecule* m, gint currentAtom, gint rootAtom, gint ringSize, gboolean begin) { gint i; gint** connected = m->connected; if(!begin) inStack[currentAtom] = TRUE; if (doneRing) return TRUE; else if ( ( currentAtom == rootAtom ) && ( nBondsRing == ringSize ) ) return TRUE; else if ( ( currentAtom == rootAtom ) && ( nBondsRing > 2 ) && ( ringSize < 3 ) ) return TRUE; if ( nBondsRing < ringSize ) { gint numberOfConnections = connected[ currentAtom ][ 0 ]; for (i = 1; i <= numberOfConnections; i++ ) { gint newAtom = connected[currentAtom][i]; if ( ! ( inStack[newAtom] ) ) { nBondsRing++; doneRing = inRingRecursive( m, newAtom, rootAtom, ringSize, FALSE); } if (doneRing) return TRUE; } } inStack[currentAtom] = FALSE; nBondsRing--; return FALSE; } /************************************************************************/ static gboolean atomInRing(Molecule* m, gint numAtom, gint ringSize) { doneRing = FALSE; nBondsRing = 0; initStack(m->numberOfAtoms); if(!m->connected) return FALSE; return inRingRecursive( m, numAtom, numAtom, ringSize, TRUE); } /************************************************************************/ static gboolean allCarbon(Molecule* m) { GeomDef* geom = m->geom; gint i; for(i=0;inumberOfAtoms;i++) if(inStack[i] && strcmp(geom[i].Prop.symbol,"C" )) return FALSE; return TRUE; } /************************************************************************/ static gchar* subString(gchar* str, gint begin, gint end) { gchar* res = NULL; gint i; gint l = strlen(str); gint l2 = 0; if(lbondsList; if(!bondsList) return FALSE; for(list=bondsList;list!=NULL;list=list->next) { BondType* data=(BondType*)list->data; gint i = data->n1; gint j = data->n2; if( (i== atom1 && j == atom2 ) || (j== atom1 && i == atom2 ) ) { if(data->bondType == type ) return TRUE; } } return FALSE; } /************************************************************************/ static gint numberOfConnectedTypes( Molecule* m, gint atomA, gchar* name ) { GeomDef* geom = m->geom; gint numberOfConnections = m->connected[ atomA ][ 0 ]; gint numberMatching = 0; gint i; if(!name) return 0; if (!strcmp(name,"*")) return numberOfConnections; for ( i = 1; i <= numberOfConnections; i++ ) { gint atomB = m->connected[ atomA ][ i ]; if ( !strcmp(geom[atomB].Prop.symbol,name )) numberMatching++; } return( numberMatching ); } /************************************************************************/ gint sp(Molecule*m, gint atomNumber) { gint i; gint spHybridation = 0; gint totalNumberOfBonds = 0; if(!m->connected) return 0; totalNumberOfBonds = m->connected[ atomNumber ][ 0 ]; if ( m->numberOfTripleBonds[atomNumber] >= 1 ) return 1; else if ( m->numberOfDoubleBonds[atomNumber] >= 2 ) return 1; else if ( m->numberOfDoubleBonds[atomNumber] == 1 ) spHybridation += 2; for ( i = 1; i < totalNumberOfBonds; i++ ) { gint bondedToAtomNumber = m->connected[ atomNumber ][ i ]; if (m->numberOfTripleBonds[bondedToAtomNumber] >= 1 ) return 1; else if ( bondedType( m, bondedToAtomNumber, atomNumber, GABEDIT_BONDTYPE_DOUBLE )) spHybridation += 2; } if ( ( spHybridation == 2 ) && ( totalNumberOfBonds == 3 ) ) return 2; else if ( ( spHybridation == 4 ) && ( totalNumberOfBonds == 2 ) ) return 1; return ( totalNumberOfBonds - 1 ); } /************************************************************************/ static gboolean isConnectedTo( Molecule* m, gint atomA, gchar* expression, gboolean initialize ) { static gboolean* inStack = NULL; gint i; gint numberOfConnections; gchar* rootAtom; gchar* restOfExpression; gchar firstChar; gchar lastChar; gint openClose = 0; gint begin = 0; gint multiplicity = 1; gint bondOrder = 0; gchar* index; GList* stack = NULL; GeomDef* geom = m->geom; if ( initialize ) { inStack = g_realloc(inStack, m->numberOfAtoms*sizeof(gboolean)); for( i = 0; i < m->numberOfAtoms; i++ ) inStack[ i ] = FALSE; } inStack[ atomA ] = TRUE; if ( expression == NULL ) return TRUE; if(!m->connected) return FALSE; numberOfConnections = m->connected[ atomA ][ 0 ]; /* printf("numberOfConnections = %d\n",numberOfConnections);*/ rootAtom = g_strdup(expression); restOfExpression = NULL; index = strstr(expression, "(" ); if ( index != expression ) { /* find the new root atom*/ if ( index != NULL) { gint n0 = index - expression; gint n1 = strlen(expression)-1; rootAtom = subString(expression, 0, n0-1); /* "N", e.g. */ restOfExpression = subString(expression, n0, n1); /* "(C)(C)", e.g. */ } else restOfExpression = NULL; /* if(!strcmp(geom[atomA].Prop.symbol,"N")) { if(expression) printf("expression = %s\n", expression); printf("rootAtom = %s\n", rootAtom); if(restOfExpression) printf("restOfExpression = %s\n", restOfExpression); else printf("restOfExpression = NULL\n"); } */ firstChar = getCharFromString(rootAtom, 0); if(rootAtom) lastChar = getCharFromString(rootAtom, strlen(rootAtom) - 1); else lastChar = '\0'; if ( firstChar != '\0' ) { gchar* rA = rootAtom; if ( firstChar == '-' ) { bondOrder = 1; rootAtom = subString(rootAtom, 1, -1); if(rA) g_free(rA); } else if ( firstChar == '=' ) { bondOrder = 2; rootAtom = subString(rootAtom, 1, -1); if(rA) g_free(rA); } else if ( firstChar == '~') { bondOrder = 2; rootAtom = subString(rootAtom, 1, -1); if(rA) g_free(rA); } else if ( firstChar == '#' ) { bondOrder = 3; rootAtom = subString(rootAtom, 1, -1); if(rA) g_free(rA); } } if ( lastChar != '\0') { gchar* rA = rootAtom; if ( lastChar == '2' ) { multiplicity = 2; rootAtom = subString(rootAtom, 0, strlen(rootAtom) - 2); if(rA) g_free(rA); } else if ( lastChar == '3' ) { multiplicity = 3; rootAtom = subString(rootAtom, 0, strlen(rootAtom) - 2); if(rA) g_free(rA); } else if ( lastChar == '4' ) { multiplicity = 4; rootAtom = subString(rootAtom, 0, strlen(rootAtom) - 2); if(rA) g_free(rA); } } if ( multiplicity > numberOfConnectedTypes( m, atomA, rootAtom ) ) return FALSE; for (i = 1; i <= numberOfConnections; i++ ) { gint atomB = m->connected[ atomA ][ i ]; if ( inStack[ atomB ] ) continue; if ( !strcmp(geom[atomB ].Prop.symbol,rootAtom) || ( !strcmp(rootAtom,"*" ) ) ) { if ( isConnectedTo( m, atomB, restOfExpression, FALSE ) ) { if ( bondOrder == 0 ) return TRUE; else if ( bondOrder == 3 ) { if ( ( bondedType( m, atomA, atomB, GABEDIT_BONDTYPE_TRIPLE ) ) || ( sp(m, atomA ) == 1 ) || ( sp(m, atomB ) == 1 ) ) return TRUE; } else if ( bondOrder == 2 ) { if ( ( bondedType( m, atomA, atomB, GABEDIT_BONDTYPE_DOUBLE ) ) || ( sp(m, atomA ) == 2 ) || ( sp(m, atomB ) == 2 ) ) return TRUE; } else if ( bondOrder == 1 ) { if ( sp(m, atomA ) + sp(m, atomB ) >= 4 ) return TRUE; } } } } return FALSE; } /* below, push (C)(C) onto stack */ restOfExpression = g_strdup(expression); stack = NULL; openClose = 0; for (i = 0; i < strlen(restOfExpression); i++ ) { if ( restOfExpression[i] == '(' ) { if ( openClose++ == 0 ) begin = i + 1; } else if ( restOfExpression[i] == ')' ) { if ( --openClose == 0 ) stack = g_list_append(stack,subString(expression, begin, i-1) ); } } while ( stack != NULL ) { gchar* newExpression = NULL; GList* last = g_list_last(stack); newExpression = (gchar*)(last->data); stack = g_list_remove(stack, newExpression); if ( ! ( isConnectedTo( m, atomA, newExpression, FALSE ) ) ) return FALSE; } return TRUE; } /**********************************************************************************************************/ static gchar* getAmberTypeOfAtom(Molecule* m, gint atomNumber) { GeomDef* geom = m->geom; /* printf("Atom number = %d symbol = %s\n",atomNumber, geom[atomNumber].Prop.symbol);*/ if ( !strcmp(geom[atomNumber].Prop.symbol,"H" )) { if ( isConnectedTo( m, atomNumber, "N(*4)", TRUE ) ) return "H"; else if ( isConnectedTo( m, atomNumber, "N(H)(C(N(H2)))", TRUE ) ) return "H"; else if ( ( isConnectedTo( m, atomNumber, "N(C(N2))", TRUE ) ) && isConnectedTo( m, atomNumber, "N(C(N(H2))(N(H2)))", TRUE ) ) return "H"; else if ( isConnectedTo( m, atomNumber, "C", TRUE ) ) { gint numberOfConnections = m->connected[ atomNumber ][ 0 ]; gint i; for (i = 1; i <= numberOfConnections; i++ ) { gint newAtom = m->connected[atomNumber][i]; if(!strcmp(geom[newAtom].Prop.symbol,"C" )) { /* printf("atom = %d sym = %s\n", newAtom,geom[newAtom].Prop.symbol);*/ if(atomInRing( m, newAtom, 6 ) && allCarbon(m)) return "HA"; else if ( isConnectedTo( m, newAtom, "N2", TRUE ) ) return "H5"; else if ( isConnectedTo( m, newAtom, "N(C)", TRUE ) ) return "H4"; else if ( isConnectedTo( m, newAtom, "N(H3)", TRUE ) ) return "HP"; else if ( isConnectedTo( m, newAtom, "N(*)", TRUE ) ) return "H1"; else if ( isConnectedTo( m, newAtom, "S", TRUE ) ) return "H1"; else if ( isConnectedTo( m, newAtom, "O", TRUE ) ) return "H1"; } } return "HC"; } else if ( isConnectedTo( m, atomNumber, "O(H)", TRUE ) ) return "HW"; else if ( isConnectedTo( m, atomNumber, "O", TRUE ) ) return "HO"; else if ( isConnectedTo( m, atomNumber, "S", TRUE ) ) return "HS"; /* else if ( isConnectedTo( m, atomNumber, "N(H)(C(~*))", TRUE ) ) return "H2"; else if ( isConnectedTo( m, atomNumber, "N(H)(C(=N)(-C))", TRUE ) ) return "H2"; else if ( isConnectedTo( m, atomNumber, "N(H)(C(=N)(-N))", TRUE ) ) return "H2"; else if ( isConnectedTo( m, atomNumber, "N(H2)", TRUE ) ) return "H2"; */ else return "H"; } else if ( !strcmp(geom[atomNumber].Prop.symbol,"C" )) { /* printf("sp = %d\n",sp(m, atomNumber ));*/ if ( sp(m, atomNumber ) == 2 ) { if ( ( atomInRing( m, atomNumber, 5 ) ) && ( atomInRing( m, atomNumber, 6 ) ) ) { if ( isConnectedTo( m, atomNumber, "C(N)", TRUE ) ) return "CB"; else if ( isConnectedTo( m, atomNumber, "N(Fe)", TRUE ) ) return "CC"; else if ( isConnectedTo( m, atomNumber, "N", TRUE ) ) return "CN"; else return "CT"; } else if ( atomInRing( m, atomNumber, 5 ) ) { if ( isConnectedTo( m, atomNumber, "(C)(C)(C(N(Fe)))", TRUE ) ) return "CB"; else if ( ( isConnectedTo( m, atomNumber, "(H)(N2)", TRUE ) ) && ( isConnectedTo( m, atomNumber, "(N)(H)(N(C(N(C(N(C))))))", TRUE ) ) ) return "CK"; else if ( isConnectedTo( m, atomNumber,"(N2)(H)", TRUE ) ) return "CR"; else if ( isConnectedTo( m, atomNumber,"(C(H2))(N)", TRUE ) ) return "CC"; else if ( isConnectedTo( m, atomNumber,"C(H2)", TRUE ) ) return "C*"; else if ( isConnectedTo( m, atomNumber,"N(~*)(*)", TRUE ) ) return "CW"; else if ( isConnectedTo( m, atomNumber,"N", TRUE ) ) return "CV"; else return "CT"; } else if (atomInRing( m, atomNumber, 6 ) ) { if ( isConnectedTo( m, atomNumber, "O(H)", TRUE ) ) return "C"; else if ( isConnectedTo( m, atomNumber, "=O", TRUE ) ) return "C"; else if ( isConnectedTo( m, atomNumber, "(N2)(H)", TRUE ) ) return "CQ"; else if ( isConnectedTo( m, atomNumber, "N(H2)", TRUE ) ) return "CA"; else if ( isConnectedTo( m, atomNumber, "C(N(C(=O)))", TRUE ) ) return "CM"; else if ( isConnectedTo( m, atomNumber, "N(C(=O))", TRUE ) ) return "CM"; else return "CA"; } else if ( isConnectedTo( m, atomNumber, "(~O2)", TRUE ) ) return "C"; else if ( isConnectedTo( m, atomNumber, "=O", TRUE ) ) return "C"; else if ( isConnectedTo( m, atomNumber, "(=C)(-S)", TRUE ) ) return "CY"; /*else if ( isConnectedTo( m, atomNumber, "(=C)", TRUE ) ) return "CX";*/ else if ( isConnectedTo( m, atomNumber, "(N3)", TRUE ) ) return "CA"; else return "CT"; } else if ( sp(m, atomNumber ) == 3 ) { if ( isConnectedTo( m, atomNumber, "(N3)", TRUE ) ) return "CA"; else if ( isConnectedTo( m, atomNumber, "=O", TRUE ) ) return "C"; else if ( isConnectedTo( m, atomNumber, "(=C)(-S)", TRUE ) ) return "CY"; /* else if ( isConnectedTo( m, atomNumber, "(=C)", TRUE ) ) return "CT";*/ else return "CT"; } else { if ( isConnectedTo( m, atomNumber, "(N3)", TRUE ) ) return "CA"; else if ( isConnectedTo( m, atomNumber, "=O", TRUE ) ) return "C"; else if ( isConnectedTo( m, atomNumber, "(=C)(-S)", TRUE ) ) return "CY"; /* else if ( isConnectedTo( m, atomNumber, "(=C)", TRUE ) ) return "CX";*/ else if ( isConnectedTo( m, atomNumber, "#C", TRUE ) ) return "CZ"; else return "CT"; } } else if ( !strcmp(geom[atomNumber].Prop.symbol,"N" ) ) { if ( sp(m, atomNumber ) < 3 ) { if ( atomInRing( m, atomNumber, 5 ) ) { if ( ( isConnectedTo( m, atomNumber, "(C3)", TRUE ) ) && ( isConnectedTo( m, atomNumber, "(C)(C(=*))(C(=*))", TRUE ) ) ) return "N*"; else if ( isConnectedTo( m, atomNumber, "(C3)", TRUE ) ) return "N*"; else if ( isConnectedTo( m, atomNumber, "Fe", TRUE ) ) return "NA"; else if ( isConnectedTo( m, atomNumber, "H", TRUE ) ) return "NA"; else return "NB"; } else if (atomInRing( m, atomNumber, 6 ) ) { if ( isConnectedTo( m, atomNumber, "H", TRUE ) ) return "NA"; else if ( ( isConnectedTo( m, atomNumber, "(H)(C2)", TRUE ) ) && ( isConnectedTo( m, atomNumber, "(H)(C(=O))(C(=O))", TRUE ) ) ) return "NA"; else if ( isConnectedTo( m, atomNumber, "(H)(C(=O))(C(=N))", TRUE ) ) return "NA"; else if ( isConnectedTo( m, atomNumber, "(C3)", TRUE ) ) return "N*"; else return "NC"; } else if ( isConnectedTo( m, atomNumber, "-C(=O)", TRUE ) ) { return "N"; } else if ( isConnectedTo( m, atomNumber, "-C(-C(=O))", TRUE ) ) { return "N"; } else if ( isConnectedTo( m, atomNumber, "C(N2)", TRUE ) ) return "N2"; else if ( isConnectedTo( m, atomNumber, "(H2)(C~*)", TRUE ) ) return "N2"; else if ( isConnectedTo( m, atomNumber, "(H2)(C=*)", TRUE ) ) return "N2"; else return "NT"; } else if ( sp(m, atomNumber ) == 3 ) return "N3"; else return "NT"; } else if ( !strcmp(geom[atomNumber].Prop.symbol,"O" )) { if ( isConnectedTo( m, atomNumber, "~C(~O2)", TRUE ) ) { if ( isConnectedTo( m, atomNumber, "H", TRUE ) ) return "OH"; else return "O2"; } else if ( isConnectedTo( m, atomNumber, "H2", TRUE ) ) return "OW"; else if ( isConnectedTo( m, atomNumber, "H", TRUE ) ) return "OH"; else if ( isConnectedTo( m, atomNumber, "=C", TRUE ) ) return "O"; else if ( isConnectedTo( m, atomNumber, "(H)(C(=O))", TRUE ) ) return "OH"; else if ( isConnectedTo( m, atomNumber, "-C2", TRUE ) ) return "OS"; else if ( isConnectedTo( m, atomNumber, "(C(=O))(C)", TRUE ) ) return "OS"; else if ( isConnectedTo( m, atomNumber, "(C)(P)", TRUE ) ) return "OS"; else if ( isConnectedTo( m, atomNumber, "P", TRUE ) ) return "O2"; else return "OS"; } else if ( !strcmp(geom[atomNumber].Prop.symbol,"F" ) ) return "F"; else if ( !strcmp(geom[atomNumber].Prop.symbol,"Na" ) ) return "IP"; else if ( !strcmp(geom[atomNumber].Prop.symbol,"Mg" )) return "MG"; else if ( !strcmp(geom[atomNumber].Prop.symbol,"P" ) ) return "P"; else if ( !strcmp(geom[atomNumber].Prop.symbol,"S" ) ) { if ( isConnectedTo( m, atomNumber, "H", TRUE ) ) return "SH"; else return "S"; } else if ( !strcmp(geom[atomNumber].Prop.symbol,"Cl" )) { if ( !m->connected ) return "CL"; if ( m->connected[ atomNumber ][ 0 ] > 0 ) return "CL"; else return "IM"; } else if ( !strcmp(geom[atomNumber].Prop.symbol,"Ca" ) ) return "C0"; else if ( !strcmp(geom[atomNumber].Prop.symbol,"Fe" ) ) return "FE"; else if ( !strcmp(geom[atomNumber].Prop.symbol,"Cu" ) ) return "CU"; else if ( !strcmp(geom[atomNumber].Prop.symbol,"Br" ) ) return "BR"; else if ( !strcmp(geom[atomNumber].Prop.symbol,"I" ) ) return "I"; return geom[atomNumber].Prop.symbol; } /************************************************************************/ static gint* getNumberOfBonds(Molecule* m, GabEditBondType type) { gint i; gint j; GList* bondsList = m->bondsList; gint nAtoms = m->numberOfAtoms; gint* numberOfBonds = NULL; GList* list = NULL; if(nAtoms<1) return NULL; numberOfBonds =g_malloc(nAtoms*sizeof(gint)); for(i = 0;inext) { BondType* data=(BondType*)list->data; i = data->n1; j = data->n2; if(data->bondType == type) { numberOfBonds[i]++; numberOfBonds[j]++; } } return numberOfBonds; } /**********************************************************************************************************/ static Molecule getMyMolecule(GeomDef* geom, gint nAtoms) { Molecule m; m.numberOfAtoms = nAtoms; m.geom = geom; m.bondsList = NULL; m.connected = NULL; m.numberOfDoubleBonds = NULL; m.numberOfTripleBonds = NULL; buildBonds(&m, FALSE); m.numberOfDoubleBonds = getNumberOfBonds(&m, GABEDIT_BONDTYPE_DOUBLE); m.numberOfTripleBonds = getNumberOfBonds(&m, GABEDIT_BONDTYPE_TRIPLE); buildConnections(&m); /* printConnections(&m);*/ return m; } /**********************************************************************************************************/ static void freeMolecule(Molecule* m) { g_free(m->numberOfDoubleBonds); g_free(m->numberOfTripleBonds); freeConnections(m); freeBonds(m->bondsList); } /**********************************************************************************************************/ void calculTypesAmber(GeomDef* geom, gint nAtoms) { gint i; Molecule m; if(nAtoms<1) return; m = getMyMolecule(geom, nAtoms); for(i=0;iNAtoms<=0) return NULL; geom = g_malloc(F->NAtoms*sizeof(GeomDef)); for(i=0;iNAtoms;i++) geom[i].Prop = prop_atom_get(F->Atoms[i].Symb); for(i=0;iNAtoms;i++) { geom[i].X = F->Atoms[i].Coord[0]; geom[i].Y = F->Atoms[i].Coord[1]; geom[i].Z = F->Atoms[i].Coord[2]; geom[i].Prop = prop_atom_get(F->Atoms[i].Symb); geom[i].mmType =g_strdup(F->Atoms[i].mmType); geom[i].pdbType =g_strdup(F->Atoms[i].pdbType); geom[i].Layer = HIGH_LAYER; geom[i].Variable = FALSE; geom[i].Residue =g_strdup(F->Atoms[i].Residue); geom[i].ResidueNumber= 0; geom[i].show= TRUE; geom[i].Variable= TRUE; geom[i].Charge = F->Atoms[i].Charge; geom[i].N = i+1; geom[i].typeConnections = NULL; } return geom; } /**********************************************************************************************************/ void calculTypesAmberForAFragment(Fragment* F) { gint i; Molecule m; GeomDef* geom = NULL; if(F->NAtoms<1) return; geom = getMyGeomFromFrag(F); if(!geom) return; m = getMyMolecule(geom, F->NAtoms); for(i=0;iNAtoms;i++) { /* */ if(F->Atoms[i].mmType) g_free(F->Atoms[i].mmType); F->Atoms[i].mmType = g_strdup(getAmberTypeOfAtom(&m, i)); } Free_One_Geom(geom,F->NAtoms); freeMolecule(&m); } GabeditSrc250/src/MolecularMechanics/QuasiNewton.h0000644000175100017510000000325213130665225022450 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_QUASINEWTON_H__ #define __GABEDIT_QUASINEWTON_H__ typedef struct _QuasiNewton QuasiNewton; struct _QuasiNewton { ForceField* forceField; gint updateFrequency; gint maxIterations; gint maxLines; gdouble epsilon; gdouble tolerence; }; void freeQuasiNewton(QuasiNewton* quasiNewton); void runQuasiNewton(QuasiNewton* quasiNewton); #endif /* __GABEDIT_QUASINEWTON_H__ */ GabeditSrc250/src/MolecularMechanics/Atom.c0000644000175100017510000000775113130665225021076 0ustar alloucheallouche/* Atom.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "Atom.h" /*****************************************************************/ gdouble getAngle(AtomMol *a1,AtomMol* a2,AtomMol* a3) { gdouble* C1 = a1->coordinates; gdouble* C2 = a2->coordinates; gdouble* C3 = a3->coordinates; gdouble x12, x32, y12, y32, z12, z32, l12, l32, dp; x12 = C1[ 0 ] - C2[ 0 ]; y12 = C1[ 1 ] - C2[ 1 ]; z12 = C1[ 2 ] - C2[ 2 ]; x32 = C3[ 0 ] - C2[ 0 ]; y32 = C3[ 1 ] - C2[ 1 ]; z32 = C3[ 2 ] - C2[ 2 ]; l12 = sqrt( x12 * x12 + y12 * y12 + z12 * z12 ); l32 = sqrt( x32 * x32 + y32 * y32 + z32 * z32 ); if( l12 == 0.0 ) { return 0.0; } if( l32 == 0.0 ) { return 0.0; } dp = ( x12 * x32 + y12 * y32 + z12 * z32 ) / (l12 * l32 ); if ( dp < -1.0 ) dp = -1.0; else if ( dp > 1.0 ) dp = 1.0; return RAD_TO_DEG * acos(dp); } /*****************************************************************/ gdouble getTorsion(AtomMol* a1,AtomMol* a2,AtomMol* a3,AtomMol* a4) { gdouble* C1 = a1->coordinates; gdouble* C2 = a2->coordinates; gdouble* C3 = a3->coordinates; gdouble* C4 = a4->coordinates; gdouble xij, yij, zij; gdouble xkj, ykj, zkj; gdouble xkl, ykl, zkl; gdouble dx, dy, dz; gdouble gx, gy, gz; gdouble bi, bk; gdouble ct, d, ap, app, bibk; xij = C1[ 0 ] - C2[ 0 ]; yij = C1[ 1 ] - C2[ 1 ]; zij = C1[ 2 ] - C2[ 2 ]; xkj = C3[ 0 ] - C2[ 0 ]; ykj = C3[ 1 ] - C2[ 1 ]; zkj = C3[ 2 ] - C2[ 2 ]; xkl = C3[ 0 ] - C4[ 0 ]; ykl = C3[ 1 ] - C4[ 1 ]; zkl = C3[ 2 ] - C4[ 2 ]; dx = yij * zkj - zij * ykj; dy = zij * xkj - xij * zkj; dz = xij * ykj - yij * xkj; gx = zkj * ykl - ykj * zkl; gy = xkj * zkl - zkj * xkl; gz = ykj * xkl - xkj * ykl; bi = dx * dx + dy * dy + dz * dz; bk = gx * gx + gy * gy + gz * gz; ct = dx * gx + dy * gy + dz * gz; bibk = bi * bk; if ( bibk < 1.0e-6 ) return 0; ct = ct / sqrt( bibk ); if( ct < -1.0 ) ct = -1.0; else if( ct > 1.0 ) ct = 1.0; ap = acos( ct ); d = xkj*(dz*gy-dy*gz) + ykj*(dx*gz-dz*gx) + zkj*(dy*gx-dx*gy); if( d < 0.0 ) ap = -ap; ap = PI - ap; app = 180.0 * ap / PI; if( app > 180.0 ) app = app - 360.0; return( app ); } GabeditSrc250/src/MolecularMechanics/CalculTypesAmber.h0000644000175100017510000000034113130665225023366 0ustar alloucheallouche #ifndef __GABEDIT_CALCULTYPESAMBER_H__ #define __GABEDIT_CALCULTYPESAMBER_H__ void calculTypesAmber(GeomDef* geom, gint nAtoms); void calculTypesAmberForAFragment(Fragment* F); #endif /* __GABEDIT_CALCULTYPESAMBER_H__ */ GabeditSrc250/src/MolecularMechanics/SteepestDescent.h0000644000175100017510000000365713130665225023306 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_STEEPESTDESCENT_H__ #define __GABEDIT_STEEPESTDESCENT_H__ typedef struct _SteepestDescent SteepestDescent; struct _SteepestDescent { ForceField* forceField; gint numberOfAtoms; gint updateFrequency; gint maxIterations; gint updateNumber; gdouble epsilon; gdouble initialStep; gdouble rmsDeplacment; gdouble maxDeplacment; gdouble gradientNorm; gint maxLines; }; void freeSteepestDescent(SteepestDescent* steepestDescent); void runSteepestDescent(SteepestDescent* steepestDescent, ForceField* forceField, gint updateFrequency, gint maxIterations, gdouble epsilon,gint maxLines); #endif /* __GABEDIT_STEEPESTDESCENT_H__ */ GabeditSrc250/src/MolecularMechanics/CreateMolecularMechanicsFile.c0000644000175100017510000014112613130665225025653 0ustar alloucheallouche/* CreateMolecularMechanicsFile.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../Utils/Utils.h" static gchar atomTypesTitle[] = "Begin INPUT FOR ATOM TYPES, MASSE AND POLARISABILITIES"; static gchar bondStretchTitle[] = "Begin INPUT FOR BOND LENGTH PARAMETERS"; static gchar angleBendTitle[] = "Begin INPUT FOR BOND ANGLE PARAMETERS"; static gchar hydrogenBondedTitle[] = "Begin INPUT FOR H-BOND 10-12 POTENTIAL PARAMETERS"; static gchar improperTorsionTitle[] ="Begin INPUT FOR IMPROPER DIHEDRAL PARAMETERS"; static gchar nonBondedTitle[] ="Begin INPUT FOR THE NON-BONDED 6-12 POTENTIAL PARAMETERS"; static gchar dihedralAngleTitle[] = "Begin INPUT FOR DIHEDRAL PARAMETERS"; static gchar pairWiseTitle[] = "Begin INPUT FOR PAIR WISE PARAMETERS"; gboolean createMMFile() { gchar* filename = g_strdup_printf("%s%sMolecularMechanics.prm",gabedit_directory(), G_DIR_SEPARATOR_S); FILE* fout = FOpen(filename,"w"); if(fout==NULL) { return FALSE; } fprintf(fout,"Begin Title\n"); fprintf(fout," Atom Types : Ty(Type) Symbol Numero Masse(C12 UMA) Polarisablities(Ang**3) \n"); fprintf(fout," Bond Length : N1-N2 Force(Kcal/mol/A**2) Re\n"); fprintf(fout," Bond Angle : N1-N2-N3 Force(Kcal/mol/rad**2) Angle(Deg) \n"); fprintf(fout," Dihedral : N1-N2-N3-N4 Idiv Pk Phase(Deg) Pn \n"); fprintf(fout," E = Pk/Idiv*(1 + cos(P,*Phi - Phase)\n"); fprintf(fout," Pk = Barrier/2 Kcal/mol\n"); fprintf(fout," Idiv barrier is divised by Idiv\n"); fprintf(fout," Pn = periodicity fo the torional barrier\n"); fprintf(fout," if Pn<0 the tosional potential is \n"); fprintf(fout," assumed to have more than one term\n"); fprintf(fout," if Ni=0 => N is a number for any one Type\n"); fprintf(fout," Improper Dihedral : N1-N2-N3-N4 Pk Phase(Deg) Pn \n"); fprintf(fout," H-Bond : N1-N2 A(coef. 1/r**12) B(coef. -B/r**10)\n"); fprintf(fout,"\tPair Wise :N1-N2 A(kcal/mol) B(Ang-1) C6(kcal*Ang**6) C8 C10 b(Ang-1)\n"); fprintf(fout,"\t V(r) = A*exp(-B*r) -Somme(C2n*f2n/r**(2*n))[n=3,4,5]\n"); fprintf(fout,"\t f2n = 1- exp(-b*r)*Somme((b*r)**k/k!,k=1..2*n)\n"); fprintf(fout,"End\n"); fprintf(fout,"%s\n",atomTypesTitle); fprintf(fout,"C C 1 12.010 0.616 sp2 C carbonyl group \n"); fprintf(fout,"CA C 2 12.010 0.360 sp2 C pure aromatic (benzene)\n"); fprintf(fout,"CB C 3 12.010 0.360 sp2 aromatic C, 5&6 membered ring junction\n"); fprintf(fout,"CC C 4 12.010 0.360 sp2 aromatic C, 5 memb. ring HIS\n"); fprintf(fout,"CD C 5 12.010 0.360 sp2 C atom in the middle of: C=CD-CD=C\n"); fprintf(fout,"CK C 6 12.010 0.360 sp2 C 5 memb.ring in purines\n"); fprintf(fout,"CM C 7 12.010 0.360 sp2 C pyrimidines in pos. 5 & 6\n"); fprintf(fout,"CN C 8 12.010 0.360 sp2 C aromatic 5&6 memb.ring junct.(TRP)\n"); fprintf(fout,"CQ C 9 12.010 0.360 sp2 C in 5 mem.ring of purines between 2 N\n"); fprintf(fout,"CR C 10 12.010 0.360 sp2 arom as CQ but in HIS\n"); fprintf(fout,"CT C 11 12.010 0.878 sp3 aliphatic C\n"); fprintf(fout,"CV C 12 12.010 0.360 sp2 arom. 5 memb.ring w/1 N and 1 H (HIS)\n"); fprintf(fout,"CW C 13 12.010 0.360 sp2 arom. 5 memb.ring w/1 N-H and 1 H (HIS)\n"); fprintf(fout,"C* C 14 12.010 0.360 sp2 arom. 5 memb.ring w/1 subst. (TRP)\n"); fprintf(fout,"CY C 15 12.010 0.360 nitrile C (Howard et al.JCC,16,243,1995)\n"); fprintf(fout,"CZ C 16 12.010 0.360 sp C (Howard et al.JCC,16,243,1995)\n"); fprintf(fout,"C0 Ca 17 40.080 0.000 calcium\n"); fprintf(fout,"H H 18 1.008 0.161 H bonded to nitrogen atoms\n"); fprintf(fout,"HC H 19 1.008 0.135 H aliph. bond. to C without electrwd.group\n"); fprintf(fout,"H1 H 20 1.008 0.135 H aliph. bond. to C with 1 electrwd. group\n"); fprintf(fout,"H2 H 21 1.008 0.135 H aliph. bond. to C with 2 electrwd.groups\n"); fprintf(fout,"H3 H 22 1.008 0.135 H aliph. bond. to C with 3 eletrwd.groups\n"); fprintf(fout,"HA H 23 1.008 0.167 H arom. bond. to C without elctrwd. groups\n"); fprintf(fout,"H4 H 24 1.008 0.167 H arom. bond. to C with 1 electrwd. group\n"); fprintf(fout,"H5 H 25 1.008 0.167 H arom.at C with 2 elctrwd. gr,+HCOO group\n"); fprintf(fout,"HO H 26 1.008 0.135 hydroxyl group\n"); fprintf(fout,"HS H 27 1.008 0.135 hydrogen bonded to sulphur (pol?)\n"); fprintf(fout,"HW H 28 1.008 0.000 H in TIP3P water\n"); fprintf(fout,"HP H 29 1.008 0.135 H bonded to C next to positively charged gr\n"); fprintf(fout,"HZ H 30 1.008 0.161 H bond sp C (Howard et al.JCC,16,243,1995)\n"); fprintf(fout,"F F 31 19.000 0.320 fluorine\n"); fprintf(fout,"Cl Cl 32 35.450 1.910 chlorine (Applequist)\n"); fprintf(fout,"Br Br 33 79.900 2.880 bromine (Applequist)\n"); fprintf(fout,"I I 34 126.900 4.690 iodine (Applequist)\n"); fprintf(fout,"IM Cl 35 35.450 3.235 assumed to be Cl- (ion minus)\n"); fprintf(fout,"IB I 36 131.000 0.000 'big ion w/ waters' for vacuum (Na+, 6H2O)\n"); fprintf(fout,"MG Mg 37 24.305 0.120 magnesium\n"); fprintf(fout,"N N 38 14.010 0.530 sp2 nitrogen in amide groups\n"); fprintf(fout,"NA N 39 14.010 0.530 sp2 N in 5 memb.ring w/H atom (HIS)\n"); fprintf(fout,"NB N 40 14.010 0.530 sp2 N in 5 memb.ring w/LP (HIS,ADE,GUA)\n"); fprintf(fout,"NC N 41 14.010 0.530 sp2 N in 6 memb.ring w/LP (ADE,GUA)\n"); fprintf(fout,"N2 N 42 14.010 0.530 sp2 N in amino groups\n"); fprintf(fout,"N3 N 43 14.010 0.530 sp3 N for charged amino groups (Lys, etc)\n"); fprintf(fout,"NT N 44 14.010 0.530 sp3 N for amino groups amino groups \n"); fprintf(fout,"N* N 45 14.010 0.530 sp2 N \n"); fprintf(fout,"NY N 46 14.010 0.530 nitrile N (Howard et al.JCC,16,243,1995)\n"); fprintf(fout,"O O 47 16.000 0.434 carbonyl group oxygen\n"); fprintf(fout,"O2 O 48 16.000 0.434 carboxyl and phosphate group oxygen\n"); fprintf(fout,"OW O 49 16.000 0.000 oxygen in TIP3P water\n"); fprintf(fout,"OH O 50 16.000 0.465 oxygen in hydroxyl group\n"); fprintf(fout,"OS O 51 16.000 0.465 ether and ester oxygen\n"); fprintf(fout,"P P 52 30.970 1.538 phosphate,pol:JACS,112,8543,90,K.J.Miller\n"); fprintf(fout,"S S 53 32.060 2.900 S in disulfide linkage,pol:JPC,102,2399,98\n"); fprintf(fout,"SH S 54 32.060 2.900 S in cystine\n"); fprintf(fout,"CU Cu 55 63.550 0.000 copper\n"); fprintf(fout,"FE Fe 56 55.000 0.000 iron\n"); fprintf(fout,"Li Li 57 6.940 0.029 lithium, ions pol:J.PhysC,11,1541,(1978)\n"); fprintf(fout,"IP Na 58 22.990 0.250 assumed to be Na+ (ion plus)\n"); fprintf(fout,"Na Na 59 22.990 0.250 Na+, ions pol:J.PhysC,11,1541,(1978)\n"); fprintf(fout,"K K 60 39.100 1.060 potassium\n"); fprintf(fout,"Rb Rb 61 85.470 0.000 rubidium\n"); fprintf(fout,"Cs Cs 62 132.910 0.000 cesium\n"); fprintf(fout,"Zn Zn 63 65.400 0.000 Zn2+ \n"); fprintf(fout,"Ba Ba 64 137.327 0.000 Ba\n"); fprintf(fout,"End\n"); fprintf(fout,"%s\n",bondStretchTitle); fprintf(fout,"49 28 553.0 0.9572 TIP3P water\n"); fprintf(fout,"28 28 553.0 1.5136 TIP3P water\n"); fprintf(fout,"1 1 310.0 1.5250 Junmei et al, 1999\n"); fprintf(fout,"1 2 469.0 1.4090 JCC,7,(1986),230; (not used any more in TYR)\n"); fprintf(fout,"1 3 447.0 1.4190 JCC,7,(1986),230; GUA\n"); fprintf(fout,"1 7 410.0 1.4440 JCC,7,(1986),230; THY,URA\n"); fprintf(fout,"1 11 317.0 1.5220 JCC,7,(1986),230; AA\n"); fprintf(fout,"1 38 490.0 1.3350 JCC,7,(1986),230; AA\n"); fprintf(fout,"1 45 424.0 1.3830 JCC,7,(1986),230; CYT,URA\n"); fprintf(fout,"1 39 418.0 1.3880 JCC,7,(1986),230; GUA.URA\n"); fprintf(fout,"1 41 457.0 1.3580 JCC,7,(1986),230; CYT\n"); fprintf(fout,"1 47 570.0 1.2290 JCC,7,(1986),230; AA,CYT,GUA,THY,URA\n"); fprintf(fout,"1 48 656.0 1.2500 JCC,7,(1986),230; GLU,ASP\n"); fprintf(fout,"1 50 450.0 1.3640 JCC,7,(1986),230; (not used any more for TYR) \n"); fprintf(fout,"1 51 450.0 1.3230 Junmei et al, 1999\n"); fprintf(fout,"1 24 367.0 1.0800 Junmei et al, 1999\n"); fprintf(fout,"1 25 367.0 1.0800 Junmei et al, 1999\n"); fprintf(fout,"2 2 469.0 1.4000 JCC,7,(1986),230; BENZENE,PHE,TRP,TYR\n"); fprintf(fout,"2 3 469.0 1.4040 JCC,7,(1986),230; ADE,TRP\n"); fprintf(fout,"2 7 427.0 1.4330 JCC,7,(1986),230; CYT\n"); fprintf(fout,"2 8 469.0 1.4000 JCC,7,(1986),230; TRP\n"); fprintf(fout,"2 11 317.0 1.5100 JCC,7,(1986),230; PHE,TYR\n"); fprintf(fout,"2 23 367.0 1.0800 changed from 340. bsd on C6H6 nmodes; PHE,TRP,TYR\n"); fprintf(fout,"2 24 367.0 1.0800 changed from 340. bsd on C6H6 nmodes; no assigned\n"); fprintf(fout,"2 42 481.0 1.3400 JCC,7,(1986),230; ARG,CYT,GUA\n"); fprintf(fout,"2 39 427.0 1.3810 JCC,7,(1986),230; GUA\n"); fprintf(fout,"2 41 483.0 1.3390 JCC,7,(1986),230; ADE,CYT,GUA\n"); fprintf(fout,"2 50 450.0 1.3640 substituted for C-OH in tyr \n"); fprintf(fout,"3 3 520.0 1.3700 JCC,7,(1986),230; ADE,GUA\n"); fprintf(fout,"3 45 436.0 1.3740 JCC,7,(1986),230; ADE,GUA\n"); fprintf(fout,"3 40 414.0 1.3910 JCC,7,(1986),230; ADE,GUA\n"); fprintf(fout,"3 41 461.0 1.3540 JCC,7,(1986),230; ADE,GUA\n"); fprintf(fout,"5 23 367.0 1.0800 Junmei et al, 1999 \n"); fprintf(fout,"5 5 469.0 1.4000 Junmei et al, 1999\n"); fprintf(fout,"5 7 549.0 1.3500 Junmei et al, 1999\n"); fprintf(fout,"5 11 317.0 1.5100 Junmei et al, 1999\n"); fprintf(fout,"6 25 367.0 1.0800 changed from 340. bsd on C6H6 nmodes; ADE,GUA\n"); fprintf(fout,"6 45 440.0 1.3710 JCC,7,(1986),230; ADE,GUA\n"); fprintf(fout,"6 40 529.0 1.3040 JCC,7,(1986),230; ADE,GUA\n"); fprintf(fout,"7 7 549.0 1.3500 JCC,7,(1986),230; CYT,THY,URA\n"); fprintf(fout,"7 11 317.0 1.5100 JCC,7,(1986),230; THY\n"); fprintf(fout,"7 23 367.0 1.0800 changed from 340. bsd on C6H6 nmodes; CYT,URA\n"); fprintf(fout,"7 24 367.0 1.0800 changed from 340. bsd on C6H6 nmodes; CYT,URA\n"); fprintf(fout,"7 25 367.0 1.0800 changed from 340. bsd on C6H6 nmodes; not assigned\n"); fprintf(fout,"7 45 448.0 1.3650 JCC,7,(1986),230; CYT,THY,URA\n"); fprintf(fout,"7 51 480.0 1.2400 Junmei et al, 1999\n"); fprintf(fout,"9 25 367.0 1.0800 changed from 340. bsd on C6H6 nmodes; ADE\n"); fprintf(fout,"9 41 502.0 1.3240 JCC,7,(1986),230; ADE\n"); fprintf(fout,"11 11 310.0 1.5260 JCC,7,(1986),230; AA, SUGARS\n"); fprintf(fout,"11 19 340.0 1.0900 changed from 331 bsd on NMA nmodes; AA, SUGARS\n"); fprintf(fout,"11 20 340.0 1.0900 changed from 331 bsd on NMA nmodes; AA, RIBOSE\n"); fprintf(fout,"11 21 340.0 1.0900 changed from 331 bsd on NMA nmodes; SUGARS\n"); fprintf(fout,"11 22 340.0 1.0900 changed from 331 bsd on NMA nmodes; not assigned\n"); fprintf(fout,"11 29 340.0 1.0900 changed from 331; AA-lysine, methyl ammonium cation\n"); fprintf(fout,"11 45 337.0 1.4750 JCC,7,(1986),230; ADE,CYT,GUA,THY,URA\n"); fprintf(fout,"11 42 337.0 1.4630 JCC,7,(1986),230; ARG\n"); fprintf(fout,"11 50 320.0 1.4100 JCC,7,(1986),230; SUGARS\n"); fprintf(fout,"11 51 320.0 1.4100 JCC,7,(1986),230; NUCLEIC ACIDS\n"); fprintf(fout,"14 19 367.0 1.0800 changed from 340. bsd on C6H6 nmodes, not needed AA\n"); fprintf(fout,"14 3 388.0 1.4590 JCC,7,(1986),230; TRP\n"); fprintf(fout,"14 11 317.0 1.4950 JCC,7,(1986),230; TRP\n"); fprintf(fout,"14 13 546.0 1.3520 JCC,7,(1986),230; TRP\n"); fprintf(fout,"3 8 447.0 1.4190 JCC,7,(1986),230; TRP\n"); fprintf(fout,"4 11 317.0 1.5040 JCC,7,(1986),230; HIS\n"); fprintf(fout,"4 12 512.0 1.3750 JCC,7,(1986),230; HIS(delta)\n"); fprintf(fout,"4 13 518.0 1.3710 JCC,7,(1986),230; HIS(epsilon)\n"); fprintf(fout,"4 39 422.0 1.3850 JCC,7,(1986),230; HIS\n"); fprintf(fout,"4 40 410.0 1.3940 JCC,7,(1986),230; HIS\n"); fprintf(fout,"8 39 428.0 1.3800 JCC,7,(1986),230; TRP\n"); fprintf(fout,"10 25 367.0 1.0800 changed from 340. bsd on C6H6 nmodes;HIS\n"); fprintf(fout,"10 39 477.0 1.3430 JCC,7,(1986),230; HIS\n"); fprintf(fout,"10 40 488.0 1.3350 JCC,7,(1986),230; HIS\n"); fprintf(fout,"11 38 337.0 1.4490 JCC,7,(1986),230; AA\n"); fprintf(fout,"11 43 367.0 1.4710 JCC,7,(1986),230; LYS\n"); fprintf(fout,"11 44 367.0 1.4710 for neutral amines \n"); fprintf(fout,"11 53 227.0 1.8100 changed from 222.0 based on dimethylS nmodes\n"); fprintf(fout,"11 54 237.0 1.8100 changed from 222.0 based on methanethiol nmodes\n"); fprintf(fout,"11 15 400.0 1.4580 Howard et al JCC.16,243,1995\n"); fprintf(fout,"11 16 400.0 1.4590 Howard et al JCC,16,243,1995\n"); fprintf(fout,"12 24 367.0 1.0800 changed from 340. bsd on C6H6 nmodes; HIS\n"); fprintf(fout,"12 40 410.0 1.3940 JCC,7,(1986),230; HIS\n"); fprintf(fout,"13 24 367.0 1.0800 changed from 340. bsd on C6H6 nmodes;HIS(epsilon,+)\n"); fprintf(fout,"13 39 427.0 1.3810 JCC,7,(1986),230; HIS,TRP\n"); fprintf(fout,"15 46 600.0 1.1500 Howard et al JCC,16,243,1995\n"); fprintf(fout,"16 16 600.0 1.2060 Howard et al JCC,16,243,1995\n"); fprintf(fout,"16 30 400.0 1.0560 Howard et al JCC,16,243,1995\n"); fprintf(fout,"48 52 525.0 1.4800 JCC,7,(1986),230; NA PHOSPHATES\n"); fprintf(fout,"50 52 230.0 1.6100 JCC,7,(1986),230; NA PHOSPHATES\n"); fprintf(fout,"51 52 230.0 1.6100 JCC,7,(1986),230; NA PHOSPHATES\n"); fprintf(fout,"18 42 434.0 1.0100 JCC,7,(1986),230; ADE,CYT,GUA,ARG\n"); fprintf(fout,"18 45 434.0 1.0100 for plain unmethylated bases ADE,CYT,GUA,ARG\n"); fprintf(fout,"18 39 434.0 1.0100 JCC,7,(1986),230; GUA,URA,HIS\n"); fprintf(fout,"18 38 434.0 1.0100 JCC,7,(1986),230; AA\n"); fprintf(fout,"18 43 434.0 1.0100 JCC,7,(1986),230; LYS \n"); fprintf(fout,"18 44 434.0 1.0100 for neutral amines \n"); fprintf(fout,"26 50 553.0 0.9600 JCC,7,(1986),230; SUGARS,SER,TYR\n"); fprintf(fout,"26 51 553.0 0.9600 JCC,7,(1986),230; NUCLEOTIDE ENDS\n"); fprintf(fout,"27 54 274.0 1.3360 JCC,7,(1986),230; CYS\n"); fprintf(fout,"53 53 166.0 2.0380 JCC,7,(1986),230; CYX (SCHERAGA)\n"); fprintf(fout,"31 11 367.0 1.3800 JCC,13,(1992),963;CF4; R0=1.332 FOR CHF3\n"); fprintf(fout,"32 11 232.0 1.7660 6-31g* opt\n"); fprintf(fout,"33 11 159.0 1.9440 Junmei et al,99 \n"); fprintf(fout,"34 11 148.0 2.1660 Junmei et al,99 \n"); fprintf(fout,"31 2 386.0 1.3590 Junmei et al,99 \n"); fprintf(fout,"32 2 193.0 1.7270 Junmei et al,99 \n"); fprintf(fout,"34 2 171.0 2.0750 Junmei et al,99 \n"); fprintf(fout,"33 2 172.0 1.8900 Junmei et al,99\n"); fprintf(fout,"End\n"); fprintf(fout,"%s\n",angleBendTitle); fprintf(fout,"28 49 28 100.000 104.52 TIP3P water\n"); fprintf(fout,"28 28 49 0.000 127.74 (found in crystallographic water with 3 bonds)\n"); fprintf(fout,"1 1 47 80.000 120.00 Junmei et al, 1999 acrolein\n"); fprintf(fout,"1 1 50 80.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"2 1 2 63.000 120.00 changed from 85.0 bsd on C6H6 nmodes; AA\n"); fprintf(fout,"2 1 50 70.000 120.00 AA (not used in tyr)\n"); fprintf(fout,"3 1 39 70.000 111.30 NA\n"); fprintf(fout,"3 1 47 80.000 128.80 \n"); fprintf(fout,"7 1 39 70.000 114.10 \n"); fprintf(fout,"7 1 47 80.000 125.30 \n"); fprintf(fout,"11 1 47 80.000 120.40 \n"); fprintf(fout,"11 1 48 70.000 117.00 \n"); fprintf(fout,"11 1 38 70.000 116.60 AA general\n"); fprintf(fout,"11 1 11 63.000 117.00 Junmei et al, 1999\n"); fprintf(fout,"11 1 51 80.000 115.00 Junmei et al, 1999\n"); fprintf(fout,"11 1 50 80.000 110.00 Junmei et al, 1999\n"); fprintf(fout,"45 1 39 70.000 115.40 \n"); fprintf(fout,"45 1 41 70.000 118.60 \n"); fprintf(fout,"45 1 47 80.000 120.90 \n"); fprintf(fout,"39 1 47 80.000 120.60 \n"); fprintf(fout,"41 1 47 80.000 122.50 \n"); fprintf(fout,"38 1 47 80.000 122.90 AA general\n"); fprintf(fout,"47 1 47 80.000 126.00 AA COO- terminal residues\n"); fprintf(fout,"47 1 50 80.000 120.00 (check with Junmei for: theta0:120.0?)\n"); fprintf(fout,"47 1 51 80.000 125.00 Junmei et al, 1999\n"); fprintf(fout,"48 1 48 80.000 126.00 AA GLU (SCH JPC 79,2379)\n"); fprintf(fout,"24 1 1 50.000 120.00 Junmei et al, 1999 \n"); fprintf(fout,"24 1 7 50.000 115.00 Junmei et al, 1999 \n"); fprintf(fout,"24 1 11 50.000 115.00 Junmei et al, 1999\n"); fprintf(fout,"24 1 47 50.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"24 1 50 50.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"25 1 38 50.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"25 1 47 50.000 119.00 Junmei et al, 1999\n"); fprintf(fout,"25 1 50 50.000 107.00 Junmei et al, 1999\n"); fprintf(fout,"25 1 51 50.000 107.00 Junmei et al, 1999\n"); fprintf(fout,"1 2 2 63.000 120.00 changed from 85.0 bsd on C6H6 nmodes\n"); fprintf(fout,"1 2 23 50.000 120.00 AA (not used in tyr)\n"); fprintf(fout,"2 2 2 63.000 120.00 changed from 85.0 bsd on C6H6 nmodes\n"); fprintf(fout,"2 2 3 63.000 120.00 changed from 85.0 bsd on C6H6 nmodes\n"); fprintf(fout,"2 2 11 70.000 120.00 \n"); fprintf(fout,"2 2 23 50.000 120.00 \n"); fprintf(fout,"2 2 24 50.000 120.00 \n"); fprintf(fout,"2 2 50 70.000 120.00 replacement in tyr\n"); fprintf(fout,"2 2 8 63.000 120.00 changed from 85.0 bsd on C6H6 nmodes; AA trp\n"); fprintf(fout,"3 2 23 50.000 120.00 \n"); fprintf(fout,"3 2 24 50.000 120.00 \n"); fprintf(fout,"3 2 42 70.000 123.50 \n"); fprintf(fout,"3 2 41 70.000 117.30 \n"); fprintf(fout,"7 2 42 70.000 120.10 \n"); fprintf(fout,"7 2 41 70.000 121.50 \n"); fprintf(fout,"8 2 23 50.000 120.00 AA trp\n"); fprintf(fout,"39 2 41 70.000 123.30 \n"); fprintf(fout,"42 2 39 70.000 116.00 \n"); fprintf(fout,"42 2 41 70.000 119.30 \n"); fprintf(fout,"42 2 42 70.000 120.00 AA arg\n"); fprintf(fout,"31 2 2 70.000 121.00 Junmei et al,99 \n"); fprintf(fout,"32 2 2 70.000 118.80 Junmei et al,99 \n"); fprintf(fout,"33 2 2 70.000 118.80 Junmei et al,99\n"); fprintf(fout,"34 2 2 70.000 118.80 Junmei et al,99 \n"); fprintf(fout,"1 3 3 63.000 119.20 changed from 85.0 bsd on C6H6 nmodes; NA gua\n"); fprintf(fout,"1 3 40 70.000 130.00 \n"); fprintf(fout,"2 3 3 63.000 117.30 changed from 85.0 bsd on C6H6 nmodes; NA ade\n"); fprintf(fout,"2 3 40 70.000 132.40 \n"); fprintf(fout,"3 3 45 70.000 106.20 \n"); fprintf(fout,"3 3 40 70.000 110.40 \n"); fprintf(fout,"3 3 41 70.000 127.70 \n"); fprintf(fout,"14 3 2 63.000 134.90 changed from 85.0 bsd on C6H6 nmodes; AA trp\n"); fprintf(fout,"14 3 8 63.000 108.80 changed from 85.0 bsd on C6H6 nmodes; AA trp\n"); fprintf(fout,"2 3 8 63.000 116.20 changed from 85.0 bsd on C6H6 nmodes; AA trp\n"); fprintf(fout,"45 3 41 70.000 126.20 \n"); fprintf(fout,"5 5 7 63.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"5 5 11 70.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"7 5 11 70.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"23 5 23 35.000 119.00 Junmei et al, 1999\n"); fprintf(fout,"23 5 5 50.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"23 5 7 50.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"25 6 45 50.000 123.05 \n"); fprintf(fout,"25 6 40 50.000 123.05 \n"); fprintf(fout,"45 6 40 70.000 113.90 \n"); fprintf(fout,"1 7 7 63.000 120.70 changed from 85.0 bsd on C6H6 nmodes; NA thy\n"); fprintf(fout,"1 7 11 70.000 119.70 \n"); fprintf(fout,"1 7 23 50.000 119.70 \n"); fprintf(fout,"1 7 24 50.000 119.70 \n"); fprintf(fout,"2 7 7 63.000 117.00 changed from 85.0 bsd on C6H6 nmodes; NA cyt\n"); fprintf(fout,"2 7 23 50.000 123.30 \n"); fprintf(fout,"2 7 24 50.000 123.30 \n"); fprintf(fout,"7 7 11 70.000 119.70 \n"); fprintf(fout,"7 7 23 50.000 119.70 \n"); fprintf(fout,"7 7 24 50.000 119.70 \n"); fprintf(fout,"7 7 45 70.000 121.20 \n"); fprintf(fout,"7 7 51 80.000 125.00 Junmei et al, 1999\n"); fprintf(fout,"24 7 45 50.000 119.10 \n"); fprintf(fout,"24 7 51 50.000 113.00 Junmei et al, 1999\n"); fprintf(fout,"23 7 23 35.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"23 7 5 50.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"23 7 11 50.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"41 9 41 70.000 129.10 \n"); fprintf(fout,"25 9 41 50.000 115.45 \n"); fprintf(fout,"20 11 20 35.000 109.50 \n"); fprintf(fout,"20 11 45 50.000 109.50 changed based on NMA nmodes\n"); fprintf(fout,"20 11 50 50.000 109.50 changed based on NMA nmodes \n"); fprintf(fout,"20 11 51 50.000 109.50 changed based on NMA nmodes \n"); fprintf(fout,"20 11 7 50.000 109.50 Junmei et al, 1999 \n"); fprintf(fout,"20 11 15 50.000 110.00 Junmei et al, 1999\n"); fprintf(fout,"20 11 16 50.000 110.00 Junmei et al, 1999\n"); fprintf(fout,"20 11 38 50.000 109.50 AA general changed based on NMA nmodes\n"); fprintf(fout,"20 11 53 50.000 109.50 AA cys changed based on NMA nmodes\n"); fprintf(fout,"20 11 54 50.000 109.50 AA cyx changed based on NMA nmodes\n"); fprintf(fout,"20 11 42 50.000 109.50 AA arg changed based on NMA nmodes\n"); fprintf(fout,"20 11 44 50.000 109.50 neutral amines \n"); fprintf(fout,"21 11 21 35.000 109.50 AA lys\n"); fprintf(fout,"21 11 45 50.000 109.50 changed based on NMA nmodes\n"); fprintf(fout,"21 11 51 50.000 109.50 changed based on NMA nmodes\n"); fprintf(fout,"29 11 29 35.000 109.50 AA lys, ch3nh4+\n"); fprintf(fout,"29 11 43 50.000 109.50 AA lys, ch3nh3+, changed based on NMA nmodes\n"); fprintf(fout,"19 11 19 35.000 109.50 \n"); fprintf(fout,"19 11 7 50.000 109.50 changed based on NMA nmodes\n"); fprintf(fout,"19 11 5 50.000 109.50 Junmei et al, 1999\n"); fprintf(fout,"19 11 16 50.000 110.00 Junmei et al, 1999\n"); fprintf(fout,"1 11 20 50.000 109.50 AA general changed based on NMA nmodes\n"); fprintf(fout,"1 11 29 50.000 109.50 AA zwitterion changed based on NMA nmodes\n"); fprintf(fout,"1 11 19 50.000 109.50 AA gln changed based on NMA nmodes\n"); fprintf(fout,"1 11 38 63.000 110.10 AA general\n"); fprintf(fout,"1 11 43 80.000 111.20 AA amino terminal residues\n"); fprintf(fout,"1 11 11 63.000 111.10 AA general\n"); fprintf(fout,"1 11 51 60.000 109.50 Junmei et al, 1999\n"); fprintf(fout,"2 11 19 50.000 109.50 AA tyr changed based on NMA nmodes\n"); fprintf(fout,"4 11 11 63.000 113.10 AA his\n"); fprintf(fout,"4 11 19 50.000 109.50 AA his changed based on NMA nmodes\n"); fprintf(fout,"7 11 11 63.000 111.00 Junmei et al, 1999 (last change: Mar24,99)\n"); fprintf(fout,"7 11 51 50.000 109.50 Junmei et al, 1999\n"); fprintf(fout,"11 11 11 40.000 109.50 \n"); fprintf(fout,"11 11 19 50.000 109.50 changed based on NMA nmodes\n"); fprintf(fout,"11 11 20 50.000 109.50 changed based on NMA nmodes\n"); fprintf(fout,"11 11 21 50.000 109.50 changed based on NMA nmodes\n"); fprintf(fout,"11 11 29 50.000 109.50 changed based on NMA nmodes\n"); fprintf(fout,"11 11 45 50.000 109.50 \n"); fprintf(fout,"11 11 50 50.000 109.50 \n"); fprintf(fout,"11 11 51 50.000 109.50 \n"); fprintf(fout,"11 11 53 50.000 114.70 AA cyx (SCHERAGA JPC 79,1428)\n"); fprintf(fout,"11 11 54 50.000 108.60 AA cys\n"); fprintf(fout,"11 11 2 63.000 114.00 AA phe tyr (SCH JPC 79,2379)\n"); fprintf(fout,"11 11 42 80.000 111.20 AA arg (JCP 76, 1439)\n"); fprintf(fout,"11 11 38 80.000 109.70 AA ala, general (JACS 94, 2657)\n"); fprintf(fout,"11 11 43 80.000 111.20 AA lys (JCP 76, 1439)\n"); fprintf(fout,"11 11 44 80.000 111.20 neutral amines \n"); fprintf(fout,"11 11 15 63.000 110.00 Junmei et al, 1999 \n"); fprintf(fout,"11 11 16 63.000 110.00 Junmei et al, 1999\n"); fprintf(fout,"14 11 11 63.000 115.60 AA trp\n"); fprintf(fout,"14 11 19 50.000 109.50 AA trp changed based on NMA nmodes\n"); fprintf(fout,"51 11 51 160.000 101.00 Junmei et al, 1999\n"); fprintf(fout,"51 11 15 50.000 110.00 Junmei et al, 1999\n"); fprintf(fout,"51 11 16 50.000 110.00 Junmei et al, 1999\n"); fprintf(fout,"51 11 16 50.000 110.00 Junmei et al, 1999\n"); fprintf(fout,"51 11 15 50.000 110.00 Junmei et al, 1999\n"); fprintf(fout,"51 11 45 50.000 109.50 \n"); fprintf(fout,"31 11 31 77.000 109.10 JCC,13,(1992),963;\n"); fprintf(fout,"31 11 20 50.000 109.50 JCC,13,(1992),963;\n"); fprintf(fout,"31 11 11 50.000 109.00 \n"); fprintf(fout,"31 11 21 50.000 109.50 \n"); fprintf(fout,"32 11 11 50.000 108.50 (6-31g* opt value)\n"); fprintf(fout,"32 11 20 50.000 108.50 (6-31g* opt value) \n"); fprintf(fout,"33 11 11 50.000 108.00 Junmei et al 99 \n"); fprintf(fout,"33 11 20 50.000 106.50 Junmei et al 99 \n"); fprintf(fout,"34 11 11 50.000 106.00 Junmei et al,99 \n"); fprintf(fout,"11 4 39 70.000 120.00 AA his\n"); fprintf(fout,"11 4 12 70.000 120.00 AA his\n"); fprintf(fout,"11 4 40 70.000 120.00 AA his\n"); fprintf(fout,"12 4 39 70.000 120.00 AA his\n"); fprintf(fout,"13 4 39 70.000 120.00 AA his\n"); fprintf(fout,"13 4 40 70.000 120.00 AA his\n"); fprintf(fout,"11 4 13 70.000 120.00 AA his\n"); fprintf(fout,"25 10 39 50.000 120.00 AA his\n"); fprintf(fout,"25 10 40 50.000 120.00 AA his\n"); fprintf(fout,"39 10 39 70.000 120.00 AA his\n"); fprintf(fout,"39 10 40 70.000 120.00 AA his\n"); fprintf(fout,"4 12 24 50.000 120.00 AA his\n"); fprintf(fout,"4 12 40 70.000 120.00 AA his\n"); fprintf(fout,"24 12 40 50.000 120.00 AA his\n"); fprintf(fout,"4 13 24 50.000 120.00 AA his\n"); fprintf(fout,"4 13 39 70.000 120.00 AA his\n"); fprintf(fout,"14 13 24 50.000 120.00 AA trp\n"); fprintf(fout,"14 13 39 70.000 108.70 AA trp\n"); fprintf(fout,"24 13 39 50.000 120.00 AA his\n"); fprintf(fout,"3 14 11 70.000 128.60 AA trp\n"); fprintf(fout,"3 14 13 63.000 106.40 changed from 85.0 bsd on C6H6 nmodes; AA trp\n"); fprintf(fout,"11 14 13 70.000 125.00 AA trp\n"); fprintf(fout,"2 8 3 63.000 122.70 changed from 85.0 bsd on C6H6 nmodes; AA trp\n"); fprintf(fout,"2 8 39 70.000 132.80 AA trp\n"); fprintf(fout,"3 8 39 70.000 104.40 AA trp\n"); fprintf(fout,"11 15 46 80.000 180.00 Junmei et al, 1999\n"); fprintf(fout,"11 16 16 80.000 180.00 Junmei et al, 1999\n"); fprintf(fout,"16 16 30 50.000 180.00 Junmei et al, 1999\n"); fprintf(fout,"1 38 11 50.000 121.90 AA general\n"); fprintf(fout,"1 38 18 50.000 120.00 AA general, gln, asn,changed based on NMA nmodes\n"); fprintf(fout,"11 38 18 50.000 118.04 AA general, changed based on NMA nmodes\n"); fprintf(fout,"11 38 11 50.000 118.00 AA pro (DETAR JACS 99,1232)\n"); fprintf(fout,"18 38 18 35.000 120.00 ade,cyt,gua,gln,asn **\n"); fprintf(fout,"1 45 7 70.000 121.60 \n"); fprintf(fout,"1 45 11 70.000 117.60 \n"); fprintf(fout,"1 45 18 50.000 119.20 changed based on NMA nmodes\n"); fprintf(fout,"3 45 6 70.000 105.40 \n"); fprintf(fout,"3 45 11 70.000 125.80 \n"); fprintf(fout,"3 45 18 50.000 125.80 for unmethylated n.a. bases,chngd bsd NMA nmodes\n"); fprintf(fout,"6 45 11 70.000 128.80 \n"); fprintf(fout,"6 45 18 50.000 128.80 for unmethylated n.a. bases,chngd bsd NMA nmodes\n"); fprintf(fout,"7 45 11 70.000 121.20 \n"); fprintf(fout,"7 45 18 50.000 121.20 for unmethylated n.a. bases,chngd bsd NMA nmodes\n"); fprintf(fout,"2 42 18 50.000 120.00 \n"); fprintf(fout,"2 42 11 50.000 123.20 AA arg\n"); fprintf(fout,"11 42 18 50.000 118.40 AA arg\n"); fprintf(fout,"18 42 18 35.000 120.00 \n"); fprintf(fout,"11 43 18 50.000 109.50 AA lys, changed based on NMA nmodes\n"); fprintf(fout,"11 43 11 50.000 109.50 AA pro/nt\n"); fprintf(fout,"18 43 18 35.000 109.50 AA lys, AA(end)\n"); fprintf(fout,"11 44 18 50.000 109.50 neutral amines \n"); fprintf(fout,"11 44 11 50.000 109.50 neutral amines \n"); fprintf(fout,"18 44 18 35.000 109.50 neutral amines \n"); fprintf(fout,"1 39 1 70.000 126.40 \n"); fprintf(fout,"1 39 2 70.000 125.20 \n"); fprintf(fout,"1 39 18 50.000 116.80 changed based on NMA nmodes\n"); fprintf(fout,"2 39 18 50.000 118.00 changed based on NMA nmodes\n"); fprintf(fout,"4 39 10 70.000 120.00 AA his\n"); fprintf(fout,"4 39 18 50.000 120.00 AA his, changed based on NMA nmodes\n"); fprintf(fout,"10 39 13 70.000 120.00 AA his\n"); fprintf(fout,"10 39 18 50.000 120.00 AA his, changed based on NMA nmodes\n"); fprintf(fout,"13 39 18 50.000 120.00 AA his, changed based on NMA nmodes\n"); fprintf(fout,"8 39 13 70.000 111.60 AA trp\n"); fprintf(fout,"8 39 18 50.000 123.10 AA trp, changed based on NMA nmodes\n"); fprintf(fout,"3 40 6 70.000 103.80 \n"); fprintf(fout,"4 40 10 70.000 117.00 AA his\n"); fprintf(fout,"10 40 12 70.000 117.00 AA his\n"); fprintf(fout,"1 41 2 70.000 120.50 \n"); fprintf(fout,"2 41 3 70.000 112.20 \n"); fprintf(fout,"2 41 9 70.000 118.60 \n"); fprintf(fout,"3 41 9 70.000 111.00 \n"); fprintf(fout,"1 50 26 50.000 113.00 (not used in tyr anymore)\n"); fprintf(fout,"2 50 26 50.000 113.00 replacement in tyr\n"); fprintf(fout,"11 50 26 55.000 108.50 \n"); fprintf(fout,"26 50 52 45.000 108.50 \n"); fprintf(fout,"1 51 11 60.000 117.00 Junmei et al, 1999\n"); fprintf(fout,"7 51 11 60.000 117.00 Junmei et al, 1999\n"); fprintf(fout,"11 51 11 60.000 109.50 \n"); fprintf(fout,"11 51 52 100.000 120.50 \n"); fprintf(fout,"52 51 52 100.000 120.50 \n"); fprintf(fout,"48 52 50 45.000 108.23 \n"); fprintf(fout,"48 52 48 140.000 119.90 \n"); fprintf(fout,"48 52 51 100.000 108.23 \n"); fprintf(fout,"50 52 51 45.000 102.60 \n"); fprintf(fout,"51 52 51 45.000 102.60 \n"); fprintf(fout,"11 53 11 62.000 98.90 AA met\n"); fprintf(fout,"11 53 53 68.000 103.70 AA cyx (SCHERAGA JPC 79,1428)\n"); fprintf(fout,"11 54 27 43.000 96.00 changed from 44.0 based on methanethiol nmodes\n"); fprintf(fout,"27 54 27 35.000 92.07 AA cys\n"); fprintf(fout,"End\n"); fprintf(fout,"%s\n",dihedralAngleTitle); fprintf(fout,"0 1 1 0 4.0 14.500 180.00 2.0 Junmei et al, 1999\n"); fprintf(fout,"0 1 2 0 4.0 14.500 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 1 3 0 4.0 12.000 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 1 7 0 4.0 8.700 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 1 11 0 6.0 0.000 0.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 1 38 0 4.0 10.000 180.00 2.0 AA,NMA\n"); fprintf(fout,"0 1 45 0 4.0 5.800 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 1 39 0 4.0 5.400 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 1 41 0 2.0 8.000 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 1 47 0 4.0 11.200 180.00 2.0 Junmei et al, 1999\n"); fprintf(fout,"0 1 50 0 2.0 4.600 180.00 2.0 Junmei et al, 1999\n"); fprintf(fout,"0 1 51 0 2.0 5.400 180.00 2.0 Junmei et al, 1999\n"); fprintf(fout,"0 2 2 0 4.0 14.500 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 2 3 0 4.0 14.000 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 2 7 0 4.0 10.200 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 2 8 0 4.0 14.500 180.00 2.0 reinterpolated 93'\n"); fprintf(fout,"0 2 11 0 6.0 0.000 0.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 2 42 0 4.0 9.600 180.00 2.0 reinterpolated 93'\n"); fprintf(fout,"0 2 39 0 4.0 6.000 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 2 41 0 2.0 9.600 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 2 50 0 2.0 1.800 180.00 2.0 Junmei et al, 99\n"); fprintf(fout,"0 3 3 0 4.0 21.800 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 3 8 0 4.0 12.000 180.00 2.0 reinterpolated 93'\n"); fprintf(fout,"0 3 45 0 4.0 6.600 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 3 40 0 2.0 5.100 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 3 41 0 2.0 8.300 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 4 11 0 6.0 0.000 0.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 4 12 0 4.0 20.600 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 4 13 0 4.0 21.500 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 4 39 0 4.0 5.600 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 4 40 0 2.0 4.800 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 5 5 0 4.0 4.000 180.00 2.0 Junmei et al, 1999\n"); fprintf(fout,"0 5 11 0 6.0 0.000 0.00 2.0 Junmei et al, 1999\n"); fprintf(fout,"0 5 7 0 4.0 26.600 180.00 2.0 Junmei et al, 1999\n"); fprintf(fout,"0 6 45 0 4.0 6.800 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 6 40 0 2.0 20.000 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 7 7 0 4.0 26.600 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 7 11 0 6.0 0.000 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"0 7 45 0 4.0 7.400 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 7 51 0 2.0 2.100 180.00 2.0 Junmei et al, 1999\n"); fprintf(fout,"0 8 39 0 4.0 6.100 180.00 2.0 reinterpolated 93'\n"); fprintf(fout,"0 9 41 0 2.0 13.600 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 11 0 9.0 1.400 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 15 0 3.0 0.000 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"0 11 16 0 3.0 0.000 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"0 11 38 0 6.0 0.000 0.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 45 0 6.0 0.000 0.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 42 0 6.0 0.000 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 44 0 6.0 1.800 0.00 3.0 Junmei et al, 1999\n"); fprintf(fout,"0 11 43 0 9.0 1.400 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 50 0 3.0 0.500 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 51 0 3.0 1.150 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 53 0 3.0 1.000 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 54 0 3.0 0.750 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"0 14 3 0 4.0 6.700 180.00 2.0 intrpol.bsd.onC6H6aa\n"); fprintf(fout,"0 14 11 0 6.0 0.000 0.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 14 13 0 4.0 26.100 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 10 39 0 4.0 9.300 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 10 40 0 2.0 10.000 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 12 40 0 2.0 4.800 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 13 39 0 4.0 6.000 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 50 52 0 3.0 0.750 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"0 51 52 0 3.0 0.750 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"38 11 1 38 1.0 1.700 180.00 -1.0 \n"); fprintf(fout,"38 11 1 38 1.0 2.000 180.00 2.0 \n"); fprintf(fout,"1 38 11 1 1.0 0.850 180.00 -2.0 \n"); fprintf(fout,"1 38 11 1 1.0 0.800 0.00 1.0 \n"); fprintf(fout,"11 11 38 1 1.0 0.500 180.00 -4.0 phi,psi,parm94\n"); fprintf(fout,"11 11 38 1 1.0 0.150 180.00 -3.0 phi,psi,parm94\n"); fprintf(fout,"11 11 38 1 1.0 0.530 0.00 1.0 phi,psi,parm94\n"); fprintf(fout,"11 11 1 38 1.0 0.100 0.00 -4.0 phi,psi,parm94\n"); fprintf(fout,"11 11 1 38 1.0 0.070 0.00 2.0 phi,psi,parm94\n"); fprintf(fout,"18 38 1 47 1.0 2.500 180.00 -2.0 JCC,7,(1986),230\n"); fprintf(fout,"18 38 1 47 1.0 2.000 0.00 1.0 JCC,7,(1986),230\n"); fprintf(fout,"11 53 53 11 1.0 3.500 0.00 -2.0 JCC,7,(1986),230\n"); fprintf(fout,"11 53 53 11 1.0 0.600 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"50 52 51 11 1.0 0.250 0.00 -3.0 JCC,7,(1986),230\n"); fprintf(fout,"50 52 51 11 1.0 1.200 0.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"51 52 51 11 1.0 0.250 0.00 -3.0 JCC,7,(1986),230\n"); fprintf(fout,"51 52 51 11 1.0 1.200 0.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"20 11 1 47 1.0 0.800 0.00 -1.0 Junmei et al, 1999\n"); fprintf(fout,"20 11 1 47 1.0 0.080 180.00 3.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 1 47 1.0 0.800 0.00 -1.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 1 47 1.0 0.080 180.00 3.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 11 19 1.0 0.150 0.00 3.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 11 11 1.0 0.160 0.00 3.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 7 7 1.0 0.380 180.00 -3.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 7 7 1.0 1.150 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"26 50 11 11 1.0 0.160 0.00 -3.0 Junmei et al, 1999\n"); fprintf(fout,"26 50 11 11 1.0 0.250 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"26 50 1 47 1.0 2.300 180.00 -2.0 Junmei et al, 1999\n"); fprintf(fout,"26 50 1 47 1.0 1.900 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"7 7 1 47 1.0 2.175 180.00 -2.0 Junmei et al, 1999\n"); fprintf(fout,"7 7 1 47 1.0 0.300 0.00 3.0 Junmei et al, 1999\n"); fprintf(fout,"11 7 7 11 1.0 6.650 180.00 -2.0 Junmei et al, 1999\n"); fprintf(fout,"11 7 7 11 1.0 1.900 180.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"11 11 11 11 1.0 0.180 0.00 -3.0 Junmei et al, 1999\n"); fprintf(fout,"11 11 11 11 1.0 0.250 180.00 -2.0 Junmei et al, 1999\n"); fprintf(fout,"11 11 11 11 1.0 0.200 180.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"11 11 44 11 1.0 0.300 0.00 -3.0 Junmei et al, 1999\n"); fprintf(fout,"11 11 44 11 1.0 0.480 180.00 2.0 Junmei et al, 1999\n"); fprintf(fout,"11 11 51 11 1.0 0.383 0.00 -3.0 \n"); fprintf(fout,"11 11 51 11 1.0 0.100 180.00 2.0 \n"); fprintf(fout,"11 11 51 1 1.0 0.383 0.00 -3.0 Junmei et al, 1999\n"); fprintf(fout,"11 11 51 1 1.0 0.800 180.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"11 51 11 51 1.0 0.100 0.00 -3.0 Junmei et al, 1999\n"); fprintf(fout,"11 51 11 51 1.0 0.850 180.00 -2.0 Junmei et al, 1999\n"); fprintf(fout,"11 51 11 51 1.0 1.350 180.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"11 51 11 45 1.0 0.383 0.00 -3.0 parm98.dat, TC,PC,PAK\n"); fprintf(fout,"11 51 11 45 1.0 0.650 0.00 2.0 parm98.dat, TC,PC,PAK\n"); fprintf(fout,"11 16 16 30 1.0 0.000 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"47 1 51 11 1.0 2.700 180.00 -2.0 Junmei et al, 1999\n"); fprintf(fout,"47 1 51 11 1.0 1.400 180.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"51 11 45 6 1.0 0.000 0.00 -2.0 parm98, TC,PC,PAK\n"); fprintf(fout,"51 11 45 6 1.0 2.500 0.00 1.0 parm98, TC,PC,PAK\n"); fprintf(fout,"51 11 45 7 1.0 0.000 0.00 -2.0 parm98, TC,PC,PAK\n"); fprintf(fout,"51 11 45 7 1.0 2.500 0.00 1.0 parm98, TC,PC,PAK\n"); fprintf(fout,"51 11 11 51 1.0 0.144 0.00 -3.0 parm98, TC,PC,PAK\n"); fprintf(fout,"51 11 11 51 1.0 1.175 0.00 2.0 parm98, TC,PC,PAK\n"); fprintf(fout,"51 11 11 50 1.0 0.144 0.00 -3.0 parm98, TC,PC,PAK\n"); fprintf(fout,"51 11 11 50 1.0 1.175 0.00 2.0 parm98, TC,PC,PAK\n"); fprintf(fout,"50 11 11 50 1.0 0.144 0.00 -3.0 parm98, TC,PC,PAK\n"); fprintf(fout,"50 11 11 50 1.0 1.175 0.00 2.0 parm98, TC,PC,PAK\n"); fprintf(fout,"31 11 11 31 1.0 1.200 180.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"32 11 11 32 1.0 0.450 180.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"33 11 11 33 1.0 0.000 180.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"20 11 11 51 1.0 0.250 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"20 11 11 50 1.0 0.250 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"20 11 11 31 1.0 0.190 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"20 11 11 32 1.0 0.250 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"20 11 11 33 1.0 0.550 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 11 51 1.0 0.250 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 11 50 1.0 0.250 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 11 31 1.0 0.190 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 11 32 1.0 0.250 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 11 33 1.0 0.550 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"End\n"); fprintf(fout,"%s\n",improperTorsionTitle); fprintf(fout,"0 0 1 47 10.500 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 48 1 48 10.500 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 0 38 18 1.000 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 0 42 18 1.000 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 0 39 18 1.000 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 42 2 42 10.500 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 38 11 1.000 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 0 2 23 1.100 180.00 2.0 bsd.on C6H6 nmodes\n"); fprintf(fout,"0 0 13 24 1.100 180.00 2.0 \n"); fprintf(fout,"0 0 10 25 1.100 180.00 2.0 \n"); fprintf(fout,"0 0 12 24 1.100 180.00 2.0 \n"); fprintf(fout,"0 0 9 25 1.100 180.00 2.0 \n"); fprintf(fout,"0 0 6 25 1.100 180.00 2.0 \n"); fprintf(fout,"0 0 7 24 1.100 180.00 2.0 \n"); fprintf(fout,"0 0 7 23 1.100 180.00 2.0 \n"); fprintf(fout,"0 0 2 24 1.100 180.00 2.0 bsd.on C6H6 nmodes \n"); fprintf(fout,"0 0 2 25 1.100 180.00 2.0 bsd.on C6H6 nmodes\n"); fprintf(fout,"6 3 45 11 1.000 180.00 2.0 \n"); fprintf(fout,"7 1 45 11 1.000 180.00 2.0 dac guess, 9/94\n"); fprintf(fout,"7 1 7 11 1.100 180.00 2.0 \n"); fprintf(fout,"11 47 1 50 10.500 180.00 2.0 \n"); fprintf(fout,"39 12 4 11 1.100 180.00 2.0 \n"); fprintf(fout,"40 13 4 11 1.100 180.00 2.0 \n"); fprintf(fout,"39 13 4 11 1.100 180.00 2.0 \n"); fprintf(fout,"13 3 14 11 1.100 180.00 2.0 \n"); fprintf(fout,"2 2 2 11 1.100 180.00 2.0 \n"); fprintf(fout,"1 7 7 11 1.100 180.00 2.0 dac guess, 9/94\n"); fprintf(fout,"41 7 2 42 1.100 180.00 2.0 dac guess, 9/94\n"); fprintf(fout,"3 41 2 42 1.100 180.00 2.0 dac, 10/94\n"); fprintf(fout,"39 41 2 42 1.100 180.00 2.0 dac, 10/94\n"); fprintf(fout,"2 2 1 50 1.100 180.00 2.0 (not used in tyr!)\n"); fprintf(fout,"2 2 2 50 1.100 180.00 2.0 in tyr\n"); fprintf(fout,"25 47 1 50 1.100 180.00 2.0 Junmei et al.1999\n"); fprintf(fout,"25 47 1 51 1.100 180.00 2.0 \n"); fprintf(fout,"7 11 7 23 1.100 180.00 2.0 Junmei et al.1999\n"); fprintf(fout,"2 2 2 33 1.100 180.00 2.0 Junmei et al.1999\n"); fprintf(fout,"7 24 1 47 1.100 180.00 2.0 Junmei et al.1999\n"); fprintf(fout,"1 11 38 18 1.100 180.00 2.0 Junmei et al.1999\n"); fprintf(fout,"1 11 38 47 1.100 180.00 2.0 Junmei et al.1999\n"); fprintf(fout,"End\n"); fprintf(fout,"%s\n",hydrogenBondedTitle); fprintf(fout,"18 40 7557.0 2385.0 \n"); fprintf(fout,"18 41 10238.0 3071.0 \n"); fprintf(fout,"18 47 7557.0 2385.0 \n"); fprintf(fout,"18 48 4019.0 1409.0 \n"); fprintf(fout,"18 50 7557.0 2385.0 \n"); fprintf(fout,"18 53 265720.0 35429.0 \n"); fprintf(fout,"18 54 265720.0 35429.0 \n"); fprintf(fout,"26 40 7557.0 2385.0 \n"); fprintf(fout,"26 47 7557.0 2385.0 \n"); fprintf(fout,"26 48 4019.0 1409.0 \n"); fprintf(fout,"26 50 7557.0 2385.0 \n"); fprintf(fout,"26 53 265720.0 35429.0 \n"); fprintf(fout,"26 54 265720.0 35429.0 \n"); fprintf(fout,"27 40 14184.0 3082.0 \n"); fprintf(fout,"27 47 14184.0 3082.0 \n"); fprintf(fout,"27 48 4019.0 1409.0 \n"); fprintf(fout,"27 50 14184.0 3082.0 \n"); fprintf(fout,"27 53 265720.0 35429.0 \n"); fprintf(fout,"27 54 265720.0 35429.0 \n"); fprintf(fout,"21 40 4019.0 1409.0 \n"); fprintf(fout,"21 47 10238.0 3071.0 \n"); fprintf(fout,"21 48 4019.0 1409.0 \n"); fprintf(fout,"21 50 4019.0 1409.0 \n"); fprintf(fout,"21 53 7557.0 2385.0 \n"); fprintf(fout,"21 54 7557.0 2385.0 \n"); fprintf(fout,"22 40 4019.0 1409.0 \n"); fprintf(fout,"22 47 4019.0 1409.0 \n"); fprintf(fout,"22 48 4019.0 1409.0 \n"); fprintf(fout,"22 50 4019.0 1409.0 \n"); fprintf(fout,"22 53 7557.0 2385.0 \n"); fprintf(fout,"22 54 7557.0 2385.0 \n"); fprintf(fout,"End\n"); fprintf(fout,"%s\n",nonBondedTitle); fprintf(fout,"18 0.6000 0.0157 Ferguson base pair geom.\n"); /* fprintf(fout,"26 0.0000 0.0000 OPLS Jorgensen, JACS,110,(1988),1657\n");*/ fprintf(fout,"26 0.2000 0.0200 OPLS Jorgensen, JACS,110,(1988),1657\n"); fprintf(fout,"27 0.6000 0.0157 W. Cornell CH3SH --> CH3OH FEP\n"); fprintf(fout,"19 1.4870 0.0157 OPLS\n"); fprintf(fout,"20 1.3870 0.0157 Veenstra et al JCC,8,(1992),963 \n"); fprintf(fout,"21 1.2870 0.0157 Veenstra et al JCC,8,(1992),963 \n"); fprintf(fout,"22 1.1870 0.0157 Veenstra et al JCC,8,(1992),963 \n"); fprintf(fout,"29 1.1000 0.0157 Veenstra et al JCC,8,(1992),963\n"); fprintf(fout,"23 1.4590 0.0150 Spellmeyer \n"); fprintf(fout,"24 1.4090 0.0150 Spellmeyer, one electrowithdr. neighbor\n"); fprintf(fout,"25 1.3590 0.0150 Spellmeyer, two electrowithdr. neighbor\n"); fprintf(fout,"28 0.0000 0.0000 TIP3P water model\n"); fprintf(fout,"30 1.4590 0.0150 H bonded to sp C (Howard et al JCC 16)\n"); fprintf(fout,"47 1.6612 0.2100 OPLS\n"); fprintf(fout,"48 1.6612 0.2100 OPLS\n"); fprintf(fout,"49 1.7683 0.1520 TIP3P water model\n"); fprintf(fout,"50 1.7210 0.2104 OPLS \n"); fprintf(fout,"51 1.6837 0.1700 OPLS ether\n"); fprintf(fout,"14 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"2 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"3 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"4 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"5 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"6 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"7 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"8 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"9 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"10 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"12 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"13 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"15 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"16 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"11 1.9080 0.1094 Spellmeyer\n"); fprintf(fout,"1 1.9080 0.0860 OPLS\n"); fprintf(fout,"38 1.8240 0.1700 OPLS\n"); fprintf(fout,"39 1.8240 0.1700 OPLS\n"); fprintf(fout,"42 1.8240 0.1700 OPLS\n"); fprintf(fout,"45 1.8240 0.1700 OPLS\n"); fprintf(fout,"41 1.8240 0.1700 OPLS\n"); fprintf(fout,"40 1.8240 0.1700 OPLS\n"); fprintf(fout,"43 1.8240 0.1700 OPLS\n"); fprintf(fout,"44 1.8240 0.1700 OPLS\n"); fprintf(fout,"46 1.8240 0.1700 OPLS\n"); fprintf(fout,"46 1.8240 0.1700 N in nitrile\n"); fprintf(fout,"38 1.8240 0.1700 N in nitrile\n"); fprintf(fout,"39 1.8240 0.1700 N in nitrile\n"); fprintf(fout,"42 1.8240 0.1700 N in nitrile\n"); fprintf(fout,"45 1.8240 0.1700 N in nitrile\n"); fprintf(fout,"41 1.8240 0.1700 N in nitrile\n"); fprintf(fout,"40 1.8240 0.1700 N in nitrile\n"); fprintf(fout,"43 1.8240 0.1700 N in nitrile\n"); fprintf(fout,"44 1.8240 0.1700 N in nitrile\n"); fprintf(fout,"53 2.0000 0.2500 W. Cornell CH3SH and CH3SCH3 FEP's\n"); fprintf(fout,"54 2.0000 0.2500 W. Cornell CH3SH and CH3SCH3 FEP's\n"); fprintf(fout,"52 2.1000 0.2000 JCC,7,(1986),230; \n"); fprintf(fout,"35 2.4700 0.1000 Cl- Smith & Dang, JCP 1994,100:5,3757\n"); fprintf(fout,"57 1.1370 0.0183 Li+ Aqvist JPC 1990,94,8021. (adapted)\n"); fprintf(fout,"58 1.8680 0.0028 Na+ Aqvist JPC 1990,94,8021. (adapted)\n"); fprintf(fout,"59 1.8680 0.0028 Na+ Aqvist JPC 1990,94,8021. (adapted)\n"); fprintf(fout,"60 2.6580 0.0003 K+ Aqvist JPC 1990,94,8021. (adapted)\n"); fprintf(fout,"61 2.9560 0.0002 Rb+ Aqvist JPC 1990,94,8021. (adapted)\n"); fprintf(fout,"62 3.3950 0.0001 Cs+ Aqvist JPC 1990,94,8021. (adapted)\n"); fprintf(fout,"37 0.7926 0.8947 Mg2+ Aqvist JPC 1990,94,8021.(adapted)\n"); fprintf(fout,"17 1.7131 0.4598 Ca2+ Aqvist JPC 1990,94,8021.(adapted)\n"); fprintf(fout,"63 1.1000 0.0125 Zn2+, Merz,PAK, JACS,113,8262,(1991) \n"); fprintf(fout,"31 1.7500 0.0610 Gough et al. JCC 13,(1992),963.\n"); fprintf(fout,"32 1.9480 0.2650 Fox, JPCB,102,8070,(98),flex.mdl CHCl3\n"); fprintf(fout,"33 2.2200 0.3200 Junmei(?)\n"); fprintf(fout,"34 2.3500 0.4000 JCC,7,(1986),230; \n"); fprintf(fout,"36 5.0000 0.1000 solvated ion for vacuum approximation\n"); fprintf(fout,"End\n"); fprintf(fout,"%s\n",pairWiseTitle); fprintf(fout,"64 64 10000.0 1.584 100.0 0.0 0.0 2.168\n"); fprintf(fout,"End\n"); fclose(fout); return TRUE; } GabeditSrc250/src/MolecularMechanics/MolecularMechanicsDlg.h0000644000175100017510000000314413130665225024360 0ustar alloucheallouche/* MolecularMechanicsDlg.h */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MOLECULARMECHANICSDLG_H__ #define __GABEDIT_MOLECULARMECHANICSDLG_H__ void MolecularMechanicsEnergyDlg(); void MolecularMechanicsMinimizeDlg(); void MolecularMechanicsDynamicsDlg(); void MolecularMechanicsDynamicsConfoDlg(); #endif /* __GABEDIT_MOLECULARMECHANICSDLG_H__ */ GabeditSrc250/src/MolecularMechanics/CreatePersonalMMFile.c0000644000175100017510000002373413130665225024136 0ustar alloucheallouche/* CreatePersonalMMFile.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../Utils/AtomsProp.h" #include "../Utils/Utils.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "Atom.h" #include "Molecule.h" #include "ForceField.h" #include "MolecularMechanics.h" static gchar atomTypesTitle[] = "Begin INPUT FOR ATOM TYPES, MASSE AND POLARISABILITIES"; static gchar bondStretchTitle[] = "Begin INPUT FOR BOND LENGTH PARAMETERS"; static gchar angleBendTitle[] = "Begin INPUT FOR BOND ANGLE PARAMETERS"; static gchar hydrogenBondedTitle[] = "Begin INPUT FOR H-BOND 10-12 POTENTIAL PARAMETERS"; static gchar improperTorsionTitle[] ="Begin INPUT FOR IMPROPER DIHEDRAL PARAMETERS"; static gchar nonBondedTitle[] ="Begin INPUT FOR THE NON-BONDED 6-12 POTENTIAL PARAMETERS"; static gchar dihedralAngleTitle[] = "Begin INPUT FOR DIHEDRAL PARAMETERS"; static gchar pairWiseTitle[] = "Begin INPUT FOR PAIR WISE PARAMETERS"; /**********************************************************************/ static void saveParametersPairWise(FILE* file,AmberParameters* amberParameters) { gint n; fprintf(file,"%s\n",pairWiseTitle); for(n=0;nnumberOfPairWise;n++) { fprintf(file,"%d\t%d\t%8.4f\t%8.4f\t%8.4f\t%8.4f\t%8.4f\t%8.4f\n", amberParameters->pairWiseTerms[n].numbers[0]+1, amberParameters->pairWiseTerms[n].numbers[1]+1, amberParameters->pairWiseTerms[n].a, amberParameters->pairWiseTerms[n].beta, amberParameters->pairWiseTerms[n].c6, amberParameters->pairWiseTerms[n].c8, amberParameters->pairWiseTerms[n].c10, amberParameters->pairWiseTerms[n].b ); } fprintf(file,"End\n"); } /**********************************************************************/ static void saveParametersBond(FILE* file,AmberParameters* amberParameters) { gint i; fprintf(file,"%s\n",bondStretchTitle); for(i=0;inumberOfStretchTerms;i++) { fprintf(file,"%d\t%d\t%6.1f\t%7.4f\n", amberParameters->bondStretchTerms[i].numbers[0]+1, amberParameters->bondStretchTerms[i].numbers[1]+1, amberParameters->bondStretchTerms[i].forceConstant, amberParameters->bondStretchTerms[i].equilibriumDistance ); } fprintf(file,"End\n"); } /**********************************************************************/ static void saveParametersBend(FILE* file,AmberParameters* amberParameters) { gint n; fprintf(file,"%s\n",angleBendTitle); for(n=0;nnumberOfBendTerms;n++) { fprintf(file,"%d\t%d\t%d\t%6.3f\t%6.2f\n", amberParameters->angleBendTerms[n].numbers[0]+1, amberParameters->angleBendTerms[n].numbers[1]+1, amberParameters->angleBendTerms[n].numbers[2]+1, amberParameters->angleBendTerms[n].forceConstant, amberParameters->angleBendTerms[n].equilibriumAngle ); } fprintf(file,"End\n"); } /**********************************************************************/ static void saveParametersHydrogenBonded(FILE* file,AmberParameters* amberParameters) { gint n; fprintf(file,"%s\n",hydrogenBondedTitle); for(n=0;nnumberOfHydrogenBonded;n++) { fprintf(file,"%d\t%d\t%8.1f\t%8.1f\n", amberParameters->hydrogenBondedTerms[n].numbers[0]+1, amberParameters->hydrogenBondedTerms[n].numbers[1]+1, amberParameters->hydrogenBondedTerms[n].c, amberParameters->hydrogenBondedTerms[n].d ); } fprintf(file,"End\n"); } /**********************************************************************/ static void saveParametersimproperTorsion(FILE* file,AmberParameters* amberParameters) { gint n; fprintf(file,"%s\n",improperTorsionTitle); for(n=0;nnumberOfImproperTorsionTerms;n++) { fprintf(file,"%d\t%d\t%d\t%d\t%6.3f\t%6.2f\t%4.1f\n", amberParameters->improperTorsionTerms[n].numbers[0]+1, amberParameters->improperTorsionTerms[n].numbers[1]+1, amberParameters->improperTorsionTerms[n].numbers[2]+1, amberParameters->improperTorsionTerms[n].numbers[3]+1, amberParameters->improperTorsionTerms[n].barrier, amberParameters->improperTorsionTerms[n].phase, amberParameters->improperTorsionTerms[n].n ); } fprintf(file,"End\n"); } /**********************************************************************/ static void saveParametersNonBonded(FILE* file,AmberParameters* amberParameters) { gint n; fprintf(file,"%s\n",nonBondedTitle); for(n=0;nnumberOfNonBonded;n++) { fprintf(file,"%d\t%8.4f\t%8.4f\n", amberParameters->nonBondedTerms[n].number+1, amberParameters->nonBondedTerms[n].r, amberParameters->nonBondedTerms[n].epsilon ); } fprintf(file,"End\n"); } /**********************************************************************/ static void saveParametersDihedralAngle(FILE* file,AmberParameters* amberParameters) { gint n; gdouble nn; fprintf(file,"%s\n",dihedralAngleTitle); for(n=0;nnumberOfDihedralTerms;n++) { gint j; for(j=0;jdihedralAngleTerms[n].nSomme;j++) { if(j==amberParameters->dihedralAngleTerms[n].nSomme-1) nn = amberParameters->dihedralAngleTerms[n].n[j]; else nn = -amberParameters->dihedralAngleTerms[n].n[j]; fprintf(file,"%d\t%d\t%d\t%d\t%4.1f\t%6.3f\t%6.2f\t%4.1f\n", amberParameters->dihedralAngleTerms[n].numbers[0]+1, amberParameters->dihedralAngleTerms[n].numbers[1]+1, amberParameters->dihedralAngleTerms[n].numbers[2]+1, amberParameters->dihedralAngleTerms[n].numbers[3]+1, amberParameters->dihedralAngleTerms[n].divisor[j], amberParameters->dihedralAngleTerms[n].barrier[j], amberParameters->dihedralAngleTerms[n].phase[j], nn ); } } fprintf(file,"End\n"); } /**********************************************************************/ static void saveParametersAtomTypes(FILE* file,AmberParameters* amberParameters) { gint i; fprintf(file,"%s\n",atomTypesTitle); for(i=0;inumberOfTypes;i++) { fprintf(file,"%s\t%s\t%d\t%6.3f\t%6.3f\t%s\n", amberParameters->atomTypes[i].name, amberParameters->atomTypes[i].symbol, amberParameters->atomTypes[i].number+1, amberParameters->atomTypes[i].masse, amberParameters->atomTypes[i].polarisability, amberParameters->atomTypes[i].description ); } fprintf(file,"End\n"); } /**********************************************************************/ static void saveParametersTitle(FILE* file) { fprintf(file,"Begin Title\n"); fprintf(file,"\tAtom Types : Ty(Type) Symbol Numero Masse(C12 UMA) Polarisablities(Ang**3) \n"); fprintf(file,"\tBond Length : N1-N2 Force(Kcal/mol/A**2) Re\n"); fprintf(file,"\tBond Angle : N1-N2-N3 Force(Kcal/mol/rad**2) Angle(Deg) \n"); fprintf(file,"\tDihedral : N1-N2-N3-N4 Idiv Pk Phase(Deg) Pn \n"); fprintf(file,"\t E = Pk/Idiv*(1 + cos(P,*Phi - Phase)\n"); fprintf(file,"\t Pk = Barrier/2 Kcal/mol\n"); fprintf(file,"\t Idiv barrier is divised by Idiv\n"); fprintf(file,"\t Pn = periodicity fo the torional barrier\n"); fprintf(file,"\t if Pn<0 the tosional potential is \n"); fprintf(file,"\t assumed to have more than one term\n"); fprintf(file,"\t if Ni=0 => N is a number for any one Type\n"); fprintf(file,"\tImproper Dihedral : N1-N2-N3-N4 Idiv Pk Phase(Deg) Pn \n"); fprintf(file,"\tH-Bond : N1-N2 A(coef. 1/r**12) B(coef. -B/r**10)\n"); fprintf(file,"\tPair Wise :N1-N2 A(kcal/mol) B(Ang-1) C6(kcal*Ang**6) C8 C10 b(Ang-1)\n"); fprintf(file,"\t V(r) = A*exp(-B*r) -Somme(C2n*f2n/r**(2*n))[n=3,4,5]\n"); fprintf(file,"\t f2n = 1- exp(-b*r)*Somme((b*r)**k/k!,k=1..2*n)\n"); fprintf(file,"End\n"); } /**********************************************************************/ static void saveParameters(AmberParameters* amberParameters,gchar* filename) { FILE* file; file = FOpen(filename,"w"); if(!file) { printf("I can not open \"%s\" file\n",filename); return; } saveParametersTitle(file); saveParametersAtomTypes(file,amberParameters); saveParametersBond(file,amberParameters); saveParametersBend(file,amberParameters); saveParametersDihedralAngle(file,amberParameters); saveParametersimproperTorsion(file,amberParameters); saveParametersHydrogenBonded(file,amberParameters); saveParametersNonBonded(file,amberParameters); saveParametersPairWise(file,amberParameters); fclose(file); } /**********************************************************************/ void createPersonalParametersFile(AmberParameters* amberParameters) { gchar* filename = g_strdup_printf("%s%sPersonalMM.prm",gabedit_directory(), G_DIR_SEPARATOR_S); saveParameters(amberParameters,filename); g_free(filename); } GabeditSrc250/src/MolecularMechanics/SetPDBTemplate.h0000644000175100017510000000022213130665225022742 0ustar alloucheallouche #ifndef __GABEDIT_SETPDBTEMPLATE_H__ #define __GABEDIT_SETPDBTEMPLATE_H__ void setPDBTemplateDlg(); #endif /* __GABEDIT_SETPDBTEMPLATE_H__ */ GabeditSrc250/src/MolecularMechanics/CreateDefaultPDBTpl.c0000644000175100017510000057635713130665225023731 0ustar alloucheallouche/* +CreateDefaultPDBTpl.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../Utils/Utils.h" /************************************************************/ void createTitleResidueTpl(FILE* fout) { fprintf(fout,"Begin Title\n"); fprintf(fout," Residue : PDB type atom Amber type atom charge of atom\n"); fprintf(fout,"End\n"); } /************************************************************/ void createListResidueTpl(FILE* fout) { fprintf(fout,"Begin Residue List\n"); fprintf(fout,"HOH\n"); fprintf(fout,"T3P\n"); fprintf(fout,"T3H\n"); fprintf(fout,"T4P\n"); fprintf(fout,"T4E\n"); fprintf(fout,"T5P\n"); fprintf(fout,"IB+\n"); fprintf(fout,"Ca+\n"); fprintf(fout,"Cl-\n"); fprintf(fout,"Na+\n"); fprintf(fout,"Mg+\n"); fprintf(fout,"K+\n"); fprintf(fout,"Rb+\n"); fprintf(fout,"Cs+\n"); fprintf(fout,"Li+\n"); fprintf(fout,"Zn+\n"); fprintf(fout,"Sr+\n"); fprintf(fout,"Ba+\n"); fprintf(fout,"URE\n"); fprintf(fout,"ACE\n"); fprintf(fout,"NME\n"); fprintf(fout,"NHE\n"); fprintf(fout,"NH2\n"); fprintf(fout,"ALA\n"); fprintf(fout,"GLY\n"); fprintf(fout,"SER\n"); fprintf(fout,"THR\n"); fprintf(fout,"LEU\n"); fprintf(fout,"ILE\n"); fprintf(fout,"VAL\n"); fprintf(fout,"ASN\n"); fprintf(fout,"GLN\n"); fprintf(fout,"ARG\n"); fprintf(fout,"HID\n"); fprintf(fout,"HIE\n"); fprintf(fout,"HIP\n"); fprintf(fout,"HIS\n"); fprintf(fout,"TRP\n"); fprintf(fout,"PHE\n"); fprintf(fout,"TYR\n"); fprintf(fout,"GLU\n"); fprintf(fout,"ASP\n"); fprintf(fout,"LYP\n"); fprintf(fout,"ORN\n"); fprintf(fout,"DAB\n"); fprintf(fout,"LYS\n"); fprintf(fout,"LYN\n"); fprintf(fout,"PRO\n"); fprintf(fout,"HYP\n"); fprintf(fout,"CYS\n"); fprintf(fout,"CYN\n"); fprintf(fout,"CYM\n"); fprintf(fout,"CYX\n"); fprintf(fout,"CYS2\n"); fprintf(fout,"MET\n"); fprintf(fout,"ASH\n"); fprintf(fout,"GLH\n"); fprintf(fout,"CALA\n"); fprintf(fout,"CGLY\n"); fprintf(fout,"CSER\n"); fprintf(fout,"CTHR\n"); fprintf(fout,"CLEU\n"); fprintf(fout,"CILE\n"); fprintf(fout,"CVAL\n"); fprintf(fout,"CASN\n"); fprintf(fout,"CGLN\n"); fprintf(fout,"CARG\n"); fprintf(fout,"CHID\n"); fprintf(fout,"CHIE\n"); fprintf(fout,"CHIP\n"); fprintf(fout,"CHIS\n"); fprintf(fout,"CTRP\n"); fprintf(fout,"CPHE\n"); fprintf(fout,"CTYR\n"); fprintf(fout,"CGLU\n"); fprintf(fout,"CASP\n"); fprintf(fout,"CLYP\n"); fprintf(fout,"CLYS\n"); fprintf(fout,"CPRO\n"); fprintf(fout,"CCYS\n"); fprintf(fout,"CCYN\n"); fprintf(fout,"CCYX\n"); fprintf(fout,"CCYM\n"); fprintf(fout,"CMET\n"); fprintf(fout,"CASH\n"); fprintf(fout,"CGLH\n"); fprintf(fout,"CLYN\n"); fprintf(fout,"OALA\n"); fprintf(fout,"OARG\n"); fprintf(fout,"OASN\n"); fprintf(fout,"OASP\n"); fprintf(fout,"OCYS\n"); fprintf(fout,"OCYX\n"); fprintf(fout,"OGLN\n"); fprintf(fout,"OGLU\n"); fprintf(fout,"OGLY\n"); fprintf(fout,"OHID\n"); fprintf(fout,"OHIE\n"); fprintf(fout,"OHIP\n"); fprintf(fout,"OHIS\n"); fprintf(fout,"OILE\n"); fprintf(fout,"OLEU\n"); fprintf(fout,"OLYS\n"); fprintf(fout,"OMET\n"); fprintf(fout,"OPHE\n"); fprintf(fout,"OPRO\n"); fprintf(fout,"OSER\n"); fprintf(fout,"OTHR\n"); fprintf(fout,"OTYR\n"); fprintf(fout,"OTRP\n"); fprintf(fout,"OVAL\n"); fprintf(fout,"OASH\n"); fprintf(fout,"OGLH\n"); fprintf(fout,"OLYN\n"); fprintf(fout,"OCYM\n"); fprintf(fout,"NALA\n"); fprintf(fout,"NGLY\n"); fprintf(fout,"NSER\n"); fprintf(fout,"NTHR\n"); fprintf(fout,"NLEU\n"); fprintf(fout,"NILE\n"); fprintf(fout,"NVAL\n"); fprintf(fout,"NASN\n"); fprintf(fout,"NGLN\n"); fprintf(fout,"NARG\n"); fprintf(fout,"NHID\n"); fprintf(fout,"NHIE\n"); fprintf(fout,"NHIP\n"); fprintf(fout,"NHIS\n"); fprintf(fout,"NTRP\n"); fprintf(fout,"NPHE\n"); fprintf(fout,"NTYR\n"); fprintf(fout,"NGLU\n"); fprintf(fout,"NASP\n"); fprintf(fout,"NLYP\n"); fprintf(fout,"NLYS\n"); fprintf(fout,"NPRO\n"); fprintf(fout,"NCYS\n"); fprintf(fout,"NCYN\n"); fprintf(fout,"NCYM\n"); fprintf(fout,"NCYX\n"); fprintf(fout,"NMET\n"); fprintf(fout,"NASH\n"); fprintf(fout,"NGLH\n"); fprintf(fout,"NLYN\n"); fprintf(fout,"HALA\n"); fprintf(fout,"HARG\n"); fprintf(fout,"HASN\n"); fprintf(fout,"HASP\n"); fprintf(fout,"HCYS\n"); fprintf(fout,"HCYX\n"); fprintf(fout,"HGLN\n"); fprintf(fout,"HGLU\n"); fprintf(fout,"HGLY\n"); fprintf(fout,"HHID\n"); fprintf(fout,"HHIE\n"); fprintf(fout,"HHIP\n"); fprintf(fout,"HHIS\n"); fprintf(fout,"HILE\n"); fprintf(fout,"HLEU\n"); fprintf(fout,"HLYS\n"); fprintf(fout,"HMET\n"); fprintf(fout,"HPHE\n"); fprintf(fout,"HPRO\n"); fprintf(fout,"HSER\n"); fprintf(fout,"HTHR\n"); fprintf(fout,"HTYR\n"); fprintf(fout,"HTRP\n"); fprintf(fout,"HVAL\n"); fprintf(fout,"HASH\n"); fprintf(fout,"HGLH\n"); fprintf(fout,"HLYN\n"); fprintf(fout,"HCYM\n"); fprintf(fout,"ROH\n"); fprintf(fout,"DA5\n"); fprintf(fout,"DA\n"); fprintf(fout,"DA3\n"); fprintf(fout,"DAN\n"); fprintf(fout,"RA5\n"); fprintf(fout,"RA\n"); fprintf(fout,"RA3\n"); fprintf(fout,"RAN\n"); fprintf(fout,"DT5\n"); fprintf(fout,"DT\n"); fprintf(fout,"DT3\n"); fprintf(fout,"DTN\n"); fprintf(fout,"RU5\n"); fprintf(fout,"RU\n"); fprintf(fout,"RU3\n"); fprintf(fout,"RUN\n"); fprintf(fout,"DG5\n"); fprintf(fout,"DG\n"); fprintf(fout,"DG3\n"); fprintf(fout,"DGN\n"); fprintf(fout,"RG5\n"); fprintf(fout,"RG\n"); fprintf(fout,"RG3\n"); fprintf(fout,"RGN\n"); fprintf(fout,"DC5\n"); fprintf(fout,"DC\n"); fprintf(fout,"DC3\n"); fprintf(fout,"DCN\n"); fprintf(fout,"RC5\n"); fprintf(fout,"RC\n"); fprintf(fout,"RC3\n"); fprintf(fout,"RCN\n"); fprintf(fout,"1MA\n"); fprintf(fout,"1MG\n"); fprintf(fout,"2MG\n"); fprintf(fout,"5MC\n"); fprintf(fout,"7MG\n"); fprintf(fout,"H2U\n"); fprintf(fout,"I\n"); fprintf(fout,"M2G\n"); fprintf(fout,"OMC\n"); fprintf(fout,"OMG\n"); fprintf(fout,"PSU\n"); fprintf(fout,"Y\n"); fprintf(fout,"GBZN\n"); fprintf(fout,"GAPT\n"); fprintf(fout,"ALLRESIDUE\n"); fprintf(fout,"End\n"); } /************************************************************/ void createAminoResidueTpl(FILE* fout) { fprintf(fout,"Begin HOH Residue\n"); fprintf(fout,"OW OW -0.834\n"); fprintf(fout,"HW1 HW 0.417 \n"); fprintf(fout,"HW2 HW 0.417 \n"); fprintf(fout,"End\n"); fprintf(fout,"Begin T3P Residue\n"); fprintf(fout,"OW OW -0.834\n"); fprintf(fout,"HW1 HW 0.417 \n"); fprintf(fout,"HW2 HW 0.417 \n"); fprintf(fout,"End\n"); fprintf(fout,"Begin T3H Residue\n"); fprintf(fout,"OW OW -0.834\n"); fprintf(fout,"HW1 HW 0.417 \n"); fprintf(fout,"HW2 HW 0.417 \n"); fprintf(fout,"End\n"); fprintf(fout,"Begin T4P Residue\n"); fprintf(fout,"OW OW 0.000 \n"); fprintf(fout,"HW2 HW 0.520 \n"); fprintf(fout,"HW3 HW 0.520 \n"); fprintf(fout,"MW4 MW -1.040\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin T4E Residue\n"); fprintf(fout,"OW OW 0.000 \n"); fprintf(fout,"HW1 HW 0.52422\n"); fprintf(fout,"HW2 HW 0.52422\n"); fprintf(fout,"MW MW -1.04844\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin T5P Residue\n"); fprintf(fout,"OW OW 0.000 \n"); fprintf(fout,"HW1 HW 0.241 \n"); fprintf(fout,"HW2 HW 0.241 \n"); fprintf(fout,"LP1 MW -0.241\n"); fprintf(fout,"LP2 MW -0.241\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin IB+ Residue\n"); fprintf(fout,"IB IB 1.00000\n"); fprintf(fout,"IB IB 1.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Ca+ Residue\n"); fprintf(fout,"Ca Ca 2.00000\n"); fprintf(fout,"Ca Ca 2.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Cl- Residue\n"); fprintf(fout,"Cl Cl -1.00000\n"); fprintf(fout,"Cl Cl -1.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Na+ Residue\n"); fprintf(fout,"Na Na 1.00000\n"); fprintf(fout,"Na Na 1.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Mg+ Residue\n"); fprintf(fout,"Mg Mg 2.00000\n"); fprintf(fout,"Mg Mg 2.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin K+ Residue\n"); fprintf(fout,"K K 1.00000\n"); fprintf(fout,"K K 1.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Rb+ Residue\n"); fprintf(fout,"Rb Rb 1.00000\n"); fprintf(fout,"Rb Rb 1.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Cs+ Residue\n"); fprintf(fout,"CS Cs 1.00000\n"); fprintf(fout,"CS Cs 1.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Li+ Residue\n"); fprintf(fout,"Li Li 1.00000\n"); fprintf(fout,"Li Li 1.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Zn+ Residue\n"); fprintf(fout,"Zn Zn 2.00000\n"); fprintf(fout,"Zn Zn 2.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Sr+ Residue\n"); fprintf(fout,"Sr Sr 2.00000\n"); fprintf(fout,"Sr Sr 2.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Ba+ Residue\n"); fprintf(fout,"Ba Ba 2.00000\n"); fprintf(fout,"Ba Ba 2.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin URE Residue\n"); fprintf(fout,"C C 0.880229\n"); fprintf(fout,"O O -0.613359\n"); fprintf(fout,"N1 N -0.923545\n"); fprintf(fout,"H11 H 0.395055\n"); fprintf(fout,"H12 H 0.395055\n"); fprintf(fout,"N2 N -0.923545\n"); fprintf(fout,"H21 H 0.395055\n"); fprintf(fout,"H22 H 0.395055\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin ACE Residue\n"); fprintf(fout,"CH3 CT -0.36620\n"); fprintf(fout,"HH31 HC 0.11230\n"); fprintf(fout,"HH32 HC 0.11230\n"); fprintf(fout,"HH33 HC 0.11230\n"); fprintf(fout,"C C 0.59720\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NME Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CH3 CT -0.14900\n"); fprintf(fout,"HH31 H1 0.09760\n"); fprintf(fout,"HH32 H1 0.09760\n"); fprintf(fout,"HH33 H1 0.09760\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NHE Residue\n"); fprintf(fout,"N N -0.46300\n"); fprintf(fout,"H1 H 0.23150\n"); fprintf(fout,"H2 H 0.23150\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NH2 Residue\n"); fprintf(fout,"N N -0.46300\n"); fprintf(fout,"H1 H 0.23150\n"); fprintf(fout,"H2 H 0.23150\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin ALA Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT 0.03370\n"); fprintf(fout,"HA H1 0.08230\n"); fprintf(fout,"CB CT -0.18250\n"); fprintf(fout,"HB1 HC 0.06030\n"); fprintf(fout,"HB2 HC 0.06030\n"); fprintf(fout,"HB3 HC 0.06030\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin GLY Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.02520\n"); fprintf(fout,"HA1 H1 0.06980\n"); fprintf(fout,"HA2 H1 0.06980\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin SER Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.02490\n"); fprintf(fout,"HA H1 0.08430\n"); fprintf(fout,"CB CT 0.21170\n"); fprintf(fout,"HB1 H1 0.03520\n"); fprintf(fout,"HB2 H1 0.03520\n"); fprintf(fout,"OG OH -0.65460\n"); fprintf(fout,"HG HO 0.42750\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin THR Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.03890\n"); fprintf(fout,"HA H1 0.10070\n"); fprintf(fout,"CB CT 0.36540\n"); fprintf(fout,"HB H1 0.00430\n"); fprintf(fout,"CG2 CT -0.24380\n"); fprintf(fout,"HG21 HC 0.06420\n"); fprintf(fout,"HG22 HC 0.06420\n"); fprintf(fout,"HG23 HC 0.06420\n"); fprintf(fout,"OG1 OH -0.67610\n"); fprintf(fout,"HG1 HO 0.41020\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin LEU Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.05180\n"); fprintf(fout,"HA H1 0.09220\n"); fprintf(fout,"CB CT -0.11020\n"); fprintf(fout,"HB1 HC 0.04570\n"); fprintf(fout,"HB2 HC 0.04570\n"); fprintf(fout,"CG CT 0.35310\n"); fprintf(fout,"HG HC -0.03610\n"); fprintf(fout,"CD1 CT -0.41210\n"); fprintf(fout,"HD11 HC 0.10000\n"); fprintf(fout,"HD12 HC 0.10000\n"); fprintf(fout,"HD13 HC 0.10000\n"); fprintf(fout,"CD2 CT -0.41210\n"); fprintf(fout,"HD21 HC 0.10000\n"); fprintf(fout,"HD22 HC 0.10000\n"); fprintf(fout,"HD23 HC 0.10000\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin ILE Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.05970\n"); fprintf(fout,"HA H1 0.08690\n"); fprintf(fout,"CB CT 0.13030\n"); fprintf(fout,"HB HC 0.01870\n"); fprintf(fout,"CG2 CT -0.32040\n"); fprintf(fout,"HG21 HC 0.08820\n"); fprintf(fout,"HG22 HC 0.08820\n"); fprintf(fout,"HG23 HC 0.08820\n"); fprintf(fout,"CG1 CT -0.04300\n"); fprintf(fout,"HG11 HC 0.02360\n"); fprintf(fout,"HG12 HC 0.02360\n"); fprintf(fout,"CD CT -0.06600\n"); fprintf(fout,"HD1 HC 0.01860\n"); fprintf(fout,"HD2 HC 0.01860\n"); fprintf(fout,"HD3 HC 0.01860\n"); fprintf(fout,"CD1 CT -0.06600\n"); fprintf(fout,"HD1 HC 0.01860\n"); fprintf(fout,"HD2 HC 0.01860\n"); fprintf(fout,"HD3 HC 0.01860\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin VAL Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.08750\n"); fprintf(fout,"HA H1 0.09690\n"); fprintf(fout,"CB CT 0.29850\n"); fprintf(fout,"HB HC -0.02970\n"); fprintf(fout,"CG1 CT -0.31920\n"); fprintf(fout,"HG11 HC 0.07910\n"); fprintf(fout,"HG12 HC 0.07910\n"); fprintf(fout,"HG13 HC 0.07910\n"); fprintf(fout,"CG2 CT -0.31920\n"); fprintf(fout,"HG21 HC 0.07910\n"); fprintf(fout,"HG22 HC 0.07910\n"); fprintf(fout,"HG23 HC 0.07910\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin ASN Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT 0.01430\n"); fprintf(fout,"HA H1 0.10480\n"); fprintf(fout,"CB CT -0.20410\n"); fprintf(fout,"HB1 HC 0.07970\n"); fprintf(fout,"HB2 HC 0.07970\n"); fprintf(fout,"CG C 0.71300\n"); fprintf(fout,"OD1 O -0.59310\n"); fprintf(fout,"ND2 N -0.91910\n"); fprintf(fout,"HD21 H 0.41960\n"); fprintf(fout,"HD22 H 0.41960\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin GLN Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.00310\n"); fprintf(fout,"HA H1 0.08500\n"); fprintf(fout,"CB CT -0.00360\n"); fprintf(fout,"HB1 HC 0.01710\n"); fprintf(fout,"HB2 HC 0.01710\n"); fprintf(fout,"CG CT -0.06450\n"); fprintf(fout,"HG1 HC 0.03520\n"); fprintf(fout,"HG2 HC 0.03520\n"); fprintf(fout,"CD C 0.69510\n"); fprintf(fout,"OE1 O -0.60860\n"); fprintf(fout,"NE2 N -0.94070\n"); fprintf(fout,"HE21 H 0.42510\n"); fprintf(fout,"HE22 H 0.42510\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin ARG Residue\n"); fprintf(fout,"N N -0.34790\n"); fprintf(fout,"H H 0.27470\n"); fprintf(fout,"CA CT -0.26370\n"); fprintf(fout,"HA H1 0.15600\n"); fprintf(fout,"CB CT -0.00070\n"); fprintf(fout,"HB1 HC 0.03270\n"); fprintf(fout,"HB2 HC 0.03270\n"); fprintf(fout,"CG CT 0.03900\n"); fprintf(fout,"HG1 HC 0.02850\n"); fprintf(fout,"HG2 HC 0.02850\n"); fprintf(fout,"CD CT 0.04860\n"); fprintf(fout,"HD1 H1 0.06870\n"); fprintf(fout,"HD2 H1 0.06870\n"); fprintf(fout,"NE N2 -0.52950\n"); fprintf(fout,"HE H 0.34560\n"); fprintf(fout,"CZ CA 0.80760\n"); fprintf(fout,"NH1 N2 -0.86270\n"); fprintf(fout,"HH11 H 0.44780\n"); fprintf(fout,"HH12 H 0.44780\n"); fprintf(fout,"NH2 N2 -0.86270\n"); fprintf(fout,"HH21 H 0.44780\n"); fprintf(fout,"HH22 H 0.44780\n"); fprintf(fout,"C C 0.73410\n"); fprintf(fout,"O O -0.58940\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HID Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT 0.01880\n"); fprintf(fout,"HA H1 0.08810\n"); fprintf(fout,"CB CT -0.04620\n"); fprintf(fout,"HB1 HC 0.04020\n"); fprintf(fout,"HB2 HC 0.04020\n"); fprintf(fout,"CG CC -0.02660\n"); fprintf(fout,"ND1 NA -0.38110\n"); fprintf(fout,"HD1 H 0.36490\n"); fprintf(fout,"CE1 CR 0.20570\n"); fprintf(fout,"HE1 H5 0.13920\n"); fprintf(fout,"NE2 NB -0.57270\n"); fprintf(fout,"CD2 CV 0.12920\n"); fprintf(fout,"HD2 H4 0.11470\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HIE Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.05810\n"); fprintf(fout,"HA H1 0.13600\n"); fprintf(fout,"CB CT -0.00740\n"); fprintf(fout,"HB1 HC 0.03670\n"); fprintf(fout,"HB2 HC 0.03670\n"); fprintf(fout,"CG CC 0.18680\n"); fprintf(fout,"ND1 NB -0.54320\n"); fprintf(fout,"CE1 CR 0.16350\n"); fprintf(fout,"HE1 H5 0.14350\n"); fprintf(fout,"NE2 NA -0.27950\n"); fprintf(fout,"HE2 H 0.33390\n"); fprintf(fout,"CD2 CW -0.22070\n"); fprintf(fout,"HD2 H4 0.18620\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HIP Residue\n"); fprintf(fout,"N N -0.34790\n"); fprintf(fout,"H H 0.27470\n"); fprintf(fout,"CA CT -0.13540\n"); fprintf(fout,"HA H1 0.12120\n"); fprintf(fout,"CB CT -0.04140\n"); fprintf(fout,"HB1 HC 0.08100\n"); fprintf(fout,"HB2 HC 0.08100\n"); fprintf(fout,"CG CC -0.00120\n"); fprintf(fout,"ND1 NA -0.15130\n"); fprintf(fout,"HD1 H 0.38660\n"); fprintf(fout,"CE1 CR -0.01700\n"); fprintf(fout,"HE1 H5 0.26810\n"); fprintf(fout,"NE2 NA -0.17180\n"); fprintf(fout,"HE2 H 0.39110\n"); fprintf(fout,"CD2 CW -0.11410\n"); fprintf(fout,"HD2 H4 0.23170\n"); fprintf(fout,"C C 0.73410\n"); fprintf(fout,"O O -0.58940\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HIS Residue\n"); fprintf(fout,"N N -0.34790\n"); fprintf(fout,"H H 0.27470\n"); fprintf(fout,"CA CT -0.13540\n"); fprintf(fout,"HA H1 0.12120\n"); fprintf(fout,"CB CT -0.04140\n"); fprintf(fout,"HB1 HC 0.08100\n"); fprintf(fout,"HB2 HC 0.08100\n"); fprintf(fout,"CG CC -0.00120\n"); fprintf(fout,"ND1 NA -0.15130\n"); fprintf(fout,"HD1 H 0.38660\n"); fprintf(fout,"CE1 CR -0.01700\n"); fprintf(fout,"HE1 H5 0.26810\n"); fprintf(fout,"NE2 NA -0.17180\n"); fprintf(fout,"HE2 H 0.39110\n"); fprintf(fout,"CD2 CW -0.11410\n"); fprintf(fout,"HD2 H4 0.23170\n"); fprintf(fout,"C C 0.73410\n"); fprintf(fout,"O O -0.58940\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin TRP Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.02750\n"); fprintf(fout,"HA H1 0.11230\n"); fprintf(fout,"CB CT -0.00500\n"); fprintf(fout,"HB1 HC 0.03390\n"); fprintf(fout,"HB2 HC 0.03390\n"); fprintf(fout,"CG C* -0.14150\n"); fprintf(fout,"CD1 CW -0.16380\n"); fprintf(fout,"HD1 H4 0.20620\n"); fprintf(fout,"NE1 NA -0.34180\n"); fprintf(fout,"HE1 H 0.34120\n"); fprintf(fout,"CE2 CN 0.13800\n"); fprintf(fout,"CZ2 CA -0.26010\n"); fprintf(fout,"HZ2 HA 0.15720\n"); fprintf(fout,"CH2 CA -0.11340\n"); fprintf(fout,"HH2 HA 0.14170\n"); fprintf(fout,"CZ3 CA -0.19720\n"); fprintf(fout,"HZ3 HA 0.14470\n"); fprintf(fout,"CE3 CA -0.23870\n"); fprintf(fout,"HE3 HA 0.17000\n"); fprintf(fout,"CD2 CB 0.12430\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin PHE Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.00240\n"); fprintf(fout,"HA H1 0.09780\n"); fprintf(fout,"CB CT -0.03430\n"); fprintf(fout,"HB1 HC 0.02950\n"); fprintf(fout,"HB2 HC 0.02950\n"); fprintf(fout,"CG CA 0.01180\n"); fprintf(fout,"CD1 CA -0.12560\n"); fprintf(fout,"HD1 HA 0.13300\n"); fprintf(fout,"CE1 CA -0.17040\n"); fprintf(fout,"HE1 HA 0.14300\n"); fprintf(fout,"CZ CA -0.10720\n"); fprintf(fout,"HZ HA 0.12970\n"); fprintf(fout,"CE2 CA -0.17040\n"); fprintf(fout,"HE2 HA 0.14300\n"); fprintf(fout,"CD2 CA -0.12560\n"); fprintf(fout,"HD2 HA 0.13300\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin TYR Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.00140\n"); fprintf(fout,"HA H1 0.08760\n"); fprintf(fout,"CB CT -0.01520\n"); fprintf(fout,"HB1 HC 0.02950\n"); fprintf(fout,"HB2 HC 0.02950\n"); fprintf(fout,"CG CA -0.00110\n"); fprintf(fout,"CD1 CA -0.19060\n"); fprintf(fout,"HD1 HA 0.16990\n"); fprintf(fout,"CE1 CA -0.23410\n"); fprintf(fout,"HE1 HA 0.16560\n"); fprintf(fout,"CZ C 0.32260\n"); fprintf(fout,"OH OH -0.55790\n"); fprintf(fout,"HH HO 0.39920\n"); fprintf(fout,"CE2 CA -0.23410\n"); fprintf(fout,"HE2 HA 0.16560\n"); fprintf(fout,"CD2 CA -0.19060\n"); fprintf(fout,"HD2 HA 0.16990\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin GLU Residue\n"); fprintf(fout,"N N -0.51630\n"); fprintf(fout,"H H 0.29360\n"); fprintf(fout,"CA CT 0.03970\n"); fprintf(fout,"HA H1 0.11050\n"); fprintf(fout,"CB CT 0.05600\n"); fprintf(fout,"HB1 HC -0.01730\n"); fprintf(fout,"HB2 HC -0.01730\n"); fprintf(fout,"CG CT 0.01360\n"); fprintf(fout,"HG1 HC -0.04250\n"); fprintf(fout,"HG2 HC -0.04250\n"); fprintf(fout,"CD C 0.80540\n"); fprintf(fout,"OE1 O2 -0.81880\n"); fprintf(fout,"OE2 O2 -0.81880\n"); fprintf(fout,"C C 0.53660\n"); fprintf(fout,"O O -0.58190\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin ASP Residue\n"); fprintf(fout,"N N -0.51630\n"); fprintf(fout,"H H 0.29360\n"); fprintf(fout,"CA CT 0.03810\n"); fprintf(fout,"HA H1 0.08800\n"); fprintf(fout,"CB CT -0.03030\n"); fprintf(fout,"HB1 HC -0.01220\n"); fprintf(fout,"HB2 HC -0.01220\n"); fprintf(fout,"CG C 0.79940\n"); fprintf(fout,"OD1 O2 -0.80140\n"); fprintf(fout,"OD2 O2 -0.80140\n"); fprintf(fout,"C C 0.53660\n"); fprintf(fout,"O O -0.58190\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin LYP Residue\n"); fprintf(fout,"N N -0.34790\n"); fprintf(fout,"H H 0.27470\n"); fprintf(fout,"CA CT -0.24000\n"); fprintf(fout,"HA H1 0.14260\n"); fprintf(fout,"CB CT -0.00940\n"); fprintf(fout,"HB1 HC 0.03620\n"); fprintf(fout,"HB2 HC 0.03620\n"); fprintf(fout,"CG CT 0.01870\n"); fprintf(fout,"HG1 HC 0.01030\n"); fprintf(fout,"HG2 HC 0.01030\n"); fprintf(fout,"CD CT -0.04790\n"); fprintf(fout,"HD1 HC 0.06210\n"); fprintf(fout,"HD2 HC 0.06210\n"); fprintf(fout,"CE CT -0.01430\n"); fprintf(fout,"HE1 HP 0.11350\n"); fprintf(fout,"HE2 HP 0.11350\n"); fprintf(fout,"NZ N3 -0.38540\n"); fprintf(fout,"HZ1 H 0.34000\n"); fprintf(fout,"HZ2 H 0.34000\n"); fprintf(fout,"HZ3 H 0.34000\n"); fprintf(fout,"C C 0.73410\n"); fprintf(fout,"O O -0.58940\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin ORN Residue\n"); fprintf(fout,"N N -0.34790\n"); fprintf(fout,"H H 0.27470\n"); fprintf(fout,"CA CT -0.24000\n"); fprintf(fout,"HA H1 0.14260\n"); fprintf(fout,"CB CT 0.00990\n"); fprintf(fout,"HB1 HC 0.03620\n"); fprintf(fout,"HB2 HC 0.03620\n"); fprintf(fout,"CG CT -0.02790\n"); fprintf(fout,"HG1 HC 0.06210\n"); fprintf(fout,"HG2 HC 0.06210\n"); fprintf(fout,"CD CT -0.01430\n"); fprintf(fout,"HD1 HP 0.11350\n"); fprintf(fout,"HD2 HP 0.11350\n"); fprintf(fout,"NE N3 -0.38540\n"); fprintf(fout,"HE1 H 0.34000\n"); fprintf(fout,"HE2 H 0.34000\n"); fprintf(fout,"HE3 H 0.34000\n"); fprintf(fout,"C C 0.73410\n"); fprintf(fout,"O O -0.58940\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DAB Residue\n"); fprintf(fout,"N N -0.34790\n"); fprintf(fout,"H H 0.27470\n"); fprintf(fout,"CA CT -0.24000\n"); fprintf(fout,"HA H1 0.14260\n"); fprintf(fout,"CB CT 0.02920\n"); fprintf(fout,"HB1 HC 0.07470\n"); fprintf(fout,"HB2 HC 0.07470\n"); fprintf(fout,"CG CT -0.01430\n"); fprintf(fout,"HG1 HP 0.11350\n"); fprintf(fout,"HG2 HP 0.11350\n"); fprintf(fout,"ND N3 -0.38540\n"); fprintf(fout,"HD1 H 0.34000\n"); fprintf(fout,"HD2 H 0.34000\n"); fprintf(fout,"HD3 H 0.34000\n"); fprintf(fout,"C C 0.73410\n"); fprintf(fout,"O O -0.58940\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin LYS Residue\n"); fprintf(fout,"N N -0.34790\n"); fprintf(fout,"H H 0.27470\n"); fprintf(fout,"CA CT -0.24000\n"); fprintf(fout,"HA H1 0.14260\n"); fprintf(fout,"CB CT -0.00940\n"); fprintf(fout,"HB1 HC 0.03620\n"); fprintf(fout,"HB2 HC 0.03620\n"); fprintf(fout,"CG CT 0.01870\n"); fprintf(fout,"HG1 HC 0.01030\n"); fprintf(fout,"HG2 HC 0.01030\n"); fprintf(fout,"CD CT -0.04790\n"); fprintf(fout,"HD1 HC 0.06210\n"); fprintf(fout,"HD2 HC 0.06210\n"); fprintf(fout,"CE CT -0.01430\n"); fprintf(fout,"HE1 HP 0.11350\n"); fprintf(fout,"HE2 HP 0.11350\n"); fprintf(fout,"NZ N3 -0.38540\n"); fprintf(fout,"HZ1 H 0.34000\n"); fprintf(fout,"HZ2 H 0.34000\n"); fprintf(fout,"HZ3 H 0.34000\n"); fprintf(fout,"C C 0.73410\n"); fprintf(fout,"O O -0.58940\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin LYN Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.07206\n"); fprintf(fout,"HA H1 0.09940\n"); fprintf(fout,"CB CT -0.04845\n"); fprintf(fout,"HB1 HC 0.03400\n"); fprintf(fout,"HB2 HC 0.03400\n"); fprintf(fout,"CG CT 0.06612\n"); fprintf(fout,"HG1 HC 0.01041\n"); fprintf(fout,"HG2 HC 0.01041\n"); fprintf(fout,"CD CT -0.03768\n"); fprintf(fout,"HD1 HC 0.01155\n"); fprintf(fout,"HD2 HC 0.01155\n"); fprintf(fout,"CE CT 0.32604\n"); fprintf(fout,"HE1 HP -0.03358\n"); fprintf(fout,"HE2 HP -0.03358\n"); fprintf(fout,"NZ N3 -1.03581\n"); fprintf(fout,"HZ1 H 0.38604\n"); fprintf(fout,"HZ2 H 0.38604\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin PRO Residue\n"); fprintf(fout,"N N -0.25480\n"); fprintf(fout,"CD CT 0.01920\n"); fprintf(fout,"HD1 H1 0.03910\n"); fprintf(fout,"HD2 H1 0.03910\n"); fprintf(fout,"CG CT 0.01890\n"); fprintf(fout,"HG1 HC 0.02130\n"); fprintf(fout,"HG2 HC 0.02130\n"); fprintf(fout,"CB CT -0.00700\n"); fprintf(fout,"HB1 HC 0.02530\n"); fprintf(fout,"HB2 HC 0.02530\n"); fprintf(fout,"CA CT -0.02660\n"); fprintf(fout,"HA H1 0.06410\n"); fprintf(fout,"C C 0.58960\n"); fprintf(fout,"O O -0.57480\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HYP Residue\n"); fprintf(fout,"N N -0.25480\n"); fprintf(fout,"CD2 CT 0.05950\n"); fprintf(fout,"HD21 H1 0.07000\n"); fprintf(fout,"HD22 H1 0.07000\n"); fprintf(fout,"CG CT 0.04000\n"); fprintf(fout,"HG H1 0.04160\n"); fprintf(fout,"OD1 OH -0.61340\n"); fprintf(fout,"HD1 HO 0.38510\n"); fprintf(fout,"CB CT 0.02030\n"); fprintf(fout,"HB1 HC 0.04260\n"); fprintf(fout,"HB2 HC 0.04260\n"); fprintf(fout,"CA CT 0.00470\n"); fprintf(fout,"HA H1 0.07700\n"); fprintf(fout,"C C 0.58960\n"); fprintf(fout,"O O -0.57480\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CYS Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT 0.02130\n"); fprintf(fout,"HA H1 0.11240\n"); fprintf(fout,"CB CT -0.12310\n"); fprintf(fout,"HB1 H1 0.11120\n"); fprintf(fout,"HB2 H1 0.11120\n"); fprintf(fout,"SG SH -0.31190\n"); fprintf(fout,"HG HS 0.19330\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CYN Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT 0.02130\n"); fprintf(fout,"HA H1 0.11240\n"); fprintf(fout,"CB CT -0.12310\n"); fprintf(fout,"HB1 H1 0.11120\n"); fprintf(fout,"HB2 H1 0.11120\n"); fprintf(fout,"SG SH -0.31190\n"); fprintf(fout,"HG HS 0.19330\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CYM Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.03510\n"); fprintf(fout,"HA H1 0.05080\n"); fprintf(fout,"CB CT -0.24130\n"); fprintf(fout,"HB1 H1 0.11220\n"); fprintf(fout,"HB2 H1 0.11220\n"); fprintf(fout,"SG SH -0.88440\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CYX Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT 0.04290\n"); fprintf(fout,"HA H1 0.07660\n"); fprintf(fout,"CB CT -0.07900\n"); fprintf(fout,"HB1 H1 0.09100\n"); fprintf(fout,"HB2 H1 0.09100\n"); fprintf(fout,"SG S -0.10810\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CYS2 Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT 0.04290\n"); fprintf(fout,"HA H1 0.07660\n"); fprintf(fout,"CB CT -0.07900\n"); fprintf(fout,"HB1 H1 0.09100\n"); fprintf(fout,"HB2 H1 0.09100\n"); fprintf(fout,"SG S -0.10810\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin MET Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.02370\n"); fprintf(fout,"HA H1 0.08800\n"); fprintf(fout,"CB CT 0.03420\n"); fprintf(fout,"HB1 HC 0.02410\n"); fprintf(fout,"HB2 HC 0.02410\n"); fprintf(fout,"CG CT 0.00180\n"); fprintf(fout,"HG1 H1 0.04400\n"); fprintf(fout,"HG2 H1 0.04400\n"); fprintf(fout,"SD S -0.27370\n"); fprintf(fout,"CE CT -0.05360\n"); fprintf(fout,"HE1 H1 0.06840\n"); fprintf(fout,"HE2 H1 0.06840\n"); fprintf(fout,"HE3 H1 0.06840\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin ASH Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT 0.03410\n"); fprintf(fout,"HA H1 0.08640\n"); fprintf(fout,"CB CT -0.03160\n"); fprintf(fout,"HB1 HC 0.04880\n"); fprintf(fout,"HB2 HC 0.04880\n"); fprintf(fout,"CG C 0.64620\n"); fprintf(fout,"OD1 O -0.55540\n"); fprintf(fout,"OD2 OH -0.63760\n"); fprintf(fout,"HD2 HO 0.47470\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin GLH Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT 0.01450\n"); fprintf(fout,"HA H1 0.07790\n"); fprintf(fout,"CB CT -0.00710\n"); fprintf(fout,"HB1 HC 0.02560\n"); fprintf(fout,"HB2 HC 0.02560\n"); fprintf(fout,"CG CT -0.01740\n"); fprintf(fout,"HG1 HC 0.04300\n"); fprintf(fout,"HG2 HC 0.04300\n"); fprintf(fout,"CD C 0.68010\n"); fprintf(fout,"OE1 O -0.58380\n"); fprintf(fout,"OE2 OH -0.65110\n"); fprintf(fout,"HE2 HO 0.46410\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CALA Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.17470\n"); fprintf(fout,"HA H1 0.10670\n"); fprintf(fout,"CB CT -0.20930\n"); fprintf(fout,"HB1 HC 0.07640\n"); fprintf(fout,"HB2 HC 0.07640\n"); fprintf(fout,"HB3 HC 0.07640\n"); fprintf(fout,"C C 0.77310\n"); fprintf(fout,"OC1 O2 -0.80550\n"); fprintf(fout,"OC2 O2 -0.80550\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CGLY Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.24930\n"); fprintf(fout,"HA1 H1 0.10560\n"); fprintf(fout,"HA2 H1 0.10560\n"); fprintf(fout,"C C 0.72310\n"); fprintf(fout,"OC1 O2 -0.78550\n"); fprintf(fout,"OC2 O2 -0.78550\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CSER Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.27220\n"); fprintf(fout,"HA H1 0.13040\n"); fprintf(fout,"CB CT 0.11230\n"); fprintf(fout,"HB1 H1 0.08130\n"); fprintf(fout,"HB2 H1 0.08130\n"); fprintf(fout,"OG OH -0.65140\n"); fprintf(fout,"HG HO 0.44740\n"); fprintf(fout,"C C 0.81130\n"); fprintf(fout,"OC1 O2 -0.81320\n"); fprintf(fout,"OC2 O2 -0.81320\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CTHR Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.24200\n"); fprintf(fout,"HA H1 0.12070\n"); fprintf(fout,"CB CT 0.30250\n"); fprintf(fout,"HB H1 0.00780\n"); fprintf(fout,"CG2 CT -0.18530\n"); fprintf(fout,"HG21 HC 0.05860\n"); fprintf(fout,"HG22 HC 0.05860\n"); fprintf(fout,"HG23 HC 0.05860\n"); fprintf(fout,"OG1 OH -0.64960\n"); fprintf(fout,"HG1 HO 0.41190\n"); fprintf(fout,"C C 0.78100\n"); fprintf(fout,"OC1 O2 -0.80440\n"); fprintf(fout,"OC2 O2 -0.80440\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CLEU Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.28470\n"); fprintf(fout,"HA H1 0.13460\n"); fprintf(fout,"CB CT -0.24690\n"); fprintf(fout,"HB1 HC 0.09740\n"); fprintf(fout,"HB2 HC 0.09740\n"); fprintf(fout,"CG CT 0.37060\n"); fprintf(fout,"HG HC -0.03740\n"); fprintf(fout,"CD1 CT -0.41630\n"); fprintf(fout,"HD11 HC 0.10380\n"); fprintf(fout,"HD12 HC 0.10380\n"); fprintf(fout,"HD13 HC 0.10380\n"); fprintf(fout,"CD2 CT -0.41630\n"); fprintf(fout,"HD21 HC 0.10380\n"); fprintf(fout,"HD22 HC 0.10380\n"); fprintf(fout,"HD23 HC 0.10380\n"); fprintf(fout,"C C 0.83260\n"); fprintf(fout,"OC1 O2 -0.81990\n"); fprintf(fout,"OC2 O2 -0.81990\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CILE Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.31000\n"); fprintf(fout,"HA H1 0.13750\n"); fprintf(fout,"CB CT 0.03630\n"); fprintf(fout,"HB HC 0.07660\n"); fprintf(fout,"CG2 CT -0.34980\n"); fprintf(fout,"HG21 HC 0.10210\n"); fprintf(fout,"HG22 HC 0.10210\n"); fprintf(fout,"HG23 HC 0.10210\n"); fprintf(fout,"CG1 CT -0.03230\n"); fprintf(fout,"HG11 HC 0.03210\n"); fprintf(fout,"HG12 HC 0.03210\n"); fprintf(fout,"CD CT -0.06990\n"); fprintf(fout,"HD1 HC 0.01960\n"); fprintf(fout,"HD2 HC 0.01960\n"); fprintf(fout,"HD3 HC 0.01960\n"); fprintf(fout,"C C 0.83430\n"); fprintf(fout,"OC1 O2 -0.81900\n"); fprintf(fout,"OC2 O2 -0.81900\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CVAL Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.34380\n"); fprintf(fout,"HA H1 0.14380\n"); fprintf(fout,"CB CT 0.19400\n"); fprintf(fout,"HB HC 0.03080\n"); fprintf(fout,"CG1 CT -0.30640\n"); fprintf(fout,"HG11 HC 0.08360\n"); fprintf(fout,"HG12 HC 0.08360\n"); fprintf(fout,"HG13 HC 0.08360\n"); fprintf(fout,"CG2 CT -0.30640\n"); fprintf(fout,"HG21 HC 0.08360\n"); fprintf(fout,"HG22 HC 0.08360\n"); fprintf(fout,"HG23 HC 0.08360\n"); fprintf(fout,"C C 0.83500\n"); fprintf(fout,"OC1 O2 -0.81730\n"); fprintf(fout,"OC2 O2 -0.81730\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CASN Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.20800\n"); fprintf(fout,"HA H1 0.13580\n"); fprintf(fout,"CB CT -0.22990\n"); fprintf(fout,"HB1 HC 0.10230\n"); fprintf(fout,"HB2 HC 0.10230\n"); fprintf(fout,"CG C 0.71530\n"); fprintf(fout,"OD1 O -0.60100\n"); fprintf(fout,"ND2 N -0.90840\n"); fprintf(fout,"HD21 H 0.41500\n"); fprintf(fout,"HD22 H 0.41500\n"); fprintf(fout,"C C 0.80500\n"); fprintf(fout,"OC1 O2 -0.81470\n"); fprintf(fout,"OC2 O2 -0.81470\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CGLN Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.22480\n"); fprintf(fout,"HA H1 0.12320\n"); fprintf(fout,"CB CT -0.06640\n"); fprintf(fout,"HB1 HC 0.04520\n"); fprintf(fout,"HB2 HC 0.04520\n"); fprintf(fout,"CG CT -0.02100\n"); fprintf(fout,"HG1 HC 0.02030\n"); fprintf(fout,"HG2 HC 0.02030\n"); fprintf(fout,"CD C 0.70930\n"); fprintf(fout,"OE1 O -0.60980\n"); fprintf(fout,"NE2 N -0.95740\n"); fprintf(fout,"HE21 H 0.43040\n"); fprintf(fout,"HE22 H 0.43040\n"); fprintf(fout,"C C 0.77750\n"); fprintf(fout,"OC1 O2 -0.80420\n"); fprintf(fout,"OC2 O2 -0.80420\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CARG Residue\n"); fprintf(fout,"N N -0.34810\n"); fprintf(fout,"H H 0.27640\n"); fprintf(fout,"CA CT -0.30680\n"); fprintf(fout,"HA H1 0.14470\n"); fprintf(fout,"CB CT -0.03740\n"); fprintf(fout,"HB1 HC 0.03710\n"); fprintf(fout,"HB2 HC 0.03710\n"); fprintf(fout,"CG CT 0.07440\n"); fprintf(fout,"HG1 HC 0.01850\n"); fprintf(fout,"HG2 HC 0.01850\n"); fprintf(fout,"CD CT 0.11140\n"); fprintf(fout,"HD1 H1 0.04680\n"); fprintf(fout,"HD2 H1 0.04680\n"); fprintf(fout,"NE N2 -0.55640\n"); fprintf(fout,"HE H 0.34790\n"); fprintf(fout,"CZ CA 0.83680\n"); fprintf(fout,"NH1 N2 -0.87370\n"); fprintf(fout,"HH11 H 0.44930\n"); fprintf(fout,"HH12 H 0.44930\n"); fprintf(fout,"NH2 N2 -0.87370\n"); fprintf(fout,"HH21 H 0.44930\n"); fprintf(fout,"HH22 H 0.44930\n"); fprintf(fout,"C C 0.85570\n"); fprintf(fout,"OC1 O2 -0.82660\n"); fprintf(fout,"OC2 O2 -0.82660\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CHID Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.17390\n"); fprintf(fout,"HA H1 0.11000\n"); fprintf(fout,"CB CT -0.10460\n"); fprintf(fout,"HB1 HC 0.05650\n"); fprintf(fout,"HB2 HC 0.05650\n"); fprintf(fout,"CG CC 0.02930\n"); fprintf(fout,"ND1 NA -0.38920\n"); fprintf(fout,"HD1 H 0.37550\n"); fprintf(fout,"CE1 CR 0.19250\n"); fprintf(fout,"HE1 H5 0.14180\n"); fprintf(fout,"NE2 NB -0.56290\n"); fprintf(fout,"CD2 CV 0.10010\n"); fprintf(fout,"HD2 H4 0.12410\n"); fprintf(fout,"C C 0.76150\n"); fprintf(fout,"OC1 O2 -0.80160\n"); fprintf(fout,"OC2 O2 -0.80160\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CHIE Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.26990\n"); fprintf(fout,"HA H1 0.16500\n"); fprintf(fout,"CB CT -0.10680\n"); fprintf(fout,"HB1 HC 0.06200\n"); fprintf(fout,"HB2 HC 0.06200\n"); fprintf(fout,"CG CC 0.27240\n"); fprintf(fout,"ND1 NB -0.55170\n"); fprintf(fout,"CE1 CR 0.15580\n"); fprintf(fout,"HE1 H5 0.14480\n"); fprintf(fout,"NE2 NA -0.26700\n"); fprintf(fout,"HE2 H 0.33190\n"); fprintf(fout,"CD2 CW -0.25880\n"); fprintf(fout,"HD2 H4 0.19570\n"); fprintf(fout,"C C 0.79160\n"); fprintf(fout,"OC1 O2 -0.80650\n"); fprintf(fout,"OC2 O2 -0.80650\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CHIP Residue\n"); fprintf(fout,"N N -0.34810\n"); fprintf(fout,"H H 0.27640\n"); fprintf(fout,"CA CT -0.14450\n"); fprintf(fout,"HA H1 0.11150\n"); fprintf(fout,"CB CT -0.08000\n"); fprintf(fout,"HB1 HC 0.08680\n"); fprintf(fout,"HB2 HC 0.08680\n"); fprintf(fout,"CG CC 0.02980\n"); fprintf(fout,"ND1 NA -0.15010\n"); fprintf(fout,"HD1 H 0.38830\n"); fprintf(fout,"CE1 CR -0.02510\n"); fprintf(fout,"HE1 H5 0.26940\n"); fprintf(fout,"NE2 NA -0.16830\n"); fprintf(fout,"HE2 H 0.39130\n"); fprintf(fout,"CD2 CW -0.12560\n"); fprintf(fout,"HD2 H4 0.23360\n"); fprintf(fout,"C C 0.80320\n"); fprintf(fout,"OC1 O2 -0.81770\n"); fprintf(fout,"OC2 O2 -0.81770\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CHIS Residue\n"); fprintf(fout,"N N -0.34810\n"); fprintf(fout,"H H 0.27640\n"); fprintf(fout,"CA CT -0.14450\n"); fprintf(fout,"HA H1 0.11150\n"); fprintf(fout,"CB CT -0.08000\n"); fprintf(fout,"HB1 HC 0.08680\n"); fprintf(fout,"HB2 HC 0.08680\n"); fprintf(fout,"CG CC 0.02980\n"); fprintf(fout,"ND1 NA -0.15010\n"); fprintf(fout,"HD1 H 0.38830\n"); fprintf(fout,"CE1 CR -0.02510\n"); fprintf(fout,"HE1 H5 0.26940\n"); fprintf(fout,"NE2 NA -0.16830\n"); fprintf(fout,"HE2 H 0.39130\n"); fprintf(fout,"CD2 CW -0.12560\n"); fprintf(fout,"HD2 H4 0.23360\n"); fprintf(fout,"C C 0.80320\n"); fprintf(fout,"OC1 O2 -0.81770\n"); fprintf(fout,"OC2 O2 -0.81770\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CTRP Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.20840\n"); fprintf(fout,"HA H1 0.12720\n"); fprintf(fout,"CB CT -0.07420\n"); fprintf(fout,"HB1 HC 0.04970\n"); fprintf(fout,"HB2 HC 0.04970\n"); fprintf(fout,"CG C* -0.07960\n"); fprintf(fout,"CD1 CW -0.18080\n"); fprintf(fout,"HD1 H4 0.20430\n"); fprintf(fout,"NE1 NA -0.33160\n"); fprintf(fout,"HE1 H 0.34130\n"); fprintf(fout,"CE2 CN 0.12220\n"); fprintf(fout,"CZ2 CA -0.25940\n"); fprintf(fout,"HZ2 HA 0.15670\n"); fprintf(fout,"CH2 CA -0.10200\n"); fprintf(fout,"HH2 HA 0.14010\n"); fprintf(fout,"CZ3 CA -0.22870\n"); fprintf(fout,"HZ3 HA 0.15070\n"); fprintf(fout,"CE3 CA -0.18370\n"); fprintf(fout,"HE3 HA 0.14910\n"); fprintf(fout,"CD2 CB 0.10780\n"); fprintf(fout,"C C 0.76580\n"); fprintf(fout,"OC1 O2 -0.80110\n"); fprintf(fout,"OC2 O2 -0.80110\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CPHE Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.18250\n"); fprintf(fout,"HA H1 0.10980\n"); fprintf(fout,"CB CT -0.09590\n"); fprintf(fout,"HB1 HC 0.04430\n"); fprintf(fout,"HB2 HC 0.04430\n"); fprintf(fout,"CG CA 0.05520\n"); fprintf(fout,"CD1 CA -0.13000\n"); fprintf(fout,"HD1 HA 0.14080\n"); fprintf(fout,"CE1 CA -0.18470\n"); fprintf(fout,"HE1 HA 0.14610\n"); fprintf(fout,"CZ CA -0.09440\n"); fprintf(fout,"HZ HA 0.12800\n"); fprintf(fout,"CE2 CA -0.18470\n"); fprintf(fout,"HE2 HA 0.14610\n"); fprintf(fout,"CD2 CA -0.13000\n"); fprintf(fout,"HD2 HA 0.14080\n"); fprintf(fout,"C C 0.76600\n"); fprintf(fout,"OC1 O2 -0.80260\n"); fprintf(fout,"OC2 O2 -0.80260\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CTYR Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.20150\n"); fprintf(fout,"HA H1 0.10920\n"); fprintf(fout,"CB CT -0.07520\n"); fprintf(fout,"HB1 HC 0.04900\n"); fprintf(fout,"HB2 HC 0.04900\n"); fprintf(fout,"CG CA 0.02430\n"); fprintf(fout,"CD1 CA -0.19220\n"); fprintf(fout,"HD1 HA 0.17800\n"); fprintf(fout,"CE1 CA -0.24580\n"); fprintf(fout,"HE1 HA 0.16730\n"); fprintf(fout,"CZ C 0.33950\n"); fprintf(fout,"OH OH -0.56430\n"); fprintf(fout,"HH HO 0.40170\n"); fprintf(fout,"CE2 CA -0.24580\n"); fprintf(fout,"HE2 HA 0.16730\n"); fprintf(fout,"CD2 CA -0.19220\n"); fprintf(fout,"HD2 HA 0.17800\n"); fprintf(fout,"C C 0.78170\n"); fprintf(fout,"OC1 O2 -0.80700\n"); fprintf(fout,"OC2 O2 -0.80700\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CGLU Residue\n"); fprintf(fout,"N N -0.51920\n"); fprintf(fout,"H H 0.30550\n"); fprintf(fout,"CA CT -0.20590\n"); fprintf(fout,"HA H1 0.13990\n"); fprintf(fout,"CB CT 0.00710\n"); fprintf(fout,"HB1 HC -0.00780\n"); fprintf(fout,"HB2 HC -0.00780\n"); fprintf(fout,"CG CT 0.06750\n"); fprintf(fout,"HG1 HC -0.05480\n"); fprintf(fout,"HG2 HC -0.05480\n"); fprintf(fout,"CD C 0.81830\n"); fprintf(fout,"OE1 O2 -0.82200\n"); fprintf(fout,"OE2 O2 -0.82200\n"); fprintf(fout,"C C 0.74200\n"); fprintf(fout,"OC1 O2 -0.79300\n"); fprintf(fout,"OC2 O2 -0.79300\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CASP Residue\n"); fprintf(fout,"N N -0.51920\n"); fprintf(fout,"H H 0.30550\n"); fprintf(fout,"CA CT -0.18170\n"); fprintf(fout,"HA H1 0.10460\n"); fprintf(fout,"CB CT -0.06770\n"); fprintf(fout,"HB1 HC -0.02120\n"); fprintf(fout,"HB2 HC -0.02120\n"); fprintf(fout,"CG C 0.88510\n"); fprintf(fout,"OD1 O2 -0.81620\n"); fprintf(fout,"OD2 O2 -0.81620\n"); fprintf(fout,"C C 0.72560\n"); fprintf(fout,"OC1 O2 -0.78870\n"); fprintf(fout,"OC2 O2 -0.78870\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CLYS Residue\n"); fprintf(fout,"N N -0.34810\n"); fprintf(fout,"H H 0.27640\n"); fprintf(fout,"CA CT -0.29030\n"); fprintf(fout,"HA H1 0.14380\n"); fprintf(fout,"CB CT -0.05380\n"); fprintf(fout,"HB1 HC 0.04820\n"); fprintf(fout,"HB2 HC 0.04820\n"); fprintf(fout,"CG CT 0.02270\n"); fprintf(fout,"HG1 HC 0.01340\n"); fprintf(fout,"HG2 HC 0.01340\n"); fprintf(fout,"CD CT -0.03920\n"); fprintf(fout,"HD1 HC 0.06110\n"); fprintf(fout,"HD2 HC 0.06110\n"); fprintf(fout,"CE CT -0.01760\n"); fprintf(fout,"HE1 HP 0.11210\n"); fprintf(fout,"HE2 HP 0.11210\n"); fprintf(fout,"NZ N3 -0.37410\n"); fprintf(fout,"HZ1 H 0.33740\n"); fprintf(fout,"HZ2 H 0.33740\n"); fprintf(fout,"HZ3 H 0.33740\n"); fprintf(fout,"C C 0.84880\n"); fprintf(fout,"OC1 O2 -0.82520\n"); fprintf(fout,"OC2 O2 -0.82520\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CLYP Residue\n"); fprintf(fout,"N N -0.34810\n"); fprintf(fout,"H H 0.27640\n"); fprintf(fout,"CA CT -0.29030\n"); fprintf(fout,"HA H1 0.14380\n"); fprintf(fout,"CB CT -0.05380\n"); fprintf(fout,"HB1 HC 0.04820\n"); fprintf(fout,"HB2 HC 0.04820\n"); fprintf(fout,"CG CT 0.02270\n"); fprintf(fout,"HG1 HC 0.01340\n"); fprintf(fout,"HG2 HC 0.01340\n"); fprintf(fout,"CD CT -0.03920\n"); fprintf(fout,"HD1 HC 0.06110\n"); fprintf(fout,"HD2 HC 0.06110\n"); fprintf(fout,"CE CT -0.01760\n"); fprintf(fout,"HE1 HP 0.11210\n"); fprintf(fout,"HE2 HP 0.11210\n"); fprintf(fout,"NZ N3 -0.37410\n"); fprintf(fout,"HZ1 H 0.33740\n"); fprintf(fout,"HZ2 H 0.33740\n"); fprintf(fout,"HZ3 H 0.33740\n"); fprintf(fout,"C C 0.84880\n"); fprintf(fout,"OC1 O2 -0.82520\n"); fprintf(fout,"OC2 O2 -0.82520\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CPRO Residue\n"); fprintf(fout,"N N -0.28020\n"); fprintf(fout,"CD CT 0.04340\n"); fprintf(fout,"HD1 H1 0.03310\n"); fprintf(fout,"HD2 H1 0.03310\n"); fprintf(fout,"CG CT 0.04660\n"); fprintf(fout,"HG1 HC 0.01720\n"); fprintf(fout,"HG2 HC 0.01720\n"); fprintf(fout,"CB CT -0.05430\n"); fprintf(fout,"HB1 HC 0.03810\n"); fprintf(fout,"HB2 HC 0.03810\n"); fprintf(fout,"CA CT -0.13360\n"); fprintf(fout,"HA H1 0.07760\n"); fprintf(fout,"C C 0.66310\n"); fprintf(fout,"OC1 O2 -0.76970\n"); fprintf(fout,"OC2 O2 -0.76970\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CCYS Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.16350\n"); fprintf(fout,"HA H1 0.13960\n"); fprintf(fout,"CB CT -0.19960\n"); fprintf(fout,"HB1 H1 0.14370\n"); fprintf(fout,"HB2 H1 0.14370\n"); fprintf(fout,"SG SH -0.31020\n"); fprintf(fout,"HG HS 0.20680\n"); fprintf(fout,"C C 0.74970\n"); fprintf(fout,"OC1 O2 -0.79810\n"); fprintf(fout,"OC2 O2 -0.79810\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CCYN Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.16350\n"); fprintf(fout,"HA H1 0.13960\n"); fprintf(fout,"CB CT -0.19960\n"); fprintf(fout,"HB1 H1 0.14370\n"); fprintf(fout,"HB2 H1 0.14370\n"); fprintf(fout,"SG SH -0.31020\n"); fprintf(fout,"HG HS 0.20680\n"); fprintf(fout,"C C 0.74970\n"); fprintf(fout,"OC1 O2 -0.79810\n"); fprintf(fout,"OC2 O2 -0.79810\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CCYX Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.13180\n"); fprintf(fout,"HA H1 0.09380\n"); fprintf(fout,"CB CT -0.19430\n"); fprintf(fout,"HB1 H1 0.12280\n"); fprintf(fout,"HB2 H1 0.12280\n"); fprintf(fout,"SG S -0.05290\n"); fprintf(fout,"C C 0.76180\n"); fprintf(fout,"OC1 O2 -0.80410\n"); fprintf(fout,"OC2 O2 -0.80410\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CCYM Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.28470\n"); fprintf(fout,"HA H1 0.13460\n"); fprintf(fout,"CB CT -0.24130\n"); fprintf(fout,"HB1 H1 0.11220\n"); fprintf(fout,"HB2 H1 0.11220\n"); fprintf(fout,"SG SH -0.88440\n"); fprintf(fout,"C C 0.83260\n"); fprintf(fout,"OC1 O2 -0.83360\n"); fprintf(fout,"OC2 O2 -0.83360\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CMET Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.25970\n"); fprintf(fout,"HA H1 0.12770\n"); fprintf(fout,"CB CT -0.02360\n"); fprintf(fout,"HB1 HC 0.04800\n"); fprintf(fout,"HB2 HC 0.04800\n"); fprintf(fout,"CG CT 0.04920\n"); fprintf(fout,"HG1 H1 0.03170\n"); fprintf(fout,"HG2 H1 0.03170\n"); fprintf(fout,"SD S -0.26920\n"); fprintf(fout,"CE CT -0.03760\n"); fprintf(fout,"HE1 H1 0.06250\n"); fprintf(fout,"HE2 H1 0.06250\n"); fprintf(fout,"HE3 H1 0.06250\n"); fprintf(fout,"C C 0.80130\n"); fprintf(fout,"OC1 O2 -0.81050\n"); fprintf(fout,"OC2 O2 -0.81050\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CASH Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.163500\n"); fprintf(fout,"HA H1 0.13310\n"); fprintf(fout,"CA CT -0.16350\n"); fprintf(fout,"HA H1 0.13960\n"); fprintf(fout,"CB CT -0.03160\n"); fprintf(fout,"HB1 HC 0.04880\n"); fprintf(fout,"HB2 HC 0.04880\n"); fprintf(fout,"CG C 0.64620\n"); fprintf(fout,"OD1 O -0.55540\n"); fprintf(fout,"OD2 OH -0.63760\n"); fprintf(fout,"HD2 HO 0.47470\n"); fprintf(fout,"C C 0.80130\n"); fprintf(fout,"OC1 O2 -0.81050\n"); fprintf(fout,"OC2 O2 -0.81050\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CGLH Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.163500\n"); fprintf(fout,"HA H1 0.105000\n"); fprintf(fout,"CB CT -0.00710\n"); fprintf(fout,"HB1 HC 0.02560\n"); fprintf(fout,"HB2 HC 0.02560\n"); fprintf(fout,"CG CT -0.01740\n"); fprintf(fout,"HG1 HC 0.04300\n"); fprintf(fout,"HG2 HC 0.04300\n"); fprintf(fout,"CD C 0.68010\n"); fprintf(fout,"OE1 O -0.58380\n"); fprintf(fout,"OE2 OH -0.65110\n"); fprintf(fout,"HE2 HO 0.46410\n"); fprintf(fout,"C C 0.80130\n"); fprintf(fout,"OC1 O2 -0.81050\n"); fprintf(fout,"OC2 O2 -0.81050\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CLYN Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.163500\n"); fprintf(fout,"HA H1 0.03994\n"); fprintf(fout,"CB CT -0.04845\n"); fprintf(fout,"HB1 HC 0.03400\n"); fprintf(fout,"HB2 HC 0.03400\n"); fprintf(fout,"CG CT 0.06612\n"); fprintf(fout,"HG1 HC 0.01041\n"); fprintf(fout,"HG2 HC 0.01041\n"); fprintf(fout,"CD CT -0.03768\n"); fprintf(fout,"HD1 HC 0.01155\n"); fprintf(fout,"HD2 HC 0.01155\n"); fprintf(fout,"CE CT 0.32604\n"); fprintf(fout,"HE1 HP -0.03358\n"); fprintf(fout,"HE2 HP -0.03358\n"); fprintf(fout,"NZ N3 -1.03581\n"); fprintf(fout,"HZ1 H 0.38604\n"); fprintf(fout,"HZ2 H 0.38604\n"); fprintf(fout,"C C 0.80130\n"); fprintf(fout,"OC1 O2 -0.81050\n"); fprintf(fout,"OC2 O2 -0.81050\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OALA Residue\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"CA CT 0.033700\n"); fprintf(fout,"HA H1 0.082300\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"CB CT -0.182500\n"); fprintf(fout,"HB1 HC 0.060300\n"); fprintf(fout,"HB2 HC 0.060300\n"); fprintf(fout,"HB3 HC 0.060300\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OARG Residue\n"); fprintf(fout,"N N -0.347900\n"); fprintf(fout,"H H 0.274700\n"); fprintf(fout,"CA CT -0.263700\n"); fprintf(fout,"HA H1 0.156000\n"); fprintf(fout,"C C 0.704557\n"); fprintf(fout,"O O -0.501460\n"); fprintf(fout,"CB CT -0.000700\n"); fprintf(fout,"HB1 HC 0.032700\n"); fprintf(fout,"HB2 HC 0.032700\n"); fprintf(fout,"CG CT 0.039000\n"); fprintf(fout,"HG1 HC 0.028500\n"); fprintf(fout,"HG2 HC 0.028500\n"); fprintf(fout,"CD CT 0.048600\n"); fprintf(fout,"HD1 H1 0.068700\n"); fprintf(fout,"HD2 H1 0.068700\n"); fprintf(fout,"NE N2 -0.529500\n"); fprintf(fout,"HE H 0.345600\n"); fprintf(fout,"CZ CA 0.807600\n"); fprintf(fout,"NH1 N2 -0.862700\n"); fprintf(fout,"HH11 H 0.447800\n"); fprintf(fout,"HH12 H 0.447800\n"); fprintf(fout,"NH2 N2 -0.862700\n"); fprintf(fout,"HH21 H 0.447800\n"); fprintf(fout,"HH22 H 0.447800\n"); fprintf(fout,"OH OH -0.576454\n"); fprintf(fout,"HO HO 0.518057\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OASN Residue\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"CA CT 0.014300\n"); fprintf(fout,"HA H1 0.104800\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"CB CT -0.204100\n"); fprintf(fout,"HB1 HC 0.079700\n"); fprintf(fout,"HB2 HC 0.079700\n"); fprintf(fout,"CG C 0.713000\n"); fprintf(fout,"OD1 O -0.593100\n"); fprintf(fout,"ND2 N -0.919100\n"); fprintf(fout,"HD21 H 0.419600\n"); fprintf(fout,"HD22 H 0.419600\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OASP Residue\n"); fprintf(fout,"N N -0.516300\n"); fprintf(fout,"H H 0.293600\n"); fprintf(fout,"CA CT 0.038100\n"); fprintf(fout,"HA H1 0.088000\n"); fprintf(fout,"C C 0.653215\n"); fprintf(fout,"O O -0.548403\n"); fprintf(fout,"CB CT -0.030300\n"); fprintf(fout,"HB1 HC -0.012200\n"); fprintf(fout,"HB2 HC -0.012200\n"); fprintf(fout,"CG C 0.799400\n"); fprintf(fout,"OD1 O2 -0.801400\n"); fprintf(fout,"OD2 O2 -0.801400\n"); fprintf(fout,"OH OH -0.630417\n"); fprintf(fout,"HO HO 0.480305\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OCYS Residue\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"CA CT 0.021300\n"); fprintf(fout,"HA H1 0.112400\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"CB CT -0.123100\n"); fprintf(fout,"HB1 H1 0.111200\n"); fprintf(fout,"HB2 H1 0.111200\n"); fprintf(fout,"SG SH -0.311900\n"); fprintf(fout,"HG HS 0.193300\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OCYX Residue\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"CA CT 0.042900\n"); fprintf(fout,"HA H1 0.076600\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"CB CT -0.079000\n"); fprintf(fout,"HB1 H1 0.091000\n"); fprintf(fout,"HB2 H1 0.091000\n"); fprintf(fout,"SG S -0.108100\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OGLN Residue\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"CA CT -0.003100\n"); fprintf(fout,"HA H1 0.085000\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"CB CT -0.003600\n"); fprintf(fout,"HB1 HC 0.017100\n"); fprintf(fout,"HB2 HC 0.017100\n"); fprintf(fout,"CG CT -0.064500\n"); fprintf(fout,"HG1 HC 0.035200\n"); fprintf(fout,"HG2 HC 0.035200\n"); fprintf(fout,"CD C 0.695100\n"); fprintf(fout,"OE1 O -0.608600\n"); fprintf(fout,"NE2 N -0.940700\n"); fprintf(fout,"HE21 H 0.425100\n"); fprintf(fout,"HE22 H 0.425100\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OGLU Residue\n"); fprintf(fout,"N N -0.516300\n"); fprintf(fout,"H H 0.293600\n"); fprintf(fout,"CA CT 0.039700\n"); fprintf(fout,"HA H1 0.110500\n"); fprintf(fout,"C C 0.653215\n"); fprintf(fout,"O O -0.548403\n"); fprintf(fout,"CB CT 0.056000\n"); fprintf(fout,"HB1 HC -0.017300\n"); fprintf(fout,"HB2 HC -0.017300\n"); fprintf(fout,"CG CT 0.013600\n"); fprintf(fout,"HG1 HC -0.042500\n"); fprintf(fout,"HG2 HC -0.042500\n"); fprintf(fout,"CD C 0.805400\n"); fprintf(fout,"OE1 O2 -0.818800\n"); fprintf(fout,"OE2 O2 -0.818800\n"); fprintf(fout,"OH OH -0.630417\n"); fprintf(fout,"HO HO 0.480305\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OGLY Residue\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"CA CT -0.025200\n"); fprintf(fout,"HA1 H1 0.069800\n"); fprintf(fout,"HA2 H1 0.069800\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OHID Residue\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"CA CT 0.018800\n"); fprintf(fout,"HA H1 0.088100\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"CB CT -0.046200\n"); fprintf(fout,"HB1 HC 0.040200\n"); fprintf(fout,"HB2 HC 0.040200\n"); fprintf(fout,"CG CC -0.026600\n"); fprintf(fout,"ND1 NA -0.381100\n"); fprintf(fout,"HD1 H 0.364900\n"); fprintf(fout,"CD2 CV 0.129200\n"); fprintf(fout,"HD2 H4 0.114700\n"); fprintf(fout,"CE1 CR 0.205700\n"); fprintf(fout,"HE1 H5 0.139200\n"); fprintf(fout,"NE2 NB -0.572700\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OHIE Residue\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"CA CT -0.058100\n"); fprintf(fout,"HA H1 0.136000\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"CB CT -0.007400\n"); fprintf(fout,"HB1 HC 0.036700\n"); fprintf(fout,"HB2 HC 0.036700\n"); fprintf(fout,"CG CC 0.186800\n"); fprintf(fout,"ND1 NB -0.543200\n"); fprintf(fout,"CD2 CW -0.220700\n"); fprintf(fout,"HD2 H4 0.186200\n"); fprintf(fout,"CE1 CR 0.163500\n"); fprintf(fout,"HE1 H5 0.143500\n"); fprintf(fout,"NE2 NA -0.279500\n"); fprintf(fout,"HE2 H 0.333900\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OHIP Residue\n"); fprintf(fout,"N N -0.347900\n"); fprintf(fout,"H H 0.274700\n"); fprintf(fout,"CA CT -0.135400\n"); fprintf(fout,"HA H1 0.121200\n"); fprintf(fout,"C C 0.704557\n"); fprintf(fout,"O O -0.501460\n"); fprintf(fout,"CB CT -0.041400\n"); fprintf(fout,"HB1 HC 0.081000\n"); fprintf(fout,"HB2 HC 0.081000\n"); fprintf(fout,"CG CC -0.001200\n"); fprintf(fout,"ND1 NA -0.151300\n"); fprintf(fout,"HD1 H 0.386600\n"); fprintf(fout,"CD2 CW -0.114100\n"); fprintf(fout,"HD2 H4 0.231700\n"); fprintf(fout,"CE1 CR -0.017000\n"); fprintf(fout,"HE1 H5 0.268100\n"); fprintf(fout,"NE2 NA -0.171800\n"); fprintf(fout,"HE2 H 0.391100\n"); fprintf(fout,"OH OH -0.576454\n"); fprintf(fout,"HO HO 0.518057\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OHIS Residue\n"); fprintf(fout,"N N -0.347900\n"); fprintf(fout,"H H 0.274700\n"); fprintf(fout,"CA CT -0.135400\n"); fprintf(fout,"HA H1 0.121200\n"); fprintf(fout,"C C 0.704557\n"); fprintf(fout,"O O -0.501460\n"); fprintf(fout,"CB CT -0.041400\n"); fprintf(fout,"HB1 HC 0.081000\n"); fprintf(fout,"HB2 HC 0.081000\n"); fprintf(fout,"CG CC -0.001200\n"); fprintf(fout,"ND1 NA -0.151300\n"); fprintf(fout,"HD1 H 0.386600\n"); fprintf(fout,"CD2 CW -0.114100\n"); fprintf(fout,"HD2 H4 0.231700\n"); fprintf(fout,"CE1 CR -0.017000\n"); fprintf(fout,"HE1 H5 0.268100\n"); fprintf(fout,"NE2 NA -0.171800\n"); fprintf(fout,"HE2 H 0.391100\n"); fprintf(fout,"OH OH -0.576454\n"); fprintf(fout,"HO HO 0.518057\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OILE Residue\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"CA CT -0.059700\n"); fprintf(fout,"HA H1 0.086900\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"CB CT 0.130300\n"); fprintf(fout,"HB HC 0.018700\n"); fprintf(fout,"CG1 CT -0.043000\n"); fprintf(fout,"HG11 HC 0.023600\n"); fprintf(fout,"HG12 HC 0.023600\n"); fprintf(fout,"CG2 CT -0.320400\n"); fprintf(fout,"HG21 HC 0.088200\n"); fprintf(fout,"HG22 HC 0.088200\n"); fprintf(fout,"HG23 HC 0.088200\n"); fprintf(fout,"CD CT -0.066000\n"); fprintf(fout,"HD1 HC 0.018600\n"); fprintf(fout,"HD2 HC 0.018600\n"); fprintf(fout,"HD3 HC 0.018600\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OLEU Residue\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"CA CT -0.051800\n"); fprintf(fout,"HA H1 0.092200\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"CB CT -0.110200\n"); fprintf(fout,"HB1 HC 0.045700\n"); fprintf(fout,"HB2 HC 0.045700\n"); fprintf(fout,"CG CT 0.353100\n"); fprintf(fout,"HG HC -0.036100\n"); fprintf(fout,"CD1 CT -0.412100\n"); fprintf(fout,"HD11 HC 0.100000\n"); fprintf(fout,"HD12 HC 0.100000\n"); fprintf(fout,"HD13 HC 0.100000\n"); fprintf(fout,"CD2 CT -0.412100\n"); fprintf(fout,"HD21 HC 0.100000\n"); fprintf(fout,"HD22 HC 0.100000\n"); fprintf(fout,"HD23 HC 0.100000\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OLYS Residue\n"); fprintf(fout,"N N -0.347900\n"); fprintf(fout,"H H 0.274700\n"); fprintf(fout,"CA CT -0.240000\n"); fprintf(fout,"HA H1 0.142600\n"); fprintf(fout,"C C 0.704557\n"); fprintf(fout,"O O -0.501460\n"); fprintf(fout,"CB CT -0.009400\n"); fprintf(fout,"HB1 HC 0.036200\n"); fprintf(fout,"HB2 HC 0.036200\n"); fprintf(fout,"CG CT 0.018700\n"); fprintf(fout,"HG1 HC 0.010300\n"); fprintf(fout,"HG2 HC 0.010300\n"); fprintf(fout,"CD CT -0.047900\n"); fprintf(fout,"HD1 HC 0.062100\n"); fprintf(fout,"HD2 HC 0.062100\n"); fprintf(fout,"CE CT -0.014300\n"); fprintf(fout,"HE1 HP 0.113500\n"); fprintf(fout,"HE2 HP 0.113500\n"); fprintf(fout,"NZ N3 -0.385400\n"); fprintf(fout,"HZ1 H 0.340000\n"); fprintf(fout,"HZ2 H 0.340000\n"); fprintf(fout,"HZ3 H 0.340000\n"); fprintf(fout,"OH OH -0.576454\n"); fprintf(fout,"HO HO 0.518057\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OMET Residue\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"CA CT -0.023700\n"); fprintf(fout,"HA H1 0.088000\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"CB CT 0.034200\n"); fprintf(fout,"HB1 HC 0.024100\n"); fprintf(fout,"HB2 HC 0.024100\n"); fprintf(fout,"CG CT 0.001800\n"); fprintf(fout,"HG1 H1 0.044000\n"); fprintf(fout,"HG2 H1 0.044000\n"); fprintf(fout,"SD S -0.273700\n"); fprintf(fout,"CE CT -0.053600\n"); fprintf(fout,"HE1 H1 0.068400\n"); fprintf(fout,"HE2 H1 0.068400\n"); fprintf(fout,"HE3 H1 0.068400\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OPHE Residue\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"CA CT -0.002400\n"); fprintf(fout,"HA H1 0.097800\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"CB CT -0.034300\n"); fprintf(fout,"HB1 HC 0.029500\n"); fprintf(fout,"HB2 HC 0.029500\n"); fprintf(fout,"CG CA 0.011800\n"); fprintf(fout,"CD1 CA -0.125600\n"); fprintf(fout,"HD1 HA 0.133000\n"); fprintf(fout,"CD2 CA -0.125600\n"); fprintf(fout,"HD2 HA 0.133000\n"); fprintf(fout,"CE1 CA -0.170400\n"); fprintf(fout,"HE1 HA 0.143000\n"); fprintf(fout,"CE2 CA -0.170400\n"); fprintf(fout,"HE2 HA 0.143000\n"); fprintf(fout,"CZ CA -0.107200\n"); fprintf(fout,"HZ HA 0.129700\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OPRO Residue\n"); fprintf(fout,"N N -0.254800\n"); fprintf(fout,"CA CT -0.026600\n"); fprintf(fout,"HA H1 0.064100\n"); fprintf(fout,"C C 0.669455\n"); fprintf(fout,"O O -0.533554\n"); fprintf(fout,"CB CT -0.007000\n"); fprintf(fout,"HB1 HC 0.025300\n"); fprintf(fout,"HB2 HC 0.025300\n"); fprintf(fout,"CG CT 0.018900\n"); fprintf(fout,"HG1 HC 0.021300\n"); fprintf(fout,"HG2 HC 0.021300\n"); fprintf(fout,"CD CT 0.019200\n"); fprintf(fout,"HD1 H1 0.039100\n"); fprintf(fout,"HD2 H1 0.039100\n"); fprintf(fout,"OH OH -0.613347\n"); fprintf(fout,"HO HO 0.492247\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OSER Residue\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"CA CT -0.024900\n"); fprintf(fout,"HA H1 0.084300\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"CB CT 0.211700\n"); fprintf(fout,"HB1 H1 0.035200\n"); fprintf(fout,"HB2 H1 0.035200\n"); fprintf(fout,"OG OH -0.654600\n"); fprintf(fout,"HG HO 0.427500\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OTHR Residue\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"CA CT -0.038900\n"); fprintf(fout,"HA H1 0.100700\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"CB CT 0.365400\n"); fprintf(fout,"HB H1 0.004300\n"); fprintf(fout,"OG1 OH -0.676100\n"); fprintf(fout,"HG1 HO 0.410200\n"); fprintf(fout,"CG2 CT -0.243800\n"); fprintf(fout,"HG21 HC 0.064200\n"); fprintf(fout,"HG22 HC 0.064200\n"); fprintf(fout,"HG23 HC 0.064200\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OTYR Residue\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"CA CT -0.001400\n"); fprintf(fout,"HA H1 0.087600\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"CB CT -0.015200\n"); fprintf(fout,"HB1 HC 0.029500\n"); fprintf(fout,"HB2 HC 0.029500\n"); fprintf(fout,"CG CA -0.001100\n"); fprintf(fout,"CD1 CA -0.190600\n"); fprintf(fout,"HD1 HA 0.169900\n"); fprintf(fout,"CD2 CA -0.190600\n"); fprintf(fout,"HD2 HA 0.169900\n"); fprintf(fout,"CE1 CA -0.234100\n"); fprintf(fout,"HE1 HA 0.165600\n"); fprintf(fout,"CE2 CA -0.234100\n"); fprintf(fout,"HE2 HA 0.165600\n"); fprintf(fout,"CZ C 0.322600\n"); fprintf(fout,"OH OH -0.557900\n"); fprintf(fout,"HH HO 0.399200\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OTRP Residue\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"CA CT -0.027500\n"); fprintf(fout,"HA H1 0.112300\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"CB CT -0.005000\n"); fprintf(fout,"HB1 HC 0.033900\n"); fprintf(fout,"HB2 HC 0.033900\n"); fprintf(fout,"CG C* -0.141500\n"); fprintf(fout,"CD1 CW -0.163800\n"); fprintf(fout,"HD1 H4 0.206200\n"); fprintf(fout,"CD2 CB 0.124300\n"); fprintf(fout,"NE1 NA -0.341800\n"); fprintf(fout,"HE1 H 0.341200\n"); fprintf(fout,"CE2 CN 0.138000\n"); fprintf(fout,"CE3 CA -0.238700\n"); fprintf(fout,"HE3 HA 0.170000\n"); fprintf(fout,"CZ2 CA -0.260100\n"); fprintf(fout,"HZ2 HA 0.157200\n"); fprintf(fout,"CZ3 CA -0.197200\n"); fprintf(fout,"HZ3 HA 0.144700\n"); fprintf(fout,"CH2 CA -0.113400\n"); fprintf(fout,"HH2 HA 0.141700\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OVAL Residue\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"CA CT -0.087500\n"); fprintf(fout,"HA H1 0.096900\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"CB CT 0.298500\n"); fprintf(fout,"HB HC -0.029700\n"); fprintf(fout,"CG1 CT -0.319200\n"); fprintf(fout,"HG11 HC 0.079100\n"); fprintf(fout,"HG12 HC 0.079100\n"); fprintf(fout,"HG13 HC 0.079100\n"); fprintf(fout,"CG2 CT -0.319200\n"); fprintf(fout,"HG21 HC 0.079100\n"); fprintf(fout,"HG22 HC 0.079100\n"); fprintf(fout,"HG23 HC 0.079100\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OASH Residue\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"HB2 HC 0.048800\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"CA CT 0.034100\n"); fprintf(fout,"CB CT -0.031600\n"); fprintf(fout,"OD1 O -0.555400\n"); fprintf(fout,"HB1 HC 0.048800\n"); fprintf(fout,"CG C 0.646200\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"HA H1 0.086400\n"); fprintf(fout,"OD2 OH -0.637600\n"); fprintf(fout,"HD2 HO 0.474700\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OGLH Residue\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"HB2 HC 0.025600\n"); fprintf(fout,"HB1 HC 0.025600\n"); fprintf(fout,"CB CT -0.007100\n"); fprintf(fout,"CA CT 0.014500\n"); fprintf(fout,"HE2 HO 0.464100\n"); fprintf(fout,"OE2 OH -0.651100\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"HA H1 0.077900\n"); fprintf(fout,"CD C 0.680100\n"); fprintf(fout,"OE1 O -0.583800\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"CG CT -0.017400\n"); fprintf(fout,"HG1 HC 0.043000\n"); fprintf(fout,"HG2 HC 0.043000\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OLYN Residue\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"HB2 HC 0.034000\n"); fprintf(fout,"HD2 HC 0.011550\n"); fprintf(fout,"HB1 HC 0.034000\n"); fprintf(fout,"HD1 HC 0.011550\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"CB CT -0.048450\n"); fprintf(fout,"CD CT -0.037680\n"); fprintf(fout,"CA CT -0.072060\n"); fprintf(fout,"CG CT 0.066120\n"); fprintf(fout,"HE2 HP -0.033580\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"HZ1 H 0.386040\n"); fprintf(fout,"CE CT 0.326040\n"); fprintf(fout,"NZ N3 -1.035810\n"); fprintf(fout,"HG1 HC 0.010410\n"); fprintf(fout,"HG2 HC 0.010410\n"); fprintf(fout,"HA H1 0.099400\n"); fprintf(fout,"HZ2 H 0.386040\n"); fprintf(fout,"HE1 HP -0.033580\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OCYM Residue\n"); fprintf(fout,"N N -0.415700\n"); fprintf(fout,"H H 0.271900\n"); fprintf(fout,"CA CT -0.035100\n"); fprintf(fout,"HA H1 0.050800\n"); fprintf(fout,"C C 0.673401\n"); fprintf(fout,"O O -0.529947\n"); fprintf(fout,"CB CT -0.241300\n"); fprintf(fout,"HB1 H1 0.112200\n"); fprintf(fout,"HB2 H1 0.112200\n"); fprintf(fout,"SG SH -0.884400\n"); fprintf(fout,"OH OH -0.609201\n"); fprintf(fout,"HO HO 0.495147\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NALA Residue\n"); fprintf(fout,"N N3 0.14140\n"); fprintf(fout,"H1 H 0.19970\n"); fprintf(fout,"H2 H 0.19970\n"); fprintf(fout,"H3 H 0.19970\n"); fprintf(fout,"CA CT 0.09620\n"); fprintf(fout,"HA HP 0.08890\n"); fprintf(fout,"CB CT -0.05970\n"); fprintf(fout,"HB1 HC 0.03000\n"); fprintf(fout,"HB2 HC 0.03000\n"); fprintf(fout,"HB3 HC 0.03000\n"); fprintf(fout,"C C 0.61630\n"); fprintf(fout,"O O -0.57220\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NGLY Residue\n"); fprintf(fout,"N N3 0.29430\n"); fprintf(fout,"H1 H 0.16420\n"); fprintf(fout,"H2 H 0.16420\n"); fprintf(fout,"H3 H 0.16420\n"); fprintf(fout,"CA CT -0.01000\n"); fprintf(fout,"HA1 HP 0.08950\n"); fprintf(fout,"HA2 HP 0.08950\n"); fprintf(fout,"C C 0.61630\n"); fprintf(fout,"O O -0.57220\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NSER Residue\n"); fprintf(fout,"N N3 0.18490\n"); fprintf(fout,"H1 H 0.18980\n"); fprintf(fout,"H2 H 0.18980\n"); fprintf(fout,"H3 H 0.18980\n"); fprintf(fout,"CA CT 0.05670\n"); fprintf(fout,"HA HP 0.07820\n"); fprintf(fout,"CB CT 0.25960\n"); fprintf(fout,"HB1 H1 0.02730\n"); fprintf(fout,"HB2 H1 0.02730\n"); fprintf(fout,"OG OH -0.67140\n"); fprintf(fout,"HG HO 0.42390\n"); fprintf(fout,"C C 0.61630\n"); fprintf(fout,"O O -0.57220\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NTHR Residue\n"); fprintf(fout,"N N3 0.18120\n"); fprintf(fout,"H1 H 0.19340\n"); fprintf(fout,"H2 H 0.19340\n"); fprintf(fout,"H3 H 0.19340\n"); fprintf(fout,"CA CT 0.00340\n"); fprintf(fout,"HA HP 0.10870\n"); fprintf(fout,"CB CT 0.45140\n"); fprintf(fout,"HB H1 -0.03230\n"); fprintf(fout,"CG2 CT -0.25540\n"); fprintf(fout,"HG21 HC 0.06270\n"); fprintf(fout,"HG22 HC 0.06270\n"); fprintf(fout,"HG23 HC 0.06270\n"); fprintf(fout,"OG1 OH -0.67640\n"); fprintf(fout,"HG1 HO 0.40700\n"); fprintf(fout,"C C 0.61630\n"); fprintf(fout,"O O -0.57220\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NLEU Residue\n"); fprintf(fout,"N N3 0.10100\n"); fprintf(fout,"H1 H 0.21480\n"); fprintf(fout,"H2 H 0.21480\n"); fprintf(fout,"H3 H 0.21480\n"); fprintf(fout,"CA CT 0.01040\n"); fprintf(fout,"HA HP 0.10530\n"); fprintf(fout,"CB CT -0.02440\n"); fprintf(fout,"HB1 HC 0.02560\n"); fprintf(fout,"HB2 HC 0.02560\n"); fprintf(fout,"CG CT 0.34210\n"); fprintf(fout,"HG HC -0.03800\n"); fprintf(fout,"CD1 CT -0.41060\n"); fprintf(fout,"HD11 HC 0.09800\n"); fprintf(fout,"HD12 HC 0.09800\n"); fprintf(fout,"HD13 HC 0.09800\n"); fprintf(fout,"CD2 CT -0.41040\n"); fprintf(fout,"HD21 HC 0.09800\n"); fprintf(fout,"HD22 HC 0.09800\n"); fprintf(fout,"HD23 HC 0.09800\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NILE Residue\n"); fprintf(fout,"N N3 0.03110\n"); fprintf(fout,"H1 H 0.23290\n"); fprintf(fout,"H2 H 0.23290\n"); fprintf(fout,"H3 H 0.23290\n"); fprintf(fout,"CA CT 0.02570\n"); fprintf(fout,"HA HP 0.10310\n"); fprintf(fout,"CB CT 0.18850\n"); fprintf(fout,"HB HC 0.02130\n"); fprintf(fout,"CG2 CT -0.37200\n"); fprintf(fout,"HG21 HC 0.09470\n"); fprintf(fout,"HG22 HC 0.09470\n"); fprintf(fout,"HG23 HC 0.09470\n"); fprintf(fout,"CG1 CT -0.03870\n"); fprintf(fout,"HG11 HC 0.02010\n"); fprintf(fout,"HG12 HC 0.02010\n"); fprintf(fout,"CD CT -0.09080\n"); fprintf(fout,"HD1 HC 0.02260\n"); fprintf(fout,"HD2 HC 0.02260\n"); fprintf(fout,"HD3 HC 0.02260\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NVAL Residue\n"); fprintf(fout,"N N3 0.05770\n"); fprintf(fout,"H1 H 0.22720\n"); fprintf(fout,"H2 H 0.22720\n"); fprintf(fout,"H3 H 0.22720\n"); fprintf(fout,"CA CT -0.00540\n"); fprintf(fout,"HA HP 0.10930\n"); fprintf(fout,"CB CT 0.31960\n"); fprintf(fout,"HB HC -0.02210\n"); fprintf(fout,"CG1 CT -0.31290\n"); fprintf(fout,"HG11 HC 0.07350\n"); fprintf(fout,"HG12 HC 0.07350\n"); fprintf(fout,"HG13 HC 0.07350\n"); fprintf(fout,"CG2 CT -0.31290\n"); fprintf(fout,"HG21 HC 0.07350\n"); fprintf(fout,"HG22 HC 0.07350\n"); fprintf(fout,"HG23 HC 0.07350\n"); fprintf(fout,"C C 0.61630\n"); fprintf(fout,"O O -0.57220\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NASN Residue\n"); fprintf(fout,"N N3 0.18010\n"); fprintf(fout,"H1 H 0.19210\n"); fprintf(fout,"H2 H 0.19210\n"); fprintf(fout,"H3 H 0.19210\n"); fprintf(fout,"CA CT 0.03680\n"); fprintf(fout,"HA HP 0.12310\n"); fprintf(fout,"CB CT -0.02830\n"); fprintf(fout,"HB1 HC 0.05150\n"); fprintf(fout,"HB2 HC 0.05150\n"); fprintf(fout,"CG C 0.58330\n"); fprintf(fout,"OD1 O -0.57440\n"); fprintf(fout,"ND2 N -0.86340\n"); fprintf(fout,"HD21 H 0.40970\n"); fprintf(fout,"HD22 H 0.40970\n"); fprintf(fout,"C C 0.61630\n"); fprintf(fout,"O O -0.57220\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NGLN Residue\n"); fprintf(fout,"N N3 0.14930\n"); fprintf(fout,"H1 H 0.19960\n"); fprintf(fout,"H2 H 0.19960\n"); fprintf(fout,"H3 H 0.19960\n"); fprintf(fout,"CA CT 0.05360\n"); fprintf(fout,"HA HP 0.10150\n"); fprintf(fout,"CB CT 0.06510\n"); fprintf(fout,"HB1 HC 0.00500\n"); fprintf(fout,"HB2 HC 0.00500\n"); fprintf(fout,"CG CT -0.09030\n"); fprintf(fout,"HG1 HC 0.03310\n"); fprintf(fout,"HG2 HC 0.03310\n"); fprintf(fout,"CD C 0.73540\n"); fprintf(fout,"OE1 O -0.61330\n"); fprintf(fout,"NE2 N -1.00310\n"); fprintf(fout,"HE21 H 0.44290\n"); fprintf(fout,"HE22 H 0.44290\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NARG Residue\n"); fprintf(fout,"N N3 0.13050\n"); fprintf(fout,"H1 H 0.20830\n"); fprintf(fout,"H2 H 0.20830\n"); fprintf(fout,"H3 H 0.20830\n"); fprintf(fout,"CA CT -0.02230\n"); fprintf(fout,"HA HP 0.12420\n"); fprintf(fout,"CB CT 0.01180\n"); fprintf(fout,"HB1 HC 0.02260\n"); fprintf(fout,"HB2 HC 0.02260\n"); fprintf(fout,"CG CT 0.02360\n"); fprintf(fout,"HG1 HC 0.03090\n"); fprintf(fout,"HG2 HC 0.03090\n"); fprintf(fout,"CD CT 0.09350\n"); fprintf(fout,"HD1 H1 0.05270\n"); fprintf(fout,"HD2 H1 0.05270\n"); fprintf(fout,"NE N2 -0.56500\n"); fprintf(fout,"HE H 0.35920\n"); fprintf(fout,"CZ CA 0.82810\n"); fprintf(fout,"NH1 N2 -0.86930\n"); fprintf(fout,"HH11 H 0.44940\n"); fprintf(fout,"HH12 H 0.44940\n"); fprintf(fout,"NH2 N2 -0.86930\n"); fprintf(fout,"HH21 H 0.44940\n"); fprintf(fout,"HH22 H 0.44940\n"); fprintf(fout,"C C 0.72140\n"); fprintf(fout,"O O -0.60130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NHID Residue\n"); fprintf(fout,"N N3 0.15420\n"); fprintf(fout,"H1 H 0.19630\n"); fprintf(fout,"H2 H 0.19630\n"); fprintf(fout,"H3 H 0.19630\n"); fprintf(fout,"CA CT 0.09640\n"); fprintf(fout,"HA HP 0.09580\n"); fprintf(fout,"CB CT 0.02590\n"); fprintf(fout,"HB1 HC 0.02090\n"); fprintf(fout,"HB2 HC 0.02090\n"); fprintf(fout,"CG CC -0.03990\n"); fprintf(fout,"ND1 NA -0.38190\n"); fprintf(fout,"HD1 H 0.36320\n"); fprintf(fout,"CE1 CR 0.21270\n"); fprintf(fout,"HE1 H5 0.13850\n"); fprintf(fout,"NE2 NB -0.57110\n"); fprintf(fout,"CD2 CV 0.10460\n"); fprintf(fout,"HD2 H4 0.12990\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NHIE Residue\n"); fprintf(fout,"N N3 0.14720\n"); fprintf(fout,"H1 H 0.20160\n"); fprintf(fout,"H2 H 0.20160\n"); fprintf(fout,"H3 H 0.20160\n"); fprintf(fout,"CA CT 0.02360\n"); fprintf(fout,"HA HP 0.13800\n"); fprintf(fout,"CB CT 0.04890\n"); fprintf(fout,"HB1 HC 0.02230\n"); fprintf(fout,"HB2 HC 0.02230\n"); fprintf(fout,"CG CC 0.17400\n"); fprintf(fout,"ND1 NB -0.55790\n"); fprintf(fout,"CE1 CR 0.18040\n"); fprintf(fout,"HE1 H5 0.13970\n"); fprintf(fout,"NE2 NA -0.27810\n"); fprintf(fout,"HE2 H 0.33240\n"); fprintf(fout,"CD2 CW -0.23490\n"); fprintf(fout,"HD2 H4 0.19630\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NHIP Residue\n"); fprintf(fout,"N N3 0.25600\n"); fprintf(fout,"H1 H 0.17040\n"); fprintf(fout,"H2 H 0.17040\n"); fprintf(fout,"H3 H 0.17040\n"); fprintf(fout,"CA CT 0.05810\n"); fprintf(fout,"HA HP 0.10470\n"); fprintf(fout,"CB CT 0.04840\n"); fprintf(fout,"HB1 HC 0.05310\n"); fprintf(fout,"HB2 HC 0.05310\n"); fprintf(fout,"CG CC -0.02360\n"); fprintf(fout,"ND1 NA -0.15100\n"); fprintf(fout,"HD1 H 0.38210\n"); fprintf(fout,"CE1 CR -0.00110\n"); fprintf(fout,"HE1 H5 0.26450\n"); fprintf(fout,"NE2 NA -0.17390\n"); fprintf(fout,"HE2 H 0.39210\n"); fprintf(fout,"CD2 CW -0.14330\n"); fprintf(fout,"HD2 H4 0.24950\n"); fprintf(fout,"C C 0.72140\n"); fprintf(fout,"O O -0.60130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NHIS Residue\n"); fprintf(fout,"N N3 0.25600\n"); fprintf(fout,"H1 H 0.17040\n"); fprintf(fout,"H2 H 0.17040\n"); fprintf(fout,"H3 H 0.17040\n"); fprintf(fout,"CA CT 0.05810\n"); fprintf(fout,"HA HP 0.10470\n"); fprintf(fout,"CB CT 0.04840\n"); fprintf(fout,"HB1 HC 0.05310\n"); fprintf(fout,"HB2 HC 0.05310\n"); fprintf(fout,"CG CC -0.02360\n"); fprintf(fout,"ND1 NA -0.15100\n"); fprintf(fout,"HD1 H 0.38210\n"); fprintf(fout,"CE1 CR -0.00110\n"); fprintf(fout,"HE1 H5 0.26450\n"); fprintf(fout,"NE2 NA -0.17390\n"); fprintf(fout,"HE2 H 0.39210\n"); fprintf(fout,"CD2 CW -0.14330\n"); fprintf(fout,"HD2 H4 0.24950\n"); fprintf(fout,"C C 0.72140\n"); fprintf(fout,"O O -0.60130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NTRP Residue\n"); fprintf(fout,"N N3 0.19130\n"); fprintf(fout,"H1 H 0.18880\n"); fprintf(fout,"H2 H 0.18880\n"); fprintf(fout,"H3 H 0.18880\n"); fprintf(fout,"CA CT 0.04210\n"); fprintf(fout,"HA HP 0.11620\n"); fprintf(fout,"CB CT 0.05430\n"); fprintf(fout,"HB1 HC 0.02220\n"); fprintf(fout,"HB2 HC 0.02220\n"); fprintf(fout,"CG C* -0.16540\n"); fprintf(fout,"CD1 CW -0.17880\n"); fprintf(fout,"HD1 H4 0.21950\n"); fprintf(fout,"NE1 NA -0.34440\n"); fprintf(fout,"HE1 H 0.34120\n"); fprintf(fout,"CE2 CN 0.15750\n"); fprintf(fout,"CZ2 CA -0.27100\n"); fprintf(fout,"HZ2 HA 0.15890\n"); fprintf(fout,"CH2 CA -0.10800\n"); fprintf(fout,"HH2 HA 0.14110\n"); fprintf(fout,"CZ3 CA -0.20340\n"); fprintf(fout,"HZ3 HA 0.14580\n"); fprintf(fout,"CE3 CA -0.22650\n"); fprintf(fout,"HE3 HA 0.16460\n"); fprintf(fout,"CD2 CB 0.11320\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NPHE Residue\n"); fprintf(fout,"N N3 0.17370\n"); fprintf(fout,"H1 H 0.19210\n"); fprintf(fout,"H2 H 0.19210\n"); fprintf(fout,"H3 H 0.19210\n"); fprintf(fout,"CA CT 0.07330\n"); fprintf(fout,"HA HP 0.10410\n"); fprintf(fout,"CB CT 0.03300\n"); fprintf(fout,"HB1 HC 0.01040\n"); fprintf(fout,"HB2 HC 0.01040\n"); fprintf(fout,"CG CA 0.00310\n"); fprintf(fout,"CD1 CA -0.13920\n"); fprintf(fout,"HD1 HA 0.13740\n"); fprintf(fout,"CE1 CA -0.16020\n"); fprintf(fout,"HE1 HA 0.14330\n"); fprintf(fout,"CZ CA -0.12080\n"); fprintf(fout,"HZ HA 0.13290\n"); fprintf(fout,"CE2 CA -0.16030\n"); fprintf(fout,"HE2 HA 0.14330\n"); fprintf(fout,"CD2 CA -0.13910\n"); fprintf(fout,"HD2 HA 0.13740\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NTYR Residue\n"); fprintf(fout,"N N3 0.19400\n"); fprintf(fout,"H1 H 0.18730\n"); fprintf(fout,"H2 H 0.18730\n"); fprintf(fout,"H3 H 0.18730\n"); fprintf(fout,"CA CT 0.05700\n"); fprintf(fout,"HA HP 0.09830\n"); fprintf(fout,"CB CT 0.06590\n"); fprintf(fout,"HB1 HC 0.01020\n"); fprintf(fout,"HB2 HC 0.01020\n"); fprintf(fout,"CG CA -0.02050\n"); fprintf(fout,"CD1 CA -0.20020\n"); fprintf(fout,"HD1 HA 0.17200\n"); fprintf(fout,"CE1 CA -0.22390\n"); fprintf(fout,"HE1 HA 0.16500\n"); fprintf(fout,"CZ C 0.31390\n"); fprintf(fout,"OH OH -0.55780\n"); fprintf(fout,"HH HO 0.40010\n"); fprintf(fout,"CE2 CA -0.22390\n"); fprintf(fout,"HE2 HA 0.16500\n"); fprintf(fout,"CD2 CA -0.20020\n"); fprintf(fout,"HD2 HA 0.17200\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NGLU Residue\n"); fprintf(fout,"N N3 0.00170\n"); fprintf(fout,"H1 H 0.23910\n"); fprintf(fout,"H2 H 0.23910\n"); fprintf(fout,"H3 H 0.23910\n"); fprintf(fout,"CA CT 0.05880\n"); fprintf(fout,"HA HP 0.12020\n"); fprintf(fout,"CB CT 0.09090\n"); fprintf(fout,"HB1 HC -0.02320\n"); fprintf(fout,"HB2 HC -0.02320\n"); fprintf(fout,"CG CT -0.02360\n"); fprintf(fout,"HG1 HC -0.03150\n"); fprintf(fout,"HG2 HC -0.03150\n"); fprintf(fout,"CD C 0.80870\n"); fprintf(fout,"OE1 O2 -0.81890\n"); fprintf(fout,"OE2 O2 -0.81890\n"); fprintf(fout,"C C 0.56210\n"); fprintf(fout,"O O -0.58890\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NASP Residue\n"); fprintf(fout,"N N3 0.07820\n"); fprintf(fout,"H1 H 0.22000\n"); fprintf(fout,"H2 H 0.22000\n"); fprintf(fout,"H3 H 0.22000\n"); fprintf(fout,"CA CT 0.02920\n"); fprintf(fout,"HA HP 0.11410\n"); fprintf(fout,"CB CT -0.02350\n"); fprintf(fout,"HB1 HC -0.01690\n"); fprintf(fout,"HB2 HC -0.01690\n"); fprintf(fout,"CG C 0.81940\n"); fprintf(fout,"OD1 O2 -0.80840\n"); fprintf(fout,"OD2 O2 -0.80840\n"); fprintf(fout,"C C 0.56210\n"); fprintf(fout,"O O -0.58890\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NLYS Residue\n"); fprintf(fout,"N N3 0.09660\n"); fprintf(fout,"H1 H 0.21650\n"); fprintf(fout,"H2 H 0.21650\n"); fprintf(fout,"H3 H 0.21650\n"); fprintf(fout,"CA CT -0.00150\n"); fprintf(fout,"HA HP 0.11800\n"); fprintf(fout,"CB CT 0.02120\n"); fprintf(fout,"HB1 HC 0.02830\n"); fprintf(fout,"HB2 HC 0.02830\n"); fprintf(fout,"CG CT -0.00480\n"); fprintf(fout,"HG1 HC 0.01210\n"); fprintf(fout,"HG2 HC 0.01210\n"); fprintf(fout,"CD CT -0.06080\n"); fprintf(fout,"HD1 HC 0.06330\n"); fprintf(fout,"HD2 HC 0.06330\n"); fprintf(fout,"CE CT -0.01810\n"); fprintf(fout,"HE1 HP 0.11710\n"); fprintf(fout,"HE2 HP 0.11710\n"); fprintf(fout,"NZ N3 -0.37640\n"); fprintf(fout,"HZ1 H 0.33820\n"); fprintf(fout,"HZ2 H 0.33820\n"); fprintf(fout,"HZ3 H 0.33820\n"); fprintf(fout,"C C 0.72140\n"); fprintf(fout,"O O -0.60130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NLYP Residue\n"); fprintf(fout,"N N3 0.09660\n"); fprintf(fout,"H1 H 0.21650\n"); fprintf(fout,"H2 H 0.21650\n"); fprintf(fout,"H3 H 0.21650\n"); fprintf(fout,"CA CT -0.00150\n"); fprintf(fout,"HA HP 0.11800\n"); fprintf(fout,"CB CT 0.02120\n"); fprintf(fout,"HB1 HC 0.02830\n"); fprintf(fout,"HB2 HC 0.02830\n"); fprintf(fout,"CG CT -0.00480\n"); fprintf(fout,"HG1 HC 0.01210\n"); fprintf(fout,"HG2 HC 0.01210\n"); fprintf(fout,"CD CT -0.06080\n"); fprintf(fout,"HD1 HC 0.06330\n"); fprintf(fout,"HD2 HC 0.06330\n"); fprintf(fout,"CE CT -0.01810\n"); fprintf(fout,"HE1 HP 0.11710\n"); fprintf(fout,"HE2 HP 0.11710\n"); fprintf(fout,"NZ N3 -0.37640\n"); fprintf(fout,"HZ1 H 0.33820\n"); fprintf(fout,"HZ2 H 0.33820\n"); fprintf(fout,"HZ3 H 0.33820\n"); fprintf(fout,"C C 0.72140\n"); fprintf(fout,"O O -0.60130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NPRO Residue\n"); fprintf(fout,"N N3 -0.20200\n"); fprintf(fout,"H1 H 0.31200\n"); fprintf(fout,"H2 H 0.31200\n"); fprintf(fout,"CD CT -0.01200\n"); fprintf(fout,"HD1 HP 0.10000\n"); fprintf(fout,"HD2 HP 0.10000\n"); fprintf(fout,"CG CT -0.12100\n"); fprintf(fout,"HG1 HC 0.10000\n"); fprintf(fout,"HG2 HC 0.10000\n"); fprintf(fout,"CB CT -0.11500\n"); fprintf(fout,"HB1 HC 0.10000\n"); fprintf(fout,"HB2 HC 0.10000\n"); fprintf(fout,"CA CT 0.10000\n"); fprintf(fout,"HA HP 0.10000\n"); fprintf(fout,"C C 0.52600\n"); fprintf(fout,"O O -0.50000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NCYS Residue\n"); fprintf(fout,"N N3 0.13250\n"); fprintf(fout,"H1 H 0.20230\n"); fprintf(fout,"H2 H 0.20230\n"); fprintf(fout,"H3 H 0.20230\n"); fprintf(fout,"CA CT 0.09270\n"); fprintf(fout,"HA HP 0.14110\n"); fprintf(fout,"CB CT -0.11950\n"); fprintf(fout,"HB1 H1 0.11880\n"); fprintf(fout,"HB2 H1 0.11880\n"); fprintf(fout,"SG SH -0.32980\n"); fprintf(fout,"HG HS 0.19750\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NCYN Residue\n"); fprintf(fout,"N N3 0.13250\n"); fprintf(fout,"H1 H 0.20230\n"); fprintf(fout,"H2 H 0.20230\n"); fprintf(fout,"H3 H 0.20230\n"); fprintf(fout,"CA CT 0.09270\n"); fprintf(fout,"HA HP 0.14110\n"); fprintf(fout,"CB CT -0.11950\n"); fprintf(fout,"HB1 H1 0.11880\n"); fprintf(fout,"HB2 H1 0.11880\n"); fprintf(fout,"SG SH -0.32980\n"); fprintf(fout,"HG HS 0.19750\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NCYM Residue\n"); fprintf(fout,"N N3 0.098749\n"); fprintf(fout,"H1 H 0.150769\n"); fprintf(fout,"H2 H 0.150769\n"); fprintf(fout,"H3 H 0.150769\n"); fprintf(fout,"CA CT 0.069086\n"); fprintf(fout,"HA HP 0.105158\n"); fprintf(fout,"CB CT -0.11950\n"); fprintf(fout,"HB1 H1 0.11880\n"); fprintf(fout,"HB2 H1 0.11880\n"); fprintf(fout,"SG SH -0.88440\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"Begin NCYX Residue\n"); fprintf(fout,"N N3 0.20690\n"); fprintf(fout,"H1 H 0.18150\n"); fprintf(fout,"H2 H 0.18150\n"); fprintf(fout,"H3 H 0.18150\n"); fprintf(fout,"CA CT 0.10550\n"); fprintf(fout,"HA HP 0.09220\n"); fprintf(fout,"CB CT -0.02770\n"); fprintf(fout,"HB1 H1 0.06800\n"); fprintf(fout,"HB2 H1 0.06800\n"); fprintf(fout,"SG S -0.09840\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NMET Residue\n"); fprintf(fout,"N N3 0.15920\n"); fprintf(fout,"H1 H 0.19840\n"); fprintf(fout,"H2 H 0.19840\n"); fprintf(fout,"H3 H 0.19840\n"); fprintf(fout,"CA CT 0.02210\n"); fprintf(fout,"HA HP 0.11160\n"); fprintf(fout,"CB CT 0.08650\n"); fprintf(fout,"HB1 HC 0.01250\n"); fprintf(fout,"HB2 HC 0.01250\n"); fprintf(fout,"CG CT 0.03340\n"); fprintf(fout,"HG1 H1 0.02920\n"); fprintf(fout,"HG2 H1 0.02920\n"); fprintf(fout,"SD S -0.27740\n"); fprintf(fout,"CE CT -0.03410\n"); fprintf(fout,"HE1 H1 0.05970\n"); fprintf(fout,"HE2 H1 0.05970\n"); fprintf(fout,"HE3 H1 0.05970\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NASH Residue\n"); fprintf(fout,"N N3 0.09069\n"); fprintf(fout,"H1 H 0.25517\n"); fprintf(fout,"H2 H 0.25517\n"); fprintf(fout,"H3 H 0.25517\n"); fprintf(fout,"CA CT 0.03410\n"); fprintf(fout,"HA H1 0.08640\n"); fprintf(fout,"CB CT -0.03160\n"); fprintf(fout,"HB1 HC 0.04880\n"); fprintf(fout,"HB2 HC 0.04880\n"); fprintf(fout,"CG C 0.64620\n"); fprintf(fout,"OD1 O -0.55540\n"); fprintf(fout,"OD2 OH -0.63760\n"); fprintf(fout,"HD2 HO 0.47470\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NGLH Residue\n"); fprintf(fout,"N N3 0.32022\n"); fprintf(fout,"H1 H 0.17866\n"); fprintf(fout,"H2 H 0.17866\n"); fprintf(fout,"H3 H 0.17866\n"); fprintf(fout,"CA CT 0.01450\n"); fprintf(fout,"HA H1 0.07790\n"); fprintf(fout,"CB CT -0.00710\n"); fprintf(fout,"HB1 HC 0.02560\n"); fprintf(fout,"HB2 HC 0.02560\n"); fprintf(fout,"CG CT -0.01740\n"); fprintf(fout,"HG1 HC 0.04300\n"); fprintf(fout,"HG2 HC 0.04300\n"); fprintf(fout,"CD C 0.68010\n"); fprintf(fout,"OE1 O -0.58380\n"); fprintf(fout,"OE2 OH -0.65110\n"); fprintf(fout,"HE2 HO 0.46410\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NLYN Residue\n"); fprintf(fout,"N N3 0.32022\n"); fprintf(fout,"H1 H 0.17866\n"); fprintf(fout,"H2 H 0.17866\n"); fprintf(fout,"H3 H 0.17866\n"); fprintf(fout,"CA CT -0.07206\n"); fprintf(fout,"HA H1 0.09940\n"); fprintf(fout,"CB CT -0.04845\n"); fprintf(fout,"HB1 HC 0.03400\n"); fprintf(fout,"HB2 HC 0.03400\n"); fprintf(fout,"CG CT 0.06612\n"); fprintf(fout,"HG1 HC 0.01041\n"); fprintf(fout,"HG2 HC 0.01041\n"); fprintf(fout,"CD CT -0.03768\n"); fprintf(fout,"HD1 HC 0.01155\n"); fprintf(fout,"HD2 HC 0.01155\n"); fprintf(fout,"CE CT 0.32604\n"); fprintf(fout,"HE1 HP -0.03358\n"); fprintf(fout,"HE2 HP -0.03358\n"); fprintf(fout,"NZ N3 -1.03581\n"); fprintf(fout,"HZ1 H 0.38604\n"); fprintf(fout,"HZ2 H 0.38604\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HALA Residue\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CA CT 0.033700\n"); fprintf(fout,"HA H1 0.082300\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"CB CT -0.182500\n"); fprintf(fout,"HB1 HC 0.060300\n"); fprintf(fout,"HB2 HC 0.060300\n"); fprintf(fout,"HB3 HC 0.060300\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HARG Residue\n"); fprintf(fout,"N N -0.916539\n"); fprintf(fout,"H1 H 0.421669\n"); fprintf(fout,"H2 H 0.421669\n"); fprintf(fout,"CA CT -0.263700\n"); fprintf(fout,"HA H1 0.156000\n"); fprintf(fout,"C C 0.734100\n"); fprintf(fout,"O O -0.589400\n"); fprintf(fout,"CB CT -0.000700\n"); fprintf(fout,"HB1 HC 0.032700\n"); fprintf(fout,"HB2 HC 0.032700\n"); fprintf(fout,"CG CT 0.039000\n"); fprintf(fout,"HG1 HC 0.028500\n"); fprintf(fout,"HG2 HC 0.028500\n"); fprintf(fout,"CD CT 0.048600\n"); fprintf(fout,"HD1 H1 0.068700\n"); fprintf(fout,"HD2 H1 0.068700\n"); fprintf(fout,"NE N2 -0.529500\n"); fprintf(fout,"HE H 0.345600\n"); fprintf(fout,"CZ CA 0.807600\n"); fprintf(fout,"NH1 N2 -0.862700\n"); fprintf(fout,"HH11 H 0.447800\n"); fprintf(fout,"HH12 H 0.447800\n"); fprintf(fout,"NH2 N2 -0.862700\n"); fprintf(fout,"HH21 H 0.447800\n"); fprintf(fout,"HH22 H 0.447800\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HASN Residue\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CA CT 0.014300\n"); fprintf(fout,"HA H1 0.104800\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"CB CT -0.204100\n"); fprintf(fout,"HB1 HC 0.079700\n"); fprintf(fout,"HB2 HC 0.079700\n"); fprintf(fout,"CG C 0.713000\n"); fprintf(fout,"OD1 O -0.593100\n"); fprintf(fout,"ND2 N -0.919100\n"); fprintf(fout,"HD21 H 0.419600\n"); fprintf(fout,"HD22 H 0.419600\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HASP Residue\n"); fprintf(fout,"N N -0.997877\n"); fprintf(fout,"H1 H 0.387588\n"); fprintf(fout,"H2 H 0.387588\n"); fprintf(fout,"CA CT 0.038100\n"); fprintf(fout,"HA H1 0.088000\n"); fprintf(fout,"C C 0.536600\n"); fprintf(fout,"O O -0.581900\n"); fprintf(fout,"CB CT -0.030300\n"); fprintf(fout,"HB1 HC -0.012200\n"); fprintf(fout,"HB2 HC -0.012200\n"); fprintf(fout,"CG C 0.799400\n"); fprintf(fout,"OD1 O2 -0.801400\n"); fprintf(fout,"OD2 O2 -0.801400\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HCYS Residue\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CA CT 0.021300\n"); fprintf(fout,"HA H1 0.112400\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"CB CT -0.123100\n"); fprintf(fout,"HB1 H1 0.111200\n"); fprintf(fout,"HB2 H1 0.111200\n"); fprintf(fout,"SG SH -0.311900\n"); fprintf(fout,"HG HS 0.193300\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HCYX Residue\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CA CT 0.042900\n"); fprintf(fout,"HA H1 0.076600\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"CB CT -0.079000\n"); fprintf(fout,"HB1 H1 0.091000\n"); fprintf(fout,"HB2 H1 0.091000\n"); fprintf(fout,"SG S -0.108100\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HGLN Residue\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CA CT -0.003100\n"); fprintf(fout,"HA H1 0.085000\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"CB CT -0.003600\n"); fprintf(fout,"HB1 HC 0.017100\n"); fprintf(fout,"HB2 HC 0.017100\n"); fprintf(fout,"CG CT -0.064500\n"); fprintf(fout,"HG1 HC 0.035200\n"); fprintf(fout,"HG2 HC 0.035200\n"); fprintf(fout,"CD C 0.695100\n"); fprintf(fout,"OE1 O -0.608600\n"); fprintf(fout,"NE2 N -0.940700\n"); fprintf(fout,"HE21 H 0.425100\n"); fprintf(fout,"HE22 H 0.425100\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HGLU Residue\n"); fprintf(fout,"N N -0.997877\n"); fprintf(fout,"H1 H 0.387588\n"); fprintf(fout,"H2 H 0.387588\n"); fprintf(fout,"CA CT 0.039700\n"); fprintf(fout,"HA H1 0.110500\n"); fprintf(fout,"C C 0.536600\n"); fprintf(fout,"O O -0.581900\n"); fprintf(fout,"CB CT 0.056000\n"); fprintf(fout,"HB1 HC -0.017300\n"); fprintf(fout,"HB2 HC -0.017300\n"); fprintf(fout,"CG CT 0.013600\n"); fprintf(fout,"HG1 HC -0.042500\n"); fprintf(fout,"HG2 HC -0.042500\n"); fprintf(fout,"CD C 0.805400\n"); fprintf(fout,"OE1 O2 -0.818800\n"); fprintf(fout,"OE2 O2 -0.818800\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HGLY Residue\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CA CT -0.025200\n"); fprintf(fout,"HA1 H1 0.069800\n"); fprintf(fout,"HA2 H1 0.069800\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HHID Residue\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CA CT 0.018800\n"); fprintf(fout,"HA H1 0.088100\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"CB CT -0.046200\n"); fprintf(fout,"HB1 HC 0.040200\n"); fprintf(fout,"HB2 HC 0.040200\n"); fprintf(fout,"CG CC -0.026600\n"); fprintf(fout,"ND1 NA -0.381100\n"); fprintf(fout,"HD1 H 0.364900\n"); fprintf(fout,"CD2 CV 0.129200\n"); fprintf(fout,"HD2 H4 0.114700\n"); fprintf(fout,"CE1 CR 0.205700\n"); fprintf(fout,"HE1 H5 0.139200\n"); fprintf(fout,"NE2 NB -0.572700\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HHIE Residue\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CA CT -0.058100\n"); fprintf(fout,"HA H1 0.136000\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"CB CT -0.007400\n"); fprintf(fout,"HB1 HC 0.036700\n"); fprintf(fout,"HB2 HC 0.036700\n"); fprintf(fout,"CG CC 0.186800\n"); fprintf(fout,"ND1 NB -0.543200\n"); fprintf(fout,"CD2 CW -0.220700\n"); fprintf(fout,"HD2 H4 0.186200\n"); fprintf(fout,"CE1 CR 0.163500\n"); fprintf(fout,"HE1 H5 0.143500\n"); fprintf(fout,"NE2 NA -0.279500\n"); fprintf(fout,"HE2 H 0.333900\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HHIP Residue\n"); fprintf(fout,"N N -0.916539\n"); fprintf(fout,"H1 H 0.421669\n"); fprintf(fout,"H2 H 0.421669\n"); fprintf(fout,"CA CT -0.135400\n"); fprintf(fout,"HA H1 0.121200\n"); fprintf(fout,"C C 0.734100\n"); fprintf(fout,"O O -0.589400\n"); fprintf(fout,"CB CT -0.041400\n"); fprintf(fout,"HB1 HC 0.081000\n"); fprintf(fout,"HB2 HC 0.081000\n"); fprintf(fout,"CG CC -0.001200\n"); fprintf(fout,"ND1 NA -0.151300\n"); fprintf(fout,"HD1 H 0.386600\n"); fprintf(fout,"CD2 CW -0.114100\n"); fprintf(fout,"HD2 H4 0.231700\n"); fprintf(fout,"CE1 CR -0.017000\n"); fprintf(fout,"HE1 H5 0.268100\n"); fprintf(fout,"NE2 NA -0.171800\n"); fprintf(fout,"HE2 H 0.391100\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HHIS Residue\n"); fprintf(fout,"N N -0.916539\n"); fprintf(fout,"H1 H 0.421669\n"); fprintf(fout,"H2 H 0.421669\n"); fprintf(fout,"CA CT -0.135400\n"); fprintf(fout,"HA H1 0.121200\n"); fprintf(fout,"C C 0.734100\n"); fprintf(fout,"O O -0.589400\n"); fprintf(fout,"CB CT -0.041400\n"); fprintf(fout,"HB1 HC 0.081000\n"); fprintf(fout,"HB2 HC 0.081000\n"); fprintf(fout,"CG CC -0.001200\n"); fprintf(fout,"ND1 NA -0.151300\n"); fprintf(fout,"HD1 H 0.386600\n"); fprintf(fout,"CD2 CW -0.114100\n"); fprintf(fout,"HD2 H4 0.231700\n"); fprintf(fout,"CE1 CR -0.017000\n"); fprintf(fout,"HE1 H5 0.268100\n"); fprintf(fout,"NE2 NA -0.171800\n"); fprintf(fout,"HE2 H 0.391100\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HILE Residue\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CA CT -0.059700\n"); fprintf(fout,"HA H1 0.086900\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"CB CT 0.130300\n"); fprintf(fout,"HB HC 0.018700\n"); fprintf(fout,"CG1 CT -0.043000\n"); fprintf(fout,"HG11 HC 0.023600\n"); fprintf(fout,"HG12 HC 0.023600\n"); fprintf(fout,"CG2 CT -0.320400\n"); fprintf(fout,"HG21 HC 0.088200\n"); fprintf(fout,"HG22 HC 0.088200\n"); fprintf(fout,"HG23 HC 0.088200\n"); fprintf(fout,"CD CT -0.066000\n"); fprintf(fout,"HD1 HC 0.018600\n"); fprintf(fout,"HD2 HC 0.018600\n"); fprintf(fout,"HD3 HC 0.018600\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HLEU Residue\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CA CT -0.051800\n"); fprintf(fout,"HA H1 0.092200\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"CB CT -0.110200\n"); fprintf(fout,"HB1 HC 0.045700\n"); fprintf(fout,"HB2 HC 0.045700\n"); fprintf(fout,"CG CT 0.353100\n"); fprintf(fout,"HG HC -0.036100\n"); fprintf(fout,"CD1 CT -0.412100\n"); fprintf(fout,"HD11 HC 0.100000\n"); fprintf(fout,"HD12 HC 0.100000\n"); fprintf(fout,"HD13 HC 0.100000\n"); fprintf(fout,"CD2 CT -0.412100\n"); fprintf(fout,"HD21 HC 0.100000\n"); fprintf(fout,"HD22 HC 0.100000\n"); fprintf(fout,"HD23 HC 0.100000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HLYS Residue\n"); fprintf(fout,"N N -0.916539\n"); fprintf(fout,"H1 H 0.421669\n"); fprintf(fout,"H2 H 0.421669\n"); fprintf(fout,"CA CT -0.240000\n"); fprintf(fout,"HA H1 0.142600\n"); fprintf(fout,"C C 0.734100\n"); fprintf(fout,"O O -0.589400\n"); fprintf(fout,"CB CT -0.009400\n"); fprintf(fout,"HB1 HC 0.036200\n"); fprintf(fout,"HB2 HC 0.036200\n"); fprintf(fout,"CG CT 0.018700\n"); fprintf(fout,"HG1 HC 0.010300\n"); fprintf(fout,"HG2 HC 0.010300\n"); fprintf(fout,"CD CT -0.047900\n"); fprintf(fout,"HD1 HC 0.062100\n"); fprintf(fout,"HD2 HC 0.062100\n"); fprintf(fout,"CE CT -0.014300\n"); fprintf(fout,"HE1 HP 0.113500\n"); fprintf(fout,"HE2 HP 0.113500\n"); fprintf(fout,"NZ N3 -0.385400\n"); fprintf(fout,"HZ1 H 0.340000\n"); fprintf(fout,"HZ2 H 0.340000\n"); fprintf(fout,"HZ3 H 0.340000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HMET Residue\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CA CT -0.023700\n"); fprintf(fout,"HA H1 0.088000\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"CB CT 0.034200\n"); fprintf(fout,"HB1 HC 0.024100\n"); fprintf(fout,"HB2 HC 0.024100\n"); fprintf(fout,"CG CT 0.001800\n"); fprintf(fout,"HG1 H1 0.044000\n"); fprintf(fout,"HG2 H1 0.044000\n"); fprintf(fout,"SD S -0.273700\n"); fprintf(fout,"CE CT -0.053600\n"); fprintf(fout,"HE1 H1 0.068400\n"); fprintf(fout,"HE2 H1 0.068400\n"); fprintf(fout,"HE3 H1 0.068400\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HPHE Residue\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CA CT -0.002400\n"); fprintf(fout,"HA H1 0.097800\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"CB CT -0.034300\n"); fprintf(fout,"HB1 HC 0.029500\n"); fprintf(fout,"HB2 HC 0.029500\n"); fprintf(fout,"CG CA 0.011800\n"); fprintf(fout,"CD1 CA -0.125600\n"); fprintf(fout,"HD1 HA 0.133000\n"); fprintf(fout,"CD2 CA -0.125600\n"); fprintf(fout,"HD2 HA 0.133000\n"); fprintf(fout,"CE1 CA -0.170400\n"); fprintf(fout,"HE1 HA 0.143000\n"); fprintf(fout,"CE2 CA -0.170400\n"); fprintf(fout,"HE2 HA 0.143000\n"); fprintf(fout,"CZ CA -0.107200\n"); fprintf(fout,"HZ HA 0.129700\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HPRO Residue\n"); fprintf(fout,"N N -0.654800\n"); fprintf(fout,"H H 0.400000\n"); fprintf(fout,"CA CT -0.026600\n"); fprintf(fout,"HA H1 0.064100\n"); fprintf(fout,"C C 0.589600\n"); fprintf(fout,"O O -0.574800\n"); fprintf(fout,"CB CT -0.007000\n"); fprintf(fout,"HB1 HC 0.025300\n"); fprintf(fout,"HB2 HC 0.025300\n"); fprintf(fout,"CG CT 0.018900\n"); fprintf(fout,"HG1 HC 0.021300\n"); fprintf(fout,"HG2 HC 0.021300\n"); fprintf(fout,"CD CT 0.019200\n"); fprintf(fout,"HD1 H1 0.039100\n"); fprintf(fout,"HD2 H1 0.039100\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HSER Residue\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CA CT -0.024900\n"); fprintf(fout,"HA H1 0.084300\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"CB CT 0.211700\n"); fprintf(fout,"HB1 H1 0.035200\n"); fprintf(fout,"HB2 H1 0.035200\n"); fprintf(fout,"OG OH -0.654600\n"); fprintf(fout,"HG HO 0.427500\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HTHR Residue\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CA CT -0.038900\n"); fprintf(fout,"HA H1 0.100700\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"CB CT 0.365400\n"); fprintf(fout,"HB H1 0.004300\n"); fprintf(fout,"OG1 OH -0.676100\n"); fprintf(fout,"HG1 HO 0.410200\n"); fprintf(fout,"CG2 CT -0.243800\n"); fprintf(fout,"HG21 HC 0.064200\n"); fprintf(fout,"HG22 HC 0.064200\n"); fprintf(fout,"HG23 HC 0.064200\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HTYR Residue\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CA CT -0.001400\n"); fprintf(fout,"HA H1 0.087600\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"CB CT -0.015200\n"); fprintf(fout,"HB1 HC 0.029500\n"); fprintf(fout,"HB2 HC 0.029500\n"); fprintf(fout,"CG CA -0.001100\n"); fprintf(fout,"CD1 CA -0.190600\n"); fprintf(fout,"HD1 HA 0.169900\n"); fprintf(fout,"CD2 CA -0.190600\n"); fprintf(fout,"HD2 HA 0.169900\n"); fprintf(fout,"CE1 CA -0.234100\n"); fprintf(fout,"HE1 HA 0.165600\n"); fprintf(fout,"CE2 CA -0.234100\n"); fprintf(fout,"HE2 HA 0.165600\n"); fprintf(fout,"CZ C 0.322600\n"); fprintf(fout,"OH OH -0.557900\n"); fprintf(fout,"HH HO 0.399200\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HTRP Residue\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CA CT -0.027500\n"); fprintf(fout,"HA H1 0.112300\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"CB CT -0.005000\n"); fprintf(fout,"HB1 HC 0.033900\n"); fprintf(fout,"HB2 HC 0.033900\n"); fprintf(fout,"CG C* -0.141500\n"); fprintf(fout,"CD1 CW -0.163800\n"); fprintf(fout,"HD1 H4 0.206200\n"); fprintf(fout,"CD2 CB 0.124300\n"); fprintf(fout,"NE1 NA -0.341800\n"); fprintf(fout,"HE1 H 0.341200\n"); fprintf(fout,"CE2 CN 0.138000\n"); fprintf(fout,"CE3 CA -0.238700\n"); fprintf(fout,"HE3 HA 0.170000\n"); fprintf(fout,"CZ2 CA -0.260100\n"); fprintf(fout,"HZ2 HA 0.157200\n"); fprintf(fout,"CZ3 CA -0.197200\n"); fprintf(fout,"HZ3 HA 0.144700\n"); fprintf(fout,"CH2 CA -0.113400\n"); fprintf(fout,"HH2 HA 0.141700\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HVAL Residue\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CA CT -0.087500\n"); fprintf(fout,"HA H1 0.096900\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"CB CT 0.298500\n"); fprintf(fout,"HB HC -0.029700\n"); fprintf(fout,"CG1 CT -0.319200\n"); fprintf(fout,"HG11 HC 0.079100\n"); fprintf(fout,"HG12 HC 0.079100\n"); fprintf(fout,"HG13 HC 0.079100\n"); fprintf(fout,"CG2 CT -0.319200\n"); fprintf(fout,"HG21 HC 0.079100\n"); fprintf(fout,"HG22 HC 0.079100\n"); fprintf(fout,"HG23 HC 0.079100\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HASH Residue\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"HB2 HC 0.048800\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"CA CT 0.034100\n"); fprintf(fout,"CB CT -0.031600\n"); fprintf(fout,"OD1 O -0.555400\n"); fprintf(fout,"HB1 HC 0.048800\n"); fprintf(fout,"CG C 0.646200\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"HA H1 0.086400\n"); fprintf(fout,"OD2 OH -0.637600\n"); fprintf(fout,"HD2 HO 0.474700\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HGLH Residue\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"CB CT -0.007100\n"); fprintf(fout,"HB2 HC 0.025600\n"); fprintf(fout,"HB1 HC 0.025600\n"); fprintf(fout,"CA CT 0.014500\n"); fprintf(fout,"HA H1 0.077900\n"); fprintf(fout,"OE1 O -0.583800\n"); fprintf(fout,"OE2 OH -0.651100\n"); fprintf(fout,"HE2 HO 0.464100\n"); fprintf(fout,"CD C 0.680100\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CG CT -0.017400\n"); fprintf(fout,"HG1 HC 0.043000\n"); fprintf(fout,"HG2 HC 0.043000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HLYN Residue\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"CB CT -0.048450\n"); fprintf(fout,"HB1 HC 0.034000\n"); fprintf(fout,"HB2 HC 0.034000\n"); fprintf(fout,"CD CT -0.037680\n"); fprintf(fout,"HD1 HC 0.011550\n"); fprintf(fout,"HD2 HC 0.011550\n"); fprintf(fout,"CA CT -0.072060\n"); fprintf(fout,"HA H1 0.099400\n"); fprintf(fout,"CG CT 0.066120\n"); fprintf(fout,"HG1 HC 0.010410\n"); fprintf(fout,"HG2 HC 0.010410\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CE CT 0.326040\n"); fprintf(fout,"HE1 HP -0.033580\n"); fprintf(fout,"HE2 HP -0.033580\n"); fprintf(fout,"NZ N3 -1.035810\n"); fprintf(fout,"HZ1 H 0.386040\n"); fprintf(fout,"HZ2 H 0.386040\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HCYM Residue\n"); fprintf(fout,"N N -0.954950\n"); fprintf(fout,"H1 H 0.405575\n"); fprintf(fout,"H2 H 0.405575\n"); fprintf(fout,"CA CT -0.035100\n"); fprintf(fout,"HA H1 0.050800\n"); fprintf(fout,"C C 0.597300\n"); fprintf(fout,"O O -0.567900\n"); fprintf(fout,"CB CT -0.241300\n"); fprintf(fout,"HB1 H1 0.112200\n"); fprintf(fout,"HB2 H1 0.112200\n"); fprintf(fout,"SG SH -0.884400\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin ROH Residue\n"); fprintf(fout,"N N -0.687400\n"); fprintf(fout,"H H 0.362500\n"); fprintf(fout,"CA CT 0.613500\n"); fprintf(fout,"HA H1 -0.013000\n"); fprintf(fout,"CB CT -0.426200\n"); fprintf(fout,"HB1 HC 0.162200\n"); fprintf(fout,"HB2 HC 0.097600\n"); fprintf(fout,"CG CT -0.121200\n"); fprintf(fout,"HG1 HC 0.126700\n"); fprintf(fout,"HG2 HC 0.078100\n"); fprintf(fout,"CD CT 0.185000\n"); fprintf(fout,"HD1 H1 0.055100\n"); fprintf(fout,"HD2 H1 0.059300\n"); fprintf(fout,"NE N2 -0.707500\n"); fprintf(fout,"HE H 0.383700\n"); fprintf(fout,"CZ CA 1.082900\n"); fprintf(fout,"NH1 N2 -0.981100\n"); fprintf(fout,"HH11 H 0.452300\n"); fprintf(fout,"HH12 H 0.483000\n"); fprintf(fout,"NH2 N2 -1.121400\n"); fprintf(fout,"HH21 H 0.511600\n"); fprintf(fout,"HH22 H 0.514900\n"); fprintf(fout,"C C 0.683200\n"); fprintf(fout,"O O -0.590800\n"); fprintf(fout,"OH OH -0.747600\n"); fprintf(fout,"HO HO 0.544600\n"); fprintf(fout,"End\n"); fprintf(fout,"End\n"); } /************************************************************/ void createNucleicResidueTpl(FILE* fout) { fprintf(fout,"Begin DA5 Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.04310\n"); fprintf(fout,"H1' H2 0.18380\n"); fprintf(fout,"N9 N* -0.02680\n"); fprintf(fout,"C8 CK 0.16070\n"); fprintf(fout,"H8 H5 0.18770\n"); fprintf(fout,"N7 NB -0.61750\n"); fprintf(fout,"C5 CB 0.07250\n"); fprintf(fout,"C6 CA 0.68970\n"); fprintf(fout,"N6 N2 -0.91230\n"); fprintf(fout,"H61 H 0.41670\n"); fprintf(fout,"H62 H 0.41670\n"); fprintf(fout,"N1 NC -0.76240\n"); fprintf(fout,"C2 CQ 0.57160\n"); fprintf(fout,"H2 H5 0.05980\n"); fprintf(fout,"N3 NC -0.74170\n"); fprintf(fout,"C4 CB 0.38000\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OS -0.52320\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DA Residue\n"); fprintf(fout,"N N -0.34790\n"); fprintf(fout,"H H 0.27470\n"); fprintf(fout,"CA CT -0.24000\n"); fprintf(fout,"HA H1 0.14260\n"); fprintf(fout,"CB CT 0.02920\n"); fprintf(fout,"HB1 HC 0.07470\n"); fprintf(fout,"HB2 HC 0.07470\n"); fprintf(fout,"CG CT -0.01430\n"); fprintf(fout,"HG1 HP 0.11350\n"); fprintf(fout,"HG2 HP 0.11350\n"); fprintf(fout,"ND N3 -0.38540\n"); fprintf(fout,"HD1 H 0.34000\n"); fprintf(fout,"HD2 H 0.34000\n"); fprintf(fout,"HD3 H 0.34000\n"); fprintf(fout,"C C 0.73410\n"); fprintf(fout,"O O -0.58940\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DA3 Residue\n"); fprintf(fout,"P P 1.16590\n"); fprintf(fout,"O1P O2 -0.77610\n"); fprintf(fout,"O2P O2 -0.77610\n"); fprintf(fout,"O5' OS -0.49540\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.04310\n"); fprintf(fout,"H1' H2 0.18380\n"); fprintf(fout,"N9 N* -0.02680\n"); fprintf(fout,"C8 CK 0.16070\n"); fprintf(fout,"H8 H5 0.18770\n"); fprintf(fout,"N7 NB -0.61750\n"); fprintf(fout,"C5 CB 0.07250\n"); fprintf(fout,"C6 CA 0.68970\n"); fprintf(fout,"N6 N2 -0.91230\n"); fprintf(fout,"H61 H 0.41670\n"); fprintf(fout,"H62 H 0.41670\n"); fprintf(fout,"N1 NC -0.76240\n"); fprintf(fout,"C2 CQ 0.57160\n"); fprintf(fout,"H2 H5 0.05980\n"); fprintf(fout,"N3 NC -0.74170\n"); fprintf(fout,"C4 CB 0.38000\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OH -0.65490\n"); fprintf(fout,"H3T HO 0.43960\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DAN Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.04310\n"); fprintf(fout,"H1' H2 0.18380\n"); fprintf(fout,"N9 N* -0.02680\n"); fprintf(fout,"C8 CK 0.16070\n"); fprintf(fout,"H8 H5 0.18770\n"); fprintf(fout,"N7 NB -0.61750\n"); fprintf(fout,"C5 CB 0.07250\n"); fprintf(fout,"C6 CA 0.68970\n"); fprintf(fout,"N6 N2 -0.91230\n"); fprintf(fout,"H61 H 0.41670\n"); fprintf(fout,"H62 H 0.41670\n"); fprintf(fout,"N1 NC -0.76240\n"); fprintf(fout,"C2 CQ 0.57160\n"); fprintf(fout,"H2 H5 0.05980\n"); fprintf(fout,"N3 NC -0.74170\n"); fprintf(fout,"C4 CB 0.38000\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OH -0.65490\n"); fprintf(fout,"H3T HO 0.43960\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RA5 Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.03940\n"); fprintf(fout,"H1' H2 0.20070\n"); fprintf(fout,"N9 N* -0.02510\n"); fprintf(fout,"C8 CK 0.20060\n"); fprintf(fout,"H8 H5 0.15530\n"); fprintf(fout,"N7 NB -0.60730\n"); fprintf(fout,"C5 CB 0.05150\n"); fprintf(fout,"C6 CA 0.70090\n"); fprintf(fout,"N6 N2 -0.90190\n"); fprintf(fout,"H61 H 0.41150\n"); fprintf(fout,"H62 H 0.41150\n"); fprintf(fout,"N1 NC -0.76150\n"); fprintf(fout,"C2 CQ 0.58750\n"); fprintf(fout,"H2 H5 0.04730\n"); fprintf(fout,"N3 NC -0.69970\n"); fprintf(fout,"C4 CB 0.30530\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OS -0.52460\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RA Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.03940\n"); fprintf(fout,"H1' H2 0.20070\n"); fprintf(fout,"N9 N* -0.02510\n"); fprintf(fout,"C8 CK 0.20060\n"); fprintf(fout,"H8 H5 0.15530\n"); fprintf(fout,"N7 NB -0.60730\n"); fprintf(fout,"C5 CB 0.05150\n"); fprintf(fout,"C6 CA 0.70090\n"); fprintf(fout,"N6 N2 -0.90190\n"); fprintf(fout,"H61 H 0.41150\n"); fprintf(fout,"H62 H 0.41150\n"); fprintf(fout,"N1 NC -0.76150\n"); fprintf(fout,"C2 CQ 0.58750\n"); fprintf(fout,"H2 H5 0.04730\n"); fprintf(fout,"N3 NC -0.69970\n"); fprintf(fout,"C4 CB 0.30530\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OS -0.52460\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RA3 Residue\n"); fprintf(fout,"P P 1.16620\n"); fprintf(fout,"O1P O2 -0.77600\n"); fprintf(fout,"O2P O2 -0.77600\n"); fprintf(fout,"O5' OS -0.49890\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.03940\n"); fprintf(fout,"H1' H2 0.20070\n"); fprintf(fout,"N9 N* -0.02510\n"); fprintf(fout,"C8 CK 0.20060\n"); fprintf(fout,"H8 H5 0.15530\n"); fprintf(fout,"N7 NB -0.60730\n"); fprintf(fout,"C5 CB 0.05150\n"); fprintf(fout,"C6 CA 0.70090\n"); fprintf(fout,"N6 N2 -0.90190\n"); fprintf(fout,"H61 H 0.41150\n"); fprintf(fout,"H62 H 0.41150\n"); fprintf(fout,"N1 NC -0.76150\n"); fprintf(fout,"C2 CQ 0.58750\n"); fprintf(fout,"H2 H5 0.04730\n"); fprintf(fout,"N3 NC -0.69970\n"); fprintf(fout,"C4 CB 0.30530\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OH -0.65410\n"); fprintf(fout,"H3T HO 0.43760\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RAN Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.03940\n"); fprintf(fout,"H1' H2 0.20070\n"); fprintf(fout,"N9 N* -0.02510\n"); fprintf(fout,"C8 CK 0.20060\n"); fprintf(fout,"H8 H5 0.15530\n"); fprintf(fout,"N7 NB -0.60730\n"); fprintf(fout,"C5 CB 0.05150\n"); fprintf(fout,"C6 CA 0.70090\n"); fprintf(fout,"N6 N2 -0.90190\n"); fprintf(fout,"H61 H 0.41150\n"); fprintf(fout,"H62 H 0.41150\n"); fprintf(fout,"N1 NC -0.76150\n"); fprintf(fout,"C2 CQ 0.58750\n"); fprintf(fout,"H2 H5 0.04730\n"); fprintf(fout,"N3 NC -0.69970\n"); fprintf(fout,"C4 CB 0.30530\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OH -0.65410\n"); fprintf(fout,"H3T HO 0.43760\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DT5 Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.06800\n"); fprintf(fout,"H1' H2 0.18040\n"); fprintf(fout,"N1 N* -0.02390\n"); fprintf(fout,"C6 CM -0.22090\n"); fprintf(fout,"H6 H4 0.26070\n"); fprintf(fout,"C5 CM 0.00250\n"); fprintf(fout,"C7 CT -0.22690\n"); fprintf(fout,"H71 HC 0.07700\n"); fprintf(fout,"H72 HC 0.07700\n"); fprintf(fout,"H73 HC 0.07700\n"); fprintf(fout,"C4 C 0.51940\n"); fprintf(fout,"O4 O -0.55630\n"); fprintf(fout,"N3 NA -0.43400\n"); fprintf(fout,"H3 H 0.34200\n"); fprintf(fout,"C2 C 0.56770\n"); fprintf(fout,"O O -0.58810\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OS -0.52320\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DT Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.06800\n"); fprintf(fout,"H1' H2 0.18040\n"); fprintf(fout,"N1 N* -0.02390\n"); fprintf(fout,"C6 CM -0.22090\n"); fprintf(fout,"H6 H4 0.26070\n"); fprintf(fout,"C5 CM 0.00250\n"); fprintf(fout,"C7 CT -0.22690\n"); fprintf(fout,"H71 HC 0.07700\n"); fprintf(fout,"H72 HC 0.07700\n"); fprintf(fout,"H73 HC 0.07700\n"); fprintf(fout,"C4 C 0.51940\n"); fprintf(fout,"O4 O -0.55630\n"); fprintf(fout,"N3 NA -0.43400\n"); fprintf(fout,"H3 H 0.34200\n"); fprintf(fout,"C2 C 0.56770\n"); fprintf(fout,"O O -0.58810\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OS -0.52320\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DT3 Residue\n"); fprintf(fout,"P P 1.16590\n"); fprintf(fout,"O1P O2 -0.77610\n"); fprintf(fout,"O2P O2 -0.77610\n"); fprintf(fout,"O5' OS -0.49540\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.06800\n"); fprintf(fout,"H1' H2 0.18040\n"); fprintf(fout,"N1 N* -0.02390\n"); fprintf(fout,"C6 CM -0.22090\n"); fprintf(fout,"H6 H4 0.26070\n"); fprintf(fout,"C5 CM 0.00250\n"); fprintf(fout,"C7 CT -0.22690\n"); fprintf(fout,"H71 HC 0.07700\n"); fprintf(fout,"H72 HC 0.07700\n"); fprintf(fout,"H73 HC 0.07700\n"); fprintf(fout,"C4 C 0.51940\n"); fprintf(fout,"O4 O -0.55630\n"); fprintf(fout,"N3 NA -0.43400\n"); fprintf(fout,"H3 H 0.34200\n"); fprintf(fout,"C2 C 0.56770\n"); fprintf(fout,"O O -0.58810\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OH -0.65490\n"); fprintf(fout,"H3T HO 0.43960\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DTN Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.06800\n"); fprintf(fout,"H1' H2 0.18040\n"); fprintf(fout,"N1 N* -0.02390\n"); fprintf(fout,"C6 CM -0.22090\n"); fprintf(fout,"H6 H4 0.26070\n"); fprintf(fout,"C5 CM 0.00250\n"); fprintf(fout,"C7 CT -0.22690\n"); fprintf(fout,"H71 HC 0.07700\n"); fprintf(fout,"H72 HC 0.07700\n"); fprintf(fout,"H73 HC 0.07700\n"); fprintf(fout,"C4 C 0.51940\n"); fprintf(fout,"O4 O -0.55630\n"); fprintf(fout,"N3 NA -0.43400\n"); fprintf(fout,"H3 H 0.34200\n"); fprintf(fout,"C2 C 0.56770\n"); fprintf(fout,"O O -0.58810\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OH -0.65490\n"); fprintf(fout,"H3T HO 0.43960\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RU5 Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.06740\n"); fprintf(fout,"H1' H2 0.18240\n"); fprintf(fout,"N1 N* 0.04180\n"); fprintf(fout,"C6 CM -0.11260\n"); fprintf(fout,"H6 H4 0.21880\n"); fprintf(fout,"C5 CM -0.36350\n"); fprintf(fout,"H5 HA 0.18110\n"); fprintf(fout,"C4 C 0.59520\n"); fprintf(fout,"O4 O -0.57610\n"); fprintf(fout,"N3 NA -0.35490\n"); fprintf(fout,"H3 H 0.31540\n"); fprintf(fout,"C2 C 0.46870\n"); fprintf(fout,"O O -0.54770\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OS -0.52460\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RU Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.06740\n"); fprintf(fout,"H1' H2 0.18240\n"); fprintf(fout,"N1 N* 0.04180\n"); fprintf(fout,"C6 CM -0.11260\n"); fprintf(fout,"H6 H4 0.21880\n"); fprintf(fout,"C5 CM -0.36350\n"); fprintf(fout,"H5 HA 0.18110\n"); fprintf(fout,"C4 C 0.59520\n"); fprintf(fout,"O4 O -0.57610\n"); fprintf(fout,"N3 NA -0.35490\n"); fprintf(fout,"H3 H 0.31540\n"); fprintf(fout,"C2 C 0.46870\n"); fprintf(fout,"O O -0.54770\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OS -0.52460\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RU3 Residue\n"); fprintf(fout,"P P 1.16620\n"); fprintf(fout,"O1P O2 -0.77600\n"); fprintf(fout,"O2P O2 -0.77600\n"); fprintf(fout,"O5' OS -0.49890\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.06740\n"); fprintf(fout,"H1' H2 0.18240\n"); fprintf(fout,"N1 N* 0.04180\n"); fprintf(fout,"C6 CM -0.11260\n"); fprintf(fout,"H6 H4 0.21880\n"); fprintf(fout,"C5 CM -0.36350\n"); fprintf(fout,"H5 HA 0.18110\n"); fprintf(fout,"C4 C 0.59520\n"); fprintf(fout,"O4 O -0.57610\n"); fprintf(fout,"N3 NA -0.35490\n"); fprintf(fout,"H3 H 0.31540\n"); fprintf(fout,"C2 C 0.46870\n"); fprintf(fout,"O O -0.54770\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OH -0.65410\n"); fprintf(fout,"H3T HO 0.43760\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RUN Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.06740\n"); fprintf(fout,"H1' H2 0.18240\n"); fprintf(fout,"N1 N* 0.04180\n"); fprintf(fout,"C6 CM -0.11260\n"); fprintf(fout,"H6 H4 0.21880\n"); fprintf(fout,"C5 CM -0.36350\n"); fprintf(fout,"H5 HA 0.18110\n"); fprintf(fout,"C4 C 0.59520\n"); fprintf(fout,"O4 O -0.57610\n"); fprintf(fout,"N3 NA -0.35490\n"); fprintf(fout,"H3 H 0.31540\n"); fprintf(fout,"C2 C 0.46870\n"); fprintf(fout,"O O -0.54770\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OH -0.65410\n"); fprintf(fout,"H3T HO 0.43760\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DG5 Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.03580\n"); fprintf(fout,"H1' H2 0.17460\n"); fprintf(fout,"N9 N* 0.05770\n"); fprintf(fout,"C8 CK 0.07360\n"); fprintf(fout,"H8 H5 0.19970\n"); fprintf(fout,"N7 NB -0.57250\n"); fprintf(fout,"C5 CB 0.19910\n"); fprintf(fout,"C6 C 0.49180\n"); fprintf(fout,"O6 O -0.56990\n"); fprintf(fout,"N1 NA -0.50530\n"); fprintf(fout,"H1 H 0.35200\n"); fprintf(fout,"C2 CA 0.74320\n"); fprintf(fout,"N2 N2 -0.92300\n"); fprintf(fout,"H21 H 0.42350\n"); fprintf(fout,"H22 H 0.42350\n"); fprintf(fout,"N3 NC -0.66360\n"); fprintf(fout,"C4 CB 0.18140\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OS -0.52320\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DG Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.03580\n"); fprintf(fout,"H1' H2 0.17460\n"); fprintf(fout,"N9 N* 0.05770\n"); fprintf(fout,"C8 CK 0.07360\n"); fprintf(fout,"H8 H5 0.19970\n"); fprintf(fout,"N7 NB -0.57250\n"); fprintf(fout,"C5 CB 0.19910\n"); fprintf(fout,"C6 C 0.49180\n"); fprintf(fout,"O6 O -0.56990\n"); fprintf(fout,"N1 NA -0.50530\n"); fprintf(fout,"H1 H 0.35200\n"); fprintf(fout,"C2 CA 0.74320\n"); fprintf(fout,"N2 N2 -0.92300\n"); fprintf(fout,"H21 H 0.42350\n"); fprintf(fout,"H22 H 0.42350\n"); fprintf(fout,"N3 NC -0.66360\n"); fprintf(fout,"C4 CB 0.18140\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OS -0.52320\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DG3 Residue\n"); fprintf(fout,"P P 1.16590\n"); fprintf(fout,"O1P O2 -0.77610\n"); fprintf(fout,"O2P O2 -0.77610\n"); fprintf(fout,"O5' OS -0.49540\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.03580\n"); fprintf(fout,"H1' H2 0.17460\n"); fprintf(fout,"N9 N* 0.05770\n"); fprintf(fout,"C8 CK 0.07360\n"); fprintf(fout,"H8 H5 0.19970\n"); fprintf(fout,"N7 NB -0.57250\n"); fprintf(fout,"C5 CB 0.19910\n"); fprintf(fout,"C6 C 0.49180\n"); fprintf(fout,"O6 O -0.56990\n"); fprintf(fout,"N1 NA -0.50530\n"); fprintf(fout,"H1 H 0.35200\n"); fprintf(fout,"C2 CA 0.74320\n"); fprintf(fout,"N2 N2 -0.92300\n"); fprintf(fout,"H21 H 0.42350\n"); fprintf(fout,"H22 H 0.42350\n"); fprintf(fout,"N3 NC -0.66360\n"); fprintf(fout,"C4 CB 0.18140\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OH -0.65490\n"); fprintf(fout,"H3T HO 0.43960\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DGN Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.03580\n"); fprintf(fout,"H1' H2 0.17460\n"); fprintf(fout,"N9 N* 0.05770\n"); fprintf(fout,"C8 CK 0.07360\n"); fprintf(fout,"H8 H5 0.19970\n"); fprintf(fout,"N7 NB -0.57250\n"); fprintf(fout,"C5 CB 0.19910\n"); fprintf(fout,"C6 C 0.49180\n"); fprintf(fout,"O6 O -0.56990\n"); fprintf(fout,"N1 NA -0.50530\n"); fprintf(fout,"H1 H 0.35200\n"); fprintf(fout,"C2 CA 0.74320\n"); fprintf(fout,"N2 N2 -0.92300\n"); fprintf(fout,"H21 H 0.42350\n"); fprintf(fout,"H22 H 0.42350\n"); fprintf(fout,"N3 NC -0.66360\n"); fprintf(fout,"C4 CB 0.18140\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OH -0.65490\n"); fprintf(fout,"H3T HO 0.43960\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RG5 Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.01910\n"); fprintf(fout,"H1' H2 0.20060\n"); fprintf(fout,"N9 N* 0.04920\n"); fprintf(fout,"C8 CK 0.13740\n"); fprintf(fout,"H8 H5 0.16400\n"); fprintf(fout,"N7 NB -0.57090\n"); fprintf(fout,"C5 CB 0.17440\n"); fprintf(fout,"C6 C 0.47700\n"); fprintf(fout,"O6 O -0.55970\n"); fprintf(fout,"N1 NA -0.47870\n"); fprintf(fout,"H1 H 0.34240\n"); fprintf(fout,"C2 CA 0.76570\n"); fprintf(fout,"N2 N2 -0.96720\n"); fprintf(fout,"H21 H 0.43640\n"); fprintf(fout,"H22 H 0.43640\n"); fprintf(fout,"N3 NC -0.63230\n"); fprintf(fout,"C4 CB 0.12220\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OS -0.52460\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RG Residue\n"); fprintf(fout,"N N -0.34790\n"); fprintf(fout,"H H 0.27470\n"); fprintf(fout,"CA CT -0.26370\n"); fprintf(fout,"HA H1 0.15600\n"); fprintf(fout,"CB CT -0.00070\n"); fprintf(fout,"HB1 HC 0.03270\n"); fprintf(fout,"HB2 HC 0.03270\n"); fprintf(fout,"CG CT 0.03900\n"); fprintf(fout,"HG1 HC 0.02850\n"); fprintf(fout,"HG2 HC 0.02850\n"); fprintf(fout,"CD CT 0.04860\n"); fprintf(fout,"HD1 H1 0.06870\n"); fprintf(fout,"HD2 H1 0.06870\n"); fprintf(fout,"NE N2 -0.52950\n"); fprintf(fout,"HE H 0.34560\n"); fprintf(fout,"CZ CA 0.80760\n"); fprintf(fout,"NH1 N2 -0.86270\n"); fprintf(fout,"HH11 H 0.44780\n"); fprintf(fout,"HH12 H 0.44780\n"); fprintf(fout,"NH2 N2 -0.86270\n"); fprintf(fout,"HH21 H 0.44780\n"); fprintf(fout,"HH22 H 0.44780\n"); fprintf(fout,"C C 0.73410\n"); fprintf(fout,"O O -0.58940\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RG3 Residue\n"); fprintf(fout,"P P 1.16620\n"); fprintf(fout,"O1P O2 -0.77600\n"); fprintf(fout,"O2P O2 -0.77600\n"); fprintf(fout,"O5' OS -0.49890\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.01910\n"); fprintf(fout,"H1' H2 0.20060\n"); fprintf(fout,"N9 N* 0.04920\n"); fprintf(fout,"C8 CK 0.13740\n"); fprintf(fout,"H8 H5 0.16400\n"); fprintf(fout,"N7 NB -0.57090\n"); fprintf(fout,"C5 CB 0.17440\n"); fprintf(fout,"C6 C 0.47700\n"); fprintf(fout,"O6 O -0.55970\n"); fprintf(fout,"N1 NA -0.47870\n"); fprintf(fout,"H1 H 0.34240\n"); fprintf(fout,"C2 CA 0.76570\n"); fprintf(fout,"N2 N2 -0.96720\n"); fprintf(fout,"H21 H 0.43640\n"); fprintf(fout,"H22 H 0.43640\n"); fprintf(fout,"N3 NC -0.63230\n"); fprintf(fout,"C4 CB 0.12220\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OH -0.65410\n"); fprintf(fout,"H3T HO 0.43760\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RGN Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.01910\n"); fprintf(fout,"H1' H2 0.20060\n"); fprintf(fout,"N9 N* 0.04920\n"); fprintf(fout,"C8 CK 0.13740\n"); fprintf(fout,"H8 H5 0.16400\n"); fprintf(fout,"N7 NB -0.57090\n"); fprintf(fout,"C5 CB 0.17440\n"); fprintf(fout,"C6 C 0.47700\n"); fprintf(fout,"O6 O -0.55970\n"); fprintf(fout,"N1 NA -0.47870\n"); fprintf(fout,"H1 H 0.34240\n"); fprintf(fout,"C2 CA 0.76570\n"); fprintf(fout,"N2 N2 -0.96720\n"); fprintf(fout,"H21 H 0.43640\n"); fprintf(fout,"H22 H 0.43640\n"); fprintf(fout,"N3 NC -0.63230\n"); fprintf(fout,"C4 CB 0.12220\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OH -0.65410\n"); fprintf(fout,"H3T HO 0.43760\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DC5 Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT -0.01160\n"); fprintf(fout,"H1' H2 0.19630\n"); fprintf(fout,"N1 N* -0.03390\n"); fprintf(fout,"C6 CM -0.01830\n"); fprintf(fout,"H6 H4 0.22930\n"); fprintf(fout,"C5 CM -0.52220\n"); fprintf(fout,"H5 HA 0.18630\n"); fprintf(fout,"C4 CA 0.84390\n"); fprintf(fout,"N4 N2 -0.97730\n"); fprintf(fout,"H41 H 0.43140\n"); fprintf(fout,"H42 H 0.43140\n"); fprintf(fout,"N3 NC -0.77480\n"); fprintf(fout,"C2 C 0.79590\n"); fprintf(fout,"O O -0.65480\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OS -0.52320\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DC Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT -0.01160\n"); fprintf(fout,"H1' H2 0.19630\n"); fprintf(fout,"N1 N* -0.03390\n"); fprintf(fout,"C6 CM -0.01830\n"); fprintf(fout,"H6 H4 0.22930\n"); fprintf(fout,"C5 CM -0.52220\n"); fprintf(fout,"H5 HA 0.18630\n"); fprintf(fout,"C4 CA 0.84390\n"); fprintf(fout,"N4 N2 -0.97730\n"); fprintf(fout,"H41 H 0.43140\n"); fprintf(fout,"H42 H 0.43140\n"); fprintf(fout,"N3 NC -0.77480\n"); fprintf(fout,"C2 C 0.79590\n"); fprintf(fout,"O O -0.65480\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OS -0.52320\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DC3 Residue\n"); fprintf(fout,"P P 1.16590\n"); fprintf(fout,"O1P O2 -0.77610\n"); fprintf(fout,"O2P O2 -0.77610\n"); fprintf(fout,"O5' OS -0.49540\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT -0.01160\n"); fprintf(fout,"H1' H2 0.19630\n"); fprintf(fout,"N1 N* -0.03390\n"); fprintf(fout,"C6 CM -0.01830\n"); fprintf(fout,"H6 H4 0.22930\n"); fprintf(fout,"C5 CM -0.52220\n"); fprintf(fout,"H5 HA 0.18630\n"); fprintf(fout,"C4 CA 0.84390\n"); fprintf(fout,"N4 N2 -0.97730\n"); fprintf(fout,"H41 H 0.43140\n"); fprintf(fout,"H42 H 0.43140\n"); fprintf(fout,"N3 NC -0.77480\n"); fprintf(fout,"C2 C 0.79590\n"); fprintf(fout,"O O -0.65480\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OH -0.65490\n"); fprintf(fout,"H3T HO 0.43960\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DCN Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT -0.01160\n"); fprintf(fout,"H1' H2 0.19630\n"); fprintf(fout,"N1 N* -0.03390\n"); fprintf(fout,"C6 CM -0.01830\n"); fprintf(fout,"H6 H4 0.22930\n"); fprintf(fout,"C5 CM -0.52220\n"); fprintf(fout,"H5 HA 0.18630\n"); fprintf(fout,"C4 CA 0.84390\n"); fprintf(fout,"N4 N2 -0.97730\n"); fprintf(fout,"H41 H 0.43140\n"); fprintf(fout,"H42 H 0.43140\n"); fprintf(fout,"N3 NC -0.77480\n"); fprintf(fout,"C2 C 0.79590\n"); fprintf(fout,"O O -0.65480\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OH -0.65490\n"); fprintf(fout,"H3T HO 0.43960\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RC5 Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.00660\n"); fprintf(fout,"H1' H2 0.20290\n"); fprintf(fout,"N1 N* -0.04840\n"); fprintf(fout,"C6 CM 0.00530\n"); fprintf(fout,"H6 H4 0.19580\n"); fprintf(fout,"C5 CM -0.52150\n"); fprintf(fout,"H5 HA 0.19280\n"); fprintf(fout,"C4 CA 0.81850\n"); fprintf(fout,"N4 N2 -0.95300\n"); fprintf(fout,"H41 H 0.42340\n"); fprintf(fout,"H42 H 0.42340\n"); fprintf(fout,"N3 NC -0.75840\n"); fprintf(fout,"C2 C 0.75380\n"); fprintf(fout,"O O -0.62520\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OS -0.52460\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RC Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.00660\n"); fprintf(fout,"H1' H2 0.20290\n"); fprintf(fout,"N1 N* -0.04840\n"); fprintf(fout,"C6 CM 0.00530\n"); fprintf(fout,"H6 H4 0.19580\n"); fprintf(fout,"C5 CM -0.52150\n"); fprintf(fout,"H5 HA 0.19280\n"); fprintf(fout,"C4 CA 0.81850\n"); fprintf(fout,"N4 N2 -0.95300\n"); fprintf(fout,"H41 H 0.42340\n"); fprintf(fout,"H42 H 0.42340\n"); fprintf(fout,"N3 NC -0.75840\n"); fprintf(fout,"C2 C 0.75380\n"); fprintf(fout,"O O -0.62520\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OS -0.52460\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RC3 Residue\n"); fprintf(fout,"P P 1.16620\n"); fprintf(fout,"O1P O2 -0.77600\n"); fprintf(fout,"O2P O2 -0.77600\n"); fprintf(fout,"O5' OS -0.49890\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.00660\n"); fprintf(fout,"H1' H2 0.20290\n"); fprintf(fout,"N1 N* -0.04840\n"); fprintf(fout,"C6 CM 0.00530\n"); fprintf(fout,"H6 H4 0.19580\n"); fprintf(fout,"C5 CM -0.52150\n"); fprintf(fout,"H5 HA 0.19280\n"); fprintf(fout,"C4 CA 0.81850\n"); fprintf(fout,"N4 N2 -0.95300\n"); fprintf(fout,"H41 H 0.42340\n"); fprintf(fout,"H42 H 0.42340\n"); fprintf(fout,"N3 NC -0.75840\n"); fprintf(fout,"C2 C 0.75380\n"); fprintf(fout,"O O -0.62520\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OH -0.65410\n"); fprintf(fout,"H3T HO 0.43760\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RCN Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.00660\n"); fprintf(fout,"H1' H2 0.20290\n"); fprintf(fout,"N1 N* -0.04840\n"); fprintf(fout,"C6 CM 0.00530\n"); fprintf(fout,"H6 H4 0.19580\n"); fprintf(fout,"C5 CM -0.52150\n"); fprintf(fout,"H5 HA 0.19280\n"); fprintf(fout,"C4 CA 0.81850\n"); fprintf(fout,"N4 N2 -0.95300\n"); fprintf(fout,"H41 H 0.42340\n"); fprintf(fout,"H42 H 0.42340\n"); fprintf(fout,"N3 NC -0.75840\n"); fprintf(fout,"C2 C 0.75380\n"); fprintf(fout,"O O -0.62520\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OH -0.65410\n"); fprintf(fout,"H3T HO 0.43760\n"); fprintf(fout,"Begin 1MA Residue\n"); fprintf(fout,"P P 1.072000\n"); fprintf(fout,"O1P O2 -0.755200\n"); fprintf(fout,"O2P O2 -0.755200\n"); fprintf(fout,"O5' OS -0.408500\n"); fprintf(fout,"C5' CT 0.055600\n"); fprintf(fout,"H5'1 H1 0.060200\n"); fprintf(fout,"H5'2 H1 0.060200\n"); fprintf(fout,"C4' CT 0.021900\n"); fprintf(fout,"H4' H1 0.105500\n"); fprintf(fout,"O4' OS -0.259900\n"); fprintf(fout,"C1' CT 0.083400\n"); fprintf(fout,"H1' H2 0.115000\n"); fprintf(fout,"N9 N* -0.169200\n"); fprintf(fout,"C8 CK 0.215300\n"); fprintf(fout,"H8 H5 0.145100\n"); fprintf(fout,"N7 NB -0.543600\n"); fprintf(fout,"C5 CB -0.047500\n"); fprintf(fout,"C6 CA 0.603800\n"); fprintf(fout,"N6 N2 -0.713600\n"); fprintf(fout,"H61 H 0.355800\n"); fprintf(fout,"H62 H 0.355800\n"); fprintf(fout,"N1 NC -0.731300\n"); fprintf(fout,"C1 C 0.560800\n"); fprintf(fout,"H11 H 0.420500\n"); fprintf(fout,"H12 H 0.420500\n"); fprintf(fout,"H13 H 0.420500\n"); fprintf(fout,"1H1 H 0.420500\n"); fprintf(fout,"2H1 H 0.420500\n"); fprintf(fout,"3H1 H 0.420500\n"); fprintf(fout,"C2 CQ 0.572600\n"); fprintf(fout,"H2 H5 0.011900\n"); fprintf(fout,"N3 NC -0.764900\n"); fprintf(fout,"C4 CB 0.549900\n"); fprintf(fout,"C3' CT 0.164500\n"); fprintf(fout,"H3' H1 0.062300\n"); fprintf(fout,"C2' CT -0.056100\n"); fprintf(fout,"H2'1 HC 0.048600\n"); fprintf(fout,"H2'2 HC 0.048600\n"); fprintf(fout,"O3' OS -0.499800\n"); fprintf(fout,"H2' H1 0.103300\n"); fprintf(fout,"O2' OH -0.496300\n"); fprintf(fout,"HO'2 HO 0.372000\n"); fprintf(fout,"HO2 HO 0.372000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin 1MG Residue\n"); fprintf(fout,"P P 1.072000\n"); fprintf(fout,"O1P O2 -0.755200\n"); fprintf(fout,"O2P O2 -0.755200\n"); fprintf(fout,"O5' OS -0.408500\n"); fprintf(fout,"C5' CT 0.055600\n"); fprintf(fout,"H5'1 H1 0.060200\n"); fprintf(fout,"H5'2 H1 0.060200\n"); fprintf(fout,"C4' CT 0.021900\n"); fprintf(fout,"H4' H1 0.105500\n"); fprintf(fout,"O4' OS -0.259900\n"); fprintf(fout,"C1' CT 0.083400\n"); fprintf(fout,"H1' H2 0.115000\n"); fprintf(fout,"N9 N* -0.169200\n"); fprintf(fout,"C8 CK 0.215300\n"); fprintf(fout,"H8 H5 0.145100\n"); fprintf(fout,"N7 NB -0.543600\n"); fprintf(fout,"C5 CB -0.047500\n"); fprintf(fout,"C6 CA 0.603800\n"); fprintf(fout,"N6 N2 -0.713600\n"); fprintf(fout,"H61 H 0.355800\n"); fprintf(fout,"H62 H 0.355800\n"); fprintf(fout,"O6 O -0.530100\n"); fprintf(fout,"N1 NC -0.731300\n"); fprintf(fout,"C1A CC 0.0300000\n"); fprintf(fout,"H11 H 0.420500\n"); fprintf(fout,"H12 H 0.420500\n"); fprintf(fout,"H13 H 0.420500\n"); fprintf(fout,"1H1 H 0.420500\n"); fprintf(fout,"2H1 H 0.420500\n"); fprintf(fout,"3H1 H 0.420500\n"); fprintf(fout,"C2 CQ 0.572600\n"); fprintf(fout,"N2 N2 -0.750800\n"); fprintf(fout,"H21 H 0.344300\n"); fprintf(fout,"H22 H 0.344300\n"); fprintf(fout,"N3 NC -0.650200\n"); fprintf(fout,"C4 CB 0.290900\n"); fprintf(fout,"C3' CT 0.164500\n"); fprintf(fout,"H3' H1 0.062300\n"); fprintf(fout,"C2' CT -0.056100\n"); fprintf(fout,"H2'1 HC 0.048600\n"); fprintf(fout,"H2'2 HC 0.048600\n"); fprintf(fout,"H2' H1 0.103300\n"); fprintf(fout,"O2' OH -0.496300\n"); fprintf(fout,"HO'2 HO 0.372000\n"); fprintf(fout,"HO2 HO 0.372000\n"); fprintf(fout,"O3' OS -0.499800\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin 2MG Residue\n"); fprintf(fout,"P P 1.072000\n"); fprintf(fout,"O1P O2 -0.755200\n"); fprintf(fout,"O2P O2 -0.755200\n"); fprintf(fout,"O5' OS -0.408500\n"); fprintf(fout,"C5' CT 0.055600\n"); fprintf(fout,"H5'1 H1 0.060200\n"); fprintf(fout,"H5'2 H1 0.060200\n"); fprintf(fout,"C4' CT 0.021900\n"); fprintf(fout,"H4' H1 0.105500\n"); fprintf(fout,"O4' OS -0.259900\n"); fprintf(fout,"C1' CT 0.083400\n"); fprintf(fout,"H1' H2 0.115000\n"); fprintf(fout,"N9 N* -0.169200\n"); fprintf(fout,"C8 CK 0.215300\n"); fprintf(fout,"H8 H5 0.145100\n"); fprintf(fout,"N7 NB -0.543600\n"); fprintf(fout,"C5 CB -0.047500\n"); fprintf(fout,"C6 CA 0.603800\n"); fprintf(fout,"O6 O -0.530100\n"); fprintf(fout,"N1 NC -0.731300\n"); fprintf(fout,"H1 H 0.420500\n"); fprintf(fout,"C2 CQ 0.572600\n"); fprintf(fout,"N2 N2 -0.750800\n"); fprintf(fout,"H2 H 0.344300\n"); fprintf(fout,"C2A CB -0.020000\n"); fprintf(fout,"H2A1 HC 0.080300\n"); fprintf(fout,"H2A2 HC 0.080300\n"); fprintf(fout,"H2A3 HC 0.080300\n"); fprintf(fout,"N3 NC -0.650200\n"); fprintf(fout,"C4 CB 0.290900\n"); fprintf(fout,"C3' CT 0.164500\n"); fprintf(fout,"H3' H1 0.062300\n"); fprintf(fout,"C2' CT -0.056100\n"); fprintf(fout,"H2' H1 0.103300\n"); fprintf(fout,"O2' OH -0.496300\n"); fprintf(fout,"HO'2 HO 0.372000\n"); fprintf(fout,"HO2 HO 0.372000\n"); fprintf(fout,"O3' OS -0.499800\n"); fprintf(fout,"H2'1 HC 0.048600\n"); fprintf(fout,"H2'2 HC 0.048600\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin 5MC Residue\n"); fprintf(fout,"P P 1.072000\n"); fprintf(fout,"O1P O2 -0.755200\n"); fprintf(fout,"O2P O2 -0.755200\n"); fprintf(fout,"O5' OS -0.408500\n"); fprintf(fout,"C5' CT 0.055600\n"); fprintf(fout,"H5'1 H1 0.060200\n"); fprintf(fout,"H5'2 H1 0.060200\n"); fprintf(fout,"C4' CT 0.021900\n"); fprintf(fout,"H4' H1 0.105500\n"); fprintf(fout,"O4' OS -0.259900\n"); fprintf(fout,"C1' CT 0.083400\n"); fprintf(fout,"H1' H2 0.115000\n"); fprintf(fout,"N1 NC -0.731300\n"); fprintf(fout,"C6 CM -0.011500\n"); fprintf(fout,"H6 H4 0.209900\n"); fprintf(fout,"C5 CM -0.469600\n"); fprintf(fout,"C5A CM -0.469600\n"); fprintf(fout,"H5A1 HA 0.183300\n"); fprintf(fout,"H5A2 HA 0.183300\n"); fprintf(fout,"H5A3 HA 0.183300\n"); fprintf(fout,"C4 CA 0.701000\n"); fprintf(fout,"N4 N2 -0.741700\n"); fprintf(fout,"H41 H 0.352600\n"); fprintf(fout,"H42 H 0.352600\n"); fprintf(fout,"N3 NC -0.755500\n"); fprintf(fout,"C2 C 0.846400\n"); fprintf(fout,"O2 O -0.652400\n"); fprintf(fout,"C3' CT 0.164500\n"); fprintf(fout,"H3' H1 0.062300\n"); fprintf(fout,"C2' CT -0.056100\n"); fprintf(fout,"H2' H1 0.103300\n"); fprintf(fout,"O2' OH -0.496300\n"); fprintf(fout,"HO'2 HO 0.372000\n"); fprintf(fout,"HO2 HO 0.372000\n"); fprintf(fout,"H2'1 HC 0.048600\n"); fprintf(fout,"H2'2 HC 0.048600\n"); fprintf(fout,"O3' OS -0.499800\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin 5MU Residue\n"); fprintf(fout,"P P 1.072000\n"); fprintf(fout,"O1P O2 -0.755200\n"); fprintf(fout,"O2P O2 -0.755200\n"); fprintf(fout,"O5' OS -0.408500\n"); fprintf(fout,"C5' CT 0.055600\n"); fprintf(fout,"H5'1 H1 0.060200\n"); fprintf(fout,"H5'2 H1 0.060200\n"); fprintf(fout,"C4' CT 0.021900\n"); fprintf(fout,"H4' H1 0.105500\n"); fprintf(fout,"O4' OS -0.259900\n"); fprintf(fout,"C1' CT 0.083400\n"); fprintf(fout,"H1' H2 0.115000\n"); fprintf(fout,"N1 NC -0.731300\n"); fprintf(fout,"C6 CM -0.011500\n"); fprintf(fout,"H6 H4 0.209900\n"); fprintf(fout,"C5 CM -0.469600\n"); fprintf(fout,"C5A CM -0.469600\n"); fprintf(fout,"H5A1 HA 0.183300\n"); fprintf(fout,"H5A2 HA 0.183300\n"); fprintf(fout,"H5A3 HA 0.183300\n"); fprintf(fout,"C4 CA 0.701000\n"); fprintf(fout,"O4 O -0.545500\n"); fprintf(fout,"N3 NA -0.482400\n"); fprintf(fout,"H3 H 0.354200\n"); fprintf(fout,"C2 C 0.589200\n"); fprintf(fout,"O2 O -0.588000\n"); fprintf(fout,"C3' CT 0.164500\n"); fprintf(fout,"H3' H1 0.062300\n"); fprintf(fout,"C2' CT -0.056100\n"); fprintf(fout,"H2' H1 0.103300\n"); fprintf(fout,"O2' OH -0.496300\n"); fprintf(fout,"HO'2 HO 0.372000\n"); fprintf(fout,"HO2 HO 0.372000\n"); fprintf(fout,"H2'1 HC 0.048600\n"); fprintf(fout,"H2'2 HC 0.048600\n"); fprintf(fout,"O3' OS -0.499800\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin 7MG Residue\n"); fprintf(fout,"P P 1.072000\n"); fprintf(fout,"O1P O2 -0.755200\n"); fprintf(fout,"O2P O2 -0.755200\n"); fprintf(fout,"O5' OS -0.408500\n"); fprintf(fout,"C5' CT 0.055600\n"); fprintf(fout,"H5'1 H1 0.060200\n"); fprintf(fout,"H5'2 H1 0.060200\n"); fprintf(fout,"C4' CT 0.021900\n"); fprintf(fout,"H4' H1 0.105500\n"); fprintf(fout,"O4' OS -0.259900\n"); fprintf(fout,"C1' CT 0.083400\n"); fprintf(fout,"H1' H2 0.115000\n"); fprintf(fout,"N9 N* -0.169200\n"); fprintf(fout,"C8 CK 0.215300\n"); fprintf(fout,"H8 H5 0.145100\n"); fprintf(fout,"N7 NB -0.543600\n"); fprintf(fout,"C7 CT -0.132600\n"); fprintf(fout,"H71 HC 0.060600\n"); fprintf(fout,"H72 HC 0.060600\n"); fprintf(fout,"H73 HC 0.060600\n"); fprintf(fout,"C5 CB -0.047500\n"); fprintf(fout,"C6 CA 0.603800\n"); fprintf(fout,"O6 O -0.530100\n"); fprintf(fout,"N1 NA -0.540500\n"); fprintf(fout,"H1 H 0.375000\n"); fprintf(fout,"C2 CA 0.683400\n"); fprintf(fout,"N2 N2 -0.750800\n"); fprintf(fout,"H21 H 0.344300\n"); fprintf(fout,"H22 H 0.344300\n"); fprintf(fout,"N3 NC -0.650200\n"); fprintf(fout,"C4 CB 0.290900\n"); fprintf(fout,"C3' CT 0.164500\n"); fprintf(fout,"H3' H1 0.062300\n"); fprintf(fout,"C2' CT -0.056100\n"); fprintf(fout,"H2'1 HC 0.048600\n"); fprintf(fout,"H2'2 HC 0.048600\n"); fprintf(fout,"O3' OS -0.499800\n"); fprintf(fout,"H2' H1 0.103300\n"); fprintf(fout,"O2' OH -0.496300\n"); fprintf(fout,"HO'2 HO 0.372000\n"); fprintf(fout,"HO2 HO 0.372000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin H2U Residue\n"); fprintf(fout,"P P 1.072000\n"); fprintf(fout,"O1P O2 -0.755200\n"); fprintf(fout,"O2P O2 -0.755200\n"); fprintf(fout,"O5' OS -0.408500\n"); fprintf(fout,"C5' CT 0.055600\n"); fprintf(fout,"H5'1 H1 0.060200\n"); fprintf(fout,"H5'2 H1 0.060200\n"); fprintf(fout,"C4' CT 0.021900\n"); fprintf(fout,"H4' H1 0.105500\n"); fprintf(fout,"O4' OS -0.259900\n"); fprintf(fout,"C1' CT 0.083400\n"); fprintf(fout,"H1' H2 0.115000\n"); fprintf(fout,"C3' CT 0.164500\n"); fprintf(fout,"H3' H1 0.062300\n"); fprintf(fout,"C2' CT -0.056100\n"); fprintf(fout,"H2' H1 0.103300\n"); fprintf(fout,"O2' OH -0.496300\n"); fprintf(fout,"HO'2 HO 0.372000\n"); fprintf(fout,"HO2 HO 0.372000\n"); fprintf(fout,"O3' OS -0.499800\n"); fprintf(fout,"N1 NC -0.731300\n"); fprintf(fout,"C6 CM -0.011500\n"); fprintf(fout,"H61 H 0.355800\n"); fprintf(fout,"H62 H 0.355800\n"); fprintf(fout,"C5 CB -0.047500\n"); fprintf(fout,"H51 H 0.355800\n"); fprintf(fout,"H52 H 0.355800\n"); fprintf(fout,"C4 C 0.572800\n"); fprintf(fout,"O4 O -0.552800\n"); fprintf(fout,"N3 NA -0.340900\n"); fprintf(fout,"H3 H 0.307700\n"); fprintf(fout,"C2 C 0.462500\n"); fprintf(fout,"O2 O -0.559700\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin I Residue\n"); fprintf(fout,"P P 1.072000\n"); fprintf(fout,"O1P O2 -0.755200\n"); fprintf(fout,"O2P O2 -0.755200\n"); fprintf(fout,"O5' OS -0.408500\n"); fprintf(fout,"C5' CT 0.055600\n"); fprintf(fout,"H5'1 H1 0.060200\n"); fprintf(fout,"H5'2 H1 0.060200\n"); fprintf(fout,"C4' CT 0.021900\n"); fprintf(fout,"H4' H1 0.105500\n"); fprintf(fout,"O4' OS -0.259900\n"); fprintf(fout,"C1' CT 0.083400\n"); fprintf(fout,"H1' H2 0.115000\n"); fprintf(fout,"N9 N* -0.169200\n"); fprintf(fout,"C8 CK 0.215300\n"); fprintf(fout,"H8 H5 0.145100\n"); fprintf(fout,"N7 NB -0.543600\n"); fprintf(fout,"C5 CB -0.047500\n"); fprintf(fout,"C6 CA 0.603800\n"); fprintf(fout,"O6 O -0.530100\n"); fprintf(fout,"N1 NA -0.540500\n"); fprintf(fout,"H1 H 0.375000\n"); fprintf(fout,"C2 CA 0.683400\n"); fprintf(fout,"N3 NC -0.764900\n"); fprintf(fout,"C4 CB 0.549900\n"); fprintf(fout,"C3' CT 0.164500\n"); fprintf(fout,"H3' H1 0.062300\n"); fprintf(fout,"C2' CT -0.056100\n"); fprintf(fout,"H2' H1 0.103300\n"); fprintf(fout,"O2' OH -0.496300\n"); fprintf(fout,"HO'2 HO 0.372000\n"); fprintf(fout,"HO2 HO 0.372000\n"); fprintf(fout,"H2'1 HC 0.048600\n"); fprintf(fout,"H2'2 HC 0.048600\n"); fprintf(fout,"O3' OS -0.499800\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin M2G Residue\n"); fprintf(fout,"P P 1.072000\n"); fprintf(fout,"O1P O2 -0.755200\n"); fprintf(fout,"O2P O2 -0.755200\n"); fprintf(fout,"O5' OS -0.408500\n"); fprintf(fout,"C5' CT 0.055600\n"); fprintf(fout,"H5'1 H1 0.060200\n"); fprintf(fout,"H5'2 H1 0.060200\n"); fprintf(fout,"C4' CT 0.021900\n"); fprintf(fout,"H4' H1 0.105500\n"); fprintf(fout,"O4' OS -0.259900\n"); fprintf(fout,"C1' CT 0.083400\n"); fprintf(fout,"H1' H2 0.115000\n"); fprintf(fout,"N9 N* -0.169200\n"); fprintf(fout,"C8 CK 0.215300\n"); fprintf(fout,"H8 H5 0.145100\n"); fprintf(fout,"N7 NB -0.543600\n"); fprintf(fout,"C5 CB -0.047500\n"); fprintf(fout,"C6 CA 0.603800\n"); fprintf(fout,"O6 O -0.530100\n"); fprintf(fout,"N1 NA -0.540500\n"); fprintf(fout,"H1 H 0.375000\n"); fprintf(fout,"C2 CA 0.683400\n"); fprintf(fout,"N2 N2 -0.750800\n"); fprintf(fout,"C2A CB -0.020000\n"); fprintf(fout,"H2A1 HC 0.080300\n"); fprintf(fout,"H2A2 HC 0.080300\n"); fprintf(fout,"H2A3 HC 0.080300\n"); fprintf(fout,"C2B CB -0.020000\n"); fprintf(fout,"H2B1 HC 0.080300\n"); fprintf(fout,"H2B2 HC 0.080300\n"); fprintf(fout,"H2B3 HC 0.080300\n"); fprintf(fout,"N3 NC -0.650200\n"); fprintf(fout,"C4 CB 0.290900\n"); fprintf(fout,"C3' CT 0.164500\n"); fprintf(fout,"H3' H1 0.062300\n"); fprintf(fout,"C2' CT -0.056100\n"); fprintf(fout,"H2' H1 0.103300\n"); fprintf(fout,"O2' OH -0.496300\n"); fprintf(fout,"HO'2 HO 0.372000\n"); fprintf(fout,"HO2 HO 0.372000\n"); fprintf(fout,"O3' OS -0.499800\n"); fprintf(fout,"H2'1 HC 0.048600\n"); fprintf(fout,"H2'2 HC 0.048600\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OMC Residue\n"); fprintf(fout,"P P 1.072000\n"); fprintf(fout,"O1P O2 -0.755200\n"); fprintf(fout,"O2P O2 -0.755200\n"); fprintf(fout,"O5' OS -0.408500\n"); fprintf(fout,"C5' CT 0.055600\n"); fprintf(fout,"H5'1 H1 0.060200\n"); fprintf(fout,"H5'2 H1 0.060200\n"); fprintf(fout,"C4' CT 0.021900\n"); fprintf(fout,"H4' H1 0.105500\n"); fprintf(fout,"O4' OS -0.259900\n"); fprintf(fout,"C1' CT 0.083400\n"); fprintf(fout,"H1' H2 0.115000\n"); fprintf(fout,"N1 N* -0.131800\n"); fprintf(fout,"C6 CM -0.011500\n"); fprintf(fout,"H6 H4 0.209900\n"); fprintf(fout,"C5 CM -0.469600\n"); fprintf(fout,"H5 HA 0.183300\n"); fprintf(fout,"C4 CA 0.701000\n"); fprintf(fout,"N4 N2 -0.741700\n"); fprintf(fout,"H41 H 0.352600\n"); fprintf(fout,"H42 H 0.352600\n"); fprintf(fout,"N3 NC -0.755500\n"); fprintf(fout,"C2 CQ 0.572600\n"); fprintf(fout,"O2 O -0.652400\n"); fprintf(fout,"H3' H1 0.062300\n"); fprintf(fout,"C2' CT -0.056100\n"); fprintf(fout,"H2' H1 0.103300\n"); fprintf(fout,"O2' OH -0.496300\n"); fprintf(fout,"C2A CB -0.020000\n"); fprintf(fout,"H2A1 HC 0.080300\n"); fprintf(fout,"H2A2 HC 0.080300\n"); fprintf(fout,"H2A3 HC 0.080300\n"); fprintf(fout,"C3' CT 0.164500\n"); fprintf(fout,"O3' OS -0.499800\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin OMG Residue\n"); fprintf(fout,"P P 1.072000\n"); fprintf(fout,"O1P O2 -0.755200\n"); fprintf(fout,"O2P O2 -0.755200\n"); fprintf(fout,"O5' OS -0.408500\n"); fprintf(fout,"C5' CT 0.055600\n"); fprintf(fout,"H5'1 H1 0.060200\n"); fprintf(fout,"H5'2 H1 0.060200\n"); fprintf(fout,"C4' CT 0.021900\n"); fprintf(fout,"H4' H1 0.105500\n"); fprintf(fout,"O4' OS -0.259900\n"); fprintf(fout,"C1' CT 0.083400\n"); fprintf(fout,"H1' H2 0.115000\n"); fprintf(fout,"N9 N* -0.169200\n"); fprintf(fout,"C8 CK 0.215300\n"); fprintf(fout,"H8 H5 0.145100\n"); fprintf(fout,"N7 NB -0.543600\n"); fprintf(fout,"C5 CB -0.047500\n"); fprintf(fout,"C6 CA 0.603800\n"); fprintf(fout,"O6 O -0.530100\n"); fprintf(fout,"N1 NA -0.540500\n"); fprintf(fout,"H1 H 0.375000\n"); fprintf(fout,"C2 CA 0.683400\n"); fprintf(fout,"N2 N2 -0.750800\n"); fprintf(fout,"H21 H 0.344300\n"); fprintf(fout,"H22 H 0.344300\n"); fprintf(fout,"N3 NC -0.650200\n"); fprintf(fout,"C4 CB 0.290900\n"); fprintf(fout,"C3' CT 0.164500\n"); fprintf(fout,"H3' H1 0.062300\n"); fprintf(fout,"C2' CT -0.056100\n"); fprintf(fout,"H2' H1 0.103300\n"); fprintf(fout,"O2' OH -0.496300\n"); fprintf(fout,"C2A CB -0.020000\n"); fprintf(fout,"H2A1 HC 0.080300\n"); fprintf(fout,"H2A2 HC 0.080300\n"); fprintf(fout,"H2A3 HC 0.080300\n"); fprintf(fout,"O3' OS -0.499800\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin PSU Residue\n"); fprintf(fout,"P P 1.072000\n"); fprintf(fout,"O1P O2 -0.755200\n"); fprintf(fout,"O2P O2 -0.755200\n"); fprintf(fout,"O5' OS -0.408500\n"); fprintf(fout,"C5' CT 0.055600\n"); fprintf(fout,"H5'1 H1 0.060200\n"); fprintf(fout,"H5'2 H1 0.060200\n"); fprintf(fout,"C4' CT 0.021900\n"); fprintf(fout,"H4' H1 0.105500\n"); fprintf(fout,"O4' OS -0.259900\n"); fprintf(fout,"C1' CT 0.083400\n"); fprintf(fout,"H1' H2 0.115000\n"); fprintf(fout,"N1 NA -0.540500\n"); fprintf(fout,"H1 H 0.375000\n"); fprintf(fout,"C6 CM -0.011500\n"); fprintf(fout,"H6 H4 0.209900\n"); fprintf(fout,"C5 CM -0.469600\n"); fprintf(fout,"C4 CA 0.701000\n"); fprintf(fout,"O4 O -0.545500\n"); fprintf(fout,"N3 NA -0.482400\n"); fprintf(fout,"H3 H 0.354200\n"); fprintf(fout,"C2 C 0.589200\n"); fprintf(fout,"O2 O -0.588000\n"); fprintf(fout,"C3' CT 0.164500\n"); fprintf(fout,"H3' H1 0.062300\n"); fprintf(fout,"C2' CT -0.056100\n"); fprintf(fout,"H2' H1 0.103300\n"); fprintf(fout,"O2' OH -0.496300\n"); fprintf(fout,"HO'2 HO 0.372000\n"); fprintf(fout,"HO2 HO 0.372000\n"); fprintf(fout,"H2'1 HC 0.048600\n"); fprintf(fout,"H2'2 HC 0.048600\n"); fprintf(fout,"O3' OS -0.499800\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Y Residue\n"); fprintf(fout,"P P 1.072000\n"); fprintf(fout,"O1P O2 -0.755200\n"); fprintf(fout,"O2P O2 -0.755200\n"); fprintf(fout,"O5' OS -0.408500\n"); fprintf(fout,"C5' CT 0.055600\n"); fprintf(fout,"H5'1 H1 0.060200\n"); fprintf(fout,"H5'2 H1 0.060200\n"); fprintf(fout,"C4' CT 0.021900\n"); fprintf(fout,"H4' H1 0.105500\n"); fprintf(fout,"O4' OS -0.259900\n"); fprintf(fout,"C1' CT 0.083400\n"); fprintf(fout,"H1' H2 0.115000\n"); fprintf(fout,"C3' CT 0.164500\n"); fprintf(fout,"H3' H1 0.062300\n"); fprintf(fout,"C2' CT -0.056100\n"); fprintf(fout,"H2' H1 0.103300\n"); fprintf(fout,"O2' OH -0.496300\n"); fprintf(fout,"HO'2 HO 0.372000\n"); fprintf(fout,"HO2 HO 0.372000\n"); fprintf(fout,"O3' OS -0.499800\n"); fprintf(fout,"H2'1 HC 0.048600\n"); fprintf(fout,"H2'2 HC 0.048600\n"); fprintf(fout,"N9 N* -0.169200\n"); fprintf(fout,"C8 CK 0.215300\n"); fprintf(fout,"H8 H5 0.145100\n"); fprintf(fout,"N7 NB -0.543600\n"); fprintf(fout,"H7 HC 0.060600\n"); fprintf(fout,"C5 CB -0.047500\n"); fprintf(fout,"C6 CA 0.603800\n"); fprintf(fout,"O6 O -0.530100\n"); fprintf(fout,"N1 NA -0.540500\n"); fprintf(fout,"C2 CA 0.683400\n"); fprintf(fout,"N2 N2 -0.750800\n"); fprintf(fout,"N3 NC -0.764900\n"); fprintf(fout,"C3 C 0.846400\n"); fprintf(fout,"H31 H 0.354200\n"); fprintf(fout,"H32 H 0.354200\n"); fprintf(fout,"H33 H 0.354200\n"); fprintf(fout,"C4 CB 0.549900\n"); fprintf(fout,"C10 C 0.846400\n"); fprintf(fout,"H101 H 0.375000\n"); fprintf(fout,"H102 H 0.375000\n"); fprintf(fout,"H103 H 0.375000\n"); fprintf(fout,"C11 C 0.846400\n"); fprintf(fout,"C12 C 0.846400\n"); fprintf(fout,"C13 C 0.846400\n"); fprintf(fout,"1C1 C 0.846400\n"); fprintf(fout,"2C1 C 0.846400\n"); fprintf(fout,"3C1 C 0.846400\n"); fprintf(fout,"H131 H 0.375000\n"); fprintf(fout,"H132 H 0.375000\n"); fprintf(fout,"1H13 H 0.375000\n"); fprintf(fout,"2H13 H 0.375000\n"); fprintf(fout,"C14 C 0.846400\n"); fprintf(fout,"H141 H 0.375000\n"); fprintf(fout,"H142 H 0.375000\n"); fprintf(fout,"1H14 H 0.375000\n"); fprintf(fout,"2H14 H 0.375000\n"); fprintf(fout,"C15 C 0.846400\n"); fprintf(fout,"H15 H 0.375000\n"); fprintf(fout,"C16 C 0.846400\n"); fprintf(fout,"O17 O -0.504000\n"); fprintf(fout,"O18 O -0.504000\n"); fprintf(fout,"C19 C 0.846400\n"); fprintf(fout,"H191 H 0.375000\n"); fprintf(fout,"H192 H 0.375000\n"); fprintf(fout,"H193 H 0.375000\n"); fprintf(fout,"1H19 H 0.375000\n"); fprintf(fout,"2H19 H 0.375000\n"); fprintf(fout,"3H19 H 0.375000\n"); fprintf(fout,"N20 N2 -0.750800\n"); fprintf(fout,"C21 CQ 0.572600\n"); fprintf(fout,"H20 H 0.344300\n"); fprintf(fout,"O22 O -0.652400\n"); fprintf(fout,"O23 O -0.652400\n"); fprintf(fout,"C24 CQ 0.572600\n"); fprintf(fout,"H241 H 0.344300\n"); fprintf(fout,"H242 H 0.344300\n"); fprintf(fout,"H243 H 0.344300\n"); fprintf(fout,"1H24 H 0.344300\n"); fprintf(fout,"2H24 H 0.344300\n"); fprintf(fout,"3H24 H 0.344300\n"); fprintf(fout,"End\n"); } /************************************************************/ void createAllResidueTpl(FILE* fout) { fprintf(fout,"Begin ALLRESIDUE Residue\n"); fprintf(fout,"OXT O2 -0.542500\n"); fprintf(fout,"1H H 0.301800\n"); fprintf(fout,"2H H 0.301800\n"); fprintf(fout,"3H H 0.301800\n"); fprintf(fout,"O3T OH -0.63180\n"); fprintf(fout,"H3T HO 0.325000\n"); fprintf(fout,"HT1 H 0.325000\n"); fprintf(fout,"HT2 H 0.325000\n"); fprintf(fout,"HT3 H 0.325000\n"); fprintf(fout,"Li Li 1.000000\n"); fprintf(fout,"Na Na 1.000000\n"); fprintf(fout,"K K 1.000000\n"); fprintf(fout,"Rb Rb 1.000000\n"); fprintf(fout,"Cs Cs 1.000000\n"); fprintf(fout,"End\n"); } /************************************************************/ void createFragResidueTpl(FILE* fout) { fprintf(fout,"Begin GBZN Residue\n"); fprintf(fout,"C1 CA -0.542500\n"); fprintf(fout,"C2 CA -0.542500\n"); fprintf(fout,"C3 CA -0.542500\n"); fprintf(fout,"C4 CA -0.542500\n"); fprintf(fout,"C5 CA -0.542500\n"); fprintf(fout,"C6 CA -0.542500\n"); fprintf(fout,"H11 HA 0.301800\n"); fprintf(fout,"H21 HA 0.301800\n"); fprintf(fout,"H31 HA 0.301800\n"); fprintf(fout,"H41 HA 0.301800\n"); fprintf(fout,"H51 HA 0.301800\n"); fprintf(fout,"H61 HA 0.301800\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin GAPT Residue\n"); fprintf(fout,"C1 CT -0.542500\n"); fprintf(fout,"C2 CT -0.542500\n"); fprintf(fout,"C3 CA -0.542500\n"); fprintf(fout,"C4 CA -0.542500\n"); fprintf(fout,"C5 CA -0.542500\n"); fprintf(fout,"C6 CA -0.542500\n"); fprintf(fout,"C7 CA -0.542500\n"); fprintf(fout,"C8 CA -0.542500\n"); fprintf(fout,"C9 CA -0.542500\n"); fprintf(fout,"C10 CA -0.542500\n"); fprintf(fout,"C11 CA -0.542500\n"); fprintf(fout,"C12 CA -0.542500\n"); fprintf(fout,"H1 HC 0.301800\n"); fprintf(fout,"H2 HC 0.301800\n"); fprintf(fout,"H3 HC 0.301800\n"); fprintf(fout,"H4 HC 0.301800\n"); fprintf(fout,"H5 HA 0.301800\n"); fprintf(fout,"H6 HA 0.301800\n"); fprintf(fout,"H7 HA 0.301800\n"); fprintf(fout,"H8 HA 0.301800\n"); fprintf(fout,"H9 HA 0.301800\n"); fprintf(fout,"H10 HA 0.301800\n"); fprintf(fout,"End\n"); } /************************************************************/ gboolean CreateDefaultPDBTpl() { gchar* filename = g_strdup_printf("%s%sDefaultPDBTemplate.tpl",gabedit_directory(), G_DIR_SEPARATOR_S); FILE* fout = FOpen(filename,"w"); if(!fout) return FALSE; createTitleResidueTpl(fout); createListResidueTpl(fout); createAminoResidueTpl(fout); createNucleicResidueTpl(fout); createAllResidueTpl(fout); createFragResidueTpl(fout); fclose(fout); return TRUE; } GabeditSrc250/src/MolecularMechanics/CreateMolecularMechanicsFile.h0000644000175100017510000000027313130665225025655 0ustar alloucheallouche #ifndef __GABEDIT_CREATEMOLECULARMECHANICSFILE_H__ #define __GABEDIT_CREATEMOLECULARMECHANICSFILE_H__ gboolean createMMFile(); #endif /* __GABEDIT_CREATEMOLECULARMECHANICSFILE_H__ */ GabeditSrc250/src/MolecularMechanics/SetMMParameters.h0000644000175100017510000000022613130665225023202 0ustar alloucheallouche #ifndef __GABEDIT_SETMMPARAMETERS_H__ #define __GABEDIT_SETMMPARAMETERS_H__ void setMMParamatersDlg(); #endif /* __GABEDIT_SETMMPARAMETERS_H__ */ GabeditSrc250/src/MolecularMechanics/Dep.mk0000644000175100017510000001555213130664665021100 0ustar allouchealloucheAtom.o: Atom.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/AtomsProp.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h Atom.h Molecule.o: Molecule.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/AtomsProp.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/Measure.h Atom.h Molecule.h ForceField.o: ForceField.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/AtomsProp.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h Atom.h Molecule.h \ ForceField.h MolecularMechanics.o: MolecularMechanics.c ../../Config.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/AtomsProp.h ../Utils/Utils.h \ ../Utils/Constants.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h Atom.h Molecule.h \ ForceField.h MolecularMechanics.h LoadMMParameters.h \ CreatePersonalMMFile.h CreateMolecularMechanicsFile.h ConjugateGradient.o: ConjugateGradient.c ../../Config.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/AtomsProp.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h Atom.h Molecule.h \ ForceField.h ConjugateGradient.h SteepestDescent.o: SteepestDescent.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/AtomsProp.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h Atom.h Molecule.h \ ForceField.h SteepestDescent.h QuasiNewton.o: QuasiNewton.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/AtomsProp.h \ ../Utils/Constants.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h Atom.h Molecule.h \ ForceField.h QuasiNewton.h MolecularMechanicsDlg.o: MolecularMechanicsDlg.c ../../Config.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Utils/Constants.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/Measure.h ../Geometry/ResultsAnalise.h \ ../Geometry/GeomGlobal.h ../Geometry/GeomXYZ.h ../Utils/Utils.h \ ../Utils/AtomsProp.h ../Files/FolderChooser.h \ ../Files/GabeditFolderChooser.h ../MolecularMechanics/Atom.h \ ../MolecularMechanics/Molecule.h ../MolecularMechanics/ForceField.h \ ../MolecularMechanics/MolecularMechanics.h \ ../MolecularMechanics/ConjugateGradient.h \ ../MolecularMechanics/SteepestDescent.h \ ../MolecularMechanics/QuasiNewton.h \ ../MolecularMechanics/MolecularDynamics.h CreateMolecularMechanicsFile.o: CreateMolecularMechanicsFile.c \ ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Utils.h CreatePersonalMMFile.o: CreatePersonalMMFile.c ../../Config.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/AtomsProp.h ../Utils/Utils.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h Atom.h Molecule.h \ ForceField.h MolecularMechanics.h LoadMMParameters.o: LoadMMParameters.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/AtomsProp.h ../Utils/Utils.h \ ../Utils/Constants.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h Atom.h Molecule.h \ ForceField.h MolecularMechanics.h SetMMParameters.o: SetMMParameters.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/AtomsProp.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Geometry/Fragments.h \ ../Geometry/DrawGeom.h ../Geometry/DrawGeomCairo.h \ ../Geometry/Fragments.h Atom.h Molecule.h ForceField.h \ MolecularMechanics.h ../Common/StockIcons.h CreateDefaultPDBTpl.o: CreateDefaultPDBTpl.c ../../Config.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Utils.h LoadPDBTemplate.o: LoadPDBTemplate.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../MolecularMechanics/PDBTemplate.h \ ../Utils/Utils.h ../Utils/Constants.h PDBTemplate.o: PDBTemplate.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../MolecularMechanics/PDBTemplate.h \ ../MolecularMechanics/LoadPDBTemplate.h \ ../MolecularMechanics/CreateDefaultPDBTpl.h \ ../MolecularMechanics/SavePDBTemplate.h SetPDBTemplate.o: SetPDBTemplate.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/AtomsProp.h ../Utils/Utils.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../MolecularMechanics/Atom.h ../MolecularMechanics/Molecule.h \ ../MolecularMechanics/ForceField.h \ ../MolecularMechanics/MolecularMechanics.h ../Utils/UtilsInterface.h \ ../MolecularMechanics/PDBTemplate.h \ ../MolecularMechanics/LoadPDBTemplate.h \ ../MolecularMechanics/CreateDefaultPDBTpl.h ../Common/StockIcons.h SavePDBTemplate.o: SavePDBTemplate.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../MolecularMechanics/PDBTemplate.h \ ../Utils/Utils.h CalculTypesAmber.o: CalculTypesAmber.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Geometry/Fragments.h \ ../Geometry/DrawGeom.h ../Geometry/DrawGeomCairo.h \ ../Geometry/Fragments.h ../Utils/Transformation.h ../Utils/Constants.h \ ../Utils/Utils.h ../Utils/UtilsInterface.h ../Utils/Vector3d.h \ ../Utils/HydrogenBond.h ../Utils/AtomsProp.h \ ../MolecularMechanics/CalculTypesAmber.h MolecularDynamics.o: MolecularDynamics.c ../../Config.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/AtomsProp.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h ../Utils/Utils.h \ Atom.h Molecule.h ForceField.h MolecularDynamics.h GabeditSrc250/src/MolecularMechanics/MolecularDynamics.h0000644000175100017510000000651013130665225023606 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MOLECULARDYNAMICS_H__ #define __GABEDIT_MOLECULARDYNAMICS_H__ typedef enum { VERLET = 0, BEEMAN = 1, STOCHASTIC = 2 } MDIntegratorType; typedef enum { NONE = 0, ANDERSEN = 1, BERENDSEN = 2, BUSSI = 3 } MDThermostatType; typedef struct _MolecularDynamics MolecularDynamics; struct _MolecularDynamics { ForceField* forceField; gint numberOfAtoms; gint updateFrequency; gdouble** coordinatesOld; gdouble** velocity; gdouble** a; gdouble** aold; gboolean* moved; gboolean* update; gdouble dt; gdouble dt_2; gdouble dt2_2; gdouble dt_8; gdouble dt2_8; MDIntegratorType integratorType; gdouble potentialEnergy; gdouble kineticEnergy; gdouble totalEnergy; gdouble kelvin; gdouble* positionFriction; gdouble* velocityFriction; gdouble* accelarationFriction; gdouble** positionRandom; gdouble** velocityRandom; gdouble* gamma; gdouble friction; gdouble temperature; gdouble collide; MDThermostatType thermostat; FILE* fileTraj; FILE* fileProp; gint nfree; gint nvariables; }; void freeMolecularDynamics(MolecularDynamics* molecularDynamics); void runMolecularDynamics( MolecularDynamics* molecularDynamics, ForceField* forceField, gint updateFrequency, gdouble heatTime, gdouble equiTime, gdouble runTime, gdouble coolTime, gdouble heatTemperature, gdouble equiTemperature, gdouble runTemperature, gdouble coolTemperature, gdouble stepSize, MDIntegratorType integratorType, MDThermostatType thermostat, gdouble friction, gdouble collide, gchar* fileNameTraj, gchar* fileNameProp ); ForceField** runMolecularDynamicsConfo( MolecularDynamics* molecularDynamics, ForceField* forceField, gint updateFrequency, gdouble heatTime, gdouble equiTime, gdouble runTime, gdouble heatTemperature, gdouble equiTemperature, gdouble runTemperature, gdouble stepSize, MDIntegratorType integratorType, MDThermostatType thermostat, gdouble friction, gdouble collide, gint numberOfGeometries, gchar* fileNameTraj, gchar* fileNameProp ); #endif /* __GABEDIT_MOLECULARDYNAMICS_H__ */ GabeditSrc250/src/MolecularMechanics/ForceField.c0000644000175100017510000002052713130665225022174 0ustar alloucheallouche/* ForceField.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/AtomsProp.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "Atom.h" #include "Molecule.h" #include "ForceField.h" void create_GeomXYZ_from_draw_grometry(); /**********************************************************************/ ForceField newForceField() { gint i; ForceField forceField; forceField.molecule = newMolecule(); forceField.klass = g_malloc(sizeof(ForceFieldClass)); forceField.klass->calculateGradient = NULL; forceField.klass->calculateEnergy = NULL; forceField.klass->calculateEnergyTmp = NULL; forceField.numberOfRattleConstraintsTerms = 0; forceField.numberOfStretchTerms = 0; forceField.numberOfBendTerms = 0; forceField.numberOfDihedralTerms = 0; forceField.numberOfImproperTorsionTerms = 0; forceField.numberOfNonBonded = 0; forceField.numberOfHydrogenBonded = 0; for(i=0;imolecule); if(forceField->klass != NULL) { g_free(forceField->klass); forceField->klass = NULL; } for(i=0;ibondStretchTerms[i] !=NULL) { g_free(forceField->bondStretchTerms[i]); forceField->bondStretchTerms[i] = NULL; } for(i=0;iangleBendTerms[i] != NULL) { g_free(forceField->angleBendTerms[i]); forceField->angleBendTerms[i] = NULL; } for(i=0;idihedralAngleTerms[i] != NULL) { g_free(forceField->dihedralAngleTerms[i]); forceField->dihedralAngleTerms[i] = NULL; } for(i=0;iimproperTorsionTerms[i] != NULL) { g_free(forceField->improperTorsionTerms[i]); forceField->improperTorsionTerms[i] = NULL; } for(i=0;inonBondedTerms[i] != NULL) { g_free(forceField->nonBondedTerms[i]); forceField->nonBondedTerms[i] = NULL; } for(i=0;ihydrogenBondedTerms[i] != NULL) { g_free(forceField->hydrogenBondedTerms[i]); forceField->hydrogenBondedTerms[i] = NULL; } for(i=0;irattleConstraintsTerms[i] != NULL) { g_free(forceField->rattleConstraintsTerms[i]); forceField->rattleConstraintsTerms[i] = NULL; } forceField->numberOfStretchTerms = 0; forceField->numberOfBendTerms = 0; forceField->numberOfDihedralTerms = 0; forceField->numberOfImproperTorsionTerms = 0; forceField->numberOfNonBonded = 0; forceField->numberOfHydrogenBonded = 0; forceField->numberOfRattleConstraintsTerms = 0; for(i=0;ipairWiseTerms[i] != NULL) { g_free(forceField->pairWiseTerms[i]); forceField->pairWiseTerms[i] = NULL; } forceField->numberOfPairWise = 0; } /*****************************************************************************/ ForceField copyForceField(ForceField* f) { gint i; gint j; gint k; ForceField forceField = newForceField(); forceField.molecule = copyMolecule(&f->molecule); /* already in newForceField */ /* forceField.klass = g_malloc(sizeof(ForceFieldClass));*/ forceField.klass->calculateGradient = f->klass->calculateGradient; forceField.klass->calculateEnergy = f->klass->calculateEnergy; forceField.klass->calculateEnergyTmp = f->klass->calculateEnergyTmp; forceField.numberOfStretchTerms = f->numberOfStretchTerms; forceField.numberOfBendTerms = f->numberOfBendTerms; forceField.numberOfDihedralTerms = f->numberOfDihedralTerms; forceField.numberOfImproperTorsionTerms = f->numberOfImproperTorsionTerms; forceField.numberOfNonBonded = f->numberOfNonBonded; forceField.numberOfHydrogenBonded = f->numberOfHydrogenBonded; k = forceField.numberOfStretchTerms; if(k>0) for(i=0;ibondStretchTerms[i][j]; } k = forceField.numberOfBendTerms; if(k>0) for(i=0;iangleBendTerms[i][j]; } k = forceField.numberOfDihedralTerms; if(k>0) for(i=0;idihedralAngleTerms[i][j]; } k = forceField.numberOfImproperTorsionTerms; if(k>0) for(i=0;iimproperTorsionTerms[i][j]; } k = forceField.numberOfNonBonded; if(k>0) for(i=0;inonBondedTerms[i][j]; } k = forceField.numberOfHydrogenBonded; if(k>0) for(i=0;ihydrogenBondedTerms[i][j]; } k = forceField.numberOfRattleConstraintsTerms; if(k>0) for(i=0;irattleConstraintsTerms[i][j]; } k = forceField.numberOfPairWise = f->numberOfPairWise; if(k>0) for(i=0;ipairWiseTerms[i][j]; } forceField.options.type = f->options.type; forceField.options.coulomb = f->options.coulomb; forceField.options.hydrogenBonded = f->options.hydrogenBonded; forceField.options.improperTorsion = f->options.improperTorsion; forceField.options.vanderWals = f->options.vanderWals; forceField.options.bondStretch = f->options.bondStretch; forceField.options.angleBend = f->options.angleBend; forceField.options.dihedralAngle = f->options.dihedralAngle; forceField.options.nonBonded = f->options.nonBonded; forceField.options.rattleConstraints = f->options.rattleConstraints; return forceField; } GabeditSrc250/src/MolecularMechanics/MolecularMechanicsDlg.c0000644000175100017510000045713213130665225024365 0ustar alloucheallouche/* MolecularMechanicsDlg.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/Measure.h" #include "../Geometry/ResultsAnalise.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomXYZ.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Files/FolderChooser.h" #include "../Files/GabeditFolderChooser.h" #include "../MolecularMechanics/Atom.h" #include "../MolecularMechanics/Molecule.h" #include "../MolecularMechanics/ForceField.h" #include "../MolecularMechanics/MolecularMechanics.h" #include "../MolecularMechanics/ConjugateGradient.h" #include "../MolecularMechanics/SteepestDescent.h" #include "../MolecularMechanics/QuasiNewton.h" #include "../MolecularMechanics/MolecularDynamics.h" typedef enum { MMBOND = 0, MMBEND = 1, MMTORSION = 2, MMIMPROPER = 3, MMNONBOND = 4, MMHBOND =5 , MMCOULOMB = 6, PWCOULOMB = 7, PWVANDERWALS = 8 } MMOptions; typedef enum { GRADQUASINEWTON = 0, GRADSTEEPEST = 1, GRADCONJUGATE = 2, GRADHESTENES = 3, GRADFLETCHER = 4, GRADPOLAK = 5, GRADWOLF = 6 } GradientOptions; typedef enum { GRADMAXITERATIONS = 0, GRADEPSILON = 1, GRADMAXLINES = 2, GRADINITIALSTEP = 3, GRADFREQUENCY = 4 } GradientEntrys; typedef enum { TOLE = 0, TOLD = 1 } TOLptions; #define NGRADENTRYS 5 #define NGRADOPTIONS 7 #define NOPTIONS1 4 #define NOPTIONS2 3 #define NOPTIONS3 2 #define NINTEGOPTIONS 3 #define NTHERMOPTIONS 4 #define NENTRYTOL 2 #define NCONSTRAINTS 3 static GtkWidget* buttonTypesOptions[3]; static GtkWidget* buttonMMOptions[NOPTIONS1+NOPTIONS2+NOPTIONS3]; static GtkWidget* buttonMinimizeOptions[NGRADOPTIONS]; static GtkWidget* buttonMDOptions[NINTEGOPTIONS]; static GtkWidget* buttonConstraintsOptions[NCONSTRAINTS]; static GtkWidget* buttonMDThermOptions[NTHERMOPTIONS]; static GtkWidget* entryMinimizeOptions[NGRADENTRYS]; static GtkWidget* frameAmber = NULL; static GtkWidget* framePairWise = NULL; static GtkWidget* entryMDTimes[4]; static GtkWidget* entryMDTemperature[4]; static GtkWidget* entryMDStepSize; static GtkWidget* entryMDRafresh; static GtkWidget* entrySDFriction; static GtkWidget* entrySDCollide; static GtkWidget* entryNumberOfGeom = NULL; static GtkWidget* entryFileNameGeom = NULL; static GtkWidget* entryFileNameTraj = NULL; static GtkWidget* entryFileNameProp = NULL; static GtkWidget* buttonSaveTraj = NULL; static GtkWidget* buttonSaveProp = NULL; static GtkWidget* buttonDirSelector = NULL; static GtkWidget* entryCharge = NULL; static GtkWidget* entrySpinMultiplicity = NULL; static GtkWidget* buttonCreateGaussian = NULL ; static GtkWidget* entryGaussianKeywords = NULL; static GtkWidget* buttonCreateMopac = NULL ; static GtkWidget* entryMopacKeywords = NULL; static GtkWidget* buttonCreateFireFly = NULL ; static GtkWidget* entryFireFlyKeywords = NULL; static GtkWidget* buttonPostNone = NULL ; static GtkWidget* buttonPostMMOpt = NULL ; static GtkWidget* buttonPostPM6Mopac = NULL ; static GtkWidget* buttonPostAM1Mopac = NULL ; static GtkWidget* buttonPostFireFly = NULL ; static GtkWidget* entryTolerance[NENTRYTOL]; static GtkWidget* buttonTolerance[NENTRYTOL]; static gint totalCharge = 0; static gint spinMultiplicity=1; /*********************************************************************************/ static void getMultiplicityName(gint multiplicity, gchar* buffer) { if(multiplicity==1) sprintf(buffer,"Singlet"); else if(multiplicity==2) sprintf(buffer,"Doublet"); else if(multiplicity==3) sprintf(buffer,"Triplet"); else if(multiplicity==4) sprintf(buffer,"Quartet"); else if(multiplicity==5) sprintf(buffer,"Quintet"); else if(multiplicity==6) sprintf(buffer,"Sextet"); else sprintf(buffer,"UNKNOWN"); } /*****************************************************************************/ static gboolean createMopacFiles(gint numberOfGeometries, ForceField** geometries, gdouble* energies, gchar* fileNamePrefix, gchar* keyWords) { FILE* file = NULL; FILE* fileSH = NULL; gint i; gint j; gint nG = 0; gchar* fileName = NULL; gchar* fileNameSH = NULL; gchar multiplicityStr[100]; #ifdef G_OS_WIN32 gchar c='%'; #endif if(numberOfGeometries<1) return FALSE; if(!geometries) return FALSE; if(!energies) return FALSE; for(i=0;imolecule.nAtoms;j++) { fprintf(file," %s %f %d %f %d %f %d\n", geometries[i]->molecule.atoms[j].prop.symbol, geometries[i]->molecule.atoms[j].coordinates[0], 1, geometries[i]->molecule.atoms[j].coordinates[1], 1, geometries[i]->molecule.atoms[j].coordinates[2], 1 ); } fclose(file); fprintf(fileSH,"%s %s\n",NameCommandMopac,fileName); } fclose(fileSH); #ifndef G_OS_WIN32 { gchar buffer[1024]; sprintf(buffer,"chmod u+x %s",fileNameSH); {int ierr = system(buffer);} } #endif if(fileName) g_free(fileName); if(fileNameSH) g_free(fileNameSH); return TRUE; } /*****************************************************************************/ static gboolean createGaussianFiles(gint numberOfGeometries, ForceField** geometries, gdouble* energies, gchar* fileNamePrefix, gchar* keyWords) { FILE* file = NULL; FILE* fileSH = NULL; gint i; gint j; gint nG = 0; gchar* fileName = NULL; gchar* fileNameSH = NULL; if(numberOfGeometries<1) return FALSE; if(!geometries) return FALSE; if(!energies) return FALSE; for(i=0;imolecule.nAtoms;j++) { fprintf(file,"%s %f %f %f\n", geometries[i]->molecule.atoms[j].prop.symbol, geometries[i]->molecule.atoms[j].coordinates[0], geometries[i]->molecule.atoms[j].coordinates[1], geometries[i]->molecule.atoms[j].coordinates[2] ); } fprintf(file,"\n"); fclose(file); fprintf(fileSH,"%s %s\n",NameCommandGaussian,fileName); } fclose(fileSH); #ifndef G_OS_WIN32 { gchar buffer[1024]; sprintf(buffer,"chmod u+x %s",fileNameSH); {int ierr = system(buffer);} } #endif if(fileName) g_free(fileName); if(fileNameSH) g_free(fileNameSH); return TRUE; } /*****************************************************************************/ static gboolean createFireFlyFiles(gint numberOfGeometries, ForceField** geometries, gdouble* energies, gchar* fileNamePrefix, gchar* keyWords) { FILE* file = NULL; FILE* fileSH = NULL; gint i; gint j; gint nG = 0; gchar* fileName = NULL; gchar* fileNameSH = NULL; gchar buffer[1024]; #ifdef G_OS_WIN32 gchar c='%'; #endif if(numberOfGeometries<1) return FALSE; if(!geometries) return FALSE; if(!energies) return FALSE; for(i=0;imolecule.nAtoms;j++) { gchar* symbol = geometries[i]->molecule.atoms[j].prop.symbol; SAtomsProp prop = prop_atom_get(symbol); fprintf(file,"%s %f %f %f %f\n", symbol, (gdouble)prop.atomicNumber, geometries[i]->molecule.atoms[j].coordinates[0], geometries[i]->molecule.atoms[j].coordinates[1], geometries[i]->molecule.atoms[j].coordinates[2] ); } fprintf(file," $END\n"); fclose(file); #ifndef G_OS_WIN32 if(!strcmp(NameCommandFireFly,"pcgamess") || !strcmp(NameCommandFireFly,"nohup pcgamess")|| !strcmp(NameCommandFireFly,"firefly") || !strcmp(NameCommandFireFly,"nohup firefly")) { fprintf(fileSH,"mkdir %stmp%d\n",fileNamePrefix,i+1); fprintf(fileSH,"cd %stmp%d\n",fileNamePrefix,i+1); fprintf(fileSH,"cp %s input\n",fileName); fprintf(fileSH,"%s -p -o %sP_%d.log\n",NameCommandFireFly,fileNamePrefix,i+1); fprintf(fileSH,"cd ..\n"); fprintf(fileSH,"mv PUNCH %sP_%d.pun\n",fileNamePrefix,i+1); fprintf(fileSH,"/bin/rm -r %stmp%d\n",fileNamePrefix,i+1); } else fprintf(fileSH,"%s %s",NameCommandFireFly,fileName); #else if(!strcmp(NameCommandFireFly,"pcgamess") || !strcmp(NameCommandFireFly,"firefly") ) { fprintf(fileSH,"mkdir %stmp%d\n",fileNamePrefix,i+1); addUnitDisk(fileSH, fileNamePrefix); fprintf(fileSH,"cd %stmp%d\n",fileNamePrefix,i+1); fprintf(fileSH,"copy %s input\n",fileName); fprintf(fileSH,"%s -p -o %sP_%d.log\n",NameCommandFireFly,fileNamePrefix,i+1); fprintf(fileSH,"cd ..\n"); fprintf(fileSH,"move PUNCH %sP_%d.pun\n",fileNamePrefix,i+1); fprintf(fileSH,"del /Q %stmp%d\n",fileNamePrefix,i+1); fprintf(fileSH,"rmdir %stmp%d\n",fileNamePrefix,i+1); } else fprintf(fileSH,"%s %s",NameCommandFireFly,fileName); #endif } fclose(fileSH); #ifndef G_OS_WIN32 { gchar buffer[1024]; sprintf(buffer,"chmod u+x %s",fileNameSH); {int ierr = system(buffer);} } #endif if(fileName) g_free(fileName); if(fileNameSH) g_free(fileNameSH); return TRUE; } /*****************************************************************************/ static gboolean saveConfoGeometries(gint numberOfGeometries, ForceField** geometries, gdouble* energies, gchar* fileNameGeom) { FILE* file = NULL; gint i; gint j; gint nG = 0; gint k; if(numberOfGeometries<1) return FALSE; if(!geometries) return FALSE; if(!energies) return FALSE; for(i=0;imolecule.nAtoms); fprintf(file,"\n"); for(j=0;jmolecule.nAtoms;j++) fprintf(file," %s %f %f %f\n", geometries[i]->molecule.atoms[j].prop.symbol, geometries[i]->molecule.atoms[j].coordinates[0], geometries[i]->molecule.atoms[j].coordinates[1], geometries[i]->molecule.atoms[j].coordinates[2] ); } fprintf(file,"\n"); fprintf(file,"[GEOMS] 1 \n");/* 1 for format # 1 */ fprintf(file,"%d 2\n",nG); fprintf(file,"energy kcal/mol 1\n"); fprintf(file,"deltaE K 1\n"); k = -1; for(i=0;i=0) fprintf(file,"%f\n",(energies[i]-energies[k])*503.21892494); else fprintf(file,"0\n"); fprintf(file,"%d %d %d\n",geometries[i]->molecule.nAtoms,totalCharge,spinMultiplicity); for(j=0;jmolecule.nAtoms;j++) { int nc = 0; int k; for(k=0;kmolecule.nAtoms;k++) if(geometries[i]->molecule.atoms[j].typeConnections&&geometries[i]->molecule.atoms[j].typeConnections[k]>0) nc++; fprintf(file," %s %s %s %s %d %f %d %d %f %f %f %d ", geometries[i]->molecule.atoms[j].prop.symbol, geometries[i]->molecule.atoms[j].mmType, geometries[i]->molecule.atoms[j].pdbType, geometries[i]->molecule.atoms[j].residueName, geometries[i]->molecule.atoms[j].residueNumber, geometries[i]->molecule.atoms[j].charge, geometries[i]->molecule.atoms[j].layer, geometries[i]->molecule.atoms[j].variable, geometries[i]->molecule.atoms[j].coordinates[0], geometries[i]->molecule.atoms[j].coordinates[1], geometries[i]->molecule.atoms[j].coordinates[2], nc ); for(k=0;k< geometries[i]->molecule.nAtoms;k++) { int nk = geometries[i]->molecule.atoms[k].N-1; if(geometries[i]->molecule.atoms[j].typeConnections && geometries[i]->molecule.atoms[j].typeConnections[nk]>0) fprintf(file," %d %d", nk+1, geometries[i]->molecule.atoms[j].typeConnections[nk]); } fprintf(file,"\n"); } } fclose(file); return TRUE; } /*****************************************************************************/ static gboolean getEnergyMopac(gchar* fileNameOut, gdouble* energy) { FILE* file = NULL; gchar buffer[1024]; gchar* pdest = NULL; file = fopen(fileNameOut, "rb"); if(!file) return FALSE; while(!feof(file)) { if(!fgets(buffer,BSIZE,file))break; pdest = strstr( buffer, " FINAL HEAT OF FORMATION"); if(pdest) { pdest = strstr( buffer, "="); if(pdest) { if(sscanf(pdest+1,"%lf",energy)==1) { fclose(file); return TRUE; } } } } fclose(file); return FALSE; } /*****************************************************************************/ static gboolean runOneMopac(ForceField* geometry, gdouble* energy, gchar* fileNamePrefix, gchar* keyWords) { FILE* file = NULL; FILE* fileSH = NULL; gint j; gchar* fileNameIn = NULL; gchar* fileNameOut = NULL; gchar* fileNameSH = NULL; gchar multiplicityStr[100]; gchar buffer[1024]; #ifdef G_OS_WIN32 gchar c='%'; #endif if(!geometry) return FALSE; #ifndef G_OS_WIN32 fileNameSH = g_strdup_printf("%sMopacOne.sh",fileNamePrefix); #else fileNameSH = g_strdup_printf("%sMopacOne.bat",fileNamePrefix); #endif fileSH = fopen(fileNameSH, "w"); if(!fileSH) return FALSE; #ifdef G_OS_WIN32 fprintf(fileSH,"set PATH=%cPATH%c;\"%s\"\n",c,c,mopacDirectory); #endif getMultiplicityName(spinMultiplicity, multiplicityStr); fileNameIn = g_strdup_printf("%sOne.mop",fileNamePrefix); file = fopen(fileNameIn, "w"); if(!file) { if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return FALSE; } fprintf(file,"* ===============================\n"); fprintf(file,"* Input file for Mopac\n"); fprintf(file,"* ===============================\n"); fprintf(file,"%s CHARGE=%d %s\n",keyWords,totalCharge,multiplicityStr); fprintf(file,"\n"); fprintf(file,"Mopac file generated by Gabedit\n"); for(j=0;jmolecule.nAtoms;j++) { fprintf(file," %s %f %d %f %d %f %d\n", geometry->molecule.atoms[j].prop.symbol, geometry->molecule.atoms[j].coordinates[0], 1, geometry->molecule.atoms[j].coordinates[1], 1, geometry->molecule.atoms[j].coordinates[2], 1 ); } fclose(file); #ifndef G_OS_WIN32 fprintf(fileSH,"%s %s\n",NameCommandMopac,fileNameIn); fclose(fileSH); sprintf(buffer,"chmod u+x %s",fileNameSH); {int ierr = system(buffer);} {int ierr = system(fileNameSH);} #else fprintf(fileSH,"\"%s\" \"%s\"\n",NameCommandMopac,fileNameIn); fclose(fileSH); sprintf(buffer,"\"%s\"",fileNameSH); {int ierr = system(buffer);} #endif fileNameOut = g_strdup_printf("%sOne.out",fileNamePrefix); if(getEnergyMopac(fileNameOut,energy)) { gchar* str = NULL; read_geom_from_mopac_output_file(fileNameOut, -1); if(strstr(keyWords,"AM1")) str = g_strdup_printf("Energy by AM1/Mopac = %f", *energy); else str = g_strdup_printf("Energy by PM6/Mopac = %f", *energy); set_text_to_draw(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); Waiting(1); if(str) g_free(str); } else { if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return FALSE; } if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return TRUE; } /*****************************************************************************/ static gboolean runMopacFiles(gint numberOfGeometries, ForceField** geometries, gdouble* energies, gchar* fileNamePrefix, gchar* keyWords) { gint i; gint nG = 0; gint nM = 0; gchar* str = NULL; for(i=0;imolecule); geometries[i]->molecule = createMolecule(geometry0,Natoms,TRUE); nM++; } if(StopCalcul)break; } if(str) g_free(str); if(nM==nG) return TRUE; return FALSE; } /*****************************************************************************/ static gboolean getEnergyFireFly(gchar* fileNameOut, gdouble* energy) { FILE* file = NULL; gchar buffer[1024]; gchar* pdest = NULL; gboolean OK = FALSE; file = fopen(fileNameOut, "rb"); if(!file) return FALSE; while(!feof(file)) { if(!fgets(buffer,BSIZE,file))break; pdest = strstr( buffer, "HEAT OF FORMATION IS"); if(pdest) { pdest = strstr( buffer, "S"); if(pdest) { if(sscanf(pdest+1,"%lf",energy)==1) OK = TRUE; } } } fclose(file); return OK; } /*****************************************************************************/ static gboolean runOneFireFly(ForceField* geometry, gdouble* energy, gchar* fileNamePrefix, gchar* keyWords) { FILE* file = NULL; FILE* fileSH = NULL; gint j; gchar* fileNameIn = NULL; gchar* fileNameOut = NULL; gchar* fileNameSH = NULL; gchar multiplicityStr[100]; gchar buffer[1024]; #ifdef G_OS_WIN32 gchar c='%'; #endif if(!geometry) return FALSE; #ifndef G_OS_WIN32 fileNameSH = g_strdup_printf("%sPCGOne.sh",fileNamePrefix); #else fileNameSH = g_strdup_printf("%sPCGOne.bat",fileNamePrefix); #endif fileSH = fopen(fileNameSH, "w"); if(!fileSH) return FALSE; #ifdef G_OS_WIN32 fprintf(fileSH,"set PATH=%cPATH%c;\"%s\"\n",c,c,fireflyDirectory); #endif getMultiplicityName(spinMultiplicity, multiplicityStr); fileNameIn = g_strdup_printf("%sOne.inp",fileNamePrefix); file = fopen(fileNameIn, "w"); if(!file) { if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return FALSE; } fprintf(file,"! ======================================================\n"); fprintf(file,"! Input file for FireFly\n"); fprintf(file,"! ======================================================\n"); if(strstr(keyWords,"RUNTYP")) { sscanf(strstr(keyWords,"RUNTYP"),"%s",buffer); fprintf(file," $CONTRL %s $END\n",buffer); } if(strstr(keyWords,"SCFTYP")) { sscanf(strstr(keyWords,"SCFTYP"),"%s",buffer); fprintf(file," $CONTRL %s $END\n",buffer); } else { if(spinMultiplicity==1) fprintf(file," $CONTRL SCFTYP=RHF $END\n"); else fprintf(file," $CONTRL SCFTYP=UHF $END\n"); } fprintf(file," $CONTRL ICHARG=%d MULT=%d $END\n",totalCharge,spinMultiplicity); if(strstr(keyWords,"GBASIS")) { sscanf(strstr(keyWords,"GBASIS"),"%s",buffer); fprintf(file," $BASIS %s $END\n",buffer); } fprintf(file," $DATA\n"); fprintf(file,"Molecule specification\n"); fprintf(file,"C1\n"); for(j=0;jmolecule.nAtoms;j++) { gchar* symbol = geometry->molecule.atoms[j].prop.symbol; SAtomsProp prop = prop_atom_get(symbol); fprintf(file,"%s %f %f %f %f\n", symbol, (gdouble)prop.atomicNumber, geometry->molecule.atoms[j].coordinates[0], geometry->molecule.atoms[j].coordinates[1], geometry->molecule.atoms[j].coordinates[2] ); } fprintf(file," $END\n"); fclose(file); fileNameOut = g_strdup_printf("%sOne.out",fileNamePrefix); #ifndef G_OS_WIN32 if(!strcmp(NameCommandFireFly,"pcgamess") || !strcmp(NameCommandFireFly,"nohup pcgamess")|| !strcmp(NameCommandFireFly,"firefly") || !strcmp(NameCommandFireFly,"nohup firefly")) { fprintf(fileSH,"mkdir %stmp\n",fileNamePrefix); fprintf(fileSH,"cd %stmp\n",fileNamePrefix); fprintf(fileSH,"cp %s input\n",fileNameIn); fprintf(fileSH,"%s -p -o %s\n",NameCommandFireFly,fileNameOut); fprintf(fileSH,"cd ..\n"); fprintf(fileSH,"rm PUNCH\n"); fprintf(fileSH,"/bin/rm -r %stmp\n",fileNamePrefix); } else fprintf(fileSH,"%s %s",NameCommandFireFly,fileNameIn); #else if(!strcmp(NameCommandFireFly,"pcgamess") || !strcmp(NameCommandFireFly,"firefly") ) { fprintf(fileSH,"mkdir \"%stmp\"\n",fileNamePrefix); addUnitDisk(fileSH, fileNamePrefix); fprintf(fileSH,"cd \"%stmp\"\n",fileNamePrefix); fprintf(fileSH,"copy \"%s\" input\n",fileNameIn); fprintf(fileSH,"%s -p -o \"%s\"\n",NameCommandFireFly,fileNameOut); fprintf(fileSH,"cd ..\n"); fprintf(fileSH,"del PUNCH\n"); fprintf(fileSH,"del /Q \"%stmp\"\n",fileNamePrefix); fprintf(fileSH,"rmdir \"%stmp\"\n",fileNamePrefix); } else fprintf(fileSH,"%s %s",NameCommandFireFly,fileNameIn); #endif fclose(fileSH); #ifndef G_OS_WIN32 sprintf(buffer,"chmod u+x %s",fileNameSH); {int ierr = system(buffer);} {int ierr = system(fileNameSH);} #else sprintf(buffer,"\"%s\"",fileNameSH); {int ierr = system(buffer);} #endif if(getEnergyFireFly(fileNameOut,energy)) { gchar* str = NULL; read_geom_from_gamess_output_file(fileNameOut, -1); str = g_strdup_printf("Energy by FireFly = %f", *energy); set_text_to_draw(str); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); Waiting(1); if(str) g_free(str); } else { if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return FALSE; } if(fileNameIn) g_free(fileNameIn); if(fileNameOut) g_free(fileNameOut); if(fileNameSH) g_free(fileNameSH); return TRUE; } /*****************************************************************************/ static gboolean runFireFlyFiles(gint numberOfGeometries, ForceField** geometries, gdouble* energies, gchar* fileNamePrefix, gchar* keyWords) { gint i; gint nG = 0; gint nM = 0; gchar* str = NULL; for(i=0;imolecule); geometries[i]->molecule = createMolecule(geometry0,Natoms,TRUE); nM++; } if(StopCalcul)break; } if(str) g_free(str); if(nM==nG) return TRUE; return FALSE; } /*****************************************************************************/ static gboolean testEqualDistances(gdouble* distancesI, gdouble* distancesJ, gint n, gdouble tol) { gint k; if(!distancesI) return FALSE; if(!distancesJ) return FALSE; if(n<1) return FALSE; for ( k = 0; k < n; k++ ) if(fabs(distancesI[k]-distancesJ[k])>tol) return FALSE; return TRUE; } /*****************************************************************************/ static gdouble* getDistancesBetweenAtoms(ForceField* forceField) { gdouble* distances = NULL; gint i; gint j; gint n; gint k; if(forceField->molecule.nAtoms<1) return distances; n = forceField->molecule.nAtoms*(forceField->molecule.nAtoms-1)/2; distances = g_malloc(n*sizeof(gdouble)); n = 0; for ( i = 0; i < forceField->molecule.nAtoms-1; i++ ) for ( j = i+1; j < forceField->molecule.nAtoms; j++ ) { gdouble x = forceField->molecule.atoms[i].coordinates[0]-forceField->molecule.atoms[j].coordinates[0]; gdouble y = forceField->molecule.atoms[i].coordinates[1]-forceField->molecule.atoms[j].coordinates[1]; gdouble z = forceField->molecule.atoms[i].coordinates[2]-forceField->molecule.atoms[j].coordinates[2]; distances[n++] = x*x + y*y + z*z; } for(i=0;i0) distancesI = getDistancesBetweenAtoms(geometries[i]); n = geometries[i]->molecule.nAtoms*(geometries[i]->molecule.nAtoms-1)/2; for(j=i+1;j0 && fabs(energies[j]-energies[i])molecule.nAtoms==geometries[j]->molecule.nAtoms) { if(tolDistance>0) { distancesJ = getDistancesBetweenAtoms(geometries[j]); if(testEqualDistances(distancesI, distancesJ, n, tolDistance)) removeds[j] = TRUE; if(distancesJ) g_free(distancesJ); distancesJ = NULL; } else removeds[j] = TRUE; } if(tolEnergy<0 && tolDistance>0 && geometries[i]->molecule.nAtoms==geometries[j]->molecule.nAtoms) { distancesJ = getDistancesBetweenAtoms(geometries[j]); if(testEqualDistances(distancesI, distancesJ, n, tolDistance)) removeds[j] = TRUE; if(distancesJ) g_free(distancesJ); distancesJ = NULL; } } if(distancesI) g_free(distancesI); distancesI = NULL; } } /*****************************************************************************/ static void removeIdenticalGeometries(gint* nG, ForceField*** geoms, gdouble** eners, gdouble tolEnergy, gdouble tolDistance) { gint i; gint numberOfGeometries =*nG; ForceField** geometries = *geoms; gdouble* energies = *eners; gboolean* removeds = NULL; gint newN = 0; if(numberOfGeometries<1) return; removeds = g_malloc(numberOfGeometries*sizeof(gboolean)); for(i=0;iactive) tolEnergy = atoi(gtk_entry_get_text(GTK_ENTRY(entryTolerance[TOLE]))); if(GTK_TOGGLE_BUTTON (buttonTolerance[TOLD])->active) tolDistance = atoi(gtk_entry_get_text(GTK_ENTRY(entryTolerance[TOLD]))); forceFieldOptions.type = AMBER; forceFieldOptions.bondStretch = GTK_TOGGLE_BUTTON (buttonMMOptions[MMBOND])->active; forceFieldOptions.angleBend = GTK_TOGGLE_BUTTON (buttonMMOptions[MMBEND])->active; forceFieldOptions.dihedralAngle = GTK_TOGGLE_BUTTON (buttonMMOptions[MMTORSION])->active; forceFieldOptions.improperTorsion = GTK_TOGGLE_BUTTON (buttonMMOptions[MMIMPROPER])->active; forceFieldOptions.nonBonded = GTK_TOGGLE_BUTTON (buttonMMOptions[MMNONBOND])->active; forceFieldOptions.hydrogenBonded = GTK_TOGGLE_BUTTON (buttonMMOptions[MMHBOND])->active; forceFieldOptions.coulomb = GTK_TOGGLE_BUTTON (buttonMMOptions[MMCOULOMB])->active; forceFieldOptions.vanderWals = GTK_TOGGLE_BUTTON (buttonMMOptions[PWVANDERWALS])->active; forceFieldOptions.rattleConstraints = NOCONSTRAINTS; if(GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSCONSTRAINTS])->active) forceFieldOptions.rattleConstraints = BONDSCONSTRAINTS; if(GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSANGLESCONSTRAINTS])->active) forceFieldOptions.rattleConstraints = BONDSANGLESCONSTRAINTS; if(GTK_TOGGLE_BUTTON (buttonTypesOptions[AMBER])->active ) forceFieldOptions.type = AMBER; else if(GTK_TOGGLE_BUTTON (buttonTypesOptions[PAIRWISE])->active ) { forceFieldOptions.coulomb = GTK_TOGGLE_BUTTON (buttonMMOptions[PWCOULOMB])->active; forceFieldOptions.type = PAIRWISE; } totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge))); spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity))); TotalCharges[0] = totalCharge; SpinMultiplicities[0] = spinMultiplicity; updateFrequency = atoi(gtk_entry_get_text(GTK_ENTRY(entryMDRafresh))); if(updateFrequency<0) updateFrequency = 0; heatTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[0]))); equiTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[1]))); runTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[2]))); heatTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[0]))); runTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[2]))); /* equiTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[1])));*/ equiTemp = runTemp; stepSize = atof(gtk_entry_get_text(GTK_ENTRY(entryMDStepSize))); if(GTK_TOGGLE_BUTTON (buttonMDOptions[BEEMAN])->active) integrator = BEEMAN; if(GTK_TOGGLE_BUTTON (buttonMDOptions[STOCHASTIC])->active) integrator = STOCHASTIC; if(GTK_TOGGLE_BUTTON (buttonMDThermOptions[ANDERSEN])->active) thermostat = ANDERSEN; if(GTK_TOGGLE_BUTTON (buttonMDThermOptions[BERENDSEN])->active) thermostat = BERENDSEN; if(GTK_TOGGLE_BUTTON (buttonMDThermOptions[BUSSI])->active) thermostat = BUSSI; if( integrator == STOCHASTIC) friction = atof(gtk_entry_get_text(GTK_ENTRY(entrySDFriction))); collide = atof(gtk_entry_get_text(GTK_ENTRY(entrySDCollide))); if(heatTime<0) heatTime = 1; if(equiTime<0) equiTime = 1; if(runTime<0) runTime = 1; if(heatTemp<0) heatTemp = 0; if(equiTemp<0) runTemp = 300; if(runTemp<0) runTemp = 300; if(stepSize<0) stepSize = 1.0; if(stepSize>5) stepSize = 5.0; optMM = GTK_TOGGLE_BUTTON (buttonPostMMOpt)->active; optPM6Mopac = GTK_TOGGLE_BUTTON (buttonPostPM6Mopac)->active; optAM1Mopac = GTK_TOGGLE_BUTTON (buttonPostAM1Mopac)->active; optFireFly = GTK_TOGGLE_BUTTON (buttonPostFireFly)->active; /* number for geometries */ { gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryNumberOfGeom))); numberOfGeometries = atoi(tmp); if(numberOfGeometries<2) numberOfGeometries = 2; g_free(tmp); } /* fileName for geometries */ { gchar* dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileNameGeom))); if(!dirName) dirName = g_strdup(g_get_home_dir()); if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR) fileNameGeom = g_strdup_printf("%s%s%s",dirName, G_DIR_SEPARATOR_S,tmp); else fileNameGeom = g_strdup_printf("%s%s",dirName, tmp); g_free(tmp); g_free(dirName); } if(GTK_TOGGLE_BUTTON (buttonCreateGaussian)->active) gaussianKeywords = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryGaussianKeywords))); if(GTK_TOGGLE_BUTTON (buttonCreateMopac)->active) mopacKeywords = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryMopacKeywords))); if(GTK_TOGGLE_BUTTON (buttonCreateFireFly)->active) fireflyKeywords = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFireFlyKeywords))); if(GTK_TOGGLE_BUTTON (buttonSaveTraj)->active) { gchar* dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileNameTraj))); if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR) fileNameTraj = g_strdup_printf("%s%s%s",dirName, G_DIR_SEPARATOR_S,tmp); else fileNameTraj = g_strdup_printf("%s%s",dirName, tmp); g_free(tmp); g_free(dirName); } if(GTK_TOGGLE_BUTTON (buttonSaveProp)->active) { gchar* dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileNameProp))); if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR) fileNameProp = g_strdup_printf("%s%s%s",dirName, G_DIR_SEPARATOR_S,tmp); else fileNameProp = g_strdup_printf("%s%s",dirName, tmp); g_free(tmp); g_free(dirName); /* printf("fileNameProp = %s\n", fileNameProp);*/ } /* Optimsation options */ conjugateGradientOptions.gradientNorm = 1e-3; conjugateGradientOptions.maxIterations = 100; conjugateGradientOptions.updateFrequency = 1; conjugateGradientOptions.maxLines = 25; conjugateGradientOptions.initialStep = 0.001; conjugateGradientOptions.method = 1; useConjugateGradient = GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADCONJUGATE])->active; useQuasiNewton = GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADQUASINEWTON])->active; conjugateGradientOptions.gradientNorm = atof(gtk_entry_get_text(GTK_ENTRY(entryMinimizeOptions[GRADEPSILON]))); conjugateGradientOptions.maxIterations = atoi(gtk_entry_get_text(GTK_ENTRY(entryMinimizeOptions[GRADMAXITERATIONS]))); conjugateGradientOptions.updateFrequency = atoi(gtk_entry_get_text(GTK_ENTRY(entryMinimizeOptions[GRADFREQUENCY]))); conjugateGradientOptions.initialStep = atof(gtk_entry_get_text(GTK_ENTRY(entryMinimizeOptions[GRADINITIALSTEP]))); conjugateGradientOptions.maxLines = atoi(gtk_entry_get_text(GTK_ENTRY(entryMinimizeOptions[GRADMAXLINES]))); quasiNewton.maxIterations = atoi(gtk_entry_get_text(GTK_ENTRY(entryMinimizeOptions[GRADMAXITERATIONS]))); quasiNewton.updateFrequency = atoi(gtk_entry_get_text(GTK_ENTRY(entryMinimizeOptions[GRADFREQUENCY]))); quasiNewton.epsilon = atof(gtk_entry_get_text(GTK_ENTRY(entryMinimizeOptions[GRADEPSILON]))); quasiNewton.tolerence = 1e-16; quasiNewton.maxLines = atoi(gtk_entry_get_text(GTK_ENTRY(entryMinimizeOptions[GRADMAXLINES]))); quasiNewton.forceField = NULL; if(GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADHESTENES])->active) conjugateGradientOptions.method = 1; else if(GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADFLETCHER])->active) conjugateGradientOptions.method = 2; else if(GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADPOLAK])->active) conjugateGradientOptions.method = 3; else if(GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADWOLF])->active) conjugateGradientOptions.method = 4; gtk_widget_destroy(Win); while( gtk_events_pending() ) gtk_main_iteration(); set_sensitive_stop_button( TRUE); StopCalcul = FALSE; if(forceFieldOptions.type==AMBER) forceField = createAmberModel(geometry0,Natoms,forceFieldOptions); else if(forceFieldOptions.type==PAIRWISE) forceField = createPairWiseModel(geometry0,Natoms,forceFieldOptions); if(StopCalcul) { set_text_to_draw(" "); set_statubar_operation_str(_("Calculation canceled")); drawGeom(); set_sensitive_stop_button( FALSE); return; } set_sensitive_stop_button( TRUE); { gint i; for(i=0;i<4;i++) NumSelAtoms[i] = -1; change_of_center(NULL,NULL); } geometries = runMolecularDynamicsConfo(&molecularDynamics, &forceField, updateFrequency, heatTime, equiTime, runTime, heatTemp, equiTemp, runTemp, stepSize, integrator, thermostat, friction, collide, numberOfGeometries, fileNameTraj, fileNameProp); freeForceField(&forceField); if(!StopCalcul && geometries && numberOfGeometries>0) energies = g_malloc(numberOfGeometries*sizeof(gdouble)); if(!StopCalcul && geometries && optMM) for(i=0;iklass->calculateEnergyTmp (conjugateGradient.forceField, &conjugateGradient.forceField->molecule ); freeConjugateGradient(&conjugateGradient); } else if(useQuasiNewton) { QuasiNewton tmpQuasiNewton = quasiNewton; set_sensitive_stop_button( TRUE); tmpQuasiNewton.forceField = geometries[i]; runQuasiNewton(&tmpQuasiNewton); if(StopCalcul) { set_text_to_draw(" "); set_statubar_operation_str(_("Calculation canceled")); drawGeom(); } set_sensitive_stop_button( FALSE); energies[i] = tmpQuasiNewton.forceField->klass->calculateEnergyTmp (tmpQuasiNewton.forceField, &tmpQuasiNewton.forceField->molecule ); freeQuasiNewton(&tmpQuasiNewton); } else { set_sensitive_stop_button( TRUE); runSteepestDescent(&steepestDescent, geometries[i], conjugateGradientOptions.updateFrequency, conjugateGradientOptions.maxIterations, conjugateGradientOptions.gradientNorm, conjugateGradientOptions.maxLines); if(StopCalcul) { set_text_to_draw(" "); set_statubar_operation_str(_("Calculation canceled")); drawGeom(); } set_sensitive_stop_button( FALSE); energies[i] = steepestDescent.forceField->klass->calculateEnergyTmp (steepestDescent.forceField, &steepestDescent.forceField->molecule ); freeSteepestDescent(&steepestDescent); } set_text_to_draw(" "); } else if(!StopCalcul) { for(i=0;iklass->calculateEnergyTmp (geometries[i], &geometries[i]->molecule ); } } if(StopCalcul) { set_text_to_draw(" "); set_statubar_operation_str(_("Calculation canceled")); drawGeom(); } set_sensitive_stop_button( FALSE); set_text_to_draw(" "); /* sort by energies */ if(!StopCalcul) { sortGeometries(numberOfGeometries, geometries, energies); removeIdenticalGeometries(&numberOfGeometries, &geometries, &energies,tolEnergy,tolDistance); } /* printf("fileNameGeom = %s\n",fileNameGeom);*/ if(!StopCalcul && saveConfoGeometries(numberOfGeometries, geometries, energies, fileNameGeom)) { createPostProcessingFiles(numberOfGeometries, geometries,energies,fileNameGeom, mopacKeywords, gaussianKeywords, fireflyKeywords, message); if(!StopCalcul) read_gabedit_file_add_list(fileNameGeom); strcat(message,fileNameGeom); strcat(message,_("\n\tGeometries selected and optimized using your MM potentials")); strcat(message,_("\n\tTo read this file : 'Read/Gabedit file'\n\n")); } /* minimazation by mopac PM6*/ if(!StopCalcul && optPM6Mopac) { gchar* fileNamePrefix = get_suffix_name_file(fileNameGeom); if(runMopacFiles(numberOfGeometries, geometries, energies, fileNamePrefix, "PM6 XYZ") && !StopCalcul) { gchar* fileNameGeomMop = g_strdup_printf("%sMop.gab",fileNamePrefix); sortGeometries(numberOfGeometries, geometries, energies); removeIdenticalGeometries(&numberOfGeometries, &geometries, &energies,tolEnergy,tolDistance); if(saveConfoGeometries(numberOfGeometries, geometries, energies, fileNameGeomMop)) { createPostProcessingFiles(numberOfGeometries, geometries,energies,fileNameGeomMop, mopacKeywords, gaussianKeywords, fireflyKeywords, message); read_gabedit_file_add_list(fileNameGeomMop); strcat(message,fileNameGeomMop); strcat(message,_("\n\tGeometries after minimization by PM6/Mopac")); strcat(message,_("\n\tTo read this file : 'Read/Gabedit file'\n\n")); } g_free(fileNameGeomMop); } if(fileNamePrefix) g_free(fileNamePrefix); } /* minimazation by mopac AM1*/ if(!StopCalcul && optAM1Mopac) { gchar* fileNamePrefix = get_suffix_name_file(fileNameGeom); if(runMopacFiles(numberOfGeometries, geometries, energies, fileNamePrefix, "AM1 XYZ") && !StopCalcul) { gchar* fileNameGeomMop = g_strdup_printf("%sMop.gab",fileNamePrefix); sortGeometries(numberOfGeometries, geometries, energies); removeIdenticalGeometries(&numberOfGeometries, &geometries, &energies,tolEnergy,tolDistance); if(saveConfoGeometries(numberOfGeometries, geometries, energies, fileNameGeomMop)) { createPostProcessingFiles(numberOfGeometries, geometries,energies,fileNameGeomMop, mopacKeywords, gaussianKeywords, fireflyKeywords, message); read_gabedit_file_add_list(fileNameGeomMop); strcat(message,fileNameGeomMop); strcat(message,_("\n\tGeometries after minimization by AM1/Mopac")); strcat(message,_("\n\tTo read this file : 'Read/Gabedit file'\n\n")); } g_free(fileNameGeomMop); } if(fileNamePrefix) g_free(fileNamePrefix); } /* minimazation by FireFly AM1*/ if(!StopCalcul && optFireFly) { gchar* fileNamePrefix = get_suffix_name_file(fileNameGeom); if(runFireFlyFiles(numberOfGeometries, geometries, energies, fileNamePrefix, "RUNTYP=Optimize GBASIS=AM1") && !StopCalcul) { gchar* fileNameGeomFireFly = g_strdup_printf("%sFireFly.gab",fileNamePrefix); sortGeometries(numberOfGeometries, geometries, energies); removeIdenticalGeometries(&numberOfGeometries, &geometries, &energies,tolEnergy,tolDistance); if(saveConfoGeometries(numberOfGeometries, geometries, energies, fileNameGeomFireFly)) { createPostProcessingFiles(numberOfGeometries, geometries,energies,fileNameGeomFireFly, mopacKeywords, gaussianKeywords, fireflyKeywords, message); read_gabedit_file_add_list(fileNameGeomFireFly); strcat(message,fileNameGeomFireFly); strcat(message,_("\n\tGeometries after minimization by FireFly")); strcat(message,_("\n\tTo read this file : 'Read/Gabedit file'\n\n")); } g_free(fileNameGeomFireFly); } if(fileNamePrefix) g_free(fileNamePrefix); } if(geometries) { for(i=0;i20 && !StopCalcul ) Message(message,_("Info"),TRUE); } /*****************************************************************************/ static void amberMolecularDynamics(GtkWidget* Win, gpointer data) { ForceField forceField; ForceFieldOptions forceFieldOptions; MolecularDynamics molecularDynamics; gint updateFrequency = 1; gdouble heatTime; gdouble equiTime; gdouble runTime; gdouble coolTime; gdouble heatTemp; gdouble equiTemp; gdouble runTemp; gdouble coolTemp; gdouble stepSize; MDIntegratorType integrator = VERLET; gchar* fileNameTraj = NULL; gchar* fileNameProp = NULL; gdouble friction=40; gdouble collide = 20; MDThermostatType thermostat = NONE; forceFieldOptions.type = AMBER; forceFieldOptions.bondStretch = GTK_TOGGLE_BUTTON (buttonMMOptions[MMBOND])->active; forceFieldOptions.angleBend = GTK_TOGGLE_BUTTON (buttonMMOptions[MMBEND])->active; forceFieldOptions.dihedralAngle = GTK_TOGGLE_BUTTON (buttonMMOptions[MMTORSION])->active; forceFieldOptions.improperTorsion = GTK_TOGGLE_BUTTON (buttonMMOptions[MMIMPROPER])->active; forceFieldOptions.nonBonded = GTK_TOGGLE_BUTTON (buttonMMOptions[MMNONBOND])->active; forceFieldOptions.hydrogenBonded = GTK_TOGGLE_BUTTON (buttonMMOptions[MMHBOND])->active; forceFieldOptions.coulomb = GTK_TOGGLE_BUTTON (buttonMMOptions[MMCOULOMB])->active; forceFieldOptions.vanderWals = GTK_TOGGLE_BUTTON (buttonMMOptions[PWVANDERWALS])->active; forceFieldOptions.rattleConstraints = NOCONSTRAINTS; if(GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSCONSTRAINTS])->active) forceFieldOptions.rattleConstraints = BONDSCONSTRAINTS; if(GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSANGLESCONSTRAINTS])->active) forceFieldOptions.rattleConstraints = BONDSANGLESCONSTRAINTS; if(GTK_TOGGLE_BUTTON (buttonTypesOptions[AMBER])->active ) forceFieldOptions.type = AMBER; else if(GTK_TOGGLE_BUTTON (buttonTypesOptions[PAIRWISE])->active ) { forceFieldOptions.coulomb = GTK_TOGGLE_BUTTON (buttonMMOptions[PWCOULOMB])->active; forceFieldOptions.type = PAIRWISE; } updateFrequency = atoi(gtk_entry_get_text(GTK_ENTRY(entryMDRafresh))); if(updateFrequency<0) updateFrequency = 0; heatTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[0]))); equiTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[1]))); runTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[2]))); coolTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[3]))); heatTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[0]))); runTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[2]))); /* equiTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[1])));*/ equiTemp = runTemp; coolTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[3]))); stepSize = atof(gtk_entry_get_text(GTK_ENTRY(entryMDStepSize))); if(GTK_TOGGLE_BUTTON (buttonMDOptions[BEEMAN])->active) integrator = BEEMAN; if(GTK_TOGGLE_BUTTON (buttonMDOptions[STOCHASTIC])->active) integrator = STOCHASTIC; if(GTK_TOGGLE_BUTTON (buttonMDThermOptions[ANDERSEN])->active) thermostat = ANDERSEN; if(GTK_TOGGLE_BUTTON (buttonMDThermOptions[BERENDSEN])->active) thermostat = BERENDSEN; if(GTK_TOGGLE_BUTTON (buttonMDThermOptions[BUSSI])->active) thermostat = BUSSI; if( integrator == STOCHASTIC) friction = atof(gtk_entry_get_text(GTK_ENTRY(entrySDFriction))); collide = atof(gtk_entry_get_text(GTK_ENTRY(entrySDCollide))); if(heatTime<0) heatTime = 1; if(equiTime<0) equiTime = 1; if(runTime<0) runTime = 1; if(coolTime<0) coolTime = 4; if(heatTemp<0) heatTemp = 0; if(equiTemp<0) runTemp = 300; if(runTemp<0) runTemp = 300; if(coolTemp<0) coolTemp = 0; if(stepSize<0) stepSize = 1.0; if(stepSize>5) stepSize = 5.0; if(GTK_TOGGLE_BUTTON (buttonSaveTraj)->active) { gchar* dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileNameTraj))); if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR) fileNameTraj = g_strdup_printf("%s%s%s",dirName, G_DIR_SEPARATOR_S,tmp); else fileNameTraj = g_strdup_printf("%s%s",dirName, tmp); g_free(tmp); g_free(dirName); } if(GTK_TOGGLE_BUTTON (buttonSaveProp)->active) { gchar* dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileNameProp))); if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR) fileNameProp = g_strdup_printf("%s%s%s",dirName, G_DIR_SEPARATOR_S,tmp); else fileNameProp = g_strdup_printf("%s%s",dirName, tmp); g_free(tmp); g_free(dirName); printf("fileNameProp = %s\n", fileNameProp); } gtk_widget_destroy(Win); while( gtk_events_pending() ) gtk_main_iteration(); set_sensitive_stop_button( TRUE); StopCalcul = FALSE; if(forceFieldOptions.type==AMBER) forceField = createAmberModel(geometry0,Natoms,forceFieldOptions); else if(forceFieldOptions.type==PAIRWISE) forceField = createPairWiseModel(geometry0,Natoms,forceFieldOptions); if(StopCalcul) { set_text_to_draw(" "); set_statubar_operation_str(_("Calculation canceled")); drawGeom(); set_sensitive_stop_button( FALSE); return; } set_sensitive_stop_button( TRUE); { gint i; for(i=0;i<4;i++) NumSelAtoms[i] = -1; change_of_center(NULL,NULL); } runMolecularDynamics(&molecularDynamics, &forceField, updateFrequency, heatTime, equiTime, runTime, coolTime, heatTemp, equiTemp, runTemp, coolTemp, stepSize, integrator, thermostat, friction, collide, fileNameTraj, fileNameProp); if(StopCalcul) { set_text_to_draw(" "); set_statubar_operation_str(_("Calculation canceled")); drawGeom(); } set_sensitive_stop_button( FALSE); set_text_to_draw(" "); freeForceField(&forceField); } /********************************************************************************/ static void AddDynamicsOptionsDlg(GtkWidget *NoteBook, GtkWidget *win) { gint i; gint j; GtkWidget *frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vbox; GtkWidget *table; GtkWidget* label; GtkWidget *hseparator = NULL; frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(frame), 5); LabelOnglet = gtk_label_new("Molecular Dynamics Options"); LabelMenu = gtk_label_new("Molecular Dynamics Options"); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu); g_object_set_data (G_OBJECT (frame), "frame", frame); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (frame), vbox); table = gtk_table_new(20,6,FALSE); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; j = 2; label = gtk_label_new("Heating"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 3; label = gtk_label_new("Equilibrium"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 4; label = gtk_label_new("Production"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 5; label = gtk_label_new("Cooling"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 0; label = gtk_label_new("Time (ps)"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 2; entryMDTimes[0] = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryMDTimes[0]),"1.0"); gtk_widget_set_size_request(entryMDTimes[0], 60, -1); gtk_table_attach(GTK_TABLE(table),entryMDTimes[0], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 3; entryMDTimes[1] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTimes[1], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTimes[1]),"1.0"); gtk_table_attach(GTK_TABLE(table),entryMDTimes[1], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 4; entryMDTimes[2] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTimes[2], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTimes[2]),"4.0"); gtk_table_attach(GTK_TABLE(table),entryMDTimes[2], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 5; entryMDTimes[3] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTimes[3], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTimes[3]),"4.0"); gtk_table_attach(GTK_TABLE(table),entryMDTimes[3], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 2; j = 0; label = gtk_label_new("Temperature (K)"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 2; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 2; j = 2; entryMDTemperature[0] = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[0]),"0.0"); gtk_widget_set_size_request(entryMDTemperature[0], 60, -1); gtk_table_attach(GTK_TABLE(table),entryMDTemperature[0], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ /* i = 2; j = 3; entryMDTemperature[1] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTemperature[1], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[1]),"300.0"); gtk_table_attach(GTK_TABLE(table),entryMDTemperature[1], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); */ /*----------------------------------------------------------------------------------*/ i = 2; j = 4; entryMDTemperature[2] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTemperature[2], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[2]),"300.0"); gtk_table_attach(GTK_TABLE(table),entryMDTemperature[2], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 2; j = 5; entryMDTemperature[3] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTemperature[3], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[3]),"0.0"); gtk_table_attach(GTK_TABLE(table),entryMDTemperature[3], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 3; j = 0; label = gtk_label_new("Step size (fs)"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 3; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 3; j = 2; entryMDStepSize = gtk_entry_new(); gtk_widget_set_size_request(entryMDStepSize, 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDStepSize),"1.0"); gtk_table_attach(GTK_TABLE(table),entryMDStepSize, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 4; j = 0; label = gtk_label_new("Screen Rafresh after"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 4; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 4; j = 2; entryMDRafresh = gtk_entry_new(); gtk_widget_set_size_request(entryMDRafresh, 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDRafresh),"5"); gtk_table_attach(GTK_TABLE(table),entryMDRafresh, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 4; j = 3; label = gtk_label_new("steps"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 5; j = 0; label = gtk_label_new("Collide(ps^-1)"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 5; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 5; j = 2; entrySDCollide = gtk_entry_new(); gtk_widget_set_size_request(entrySDCollide, 60, -1); gtk_entry_set_text(GTK_ENTRY(entrySDCollide),"20.0"); gtk_table_attach(GTK_TABLE(table),entrySDCollide, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 6; j = 0; label = gtk_label_new("Friction(ps^-1)"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 6; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 6; j = 2; entrySDFriction = gtk_entry_new(); gtk_widget_set_size_request(entrySDFriction, 60, -1); gtk_entry_set_text(GTK_ENTRY(entrySDFriction),"40.0"); gtk_table_attach(GTK_TABLE(table),entrySDFriction, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /* THERMOSTAT */ /*----------------------------------------------------------------------------------*/ i = 3; j = 4; buttonMDThermOptions[NONE]= gtk_radio_button_new_with_label( NULL, "NVE"); gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[NONE], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[NONE]), TRUE); /*----------------------------------------------------------------------------------*/ i = 4; j = 4; buttonMDThermOptions[BERENDSEN]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDThermOptions[NONE])), "Berendsen"); gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[BERENDSEN], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[BERENDSEN]), FALSE); /*----------------------------------------------------------------------------------*/ i = 5; j = 4; buttonMDThermOptions[ANDERSEN]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDThermOptions[NONE])), "Andersen"); gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[ANDERSEN], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[ANDERSEN]), FALSE); /*----------------------------------------------------------------------------------*/ i = 6; j = 4; buttonMDThermOptions[BUSSI]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDThermOptions[NONE])), "Bussi"); gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[BUSSI], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[BUSSI]), FALSE); /*----------------------------------------------------------------------------------*/ i = 7; j = 0; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),hseparator, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 8; j = 0; buttonMDOptions[VERLET]= gtk_radio_button_new_with_label( NULL, "MD Trajectory via Verlet velocity Algorithm"); gtk_table_attach(GTK_TABLE(table),buttonMDOptions[VERLET], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDOptions[VERLET]), TRUE); /*----------------------------------------------------------------------------------*/ i = 9; j = 0; buttonMDOptions[BEEMAN]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDOptions[VERLET])), "MD Trajectory via Modified Beeman Algorithm"); gtk_table_attach(GTK_TABLE(table),buttonMDOptions[BEEMAN], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDOptions[BEEMAN]), FALSE); /*----------------------------------------------------------------------------------*/ i = 10; j = 0; buttonMDOptions[STOCHASTIC]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDOptions[VERLET])), "Stochastic Dynamics via Verlet velocity Algorithm"); gtk_table_attach(GTK_TABLE(table),buttonMDOptions[STOCHASTIC], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDOptions[STOCHASTIC]), FALSE); /*----------------------------------------------------------------------------------*/ i = 11; j = 0; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),hseparator, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 12; j = 0; buttonConstraintsOptions[NOCONSTRAINTS]= gtk_radio_button_new_with_label( NULL, "No constraints"); gtk_table_attach(GTK_TABLE(table),buttonConstraintsOptions[NOCONSTRAINTS], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonConstraintsOptions[NOCONSTRAINTS]), TRUE); /*----------------------------------------------------------------------------------*/ i = 13; j = 0; buttonConstraintsOptions[BONDSCONSTRAINTS]= gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonConstraintsOptions[NOCONSTRAINTS])), "Bond constraints"); gtk_table_attach(GTK_TABLE(table),buttonConstraintsOptions[BONDSCONSTRAINTS], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSCONSTRAINTS]), FALSE); /*----------------------------------------------------------------------------------*/ i = 14; j = 0; buttonConstraintsOptions[BONDSANGLESCONSTRAINTS]= gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonConstraintsOptions[NOCONSTRAINTS])), "Bond & Angle constraints"); gtk_table_attach(GTK_TABLE(table),buttonConstraintsOptions[BONDSANGLESCONSTRAINTS], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSANGLESCONSTRAINTS]), FALSE); /*----------------------------------------------------------------------------------*/ i = 15; j = 0; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),hseparator, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 16; j = 0; buttonSaveTraj = gtk_check_button_new_with_label("Save Trajectory in "); gtk_table_attach(GTK_TABLE(table),buttonSaveTraj, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonSaveTraj), FALSE); /*----------------------------------------------------------------------------------*/ i = 16; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 16; j = 2; entryFileNameTraj = gtk_entry_new(); gtk_widget_set_size_request(entryFileNameTraj, 60, -1); gtk_entry_set_text(GTK_ENTRY(entryFileNameTraj),"traj.gab"); gtk_table_attach(GTK_TABLE(table),entryFileNameTraj, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 17; j = 0; buttonSaveProp = gtk_check_button_new_with_label("Save Properties in "); gtk_table_attach(GTK_TABLE(table),buttonSaveProp, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonSaveProp), FALSE); /*----------------------------------------------------------------------------------*/ i = 17; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 17; j = 2; entryFileNameProp = gtk_entry_new(); gtk_widget_set_size_request(entryFileNameProp, 60, -1); gtk_entry_set_text(GTK_ENTRY(entryFileNameProp),"prop.txt"); gtk_table_attach(GTK_TABLE(table),entryFileNameProp, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 18; j = 0; label = gtk_label_new("Folder"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 18; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 18; j = 2; buttonDirSelector = gabedit_dir_button(); gtk_table_attach(GTK_TABLE(table),buttonDirSelector, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); } /********************************************************************************/ static void setSpinMultiplicityComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity, gint spin) { GtkWidget *entry = NULL; gchar* t = NULL; if(!comboSpinMultiplicity) return; entry = GTK_BIN (comboSpinMultiplicity)->child; t = g_strdup_printf("%d",spin); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /**********************************************************************/ static void setComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity) { GList *glist = NULL; gint i; gint nlist = 0; gchar** list = NULL; gint k; gint kinc; gint ne = get_number_electrons(0) - totalCharge; if(ne%2==0) nlist = ne/2+1; else nlist = (ne+1)/2; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;i=0;i--) glist = g_list_append(glist,list[i]); gtk_combo_box_entry_set_popdown_strings( comboSpinMultiplicity, glist) ; gtk_combo_box_set_active(GTK_COMBO_BOX(comboSpinMultiplicity), nlist-1); g_list_free(glist); if( SpinMultiplicities[0]%2 == atoi(list[0])%2) setSpinMultiplicityComboSpinMultiplicity(comboSpinMultiplicity, SpinMultiplicities[0]); else SpinMultiplicities[0] = atoi(list[0]); if(list) { for(i=0;ichild; t = g_strdup_printf("%d",charge); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /********************************************************************************/ static void setComboCharge(GtkWidget *comboCharge) { GList *glist = NULL; gint i; gint nlist; gchar** list = NULL; gint k; gint c = (gint)(0.5+get_sum_charges()); gint ic = 0; nlist = get_number_electrons(0)*2-2+1; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;i=0;i--) glist = g_list_append(glist,list[i]); gtk_combo_box_entry_set_popdown_strings( comboCharge, glist) ; gtk_combo_box_set_active(GTK_COMBO_BOX(comboCharge), nlist-ic-1); totalCharge = atoi(list[ic]); g_list_free(glist); if(list) { for(i=0;ichild; g_object_set_data(G_OBJECT (entry), "Combo",combo); gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.2),-1); return entry; } /**********************************************************************/ static GtkWidget *addChargeOfMoleculeToTable(GtkWidget *table, gint i) { GtkWidget* entryCharge = NULL; GtkWidget* comboCharge = NULL; gint nlistCharge = 1; gchar* listCharge[] = {"0"}; add_label_table(table,"Charge",(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryCharge = addComboListToATable(table, listCharge, nlistCharge, i, 2, 1); comboCharge = g_object_get_data(G_OBJECT (entryCharge), "Combo"); gtk_widget_set_sensitive(entryCharge, FALSE); return comboCharge; } /**********************************************************************/ static GtkWidget *addSpinOfMoleculeToTable(GtkWidget *table, gint i) { GtkWidget* entrySpinMultiplicity = NULL; GtkWidget* comboSpinMultiplicity = NULL; gint nlistspinMultiplicity = 1; gchar* listspinMultiplicity[] = {"0"}; add_label_table(table,"Spin multiplicity",(gushort)i,0); add_label_table(table,":",(gushort)i,1); entrySpinMultiplicity = addComboListToATable(table, listspinMultiplicity, nlistspinMultiplicity, i, 2, 1); comboSpinMultiplicity = g_object_get_data(G_OBJECT (entrySpinMultiplicity), "Combo"); gtk_widget_set_sensitive(entrySpinMultiplicity, FALSE); return comboSpinMultiplicity; } /**********************************************************************/ static void createInfoMDFrame(GtkWidget *box) { GtkWidget* frame; GtkWidget* hboxFrame; GtkWidget *label = NULL; frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, FALSE, FALSE, 0); hboxFrame = gtk_hbox_new (FALSE, 3); gtk_widget_show (hboxFrame); gtk_container_add (GTK_CONTAINER (frame), hboxFrame); label = gtk_label_new( "If \"MD Trajectory via Verlet velocity Algorithm\" is selected :\n" " A molecular dynamic simulation is run using the Verlet velocity Algorithm.\n" " During the production step, the user can select the Andersen or Berendsen thermostat which is then applied.\n" " The Berendsen thermostat is applied for Heating, Equilibrium and Cooling steps.\n" "\n" "If \"MD Trajectory via Modified Beeman Algorithm\" is selected :\n" " A molecular dynamic simulation is run using the Modified Beeman Algorithm.\n" " During the production step, the user can select the Andersen or Berendsen thermostat which is then applied.\n" " The Berendsen thermostat is applied for Heating, Equilibrium and Cooling steps.\n" "\n" "If \"Stochastic Dynamics via Verlet velocity Algorithm\" is selected :\n" " A stochastic dynamic simulation is run using Verlet velocity Algorithm.\n" " The velocities are scaled (Berendsen method)during the Heating, Equilibrium and Cooling steps.\n" ); gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hboxFrame), label, FALSE, FALSE, 5); } /**********************************************************************/ static void createInfoConfoFrame(GtkWidget *box) { GtkWidget* frame; GtkWidget* hboxFrame; GtkWidget *label = NULL; frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, FALSE, FALSE, 0); hboxFrame = gtk_hbox_new (FALSE, 3); gtk_widget_show (hboxFrame); gtk_container_add (GTK_CONTAINER (frame), hboxFrame); label = gtk_label_new( "During the production stage, Gabedit selects a number geometries." "\nAt the end of the molecular dynamic simulation, each selected geometry is optimized." "\nThe very similar molecular strcutures can be removed." "\nFinally the geometries are sorted by energy and are saved in a file." "\nGabedit can also optimize these geometries, interactively, by Mopac or by FireFly." "\nGabedit can also creates input files for mopac, FireFly or Gaussian for a post processing." "\n\n" "If \"MD Trajectory via Verlet velocity Algorithm\" is selected :\n" " A molecular dynamic simulation is run using the Verlet velocity Algorithm.\n" " During the production step, the user can select the Andersen or Berendsen thermostat which is then applied.\n" " The Berendsen thermostat is applied for Heating, Equilibrium and Cooling steps.\n" "\n" "If \"MD Trajectory via Modified Beeman Algorithm\" is selected :\n" " A molecular dynamic simulation is run using the Modified Beeman Algorithm.\n" " During the production step, the user can select the Andersen or Berendsen thermostat which is then applied.\n" " The Berendsen thermostat is applied for Heating, Equilibrium and Cooling steps.\n" "\n" "If \"Stochastic Dynamics via Verlet velocity Algorithm\" is selected :\n" " A stochastic dynamic simulation is run using Verlet velocity Algorithm.\n" " The velocities are scaled (Berendsen method)during the Heating, Equilibrium and Cooling steps.\n" ); gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hboxFrame), label, FALSE, FALSE, 5); } /**********************************************************************/ static void createPostProcessingFrame(GtkWidget *box) { GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget* comboSpinMultiplicity = NULL; GtkWidget* comboCharge = NULL; GtkWidget *table = NULL; GtkWidget *label = NULL; GtkWidget *sep = NULL; gint i; gint j; totalCharge = TotalCharges[0]; spinMultiplicity=SpinMultiplicities[0]; table = gtk_table_new(14,5,FALSE); frame = gtk_frame_new ("Post Processing"); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; j = 0; label = gtk_label_new("Remove identical molecular structures"); gtk_table_attach(GTK_TABLE(table),label, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; j = 0; buttonTolerance[TOLE] = gtk_check_button_new_with_label("Energy tolerance(KCal/mol)"); gtk_table_attach(GTK_TABLE(table),buttonTolerance[TOLE], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonTolerance[TOLE]), TRUE); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryTolerance[TOLE] = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryTolerance[TOLE]),"1e-2"); gtk_widget_set_size_request(GTK_WIDGET(entryTolerance[TOLE]),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryTolerance[TOLE], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; j = 0; buttonTolerance[TOLD] = gtk_check_button_new_with_label("Distance tolerance(Angstrom)"); gtk_table_attach(GTK_TABLE(table),buttonTolerance[TOLD], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonTolerance[TOLD]), TRUE); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryTolerance[TOLD] = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryTolerance[TOLD]),"1e-2"); gtk_widget_set_size_request(GTK_WIDGET(entryTolerance[TOLD]),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryTolerance[TOLD], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; j = 0; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; j = 0; buttonPostMMOpt = gtk_check_button_new_with_label("Interactive minimization by MM"); gtk_table_attach(GTK_TABLE(table),buttonPostMMOpt, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonPostMMOpt), TRUE); gtk_widget_show (buttonPostMMOpt); i++; /*----------------------------------------------------------------------------------*/ j = 0; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; j = 0; buttonPostNone =gtk_radio_button_new_with_label( NULL,"None inteactive post processing"); gtk_table_attach(GTK_TABLE(table),buttonPostNone, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonPostNone), TRUE); gtk_widget_show (buttonPostNone); /*----------------------------------------------------------------------------------*/ i++; j = 0; buttonPostPM6Mopac = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonPostNone)), "Interactive minimization by Mopac(PM6)"); gtk_table_attach(GTK_TABLE(table),buttonPostPM6Mopac, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonPostPM6Mopac), FALSE); gtk_widget_show (buttonPostPM6Mopac); /*----------------------------------------------------------------------------------*/ i++; j = 0; buttonPostAM1Mopac = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonPostNone)), "Interactive minimization by Mopac(AM1)"); gtk_table_attach(GTK_TABLE(table),buttonPostAM1Mopac, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonPostAM1Mopac), FALSE); gtk_widget_show (buttonPostAM1Mopac); /*----------------------------------------------------------------------------------*/ i++; j = 0; buttonPostFireFly = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonPostNone)), "Interactive minimization by FireFly(AM1)"); gtk_table_attach(GTK_TABLE(table),buttonPostFireFly, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonPostFireFly), FALSE); gtk_widget_show (buttonPostFireFly); /*----------------------------------------------------------------------------------*/ i++; j = 0; sep = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),sep, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; j = 0; buttonCreateMopac = gtk_check_button_new_with_label("Create Mopac files. Keywords "); gtk_table_attach(GTK_TABLE(table),buttonCreateMopac, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCreateMopac), FALSE); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryMopacKeywords = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryMopacKeywords),"PM6 XYZ AUX"); gtk_table_attach(GTK_TABLE(table),entryMopacKeywords, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; j = 0; buttonCreateGaussian = gtk_check_button_new_with_label("Create Gaussian files. Keywords "); gtk_table_attach(GTK_TABLE(table),buttonCreateGaussian, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCreateGaussian), FALSE); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryGaussianKeywords = gtk_entry_new(); gtk_widget_set_size_request(entryGaussianKeywords, 60, -1); gtk_entry_set_text(GTK_ENTRY(entryGaussianKeywords),"B3LYP/6-31G* Opt"); gtk_table_attach(GTK_TABLE(table),entryGaussianKeywords, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; j = 0; buttonCreateFireFly = gtk_check_button_new_with_label("Create FireFly files. Keywords "); gtk_table_attach(GTK_TABLE(table),buttonCreateFireFly, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCreateFireFly), FALSE); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryFireFlyKeywords = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryFireFlyKeywords),"RUNTYP=Optimize GBASIS=AM1"); gtk_table_attach(GTK_TABLE(table),entryFireFlyKeywords, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; comboCharge = addChargeOfMoleculeToTable(table, i); /*----------------------------------------------------------------------------------*/ i++; comboSpinMultiplicity = addSpinOfMoleculeToTable(table, i); /*----------------------------------------------------------------------------------*/ if(GTK_IS_COMBO_BOX(comboCharge)) g_object_set_data(G_OBJECT (GTK_BIN(comboCharge)->child), "ComboSpinMultiplicity", comboSpinMultiplicity); setComboCharge(comboCharge); setComboSpinMultiplicity(comboSpinMultiplicity); entryCharge = GTK_WIDGET(GTK_BIN(comboCharge)->child); entrySpinMultiplicity = GTK_WIDGET(GTK_BIN(comboSpinMultiplicity)->child); g_signal_connect(G_OBJECT(entryCharge),"changed", G_CALLBACK(changedEntryCharge),NULL); } /********************************************************************************/ static void AddInfoConfo(GtkWidget *NoteBook, GtkWidget *win) { GtkWidget *frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vbox; frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(frame), 5); LabelOnglet = gtk_label_new("Info"); LabelMenu = gtk_label_new("Info"); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu); g_object_set_data (G_OBJECT (frame), "frame", frame); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); createInfoConfoFrame(vbox); } /********************************************************************************/ static void AddInfoMD(GtkWidget *NoteBook, GtkWidget *win) { GtkWidget *frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vbox; frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(frame), 5); LabelOnglet = gtk_label_new("Info"); LabelMenu = gtk_label_new("Info"); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu); g_object_set_data (G_OBJECT (frame), "frame", frame); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); createInfoMDFrame(vbox); } /********************************************************************************/ static void AddGeneralConfoOptionsDlg(GtkWidget *NoteBook, GtkWidget *win) { gint i; gint j; GtkWidget *frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vbox; GtkWidget *table; GtkWidget *label; frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(frame), 5); LabelOnglet = gtk_label_new("General"); LabelMenu = gtk_label_new("General"); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu); g_object_set_data (G_OBJECT (frame), "frame", frame); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox); table = gtk_table_new(8,5,FALSE); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; j = 0; add_label_table(table,"Number of selected geometries",(gushort)i,(gushort)j); /*----------------------------------------------------------------------------------*/ i = 0; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 2; entryNumberOfGeom = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryNumberOfGeom),"10"); gtk_widget_set_size_request(GTK_WIDGET(entryNumberOfGeom),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryNumberOfGeom, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 0; add_label_table(table,"Geometries saved in File",(gushort)i,(gushort)j); /*----------------------------------------------------------------------------------*/ i = 1; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 2; entryFileNameGeom = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryFileNameGeom),"conf.gab"); gtk_widget_set_size_request(GTK_WIDGET(entryFileNameGeom),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryFileNameGeom, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 2; j = 0; add_label_table(table,"Folder",(gushort)i,(gushort)j); /*----------------------------------------------------------------------------------*/ i = 2; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 2; j = 2; buttonDirSelector = gabedit_dir_button(); gtk_widget_set_size_request(GTK_WIDGET(buttonDirSelector),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),buttonDirSelector, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 3; j = 0; vbox = gtk_vbox_new (FALSE, 0); gtk_table_attach(GTK_TABLE(table),vbox, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); createPostProcessingFrame(vbox); } /********************************************************************************/ static void AddDynamicsConfoOptionsDlg(GtkWidget *NoteBook, GtkWidget *win) { gint i; gint j; GtkWidget *frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vbox; GtkWidget *table; GtkWidget* label; GtkWidget *hseparator = NULL; frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(frame), 5); LabelOnglet = gtk_label_new("Molecular Dynamics"); LabelMenu = gtk_label_new("Molecular Dynamics"); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu); g_object_set_data (G_OBJECT (frame), "frame", frame); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (frame), vbox); table = gtk_table_new(20,6,FALSE); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; j = 2; label = gtk_label_new("Heating"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 3; label = gtk_label_new("Equilibrium"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 0; j = 4; label = gtk_label_new("Production"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 0; label = gtk_label_new("Time (ps)"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 2; entryMDTimes[0] = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryMDTimes[0]),"0.0"); gtk_widget_set_size_request(entryMDTimes[0], 60, -1); gtk_table_attach(GTK_TABLE(table),entryMDTimes[0], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 3; entryMDTimes[1] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTimes[1], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTimes[1]),"0.0"); gtk_table_attach(GTK_TABLE(table),entryMDTimes[1], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 1; j = 4; entryMDTimes[2] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTimes[2], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTimes[2]),"10.0"); gtk_table_attach(GTK_TABLE(table),entryMDTimes[2], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 2; j = 0; label = gtk_label_new("Temperature (K)"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 2; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 2; j = 2; entryMDTemperature[0] = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[0]),"0.0"); gtk_widget_set_size_request(entryMDTemperature[0], 60, -1); gtk_table_attach(GTK_TABLE(table),entryMDTemperature[0], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ /* i = 2; j = 3; entryMDTemperature[1] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTemperature[1], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[1]),"1000.0"); gtk_table_attach(GTK_TABLE(table),entryMDTemperature[1], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); */ /*----------------------------------------------------------------------------------*/ i = 2; j = 4; entryMDTemperature[2] = gtk_entry_new(); gtk_widget_set_size_request(entryMDTemperature[2], 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[2]),"1000.0"); gtk_table_attach(GTK_TABLE(table),entryMDTemperature[2], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 3; j = 0; label = gtk_label_new("Step size (fs)"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 3; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 3; j = 2; entryMDStepSize = gtk_entry_new(); gtk_widget_set_size_request(entryMDStepSize, 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDStepSize),"1.0"); gtk_table_attach(GTK_TABLE(table),entryMDStepSize, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 4; j = 0; label = gtk_label_new("Screen Rafresh after"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 4; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 4; j = 2; entryMDRafresh = gtk_entry_new(); gtk_widget_set_size_request(entryMDRafresh, 60, -1); gtk_entry_set_text(GTK_ENTRY(entryMDRafresh),"5"); gtk_table_attach(GTK_TABLE(table),entryMDRafresh, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 4; j = 3; label = gtk_label_new("steps"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 5; j = 0; label = gtk_label_new("Collide(ps^-1)"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 5; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 5; j = 2; entrySDCollide = gtk_entry_new(); gtk_widget_set_size_request(entrySDCollide, 60, -1); gtk_entry_set_text(GTK_ENTRY(entrySDCollide),"20.0"); gtk_table_attach(GTK_TABLE(table),entrySDCollide, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 6; j = 0; label = gtk_label_new("Friction(ps^-1)"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 6; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 6; j = 2; entrySDFriction = gtk_entry_new(); gtk_widget_set_size_request(entrySDFriction, 60, -1); gtk_entry_set_text(GTK_ENTRY(entrySDFriction),"40.0"); gtk_table_attach(GTK_TABLE(table),entrySDFriction, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /* THERMOSTAT */ /*----------------------------------------------------------------------------------*/ i = 3; j = 4; buttonMDThermOptions[NONE]= gtk_radio_button_new_with_label( NULL, "NVE"); gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[NONE], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[NONE]), TRUE); /*----------------------------------------------------------------------------------*/ i = 4; j = 4; buttonMDThermOptions[BERENDSEN]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDThermOptions[NONE])), "Berendsen"); gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[BERENDSEN], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[BERENDSEN]), FALSE); /*----------------------------------------------------------------------------------*/ i = 5; j = 4; buttonMDThermOptions[ANDERSEN]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDThermOptions[NONE])), "Andersen"); gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[ANDERSEN], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[ANDERSEN]), FALSE); /*----------------------------------------------------------------------------------*/ i = 6; j = 4; buttonMDThermOptions[BUSSI]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDThermOptions[NONE])), "Bussi"); gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[BUSSI], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[BUSSI]), FALSE); /*----------------------------------------------------------------------------------*/ i = 7; j = 0; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),hseparator, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 8; j = 0; buttonMDOptions[VERLET]= gtk_radio_button_new_with_label( NULL, "MD Trajectory via Verlet velocity Algorithm"); gtk_table_attach(GTK_TABLE(table),buttonMDOptions[VERLET], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDOptions[VERLET]), TRUE); /*----------------------------------------------------------------------------------*/ i = 9; j = 0; buttonMDOptions[BEEMAN]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDOptions[VERLET])), "MD Trajectory via Modified Beeman Algorithm"); gtk_table_attach(GTK_TABLE(table),buttonMDOptions[BEEMAN], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDOptions[BEEMAN]), FALSE); /*----------------------------------------------------------------------------------*/ i = 10; j = 0; buttonMDOptions[STOCHASTIC]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDOptions[VERLET])), "Stochastic Dynamics via Verlet velocity Algorithm"); gtk_table_attach(GTK_TABLE(table),buttonMDOptions[STOCHASTIC], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDOptions[STOCHASTIC]), FALSE); /*----------------------------------------------------------------------------------*/ i = 11; j = 0; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),hseparator, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 12; j = 0; buttonConstraintsOptions[NOCONSTRAINTS]= gtk_radio_button_new_with_label( NULL, "No constraints"); gtk_table_attach(GTK_TABLE(table),buttonConstraintsOptions[NOCONSTRAINTS], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonConstraintsOptions[NOCONSTRAINTS]), TRUE); /*----------------------------------------------------------------------------------*/ i = 13; j = 0; buttonConstraintsOptions[BONDSCONSTRAINTS]= gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonConstraintsOptions[NOCONSTRAINTS])), "Bond constraints"); gtk_table_attach(GTK_TABLE(table),buttonConstraintsOptions[BONDSCONSTRAINTS], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSCONSTRAINTS]), FALSE); /*----------------------------------------------------------------------------------*/ i = 14; j = 0; buttonConstraintsOptions[BONDSANGLESCONSTRAINTS]= gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonConstraintsOptions[NOCONSTRAINTS])), "Bond & Angle constraints"); gtk_table_attach(GTK_TABLE(table),buttonConstraintsOptions[BONDSANGLESCONSTRAINTS], j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSANGLESCONSTRAINTS]), FALSE); /*----------------------------------------------------------------------------------*/ i = 15; j = 0; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),hseparator, j,j+6,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 16; j = 0; buttonSaveTraj = gtk_check_button_new_with_label("Save Trajectory in "); gtk_table_attach(GTK_TABLE(table),buttonSaveTraj, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonSaveTraj), FALSE); /*----------------------------------------------------------------------------------*/ i = 16; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 16; j = 2; entryFileNameTraj = gtk_entry_new(); gtk_widget_set_size_request(entryFileNameTraj, 60, -1); gtk_entry_set_text(GTK_ENTRY(entryFileNameTraj),"traj.gab"); gtk_table_attach(GTK_TABLE(table),entryFileNameTraj, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 17; j = 0; buttonSaveProp = gtk_check_button_new_with_label("Save Properties in "); gtk_table_attach(GTK_TABLE(table),buttonSaveProp, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonSaveProp), FALSE); /*----------------------------------------------------------------------------------*/ i = 17; j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 17; j = 2; entryFileNameProp = gtk_entry_new(); gtk_widget_set_size_request(entryFileNameProp, 60, -1); gtk_entry_set_text(GTK_ENTRY(entryFileNameProp),"prop.txt"); gtk_table_attach(GTK_TABLE(table),entryFileNameProp, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); } /*****************************************************************************/ static void amberMinimize(GtkWidget* Win, gpointer data) { ForceField forceField; ForceFieldOptions forceFieldOptions; SteepestDescent steepestDescent; ConjugateGradient conjugateGradient; QuasiNewton quasiNewton; gboolean useConjugateGradient; gboolean useQuasiNewton; ConjugateGradientOptions conjugateGradientOptions; conjugateGradientOptions.gradientNorm = 1e-3; conjugateGradientOptions.maxIterations = 100; conjugateGradientOptions.updateFrequency = 1; conjugateGradientOptions.maxLines = 25; conjugateGradientOptions.initialStep = 0.001; conjugateGradientOptions.method = 1; forceFieldOptions.type = AMBER; forceFieldOptions.bondStretch = GTK_TOGGLE_BUTTON (buttonMMOptions[MMBOND])->active; forceFieldOptions.angleBend = GTK_TOGGLE_BUTTON (buttonMMOptions[MMBEND])->active; forceFieldOptions.dihedralAngle = GTK_TOGGLE_BUTTON (buttonMMOptions[MMTORSION])->active; forceFieldOptions.improperTorsion = GTK_TOGGLE_BUTTON (buttonMMOptions[MMIMPROPER])->active; forceFieldOptions.nonBonded = GTK_TOGGLE_BUTTON (buttonMMOptions[MMNONBOND])->active; forceFieldOptions.hydrogenBonded = GTK_TOGGLE_BUTTON (buttonMMOptions[MMHBOND])->active; forceFieldOptions.coulomb = GTK_TOGGLE_BUTTON (buttonMMOptions[MMCOULOMB])->active; forceFieldOptions.vanderWals = GTK_TOGGLE_BUTTON (buttonMMOptions[PWVANDERWALS])->active; forceFieldOptions.rattleConstraints = NOCONSTRAINTS; useConjugateGradient = GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADCONJUGATE])->active; useQuasiNewton = GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADQUASINEWTON])->active; conjugateGradientOptions.gradientNorm = atof(gtk_entry_get_text(GTK_ENTRY(entryMinimizeOptions[GRADEPSILON]))); conjugateGradientOptions.maxIterations = atoi(gtk_entry_get_text(GTK_ENTRY(entryMinimizeOptions[GRADMAXITERATIONS]))); conjugateGradientOptions.updateFrequency = atoi(gtk_entry_get_text(GTK_ENTRY(entryMinimizeOptions[GRADFREQUENCY]))); conjugateGradientOptions.initialStep = atof(gtk_entry_get_text(GTK_ENTRY(entryMinimizeOptions[GRADINITIALSTEP]))); conjugateGradientOptions.maxLines = atoi(gtk_entry_get_text(GTK_ENTRY(entryMinimizeOptions[GRADMAXLINES]))); quasiNewton.maxIterations = atoi(gtk_entry_get_text(GTK_ENTRY(entryMinimizeOptions[GRADMAXITERATIONS]))); quasiNewton.updateFrequency = atoi(gtk_entry_get_text(GTK_ENTRY(entryMinimizeOptions[GRADFREQUENCY]))); quasiNewton.epsilon = atof(gtk_entry_get_text(GTK_ENTRY(entryMinimizeOptions[GRADEPSILON]))); quasiNewton.tolerence = 1e-16; quasiNewton.maxLines = atoi(gtk_entry_get_text(GTK_ENTRY(entryMinimizeOptions[GRADMAXLINES]))); if(GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADHESTENES])->active) conjugateGradientOptions.method = 1; else if(GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADFLETCHER])->active) conjugateGradientOptions.method = 2; else if(GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADPOLAK])->active) conjugateGradientOptions.method = 3; else if(GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADWOLF])->active) conjugateGradientOptions.method = 4; if(GTK_TOGGLE_BUTTON (buttonTypesOptions[AMBER])->active ) forceFieldOptions.type = AMBER; else if(GTK_TOGGLE_BUTTON (buttonTypesOptions[PAIRWISE])->active ) { forceFieldOptions.coulomb = GTK_TOGGLE_BUTTON (buttonMMOptions[PWCOULOMB])->active; forceFieldOptions.type = PAIRWISE; } { gint i; for(i=0;i<4;i++) NumSelAtoms[i] = -1; change_of_center(NULL,NULL); } gtk_widget_destroy(Win); while( gtk_events_pending() ) gtk_main_iteration(); set_sensitive_stop_button( TRUE); StopCalcul = FALSE; if(forceFieldOptions.type==AMBER) forceField = createAmberModel(geometry0,Natoms,forceFieldOptions); else if(forceFieldOptions.type==PAIRWISE) forceField = createPairWiseModel(geometry0,Natoms,forceFieldOptions); if(StopCalcul) { set_text_to_draw(" "); set_statubar_operation_str(_("Calculation canceled")); drawGeom(); set_sensitive_stop_button( FALSE); return; } if(useConjugateGradient) { set_sensitive_stop_button( TRUE); runConjugateGradient(&conjugateGradient, &forceField, conjugateGradientOptions); if(StopCalcul) { set_text_to_draw(" "); set_statubar_operation_str(_("Calculation canceled")); drawGeom(); } set_sensitive_stop_button( FALSE); freeConjugateGradient(&conjugateGradient); } else if(useQuasiNewton) { set_sensitive_stop_button( TRUE); quasiNewton.forceField = &forceField; runQuasiNewton(&quasiNewton); if(StopCalcul) { set_text_to_draw(" "); set_statubar_operation_str(_("Calculation canceled")); drawGeom(); } set_sensitive_stop_button( FALSE); freeQuasiNewton(&quasiNewton); } else { set_sensitive_stop_button( TRUE); runSteepestDescent(&steepestDescent, &forceField, conjugateGradientOptions.updateFrequency, conjugateGradientOptions.maxIterations, conjugateGradientOptions.gradientNorm, conjugateGradientOptions.maxLines); if(StopCalcul) { set_text_to_draw(" "); set_statubar_operation_str(_("Calculation canceled")); drawGeom(); } set_sensitive_stop_button( FALSE); freeSteepestDescent(&steepestDescent); } freeForceField(&forceField); set_text_to_draw(" "); } /*****************************************************************************/ void amberEnergyCalculation(GtkWidget* Win, gpointer data) { gchar* str; ForceField forceField; ForceFieldOptions forceFieldOptions; gdouble gradientNorm = 0; gint i,j; forceFieldOptions.type = AMBER; forceFieldOptions.bondStretch = GTK_TOGGLE_BUTTON (buttonMMOptions[MMBOND])->active; forceFieldOptions.angleBend = GTK_TOGGLE_BUTTON (buttonMMOptions[MMBEND])->active; forceFieldOptions.dihedralAngle = GTK_TOGGLE_BUTTON (buttonMMOptions[MMTORSION])->active; forceFieldOptions.improperTorsion = GTK_TOGGLE_BUTTON (buttonMMOptions[MMIMPROPER])->active; forceFieldOptions.nonBonded = GTK_TOGGLE_BUTTON (buttonMMOptions[MMNONBOND])->active; forceFieldOptions.hydrogenBonded = GTK_TOGGLE_BUTTON (buttonMMOptions[MMHBOND])->active; forceFieldOptions.coulomb = GTK_TOGGLE_BUTTON (buttonMMOptions[MMCOULOMB])->active; forceFieldOptions.vanderWals = GTK_TOGGLE_BUTTON (buttonMMOptions[PWVANDERWALS])->active; forceFieldOptions.rattleConstraints = NOCONSTRAINTS; if(GTK_TOGGLE_BUTTON (buttonTypesOptions[AMBER])->active ) forceFieldOptions.type = AMBER; else if(GTK_TOGGLE_BUTTON (buttonTypesOptions[PAIRWISE])->active ) { forceFieldOptions.coulomb = GTK_TOGGLE_BUTTON (buttonMMOptions[PWCOULOMB])->active; forceFieldOptions.type = PAIRWISE; } gtk_widget_destroy(Win); while( gtk_events_pending() ) gtk_main_iteration(); set_sensitive_stop_button( TRUE); StopCalcul = FALSE; if(forceFieldOptions.type==AMBER) forceField = createAmberModel(geometry0,Natoms,forceFieldOptions); else if(forceFieldOptions.type==PAIRWISE) forceField = createPairWiseModel(geometry0,Natoms,forceFieldOptions); if(StopCalcul) { set_text_to_draw(" "); set_statubar_operation_str(_("Calculation canceled")); drawGeom(); set_sensitive_stop_button( FALSE); return; } forceField.klass->calculateEnergy(&forceField); forceField.klass->calculateGradient(&forceField); gradientNorm = 0; for ( i = 0; i < forceField.molecule.nAtoms; i++ ) for(j=0;j<3;j++) gradientNorm += forceField.molecule.gradient[j][i] *forceField.molecule.gradient[j][i]; str = g_strdup_printf(_("Gradient Norm = %f energy = %f(KCal/mol)"), sqrt(gradientNorm),forceField.molecule.energy); set_text_to_draw(str); set_statubar_operation_str(str); drawGeom(); set_sensitive_stop_button( FALSE); freeForceField(&forceField); set_text_to_draw(" "); g_free(str); } /***********************************************************************/ void sensitive_conjugate_gradient_buttons(GtkWidget *button, gpointer data) { gboolean useConjugateGradient; gboolean useQuasiNewton; gboolean Ok = FALSE; if(data != NULL) Ok = TRUE; useQuasiNewton = GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADQUASINEWTON])->active; useConjugateGradient = GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADCONJUGATE])->active; if(useConjugateGradient) { Ok = TRUE; gtk_widget_set_sensitive(buttonMinimizeOptions[GRADHESTENES], Ok); gtk_widget_set_sensitive(buttonMinimizeOptions[GRADFLETCHER], Ok); gtk_widget_set_sensitive(buttonMinimizeOptions[GRADPOLAK], Ok); gtk_widget_set_sensitive(buttonMinimizeOptions[GRADWOLF], Ok); gtk_widget_set_sensitive(entryMinimizeOptions[GRADMAXLINES], Ok); gtk_widget_set_sensitive(entryMinimizeOptions[GRADINITIALSTEP], Ok); gtk_entry_set_text(GTK_ENTRY(entryMinimizeOptions[GRADMAXLINES]),"25"); } else if(useQuasiNewton) { Ok = FALSE; gtk_widget_set_sensitive(buttonMinimizeOptions[GRADHESTENES], Ok); gtk_widget_set_sensitive(buttonMinimizeOptions[GRADFLETCHER], Ok); gtk_widget_set_sensitive(buttonMinimizeOptions[GRADPOLAK], Ok); gtk_widget_set_sensitive(buttonMinimizeOptions[GRADWOLF], Ok); gtk_widget_set_sensitive(entryMinimizeOptions[GRADMAXLINES], TRUE); gtk_widget_set_sensitive(entryMinimizeOptions[GRADINITIALSTEP], Ok); gtk_entry_set_text(GTK_ENTRY(entryMinimizeOptions[GRADMAXLINES]),"25"); } else { Ok = FALSE; gtk_widget_set_sensitive(buttonMinimizeOptions[GRADHESTENES], Ok); gtk_widget_set_sensitive(buttonMinimizeOptions[GRADFLETCHER], Ok); gtk_widget_set_sensitive(buttonMinimizeOptions[GRADPOLAK], Ok); gtk_widget_set_sensitive(buttonMinimizeOptions[GRADWOLF], Ok); gtk_widget_set_sensitive(entryMinimizeOptions[GRADMAXLINES], TRUE); gtk_widget_set_sensitive(entryMinimizeOptions[GRADINITIALSTEP], Ok); gtk_entry_set_text(GTK_ENTRY(entryMinimizeOptions[GRADMAXLINES]),"400"); } } /***********************************************************************/ static void AddGradientOptionsDlg(GtkWidget *NoteBook) { gint i; gint j; gint ifirst; GtkWidget *frame; GtkWidget *frame1; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vbox; GtkWidget *vbox1; GtkWidget *hbox; GtkWidget *table; GtkWidget* label; GtkWidget *vseparator = gtk_vseparator_new (); gchar *options[NGRADOPTIONS]={ "Use Quasi Newton ", "Use Steepest Descent ", "Use Comgugate Gradient ", "Hestenes-Stiefel Method", "Fletcher-Reeves Method", "Polak-Ribiere Method", "Wolf-Powell Method" }; gchar *entrylabels[NGRADENTRYS]={ "Maximum Iterations", "Epsilon", "Maximum Line Searches", "Step Size", "Screen Rafresh after" }; gchar *entryvalues[NGRADENTRYS]={ "10000", "0.0001", "25", "0.01", "1" }; frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(frame), 5); LabelOnglet = gtk_label_new(_("Gradient")); LabelMenu = gtk_label_new(_("Gradient")); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu); g_object_set_data (G_OBJECT (frame), "frame", frame); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (frame), vbox); frame1 = gtk_frame_new (NULL); gtk_widget_show (frame1); gtk_container_add (GTK_CONTAINER (vbox), frame1); gtk_frame_set_label_align (GTK_FRAME (frame1), 0.5, 0.5); vbox1 = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame1), vbox1); table = gtk_table_new(8,8,FALSE); gtk_box_pack_start (GTK_BOX (vbox1), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; j = 0; buttonMinimizeOptions[GRADQUASINEWTON]= gtk_radio_button_new_with_label( NULL, options[GRADQUASINEWTON]); gtk_table_attach(GTK_TABLE(table),buttonMinimizeOptions[GRADQUASINEWTON], j,j+2,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADQUASINEWTON]), TRUE); /*----------------------------------------------------------------------------------*/ i = 1; j = 0; buttonMinimizeOptions[GRADSTEEPEST]= gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMinimizeOptions[GRADQUASINEWTON])), options[GRADSTEEPEST]); gtk_table_attach(GTK_TABLE(table),buttonMinimizeOptions[GRADSTEEPEST], j,j+2,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADSTEEPEST]), FALSE); /*----------------------------------------------------------------------------------*/ i = 2; j = 0; buttonMinimizeOptions[GRADCONJUGATE] = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMinimizeOptions[GRADSTEEPEST])), options[GRADCONJUGATE]); gtk_table_attach(GTK_TABLE(table),buttonMinimizeOptions[GRADCONJUGATE], j,j+2,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADCONJUGATE]), TRUE); /*----------------------------------------------------------------------------------*/ i = 3; j = 0; label = gtk_label_new(" "); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i = 3; j = 1; buttonMinimizeOptions[GRADHESTENES] = gtk_radio_button_new_with_label(NULL,options[GRADHESTENES]); gtk_table_attach(GTK_TABLE(table),buttonMinimizeOptions[GRADHESTENES], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADHESTENES]), TRUE); /*----------------------------------------------------------------------------------*/ i = 4; j = 1; buttonMinimizeOptions[GRADFLETCHER] = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMinimizeOptions[GRADHESTENES])), options[GRADFLETCHER]); gtk_table_attach(GTK_TABLE(table),buttonMinimizeOptions[GRADFLETCHER], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADFLETCHER]), FALSE); /*----------------------------------------------------------------------------------*/ i = 5; j = 1; buttonMinimizeOptions[GRADPOLAK] = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMinimizeOptions[GRADHESTENES])), options[GRADPOLAK]); gtk_table_attach(GTK_TABLE(table),buttonMinimizeOptions[GRADPOLAK], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADPOLAK]), FALSE); /*----------------------------------------------------------------------------------*/ i = 6; j = 1; buttonMinimizeOptions[GRADWOLF] = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMinimizeOptions[GRADHESTENES])), options[GRADWOLF]); gtk_table_attach(GTK_TABLE(table),buttonMinimizeOptions[GRADWOLF], j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMinimizeOptions[GRADWOLF]), FALSE); /* Entrys */ j = 3; i = 2; gtk_table_attach(GTK_TABLE(table),vseparator, j,j+1,i,i+5, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 1,1); ifirst = 2; for(i=0;iwindow,"Molecular Mechanics Energy"); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)DestroyWinMMDlg,NULL); NoteBook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX (GTK_DIALOG(Win)->vbox), NoteBook,TRUE, TRUE, 0); AddMMOptionsDlg(NoteBook); gtk_widget_realize(Win); button = create_button(Win,"Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", G_CALLBACK(DestroyWinMMDlg),GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,"Ok"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)amberEnergyCalculation,GTK_OBJECT(Win)); gtk_widget_show (button); gtk_widget_show_all(Win); } /***********************************************************************/ void MolecularMechanicsMinimizeDlg() { GtkWidget *button; GtkWidget *Win; GtkWidget *NoteBook; GtkWidget *parentWindow = GeomDlg; StopCalcul = TRUE; Win= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow)); gtk_window_set_title(>K_DIALOG(Win)->window,"Molecular Mechanics Minimize"); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)DestroyWinMMDlg,NULL); NoteBook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX (GTK_DIALOG(Win)->vbox), NoteBook,TRUE, TRUE, 0); AddGradientOptionsDlg(NoteBook); AddMMOptionsDlg(NoteBook); gtk_widget_realize(Win); button = create_button(Win,"Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", G_CALLBACK(DestroyWinMMDlg),GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,"Ok"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)amberMinimize,GTK_OBJECT(Win)); gtk_widget_show (button); gtk_widget_show_all(Win); } /***********************************************************************/ void MolecularMechanicsDynamicsDlg() { GtkWidget *button; GtkWidget *Win; GtkWidget *NoteBook; GtkWidget *parentWindow = GeomDlg; StopCalcul = TRUE; Win= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow)); gtk_window_set_title(>K_DIALOG(Win)->window,"Molecular Dynamics"); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)gtk_widget_destroy,NULL); NoteBook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX (GTK_DIALOG(Win)->vbox), NoteBook,TRUE, TRUE, 0); AddDynamicsOptionsDlg(NoteBook, Win); AddMMOptionsDlg(NoteBook); AddInfoMD(NoteBook, Win); gtk_widget_realize(Win); button = create_button(Win,"Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,"Ok"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)amberMolecularDynamics,GTK_OBJECT(Win)); gtk_widget_show (button); gtk_widget_show_all(Win); } /***********************************************************************/ void MolecularMechanicsDynamicsConfoDlg() { GtkWidget *button; GtkWidget *Win; GtkWidget *NoteBook; GtkWidget *parentWindow = GeomDlg; StopCalcul = TRUE; Win= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow)); gtk_window_set_title(>K_DIALOG(Win)->window,"Molecular Dynamics Conformational search"); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)gtk_widget_destroy,NULL); NoteBook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX (GTK_DIALOG(Win)->vbox), NoteBook,TRUE, TRUE, 0); AddGeneralConfoOptionsDlg(NoteBook, Win); AddDynamicsConfoOptionsDlg(NoteBook, Win); AddGradientOptionsDlg(NoteBook); AddMMOptionsDlg(NoteBook); AddInfoConfo(NoteBook, Win); gtk_widget_realize(Win); button = create_button(Win,"Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,"Ok"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)amberMolecularDynamicsConfo,GTK_OBJECT(Win)); gtk_widget_show (button); gtk_widget_show_all(Win); } /***********************************************************************/ GabeditSrc250/src/MolecularMechanics/MolecularDynamics.c0000644000175100017510000017653313130665225023616 0ustar alloucheallouche/* MolecularDynamics.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../Utils/AtomsProp.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "Atom.h" #include "Molecule.h" #include "ForceField.h" #include "MolecularDynamics.h" /*********************************************************************************/ static void initMD(MolecularDynamics* molecularDynamics, gdouble temperature, gdouble stepSize, MDIntegratorType integratorType, MDThermostatType thermostat, gdouble friction, gdouble collide, gchar* fileNameTraj, gchar* fileNameProp, gint numberOfRunSteps); static void berendsen(MolecularDynamics* molecularDynamics); static void andersen(MolecularDynamics* molecularDynamics); static void bussi(MolecularDynamics* molecularDynamics); static void rescaleVelocities(MolecularDynamics* molecularDynamics); static void computeEnergies(MolecularDynamics* molecularDynamics); static void applyOneStep(MolecularDynamics* molecularDynamics); static void applyVerlet(MolecularDynamics* molecularDynamics); static void applyBeeman(MolecularDynamics* molecularDynamics); static void applyStochastic(MolecularDynamics* molecularDynamics); static gdouble maxwel(gdouble masse, gdouble temperature); static void newProperties(MolecularDynamics* molecularDynamics, gchar* comments); static void saveProperties(MolecularDynamics* molecularDynamics, gint iStep0, gint iStep, gchar* comments); static void saveTrajectory(MolecularDynamics* molecularDynamics, gint iStep); static void getRandVect(gdouble len, gdouble V[]); static gdouble getEKin(MolecularDynamics* molecularDynamics); static gdouble getKelvin(MolecularDynamics* molecularDynamics); static gdouble drandom(); static gdouble normal(); /**********************************************************************/ ForceField** runMolecularDynamicsConfo( MolecularDynamics* molecularDynamics, ForceField* forceField, gint updateFrequency, gdouble heatTime, gdouble equiTime, gdouble runTime, gdouble heatTemperature, gdouble equiTemperature, gdouble runTemperature, gdouble stepSize, MDIntegratorType integratorType, MDThermostatType thermostat, gdouble friction, gdouble collide, gint numberOfGeometries, gchar* fileNameTraj, gchar* fileNameProp ) { gint i; gint j; gchar* str = NULL; gdouble gradientNorm = 0; gint numberOfHeatSteps = 0; gint numberOfEquiSteps = 0; gint numberOfRunSteps = 0; gdouble currentTemp; gint updateNumber = 0; gint n0 = 0; ForceField** geometries = NULL; gint iSel = 0; gint stepSel = 1; /* * physical constants in SI units * ------------------------------ * Kb = 1.380662 E-23 J/K * Na = 6.022045 E23 1/mol * e = 1.6021892 E-19 C * eps = 8.85418782 E-12 F/m * * 1 Kcal = 4184.0 J * 1 amu = 1.6605655 E-27 Kg * 1 A = 1.0 E-10 m * * Internally, AKMA units are used: * * timeFactor = SQRT ( ( 1A )**2 * 1amu * Na / 1Kcal ) * kBoltzmann = Na *Kb / 1 Kcal */ /* printf("basname = %s\n",g_path_get_basename(fileNameTraj));*/ if(forceField->molecule.nAtoms<1) return NULL; if(numberOfGeometries<2) return NULL; geometries = g_malloc(numberOfGeometries*sizeof(ForceField*)); for(i=0;iforceField = forceField; molecularDynamics->numberOfAtoms = forceField->molecule.nAtoms; molecularDynamics->updateFrequency = updateFrequency; currentTemp = heatTemperature/2; numberOfHeatSteps = heatTime/stepSize*1000; numberOfEquiSteps = equiTime/stepSize*1000;; numberOfRunSteps = runTime/stepSize*1000;; currentTemp = heatTemperature; if(numberOfHeatSteps==0) currentTemp = equiTemperature; if(numberOfHeatSteps==0 && numberOfEquiSteps==0 ) currentTemp = runTemperature; initMD(molecularDynamics,currentTemp,stepSize, integratorType, thermostat, friction, collide, fileNameTraj, fileNameProp, numberOfRunSteps); molecularDynamics->forceField->klass->calculateGradient(molecularDynamics->forceField); computeEnergies(molecularDynamics); iSel = -1; { if(str) g_free(str); str = g_strdup_printf("Geometry selected Potential energy = %0.4f", molecularDynamics->potentialEnergy); redrawMolecule(&molecularDynamics->forceField->molecule,str); iSel++; geometries[iSel] = g_malloc(sizeof(ForceField)); *geometries[iSel] = copyForceField(molecularDynamics->forceField); Waiting(1); } molecularDynamics->temperature = heatTemperature; rescaleVelocities(molecularDynamics); currentTemp = heatTemperature; n0 = 0; newProperties(molecularDynamics," "); /*newProperties(molecularDynamics," ----> Heating");*/ for (i = 0; i < numberOfHeatSteps; i++ ) { molecularDynamics->temperature = currentTemp; applyOneStep(molecularDynamics); currentTemp = heatTemperature + ( runTemperature - heatTemperature ) * ( ( gdouble )( i + 1 )/ numberOfHeatSteps ); molecularDynamics->temperature = currentTemp; rescaleVelocities(molecularDynamics); if(StopCalcul) break; if (++updateNumber >= molecularDynamics->updateFrequency ) { if(str) g_free(str); str = g_strdup_printf(_("MD Heating: %0.2f fs, T = %0.2f K T(t) = %0.2f Kin = %0.4f Pot = %0.4f Tot = %0.4f"), i*stepSize, currentTemp, molecularDynamics->kelvin, molecularDynamics->kineticEnergy, molecularDynamics->potentialEnergy, molecularDynamics->totalEnergy ); redrawMolecule(&molecularDynamics->forceField->molecule,str); updateNumber = 0; } saveProperties(molecularDynamics, n0+i+1, i+1," Heating"); } currentTemp = equiTemperature; molecularDynamics->temperature = currentTemp; rescaleVelocities(molecularDynamics); if(StopCalcul) numberOfEquiSteps =0; if(StopCalcul) numberOfRunSteps =0; updateNumber = molecularDynamics->updateFrequency; n0 += numberOfHeatSteps; /* newProperties(molecularDynamics," ----> Equilibrium");*/ for (i = 0; i < numberOfEquiSteps; i++ ) { molecularDynamics->temperature = currentTemp; applyOneStep(molecularDynamics); molecularDynamics->temperature = currentTemp; rescaleVelocities(molecularDynamics); if(StopCalcul) break; if (++updateNumber >= molecularDynamics->updateFrequency ) { if(str) g_free(str); str = g_strdup_printf(_("MD Equilibrium: %0.2f fs, T = %0.2f K T(t) = %0.2f K Kin = %0.4f Pot = %0.4f Tot = %0.4f"), i*stepSize, currentTemp, molecularDynamics->kelvin, molecularDynamics->kineticEnergy, molecularDynamics->potentialEnergy, molecularDynamics->totalEnergy ); redrawMolecule(&molecularDynamics->forceField->molecule,str); updateNumber = 0; } saveProperties(molecularDynamics, n0+i+1, i+1, " Equilibrium"); } updateNumber = molecularDynamics->updateFrequency; currentTemp = runTemperature; molecularDynamics->temperature = currentTemp; rescaleVelocities(molecularDynamics); if(StopCalcul) numberOfRunSteps =0; updateNumber = molecularDynamics->updateFrequency; n0 += numberOfEquiSteps; /* newProperties(molecularDynamics," ----> Runing");*/ if(str) g_free(str); str = g_strdup_printf(_("Geometry selected Potential energy = %0.4f"), molecularDynamics->potentialEnergy); redrawMolecule(&molecularDynamics->forceField->molecule,str); if(numberOfGeometries>2) stepSel = numberOfRunSteps/(numberOfGeometries-1); else stepSel = numberOfRunSteps; /* printf("Isel = %d\n",stepSel);*/ for (i = 0; i < numberOfRunSteps; i++ ) { molecularDynamics->temperature = currentTemp; applyOneStep(molecularDynamics); if(molecularDynamics->thermostat == ANDERSEN) andersen(molecularDynamics); if(molecularDynamics->thermostat == BERENDSEN) berendsen(molecularDynamics); if(molecularDynamics->thermostat == BUSSI) bussi(molecularDynamics); if(StopCalcul) break; if (++updateNumber >= molecularDynamics->updateFrequency ) { if(str) g_free(str); str = g_strdup_printf(_("MD Running: %0.2f fs, T = %0.2f K T(t) = %0.2f K Kin = %0.4f Pot = %0.4f Tot = %0.4f"), i*stepSize, currentTemp, molecularDynamics->kelvin, molecularDynamics->kineticEnergy, molecularDynamics->potentialEnergy, molecularDynamics->totalEnergy ); redrawMolecule(&molecularDynamics->forceField->molecule,str); updateNumber = 0; saveTrajectory(molecularDynamics, i+1); } if((i+1)%stepSel==0 && (iSel+1)potentialEnergy); redrawMolecule(&molecularDynamics->forceField->molecule,str); iSel++; geometries[iSel] = g_malloc(sizeof(ForceField)); *geometries[iSel] = copyForceField(molecularDynamics->forceField); Waiting(1); } saveProperties(molecularDynamics, n0+i+1, i+1," Running"); } if(iSelpotentialEnergy); redrawMolecule(&molecularDynamics->forceField->molecule,str); iSel++; geometries[iSel] = g_malloc(sizeof(ForceField)); *geometries[iSel] = copyForceField(molecularDynamics->forceField); Waiting(1); } updateNumber = molecularDynamics->updateFrequency; n0 += numberOfRunSteps; molecularDynamics->forceField->klass->calculateGradient(molecularDynamics->forceField); gradientNorm = 0; for (i = 0; i < molecularDynamics->numberOfAtoms; i++) for ( j = 0; j < 3; j++) gradientNorm += molecularDynamics->forceField->molecule.gradient[j][i] * molecularDynamics->forceField->molecule.gradient[j][i]; gradientNorm = sqrt( gradientNorm ); if(str) g_free(str); str = g_strdup_printf(_("End of MD Simulation. Gradient = %f Ekin = %f (Kcal/mol) EPot = %0.4f ETot = %0.4f T(t) = %0.2f"), (gdouble)gradientNorm, molecularDynamics->kineticEnergy, molecularDynamics->potentialEnergy, molecularDynamics->totalEnergy, molecularDynamics->kelvin ); redrawMolecule(&molecularDynamics->forceField->molecule,str); g_free(str); if(molecularDynamics->fileTraj)fclose(molecularDynamics->fileTraj); if(molecularDynamics->fileProp)fclose(molecularDynamics->fileProp); freeMolecularDynamics(molecularDynamics); return geometries; } /**********************************************************************/ void runMolecularDynamics( MolecularDynamics* molecularDynamics, ForceField* forceField, gint updateFrequency, gdouble heatTime, gdouble equiTime, gdouble runTime, gdouble coolTime, gdouble heatTemperature, gdouble equiTemperature, gdouble runTemperature, gdouble coolTemperature, gdouble stepSize, MDIntegratorType integratorType, MDThermostatType thermostat, gdouble friction, gdouble collide, gchar* fileNameTraj, gchar* fileNameProp ) { gint i; gint j; gchar* str = NULL; gdouble gradientNorm = 0; gint numberOfHeatSteps = 0; gint numberOfEquiSteps = 0; gint numberOfRunSteps = 0; gint numberOfCoolSteps = 0; gdouble currentTemp; gint updateNumber = 0; gint n0 = 0; /* * physical constants in SI units * ------------------------------ * Kb = 1.380662 E-23 J/K * Na = 6.022045 E23 1/mol * e = 1.6021892 E-19 C * eps = 8.85418782 E-12 F/m * * 1 Kcal = 4184.0 J * 1 amu = 1.6605655 E-27 Kg * 1 A = 1.0 E-10 m * * Internally, AKMA units are used: * * timeFactor = SQRT ( ( 1A )**2 * 1amu * Na / 1Kcal ) * kBoltzmann = Na *Kb / 1 Kcal */ /* printf("basname = %s\n",g_path_get_basename(fileNameTraj));*/ if(forceField->molecule.nAtoms<1) return; molecularDynamics->forceField = forceField; molecularDynamics->numberOfAtoms = forceField->molecule.nAtoms; molecularDynamics->updateFrequency = updateFrequency; currentTemp = heatTemperature/2; numberOfHeatSteps = heatTime/stepSize*1000; numberOfEquiSteps = equiTime/stepSize*1000;; numberOfRunSteps = runTime/stepSize*1000;; numberOfCoolSteps = coolTime/stepSize*1000;; currentTemp = heatTemperature; if(numberOfHeatSteps==0) currentTemp = equiTemperature; if(numberOfHeatSteps==0 && numberOfEquiSteps==0 ) currentTemp = runTemperature; if(numberOfHeatSteps==0 && numberOfEquiSteps==0 && numberOfRunSteps==0 ) currentTemp = coolTemperature; initMD(molecularDynamics,currentTemp,stepSize, integratorType, thermostat, friction, collide, fileNameTraj, fileNameProp, numberOfRunSteps); molecularDynamics->forceField->klass->calculateGradient(molecularDynamics->forceField); molecularDynamics->temperature = heatTemperature; rescaleVelocities(molecularDynamics); currentTemp = heatTemperature; n0 = 0; newProperties(molecularDynamics," "); /*newProperties(molecularDynamics," ----> Heating");*/ for (i = 0; i < numberOfHeatSteps; i++ ) { molecularDynamics->temperature = currentTemp; applyOneStep(molecularDynamics); currentTemp = heatTemperature + ( runTemperature - heatTemperature ) * ( ( gdouble )( i + 1 )/ numberOfHeatSteps ); molecularDynamics->temperature = currentTemp; rescaleVelocities(molecularDynamics); if(StopCalcul) break; if (++updateNumber >= molecularDynamics->updateFrequency ) { if(str) g_free(str); str = g_strdup_printf(_("MD Heating: %0.2f fs, T = %0.2f K T(t) = %0.2f Kin = %0.4f Pot = %0.4f Tot = %0.4f"), i*stepSize, currentTemp, molecularDynamics->kelvin, molecularDynamics->kineticEnergy, molecularDynamics->potentialEnergy, molecularDynamics->totalEnergy ); redrawMolecule(&molecularDynamics->forceField->molecule,str); updateNumber = 0; } saveProperties(molecularDynamics, n0+i+1, i+1," Heating"); } currentTemp = equiTemperature; molecularDynamics->temperature = currentTemp; rescaleVelocities(molecularDynamics); if(StopCalcul) numberOfEquiSteps =0; if(StopCalcul) numberOfRunSteps =0; if(StopCalcul) numberOfCoolSteps =0; updateNumber = molecularDynamics->updateFrequency; n0 += numberOfHeatSteps; /* newProperties(molecularDynamics," ----> Equilibrium");*/ for (i = 0; i < numberOfEquiSteps; i++ ) { molecularDynamics->temperature = currentTemp; applyOneStep(molecularDynamics); molecularDynamics->temperature = currentTemp; rescaleVelocities(molecularDynamics); if(StopCalcul) break; if (++updateNumber >= molecularDynamics->updateFrequency ) { if(str) g_free(str); str = g_strdup_printf(_("MD Equilibrium: %0.2f fs, T = %0.2f K T(t) = %0.2f K Kin = %0.4f Pot = %0.4f Tot = %0.4f"), i*stepSize, currentTemp, molecularDynamics->kelvin, molecularDynamics->kineticEnergy, molecularDynamics->potentialEnergy, molecularDynamics->totalEnergy ); redrawMolecule(&molecularDynamics->forceField->molecule,str); updateNumber = 0; } saveProperties(molecularDynamics, n0+i+1, i+1, " Equilibrium"); } updateNumber = molecularDynamics->updateFrequency; currentTemp = runTemperature; molecularDynamics->temperature = currentTemp; rescaleVelocities(molecularDynamics); if(StopCalcul) numberOfRunSteps =0; if(StopCalcul) numberOfCoolSteps =0; updateNumber = molecularDynamics->updateFrequency; n0 += numberOfEquiSteps; /* newProperties(molecularDynamics," ----> Runing");*/ for (i = 0; i < numberOfRunSteps; i++ ) { molecularDynamics->temperature = currentTemp; applyOneStep(molecularDynamics); if(molecularDynamics->thermostat == ANDERSEN) andersen(molecularDynamics); if(molecularDynamics->thermostat == BERENDSEN) berendsen(molecularDynamics); if(molecularDynamics->thermostat == BUSSI) bussi(molecularDynamics); if(StopCalcul) break; if (++updateNumber >= molecularDynamics->updateFrequency ) { if(str) g_free(str); str = g_strdup_printf(_("MD Running: %0.2f fs, T = %0.2f K T(t) = %0.2f K Kin = %0.4f Pot = %0.4f Tot = %0.4f"), i*stepSize, currentTemp, molecularDynamics->kelvin, molecularDynamics->kineticEnergy, molecularDynamics->potentialEnergy, molecularDynamics->totalEnergy ); redrawMolecule(&molecularDynamics->forceField->molecule,str); updateNumber = 0; saveTrajectory(molecularDynamics, i+1); } saveProperties(molecularDynamics, n0+i+1, i+1," Running"); } updateNumber = molecularDynamics->updateFrequency; if(StopCalcul) numberOfCoolSteps =0; n0 += numberOfRunSteps; /* newProperties(molecularDynamics," ----> Cooling");*/ for (i = 0; i < numberOfCoolSteps; i++ ) { currentTemp = runTemperature - ( runTemperature - coolTemperature ) * ( ( gdouble )( i + 1 )/ numberOfCoolSteps ); molecularDynamics->temperature = currentTemp; rescaleVelocities(molecularDynamics); molecularDynamics->temperature = currentTemp; applyOneStep(molecularDynamics); if(StopCalcul) break; if (++updateNumber >= molecularDynamics->updateFrequency ) { if(str) g_free(str); str = g_strdup_printf(_("MD Cooling: %0.2f fs, T = %0.2f K T(t) = %0.2f K Kin = %0.4f Pot = %0.4f Tot = %0.4f"), i*stepSize, currentTemp, molecularDynamics->kelvin, molecularDynamics->kineticEnergy, molecularDynamics->potentialEnergy, molecularDynamics->totalEnergy ); redrawMolecule(&molecularDynamics->forceField->molecule,str); updateNumber = 0; } saveProperties(molecularDynamics, n0+i+1, i+1," Cooling"); } molecularDynamics->forceField->klass->calculateGradient(molecularDynamics->forceField); gradientNorm = 0; for (i = 0; i < molecularDynamics->numberOfAtoms; i++) for ( j = 0; j < 3; j++) gradientNorm += molecularDynamics->forceField->molecule.gradient[j][i] * molecularDynamics->forceField->molecule.gradient[j][i]; gradientNorm = sqrt( gradientNorm ); if(str) g_free(str); str = g_strdup_printf(_("End of MD Simulation. Gradient = %f Ekin = %f (Kcal/mol) EPot = %0.4f ETot = %0.4f T(t) = %0.2f"), (gdouble)gradientNorm, molecularDynamics->kineticEnergy, molecularDynamics->potentialEnergy, molecularDynamics->totalEnergy, molecularDynamics->kelvin ); redrawMolecule(&molecularDynamics->forceField->molecule,str); g_free(str); if(molecularDynamics->fileTraj)fclose(molecularDynamics->fileTraj); if(molecularDynamics->fileProp)fclose(molecularDynamics->fileProp); freeMolecularDynamics(molecularDynamics); } /*********************************************************************************/ static void removeTranslation(MolecularDynamics* molecularDynamics) { gdouble vtot[3] = {0,0,0}; gint i; gint j; gdouble mass = 1.0; gdouble totMass = 0.0; for ( i = 0; i < molecularDynamics->numberOfAtoms; i++) { mass = molecularDynamics->forceField->molecule.atoms[i].prop.masse; totMass += mass; for ( j = 0; j < 3; j++) { vtot[j] += mass*molecularDynamics->velocity[i][j]; } } for ( j = 0; j < 3; j++) vtot[j] /= totMass; for ( i = 0; i < molecularDynamics->numberOfAtoms; i++) for ( j = 0; j < 3; j++) molecularDynamics->velocity[i][j] -= vtot[j]; /* check */ /* for ( j = 0; j < 3; j++) vtot[j] = 0; for ( i = 0; i < molecularDynamics->numberOfAtoms; i++) { mass = molecularDynamics->forceField->molecule.atoms[i].prop.masse; for ( j = 0; j < 3; j++) { vtot[j] += mass*molecularDynamics->velocity[i][j]; } } printf("Trans velocity = %f %f %f\n",vtot[0], vtot[1], vtot[2]); */ } /**************************************************/ static gboolean InverseTensor(gdouble mat[3][3],gdouble invmat[3][3]) { gdouble t4,t6,t8,t10,t12,t14,t17; gdouble d = 0; t4 = mat[0][0]*mat[1][1]; t6 = mat[0][0]*mat[1][2]; t8 = mat[0][1]*mat[1][0]; t10 = mat[0][2]*mat[1][0]; t12 = mat[0][1]*mat[2][0]; t14 = mat[0][2]*mat[2][0]; d =(t4*mat[2][2]-t6*mat[2][1]-t8*mat[2][2]+t10*mat[2][1]+t12*mat[1][2]-t14*mat[1][1]); if(d == 0) { invmat[0][0] = 0; invmat[0][1] = 0; invmat[0][2] = 0; invmat[1][0] = 0; invmat[1][1] = 0; invmat[1][2] = 0; invmat[2][0] = 0; invmat[2][1] = 0; invmat[2][2] = 0; return FALSE; } t17 = 1/d; invmat[0][0] = (mat[1][1]*mat[2][2]-mat[1][2]*mat[2][1])*t17; invmat[0][1] = -(mat[0][1]*mat[2][2]-mat[0][2]*mat[2][1])*t17; invmat[0][2] = -(-mat[0][1]*mat[1][2]+mat[0][2]*mat[1][1])*t17; invmat[1][0] = -(mat[1][0]*mat[2][2]-mat[1][2]*mat[2][0])*t17; invmat[1][1] = (mat[0][0]*mat[2][2]-t14)*t17; invmat[1][2] = -(t6-t10)*t17; invmat[2][0] = -(-mat[1][0]*mat[2][1]+mat[1][1]*mat[2][0])*t17; invmat[2][1] = -(mat[0][0]*mat[2][1]-t12)*t17; invmat[2][2] = (t4-t8)*t17; return TRUE; } /*********************************************************************************/ static void removeRotation(MolecularDynamics* molecularDynamics) { gdouble vtot[3] = {0,0,0}; gdouble cm[3] = {0,0,0}; gdouble L[3] = {0,0,0}; gint i; gint j; gint k; gdouble mass = 1.0; gdouble totMass = 0.0; gdouble cdel[3]; gdouble vAng[3]={0,0,0}; gdouble tensor[3][3]; gdouble invTensor[3][3]; gdouble xx, xy,xz,yy,yz,zz; /* find the center of mass coordinates and total velocity*/ AtomMol* atoms = molecularDynamics->forceField->molecule.atoms; for ( i = 0; i < molecularDynamics->numberOfAtoms; i++) { mass = molecularDynamics->forceField->molecule.atoms[i].prop.masse; totMass += mass; for ( j = 0; j < 3; j++) cm[j] += mass*atoms[i].coordinates[j]; for ( j = 0; j < 3; j++) vtot[j] += mass*molecularDynamics->velocity[i][j]; } for ( j = 0; j < 3; j++) cm[j] /= totMass; for ( j = 0; j < 3; j++) vtot[j] /= totMass; /* compute the angular momentum */ for ( i = 0; i < molecularDynamics->numberOfAtoms; i++) { mass = molecularDynamics->forceField->molecule.atoms[i].prop.masse; for ( j = 0; j < 3; j++) L[j] += ( atoms[i].coordinates[(j+1)%3]*molecularDynamics->velocity[i][(j+2)%3] - atoms[i].coordinates[(j+2)%3]*molecularDynamics->velocity[i][(j+1)%3] )*mass; } for ( j = 0; j < 3; j++) L[j] -= ( cm[(j+1)%3]*vtot[(j+2)%3] - cm[(j+2)%3]*vtot[(j+1)%3] )*totMass; /* calculate and invert the inertia tensor */ for ( k = 0; k < 3; k++) for ( j = 0; j < 3; j++) tensor[k][j] = 0; xx = 0; yy = 0; zz = 0; xy = 0; xz = 0; yz = 0; for ( i = 0; i < molecularDynamics->numberOfAtoms; i++) { mass = molecularDynamics->forceField->molecule.atoms[i].prop.masse; for ( j = 0; j < 3; j++) cdel[j] = atoms[i].coordinates[j]-cm[j]; xx += cdel[0]*cdel[0]*mass; xy += cdel[0]*cdel[1]*mass; xz += cdel[0]*cdel[2]*mass; yy += cdel[1]*cdel[1]*mass; yz += cdel[1]*cdel[2]*mass; zz += cdel[2]*cdel[2]*mass; } tensor[0][0] = yy+zz; tensor[1][0] = -xy; tensor[2][0] = -xz; tensor[0][1] = -xy; tensor[1][1] = xx+zz; tensor[2][1] = -yz; tensor[0][2] = -xz; tensor[1][2] = -yz; tensor[2][2] = xx+yy; if(InverseTensor(tensor,invTensor)) { for ( j = 0; j < 3; j++) { vAng[j] = 0; for ( k = 0; k < 3; k++) vAng[j] += invTensor[j][k]*L[k]; } /* eliminate any rotation about the system center of mass */ for ( i = 0; i < molecularDynamics->numberOfAtoms; i++) { for ( j = 0; j < 3; j++) cdel[j] = atoms[i].coordinates[j]-cm[j]; for ( j = 0; j < 3; j++) molecularDynamics->velocity[i][j] += cdel[(j+1)%3]*vAng[(j+2)%3]- cdel[(j+2)%3]*vAng[(j+1)%3]; } } /* check */ /* for ( j = 0; j < 3; j++) L[j] = 0; for ( i = 0; i < molecularDynamics->numberOfAtoms; i++) { mass = molecularDynamics->forceField->molecule.atoms[i].prop.masse; for ( j = 0; j < 3; j++) L[j] += ( atoms[i].coordinates[(j+1)%3]*molecularDynamics->velocity[i][(j+2)%3] - atoms[i].coordinates[(j+2)%3]*molecularDynamics->velocity[i][(j+1)%3] )*mass; } for ( j = 0; j < 3; j++) { vAng[j] = 0; for ( k = 0; k < 3; k++) vAng[j] += invTensor[j][k]*L[k]; } printf("Angular velocity = %f %f %f\n",vAng[0], vAng[1], vAng[2]); */ } /*********************************************************************************/ static void removeTranslationAndRotation(MolecularDynamics* molecularDynamics) { removeTranslation(molecularDynamics); removeRotation(molecularDynamics); } /*********************************************************************************/ static void initSD(MolecularDynamics* molecularDynamics, gdouble friction) { /* gdouble fsInAKMA = 1.0/sqrt(1e-10*1e-10*1.6605655e-27*6.022045e23/4184.0)/1e15;*/ static gdouble fsInAKMA = 0.020454828110640; gint i; molecularDynamics->friction = friction/(fsInAKMA)/1000; molecularDynamics->positionFriction = NULL; molecularDynamics->velocityFriction = NULL; molecularDynamics->accelarationFriction = NULL; molecularDynamics->gamma = NULL; molecularDynamics->positionRandom = NULL; molecularDynamics->velocityRandom = NULL; if(molecularDynamics->integratorType != STOCHASTIC) return; molecularDynamics->positionFriction = g_malloc(molecularDynamics->numberOfAtoms *sizeof(gdouble)); molecularDynamics->velocityFriction = g_malloc(molecularDynamics->numberOfAtoms *sizeof(gdouble)); molecularDynamics->accelarationFriction = g_malloc(molecularDynamics->numberOfAtoms *sizeof(gdouble)); molecularDynamics->gamma = g_malloc(molecularDynamics->numberOfAtoms *sizeof(gdouble)); molecularDynamics->positionRandom = g_malloc(molecularDynamics->numberOfAtoms *sizeof(gdouble*)); for(i=0;inumberOfAtoms;i++) molecularDynamics->positionRandom[i] = g_malloc(3*sizeof(gdouble)); molecularDynamics->velocityRandom = g_malloc(molecularDynamics->numberOfAtoms *sizeof(gdouble*)); for(i=0;inumberOfAtoms;i++) molecularDynamics->velocityRandom[i] = g_malloc(3*sizeof(gdouble)); } /*********************************************************************************/ static void initMD(MolecularDynamics* molecularDynamics, gdouble temperature, gdouble stepSize, MDIntegratorType integratorType, MDThermostatType thermostat, gdouble friction, gdouble collide, gchar* fileNameTraj, gchar* fileNameProp, gint numberOfRunSteps) { gint i; gint j; /* gdouble fsInAKMA = 1.0/sqrt(1e-10*1e-10*1.6605655e-27*6.022045e23/4184.0)/1e15;*/ static gdouble fsInAKMA = 0.020454828110640; gdouble dt = stepSize * fsInAKMA; molecularDynamics->collide = collide; molecularDynamics->potentialEnergy = 0; molecularDynamics->kineticEnergy = 0; molecularDynamics->totalEnergy = 0; molecularDynamics->kelvin = 0; molecularDynamics->temperature = temperature; molecularDynamics->thermostat = NONE; molecularDynamics->integratorType = integratorType; molecularDynamics->thermostat = thermostat; molecularDynamics->fileTraj = NULL; molecularDynamics->fileProp = NULL; molecularDynamics->velocity = g_malloc(molecularDynamics->numberOfAtoms *sizeof(gdouble*)); for(i=0;inumberOfAtoms;i++) molecularDynamics->velocity[i] = g_malloc(3*sizeof(gdouble)); molecularDynamics->a = g_malloc(molecularDynamics->numberOfAtoms *sizeof(gdouble*)); for(i=0;inumberOfAtoms;i++) molecularDynamics->a[i] = g_malloc(3*sizeof(gdouble)); molecularDynamics->aold = NULL; if(molecularDynamics->integratorType==BEEMAN) { molecularDynamics->aold = g_malloc(molecularDynamics->numberOfAtoms *sizeof(gdouble*)); for(i=0;inumberOfAtoms;i++) molecularDynamics->aold[i] = g_malloc(3*sizeof(gdouble)); } molecularDynamics->coordinatesOld = NULL; molecularDynamics->moved = NULL; molecularDynamics->update = NULL; if(molecularDynamics->forceField->options.rattleConstraints!=NOCONSTRAINTS) { molecularDynamics->coordinatesOld = g_malloc(molecularDynamics->numberOfAtoms *sizeof(gdouble*)); for(i=0;inumberOfAtoms;i++) molecularDynamics->coordinatesOld[i] = g_malloc(3*sizeof(gdouble)); molecularDynamics->moved = g_malloc(molecularDynamics->numberOfAtoms *sizeof(gboolean)); molecularDynamics->update = g_malloc(molecularDynamics->numberOfAtoms *sizeof(gboolean)); } if(fileNameTraj) { molecularDynamics->fileTraj = fopen(fileNameTraj, "w"); if(molecularDynamics->fileTraj != NULL) { fprintf(molecularDynamics->fileTraj,"[Gabedit Format]\n"); fprintf(molecularDynamics->fileTraj,"\n"); fprintf(molecularDynamics->fileTraj,"[MD]\n"); if(molecularDynamics->updateFrequency>0) numberOfRunSteps/=molecularDynamics->updateFrequency; fprintf(molecularDynamics->fileTraj," %d\n",numberOfRunSteps); } } if(fileNameProp) { molecularDynamics->fileProp = fopen(fileNameProp, "w"); } srand ( (unsigned)time (NULL)); molecularDynamics->dt = dt; molecularDynamics->dt_2 = dt/2.0; molecularDynamics->dt2_2 = dt*dt/2;; molecularDynamics->dt_8 = dt/8.0; molecularDynamics->dt2_8 = dt*dt/8.0; initSD(molecularDynamics, friction); molecularDynamics->forceField->klass->calculateGradient(molecularDynamics->forceField); for ( i = 0; i < molecularDynamics->numberOfAtoms; i++) { gdouble m = molecularDynamics->forceField->molecule.atoms[i].prop.masse; for ( j = 0; j < 3; j++) molecularDynamics->a[i][j] = -molecularDynamics->forceField->molecule.gradient[j][i]/m; if(molecularDynamics->aold) for ( j = 0; j < 3; j++) molecularDynamics->aold[i][j] = molecularDynamics->a[i][j]; if(molecularDynamics->coordinatesOld) for ( j = 0; j < 3; j++) molecularDynamics->coordinatesOld[i][j] = molecularDynamics->forceField->molecule.atoms[i].coordinates[j]; if(molecularDynamics->moved) molecularDynamics->moved[i] = FALSE; if(molecularDynamics->update) molecularDynamics->update[i] = FALSE; } if(temperature<=0) { for ( i = 0; i < molecularDynamics->numberOfAtoms; i++) for ( j = 0; j < 3; j++) molecularDynamics->velocity[i][j] = 0.0; } else for ( i = 0; i < molecularDynamics->numberOfAtoms; i++) { if(molecularDynamics->forceField->molecule.atoms[i].variable) { gdouble speed = maxwel(molecularDynamics->forceField->molecule.atoms[i].prop.masse,temperature); getRandVect(speed, molecularDynamics->velocity[i]); } else for( j = 0; j < 3; j++) molecularDynamics->velocity[i][j] = 0.0; } molecularDynamics->nvariables = 0; for ( i = 0; i < molecularDynamics->numberOfAtoms; i++) if(molecularDynamics->forceField->molecule.atoms[i].variable) molecularDynamics->nvariables +=1; if(molecularDynamics->nvariables==0) { molecularDynamics->nvariables= molecularDynamics->numberOfAtoms; for ( i = 0; i < molecularDynamics->numberOfAtoms; i++) { molecularDynamics->forceField->molecule.atoms[i].variable = TRUE; if(temperature>0) { gdouble speed = maxwel(molecularDynamics->forceField->molecule.atoms[i].prop.masse,temperature); getRandVect(speed, molecularDynamics->velocity[i]); } } } molecularDynamics->nfree = 3* molecularDynamics->nvariables-molecularDynamics->forceField->numberOfRattleConstraintsTerms; removeTranslationAndRotation(molecularDynamics); if(molecularDynamics->nvariables==molecularDynamics->numberOfAtoms) molecularDynamics->nfree -=6; if(molecularDynamics->nvariables==molecularDynamics->numberOfAtoms-1) molecularDynamics->nfree -=3; if(molecularDynamics->nvariables==molecularDynamics->numberOfAtoms-2) molecularDynamics->nfree -=1; printf("nfree =%d\n",molecularDynamics->nfree); if( molecularDynamics->nfree<1) { StopCalcul=TRUE; } if( molecularDynamics->nfree<1) molecularDynamics->nfree = 1; removeTranslationAndRotation(molecularDynamics); } /*********************************************************************************/ static void rescaleVelocities(MolecularDynamics* molecularDynamics) { berendsen(molecularDynamics); } /*********************************************************************************/ static void berendsen(MolecularDynamics* molecularDynamics) { gint i; gint j; static gdouble fsInAKMA = 0.020454828110640; gdouble ekin = 0; gdouble kelvin = 0; gint nfree = molecularDynamics->nfree; static gdouble Kb = 1.9871914e-3; gdouble scale = 1.0; gdouble dt = molecularDynamics->dt; gdouble tautemp = 1.0/(molecularDynamics->collide)*1000*fsInAKMA; gdouble masse = 1.0; if(molecularDynamics->temperature<=0) return; if(nfree<1) return; for ( i = 0; i < molecularDynamics->numberOfAtoms; i++) { masse = molecularDynamics->forceField->molecule.atoms[i].prop.masse; for ( j = 0; j < 3; j++) ekin += molecularDynamics->velocity[i][j]*molecularDynamics->velocity[i][j]* masse; } /* ekin /= 2; kelvin = 2* ekin / ( nfree * Kb); */ kelvin = ekin / ( nfree * Kb); /* if(tautemp>dt) tautemp = dt;*/ scale = sqrt(1.0 + (dt/tautemp)*(molecularDynamics->temperature/kelvin-1.0)); /* printf("temp = %f kelvin = %f scale = %f\n",molecularDynamics->temperature, kelvin, scale);*/ for ( i = 0; i < molecularDynamics->numberOfAtoms; i++) { if(molecularDynamics->forceField->molecule.atoms[i].variable) for ( j = 0; j < 3; j++) molecularDynamics->velocity[i][j] *= scale; } removeTranslationAndRotation(molecularDynamics); } /*********************************************************************************/ static void andersen(MolecularDynamics* molecularDynamics) { gint i; /* gdouble fsInAKMA = 1.0/sqrt(1e-10*1e-10*1.6605655e-27*6.022045e23/4184.0)/1e15;*/ static gdouble fsInAKMA = 0.020454828110640; gdouble tau = 1.0/molecularDynamics->collide*1000*fsInAKMA; /* in fs */ gdouble rate; static gdouble Kb = 1.9871914e-3; if(molecularDynamics->temperature<=0) return; if(molecularDynamics->numberOfAtoms<1) return; rate = molecularDynamics->dt / tau; rate /= pow(molecularDynamics->nvariables,2.0/3.0); for ( i = 0; i < molecularDynamics->numberOfAtoms; i++) { gdouble trial = drandom(); if(molecularDynamics->forceField->molecule.atoms[i].variable) if(trialforceField->molecule.atoms[i].prop.masse, molecularDynamics->temperature ); getRandVect(speed, molecularDynamics->velocity[i]); */ double speed = sqrt(Kb* molecularDynamics->temperature/molecularDynamics->forceField->molecule.atoms[i].prop.masse); double pnorm = normal(); molecularDynamics->velocity[i][0] = pnorm*speed; pnorm = normal(); molecularDynamics->velocity[i][1] = pnorm*speed; pnorm = normal(); molecularDynamics->velocity[i][2] = pnorm*speed; } } } /*********************************************************************************/ static void bussi(MolecularDynamics* molecularDynamics) { static gdouble fsInAKMA = 0.020454828110640; gint nfree = molecularDynamics->nfree; static gdouble Kb = 1.9871914e-3; gdouble scale = 1.0; gdouble dt = molecularDynamics->dt; gdouble tautemp = 1.0/(molecularDynamics->collide)*1000*fsInAKMA; gdouble c = exp(-dt/tautemp); gdouble ekin = getEKin(molecularDynamics); gdouble kelvin = 2*ekin / ( nfree * Kb); gdouble d = (1.0-c) * (molecularDynamics->temperature/kelvin) / (nfree); gdouble r = normal (); gdouble si = 0.0; gdouble s = 0.0; gint i,j; if(molecularDynamics->temperature<=0) return; if(nfree<1) return; for(i=0;inumberOfAtoms; i++) if(molecularDynamics->forceField->molecule.atoms[i].variable) for ( j = 0; j < 3; j++) molecularDynamics->velocity[i][j] *= scale; removeTranslationAndRotation(molecularDynamics); } /*********************************************************************************/ static void newAccelaration(MolecularDynamics* molecularDynamics) { gint i; gint j; molecularDynamics->forceField->klass->calculateGradient(molecularDynamics->forceField); for ( i = 0; i < molecularDynamics->numberOfAtoms; i++) { gdouble m = molecularDynamics->forceField->molecule.atoms[i].prop.masse; if(molecularDynamics->aold) for ( j = 0; j < 3; j++) molecularDynamics->aold[i][j] = molecularDynamics->a[i][j]; for ( j = 0; j < 3; j++) molecularDynamics->a[i][j] = -molecularDynamics->forceField->molecule.gradient[j][i]/m; } } /*********************************************************************************/ static void computeEnergies(MolecularDynamics* molecularDynamics) { molecularDynamics->kineticEnergy = getEKin(molecularDynamics); molecularDynamics->potentialEnergy = molecularDynamics->forceField->klass->calculateEnergyTmp( molecularDynamics->forceField,&molecularDynamics->forceField->molecule); molecularDynamics->totalEnergy = molecularDynamics->kineticEnergy + molecularDynamics->potentialEnergy; molecularDynamics->kelvin = getKelvin(molecularDynamics); } /*********************************************************************************/ static void applyOneStep(MolecularDynamics* molecularDynamics) { if(molecularDynamics->integratorType==VERLET) applyVerlet(molecularDynamics); else if(molecularDynamics->integratorType==BEEMAN) applyBeeman(molecularDynamics); else applyStochastic(molecularDynamics); computeEnergies(molecularDynamics); } /*********************************************************************************/ static void applyRattleFirstPortion(MolecularDynamics* molecularDynamics) { gint i; gint k; gint maxIter = 1000; gdouble omega = 1.0; gdouble tolerance = 1e-6; gboolean done = FALSE; gint nIter = 0; gint a1 = 0; gint a2 = 0; gdouble r2ij; gdouble dot; gdouble invMass1; gdouble invMass2; gdouble delta; gdouble term = 0; gdouble terms[3]; gdouble d; Molecule* m = &molecularDynamics->forceField->molecule; ForceField* forceField = molecularDynamics->forceField; gdouble deltaMax = 0; if(forceField->options.rattleConstraints==NOCONSTRAINTS) return; for (i = 0; i < molecularDynamics->numberOfAtoms; i++) { molecularDynamics->moved[i] = molecularDynamics->forceField->molecule.atoms[i].variable; molecularDynamics->update[i] = FALSE; } /* maxIter *= molecularDynamics->forceField->numberOfRattleConstraintsTerms;*/ do{ nIter++; done=TRUE; deltaMax = 0; for (i = 0; i < molecularDynamics->forceField->numberOfRattleConstraintsTerms; i++) { a1 = (gint)molecularDynamics->forceField->rattleConstraintsTerms[0][i]; a2 = (gint)molecularDynamics->forceField->rattleConstraintsTerms[1][i]; if( !molecularDynamics->moved[a1] && !molecularDynamics->moved[a2] ) continue; r2ij = 0; for (k=0;k<3;k++) { d = m->atoms[a2].coordinates[k]-m->atoms[a1].coordinates[k]; r2ij +=d*d; } delta = molecularDynamics->forceField->rattleConstraintsTerms[2][i]-r2ij; /* if(fabs(delta)<=tolerance) continue;*/ if(r2ij>0 && fabs(delta/r2ij)<=tolerance) continue; if(deltaMaxupdate[a1] = TRUE; molecularDynamics->update[a2] = TRUE; /* here : rattle image for PBC, not yet implemented */ dot = 0; for (k=0;k<3;k++) { d = m->atoms[a2].coordinates[k]-m->atoms[a1].coordinates[k]; dot +=d*(molecularDynamics->coordinatesOld[a2][k]-molecularDynamics->coordinatesOld[a1][k]); } invMass1 = 1/m->atoms[a1].prop.masse; invMass2 = 1/m->atoms[a2].prop.masse; term = omega*delta / (2.0*(invMass1+invMass2)*dot); for (k=0;k<3;k++) { terms[k] = (molecularDynamics->coordinatesOld[a2][k]-molecularDynamics->coordinatesOld[a1][k])*term; } for (k=0;k<3;k++) m->atoms[a1].coordinates[k] -= terms[k]*invMass1; for (k=0;k<3;k++) m->atoms[a2].coordinates[k] += terms[k]*invMass2; invMass1 /= molecularDynamics->dt; invMass2 /= molecularDynamics->dt; for (k=0;k<3;k++) molecularDynamics->velocity[a1][k] -= terms[k]*invMass1; for (k=0;k<3;k++) molecularDynamics->velocity[a2][k] += terms[k]*invMass2; } for (i = 0; i < molecularDynamics->numberOfAtoms; i++) { molecularDynamics->moved[i] = molecularDynamics->update[i]; molecularDynamics->update[i] = FALSE; } }while(!done && nIter=maxIter && deltaMax>tolerance*10) { printf(_("Rattle first portion : Warning, distance constraints not satisfied\n")); /* for (i = 0; i < molecularDynamics->numberOfAtoms; i++) { printf("atom#%d\n",i); printf("Old coord\n"); for (k=0;k<3;k++) printf("%f ",molecularDynamics->coordinatesOld[i][k]); printf("\n"); printf("New coord\n"); for (k=0;k<3;k++) printf("%f ",m->atoms[i].coordinates[k]); printf("\n"); } exit(1); */ for (i = 0; i < molecularDynamics->forceField->numberOfRattleConstraintsTerms; i++) { a1 = (gint)molecularDynamics->forceField->rattleConstraintsTerms[0][i]; a2 = (gint)molecularDynamics->forceField->rattleConstraintsTerms[1][i]; r2ij = 0; for (k=0;k<3;k++) { d = m->atoms[a2].coordinates[k]-m->atoms[a1].coordinates[k]; r2ij +=d*d; } delta = molecularDynamics->forceField->rattleConstraintsTerms[2][i]-r2ij; printf("%d %d %s %s r2ij=%f r2Old=%f delta=%f\n", a1,a2, molecularDynamics->forceField->molecule.atoms[a1].mmType, molecularDynamics->forceField->molecule.atoms[a2].mmType, r2ij, molecularDynamics->forceField->rattleConstraintsTerms[2][i],delta); } StopCalcul=TRUE; } for (i = 0; i < molecularDynamics->numberOfAtoms; i++) if(!m->atoms[i].variable) { for (k=0;k<3;k++) m->atoms[i].coordinates[k] = molecularDynamics->coordinatesOld[i][k]; for (k=0;k<3;k++) molecularDynamics->velocity[i][k] = 0; } } /*********************************************************************************/ static void applyRattleSecondPortion(MolecularDynamics* molecularDynamics) { gint i; gint k; gint maxIter = 1000; gdouble omega = 1.0; gdouble tolerance = 1e-6; gboolean done = FALSE; gint nIter = 0; gint a1 = 0; gint a2 = 0; gdouble r2ij; gdouble dot; gdouble invMass1; gdouble invMass2; gdouble term = 0; gdouble terms[3]; gdouble d; Molecule* m = &molecularDynamics->forceField->molecule; ForceField* forceField = molecularDynamics->forceField; gdouble deltaMax = 0; if(forceField->options.rattleConstraints==NOCONSTRAINTS) return; tolerance /= molecularDynamics->dt; for (i = 0; i < molecularDynamics->numberOfAtoms; i++) { molecularDynamics->moved[i] = molecularDynamics->forceField->molecule.atoms[i].variable; molecularDynamics->update[i] = FALSE; } /* maxIter *= molecularDynamics->forceField->numberOfRattleConstraintsTerms;*/ do{ nIter++; done=TRUE; deltaMax = 0; for (i = 0; i < molecularDynamics->forceField->numberOfRattleConstraintsTerms; i++) { a1 = (gint)molecularDynamics->forceField->rattleConstraintsTerms[0][i]; a2 = (gint)molecularDynamics->forceField->rattleConstraintsTerms[1][i]; r2ij = molecularDynamics->forceField->rattleConstraintsTerms[2][i]; if( !molecularDynamics->moved[a1] && !molecularDynamics->moved[a2] ) continue; /* here : rattle image for PBC, not yet implemented */ dot = 0; for (k=0;k<3;k++) { d = m->atoms[a2].coordinates[k]-m->atoms[a1].coordinates[k]; dot +=d*(molecularDynamics->velocity[a2][k]-molecularDynamics->velocity[a1][k]); } invMass1 = 1/molecularDynamics->forceField->molecule.atoms[a1].prop.masse; invMass2 = 1/molecularDynamics->forceField->molecule.atoms[a2].prop.masse; term = -dot / ((invMass1+invMass2)*r2ij); if(fabs(term)<=tolerance) continue; /* if(fabs(dot/r2ij)<=tolerance) continue;*/ if(deltaMaxupdate[a1] = TRUE; molecularDynamics->update[a2] = TRUE; term *= omega; for (k=0;k<3;k++) { d = m->atoms[a2].coordinates[k]-m->atoms[a1].coordinates[k]; terms[k] = d*term; } for (k=0;k<3;k++) molecularDynamics->velocity[a1][k] -= terms[k]*invMass1; for (k=0;k<3;k++) molecularDynamics->velocity[a2][k] += terms[k]*invMass2; } for (i = 0; i < molecularDynamics->numberOfAtoms; i++) { molecularDynamics->moved[i] = molecularDynamics->update[i]; molecularDynamics->update[i] = FALSE; } }while(!done && nIter=maxIter && deltaMax>tolerance*10) { printf(_("Rattle second portion : Warning, velocity constraints not satisfied\n")); for (i = 0; i < molecularDynamics->forceField->numberOfRattleConstraintsTerms; i++) { a1 = (gint)molecularDynamics->forceField->rattleConstraintsTerms[0][i]; a2 = (gint)molecularDynamics->forceField->rattleConstraintsTerms[1][i]; r2ij = 0; for (k=0;k<3;k++) { d = m->atoms[a2].coordinates[k]-m->atoms[a1].coordinates[k]; r2ij +=d*d; } dot = 0; for (k=0;k<3;k++) { d = m->atoms[a2].coordinates[k]-m->atoms[a1].coordinates[k]; dot +=d*(molecularDynamics->velocity[a2][k]-molecularDynamics->velocity[a1][k]); } invMass1 = 1/molecularDynamics->forceField->molecule.atoms[a1].prop.masse; invMass2 = 1/molecularDynamics->forceField->molecule.atoms[a2].prop.masse; term = -dot / ((invMass1+invMass2)*r2ij); printf("%d %d %s %s r2ij=%f r2Old=%f term=%f\n", a1,a2, molecularDynamics->forceField->molecule.atoms[a1].mmType, molecularDynamics->forceField->molecule.atoms[a2].mmType, r2ij, molecularDynamics->forceField->rattleConstraintsTerms[2][i],term); } StopCalcul=TRUE; } for (i = 0; i < molecularDynamics->numberOfAtoms; i++) if(!m->atoms[i].variable) for (k=0;k<3;k++) molecularDynamics->velocity[i][k] = 0; } /*********************************************************************************/ static void applyVerlet(MolecularDynamics* molecularDynamics) { gint i; gint j; if(molecularDynamics->forceField->options.rattleConstraints!=NOCONSTRAINTS) for (i = 0; i < molecularDynamics->numberOfAtoms; i++) for ( j = 0; j < 3; j++) molecularDynamics->coordinatesOld[i][j]= molecularDynamics->forceField->molecule.atoms[i].coordinates[j]; for (i = 0; i < molecularDynamics->numberOfAtoms; i++) { if(!molecularDynamics->forceField->molecule.atoms[i].variable) continue; for ( j = 0; j < 3; j++) { molecularDynamics->forceField->molecule.atoms[i].coordinates[j] += molecularDynamics->velocity[i][j] * molecularDynamics->dt + molecularDynamics->a[i][j]*molecularDynamics->dt2_2; } for ( j = 0; j < 3; j++) molecularDynamics->velocity[i][j] += molecularDynamics->a[i][j] * molecularDynamics->dt_2; } if(molecularDynamics->forceField->options.rattleConstraints!=NOCONSTRAINTS) applyRattleFirstPortion(molecularDynamics); newAccelaration(molecularDynamics); for (i = 0; i < molecularDynamics->numberOfAtoms; i++) { if(!molecularDynamics->forceField->molecule.atoms[i].variable) continue; for ( j = 0; j < 3; j++) molecularDynamics->velocity[i][j] += molecularDynamics->a[i][j] * molecularDynamics->dt_2; } if(molecularDynamics->forceField->options.rattleConstraints!=NOCONSTRAINTS) applyRattleSecondPortion(molecularDynamics); } /*********************************************************************************/ static void applyBeeman(MolecularDynamics* molecularDynamics) { gint i; gint j; gdouble terms[3]; if(molecularDynamics->forceField->options.rattleConstraints!=NOCONSTRAINTS) for (i = 0; i < molecularDynamics->numberOfAtoms; i++) for ( j = 0; j < 3; j++) molecularDynamics->coordinatesOld[i][j]= molecularDynamics->forceField->molecule.atoms[i].coordinates[j]; for (i = 0; i < molecularDynamics->numberOfAtoms; i++) { if(!molecularDynamics->forceField->molecule.atoms[i].variable) continue; for ( j = 0; j < 3; j++) terms[j] = 5.0*molecularDynamics->a[i][j]-molecularDynamics->aold[i][j]; for ( j = 0; j < 3; j++) { molecularDynamics->forceField->molecule.atoms[i].coordinates[j] += molecularDynamics->velocity[i][j] * molecularDynamics->dt + terms[j]*molecularDynamics->dt2_8; } for ( j = 0; j < 3; j++) molecularDynamics->velocity[i][j] += terms[j] * molecularDynamics->dt_8; } if(molecularDynamics->forceField->options.rattleConstraints!=NOCONSTRAINTS) applyRattleFirstPortion(molecularDynamics); newAccelaration(molecularDynamics); for (i = 0; i < molecularDynamics->numberOfAtoms; i++) { if(!molecularDynamics->forceField->molecule.atoms[i].variable) continue; for ( j = 0; j < 3; j++) molecularDynamics->velocity[i][j] += (3.0*molecularDynamics->a[i][j]+molecularDynamics->aold[i][j]) * molecularDynamics->dt_8; } if(molecularDynamics->forceField->options.rattleConstraints!=NOCONSTRAINTS) applyRattleSecondPortion(molecularDynamics); } /**********************************************************************/ static gdouble erfinv( gdouble y ) { static gdouble a[] = {0, 0.886226899, -1.645349621, 0.914624893, -0.140543331 }; static gdouble b[] = {0, -2.118377725, 1.442710462, -0.329097515, 0.012229801 }; static gdouble c[] = {0, -1.970840454, -1.624906493, 3.429567803, 1.641345311 }; static gdouble d[] = {0, 3.543889200, 1.637067800 }; gdouble x=1e100, z; if ( y < -1. ) return x; if ( y > 1. ) return x; if ( y >= -.7 ) { if ( y <= .7 ) { z = y*y; x = y * (((a[4]*z+a[3])*z+a[2])*z+a[1]) / ((((b[4]*z+b[3])*z+b[2])*z+b[1])*z+1); } else if ( y < 1 ) { z = sqrt(-log((1-y)/2)); x = (((c[4]*z+c[3])*z+c[2])*z+c[1]) / ((d[2]*z+d[1])*z+1); } } else { z = sqrt(-log((1+y)/2)); x = -(((c[4]*z+c[3])*z+c[2])*z+c[1]) / ((d[2]*z+d[1])*z+1); } return x; } /**********************************************************************/ static void getRandVect(gdouble len, gdouble V[]) { gdouble l = 0; gint j; for(j=0;j<3;j++) { V [j] = drandom(); l += V[j]*V[j]; } if(l<=0) return; l = sqrt(l); for(j=0;j<3;j++) V [j] *= len/l; } /**********************************************************************/ static gdouble maxwel(gdouble masse, gdouble temperature) { /* * physical constants in SI units * ------------------------------ * Kb = 1.380662 E-23 J/K * Na = 6.022045 E23 1/mol * e = 1.6021892 E-19 C * eps = 8.85418782 E-12 F/m * * 1 Kcal = 4184.0 J * 1 amu = 1.6605655 E-27 Kg * 1 A = 1.0 E-10 m * * Internally, AKMA units are used: * KBOLTZ = Na *Kb / 1 Kcal */ /* gdouble Kb = 6.022045e23*1.380662e-23/4184.0;*/ gdouble Kb = 1.9871914e-3; gdouble beta = sqrt(masse / (2.0*Kb*temperature)); gdouble rho; gdouble xs, ys, zs; rho = drandom(); xs = erfinv(rho)/beta; rho = drandom(); ys = erfinv(rho)/beta; rho = drandom(); zs = erfinv(rho)/beta; return sqrt(xs*xs+ys*ys+zs*zs); } /*********************************************************************************/ static void newProperties(MolecularDynamics* molecularDynamics, gchar* comments) { if( molecularDynamics->fileProp == NULL) return; fprintf(molecularDynamics->fileProp,"time0(fs)\ttime(fs)\tTotal Energy(Kcal/mol)\tPotential Energy(kcal/mol) Kinetic Energy(Kcal/mol)\tT(t) (K)\tTaver(K)\tsigma(T)(K)"); if(comments) fprintf(molecularDynamics->fileProp,"%s\n", comments); else fprintf(molecularDynamics->fileProp,"\n"); } /*********************************************************************************/ static void saveProperties(MolecularDynamics* molecularDynamics, gint iStep0, gint iStep, gchar* comments) { /* gdouble fsInAKMA = 1.0/sqrt(1e-10*1e-10*1.6605655e-27*6.022045e23/4184.0)/1e15;*/ static gdouble fsInAKMA = 0.020454828110640; gdouble dt = molecularDynamics->dt/(fsInAKMA); static gdouble Ttot = 0; static gdouble T2tot = 0; gdouble Taver = 0; gdouble T2aver = 0; if( molecularDynamics->fileProp == NULL) return; if(iStep==1) { Ttot = 0; T2tot = 0; } Ttot += molecularDynamics->kelvin; T2tot += molecularDynamics->kelvin*molecularDynamics->kelvin; Taver = Ttot/iStep; T2aver = T2tot/iStep; fprintf(molecularDynamics->fileProp,"%f\t%f\t%f\t\t%f\t\t%f\t%f\t%f\t%f", (iStep0)*dt, (iStep)*dt, molecularDynamics->totalEnergy, molecularDynamics->potentialEnergy, molecularDynamics->kineticEnergy, molecularDynamics->kelvin, Taver, sqrt(fabs(T2aver-Taver*Taver)) ); if(comments) fprintf(molecularDynamics->fileProp,"%s\n", comments); else fprintf(molecularDynamics->fileProp,"\n"); } /*********************************************************************************/ static void saveTrajectory(MolecularDynamics* molecularDynamics, gint iStep) { /* gdouble fsInAKMA = 1.0/sqrt(1e-10*1e-10*1.6605655e-27*6.022045e23/4184.0)/1e15;*/ static gdouble fsInAKMA = 0.020454828110640; gdouble dt = molecularDynamics->dt/(fsInAKMA); gint i; if( molecularDynamics->fileTraj == NULL) return; fprintf(molecularDynamics->fileTraj," %d %f %f %f %f nAtoms time(fs) TotalEnery(Kcal/mol) Kinetic Potential\n", molecularDynamics->numberOfAtoms, (iStep)*dt, molecularDynamics->totalEnergy, molecularDynamics->kineticEnergy, molecularDynamics->potentialEnergy ); fprintf(molecularDynamics->fileTraj," %s\n", "Coord in Ang, Velocity in AKMA, time in fs"); for (i = 0; i < molecularDynamics->numberOfAtoms; i++) { fprintf(molecularDynamics->fileTraj," %s %f %f %f %f %f %f %f %s %s %s %d %d\n", molecularDynamics->forceField->molecule.atoms[i].prop.symbol, molecularDynamics->forceField->molecule.atoms[i].coordinates[0], molecularDynamics->forceField->molecule.atoms[i].coordinates[1], molecularDynamics->forceField->molecule.atoms[i].coordinates[2], molecularDynamics->velocity[i][0], molecularDynamics->velocity[i][1], molecularDynamics->velocity[i][2], molecularDynamics->forceField->molecule.atoms[i].charge, molecularDynamics->forceField->molecule.atoms[i].mmType, molecularDynamics->forceField->molecule.atoms[i].pdbType, molecularDynamics->forceField->molecule.atoms[i].residueName, molecularDynamics->forceField->molecule.atoms[i].residueNumber, molecularDynamics->forceField->molecule.atoms[i].variable ); } } /**********************************************************************/ void freeMolecularDynamics(MolecularDynamics* molecularDynamics) { molecularDynamics->forceField = NULL; molecularDynamics->numberOfAtoms = 0; molecularDynamics->updateFrequency = 0; if(molecularDynamics->velocity) { gint i; for(i=0;inumberOfAtoms;i++) if(molecularDynamics->velocity[i]) g_free(molecularDynamics->velocity[i]); g_free(molecularDynamics->velocity); } if(molecularDynamics->a) { gint i; for(i=0;inumberOfAtoms;i++) if(molecularDynamics->a[i]) g_free(molecularDynamics->a[i]); g_free(molecularDynamics->a); } if(molecularDynamics->aold) { gint i; for(i=0;inumberOfAtoms;i++) if(molecularDynamics->aold[i]) g_free(molecularDynamics->aold[i]); g_free(molecularDynamics->aold); } if(molecularDynamics->coordinatesOld) { gint i; for(i=0;inumberOfAtoms;i++) if(molecularDynamics->coordinatesOld[i]) g_free(molecularDynamics->coordinatesOld[i]); g_free(molecularDynamics->coordinatesOld); } if(molecularDynamics->moved) g_free(molecularDynamics->moved); if(molecularDynamics->update) g_free(molecularDynamics->update); } /********************************************************************************/ static gdouble getEKin(MolecularDynamics* molecularDynamics) { gdouble ekin = 0; gint i; gint j; gdouble masse; for ( i = 0; i < molecularDynamics->numberOfAtoms; i++) { masse = molecularDynamics->forceField->molecule.atoms[i].prop.masse; for ( j = 0; j < 3; j++) ekin += molecularDynamics->velocity[i][j]*molecularDynamics->velocity[i][j]* masse; } return ekin/2; } /********************************************************************************/ static gdouble getKelvin(MolecularDynamics* molecularDynamics) { gint nfree = molecularDynamics->nfree; static gdouble Kb = 1.9871914e-3; if(nfree<1) return 0; return 2*getEKin(molecularDynamics) / ( nfree * Kb); } /********************************************************************************/ /* literature references: M. P. Allen, "Brownian Dynamics Simulation of a Chemical Reaction in Solution", Molecular Physics, 40, 1073-1087 (1980) F. Guarnieri and W. C. Still, "A Rapidly Convergent Simulation Method: Mixed Monte Carlo / Stochastic Dynamics", Journal of Computational Chemistry, 15, 1302-1310 (1994) */ /*********************************************************************************/ static void getsFrictionalAndRandomForce(MolecularDynamics* molecularDynamics) { gdouble* gamma = molecularDynamics->gamma; gdouble* positionFriction = molecularDynamics->positionFriction; gdouble* velocityFriction = molecularDynamics->velocityFriction; gdouble* accelarationFriction = molecularDynamics->accelarationFriction; gdouble** positionRandom = molecularDynamics->positionRandom; gdouble** velocityRandom = molecularDynamics->velocityRandom; gdouble dt = molecularDynamics->dt; gint n = molecularDynamics->numberOfAtoms; gint i; gint j; gdouble gdt; gdouble egdt; gdouble ktm = 0; gdouble pterm; gdouble vterm; gdouble psig; gdouble vsig; gdouble rho; gdouble rhoc; gdouble pnorm; gdouble vnorm; static gdouble Kb = 1.9871914e-3; for(i=0;ifriction; /* printf(" friction = %f\n", molecularDynamics->friction);*/ for(i=0;i=0.05) { egdt = exp(-gdt); positionFriction[i] = egdt; velocityFriction[i] = (1.0-egdt) / gamma[i]; accelarationFriction[i] = (dt-velocityFriction[i]) / gamma[i]; pterm = 2.0*gdt - 3.0 + (4.0-egdt)*egdt; vterm = 1.0 - egdt*egdt; rho = (1.0-egdt)*(1.0-egdt) / sqrt(pterm*vterm); } /* use series expansions when friction coefficient is small */ else { gdouble gdt2 = gdt * gdt; gdouble gdt3 = gdt * gdt2; gdouble gdt4 = gdt2 * gdt2; gdouble gdt5 = gdt2 * gdt3; gdouble gdt6 = gdt3 * gdt3; gdouble gdt7 = gdt3 * gdt4; gdouble gdt8 = gdt4 * gdt4; gdouble gdt9 = gdt4 * gdt5; accelarationFriction[i] = (gdt2/2.0 - gdt3/6.0 + gdt4/24.0 - gdt5/120.0 + gdt6/720.0 - gdt7/5040.0 + gdt8/40320.0 - gdt9/362880.0) / gamma[i]/gamma[i]; velocityFriction[i] = dt - gamma[i]*accelarationFriction[i]; positionFriction[i] = 1.0 - gamma[i]*velocityFriction[i]; pterm = 2.0*gdt3/3.0 - gdt4/2.0 + 7.0*gdt5/30.0 - gdt6/12.0 + 31.0*gdt7/1260.0 - gdt8/160.0 + 127.0*gdt9/90720.0; vterm = 2.0*gdt - 2.0*gdt2 + 4.0*gdt3/3.0 - 2.0*gdt4/3.0 + 4.0*gdt5/15.0 - 4.0*gdt6/45.0 + 8.0*gdt7/315.0 - 2.0*gdt8/315.0 + 4.0*gdt9/2835.0; rho = sqrt(3.0) * (0.5 - 3.0*gdt/16.0 - 17.0*gdt2/1280.0 + 17.0*gdt3/6144.0 + 40967.0*gdt4/34406400.0 - 57203.0*gdt5/275251200.0 - 1429487.0*gdt6/13212057600.0); } ktm = Kb * molecularDynamics->temperature / molecularDynamics->forceField->molecule.atoms[i].prop.masse; psig = sqrt(ktm*pterm) / gamma[i]; vsig = sqrt(ktm*vterm); rhoc = sqrt(1.0 - rho*rho); for(j=0;j<3;j++) { pnorm = normal(); vnorm = normal (); positionRandom[i][j] = psig * pnorm; velocityRandom[i][j] = vsig * (rho*pnorm+rhoc*vnorm); } } } } /*********************************************************************************/ static void applyStochastic(MolecularDynamics* molecularDynamics) { gdouble* positionFriction = molecularDynamics->positionFriction; gdouble* velocityFriction = molecularDynamics->velocityFriction; gdouble* accelarationFriction = molecularDynamics->accelarationFriction; gdouble** positionRandom = molecularDynamics->positionRandom; gdouble** velocityRandom = molecularDynamics->velocityRandom; gdouble**v = molecularDynamics->velocity; gdouble**a = molecularDynamics->a; gint n = molecularDynamics->numberOfAtoms; gint i; gint j; AtomMol* atoms = molecularDynamics->forceField->molecule.atoms; getsFrictionalAndRandomForce(molecularDynamics); if(molecularDynamics->forceField->options.rattleConstraints!=NOCONSTRAINTS) for (i = 0; i < n; i++) for ( j = 0; j < 3; j++) molecularDynamics->coordinatesOld[i][j]= molecularDynamics->forceField->molecule.atoms[i].coordinates[j]; for(i=0;iforceField->molecule.atoms[i].variable) continue; for(j=0;j<3;j++) atoms[i].coordinates[j] += v[i][j]*velocityFriction[i] + a[i][j]*accelarationFriction[i] + positionRandom[i][j]; for(j=0;j<3;j++) v[i][j] = v[i][j]*positionFriction[i] + 0.5*a[i][j]*velocityFriction[i]; } if(molecularDynamics->forceField->options.rattleConstraints!=NOCONSTRAINTS) applyRattleFirstPortion(molecularDynamics); newAccelaration(molecularDynamics); for (i = 0; i < n; i++) { if(!molecularDynamics->forceField->molecule.atoms[i].variable) continue; for ( j = 0; j < 3; j++) v[i][j] += 0.5*a[i][j]*velocityFriction[i] + velocityRandom[i][j]; } if(molecularDynamics->forceField->options.rattleConstraints!=NOCONSTRAINTS) applyRattleSecondPortion(molecularDynamics); computeEnergies(molecularDynamics); } /*********************************************************************************/ static gdouble drandom() { return (rand()/(gdouble)RAND_MAX); } /*********************************************************************************/ /* "normal" generates a random number from a normal Gaussian distribution with a mean of zero and a variance of one */ static gdouble normal() { gdouble v1,v2,rsq; gdouble factor; static gdouble store; static gboolean compute = TRUE; if (compute) { do{ v1 = 2.0 * drandom() - 1.0; v2 = 2.0 * drandom () - 1.0; rsq = v1*v1 + v2*v2; }while(rsq >= 1.0); compute = FALSE; factor = sqrt(-2.0*log(rsq)/rsq); store = v1 * factor; return v2 * factor; } /* use the second random value computed at the last call */ else { compute = TRUE; return store; } } /*********************************************************************************/ GabeditSrc250/src/MolecularMechanics/LoadPDBTemplate.h0000644000175100017510000000027713130665225023100 0ustar alloucheallouche #ifndef __GABEDIT_LOADPDBTEMPLATE_H__ #define __GABEDIT_LOADPDBTEMPLATE_H__ gboolean readPDBTemplate(PDBTemplate* pdbTemplate,gchar* filename); #endif /* __GABEDIT_LOADPDBTEMPLATE_H__ */ GabeditSrc250/src/MolecularMechanics/LoadPDBTemplate.c0000644000175100017510000001251213130665225023066 0ustar alloucheallouche/* LoadPDBTemplate.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../MolecularMechanics/PDBTemplate.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" /**********************************************************************/ gchar** getResiduesList(FILE* file,gint* nResidue) { gchar** t = (gchar**)g_malloc(sizeof(gchar*)); gchar dump[BSIZE]; gint len = BSIZE; gint n; gboolean Ok = FALSE; *nResidue = 0; fseek(file, 0L, SEEK_SET); { char* e = fgets(dump,len,file);} while(!feof(file)) { if(fgets(dump,len,file)) { if(strstr(dump,"Begin Residue List")) { Ok = TRUE; break; } } } if(!Ok) return NULL; n = 0; while(!feof(file)) { if(fgets(dump,len,file)) { if(strstr(dump,"End")) break; } t = g_realloc(t,(n+1)*sizeof(gchar*)); t[n] = (gchar*)g_malloc(BSIZE*sizeof(gchar)); sscanf(dump,"%s",t[n]); n++; } if(n==0) { free(t); return NULL; } *nResidue = n; return t; } /**********************************************************************/ void setResiduesList(PDBTemplate* pdbTemplate, FILE* file) { gint nResidue; gchar** t = getResiduesList(file,&nResidue); pdbTemplate->numberOfResidues = nResidue; pdbTemplate->residueTemplates = NULL; if(nResidue>0 && t) { gint i; pdbTemplate->residueTemplates = g_malloc(nResidue*sizeof(PDBResidueTemplate)); for(i=0;iresidueTemplates[i].residueName = g_strdup(t[i]); pdbTemplate->residueTemplates[i].numberOfTypes = 0; pdbTemplate->residueTemplates[i].typeTemplates = NULL; g_free(t[i]); } g_free(t); } } /**********************************************************************/ void setOneResidue(PDBTemplate* pdbTemplate, FILE* file,gint residueNumber) { gchar title[BSIZE]; gchar pdbType[BSIZE]; gchar mmType[BSIZE]; gchar charge[BSIZE]; gchar dump[BSIZE]; gint len = BSIZE; gint n = 0; PDBTypeTemplate *typeTemplates = NULL; gboolean Ok = FALSE; sprintf(title,"Begin %s Residue",pdbTemplate->residueTemplates[residueNumber].residueName); fseek(file, 0L, SEEK_SET); while(!feof(file)) { if(fgets(dump,len,file)) { if(strstr(dump,title)) { Ok = TRUE; break; } } } if(!Ok) return; n = 0; typeTemplates = g_malloc(sizeof(PDBTypeTemplate)); while(!feof(file)) { if(fgets(dump,len,file)) { if(strstr(dump,"End")) break; } sscanf(dump,"%s %s %s",pdbType, mmType, charge); /*printf("pdbType = %s mmType = %s charge = %s\n",pdbType, mmType, charge);*/ typeTemplates[n].pdbType = g_strdup(pdbType); typeTemplates[n].mmType = g_strdup(mmType); typeTemplates[n].charge = atof(charge); n++; typeTemplates = g_realloc(typeTemplates,(n+1)*sizeof(PDBTypeTemplate)); } if(n==0) { g_free(typeTemplates); pdbTemplate->residueTemplates[residueNumber].numberOfTypes = 0; pdbTemplate->residueTemplates[residueNumber].typeTemplates = NULL; return; } typeTemplates = g_realloc(typeTemplates,n*sizeof(PDBTypeTemplate)); pdbTemplate->residueTemplates[residueNumber].numberOfTypes = n; pdbTemplate->residueTemplates[residueNumber].typeTemplates = typeTemplates; } /**********************************************************************/ void setAllResidues(PDBTemplate* pdbTemplate, FILE* file) { gint i; gint n = pdbTemplate->numberOfResidues; /* printf("numberOfResidues = %d\n",pdbTemplate->numberOfResidues);*/ for(i=0;i #include #include #include "../Common/Global.h" #include "../Utils/AtomsProp.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "Atom.h" #include "Molecule.h" #include "ForceField.h" #include "MolecularMechanics.h" static gchar atomTypesTitle[] = "Begin INPUT FOR ATOM TYPES, MASSE AND POLARISABILITIES"; static gchar bondStretchTitle[] = "Begin INPUT FOR BOND LENGTH PARAMETERS"; static gchar angleBendTitle[] = "Begin INPUT FOR BOND ANGLE PARAMETERS"; static gchar hydrogenBondedTitle[] = "Begin INPUT FOR H-BOND 10-12 POTENTIAL PARAMETERS"; static gchar improperTorsionTitle[] ="Begin INPUT FOR IMPROPER DIHEDRAL PARAMETERS"; static gchar nonBondedTitle[] ="Begin INPUT FOR THE NON-BONDED 6-12 POTENTIAL PARAMETERS"; static gchar dihedralAngleTitle[] = "Begin INPUT FOR DIHEDRAL PARAMETERS"; static gchar pairWiseTitle[] = "Begin INPUT FOR PAIR WISE PARAMETERS"; /**********************************************************************/ static gboolean readAmberTypes(AmberParameters* amberParameters, FILE* file) { gchar t[BSIZE]; gchar dumpName[BSIZE]; gchar dumpSymb[BSIZE]; gchar dumpDesc[BSIZE]; gint len = BSIZE; gboolean Ok = FALSE; gint n = 0; AmberAtomTypes* types = NULL; gint np; /* Search Begin INPUT FOR ATOM TYPES */ while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,atomTypesTitle)) { Ok = TRUE; break; } } } if(!Ok) return FALSE; types = g_malloc(sizeof(AmberAtomTypes)); n = 0; Ok = FALSE; while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,"End")) { Ok = TRUE; break; } } else { Ok = FALSE; break; } np = sscanf(t,"%s %s %d %lf %lf %s", dumpName, dumpSymb, &types[n].number, &types[n].masse, &types[n].polarisability,dumpDesc); types[n].name = g_strdup(dumpName); types[n].symbol = g_strdup(dumpSymb); types[n].number--; /*printf("t=%s\n",t);*/ /*printf("dumpDesc=%s\n",dumpDesc);*/ if(np>=6) { gchar** strsplit; gint ls,l; np = 0; types[n].description = NULL; ls = strlen(t); for(l = 0;l %s ", strsplit[np]);*/ if( np == 5 ) { types[n].description = g_strdup(strsplit[np]);} if(np>5 && types[n].description) { gchar* tmp = types[n].description; types[n].description = g_strdup_printf("%s %s",tmp,strsplit[np]); g_free(tmp); } np++; } /*printf("===>\n");*/ if(!types[n].description) types[n].description = g_strdup(dumpSymb); ls = strlen(types[n].description); for(l = 0;lnumberOfTypes = n; amberParameters->atomTypes = types; } /* printing for test*/ /* printf("umber of types = %d \n",amberParameters->numberOfTypes); for(n=0;nnumberOfTypes;n++) { printf("%s\t %d\t", amberParameters->atomTypes[n].name, amberParameters->atomTypes[n].number ); } printf("\n"); */ return TRUE; } /**********************************************************************/ static gboolean readAmberBondStretchTerms(AmberParameters* amberParameters,FILE* file) { gchar t[BSIZE]; gint len = BSIZE; gboolean Ok = FALSE; gint n = 0; AmberBondStretchTerms* terms = NULL; /* Search Begin INPUT FOR ATOM TYPES */ while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,bondStretchTitle)) { Ok = TRUE; break; } } } if(!Ok) return FALSE; terms = g_malloc(sizeof(AmberBondStretchTerms)); n = 0; Ok = FALSE; while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,"End")) { Ok = TRUE; break; } } else { Ok = FALSE; break; } sscanf(t,"%d %d %lf %lf", &terms[n].numbers[0], &terms[n].numbers[1], &terms[n].forceConstant, &terms[n].equilibriumDistance); terms[n].numbers[0]--; terms[n].numbers[1]--; if(terms[n].numbers[0]>terms[n].numbers[1]) { gint t = terms[n].numbers[0]; terms[n].numbers[0] = terms[n].numbers[1]; terms[n].numbers[1] = t; } n++; terms = g_realloc(terms,(n+1)*sizeof(AmberBondStretchTerms)); } if(n==0 || !Ok ) g_free(terms); else { amberParameters->numberOfStretchTerms = n; amberParameters->bondStretchTerms = terms; } /* printing for test*/ /* printf("number of bonds = %d \n",amberParameters->numberOfStretchTerms); for(n=0;nnumberOfStretchTerms;n++) { printf("%d %d %f %f\n", amberParameters->bondStretchTerms[n].numbers[0], amberParameters->bondStretchTerms[n].numbers[1], amberParameters->bondStretchTerms[n].forceConstant, amberParameters->bondStretchTerms[n].equilibriumDistance ); } printf("\n"); */ return TRUE; } /**********************************************************************/ static gboolean readAmberAngleBendTerms(AmberParameters* amberParameters,FILE* file) { gchar t[BSIZE]; gint len = BSIZE; gboolean Ok = FALSE; gint n = 0; AmberAngleBendTerms* terms = NULL; /* Search Begin INPUT FOR ATOM TYPES */ while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,angleBendTitle)) { Ok = TRUE; break; } } } if(!Ok) return FALSE; terms = g_malloc(sizeof(AmberAngleBendTerms)); n = 0; Ok = FALSE; while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,"End")) { Ok = TRUE; break; } } else { Ok = FALSE; break; } sscanf(t,"%d %d %d %lf %lf", &terms[n].numbers[0], &terms[n].numbers[1], &terms[n].numbers[2], &terms[n].forceConstant, &terms[n].equilibriumAngle); terms[n].numbers[0]--; terms[n].numbers[1]--; terms[n].numbers[2]--; if(terms[n].numbers[0]>terms[n].numbers[2]) { gint t = terms[n].numbers[0]; terms[n].numbers[0] = terms[n].numbers[2]; terms[n].numbers[2] = t; } n++; terms = g_realloc(terms,(n+1)*sizeof(AmberAngleBendTerms)); } if(n==0 || !Ok ) g_free(terms); else { amberParameters->numberOfBendTerms = n; amberParameters->angleBendTerms = terms; } /* printing for test*/ /* printf("number of bonds = %d \n",amberParameters->numberOfBendTerms); for(n=0;nnumberOfBendTerms;n++) { printf("%d %d %d %f %f\n", amberParameters->angleBendTerms[n].numbers[0], amberParameters->angleBendTerms[n].numbers[1], amberParameters->angleBendTerms[n].numbers[2], amberParameters->angleBendTerms[n].forceConstant, amberParameters->angleBendTerms[n].equilibriumAngle ); } printf("\n"); */ return TRUE; } /**********************************************************************/ static gboolean readAmberDihedralAngleTerms(AmberParameters* amberParameters,FILE* file) { gchar t[BSIZE]; gint len = BSIZE; gboolean Ok = FALSE; gint n = 0; AmberDihedralAngleTerms* terms = NULL; gdouble divisor = 1; gdouble barrier = 0; gdouble phase = 0; gdouble nN = 0; gint d; /* Search Begin INPUT FOR DIHEDRAL PARAMETERS */ while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,dihedralAngleTitle)) { Ok = TRUE; break; } } } if(!Ok) return FALSE; terms = g_malloc(sizeof(AmberDihedralAngleTerms)); n = 0; Ok = FALSE; while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,"End")) { Ok = TRUE; break; } } else { Ok = FALSE; break; } terms[n].nSomme = 1; terms[n].divisor = g_malloc(sizeof(gdouble)); terms[n].barrier = g_malloc(sizeof(gdouble)); terms[n].phase = g_malloc(sizeof(gdouble)); terms[n].n = g_malloc(sizeof(gdouble)); sscanf(t,"%d %d %d %d %lf %lf %lf %lf", &terms[n].numbers[0], &terms[n].numbers[1], &terms[n].numbers[2], &terms[n].numbers[3], &divisor, &barrier, &phase, &nN); terms[n].divisor[0] = divisor; terms[n].barrier[0] = barrier; terms[n].phase[0] = phase; terms[n].n[0] = fabs(nN); terms[n].numbers[0]--; terms[n].numbers[1]--; terms[n].numbers[2]--; terms[n].numbers[3]--; if(terms[n].numbers[0]>terms[n].numbers[3]) { gint t = terms[n].numbers[0]; terms[n].numbers[0] = terms[n].numbers[3]; terms[n].numbers[3] = t; t = terms[n].numbers[1]; terms[n].numbers[1] = terms[n].numbers[2]; terms[n].numbers[2] = t; } Ok = TRUE; while(!feof(file) && nN<0) { if(!fgets(t,len,file)) { Ok = FALSE; break; } terms[n].nSomme++; terms[n].divisor = g_realloc(terms[n].divisor,terms[n].nSomme*sizeof(gdouble)); terms[n].barrier = g_realloc(terms[n].barrier,terms[n].nSomme*sizeof(gdouble)); terms[n].phase = g_realloc(terms[n].phase,terms[n].nSomme*sizeof(gdouble)); terms[n].n = g_realloc(terms[n].n,terms[n].nSomme*sizeof(gdouble)); sscanf(t,"%d %d %d %d %lf %lf %lf %lf", &d,&d,&d,&d, &divisor,&barrier,&phase,&nN); terms[n].divisor[terms[n].nSomme-1] = divisor; terms[n].barrier[terms[n].nSomme-1] = barrier; terms[n].phase[terms[n].nSomme-1] = phase; terms[n].n[terms[n].nSomme-1] = fabs(nN); } if(!Ok) break; n++; terms = g_realloc(terms,(n+1)*sizeof(AmberDihedralAngleTerms)); } if(n==0 || !Ok ) g_free(terms); else { amberParameters->numberOfDihedralTerms = n; amberParameters->dihedralAngleTerms = terms; } /* printing for test*/ /* printf("number of dihedral torsion terms = %d \n", amberParameters->numberOfDihedralTerms); for(n=0;nnumberOfDihedralTerms;n++) { gint j; printf("%d %d %d %d \t", amberParameters->dihedralAngleTerms[n].numbers[0], amberParameters->dihedralAngleTerms[n].numbers[1], amberParameters->dihedralAngleTerms[n].numbers[2], amberParameters->dihedralAngleTerms[n].numbers[3] ); for(j=0;jdihedralAngleTerms[n].nSomme;j++) { printf("%f %f %f %f\t", amberParameters->dihedralAngleTerms[n].divisor[j], amberParameters->dihedralAngleTerms[n].barrier[j], amberParameters->dihedralAngleTerms[n].phase[j], amberParameters->dihedralAngleTerms[n].n[j] ); } printf("\n"); } printf("\n"); */ return TRUE; } /**********************************************************************/ static gboolean readAmberImproperTorsionTerms(AmberParameters* amberParameters,FILE* file) { gchar t[BSIZE]; gint len = BSIZE; gboolean Ok = FALSE; gint n = 0; AmberImproperTorsionTerms* terms = NULL; /* Search Begin INPUT FOR ATOM TYPES */ while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,improperTorsionTitle)) { Ok = TRUE; break; } } } if(!Ok) return FALSE; terms = g_malloc(sizeof(AmberImproperTorsionTerms)); n = 0; Ok = FALSE; while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,"End")) { Ok = TRUE; break; } } else { Ok = FALSE; break; } sscanf(t,"%d %d %d %d %lf %lf %lf", &terms[n].numbers[0], &terms[n].numbers[1], &terms[n].numbers[2], &terms[n].numbers[3], &terms[n].barrier, &terms[n].phase, &terms[n].n); terms[n].numbers[0]--; terms[n].numbers[1]--; terms[n].numbers[2]--; terms[n].numbers[3]--; if(terms[n].numbers[0]>terms[n].numbers[3]) { gint t = terms[n].numbers[0]; terms[n].numbers[0] = terms[n].numbers[3]; terms[n].numbers[3] = t; t = terms[n].numbers[1]; terms[n].numbers[1] = terms[n].numbers[2]; terms[n].numbers[2] = t; } n++; terms = g_realloc(terms,(n+1)*sizeof(AmberImproperTorsionTerms)); } if(n==0 || !Ok ) g_free(terms); else { amberParameters->numberOfImproperTorsionTerms = n; amberParameters->improperTorsionTerms = terms; } /* printing for test*/ /* printf("number of improper torsion terms = %d \n", amberParameters->numberOfImproperTorsionTerms); for(n=0;nnumberOfImproperTorsionTerms;n++) { printf("%d %d %d %d %f %f %f\n", amberParameters->improperTorsionTerms[n].numbers[0], amberParameters->improperTorsionTerms[n].numbers[1], amberParameters->improperTorsionTerms[n].numbers[2], amberParameters->improperTorsionTerms[n].numbers[3], amberParameters->improperTorsionTerms[n].barrier, amberParameters->improperTorsionTerms[n].phase, amberParameters->improperTorsionTerms[n].n ); } printf("\n"); */ return TRUE; } /**********************************************************************/ static gboolean readAmberHydrogenBondedTerms(AmberParameters* amberParameters,FILE* file) { gchar t[BSIZE]; gint len = BSIZE; gboolean Ok = FALSE; gint n = 0; AmberHydrogenBondedTerms* terms = NULL; /* Search Begin INPUT FOR ATOM TYPES */ while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,hydrogenBondedTitle)) { Ok = TRUE; break; } } } if(!Ok) return FALSE; terms = g_malloc(sizeof(AmberHydrogenBondedTerms)); n = 0; Ok = FALSE; while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,"End")) { Ok = TRUE; break; } } else { Ok = FALSE; break; } sscanf(t,"%d %d %lf %lf", &terms[n].numbers[0], &terms[n].numbers[1], &terms[n].c, &terms[n].d); terms[n].numbers[0]--; terms[n].numbers[1]--; if(terms[n].numbers[0]>terms[n].numbers[1]) { gint t = terms[n].numbers[0]; terms[n].numbers[0] = terms[n].numbers[1]; terms[n].numbers[1] = t; } n++; terms = g_realloc(terms,(n+1)*sizeof(AmberHydrogenBondedTerms)); } if(n==0 || !Ok ) g_free(terms); else { amberParameters->numberOfHydrogenBonded = n; amberParameters->hydrogenBondedTerms = terms; } /* printing for test*/ /* printf("number of hydrogen bonds terms = %d \n",amberParameters->numberOfHydrogenBonded); for(n=0;nnumberOfHydrogenBonded;n++) { printf("%d %d %f %f\n", amberParameters->hydrogenBondedTerms[n].numbers[0], amberParameters->hydrogenBondedTerms[n].numbers[1], amberParameters->hydrogenBondedTerms[n].c, amberParameters->hydrogenBondedTerms[n].d ); } printf("\n"); */ return TRUE; } /**********************************************************************/ static gboolean readAmberNonBondedTerms(AmberParameters* amberParameters,FILE* file) { gchar t[BSIZE]; gint len = BSIZE; gboolean Ok = FALSE; gint n = 0; AmberNonBondedTerms* terms = NULL; /* Search Begin INPUT FOR NON-BONDED */ Ok = FALSE; while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,nonBondedTitle)) { Ok = TRUE; break; } } } if(!Ok) return FALSE; terms = g_malloc(sizeof(AmberNonBondedTerms)); n = 0; Ok = FALSE; while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,"End")) { Ok = TRUE; break; } } else { Ok = FALSE; break; } sscanf(t,"%d %lf %lf", &terms[n].number, &terms[n].r, &terms[n].epsilon); terms[n].number--; n++; terms = g_realloc(terms,(n+1)*sizeof(AmberNonBondedTerms)); } if(n==0 || !Ok ) g_free(terms); else { amberParameters->numberOfNonBonded = n; amberParameters->nonBondedTerms = terms; } /* printing for test*/ /* printf("number of non bended terms = %d \n",amberParameters->numberOfNonBonded); for(n=0;nnumberOfNonBonded;n++) { printf("%d %f %f\n", amberParameters->nonBondedTerms[n].number, amberParameters->nonBondedTerms[n].r, amberParameters->nonBondedTerms[n].epsilon ); } printf("\n"); */ return TRUE; } /**********************************************************************/ static gboolean readAmberPairWiseTerms(AmberParameters* amberParameters,FILE* file) { gchar t[BSIZE]; gint len = BSIZE; gboolean Ok = FALSE; gint n = 0; AmberPairWiseTerms* terms = NULL; /* Search Begin INPUT FOR PAIR WIZE */ Ok = FALSE; while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,pairWiseTitle)) { Ok = TRUE; break; } } } if(!Ok) return FALSE; terms = g_malloc(sizeof(AmberPairWiseTerms)); n = 0; Ok = FALSE; while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,"End")) { Ok = TRUE; break; } } else { Ok = FALSE; break; } sscanf(t,"%d %d %lf %lf %lf %lf %lf %lf", &terms[n].numbers[0], &terms[n].numbers[1], &terms[n].a, &terms[n].beta, &terms[n].c6, &terms[n].c8, &terms[n].c10, &terms[n].b ); terms[n].numbers[0]--; terms[n].numbers[1]--; n++; terms = g_realloc(terms,(n+1)*sizeof(AmberPairWiseTerms)); } if(n==0 || !Ok ) g_free(terms); else { amberParameters->numberOfPairWise = n; amberParameters->pairWiseTerms = terms; } /* printing for test*/ /* printf("number of pair wise terms = %d \n",amberParameters->numberOfPairWise); for(n=0;nnumberOfPairWise;n++) { printf("%d %d %f %f %f %f %d\n", amberParameters->pairWiseTerms[n].numbers[0], amberParameters->pairWiseTerms[n].numbers[1], amberParameters->pairWiseTerms[n].a, amberParameters->pairWiseTerms[n].beta, amberParameters->pairWiseTerms[n].c6, amberParameters->pairWiseTerms[n].c8, amberParameters->pairWiseTerms[n].c10, amberParameters->pairWiseTerms[n].b, ); } printf("\n"); */ return TRUE; } /**********************************************************************/ gboolean readAmberParameters(AmberParameters* amberParameters,gchar* filename) { FILE* file; file = FOpen(filename,"rb"); /* printf("filename = %s\n",filename);*/ if(file == NULL) return FALSE; else { readAmberTypes(amberParameters,file); readAmberBondStretchTerms(amberParameters,file); readAmberAngleBendTerms(amberParameters,file); readAmberDihedralAngleTerms(amberParameters,file); readAmberImproperTorsionTerms(amberParameters,file); readAmberHydrogenBondedTerms(amberParameters,file); readAmberNonBondedTerms(amberParameters,file); readAmberPairWiseTerms(amberParameters,file); fclose(file); } return TRUE; } /**********************************************************************/ GabeditSrc250/src/MolecularMechanics/SetPDBTemplate.c0000644000175100017510000010570313130665225022747 0ustar alloucheallouche/* SetPDBTemplate.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../Utils/AtomsProp.h" #include "../Utils/Utils.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../MolecularMechanics/Atom.h" #include "../MolecularMechanics/Molecule.h" #include "../MolecularMechanics/ForceField.h" #include "../MolecularMechanics/MolecularMechanics.h" #include "../Utils/UtilsInterface.h" #include "../MolecularMechanics/PDBTemplate.h" #include "../MolecularMechanics/LoadPDBTemplate.h" #include "../MolecularMechanics/CreateDefaultPDBTpl.h" #include "../Common/StockIcons.h" #define NENTRYS 4 typedef enum { E_RESIDUE=0, E_PDBTYPE, E_MMTYPE, E_CHARGE } SetEntryType; static GtkWidget* Entrys[NENTRYS]; static gdouble labelWidth = 0.10; static gdouble entryWidth = 0.15; #define lengthListsType 4 static gchar *typeTitles[]={ "Residue", "PDB Type", "MM Type", "Charge" }; static PDBTemplate* pdbTemplate = NULL; static GtkWidget *SetWinDlg = NULL; static GtkWidget *pdbTreeView = NULL; typedef struct _DataTplTree DataTplTree; struct _DataTplTree { gint residueNumber; gint typeNumber; }; static void rafreshTreeView(); typedef enum { LIST_RESIDUE = 0, LIST_PDB_TYPE, LIST_MM_TYPE, LIST_CHARGE, LIST_DATA /* column for data, this column is not visible */ }ListColumnsTypes; static gchar selectedRow[100] = "-1"; /********************************************************************************/ typedef enum { MENU_NEW_RESIDUE =0, MENU_DELETE_RESIDUE, MENU_NEW_TYPE, MENU_EDIT_TYPE, MENU_DELETE_TYPE, MENU_SAVE, MENU_CLOSE } EnumMenuType; /********************************************************************************/ static void freeDataTplTree() { DataTplTree* data = NULL; gint i = 0; gchar* pathString = NULL; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(pdbTreeView)); pathString = g_strdup_printf("%d", i); while (gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE) { gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1); if(data) g_free(data); i++; g_free(pathString); pathString = g_strdup_printf("%d", i); } g_free(pathString); } /********************************************************************************/ gboolean* getExpandInfo() { gint i; gboolean* expandeds = NULL; gint nNodes = 0; gchar* pathString = NULL; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(pdbTreeView)); nNodes = 0; pathString = g_strdup_printf("%d", nNodes); while (gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE) { nNodes++; g_free(pathString); pathString = g_strdup_printf("%d", nNodes); } g_free(pathString); if(nNodes<1) return NULL; expandeds = g_malloc((nNodes+1)*sizeof(gboolean)); for(i=0;iresidueNumber = residueNumber; dataTplTree->typeNumber = typeNumber; return dataTplTree; } /********************************************************************************/ static void newResidue(GtkWidget* w) { gint residueNumber; gint typeNumber; PDBResidueTemplate* residueTemplates; gint numberOfResidues = 0; gchar *residueName; gboolean* expandeds; GtkTreeIter node; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(pdbTreeView)); DataTplTree* data = NULL; if(atoi(selectedRow)<0) return; if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); expandeds = getExpandInfo(); if(!data) return; residueNumber = data->residueNumber; typeNumber = data->typeNumber; if(typeNumber>=0) return; if(residueNumber<0) return; residueName = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entrys[E_RESIDUE]))); delete_all_spaces(residueName); numberOfResidues = pdbTemplate->numberOfResidues; residueTemplates = pdbTemplate->residueTemplates; numberOfResidues++; if(residueTemplates) residueTemplates = g_realloc(residueTemplates,numberOfResidues*sizeof(PDBResidueTemplate)); else residueTemplates = g_malloc(sizeof(PDBResidueTemplate)); residueTemplates[numberOfResidues-1].residueName = g_strdup(residueName); residueTemplates[numberOfResidues-1].typeTemplates = NULL; residueTemplates[numberOfResidues-1].numberOfTypes = 0; pdbTemplate->residueTemplates = residueTemplates; pdbTemplate->numberOfResidues = numberOfResidues; freeDataTplTree(); rafreshTreeView(); setExpandeds(expandeds,selectedRow); g_free(expandeds); g_free(residueName); gtk_widget_destroy(w); } /********************************************************************************/ static void editType(GtkWidget* w) { gint residueNumber; gint typeNumber; PDBTypeTemplate* typeTemplates; G_CONST_RETURN gchar *mmType = gtk_entry_get_text(GTK_ENTRY(Entrys[E_MMTYPE])); G_CONST_RETURN gchar *charge = gtk_entry_get_text(GTK_ENTRY(Entrys[E_CHARGE])); gboolean* expandeds; GtkTreeIter node; GtkTreeModel *model; DataTplTree* data = NULL; if(!isFloat(charge)) { gchar t[] = "The value for 'charge' must be a number."; GtkWidget* w = Message(t,"Error",TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(SetWinDlg)); return; } if(atoi(selectedRow)<0) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(pdbTreeView)); if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); expandeds = getExpandInfo(); if(!data) return; residueNumber = data->residueNumber; typeNumber = data->typeNumber; if(typeNumber<0) return; typeTemplates = pdbTemplate->residueTemplates[residueNumber].typeTemplates; if(typeTemplates[typeNumber].mmType) g_free(typeTemplates[typeNumber].mmType); typeTemplates[typeNumber].mmType = g_strdup(mmType); typeTemplates[typeNumber].charge = atof(charge); freeDataTplTree(); rafreshTreeView(); setExpandeds(expandeds,selectedRow); g_free(expandeds); gtk_widget_destroy(w); } /********************************************************************************/ static gboolean availableType(gint residueNumber,gchar* pdbType) { PDBTypeTemplate* typeTemplates; gint numberOfTypes; gint i; typeTemplates = pdbTemplate->residueTemplates[residueNumber].typeTemplates; numberOfTypes = pdbTemplate->residueTemplates[residueNumber].numberOfTypes; for(i=0;iresidueNumber; typeNumber = data->typeNumber; if(residueNumber<0) return; typeTemplates = pdbTemplate->residueTemplates[residueNumber].typeTemplates; numberOfTypes = pdbTemplate->residueTemplates[residueNumber].numberOfTypes; pdbType = g_strdup(pdbType0); delete_all_spaces(pdbType); if(availableType(residueNumber,pdbType)) { gchar* t = g_strdup_printf(_("Sorry, I can not add this pdb type\n%s is available."),pdbType); GtkWidget* w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(SetWinDlg)); g_free(t); return; } numberOfTypes++; if(typeTemplates) typeTemplates = g_realloc(typeTemplates,numberOfTypes*sizeof(PDBTypeTemplate)); else typeTemplates = g_malloc(sizeof(PDBTypeTemplate)); typeTemplates[numberOfTypes-1].pdbType = g_strdup(pdbType); typeTemplates[numberOfTypes-1].mmType = g_strdup(mmType); typeTemplates[numberOfTypes-1].charge = atof(charge); pdbTemplate->residueTemplates[residueNumber].typeTemplates = typeTemplates; pdbTemplate->residueTemplates[residueNumber].numberOfTypes = numberOfTypes; freeDataTplTree(); rafreshTreeView(); setExpandeds(expandeds,selectedRow); g_free(pdbType); g_free(expandeds); gtk_widget_destroy(w); } /********************************************************************************/ static void editnewDlg(GabeditSignalFunc f,gchar* title, gboolean newResidue) { GtkWidget *WinDlg; GtkWidget *Button; GtkWidget *hbox; GtkWidget *frame; GtkWidget *vboxframe; gint i; gchar **tlist; gint Nc; gint residueNumber; gint typeNumber; PDBTypeTemplate* typeTemplates; gint numberOfTypes; GtkTreeIter node; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(pdbTreeView)); DataTplTree* data = NULL; if(atoi(selectedRow)<0) return; if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); if(!data) return; residueNumber = data->residueNumber; typeNumber = data->typeNumber; if(typeNumber>=0 && newResidue) return; if(residueNumber<0 && !newResidue) return; typeTemplates = pdbTemplate->residueTemplates[residueNumber].typeTemplates; numberOfTypes = pdbTemplate->residueTemplates[residueNumber].numberOfTypes; Nc= atoi(selectedRow); WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),title); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(SetWinDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); Entrys[E_RESIDUE] = create_label_entry(hbox,_("Residue Name : "), (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); if(Nc>=0 && !newResidue) gtk_entry_set_text(GTK_ENTRY(Entrys[E_RESIDUE]), pdbTemplate->residueTemplates[residueNumber].residueName); else gtk_entry_set_text(GTK_ENTRY(Entrys[E_RESIDUE]),""); if(newResidue) gtk_editable_set_editable((GtkEditable*) Entrys[E_RESIDUE],TRUE); else gtk_editable_set_editable((GtkEditable*) Entrys[E_RESIDUE],FALSE); if(!newResidue) { gint n = 0; hbox=create_hbox_false(vboxframe); Entrys[E_PDBTYPE] = create_label_entry(hbox,_("PDB Type : "), (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); if(Nc>=0 && typeNumber>=0) gtk_entry_set_text(GTK_ENTRY(Entrys[E_PDBTYPE]), typeTemplates[typeNumber].pdbType); else gtk_entry_set_text(GTK_ENTRY(Entrys[E_PDBTYPE]),""); gtk_editable_set_editable((GtkEditable*) Entrys[E_PDBTYPE],TRUE); tlist=getListMMTypes(&n); hbox=create_hbox_false(vboxframe); if(n!=0) { Entrys[E_MMTYPE] = create_label_combo(hbox,_("MM Type :"),tlist,n, TRUE,(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } else Entrys[E_MMTYPE] = create_label_entry(hbox,_("MM Type :"), (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); if(Nc>=0 && typeNumber>=0) gtk_entry_set_text(GTK_ENTRY(Entrys[E_MMTYPE]), typeTemplates[typeNumber].mmType); else gtk_entry_set_text(GTK_ENTRY(Entrys[E_MMTYPE]),"C"); if(n !=0) gtk_editable_set_editable((GtkEditable*) Entrys[E_MMTYPE],FALSE); else gtk_editable_set_editable((GtkEditable*) Entrys[E_MMTYPE],TRUE); for(i=0;i=0 && typeNumber>=0) { gchar* t = g_strdup_printf("%f",typeTemplates[typeNumber].charge); gtk_entry_set_text(GTK_ENTRY(Entrys[E_CHARGE]),t); g_free(t); } else gtk_entry_set_text(GTK_ENTRY(Entrys[E_CHARGE]),"0.0"); gtk_editable_set_editable((GtkEditable*) Entrys[E_CHARGE],TRUE); } gtk_widget_realize(WinDlg); Button = create_button(WinDlg,_("Cancel")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(GTK_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,_("OK")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(GTK_OBJECT(Button), "clicked",(GCallback)f,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /********************************************************************************/ static void deleteOneResidue(GtkWidget *win, gpointer d) { gint residueNumber; gint typeNumber; PDBTypeTemplate* typeTemplates; gint numberOfTypes; gint i; gboolean* expandeds; GtkTreeIter node; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(pdbTreeView)); DataTplTree* data = NULL; if(atoi(selectedRow)<0) return; if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); if(!data) return; expandeds = getExpandInfo(); residueNumber = data->residueNumber; typeNumber = data->typeNumber; if(typeNumber>=0) return; if(residueNumber<0) return; typeTemplates = pdbTemplate->residueTemplates[residueNumber].typeTemplates; numberOfTypes = pdbTemplate->residueTemplates[residueNumber].numberOfTypes; for(i=0;inumberOfResidues;i++) pdbTemplate->residueTemplates[i] = pdbTemplate->residueTemplates[i+1]; pdbTemplate->numberOfResidues--; pdbTemplate->residueTemplates = g_realloc(pdbTemplate->residueTemplates, pdbTemplate->numberOfResidues*sizeof(PDBTypeTemplate)); freeDataTplTree(); rafreshTreeView(); setExpandeds(expandeds,selectedRow); g_free(expandeds); } /********************************************************************************/ static void deleteResidueDlg(GtkWidget *win,gpointer d) { gchar *format =_("Do you want to really delete \"%s\" residue ?") ; gchar *t =NULL; gint residueNumber; gint typeNumber; GtkWidget* w = NULL; GtkTreeIter node; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(pdbTreeView)); DataTplTree* data = NULL; if(atoi(selectedRow)<0) return; if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); if(!data) return; residueNumber = data->residueNumber; typeNumber = data->typeNumber; if(typeNumber>=0) return; if(residueNumber<0) return; t =g_strdup_printf(format,pdbTemplate->residueTemplates[residueNumber].residueName); w = Continue_YesNo(deleteOneResidue, NULL,t); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(SetWinDlg)); } /********************************************************************************/ static void deleteOneType(GtkWidget *win,gpointer d) { gint residueNumber; gint typeNumber; PDBTypeTemplate* typeTemplates; gint numberOfTypes; gint i; gboolean* expandeds; GtkTreeIter node; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(pdbTreeView)); DataTplTree* data = NULL; if(atoi(selectedRow)<0) return; if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); expandeds = getExpandInfo(); if(!data) return; residueNumber = data->residueNumber; typeNumber = data->typeNumber; if(typeNumber<0 || residueNumber<0) return; typeTemplates = pdbTemplate->residueTemplates[residueNumber].typeTemplates; numberOfTypes = pdbTemplate->residueTemplates[residueNumber].numberOfTypes; /*printf("typeNumber = %d residueNumber = %d\n",typeNumber, residueNumber);*/ if(typeTemplates[typeNumber].pdbType) g_free(typeTemplates[typeNumber].pdbType); if(typeTemplates[typeNumber].mmType) g_free(typeTemplates[typeNumber].mmType); for(i=typeNumber;iresidueTemplates[residueNumber].typeTemplates = typeTemplates ; pdbTemplate->residueTemplates[residueNumber].numberOfTypes = numberOfTypes; /*printf("End getExp\n");*/ freeDataTplTree(); rafreshTreeView(); setExpandeds(expandeds,selectedRow); g_free(expandeds); } /********************************************************************************/ static void Traitement(guint Operation) { switch(Operation) { case MENU_NEW_RESIDUE : editnewDlg(newResidue,_("New Residue"),TRUE); gtk_editable_set_editable((GtkEditable*) Entrys[E_RESIDUE],TRUE); break; case MENU_DELETE_RESIDUE : deleteResidueDlg(NULL,NULL); break; case MENU_EDIT_TYPE : editnewDlg(editType,_("Edit Type"),FALSE); gtk_editable_set_editable((GtkEditable*) Entrys[E_RESIDUE],FALSE); gtk_editable_set_editable((GtkEditable*) Entrys[E_PDBTYPE],FALSE); gtk_editable_set_editable((GtkEditable*) Entrys[E_CHARGE],TRUE); break; case MENU_NEW_TYPE : editnewDlg(newType,_("New Type"),FALSE); gtk_editable_set_editable((GtkEditable*) Entrys[E_RESIDUE],FALSE); gtk_editable_set_editable((GtkEditable*) Entrys[E_PDBTYPE],TRUE); gtk_editable_set_editable((GtkEditable*) Entrys[E_CHARGE],TRUE); break; case MENU_DELETE_TYPE : deleteOneType(NULL,NULL); break; case MENU_SAVE : savePersonalPDBTpl(NULL); break; case MENU_CLOSE : destroyDlg(SetWinDlg, NULL); SetWinDlg = NULL; } } /********************************************************************************/ static void set_sensitive_option(GtkUIManager *manager, gchar* path, gboolean sensitive) { GtkWidget *wid = gtk_ui_manager_get_widget (manager, path); if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid, sensitive); } /**********************************************************************************/ static void set_sensitive_menu(GtkUIManager *manager, gboolean norow, gint typeNumber) { gint i; GtkWidget *menu = gtk_ui_manager_get_widget (manager, "/MenuPDBTpl"); static gchar* paths[] = { "/MenuPDBTpl/NewResidue", "/MenuPDBTpl/DeleteResidue", "/MenuPDBTpl/NewType","/MenuPDBTpl/EditType", "/MenuPDBTpl/DeleteType", "/MenuPDBTpl/Save", "/MenuPDBTpl/Close" }; static gboolean sensitive[] = {TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE}; static gint o = MENU_NEW_RESIDUE; static gint n = MENU_CLOSE-MENU_NEW_RESIDUE; if (!GTK_IS_MENU (menu)) return; if(norow) { sensitive[MENU_NEW_RESIDUE-o] = TRUE; sensitive[MENU_DELETE_RESIDUE-o] = FALSE; sensitive[MENU_NEW_TYPE-o] = FALSE; sensitive[MENU_EDIT_TYPE-o] = FALSE; sensitive[MENU_DELETE_TYPE-o] = FALSE; sensitive[MENU_SAVE-o] = TRUE; sensitive[MENU_CLOSE-o] = TRUE; for(i=0;i=0) { sensitive[MENU_NEW_RESIDUE-o] = FALSE; sensitive[MENU_DELETE_RESIDUE-o] = FALSE; sensitive[MENU_NEW_TYPE-o] = TRUE; sensitive[MENU_EDIT_TYPE-o] = TRUE; sensitive[MENU_DELETE_TYPE-o] = TRUE; sensitive[MENU_SAVE-o] = TRUE; sensitive[MENU_CLOSE-o] = TRUE; for(i=0;i\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*******************************************************************************************************************************/ static GtkUIManager *newMenu(GtkWidget* win) { GtkActionGroup *actionGroup = NULL; GtkUIManager *manager = NULL; GError *error = NULL; manager = gtk_ui_manager_new (); g_signal_connect_swapped (win, "destroy", G_CALLBACK (g_object_unref), manager); actionGroup = gtk_action_group_new ("GabeditEditTypePDBTplLibrary"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntries, numberOfGtkActionEntries, NULL); gtk_ui_manager_insert_action_group (manager, actionGroup, 0); gtk_window_add_accel_group (GTK_WINDOW (win), gtk_ui_manager_get_accel_group (manager)); if (!gtk_ui_manager_add_ui_from_string (manager, uiMenuInfo, -1, &error)) { g_message (_("building menus failed: %s"), error->message); g_error_free (error); } return manager; } /*******************************************************************************************************************************/ static void eventDispatcher(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; GtkTreeIter iter; GtkTreeModel *model; if (!event) return; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); sprintf(selectedRow ,"%s",gtk_tree_path_to_string(path)); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free(path); if (event->type == GDK_BUTTON_PRESS && ((GdkEventButton *) event)->button == 3) { GdkEventButton *bevent = (GdkEventButton *) event; GtkUIManager *manager = GTK_UI_MANAGER(user_data); if(atoi(selectedRow) < 0) set_sensitive_menu(manager, TRUE, 0); else { DataTplTree* data = NULL; gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1); if(data) set_sensitive_menu(manager, FALSE, data->typeNumber); } show_menu_popup(manager, bevent->button, bevent->time); } } } GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event); } /*****************************************************************************************************************/ static void addFeuille(GtkTreeIter *parent, PDBTypeTemplate* typeTemplates, gint residueNumber, gint typeNumber) { GtkTreeIter feuille; gchar* texts[lengthListsType]; gchar* pdbType = typeTemplates->pdbType; gchar* mmType = typeTemplates->mmType; gdouble charge = typeTemplates->charge; DataTplTree* dataTplTree; gint i; GtkTreeModel *model; GtkTreeStore *store; texts[0] = g_strdup(" "); texts[1] = g_strdup(pdbType); texts[2] = g_strdup(mmType); texts[3] = g_strdup_printf("%f",charge); dataTplTree = newDataTplTree(residueNumber,typeNumber); model = gtk_tree_view_get_model(GTK_TREE_VIEW(pdbTreeView)); store = GTK_TREE_STORE (model); gtk_tree_store_append(store, &feuille, parent); gtk_tree_store_set (store, &feuille, LIST_RESIDUE, texts[0], -1); gtk_tree_store_set (store, &feuille, LIST_PDB_TYPE, texts[1], -1); gtk_tree_store_set (store, &feuille, LIST_MM_TYPE, texts[2], -1); gtk_tree_store_set (store, &feuille, LIST_CHARGE, texts[3], -1); gtk_tree_store_set (store, &feuille, LIST_DATA, dataTplTree, -1); for(i=0;inumberOfResidues;i++) { node = addNode(pdbTemplate->residueTemplates[i].residueName,i); typeTemplates = pdbTemplate->residueTemplates[i].typeTemplates; numberOfTypes = pdbTemplate->residueTemplates[i].numberOfTypes; for(j=0;jnumberOfResidues = 0; pdbTemplate->residueTemplates = NULL; setPointerPDBTemplate(pdbTemplate); } Win= gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow)); gtk_window_set_title(GTK_WINDOW(Win),_("Set PDB Template")); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); SetWinDlg = Win; g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)destroyDlg, NULL); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (Win), vbox); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add(GTK_CONTAINER(vbox),frame); gtk_widget_show (frame); vbox = create_vbox(frame); gtk_widget_realize(Win); pdbTreeView = NULL; addTreeView(Win,vbox); rafreshTreeView(); manager = newMenu(Win); g_signal_connect(pdbTreeView, "button_press_event", G_CALLBACK(eventDispatcher), manager); gtk_window_set_default_size (GTK_WINDOW(Win),(gint)(ScreenWidth*0.30),(gint)(ScreenHeight*0.80)); gtk_widget_show_all(Win); } GabeditSrc250/src/MolecularMechanics/Molecule.c0000644000175100017510000005143513130665225021741 0ustar alloucheallouche/* Molecule.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/AtomsProp.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/Measure.h" #include "Atom.h" #include "Molecule.h" void rafresh_window_geom(); void create_GeomXYZ_from_draw_grometry(); static gboolean** bondedMatrix = NULL; #define BOHR_TO_ANG 0.52917726 /**********************************************************************/ Molecule newMolecule() { gint i; Molecule molecule; molecule.nAtoms = 0; molecule.atoms = NULL; molecule.energy = 0; molecule.numberOf2Connections = 0; for(i=0;i<2;i++) molecule.connected2[i] = NULL; molecule.numberOf3Connections = 0; for(i=0;i<3;i++) molecule.connected3[i] = NULL; molecule.numberOf4Connections = 0; for(i=0;i<4;i++) molecule.connected4[i] = NULL; molecule.numberOfNonBonded = 0; for(i=0;i<2;i++) molecule.nonBonded[i] = NULL; for(i=0;i<3;i++) molecule.gradient[i] = NULL; return molecule; } /**********************************************************************/ void freeMolecule(Molecule* molecule) { gint i; if(molecule->nAtoms<=0) return; if(molecule->atoms != NULL) { for(i=0;inAtoms;i++) { if(molecule->atoms[i].prop.symbol != NULL) g_free(molecule->atoms[i].prop.symbol); if(molecule->atoms[i].mmType !=NULL ) g_free(molecule->atoms[i].mmType); if(molecule->atoms[i].pdbType !=NULL ) g_free(molecule->atoms[i].pdbType); if(molecule->atoms[i].typeConnections !=NULL ) g_free(molecule->atoms[i].typeConnections); } g_free(molecule->atoms); molecule->atoms = NULL; } molecule->nAtoms = 0; molecule->energy = 0; molecule->numberOf2Connections = 0; for(i=0;i<2;i++) { if(molecule->connected2[i] != NULL) g_free(molecule->connected2[i]); molecule->connected2[i] = NULL; } molecule->numberOf3Connections = 0; for(i=0;i<3;i++) { if(molecule->connected3[i] != NULL) g_free(molecule->connected3[i]); molecule->connected3[i] = NULL; } molecule->numberOf4Connections = 0; for(i=0;i<4;i++) { if(molecule->connected4[i] != NULL) g_free(molecule->connected4[i]); molecule->connected4[i] = NULL; } for(i=0;i<3;i++) if(molecule->gradient[i] != NULL) { g_free(molecule->gradient[i]); molecule->gradient[i] = NULL; } } /*****************************************************************************/ void createBondedMatrix(Molecule* molecule) { gint nAtoms = molecule->nAtoms; gint i; gint j; if(nAtoms<1) return; bondedMatrix = g_malloc(nAtoms*sizeof(gboolean*)); for(i=0;inAtoms; gint i; if(bondedMatrix == NULL) return; for(i=0;iatoms[i]; AtomMol a2 = molecule->atoms[j]; if(molecule->atoms[i].typeConnections) { gint nj = molecule->atoms[j].N-1; if(molecule->atoms[i].typeConnections[nj]>0) return TRUE; else return FALSE; } distance = 0; for (k=0;k<3;k++) { dij = a1.coordinates[k]-a2.coordinates[k]; distance +=dij*dij; } distance = sqrt(distance)/BOHR_TO_ANG; if(distance<(a1.prop.covalentRadii+a2.prop.covalentRadii)) return TRUE; else return FALSE; } /*****************************************************************************/ void set2Connections(Molecule* molecule) { gint i; gint j; gint k=0; k = molecule->nAtoms; k = k*(k-1)/2; for(i=0;i<2;i++) molecule->connected2[i] = g_malloc(k*sizeof(gint)); k=0; for(i=0;inAtoms-1;i++) for(j=i+1;jnAtoms;j++) { if(isConnected2(molecule,i,j)) { molecule->connected2[0][k]= i; molecule->connected2[1][k]= j; updatebondedMatrix(i,j); k++; } } molecule->numberOf2Connections = k; if(k==0) for(i=0;i<2;i++) { g_free(molecule->connected2[i]); molecule->connected2[i] = NULL; } else for(i=0;i<2;i++) molecule->connected2[i] = g_realloc(molecule->connected2[i],k*sizeof(gint)); /* printing for test*/ /* printf("%d 2 connections : \n",molecule->numberOf2Connections); for(k=0;knumberOf2Connections;k++) { i = molecule->connected2[0][k]; j = molecule->connected2[1][k]; printf("%d-%d ",i,j); } printf("\n"); */ } /*****************************************************************************/ static void permut(gint* a,gint *b) { gint c = *a; *a = *b; *b = c; } /*****************************************************************************/ gboolean isConnected3(Molecule* molecule,gint n,gint i,gint j, gint k) { gint c; gint a1,a2,a3; for(c=0;cconnected3[0][c]; a2 = molecule->connected3[1][c]; a3 = molecule->connected3[2][c]; if(a1==i && a2 == j && a3 == k) return TRUE; } return FALSE; } /*****************************************************************************/ gboolean connect3(Molecule* molecule,gint n,gint i,gint j, gint k) { if(i>k)permut(&i,&k); if(!isConnected3(molecule,n,i,j,k)) { molecule->connected3[0][n]= i; molecule->connected3[1][n]= j; molecule->connected3[2][n]= k; updatebondedMatrix(i,j); updatebondedMatrix(i,k); updatebondedMatrix(j,k); return TRUE; } return FALSE; } /*****************************************************************************/ void set3Connections(Molecule* molecule) { gint i; gint j; gint k=0; gint l=0; gint n=0; k = molecule->numberOf2Connections*molecule->nAtoms; for(i=0;i<3;i++) molecule->connected3[i] = g_malloc(k*sizeof(gint)); n=0; for(k=0;knumberOf2Connections;k++) { i = molecule->connected2[0][k]; j = molecule->connected2[1][k]; for(l=0;lnAtoms;l++) { if(l!=i && l!=j) { if( isConnected2(molecule,i,l)) if( connect3(molecule,n,l,i,j)) n++; if( isConnected2(molecule,j,l)) if( connect3(molecule,n,i,j,l)) n++; } } } molecule->numberOf3Connections = n; if(n==0) for(i=0;i<3;i++) { g_free(molecule->connected3[i]); molecule->connected3[i] = NULL; } else for(i=0;i<3;i++) molecule->connected3[i] = g_realloc(molecule->connected3[i],n*sizeof(gint)); /* printing for test*/ /* printf("%d 3 connections : \n",molecule->numberOf3Connections); for(k=0;knumberOf3Connections;k++) { i = molecule->connected3[0][k]; j = molecule->connected3[1][k]; l = molecule->connected3[2][k]; printf("%d-%d-%d ",i,j,l); } printf("\n"); */ } /*****************************************************************************/ gboolean isConnected4(Molecule* molecule,gint n,gint i,gint j, gint k,gint l) { gint c; gint a1,a2,a3,a4; for(c=0;cconnected4[0][c]; a2 = molecule->connected4[1][c]; a3 = molecule->connected4[2][c]; a4 = molecule->connected4[3][c]; if(a1==i && a2 == j && a3 == k && a4 == l) return TRUE; } return FALSE; } /*****************************************************************************/ gboolean connect4(Molecule* molecule,gint n,gint i,gint j, gint k,gint l) { if(i>l) { permut(&i,&l); permut(&j,&k); } if(!isConnected4(molecule,n,i,j,k,l)) { molecule->connected4[0][n]= i; molecule->connected4[1][n]= j; molecule->connected4[2][n]= k; molecule->connected4[3][n]= l; updatebondedMatrix(i,j); updatebondedMatrix(i,k); updatebondedMatrix(i,l); updatebondedMatrix(j,k); updatebondedMatrix(j,l); updatebondedMatrix(k,l); return TRUE; } return FALSE; } /*****************************************************************************/ void set4Connections(Molecule* molecule) { gint i; gint j; gint k=0; gint m=0; gint l=0; gint n=0; k = molecule->numberOf3Connections*molecule->nAtoms; for(i=0;i<4;i++) molecule->connected4[i] = g_malloc(k*sizeof(gint)); n=0; for(k=0;knumberOf3Connections;k++) { i = molecule->connected3[0][k]; j = molecule->connected3[1][k]; m = molecule->connected3[2][k]; for(l=0;lnAtoms;l++) { /* a refaire voir Set3Co */ if(l!=i && l!=j && l!= m) { if( isConnected2(molecule,i,l)) if(connect4(molecule,n,l,i,j,m)) n++; if( isConnected2(molecule,m,l)) if(connect4(molecule,n,i,j,m,l)) n++; } } } molecule->numberOf4Connections = n; if(n==0) for(i=0;i<4;i++) { g_free(molecule->connected4[i]); molecule->connected4[i] = NULL; } else for(i=0;i<4;i++) molecule->connected4[i] = g_realloc(molecule->connected4[i],n*sizeof(gint)); /* printing for test*/ /* printf("%d 4 connections : \n",molecule->numberOf4Connections); for(k=0;knumberOf4Connections;k++) { i = molecule->connected4[0][k]; j = molecule->connected4[1][k]; l = molecule->connected4[2][k]; m = molecule->connected4[3][k]; printf("%d-%d-%d-%d ",i,j,l,m); } printf("\n"); */ } /*****************************************************************************/ void setNonBondedConnections(Molecule* molecule) { gint i; gint j; gint k; gint numberOfNonBonded =0; gint numberOfAtoms = molecule->nAtoms; gint *nonBonded[2]; k = numberOfAtoms; k = k*(k-1)/2; for(i=0;i<2;i++) nonBonded[i] = g_malloc(k*sizeof(gint)); /* list for all nonbonded connections */ numberOfNonBonded = 0; for ( i = 0; i < numberOfAtoms; i++ ) for ( j = i + 1; j < numberOfAtoms; j++ ) { if ( !bondedMatrix[ i ][ j ] ) { nonBonded[0][numberOfNonBonded] = i; nonBonded[1][numberOfNonBonded] = j; numberOfNonBonded++; } } if(numberOfNonBonded==0) for(i=0;i<2;i++) { g_free(nonBonded[i]); nonBonded[i] = NULL; } else for(i=0;i<2;i++) { nonBonded[i] = g_realloc(nonBonded[i],numberOfNonBonded*sizeof(gint)); } molecule->numberOfNonBonded = numberOfNonBonded; for(i=0;i<2;i++) molecule->nonBonded[i] = nonBonded[i]; /* printing for test*/ /* printf("%d nonBonded connections : \n",molecule->numberOfNonBonded); for(k=0;knumberOfNonBonded;k++) { i = molecule->nonBonded[0][k]; j = molecule->nonBonded[1][k]; printf("%d-%d ",i,j); } printf("\n"); */ } /*****************************************************************************/ void setConnections(Molecule* molecule) { createBondedMatrix(molecule); /* printf("Set Connection\n");*/ set_text_to_draw(_("Establishing connectivity : 2 connections...")); set_statubar_operation_str(_("Establishing connectivity : 2 connections...")); drawGeom(); while( gtk_events_pending() ) gtk_main_iteration(); set2Connections(molecule); set_text_to_draw(_("Establishing connectivity : 3 connections...")); set_statubar_operation_str(_("Establishing connectivity : 3 connections...")); drawGeom(); if(StopCalcul) return; while( gtk_events_pending() ) gtk_main_iteration(); set3Connections(molecule); set_text_to_draw(_("Establishing connectivity : 4 connections...")); set_statubar_operation_str(_("Establishing connectivity : 4 connections...")); drawGeom(); if(StopCalcul) return; while( gtk_events_pending() ) gtk_main_iteration(); set4Connections(molecule); set_text_to_draw(_("Establishing connectivity : non bonded ...")); set_statubar_operation_str(_("Establishing connectivity : non bonded ...")); drawGeom(); if(StopCalcul) return; while( gtk_events_pending() ) gtk_main_iteration(); setNonBondedConnections(molecule); freeBondedMatrix(molecule); } /*****************************************************************************/ Molecule createMolecule(GeomDef* geom,gint natoms,gboolean connections) { gint i; Molecule molecule = newMolecule(); molecule.nAtoms = natoms; molecule.atoms = g_malloc(molecule.nAtoms*sizeof(AtomMol)); for(i=0;inAtoms; geometry0 = g_malloc((Natoms)*sizeof(GeomDef)); geometry = g_malloc((Natoms)*sizeof(GeomDef)); for(i=0;i<(gint)Natoms;i++) { geometry0[i].X = molecule->atoms[i].coordinates[0]; geometry0[i].Y = molecule->atoms[i].coordinates[1]; geometry0[i].Z = molecule->atoms[i].coordinates[2]; geometry0[i].Charge = molecule->atoms[i].charge; geometry0[i].Prop = prop_atom_get(molecule->atoms[i].prop.symbol); geometry0[i].pdbType = g_strdup(molecule->atoms[i].pdbType); geometry0[i].mmType = g_strdup(molecule->atoms[i].mmType); geometry0[i].Residue = g_strdup(molecule->atoms[i].residueName); geometry0[i].ResidueNumber = molecule->atoms[i].residueNumber; geometry0[i].show = molecule->atoms[i].show; geometry0[i].Variable = molecule->atoms[i].variable; geometry0[i].Layer = molecule->atoms[i].layer; geometry0[i].N = molecule->atoms[i].N; geometry0[i].typeConnections = NULL; geometry[i].X = molecule->atoms[i].coordinates[0]; geometry[i].Y = molecule->atoms[i].coordinates[1]; geometry[i].Z = molecule->atoms[i].coordinates[2]; geometry[i].Charge = molecule->atoms[i].charge; geometry[i].Prop = prop_atom_get(molecule->atoms[i].prop.symbol); geometry[i].pdbType = g_strdup(molecule->atoms[i].pdbType); geometry[i].mmType = g_strdup(molecule->atoms[i].mmType); geometry[i].Residue = g_strdup(molecule->atoms[i].residueName); geometry[i].ResidueNumber = molecule->atoms[i].residueNumber; geometry[i].show = molecule->atoms[i].show; geometry[i].Variable = molecule->atoms[i].variable; geometry[i].Layer = molecule->atoms[i].layer; geometry[i].N = molecule->atoms[i].N; geometry[i].typeConnections = NULL; C[0] += geometry0[i].X; C[1] += geometry0[i].Y; C[2] += geometry0[i].Z; } for(i=0;i<3;i++) C[i] /= Natoms; /* center */ for(i=0;i<(gint)Natoms;i++) { geometry0[i].X -= C[0]; geometry0[i].Y -= C[1]; geometry0[i].Z -= C[2]; geometry[i].X -= C[0]; geometry[i].Y -= C[1]; geometry[i].Z -= C[2]; } for(i=0;i<(gint)Natoms;i++) { geometry0[i].X /=BOHR_TO_ANG; geometry0[i].Y /=BOHR_TO_ANG; geometry0[i].Z /=BOHR_TO_ANG; geometry[i].X /=BOHR_TO_ANG; geometry[i].Y /=BOHR_TO_ANG; geometry[i].Z /=BOHR_TO_ANG; } if(molecule->atoms[0].typeConnections) { for(i=0;i<(gint)Natoms;i++) { geometry[i].typeConnections = g_malloc(Natoms*sizeof(gint)); geometry0[i].typeConnections = g_malloc(Natoms*sizeof(gint)); if(molecule->atoms[i].typeConnections) { for(j=0;j<(gint)Natoms;j++) { gint nj = geometry[j].N-1; geometry[i].typeConnections[nj] = molecule->atoms[i].typeConnections[nj]; geometry0[i].typeConnections[nj] = molecule->atoms[i].typeConnections[nj]; } } else { for(j=0;j<(gint)Natoms;j++) { gint nj = geometry[j].N-1; geometry[i].typeConnections[nj] = 0; geometry0[i].typeConnections[nj] = 0; } } } reset_hydrogen_bonds(); } else { reset_all_connections(); } unselect_all_atoms(); set_text_to_draw(str); set_statubar_operation_str(str); change_of_center(NULL,NULL); create_GeomXYZ_from_draw_grometry(); rafresh_window_geom(); while( gtk_events_pending() ) gtk_main_iteration(); } /********************************************************************************/ Molecule copyMolecule(Molecule* m) { gint i; gint j; gint k; Molecule molecule = newMolecule(); molecule.energy = m->energy; molecule.nAtoms = m->nAtoms; if( molecule.nAtoms>0) molecule.atoms = g_malloc(molecule.nAtoms*sizeof(AtomMol)); for(i=0;iatoms[i].prop.symbol); for(j=0;j<3;j++) molecule.atoms[i].coordinates[j] = m->atoms[i].coordinates[j]; molecule.atoms[i].charge = m->atoms[i].charge; molecule.atoms[i].mmType = g_strdup(m->atoms[i].mmType); molecule.atoms[i].pdbType = g_strdup(m->atoms[i].pdbType); molecule.atoms[i].residueName = g_strdup(m->atoms[i].residueName); molecule.atoms[i].residueNumber = m->atoms[i].residueNumber; molecule.atoms[i].layer = m->atoms[i].layer; molecule.atoms[i].show = m->atoms[i].show; molecule.atoms[i].variable = m->atoms[i].variable; molecule.atoms[i].N = m->atoms[i].N; molecule.atoms[i].typeConnections = NULL; if(m->atoms[i].typeConnections) { gint j; molecule.atoms[i].typeConnections = g_malloc(molecule.nAtoms*sizeof(gint)); for(j=0;jatoms[i].typeConnections[j]; } } molecule.numberOf2Connections = m->numberOf2Connections; k = molecule.numberOf2Connections; if(k>0) for(j=0;j<2;j++) { molecule.connected2[j] = g_malloc(k*sizeof(gint)); for(i=0;iconnected2[j][i]; } molecule.numberOf3Connections = m->numberOf3Connections; k = molecule.numberOf3Connections; if(k>0) for(j=0;j<3;j++) { molecule.connected3[j] = g_malloc(k*sizeof(gint)); for(i=0;iconnected3[j][i]; } molecule.numberOf4Connections = m->numberOf4Connections; k = molecule.numberOf4Connections; if(k>0) for(j=0;j<4;j++) { molecule.connected4[j] = g_malloc(k*sizeof(gint)); for(i=0;iconnected4[j][i]; } molecule.numberOfNonBonded = m->numberOfNonBonded; k = molecule.numberOfNonBonded; if(k>0) for(j=0;j<2;j++) { molecule.nonBonded[j] = g_malloc(k*sizeof(gint)); for(i=0;inonBonded[j][i]; } if(molecule.nAtoms>0) for(j=0;j<3;j++) /* x, y and z derivatives */ { molecule.gradient[j] = g_malloc(molecule.nAtoms*sizeof(gdouble)); for(i=0;igradient[j][i]; } return molecule; } GabeditSrc250/src/MolecularMechanics/ConjugateGradient.c0000644000175100017510000006305213130665225023567 0ustar alloucheallouche/* ConjugateGradient.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/AtomsProp.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "Atom.h" #include "Molecule.h" #include "ForceField.h" #include "ConjugateGradient.h" static gdouble maxarg1,maxarg2; #define FMAX(a,b) (maxarg1=(a),maxarg2=(b),(maxarg1) > (maxarg2) ?\ (maxarg1) : (maxarg2)) static void hestenesStiefel(ConjugateGradient* conjugateGradient); static void fletcherReeves(ConjugateGradient* conjugateGradient); static void polakRibiere(ConjugateGradient* conjugateGradient); static void wolfPowell(ConjugateGradient* conjugateGradient); static gdouble lineMinimize(ConjugateGradient* conjugateGradient); static void bracketMinimum(ConjugateGradient* conjugateGradient, gdouble pointA[], gdouble pointB[], gdouble pointC[] ); static gdouble oneDimensionalEnergy(ConjugateGradient* conjugateGradient, gdouble factor ); static gdouble inverseParabolicInterpolation(ConjugateGradient* conjugateGradient, gdouble pointa[], gdouble mid[], gdouble pointb[], gdouble minimum[] ); /**********************************************************************/ void runConjugateGradient(ConjugateGradient* conjugateGradient, ForceField* forceField, ConjugateGradientOptions conjugateGradientOptions) { gint i; gint minimizerOptions = conjugateGradientOptions.method; conjugateGradient->forceField = forceField; conjugateGradient->numberOfAtoms = forceField->molecule.nAtoms; conjugateGradient->updateFrequency = conjugateGradientOptions.updateFrequency; conjugateGradient->maxIterations = conjugateGradientOptions.maxIterations; conjugateGradient->updateNumber = 0; conjugateGradient->maxLine = conjugateGradientOptions.maxLines; conjugateGradient->epsilon = conjugateGradientOptions.gradientNorm; conjugateGradient->initialStep = conjugateGradientOptions.initialStep; conjugateGradient->rmsDeplacment = 0; conjugateGradient->maxDeplacment = 0; conjugateGradient->gradientNorm = 0; conjugateGradient->initialBracket = conjugateGradientOptions.initialStep; conjugateGradient->lastInitialBracket = 0; conjugateGradient->term = 0; for(i=0;i<3;i++) { conjugateGradient->lastGradient[i] = g_malloc(conjugateGradient->numberOfAtoms*sizeof(gdouble)); conjugateGradient->direction[i] = g_malloc(conjugateGradient->numberOfAtoms*sizeof(gdouble)); } conjugateGradient->temporaryMolecule = g_malloc(sizeof(Molecule)); conjugateGradient->temporaryMolecule->nAtoms = conjugateGradient->numberOfAtoms; conjugateGradient->temporaryMolecule->atoms = g_malloc(conjugateGradient->numberOfAtoms*sizeof(AtomMol)); for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { conjugateGradient->temporaryMolecule->atoms[i].charge = conjugateGradient->forceField->molecule.atoms[i].charge; } switch(minimizerOptions) { case 1 : hestenesStiefel(conjugateGradient);break; case 2 : fletcherReeves(conjugateGradient);break; case 3 : polakRibiere(conjugateGradient);break; case 4 : wolfPowell(conjugateGradient);break; } } /**********************************************************************/ void freeConjugateGradient(ConjugateGradient* conjugateGradient) { gint i; conjugateGradient->forceField = NULL; conjugateGradient->numberOfAtoms = 0; conjugateGradient->updateFrequency = 0; conjugateGradient->maxIterations = 0; conjugateGradient->updateNumber = 0; conjugateGradient->maxLine = 0; conjugateGradient->epsilon = 0; conjugateGradient->initialStep = 0; conjugateGradient->rmsDeplacment = 0; conjugateGradient->maxDeplacment = 0; conjugateGradient->gradientNorm = 0; conjugateGradient->initialBracket = 0; conjugateGradient->lastInitialBracket = 0; conjugateGradient->term = 0; for(i=0;i<3;i++) { if(conjugateGradient->lastGradient[i] !=NULL) { g_free(conjugateGradient->lastGradient[i]); conjugateGradient->lastGradient[i]= NULL; } if(conjugateGradient->direction[i] != NULL) { g_free(conjugateGradient->direction[i]); conjugateGradient->direction[i] = NULL; } } if(conjugateGradient->temporaryMolecule != NULL) { g_free(conjugateGradient->temporaryMolecule); conjugateGradient->temporaryMolecule = NULL; } } /**********************************************************************/ static void fletcherReeves(ConjugateGradient* conjugateGradient) { gdouble lastGradientDotGradient = 0, gradientDotGradient = 0, beta; gint iterations = 0; gint i; gint j; gdouble energy; gchar* str = g_strdup(" "); conjugateGradient->forceField->klass->calculateGradient(conjugateGradient->forceField); for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for(j=0;j<3;j++) { conjugateGradient->direction[j][ i ] = -conjugateGradient->forceField->molecule.gradient[j][i]; lastGradientDotGradient += conjugateGradient->forceField->molecule.gradient[j][i] * conjugateGradient->forceField->molecule.gradient[j][i]; } } gradientDotGradient = lastGradientDotGradient; while ( ( lastGradientDotGradient > conjugateGradient->epsilon ) && ( iterations++ < conjugateGradient->maxIterations ) ) { if(StopCalcul) break; lineMinimize(conjugateGradient); conjugateGradient->forceField->klass->calculateGradient(conjugateGradient->forceField); lastGradientDotGradient = gradientDotGradient; gradientDotGradient = 0; for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) for(j=0;j<3;j++) { gradientDotGradient += conjugateGradient->forceField->molecule.gradient[j][i] * conjugateGradient->forceField->molecule.gradient[j][i]; } beta = gradientDotGradient / lastGradientDotGradient; for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for(j=0;j<3;j++) { conjugateGradient->direction[j][i] = beta * conjugateGradient->direction[j][i] - conjugateGradient->forceField->molecule.gradient[j][i]; } } if ( conjugateGradient->updateNumber >= conjugateGradient->updateFrequency ) { g_free(str); str = g_strdup_printf(_("gradient = %f "),sqrt(gradientDotGradient)); redrawMolecule(&conjugateGradient->forceField->molecule,str); conjugateGradient->updateNumber = 0; } conjugateGradient->updateNumber++; } conjugateGradient->forceField->klass->calculateGradient(conjugateGradient->forceField); conjugateGradient->gradientNorm = 0; for( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for(j=0;j<3;j++) { conjugateGradient->gradientNorm += conjugateGradient->forceField->molecule.gradient[j][i] * conjugateGradient->forceField->molecule.gradient[j][i]; } } conjugateGradient->gradientNorm = sqrt(conjugateGradient->gradientNorm ); energy = conjugateGradient->forceField->klass->calculateEnergyTmp (conjugateGradient->forceField, &conjugateGradient->forceField->molecule ); g_free(str); str = g_strdup_printf(_("Gradient = %f Energy = %f (Kcal/mol) "), (gdouble)conjugateGradient->gradientNorm,(gdouble)energy); redrawMolecule(&conjugateGradient->forceField->molecule,str); g_free(str); } /********************************************************************************/ static void polakRibiere(ConjugateGradient* conjugateGradient) { gdouble lastGradientDotGradient = 0, gradientDotGradient, beta; gint iterations = 0; gdouble energy; gint i; gint j; gchar* str = g_strdup(" "); conjugateGradient->forceField->klass->calculateGradient(conjugateGradient->forceField); for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for(j=0;j<3;j++) { conjugateGradient->direction[j][ i ] = conjugateGradient->lastGradient[j][i] = -conjugateGradient->forceField->molecule.gradient[j][i]; lastGradientDotGradient += conjugateGradient->forceField->molecule.gradient[j][i] * conjugateGradient->forceField->molecule.gradient[j][i]; } } gradientDotGradient = lastGradientDotGradient; while ( ( lastGradientDotGradient > conjugateGradient->epsilon ) && ( iterations++ < conjugateGradient->maxIterations ) ) { if(StopCalcul) break; lineMinimize(conjugateGradient); conjugateGradient->forceField->klass->calculateGradient(conjugateGradient->forceField); lastGradientDotGradient = gradientDotGradient; gradientDotGradient = 0; beta = 0; for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for ( j = 0; j < 3; j++ ) { gradientDotGradient += conjugateGradient->forceField->molecule.gradient[j][i] * conjugateGradient->forceField->molecule.gradient[j][i]; beta += ( conjugateGradient->forceField->molecule.gradient[j][i] - conjugateGradient->lastGradient[j][i] )* conjugateGradient->forceField->molecule.gradient[j][i]; } } beta /= lastGradientDotGradient; for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for ( j = 0; j < 3; j++ ) { conjugateGradient->direction[j][i] = beta * conjugateGradient->direction[j][i] - conjugateGradient->forceField->molecule.gradient[j][i]; } } for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for(j=0;j<3;j++) { conjugateGradient->lastGradient[j][i] = conjugateGradient->forceField->molecule.gradient[j][i]; } } if ( conjugateGradient->updateNumber >= conjugateGradient->updateFrequency ) { g_free(str); str = g_strdup_printf("gradient = %f ",sqrt(gradientDotGradient)); redrawMolecule(&conjugateGradient->forceField->molecule,str); conjugateGradient->updateNumber = 0; } conjugateGradient->updateNumber++; } conjugateGradient->forceField->klass->calculateGradient(conjugateGradient->forceField); conjugateGradient->gradientNorm = 0; for( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for ( j = 0; j < 3; j++ ) { conjugateGradient->gradientNorm += conjugateGradient->forceField->molecule.gradient[j][i] * conjugateGradient->forceField->molecule.gradient[j][i]; } } conjugateGradient->gradientNorm = sqrt(conjugateGradient->gradientNorm ); energy = conjugateGradient->forceField->klass->calculateEnergyTmp (conjugateGradient->forceField, &conjugateGradient->forceField->molecule ); g_free(str); str = g_strdup_printf(_("Gradient = %f Energy = %f (Kcal/mol) "), (gdouble)conjugateGradient->gradientNorm,(gdouble)energy); redrawMolecule(&conjugateGradient->forceField->molecule,str); g_free(str); } /********************************************************************************/ static void hestenesStiefel(ConjugateGradient* conjugateGradient) { gdouble gradientDotGradient = 1, beta, gradientDiff, denom; gint iterations = 0; gdouble energy; gint i; gint j; gchar* str = g_strdup(" "); conjugateGradient->forceField->klass->calculateGradient(conjugateGradient->forceField); for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for(j=0;j<3;j++) { conjugateGradient->direction[j][ i ] = conjugateGradient->lastGradient[j][i] = -conjugateGradient->forceField->molecule.gradient[j][i]; } } while ( ( gradientDotGradient > conjugateGradient->epsilon ) && ( iterations++ < conjugateGradient->maxIterations ) ) { if(StopCalcul) break; lineMinimize(conjugateGradient); conjugateGradient->forceField->klass->calculateGradient(conjugateGradient->forceField); gradientDotGradient = 0; for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for ( j = 0; j < 3; j++ ) { gradientDotGradient += conjugateGradient->forceField->molecule.gradient[j][i]* conjugateGradient->forceField->molecule.gradient[j][i]; } } beta = 0; denom = 0; for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for ( j = 0; j < 3; j++ ) { gradientDiff = conjugateGradient->forceField->molecule.gradient[j][i]- conjugateGradient->lastGradient[j][i]; beta += conjugateGradient->forceField->molecule.gradient[j][i]* gradientDiff; denom += conjugateGradient->direction[j][i] * gradientDiff; } } if ( fabs( denom ) > 1.0e-10 ) beta /= denom; else beta = 0; for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for ( j = 0; j < 3; j++ ) { conjugateGradient->direction[j][ i ] = beta * conjugateGradient->direction[j][ i ] - conjugateGradient->forceField->molecule.gradient[j][i]; } } for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for(j=0;j<3;j++) { conjugateGradient->lastGradient[j][i] = conjugateGradient->forceField->molecule.gradient[j][i]; } } if ( conjugateGradient->updateNumber >= conjugateGradient->updateFrequency ) { g_free(str); str = g_strdup_printf(_("gradient = %f "),sqrt(gradientDotGradient)); redrawMolecule(&conjugateGradient->forceField->molecule,str); conjugateGradient->updateNumber = 0; } conjugateGradient->updateNumber++; } conjugateGradient->forceField->klass->calculateGradient(conjugateGradient->forceField); conjugateGradient->gradientNorm = 0; for( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for(j=0;j<3;j++) conjugateGradient->gradientNorm += conjugateGradient->direction[j][ i ] * conjugateGradient->direction[j][ i ]; } conjugateGradient->gradientNorm = sqrt( conjugateGradient->gradientNorm ); energy = conjugateGradient->forceField->klass->calculateEnergyTmp (conjugateGradient->forceField, &conjugateGradient->forceField->molecule ); g_free(str); str = g_strdup_printf(_("Gradient = %f Energy = %f (Kcal/mol) "), (gdouble)conjugateGradient->gradientNorm,(gdouble)energy); redrawMolecule(&conjugateGradient->forceField->molecule,str); g_free(str); } /********************************************************************************/ static void wolfPowell(ConjugateGradient* conjugateGradient) { gdouble lastGradientDotGradient = 0, gradientDotGradient, beta; gint iterations = 0; gdouble energy; gint i; gint j; gchar* str = g_strdup(" "); conjugateGradient->forceField->klass->calculateGradient(conjugateGradient->forceField); for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for(j=0;j<3;j++) { conjugateGradient->direction[j][ i ] = conjugateGradient->lastGradient[j][i] = -conjugateGradient->forceField->molecule.gradient[j][i]; lastGradientDotGradient += conjugateGradient->forceField->molecule.gradient[j][i] * conjugateGradient->forceField->molecule.gradient[j][i]; } } while ( ( lastGradientDotGradient > conjugateGradient->epsilon ) && ( iterations++ < conjugateGradient->maxIterations ) ) { if(StopCalcul) break; lineMinimize(conjugateGradient); conjugateGradient->forceField->klass->calculateGradient(conjugateGradient->forceField); gradientDotGradient = 0; for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) for ( j = 0; j < 3; j++ ) { gradientDotGradient += conjugateGradient->forceField->molecule.gradient[j][i]* conjugateGradient->forceField->molecule.gradient[j][i]; } beta = 0; for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for ( j = 0; j < 3; j++ ) beta += ( conjugateGradient->forceField->molecule.gradient[j][i] - conjugateGradient->lastGradient[j][i] )* conjugateGradient->forceField->molecule.gradient[j][i]; } beta /= lastGradientDotGradient; if ( beta < 0 ) beta = 0; lastGradientDotGradient = gradientDotGradient; for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) for ( j = 0; j < 3; j++ ) conjugateGradient->direction[j][ i ] = beta * conjugateGradient->direction[j][ i ] - conjugateGradient->forceField->molecule.gradient[j][i]; for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for(j=0;j<3;j++) { conjugateGradient->lastGradient[j][i] = conjugateGradient->forceField->molecule.gradient[j][i]; } } if ( conjugateGradient->updateNumber >= conjugateGradient->updateFrequency ) { g_free(str); str = g_strdup_printf(_("gradient = %f "),sqrt(gradientDotGradient)); redrawMolecule(&conjugateGradient->forceField->molecule,str); conjugateGradient->updateNumber = 0; } conjugateGradient->updateNumber++; } conjugateGradient->forceField->klass->calculateGradient(conjugateGradient->forceField); conjugateGradient->gradientNorm = 0; for( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for(j=0;j<3;j++) conjugateGradient->gradientNorm += conjugateGradient->direction[j][ i ] * conjugateGradient->direction[j][ i ]; } conjugateGradient->gradientNorm = sqrt( conjugateGradient->gradientNorm ); energy = conjugateGradient->forceField->klass->calculateEnergyTmp (conjugateGradient->forceField, &conjugateGradient->forceField->molecule ); g_free(str); str = g_strdup_printf(_("Gradient = %f Energy = %f (Kcal/mol) "), (gdouble)conjugateGradient->gradientNorm,(gdouble)energy); redrawMolecule(&conjugateGradient->forceField->molecule,str); g_free(str); } /**********************************************************************/ static gdouble lineMinimize(ConjugateGradient* conjugateGradient) { gdouble a; gdouble b; gdouble c; gdouble minimum=0; gdouble energy; gdouble delta = 1.0e-7; gint i; gint j; a = 0; b = conjugateGradient->initialBracket; bracketMinimum(conjugateGradient, &a, &b, &c ); energy = inverseParabolicInterpolation(conjugateGradient, &a, &b, &c, &minimum ); conjugateGradient->initialBracket = minimum; if ( ( fabs( conjugateGradient->initialBracket ) < delta ) || ( conjugateGradient->initialBracket == conjugateGradient->lastInitialBracket ) ) { conjugateGradient->initialBracket = rand()/(gdouble)RAND_MAX *conjugateGradient->initialStep; for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for(j=0;j<3;j++) conjugateGradient->direction[j][i] = -conjugateGradient->forceField->molecule.gradient[j][i]; } } conjugateGradient->lastInitialBracket = conjugateGradient->initialBracket; for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for(j=0;j<3;j++) conjugateGradient->forceField->molecule.atoms[i].coordinates[j] += conjugateGradient->direction[j][i] * conjugateGradient->initialBracket; } return( energy ); } /********************************************************************************/ static void bracketMinimum(ConjugateGradient* conjugateGradient, gdouble pointA[], gdouble pointB[], gdouble pointC[] ) { static gdouble GOLDENRATIO = 1.618034; gdouble energyA, energyB, energyC, temp; gdouble ulim, u, r, q, fu, denominator; gint iter = 0; energyA = oneDimensionalEnergy(conjugateGradient, pointA[ 0 ] ); energyB = oneDimensionalEnergy(conjugateGradient, pointB[ 0 ] ); if ( energyB > energyA ) { temp = pointA[ 0 ]; pointA[ 0 ] = pointB[ 0 ]; pointB[ 0 ] = temp; temp = energyB; energyB = energyA; energyA = temp; } pointC[ 0 ] = pointB[ 0 ] + GOLDENRATIO * ( pointB[ 0 ] - pointA[ 0 ] ); energyC = oneDimensionalEnergy(conjugateGradient, pointC[ 0 ] ); while ( energyB > energyC ) { iter++; r = ( pointB[ 0 ] - pointA[ 0 ] ) * ( energyB - energyC ); q = ( pointB[ 0 ] - pointC[ 0 ] ) * ( energyB - energyA ); denominator = FMAX( fabs( q - r ), 1.0e-20 ); if ( ( q - r ) < 0 ) denominator = -denominator; u = ( pointB[ 0 ] ) - ( ( pointB[ 0 ]-pointC[ 0 ] ) * q - ( pointB[ 0 ] - pointA[ 0 ] ) * r ) / ( 2.0 * denominator ); ulim = pointB[ 0 ] + 100 * ( pointC[ 0 ] - pointB[ 0 ] ); if ( ( pointB[ 0 ] - u ) * ( u - pointC[ 0 ] ) > 0.0 ) { fu=oneDimensionalEnergy(conjugateGradient, u ); if ( fu < energyC ) { pointA[ 0 ] = pointB[ 0 ]; pointB[ 0 ] = u; energyA = energyB; energyB = fu; return; } else if ( fu > energyB ) { pointC[ 0 ] = u; energyC = fu; return; } u = pointC[ 0 ] + GOLDENRATIO * ( pointC[ 0 ] - pointB[ 0 ] ); fu = oneDimensionalEnergy(conjugateGradient, u ); } else if ( ( pointC[ 0 ] - u ) * ( u - ulim ) > 0.0 ) { fu = oneDimensionalEnergy(conjugateGradient, u ); if ( fu < energyC ) { pointB[ 0 ] = pointC[ 0 ]; pointC[ 0 ] = u; u = pointC[ 0 ] + GOLDENRATIO * ( pointC[ 0 ] - pointB[ 0 ] ); energyB = energyC; energyC = fu; fu = oneDimensionalEnergy(conjugateGradient, u ); } } else if ( ( u - ulim ) * ( ulim - pointC[ 0 ] ) >= 0.0 ) { u = ulim; fu = oneDimensionalEnergy(conjugateGradient, u ); } else { u = pointC[ 0 ] + GOLDENRATIO * ( pointC[ 0 ] - pointB[ 0 ] ); fu = oneDimensionalEnergy(conjugateGradient, u ); } pointA[ 0 ] = pointB[ 0 ]; pointB[ 0 ] = pointC[ 0 ]; pointC[ 0 ] = u; energyA = energyB; energyB = energyC; energyC = fu; } } /********************************************************************************/ static gdouble oneDimensionalEnergy(ConjugateGradient* conjugateGradient, gdouble factor ) { gint i; gint j; for ( i = 0; i < conjugateGradient->numberOfAtoms; i++ ) { for(j=0;j<3;j++) { conjugateGradient->temporaryMolecule->atoms[i].coordinates[j] = conjugateGradient->forceField->molecule.atoms[i].coordinates[j] + factor * conjugateGradient->direction[j][i]; } } return ( conjugateGradient->forceField->klass->calculateEnergyTmp(conjugateGradient->forceField,conjugateGradient->temporaryMolecule) ); } /********************************************************************************/ static gdouble inverseParabolicInterpolation(ConjugateGradient* conjugateGradient, gdouble pointa[], gdouble mid[], gdouble pointb[], gdouble minimum[] ) { gint iter; gint maxIterations = conjugateGradient->maxLine; static double CGOLD = 0.3819660; gdouble a,b,d=0,etemp,fu,fv,fw,fx,p,q,r,tol1,tol2,u,v,w,x,xm; gdouble e=0.0, tol=2.0e-4; gdouble pointA, pointB, midAB; gdouble energy; pointA = pointa[ 0 ]; pointB = pointb[ 0 ]; midAB = mid[ 0 ]; a=(pointA < pointB ? pointA : pointB); b=(pointA > pointB ? pointA : pointB); x=w=v=mid[ 0 ]; fw=fv=fx=fu=energy=oneDimensionalEnergy(conjugateGradient,x); for (iter=1;iter<=maxIterations;iter++) { if(StopCalcul) break; xm=0.5*(a+b); tol1 = tol* fabs( x ) + 1.0e-10; tol2=2.0*tol1; if (fabs(x-xm) <= (tol2-0.5*(b-a))) { minimum[0]=x; return fu; } if (fabs(e) > tol1) { r=(x-w)*(fx-fv); q=(x-v)*(fx-fw); p=(x-v)*q-(x-w)*r; q=2.0*(q-r); if (q > 0.0) p = -p; q=fabs(q); etemp=e; e=d; if (fabs(p) >= fabs(0.5*q*etemp) || p <= q*(a-x) || p >= q*(b-x)) d=CGOLD*(e=(x >= xm ? a-x : b-x)); else { d=p/q; u=x+d; if (u-a < tol2 || b-u < tol2) { if ( ( xm - x ) < 0 ) d = - tol1; else d = tol1; } } } else { d=CGOLD*(e=(x >= xm ? a-x : b-x)); } if ( fabs( d ) >= tol1 ) { u = x + d; } else { if ( d >= 0 ) u = x + tol1; else u = x - tol1; } fu=oneDimensionalEnergy(conjugateGradient,u); if (fu <= fx) { if (u >= x) a=x; else b=x; v = w; w = x; x = u; fv = fw; fw = fx; fx = fu; } else { if (u < x) a=u; else b=u; if (fu <= fw || w == x) { v=w; w=u; fv=fw; fw=fu; } else if (fu <= fv || v == x || v == w) { v=u; fv=fu; } } } return( fu ); } GabeditSrc250/src/MolecularMechanics/SetMMParameters.c0000644000175100017510000036423513130665225023212 0ustar alloucheallouche/* SetMMParameters.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../Utils/AtomsProp.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "Atom.h" #include "Molecule.h" #include "ForceField.h" #include "MolecularMechanics.h" #include "../Common/StockIcons.h" #define NENTRYS 21 typedef enum { E_S=0, E_T=1, E_M=2, E_P=3, E_T1=4, E_T2=5, E_T3=6, E_T4=7, E_F=8, E_R=9, E_A=10, E_C=11, E_D=12, E_E=13, E_B=14, E_N=15, E_BETA=16, E_C6 =17, E_C8 =18, E_C10 =19, E_DESC = 20, } SetEntryType; typedef enum { MMNUMBERTYPE = 0, MMNUMBERBOND = 1, MMNUMBERBEND = 2, MMNUMBERTORSION = 3, MMNUMBERIMPROPER = 4, MMNUMBERHBOND = 5, MMNUMBERNONBONDED = 6, MMNUMBERPAIRWISE = 7, } MMNumberLists; static gint Factor = 7; #define lengthListsType 5 #define lengthListsBond 4 #define lengthListsBend 5 #define lengthListsTorsion 8 #define lengthListsImproper 7 #define lengthListsHBond 4 #define lengthListsNonBonded 3 #define lengthListsPairWise 8 static gchar *typeTitles[]={ "Type", "Symbol", "Masse", "Polarisability","Description" }; static gint typeWidths[]={8,8,10,10,10}; static gchar *bondTitles[]={ "Type1", "Type2", "Force", "Equilibrium Distance" }; static gint bondWidths[] ={8,8,15,15}; static gchar *bendTitles[]={ "Type1", "Type2", "Type3","Force", "Equilibrium Angle" }; static gint bendWidths []={8,8,8,15,15}; static gchar *torsionTitles[]={ "Type1", "Type2", "Type3","Type4","Divisor", "Barrier","Phase","Frequence" }; static gint torsionWidths []={8,8,8,8,10,15,15,15}; static gchar *improperTitles[]={ "Type1", "Type2", "Type3","Type4","Barrier","Phase","Frequence" }; static gint improperWidths []={8,8,8,8,15,15,15}; static gchar *hBondTitles[]={ "Type1", "Type2", "C(C/r**12)", "D(-D/r**10)" }; static gint hBondWidths[] ={8,8,15,15}; static gchar *nonBondedTitles[]={ "Type","R","Epsilon"}; static gint nonBondedWidths[] ={8,15,15}; static gchar *pairWiseTitles[]={ "Type1", "Type2", "A", "Beta","C6","C8","C10","b"}; static gint pairWiseWidths[] ={8,8,15,15,15,15,15,15}; static GtkWidget *listTypes = NULL; static GtkWidget *listBonds = NULL; static GtkWidget *listBends = NULL; static GtkWidget *listTorsions = NULL; static GtkWidget *listImpropers = NULL; static GtkWidget *listHBonds = NULL; static GtkWidget *listNonBondeds = NULL; static GtkWidget *listPairWises = NULL; static GtkWidget *NoteBook = NULL; static GtkWidget *SetWinDlg = NULL; static GtkStyle* style1 = NULL; static GtkStyle* style2 = NULL; static AmberParameters* amberParameters = NULL; static gchar rowSelectedLists[][100] ={"-1","-1","-1","-1","-1","-1","-1","-1"}; static GtkWidget* Entrys[NENTRYS]; /********************************************************************************/ static void newDlg(GtkWidget *win,gpointer data); static void editDlg(GtkWidget *win,gpointer data); static void deleteDlg(GtkWidget *win,gpointer data); static void destroyDlg(GtkWidget *win, gpointer data); /********************************************************************************/ static void selectRow(GtkWidget* list, gint row) { GtkTreePath *path; gchar* tmp = g_strdup_printf("%d",row); path = gtk_tree_path_new_from_string (tmp); g_free(tmp); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (list)), path); gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW (list), path, NULL, FALSE,0.5,0.5); gtk_tree_path_free(path); } /********************************************************************************/ static void set_sensitive_option(GtkUIManager *manager, gchar* path, gboolean sensitive) { GtkWidget *wid = gtk_ui_manager_get_widget (manager, path); if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid, sensitive); } /**********************************************************************************/ static gboolean show_menu_popup(GtkUIManager *manager, guint button, guint32 time) { GtkWidget *menu = gtk_ui_manager_get_widget (manager, "/MenuMM"); if (GTK_IS_MENU (menu)) { gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, time); return TRUE; } return FALSE; } /*********************************************************************************************************************/ static void activate_action (GtkAction *action) { const gchar *name = gtk_action_get_name (action); if(!strcmp(name, "New")) newDlg(NULL, NULL); else if(!strcmp(name, "Edit")) editDlg(NULL, NULL); else if(!strcmp(name, "Delete")) deleteDlg(NULL, NULL); else if(!strcmp(name, "Save")) saveAmberParameters(); else if(!strcmp(name, "Close")) destroyDlg(NULL, NULL); } /*--------------------------------------------------------------------*/ static GtkActionEntry gtkActionEntries[] = { {"New", GABEDIT_STOCK_NEW, "_New", NULL, "New", G_CALLBACK (activate_action) }, {"Edit", GABEDIT_STOCK_SELECT, "_Edit", NULL, "Edit", G_CALLBACK (activate_action) }, {"Delete", GABEDIT_STOCK_CUT, "Delete", NULL, "Delete", G_CALLBACK (activate_action) }, {"Save", GABEDIT_STOCK_SAVE, "_Save", NULL, "Save", G_CALLBACK (activate_action) }, {"Close", GABEDIT_STOCK_CLOSE, "_Close", NULL, "Close", G_CALLBACK (activate_action) }, }; static guint numberOfGtkActionEntries = G_N_ELEMENTS (gtkActionEntries); /********************************************************************************/ /* XML description of the menus for the test app. The parser understands * a subset of the Bonobo UI XML format, and uses GMarkup for parsing */ static const gchar *uiMenuInfo = " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*******************************************************************************************************************************/ static GtkUIManager *newMenu(GtkWidget* win) { GtkActionGroup *actionGroup = NULL; GtkUIManager *manager = NULL; GError *error = NULL; manager = gtk_ui_manager_new (); g_signal_connect_swapped (win, "destroy", G_CALLBACK (g_object_unref), manager); actionGroup = gtk_action_group_new ("GabeditEditMMLibrary"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntries, numberOfGtkActionEntries, NULL); gtk_ui_manager_insert_action_group (manager, actionGroup, 0); gtk_window_add_accel_group (GTK_WINDOW (win), gtk_ui_manager_get_accel_group (manager)); if (!gtk_ui_manager_add_ui_from_string (manager, uiMenuInfo, -1, &error)) { g_message ("building menus failed: %s", error->message); g_error_free (error); } return manager; } /********************************************************************************/ static void event_dispatcher(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; GtkTreeIter iter; GtkTreeModel *model; if (!event) return; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { gint nList = gtk_notebook_get_current_page(GTK_NOTEBOOK(NoteBook)); model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); sprintf(rowSelectedLists[nList] ,"%s",gtk_tree_path_to_string(path)); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free(path); if (event->type == GDK_2BUTTON_PRESS) editDlg(NULL, NULL); else if (event->type == GDK_BUTTON_PRESS && ((GdkEventButton *) event)->button == 3) { GdkEventButton *bevent = (GdkEventButton *) event; GtkUIManager *manager = GTK_UI_MANAGER(user_data); set_sensitive_option(manager, "/MenuMM/Edit", TRUE); set_sensitive_option(manager, "/MenuMM/Delete", TRUE); show_menu_popup(manager, bevent->button, bevent->time); } } } GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event); } /***************************************************************************** * AddMenu ******************************************************************************/ static void newMenuToList(GtkWidget* list, GtkWidget* win) { GtkUIManager *manager = newMenu(win); g_signal_connect(G_OBJECT (list), "button_press_event", G_CALLBACK(event_dispatcher), manager); } /********************************************************************************/ static void setStyles() { style1 = gtk_style_copy( gtk_widget_get_default_style ()); style2 = gtk_style_copy( gtk_widget_get_default_style ()); style1->base[0].red = 60000; style1->base[0].green = 60000; style1->base[0].blue = 60000; style2->base[0].red = 50000; style2->base[0].green = 50000; style2->base[0].blue = 50000; } /********************************************************************************/ static gchar** freeList(gchar** strs, gint nlist) { gint i; for(i=0;inumberOfTypes*sizeof(gchar*)); gint i; *nlist = amberParameters->numberOfTypes; for(i=0;inumberOfTypes;i++) t[i] = g_strdup(amberParameters->atomTypes[i].name); return t; } /********************************************************************************/ static void setAtom(GtkWidget *w,gpointer data) { gtk_entry_set_text(GTK_ENTRY(Entrys[E_S]),(char *)data); } /********************************************************************************/ static void SelectAtom(GtkWidget *w,gpointer entry0) { GtkWidget* Table; GtkWidget* button; GtkWidget* frame; GtkWidget* FenetreTable; guint i; guint j; GtkStyle *button_style; GtkStyle *style; gchar*** Symb = get_periodic_table(); FenetreTable = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(FenetreTable),TRUE); gtk_window_set_title(GTK_WINDOW(FenetreTable),"Select your atom"); gtk_window_set_default_size (GTK_WINDOW(FenetreTable),(gint)(ScreenWidth*0.5),(gint)(ScreenHeight*0.4)); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_container_add(GTK_CONTAINER(FenetreTable),frame); gtk_widget_show (frame); Table = gtk_table_new(PERIODIC_TABLE_N_ROWS-1,PERIODIC_TABLE_N_COLUMNS,TRUE); gtk_container_add(GTK_CONTAINER(frame),Table); button_style = gtk_widget_get_style(FenetreTable); for ( i = 0;inumberOfTypes; AmberAtomTypes* types = amberParameters->atomTypes; gint len = strlen(type); if(strcmp(type,"X")==0) return -1; for(i=0;inumberOfTypes; AmberAtomTypes* types = amberParameters->atomTypes; if(number == -1) return "X"; for(i=0;inumberOfPairWise;i++) { n = amberParameters->pairWiseTerms[i].numbers[0]; type = getType(amberParameters,n); texts[0] = g_strdup(type); n = amberParameters->pairWiseTerms[i].numbers[1]; type = getType(amberParameters,n); texts[1] = g_strdup(type); texts[2] = g_strdup_printf("%f",amberParameters->pairWiseTerms[i].a); texts[3] = g_strdup_printf("%f",amberParameters->pairWiseTerms[i].beta); texts[4] = g_strdup_printf("%f",amberParameters->pairWiseTerms[i].c6); texts[5] = g_strdup_printf("%f",amberParameters->pairWiseTerms[i].c8); texts[6] = g_strdup_printf("%f",amberParameters->pairWiseTerms[i].c10); texts[7] = g_strdup_printf("%f",amberParameters->pairWiseTerms[i].b); gtk_list_store_append(store, &iter); for(k=0;k=0) selectRow(list, nn); } /********************************************************************************/ static void rafreshListNonBondeds(gint nn) { gchar *texts[lengthListsNonBonded]; gint i; gint n = 0; gchar* type; GtkWidget* list = listNonBondeds; gint k; GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; model = gtk_tree_view_get_model(GTK_TREE_VIEW(list)); store = GTK_LIST_STORE (model); gtk_list_store_clear(store); for(i=0;inumberOfNonBonded;i++) { n = amberParameters->nonBondedTerms[i].number; type = getType(amberParameters,n); texts[0] = g_strdup(type); texts[1] = g_strdup_printf("%f",amberParameters->nonBondedTerms[i].r); texts[2] = g_strdup_printf("%f",amberParameters->nonBondedTerms[i].epsilon); gtk_list_store_append(store, &iter); for(k=0;k=0) selectRow(list, nn); } /********************************************************************************/ static void rafreshListHBonds(gint nn) { gchar *texts[lengthListsHBond]; gint i; gint n = 0; gchar* type; GtkWidget* list = listHBonds; gint k; GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; model = gtk_tree_view_get_model(GTK_TREE_VIEW(list)); store = GTK_LIST_STORE (model); gtk_list_store_clear(store); for(i=0;inumberOfHydrogenBonded;i++) { n = amberParameters->hydrogenBondedTerms[i].numbers[0]; type = getType(amberParameters,n); texts[0] = g_strdup(type); n = amberParameters->hydrogenBondedTerms[i].numbers[1]; type = getType(amberParameters,n); texts[1] = g_strdup(type); texts[2] = g_strdup_printf("%f",amberParameters->hydrogenBondedTerms[i].c); texts[3] = g_strdup_printf("%f",amberParameters->hydrogenBondedTerms[i].d); gtk_list_store_append(store, &iter); for(k=0;k=0) selectRow(list, nn); } /**********************************************************************/ static void rafreshListImpropers(gint nn) { gchar *texts[lengthListsImproper]; gint i; gint n = 0; gchar* type; GtkWidget* list = listImpropers; gint k; GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; model = gtk_tree_view_get_model(GTK_TREE_VIEW(list)); store = GTK_LIST_STORE (model); gtk_list_store_clear(store); for(i=0;inumberOfImproperTorsionTerms;i++) { n = amberParameters->improperTorsionTerms[i].numbers[0]; type = getType(amberParameters,n); texts[0] = g_strdup(type); n = amberParameters->improperTorsionTerms[i].numbers[1]; type = getType(amberParameters,n); texts[1] = g_strdup(type); n = amberParameters->improperTorsionTerms[i].numbers[2]; type = getType(amberParameters,n); texts[2] = g_strdup(type); n = amberParameters->improperTorsionTerms[i].numbers[3]; type = getType(amberParameters,n); texts[3] = g_strdup(type); texts[4] = g_strdup_printf("%f",amberParameters->improperTorsionTerms[i].barrier); texts[5] = g_strdup_printf("%f",amberParameters->improperTorsionTerms[i].phase); texts[6] = g_strdup_printf("%f",amberParameters->improperTorsionTerms[i].n); gtk_list_store_append(store, &iter); for(k=0;k=0) selectRow(list, nn); } /**********************************************************************/ static void rafreshListTorsions(gint nn) { gint i; gint j; gint n = 0; gchar* type; GtkWidget* list = listTorsions; gchar *texts[lengthListsTorsion]; gint row=0; gint k; GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; model = gtk_tree_view_get_model(GTK_TREE_VIEW(list)); store = GTK_LIST_STORE (model); gtk_list_store_clear(store); for(i=0;inumberOfDihedralTerms;i++) { n = amberParameters->dihedralAngleTerms[i].numbers[0]; type = getType(amberParameters,n); texts[0] = g_strdup(type); n = amberParameters->dihedralAngleTerms[i].numbers[1]; type = getType(amberParameters,n); texts[1] = g_strdup(type); n = amberParameters->dihedralAngleTerms[i].numbers[2]; type = getType(amberParameters,n); texts[2] = g_strdup(type); n = amberParameters->dihedralAngleTerms[i].numbers[3]; type = getType(amberParameters,n); texts[3] = g_strdup(type); for(j=0;jdihedralAngleTerms[i].nSomme;j++) { texts[4] = g_strdup_printf("%f",amberParameters->dihedralAngleTerms[i].divisor[j]); texts[5] = g_strdup_printf("%f",amberParameters->dihedralAngleTerms[i].barrier[j]); texts[6] = g_strdup_printf("%f",amberParameters->dihedralAngleTerms[i].phase[j]); texts[7] = g_strdup_printf("%f",amberParameters->dihedralAngleTerms[i].n[j]); gtk_list_store_append(store, &iter); for(k=0;k=0) selectRow(list, nn); } /**********************************************************************/ static void rafreshListBends(gint nn) { gchar *texts[lengthListsBend]; gint i; gint n = 0; gchar* type; GtkWidget* list = listBends; gint k; GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; model = gtk_tree_view_get_model(GTK_TREE_VIEW(list)); store = GTK_LIST_STORE (model); gtk_list_store_clear(store); for(i=0;inumberOfBendTerms;i++) { n = amberParameters->angleBendTerms[i].numbers[0]; type = getType(amberParameters,n); texts[0] = g_strdup(type); n = amberParameters->angleBendTerms[i].numbers[1]; type = getType(amberParameters,n); texts[1] = g_strdup(type); n = amberParameters->angleBendTerms[i].numbers[2]; type = getType(amberParameters,n); texts[2] = g_strdup(type); texts[3] = g_strdup_printf("%f",amberParameters->angleBendTerms[i].forceConstant); texts[4] = g_strdup_printf("%f",amberParameters->angleBendTerms[i].equilibriumAngle); gtk_list_store_append(store, &iter); for(k=0;k=0) selectRow(list, nn); } /********************************************************************************/ static void rafreshListBonds(gint nn) { gchar *texts[lengthListsBond]; gint i; gint n = 0; gchar* type; GtkWidget* list = listBonds; gint k; GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; model = gtk_tree_view_get_model(GTK_TREE_VIEW(list)); store = GTK_LIST_STORE (model); gtk_list_store_clear(store); for(i=0;inumberOfStretchTerms;i++) { n = amberParameters->bondStretchTerms[i].numbers[0]; type = getType(amberParameters,n); texts[0] = g_strdup(type); n = amberParameters->bondStretchTerms[i].numbers[1]; type = getType(amberParameters,n); texts[1] = g_strdup(type); texts[2] = g_strdup_printf("%f",amberParameters->bondStretchTerms[i].forceConstant); texts[3] = g_strdup_printf("%f",amberParameters->bondStretchTerms[i].equilibriumDistance); gtk_list_store_append(store, &iter); for(k=0;k=0) selectRow(list, nn); } /********************************************************************************/ static void rafreshListTypes(gint nn) { gint i; gchar *texts[lengthListsType]; GtkWidget* list = listTypes; gint k; GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; model = gtk_tree_view_get_model(GTK_TREE_VIEW(list)); store = GTK_LIST_STORE (model); gtk_list_store_clear(store); for(i=0;inumberOfTypes;i++) { texts[0] = g_strdup(amberParameters->atomTypes[i].name); texts[1] = g_strdup(amberParameters->atomTypes[i].symbol); texts[2] = g_strdup_printf("%f",amberParameters->atomTypes[i].masse); texts[3] = g_strdup_printf("%f",amberParameters->atomTypes[i].polarisability); texts[4] = g_strdup(amberParameters->atomTypes[i].description); gtk_list_store_append(store, &iter); for(k=0;k=0) selectRow(list, nn); } /********************************************************************************/ static void editnewPairWiseDlg(GabeditSignalFunc f,gchar* title,gboolean sensitive) { GtkWidget *WinDlg; GtkWidget *Button; GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *table; GtkWidget *combo; GtkWidget *label; gint i; gchar **tlist; GList *list=NULL; gint Nc; gint nlist; gchar* t1; gchar* t2; gint l = (gint)(ScreenHeight*0.1); Nc= atoi(rowSelectedLists[MMNUMBERPAIRWISE]); if(Nc>=0) { t1 = getType(amberParameters,amberParameters->pairWiseTerms[Nc].numbers[0]); t2 = getType(amberParameters,amberParameters->pairWiseTerms[Nc].numbers[1]); } else { t1 = amberParameters->atomTypes[0].name; t2 = amberParameters->atomTypes[0].name; } WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),title); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(SetWinDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); tlist = getLocalListTypes(&nlist); for (i=0;ichild; gtk_entry_set_text(GTK_ENTRY(Entrys[E_T1]),t1); gtk_widget_set_sensitive(combo, sensitive); combo = gtk_combo_box_entry_new_text(); gtk_combo_box_entry_set_popdown_strings(combo,list); gtk_widget_set_size_request(GTK_WIDGET(combo),l,-1); gtk_table_attach(GTK_TABLE(table),combo,3,4,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); Entrys[E_T2] = GTK_BIN(combo)->child; gtk_entry_set_text(GTK_ENTRY(Entrys[E_T2]),t2); gtk_widget_set_sensitive(combo, sensitive); tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->pairWiseTerms[Nc].a); else tlist[0]=g_strdup("1.0"); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->pairWiseTerms[Nc].beta); else tlist[0]=g_strdup("1.0"); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->pairWiseTerms[Nc].c6); else tlist[0]=g_strdup("0.0"); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->pairWiseTerms[Nc].c8); else tlist[0]=g_strdup("0.0"); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->pairWiseTerms[Nc].c10); else tlist[0]=g_strdup("0.0"); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->pairWiseTerms[Nc].b); else tlist[0]=g_strdup("0.0"); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); gtk_widget_realize(WinDlg); Button = create_button(WinDlg,"Cancel"); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(GTK_OBJECT(Button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,"OK"); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)f,NULL); g_signal_connect_swapped(GTK_OBJECT(Button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /********************************************************************************/ static void editnewNonBondedDlg(GabeditSignalFunc f,gchar* title,gboolean sensitive) { GtkWidget *WinDlg; GtkWidget *Button; GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *table; GtkWidget *combo; GtkWidget *label; gint i; gchar **tlist; GList *list=NULL; gint Nc; gint nlist; gchar* t1; gint l = (gint)(ScreenHeight*0.1); Nc = atoi(rowSelectedLists[MMNUMBERNONBONDED]); if(Nc>=0) t1 = getType(amberParameters,amberParameters->nonBondedTerms[Nc].number); else t1 = amberParameters->atomTypes[0].name; WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),title); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(SetWinDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); tlist = getLocalListTypes(&nlist); for (i=0;ichild; gtk_entry_set_text(GTK_ENTRY(Entrys[E_T1]),t1); gtk_widget_set_sensitive(combo, sensitive); tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->nonBondedTerms[Nc].r); else tlist[0]=g_strdup("1.0"); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->nonBondedTerms[Nc].epsilon); else tlist[0]=g_strdup("1.0"); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); gtk_widget_realize(WinDlg); Button = create_button(WinDlg,"Cancel"); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(GTK_OBJECT(Button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,"OK"); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)f,NULL); g_signal_connect_swapped(GTK_OBJECT(Button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /********************************************************************************/ static void editPairWise(GtkWidget *win) { gdouble a = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_A]))); gdouble beta = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_BETA]))); gdouble c6 = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_C6]))); gdouble c8 = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_C8]))); gdouble c10 = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_C10]))); gdouble b = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_B]))); gint i = atoi(rowSelectedLists[MMNUMBERPAIRWISE]); if(i<0) return; amberParameters->pairWiseTerms[i].a = a; amberParameters->pairWiseTerms[i].beta = beta; amberParameters->pairWiseTerms[i].c6 = c6; amberParameters->pairWiseTerms[i].c8 = c8; amberParameters->pairWiseTerms[i].c10 = c10; amberParameters->pairWiseTerms[i].b = b; rafreshListPairWises(i); } /********************************************************************************/ static void editPairWiseDlg(GtkWidget *win,gpointer data) { editnewPairWiseDlg(editPairWise,"Pair Wise parameters Editor",FALSE); } /********************************************************************************/ static void editNonBonded(GtkWidget *win) { gdouble r = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_R]))); gdouble epsilon = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_E]))); gint i = atoi(rowSelectedLists[MMNUMBERNONBONDED]); if(i<0) return; amberParameters->nonBondedTerms[i].r = r; amberParameters->nonBondedTerms[i].epsilon = epsilon; rafreshListNonBondeds(i); } /********************************************************************************/ static void editNonBondedDlg(GtkWidget *win,gpointer data) { editnewNonBondedDlg(editNonBonded,"Non Bonded Editor",FALSE); } /********************************************************************************/ static void editnewHBondDlg(GabeditSignalFunc f,gchar* title,gboolean sensitive) { GtkWidget *WinDlg; GtkWidget *Button; GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *table; GtkWidget *combo; GtkWidget *label; gint i; gchar **tlist; GList *list=NULL; gint Nc; gint nlist; gchar* t1; gchar* t2; gint l = (gint)(ScreenHeight*0.1); Nc= atoi(rowSelectedLists[MMNUMBERHBOND]); if(Nc>=0) { t1 = getType(amberParameters,amberParameters->hydrogenBondedTerms[Nc].numbers[0]); t2 = getType(amberParameters,amberParameters->hydrogenBondedTerms[Nc].numbers[1]); } else { t1 = amberParameters->atomTypes[0].name; t2 = amberParameters->atomTypes[0].name; } WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),title); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(SetWinDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); tlist = getLocalListTypes(&nlist); for (i=0;ichild; gtk_entry_set_text(GTK_ENTRY(Entrys[E_T1]),t1); gtk_widget_set_sensitive(combo, sensitive); combo = gtk_combo_box_entry_new_text(); gtk_combo_box_entry_set_popdown_strings(combo,list); gtk_widget_set_size_request(GTK_WIDGET(combo),l,-1); gtk_table_attach(GTK_TABLE(table),combo,3,4,0,1,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),1,1); Entrys[E_T2] = GTK_BIN(combo)->child; gtk_entry_set_text(GTK_ENTRY(Entrys[E_T2]),t2); gtk_widget_set_sensitive(combo, sensitive); tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->hydrogenBondedTerms[Nc].c); else tlist[0]=g_strdup("1.0"); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->hydrogenBondedTerms[Nc].d); else tlist[0]=g_strdup("1.0"); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); gtk_widget_realize(WinDlg); Button = create_button(WinDlg,"Cancel"); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(GTK_OBJECT(Button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,"OK"); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)f,NULL); g_signal_connect_swapped(GTK_OBJECT(Button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /********************************************************************************/ static void editHBond(GtkWidget *win) { gdouble c = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_C]))); gdouble d = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_D]))); gint i = atoi(rowSelectedLists[MMNUMBERHBOND]); if(i<0) return; amberParameters->hydrogenBondedTerms[i].c = c; amberParameters->hydrogenBondedTerms[i].d = d; rafreshListHBonds(i); } /********************************************************************************/ static void editHBondDlg(GtkWidget *win,gpointer data) { editnewHBondDlg(editHBond,"Edit H-Bond parameters",FALSE); } /********************************************************************************/ static void editnewImproperDlg(GabeditSignalFunc f,gchar* title,gboolean sensitive) { GtkWidget *WinDlg; GtkWidget *Button; GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *table; GtkWidget *combo; GtkWidget *label; gint i; gchar **tlist; GList *list=NULL; gint Nc; gint nlist; gchar* t1; gchar* t2; gchar* t3; gchar* t4; gint l = (gint)(ScreenHeight*0.1); Nc= atoi(rowSelectedLists[MMNUMBERIMPROPER]); if(Nc>=0) { t1 = getType(amberParameters,amberParameters->improperTorsionTerms[Nc].numbers[0]); t2 = getType(amberParameters,amberParameters->improperTorsionTerms[Nc].numbers[1]); t3 = getType(amberParameters,amberParameters->improperTorsionTerms[Nc].numbers[2]); t4 = getType(amberParameters,amberParameters->improperTorsionTerms[Nc].numbers[3]); } else { t1 = amberParameters->atomTypes[0].name; t2 = amberParameters->atomTypes[0].name; t3 = amberParameters->atomTypes[0].name; t4 = amberParameters->atomTypes[0].name; } WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),title); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(SetWinDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); tlist = getLocalListTypes(&nlist); list=g_list_append(list,"X"); for (i=0;ichild; gtk_entry_set_text(GTK_ENTRY(Entrys[E_T1]),t1); gtk_widget_set_sensitive(combo, sensitive); combo = gtk_combo_box_entry_new_text(); gtk_combo_box_entry_set_popdown_strings(combo,list); gtk_widget_set_size_request(GTK_WIDGET(combo),l,-1); gtk_table_attach(GTK_TABLE(table),combo,3,4,0,1,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),1,1); Entrys[E_T2] = GTK_BIN(combo)->child; gtk_entry_set_text(GTK_ENTRY(Entrys[E_T2]),t2); gtk_widget_set_sensitive(combo, sensitive); combo = gtk_combo_box_entry_new_text(); gtk_combo_box_entry_set_popdown_strings(combo,list); gtk_widget_set_size_request(GTK_WIDGET(combo),l,-1); gtk_table_attach(GTK_TABLE(table),combo,4,5,0,1,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),1,1); Entrys[E_T3] = GTK_BIN(combo)->child; gtk_entry_set_text(GTK_ENTRY(Entrys[E_T3]),t3); gtk_widget_set_sensitive(combo, sensitive); combo = gtk_combo_box_entry_new_text(); gtk_combo_box_entry_set_popdown_strings(combo,list); gtk_widget_set_size_request(GTK_WIDGET(combo),l,-1); gtk_table_attach(GTK_TABLE(table),combo,5,6,0,1,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),1,1); Entrys[E_T4] = GTK_BIN(combo)->child; gtk_entry_set_text(GTK_ENTRY(Entrys[E_T4]),t4); gtk_widget_set_sensitive(combo, sensitive); tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->improperTorsionTerms[Nc].barrier); else tlist[0]=g_strdup("1.0"); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->improperTorsionTerms[Nc].phase); else tlist[0]=g_strdup("1.0"); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->improperTorsionTerms[Nc].n); else tlist[0]=g_strdup("1.0"); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); gtk_widget_realize(WinDlg); Button = create_button(WinDlg,"Cancel"); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(GTK_OBJECT(Button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,"OK"); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)f,NULL); g_signal_connect_swapped(GTK_OBJECT(Button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /********************************************************************************/ static void editImproper(GtkWidget *win) { gdouble barrier = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_B]))); gdouble phase = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_P]))); gdouble n = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_N]))); gint i = atoi(rowSelectedLists[MMNUMBERIMPROPER]); if(i<0) return; amberParameters->improperTorsionTerms[i].barrier = barrier; amberParameters->improperTorsionTerms[i].phase = phase; amberParameters->improperTorsionTerms[i].n= n; rafreshListImpropers(i); } /********************************************************************************/ static void editImproperDlg(GtkWidget *win,gpointer data) { editnewImproperDlg(editImproper,"Improper terms Editor",FALSE); } /********************************************************************************/ static void getIndexTorsion(gint Nc, gint* ii, gint* jj) { gint i; gint j; gint row = 0; for(i=0;inumberOfDihedralTerms;i++) { for(j=0;jdihedralAngleTerms[i].nSomme;j++) { if(row == Nc) { *ii = i; *jj = j; return; } row++; } } *ii = -1; *jj = -1; } /********************************************************************************/ static void editnewTorsionDlg(GabeditSignalFunc f,gchar* title,gboolean sensitive) { GtkWidget *WinDlg; GtkWidget *Button; GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *table; GtkWidget *combo; GtkWidget *label; gint i; gint j; gchar **tlist; GList *list=NULL; gint Nc; gint nlist; gchar* t1; gchar* t2; gchar* t3; gchar* t4; gint l = (gint)(ScreenHeight*0.1); i = atoi(rowSelectedLists[MMNUMBERTORSION]); getIndexTorsion(i,&Nc,&j); if(Nc>=0) { t1 = getType(amberParameters,amberParameters->dihedralAngleTerms[Nc].numbers[0]); t2 = getType(amberParameters,amberParameters->dihedralAngleTerms[Nc].numbers[1]); t3 = getType(amberParameters,amberParameters->dihedralAngleTerms[Nc].numbers[2]); t4 = getType(amberParameters,amberParameters->dihedralAngleTerms[Nc].numbers[3]); } else { t1 = amberParameters->atomTypes[0].name; t2 = amberParameters->atomTypes[0].name; t3 = amberParameters->atomTypes[0].name; t4 = amberParameters->atomTypes[0].name; } WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),title); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(SetWinDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); tlist = getLocalListTypes(&nlist); list=g_list_append(list,"X"); for (i=0;ichild; gtk_entry_set_text(GTK_ENTRY(Entrys[E_T1]),t1); gtk_widget_set_sensitive(combo, sensitive); combo = gtk_combo_box_entry_new_text(); gtk_combo_box_entry_set_popdown_strings(combo,list); gtk_widget_set_size_request(GTK_WIDGET(combo),l,-1); gtk_table_attach(GTK_TABLE(table),combo,3,4,0,1,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),1,1); Entrys[E_T2] = GTK_BIN(combo)->child; gtk_entry_set_text(GTK_ENTRY(Entrys[E_T2]),t2); gtk_widget_set_sensitive(combo, sensitive); combo = gtk_combo_box_entry_new_text(); gtk_combo_box_entry_set_popdown_strings(combo,list); gtk_widget_set_size_request(GTK_WIDGET(combo),l,-1); gtk_table_attach(GTK_TABLE(table),combo,4,5,0,1,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),1,1); Entrys[E_T3] = GTK_BIN(combo)->child; gtk_entry_set_text(GTK_ENTRY(Entrys[E_T3]),t3); gtk_widget_set_sensitive(combo, sensitive); combo = gtk_combo_box_entry_new_text(); gtk_combo_box_entry_set_popdown_strings(combo,list); gtk_widget_set_size_request(GTK_WIDGET(combo),l,-1); gtk_table_attach(GTK_TABLE(table),combo,5,6,0,1,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),1,1); Entrys[E_T4] = GTK_BIN(combo)->child; gtk_entry_set_text(GTK_ENTRY(Entrys[E_T4]),t4); gtk_widget_set_sensitive(combo, sensitive); tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->dihedralAngleTerms[Nc].divisor[j]); else tlist[0]=g_strdup(" "); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->dihedralAngleTerms[Nc].barrier[j]); else tlist[0]=g_strdup("1.0"); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->dihedralAngleTerms[Nc].phase[j]); else tlist[0]=g_strdup("1.0"); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->dihedralAngleTerms[Nc].n[j]); else tlist[0]=g_strdup("1.0"); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); gtk_widget_realize(WinDlg); Button = create_button(WinDlg,"Cancel"); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(GTK_OBJECT(Button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,"OK"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)f,NULL); g_signal_connect_swapped(GTK_OBJECT(Button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /********************************************************************************/ static void editTorsion(GtkWidget *win) { gdouble divisor = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_D]))); gdouble barrier = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_B]))); gdouble phase = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_P]))); gdouble n = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_N]))); gint Nc = atoi(rowSelectedLists[MMNUMBERTORSION]); gint i; gint j; if(Nc<0) return; getIndexTorsion(Nc,&i,&j); if(i<0) return; if(fabs(divisor)<1e-10) divisor = 1e-10; amberParameters->dihedralAngleTerms[i].divisor[j] = divisor; amberParameters->dihedralAngleTerms[i].barrier[j] = barrier; amberParameters->dihedralAngleTerms[i].phase[j] = phase; amberParameters->dihedralAngleTerms[i].n[j] = n; rafreshListTorsions(Nc); } /********************************************************************************/ static void editTorsionDlg(GtkWidget *win,gpointer data) { editnewTorsionDlg(editTorsion,"Torsion editor",FALSE); } /********************************************************************************/ static void editnewBendDlg(GabeditSignalFunc f,gchar* title,gboolean sensitive) { GtkWidget *WinDlg; GtkWidget *Button; GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *table; GtkWidget *combo; GtkWidget *label; gint i; gchar **tlist; GList *list=NULL; gint Nc; gint nlist; gchar* t1; gchar* t2; gchar* t3; gint l = (gint)(ScreenHeight*0.1); Nc= atoi(rowSelectedLists[MMNUMBERBEND]); if(Nc>=0) { t1 = getType(amberParameters,amberParameters->angleBendTerms[Nc].numbers[0]); t2 = getType(amberParameters,amberParameters->angleBendTerms[Nc].numbers[1]); t3 = getType(amberParameters,amberParameters->angleBendTerms[Nc].numbers[2]); } else { t1 = amberParameters->atomTypes[0].name; t2 = amberParameters->atomTypes[0].name; t3 = amberParameters->atomTypes[0].name; } WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),title); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(SetWinDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); tlist = getLocalListTypes(&nlist); for (i=0;ichild; gtk_entry_set_text(GTK_ENTRY(Entrys[E_T1]),t1); gtk_widget_set_sensitive(combo, sensitive); combo = gtk_combo_box_entry_new_text(); gtk_combo_box_entry_set_popdown_strings(combo,list); gtk_widget_set_size_request(GTK_WIDGET(combo),l,-1); gtk_table_attach(GTK_TABLE(table),combo,3,4,0,1,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),1,1); Entrys[E_T2] = GTK_BIN(combo)->child; gtk_entry_set_text(GTK_ENTRY(Entrys[E_T2]),t2); gtk_widget_set_sensitive(combo, sensitive); combo = gtk_combo_box_entry_new_text(); gtk_combo_box_entry_set_popdown_strings(combo,list); gtk_widget_set_size_request(GTK_WIDGET(combo),l,-1); gtk_table_attach(GTK_TABLE(table),combo,4,5,0,1,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),1,1); Entrys[E_T3] = GTK_BIN(combo)->child; gtk_entry_set_text(GTK_ENTRY(Entrys[E_T3]),t3); gtk_widget_set_sensitive(combo, sensitive); tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->angleBendTerms[Nc].forceConstant); else tlist[0]=g_strdup(" "); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->angleBendTerms[Nc].equilibriumAngle); else tlist[0]=g_strdup(" "); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); gtk_widget_realize(WinDlg); Button = create_button(WinDlg,"Cancel"); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(GTK_OBJECT(Button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,"OK"); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)f,NULL); g_signal_connect_swapped(GTK_OBJECT(Button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /********************************************************************************/ static void editBend(GtkWidget *win) { gdouble force = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_F]))); gdouble angle = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_A]))); gint i = atoi(rowSelectedLists[MMNUMBERBEND]); if(i<0) return; amberParameters->angleBendTerms[i].forceConstant = force; amberParameters->angleBendTerms[i].equilibriumAngle= angle; rafreshListBends(i); } /********************************************************************************/ static void editBendDlg(GtkWidget *win,gpointer data) { editnewBendDlg(editBend,"Bend Editor",FALSE); } /********************************************************************************/ static void editnewBondDlg(GabeditSignalFunc f,gchar* title,gboolean sensitive) { GtkWidget *WinDlg; GtkWidget *Button; GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *table; GtkWidget *combo; GtkWidget *label; gint i; gchar **tlist; GList *list=NULL; gint Nc; gint nlist; gchar* t1; gchar* t2; gint l = (gint)(ScreenHeight*0.1); Nc= atoi(rowSelectedLists[MMNUMBERBOND]); if(Nc>=0) { t1 = getType(amberParameters,amberParameters->bondStretchTerms[Nc].numbers[0]); t2 = getType(amberParameters,amberParameters->bondStretchTerms[Nc].numbers[1]); } else { t1 = amberParameters->atomTypes[0].name; t2 = amberParameters->atomTypes[0].name; } WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),title); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(SetWinDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); tlist = getLocalListTypes(&nlist); for (i=0;ichild; gtk_entry_set_text(GTK_ENTRY(Entrys[E_T1]),t1); gtk_widget_set_sensitive(combo, sensitive); combo = gtk_combo_box_entry_new_text(); gtk_combo_box_entry_set_popdown_strings(combo,list); gtk_widget_set_size_request(GTK_WIDGET(combo),l,-1); gtk_table_attach(GTK_TABLE(table),combo,3,4,0,1,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),1,1); Entrys[E_T2] = GTK_BIN(combo)->child; gtk_entry_set_text(GTK_ENTRY(Entrys[E_T2]),t2); gtk_widget_set_sensitive(combo, sensitive); tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->bondStretchTerms[Nc].forceConstant); else tlist[0]=g_strdup("1.0"); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); list = NULL; tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->bondStretchTerms[Nc].equilibriumDistance); else tlist[0]=g_strdup("1.0"); tlist[1]=g_strdup(" "); nlist=2; for (i=0;ichild; tlist = freeList(tlist,nlist); gtk_widget_realize(WinDlg); Button = create_button(WinDlg,"Cancel"); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(GTK_OBJECT(Button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,"OK"); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)f,NULL); g_signal_connect_swapped(GTK_OBJECT(Button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /********************************************************************************/ static void editBond(GtkWidget* w) { gdouble force = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_F]))); gdouble r = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_R]))); gint i = atoi(rowSelectedLists[MMNUMBERBOND]); if(i<0) return; amberParameters->bondStretchTerms[i].forceConstant = force; amberParameters->bondStretchTerms[i].equilibriumDistance= r; rafreshListBonds(i); } /********************************************************************************/ static void editBondDlg(GtkWidget *win,gpointer data) { editnewBondDlg(editBond,"Edit Bond parameters",FALSE); } /********************************************************************************/ static void editType(GtkWidget* w) { G_CONST_RETURN gchar *symbol = gtk_entry_get_text(GTK_ENTRY(Entrys[E_S])); gdouble masse = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_M]))); gdouble pol = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_P]))); G_CONST_RETURN gchar* desc = (gtk_entry_get_text(GTK_ENTRY(Entrys[E_DESC]))); gint i = atoi(rowSelectedLists[MMNUMBERTYPE]); if(i<0) return; g_free(amberParameters->atomTypes[i].symbol); amberParameters->atomTypes[i].symbol = g_strdup(symbol); amberParameters->atomTypes[i].masse = masse; amberParameters->atomTypes[i].polarisability = pol; amberParameters->atomTypes[i].description = g_strdup(desc); rafreshListTypes(i); } /********************************************************************************/ static void newType(GtkWidget* w) { G_CONST_RETURN gchar *symbol = gtk_entry_get_text(GTK_ENTRY(Entrys[E_S])); G_CONST_RETURN gchar *name = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T])); gdouble masse = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_M]))); gdouble pol = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_P]))); G_CONST_RETURN gchar* desc = (gtk_entry_get_text(GTK_ENTRY(Entrys[E_DESC]))); gint i = atoi(rowSelectedLists[MMNUMBERTYPE]); gint j; gint number = 0; for(j=0;jnumberOfTypes;j++) { if(numberatomTypes[j].number) number = amberParameters->atomTypes[j].number; if(!strcmp(amberParameters->atomTypes[j].name,name)) { gchar* t = g_strdup_printf("The \"%s\" type is define !",name); GtkWidget* w = Message(t,"Error",TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(SetWinDlg)); g_free(t); return; } } amberParameters->numberOfTypes ++; if(amberParameters->numberOfTypes>1) amberParameters->atomTypes = g_realloc( amberParameters->atomTypes, amberParameters->numberOfTypes*sizeof(AmberAtomTypes)); else amberParameters->atomTypes = g_malloc(sizeof(AmberAtomTypes)); i = amberParameters->numberOfTypes -1; amberParameters->atomTypes[i].name = g_strdup(name); amberParameters->atomTypes[i].symbol = g_strdup(symbol); amberParameters->atomTypes[i].number = number+1; amberParameters->atomTypes[i].masse = masse; amberParameters->atomTypes[i].polarisability = pol; amberParameters->atomTypes[i].description = g_strdup(desc); rafreshListTypes(i); } /********************************************************************************/ static void editnewTypeDlg(GabeditSignalFunc f,gchar* title) { GtkWidget *WinDlg; GtkWidget *Button; GtkWidget *hbox; GtkWidget *frame; GtkWidget *vboxframe; gint i; gchar **tlist; gint Nc; gint nlist; Nc= atoi(rowSelectedLists[MMNUMBERTYPE]); WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),title); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(SetWinDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); Entrys[E_S] = create_label_entry(hbox,typeTitles[1],(gint)(ScreenHeight*0.1),(gint)(ScreenHeight*0.15)); if(Nc>=0) gtk_entry_set_text(GTK_ENTRY(Entrys[E_S]),amberParameters->atomTypes[Nc].symbol); else gtk_entry_set_text(GTK_ENTRY(Entrys[E_S]),"C"); gtk_editable_set_editable((GtkEditable*) Entrys[E_S],FALSE); Button = gtk_button_new_with_label(" Modify "); gtk_box_pack_start (GTK_BOX(hbox), Button, TRUE, TRUE, 5); g_signal_connect(G_OBJECT(Button), "clicked", (GCallback)SelectAtom,Entrys[E_S]); hbox=create_hbox_false(vboxframe); Entrys[E_T] = create_label_entry(hbox,typeTitles[0],(gint)(ScreenHeight*0.1),(gint)(ScreenHeight*0.15)); if(Nc>=0) gtk_entry_set_text(GTK_ENTRY(Entrys[E_T]),amberParameters->atomTypes[Nc].name); else gtk_entry_set_text(GTK_ENTRY(Entrys[E_T])," "); gtk_editable_set_editable((GtkEditable*) Entrys[E_T],FALSE); tlist=g_malloc(2*sizeof(char*)); if(Nc>=0) tlist[0]=g_strdup_printf("%f",amberParameters->atomTypes[Nc].masse); else tlist[0]=g_strdup("1.0"); tlist[1]=g_strdup(" "); nlist=2; hbox=create_hbox_false(vboxframe); Entrys[E_M] = create_label_combo(hbox,typeTitles[2],tlist,nlist,FALSE, (gint)(ScreenHeight*0.1),(gint)(ScreenHeight*0.15)); gtk_editable_set_editable((GtkEditable*) Entrys[E_M],TRUE); for(i=0;i=0) tlist[0]=g_strdup_printf("%f",amberParameters->atomTypes[Nc].polarisability); else tlist[0]=g_strdup("1.0"); tlist[1]=g_strdup(" "); nlist=2; hbox=create_hbox_false(vboxframe); Entrys[E_P] = create_label_combo(hbox,typeTitles[3],tlist,nlist,FALSE, (gint)(ScreenHeight*0.1),(gint)(ScreenHeight*0.15)); gtk_editable_set_editable((GtkEditable*) Entrys[E_P],TRUE); for(i=0;i=0) gtk_entry_set_text(GTK_ENTRY(Entrys[E_DESC]),amberParameters->atomTypes[Nc].description); else gtk_entry_set_text(GTK_ENTRY(Entrys[E_DESC])," "); gtk_editable_set_editable((GtkEditable*) Entrys[E_DESC],TRUE); g_free(tlist); gtk_widget_realize(WinDlg); Button = create_button(WinDlg,"Cancel"); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(GTK_OBJECT(Button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,"OK"); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)f, NULL); g_signal_connect_swapped(GTK_OBJECT(Button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /********************************************************************************/ static void editTypeDlg(GtkWidget *w,gpointer data) { editnewTypeDlg(editType,"Edit a type"); gtk_editable_set_editable((GtkEditable*) Entrys[E_T],FALSE); } /********************************************************************************/ static void editDlg(GtkWidget *win,gpointer data) { gint nList = gtk_notebook_get_current_page(GTK_NOTEBOOK(NoteBook)); switch(nList) { case MMNUMBERTYPE : editTypeDlg(win,data); break; case MMNUMBERBOND : editBondDlg(win,data); break; case MMNUMBERBEND : editBendDlg(win,data); break; case MMNUMBERTORSION : editTorsionDlg(win,data); break; case MMNUMBERIMPROPER : editImproperDlg(win,data); break; case MMNUMBERHBOND : editHBondDlg(win,data); break; case MMNUMBERNONBONDED : editNonBondedDlg(win,data); break; case MMNUMBERPAIRWISE : editPairWiseDlg(win,data); break; } } /********************************************************************************/ static void newPairWise(GtkWidget *win) { G_CONST_RETURN gchar* t1 = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T1])); G_CONST_RETURN gchar* t2 = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T2])); gdouble a = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_A]))); gdouble beta = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_BETA]))); gdouble c6 = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_C6]))); gdouble c8 = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_C8]))); gdouble c10 = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_C10]))); gdouble b = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_B]))); gint i; gint number1 = getNumberType(amberParameters,t1); gint number2 = getNumberType(amberParameters,t2); for(i=0;inumberOfPairWise;i++) { if( ( number1 == amberParameters->pairWiseTerms[i].numbers[0] && number2 == amberParameters->pairWiseTerms[i].numbers[1] ) || ( number1 == amberParameters->pairWiseTerms[i].numbers[1] && number2 == amberParameters->pairWiseTerms[i].numbers[0] ) ) { gchar* t = g_strdup_printf("Sorry This pair wise term is define !"); GtkWidget* w = Message(t,"Error",TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(SetWinDlg)); g_free(t); return; } } amberParameters->numberOfPairWise++; if(amberParameters->numberOfPairWise>1) amberParameters->pairWiseTerms = g_realloc( amberParameters->pairWiseTerms, amberParameters->numberOfPairWise*sizeof(AmberPairWiseTerms)); else amberParameters->pairWiseTerms = g_malloc(sizeof(AmberPairWiseTerms)); i = amberParameters->numberOfPairWise -1; amberParameters->pairWiseTerms[i].numbers[0] = number1; amberParameters->pairWiseTerms[i].numbers[1] = number2; amberParameters->pairWiseTerms[i].a = a; amberParameters->pairWiseTerms[i].beta = beta; amberParameters->pairWiseTerms[i].c6 = c6; amberParameters->pairWiseTerms[i].c8 = c8; amberParameters->pairWiseTerms[i].c10 = c10; amberParameters->pairWiseTerms[i].b = b; rafreshListPairWises(i); } /********************************************************************************/ static void newPairWiseDlg(GtkWidget *win,gpointer data) { editnewPairWiseDlg(newPairWise,"New Pair Wise term ",TRUE); gtk_editable_set_editable((GtkEditable*) Entrys[E_T1],FALSE); gtk_editable_set_editable((GtkEditable*) Entrys[E_T2],FALSE); } /********************************************************************************/ static void newNonBonded(GtkWidget *win) { G_CONST_RETURN gchar* t1 = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T1])); gdouble r = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_R]))); gdouble epsilon = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_E]))); gint i = atoi(rowSelectedLists[MMNUMBERNONBONDED]); gint j; gint number = getNumberType(amberParameters,t1); for(j=0;jnumberOfNonBonded;j++) { if(number == amberParameters->nonBondedTerms[j].number) { gchar* t = g_strdup_printf("The non bonded terms for \"%s\" is define !",t1); GtkWidget* w = Message(t,"Error",TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(SetWinDlg)); g_free(t); return; } } amberParameters->numberOfNonBonded ++; if(amberParameters->numberOfNonBonded>1) amberParameters->nonBondedTerms = g_realloc( amberParameters->nonBondedTerms, amberParameters->numberOfNonBonded*sizeof(AmberNonBondedTerms)); else amberParameters->nonBondedTerms = g_malloc(sizeof(AmberNonBondedTerms)); i = amberParameters->numberOfNonBonded -1; amberParameters->nonBondedTerms[i].number = number; amberParameters->nonBondedTerms[i].r = r; amberParameters->nonBondedTerms[i].epsilon = epsilon; rafreshListNonBondeds(i); } /********************************************************************************/ static void newNonBondedDlg(GtkWidget *win,gpointer data) { editnewNonBondedDlg(newNonBonded,"New Non-Bonded term ",TRUE); gtk_editable_set_editable((GtkEditable*) Entrys[E_T1],FALSE); } /********************************************************************************/ static void newHBond(GtkWidget *win) { G_CONST_RETURN gchar *t1 = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T1])); G_CONST_RETURN gchar *t2 = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T2])); gdouble c = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_C]))); gdouble d = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_D]))); gint i = atoi(rowSelectedLists[MMNUMBERHBOND]); gint j; gint number1 = getNumberType(amberParameters,t1); gint number2 = getNumberType(amberParameters,t2); for(j=0;jnumberOfHydrogenBonded;j++) { if( ( number1 == amberParameters->hydrogenBondedTerms[j].numbers[0] && number2 == amberParameters->hydrogenBondedTerms[j].numbers[1] ) || ( number1 == amberParameters->hydrogenBondedTerms[j].numbers[1] && number2 == amberParameters->hydrogenBondedTerms[j].numbers[0] ) ) { gchar* t = g_strdup_printf("Sorry This Bond is define !"); GtkWidget* w = Message(t,"Error",TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(SetWinDlg)); g_free(t); return; } } amberParameters->numberOfHydrogenBonded++; if(amberParameters->numberOfHydrogenBonded>1) amberParameters->hydrogenBondedTerms = g_realloc( amberParameters->hydrogenBondedTerms, amberParameters->numberOfHydrogenBonded*sizeof(AmberHydrogenBondedTerms)); else amberParameters->hydrogenBondedTerms = g_malloc(sizeof(AmberHydrogenBondedTerms)); i = amberParameters->numberOfHydrogenBonded-1; amberParameters->hydrogenBondedTerms[i].numbers[0] = number1; amberParameters->hydrogenBondedTerms[i].numbers[1] = number2; amberParameters->hydrogenBondedTerms[i].c = c; amberParameters->hydrogenBondedTerms[i].d = d; rafreshListHBonds(i); } /********************************************************************************/ static void newHBondDlg(GtkWidget *win,gpointer data) { editnewHBondDlg(newHBond,"New H-Bond",TRUE); gtk_editable_set_editable((GtkEditable*) Entrys[E_T1],FALSE); gtk_editable_set_editable((GtkEditable*) Entrys[E_T2],FALSE); } /********************************************************************************/ static void newImproper(GtkWidget *win) { G_CONST_RETURN gchar *t1 = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T1])); G_CONST_RETURN gchar *t2 = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T2])); G_CONST_RETURN gchar *t3 = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T3])); G_CONST_RETURN gchar *t4 = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T4])); gdouble barrier = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_B]))); gdouble phase = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_P]))); gdouble n = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_N]))); gint i = atoi(rowSelectedLists[MMNUMBERIMPROPER]); gint j; gint number1 = getNumberType(amberParameters,t1); gint number2 = getNumberType(amberParameters,t2); gint number3 = getNumberType(amberParameters,t3); gint number4 = getNumberType(amberParameters,t4); for(j=0;jnumberOfImproperTorsionTerms;j++) { if( ( number1 == amberParameters->improperTorsionTerms[j].numbers[0] && number2 == amberParameters->improperTorsionTerms[j].numbers[1] && number3 == amberParameters->improperTorsionTerms[j].numbers[2] && number4 == amberParameters->improperTorsionTerms[j].numbers[3] ) || ( number1 == amberParameters->improperTorsionTerms[j].numbers[3] && number2 == amberParameters->improperTorsionTerms[j].numbers[2] && number3 == amberParameters->improperTorsionTerms[j].numbers[1] && number4 == amberParameters->improperTorsionTerms[j].numbers[0] ) ) { gchar* t = g_strdup_printf("Sorry This Improper terms is define !"); GtkWidget* w = Message(t,"Error",TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(SetWinDlg)); g_free(t); return; } } amberParameters->numberOfImproperTorsionTerms++; if(amberParameters->numberOfImproperTorsionTerms>1) amberParameters->improperTorsionTerms = g_realloc( amberParameters->improperTorsionTerms, amberParameters->numberOfImproperTorsionTerms*sizeof(AmberImproperTorsionTerms)); else amberParameters->improperTorsionTerms = g_malloc(sizeof(AmberImproperTorsionTerms)); i = amberParameters->numberOfImproperTorsionTerms-1; amberParameters->improperTorsionTerms[i].numbers[0] = number1; amberParameters->improperTorsionTerms[i].numbers[1] = number2; amberParameters->improperTorsionTerms[i].numbers[2] = number3; amberParameters->improperTorsionTerms[i].numbers[3] = number4; amberParameters->improperTorsionTerms[i].barrier = barrier; amberParameters->improperTorsionTerms[i].phase = phase; amberParameters->improperTorsionTerms[i].n = n; rafreshListImpropers(i); } /********************************************************************************/ static void newImproperDlg(GtkWidget *win,gpointer data) { editnewImproperDlg(newImproper,"new Improper terms",TRUE); gtk_editable_set_editable((GtkEditable*) Entrys[E_T1],FALSE); gtk_editable_set_editable((GtkEditable*) Entrys[E_T2],FALSE); gtk_editable_set_editable((GtkEditable*) Entrys[E_T3],FALSE); gtk_editable_set_editable((GtkEditable*) Entrys[E_T4],FALSE); } /********************************************************************************/ static void newTorsion(GtkWidget *win) { G_CONST_RETURN gchar *t1 = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T1])); G_CONST_RETURN gchar *t2 = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T2])); G_CONST_RETURN gchar *t3 = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T3])); G_CONST_RETURN gchar *t4 = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T4])); gdouble divisor = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_D]))); gdouble barrier = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_B]))); gdouble phase = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_P]))); gdouble n = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_N]))); gint i; gint j; gint ii; gint jj; gint Nc = atoi(rowSelectedLists[MMNUMBERTORSION]); gint number1 = getNumberType(amberParameters,t1); gint number2 = getNumberType(amberParameters,t2); gint number3 = getNumberType(amberParameters,t3); gint number4 = getNumberType(amberParameters,t4); if(fabs(divisor)<1e-10) divisor = 1e-10; ii = -1; jj = -1; for(i=0;inumberOfDihedralTerms;i++) { if( ( number1 == amberParameters->dihedralAngleTerms[i].numbers[0] && number2 == amberParameters->dihedralAngleTerms[i].numbers[1] && number3 == amberParameters->dihedralAngleTerms[i].numbers[2] && number4 == amberParameters->dihedralAngleTerms[i].numbers[3] ) || ( number1 == amberParameters->dihedralAngleTerms[i].numbers[3] && number2 == amberParameters->dihedralAngleTerms[i].numbers[2] && number3 == amberParameters->dihedralAngleTerms[i].numbers[1] && number4 == amberParameters->dihedralAngleTerms[i].numbers[0] ) ) { ii = i; break; } } if(ii == -1) { amberParameters->numberOfDihedralTerms++; if(amberParameters->numberOfDihedralTerms>1) amberParameters->dihedralAngleTerms = g_realloc( amberParameters->dihedralAngleTerms, amberParameters->numberOfDihedralTerms*sizeof(AmberDihedralAngleTerms)); else amberParameters->dihedralAngleTerms = g_malloc(sizeof(AmberDihedralAngleTerms)); i = amberParameters->numberOfDihedralTerms-1; amberParameters->dihedralAngleTerms[i].numbers[0] = number1; amberParameters->dihedralAngleTerms[i].numbers[1] = number2; amberParameters->dihedralAngleTerms[i].numbers[2] = number3; amberParameters->dihedralAngleTerms[i].numbers[3] = number4; amberParameters->dihedralAngleTerms[i].nSomme = 1; amberParameters->dihedralAngleTerms[i].divisor = g_malloc(sizeof(gdouble)); amberParameters->dihedralAngleTerms[i].divisor[0] = divisor; amberParameters->dihedralAngleTerms[i].barrier = g_malloc(sizeof(gdouble)); amberParameters->dihedralAngleTerms[i].barrier[0] = barrier; amberParameters->dihedralAngleTerms[i].phase = g_malloc(sizeof(gdouble)); amberParameters->dihedralAngleTerms[i].phase[0] = phase; amberParameters->dihedralAngleTerms[i].n = g_malloc(sizeof(gdouble)); amberParameters->dihedralAngleTerms[i].n[0] = n; } else { gint len; i = ii; amberParameters->dihedralAngleTerms[i].nSomme++; len = amberParameters->dihedralAngleTerms[i].nSomme; j= len -1; amberParameters->dihedralAngleTerms[i].divisor = g_realloc(amberParameters->dihedralAngleTerms[i].divisor, len*sizeof(gdouble)); amberParameters->dihedralAngleTerms[i].divisor[j] = divisor; amberParameters->dihedralAngleTerms[i].barrier = g_realloc(amberParameters->dihedralAngleTerms[i].barrier, len*sizeof(gdouble)); amberParameters->dihedralAngleTerms[i].barrier[j] = barrier; amberParameters->dihedralAngleTerms[i].phase = g_realloc(amberParameters->dihedralAngleTerms[i].phase, len*sizeof(gdouble)); amberParameters->dihedralAngleTerms[i].phase[j] = phase; amberParameters->dihedralAngleTerms[i].n = g_realloc(amberParameters->dihedralAngleTerms[i].n, len*sizeof(gdouble)); amberParameters->dihedralAngleTerms[i].n[j] = n; } if(Nc>=0) rafreshListTorsions(Nc+1); else rafreshListTorsions(-1); } /********************************************************************************/ static void newTorsionDlg(GtkWidget *win,gpointer data) { editnewTorsionDlg(newTorsion,"Torsion editor",TRUE); gtk_editable_set_editable((GtkEditable*) Entrys[E_T1],FALSE); gtk_editable_set_editable((GtkEditable*) Entrys[E_T2],FALSE); gtk_editable_set_editable((GtkEditable*) Entrys[E_T3],FALSE); gtk_editable_set_editable((GtkEditable*) Entrys[E_T4],FALSE); } /********************************************************************************/ static void newBend(GtkWidget *win) { G_CONST_RETURN gchar *t1 = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T1])); G_CONST_RETURN gchar *t2 = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T2])); G_CONST_RETURN gchar *t3 = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T3])); gdouble force = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_F]))); gdouble angle = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_A]))); gint i = atoi(rowSelectedLists[MMNUMBERBEND]); gint j; gint number1 = getNumberType(amberParameters,t1); gint number2 = getNumberType(amberParameters,t2); gint number3 = getNumberType(amberParameters,t3); for(j=0;jnumberOfBendTerms;j++) { if( ( number1 == amberParameters->angleBendTerms[j].numbers[0] && number2 == amberParameters->angleBendTerms[j].numbers[1] && number3 == amberParameters->angleBendTerms[j].numbers[2] ) || ( number1 == amberParameters->angleBendTerms[j].numbers[2] && number2 == amberParameters->angleBendTerms[j].numbers[1] && number3 == amberParameters->angleBendTerms[j].numbers[0] ) ) { gchar* t = g_strdup_printf("Sorry This Bend is define !"); GtkWidget* w = Message(t,"Error",TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(SetWinDlg)); g_free(t); return; } } amberParameters->numberOfBendTerms++; if(amberParameters->numberOfBendTerms>1) amberParameters->angleBendTerms = g_realloc( amberParameters->angleBendTerms, amberParameters->numberOfBendTerms*sizeof(AmberAngleBendTerms)); else amberParameters->angleBendTerms = g_malloc(sizeof(AmberAngleBendTerms)); i = amberParameters->numberOfBendTerms-1; amberParameters->angleBendTerms[i].numbers[0] = number1; amberParameters->angleBendTerms[i].numbers[1] = number2; amberParameters->angleBendTerms[i].numbers[2] = number3; amberParameters->angleBendTerms[i].forceConstant = force; amberParameters->angleBendTerms[i].equilibriumAngle = angle; rafreshListBends(i); } /********************************************************************************/ static void newBendDlg(GtkWidget *win,gpointer data) { editnewBendDlg(newBend,"new Bend",TRUE); gtk_editable_set_editable((GtkEditable*) Entrys[E_T1],FALSE); gtk_editable_set_editable((GtkEditable*) Entrys[E_T2],FALSE); gtk_editable_set_editable((GtkEditable*) Entrys[E_T3],FALSE); } /********************************************************************************/ static void newBond(GtkWidget* w) { G_CONST_RETURN gchar *t1 = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T1])); G_CONST_RETURN gchar *t2 = gtk_entry_get_text(GTK_ENTRY(Entrys[E_T2])); gdouble force = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_F]))); gdouble r = atof(gtk_entry_get_text(GTK_ENTRY(Entrys[E_R]))); gint i = atoi(rowSelectedLists[MMNUMBERBOND]); gint j; gint number1 = getNumberType(amberParameters,t1); gint number2 = getNumberType(amberParameters,t2); for(j=0;jnumberOfStretchTerms;j++) { if( ( number1 == amberParameters->bondStretchTerms[j].numbers[0] && number2 == amberParameters->bondStretchTerms[j].numbers[1] ) || ( number1 == amberParameters->bondStretchTerms[j].numbers[1] && number2 == amberParameters->bondStretchTerms[j].numbers[0] ) ) { gchar* t = g_strdup_printf("Sorry This Bond is define !"); GtkWidget* w = Message(t,"Error",TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(SetWinDlg)); g_free(t); return; } } amberParameters->numberOfStretchTerms++; if(amberParameters->numberOfStretchTerms>1) amberParameters->bondStretchTerms = g_realloc( amberParameters->bondStretchTerms, amberParameters->numberOfStretchTerms*sizeof(AmberBondStretchTerms)); else amberParameters->bondStretchTerms = g_malloc(sizeof(AmberBondStretchTerms)); i = amberParameters->numberOfStretchTerms-1; amberParameters->bondStretchTerms[i].numbers[0] = number1; amberParameters->bondStretchTerms[i].numbers[1] = number2; amberParameters->bondStretchTerms[i].forceConstant = force; amberParameters->bondStretchTerms[i].equilibriumDistance = r; rafreshListBonds(i); } /********************************************************************************/ static void newBondDlg(GtkWidget *win,gpointer data) { editnewBondDlg(newBond,"New Bond",TRUE); gtk_editable_set_editable((GtkEditable*) Entrys[E_T1],FALSE); gtk_editable_set_editable((GtkEditable*) Entrys[E_T2],FALSE); } /********************************************************************************/ static void newTypeDlg(GtkWidget *win,gpointer data) { editnewTypeDlg(newType,"New type"); gtk_editable_set_editable((GtkEditable*) Entrys[E_T],TRUE); } /********************************************************************************/ static void newDlg(GtkWidget *win,gpointer data) { gint nList = gtk_notebook_get_current_page(GTK_NOTEBOOK(NoteBook)); switch(nList) { case MMNUMBERTYPE : newTypeDlg(win,data); break; case MMNUMBERBOND : newBondDlg(win,data); break; case MMNUMBERBEND : newBendDlg(win,data); break; case MMNUMBERTORSION : newTorsionDlg(win,data); break; case MMNUMBERIMPROPER : newImproperDlg(win,data); break; case MMNUMBERHBOND : newHBondDlg(win,data); break; case MMNUMBERNONBONDED : newNonBondedDlg(win,data); break; case MMNUMBERPAIRWISE : newPairWiseDlg(win,data); break; } } /********************************************************************************/ static void deletePairWise(GtkWidget *win, gpointer data) { gint j = atoi(rowSelectedLists[MMNUMBERPAIRWISE]); gint i; if(j<0) return; for(i=j;inumberOfPairWise-1;i++) { amberParameters->pairWiseTerms[i] = amberParameters->pairWiseTerms[i+1]; } amberParameters->numberOfPairWise--; if(amberParameters->numberOfPairWise>0) amberParameters->pairWiseTerms= g_realloc( amberParameters->pairWiseTerms, amberParameters->numberOfPairWise*sizeof(AmberPairWiseTerms)); rafreshListPairWises(-1); } /********************************************************************************/ static void deletePairWiseDlg(GtkWidget *win,gpointer data) { gchar* t1; gchar* t2; gint i = atoi(rowSelectedLists[MMNUMBERPAIRWISE]); gint number1 = amberParameters->pairWiseTerms[i].numbers[0]; gint number2 = amberParameters->pairWiseTerms[i].numbers[1]; gchar *format ="Do you want to really delete the pair wise term for \"%s-%s\" type ?" ; gchar *t; t1 = getType(amberParameters,number1); t2 = getType(amberParameters,number2); t =g_strdup_printf(format,t1,t2); if(i>-1) Continue_YesNo(deletePairWise, NULL,t); g_free(t); } /********************************************************************************/ static void deleteNonBonded(GtkWidget *win, gpointer data) { gint j = atoi(rowSelectedLists[MMNUMBERNONBONDED]); gint i; if(j<0) return; for(i=j;inumberOfNonBonded-1;i++) { amberParameters->nonBondedTerms[i] = amberParameters->nonBondedTerms[i+1]; } amberParameters->numberOfNonBonded--; if(amberParameters->numberOfNonBonded>0) amberParameters->nonBondedTerms= g_realloc( amberParameters->nonBondedTerms, amberParameters->numberOfNonBonded*sizeof(AmberNonBondedTerms)); rafreshListNonBondeds(-1); } /********************************************************************************/ static void deleteNonBondedDlg(GtkWidget *win,gpointer data) { gchar* t1; gint i = atoi(rowSelectedLists[MMNUMBERNONBONDED]); gint number1 = amberParameters->nonBondedTerms[i].number; gchar *format ="Do you want to really delete the non bonded term for \"%s\" type ?" ; gchar *t; t1 = getType(amberParameters,number1); t =g_strdup_printf(format,t1); if(i>-1) Continue_YesNo(deleteNonBonded, NULL,t); g_free(t); } /********************************************************************************/ static void deleteHBond(GtkWidget *win, gpointer data) { gint j = atoi(rowSelectedLists[MMNUMBERHBOND]); gint i; if(j<0) return; for(i=j;inumberOfHydrogenBonded-1;i++) { amberParameters->hydrogenBondedTerms[i] = amberParameters->hydrogenBondedTerms[i+1]; } amberParameters->numberOfHydrogenBonded--; if(amberParameters->numberOfHydrogenBonded>0) amberParameters->hydrogenBondedTerms = g_realloc( amberParameters->hydrogenBondedTerms, amberParameters->numberOfHydrogenBonded*sizeof(AmberHydrogenBondedTerms)); rafreshListHBonds(-1); } /********************************************************************************/ static void deleteHBondDlg(GtkWidget *win,gpointer data) { gchar* t1; gchar* t2; gint i = atoi(rowSelectedLists[MMNUMBERHBOND]); gint number1 = amberParameters->hydrogenBondedTerms[i].numbers[0]; gint number2 = amberParameters->hydrogenBondedTerms[i].numbers[1]; gchar *format ="Do you want to really delete \"%s-%s\" H-bond ?" ; gchar *t; t1 = getType(amberParameters,number1); t2 = getType(amberParameters,number2); t =g_strdup_printf(format,t1,t2); if(i>-1) Continue_YesNo(deleteHBond, NULL,t); g_free(t); } /********************************************************************************/ static void deleteImproper(GtkWidget *win, gpointer data) { gint j = atoi(rowSelectedLists[MMNUMBERIMPROPER]); gint i; if(j<0) return; for(i=j;inumberOfImproperTorsionTerms-1;i++) { amberParameters->improperTorsionTerms[i] = amberParameters->improperTorsionTerms[i+1]; } amberParameters->numberOfImproperTorsionTerms--; if(amberParameters->numberOfImproperTorsionTerms>0) amberParameters->improperTorsionTerms = g_realloc( amberParameters->improperTorsionTerms, amberParameters->numberOfImproperTorsionTerms*sizeof(AmberImproperTorsionTerms)); rafreshListImpropers(-1); } /********************************************************************************/ static void deleteImproperDlg(GtkWidget *win,gpointer data) { gchar* t1; gchar* t2; gchar* t3; gchar* t4; gint number1; gint number2; gint number3; gint number4; gchar *format ="Do you want to really delete \"%s-%s-%s-%s\" terms ?" ; gchar *t; gint i = atoi(rowSelectedLists[MMNUMBERIMPROPER]); if(i<0) return; number1 = amberParameters->improperTorsionTerms[i].numbers[0]; number2 = amberParameters->improperTorsionTerms[i].numbers[1]; number3 = amberParameters->improperTorsionTerms[i].numbers[2]; number4 = amberParameters->improperTorsionTerms[i].numbers[3]; t1 = getType(amberParameters,number1); t2 = getType(amberParameters,number2); t3 = getType(amberParameters,number3); t4 = getType(amberParameters,number4); t =g_strdup_printf(format,t1,t2,t3,t4); if(i>-1) Continue_YesNo(deleteImproper, NULL,t); g_free(t); } /********************************************************************************/ static void deleteTorsion(GtkWidget *win, gpointer data) { gint Nc = atoi(rowSelectedLists[MMNUMBERTORSION]); gint i; gint j; gint k; gint len; if(Nc<0) return; getIndexTorsion(Nc,&i,&j); if(i<0) return; len = amberParameters->dihedralAngleTerms[i].nSomme; if(len == 1) { g_free(amberParameters->dihedralAngleTerms[i].divisor); g_free(amberParameters->dihedralAngleTerms[i].barrier); g_free(amberParameters->dihedralAngleTerms[i].phase); g_free(amberParameters->dihedralAngleTerms[i].n); len = amberParameters->numberOfDihedralTerms; for(k=i;kdihedralAngleTerms[k] = amberParameters->dihedralAngleTerms[k+1]; amberParameters->numberOfDihedralTerms--; if(amberParameters->numberOfDihedralTerms>0) amberParameters->dihedralAngleTerms = g_realloc(amberParameters->dihedralAngleTerms,amberParameters->numberOfDihedralTerms*sizeof(AmberDihedralAngleTerms)); } else { len = amberParameters->dihedralAngleTerms[i].nSomme; for(k=j;kdihedralAngleTerms[i].divisor[k] = amberParameters->dihedralAngleTerms[i].divisor[k+1]; amberParameters->dihedralAngleTerms[i].barrier[k] = amberParameters->dihedralAngleTerms[i].barrier[k+1]; amberParameters->dihedralAngleTerms[i].phase[k] = amberParameters->dihedralAngleTerms[i].phase[k+1]; amberParameters->dihedralAngleTerms[i].n[k] = amberParameters->dihedralAngleTerms[i].n[k+1]; } amberParameters->dihedralAngleTerms[i].nSomme--; len = amberParameters->dihedralAngleTerms[i].nSomme; amberParameters->dihedralAngleTerms[i].divisor = g_realloc(amberParameters->dihedralAngleTerms[i].divisor, len*sizeof(gdouble)); amberParameters->dihedralAngleTerms[i].barrier = g_realloc(amberParameters->dihedralAngleTerms[i].barrier, len*sizeof(gdouble)); amberParameters->dihedralAngleTerms[i].phase = g_realloc(amberParameters->dihedralAngleTerms[i].phase, len*sizeof(gdouble)); amberParameters->dihedralAngleTerms[i].n = g_realloc(amberParameters->dihedralAngleTerms[i].n, len*sizeof(gdouble)); } rafreshListTorsions(-1); } /********************************************************************************/ static void deleteTorsionDlg(GtkWidget *win,gpointer data) { gchar* t1; gchar* t2; gchar* t3; gchar* t4; gint Nc = atoi(rowSelectedLists[MMNUMBERTORSION]); gint number1; gint number2; gint number3; gint number4; gint i; gint j; gchar *format ="Do you want to really delete \"%s-%s-%s-%s\" torsion terms ?" ; gchar *t; if(Nc<0) return; getIndexTorsion(Nc,&i,&j); if(i<0) return; number1 = amberParameters->dihedralAngleTerms[i].numbers[0]; number2 = amberParameters->dihedralAngleTerms[i].numbers[1]; number3 = amberParameters->dihedralAngleTerms[i].numbers[2]; number4 = amberParameters->dihedralAngleTerms[i].numbers[3]; t1 = getType(amberParameters,number1); t2 = getType(amberParameters,number2); t3 = getType(amberParameters,number3); t4 = getType(amberParameters,number4); t =g_strdup_printf(format,t1,t2,t3,t4); if(i>-1) Continue_YesNo(deleteTorsion, NULL,t); g_free(t); } /********************************************************************************/ static void deleteBend(GtkWidget *win, gpointer data) { gint j = atoi(rowSelectedLists[MMNUMBERBEND]); gint i; if(j<0) return; for(i=j;inumberOfBendTerms-1;i++) { amberParameters->angleBendTerms[i] = amberParameters->angleBendTerms[i+1]; } amberParameters->numberOfBendTerms--; if(amberParameters->numberOfBendTerms>0) amberParameters->angleBendTerms= g_realloc( amberParameters->angleBendTerms, amberParameters->numberOfBendTerms*sizeof(AmberAngleBendTerms)); rafreshListBends(-1); } /********************************************************************************/ static void deleteBendDlg(GtkWidget *win,gpointer data) { gchar* t1; gchar* t2; gchar* t3; gint number1; gint number2; gint number3; gchar *format ="Do you want to really delete \"%s-%s-%s\" bend ?" ; gchar *t; gint i = atoi(rowSelectedLists[MMNUMBERBEND]); if(i<0) return; number1 = amberParameters->angleBendTerms[i].numbers[0]; number2 = amberParameters->angleBendTerms[i].numbers[1]; number3 = amberParameters->angleBendTerms[i].numbers[2]; t1 = getType(amberParameters,number1); t2 = getType(amberParameters,number2); t3 = getType(amberParameters,number3); t =g_strdup_printf(format,t1,t2,t3); if(i>-1) Continue_YesNo(deleteBend, NULL,t); g_free(t); } /********************************************************************************/ static void deleteBond(GtkWidget *win, gpointer data) { gint j = atoi(rowSelectedLists[MMNUMBERBOND]); gint i; if(j<0) return; for(i=j;inumberOfStretchTerms-1;i++) { amberParameters->bondStretchTerms[i] = amberParameters->bondStretchTerms[i+1]; } amberParameters->numberOfStretchTerms--; if(amberParameters->numberOfStretchTerms>0) amberParameters->bondStretchTerms = g_realloc( amberParameters->bondStretchTerms, amberParameters->numberOfStretchTerms*sizeof(AmberBondStretchTerms)); rafreshListBonds(-1); } /********************************************************************************/ static void deleteBondDlg(GtkWidget *win,gpointer data) { gchar* t1; gchar* t2; gint number1; gint number2; gchar *format ="Do you want to really delete \"%s-%s\" bond ?" ; gchar *t; gint i = atoi(rowSelectedLists[MMNUMBERBOND]); if(i<0) return; number1 = amberParameters->bondStretchTerms[i].numbers[0]; number2 = amberParameters->bondStretchTerms[i].numbers[1]; t1 = getType(amberParameters,number1); t2 = getType(amberParameters,number2); t =g_strdup_printf(format,t1,t2); if(i>-1) Continue_YesNo(deleteBond, NULL,t); g_free(t); } /********************************************************************************/ static void deleteType(GtkWidget *win, gpointer data) { gint j = atoi(rowSelectedLists[MMNUMBERTYPE]); gint number = amberParameters->atomTypes[j].number; gint i; j = -1; for(i=0;inumberOfTypes;i++) { if(number == amberParameters->atomTypes[i].number) { j = i; break; } } if(j<0) return; for(i=j;inumberOfTypes-1;i++) { amberParameters->atomTypes[i] = amberParameters->atomTypes[i+1]; } amberParameters->numberOfTypes--; if(amberParameters->numberOfTypes>0) amberParameters->atomTypes = g_realloc( amberParameters->atomTypes, amberParameters->numberOfTypes*sizeof(AmberAtomTypes)); rafreshListTypes(j); } /********************************************************************************/ static gboolean typeUsed(GtkWidget *win,gpointer data) { gint j = atoi(rowSelectedLists[MMNUMBERTYPE]); gint number = amberParameters->atomTypes[j].number; gint i; gboolean Ok = TRUE; for(i=0;inumberOfStretchTerms ;i++) { if( number == amberParameters->bondStretchTerms[i].numbers[0] || number == amberParameters->bondStretchTerms[i].numbers[1] ) { Ok = FALSE; break; } } if(Ok) for(i=0;inumberOfBendTerms;i++) { if( number == amberParameters->angleBendTerms[i].numbers[0] || number == amberParameters->angleBendTerms[i].numbers[1] || number == amberParameters->angleBendTerms[i].numbers[2] ) { Ok = FALSE; break; } } if(Ok) for(i=0;inumberOfDihedralTerms ;i++) { if( number == amberParameters->dihedralAngleTerms[i].numbers[0] || number == amberParameters->dihedralAngleTerms[i].numbers[1] || number == amberParameters->dihedralAngleTerms[i].numbers[2] || number == amberParameters->dihedralAngleTerms[i].numbers[3] ) { Ok = FALSE; break; } } if(Ok) for(i=0;inumberOfImproperTorsionTerms ;i++) { if( number == amberParameters->improperTorsionTerms[i].numbers[0] || number == amberParameters->improperTorsionTerms[i].numbers[1] || number == amberParameters->improperTorsionTerms[i].numbers[2] || number == amberParameters->improperTorsionTerms[i].numbers[3] ) { Ok = FALSE; break; } } if(Ok) for(i=0;inumberOfHydrogenBonded ;i++) { if( number == amberParameters->hydrogenBondedTerms[i].numbers[0] || number == amberParameters->hydrogenBondedTerms[i].numbers[1] ) { Ok = FALSE; break; } } if(Ok) for(i=0;inumberOfNonBonded;i++) { if( number == amberParameters->nonBondedTerms[i].number ) { Ok = FALSE; break; } } return !Ok; } /********************************************************************************/ static void deleteTypeDlg(GtkWidget *win,gpointer data) { gchar *format ="Do you want to really delete \"%s\" type ?" ; gint i = atoi(rowSelectedLists[MMNUMBERTYPE]); gchar* type = amberParameters->atomTypes[i].name; gchar *t =g_strdup_printf(format,type); if(!typeUsed(win,data)) Continue_YesNo(deleteType, NULL,t); else { GtkWidget* w; gchar* t = g_strdup_printf( "Sorry this type is used\nPlease delete all parameters for this type before" ); w = Message(t,"Warning",TRUE); gtk_window_set_modal (GTK_WINDOW (w), TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(SetWinDlg)); g_free(t); } } /********************************************************************************/ static void deleteDlg(GtkWidget *win,gpointer data) { gint nList = gtk_notebook_get_current_page(GTK_NOTEBOOK(NoteBook)); switch(nList) { case MMNUMBERTYPE : deleteTypeDlg(win,data); break; case MMNUMBERBOND : deleteBondDlg(win,data); break; case MMNUMBERBEND : deleteBendDlg(win,data); break; case MMNUMBERTORSION : deleteTorsionDlg(win,data); break; case MMNUMBERIMPROPER : deleteImproperDlg(win,data); break; case MMNUMBERHBOND : deleteHBondDlg(win,data); break; case MMNUMBERNONBONDED : deleteNonBondedDlg(win,data); break; case MMNUMBERPAIRWISE : deletePairWiseDlg(win,data); break; } } /********************************************************************************/ static void destroyDlg(GtkWidget *win,gpointer data) { gtk_widget_destroy(SetWinDlg); } /********************************************************************************/ GtkWidget * newMMList(GtkWidget *vbox,gint len, gchar** titles, gint* widths, GtkWidget* win) { GtkWidget *scr; gint i; gint widall=0; GtkWidget* list = NULL; GType* types = g_malloc(len*sizeof(GType)); GtkListStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; for(i=0;i #include /********************************************************************************/ static void reductionToTridiagonal(gdouble **A, gint n, gdouble *D, gdouble *E); static gint diagonalisationOfATridiagonalMatrix(gdouble *D, gdouble *E, gint n, gdouble **V); /********************************************************************************/ gint eigenQL(gint n, gdouble **M, gdouble *EVals, gdouble** V) { gdouble** A; gdouble* E; gint ii; gint success = 0; gint i; gint j; if(n<1) return 0; A = malloc(n*sizeof(gdouble*)); for(i=0;i= 1; i--) { l = i - 1; h = scale = 0.0; if (l > 0) { for (k = 0; k <= l; k++) scale += fabs(A[i][k]); if (scale == 0.0) E[i] = A[i][l]; else { for (k = 0; k <= l; k++) { A[i][k] /= scale; h += A[i][k] * A[i][k]; } f = A[i][l]; g = f > 0 ? -sqrt(h) : sqrt(h); E[i] = scale * g; h -= f * g; A[i][l] = f - g; f = 0.0; for (j = 0; j <= l; j++) { A[j][i] = A[i][j] / h; g = 0.0; for (k = 0; k <= j; k++) g += A[j][k] * A[i][k]; for (k = j + 1; k <= l; k++) g += A[k][j] * A[i][k]; E[j] = g / h; f += E[j] * A[i][j]; } hh = f / (h + h); for (j = 0; j <= l; j++) { f = A[i][j]; E[j] = g = E[j] - hh * f; for (k = 0; k <= j; k++) A[j][k] -= (f * E[k] + g * A[i][k]); } } } else E[i] = A[i][l]; D[i] = h; } D[0] = 0.0; E[0] = 0.0; for (i = 0; i < n; i++) { l = i - 1; if (D[i]) { for (j = 0; j <= l; j++) { g = 0.0; for (k = 0; k <= l; k++) g += A[i][k] * A[k][j]; for (k = 0; k <= l; k++) A[k][j] -= g * A[k][i]; } } D[i] = A[i][i]; A[i][i] = 1.0; for (j = 0; j <= l; j++) A[j][i] = A[i][j] = 0.0; } } #undef SIGN #define SIGN(A,B) ((B)<0 ? -fabs(A) : fabs(A)) /* QL algorithm to determine * the eigenvalues and eigenvectors of a real, symmetric, tridiagonal matrix.*/ /********************************************************************************/ static gint diagonalisationOfATridiagonalMatrix(gdouble *D, gdouble *E, gint n, gdouble **V) { gint m, l, iter, i, k; gdouble s, r, p, g, f, dd, c, b; for (i = 1; i < n; i++) E[i - 1] = E[i]; E[n-1] = 0.0; for (l = 0; l < n; l++) { iter = 0; do { for (m = l; m < n - 1; m++) { dd = fabs(D[m]) + fabs(D[m + 1]); if (fabs(E[m]) + dd == dd) break; } if (m != l) { if (iter++ == 30) return 0; g = (D[l + 1] - D[l]) / (2.0 * E[l]); r = sqrt((g*g) + 1.0); g = D[m] - D[l] + E[l] / (g + SIGN(r, g)); s = c = 1.0; p = 0.0; for (i = m - 1; i >= l; i--) { f = s * E[i]; b = c * E[i]; if (fabs(f) >= fabs(g)) { c = g / f; r = sqrt((c*c) + 1.0); E[i + 1] = f * r; c *= (s = 1.0 / r); } else { s = f / g; r = sqrt((s*s) + 1.0); E[i + 1] = g * r; s *= (c = 1.0 / r); } g = D[i + 1] - p; r = (D[i] - g) * s + 2.0 * c * b; p = s * r; D[i + 1] = g + p; g = c * r - b; for (k = 0; k < n; k++) { f = V[k][i + 1]; V[k][i + 1] = s * V[k][i] + c * f; V[k][i] = c * V[k][i] - s * f; } } D[l] = D[l] - p; E[l] = g; E[m] = 0.0; } } while (m != l); } return 1; } GabeditSrc250/src/Utils/PovrayUtils.c0000644000175100017510000002634713130665225020043 0ustar alloucheallouche/* PovrayUtils.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Common/Windows.h" typedef enum { SKY_WATER = 0, SKY_CHEKER, ROOM, BALCK, WHITE } TypeOfBackground; static gchar* types[] = {N_("sky & water"), N_("sky & cheker"), N_("room"), N_("black"), N_("white") }; static gint typeOfBackground[] = {SKY_WATER, SKY_CHEKER, ROOM, BALCK, WHITE }; static gint backgroundType = BALCK; static gint tmpBackgoundType = BALCK; /**************************************************************************************************************************************/ void applyPovrayOptions(GtkWidget *win, gpointer data) { backgroundType = tmpBackgoundType; } /**************************************************************************************************************************************/ static void activateRadioButton(GtkWidget *button, gpointer data) { gint* type = NULL; if(!GTK_IS_WIDGET(button)) return; type = g_object_get_data(G_OBJECT (button), "Type"); tmpBackgoundType = *type; } /**************************************************************************************************************************************/ static GtkWidget* addRadioButtonToATable(GtkWidget* table, GtkWidget* friendButton, gchar* label, gint i, gint j, gint k) { GtkWidget *newButton; if(friendButton) newButton = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (friendButton)), label); else newButton = gtk_radio_button_new_with_label( NULL, label); gtk_table_attach(GTK_TABLE(table),newButton,j,j+k,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT (newButton), "Type",NULL); return newButton; } /**************************************************************************************************************************************/ void createPOVBackgroundFrame(GtkWidget *box) { GtkWidget* button; GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget *table = gtk_table_new(5,2,TRUE); gint i; frame = gtk_frame_new (_("Type of background")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); button = NULL; for(i=0;i<=WHITE;i++) { button = addRadioButtonToATable(table, button, types[i], i, 0,2); g_object_set_data(G_OBJECT (button), "Type",&typeOfBackground[i]); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); if(backgroundType== typeOfBackground[i]) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); } tmpBackgoundType = backgroundType; } /****************************************************************************************************/ void createPovrayOptionsWindow(GtkWidget* win) { GtkWidget *dialogWindow = NULL; GtkWidget *button; GtkWidget *frame; GtkWidget *hbox; gchar title[BSIZE]; dialogWindow = gtk_dialog_new(); gtk_widget_realize(GTK_WIDGET(dialogWindow)); sprintf(title, _("Povray options")); gtk_window_set_title(GTK_WINDOW(dialogWindow),title); gtk_window_set_modal (GTK_WINDOW (dialogWindow), TRUE); gtk_window_set_position(GTK_WINDOW(dialogWindow),GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(dialogWindow), "delete_event", (GCallback)destroy_button_windows, NULL); g_signal_connect(G_OBJECT(dialogWindow), "delete_event", (GCallback)gtk_widget_destroy, NULL); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (GTK_WIDGET(GTK_DIALOG(dialogWindow)->vbox)), frame, TRUE, TRUE, 3); hbox = gtk_hbox_new (FALSE, 3); gtk_widget_show (hbox); gtk_container_add (GTK_CONTAINER (frame), hbox); createPOVBackgroundFrame(hbox); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(dialogWindow)->action_area), TRUE); button = create_button(dialogWindow,"Cancel"); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(dialogWindow)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)destroy_button_windows, GTK_OBJECT(dialogWindow)); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(dialogWindow)); button = create_button(dialogWindow,"OK"); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(dialogWindow)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)applyPovrayOptions, GTK_OBJECT(dialogWindow)); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)destroy_button_windows, GTK_OBJECT(dialogWindow)); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(dialogWindow)); add_button_windows(title,dialogWindow); gtk_widget_show_all(dialogWindow); if(GTK_IS_WIDGET(win)) gtk_window_set_transient_for(GTK_WINDOW(dialogWindow),GTK_WINDOW(win)); } /********************************************************************************/ static gchar *get_pov_sky() { gchar *temp; temp = g_strdup( "// Sky with white clouds \n" "object \n" "{\n" "\tsphere { <0, 0, 0> 200000}\n" "\ttexture {Blue_Sky scale <50000, 6000, 50000>}\n" "\tfinish { ambient 0.9 diffuse 0.0 }\n" "}\n" ); return temp; } /********************************************************************************/ static gchar *get_pov_water(gdouble x, gdouble y, gdouble z, gdouble scale) { gchar *temp; temp = g_strdup_printf( "// water\n" "plane \n" "{\n" "\t<%f, %f, %f>,%f\n" "\ttexture\n" "\t{\n" "\t\tpigment{ rgb <0.2, 0.2, 0.2> }\n" "\t\tnormal { bumps 0.08 scale <1,0.25,0.35>*1 turbulence 0.6 }\n" "\t\tfinish { ambient 0.05 diffuse 0.55 brilliance 6.0 phong 0.8 phong_size 120 reflection 0.6 }\n" "\t}\n" "}\n", x, y, z, scale ); return temp; } /********************************************************************************/ static gchar *get_pov_checker(gdouble x, gdouble y, gdouble z, gdouble scale) { gchar *temp; temp = g_strdup_printf( "// checker\n" "plane \n" "{\n" "\t<%f, %f, %f>,%f\n" "\thollow on\n" "\tpigment { checker rgb <1,0,0>, rgb <1,1,0> scale 10 }\n" "\tfinish { ambient 0.3 diffuse 0.4 }\n" "}\n", x, y, z, scale ); return temp; } /********************************************************************************/ static gchar *get_pov_hexagon(gdouble x, gdouble y, gdouble z, gdouble scale) { gchar *temp; temp = g_strdup_printf( "// Hexagon\n" "plane \n" "{\n" "\t<%f, %f, %f>,%f\n" "\tpigment { hexagon rgb <0.5,0.5,0.5>, rgb <0,0,0>, rgb <1,1,1> scale 5}\n" "\tfinish { ambient 0.3 diffuse 0.4 }\n" "}\n", x, y, z, scale ); return temp; } /********************************************************************************/ static gchar *get_pov_stone(gdouble x, gdouble y, gdouble z, gdouble scale, gint numStone) { gchar *temp; temp = g_strdup_printf( "// Stone\n" "plane \n" "{\n" "\t<%f, %f, %f>,%f\n" "\ttexture {T_Stone%d}\n" "\tfinish { ambient 0.5 diffuse 0.4 }\n" "}\n", x, y, z, scale, numStone ); return temp; } /********************************************************************************/ static gchar *get_pov_backgrond_unicolor(gdouble red, gdouble green, gdouble blue) { gchar *temp; temp = g_strdup_printf( "// BACKGROUND \n" "background \n" "{\n" "\tcolor rgb < %f, %f, %f >\n" "}\n", red, green, blue ); return temp; } /********************************************************************************/ static gchar *get_pov_sky_water(gdouble x, gdouble y, gdouble z, gdouble scale) { gchar *temp = NULL; gchar *sky; gchar *water; sky = get_pov_sky(); water = get_pov_water(x, y, z, scale); if(sky) { temp = g_strdup(sky); g_free(sky); } if(water) { gchar* dump; dump =temp; temp = g_strdup_printf("%s%s",dump,water); g_free(dump); g_free(water); } return temp; } /********************************************************************************/ static gchar *get_pov_sky_checker(gdouble x, gdouble y, gdouble z, gdouble scale) { gchar *temp = NULL; gchar *sky; gchar *checker; sky = get_pov_sky(); checker = get_pov_checker(x, y, z, scale); if(sky) { temp = g_strdup(sky); g_free(sky); } if(checker) { gchar* dump; dump =temp; temp = g_strdup_printf("%s%s",dump,checker); g_free(dump); g_free(checker); } return temp; } /********************************************************************************/ static gchar *get_pov_cube(gdouble xScale, gdouble yScale, gdouble zScale) { gchar *temp = NULL; gchar *bottom; gchar *left; gchar *ground; bottom = get_pov_hexagon(0, 1, 0, yScale); if(bottom) { temp = g_strdup(bottom); g_free(bottom); } left = get_pov_stone(1, 0, 0, xScale*2,21); if(left) { gchar* dump; dump =temp; temp = g_strdup_printf("%s%s",dump,left); g_free(dump); g_free(left); } ground = get_pov_stone(0, 0, 1, zScale*8,21); if(ground) { gchar* dump; dump =temp; temp = g_strdup_printf("%s%s",dump,ground); g_free(dump); g_free(ground); } return temp; } /********************************************************************************/ gchar *get_pov_background(gdouble xScale, gdouble yScale, gdouble zScale) { switch(backgroundType) { case SKY_WATER : return get_pov_sky_water(0,1,0, yScale); case SKY_CHEKER : return get_pov_sky_checker(0, 1, 0, yScale); case ROOM : return get_pov_cube(xScale, yScale, zScale); case BALCK : return get_pov_backgrond_unicolor(0,0,0); case WHITE :return get_pov_backgrond_unicolor(1,1,1); default: return NULL; } } /********************************************************************************/ GabeditSrc250/src/Utils/Matrix3D.h0000644000175100017510000000337113130665225017172 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MATRIX3D_H__ #define __GABEDIT_MATRIX3D_H__ void ScalMat3D(gdouble** M, gdouble f); void ScalMat3D_3(gdouble** M, gdouble fx,gdouble fy, gdouble fz); void TranslatMat3D(gdouble** M, gdouble x,gdouble y, gdouble z); void RotMat3D(gdouble** M,gdouble theta,gint iaxe); void UnitMat3D(gdouble** M); void TransformMat3D(gdouble** M,gdouble** v, int nvert); void InverseTransformMat3D(gdouble** M,gdouble** v, int nvert); #endif /* __GABEDIT_MATRIX3D_H__ */ GabeditSrc250/src/Utils/Point3D.c0000644000175100017510000002063213130665225017011 0ustar alloucheallouche/* Point3D.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "../Common/Global.h" #include "../Utils/Point3D.h" /************************************************************************************************************/ static gdouble length(Point3D* p); static gboolean unit(Point3D* p); static Point3D add(Point3D* p, Point3D* other); static Point3D sub(Point3D* p, Point3D* other); static Point3D mult(Point3D* p, gdouble factor); static Point3D crossProd(Point3D* p, Point3D* other); static gdouble dotProd(Point3D* p, Point3D* other); static gdouble distance(Point3D* p, Point3D* other); static gdouble angleBetween(Point3D* p, Point3D* other); static Point3D rotate(Point3D* p, Point3D* rotCenter, Point3D* rotateAxis, gdouble angle); static gboolean equals(Point3D* p, Point3D* other); static Point3D closestPointInPlane(Point3D* point, Point3D* planePoint, Point3D* normal); static Point3D closestPointOnAxis(Point3D* point, Point3D* axisPoint, Point3D* paxis); static gchar* toString(Point3D* p); static Point3D* copy(Point3D* p); static Point3D* copyPoint(Point3D p); /************************************************************************************************************/ Point3D newPoint3D() { Point3D p; p.x = 0; p.y = 0; p.z = 0; sprintf(p.str," "); p.length = length; p.unit = unit; p.add = add; p.sub = sub; p.mult = mult; p.copy = copy; p.copyPoint = copyPoint; p.crossProd = crossProd; p.dotProd = dotProd; p.angleBetween = angleBetween; p.rotate = rotate; p.equals = equals; p.closestPointInPlane = closestPointInPlane; p.closestPointOnAxis = closestPointOnAxis; p.distance = distance; p.toString = toString; return p; }; /************************************************************************************************************/ Point3D newPoint3Dxyz(gdouble x, gdouble y, gdouble z) { Point3D p = newPoint3D(); p.x = x; p.y = y; p.z = z; return p; } /************************************************************************************************************/ static gdouble length(Point3D* p) { return sqrt(p->x*p->x + p->y*p->y + p->z*p->z); } /************************************************************************************************************/ static gboolean unit(Point3D* p) { gdouble len = length(p); if(len != 0) { p->x /= len; p->y /= len; p->z /= len; return TRUE; } return FALSE; } /************************************************************************************************************/ static Point3D add(Point3D* p, Point3D* other) { return newPoint3Dxyz(p->x + other->x, p->y + other->y, p->z + other->z); } /************************************************************************************************************/ static Point3D sub(Point3D* p, Point3D* other) { return newPoint3Dxyz(p->x - other->x, p->y - other->y, p->z - other->z); } /************************************************************************************************************/ static Point3D mult(Point3D* p, gdouble factor) { return newPoint3Dxyz(p->x *factor, p->y * factor, p->z * factor); } /************************************************************************************************************/ static Point3D crossProd(Point3D* p, Point3D* other) { Point3D result = newPoint3D(); result.x = other->z*p->y - other->y*p->z; result.y = other->x*p->z - other->z*p->x; result.z = other->y*p->x - other->x*p->y; return result; } /************************************************************************************************************/ static Point3D* copy(Point3D* p) { Point3D* newP = g_malloc(sizeof(Point3D)); *newP = *p; return newP; } /************************************************************************************************************/ static Point3D* copyPoint(Point3D p) { return copy(&p); } /************************************************************************************************************/ static gdouble dotProd(Point3D* p, Point3D* other) { return other->x*p->x + other->y*p->y + other->z*p->z; } /************************************************************************************************************/ static gdouble distance(Point3D* p, Point3D* other) { gdouble dx = other->x-p->x; gdouble dy = other->y-p->y; gdouble dz = other->z-p->z; return sqrt(dx*dx+dy*dy+dz*dz); } /************************************************************************************************************/ static gdouble angleBetween(Point3D* p, Point3D* other) { return acos(dotProd(p,other)/(length(p)*length(other))); } /************************************************************************************************************/ static Point3D rotate(Point3D* p, Point3D* rotCenter, Point3D* rotateAxis, gdouble angle) { Point3D oldCoords = *p; Point3D newCoords = newPoint3D(); Point3D rotAxis = *rotateAxis; unit(&rotAxis); oldCoords = sub(&oldCoords, rotCenter); gdouble c = cos(angle); gdouble s = sin(angle); gdouble m[4][4]; m[0][0] = c + (1 - c) * rotAxis.x * rotAxis.x; m[0][1] = (1 - c) * rotAxis.x * rotAxis.y - s * rotAxis.z; m[0][2] = (1 - c) * rotAxis.x * rotAxis.z + s * rotAxis.y; m[1][0] = (1 - c) * rotAxis.x * rotAxis.y + s * rotAxis.z; m[1][1] = c + (1 - c) * rotAxis.y * rotAxis.y; m[1][2] = (1 - c) * rotAxis.z * rotAxis.y - s * rotAxis.x; m[2][0] = (1 - c) * rotAxis.x * rotAxis.z - s * rotAxis.y; m[2][1] = (1 - c) * rotAxis.y * rotAxis.z + s * rotAxis.x; m[2][2] = c + (1 - c) * rotAxis.z * rotAxis.z; newCoords.x = m[0][0]*oldCoords.x + m[0][1]*oldCoords.y + m[0][2]*oldCoords.z; newCoords.y = m[1][0]*oldCoords.x + m[1][1]*oldCoords.y + m[1][2]*oldCoords.z; newCoords.z = m[2][0]*oldCoords.x + m[2][1]*oldCoords.y + m[2][2]*oldCoords.z; newCoords = add(&newCoords, rotCenter); return newCoords; } /************************************************************************************************************/ static gboolean equals(Point3D* p, Point3D* other) { if( !p || !other) return FALSE; if(distance(p, other) < 0.00001) return TRUE; return FALSE; } /************************************************************************************************************/ static Point3D closestPointInPlane(Point3D* point, Point3D* planePoint, Point3D* normal) { gdouble d = -(normal->x * planePoint->x + normal->y * planePoint->y + normal->z * planePoint->z); gdouble t = -((normal->x * point->x + normal->y * point->y + normal->z * point->z + d)/ (normal->x*normal->x + normal->y*normal->y + normal->z*normal->z)); return newPoint3Dxyz(point->x + normal->x * t, point->y + normal->y * t, point->z + normal->z*t); } /************************************************************************************************************/ static Point3D closestPointOnAxis(Point3D* point, Point3D* axisPoint, Point3D* paxis) { Point3D axis = newPoint3Dxyz(paxis->x, paxis->y, paxis->z); unit(&axis); Point3D s = sub(point,axisPoint); Point3D m = mult(&axis, dotProd(&s,&axis)); return add(axisPoint, &m); } /************************************************************************************************************/ static gchar* toString(Point3D* point) { sprintf(point->str,"(%f, %f, %f)", point->x, point->y, point->z); return point->str; } GabeditSrc250/src/Utils/AtomsProp.c0000644000175100017510000022040613130665225017456 0ustar alloucheallouche/* AtomsProp.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Geometry/GeomGlobal.h" #include "../Display/GLArea.h" #include "../Common/Windows.h" #define NATOMS 112 enum { DISPLAY_RADII = 0, COVALENT_RADII, VANDERWALS_RADII, MAXIMUM_BOND_VALENCE, MASSE, ELECTRONEGATIVITY, NUMBER_OF_ENTRYS, }; /******************************************************************/ typedef struct _SData { gchar *Symb; GtkWidget *Window; GtkWidget *Button; GtkStyle *Style; }SData; /******************************************************************/ static SAtomsProp AtomsProp[NATOMS]; static GtkWidget *EntryProp[NUMBER_OF_ENTRYS]; static GtkWidget *listIsotopes = NULL; GdkColor ColorTemp; /********************************************************************************/ void save_atoms_prop() { guint i; guint j; gchar *atomspropfile; FILE *fd; atomspropfile = g_strdup_printf("%s/atomsprop",gabedit_directory()); fd = FOpen(atomspropfile, "w"); if(fd==NULL) return; for(i=0;i1) symb[1]=tolower(symbol[1]); if(l>2) symb[2]=tolower(symbol[1]); symb[l] = '\0'; for(i=0;iname) g_free(prop->name); if(prop->symbol) g_free(prop->symbol); } /********************************************************************************/ SAtomsProp prop_atom_get(const gchar *Symb) { guint i; guint j; SAtomsProp temp; for(i=0;i=NATOMS) return; if(i<0) return; if(strcmp(symbol,"Xx")==0) return; if(strcmp(symbol,"X")==0) return; if(i>=109) return; if(AtomsProp[i].nIsotopes>= MAXISOTOP) return; j = AtomsProp[i].nIsotopes; AtomsProp[i].nIsotopes++; AtomsProp[i].iMass[j] = iMass; AtomsProp[i].rMass[j] = rMass; AtomsProp[i].abundances[j] = abundance; if(j==0) AtomsProp[i].masse = rMass; } /******************************************************************/ void setPropForOneAtom(gchar* name, gchar* symbol, gint atomicNumber, gdouble covalentRadii, gdouble bondOrderRadii, gdouble vanDerWaalsRadii, gint maximumBondValence, gdouble masse, gdouble electronegativity, gdouble red, gdouble green, gdouble blue) { gint i = (gint)atomicNumber-1; if(strcmp(symbol,"Xx")==0) i = 109; if(strcmp(symbol,"X")==0) i = 110; AtomsProp[i].name = g_strdup(name); AtomsProp[i].symbol = g_strdup(symbol); AtomsProp[i].atomicNumber = atomicNumber; AtomsProp[i].covalentRadii = (covalentRadii+0.2)*ANG_TO_BOHR; AtomsProp[i].bondOrderRadii = bondOrderRadii*ANG_TO_BOHR; AtomsProp[i].vanDerWaalsRadii = vanDerWaalsRadii*ANG_TO_BOHR; /*AtomsProp[i].radii = covalentRadii/1.5*ANG_TO_BOHR;*/ AtomsProp[i].radii = vanDerWaalsRadii*0.2*ANG_TO_BOHR; AtomsProp[i].maximumBondValence = maximumBondValence; AtomsProp[i].masse = masse; AtomsProp[i].electronegativity = electronegativity/27.21; AtomsProp[i].color.red = (gushort)(red*65535); AtomsProp[i].color.green = (gushort)(green*65535); AtomsProp[i].color.blue = (gushort)(blue*65535); AtomsProp[i].nIsotopes = 0; } /******************************************************************/ void define_default_atoms_prop() { setPropForOneAtom("Hydrogen", "H", 1, 0.230000, 0.330000, 1.200000, 1, 1.007940, 2.100000, 1.000000, 1.000000, 1.000000); setPropForOneAtom("Helium", "He", 2, 0.930000, 0.700000, 1.400000, 0, 4.002602, 0.000000, 0.850000, 1.000000, 1.000000); setPropForOneAtom("Lithium", "Li", 3, 0.680000, 1.230000, 1.820000, 1, 6.941000, 0.980000, 0.800000, 0.500000, 1.000000); setPropForOneAtom("Beryllium", "Be", 4, 0.350000, 0.900000, 1.700000, 2, 9.012182, 1.570000, 0.760000, 1.000000, 0.000000); setPropForOneAtom("Boron", "B", 5, 0.830000, 0.820000, 2.080000, 3, 10.811000, 2.040000, 1.000000, 0.710000, 0.710000); setPropForOneAtom("Carbon", "C", 6, 0.680000, 0.770000, 1.950000, 4, 12.010700, 2.550000, 0.500000, 0.500000, 0.500000); setPropForOneAtom("Nitrogen", "N", 7, 0.680000, 0.700000, 1.850000, 3, 14.006700, 3.040000, 0.050000, 0.050000, 1.000000); setPropForOneAtom("Oxygen", "O", 8, 0.680000, 0.660000, 1.700000, 2, 15.999400, 3.440000, 1.000000, 0.050000, 0.050000); setPropForOneAtom("Fluorine", "F", 9, 0.640000, 0.611000, 1.730000, 1, 18.998404, 3.980000, 0.700000, 1.000000, 1.000000); setPropForOneAtom("Neon", "Ne", 10, 1.120000, 0.700000, 1.540000, 0, 20.179701, 0.000000, 0.700000, 0.890000, 0.960000); /* setPropForOneAtom("Sodium", "Na", 11, 0.970000, 1.540000, 2.270000, 1, 22.989771, 0.930000, 0.670000, 0.360000, 0.950000); */ setPropForOneAtom("Sodium", "Na", 11, 1.9, 3.06, 2.270000, 1, 22.989771, 0.930000, 0.670000, 0.360000, 0.950000); AtomsProp[10].radii /= 2; setPropForOneAtom("Magnesium", "Mg", 12, 1.100000, 1.360000, 1.730000, 2, 24.305000, 1.310000, 0.540000, 1.000000, 0.000000); setPropForOneAtom("Aluminium", "Al", 13, 1.350000, 1.180000, 2.050000, 6, 26.981539, 1.610000, 0.750000, 0.650000, 0.650000); setPropForOneAtom("Silicon", "Si", 14, 1.200000, 0.937000, 2.100000, 6, 28.085501, 1.900000, 0.500000, 0.600000, 0.600000); setPropForOneAtom("Phosphorus", "P", 15, 1.100000, 0.890000, 2.080000, 5, 30.973761, 2.190000, 1.000000, 0.500000, 0.000000); setPropForOneAtom("Sulphur", "S", 16, 1.020000, 1.040000, 2.000000, 4, 32.064999, 2.580000, 1.000000, 1.000000, 0.190000); setPropForOneAtom("Chlorine", "Cl", 17, 0.990000, 0.997000, 1.970000, 1, 35.452999, 3.160000, 0.120000, 0.940000, 0.120000); setPropForOneAtom("Argon", "Ar", 18, 1.570000, 1.740000, 1.880000, 0, 39.948002, 0.000000, 0.500000, 0.820000, 0.890000); setPropForOneAtom("Potassium", "K", 19, 1.330000, 2.030000, 2.750000, 1, 39.098301, 0.820000, 0.560000, 0.250000, 0.830000); setPropForOneAtom("Calcium", "Ca", 20, 0.990000, 1.740000, 1.973000, 2, 40.077999, 1.000000, 0.240000, 1.000000, 0.000000); setPropForOneAtom("Scandium", "Sc", 21, 1.440000, 1.440000, 1.700000, 6, 44.955910, 1.360000, 0.900000, 0.900000, 0.900000); setPropForOneAtom("Titanium", "Ti", 22, 1.470000, 1.320000, 1.700000, 6, 47.867001, 1.540000, 0.750000, 0.760000, 0.780000); setPropForOneAtom("Vanadium", "V", 23, 1.330000, 1.220000, 1.700000, 6, 50.941502, 1.630000, 0.650000, 0.650000, 0.670000); setPropForOneAtom("Chromium", "Cr", 24, 1.350000, 1.180000, 1.700000, 6, 51.996101, 1.660000, 0.540000, 0.600000, 0.780000); setPropForOneAtom("Manganese", "Mn", 25, 1.350000, 1.170000, 1.700000, 8, 54.938049, 1.550000, 0.610000, 0.480000, 0.780000); setPropForOneAtom("Iron", "Fe", 26, 1.340000, 1.170000, 1.700000, 6, 55.845001, 1.830000, 0.500000, 0.480000, 0.780000); setPropForOneAtom("Cobalt", "Co", 27, 1.330000, 1.160000, 1.700000, 6, 58.933201, 1.880000, 0.440000, 0.480000, 0.780000); setPropForOneAtom("Nickel", "Ni", 28, 1.500000, 1.150000, 1.630000, 6, 58.693401, 1.910000, 0.360000, 0.480000, 0.760000); setPropForOneAtom("Copper", "Cu", 29, 1.520000, 1.170000, 1.400000, 6, 63.546001, 1.900000, 1.000000, 0.480000, 0.380000); setPropForOneAtom("Zinc", "Zn", 30, 1.450000, 1.250000, 1.390000, 6, 65.408997, 1.650000, 0.490000, 0.500000, 0.690000); setPropForOneAtom("Gallium", "Ga", 31, 1.220000, 1.260000, 1.870000, 3, 69.723000, 1.810000, 0.760000, 0.560000, 0.560000); setPropForOneAtom("Germanium", "Ge", 32, 1.170000, 1.188000, 1.700000, 4, 72.639999, 2.010000, 0.400000, 0.560000, 0.560000); setPropForOneAtom("Arsenic", "As", 33, 1.210000, 1.200000, 1.850000, 3, 74.921600, 2.180000, 0.740000, 0.500000, 0.890000); setPropForOneAtom("Selenium", "Se", 34, 1.220000, 1.170000, 1.900000, 2, 78.959999, 2.550000, 1.000000, 0.630000, 0.000000); setPropForOneAtom("Bromine", "Br", 35, 1.210000, 1.167000, 2.100000, 1, 79.903999, 2.960000, 0.650000, 0.160000, 0.160000); setPropForOneAtom("Krypton", "Kr", 36, 1.910000, 1.910000, 2.020000, 0, 83.797997, 0.000000, 0.360000, 0.720000, 0.820000); setPropForOneAtom("Rubidium", "Rb", 37, 1.470000, 2.160000, 1.700000, 1, 85.467796, 0.820000, 0.440000, 0.180000, 0.690000); setPropForOneAtom("Strontium", "Sr", 38, 1.120000, 1.910000, 1.700000, 2, 87.620003, 0.950000, 0.000000, 1.000000, 0.000000); setPropForOneAtom("Yttrium", "Y", 39, 1.780000, 1.620000, 1.700000, 6, 88.905853, 1.220000, 0.580000, 1.000000, 1.000000); setPropForOneAtom("Zirconium", "Zr", 40, 1.560000, 1.450000, 1.700000, 6, 91.223999, 1.330000, 0.580000, 0.880000, 0.880000); setPropForOneAtom("Niobium", "Nb", 41, 1.480000, 1.340000, 1.700000, 6, 92.906380, 1.600000, 0.450000, 0.760000, 0.790000); setPropForOneAtom("Molybdenum", "Mo", 42, 1.470000, 1.300000, 1.700000, 6, 95.940002, 2.160000, 0.330000, 0.710000, 0.710000); setPropForOneAtom("Technetium", "Tc", 43, 1.350000, 1.270000, 1.700000, 6, 98.000000, 1.900000, 0.230000, 0.620000, 0.620000); setPropForOneAtom("Ruthenium", "Ru", 44, 1.400000, 1.250000, 1.700000, 6, 101.070000, 2.200000, 0.140000, 0.560000, 0.560000); setPropForOneAtom("Rhodium", "Rh", 45, 1.450000, 1.250000, 1.700000, 6, 102.905502, 2.280000, 0.040000, 0.490000, 0.550000); setPropForOneAtom("Palladium", "Pd", 46, 1.500000, 1.280000, 1.630000, 6, 106.419998, 2.200000, 0.000000, 0.410000, 0.520000); setPropForOneAtom("Silver", "Ag", 47, 1.590000, 1.340000, 1.720000, 6, 107.868202, 1.930000, 0.880000, 0.880000, 1.000000); setPropForOneAtom("Cadmium", "Cd", 48, 1.690000, 1.480000, 1.580000, 6, 112.411003, 1.690000, 1.000000, 0.850000, 0.560000); setPropForOneAtom("Indium", "In", 49, 1.630000, 1.440000, 1.930000, 3, 114.818001, 1.780000, 0.650000, 0.460000, 0.450000); setPropForOneAtom("Tin", "Sn", 50, 1.460000, 1.385000, 2.170000, 4, 118.709999, 1.960000, 0.400000, 0.500000, 0.500000); setPropForOneAtom("Antimony", "Sb", 51, 1.460000, 1.400000, 2.200000, 3, 121.760002, 2.050000, 0.620000, 0.390000, 0.710000); setPropForOneAtom("Tellurium", "Te", 52, 1.470000, 1.378000, 2.060000, 2, 127.599998, 2.100000, 0.830000, 0.480000, 0.000000); setPropForOneAtom("Iodine", "I", 53, 1.400000, 1.387000, 2.150000, 1, 126.904472, 2.660000, 0.580000, 0.000000, 0.580000); setPropForOneAtom("Xenon", "Xe", 54, 1.980000, 1.980000, 2.160000, 0, 131.292999, 2.600000, 0.260000, 0.620000, 0.690000); setPropForOneAtom("Cesium", "Cs", 55, 1.670000, 2.350000, 1.700000, 1, 132.905457, 0.790000, 0.340000, 0.090000, 0.560000); setPropForOneAtom("Barium", "Ba", 56, 1.340000, 1.980000, 1.700000, 2, 137.326996, 0.890000, 0.000000, 0.790000, 0.000000); setPropForOneAtom("Lanthanum", "La", 57, 1.870000, 1.690000, 1.700000, 12, 138.905502, 1.100000, 0.440000, 0.830000, 1.000000); setPropForOneAtom("Cerium", "Ce", 58, 1.830000, 1.830000, 1.700000, 6, 140.115997, 1.120000, 1.000000, 1.000000, 0.780000); setPropForOneAtom("Praseodymium", "Pr", 59, 1.820000, 1.820000, 1.700000, 6, 140.907654, 1.130000, 0.850000, 1.000000, 0.780000); setPropForOneAtom("Neodymium", "Nd", 60, 1.810000, 1.810000, 1.700000, 6, 144.240005, 1.140000, 0.780000, 1.000000, 0.780000); setPropForOneAtom("Promethium", "Pm", 61, 1.800000, 1.800000, 1.700000, 6, 145.000000, 1.130000, 0.640000, 1.000000, 0.780000); setPropForOneAtom("Samarium", "Sm", 62, 1.800000, 1.800000, 1.700000, 6, 150.360001, 1.170000, 0.560000, 1.000000, 0.780000); setPropForOneAtom("Europium", "Eu", 63, 1.990000, 1.990000, 1.700000, 6, 151.964005, 1.200000, 0.380000, 1.000000, 0.780000); setPropForOneAtom("Gadolinium", "Gd", 64, 1.790000, 1.790000, 1.700000, 6, 157.250000, 1.200000, 0.270000, 1.000000, 0.780000); setPropForOneAtom("Terbium", "Tb", 65, 1.760000, 1.760000, 1.700000, 6, 158.925339, 1.100000, 0.190000, 1.000000, 0.780000); setPropForOneAtom("Dysprosium", "Dy", 66, 1.750000, 1.750000, 1.700000, 6, 162.500000, 1.220000, 0.120000, 1.000000, 0.780000); setPropForOneAtom("Holmium", "Ho", 67, 1.740000, 1.740000, 1.700000, 6, 164.930313, 1.230000, 0.000000, 1.000000, 0.610000); setPropForOneAtom("Erbium", "Er", 68, 1.730000, 1.730000, 1.700000, 6, 167.259003, 1.240000, 0.000000, 0.900000, 0.460000); setPropForOneAtom("Thulium", "Tm", 69, 1.720000, 1.720000, 1.700000, 6, 168.934204, 1.250000, 0.000000, 0.830000, 0.320000); setPropForOneAtom("Ytterbium", "Yb", 70, 1.940000, 1.940000, 1.700000, 6, 173.039993, 1.100000, 0.000000, 0.750000, 0.220000); setPropForOneAtom("Lutetium", "Lu", 71, 1.720000, 1.720000, 1.700000, 6, 174.966995, 1.270000, 0.000000, 0.670000, 0.140000); setPropForOneAtom("Hafnium", "Hf", 72, 1.570000, 1.440000, 1.700000, 6, 178.490005, 1.300000, 0.300000, 0.760000, 1.000000); setPropForOneAtom("Tantalum", "Ta", 73, 1.430000, 1.340000, 1.700000, 6, 180.947906, 1.500000, 0.300000, 0.650000, 1.000000); setPropForOneAtom("Tungsten", "W", 74, 1.370000, 1.300000, 1.700000, 6, 183.839996, 2.360000, 0.130000, 0.580000, 0.840000); setPropForOneAtom("Rhenium", "Re", 75, 1.350000, 1.280000, 1.700000, 6, 186.207001, 1.900000, 0.150000, 0.490000, 0.670000); setPropForOneAtom("Osmium", "Os", 76, 1.370000, 1.260000, 1.700000, 6, 190.229996, 2.200000, 0.150000, 0.400000, 0.590000); setPropForOneAtom("Iridium", "Ir", 77, 1.320000, 1.270000, 1.700000, 6, 192.216995, 2.200000, 0.090000, 0.330000, 0.530000); setPropForOneAtom("Platinum", "Pt", 78, 1.500000, 1.300000, 1.720000, 6, 195.078003, 2.280000, 0.960000, 0.930000, 0.820000); setPropForOneAtom("Gold", "Au", 79, 1.500000, 1.340000, 1.660000, 6, 196.966553, 2.540000, 0.800000, 0.820000, 0.120000); setPropForOneAtom("Mercury", "Hg", 80, 1.700000, 1.490000, 1.550000, 6, 200.589996, 2.000000, 0.710000, 0.710000, 0.760000); setPropForOneAtom("Thallium", "Tl", 81, 1.550000, 1.480000, 1.960000, 3, 204.383301, 2.040000, 0.650000, 0.330000, 0.300000); setPropForOneAtom("Lead", "Pb", 82, 1.540000, 1.480000, 2.020000, 4, 207.199997, 2.330000, 0.340000, 0.350000, 0.380000); setPropForOneAtom("Bismuth", "Bi", 83, 1.540000, 1.450000, 1.700000, 3, 208.980377, 2.020000, 0.620000, 0.310000, 0.710000); setPropForOneAtom("Polonium", "Po", 84, 1.680000, 1.460000, 1.700000, 2, 209.000000, 2.000000, 0.670000, 0.360000, 0.000000); setPropForOneAtom("Astatine", "At", 85, 1.700000, 1.450000, 1.700000, 1, 210.000000, 2.200000, 0.460000, 0.310000, 0.270000); setPropForOneAtom("Radon", "Rn", 86, 2.400000, 2.400000, 1.700000, 0, 222.000000, 0.000000, 0.260000, 0.510000, 0.590000); setPropForOneAtom("Francium", "Fr", 87, 2.000000, 2.000000, 1.700000, 1, 223.000000, 0.700000, 0.260000, 0.000000, 0.400000); setPropForOneAtom(" radium", "Ra", 88, 1.900000, 1.900000, 1.700000, 2, 226.000000, 0.890000, 0.000000, 0.490000, 0.000000); setPropForOneAtom("Actinium", "Ac", 89, 1.880000, 1.880000, 1.700000, 6, 227.000000, 1.100000, 0.440000, 0.670000, 0.980000); setPropForOneAtom("Thorium", "Th", 90, 1.790000, 1.790000, 1.700000, 6, 232.038101, 1.300000, 0.000000, 0.730000, 1.000000); setPropForOneAtom("Protactinium", "Pa", 91, 1.610000, 1.610000, 1.700000, 6, 231.035873, 1.500000, 0.000000, 0.630000, 1.000000); setPropForOneAtom("Uranium", "U", 92, 1.580000, 1.580000, 1.860000, 6, 238.028915, 1.380000, 0.000000, 0.560000, 1.000000); setPropForOneAtom("Neptunium", "Np", 93, 1.550000, 1.550000, 1.700000, 6, 237.000000, 1.360000, 0.000000, 0.500000, 1.000000); setPropForOneAtom("Plutionium", "Pu", 94, 1.530000, 1.530000, 1.700000, 6, 244.000000, 1.280000, 0.000000, 0.420000, 1.000000); setPropForOneAtom("Americium", "Am", 95, 1.510000, 1.070000, 1.700000, 6, 243.000000, 1.300000, 0.330000, 0.360000, 0.950000); setPropForOneAtom("Curium", "Cm", 96, 1.500000, 0.000000, 1.700000, 6, 247.000000, 1.300000, 0.470000, 0.360000, 0.890000); setPropForOneAtom("Berkelium", "Bk", 97, 1.500000, 0.000000, 1.700000, 6, 247.000000, 1.300000, 0.540000, 0.310000, 0.890000); setPropForOneAtom("Californium", "Cf", 98, 1.500000, 0.000000, 1.700000, 6, 251.000000, 1.300000, 0.630000, 0.210000, 0.830000); setPropForOneAtom("Einsteinium", "Es", 99, 1.500000, 0.000000, 1.700000, 6, 252.000000, 1.300000, 0.700000, 0.120000, 0.830000); setPropForOneAtom("Fermium", "Fm", 100, 1.500000, 0.000000, 1.700000, 6, 257.000000, 1.300000, 0.700000, 0.120000, 0.730000); setPropForOneAtom("Mendelevium", "Md", 101, 1.500000, 0.000000, 1.700000, 6, 258.000000, 1.300000, 0.700000, 0.050000, 0.650000); setPropForOneAtom("Nobelium", "No", 102, 1.500000, 0.000000, 1.700000, 6, 259.000000, 1.300000, 0.740000, 0.050000, 0.530000); setPropForOneAtom("Lawrencium", "Lr", 103, 1.500000, 0.000000, 1.700000, 6, 262.000000, 1.300000, 0.780000, 0.000000, 0.400000); setPropForOneAtom("Rutherfordium", "Rf", 104, 1.600000, 0.000000, 1.700000, 6, 261.000000, 0.000000, 0.800000, 0.000000, 0.350000); setPropForOneAtom("Dubnium", "Db", 105, 1.600000, 0.000000, 1.700000, 6, 262.000000, 0.000000, 0.820000, 0.000000, 0.310000); setPropForOneAtom("Seaborgium", "Sg", 106, 1.600000, 0.000000, 1.700000, 6, 263.000000, 0.000000, 0.850000, 0.000000, 0.270000); setPropForOneAtom("Bohrium", "Bh", 107, 1.600000, 0.000000, 1.700000, 6, 264.000000, 0.000000, 0.880000, 0.000000, 0.220000); setPropForOneAtom("Hassium", "Hs", 108, 1.600000, 0.000000, 1.700000, 6, 265.000000, 0.000000, 0.900000, 0.000000, 0.180000); setPropForOneAtom("Meitnerium", "Mt", 109, 1.600000, 0.000000, 1.700000, 6, 268.000000, 0.000000, 0.920000, 0.000000, 0.150000); setPropForOneAtom("Dummy", "Xx", 0, 0.000000, 0.000000, 0.000000, 0, 0.000000, 0.000000, 0.070000, 0.500000, 0.700000); setPropForOneAtom("Dummy", "X", 0, 0.000000, 0.000000, 0.000000, 0, 0.000000, 0.000000, 0.070000, 0.500000, 0.700000); setPropForOneAtom("Tv", "Tv", 112, 0.000000, 0.000000, 0.000000, 0, 1.000000, 0.000000, 0.070000, 0.500000, 0.700000); addIsotopeToAtom("H", 1, 1, 1.007825032100, 99.98850000); addIsotopeToAtom("H", 1, 2, 2.014101778000, 0.01150000); addIsotopeToAtom("H", 1, 3, 3.016049267500, 0.00000000); addIsotopeToAtom("He", 2, 4, 4.002603249700, 99.99986300); addIsotopeToAtom("He", 2, 3, 3.016029309700, 0.00013700); addIsotopeToAtom("Li", 3, 7, 7.016004000000, 92.41000000); addIsotopeToAtom("Li", 3, 6, 6.015122300000, 7.59000000); addIsotopeToAtom("Be", 4, 9, 9.012182100000, 100.00000000); addIsotopeToAtom("B", 5, 11, 11.009305500000, 80.10000000); addIsotopeToAtom("B", 5, 10, 10.012937000000, 19.90000000); addIsotopeToAtom("C", 6, 12, 12.000000000000, 98.93000000); addIsotopeToAtom("C", 6, 13, 13.003354837800, 1.07000000); addIsotopeToAtom("C", 6, 14, 14.003241988000, 0.00000000); addIsotopeToAtom("N", 7, 14, 14.003074005200, 99.63200000); addIsotopeToAtom("N", 7, 15, 15.000108898400, 0.36800000); addIsotopeToAtom("O", 8, 16, 15.994914622100, 99.75700000); addIsotopeToAtom("O", 8, 18, 17.999160400000, 0.20500000); addIsotopeToAtom("O", 8, 17, 16.999131500000, 0.03800000); addIsotopeToAtom("F", 9, 19, 18.998403200000, 100.00000000); addIsotopeToAtom("Ne", 10, 20, 19.992440175900, 90.48000000); addIsotopeToAtom("Ne", 10, 22, 21.991385510000, 9.25000000); addIsotopeToAtom("Ne", 10, 21, 20.993846740000, 0.27000000); addIsotopeToAtom("Na", 11, 23, 22.989769670000, 100.00000000); addIsotopeToAtom("Mg", 12, 24, 23.985041900000, 78.99000000); addIsotopeToAtom("Mg", 12, 26, 25.982593040000, 11.01000000); addIsotopeToAtom("Mg", 12, 25, 24.985837020000, 10.00000000); addIsotopeToAtom("Al", 13, 27, 26.981538440000, 100.00000000); addIsotopeToAtom("Si", 14, 28, 27.976926532700, 92.22970000); addIsotopeToAtom("Si", 14, 29, 28.976494720000, 4.68320000); addIsotopeToAtom("Si", 14, 30, 29.973770220000, 3.08720000); addIsotopeToAtom("P", 15, 31, 30.973761510000, 100.00000000); addIsotopeToAtom("S", 16, 32, 31.972070690000, 94.93000000); addIsotopeToAtom("S", 16, 34, 33.967866830000, 4.29000000); addIsotopeToAtom("S", 16, 33, 32.971458500000, 0.76000000); addIsotopeToAtom("S", 16, 36, 35.967080880000, 0.02000000); addIsotopeToAtom("Cl", 17, 35, 34.968852710000, 75.78000000); addIsotopeToAtom("Cl", 17, 37, 36.965902600000, 24.22000000); addIsotopeToAtom("Ar", 18, 40, 39.962383123000, 99.60030000); addIsotopeToAtom("Ar", 18, 36, 35.967546280000, 0.33650000); addIsotopeToAtom("Ar", 18, 38, 37.962732200000, 0.06320000); addIsotopeToAtom("K", 19, 39, 38.963706900000, 93.25810000); addIsotopeToAtom("K", 19, 41, 40.961825970000, 6.73020000); addIsotopeToAtom("K", 19, 40, 39.963998670000, 0.01170000); addIsotopeToAtom("Ca", 20, 40, 39.962591200000, 96.94100000); addIsotopeToAtom("Ca", 20, 44, 43.955481100000, 2.08600000); addIsotopeToAtom("Ca", 20, 42, 41.958618300000, 0.64700000); addIsotopeToAtom("Ca", 20, 48, 47.952534000000, 0.18700000); addIsotopeToAtom("Ca", 20, 43, 42.958766800000, 0.13500000); addIsotopeToAtom("Ca", 20, 46, 45.953692800000, 0.00400000); addIsotopeToAtom("Sc", 21, 45, 44.955910200000, 100.00000000); addIsotopeToAtom("Ti", 22, 48, 47.947947100000, 73.72000000); addIsotopeToAtom("Ti", 22, 46, 45.952629500000, 8.25000000); addIsotopeToAtom("Ti", 22, 47, 46.951763800000, 7.44000000); addIsotopeToAtom("Ti", 22, 49, 48.947870800000, 5.41000000); addIsotopeToAtom("Ti", 22, 50, 49.944792100000, 5.18000000); addIsotopeToAtom("V", 23, 51, 50.943963700000, 99.75000000); addIsotopeToAtom("V", 23, 50, 49.947162800000, 0.25000000); addIsotopeToAtom("Cr", 24, 52, 51.940511900000, 83.78900000); addIsotopeToAtom("Cr", 24, 53, 52.940653800000, 9.50100000); addIsotopeToAtom("Cr", 24, 50, 49.946049600000, 4.34500000); addIsotopeToAtom("Cr", 24, 54, 53.938884900000, 2.36500000); addIsotopeToAtom("Mn", 25, 55, 54.938049600000, 100.00000000); addIsotopeToAtom("Fe", 26, 56, 55.934942100000, 91.75400000); addIsotopeToAtom("Fe", 26, 54, 53.939614800000, 5.84500000); addIsotopeToAtom("Fe", 26, 57, 56.935398700000, 2.11900000); addIsotopeToAtom("Fe", 26, 58, 57.933280500000, 0.28200000); addIsotopeToAtom("Co", 27, 59, 58.933200200000, 100.00000000); addIsotopeToAtom("Ni", 28, 58, 57.935347900000, 68.07690000); addIsotopeToAtom("Ni", 28, 60, 59.930790600000, 26.22310000); addIsotopeToAtom("Ni", 28, 62, 61.928348800000, 3.63450000); addIsotopeToAtom("Ni", 28, 61, 60.931060400000, 1.13990000); addIsotopeToAtom("Ni", 28, 64, 63.927969600000, 0.92560000); addIsotopeToAtom("Cu", 29, 63, 62.929601100000, 69.17000000); addIsotopeToAtom("Cu", 29, 65, 64.927793700000, 30.83000000); addIsotopeToAtom("Zn", 30, 64, 63.929146600000, 48.63000000); addIsotopeToAtom("Zn", 30, 66, 65.926036800000, 27.90000000); addIsotopeToAtom("Zn", 30, 68, 67.924847600000, 18.75000000); addIsotopeToAtom("Zn", 30, 67, 66.927130900000, 4.10000000); addIsotopeToAtom("Zn", 30, 70, 69.925325000000, 0.62000000); addIsotopeToAtom("Ga", 31, 69, 68.925581000000, 60.10800000); addIsotopeToAtom("Ga", 31, 71, 70.924705000000, 39.89200000); addIsotopeToAtom("Ge", 32, 74, 73.921178200000, 36.28000000); addIsotopeToAtom("Ge", 32, 72, 71.922076200000, 27.54000000); addIsotopeToAtom("Ge", 32, 70, 69.924250400000, 20.84000000); addIsotopeToAtom("Ge", 32, 73, 72.923459400000, 7.73000000); addIsotopeToAtom("Ge", 32, 76, 75.921402700000, 7.61000000); addIsotopeToAtom("As", 33, 75, 74.921596400000, 100.00000000); addIsotopeToAtom("Se", 34, 80, 79.916521800000, 49.61000000); addIsotopeToAtom("Se", 34, 78, 77.917309500000, 23.77000000); addIsotopeToAtom("Se", 34, 76, 75.919214100000, 9.37000000); addIsotopeToAtom("Se", 34, 82, 81.916700000000, 8.73000000); addIsotopeToAtom("Se", 34, 77, 76.919914600000, 7.63000000); addIsotopeToAtom("Se", 34, 74, 73.922476600000, 0.89000000); addIsotopeToAtom("Br", 35, 79, 78.918337600000, 50.69000000); addIsotopeToAtom("Br", 35, 81, 80.916291000000, 49.31000000); addIsotopeToAtom("Kr", 36, 84, 83.911507000000, 57.00000000); addIsotopeToAtom("Kr", 36, 86, 85.910610300000, 17.30000000); addIsotopeToAtom("Kr", 36, 82, 81.913484600000, 11.58000000); addIsotopeToAtom("Kr", 36, 83, 82.914136000000, 11.49000000); addIsotopeToAtom("Kr", 36, 80, 79.916378000000, 2.28000000); addIsotopeToAtom("Kr", 36, 78, 77.920386000000, 0.35000000); addIsotopeToAtom("Rb", 37, 85, 84.911789300000, 72.17000000); addIsotopeToAtom("Rb", 37, 87, 86.909183500000, 27.83000000); addIsotopeToAtom("Sr", 38, 88, 87.905614300000, 82.58000000); addIsotopeToAtom("Sr", 38, 86, 85.909262400000, 9.86000000); addIsotopeToAtom("Sr", 38, 87, 86.908879300000, 7.00000000); addIsotopeToAtom("Sr", 38, 84, 83.913425000000, 0.56000000); addIsotopeToAtom("Y", 39, 89, 88.905847900000, 100.00000000); addIsotopeToAtom("Zr", 40, 90, 89.904703700000, 51.45000000); addIsotopeToAtom("Zr", 40, 94, 93.906315800000, 17.38000000); addIsotopeToAtom("Zr", 40, 92, 91.905040100000, 17.15000000); addIsotopeToAtom("Zr", 40, 91, 90.905645000000, 11.22000000); addIsotopeToAtom("Zr", 40, 96, 95.908276000000, 2.80000000); addIsotopeToAtom("Nb", 41, 93, 92.906377500000, 100.00000000); addIsotopeToAtom("Mo", 42, 98, 97.905407800000, 24.13000000); addIsotopeToAtom("Mo", 42, 96, 95.904678900000, 16.68000000); addIsotopeToAtom("Mo", 42, 95, 94.905841500000, 15.92000000); addIsotopeToAtom("Mo", 42, 92, 91.906810000000, 14.84000000); addIsotopeToAtom("Mo", 42, 100, 99.907477000000, 9.63000000); addIsotopeToAtom("Mo", 42, 97, 96.906021000000, 9.55000000); addIsotopeToAtom("Mo", 42, 94, 93.905087600000, 9.25000000); addIsotopeToAtom("Tc", 43, 97, 96.906365000000, 33.33333333); addIsotopeToAtom("Tc", 43, 98, 97.907216000000, 33.33333333); addIsotopeToAtom("Tc", 43, 99, 98.906254600000, 33.33333333); addIsotopeToAtom("Ru", 44, 102, 101.904349500000, 31.55000000); addIsotopeToAtom("Ru", 44, 104, 103.905430000000, 18.62000000); addIsotopeToAtom("Ru", 44, 101, 100.905582200000, 17.06000000); addIsotopeToAtom("Ru", 44, 99, 98.905939300000, 12.76000000); addIsotopeToAtom("Ru", 44, 100, 99.904219700000, 12.60000000); addIsotopeToAtom("Ru", 44, 96, 95.907598000000, 5.54000000); addIsotopeToAtom("Ru", 44, 98, 97.905287000000, 1.87000000); addIsotopeToAtom("Rh", 45, 103, 102.905504000000, 100.00000000); addIsotopeToAtom("Pd", 46, 106, 105.903483000000, 27.33000000); addIsotopeToAtom("Pd", 46, 108, 107.903894000000, 26.46000000); addIsotopeToAtom("Pd", 46, 105, 104.905084000000, 22.33000000); addIsotopeToAtom("Pd", 46, 110, 109.905152000000, 11.72000000); addIsotopeToAtom("Pd", 46, 104, 103.904035000000, 11.14000000); addIsotopeToAtom("Pd", 46, 102, 101.905608000000, 1.02000000); addIsotopeToAtom("Ag", 47, 107, 106.905093000000, 51.83900000); addIsotopeToAtom("Ag", 47, 109, 108.904756000000, 48.16100000); addIsotopeToAtom("Cd", 48, 114, 113.903358100000, 28.73000000); addIsotopeToAtom("Cd", 48, 112, 111.902757200000, 24.13000000); addIsotopeToAtom("Cd", 48, 111, 110.904182000000, 12.80000000); addIsotopeToAtom("Cd", 48, 110, 109.903006000000, 12.49000000); addIsotopeToAtom("Cd", 48, 113, 112.904400900000, 12.22000000); addIsotopeToAtom("Cd", 48, 116, 115.904755000000, 7.49000000); addIsotopeToAtom("Cd", 48, 106, 105.906458000000, 1.25000000); addIsotopeToAtom("Cd", 48, 108, 107.904183000000, 0.89000000); addIsotopeToAtom("In", 49, 115, 114.903878000000, 95.71000000); addIsotopeToAtom("In", 49, 113, 112.904061000000, 4.29000000); addIsotopeToAtom("Sn", 50, 120, 119.902196600000, 32.58000000); addIsotopeToAtom("Sn", 50, 118, 117.901606000000, 24.22000000); addIsotopeToAtom("Sn", 50, 116, 115.901744000000, 14.54000000); addIsotopeToAtom("Sn", 50, 119, 118.903309000000, 8.59000000); addIsotopeToAtom("Sn", 50, 117, 116.902954000000, 7.68000000); addIsotopeToAtom("Sn", 50, 124, 123.905274600000, 5.79000000); addIsotopeToAtom("Sn", 50, 122, 121.903440100000, 4.63000000); addIsotopeToAtom("Sn", 50, 112, 111.904821000000, 0.97000000); addIsotopeToAtom("Sn", 50, 114, 113.902782000000, 0.66000000); addIsotopeToAtom("Sn", 50, 115, 114.903346000000, 0.34000000); addIsotopeToAtom("Sb", 51, 121, 120.903818000000, 57.21000000); addIsotopeToAtom("Sb", 51, 123, 122.904215700000, 42.79000000); addIsotopeToAtom("Te", 52, 130, 129.906222800000, 34.08000000); addIsotopeToAtom("Te", 52, 128, 127.904461400000, 31.74000000); addIsotopeToAtom("Te", 52, 126, 125.903305500000, 18.84000000); addIsotopeToAtom("Te", 52, 125, 124.904424700000, 7.07000000); addIsotopeToAtom("Te", 52, 124, 123.902819500000, 4.74000000); addIsotopeToAtom("Te", 52, 122, 121.903047100000, 2.55000000); addIsotopeToAtom("Te", 52, 123, 122.904273000000, 0.89000000); addIsotopeToAtom("Te", 52, 120, 119.904020000000, 0.09000000); addIsotopeToAtom("I", 53, 127, 126.904468000000, 100.00000000); addIsotopeToAtom("Xe", 54, 132, 131.904154500000, 26.89000000); addIsotopeToAtom("Xe", 54, 129, 128.904779500000, 26.44000000); addIsotopeToAtom("Xe", 54, 131, 130.905081900000, 21.18000000); addIsotopeToAtom("Xe", 54, 134, 133.905394500000, 10.44000000); addIsotopeToAtom("Xe", 54, 136, 135.907220000000, 8.87000000); addIsotopeToAtom("Xe", 54, 130, 129.903507900000, 4.08000000); addIsotopeToAtom("Xe", 54, 128, 127.903530400000, 1.92000000); addIsotopeToAtom("Xe", 54, 126, 125.904269000000, 0.09000000); addIsotopeToAtom("Xe", 54, 124, 123.905895800000, 0.09000000); addIsotopeToAtom("Cs", 55, 133, 132.905447000000, 100.00000000); addIsotopeToAtom("Ba", 56, 138, 137.905241000000, 71.69800000); addIsotopeToAtom("Ba", 56, 137, 136.905821000000, 11.23200000); addIsotopeToAtom("Ba", 56, 136, 135.904570000000, 7.85400000); addIsotopeToAtom("Ba", 56, 135, 134.905683000000, 6.59200000); addIsotopeToAtom("Ba", 56, 134, 133.904503000000, 2.41700000); addIsotopeToAtom("Ba", 56, 130, 129.906310000000, 0.10600000); addIsotopeToAtom("Ba", 56, 132, 131.905056000000, 0.10100000); addIsotopeToAtom("La", 57, 139, 138.906348000000, 99.91000000); addIsotopeToAtom("La", 57, 138, 137.907107000000, 0.09000000); addIsotopeToAtom("Ce", 58, 140, 139.905434000000, 88.45000000); addIsotopeToAtom("Ce", 58, 142, 141.909240000000, 11.11400000); addIsotopeToAtom("Ce", 58, 138, 137.905986000000, 0.25100000); addIsotopeToAtom("Ce", 58, 136, 135.907140000000, 0.18500000); addIsotopeToAtom("Pr", 59, 141, 140.907648000000, 100.00000000); addIsotopeToAtom("Nd", 60, 142, 141.907719000000, 27.20000000); addIsotopeToAtom("Nd", 60, 144, 143.910083000000, 23.80000000); addIsotopeToAtom("Nd", 60, 146, 145.913112000000, 17.20000000); addIsotopeToAtom("Nd", 60, 143, 142.909810000000, 12.20000000); addIsotopeToAtom("Nd", 60, 145, 144.912569000000, 8.30000000); addIsotopeToAtom("Nd", 60, 148, 147.916889000000, 5.70000000); addIsotopeToAtom("Nd", 60, 150, 149.920887000000, 5.60000000); addIsotopeToAtom("Pm", 61, 145, 144.912744000000, 50.00000000); addIsotopeToAtom("Pm", 61, 147, 146.915134000000, 50.00000000); addIsotopeToAtom("Sm", 62, 152, 151.919728000000, 26.75000000); addIsotopeToAtom("Sm", 62, 154, 153.922205000000, 22.75000000); addIsotopeToAtom("Sm", 62, 147, 146.914893000000, 14.99000000); addIsotopeToAtom("Sm", 62, 149, 148.917180000000, 13.82000000); addIsotopeToAtom("Sm", 62, 148, 147.914818000000, 11.24000000); addIsotopeToAtom("Sm", 62, 150, 149.917271000000, 7.38000000); addIsotopeToAtom("Sm", 62, 144, 143.911995000000, 3.07000000); addIsotopeToAtom("Eu", 63, 153, 152.921226000000, 52.19000000); addIsotopeToAtom("Eu", 63, 151, 150.919846000000, 47.81000000); addIsotopeToAtom("Gd", 64, 158, 157.924101000000, 24.84000000); addIsotopeToAtom("Gd", 64, 160, 159.927051000000, 21.86000000); addIsotopeToAtom("Gd", 64, 156, 155.922120000000, 20.47000000); addIsotopeToAtom("Gd", 64, 157, 156.923957000000, 15.65000000); addIsotopeToAtom("Gd", 64, 155, 154.922619000000, 14.80000000); addIsotopeToAtom("Gd", 64, 154, 153.920862000000, 2.18000000); addIsotopeToAtom("Gd", 64, 152, 151.919788000000, 0.20000000); addIsotopeToAtom("Tb", 65, 159, 158.925343000000, 100.00000000); addIsotopeToAtom("Dy", 66, 164, 163.929171000000, 28.18000000); addIsotopeToAtom("Dy", 66, 162, 161.926795000000, 25.51000000); addIsotopeToAtom("Dy", 66, 163, 162.928728000000, 24.90000000); addIsotopeToAtom("Dy", 66, 161, 160.926930000000, 18.91000000); addIsotopeToAtom("Dy", 66, 160, 159.925194000000, 2.34000000); addIsotopeToAtom("Dy", 66, 158, 157.924405000000, 0.10000000); addIsotopeToAtom("Dy", 66, 156, 155.924278000000, 0.06000000); addIsotopeToAtom("Ho", 67, 165, 164.930319000000, 100.00000000); addIsotopeToAtom("Er", 68, 166, 165.930290000000, 33.61000000); addIsotopeToAtom("Er", 68, 168, 167.932368000000, 26.78000000); addIsotopeToAtom("Er", 68, 167, 166.932045000000, 22.93000000); addIsotopeToAtom("Er", 68, 170, 169.935460000000, 14.93000000); addIsotopeToAtom("Er", 68, 164, 163.929197000000, 1.61000000); addIsotopeToAtom("Er", 68, 162, 161.928775000000, 0.14000000); addIsotopeToAtom("Tm", 69, 169, 168.934211000000, 100.00000000); addIsotopeToAtom("Yb", 70, 174, 173.938858100000, 31.83000000); addIsotopeToAtom("Yb", 70, 172, 171.936377700000, 21.83000000); addIsotopeToAtom("Yb", 70, 173, 172.938206800000, 16.13000000); addIsotopeToAtom("Yb", 70, 171, 170.936322000000, 14.28000000); addIsotopeToAtom("Yb", 70, 176, 175.942568000000, 12.76000000); addIsotopeToAtom("Yb", 70, 170, 169.934759000000, 3.04000000); addIsotopeToAtom("Yb", 70, 168, 167.933894000000, 0.13000000); addIsotopeToAtom("Lu", 71, 175, 174.940767900000, 97.41000000); addIsotopeToAtom("Lu", 71, 176, 175.942682400000, 2.59000000); addIsotopeToAtom("Hf", 72, 180, 179.946548800000, 35.08000000); addIsotopeToAtom("Hf", 72, 178, 177.943697700000, 27.28000000); addIsotopeToAtom("Hf", 72, 177, 176.943220000000, 18.60000000); addIsotopeToAtom("Hf", 72, 179, 178.945815100000, 13.62000000); addIsotopeToAtom("Hf", 72, 176, 175.941401800000, 5.26000000); addIsotopeToAtom("Hf", 72, 174, 173.940040000000, 0.16000000); addIsotopeToAtom("Ta", 73, 181, 180.947996000000, 99.98800000); addIsotopeToAtom("Ta", 73, 180, 179.947466000000, 0.01200000); addIsotopeToAtom("W", 74, 184, 183.950932600000, 30.64000000); addIsotopeToAtom("W", 74, 186, 185.954362000000, 28.43000000); addIsotopeToAtom("W", 74, 182, 181.948206000000, 26.50000000); addIsotopeToAtom("W", 74, 183, 182.950224500000, 14.31000000); addIsotopeToAtom("W", 74, 180, 179.946706000000, 0.12000000); addIsotopeToAtom("Re", 75, 187, 186.955750800000, 62.60000000); addIsotopeToAtom("Re", 75, 185, 184.952955700000, 37.40000000); addIsotopeToAtom("Os", 76, 192, 191.961479000000, 40.78000000); addIsotopeToAtom("Os", 76, 190, 189.958445000000, 26.26000000); addIsotopeToAtom("Os", 76, 189, 188.958144900000, 16.15000000); addIsotopeToAtom("Os", 76, 188, 187.955836000000, 13.24000000); addIsotopeToAtom("Os", 76, 187, 186.955747900000, 1.96000000); addIsotopeToAtom("Os", 76, 186, 185.953838000000, 1.59000000); addIsotopeToAtom("Os", 76, 184, 183.952491000000, 0.02000000); addIsotopeToAtom("Ir", 77, 193, 192.962924000000, 62.70000000); addIsotopeToAtom("Ir", 77, 191, 190.960591000000, 37.30000000); addIsotopeToAtom("Pt", 78, 195, 194.964774000000, 33.83200000); addIsotopeToAtom("Pt", 78, 194, 193.962664000000, 32.96700000); addIsotopeToAtom("Pt", 78, 196, 195.964935000000, 25.24200000); addIsotopeToAtom("Pt", 78, 198, 197.967876000000, 7.16300000); addIsotopeToAtom("Pt", 78, 192, 191.961035000000, 0.78200000); addIsotopeToAtom("Pt", 78, 190, 189.959930000000, 0.01400000); addIsotopeToAtom("Au", 79, 197, 196.966552000000, 100.00000000); addIsotopeToAtom("Hg", 80, 202, 201.970626000000, 29.86000000); addIsotopeToAtom("Hg", 80, 200, 199.968309000000, 23.10000000); addIsotopeToAtom("Hg", 80, 199, 198.968262000000, 16.87000000); addIsotopeToAtom("Hg", 80, 201, 200.970285000000, 13.18000000); addIsotopeToAtom("Hg", 80, 198, 197.966752000000, 9.97000000); addIsotopeToAtom("Hg", 80, 204, 203.973476000000, 6.87000000); addIsotopeToAtom("Hg", 80, 196, 195.965815000000, 0.15000000); addIsotopeToAtom("Tl", 81, 205, 204.974412000000, 70.47600000); addIsotopeToAtom("Tl", 81, 203, 202.972329000000, 29.52400000); addIsotopeToAtom("Pb", 82, 208, 207.976636000000, 52.40000000); addIsotopeToAtom("Pb", 82, 206, 205.974449000000, 24.10000000); addIsotopeToAtom("Pb", 82, 207, 206.975881000000, 22.10000000); addIsotopeToAtom("Pb", 82, 204, 203.973029000000, 1.40000000); addIsotopeToAtom("Bi", 83, 209, 208.980383000000, 100.00000000); addIsotopeToAtom("Po", 84, 209, 208.982416000000, 50.00000000); addIsotopeToAtom("Po", 84, 210, 209.982857000000, 50.00000000); addIsotopeToAtom("At", 85, 210, 209.987131000000, 50.00000000); addIsotopeToAtom("At", 85, 211, 210.987481000000, 50.00000000); addIsotopeToAtom("Rn", 86, 211, 210.990585000000, 33.33333333); addIsotopeToAtom("Rn", 86, 220, 220.011384100000, 33.33333333); addIsotopeToAtom("Rn", 86, 222, 222.017570500000, 33.33333333); addIsotopeToAtom("Fr", 87, 223, 223.019730700000, 100.00000000); addIsotopeToAtom("Ra", 88, 223, 223.018497000000, 25.00000000); addIsotopeToAtom("Ra", 88, 224, 224.020202000000, 25.00000000); addIsotopeToAtom("Ra", 88, 226, 226.025402600000, 25.00000000); addIsotopeToAtom("Ra", 88, 228, 228.031064100000, 25.00000000); addIsotopeToAtom("Ac", 89, 227, 227.027747000000, 100.00000000); addIsotopeToAtom("Th", 90, 232, 232.038050400000, 100.00000000); addIsotopeToAtom("Th", 90, 230, 230.033126600000, 0.00000000); addIsotopeToAtom("Pa", 91, 231, 231.035878900000, 100.00000000); addIsotopeToAtom("U", 92, 238, 238.050782600000, 99.27450000); addIsotopeToAtom("U", 92, 235, 235.043923100000, 0.72000000); addIsotopeToAtom("U", 92, 234, 234.040945600000, 0.00550000); addIsotopeToAtom("U", 92, 236, 236.045561900000, 0.00000000); addIsotopeToAtom("U", 92, 233, 233.039628000000, 0.00000000); addIsotopeToAtom("Np", 93, 237, 237.048167300000, 50.00000000); addIsotopeToAtom("Np", 93, 239, 239.052931400000, 50.00000000); addIsotopeToAtom("Pu", 94, 238, 238.049553400000, 16.66666667); addIsotopeToAtom("Pu", 94, 239, 239.052156500000, 16.66666667); addIsotopeToAtom("Pu", 94, 240, 240.053807500000, 16.66666667); addIsotopeToAtom("Pu", 94, 241, 241.056845300000, 16.66666667); addIsotopeToAtom("Pu", 94, 242, 242.058736800000, 16.66666667); addIsotopeToAtom("Pu", 94, 244, 244.064198000000, 16.66666667); addIsotopeToAtom("Am", 95, 241, 241.056822900000, 50.00000000); addIsotopeToAtom("Am", 95, 243, 243.061372700000, 50.00000000); addIsotopeToAtom("Cm", 96, 243, 243.061382200000, 16.66666667); addIsotopeToAtom("Cm", 96, 244, 244.062746300000, 16.66666667); addIsotopeToAtom("Cm", 96, 245, 245.065485600000, 16.66666667); addIsotopeToAtom("Cm", 96, 246, 246.067217600000, 16.66666667); addIsotopeToAtom("Cm", 96, 247, 247.070347000000, 16.66666667); addIsotopeToAtom("Cm", 96, 248, 248.072342000000, 16.66666667); addIsotopeToAtom("Bk", 97, 247, 247.070299000000, 50.00000000); addIsotopeToAtom("Bk", 97, 249, 249.074980000000, 50.00000000); addIsotopeToAtom("Cf", 98, 249, 249.074847000000, 25.00000000); addIsotopeToAtom("Cf", 98, 250, 250.076400000000, 25.00000000); addIsotopeToAtom("Cf", 98, 251, 251.079580000000, 25.00000000); addIsotopeToAtom("Cf", 98, 252, 252.081620000000, 25.00000000); addIsotopeToAtom("Es", 99, 252, 252.082970000000, 100.00000000); addIsotopeToAtom("Fm", 100, 257, 257.095099000000, 100.00000000); addIsotopeToAtom("Md", 101, 256, 256.094050000000, 50.00000000); addIsotopeToAtom("Md", 101, 258, 258.098425000000, 50.00000000); addIsotopeToAtom("No", 102, 259, 259.101020000000, 100.00000000); addIsotopeToAtom("Lr", 103, 262, 262.109690000000, 100.00000000); addIsotopeToAtom("Rf", 104, 261, 261.108750000000, 100.00000000); addIsotopeToAtom("Db", 105, 262, 262.114150000000, 100.00000000); addIsotopeToAtom("Sg", 106, 266, 266.121930000000, 100.00000000); addIsotopeToAtom("Bh", 107, 264, 264.124730000000, 100.00000000); addIsotopeToAtom("Hs", 108, 277, 277.000000000000, 100.00000000); addIsotopeToAtom("Mt", 109, 268, 268.138820000000, 100.00000000); addIsotopeToAtom("Uun", 110, 281, 281.000000000000, 100.00000000); addIsotopeToAtom("Uuu", 111, 272, 272.153480000000, 100.00000000); addIsotopeToAtom("Uub", 112, 285, 285.000000000000, 100.00000000); addIsotopeToAtom("Uuq", 114, 289, 289.000000000000, 100.00000000); addIsotopeToAtom("Uuh", 116, 292, 292.000000000000, 100.00000000); } /******************************************************************/ void set_atom_color(GtkColorSelection *Sel,gpointer *d) { gtk_color_selection_get_current_color(Sel, &ColorTemp); } /******************************************************************/ void set_button_color(GtkObject *button,gpointer *data) { GtkStyle *style; SData *tdata=(SData*)data; style = gtk_style_copy(tdata->Style); style->bg[0].red= ColorTemp.red; style->bg[0].green=ColorTemp.green; style->bg[0].blue=ColorTemp.blue; tdata->Style=style; gtk_widget_set_style(tdata->Button, tdata->Style); } /******************************************************************/ static void open_color_dlg_atoms(GtkWidget *win,gpointer tdata) { GtkColorSelectionDialog *ColorDlg; SData *data=(SData*)tdata; GtkStyle *style; gdouble v[3]; style = data->Style; v[0] =style->bg[0].red/65535.0; v[1] =style->bg[0].green/65535.0; v[2] =style->bg[0].blue/65535.0; ColorDlg = (GtkColorSelectionDialog *)gtk_color_selection_dialog_new("Set Atom Color"); gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (ColorDlg->colorsel), &style->bg[0]); gtk_window_set_transient_for(GTK_WINDOW(ColorDlg),GTK_WINDOW(data->Window)); gtk_window_set_position(GTK_WINDOW(ColorDlg),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (ColorDlg), TRUE); g_signal_connect(G_OBJECT(ColorDlg), "delete_event",(GCallback)destroy_button_windows,NULL); g_signal_connect(G_OBJECT(ColorDlg), "delete_event",G_CALLBACK(gtk_widget_destroy),NULL); gtk_widget_hide(ColorDlg->help_button); g_signal_connect_swapped(G_OBJECT(ColorDlg->ok_button),"clicked", (GCallback)set_atom_color,GTK_OBJECT(ColorDlg->colorsel)); g_signal_connect(G_OBJECT(ColorDlg->ok_button),"clicked", (GCallback)set_button_color,tdata); g_signal_connect_swapped(G_OBJECT(ColorDlg->ok_button), "clicked", (GCallback)destroy_button_windows,GTK_OBJECT(ColorDlg)); g_signal_connect_swapped(G_OBJECT(ColorDlg->ok_button),"clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(ColorDlg)); g_signal_connect_swapped(G_OBJECT(ColorDlg->cancel_button), "clicked", (GCallback)destroy_button_windows,GTK_OBJECT(ColorDlg)); g_signal_connect_swapped(G_OBJECT(ColorDlg->cancel_button),"clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(ColorDlg)); add_button_windows(" Set Color ",GTK_WIDGET(ColorDlg)); gtk_widget_show(GTK_WIDGET(ColorDlg)); } /******************************************************************/ static void set_atom_prop(GtkWidget *w,gpointer data) { guint i; gchar *Symb; G_CONST_RETURN gchar *temp; gdouble radii; gdouble covalentRadii; gdouble vanDerWaalsRadii; gint maximumBondValence; gdouble masse; gdouble electronegativity; SData *sdata=(SData*)data; Symb = (gchar *)sdata->Symb; temp = gtk_entry_get_text(GTK_ENTRY(EntryProp[DISPLAY_RADII])); if(!test(temp)) { GtkWidget* mess = Message(_("ERROR : the entry text is not a number"),_("Warning"),TRUE); gtk_window_set_transient_for(GTK_WINDOW(mess),GTK_WINDOW(sdata->Window)); return; } else radii = atof(temp)/BOHR_TO_ANG; temp = gtk_entry_get_text(GTK_ENTRY(EntryProp[COVALENT_RADII])); if(!test(temp)) { GtkWidget* mess = Message(_("ERROR : the entry text is not a number"),_("Warning"),TRUE); gtk_window_set_transient_for(GTK_WINDOW(mess),GTK_WINDOW(sdata->Window)); return; } else covalentRadii = atof(temp)/BOHR_TO_ANG; temp = gtk_entry_get_text(GTK_ENTRY(EntryProp[VANDERWALS_RADII])); if(!test(temp)) { GtkWidget* mess = Message(_("ERROR : the entry text is not a number"),_("Warning"),TRUE); gtk_window_set_transient_for(GTK_WINDOW(mess),GTK_WINDOW(sdata->Window)); return; } else vanDerWaalsRadii = atof(temp)/BOHR_TO_ANG; temp = gtk_entry_get_text(GTK_ENTRY(EntryProp[MAXIMUM_BOND_VALENCE])); if(!test(temp)) { GtkWidget* mess = Message(_("ERROR : the entry text is not a number"),_("Warning"),TRUE); gtk_window_set_transient_for(GTK_WINDOW(mess),GTK_WINDOW(sdata->Window)); return; } else maximumBondValence = atoi(temp); temp = gtk_entry_get_text(GTK_ENTRY(EntryProp[MASSE])); if(!test(temp)) { GtkWidget* mess = Message(_("ERROR : the entry text is not a number"),_("Warning"),TRUE); gtk_window_set_transient_for(GTK_WINDOW(mess),GTK_WINDOW(sdata->Window)); return; } else masse = atof(temp); temp = gtk_entry_get_text(GTK_ENTRY(EntryProp[ELECTRONEGATIVITY])); if(!test(temp)) { GtkWidget* mess = Message(_("ERROR : the entry text is not a number"),_("Warning"),TRUE); gtk_window_set_transient_for(GTK_WINDOW(mess),GTK_WINDOW(sdata->Window)); return; } else electronegativity = atof(temp)/27.21; /* g_free(temp);*/ for(i=0;i0 && atof(abond)>=0 && atof(abond)<=100) { AtomsProp[i].rMass[niso] = atof(mass); AtomsProp[i].iMass[niso] = (gint)(atoi(mass)+0.5); AtomsProp[i].abundances[niso] = atof(abond); sabond += AtomsProp[i].abundances[niso]; niso++; } } AtomsProp[i].nIsotopes = niso; if(fabs(sabond-100)>1e-3) { GtkWidget* mess = Message(_("Warning : sum of abundances is not equal to 100!\n Reset the mass to 0 for remove an isotope "),_("Warning"),TRUE); gtk_window_set_transient_for(GTK_WINDOW(mess),GTK_WINDOW(sdata->Window)); } AtomsProp[i].radii = radii; AtomsProp[i].covalentRadii = covalentRadii; AtomsProp[i].vanDerWaalsRadii = vanDerWaalsRadii; AtomsProp[i].maximumBondValence = maximumBondValence; AtomsProp[i].masse = masse; AtomsProp[i].electronegativity = electronegativity; set_color_atom(ColorTemp,Symb); sdata->Style=set_button_style(sdata->Style,sdata->Button,Symb); if(GeomDrawingArea != NULL) rafresh_drawing(); rafresh_window_orb(); return; } } } /********************************************************************************/ static GtkWidget *Add_Label_Table(GtkWidget *Table,gchar *label,gushort line,gushort colonne) { GtkWidget *Label; GtkWidget *Hbox; Label = gtk_label_new (label); gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT); Hbox = gtk_hbox_new (FALSE, 2); gtk_box_pack_start (GTK_BOX (Hbox), Label, FALSE, FALSE, 4); gtk_table_attach(GTK_TABLE(Table),Hbox,colonne,colonne+1,line,line+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); return Label; } /********************************************************************************/ /* static void clearList(GtkWidget* myList) { GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(myList)); GtkListStore *store = GTK_LIST_STORE (model); gtk_list_store_clear(store); } */ /*****************************************************************************/ static void appendList(GtkWidget* list, gint i) { #define NC 2 gchar *texts[NC]; guint Nc; gint k; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(list)); GtkListStore *store = GTK_LIST_STORE (model); model = GTK_TREE_MODEL (store); for(Nc=0;Nc100) return; Nc = atoi(path_string); path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (model, &iter, path); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 2*numCol, new_text, -1); gtk_tree_path_free (path); return; } } /************************************************************/ static GtkWidget* create_isotope_list(GtkWidget *vbox, gint numAtom) { GtkListStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkWidget *list = NULL; GtkWidget *scr; guint i; guint Factor=7; guint widall=0; #define NC 2 gchar *titres[NC]={ "Mass", "Abundance(%)", }; gint width[NC]={6,8}; for(i=0;(gint)iSymb); ColorTemp = Prop.color; Dialogue = gtk_dialog_new(); temp = g_strdup_printf("Set properties of %s atom",sdata->Symb); gtk_window_set_title(GTK_WINDOW(Dialogue),temp); gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Dialogue),GTK_WINDOW(sdata->Window)); gtk_window_set_modal (GTK_WINDOW (Dialogue), TRUE); g_signal_connect(G_OBJECT(Dialogue), "delete_event",(GCallback)destroy_button_windows,NULL); g_signal_connect(G_OBJECT(Dialogue), "delete_event",G_CALLBACK(gtk_widget_destroy),NULL); frame = gtk_frame_new (sdata->Symb); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(7,4,FALSE); gtk_box_pack_start(GTK_BOX(vboxframe), Table,TRUE,TRUE,0); i = 0; Add_Label_Table(Table,_("Name"),i,0); Add_Label_Table(Table,":",i,1); Add_Label_Table(Table,Prop.name,i,2); i++; Add_Label_Table(Table,_("Symbol"),i,0); Add_Label_Table(Table,":",i,1); Add_Label_Table(Table,sdata->Symb,i,2); i++; Add_Label_Table(Table,_("Atomic Number"),i,0); Add_Label_Table(Table,":",i,1); temp = g_strdup_printf("%d",Prop.atomicNumber); Add_Label_Table(Table,temp,i,2); /* Display radius */ i++; Add_Label_Table(Table,tlabel[DISPLAY_RADII],i,0); Add_Label_Table(Table,":",i,1); EntryProp[DISPLAY_RADII] = gtk_entry_new(); gtk_widget_set_size_request(GTK_WIDGET(EntryProp[DISPLAY_RADII]),80,-1); gtk_table_attach(GTK_TABLE(Table),EntryProp[DISPLAY_RADII],2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); temp = g_strdup_printf("%f",Prop.radii*BOHR_TO_ANG); gtk_entry_set_text(GTK_ENTRY(EntryProp[DISPLAY_RADII]),temp); Add_Label_Table(Table,_("Angstroms"),i,3); /* Covalent radii */ i++; Add_Label_Table(Table,tlabel[COVALENT_RADII],i,0); Add_Label_Table(Table,":",i,1); EntryProp[COVALENT_RADII] = gtk_entry_new(); gtk_widget_set_size_request(GTK_WIDGET(EntryProp[COVALENT_RADII]),80,-1); gtk_table_attach(GTK_TABLE(Table),EntryProp[COVALENT_RADII],2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); temp = g_strdup_printf("%f",Prop.covalentRadii*BOHR_TO_ANG); gtk_entry_set_text(GTK_ENTRY(EntryProp[COVALENT_RADII]),temp); Add_Label_Table(Table,_("Angstroms"),i,3); /* Van der Waals radius */ i++; Add_Label_Table(Table,tlabel[VANDERWALS_RADII],i,0); Add_Label_Table(Table,":",i,1); EntryProp[VANDERWALS_RADII] = gtk_entry_new(); gtk_widget_set_size_request(GTK_WIDGET(EntryProp[VANDERWALS_RADII]),80,-1); gtk_table_attach(GTK_TABLE(Table),EntryProp[VANDERWALS_RADII],2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); temp = g_strdup_printf("%f",Prop.vanDerWaalsRadii*BOHR_TO_ANG); gtk_entry_set_text(GTK_ENTRY(EntryProp[VANDERWALS_RADII]),temp); Add_Label_Table(Table,_("Angstroms"),i,3); /* Maximum bond valence */ i++; Add_Label_Table(Table,tlabel[MAXIMUM_BOND_VALENCE],i,0); Add_Label_Table(Table,":",i,1); { gint m = 30; gchar **maxValence = g_malloc(30*sizeof(gchar*)); gint k; for(k=0; kchild); for(k=0; kStyle,Bouton,sdata->Symb); tdata=g_malloc(sizeof(SData)); tdata->Window = Dialogue; tdata->Symb = g_strdup(sdata->Symb); tdata->Button =Bouton; tdata->Style =style; gtk_table_attach(GTK_TABLE(Table),Bouton,2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)open_color_dlg_atoms, (gpointer)tdata); /* Mass */ i++; Add_Label_Table(Table,tlabel[MASSE],i,0); Add_Label_Table(Table,":",i,1); EntryProp[MASSE] = gtk_entry_new(); gtk_widget_set_size_request(GTK_WIDGET(EntryProp[MASSE]),80,-1); gtk_table_attach(GTK_TABLE(Table),EntryProp[MASSE],2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); temp = g_strdup_printf("%f",Prop.masse); gtk_entry_set_text(GTK_ENTRY(EntryProp[MASSE]),temp); Add_Label_Table(Table,"uam(12C)",i,3); listIsotopes = create_isotope_list(vboxframe, Prop.atomicNumber-1); gtk_widget_realize(Dialogue); Bouton = create_button(Dialogue,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)destroy_button_windows,GTK_OBJECT(Dialogue)); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); Bouton = create_button(Dialogue,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)set_atom_prop, sdata); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)destroy_button_windows,GTK_OBJECT(Dialogue)); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); add_button_windows(_(" Set properties "),Dialogue); gtk_widget_show_all(Dialogue); g_free(temp); } /******************************************************************/ GtkStyle *set_button_style( GtkStyle *button_style,GtkWidget *button,gchar *Symb) { SAtomsProp Pro=prop_atom_get(Symb); GtkStyle *style; style = gtk_style_copy(button_style); style->bg[0].red=Pro.color.red; style->bg[0].green=Pro.color.green; style->bg[0].blue=Pro.color.blue; gtk_widget_set_style(button, style ); return style; } /******************************************************************/ gchar*** get_periodic_table() { static const gchar *table0[PERIODIC_TABLE_N_COLUMNS][PERIODIC_TABLE_N_ROWS]={ {"H" ,"Li","Na","K" ,"Rb","Cs","Fr","00","00","00"}, {"00","Be","Mg","Ca","Sr","Ba","Ra","00","X","00"}, {"00","00","00","Sc","Y" ,"La","Ac","00","00","00"}, {"00","00","00","Ti","Zr","Hf","Rf","00","00","00"}, {"00","00","00","V" ,"Nb","Ta","Db","Ce","Th","00"}, {"00","00","00","Cr","Mo","W" ,"Sg","Pr","Pa","00"}, {"00","00","00","Mn","Tc","Re","Bh","Nd","U" ,"00"}, {"00","00","00","Fe","Ru","Os","Hs","Pm","Np","00"}, {"00","00","00","Co","Rh","Ir","Mt","Sm","Pu","00"}, {"00","00","00","Ni","Pd","Pt","00","Eu","Am","00"}, {"00","00","00","Cu","Ag","Au","00","Gd","Cm","00"}, {"00","00","00","Zn","Cd","Hg","00","Tb","Bk","00"}, {"00","B" ,"Al","Ga","In","Tl","00","Dy","Cf","00"}, {"00","C" ,"Si","Ge","Sn","Pb","00","Ho","Es","00"}, {"00","N" ,"P" ,"As","Sb","Bi","00","Er","Fm","00"}, {"00","O" ,"S" ,"Se","Te","Po","00","Tm","Md","00"}, {"00","F" ,"Cl","Br","I" ,"At","00","Yb","No","00"}, {"He","Ne","Ar","Kr","Xe","Rn","00","Lu","Lr","00"}, }; static gchar*** table = NULL; if(table == NULL) { gint i; gint j; table = g_malloc(PERIODIC_TABLE_N_COLUMNS*sizeof(gchar**)); for(i=0;iWindow = WinTable; sdata[j][i]->Symb = g_strdup(Symb[j][i]); sdata[j][i]->Button =button; sdata[j][i]->Style =style; g_signal_connect(G_OBJECT(button), "clicked", (GCallback)dialog_set_atom_prop,(gpointer )sdata[j][i]); gtk_table_attach(GTK_TABLE(Table),button,j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); } } } /******************************************************************/ void create_table_prop() { GtkWidget *WinTable; GtkWidget *frame; GtkWidget *vbox; GtkWidget *hbox; GtkWidget* button; WinTable = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(WinTable),_("Select your atom")); gtk_window_set_position(GTK_WINDOW(WinTable),GTK_WIN_POS_CENTER); gtk_window_set_default_size (GTK_WINDOW(WinTable),(gint)(ScreenWidth*0.5),(gint)(ScreenHeight*0.4)); g_signal_connect(G_OBJECT(WinTable), "delete_event", (GCallback)destroy_button_windows, NULL); g_signal_connect(G_OBJECT(WinTable), "delete_event", (GCallback)gtk_widget_destroy, NULL); vbox = gtk_vbox_new (FALSE, 2); gtk_container_add(GTK_CONTAINER(WinTable),vbox); hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 0); gtk_container_add(GTK_CONTAINER(hbox),frame); gtk_widget_show (frame); create_table_prop_in_window(WinTable,frame); hbox = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); gtk_widget_realize(WinTable); button = create_button(WinTable,_("Close")); gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 2); g_signal_connect_swapped(G_OBJECT(button),"clicked", (GCallback)destroy_button_windows, GTK_OBJECT(WinTable)); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(WinTable)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show(button); add_button_windows(_(" Properties "),WinTable); gtk_widget_show_all(WinTable); } /********************************************************************************/ void create_table_prop_in_vbox(GtkWidget *WinTable,GtkWidget *Vbox) { GtkWidget *frame; frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_container_add(GTK_CONTAINER(Vbox),frame); gtk_widget_show (frame); create_table_prop_in_window(WinTable,frame); gtk_widget_show_all(WinTable); } /******************************************************************/ GabeditSrc250/src/Utils/UtilsGL.c0000644000175100017510000004227013130665225017056 0ustar alloucheallouche/* UtilsGL.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include #include /* #ifndef G_OS_WIN32 #include #include #include #else #include #endif */ #include "../Common/Global.h" #include "../Utils/Vector3d.h" #include "../Utils/Transformation.h" #include "../Utils/Constants.h" #include "UtilsGL.h" #include "../../gl2ps/gl2ps.h" /* transformation/projection matrices */ static GLint viewport[4]; static GLdouble mvmatrix[16]; static GLdouble projmatrix[16]; static gint glFontsize=10; static gint fontOffset=-1; static gint charWidth=0; static gint charHeight=0; /*********************************************************************************************/ /* window to real space conversion primitive */ void glGetWorldCoords(gint x, gint y, gint height, gdouble *w) { gint i; GLdouble r[3]; GLfloat winX, winY, winZ; glGetIntegerv(GL_VIEWPORT, viewport); glGetDoublev(GL_MODELVIEW_MATRIX, mvmatrix); glGetDoublev(GL_PROJECTION_MATRIX, projmatrix); winX = (float)x; winY = (float)viewport[3] - (float)y; winZ = 0.0; /*glReadPixels( x, (gint)(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ );*/ gluUnProject( winX, winY, winZ, mvmatrix, projmatrix, viewport, &r[0], &r[1], &r[2]); for(i=0;i<3;i++) w[i] = r[i]; } /*********************************************************************************************/ /* real space to window conversion primitive */ void glGetWindowCoords(gdouble *w, gint height, gint *x) { GLdouble r[3]; glGetIntegerv(GL_VIEWPORT, viewport); glGetDoublev(GL_MODELVIEW_MATRIX, mvmatrix); glGetDoublev(GL_PROJECTION_MATRIX, projmatrix); gluProject(w[0], w[1], w[2], mvmatrix, projmatrix, viewport, &r[0], &r[1], &r[2]); x[0] = r[0]; x[1] = height - r[1] - 1; } /*********************************************************************************************/ gint glTextWidth(gchar *str) { return(strlen(str) * glFontsize); } /*********************************************************************************************/ gint glTextHeight() { if(charHeight>0) return charHeight; return(glFontsize); } /*********************************************************************************************/ /* print at a window position */ void glPrintWin(gint x, gint y, gint height, gchar *str) { gdouble w[3]; glGetWorldCoords(x, y, height, w); glRasterPos3f(w[0], w[1], w[2]); gl2psText(str, "Times-Roman", glFontsize); glListBase(fontOffset); glCallLists(strlen(str), GL_UNSIGNED_BYTE, str); } /*********************************************************************************************/ /* print at a world position */ void glPrint(gdouble x, gdouble y, gdouble z, gchar *str) { glRasterPos3f(x,y,z); gl2psText(str, "Times-Roman", glFontsize); glListBase(fontOffset); glCallLists(strlen(str), GL_UNSIGNED_BYTE, str); } /*********************************************************************************************/ void glPrintOrtho(gdouble x, gdouble y, gdouble z, gchar *str, gboolean centerX, gboolean centerY) { gdouble w[] = {x, y, z}; gint xy[] = {0, 0}; glGetIntegerv(GL_VIEWPORT, viewport); glGetWindowCoords(w, viewport[3], xy); glPushMatrix(); glLoadIdentity(); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); gluOrtho2D(0, viewport[2], 0, viewport[3]); if(centerX) xy[0] -= charWidth*strlen(str)/2; if(centerY) xy[1] += charHeight/4; glPrintWin(xy[0], xy[1], viewport[3], str); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); } /*********************************************************************************************/ void glDeleteFontsList() { glDeleteLists(fontOffset,256); } /*********************************************************************************************/ /* pango fonts for OpenGL */ void glInitFontsUsing(gchar* fontname) { OpenGLOptions openGlOptions = get_opengl_options(); /*if (fontOffset >=0) return;*/ /* fprintf(stderr,"FontName = %s\n",fontname);*/ fontOffset = glGenLists(256); if (fontOffset && openGlOptions.activateText==1) { PangoFontDescription *pfd = NULL; PangoFont *pangoFont = NULL; PangoFontMetrics* metrics; pfd = pango_font_description_from_string(fontname); pangoFont = gdk_gl_font_use_pango_font(pfd, 0, 256, fontOffset); if (pangoFont) { glFontsize = pango_font_description_get_size(pfd) / PANGO_SCALE; metrics = pango_font_get_metrics(pangoFont, NULL); charWidth = pango_font_metrics_get_approximate_char_width(metrics); charHeight = pango_font_metrics_get_ascent(metrics) +pango_font_metrics_get_descent(metrics); charWidth /= PANGO_SCALE; charHeight /= PANGO_SCALE; pango_font_metrics_unref(metrics); } if(pfd) pango_font_description_free(pfd); } } /*********************************************************************************************/ /* pango fonts for OpenGL */ void glInitFonts() { /*if (fontOffset >=0) return;*/ glInitFontsUsing(FontsStyleLabel.fontname); } /*********************************************************************************************/ /* get a World coordinates from scene coordinates */ void glGetWorldCoordsFromSceneCoords(gdouble VScene[], gdouble VWorld[]) { GLdouble mvMatrix[4][4]; gdouble** trMatrix; gdouble** invMatrix; gint i; gint j; glGetDoublev(GL_MODELVIEW_MATRIX, &mvMatrix[0][0]); trMatrix = g_malloc(3*sizeof(gdouble*)); for(i=0;i<3;i++) trMatrix[i] = g_malloc(3*sizeof(gdouble)); for(i=0;i<3;i++) for(j=0;j<3;j++) trMatrix[j][i] = mvMatrix[i][j]; invMatrix = Inverse3(trMatrix); for(i=0;i<3;i++) g_free(trMatrix[i]); g_free(trMatrix); if(invMatrix != NULL) { for(i=0;i<3;i++) { VWorld[i] = 0; for(j=0;j<3;j++) { VWorld[i] += invMatrix[i][j]*VScene[j]; } } for(i=0;i<3;i++) g_free(invMatrix[i]); g_free(invMatrix); } else { for(i=0;i<3;i++) VWorld[i] = 0; VWorld[2] = 1; } } /*********************************************************************************************/ /* get a normal vector to plan of window */ void getNormalPlanWindow(gdouble N[]) { gdouble VScene[3]={0,0,1}; glGetWorldCoordsFromSceneCoords(VScene,N); } /*********************************************************************************************/ /* print at a world position after scaling of scal in scene coordinates*/ void glPrintScale(gdouble x, gdouble y, gdouble z, gdouble scale, gchar *str) { gdouble VScene[]={0,0,0}; gdouble VWorld[]={x,y,z}; GLdouble mvMatrix[4][4]; gdouble** trMatrix; gdouble** invMatrix; gint i; gint j; glGetDoublev(GL_MODELVIEW_MATRIX, &mvMatrix[0][0]); trMatrix = g_malloc(3*sizeof(gdouble*)); for(i=0;i<3;i++) trMatrix[i] = g_malloc(3*sizeof(gdouble)); for(i=0;i<3;i++) for(j=0;j<3;j++) trMatrix[j][i] = mvMatrix[i][j]; for(i=0;i<3;i++) { VScene[i] = 0; for(j=0;j<3;j++) { VScene[i] += trMatrix[i][j]*VWorld[j]; } } VScene[2] += scale; invMatrix = Inverse3(trMatrix); for(i=0;i<3;i++) g_free(trMatrix[i]); g_free(trMatrix); if(invMatrix != NULL) { for(i=0;i<3;i++) { VWorld[i] = 0; for(j=0;j<3;j++) { VWorld[i] += invMatrix[i][j]*VScene[j]; } } for(i=0;i<3;i++) g_free(invMatrix[i]); g_free(invMatrix); } else { VWorld[0] = x; VWorld[1] = y; VWorld[2] = z; } glRasterPos3f(VWorld[0],VWorld[1],VWorld[2]); gl2psText(str, "Times-Roman", glFontsize); glListBase(fontOffset); glCallLists(strlen(str), GL_UNSIGNED_BYTE, str); } /*************************************************************************************/ OpenGLOptions get_opengl_options() { return openGLOptions; } /**********************************************/ void glMaterialdv(GLenum face, GLenum pname, const GLdouble* params) { GLfloat p[4] = {params[0],params[1],params[2], params[3]}; glMaterialfv(face, pname, p); } /**********************************************/ void glLightdv(GLenum face, GLenum pname, const GLdouble* params) { GLfloat p[4] = {params[0],params[1],params[2], params[3]}; glLightfv(face, pname, p); } /**********************************************/ void glFogdv(GLenum pname, const GLdouble* params) { GLfloat p[4] = {params[0],params[1],params[2], params[3]}; glFogfv(pname, p); } /*********************************************************************************************/ void mYPerspective( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar ) { GLdouble xmin, xmax, ymin, ymax; ymax = zNear * tan( fovy * PI / 360.0 ); ymin = -ymax; xmin = ymin * aspect; xmax = ymax * aspect; glFrustum( xmin, xmax, ymin, ymax, zNear, zFar ); } /* Sphere.c */ /************************************************************************************************************/ void Sphere_Draw_Precision(GLdouble radius,V3d position, GLint numberOfSubdivisions) { GLUquadricObj *obj; glPushMatrix(); glTranslated(position[0],position[1],position[2]); obj = gluNewQuadric(); gluQuadricNormals(obj, GL_SMOOTH); gluQuadricDrawStyle(obj, GLU_FILL); gluSphere(obj, radius, numberOfSubdivisions*2, numberOfSubdivisions); gluDeleteQuadric(obj); glTranslated(-position[0],-position[1],-position[2]); glPopMatrix(); } /************************************************************************************************************/ void Sphere_Draw_Color_Precision(GLdouble radius,V3d position, V4d Specular,V4d Diffuse,V4d Ambiant, GLint numberOfSubdivisions) { static GLdouble emission[] = { 0.0, 0.0, 0.0, 1.0 }; glMaterialdv(GL_FRONT_AND_BACK,GL_SPECULAR,Specular); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,Diffuse); glMaterialdv(GL_FRONT_AND_BACK,GL_AMBIENT,Ambiant); glMaterialdv(GL_FRONT, GL_EMISSION, emission); glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,100); Sphere_Draw_Precision(radius,position, numberOfSubdivisions); } /************************************************************************************************************/ void Sphere_Draw(GLdouble radius,V3d position) { GLUquadricObj *obj; OpenGLOptions openGLOptions = get_opengl_options(); glPushMatrix(); glTranslated(position[0],position[1],position[2]); obj = gluNewQuadric(); gluQuadricNormals(obj, GL_SMOOTH); gluQuadricDrawStyle(obj, GLU_FILL); gluSphere(obj, radius, (GLint)openGLOptions.numberOfSubdivisionsSphere, (GLint)openGLOptions.numberOfSubdivisionsSphere); gluDeleteQuadric(obj); glTranslated(-position[0],-position[1],-position[2]); glPopMatrix(); } /************************************************************************************************************/ void Sphere_Draw_Color(GLdouble radius,V3d position, V4d Specular,V4d Diffuse,V4d Ambiant) { static GLdouble emission[] = { 0.0, 0.0, 0.0, 1.0 }; glMaterialdv(GL_FRONT_AND_BACK,GL_SPECULAR,Specular); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,Diffuse); glMaterialdv(GL_FRONT_AND_BACK,GL_AMBIENT,Ambiant); glMaterialdv(GL_FRONT, GL_EMISSION, emission); glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,100); Sphere_Draw(radius,position); } /************************************************************************************************************/ GLuint Sphere_Get_List(int i,GLdouble radius,V4d Specular,V4d Diffuse,V4d Ambiant) { GLuint sphere; V3d position={0,0,0}; sphere = glGenLists(i); glNewList(sphere, GL_COMPILE); Sphere_Draw_Color(radius,position,Specular,Diffuse,Ambiant); glEndList(); return sphere; } /************************************************************************************************************/ void Sphere_Draw_From_List(GLuint sphere,V3d position) { glPushMatrix(); glTranslated(position[0],position[1],position[2]); if (glIsList(sphere) == GL_TRUE) glCallList(sphere); else printf("list error Sphere.c file\n"); glPopMatrix(); } /* Cylinder */ /************************************************************************/ void rotated_vector(V3d v) { V3d vz={0.0,0.0,1.0}; V3d vert; gdouble angle; v3d_cross(vz,v,vert); angle = acos(v3d_dot(vz,v)/v3d_length(v))*RAD_TO_DEG; if(fabs(angle)<1e-6) return; if(fabs(angle-180)<1e-6) glRotated(angle, 1.0, 0.0, 0.0); else glRotated(angle, vert[0],vert[1],vert[2]); } /************************************************************************/ void Cylinder_Draw(GLdouble radius,V3d Base1Pos,V3d Base2Pos) { V3d Direction; OpenGLOptions openGLOptions = get_opengl_options(); GLUquadricObj *obj; glPushMatrix(); glTranslated(Base1Pos[0],Base1Pos[1],Base1Pos[2]); Direction[0] = Base2Pos[0]-Base1Pos[0]; Direction[1] = Base2Pos[1]-Base1Pos[1]; Direction[2] = Base2Pos[2]-Base1Pos[2]; rotated_vector(Direction); obj = gluNewQuadric(); gluQuadricNormals(obj, GL_SMOOTH); gluQuadricDrawStyle(obj, GLU_FILL); gluCylinder (obj,radius,radius,v3d_length(Direction),(GLint)openGLOptions.numberOfSubdivisionsCylindre,1); gluDeleteQuadric(obj); glPopMatrix(); } /************************************************************************/ void Cylinder_Draw_Color(GLdouble radius,V3d Base1Pos,V3d Base2Pos, V4d Specular,V4d Diffuse,V4d Ambiant) { glMaterialdv(GL_FRONT_AND_BACK,GL_SPECULAR,Specular); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,Diffuse); glMaterialdv(GL_FRONT_AND_BACK,GL_AMBIENT,Ambiant); glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,50); Cylinder_Draw(radius,Base1Pos,Base2Pos); } /************************************************************************/ void Cylinder_Draw_Color_Two(GLdouble radius,V3d Base1Pos,V3d Base2Pos, V4d Specular1,V4d Diffuse1,V4d Ambiant1, V4d Specular2,V4d Diffuse2,V4d Ambiant2, GLdouble p1,GLdouble p2) { V3d Center; GLdouble p = p1 + p2; Center[0] = (Base1Pos[0]*p2 + Base2Pos[0]*p1)/p; Center[1] = (Base1Pos[1]*p2 + Base2Pos[1]*p1)/p; Center[2] = (Base1Pos[2]*p2 + Base2Pos[2]*p1)/p; Cylinder_Draw_Color(radius,Base1Pos,Center,Specular1,Diffuse1,Ambiant1); Cylinder_Draw_Color(radius,Center,Base2Pos,Specular2,Diffuse2,Ambiant2); } /************************************************************************/ void Prism_Draw(GLdouble radius,V3d Base1Pos,V3d Base2Pos) { V3d Direction; double lengt; GLUquadricObj *obj; glPushMatrix(); glTranslated(Base1Pos[0],Base1Pos[1],Base1Pos[2]); Direction[0] = Base2Pos[0]-Base1Pos[0]; Direction[1] = Base2Pos[1]-Base1Pos[1]; Direction[2] = Base2Pos[2]-Base1Pos[2]; lengt = v3d_length(Direction); rotated_vector(Direction); obj = gluNewQuadric(); gluQuadricNormals(obj, GL_SMOOTH); gluQuadricDrawStyle(obj, GLU_FILL); gluCylinder (obj,radius,radius/5,lengt,10,10); gluDeleteQuadric(obj); glPopMatrix(); } /************************************************************************/ void Prism_Draw_Color(GLdouble radius,V3d Base1Pos,V3d Base2Pos, V4d Specular,V4d Diffuse,V4d Ambiant) { glMaterialdv(GL_FRONT_AND_BACK,GL_SPECULAR,Specular); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,Diffuse); glMaterialdv(GL_FRONT_AND_BACK,GL_AMBIENT,Ambiant); glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,50); Prism_Draw(radius,Base1Pos,Base2Pos); } /***************************************************************************************************************/ void Draw_Arrow(V3d vector, GLdouble radius,V3d origin, V4d specular,V4d diffuse,V4d ambiant, gboolean negative) { V3d top; V3d bottom; V3d center; double lengt; gint i; V4d diffuseFleche; V4d ambiantFleche; bottom[0] = origin[0]; bottom[1] = origin[1]; bottom[2] = origin[2]; if(negative) { bottom[0] -= vector[0]; bottom[1] -= vector[1]; bottom[2] -= vector[2]; } top[0] = origin[0] + vector[0]; top[1] = origin[1] + vector[1]; top[2] = origin[2] + vector[2]; lengt = v3d_length(vector); if(radius<0.1) radius = 0.1; if(negative) lengt *=2; center[0] = top[0]; center[1] = top[1]; center[2] = top[2]; top[0] += (top[0]-bottom[0])/lengt*2*radius; top[1] += (top[1]-bottom[1])/lengt*2*radius; top[2] += (top[2]-bottom[2])/lengt*2*radius; Cylinder_Draw_Color(radius/2,bottom,center,specular,diffuse,ambiant); for(i=0;i<3;i++) { diffuseFleche[i] = diffuse[i] *0.6; ambiantFleche[i] = ambiant[i] *0.6; } diffuseFleche[3] = diffuse[3]; ambiantFleche[3] = ambiant[3]; Prism_Draw_Color(radius/1.5,center,top,specular,diffuseFleche,ambiantFleche); } GabeditSrc250/src/Utils/TTables.h0000644000175100017510000000336313130665225017076 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_TTABLES_H__ #define __GABEDIT_TTABLES_H__ typedef struct _TABLE { gint n[3]; gdouble Val; }TABLE; typedef struct _TTABLESGTF { gint NT1; gint NT2; gint NMAX[3]; TABLE* T1; TABLE* T2; gdouble C[3]; gdouble g; }TTABLESGTF; typedef struct _TTABLES { gint N[2]; TTABLESGTF **T; }TTABLES; TTABLES **createTTables(CGTF *AOrb, gint NAOrb, gdouble CutOffInt2); void freeTTables(gint NAOrb, TTABLES** Ttables); #endif /* __GABEDIT_TTABLES_H__*/ GabeditSrc250/src/Utils/GTF.c0000644000175100017510000005335413130665225016160 0ustar alloucheallouche/* GTF.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ /**************************************************************************************** * See MOTECC-90 page 394. Modern Techniques in Computational Chemistry Enrico Clementi * **************************************************************************************/ #include "../../Config.h" #include #include #include #include #include "../Common/Global.h" #include "../Common/GabeditType.h" #include "../Utils/Vector3d.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/MathFunctions.h" #include "../Utils/TTables.h" /********************************************************************************/ static gdouble GTFstarGTF(GTF* p,GTF* q); static gdouble GTFstarGTFstarGTF(GTF* left,GTF* midle, GTF* right); static gdouble GTFstarGTFstarGTFstarGTF(GTF* A,GTF* B, GTF* C, GTF* D); static gdouble f(gint i,gint l,gint m,gdouble A,gdouble B); static gdouble Theta(int i,int r,int l1,int l2, gdouble A, gdouble B, gdouble g); static gdouble B(int i,int ip,int r, int rp, int u, gdouble PQ, gdouble d, gdouble T1,gdouble T2); /********************************************************************************/ static gdouble f(gint i,gint l,gint m,gdouble A,gdouble B) { gint j,jmin,jmax; gdouble sum=0.0; jmin = 0; if(jminl) jmax = l; for( j=jmin;j<=jmax;j++) { sum += binomial(l,j)*binomial(m,i-j)* dpn(-A,l-j)*dpn(-B,m-i+j); } return sum; } /********************************************************************************/ static gdouble Theta(int i,int r,int l1,int l2, gdouble A, gdouble B, gdouble g) { return f(i,l1,l2,A,B)*factorial(i)/factorial(r)/factorial(i-2*r)/pow(g,i-r); } /************************************************************************************************/ static gdouble B(int i,int ip,int r, int rp, int u, gdouble PQ, gdouble d, gdouble T1,gdouble T2) { int ii=i+ip-2*r-2*rp; return m1p(ip+u)*T1*T2* factorial(ii)/factorial(u)/factorial(ii-2*u)*pow(PQ,ii-2*u)/(pow(4.0,i+ip-r-rp)*pow(d,ii-u)); } /**********************************************/ static gdouble myGamma(int n) { return doubleFactorial(2*n-1)*sqrt(PI)/dpn(2,n); } /************************************************************************************************/ static gdouble F(int n,gdouble t) { gdouble et=exp(-t); gdouble twot=2*t; gdouble T=0.0; gdouble x=1.0; int i=0; gdouble DD=1.0; static gdouble TMAX = 50.0; static int MAXFACT = 200; static gdouble acc = 1e-16; if(fabs(t)<=acc) return 1/(gdouble)(2*n+1); if(t>=TMAX) return myGamma(n)/dpn(t,n)/2/sqrt(t); while(fabs(x/T)>acc && (n+i)=MAXFACT) { printf(_("Divergence in F, Ionic integrals")); exit(1); } T *=et; return T; } /*********************************************************************************************************/ static gdouble A(int i,int r, int u,int l1,int l2, gdouble A, gdouble B, gdouble C,gdouble g) { return m1p(i+u)*f(i,l1,l2,A,B)*factorial(i)*dpn(C,i-2*(r+u))/ (factorial(r)*factorial(u)*factorial(i-2*r-2*u)*dpn(4*g,r+u)); } /*********************************************************************************************************/ static gdouble* getFTable(int mMax, gdouble t) { static gdouble tCritic = 30.0; gdouble* Fmt = g_malloc((mMax+1)*sizeof(gdouble)); int m; if(t>tCritic) { Fmt[0] = sqrt(PI/t) * 0.5; for(m=1; m<=mMax; m++) Fmt[m] = Fmt[m-1] * (m-0.5) / t; return Fmt; } Fmt[mMax] = F(mMax,t); gdouble expt = exp(-t); gdouble twot = 2*t; for(m = mMax-1; m>=0; m--) Fmt[m] = (twot * Fmt[m+1] + expt) / (m*2+1); return Fmt; } /**********************************************/ static gdouble GTFstarGTF(GTF* left,GTF* right) { int i,j; gdouble sum[3]; gdouble t; gdouble PA[3]; gdouble PB[3]; gdouble gama=left->Ex+right->Ex; gdouble R2=0.0; gdouble c = 0; for(j=0;j<3;j++) { t=(left->Ex*left->C[j]+right->Ex*right->C[j])/gama; PA[j]=left->C[j]-t; PB[j]=right->C[j]-t; R2 += (left->C[j]-right->C[j])*(left->C[j]-right->C[j]); } c = (PI/gama)*sqrt(PI/gama) *exp(-left->Ex*right->Ex/gama*R2); /* if(fabs(c)<1e-10) return 0;*/ for(j=0;j<3;j++) { sum[j]=0.0; for(i=0;i<=(left->l[j]+right->l[j])/2;i++) { sum[j] +=f(2*i,left->l[j],right->l[j],PA[j],PB[j])*doubleFactorial(2*i-1)/(dpn(2.0,i)*dpn(gama,i)); } } return c*sum[0]*sum[1]*sum[2]; } /**********************************************/ static gdouble GTFstarGTFstarGTF(GTF* left,GTF* midle, GTF* right) { /* A = left; B = right; C = midle */ gdouble sum[3]; gdouble t; gdouble PA[3]; gdouble PB[3]; gdouble P[3]; gdouble QP[3]; gdouble QC[3]; gdouble gama1=left->Ex+right->Ex; gdouble gama=gama1+midle->Ex; gdouble R2AB=0.0; gdouble R2PC=0.0; gdouble c = 0; gint iAB; gint i,j; for(j=0;j<3;j++) { t=(left->Ex*left->C[j]+right->Ex*right->C[j])/gama1; P[j]=t; PA[j]=left->C[j]-t; PB[j]=right->C[j]-t; R2AB += (left->C[j]-right->C[j])*(left->C[j]-right->C[j]); } for(j=0;j<3;j++) { t=(gama1*P[j]+midle->Ex*midle->C[j])/gama; QP[j]=P[j]-t; QC[j]=midle->C[j]-t; R2PC += (P[j]-midle->C[j])*(P[j]-midle->C[j]); } c = (PI/gama)*sqrt(PI/gama)*exp(-left->Ex*right->Ex/gama1*R2AB)*exp(-gama1*midle->Ex/gama*R2PC); /* if(fabs(c)<1e-10) return 0;*/ for(j=0;j<3;j++) { sum[j]=0.0; for(iAB=0;iAB<=(left->l[j]+right->l[j]);iAB++) { gdouble fiAB = f(iAB,left->l[j],right->l[j],PA[j],PB[j]); for(i=0;i<=(iAB+midle->l[j])/2;i++) { sum[j] += fiAB* f(2*i,iAB,midle->l[j],QP[j],QC[j])* doubleFactorial(2*i-1)/(dpn(2.0,i)*dpn(gama,i)); } } } return c*sum[0]*sum[1]*sum[2]; } /**********************************************/ static gdouble GTFstarGTFstarGTFstarGTF(GTF* A,GTF* B, GTF* C, GTF* D) { gdouble sum[3]; gdouble t; gdouble PA[3]; gdouble PB[3]; gdouble QC[3]; gdouble QD[3]; gdouble P[3]; gdouble Q[3]; gdouble GP[3]; gdouble GQ[3]; gdouble gama1=A->Ex+B->Ex; gdouble gama2=C->Ex+D->Ex; gdouble gama=gama1+gama2; gdouble R2AB=0.0; gdouble R2CD=0.0; gdouble R2PQ=0.0; gdouble c = 0; gint iAB; gint iCD; gint i,j; for(j=0;j<3;j++) { t=(A->Ex*A->C[j]+B->Ex*B->C[j])/gama1; P[j]=t; PA[j]=A->C[j]-t; PB[j]=B->C[j]-t; R2AB += (A->C[j]-B->C[j])*(A->C[j]-B->C[j]); } for(j=0;j<3;j++) { t=(C->Ex*C->C[j]+D->Ex*D->C[j])/gama2; Q[j]=t; QC[j]=C->C[j]-t; QD[j]=D->C[j]-t; R2CD += (C->C[j]-D->C[j])*(C->C[j]-D->C[j]); } for(j=0;j<3;j++) { t=(gama1*P[j]+gama2*Q[j])/gama; GP[j]=P[j]-t; GQ[j]=Q[j]-t; R2PQ += (P[j]-Q[j])*(P[j]-Q[j]); } c = (PI/gama)*sqrt(PI/gama) *exp(-A->Ex*B->Ex/gama1*R2AB) *exp(-C->Ex*D->Ex/gama2*R2CD) *exp(-gama1*gama2/gama*R2PQ); for(j=0;j<3;j++) { sum[j]=0.0; for(iAB=0;iAB<=(A->l[j]+B->l[j]);iAB++) { gdouble fiAB = f(iAB,A->l[j],B->l[j],PA[j],PB[j]); for(iCD=0;iCD<=(C->l[j]+D->l[j]);iCD++) { gdouble fiCD = f(iCD,C->l[j],D->l[j],QC[j],QD[j]); for(i=0;i<=(iAB+iCD)/2;i++) { sum[j] += fiAB* fiCD* f(2*i,iAB,iCD,GP[j],GQ[j])* doubleFactorial(2*i-1)/(dpn(2.0,i)*dpn(gama,i)); } } } } return c*sum[0]*sum[1]*sum[2]; } /********************************************************************************/ gdouble normeGTF(GTF* p) { /* p->intf("%f\n",2*p->Ex/Pi); p->intf("%f\n",dp->(4*p->Ex,p->l[0]+p->l[1]+p->l[2])); p->intf("%d\n",p->l[0]); p->intf("%f\n",doubleFactorial(p->l[0])); */ return sqrt(2*p->Ex/PI*sqrt(2*p->Ex/PI)*dpn(4*p->Ex,p->l[0]+p->l[1]+p->l[2]) /(doubleFactorial(p->l[0])*doubleFactorial(p->l[1])*doubleFactorial(p->l[2])) ); } /********************************************************************************/ void normaliseRadialGTF(GTF*p) { GTF q=*p; gint l=q.l[0]+q.l[1]+q.l[2]; q.l[0]=l; q.l[1]=0; q.l[2]=0; p->Coef *= normeGTF(&q); } /********************************************************************************/ void normaliseGTF(GTF*p) { p->Coef *= normeGTF(p); } /********************************************************************************/ gdouble overlapGTF(GTF* p,GTF* q) { return p->Coef*q->Coef*GTFstarGTF(p,q); } /********************************************************************************/ gdouble overlap3GTF(GTF* p,GTF* q, GTF* r) { return p->Coef*q->Coef*r->Coef*GTFstarGTFstarGTF(p,q,r); } /********************************************************************************/ gdouble overlap4GTF(GTF* p,GTF* q, GTF* r, GTF* s) { return p->Coef*q->Coef*r->Coef*s->Coef*GTFstarGTFstarGTFstarGTF(p,q,r,s); } /********************************************************************************/ gdouble GTFxyzGTF(GTF* p,GTF* q, gint ix, gint iy, gint iz) { GTF m; m.Coef = 1.0; m.l[0] = ix; m.l[1] = iy; m.l[2] = iz; m.Ex = 0.0; m.C[0] = 0.0; m.C[1] = 0.0; m.C[2] = 0.0; return overlap3GTF(p,&m,q); } /********************************************************************************/ gdouble kineticGTF(GTF* left, GTF* right) { int j; GTF a,b; gdouble Ti[7]; gdouble sum[3]; gdouble T=0.0; for(j=0;j<7;j++) Ti[j]=0.0; a = *left; b = *right; Ti[0] = GTFstarGTF(&a,&b); b.l[0] = right->l[0] +2; b.l[1] = right->l[1] ; b.l[2] = right->l[2] ; Ti[1] = GTFstarGTF(&a,&b); b.l[0] = right->l[0] ; b.l[1] = right->l[1]+2 ; b.l[2] = right->l[2] ; Ti[2] = GTFstarGTF(&a,&b); b.l[0] = right->l[0] ; b.l[1] = right->l[1] ; b.l[2] = right->l[2]+2 ; Ti[3] = GTFstarGTF(&a,&b); b.l[0] = right->l[0]-2 ; b.l[1] = right->l[1] ; b.l[2] = right->l[2] ; if(b.l[0]>=0) Ti[4] = GTFstarGTF(&a,&b); b.l[0] = right->l[0] ; b.l[1] = right->l[1]-2 ; b.l[2] = right->l[2] ; if(b.l[1]>=0) Ti[5] = GTFstarGTF(&a,&b); b.l[0] = right->l[0] ; b.l[1] = right->l[1] ; b.l[2] = right->l[2]-2 ; if(b.l[2]>=0) Ti[6] = GTFstarGTF(&a,&b); sum[0] = right->Ex*(2*(right->l[0]+right->l[1]+right->l[2]) +3 )*Ti[0]; sum[1] = 0.0; for(j=1;j<=3;j++) sum[1] += Ti[j]; sum[1] =-2*right->Ex*right->Ex*sum[1]; sum[2] = 0.0; for(j=4;j<=6;j++) sum[2] += right->l[j-4]*(right->l[j-4]-1)*Ti[j]; sum[2] *=-0.5; for(j=0;j<3;j++) T += sum[j] ; return T*left->Coef*right->Coef; } /********************************************************************************/ gdouble ionicPotentialGTF(GTF* left, GTF* right,gdouble* C,gdouble Z) { gint i,r,u; gint j,s,n; gint k,t,w; gdouble Sx,Sy,Sz; gdouble temp; gdouble PA[3]; gdouble PB[3]; gdouble PC[3]; gdouble gama=left->Ex+right->Ex; gdouble R2=0.0; gdouble PC2=0.0; gdouble sum; gdouble* FTable = NULL; for(j=0;j<3;j++) { temp=(left->Ex*left->C[j]+right->Ex*right->C[j])/gama; PA[j]=left->C[j]-temp; PB[j]=right->C[j]-temp; PC[j]=-C[j]+temp; R2 += (left->C[j]-right->C[j])*(left->C[j]-right->C[j]); PC2 += PC[j]*PC[j]; } FTable = getFTable(left->l[0]+right->l[0]+left->l[1]+right->l[1]+left->l[2]+right->l[2], gama*PC2); sum=0.0; for(i=0;i<=left->l[0]+right->l[0];i++) for(r=0;r<=i/2;r++) for(u=0;u<=(i-2*r)/2;u++) { Sx=A(i,r,u,left->l[0],right->l[0],PA[0],PB[0],PC[0],gama); for(j=0;j<=left->l[1]+right->l[1];j++) for(s=0;s<=j/2;s++) for(n=0;n<=(j-2*s)/2;n++) { Sy=A(j,s,n,left->l[1],right->l[1],PA[1],PB[1],PC[1],gama); for(k=0;k<=left->l[2]+right->l[2];k++) for(t=0;t<=k/2;t++) for(w=0;w<=(k-2*t)/2;w++) { Sz=A(k,t,w,left->l[2],right->l[2],PA[2],PB[2],PC[2],gama); /*sum+=Sx*Sy*Sz*F(i+j+k-2*(r+s+t)-u-n-w,gama*PC2);*/ sum+=Sx*Sy*Sz*FTable[i+j+k-2*(r+s+t)-u-n-w]; /* printf("Sx=%f Sy=%f Sz=%f F=%f\n", Sx,Sy,Sz,F(i+j+k-2*(r+s+t)-u-n-w,gama*PC2)); */ } } } g_free(FTable); sum *=2*PI/gama*exp(-left->Ex*right->Ex/gama*R2)*left->Coef*right->Coef; return -Z*sum; } /************************************************************************************************/ gdouble ERIGTF(GTF* p,GTF* q, GTF* r, GTF* s) { int I,Ip,R,Rp,U; int J,Jp,S,Sp,N; int K,Kp,T,Tp,W; gdouble Sx,Sy,Sz; gdouble Te[2][3]; gdouble temp1,temp2; gdouble PA[3]; gdouble PB[3]; gdouble QC[3]; gdouble QD[3]; gdouble PQ[3]; gdouble g1=p->Ex+q->Ex; gdouble g2=r->Ex+s->Ex; gdouble d=(1.0/g1+1./g2)/4; gdouble RAB2=0.0; gdouble RCD2=0.0; gdouble RPQ2=0.0; int j; gdouble sum; for(j=0;j<3;j++) { temp1=(p->Ex*p->C[j]+q->Ex*q->C[j])/g1; PA[j]=p->C[j]-temp1; PB[j]=q->C[j]-temp1; temp2=(r->Ex*r->C[j]+s->Ex*s->C[j])/g2; QC[j]=r->C[j]-temp2; QD[j]=s->C[j]-temp2; PQ[j]=temp2-temp1; RAB2 += (p->C[j]-q->C[j])*(p->C[j]-q->C[j]); RCD2 += (r->C[j]-s->C[j])*(r->C[j]-s->C[j]); RPQ2 += PQ[j]*PQ[j]; } sum=0.0; for(I=0;I<=p->l[0]+q->l[0];I++) for(R=0;R<=I/2;R++) { Te[0][0]=Theta(I,R,p->l[0],q->l[0],PA[0], PB[0],g1); for(Ip=0;Ip<=r->l[0]+s->l[0];Ip++) for(Rp=0;Rp<=Ip/2;Rp++) { Te[1][0]=Theta(Ip,Rp,r->l[0],s->l[0],QC[0], QD[0],g2); for(U=0;U<=(I+Ip)/2-R-Rp;U++) { Sx=B(I,Ip,R,Rp,U,PQ[0],d,Te[0][0],Te[1][0]); for(J=0;J<=p->l[1]+q->l[1];J++) for(S=0;S<=J/2;S++) { Te[0][1]=Theta(J,S,p->l[1],q->l[1],PA[1], PB[1],g1); for(Jp=0;Jp<=r->l[1]+s->l[1];Jp++) for(Sp=0;Sp<=Jp/2;Sp++) { Te[1][1]=Theta(Jp,Sp,r->l[1],s->l[1],QC[1], QD[1],g2); for(N=0;N<=(J+Jp)/2-S-Sp;N++) { Sy=B(J,Jp,S,Sp,N,PQ[1],d,Te[0][1],Te[1][1]); for(K=0;K<=p->l[2]+q->l[2];K++) for(T=0;T<=K/2;T++) { Te[0][2]=Theta(K,T,p->l[2],q->l[2],PA[2], PB[2],g1); for(Kp=0;Kp<=r->l[2]+s->l[2];Kp++) for(Tp=0;Tp<=Kp/2;Tp++) { Te[1][2]=Theta(Kp,Tp,r->l[2],s->l[2],QC[2], QD[2],g2); for(W=0;W<=(K+Kp)/2-T-Tp;W++) { Sz=B(K,Kp,T,Tp,W,PQ[2],d,Te[0][2],Te[1][2]); sum +=Sx*Sy*Sz*F(I+Ip+J+Jp+K+Kp-2*(R+Rp+S+Sp+T+Tp)-U-N-W,RPQ2/4/d); } } } } } } } } } sum*=2*PI*PI*sqrt(PI)/g1/g2/sqrt(g1+g2)* exp(-p->Ex*q->Ex*RAB2/g1)*exp(-r->Ex*s->Ex*RCD2/g2)* p->Coef*q->Coef*r->Coef*s->Coef; return sum; } /**********************************************/ gdouble ERITABLES(gint i,gint j,gint k,gint l,gint ni,gint nj,gint nk,gint nl,TTABLES** Ttables) { gint m[3]; gdouble g1; gdouble g2; gdouble sqrtg12; gdouble d; gdouble PQ2s4d=0.0; gdouble sum=0.0; gdouble PQ[3]; static gdouble *Fk = NULL; static gdouble **PQn = NULL; gint nt1; gint nt2; gdouble et; gdouble tp; gint c; gint mm; static gint mFk = 20; static gint mPQn[3] = {20,20,20}; TTABLESGTF pij; TTABLESGTF pkl; gint NT1; gint NT2; if(!Ttables)return -1.0; g1=Ttables[i][j].T[ni][nj].g; g2=Ttables[k][l].T[nk][nl].g; sqrtg12=1/sqrt(g1+g2); d = (1/g1+1/g2)/4; pij = Ttables[i][j].T[ni][nj]; pkl = Ttables[k][l].T[nk][nl]; NT1 = pij.NT1; NT2 = pkl.NT2; for(c=0;c<3;c++) { PQ[c]=pkl.C[c]-pij.C[c]; PQ2s4d +=PQ[c]*PQ[c]; } PQ2s4d /=4*d; et=exp(-PQ2s4d); tp=2*PQ2s4d; m[0]=pij.NMAX[0]+pkl.NMAX[0]; m[1]=pij.NMAX[1]+pkl.NMAX[1]; m[2]=pij.NMAX[2]+pkl.NMAX[2]; mm = m[0]+m[1]+m[2]; if(!Fk) Fk=g_malloc(mFk*sizeof(gdouble)); if(Fk && mm>mFk) { g_free(Fk); mFk = 2*(mm+1); Fk=g_malloc(mFk*sizeof(gdouble)); } if(fabs(tp)<=1e-10) { for(c=mm;c>=0;c--) Fk[c]=1.0/(gdouble)(2*c+1); } else { Fk[mm] =F(mm,PQ2s4d); for(c=mm-1;c>=0;c--) Fk[c]=(tp*Fk[c+1]+et)/(2*c+1); } for(c=mm;c>=0;c--) { Fk[c]/=dpn(d,c); Fk[c]*=sqrtg12; } if(!PQn) { PQn=g_malloc(3*sizeof(gdouble*)); PQn[0]=g_malloc(mPQn[0]*sizeof(gdouble)); PQn[1]=g_malloc(mPQn[1]*sizeof(gdouble)); PQn[2]=g_malloc(mPQn[2]*sizeof(gdouble)); } for(c=0;c<3;c++) if(PQn && mPQn[c]<(m[c]+1)) { g_free(PQn[c]); mPQn[c]=2*(m[c]+1); PQn[c]=g_malloc(mPQn[c]*sizeof(gdouble)); } PQn[0][0]=1.0; for(c=1;c<=m[0];c++) PQn[0][c]=PQn[0][c-1]*PQ[0]; PQn[1][0]=1.0; for(c=1;c<=m[1];c++) PQn[1][c]=PQn[1][c-1]*PQ[1]; PQn[2][0]=1.0; for(c=1;c<=m[2];c++) PQn[2][c]=PQn[2][c-1]*PQ[2]; for(nt1=0;nt1numberOfFunctions;np++) for(nq=0;nqnumberOfFunctions;nq++) for(nr=0;nrnumberOfFunctions;nr++) for(ns=0;nsnumberOfFunctions;ns++) sum += ERIGTF(&(p->Gtf[np]),&(q->Gtf[nq]),&(r->Gtf[nr]),&(s->Gtf[ns])); return sum; } /*********************************************************/ void normaliseCGTF(CGTF* left) { gint n,np; gdouble sum=0.0; for(n=0 ; nnumberOfFunctions ; n++) sum += left->Gtf[n].Coef*left->Gtf[n].Coef* GTFstarGTF(&(left->Gtf[n]),&(left->Gtf[n])); for(n=0;nnumberOfFunctions-1 ; n++) for(np=n+1; npnumberOfFunctions; np++) sum += 2*left->Gtf[n].Coef*left->Gtf[np].Coef*GTFstarGTF(&(left->Gtf[n]),&(left->Gtf[np])); if(sum>1.e-20) { sum = sqrt(sum); for(n=0 ; nnumberOfFunctions ; n++) left->Gtf[n].Coef /= sum; } else { printf(_("A Contacted Gaussian Type function is nul")); exit(1); } } /********************************************************************************************/ gdouble overlapCGTF(CGTF* left, CGTF* right) { gdouble sum=0.0; gint n; gint np; for(n=0;nnumberOfFunctions;n++) for(np=0;npnumberOfFunctions;np++) sum += overlapGTF(&(left->Gtf[n]),&(right->Gtf[np])); return sum; } /********************************************************************************************/ gdouble overlap3CGTF(CGTF* left, CGTF* midle, CGTF* right) { gdouble sum=0.0; gint n; gint np; gint ns; for(n=0;nnumberOfFunctions;n++) for(np=0;npnumberOfFunctions;np++) for(ns=0;nsnumberOfFunctions;ns++) sum += overlap3GTF(&(left->Gtf[n]),&(midle->Gtf[np]), &(right->Gtf[ns])); return sum; } /********************************************************************************************/ gdouble overlap4CGTF(CGTF* A, CGTF* B, CGTF* C, CGTF* D) { gdouble sum=0.0; gint np; gint nq; gint nr; gint ns; for(np=0;npnumberOfFunctions;np++) for(nq=0;nqnumberOfFunctions;nq++) for(nr=0;nrnumberOfFunctions;nr++) for(ns=0;nsnumberOfFunctions;ns++) sum += overlap4GTF(&(A->Gtf[np]),&(B->Gtf[nq]), &(C->Gtf[nr]), &(D->Gtf[ns])); return sum; } /********************************************************************************************/ gdouble CGTFxyzCGTF(CGTF* left, CGTF* right, gint ix, gint iy, gint iz) { gdouble sum=0.0; gint n; gint ns; GTF m; m.Coef = 1.0; m.l[0] = ix; m.l[1] = iy; m.l[2] = iz; m.Ex = 0.0; m.C[0] = 0.0; m.C[1] = 0.0; m.C[2] = 0.0; for(n=0;nnumberOfFunctions;n++) for(ns=0;nsnumberOfFunctions;ns++) sum += overlap3GTF(&(left->Gtf[n]),&m, &(right->Gtf[ns])); return sum; } /********************************************************************************************/ gdouble kineticCGTF(CGTF* left, CGTF* right) { gint n; gint np; gdouble sum=0.0; for(n=0;nnumberOfFunctions;n++) for(np=0;npnumberOfFunctions;np++) sum += kineticGTF(&(left->Gtf[n]),&(right->Gtf[np])); return sum; } /********************************************************************************************/ gdouble ionicPotentialCGTF(CGTF* left, CGTF* right, gdouble* C, gdouble Z) { gint n; gint np; gdouble sum=0.0; for(n=0;nnumberOfFunctions;n++) for(np=0;npnumberOfFunctions;np++) sum += ionicPotentialGTF(&(left->Gtf[n]),&(right->Gtf[np]), C, Z); return sum; } /********************************************************************************************/ gdouble CGTFstarCGTF(CGTF* left, CGTF* right) { gint n; gint np; gdouble sum=0.0; for(n=0;nnumberOfFunctions;n++) for(np=0;npnumberOfFunctions;np++) sum += GTFstarGTF(&(left->Gtf[n]),&(right->Gtf[np])); return sum; } /********************************************************************************************/ gboolean CGTFEqCGTF(CGTF* t1,CGTF* t2) { gint i; gint c; if(t1->numberOfFunctions != t2->numberOfFunctions) return FALSE; for(i=0;i<3;i++) if(t1->Gtf[0].l[i] != t2->Gtf[0].l[i]) return FALSE; for(i=0;inumberOfFunctions;i++) { if(fabs(t1->Gtf[i].Ex-t2->Gtf[i].Ex)>1e-10) return FALSE; if(fabs(t1->Gtf[i].Coef-t2->Gtf[i].Coef)>1e-10) return FALSE; for(c=0;c<3;c++) if(fabs(t1->Gtf[i].C[c]-t2->Gtf[i].C[c])>1e-10) return FALSE; } return TRUE; } GabeditSrc250/src/Utils/AtomsProp.h0000644000175100017510000000413113130665225017456 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_ATOMSPROP_H__ #define __GABEDIT_ATOMSPROP_H__ #define PERIODIC_TABLE_N_ROWS 10 #define PERIODIC_TABLE_N_COLUMNS 18 gchar*** get_periodic_table(); gchar* get_symbol_using_z(gint z); gdouble get_atomic_number_from_symbol(gchar* symbol); gdouble get_masse_from_symbol(gchar* symbol); gboolean test_atom_define(gchar *Symb); void prop_atom_free(SAtomsProp* prop); SAtomsProp prop_atom_get(const gchar *); void define_default_atoms_prop(); gchar *symb_atom_get(gint); void create_table_prop_in_window(GtkWidget *WinTable,GtkWidget *frame); void create_table_prop(); void save_atoms_prop(); gboolean read_atoms_prop(); GtkStyle *set_button_style( GtkStyle *button_style,GtkWidget *button,gchar *Symb); void create_table_prop_in_vbox(GtkWidget *WinTable,GtkWidget *Vbox); #endif /* __GABEDIT_ATOMSPROP_H__ */ GabeditSrc250/src/Utils/Makefile0000644000175100017510000000122313130664665017027 0ustar allouchealloucheOBJECTS = GabeditTextEdit.o AtomsProp.o Jacobi.o QL.o Transformation.o Utils.o UtilsInterface.o Vector3d.o Matrix3D.o HydrogenBond.o PovrayUtils.o UtilsGL.o ConvUtils.o GabeditXYPlot.o GabeditContoursPlot.o UtilsCairo.o Zlm.o MathFunctions.o GTF.o TTables.o Interpolation.o Point3D.o UtilsVASP.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) $(OGLCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/Utils/GabeditXYPlot.h0000644000175100017510000002614613130665225020223 0ustar alloucheallouche/* GabeditXYPlot.h */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GABEDITXYPLOT_H__ #define __GABEDIT_GABEDITXYPLOT_H__ #include #include G_BEGIN_DECLS typedef enum { GABEDIT_XYPLOT_HMAJOR_GRID, GABEDIT_XYPLOT_HMINOR_GRID, GABEDIT_XYPLOT_VMAJOR_GRID, GABEDIT_XYPLOT_VMINOR_GRID } GabeditXYPlotGrid; typedef enum { GABEDIT_XYPLOT_CONV_NONE, GABEDIT_XYPLOT_CONV_LORENTZ, GABEDIT_XYPLOT_CONV_GAUSS } GabeditXYPlotConvType; #define GABEDIT_TYPE_XYPLOT (gabedit_xyplot_get_type ()) #define GABEDIT_XYPLOT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GABEDIT_TYPE_XYPLOT, GabeditXYPlot)) #define GABEDIT_XYPLOT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GABEDIT_TYPE_XYPLOT, GabeditXYPlotClass)) #define GABEDIT_IS_XYPLOT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GABEDIT_TYPE_XYPLOT)) #define GABEDIT_IS_XYPLOT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GABEDIT_TYPE_XYPLOT)) #define GABEDIT_XYPLOT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GABEDIT_TYPE_XYPLOT, GabeditXYPlotClass)) typedef struct { gint xi; gint yi; gint width; gint height; gdouble x; gdouble y; gdouble angle; gchar* str; PangoLayout* pango; }XYPlotObjectText; typedef struct { gint x1i; gint y1i; gint x2i; gint y2i; gdouble x1; gdouble y1; gdouble x2; gdouble y2; gint width; gint arrow_size; GdkColor color; GdkLineStyle style; }XYPlotObjectLine; typedef struct { gdouble x; /* realtive x : 0(left) 1(right) window*/ gdouble y; gdouble width; gdouble height; gint xi; gint yi; gint widthi; gint heighti; gchar* fileName; cairo_surface_t *image; }XYPlotObjectImage; typedef struct { gdouble *x, *y; gint size; gchar point_str[100]; PangoLayout* point_pango; gint point_size; gint point_width, point_height; gint line_width; GdkColor point_color, line_color; GdkLineStyle line_style; }XYPlotData; typedef struct _GabeditXYPlot GabeditXYPlot; typedef struct _GabeditXYPlotClass GabeditXYPlotClass; struct _GabeditXYPlot { GtkWidget widget; gdouble xmin, xmax, ymin, ymax; GdkPixmap *plotting_area; GdkPixmap *old_area; cairo_t *cairo_widget; cairo_t *cairo_area; cairo_t *cairo_export; GdkRectangle plotting_rect; gint x_legends_digits; gint y_legends_digits; gint length_ticks; gint hmajor_ticks, hminor_ticks; gint vmajor_ticks, vminor_ticks; gdouble d_hmajor, d_hminor; gdouble d_vmajor, d_vminor; gint left_margins, right_margins, top_margins, bottom_margins; gdouble d_hlegend, d_vlegend; GdkGC *back_gc; GdkGC *fore_gc; PangoLayout **h_legends; PangoLayout **v_legends; gchar** h_legends_str; gchar** v_legends_str; gint x_legends_width; gint x_legends_height; gint y_legends_width; gint y_legends_height; gchar *h_label_str; gchar *v_label_str; PangoLayout *h_label; PangoLayout *v_label; gint h_label_width; gint h_label_height; gint v_label_width; gint v_label_height; GdkGC *hmajor_grid_gc; GdkGC *hminor_grid_gc; GdkGC *vmajor_grid_gc; GdkGC *vminor_grid_gc; gboolean hmajor_grid; gboolean hminor_grid; gboolean vmajor_grid; gboolean vminor_grid; gboolean show_left_legends; gboolean show_right_legends; gboolean show_top_legends; gboolean show_bottom_legends; gboolean show_rectangle_legends; gboolean reflect_x; gboolean reflect_y; GList *data_list; GdkGC *data_gc; GdkGC *lines_gc; gint mouse_button; gboolean mouse_zoom_enabled; gboolean mouse_distance_enabled; gint mouse_zoom_button; gint mouse_distance_button; GdkPoint zoom_point; GdkPoint distance_point; GdkPoint object_begin_point; GdkPoint object_end_point; GdkRectangle zoom_rect; GdkRectangle distance_rect; gboolean mouse_displace_enabled; gint mouse_displace_button; GdkPoint move_point; gboolean wheel_zoom_enabled; gdouble wheel_zoom_factor; gboolean mouse_autorange_enabled; gint mouse_autorange_button; gint font_size; gboolean double_click; gboolean shift_key_pressed; gboolean control_key_pressed; gint nObjectsText; XYPlotObjectText* objectsText; gint selected_objects_text_num; gboolean t_key_pressed; gint nObjectsLine; XYPlotObjectLine* objectsLine; gint selected_objects_line_num; gint selected_objects_line_type; gboolean l_key_pressed; gint nObjectsImage; XYPlotObjectImage* objectsImage; gint selected_objects_image_num; gboolean i_key_pressed; gboolean r_key_pressed; }; struct _GabeditXYPlotClass { GtkWidgetClass parent_class; }; GtkWidget* gabedit_xyplot_new (); GType gabedit_xyplot_get_type (); void gabedit_xyplot_set_range (GabeditXYPlot *xyplot, gdouble xmin, gdouble xmax, gdouble ymin, gdouble ymax); void gabedit_xyplot_set_range_xmin (GabeditXYPlot *xyplot, gdouble xmin); void gabedit_xyplot_set_range_xmax (GabeditXYPlot *xyplot, gdouble xmax); void gabedit_xyplot_set_range_ymin (GabeditXYPlot *xyplot, gdouble ymin); void gabedit_xyplot_set_range_ymax (GabeditXYPlot *xyplot, gdouble ymax); void gabedit_xyplot_set_autorange (GabeditXYPlot *xyplot, XYPlotData *data); void gabedit_xyplot_get_range (GabeditXYPlot *xyplot, gdouble *xmin, gdouble *xmax, gdouble *ymin, gdouble *ymax); void gabedit_xyplot_get_reflects (GabeditXYPlot *xyplot, gboolean* rx, gboolean* ry); gboolean gabedit_xyplot_get_point (GabeditXYPlot *xyplot, gint x, gint y, gdouble *xv, gdouble *yv); gboolean gabedit_xyplot_get_point_control (GabeditXYPlot *xyplot, gint x, gint y, gint width, gint height, gdouble angle, gdouble *xv, gdouble *yv); void gabedit_xyplot_set_ticks (GabeditXYPlot *xyplot, gint hmajor, gint hminor, gint vmajor, gint vminor, gint length); void gabedit_xyplot_set_ticks_hmajor (GabeditXYPlot *xyplot, gint hmajor); void gabedit_xyplot_set_ticks_hminor (GabeditXYPlot *xyplot, gint hminor); void gabedit_xyplot_set_ticks_vmajor (GabeditXYPlot *xyplot, gint vmajor); void gabedit_xyplot_set_ticks_vminor (GabeditXYPlot *xyplot, gint vminor); void gabedit_xyplot_set_ticks_length(GabeditXYPlot *xyplot, gint length); void gabedit_xyplot_get_ticks (GabeditXYPlot *xyplot, gint *hmajor, gint *hminor, gint *vmajor, gint *vminor, gint* length); void gabedit_xyplot_set_margins_left (GabeditXYPlot *xyplot, gint left); void gabedit_xyplot_set_margins_right (GabeditXYPlot *xyplot, gint right); void gabedit_xyplot_set_margins_top (GabeditXYPlot *xyplot, gint top); void gabedit_xyplot_set_margins_bottom (GabeditXYPlot *xyplot, gint bottom); void gabedit_xyplot_set_x_legends_digits (GabeditXYPlot *xyplot, gint digits); void gabedit_xyplot_set_y_legends_digits (GabeditXYPlot *xyplot, gint digits); gint gabedit_xyplot_get_x_legends_digits (GabeditXYPlot *xyplot); gint gabedit_xyplot_get_y_legends_digits (GabeditXYPlot *xyplot); void gabedit_xyplot_set_background_color (GabeditXYPlot *xyplot, GdkColor color); void gabedit_xyplot_set_grids_attributes (GabeditXYPlot *xyplot, GabeditXYPlotGrid grid, GdkColor color, gint line_width, GdkLineStyle line_style); void gabedit_xyplot_get_grids_attributes (GabeditXYPlot *xyplot, GabeditXYPlotGrid grid, GdkColor *color, gint *line_width, GdkLineStyle *line_style); void gabedit_xyplot_enable_grids (GabeditXYPlot *xyplot, GabeditXYPlotGrid grid, gboolean enable); void gabedit_xyplot_add_data (GabeditXYPlot *xyplot, XYPlotData *data); void gabedit_xyplot_remove_data (GabeditXYPlot *xyplot, XYPlotData *data); void gabedit_xyplot_add_data_peaks(GabeditXYPlot *xyplot, gint numberOfPoints, gdouble* X, gdouble* Y, GdkColor* color); void gabedit_xyplot_add_data_conv(GabeditXYPlot *xyplot, gint numberOfPoints, gdouble* X, gdouble* Y, gdouble halfWidth,GabeditXYPlotConvType convType, GdkColor* color); void gabedit_xyplot_configure_mouse_zoom (GabeditXYPlot *xyplot, gboolean enabled, gint button); void gabedit_xyplot_configure_mouse_distance (GabeditXYPlot *xyplot, gboolean enabled, gint button); void gabedit_xyplot_configure_wheel_zoom (GabeditXYPlot *xyplot, gboolean enabled, gdouble factor); void gabedit_xyplot_configure_mouse_displace (GabeditXYPlot *xyplot, gboolean enabled, gint button); void gabedit_xyplot_configure_mouse_autorange (GabeditXYPlot *xyplot, gboolean enabled, gint button); void gabedit_xyplot_save_image(GabeditXYPlot *xyplot, gchar *fileName, gchar* type); void gabedit_xyplot_reflect_x (GabeditXYPlot *xyplot, gboolean reflection); void gabedit_xyplot_reflect_y (GabeditXYPlot *xyplot, gboolean reflection); void gabedit_xyplot_show_left_legends (GabeditXYPlot *xyplot, gboolean show); void gabedit_xyplot_show_right_legends (GabeditXYPlot *xyplot, gboolean show); void gabedit_xyplot_show_top_legends (GabeditXYPlot *xyplot, gboolean show); void gabedit_xyplot_show_bottom_legends (GabeditXYPlot *xyplot, gboolean show); void gabedit_xyplot_show_rectangle_legends (GabeditXYPlot *xyplot, gboolean show); void gabedit_xyplot_set_font (GabeditXYPlot *xyplot, gchar* fontName); void gabedit_xyplot_set_x_label (GabeditXYPlot *xyplot, G_CONST_RETURN gchar* str); void gabedit_xyplot_set_y_label (GabeditXYPlot *xyplot, G_CONST_RETURN gchar* str); GtkWidget* gabedit_xyplot_new_window(gchar* title, GtkWidget*parent); void gabedit_xyplot_help(); void gabedit_xyplot_set_data_line_width (GabeditXYPlot *xyplot, gdouble line_width); void gabedit_xyplot_set_data_point_size (GabeditXYPlot *xyplot, gdouble point_size); void gabedit_xyplot_set_data_point_type (GabeditXYPlot *xyplot, gchar c); void gabedit_xyplot_set_data_point_color (GabeditXYPlot *xyplot, gdouble red, gdouble green, gdouble blue); void gabedit_xyplot_add_new_data(GtkWidget* xyplot, gint numberOfPoints, gdouble* X, gdouble* Y); void gabedit_xyplot_set_last_data_line_width (GabeditXYPlot *xyplot, gdouble line_width); void gabedit_xyplot_set_last_data_point_size (GabeditXYPlot *xyplot, gdouble point_size); void gabedit_xyplot_add_object_text (GabeditXYPlot *xyplot, gdouble x, gdouble y, gdouble angle, G_CONST_RETURN gchar* str); G_END_DECLS #endif /* __GABEDIT_GABEDITXYPLOT_H__ */ GabeditSrc250/src/Utils/GabeditContoursPlot.h0000644000175100017510000002765013130665225021500 0ustar alloucheallouche/* GabeditContoursPlot.h */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GABEDITContoursPLOT_H__ #define __GABEDIT_GABEDITContoursPLOT_H__ #include #include G_BEGIN_DECLS typedef enum { GABEDIT_ContoursPLOT_HMAJOR_GRID, GABEDIT_ContoursPLOT_HMINOR_GRID, GABEDIT_ContoursPLOT_VMAJOR_GRID, GABEDIT_ContoursPLOT_VMINOR_GRID } GabeditContoursPlotGrid; typedef enum { GABEDIT_ContoursPLOT_CONV_NONE, GABEDIT_ContoursPLOT_CONV_LORENTZ, GABEDIT_ContoursPLOT_CONV_GAUSS } GabeditContoursPlotConvType; #define GABEDIT_TYPE_ContoursPLOT (gabedit_contoursplot_get_type ()) #define GABEDIT_ContoursPLOT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GABEDIT_TYPE_ContoursPLOT, GabeditContoursPlot)) #define GABEDIT_ContoursPLOT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GABEDIT_TYPE_ContoursPLOT, GabeditContoursPlotClass)) #define GABEDIT_IS_ContoursPLOT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GABEDIT_TYPE_ContoursPLOT)) #define GABEDIT_IS_ContoursPLOT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GABEDIT_TYPE_ContoursPLOT)) #define GABEDIT_ContoursPLOT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GABEDIT_TYPE_ContoursPLOT, GabeditContoursPlotClass)) typedef struct { gint xi; gint yi; gint width; gint height; gdouble x; gdouble y; gdouble angle; gchar* str; PangoLayout* pango; }ContoursPlotObjectText; typedef struct { gint x1i; gint y1i; gint x2i; gint y2i; gdouble x1; gdouble y1; gdouble x2; gdouble y2; gint width; gint arrow_size; GdkColor color; GdkLineStyle style; }ContoursPlotObjectLine; typedef struct { gdouble x; /* realtive x : 0(left) 1(right) window*/ gdouble y; gdouble width; gdouble height; gint xi; gint yi; gint widthi; gint heighti; gchar* fileName; cairo_surface_t *image; }ContoursPlotObjectImage; typedef struct { gdouble value; gint size; gdouble* x; gdouble* y; gint* index; gchar point_str[100]; PangoLayout* point_pango; gint point_size; gint point_width, point_height; gint line_width; GdkColor point_color, line_color; GdkLineStyle line_style; gchar* label; gdouble xlabel; gdouble ylabel; }ContourData; typedef struct { gdouble *zValues; gint xsize; gint ysize; gdouble xmin, xmax; gdouble ymin, ymax; gdouble zmin, zmax; gint nContours; ContourData* contours; }ContoursPlotData; typedef struct _OneColorValue { gdouble color[3]; gdouble value; }OneColorValue; typedef struct { gint numberOfColors; OneColorValue* colorValue; }ColorMap; typedef struct { gint type; gdouble colors[3][3]; ColorMap* colorMap; }ContoursColorMap; typedef struct _GabeditContoursPlot GabeditContoursPlot; typedef struct _GabeditContoursPlotClass GabeditContoursPlotClass; struct _GabeditContoursPlot { GtkWidget widget; gdouble xmin, xmax, ymin, ymax; gboolean show_label_contours; ContoursColorMap colorsMap; GdkPixmap *plotting_area; GdkPixmap *old_area; cairo_t *cairo_widget; cairo_t *cairo_area; cairo_t *cairo_export; GdkRectangle plotting_rect; gint x_legends_digits; gint y_legends_digits; gint length_ticks; gint hmajor_ticks, hminor_ticks; gint vmajor_ticks, vminor_ticks; gdouble d_hmajor, d_hminor; gdouble d_vmajor, d_vminor; gint left_margins, right_margins, top_margins, bottom_margins; gdouble d_hlegend, d_vlegend; GdkGC *back_gc; GdkGC *fore_gc; PangoLayout **h_legends; PangoLayout **v_legends; gchar** h_legends_str; gchar** v_legends_str; gint x_legends_width; gint x_legends_height; gint y_legends_width; gint y_legends_height; gchar *h_label_str; gchar *v_label_str; PangoLayout *h_label; PangoLayout *v_label; gint h_label_width; gint h_label_height; gint v_label_width; gint v_label_height; gint colormap_width; gint colormap_height; gint colormap_nlegends; PangoLayout **colormap_legends; gchar** colormap_legends_str; gboolean show_colormap; GdkGC *hmajor_grid_gc; GdkGC *hminor_grid_gc; GdkGC *vmajor_grid_gc; GdkGC *vminor_grid_gc; gboolean hmajor_grid; gboolean hminor_grid; gboolean vmajor_grid; gboolean vminor_grid; gboolean show_left_legends; gboolean show_right_legends; gboolean show_top_legends; gboolean show_bottom_legends; gboolean reflect_x; gboolean reflect_y; GList *data_list; GdkGC *data_gc; GdkGC *lines_gc; gint mouse_button; gboolean mouse_zoom_enabled; gboolean mouse_distance_enabled; gint mouse_zoom_button; gint mouse_distance_button; GdkPoint zoom_point; GdkPoint distance_point; GdkPoint object_begin_point; GdkPoint object_end_point; GdkRectangle zoom_rect; GdkRectangle distance_rect; gboolean mouse_displace_enabled; gint mouse_displace_button; GdkPoint move_point; gboolean wheel_zoom_enabled; gdouble wheel_zoom_factor; gboolean mouse_autorange_enabled; gint mouse_autorange_button; gint font_size; gboolean double_click; gboolean shift_key_pressed; gboolean control_key_pressed; gboolean dashed_negative_contours; gboolean d_key_pressed; gint nObjectsText; ContoursPlotObjectText* objectsText; gint selected_objects_text_num; gboolean t_key_pressed; gint nObjectsLine; ContoursPlotObjectLine* objectsLine; gint selected_objects_line_num; gint selected_objects_line_type; gboolean l_key_pressed; gint nObjectsImage; ContoursPlotObjectImage* objectsImage; gint selected_objects_image_num; gboolean i_key_pressed; gboolean r_key_pressed; }; struct _GabeditContoursPlotClass { GtkWidgetClass parent_class; }; GtkWidget* gabedit_contoursplot_new (); GType gabedit_contoursplot_get_type (); void gabedit_contoursplot_set_range (GabeditContoursPlot *contoursplot, gdouble xmin, gdouble xmax, gdouble ymin, gdouble ymax); void gabedit_contoursplot_set_range_xmin (GabeditContoursPlot *contoursplot, gdouble xmin); void gabedit_contoursplot_set_range_xmax (GabeditContoursPlot *contoursplot, gdouble xmax); void gabedit_contoursplot_set_range_ymin (GabeditContoursPlot *contoursplot, gdouble ymin); void gabedit_contoursplot_set_range_ymax (GabeditContoursPlot *contoursplot, gdouble ymax); void gabedit_contoursplot_set_autorange (GabeditContoursPlot *contoursplot, ContoursPlotData *data); void gabedit_contoursplot_get_range (GabeditContoursPlot *contoursplot, gdouble *xmin, gdouble *xmax, gdouble *ymin, gdouble *ymax); gboolean gabedit_contoursplot_get_point (GabeditContoursPlot *contoursplot, gint x, gint y, gdouble *xv, gdouble *yv); gboolean gabedit_contoursplot_get_point_control(GabeditContoursPlot *contoursplot, gint x, gint y, gint width, gint height, gdouble angle, gdouble *xv, gdouble *yv ); void gabedit_contoursplot_set_ticks (GabeditContoursPlot *contoursplot, gint hmajor, gint hminor, gint vmajor, gint vminor, gint length); void gabedit_contoursplot_set_ticks_hmajor (GabeditContoursPlot *contoursplot, gint hmajor); void gabedit_contoursplot_set_ticks_hminor (GabeditContoursPlot *contoursplot, gint hminor); void gabedit_contoursplot_set_ticks_vmajor (GabeditContoursPlot *contoursplot, gint vmajor); void gabedit_contoursplot_set_ticks_vminor (GabeditContoursPlot *contoursplot, gint vminor); void gabedit_contoursplot_set_ticks_length (GabeditContoursPlot *contoursplot, gint length); void gabedit_contoursplot_get_ticks (GabeditContoursPlot *contoursplot, gint *hmajor, gint *hminor, gint *vmajor, gint *vminor, gint* length); void gabedit_contoursplot_set_margins_left (GabeditContoursPlot *contoursplot, gint left); void gabedit_contoursplot_set_margins_right (GabeditContoursPlot *contoursplot, gint right); void gabedit_contoursplot_set_margins_top (GabeditContoursPlot *contoursplot, gint top); void gabedit_contoursplot_set_margins_bottom (GabeditContoursPlot *contoursplot, gint bottom); void gabedit_contoursplot_set_x_legends_digits (GabeditContoursPlot *contoursplot, gint digits); void gabedit_contoursplot_set_y_legends_digits (GabeditContoursPlot *contoursplot, gint digits); gint gabedit_contoursplot_get_x_legends_digits (GabeditContoursPlot *contoursplot); gint gabedit_contoursplot_get_y_legends_digits (GabeditContoursPlot *contoursplot); void gabedit_contoursplot_set_background_color (GabeditContoursPlot *contoursplot, GdkColor color); void gabedit_contoursplot_set_grids_attributes (GabeditContoursPlot *contoursplot, GabeditContoursPlotGrid grid, GdkColor color, gint line_width, GdkLineStyle line_style); void gabedit_contoursplot_get_grids_attributes (GabeditContoursPlot *contoursplot, GabeditContoursPlotGrid grid, GdkColor *color, gint *line_width, GdkLineStyle *line_style); void gabedit_contoursplot_enable_grids (GabeditContoursPlot *contoursplot, GabeditContoursPlotGrid grid, gboolean enable); void gabedit_contoursplot_add_data (GabeditContoursPlot *contoursplot, ContoursPlotData *data); void gabedit_contoursplot_remove_data (GabeditContoursPlot *contoursplot, ContoursPlotData *data); void gabedit_contoursplot_add_data_peaks(GabeditContoursPlot *contoursplot, gint numberOfPoints, gdouble* X, gdouble* Y, GdkColor color); void gabedit_contoursplot_configure_mouse_zoom (GabeditContoursPlot *contoursplot, gboolean enabled, gint button); void gabedit_contoursplot_configure_mouse_distance (GabeditContoursPlot *contoursplot, gboolean enabled, gint button); void gabedit_contoursplot_configure_wheel_zoom (GabeditContoursPlot *contoursplot, gboolean enabled, gdouble factor); void gabedit_contoursplot_configure_mouse_displace (GabeditContoursPlot *contoursplot, gboolean enabled, gint button); void gabedit_contoursplot_configure_mouse_autorange (GabeditContoursPlot *contoursplot, gboolean enabled, gint button); void gabedit_contoursplot_save_image(GabeditContoursPlot *contoursplot, gchar *fileName, gchar* type); void gabedit_contoursplot_reflect_x (GabeditContoursPlot *contoursplot, gboolean reflection); void gabedit_contoursplot_reflect_y (GabeditContoursPlot *contoursplot, gboolean reflection); void gabedit_contoursplot_show_left_legends (GabeditContoursPlot *contoursplot, gboolean show); void gabedit_contoursplot_show_right_legends (GabeditContoursPlot *contoursplot, gboolean show); void gabedit_contoursplot_show_top_legends (GabeditContoursPlot *contoursplot, gboolean show); void gabedit_contoursplot_show_bottom_legends (GabeditContoursPlot *contoursplot, gboolean show); void gabedit_contoursplot_set_font (GabeditContoursPlot *contoursplot, gchar* fontName); void gabedit_contoursplot_set_x_label (GabeditContoursPlot *contoursplot, G_CONST_RETURN gchar* str); void gabedit_contoursplot_set_y_label (GabeditContoursPlot *contoursplot, G_CONST_RETURN gchar* str); GtkWidget* gabedit_contoursplot_new_window(gchar* title, GtkWidget*parent); void gabedit_contoursplot_help(); G_END_DECLS #endif /* __GABEDIT_GABEDITContoursPLOT_H__ */ GabeditSrc250/src/Utils/UtilsVASP.c0000644000175100017510000011744413130665225017333 0ustar alloucheallouche/* UtilsVASP.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Files/FileChooser.h" #include "../Common/Windows.h" #include "../Utils/GabeditXYPlot.h" #include "../Display/Vibration.h" typedef struct _AtomType { gint nAtoms; char symbol[10]; }AtomType; static gint read_dos_all_vasp_xml_file(FILE* fd, GList** pX, GList** pI); static gdouble read_efermi(FILE* fd); static GtkWidget* dos_vasp_win_new(gchar* title, GList* X, GList* listOfAtomTypes, GList* listOfOrbTypes, gchar* fileName); /********************************************************************************/ static void g_list_free_all (GList * list, GDestroyNotify free_func) { g_list_foreach (list, (GFunc) free_func, NULL); g_list_free (list); } /********************************************************************************/ static GList* read_orb_types_vasp_xml_file(FILE* fd) { gchar t[BSIZE]; gchar tmp1[BSIZE]; gint i; GList* listOfOrbTypes = NULL; gchar** allstrs = NULL; if(!goToStr(fd,"partial")) return listOfOrbTypes; while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"field")) break;// energy } if(!strstr(t,"field")) return listOfOrbTypes; while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; //printf("t=%s\n",t); if(!strstr(t,"field")) break; for(i=0;i') t[i]=' '; if(t[i]=='/') t[i]=' '; } allstrs =gab_split (t); if(allstrs && allstrs[1]) { gchar* data = g_strdup(allstrs[1]); //printf("data=%s\n",data); listOfOrbTypes = g_list_append(listOfOrbTypes, (gpointer) data); } g_strfreev(allstrs); allstrs = NULL; } return listOfOrbTypes; } /****************************************************************************************/ static GList* read_atom_types_vasp_xml_file(FILE* fd) { gchar t[BSIZE]; gint i,j; AtomType a; GList * listOfAtomTypes = NULL; if(!goToStr(fd,"atomtypes")) { fprintf(stderr,"I cannot atom types from the VASP xml file\nCheck your file\n"); return listOfAtomTypes; } while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"")) { break; } //printf("t=%s\n",t); if(strstr(t,"")) { for(i=0;i') {t[j]=' '; break;} else t[j]=' '; } if(2==sscanf(t,"%d %s", &a.nAtoms , a.symbol)) { //printf("nAtoms = %d symbo l= %s\n",a.nAtoms, a.symbol); AtomType* data; data = g_malloc(sizeof(AtomType)); *data = a; listOfAtomTypes=g_list_append(listOfAtomTypes, (gpointer) data); } else { break; } } } //printf("n=%d\n",n); return listOfAtomTypes; } /****************************************************************************************/ static gint read_pdos_one_center_vasp_xml_file(FILE* fd, GList** pList, gint ion, gint spin, gint typesOrbs[], gint nTypesOrbs) { gchar t[BSIZE]; gchar tag1[BSIZE]; gchar tag2[BSIZE]; gchar** allreals = NULL; GList* list = NULL; gint n = 0; gint i; gint k; if(!*pList) return -1; list = g_list_first(*pList); sprintf(tag1,"ion %d",ion); sprintf(tag2,"spin %d",spin); while(!feof(fd)) { if(goToStr(fd,tag1)) { if(!fgets(t,BSIZE,fd)) return -1; if(strstr(t,tag2)) break; } if(strstr(t,"")) return -1; } while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"")) { break; } //printf("t=%s\n",t); if(strstr(t,"")) { for(i=0;i') t[i] = ' '; if(t[i]=='/') t[i] = ' '; if(t[i]=='r') t[i] = ' '; } allreals =gab_split (t); k = 0; while(allreals && allreals[k] && k0 && typesOrbs[k-1]) { *(gdouble*)list->data += atof(allreals[k]); } k++; } n++; g_strfreev(allreals); allreals = NULL; list = list->next; if(!list) break; } } return n; } /********************************************************************************/ static gint progress(GtkWidget* progressBar, gdouble scal, gboolean reset) { gdouble new_val; if(reset) { gtk_widget_show(progressBar); new_val = 0; gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressBar), new_val); while( gtk_events_pending() ) gtk_main_iteration(); return TRUE; } else if(scal>0) { new_val = gtk_progress_bar_get_fraction( GTK_PROGRESS_BAR(progressBar) ) + scal; if (new_val > 1) new_val = 1; } else { new_val = gtk_progress_bar_get_fraction( GTK_PROGRESS_BAR(progressBar) ) - scal; if (new_val > 1) new_val = 1; if (new_val <0 ) new_val = 0; } while( gtk_events_pending() ) gtk_main_iteration(); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressBar), new_val); while( gtk_events_pending() ) gtk_main_iteration(); return TRUE; } /********************************************************************************/ static GList* read_pdos_vasp_xml_file(GtkWidget* window, gchar* fileName, G_CONST_RETURN gchar* symbol, gint spin, gint typesOrbs[], gint nTypesOrbs) { GList* X = NULL; GList* cAtom; GList* cI; GList* I = NULL; /* gdouble efermi;*/ AtomType* data = NULL; GList* listOfAtomTypes = NULL; gint iBegin = 0; gint iEnd = 0; gint nAtoms = 0; GtkWidget* cancelButton = g_object_get_data (G_OBJECT (window), "CancelButton"); GtkWidget* progressBar = g_object_get_data (G_OBJECT (window), "ProgressBar"); gint i; FILE* fd = FOpen(fileName, "rb"); read_dos_all_vasp_xml_file(fd, &X, &I); /* efermi = read_efermi(fd);*/ rewind(fd); listOfAtomTypes = read_atom_types_vasp_xml_file(fd); for(cAtom = g_list_first(listOfAtomTypes); cAtom != NULL; cAtom = cAtom->next) { data = (AtomType*)cAtom->data; nAtoms += data->nAtoms; } cAtom = g_list_first(listOfAtomTypes); for(; cAtom != NULL; cAtom = cAtom->next) { data = (AtomType*)cAtom->data; if(!strcmp(data->symbol,symbol))break; iBegin += data->nAtoms; } if(cAtom) iEnd = iBegin+data->nAtoms-1; else { // symbol contain iBegin and iEnd gint i,j; gchar* s = strdup(symbol); //printf("symbol %s\n",symbol); for(i=0;inAtoms-1 || iEnd > nAtoms-1 || !goToStr(fd,"")) { g_list_free_all(X, g_free); g_list_free_all(I, g_free); g_list_free_all(listOfAtomTypes, g_free); return NULL; } cI = g_list_first(I); for(; cI != NULL; cI = cI->next) *(gdouble*)cI->data = 0; progress(progressBar, 0 , TRUE); if(spin>=1 && spin<=2) { gdouble scal = 1.0/(iEnd-iBegin+1); for(i=iBegin;i<=iEnd;i++) { progress(progressBar, scal , FALSE); while( gtk_events_pending() ) gtk_main_iteration(); if(!GTK_WIDGET_IS_SENSITIVE(cancelButton)) break; read_pdos_one_center_vasp_xml_file(fd, &I, i+1, spin, typesOrbs, nTypesOrbs); } } else { spin = 1; gdouble scal = 1.0/(iEnd-iBegin+1); for(i=iBegin;i<=iEnd;i++) { progress(progressBar, scal , FALSE); while( gtk_events_pending() ) gtk_main_iteration(); if(!GTK_WIDGET_IS_SENSITIVE(cancelButton)) break; read_pdos_one_center_vasp_xml_file(fd, &I, i+1, spin, typesOrbs, nTypesOrbs); } if(goToStr(fd,"spin 2")) { rewind(fd); goToStr(fd,""); spin = 2; progress(progressBar, 0 , TRUE); gdouble scal = 1.0/(iEnd-iBegin+1); for(i=iBegin;i<=iEnd;i++) { progress(progressBar, scal , FALSE); while( gtk_events_pending() ) gtk_main_iteration(); if(!GTK_WIDGET_IS_SENSITIVE(cancelButton)) break; read_pdos_one_center_vasp_xml_file(fd, &I, i+1, spin, typesOrbs, nTypesOrbs); } } } g_list_free_all(X, g_free); fclose(fd); progress(progressBar, 0 , TRUE); return I; } /********************************************************************************/ static GdkColor get_fore_color(GabeditXYPlot *xyplot) { GdkGCValues values; GdkColormap *colormap; GdkColor color; gdk_gc_get_values(xyplot->fore_gc, &values); colormap = gdk_window_get_colormap(GTK_WIDGET(xyplot)->window); gdk_colormap_query_color(colormap, values.foreground.pixel,&color); return color; } /********************************************************************************/ static void add_new_data_bands(GabeditXYPlot* xyplot, GList* X, GList** lists, gint iEnergy, gchar* color) { gint numberOfPoints = 0; if(X) { GList* current = NULL; current = g_list_first(X); for(; current != NULL; current = current->next) numberOfPoints++; } //printf("number of X points = %d\n",numberOfPoints); if(numberOfPoints>0) { GList* cx = g_list_first(X); gint loop; XYPlotData *data = g_malloc(sizeof(XYPlotData)); GdkColor c = get_fore_color(GABEDIT_XYPLOT(xyplot)); if(color) gdk_color_parse (color, &c); data->size=numberOfPoints; data->x = g_malloc(numberOfPoints*sizeof(gdouble)); data->y = g_malloc(numberOfPoints*sizeof(gdouble)); loop = 0; for(; cx != NULL; cx = cx->next) { GList* cy = g_list_first(lists[loop]); gint j; for(j=0; jnext ; if(cy) { data->x[loop] = *(gdouble*)(cx->data); data->y[loop] = *(gdouble*)(cy->data); } loop++; } sprintf(data->point_str,"+"); data->point_pango = NULL; gabedit_xyplot_add_data (GABEDIT_XYPLOT(xyplot), data); data->point_size=0; data->line_width=2; data->point_color.red=c.red; data->point_color.green=c.green; data->point_color.blue=c.blue; data->point_color.red=rand()%65535; data->point_color.green=rand()%65535; data->point_color.blue=rand()%65535; data->line_color.red=c.green; data->line_color.green=c.red; data->line_color.blue=c.blue; data->line_color.red=data->point_color.red; data->line_color.green=data->point_color.green; data->line_color.blue=data->point_color.blue; data->line_style=GDK_LINE_SOLID; gabedit_xyplot_add_data (GABEDIT_XYPLOT(xyplot), data); gabedit_xyplot_set_autorange(GABEDIT_XYPLOT(xyplot), NULL); } } /********************************************************************************/ static void add_new_data_dos(GabeditXYPlot* xyplot, GList* X, GList* I, gchar* color) { gint numberOfPoints = 0; if(X) { GList* current = NULL; current = g_list_first(X); for(; current != NULL; current = current->next) numberOfPoints++; } //printf("number of X points = %d\n",numberOfPoints); if(numberOfPoints>0) { GList* cx = g_list_first(X); GList* cy = g_list_first(I); gint loop; XYPlotData *data = g_malloc(sizeof(XYPlotData)); GdkColor c = get_fore_color(GABEDIT_XYPLOT(xyplot)); if(color) gdk_color_parse (color, &c); data->size=numberOfPoints; data->x = g_malloc(numberOfPoints*sizeof(gdouble)); data->y = g_malloc(numberOfPoints*sizeof(gdouble)); for(loop=0;loopx[loop]= data->y[loop] = 0.0; loop = 0; for(; cx != NULL && cy != NULL; cx = cx->next, cy = cy->next) { data->x[loop] = *(gdouble*)(cx->data); data->y[loop] = *(gdouble*)(cy->data); loop++; } sprintf(data->point_str,"+"); data->point_pango = NULL; gabedit_xyplot_add_data (GABEDIT_XYPLOT(xyplot), data); data->point_size=0; data->line_width=2; data->point_color.red=c.red; data->point_color.green=c.green; data->point_color.blue=c.blue; data->point_color.red=rand()%65535; data->point_color.green=rand()%65535; data->point_color.blue=rand()%65535; data->line_color.red=c.green; data->line_color.green=c.red; data->line_color.blue=c.blue; data->line_color.red=data->point_color.red; data->line_color.green=data->point_color.green; data->line_color.blue=data->point_color.blue; data->line_style=GDK_LINE_SOLID; gabedit_xyplot_add_data (GABEDIT_XYPLOT(xyplot), data); gabedit_xyplot_set_autorange(GABEDIT_XYPLOT(xyplot), NULL); } } /********************************************************************************/ static void add_hline(GtkWidget* xyplot, GList* X) { gint n = 0; gdouble x[2]={1,n}; gdouble y[2]={0,0}; GList* current = NULL; current = g_list_first(X); for(; current != NULL; current = current->next) n++; x[1] = n; gabedit_xyplot_add_new_data(xyplot,2, x, y); gabedit_xyplot_set_last_data_line_width (GABEDIT_XYPLOT(xyplot), 3); gabedit_xyplot_add_object_text (GABEDIT_XYPLOT(xyplot), 0, 0,0, "Fermi level"); } /********************************************************************************/ static void add_vline(GtkWidget* xyplot, GList* Y) { gint n = 0; gdouble x[2]={0,0}; gdouble y[2]={0,n}; GList* current = NULL; current = g_list_first(Y); for(; current != NULL; current = current->next) { gdouble v = *(gdouble*)(current->data); if(v>y[1]) y[1] = v; } gabedit_xyplot_add_new_data(xyplot,2, x, y); gabedit_xyplot_set_last_data_line_width (GABEDIT_XYPLOT(xyplot), 3); gabedit_xyplot_add_object_text (GABEDIT_XYPLOT(xyplot), 0, 0,0, "Fermi level"); } /********************************************************************************/ static void createUtilsBandsVASPWin(gchar* title, GList* X, GList** lists, gint nEnergies, gchar* xlabel, gchar* ylabel, gint hmajor) { gint i; GtkWidget* window = gabedit_xyplot_new_window(title, NULL); GabeditXYPlot *xyplot = g_object_get_data(G_OBJECT (window), "XYPLOT"); set_icone(window); if(!xyplot || !G_IS_OBJECT(xyplot)) return; for(i=0;i=0) gabedit_xyplot_set_ticks_hmajor (GABEDIT_XYPLOT(xyplot), hmajor); add_hline(GTK_WIDGET(xyplot),X); } /********************************************************************************/ static GtkWidget* createUtilsDOSVASPWin(gchar* title, GList* X, GList** lists, gint nLists, gchar* xlabel, gchar* ylabel, gint hmajor) { gint i; GtkWidget* window = gabedit_xyplot_new_window(title, NULL); GabeditXYPlot *xyplot = g_object_get_data(G_OBJECT (window), "XYPLOT"); set_icone(window); if(!xyplot || !G_IS_OBJECT(xyplot)) return NULL; // printf("nLists = %d\n", nLists); for(i=0;i=0) gabedit_xyplot_set_ticks_hmajor (GABEDIT_XYPLOT(xyplot), hmajor); add_vline(GTK_WIDGET(xyplot),lists[0]); return window; } /********************************************************************************/ static gdouble read_efermi(FILE* fd) { gchar t[BSIZE]; gdouble efermi = 0; rewind(fd); while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"efermi")) { sscanf(strstr(t,">")+strlen(">"),"%lf",&efermi); break; } } return efermi; } /********************************************************************************/ static void shift_values(GList* X, gdouble eshift) { GList* current = NULL; if(!X)return; current = g_list_first(X); for(; current != NULL; current = current->next) *(gdouble*)(current->data) += eshift; } /********************************************************************************/ static void shift_energies(GList* X, GList** lists, gdouble eshift) { gint n = 0; gint i; if(X) { GList* current = NULL; current = g_list_first(X); for(; current != NULL; current = current->next) n++; } if(n<1) return; for(i=0;inext) *(gdouble*)(cy->data) += eshift; } } /********************************************************************************/ static gint read_number_of_kpoints(FILE* fd) { gchar t[BSIZE]; gint numberOfKPoints = 0; if(!goToStr(fd, "kpointlist")) { fprintf(stderr,"I cannot read the number of kpoints\nCheck your xml file\n"); return 0; } while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"/varray")) break; numberOfKPoints++; } return numberOfKPoints; } /********************************************************************************/ static gint read_energies_for_one_kpoint_vasp_xml_file(FILE* fd, gint numk, GList** lists) { gchar t[BSIZE]; gchar tag[BSIZE]; gdouble e, occ; gint nEnergies = 0; sprintf(tag,"kpoint %d",numk+1); if(!goToStr(fd, tag)) { fprintf(stderr,"I cannot read energies for %s from the VASP xml file\nCheck your file\n",tag); return nEnergies; } while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"")) { break; } if(strstr(t,"")) { // printf("%s\n",(strstr(t,"")+strlen(""))); if(2==sscanf(strstr(t,"")+strlen(""),"%lf %lf", &e, &occ)) { gdouble* data; data = g_malloc(sizeof(gdouble)); *data = e; lists[numk]=g_list_append(lists[numk], (gpointer) data); /* data = g_malloc(sizeof(gdouble)); *data = occ; listsOcc[numk]=g_list_append(listsOcc[numk], (gpointer) data); */ nEnergies++; } else { nEnergies = 0; break; } } } return nEnergies; } /********************************************************************************/ static gboolean read_bands_vasp_xml_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; FILE *fd; gint numberOfKPoints = 0; GList* X = NULL; GList** lists = NULL; gint nEnergies = 0; gint n; gint j; gint i; gdouble efermi; if(response_id != GTK_RESPONSE_OK) return FALSE; fileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(fileName, "rb"); numberOfKPoints = read_number_of_kpoints(fd); //printf("numberOfKPoints=%d\n",numberOfKPoints); if(numberOfKPoints<1) { fclose(fd); return FALSE;} lists = g_malloc(numberOfKPoints*sizeof(GList*)); for(i=0;if(eV)",0); for(j=0;j")) { fprintf(stderr,"I cannot read dos from the VASP xml file\nCheck your file\n"); return 0; } /* if(!goToStr(fd,"")) { fprintf(stderr,"I cannot read dos from the VASP xml file\nCheck your file\n"); return 0; } */ while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"")) { break; } //printf("t=%s\n",t); if(strstr(t,"")) { //printf("%s\n",(strstr(t,"")+strlen(""))); if(2==sscanf(strstr(t,"")+strlen(""),"%lf %lf", &e, &i)) { gdouble* data; data = g_malloc(sizeof(gdouble)); *data = e; *pX=g_list_append(*pX, (gpointer) data); data = g_malloc(sizeof(gdouble)); *data = i; *pI=g_list_append(*pI, (gpointer) data); n++; } else { n = 0; break; } } } //printf("n=%d\n",n); return n; } /********************************************************************************/ static gboolean read_dos_vasp_xml_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; FILE *fd; GList* X = NULL; GList* I = NULL; gint j; gint i; GtkWidget* window = NULL; gdouble efermi; GabeditXYPlot *xyplot = NULL; gchar* xlabel = "E-Ef(eV)"; gchar* ylabel = "Intensity"; GList * listOfAtomTypes = NULL; GList * listOfOrbTypes = NULL; if(response_id != GTK_RESPONSE_OK) return FALSE; fileName = gabedit_file_chooser_get_current_file(SelecFile); fd = FOpen(fileName, "rb"); read_dos_all_vasp_xml_file(fd, &X, &I); efermi = read_efermi(fd); shift_values(X, -efermi); rewind(fd); listOfAtomTypes = read_atom_types_vasp_xml_file(fd); rewind(fd); listOfOrbTypes = read_orb_types_vasp_xml_file(fd); fclose(fd); if(listOfAtomTypes && listOfOrbTypes ) { window = dos_vasp_win_new("DOS",X, listOfAtomTypes, listOfOrbTypes, fileName); xyplot = g_object_get_data(G_OBJECT (window), "XYPLOT"); if(xyplot && X && I) add_new_data_dos(xyplot, X, I, "red"); if(xlabel) gabedit_xyplot_set_x_label (GABEDIT_XYPLOT(xyplot), xlabel); if(ylabel) gabedit_xyplot_set_y_label (GABEDIT_XYPLOT(xyplot), ylabel); add_vline(GTK_WIDGET(xyplot),I); //g_list_free_all(X, g_free); // not here } else { window = createUtilsDOSVASPWin("DOS", X, &I, 1,xlabel, ylabel, -1); g_list_free_all(X, g_free); } g_list_free_all(I, g_free); g_list_free_all(listOfAtomTypes, g_free); g_list_free_all(listOfOrbTypes, g_free); return TRUE; } /********************************************************************************/ void read_dos_vasp_xml_file_dlg() { gint* d = g_malloc(sizeof(gint)); GtkWidget* filesel = file_chooser_open(read_dos_vasp_xml_file, _("Read dos from a vasp.xml file"), GABEDIT_TYPEFILE_XML,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal(GTK_WINDOW (filesel), TRUE); } /****************************************************************************************/ static void destroy_dos_vasp_in(GtkWidget *window, gpointer data) { gint* pnOrbs= g_object_get_data(G_OBJECT (window), "NOrbs"); GList* X = g_object_get_data(G_OBJECT (window), "XList"); gchar* fileName = g_object_get_data(G_OBJECT (window), "FileName"); if(pnOrbs) g_free(pnOrbs); if(fileName) g_free(fileName); if(X) g_list_free_all(X, g_free); gtk_widget_destroy(window); } /****************************************************************************************/ static gboolean xyplot_motion_notify_event(GtkWidget *xyplot, GdkEventMotion *event, gpointer user_data) { double xv, yv; int x, y; char str[50]; int context_id; GtkWidget* statusbar = g_object_get_data(G_OBJECT (xyplot), "StatusBar"); x=event->x; y=event->y; if (event->is_hint || (event->window != xyplot->window)) gdk_window_get_pointer (xyplot->window, &x, &y, NULL); if(gabedit_xyplot_get_point(GABEDIT_XYPLOT(xyplot), x, y, &xv, &yv)) snprintf(str, 50, _("Mouse position: %lf, %lf"), xv, yv); else sprintf(str, " "); context_id=gtk_statusbar_get_context_id (GTK_STATUSBAR(statusbar), "mouse position"); gtk_statusbar_push (GTK_STATUSBAR(statusbar), context_id, str); return TRUE; } /****************************************************************************************/ static void apply_pdos(GtkWidget *window, gpointer data) { GtkWidget** toggle_orbs=NULL; GtkWidget* entry_atom=NULL; gint* pnOrbs = NULL; gchar* fileName = NULL; gint nOrbs = 0; GtkWidget* applyButton = g_object_get_data (G_OBJECT (window), "ApplyButton"); toggle_orbs = g_object_get_data(G_OBJECT (window), "ToggleOrbs"); pnOrbs= g_object_get_data(G_OBJECT (window), "NOrbs"); fileName = g_object_get_data(G_OBJECT (window), "FileName"); entry_atom= g_object_get_data(G_OBJECT (window), "EntryAtom"); if(pnOrbs) nOrbs = *pnOrbs; //printf("nOrbs=%d\n",nOrbs); //printf("fileName=%s\n",fileName); gtk_widget_set_sensitive(applyButton, FALSE); while( gtk_events_pending() ) gtk_main_iteration(); if(fileName && entry_atom && nOrbs>0) { gint i; GList* IpDOS = NULL;// GtkWidget* cancelButton = g_object_get_data (G_OBJECT (window), "CancelButton"); G_CONST_RETURN gchar* atom = gtk_entry_get_text(GTK_ENTRY(entry_atom)); gint* typesOrbs = g_malloc(nOrbs*sizeof(gint)); GabeditXYPlot *xyplot = g_object_get_data(G_OBJECT (window), "XYPLOT"); GList* X = g_object_get_data(G_OBJECT (window), "XList"); for(i=0;inext) nOrbs++; // printf("nOrbs= %d\n",nOrbs); if(nOrbs<1) return NULL; pnOrbs = g_malloc(sizeof(gint)); fName = g_strdup(fileName); *pnOrbs = nOrbs; toggle_orbs=g_malloc(nOrbs*sizeof(GtkWidget*)); gtk_window_set_title (GTK_WINDOW (window), title); gtk_signal_connect (GTK_OBJECT (window), "delete_event", G_CALLBACK (destroy_dos_vasp_in), NULL); gtk_container_set_border_width (GTK_CONTAINER (window), 10); table1=gtk_table_new(5, 3, FALSE); gtk_container_add(GTK_CONTAINER(window), table1); gtk_widget_show(table1); frame_xyplot=gtk_frame_new("XY GabeditPlot"); gtk_table_attach(GTK_TABLE(table1), frame_xyplot, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show(frame_xyplot); xyplot = gabedit_xyplot_new(); gtk_container_add(GTK_CONTAINER(frame_xyplot), xyplot); gtk_widget_show (xyplot); g_object_set_data (G_OBJECT (window), "XYPLOT",xyplot); frame_add_pdos=gtk_frame_new(_("Add PDOS")); gtk_table_attach(GTK_TABLE(table1), frame_add_pdos, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 1); table2=gtk_table_new(1, 3, FALSE); gtk_container_add(GTK_CONTAINER(frame_add_pdos), table2); //gtk_widget_show(table2); hbox_data = gtk_hbox_new(FALSE,2); gtk_table_attach(GTK_TABLE(table2), hbox_data, 0, 1, 0, 1, (GtkAttachOptions)(GTK_SHRINK), (GtkAttachOptions)(GTK_SHRINK), 1, 1); gtk_widget_show(hbox_data); nAtoms = 0; cAtom = g_list_first(listOfAtomTypes); for(; cAtom != NULL; cAtom = cAtom->next) nAtoms++; if(nAtoms<1) { nAtoms = 1; listAtoms = g_malloc(nAtoms*sizeof(gchar*)); for(i=0;inext) { AtomType* data = (AtomType*)cAtom->data; listAtoms[i] = g_strdup(data->symbol); nAllAtoms+= data->nAtoms; i++; } listAtoms[i] = g_strdup_printf("%d-%d",1,nAllAtoms); i++; listAtoms[i] = g_strdup_printf("%d",1); } entry_atom = create_label_combo(hbox_data,_(" Atom(s) : "),listAtoms, nAtoms+2, TRUE,-1,-1); gtk_editable_set_editable((GtkEditable*) entry_atom,TRUE); gtk_widget_show(entry_atom); for(i=0,cOrb = g_list_first(listOfOrbTypes); cOrb != NULL; cOrb = cOrb->next,i++) { gchar* data = (gchar*)cOrb->data; toggle_orbs[i] = gtk_check_button_new_with_label(_(data)); gtk_box_pack_start(GTK_BOX(hbox_data), toggle_orbs[i], FALSE, FALSE, 1); gtk_widget_show(toggle_orbs[i]); } hbox = gtk_hbox_new(FALSE,2); gtk_table_attach(GTK_TABLE(table2),hbox, 1, 2, 0, 1, (GtkAttachOptions)(GTK_SHRINK), (GtkAttachOptions)(GTK_SHRINK), 1, 1); gtk_widget_show(hbox_data); applyButton = gtk_button_new_with_label(_(" Apply ")); GTK_WIDGET_SET_FLAGS(applyButton, GTK_CAN_DEFAULT); gtk_box_pack_end(GTK_BOX(hbox), applyButton, TRUE, TRUE, 0); g_signal_connect_swapped(G_OBJECT(applyButton), "clicked",G_CALLBACK(apply_pdos),GTK_OBJECT(window)); gtk_widget_grab_default(applyButton); gtk_widget_show_all (applyButton); vbox = gtk_vbox_new(FALSE,2); gtk_table_attach(GTK_TABLE(table2), vbox, 2, 3, 0, 1, GTK_FILL, GTK_FILL, 1, 1); gtk_widget_show(vbox); progressBar = add_progress_bar(vbox); gtk_widget_show_all(frame_add_pdos); statusbar=gtk_statusbar_new(); gtk_table_attach(GTK_TABLE(table1), statusbar, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 1, 1); gtk_widget_show (statusbar); g_object_set_data(G_OBJECT (xyplot), "StatusBar", statusbar); gabedit_xyplot_set_range(GABEDIT_XYPLOT(xyplot), 0.0, 10, 0, 20); gabedit_xyplot_set_x_legends_digits(GABEDIT_XYPLOT(xyplot), 5); gabedit_xyplot_set_y_legends_digits(GABEDIT_XYPLOT(xyplot), 5); g_signal_connect_after(G_OBJECT(xyplot), "motion-notify-event", G_CALLBACK(xyplot_motion_notify_event), NULL); gtk_window_set_default_size (GTK_WINDOW(window),2*gdk_screen_width()/3,2*gdk_screen_height()/3); gtk_widget_show (window); for(i=0,cOrb = g_list_first(listOfOrbTypes); cOrb != NULL; cOrb = cOrb->next,i++) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle_orbs[i]), FALSE); cancelButton =g_object_get_data (G_OBJECT(progressBar), "CancelButton"); g_object_set_data(G_OBJECT (xyplot), "EntryAtom", entry_atom); g_object_set_data(G_OBJECT (xyplot), "HBoxData", first_hbox); g_object_set_data(G_OBJECT (xyplot), "VBox", vbox); g_object_set_data(G_OBJECT (xyplot), "Window", window); g_object_set_data(G_OBJECT (xyplot), "NOrbs", pnOrbs); g_object_set_data(G_OBJECT (xyplot), "FileName", fName); g_object_set_data(G_OBJECT (xyplot), "XList", X); g_object_set_data(G_OBJECT (window), "EntryAtom", entry_atom); g_object_set_data(G_OBJECT (window), "HBoxData", first_hbox); g_object_set_data(G_OBJECT (window), "VBox", vbox); g_object_set_data(G_OBJECT (window), "ToggleOrbs", toggle_orbs); g_object_set_data(G_OBJECT (window), "NOrbs", pnOrbs); g_object_set_data(G_OBJECT (window), "FileName", fName); g_object_set_data(G_OBJECT (window), "XList", X); g_object_set_data (G_OBJECT (window), "ProgressBar",progressBar); g_object_set_data (G_OBJECT (window), "StatusProgress", g_object_get_data (G_OBJECT (progressBar), "StatusProgress")); g_object_set_data (G_OBJECT (window), "CancelButton",cancelButton); g_object_set_data (G_OBJECT (window), "ApplyButton",applyButton); g_signal_connect_swapped(G_OBJECT(cancelButton), "clicked", (GCallback)cancel_calcul,window); gabedit_xyplot_set_font (GABEDIT_XYPLOT(xyplot), "sans 12"); gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(Fenetre)); gabedit_xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_HMAJOR_GRID, FALSE); gabedit_xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_VMAJOR_GRID, FALSE); gabedit_xyplot_reflect_x (GABEDIT_XYPLOT(xyplot), FALSE); gabedit_xyplot_reflect_y (GABEDIT_XYPLOT(xyplot), FALSE); return window; } /********************************************************************************/ gint read_geometry_vasp_xml_file(gchar* fileName, gint numgeom, gchar** atomSymbols[], gdouble* positions[]) { GList* cAtom; AtomType* data = NULL; GList* listOfAtomTypes = NULL; gint nAtoms = 0; gint i,j,k; gint nG = 0; gdouble TV[3][3]; gint nTV = 0; gchar** symbols = NULL; gint* ntypes = NULL; gdouble* X = NULL; gdouble* Y = NULL; gdouble* Z = NULL; gchar t[BSIZE]; gboolean direct = TRUE; long int geomposok = 0; FILE* file = FOpen(fileName, "rb"); rewind(file); listOfAtomTypes = read_atom_types_vasp_xml_file(file); nAtoms = 0; for(cAtom = g_list_first(listOfAtomTypes); cAtom != NULL; cAtom = cAtom->next) { data = (AtomType*)cAtom->data; nAtoms += data->nAtoms; } /* printf("nAtoms = %d\n",nAtoms);*/ if(nAtoms<1) { g_list_free_all(listOfAtomTypes, g_free); return 0;} rewind(file); nG = 0; while(!feof(file)) { if(!fgets(t,BSIZE,file)) break; if(strstr(t,"")) { nG++; geomposok = ftell(file); if(nG==numgeom) break; } } /* printf("nG = %d numgeom = %d\n",nG, numgeom);*/ if(numgeom>0 && nG != numgeom){ g_list_free_all(listOfAtomTypes, g_free); return 0;} if(numgeom<=0) fseek(file, geomposok, SEEK_SET); while(!feof(file)) { if(!fgets(t,BSIZE,file)) break; if(strstr(t,"varray name=") && strstr(t,"basis")) break; if(strstr(t,"")) break; } /* printf("t = %s\n",t);*/ if(!strstr(t,"basis")) { g_list_free_all(listOfAtomTypes, g_free); return 0;} nTV = 0; for(i=0;i<3;i++) { gchar* pos = NULL; if(!fgets(t,BSIZE,file)){break;} pos = strstr(t,">"); if(!pos) break; if(3!=sscanf(pos+1,"%lf %lf %lf",&TV[i][0], &TV[i][1], &TV[i][2])) {break;} nTV++; } /* printf("t = %s\n",t);*/ if(nTV<3) { g_list_free_all(listOfAtomTypes, g_free); return 0;} while(!feof(file)) { if(!fgets(t,BSIZE,file)) break; if(strstr(t,"varray name=") && strstr(t,"positions")) break; if(strstr(t,"")) break; } if(!strstr(t,"position")) { g_list_free_all(listOfAtomTypes, g_free); return 0;} nAtoms += 3; X = g_malloc(nAtoms*sizeof(gdouble)); Y = g_malloc(nAtoms*sizeof(gdouble)); Z = g_malloc(nAtoms*sizeof(gdouble)); symbols = g_malloc(nAtoms*sizeof(gchar*)); for(i=0;inext) { gboolean ok = TRUE; gchar* pos = NULL; data = (AtomType*)cAtom->data; for(i=0;inAtoms;i++) { symbols[k] = g_strdup(data->symbol); symbols[k][0]=toupper(symbols[k][0]); if (strlen(symbols[k])==2) symbols[k][1]=tolower(symbols[k][1]); if (strlen(symbols[k])==3) symbols[k][2]=tolower(symbols[k][2]); if(!fgets(t,BSIZE,file)){ok = FALSE;break;} pos = strstr(t,">"); if(!pos) break; /* printf("pos = %s\n",pos+1);*/ if(3!=sscanf(pos+1,"%lf %lf %lf",&X[k], &Y[k], &Z[k])) {ok = FALSE; break;} k++; } if(!ok) break; } if(k!=nAtoms-3) { g_list_free_all(listOfAtomTypes, g_free); g_free(X); g_free(Y); g_free(Z); for(i=0;i #include "../Common/Global.h" #include "Vector3d.h" /****************************************************/ void v3d_zero(V3d v) { v[0] = 0.0; v[1] = 0.0; v[2] = 0.0; } /****************************************************/ void v3d_set(V3d v, gdouble x, gdouble y, gdouble z) { v[0] = x; v[1] = y; v[2] = z; } /****************************************************/ void v3d_sub(V3d src1, V3d src2, V3d dst) { dst[0] = src1[0] - src2[0]; dst[1] = src1[1] - src2[1]; dst[2] = src1[2] - src2[2]; } /****************************************************/ void v3d_copy(V3d v1, V3d v2) { register int i; for (i = 0 ; i < 3 ; i++) v2[i] = v1[i]; } /****************************************************/ void v3d_cross(V3d v1, V3d v2, V3d cross) { V3d temp; temp[0] = (v1[1] * v2[2]) - (v1[2] * v2[1]); temp[1] = (v1[2] * v2[0]) - (v1[0] * v2[2]); temp[2] = (v1[0] * v2[1]) - (v1[1] * v2[0]); v3d_copy(temp, cross); } gdouble v3d_length(V3d v) { return sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); } /****************************************************/ void v3d_scale(V3d v, gdouble div) { v[0] *= div; v[1] *= div; v[2] *= div; } /****************************************************/ void v3d_normal(V3d v) { v3d_scale(v,1.0/v3d_length(v)); } /****************************************************/ gdouble v3d_dot(V3d v1, V3d v2) { return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]; } /****************************************************/ void v3d_add(V3d src1, V3d src2, V3d dst) { dst[0] = src1[0] + src2[0]; dst[1] = src1[1] + src2[1]; dst[2] = src1[2] + src2[2]; } /****************************************************/ GabeditSrc250/src/Utils/UtilsGL.h0000644000175100017510000000676113130665225017070 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_UTILSGL_H__ #define __GABEDIT_UTILSGL_H__ #include "Vector3d.h" #include "Transformation.h" void glGetWorldCoords(gint x, gint y, gint height, gdouble *w); void glGetWindowCoords(gdouble *w, gint height, gint *x); gint glTextWidth(gchar *str); gint glTextHeight(); void glPrintWin(gint x, gint y, gint height, gchar *str); void glPrint(gdouble x, gdouble y, gdouble z, gchar *str); void glPrintOrtho(gdouble x, gdouble y, gdouble z, gchar *str, gboolean centerX, gboolean centerY); void glInitFontsUsing(gchar* fontname); void glInitFonts(); void getNormalPlanWindow(gdouble N[]); void glPrintScale(gdouble x, gdouble y, gdouble z, gdouble scale, gchar *str); gdouble get_alpha_opacity(); void set_alpha_opacity(gdouble a); OpenGLOptions get_opengl_options(); void glMaterialdv(GLenum face, GLenum pname, const GLdouble* params); void glLightdv(GLenum face, GLenum pname, const GLdouble* params); void glFogdv(GLenum pname, const GLdouble* params); void mYPerspective( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar ); void Sphere_Draw_Precision(GLdouble radius,V3d position, GLint numberOfSubdivisions); void Sphere_Draw_Color_Precision(GLdouble radius,V3d position, V4d Specular,V4d Diffuse,V4d Ambiant, GLint numberOfSubdivisions); void Sphere_Draw(GLdouble radius,V3d position); void Sphere_Draw_Color(GLdouble radius,V3d position, V4d Specular,V4d Diffuse,V4d Ambiant); GLuint Sphere_Get_List(int i,GLdouble radius,V4d Specular,V4d Diffuse,V4d Ambiant); void Sphere_Draw_From_List(GLuint sphere,V3d position); void Cylinder_Draw(GLdouble radius,V3d Base1Pos,V3d Base2Pos); void Cylinder_Draw_Color(GLdouble radius,V3d Base1Pos,V3d Base2Pos, V4d Specular,V4d Diffuse,V4d Ambiant); void Cylinder_Draw_Color_Two(GLdouble radius,V3d Base1Pos,V3d Base2Pos, V4d Specular1,V4d Diffuse1,V4d Ambiant1, V4d Specular2,V4d Diffuse2,V4d Ambiant2, GLdouble p1, GLdouble p2); void Prism_Draw(GLdouble radius,V3d Base1Pos,V3d Base2Pos); void Prism_Draw_Color(GLdouble radius,V3d Base1Pos,V3d Base2Pos, V4d Specular,V4d Diffuse,V4d Ambiant); void Draw_Arrow(V3d vector, GLdouble radius,V3d origin, V4d specular,V4d diffuse,V4d ambiant, gboolean negative); void glDeleteFontsList(); #endif /* __GABEDIT_UTILSGL_H__ */ GabeditSrc250/src/Utils/ConvUtils.h0000644000175100017510000000020713130665225017460 0ustar alloucheallouche #ifndef __GABEDIT_CONVUTILS_H__ #define __GABEDIT_CONVUTILS_H__ void create_conversion_dlg(); #endif /* __GABEDIT_CONVUTILS_H__ */ GabeditSrc250/src/Utils/Jacobi.c0000644000175100017510000001026213130665225016716 0ustar alloucheallouche/* Jacobi.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Common/Global.h" #include #define ROTATE(a,i,j,k,l) g=a[i][j];h=a[k][l];a[i][j]=g-s*(h+g*tau);\ a[k][l]=h+s*(g-h*tau); #define EPS 1e-10 gint jacobi(gdouble *M, gint n, gdouble d[], gdouble **v, gint *nrot) { gint j,iq,ip,i; gdouble tresh,theta,tau,t,sm,s,h,g,c,*b,*z; gdouble **a; gint k,ki,imin; a=g_malloc(n*sizeof(gdouble*)); for(i=0;i 4 && (gdouble)(fabs(d[ip])+g) == (gdouble)fabs(d[ip]) && (gdouble)(fabs(d[iq])+g) == (gdouble)fabs(d[iq])) a[ip][iq]=0.0; else if (fabs(a[ip][iq]) > tresh) { h=d[iq]-d[ip]; if ((gdouble)(fabs(h)+g) == (gdouble)fabs(h)) t=(a[ip][iq])/h; else { theta=0.5*h/(a[ip][iq]); t=1.0/(fabs(theta)+sqrt(1.0+theta*theta)); if (theta < 0.0) t = -t; } c=1.0/sqrt(1+t*t); s=t*c; tau=s/(1.0+c); h=t*a[ip][iq]; z[ip] -= h; z[iq] += h; d[ip] -= h; d[iq] += h; a[ip][iq]=0.0; for (j=0;j<=ip-1;j++) { ROTATE(a,j,ip,j,iq) } for (j=ip+1;j<=iq-1;j++) { ROTATE(a,ip,j,j,iq) } for (j=iq+1;j #include "../Common/GabeditType.h" /************************************************************************************************************/ GtkWidget* gabedit_text_new() { GtkWidget* text = gtk_text_view_new(); GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); /* GtkTextTag *found_text_tag = gtk_text_buffer_create_tag (buffer, NULL, "foreground", "red", NULL);*/ GtkTextTag *found_text_tag = gtk_text_buffer_create_tag (buffer, NULL, "background", "red", NULL); g_object_set_data(G_OBJECT(text),"FoundTextTag",found_text_tag); return text; } /************************************************************************************************************/ void gabedit_text_insert(GtkWidget* text, GdkFont* font, GdkColor* colorFore, GdkColor* colorBack, const gchar* str, gint l) { GtkTextBuffer *buffer; GtkTextIter match_start; GtkTextIter match_end; gint char_offset = 0; if(!GTK_IS_TEXT_VIEW (text)) return; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); gtk_text_buffer_get_iter_at_mark (buffer, &match_start, gtk_text_buffer_get_mark (buffer,"insert")); char_offset = gtk_text_iter_get_offset(&match_start); gtk_text_buffer_insert_at_cursor (buffer, str, l); gtk_text_buffer_get_iter_at_mark (buffer, &match_end, gtk_text_buffer_get_mark (buffer,"insert")); gtk_text_buffer_get_iter_at_mark (buffer, &match_start, gtk_text_buffer_get_mark (buffer,"insert")); gtk_text_iter_set_offset(&match_start, char_offset ); if(colorFore) { GtkTextTag *tag = gtk_text_buffer_create_tag (buffer, NULL, "foreground_gdk", colorFore, NULL); gtk_text_buffer_apply_tag (buffer, tag, &match_start, &match_end); /* gtk_text_buffer_remove_tag (buffer, tag, &match_start, &match_end);*/ } if(colorBack) { GtkTextTag *tag = gtk_text_buffer_create_tag (buffer, NULL, "background_gdk", colorBack, NULL); gtk_text_buffer_apply_tag (buffer, tag, &match_start, &match_end); /* gtk_text_buffer_remove_tag (buffer, tag, &match_start, &match_end);*/ } } /************************************************************************************************************/ gint gabedit_text_get_length(GtkWidget* text) { GtkTextBuffer *buffer; if(!GTK_IS_TEXT_VIEW (text)) return 0; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); return gtk_text_buffer_get_char_count (buffer); } /************************************************************************************************************/ gchar* gabedit_text_get_chars(GtkWidget* text, gint b, gint e) { GtkTextBuffer *buffer; GtkTextIter start; GtkTextIter end; GtkTextIter iterStart; GtkTextIter iterEnd; if(!GTK_IS_TEXT_VIEW (text)) return NULL; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); gtk_text_buffer_get_bounds (buffer, &start, &end); if(b>=0) gtk_text_buffer_get_iter_at_offset(buffer,&iterStart,b); else iterStart = start; if(e>=0) gtk_text_buffer_get_iter_at_offset(buffer,&iterEnd,e); else iterEnd = end; return gtk_text_iter_get_text(&iterStart, &iterEnd); } /************************************************************************************************************/ void gabedit_text_set_point(GtkWidget* text, gint char_offset) { GtkTextBuffer *buffer; GtkTextIter start; GtkTextIter end; GtkTextIter iter; if(!GTK_IS_TEXT_VIEW (text)) return; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); if(!buffer) return; gtk_text_buffer_get_bounds (buffer, &start, &end); if(char_offset>=0) gtk_text_buffer_get_iter_at_offset(buffer,&iter,char_offset); else iter = end; gtk_text_buffer_place_cursor(buffer, &iter); } /************************************************************************************************************/ gint gabedit_text_get_point(GtkWidget* text) { return 0; } /************************************************************************************************************/ void gabedit_text_forward_delete(GtkWidget* text, gint char_offset) { GtkTextBuffer *buffer; GtkTextIter start; GtkTextIter end; GtkTextIter iterBegin; GtkTextIter iterEnd; if(!GTK_IS_TEXT_VIEW (text)) return; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); if(!buffer) return; gtk_text_buffer_get_bounds (buffer, &start, &end); gtk_text_buffer_get_iter_at_mark (buffer, &iterBegin, gtk_text_buffer_get_mark (buffer,"insert")); if(char_offset>=0) { gint char_offset_begin = gtk_text_iter_get_offset(&iterBegin); gint char_offset_end = char_offset_begin + char_offset; iterEnd = end; gtk_text_iter_set_offset(&iterEnd, char_offset_end ); } else iterEnd = end; gtk_text_buffer_delete(buffer, &iterBegin,&iterEnd); } /************************************************************************************************************/ void gabedit_text_set_editable(GtkWidget* text, gboolean editable) { if(!GTK_IS_TEXT_VIEW (text)) return; gtk_text_view_set_editable((GtkTextView *)text, editable); } /************************************************************************************************************/ gint gabedit_text_search(GtkWidget *text, G_CONST_RETURN gchar *str, GtkTextIter* iter, gboolean forward) { GtkTextTag *found_text_tag; GtkTextIter start; GtkTextIter end; GtkTextBuffer *buffer; GtkTextIter match_start; GtkTextIter match_end; if(!str) return -1; if(*str == '\0') return -1; if(!GTK_IS_TEXT_VIEW (text)) return -1; found_text_tag = (GtkTextTag *)g_object_get_data(G_OBJECT(text),"FoundTextTag"); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); gtk_text_buffer_get_bounds (buffer, &start, &end); gtk_text_buffer_remove_tag (buffer, found_text_tag, &start, &end); if(!gtk_text_iter_in_range(iter, &start, &end)) return -1; if(forward) { gint i = 0; GtkTextIter posBegin; GtkTextIter posEnd; while(gtk_text_iter_forward_search (iter, str, GTK_TEXT_SEARCH_VISIBLE_ONLY | GTK_TEXT_SEARCH_TEXT_ONLY, &match_start, &match_end, NULL)) { gtk_text_buffer_apply_tag (buffer, found_text_tag, &match_start, &match_end); if(i==0) { posBegin = match_start; posEnd = match_end; } i++; iter = &match_end; } if(i>0) { gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW (text), &posBegin, 0.05, FALSE, 0.5, 0.5); gtk_text_buffer_place_cursor(buffer, &posEnd); } return i; } else { gint i = 0; GtkTextIter posBegin; GtkTextIter posEnd; while(gtk_text_iter_backward_search (iter, str, GTK_TEXT_SEARCH_VISIBLE_ONLY | GTK_TEXT_SEARCH_TEXT_ONLY, &match_start, &match_end, NULL)) { gtk_text_buffer_apply_tag (buffer, found_text_tag, &match_start, &match_end); if(i==0) { posBegin = match_start; posEnd = match_end; } i++; iter = &match_start; } if(i>0) { gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW (text), &posBegin, 0.05, FALSE, 0.5, 0.5); gtk_text_buffer_place_cursor(buffer, &posBegin); } return i; } return -1; } /************************************************************************************************************/ gint gabedit_text_search_all(GtkWidget *text, G_CONST_RETURN gchar *str) { GtkTextIter start; GtkTextIter end; GtkTextBuffer *buffer; if(!GTK_IS_TEXT_VIEW (text)) return -1; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); gtk_text_buffer_get_bounds (buffer, &start, &end); return gabedit_text_search(text, str, &start, TRUE); } /************************************************************************************************************/ gint gabedit_text_search_forward(GtkWidget *text, G_CONST_RETURN gchar *str) { GtkTextIter iter; GtkTextBuffer *buffer; if(!GTK_IS_TEXT_VIEW (text)) return -1; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); gtk_text_buffer_get_iter_at_mark (buffer, &iter, gtk_text_buffer_get_mark (buffer,"insert")); return gabedit_text_search(text, str, &iter, TRUE); } /************************************************************************************************************/ gint gabedit_text_search_backward(GtkWidget *text, G_CONST_RETURN gchar *str) { GtkTextIter iter; GtkTextBuffer *buffer; if(!GTK_IS_TEXT_VIEW (text)) return -1; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); gtk_text_buffer_get_iter_at_mark (buffer, &iter, gtk_text_buffer_get_mark (buffer,"insert")); return gabedit_text_search(text, str, &iter, FALSE); } /************************************************************************************************************/ void gabedit_text_goto_end(GtkWidget *text) { GtkTextIter start; GtkTextIter end; GtkTextBuffer *buffer; if(!GTK_IS_TEXT_VIEW (text)) return; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); gtk_text_buffer_get_bounds (buffer, &start, &end); gtk_text_buffer_place_cursor(buffer, &end); gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW(text),gtk_text_buffer_get_insert(buffer)); } /************************************************************************************************************/ void gabedit_text_goto_line(GtkWidget *text, gint line) { GtkTextIter iter; GtkTextBuffer *buffer; if(!GTK_IS_TEXT_VIEW (text)) return; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); gtk_text_buffer_get_iter_at_line(buffer, &iter, (gint)line); gtk_text_buffer_place_cursor(buffer, &iter); gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW(text),gtk_text_buffer_get_insert(buffer)); } /************************************************************************************************************/ void gabedit_text_select_all(GtkWidget* text) { GtkTextBuffer *buffer; GtkTextIter start_iter; GtkTextIter end_iter; if(!GTK_IS_TEXT_VIEW (text)) return; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); gtk_text_buffer_get_bounds (buffer, &start_iter, &end_iter); gtk_text_buffer_select_range (buffer, &start_iter, &end_iter); } /************************************************************************************************************/ void gabedit_text_cut_clipboard (GtkWidget* text) { GtkTextBuffer *buffer; if(!GTK_IS_TEXT_VIEW (text)) return; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); GtkClipboard *clipboard = gtk_widget_get_clipboard (GTK_WIDGET (text), GDK_SELECTION_CLIPBOARD); gtk_text_buffer_cut_clipboard (buffer, clipboard, GTK_TEXT_VIEW(text)->editable); gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW(text), gtk_text_buffer_get_mark (buffer, "insert")); } /************************************************************************************************************/ void gabedit_text_copy_clipboard (GtkWidget* text) { GtkTextBuffer *buffer; if(!GTK_IS_TEXT_VIEW (text)) return; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); GtkClipboard *clipboard = gtk_widget_get_clipboard (GTK_WIDGET (text), GDK_SELECTION_CLIPBOARD); gtk_text_buffer_copy_clipboard (buffer, clipboard); gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW(text), gtk_text_buffer_get_mark (buffer, "insert")); } /************************************************************************************************************/ void gabedit_text_paste_clipboard (GtkWidget* text) { GtkTextBuffer *buffer; if(!GTK_IS_TEXT_VIEW (text)) return; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text)); GtkClipboard *clipboard = gtk_widget_get_clipboard (GTK_WIDGET (text), GDK_SELECTION_CLIPBOARD); gtk_text_buffer_paste_clipboard (buffer, clipboard, NULL, GTK_TEXT_VIEW(text)->editable); gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW(text), gtk_text_buffer_get_mark (buffer, "insert")); } GabeditSrc250/src/Utils/ConvUtils.c0000644000175100017510000010317713130665225017465 0ustar alloucheallouche/*ConvUtils.c*/ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" static gdouble hbar = 6.62606891e-34/2/PI;/* PRL 1998 NIST */ static gdouble e = 1.602176462e-19; static gdouble a0 = 0.5291772083e-10; static gdouble me = 9.10938188e-31; static gdouble c =299792458.0; static gdouble OneUnderfourPIEpsilon0 = 1e-7*299792458.0*299792458.0; static gdouble NA =6.0221415e23; /*(6.0221415(10)x10^23; from NIST*/ static gdouble kb =1.3806505e-23; /*1.380 6505(24) x 10^-23 J K-1 from NIST*/ /********************************************************************************************************/ typedef struct _DataConvFrame { gint n; gchar **types; gdouble* convTable; gint defaultInput; gint defaultOutput; }DataConvFrame; /********************************************************************************************************/ static DataConvFrame* get_energy_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); gdouble hartree = hbar*hbar/a0/a0/me; data->n = 11; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("Hartree (H) {hbar^2 a0^-2 me^-1}"); data->types[1] = g_strdup("electronvolt (eV)"); data->types[2] = g_strdup("cm^-1"); data->types[3] = g_strdup("kilocalorie per mol (kcal/mol)"); data->types[4] = g_strdup("kilojoule per mol (kj/mol)"); data->types[5] = g_strdup("kelvin (K)"); data->types[6] = g_strdup("Joule (J) [SI unit] {kg m^2 s^-2}"); data->types[7] = g_strdup("erg [cgs unit]"); data->types[8] = g_strdup("Hertz (Hz)"); data->types[9] = g_strdup("Rydberg (Ry)"); data->types[10] = g_strdup("calorie (cal)"); data->convTable[0] = 1.0; data->convTable[1] = hartree/e; data->convTable[2] = hartree/(2*PI*hbar*c)*1e-2; data->convTable[3] = hartree/4.184/1000*NA; data->convTable[4] = hartree/1000*NA; data->convTable[5] = hartree/kb; data->convTable[6] = hartree; data->convTable[7] = hartree*1e7; data->convTable[8] = hartree/(2*PI*hbar); data->convTable[9] = 2.0; data->convTable[10] = hartree/4.184; data->defaultInput = 0; data->defaultOutput = 1; return data; } /********************************************************************************************************/ static DataConvFrame* get_time_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 10; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("second (s) [SI unit]"); data->types[1] = g_strdup("atomic unit of time (au) {a0^2 me hbar^-1}"); data->types[2] = g_strdup("Planck time"); data->types[3] = g_strdup("minute (min)"); data->types[4] = g_strdup("hour (h)"); data->types[5] = g_strdup("day (d)"); data->types[6] = g_strdup("month (mo)"); data->types[7] = g_strdup("year (Calendar) (a or y)"); data->types[8] = g_strdup("year (Gregorian) (a or y)"); data->types[9] = g_strdup("year (Julian) (a or y)"); data->convTable[0] = 1.0; data->convTable[1] = 1.0/(a0*a0*me/hbar); data->convTable[2] = 1.0/1.351211818e-34; data->convTable[3] = 1.0/60.0; data->convTable[4] = 1.0/3600.0; data->convTable[5] = 1.0/86400.0; data->convTable[6] = 1.0/2592000.0; data->convTable[7] = 1.0/31536000.0; data->convTable[8] = 1.0/31557600.0; data->convTable[9] = 1.0/31558149.76; data->defaultInput = 1; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static DataConvFrame* get_length_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 9; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("metre (m)"); data->types[1] = g_strdup("angstrom (A)"); data->types[2] = g_strdup("astronomical unit (AU)"); data->types[3] = g_strdup("atomic unit (au)(bohr){a0}"); data->types[4] = g_strdup("Bohr radius(a0)"); data->types[5] = g_strdup("fermi (fm)"); data->types[6] = g_strdup("foot (ft)"); data->types[7] = g_strdup("mile (mi)"); data->types[8] = g_strdup("yard (yd)"); data->convTable[0] = 1.0; data->convTable[1] = 1.0/1e-10; data->convTable[2] = 1.0/149597870.691e3; data->convTable[3] = 1.0/a0; data->convTable[4] = 1.0/a0; data->convTable[5] = 1.0/1e-15; data->convTable[6] = 1.0/0.3048; data->convTable[7] = 1.0/1609.344; data->convTable[8] = 1.0/0.9144; data->defaultInput = 3; data->defaultOutput = 1; return data; } /********************************************************************************************************/ static DataConvFrame* get_velocity_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 11; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("metre per second (m/s) [SI unit]"); data->types[1] = g_strdup("kilometre per hour (km/h)"); data->types[2] = g_strdup("foot per hour (fph)"); data->types[3] = g_strdup("inch per minute (ipm)"); data->types[4] = g_strdup("foot per minute(fpm)"); data->types[5] = g_strdup("inch per second(ips)"); data->types[6] = g_strdup("mile per hour (mph)"); data->types[7] = g_strdup("knot (kn)"); data->types[8] = g_strdup("mile per minute(mpm)"); data->types[9] = g_strdup("mile per second(mps)"); data->types[10] = g_strdup("atomic unit (au) {hbar a0^-1 me^-1}"); data->convTable[0] = 1.0; data->convTable[1] = 1.0/2.777778e-1; data->convTable[2] = 1.0/8.466667e-5; data->convTable[3] = 1.0/4.23333e-4; data->convTable[4] = 1.0/5.08e-3; data->convTable[5] = 1.0/2.54e-2; data->convTable[6] = 1.0/0.44704; data->convTable[7] = 1.0/0.514444; data->convTable[8] = 1.0/26.8224; data->convTable[9] = 1.0/1.609344 ; data->convTable[10] = 1/(hbar/a0/me); data->defaultInput = 10; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static DataConvFrame* get_acceleration_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 12; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("metre per second squared (m/s^2) [SI unit]"); data->types[1] = g_strdup("foot per hour per second (fph/s)"); data->types[2] = g_strdup("inch per minute per second (ipm/s)"); data->types[3] = g_strdup("foot per minute per second (fpm/s)"); data->types[4] = g_strdup("galileo"); data->types[5] = g_strdup("inch per second squared (ips^2)"); data->types[6] = g_strdup("foot per second squared (fps^2)"); data->types[7] = g_strdup("mile per hour per second (mph/s)"); data->types[8] = g_strdup("knot per second (kn/s)"); data->types[9] = g_strdup("mile per minute per second(mpm/s)"); data->types[10] = g_strdup("mile per second squared (mps^2)"); data->types[11] = g_strdup("atomic unit (au) {hbar^2 a0^-3 me^-2}"); data->convTable[0] = 1.0; data->convTable[1] = 1.0/8.466667e-5; data->convTable[2] = 1.0/4.233333e-4; data->convTable[3] = 1.0/5.08e-3; data->convTable[4] = 1.0/1e-2; data->convTable[5] = 1.0/2.54e-2; data->convTable[6] = 1.0/3.048e-1; data->convTable[7] = 1.0/4.4704e-1; data->convTable[8] = 1.0/5.144444e-1; data->convTable[9] = 1.0/26.8224; data->convTable[10] = 1.0/1.609344e3; data->convTable[11] =1/(hbar*hbar/a0/a0/a0/me/me); data->defaultInput = 11; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static DataConvFrame* get_force_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 12; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("newton (N)(kg m/s^2) [SI unit]"); data->types[1] = g_strdup("dyne (dyn) [cgs unit]"); data->types[2] = g_strdup("poundal (pdl)"); data->types[3] = g_strdup("ounce-force (ozf)"); data->types[4] = g_strdup("pound-force (lbf)"); data->types[5] = g_strdup("sthene (sn) [mts unit]"); data->types[6] = g_strdup("kilogram-force (kgf)"); data->types[7] = g_strdup("kilopond (kp)"); data->types[8] = g_strdup("kip (kip)"); data->types[9] = g_strdup("kip-force (kipf)"); data->types[10] = g_strdup("ton-force (tnf)"); data->types[11] = g_strdup("atomic unit (au) {hbar^2 a0^-3 me^-1}"); data->convTable[0] = 1.0; data->convTable[1] = 1.0/1e-5; data->convTable[2] = 1.0/0.138254954376; data->convTable[3] = 1.0/0.2780138509537812; data->convTable[4] = 1.0/4.4482216152605; data->convTable[5] = 1.0/1000.0; data->convTable[6] = 1.0/9.80665; data->convTable[7] = 1.0/9.80665; data->convTable[8] = 1.0/4.4482216152605e3; data->convTable[9] = 1.0/4.4482216152605e3; data->convTable[10] = 1.0/8.896443230521e3; data->convTable[11] =1/(hbar*hbar/a0/a0/a0/me); data->defaultInput = 11; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static DataConvFrame* get_masse_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 5; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("kilogram (kg) [SI unit]"); data->types[1] = g_strdup("atomic unit (au) {me}"); data->types[2] = g_strdup("unified atomic mass unit (amu)"); data->types[3] = g_strdup("Dalton (Da)"); data->types[4] = g_strdup("tonne (t)"); data->convTable[0] = 1.0; data->convTable[1] = 1.0/me; data->convTable[2] = 1.0/1.66053873e-27; data->convTable[3] = 1.0/1.66090210e-27; data->convTable[4] = 1/1000.0; data->defaultInput = 1; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static DataConvFrame* get_pressure_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 7; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("Pascal(Pa) [SI Unit] {N/m^2}"); data->types[1] = g_strdup("Bar(bar) [dyn/cm2]"); data->types[2] = g_strdup("Technical atomosphere(at)"); data->types[3] = g_strdup("Atmosphere(atm)"); data->types[4] = g_strdup("Torr(mmHG)"); data->types[5] = g_strdup("Pound per square inch(psi) {lbf/in2}"); data->types[6] = g_strdup("Atomic unit (au) {hbar^2 a0^-5 me^-1}"); data->convTable[0] = 1.0; data->convTable[1] = 1e-5; data->convTable[2] = 10.197e-6; data->convTable[3] = 9.8692e-6; data->convTable[4] = 7.5006e-3; data->convTable[5] = 145.04e-6; data->convTable[6] = 1.0/(hbar*hbar/(a0*a0*a0*a0*a0)/me); data->defaultInput = 6; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static DataConvFrame* get_angularmomentum_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 3; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("Joule seconde (J s) [SI unit]"); data->types[1] = g_strdup("atomic unit of time (au) {hbar}"); data->types[2] = g_strdup("erg seconde (erg s) [cgs unit]"); data->convTable[0] = 1.0; data->convTable[1] = 1.0/hbar; data->convTable[2] = 1.0/1.0e-7; data->defaultInput = 1; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static DataConvFrame* get_electriccurrent_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 6; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("ampere (A) [SI unit]"); data->types[1] = g_strdup("esu per second (esu/s) [cgs unit]"); data->types[2] = g_strdup("statampere (esu/s) [cgs unit]"); data->types[3] = g_strdup("abampere (abamp) [cgs unit]"); data->types[4] = g_strdup("electromagnetic unit (abamp)[cgs unit]"); data->types[5] = g_strdup(" atomic unit (au) {e hbar a0^-2 me^-1}"); data->convTable[0] = 1.0; data->convTable[1] = 1.0/3.335641e-10; data->convTable[2] = 1.0/3.335641e-10; data->convTable[3] = 1.0/10.0; data->convTable[4] = 1.0/10.0; data->convTable[5] = 1/(e*hbar/a0/a0/me); data->defaultInput = 5; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static DataConvFrame* get_electriccharge_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 7; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("Coulomb (C) [SI unit]"); data->types[1] = g_strdup("statcoulomb (statC) [cgs unit]"); data->types[2] = g_strdup("franklin (Fr) [cgs unit]"); data->types[3] = g_strdup("electrostatic unit (esu) [cgs unit]"); data->types[4] = g_strdup("abcoulomb (abC) [cgs unit]"); data->types[5] = g_strdup("electromagnetic unit (emu) [cgs unit]"); data->types[6] = g_strdup(" atomic unit (au) {e}"); data->convTable[0] = 1.0; data->convTable[1] = c*10; data->convTable[2] = c*10; data->convTable[3] = c*10; data->convTable[4] = 1.0/10.0; data->convTable[5] = 1.0/10.0; data->convTable[6] = 1/e; data->defaultInput = 6; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static DataConvFrame* get_voltage_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 4; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("Volt (V)(Kg m^2/A/s^3) [SI unit]"); data->types[1] = g_strdup("abvolt (abV) [cgs unit]"); data->types[2] = g_strdup("statvolt (statV) [cgs unit]"); data->types[3] = g_strdup(" atomic unit (au) {hbar^2 e^-1 a0^-2 me^-1}"); data->convTable[0] = 1.0; data->convTable[1] = 1.0/1e-8; data->convTable[2] = 1.0/299.792458; data->convTable[3] = 1.0/(hbar*hbar/e/a0/a0/me); data->defaultInput = 3; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static DataConvFrame* get_electricfield_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 3; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("Volt per metre (V/m) [SI unit]"); data->types[1] = g_strdup("esu(Fr cm-2 (4 pi epsi0)^-1) [cgs unit]"); data->types[2] = g_strdup(" atomic unit (au) {hbar^2 e^-1 a0^-3 me^-1}"); data->convTable[0] = 1.0; data->convTable[1] = 1.944690567144141e-12/5.830034001970176e-8; data->convTable[2] = 1.0/(hbar*hbar/e/a0/a0/a0/me); data->defaultInput = 2; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static DataConvFrame* get_electricfieldgradient_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 3; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("Volt per metre squared (V/m^2) [SI unit]"); data->types[1] = g_strdup("esu(Fr cm^-3 (4 pi epsi0)^-1) [cgs unit]"); data->types[2] = g_strdup(" atomic unit (au) {hbar^2 e^-1 a0^-4 me^-1}"); data->convTable[0] = 1.0; data->convTable[1] = 1.02908592532868e-22/3.085121117456655e-16; data->convTable[2] = 1.0/(hbar*hbar/e/a0/a0/a0/a0/me); data->defaultInput = 2; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static DataConvFrame* get_electricdipolemoment_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); gdouble ea0 = 1.0/(e*a0); data->n = 4; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("Coulomb metre (C m) [SI unit]"); data->types[1] = g_strdup("esu(Fr cm) [cgs unit]"); data->types[2] = g_strdup("atomic unit (au) {e a0}"); data->types[3] = g_strdup("debye (D)"); data->convTable[0] = 1.0; data->convTable[1] = c*1000; data->convTable[2] = ea0; data->convTable[3] = c*1000*1e18; data->defaultInput = 2; data->defaultOutput = 3; return data; } /********************************************************************************************************/ static DataConvFrame* get_electricquadripolemoment_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 3; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("Coulomb metre squared (C m^2) [SI unit]"); data->types[1] = g_strdup("esu(Fr cm^2) [cgs unit]"); data->types[2] = g_strdup("atomic unit (au) {e a0^2}"); data->convTable[0] = 1.0; data->convTable[1] = c*1e5; data->convTable[2] = 1.0/(e*a0*a0); data->defaultInput = 2; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static DataConvFrame* get_electricdipolepolarizability_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 4; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("J^-1 C^2 m^2 [SI unit]"); data->types[1] = g_strdup("esu( (4 pi epsi0) cm^3) [cgs unit]"); data->types[2] = g_strdup("atomic unit (au) {e^2 a0^4 me hbar^-2}"); data->types[3] = g_strdup("Angstrom^3 (A^3) {(4 pi epsi0)^-1 *SI*10^30}"); data->convTable[0] = 1.0; data->convTable[1] = OneUnderfourPIEpsilon0*1e6; data->convTable[2] = 1.0/(e*e*a0*a0*a0*a0*me/hbar/hbar); data->convTable[3] = OneUnderfourPIEpsilon0*1e30; data->defaultInput = 2; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static DataConvFrame* get_firstelectricdipolehyperpolarizability_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 3; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("J^-2 C^3 m^3 [SI unit]"); data->types[1] = g_strdup("esu(erg^-2 Fr^3 cm^3) [cgs unit]"); data->types[2] = g_strdup("atomic unit (au) {e^3 a0^7 me^2 hbar^-4}"); data->convTable[0] = 1.0; data->convTable[1] = OneUnderfourPIEpsilon0*c*100; data->convTable[2] = 1.0/(e*e*e*a0*a0*a0*a0*a0*a0*a0*me*me/hbar/hbar/hbar/hbar); data->defaultInput = 2; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static DataConvFrame* get_secondelectricdipolehyperpolarizability_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 3; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("J^-3 C^4 m^4 [SI unit]"); data->types[1] = g_strdup("esu(erg^-3 Fr^4 cm^4) [cgs unit]"); data->types[2] = g_strdup("atomic unit (au) {e^4 a0^10 me^3 hbar^-6}"); data->convTable[0] = 1.0; data->convTable[1] = OneUnderfourPIEpsilon0*c*c/100; data->convTable[2] = 1.0/(e*e*e*e*a0*a0*a0*a0*a0*a0*a0*a0*a0*a0*me*me*me/hbar/hbar/hbar/hbar/hbar/hbar); data->defaultInput = 2; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static DataConvFrame* get_magneticinduction_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 3; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("tesla (T) [SI unit]"); data->types[1] = g_strdup("Gauss (G) [cgs unit]"); data->types[2] = g_strdup("atomic unit (au) {hbar e^-1 a0^-2}"); data->convTable[0] = 1.0; data->convTable[1] = 10000.0; data->convTable[2] = 1.0/(hbar/e/a0/a0); data->defaultInput = 2; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static DataConvFrame* get_magneticdipolemoment_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 3; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup("J T^-1 [SI unit]"); data->types[1] = g_strdup("esu(erg G^-1) [cgs unit]"); data->types[2] = g_strdup("atomic unit (au) {e hbar me^-1}"); data->convTable[0] = 1.0; data->convTable[1] = 1000.0; data->convTable[2] = 1.0/(e*hbar/me); data->defaultInput = 2; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static DataConvFrame* get_magnetizability_data() { DataConvFrame* data = g_malloc(sizeof(DataConvFrame)); data->n = 3; data->types = g_malloc(data->n*sizeof(gchar*)); data->convTable = g_malloc(data->n*sizeof(gdouble)); data->types[0] = g_strdup(" J T^-2 [SI unit]"); data->types[1] = g_strdup(" erg G^-2 [cgs unit]"); data->types[2] = g_strdup("atomic unit (au) {e^2 a0^2 me^-1}"); data->convTable[0] = 1.0; data->convTable[1] = 0.1; data->convTable[2] = 1.0/(e*e*a0*a0/me); data->defaultInput = 2; data->defaultOutput = 0; return data; } /********************************************************************************************************/ static void new_calculation(GtkWidget *wid, gpointer d) { GtkWidget* frame = (GtkWidget *)g_object_get_data(G_OBJECT(wid),"Frame"); GtkComboBox* comboboxInput = NULL; GtkWidget* entryInput = NULL; GtkWidget* entryOutput = NULL; GtkComboBox* comboboxOutput = NULL; DataConvFrame* data = NULL; gint i; GtkTreeIter iterInput; GtkTreeIter iterOutput; gchar* optionInput = NULL; gchar* optionOutput = NULL; gint iInput = -1; gint iOutput = -1; if(!frame) return; comboboxInput = (GtkComboBox *)g_object_get_data(G_OBJECT(frame),"ComboInput"); entryInput = (GtkWidget *)g_object_get_data(G_OBJECT(frame),"EntryInput"); comboboxOutput = (GtkComboBox *)g_object_get_data(G_OBJECT(frame),"ComboOutput"); entryOutput = (GtkWidget *)g_object_get_data(G_OBJECT(frame),"EntryOutput"); data = (DataConvFrame *)g_object_get_data(G_OBJECT(frame),"Data"); if (gtk_combo_box_get_active_iter (comboboxInput, &iterInput) && gtk_combo_box_get_active_iter (comboboxOutput, &iterOutput) ) { GtkTreeModel* modelInput = gtk_combo_box_get_model(comboboxInput); GtkTreeModel* modelOutput = gtk_combo_box_get_model(comboboxOutput); gtk_tree_model_get (modelInput, &iterInput, 0, &optionInput, -1); gtk_tree_model_get (modelOutput, &iterOutput, 0, &optionOutput, -1); } if(!optionInput) return; if(!optionOutput) return; /* printf("%s %s \n", optionInput, optionOutput);*/ for(i=0;in;i++) { if(strcmp(optionInput,data->types[i])==0) iInput = i; if(strcmp(optionOutput,data->types[i])==0) iOutput = i; } /* printf("%d %d \n", iInput, iOutput);*/ if(iInput==-1 || iOutput==-1) { gtk_entry_set_text(GTK_ENTRY(entryOutput),"Error"); } else { G_CONST_RETURN gchar* t = gtk_entry_get_text(GTK_ENTRY(entryInput)); gdouble iv = atof(t); gdouble a0 = iv/data->convTable[iInput]; gdouble a1 = a0*data->convTable[iOutput]; gchar tmp[BSIZE]; if(fabs(a1)>1e6 || fabs(a1)<1e-2) sprintf(tmp,"%0.8e",a1); else sprintf(tmp,"%0.8f",a1); gtk_entry_set_text(GTK_ENTRY(entryOutput),tmp); } } /********************************************************************************************************/ static GtkWidget *get_list_types(DataConvFrame* data) { GtkTreeIter iter; GtkTreeStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; gint i; store = gtk_tree_store_new (1,G_TYPE_STRING); for(i=0;in;i++) { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, data->types[i], -1); } model = GTK_TREE_MODEL (store); combobox = gtk_combo_box_new_with_model (model); g_object_unref (model); renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", 0, NULL); return combobox; } /*****************************************************************************/ static void free_data(GtkWidget* frame,gpointer d) { DataConvFrame* data; data = (DataConvFrame *)g_object_get_data(G_OBJECT(frame),"Data"); if(data) { gint i; for(i=0;in;i++) if(data->types[i]) g_free(data->types[i]); if(data->types) g_free(data->types); if(data->convTable) g_free(data->convTable); g_free(data); } } /********************************************************************************/ static GtkWidget* new_conversion_frame(GtkWidget* Dlg, GtkWidget *notebook, gchar* name, DataConvFrame* data) { GtkWidget* Table; GtkWidget* frame; GtkWidget* comboboxInput; GtkWidget* comboboxOutput; GtkWidget* entryInput; GtkWidget* entryOutput; GtkWidget* Label; GtkWidget* label1; GtkWidget* label2; gint i; if(!data) return NULL; if(data->n<1) return NULL; frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); label1 = gtk_label_new(name); label2 = gtk_label_new(name); gtk_notebook_append_page_menu(GTK_NOTEBOOK(notebook), frame, label1, label2); gtk_widget_show (frame); Table = gtk_table_new(2,3,FALSE); gtk_container_add(GTK_CONTAINER(frame),Table); i = 0; Label = gtk_label_new(_(" Source ")); gtk_table_attach(GTK_TABLE(Table),Label,0,1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); entryInput = gtk_entry_new(); gtk_table_attach(GTK_TABLE(Table),entryInput,1,2,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); gtk_editable_set_editable((GtkEditable*) entryInput,TRUE); gtk_entry_set_text(GTK_ENTRY(entryInput),"1"); comboboxInput =get_list_types(data); gtk_table_attach(GTK_TABLE(Table),comboboxInput,2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); i = 1; Label = gtk_label_new(_(" Target ")); gtk_table_attach(GTK_TABLE(Table),Label,0,1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); entryOutput = gtk_entry_new(); gtk_table_attach(GTK_TABLE(Table),entryOutput,1,2,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); gtk_editable_set_editable((GtkEditable*) entryOutput,FALSE); gtk_entry_set_text(GTK_ENTRY(entryOutput),"1"); comboboxOutput =get_list_types(data); gtk_table_attach(GTK_TABLE(Table),comboboxOutput,2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); g_object_set_data(G_OBJECT (frame), "ComboInput",comboboxInput); g_object_set_data(G_OBJECT (frame), "EntryInput",entryInput); g_object_set_data(G_OBJECT (frame), "ComboOutput",comboboxOutput); g_object_set_data(G_OBJECT (frame), "EntryOutput",entryOutput); g_object_set_data(G_OBJECT (frame), "Data",data); g_object_set_data(G_OBJECT (comboboxInput), "Frame",frame); g_object_set_data(G_OBJECT (comboboxOutput), "Frame",frame); g_object_set_data(G_OBJECT (entryInput), "Frame",frame); g_object_set_data(G_OBJECT (entryOutput), "Frame",frame); g_signal_connect (G_OBJECT(comboboxInput), "changed", G_CALLBACK(new_calculation), NULL); g_signal_connect (G_OBJECT(entryInput), "changed", G_CALLBACK(new_calculation), NULL); g_signal_connect (G_OBJECT(comboboxOutput), "changed", G_CALLBACK(new_calculation), NULL); gtk_combo_box_set_active (GTK_COMBO_BOX (comboboxInput), data->defaultInput); gtk_combo_box_set_active (GTK_COMBO_BOX (comboboxOutput), data->defaultOutput); g_object_set_data(G_OBJECT (Dlg), "Data",data); g_signal_connect(G_OBJECT(frame),"destroy",(GCallback)free_data,NULL); return frame; } /*****************************************************************************/ static void destroy_dlg(GtkWidget* Dlg,gpointer d) { gtk_widget_destroy(Dlg); /* DataConvFrame* data; data = (DataConvFrame *)g_object_get_data(G_OBJECT(Dlg),"Data"); if(data) { gint i; for(i=0;in;i++) if(data->types[i]) g_free(data->types[i]); if(data->types) g_free(data->types); if(data->convTable) g_free(data->convTable); g_free(data); } */ } /**********************************************************************/ void create_conversion_dlg() { GtkWidget *Dlg; GtkWidget *Button; DataConvFrame* data; GtkWidget *notebook; Dlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(Dlg),_("Conversion utility")); gtk_window_set_modal (GTK_WINDOW (Dlg), FALSE); gtk_window_set_transient_for(GTK_WINDOW(Dlg),GTK_WINDOW(Fenetre)); gtk_window_set_default_size(GTK_WINDOW(Dlg), ScreenWidth*0.5, -1); g_signal_connect(G_OBJECT(Dlg),"delete_event",(GCallback)destroy_dlg,NULL); notebook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dlg)->vbox), notebook,TRUE, TRUE, 10); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE); data = get_energy_data(); new_conversion_frame(Dlg, notebook, _("Energy"), data); data = get_time_data(); new_conversion_frame(Dlg, notebook, _("Time"), data); data = get_length_data(); new_conversion_frame(Dlg, notebook, _("Length"), data); data = get_velocity_data(); new_conversion_frame(Dlg, notebook, _("Velocity"), data); data = get_acceleration_data(); new_conversion_frame(Dlg, notebook, _("Acceleration"), data); data = get_force_data(); new_conversion_frame(Dlg, notebook, _("Force"), data); data = get_masse_data(); new_conversion_frame(Dlg, notebook, _("Masse"), data); data = get_pressure_data(); new_conversion_frame(Dlg, notebook, _("Pressure"), data); data = get_angularmomentum_data(); new_conversion_frame(Dlg, notebook, _("Angular momentum(Action)"), data); notebook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dlg)->vbox), notebook,TRUE, TRUE, 10); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE); data = get_electriccurrent_data(); new_conversion_frame(Dlg, notebook, _("Electric current"), data); data = get_electriccharge_data(); new_conversion_frame(Dlg, notebook, _("Electric charge"), data); data = get_voltage_data(); new_conversion_frame(Dlg, notebook, _("Voltage"), data); data = get_electricfield_data(); new_conversion_frame(Dlg, notebook, _("Electric field"), data); data = get_electricfieldgradient_data(); new_conversion_frame(Dlg, notebook, _("Electric field gradient"), data); data = get_electricdipolemoment_data(); new_conversion_frame(Dlg, notebook, _("Electric dipole moment"), data); data = get_electricquadripolemoment_data(); new_conversion_frame(Dlg, notebook, _("Electric quadrupole moment"), data); data = get_electricdipolepolarizability_data(); new_conversion_frame(Dlg, notebook, _("Electric dipole polarizability"), data); data = get_firstelectricdipolehyperpolarizability_data(); new_conversion_frame(Dlg, notebook, _("First electric dipole hyperpolarizability"), data); data = get_secondelectricdipolehyperpolarizability_data(); new_conversion_frame(Dlg, notebook, _("Second electric dipole hyperpolarizability"), data); notebook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dlg)->vbox), notebook,TRUE, TRUE, 10); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE); data = get_magneticinduction_data(); new_conversion_frame(Dlg, notebook, _("Magnetic induction"), data); data = get_magneticdipolemoment_data(); new_conversion_frame(Dlg, notebook, _("Magnetic dipole moment"), data); data = get_magnetizability_data(); new_conversion_frame(Dlg, notebook, _("Magnetizability"), data); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(Dlg)->action_area), FALSE); gtk_widget_realize(Dlg); Button = create_button(Dlg,_("Close")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Dlg)->action_area), Button, FALSE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(Button), "clicked",(GCallback)destroy_dlg,GTK_OBJECT(Dlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(GTK_DIALOG(Dlg)->vbox); gtk_widget_show_all(GTK_DIALOG(Dlg)->action_area); gtk_widget_show_now(Dlg); set_icone(Dlg); } GabeditSrc250/src/Utils/Transformation.h0000644000175100017510000000355213130665225020546 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_TRANSFORMATION_H__ #define __GABEDIT_TRANSFORMATION_H__ typedef gdouble V4d[4]; gdouble *v4d_pvect(V4d v1,V4d v2); gdouble v4d_pscal(V4d v1,V4d v2); gdouble* v4d_scal(V4d v1,gdouble scal); gdouble v4d_length(V4d v); void v4d_normal(V4d v); void trackball(gdouble q[4],gdouble p1x,gdouble p1y,gdouble p2x,gdouble p2y); void add_quats(gdouble q1[4],gdouble q2[4],gdouble dest[4]); void build_rotmatrix(gdouble m[4][4],gdouble q[4]); gdouble** Inverse(gdouble **mat,gint size,gdouble error); gdouble** Inverse3(gdouble **mat); #endif /* __GABEDIT_TRANSFORMATION_H__ */ GabeditSrc250/src/Utils/MathFunctions.h0000644000175100017510000000117013130665225020314 0ustar alloucheallouche#ifndef __GABEDIT_MATHFUNCS_H__ #define __GABEDIT_MATHFUNCS_H__ #include "Zlm.h" gdouble factorial(gint); gdouble doubleFactorial(gint); gdouble binomial(gint, gint); gdouble binomial2(gint, gint); gdouble fprod(gint, gint); Zlm fZlm(gint, gint); gdouble modifiedSphericalBessel(gint l, gdouble z); void modifiedSphericalBessel0(gint l, gdouble z[], gdouble b[], gint n); void destroyFactorial(); void destroyDoubleFactorial(); void destroyBinomial(); void destroyFprod(); void destroyZlmTable(); gint m1p(gint i); gdouble dpn(gdouble e,gint n); gdouble H(gint m[3],gdouble **PQn,gdouble *Gk); #endif /* __GABEDIT_MATHFUNCS_H__ */ GabeditSrc250/src/Utils/Zlm.c0000644000175100017510000001604613130665225016277 0ustar alloucheallouche/* Zlm.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Utils/Constants.h" #include "Zlm.h" #include "MathFunctions.h" /* static gint m1p(int i) { if(i%2==0) return 1; else return -1; } static gdouble Cklm(int k,int l,int m) { gdouble p=1.0; int j; for(j=0;j<=k-1;j++) p *=(gdouble)(l-m-2*j)*(gdouble)(l-m-2*j-1)/( 2*(gdouble)(j+1)*(gdouble)(2*l-2*j-1)); return p; } */ /**********************************************/ static void deleteEqZlm(Zlm* zlm) { Zlm St; gint Nc; gint ok; gint i,j,k; gint numberOfCoefficients= zlm->numberOfCoefficients; gint* Ndel= g_malloc(numberOfCoefficients*sizeof(gint)); gint l = zlm->l; gint m = zlm->m; St.l = l; St.m = m; St.numberOfCoefficients = numberOfCoefficients; for(i=0;inumberOfCoefficients*sizeof(LXYZ)); Nc=-1; for(i=0 ; ilxyz[i].l[j]; St.lxyz[Nc].Coef = zlm->lxyz[i].Coef; for(k=i+1 ; knumberOfCoefficients ; k++) { ok=1; /* les 2 sont identiques*/ for(j=0;j<3;j++) if( St.lxyz[Nc].l[j] != zlm->lxyz[k].l[j] ) { ok =0; break; } if(ok == 1) { /* printf("Coef ident l = %d m = %d\n",l,m);*/ St.lxyz[Nc].Coef += zlm->lxyz[k].Coef; Ndel[k] = 1; } } } St.numberOfCoefficients = Nc+1; g_free(Ndel); zlm->l = St.l; zlm->m = St.m; zlm->numberOfCoefficients = St.numberOfCoefficients; for(i=0 ; ilxyz[i] = St.lxyz[i]; g_free(St.lxyz); } /**********************************************/ static void setCoefZlm(Zlm* zlm) { gint Nc = 0; gdouble Norm; gdouble tmp; gint l = zlm->l; gint m = zlm->m; guint absm = abs(m); guint t; guint u; guint v2; LXYZ* lxyz = zlm->lxyz; /*Norm = sqrt((2*l+1)/(4*PI))*sqrt(factorial(l+absm)/factorial(l-absm))*factorial(absm)/doubleFactorial(2*absm); */ Norm = sqrt((2*l+1)/(4*PI))*sqrt(factorial(l+absm)*factorial(l-absm))/factorial(l)/pow(2.0,absm); if(m != 0) Norm *= sqrt(2.0); for (t=0; t <= (l - absm)/2; t++) for (u=0; u<=t; u++) { gint v2m; if (m >= 0) v2m = 0; else v2m = 1; for (v2 = v2m; v2 <= absm; v2+=2) Nc++; } zlm->numberOfCoefficients = Nc; zlm->lxyz = g_malloc(Nc*sizeof(LXYZ)); lxyz = zlm->lxyz; Nc=-1; for (t=0; t <= (l - absm)/2; t++) { for (u=0; u<=t; u++) { gint v2m; if (m >= 0) v2m = 0; else v2m = 1; for (v2 = v2m; v2 <= absm; v2+=2) { Nc++; gint sign; if ((t + (v2-v2m)/2)%2) sign = -1; else sign = 1; tmp = binomial(l,t)*binomial(l-t,absm+t)*binomial(t,u)*binomial(absm,v2); tmp /= pow(4.0,(gint)t); lxyz[Nc].Coef = Norm*tmp*sign; lxyz[Nc].l[0] = 2*t + absm - 2*u - v2; lxyz[Nc].l[1] = 2*u + v2; lxyz[Nc].l[2] = l - lxyz[Nc].l[0] - lxyz[Nc].l[1]; } } } deleteEqZlm(zlm); } /**********************************************/ Zlm getZlm0() { Zlm zlm; zlm.l = 0; zlm.m = 0; zlm.numberOfCoefficients = 1; zlm.lxyz = g_malloc(zlm.numberOfCoefficients*sizeof(LXYZ)); zlm.lxyz[0].Coef = sqrt(1.0/(4*PI)); zlm.lxyz[0].l[0] = 0; zlm.lxyz[0].l[1] = 0; zlm.lxyz[0].l[2] = 0; return zlm; } /**********************************************/ Zlm getZlm(int ll, int mm) { Zlm zlm; if(ll==0 && mm == 0) return getZlm0(); if(ll<0) return getZlm0(); if(abs(mm)>ll) return getZlm0(); zlm.l = ll; zlm.m = mm; setCoefZlm(&zlm); return zlm; } /**********************************************/ void destroyZlm(Zlm* zlm) { if(zlm && zlm->lxyz) g_free(zlm->lxyz); } /*********************************************************/ void copyZlm(Zlm* zlm, Zlm* right) { gint i; if(zlm == right) return; destroyZlm(zlm); zlm->l = right->l; zlm->m = right->m; zlm->numberOfCoefficients = right->numberOfCoefficients; zlm->lxyz = g_malloc(zlm->numberOfCoefficients*sizeof(LXYZ)); for(i=0; inumberOfCoefficients; i++) zlm->lxyz[i] = right->lxyz[i]; } /**********************************************/ gdouble getValueZlm(Zlm* zlm, gdouble x, gdouble y, gdouble z) { gint numberOfCoefficients = zlm->numberOfCoefficients; LXYZ* lxyz = zlm->lxyz; gdouble flm = 0; gint i; if(numberOfCoefficients>=4) { gdouble flm1 = 0; gdouble flm2 = 0; gdouble flm3 = 0; gdouble flm4 = 0; gint r = numberOfCoefficients%4; for(i=0; il,",",zlm->m,")"); printf("%15s%5s%5s%5s\n","************","****","****","****"); printf("%15s%5s%5s%5s\n","Coefficients","lx","ly","lz"); printf("%15s%5s%5s%5s\n","************","****","****","****"); for(i=0; inumberOfCoefficients; i++) printf("%15.8f%5d%5d%5d\n", zlm->lxyz[i].Coef, zlm->lxyz[i].l[0], zlm->lxyz[i].l[1], zlm->lxyz[i].l[2] ); } /*********************************************************/ GabeditSrc250/src/Utils/Jacobi.h0000644000175100017510000000270413130665225016725 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_JACOBI_H__ #define __GABEDIT_JACOBI_H__ gint jacobi(gdouble *M, gint n, gdouble d[], gdouble **v, gint *nrot); #endif /* __GABEDIT_JACOBI_H__ */ GabeditSrc250/src/Utils/MathFunctions.c0000644000175100017510000004512613130665225020320 0ustar alloucheallouche#include #include #include #include #include #include #include "../Utils/Constants.h" #include "Zlm.h" #include "MathFunctions.h" /********************************************************************/ /* Types */ typedef struct _Factorial Factorial; typedef struct _DoubleFactorial DoubleFactorial; typedef struct _Binomial Binomial; typedef struct _Binomial2 Binomial2; /* Ci2j */ typedef struct _Fprod Fprod; typedef struct _ZlmTable ZlmTable; typedef struct _Table2 Table2; struct _Factorial { gdouble* data; gint nMax; }; struct _DoubleFactorial { gdouble* data; gint nMax; }; struct _Binomial { gdouble** data; gint nMax; }; struct _Binomial2 { gdouble** data; gint nMax; }; struct _Fprod { gdouble** data; gint nMax; }; struct _ZlmTable { Zlm** data; gint lMax; }; struct _Table2 { gdouble** data; gint N1; gint N2; }; /* private methods */ static void initFactorial(gint max); static void resizeFactorial(gint max); static gdouble getValueFactorial(gint); static void initDoubleFactorial(gint max); static void resizeDoubleFactorial(gint max); static gdouble getValueDoubleFactorial(gint); static void initBinomial(gint max); static void resizeBinomial(gint max); static gdouble getValueBinomial(gint, gint); static void initBinomial2(gint max); static void resizeBinomial2(gint max); static gdouble getValueBinomial2(gint, gint); static void initFprod(gint max); static void resizeFprod(gint max); static gdouble getValueFprod(gint, gint); static void initZlmTable(gint max); static void resizeZlmTable(gint max); static Zlm getValueZlmTable(gint, gint); /********************************************************************/ static Factorial* f = NULL; /********************************************************************/ gdouble factorial(gint n) { return getValueFactorial(n); } /********************************************************************/ static void initFactorial(gint max) { gint i; if(max<1) max = 1; if(!f) g_free(f); f = g_malloc(sizeof(Factorial)); f->nMax = max; f->data = g_malloc((f->nMax+1)*sizeof(gdouble)); f->data[0] = 1.0; for( i=1;inMax+1;i++) { f->data[i] = f->data[i-1]*i; } } /********************************************************************/ static void resizeFactorial(gint max) { gint i; gint min; gdouble* dataNew =NULL; if(max<1) max = 1; if(f==NULL || f->data == NULL) { initFactorial(max); return; } dataNew =g_malloc((max+1)*sizeof(gdouble)); min =(f->nMax>max)?max:f->nMax; for(i=0;idata[i]; } for(i=min+1;inMax = max; g_free(f->data); f->data = dataNew; } /********************************************************************/ static gdouble getValueFactorial(gint n) { if(n<=1) return 1.0; if(!f) { if(n>10) resizeFactorial(n); else resizeFactorial(10); } if(n>f->nMax) resizeFactorial(n); return f->data[n]; } /********************************************************************/ void destroyFactorial() { if(f && f->data) g_free(f->data); if(f) g_free(f); f = NULL; } /********************************************************************/ static DoubleFactorial* df = NULL; /********************************************************************/ gdouble doubleFactorial(gint n) { return getValueDoubleFactorial(n); } /********************************************************************/ static void initDoubleFactorial(gint max) { gint i; if(max<1) max = 1; if(!df) g_free(df); df = g_malloc(sizeof(DoubleFactorial)); df->nMax = max; df->data = g_malloc((df->nMax+1)*sizeof(gdouble)); df->data[0] = 1.0; for(i=2;inMax+1;i+=2) { df->data[i] = df->data[i-2]*i; } df->data[1] = 1.0; for(i=3;inMax+1;i+=2) { df->data[i] = df->data[i-2]*i; } } /********************************************************************/ static void resizeDoubleFactorial(gint max) { gint i; gint min; gdouble* dataNew =NULL; if(max<1) max = 1; if(df==NULL || df->data == NULL) { initDoubleFactorial(max); return; } dataNew =g_malloc((max+1)*sizeof(gdouble)); min =(df->nMax>max)?max:df->nMax; for(i=0;idata[i]; } for(i=min+1;inMax = max; if(df->data) g_free(df->data); df->data = dataNew; } /********************************************************************/ static gdouble getValueDoubleFactorial(gint n) { if(n<=1) return 1.0; if(!df) { if(n>10) resizeDoubleFactorial(n); else resizeDoubleFactorial(10); } if(n>df->nMax) resizeDoubleFactorial(n); return df->data[n]; } /********************************************************************/ void destroyDoubleFactorial() { if(df && df->data) g_free(df->data); if(df) g_free(df); df = NULL; } /********************************************************************/ static Binomial* b = NULL; /********************************************************************/ gdouble binomial(gint i, gint j) { return getValueBinomial(i, j); } /********************************************************************/ static void initBinomial(gint max) { gint i,j; if(max<1) max = 1; if(b) g_free(b); b = g_malloc(sizeof(Binomial)); b->nMax = max; b->data = g_malloc((b->nMax+1)*sizeof(gdouble*)); for( i=0;inMax+1;i++) b->data[i] = g_malloc((i+1)*sizeof(gdouble)); for( i=0;inMax+1;i++) for( j=0;j<=i;j++) b->data[i][j] = factorial(i)/factorial(j)/factorial(i-j); } /********************************************************************/ static void resizeBinomial(gint max) { gint i,j; gint min; gdouble** dataNew = NULL; if(max<1) max = 1; if(b==NULL || b->data == NULL) { initBinomial(max); return; } dataNew = g_malloc((max+1)*sizeof(gdouble*)); for( i=0;inMax>max)?max:b->nMax; for( i=0;idata[i][j]; } for( i=min+1;idata) { for( i=0;inMax+1;i++) g_free(b->data[i]); g_free(b->data); } b->nMax = max; b->data = dataNew; } /********************************************************************/ static gdouble getValueBinomial(gint i, gint j) { if(j>i) { gint c = i; i = j; j = c; } if(i<=1) return 1.0; if(!b) { if(i>10) resizeBinomial(i); else resizeBinomial(10); } if(i>b->nMax) resizeBinomial(i); return b->data[i][j]; } /********************************************************************/ static Binomial2* b2 = NULL; /********************************************************************/ gdouble binomial2(gint i, gint j) { return getValueBinomial2(i, j); } /********************************************************************/ static void initBinomial2(gint max) { gint i,j; if(max<1) max = 1; if(b2) g_free(b2); b2 = g_malloc(sizeof(Binomial2)); b2->nMax = max; b2->data = g_malloc((b2->nMax+1)*sizeof(gdouble*)); for( i=0;inMax+1;i++) b2->data[i] = g_malloc((i+1)*sizeof(gdouble)); for( i=0;inMax+1;i++) for( j=0;j<=i/2;j++) b2->data[i][j] = factorial(i)/factorial(j)/factorial(i-2*j); } /********************************************************************/ static void resizeBinomial2(gint max) { gint i,j; gint min; gdouble** dataNew = NULL; if(max<1) max = 1; if(b2==NULL || b2->data == NULL) { initBinomial2(max); return; } dataNew = g_malloc((max+1)*sizeof(gdouble*)); for( i=0;inMax>max)?max:b2->nMax; for( i=0;idata[i][j]; } for( i=min+1;idata) { for( i=0;inMax+1;i++) g_free(b2->data[i]); g_free(b2->data); } b2->nMax = max; b2->data = dataNew; } /********************************************************************/ static gdouble getValueBinomial2(gint i, gint j) { if(j>i/2) return 1.0; if(i<=1) return 1.0; if(!b2) { if(i>20) resizeBinomial2(i); else resizeBinomial2(10); } if(i>b2->nMax) resizeBinomial2(i); return b2->data[i][j]; } /********************************************************************/ void destroyBinomial2() { if(b2) { if(b2->data) { gint i; for( i=0;inMax+1;i++) g_free(b2->data[i]); g_free(b2->data); } g_free(b2); } b2 = NULL; } /********************************************************************/ void destroyBinomial() { if(b) { if(b->data) { gint i; for( i=0;inMax+1;i++) g_free(b->data[i]); g_free(b->data); } g_free(b); } b = NULL; } /********************************************************************/ static Fprod* fp = NULL; /********************************************************************/ gdouble fprod(gint i, gint j) { return getValueFprod(i, j); } /********************************************************************/ static void initFprod(gint max) { gint i,j; if(max<1) max = 1; if(fp) g_free(fp); fp = g_malloc(sizeof(Fprod)); fp->nMax = max; fp->data = g_malloc((fp->nMax+1)*sizeof(gdouble*)); for( i=0;inMax+1;i++) fp->data[i] = g_malloc((i+1)*sizeof(gdouble)); for( i=0;inMax+1;i++) { fp->data[i][0] = 1.0; for( j=1;j<=i;j++) fp->data[i][j] = fp->data[i][j-1]*(gdouble)(i-j+1)*(gdouble)(i+j)/(gdouble)(j); } } /********************************************************************/ static void resizeFprod(gint max) { gint i; gint j; gint min; gdouble** dataNew = NULL; if(max<1) max = 1; if(fp==NULL ||fp->data == NULL) { initFprod(max); return; } dataNew = g_malloc((max+1)*sizeof(gdouble*)); for( i=0;inMax>max)?max:fp->nMax; for( i=0;idata[i][j]; } for( i=min+1;idata) { for( i=0;inMax+1;i++) g_free(fp->data[i]); g_free(fp->data); } fp->nMax = max; fp->data = dataNew; } /********************************************************************/ static gdouble getValueFprod(gint i, gint j) { if(j>i) { gint c = i; i = j; j = c; } if(i<=0) return 1.0; if(!fp) { if(i>10) resizeFprod(i); else resizeFprod(10); } if(i>fp->nMax) resizeFprod(i); return fp->data[i][j]; } /********************************************************************/ void destroyFprod() { if(fp) { gint i; if(fp->data) { for( i=0;inMax+1;i++) g_free(fp->data[i]); g_free(fp->data); } g_free(fp); } fp = NULL; } /********************************************************************/ static ZlmTable *z = NULL; /********************************************************************/ Zlm fZlm(gint l, gint m) { return getValueZlmTable(l, m); } /********************************************************************/ static void initZlmTable(gint max) { gint l,m; if(max<0) max = 0; if(z) g_free(z); z = g_malloc(sizeof(ZlmTable)); z->lMax = max; z->data = g_malloc((z->lMax+1)*sizeof(Zlm*)); for( l=0;l<=z->lMax;l++) z->data[l] = g_malloc((2*l+1+1)*sizeof(Zlm)); for( l=0;l<=z->lMax;l++) for( m=-l;m<=l;m++) z->data[l][m+l] = getZlm(l,m); } /********************************************************************/ static void resizeZlmTable(gint max) { if(!z && max<5) initZlmTable(5); else initZlmTable(max); } /********************************************************************/ static Zlm getValueZlmTable(gint l, gint m) { if(m>l) m = l; if(m<-l) m = -l; if(!z) { if(l>10) resizeZlmTable(l); else resizeZlmTable(10); } if(l>z->lMax) resizeZlmTable(l); return z->data[l][m+l]; } /********************************************************************/ void destroyZlmTable() { gint l; if(z) { for(l=0;l<=z->lMax;l++) if(z->data[l]) g_free(z->data[l]); if(z->data) g_free(z->data); } z = NULL; } /********************************************************************/ static Table2 getNewTable2(gint n1,gint n2) { Table2 t; t.N1 = n1; t.N2 = n2; if(n1<1) t.N1 = 1; if(n2<1) t.N2 = 1; t.data = g_malloc(t.N1*t.N2*sizeof(gdouble)); return t; } /********************************************************************/ gdouble getValueTable2(Table2* t, gint i, gint j) { if(i>j) { gint a = i; i=j; j = a;}; if(i<0) i = 0; if(j<0) j = 0; if(iN1-1) i = t->N1-1; if(jN2-1) j = t->N2-1; return t->data[i][j]; } /********************************************************************/ void setValueTable2(Table2* t, gint i, gint j, gdouble v) { if(i>j) { gint a = i; i=j; j = a;}; if(i<0) i = 0; if(j<0) j = 0; if(iN1-1) i = t->N1-1; if(jN2-1) j = t->N2-1; t->data[i][j] = v; } /*********************************************************************/ gint m1p(gint i) { if(i%2==0) return 1; else return -1; } /**********************************************/ gdouble dpn(gdouble e,gint n) { gdouble p=1.0; gint k; if(fabs(e)<1e-10) { if (n==0) return 1.0; else return 0.0; } for(k=1;k<=n;k++) p *=e; return p; } /********************************************************************/ gdouble modifiedSphericalBessel(gint l, gdouble z) { /* evaluates modified spherical bessel function.*/ /* scaled by exp(-z) to prevent overflows */ static gdouble acc = 5.0e-14; gint k; if (z<0.0) return 0.0; if(z==0) { if(l != 0) return 0.0; return 1.0; } if(z<=5.0) { gdouble zp = z*z/2.0; gdouble term =pow(z,l)/doubleFactorial(l+l+1); gdouble bess=term; gint j=0; while(fabs(term/bess)>acc) { j=j+1; term=term*zp/(gdouble)(j*(l+l+j+j+1)); bess += term; } bess *=exp(-z); return bess; } if(z<=16.1) { gdouble rp=0.0; gdouble rm=0.0; gdouble tzp=2.0*z; gdouble tzm=-tzp; for( k = 0; k<=l ; k++) { rp +=fprod(l,k)/pow(tzp,k); rm +=fprod(l,k)/pow(tzm,k); } gdouble bess=(rm-m1p(l)*rp*exp(tzm))/tzp; return bess; } gdouble rm=0.0; gdouble tzm=-2.0*z; for( k=0; k<=l; k++) rm +=fprod(l,k)/pow(tzm,k); gdouble bess=rm/(-tzm); return bess; } /*********************************************************************/ void modifiedSphericalBessel0(gint l, gdouble z[], gdouble b[], gint n) { /* this routine evaluates modified spherical bessel functions. vector version. the arguments: b[] bessel function at requested points. z[] the points at which the function is to be evaluated. assumed to be in ascending order. l the l value of the function. n the number of requested points. for arguments (z.le.5.0) use power series 15 terms good to 5.0d-14 (z.gt.5.0) use exponential representation. (z.gt.16.1) only first term in exponential representation is required. result has a factor of exp(-z) included to avoid overflow. */ /* determine the number of points in each region.*/ gint ilo1 = 0, ilo2 = 0, ilo3 = 0; gint n1 = 0, n2 = 0, n3 = 0; static gdouble* zp = NULL; static gdouble* rp = NULL; static gdouble* rm = NULL; static gdouble* tzmi = NULL; static gdouble* texm = NULL; gint i,j,k1; Table2 denm; Table2 denp; gint ihi1; gint ihi2; gint ihi3; if(zp==NULL) { zp = g_malloc((125+1)*sizeof(gdouble)); rp = g_malloc((125+1)*sizeof(gdouble)); rm = g_malloc((125+1)*sizeof(gdouble)); tzmi = g_malloc((125+1)*sizeof(gdouble)); texm = g_malloc((125+1)*sizeof(gdouble)); } if(n>125) { g_free(zp); g_free(rp); g_free(rm); g_free(tzmi); g_free(texm); zp = g_malloc((n+1)*sizeof(gdouble)); rp = g_malloc((n+1)*sizeof(gdouble)); rm = g_malloc((n+1)*sizeof(gdouble)); tzmi = g_malloc((n+1)*sizeof(gdouble)); texm = g_malloc((n+1)*sizeof(gdouble)); } denm = getNewTable2(n+1,l+2); denp = getNewTable2(n+1,l+2); for( i=1; i<=n; i++) { if(z[i]<0) { b[i] = 0; continue; } if(z[i]==0) { b[i] = 0; if(l==0) b[i] = 1.0; continue; } if(z[i]<=5.0) { if(ilo1==0) ilo1 = i; n1++; continue; } if(z[i]<=16.1) { if(ilo2==0) ilo2 = i; n2++; continue; } if(ilo3==0) ilo3 = i; n3++; } ihi1=ilo1+n1-1; ihi2=ilo2+n2-1; ihi3=ilo3+n3-1; if(n1 != 0) { /*power series.*/ gdouble v = 1.0/doubleFactorial(l+l+1); for( i = ilo1; i<= ihi1; i++) { zp[i]=z[i]*z[i]*0.5; rm[i]=pow(z[i],l)*v; b[i]=rm[i]; } for( j=1; j<=15; j++) rp[j]=1.0/(gdouble)(j*(l+l+j+j+1)); for( j=1; j<=15; j++) for( i = ilo1; i<= ihi1; i++) { rm[i] *=zp[i]*rp[j]; b[i]=b[i]+rm[i]; } for( i = ilo1; i<= ihi1; i++) b[i] *=exp(-z[i]); } if(n2 != 0) { /* exponential represention.*/ gint l1=l+1; gdouble tzi; gdouble v = fprod(l,0); for( i = ilo2; i<= ihi2; i++) { rp[i]=v; rm[i]=v; tzi=2.0*z[i]; zp[i]=1.0/tzi; tzmi[i]=-zp[i]; texm[i]=exp(-tzi); setValueTable2(&denm, i,1,1.0); setValueTable2(&denp, i,1,1.0); } if(l1>1) { for( k1=2; k1<=l1; k1++) for( i = ilo2; i<= ihi2; i++) { setValueTable2(&denp,i,k1,getValueTable2(&denp,i,k1-1)*zp[i]); setValueTable2(&denm, i,k1, getValueTable2(&denm,i,k1-1)*tzmi[i]); } for( k1=2; k1<=l1; k1++) for( i = ilo2; i<= ihi2; i++) { rp[i] += getValueTable2(&denp,i,k1)*fprod(l, k1-1); rm[i] += getValueTable2(&denm,i,k1)*fprod(l, k1-1); } } v = m1p(l); for( i = ilo2; i<= ihi2; i++) b[i]=(rm[i]-v*rp[i]*texm[i])*zp[i]; } /*only first term in exponential representation.*/ if(n3 != 0) { gint l1=l+1; gdouble v = fprod(0,l); for( i = ilo3; i<= ihi3; i++) { rm[i]=v; tzmi[i]=-0.5/z[i]; setValueTable2(&denm, i,1,1.0); } if(l1>1) { for( k1=2; k1<=l1; k1++) for( i = ilo3; i<= ihi3; i++) setValueTable2(&denm,i,k1,getValueTable2(&denm,i,k1-1)*tzmi[i]); for( k1=2; k1<=l1; k1++) for( i = ilo3; i<= ihi3; i++) rm[i] += getValueTable2(&denm,i,k1)*fprod(k1-1,l); } for( i = ilo3; i<= ihi3; i++) b[i]=-rm[i]*tzmi[i]; } } /**********************************************/ /*gdouble H(gint m[3],gdouble *Fk,gdouble **hx,gdouble **hy,gdouble **hz)*/ gdouble H(gint m[3],gdouble **PQn,gdouble *Gk) { gint u,v,w; gint k; gdouble h=0.0; gint mm=m[0]+m[1]+m[2]; gdouble tempu; gdouble temp; for(u=0;u<=m[0]/2;u++) { if(PQn[0][m[0]-2*u]==0)continue; tempu =m1p(u)* binomial2(m[0],u)*PQn[0][m[0]-2*u]; for(v=0;v<=m[1]/2;v++) { if(PQn[1][m[1]-2*v]==0)continue; temp =tempu*m1p(v)*binomial2(m[1],v)*PQn[1][m[1]-2*v]; for(w=0;w<=m[2]/2;w++) { if(PQn[2][m[2]-2*w]==0)continue; k = mm-u-v-w; h+=temp*m1p(w)*binomial2(m[2],w)*PQn[2][m[2]-2*w]*Gk[k]; } } } return h; } GabeditSrc250/src/Utils/Vector3d.h0000644000175100017510000000340013130665225017221 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_VECTOR3D_H__ #define __GABEDIT_VECTOR3D_H__ typedef gdouble V3d[3]; void v3d_zero(V3d v); void v3d_set(V3d v, gdouble x, gdouble y, gdouble z); void v3d_sub(V3d src1, V3d src2, V3d dst); void v3d_copy(V3d v1, V3d v2); void v3d_cross(V3d v1, V3d v2, V3d cross); gdouble v3d_length(V3d v); void v3d_scale(V3d v, gdouble div); void v3d_normal(V3d v); gdouble v3d_dot(V3d v1, V3d v2); void v3d_add(V3d src1, V3d src2, V3d dst); #endif /* __GABEDIT_VECTOR3D_H__ */ GabeditSrc250/src/Utils/UtilsInterface.h0000644000175100017510000001634113130665225020461 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_UTILSINTERFACE_H__ #define __GABEDIT_UTILSINTERFACE_H__ void create_popup_win(gchar* label); void init_child(GtkWidget *widget, GabeditSignalFunc func,gchar *buttonlabel); void add_child(GtkWidget *widget,GtkWidget *childwidget,GabeditSignalFunc func,gchar *buttonlabel); void delete_child(GtkWidget *childwidget); void delete_all_children(GtkWidget *widget); void destroy_children(GtkWidget *widget); GtkWidget *create_pixmap(GtkWidget *widget, gchar **data); GdkPixmap *get_pixmap(GtkWidget *widget,gushort red,gushort green,gushort blue); GtkWidget *create_hbox_pixmap_color(GtkWidget *widget,gushort red,gushort green,gushort blue); GtkWidget *create_button_pixmap_color(GtkWidget *widget,gushort red,gushort green,gushort blue); GtkWidget *create_radio_button_pixmap(GtkWidget *widget, gchar **data,gchar *string,GtkWidget *oldbutton); void set_icon_default(); void set_icone(GtkWidget* widget); void data_modify(gboolean mod); GtkWidget *create_label_with_pixmap(GtkWidget *Win,gchar *string,gchar *type); GtkWidget *create_button(GtkWidget *Win,gchar *string); void exit_all(GtkWidget *widget, gchar *data); void change_label_onglet(); void change_all_labels(); void select_all(); void destroy( GtkWidget *, gpointer); void Cancel_YesNo(GtkWidget *widget, gpointer data, GabeditSignalFunc func); void get_doc(gchar *); void charge_doc(GtkWidget* wid, gpointer data); void inserrer_doc(void); void show_doc(GabeditFileChooser *, gint response_id); void insert_doc(GabeditFileChooser *, gint response_id); void save_as_doc(void); void save_doc(void); void enreg_selec_doc(GabeditFileChooser *, gint response_id); void desole(); void change_insert(); void new_doc_molpro(); void new_doc_gauss(); void new_doc_orca(); void new_doc_qchem(); void insert_doc_gauss(); gchar* get_license(); void new_psicode(GtkWidget *widget, gchar *data); void show_about(); void show_version(); void show_homepage(); void create_label_hbox(GtkWidget *,gchar *,gint ); GtkWidget *create_hbox(GtkWidget *); GtkWidget *create_vbox(GtkWidget *); GtkWidget *create_frame(GtkWidget *,GtkWidget *,gchar *); GtkWidget *create_text(GtkWidget *,GtkWidget *,gboolean ); void gtk_combo_box_entry_set_popdown_strings(GtkWidget* comboBoxEntry, GList *list); GtkWidget* create_label_combo_in_table(GtkWidget *table,gchar *tlabel,gchar **tlist,gint nlist, gboolean edit,gint llen,gint elen, gint iligne); GtkWidget* create_combo_box_entry(gchar **tlist,gint nlist, gboolean edit,gint llen,gint elen); GtkWidget *create_combo_box_entry_liste(GtkWidget* Window,GtkWidget* hbox,gchar *lname,gchar **liste,int n); void view_result(); void view_result_end(); void get_result(); GtkWidget * create_hseparator(GtkWidget *); GtkWidget * create_vseparator(GtkWidget *); GtkWidget *create_label_button(GtkWidget *,GtkWidget *,GtkWidget* ,gchar *,gchar *); void ClearText(GtkWidget *); GtkWidget* create_vbox_false(GtkWidget *); GtkWidget* create_hbox_false(GtkWidget *); GtkWidget* create_hbox_true(GtkWidget *); GtkWidget* create_label_entry(GtkWidget *,gchar *,gint,gint); GtkWidget* create_label_combo(GtkWidget *,gchar *, gchar **,gint , gboolean,gint,gint ); GtkWidget* Message(char *message,char *titre,gboolean center); GtkWidget* MessageTxt(gchar *message,gchar *title); void show_forbidden_characters(); gboolean variable_name_valid(gchar *); void cree_p_vbox(); GtkWidget *create_checkbutton(GtkWidget *,GtkWidget *,gchar *); void cree_vboxs_list_text(); void goto_end(GtkWidget *current,gpointer data); void goto_end_result(GtkWidget *win,gpointer data); void read_geom_in_gamess_input(gchar *); void read_geom_in_demon_input(gchar *); void read_geom_in_gauss_input(gchar *); void read_geom_in_molcas_input(gchar *); void read_geom_in_molpro_input(gchar *); void read_geom_in_mpqc_input(gchar *); void read_geom_in_nwchem_input(gchar *); void read_geom_in_psicode_input(gchar *); void read_geom_in_orca_input(gchar *); void read_geom_in_qchem_input(gchar *); void read_geom_in_mopac_input(gchar *); GtkWidget *Continue_YesNo(void (*func)(GtkWidget*,gpointer data),gpointer data,gchar *message); void open_file(GtkWidget *widget, gchar *data); void new_molcas(GtkWidget *widget, gchar *data); void new_molpro(GtkWidget *widget, gchar *data); void new_mopac(GtkWidget *widget, gchar *data); void new_mpqc(GtkWidget *widget, gchar *data); void new_demon(GtkWidget *widget, gchar *data); void new_gamess(GtkWidget *widget, gchar *data); void new_firefly(GtkWidget *widget, gchar *data); void new_gauss(GtkWidget *widget, gchar *data); void new_nwchem(GtkWidget *widget, gchar *data); void new_orca(GtkWidget *widget, gchar *data); void new_qchem(GtkWidget *widget, gchar *data); void new_other(GtkWidget *widget, gchar *data); GtkWidget *create_button_pixmap(GtkWidget *widget, gchar **data,gchar *string); GtkWidget *create_hbox_browser(GtkWidget* Wins,GtkWidget* vbox,gchar *tlabel,gchar *deffile,gchar** patterns); GtkWidget* create_table_browser(GtkWidget *Wins,GtkWidget *vbox); void add_widget_table(GtkWidget *Table,GtkWidget *wid,gushort line,gushort colonne); GtkWidget *add_label_at_table(GtkWidget *Table,gchar *label,gushort line,gushort colonne,GtkJustification just); GtkWidget *add_label_table(GtkWidget *Table, G_CONST_RETURN gchar *label,gushort line,gushort colonne); void set_default_styles(); GtkWidget *create_label_pixmap(GtkWidget *widget, gchar **data,gchar *string); GtkWidget* create_text_widget(GtkWidget* box,gchar *title,GtkWidget **frame); void draw_density_orbitals_gamess_or_gauss_or_molcas_or_molpro(GtkWidget *wid,gpointer data); void set_last_directory(G_CONST_RETURN gchar* FileName); GtkWidget* set_dipole_dialog (); gchar* get_last_directory(); void fit_windows_position(GtkWidget* parent, GtkWidget* child); void create_opengl_frame(GtkWidget* Win,GtkWidget *vbox); void read_admp_build_dipole_dipole_autocorrelation_dlg(); void read_dipole_build_dipole_dipole_autocorrelation_dlg(); GtkWidget* gabedit_dir_button(); void add_cancel_ok_buttons(GtkWidget *Win, GtkWidget *vbox, GCallback myFunc); #endif /* __GABEDIT_UTILSINTERFACE_H__ */ GabeditSrc250/src/Utils/GabeditXYPlot.c0000644000175100017510000141000613130665225020207 0ustar alloucheallouche/* GabeditXYPlot.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #define GETTEXT_PACKAGE "gabedit" #include #include #include #include #include #include #include #include #include #include #include #include #include "GabeditXYPlot.h" #define XYPLOT_DEFAULT_SIZE 300 #define BSIZE 1024 #define SCALE(i) (i / 65535.) #define SCALE2(i) (i * 65535.) typedef enum { JDX_TYPE_XYDATA, JDX_TYPE_XYPOINTS, JDX_TYPE_XYTABLE, JDX_TYPE_UNKNOWN } JDXType; /****************************************************************************************/ static gint get_distance_M_AB(GabeditXYPlot *xyplot,gint xM, gint yM, gint ixA, gint iyA, gint ixB, gint iyB); static void gabedit_xyplot_cairo_string(cairo_t* cr, GtkWidget *widget, GdkGC* gc, gint x, gint y, G_CONST_RETURN gchar* str, gboolean centerX, gboolean centerY, gdouble angle); static void gabedit_xyplot_cairo_line(cairo_t* cr, GtkWidget *widget, GdkGC* gc, gdouble x1,gdouble y1,gdouble x2,gdouble y2); static void gabedit_xyplot_cairo_lines(cairo_t *cr, GtkWidget* widget, GdkGC* gc, GdkPoint* points, gint size); static void gabedit_xyplot_cairo_rectangle(cairo_t* cr, GtkWidget *widget, GdkGC* gc, gboolean fill, gdouble x1,gdouble y1,gdouble w,gdouble h); /* static void gabedit_xyplot_cairo_cercle(cairo_t* cr, GtkWidget *widget, GdkGC* gc, gint xc,gint yc,gint rayon);*/ static void xyplot_cairo_string(GabeditXYPlot *xyplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, gint x, gint y, G_CONST_RETURN gchar* str, gboolean centerX, gboolean centerY, gdouble angle); static void xyplot_cairo_line(GabeditXYPlot *xyplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, gdouble x1,gdouble y1,gdouble x2,gdouble y2); static void xyplot_cairo_lines(GabeditXYPlot *xyplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, GdkPoint* points, gint size); static void xyplot_cairo_rectangle(GabeditXYPlot *xyplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, gboolean fill, gdouble x1,gdouble y1,gdouble w,gdouble h); /* static void xyplot_cairo_cercle(GabeditXYPlot *xyplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, gint xc,gint yc,gint rayon);*/ static void gabedit_xyplot_class_init (GabeditXYPlotClass *klass); static void gabedit_xyplot_init (GabeditXYPlot *xyplot); static void gabedit_xyplot_destroy (GtkObject *object); static void gabedit_xyplot_realize (GtkWidget *widget); static void gabedit_xyplot_size_request (GtkWidget *widget, GtkRequisition *requisition); static void gabedit_xyplot_size_allocate (GtkWidget *widget, GtkAllocation *allocation); static gint gabedit_xyplot_expose (GtkWidget *widget, GdkEventExpose *event); static gint gabedit_xyplot_button_press (GtkWidget *widget, GdkEventButton *event); static gint gabedit_xyplot_button_release (GtkWidget *widget, GdkEventButton *event); static gint gabedit_xyplot_motion_notify (GtkWidget *widget, GdkEventMotion *event); static gint gabedit_xyplot_key_press(GtkWidget* widget, GdkEventKey *event); static gint gabedit_xyplot_key_release(GtkWidget* widget, GdkEventKey *event); static gint gabedit_xyplot_scroll (GtkWidget *widget, GdkEventScroll *event); static void gabedit_xyplot_style_set (GtkWidget *widget, GtkStyle *previous_style); static gint gabedit_xyplot_grab(GtkWidget* widget, GdkEventCrossing* event); static void xyplot_enable_grids (GabeditXYPlot *xyplot, GabeditXYPlotGrid grid, gboolean enable); static void xyplot_show_left_legends (GabeditXYPlot *xyplot, gboolean show); static void xyplot_show_right_legends (GabeditXYPlot *xyplot, gboolean show); static void xyplot_show_top_legends (GabeditXYPlot *xyplot, gboolean show); static void xyplot_show_bottom_legends (GabeditXYPlot *xyplot, gboolean show); static void xyplot_show_rectangle_legends (GabeditXYPlot *xyplot, gboolean show); static void xyplot_reflect_x (GabeditXYPlot *xyplot, gboolean enable); static void xyplot_reflect_y (GabeditXYPlot *xyplot, gboolean enable); static void saveAsGabeditDlg(GtkWidget* xyplot); static void readAGabeditDlg(GtkWidget* xyplot); static void reset_theme(GtkWidget *widget, gint line_width, GdkColor* foreColor, GdkColor* backColor ); static void set_theme_publication(GtkWidget *widget); static void set_theme_green_black(GtkWidget *widget); static void set_theme_dialog(GtkWidget* widget); static void gabedit_xyplot_cairo_layout(cairo_t* cr, gdouble x, gdouble y, PangoLayout *layout, gboolean centerX, gboolean centerY, gdouble angle); /****************************************************************************************/ static GtkWidgetClass *parent_class = NULL; /* TO DELETE */ /****************************************************************************************/ static void xyplot_calculate_sizes (GabeditXYPlot *xyplot); static void value2pixel(GabeditXYPlot *xyplot, gdouble xv, gdouble yv, gint *x, gint *y); static void pixel2value(GabeditXYPlot *xyplot, gint xp, gint yp, gdouble *x, gdouble *y); static void xyplot_calculate_legends_sizes(GabeditXYPlot *xyplot); static void xyplot_build_legends(GabeditXYPlot *xyplot); static void xyplot_free_legends(GabeditXYPlot *xyplot); static void xyplot_build_points_data(GabeditXYPlot *xyplot, XYPlotData *data); static PangoLayout* get_pango_str(GabeditXYPlot *xyplot, G_CONST_RETURN gchar* txt); static void xyplot_curve_noconv(GabeditXYPlot *xyplot, gint numberOfPoints, gdouble* X, gdouble* Y, GdkColor* color); /****************************************************************************************/ static void uppercase(gchar *str) { while( *str != '\0') { if (isalpha((gint)*str)) if (islower((gint)*str)) *str = toupper((gint)*str); str ++; } } /****************************************************************************************/ static void build_linear_x(gdouble* x0, gdouble* y0, gint n, gdouble**X, gdouble** Y, gint N) { gdouble dx = 0; gdouble* x = NULL; gdouble* y = NULL; gint i,j; *X= x; *Y= y; if(n<1||N<2) return; x = g_malloc(N*sizeof(gdouble)); y = g_malloc(N*sizeof(gdouble)); dx = (x0[n-1]-x0[0])/(N-1); x[0] = x0[0]; for(i=1;i=0; j--) if(x[i]>x0[j]) break; if(j==n-1) y[i] = y0[j]; else y[i] = (y0[j+1]-y0[j])/(x0[j+1]-x0[j])*(x[i]-x0[j])+y0[j]; } *X = x; *Y = y; } /****************************************************************************************/ static void xyplot_message(gchar* message) { GtkWidget* dialog = NULL; dialog = gtk_message_dialog_new_with_markup (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "%s", message); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } /**********************************************************************************/ static void calc_arrow_vertexes( gdouble arrow_degrees, gdouble arrow_lenght, gdouble start_x, gdouble start_y, gdouble end_x, gdouble end_y, gdouble* x1, gdouble* y1, gdouble* x2, gdouble* y2 ) { gdouble angle = atan2 (end_y - start_y, end_x - start_x) + M_PI; arrow_degrees = arrow_degrees/180.0*M_PI; *x1 = end_x + arrow_lenght * cos(angle - arrow_degrees); *y1 = end_y + arrow_lenght * sin(angle - arrow_degrees); *x2 = end_x + arrow_lenght * cos(angle + arrow_degrees); *y2 = end_y + arrow_lenght * sin(angle + arrow_degrees); } /**********************************************************************************/ static void gabedit_xyplot_cairo_image(cairo_t* cr, GtkWidget *widget, gint x, gint y, gint w, gint h, cairo_surface_t *image) { gint ow = 1; gint oh = 1; if(!image) return; if(x<0||y<0) return; /* printf("x = %d y = %d w = %d h = %d\n",x,y,w,h);*/ ow = cairo_image_surface_get_width (image); oh = cairo_image_surface_get_height (image); cairo_save (cr); cairo_translate (cr, x,y); cairo_scale (cr, (gdouble)w/ow, (gdouble)h/oh); cairo_set_source_surface (cr, image, 0, 0); cairo_paint (cr); cairo_stroke (cr); cairo_restore (cr); } /**********************************************************************************/ static void gabedit_xyplot_cairo_string(cairo_t* cr, GtkWidget *widget, GdkGC* gc, gint x, gint y, G_CONST_RETURN gchar* str, gboolean centerX, gboolean centerY, gdouble angle) { PangoLayout* pango = get_pango_str(GABEDIT_XYPLOT(widget), str); gabedit_xyplot_cairo_layout(cr, x, y, pango, centerX, centerY, angle) ; g_object_unref(G_OBJECT(pango)); } /*****************************************************************************/ static void gabedit_xyplot_cairo_line(cairo_t *cr, GtkWidget* widget, GdkGC* gc, gdouble x1,gdouble y1,gdouble x2,gdouble y2) { GdkGCValues values; GdkColor color; double r,g,b; GdkColormap *colormap; double dashes[] = {5.0, /* ink */ 5.0, /* skip */ 10.0, /* ink */ 5.0 /* skip*/ }; int ndash = sizeof (dashes)/sizeof(dashes[0]); double offset = -5.0; if(!cr) return; if(!gc) return; cairo_save (cr); gdk_gc_get_values(gc, &values); switch(values.cap_style) { case GDK_CAP_NOT_LAST: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; case GDK_CAP_BUTT: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; case GDK_CAP_ROUND: cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); break; case GDK_CAP_PROJECTING: cairo_set_line_cap(cr, CAIRO_LINE_CAP_SQUARE); break; default: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; } switch(values.join_style) { case GDK_JOIN_MITER: cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);break; case GDK_JOIN_ROUND : cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);break; case GDK_JOIN_BEVEL : cairo_set_line_join (cr, CAIRO_LINE_JOIN_BEVEL);break; default: cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);break; } switch(values.line_style) { case GDK_LINE_SOLID : ndash = 0; break; case GDK_LINE_ON_OFF_DASH : ndash = 2; break; case GDK_LINE_DOUBLE_DASH : break; default : ndash = 0; } colormap = gdk_window_get_colormap(widget->window); gdk_colormap_query_color(colormap, values.foreground.pixel,&color); if( ndash != 0) cairo_set_dash (cr, dashes, ndash, offset); r = SCALE(color.red); g = SCALE(color.green); b = SCALE(color.blue); cairo_set_source_rgba (cr, r, g, b, 1.0); if(values.line_width<1) values.line_width = 1; cairo_set_line_width (cr, values.line_width); cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_stroke (cr); cairo_restore (cr); } /*****************************************************************************/ static void gabedit_xyplot_cairo_lines(cairo_t *cr, GtkWidget* widget, GdkGC* gc, GdkPoint* points, gint size) { gint i; for(i=0;iwindow); gdk_colormap_query_color(colormap, values.foreground.pixel,&color); if( ndash != 0) cairo_set_dash (cr, dashes, ndash, offset); r = SCALE(color.red); g = SCALE(color.green); b = SCALE(color.blue); cairo_set_source_rgba (cr, r, g, b, 1.0); cairo_move_to (cr, x1, y1); cairo_rel_line_to (cr, w, 0); cairo_rel_line_to (cr, 0, h); cairo_rel_line_to (cr, -w, 0); cairo_close_path (cr); if(values.line_width<1) values.line_width = 1; if(fill) cairo_fill(cr); else cairo_set_line_width (cr, values.line_width); cairo_stroke (cr); cairo_restore (cr); } /**********************************************************************************/ static void gabedit_xyplot_cairo_layout(cairo_t* cr, gdouble x, gdouble y, PangoLayout *layout, gboolean centerX, gboolean centerY, gdouble angle) { cairo_save (cr); if(centerX || centerY) { gint w; gint h; pango_layout_get_size(layout,&w,&h); if(centerX) x-=w/2/PANGO_SCALE*cos(angle)-h/2/PANGO_SCALE*sin(angle); if(centerY) y-=w/2/PANGO_SCALE*sin(angle)+h/2/PANGO_SCALE*cos(angle); } cairo_move_to(cr, x,y); cairo_rotate(cr, angle); pango_cairo_show_layout(cr,layout); cairo_stroke (cr); cairo_restore (cr); } /****************************************************************************************/ static void xyplot_cairo_image(GabeditXYPlot *xyplot, cairo_t* cr, GtkWidget *widget, gint x, gint y, gint w, gint h, cairo_surface_t *image) { gabedit_xyplot_cairo_image(cr, widget, x, y, w, h, image); if(xyplot->cairo_export) gabedit_xyplot_cairo_image(xyplot->cairo_export, widget, x, y, w, h, image); } /****************************************************************************************/ static void xyplot_cairo_string(GabeditXYPlot *xyplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, gint x, gint y, G_CONST_RETURN gchar* str, gboolean centerX, gboolean centerY, gdouble angle) { gabedit_xyplot_cairo_string(cr, widget, gc, x, y, str, centerX, centerY, angle); if(xyplot->cairo_export) gabedit_xyplot_cairo_string(xyplot->cairo_export, widget, gc, x, y, str, centerX, centerY, angle); } /****************************************************************************************/ static void xyplot_cairo_line(GabeditXYPlot *xyplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, gdouble x1,gdouble y1,gdouble x2,gdouble y2) { gabedit_xyplot_cairo_line(cr, widget, gc, x1, y1, x2, y2); if(xyplot->cairo_export) gabedit_xyplot_cairo_line(xyplot->cairo_export, widget, gc, x1, y1, x2, y2); } /****************************************************************************************/ static void xyplot_cairo_rectangle(GabeditXYPlot *xyplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, gboolean fill, gdouble x1,gdouble y1,gdouble x2,gdouble y2) { gabedit_xyplot_cairo_rectangle(cr, widget, gc, fill, x1, y1, x2, y2); if(xyplot->cairo_export) gabedit_xyplot_cairo_rectangle(xyplot->cairo_export, widget, gc, fill, x1, y1, x2, y2); } /****************************************************************************************/ static void xyplot_cairo_lines(GabeditXYPlot *xyplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, GdkPoint* points, gint size) { gabedit_xyplot_cairo_lines(cr, widget, gc, points, 2); if(xyplot->cairo_export && size>0) { GdkPoint* pointsScal = g_malloc(size*sizeof(GdkPoint)); gint i; if(!pointsScal) return; for(i=0;iplotting_rect.x; pointsScal[i].y = points[i].y + xyplot->plotting_rect.y; } gabedit_xyplot_cairo_lines(xyplot->cairo_export, widget, gc, pointsScal, 2); if(pointsScal) g_free(pointsScal); } } /****************************************************************************************/ /* static void xyplot_cairo_cercle(GabeditXYPlot *xyplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, gint xc,gint yc,gint rayon) { gabedit_xyplot_cairo_cercle(cr, widget, gc, xc, yc, rayon); if(xyplot->cairo_export) gabedit_xyplot_cairo_cercle(xyplot->cairo_export, widget, gc, xc, yc, rayon); } */ /****************************************************************************************/ static void xyplot_cairo_layout(GabeditXYPlot *xyplot, cairo_t* cr, gdouble x, gdouble y, PangoLayout *layout, gboolean centerX, gboolean centerY, gdouble angle) { gabedit_xyplot_cairo_layout(cr, x, y, layout, centerX, centerY, angle); if(xyplot->cairo_export) { if(cr == xyplot->cairo_area) { x += xyplot->plotting_rect.x; y += xyplot->plotting_rect.y; } gabedit_xyplot_cairo_layout(xyplot->cairo_export, x, y, layout, centerX, centerY, angle); } } /****************************************************************************************/ /* static void list_utf8() { gchar tmp[10000]; gchar t[10000]; GtkWidget* dialog = NULL; gint i=32; sprintf(tmp,"%d(&#%d;) ",i,i); for(i=9600;i<9700;i++) { sprintf(t,"%s",tmp); sprintf(tmp,"%s %d(&#%d;) ",t,i,i); } dialog = gtk_message_dialog_new_with_markup (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_YES_NO, tmp ); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } */ /****************************************************************************************/ static GtkWidget* get_parent_window(GtkWidget* widget) { GtkWidget* parent = NULL; GtkWidget* child = widget; do { parent = gtk_widget_get_parent(child); child = parent; } while( parent && !GTK_IS_WINDOW(parent)); return parent; } /****************************************************************************************/ static void destroy_xyplot_window(GtkWidget* xyplot) { GtkWidget* parentWindow; parentWindow = get_parent_window(GTK_WIDGET(xyplot)); if(parentWindow) gtk_object_destroy (GTK_OBJECT(parentWindow)); } /****************************************************************************************/ static GdkColor get_fore_color(GabeditXYPlot *xyplot) { GdkGCValues values; GdkColormap *colormap; GdkColor color; gdk_gc_get_values(xyplot->fore_gc, &values); colormap = gdk_window_get_colormap(GTK_WIDGET(xyplot)->window); gdk_colormap_query_color(colormap, values.foreground.pixel,&color); return color; } /****************************************************************************************/ static void destroy_data_dialog(GtkWidget* win, GdkEvent *event, gpointer user_data) { gtk_object_destroy (GTK_OBJECT(win)); } /********************************************************************************/ static gboolean remove_all_data(GtkWidget* xyplot, gint response_id) { if(response_id != GTK_RESPONSE_YES) return FALSE; if(!xyplot) return FALSE; if(GABEDIT_XYPLOT(xyplot)->data_list) { g_list_foreach(GABEDIT_XYPLOT(xyplot)->data_list, (GFunc)g_free, NULL); g_list_free(GABEDIT_XYPLOT(xyplot)->data_list); GABEDIT_XYPLOT(xyplot)->data_list = NULL; } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); return TRUE; } /********************************************************************************/ static void remove_all_data_dlg(GtkWidget* xyplot) { GtkWidget* parentWindow = get_parent_window(GTK_WIDGET(xyplot)); GtkWidget* dialog = gtk_message_dialog_new (GTK_WINDOW(parentWindow), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("Are you sure to remove all data ?") ); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_NO); g_signal_connect_swapped(dialog, "response", G_CALLBACK (remove_all_data), xyplot); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } /*****************************************************************************************/ static void file_chooser_set_filters(GtkFileChooser *fileChooser,gchar **patterns) { GtkFileFilter *filter; GtkFileFilter *filter0 = NULL; gint n = 0; g_return_if_fail (fileChooser != NULL); g_return_if_fail (GTK_IS_FILE_CHOOSER(fileChooser)); g_return_if_fail (patterns != NULL); while(patterns[n]) { filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, patterns[n]); gtk_file_filter_add_pattern (filter, patterns[n]); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (fileChooser), filter); if(n==0) filter0 = filter; n++; } if(filter0)gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (fileChooser), filter0); } /********************************************************************************/ static GtkWidget* new_file_chooser_open(GtkWidget* parentWindow, GCallback *func, gchar* title, gchar** patternsfiles) { GtkWidget* filesel = NULL; filesel = g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG, "action", GTK_FILE_CHOOSER_ACTION_OPEN, "file-system-backend", "gtk+", "select-multiple", FALSE, NULL); gtk_window_set_title (GTK_WINDOW (filesel), title); gtk_dialog_add_buttons (GTK_DIALOG (filesel), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response (GTK_DIALOG (filesel), GTK_RESPONSE_OK); if(parentWindow) gtk_window_set_transient_for(GTK_WINDOW(filesel),GTK_WINDOW(parentWindow)); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); g_signal_connect (filesel, "response", G_CALLBACK (func),GTK_OBJECT(filesel)); g_signal_connect_after (filesel, "response", G_CALLBACK (gtk_widget_destroy),GTK_OBJECT(filesel)); file_chooser_set_filters(GTK_FILE_CHOOSER(filesel),patternsfiles); gtk_widget_show(filesel); return filesel; } /********************************************************************************/ static GtkWidget* new_file_chooser_save(GtkWidget* parentWindow, GCallback *func, gchar* title, gchar** patternsfiles) { GtkWidget* filesel = NULL; filesel = g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG, "action", GTK_FILE_CHOOSER_ACTION_SAVE, "file-system-backend", "gtk+", "select-multiple", FALSE, NULL); gtk_window_set_title (GTK_WINDOW (filesel), title); gtk_dialog_add_buttons (GTK_DIALOG (filesel), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response (GTK_DIALOG (filesel), GTK_RESPONSE_OK); if(parentWindow) gtk_window_set_transient_for(GTK_WINDOW(filesel),GTK_WINDOW(parentWindow)); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); g_signal_connect (filesel, "response", G_CALLBACK (func),GTK_OBJECT(filesel)); g_signal_connect_after (filesel, "response", G_CALLBACK (gtk_widget_destroy),GTK_OBJECT(filesel)); file_chooser_set_filters(GTK_FILE_CHOOSER(filesel),patternsfiles); gtk_widget_show(filesel); return filesel; } /********************************************************************************/ static void add_new_data(GtkWidget* xyplot, gint numberOfPoints, gdouble* X, gdouble* Y) { if(numberOfPoints>0) { gint loop; XYPlotData *data = g_malloc(sizeof(XYPlotData)); gint red = 0; gint green = 0; gint blue = 0; GdkColor c = get_fore_color(GABEDIT_XYPLOT(xyplot)); red = c.red; green = c.green; blue = c.blue; data->size=numberOfPoints; data->x = g_malloc(numberOfPoints*sizeof(gdouble)); data->y = g_malloc(numberOfPoints*sizeof(gdouble)); for(loop = 0; loopsize;loop++) { data->x[loop] = X[loop]; data->y[loop] = Y[loop]; } sprintf(data->point_str,"+"); data->point_pango = NULL; xyplot_build_points_data(GABEDIT_XYPLOT(xyplot), data); data->point_size=0; data->line_width=2; data->point_color.red=red; data->point_color.green=green; data->point_color.blue=blue; data->line_color.red=green; data->line_color.green=red; data->line_color.blue=blue; data->line_style=GDK_LINE_SOLID; gabedit_xyplot_add_data (GABEDIT_XYPLOT(xyplot), data); gabedit_xyplot_set_autorange(GABEDIT_XYPLOT(xyplot), NULL); } } /********************************************************************************/ static void add_new_data_peaks(GtkWidget* xyplot, gint numberOfPoints, gdouble* X, gdouble* Y) { if(numberOfPoints>0) { gint loop; XYPlotData *data = g_malloc(sizeof(XYPlotData)); gdouble xmin = 0; gdouble xmax = 0; gint red = 0; gint green = 0; gint blue = 0; GdkColor c = get_fore_color(GABEDIT_XYPLOT(xyplot)); red = c.red; green = c.green; blue = c.blue; data->size=3*numberOfPoints+2; data->x = g_malloc(data->size*sizeof(gdouble)); data->y = g_malloc(data->size*sizeof(gdouble)); xmin = X[0]; xmax = X[0]; for(loop = 1; loopX[loop]) xmin = X[loop]; if(xmaxx[0]=xmin; data->y[0]=0; data->x[data->size-1]=xmax; data->y[data->size-1]=0; for (loop=0; loopx[iold]=X[loop]; data->y[iold]=0; data->x[iold+1]=X[loop]; data->y[iold+1]=Y[loop]; data->x[iold+2]=X[loop]; data->y[iold+2]=0; } sprintf(data->point_str,"+"); data->point_pango = NULL; xyplot_build_points_data(GABEDIT_XYPLOT(xyplot), data); data->point_size=0; data->line_width=2; data->point_color.red=red; data->point_color.green=green; data->point_color.blue=blue; data->line_color.red=green; data->line_color.green=red; data->line_color.blue=blue; data->line_style=GDK_LINE_SOLID; gabedit_xyplot_add_data (GABEDIT_XYPLOT(xyplot), data); gabedit_xyplot_set_autorange(GABEDIT_XYPLOT(xyplot), NULL); } } /****************************************************************************************/ static void set_object_text_pixels(GabeditXYPlot *xyplot, XYPlotObjectText* objectText) { if(!objectText) return; value2pixel(xyplot, objectText->x,objectText->y, &objectText->xi, &objectText->yi); objectText->yi=xyplot->plotting_rect.height-objectText->yi; pango_layout_get_size(objectText->pango, &objectText->width, &objectText->height); objectText->width/=PANGO_SCALE; objectText->height/=PANGO_SCALE; /* objectText->yi -= objectText->height/2;*/ objectText->xi += xyplot->plotting_rect.x; objectText->yi += xyplot->plotting_rect.y; } /****************************************************************************************/ static PangoLayout* get_pango_str(GabeditXYPlot *xyplot, G_CONST_RETURN gchar* txt) { gchar *str = NULL; GdkGCValues values; GdkColormap *colormap; GdkColor color; gchar* rgb = NULL; PangoLayout* pango; if(!txt) return NULL; pango = gtk_widget_create_pango_layout (GTK_WIDGET(xyplot), txt); pango_layout_set_alignment(pango,PANGO_ALIGN_LEFT); gdk_gc_get_values(xyplot->fore_gc, &values); colormap = gdk_window_get_colormap(GTK_WIDGET(xyplot)->window); gdk_colormap_query_color(colormap, values.foreground.pixel,&color); rgb = g_strdup_printf("#%02x%02x%02x", color.red >> 8, color.green >> 8, color.blue >> 8); str = g_strconcat("",txt, "", NULL); pango_layout_set_markup(pango, str, -1); g_free(str); return pango; } /****************************************************************************************/ static void set_object_text_pango(GabeditXYPlot *xyplot, XYPlotObjectText* objectText) { if(!objectText) return; objectText->pango = get_pango_str(xyplot, objectText->str); } /****************************************************************************************/ static void set_object_text(GabeditXYPlot *xyplot, XYPlotObjectText* objectText, gdouble x, gdouble y, gdouble angle, G_CONST_RETURN gchar* str) { if(!str) return; objectText->x = x; objectText->y = y; objectText->angle = angle; objectText->str = g_strdup(str); set_object_text_pango(xyplot, objectText); set_object_text_pixels(xyplot, objectText); } /****************************************************************************************/ static void add_object_text(GabeditXYPlot *xyplot, gdouble x, gdouble y, gdouble angle, G_CONST_RETURN gchar* str) { gint i; if(!str) return; xyplot->nObjectsText++; if(xyplot->nObjectsText==1) xyplot->objectsText = g_malloc(sizeof(XYPlotObjectText)); else xyplot->objectsText = g_realloc(xyplot->objectsText,xyplot->nObjectsText*sizeof(XYPlotObjectText)); i = xyplot->nObjectsText-1; set_object_text(xyplot, &xyplot->objectsText[i], x, y, angle , str); } /****************************************************************************************/ static void reset_object_text_pixels(GabeditXYPlot *xyplot) { gint i; if(!xyplot) return; for(i=0;inObjectsText;i++) set_object_text_pixels(xyplot, &xyplot->objectsText[i]); } /****************************************************************************************/ static void reset_object_text_pango(GabeditXYPlot *xyplot) { gint i; if(!xyplot) return; for(i=0;inObjectsText;i++) set_object_text_pango(xyplot, &xyplot->objectsText[i]); } /****************************************************************************************/ static gint get_object_text_num(GabeditXYPlot *xyplot, gint xi, gint yi) { gint i; gint x,y; if(!xyplot) return -1; for(i=0;inObjectsText;i++) { gdouble cosa = cos(xyplot->objectsText[i].angle); gdouble sina = sin(xyplot->objectsText[i].angle); gdouble xx = xi-xyplot->objectsText[i].xi; gdouble yy = yi-xyplot->objectsText[i].yi; x = xyplot->objectsText[i].xi+xx*cosa-yy*sina; y = xyplot->objectsText[i].yi+xx*sina+yy*cosa; if(x>=xyplot->objectsText[i].xi && y>=xyplot->objectsText[i].yi && x<=xyplot->objectsText[i].xi+xyplot->objectsText[i].width && y<=xyplot->objectsText[i].yi+xyplot->objectsText[i].height) return i; } return -1; } /****************************************************************************************/ static void delete_object_text(GtkWidget *widget, gint i) { gint j; GabeditXYPlot *xyplot = NULL; if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; xyplot = GABEDIT_XYPLOT(widget); if(i<0||i>=xyplot->nObjectsText) return; if(xyplot->objectsText[i].str) g_free(xyplot->objectsText[i].str); if(xyplot->objectsText[i].pango) g_object_unref(G_OBJECT(xyplot->objectsText[i].pango)); for(j=i;jnObjectsText-1;j++) xyplot->objectsText[j] = xyplot->objectsText[j+1]; xyplot->nObjectsText--; if(xyplot->nObjectsText<1) { xyplot->nObjectsText = 0; if(xyplot->objectsText) g_free(xyplot->objectsText); xyplot->objectsText = NULL; } else { xyplot->objectsText = g_realloc(xyplot->objectsText,xyplot->nObjectsText*sizeof(XYPlotObjectText)); } } /****************************************************************************************/ static void delete_objects_text(GtkWidget *widget) { GabeditXYPlot *xyplot = NULL; gint i; if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; xyplot = GABEDIT_XYPLOT(widget); for(i=0;inObjectsText;i++) { if(xyplot->objectsText[i].str) g_free(xyplot->objectsText[i].str); if(xyplot->objectsText[i].pango) g_object_unref(G_OBJECT(xyplot->objectsText[i].pango)); } xyplot->nObjectsText = 0; if(xyplot->objectsText) g_free(xyplot->objectsText); xyplot->objectsText = NULL; gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /********************************************************************************/ static void activate_entry_object_text(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* tlabel; G_CONST_RETURN gchar* tangle; GtkWidget* xyplot = NULL; GtkWidget* window = NULL; GtkWidget* entry_label = NULL; GtkWidget* entry_angle = NULL; XYPlotObjectText* objectText = NULL; if(!entry) return; if(!GTK_IS_WIDGET(entry)) return; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); entry_label = g_object_get_data(G_OBJECT(entry),"EntryLabel"); entry_angle = g_object_get_data(G_OBJECT(entry),"EntryAngle"); if(!GTK_IS_WIDGET(entry_label)) return; if(!GTK_IS_WIDGET(entry_angle)) return; tlabel= gtk_entry_get_text(GTK_ENTRY(entry_label)); tangle= gtk_entry_get_text(GTK_ENTRY(entry_angle)); window = g_object_get_data(G_OBJECT(entry),"Window"); objectText = g_object_get_data(G_OBJECT(entry),"ObjectText"); /* t is destroyed with window */ if(!objectText) { if(window)gtk_widget_destroy(window); return; } if(!objectText->str) { gdouble angle = 0; if(tangle && strlen(tangle)>0) angle = atof(tangle)/180.0*M_PI; add_object_text(GABEDIT_XYPLOT(xyplot), objectText->x, objectText->y, angle, tlabel); g_free(objectText); } else { gdouble angle = 0; if(tangle && strlen(tangle)>0) angle = atof(tangle)/180.0*M_PI; if(objectText->str) g_free(objectText->str); if(objectText->pango) g_object_unref(G_OBJECT(objectText->pango)); set_object_text(GABEDIT_XYPLOT(xyplot), objectText, objectText->x, objectText->y, angle, tlabel); } if(window)gtk_widget_destroy(window); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ static void add_set_object_text_dialog(GtkWidget* xyplot, gint i, gdouble x, gdouble y) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* parentWindow = NULL; GtkWidget* frame = NULL; GtkWidget* hbox = NULL; GtkWidget* vbox_frame = NULL; GtkWidget* label = NULL; GtkWidget* entry_label = NULL; GtkWidget* entry_angle = NULL; XYPlotObjectText* objectText = NULL; if(i>-1 && inObjectsText) { objectText = &GABEDIT_XYPLOT(xyplot)->objectsText[i]; } else { objectText = g_malloc(sizeof(XYPlotObjectText)); objectText->x = x; objectText->y = y; objectText->str = NULL; objectText->pango = NULL; } gtk_window_set_title (GTK_WINDOW (window), _("Set label")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)xyplot); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show(hbox); frame=gtk_frame_new(NULL); gtk_container_add(GTK_CONTAINER(hbox), frame); gtk_widget_show(frame); vbox_frame=gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), vbox_frame); gtk_widget_show(vbox_frame); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_frame), hbox, FALSE, FALSE, 2); gtk_widget_show(hbox); label=gtk_label_new(_("Label : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_label = gtk_entry_new(); /* gtk_widget_set_size_request(entry_label,100,-1);*/ if(i>-1 && inObjectsText) { gtk_entry_set_text(GTK_ENTRY(entry_label),GABEDIT_XYPLOT(xyplot)->objectsText[i].str); } else gtk_entry_set_text(GTK_ENTRY(entry_label),"Blue text is cool!"); gtk_box_pack_start(GTK_BOX(hbox), entry_label, TRUE, TRUE, 2); gtk_widget_show(entry_label); g_object_set_data(G_OBJECT(entry_label),"ObjectText", objectText); label=gtk_label_new( _( "You can use the Pango Text Attribute Markup Language\n" "Example : Blue text is cool!\n" "\nFor insert a special character : control shift u + code UTF8\n" "Examples : \n" " control shift u + 03B1 for alpha (greek)\n" " control shift u + 03B2 for beta (greek)\n" " control shift u + 03A3 for cap Sigma (greek)\n" " See http://www.utf8-chartable.de\n" ) ); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox_frame), label, FALSE, FALSE, 2); g_object_set_data(G_OBJECT(entry_label),"Window", window); g_signal_connect (G_OBJECT (entry_label), "activate", (GCallback)activate_entry_object_text, xyplot); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_frame), hbox, FALSE, FALSE, 2); gtk_widget_show(hbox); label=gtk_label_new(_("Angle : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_angle = gtk_entry_new(); if(i>-1 && inObjectsText) { gchar* tmp = g_strdup_printf("%f", GABEDIT_XYPLOT(xyplot)->objectsText[i].angle/M_PI*180.0); gtk_entry_set_text(GTK_ENTRY(entry_angle),tmp); g_free(tmp); } else gtk_entry_set_text(GTK_ENTRY(entry_angle),"0.0"); gtk_box_pack_start(GTK_BOX(hbox), entry_angle, TRUE, TRUE, 2); gtk_widget_show(entry_angle); g_object_set_data(G_OBJECT(entry_angle),"ObjectText", objectText); g_object_set_data(G_OBJECT(entry_angle),"Window", window); g_object_set_data(G_OBJECT(entry_angle),"EntryLabel", entry_label); g_object_set_data(G_OBJECT(entry_angle),"EntryAngle", entry_angle); g_object_set_data(G_OBJECT(entry_label),"EntryLabel", entry_label); g_object_set_data(G_OBJECT(entry_label),"EntryAngle", entry_angle); g_signal_connect (G_OBJECT (entry_angle), "activate", (GCallback)activate_entry_object_text, xyplot); parentWindow = get_parent_window(GTK_WIDGET(xyplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } /****************************************************************************************/ static void begin_insert_objects_text(GtkWidget *widget) { if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; GABEDIT_XYPLOT(widget)->t_key_pressed = TRUE; } /****************************************************************************************/ static void set_object_line_pixels(GabeditXYPlot *xyplot, XYPlotObjectLine* objectLine) { if(!objectLine) return; value2pixel(xyplot, objectLine->x1,objectLine->y1, &objectLine->x1i, &objectLine->y1i); objectLine->y1i=xyplot->plotting_rect.height-objectLine->y1i; objectLine->x1i += xyplot->plotting_rect.x; objectLine->y1i += xyplot->plotting_rect.y; value2pixel(xyplot, objectLine->x2,objectLine->y2, &objectLine->x2i, &objectLine->y2i); objectLine->y2i=xyplot->plotting_rect.height-objectLine->y2i; objectLine->x2i += xyplot->plotting_rect.x; objectLine->y2i += xyplot->plotting_rect.y; } /****************************************************************************************/ static void set_object_line(GabeditXYPlot *xyplot, XYPlotObjectLine* objectLine, gdouble x1, gdouble y1, gdouble x2, gdouble y2, gint width, gint arrow_size, GdkColor color, GdkLineStyle style ) { if(!objectLine) return; objectLine->x1 = x1; objectLine->y1 = y1; objectLine->x2 = x2; objectLine->y2 = y2; objectLine->width = width; objectLine->arrow_size = arrow_size; objectLine->color = color; objectLine->style = style; set_object_line_pixels(xyplot, objectLine); } /****************************************************************************************/ static void add_object_line(GabeditXYPlot *xyplot, gdouble x1, gdouble y1, gdouble x2, gdouble y2 ) { gint width = 1; gint arrow_size = 0; GdkColor color; GdkLineStyle style = GDK_LINE_SOLID; gint i; xyplot->nObjectsLine++; if(xyplot->nObjectsLine==1) xyplot->objectsLine = g_malloc(sizeof(XYPlotObjectLine)); else xyplot->objectsLine = g_realloc(xyplot->objectsLine,xyplot->nObjectsLine*sizeof(XYPlotObjectLine)); i = xyplot->nObjectsLine-1; if(xyplot->nObjectsLine==1) { GdkGCValues values; GdkColormap *colormap; gdk_gc_get_values(xyplot->lines_gc, &values); colormap = gdk_window_get_colormap(GTK_WIDGET(xyplot)->window); gdk_colormap_query_color(colormap, values.foreground.pixel,&color); style = values.line_style; width = values.line_width; } else { color = xyplot->objectsLine[xyplot->nObjectsLine-2].color; style = xyplot->objectsLine[xyplot->nObjectsLine-2].style; width = xyplot->objectsLine[xyplot->nObjectsLine-2].width; arrow_size = xyplot->objectsLine[xyplot->nObjectsLine-2].arrow_size; } set_object_line(xyplot, &xyplot->objectsLine[i], x1, y1, x2, y2, width, arrow_size, color, style); } /****************************************************************************************/ static void reset_object_line_pixels(GabeditXYPlot *xyplot) { gint i; if(!xyplot) return; for(i=0;inObjectsLine;i++) set_object_line_pixels(xyplot, &xyplot->objectsLine[i]); } /****************************************************************************************/ static gint get_object_line_num(GabeditXYPlot *xyplot, gint xi, gint yi) { gint i; if(!xyplot) return -1; for(i=0;inObjectsLine;i++) { gint d = get_distance_M_AB(xyplot,xi,yi, xyplot->objectsLine[i].x1i,xyplot->objectsLine[i].y1i, xyplot->objectsLine[i].x2i,xyplot->objectsLine[i].y2i); if(d<5 || dobjectsLine[i].width) return i; } return -1; } /****************************************************************************************/ static void delete_object_line(GtkWidget *widget, gint i) { gint j; GabeditXYPlot *xyplot = NULL; if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; xyplot = GABEDIT_XYPLOT(widget); if(i<0||i>=xyplot->nObjectsLine) return; for(j=i;jnObjectsLine-1;j++) xyplot->objectsLine[j] = xyplot->objectsLine[j+1]; xyplot->nObjectsLine--; if(xyplot->nObjectsLine<1) { xyplot->nObjectsLine = 0; if(xyplot->objectsLine) g_free(xyplot->objectsLine); xyplot->objectsLine = NULL; } else { xyplot->objectsLine = g_realloc(xyplot->objectsLine,xyplot->nObjectsLine*sizeof(XYPlotObjectLine)); } } /****************************************************************************************/ static void delete_objects_line(GtkWidget *widget) { GabeditXYPlot *xyplot = NULL; if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; xyplot = GABEDIT_XYPLOT(widget); xyplot->nObjectsLine = 0; if(xyplot->objectsLine) g_free(xyplot->objectsLine); xyplot->objectsLine = NULL; gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ static void begin_insert_objects_line(GtkWidget *widget) { if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; GABEDIT_XYPLOT(widget)->l_key_pressed = TRUE; } /****************************************************************************************/ static void spin_line_width_changed_value_object(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotObjectLine* objectLine = g_object_get_data(G_OBJECT(spinbutton),"ObjectLine"); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if(objectLine) objectLine->width = gtk_spin_button_get_value(spinbutton); else { gint i; for (i=0; inObjectsLine;i++) { GABEDIT_XYPLOT (xyplot)->objectsLine[i].width = gtk_spin_button_get_value(spinbutton); } } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /****************************************************************************************/ static void spin_line_color_changed_value_object(GtkColorButton *colorbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotObjectLine* objectLine = g_object_get_data(G_OBJECT(colorbutton),"ObjectLine"); GdkColor c; gtk_color_button_get_color (colorbutton, &c); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if(objectLine) objectLine->color = c; else { gint i; for (i=0; inObjectsLine;i++) { GABEDIT_XYPLOT (xyplot)->objectsLine[i].color = c; } } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /********************************************************************************************************/ static void combo_line_style_changed_value_object(GtkComboBox *combobox, gpointer user_data) { GtkTreeIter iter; gchar* d = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotObjectLine* objectLine = g_object_get_data(G_OBJECT(combobox),"ObjectLine"); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); gtk_tree_model_get (model, &iter, 0, &d, -1); if(!d) return; if(objectLine) { if (!strcmp(d,"Solid") ) { objectLine->style = GDK_LINE_SOLID; } else if (!strcmp(d,"On-Off dashed") ) {objectLine->style = GDK_LINE_ON_OFF_DASH; } else if (!strcmp(d,"Double dashed") ) { objectLine->style = GDK_LINE_DOUBLE_DASH;} } else { gint i; for (i=0; inObjectsLine;i++) { if (!strcmp(d,"Solid") ) { GABEDIT_XYPLOT (xyplot)->objectsLine[i].style = GDK_LINE_SOLID; } else if (!strcmp(d,"On-Off dashed") ) {GABEDIT_XYPLOT (xyplot)->objectsLine[i].style = GDK_LINE_ON_OFF_DASH; } else if (!strcmp(d,"Double dashed") ) { GABEDIT_XYPLOT (xyplot)->objectsLine[i].style = GDK_LINE_DOUBLE_DASH;} } } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /****************************************************************************************/ static void spin_arrow_size_changed_value_object(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotObjectLine* objectLine = g_object_get_data(G_OBJECT(spinbutton),"ObjectLine"); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if(objectLine) objectLine->arrow_size = gtk_spin_button_get_value(spinbutton); else { gint i; for (i=0; inObjectsLine;i++) { GABEDIT_XYPLOT (xyplot)->objectsLine[i].arrow_size = gtk_spin_button_get_value(spinbutton); } } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /********************************************************************************************************/ static GtkWidget *add_line_types_combo_object(GtkWidget *hbox) { GtkTreeIter iter; GtkTreeStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; store = gtk_tree_store_new (1,G_TYPE_STRING); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Solid", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "On-Off dashed", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Double dashed", -1); model = GTK_TREE_MODEL (store); combobox = gtk_combo_box_new_with_model (model); g_object_unref (model); gtk_box_pack_start (GTK_BOX (hbox), combobox, TRUE, TRUE, 1); renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", 0, NULL); return combobox; } /****************************************************************************************/ static void set_object_line_dialog(GabeditXYPlot* xyplot, gint i) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* frame = NULL; GtkWidget* hbox = NULL; GtkWidget* hbox1 = NULL; GtkWidget* label = NULL; GtkWidget* combo = NULL; GtkWidget* spin = NULL; GtkWidget* button = NULL; GtkWidget* spin_arrow = NULL; GtkWidget* parentWindow = NULL; GtkWidget* vbox_window = NULL; XYPlotObjectLine* objectLine = NULL; GdkLineStyle line_style = GDK_LINE_SOLID; if(i>=0 && i<=xyplot->nObjectsLine-1) objectLine = &xyplot->objectsLine[i]; else return; line_style = objectLine->style; gtk_window_set_title (GTK_WINDOW (window), _("Set line options")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)xyplot); vbox_window=gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox_window); gtk_widget_show(vbox_window); hbox1=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_window), hbox1, TRUE, FALSE, 2); gtk_widget_show(hbox1); frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(hbox1), frame, TRUE, FALSE, 2); gtk_widget_show(frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Line width :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin = gtk_spin_button_new_with_range(0, 10, 1); if(objectLine) gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), objectLine->width); else gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), 1); gtk_box_pack_start(GTK_BOX(hbox), spin, TRUE, FALSE, 2); gtk_widget_show(spin); g_object_set_data(G_OBJECT (window), "SpinLineWidth", spin); label=gtk_label_new(_("Line type :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); combo = add_line_types_combo_object(hbox); gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); if(objectLine) { GdkLineStyle line_style = objectLine->style; if(line_style == GDK_LINE_SOLID) gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); else if(line_style == GDK_LINE_ON_OFF_DASH) gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 1); else if(line_style == GDK_LINE_DOUBLE_DASH) gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 2); } gtk_widget_show(combo); g_object_set_data(G_OBJECT (window), "ComboLineType", combo); label=gtk_label_new(_("Line color :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); button = gtk_color_button_new_with_color (&objectLine->color); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 2); gtk_widget_show(button); g_object_set_data(G_OBJECT (window), "ColorButton", button); label=gtk_label_new(_("Arrow size :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_arrow = gtk_spin_button_new_with_range(0, 30, 1); if(objectLine) gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_arrow), objectLine->arrow_size); gtk_box_pack_start(GTK_BOX(hbox), spin_arrow, TRUE, FALSE, 2); gtk_widget_show(spin_arrow); g_object_set_data(G_OBJECT (window), "SpinArrowSize", spin_arrow); g_object_set_data(G_OBJECT (spin), "ObjectLine", objectLine); g_signal_connect(G_OBJECT(spin), "value-changed", G_CALLBACK(spin_line_width_changed_value_object), xyplot); g_object_set_data(G_OBJECT (button), "ObjectLine", objectLine); g_signal_connect(G_OBJECT(button), "color-set", G_CALLBACK(spin_line_color_changed_value_object), xyplot); g_signal_connect(G_OBJECT(combo), "changed", G_CALLBACK(combo_line_style_changed_value_object), xyplot); g_object_set_data(G_OBJECT (combo), "ObjectLine", objectLine); g_object_set_data(G_OBJECT (spin_arrow), "ObjectLine", objectLine); g_signal_connect(G_OBJECT(spin_arrow), "value-changed", G_CALLBACK(spin_arrow_size_changed_value_object), xyplot); parentWindow = get_parent_window(GTK_WIDGET(xyplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); /* list_utf8();*/ } /**************************************************************************************************/ static void set_object_image_relative(GabeditXYPlot *xyplot, XYPlotObjectImage* objectImage) { gdouble f = (gdouble)GTK_WIDGET(xyplot)->allocation.width; gint xi=objectImage->xi-xyplot->plotting_rect.x; gint yi=xyplot->plotting_rect.y+xyplot->plotting_rect.height-objectImage->yi; if(f>(gdouble)GTK_WIDGET(xyplot)->allocation.height) f = (gdouble)GTK_WIDGET(xyplot)->allocation.height; objectImage->width = (gdouble)objectImage->widthi/f; objectImage->height = (gdouble)objectImage->heighti/f; /* objectImage->x = (gdouble)objectImage->xi/f; objectImage->y = (gdouble)objectImage->yi/f; */ pixel2value(xyplot, xi, yi, &objectImage->x, &objectImage->y); /* printf("xy = %f %f\n",objectImage->x, objectImage->y);*/ } /**************************************************************************************************/ static void set_object_image_pixels(GabeditXYPlot *xyplot, XYPlotObjectImage* objectImage) { gint xi,yi; gdouble f = (gdouble)GTK_WIDGET(xyplot)->allocation.width; if(f>(gdouble)GTK_WIDGET(xyplot)->allocation.height) f = (gdouble)GTK_WIDGET(xyplot)->allocation.height; objectImage->widthi = (gint)(objectImage->width*f); objectImage->heighti = (gint)(objectImage->height*f); /* objectImage->xi = (gint)(objectImage->x*f); objectImage->yi = (gint)(objectImage->y*f); */ value2pixel(xyplot, objectImage->x, objectImage->y, &xi, &yi); objectImage->xi = xi; objectImage->yi = yi; objectImage->yi=xyplot->plotting_rect.height-objectImage->yi; objectImage->xi += xyplot->plotting_rect.x; objectImage->yi += xyplot->plotting_rect.y; } /****************************************************************************************/ static void set_object_image(GabeditXYPlot *xyplot, XYPlotObjectImage* objectImage, gint xi, gint yi, gint w, gint h) { objectImage->xi = xi; objectImage->yi = yi; objectImage->widthi = w; objectImage->heighti = h; set_object_image_relative(xyplot, objectImage); } /**************************************************************************/ static cairo_surface_t* get_image_from_clipboard() { cairo_surface_t *surface = NULL; GtkClipboard * clipboard = NULL; GdkPixbuf * pixbuf = NULL; clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); if(!clipboard) return NULL; pixbuf = gtk_clipboard_wait_for_image(clipboard); if(pixbuf) { gint width; gint height; gint stride; gint x,y; gint nChannels; guchar *p, *pixels; gint red, green, blue; gfloat alpha; if (!gdk_pixbuf_get_has_alpha (pixbuf)) { GdkPixbuf* newPixbuf = gdk_pixbuf_add_alpha (pixbuf, FALSE, 255, 255, 255); if (newPixbuf != pixbuf) { g_object_unref(pixbuf); pixbuf = newPixbuf; } } width = gdk_pixbuf_get_width (pixbuf); height = gdk_pixbuf_get_height (pixbuf); stride = gdk_pixbuf_get_rowstride(pixbuf); nChannels = gdk_pixbuf_get_n_channels (pixbuf); pixels = gdk_pixbuf_get_pixels (pixbuf); for (y = 0; y < height; y++) { for (x = 0; x < width; x++) { p = pixels + y * stride + x * nChannels; alpha = (gfloat) p[3] / 255; red = p[0] * alpha; green = p[1] * alpha; blue = p[2] * alpha; p[0] = blue; p[1] = green; p[2] = red; } } surface = cairo_image_surface_create_for_data( pixels, CAIRO_FORMAT_ARGB32, width, height, stride); /*g_object_unref(pixbuf);*/ } return surface; } /**************************************************************************************************/ static XYPlotObjectImage get_object_image(GabeditXYPlot *xyplot, gint xi, gint yi, G_CONST_RETURN gchar* fileName) { gint w; gint h; gint nw; gint nh; gdouble fw = 1; gdouble fh = 1; gdouble f = 1; XYPlotObjectImage objectImage; objectImage.widthi=0; objectImage.heighti=0; objectImage.xi=xi; objectImage.yi=yi; if(fileName) objectImage.fileName = g_strdup(fileName); else objectImage.fileName = NULL; objectImage.image=NULL; if(fileName) { objectImage.image = cairo_image_surface_create_from_png (objectImage.fileName); } else { objectImage.image = get_image_from_clipboard(); } if(!objectImage.image) return objectImage; w = cairo_image_surface_get_width (objectImage.image); h = cairo_image_surface_get_height (objectImage.image); nw = xyplot->plotting_rect.width-xi; nh = xyplot->plotting_rect.height-yi; if(nw0) fw = nw/(gdouble)w; if(nh0) fh = nh/(gdouble)h; f = fw; if(f>fh) f = fh; objectImage.widthi = (gint)(w*f); objectImage.heighti = (gint)(h*f); set_object_image_relative(xyplot, &objectImage); /* printf("w = %d h = %d\n",w, h);*/ return objectImage; } /****************************************************************************************/ static void add_object_image(GabeditXYPlot *xyplot, gint xi, gint yi, gint width, gint height, G_CONST_RETURN gchar* fileName) { XYPlotObjectImage objectImage = get_object_image(xyplot, xi, yi, fileName); if(!objectImage.image) return; xyplot->nObjectsImage++; if(xyplot->nObjectsImage==1) xyplot->objectsImage = g_malloc(sizeof(XYPlotObjectImage)); else xyplot->objectsImage = g_realloc(xyplot->objectsImage,xyplot->nObjectsImage*sizeof(XYPlotObjectImage)); if(width>0 && height>0) { objectImage.widthi=width; objectImage.heighti=height; } xyplot->objectsImage[xyplot->nObjectsImage-1] = objectImage; } /****************************************************************************************/ static gint get_object_image_num(GabeditXYPlot *xyplot, gint xi, gint yi) { gint i; if(!xyplot) return -1; for(i=0;inObjectsImage;i++) { if(xi>=(gint)xyplot->objectsImage[i].xi && yi>=xyplot->objectsImage[i].yi && xi<=xyplot->objectsImage[i].xi+xyplot->objectsImage[i].widthi && yi<=xyplot->objectsImage[i].yi+xyplot->objectsImage[i].heighti) return i; } return -1; } /****************************************************************************************/ static void delete_object_image(GtkWidget *widget, gint i) { gint j; GabeditXYPlot *xyplot = NULL; if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; xyplot = GABEDIT_XYPLOT(widget); if(i<0||i>=xyplot->nObjectsImage) return; if(xyplot->objectsImage[i].fileName) g_free(xyplot->objectsImage[i].fileName); if(xyplot->objectsImage[i].image) cairo_surface_destroy (xyplot->objectsImage[i].image); for(j=i;jnObjectsImage-1;j++) xyplot->objectsImage[j] = xyplot->objectsImage[j+1]; xyplot->nObjectsImage--; if(xyplot->nObjectsImage<1) { xyplot->nObjectsImage = 0; if(xyplot->objectsImage) g_free(xyplot->objectsImage); xyplot->objectsImage = NULL; } else { xyplot->objectsImage = g_realloc(xyplot->objectsImage,xyplot->nObjectsImage*sizeof(XYPlotObjectImage)); } } /****************************************************************************************/ static void delete_objects_image(GtkWidget *widget) { GabeditXYPlot *xyplot = NULL; gint i; if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; xyplot = GABEDIT_XYPLOT(widget); for(i=0;inObjectsImage;i++) { if(xyplot->objectsImage[i].fileName) g_free(xyplot->objectsImage[i].fileName); if(xyplot->objectsImage[i].image) cairo_surface_destroy (xyplot->objectsImage[i].image); } xyplot->nObjectsImage = 0; if(xyplot->objectsImage) g_free(xyplot->objectsImage); xyplot->objectsImage = NULL; gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /********************************************************************************/ static gboolean read_image_png(GtkFileChooser *filesel, gint response_id) { gchar *fileName; GtkWidget* xyplot = NULL; XYPlotObjectImage* objectImage = NULL; if(response_id != GTK_RESPONSE_OK) return FALSE; fileName = gtk_file_chooser_get_filename(filesel); xyplot = g_object_get_data(G_OBJECT (filesel), "XYPLOT"); objectImage = g_object_get_data(G_OBJECT(filesel),"ObjectImage"); if(objectImage && !objectImage->image) { add_object_image(GABEDIT_XYPLOT(xyplot), objectImage->xi, objectImage->yi, -1, -1, fileName); g_free(objectImage); } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); return TRUE; } /********************************************************************************/ static void activate_entry_object_image(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; GtkWidget* xyplot = NULL; GtkWidget* window = NULL; XYPlotObjectImage* objectImage = NULL; if(!GTK_IS_WIDGET(entry)) return; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); if(!entry) return; window = g_object_get_data(G_OBJECT(entry),"Window"); objectImage = g_object_get_data(G_OBJECT(entry),"ObjectImage"); /* t is destroyed with window */ if(!objectImage) { if(window)gtk_widget_destroy(window); return; } else { objectImage->widthi =(gint)(fabs(atof(t))*cairo_image_surface_get_width (objectImage->image)); objectImage->heighti =(gint)(fabs(atof(t))*cairo_image_surface_get_height (objectImage->image)); } if(window)gtk_widget_destroy(window); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /********************************************************************************/ static void add_set_object_image_dialog(GtkWidget* xyplot, gint i, gint xi, gint yi) { GtkWidget* parentWindow = NULL; gchar* patternsfiles[] = {"*.png","*",NULL}; GtkWidget* filesel= NULL; XYPlotObjectImage* objectImage = NULL; if(i>-1 && inObjectsImage) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* frame = NULL; GtkWidget* hbox = NULL; GtkWidget* vbox_frame = NULL; GtkWidget* label = NULL; GtkWidget* entry_label = NULL; objectImage = &GABEDIT_XYPLOT(xyplot)->objectsImage[i]; gtk_window_set_title (GTK_WINDOW (window), _("Scale image")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)xyplot); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show(hbox); frame=gtk_frame_new(NULL); gtk_container_add(GTK_CONTAINER(hbox), frame); gtk_widget_show(frame); vbox_frame=gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), vbox_frame); gtk_widget_show(vbox_frame); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_frame), hbox, FALSE, FALSE, 2); gtk_widget_show(hbox); label=gtk_label_new(_("Factor (new size/orginal size) : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_label = gtk_entry_new(); /* gtk_widget_set_size_request(entry_label,100,-1);*/ gtk_entry_set_text(GTK_ENTRY(entry_label),"0.5"); gtk_box_pack_start(GTK_BOX(hbox), entry_label, TRUE, TRUE, 2); gtk_widget_show(entry_label); g_object_set_data(G_OBJECT(entry_label),"ObjectImage", objectImage); g_object_set_data(G_OBJECT(entry_label),"Window", window); g_signal_connect (G_OBJECT (entry_label), "activate", (GCallback)activate_entry_object_image, xyplot); parentWindow = get_parent_window(GTK_WIDGET(xyplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } else if(i==-1) { objectImage = g_malloc(sizeof(XYPlotObjectImage)); objectImage->xi = xi; objectImage->yi = yi; objectImage->fileName = NULL; objectImage->image = NULL; parentWindow = get_parent_window(GTK_WIDGET(xyplot)); filesel= new_file_chooser_open(parentWindow, (GCallback *)read_image_png, _("Read image from a png file"), patternsfiles); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); g_object_set_data(G_OBJECT (filesel), "XYPLOT", xyplot); g_object_set_data(G_OBJECT(filesel),"ObjectImage", objectImage); } else add_object_image(GABEDIT_XYPLOT(xyplot), xi, yi, -1, -1, NULL); } /****************************************************************************************/ static void reset_object_image_pixels(GabeditXYPlot *xyplot) { gint i; if(!xyplot) return; for(i=0;inObjectsImage;i++) set_object_image_pixels(xyplot, &xyplot->objectsImage[i]); } /****************************************************************************************/ /* static void reset_object_image_relative(GabeditXYPlot *xyplot) { gint i; if(!xyplot) return; for(i=0;inObjectsImage;i++) set_object_image_relative(xyplot, &xyplot->objectsImage[i]); } */ /****************************************************************************************/ static void insert_objects_image_from_clipboard(GtkWidget *widget) { if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; add_object_image(GABEDIT_XYPLOT(widget), 0, 0, -1, -1, NULL); gtk_widget_queue_draw(widget); } /****************************************************************************************/ static void begin_insert_objects_image(GtkWidget *widget) { if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; GABEDIT_XYPLOT(widget)->i_key_pressed = TRUE; } /********************************************************************************/ static gchar** my_strsplit(gchar *str) { gchar** strsplit= g_malloc(sizeof(gchar*)); gint n=0; gchar* t=str; gchar p[BSIZE]; while(*t!='\n' && *t !='\0') { if(*t!=' ') { n++; strsplit= g_realloc(strsplit,(n+1)*sizeof(gchar*)); sscanf(t,"%s",p); strsplit[n-1]= g_strdup(p); while(*t!=' ') { t++; if(*t =='\n' || *t =='\0') break; } } else { while(*t ==' ' ) { t++; if(*t =='\n' || *t =='\0') break; } } } strsplit[n]= NULL; return strsplit; } /********************************************************************************/ static gboolean read_data_xy1yncolumns(GtkFileChooser *filesel, gint response_id) { gchar *fileName; gchar t[BSIZE]; FILE *fd; GtkWidget* xyplot = NULL; gchar** strsplit; gchar* str = NULL; gint* numberOfPoints = NULL; gdouble** X = NULL; gdouble** Y = NULL; gint nmax = 0; gint i; gint k; gdouble x=0; gboolean doPeaks = FALSE; if(response_id != GTK_RESPONSE_OK) return FALSE; fileName = gtk_file_chooser_get_filename(filesel); xyplot = g_object_get_data(G_OBJECT (filesel), "XYPLOT"); doPeaks = GPOINTER_TO_INT(g_object_get_data(G_OBJECT (filesel), "DoPeaks")); fd = fopen(fileName, "rb"); if(fgets(t,BSIZE,fd) && strcmp(t,"\n")) { for(i=0;i0) { Y = g_malloc(nmax*sizeof(gdouble*)); X = g_malloc(nmax*sizeof(gdouble*)); numberOfPoints = g_malloc(nmax*sizeof(gint)); for(k=0;k0 && !feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(!strcmp(t,"\n")) break; for(i=0;i=nmax) break; numberOfPoints[k]++; X[k] = g_realloc(X[k], numberOfPoints[k]*sizeof(gdouble)); Y[k] = g_realloc(Y[k], numberOfPoints[k]*sizeof(gdouble)); X[k][numberOfPoints[k]-1] = x; Y[k][numberOfPoints[k]-1] = atof(str); }while(str!=NULL); g_strfreev(strsplit); } if(nmax>0) { for(k=0;k0 && X[k] && Y[k]) { if(doPeaks) add_new_data_peaks(xyplot, numberOfPoints[k], X[k], Y[k]); else add_new_data(xyplot, numberOfPoints[k], X[k], Y[k]); } if(X[k]) g_free(X[k]); if(Y[k]) g_free(Y[k]); } } else { GtkWidget* parentWidget = get_parent_window(GTK_WIDGET(xyplot)); GtkWindow* parentWindow = NULL; if(parentWidget) parentWindow = GTK_WINDOW(parentWidget); GtkWidget* dialog = gtk_message_dialog_new (GTK_WINDOW(parentWindow), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Error reading file '%s'"), fileName); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } if(numberOfPoints) g_free(numberOfPoints); if(X) g_free(X); if(Y) g_free(Y); fclose(fd); return TRUE; } /********************************************************************************/ static void read_data_xy1yncolumns_dlg(GtkWidget* xyplot, gboolean doPeaks) { GtkWidget* parentWindow = NULL; gchar* patternsfiles[] = {"*.txt","*",NULL}; GtkWidget* filesel= NULL; parentWindow = get_parent_window(GTK_WIDGET(xyplot)); filesel= new_file_chooser_open(parentWindow, (GCallback *)read_data_xy1yncolumns, _("Read data from an ASCII X.Y1..Yn file(x, y1, y2,...,yn)"), patternsfiles); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); g_object_set_data(G_OBJECT (filesel), "XYPLOT", xyplot); g_object_set_data(G_OBJECT (filesel), "DoPeaks", GINT_TO_POINTER(doPeaks)); } /********************************************************************************/ static gboolean this_is_a_backspace(gchar *st) { gint i; for(i=0;i<(gint)strlen(st);i++) if(st[i] != ' ' && st[i] !='\n' && st[i] !='\r') return FALSE; return TRUE; } /********************************************************************************/ static gboolean read_data_1column(GtkFileChooser *filesel, gint response_id) { gchar *fileName; gchar t[BSIZE]; gboolean OK; FILE *fd; gint ne; gint numberOfPoints = 0; gdouble* X = NULL; gdouble* Y = NULL; gdouble a; gdouble b; GtkWidget* xyplot = NULL; gint nData= 0; gboolean doPeaks = FALSE; if(response_id != GTK_RESPONSE_OK) return FALSE; fileName = gtk_file_chooser_get_filename(filesel); xyplot = g_object_get_data(G_OBJECT (filesel), "XYPLOT"); doPeaks = GPOINTER_TO_INT(g_object_get_data(G_OBJECT (filesel), "DoPeaks")); fd = fopen(fileName, "rb"); OK=FALSE; while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(this_is_a_backspace(t)) { if(numberOfPoints==0) continue; add_new_data(xyplot, numberOfPoints, X, Y); numberOfPoints = 0; if(X) g_free(X); if(Y) g_free(Y); X = NULL; Y = NULL; nData ++; } ne = sscanf(t,"%lf",&b); if(ne==1) { numberOfPoints++; a = numberOfPoints; X = g_realloc(X, numberOfPoints*sizeof(gdouble)); Y = g_realloc(Y, numberOfPoints*sizeof(gdouble)); X[numberOfPoints-1] = a; Y[numberOfPoints-1] = b; } } if(numberOfPoints>0) { if(doPeaks) add_new_data_peaks(xyplot, numberOfPoints, X, Y); else add_new_data(xyplot, numberOfPoints, X, Y); } else if(nData == 0) { GtkWidget* parentWidget = get_parent_window(GTK_WIDGET(xyplot)); GtkWindow* parentWindow = NULL; if(parentWidget) parentWindow = GTK_WINDOW(parentWidget); GtkWidget* dialog = gtk_message_dialog_new (GTK_WINDOW(parentWindow), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Error reading file '%s'"), fileName); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } if(X) g_free(X); if(Y) g_free(Y); fclose(fd); return TRUE; } /********************************************************************************/ static void read_data_1column_dlg(GtkWidget* xyplot, gboolean doPeaks) { GtkWidget* parentWindow = NULL; gchar* patternsfiles[] = {"*.txt","*",NULL}; GtkWidget* filesel= NULL; parentWindow = get_parent_window(GTK_WIDGET(xyplot)); filesel= new_file_chooser_open(parentWindow, (GCallback *)read_data_1column, _("Read data from an ASCII Y file(1 column(Y), X=#ligne)"), patternsfiles); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); g_object_set_data(G_OBJECT (filesel), "XYPLOT", xyplot); g_object_set_data(G_OBJECT (filesel), "DoPeaks", GINT_TO_POINTER(doPeaks)); } /********************************************************************************/ static gboolean read_data_2columns(GtkFileChooser *filesel, gint response_id) { gchar *fileName; gchar t[BSIZE]; gboolean OK; FILE *fd; gint ne; gint numberOfPoints = 0; gdouble* X = NULL; gdouble* Y = NULL; gdouble a; gdouble b; GtkWidget* xyplot = NULL; gint nData= 0; gboolean doPeaks = FALSE; if(response_id != GTK_RESPONSE_OK) return FALSE; fileName = gtk_file_chooser_get_filename(filesel); xyplot = g_object_get_data(G_OBJECT (filesel), "XYPLOT"); doPeaks = GPOINTER_TO_INT(g_object_get_data(G_OBJECT (filesel), "DoPeaks")); fd = fopen(fileName, "rb"); OK=FALSE; while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(this_is_a_backspace(t)) { if(numberOfPoints==0) continue; add_new_data(xyplot, numberOfPoints, X, Y); numberOfPoints = 0; if(X) g_free(X); if(Y) g_free(Y); X = NULL; Y = NULL; nData ++; } ne = sscanf(t,"%lf %lf",&a, &b); if(ne==2) { numberOfPoints++; X = g_realloc(X, numberOfPoints*sizeof(gdouble)); Y = g_realloc(Y, numberOfPoints*sizeof(gdouble)); X[numberOfPoints-1] = a; Y[numberOfPoints-1] = b; } } if(numberOfPoints>0) { if(doPeaks) add_new_data_peaks(xyplot, numberOfPoints, X, Y); else add_new_data(xyplot, numberOfPoints, X, Y); } else if(nData == 0) { GtkWidget* parentWidget = get_parent_window(GTK_WIDGET(xyplot)); GtkWindow* parentWindow = NULL; if(parentWidget) parentWindow = GTK_WINDOW(parentWidget); GtkWidget* dialog = gtk_message_dialog_new (GTK_WINDOW(parentWindow), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Error reading file '%s'"), fileName); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } if(X) g_free(X); if(Y) g_free(Y); fclose(fd); return TRUE; } /********************************************************************************/ static void read_data_2columns_dlg(GtkWidget* xyplot, gboolean doPeaks) { GtkWidget* parentWindow = NULL; gchar* patternsfiles[] = {"*.txt","*",NULL}; GtkWidget* filesel= NULL; parentWindow = get_parent_window(GTK_WIDGET(xyplot)); filesel= new_file_chooser_open(parentWindow, (GCallback *)read_data_2columns, _("Read data from an ASCII XY file(2 columns)"), patternsfiles); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); g_object_set_data(G_OBJECT (filesel), "XYPLOT", xyplot); g_object_set_data(G_OBJECT (filesel), "DoPeaks", GINT_TO_POINTER(doPeaks)); } /********************************************************************************/ static gboolean save_data_2columns(GtkFileChooser *filesel, gint response_id) { gchar *fileName; FILE *file; XYPlotData* data = NULL; gint loop; if(response_id != GTK_RESPONSE_OK) return FALSE; fileName = gtk_file_chooser_get_filename(filesel); data = g_object_get_data(G_OBJECT (filesel), "CurentData"); if(!data) return FALSE; file = fopen(fileName, "w"); for(loop=0;loopsize; loop++) { fprintf(file, "%f %f\n",data->x[loop], data->y[loop]); } fclose(file); return TRUE; } /********************************************************************************/ static gboolean save_all_data_2columns(GtkFileChooser *filesel, gint response_id) { gchar *fileName; FILE *file; XYPlotData* data = NULL; gint loop; GList *current = NULL; GList *data_list = NULL; if(response_id != GTK_RESPONSE_OK) return FALSE; fileName = gtk_file_chooser_get_filename(filesel); data_list = g_object_get_data(G_OBJECT (filesel), "DataList"); file = fopen(fileName, "w"); if(data_list) for(current=g_list_first(data_list); current!=NULL; current=current->next) { data=(XYPlotData*)current->data; if(!data) continue; for(loop=0;loopsize; loop++) fprintf(file, "%f %f\n",data->x[loop], data->y[loop]); fprintf(file, "\n"); } fclose(file); return TRUE; } /********************************************************************************/ static gint get_data_jdx_type(FILE* fd, gdouble* scaleX, gdouble* scaleY, gdouble* deltaX) { gchar t[BSIZE]; *scaleX = 1; *scaleY = 1; *deltaX = 0; while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"##XFACTOR=")) { gchar* e = strstr(t,"=")+1; if(e) *scaleX = atof(e); } if(strstr(t,"##YFACTOR=")) { gchar* e = strstr(t,"=")+1; if(e) *scaleY = atof(e); } if(strstr(t,"##DELTAX=")) { gchar* e = strstr(t,"=")+1; if(e) *deltaX = atof(e); } if(strstr(t,"##XYDATA=")) { return JDX_TYPE_XYDATA; } if(strstr(t,"##XYPOINTS=")) { return JDX_TYPE_XYPOINTS; } if(strstr(t,"##PEAK TABLE=") || strstr(t,"##PEAKTABLE=")) { return JDX_TYPE_XYTABLE; } } return JDX_TYPE_UNKNOWN; } /********************************************************************************/ static gboolean read_data_jdx_xypoints(FILE* fd, GtkWidget*xyplot, gdouble scaleX, gdouble scaleY, gchar* fileName ) { gchar t[BSIZE]; gint numberOfPoints = 0; gdouble* X = NULL; gdouble* Y = NULL; gchar** strsplit; gchar* str1 = NULL; gchar* str2 = NULL; gint i; while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(!strcmp(t,"\n")) break; if(strstr(t,"##END")) break; for(i=0;i0) { add_new_data(xyplot, numberOfPoints, X, Y); } else { GtkWidget* parentWidget = get_parent_window(GTK_WIDGET(xyplot)); GtkWindow* parentWindow = NULL; if(parentWidget) parentWindow = GTK_WINDOW(parentWidget); GtkWidget* dialog = gtk_message_dialog_new (GTK_WINDOW(parentWindow), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Error reading file '%s'"), fileName); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } if(X) g_free(X); if(Y) g_free(Y); return TRUE; } /********************************************************************************/ static gboolean read_data_jdx_xydata(FILE* fd, GtkWidget*xyplot , gdouble scaleX, gdouble scaleY, gdouble deltaX , gchar* fileName) { gchar t[BSIZE]; gint numberOfPoints = 0; gdouble* X = NULL; gdouble* Y = NULL; gchar** strsplit; gchar* str = NULL; gdouble x=0; gint i; while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(!strcmp(t,"\n")) break; if(strstr(t,"##END")) break; for(i=0;i2) x += deltaX; numberOfPoints++; X = g_realloc(X, numberOfPoints*sizeof(gdouble)); Y = g_realloc(Y, numberOfPoints*sizeof(gdouble)); X[numberOfPoints-1] = x*scaleX; Y[numberOfPoints-1] = atof(str)*scaleY; }while(str!=NULL); g_strfreev(strsplit); } if(numberOfPoints>0) { add_new_data(xyplot, numberOfPoints, X, Y); } else { GtkWidget* parentWidget = get_parent_window(GTK_WIDGET(xyplot)); GtkWindow* parentWindow = NULL; if(parentWidget) parentWindow = GTK_WINDOW(parentWidget); GtkWidget* dialog = gtk_message_dialog_new (GTK_WINDOW(parentWindow), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Error reading file '%s'"), fileName); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } if(X) g_free(X); if(Y) g_free(Y); return TRUE; } /********************************************************************************/ static gboolean read_data_jdx_xytable(FILE* fd, GtkWidget*xyplot , gdouble scaleX, gdouble scaleY, gchar* fileName) { gchar t[BSIZE]; gint numberOfPoints = 0; gdouble* X = NULL; gdouble* Y = NULL; gchar** strsplit; gchar* str = NULL; gdouble x=0; gint i; while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(!strcmp(t,"\n")) break; if(strstr(t,"##END")) break; for(i=0;i0) { add_new_data(xyplot, numberOfPoints, X, Y); } else { GtkWidget* parentWidget = get_parent_window(GTK_WIDGET(xyplot)); GtkWindow* parentWindow = NULL; if(parentWidget) parentWindow = GTK_WINDOW(parentWidget); GtkWidget* dialog = gtk_message_dialog_new (GTK_WINDOW(parentWindow), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Error reading file '%s'"), fileName); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } if(X) g_free(X); if(Y) g_free(Y); return TRUE; } /********************************************************************************/ static gboolean read_data_jdx(GtkFileChooser *filesel, gint response_id) { gchar *fileName; FILE *fd; GtkWidget* xyplot = NULL; gint type = 0; gdouble scaleX; gdouble scaleY; gdouble deltaX; if(response_id != GTK_RESPONSE_OK) return FALSE; fileName = gtk_file_chooser_get_filename(filesel); xyplot = g_object_get_data(G_OBJECT (filesel), "XYPLOT"); fd = fopen(fileName, "rb"); type = get_data_jdx_type(fd, &scaleX, &scaleY, &deltaX); if(type==JDX_TYPE_XYPOINTS) read_data_jdx_xypoints(fd, xyplot, scaleX, scaleY, fileName); if(type==JDX_TYPE_XYDATA) read_data_jdx_xydata(fd,xyplot, scaleX, scaleY,deltaX, fileName); if(type==JDX_TYPE_XYTABLE) read_data_jdx_xytable(fd,xyplot, scaleX, scaleY, fileName); if(type==JDX_TYPE_UNKNOWN) { GtkWidget* parentWidget = get_parent_window(GTK_WIDGET(xyplot)); GtkWindow* parentWindow = NULL; if(parentWidget) parentWindow = GTK_WINDOW(parentWidget); GtkWidget* dialog = gtk_message_dialog_new (GTK_WINDOW(parentWindow), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Error reading file '%s', The type of data in this file is unknown"), fileName); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } fclose(fd); return TRUE; } /********************************************************************************/ static void read_data_jdx_dlg(GtkWidget* xyplot) { GtkWidget* parentWindow = NULL; gchar* patternsfiles[] = {"*.jdx","*",NULL}; GtkWidget* filesel= NULL; parentWindow = get_parent_window(GTK_WIDGET(xyplot)); filesel= new_file_chooser_open(parentWindow, (GCallback *)read_data_jdx, _("Read data from a jdx file"), patternsfiles); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); g_object_set_data(G_OBJECT (filesel), "XYPLOT", xyplot); } /*************************************************************************************/ static void set_font (GtkWidget *view, gchar *fontname) { GtkStyle *style; PangoFontDescription *font_desc; if(!GTK_IS_WIDGET(view)) return; style = gtk_style_copy (gtk_widget_get_style (view)); font_desc = pango_font_description_from_string (fontname); if (font_desc) { /* pango_font_description_free (style->font_desc); */ style->font_desc = font_desc; } gtk_widget_set_style (GTK_WIDGET(view), style); g_object_unref (style); } /********************************************************************************/ static GtkWidget* create_popup_win(gchar* label) { GtkWidget *MainFrame; GtkWidget *Label; GtkWidget *hbox = gtk_hbox_new(0,FALSE); MainFrame = gtk_window_new (GTK_WINDOW_POPUP); /* center it on the screen*/ gtk_window_set_position(GTK_WINDOW (MainFrame), GTK_WIN_POS_MOUSE); /* set up key and mound button press to hide splash screen*/ gtk_widget_add_events(MainFrame, GDK_BUTTON_PRESS_MASK| GDK_BUTTON_RELEASE_MASK| GDK_KEY_PRESS_MASK); gtk_widget_realize(MainFrame); Label = gtk_label_new(label); gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT); set_font (Label,"helvetica bold 24"); gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 0); gtk_widget_show(Label); gtk_widget_show(hbox); gtk_container_add (GTK_CONTAINER (MainFrame), hbox); gtk_widget_show(MainFrame); /* force it to draw now.*/ gdk_flush(); /* go into main loop, processing events.*/ while(gtk_events_pending()) gtk_main_iteration(); return MainFrame; } /****************************************************************************************/ static void build_fourier(GtkWidget* buttonDFT, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { gdouble scale = 1.0; gdouble temperature = 1.0; gdouble xmax = 6000.0; G_CONST_RETURN gchar* t; GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotData* data = g_object_get_data(G_OBJECT (xyplot), "CurentData"); GtkWidget* parentWindow = ( GtkWidget*) g_object_get_data(G_OBJECT (buttonDFT), "ParentWindow"); GtkWidget* entry_scale = ( GtkWidget*) g_object_get_data(G_OBJECT (xyplot), "Entry_scale"); GtkWidget* entry_temperature = ( GtkWidget*) g_object_get_data(G_OBJECT (xyplot), "Entry_temperature"); GtkWidget* entry_xmax = ( GtkWidget*) g_object_get_data(G_OBJECT (xyplot), "Entry_xmax"); GtkWidget* popup = NULL; GtkComboBox *combo_correction = ( GtkComboBox*) g_object_get_data(G_OBJECT (xyplot), "ComboCorrection"); GtkTreeIter iter; gchar* correction = NULL; GtkToggleButton *normalize_button = ( GtkToggleButton*) g_object_get_data(G_OBJECT (xyplot), "NormalizeDFTButton"); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); g_return_if_fail (GTK_IS_ENTRY (entry_scale)); g_return_if_fail (GTK_IS_ENTRY (entry_temperature)); g_return_if_fail (GTK_IS_ENTRY (entry_xmax)); if(parentWindow) gtk_widget_hide (GTK_WIDGET(parentWindow)); while(gtk_events_pending()) gtk_main_iteration(); popup = create_popup_win(_("Please wait")); t= gtk_entry_get_text(GTK_ENTRY(entry_scale)); scale = atof(t); if(scale<1e-10) { printf("Warning I set scale to %f\n",1.0); scale = 1.0;} t= gtk_entry_get_text(GTK_ENTRY(entry_temperature)); temperature = atof(t); if(temperature<1e-10) { printf("Warning I set temperature to %f\n",300.0); temperature = 300.0;} t= gtk_entry_get_text(GTK_ENTRY(entry_xmax)); xmax = atof(t); if (gtk_combo_box_get_active_iter (combo_correction, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combo_correction); gtk_tree_model_get (model, &iter, 0, &correction, -1); } if(data && data->size>2) { gdouble* X = g_malloc(data->size*sizeof(gdouble)); gdouble* Y = g_malloc(data->size*sizeof(gdouble)); gint i; GtkWidget* window = NULL; GtkWidget* xyplot = NULL; int n = 0; gint N = data->size; gdouble* x = NULL; gdouble* y = NULL; x = data->x; y = data->y; /* printf("dx1 %f\n", fabs((x[N-1]-x[0])/(N-1))); printf("dx2 %f\n", fabs(x[1]-x[0])); */ if(fabs(fabs((x[N-1]-x[0])/(N-1))-fabs(x[1]-x[0]))>1e-10) { printf("x values are not linear. Linearisation of x\n"); build_linear_x(data->x, data->y, data->size, &x, &y, N); } for(i=0;i0 && i*1.0/N*scale/fabs((x[N-1]-x[0])/(N-1))>xmax) break; for (k=0;kx) g_free(x); if(y && y!=data->y) g_free(y); if(n>0) { X = g_realloc(X,n*sizeof(gdouble)); Y = g_realloc(Y,n*sizeof(gdouble));} if(correction) { /*gdouble conv = 1/scale*47992.36961128; 10^15Hz->Kelvin*/ gdouble conv = 1.43877505;/* cm-1=>Kelvin*/ gdouble fac = conv/temperature; gdouble fac2 = fac/2; if(strstr(correction,"Classic")) for(i=0;i-1"); } if(parentWindow) gtk_object_destroy (GTK_OBJECT(parentWindow)); if(popup) gtk_object_destroy(GTK_OBJECT(popup)); } } /********************************************************************************/ static gboolean get_one_data_jMRUI(FILE*fd, gint idata, gint numberOfPoints, gdouble*Y) { gchar t[BSIZE]; gboolean Ok = FALSE; gint k = 0; gdouble dum; while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) break; if(strstr(t,"Signal")) { k = atoi(strstr(t,"Signal")+1); if(k==idata) { Ok = TRUE; break; } } } if(!Ok) return FALSE; for(k = 0;k0 && nData>0 && f>0) break; } if(strstr(t,"SamplingInterval:")) { dx = atof(strstr(t,":")+1); if(numberOfPoints!=0 && nData>0 && f>0) break; } if(strstr(t,"DatasetsInFile:")) { nData = atoi(strstr(t,":")+1); if(numberOfPoints!=0 && dx>0 && f>0) break; } if(strstr(t,"TransmitterFrequency:")) { f = atof(strstr(t,":")+1)/1e6; if(numberOfPoints!=0 && dx>0 && nData>0) break; } } if(numberOfPoints<1 || nData<1 || dx<=0) { GtkWidget* parentWidget = get_parent_window(GTK_WIDGET(xyplot)); GtkWindow* parentWindow = NULL; if(parentWidget) parentWindow = GTK_WINDOW(parentWidget); GtkWidget* dialog = gtk_message_dialog_new (GTK_WINDOW(parentWindow), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Error reading file '%s'"), fileName); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } X = g_realloc(X, numberOfPoints*sizeof(gdouble)); Y = g_realloc(Y, numberOfPoints*sizeof(gdouble)); dx = 1/dx/f/numberOfPoints*1000; for(i=0;isize<1) return; max = fabs(data->y[0]); for(i=1;isize;i++) if(max< fabs(data->y[i])) max = fabs(data->y[i]); for(i=0;isize;i++) data->y[i] /= max; if(xyplot) { gdouble max = (data->y[0]); gdouble min = (data->y[0]); for(i=1;isize;i++) if(max< (data->y[i])) max = (data->y[i]); for(i=1;isize;i++) if(min> (data->y[i])) min = (data->y[i]); gabedit_xyplot_set_range_ymax (GABEDIT_XYPLOT(xyplot), max); gabedit_xyplot_set_range_ymin (GABEDIT_XYPLOT(xyplot), min); } if(xyplot) gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /********************************************************************************/ static void save_data_2columns_dlg(GtkWidget* buttonSave, GtkWidget* xyplot) { GtkWidget* parentWindow = NULL; gchar* patternsfiles[] = {"*.txt","*",NULL}; GtkWidget* filesel= NULL; gchar* tmp = NULL; gpointer* data = NULL; parentWindow = get_parent_window(GTK_WIDGET(xyplot)); filesel= new_file_chooser_save(parentWindow, (GCallback *)save_data_2columns, _("Save data in an ASCII XY file(2 columns)"), patternsfiles); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); data = g_object_get_data(G_OBJECT (buttonSave), "CurentData"); g_object_set_data(G_OBJECT (filesel), "CurentData", data); tmp = g_strdup_printf("%s%s%s",g_get_current_dir(),G_DIR_SEPARATOR_S,"xyplotData.txt"); gtk_file_chooser_set_filename ((GtkFileChooser *)filesel, tmp); if(tmp) g_free(tmp); gtk_file_chooser_set_current_name ((GtkFileChooser *)filesel, "xyplotData.txt"); } /********************************************************************************/ static void save_all_data_2columns_dlg(GtkWidget* xyplot) { GtkWidget* parentWindow = NULL; gchar* patternsfiles[] = {"*.txt","*",NULL}; GtkWidget* filesel= NULL; gchar* tmp = NULL; parentWindow = get_parent_window(GTK_WIDGET(xyplot)); filesel= new_file_chooser_save(parentWindow, (GCallback *)save_all_data_2columns, _("Save all data in an ASCII XY file(2 columns)"), patternsfiles); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); g_object_set_data(G_OBJECT (filesel), "DataList", GABEDIT_XYPLOT(xyplot)->data_list); tmp = g_strdup_printf("%s%s%s",g_get_current_dir(),G_DIR_SEPARATOR_S,"xyplotData.txt"); gtk_file_chooser_set_filename ((GtkFileChooser *)filesel, tmp); if(tmp) g_free(tmp); gtk_file_chooser_set_current_name ((GtkFileChooser *)filesel, "xyplotData.txt"); } /********************************************************************************/ static gboolean remove_data(GtkWidget* buttonRemove, gint response_id) { XYPlotData* data = NULL; GtkWidget*window = NULL; GtkWidget*xyplot = NULL; if(response_id != GTK_RESPONSE_YES) return FALSE; data = g_object_get_data(G_OBJECT (buttonRemove), "CurentData"); window = g_object_get_data(G_OBJECT (buttonRemove), "Window"); xyplot = g_object_get_data(G_OBJECT (buttonRemove), "XYPLOT"); if(xyplot && data) { gabedit_xyplot_remove_data(GABEDIT_XYPLOT(xyplot), data); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } if(window) gtk_widget_destroy(window); return TRUE; } /********************************************************************************/ static void remove_data_dlg(GtkWidget* buttonRemove, GtkWidget* xyplot) { GtkWidget* parentWindow = get_parent_window(GTK_WIDGET(xyplot)); GtkWidget* dialog = gtk_message_dialog_new (GTK_WINDOW(parentWindow), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("Are you sure to delete this data ?") ); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_NO); g_signal_connect_swapped(dialog, "response", G_CALLBACK (remove_data), buttonRemove); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } /****************************************************************************************/ static void spin_font_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gint fontSize = gtk_spin_button_get_value(spinbutton); gchar tmp[100]; sprintf(tmp,"sans %d",fontSize); gabedit_xyplot_set_font (GABEDIT_XYPLOT(xyplot), tmp); reset_object_text_pango(GABEDIT_XYPLOT(xyplot)); } } /****************************************************************************************/ static void add_font_size_frame(GtkWidget* hbox, GtkWidget* xyplot) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* spin_font_size = NULL; frame=gtk_frame_new(_("Font size")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); spin_font_size=gtk_spin_button_new_with_range(8, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_font_size, TRUE, FALSE, 2); gtk_widget_show(spin_font_size); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_font_size), GABEDIT_XYPLOT(xyplot)->font_size); g_signal_connect(G_OBJECT(spin_font_size), "value-changed", G_CALLBACK(spin_font_changed_value), xyplot); } /****************************************************************************************/ static void set_font_size_dialog(GtkWidget* xyplot) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* hbox = NULL; GtkWidget* parentWindow = NULL; gtk_window_set_title (GTK_WINDOW (window), _("Set font size")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)xyplot); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show(hbox); add_font_size_frame(hbox, xyplot); parentWindow = get_parent_window(GTK_WIDGET(xyplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } /****************************************************************************************/ static void spin_x_digits_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_set_x_legends_digits(GABEDIT_XYPLOT(xyplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void spin_y_digits_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_set_y_legends_digits(GABEDIT_XYPLOT(xyplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void add_digits_frame(GtkWidget* hbox, GtkWidget* xyplot) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* label = NULL; GtkWidget* x_spin_digits = NULL; GtkWidget* y_spin_digits = NULL; frame=gtk_frame_new(_("Digits")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_(" X ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); x_spin_digits=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), x_spin_digits, TRUE, FALSE, 2); gtk_widget_show(x_spin_digits); label=gtk_label_new(_(" Y ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); y_spin_digits=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), y_spin_digits, TRUE, FALSE, 2); gtk_widget_show(y_spin_digits); gtk_spin_button_set_value(GTK_SPIN_BUTTON(x_spin_digits), GABEDIT_XYPLOT(xyplot)->x_legends_digits); gtk_spin_button_set_value(GTK_SPIN_BUTTON(y_spin_digits), GABEDIT_XYPLOT(xyplot)->y_legends_digits); g_signal_connect(G_OBJECT(x_spin_digits), "value-changed", G_CALLBACK(spin_x_digits_changed_value), xyplot); g_signal_connect(G_OBJECT(y_spin_digits), "value-changed", G_CALLBACK(spin_y_digits_changed_value), xyplot); } /****************************************************************************************/ static void set_digits_dialog(GtkWidget* xyplot) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* hbox = NULL; GtkWidget* parentWindow = NULL; gtk_window_set_title (GTK_WINDOW (window), _("Set digits")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)xyplot); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show(hbox); add_digits_frame(hbox, xyplot); parentWindow = get_parent_window(GTK_WIDGET(xyplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } /********************************************************************************/ static void activate_entry_xlabel(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; GtkWidget* xyplot = NULL; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); gabedit_xyplot_set_x_label (GABEDIT_XYPLOT(xyplot), t); } /********************************************************************************/ static void activate_entry_ylabel(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; GtkWidget* xyplot = NULL; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); gabedit_xyplot_set_y_label (GABEDIT_XYPLOT(xyplot), t); } /****************************************************************************************/ static void add_labels_frame(GtkWidget* hbox, GtkWidget* xyplot) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* label = NULL; GtkWidget* entry_x_label = NULL; GtkWidget* entry_y_label = NULL; frame=gtk_frame_new(_("Labels")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); label=gtk_label_new(_("X : ")); gtk_box_pack_start(GTK_BOX(hbox_frame), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_x_label = gtk_entry_new(); gtk_widget_set_size_request(entry_x_label,100,-1); if(GABEDIT_XYPLOT(xyplot)->h_label_str) gtk_entry_set_text(GTK_ENTRY(entry_x_label),GABEDIT_XYPLOT(xyplot)->h_label_str); else gtk_entry_set_text(GTK_ENTRY(entry_x_label),""); gtk_box_pack_start(GTK_BOX(hbox_frame), entry_x_label, FALSE, FALSE, 2); gtk_widget_show(entry_x_label); label=gtk_label_new(_("Y : ")); gtk_box_pack_start(GTK_BOX(hbox_frame), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_y_label = gtk_entry_new(); gtk_widget_set_size_request(entry_y_label,100,-1); if(GABEDIT_XYPLOT(xyplot)->v_label_str) gtk_entry_set_text(GTK_ENTRY(entry_y_label),GABEDIT_XYPLOT(xyplot)->v_label_str); else gtk_entry_set_text(GTK_ENTRY(entry_y_label),""); gtk_box_pack_start(GTK_BOX(hbox_frame), entry_y_label, FALSE, FALSE, 2); gtk_widget_show(entry_y_label); g_signal_connect (G_OBJECT (entry_x_label), "activate", (GCallback)activate_entry_xlabel, xyplot); g_signal_connect (G_OBJECT (entry_y_label), "activate", (GCallback)activate_entry_ylabel, xyplot); } /****************************************************************************************/ static void set_labels_dialog(GtkWidget* xyplot) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* parentWindow = NULL; GtkWidget* hbox = NULL; gtk_window_set_title (GTK_WINDOW (window), _("Set labels")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)xyplot); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show(hbox); add_labels_frame(hbox, xyplot); parentWindow = get_parent_window(GTK_WIDGET(xyplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } /********************************************************************************/ static void activate_entry_xmin(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; gdouble a; GtkWidget* xyplot = NULL; gdouble xmin; gdouble ymin; gdouble xmax; gdouble ymax; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); a = atof(t); gabedit_xyplot_get_range (GABEDIT_XYPLOT(xyplot), &xmin, &xmax, &ymin, &ymax); if(a>= xmax) { gchar* tmp = g_strdup_printf("%0.3f",xmin); gtk_entry_set_text(GTK_ENTRY(entry),tmp); g_free(tmp); return; } gabedit_xyplot_set_range_xmin (GABEDIT_XYPLOT(xyplot), a); } /********************************************************************************/ static void activate_entry_xmax(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; gdouble a; GtkWidget* xyplot = NULL; gdouble xmin; gdouble ymin; gdouble xmax; gdouble ymax; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); a = atof(t); gabedit_xyplot_get_range (GABEDIT_XYPLOT(xyplot), &xmin, &xmax, &ymin, &ymax); if(a<=xmin) { gchar* tmp = g_strdup_printf("%0.3f",xmax); gtk_entry_set_text(GTK_ENTRY(entry),tmp); g_free(tmp); return; } gabedit_xyplot_set_range_xmax (GABEDIT_XYPLOT(xyplot), a); } /********************************************************************************/ static void activate_entry_ymin(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; gdouble a; GtkWidget* xyplot = NULL; gdouble xmin; gdouble ymin; gdouble xmax; gdouble ymax; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); a = atof(t); gabedit_xyplot_get_range (GABEDIT_XYPLOT(xyplot), &xmin, &xmax, &ymin, &ymax); if(a>= ymax) { gchar* tmp = g_strdup_printf("%0.3f",ymin); gtk_entry_set_text(GTK_ENTRY(entry),tmp); g_free(tmp); return; } gabedit_xyplot_set_range_ymin (GABEDIT_XYPLOT(xyplot), a); } /********************************************************************************/ static void activate_entry_ymax(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; gdouble a; GtkWidget* xyplot = NULL; gdouble xmin; gdouble ymin; gdouble xmax; gdouble ymax; if(!user_data || !G_IS_OBJECT(user_data)) return; xyplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); a = atof(t); gabedit_xyplot_get_range (GABEDIT_XYPLOT(xyplot), &xmin, &xmax, &ymin, &ymax); if(a<= ymin) { gchar* tmp = g_strdup_printf("%0.3f",ymax); gtk_entry_set_text(GTK_ENTRY(entry),tmp); g_free(tmp); return; } gabedit_xyplot_set_range_ymax (GABEDIT_XYPLOT(xyplot), a); } /****************************************************************************************/ static void add_ranges_frame(GtkWidget* hbox, GtkWidget* xyplot) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* label = NULL; GtkWidget* entry_x_min = NULL; GtkWidget* entry_x_max = NULL; GtkWidget* entry_y_min = NULL; GtkWidget* entry_y_max = NULL; gchar tmp[100]; frame=gtk_frame_new(_("Ranges")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); label=gtk_label_new(_("X Min: ")); gtk_box_pack_start(GTK_BOX(hbox_frame), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_x_min = gtk_entry_new(); gtk_widget_set_size_request(entry_x_min,50,-1); sprintf(tmp,"%0.3f",GABEDIT_XYPLOT(xyplot)->xmin); gtk_entry_set_text(GTK_ENTRY(entry_x_min),tmp); gtk_box_pack_start(GTK_BOX(hbox_frame), entry_x_min, TRUE, FALSE, 2); gtk_widget_show(entry_x_min); label=gtk_label_new(_("X Max: ")); gtk_box_pack_start(GTK_BOX(hbox_frame), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_x_max = gtk_entry_new(); gtk_widget_set_size_request(entry_x_max,50,-1); sprintf(tmp,"%0.3f",GABEDIT_XYPLOT(xyplot)->xmax); gtk_entry_set_text(GTK_ENTRY(entry_x_max),tmp); gtk_box_pack_start(GTK_BOX(hbox_frame), entry_x_max, TRUE, FALSE, 2); gtk_widget_show(entry_x_max); label=gtk_label_new(_("Y Min: ")); gtk_box_pack_start(GTK_BOX(hbox_frame), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_y_min = gtk_entry_new(); gtk_widget_set_size_request(entry_y_min,50,-1); sprintf(tmp,"%0.3f",GABEDIT_XYPLOT(xyplot)->ymin); gtk_entry_set_text(GTK_ENTRY(entry_y_min),tmp); gtk_box_pack_start(GTK_BOX(hbox_frame), entry_y_min, TRUE, FALSE, 2); gtk_widget_show(entry_y_min); label=gtk_label_new(_("Y Max: ")); gtk_box_pack_start(GTK_BOX(hbox_frame), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_y_max = gtk_entry_new(); gtk_widget_set_size_request(entry_y_max,50,-1); sprintf(tmp,"%0.3f",GABEDIT_XYPLOT(xyplot)->ymax); gtk_entry_set_text(GTK_ENTRY(entry_y_max),tmp); gtk_box_pack_start(GTK_BOX(hbox_frame), entry_y_max, TRUE, FALSE, 2); gtk_widget_show(entry_y_max); g_signal_connect (G_OBJECT (entry_x_min), "activate", (GCallback)activate_entry_xmin, xyplot); g_signal_connect (G_OBJECT (entry_x_max), "activate", (GCallback)activate_entry_xmax, xyplot); g_signal_connect (G_OBJECT (entry_y_min), "activate", (GCallback)activate_entry_ymin, xyplot); g_signal_connect (G_OBJECT (entry_y_max), "activate", (GCallback)activate_entry_ymax, xyplot); } /****************************************************************************************/ static void set_ranges_dialog(GtkWidget* xyplot) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* parentWindow = NULL; GtkWidget* hbox = NULL; gtk_window_set_title (GTK_WINDOW (window), _("Set ranges")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)xyplot); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show(hbox); add_ranges_frame(hbox, xyplot); parentWindow = get_parent_window(GTK_WIDGET(xyplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } /****************************************************************************************/ static void spin_hminor_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_set_ticks_hminor(GABEDIT_XYPLOT(xyplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void spin_hmajor_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_set_ticks_hmajor(GABEDIT_XYPLOT(xyplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void spin_vminor_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_set_ticks_vminor(GABEDIT_XYPLOT(xyplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void spin_vmajor_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_set_ticks_vmajor(GABEDIT_XYPLOT(xyplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void spin_length_ticks_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_set_ticks_length(GABEDIT_XYPLOT(xyplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void add_ticks_frame(GtkWidget* hbox, GtkWidget* xyplot) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* label = NULL; GtkWidget* spin_hmajor = NULL; GtkWidget* spin_hminor = NULL; GtkWidget* spin_vmajor = NULL; GtkWidget* spin_vminor = NULL; GtkWidget* spin_length = NULL; frame=gtk_frame_new(_("Ticks")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("X Major: ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_hmajor=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_hmajor, TRUE, FALSE, 2); gtk_widget_show(spin_hmajor); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Y Major: ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_vmajor=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_vmajor, TRUE, FALSE, 2); gtk_widget_show(spin_vmajor); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("X Minor: ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_hminor=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_hminor, TRUE, FALSE, 2); gtk_widget_show(spin_hminor); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Y Minor: ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_vminor=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_vminor, TRUE, FALSE, 2); gtk_widget_show(spin_vminor); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Length: ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_length=gtk_spin_button_new_with_range(3, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_length, TRUE, FALSE, 2); gtk_widget_show(spin_length); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_hmajor), GABEDIT_XYPLOT(xyplot)->hmajor_ticks); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_hminor), GABEDIT_XYPLOT(xyplot)->hminor_ticks); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_vmajor), GABEDIT_XYPLOT(xyplot)->vmajor_ticks); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_vminor), GABEDIT_XYPLOT(xyplot)->vminor_ticks); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_length), GABEDIT_XYPLOT(xyplot)->length_ticks); g_signal_connect(G_OBJECT(spin_hmajor), "value-changed", G_CALLBACK(spin_hmajor_changed_value), xyplot); g_signal_connect(G_OBJECT(spin_hminor), "value-changed", G_CALLBACK(spin_hminor_changed_value), xyplot); g_signal_connect(G_OBJECT(spin_vmajor), "value-changed", G_CALLBACK(spin_vmajor_changed_value), xyplot); g_signal_connect(G_OBJECT(spin_vminor), "value-changed", G_CALLBACK(spin_vminor_changed_value), xyplot); g_signal_connect(G_OBJECT(spin_length), "value-changed", G_CALLBACK(spin_length_ticks_changed_value), xyplot); } /****************************************************************************************/ static void set_ticks_dialog(GtkWidget* xyplot) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* hbox = NULL; GtkWidget* parentWindow = NULL; gtk_window_set_title (GTK_WINDOW (window), _("Set ticks")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)xyplot); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show(hbox); add_ticks_frame(hbox, xyplot); parentWindow = get_parent_window(GTK_WIDGET(xyplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } /****************************************************************************************/ static void spin_right_margins_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_set_margins_right(GABEDIT_XYPLOT(xyplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void spin_left_margins_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_set_margins_left(GABEDIT_XYPLOT(xyplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void spin_bottom_margins_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_set_margins_bottom(GABEDIT_XYPLOT(xyplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void spin_top_margins_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_set_margins_top(GABEDIT_XYPLOT(xyplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void add_margins_frame(GtkWidget* hbox, GtkWidget* xyplot) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* label = NULL; GtkWidget* spin_left_margins = NULL; GtkWidget* spin_right_margins = NULL; GtkWidget* spin_top_margins = NULL; GtkWidget* spin_bottom_margins = NULL; frame=gtk_frame_new(_("Margins")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Left: ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_left_margins=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_left_margins, TRUE, FALSE, 2); gtk_widget_show(spin_left_margins); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Top: ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_top_margins=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_top_margins, TRUE, FALSE, 2); gtk_widget_show(spin_top_margins); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Right: ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_right_margins=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_right_margins, TRUE, FALSE, 2); gtk_widget_show(spin_right_margins); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Bottom: ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_bottom_margins=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_bottom_margins, TRUE, FALSE, 2); gtk_widget_show(spin_bottom_margins); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_left_margins), GABEDIT_XYPLOT(xyplot)->left_margins); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_right_margins), GABEDIT_XYPLOT(xyplot)->right_margins); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_top_margins), GABEDIT_XYPLOT(xyplot)->top_margins); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_bottom_margins), GABEDIT_XYPLOT(xyplot)->bottom_margins); g_signal_connect(G_OBJECT(spin_left_margins), "value-changed", G_CALLBACK(spin_left_margins_changed_value), xyplot); g_signal_connect(G_OBJECT(spin_right_margins), "value-changed", G_CALLBACK(spin_right_margins_changed_value), xyplot); g_signal_connect(G_OBJECT(spin_top_margins), "value-changed", G_CALLBACK(spin_top_margins_changed_value), xyplot); g_signal_connect(G_OBJECT(spin_bottom_margins), "value-changed", G_CALLBACK(spin_bottom_margins_changed_value), xyplot); } /****************************************************************************************/ static void set_margins_dialog(GtkWidget* xyplot) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* hbox = NULL; GtkWidget* parentWindow = NULL; gtk_window_set_title (GTK_WINDOW (window), _("Set margins")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)xyplot); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show(hbox); add_margins_frame(hbox, xyplot); parentWindow = get_parent_window(GTK_WIDGET(xyplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } /****************************************************************************************/ static void reflect_x_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_reflect_x (GABEDIT_XYPLOT(xyplot), gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void reflect_y_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_reflect_y (GABEDIT_XYPLOT(xyplot), gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void add_reflexion_frame(GtkWidget* hbox, GtkWidget* xyplot) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* reflect_x_button; GtkWidget* reflect_y_button; frame=gtk_frame_new(_("Axes")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); reflect_x_button = gtk_check_button_new_with_label (_("Reflect X")); gtk_box_pack_start(GTK_BOX(hbox_frame), reflect_x_button, FALSE, FALSE, 2); gtk_widget_show(reflect_x_button); reflect_y_button = gtk_check_button_new_with_label (_("Reflect Y")); gtk_box_pack_start(GTK_BOX(hbox_frame), reflect_y_button, FALSE, FALSE, 2); gtk_widget_show(reflect_y_button); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(reflect_x_button), GABEDIT_XYPLOT(xyplot)->reflect_x); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(reflect_y_button), GABEDIT_XYPLOT(xyplot)->reflect_y); g_signal_connect (G_OBJECT (reflect_x_button), "toggled", (GCallback)reflect_x_toggled, xyplot); g_signal_connect (G_OBJECT (reflect_y_button), "toggled", (GCallback)reflect_y_toggled, xyplot); } /****************************************************************************************/ static void show_left_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_show_left_legends (GABEDIT_XYPLOT(xyplot), gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void show_right_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_show_right_legends (GABEDIT_XYPLOT(xyplot), gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void show_top_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_show_top_legends (GABEDIT_XYPLOT(xyplot), gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void show_bottom_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_show_bottom_legends (GABEDIT_XYPLOT(xyplot), gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void show_rectangle_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_show_rectangle_legends (GABEDIT_XYPLOT(xyplot), gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void add_legends_frame(GtkWidget* hbox, GtkWidget* xyplot) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* show_left; GtkWidget* show_right; GtkWidget* show_top; GtkWidget* show_bottom; GtkWidget* show_rectangle; frame=gtk_frame_new(_("Legends")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); show_left = gtk_check_button_new_with_label (_("Left")); gtk_box_pack_start(GTK_BOX(hbox_frame), show_left, FALSE, FALSE, 2); gtk_widget_show(show_left); show_right = gtk_check_button_new_with_label (_("Right")); gtk_box_pack_start(GTK_BOX(hbox_frame), show_right, FALSE, FALSE, 2); gtk_widget_show(show_right); show_top = gtk_check_button_new_with_label (_("Top")); gtk_box_pack_start(GTK_BOX(hbox_frame), show_top, FALSE, FALSE, 2); gtk_widget_show(show_top); show_bottom = gtk_check_button_new_with_label (_("Bottom")); gtk_box_pack_start(GTK_BOX(hbox_frame), show_bottom, FALSE, FALSE, 2); gtk_widget_show(show_bottom); show_rectangle = gtk_check_button_new_with_label (_("Rectangle")); gtk_box_pack_start(GTK_BOX(hbox_frame), show_rectangle, FALSE, FALSE, 2); gtk_widget_show(show_rectangle); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(show_left), GABEDIT_XYPLOT(xyplot)->show_left_legends); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(show_right), GABEDIT_XYPLOT(xyplot)->show_right_legends); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(show_top), GABEDIT_XYPLOT(xyplot)->show_top_legends); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(show_bottom), GABEDIT_XYPLOT(xyplot)->show_bottom_legends); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(show_rectangle), GABEDIT_XYPLOT(xyplot)->show_rectangle_legends); g_signal_connect (G_OBJECT (show_left), "toggled", (GCallback)show_left_toggled, xyplot); g_signal_connect (G_OBJECT (show_right), "toggled", (GCallback)show_right_toggled, xyplot); g_signal_connect (G_OBJECT (show_top), "toggled", (GCallback)show_top_toggled, xyplot); g_signal_connect (G_OBJECT (show_bottom), "toggled", (GCallback)show_bottom_toggled, xyplot); g_signal_connect (G_OBJECT (show_rectangle), "toggled", (GCallback)show_rectangle_toggled, xyplot); } /****************************************************************************************/ static void h_major_grids_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_HMAJOR_GRID, gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void h_minor_grids_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_HMINOR_GRID, gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void v_major_grids_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_VMAJOR_GRID, gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void v_minor_grids_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); gabedit_xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_VMINOR_GRID, gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void add_grid_frame(GtkWidget* hbox, GtkWidget* xyplot) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* h_major; GtkWidget* h_minor; GtkWidget* v_major; GtkWidget* v_minor; frame=gtk_frame_new(_("Grid")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); h_major = gtk_check_button_new_with_label (_("H major")); gtk_box_pack_start(GTK_BOX(hbox_frame), h_major, FALSE, FALSE, 2); gtk_widget_show(h_major); v_major = gtk_check_button_new_with_label (_("V major")); gtk_box_pack_start(GTK_BOX(hbox_frame), v_major, FALSE, FALSE, 2); gtk_widget_show(v_major); h_minor = gtk_check_button_new_with_label (_("H minor")); gtk_box_pack_start(GTK_BOX(hbox_frame), h_minor, FALSE, FALSE, 2); gtk_widget_show(h_minor); v_minor = gtk_check_button_new_with_label (_("V minor")); gtk_box_pack_start(GTK_BOX(hbox_frame), v_minor, FALSE, FALSE, 2); gtk_widget_show(v_minor); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(h_major), GABEDIT_XYPLOT(xyplot)->hmajor_grid); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(h_minor), GABEDIT_XYPLOT(xyplot)->hminor_grid); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(v_major), GABEDIT_XYPLOT(xyplot)->vmajor_grid); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(v_minor), GABEDIT_XYPLOT(xyplot)->vminor_grid); g_signal_connect (G_OBJECT (h_major), "toggled", (GCallback)h_major_grids_toggled, xyplot); g_signal_connect (G_OBJECT (h_minor), "toggled", (GCallback)h_minor_grids_toggled, xyplot); g_signal_connect (G_OBJECT (v_major), "toggled", (GCallback)v_major_grids_toggled, xyplot); g_signal_connect (G_OBJECT (v_minor), "toggled", (GCallback)v_minor_grids_toggled, xyplot); } /********************************************************************************/ static void activate_entry_xmincut(GtkWidget *entry, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotData* data = g_object_get_data(G_OBJECT (entry), "CurentData"); gint loop; gdouble a; G_CONST_RETURN gchar* t; g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); t= gtk_entry_get_text(GTK_ENTRY(entry)); if(!t) return; a = atof(t); if(data) { int n = 0; for(loop=0;loopsize; loop++) if(data->x[loop]>=a) n++; if(n!=data->size && n>0) { gdouble* X = g_malloc(n*sizeof(gdouble)); gdouble* Y = g_malloc(n*sizeof(gdouble)); n= 0; for(loop=0;loopsize; loop++) if(data->x[loop]>=a) { X[n] = data->x[loop]; Y[n] = data->y[loop]; n++; } if(data->x) g_free(data->x); if(data->y) g_free(data->y); data->x = X; data->y = Y; data->size = n; } } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /********************************************************************************/ static void activate_entry_xmaxcut(GtkWidget *entry, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotData* data = g_object_get_data(G_OBJECT (entry), "CurentData"); gint loop; gdouble a; G_CONST_RETURN gchar* t; g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); t= gtk_entry_get_text(GTK_ENTRY(entry)); if(!t) return; a = atof(t); if(data) { int n = 0; for(loop=0;loopsize; loop++) if(data->x[loop]<=a) n++; if(n!=data->size && n>0) { gdouble* X = g_malloc(n*sizeof(gdouble)); gdouble* Y = g_malloc(n*sizeof(gdouble)); n= 0; for(loop=0;loopsize; loop++) if(data->x[loop]<=a) { X[n] = data->x[loop]; Y[n] = data->y[loop]; n++; } if(data->x) g_free(data->x); if(data->y) g_free(data->y); data->x = X; data->y = Y; data->size = n; } } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /********************************************************************************/ static void add_cut_data_frame(GtkWidget* hbox, GtkWidget* xyplot, XYPlotData *data) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* label = NULL; GtkWidget* entry_x_min = NULL; GtkWidget* entry_x_max = NULL; gchar tmp[100]; frame=gtk_frame_new(_("Cut data")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); label=gtk_label_new(_("X Min: ")); gtk_box_pack_start(GTK_BOX(hbox_frame), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_x_min = gtk_entry_new(); gtk_widget_set_size_request(entry_x_min,80,-1); sprintf(tmp,"%0.3f",GABEDIT_XYPLOT(xyplot)->xmin); gtk_entry_set_text(GTK_ENTRY(entry_x_min),tmp); gtk_box_pack_start(GTK_BOX(hbox_frame), entry_x_min, TRUE, FALSE, 2); gtk_widget_show(entry_x_min); label=gtk_label_new(_(" X Max: ")); gtk_box_pack_start(GTK_BOX(hbox_frame), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_x_max = gtk_entry_new(); gtk_widget_set_size_request(entry_x_max,80,-1); sprintf(tmp,"%0.3f",GABEDIT_XYPLOT(xyplot)->xmax); gtk_entry_set_text(GTK_ENTRY(entry_x_max),tmp); gtk_box_pack_start(GTK_BOX(hbox_frame), entry_x_max, TRUE, FALSE, 2); gtk_widget_show(entry_x_max); g_object_set_data(G_OBJECT (entry_x_min), "CurentData", data); g_object_set_data(G_OBJECT (entry_x_max), "CurentData", data); g_signal_connect (G_OBJECT (entry_x_min), "activate", (GCallback)activate_entry_xmincut, xyplot); g_signal_connect (G_OBJECT (entry_x_max), "activate", (GCallback)activate_entry_xmaxcut, xyplot); } /********************************************************************************/ static void activate_entry_x_linear(GtkWidget *entry, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotData* data = g_object_get_data(G_OBJECT (entry), "CurentData"); gint N; G_CONST_RETURN gchar* t; g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); t= gtk_entry_get_text(GTK_ENTRY(entry)); if(!t) return; N = atoi(t); if(data && N>1) { gdouble* x = NULL; gdouble* y = NULL; build_linear_x(data->x, data->y, data->size, &x, &y, N); g_free(data->x); g_free(data->y); data->x = x; data->y = y; data->size = N; } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /********************************************************************************/ static void add_x_linear_data_frame(GtkWidget* hbox, GtkWidget* xyplot, XYPlotData *data) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* label = NULL; GtkWidget* entry_x_linear = NULL; gchar tmp[100]; frame=gtk_frame_new(_("X Linearization")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); label=gtk_label_new(_("N points : ")); gtk_box_pack_start(GTK_BOX(hbox_frame), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_x_linear = gtk_entry_new(); gtk_widget_set_size_request(entry_x_linear,80,-1); if(data) sprintf(tmp,"%d", 2*data->size); else sprintf(tmp,"%d",100); gtk_entry_set_text(GTK_ENTRY(entry_x_linear),tmp); gtk_box_pack_start(GTK_BOX(hbox_frame), entry_x_linear, TRUE, FALSE, 2); gtk_widget_show(entry_x_linear); g_object_set_data(G_OBJECT (entry_x_linear), "CurentData", data); g_signal_connect (G_OBJECT (entry_x_linear), "activate", (GCallback)activate_entry_x_linear, xyplot); } /********************************************************************************************************/ static GtkWidget *add_combo_correction(GtkWidget *hbox) { GtkTreeIter iter; GtkTreeStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; store = gtk_tree_store_new (1,G_TYPE_STRING); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Fourier : no correction", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Harmonic (w*beta hbar w)", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Classic : w ( 1 - exp(-beta hbar w) )", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Kubo : w tanh(beta hbar w/2) ", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Schofield : w ( 1 - exp(-beta hbar w) ) exp(beta hbar w/2)", -1); model = GTK_TREE_MODEL (store); combobox = gtk_combo_box_new_with_model (model); g_object_unref (model); gtk_box_pack_start (GTK_BOX (hbox), combobox, TRUE, TRUE, 1); renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", 0, NULL); return combobox; } /********************************************************************************/ static void add_fourier_data_frame(GtkWidget* hbox, GtkWidget* xyplot, XYPlotData *data, GtkWidget* parentWindow) { GtkWidget* frame = NULL; GtkWidget* vbox_frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* label = NULL; GtkWidget* entry_scale = NULL; GtkWidget* entry_xmax = NULL; GtkWidget* entry_temperature = NULL; GtkWidget* buttonDFT = NULL; GtkWidget* combo = NULL; GtkWidget* normalize_button = NULL; gchar tmp[100]; frame=gtk_frame_new(_("Fourier transformation")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 2); gtk_widget_show(frame); vbox_frame=gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), vbox_frame); gtk_widget_show(vbox_frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_frame), hbox_frame, FALSE, FALSE, 2); gtk_widget_show(hbox_frame); label=gtk_label_new(_("Scale X : ")); gtk_box_pack_start(GTK_BOX(hbox_frame), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_scale = gtk_entry_new(); gtk_widget_set_size_request(entry_scale,100,-1); sprintf(tmp,"%0.3f",33356.40951982); gtk_entry_set_text(GTK_ENTRY(entry_scale),tmp); gtk_box_pack_start(GTK_BOX(hbox_frame), entry_scale, FALSE, FALSE, 2); gtk_widget_show(entry_scale); g_object_set_data(G_OBJECT ( xyplot), "Entry_scale", entry_scale); label=gtk_label_new(_("X max : ")); gtk_box_pack_start(GTK_BOX(hbox_frame), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_xmax = gtk_entry_new(); gtk_widget_set_size_request(entry_xmax,100,-1); sprintf(tmp,"%0.3f",6000.0); gtk_entry_set_text(GTK_ENTRY(entry_xmax),tmp); gtk_box_pack_start(GTK_BOX(hbox_frame), entry_xmax, FALSE, FALSE, 2); gtk_widget_show(entry_xmax); g_object_set_data(G_OBJECT ( xyplot), "Entry_xmax", entry_xmax); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_frame), hbox_frame, FALSE, FALSE, 2); gtk_widget_show(hbox_frame); label=gtk_label_new(_("Correction :")); gtk_box_pack_start(GTK_BOX(hbox_frame), label, TRUE, FALSE, 2); gtk_widget_show(label); combo = add_combo_correction(hbox_frame); gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); gtk_widget_show(combo); g_object_set_data(G_OBJECT (xyplot), "ComboCorrection", combo); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_frame), hbox_frame, FALSE, FALSE, 2); gtk_widget_show(hbox_frame); label=gtk_label_new(_(" Temperature (K) : ")); gtk_box_pack_start(GTK_BOX(hbox_frame), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_temperature = gtk_entry_new(); gtk_widget_set_size_request(entry_temperature,100,-1); sprintf(tmp,"%0.3f",300.0); gtk_entry_set_text(GTK_ENTRY(entry_temperature),tmp); gtk_box_pack_start(GTK_BOX(hbox_frame), entry_temperature, FALSE, FALSE, 2); gtk_widget_show(entry_temperature); g_object_set_data(G_OBJECT ( xyplot), "Entry_temperature", entry_temperature); normalize_button = gtk_check_button_new_with_label (_("Normalize")); gtk_box_pack_start(GTK_BOX(hbox_frame), normalize_button, FALSE, FALSE, 2); gtk_widget_show(normalize_button); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(normalize_button), TRUE); g_object_set_data(G_OBJECT ( xyplot), "NormalizeDFTButton", normalize_button); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_frame), hbox_frame, FALSE, FALSE, 2); gtk_widget_show(hbox_frame); buttonDFT = gtk_button_new_with_label (_("DFT")); gtk_box_pack_start(GTK_BOX(hbox_frame), buttonDFT, TRUE, TRUE, 4); gtk_widget_show (buttonDFT); g_object_set_data(G_OBJECT ( xyplot), "CurentData", data); g_object_set_data(G_OBJECT (buttonDFT), "ParentWindow", parentWindow); g_signal_connect(G_OBJECT(buttonDFT), "clicked", G_CALLBACK(build_fourier), xyplot); } /****************************************************************************************/ static void set_all_dialog(GtkWidget* xyplot) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* parentWindow = NULL; GtkWidget* hbox = NULL; GtkWidget* vbox = NULL; gtk_window_set_title (GTK_WINDOW (window), _("Set")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)xyplot); vbox=gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox); gtk_widget_show(vbox); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 1); add_ranges_frame(hbox, xyplot); gtk_widget_show(hbox); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 1); add_margins_frame(hbox, xyplot); gtk_widget_show(hbox); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 1); add_labels_frame(hbox, xyplot); add_font_size_frame(hbox, xyplot); add_digits_frame(hbox, xyplot); gtk_widget_show(hbox); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 1); add_ticks_frame(hbox, xyplot); gtk_widget_show(hbox); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 1); add_reflexion_frame(hbox, xyplot); add_legends_frame(hbox, xyplot); add_grid_frame(hbox, xyplot); gtk_widget_show(hbox); parentWindow = get_parent_window(GTK_WIDGET(xyplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } /****************************************************************************************/ static void gabedit_xyplot_save_gabedit_lines(GabeditXYPlot *xyplot, FILE* file) { gint i; fprintf(file,"lines %d\n", xyplot->nObjectsLine); for(i=0;inObjectsLine;i++) { fprintf(file,"%lf %lf %lf %lf %d %d %lf %lf %lf %d\n", xyplot->objectsLine[i].x1, xyplot->objectsLine[i].y1, xyplot->objectsLine[i].x2, xyplot->objectsLine[i].y2, xyplot->objectsLine[i].width, xyplot->objectsLine[i].arrow_size, SCALE(xyplot->objectsLine[i].color.red), SCALE(xyplot->objectsLine[i].color.green), SCALE(xyplot->objectsLine[i].color.blue), xyplot->objectsLine[i].style ); } } /****************************************************************************************/ static void gabedit_xyplot_save_gabedit_texts(GabeditXYPlot *xyplot, FILE* file) { gint i; fprintf(file,"texts %d\n", xyplot->nObjectsText); for(i=0;inObjectsText;i++) { fprintf(file,"%lf %lf %lf\n", xyplot->objectsText[i].x, xyplot->objectsText[i].y, xyplot->objectsText[i].angle ); fprintf(file,"%s\n", xyplot->objectsText[i].str); } } /*************************************************************************************/ static gchar *get_suffix_name_file(const gchar* allname) { gchar *filename= g_path_get_basename(allname); gchar *dirname= g_path_get_dirname(allname); gchar *temp= g_strdup(filename); gint len=strlen(filename); gint i; gchar* name = NULL; if(!allname || strlen(allname)<1) return g_strdup("error"); filename= g_path_get_basename(allname); dirname= g_path_get_dirname(allname); temp= g_strdup(filename); len=strlen(filename); for(i=len;i>0;i--) if(temp[i]=='.') { temp[i] = '\0'; break; } name = g_strdup_printf("%s%s%s",dirname,G_DIR_SEPARATOR_S,temp); if(temp) g_free(temp); if(dirname) g_free(dirname); if(filename) g_free(filename); if(strcmp(name,".")==0) name = g_strdup(g_get_current_dir()); return name; } /*************************************************************************************/ static gchar *get_filename_png(const gchar* allname, gint i) { gchar *bas = get_suffix_name_file(allname); if(bas) { gchar* fn = g_strdup_printf("%s_%d.png",bas,i); g_free(bas); return fn; } return g_strdup_printf("%d.png",i); } /****************************************************************************************/ static void gabedit_xyplot_save_gabedit_images(GabeditXYPlot *xyplot, FILE* file, gchar* fileName) { gint i; gchar *fn; fprintf(file,"images %d\n", xyplot->nObjectsImage); for(i=0;inObjectsImage;i++) { fprintf(file,"%lf %lf %lf %lf\n", xyplot->objectsImage[i].x, xyplot->objectsImage[i].y, xyplot->objectsImage[i].width, xyplot->objectsImage[i].height ); fn = get_filename_png(fileName, i); fprintf(file,"%s\n", fn); cairo_surface_write_to_png (xyplot->objectsImage[i].image,fn); g_free(fn); } } /****************************************************************************************/ static void gabedit_xyplot_save_gabedit_parameters(GabeditXYPlot *xyplot, FILE* file) { GdkColor foreColor; GdkColor backColor; GdkGCValues gc_values; GdkColormap *colormap; colormap = gdk_window_get_colormap(GTK_WIDGET(xyplot)->window); gdk_gc_get_values(xyplot->back_gc, &gc_values); gdk_colormap_query_color(colormap, gc_values.foreground.pixel,&backColor); gdk_gc_get_values(xyplot->fore_gc, &gc_values); gdk_colormap_query_color(colormap, gc_values.foreground.pixel,&foreColor); fprintf(file,"theme %d %d %d %d %d %d %d\n", gc_values.line_width, (gint)foreColor.red, (gint)foreColor.green,(gint)foreColor.blue, (gint)backColor.red, (gint)backColor.green,(gint)backColor.blue); fprintf(file,"digits %d %d\n", xyplot->x_legends_digits, xyplot->y_legends_digits); fprintf(file,"ticks %d %d %d %d %d\n", xyplot->length_ticks, xyplot->hmajor_ticks, xyplot->hminor_ticks, xyplot->vmajor_ticks, xyplot->vminor_ticks); fprintf(file,"margins %d %d %d %d\n", xyplot->left_margins, xyplot->top_margins, xyplot->right_margins, xyplot->bottom_margins); fprintf(file,"grid %d %d %d %d\n", xyplot->hmajor_grid, xyplot->hminor_grid, xyplot->vmajor_grid, xyplot->vminor_grid); fprintf(file,"legends %d %d %d %d %d\n", xyplot->show_left_legends, xyplot->show_right_legends, xyplot->show_top_legends, xyplot->show_bottom_legends,xyplot->show_rectangle_legends); fprintf(file,"axes %d %d\n", xyplot->reflect_x, xyplot->reflect_y); fprintf(file,"fonts %d\n", xyplot->font_size); fprintf(file,"minmax %lf %lf %lf %lf\n", xyplot->xmin, xyplot->xmax, xyplot->ymin, xyplot->ymax); if(xyplot->h_label_str) { fprintf(file,"hlabel 1\n"); fprintf(file,"%s\n", xyplot->h_label_str); } else fprintf(file,"hlabel 0\n"); if(xyplot->v_label_str) { fprintf(file,"vlabel 1\n"); fprintf(file,"%s\n", xyplot->v_label_str); } else fprintf(file,"vlabel 0\n"); } /****************************************************************************************/ static void gabedit_xyplot_save_gabedit_data(XYPlotData* data, FILE* file) { gint i; fprintf(file,"dataline %lf %lf %lf %d %d\n", SCALE(data->line_color.red), SCALE(data->line_color.green), SCALE(data->line_color.blue), data->line_width, data->line_style); fprintf(file,"datapoint %lf %lf %lf %d %s\n", SCALE(data->point_color.red), SCALE(data->point_color.green), SCALE(data->point_color.blue), data->point_size, data->point_str); fprintf(file,"size %d\n", data->size); for(i=0;isize;i++) fprintf(file,"%lf %lf\n", data->x[i],data->y[i]); } /****************************************************************************************/ static void gabedit_xyplot_save_gabedit_datas(GabeditXYPlot *xyplot, FILE* file) { gint nDatas = 0; XYPlotData* data; GList *current_node=g_list_first(GABEDIT_XYPLOT(xyplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) nDatas++; fprintf(file,"ndatas %d\n",nDatas); if(nDatas<1) return; current_node=g_list_first(GABEDIT_XYPLOT(xyplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(XYPlotData*)current_node->data; gabedit_xyplot_save_gabedit_data(data, file); } } /****************************************************************************************/ static void gabedit_xyplot_save_gabedit(GtkWidget* xyplot, gchar* fileName) { FILE* file = fopen(fileName, "w"); if(!file) { GtkWidget* dialog = NULL; gchar* tmp = g_strdup_printf(_("Sorry, I cannot open %s file"),fileName); dialog = gtk_message_dialog_new_with_markup (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "%s",tmp); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); g_free(tmp); return; } fprintf(file,"[Gabedit format]\n"); fprintf(file,"[XYPLOT]\n"); gabedit_xyplot_save_gabedit_parameters(GABEDIT_XYPLOT(xyplot), file); gabedit_xyplot_save_gabedit_texts(GABEDIT_XYPLOT(xyplot), file); gabedit_xyplot_save_gabedit_lines(GABEDIT_XYPLOT(xyplot), file); gabedit_xyplot_save_gabedit_images(GABEDIT_XYPLOT(xyplot), file,fileName); gabedit_xyplot_save_gabedit_datas(GABEDIT_XYPLOT(xyplot), file); fclose(file); } /**************************************************************************/ static void saveAsGabedit(GtkFileChooser *SelecFile, gint response_id) { gchar *fileName; GtkWidget* xyplot = g_object_get_data (G_OBJECT (SelecFile), "XYPLOT"); if(response_id != GTK_RESPONSE_OK) return; if(!GABEDIT_IS_XYPLOT(xyplot)) return; fileName = gtk_file_chooser_get_filename(SelecFile); gabedit_xyplot_save_gabedit(xyplot, fileName); } /********************************************************************************/ static void saveAsGabeditDlg(GtkWidget* xyplot) { GtkFileFilter *filter; GtkWidget *dialog; GtkWidget *parentWindow; dialog = g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG, "action", GTK_FILE_CHOOSER_ACTION_SAVE, "file-system-backend", "gtk+", "select-multiple", FALSE, NULL); gtk_window_set_title (GTK_WINDOW (dialog), _("Save as Gabedit format")); gtk_dialog_add_buttons (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_OK, NULL); filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, "*.gab"); gtk_file_filter_add_pattern (filter, "*.gab"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); g_signal_connect (dialog, "response", G_CALLBACK (saveAsGabedit),GTK_OBJECT(dialog)); g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy),GTK_OBJECT(dialog)); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog),"xyplot.gab"); g_object_set_data (G_OBJECT (dialog), "XYPLOT",xyplot); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); parentWindow = get_parent_window(GTK_WIDGET(xyplot)); if(parentWindow) gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(parentWindow)); gtk_widget_show(dialog); } /****************************************************************************************/ static gboolean gabedit_xyplot_read_gabedit_lines(GabeditXYPlot *xyplot, FILE* file) { gint i; gchar t[BSIZE]; gchar tmp[BSIZE]; gint style; if(xyplot->objectsLine) { g_free(xyplot->objectsLine); xyplot->objectsLine = NULL; } if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d\n", tmp, &xyplot->nObjectsLine); if(xyplot->nObjectsLine>0) xyplot->objectsLine = g_malloc(xyplot->nObjectsLine*sizeof(XYPlotObjectLine)); for(i=0;inObjectsLine;i++) { gdouble r,g,b; if(!fgets(t,BSIZE,file)) { xyplot->nObjectsLine= 0; g_free(xyplot->objectsLine); xyplot->objectsLine = NULL; xyplot->nObjectsLine = 0; return FALSE; } sscanf(t,"%lf %lf %lf %lf %d %d %lf %lf %lf %d\n", &xyplot->objectsLine[i].x1, &xyplot->objectsLine[i].y1, &xyplot->objectsLine[i].x2, &xyplot->objectsLine[i].y2, &xyplot->objectsLine[i].width, &xyplot->objectsLine[i].arrow_size, &r,&g,&b, &style ); xyplot->objectsLine[i].style = style; xyplot->objectsLine[i].color.red=SCALE2(r); xyplot->objectsLine[i].color.green=SCALE2(g); xyplot->objectsLine[i].color.blue=SCALE2(b); } reset_object_line_pixels(xyplot); return TRUE; } /****************************************************************************************/ static gboolean gabedit_xyplot_read_gabedit_texts(GabeditXYPlot *xyplot, FILE* file) { gint i; gchar t[BSIZE]; gchar tmp[BSIZE]; if(xyplot->objectsText) { for(i=0;inObjectsText;i++) { if(xyplot->objectsText[i].str) g_free(xyplot->objectsText[i].str); if(xyplot->objectsText[i].pango) g_object_unref(xyplot->objectsText[i].pango); } g_free(xyplot->objectsText); xyplot->objectsText = NULL; xyplot->nObjectsText = 0; } if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d\n", tmp, &xyplot->nObjectsText); if(xyplot->nObjectsText>0) { xyplot->objectsText = g_malloc(xyplot->nObjectsText*sizeof(XYPlotObjectText)); for(i=0;inObjectsText;i++) xyplot->objectsText[i].str = NULL; } for(i=0;inObjectsText;i++) { if(!fgets(t,BSIZE,file)) { for(i=0;inObjectsText;i++) if(xyplot->objectsText[i].str) g_free(xyplot->objectsText[i].str); xyplot->nObjectsText= 0; g_free(xyplot->objectsText); xyplot->objectsText = NULL; return FALSE; } sscanf(t,"%lf %lf %lf", &xyplot->objectsText[i].x, &xyplot->objectsText[i].y,&xyplot->objectsText[i].angle); if(fgets(t,BSIZE,file)) { gint j; for(j=0;jobjectsText[i].str= g_strdup(t); for(j=strlen(t);j>=0;j--) if(t[j]==' ') t[j] = '\0'; } else xyplot->objectsText[i].str = g_strdup(" "); } for(i=0;inObjectsText;i++) { set_object_text_pango(xyplot, &xyplot->objectsText[i]); set_object_text_pixels(xyplot, &xyplot->objectsText[i]); } return TRUE; } /****************************************************************************************/ static gboolean gabedit_xyplot_read_gabedit_images(GabeditXYPlot *xyplot, FILE* file) { gint i; gchar t[BSIZE]; gchar tmp[BSIZE]; if(xyplot->objectsImage) { for(i=0;inObjectsImage;i++) { if(xyplot->objectsImage[i].fileName) g_free(xyplot->objectsImage[i].fileName); if(xyplot->objectsImage[i].image) cairo_surface_destroy (xyplot->objectsImage[i].image); } g_free(xyplot->objectsImage); xyplot->objectsImage = NULL; xyplot->nObjectsImage = 0; } if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d\n", tmp, &xyplot->nObjectsImage); if(xyplot->nObjectsImage>0) { xyplot->objectsImage = g_malloc(xyplot->nObjectsImage*sizeof(XYPlotObjectImage)); for(i=0;inObjectsImage;i++) xyplot->objectsImage[i].fileName = NULL; for(i=0;inObjectsImage;i++) xyplot->objectsImage[i].image = NULL; } for(i=0;inObjectsImage;i++) { gdouble x,y,w,h; if(!fgets(t,BSIZE,file)) { for(i=0;inObjectsImage;i++) if(xyplot->objectsImage[i].fileName) g_free(xyplot->objectsImage[i].fileName); xyplot->nObjectsImage= 0; g_free(xyplot->objectsImage); xyplot->objectsImage = NULL; return FALSE; } sscanf(t,"%lf %lf %lf %lf", &x, &y, &w, &h); xyplot->objectsImage[i].x = x; xyplot->objectsImage[i].y = y; xyplot->objectsImage[i].width = w; xyplot->objectsImage[i].height = h; if(fgets(t,BSIZE,file)) { gint j; gint len; len = strlen(t); for(j=0;j=0;j--) if(t[j]==' ') t[j] = '\0'; xyplot->objectsImage[i].fileName= g_strdup(t); } else xyplot->objectsImage[i].fileName = g_strdup(" "); } for(i=0;inObjectsImage;i++) { xyplot->objectsImage[i].image = cairo_image_surface_create_from_png (xyplot->objectsImage[i].fileName); if(!xyplot->objectsImage[i].image) { printf("I cannot read %s png file\n",xyplot->objectsImage[i].fileName); } } reset_object_image_pixels(xyplot); return TRUE; } /****************************************************************************************/ static gboolean gabedit_xyplot_read_gabedit_parameters(GabeditXYPlot *xyplot, FILE* file) { gchar tmp[BSIZE]; gchar t[BSIZE]; gint i; gint r1, g1, b1; gint r2, g2, b2; GdkColor foreColor; GdkColor backColor; gint line_width; if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d %d %d %d %d %d %d", tmp, &line_width, &r1, &g1, &b1, &r2, &g2, &b2); foreColor.red = (gushort)r1; foreColor.green = (gushort)g1; foreColor.blue = (gushort)b1; backColor.red = (gushort)r2; backColor.green = (gushort)g2; backColor.blue = (gushort)b2; if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d %d", tmp, &xyplot->x_legends_digits, &xyplot->y_legends_digits); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d %d %d %d %d", tmp, &xyplot->length_ticks, &xyplot->hmajor_ticks, &xyplot->hminor_ticks, &xyplot->vmajor_ticks, &xyplot->vminor_ticks); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d %d %d %d", tmp, &xyplot->left_margins, &xyplot->top_margins, &xyplot->right_margins, &xyplot->bottom_margins); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d %d %d %d", tmp, &xyplot->hmajor_grid, &xyplot->hminor_grid, &xyplot->vmajor_grid, &xyplot->vminor_grid); gabedit_xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_HMAJOR_GRID, xyplot->hmajor_grid); gabedit_xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_HMINOR_GRID, xyplot->hminor_grid); gabedit_xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_VMAJOR_GRID, xyplot->vmajor_grid); gabedit_xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_VMINOR_GRID, xyplot->vminor_grid); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d %d %d %d %d", tmp, &xyplot->show_left_legends, &xyplot->show_right_legends, &xyplot->show_top_legends, &xyplot->show_bottom_legends,&xyplot->show_rectangle_legends); gabedit_xyplot_show_left_legends (GABEDIT_XYPLOT(xyplot), xyplot->show_left_legends); gabedit_xyplot_show_right_legends (GABEDIT_XYPLOT(xyplot), xyplot->show_right_legends); gabedit_xyplot_show_top_legends (GABEDIT_XYPLOT(xyplot), xyplot->show_top_legends); gabedit_xyplot_show_bottom_legends (GABEDIT_XYPLOT(xyplot), xyplot->show_bottom_legends); gabedit_xyplot_show_rectangle_legends (GABEDIT_XYPLOT(xyplot), xyplot->show_rectangle_legends); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d %d", tmp, &xyplot->reflect_x, &xyplot->reflect_y); gabedit_xyplot_reflect_x (GABEDIT_XYPLOT(xyplot), xyplot->reflect_x); gabedit_xyplot_reflect_y (GABEDIT_XYPLOT(xyplot), xyplot->reflect_y); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d", tmp, &xyplot->font_size); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %lf %lf %lf %lf", tmp, &xyplot->xmin, &xyplot->xmax, &xyplot->ymin, &xyplot->ymax); if(xyplot->h_label_str) g_free(xyplot->h_label_str); if(xyplot->v_label_str) g_free(xyplot->v_label_str); xyplot->h_label_str = NULL; xyplot->v_label_str = NULL; if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d",tmp,&i); if(i!=0) { gint j; if(!fgets(t,BSIZE,file)) return FALSE; for(j=0;jh_label_str = g_strdup(t); } if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d",tmp,&i); if(i!=0) { gint j; if(!fgets(t,BSIZE,file)) return FALSE; for(j=0;jv_label_str = g_strdup(t); } xyplot_build_legends(xyplot); xyplot_calculate_legends_sizes(xyplot); xyplot_calculate_sizes(xyplot); reset_theme(GTK_WIDGET(xyplot), line_width, &foreColor, &backColor); return TRUE; } /****************************************************************************************/ static gboolean gabedit_xyplot_read_gabedit_data(XYPlotData* data, FILE* file) { gint i; gchar tmp[BSIZE]; gchar t[BSIZE]; gdouble r,g,b; gint style; data->size = 0; data->x = NULL; data->y = NULL; if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %lf %lf %lf %d %d", tmp, &r,&g,&b, &data->line_width, &style); data->line_style = style; data->line_color.red = SCALE2(r); data->line_color.green = SCALE2(g); data->line_color.blue = SCALE2(b); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %lf %lf %lf %d %s", tmp, &r,&g,&b, &data->point_size, data->point_str); data->point_color.red = SCALE2(r); data->point_color.green = SCALE2(g); data->point_color.blue = SCALE2(b); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d", tmp, &data->size); if(data->size<1) return TRUE; data->x = g_malloc(data->size*sizeof(gdouble)); data->y = g_malloc(data->size*sizeof(gdouble)); for(i=0;isize;i++) { if(!fgets(t,BSIZE,file)) { data->size = 0; if(data->x) g_free(data->x); if(data->y) g_free(data->y); data->x = NULL; data->y = NULL; return FALSE; } sscanf(t,"%lf %lf", &data->x[i],&data->y[i]); } return TRUE; } /****************************************************************************************/ static gboolean gabedit_xyplot_read_gabedit_datas(GabeditXYPlot *xyplot, FILE* file) { gint nDatas = 0; gchar tmp[BSIZE]; gchar t[BSIZE]; gint i; if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d",tmp, &nDatas); if(nDatas<1) return TRUE; if(GABEDIT_XYPLOT(xyplot)->data_list) { g_list_foreach(GABEDIT_XYPLOT(xyplot)->data_list, (GFunc)g_free, NULL); g_list_free(GABEDIT_XYPLOT(xyplot)->data_list); GABEDIT_XYPLOT(xyplot)->data_list = NULL; } for(i=0;iallocation.width, widget->allocation.height); xyplot->cairo_export = cairo_create(surface); force_expose(widget); cairo_show_page(xyplot->cairo_export); cairo_surface_destroy(surface); cairo_destroy(xyplot->cairo_export); xyplot->cairo_export = NULL; return; } else if(!strcmp(fileType,"ps")) { cairo_surface_t *surface; surface = cairo_ps_surface_create(fileName, widget->allocation.width, widget->allocation.height); xyplot->cairo_export = cairo_create(surface); force_expose(widget); cairo_show_page(xyplot->cairo_export); cairo_surface_destroy(surface); cairo_destroy(xyplot->cairo_export); xyplot->cairo_export = NULL; return; } else if(!strcmp(fileType,"eps")) { cairo_surface_t *surface; surface = cairo_ps_surface_create(fileName, widget->allocation.width, widget->allocation.height); cairo_ps_surface_set_eps(surface, TRUE); xyplot->cairo_export = cairo_create(surface); force_expose(widget); cairo_show_page(xyplot->cairo_export); cairo_surface_destroy(surface); cairo_destroy(xyplot->cairo_export); xyplot->cairo_export = NULL; return; } else if(!strcmp(fileType,"svg")) { cairo_surface_t *surface; surface = cairo_svg_surface_create(fileName, widget->allocation.width, widget->allocation.height); xyplot->cairo_export = cairo_create(surface); force_expose(widget); cairo_show_page(xyplot->cairo_export); cairo_surface_destroy(surface); cairo_destroy(xyplot->cairo_export); xyplot->cairo_export = NULL; return; } } /**************************************************************************/ static void exportImage(GtkFileChooser *SelecFile, gint response_id) { gchar *fileName; GtkWidget* xyplot = g_object_get_data (G_OBJECT (SelecFile), "XYPLOT"); gchar* type = g_object_get_data (G_OBJECT (SelecFile), "ImageType"); if(response_id != GTK_RESPONSE_OK) return; fileName = gtk_file_chooser_get_filename(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); Waiting(1.0); if(!GABEDIT_IS_XYPLOT(xyplot)) return; gtk_widget_hide(xyplot); gtk_widget_show(xyplot); while( gtk_events_pending() ) gtk_main_iteration(); gabedit_xyplot_export(GABEDIT_XYPLOT(xyplot), fileName, type); } /********************************************************************************/ static void exportImageDlg(GtkWidget* xyplot, gchar* type) { GtkFileFilter *filter; GtkWidget *dialog; gchar* tmp = NULL; GtkWidget *parentWindow; dialog = g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG, "action", GTK_FILE_CHOOSER_ACTION_SAVE, "file-system-backend", "gtk+", "select-multiple", FALSE, NULL); gtk_window_set_title (GTK_WINDOW (dialog), _("Export XY plot")); gtk_dialog_add_buttons (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_OK, NULL); filter = gtk_file_filter_new (); tmp = g_strdup_printf("*.%s",type); gtk_file_filter_set_name (filter, tmp); gtk_file_filter_add_pattern (filter, tmp); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); g_free(tmp); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); g_signal_connect (dialog, "response", G_CALLBACK (exportImage),GTK_OBJECT(dialog)); g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy),GTK_OBJECT(dialog)); g_object_set_data(G_OBJECT (dialog), "ImageType", type); tmp = g_strdup_printf("gabeditExport.%s",type); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog),tmp); g_free(tmp); g_object_set_data (G_OBJECT (dialog), "XYPLOT",xyplot); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); parentWindow = get_parent_window(GTK_WIDGET(xyplot)); if(parentWindow) gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(parentWindow)); gtk_widget_show(dialog); } /****************************************************************************************/ static void spin_line_width_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotData* data = g_object_get_data(G_OBJECT (spinbutton), "CurentData"); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if(data) data->line_width = gtk_spin_button_get_value(spinbutton); else { GList *current_node; current_node=g_list_first(GABEDIT_XYPLOT(xyplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(XYPlotData*)current_node->data; data->line_width = gtk_spin_button_get_value(spinbutton); } } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /****************************************************************************************/ static void spin_line_color_changed_value(GtkColorButton *colorbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotData* data = g_object_get_data(G_OBJECT (colorbutton), "CurentData"); GdkColor c; gtk_color_button_get_color (colorbutton, &c); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if(data) data->line_color = c; else { GList *current_node; current_node=g_list_first(GABEDIT_XYPLOT(xyplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(XYPlotData*)current_node->data; data->line_color = c; } } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /********************************************************************************************************/ static void combo_line_style_changed_value (GtkComboBox *combobox, gpointer user_data) { GtkTreeIter iter; gchar* d = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotData* data = g_object_get_data(G_OBJECT (combobox), "CurentData"); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); gtk_tree_model_get (model, &iter, 0, &d, -1); if(!d) return; if(data) { if (!strcmp(d,"Solid") ) { data->line_style = GDK_LINE_SOLID; } else if (!strcmp(d,"On-Off dashed") ) {data->line_style = GDK_LINE_ON_OFF_DASH; } else if (!strcmp(d,"Double dashed") ) { data->line_style = GDK_LINE_DOUBLE_DASH;} } else { GList *current_node; current_node=g_list_first(GABEDIT_XYPLOT(xyplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(XYPlotData*)current_node->data; if (!strcmp(d,"Solid") ) { data->line_style = GDK_LINE_SOLID; } else if (!strcmp(d,"On-Off dashed") ) {data->line_style = GDK_LINE_ON_OFF_DASH; } else if (!strcmp(d,"Double dashed") ) { data->line_style = GDK_LINE_DOUBLE_DASH;} } } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /****************************************************************************************/ static void spin_point_size_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotData* data = g_object_get_data(G_OBJECT (spinbutton), "CurentData"); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if(data) { data->point_size = gtk_spin_button_get_value(spinbutton); xyplot_build_points_data(GABEDIT_XYPLOT(xyplot), data); } else { GList *current_node; current_node=g_list_first(GABEDIT_XYPLOT(xyplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(XYPlotData*)current_node->data; data->point_size = gtk_spin_button_get_value(spinbutton); xyplot_build_points_data(GABEDIT_XYPLOT(xyplot), data); } } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /********************************************************************************************************/ static void combo_point_style_changed_value (GtkComboBox *combobox, gpointer user_data) { GtkTreeIter iter; gchar* d = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotData* data = g_object_get_data(G_OBJECT (combobox), "CurentData"); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); gtk_tree_model_get (model, &iter, 0, &d, -1); if(!d) return; if(data) { sprintf(data->point_str,"%s",d); xyplot_build_points_data(GABEDIT_XYPLOT(xyplot), data); } else { GList *current_node; current_node=g_list_first(GABEDIT_XYPLOT(xyplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(XYPlotData*)current_node->data; sprintf(data->point_str,"%s",d); xyplot_build_points_data(GABEDIT_XYPLOT(xyplot), data); } } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /****************************************************************************************/ static void spin_point_color_changed_value(GtkColorButton *colorbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotData* data = g_object_get_data(G_OBJECT (colorbutton), "CurentData"); GdkColor c; g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); gtk_color_button_get_color (colorbutton, &c); if(data) { data->point_color = c; xyplot_build_points_data(GABEDIT_XYPLOT(xyplot), data); } else { GList *current_node; current_node=g_list_first(GABEDIT_XYPLOT(xyplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(XYPlotData*)current_node->data; data->point_color = c; xyplot_build_points_data(GABEDIT_XYPLOT(xyplot), data); } } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /********************************************************************************************************/ static GtkWidget *add_point_types_combo(GtkWidget *hbox, XYPlotData* data) { GtkTreeIter iter; GtkTreeStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; gint i = 0; gint k = 0; /* 0x2605=star, 25C6=BLACK DIAMOND, 0x25B2= black triangle, 0x25B3=white triangle */ /* long int x =0x2605; printf("%d\n",x) in decimal*/ gchar* list [] = {"","+","x", "", "", "", "", "", "", "", "", "", "", "." }; gint n = G_N_ELEMENTS (list); store = gtk_tree_store_new (1,G_TYPE_STRING); for(i=0;ipoint_str)) k = i; } model = GTK_TREE_MODEL (store); combobox = gtk_combo_box_new_with_model (model); g_object_unref (model); gtk_box_pack_start (GTK_BOX (hbox), combobox, TRUE, TRUE, 1); renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "markup", 0, NULL); gtk_widget_show(combobox); gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), k); return combobox; } /********************************************************************************************************/ static GtkWidget *add_line_types_combo(GtkWidget *hbox) { GtkTreeIter iter; GtkTreeStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; store = gtk_tree_store_new (1,G_TYPE_STRING); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Solid", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "On-Off dashed", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Double dashed", -1); model = GTK_TREE_MODEL (store); combobox = gtk_combo_box_new_with_model (model); g_object_unref (model); gtk_box_pack_start (GTK_BOX (hbox), combobox, TRUE, TRUE, 1); renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", 0, NULL); return combobox; } /****************************************************************************************/ static gdouble evaluate_formula(G_CONST_RETURN gchar* t) { gdouble a = 1.0; gchar* pos = strstr(t,"/"); if(pos && pos[1]!='\0') a = atof(t)/atof(pos+1); else { pos = strstr(t,"*"); if(pos && pos[1]!='\0') a = atof(t)*atof(pos+1); else a = atof(t); } return a; } /****************************************************************************************/ static void activate_entry_scale_x(GtkEntry *entry, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotData* data = g_object_get_data(G_OBJECT (entry), "CurentData"); gint loop; gdouble a; G_CONST_RETURN gchar* t; g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); t= gtk_entry_get_text(GTK_ENTRY(entry)); if(!t) return; a = evaluate_formula(t); if(data) for(loop=0;loopsize; loop++) data->x[loop] *= a; else { GList *current_node; current_node=g_list_first(GABEDIT_XYPLOT(xyplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(XYPlotData*)current_node->data; for(loop=0;loopsize; loop++) data->x[loop] *= a; } } gtk_entry_set_text(GTK_ENTRY(entry),"1.0"); gtk_editable_set_position(GTK_EDITABLE(entry),3); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /****************************************************************************************/ static void activate_entry_scale_y(GtkEntry *entry, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotData* data = g_object_get_data(G_OBJECT (entry), "CurentData"); gint loop; gdouble a; G_CONST_RETURN gchar* t; g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); t= gtk_entry_get_text(GTK_ENTRY(entry)); if(!t) return; a = evaluate_formula(t); if(data) for(loop=0;loopsize; loop++) data->y[loop] *= a; else { GList *current_node; current_node=g_list_first(GABEDIT_XYPLOT(xyplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(XYPlotData*)current_node->data; for(loop=0;loopsize; loop++) data->y[loop] *= a; } } gtk_entry_set_text(GTK_ENTRY(entry),"1.0"); gtk_editable_set_position(GTK_EDITABLE(entry),3); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /****************************************************************************************/ static void activate_entry_shift_x(GtkEntry *entry, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotData* data = g_object_get_data(G_OBJECT (entry), "CurentData"); gint loop; gdouble a; G_CONST_RETURN gchar* t; g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); t= gtk_entry_get_text(GTK_ENTRY(entry)); if(!t) return; a = evaluate_formula(t); if(data) for(loop=0;loopsize; loop++) data->x[loop] += a; else { GList *current_node; current_node=g_list_first(GABEDIT_XYPLOT(xyplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(XYPlotData*)current_node->data; for(loop=0;loopsize; loop++) data->x[loop] += a; } } gtk_entry_set_text(GTK_ENTRY(entry),"0.0"); gtk_editable_set_position(GTK_EDITABLE(entry),3); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /****************************************************************************************/ static void activate_entry_shift_y(GtkEntry *entry, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotData* data = g_object_get_data(G_OBJECT (entry), "CurentData"); gint loop; gdouble a; G_CONST_RETURN gchar* t; g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); t= gtk_entry_get_text(GTK_ENTRY(entry)); if(!t) return; a = evaluate_formula(t); if(data) for(loop=0;loopsize; loop++) data->y[loop] += a; else { GList *current_node; current_node=g_list_first(GABEDIT_XYPLOT(xyplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(XYPlotData*)current_node->data; for(loop=0;loopsize; loop++) data->y[loop] += a; } } gtk_entry_set_text(GTK_ENTRY(entry),"0.0"); gtk_editable_set_position(GTK_EDITABLE(entry),3); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /****************************************************************************************/ static void build_filter(GtkWidget* buttonFilter, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { gdouble sigma = 10.0; G_CONST_RETURN gchar* t; GtkWidget* xyplot = GTK_WIDGET(user_data); XYPlotData* data = g_object_get_data(G_OBJECT (xyplot), "CurentData"); GtkWidget* parentWindow = ( GtkWidget*) g_object_get_data(G_OBJECT (buttonFilter), "ParentWindow"); GtkWidget* entry_sigma = ( GtkWidget*) g_object_get_data(G_OBJECT (xyplot), "EntrySigma"); GtkWidget* popup = NULL; GtkComboBox *combo_filter = ( GtkComboBox*) g_object_get_data(G_OBJECT (xyplot), "ComboFilter"); GtkTreeIter iter; gchar* filter = NULL; g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); g_return_if_fail (GTK_IS_ENTRY (entry_sigma)); if(parentWindow) gtk_widget_hide (GTK_WIDGET(parentWindow)); while(gtk_events_pending()) gtk_main_iteration(); popup = create_popup_win(_("Please wait")); if (gtk_combo_box_get_active_iter (combo_filter, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combo_filter); gtk_tree_model_get (model, &iter, 0, &filter, -1); } if(filter && strstr(filter,"Gaussian")) { t= gtk_entry_get_text(GTK_ENTRY(entry_sigma)); sigma = atof(t); if(sigma==0) sigma = 1; sigma *=0.5; } if(data && data->size>2 && data->x && data->y) { gdouble* X = g_malloc(data->size*sizeof(gdouble)); gdouble* Y = g_malloc(data->size*sizeof(gdouble)); gint i; GtkWidget* window = NULL; GtkWidget* xyplot = NULL; gint N = data->size; gdouble xmin; gdouble xmax; gdouble* x = NULL; gdouble* y = NULL; gdouble xm = 0.0; x = data->x; y = data->y; xmin = x[0]; xmax = x[0]; for(i=0;ix[i]) xmin = x[i]; if(xmaxline_width); gtk_box_pack_start(GTK_BOX(hbox), spin, TRUE, FALSE, 2); gtk_widget_show(spin); g_object_set_data(G_OBJECT (window), "SpinLineWidth", spin); label=gtk_label_new(_("Line type :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); combo = add_line_types_combo(hbox); gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); if(data->line_style == GDK_LINE_SOLID) gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); else if(data->line_style == GDK_LINE_ON_OFF_DASH) gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 1); else if(data->line_style == GDK_LINE_DOUBLE_DASH) gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 2); gtk_widget_show(combo); g_object_set_data(G_OBJECT (window), "ComboLineType", combo); label=gtk_label_new(_("Line color :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); button = gtk_color_button_new_with_color (&data->line_color); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 2); gtk_widget_show(button); g_object_set_data(G_OBJECT (window), "ColorButton", button); frame = gtk_frame_new(_("Set point type")); gtk_box_pack_start(GTK_BOX(vbox_window), frame, TRUE, FALSE, 2); gtk_widget_show(frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Point size :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_point = gtk_spin_button_new_with_range(0, 30, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_point), data->point_size); gtk_box_pack_start(GTK_BOX(hbox), spin_point, TRUE, FALSE, 2); gtk_widget_show(spin_point); g_object_set_data(G_OBJECT (window), "SpinPointWidth", spin_point); label=gtk_label_new(_("Point type :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); combo_point = add_point_types_combo(hbox, data); gtk_widget_show(combo_point); g_object_set_data(G_OBJECT (window), "ComboPointType", combo_point); label=gtk_label_new(_("Point color :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); button_point = gtk_color_button_new_with_color (&data->point_color); gtk_box_pack_start(GTK_BOX(hbox), button_point, TRUE, FALSE, 2); gtk_widget_show(button_point); g_object_set_data(G_OBJECT (window), "ColorButton", button_point); frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(vbox_window), frame, TRUE, FALSE, 2); gtk_widget_show(frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Scale X : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_scale_x = gtk_entry_new(); gtk_widget_set_size_request(entry_scale_x,50,-1); gtk_entry_set_text(GTK_ENTRY(entry_scale_x),"1.0"); gtk_box_pack_start(GTK_BOX(hbox), entry_scale_x, FALSE, FALSE, 2); gtk_widget_show(entry_scale_x); label=gtk_label_new(_("Scale Y : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_scale_y = gtk_entry_new(); gtk_widget_set_size_request(entry_scale_y,50,-1); gtk_entry_set_text(GTK_ENTRY(entry_scale_y),"1.0"); gtk_box_pack_start(GTK_BOX(hbox), entry_scale_y, FALSE, FALSE, 2); gtk_widget_show(entry_scale_y); label=gtk_label_new(_("Shift X : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_shift_x = gtk_entry_new(); gtk_widget_set_size_request(entry_shift_x,50,-1); gtk_entry_set_text(GTK_ENTRY(entry_shift_x),"0.0"); gtk_box_pack_start(GTK_BOX(hbox), entry_shift_x, FALSE, FALSE, 2); gtk_widget_show(entry_shift_x); label=gtk_label_new(_("Shift Y : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_shift_y = gtk_entry_new(); gtk_widget_set_size_request(entry_shift_y,50,-1); gtk_entry_set_text(GTK_ENTRY(entry_shift_y),"0.0"); gtk_box_pack_start(GTK_BOX(hbox), entry_shift_y, FALSE, FALSE, 2); gtk_widget_show(entry_shift_y); frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(vbox_window), frame, TRUE, FALSE, 2); gtk_widget_show(frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_widget_show(hbox); buttonAutoRanges = gtk_button_new_with_label (_("Auto ranges")); gtk_box_pack_start(GTK_BOX(hbox), buttonAutoRanges, TRUE, TRUE, 4); gtk_widget_show (buttonAutoRanges); buttonAutoRangesAll = gtk_button_new_with_label (_("Auto ranges all")); gtk_box_pack_start(GTK_BOX(hbox), buttonAutoRangesAll, TRUE, TRUE, 4); gtk_widget_show (buttonAutoRangesAll); buttonSave = gtk_button_new_with_label (_("Save")); gtk_box_pack_start(GTK_BOX(hbox), buttonSave, TRUE, TRUE, 4); gtk_widget_show (buttonSave); buttonMax1 = gtk_button_new_with_label (_("Max=1")); gtk_box_pack_start(GTK_BOX(hbox), buttonMax1, TRUE, TRUE, 4); gtk_widget_show (buttonMax1); buttonRemove = gtk_button_new_with_label (_("Remove")); gtk_box_pack_start(GTK_BOX(hbox), buttonRemove, TRUE, TRUE, 4); gtk_widget_show (buttonRemove); g_object_set_data(G_OBJECT (spin), "CurentData", data); g_signal_connect(G_OBJECT(spin), "value-changed", G_CALLBACK(spin_line_width_changed_value), xyplot); g_object_set_data(G_OBJECT (button), "CurentData", data); g_signal_connect(G_OBJECT(button), "color-set", G_CALLBACK(spin_line_color_changed_value), xyplot); g_signal_connect(G_OBJECT(combo), "changed", G_CALLBACK(combo_line_style_changed_value), xyplot); g_object_set_data(G_OBJECT (combo), "CurentData", data); g_signal_connect(G_OBJECT(combo_point), "changed", G_CALLBACK(combo_point_style_changed_value), xyplot); g_object_set_data(G_OBJECT (combo_point), "CurentData", data); g_object_set_data(G_OBJECT (spin_point), "CurentData", data); g_signal_connect(G_OBJECT(spin_point), "value-changed", G_CALLBACK(spin_point_size_changed_value), xyplot); g_object_set_data(G_OBJECT (button_point), "CurentData", data); g_signal_connect(G_OBJECT(button_point), "color-set", G_CALLBACK(spin_point_color_changed_value), xyplot); g_object_set_data(G_OBJECT (buttonSave), "CurentData", data); g_signal_connect(G_OBJECT(buttonSave), "clicked", G_CALLBACK(save_data_2columns_dlg), xyplot); g_object_set_data(G_OBJECT (buttonRemove), "CurentData", data); g_object_set_data(G_OBJECT (buttonRemove), "Window", window); g_object_set_data(G_OBJECT (buttonRemove), "XYPLOT", xyplot); g_signal_connect(G_OBJECT(buttonRemove), "clicked", G_CALLBACK(remove_data_dlg), xyplot); g_object_set_data(G_OBJECT (buttonAutoRanges), "CurentData", data); g_signal_connect(G_OBJECT(buttonAutoRanges), "clicked", G_CALLBACK(auto_range_activate), xyplot); g_object_set_data(G_OBJECT (buttonMax1), "CurentData", data); g_signal_connect(G_OBJECT(buttonMax1), "clicked", G_CALLBACK(set_max_1_activate), xyplot); g_object_set_data(G_OBJECT (buttonAutoRangesAll), "CurentData", NULL); g_signal_connect(G_OBJECT(buttonAutoRangesAll), "clicked", G_CALLBACK(auto_range_activate), xyplot); g_object_set_data(G_OBJECT (entry_scale_x), "CurentData", data); g_object_set_data(G_OBJECT (entry_scale_y), "CurentData", data); g_object_set_data(G_OBJECT (entry_shift_x), "CurentData", data); g_object_set_data(G_OBJECT (entry_shift_y), "CurentData", data); g_signal_connect (G_OBJECT (entry_scale_x), "activate", (GCallback)activate_entry_scale_x, xyplot); g_signal_connect (G_OBJECT (entry_scale_y), "activate", (GCallback)activate_entry_scale_y, xyplot); g_signal_connect (G_OBJECT (entry_shift_x), "activate", (GCallback)activate_entry_shift_x, xyplot); g_signal_connect (G_OBJECT (entry_shift_y), "activate", (GCallback)activate_entry_shift_y, xyplot); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_window), hbox, TRUE, FALSE, 2); gtk_widget_show(hbox); add_cut_data_frame(hbox, GTK_WIDGET(xyplot), data); add_x_linear_data_frame(hbox, GTK_WIDGET(xyplot), data); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_window), hbox, TRUE, FALSE, 2); gtk_widget_show(hbox); add_filter_data_frame(hbox, GTK_WIDGET(xyplot), data, window); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_window), hbox, TRUE, FALSE, 2); gtk_widget_show(hbox); add_fourier_data_frame(hbox, GTK_WIDGET(xyplot), data, window); parentWindow = get_parent_window(GTK_WIDGET(xyplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); /* list_utf8();*/ } /****************************************************************************************/ static void set_all_data_dlg(GtkWidget* xyplot) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* frame = NULL; GtkWidget* hbox = NULL; GtkWidget* hbox1 = NULL; GtkWidget* label = NULL; GtkWidget* combo = NULL; GtkWidget* combo_point = NULL; GtkWidget* spin = NULL; GtkWidget* button = NULL; GtkWidget* spin_point = NULL; GtkWidget* button_point = NULL; GtkWidget* buttonAutoRangesAll = NULL; GtkWidget* parentWindow = NULL; GtkWidget* vbox_window = NULL; GtkWidget* entry_scale_x = NULL; GtkWidget* entry_scale_y = NULL; GtkWidget* entry_shift_x = NULL; GtkWidget* entry_shift_y = NULL; GList *current_node; XYPlotData* data=NULL; g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); current_node=g_list_first(GABEDIT_XYPLOT(xyplot)->data_list); if(!current_node) return; data=(XYPlotData*)current_node->data; if(!data) return; gtk_window_set_title (GTK_WINDOW (window), _("Set all data")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(destroy_data_dialog), (gpointer)xyplot); vbox_window=gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox_window); gtk_widget_show(vbox_window); hbox1=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_window), hbox1, TRUE, FALSE, 2); gtk_widget_show(hbox1); frame = gtk_frame_new(_("Set line type")); gtk_box_pack_start(GTK_BOX(hbox1), frame, TRUE, FALSE, 2); gtk_widget_show(frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Line width :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin = gtk_spin_button_new_with_range(0, 10, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), data->line_width); gtk_box_pack_start(GTK_BOX(hbox), spin, TRUE, FALSE, 2); gtk_widget_show(spin); g_object_set_data(G_OBJECT (window), "SpinLineWidth", spin); label=gtk_label_new(_("Line type :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); combo = add_line_types_combo(hbox); gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); if(data->line_style == GDK_LINE_SOLID) gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); else if(data->line_style == GDK_LINE_ON_OFF_DASH) gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 1); else if(data->line_style == GDK_LINE_DOUBLE_DASH) gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 2); gtk_widget_show(combo); g_object_set_data(G_OBJECT (window), "ComboLineType", combo); label=gtk_label_new(_("Line color :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); button = gtk_color_button_new_with_color (&data->line_color); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 2); gtk_widget_show(button); g_object_set_data(G_OBJECT (window), "ColorButton", button); frame = gtk_frame_new(_("Set point type")); gtk_box_pack_start(GTK_BOX(vbox_window), frame, TRUE, FALSE, 2); gtk_widget_show(frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Point size :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_point = gtk_spin_button_new_with_range(0, 30, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_point), data->point_size); gtk_box_pack_start(GTK_BOX(hbox), spin_point, TRUE, FALSE, 2); gtk_widget_show(spin_point); g_object_set_data(G_OBJECT (window), "SpinPointWidth", spin_point); label=gtk_label_new(_("Point type :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); combo_point = add_point_types_combo(hbox, data); gtk_widget_show(combo_point); g_object_set_data(G_OBJECT (window), "ComboPointType", combo_point); label=gtk_label_new(_("Point color :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); button_point = gtk_color_button_new_with_color (&data->point_color); gtk_box_pack_start(GTK_BOX(hbox), button_point, TRUE, FALSE, 2); gtk_widget_show(button_point); g_object_set_data(G_OBJECT (window), "ColorButton", button_point); frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(vbox_window), frame, TRUE, FALSE, 2); gtk_widget_show(frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Scale X : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_scale_x = gtk_entry_new(); gtk_widget_set_size_request(entry_scale_x,50,-1); gtk_entry_set_text(GTK_ENTRY(entry_scale_x),"1.0"); gtk_box_pack_start(GTK_BOX(hbox), entry_scale_x, FALSE, FALSE, 2); gtk_widget_show(entry_scale_x); label=gtk_label_new(_("Scale Y : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_scale_y = gtk_entry_new(); gtk_widget_set_size_request(entry_scale_y,50,-1); gtk_entry_set_text(GTK_ENTRY(entry_scale_y),"1.0"); gtk_box_pack_start(GTK_BOX(hbox), entry_scale_y, FALSE, FALSE, 2); gtk_widget_show(entry_scale_y); label=gtk_label_new(_("Shift X : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_shift_x = gtk_entry_new(); gtk_widget_set_size_request(entry_shift_x,50,-1); gtk_entry_set_text(GTK_ENTRY(entry_shift_x),"0.0"); gtk_box_pack_start(GTK_BOX(hbox), entry_shift_x, FALSE, FALSE, 2); gtk_widget_show(entry_shift_x); label=gtk_label_new(_("Shift Y : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_shift_y = gtk_entry_new(); gtk_widget_set_size_request(entry_shift_y,50,-1); gtk_entry_set_text(GTK_ENTRY(entry_shift_y),"0.0"); gtk_box_pack_start(GTK_BOX(hbox), entry_shift_y, FALSE, FALSE, 2); gtk_widget_show(entry_shift_y); frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(vbox_window), frame, TRUE, FALSE, 2); gtk_widget_show(frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_widget_show(hbox); buttonAutoRangesAll = gtk_button_new_with_label (_("Auto ranges all")); gtk_box_pack_start(GTK_BOX(hbox), buttonAutoRangesAll, TRUE, TRUE, 4); gtk_widget_show (buttonAutoRangesAll); g_object_set_data(G_OBJECT (spin), "CurentData", NULL); g_signal_connect(G_OBJECT(spin), "value-changed", G_CALLBACK(spin_line_width_changed_value), xyplot); g_object_set_data(G_OBJECT (button), "CurentData", NULL); g_signal_connect(G_OBJECT(button), "color-set", G_CALLBACK(spin_line_color_changed_value), xyplot); g_signal_connect(G_OBJECT(combo), "changed", G_CALLBACK(combo_line_style_changed_value), xyplot); g_object_set_data(G_OBJECT (combo), "CurentData", NULL); g_signal_connect(G_OBJECT(combo_point), "changed", G_CALLBACK(combo_point_style_changed_value), xyplot); g_object_set_data(G_OBJECT (combo_point), "CurentData", NULL); g_object_set_data(G_OBJECT (spin_point), "CurentData", NULL); g_signal_connect(G_OBJECT(spin_point), "value-changed", G_CALLBACK(spin_point_size_changed_value), xyplot); g_object_set_data(G_OBJECT (button_point), "CurentData", NULL); g_signal_connect(G_OBJECT(button_point), "color-set", G_CALLBACK(spin_point_color_changed_value), xyplot); g_object_set_data(G_OBJECT (buttonAutoRangesAll), "CurentData", NULL); g_signal_connect(G_OBJECT(buttonAutoRangesAll), "clicked", G_CALLBACK(auto_range_activate), xyplot); g_object_set_data(G_OBJECT (entry_scale_x), "CurentData", NULL); g_object_set_data(G_OBJECT (entry_scale_y), "CurentData", NULL); g_object_set_data(G_OBJECT (entry_shift_x), "CurentData", NULL); g_object_set_data(G_OBJECT (entry_shift_y), "CurentData", NULL); g_signal_connect (G_OBJECT (entry_scale_x), "activate", (GCallback)activate_entry_scale_x, xyplot); g_signal_connect (G_OBJECT (entry_scale_y), "activate", (GCallback)activate_entry_scale_y, xyplot); g_signal_connect (G_OBJECT (entry_shift_x), "activate", (GCallback)activate_entry_shift_x, xyplot); g_signal_connect (G_OBJECT (entry_shift_y), "activate", (GCallback)activate_entry_shift_y, xyplot); parentWindow = get_parent_window(GTK_WIDGET(xyplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); /* list_utf8();*/ } /*********************************************************************************************************************/ static void toggle_action (GtkAction *action) { const gchar *name = gtk_action_get_name (action); gboolean enable = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); GtkWidget* xyplot = g_object_get_data(G_OBJECT (action), "XYPLOT"); if(!xyplot) return; if(!strcmp(name,"HGridShowMajor")) xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_HMAJOR_GRID, enable); else if(!strcmp(name,"HGridShowMinor")) xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_HMINOR_GRID, enable); else if(!strcmp(name,"VGridShowMajor")) xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_VMAJOR_GRID, enable); else if(!strcmp(name,"VGridShowMinor")) xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_VMINOR_GRID, enable); else if(!strcmp(name,"LegendShowLeft")) xyplot_show_left_legends (GABEDIT_XYPLOT(xyplot), enable); else if(!strcmp(name,"LegendShowRight")) xyplot_show_right_legends (GABEDIT_XYPLOT(xyplot), enable); else if(!strcmp(name,"LegendShowTop")) xyplot_show_top_legends (GABEDIT_XYPLOT(xyplot), enable); else if(!strcmp(name,"LegendShowBottom")) xyplot_show_bottom_legends (GABEDIT_XYPLOT(xyplot), enable); else if(!strcmp(name,"LegendShowRectangle")) xyplot_show_rectangle_legends (GABEDIT_XYPLOT(xyplot), enable); else if(!strcmp(name,"DirectionReflectX")) xyplot_reflect_x (GABEDIT_XYPLOT(xyplot), enable); else if(!strcmp(name,"DirectionReflectY")) xyplot_reflect_y (GABEDIT_XYPLOT(xyplot), enable); } /*--------------------------------------------------------------------------------------------------------------------*/ static GtkToggleActionEntry gtkActionToggleEntries[] = { { "HGridShowMajor", NULL, N_("show _H major"), NULL, "show H major", G_CALLBACK (toggle_action), TRUE }, { "HGridShowMinor", NULL, N_("show _H minor"), NULL, "show H minor", G_CALLBACK (toggle_action), FALSE }, { "VGridShowMajor", NULL, N_("show _V major"), NULL, "show V major", G_CALLBACK (toggle_action), TRUE }, { "VGridShowMinor", NULL, N_("show _V minor"), NULL, "show V minor", G_CALLBACK (toggle_action), FALSE }, { "LegendShowLeft", NULL, N_("show _left"), NULL, "show left", G_CALLBACK (toggle_action), TRUE }, { "LegendShowRight", NULL, N_("show _right"), NULL, "show right", G_CALLBACK (toggle_action), TRUE }, { "LegendShowTop", NULL, N_("show _top"), NULL, "show top", G_CALLBACK (toggle_action), TRUE }, { "LegendShowBottom", NULL, N_("show _bottom"), NULL, "show bottom", G_CALLBACK (toggle_action), TRUE }, { "LegendShowRectangle", NULL, N_("show _rectangle"), NULL, "show rectangle", G_CALLBACK (toggle_action), TRUE }, { "DirectionReflectX", NULL, N_("_X reflect"), NULL, "X reflect", G_CALLBACK (toggle_action), FALSE }, { "DirectionReflectY", NULL, N_("_Y reflect"), NULL, "Y reflect", G_CALLBACK (toggle_action), FALSE }, }; /*--------------------------------------------------------------------------------------------------------------------*/ static void init_toggle_entries (GtkWidget* xyplot) { xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_HMAJOR_GRID, gtkActionToggleEntries[0].is_active); xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_HMINOR_GRID, gtkActionToggleEntries[1].is_active); xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_VMAJOR_GRID, gtkActionToggleEntries[2].is_active); xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_VMINOR_GRID, gtkActionToggleEntries[3].is_active); xyplot_show_left_legends (GABEDIT_XYPLOT(xyplot), gtkActionToggleEntries[4].is_active); xyplot_show_right_legends (GABEDIT_XYPLOT(xyplot), gtkActionToggleEntries[5].is_active); xyplot_show_top_legends (GABEDIT_XYPLOT(xyplot), gtkActionToggleEntries[6].is_active); xyplot_show_bottom_legends (GABEDIT_XYPLOT(xyplot), gtkActionToggleEntries[7].is_active); xyplot_show_rectangle_legends (GABEDIT_XYPLOT(xyplot), gtkActionToggleEntries[8].is_active); xyplot_reflect_x (GABEDIT_XYPLOT(xyplot), gtkActionToggleEntries[9].is_active); xyplot_reflect_y (GABEDIT_XYPLOT(xyplot), gtkActionToggleEntries[10].is_active); } static gint numberOfGtkActionToggleEntries = G_N_ELEMENTS (gtkActionToggleEntries); /*********************************************************************************************************************/ static void activate_action (GtkAction *action) { const gchar *name = gtk_action_get_name (action); GtkWidget* xyplot = g_object_get_data(G_OBJECT (action), "XYPLOT"); if(!strcmp(name,"SetTicks")) { set_ticks_dialog(xyplot); } if(!strcmp(name,"SetMargins")) { set_margins_dialog(xyplot); } if(!strcmp(name,"SetRanges")) { set_ranges_dialog(xyplot); } if(!strcmp(name,"SetLabels")) { set_labels_dialog(xyplot); } if(!strcmp(name,"SetDigits")) { set_digits_dialog(xyplot); } if(!strcmp(name,"SetFontSize")) { set_font_size_dialog(xyplot); } if(!strcmp(name,"SetAll")) { set_all_dialog(xyplot); } if(!strcmp(name,"SetAutoRanges")) { gabedit_xyplot_set_autorange(GABEDIT_XYPLOT(xyplot), NULL); } if(!strcmp(name,"DataRead2Columns")) { read_data_2columns_dlg(xyplot,FALSE); } if(!strcmp(name,"DataRead2ColumnsPeaks")) { read_data_2columns_dlg(xyplot,TRUE); } if(!strcmp(name,"DataRead1Column")) { read_data_1column_dlg(xyplot,FALSE); } if(!strcmp(name,"DataRead1ColumnPeaks")) { read_data_1column_dlg(xyplot,TRUE); } if(!strcmp(name,"DataReadXY1YnColumns")) { read_data_xy1yncolumns_dlg(xyplot,FALSE); } if(!strcmp(name,"DataReadXY1YnColumnsPeaks")) { read_data_xy1yncolumns_dlg(xyplot,TRUE); } if(!strcmp(name,"DataReadJDX")) { read_data_jdx_dlg(xyplot); } if(!strcmp(name,"DataReadJMRUI")) { read_data_jMRUI_dlg(xyplot); } if(!strcmp(name,"DataSaveAll")) { save_all_data_2columns_dlg(xyplot); } if(!strcmp(name,"DataRemoveAll")) { remove_all_data_dlg(xyplot); } if(!strcmp(name,"DataChangeAll")) { set_all_data_dlg(xyplot); } if(!strcmp(name,"ObjectsInsertText")) { begin_insert_objects_text(xyplot); } if(!strcmp(name,"ObjectsInsertImage")) { begin_insert_objects_image(xyplot); } if(!strcmp(name,"ObjectsInsertImageClip")) { insert_objects_image_from_clipboard(xyplot);} if(!strcmp(name,"ThemesPublication")) { set_theme_publication(xyplot); } if(!strcmp(name,"ThemesGreenBlack")) { set_theme_green_black(xyplot); } if(!strcmp(name,"ThemesOther")) { set_theme_dialog(xyplot); } if(!strcmp(name,"ObjectsDeleteTexts")) { delete_objects_text(xyplot); } if(!strcmp(name,"ObjectsDeleteImage")) { delete_objects_image(xyplot); } if(!strcmp(name,"ObjectsInsertLine")) { begin_insert_objects_line(xyplot); } if(!strcmp(name,"ObjectsDeleteLines")) { delete_objects_line(xyplot); } if(!strcmp(name,"ScreenCaptureBMP")) { saveImageDlg(xyplot, "bmp");} if(!strcmp(name,"ScreenCaptureJPEG")) { saveImageDlg(xyplot, "jpeg");} if(!strcmp(name,"ScreenCapturePNG")) { saveImageDlg(xyplot, "png");} if(!strcmp(name,"ScreenCaptureTPNG")) { saveImageDlg(xyplot, "tpng");} if(!strcmp(name,"ScreenCaptureTIF")) { saveImageDlg(xyplot, "tif");} if(!strcmp(name,"ScreenCaptureClipBoard")) { copyImageToClipBoard(xyplot); } if(!strcmp(name,"ExportSVG")) { exportImageDlg(xyplot, "svg");} if(!strcmp(name,"ExportPDF")) { exportImageDlg(xyplot, "pdf");} if(!strcmp(name,"ExportPS")) { exportImageDlg(xyplot, "ps");} if(!strcmp(name,"ExportEPS")) { exportImageDlg(xyplot, "eps");} if(!strcmp(name,"Read")) { readAGabeditDlg(xyplot);} if(!strcmp(name,"Save")) { saveAsGabeditDlg(xyplot);} if(!strcmp(name,"Help")) { gabedit_xyplot_help();} if(!strcmp(name,"Close")) { destroy_xyplot_window(xyplot);} } /*--------------------------------------------------------------------*/ static GtkActionEntry gtkActionEntries[] = { {"Set", NULL, N_("_Set")}, {"SetTicks", NULL, N_("_Ticks"), NULL, "Ticks", G_CALLBACK (activate_action) }, {"SetMargins", NULL, N_("_Margins"), NULL, "Margins", G_CALLBACK (activate_action) }, {"SetRanges", NULL, N_("_Ranges"), NULL, "Ranges", G_CALLBACK (activate_action) }, {"SetLabels", NULL, N_("_Labels"), NULL, "Labels", G_CALLBACK (activate_action) }, {"SetDigits", NULL, N_("_Digits"), NULL, "Digits", G_CALLBACK (activate_action) }, {"SetFontSize", NULL, N_("_Font size"), NULL, "Font size", G_CALLBACK (activate_action) }, {"SetAll", NULL, N_("_All"), NULL, "All", G_CALLBACK (activate_action) }, {"SetAutoRanges", NULL, N_("_Auto ranges"), NULL, "Auto ranges", G_CALLBACK (activate_action) }, {"Render", NULL, N_("_Render")}, {"RenderGrid", NULL, N_("_Grid")}, {"RenderLegends", NULL, N_("_Legends")}, {"RenderDirections", NULL, N_("_Directions")}, {"Data", NULL, N_("_Data")}, {"DataAdd", NULL, N_("_Add Data")}, {"DataRead2Columns", NULL, N_("_Read data from an ASCII XY file(2 columns)"), NULL, "Read data from an ASCII XY file(2 columns)", G_CALLBACK (activate_action) }, {"DataRead1Column", NULL, N_("_Read data from an ASCII Y file(1 column)"), NULL, "Read data from an ASCII Y file(1 column)", G_CALLBACK (activate_action) }, {"DataReadXY1YnColumns", NULL, N_("_Read data from an ASCII X.Y1..Yn file(x, y1, y2,...,yn)"), NULL, "Read data from an ASCII XY file(2 columns)", G_CALLBACK (activate_action) }, {"DataReadJDX", NULL, N_("_Read data from a JDX file"), NULL, "Read data from a JDX file", G_CALLBACK (activate_action) }, {"DataReadJMRUI", NULL, N_("_Read data from a jMRUI text file"), NULL, "Read data from a jMRUI text file", G_CALLBACK (activate_action) }, {"DataRead2ColumnsPeaks", NULL, N_("_Read data from an ASCII XY file(2 columns) and draw peaks"), NULL, "Read data from an ASCII XY file(2 columns) and draw peaks", G_CALLBACK (activate_action) }, {"DataRead1ColumnPeaks", NULL, N_("_Read data from an ASCII Y file(1 column) and draw peaks"), NULL, "Read data from an ASCII Y file(1 column) and draw peaks", G_CALLBACK (activate_action) }, {"DataReadXY1YnColumnsPeaks", NULL, N_("_Read data from an ASCII X.Y1..Yn file(x, y1, y2,...,yn) and draw peaks"), NULL, "Read data from an ASCII XY file(2 columns) and draw peaks", G_CALLBACK (activate_action) }, {"DataSaveAll", NULL, N_("_Save all data in an ascii XY file(2columns)"), NULL, "Save all data in an ascii file(2columns)", G_CALLBACK (activate_action) }, {"DataRemoveAll", NULL, N_("_Remove all data"), NULL, "Remove all data", G_CALLBACK (activate_action) }, {"DataChangeAll", NULL, N_("_Change all"), NULL, "change all", G_CALLBACK (activate_action) }, {"Objects", NULL, N_("_Objects")}, {"ObjectsInsertText", NULL, N_("Insert a _text(Click in window)"), NULL, "Insert a text", G_CALLBACK (activate_action) }, {"ObjectsDeleteTexts", NULL, N_("Delete all _texts"), NULL, "Delete all texts", G_CALLBACK (activate_action) }, {"ObjectsInsertLine", NULL, N_("Insert a _line(Click in window and move)"), NULL, "Insert a line", G_CALLBACK (activate_action) }, {"ObjectsDeleteLines", NULL, N_("Delete all _lines"), NULL, "Delete all lines", G_CALLBACK (activate_action) }, {"ObjectsInsertImage", NULL, N_("Insert an _image from a png file(Click in window)"), NULL, "Insert an image", G_CALLBACK (activate_action) }, {"ObjectsInsertImageClip", NULL, N_("Insert an _image from clipboard"), NULL, "Insert an image", G_CALLBACK (activate_action) }, {"ObjectsDeleteImage", NULL, N_("Delete all _images"), NULL, "Delete all images", G_CALLBACK (activate_action) }, {"Themes", NULL, N_("_Themes")}, {"ThemesPublication", NULL, N_("_Publication"), NULL, "Publication", G_CALLBACK (activate_action) }, {"ThemesGreenBlack", NULL, N_("_Green&black"), NULL, "Green&black", G_CALLBACK (activate_action) }, {"ThemesOther", NULL, N_("_Other"), NULL, "Other", G_CALLBACK (activate_action) }, {"ScreenCapture", NULL, N_("_Screen Capture")}, {"ScreenCaptureBMP", NULL, N_("_BMP format"), NULL, "BMP format", G_CALLBACK (activate_action) }, {"ScreenCaptureJPEG", NULL, N_("_JPEG format"), NULL, "JPEG format", G_CALLBACK (activate_action) }, {"ScreenCapturePNG", NULL, N_("_PNG format"), NULL, "PNG format", G_CALLBACK (activate_action) }, {"ScreenCaptureTPNG", NULL, N_("_Transparent PNG format"), NULL, "Transparent PNG format", G_CALLBACK (activate_action) }, {"ScreenCaptureTIF", NULL, N_("_TIF format"), NULL, "TIF format", G_CALLBACK (activate_action) }, {"ScreenCaptureClipBoard", NULL, N_("_Copy to clipboard"), NULL, "Copy to clipboard", G_CALLBACK (activate_action) }, {"Export", NULL, N_("_Export")}, {"ExportSVG", NULL, N_("Export _SVG format"), NULL, "SVG format", G_CALLBACK (activate_action) }, {"ExportPDF", NULL, N_("Export p_df format"), NULL, "PDF format", G_CALLBACK (activate_action) }, {"ExportPS", NULL, N_("Export _postscript format"), NULL, "PS format", G_CALLBACK (activate_action) }, {"ExportEPS", NULL, N_("Export _Encapsuled postscript format"), NULL, "EPS format", G_CALLBACK (activate_action) }, {"Read", GTK_STOCK_OPEN, N_("_Read"), NULL, "Read", G_CALLBACK (activate_action) }, {"Save", GTK_STOCK_SAVE, N_("_Save"), NULL, "Save", G_CALLBACK (activate_action) }, {"Help", GTK_STOCK_HELP, N_("_Help"), NULL, "Help", G_CALLBACK (activate_action) }, {"Close", GTK_STOCK_CLOSE, N_("_Close"), NULL, "Close", G_CALLBACK (activate_action) }, }; static gint numberOfGtkActionEntries = G_N_ELEMENTS (gtkActionEntries); /********************************************************************************/ static void add_data_to_actions(GtkUIManager *manager, GtkWidget *xyplot) { GtkAction* action = NULL; action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Set/SetTicks"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Set/SetMargins"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Set/SetRanges"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Set/SetLabels"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Set/SetDigits"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Set/SetFontSize"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Set/SetAll"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Set/SetAutoRanges"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderGrid/HGridShowMajor"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderGrid/HGridShowMinor"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderGrid/VGridShowMajor"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderGrid/VGridShowMinor"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderLegends/LegendShowLeft"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderLegends/LegendShowRight"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderLegends/LegendShowTop"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderLegends/LegendShowBottom"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderLegends/LegendShowRectangle"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderDirections/DirectionReflectX"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderDirections/DirectionReflectY"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Data/DataAdd/DataRead2Columns"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Data/DataAdd/DataRead2ColumnsPeaks"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Data/DataAdd/DataRead1Column"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Data/DataAdd/DataRead1ColumnPeaks"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Data/DataAdd/DataReadXY1YnColumns"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Data/DataAdd/DataReadXY1YnColumnsPeaks"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Data/DataAdd/DataReadJDX"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Data/DataAdd/DataReadJMRUI"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Data/DataSaveAll"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Data/DataRemoveAll"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Data/DataChangeAll"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Objects/ObjectsDeleteTexts"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Objects/ObjectsInsertText"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Objects/ObjectsInsertImage"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Objects/ObjectsInsertImageClip"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Objects/ObjectsDeleteImage"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Themes/ThemesPublication"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Themes/ThemesGreenBlack"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Themes/ThemesOther"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Objects/ObjectsDeleteLines"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Objects/ObjectsInsertLine"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/ScreenCapture/ScreenCaptureBMP"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/ScreenCapture/ScreenCaptureJPEG"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/ScreenCapture/ScreenCapturePNG"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/ScreenCapture/ScreenCaptureTPNG"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/ScreenCapture/ScreenCaptureTIF"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/ScreenCapture/ScreenCaptureClipBoard"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Export/ExportSVG"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Export/ExportPDF"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Export/ExportPS"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Export/ExportEPS"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Read"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Save"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Help"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Close"); if(action) g_object_set_data(G_OBJECT (action), "XYPLOT", xyplot); } /********************************************************************************/ static const gchar *uiMenuInfo = " \n" " \n" "

\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*****************************************************************************************/ static void add_widget (GtkUIManager *merge, GtkWidget *widget, GtkContainer *container) { GtkWidget *handlebox; if (!GTK_IS_TOOLBAR (widget)) return; handlebox =gtk_handle_box_new (); g_object_ref (handlebox); gtk_handle_box_set_handle_position (GTK_HANDLE_BOX(handlebox),GTK_POS_TOP); /* GTK_SHADOW_NONE, GTK_SHADOW_IN, GTK_SHADOW_OUT, GTK_SHADOW_ETCHED_IN, GTK_SHADOW_ETCHED_OUT */ gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(handlebox),GTK_SHADOW_OUT); gtk_box_pack_start (GTK_BOX (container), handlebox, FALSE, FALSE, 0); if (GTK_IS_TOOLBAR (widget)) { GtkToolbar *toolbar; toolbar = GTK_TOOLBAR (widget); gtk_toolbar_set_show_arrow (toolbar, TRUE); gtk_toolbar_set_style(toolbar, GTK_TOOLBAR_ICONS); gtk_toolbar_set_orientation(toolbar, GTK_ORIENTATION_VERTICAL); } gtk_widget_show (widget); gtk_container_add (GTK_CONTAINER (handlebox), widget); gtk_widget_show (handlebox); } /*************************************************************************************************/ static void add_toolbar_and_popup_menu(GtkWidget* parent, GtkWidget* box) { GtkActionGroup *actionGroup = NULL; GtkUIManager *merge = NULL; GError *error = NULL; merge = gtk_ui_manager_new (); g_signal_connect_swapped (parent, "destroy", G_CALLBACK (g_object_unref), merge); actionGroup = gtk_action_group_new ("GabeditXYPlotActions"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntries, numberOfGtkActionEntries, NULL); gtk_action_group_add_toggle_actions (actionGroup, gtkActionToggleEntries, numberOfGtkActionToggleEntries, NULL); gtk_ui_manager_insert_action_group (merge, actionGroup, 0); if(box) g_signal_connect (merge, "add_widget", G_CALLBACK (add_widget), box); if (!gtk_ui_manager_add_ui_from_string (merge, uiMenuInfo, -1, &error)) { g_message (_("building menus of xyplot failed: %s"), error->message); g_error_free (error); } g_object_set_data(G_OBJECT (parent), "Manager", merge); add_data_to_actions(merge,parent); init_toggle_entries (parent); } /****************************************************************************************/ GType gabedit_xyplot_get_type () { static GType xyplot_type = 0; if (!xyplot_type) { static const GTypeInfo xyplot_info = { sizeof (GabeditXYPlotClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) gabedit_xyplot_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GabeditXYPlot), 0, /* n_preallocs */ (GInstanceInitFunc) gabedit_xyplot_init, }; xyplot_type = g_type_register_static (GTK_TYPE_WIDGET, "GabeditXYPlot", &xyplot_info, 0); } return xyplot_type; } /****************************************************************************************/ static void gabedit_xyplot_class_init (GabeditXYPlotClass *class) { GtkObjectClass *object_class; GtkWidgetClass *widget_class; object_class = (GtkObjectClass*) class; widget_class = (GtkWidgetClass*) class; parent_class = g_type_class_peek_parent (class); object_class->destroy = gabedit_xyplot_destroy; widget_class->realize = gabedit_xyplot_realize; widget_class->expose_event = gabedit_xyplot_expose; widget_class->size_request = gabedit_xyplot_size_request; widget_class->size_allocate = gabedit_xyplot_size_allocate; widget_class->button_press_event = gabedit_xyplot_button_press; widget_class->button_release_event = gabedit_xyplot_button_release; widget_class->motion_notify_event = gabedit_xyplot_motion_notify; widget_class->scroll_event = gabedit_xyplot_scroll; widget_class->style_set = gabedit_xyplot_style_set; widget_class->key_press_event = gabedit_xyplot_key_press; widget_class->key_release_event = gabedit_xyplot_key_release; widget_class->enter_notify_event = gabedit_xyplot_grab; widget_class->leave_notify_event = gabedit_xyplot_grab; } /****************************************************************************************/ static void gabedit_xyplot_init (GabeditXYPlot *xyplot) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); xyplot->xmin=-1.0; xyplot->xmax=1.0; xyplot->ymin=-1.0; xyplot->ymax=1.0; xyplot->x_legends_digits=8; xyplot->y_legends_digits=8; xyplot->hmajor_ticks=11; xyplot->hminor_ticks=3; xyplot->vmajor_ticks=11; xyplot->vminor_ticks=3; xyplot->length_ticks=3; xyplot->left_margins =0; xyplot->top_margins =0; xyplot->right_margins =0; xyplot->bottom_margins =0; xyplot->hmajor_grid=TRUE; xyplot->hminor_grid=TRUE; xyplot->vmajor_grid=TRUE; xyplot->vminor_grid=TRUE; xyplot->show_left_legends = TRUE; xyplot->show_right_legends = FALSE; xyplot->show_top_legends = FALSE; xyplot->show_bottom_legends = TRUE; xyplot->show_rectangle_legends = TRUE; xyplot->reflect_x = FALSE; xyplot->reflect_y = FALSE; xyplot->data_list=NULL; xyplot->mouse_zoom_enabled=TRUE; xyplot->mouse_zoom_button = 2; xyplot->mouse_displace_enabled=FALSE; xyplot->wheel_zoom_enabled=FALSE; xyplot->mouse_autorange_enabled=FALSE; xyplot->mouse_autorange_button = 1; xyplot->mouse_distance_enabled=TRUE; xyplot->mouse_distance_button = 1; xyplot->h_label_str = NULL; xyplot->v_label_str = NULL; xyplot->h_label = NULL; xyplot->v_label = NULL; xyplot->h_label_width = 0; xyplot->h_label_height = 0; xyplot->v_label_width = 0; xyplot->v_label_height = 0; xyplot->font_size = 12; xyplot->cairo_widget = NULL; xyplot->cairo_area = NULL; xyplot->cairo_export = NULL; xyplot->shift_key_pressed = FALSE; xyplot->control_key_pressed = FALSE; xyplot->nObjectsText = 0; xyplot->objectsText = NULL; xyplot->t_key_pressed = FALSE; xyplot->selected_objects_text_num = -1; xyplot->nObjectsLine = 0; xyplot->objectsLine = NULL; xyplot->l_key_pressed = FALSE; xyplot->selected_objects_line_num = -1; xyplot->selected_objects_line_type = -1; xyplot->nObjectsImage = 0; xyplot->objectsImage = NULL; xyplot->i_key_pressed = FALSE; xyplot->selected_objects_image_num = -1; xyplot->object_begin_point.x=-1; xyplot->object_begin_point.y=-1; xyplot->object_end_point.x=-1; xyplot->object_end_point.y=-1; xyplot->r_key_pressed = FALSE; } /****************************************************************************************/ GtkWidget* gabedit_xyplot_new () { GabeditXYPlot *xyplot; xyplot = g_object_new (GABEDIT_TYPE_XYPLOT, NULL); return GTK_WIDGET (xyplot); } /****************************************************************************************/ static void gabedit_xyplot_destroy (GtkObject *object) { GabeditXYPlot *xyplot; g_return_if_fail (object != NULL); g_return_if_fail (G_IS_OBJECT (object)); g_return_if_fail (GABEDIT_IS_XYPLOT (object)); xyplot = GABEDIT_XYPLOT (object); if (xyplot->plotting_area && G_IS_OBJECT(xyplot->plotting_area)) { g_object_unref(G_OBJECT(xyplot->plotting_area)); xyplot->plotting_area = NULL; } if (xyplot->old_area && G_IS_OBJECT(xyplot->old_area)) { g_object_unref(G_OBJECT(xyplot->old_area)); xyplot->old_area = NULL; } if (xyplot->cairo_area) { cairo_destroy (xyplot->cairo_area); xyplot->cairo_area = NULL; } if (xyplot->cairo_widget) { cairo_destroy (xyplot->cairo_widget); xyplot->cairo_widget = NULL; } if (xyplot->back_gc && G_IS_OBJECT(xyplot->back_gc)) { g_object_unref(xyplot->back_gc); xyplot->back_gc = NULL; } if (xyplot->fore_gc && G_IS_OBJECT(xyplot->fore_gc)) { g_object_unref(xyplot->fore_gc); xyplot->fore_gc = NULL; } if (xyplot->data_gc && G_IS_OBJECT(xyplot->data_gc)) { g_object_unref(xyplot->data_gc); xyplot->data_gc = NULL; } if (xyplot->lines_gc && G_IS_OBJECT(xyplot->lines_gc)) { g_object_unref(xyplot->lines_gc); xyplot->lines_gc = NULL; } if (xyplot->hmajor_grid_gc && G_IS_OBJECT(xyplot->hmajor_grid_gc)) { g_object_unref(xyplot->hmajor_grid_gc); xyplot->hmajor_grid_gc = NULL; } if (xyplot->hminor_grid_gc && G_IS_OBJECT(xyplot->hminor_grid_gc)) { g_object_unref(xyplot->hminor_grid_gc); xyplot->hminor_grid_gc = NULL; } if (xyplot->vmajor_grid_gc && G_IS_OBJECT(xyplot->vmajor_grid_gc)) { g_object_unref(xyplot->vmajor_grid_gc); xyplot->vmajor_grid_gc = NULL; } if (xyplot->vminor_grid_gc && G_IS_OBJECT(xyplot->vminor_grid_gc)) { g_object_unref(xyplot->vminor_grid_gc); xyplot->vminor_grid_gc = NULL; } if (xyplot->objectsLine) { g_free(xyplot->objectsLine); xyplot->objectsLine = NULL; } if (xyplot->objectsText) { gint i; for(i=0;inObjectsText;i++) { if(xyplot->objectsText[i].str) g_free(xyplot->objectsText[i].str); if(xyplot->objectsText[i].pango) g_object_unref(G_OBJECT(xyplot->objectsText[i].pango)); } g_free(xyplot->objectsText); xyplot->objectsText = NULL; } if (GTK_OBJECT_CLASS (parent_class)->destroy) (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); gtk_object_destroy (object); } /****************************************************************************************/ static gint xyplot_get_font_size (GtkWidget* widget, PangoFontDescription* font_desc) { gint font_size = 8; if(!font_desc) return font_size; font_size = pango_font_description_get_size (font_desc) / PANGO_SCALE; return font_size; } /********************************************************************************/ static gint gabedit_xyplot_grab(GtkWidget* widget, GdkEventCrossing* event) { if(!event) return FALSE; switch(event->type) { case GDK_ENTER_NOTIFY: gtk_grab_add(GTK_WIDGET (widget)); break; case GDK_LEAVE_NOTIFY: { GabeditXYPlot *xyplot = NULL; if(widget && GABEDIT_IS_XYPLOT (widget)) xyplot = GABEDIT_XYPLOT (widget); gtk_grab_remove(GTK_WIDGET (widget)); if(xyplot) { xyplot->shift_key_pressed = FALSE; xyplot->control_key_pressed = FALSE; } } break; default: break; } return TRUE; } /********************************************************************************/ static gint gabedit_xyplot_key_press(GtkWidget* widget, GdkEventKey *event) { GabeditXYPlot *xyplot; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GABEDIT_IS_XYPLOT (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); xyplot = GABEDIT_XYPLOT (widget); if((event->keyval == GDK_Shift_L || event->keyval == GDK_Shift_R) ) xyplot->shift_key_pressed = TRUE; if((event->keyval == GDK_Control_L || event->keyval == GDK_Control_R) ) xyplot->control_key_pressed = TRUE; if((event->keyval == GDK_Alt_L || event->keyval == GDK_Alt_L) ) xyplot->control_key_pressed = TRUE; if((event->keyval == GDK_c || event->keyval == GDK_C) ) { if(xyplot->control_key_pressed) copyImageToClipBoard(widget); } if((event->keyval == GDK_v || event->keyval == GDK_V) ) { if(xyplot->control_key_pressed) { add_object_image(xyplot, 0, 0, -1, -1, NULL); gtk_widget_queue_draw(widget); } } if((event->keyval == GDK_t || event->keyval == GDK_T) ) xyplot->t_key_pressed = TRUE; if((event->keyval == GDK_l || event->keyval == GDK_L) ) xyplot->l_key_pressed = TRUE; if((event->keyval == GDK_i || event->keyval == GDK_I) ) xyplot->i_key_pressed = TRUE; if((event->keyval == GDK_r || event->keyval == GDK_R) ) xyplot->r_key_pressed = TRUE; return TRUE; } /********************************************************************************/ static gint gabedit_xyplot_key_release(GtkWidget* widget, GdkEventKey *event) { GabeditXYPlot *xyplot; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GABEDIT_IS_XYPLOT (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); xyplot = GABEDIT_XYPLOT (widget); if((event->keyval == GDK_Shift_L || event->keyval == GDK_Shift_R) ) xyplot->shift_key_pressed = FALSE; if((event->keyval == GDK_Control_L || event->keyval == GDK_Control_R) ) xyplot->control_key_pressed = FALSE; if((event->keyval == GDK_Alt_L || event->keyval == GDK_Alt_R) ) xyplot->control_key_pressed = FALSE; if((event->keyval == GDK_T || event->keyval == GDK_t) ) xyplot->t_key_pressed = FALSE; if((event->keyval == GDK_l || event->keyval == GDK_L) ) xyplot->l_key_pressed = FALSE; if((event->keyval == GDK_r || event->keyval == GDK_R) ) xyplot->r_key_pressed = FALSE; return TRUE; } /****************************************************************************************/ static void gabedit_xyplot_realize (GtkWidget *widget) { GabeditXYPlot *xyplot; GdkWindowAttr attributes; gint attributes_mask; GdkGCValues gc_values; GdkGCValuesMask gc_values_mask; GdkColor black; GdkColor white; GdkColormap *colormap; g_return_if_fail (widget != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (widget)); GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); xyplot = GABEDIT_XYPLOT (widget); attributes.x = widget->allocation.x; attributes.y = widget->allocation.y; attributes.width = widget->allocation.width; attributes.height = widget->allocation.height; attributes.wclass = GDK_INPUT_OUTPUT; attributes.window_type = GDK_WINDOW_CHILD; attributes.event_mask = ( gtk_widget_get_events (widget) | GDK_VISIBILITY_NOTIFY_MASK| GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_ENTER_NOTIFY_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_FOCUS_CHANGE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); attributes.visual = gtk_widget_get_visual (widget); attributes.colormap = gtk_widget_get_colormap (widget); attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; widget->window = gdk_window_new (widget->parent->window, &attributes, attributes_mask); widget->style = gtk_style_attach (widget->style, widget->window); gdk_window_set_user_data (widget->window, widget); gtk_style_set_background (widget->style, widget->window, GTK_STATE_ACTIVE); colormap=gdk_drawable_get_colormap(widget->window); black.red = 0; black.green = 0; black.blue = 0; gdk_colormap_alloc_color (colormap, &black, FALSE, TRUE); white.red = 65535; white.green = 65535; white.blue = 65535; gdk_colormap_alloc_color (colormap, &white, FALSE, TRUE); gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &white); gtk_widget_modify_fg (widget, GTK_STATE_NORMAL, &black); gc_values.foreground=white; gc_values.line_style=GDK_LINE_SOLID; gc_values.line_width=1; gc_values_mask=GDK_GC_FOREGROUND | GDK_GC_LINE_STYLE | GDK_GC_LINE_WIDTH; xyplot->back_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); gc_values.foreground=black; gc_values.line_style=GDK_LINE_SOLID; gc_values.line_width=2; gc_values_mask=GDK_GC_FOREGROUND | GDK_GC_LINE_STYLE | GDK_GC_LINE_WIDTH; xyplot->fore_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); gc_values.foreground=black; xyplot->hmajor_grid_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); xyplot->vmajor_grid_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); gc_values.foreground=black; gc_values.line_style=GDK_LINE_ON_OFF_DASH; gc_values.line_width=1; gc_values_mask=GDK_GC_FOREGROUND | GDK_GC_LINE_STYLE | GDK_GC_LINE_WIDTH; xyplot->hminor_grid_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); xyplot->vminor_grid_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); xyplot->data_gc=gdk_gc_new (widget->window); gc_values.foreground=black; gc_values.line_style=GDK_LINE_SOLID; gc_values.line_width=2; gc_values_mask=GDK_GC_FOREGROUND | GDK_GC_LINE_STYLE | GDK_GC_LINE_WIDTH; xyplot->lines_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); xyplot->font_size = xyplot_get_font_size (widget, widget->style->font_desc); /* Create the initial legends*/ xyplot->v_legends_str = NULL; xyplot->h_legends_str = NULL; xyplot_build_legends(xyplot); xyplot_calculate_legends_sizes(xyplot); xyplot_calculate_sizes(xyplot); add_toolbar_and_popup_menu(widget, NULL); } /****************************************************************************************/ static void reset_theme(GtkWidget *widget, gint line_width, GdkColor* foreColor, GdkColor* backColor ) { GabeditXYPlot *xyplot; GdkGCValues gc_values; GdkGCValuesMask gc_values_mask; GdkColormap *colormap; g_return_if_fail (widget != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (widget)); xyplot = GABEDIT_XYPLOT (widget); colormap=gdk_drawable_get_colormap(widget->window); gdk_colormap_alloc_color (colormap, backColor, FALSE, TRUE); gdk_colormap_alloc_color (colormap, foreColor, FALSE, TRUE); gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, backColor); gtk_widget_modify_fg (widget, GTK_STATE_NORMAL, foreColor); if (xyplot->back_gc && G_IS_OBJECT(xyplot->back_gc)) { g_object_unref(xyplot->back_gc); xyplot->back_gc = NULL; } if (xyplot->fore_gc && G_IS_OBJECT(xyplot->fore_gc)) { g_object_unref(xyplot->fore_gc); xyplot->fore_gc = NULL; } if (xyplot->data_gc && G_IS_OBJECT(xyplot->data_gc)) { g_object_unref(xyplot->data_gc); xyplot->data_gc = NULL; } if (xyplot->hmajor_grid_gc && G_IS_OBJECT(xyplot->hmajor_grid_gc)) { g_object_unref(xyplot->hmajor_grid_gc); xyplot->hmajor_grid_gc = NULL; } if (xyplot->hminor_grid_gc && G_IS_OBJECT(xyplot->hminor_grid_gc)) { g_object_unref(xyplot->hminor_grid_gc); xyplot->hminor_grid_gc = NULL; } if (xyplot->vmajor_grid_gc && G_IS_OBJECT(xyplot->vmajor_grid_gc)) { g_object_unref(xyplot->vmajor_grid_gc); xyplot->vmajor_grid_gc = NULL; } if (xyplot->vminor_grid_gc && G_IS_OBJECT(xyplot->vminor_grid_gc)) { g_object_unref(xyplot->vminor_grid_gc); xyplot->vminor_grid_gc = NULL; } gc_values.foreground=*backColor; gc_values.line_style=GDK_LINE_SOLID; gc_values.line_width=line_width; gc_values_mask=GDK_GC_FOREGROUND | GDK_GC_LINE_STYLE | GDK_GC_LINE_WIDTH; xyplot->back_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); gc_values.foreground=*foreColor; gc_values.line_style=GDK_LINE_SOLID; gc_values.line_width=line_width; gc_values_mask=GDK_GC_FOREGROUND | GDK_GC_LINE_STYLE | GDK_GC_LINE_WIDTH; xyplot->fore_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); gc_values.foreground=*foreColor; xyplot->hmajor_grid_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); xyplot->vmajor_grid_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); gc_values.foreground=*foreColor; gc_values.line_style=GDK_LINE_ON_OFF_DASH; if(line_width/2>0) gc_values.line_width=line_width/2; else gc_values.line_width=line_width; gc_values_mask=GDK_GC_FOREGROUND | GDK_GC_LINE_STYLE | GDK_GC_LINE_WIDTH; xyplot->hminor_grid_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); xyplot->vminor_grid_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); xyplot->data_gc=gdk_gc_new (widget->window); if (xyplot->nObjectsLine<1) { if (xyplot->lines_gc && G_IS_OBJECT(xyplot->lines_gc)) { g_object_unref(xyplot->lines_gc); xyplot->lines_gc = NULL; } gc_values.foreground=*foreColor; gc_values.line_style=GDK_LINE_SOLID; gc_values.line_width=line_width; gc_values_mask=GDK_GC_FOREGROUND | GDK_GC_LINE_STYLE | GDK_GC_LINE_WIDTH; xyplot->lines_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); } xyplot_build_legends(xyplot); xyplot_calculate_legends_sizes(xyplot); xyplot_calculate_sizes(xyplot); reset_object_text_pango(xyplot); } /****************************************************************************************/ static void set_theme_publication(GtkWidget *widget) { GdkColor black; GdkColor white; gint line_width = 2; black.red = 0; black.green = 0; black.blue = 0; white.red = 65535; white.green = 65535; white.blue = 65535; reset_theme(widget, line_width, &black, &white); } /****************************************************************************************/ static void set_theme_green_black(GtkWidget *widget) { GdkColor black; GdkColor green; gint line_width = 2; black.red = 0; black.green = 0; black.blue = 0; green.red = 0; green.green = 65535; green.blue = 0; reset_theme(widget, line_width, &green, &black); } /****************************************************************************************/ static void theme_line_width_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* widget = GTK_WIDGET(user_data); GdkColor foreColor; GdkColor backColor; GdkGCValues gc_values; gint line_width = 1; GabeditXYPlot* xyplot = NULL; GdkColormap *colormap; g_return_if_fail (GABEDIT_IS_XYPLOT (widget)); xyplot = GABEDIT_XYPLOT(widget); colormap = gdk_window_get_colormap(widget->window); gdk_gc_get_values(xyplot->back_gc, &gc_values); gdk_colormap_query_color(colormap, gc_values.foreground.pixel,&backColor); gdk_gc_get_values(xyplot->fore_gc, &gc_values); gdk_colormap_query_color(colormap, gc_values.foreground.pixel,&foreColor); line_width=gc_values.line_width; line_width = gtk_spin_button_get_value(spinbutton); reset_theme(widget, line_width, &foreColor, &backColor); } } /****************************************************************************************/ static void theme_back_color_changed_value(GtkColorButton *colorbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* widget = GTK_WIDGET(user_data); GdkColor foreColor; GdkColor backColor; GdkGCValues gc_values; gint line_width = 1; GabeditXYPlot* xyplot = NULL; GdkColormap *colormap; g_return_if_fail (GABEDIT_IS_XYPLOT (widget)); xyplot = GABEDIT_XYPLOT(widget); colormap = gdk_window_get_colormap(widget->window); gtk_color_button_get_color (colorbutton, &backColor); gdk_gc_get_values(xyplot->fore_gc, &gc_values); gdk_colormap_query_color(colormap, gc_values.foreground.pixel,&foreColor); line_width=gc_values.line_width; reset_theme(widget, line_width, &foreColor, &backColor); } } /********************************************************************************************************/ static void theme_fore_color_changed_value(GtkColorButton *colorbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* widget = GTK_WIDGET(user_data); GdkColor foreColor; GdkColor backColor; GdkGCValues gc_values; gint line_width = 1; GabeditXYPlot* xyplot = NULL; GdkColormap *colormap; g_return_if_fail (GABEDIT_IS_XYPLOT (widget)); xyplot = GABEDIT_XYPLOT(widget); colormap = gdk_window_get_colormap(widget->window); gtk_color_button_get_color (colorbutton, &foreColor); gdk_gc_get_values(xyplot->back_gc, &gc_values); gdk_colormap_query_color(colormap, gc_values.foreground.pixel,&backColor); line_width=gc_values.line_width; reset_theme(widget, line_width, &foreColor, &backColor); } } /********************************************************************************************************/ static void set_theme_dialog(GtkWidget* widget) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* frame = NULL; GtkWidget* hbox = NULL; GtkWidget* hbox1 = NULL; GtkWidget* label = NULL; GtkWidget* spin = NULL; GtkWidget* button = NULL; GtkWidget* buttonBack = NULL; GtkWidget* buttonFore = NULL; GtkWidget* parentWindow = NULL; GtkWidget* vbox_window = NULL; GdkColor foreColor; GdkColor backColor; GdkGCValues gc_values; gint line_width = 1; GabeditXYPlot* xyplot = NULL; GdkColormap *colormap; g_return_if_fail (GABEDIT_IS_XYPLOT (widget)); xyplot = GABEDIT_XYPLOT(widget); colormap = gdk_window_get_colormap(widget->window); gdk_gc_get_values(xyplot->back_gc, &gc_values); gdk_colormap_query_color(colormap, gc_values.foreground.pixel,&backColor); gdk_gc_get_values(xyplot->fore_gc, &gc_values); gdk_colormap_query_color(colormap, gc_values.foreground.pixel,&foreColor); line_width=gc_values.line_width; gtk_window_set_title (GTK_WINDOW (window), _("Set theme")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)xyplot); vbox_window=gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox_window); gtk_widget_show(vbox_window); hbox1=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_window), hbox1, TRUE, FALSE, 2); gtk_widget_show(hbox1); frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(hbox1), frame, TRUE, FALSE, 2); gtk_widget_show(frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Line width :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin = gtk_spin_button_new_with_range(0, 10, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), line_width); gtk_box_pack_start(GTK_BOX(hbox), spin, TRUE, FALSE, 2); gtk_widget_show(spin); g_object_set_data(G_OBJECT (window), "SpinLineWidth", spin); label=gtk_label_new(_("Background color :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); button = gtk_color_button_new_with_color (&backColor); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 2); gtk_widget_show(button); g_object_set_data(G_OBJECT (window), "BackColorButton", button); buttonBack = button; label=gtk_label_new(_("Foreground color :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); button = gtk_color_button_new_with_color (&foreColor); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 2); gtk_widget_show(button); g_object_set_data(G_OBJECT (window), "ForeColorButton", button); buttonFore = button; g_signal_connect(G_OBJECT(spin), "value-changed", G_CALLBACK(theme_line_width_changed_value), xyplot); g_signal_connect(G_OBJECT(buttonBack), "color-set", G_CALLBACK(theme_back_color_changed_value), xyplot); g_signal_connect(G_OBJECT(buttonFore), "color-set", G_CALLBACK(theme_fore_color_changed_value), xyplot); parentWindow = get_parent_window(GTK_WIDGET(xyplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } /****************************************************************************************/ static void gabedit_xyplot_size_request (GtkWidget *widget, GtkRequisition *requisition) { g_return_if_fail (widget != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (widget)); g_return_if_fail (requisition != NULL); requisition->width = XYPLOT_DEFAULT_SIZE; requisition->height = XYPLOT_DEFAULT_SIZE; } /****************************************************************************************/ static void gabedit_xyplot_size_allocate (GtkWidget *widget, GtkAllocation *allocation) { GabeditXYPlot *xyplot; g_return_if_fail (widget != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (widget)); g_return_if_fail (allocation != NULL); widget->allocation = *allocation; xyplot=GABEDIT_XYPLOT(widget); if (GTK_WIDGET_REALIZED (widget)) gdk_window_move_resize (widget->window, allocation->x, allocation->y, allocation->width, allocation->height); xyplot_calculate_sizes(xyplot); } /****************************************************************************************/ static void draw_points(GtkWidget *widget, GabeditXYPlot *xyplot, XYPlotData* data) { gint i; gint x, y; GdkRectangle rect; if ( data->point_size<1 ) return; rect.x=0; rect.y=0; rect.width=widget->allocation.width; rect.height=widget->allocation.height; gdk_gc_set_rgb_fg_color (xyplot->data_gc, &data->point_color); for (i=0; isize; i++) /* if ((data->x[i] < xyplot->xmax) && (data->x[i] > xyplot->xmin) && (data->y[i] < xyplot->ymax) && (data->y[i] > xyplot->ymin)) */ { value2pixel(xyplot, data->x[i], data->y[i], &x, &y); y=xyplot->plotting_rect.height-y; x -= data->point_width/2; y -= data->point_height/2; if(data->point_pango) xyplot_cairo_layout(xyplot, xyplot->cairo_area, x, y, data->point_pango,FALSE,FALSE,0); } } /****************************************************************************************/ static void draw_lines(GtkWidget *widget, GabeditXYPlot *xyplot, XYPlotData* data) { GdkPoint* points; gint i; gboolean begin = TRUE; gint k,l; if (data->line_width<1) return; points=(GdkPoint*)g_malloc( (sizeof(GdkPoint) * 2)); gdk_gc_set_rgb_fg_color (xyplot->data_gc, &data->line_color); gdk_gc_set_line_attributes (xyplot->data_gc, data->line_width, data->line_style, GDK_CAP_ROUND, GDK_JOIN_MITER); k = 0; l = 0; for (i=0; isize; i++) /* if ((data->x[i] < xyplot->xmax) && (data->x[i] > xyplot->xmin) && (data->y[i] < xyplot->ymax) && (data->y[i] > xyplot->ymin)) */ { l = i; value2pixel(xyplot, data->x[i], data->y[i], (gint *)&points[1].x, (gint *)&points[1].y); points[1].y=xyplot->plotting_rect.height-points[1].y; if(begin) { points[0] = points[1]; begin = FALSE; k = i; continue; } if(k+1 ==l) { xyplot_cairo_lines(xyplot, xyplot->cairo_area, widget, xyplot->data_gc, points, 2); } k = l; points[0] = points[1]; } g_free(points); } /****************************************************************************************/ static void draw_zoom_rectangle(GtkWidget *widget, GabeditXYPlot *xyplot) { if (!xyplot->mouse_zoom_enabled || xyplot->mouse_button != xyplot->mouse_zoom_button) return; gdk_draw_rectangle(widget->window, xyplot->fore_gc, FALSE, xyplot->zoom_rect.x, xyplot->zoom_rect.y, xyplot->zoom_rect.width, xyplot->zoom_rect.height); } /****************************************************************************************/ static void draw_object_line_gdk(GtkWidget *widget, GabeditXYPlot *xyplot) { gint arrow_size = 0; gint i = -1; if (xyplot->object_begin_point.x<0 || xyplot->object_begin_point.y<0) return; if (xyplot->object_end_point.x<0 || xyplot->object_end_point.y<0) return; i = xyplot->selected_objects_line_num; if(i<0 && xyplot->nObjectsLine>0) i = xyplot->nObjectsLine-1; if(i>-1) { gdk_gc_set_rgb_fg_color (xyplot->lines_gc, &xyplot->objectsLine[i].color); gdk_gc_set_line_attributes (xyplot->lines_gc, xyplot->objectsLine[i].width, /* xyplot->objectsLine[i].style, */ GDK_LINE_ON_OFF_DASH, GDK_CAP_ROUND, GDK_JOIN_MITER); arrow_size = xyplot->objectsLine[i].arrow_size; } gdk_draw_line(widget->window, xyplot->lines_gc, xyplot->object_begin_point.x, xyplot->object_begin_point.y, xyplot->object_end_point.x, xyplot->object_end_point.y ); if(arrow_size>0) { gdouble x1, y1, x2, y2; calc_arrow_vertexes(30.0, arrow_size*5.0, (gdouble)xyplot->object_begin_point.x, (gdouble)xyplot->object_begin_point.y, (gdouble)xyplot->object_end_point.x, (gdouble)xyplot->object_end_point.y, &x1, &y1, &x2, &y2 ); gdk_draw_line(widget->window, xyplot->lines_gc, (gint)x1, (gint)y1, xyplot->object_end_point.x, xyplot->object_end_point.y ); gdk_draw_line(widget->window, xyplot->lines_gc, (gint)x2, (gint)y2, xyplot->object_end_point.x, xyplot->object_end_point.y ); } } /****************************************************************************************/ static void get_rotated_rectangle( gint x, gint y, gint w, gint h, gdouble angle, gint* x1, gint* y1, gint* x2, gint* y2, gint* x3, gint* y3, gint* x4, gint* y4) { gdouble a = -angle; gdouble cosa = cos(a); gdouble sina = sin(a); *x1 = x; *y1 = y; *x2 = (gint)(x+w*cosa); *y2 = (gint)(y+w*sina); *x3 = x+(gint)(w*cosa-h*sina); *y3 = (gint)(y+w*sina+h*cosa); *x4 = (gint)(x-h*sina); *y4 = (gint)(y+h*cosa); } /*****************************************************************************************************************/ static void draw_rotated_rectangle(GtkWidget *widget, GabeditXYPlot* xyplot, gint x, gint y, gint w, gint h, gdouble angle) { static GdkPoint* points = NULL; if(!points) points = g_malloc(4*sizeof(GdkPoint)); get_rotated_rectangle( x, y, w, h, angle, &points[0].x, &points[0].y, &points[1].x, &points[1].y, &points[2].x, &points[2].y, &points[3].x, &points[3].y); gdk_draw_polygon(widget->window, xyplot->fore_gc, FALSE, points, 4); } /****************************************************************************************/ static void draw_selected_objects_text_rectangle(GtkWidget *widget, GabeditXYPlot *xyplot) { gint i = xyplot->selected_objects_text_num; gdouble angle = 0; if(i<0 || i>=xyplot->nObjectsText) return; if (xyplot->mouse_zoom_enabled && xyplot->mouse_button == xyplot->mouse_zoom_button) return; /* gdk_draw_rectangle(widget->window, xyplot->fore_gc, FALSE, xyplot->objectsText[i].xi, xyplot->objectsText[i].yi, xyplot->objectsText[i].width, xyplot->objectsText[i].height); */ angle = xyplot->objectsText[i].angle; draw_rotated_rectangle(widget, xyplot, xyplot->objectsText[i].xi, xyplot->objectsText[i].yi, xyplot->objectsText[i].width, xyplot->objectsText[i].height, angle); } /****************************************************************************************/ static void draw_selected_objects_image_rectangle(GtkWidget *widget, GabeditXYPlot *xyplot) { gint i = xyplot->selected_objects_image_num; if(i<0 || i>=xyplot->nObjectsImage) return; if (xyplot->mouse_zoom_enabled && xyplot->mouse_button == xyplot->mouse_zoom_button) return; gdk_draw_rectangle(widget->window, xyplot->fore_gc, FALSE, xyplot->objectsImage[i].xi, xyplot->objectsImage[i].yi, xyplot->objectsImage[i].widthi, xyplot->objectsImage[i].heighti); } /****************************************************************************************/ static void draw_distance_line(GtkWidget *widget, GabeditXYPlot *xyplot) { PangoLayout *playout; GdkRectangle rect; gchar begin[100]=" "; gchar end[100] = " "; gdouble x1,y1,x2,y2; gint x,y; if (!xyplot->mouse_distance_enabled || xyplot->mouse_button != xyplot->mouse_distance_button) return; x=xyplot->distance_rect.x; y=xyplot->distance_rect.y; if(gabedit_xyplot_get_point(GABEDIT_XYPLOT(xyplot), x, y, &x1, &y1)) sprintf(begin,"(%f ; %f)",x1,y1); x = xyplot->distance_rect.x+xyplot->distance_rect.width; y = xyplot->distance_rect.y+xyplot->distance_rect.height; if(gabedit_xyplot_get_point(GABEDIT_XYPLOT(xyplot), x, y, &x2, &y2)) sprintf(end,"(%f ; %f)",x2,y2); rect.x=0; rect.y=0; rect.width=widget->allocation.width; rect.height=widget->allocation.height; playout=gtk_widget_create_pango_layout (widget, begin); if(!playout) return; gtk_paint_layout (widget->style, widget->window, GTK_STATE_NORMAL, FALSE, &rect, widget, NULL, xyplot->distance_rect.x, xyplot->distance_rect.y, playout); if (playout) g_object_unref(G_OBJECT(playout)); playout=gtk_widget_create_pango_layout (widget, end); gtk_paint_layout (widget->style, widget->window, GTK_STATE_NORMAL, FALSE, &rect, widget, NULL, xyplot->distance_rect.x+xyplot->distance_rect.width, xyplot->distance_rect.y+xyplot->distance_rect.height, playout); if (playout) g_object_unref(G_OBJECT(playout)); gdk_draw_line(widget->window, xyplot->fore_gc, xyplot->distance_rect.x, xyplot->distance_rect.y, xyplot->distance_rect.x+xyplot->distance_rect.width, xyplot->distance_rect.y+xyplot->distance_rect.height); } /****************************************************************************************/ static void draw_hminor_ticks(GtkWidget *widget, GabeditXYPlot *xyplot) { gint i; gint j; if (xyplot->hmajor_ticks<2 || xyplot->hminor_ticks == 0 ) return; for (i=0; i < xyplot->hmajor_ticks-1; i++) for (j=1; j <= xyplot->hminor_ticks; j++) { if (xyplot->show_bottom_legends) xyplot_cairo_line(xyplot, xyplot->cairo_widget, widget, xyplot->fore_gc, xyplot->plotting_rect.x+i*xyplot->d_hminor*(xyplot->hminor_ticks+1)+j*xyplot->d_hminor, xyplot->plotting_rect.y+xyplot->plotting_rect.height, xyplot->plotting_rect.x+i*xyplot->d_hminor*(xyplot->hminor_ticks+1)+j*xyplot->d_hminor, xyplot->plotting_rect.y+xyplot->plotting_rect.height+xyplot->length_ticks); if (xyplot->show_top_legends) xyplot_cairo_line(xyplot, xyplot->cairo_widget, widget, xyplot->fore_gc, xyplot->plotting_rect.x+i*xyplot->d_hminor*(xyplot->hminor_ticks+1)+j*xyplot->d_hminor, xyplot->plotting_rect.y, xyplot->plotting_rect.x+i*xyplot->d_hminor*(xyplot->hminor_ticks+1)+j*xyplot->d_hminor, xyplot->plotting_rect.y-xyplot->length_ticks); } } /****************************************************************************************/ static void draw_hmajor_ticks_and_xlegends(GtkWidget *widget, GabeditXYPlot *xyplot) { gint i; GdkRectangle rect; rect.x=0; rect.y=0; rect.width=widget->allocation.width; rect.height=widget->allocation.height; if (xyplot->hmajor_ticks>1) for (i=0; i < xyplot->hmajor_ticks; i++) { gint l1 = i; if(xyplot->reflect_x) l1 = xyplot->hmajor_ticks-i-1; if (xyplot->show_bottom_legends) xyplot_cairo_line(xyplot, xyplot->cairo_widget, widget, xyplot->fore_gc, xyplot->plotting_rect.x+i*xyplot->d_hmajor, xyplot->plotting_rect.y+xyplot->plotting_rect.height, xyplot->plotting_rect.x+i*xyplot->d_hmajor, xyplot->plotting_rect.y+xyplot->plotting_rect.height+xyplot->length_ticks*2); if (xyplot->show_top_legends) xyplot_cairo_line(xyplot, xyplot->cairo_widget, widget, xyplot->fore_gc, xyplot->plotting_rect.x+i*xyplot->d_hmajor, xyplot->plotting_rect.y, xyplot->plotting_rect.x+i*xyplot->d_hmajor, xyplot->plotting_rect.y-xyplot->length_ticks*2); if (xyplot->x_legends_digits!=0 && xyplot->show_bottom_legends) xyplot_cairo_string(xyplot, xyplot->cairo_widget, widget, xyplot->fore_gc, xyplot->plotting_rect.x+i*xyplot->d_hmajor-0.5*xyplot->x_legends_width, xyplot->plotting_rect.y+xyplot->plotting_rect.height+xyplot->length_ticks*2, xyplot->h_legends_str[l1], FALSE, FALSE,0); if (xyplot->x_legends_digits!=0 && xyplot->show_top_legends) xyplot_cairo_string(xyplot, xyplot->cairo_widget, widget, xyplot->fore_gc, xyplot->plotting_rect.x+i*xyplot->d_hmajor-0.5*xyplot->x_legends_width, xyplot->plotting_rect.y-xyplot->length_ticks*2-xyplot->x_legends_height, xyplot->h_legends_str[l1], FALSE, FALSE,0); } if ( xyplot->h_label && xyplot->x_legends_digits!=0 && xyplot->show_bottom_legends) { xyplot_cairo_layout(xyplot, xyplot->cairo_widget, xyplot->plotting_rect.x+0.5*xyplot->plotting_rect.width, xyplot->plotting_rect.y+xyplot->plotting_rect.height+xyplot->length_ticks*2+xyplot->x_legends_height, xyplot->h_label,TRUE,FALSE,0); } if (xyplot->h_label && xyplot->x_legends_digits!=0 && xyplot->show_top_legends && !xyplot->show_bottom_legends) { xyplot_cairo_layout(xyplot, xyplot->cairo_widget, xyplot->plotting_rect.x+0.5*xyplot->plotting_rect.width, xyplot->plotting_rect.y-xyplot->x_legends_height-xyplot->length_ticks*2-xyplot->h_label_height, xyplot->h_label,TRUE,FALSE,0); } } /****************************************************************************************/ static void xyplot_cairo_line_grid(GabeditXYPlot *xyplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, gdouble x1,gdouble y1,gdouble x2,gdouble y2) { gabedit_xyplot_cairo_line(cr, widget, gc, x1, y1, x2, y2); if(xyplot->cairo_export) { x1+= xyplot->plotting_rect.x; x2+= xyplot->plotting_rect.x; y1+= xyplot->plotting_rect.y; y2+= xyplot->plotting_rect.y; gabedit_xyplot_cairo_line(xyplot->cairo_export, widget, gc, x1, y1, x2, y2); } } /****************************************************************************************/ static void draw_hminor_grid(GtkWidget *widget, GabeditXYPlot *xyplot) { gint i; gint j; if (xyplot->hminor_grid && (xyplot->vmajor_ticks > 1) && (xyplot->vminor_ticks != 0)) for (i=0; i < xyplot->vmajor_ticks-1; i++) for (j=1; j <= xyplot->vminor_ticks; j++) { xyplot_cairo_line_grid(xyplot, xyplot->cairo_area, widget, xyplot->hminor_grid_gc, 0, i*xyplot->d_vmajor+j*xyplot->d_vminor, xyplot->plotting_rect.width, i*xyplot->d_vmajor+j*xyplot->d_vminor); } } /****************************************************************************************/ static void draw_hmajor_grid(GtkWidget *widget, GabeditXYPlot *xyplot) { gint i; if (xyplot->hmajor_grid && (xyplot->vmajor_ticks > 1) ) for (i=1; i < (xyplot->vmajor_ticks-1); i++) xyplot_cairo_line_grid(xyplot, xyplot->cairo_area, widget, xyplot->hmajor_grid_gc, 0, i*xyplot->d_vmajor, xyplot->plotting_rect.width, i*xyplot->d_vmajor); } /****************************************************************************************/ static void draw_vminor_ticks(GtkWidget *widget, GabeditXYPlot *xyplot) { gint i; gint j; if ( (xyplot->vmajor_ticks > 1) && (xyplot->vminor_ticks != 0) ) for (i=0; i < xyplot->vmajor_ticks-1; i++) for (j=1; j <= xyplot->vminor_ticks; j++) { if (xyplot->show_left_legends) xyplot_cairo_line(xyplot, xyplot->cairo_widget, widget, xyplot->fore_gc, xyplot->plotting_rect.x, xyplot->plotting_rect.y+i*xyplot->d_vminor*(xyplot->vminor_ticks+1)+j*xyplot->d_vminor, xyplot->plotting_rect.x-xyplot->length_ticks, xyplot->plotting_rect.y+i*xyplot->d_vminor*(xyplot->vminor_ticks+1)+j*xyplot->d_vminor); if (xyplot->show_right_legends) xyplot_cairo_line(xyplot, xyplot->cairo_widget, widget, xyplot->fore_gc, xyplot->plotting_rect.x+xyplot->plotting_rect.width, xyplot->plotting_rect.y+i*xyplot->d_vminor*(xyplot->vminor_ticks+1)+j*xyplot->d_vminor, xyplot->plotting_rect.x+xyplot->plotting_rect.width+xyplot->length_ticks, xyplot->plotting_rect.y+i*xyplot->d_vminor*(xyplot->vminor_ticks+1)+j*xyplot->d_vminor); } } /****************************************************************************************/ static void draw_vmajor_ticks_and_ylegends(GtkWidget *widget, GabeditXYPlot *xyplot) { gint i; GdkRectangle rect; rect.x=0; rect.y=0; rect.width=widget->allocation.width; rect.height=widget->allocation.height; if (xyplot->vmajor_ticks>1) for (i=0; i < xyplot->vmajor_ticks; i++) { gint l1 = i; if(xyplot->reflect_y) l1 = xyplot->vmajor_ticks-i-1; if (xyplot->show_left_legends) xyplot_cairo_line(xyplot, xyplot->cairo_widget, widget, xyplot->fore_gc, xyplot->plotting_rect.x, xyplot->plotting_rect.y+i*xyplot->d_vmajor, xyplot->plotting_rect.x-xyplot->length_ticks*2, xyplot->plotting_rect.y+i*xyplot->d_vmajor); if (xyplot->show_right_legends) xyplot_cairo_line(xyplot, xyplot->cairo_widget, widget, xyplot->fore_gc, xyplot->plotting_rect.x+xyplot->plotting_rect.width, xyplot->plotting_rect.y+i*xyplot->d_vmajor, xyplot->plotting_rect.x+xyplot->plotting_rect.width+xyplot->length_ticks*2, xyplot->plotting_rect.y+i*xyplot->d_vmajor); if (xyplot->y_legends_digits!=0 && xyplot->show_left_legends) xyplot_cairo_string(xyplot, xyplot->cairo_widget, widget, xyplot->fore_gc, xyplot->plotting_rect.x-xyplot->y_legends_width-xyplot->length_ticks*2-2, xyplot->plotting_rect.y+xyplot->plotting_rect.height-i*xyplot->d_vmajor, xyplot->v_legends_str[l1], FALSE, TRUE,0); if (xyplot->y_legends_digits!=0 && xyplot->show_right_legends) xyplot_cairo_string(xyplot, xyplot->cairo_widget, widget, xyplot->fore_gc, xyplot->plotting_rect.x+xyplot->plotting_rect.width+xyplot->length_ticks*2+2, xyplot->plotting_rect.y+xyplot->plotting_rect.height-i*xyplot->d_vmajor, xyplot->v_legends_str[l1], FALSE, TRUE,0); } if (xyplot->v_label && xyplot->y_legends_digits!=0 && xyplot->show_left_legends) { xyplot_cairo_layout(xyplot, xyplot->cairo_widget, xyplot->plotting_rect.x-xyplot->y_legends_width-xyplot->length_ticks*2-xyplot->v_label_height, xyplot->plotting_rect.y+0.5*xyplot->plotting_rect.height, xyplot->v_label,FALSE,TRUE,-M_PI/2); } if (xyplot->v_label && xyplot->y_legends_digits!=0 && xyplot->show_right_legends && !xyplot->show_left_legends) { xyplot_cairo_layout(xyplot, xyplot->cairo_widget, xyplot->plotting_rect.x+xyplot->plotting_rect.width+xyplot->y_legends_width+xyplot->length_ticks*2, xyplot->plotting_rect.y+0.5*xyplot->plotting_rect.height, xyplot->v_label,FALSE,TRUE,-M_PI/2); } } /****************************************************************************************/ static void draw_vminor_grid(GtkWidget *widget, GabeditXYPlot *xyplot) { gint i; gint j; if (xyplot->vminor_grid && (xyplot->hmajor_ticks > 1) && (xyplot->hminor_ticks != 0) ) for (i=0; i < xyplot->hmajor_ticks-1; i++) for (j=1; j <= xyplot->hminor_ticks; j++) xyplot_cairo_line_grid(xyplot, xyplot->cairo_area, widget, xyplot->vminor_grid_gc, i*xyplot->d_hmajor+j*xyplot->d_hminor, 0, i*xyplot->d_hmajor+j*xyplot->d_hminor, xyplot->plotting_rect.height); } /****************************************************************************************/ static void draw_vmajor_grid(GtkWidget *widget, GabeditXYPlot *xyplot) { gint i; if (xyplot->vmajor_grid && (xyplot->hmajor_ticks > 1)) for (i=1; i < (xyplot->hmajor_ticks-1); i++) xyplot_cairo_line_grid(xyplot, xyplot->cairo_area, widget, xyplot->vmajor_grid_gc, i*xyplot->d_hmajor, 0, i*xyplot->d_hmajor, xyplot->plotting_rect.height); } /****************************************************************************************/ static void draw_objects_text(GtkWidget *widget, GabeditXYPlot *xyplot) { gint i; for (i=0; i < xyplot->nObjectsText; i++) if(xyplot->objectsText[i].pango) { /* if ( !( (xyplot->objectsText[i].xi > xyplot->plotting_rect.x) && (xyplot->objectsText[i].xi < (xyplot->plotting_rect.x + xyplot->plotting_rect.width)) && (xyplot->objectsText[i].yi > xyplot->plotting_rect.y) && (xyplot->objectsText[i].yi < (xyplot->plotting_rect.y + xyplot->plotting_rect.height)) ) ) continue; */ xyplot_cairo_layout(xyplot, xyplot->cairo_widget, xyplot->objectsText[i].xi, xyplot->objectsText[i].yi, xyplot->objectsText[i].pango,FALSE,FALSE,-xyplot->objectsText[i].angle); } } /****************************************************************************************/ static void draw_objects_line(GtkWidget *widget, GabeditXYPlot *xyplot) { gint i; for (i=0; i < xyplot->nObjectsLine; i++) { /* if ( !( (xyplot->objectsLine[i].x1i > xyplot->plotting_rect.x) && (xyplot->objectsLine[i].x1i < (xyplot->plotting_rect.x + xyplot->plotting_rect.width)) && (xyplot->objectsLine[i].y1i > xyplot->plotting_rect.y) && (xyplot->objectsLine[i].y1i < (xyplot->plotting_rect.y + xyplot->plotting_rect.height)) ) ) continue; if ( !( (xyplot->objectsLine[i].x2i > xyplot->plotting_rect.x) && (xyplot->objectsLine[i].x2i < (xyplot->plotting_rect.x + xyplot->plotting_rect.width)) && (xyplot->objectsLine[i].y2i > xyplot->plotting_rect.y) && (xyplot->objectsLine[i].y2i < (xyplot->plotting_rect.y + xyplot->plotting_rect.height)) ) ) continue; */ /* HERE change gc vlaues */ gdouble x1, x2, y1, y2; gdk_gc_set_rgb_fg_color (xyplot->lines_gc, &xyplot->objectsLine[i].color); gdk_gc_set_line_attributes (xyplot->lines_gc, xyplot->objectsLine[i].width, xyplot->objectsLine[i].style, GDK_CAP_ROUND, GDK_JOIN_MITER); xyplot_cairo_line(xyplot, xyplot->cairo_widget, widget, xyplot->lines_gc, xyplot->objectsLine[i].x1i, xyplot->objectsLine[i].y1i, xyplot->objectsLine[i].x2i, xyplot->objectsLine[i].y2i); if(xyplot->objectsLine[i].arrow_size<1) continue; calc_arrow_vertexes(30.0, xyplot->objectsLine[i].arrow_size*5.0, (gdouble)xyplot->objectsLine[i].x1i, (gdouble)xyplot->objectsLine[i].y1i, (gdouble)xyplot->objectsLine[i].x2i, (gdouble)xyplot->objectsLine[i].y2i, &x1, &y1, &x2, &y2 ); xyplot_cairo_line(xyplot, xyplot->cairo_widget, widget, xyplot->lines_gc, (gint)x1, (gint)y1, xyplot->objectsLine[i].x2i, xyplot->objectsLine[i].y2i); xyplot_cairo_line(xyplot, xyplot->cairo_widget, widget, xyplot->lines_gc, (gint)x2, (gint)y2, xyplot->objectsLine[i].x2i, xyplot->objectsLine[i].y2i); } } /****************************************************************************************/ static void draw_objects_image(GtkWidget *widget, GabeditXYPlot *xyplot) { gint i; for (i=0; i < xyplot->nObjectsImage; i++) if(xyplot->objectsImage[i].image) { /* if ( !( (xyplot->objectsImage[i].xi > xyplot->plotting_rect.x) && (xyplot->objectsImage[i].xi < (xyplot->plotting_rect.x + xyplot->plotting_rect.width)) && (xyplot->objectsImage[i].yi > xyplot->plotting_rect.y) && (xyplot->objectsImage[i].yi < (xyplot->plotting_rect.y + xyplot->plotting_rect.height)) ) ) continue; */ xyplot_cairo_image(xyplot, xyplot->cairo_widget, widget, xyplot->objectsImage[i].xi , xyplot->objectsImage[i].yi, xyplot->objectsImage[i].widthi, xyplot->objectsImage[i].heighti, xyplot->objectsImage[i].image); } } /****************************************************************************************/ static void clean_borders(GtkWidget *widget, GabeditXYPlot *xyplot) { if(xyplot->cairo_export) { xyplot_cairo_rectangle(xyplot, xyplot->cairo_export, widget, xyplot->back_gc, TRUE, 0, 0, xyplot->plotting_rect.x, widget->allocation.height); xyplot_cairo_rectangle(xyplot, xyplot->cairo_export, widget, xyplot->back_gc, TRUE, 0, 0, widget->allocation.width, xyplot->plotting_rect.y ); xyplot_cairo_rectangle(xyplot, xyplot->cairo_export, widget, xyplot->back_gc, TRUE, 0, xyplot->plotting_rect.y+xyplot->plotting_rect.height, widget->allocation.width, widget->allocation.height-xyplot->plotting_rect.y-xyplot->plotting_rect.height ); xyplot_cairo_rectangle(xyplot, xyplot->cairo_export, widget, xyplot->back_gc, TRUE, xyplot->plotting_rect.x+xyplot->plotting_rect.width, 0, widget->allocation.width-xyplot->plotting_rect.x-xyplot->plotting_rect.width, widget->allocation.height ); } } /****************************************************************************************/ static void draw_borders(GtkWidget *widget, GabeditXYPlot *xyplot) { gboolean rectangle = xyplot->show_rectangle_legends; if(rectangle) xyplot_cairo_rectangle( xyplot, xyplot->cairo_widget, widget, xyplot->fore_gc, FALSE, xyplot->plotting_rect.x, xyplot->plotting_rect.y, xyplot->plotting_rect.width, xyplot->plotting_rect.height); else { if(xyplot->show_left_legends) { gdouble x1 = xyplot->plotting_rect.x; gdouble y1 = xyplot->plotting_rect.y; gdouble x2 = xyplot->plotting_rect.x; gdouble y2 = xyplot->plotting_rect.y+xyplot->plotting_rect.height; xyplot_cairo_line( xyplot, xyplot->cairo_widget, widget, xyplot->fore_gc, x1, y1, x2, y2); } if(xyplot->show_right_legends) { gdouble x1 = xyplot->plotting_rect.x+xyplot->plotting_rect.width; gdouble y1 = xyplot->plotting_rect.y; gdouble x2 = xyplot->plotting_rect.x+xyplot->plotting_rect.width; gdouble y2 = xyplot->plotting_rect.y+xyplot->plotting_rect.height; xyplot_cairo_line( xyplot, xyplot->cairo_widget, widget, xyplot->fore_gc, x1, y1, x2, y2); } if(xyplot->show_top_legends) { gdouble x1 = xyplot->plotting_rect.x; gdouble y1 = xyplot->plotting_rect.y; gdouble x2 = xyplot->plotting_rect.x+xyplot->plotting_rect.width; gdouble y2 = xyplot->plotting_rect.y; xyplot_cairo_line( xyplot, xyplot->cairo_widget, widget, xyplot->fore_gc, x1, y1, x2, y2); } if(xyplot->show_bottom_legends) { gdouble x1 = xyplot->plotting_rect.x; gdouble y1 = xyplot->plotting_rect.y+xyplot->plotting_rect.height; gdouble x2 = xyplot->plotting_rect.x+xyplot->plotting_rect.width; gdouble y2 = xyplot->plotting_rect.y+xyplot->plotting_rect.height; xyplot_cairo_line( xyplot, xyplot->cairo_widget, widget, xyplot->fore_gc, x1, y1, x2, y2); } } } /****************************************************************************************/ static void draw_background(GtkWidget *widget, GabeditXYPlot *xyplot) { GdkRectangle rect; rect.x=0; rect.y=0; rect.width=widget->allocation.width; rect.height=widget->allocation.height; gtk_paint_flat_box (widget->style, widget->window, GTK_STATE_NORMAL, GTK_SHADOW_NONE, &rect, widget, NULL, 0, 0, -1, -1); /* Filling the plotting area*/ xyplot_cairo_rectangle(xyplot, xyplot->cairo_area, widget, xyplot->back_gc, TRUE, 0, 0, xyplot->plotting_rect.width, xyplot->plotting_rect.height); if(xyplot->cairo_export) { xyplot_cairo_rectangle(xyplot, xyplot->cairo_export, widget, xyplot->back_gc, TRUE, xyplot->plotting_rect.x, xyplot->plotting_rect.y, xyplot->plotting_rect.width, xyplot->plotting_rect.height); } } /****************************************************************************************/ static void draw_data(GtkWidget *widget, GabeditXYPlot *xyplot) { XYPlotData *data = NULL; GList *current = NULL; if(xyplot->data_list) for(current=g_list_first(xyplot->data_list); current!=NULL; current=current->next) { data=(XYPlotData*)current->data; draw_lines(widget, xyplot, data); draw_points(widget, xyplot, data); } } /****************************************************************************************/ static GdkPixmap* gdk_pixmap_copy(GdkPixmap *pixmap) { GdkPixmap *pixmap_out; GdkGC *gc; gint width, height, depth; g_return_val_if_fail(pixmap != NULL, NULL); gdk_drawable_get_size(pixmap, &width, &height); depth = gdk_drawable_get_depth(pixmap); pixmap_out = gdk_pixmap_new(NULL, width, height, depth); gc = gdk_gc_new(pixmap); gdk_draw_drawable(pixmap_out, gc, pixmap, 0, 0, 0, 0, width, height); g_object_unref(gc); return pixmap_out; } /****************************************************************************************/ static void set_old_area(GtkWidget *widget, GabeditXYPlot *xyplot) { if (xyplot->old_area!=NULL) g_object_unref(G_OBJECT(xyplot->old_area)); xyplot->old_area=NULL; if (GTK_WIDGET_REALIZED(widget) && widget->window) { xyplot->old_area=gdk_pixmap_copy(widget->window); } } /****************************************************************************************/ static void draw_plotting_area(GtkWidget *widget, GabeditXYPlot *xyplot) { gdk_draw_drawable (widget->window, xyplot->back_gc, xyplot->plotting_area, 0, 0, xyplot->plotting_rect.x, xyplot->plotting_rect.y, xyplot->plotting_rect.width, xyplot->plotting_rect.height); } /****************************************************************************************/ static gint gabedit_xyplot_expose (GtkWidget *widget, GdkEventExpose *event) { GabeditXYPlot *xyplot; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GABEDIT_IS_XYPLOT (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); if (event->count > 0) return FALSE; xyplot=GABEDIT_XYPLOT(widget); if (xyplot->mouse_zoom_enabled && xyplot->mouse_button == xyplot->mouse_zoom_button) { gint width; gint height; gdk_drawable_get_size(xyplot->old_area, &width, &height); gdk_draw_drawable (widget->window, xyplot->back_gc, xyplot->old_area, 0, 0, 0, 0, width, height ); draw_zoom_rectangle(widget, xyplot); return TRUE; } if (xyplot->mouse_distance_enabled && xyplot->mouse_button == xyplot->mouse_distance_button) { gint width; gint height; gdk_drawable_get_size(xyplot->old_area, &width, &height); gdk_draw_drawable (widget->window, xyplot->back_gc, xyplot->old_area, 0, 0, 0, 0, width, height ); draw_distance_line(widget, xyplot); return TRUE; } if (xyplot->selected_objects_text_num>-1) { gint width; gint height; gdk_drawable_get_size(xyplot->old_area, &width, &height); gdk_draw_drawable (widget->window, xyplot->back_gc, xyplot->old_area, 0, 0, 0, 0, width, height ); draw_selected_objects_text_rectangle(widget, xyplot); return TRUE; } if (xyplot->selected_objects_image_num>-1) { gint width; gint height; gdk_drawable_get_size(xyplot->old_area, &width, &height); gdk_draw_drawable (widget->window, xyplot->back_gc, xyplot->old_area, 0, 0, 0, 0, width, height ); draw_selected_objects_image_rectangle(widget, xyplot); return TRUE; } if (xyplot->object_begin_point.x>-1) { gint width; gint height; gdk_drawable_get_size(xyplot->old_area, &width, &height); gdk_draw_drawable (widget->window, xyplot->back_gc, xyplot->old_area, 0, 0, 0, 0, width, height ); draw_object_line_gdk(widget, xyplot); return TRUE; } if (xyplot->cairo_widget) { cairo_destroy (xyplot->cairo_widget); xyplot->cairo_widget = gdk_cairo_create (widget->window); } if (xyplot->cairo_area) { cairo_destroy (xyplot->cairo_area); xyplot->cairo_area = gdk_cairo_create (xyplot->plotting_area); } draw_background(widget, xyplot); draw_vmajor_grid(widget, xyplot); draw_hminor_grid(widget, xyplot); draw_hmajor_grid(widget, xyplot); draw_vminor_grid(widget, xyplot); draw_data(widget, xyplot); clean_borders(widget, xyplot);/* for export */ draw_borders(widget, xyplot); draw_hminor_ticks(widget, xyplot); draw_hmajor_ticks_and_xlegends(widget, xyplot); draw_vminor_ticks(widget, xyplot); draw_vmajor_ticks_and_ylegends(widget, xyplot); draw_plotting_area(widget, xyplot); /* draw_zoom_rectangle(widget, xyplot);*/ /* draw_distance_line(widget, xyplot);*/ draw_objects_image(widget, xyplot); draw_objects_line(widget, xyplot); draw_objects_text(widget, xyplot); return 0; } /****************************************************************************************/ static gint get_distance_M_AB(GabeditXYPlot *xyplot,gint xM, gint yM, gint ixA, gint iyA, gint ixB, gint iyB) { gdouble xA = ixA; gdouble yA = iyA; gdouble xB = ixB; gdouble yB = iyB; gdouble xAB = xB -xA; gdouble yAB = yB -yA; gdouble AB2 = xAB*xAB + yAB*yAB; gdouble xMA; gdouble yMA; gdouble MA2; gdouble xMB; gdouble yMB; gdouble MB2; gdouble xC; gdouble yC; gdouble xMC; gdouble yMC; gdouble MC2; do{ xMA = xA -xM; yMA = yA -yM; MA2 = xMA*xMA + yMA*yMA; xMB = xB -xM; yMB = yB -yM; MB2 = xMB*xMB + yMB*yMB; xC = (xA + xB)/2.0; yC = (yA + yB)/2.0; xMC = xC - xM; yMC = yC - yM; MC2 = xMC*xMC + yMC*yMC; if(MA2>MB2) { if(MC21); return (gint)sqrt(MC2); } /****************************************************************************************/ static gint gabedit_xyplot_double_click (GtkWidget *widget, GdkEventButton *event) { XYPlotData *data; GList* current = NULL; gint x; gint y; gboolean OK = FALSE; GabeditXYPlot *xyplot = NULL; gint loop; gint xOld; gint yOld; gint i = 0; xyplot=GABEDIT_XYPLOT(widget); /* test on objects label */ i = get_object_text_num(xyplot, event->x, event->y); if(i>-1 && inObjectsText) { xyplot->selected_objects_text_num = -1; add_set_object_text_dialog(GTK_WIDGET(xyplot), i, 0,0); return TRUE; } /* test on objects line */ i = get_object_line_num(xyplot, event->x, event->y); if(i>-1 && inObjectsLine) { xyplot->selected_objects_line_num = -1; xyplot->selected_objects_line_type = -1; xyplot->object_begin_point.x = -1; xyplot->object_begin_point.y = -1; xyplot->object_end_point.x = -1; xyplot->object_end_point.y = -1; set_object_line_dialog(xyplot, i); return TRUE; } /* test on objects image */ i = get_object_image_num(xyplot, event->x, event->y); if(i>-1 && inObjectsImage) { xyplot->selected_objects_image_num = -1; xyplot->object_begin_point.x = -1; xyplot->object_begin_point.y = -1; xyplot->object_end_point.x = -1; xyplot->object_end_point.y = -1; add_set_object_image_dialog(GTK_WIDGET(xyplot), i, 0,0); return TRUE; } if ( !( (event->x > xyplot->plotting_rect.x) && (event->x < (xyplot->plotting_rect.x + xyplot->plotting_rect.width)) && (event->y > xyplot->plotting_rect.y) && (event->y < (xyplot->plotting_rect.y + xyplot->plotting_rect.height)) ) ) { set_all_dialog(widget); return TRUE; } if(!(xyplot->data_list)) return TRUE; current=g_list_first(xyplot->data_list); for(; current != NULL; current = current->next) { data = (XYPlotData*)current->data; xOld = 0; yOld = 0; for(loop=0;loopsize;loop++) { value2pixel(xyplot, data->x[loop], data->y[loop], &x, &y); y=xyplot->plotting_rect.height-y; x += xyplot->plotting_rect.x; y += xyplot->plotting_rect.y; if(loop ==0 && abs(x-event->x)<5 && abs(y-event->y)<5) { OK = TRUE; break; } if(loop >0 && get_distance_M_AB(xyplot,(gint)event->x, (gint)event->y, (gint)xOld, (gint)yOld, (gint)x, (gint)y)<5) { OK = TRUE; break; } xOld = x; yOld = y; } if(OK) break; } if(OK) { set_data_dialog(xyplot,data); } return OK; } /*********************************************************************************************************************/ static gboolean popuo_menu(GtkWidget* widget, guint button, guint32 time) { GtkUIManager *manager = g_object_get_data(G_OBJECT (widget), "Manager"); GtkWidget *menu = gtk_ui_manager_get_widget (manager, "/MenuXYPlot"); if (GTK_IS_MENU (menu)) { gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, time); return TRUE; } else { g_message (_("popup menu of xyplot failed")); } return FALSE; } /****************************************************************************************/ static gint gabedit_xyplot_button_press (GtkWidget *widget, GdkEventButton *event) { GabeditXYPlot *xyplot; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GABEDIT_IS_XYPLOT (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); xyplot = GABEDIT_XYPLOT (widget); if(event->type == GDK_2BUTTON_PRESS) { xyplot->double_click = TRUE; return gabedit_xyplot_double_click(widget,event); } if(event->button == 3) { return popuo_menu(widget, event->button, event->time); } if (xyplot->mouse_zoom_enabled && (event->button == xyplot->mouse_zoom_button || (event->button == 1 && xyplot->control_key_pressed )) ) if ( (event->x > xyplot->plotting_rect.x) && (event->x < (xyplot->plotting_rect.x + xyplot->plotting_rect.width)) && (event->y > xyplot->plotting_rect.y) && (event->y < (xyplot->plotting_rect.y + xyplot->plotting_rect.height)) ){ xyplot->mouse_button=xyplot->mouse_zoom_button; xyplot->zoom_point.x=event->x; xyplot->zoom_point.y=event->y; set_old_area(widget, xyplot); } if (xyplot->mouse_distance_enabled && (event->button == xyplot->mouse_distance_button && xyplot->shift_key_pressed ) ) if ( (event->x > xyplot->plotting_rect.x) && (event->x < (xyplot->plotting_rect.x + xyplot->plotting_rect.width)) && (event->y > xyplot->plotting_rect.y) && (event->y < (xyplot->plotting_rect.y + xyplot->plotting_rect.height)) ){ xyplot->mouse_button=xyplot->mouse_distance_button; xyplot->distance_point.x=event->x; xyplot->distance_point.y=event->y; set_old_area(widget, xyplot); } if (xyplot->mouse_displace_enabled && (event->button == xyplot->mouse_displace_button)) if ( (event->x > xyplot->plotting_rect.x) && (event->x < (xyplot->plotting_rect.x + xyplot->plotting_rect.width)) && (event->y > xyplot->plotting_rect.y) && (event->y < (xyplot->plotting_rect.y + xyplot->plotting_rect.height)) ){ xyplot->mouse_button=event->button; xyplot->move_point.x=event->x; xyplot->move_point.y=event->y; } if (xyplot->r_key_pressed && !xyplot->control_key_pressed){ gint i; xyplot->r_key_pressed = FALSE; i = get_object_text_num(xyplot, event->x, event->y); if(i>-1) delete_object_text(GTK_WIDGET(xyplot), i); else { i = get_object_line_num(xyplot, event->x, event->y); if(i>-1) delete_object_line(GTK_WIDGET(xyplot), i); else { i = get_object_image_num(xyplot, event->x, event->y); if(i>-1) delete_object_image(GTK_WIDGET(xyplot), i); } } } if ( !xyplot->t_key_pressed && !xyplot->l_key_pressed && !xyplot->i_key_pressed && !xyplot->shift_key_pressed && !xyplot->control_key_pressed && event->button != xyplot->mouse_zoom_button ) /* if ( (event->x > xyplot->plotting_rect.x) && (event->x < (xyplot->plotting_rect.x + xyplot->plotting_rect.width)) && (event->y > xyplot->plotting_rect.y) && (event->y < (xyplot->plotting_rect.y + xyplot->plotting_rect.height)) ) */ { gdouble X, Y; gchar txt[BSIZE]; PangoLayout *playout; gint i; if(gabedit_xyplot_get_point(GABEDIT_XYPLOT(xyplot), event->x, event->y, &X, &Y)) sprintf(txt,"(%f ; %f)",X,Y); playout=gtk_widget_create_pango_layout (widget, txt); if(playout) { GdkRectangle rect; rect.x=0; rect.y=0; rect.width=widget->allocation.width; rect.height=widget->allocation.height; gtk_paint_layout (widget->style, widget->window, GTK_STATE_NORMAL, FALSE, &rect, widget, NULL, event->x, event->y, playout); g_object_unref(G_OBJECT(playout)); } i = get_object_text_num(xyplot, event->x, event->y); if(i>-1 && inObjectsText) xyplot->selected_objects_text_num = i; else xyplot->selected_objects_text_num = -1; if(xyplot->selected_objects_text_num>-1) { set_old_area(widget, xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } if(xyplot->selected_objects_text_num<0) { i = get_object_line_num(xyplot, event->x, event->y); xyplot->selected_objects_line_num = -1; xyplot->selected_objects_line_type = -1; if(i>-1 && inObjectsLine) { gdouble xx,yy,d; xyplot->selected_objects_line_num = i; xyplot->selected_objects_line_type = 0; xyplot->object_begin_point.x=xyplot->objectsLine[i].x1i; xyplot->object_begin_point.y=xyplot->objectsLine[i].y1i; xyplot->object_end_point.x=xyplot->objectsLine[i].x2i; xyplot->object_end_point.y=xyplot->objectsLine[i].y2i; xx = event->x-xyplot->objectsLine[i].x1i; yy = event->y-xyplot->objectsLine[i].y1i; d = xx*xx+yy*yy; xx = event->x-xyplot->objectsLine[i].x2i; yy = event->y-xyplot->objectsLine[i].y2i; if(dselected_objects_line_type = 1; set_old_area(widget, xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } if(xyplot->selected_objects_text_num<0 && xyplot->selected_objects_line_num<0) { i = get_object_image_num(xyplot, event->x, event->y); if(i>-1 && inObjectsImage) xyplot->selected_objects_image_num = i; else xyplot->selected_objects_image_num = -1; if(xyplot->selected_objects_image_num>-1) { gdouble xx = -event->x+xyplot->objectsImage[i].xi+xyplot->objectsImage[i].widthi; gdouble yy = -event->y+xyplot->objectsImage[i].yi+xyplot->objectsImage[i].heighti; if(xx*xx+yy*yy< (xyplot->objectsImage[i].widthi*xyplot->objectsImage[i].widthi+ xyplot->objectsImage[i].heighti*xyplot->objectsImage[i].heighti)/100 ) { xyplot->object_begin_point.x=-1; xyplot->object_begin_point.y=-1; xyplot->object_end_point.x=(gint)fabs(xx); xyplot->object_end_point.y=(gint)fabs(yy); } else { xyplot->object_begin_point.x=event->x-xyplot->objectsImage[i].xi; xyplot->object_begin_point.y=event->y-xyplot->objectsImage[i].yi; xyplot->object_end_point.x=-1; xyplot->object_end_point.y=-1; } set_old_area(widget, xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } } if (xyplot->t_key_pressed && !xyplot->control_key_pressed) /* if ( (event->x > xyplot->plotting_rect.x) && (event->x < (xyplot->plotting_rect.x + xyplot->plotting_rect.width)) && (event->y > xyplot->plotting_rect.y) && (event->y < (xyplot->plotting_rect.y + xyplot->plotting_rect.height)) ) */ { gdouble X, Y; if(gabedit_xyplot_get_point(GABEDIT_XYPLOT(xyplot), event->x, event->y, &X, &Y)) { xyplot->t_key_pressed = FALSE; add_set_object_text_dialog(GTK_WIDGET(xyplot), -1, X, Y); } } if (xyplot->l_key_pressed && !xyplot->control_key_pressed) /* if ( (event->x > xyplot->plotting_rect.x) && (event->x < (xyplot->plotting_rect.x + xyplot->plotting_rect.width)) && (event->y > xyplot->plotting_rect.y) && (event->y < (xyplot->plotting_rect.y + xyplot->plotting_rect.height)) ) */ { set_old_area(widget, xyplot); xyplot->l_key_pressed = FALSE; xyplot->object_begin_point.x=event->x; xyplot->object_begin_point.y=event->y; xyplot->object_end_point.x=-1; xyplot->object_end_point.y=-1; } if (xyplot->i_key_pressed && !xyplot->control_key_pressed) /* if ( (event->x > xyplot->plotting_rect.x) && (event->x < (xyplot->plotting_rect.x + xyplot->plotting_rect.width)) && (event->y > xyplot->plotting_rect.y) && (event->y < (xyplot->plotting_rect.y + xyplot->plotting_rect.height)) ) */ { xyplot->i_key_pressed = FALSE; add_set_object_image_dialog(GTK_WIDGET(xyplot), -1, event->x, event->y); } if ( xyplot->mouse_autorange_enabled && (event->button == xyplot->mouse_autorange_button) ) gabedit_xyplot_set_autorange(xyplot, NULL); xyplot->double_click = FALSE; return FALSE; } /****************************************************************************************/ static gint gabedit_xyplot_button_release (GtkWidget *widget, GdkEventButton *event) { GabeditXYPlot *xyplot; gdouble xmin, xmax, ymin, ymax; gint xleft, ytop, xright, ybottom; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GABEDIT_IS_XYPLOT (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); xyplot = GABEDIT_XYPLOT (widget); xyplot->selected_objects_text_num=-1; if (xyplot->selected_objects_image_num>-1) { xyplot->object_begin_point.x=-1; xyplot->object_begin_point.y=-1; xyplot->object_end_point.x=-1; xyplot->object_end_point.y=-1; xyplot->selected_objects_image_num=-1; } if (xyplot->selected_objects_line_num>-1) { xyplot->object_begin_point.x=-1; xyplot->object_begin_point.y=-1; xyplot->object_end_point.x=-1; xyplot->object_end_point.y=-1; xyplot->selected_objects_line_num=-1; xyplot->selected_objects_line_type=-1; } /* Zoom */ if ( !xyplot->double_click && xyplot->mouse_zoom_enabled && (xyplot->mouse_button == xyplot->mouse_zoom_button)){ xleft=xyplot->zoom_rect.x-xyplot->plotting_rect.x; xright=xyplot->zoom_rect.x+xyplot->zoom_rect.width-xyplot->plotting_rect.x; ybottom=xyplot->plotting_rect.y+xyplot->plotting_rect.height-xyplot->zoom_rect.y-xyplot->zoom_rect.height; ytop=xyplot->plotting_rect.y+xyplot->plotting_rect.height-xyplot->zoom_rect.y; pixel2value(xyplot, xleft, ybottom, &xmin, &ymin); pixel2value(xyplot, xright, ytop, &xmax, &ymax); if(xyplot->reflect_x) { gdouble a = xmin; xmin = xmax; xmax = a; } if(xyplot->reflect_y) { gdouble a = ymin; ymin = ymax; ymax = a; } gabedit_xyplot_set_range(xyplot, xmin, xmax, ymin, ymax); xyplot->mouse_button=0; } /* draw object line */ if ( !xyplot->double_click && xyplot->object_begin_point.x>-1) { gdouble X1, Y1; gdouble X2, Y2; if(gabedit_xyplot_get_point(GABEDIT_XYPLOT(xyplot), event->x, event->y, &X2, &Y2) && gabedit_xyplot_get_point(GABEDIT_XYPLOT(xyplot), xyplot->object_begin_point.x, xyplot->object_begin_point.y, &X1, &Y1)) { xyplot->l_key_pressed = FALSE; add_object_line(xyplot, X1, Y1, X2, Y2); } xyplot->object_begin_point.x = -1; } /* distance */ if ( !xyplot->double_click && xyplot->mouse_distance_enabled && (xyplot->mouse_button == xyplot->mouse_distance_button)){ xleft=xyplot->distance_rect.x-xyplot->plotting_rect.x; xright=xyplot->distance_rect.x+xyplot->distance_rect.width-xyplot->plotting_rect.x; ybottom=xyplot->plotting_rect.y+xyplot->plotting_rect.height-xyplot->distance_rect.y-xyplot->distance_rect.height; ytop=xyplot->plotting_rect.y+xyplot->plotting_rect.height-xyplot->distance_rect.y; pixel2value(xyplot, xleft, ybottom, &xmin, &ymin); pixel2value(xyplot, xright, ytop, &xmax, &ymax); if(xyplot->reflect_x) { gdouble a = xmin; xmin = xmax; xmax = a; } if(xyplot->reflect_y) { gdouble a = ymin; ymin = ymax; ymax = a; } { GtkWidget* dialog = NULL; gchar* tmp = g_strdup_printf("dX = %f ; dY = %f",xmax-xmin,ymax-ymin); dialog = gtk_message_dialog_new_with_markup (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "%s", tmp); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); g_free(tmp); } /* gabedit_xyplot_set_range(xyplot, xmin, xmax, ymin, ymax);*/ gtk_widget_queue_draw(GTK_WIDGET(xyplot)); xyplot->mouse_button=0; } else gtk_widget_queue_draw(GTK_WIDGET(xyplot)); if (xyplot->mouse_displace_enabled && (event->button == xyplot->mouse_displace_button) && (xyplot->mouse_button == xyplot->mouse_displace_button) ){ xyplot->mouse_button=0; } return FALSE; } /****************************************************************************************/ static gint gabedit_xyplot_motion_notify (GtkWidget *widget, GdkEventMotion *event) { GabeditXYPlot *xyplot; gint x, y; gdouble px, py, mx, my; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GABEDIT_IS_XYPLOT (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); xyplot = GABEDIT_XYPLOT (widget); x = event->x; y = event->y; if (event->is_hint || (event->window != widget->window)) gdk_window_get_pointer (widget->window, (gint *)&x, (gint *)&y, NULL); if (xyplot->selected_objects_text_num>-1) { gint i = xyplot->selected_objects_text_num; XYPlotObjectText* objectText = &GABEDIT_XYPLOT(xyplot)->objectsText[i]; gabedit_xyplot_get_point_control (xyplot, x, y, objectText->width, objectText->height, objectText->angle, &mx, &my); set_object_text(xyplot, objectText, mx,my, objectText->angle, objectText->str); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } else if (xyplot->selected_objects_line_num>-1) { gint i = xyplot->selected_objects_line_num; gdouble x1=0, y1=0, x2=0, y2=0; XYPlotObjectLine* objectLine = &GABEDIT_XYPLOT(xyplot)->objectsLine[i]; if(xyplot->selected_objects_line_type==0) { xyplot->object_end_point.x=x; xyplot->object_end_point.y=y; gabedit_xyplot_get_point_control (xyplot, xyplot->object_begin_point.x, xyplot->object_begin_point.y, objectLine->width,objectLine->width, 0, &x1, &y1); gabedit_xyplot_get_point_control (xyplot, xyplot->object_end_point.x, xyplot->object_end_point.y, objectLine->width,objectLine->width, 0, &x2, &y2); } else if(xyplot->selected_objects_line_type==1) { xyplot->object_begin_point.x=x; xyplot->object_begin_point.y=y; gabedit_xyplot_get_point_control (xyplot, xyplot->object_begin_point.x, xyplot->object_begin_point.y, objectLine->width,objectLine->width, 0, &x1, &y1); gabedit_xyplot_get_point_control (xyplot, xyplot->object_end_point.x, xyplot->object_end_point.y, objectLine->width,objectLine->width, 0, &x2, &y2); } set_object_line(xyplot, objectLine, x1, y1, x2, y2, objectLine->width, objectLine->arrow_size, objectLine->color, objectLine->style ); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } else if (xyplot->selected_objects_image_num>-1) { gint i = xyplot->selected_objects_image_num; XYPlotObjectImage* objectImage = &GABEDIT_XYPLOT(xyplot)->objectsImage[i]; if(xyplot->object_begin_point.x>0) { gint dx,dy; x -= xyplot->object_begin_point.x; y -= xyplot->object_begin_point.y; if(x<0) x = 0; if(y<0) y = 0; dx = x+objectImage->widthi-widget->allocation.width; if(dx>0) x-=dx; dy = y+objectImage->heighti-widget->allocation.height; if(dy>0) y-=dy; set_object_image(xyplot, objectImage, x, y, objectImage->widthi, objectImage->heighti); } if(xyplot->object_end_point.x>0) { gint w,h; x += xyplot->object_end_point.x; y += xyplot->object_end_point.y; if(xxi) x = objectImage->xi+20; if(yyi) y = objectImage->yi+20; if(x>widget->allocation.width) x = widget->allocation.width; if(y>widget->allocation.height) y = widget->allocation.height; w = (gint)(x-objectImage->xi); h = (gint)(y-objectImage->yi); set_object_image(xyplot, objectImage, objectImage->xi, objectImage->yi, w, h); } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } else if (xyplot->object_begin_point.x>-1) { xyplot->object_end_point.x=x; xyplot->object_end_point.y=y; gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /* Zoom */ if (xyplot->mouse_zoom_enabled && (xyplot->mouse_button == xyplot->mouse_zoom_button) ){ if (x < xyplot->plotting_rect.x) x=xyplot->plotting_rect.x; if(x > (xyplot->plotting_rect.x + xyplot->plotting_rect.width)) x=(xyplot->plotting_rect.x + xyplot->plotting_rect.width); if (y < xyplot->plotting_rect.y) y=xyplot->plotting_rect.y; if (y > (xyplot->plotting_rect.y + xyplot->plotting_rect.height)) y=(xyplot->plotting_rect.y + xyplot->plotting_rect.height); if (xyplot->zoom_point.x < x){ xyplot->zoom_rect.x=xyplot->zoom_point.x; xyplot->zoom_rect.width=x-xyplot->zoom_point.x; }else{ xyplot->zoom_rect.x=x; xyplot->zoom_rect.width=xyplot->zoom_point.x-x; } if (xyplot->zoom_point.y < y){ xyplot->zoom_rect.y=xyplot->zoom_point.y; xyplot->zoom_rect.height=y-xyplot->zoom_point.y; }else{ xyplot->zoom_rect.y=y; xyplot->zoom_rect.height=xyplot->zoom_point.y-y; } gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /* distance between 2 points */ if (xyplot->mouse_distance_enabled && (xyplot->mouse_button == xyplot->mouse_distance_button) ){ if (x < xyplot->plotting_rect.x) x=xyplot->plotting_rect.x; if(x > (xyplot->plotting_rect.x + xyplot->plotting_rect.width)) x=(xyplot->plotting_rect.x + xyplot->plotting_rect.width); if (y < xyplot->plotting_rect.y) y=xyplot->plotting_rect.y; if (y > (xyplot->plotting_rect.y + xyplot->plotting_rect.height)) y=(xyplot->plotting_rect.y + xyplot->plotting_rect.height); xyplot->distance_rect.x=xyplot->distance_point.x; xyplot->distance_rect.width=x-xyplot->distance_point.x; xyplot->distance_rect.y=xyplot->distance_point.y; xyplot->distance_rect.height=y-xyplot->distance_point.y; gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } if (xyplot->mouse_displace_enabled && (xyplot->mouse_button==xyplot->mouse_displace_button)) if ( (x > xyplot->plotting_rect.x) && (x < (xyplot->plotting_rect.width + xyplot->plotting_rect.x)) && (y > xyplot->plotting_rect.y) && (y < (xyplot->plotting_rect.height + xyplot->plotting_rect.y)) ){ pixel2value(xyplot, xyplot->move_point.x, xyplot->move_point.y, &px, &py); pixel2value(xyplot, x, y, &mx, &my); gabedit_xyplot_set_range(xyplot, xyplot->xmin+(px-mx), xyplot->xmax+(px-mx), xyplot->ymin-(py-my), xyplot->ymax-(py-my)); xyplot->move_point.x=x; xyplot->move_point.y=y; } return FALSE; } /****************************************************************************************/ static gint gabedit_xyplot_scroll (GtkWidget *widget, GdkEventScroll *event) { GabeditXYPlot *xyplot; gdouble x_range = 0.0, y_range = 0.0, xmin = 0.0, xmax = 0.0, ymin = 0.0, ymax = 0.0; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GABEDIT_IS_XYPLOT (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); xyplot=GABEDIT_XYPLOT(widget); if (xyplot->wheel_zoom_enabled){ if (event->direction==GDK_SCROLL_UP){ x_range=xyplot->wheel_zoom_factor*(xyplot->xmax-xyplot->xmin); y_range=xyplot->wheel_zoom_factor*(xyplot->ymax-xyplot->ymin); } if (event->direction==GDK_SCROLL_DOWN){ x_range=(xyplot->xmax-xyplot->xmin)/xyplot->wheel_zoom_factor; y_range=(xyplot->ymax-xyplot->ymin)/xyplot->wheel_zoom_factor; } xmin=xyplot->xmin+((xyplot->xmax-xyplot->xmin)/2.0)-(x_range/2.0); xmax=xyplot->xmin+((xyplot->xmax-xyplot->xmin)/2.0)+(x_range/2.0); ymin=xyplot->ymin+((xyplot->ymax-xyplot->ymin)/2.0)-(y_range/2.0); ymax=xyplot->ymin+((xyplot->ymax-xyplot->ymin)/2.0)+(y_range/2.0); gabedit_xyplot_set_range(xyplot, xmin, xmax, ymin, ymax); } return TRUE; } /****************************************************************************************/ static void gabedit_xyplot_style_set (GtkWidget *widget, GtkStyle *previous_style) { GabeditXYPlot *xyplot; g_return_if_fail (widget != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (widget)); xyplot = GABEDIT_XYPLOT (widget); xyplot_calculate_legends_sizes(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_set_range (GabeditXYPlot *xyplot, gdouble xmin, gdouble xmax, gdouble ymin, gdouble ymax) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if (xmin < xmax){ xyplot->xmin=xmin; xyplot->xmax=xmax; } if (ymin < ymax){ xyplot->ymin=ymin; xyplot->ymax=ymax; } xyplot_free_legends(xyplot); xyplot_build_legends(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_set_range_xmin (GabeditXYPlot *xyplot, gdouble xmin) { gabedit_xyplot_set_range(xyplot, xmin, xyplot->xmax, xyplot->ymin , xyplot->ymax); } /****************************************************************************************/ void gabedit_xyplot_set_range_xmax (GabeditXYPlot *xyplot, gdouble xmax) { gabedit_xyplot_set_range(xyplot, xyplot->xmin, xmax, xyplot->ymin , xyplot->ymax); } /****************************************************************************************/ void gabedit_xyplot_set_range_ymin (GabeditXYPlot *xyplot, gdouble ymin) { gabedit_xyplot_set_range(xyplot, xyplot->xmin, xyplot->xmax, ymin , xyplot->ymax); } /****************************************************************************************/ void gabedit_xyplot_set_range_ymax (GabeditXYPlot *xyplot, gdouble ymax) { gabedit_xyplot_set_range(xyplot, xyplot->xmin, xyplot->xmax, xyplot->ymin , ymax); } /****************************************************************************************/ void gabedit_xyplot_set_autorange (GabeditXYPlot *xyplot, XYPlotData *data) { gint loop, loop2; gdouble xmax, xmin, ymax, ymin; gdouble dx, dy; XYPlotData *current_data; GList *current_node; g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); xmax=1.0; xmin=-1.0; ymax=1.0; ymin=-1.0; if (data!=NULL){ xmax=data->x[0]; xmin=data->x[0]; ymax=data->y[0]; ymin=data->y[0]; for (loop=1; loopsize; loop++){ if (data->x[loop] > xmax) xmax=data->x[loop]; if (data->x[loop] < xmin) xmin=data->x[loop]; if (data->y[loop] > ymax) ymax=data->y[loop]; if (data->y[loop] < ymin) ymin=data->y[loop]; } } if ( (data == NULL) && xyplot->data_list ){ current_node=g_list_first(xyplot->data_list); current_data=(XYPlotData*)current_node->data; xmin=current_data->x[0]; xmax=current_data->x[0]; ymin=current_data->y[0]; ymax=current_data->y[0]; for (; current_node!=NULL; current_node=current_node->next) { current_data=(XYPlotData*)current_node->data; for (loop2=0; loop2size; loop2++){ if (xmin > current_data->x[loop2]) xmin=current_data->x[loop2]; if (xmax < current_data->x[loop2]) xmax=current_data->x[loop2]; if (ymin > current_data->y[loop2]) ymin=current_data->y[loop2]; if (ymax < current_data->y[loop2]) ymax=current_data->y[loop2]; } } } dx=fabs(xmax-xmin); dy=fabs(ymax-ymin); xmin=xmin-dx*0.1; xmax=xmax+dx*0.1; ymin=ymin-dy*0.1; ymax=ymax+dy*0.1; xyplot->xmin=xmin; xyplot->xmax=xmax; xyplot->ymin=ymin; xyplot->ymax=ymax; xyplot_free_legends(xyplot); xyplot_build_legends(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_get_reflects (GabeditXYPlot *xyplot, gboolean* rx, gboolean* ry) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if (rx!=NULL) *rx=xyplot->reflect_x; if (ry!=NULL) *ry=xyplot->reflect_y; } /****************************************************************************************/ void gabedit_xyplot_get_range (GabeditXYPlot *xyplot, gdouble *xmin, gdouble *xmax, gdouble *ymin, gdouble *ymax) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if (xmin!=NULL) *xmin=xyplot->xmin; if (xmax!=NULL) *xmax=xyplot->xmax; if (ymax!=NULL) *ymax=xyplot->ymax; if (ymin!=NULL) *ymin=xyplot->ymin; } /****************************************************************************************/ gboolean gabedit_xyplot_get_point (GabeditXYPlot *xyplot, gint x, gint y, gdouble *xv, gdouble *yv) { g_return_val_if_fail (xyplot != NULL, FALSE); g_return_val_if_fail (GABEDIT_IS_XYPLOT (xyplot),FALSE); /* if ((x < xyplot->plotting_rect.x) || (x > (xyplot->plotting_rect.x + xyplot->plotting_rect.width)) || (y < xyplot->plotting_rect.y) || (y > (xyplot->plotting_rect.y + xyplot->plotting_rect.height))) { *xv=*yv=0; return FALSE; } */ x=x-xyplot->plotting_rect.x; y=xyplot->plotting_rect.y+xyplot->plotting_rect.height-y; pixel2value(xyplot, x, y, xv, yv); return TRUE; } /****************************************************************************************/ gboolean gabedit_xyplot_get_point_control(GabeditXYPlot *xyplot, gint x, gint y, gint width, gint height, gdouble angle, gdouble *xv, gdouble *yv ) { gdouble xa, ya; gdouble xmin,xmax,ymin,ymax; gint a[4],b[4]; gint i; gint ixmin,ixmax,iymin,iymax; gdouble alpha = angle; gdouble l; gint lcos; gint lsin; gint wcos; gint wsin; gint hcos; gint hsin; GtkWidget *widget = GTK_WIDGET(xyplot); g_return_val_if_fail (xyplot != NULL, FALSE); g_return_val_if_fail (GABEDIT_IS_XYPLOT (xyplot),FALSE); if(width>0) alpha -= atan((gdouble)height/width); l = sqrt(width*width+height*height); lcos = (gint)(l*cos(alpha)); lsin = (gint)(l*sin(alpha)); wcos = (gint)(width*cos(angle)); wsin = (gint)(width*sin(angle)); hcos = (gint)(height*cos(angle-M_PI/2)); hsin = (gint)(height*sin(angle-M_PI/2)); ixmin = 0; if(ixmin<-lcos) ixmin = -lcos; if(ixmin<-wcos) ixmin = -wcos; if(ixmin<-hcos) ixmin = -hcos; iymin = 0; if(iyminallocation.width-ixmax; iymax = 0; if(iymax<-lsin) iymax = -lsin; if(iymax<-wsin) iymax = -wsin; if(iymax<-hsin) iymax = -hsin; iymax = widget->allocation.height-iymax; /* printf("iminmax = %d %d %d %d\n",ixmin,ixmax,iymin,iymax);*/ a[0] = ixmin; a[1] = ixmax; a[2] = ixmax; a[3] = ixmin; b[0] = iymin; b[1] = iymin; b[2] = iymax; b[3] = iymax; gabedit_xyplot_get_point (xyplot, x, y, xv, yv); xmin = xmax = *xv; ymin = ymax = *yv; for(i=0;i<4;i++) { gabedit_xyplot_get_point (xyplot, a[i], b[i], &xa, &ya); if(i==0) { xmin = xa; xmax = xa; ymin = ya; ymax = ya; } else { if(xmin>xa) xmin = xa; if(ymin>ya) ymin = ya; if(xmaxxmax) *xv = xmax; if(*yv>ymax) *yv = ymax; return TRUE; } /****************************************************************************************/ void gabedit_xyplot_set_ticks (GabeditXYPlot *xyplot, gint hmajor, gint hminor, gint vmajor, gint vminor, gint length) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); xyplot_free_legends(xyplot); xyplot->hmajor_ticks=hmajor; xyplot->hminor_ticks=hminor; xyplot->vmajor_ticks=vmajor; xyplot->vminor_ticks=vminor; xyplot->length_ticks=length; xyplot_build_legends(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_set_ticks_hmajor (GabeditXYPlot *xyplot, gint hmajor) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); xyplot_free_legends(xyplot); xyplot->hmajor_ticks=hmajor; xyplot_build_legends(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_set_ticks_hminor (GabeditXYPlot *xyplot, gint hminor) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); xyplot_free_legends(xyplot); xyplot->hminor_ticks=hminor; xyplot_build_legends(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_set_ticks_vmajor (GabeditXYPlot *xyplot, gint vmajor) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); xyplot_free_legends(xyplot); xyplot->vmajor_ticks=vmajor; xyplot_build_legends(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_set_ticks_vminor (GabeditXYPlot *xyplot, gint vminor) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); xyplot_free_legends(xyplot); xyplot->vminor_ticks=vminor; xyplot_build_legends(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_set_ticks_length(GabeditXYPlot *xyplot, gint length) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); xyplot_free_legends(xyplot); xyplot->length_ticks=length; xyplot_build_legends(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_get_ticks (GabeditXYPlot *xyplot, gint *hmajor, gint *hminor, gint *vmajor, gint *vminor, gint* length) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if (hmajor!=NULL) *hmajor=xyplot->hmajor_ticks; if (hminor!=NULL) *hminor=xyplot->hminor_ticks; if (vmajor!=NULL) *vmajor=xyplot->vmajor_ticks; if (vminor!=NULL) *vminor=xyplot->vminor_ticks; if (length!=NULL) *length=xyplot->length_ticks; } /****************************************************************************************/ void gabedit_xyplot_set_margins_left (GabeditXYPlot *xyplot, gint left) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); xyplot_free_legends(xyplot); xyplot->left_margins=left; xyplot_build_legends(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_set_margins_right (GabeditXYPlot *xyplot, gint right) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); xyplot_free_legends(xyplot); xyplot->right_margins=right; xyplot_build_legends(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_set_margins_top (GabeditXYPlot *xyplot, gint top) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); xyplot_free_legends(xyplot); xyplot->top_margins=top; xyplot_build_legends(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_set_margins_bottom (GabeditXYPlot *xyplot, gint bottom) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); xyplot_free_legends(xyplot); xyplot->bottom_margins=bottom; xyplot_build_legends(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_set_x_legends_digits (GabeditXYPlot *xyplot, gint digits) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if (digits != xyplot->x_legends_digits){ xyplot_free_legends(xyplot); xyplot->x_legends_digits=digits; xyplot_build_legends(xyplot); xyplot_calculate_legends_sizes(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /****************************************************************************************/ void gabedit_xyplot_set_y_legends_digits (GabeditXYPlot *xyplot, gint digits) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if (digits != xyplot->y_legends_digits){ xyplot_free_legends(xyplot); xyplot->y_legends_digits=digits; xyplot_build_legends(xyplot); xyplot_calculate_legends_sizes(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /****************************************************************************************/ gint gabedit_xyplot_get_x_legends_digits (GabeditXYPlot *xyplot) { g_return_val_if_fail (xyplot != NULL, 0); g_return_val_if_fail (GABEDIT_IS_XYPLOT (xyplot), 0); return(xyplot->x_legends_digits); } /****************************************************************************************/ gint gabedit_xyplot_get_y_legends_digits (GabeditXYPlot *xyplot) { g_return_val_if_fail (xyplot != NULL, 0); g_return_val_if_fail (GABEDIT_IS_XYPLOT (xyplot), 0); return(xyplot->y_legends_digits); } /****************************************************************************************/ void gabedit_xyplot_set_background_color (GabeditXYPlot *xyplot, GdkColor color) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); gdk_gc_set_rgb_fg_color(xyplot->back_gc, &color); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_set_grids_attributes (GabeditXYPlot *xyplot, GabeditXYPlotGrid grid, GdkColor color, gint line_width, GdkLineStyle line_style) { GdkGC *gc; g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); switch (grid){ case GABEDIT_XYPLOT_HMAJOR_GRID: gc=xyplot->hmajor_grid_gc; break; case GABEDIT_XYPLOT_HMINOR_GRID: gc=xyplot->hminor_grid_gc; break; case GABEDIT_XYPLOT_VMAJOR_GRID: gc=xyplot->vmajor_grid_gc; break; case GABEDIT_XYPLOT_VMINOR_GRID: gc=xyplot->vminor_grid_gc; break; default: return; } gdk_gc_set_rgb_fg_color(gc, &color); gdk_gc_set_line_attributes(gc, line_width, line_style, 0 ,0); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_get_grids_attributes (GabeditXYPlot *xyplot, GabeditXYPlotGrid grid, GdkColor *color, gint *line_width, GdkLineStyle *line_style) { GdkGC *gc; GdkGCValues gc_values; g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); g_return_if_fail (color != NULL); g_return_if_fail (line_width != NULL); g_return_if_fail (line_style != NULL); switch (grid){ case GABEDIT_XYPLOT_HMAJOR_GRID: gc=xyplot->hmajor_grid_gc; break; case GABEDIT_XYPLOT_HMINOR_GRID: gc=xyplot->hminor_grid_gc; break; case GABEDIT_XYPLOT_VMAJOR_GRID: gc=xyplot->vmajor_grid_gc; break; case GABEDIT_XYPLOT_VMINOR_GRID: gc=xyplot->vminor_grid_gc; break; default: return; } gdk_gc_get_values(gc, &gc_values); *color=gc_values.foreground; *line_width=gc_values.line_width; *line_style=gc_values.line_style; } /****************************************************************************************/ static void xyplot_enable_grids (GabeditXYPlot *xyplot, GabeditXYPlotGrid grid, gboolean enable) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); switch (grid){ case GABEDIT_XYPLOT_HMAJOR_GRID: xyplot->hmajor_grid=enable; break; case GABEDIT_XYPLOT_HMINOR_GRID: xyplot->hminor_grid=enable; break; case GABEDIT_XYPLOT_VMAJOR_GRID: xyplot->vmajor_grid=enable; break; case GABEDIT_XYPLOT_VMINOR_GRID: xyplot->vminor_grid=enable; break; default: return; } xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_enable_grids (GabeditXYPlot *xyplot, GabeditXYPlotGrid grid, gboolean enable) { GtkUIManager *manager = g_object_get_data(G_OBJECT (xyplot), "Manager"); GtkAction* action = NULL; if(!manager) return; if(grid==GABEDIT_XYPLOT_HMAJOR_GRID) action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderGrid/HGridShowMajor"); if(grid==GABEDIT_XYPLOT_HMINOR_GRID) action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderGrid/HGridShowMinor"); if(grid==GABEDIT_XYPLOT_VMAJOR_GRID) action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderGrid/VGridShowMajor"); if(grid==GABEDIT_XYPLOT_VMINOR_GRID) action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderGrid/VGridShowMinor"); if(action) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action),enable); } /****************************************************************************************/ void gabedit_xyplot_add_data(GabeditXYPlot *xyplot, XYPlotData *data) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); g_return_if_fail (data != NULL); if (g_list_find (xyplot->data_list, (gpointer)data)==NULL) { xyplot->data_list=g_list_append(xyplot->data_list, (gpointer) data); data->point_pango = NULL; xyplot_build_points_data(GABEDIT_XYPLOT(xyplot), data); } } /****************************************************************************************/ void gabedit_xyplot_remove_data(GabeditXYPlot *xyplot, XYPlotData *data) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); g_return_if_fail (data != NULL); if (g_list_find (xyplot->data_list, (gpointer)data)!=NULL){ xyplot->data_list=g_list_remove_all (xyplot->data_list, (gpointer) data); } } /****************************************************************************************/ void gabedit_xyplot_configure_mouse_zoom(GabeditXYPlot *xyplot, gboolean enabled, gint button) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); xyplot->mouse_zoom_enabled=enabled; xyplot->mouse_zoom_button=button; } /****************************************************************************************/ void gabedit_xyplot_configure_mouse_distance(GabeditXYPlot *xyplot, gboolean enabled, gint button) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); xyplot->mouse_distance_enabled=enabled; xyplot->mouse_distance_button=button; } /****************************************************************************************/ void gabedit_xyplot_configure_wheel_zoom(GabeditXYPlot *xyplot, gboolean enabled, gdouble factor) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); xyplot->wheel_zoom_enabled=enabled; xyplot->wheel_zoom_factor=factor; } /****************************************************************************************/ void gabedit_xyplot_configure_mouse_displace(GabeditXYPlot *xyplot, gboolean enabled, gint button) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); xyplot->mouse_displace_enabled=enabled; xyplot->mouse_displace_button=button; } /****************************************************************************************/ void gabedit_xyplot_configure_mouse_autorange(GabeditXYPlot *xyplot, gboolean enabled, gint button) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); xyplot->mouse_autorange_enabled=enabled; xyplot->mouse_autorange_button=button; } /********************************************************************************/ static guchar *get_rgb_image(GtkWidget* drawable) { gdouble fac=255.0/65535.0; GdkColormap *colormap; gint height; gint width; gint32 pixel; GdkImage* image = NULL; GdkVisual *v; gint8 component; gint k=0; gint x; gint y; gint i; guchar* rgbbuf=NULL; colormap = gdk_window_get_colormap(GTK_WIDGET(drawable)->window); height = drawable->allocation.height; width = drawable->allocation.width; rgbbuf=(guchar *) g_malloc(3*width*height*sizeof(guchar)); if(!colormap) return NULL; if(!rgbbuf) return NULL; image = gdk_image_get(drawable->window,0,0,width,height); v = gdk_colormap_get_visual(colormap); switch(v->type) { case GDK_VISUAL_STATIC_GRAY: case GDK_VISUAL_GRAYSCALE: case GDK_VISUAL_STATIC_COLOR: case GDK_VISUAL_PSEUDO_COLOR: for(y=height-1;y>=0;y--) for(x=0;x<(gint)width;x++) { pixel = gdk_image_get_pixel(image, x, y); rgbbuf[k] = (guchar)(colormap->colors[pixel].red*fac); rgbbuf[k+1] =(guchar) (colormap->colors[pixel].green*fac); rgbbuf[k+2] =(guchar) (colormap->colors[pixel].blue*fac); k+=3; } break; case GDK_VISUAL_TRUE_COLOR: for(y=height-1;y>=0;y--) for(x=0;x<(gint)width;x++) { pixel = gdk_image_get_pixel(image, x, y); component = 0; for (i = 24; i < 32; i += v->red_prec) component |= ((pixel & v->red_mask) << (32 - v->red_shift - v->red_prec)) >> i; rgbbuf[k] = (guchar)(component); component = 0; for (i = 24; i < 32; i += v->green_prec) component |= ((pixel & v->green_mask) << (32 - v->green_shift - v->green_prec)) >> i; rgbbuf[k+1] = (guchar)(component); component = 0; for (i = 24; i < 32; i += v->blue_prec) component |= ((pixel & v->blue_mask) << (32 - v->blue_shift - v->blue_prec)) >> i; rgbbuf[k+2] = (guchar)(component); k += 3; } break; case GDK_VISUAL_DIRECT_COLOR: for(y=height-1;y>=0;y--) for(x=0;x<(gint)width;x++) { pixel = gdk_image_get_pixel(image, x, y); component = colormap->colors[((pixel & v->red_mask) << (32 - v->red_shift - v->red_prec)) >> 24].red; rgbbuf[k] = (guchar)(component*fac); component = colormap->colors[((pixel & v->green_mask) << (32 - v->green_shift - v->green_prec)) >> 24].green; rgbbuf[k+1] = (guchar)(component*fac); component = colormap->colors[((pixel & v->blue_mask) << (32 - v->blue_shift - v->blue_prec)) >> 24].blue; rgbbuf[k+2] = (guchar)(component*fac); k += 3; } break; default : { g_free(rgbbuf); return NULL; } } return rgbbuf; } /********************************************************************************/ static void WLSBL(int val,char* arr) { arr[0] = (char) (val&0xff); arr[1] = (char) ((val>>8) &0xff); arr[2] = (char) ((val>>16)&0xff); arr[3] = (char) ((val>>24)&0xff); } /**************************************************************************/ static void writeBMP(GabeditXYPlot *xyplot, gchar *fileName) { guchar rgbtmp[3]; int pad; char bmp_header[]= { 'B','M', 0,0,0,0, 0,0, 0,0, 54,0,0,0, 40,0,0,0, 0,0,0,0, 0,0,0,0, 1,0, 24,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 }; GtkWidget *drawable; FILE *file; int i; int j; int width; int height; guchar *rgbbuf; file = fopen(fileName,"wb"); if (!file) return; drawable = GTK_WIDGET(xyplot); rgbbuf = get_rgb_image(drawable); if (!rgbbuf) { fclose(file); return; } width = drawable->allocation.width; height = drawable->allocation.height; /* The number of bytes on a screenline should be wholly devisible by 4 */ pad = (width*3)%4; if (pad) pad = 4 - pad; WLSBL((int) (3*width+pad)*height+54,bmp_header+2); WLSBL((int) width,bmp_header+18); WLSBL((int) height,bmp_header+22); WLSBL((int) 3*width*height,bmp_header+34); {int it = fwrite(bmp_header,1,54,file);} for (i=0;iallocation.width; height = widget->allocation.height; pixbuf = gdk_pixbuf_get_from_drawable(NULL, widget->window, NULL, 0, 0, 0, 0, width, height); if(pixbuf) { GdkPixbuf *pixbufNew = NULL; guchar color[3] = {255, 255, 255}; GdkColor c; GdkGCValues gc_values; GdkColormap *colormap; colormap = gdk_window_get_colormap(widget->window); gdk_gc_get_values(xyplot->back_gc, &gc_values); gdk_colormap_query_color(colormap, gc_values.foreground.pixel,&c); color[0] = (guchar)(SCALE(c.red)*255); color[1] = (guchar)(SCALE(c.green)*255); color[2] = (guchar)(SCALE(c.blue)*255); pixbufNew = gdk_pixbuf_add_alpha(pixbuf, TRUE, color[0], color[1], color[2]); if(pixbufNew) gdk_pixbuf_save(pixbufNew, fileName, "png", &error, NULL); else gdk_pixbuf_save(pixbuf, fileName, "png", &error, NULL); g_object_unref (pixbuf); g_object_unref (pixbufNew); } } /****************************************************************************************/ void gabedit_xyplot_save_image(GabeditXYPlot *xyplot, gchar *fileName, gchar* type) { GtkWidget* widget = GTK_WIDGET(xyplot); int width; int height; GError *error = NULL; GdkPixbuf *pixbuf = NULL; if(fileName && type && !strcmp(type,"bmp")) { writeBMP(xyplot, fileName); return; } if(fileName && type && !strcmp(type,"tpng")) { writeTransparentPNG(xyplot, fileName); return; } width = widget->allocation.width; height = widget->allocation.height; pixbuf = gdk_pixbuf_get_from_drawable(NULL, widget->window, NULL, 0, 0, 0, 0, width, height); if(pixbuf) { if(!fileName) { GtkClipboard * clipboard; clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); if(clipboard) { gtk_clipboard_clear(clipboard); gtk_clipboard_set_image(clipboard, pixbuf); } } else { if(type && strstr(type,"j") && strstr(type,"g") ) gdk_pixbuf_save(pixbuf, fileName, type, &error, "quality", "100", NULL); else if(type && strstr(type,"png")) gdk_pixbuf_save(pixbuf, fileName, type, &error, "compression", "5", NULL); else if(type && (strstr(type,"tif") || strstr(type,"tiff"))) gdk_pixbuf_save(pixbuf, fileName, "tiff", &error, "compression", "1", NULL); else gdk_pixbuf_save(pixbuf, fileName, type, &error, NULL); } g_object_unref (pixbuf); } } /****************************************************************************************/ static void xyplot_calculate_sizes (GabeditXYPlot *xyplot) { GtkWidget *widget; gint left = 10; gint right = 10; gint top = 5; gint bottom = 5; g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); widget = GTK_WIDGET(xyplot); left += 0.75*((gdouble)xyplot->y_legends_width); right += 0.75*((gdouble)xyplot->y_legends_width); top += 0.5*((gdouble)xyplot->x_legends_height); bottom += 0.5*((gdouble)xyplot->x_legends_height); if(xyplot->show_left_legends) left = xyplot->length_ticks*4+1.5*((gdouble)xyplot->y_legends_width)+1.0*((gdouble)xyplot->v_label_height); if(xyplot->show_right_legends) right = xyplot->length_ticks*4+1.5*((gdouble)xyplot->y_legends_width)+1.0*((gdouble)xyplot->v_label_height); if(xyplot->show_top_legends) top = xyplot->length_ticks*2+1.5*((gdouble)xyplot->x_legends_height)+1.0*((gdouble)xyplot->h_label_height); if(xyplot->show_bottom_legends) bottom = xyplot->length_ticks*2+1.5*((gdouble)xyplot->x_legends_height)+1.0*((gdouble)xyplot->h_label_height); left += (gint)(xyplot->left_margins/100.0*widget->allocation.width); right += (gint)(xyplot->right_margins/100.0*widget->allocation.width); top += (gint)(xyplot->top_margins/100.0*widget->allocation.height); bottom += (gint)(xyplot->bottom_margins/100.0*widget->allocation.height); xyplot->plotting_rect.x = left; xyplot->plotting_rect.y = top; xyplot->plotting_rect.width=widget->allocation.width -left - right; xyplot->plotting_rect.height=widget->allocation.height - top - bottom ; if (xyplot->hmajor_ticks>1){ xyplot->d_hmajor=((gdouble)xyplot->plotting_rect.width)/((gdouble)xyplot->hmajor_ticks-1.0); xyplot->d_hminor=((gdouble)xyplot->d_hmajor)/((gdouble)xyplot->hminor_ticks+1.0); } if (xyplot->vmajor_ticks>1){ xyplot->d_vmajor=((gdouble)xyplot->plotting_rect.height)/((gdouble)xyplot->vmajor_ticks-1.0); xyplot->d_vminor=((gdouble)xyplot->d_vmajor)/((gdouble)xyplot->vminor_ticks+1.0); } /* Creating the plotting area (everytime the plotting area's size is changed, the size of the pismap must be changed too, so, a new one, with the right size is created*/ if (xyplot->plotting_area!=NULL) g_object_unref(G_OBJECT(xyplot->plotting_area)); if (xyplot->cairo_widget!=NULL) cairo_destroy (xyplot->cairo_widget); if (xyplot->cairo_area!=NULL) cairo_destroy (xyplot->cairo_area); if (GTK_WIDGET_REALIZED(widget)) { xyplot->plotting_area=gdk_pixmap_new(widget->window, xyplot->plotting_rect.width, xyplot->plotting_rect.height, -1); xyplot->cairo_area = gdk_cairo_create (xyplot->plotting_area); xyplot->cairo_widget = gdk_cairo_create (widget->window); } reset_object_text_pixels(xyplot); reset_object_line_pixels(xyplot); reset_object_image_pixels(xyplot); } /****************************************************************************************/ static void value2pixel(GabeditXYPlot *xyplot, gdouble xv, gdouble yv, gint *x, gint *y) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); *x=(xv-xyplot->xmin)*((gdouble)xyplot->plotting_rect.width)/(xyplot->xmax-xyplot->xmin); if(xyplot->reflect_x) *x = xyplot->plotting_rect.width - *x; *y=(yv-xyplot->ymin)*((gdouble)xyplot->plotting_rect.height)/(xyplot->ymax-xyplot->ymin); if(xyplot->reflect_y) *y = xyplot->plotting_rect.height - *y; } /****************************************************************************************/ static void pixel2value(GabeditXYPlot *xyplot, gint xp, gint yp, gdouble *x, gdouble *y) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); gdouble xxp = (gdouble)xp; gdouble yyp = (gdouble)yp; if(xyplot->reflect_x) xxp = xyplot->plotting_rect.width-xxp; if(xyplot->reflect_y) yyp = xyplot->plotting_rect.height-yyp; *x=xyplot->xmin+((gdouble)xxp)*(xyplot->xmax-xyplot->xmin)/((gdouble)xyplot->plotting_rect.width); *y=xyplot->ymin+((gdouble)yyp)*(xyplot->ymax-xyplot->ymin)/((gdouble)xyplot->plotting_rect.height); } /****************************************************************************************/ static void xyplot_calculate_legends_sizes(GabeditXYPlot *xyplot) { GtkWidget *widget; g_return_if_fail (xyplot != NULL); widget=GTK_WIDGET(xyplot); if (xyplot->x_legends_digits==0 && xyplot->y_legends_digits==0){ xyplot->x_legends_width=0; xyplot->x_legends_height=0; xyplot->y_legends_width=0; xyplot->y_legends_height=0; return; } if (xyplot->h_legends) { pango_layout_set_font_description (xyplot->h_legends[0], widget->style->font_desc); pango_layout_get_size(xyplot->h_legends[0], &(xyplot->x_legends_width), &(xyplot->x_legends_height)); } if (xyplot->v_legends) { gint i; pango_layout_set_font_description (xyplot->v_legends[0], widget->style->font_desc); pango_layout_get_size(xyplot->v_legends[0], &(xyplot->y_legends_width), &(xyplot->y_legends_height)); for (i=1; ivmajor_ticks; i++) { gint w,h; pango_layout_set_font_description (xyplot->v_legends[i], widget->style->font_desc); pango_layout_get_size(xyplot->v_legends[i], &w,&h); if(w>xyplot->y_legends_width) xyplot->y_legends_width=w; } } xyplot->x_legends_width/=PANGO_SCALE; xyplot->x_legends_height/=PANGO_SCALE; xyplot->y_legends_width/=PANGO_SCALE; xyplot->y_legends_height/=PANGO_SCALE; xyplot->h_label_width = 0; xyplot->h_label_height =0; if (xyplot->h_label) { pango_layout_set_font_description (xyplot->h_label, widget->style->font_desc); pango_layout_get_size(xyplot->h_label, &(xyplot->h_label_width), &(xyplot->h_label_height)); xyplot->h_label_width /=PANGO_SCALE; xyplot->h_label_height /=PANGO_SCALE; } xyplot->v_label_width = 0; xyplot->v_label_height =0; if (xyplot->v_label) { pango_layout_set_font_description (xyplot->v_label, widget->style->font_desc); pango_layout_get_size(xyplot->v_label, &(xyplot->v_label_width), &(xyplot->v_label_height)); xyplot->v_label_width /=PANGO_SCALE; xyplot->v_label_height /=PANGO_SCALE; } } /****************************************************************************************/ static void xyplot_build_legends(GabeditXYPlot *xyplot) { GtkWidget *widget; gint loop; g_return_if_fail (xyplot != NULL); widget=GTK_WIDGET(xyplot); if ( (xyplot->hmajor_ticks > 1) && (xyplot->x_legends_digits != 0)){ xyplot->d_hlegend=fabs(xyplot->xmax-xyplot->xmin)/((gdouble)xyplot->hmajor_ticks-1.0); xyplot->h_legends=g_new(PangoLayout*, xyplot->hmajor_ticks); if(xyplot->h_legends_str) g_free(xyplot->h_legends_str); xyplot->h_legends_str = g_malloc( (sizeof(gchar*) * xyplot->hmajor_ticks ) ); for (loop=0; loophmajor_ticks; loop++){ xyplot->h_legends_str[loop] = g_malloc( (sizeof(gchar) * (xyplot->x_legends_digits+1)) ); snprintf(xyplot->h_legends_str[loop] , xyplot->x_legends_digits+1, "%lf", xyplot->xmin + (gdouble)loop*xyplot->d_hlegend); xyplot->h_legends_str[loop] [xyplot->x_legends_digits]='\0'; xyplot->h_legends[loop]=gtk_widget_create_pango_layout (widget, xyplot->h_legends_str[loop]); } } if ((xyplot->vmajor_ticks > 1) && (xyplot->y_legends_digits != 0) ){ xyplot->d_vlegend=fabs(xyplot->ymax-xyplot->ymin)/((gdouble)xyplot->vmajor_ticks-1.0); xyplot->v_legends=g_new(PangoLayout*, xyplot->vmajor_ticks); if(xyplot->v_legends_str) g_free(xyplot->v_legends_str); xyplot->v_legends_str=g_malloc( (sizeof(gchar*) * xyplot->vmajor_ticks)); for (loop=0; loopvmajor_ticks; loop++){ xyplot->v_legends_str[loop]=g_malloc( (sizeof(gchar) * (xyplot->y_legends_digits+1))); snprintf(xyplot->v_legends_str[loop], xyplot->y_legends_digits+1, "%lf", xyplot->ymin + (gdouble)loop*xyplot->d_vlegend); xyplot->v_legends_str[loop][xyplot->y_legends_digits]='\0'; xyplot->v_legends[loop]=gtk_widget_create_pango_layout (widget, xyplot->v_legends_str[loop]); } } xyplot->h_label = get_pango_str(xyplot, xyplot->h_label_str); xyplot->v_label = get_pango_str(xyplot, xyplot->v_label_str); xyplot_calculate_legends_sizes(xyplot); } /****************************************************************************************/ static void xyplot_free_legends(GabeditXYPlot *xyplot) { gint loop; g_return_if_fail (xyplot != NULL); if (xyplot->h_legends!=NULL){ for (loop=0; loophmajor_ticks; loop++) if (xyplot->h_legends[loop]!=NULL) g_object_unref(G_OBJECT(xyplot->h_legends[loop])); g_free(xyplot->h_legends); xyplot->h_legends=NULL; } if (xyplot->v_legends!=NULL){ for (loop=0; loopvmajor_ticks; loop++) if (xyplot->v_legends[loop]!=NULL) g_object_unref(G_OBJECT(xyplot->v_legends[loop])); g_free(xyplot->v_legends); xyplot->v_legends=NULL; } if (xyplot->v_legends_str!=NULL) { for (loop=0; loopvmajor_ticks; loop++) g_free(xyplot->v_legends_str[loop]); g_free(xyplot->v_legends_str); } if (xyplot->h_legends_str!=NULL) { for (loop=0; loophmajor_ticks; loop++) g_free(xyplot->h_legends_str[loop]); g_free(xyplot->h_legends_str); } xyplot->v_legends_str = NULL; xyplot->h_legends_str = NULL; } /****************************************************************************************/ static void xyplot_build_points_data(GabeditXYPlot *xyplot, XYPlotData *data) { GtkWidget *widget; if (xyplot == NULL) return; if(xyplot->data_list == NULL) return; widget=GTK_WIDGET(xyplot); if(data->point_pango != NULL) g_object_unref(G_OBJECT(data->point_pango)); data->point_pango = gtk_widget_create_pango_layout (widget, data->point_str); if(data->point_pango) { PangoRectangle logical_rect; pango_layout_set_justify(data->point_pango,TRUE); pango_layout_set_alignment(data->point_pango,PANGO_ALIGN_CENTER); pango_layout_set_alignment(data->point_pango,PANGO_ALIGN_LEFT); pango_layout_set_markup(data->point_pango, data->point_str, -1); gchar fontName[100]; PangoAttrList *attr_list; PangoFontDescription *font_desc = NULL; sprintf(fontName,"sans %d",2+data->point_size*2); font_desc = pango_font_description_from_string (fontName); pango_layout_set_font_description (data->point_pango, font_desc); pango_layout_context_changed(data->point_pango); pango_layout_get_pixel_extents(data->point_pango, NULL, &logical_rect); pango_layout_get_size(data->point_pango, &(data->point_width), &(data->point_height)); data->point_width/=PANGO_SCALE; data->point_height/=PANGO_SCALE; /* printf("%d %d\n",logical_rect.x,logical_rect.y);*/ data->point_width =logical_rect.width; data->point_height =logical_rect.height; pango_font_description_free (font_desc); /* set color */ attr_list = pango_layout_get_attributes (data->point_pango); if (attr_list == NULL) attr_list = pango_attr_list_new (); else pango_attr_list_ref (attr_list); pango_attr_list_insert(attr_list, pango_attr_foreground_new( data->point_color.red, data->point_color.green, data->point_color.blue) ); pango_layout_set_attributes (data->point_pango, attr_list); pango_attr_list_unref (attr_list); } } /****************************************************************************************/ static void xyplot_reflect_x (GabeditXYPlot *xyplot, gboolean reflection) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if(xyplot->reflect_x == reflection) return; xyplot->reflect_x = reflection; reset_object_text_pixels(xyplot); reset_object_line_pixels(xyplot); reset_object_image_pixels(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_reflect_x (GabeditXYPlot *xyplot, gboolean enable) { GtkUIManager *manager = g_object_get_data(G_OBJECT (xyplot), "Manager"); GtkAction* action = NULL; if(manager) action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderDirections/DirectionReflectX"); if(action) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action),enable); } /****************************************************************************************/ static void xyplot_reflect_y (GabeditXYPlot *xyplot, gboolean reflection) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if(xyplot->reflect_y == reflection) return; xyplot->reflect_y = reflection; reset_object_text_pixels(xyplot); reset_object_line_pixels(xyplot); reset_object_image_pixels(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_reflect_y (GabeditXYPlot *xyplot, gboolean enable) { GtkUIManager *manager = g_object_get_data(G_OBJECT (xyplot), "Manager"); GtkAction* action = NULL; if(manager) action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderDirections/DirectionReflectY"); if(action) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action),enable); } /****************************************************************************************/ static void xyplot_show_left_legends (GabeditXYPlot *xyplot, gboolean show) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if(xyplot->show_left_legends == show) return; xyplot->show_left_legends = show; xyplot_build_legends(xyplot); xyplot_calculate_legends_sizes(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_show_left_legends (GabeditXYPlot *xyplot, gboolean enable) { GtkUIManager *manager = g_object_get_data(G_OBJECT (xyplot), "Manager"); GtkAction* action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderLegends/LegendShowLeft"); if(action) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action),enable); } /****************************************************************************************/ static void xyplot_show_right_legends (GabeditXYPlot *xyplot, gboolean show) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if(xyplot->show_right_legends == show) return; xyplot->show_right_legends = show; xyplot_build_legends(xyplot); xyplot_calculate_legends_sizes(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_show_right_legends (GabeditXYPlot *xyplot, gboolean enable) { GtkUIManager *manager = g_object_get_data(G_OBJECT (xyplot), "Manager"); GtkAction* action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderLegends/LegendShowRight"); if(action) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action),enable); } /****************************************************************************************/ static void xyplot_show_top_legends (GabeditXYPlot *xyplot, gboolean show) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if(xyplot->show_top_legends == show) return; xyplot->show_top_legends = show; xyplot_build_legends(xyplot); xyplot_calculate_legends_sizes(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_show_top_legends (GabeditXYPlot *xyplot, gboolean enable) { GtkUIManager *manager = g_object_get_data(G_OBJECT (xyplot), "Manager"); GtkAction* action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderLegends/LegendShowTop"); if(action) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action),enable); } /****************************************************************************************/ static void xyplot_show_bottom_legends (GabeditXYPlot *xyplot, gboolean show) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if(xyplot->show_bottom_legends == show) return; xyplot->show_bottom_legends = show; xyplot_build_legends(xyplot); xyplot_calculate_legends_sizes(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_show_bottom_legends (GabeditXYPlot *xyplot, gboolean enable) { GtkUIManager *manager = g_object_get_data(G_OBJECT (xyplot), "Manager"); GtkAction* action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderLegends/LegendShowBottom"); if(action) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action),enable); } /****************************************************************************************/ static void xyplot_show_rectangle_legends (GabeditXYPlot *xyplot, gboolean show) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if(xyplot->show_rectangle_legends == show) return; xyplot->show_rectangle_legends = show; xyplot_build_legends(xyplot); xyplot_calculate_legends_sizes(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_show_rectangle_legends (GabeditXYPlot *xyplot, gboolean enable) { GtkUIManager *manager = g_object_get_data(G_OBJECT (xyplot), "Manager"); GtkAction* action = gtk_ui_manager_get_action (manager, "/MenuXYPlot/Render/RenderLegends/LegendShowRectangle"); if(action) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action),enable); } /****************************************************************************************/ void gabedit_xyplot_set_font (GabeditXYPlot *xyplot, gchar* fontName) { GtkWidget* widget = NULL; g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); PangoFontDescription *font_desc = pango_font_description_from_string (fontName); widget=GTK_WIDGET(xyplot); if(font_desc) { xyplot->font_size = xyplot_get_font_size (widget, font_desc); gtk_widget_modify_font (widget, font_desc); xyplot_build_legends(xyplot); xyplot_calculate_legends_sizes(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } } /****************************************************************************************/ void gabedit_xyplot_set_x_label (GabeditXYPlot *xyplot, G_CONST_RETURN gchar* str) { GtkWidget* widget = NULL; g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); widget=GTK_WIDGET(xyplot); if(xyplot->h_label_str) g_free(xyplot->h_label_str); if(str && strlen(str)>0) { xyplot->h_label_str = g_strdup(str); } else { xyplot->h_label_str = NULL; } xyplot_build_legends(xyplot); xyplot_calculate_legends_sizes(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_set_y_label (GabeditXYPlot *xyplot, G_CONST_RETURN gchar* str) { GtkWidget* widget = NULL; g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); widget=GTK_WIDGET(xyplot); if(xyplot->v_label_str) g_free(xyplot->v_label_str); if(str && strlen(str)>0) { xyplot->v_label_str = g_strdup(str); } else xyplot->v_label_str = NULL; xyplot_build_legends(xyplot); xyplot_calculate_legends_sizes(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ static gboolean xyplot_motion_notify_event(GtkWidget *xyplot, GdkEventMotion *event, gpointer user_data) { double xv, yv; int x, y; char str[50]; int context_id; GtkWidget* statusbar = g_object_get_data(G_OBJECT (xyplot), "StatusBar"); x=event->x; y=event->y; if (event->is_hint || (event->window != xyplot->window)) gdk_window_get_pointer (xyplot->window, &x, &y, NULL); if(gabedit_xyplot_get_point(GABEDIT_XYPLOT(xyplot), x, y, &xv, &yv)) snprintf(str, 50, "Mouse position: %f, %f", xv, yv); else sprintf(str, " "); context_id=gtk_statusbar_get_context_id (GTK_STATUSBAR(statusbar), "mouse position"); gtk_statusbar_push (GTK_STATUSBAR(statusbar), context_id, str); return TRUE; } /****************************************************************************************/ GtkWidget* gabedit_xyplot_new_window(gchar* title, GtkWidget*parent) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* table = NULL; GtkWidget* box = NULL; GtkWidget* frame_xyplot = NULL; GtkWidget* xyplot = NULL; GtkWidget *statusbar = NULL; gtk_window_set_title (GTK_WINDOW (window), title); gtk_signal_connect (GTK_OBJECT (window), "delete_event", G_CALLBACK (gtk_widget_destroy), NULL); gtk_container_set_border_width (GTK_CONTAINER (window), 2); gtk_window_set_default_size (GTK_WINDOW(window),2*gdk_screen_width()/3,2*gdk_screen_height()/3); table=gtk_table_new(3, 1, FALSE); gtk_container_add(GTK_CONTAINER(window), table); gtk_widget_show(table); frame_xyplot=gtk_frame_new("XY GabeditPlot"); gtk_table_attach(GTK_TABLE(table), frame_xyplot, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show(frame_xyplot); xyplot = gabedit_xyplot_new(); gtk_container_add(GTK_CONTAINER(frame_xyplot), xyplot); gtk_widget_show (xyplot); g_object_set_data (G_OBJECT (window), "XYPLOT",xyplot); box=gtk_hbox_new(FALSE,0); gtk_table_attach(GTK_TABLE(table), box, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 5, 5); gtk_widget_show (box); g_object_set_data(G_OBJECT (xyplot), "Box", box); statusbar=gtk_statusbar_new(); gtk_table_attach(GTK_TABLE(table), statusbar, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 5, 5); gtk_widget_show (statusbar); g_object_set_data(G_OBJECT (xyplot), "StatusBar", statusbar); if(parent) gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parent)); gtk_widget_show (window); gabedit_xyplot_set_range(GABEDIT_XYPLOT(xyplot), 0.0, 10, 0, 20); gabedit_xyplot_set_x_legends_digits(GABEDIT_XYPLOT(xyplot), 5); gabedit_xyplot_set_y_legends_digits(GABEDIT_XYPLOT(xyplot), 5); gabedit_xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_HMAJOR_GRID, FALSE); gabedit_xyplot_enable_grids (GABEDIT_XYPLOT(xyplot), GABEDIT_XYPLOT_VMAJOR_GRID, FALSE); gabedit_xyplot_show_top_legends (GABEDIT_XYPLOT(xyplot),FALSE); gabedit_xyplot_show_right_legends (GABEDIT_XYPLOT(xyplot),FALSE); g_signal_connect_after(G_OBJECT(xyplot), "motion-notify-event", G_CALLBACK(xyplot_motion_notify_event), NULL); g_object_set_data(G_OBJECT (xyplot), "Window", window); g_object_set_data(G_OBJECT (window), "Box", box); gabedit_xyplot_set_font (GABEDIT_XYPLOT(xyplot), "sans 12"); return window; } /****************************************************************************************/ void gabedit_xyplot_add_data_peaks(GabeditXYPlot *xyplot, gint numberOfPoints, gdouble* X, gdouble* Y, GdkColor* color) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); g_return_if_fail (X != NULL); g_return_if_fail (Y != NULL); if(numberOfPoints>0) { gint loop; XYPlotData *data = g_malloc(sizeof(XYPlotData)); gint red = 0; gint green = 0; gint blue = 0; gdouble xmin = 0; gdouble xmax = 0; if(color) { red = (color->red); green = (color->green); blue = (color->blue); } else { GdkColor c = get_fore_color(xyplot); red = c.red; green = c.green; blue = c.blue; } data->size=3*numberOfPoints+2; data->x = g_malloc(data->size*sizeof(gdouble)); data->y = g_malloc(data->size*sizeof(gdouble)); xmin = X[0]; xmax = X[0]; for(loop = 1; loopX[loop]) xmin = X[loop]; if(xmaxx[0]=xmin; data->y[0]=0; data->x[data->size-1]=xmax; data->y[data->size-1]=0; for (loop=0; loopx[iold]=X[loop]; data->y[iold]=0; data->x[iold+1]=X[loop]; data->y[iold+1]=Y[loop]; data->x[iold+2]=X[loop]; data->y[iold+2]=0; } sprintf(data->point_str,"+"); data->point_pango = NULL; xyplot_build_points_data(GABEDIT_XYPLOT(xyplot), data); data->point_size=0; data->line_width=2; data->point_color.red=green; data->point_color.green=red; data->point_color.blue=blue; data->line_color.red=red; data->line_color.green=green; data->line_color.blue=blue; data->line_style=GDK_LINE_SOLID; gabedit_xyplot_add_data (GABEDIT_XYPLOT(xyplot), data); gabedit_xyplot_set_autorange(GABEDIT_XYPLOT(xyplot), NULL); } } /****************************************************************************************/ static void xyplot_curve_noconv(GabeditXYPlot *xyplot, gint numberOfPoints, gdouble* X, gdouble* Y, GdkColor* color) { gint loop; gint red = 0; gint green = 0; gint blue = 0; XYPlotData *data = g_malloc(sizeof(XYPlotData)); if(color) { red = (color->red); green = (color->green); blue = (color->blue); } else { GdkColor c = get_fore_color(xyplot); red = c.red; green = c.green; blue = c.blue; } data->size=numberOfPoints; if(data->size>0) { data->x = g_malloc(data->size*sizeof(gdouble)); data->y = g_malloc(data->size*sizeof(gdouble)); } for (loop=0; loopsize; loop++){ data->x[loop]=X[loop]; data->y[loop]=Y[loop]; } sprintf(data->point_str,"+"); data->point_size=0; data->line_width=2; data->point_color.red=red; data->point_color.green=green; data->point_color.blue=blue; data->line_color.red=green; data->line_color.green=red; data->line_color.blue=blue; data->line_style=GDK_LINE_SOLID; gabedit_xyplot_add_data (GABEDIT_XYPLOT(xyplot), data); gabedit_xyplot_set_autorange(GABEDIT_XYPLOT(xyplot), NULL); } /********************************************************************************/ static gdouble lorentzianLineshape(gdouble rel_offset) { return 1.0 / (1.0 + rel_offset * rel_offset); } /********************************************************************************/ static gdouble gaussianLineshape(gdouble rel_offset) { gdouble nln2 = -log(2.0); return exp(nln2 * rel_offset * rel_offset); } /****************************************************************************************/ static void build_data_xyplot_curve_withconv(GabeditXYPlot *xyplot, gint numberOfPoints, gdouble* X, gdouble* Y, gdouble halfWidth, gdouble (*lineshape)(gdouble), GdkColor* color) { gint i; gint j; gint n = 0; gdouble xx ; gdouble h0 = halfWidth/20; gint red = 0; gint green = 0; gint blue = 0; XYPlotData *data = g_malloc(sizeof(XYPlotData)); gdouble xmin = 0; gdouble xmax = 0; if(color) { red = (color->red); green = (color->green); blue = (color->blue); } else { GdkColor c = get_fore_color(xyplot); red = c.red; green = c.green; blue = c.blue; } data->size=0; data->point_size=0; data->line_width=2; data->point_color.red=green; data->point_color.green=red; data->point_color.blue=blue; data->line_color.red=red; data->line_color.green=green; data->line_color.blue=blue; data->line_style=GDK_LINE_SOLID; data->x = NULL; data->y = NULL; if(numberOfPoints<1||!X||!Y) return; xmin = X[0]; xmax = X[0]; for (i=0; ixmax) xmax = X[i]; } xmin -= 10*halfWidth; xmax += 10*halfWidth; xx = xmin; h0 = halfWidth/10; n = (gint)((xmax-xmin)/h0+0.5)+numberOfPoints; if(n>0) data->x = (gdouble*)g_malloc(sizeof(gdouble)*n); if(numberOfPoints>0 && n>0) do { gdouble dmin = 0.0; gdouble d = 0.0; gint jmin = 0; for (j=0; j < numberOfPoints; j++) { gdouble center = (gdouble) X[j]; d = fabs(xx - center); if(dx[data->size] = xx; if(dminx[data->size] = xx; xx += h0+1e-8; } else { xx = (gdouble) X[jmin]; data->x[data->size] = xx; xx += h0+1e-8; } } else { if(dmin> 5*halfWidth) xx += h0+dmin/5; else xx += h0; } data->size++; }while(xxsizesize>0) { data->x = (gdouble*)g_realloc(data->x,sizeof(gdouble)*data->size); data->y = (gdouble*)g_malloc(sizeof(gdouble)*data->size); } if(numberOfPoints>0) for (i=0; i < data->size; i++) { gdouble yy = 0.0; for (j=0; j < numberOfPoints; j++) { gdouble center = (gdouble) X[j]; gdouble rel_offset = (data->x[i] - center) / halfWidth; yy += Y[j]*lineshape(rel_offset); } data->y[i] = yy; } sprintf(data->point_str,"+"); data->point_pango = NULL; xyplot_build_points_data(GABEDIT_XYPLOT(xyplot), data); gabedit_xyplot_add_data (GABEDIT_XYPLOT(xyplot), data); gabedit_xyplot_set_autorange(GABEDIT_XYPLOT(xyplot), NULL); } /****************************************************************************************/ void gabedit_xyplot_add_data_conv(GabeditXYPlot *xyplot, gint numberOfPoints, gdouble* X, gdouble* Y, gdouble halfWidth,GabeditXYPlotConvType convType, GdkColor* color) { switch(convType) { case GABEDIT_XYPLOT_CONV_NONE : xyplot_curve_noconv(xyplot, numberOfPoints, X, Y, color); break; case GABEDIT_XYPLOT_CONV_LORENTZ : build_data_xyplot_curve_withconv(xyplot, numberOfPoints, X, Y, halfWidth, lorentzianLineshape, color); break; case GABEDIT_XYPLOT_CONV_GAUSS : build_data_xyplot_curve_withconv(xyplot, numberOfPoints, X, Y, halfWidth, gaussianLineshape, color); } } /****************************************************************************************/ void gabedit_xyplot_help() { GtkWidget* dialog = NULL; GtkWidget *label, *button; GtkWidget *frame, *vboxframe; GtkWidget* hbox; gchar* tmp = g_strdup_printf( _( "Mouse buttons and Keys :\n" "\t Right button : popup menu\n" "\t Middle button : zoom\n" "\t Left button + Control key : zoom\n" "\t Left button + t key : insert a text\n" "\t Left button + l key : insert a line (arrow)\n" "\t Left button + i key : insert an image from a png file\n" "\t Left button + r key : remove selected image/text/line\n" "\t Ctrl + V (Alt + V) : insert an image from clipboard\n" "\t Left button + Shift key : compute distance between 2 points\n" "\t Left button, double click : select a data to change\n" "\t Left button clicked on bottom right corner + move : change the width/height for an image\n" "\n\n" "Popup menu :\n" "\t Set : ticks, margins, ranges, X and Y labels, digits, font size, auto ranges\n" "\t Render : grids, directions, legends\n" "\t Data : read data from multiple format(txt 2 or more, JDX, jMRUI)\n" "\t A backspace ligne in a txt file is interpreted as a beginning new data\n" "\t Save all data at a txt file\n" "\t Remove all all\n" "\t change data (scale, shift, ...)\n" "\t Objects : for insert/delete texts, lines or images\n" "\t Screen capture : BMP, JPEG, PNG, Transparent PNG, TIF\n" "\t Export image : SVG, PS, EPS and PDF (this is a real export, not a capture)\n" "\t Read : read all (parameters, data, texts, lines, images) from a Gabedit file\n" "\t Save : save all (parameters, data, texts, lines, images) in Gabedit file\n" "\t Help : for obtain this window (You guessed :))\n" "\t Close : very simple :)\n" ) ); dialog = gtk_dialog_new(); gtk_widget_realize(GTK_WIDGET(dialog)); gtk_window_set_title(GTK_WINDOW(dialog),_("Help")); g_signal_connect(G_OBJECT(dialog), "delete_event", (GCallback)gtk_widget_destroy, NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(dialog)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = gtk_vbox_new (FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), vboxframe); label = gtk_label_new(tmp); gtk_widget_show (label); gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT); hbox = gtk_hbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (vboxframe), hbox, FALSE, FALSE, 5); gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 5); gtk_widget_show (hbox); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(dialog)->action_area), FALSE); button = gtk_button_new_from_stock (GTK_STOCK_OK); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(dialog)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(dialog)); gtk_widget_show_all(dialog); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); g_free(tmp); } /****************************************************************************************/ void gabedit_xyplot_set_data_line_width (GabeditXYPlot *xyplot, gdouble line_width) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if(line_width<0) line_width = 0; gtk_widget_queue_draw(GTK_WIDGET(xyplot)); XYPlotData *current_data; GList *current_node; if (xyplot->data_list ){ current_node=g_list_first(xyplot->data_list); current_data=(XYPlotData*)current_node->data; for (; current_node!=NULL; current_node=current_node->next) { current_data=(XYPlotData*)current_node->data; current_data->line_width = line_width; } } xyplot_free_legends(xyplot); xyplot_build_legends(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_set_data_point_size (GabeditXYPlot *xyplot, gdouble point_size) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if(point_size<0) point_size = 0; gtk_widget_queue_draw(GTK_WIDGET(xyplot)); XYPlotData *current_data; GList *current_node; if (xyplot->data_list ){ current_node=g_list_first(xyplot->data_list); current_data=(XYPlotData*)current_node->data; for (; current_node!=NULL; current_node=current_node->next) { current_data=(XYPlotData*)current_node->data; current_data->point_size = point_size; xyplot_build_points_data(GABEDIT_XYPLOT(xyplot), current_data); } } xyplot_free_legends(xyplot); xyplot_build_legends(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_set_data_point_type (GabeditXYPlot *xyplot, gchar c) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); XYPlotData *current_data; GList *current_node; if (xyplot->data_list ){ current_node=g_list_first(xyplot->data_list); current_data=(XYPlotData*)current_node->data; for (; current_node!=NULL; current_node=current_node->next) { current_data=(XYPlotData*)current_node->data; sprintf(current_data->point_str,"%c",c); xyplot_build_points_data(GABEDIT_XYPLOT(xyplot), current_data); } } xyplot_free_legends(xyplot); xyplot_build_legends(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_set_data_point_color (GabeditXYPlot *xyplot, gdouble red, gdouble green, gdouble blue) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); XYPlotData *current_data; GList *current_node; if (xyplot->data_list ){ current_node=g_list_first(xyplot->data_list); current_data=(XYPlotData*)current_node->data; for (; current_node!=NULL; current_node=current_node->next) { current_data=(XYPlotData*)current_node->data; current_data->point_color.red = SCALE2(red); current_data->point_color.green = SCALE2(green); current_data->point_color.blue = SCALE2(blue); xyplot_build_points_data(GABEDIT_XYPLOT(xyplot), current_data); } } xyplot_free_legends(xyplot); xyplot_build_legends(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /********************************************************************************/ void gabedit_xyplot_add_new_data(GtkWidget* xyplot, gint numberOfPoints, gdouble* X, gdouble* Y) { add_new_data(xyplot, numberOfPoints, X, Y); } /****************************************************************************************/ void gabedit_xyplot_set_last_data_line_width (GabeditXYPlot *xyplot, gdouble line_width) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if(line_width<0) line_width = 0; gtk_widget_queue_draw(GTK_WIDGET(xyplot)); XYPlotData *current_data; GList *current_node; if (xyplot->data_list ){ current_node=g_list_first(xyplot->data_list); current_data=(XYPlotData*)current_node->data; for (; current_node!=NULL; current_node=current_node->next) { current_data=(XYPlotData*)current_node->data; } current_data->line_width = line_width; } xyplot_free_legends(xyplot); xyplot_build_legends(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_set_last_data_point_size (GabeditXYPlot *xyplot, gdouble point_size) { g_return_if_fail (xyplot != NULL); g_return_if_fail (GABEDIT_IS_XYPLOT (xyplot)); if(point_size<0) point_size = 0; gtk_widget_queue_draw(GTK_WIDGET(xyplot)); XYPlotData *current_data; GList *current_node; if (xyplot->data_list ){ current_node=g_list_first(xyplot->data_list); current_data=(XYPlotData*)current_node->data; for (; current_node!=NULL; current_node=current_node->next) { current_data=(XYPlotData*)current_node->data; } current_data->point_size = point_size; xyplot_build_points_data(GABEDIT_XYPLOT(xyplot), current_data); } xyplot_free_legends(xyplot); xyplot_build_legends(xyplot); xyplot_calculate_sizes(xyplot); gtk_widget_queue_draw(GTK_WIDGET(xyplot)); } /****************************************************************************************/ void gabedit_xyplot_add_object_text (GabeditXYPlot *xyplot, gdouble x, gdouble y, gdouble angle, G_CONST_RETURN gchar* str) { add_object_text(GABEDIT_XYPLOT(xyplot), x, y, angle, str); } GabeditSrc250/src/Utils/Utils.c0000644000175100017510000052505613130665225016643 0ustar alloucheallouche/* Utils.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/Vector3d.h" #include "../Geometry/GeomGlobal.h" #include "../Utils/AtomsProp.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/GabeditTextEdit.h" #include "../Geometry/ResultsAnalise.h" #include "../Geometry/EnergiesCurves.h" #include "../Common/TextEdit.h" #include "../Common/Preferences.h" #include "../Common/Run.h" #include "../Display/GLArea.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/AxesGeomGL.h" #include "../Utils/HydrogenBond.h" #ifdef G_OS_WIN32 #include #include #include #include #include #include #include #else /* G_OS_WIN32 */ #include #include #include #include #endif /* G_OS_WIN32 */ #define DebugFlag 0 #define Debug1Flag 0 void create_color_surfaces_file(); void read_color_surfaces_file(); void initAxis(); void save_axis_properties(); void read_axis_properties(); void save_principal_axis_properties(); void read_principal_axis_properties(); void initPrincipalAxisGL(); #define BBSIZE 10240 /********************************************************************************/ #ifndef G_OS_WIN32 #define TIMER_TICK 60 static clock_t it; static struct tms itt; void timing(double* cpu,double *sys) { it=times(&itt); *cpu=(double) itt.tms_utime / (double) TIMER_TICK; *sys=(double) itt.tms_stime / (double) TIMER_TICK; } #endif #ifdef G_OS_WIN32 void addUnitDisk(FILE* file, G_CONST_RETURN gchar* name) { if(name && strlen(name)>1 && name[1]==':') fprintf(file,"%c%c\n", name[0],name[1]); } #endif #ifdef G_OS_WIN32 /************************************************************************ * error : display an error message and possibly the last Winsock error * *************************************************************************/ gboolean winsockCheck(FILE* FileErr) { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { fprintf(FileErr,"Unsupported version of winsock.dll!\n"); return FALSE; } if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { fprintf(FileErr,"Unsupported version of winsock.dll!\n"); return FALSE; } return TRUE; } #endif /* G_OS_WIN32 */ /********************************************************************************/ FILE* FOpen(const gchar *fileutf8, const gchar* type) { FILE* file; #ifdef G_OS_WIN32 /* gchar* filename = g_filename_to_utf8(fileutf8);*/ gchar* filename = g_strdup(fileutf8); file = fopen(filename,type); if(file) set_last_directory(fileutf8); return file; #else file = fopen(fileutf8,type); if(file) set_last_directory(fileutf8); return file; #endif } /********************************************************************************/ static void free_commands_list(CommandsList* list) { gint i; if(!list) return; if(list->numberOfCommands<1) { list->numberOfCommands = 0; list->numberOfDefaultCommand = 0; list->commands = NULL; return; } if(list->commands) { for(i=0;inumberOfCommands;i++) if(list->commands[i]) g_free(list->commands[i]); g_free(list->commands); } list->numberOfCommands = 0; list->numberOfDefaultCommand = 0; list->commands = NULL; } /********************************************************************************/ void free_gamess_commands() { free_commands_list(&gaussianCommands); } /********************************************************************************/ void free_gaussian_commands() { free_commands_list(&gaussianCommands); } /********************************************************************************/ void free_molcas_commands() { free_commands_list(&molcasCommands); } /********************************************************************************/ void free_molpro_commands() { free_commands_list(&molproCommands); } /********************************************************************************/ void free_mpqc_commands() { free_commands_list(&mpqcCommands); } /********************************************************************************/ void free_nwchem_commands() { free_commands_list(&nwchemCommands); } /********************************************************************************/ void free_psicode_commands() { free_commands_list(&psicodeCommands); } /********************************************************************************/ void free_orca_commands() { free_commands_list(&orcaCommands); } /********************************************************************************/ void free_demon_commands() { free_commands_list(&demonCommands); } /********************************************************************************/ void free_firefly_commands() { free_commands_list(&fireflyCommands); } /********************************************************************************/ void free_qchem_commands() { free_commands_list(&qchemCommands); } /********************************************************************************/ void free_mopac_commands() { free_commands_list(&mopacCommands); } /********************************************************************************/ void free_povray_commands() { free_commands_list(&povrayCommands); } /********************************************************************************/ gchar* get_time_str() { gchar* str=NULL; time_t t; struct tm* ts; t = time(NULL); ts = localtime(&t); str = asctime (ts); return str; } /********************************************************************************/ gdouble get_multipole_rank() { return multipole_rank; } /********************************************************************************/ gboolean this_is_a_backspace(gchar *st) { gint i; for(i=0;i<(gint)strlen(st);i++) if(st[i] != ' ' && st[i] !='\n' && st[i] !='\r') return FALSE; return TRUE; } /********************************************************************************/ void changeDInE(gchar *st) { gint i; gint l = 0; if(!st) return; l = strlen(st); for(i=0;indirs == 0) { user->ndirs = 1; user->dirs = g_malloc(sizeof(gchar*)); user->dirs[0] = g_strdup(dir); } else { for(i=0;indirs;i++) if(strcmp(dir,user->dirs[i]) == 0) return FALSE; user->dirs = g_realloc(user->dirs,(user->ndirs+1)*sizeof(gchar*)); for(i=user->ndirs;i>0;i--) user->dirs[i] = user->dirs[i-1]; user->dirs[0] = g_strdup(dir); if(user->ndirs>=NHOSTMAX) { /* g_free(user->dirs[user->ndirs]);*/ user->dirs = g_realloc(user->dirs,(user->ndirs)*sizeof(gchar*)); } else (user->ndirs)++; } return TRUE; } /********************************************************************************/ gboolean add_user_to_host(Host* host,const gchar *username, const gchar* password, const gchar *dir) { gint i; if(host->nusers == 0) { host->nusers = 1; host->users = g_malloc(sizeof(User)); host->users[0].username = g_strdup(username); if(password) host->users[0].password = g_strdup(password); else host->users[0].password = NULL; host->users[0].ndirs = 0; add_dir_to_user(&host->users[0] ,dir); } else { for(i=0;inusers;i++) if(strcmp(username,host->users[i].username) == 0) { return add_dir_to_user(&host->users[i],dir); } host->users = g_realloc(host->users,(host->nusers+1)*sizeof(User)); for(i=host->nusers;i>0;i--) host->users[i] = host->users[i-1]; host->users[0].ndirs = 0; host->users[0].username = g_strdup(username); if(password) host->users[0].password = g_strdup(password); else host->users[0].password = NULL; add_dir_to_user(&host->users[0] ,dir); if(host->nusers>=NHOSTMAX) { for(i=0;iusers[host->nusers].ndirs;i++) { g_free(host->users[host->nusers].dirs[i]); } g_free(host->users[host->nusers].dirs); /* g_free(host->users[host->nusers]);*/ host->users = g_realloc(host->users,(host->nusers)*sizeof(User)); } else (host->nusers)++; } return TRUE; } /********************************************************************************/ void add_host(const gchar *hostname, const gchar* username, const gchar* password, const gchar* dir) { gint i; gint j; if(recenthosts.nhosts == 0) { recenthosts.hosts = g_malloc(sizeof(Host)); recenthosts.hosts[0].hostname = g_strdup(hostname); recenthosts.hosts[0].nusers = 0; add_user_to_host(&recenthosts.hosts[0],username,password,dir); recenthosts.nhosts = 1; } else { for(i=0;i0;i--) recenthosts.hosts[i] = recenthosts.hosts[i-1]; recenthosts.hosts[0].hostname = g_strdup(hostname); recenthosts.hosts[0].nusers = 0; add_user_to_host(&recenthosts.hosts[0],username,password,dir); if(recenthosts.nhosts>=NHOSTMAX) { for(i=0;ipw_uid != getuid())) ) { if ( (pw = getpwuid(getuid()))) localuser = g_strdup(pw->pw_name); else localuser = NULL; } return localuser; #endif } /*************************************************************************************/ void Waiting(gdouble tsecond) { GTimer *timer; gdouble elaps; gulong m ; timer =g_timer_new( ); g_timer_start( timer ); g_timer_reset( timer ); do{ elaps = g_timer_elapsed( timer,&m); }while(elaps%s 2>%s'",command,outfile,errfile); {int it = system(temp);} t=g_malloc(taille); fd = FOpen(errfile, "rb"); if(fd) { while(!feof(fd)) { if(!fgets(t,taille, fd)) break; dump = terr; if(!terr) terr = g_strdup_printf("%s",t); else { terr = g_strdup_printf("%s%s",terr,t); g_free(dump); } } fclose(fd); unlink (errfile); } else terr = NULL; fd = FOpen(outfile, "rb"); if(fd) { unlink (outfile); } g_free(t); g_free(temp); g_free(outfile); g_free(errfile); return terr; } /********************************************************************************/ #ifdef G_OS_WIN32 void createProcessWin32(char* myChildProcess) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); printf(_("Command = %s\n"),myChildProcess); /* Start the child process. */ if( !CreateProcess( NULL, /* No module name (use command line). */ TEXT(myChildProcess), /* Command line. */ NULL, /* Process handle not inheritable. */ NULL, /* Thread handle not inheritable. */ FALSE, /* Set handle inheritance to FALSE. */ 0, /* No creation flags. */ NULL, /* Use parent's environment block. */ NULL, /* Use parent's starting directory. */ &si, /* Pointer to STARTUPINFO structure.*/ &pi ) /* Pointer to PROCESS_INFORMATION structure.*/ ) { gchar buffer[BBSIZE]; sprintf(buffer,_("CreateProcess failed (%d)"),(int)GetLastError()); Message(buffer, _("Error"), TRUE); return; } /* Wait until child process exits.*/ /* WaitForSingleObject( pi.hProcess, INFINITE );*/ /* Close process and thread handles. */ CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); } #endif /********************************************************************************/ void run_local_command(gchar *outfile,gchar *errfile,gchar* command,gboolean under) { gchar *temp; gint ierr = 0; unlink (outfile); unlink (errfile); if(under) { #ifdef G_OS_WIN32 temp = g_strdup_printf("%s >%s 2>%s ",command, outfile, errfile); createProcessWin32(temp); #else if(strstr(command,">")) temp = g_strdup_printf("sh -c '%s 2>%s&'",command, errfile); else temp = g_strdup_printf("sh -c '%s >%s 2>%s&'",command, outfile, errfile); ierr = system(temp); #endif Waiting(0.5); } else { #ifdef G_OS_WIN32 temp = g_strdup_printf("%s >%s 2>%s",command,outfile,errfile); #else temp = g_strdup_printf("sh -c '%s >%s 2>%s'",command,outfile,errfile); #endif ierr = system(temp); } g_free(temp); } /*************************************************************************************/ const gchar *gabedit_directory(void) { static gchar *gabedit_dir = NULL; gchar *home_dir; gchar *home_dir_sep; #ifdef G_OS_WIN32 gchar* Version_S = g_strdup_printf("%d%d%d",MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION); #else gchar* Version_S = g_strdup_printf("%d.%d.%d",MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION); #endif if (gabedit_dir != NULL) return gabedit_dir; home_dir = g_strdup(g_get_home_dir()); if (home_dir != NULL && home_dir[strlen(home_dir)-1] != G_DIR_SEPARATOR) home_dir_sep = G_DIR_SEPARATOR_S; else home_dir_sep = ""; if (!home_dir) { #ifdef G_OS_WIN32 home_dir = g_strdup("C:"); #else /* G_OS_WIN32 */ home_dir = g_strdup("/tmp"); #endif /* G_OS_WIN32 */ home_dir_sep = G_DIR_SEPARATOR_S; } #ifdef G_OS_WIN32 gabedit_dir = g_strconcat(home_dir,home_dir_sep,"gabedit",Version_S,NULL); #else gabedit_dir = g_strconcat(home_dir,home_dir_sep,".gabedit-",Version_S,NULL); #endif g_free(Version_S); return gabedit_dir; } /*************************************************************************************/ void DeleteLastChar(gchar *str) { str[strlen(str)-1]='\0'; } /*************************************************************************************/ gchar *get_dir_file_name(G_CONST_RETURN gchar* dirname, G_CONST_RETURN gchar* filename) { gchar *name = NULL; name = g_strdup_printf("%s%s%s",dirname,G_DIR_SEPARATOR_S,filename); return name; } /*************************************************************************************/ gchar *get_name_dir(const gchar* allname) { gchar *name; name = g_path_get_dirname(allname); if(strcmp(name,".")==0) { g_free(name); name = g_strdup(g_get_current_dir()); } return name; } /*************************************************************************************/ gchar *get_filename_without_ext(const gchar* allname) { gchar *filename= NULL; gchar *temp= NULL; gint len=0; gint i; gchar* name = NULL; if(!allname || strlen(allname)<1) return g_strdup("error"); temp = g_strdup(allname); filename= g_strdup(allname); len=strlen(filename); for(i=len;i>0;i--) if(temp[i]=='.') { temp[i] = '\0'; break; } name = g_strdup_printf("%s",temp); if(temp) g_free(temp); if(filename) g_free(filename); return name; } /*************************************************************************************/ gchar *get_suffix_name_file(const gchar* allname) { gchar *filename= g_path_get_basename(allname); gchar *dirname= g_path_get_dirname(allname); gchar *temp= g_strdup(filename); gint len=strlen(filename); gint i; gchar* name = NULL; if(!allname || strlen(allname)<1) return g_strdup("error"); filename= g_path_get_basename(allname); dirname= g_path_get_dirname(allname); temp= g_strdup(filename); len=strlen(filename); for(i=len;i>0;i--) if(temp[i]=='.') { temp[i] = '\0'; break; } name = g_strdup_printf("%s%s%s",dirname,G_DIR_SEPARATOR_S,temp); if(temp) g_free(temp); if(dirname) g_free(dirname); if(filename) g_free(filename); if(strcmp(name,".")==0) name = g_strdup(g_get_current_dir()); return name; } /*************************************************************************************/ gchar *get_name_file(const gchar* allname) { gchar *name= g_path_get_basename(allname); /* gchar *name=g_strdup(allname); gint i; gint len=strlen(allname); gint islash=0; for(i=len;i>0;i--) if(allname[i]==G_DIR_SEPARATOR) { islash=i+1; break; } if(islash>0) { if(name) g_free(name); name=g_malloc(len-islash+2); for(i=islash;i<=len;i++) name[i-islash]=allname[i]; name[len-islash+1]='\0'; } */ return name; } /*************************************************************************************/ Point get_produit_vectoriel(Point V1,Point V2) { Point PV; PV.C[0]= V1.C[1]*V2.C[2]-V1.C[2]*V2.C[1]; PV.C[1]= V1.C[2]*V2.C[0]-V1.C[0]*V2.C[2]; PV.C[2]= V1.C[0]*V2.C[1]-V1.C[1]*V2.C[0]; return PV; } /*************************************************************************************/ gchar *get_distance_points(Point P1,Point P2,gboolean f3) { gchar *distance; gdouble Distance; guint i; Distance = 0.0; for(i=0;i<3;i++) Distance += (P1.C[i]- P2.C[i])*(P1.C[i]- P2.C[i]); Distance = sqrt(Distance)*BOHR_TO_ANG; if(f3) distance = g_strdup_printf("%7.3lf",Distance); else distance = g_strdup_printf("%0.20lf",Distance); return distance; } /*************************************************************************************/ gdouble get_module(Point V) { gdouble Module; guint i; Module = 0.0; for(i=0;i<3;i++) Module += V.C[i]*V.C[i]; return sqrt(Module); } /*************************************************************************************/ gdouble get_scalaire(Point V1,Point V2) { gdouble Scalaire; guint i; Scalaire = 0.0; for(i=0;i<3;i++) Scalaire += V1.C[i]*V2.C[i]; return Scalaire; } /*************************************************************************************/ gchar *get_angle_vectors(Point V1,Point V2) { gchar *angle; gdouble Angle; gdouble modv1v2 = get_module(V1)*get_module(V2); if(fabs(modv1v2)>1e-14 ) { Angle = get_scalaire(V1,V2)/modv1v2; /* Debug("Pscal = %f\n",Angle);*/ if(Angle<=-1) return g_strdup("180.0"); if(Angle>=1) return g_strdup_printf("0.0"); Angle = acos(Angle)/DEG_TO_RAD; /* Debug("Angle = %f\n",Angle);*/ angle = g_strdup_printf("%0.20lf",Angle); } else angle = g_strdup_printf("ERROR"); return angle; } /*************************************************************************************/ void add_fonts_in_file(FILE *fd,FontsStyle fontsstyle) { if(fontsstyle.fontname[strlen(fontsstyle.fontname)-1] !='\n') fprintf(fd,"%s\n",fontsstyle.fontname); else fprintf(fd,"%s",fontsstyle.fontname); fprintf(fd,"%d\n",fontsstyle.BaseColor.red); fprintf(fd,"%d\n",fontsstyle.BaseColor.green); fprintf(fd,"%d\n",fontsstyle.BaseColor.blue); fprintf(fd,"%d\n",fontsstyle.TextColor.red); fprintf(fd,"%d\n",fontsstyle.TextColor.green); fprintf(fd,"%d\n",fontsstyle.TextColor.blue); } /*************************************************************************************/ void create_hosts_file() { gchar *hostsfile; FILE *fd; gint i; gint j; gint k; hostsfile = g_strdup_printf("%s%shosts",gabedit_directory(),G_DIR_SEPARATOR_S); fd = FOpen(hostsfile, "w"); if(fd) { fprintf(fd,"%d\n",recenthosts.nhosts); for(i=0;i1) alpha_opacity = 1; if(alpha_opacity<0) alpha_opacity = 0; } /*************************************************************************************/ void create_opengl_file() { gchar *openglfile; FILE *fd; openglfile = g_strdup_printf("%s%sopengl",gabedit_directory(),G_DIR_SEPARATOR_S); fd = FOpen(openglfile, "w"); if(fd !=NULL) { fprintf(fd,"%d\n",openGLOptions.activateText); fprintf(fd,"%d\n",openGLOptions.rgba); fprintf(fd,"%d\n",openGLOptions.doubleBuffer); fprintf(fd,"%d\n",openGLOptions.alphaSize); fprintf(fd,"%d\n",openGLOptions.depthSize); fprintf(fd,"%d\n",openGLOptions.numberOfSubdivisionsCylindre); fprintf(fd,"%d\n",openGLOptions.numberOfSubdivisionsSphere); fprintf(fd,"%d\n",getOptCol()); fprintf(fd,"%lf %lf\n",getScaleBall(),getScaleStick()); fprintf(fd,"%d\n",colorMapType); fprintf(fd,"%lf %lf %lf\n",colorMapColors[0][0], colorMapColors[0][1],colorMapColors[0][2]); fprintf(fd,"%lf %lf %lf\n",colorMapColors[1][0], colorMapColors[1][1],colorMapColors[1][2]); fprintf(fd,"%lf %lf %lf\n",colorMapColors[2][0], colorMapColors[2][1],colorMapColors[2][2]); fprintf(fd,"%d\n",getShowOneSurface()); fprintf(fd,"%lf\n",get_alpha_opacity()); fclose(fd); } g_free(openglfile); } /*************************************************************************************/ void read_opengl_file() { gchar *openglfile; FILE *fd; gint optcol = 0; gboolean showOneSurface = TRUE; openglfile = g_strdup_printf("%s%sopengl",gabedit_directory(),G_DIR_SEPARATOR_S); fd = fopen(openglfile, "rb"); openGLOptions.activateText = 1; openGLOptions.rgba = 1; openGLOptions.doubleBuffer = 1; openGLOptions.alphaSize = 0; openGLOptions.depthSize = 1; openGLOptions.numberOfSubdivisionsCylindre = 20; openGLOptions.numberOfSubdivisionsSphere = 30; colorMapType =1; colorMapColors[0][0] = 1; colorMapColors[0][1] = 1; colorMapColors[0][2] = 1; colorMapColors[1][0] = 1; colorMapColors[1][1] = 1; colorMapColors[1][2] = 1; colorMapColors[2][0] = 1; colorMapColors[2][1] = 1; colorMapColors[2][2] = 1; if(fd !=NULL) { guint taille = BBSIZE; gchar t[BBSIZE]; if(fgets(t,taille,fd)) if(sscanf(t,"%d",&openGLOptions.activateText)!=1) openGLOptions.activateText = 1; if(fgets(t,taille,fd)) if(sscanf(t,"%d",&openGLOptions.rgba)!=1) openGLOptions.rgba = 1; if(fgets(t,taille,fd)) if(sscanf(t,"%d",&openGLOptions.doubleBuffer)!=1) openGLOptions.doubleBuffer = 1; if(fgets(t,taille,fd)) if(sscanf(t,"%d",&openGLOptions.alphaSize)!=1) openGLOptions.alphaSize = 1; if(fgets(t,taille,fd)) if(sscanf(t,"%d",&openGLOptions.depthSize)!=1) openGLOptions.depthSize = 1; if(fgets(t,taille,fd)) if(sscanf(t,"%d",&openGLOptions.numberOfSubdivisionsCylindre)!=1) openGLOptions.numberOfSubdivisionsCylindre = 10; if(fgets(t,taille,fd)) if(sscanf(t,"%d",&openGLOptions.numberOfSubdivisionsSphere)!=1) openGLOptions.numberOfSubdivisionsSphere = 10; if(fgets(t,taille,fd)) if(sscanf(t,"%d",&optcol)!=1) optcol = 0; setOptCol(optcol); if(fgets(t,taille,fd)) { gdouble b,s; if(sscanf(t,"%lf %lf",&b,&s)==2) { setScaleBall(b); setScaleStick(b); } } if(fgets(t,taille,fd)) if(sscanf(t,"%d",&colorMapType)!=1) colorMapType =1; if(fgets(t,taille,fd)) { if(sscanf(t,"%lf %lf %lf",&colorMapColors[0][0], &colorMapColors[0][1],&colorMapColors[0][2])!=3) { colorMapColors[0][0] = 1.0; colorMapColors[0][1] = 1.0; colorMapColors[0][2] = 1.0; } } if(fgets(t,taille,fd)) { if(sscanf(t,"%lf %lf %lf",&colorMapColors[1][0], &colorMapColors[1][1],&colorMapColors[1][2])!=3) { colorMapColors[1][0] = 1.0; colorMapColors[1][1] = 1.0; colorMapColors[1][2] = 1.0; } } if(fgets(t,taille,fd)) { if(sscanf(t,"%lf %lf %lf",&colorMapColors[2][0], &colorMapColors[2][1],&colorMapColors[2][2])!=3) { colorMapColors[2][0] = 1.0; colorMapColors[2][1] = 1.0; colorMapColors[2][2] = 1.0; } } if(fgets(t,taille,fd)) if(sscanf(t,"%d",&showOneSurface)!=1) showOneSurface = 0; setShowOneSurface(showOneSurface); if(fgets(t,taille,fd)) { gdouble alpha; if(sscanf(t,"%lf",&alpha)==1) set_alpha_opacity(alpha); } fclose(fd); } g_free(openglfile); } /*************************************************************************************/ void create_ressource_file() { save_atoms_prop(); create_commands_file(); create_network_file(); create_fonts_file(); create_color_surfaces_file(); create_opengl_file(); save_axis_properties(); #ifdef DRAWGEOMGL save_axes_geom_properties(); #endif save_principal_axis_properties(); save_HBonds_properties(); create_drawmolecule_file(); } /*************************************************************************************/ void read_hosts_file() { gchar *hostsfile; FILE *fd; gint i; gint j; gint k; gchar t[BBSIZE]; gint len = BBSIZE; hostsfile = g_strdup_printf("%s%shosts",gabedit_directory(),G_DIR_SEPARATOR_S); fd = FOpen(hostsfile, "rb"); if(fd) { if(!feof(fd)) { char* e = fgets(t,len,fd);} recenthosts.nhosts = atoi(t); recenthosts.hosts = g_malloc(recenthosts.nhosts*sizeof(Host)); for(i=0;ifontname= g_strdup(temp); if(!feof(fd)) { char* e = fgets(t,taille,fd);} fontsstyle->BaseColor.red =(gushort) atoi(t); if(!feof(fd)) { char* e = fgets(t,taille,fd);} fontsstyle->BaseColor.green =(gushort) atoi(t); if(!feof(fd)) { char* e = fgets(t,taille,fd);} fontsstyle->BaseColor.blue = (gushort) atoi(t); if(!feof(fd)) { char* e = fgets(t,taille,fd);} fontsstyle->TextColor.red = (gushort) atoi(t); if(!feof(fd)) { char* e = fgets(t,taille,fd);} fontsstyle->TextColor.green = (gushort) atoi(t); if(!feof(fd)) { char* e = fgets(t,taille,fd);} fontsstyle->TextColor.blue = (gushort) atoi(t); g_free(t); g_free(temp); } /*************************************************************************************/ void read_fonts_file() { gchar *fontsfile; FILE *fd; fontsfile = g_strdup_printf("%s%sfonts",gabedit_directory(),G_DIR_SEPARATOR_S); fd = FOpen(fontsfile, "rb"); if(fd !=NULL) { read_fonts_in_file(fd,&FontsStyleData); read_fonts_in_file(fd,&FontsStyleResult); read_fonts_in_file(fd,&FontsStyleLabel); read_fonts_in_file(fd,&FontsStyleOther); fclose(fd); set_font (text,FontsStyleData.fontname); set_base_style(text,FontsStyleData.BaseColor.red ,FontsStyleData.BaseColor.green ,FontsStyleData.BaseColor.blue); set_text_style(text,FontsStyleData.TextColor.red ,FontsStyleData.TextColor.green ,FontsStyleData.TextColor.blue); set_font (textresult,FontsStyleResult.fontname); set_base_style(textresult,FontsStyleResult.BaseColor.red ,FontsStyleResult.BaseColor.green ,FontsStyleResult.BaseColor.blue); set_text_style(textresult,FontsStyleResult.TextColor.red ,FontsStyleResult.TextColor.green ,FontsStyleResult.TextColor.blue); set_font (TextOutput,FontsStyleResult.fontname); set_base_style(TextOutput,FontsStyleResult.BaseColor.red ,FontsStyleResult.BaseColor.green ,FontsStyleResult.BaseColor.blue); set_text_style(TextOutput,FontsStyleResult.TextColor.red ,FontsStyleResult.TextColor.green ,FontsStyleResult.TextColor.blue); set_font (TextError,FontsStyleResult.fontname); set_base_style(TextError,FontsStyleResult.BaseColor.red ,FontsStyleResult.BaseColor.green ,FontsStyleResult.BaseColor.blue); set_text_style(TextError,FontsStyleResult.TextColor.red ,FontsStyleResult.TextColor.green ,FontsStyleResult.TextColor.blue); } set_font_other (FontsStyleOther.fontname); } /********************************************************************************/ void free_batch_commands() { gint i; for(i=0;i0) { batchCommands.numberOfTypes = atoi(t); batchCommands.types = g_malloc(batchCommands.numberOfTypes*sizeof(gchar*)); batchCommands.commandListAll = g_malloc(batchCommands.numberOfTypes*sizeof(gchar*)); batchCommands.commandListUser = g_malloc(batchCommands.numberOfTypes*sizeof(gchar*)); batchCommands.jobIdTitle = g_malloc(batchCommands.numberOfTypes*sizeof(gchar*)); for(i=0;i0) { free_demon_commands(); demonCommands.numberOfCommands = atoi(t); demonCommands.commands = g_malloc(demonCommands.numberOfCommands*sizeof(gchar*)); for(i=0;i0) { free_gamess_commands(); gamessCommands.numberOfCommands = atoi(t); gamessCommands.commands = g_malloc(gamessCommands.numberOfCommands*sizeof(gchar*)); for(i=0;i0) { free_gaussian_commands(); gaussianCommands.numberOfCommands = atoi(t); gaussianCommands.commands = g_malloc(gaussianCommands.numberOfCommands*sizeof(gchar*)); for(i=0;i0) { free_molcas_commands(); molcasCommands.numberOfCommands = atoi(t); molcasCommands.commands = g_malloc(molcasCommands.numberOfCommands*sizeof(gchar*)); for(i=0;i0) { free_molpro_commands(); molproCommands.numberOfCommands = atoi(t); molproCommands.commands = g_malloc(molproCommands.numberOfCommands*sizeof(gchar*)); for(i=0;i0) { free_mpqc_commands(); mpqcCommands.numberOfCommands = atoi(t); mpqcCommands.commands = g_malloc(mpqcCommands.numberOfCommands*sizeof(gchar*)); for(i=0;i0) { free_nwchem_commands(); nwchemCommands.numberOfCommands = atoi(t); nwchemCommands.commands = g_malloc(nwchemCommands.numberOfCommands*sizeof(gchar*)); for(i=0;i0) { free_psicode_commands(); psicodeCommands.numberOfCommands = atoi(t); psicodeCommands.commands = g_malloc(psicodeCommands.numberOfCommands*sizeof(gchar*)); for(i=0;i0) { free_orca_commands(); orcaCommands.numberOfCommands = atoi(t); orcaCommands.commands = g_malloc(orcaCommands.numberOfCommands*sizeof(gchar*)); for(i=0;i0) { free_firefly_commands(); fireflyCommands.numberOfCommands = atoi(t); fireflyCommands.commands = g_malloc(fireflyCommands.numberOfCommands*sizeof(gchar*)); for(i=0;i0) { free_qchem_commands(); qchemCommands.numberOfCommands = atoi(t); qchemCommands.commands = g_malloc(qchemCommands.numberOfCommands*sizeof(gchar*)); for(i=0;i0) { free_mopac_commands(); mopacCommands.numberOfCommands = atoi(t); mopacCommands.commands = g_malloc(mopacCommands.numberOfCommands*sizeof(gchar*)); for(i=0;i0) { free_povray_commands(); povrayCommands.numberOfCommands = atoi(t); povrayCommands.commands = g_malloc(povrayCommands.numberOfCommands*sizeof(gchar*)); for(i=0;i1) g_setenv("PATH",t,TRUE); } #endif } else { fclose(fd); return; } if(!fgets(t,taille,fd)) /* End of OrcaDir */ { fclose(fd); return; } /*-----------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------*/ if(fgets(t,taille,fd)) if(!strstr(t,"Begin GamessDir")) { fclose(fd); return; } if(fgets(t,taille,fd)) { gamessDirectory= g_strdup(t); str_delete_n(gamessDirectory); delete_last_spaces(gamessDirectory); delete_first_spaces(gamessDirectory); } else { fclose(fd); return; } if(!fgets(t,taille,fd)) /* End of GamessDir */ { fclose(fd); return; } /*-----------------------------------------------------------------------------*/ if(fgets(t,taille,fd)) if(!strstr(t,"Begin NWChemDir")) { fclose(fd); return; } if(fgets(t,taille,fd)) { nwchemDirectory= g_strdup(t); str_delete_n(nwchemDirectory); delete_last_spaces(nwchemDirectory); delete_first_spaces(nwchemDirectory); #ifdef G_OS_WIN32 { gchar t[BBSIZE]; sprintf(t,"%s;%s",nwchemDirectory,g_getenv("PATH")); if(strlen(t)>1) g_setenv("PATH",t,TRUE); } #endif } else { fclose(fd); return; } if(!fgets(t,taille,fd)) /* End of NWChemDir */ { fclose(fd); return; } /*-----------------------------------------------------------------------------*/ if(fgets(t,taille,fd)) if(!strstr(t,"Begin PsicodeDir")) { fclose(fd); return; } if(fgets(t,taille,fd)) { psicodeDirectory= g_strdup(t); str_delete_n(psicodeDirectory); delete_last_spaces(psicodeDirectory); delete_first_spaces(psicodeDirectory); #ifdef G_OS_WIN32 { gchar t[BBSIZE]; sprintf(t,"%s;%s",psicodeDirectory,g_getenv("PATH")); if(strlen(t)>1) g_setenv("PATH",t,TRUE); } #endif } else { fclose(fd); return; } if(!fgets(t,taille,fd)) /* End of PsicodeDir */ { fclose(fd); return; } /*-----------------------------------------------------------------------------*/ if(fgets(t,taille,fd)) if(!strstr(t,"Begin OrcaDir")) { fclose(fd); return; } if(fgets(t,taille,fd)) { orcaDirectory= g_strdup(t); str_delete_n(orcaDirectory); delete_last_spaces(orcaDirectory); delete_first_spaces(orcaDirectory); #ifdef G_OS_WIN32 { gchar t[BBSIZE]; sprintf(t,"%s;%s",orcaDirectory,g_getenv("PATH")); if(strlen(t)>1) g_setenv("PATH",t,TRUE); } #endif } else { fclose(fd); return; } if(!fgets(t,taille,fd)) /* End of OrcaDir */ { fclose(fd); return; } /*-----------------------------------------------------------------------------*/ if(fgets(t,taille,fd)) if(!strstr(t,"Begin FireFlyDir")) { fclose(fd); return; } if(fgets(t,taille,fd)) { fireflyDirectory= g_strdup(t); str_delete_n(fireflyDirectory); delete_last_spaces(fireflyDirectory); delete_first_spaces(fireflyDirectory); #ifdef G_OS_WIN32 { gchar t[BBSIZE]; sprintf(t,"%s;%s",fireflyDirectory,g_getenv("PATH")); if(strlen(t)>1) g_setenv("PATH",t,TRUE); } #endif } else { fclose(fd); return; } if(!fgets(t,taille,fd)) /* End of FireFlyDir */ { fclose(fd); return; } /*-----------------------------------------------------------------------------*/ if(fgets(t,taille,fd)) if(!strstr(t,"Begin MopacDir")) { fclose(fd); return; } if(fgets(t,taille,fd)) { mopacDirectory= g_strdup(t); str_delete_n(mopacDirectory); delete_last_spaces(mopacDirectory); delete_first_spaces(mopacDirectory); #ifdef G_OS_WIN32 { gchar t[BBSIZE]; sprintf(t,"%s;%s",mopacDirectory,g_getenv("PATH")); if(strlen(t)>1) g_setenv("PATH",t,TRUE); } #endif } else { fclose(fd); return; } if(!fgets(t,taille,fd)) /* End of MopacDir */ { fclose(fd); return; } /*-----------------------------------------------------------------------------*/ if(fgets(t,taille,fd)) if(!strstr(t,"Begin GaussDir")) { fclose(fd); return; } if(fgets(t,taille,fd)) { gaussDirectory= g_strdup(t); str_delete_n(gaussDirectory); delete_last_spaces(gaussDirectory); delete_first_spaces(gaussDirectory); #ifdef G_OS_WIN32 { gchar t[BBSIZE]; sprintf(t,"%s;%s",gaussDirectory,g_getenv("PATH")); if(strlen(t)>1) g_setenv("PATH",t,TRUE); } #endif } else { fclose(fd); return; } if(!fgets(t,taille,fd)) /* End of GaussDir */ { fclose(fd); return; } /*-----------------------------------------------------------------------------*/ if(fgets(t,taille,fd)) if(!strstr(t,"Begin PovRayDir")) { fclose(fd); return; } if(fgets(t,taille,fd)) { povrayDirectory= g_strdup(t); str_delete_n(povrayDirectory); delete_last_spaces(povrayDirectory); delete_first_spaces(povrayDirectory); #ifdef G_OS_WIN32 { gchar t[BBSIZE]; sprintf(t,"%s;%s",povrayDirectory,g_getenv("PATH")); if(strlen(t)>1) g_setenv("PATH",t,TRUE); } #endif } else { fclose(fd); return; } if(!fgets(t,taille,fd)) /* End of PovRayDir */ { fclose(fd); return; } /*-----------------------------------------------------------------------------*/ if(fgets(t,taille,fd)) if(!strstr(t,"Begin OpenBabelDir")) { fclose(fd); return; } if(fgets(t,taille,fd)) { openbabelDirectory= g_strdup(t); str_delete_n(openbabelDirectory); delete_last_spaces(openbabelDirectory); delete_first_spaces(openbabelDirectory); #ifdef G_OS_WIN32 { gchar t[BBSIZE]; sprintf(t,"%s;%s",openbabelDirectory,g_getenv("PATH")); if(strlen(t)>1) g_setenv("PATH",t,TRUE); } #endif } else { fclose(fd); return; } if(!fgets(t,taille,fd)) /* End of OpenBabelDir */ { fclose(fd); return; } fclose(fd); } } /*************************************************************************************/ void read_network_file() { gchar *networkfile; FILE *fd; networkfile = g_strdup_printf("%s%snetwork",gabedit_directory(),G_DIR_SEPARATOR_S); fd = FOpen(networkfile, "rb"); if(fd !=NULL) { guint taille = BBSIZE; gchar t[BBSIZE]; gint i; if(fgets(t,taille,fd)) { if(sscanf(t,"%d",&i)!=1) defaultNetWorkProtocol = GABEDIT_NETWORK_SSH; else { if(i==0) defaultNetWorkProtocol = GABEDIT_NETWORK_FTP_RSH; else defaultNetWorkProtocol = GABEDIT_NETWORK_SSH; } } else defaultNetWorkProtocol = GABEDIT_NETWORK_SSH; if(fgets(t,taille,fd)) { if(pscpplinkDirectory) g_free(pscpplinkDirectory); pscpplinkDirectory = g_strdup(t); str_delete_n(pscpplinkDirectory); delete_last_spaces(pscpplinkDirectory); delete_first_spaces(pscpplinkDirectory); sprintf(t,"%s;%s",pscpplinkDirectory,g_getenv("PATH")); #ifdef G_OS_WIN32 g_setenv("PATH",t,TRUE); #endif } fclose(fd); } } /***********************************************************************/ void set_path() { #ifdef G_OS_WIN32 { gchar t[BBSIZE]; sprintf(t,"%s;%s;%s;%s;%s;%s;%s;%s;%s", orcaDirectory, fireflyDirectory, mopacDirectory, gaussDirectory, demonDirectory, pscpplinkDirectory, povrayDirectory, openbabelDirectory, g_getenv("PATH")); if(strlen(t)>1) g_setenv("PATH",t,TRUE); } #endif } /*************************************************************************************/ void read_ressource_file() { gboolean rOK = FALSE; define_default_atoms_prop(); rOK = read_atoms_prop(); if(!rOK) define_default_atoms_prop(); read_commands_file(); read_network_file(); read_fonts_file(); read_hosts_file(); read_color_surfaces_file(); read_opengl_file(); fileopen.netWorkProtocol= defaultNetWorkProtocol; read_axis_properties(); #ifdef DRAWGEOMGL read_axes_geom_properties(); #endif read_principal_axis_properties(); read_HBonds_properties(); read_drawmolecule_file(); } /*************************************************************************************/ gchar *ang_to_bohr(gchar *angstr) { gchar *austr; gdouble numb; austr = g_strdup(angstr); numb = atof(angstr)*ANG_TO_BOHR; austr = g_strdup_printf("%0.20lf",numb); return austr; } /*************************************************************************************/ gchar *bohr_to_ang(gchar *angstr) { gchar *austr; gdouble numb; austr = g_strdup(angstr); numb = atof(angstr)*BOHR_TO_ANG; austr = g_strdup_printf("%0.20lf",numb); return austr; } /*************************************************************************************/ static gboolean debug1flag() { gchar localhost[100]; if(!Debug1Flag) return FALSE; #ifdef G_OS_WIN32 winsockCheck(stderr); #endif gethostname(localhost,100); if(strlen(localhost)>=5) { uppercase(localhost); gchar* d = strstr(localhost,"L"); if(!d) return FALSE; if(strlen(d)<5) return FALSE; if(d[0]=='L' && d[1]=='A') if(d[2]=='S' && d[3]=='I') if(d[4]=='M') return TRUE; } return FALSE; } /*************************************************************************************/ guint get_number_electrons(guint type) { /* type = 1 : Medium and High type = 2 : High type = other : All */ guint i; guint Ne=0; SAtomsProp Atom; if(MethodeGeom == GEOM_IS_XYZ) { for(i=0;i','?',',','~', '`','\'','.','"',':',';'}; guint All=36; guint j; guint i; for(i=0;ifont_desc); */ style->font_desc = font_desc; } } /*************************************************************************************/ void set_font (GtkWidget *view, gchar *fontname) { GtkStyle *style; PangoFontDescription *font_desc; if(!GTK_IS_WIDGET(view)) return; style = gtk_style_copy (gtk_widget_get_style (view)); font_desc = pango_font_description_from_string (fontname); if (font_desc) { /* pango_font_description_free (style->font_desc); */ style->font_desc = font_desc; } gtk_widget_set_style (GTK_WIDGET(view), style); g_object_unref (style); } /*************************************************************************************/ void set_tab_size (GtkWidget *view, gint tab_size) { PangoTabArray* tabs = pango_tab_array_new(tab_size,FALSE); gtk_text_view_set_tabs ((GtkTextView *)view, tabs); } /*************************************************************************************/ GtkStyle *set_text_style(GtkWidget *text,gushort red,gushort green,gushort blue) { GtkStyle *style; style = gtk_style_copy(text->style); style->text[0].red=red; style->text[0].green=green; style->text[0].blue=blue; gtk_widget_set_style(text, style ); return style; } /********************************************************************************/ GtkStyle *set_base_style(GtkWidget *text,gushort red,gushort green,gushort blue) { GtkStyle *style; style = gtk_style_copy(text->style); style->base[0].red=red; style->base[0].green=green; style->base[0].blue=blue; gtk_widget_set_style(text, style ); return style; } /********************************************************************************/ GtkStyle *set_fg_style(GtkWidget *wid,gushort red,gushort green,gushort blue) { GtkStyle *style; style = gtk_style_copy(wid->style); style->fg[0].red=red; style->fg[0].green=green; style->fg[0].blue=blue; gtk_widget_set_style(wid, style ); return style; } /********************************************************************************/ GtkStyle *set_bg_style(GtkWidget *wid,gushort red,gushort green,gushort blue) { GtkStyle *style; style = gtk_style_copy(wid->style); style->bg[0].red=red; style->bg[0].green=green; style->bg[0].blue=blue; gtk_widget_set_style(wid, style ); return style; } /********************************************************************************/ gint numb_of_string_by_row(gchar *str) { gint n=0; gchar* t=str; while(*t!='\n' && *t !='\0') { if(*t!=' ') { n++; while(*t!=' ') { t++; if(*t =='\n' || *t =='\0') break; } } else { while(*t ==' ' ) { t++; if(*t =='\n' || *t =='\0') break; } } } return n; } /********************************************************************************/ gint numb_of_reals_by_row(gchar *str) { gint n=0; gchar* t=str; gchar p[BBSIZE]; while(*t!='\n' && *t !='\0') { if(*t =='\t') *t =' '; if(*t =='\r') *t =' '; if(*t!=' ') { sscanf(t,"%s",p); if(test(p)) n++; while(*t!=' ') { t++; if(*t =='\n' || *t =='\0') break; } } else { while(*t ==' ' ) { t++; if(*t =='\n' || *t =='\0') break; } } } return n; } /********************************************************************************/ gchar** gab_split(gchar *str) { gchar** strsplit= g_malloc(sizeof(gchar*)); gint n=0; gchar* t=str; gchar p[BBSIZE]; while(*t!='\n' && *t !='\0') { if(*t!=' ') { n++; strsplit= g_realloc(strsplit,(n+1)*sizeof(gchar*)); sscanf(t,"%s",p); strsplit[n-1]= g_strdup(p); while(*t!=' ') { t++; if(*t =='\n' || *t =='\0') break; } } else { while(*t ==' ' ) { t++; if(*t =='\n' || *t =='\0') break; } } } strsplit[n]= NULL; return strsplit; } /********************************************************************************/ void gab_strfreev (char **str) { int i; if (!str) return; for (i = 0; str[i] != NULL; i++) free (str[i]); free (str); } /********************************************************************************/ void get_dipole_from_gamess_output_file(FILE* fd) { guint taille=BBSIZE; gchar *t = g_malloc(BBSIZE*sizeof(gchar)); gchar* t1; init_dipole(); while(!feof(fd) ) { t1 = NULL; if(!fgets(t,taille,fd))break; t1 = strstr( t, "ELECTROSTATIC MOMENTS"); if(t1) { while(!feof(fd) ) { if(!fgets(t,taille,fd))break; t1 = strstr( t, "DEBYE"); if(t1) { gint i; if(!fgets(t,taille,fd))break; sscanf(t,"%lf %lf %lf",&Dipole.value[0],&Dipole.value[1],&Dipole.value[2]); for(i=0;i<3;i++) Dipole.value[i] /= AUTODEB; Dipole.def = TRUE; break; } } break; } else { if(strstr( t, "END OF PROPERTY" )) break; } } g_free(t); } /********************************************************************************/ void get_dipole_from_turbomole_output_file(FILE* fd) { guint taille=BBSIZE; gchar *t = g_malloc(BBSIZE*sizeof(gchar)); gchar dum[100]; init_dipole(); while(!feof(fd) ) { if(!fgets(t,taille,fd))break; if(strstr( t, "electrostatic moments")) { while(!feof(fd) ) { if(!fgets(t,taille,fd))break; if(strstr( t, "dipole moment")) { gdouble d; if(!fgets(t,taille,fd))break; if(!fgets(t,taille,fd))break;/* x */ sscanf(t,"%s %lf %lf %lf",dum, &d, &d, &Dipole.value[0]); if(!fgets(t,taille,fd))break;/* y */ sscanf(t,"%s %lf %lf %lf",dum, &d, &d, &Dipole.value[1]); if(!fgets(t,taille,fd))break;/* z */ sscanf(t,"%s %lf %lf %lf",dum, &d, &d, &Dipole.value[2]); Dipole.def = TRUE; break; } } break; } } g_free(t); } /********************************************************************************/ void get_dipole_from_gaussian_output_file(FILE* fd) { guint taille=BBSIZE; gchar *t = g_malloc(BBSIZE*sizeof(gchar)); gchar* pdest; gint ngrad = 0; gint i; init_dipole(); while(!feof(fd) ) { pdest = NULL; init_dipole(); if(!feof(fd)) { char* e = fgets(t,taille,fd);} pdest = strstr( t, "Dipole moment (Debye)"); if(strstr( t, "Dipole moment") && strstr( t, "Debye")) /* field-independent basis */ { if(!feof(fd)) { char* e = fgets(t,taille,fd);} else break; Dipole.def = TRUE; pdest = strstr( t, "X=")+2; sscanf(pdest,"%lf",&Dipole.value[0]); pdest = strstr( t, "Y=")+2; sscanf(pdest,"%lf",&Dipole.value[1]); pdest = strstr( t, "Z=")+2; sscanf(pdest,"%lf",&Dipole.value[2]); /* Debug("t =%s\n",t); Debug("Dipole = %f %f %f\n",Dipole.value[0],Dipole.value[1],Dipole.value[2]); */ for(i=0;i<3;i++) Dipole.value[i] /= AUTODEB; break; } else { pdest = strstr( t, "GradGradGrad" ); if(pdest) { ngrad++; /* Debug("ngrad = %d\n",ngrad);*/ } if(ngrad>2) break; } } g_free(t); } /********************************************************************************/ void get_dipole_from_molpro_output_file(FILE* fd) { guint taille=BBSIZE; gchar *t = g_malloc(BBSIZE*sizeof(gchar)); gchar* t1; gchar* t2; init_dipole(); while(!feof(fd) ) { t1 = NULL; if(!feof(fd)) { char* e = fgets(t,taille,fd);} t1 = strstr( t, "DIPOLE MOMENTS:"); if(t1) { Dipole.def = TRUE; t2 = strstr( t1, ":")+2; sscanf(t2,"%lf %lf %lf",&Dipole.value[0],&Dipole.value[1],&Dipole.value[2]); /* Debug("t =%s\n",t); Debug("Dipole = %f %f %f\n",Dipole.value[0],Dipole.value[1],Dipole.value[2]); */ break; } else { t1 = strstr( t, "GEOMETRY OPTIMIZATION STEP" ); if(t1) break; t1 = strstr( t, "SEWARD" ); if(t1) break; } } g_free(t); } /********************************************************************************/ void get_dipole_from_dalton_output_file(FILE* fd) { guint taille=BBSIZE; gchar *t = g_malloc(BBSIZE*sizeof(gchar)); gchar* t1; gchar* t2; gchar dum[100]; init_dipole(); while(!feof(fd) ) { t1 = NULL; if(!fgets(t,taille,fd))break; t1 = strstr( t, "Dipole moment components"); if(t1) { if(!fgets(t,taille,fd))break; if(!fgets(t,taille,fd))break; if(!fgets(t,taille,fd))break; if(!fgets(t,taille,fd))break; t2 = strstr( t1, ":")+2; if(!fgets(t,taille,fd))break; sscanf(t,"%s %lf",dum, &Dipole.value[0]); if(!fgets(t,taille,fd))break; sscanf(t,"%s %lf",dum, &Dipole.value[1]); if(!fgets(t,taille,fd))break; sscanf(t,"%s %lf",dum, &Dipole.value[2]); Dipole.def = TRUE; /* Debug("t =%s\n",t); Debug("Dipole = %f %f %f\n",Dipole.value[0],Dipole.value[1],Dipole.value[2]); */ break; } else { if(strstr( t, ">>>>" )) break; } } g_free(t); } /********************************************************************************/ void get_dipole_from_orca_output_file(FILE* fd) { guint taille=BBSIZE; gchar *t = g_malloc(BBSIZE*sizeof(gchar)); gchar* pdest; init_dipole(); while(!feof(fd) ) { pdest = NULL; init_dipole(); if(!feof(fd)) { char* e = fgets(t,taille,fd);} pdest = strstr( t, "Total Dipole Moment"); if(pdest && strstr( t,":")) { pdest = strstr( t,":")+1; Dipole.def = TRUE; sscanf(pdest,"%lf %lf %lf",&Dipole.value[0],&Dipole.value[1],&Dipole.value[2]); break; } } g_free(t); } /********************************************************************************/ void get_dipole_from_vasp_output_file(FILE* fd) { guint taille=BBSIZE; gchar *t = g_malloc(BBSIZE*sizeof(gchar)); gchar* pdest; init_dipole(); g_free(t); } /********************************************************************************/ void get_dipole_from_nwchem_output_file(FILE* fd) { guint taille=BBSIZE; gchar *t = g_malloc(BBSIZE*sizeof(gchar)); gchar* pdest; init_dipole(); while(!feof(fd) ) { pdest = NULL; init_dipole(); if(!feof(fd)) { char* e = fgets(t,taille,fd);} pdest = strstr( t, "Nuclear Dipole moment"); if(pdest) { gboolean OK = FALSE; while(!feof(fd) ) { if(!fgets(t,taille,fd)) break; if(strstr(t,"---------------- ---------------- ----------------")) { OK = TRUE; break; } } if(!OK) break; if(!fgets(t,taille,fd)) break; Dipole.def = TRUE; sscanf(pdest,"%lf %lf %lf",&Dipole.value[0],&Dipole.value[1],&Dipole.value[2]); break; } } g_free(t); } /********************************************************************************/ void get_dipole_from_psicode_output_file(FILE* fd) { guint taille=BBSIZE; gchar *t = g_malloc(BBSIZE*sizeof(gchar)); gchar* pdest; init_dipole(); while(!feof(fd) ) { pdest = NULL; init_dipole(); if(!feof(fd)) { char* e = fgets(t,taille,fd);} pdest = strstr( t, "Nuclear Dipole moment"); if(pdest) { gboolean OK = FALSE; while(!feof(fd) ) { if(!fgets(t,taille,fd)) break; if(strstr(t,"---------------- ---------------- ----------------")) { OK = TRUE; break; } } if(!OK) break; if(!fgets(t,taille,fd)) break; Dipole.def = TRUE; sscanf(pdest,"%lf %lf %lf",&Dipole.value[0],&Dipole.value[1],&Dipole.value[2]); break; } } g_free(t); } /********************************************************************************/ void get_dipole_from_qchem_output_file(FILE* fd) { guint taille=BBSIZE; gchar *t = g_malloc(BBSIZE*sizeof(gchar)); gchar* pdest; gint ngrad = 0; gint i; init_dipole(); while(!feof(fd) ) { pdest = NULL; init_dipole(); if(!feof(fd)) { char* e = fgets(t,taille,fd);} pdest = strstr( t, "Dipole Moment (Debye)"); if(pdest) { if(!feof(fd)) { char* e = fgets(t,taille,fd);} else break; Dipole.def = TRUE; pdest = strstr( t, "X")+2; if(pdest) sscanf(pdest,"%lf",&Dipole.value[0]); pdest = strstr( t, "Y")+2; if(pdest) sscanf(pdest,"%lf",&Dipole.value[1]); pdest = strstr( t, "Z")+2; if(pdest) sscanf(pdest,"%lf",&Dipole.value[2]); for(i=0;i<3;i++) Dipole.value[i] /= AUTODEB; break; } else { pdest = strstr( t, "GradGradGrad" ); if(pdest) { ngrad++; } if(ngrad>2) break; } } g_free(t); } /********************************************************************************/ void get_dipole_from_mopac_output_file(FILE* fd) { guint taille=BBSIZE; gchar *t = g_malloc(BBSIZE*sizeof(gchar)); gchar* pdest; gint i; gchar dum[100]; init_dipole(); while(!feof(fd) ) { pdest = NULL; init_dipole(); if(!feof(fd)) { char* e = fgets(t,taille,fd);} pdest = strstr( t, "DIPOLE X Y Z"); if(pdest) { if(!fgets(t,taille,fd)) break; if(!fgets(t,taille,fd)) break; if(!fgets(t,taille,fd)) break; Dipole.def = TRUE; pdest = strstr( t, "SUM")+2; sscanf(t,"%s %lf %lf %lf",dum,&Dipole.value[0],&Dipole.value[1], &Dipole.value[2]); for(i=0;i<3;i++) Dipole.value[i] /= AUTODEB; break; } } g_free(t); } /********************************************************************************/ void get_dipole_from_mopac_aux_file(FILE* fd) { gchar t[BBSIZE]; gchar* pdest; gint i; init_dipole(); while(!feof(fd) ) { pdest = NULL; init_dipole(); if(!feof(fd)) { char* e = fgets(t,BBSIZE,fd);} pdest = strstr( t, "DIPOLE:DEBYE="); if(pdest) { Dipole.def = TRUE; pdest = strstr( t, "=")+1; Dipole.value[0] = 0; Dipole.value[1] = 0; Dipole.value[2] = 0; if(pdest) sscanf(pdest,"%lf %lf %lf",&Dipole.value[0], &Dipole.value[1],&Dipole.value[2]); for(i=0;i<3;i++) Dipole.value[i] /= AUTODEB; break; } } } /**********************************************/ void set_dipole(GtkWidget* fp,gpointer data) { GtkWidget** entrys = (GtkWidget**)data; GdkColor* color = g_object_get_data(G_OBJECT (fp), "Color"); G_CONST_RETURN gchar* tentry; gint i; gdouble fact=1.0; tentry = gtk_entry_get_text(GTK_ENTRY(entrys[0])); fact = atof(tentry); Dipole.def = TRUE; for(i=1;i<4;i++) { tentry = gtk_entry_get_text(GTK_ENTRY(entrys[i])); Dipole.value[i-1] = atof(tentry)*fact; } for(i=0;i<3;i++) Dipole.value[i] /= AUTODEB; tentry = gtk_entry_get_text(GTK_ENTRY(entrys[4])); Dipole.radius = atof(tentry)/AUTODEB; if(Dipole.radius<1e-6) Dipole.radius = 0.1; for(i=5;i<8;i++) { tentry = gtk_entry_get_text(GTK_ENTRY(entrys[i])); Dipole.origin[i-5] = atof(tentry)/BOHR_TO_ANG; } Dipole.color[0] = color->red; Dipole.color[1] = color->green; Dipole.color[2] = color->blue; rafresh_window_orb(); if(GeomDrawingArea != NULL) draw_geometry(NULL,NULL); } /**********************************************/ void init_dipole() { gint i; Dipole.def=FALSE; Dipole.radius = 0.25; Dipole.color[0] = 0; Dipole.color[1] = 0; Dipole.color[2] = 65535; for(i=0;i<3;i++) Dipole.value[i] = 0.0; for(i=0;i<3;i++) Dipole.origin[i] = 0.0; } /**********************************************/ void delete_last_spaces(gchar* str) { gchar *s; if(str == NULL) return; if (!*str) return; for (s = str + strlen (str) - 1; s >= str && isspace ((unsigned char)*s); s--) *s = '\0'; } /**********************************************/ void delete_first_spaces(gchar* str) { gchar *start; gint i; gint lenSpace = 0; if(str == NULL) return; if (!*str) return; for (start = str; *start && isspace (*start); start++)lenSpace++; for(i=0;i<(gint)(strlen(str)-lenSpace);i++) str[i] = str[i+lenSpace]; str[strlen(str)-lenSpace] = '\0'; } /**********************************************/ void delete_all_spaces(gchar* str) { gint i; gint j; gboolean Ok = FALSE; delete_last_spaces(str); delete_first_spaces(str); while(!Ok) { Ok = TRUE; for(i=0;i<(gint)strlen(str);i++) { if(isspace(str[i])) { Ok = FALSE; for(j=i;j<(gint)strlen(str);j++) { str[j] = str[j+1]; } break; } } } } /**********************************************/ gchar* get_to_str(gchar* str,gchar* end) { gchar* iend = NULL; gchar* res = NULL; gint len; gint i; if(str == NULL || end == NULL) return NULL; iend = strstr(str,end); if(iend==NULL) return g_strdup(str); len = iend - str; if(len<1) return NULL; res = g_malloc((len+1)*sizeof(gchar)); for(i=0;i= str && ((guchar)*s)=='\n'; s--) *s = '\0'; } /**********************************************/ gchar* get_font_label_name() { return FontsStyleLabel.fontname; } /*************************************************************************************/ gboolean test_type_program_gaussian(FILE* file) { gchar t[BBSIZE]; guint taille=BBSIZE; fseek(file, 0L, SEEK_SET); if(!fgets(t, taille, file)) return FALSE; if((int)t[0]==(int)'#' || (int)t[0]==(int)'%' ) return TRUE; return FALSE; } /**********************************************************************************/ gboolean test_type_program_molcas(FILE* file) { gchar t[BBSIZE]; guint taille=BBSIZE; fseek(file, 0L, SEEK_SET); while(!feof(file)) { if(!fgets(t, taille, file)) return FALSE; uppercase(t); if( strstr(t, "&SEWARD") ) return TRUE; if( strstr(t, "&GATEWAY") ) return TRUE; } return FALSE; } /**********************************************************************************/ gboolean test_type_program_molpro(FILE* file) { gchar t[BBSIZE]; guint taille=BBSIZE; fseek(file, 0L, SEEK_SET); while(!feof(file)) { if(!fgets(t, taille, file)) return FALSE; if( (int)t[0] ==(int)'!' ) continue; if( (int)t[0] ==(int)'*' ) return TRUE; return FALSE; } return FALSE; } /**********************************************************************************/ gboolean test_type_program_mpqc(FILE* file) { gchar t[BBSIZE]; guint taille=BBSIZE; fseek(file, 0L, SEEK_SET); while(!feof(file)) { if(!fgets(t, taille, file)) return FALSE; if(strstr(t,"%"))continue; /* Object-Oriented input file */ if(strstr(t,"molecule") && strstr(t,"Molecule") && strstr(t,"<") && strstr(t,">")) return TRUE; /* sample input file */ if(strstr(t,"molecule") && strstr(t,":")) return TRUE; } return FALSE; } /**********************************************************************************/ gboolean test_type_program_gamess(FILE* file) { gchar t[BBSIZE]; guint taille=BBSIZE; fseek(file, 0L, SEEK_SET); while(!feof(file)) { if(!fgets(t, taille, file)) return FALSE; if(strstr(t,"!"))continue; if(strstr(t,"$CONTRL")) return TRUE; /* sample input file */ if(strstr(t,"$BASIS")) return TRUE; if(strstr(t,"$DATA")) return TRUE; } return FALSE; } /**********************************************************************************/ gboolean test_type_program_firefly(FILE* file) { gchar t[BBSIZE]; guint taille=BBSIZE; fseek(file, 0L, SEEK_SET); while(!feof(file)) { if(!fgets(t, taille, file)) return FALSE; if(strstr(t,"FireFly")) return TRUE; } return FALSE; } /**********************************************************************************/ gboolean test_type_program_nwchem(FILE* file) { gchar t[BBSIZE]; guint taille=BBSIZE; fseek(file, 0L, SEEK_SET); while(!feof(file)) { if(!fgets(t, taille, file)) return FALSE; if(strstr(t,"NWChem input") && strstr(t,"#")) return TRUE; uppercase(t); if(strstr(t,"GEOMETRY")) return TRUE; if(strstr(t,"ZMATRIX")) return TRUE; } return FALSE; } /**********************************************************************************/ gboolean test_type_program_psicode(FILE* file) { gchar t[BBSIZE]; guint taille=BBSIZE; fseek(file, 0L, SEEK_SET); while(!feof(file)) { if(!fgets(t, taille, file)) return FALSE; if(strstr(t,"Psicode input") && strstr(t,"#")) return TRUE; uppercase(t); if(strstr(t,"GEOMETRY")) return TRUE; if(strstr(t,"ZMATRIX")) return TRUE; } return FALSE; } /**********************************************************************************/ gboolean test_type_program_orca(FILE* file) { gchar t[BBSIZE]; guint taille=BBSIZE; fseek(file, 0L, SEEK_SET); while(!feof(file)) { if(!fgets(t, taille, file)) return FALSE; if(strstr(t,"Orca input") && strstr(t,"#")) return TRUE; uppercase(t); if(strstr(t,"* XYZ")) return TRUE; if(strstr(t,"* INT")) return TRUE; } return FALSE; } /**********************************************************************************/ gboolean test_type_program_mopac(FILE* file) { gchar t[BBSIZE]; guint taille=BBSIZE; fseek(file, 0L, SEEK_SET); while(!feof(file)) { if(!fgets(t, taille, file)) return FALSE; if(t[0] != '*') break; if(t[0] == '*' && strstr(t,"Mopac")) return TRUE; } if(strstr(t,"BONDS") && strstr(t,"CHARGE")) return TRUE; if(!fgets(t, taille, file)) return FALSE; if(strstr(t,"Mopac")) return TRUE; return FALSE; } /**********************************************************************************/ gboolean test_type_program_qchem(FILE* file) { gchar t[BBSIZE]; guint taille=BBSIZE; fseek(file, 0L, SEEK_SET); while(!feof(file)) { if(!fgets(t, taille, file)) return FALSE; if(strstr(t,"!"))continue; if(strstr(t,"$molecule")) return TRUE; if(strstr(t,"$rem")) return TRUE; } return FALSE; } /**********************************************************************************/ gboolean test_type_program_demon(FILE* file) { gchar t[BBSIZE]; guint taille=BBSIZE; fseek(file, 0L, SEEK_SET); while(!feof(file)) { if(!fgets(t, taille, file)) return FALSE; if(strstr(t,"!"))continue; if(strstr(t,"DeMon")) return TRUE; } return FALSE; } /**********************************************************************************/ gint get_type_of_program(FILE* file) { if(test_type_program_demon(file)) { fseek(file, 0L, SEEK_SET); return PROG_IS_DEMON; } if(test_type_program_orca(file)) { fseek(file, 0L, SEEK_SET); return PROG_IS_ORCA; } if(test_type_program_firefly(file)) { fseek(file, 0L, SEEK_SET); return PROG_IS_FIREFLY; } if(test_type_program_gamess(file)) { fseek(file, 0L, SEEK_SET); return PROG_IS_GAMESS; } if(test_type_program_qchem(file)) { fseek(file, 0L, SEEK_SET); return PROG_IS_QCHEM; } if(test_type_program_mopac(file)) { fseek(file, 0L, SEEK_SET); return PROG_IS_MOPAC; } if(test_type_program_mpqc(file)) { fseek(file, 0L, SEEK_SET); return PROG_IS_MPQC; } if(test_type_program_nwchem(file)) { fseek(file, 0L, SEEK_SET); return PROG_IS_NWCHEM; } if(test_type_program_psicode(file)) { fseek(file, 0L, SEEK_SET); return PROG_IS_PSICODE; } if(test_type_program_gaussian(file)) { fseek(file, 0L, SEEK_SET); return PROG_IS_GAUSS; } if(test_type_program_molcas(file)) { fseek(file, 0L, SEEK_SET); return PROG_IS_MOLCAS; } if(test_type_program_molpro(file)) { fseek(file, 0L, SEEK_SET); return PROG_IS_MOLPRO; } fseek(file, 0L, SEEK_SET); return PROG_IS_OTHER; } /**************************************************************************************************************************************/ void gabedit_string_get_pixel_size(GtkWidget* parent, PangoFontDescription *font_desc, G_CONST_RETURN gchar* t, int *width, int* height) { PangoLayout *layout = gtk_widget_create_pango_layout(parent, t); if(font_desc) pango_layout_set_font_description (layout,font_desc); pango_layout_set_justify(layout, TRUE); pango_layout_get_pixel_size(layout, width,height); g_object_unref (layout); } /**********************************************************************************/ void gabedit_draw_string(GtkWidget* parent, GdkPixmap* pixmap, PangoFontDescription *font_desc, GdkGC* gc , gint x, gint y, G_CONST_RETURN gchar* t, gboolean centerX, gboolean centerY) { int width = 0; int height = 0; PangoLayout *layout = gtk_widget_create_pango_layout(parent, t); if(font_desc) pango_layout_set_font_description (layout,font_desc); pango_layout_set_justify(layout, TRUE); if(centerX || centerY) pango_layout_get_pixel_size(layout, &width,&height); if(centerX) x -= width/2; if(centerY) y -= height/2; gdk_draw_layout (pixmap,gc,x,y,layout); g_object_unref (layout); } /**********************************************************************************************************************************/ void gabedit_save_image(GtkWidget* widget, gchar *fileName, gchar* type) { int width; int height; GError *error = NULL; GdkPixbuf *pixbuf = NULL; width = widget->allocation.width; height = widget->allocation.height; pixbuf = gdk_pixbuf_get_from_drawable(NULL, widget->window, NULL, 0, 0, 0, 0, width, height); /* printf("width = %d height = %d\n",width,height);*/ if(pixbuf) { if(!fileName) { GtkClipboard * clipboard; clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); if(clipboard) { gtk_clipboard_clear(clipboard); gtk_clipboard_set_image(clipboard, pixbuf); } } else { if(type && strstr(type,"j") && strstr(type,"g") ) gdk_pixbuf_save(pixbuf, fileName, type, &error, "quality", "100", NULL); else if(type && strstr(type,"png")) gdk_pixbuf_save(pixbuf, fileName, type, &error, "compression", "5", NULL); else if(type && (strstr(type,"tif") || strstr(type,"tiff"))) gdk_pixbuf_save(pixbuf, fileName, "tiff", &error, "compression", "1", NULL); else gdk_pixbuf_save(pixbuf, fileName, type, &error, NULL); } g_object_unref (pixbuf); } /* else printf("Warnning pixbuf = NULL\n");*/ } /**********************************************************************************************************************************/ G_CONST_RETURN gchar* get_open_babel_command() { return babelCommand; } /**********************************************************************************************************************************/ gint get_num_orbitals_from_aux_mopac_file(FILE* file, gchar* blockName, gint* begin, gint* end) { gchar t[BBSIZE]; *begin = 0; *end = 0; while(!feof(file)) { if(!fgets(t,BBSIZE,file))break; if(strstr( t, blockName)) { gchar* pdest = strstr( t, "=")+1; gint i = sscanf(pdest,"%d %d",begin,end); return i; } } return 0; } /**********************************************************************************************************************************/ gchar** get_one_block_from_aux_mopac_file(FILE* file, gchar* blockName, gint* n) { gint nElements = 0; gchar** elements = NULL; gchar t[BBSIZE]; while(!feof(file)) { if(!fgets(t,BBSIZE,file))break; if(strstr( t, blockName)) { gchar* pdest = strstr( t, "[")+1; gint i; nElements = atoi(pdest); if(nElements<1) break; else { long int geomposok = ftell(file); if(!fgets(t,BBSIZE,file))break; if(!strstr(t,"# ")) fseek(file, geomposok, SEEK_SET); } elements = g_malloc(nElements*sizeof(gchar*)); for(i=0;i0;i--) if(filename[i]=='.') { p=i+1; break; } lnew = len-p; if(p<0 || lnew<=0) return NULL; ext= g_malloc((lnew+1)*sizeof(gchar)); for(i=p;i0 && !strstr(t,"**********")) ktype = GABEDIT_TYPEFILE_XYZ; if( ktype == GABEDIT_TYPEFILE_UNKNOWN) { while(!feof(file)) { if(!feof(file)) { char* e = fgets(t,taille,file);} if(strstr(t,"PROGRAM SYSTEM MOLPRO")) { ktype = GABEDIT_TYPEFILE_MOLPRO; break; } if(strstr(t,"GAMESS VERSION") || strstr(t,"PC GAMESS")) { ktype = GABEDIT_TYPEFILE_GAMESS; break; } if(strstr(t,"PROGRAM deMon2k")) { ktype = GABEDIT_TYPEFILE_DEMON; break; } if(strstr(t,"GAMESS VERSION") || strstr(t,"PC GAMESS")) { ktype = GABEDIT_TYPEFILE_GAMESS; break; } if(strstr(t,"Welcome to Q-Chem")) { ktype = GABEDIT_TYPEFILE_QCHEM; break; } if(strstr(t,"Northwest Computational Chemistry Package")) { ktype = GABEDIT_TYPEFILE_NWCHEM; break; } if(strstr(t,"TURBOMOLE GmbH")) { ktype = GABEDIT_TYPEFILE_TURBOMOLE; break; } uppercase(t); if(strstr(t, "ENTERING GAUSSIAN" )) { ktype = GABEDIT_TYPEFILE_GAUSSIAN; break; } if(strstr( t, "[MOLDEN FORMAT]" )) { ktype = GABEDIT_TYPEFILE_MOLDEN; break; } } } rewind(file); if( ktype == GABEDIT_TYPEFILE_UNKNOWN) { while(!feof(file)) { if(!feof(file)) { char* e = fgets(t,taille,file);} if(strstr(t,"* O R C A *")) { ktype = GABEDIT_TYPEFILE_ORCA; break; } } } rewind(file); if( ktype == GABEDIT_TYPEFILE_UNKNOWN) { while(!feof(file)) { if(!feof(file)) { char* e = fgets(t,taille,file);} if(strstr(t,"VASP")) { ktype = GABEDIT_TYPEFILE_VASPOUTCAR; break; } } } rewind(file); if( ktype == GABEDIT_TYPEFILE_UNKNOWN) { while(!feof(file)) { if(!feof(file)) { char* e = fgets(t,taille,file);} if(strstr(t,"GAMESS")) { if(!feof(file)) { char* e = fgets(t,taille,file);} if(strstr(t,"FROM IOWA STATE UNIVERSITY")) ktype = GABEDIT_TYPEFILE_GAMESS; break; } } } rewind(file); if( ktype == GABEDIT_TYPEFILE_UNKNOWN) { if(!feof(file)) { char* e = fgets(t,taille,file);} if(strstr(t,"START OF MOPAC FILE")) ktype = GABEDIT_TYPEFILE_MOPAC_AUX; } rewind(file); if( ktype == GABEDIT_TYPEFILE_UNKNOWN) { while(!feof(file) ) { if(!fgets(t, taille, file))break; if( strstr(t,"VARIABLE") && strstr(t,"FUNCTION")) { ktype = GABEDIT_TYPEFILE_MOPAC_SCAN; break; } } } rewind(file); if( ktype == GABEDIT_TYPEFILE_UNKNOWN) { while(!feof(file) ) { if(!fgets(t, taille, file))break; if(strstr(t,"INTRINSIC REACTION COORDINATE") ) { ktype = GABEDIT_TYPEFILE_MOPAC_IRC; break; } } } g_free(t); fclose(file); return ktype; } /**********************************************/ GabEditTypeFile get_type_input_file(gchar* fileName) { FILE* file = FOpen(fileName, "rb"); if(test_type_program_orca(file)) { fseek(file, 0L, SEEK_SET); fclose(file); return GABEDIT_TYPEFILE_ORCAINPUT; } if(test_type_program_firefly(file)) { fseek(file, 0L, SEEK_SET); fclose(file); return GABEDIT_TYPEFILE_FIREFLYINPUT; } if(test_type_program_gamess(file)) { fseek(file, 0L, SEEK_SET); fclose(file); return GABEDIT_TYPEFILE_GAMESSINPUT; } if(test_type_program_qchem(file)) { fseek(file, 0L, SEEK_SET); fclose(file); return GABEDIT_TYPEFILE_QCHEMINPUT; } if(test_type_program_mopac(file)) { fseek(file, 0L, SEEK_SET); fclose(file); return GABEDIT_TYPEFILE_MOPACINPUT; } if(test_type_program_mpqc(file)) { fseek(file, 0L, SEEK_SET); fclose(file); return GABEDIT_TYPEFILE_MPQCINPUT; } if(test_type_program_gaussian(file)) { fseek(file, 0L, SEEK_SET); fclose(file); return GABEDIT_TYPEFILE_GAUSSIANINPUT; } if(test_type_program_molcas(file)) { fseek(file, 0L, SEEK_SET); fclose(file); return GABEDIT_TYPEFILE_MOLCASINPUT; } if(test_type_program_molpro(file)) { fseek(file, 0L, SEEK_SET); fclose(file); return GABEDIT_TYPEFILE_MOLPROINPUT; } fseek(file, 0L, SEEK_SET); fclose(file); return GABEDIT_TYPEFILE_UNKNOWN; } /************************************************/ GabEditTypeFile get_type_file(gchar* filename) { gchar* ext = NULL; if(!filename) return GABEDIT_TYPEFILE_UNKNOWN; ext = get_extenssion_file(filename); if(!ext) return GABEDIT_TYPEFILE_UNKNOWN; uppercase(ext); if( !strcmp(ext,"INP") || !strcmp(ext,"COM") || !strcmp(ext,"IN") || !strcmp(ext,"MOP") ) return get_type_input_file(filename); if( !strcmp(ext,"OUT") || !strcmp(ext,"LOG") ) return get_type_output_file(filename); if( !strcmp(ext,"MOL2")) return GABEDIT_TYPEFILE_MOL2; if( !strcmp(ext,"XYZ")) return GABEDIT_TYPEFILE_XYZ; if( !strcmp(ext,"PDB")) return GABEDIT_TYPEFILE_PDB; if( !strcmp(ext,"GZMT")) return GABEDIT_TYPEFILE_GZMAT; if( !strcmp(ext,"ZMT")) return GABEDIT_TYPEFILE_MZMAT; if( !strcmp(ext,"HIN")) return GABEDIT_TYPEFILE_HIN; if( !strcmp(ext,"TNK")) return GABEDIT_TYPEFILE_TINKER; if( !strcmp(ext,"GAB")) return GABEDIT_TYPEFILE_GABEDIT; if( !strcmp(ext,"MOLDEN")) return GABEDIT_TYPEFILE_MOLDEN; if( !strcmp(ext,"MFJ")) return GABEDIT_TYPEFILE_MOBCAL; if( !strcmp(ext,"AUX")) return GABEDIT_TYPEFILE_MOPAC_AUX; if( !strcmp(ext,"JPG")) return GABEDIT_TYPEFILE_JPEG; if( !strcmp(ext,"JPEG")) return GABEDIT_TYPEFILE_JPEG; if( !strcmp(ext,"PPM")) return GABEDIT_TYPEFILE_PPM; if( !strcmp(ext,"BMP")) return GABEDIT_TYPEFILE_BMP; if( !strcmp(ext,"PNG")) return GABEDIT_TYPEFILE_PNG; if( !strcmp(ext,"PS")) return GABEDIT_TYPEFILE_PS; if( !strcmp(ext,"T41")) return GABEDIT_TYPEFILE_CUBEADF; if( !strcmp(ext,"GRID")) return GABEDIT_TYPEFILE_CUBEMOLCAS; if( !strcmp(ext,"HF")) return GABEDIT_TYPEFILE_CUBEQCHEM; if( !strcmp(ext,"GCUBE")) return GABEDIT_TYPEFILE_CUBEGABEDIT; if( !strcmp(ext,"TRJ")) return GABEDIT_TYPEFILE_TRJ; if( !strcmp(ext,"TXT")) return GABEDIT_TYPEFILE_TXT; if( !strcmp(ext,"IRC")) return GABEDIT_TYPEFILE_GAMESSIRC; if( !strcmp(ext,"CUBE") && !strcmp(filename,"CUBE")) return GABEDIT_TYPEFILE_CUBEMOLPRO; if( !strcmp(ext,"CUBE")) return GABEDIT_TYPEFILE_CUBEGAUSS; if( !strcmp(ext,"FCHK")) return GABEDIT_TYPEFILE_GAUSSIAN_FCHK; return GABEDIT_TYPEFILE_UNKNOWN; } /************************************************/ gchar * mystrcasestr(G_CONST_RETURN gchar *haystack, G_CONST_RETURN gchar *needle) { gchar *i, *startn = 0, *j = 0; for (i = (gchar*)haystack; *i; i++) { if(j) { if (toupper(*i) == toupper(*j)) { if (!*++j) return startn; } else j = 0; } else if (toupper(*i) == toupper(*needle)) { j = (gchar*)needle + 1; startn = i; } } return 0; } /****************************************************************************/ gint get_one_int_from_fchk_gaussian_file(FILE* file, gchar* blockName) { gint ipos = 47; gchar t[BBSIZE]; while(!feof(file)) { if(!fgets(t,BBSIZE,file))break; if(strstr( t, blockName)) { if(strlen(t)>ipos+1) return atoi(t+ipos); return -1; } } return -1; } /****************************************************************************/ gdouble get_one_real_from_fchk_gaussian_file(FILE* file, gchar* blockName) { gint ipos = 47; gchar t[BBSIZE]; while(!feof(file)) { if(!fgets(t,BBSIZE,file))break; if(strstr( t, blockName)) { if(strlen(t)>ipos+1) return atof(t+ipos); return -1; } } return -1; } /****************************************************************************/ gint* get_array_int_from_fchk_gaussian_file(FILE* file, gchar* blockName, gint* nElements) { gint ipos = 43; gint i; gchar t[BBSIZE]; gint* elements = NULL; *nElements = 0; while(!feof(file)) { if(!fgets(t,BBSIZE,file))break; if(strstr( t, blockName)) { if(!(strstr( t, blockName) && strstr(t,"N=") && strlen(strstr(t,"N="))>2)) return elements; if(strlen(t)>ipos+1 && t[ipos]!='I') return elements; *nElements = atof(strstr(t,"N=")+2); if(*nElements<1) return elements; elements = g_malloc(*nElements*sizeof(gint)); for(i=0;i<*nElements;i++) { if(1!=fscanf(file,"%d",&elements[i])) break; } if(i!=*nElements) { *nElements = 0; g_free(elements); return NULL; } return elements; } } return elements; } /****************************************************************************/ gdouble* get_array_real_from_fchk_gaussian_file(FILE* file, gchar* blockName, gint* nElements) { gint ipos = 43; gint i; gchar t[BBSIZE]; gdouble* elements = NULL; *nElements = 0; while(!feof(file)) { if(!fgets(t,BBSIZE,file))break; if(strstr( t, blockName)) { if(!(strstr( t, blockName) && strstr(t,"N=") && strlen(strstr(t,"N="))>2)) return elements; if(strlen(t)>ipos+1 && t[ipos]!='R') return elements; *nElements = atof(strstr(t,"N=")+2); if(*nElements<1) return elements; elements = g_malloc(*nElements*sizeof(gdouble)); for(i=0;i<*nElements;i++) if(1!=fscanf(file,"%lf",&elements[i])) break; if(i!=*nElements) { *nElements = 0; g_free(elements); return NULL; } return elements; } } return elements; } /****************************************************************************/ gchar** get_array_string_from_fchk_gaussian_file(FILE* file, gchar* blockName, gint* nElements) { gint ipos = 43; gint i; gchar t[BBSIZE]; gchar** elements = NULL; gchar type = ' '; *nElements = 0; while(!feof(file)) { if(!fgets(t,BBSIZE,file))break; if(strstr( t, blockName)) { if(!(strstr( t, blockName) && strstr(t,"N=") && strlen(strstr(t,"N="))>2)) return elements; if(strlen(t)>ipos+1 && t[ipos]=='C') type = 'C'; if(strlen(t)>ipos+1 && t[ipos]=='H') type = 'H'; if(type!='C' && type!='H') return elements; *nElements = atof(strstr(t,"N=")+2); if(*nElements<1) return elements; elements = g_malloc(*nElements*sizeof(gchar*)); for(i=0;i<*nElements;i++) elements[i] = NULL; if(type=='C') for(i=0;i<*nElements;i++) { if(1!=fscanf(file,"%12s",t)) break; elements[i] = g_strdup(t); } else for(i=0;i<*nElements;i++) { if(1!=fscanf(file,"%8s",t)) break; elements[i] = g_strdup(t); } if(i!=*nElements) { *nElements = 0; g_free(elements); return NULL; } return elements; } } return elements; } /*************************************************************************************/ void getvScaleBond(gdouble r, gdouble Center1[], gdouble Center2[], gdouble vScal[]) { gint l; V3d cros; V3d sub; V3d C0={0,0,0}; gdouble C10[3]; gdouble C20[3]; gdouble CC1[3]; gdouble CC2[3]; for(l=0;l<3;l++) vScal[l] = r*0.5; for(l=0;l<3;l++) CC1[l] = Center1[l]; for(l=0;l<3;l++) CC2[l] = Center2[l]; v3d_sub(C0, CC1, C10); v3d_sub(C0, CC2, C20); v3d_cross(C10, C20, cros); v3d_sub(CC1, CC2, sub); v3d_cross(cros, sub, vScal); if(v3d_dot(vScal,vScal)!=0) { v3d_normal(vScal); v3d_scale(vScal, r*0.5); } else { gdouble d = 0; gint j,k; /* printf("Warning vScal in getvScaleBond/Utils.c = 0\n");*/ v3d_normal(sub); /* find an orthogonal vector to CC1-CC2 */ k = 0; for(j=1;j<3;j++) if(fabs(sub[k])>fabs(sub[j])) k = j; for(j=0;j<3;j++) vScal[j] = -sub[k] * sub[j]; vScal[k] += 1.0; v3d_normal(vScal); v3d_scale(vScal, r*0.5); } } /*************************************************************************************/ void getPositionsRadiusBond3(gdouble r, gdouble Orig[], gdouble Ci[], gdouble Cj[], gdouble C11[], gdouble C12[], gdouble C21[], gdouble C22[], gdouble C31[], gdouble C32[], gdouble radius[], gint type) { gdouble s = 1.8; V3d vScal; gint k; for(k=0;k<3;k++) Ci[k] -= Orig[k]; for(k=0;k<3;k++) Cj[k] -= Orig[k]; getvScaleBond(r, Ci, Cj, vScal); if(type==0) { s = 2.8; radius[0] = r/4; radius[1] = r; radius[2] = r/4; } else { s = 2.8; radius[0] = r/2; radius[1] = r/2; radius[2] = r/2; } for(k=0;k<3;k++) C11[k] = Ci[k]-s*vScal[k]; for(k=0;k<3;k++) C12[k] = Cj[k]-s*vScal[k]; for(k=0;k<3;k++) C21[k] = Ci[k]; for(k=0;k<3;k++) C22[k] = Cj[k]; for(k=0;k<3;k++) C31[k] = Ci[k]+s*vScal[k]; for(k=0;k<3;k++) C32[k] = Cj[k]+s*vScal[k]; for(k=0;k<3;k++) Ci[k] += Orig[k]; for(k=0;k<3;k++) Cj[k] += Orig[k]; for(k=0;k<3;k++) C11[k] += Orig[k]; for(k=0;k<3;k++) C12[k] += Orig[k]; for(k=0;k<3;k++) C21[k] += Orig[k]; for(k=0;k<3;k++) C22[k] += Orig[k]; for(k=0;k<3;k++) C31[k] += Orig[k]; for(k=0;k<3;k++) C32[k] += Orig[k]; } /*************************************************************************************/ void getPositionsRadiusBond2(gdouble r, gdouble Orig[], gdouble Ci[], gdouble Cj[], gdouble C11[], gdouble C12[], gdouble C21[], gdouble C22[], gdouble radius[], gint type) { /* type=0=>stick, type=1=>ball&stick */ gdouble s = 1.5; V3d vScal; gint k; for(k=0;k<3;k++) Ci[k] -= Orig[k]; for(k=0;k<3;k++) Cj[k] -= Orig[k]; getvScaleBond(r, Ci, Cj, vScal); radius[2] = 0; if(type==0) { s = 2.8; radius[0] = r/4; radius[1] = r; for(k=0;k<3;k++) C11[k] = Ci[k]-s*vScal[k]; for(k=0;k<3;k++) C12[k] = Cj[k]-s*vScal[k]; for(k=0;k<3;k++) C21[k] = Ci[k]; for(k=0;k<3;k++) C22[k] = Cj[k]; } else { s = 1.5; radius[0] = r/1.5; radius[1] = r/1.5; for(k=0;k<3;k++) C11[k] = Ci[k]-s*vScal[k]; for(k=0;k<3;k++) C12[k] = Cj[k]-s*vScal[k]; for(k=0;k<3;k++) C21[k] = Ci[k]+s*vScal[k]; for(k=0;k<3;k++) C22[k] = Cj[k]+s*vScal[k]; } for(k=0;k<3;k++) Ci[k] += Orig[k]; for(k=0;k<3;k++) Cj[k] += Orig[k]; for(k=0;k<3;k++) C11[k] += Orig[k]; for(k=0;k<3;k++) C12[k] += Orig[k]; for(k=0;k<3;k++) C21[k] += Orig[k]; for(k=0;k<3;k++) C22[k] += Orig[k]; } /*********************************************************************************************************************/ void getCoefsGradient(gint nBoundary, gdouble xh, gdouble yh, gdouble zh, gdouble* fcx, gdouble* fcy, gdouble* fcz) { gdouble* coefs = g_malloc((nBoundary)*sizeof(gdouble)); gdouble xxh = 1.0; gdouble yyh = 1.0; gdouble zzh = 1.0; gint i; switch(nBoundary) { case 1:{ gdouble denom = 2.0; gdouble c[] = {-1.0}; for(i=0;i=cutoff) printf("%d %20.10f\n",i+1,C[i]); } /****************************************************************************************************************************/ gdouble** newMatrixDouble(gint nrows, gint ncolumns) { gdouble** M = NULL; if(nrows<1 || ncolumns<1) return M; M = g_malloc(nrows*sizeof(gdouble*)); gint i; for(i = 0;incolumns-1) continue; x = M[i][j]; y = M[j][i]; if(fabs(x)>cutOff && fabs(y)>cutOff) M[i][j] = M[j][i] = (x+y)/2; else if(fabs(x)>cutOff) M[i][j] = M[j][i] = x; else if(fabs(y)>cutOff) M[i][j] = M[j][i] = y; else M[i][j] = 0.0; } } /****************************************************************************************************************************/ void printMatrixDouble(gdouble** M, gint nrows, gint ncolumns) { gint i,j; for(i = 0;i=cutoff) printf("%d %d %20.10f\n",i+1,j+1,M[i][j]); } } /****************************************************************************************************************************/ gdouble*** newCubeDouble(gint nrows, gint ncolumns, gint nslices) { gdouble*** C = NULL; gint i,j; if(nrows<1 || ncolumns<1 || nslices<1) return C; C = g_malloc(nrows*sizeof(gdouble**)); for(i = 0;i=cutoff) printf("%d %d %d %20.10f\n",i+1,j+1,k+1,C[i][j][k]); } } } /****************************************************************************************************************************/ static void symmetrizeCubeDoubleIJ(gdouble*** C, gint nrows, gint ncolumns, gint nslices, gdouble cutOff) { gint i,j,k; gdouble x,y; for(i = 0;incolumns-1) continue; for(k = 0;kcutOff && fabs(y)>cutOff) C[i][j][k] = C[j][i][k] = (x+y)/2; else if(fabs(x)>cutOff) C[i][j][k] = C[j][i][k] = x; else if(fabs(y)>cutOff) C[i][j][k] = C[j][i][k] = y; else C[i][j][k] = 0.0; } } } /****************************************************************************************************************************/ static void symmetrizeCubeDoubleJK(gdouble*** C, gint nrows, gint ncolumns, gint nslices, gdouble cutOff) { gint i; for(i=0;i=cutoff) printf("%d %d %d %d %20.10f\n",i+1,j+1,k+1,l+1,C[i][j][k][l]); } } } } /****************************************************************************************************************************/ void initQuarticDouble(gdouble**** C, gint nrows, gint ncolumns, gint nslices, gint nl, gdouble val) { gint i,j,k,l; if(!C) return; for(i = 0;incolumns-1) continue; for(k = 0;kcutOff && fabs(y)>cutOff) Q[i][j][k][l] = Q[j][i][k][l] = (x+y)/2; else if(fabs(x)>cutOff) Q[i][j][k][l] = Q[j][i][k][l] = x; else if(fabs(y)>cutOff) Q[i][j][k][l] = Q[j][i][k][l] = y; else Q[i][j][k][l] = 0.0; } } } /****************************************************************************************************************************/ static void symmetrizeQuarticDoubleJKL(gdouble**** Q, gint nrows, gint ncolumns, gint nslices, gint nq, gdouble cutOff) { gint i; for(i=0;i0) { gchar* p = t+(gint)(pos-t2); if(*value) g_free(*value); *value = strdup(p); strDeleten(*value); deleteFirstSpaces(*value); deleteLastSpaces(*value); return TRUE; } return FALSE; } g_free(TAG); return FALSE; } /****************************************************************************************************************************/ void strDeleten(gchar* str) { gchar *s; if(str == NULL) return; if (!*str) return; for (s = str + strlen (str) - 1; s >= str && ((unsigned char)*s)=='\n'; s--) *s = '\0'; } /****************************************************************************************************************************/ void deleteLastSpaces(gchar* str) { gchar *s; if(str == NULL) return; if (!*str) return; for (s = str + strlen (str) - 1; s >= str && isspace ((unsigned char)*s); s--) *s = '\0'; } /****************************************************************************************************************************/ void deleteFirstSpaces(gchar* str) { gchar *start; gint i; gint lenSpace = 0; if(str == NULL) return; if (!*str) return; for (start = str; *start && isspace (*start); start++)lenSpace++; for(i=0;i<(gint)(strlen(str)-lenSpace);i++) str[i] = str[i+lenSpace]; str[strlen(str)-lenSpace] = '\0'; } /****************************************************************************************************************************/ void deleteAllSpaces(gchar* str) { gint i; gint j; gboolean Ok = FALSE; deleteLastSpaces(str); deleteFirstSpaces(str); while(!Ok) { Ok = TRUE; for(i=0;i<(gint)strlen(str);i++) { if(isspace(str[i])) { Ok = FALSE; for(j=i;j<(gint)strlen(str);j++) { str[j] = str[j+1]; } break; } } } } /****************************************************************************************************************************/ gboolean goToStr(FILE* file, gchar* tag) { static gchar *t = NULL; gchar* TAG = NULL; gchar* pos = NULL; int i=0; int ii,jj; double v; int** counter = NULL; if(!tag) return FALSE; if(t==NULL) t = g_malloc(BSIZE*sizeof(gchar)); TAG = strdup(tag); uppercase(TAG); rewind(file); while(!feof(file)) { if(!fgets(t,BSIZE, file)) break; deleteFirstSpaces(t); if(t[0]=='#') continue; uppercase(t); pos = strstr(t,TAG); if(!pos) continue; break; } return pos != NULL; } GabeditSrc250/src/Utils/GabeditXYPlotWin.h0000644000175100017510000000553413130665225020677 0ustar alloucheallouche/* GabeditXYPlotWin.h */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GABEDITXYPLOTWIN_H__ #define __GABEDIT_GABEDITXYPLOTWIN_H__ #include #include #include "GabeditXYPlot.h" typedef enum { GABEDIT_CONV_TYPE_NONE, GABEDIT_CONV_TYPE_LORENTZ, GABEDIT_CONV_TYPE_GAUSS, } GabeditConvType; typedef struct { gdouble *x, *y; guint size; GabeditXYPlotDataStyle style; guint point_width, line_width; GdkColor point_color, line_color; GdkLineStyle line_style; XYPlotData* dataPeaks; XYPlotData* dataCurve; gboolean showDataPeaks; gboolean showDataCurve; gdouble xmin; gdouble xmax; gdouble ymin; gdouble ymax; gdouble halfWidth; GabeditConvType convType; gdouble scaleX; }XYPlotWinData; void gabedit_xyplotwin_add_data(GtkWidget *winXYPlot, gint size, gdouble* x, gdouble* y); void gabedit_xyplotwin_autorange(GtkWidget *winXYPlot); GtkWidget* gabedit_xyplotwin_new (gchar* title); GtkWidget* gabedit_xyplotwin_new_with_xy(gchar* title, gint size, gdouble* x, gdouble* y); void gabedit_xyplotwin_relect_x(GtkWidget* window, gboolean active); void gabedit_xyplotwin_relect_y(GtkWidget* window, gboolean active); void gabedit_xyplotwin_set_half_width(GtkWidget* window, gdouble value); void gabedit_xyplotwin_set_xmin(GtkWidget* window, gdouble value); void gabedit_xyplotwin_set_xmax(GtkWidget* window, gdouble value); void gabedit_xyplotwin_set_ymin(GtkWidget* window, gdouble value); void gabedit_xyplotwin_set_ymax(GtkWidget* window, gdouble value); GtkWidget* gabedit_xyplotwin_new_testing (gchar* title); #endif /* __GABEDIT_GABEDITXYPLOTWIN_H__ */ GabeditSrc250/src/Utils/PovrayUtils.h0000644000175100017510000000052113130665225020032 0ustar alloucheallouche #ifndef __GABEDIT_POVRAYUTILS_H__ #define __GABEDIT_POVRAYUTILS_H__ void createPOVBackgroundFrame(GtkWidget *box); void applyPovrayOptions(GtkWidget *win, gpointer data); void createPovrayOptionsWindow(GtkWidget* win); gchar *get_pov_background(gdouble xScale, gdouble yScale, gdouble zScale); #endif /* __GABEDIT_POVRAYUTILS_H__ */ GabeditSrc250/src/Utils/UtilsInterface.c0000644000175100017510000035626513130665225020470 0ustar alloucheallouche/* UtilsInterface.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Gaussian/GaussGlobal.h" #include "../Files/FileChooser.h" #include "../Gamess/Gamess.h" #include "../FireFly/FireFly.h" #include "../Molcas/Molcas.h" #include "../Molpro/Molpro.h" #include "../MPQC/MPQC.h" #include "../DeMon/DeMon.h" #include "../Orca/Orca.h" #include "../NWChem/NWChem.h" #include "../Psicode/Psicode.h" #include "../QChem/QChem.h" #include "../Mopac/Mopac.h" #include "../Gaussian/Gaussian.h" #include "../Geometry/GeomGlobal.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/GabeditTextEdit.h" #include "../Geometry/ResultsAnalise.h" #include "../Geometry/EnergiesCurves.h" #include "../Common/Windows.h" #include "../Files/ListeFiles.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/GeomZmatrix.h" #include "../Common/SplashScreen.h" #include "../Display/ViewOrb.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Common/Exit.h" #include "../Molcas/MolcasVariables.h" #include "../Molcas/MolcasGateWay.h" #include "../Utils/GabeditXYPlot.h" #include "../../pixmaps/Ok.xpm" #include "../../pixmaps/Cancel.xpm" #include "../../pixmaps/Yes.xpm" #include "../../pixmaps/No.xpm" #include "../../pixmaps/SaveMini.xpm" #include "../../pixmaps/Close.xpm" #include "../../pixmaps/Apply.xpm" #include "../../pixmaps/Question.xpm" #include "../../pixmaps/Warning.xpm" #include "../../pixmaps/Error.xpm" #include "../../pixmaps/Info.xpm" #include "../../pixmaps/A0p.xpm" #include "../../pixmaps/A0d.xpm" #include "../../pixmaps/Open.xpm" #include "../../pixmaps/Gabedit.xpm" #include "../../pixmaps/Print.xpm" #include "../../pixmaps/Next.xpm" #include "../../pixmaps/Stop.xpm" #include "../../pixmaps/Play.xpm" #include "../Common/StockIcons.h" #include "../Spectrum/IRSpectrum.h" #include "../Spectrum/RamanSpectrum.h" /********************************************************************************/ static gint destroy_popup(gpointer data) { gtk_widget_hide(GTK_WIDGET(data)); gtk_object_destroy(GTK_OBJECT(data)); return FALSE; } /********************************************************************************/ void create_popup_win(gchar* label) { GtkWidget *MainFrame; GtkWidget *Label; GtkWidget *hbox = gtk_hbox_new(0,FALSE); MainFrame = gtk_window_new (GTK_WINDOW_POPUP); /* center it on the screen*/ gtk_window_set_position(GTK_WINDOW (MainFrame), GTK_WIN_POS_MOUSE); /* set up key and mound button press to hide splash screen*/ gtk_widget_add_events(MainFrame, GDK_BUTTON_PRESS_MASK| GDK_BUTTON_RELEASE_MASK| GDK_KEY_PRESS_MASK); g_signal_connect(G_OBJECT(MainFrame),"button_press_event", G_CALLBACK(gtk_widget_destroy),NULL); g_signal_connect(G_OBJECT(MainFrame),"key_press_event", G_CALLBACK(gtk_widget_destroy),NULL); gtk_widget_realize(MainFrame); Label = gtk_label_new(label); gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT); set_font (Label,"helvetica bold 24"); gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 0); gtk_widget_show(Label); gtk_widget_show(hbox); gtk_container_add (GTK_CONTAINER (MainFrame), hbox); gtk_widget_show(MainFrame); /* force it to draw now.*/ gdk_flush(); /* go into main loop, processing events.*/ while(gtk_events_pending()) gtk_main_iteration(); /* after 3 seconds, destroy the splash screen.*/ g_timeout_add( 1000, destroy_popup, MainFrame ); } /********************************************************************************/ void init_child(GtkWidget *widget, GabeditSignalFunc func,gchar *buttonlabel) { WidgetChildren *children = g_malloc(sizeof(WidgetChildren)); g_object_set_data(G_OBJECT (widget), "Children", children); children->nchildren = 1; children->children = g_malloc(sizeof(GtkWidget*)); children->destroychildren = g_malloc(sizeof(GCallback)); children->children[0] = widget; g_object_set_data(G_OBJECT(children->children[0]),"Parent",widget); children->destroychildren[0] = func; if(buttonlabel) add_button_windows(buttonlabel,widget); } /********************************************************************************/ void add_child(GtkWidget *widget,GtkWidget *childwidget,GabeditSignalFunc func,gchar *buttonlabel) { WidgetChildren *children = (WidgetChildren *)g_object_get_data(G_OBJECT(widget),"Children"); children->nchildren++; children->children = g_realloc(children->children,children->nchildren*sizeof(GtkWidget*)); children->destroychildren = g_realloc(children->destroychildren,children->nchildren*sizeof(GCallback)); children->children[children->nchildren-1] = childwidget; g_object_set_data(G_OBJECT(children->children[children->nchildren-1]),"Parent",widget); children->destroychildren[children->nchildren-1] = func; if(buttonlabel) add_button_windows(buttonlabel,childwidget); } /********************************************************************************/ void delete_child(GtkWidget *childwidget) { GtkWidget *widget = NULL; WidgetChildren *children; gint i; gint k; widget = GTK_WIDGET(g_object_get_data(G_OBJECT(childwidget),"Parent")); if(!widget) return; children = (WidgetChildren *)g_object_get_data(G_OBJECT(widget),"Children"); k = -1; for(i=0;inchildren;i++) { if(children->children[i]==childwidget) { destroy_button_windows(children->children[i]); children->destroychildren[i](children->children[i]); children->children[i] = NULL; k = i; break; } } if(k!=-1) { for(i=k;inchildren-1;i++) { children->children[i] = children->children[i+1]; children->destroychildren[i] = children->destroychildren[i+1]; } children->nchildren--; children->children = g_realloc(children->children,children->nchildren*sizeof(GtkWidget*)); children->destroychildren = g_realloc(children->destroychildren,children->nchildren*sizeof(GCallback)); } } /********************************************************************************/ void delete_all_children(GtkWidget *widget) { WidgetChildren *children; gint i; if(!widget) return; children = (WidgetChildren *)g_object_get_data(G_OBJECT(widget),"Children"); for(i=1;inchildren;i++) { if(children->children[i]) { destroy_button_windows(children->children[i]); children->destroychildren[i](children->children[i]); children->children[i] = NULL; } } children->nchildren = 1; children->children = g_realloc(children->children,children->nchildren*sizeof(GtkWidget*)); children->destroychildren = g_realloc(children->destroychildren,children->nchildren*sizeof(GCallback)); } /********************************************************************************/ void destroy_children(GtkWidget *widget) { WidgetChildren *children = (WidgetChildren *)g_object_get_data(G_OBJECT(widget),"Children"); gint i; for(i=children->nchildren-1;i>=0;i--) { if(children->children[i]) { destroy_button_windows(children->children[i]); children->destroychildren[i](children->children[i]); } } g_free(children->children); g_free(children->destroychildren); g_free(children); } /********************************************************************************/ /* create_pixmap, convenience function to create a pixmap widget, from data */ GtkWidget *create_pixmap(GtkWidget *widget, gchar **data) { GtkStyle *style; GdkBitmap *mask; GdkPixmap *gdk_pixmap; GtkWidget *gtk_pixmap; style = gtk_widget_get_style(widget); g_assert(style != NULL); gdk_pixmap = gdk_pixmap_create_from_xpm_d(widget->window,&mask, &style->bg[GTK_STATE_NORMAL],data); g_assert(gdk_pixmap != NULL); gtk_pixmap = gtk_image_new_from_pixmap(gdk_pixmap, mask); g_assert(gtk_pixmap != NULL); gtk_widget_show(gtk_pixmap); return(gtk_pixmap); } /********************************************************************************/ GdkPixmap *get_pixmap(GtkWidget *widget,gushort red,gushort green,gushort blue) { GdkPixmap *pixmap = NULL; GdkGC *gc = NULL; gint width = ScreenHeight/20; gint height = ScreenHeight/50; GdkColormap *colormap; GdkColor Color; gc = gdk_gc_new(widget->window); Color.red = red; Color.green = green; Color.blue = blue; pixmap = gdk_pixmap_new(widget->window,width,height, -1); gdk_draw_rectangle (pixmap, widget->style->black_gc, TRUE, 0, 0, width, height); colormap = gdk_drawable_get_colormap(widget->window); gdk_colormap_alloc_color(colormap,&Color,FALSE,TRUE); gdk_gc_set_foreground(gc,&Color); gdk_draw_rectangle (pixmap, gc, TRUE, 1, 1, width-1, height-1); g_object_unref(gc); return pixmap; } /********************************************************************************/ GtkWidget *create_hbox_pixmap_color(GtkWidget *widget,gushort red,gushort green,gushort blue) { GdkBitmap *mask = NULL; GdkPixmap *gdk_pixmap; GtkWidget *gtk_pixmap; GtkWidget *hbox; hbox = gtk_hbox_new (TRUE, 0); gdk_pixmap = get_pixmap(widget,red,green,blue); gtk_pixmap = gtk_image_new_from_pixmap(gdk_pixmap, mask); g_object_unref(gdk_pixmap); gtk_box_pack_start (GTK_BOX (hbox), gtk_pixmap, TRUE, TRUE, 1); return hbox ; } /********************************************************************************/ GtkWidget *create_button_pixmap_color(GtkWidget *widget,gushort red,gushort green,gushort blue) { GtkWidget *hbox = create_hbox_pixmap_color(widget,red,green,blue); GtkWidget *Button = gtk_button_new(); gtk_container_add(GTK_CONTAINER(Button),hbox); gtk_widget_show (hbox); g_object_set_data(G_OBJECT (Button), "Hbox", hbox); return Button ; } /********************************************************************************/ GtkWidget *create_radio_button_pixmap(GtkWidget *widget, gchar **data,gchar *string,GtkWidget *oldbutton) { GtkStyle *style; GdkBitmap *mask; GdkPixmap *gdk_pixmap; GtkWidget *gtk_pixmap; GtkWidget *Button; GtkWidget *hbox; GtkWidget *Label = NULL; hbox = gtk_hbox_new (TRUE, 0); g_object_ref (hbox); gtk_widget_show (hbox); style = gtk_widget_get_style(widget); g_assert(style != NULL); gdk_pixmap = gdk_pixmap_create_from_xpm_d(widget->window, &mask, &style->bg[GTK_STATE_NORMAL],data); g_assert(gdk_pixmap != NULL); gtk_pixmap = gtk_image_new_from_pixmap(gdk_pixmap, mask); g_object_unref(gdk_pixmap); g_object_unref(mask); g_assert(gtk_pixmap != NULL); /* gtk_widget_show(gtk_pixmap);*/ /* if(oldbutton) Button = gtk_radio_button_new(gtk_radio_button_group (GTK_RADIO_BUTTON (oldbutton))); else Button = gtk_radio_button_new(NULL); */ Button = gtk_toggle_button_new(); gtk_container_add(GTK_CONTAINER(Button),hbox); if(string) Label = gtk_label_new(string); gtk_box_pack_start (GTK_BOX (hbox), gtk_pixmap, FALSE, FALSE, 1); if(string) gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 1); return Button ; } /********************************************************************************/ void set_icon_default() { GdkPixbuf *pixbuf; pixbuf = gdk_pixbuf_new_from_xpm_data((const char**)gabedit_xpm); gtk_window_set_default_icon (pixbuf); } /********************************************************************************/ void set_icone(GtkWidget *widget) { GtkStyle *style; GdkBitmap *mask; GdkPixmap *gdk_pixmap; style = gtk_widget_get_style(widget); gdk_pixmap = gdk_pixmap_create_from_xpm_d (widget->window,&mask, &style->bg[GTK_STATE_NORMAL],gabedit_xpm); gdk_window_set_icon(widget->window,NULL,gdk_pixmap,mask); } /********************************************************************************/ void data_modify(gboolean mod) { if(mod) imodif = DATA_MOD_YES; else imodif = DATA_MOD_NO; change_all_labels(); } /********************************************************************************/ GtkWidget *create_label_pixmap(GtkWidget *widget, gchar **data,gchar *string) { GtkStyle *style; GdkBitmap *mask; GdkPixmap *gdk_pixmap; GtkWidget *gtk_pixmap; GtkWidget *Label; GtkWidget *hbox; hbox = gtk_hbox_new (FALSE, 0); g_object_ref (hbox); gtk_widget_show (hbox); style = gtk_widget_get_style(widget); g_assert(style != NULL); gdk_pixmap = gdk_pixmap_create_from_xpm_d(widget->window, &mask, &style->bg[GTK_STATE_NORMAL],data); g_assert(gdk_pixmap != NULL); gtk_pixmap = gtk_image_new_from_pixmap(gdk_pixmap, mask); g_object_unref(gdk_pixmap); g_object_unref(mask); g_assert(gtk_pixmap != NULL); Label = gtk_label_new(string); gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT); gtk_box_pack_end (GTK_BOX (hbox), gtk_pixmap, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 2); return hbox; } /********************************************************************************/ GtkWidget *create_pixmap_label(GtkWidget *widget, gchar **data,gchar *string) { GtkStyle *style; GdkBitmap *mask; GdkPixmap *gdk_pixmap; GtkWidget *gtk_pixmap; GtkWidget *Label; GtkWidget *hbox; hbox = gtk_hbox_new (FALSE, 0); g_object_ref (hbox); gtk_widget_show (hbox); style = gtk_widget_get_style(widget); g_assert(style != NULL); gdk_pixmap = gdk_pixmap_create_from_xpm_d(widget->window, &mask, &style->bg[GTK_STATE_NORMAL],data); g_assert(gdk_pixmap != NULL); gtk_pixmap = gtk_image_new_from_pixmap(gdk_pixmap, mask); g_object_unref(gdk_pixmap); g_object_unref(mask); g_assert(gtk_pixmap != NULL); Label = gtk_label_new(string); gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT); gtk_box_pack_start (GTK_BOX (hbox), gtk_pixmap, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 2); return hbox; } /********************************************************************************/ GtkWidget *create_label_with_pixmap(GtkWidget *Win,gchar *string,gchar *type) { GtkWidget *hbox; GtkWidget *Label; if( strstr(type,_("Question")) ) hbox = create_pixmap_label(Win,question_xpm,string); else if( strstr(type,_("Warning")) ) hbox = create_pixmap_label(Win,warning_xpm,string); else if( strstr(type,_("Error"))) hbox = create_pixmap_label(Win,error_xpm,string); else if( strstr(type,_("Info")) ) hbox = create_pixmap_label(Win,info_xpm,string); else { hbox = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox); Label = gtk_label_new(string); gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 1); } return hbox; } /********************************************************************************/ GtkWidget *create_button_pixmap(GtkWidget *widget, gchar **data,gchar *string) { GtkStyle *style; GdkBitmap *mask; GdkPixmap *gdk_pixmap; GtkWidget *gtk_pixmap; GtkWidget *Button; GtkWidget *Label = NULL; GtkWidget *hbox; hbox = gtk_hbox_new (FALSE, 1); g_object_ref (hbox); gtk_widget_show (hbox); style = gtk_widget_get_style(widget); g_assert(style != NULL); gdk_pixmap = gdk_pixmap_create_from_xpm_d (widget->window,&mask, &style->bg[GTK_STATE_NORMAL],data); g_assert(gdk_pixmap != NULL); gtk_pixmap = gtk_image_new_from_pixmap(gdk_pixmap, mask); g_object_unref(gdk_pixmap); g_object_unref(mask); g_assert(gtk_pixmap != NULL); Button = gtk_button_new(); gtk_container_add(GTK_CONTAINER(Button),hbox); gtk_box_pack_start (GTK_BOX (hbox), gtk_pixmap, FALSE, FALSE, 2); if(string) { Label = gtk_label_new(string); gtk_box_pack_end (GTK_BOX (hbox), Label, FALSE, FALSE, 1); } return Button ; } /********************************************************************************/ void exit_all(GtkWidget *widget, gchar *data) { if(imodif == DATA_MOD_NO ) ExitDlg(NULL, NULL); else Save_YesNo(); } /********************************************************************************/ GtkWidget *create_button(GtkWidget *Win,gchar *string) { GtkWidget *button; if( strstr(string,_("OK")) ) button = create_button_pixmap(Win,ok_xpm,_("OK")); else if(strstr(string,_("Cancel")) ) button = create_button_pixmap(Win,cancel_xpm,_("Cancel")); else if(strstr(string,_("Yes")) ) button = create_button_pixmap(Win,yes_xpm,_("Yes")); else if(strstr(string,_("No")) ) button = create_button_pixmap(Win,no_xpm,_("No")); else if(strstr(string,_("Save&Apply&Close")) ) button = create_button_pixmap(Win,savemini_xpm,_("Save&Apply&Close")); else if(strstr(string,_("Save&Close")) ) button = create_button_pixmap(Win,savemini_xpm,_("Save&Close")); else if(strstr(string,_("Apply&Close")) ) button = create_button_pixmap(Win,apply_xpm,_("Apply&Close")); else if(strstr(string,_("Save")) ) button = create_button_pixmap(Win,savemini_xpm,_("Save")); else if(strstr(string,_("Close")) ) button = create_button_pixmap(Win,close_xpm,_("Close")); else if(strstr(string,_("Apply")) ) button = create_button_pixmap(Win,apply_xpm,_("Apply")); else if(strstr(string," *a0 ") ) button = create_button_pixmap(Win,a0p_xpm,NULL); else if(strstr(string," /a0 ") ) button = create_button_pixmap(Win,a0d_xpm,NULL); else if(strstr(string,_("Print")) ) button = create_button_pixmap(Win,print_xpm,_("Print")); else if(strstr(string,_("Stop")) ) button = create_button_pixmap(Win,stop_xpm,_("Stop")); else if(strstr(string,_("Play")) ) button = create_button_pixmap(Win,play_xpm,_("Play")); else if(strstr(string,_("Next")) ) button = create_button_pixmap(Win,next_xpm,_("Next")); else button = gtk_button_new_with_label(string); return button; } /********************************************************************************/ GtkWidget* Message(char *message,char *titre,gboolean center) { GtkWidget *DialogueMessage = NULL; GtkWidget *Label, *Bouton; GtkWidget *frame, *vboxframe; DialogueMessage = gtk_dialog_new(); gtk_widget_realize(GTK_WIDGET(DialogueMessage)); gtk_window_set_title(GTK_WINDOW(DialogueMessage),titre); gtk_window_set_transient_for(GTK_WINDOW(DialogueMessage),GTK_WINDOW(Fenetre)); gtk_window_set_position(GTK_WINDOW(DialogueMessage),GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(DialogueMessage), "delete_event", (GCallback)destroy_button_windows, NULL); g_signal_connect(G_OBJECT(DialogueMessage), "delete_event", (GCallback)gtk_widget_destroy, NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(DialogueMessage)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); if(center) { Label = create_label_with_pixmap(Fenetre,message,titre); gtk_box_pack_start(GTK_BOX(vboxframe), Label,TRUE,TRUE,0); } else { GtkWidget* hbox; Label = gtk_label_new(message); gtk_widget_show (Label); gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT); hbox = gtk_hbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (vboxframe), hbox, FALSE, FALSE, 5); gtk_box_pack_start (GTK_BOX(hbox), Label, FALSE, FALSE, 5); gtk_widget_show (hbox); } gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(DialogueMessage)->action_area), FALSE); Bouton = create_button(DialogueMessage,_("OK")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(DialogueMessage)->action_area), Bouton, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)destroy_button_windows, GTK_OBJECT(DialogueMessage)); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(DialogueMessage)); add_button_windows(titre,DialogueMessage); gtk_widget_show_all(DialogueMessage); return DialogueMessage; } /********************************************************************************/ GtkWidget* MessageTxt(gchar *message,gchar *title) { GtkWidget *dlgWin = NULL; GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *txtWid; GtkWidget *button; dlgWin = gtk_dialog_new(); gtk_widget_realize(GTK_WIDGET(dlgWin)); gtk_window_set_title(GTK_WINDOW(dlgWin),title); gtk_window_set_transient_for(GTK_WINDOW(dlgWin),GTK_WINDOW(Fenetre)); gtk_window_set_position(GTK_WINDOW(dlgWin),GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(dlgWin), "delete_event", (GCallback)destroy_button_windows, NULL); g_signal_connect(G_OBJECT(dlgWin), "delete_event", (GCallback)gtk_widget_destroy, NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(dlgWin)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); txtWid = create_text_widget(vboxframe,NULL,&frame); if(message) gabedit_text_insert (GABEDIT_TEXT(txtWid), NULL, NULL, NULL,message,-1); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), FALSE); button = create_button(dlgWin,_("OK")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(dlgWin)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)destroy_button_windows, GTK_OBJECT(dlgWin)); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(dlgWin)); add_button_windows(title,dlgWin); gtk_window_set_default_size (GTK_WINDOW(dlgWin), (gint)(ScreenHeight*0.4), (gint)(ScreenHeight*0.4)); gtk_widget_show_all(dlgWin); return dlgWin; } /********************************************************************************/ void select_all() { if( gtk_notebook_get_current_page(GTK_NOTEBOOK(NoteBookText))==0) gabedit_text_select_all(text); else gabedit_text_select_all(textresult); } /********************************************************************************/ void goto_end(GtkWidget *current,gpointer data) { gabedit_text_goto_end(current); } /********************************************************************************/ void goto_end_result(GtkWidget *win,gpointer data) { goto_end(textresult,data); } /********************************************************************************/ void ClearText(GtkWidget* text) { gint nchar; nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); gabedit_text_set_point(GABEDIT_TEXT(text),0); gabedit_text_forward_delete(GABEDIT_TEXT(text),nchar); gabedit_text_set_point(GABEDIT_TEXT(text),0); } /********************************************************************************/ void destroy( GtkWidget *widget, gpointer data ) { guint i; if(iframe==2) geom_is_not_open(); gtk_widget_destroy(widget); iedit=1; gabedit_text_set_editable(GABEDIT_TEXT(text), TRUE); if(iframe==2 && iprogram == PROG_IS_GAUSS) for(i=0;i<6;i++) EntryCS[i]=NULL; iframe=1; widget = NULL; } /********************************************************************************/ void Cancel_YesNo(GtkWidget *widget, gpointer data, GabeditSignalFunc func) { GtkWidget *DialogueMessage = NULL; GtkWidget *Label, *Bouton; GtkWidget *frame, *vboxframe; DialogueMessage = gtk_dialog_new(); gtk_window_set_position(GTK_WINDOW(DialogueMessage),GTK_WIN_POS_CENTER); gtk_window_set_title(GTK_WINDOW(DialogueMessage),_("Warning")); gtk_window_set_modal (GTK_WINDOW (DialogueMessage), TRUE); g_signal_connect(G_OBJECT(DialogueMessage), "delete_event", (GCallback)gtk_widget_destroy, NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); g_object_ref (frame); g_object_set_data_full (G_OBJECT (DialogueMessage), "frame", frame,(GDestroyNotify) g_object_unref); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(DialogueMessage)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); Label = gtk_label_new(_("Are you sure to \ncancel this window ?")); gtk_box_pack_start(GTK_BOX(vboxframe), Label,TRUE,TRUE,0); gtk_label_set_justify(GTK_LABEL(Label), GTK_JUSTIFY_CENTER); gtk_misc_set_padding(GTK_MISC(Label), 10, 10); gtk_widget_realize(DialogueMessage); Bouton = create_button(DialogueMessage,_("No")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(DialogueMessage)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(DialogueMessage)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); Bouton = create_button(DialogueMessage,_("Yes")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(DialogueMessage)->action_area), Bouton,TRUE,TRUE,0); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); g_signal_connect_swapped(G_OBJECT(Bouton),"clicked", (GCallback)func, GTK_OBJECT(widget)); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(DialogueMessage)); gtk_widget_show_all(DialogueMessage); } /**********************************************************************************/ FilePosTypeGeom get_geometry_type_from_molpro_input_file(gchar *NomFichier) { gchar *t; FILE *fd; guint taille=BSIZE; FilePosTypeGeom j; gint k; gchar *t1; gchar *t2; gchar *t3 = NULL; j.geomtyp=GEOM_IS_ZMAT; j.numline=0; j.units=0; t=g_malloc(taille); fd = FOpen(NomFichier, "rb"); if(fd!=NULL) { k= 0; while(!feof(fd) ) { if(!fgets(t, taille, fd)) break; k++; t1 = g_strdup(t); t2= g_strdup("Geometry={"); uppercase(t1); uppercase(t2); t3 = NULL; t3 = strstr(t1,t2); if(t3 != NULL) j.numline=k; g_free(t2); t3 = NULL; t2= g_strdup("ANGSTROM"); t3 = strstr(t1,t2); if(t3 != NULL) j.units=1; g_free(t2); t2= g_strdup("geomtyp=xyz"); uppercase(t2); t3 = NULL; t3 = strstr(t1,t2); if(t3 != NULL) j.geomtyp=GEOM_IS_XYZ; g_free(t2); g_free(t1); } fclose(fd); } if(j.numline==0) j.geomtyp=GEOM_IS_OTHER; g_free(t); return j; } /**********************************************************************************/ FilePosTypeGeom get_geometry_type_from_demon_input_file(gchar *NomFichier) { gchar *t; FILE *fd; guint taille=BSIZE; gboolean OK=TRUE; gint i; FilePosTypeGeom j; gint k; gchar *t1; gchar *t2; gchar *t3 = NULL; gchar dum[100]; sprintf(dum,"NONE"); j.geomtyp=GEOM_IS_OTHER; j.numline=0; j.units=1; t=g_malloc(taille); fd = FOpen(NomFichier, "rb"); if(fd!=NULL) { /* Charge and Spin */ k = 0; while(!feof(fd) ) { if(!fgets(t, taille, fd)) break; deleteFirstSpaces(t); if((int)t[0]==(int)'#') continue; uppercase(t); sscanf(t,"%s", dum); if(strstr(dum,"MULTIPLICIT")) { sscanf(t,"%s %d", dum, &SpinMultiplicities[0]); SpinMultiplicities[1] = SpinMultiplicities[0]; SpinMultiplicities[2] = SpinMultiplicities[0]; k++; } if(strstr(dum,"CHARGE")) { sscanf(t,"%s %d", dum, &SpinMultiplicities[0]); SpinMultiplicities[1] = SpinMultiplicities[0]; SpinMultiplicities[2] = SpinMultiplicities[0]; k++; } if(k==2) break; } fseek(fd, 0L, SEEK_SET); /* Geometry, Type and unit */ while(!feof(fd) ) { if(!fgets(t, taille, fd)) break; j.numline++; deleteFirstSpaces(t); if((int)t[0]==(int)'#' ) continue; uppercase(t); sscanf(t,"%s", dum); if(strstr(dum,"GEOMETRY")) { if(strstr(t,"CARTES")) j.geomtyp = GEOM_IS_XYZ; else j.geomtyp = GEOM_IS_ZMAT; if(strstr(t,"BOHR")) j.units = 0; j.numline++; break; } } } fclose(fd); g_free(t); return j; } /**********************************************************************************/ FilePosTypeGeom get_geometry_type_from_gauss_input_file(gchar *NomFichier) { gchar *t; FILE *fd; guint taille=BSIZE; gboolean OK=TRUE; gint i; FilePosTypeGeom j; gint k; gchar *t1; gchar *t2; gchar *t3 = NULL; j.geomtyp=GEOM_IS_OTHER; j.numline=0; j.units=1; t=g_malloc(taille); fd = FOpen(NomFichier, "rb"); if(fd!=NULL) { /* Commands lines */ while(!feof(fd) ) { if(!fgets(t, taille, fd)) break; j.numline++; if((int)t[0]==(int)'#' || (int)t[0]==(int)'%' ) { t1 = g_strdup(t); t2= g_strdup("Units(Au"); uppercase(t1); uppercase(t2); t3 = strstr(t1,t2); if(t3 != NULL) j.units=0; g_free(t1); g_free(t2); continue; } else break; } /* Title */ while(!feof(fd) ) { if(!fgets(t, taille, fd)) break; j.numline++; OK=TRUE; for(i=0;i<(gint)strlen(t);i++) if(t[i]!=' ' && t[i] !='\n' ) { OK=FALSE; break; } if(OK) break; } /* Charge and Spin */ if(!feof(fd) ) { if(fgets(t, taille, fd)) j.numline++; sscanf(t,"%d %d %d %d %d %d", &TotalCharges[0], &SpinMultiplicities[0], &TotalCharges[1], &SpinMultiplicities[1], &TotalCharges[2], &SpinMultiplicities[2]); } /* First line of geometry */ if(!feof(fd) ) { if(!fgets(t, taille, fd)) { j.geomtyp = GEOM_IS_OTHER; } else { gchar dump[5][BSIZE]; j.numline++; k = sscanf(t,"%s %s %s %s %s",dump[0],dump[1],dump[2],dump[3],dump[4]); if(k==5) j.geomtyp = GEOM_IS_XYZ; else if(k==4) j.geomtyp = GEOM_IS_XYZ; else if(k==1) j.geomtyp = GEOM_IS_ZMAT; else j.geomtyp = GEOM_IS_OTHER; /* k=0; for(i=strlen(t)-1;i>0;i--) if(t[i]!=' ' || t[i] !='\n' ) { k=i; break; } if(k>2) j.geomtyp = GEOM_IS_XYZ; else if(k>0 && k<=2) j.geomtyp = GEOM_IS_ZMAT; else j.geomtyp = GEOM_IS_OTHER; */ } } } fclose(fd); g_free(t); return j; } /**********************************************************************************/ FilePosTypeGeom get_geometry_type_from_nwchem_input_file(gchar *NomFichier) { gchar *t; FILE *fd; guint taille=BSIZE; FilePosTypeGeom j; j.geomtyp=GEOM_IS_OTHER; j.numline=0; j.units=1; t=g_malloc(taille); fd = FOpen(NomFichier, "rb"); if(fd==NULL) return j; while(!feof(fd) ) { if(!fgets(t, taille, fd)) break; uppercase(t); if(strstr(t,"GEOMETRY")) { j.geomtyp = GEOM_IS_XYZ; if(!fgets(t, taille, fd)) break; uppercase(t); if(strstr(t,"ZMATRIX")) j.geomtyp = GEOM_IS_ZMAT; break; } j.numline++; } fclose(fd); g_free(t); return j; } /**********************************************************************************/ FilePosTypeGeom get_geometry_type_from_psicode_input_file(gchar *NomFichier) { gchar *t; FILE *fd; guint taille=BSIZE; FilePosTypeGeom j; j.geomtyp=GEOM_IS_OTHER; j.numline=0; j.units=1; /* printf("NomFichier=%s\n",NomFichier);*/ t = g_malloc(taille*sizeof(gchar)); fd = FOpen(NomFichier, "rb"); if(fd==NULL) return j; while(!feof(fd) ) { if(!fgets(t, taille, fd)) break; uppercase(t); /* printf("t=%s\n",t);*/ if(strstr(t,"MOLECULE")) { gint charge,mult; gboolean OK = FALSE; gint i; if(fgets(t,taille,fd) && 2==sscanf(t,"%d %d",&charge,&mult)) OK = TRUE; else OK = FALSE; /* printf("t=%s\n",t);*/ if(OK && fgets(t,taille,fd)) { gchar*t1 = g_malloc(taille*sizeof(gchar)); gchar*t2 = g_malloc(taille*sizeof(gchar)); gchar*t3 = g_malloc(taille*sizeof(gchar)); gchar*t4 = g_malloc(taille*sizeof(gchar)); /* printf("t=%s\n",t);*/ i = sscanf(t,"%s %s %s %s",t1,t2,t3,t4); if(i==4)j.geomtyp = GEOM_IS_XYZ; else j.geomtyp = GEOM_IS_ZMAT; g_free(t1); g_free(t2); g_free(t3); g_free(t4); } break; } j.numline++; } fclose(fd); g_free(t); return j; } /**********************************************************************************/ FilePosTypeGeom get_geometry_type_from_orca_input_file(gchar *NomFichier) { gchar *t; FILE *fd; guint taille=BSIZE; FilePosTypeGeom j; j.geomtyp=GEOM_IS_OTHER; j.numline=0; j.units=1; t=g_malloc(taille); fd = FOpen(NomFichier, "rb"); if(fd==NULL) return j; while(!feof(fd) ) { if(!fgets(t, taille, fd)) break; uppercase(t); if(strstr(t,"* XYZ")) { j.geomtyp = GEOM_IS_XYZ; break; } if(strstr(t,"* INT")) { j.geomtyp = GEOM_IS_ZMAT; break; } j.numline++; } fclose(fd); g_free(t); return j; } /**********************************************************************************/ FilePosTypeGeom get_geometry_type_from_qchem_input_file(gchar *NomFichier) { gchar *t; FILE *fd; guint taille=BSIZE; FilePosTypeGeom j; gint k; j.geomtyp=GEOM_IS_OTHER; j.numline=0; j.units=1; t=g_malloc(taille); fd = FOpen(NomFichier, "rb"); if(fd!=NULL) { while(!feof(fd) ) { if(!fgets(t, taille, fd)) break; if(strstr(t,"$molecule")) break; j.numline++; } /* Charge and Spin */ if(!feof(fd) ) { if(fgets(t, taille, fd)) j.numline++; } /* First line of geometry */ if(!feof(fd) ) { if(!fgets(t, taille, fd)) { j.geomtyp = GEOM_IS_OTHER; } else { gchar dump[5][BSIZE]; j.numline++; k = sscanf(t,"%s %s %s %s %s",dump[0],dump[1],dump[2],dump[3],dump[4]); if(k==5) j.geomtyp = GEOM_IS_XYZ; else if(k==4) j.geomtyp = GEOM_IS_XYZ; else if(k==1) j.geomtyp = GEOM_IS_ZMAT; else j.geomtyp = GEOM_IS_OTHER; } } } fclose(fd); g_free(t); return j; } /**********************************************************************************/ FilePosTypeGeom get_geometry_type_from_mopac_input_file(gchar *NomFichier) { gchar *t; FILE *fd; guint taille=BSIZE; FilePosTypeGeom j; gint k; j.geomtyp=GEOM_IS_OTHER; j.numline=0; j.units=1; t=g_malloc(taille); fd = FOpen(NomFichier, "rb"); if(fd!=NULL) { while(!feof(fd) ) { if(!fgets(t, taille, fd))break; j.numline++; if(t[0] !='*') break; } if(!feof(fd)) { char* e = fgets(t,taille,fd);} j.numline++; if(!feof(fd)) { char* e = fgets(t,taille,fd);} j.numline++; /* First line of geometry */ if(!feof(fd) ) { if(!fgets(t, taille, fd)) { j.geomtyp = GEOM_IS_OTHER; } else { gchar dump[8][BSIZE]; j.numline++; k = sscanf(t,"%s %s %s %s %s %s %s %s",dump[0],dump[1],dump[2],dump[3],dump[4], dump[5], dump[6], dump[7]); if(k==8) j.geomtyp = GEOM_IS_ZMAT; else if(k==7) j.geomtyp = GEOM_IS_XYZ; else j.geomtyp = GEOM_IS_OTHER; } } } fclose(fd); g_free(t); return j; } /**********************************************************************************/ void read_geom_in_gamess_input(gchar *fileName) { gchar* logfile; gchar* t; FILE* file; t = get_suffix_name_file(fileName); logfile = g_strdup_printf("%s.log",t); file = FOpen(logfile, "rb"); if(!file) { if(logfile) g_free(logfile); logfile = g_strdup_printf("%s.out",t); file = FOpen(logfile, "rb"); if(!file) return; } fclose(file); read_geom_from_gamess_output_file(logfile,1); } /**********************************************************************************/ void read_geom_in_firefly_input(gchar *fileName) { gchar* logfile; gchar* t; FILE* file; t = get_suffix_name_file(fileName); logfile = g_strdup_printf("%s.log",t); file = FOpen(logfile, "rb"); if(!file) { if(logfile) g_free(logfile); logfile = g_strdup_printf("%s.out",t); file = FOpen(logfile, "rb"); if(!file) return; } fclose(file); read_geom_from_gamess_output_file(logfile,1); } /**********************************************************************************/ void read_geom_in_mpqc_input(gchar *fileName) { read_XYZ_from_mpqc_input_file(fileName); } /**********************************************************************************/ void read_geom_in_demon_input(gchar *NameFile) { FilePosTypeGeom j; j= get_geometry_type_from_demon_input_file(NameFile); if( j.geomtyp == GEOM_IS_XYZ) read_XYZ_from_demon_input_file(NameFile,j); else if( j.geomtyp == GEOM_IS_ZMAT) read_Zmat_from_demon_input_file(NameFile,j); else Message(_("Sorry\nI can not read gemetry in DeMon input file\n"),_("Warning"),TRUE); } /**********************************************************************************/ void read_geom_in_gauss_input(gchar *NameFile) { FilePosTypeGeom j; j= get_geometry_type_from_gauss_input_file(NameFile); if( j.geomtyp == GEOM_IS_XYZ) read_XYZ_from_gauss_input_file(NameFile,j); else if( j.geomtyp == GEOM_IS_ZMAT) read_Zmat_from_gauss_input_file(NameFile,j); else Message(_("Sorry\nI can not read gemetry in gaussian input file\n"),_("Warning"),TRUE); } /**********************************************************************************/ void read_geom_in_molcas_input(gchar *NameFile) { setMolcasGeometryFromInputFile(NameFile); } /**********************************************************************************/ void read_geom_in_molpro_input(gchar *NameFile) { FilePosTypeGeom j; j= get_geometry_type_from_molpro_input_file(NameFile); if( j.geomtyp == GEOM_IS_XYZ) read_XYZ_from_molpro_input_file(NameFile,j); else if( j.geomtyp == GEOM_IS_ZMAT) read_Zmat_from_molpro_input_file(NameFile,j); else Message(_("Sorry\nI can not read gemetry in molpro input file\n"),_("Warning"),TRUE); } /**********************************************************************************/ void read_geom_in_nwchem_input(gchar *NameFile) { FilePosTypeGeom j; j= get_geometry_type_from_nwchem_input_file(NameFile); if( j.geomtyp == GEOM_IS_XYZ) read_XYZ_from_nwchem_input_file(NameFile); else if( j.geomtyp == GEOM_IS_ZMAT) read_Zmat_from_nwchem_input_file(NameFile); else Message(_("Sorry\nI can not read gemetry in NWChem input file\n"),_("Warning"),TRUE); } /**********************************************************************************/ void read_geom_in_psicode_input(gchar *NameFile) { FilePosTypeGeom j; j= get_geometry_type_from_psicode_input_file(NameFile); if( j.geomtyp == GEOM_IS_XYZ) read_XYZ_from_psicode_input_file(NameFile); else if( j.geomtyp == GEOM_IS_ZMAT) read_Zmat_from_psicode_input_file(NameFile); else Message(_("Sorry\nI can not read gemetry in Psicode input file\n"),_("Warning"),TRUE); } /**********************************************************************************/ void read_geom_in_orca_input(gchar *NameFile) { FilePosTypeGeom j; j= get_geometry_type_from_orca_input_file(NameFile); if( j.geomtyp == GEOM_IS_XYZ) read_XYZ_from_orca_input_file(NameFile); else if( j.geomtyp == GEOM_IS_ZMAT) read_Zmat_from_orca_input_file(NameFile); else Message(_("Sorry\nI can not read gemetry in Orca input file\n"),_("Warning"),TRUE); } /**********************************************************************************/ void read_geom_in_qchem_input(gchar *NameFile) { FilePosTypeGeom j; j= get_geometry_type_from_qchem_input_file(NameFile); if( j.geomtyp == GEOM_IS_XYZ) read_XYZ_from_qchem_input_file(NameFile); else if( j.geomtyp == GEOM_IS_ZMAT) read_Zmat_from_qchem_input_file(NameFile); else Message(_("Sorry\nI can not read gemetry in Q-Chem input file\n"),_("Warning"),TRUE); } /**********************************************************************************/ void read_geom_in_mopac_input(gchar *NameFile) { FilePosTypeGeom j; j= get_geometry_type_from_mopac_input_file(NameFile); if( j.geomtyp == GEOM_IS_XYZ) read_XYZ_from_mopac_input_file(NameFile); else if( j.geomtyp == GEOM_IS_ZMAT) read_Zmat_from_mopac_input_file(NameFile); else Message(_("Sorry\nI can not read gemetry in Mopac input file\n"),_("Warning"),TRUE); } /**********************************************************************************/ void get_doc(gchar *NomFichier) { gchar *t; FILE *fd; guint nchar; guint taille=BSIZE; if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) return ; t=g_malloc(taille*sizeof(gchar)); fd = FOpen(NomFichier, "rb"); if(fd==NULL) { //fprintf(stderr,"Sorry, I can not open\n %s\n file",NomFichier); g_free(t); t = g_strdup_printf(_("Sorry, I can not open\n %s\n file"),NomFichier); Message(t,_("Error"),TRUE); g_free(t); return; } iprogram = get_type_of_program(fd); //fprintf(stderr,"iprog=%d",iprogram); nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); gabedit_text_set_point(GABEDIT_TEXT(text),0); gabedit_text_forward_delete(GABEDIT_TEXT(text),nchar); while(1) { nchar = fread(t, 1, taille, fd); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, t,nchar); if(nchar PROG_IS_OTHER ) { fileopen.datafile = get_name_file(NomFichier); t = get_suffix_name_file(NomFichier); fileopen.projectname = get_name_file(t); fileopen.localdir = get_name_dir(t); g_free(t); CreeFeuille(treeViewProjects, noeud[iprogram],fileopen.projectname,fileopen.datafile ,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,iprogram, fileopen.command, fileopen.netWorkProtocol); } else { fileopen.projectname = get_name_file(NomFichier); fileopen.localdir = get_name_dir(NomFichier); CreeFeuille(treeViewProjects, noeud[NBNOD-1],fileopen.projectname,fileopen.projectname,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,NBNOD-1, fileopen.command, fileopen.netWorkProtocol); } if(iprogram == PROG_IS_GAMESS) { fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname); /* fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname);*/ fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname); } else if(iprogram == PROG_IS_FIREFLY) { fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname); /* fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname);*/ fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname); } else if(iprogram == PROG_IS_DEMON) { fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname); } else if(iprogram == PROG_IS_MPQC) { fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("'%s.molden'", fileopen.projectname); } else if(iprogram == PROG_IS_MOLCAS) { fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname); /* fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname);*/ fileopen.moldenfile=g_strdup_printf("'%s.*.molden'", fileopen.projectname); } else if(iprogram == PROG_IS_MOLPRO) { fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname); } else if(iprogram == PROG_IS_GAUSS) { fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname); } else if(iprogram == PROG_IS_ORCA) { fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); } else if(iprogram == PROG_IS_NWCHEM) { fileopen.datafile = g_strdup_printf("%s.nw",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); } else if(iprogram == PROG_IS_QCHEM) { fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); } else if(iprogram == PROG_IS_MOPAC) { fileopen.datafile = g_strdup_printf("%s.mop",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile=g_strdup_printf("%s.aux",fileopen.projectname); fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname); } else { fileopen.datafile = g_strdup_printf("%s",fileopen.projectname); fileopen.outputfile=g_strdup_printf("%s","Unknown"); fileopen.logfile = g_strdup_printf("%s","Unknown"); } if( iprogram == PROG_IS_GAUSS) read_geom_in_gauss_input(NomFichier); else if( iprogram == PROG_IS_DEMON) read_geom_in_demon_input(NomFichier); else if( iprogram == PROG_IS_GAMESS) read_geom_in_gamess_input(NomFichier); else if( iprogram == PROG_IS_FIREFLY) read_geom_in_firefly_input(NomFichier); else if( iprogram == PROG_IS_MOLPRO) read_geom_in_molpro_input(NomFichier); else if( iprogram == PROG_IS_MPQC) read_geom_in_mpqc_input(NomFichier); else if( iprogram == PROG_IS_ORCA) read_geom_in_orca_input(NomFichier); else if( iprogram == PROG_IS_NWCHEM) read_geom_in_nwchem_input(NomFichier); else if( iprogram == PROG_IS_PSICODE) read_geom_in_psicode_input(NomFichier); else if( iprogram == PROG_IS_QCHEM) read_geom_in_qchem_input(NomFichier); else if( iprogram == PROG_IS_MOPAC) read_geom_in_mopac_input(NomFichier); else if(iprogram == PROG_IS_MOLCAS) { setMolcasVariablesFromInputFile(NomFichier); read_geom_in_molcas_input(NomFichier); } data_modify(FALSE); if(GeomConvIsOpen) find_energy_all(NULL,NULL); } /********************************************************************************/ void show_doc(GabeditFileChooser *SelecteurFichier, gint response_id) { char *NomFichier; if(response_id != GTK_RESPONSE_OK) return; NomFichier = gabedit_file_chooser_get_current_file(SelecteurFichier); get_doc(NomFichier); } /********************************************************************************/ void insert_doc(GabeditFileChooser *SelecteurFichier, gint response_id) { char *t; char *NomFichier; guint nchar; FILE *fd; guint taille=BSIZE; if(response_id != GTK_RESPONSE_OK) return; NomFichier = gabedit_file_chooser_get_current_file(SelecteurFichier); if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) return ; t=g_malloc(taille); fd = FOpen(NomFichier, "rb"); if(fd!=NULL) { while(1) { nchar = fread(t, 1, taille, fd); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, t,nchar); if(ncharPROG_IS_OTHER) { temp = get_suffix_name_file(NomFichier); fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); g_free(temp); if(iprogram==PROG_IS_GAMESS) fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); else if(iprogram==PROG_IS_FIREFLY) fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); else if(iprogram==PROG_IS_DEMON) fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); else if(iprogram==PROG_IS_QCHEM) fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); else if(iprogram==PROG_IS_MOPAC) fileopen.datafile = g_strdup_printf("%s.mop",fileopen.projectname); else fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname); if(NomFichier) g_free(NomFichier); NomFichier = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotepass = NULL; fileopen.remotedir = NULL; fileopen.netWorkProtocol = defaultNetWorkProtocol; CreeFeuille(treeViewProjects, noeud[iprogram],fileopen.projectname,fileopen.datafile,fileopen.localdir, fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,iprogram, fileopen.command, fileopen.netWorkProtocol); } else { temp = NomFichier; fileopen.projectname = get_name_file(temp); fileopen.localdir = get_name_dir(temp); fileopen.remotehost = NULL; fileopen.remoteuser = NULL; fileopen.remotepass = NULL; fileopen.netWorkProtocol = defaultNetWorkProtocol; CreeFeuille(treeViewProjects, noeud[NBNOD-1],fileopen.projectname,fileopen.projectname, fileopen.localdir,fileopen.remotehost,fileopen.remoteuser,fileopen.remotepass,fileopen.remotedir,NBNOD-1, fileopen.command, fileopen.netWorkProtocol); } if(iprogram == PROG_IS_MPQC) { fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname); fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile = g_strdup_printf("%s.molden",fileopen.projectname); } else if(iprogram == PROG_IS_GAMESS) { fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile = g_strdup_printf("%s.log",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile = g_strdup_printf("%s.log",fileopen.projectname); } else if(iprogram == PROG_IS_FIREFLY) { fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile = g_strdup_printf("%s.log",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile = g_strdup_printf("%s.log",fileopen.projectname); } else if(iprogram == PROG_IS_DEMON) { fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile = g_strdup_printf("%s.out",fileopen.projectname); } else if(iprogram == PROG_IS_GAUSS) { fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname); fileopen.outputfile = g_strdup_printf("%s.log",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile = g_strdup_printf("%s.log",fileopen.projectname); } else if(iprogram == PROG_IS_MOLCAS) { fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname); fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile = g_strdup_printf("%s.molden",fileopen.projectname); } else if(iprogram == PROG_IS_MOLPRO) { fileopen.datafile = g_strdup_printf("%s.com",fileopen.projectname); fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.log",fileopen.projectname); fileopen.moldenfile = g_strdup_printf("%s.molden",fileopen.projectname); } else if(iprogram == PROG_IS_QCHEM) { fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile = g_strdup_printf("%s.molden",fileopen.projectname); } else if(iprogram == PROG_IS_ORCA) { fileopen.datafile = g_strdup_printf("%s.inp",fileopen.projectname); fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname); fileopen.moldenfile = g_strdup_printf("%s.molden",fileopen.projectname); } else { fileopen.datafile = g_strdup(NomFichier); fileopen.outputfile = g_strdup("Unknown"); fileopen.logfile = g_strdup("Unknown"); } if(enreg_doc(NomFichier)) { change_label_onglet(); data_modify(FALSE); } } /********************************************************************************/ void save_as_doc(void) { choose_file_to_save(); } /********************************************************************************/ void save_doc(void) { if ( strcmp(fileopen.datafile,"NoName") != 0) { gchar* FileName = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.datafile); if(enreg_doc(FileName)) data_modify(FALSE); g_free(FileName); } else choose_file_to_save(); } /********************************************************************************/ void new_doc_molcas(GtkWidget* wid, gpointer data) { newMolcas(); iprogram = PROG_IS_MOLCAS; } /********************************************************************************/ void new_doc_molpro(GtkWidget* wid, gpointer data) { molpro(); iprogram = PROG_IS_MOLPRO; } /********************************************************************************/ void new_doc_mpqc(GtkWidget* wid, gpointer data) { newMPQC(); iprogram = PROG_IS_MPQC; } /********************************************************************************/ void new_doc_gamess(GtkWidget* wid, gpointer data) { newGamess(); iprogram = PROG_IS_GAMESS; fileopen.command=g_strdup(NameCommandGamess); } /********************************************************************************/ void new_doc_demon(GtkWidget* wid, gpointer data) { newDeMon(); iprogram = PROG_IS_DEMON; fileopen.command=g_strdup(NameCommandDeMon); } /********************************************************************************/ void new_doc_firefly(GtkWidget* wid, gpointer data) { newFireFly(); iprogram = PROG_IS_FIREFLY; fileopen.command=g_strdup(NameCommandFireFly); } /********************************************************************************/ void new_doc_gauss(GtkWidget* wid, gpointer data) { gauss(1); } /********************************************************************************/ void new_doc_orca(GtkWidget* wid, gpointer data) { newOrca(); iprogram = PROG_IS_ORCA; fileopen.command=g_strdup(NameCommandOrca); } /********************************************************************************/ void new_doc_nwchem(GtkWidget* wid, gpointer data) { newNWChem(); iprogram = PROG_IS_NWCHEM; fileopen.command=g_strdup(NameCommandNWChem); } /********************************************************************************/ void new_doc_psicode(GtkWidget* wid, gpointer data) { newPsicode(); iprogram = PROG_IS_PSICODE; fileopen.command=g_strdup(NameCommandPsicode); } /********************************************************************************/ void new_doc_qchem(GtkWidget* wid, gpointer data) { newQChem(); iprogram = PROG_IS_QCHEM; fileopen.command=g_strdup(NameCommandQChem); } /********************************************************************************/ void new_doc_mopac(GtkWidget* wid, gpointer data) { newMopac(); iprogram = PROG_IS_MOPAC; fileopen.command=g_strdup(NameCommandMopac); } /********************************************************************************/ void new_doc_other(GtkWidget* wid, gpointer data) { gint nchar; reset_name_files(); data_modify(TRUE); gabedit_text_set_point(GABEDIT_TEXT(text),0); nchar = gabedit_text_get_length(GABEDIT_TEXT(text)); gabedit_text_forward_delete(GABEDIT_TEXT(text),nchar); gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0); } /********************************************************************************/ void insert_doc_gauss(void) { gauss(0); } /********************************************************************************/ static void show_about_new() { static const gchar *authors[] = { "Abdul-Rahman Allouche ", NULL }; static const gchar *documenters[] = { "Abdul-Rahman Allouche ", NULL }; static const gchar *copyright = "Copyright \xc2\xa9 2002-2017 Abdul-Rahman Allouche.\n" "All rights reserved.\n"; gchar *license = g_strdup_printf("%s%s", copyright, "\n" "Permission is hereby granted, free of charge, to any person obtaining a copy\n" "of this software(the Gabedit) and associated documentation files, to deal in\n" "the Software without restriction, including without limitation the rights to\n" "use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n" "of the Software, and to permit persons to whom the Software is furnished to \n" "do so, subject to the following conditions:\n" "\n" "The above copyright notice and this permission notice shall be included in all\n" "copies or substantial portions of the Software.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n" "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n" "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n" "THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n" "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n" "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n" "DEALINGS IN THE SOFTWARE." ); static const gchar *comments = "Graphical User Interface to DeMon, FireFly, GAMESS-US, Gaussian, Molcas, Molpro, " "OpenMopac, Orca, MPQC, NWChem and Q-Chem computational chemistry packages.\n\n" "Please use the following citations in any report or publication :\n" "A.R. ALLOUCHE, Gabedit - A graphical user interface for computational chemistry softwares,\n" "Journal of Computational Chemistry, 32, 174-182(2011)\n"; gchar *GABEDIT_VERSION = g_strdup_printf("%d.%d.%d",MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION); gtk_about_dialog_set_url_hook(show_homepage, NULL, NULL); gtk_show_about_dialog ( NULL, "name", "Gabedit", "version", GABEDIT_VERSION, "comments", comments, "copyright", copyright, "license", license, "website", "http://gabedit.sourceforge.net", "documenters", documenters, "authors", authors, "logo-icon-name", GTK_STOCK_ABOUT, NULL); g_free(GABEDIT_VERSION); g_free(license); } /********************************************************************************/ void show_about() { if(GTK_MAJOR_VERSION>=2 && GTK_MINOR_VERSION>=6) show_about_new(); else create_about_frame(); } /********************************************************************************/ void show_version() { gchar* Version_S = g_strdup_printf("%d.%d.%d",MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION); gchar *temp=g_strdup_printf("\n Version %s \n\n Abdul-Rahman ALLOUCHE\n",Version_S); Message(temp,_("Version"),TRUE); g_free(Version_S); g_free(temp); } /********************************************************************************/ void show_homepage(GtkWidget *w,gpointer data) { #ifdef G_OS_WIN32 gchar* Command = "Iexplore.exe http://gabedit.sourceforge.net/"; system(Command); #else gchar* Command = "mozilla http://gabedit.sourceforge.net/ &"; if (system(Command)<0) { gchar* Command = "galeon http://gabedit.sourceforge.net/ &"; if (system(Command)<0) { gchar* Command = "konqueror http://gabedit.sourceforge.net/ &"; {int ierr = system(Command);} } } #endif } /********************************************************************************/ void desole(void) { char *temp=_("Sorry , this option is not active"); Message(temp,_("Warning"),TRUE); } /********************************************************************************/ void change_insert(void) { if (iedit==0) { iedit=1; gabedit_text_set_editable(GABEDIT_TEXT(text), TRUE); } else { iedit=0; gabedit_text_set_editable(GABEDIT_TEXT(text), FALSE); } } /********************************************************************************/ void create_label_hbox(GtkWidget *hbox,gchar *tlabel,gint llen) { GtkWidget* label; label = gtk_label_new(tlabel); gtk_widget_set_size_request(GTK_WIDGET(label),llen,-1); gtk_box_pack_start(GTK_BOX(hbox), label,FALSE,FALSE,2); } /********************************************************************************/ GtkWidget *create_text(GtkWidget *win,GtkWidget *frame,gboolean editable) { GtkWidget *Text; GtkWidget *scrolledwindow; scrolledwindow = gtk_scrolled_window_new (NULL, NULL); g_object_ref (scrolledwindow); g_object_set_data_full (G_OBJECT (win), "scrolledwindow", scrolledwindow, (GDestroyNotify) g_object_unref); gtk_widget_show (scrolledwindow); gtk_container_add (GTK_CONTAINER (frame), scrolledwindow); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); Text = gabedit_text_new (); g_object_ref (Text); g_object_set_data_full (G_OBJECT (win), "Text", Text, (GDestroyNotify) g_object_unref); gtk_widget_show (Text); gtk_container_add (GTK_CONTAINER (scrolledwindow), Text); gabedit_text_set_editable (GABEDIT_TEXT (Text), editable); return Text; } /********************************************************************************/ void gtk_combo_box_entry_set_popdown_strings(GtkWidget* comboBoxEntry, GList *list) { GList* l; GtkTreeModel * model = NULL; if(!list) return; model = gtk_combo_box_get_model(GTK_COMBO_BOX(comboBoxEntry)); gtk_list_store_clear(GTK_LIST_STORE(model)); l = list; while(l) { gtk_combo_box_append_text (GTK_COMBO_BOX (comboBoxEntry), (gchar*)(l->data)); l = l->next; } gtk_combo_box_set_active(GTK_COMBO_BOX (comboBoxEntry), 0); } /********************************************************************************/ GtkWidget* create_combo_box_entry(gchar **tlist,gint nlist, gboolean edit,gint llen,gint elen) { GtkWidget* combo; gint i; combo = gtk_combo_box_entry_new_text(); for (i=0;ichild),edit); if(nlist>0) gtk_combo_box_set_active(GTK_COMBO_BOX (combo), 0); return combo; } /********************************************************************************/ GtkWidget *create_combo_box_entry_liste(GtkWidget* Window,GtkWidget* hbox,gchar *lname,gchar **liste,int n) { int i; GtkWidget *label; GtkWidget *combo; GtkWidget *combo_entry; if(lname) { label = gtk_label_new (lname); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 2); } combo = gtk_combo_box_entry_new_text (); gtk_widget_set_size_request(combo, (gint)(ScreenHeight*0.1), -1); gtk_widget_show (combo); gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 2); for (i=0;i0) gtk_combo_box_set_active(GTK_COMBO_BOX (combo), 0); combo_entry = (GTK_BIN (combo)->child); gtk_widget_show (combo_entry); gtk_entry_set_text (GTK_ENTRY (combo_entry), liste[0]); return combo_entry; } /********************************************************************************/ GtkWidget* create_label_combo_in_table(GtkWidget *table,gchar *tlabel,gchar **tlist,gint nlist, gboolean edit,gint llen,gint elen, gint iligne) { GtkWidget* combo; GtkWidget* label; GtkWidget *hbox = gtk_hbox_new(0,FALSE); gint i; label = gtk_label_new(tlabel); gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT); gtk_widget_set_size_request(GTK_WIDGET(label),llen,-1); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, iligne, iligne+1, GTK_FILL, GTK_FILL, 1, 1); gtk_widget_show(label); gtk_widget_show(hbox); label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table), label, 1, 2, iligne, iligne+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1, 1); combo = gtk_combo_box_entry_new_text(); for (i=0;i0) gtk_combo_box_set_active(GTK_COMBO_BOX (combo), 0); gtk_widget_set_size_request(GTK_WIDGET(combo),elen,-1); gtk_table_attach(GTK_TABLE(table), combo, 2, 3, iligne, iligne+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1, 1); gtk_widget_set_sensitive(GTK_BIN(combo)->child,edit); return GTK_BIN(combo)->child; } /********************************************************************************/ GtkWidget *create_frame(GtkWidget *win,GtkWidget *box,gchar *title) { GtkWidget *frame; frame = gtk_frame_new (title); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_widget_show (frame); return frame; } /********************************************************************************/ GtkWidget *create_hbox(GtkWidget *vbox) { GtkWidget *hbox; hbox = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); return hbox; } /********************************************************************************/ GtkWidget *create_vbox(GtkWidget *win) { GtkWidget *vbox; vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (win), vbox); return vbox; } /********************************************************************************/ GtkWidget *create_label_button(GtkWidget *win,GtkWidget *frame,GtkWidget* Vbox, gchar *tlabel,gchar *tbutton) { GtkWidget *label; GtkWidget *button; GtkWidget *hbox; hbox = gtk_hbox_new (FALSE, 2); g_object_ref (hbox); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (Vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new (tlabel); g_object_ref (label); g_object_set_data_full (G_OBJECT (win), "label", label, (GDestroyNotify) g_object_unref); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 2); button = gtk_button_new_with_label (tbutton); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 2); gtk_widget_show (button); return button; } /********************************************************************************/ void change_label_onglet() { GtkWidget *LabelOnglet = GTK_WIDGET(g_object_get_data(G_OBJECT(text),"LabelOnglet")); gchar *temp; GtkStyle *style; temp=get_name_file(fileopen.datafile); gtk_label_set_text(GTK_LABEL(LabelOnglet),temp); if(imodif == DATA_MOD_YES) { /* PangoFontDescription *font_desc; font_desc = pango_font_description_from_string (FontsStyleLabel.fontname); */ style = (GtkStyle*)g_object_get_data(G_OBJECT(text),"StyleRed"); /* if (style && font_desc) { style->font_desc = font_desc; } */ gtk_widget_set_style(LabelOnglet, style ); } else { /* PangoFontDescription *font_desc; font_desc = pango_font_description_from_string (FontsStyleLabel.fontname); */ style = (GtkStyle*)g_object_get_data(G_OBJECT(text),"StyleDef"); /* if (style && font_desc) { style->font_desc = font_desc; } */ if(style) gtk_widget_set_style(LabelOnglet, style ); } temp=get_name_file(fileopen.outputfile); LabelOnglet = GTK_WIDGET(g_object_get_data(G_OBJECT(textresult),"LabelOnglet")); gtk_label_set_text(GTK_LABEL(LabelOnglet),temp); g_free(temp); } /********************************************************************************/ void change_all_labels() { change_label_onglet(); set_label_infos_file(); } /********************************************************************************/ void add_widget_table(GtkWidget *Table,GtkWidget *wid,gushort line,gushort colonne) { gtk_table_attach(GTK_TABLE(Table),wid,colonne,colonne+1,line,line+1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 3,3); } /********************************************************************************/ GtkWidget *add_label_table(GtkWidget *Table, G_CONST_RETURN gchar *label,gushort line,gushort colonne) { GtkWidget *Label; GtkWidget *hbox = gtk_hbox_new(0,FALSE); Label = gtk_label_new (label); gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT); gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 0); add_widget_table(Table,hbox,line,colonne); return Label; } /********************************************************************************/ GtkWidget *add_label_at_table(GtkWidget *Table,gchar *label,gushort line,gushort colonne,GtkJustification just) { GtkWidget *Label; GtkWidget *hbox = gtk_hbox_new(0,FALSE); Label = gtk_label_new (label); gtk_label_set_justify(GTK_LABEL(Label),just); if(just ==GTK_JUSTIFY_CENTER) gtk_box_pack_start (GTK_BOX (hbox), Label, TRUE, TRUE, 0); else gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 0); add_widget_table(Table,hbox,line,colonne); return Label; } /********************************************************************************/ void get_result() { char *t; FILE *fd; guint nchar; guint taille=BSIZE; nchar=gabedit_text_get_length(GABEDIT_TEXT(textresult)); if ((!fileopen.outputfile) || (strcmp(fileopen.outputfile,"") == 0)) return ; if ((!fileopen.localdir) || (strcmp(fileopen.localdir,"") == 0)) return ; gabedit_text_set_point(GABEDIT_TEXT(textresult),0); gabedit_text_forward_delete(GABEDIT_TEXT(textresult),nchar); t = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.outputfile); fd = FOpen(t, "rb"); g_free(t); t=g_malloc(taille*sizeof(char)); if(fd!=NULL) { gtk_widget_set_sensitive(ResultLocalFrame, FALSE); while(1) { nchar = fread(t, 1, taille, fd); gabedit_text_insert (GABEDIT_TEXT(textresult), NULL, NULL, NULL, t,nchar); if(nchar0) gtk_combo_box_set_active(GTK_COMBO_BOX (combo), 0); gtk_widget_set_size_request(GTK_WIDGET(combo),elen,-1); gtk_box_pack_start(GTK_BOX(hbox), combo,FALSE,FALSE,2); gtk_widget_set_sensitive(GTK_BIN(combo)->child,edit); return GTK_BIN(combo)->child; } /********************************************************************************/ void show_forbidden_characters() { gchar *temp; gchar Forbidden[]={ '0','1','2','3','4','5','6','7','8','9', '+','-','/','%','$','*','!','@','#','^', '&','(',')','|','\\','<','>','?',',','~', '`','\'','.','"',':',';'}; guint All=36; guint i; temp = g_strdup(_("Sorry the name of varibale is not valid !\n\n")); temp = g_strdup_printf(_("%s The first character can not be one of : \n"),temp); for(i=0;i<10;i++) temp = g_strdup_printf("%s %c",temp,Forbidden[i]); temp = g_strdup_printf("%s \n\n",temp); temp = g_strdup_printf(_("%s Do not use the following characters :\n"),temp); for(i=11;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); gtk_widget_realize(DialogueMessage); Label = create_label_with_pixmap(DialogueMessage,message,_("Question")); gtk_box_pack_start(GTK_BOX(vboxframe), Label,TRUE,TRUE,0); gtk_widget_realize(DialogueMessage); Bouton = create_button(DialogueMessage,_("No")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(DialogueMessage)->action_area),Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(DialogueMessage)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); Bouton = create_button(DialogueMessage,_("Yes")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(DialogueMessage)->action_area), Bouton,TRUE,TRUE,0); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)func,data); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(DialogueMessage)); gtk_widget_show_all(DialogueMessage); return DialogueMessage; } /**********************************************************************************/ void open_file(GtkWidget *widget, gchar *data) { gchar *t; if(imodif == DATA_MOD_YES) { t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile)); t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t); t = g_strdup_printf(_(" %sYou want to continue?\n"),t); Continue_YesNo(charge_doc, NULL,t); g_free(t); } else { charge_doc(NULL, NULL); data_modify(FALSE); } } /**********************************************************************************/ void new_molcas(GtkWidget *widget, gchar *data) { gchar t[BSIZE]; gchar t1[BSIZE]; if(imodif == DATA_MOD_YES) { sprintf(t,_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile)); sprintf(t1,"%s",t); sprintf(t,_(" %sIf you continue, you lose what you have changed.\n\n"),t1); sprintf(t1,"%s",t); sprintf(t,_(" %sYou want to continue?\n"),t1); Continue_YesNo(new_doc_molcas, NULL,t); } else { new_doc_molcas(NULL, NULL); iprogram = PROG_IS_MOLCAS; fileopen.command=g_strdup(NameCommandMolcas); } } /**********************************************************************************/ void new_molpro(GtkWidget *widget, gchar *data) { gchar *t; if(imodif == DATA_MOD_YES) { t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile)); t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t); t = g_strdup_printf(_(" %sYou want to continue?\n"),t); Continue_YesNo(new_doc_molpro, NULL,t); g_free(t); } else { new_doc_molpro(NULL, NULL); iprogram = PROG_IS_MOLPRO; fileopen.command=g_strdup(NameCommandMolpro); } } /**********************************************************************************/ void new_mpqc(GtkWidget *widget, gchar *data) { gchar *t; if(imodif == DATA_MOD_YES) { t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile)); t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t); t = g_strdup_printf(_(" %sYou want to continue?\n"),t); Continue_YesNo(new_doc_mpqc, NULL,t); g_free(t); } else { new_doc_mpqc(NULL, NULL); iprogram = PROG_IS_MPQC; fileopen.command=g_strdup(NameCommandMPQC); } } /**********************************************************************************/ void new_firefly(GtkWidget *widget, gchar *data) { gchar *t; if(imodif == DATA_MOD_YES) { t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile)); t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t); t = g_strdup_printf(_(" %sYou want to continue?\n"),t); Continue_YesNo(new_doc_firefly, NULL,t); g_free(t); } else { new_doc_firefly(NULL, NULL); iprogram = PROG_IS_FIREFLY; fileopen.command=g_strdup(NameCommandFireFly); } } /**********************************************************************************/ void new_demon(GtkWidget *widget, gchar *data) { gchar *t; if(imodif == DATA_MOD_YES) { t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile)); t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t); t = g_strdup_printf(_(" %sYou want to continue?\n"),t); Continue_YesNo(new_doc_demon, NULL,t); g_free(t); } else { new_doc_demon(NULL, NULL); iprogram = PROG_IS_DEMON; fileopen.command=g_strdup(NameCommandDeMon); } } /**********************************************************************************/ void new_gamess(GtkWidget *widget, gchar *data) { gchar *t; if(imodif == DATA_MOD_YES) { t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile)); t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t); t = g_strdup_printf(_(" %sYou want to continue?\n"),t); Continue_YesNo(new_doc_gamess, NULL,t); g_free(t); } else { new_doc_gamess(NULL, NULL); iprogram = PROG_IS_GAMESS; fileopen.command=g_strdup(NameCommandGamess); } } /**********************************************************************************/ void new_gauss(GtkWidget *widget, gchar *data) { gchar *t; if(imodif == DATA_MOD_YES) { t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile)); t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t); t = g_strdup_printf(_(" %sYou want to continue?\n"),t); Continue_YesNo(new_doc_gauss, NULL,t); g_free(t); } else { new_doc_gauss(NULL, NULL); iprogram = PROG_IS_GAUSS; fileopen.command=g_strdup(NameCommandGaussian); } } /**********************************************************************************/ void new_nwchem(GtkWidget *widget, gchar *data) { gchar *t; if(imodif == DATA_MOD_YES) { t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile)); t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t); t = g_strdup_printf(_(" %sYou want to continue?\n"),t); Continue_YesNo(new_doc_nwchem, NULL,t); g_free(t); } else { new_doc_nwchem(NULL, NULL); iprogram = PROG_IS_NWCHEM; fileopen.command=g_strdup(NameCommandNWChem); } } /**********************************************************************************/ void new_psicode(GtkWidget *widget, gchar *data) { gchar *t; if(imodif == DATA_MOD_YES) { t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile)); t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t); t = g_strdup_printf(_(" %sYou want to continue?\n"),t); Continue_YesNo(new_doc_psicode, NULL,t); g_free(t); } else { new_doc_psicode(NULL, NULL); iprogram = PROG_IS_PSICODE; fileopen.command=g_strdup(NameCommandPsicode); } } /**********************************************************************************/ void new_orca(GtkWidget *widget, gchar *data) { gchar *t; if(imodif == DATA_MOD_YES) { t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile)); t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t); t = g_strdup_printf(_(" %sYou want to continue?\n"),t); Continue_YesNo(new_doc_orca, NULL,t); g_free(t); } else { new_doc_orca(NULL, NULL); iprogram = PROG_IS_ORCA; fileopen.command=g_strdup(NameCommandOrca); } } /**********************************************************************************/ void new_qchem(GtkWidget *widget, gchar *data) { gchar *t; if(imodif == DATA_MOD_YES) { t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile)); t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t); t = g_strdup_printf(_(" %sYou want to continue?\n"),t); Continue_YesNo(new_doc_qchem, NULL,t); g_free(t); } else { new_doc_qchem(NULL, NULL); iprogram = PROG_IS_QCHEM; fileopen.command=g_strdup(NameCommandQChem); } } /**********************************************************************************/ void new_mopac(GtkWidget *widget, gchar *data) { gchar *t; if(imodif == DATA_MOD_YES) { t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile)); t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t); t = g_strdup_printf(_(" %sYou want to continue?\n"),t); Continue_YesNo(new_doc_mopac, NULL,t); g_free(t); } else { new_doc_mopac(NULL, NULL); iprogram = PROG_IS_MOPAC; fileopen.command=g_strdup(NameCommandMopac); } } /**********************************************************************************/ void new_other(GtkWidget *widget, gchar *data) { gchar *t; if(imodif == DATA_MOD_YES) { t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile)); t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t); t = g_strdup_printf(_(" %sYou want to continue?\n"),t); Continue_YesNo(new_doc_other, NULL,t); g_free(t); } else { new_doc_other(NULL, NULL); iprogram = PROG_IS_OTHER; } } /**********************************************************************************/ GtkWidget *create_hbox_browser(GtkWidget* Wins,GtkWidget* vbox,gchar *tlabel,gchar *deffile,gchar** patterns) { GtkWidget *Entry = NULL; GtkWidget *hbox ; GtkWidget *button; GtkWidget* Label; hbox = create_hbox_false(vbox); /* The label */ Label = gtk_label_new(tlabel); gtk_widget_set_size_request(GTK_WIDGET(Label),(gint)(ScreenHeight*0.06),-1); gtk_box_pack_start(GTK_BOX(hbox), Label,FALSE,FALSE,2); /* The Entry */ Entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), Entry,TRUE,TRUE,2); if(deffile) { gint len = strlen(deffile)*8; len = strlen(deffile)*(gint)(8); gtk_widget_set_size_request(GTK_WIDGET(Entry),len,32); gtk_entry_set_text(GTK_ENTRY(Entry),deffile); } else gtk_widget_set_size_request(GTK_WIDGET(Entry),350,32); /* The Button */ button = create_button_pixmap(Wins,open_xpm,NULL); g_signal_connect_swapped(G_OBJECT (button), "clicked",G_CALLBACK(set_entry_selected_file),GTK_OBJECT(hbox)); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 1); g_object_set_data(G_OBJECT (hbox), "Entry", Entry); g_object_set_data(G_OBJECT (hbox), "Button", button); g_object_set_data(G_OBJECT (hbox), "Label", Label); g_object_set_data(G_OBJECT (hbox), "Window", Wins); g_object_set_data(G_OBJECT (hbox), "Patterns",patterns); gtk_widget_show_all(hbox); return hbox; } /********************************************************************************/ GtkWidget* create_table_browser(GtkWidget *Wins,GtkWidget *vbox) { GtkWidget *table = gtk_table_new(2,4,FALSE); GtkWidget* buttonDirSelector = NULL; GtkWidget* entryFileName = NULL; GtkWidget* label = NULL; gint i; gint j; gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); /*----------------------------------------------------------------------------------*/ i = 0; j = 0; add_label_table(table,_("Folder"),(gushort)i,(gushort)j); j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); j = 2; buttonDirSelector = gabedit_dir_button(); gtk_widget_set_size_request(GTK_WIDGET(buttonDirSelector),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),buttonDirSelector, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); g_object_set_data(G_OBJECT(Wins), "ButtonDirSelector", buttonDirSelector); /*----------------------------------------------------------------------------------*/ i++; j = 0; add_label_table(table,_("File name"),(gushort)i,(gushort)j); j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); j = 2; entryFileName = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entryFileName),"data.xyz"); gtk_widget_set_size_request(GTK_WIDGET(entryFileName),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),entryFileName, j,j+4,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); g_object_set_data(G_OBJECT(Wins), "EntryFileName", entryFileName); /*----------------------------------------------------------------------------------*/ gtk_widget_show_all(table); return table; } /********************************************************************************/ void set_default_styles() { /* gchar *font = NULL; gchar *fontLabel = NULL; gchar *rc_string = NULL; if(FontsStyleOther.fontname) font = g_strdup_printf("font =\"%s\"",FontsStyleOther.fontname); else font = g_strdup(" "); if(FontsStyleLabel.fontname) fontLabel = g_strdup_printf("font =\"%s\"",FontsStyleLabel.fontname); else fontLabel = g_strdup(" "); rc_string=g_strdup_printf( "style \"allwid\"" "{" "%s" "}" "style \"labels\"" "{" "%s" "}" "style \"frames\"" "{" "fg[NORMAL] = { 1., 0., 0. }" "bg[NORMAL] = { 0.5, 0.5, 0.5 }" "%s" "}" "style \"buttons\"" "{" "fg[PRELIGHT] = { 0, 0.1, 1.0 }\n" "bg[PRELIGHT] = { 0.4, 0.4, 0.4 }\n" "bg[ACTIVE] = { 1.0, 0, 0 }\n" "fg[ACTIVE] = { 0, 1.0, 0 }\n" "bg[NORMAL] = { 0.65, 0.65, 0.65 }\n" "fg[NORMAL] = { 0.0, 0.0, 1.0 }\n" "bg[INSENSITIVE] = { 1.0, 1.0, 1.0 }\n" "fg[INSENSITIVE] = { 1.0, 0, 1.0 }\n" "%s" "}\n" "style \"toggle_button\" = \"button\"\n" "{\n" "fg[NORMAL] = { 0.0, 0.0, 0.0 }\n" "fg[ACTIVE] = { 0.0, 0.0, 1.0 }\n" "%s" "}\n" "widget_class \"*Gtk*\" style \"allwid\"\n" "widget_class \"*GtkButton*\" style \"buttons\"\n" "widget_class \"*GtkCheckButton*\" style \"toggle_button\"\n" "widget_class \"*GtkRadioButton*\" style \"toggle_button\"\n" "widget_class \"*GtkToggleButton*\" style \"toggle_button\"\n" "widget_class \"*GtkFrame\" style \"frames\"\n" "widget_class \"*GtkLabel\" style \"labels\"\n" ,font,fontLabel,font,font,font); gtk_rc_parse_string(rc_string); g_free(rc_string); g_free(font); g_free(fontLabel); */ gtk_rc_parse_string("gtk-icon-sizes = \"gtk-menu=13,13:gtk-small-toolbar=16,16:gtk-large-toolbar=24,24\"gtk-toolbar-icon-size = small-toolbar"); } /********************************************************************************/ GtkWidget* create_text_widget(GtkWidget* box,gchar *title,GtkWidget **frame) { GtkWidget *scrolledwindow; GtkWidget *Frame; GtkWidget *Text; Frame = gtk_frame_new(title); gtk_container_set_border_width(GTK_CONTAINER(Frame), 2); gtk_container_add (GTK_CONTAINER (box), Frame); scrolledwindow = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (Frame), scrolledwindow); Text = gabedit_text_new (); set_tab_size (Text, 8); /* gabedit_text_set_word_wrap(GABEDIT_TEXT(Text), TRUE); gabedit_text_set_line_wrap(GABEDIT_TEXT(Text), TRUE); */ gtk_widget_show (Text); gtk_container_add (GTK_CONTAINER (scrolledwindow), Text); gabedit_text_set_editable (GABEDIT_TEXT (Text), FALSE); *frame = Frame; return Text; } /*********************************************************************/ void draw_density_orbitals_gamess_or_gauss_or_molcas_or_molpro(GtkWidget *wid,gpointer data) { if( iprogram == PROG_IS_GAMESS) { gchar** FileName = g_malloc(2*sizeof(gchar*)); FileName[0] = NULL; FileName[1] = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.logfile); view_orb(Fenetre,2,FileName); g_free(FileName[1] ); g_free(FileName); } else if( iprogram == PROG_IS_FIREFLY) { gchar** FileName = g_malloc(2*sizeof(gchar*)); FileName[0] = NULL; FileName[1] = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.logfile); view_orb(Fenetre,2,FileName); g_free(FileName[1] ); g_free(FileName); } else if( iprogram == PROG_IS_GAUSS) { gchar** FileName = g_malloc(2*sizeof(gchar*)); FileName[0] = NULL; FileName[1] = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.logfile); view_orb(Fenetre,2,FileName); g_free(FileName[1] ); g_free(FileName); } else if( iprogram == PROG_IS_MOLCAS) { gchar** FileName = g_malloc(2*sizeof(gchar*)); FileName[0] = NULL; FileName[1] = g_strdup_printf("%s%s%s.scf.molden",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.projectname); view_orb(Fenetre,2,FileName); g_free(FileName[1] ); g_free(FileName); } else if( iprogram == PROG_IS_MOLPRO) { gchar** FileName = g_malloc(2*sizeof(gchar*)); FileName[0] = NULL; FileName[1] = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.outputfile); view_orb(Fenetre,2,FileName); g_free(FileName[1] ); g_free(FileName); } else if( iprogram == PROG_IS_QCHEM) { gchar** FileName = g_malloc(2*sizeof(gchar*)); FileName[0] = NULL; FileName[1] = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.outputfile); view_orb(Fenetre,2,FileName); g_free(FileName[1] ); g_free(FileName); } if( iprogram == PROG_IS_MOPAC) { gchar** FileName = g_malloc(2*sizeof(gchar*)); FileName[0] = NULL; FileName[1] = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.outputfile); view_orb(Fenetre,2,FileName); g_free(FileName[1] ); g_free(FileName); } else view_orb(Fenetre,0,NULL); } /*********************************************************************/ void set_last_directory(G_CONST_RETURN gchar* FileName) { gchar* temp = get_suffix_name_file(FileName); gchar* localdir = get_name_dir(temp); if(!localdir) return; if(lastdirectory) g_free(lastdirectory); lastdirectory = g_strdup(localdir); if(temp) g_free(temp); if(localdir) g_free(localdir); if(lastdirectory && gabedit_directory() && strcmp(lastdirectory,gabedit_directory())) {int it = chdir(lastdirectory);} } /*********************************************************************/ gchar* get_last_directory() { return lastdirectory; } /******************************************************************/ static void set_dipole_color(GtkColorSelection *Sel,gpointer *d) { GdkColor* color; color = g_object_get_data(G_OBJECT (Sel), "Color"); gtk_color_selection_get_current_color(Sel, color); } /******************************************************************/ static void set_dipole_button_color(GtkObject *button,gpointer *data) { GtkStyle *style = g_object_get_data(G_OBJECT (button), "Style"); GdkColor* color = g_object_get_data(G_OBJECT (button), "Color"); GtkWidget *OldButton = g_object_get_data(G_OBJECT (button), "Button"); style = gtk_style_copy(style); style->bg[0].red=color->red; style->bg[0].green=color->green; style->bg[0].blue= color->blue; gtk_widget_set_style(OldButton, style); } /******************************************************************/ static void open_color_dlg_dipole(GtkWidget *button,gpointer data) { GtkColorSelectionDialog *colorDlg; GtkStyle* style = g_object_get_data(G_OBJECT (button), "Style"); GtkWidget *win = g_object_get_data(G_OBJECT (button), "Win"); GdkColor* color = g_object_get_data(G_OBJECT (button), "Color");; colorDlg = (GtkColorSelectionDialog *)gtk_color_selection_dialog_new(_("Set Dipole Color")); gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (colorDlg->colorsel), color); gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (colorDlg->colorsel), color); gtk_window_set_transient_for(GTK_WINDOW(colorDlg),GTK_WINDOW(win)); gtk_window_set_position(GTK_WINDOW(colorDlg),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (colorDlg), TRUE); g_signal_connect(G_OBJECT(colorDlg), "delete_event",(GCallback)destroy_button_windows,NULL); g_signal_connect(G_OBJECT(colorDlg), "delete_event",G_CALLBACK(gtk_widget_destroy),NULL); g_object_set_data(G_OBJECT (colorDlg->colorsel), "Color", color); gtk_widget_hide(colorDlg->help_button); g_signal_connect_swapped(G_OBJECT(colorDlg->ok_button),"clicked", (GCallback)set_dipole_color,GTK_OBJECT(colorDlg->colorsel)); g_object_set_data(G_OBJECT (colorDlg->ok_button), "Color", color); g_object_set_data(G_OBJECT (colorDlg->ok_button), "Button", button); g_object_set_data(G_OBJECT (colorDlg->ok_button), "Style", style); g_signal_connect(G_OBJECT(colorDlg->ok_button),"clicked", (GCallback)set_dipole_button_color,NULL); g_signal_connect_swapped(G_OBJECT(colorDlg->ok_button), "clicked", (GCallback)destroy_button_windows,GTK_OBJECT(colorDlg)); g_signal_connect_swapped(G_OBJECT(colorDlg->ok_button),"clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(colorDlg)); g_signal_connect_swapped(G_OBJECT(colorDlg->cancel_button), "clicked", (GCallback)destroy_button_windows,GTK_OBJECT(colorDlg)); g_signal_connect_swapped(G_OBJECT(colorDlg->cancel_button),"clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(colorDlg)); add_button_windows(_(" Set Color "),GTK_WIDGET(colorDlg)); gtk_widget_show(GTK_WIDGET(colorDlg)); } /*********************************************************************/ GtkWidget* set_dipole_dialog () { GtkWidget *fp; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox; GtkWidget *button; GtkWidget *label; GtkStyle *style; static GtkWidget* entrys[8]; static GdkColor color; gchar* tlabel[8]={"Factor : ","X(D) : ","Y(D) : ","Z(D) : ","Radius : ","X0(Ang) : ","Y0(Ang) : ","Z0(Ang) : "}; gint i; /* principal Window */ fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(fp),TRUE); gtk_window_set_title(GTK_WINDOW(fp),_("Set Dipole")); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)gtk_widget_destroy,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (_("Set Dipole(Debye)")); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); for(i=0;i<5;i++) { hbox = create_hbox(vboxframe); label = gtk_label_new (tlabel[i]); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, FALSE, 0); entrys[i] = gtk_entry_new (); gtk_widget_show (entrys[i]); gtk_box_pack_start (GTK_BOX (hbox), entrys[i], FALSE, TRUE, 0); if(i!=0) { if(i==4) { gchar* t = g_strdup_printf("%f",Dipole.radius*AUTODEB); gtk_entry_set_text(GTK_ENTRY(entrys[i]),t); g_free(t); } else { gchar* t = g_strdup_printf("%f",Dipole.value[i-1]*AUTODEB); gtk_entry_set_text(GTK_ENTRY(entrys[i]),t); g_free(t); } } else { if(i==0) gtk_entry_set_text(GTK_ENTRY(entrys[i]),"1.0"); else gtk_entry_set_text(GTK_ENTRY(entrys[i]),"0.0"); } } for(i=5;i<8;i++) { hbox = create_hbox(vboxframe); label = gtk_label_new (tlabel[i]); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, FALSE, 0); entrys[i] = gtk_entry_new (); gtk_widget_show (entrys[i]); gtk_box_pack_start (GTK_BOX (hbox), entrys[i], FALSE, TRUE, 0); { gchar* t = g_strdup_printf("%f",Dipole.origin[i-5]*BOHR_TO_ANG); gtk_entry_set_text(GTK_ENTRY(entrys[i]),t); g_free(t); } } hbox = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vboxframe), hbox, FALSE, FALSE, 1); label = gtk_label_new (_("Color : ")); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, FALSE, 0); style = gtk_widget_get_style(fp); button = gtk_button_new_with_label(" "); style = gtk_style_copy(style); style->bg[0].red=Dipole.color[0]; style->bg[0].green=Dipole.color[1]; style->bg[0].blue=Dipole.color[2]; color.red =style->bg[0].red; color.green =style->bg[0].green; color.blue =style->bg[0].blue; gtk_widget_set_style(button, style ); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 1); gtk_widget_show (button); g_object_set_data(G_OBJECT (button), "Style", style); g_object_set_data(G_OBJECT (button), "Win", fp); g_object_set_data(G_OBJECT (button), "Color", &color); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)open_color_dlg_dipole, NULL); hbox = create_hbox(vboxall); button = create_button(Fenetre,_("Close")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(fp)); button = create_button(Fenetre,_("Apply")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_object_set_data(G_OBJECT (button), "Color", &color); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(set_dipole),(gpointer)entrys); gtk_widget_show (button); button = create_button(Fenetre,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_object_set_data(G_OBJECT (button), "Color", &color); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(set_dipole),(gpointer)entrys); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(fp)); gtk_widget_show (button); gtk_widget_show (button); gtk_widget_show_all(fp); return fp; } /*************************************************************************************/ void fit_windows_position(GtkWidget* parent, GtkWidget* child) { gint wChild = 0, hChild = 0; gint wParent=0, hParent=0; gdk_drawable_get_size(parent->window,&wParent,&hParent); gtk_window_move(GTK_WINDOW(parent),0,0); gdk_drawable_get_size(child->window,&wChild,&hChild); if(wParent+wChild+100 && *dt>0) break; } rewind(file); if(nPoints == 0 && nPointsdata); nf++; if(cur==lists) { Dipole = readOneFile(fileName, n0, &M, &dt); if(M<2) { Message(_("Error\n The number of steps <2 !\n"),_("Error"),TRUE); return FALSE; } X = g_malloc(M*sizeof(gdouble)); Y = g_malloc(M*sizeof(gdouble)); for(k=0;knext; } if(nf>0) for(k=0;kvbox), hsep1, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (GTK_DIALOG(filesel)->vbox), hbox, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (GTK_DIALOG(filesel)->vbox), hsep2, FALSE, FALSE, 0); gtk_widget_show_all(hsep1); gtk_widget_show_all(hsep2); gtk_widget_show_all(hbox); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(filesel),TRUE); g_object_set_data (G_OBJECT (filesel), "EntryN",entryN); } /*************************************************************************************/ static gdouble** readOneTxtFile(gchar* fileName, gint n0, gint* nP, gdouble* dt) { gint nPoints = 0; gdouble** Dipole= NULL; FILE* file; gchar t[BSIZE]; gdouble d[4]; gint i; gint k; double t0 = 0; file = fopen(fileName,"rb"); if(!file) printf("I cannot open '%s'\n",fileName); if(!file) return 0; k = 0; *nP = 0; *dt = 0; while(!feof(file)) { if(!fgets(t,BSIZE,file))break; if(sscanf(t,"%lf%lf%lf%lf",&d[0],&d[1],&d[2],&d[3])!=4)break; nPoints++; } rewind(file); if(nPoints == 0 || nPoints=n0) for(i=0;i<3;i++) Dipole[k-n0][i] = d[i+1]; *dt = d[0]; if(k==0) t0 = d[0]; k++; if(k==nPoints) break; } *dt = (*dt-t0)/nPoints; fclose(file); *nP = nPoints-n0; return Dipole; } /********************************************************************************/ static gboolean read_dipole_text_file(GabeditFileChooser *filesel, gint response_id) { gchar* fileName = NULL; GtkWidget* entryN = NULL; gint n0 = 1; gdouble* X = NULL; gdouble* Y = NULL; gdouble* Ytmp = NULL; gdouble** Dipole = NULL; gdouble dt; gint M = 0; gint MC = 0; gint k; GtkWidget* xyplot; GtkWidget* window; GSList* lists = NULL; GSList* cur = NULL; gint nf = 0; if(response_id != GTK_RESPONSE_OK) return FALSE; lists = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(filesel)); entryN = g_object_get_data (G_OBJECT (filesel), "EntryN"); if(!entryN) return FALSE; n0 = atoi(gtk_entry_get_text(GTK_ENTRY(entryN))); if(n0<0) n0 = 0; create_popup_win(_("Please wait")); cur = lists; nf = 0; while(cur != NULL) { fileName = (gchar*)(cur->data); nf++; if(cur==lists) { Dipole = readOneTxtFile(fileName, n0, &M, &dt); if(M<2) { Message(_("Error\n The number of steps <2 !\n"),_("Error"),TRUE); return FALSE; } X = g_malloc(M*sizeof(gdouble)); Y = g_malloc(M*sizeof(gdouble)); for(k=0;knext; } if(nf>0) for(k=0;kvbox), hsep1, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (GTK_DIALOG(filesel)->vbox), hbox, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (GTK_DIALOG(filesel)->vbox), hsep2, FALSE, FALSE, 0); gtk_widget_show_all(hsep1); gtk_widget_show_all(hsep2); gtk_widget_show_all(hbox); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(filesel),TRUE); g_object_set_data (G_OBJECT (filesel), "EntryN",entryN); } /********************************************************************************/ GtkWidget* gabedit_dir_button() { gboolean ret = FALSE; GtkWidget* buttonDirSelector; gchar* initial_dir = g_get_current_dir (); buttonDirSelector = gtk_file_chooser_button_new(_("Select your folder"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); ret = gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(buttonDirSelector), initial_dir); if( ! ret ) ret = gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(buttonDirSelector), "/"); return buttonDirSelector; } /********************************************************************************************************/ void add_cancel_ok_buttons(GtkWidget *Win, GtkWidget *vbox, GCallback myFunc) { GtkWidget *hbox; GtkWidget *button; /* buttons box */ hbox = create_hbox_false(vbox); gtk_widget_realize(Win); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)myFunc,GTK_OBJECT(Win)); gtk_widget_show_all(vbox); } GabeditSrc250/src/Utils/Transformation.c0000644000175100017510000002445013130665225020541 0ustar alloucheallouche/*Transformation.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "../Common/Global.h" #include "Vector3d.h" #include "Transformation.h" #include "Utils.h" #define TRACKBALLSIZE (0.8) /* Local function prototypes */ static gdouble tb_project_to_sphere(gdouble, gdouble, gdouble); /****************************************************/ gdouble *v4d_pvect(V4d v1,V4d v2) { gdouble* v = g_malloc(4*sizeof(gdouble)); v[0] = v1[1] * v2[2] - v2[1] * v1[2]; v[1] = v1[2] * v2[0] - v2[2] * v1[0]; v[2] = v1[0] * v2[1] - v2[0] * v1[1] ; v[3] = (v1[3] + v2[3])/2; return v; } /****************************************************/ gdouble v4d_pscal(V4d v1,V4d v2) { return v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2]+v1[3]*v2[3]; } /****************************************************/ gdouble* v4d_scal(V4d v1,gdouble scal) { gdouble* v = g_malloc(4*sizeof(gdouble)); v[0] = v1[0] * scal; v[1] = v1[1] * scal; v[2] = v1[2] * scal; v[3] = v1[3] * scal; return v; } /****************************************************/ gdouble v4d_length(V4d v) { return sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]+v[3]*v[3]); } /****************************************************/ void v4d_normal(V4d v) { int i; gdouble len; len = v4d_length(v); for (i = 0; i < 4; i++) v[i] /= len; } /************************************************************************/ /* * Given an axis and angle, compute quaternion. */ void axis_to_quat(gdouble a[3], gdouble phi, gdouble q[4]) { v3d_normal(a); v3d_copy(a,q); v3d_scale(q,sin(phi/2.0)); q[3] = cos(phi/2.0); } /************************************************************************/ void trackball(gdouble q[4],gdouble p1x,gdouble p1y,gdouble p2x,gdouble p2y) { gdouble a[3]; /* Axis of rotation */ gdouble phi; /* how much to rotate about axis */ gdouble p1[3]; gdouble p2[3]; gdouble d[3]; gdouble t; if (p1x == p2x && p1y == p2y) { /* Zero rotation */ v3d_zero(q); q[3] = 1.0; return; } /* * First, figure out z-coordinates for projection of P1 and P2 to * deformed sphere */ v3d_set(p1,p1x,p1y,tb_project_to_sphere(TRACKBALLSIZE,p1x,p1y)); v3d_set(p2,p2x,p2y,tb_project_to_sphere(TRACKBALLSIZE,p2x,p2y)); /* Now, we want the cross product of P1 and P2 */ v3d_cross(p2,p1,a); /* Figure out how much to rotate around that axis. */ v3d_sub(p1,p2,d); t = v3d_length(d) / (2.0*TRACKBALLSIZE); /* Avoid problems with out-of-control values...*/ if (t > 1.0) t = 1.0; if (t < -1.0) t = -1.0; phi = 2.0 * asin(t); axis_to_quat(a,phi,q); } /************************************************************************/ /* * Project an x,y pair onto a sphere of radius r * OR a hyperbolic sheet * if we are away from the center of the sphere. */ static gdouble tb_project_to_sphere(gdouble r, gdouble x, gdouble y) { gdouble d, t, z; d = sqrt(x*x + y*y); if (d < r * 0.70710678118654752440) { /* Inside sphere */ z = sqrt(r*r - d*d); } else { /* On hyperbola */ t = r / 1.41421356237309504880; z = t*t / d; } return z; } /************************************************************************/ /* * Given two rotations, e1 and e2, expressed as quaternion rotations, * figure out the equivalent single rotation and stuff it into dest. * * This routine also normalizes the result every RENORMCOUNT times it is * called, to keep error from creeping in. * * NOTE: This routine is written so that q1 or q2 may be the same * as dest (or each other). */ #define RENORMCOUNT 97 void add_quats(gdouble q1[4],gdouble q2[4],gdouble dest[4]) { static int count=0; gdouble t1[4]; gdouble t2[4]; gdouble t3[4]; gdouble tf[4]; v3d_copy(q1,t1); v3d_scale(t1,q2[3]); v3d_copy(q2,t2); v3d_scale(t2,q1[3]); v3d_cross(q2,q1,t3); v3d_add(t1,t2,tf); v3d_add(t3,tf,tf); tf[3] = q1[3] * q2[3] - v3d_dot(q1,q2); dest[0] = tf[0]; dest[1] = tf[1]; dest[2] = tf[2]; dest[3] = tf[3]; if (++count > RENORMCOUNT) { count = 0; v4d_normal(dest); } } /************************************************************************/ void build_rotmatrix(gdouble m[4][4],gdouble q[4]) { m[0][0] = 1.0 - 2.0 * (q[1] * q[1] + q[2] * q[2]); m[0][1] = 2.0 * (q[0] * q[1] - q[2] * q[3]); m[0][2] = 2.0 * (q[2] * q[0] + q[1] * q[3]); m[0][3] = 0.0; m[1][0] = 2.0 * (q[0] * q[1] + q[2] * q[3]); m[1][1]= 1.0 - 2.0 * (q[2] * q[2] + q[0] * q[0]); m[1][2] = 2.0 * (q[1] * q[2] - q[0] * q[3]); m[1][3] = 0.0; m[2][0] = 2.0 * (q[2] * q[0] - q[1] * q[3]); m[2][1] = 2.0 * (q[1] * q[2] + q[0] * q[3]); m[2][2] = 1.0 - 2.0 * (q[1] * q[1] + q[0] * q[0]); m[2][3] = 0.0; m[3][0] = 0.0; m[3][1] = 0.0; m[3][2] = 0.0; m[3][3] = 1.0; } /************************************************************************/ /**********************************************/ /* Name: Matrix Inversion by Gauss - Jordan*/ /**************************************************/ void Pivoting(gdouble **a,gint size,gint row,gint col) { gdouble temp; gint s; for(s=0;s=0;j--) { for(i=j-1;i>=0;i--) { if(a[j][j]==0) done=0; else factor=Factor(a,i,j); /*for(ii=0;ii<=2*size;ii++)*/ for(ii=0;ii<2*size;ii++) a[i][ii] += factor*a[j][ii]; Trunc(a,size,error); } } if(done == 0) printf("ERREUR\n"); if(done != 0) { for(i=0;i #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/TTables.h" #include "../Utils/MathFunctions.h" #include "../Utils/GTF.h" /********************************************************************************/ static gdouble f(gint i,gint l,gint m,gdouble A,gdouble B) { gint j,jmin,jmax; gdouble sum=0.0; jmin = 0; if(jminl) jmax = l; for( j=jmin;j<=jmax;j++) { sum += binomial(l,j)*binomial(m,i-j)* dpn(-A,l-j)*dpn(-B,m-i+j); } return sum; } /********************************************************************************/ static gdouble X1(gint n,gint l1,gint l2,gdouble A, gdouble B,gdouble g) { gint i,r,l; gint imin,imax; gdouble X=0.0; gdouble fourg=4*g; l=l1+l2; imin=n; if(n%2 == 0) { if( l%2==0) imax = l; else imax = l-1; } else { if( l%2==0) imax = l-1; else imax = l; } for(i=imin;i<=imax;i+=2) { r = (i-n)/2; /* printf("n=%d i=%d r=%d \n",n,i,r);*/ /* printf("CI2J=%f f=%f \n",binomial2(i,r),f(i,l1,l2,A,B));*/ X+=binomial2(i,r)/dpn(fourg,i-r)*f(i,l1,l2,A,B); } /* printf("g=%f X=%f\n",g,X);*/ return X; } /********************************************************************************/ static gdouble X2(gint n,gint l1,gint l2,gdouble A, gdouble B,gdouble g) { gint i,r,l; gint imin,imax; gdouble X=0.0; gdouble fourg=4*g; l=l1+l2; imin=n; if(n%2 == 0) { if( l%2==0) imax = l; else imax = l-1; } else { if( l%2==0) imax = l-1; else imax = l; } for(i=imin;i<=imax;i+=2) { r = (i-n)/2; X+=m1p(i)*binomial2(i,r)/dpn(fourg,i-r)*f(i,l1,l2,A,B); } return X; } /********************************************************************************/ TTABLES **createTTables(CGTF *AOrb, gint NAOrb, gdouble CutOffInt2) { gint i,j,k; gint r,s; gdouble PA[3]; gdouble PB[3]; gdouble R2AB; gdouble temp; gdouble g; gint nx,ny,nz; gdouble X1X,X1Y; gdouble X2X,X2Y; gdouble X1Z,X2Z; gdouble dum; TTABLES **Ttables; Ttables= g_malloc(NAOrb*sizeof(TTABLES*)) ; for(i=0;iCutOffInt2) { Ttables[i][j].T[r][s].NT1++; Ttables[i][j].T[r][s].T1=realloc(Ttables[i][j].T[r][s].T1,Ttables[i][j].T[r][s].NT1*sizeof(TABLE)); Ttables[i][j].T[r][s].T1[Ttables[i][j].T[r][s].NT1-1].Val=dum; Ttables[i][j].T[r][s].T1[Ttables[i][j].T[r][s].NT1-1].n[0]=nx; Ttables[i][j].T[r][s].T1[Ttables[i][j].T[r][s].NT1-1].n[1]=ny; Ttables[i][j].T[r][s].T1[Ttables[i][j].T[r][s].NT1-1].n[2]=nz; } dum = temp*X2X*X2Y*X2(nz,AOrb[i].Gtf[r].l[2],AOrb[j].Gtf[s].l[2],PA[2],PB[2],g); if(fabs(dum)>CutOffInt2) { Ttables[i][j].T[r][s].NT2++; Ttables[i][j].T[r][s].T2=realloc(Ttables[i][j].T[r][s].T2,Ttables[i][j].T[r][s].NT2*sizeof(TABLE)); Ttables[i][j].T[r][s].T2[Ttables[i][j].T[r][s].NT1-1].Val=dum; Ttables[i][j].T[r][s].T2[Ttables[i][j].T[r][s].NT1-1].n[0]=nx; Ttables[i][j].T[r][s].T2[Ttables[i][j].T[r][s].NT1-1].n[1]=ny; Ttables[i][j].T[r][s].T2[Ttables[i][j].T[r][s].NT1-1].n[2]=nz; } } } } if(Ttables[i][j].T[r][s].NT1==0) g_free(Ttables[i][j].T[r][s].T1); if(Ttables[i][j].T[r][s].NT2==0) g_free(Ttables[i][j].T[r][s].T2); } } } return Ttables; } /********************************************************************************/ void freeTTables(gint NAOrb, TTABLES** Ttables) { gint i,j,r; if(!Ttables ) return; for(i=0;i #include /********************************************************************************/ void computBicubCoef( gdouble z[], gdouble dzdx[], gdouble dzdy[], gdouble d2zdxdy[], gdouble dx, gdouble dy, gdouble **c) { static gint Ainv[16][16]={ {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0}, {-3,0,0,3,0,0,0,0,-2,0,0,-1,0,0,0,0}, {2,0,0,-2,0,0,0,0,1,0,0,1,0,0,0,0}, {0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0}, {0,0,0,0,-3,0,0,3,0,0,0,0,-2,0,0,-1}, {0,0,0,0,2,0,0,-2,0,0,0,0,1,0,0,1}, {-3,3,0,0,-2,-1,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,-3,3,0,0,-2,-1,0,0}, {9,-9,9,-9,6,3,-3,-6,6,-6,-3,3,4,2,1,2}, {-6,6,-6,6,-4,-2,2,4,-3,3,3,-3,-2,-1,-1,-2}, {2,-2,0,0,1,1,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,2,-2,0,0,1,1,0,0}, {-6,6,-6,6,-3,-3,3,3,-4,4,2,-2,-2,-2,-1,-1}, {4,-4,4,-4,2,2,-2,-2,2,-2,-2,2,1,1,1,1} }; gint l,k,j,i; gdouble s,dxdy,c1D[16],x[16]; dxdy=dx*dy; for (i=0;i<4;i++) { x[i]=z[i]; x[i+4]=dzdx[i]*dx; x[i+8]=dzdy[i]*dy; x[i+12]=d2zdxdy[i]*dxdy; } for (i=0;i<16;i++) { s=0.0; for (k=0;k<16;k++) s += Ainv[i][k]*x[k]; c1D[i]=s; } l=0; for (i=0;i<4;i++) for (j=0;j<4;j++) c[i][j]=c1D[l++]; } /********************************************************************************/ void biCubicInterpolation( gdouble z[], gdouble dzdx[], gdouble dzdy[], gdouble d2zdxdy[], gdouble xl, gdouble xu, gdouble yl, gdouble yu, gdouble x, gdouble y, gdouble *pz, gdouble *pdzdx, gdouble *pdzdy, gdouble *pd2zdx2, gdouble *pd2zdy2, gdouble *pd2zdxdy ) { int i; gdouble t,u,dx,dy; static gdouble **c = NULL; if(!c) { c = g_malloc(4*sizeof(gdouble*)); for(i=0;i<4;i++) c[i] = g_malloc(4*sizeof(gdouble)); } if(!pz) return; dx=xu-xl; dy=yu-yl; computBicubCoef(z,dzdx,dzdy,d2zdxdy,dx,dy,c); if (xu == xl || yu == yl) { printf("xUpper == xLower or yUpper = yLower in biCubicInterpolation"); return; } t=(x-xl)/dx; u=(y-yl)/dy; *pz=0.0; if(pdzdx) *pdzdx=0.0; if(pdzdy) *pdzdy=0.0; for (i=3;i>=0;i--) { *pz=t*(*pz)+((c[i][3]*u+c[i][2])*u+c[i][1])*u+c[i][0]; if(pdzdy) *pdzdy=t*(*pdzdy)+(3.0*c[i][3]*u+2.0*c[i][2])*u+c[i][1]; if(pdzdx) *pdzdx=u*(*pdzdx)+(3.0*c[3][i]*t+2.0*c[2][i])*t+c[1][i]; } if(pdzdx) *pdzdx /= dx; if(pdzdx) *pdzdy /= dy; if(pd2zdx2) { *pd2zdx2 =0; gint i; gint j; for(i=2;i<=3;i++) for(j=0;j<=3;j++) *pd2zdx2 += c[i][j]*i*(i-1)*pow(t,i-2)*pow(u,j); *pd2zdx2 /= dx*dx; } if(pd2zdy2) { *pd2zdy2 =0; gint i; gint j; for(i=0;i<=3;i++) for(j=2;j<=3;j++) *pd2zdy2 += c[i][j]*j*(j-1)*pow(t,i)*pow(u,j-2); *pd2zdy2 /= dy*dy; } if(pd2zdxdy) { *pd2zdxdy =0; gint i; gint j; for(i=1;i<=3;i++) for(j=1;j<=3;j++) *pd2zdxdy += c[i][j]*i*j*pow(t,i-1)*pow(u,j-1); *pd2zdxdy /= dx*dy; } } GabeditSrc250/src/Utils/UtilsCairo.h0000644000175100017510000000452013130665225017612 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_UTILSCAIRO_H__ #define __GABEDIT_UTILSCAIRO_H__ void gabedit_cairo_string(cairo_t* cr, GtkWidget* parent, PangoFontDescription *font_desc, GdkGC* gc , gint x, gint y, G_CONST_RETURN gchar* str, gboolean centerX, gboolean centerY); void gabedit_cairo_triangle(cairo_t *cr, GtkWidget* parent, GdkGC* gc, gdouble x1,gdouble y1,gdouble x2,gdouble y2, gdouble x3,gdouble y3); void gabedit_cairo_line(cairo_t *cr, GtkWidget* parent, GdkGC* gc, gdouble x1,gdouble y1,gdouble x2,gdouble y2); void gabedit_cairo_arc(cairo_t *cr, GtkWidget* parent, GdkGC* gc, gint xc,gint yc,gint rayon, gdouble angle1, gdouble angle2 , gdouble scale1, gdouble scale2); void gabedit_cairo_cercle(cairo_t *cr, GtkWidget* parent, GdkGC* gc, gint xc,gint yc,gint rayon); void gabedit_cairo_line_gradient(cairo_t *cr, GtkWidget* parent, GdkGC* gc, GdkColor color1, GdkColor color2, gdouble x1,gdouble y1,gdouble x2,gdouble y2); void gabedit_cairo_cercle_gradient(cairo_t *cr, GtkWidget* parent, GdkGC* gc, gint xc,gint yc,gint rayon); #endif /* __GABEDIT_UTILSCAIRO_H__ */ GabeditSrc250/src/Utils/Matrix3D.c0000644000175100017510000000747613130665225017177 0ustar alloucheallouche/*Matrix3D.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "../Common/Global.h" #include "../Utils/Constants.h" /* Matrix 3x4 */ void ScalMat3D(gdouble** M, gdouble f) { gint i; gint j; for(i=0;i<3;i++) for(j=0;j<4;j++) M[i][j] *= f; } void ScalMat3D_3(gdouble** M, gdouble fx,gdouble fy, gdouble fz) { gint i; gint j; gdouble T[3] = { fx, fy, fz }; for(i=0;i<3;i++) for(j=0;j<4;j++) { M[i][j] *= T[i]; } } /** Translate the origin */ void TranslatMat3D(gdouble** M, gdouble x,gdouble y, gdouble z) { gdouble T[3] = { x, y, z }; gint i; for(i=0;i<3;i++) M[i][3] += T[i]; } /** rotate theta degrees about the y axis */ void RotMat3D(gdouble** M,gdouble theta,gint iaxe) { gdouble ct; gdouble st; gdouble N[3][4]; gint i; gint j; gint axes[2] = { 0, 2}; gdouble st2[2]; theta *= (PI / 180); ct = cos(theta); st = sin(theta); switch(iaxe) { case 0 : axes[0] = 1;axes[1] =2; break; case 1 : axes[0] = 0;axes[1] =2; break; case 2 : axes[0] = 1;axes[1] =0; break; } /* axes[0] = (iaxe + 2)%3; axes[1] = (iaxe + 1)%3; */ st2[0] = st; st2[1] =-st; for(i=0;i<2;i++) for(j=0;j<4;j++) N[axes[i]][j] = (gdouble)(M[axes[i]][j]*ct + M[axes[1-i]][j]*st2[i]); for(i=0;i<2;i++) for(j=0;j<4;j++) M[axes[i]][j] = N[axes[i]][j]; } /** Reinitialize to the unit matrix */ void UnitMat3D(gdouble** M) { gint i; gint j; for(i=0;i<3;i++) for(j=0;j<4;j++) M[i][j] = 0.0; for(i=0;i<3;i++) M[i][i] = 1.0; } void TransformMat3D(gdouble** M,gdouble** v, int nvert) { gint i; gint j; gdouble x; gdouble y; gdouble z; for (i = 0;i= 0;) { x = v[i][0] - lxo; y = v[i][1] - lyo; z = v[i][2] - lzo; v[i][0] = (x*(lyy*lzz-lyx*lzy)-y*(lxy*lzz-lxz*lzy)+z*(lxy*lyz-lxz*lyy))/d; v[i][1] = (-x*(lyx*lzz-lyx*lzy)+y*(lxx*lzz-lxz*lzx)-z*(lxx*lyz-lxz*lyx))/d; v[i][2] = (x*(lyx*lzy-lyy*lzx)-y*(lxx*lzy-lxy*lzx)+z*(lxx*lyy-lxy*lyx))/d; } } GabeditSrc250/src/Utils/GTF.h0000644000175100017510000000231613130665225016155 0ustar alloucheallouche#ifndef __GABEDIT_GTF_H__ #define __GABEDIT_GTF_H__ #include "TTables.h" gdouble normeGTF(GTF* p); void normaliseRadialGTF(GTF*p); void normaliseGTF(GTF*p); gdouble overlapGTF(GTF* p,GTF* q); gdouble overlap3GTF(GTF* p,GTF* q, GTF* r); gdouble overlap4GTF(GTF* p,GTF* q, GTF* r); gdouble GTFxyzGTF(GTF* p,GTF* q, gint ix, gint iy, gint iz); gdouble kineticGTF(GTF* left, GTF* right); gdouble ionicPotentialGTF(GTF* left, GTF* right,gdouble* C,gdouble Z); gdouble ERIGTF(GTF* p,GTF* q, GTF* r, GTF* s); gboolean CGTFEqCGTF(CGTF* t1,CGTF* t2); gdouble ERITABLES(gint i,gint j,gint k,gint l,gint ni,gint nj,gint nk,gint nl,TTABLES** Ttables); gdouble ERICTABLES(gint i,gint j,gint k,gint l, TTABLES** Ttables); gdouble ERICGTF(CGTF* p, CGTF* q, CGTF* r, CGTF*s); void normaliseCGTF(CGTF* left); gdouble overlapCGTF(CGTF* left, CGTF* right); gdouble overlap3CGTF(CGTF* left, CGTF* midle, CGTF* right); gdouble overlap4CGTF(CGTF* A,CGTF* B, CGTF* C, CGTF* D); gdouble CGTFxyzCGTF(CGTF* left, CGTF* right, gint ix, gint iy, gint iz); gdouble kineticCGTF(CGTF* left, CGTF* right); gdouble ionicPotentialCGTF(CGTF* left, CGTF* right, gdouble* C, gdouble Z); gdouble CGTFstarCGTF(CGTF* left, CGTF* right); #endif /* __GABEDIT_GTF_H__ */ GabeditSrc250/src/Utils/Interpolation.h0000644000175100017510000000341313130665225020363 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_INTERPOLATION_H__ #define __GABEDIT_INTERPOLATION_H__ void computBicubCoef( gdouble z[], gdouble dzdx[], gdouble dzdy[], gdouble d2zdxdy[], gdouble dx, gdouble dy, gdouble **c); void biCubicInterpolation( gdouble z[], gdouble dzdx[], gdouble dzdy[], gdouble d2zdxdy[], gdouble xl, gdouble xu, gdouble yl, gdouble yu, gdouble x, gdouble y, gdouble *pz, gdouble *pdzdx, gdouble *pdzdy, gdouble *pd2zdx2, gdouble *pd2zdy2, gdouble *pd2zdxdy ); #endif GabeditSrc250/src/Utils/UtilsVASP.h0000644000175100017510000000043613130665225017330 0ustar alloucheallouche #ifndef __GABEDIT_UTILSVASP_H__ #define __GABEDIT_UTILSVASP_H__ void read_bands_vasp_xml_file_dlg(); void read_dos_vasp_xml_file_dlg(); gint read_geometry_vasp_xml_file(gchar* fileName, gint numgeom, gchar** atomSymbols[], gdouble* positions[]); #endif /* __GABEDIT_UTILSVASP_H__ */ GabeditSrc250/src/Utils/UtilsCairo.c0000644000175100017510000003463113130665225017613 0ustar alloucheallouche/* UtilsCairo.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include #include #include #include /**********************************************************************************/ #define SCALE(i) (i / 65535.) /**********************************************************************************/ void gabedit_cairo_string(cairo_t* cr, GtkWidget* parent, PangoFontDescription *font_desc, GdkGC* gc , gint x, gint y, G_CONST_RETURN gchar* str, gboolean centerX, gboolean centerY) { int width = 0; int height = 0; PangoStyle style = pango_font_description_get_style(font_desc);; cairo_font_slant_t cairoStyle = CAIRO_FONT_SLANT_NORMAL; G_CONST_RETURN gchar *name = pango_font_description_get_family (font_desc); PangoWeight weight = pango_font_description_get_weight(font_desc); cairo_font_weight_t cairoWeight = PANGO_WEIGHT_NORMAL; gint fontSize = pango_font_description_get_size (font_desc)/PANGO_SCALE; GdkGCValues values; GdkColormap *colormap; GdkColor color; cairo_save (cr); /* stack-pen-size */ gdk_gc_get_values(gc, &values); colormap = gdk_drawable_get_colormap(parent->window); gdk_colormap_query_color(colormap, values.foreground.pixel,&color); switch(style) { case PANGO_STYLE_NORMAL: cairoStyle = CAIRO_FONT_SLANT_NORMAL;break; case PANGO_STYLE_OBLIQUE: cairoStyle = CAIRO_FONT_SLANT_OBLIQUE;break; case PANGO_STYLE_ITALIC : cairoStyle = CAIRO_FONT_SLANT_ITALIC;break; } switch(weight) { case PANGO_WEIGHT_THIN: case PANGO_WEIGHT_BOOK : case PANGO_WEIGHT_MEDIUM: case PANGO_WEIGHT_ULTRAHEAVY: case PANGO_WEIGHT_ULTRALIGHT: case PANGO_WEIGHT_LIGHT: case PANGO_WEIGHT_NORMAL: cairoWeight = PANGO_WEIGHT_NORMAL; break; case PANGO_WEIGHT_SEMIBOLD: case PANGO_WEIGHT_BOLD: case PANGO_WEIGHT_ULTRABOLD: case PANGO_WEIGHT_HEAVY: cairoWeight = CAIRO_FONT_WEIGHT_BOLD; } height = fontSize; width = fontSize*strlen(str); if(centerX) x -= width/4; if(centerY) y += height/4; cairo_select_font_face (cr, name, cairoStyle, cairoWeight); gdk_cairo_set_source_color (cr, &color); cairo_set_font_size (cr, fontSize); cairo_move_to (cr, x, y); cairo_show_text (cr, str); cairo_stroke (cr); cairo_restore (cr); /* stack-pen-size */ } /*****************************************************************************/ void gabedit_cairo_triangle(cairo_t *cr, GtkWidget* parent, GdkGC* gc, gdouble x1,gdouble y1,gdouble x2,gdouble y2, gdouble x3,gdouble y3) { GdkGCValues values; GdkColor color; double r,g,b; GdkColormap *colormap; double dashes[] = {5.0, /* ink */ 5.0, /* skip */ 10.0, /* ink */ 5.0 /* skip*/ }; int ndash = sizeof (dashes)/sizeof(dashes[0]); double offset = -5.0; if(!cr) return; if(!gc) return; cairo_save (cr); /* stack-pen-size */ gdk_gc_get_values(gc, &values); switch(values.cap_style) { case GDK_CAP_NOT_LAST: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; case GDK_CAP_BUTT: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; case GDK_CAP_ROUND: cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); break; case GDK_CAP_PROJECTING: cairo_set_line_cap(cr, CAIRO_LINE_CAP_SQUARE); break; default: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; } switch(values.join_style) { case GDK_JOIN_MITER: cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);break; case GDK_JOIN_ROUND : cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);break; case GDK_JOIN_BEVEL : cairo_set_line_join (cr, CAIRO_LINE_JOIN_BEVEL);break; default: cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);break; } switch(values.line_style) { case GDK_LINE_SOLID : ndash = 0; break; case GDK_LINE_ON_OFF_DASH : ndash = 2; break; case GDK_LINE_DOUBLE_DASH : break; default : ndash = 0; } colormap = gdk_drawable_get_colormap(parent->window); gdk_colormap_query_color(colormap, values.foreground.pixel,&color); if( ndash != 0) cairo_set_dash (cr, dashes, ndash, offset); r = SCALE(color.red); g = SCALE(color.green); b = SCALE(color.blue); cairo_set_line_width (cr, values.line_width); cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_rel_line_to (cr, x3,y3); cairo_rel_line_to (cr, x1,y1); cairo_close_path (cr); cairo_set_source_rgb (cr, r, g, b); cairo_fill_preserve (cr); cairo_set_source_rgb (cr, 0, 0, 0); cairo_stroke (cr); cairo_restore (cr); /* stack-pen-size */ } /*****************************************************************************/ void gabedit_cairo_line(cairo_t *cr, GtkWidget* parent, GdkGC* gc, gdouble x1,gdouble y1,gdouble x2,gdouble y2) { GdkGCValues values; GdkColor color; double r,g,b; GdkColormap *colormap; double dashes[] = {5.0, /* ink */ 5.0, /* skip */ 10.0, /* ink */ 5.0 /* skip*/ }; int ndash = sizeof (dashes)/sizeof(dashes[0]); double offset = -5.0; if(!cr) return; if(!gc) return; cairo_save (cr); /* stack-pen-size */ gdk_gc_get_values(gc, &values); switch(values.cap_style) { case GDK_CAP_NOT_LAST: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; case GDK_CAP_BUTT: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; case GDK_CAP_ROUND: cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); break; case GDK_CAP_PROJECTING: cairo_set_line_cap(cr, CAIRO_LINE_CAP_SQUARE); break; default: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; } switch(values.join_style) { case GDK_JOIN_MITER: cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);break; case GDK_JOIN_ROUND : cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);break; case GDK_JOIN_BEVEL : cairo_set_line_join (cr, CAIRO_LINE_JOIN_BEVEL);break; default: cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);break; } switch(values.line_style) { case GDK_LINE_SOLID : ndash = 0; break; case GDK_LINE_ON_OFF_DASH : ndash = 2; break; case GDK_LINE_DOUBLE_DASH : break; default : ndash = 0; } colormap = gdk_drawable_get_colormap(parent->window); gdk_colormap_query_color(colormap, values.foreground.pixel,&color); if( ndash != 0) cairo_set_dash (cr, dashes, ndash, offset); r = SCALE(color.red); g = SCALE(color.green); b = SCALE(color.blue); cairo_set_source_rgba (cr, r, g, b, 1.0); cairo_set_line_width (cr, values.line_width); cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_stroke (cr); cairo_restore (cr); /* stack-pen-size */ } /*****************************************************************************/ void gabedit_cairo_arc(cairo_t *cr, GtkWidget* parent, GdkGC* gc, gint xc,gint yc,gint rayon, gdouble angle1, gdouble angle2, gdouble scale1, gdouble scale2) { GdkGCValues values; GdkColor color; double r,g,b; GdkColormap *colormap; if(!cr) return; if(!gc) return; cairo_save (cr); /* stack-pen-size */ cairo_translate(cr,xc,yc); cairo_scale(cr,scale1,scale2); gdk_gc_get_values(gc, &values); switch(values.cap_style) { case GDK_CAP_NOT_LAST: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; case GDK_CAP_BUTT: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; case GDK_CAP_ROUND: cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); break; case GDK_CAP_PROJECTING: cairo_set_line_cap(cr, CAIRO_LINE_CAP_SQUARE); break; default: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; } switch(values.join_style) { case GDK_JOIN_MITER: cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);break; case GDK_JOIN_ROUND : cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);break; case GDK_JOIN_BEVEL : cairo_set_line_join (cr, CAIRO_LINE_JOIN_BEVEL);break; default: cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);break; } colormap = gdk_drawable_get_colormap(parent->window); gdk_colormap_query_color(colormap, values.foreground.pixel,&color); r = SCALE(color.red); g = SCALE(color.green); b = SCALE(color.blue); cairo_set_source_rgba (cr, r, g, b, 1.0); cairo_set_line_width (cr, values.line_width); cairo_arc (cr, 0, 0, rayon, angle1, angle2); /*if(values.fill==GDK_SOLID) cairo_fill (cr);*/ cairo_stroke (cr); cairo_restore (cr); /* stack-pen-size */ } /*****************************************************************************/ void gabedit_cairo_cercle(cairo_t *cr, GtkWidget* parent, GdkGC* gc, gint xc,gint yc,gint rayon) { GdkGCValues values; GdkColor color; double r,g,b; GdkColormap *colormap; if(!cr) return; if(!gc) return; cairo_save (cr); /* stack-pen-size */ gdk_gc_get_values(gc, &values); switch(values.cap_style) { case GDK_CAP_NOT_LAST: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; case GDK_CAP_BUTT: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; case GDK_CAP_ROUND: cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); break; case GDK_CAP_PROJECTING: cairo_set_line_cap(cr, CAIRO_LINE_CAP_SQUARE); break; default: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; } switch(values.join_style) { case GDK_JOIN_MITER: cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);break; case GDK_JOIN_ROUND : cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);break; case GDK_JOIN_BEVEL : cairo_set_line_join (cr, CAIRO_LINE_JOIN_BEVEL);break; default: cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);break; } colormap = gdk_drawable_get_colormap(parent->window); gdk_colormap_query_color(colormap, values.foreground.pixel,&color); r = SCALE(color.red); g = SCALE(color.green); b = SCALE(color.blue); cairo_set_source_rgba (cr, r, g, b, 1.0); cairo_set_line_width (cr, values.line_width); cairo_arc (cr, xc, yc, rayon, 0, 2 * M_PI); if(values.fill==GDK_SOLID) cairo_fill (cr); cairo_stroke (cr); cairo_restore (cr); /* stack-pen-size */ } /*****************************************************************************/ void gabedit_cairo_line_gradient(cairo_t *cr, GtkWidget* parent, GdkGC* gc, GdkColor color1, GdkColor color2, gdouble x1,gdouble y1,gdouble x2,gdouble y2) { GdkGCValues values; double r1,g1,b1; double r2,g2,b2; cairo_pattern_t *pat; if(!cr) return; if(!gc) return; cairo_save (cr); /* stack-pen-size */ gdk_gc_get_values(gc, &values); switch(values.cap_style) { case GDK_CAP_NOT_LAST: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; case GDK_CAP_BUTT: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; case GDK_CAP_ROUND: cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); break; case GDK_CAP_PROJECTING: cairo_set_line_cap(cr, CAIRO_LINE_CAP_SQUARE); break; default: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; } switch(values.join_style) { case GDK_JOIN_MITER: cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);break; case GDK_JOIN_ROUND : cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);break; case GDK_JOIN_BEVEL : cairo_set_line_join (cr, CAIRO_LINE_JOIN_BEVEL);break; default: cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);break; } r1 = SCALE(color1.red); g1 = SCALE(color1.green); b1 = SCALE(color1.blue); r2 = SCALE(color2.red); g2 = SCALE(color2.green); b2 = SCALE(color2.blue); pat = cairo_pattern_create_linear (x1,y1, x2,y2); cairo_pattern_add_color_stop_rgba (pat, 0, r1, g1, b1, 1); cairo_pattern_add_color_stop_rgba (pat, 0.5, r2, g2, b2, 1); cairo_set_source (cr, pat); cairo_set_line_width (cr, values.line_width); cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_stroke (cr); cairo_restore (cr); /* stack-pen-size */ cairo_pattern_destroy (pat); } /*****************************************************************************/ void gabedit_cairo_cercle_gradient(cairo_t *cr, GtkWidget* parent, GdkGC* gc, gint xc,gint yc,gint rayon) { GdkGCValues values; GdkColor color; double r,g,b; GdkColormap *colormap; cairo_pattern_t *pat; if(!cr) return; if(!gc) return; cairo_save (cr); /* stack-pen-size */ gdk_gc_get_values(gc, &values); switch(values.cap_style) { case GDK_CAP_NOT_LAST: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; case GDK_CAP_BUTT: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; case GDK_CAP_ROUND: cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); break; case GDK_CAP_PROJECTING: cairo_set_line_cap(cr, CAIRO_LINE_CAP_SQUARE); break; default: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; } switch(values.join_style) { case GDK_JOIN_MITER: cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);break; case GDK_JOIN_ROUND : cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);break; case GDK_JOIN_BEVEL : cairo_set_line_join (cr, CAIRO_LINE_JOIN_BEVEL);break; default: cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);break; } colormap = gdk_drawable_get_colormap(parent->window); gdk_colormap_query_color(colormap, values.foreground.pixel,&color); r = SCALE(color.red); g = SCALE(color.green); b = SCALE(color.blue); pat = cairo_pattern_create_radial (xc+rayon/2, yc, rayon/4, xc, yc, rayon); cairo_pattern_add_color_stop_rgba (pat, 0, 1, 1, 1, 1); cairo_pattern_add_color_stop_rgba (pat, 1, r, g, b, 1); cairo_set_source (cr, pat); cairo_set_line_width (cr, values.line_width); cairo_arc (cr, xc, yc, rayon, 0, 2 * M_PI); if(values.fill==GDK_SOLID) cairo_fill (cr); cairo_stroke (cr); cairo_restore (cr); /* stack-pen-size */ cairo_pattern_destroy (pat); } GabeditSrc250/src/Utils/GabeditContoursPlot.c0000644000175100017510000150045613130665225021474 0ustar alloucheallouche/* GabeditContoursPlot.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #define GETTEXT_PACKAGE "gabedit" #include #include #include #include #include #include #include #include #include #include #include #include #include "GabeditContoursPlot.h" #include "Interpolation.h" #define ContoursPLOT_DEFAULT_SIZE 300 #define BSIZE 1024 #define SCALE(i) (i / 65535.) #define SCALE2(i) (i * 65535.) typedef enum { JDX_TYPE_ContoursDATA, JDX_TYPE_ContoursPOINTS, JDX_TYPE_ContoursTABLE, JDX_TYPE_UNKNOWN } JDXType; /****************************************************************************************/ static void gabedit_contoursplot_cairo_string(cairo_t* cr, GtkWidget *widget, GdkGC* gc, gint x, gint y, G_CONST_RETURN gchar* str, gboolean centerX, gboolean centerY, gdouble angle); static void gabedit_contoursplot_cairo_line(cairo_t* cr, GtkWidget *widget, GdkGC* gc, gdouble x1,gdouble y1,gdouble x2,gdouble y2); static void gabedit_contoursplot_cairo_lines(cairo_t *cr, GtkWidget* widget, GdkGC* gc, GdkPoint* points, gint size); static void gabedit_contoursplot_cairo_rectangle(cairo_t* cr, GtkWidget *widget, GdkGC* gc, gboolean fill, gdouble x1,gdouble y1,gdouble w,gdouble h); /* static void gabedit_contoursplot_cairo_cercle(cairo_t* cr, GtkWidget *widget, GdkGC* gc, gint xc,gint yc,gint rayon);*/ static void contoursplot_cairo_string(GabeditContoursPlot *contoursplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, gint x, gint y, G_CONST_RETURN gchar* str, gboolean centerX, gboolean centerY, gdouble angle); static void contoursplot_cairo_image(GabeditContoursPlot *contoursplot, cairo_t* cr, GtkWidget *widget, gint x, gint y, gint w, gint h, cairo_surface_t *image); static void contoursplot_cairo_line(GabeditContoursPlot *contoursplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, gdouble x1,gdouble y1,gdouble x2,gdouble y2); static void contoursplot_cairo_lines(GabeditContoursPlot *contoursplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, GdkPoint* points, gint size); static void contoursplot_cairo_rectangle(GabeditContoursPlot *contoursplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, gboolean fill, gdouble x1,gdouble y1,gdouble w,gdouble h); /* static void contoursplot_cairo_cercle(GabeditContoursPlot *contoursplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, gint xc,gint yc,gint rayon);*/ static void gabedit_contoursplot_class_init (GabeditContoursPlotClass *klass); static void gabedit_contoursplot_init (GabeditContoursPlot *contoursplot); static void gabedit_contoursplot_destroy (GtkObject *object); static void gabedit_contoursplot_realize (GtkWidget *widget); static void gabedit_contoursplot_size_request (GtkWidget *widget, GtkRequisition *requisition); static void gabedit_contoursplot_size_allocate (GtkWidget *widget, GtkAllocation *allocation); static gint gabedit_contoursplot_expose (GtkWidget *widget, GdkEventExpose *event); static gint gabedit_contoursplot_button_press (GtkWidget *widget, GdkEventButton *event); static gint gabedit_contoursplot_button_release (GtkWidget *widget, GdkEventButton *event); static gint gabedit_contoursplot_motion_notify (GtkWidget *widget, GdkEventMotion *event); static gint gabedit_contoursplot_key_press(GtkWidget* widget, GdkEventKey *event); static gint gabedit_contoursplot_key_release(GtkWidget* widget, GdkEventKey *event); static gint gabedit_contoursplot_scroll (GtkWidget *widget, GdkEventScroll *event); static void gabedit_contoursplot_style_set (GtkWidget *widget, GtkStyle *previous_style); static gint gabedit_contoursplot_grab(GtkWidget* widget, GdkEventCrossing* event); static void gabedit_contoursplot_cairo_layout(cairo_t* cr, gdouble x, gdouble y, PangoLayout *layout, gboolean centerX, gboolean centerY, gdouble angle) ; static void contoursplot_enable_grids (GabeditContoursPlot *contoursplot, GabeditContoursPlotGrid grid, gboolean enable); static void contoursplot_show_colormap (GabeditContoursPlot *contoursplot, gboolean show); static void contoursplot_show_label_contours (GabeditContoursPlot *contoursplot, gboolean show); static void contoursplot_build_position_label_contours (GabeditContoursPlot *contoursplot); static void reset_label_contours(GtkWidget* contoursplot, ContoursPlotData* data); static void contoursplot_dashed_negative_contours (GabeditContoursPlot *contoursplot, gboolean dashed); static void contoursplot_show_left_legends (GabeditContoursPlot *contoursplot, gboolean show); static void contoursplot_show_right_legends (GabeditContoursPlot *contoursplot, gboolean show); static void contoursplot_show_top_legends (GabeditContoursPlot *contoursplot, gboolean show); static void contoursplot_show_bottom_legends (GabeditContoursPlot *contoursplot, gboolean show); static void contoursplot_reflect_x (GabeditContoursPlot *contoursplot, gboolean enable); static void contoursplot_reflect_y (GabeditContoursPlot *contoursplot, gboolean enable); static gint gabedit_contoursplot_draw (GtkWidget *widget); static void set_old_area(GtkWidget *widget, GabeditContoursPlot *contoursplot); /****************************************************************************************/ static GtkWidgetClass *parent_class = NULL; /* TO DELETE */ /****************************************************************************************/ static void contoursplot_calculate_sizes (GabeditContoursPlot *contoursplot); static void value2pixel(GabeditContoursPlot *contoursplot, gdouble xv, gdouble yv, gint *x, gint *y); static void pixel2value(GabeditContoursPlot *contoursplot, gint xp, gint yp, gdouble *x, gdouble *y); static void contoursplot_calculate_legends_sizes(GabeditContoursPlot *contoursplot); static void contoursplot_build_legends(GabeditContoursPlot *contoursplot); static void contoursplot_free_legends(GabeditContoursPlot *contoursplot); static void contoursplot_build_points_contour(GabeditContoursPlot *contoursplot, ContourData *contour); static void contoursplot_calculate_colormap_sizes(GabeditContoursPlot *contoursplot); static void contoursplot_build_colormap_legends(GabeditContoursPlot *contoursplot); static gint get_distance_M_AB(GabeditContoursPlot *contoursplot,gint xM, gint yM, gint ixA, gint iyA, gint ixB, gint iyB); static void saveAsGabeditDlg(GtkWidget* contoursplot); static void readAGabeditDlg(GtkWidget* contoursplot); static void reset_theme(GtkWidget *widget, gint line_width, GdkColor* foreColor, GdkColor* backColor ); static void set_theme_publication(GtkWidget *widget); static void set_theme_green_black(GtkWidget *widget); static void set_theme_dialog(GtkWidget* widget); static PangoLayout* get_pango_str(GabeditContoursPlot *contoursplot, G_CONST_RETURN gchar* txt); /****************************************************************************************/ static void uppercase(gchar *str) { while( *str != '\0') { if (isalpha((gint)*str)) if (islower((gint)*str)) *str = toupper((gint)*str); str ++; } } /****************************************************************************************/ static void contoursplot_message(gchar* message) { GtkWidget* dialog = NULL; dialog = gtk_message_dialog_new_with_markup (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "%s", message); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } /**********************************************************************************/ static void calc_arrow_vertexes( gdouble arrow_degrees, gdouble arrow_length, gdouble start_x, gdouble start_y, gdouble end_x, gdouble end_y, gdouble* x1, gdouble* y1, gdouble* x2, gdouble* y2 ) { gdouble angle = atan2 (end_y - start_y, end_x - start_x) + M_PI; arrow_degrees = arrow_degrees/180.0*M_PI; *x1 = end_x + arrow_length * cos(angle - arrow_degrees); *y1 = end_y + arrow_length * sin(angle - arrow_degrees); *x2 = end_x + arrow_length * cos(angle + arrow_degrees); *y2 = end_y + arrow_length * sin(angle + arrow_degrees); } /**********************************************************************************/ static void colormap_free(ColorMap* colorMap) { if(!colorMap) return; if(!colorMap->colorValue) { colorMap->numberOfColors = 0; return; } g_free(colorMap->colorValue); colorMap->numberOfColors = 0; } /******************************************************************************************************************************/ static void colormap_alloc(ColorMap* colorMap, gint numberOfColors) { if(colorMap->colorValue) colormap_free(colorMap); if(numberOfColors<1) numberOfColors = 1; colorMap->numberOfColors = numberOfColors; colorMap->colorValue = g_malloc(numberOfColors*sizeof(OneColorValue)); } /******************************************************************************************************************************/ static ColorMap new_colorMap(gdouble color[], gdouble value) { gint c; ColorMap colorMap = {0,NULL}; colormap_alloc(&colorMap, 1); for(c=0; c<3; c++) colorMap.colorValue[0].color[c] = color[c]; colorMap.colorValue[0].value = value; return colorMap; } /******************************************************************************************************************************/ static void add_to_colorMap(ColorMap* colorMap, gdouble color[], gdouble value) { gint i; gint c; OneColorValue* colorValue = NULL; colorValue = g_malloc((colorMap->numberOfColors+1)*sizeof(OneColorValue)); for(i=0; inumberOfColors; i++) colorValue[i] = colorMap->colorValue[i]; for(c=0;c<3;c++) colorValue[colorMap->numberOfColors].color[c] = color[c]; colorValue[colorMap->numberOfColors].value = value; g_free( colorMap->colorValue); colorMap->colorValue = colorValue; colorMap->numberOfColors++; } /******************************************************************************************************************************/ static void sort_colorMap(ColorMap* colorMap) { gint i; gint j; gint k; OneColorValue tmp; for(i=0;inumberOfColors-1;i++) { k = i; for(j=i+1;jnumberOfColors;j++) if(colorMap->colorValue[k].value>colorMap->colorValue[j].value) k = j; if(k != i) { tmp = colorMap->colorValue[i]; colorMap->colorValue[i] = colorMap->colorValue[k]; colorMap->colorValue[k] = tmp; } } } /******************************************************************************************************************************/ static ColorMap* new_colorMap_min_max_multicolor(gdouble minValue, gdouble maxValue) { gint i; gint j; gint k; gdouble h = 0; gint ns = 4; gint nc = 20; gint n = nc *ns+1; gdouble color[3]; ColorMap* colorMap; h = (maxValue-minValue)/(n-1) ; color[0] = 1.0; color[1] = 0.0; color[2] = 0.0; colorMap = g_malloc(sizeof(ColorMap)); *colorMap = new_colorMap(color, minValue); k = 1; for(j=0;jnumberOfColors<1) { for(c=0;c<3;c++) color[c] = 0.5; return; } if(value<=colorMap->colorValue[i].value) { for(c=0;c<3;c++) color[c] = colorMap->colorValue[i].color[c]; return; } i = colorMap->numberOfColors-1; if(value>=colorMap->colorValue[i].value) { for(c=0;c<3;c++) color[c] = colorMap->colorValue[i].color[c]; return; } k = 0; for(i=1;inumberOfColors-1;i++) { if(value>=colorMap->colorValue[i].value && value<=colorMap->colorValue[i+1].value) { k = i; break; } } l = colorMap->colorValue[k+1].value-colorMap->colorValue[k].value; l1 = value-colorMap->colorValue[k].value; l2 = l-l1; if(l>0 && l1>=0 && l2>=0) { l1 = l1/l; l2 = l2/l; for(c=0;c<3;c++) color[c] = colorMap->colorValue[k].color[c]*l2+colorMap->colorValue[k+1].color[c]*l1; } else for(c=0;c<3;c++) color[c] = colorMap->colorValue[k].color[c]; } /**********************************************************************************/ static void gabedit_contoursplot_cairo_image(cairo_t* cr, GtkWidget *widget, gint x, gint y, gint w, gint h, cairo_surface_t *image) { gint ow = 1; gint oh = 1; if(!image) return; if(x<0||y<0) return; /* printf("x = %d y = %d w = %d h = %d\n",x,y,w,h);*/ ow = cairo_image_surface_get_width (image); oh = cairo_image_surface_get_height (image); cairo_save (cr); cairo_translate (cr, x,y); cairo_scale (cr, (gdouble)w/ow, (gdouble)h/oh); cairo_set_source_surface (cr, image, 0, 0); cairo_paint (cr); cairo_stroke (cr); cairo_restore (cr); } /**********************************************************************************/ static void gabedit_contoursplot_cairo_string(cairo_t* cr, GtkWidget *widget, GdkGC* gc, gint x, gint y, G_CONST_RETURN gchar* str, gboolean centerX, gboolean centerY, gdouble angle) { PangoLayout* pango = get_pango_str(GABEDIT_ContoursPLOT(widget), str); gabedit_contoursplot_cairo_layout(cr, x, y, pango, centerX, centerY, angle) ; g_object_unref(G_OBJECT(pango)); } /*****************************************************************************/ static void gabedit_contoursplot_cairo_line(cairo_t *cr, GtkWidget* widget, GdkGC* gc, gdouble x1,gdouble y1,gdouble x2,gdouble y2) { GdkGCValues values; GdkColor color; double r,g,b; GdkColormap *colormap; double dashes[] = {5.0, /* ink */ 5.0, /* skip */ 10.0, /* ink */ 5.0 /* skip*/ }; int ndash = sizeof (dashes)/sizeof(dashes[0]); double offset = -5.0; if(!cr) return; if(!gc) return; cairo_save (cr); gdk_gc_get_values(gc, &values); switch(values.cap_style) { case GDK_CAP_NOT_LAST: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; case GDK_CAP_BUTT: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; case GDK_CAP_ROUND: cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); break; case GDK_CAP_PROJECTING: cairo_set_line_cap(cr, CAIRO_LINE_CAP_SQUARE); break; default: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; } switch(values.join_style) { case GDK_JOIN_MITER: cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);break; case GDK_JOIN_ROUND : cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);break; case GDK_JOIN_BEVEL : cairo_set_line_join (cr, CAIRO_LINE_JOIN_BEVEL);break; default: cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);break; } switch(values.line_style) { case GDK_LINE_SOLID : ndash = 0; break; case GDK_LINE_ON_OFF_DASH : ndash = 2; break; case GDK_LINE_DOUBLE_DASH : break; default : ndash = 0; } colormap = gdk_window_get_colormap(widget->window); gdk_colormap_query_color(colormap, values.foreground.pixel,&color); if( ndash != 0) cairo_set_dash (cr, dashes, ndash, offset); r = SCALE(color.red); g = SCALE(color.green); b = SCALE(color.blue); cairo_set_source_rgba (cr, r, g, b, 1.0); if(values.line_width<1) values.line_width = 1; cairo_set_line_width (cr, values.line_width); cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_stroke (cr); cairo_restore (cr); } /*****************************************************************************/ static void gabedit_contoursplot_cairo_lines(cairo_t *cr, GtkWidget* widget, GdkGC* gc, GdkPoint* points, gint size) { gint i; for(i=0;iwindow); gdk_colormap_query_color(colormap, values.foreground.pixel,&color); if( ndash != 0) cairo_set_dash (cr, dashes, ndash, offset); r = SCALE(color.red); g = SCALE(color.green); b = SCALE(color.blue); cairo_set_source_rgba (cr, r, g, b, 1.0); cairo_move_to (cr, x1, y1); cairo_rel_line_to (cr, w, 0); cairo_rel_line_to (cr, 0, h); cairo_rel_line_to (cr, -w, 0); cairo_close_path (cr); if(values.line_width<1) values.line_width = 1; if(fill) cairo_fill(cr); else cairo_set_line_width (cr, values.line_width); cairo_stroke (cr); cairo_restore (cr); } /*****************************************************************************/ /* static void gabedit_contoursplot_cairo_cercle(cairo_t *cr, GtkWidget* widget, GdkGC* gc, gint xc,gint yc,gint rayon) { GdkGCValues values; GdkColor color; double r,g,b; GdkColormap *colormap; if(!cr) return; if(!gc) return; cairo_save (cr); gdk_gc_get_values(gc, &values); switch(values.cap_style) { case GDK_CAP_NOT_LAST: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; case GDK_CAP_BUTT: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; case GDK_CAP_ROUND: cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); break; case GDK_CAP_PROJECTING: cairo_set_line_cap(cr, CAIRO_LINE_CAP_SQUARE); break; default: cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); break; } switch(values.join_style) { case GDK_JOIN_MITER: cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);break; case GDK_JOIN_ROUND : cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);break; case GDK_JOIN_BEVEL : cairo_set_line_join (cr, CAIRO_LINE_JOIN_BEVEL);break; default: cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);break; } colormap = gdk_window_get_colormap(widget->window); gdk_colormap_query_color(colormap, values.foreground.pixel,&color); r = SCALE(color.red); g = SCALE(color.green); b = SCALE(color.blue); cairo_set_source_rgba (cr, r, g, b, 1.0); if(values.line_width<1) values.line_width = 1; cairo_set_line_width (cr, values.line_width); cairo_arc (cr, xc, yc, rayon, 0, 2 * M_PI); if(values.fill==GDK_SOLID) cairo_fill (cr); cairo_stroke (cr); cairo_restore (cr); } */ /**********************************************************************************/ static void gabedit_contoursplot_cairo_layout(cairo_t* cr, gdouble x, gdouble y, PangoLayout *layout, gboolean centerX, gboolean centerY, gdouble angle) { cairo_save (cr); if(centerX || centerY) { gint w; gint h; pango_layout_get_size(layout,&w,&h); if(centerX) x-=w/2/PANGO_SCALE*cos(angle)-h/2/PANGO_SCALE*sin(angle); if(centerY) y-=w/2/PANGO_SCALE*sin(angle)+h/2/PANGO_SCALE*cos(angle); } cairo_move_to(cr, x,y); cairo_rotate(cr, angle); pango_cairo_show_layout(cr,layout); cairo_stroke (cr); cairo_restore (cr); } /****************************************************************************************/ static void contoursplot_cairo_image(GabeditContoursPlot *contoursplot, cairo_t* cr, GtkWidget *widget, gint x, gint y, gint w, gint h, cairo_surface_t *image) { gabedit_contoursplot_cairo_image(cr, widget, x, y, w, h, image); if(contoursplot->cairo_export) gabedit_contoursplot_cairo_image(contoursplot->cairo_export, widget, x, y, w, h, image); } /****************************************************************************************/ static void contoursplot_cairo_string(GabeditContoursPlot *contoursplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, gint x, gint y, G_CONST_RETURN gchar* str, gboolean centerX, gboolean centerY, gdouble angle) { gabedit_contoursplot_cairo_string(cr, widget, gc, x, y, str, centerX, centerY, angle); if(contoursplot->cairo_export) gabedit_contoursplot_cairo_string(contoursplot->cairo_export, widget, gc, x, y, str, centerX, centerY, angle); } /****************************************************************************************/ static void contoursplot_cairo_line(GabeditContoursPlot *contoursplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, gdouble x1,gdouble y1,gdouble x2,gdouble y2) { gabedit_contoursplot_cairo_line(cr, widget, gc, x1, y1, x2, y2); if(contoursplot->cairo_export) gabedit_contoursplot_cairo_line(contoursplot->cairo_export, widget, gc, x1, y1, x2, y2); } /****************************************************************************************/ static void contoursplot_cairo_rectangle(GabeditContoursPlot *contoursplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, gboolean fill, gdouble x1,gdouble y1,gdouble x2,gdouble y2) { gabedit_contoursplot_cairo_rectangle(cr, widget, gc, fill, x1, y1, x2, y2); if(contoursplot->cairo_export) gabedit_contoursplot_cairo_rectangle(contoursplot->cairo_export, widget, gc, fill, x1, y1, x2, y2); } /****************************************************************************************/ static void contoursplot_cairo_lines(GabeditContoursPlot *contoursplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, GdkPoint* points, gint size) { gabedit_contoursplot_cairo_lines(cr, widget, gc, points, 2); if(contoursplot->cairo_export && size>0) { GdkPoint* pointsScal = g_malloc(size*sizeof(GdkPoint)); gint i; if(!pointsScal) return; for(i=0;iplotting_rect.x; pointsScal[i].y = points[i].y + contoursplot->plotting_rect.y; } gabedit_contoursplot_cairo_lines(contoursplot->cairo_export, widget, gc, pointsScal, 2); if(pointsScal) g_free(pointsScal); } } /****************************************************************************************/ /* static void contoursplot_cairo_cercle(GabeditContoursPlot *contoursplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, gint xc,gint yc,gint rayon) { gabedit_contoursplot_cairo_cercle(cr, widget, gc, xc, yc, rayon); if(contoursplot->cairo_export) gabedit_contoursplot_cairo_cercle(contoursplot->cairo_export, widget, gc, xc, yc, rayon); } */ /****************************************************************************************/ static void contoursplot_cairo_layout(GabeditContoursPlot *contoursplot, cairo_t* cr, gdouble x, gdouble y, PangoLayout *layout, gboolean centerX, gboolean centerY, gdouble angle) { gabedit_contoursplot_cairo_layout(cr, x, y, layout, centerX, centerY, angle); if(contoursplot->cairo_export) { if(cr == contoursplot->cairo_area) { x += contoursplot->plotting_rect.x; y += contoursplot->plotting_rect.y; } gabedit_contoursplot_cairo_layout(contoursplot->cairo_export, x, y, layout, centerX, centerY, angle); } } /****************************************************************************************/ /* static void list_utf8() { gchar tmp[10000]; gchar t[10000]; GtkWidget* dialog = NULL; gint i=32; sprintf(tmp,"%d(&#%d;) ",i,i); for(i=9600;i<9700;i++) { sprintf(t,"%s",tmp); sprintf(tmp,"%s %d(&#%d;) ",t,i,i); } dialog = gtk_message_dialog_new_with_markup (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_YES_NO, tmp ); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } */ /****************************************************************************************/ static GtkWidget* get_parent_window(GtkWidget* widget) { GtkWidget* parent = NULL; GtkWidget* child = widget; do { parent = gtk_widget_get_parent(child); child = parent; } while( parent && !GTK_IS_WINDOW(parent)); return parent; } /****************************************************************************************/ static void destroy_contoursplot_window(GtkWidget* contoursplot) { GtkWidget* parentWindow; parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); if(parentWindow) gtk_object_destroy (GTK_OBJECT(parentWindow)); } /****************************************************************************************/ static void destroy_data_dialog(GtkWidget* win, GdkEvent *event, gpointer user_data) { gtk_object_destroy (GTK_OBJECT(win)); } /********************************************************************************/ static gboolean remove_all_data(GtkWidget* contoursplot, gint response_id) { if(response_id != GTK_RESPONSE_YES) return FALSE; if(!contoursplot) return FALSE; if(GABEDIT_ContoursPLOT(contoursplot)->data_list) { g_list_foreach(GABEDIT_ContoursPLOT(contoursplot)->data_list, (GFunc)g_free, NULL); g_list_free(GABEDIT_ContoursPLOT(contoursplot)->data_list); GABEDIT_ContoursPLOT(contoursplot)->data_list = NULL; } gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); return TRUE; } /********************************************************************************/ static void remove_all_data_dlg(GtkWidget* contoursplot) { GtkWidget* parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); GtkWidget* dialog = gtk_message_dialog_new (GTK_WINDOW(parentWindow), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("Are you sure to remove all data ?") ); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_NO); g_signal_connect_swapped(dialog, "response", G_CALLBACK (remove_all_data), contoursplot); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } /*****************************************************************************************/ static void file_chooser_set_filters(GtkFileChooser *fileChooser,gchar **patterns) { GtkFileFilter *filter; GtkFileFilter *filter0 = NULL; gint n = 0; g_return_if_fail (fileChooser != NULL); g_return_if_fail (GTK_IS_FILE_CHOOSER(fileChooser)); g_return_if_fail (patterns != NULL); while(patterns[n]) { filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, patterns[n]); gtk_file_filter_add_pattern (filter, patterns[n]); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (fileChooser), filter); if(n==0) filter0 = filter; n++; } if(filter0)gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (fileChooser), filter0); } /********************************************************************************/ static GtkWidget* new_file_chooser_open(GtkWidget* parentWindow, GCallback *func, gchar* title, gchar** patternsfiles) { GtkWidget* filesel = NULL; filesel = g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG, "action", GTK_FILE_CHOOSER_ACTION_OPEN, "file-system-backend", "gtk+", "select-multiple", FALSE, NULL); gtk_window_set_title (GTK_WINDOW (filesel), title); gtk_dialog_add_buttons (GTK_DIALOG (filesel), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response (GTK_DIALOG (filesel), GTK_RESPONSE_OK); if(parentWindow) gtk_window_set_transient_for(GTK_WINDOW(filesel),GTK_WINDOW(parentWindow)); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); g_signal_connect (filesel, "response", G_CALLBACK (func),GTK_OBJECT(filesel)); g_signal_connect_after (filesel, "response", G_CALLBACK (gtk_widget_destroy),GTK_OBJECT(filesel)); file_chooser_set_filters(GTK_FILE_CHOOSER(filesel),patternsfiles); gtk_widget_show(filesel); return filesel; } /********************************************************************************/ static GtkWidget* new_file_chooser_save(GtkWidget* parentWindow, GCallback *func, gchar* title, gchar** patternsfiles) { GtkWidget* filesel = NULL; filesel = g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG, "action", GTK_FILE_CHOOSER_ACTION_SAVE, "file-system-backend", "gtk+", "select-multiple", FALSE, NULL); gtk_window_set_title (GTK_WINDOW (filesel), title); gtk_dialog_add_buttons (GTK_DIALOG (filesel), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response (GTK_DIALOG (filesel), GTK_RESPONSE_OK); if(parentWindow) gtk_window_set_transient_for(GTK_WINDOW(filesel),GTK_WINDOW(parentWindow)); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); g_signal_connect (filesel, "response", G_CALLBACK (func),GTK_OBJECT(filesel)); g_signal_connect_after (filesel, "response", G_CALLBACK (gtk_widget_destroy),GTK_OBJECT(filesel)); file_chooser_set_filters(GTK_FILE_CHOOSER(filesel),patternsfiles); gtk_widget_show(filesel); return filesel; } /****************************************************************************************/ static void get_interpolatedValueData(ContoursPlotData* data, gdouble x, gdouble y, gdouble* zv, gdouble* pdzdx, gdouble* pdzdy, gdouble* pd2zdx2, gdouble* pd2zdy2, gdouble* pd2zdxdy) { gint xsize = data->xsize; gint ysize = data->ysize; gdouble dx = (data->xmax-data->xmin)/(xsize-1); gdouble dy = (data->ymax-data->ymin)/(ysize-1); gint ix = (gint)((x-data->xmin)/dx); gint iy = (gint)((y-data->ymin)/dy); gint ix1 = ix+1; gint iy1 = iy+1; gint ixp = (ix+1)%xsize; gint ixm = (ix-1+xsize)%xsize; gint ix1p = (ix1+1)%xsize; gint ix1m = (ix1-1+xsize)%xsize; gint iyp = (iy+1)%ysize; gint iym = (iy-1+ysize)%ysize; gint iy1p = (iy1+1)%ysize; gint iy1m = (iy1-1+ysize)%ysize; gdouble xl = data->xmin+ix*dx; gdouble xu = data->xmin+(ix+1)*dx; gdouble yl = data->ymin+iy*dy; gdouble yu = data->ymin+(iy+1)*dy; gdouble* zValues = data->zValues; gdouble z[4] = { zValues[ix*ysize+iy], zValues[ix1*ysize+iy], zValues[ix1*ysize+iy1], zValues[ix*ysize+iy1]}; gdouble dzdx[4] = { (zValues[ixp*ysize+iy] - zValues[ixm*ysize+iy])/dx/2, (zValues[ix1p*ysize+iy] - zValues[ix1m*ysize+iy])/dx/2, (zValues[ix1p*ysize+iy1] - zValues[ix1m*ysize+iy1])/dx/2, (zValues[ixp*ysize+iy1] - zValues[ixm*ysize+iy1])/dx/2 }; gdouble dzdy[4] = { (zValues[ix*ysize+iyp] - zValues[ix*ysize+iym])/dy/2, (zValues[ix1*ysize+iyp] - zValues[ix1*ysize+iym])/dy/2, (zValues[ix1*ysize+iy1p] - zValues[ix1*ysize+iy1m])/dy/2, (zValues[ix*ysize+iy1p] - zValues[ix*ysize+iy1m])/dy/2 }; gdouble d2zdxdy[4] = { (zValues[ixp*ysize+iyp] + zValues[ixm*ysize+iym]-zValues[ixp*ysize+iym]-zValues[ixm*ysize+iyp])/dx/dy/4, (zValues[ix1p*ysize+iyp] + zValues[ix1m*ysize+iym]-zValues[ix1p*ysize+iym]-zValues[ix1m*ysize+iyp])/dx/dy/4, (zValues[ix1p*ysize+iy1p] + zValues[ix1m*ysize+iy1m]-zValues[ix1p*ysize+iy1m]-zValues[ix1m*ysize+iy1p])/dx/dy/4, (zValues[ixp*ysize+iy1p] + zValues[ixm*ysize+iy1m]-zValues[ixp*ysize+iy1m]-zValues[ixm*ysize+iy1p])/dx/dy/4 }; *zv = 0; biCubicInterpolation( z, dzdx, dzdy, d2zdxdy, xl, xu, yl, yu, x, y, zv, pdzdx,pdzdy, pd2zdx2, pd2zdy2, pd2zdxdy); } /****************************************************************************************/ static void get_interpolatedValue(GtkWidget* contoursplot, ContoursPlotData* data, gdouble x, gdouble y, gdouble* zv, gdouble* pdzdx, gdouble* pdzdy, gdouble* pd2zdx2, gdouble* pd2zdy2, gdouble* pd2zdxdy) { if(!GABEDIT_ContoursPLOT(contoursplot)->colorsMap.colorMap) return; if(!zv) return; if(data) { get_interpolatedValueData(data, x, y, zv, pdzdx, pdzdy, pd2zdx2, pd2zdy2, pd2zdxdy); } else { GList *current_node; current_node=g_list_last(GABEDIT_ContoursPLOT(contoursplot)->data_list); data=(ContoursPlotData*)current_node->data; get_interpolatedValueData(data, x, y, zv, pdzdx, pdzdy, pd2zdx2, pd2zdy2, pd2zdxdy); } } /****************************************************************************************/ static void reset_contour_lines_styles(GtkWidget* contoursplot, ContoursPlotData* data) { gint loop; if(!GABEDIT_ContoursPLOT(contoursplot)->colorsMap.colorMap) return; if(data) { for(loop=0;loopnContours; loop++) { gdouble value = data->contours[loop].value; data->contours[loop].line_style = GDK_LINE_SOLID; if(GABEDIT_ContoursPLOT(contoursplot)->dashed_negative_contours && value<0) data->contours[loop].line_style = GDK_LINE_ON_OFF_DASH; } } else { GList *current_node; current_node=g_list_first(GABEDIT_ContoursPLOT(contoursplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(ContoursPlotData*)current_node->data; for(loop=0;loopnContours; loop++) { gdouble value = data->contours[loop].value; data->contours[loop].line_style = GDK_LINE_SOLID; if(GABEDIT_ContoursPLOT(contoursplot)->dashed_negative_contours && value<0) data->contours[loop].line_style = GDK_LINE_ON_OFF_DASH; } } } gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ static void reset_contour_colors(GtkWidget* contoursplot, ContoursPlotData* data) { gint loop; if(!GABEDIT_ContoursPLOT(contoursplot)->colorsMap.colorMap) return; if(data) { for(loop=0;loopnContours; loop++) { gdouble value = data->contours[loop].value; gdouble color[3]; set_Color_From_colorMap(GABEDIT_ContoursPLOT(contoursplot)->colorsMap.colorMap, color, value); data->contours[loop].line_color.red=(gushort)(color[0]*65535); data->contours[loop].line_color.green=(gushort)(color[1]*65535); data->contours[loop].line_color.blue=(gushort)(color[2]*65535); } } else { GList *current_node; current_node=g_list_first(GABEDIT_ContoursPLOT(contoursplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(ContoursPlotData*)current_node->data; for(loop=0;loopnContours; loop++) { gdouble value = data->contours[loop].value; gdouble color[3]; set_Color_From_colorMap(GABEDIT_ContoursPLOT(contoursplot)->colorsMap.colorMap, color, value); data->contours[loop].line_color.red=(gushort)(color[0]*65535); data->contours[loop].line_color.green=(gushort)(color[1]*65535); data->contours[loop].line_color.blue=(gushort)(color[2]*65535); } } } gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ static void contoursplot_build_points_contour(GabeditContoursPlot *contoursplot, ContourData *contour) { GtkWidget *widget; if (contoursplot == NULL) return; if(contoursplot->data_list == NULL) return; widget=GTK_WIDGET(contoursplot); if(contour->point_pango != NULL) g_object_unref(G_OBJECT(contour->point_pango)); contour->point_pango = gtk_widget_create_pango_layout (widget, contour->point_str); if(contour->point_pango) { PangoRectangle logical_rect; pango_layout_set_justify(contour->point_pango,TRUE); pango_layout_set_alignment(contour->point_pango,PANGO_ALIGN_CENTER); pango_layout_set_alignment(contour->point_pango,PANGO_ALIGN_LEFT); pango_layout_set_markup(contour->point_pango, contour->point_str, -1); gchar fontName[100]; PangoAttrList *attr_list; PangoFontDescription *font_desc = NULL; sprintf(fontName,"sans %d",2+contour->point_size*2); font_desc = pango_font_description_from_string (fontName); pango_layout_set_font_description (contour->point_pango, font_desc); pango_layout_context_changed(contour->point_pango); pango_layout_get_pixel_extents(contour->point_pango, NULL, &logical_rect); pango_layout_get_size(contour->point_pango, &(contour->point_width), &(contour->point_height)); contour->point_width/=PANGO_SCALE; contour->point_height/=PANGO_SCALE; /* printf("%d %d\n",logical_rect.x,logical_rect.y);*/ contour->point_width =logical_rect.width; contour->point_height =logical_rect.height; pango_font_description_free (font_desc); /* set color */ attr_list = pango_layout_get_attributes (contour->point_pango); if (attr_list == NULL) attr_list = pango_attr_list_new (); else pango_attr_list_ref (attr_list); pango_attr_list_insert(attr_list, pango_attr_foreground_new( contour->point_color.red, contour->point_color.green, contour->point_color.blue) ); pango_layout_set_attributes (contour->point_pango, attr_list); pango_attr_list_unref (attr_list); } } /**************************************************************/ static void getzMinzMax(GtkWidget* contoursplot, ContoursPlotData* data, gdouble* zmin, gdouble* zmax) { *zmin = 0; *zmax = 0; if(data) { *zmin=data->zmin; *zmax=data->zmax; } if(contoursplot && GABEDIT_ContoursPLOT(contoursplot)->data_list) { gint ib = 0; GList *current_node; current_node=g_list_last(GABEDIT_ContoursPLOT(contoursplot)->data_list); if(current_node) { ContoursPlotData* data = (ContoursPlotData*)current_node->data; if(ib==0) { *zmin=data->zmin; *zmax=data->zmax; } else { ib = 1; if(*zmin>data->zmin) *zmin=data->zmin; if(*zmaxzmax) *zmax=data->zmax; } } } } /**************************************************************/ static void get_one_point(gdouble v1, gdouble v2, gdouble x1, gdouble y1, gdouble x2, gdouble y2, gdouble* x, gdouble* y) { gdouble u1 = x1; gdouble u2 = x2; if(v1==0) *x = u1; else *x = u1 - v1 *(u2-u1)/(v2-v1); u1 = y1; u2 = y2; if(v1==0) *y = u1; else *y = u1 - v1 *(u2-u1)/(v2-v1); } /**************************************************************/ static gdouble get_1r2(gdouble x1, gdouble y1, gdouble x2, gdouble y2) { gdouble r2 = (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1); if(r2<1e-14) return 1e14; return 1/r2; } /**************************************************************/ ContourData get_contour_point(GtkWidget* contoursplot, ContoursPlotData *data, gdouble value) { gint i; gint j; gint k; gdouble v1; gdouble v2; gint ix=0,iy=0; gint ix1=0,iy1=0; gint ix2=0,iy2=0; gint ix3=0,iy3=0; gint ix4=0,iy4=0; gdouble x1,x2,y1,y2,x,y; gdouble dx, dy; gdouble xmin,xmax,ymin,ymax; gint xsize,ysize; gdouble* zValues; ContourData contour; gint red = rand()%60000; gint green = rand()%60000; gint blue = rand()%60000; gdouble color[3]; contour.value = value; contour.size = 0; contour.x = NULL; contour.y = NULL; contour.index = NULL; xmin = data->xmin; xmax = data->xmax; ymin = data->ymin; ymax = data->ymax; xsize = data->xsize; ysize = data->ysize; dx = (xmax-xmin)/(xsize-1); dy = (ymax-ymin)/(ysize-1); zValues = data->zValues; for( i = 0; icolorsMap.colorMap) { set_Color_From_colorMap(GABEDIT_ContoursPLOT(contoursplot)->colorsMap.colorMap, color, value); contour.line_color.red=(gushort)(color[0]*65535); contour.line_color.green=(gushort)(color[1]*65535); contour.line_color.blue=(gushort)(color[2]*65535); } contour.line_style=GDK_LINE_SOLID; if(GABEDIT_ContoursPLOT(contoursplot)->dashed_negative_contours && value<0) contour.line_style = GDK_LINE_ON_OFF_DASH; contour.label = g_malloc( (sizeof(gchar) * (GABEDIT_ContoursPLOT(contoursplot)->x_legends_digits+1))); snprintf(contour.label, GABEDIT_ContoursPLOT(contoursplot)->x_legends_digits+1, "%lf", value); contour.label[GABEDIT_ContoursPLOT(contoursplot)->x_legends_digits]='\0'; contour.xlabel = 0; contour.ylabel = 0; if(contour.size>0) { gint i = 0; gdouble vmin = get_1r2(contour.x[i],contour.y[i],xmin,ymin) +get_1r2(contour.x[i],contour.y[i],xmin,ymax) +get_1r2(contour.x[i],contour.y[i],xmax,ymin) +get_1r2(contour.x[i],contour.y[i],xmax,ymax); contour.xlabel = contour.x[0]; contour.ylabel = contour.y[0]; for(i=1;icontours[n].size<1) return; data->contours[n].xlabel = data->contours[n].x[0]; data->contours[n].ylabel = data->contours[n].y[0]; xmin = data->xmin; xmax = data->xmax; ymin = data->ymin; ymax = data->ymax; dx = (xmax-xmin)/(N-1); dy = (ymax-ymin)/(N-1); i = 0; vmin = 0; for(k=0;kcontours[n].x[i],data->contours[n].y[i],x,y); y = ymax; vmin += get_1r2(data->contours[n].x[i],data->contours[n].y[i],x,y); x = xmin; y = ymin + dy*k; vmin += get_1r2(data->contours[n].x[i],data->contours[n].y[i],x,y); x = xmax; y = ymin + dy*k; vmin += get_1r2(data->contours[n].x[i],data->contours[n].y[i],x,y); } for(j=0;jcontours[n].x[i],data->contours[n].y[i], data->contours[j].xlabel,data->contours[j].ylabel); } data->contours[n].xlabel = data->contours[n].x[0]; data->contours[n].ylabel = data->contours[n].y[0]; for(i=1;icontours[n].size;i++) { gdouble v = 0; for(k=0;kcontours[n].x[i],data->contours[n].y[i],x,y); y = ymax; v += get_1r2(data->contours[n].x[i],data->contours[n].y[i],x,y); x = xmin; y = ymin + dy*k; v += get_1r2(data->contours[n].x[i],data->contours[n].y[i],x,y); x = xmax; y = ymin + dy*k; v += get_1r2(data->contours[n].x[i],data->contours[n].y[i],x,y); } for(j=0;jcontours[n].x[i],data->contours[n].y[i], data->contours[j].xlabel,data->contours[j].ylabel); if(vcontours[n].xlabel = data->contours[n].x[i]; data->contours[n].ylabel = data->contours[n].y[i]; vmin = v; } } } /****************************************************************************************/ static void reset_label_contours(GtkWidget* contoursplot, ContoursPlotData* data) { gint n; if(!GABEDIT_ContoursPLOT(contoursplot)->colorsMap.colorMap) return; if(data) { for(n=0;nnContours; n++) set_label_one_contour(data, n); } else { GList *current_node; current_node=g_list_first(GABEDIT_ContoursPLOT(contoursplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(ContoursPlotData*)current_node->data; for(n=0;nnContours; n++) set_label_one_contour(data, n); } } } /**************************************************************/ static void free_one_contour(ContourData* contour) { if(contour->x) g_free(contour->x); if(contour->y) g_free(contour->y); if(contour->index) g_free(contour->index); if(contour->point_pango) g_object_unref(G_OBJECT(contour->point_pango)); contour->x = NULL; contour->y = NULL; contour->index = NULL; contour->point_pango = NULL; } /**************************************************************/ static void add_one_contour(GtkWidget* contoursplot, ContoursPlotData *data, gdouble value) { ContourData contour; if(!data) return; contour = get_contour_point(contoursplot, data, value); if(contour.size<1) return; data->nContours++; data->contours = g_realloc(data->contours,data->nContours*sizeof(ContourData)); data->contours[data->nContours-1] = contour; } /**********************************************/ static void delete_last_spaces(gchar* str) { gchar *s; if(str == NULL) return; if (!*str) return; for (s = str + strlen (str) - 1; s >= str && isspace ((guchar)*s); s--) *s = '\0'; } /**********************************************/ static void delete_first_spaces(gchar* str) { gchar *start; gint i; gint lenSpace = 0; if(str == NULL) return; if (!*str) return; for (start = str; *start && isspace (*start); start++)lenSpace++; for(i=0;i<(gint)(strlen(str)-lenSpace);i++) str[i] = str[i+lenSpace]; str[strlen(str)-lenSpace] = '\0'; } /**********************************************/ /* static void delete_all_spaces(gchar* str) { gint i; gint j; gboolean Ok = FALSE; delete_last_spaces(str); delete_first_spaces(str); while(!Ok) { Ok = TRUE; for(i=0;i<(gint)strlen(str);i++) { if(isspace(str[i])) { Ok = FALSE; for(j=i;j<(gint)strlen(str);j++) { str[j] = str[j+1]; } break; } } } } */ /*************************************************************************************/ static gboolean testascii(char c) { switch ( c ) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '.': case 'e': case 'E': case '+': case '-':return TRUE; } return FALSE; } /*************************************************************************************/ static gboolean this_is_a_real(gchar *t) { gint i; for(i=0;icolorsMap.colorMap) return; if(data) { for(loop=0;loopnContours; loop++) free_one_contour(&data->contours[loop]); if(data->contours) g_free(data->contours); data->nContours = 0; data->contours = NULL; } else { GList *current_node; current_node=g_list_first(GABEDIT_ContoursPLOT(contoursplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(ContoursPlotData*)current_node->data; for(loop=0;loopnContours; loop++) free_one_contour(&data->contours[loop]); if(data->contours) g_free(data->contours); data->nContours = 0; data->contours = NULL; } } gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /********************************************************************************/ static void Message(gchar* message, gchar* title) { GtkWidget* dialog = NULL; if(!message) return; if(!title) return; if(strstr(title,"Error")) dialog = gtk_message_dialog_new_with_markup (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s", message); else dialog = gtk_message_dialog_new_with_markup (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "%s", message); if(dialog) { gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } } /********************************************************************************/ static gboolean get_a_float(GtkWidget* Entry,gdouble* value, gchar* errorMessage) { G_CONST_RETURN gchar* temp; gchar* t = NULL; temp = gtk_entry_get_text(GTK_ENTRY(Entry)); if(temp&& strlen(temp)>0) { t = g_strdup(temp); delete_first_spaces(t); delete_last_spaces(t); } else { Message(errorMessage,"Error"); return FALSE; } if(t && !this_is_a_real(t)) { Message(errorMessage,"Error"); g_free(t); return FALSE; } if(t) g_free(t); *value = atof(temp); return TRUE; } /********************************************************************************/ static void add_widget_table(GtkWidget *Table,GtkWidget *wid,gushort line,gushort colonne) { gtk_table_attach(GTK_TABLE(Table),wid,colonne,colonne+1,line,line+1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 3,3); } /********************************************************************************/ static GtkWidget *add_label_at_table(GtkWidget *Table,gchar *label,gushort line,gushort colonne,GtkJustification just) { GtkWidget *Label; GtkWidget *hbox = gtk_hbox_new(0,FALSE); Label = gtk_label_new (label); gtk_label_set_justify(GTK_LABEL(Label),just); if(just ==GTK_JUSTIFY_CENTER) gtk_box_pack_start (GTK_BOX (hbox), Label, TRUE, TRUE, 0); else gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 0); add_widget_table(Table,hbox,line,colonne); return Label; } /********************************************************************************/ static void apply_contours(GtkWidget *window,gpointer data) { GtkWidget* entryNumber =(GtkWidget*)g_object_get_data(G_OBJECT (window), "EntryNumber"); GtkWidget* entryMin =(GtkWidget*)g_object_get_data(G_OBJECT (window), "EntryMin"); GtkWidget* entryMax =(GtkWidget*)g_object_get_data(G_OBJECT (window), "EntryMax"); GtkWidget* linearButton =(GtkWidget*)g_object_get_data(G_OBJECT (window), "LinearButton"); GtkWidget* contoursplot = (GtkWidget* )g_object_get_data(G_OBJECT (window), "ContoursPlot"); G_CONST_RETURN gchar* temp; gint i; gint N; gdouble min; gdouble max; gdouble* values = NULL; gdouble step = 0; temp = gtk_entry_get_text(GTK_ENTRY(entryNumber)); N = atoi(temp); if(N<=0) { Message(_("Error : The number of points should be a positive integer. "),_("Error")); return; } if(!get_a_float(entryMin,&min,_("Error : The minimal value should be float.") )) return; if(!get_a_float(entryMax,&max,_("Error : The maximal value should be float."))) return; if( max<=min) { Message(_("Error : The minimal value should be smaller than the maximal value "),_("Error")); return; } values = g_malloc(N*sizeof(gdouble)); if(GTK_TOGGLE_BUTTON (linearButton)->active) { step = (max-min)/(N-1); for(i=0;idata_list) { GList *current_node; current_node=g_list_last(GABEDIT_ContoursPLOT(contoursplot)->data_list); if(current_node) { ContoursPlotData* data = (ContoursPlotData*)current_node->data; gint i; for(i=0;idata_list == NULL) { Message(_("No data available :\n You should read a file"),_("Error")); return; } g_return_if_fail (GABEDIT_ContoursPLOT(contoursplot)->data_list != NULL); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window),_("Create contours")); gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (window), 5); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)contoursplot); vboxall=gtk_vbox_new(FALSE, 0); gtk_container_add (GTK_CONTAINER (window), vboxall); vboxwin = vboxall; frame = create_contours_frame(contoursplot, window,vboxall,_("Contours"), data); g_object_set_data(G_OBJECT (window), "ContoursPlot",contoursplot); /* buttons box */ hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vboxwin), hbox, TRUE, FALSE, 2); gtk_widget_realize(window); button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(window)); gtk_widget_show (button); button = gtk_button_new_from_stock(GTK_STOCK_OK); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_contours,GTK_OBJECT(window)); /* Show all */ gtk_widget_show_all (window); } /************************************************************************************************************/ static void reset_color_map_min_max(GtkWidget* contoursplot,gdouble min, gdouble max) { ColorMap* newColorMap = NULL; newColorMap = new_colorMap_min_max(min, max, GABEDIT_ContoursPLOT(contoursplot)->colorsMap.type, GABEDIT_ContoursPLOT(contoursplot)->colorsMap.colors); colormap_free(GABEDIT_ContoursPLOT(contoursplot)->colorsMap.colorMap); g_free(GABEDIT_ContoursPLOT(contoursplot)->colorsMap.colorMap); GABEDIT_ContoursPLOT(contoursplot)->colorsMap.colorMap = newColorMap; contoursplot_build_colormap_legends(GABEDIT_ContoursPLOT(contoursplot)); } /************************************************************************************************************/ static void reset_color_map(GtkWidget* contoursplot, ContoursPlotData *data) { if(!data && GABEDIT_ContoursPLOT(contoursplot)->data_list) { GList *current_node; current_node=g_list_last(GABEDIT_ContoursPLOT(contoursplot)->data_list); if(current_node) data = (ContoursPlotData*)current_node->data; } if(!data) return; reset_color_map_min_max(contoursplot, data->zmin, data->zmax); } /********************************************************************************/ static void add_new_data(GtkWidget* contoursplot, gint xsize, gdouble xmin, gdouble xmax, gint ysize, gdouble ymin, gdouble ymax, gdouble* zValues) { if(xsize>0 && ysize>0) { gint loop; ContoursPlotData *data = g_malloc(sizeof(ContoursPlotData)); data->xsize=xsize; data->xmin=xmin; data->xmax=xmax; data->ysize=xsize; data->ymin=ymin; data->ymax=ymax; data->nContours=0; data->contours=NULL; data->zValues = g_malloc(xsize*ysize*sizeof(gdouble)); data->zmin=zValues[0]; data->zmax=zValues[0]; for(loop = 0; loopxsize*data->ysize;loop++) { data->zValues[loop] = zValues[loop]; if(data->zmin>zValues[loop]) data->zmin=zValues[loop]; if(data->zmaxzmax=zValues[loop]; } gabedit_contoursplot_add_data (GABEDIT_ContoursPLOT(contoursplot), data); gabedit_contoursplot_set_autorange(GABEDIT_ContoursPLOT(contoursplot), NULL); reset_color_map(contoursplot, data); } } /****************************************************************************************/ static void set_object_text_pixels(GabeditContoursPlot *contoursplot, ContoursPlotObjectText* objectText) { if(!objectText) return; value2pixel(contoursplot, objectText->x,objectText->y, &objectText->xi, &objectText->yi); objectText->yi=contoursplot->plotting_rect.height-objectText->yi; pango_layout_get_size(objectText->pango, &objectText->width, &objectText->height); objectText->width/=PANGO_SCALE; objectText->height/=PANGO_SCALE; /* objectText->yi -= objectText->height/2;*/ objectText->xi += contoursplot->plotting_rect.x; objectText->yi += contoursplot->plotting_rect.y; } /****************************************************************************************/ static PangoLayout* get_pango_str(GabeditContoursPlot *contoursplot, G_CONST_RETURN gchar* txt) { gchar *str = NULL; GdkGCValues values; GdkColormap *colormap; GdkColor color; gchar* rgb = NULL; PangoLayout* pango; if(!txt) return NULL; pango = gtk_widget_create_pango_layout (GTK_WIDGET(contoursplot), txt); pango_layout_set_alignment(pango,PANGO_ALIGN_LEFT); gdk_gc_get_values(contoursplot->fore_gc, &values); colormap = gdk_window_get_colormap(GTK_WIDGET(contoursplot)->window); gdk_colormap_query_color(colormap, values.foreground.pixel,&color); rgb = g_strdup_printf("#%02x%02x%02x", color.red >> 8, color.green >> 8, color.blue >> 8); str = g_strconcat("",txt, "", NULL); pango_layout_set_markup(pango, str, -1); g_free(str); return pango; } /****************************************************************************************/ static void set_object_text_pango(GabeditContoursPlot *contoursplot, ContoursPlotObjectText* objectText) { if(!objectText) return; objectText->pango = get_pango_str(contoursplot, objectText->str); } /****************************************************************************************/ static void set_object_text(GabeditContoursPlot *contoursplot, ContoursPlotObjectText* objectText, gdouble x, gdouble y, gdouble angle, G_CONST_RETURN gchar* str) { if(!str) return; objectText->x = x; objectText->y = y; objectText->angle = angle; objectText->str = g_strdup(str); set_object_text_pango(contoursplot, objectText); set_object_text_pixels(contoursplot, objectText); } /****************************************************************************************/ static void add_object_text(GabeditContoursPlot *contoursplot, gdouble x, gdouble y, gdouble angle, G_CONST_RETURN gchar* str) { gint i; if(!str) return; contoursplot->nObjectsText++; if(contoursplot->nObjectsText==1) contoursplot->objectsText = g_malloc(sizeof(ContoursPlotObjectText)); else contoursplot->objectsText = g_realloc(contoursplot->objectsText,contoursplot->nObjectsText*sizeof(ContoursPlotObjectText)); i = contoursplot->nObjectsText-1; set_object_text(contoursplot, &contoursplot->objectsText[i], x, y, angle, str); } /****************************************************************************************/ static void reset_object_text_pixels(GabeditContoursPlot *contoursplot) { gint i; if(!contoursplot) return; for(i=0;inObjectsText;i++) set_object_text_pixels(contoursplot, &contoursplot->objectsText[i]); } /****************************************************************************************/ static void reset_object_text_pango(GabeditContoursPlot *contoursplot) { gint i; if(!contoursplot) return; for(i=0;inObjectsText;i++) set_object_text_pango(contoursplot, &contoursplot->objectsText[i]); } /****************************************************************************************/ static gint get_object_text_num(GabeditContoursPlot *contoursplot, gint xi, gint yi) { gint i; gint x,y; if(!contoursplot) return -1; for(i=0;inObjectsText;i++) { gdouble cosa = cos(contoursplot->objectsText[i].angle); gdouble sina = sin(contoursplot->objectsText[i].angle); gdouble xx = xi-contoursplot->objectsText[i].xi; gdouble yy = yi-contoursplot->objectsText[i].yi; x = contoursplot->objectsText[i].xi+xx*cosa-yy*sina; y = contoursplot->objectsText[i].yi+xx*sina+yy*cosa; if(x>=contoursplot->objectsText[i].xi && y>=contoursplot->objectsText[i].yi && x<=contoursplot->objectsText[i].xi+contoursplot->objectsText[i].width && y<=contoursplot->objectsText[i].yi+contoursplot->objectsText[i].height) return i; } return -1; } /****************************************************************************************/ static void delete_object_text(GtkWidget *widget, gint i) { gint j; GabeditContoursPlot *contoursplot = NULL; if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; contoursplot = GABEDIT_ContoursPLOT(widget); if(i<0||i>=contoursplot->nObjectsText) return; if(contoursplot->objectsText[i].str) g_free(contoursplot->objectsText[i].str); if(contoursplot->objectsText[i].pango) g_object_unref(G_OBJECT(contoursplot->objectsText[i].pango)); for(j=i;jnObjectsText-1;j++) contoursplot->objectsText[j] = contoursplot->objectsText[j+1]; contoursplot->nObjectsText--; if(contoursplot->nObjectsText<1) { contoursplot->nObjectsText = 0; if(contoursplot->objectsText) g_free(contoursplot->objectsText); contoursplot->objectsText = NULL; } else { contoursplot->objectsText = g_realloc(contoursplot->objectsText,contoursplot->nObjectsText*sizeof(ContoursPlotObjectText)); } } /****************************************************************************************/ static void delete_objects_text(GtkWidget *widget) { GabeditContoursPlot *contoursplot = NULL; gint i; if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; contoursplot = GABEDIT_ContoursPLOT(widget); for(i=0;inObjectsText;i++) { if(contoursplot->objectsText[i].str) g_free(contoursplot->objectsText[i].str); if(contoursplot->objectsText[i].pango) g_object_unref(G_OBJECT(contoursplot->objectsText[i].pango)); } contoursplot->nObjectsText = 0; if(contoursplot->objectsText) g_free(contoursplot->objectsText); contoursplot->objectsText = NULL; gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /********************************************************************************/ static void activate_entry_object_text(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* tlabel; G_CONST_RETURN gchar* tangle; GtkWidget* contoursplot = NULL; GtkWidget* window = NULL; GtkWidget* entry_label = NULL; GtkWidget* entry_angle = NULL; ContoursPlotObjectText* objectText = NULL; if(!entry) return; if(!GTK_IS_WIDGET(entry)) return; if(!user_data || !G_IS_OBJECT(user_data)) return; contoursplot = GTK_WIDGET(user_data); entry_label = g_object_get_data(G_OBJECT(entry),"EntryLabel"); entry_angle = g_object_get_data(G_OBJECT(entry),"EntryAngle"); if(!GTK_IS_WIDGET(entry_label)) return; if(!GTK_IS_WIDGET(entry_angle)) return; tlabel= gtk_entry_get_text(GTK_ENTRY(entry_label)); tangle= gtk_entry_get_text(GTK_ENTRY(entry_angle)); window = g_object_get_data(G_OBJECT(entry),"Window"); objectText = g_object_get_data(G_OBJECT(entry),"ObjectText"); /* t is destroyed with window */ if(!objectText) { if(window)gtk_widget_destroy(window); return; } if(!objectText->str) { gdouble angle = 0; if(tangle && strlen(tangle)>0) angle = atof(tangle)/180.0*M_PI; add_object_text(GABEDIT_ContoursPLOT(contoursplot), objectText->x, objectText->y, angle, tlabel); g_free(objectText); } else { gdouble angle = 0; if(tangle && strlen(tangle)>0) angle = atof(tangle)/180.0*M_PI; if(objectText->str) g_free(objectText->str); if(objectText->pango) g_object_unref(G_OBJECT(objectText->pango)); set_object_text(GABEDIT_ContoursPLOT(contoursplot), objectText, objectText->x, objectText->y, angle, tlabel); } if(window)gtk_widget_destroy(window); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ static void add_set_object_text_dialog(GtkWidget* contoursplot, gint i, gdouble x, gdouble y) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* parentWindow = NULL; GtkWidget* frame = NULL; GtkWidget* hbox = NULL; GtkWidget* vbox_frame = NULL; GtkWidget* label = NULL; GtkWidget* entry_label = NULL; GtkWidget* entry_angle = NULL; ContoursPlotObjectText* objectText = NULL; if(i>-1 && inObjectsText) { objectText = &GABEDIT_ContoursPLOT(contoursplot)->objectsText[i]; } else { objectText = g_malloc(sizeof(ContoursPlotObjectText)); objectText->x = x; objectText->y = y; objectText->str = NULL; objectText->pango = NULL; } gtk_window_set_title (GTK_WINDOW (window), _("Set label")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)contoursplot); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show(hbox); frame=gtk_frame_new(NULL); gtk_container_add(GTK_CONTAINER(hbox), frame); gtk_widget_show(frame); vbox_frame=gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), vbox_frame); gtk_widget_show(vbox_frame); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_frame), hbox, FALSE, FALSE, 2); gtk_widget_show(hbox); label=gtk_label_new(_("Label : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_label = gtk_entry_new(); /* gtk_widget_set_size_request(entry_label,100,-1);*/ if(i>-1 && inObjectsText) { gtk_entry_set_text(GTK_ENTRY(entry_label),GABEDIT_ContoursPLOT(contoursplot)->objectsText[i].str); } else gtk_entry_set_text(GTK_ENTRY(entry_label),"Blue text is cool!"); gtk_box_pack_start(GTK_BOX(hbox), entry_label, TRUE, TRUE, 2); gtk_widget_show(entry_label); g_object_set_data(G_OBJECT(entry_label),"ObjectText", objectText); label=gtk_label_new( _( "You can use the Pango Text Attribute Markup Language\n" "Example : Blue text is cool!\n" "\nFor insert a special character : control shift u + code UTF8\n" "Examples : \n" " control shift u + 03B1 for alpha (greek)\n" " control shift u + 03B2 for beta (greek)\n" " control shift u + 03A3 for cap Sigma (greek)\n" " See http://www.utf8-chartable.de\n" ) ); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox_frame), label, FALSE, FALSE, 2); g_object_set_data(G_OBJECT(entry_label),"Window", window); g_signal_connect (G_OBJECT (entry_label), "activate", (GCallback)activate_entry_object_text, contoursplot); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_frame), hbox, FALSE, FALSE, 2); gtk_widget_show(hbox); label=gtk_label_new(_("Angle : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_angle = gtk_entry_new(); if(i>-1 && inObjectsText) { gchar* tmp = g_strdup_printf("%f", GABEDIT_ContoursPLOT(contoursplot)->objectsText[i].angle/M_PI*180.0); gtk_entry_set_text(GTK_ENTRY(entry_angle),tmp); g_free(tmp); } else gtk_entry_set_text(GTK_ENTRY(entry_angle),"0.0"); gtk_box_pack_start(GTK_BOX(hbox), entry_angle, TRUE, TRUE, 2); gtk_widget_show(entry_angle); g_object_set_data(G_OBJECT(entry_angle),"ObjectText", objectText); g_object_set_data(G_OBJECT(entry_angle),"Window", window); g_object_set_data(G_OBJECT(entry_angle),"EntryLabel", entry_label); g_object_set_data(G_OBJECT(entry_angle),"EntryAngle", entry_angle); g_object_set_data(G_OBJECT(entry_label),"EntryLabel", entry_label); g_object_set_data(G_OBJECT(entry_label),"EntryAngle", entry_angle); g_signal_connect (G_OBJECT (entry_angle), "activate", (GCallback)activate_entry_object_text, contoursplot); parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } /****************************************************************************************/ static void begin_insert_objects_text(GtkWidget *widget) { if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; GABEDIT_ContoursPLOT(widget)->t_key_pressed = TRUE; } /****************************************************************************************/ static void set_object_line_pixels(GabeditContoursPlot *contoursplot, ContoursPlotObjectLine* objectLine) { if(!objectLine) return; value2pixel(contoursplot, objectLine->x1,objectLine->y1, &objectLine->x1i, &objectLine->y1i); objectLine->y1i=contoursplot->plotting_rect.height-objectLine->y1i; objectLine->x1i += contoursplot->plotting_rect.x; objectLine->y1i += contoursplot->plotting_rect.y; value2pixel(contoursplot, objectLine->x2,objectLine->y2, &objectLine->x2i, &objectLine->y2i); objectLine->y2i=contoursplot->plotting_rect.height-objectLine->y2i; objectLine->x2i += contoursplot->plotting_rect.x; objectLine->y2i += contoursplot->plotting_rect.y; } /****************************************************************************************/ static void set_object_line(GabeditContoursPlot *contoursplot, ContoursPlotObjectLine* objectLine, gdouble x1, gdouble y1, gdouble x2, gdouble y2, gint width, gint arrow_size, GdkColor color, GdkLineStyle style ) { if(!objectLine) return; objectLine->x1 = x1; objectLine->y1 = y1; objectLine->x2 = x2; objectLine->y2 = y2; objectLine->width = width; objectLine->arrow_size = arrow_size; objectLine->color = color; objectLine->style = style; set_object_line_pixels(contoursplot, objectLine); } /****************************************************************************************/ static void add_object_line(GabeditContoursPlot *contoursplot, gdouble x1, gdouble y1, gdouble x2, gdouble y2 ) { gint width = 1; gint arrow_size = 0; GdkColor color; GdkLineStyle style = GDK_LINE_SOLID; gint i; contoursplot->nObjectsLine++; if(contoursplot->nObjectsLine==1) contoursplot->objectsLine = g_malloc(sizeof(ContoursPlotObjectLine)); else contoursplot->objectsLine = g_realloc(contoursplot->objectsLine,contoursplot->nObjectsLine*sizeof(ContoursPlotObjectLine)); i = contoursplot->nObjectsLine-1; if(contoursplot->nObjectsLine==1) { GdkGCValues values; GdkColormap *colormap; gdk_gc_get_values(contoursplot->lines_gc, &values); colormap = gdk_window_get_colormap(GTK_WIDGET(contoursplot)->window); gdk_colormap_query_color(colormap, values.foreground.pixel,&color); style = values.line_style; width = values.line_width; } else { color = contoursplot->objectsLine[contoursplot->nObjectsLine-2].color; style = contoursplot->objectsLine[contoursplot->nObjectsLine-2].style; width = contoursplot->objectsLine[contoursplot->nObjectsLine-2].width; arrow_size = contoursplot->objectsLine[contoursplot->nObjectsLine-2].arrow_size; } set_object_line(contoursplot, &contoursplot->objectsLine[i], x1, y1, x2, y2, width, arrow_size, color, style); } /****************************************************************************************/ static void reset_object_line_pixels(GabeditContoursPlot *contoursplot) { gint i; if(!contoursplot) return; for(i=0;inObjectsLine;i++) set_object_line_pixels(contoursplot, &contoursplot->objectsLine[i]); } /****************************************************************************************/ static gint get_object_line_num(GabeditContoursPlot *contoursplot, gint xi, gint yi) { gint i; if(!contoursplot) return -1; for(i=0;inObjectsLine;i++) { gint d = get_distance_M_AB(contoursplot,xi,yi, contoursplot->objectsLine[i].x1i,contoursplot->objectsLine[i].y1i, contoursplot->objectsLine[i].x2i,contoursplot->objectsLine[i].y2i); if(d<5 || dobjectsLine[i].width) return i; } return -1; } /****************************************************************************************/ static void delete_object_line(GtkWidget *widget, gint i) { gint j; GabeditContoursPlot *contoursplot = NULL; if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; contoursplot = GABEDIT_ContoursPLOT(widget); if(i<0||i>=contoursplot->nObjectsLine) return; for(j=i;jnObjectsLine-1;j++) contoursplot->objectsLine[j] = contoursplot->objectsLine[j+1]; contoursplot->nObjectsLine--; if(contoursplot->nObjectsLine<1) { contoursplot->nObjectsLine = 0; if(contoursplot->objectsLine) g_free(contoursplot->objectsLine); contoursplot->objectsLine = NULL; } else { contoursplot->objectsLine = g_realloc(contoursplot->objectsLine,contoursplot->nObjectsLine*sizeof(ContoursPlotObjectLine)); } } /****************************************************************************************/ static void delete_objects_line(GtkWidget *widget) { GabeditContoursPlot *contoursplot = NULL; if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; contoursplot = GABEDIT_ContoursPLOT(widget); contoursplot->nObjectsLine = 0; if(contoursplot->objectsLine) g_free(contoursplot->objectsLine); contoursplot->objectsLine = NULL; gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ static void begin_insert_objects_line(GtkWidget *widget) { if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; GABEDIT_ContoursPLOT(widget)->l_key_pressed = TRUE; } /****************************************************************************************/ static void spin_line_width_changed_value_object(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); ContoursPlotObjectLine* objectLine = g_object_get_data(G_OBJECT(spinbutton),"ObjectLine"); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if(objectLine) objectLine->width = gtk_spin_button_get_value(spinbutton); else { gint i; for (i=0; inObjectsLine;i++) { GABEDIT_ContoursPLOT (contoursplot)->objectsLine[i].width = gtk_spin_button_get_value(spinbutton); } } gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /****************************************************************************************/ static void spin_line_color_changed_value_object(GtkColorButton *colorbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); ContoursPlotObjectLine* objectLine = g_object_get_data(G_OBJECT(colorbutton),"ObjectLine"); GdkColor c; gtk_color_button_get_color (colorbutton, &c); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if(objectLine) objectLine->color = c; else { gint i; for (i=0; inObjectsLine;i++) { GABEDIT_ContoursPLOT (contoursplot)->objectsLine[i].color = c; } } gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /********************************************************************************************************/ static void combo_line_style_changed_value_object(GtkComboBox *combobox, gpointer user_data) { GtkTreeIter iter; gchar* d = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); GtkWidget* contoursplot = GTK_WIDGET(user_data); ContoursPlotObjectLine* objectLine = g_object_get_data(G_OBJECT(combobox),"ObjectLine"); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); gtk_tree_model_get (model, &iter, 0, &d, -1); if(!d) return; if(objectLine) { if (!strcmp(d,"Solid") ) { objectLine->style = GDK_LINE_SOLID; } else if (!strcmp(d,"On-Off dashed") ) {objectLine->style = GDK_LINE_ON_OFF_DASH; } else if (!strcmp(d,"Double dashed") ) { objectLine->style = GDK_LINE_DOUBLE_DASH;} } else { gint i; for (i=0; inObjectsLine;i++) { if (!strcmp(d,"Solid") ) { GABEDIT_ContoursPLOT (contoursplot)->objectsLine[i].style = GDK_LINE_SOLID; } else if (!strcmp(d,"On-Off dashed") ) {GABEDIT_ContoursPLOT (contoursplot)->objectsLine[i].style = GDK_LINE_ON_OFF_DASH; } else if (!strcmp(d,"Double dashed") ) { GABEDIT_ContoursPLOT (contoursplot)->objectsLine[i].style = GDK_LINE_DOUBLE_DASH;} } } gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /****************************************************************************************/ static void spin_arrow_size_changed_value_object(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); ContoursPlotObjectLine* objectLine = g_object_get_data(G_OBJECT(spinbutton),"ObjectLine"); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if(objectLine) objectLine->arrow_size = gtk_spin_button_get_value(spinbutton); else { gint i; for (i=0; inObjectsLine;i++) { GABEDIT_ContoursPLOT (contoursplot)->objectsLine[i].arrow_size = gtk_spin_button_get_value(spinbutton); } } gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /********************************************************************************************************/ static GtkWidget *add_line_types_combo_object(GtkWidget *hbox) { GtkTreeIter iter; GtkTreeStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; store = gtk_tree_store_new (1,G_TYPE_STRING); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Solid", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "On-Off dashed", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Double dashed", -1); model = GTK_TREE_MODEL (store); combobox = gtk_combo_box_new_with_model (model); g_object_unref (model); gtk_box_pack_start (GTK_BOX (hbox), combobox, TRUE, TRUE, 1); renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", 0, NULL); return combobox; } /****************************************************************************************/ static void set_object_line_dialog(GabeditContoursPlot* contoursplot, gint i) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* frame = NULL; GtkWidget* hbox = NULL; GtkWidget* hbox1 = NULL; GtkWidget* label = NULL; GtkWidget* combo = NULL; GtkWidget* spin = NULL; GtkWidget* button = NULL; GtkWidget* spin_arrow = NULL; GtkWidget* parentWindow = NULL; GtkWidget* vbox_window = NULL; ContoursPlotObjectLine* objectLine = NULL; GdkLineStyle line_style = GDK_LINE_SOLID; if(i>=0 && i<=contoursplot->nObjectsLine-1) objectLine = &contoursplot->objectsLine[i]; else return; line_style = objectLine->style; gtk_window_set_title (GTK_WINDOW (window), _("Set line options")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)contoursplot); vbox_window=gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox_window); gtk_widget_show(vbox_window); hbox1=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_window), hbox1, TRUE, FALSE, 2); gtk_widget_show(hbox1); frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(hbox1), frame, TRUE, FALSE, 2); gtk_widget_show(frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Line width :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin = gtk_spin_button_new_with_range(0, 10, 1); if(objectLine) gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), objectLine->width); else gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), 1); gtk_box_pack_start(GTK_BOX(hbox), spin, TRUE, FALSE, 2); gtk_widget_show(spin); g_object_set_data(G_OBJECT (window), "SpinLineWidth", spin); label=gtk_label_new(_("Line type :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); combo = add_line_types_combo_object(hbox); gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); if(objectLine) { GdkLineStyle line_style = objectLine->style; if(line_style == GDK_LINE_SOLID) gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); else if(line_style == GDK_LINE_ON_OFF_DASH) gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 1); else if(line_style == GDK_LINE_DOUBLE_DASH) gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 2); } gtk_widget_show(combo); g_object_set_data(G_OBJECT (window), "ComboLineType", combo); label=gtk_label_new(_("Line color :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); button = gtk_color_button_new_with_color (&objectLine->color); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 2); gtk_widget_show(button); g_object_set_data(G_OBJECT (window), "ColorButton", button); label=gtk_label_new(_("Arrow size :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_arrow = gtk_spin_button_new_with_range(0, 30, 1); if(objectLine) gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_arrow), objectLine->arrow_size); gtk_box_pack_start(GTK_BOX(hbox), spin_arrow, TRUE, FALSE, 2); gtk_widget_show(spin_arrow); g_object_set_data(G_OBJECT (window), "SpinArrowSize", spin_arrow); g_object_set_data(G_OBJECT (spin), "ObjectLine", objectLine); g_signal_connect(G_OBJECT(spin), "value-changed", G_CALLBACK(spin_line_width_changed_value_object), contoursplot); g_object_set_data(G_OBJECT (button), "ObjectLine", objectLine); g_signal_connect(G_OBJECT(button), "color-set", G_CALLBACK(spin_line_color_changed_value_object), contoursplot); g_signal_connect(G_OBJECT(combo), "changed", G_CALLBACK(combo_line_style_changed_value_object), contoursplot); g_object_set_data(G_OBJECT (combo), "ObjectLine", objectLine); g_object_set_data(G_OBJECT (spin_arrow), "ObjectLine", objectLine); g_signal_connect(G_OBJECT(spin_arrow), "value-changed", G_CALLBACK(spin_arrow_size_changed_value_object), contoursplot); parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); /* list_utf8();*/ } /**************************************************************************************************/ static void set_object_image_relative(GabeditContoursPlot *contoursplotplot, ContoursPlotObjectImage* objectImage) { gdouble f = (gdouble)GTK_WIDGET(contoursplotplot)->allocation.width; gint xi=objectImage->xi-contoursplotplot->plotting_rect.x; gint yi=contoursplotplot->plotting_rect.y+contoursplotplot->plotting_rect.height-objectImage->yi; if(f>(gdouble)GTK_WIDGET(contoursplotplot)->allocation.height) f = (gdouble)GTK_WIDGET(contoursplotplot)->allocation.height; objectImage->width = (gdouble)objectImage->widthi/f; objectImage->height = (gdouble)objectImage->heighti/f; /* objectImage->x = (gdouble)objectImage->xi/f; objectImage->y = (gdouble)objectImage->yi/f; */ pixel2value(contoursplotplot, xi, yi, &objectImage->x, &objectImage->y); /* printf("contoursplot = %f %f\n",objectImage->x, objectImage->y);*/ } /**************************************************************************************************/ static void set_object_image_pixels(GabeditContoursPlot *contoursplotplot, ContoursPlotObjectImage* objectImage) { gint xi,yi; gdouble f = (gdouble)GTK_WIDGET(contoursplotplot)->allocation.width; if(f>(gdouble)GTK_WIDGET(contoursplotplot)->allocation.height) f = (gdouble)GTK_WIDGET(contoursplotplot)->allocation.height; objectImage->widthi = (gint)(objectImage->width*f); objectImage->heighti = (gint)(objectImage->height*f); /* objectImage->xi = (gint)(objectImage->x*f); objectImage->yi = (gint)(objectImage->y*f); */ value2pixel(contoursplotplot, objectImage->x, objectImage->y, &xi, &yi); objectImage->xi = xi; objectImage->yi = yi; objectImage->yi=contoursplotplot->plotting_rect.height-objectImage->yi; objectImage->xi += contoursplotplot->plotting_rect.x; objectImage->yi += contoursplotplot->plotting_rect.y; } /****************************************************************************************/ static void set_object_image(GabeditContoursPlot *contoursplotplot, ContoursPlotObjectImage* objectImage, gint xi, gint yi, gint w, gint h) { objectImage->xi = xi; objectImage->yi = yi; objectImage->widthi = w; objectImage->heighti = h; set_object_image_relative(contoursplotplot, objectImage); } /**************************************************************************/ static cairo_surface_t* get_image_from_clipboard() { cairo_surface_t *surface = NULL; GtkClipboard * clipboard = NULL; GdkPixbuf * pixbuf = NULL; clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); if(!clipboard) return NULL; pixbuf = gtk_clipboard_wait_for_image(clipboard); if(pixbuf) { gint width; gint height; gint stride; gint x,y; gint nChannels; guchar *p, *pixels; gint red, green, blue; gfloat alpha; if (!gdk_pixbuf_get_has_alpha (pixbuf)) { GdkPixbuf* newPixbuf = gdk_pixbuf_add_alpha (pixbuf, FALSE, 255, 255, 255); if (newPixbuf != pixbuf) { g_object_unref(pixbuf); pixbuf = newPixbuf; } } width = gdk_pixbuf_get_width (pixbuf); height = gdk_pixbuf_get_height (pixbuf); stride = gdk_pixbuf_get_rowstride(pixbuf); nChannels = gdk_pixbuf_get_n_channels (pixbuf); pixels = gdk_pixbuf_get_pixels (pixbuf); for (y = 0; y < height; y++) { for (x = 0; x < width; x++) { p = pixels + y * stride + x * nChannels; alpha = (gfloat) p[3] / 255; red = p[0] * alpha; green = p[1] * alpha; blue = p[2] * alpha; p[0] = blue; p[1] = green; p[2] = red; } } surface = cairo_image_surface_create_for_data( pixels, CAIRO_FORMAT_ARGB32, width, height, stride); /*g_object_unref(pixbuf);*/ } return surface; } /**************************************************************************************************/ static ContoursPlotObjectImage get_object_image(GabeditContoursPlot *contoursplotplot, gint xi, gint yi, G_CONST_RETURN gchar* fileName) { gint w; gint h; gint nw; gint nh; gdouble fw = 1; gdouble fh = 1; gdouble f = 1; ContoursPlotObjectImage objectImage; objectImage.widthi=0; objectImage.heighti=0; objectImage.xi=xi; objectImage.yi=yi; if(fileName) objectImage.fileName = g_strdup(fileName); else objectImage.fileName = NULL; objectImage.image=NULL; if(fileName) { objectImage.image = cairo_image_surface_create_from_png (objectImage.fileName); } else { objectImage.image = get_image_from_clipboard(); } if(!objectImage.image) return objectImage; w = cairo_image_surface_get_width (objectImage.image); h = cairo_image_surface_get_height (objectImage.image); nw = contoursplotplot->plotting_rect.width-xi; nh = contoursplotplot->plotting_rect.height-yi; if(nw0) fw = nw/(gdouble)w; if(nh0) fh = nh/(gdouble)h; f = fw; if(f>fh) f = fh; objectImage.widthi = (gint)(w*f); objectImage.heighti = (gint)(h*f); set_object_image_relative(contoursplotplot, &objectImage); /* printf("w = %d h = %d\n",w, h);*/ return objectImage; } /****************************************************************************************/ static void add_object_image(GabeditContoursPlot *contoursplotplot, gint xi, gint yi, gint width, gint height, G_CONST_RETURN gchar* fileName) { ContoursPlotObjectImage objectImage = get_object_image(contoursplotplot, xi, yi, fileName); if(!objectImage.image) return; contoursplotplot->nObjectsImage++; if(contoursplotplot->nObjectsImage==1) contoursplotplot->objectsImage = g_malloc(sizeof(ContoursPlotObjectImage)); else contoursplotplot->objectsImage = g_realloc(contoursplotplot->objectsImage,contoursplotplot->nObjectsImage*sizeof(ContoursPlotObjectImage)); if(width>0 && height>0) { objectImage.widthi=width; objectImage.heighti=height; } contoursplotplot->objectsImage[contoursplotplot->nObjectsImage-1] = objectImage; } /****************************************************************************************/ static gint get_object_image_num(GabeditContoursPlot *contoursplotplot, gint xi, gint yi) { gint i; if(!contoursplotplot) return -1; for(i=0;inObjectsImage;i++) { if(xi>=(gint)contoursplotplot->objectsImage[i].xi && yi>=contoursplotplot->objectsImage[i].yi && xi<=contoursplotplot->objectsImage[i].xi+contoursplotplot->objectsImage[i].widthi && yi<=contoursplotplot->objectsImage[i].yi+contoursplotplot->objectsImage[i].heighti) return i; } return -1; } /****************************************************************************************/ static void delete_object_image(GtkWidget *widget, gint i) { gint j; GabeditContoursPlot *contoursplotplot = NULL; if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; contoursplotplot = GABEDIT_ContoursPLOT(widget); if(i<0||i>=contoursplotplot->nObjectsImage) return; if(contoursplotplot->objectsImage[i].fileName) g_free(contoursplotplot->objectsImage[i].fileName); if(contoursplotplot->objectsImage[i].image) cairo_surface_destroy (contoursplotplot->objectsImage[i].image); for(j=i;jnObjectsImage-1;j++) contoursplotplot->objectsImage[j] = contoursplotplot->objectsImage[j+1]; contoursplotplot->nObjectsImage--; if(contoursplotplot->nObjectsImage<1) { contoursplotplot->nObjectsImage = 0; if(contoursplotplot->objectsImage) g_free(contoursplotplot->objectsImage); contoursplotplot->objectsImage = NULL; } else { contoursplotplot->objectsImage = g_realloc(contoursplotplot->objectsImage,contoursplotplot->nObjectsImage*sizeof(ContoursPlotObjectImage)); } } /****************************************************************************************/ static void delete_objects_image(GtkWidget *widget) { GabeditContoursPlot *contoursplotplot = NULL; gint i; if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; contoursplotplot = GABEDIT_ContoursPLOT(widget); for(i=0;inObjectsImage;i++) { if(contoursplotplot->objectsImage[i].fileName) g_free(contoursplotplot->objectsImage[i].fileName); if(contoursplotplot->objectsImage[i].image) cairo_surface_destroy (contoursplotplot->objectsImage[i].image); } contoursplotplot->nObjectsImage = 0; if(contoursplotplot->objectsImage) g_free(contoursplotplot->objectsImage); contoursplotplot->objectsImage = NULL; gtk_widget_queue_draw(GTK_WIDGET(contoursplotplot)); } /********************************************************************************/ static gboolean read_image_png(GtkFileChooser *filesel, gint response_id) { gchar *fileName; GtkWidget* contoursplotplot = NULL; ContoursPlotObjectImage* objectImage = NULL; if(response_id != GTK_RESPONSE_OK) return FALSE; fileName = gtk_file_chooser_get_filename(filesel); contoursplotplot = g_object_get_data(G_OBJECT (filesel), "ContoursPLOT"); objectImage = g_object_get_data(G_OBJECT(filesel),"ObjectImage"); if(objectImage && !objectImage->image) { add_object_image(GABEDIT_ContoursPLOT(contoursplotplot), objectImage->xi, objectImage->yi, -1, -1, fileName); g_free(objectImage); } gtk_widget_queue_draw(GTK_WIDGET(contoursplotplot)); return TRUE; } /********************************************************************************/ static void activate_entry_object_image(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; GtkWidget* contoursplotplot = NULL; GtkWidget* window = NULL; ContoursPlotObjectImage* objectImage = NULL; if(!GTK_IS_WIDGET(entry)) return; if(!user_data || !G_IS_OBJECT(user_data)) return; contoursplotplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); if(!entry) return; window = g_object_get_data(G_OBJECT(entry),"Window"); objectImage = g_object_get_data(G_OBJECT(entry),"ObjectImage"); /* t is destroyed with window */ if(!objectImage) { if(window)gtk_widget_destroy(window); return; } else { objectImage->widthi =(gint)(fabs(atof(t))*cairo_image_surface_get_width (objectImage->image)); objectImage->heighti =(gint)(fabs(atof(t))*cairo_image_surface_get_height (objectImage->image)); } if(window)gtk_widget_destroy(window); gtk_widget_queue_draw(GTK_WIDGET(contoursplotplot)); } /********************************************************************************/ static void add_set_object_image_dialog(GtkWidget* contoursplotplot, gint i, gint xi, gint yi) { GtkWidget* parentWindow = NULL; gchar* patternsfiles[] = {"*.png","*",NULL}; GtkWidget* filesel= NULL; ContoursPlotObjectImage* objectImage = NULL; if(i>-1 && inObjectsImage) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* frame = NULL; GtkWidget* hbox = NULL; GtkWidget* vbox_frame = NULL; GtkWidget* label = NULL; GtkWidget* entry_label = NULL; objectImage = &GABEDIT_ContoursPLOT(contoursplotplot)->objectsImage[i]; gtk_window_set_title (GTK_WINDOW (window), _("Scale image")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)contoursplotplot); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show(hbox); frame=gtk_frame_new(NULL); gtk_container_add(GTK_CONTAINER(hbox), frame); gtk_widget_show(frame); vbox_frame=gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), vbox_frame); gtk_widget_show(vbox_frame); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_frame), hbox, FALSE, FALSE, 2); gtk_widget_show(hbox); label=gtk_label_new(_("Factor (new size/orginal size) : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_label = gtk_entry_new(); /* gtk_widget_set_size_request(entry_label,100,-1);*/ gtk_entry_set_text(GTK_ENTRY(entry_label),"0.5"); gtk_box_pack_start(GTK_BOX(hbox), entry_label, TRUE, TRUE, 2); gtk_widget_show(entry_label); g_object_set_data(G_OBJECT(entry_label),"ObjectImage", objectImage); g_object_set_data(G_OBJECT(entry_label),"Window", window); g_signal_connect (G_OBJECT (entry_label), "activate", (GCallback)activate_entry_object_image, contoursplotplot); parentWindow = get_parent_window(GTK_WIDGET(contoursplotplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } else if(i==-1) { objectImage = g_malloc(sizeof(ContoursPlotObjectImage)); objectImage->xi = xi; objectImage->yi = yi; objectImage->fileName = NULL; objectImage->image = NULL; parentWindow = get_parent_window(GTK_WIDGET(contoursplotplot)); filesel= new_file_chooser_open(parentWindow, (GCallback *)read_image_png, _("Read image from a png file"), patternsfiles); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); g_object_set_data(G_OBJECT (filesel), "ContoursPLOT", contoursplotplot); g_object_set_data(G_OBJECT(filesel),"ObjectImage", objectImage); } else add_object_image(GABEDIT_ContoursPLOT(contoursplotplot), xi, yi, -1, -1, NULL); } /****************************************************************************************/ static void reset_object_image_pixels(GabeditContoursPlot *contoursplotplot) { gint i; if(!contoursplotplot) return; for(i=0;inObjectsImage;i++) set_object_image_pixels(contoursplotplot, &contoursplotplot->objectsImage[i]); } /****************************************************************************************/ /* static void reset_object_image_relative(GabeditContoursPlot *contoursplotplot) { gint i; if(!contoursplotplot) return; for(i=0;inObjectsImage;i++) set_object_image_relative(contoursplotplot, &contoursplotplot->objectsImage[i]); } */ /****************************************************************************************/ static void insert_objects_image_from_clipboard(GtkWidget *widget) { if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; add_object_image(GABEDIT_ContoursPLOT(widget), 0, 0, -1, -1, NULL); gtk_widget_queue_draw(widget); } /****************************************************************************************/ static void begin_insert_objects_image(GtkWidget *widget) { if(!widget) return; if(!GTK_IS_WIDGET(widget)) return; GABEDIT_ContoursPLOT(widget)->i_key_pressed = TRUE; } /********************************************************************************/ static gboolean read_data(GtkFileChooser *filesel, gint response_id) { gchar *fileName; gboolean OK; FILE *fd; gint xsize = 0; gint ysize = 0; gdouble xmin = 0; gdouble ymin = 0; gdouble xmax = 0; gdouble ymax = 0; gdouble* zValues = NULL; GtkWidget* contoursplot = NULL; gint size = 0; gint i; if(response_id != GTK_RESPONSE_OK) return FALSE; fileName = gtk_file_chooser_get_filename(filesel); contoursplot = g_object_get_data(G_OBJECT (filesel), "ContoursPLOT"); fd = fopen(fileName, "rb"); OK=FALSE; if(!fd) { GtkWidget* dialog = NULL; gchar* tmp = g_strdup_printf(_("Sorry, I cannot open %s file"),fileName); dialog = gtk_message_dialog_new_with_markup (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "%s", tmp); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); g_free(tmp); return FALSE; } if(fd) { if(3==fscanf(fd,"%d %lf %lf",&xsize,&xmin,&xmax)) { if(3==fscanf(fd,"%d %lf %lf",&ysize,&ymin,&ymax)) OK = TRUE; } } size = xsize*ysize; if(size<1) { GtkWidget* dialog = NULL; gchar* tmp = g_strdup_printf(_("Sorry, I cannot read %s file"),fileName); dialog = gtk_message_dialog_new_with_markup (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "%s", tmp); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); g_free(tmp); return FALSE; } if(OK) zValues = g_malloc(size*sizeof(gdouble)); if(!zValues) { GtkWidget* dialog = NULL; gchar* tmp = g_strdup_printf(_("Sorry, I cannot read %s file"),fileName); dialog = gtk_message_dialog_new_with_markup (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "%s", tmp); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); g_free(tmp); return FALSE; } for(i=0;OK && idata_list) { GList *current_node; current_node=g_list_last(GABEDIT_ContoursPLOT(contoursplot)->data_list); if(current_node) { ContoursPlotData* data = (ContoursPlotData*)current_node->data; create_contours(contoursplot,data); } } } if(zValues) g_free(zValues); fclose(fd); return TRUE; } /********************************************************************************/ static void read_data_dlg(GtkWidget* contoursplot) { GtkWidget* parentWindow = NULL; gchar* patternsfiles[] = {"*.txt","*",NULL}; GtkWidget* filesel= NULL; parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); filesel= new_file_chooser_open(parentWindow, (GCallback *)read_data, _("Read data from an ASCII grid file(xsize, xmin, xmax, ysize, ymin, ymax, Zvalues)"), patternsfiles); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); g_object_set_data(G_OBJECT (filesel), "ContoursPLOT", contoursplot); } /********************************************************************************/ static gboolean save_data(GtkFileChooser *filesel, gint response_id) { gchar *fileName; FILE *file; ContoursPlotData* data = NULL; gint loop; if(response_id != GTK_RESPONSE_OK) return FALSE; fileName = gtk_file_chooser_get_filename(filesel); data = g_object_get_data(G_OBJECT (filesel), "CurentData"); if(!data) return FALSE; file = fopen(fileName, "w"); fprintf(file, "%d %f %f\n",data->xsize, data->xmin, data->xmax); fprintf(file, "%d %f %f\n",data->ysize, data->ymin, data->ymax); for(loop=0;loopxsize*data->ysize; loop++) fprintf(file, "%f\n",data->zValues[loop]); fclose(file); return TRUE; } /********************************************************************************/ static void auto_range_activate(GtkWidget* buttonAutoRange, GtkWidget* contoursplot) { ContoursPlotData* data = NULL; data = g_object_get_data(G_OBJECT (buttonAutoRange), "CurentData"); if(contoursplot) gabedit_contoursplot_set_autorange(GABEDIT_ContoursPLOT(contoursplot), data); } /********************************************************************************/ static void save_data_dlg(GtkWidget* buttonSave, GtkWidget* contoursplot) { GtkWidget* parentWindow = NULL; gchar* patternsfiles[] = {"*.txt","*",NULL}; GtkWidget* filesel= NULL; gchar* tmp = NULL; gpointer* data = NULL; parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); filesel= new_file_chooser_save(parentWindow, (GCallback *)save_data, _("Save data in an ASCII grid file(xsize, xmin, xmax, ysize, ymin, ymax, Zvalues)"), patternsfiles); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); data = g_object_get_data(G_OBJECT (buttonSave), "CurentData"); g_object_set_data(G_OBJECT (filesel), "CurentData", data); tmp = g_strdup_printf("%s%s%s",g_get_current_dir(),G_DIR_SEPARATOR_S,"contoursplotData.txt"); gtk_file_chooser_set_filename ((GtkFileChooser *)filesel, tmp); if(tmp) g_free(tmp); gtk_file_chooser_set_current_name ((GtkFileChooser *)filesel, "contoursplotData.txt"); } /********************************************************************************/ static gboolean remove_data(GtkWidget* buttonRemove, gint response_id) { ContoursPlotData* data = NULL; GtkWidget*window = NULL; GtkWidget*contoursplot = NULL; if(response_id != GTK_RESPONSE_YES) return FALSE; data = g_object_get_data(G_OBJECT (buttonRemove), "CurentData"); window = g_object_get_data(G_OBJECT (buttonRemove), "Window"); contoursplot = g_object_get_data(G_OBJECT (buttonRemove), "ContoursPLOT"); if(contoursplot && data) { gabedit_contoursplot_remove_data(GABEDIT_ContoursPLOT(contoursplot), data); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } if(window) gtk_widget_destroy(window); return TRUE; } /********************************************************************************/ static void remove_data_dlg(GtkWidget* buttonRemove, GtkWidget* contoursplot) { GtkWidget* parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); GtkWidget* dialog = gtk_message_dialog_new (GTK_WINDOW(parentWindow), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("Are you sure to delete this data ?") ); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_NO); g_signal_connect_swapped(dialog, "response", G_CALLBACK (remove_data), buttonRemove); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } /****************************************************************************************/ static void spin_font_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gint fontSize = gtk_spin_button_get_value(spinbutton); gchar tmp[100]; sprintf(tmp,"sans %d",fontSize); gabedit_contoursplot_set_font (GABEDIT_ContoursPLOT(contoursplot), tmp); reset_object_text_pango(GABEDIT_ContoursPLOT(contoursplot)); } } /****************************************************************************************/ static void add_font_size_frame(GtkWidget* hbox, GtkWidget* contoursplot) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* spin_font_size = NULL; frame=gtk_frame_new(_("Font size")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); spin_font_size=gtk_spin_button_new_with_range(8, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_font_size, TRUE, FALSE, 2); gtk_widget_show(spin_font_size); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_font_size), GABEDIT_ContoursPLOT(contoursplot)->font_size); g_signal_connect(G_OBJECT(spin_font_size), "value-changed", G_CALLBACK(spin_font_changed_value), contoursplot); } /****************************************************************************************/ static void set_font_size_dialog(GtkWidget* contoursplot) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* hbox = NULL; GtkWidget* parentWindow = NULL; gtk_window_set_title (GTK_WINDOW (window), _("Set font size")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)contoursplot); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show(hbox); add_font_size_frame(hbox, contoursplot); parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } /****************************************************************************************/ static void spin_x_digits_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_set_x_legends_digits(GABEDIT_ContoursPLOT(contoursplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void spin_y_digits_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_set_y_legends_digits(GABEDIT_ContoursPLOT(contoursplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void add_digits_frame(GtkWidget* hbox, GtkWidget* contoursplot) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* label = NULL; GtkWidget* x_spin_digits = NULL; GtkWidget* y_spin_digits = NULL; frame=gtk_frame_new(_("Digits")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(" X "); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); x_spin_digits=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), x_spin_digits, TRUE, FALSE, 2); gtk_widget_show(x_spin_digits); label=gtk_label_new(" Y "); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); y_spin_digits=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), y_spin_digits, TRUE, FALSE, 2); gtk_widget_show(y_spin_digits); gtk_spin_button_set_value(GTK_SPIN_BUTTON(x_spin_digits), GABEDIT_ContoursPLOT(contoursplot)->x_legends_digits); gtk_spin_button_set_value(GTK_SPIN_BUTTON(y_spin_digits), GABEDIT_ContoursPLOT(contoursplot)->y_legends_digits); g_signal_connect(G_OBJECT(x_spin_digits), "value-changed", G_CALLBACK(spin_x_digits_changed_value), contoursplot); g_signal_connect(G_OBJECT(y_spin_digits), "value-changed", G_CALLBACK(spin_y_digits_changed_value), contoursplot); } /****************************************************************************************/ static void set_digits_dialog(GtkWidget* contoursplot) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* hbox = NULL; GtkWidget* parentWindow = NULL; gtk_window_set_title (GTK_WINDOW (window), _("Set digits")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)contoursplot); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show(hbox); add_digits_frame(hbox, contoursplot); parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } /********************************************************************************/ static void activate_entry_xlabel(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; GtkWidget* contoursplot = NULL; if(!user_data || !G_IS_OBJECT(user_data)) return; contoursplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); gabedit_contoursplot_set_x_label (GABEDIT_ContoursPLOT(contoursplot), t); } /********************************************************************************/ static void activate_entry_ylabel(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; GtkWidget* contoursplot = NULL; if(!user_data || !G_IS_OBJECT(user_data)) return; contoursplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); gabedit_contoursplot_set_y_label (GABEDIT_ContoursPLOT(contoursplot), t); } /****************************************************************************************/ static void add_labels_frame(GtkWidget* hbox, GtkWidget* contoursplot) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* label = NULL; GtkWidget* entry_x_label = NULL; GtkWidget* entry_y_label = NULL; frame=gtk_frame_new(_("Labels")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); label=gtk_label_new("X : "); gtk_box_pack_start(GTK_BOX(hbox_frame), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_x_label = gtk_entry_new(); gtk_widget_set_size_request(entry_x_label,100,-1); if(GABEDIT_ContoursPLOT(contoursplot)->h_label_str) gtk_entry_set_text(GTK_ENTRY(entry_x_label),GABEDIT_ContoursPLOT(contoursplot)->h_label_str); else gtk_entry_set_text(GTK_ENTRY(entry_x_label),""); gtk_box_pack_start(GTK_BOX(hbox_frame), entry_x_label, FALSE, FALSE, 2); gtk_widget_show(entry_x_label); label=gtk_label_new("Y : "); gtk_box_pack_start(GTK_BOX(hbox_frame), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_y_label = gtk_entry_new(); gtk_widget_set_size_request(entry_y_label,100,-1); if(GABEDIT_ContoursPLOT(contoursplot)->v_label_str) gtk_entry_set_text(GTK_ENTRY(entry_y_label),GABEDIT_ContoursPLOT(contoursplot)->v_label_str); else gtk_entry_set_text(GTK_ENTRY(entry_y_label),""); gtk_box_pack_start(GTK_BOX(hbox_frame), entry_y_label, FALSE, FALSE, 2); gtk_widget_show(entry_y_label); g_signal_connect (G_OBJECT (entry_x_label), "activate", (GCallback)activate_entry_xlabel, contoursplot); g_signal_connect (G_OBJECT (entry_y_label), "activate", (GCallback)activate_entry_ylabel, contoursplot); } /****************************************************************************************/ static void set_labels_dialog(GtkWidget* contoursplot) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* parentWindow = NULL; GtkWidget* hbox = NULL; gtk_window_set_title (GTK_WINDOW (window), _("Set labels")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)contoursplot); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show(hbox); add_labels_frame(hbox, contoursplot); parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } /********************************************************************************/ static void activate_entry_xmin(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; gdouble a; GtkWidget* contoursplot = NULL; gdouble xmin; gdouble ymin; gdouble xmax; gdouble ymax; if(!user_data || !G_IS_OBJECT(user_data)) return; contoursplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); a = atof(t); gabedit_contoursplot_get_range (GABEDIT_ContoursPLOT(contoursplot), &xmin, &xmax, &ymin, &ymax); if(a>= xmax) { gchar* tmp = g_strdup_printf("%0.3f",xmin); gtk_entry_set_text(GTK_ENTRY(entry),tmp); g_free(tmp); return; } gabedit_contoursplot_set_range_xmin (GABEDIT_ContoursPLOT(contoursplot), a); } /********************************************************************************/ static void activate_entry_xmax(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; gdouble a; GtkWidget* contoursplot = NULL; gdouble xmin; gdouble ymin; gdouble xmax; gdouble ymax; if(!user_data || !G_IS_OBJECT(user_data)) return; contoursplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); a = atof(t); gabedit_contoursplot_get_range (GABEDIT_ContoursPLOT(contoursplot), &xmin, &xmax, &ymin, &ymax); if(a<=xmin) { gchar* tmp = g_strdup_printf("%0.3f",xmax); gtk_entry_set_text(GTK_ENTRY(entry),tmp); g_free(tmp); return; } gabedit_contoursplot_set_range_xmax (GABEDIT_ContoursPLOT(contoursplot), a); } /********************************************************************************/ static void activate_entry_ymin(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; gdouble a; GtkWidget* contoursplot = NULL; gdouble xmin; gdouble ymin; gdouble xmax; gdouble ymax; if(!user_data || !G_IS_OBJECT(user_data)) return; contoursplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); a = atof(t); gabedit_contoursplot_get_range (GABEDIT_ContoursPLOT(contoursplot), &xmin, &xmax, &ymin, &ymax); if(a>= ymax) { gchar* tmp = g_strdup_printf("%0.3f",ymin); gtk_entry_set_text(GTK_ENTRY(entry),tmp); g_free(tmp); return; } gabedit_contoursplot_set_range_ymin (GABEDIT_ContoursPLOT(contoursplot), a); } /********************************************************************************/ static void activate_entry_ymax(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; gdouble a; GtkWidget* contoursplot = NULL; gdouble xmin; gdouble ymin; gdouble xmax; gdouble ymax; if(!user_data || !G_IS_OBJECT(user_data)) return; contoursplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); a = atof(t); gabedit_contoursplot_get_range (GABEDIT_ContoursPLOT(contoursplot), &xmin, &xmax, &ymin, &ymax); if(a<= ymin) { gchar* tmp = g_strdup_printf("%0.3f",ymax); gtk_entry_set_text(GTK_ENTRY(entry),tmp); g_free(tmp); return; } gabedit_contoursplot_set_range_ymax (GABEDIT_ContoursPLOT(contoursplot), a); } /****************************************************************************************/ static void add_ranges_frame(GtkWidget* hbox, GtkWidget* contoursplot) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* label = NULL; GtkWidget* entry_x_min = NULL; GtkWidget* entry_x_max = NULL; GtkWidget* entry_y_min = NULL; GtkWidget* entry_y_max = NULL; gchar tmp[100]; frame=gtk_frame_new(_("Ranges")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); label=gtk_label_new(_("X Min: ")); gtk_box_pack_start(GTK_BOX(hbox_frame), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_x_min = gtk_entry_new(); gtk_widget_set_size_request(entry_x_min,50,-1); sprintf(tmp,"%0.3f",GABEDIT_ContoursPLOT(contoursplot)->xmin); gtk_entry_set_text(GTK_ENTRY(entry_x_min),tmp); gtk_box_pack_start(GTK_BOX(hbox_frame), entry_x_min, TRUE, FALSE, 2); gtk_widget_show(entry_x_min); label=gtk_label_new(_("X Max: ")); gtk_box_pack_start(GTK_BOX(hbox_frame), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_x_max = gtk_entry_new(); gtk_widget_set_size_request(entry_x_max,50,-1); sprintf(tmp,"%0.3f",GABEDIT_ContoursPLOT(contoursplot)->xmax); gtk_entry_set_text(GTK_ENTRY(entry_x_max),tmp); gtk_box_pack_start(GTK_BOX(hbox_frame), entry_x_max, TRUE, FALSE, 2); gtk_widget_show(entry_x_max); label=gtk_label_new(_("Y Min: ")); gtk_box_pack_start(GTK_BOX(hbox_frame), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_y_min = gtk_entry_new(); gtk_widget_set_size_request(entry_y_min,50,-1); sprintf(tmp,"%0.3f",GABEDIT_ContoursPLOT(contoursplot)->ymin); gtk_entry_set_text(GTK_ENTRY(entry_y_min),tmp); gtk_box_pack_start(GTK_BOX(hbox_frame), entry_y_min, TRUE, FALSE, 2); gtk_widget_show(entry_y_min); label=gtk_label_new(_("Y Max: ")); gtk_box_pack_start(GTK_BOX(hbox_frame), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_y_max = gtk_entry_new(); gtk_widget_set_size_request(entry_y_max,50,-1); sprintf(tmp,"%0.3f",GABEDIT_ContoursPLOT(contoursplot)->ymax); gtk_entry_set_text(GTK_ENTRY(entry_y_max),tmp); gtk_box_pack_start(GTK_BOX(hbox_frame), entry_y_max, TRUE, FALSE, 2); gtk_widget_show(entry_y_max); g_signal_connect (G_OBJECT (entry_x_min), "activate", (GCallback)activate_entry_xmin, contoursplot); g_signal_connect (G_OBJECT (entry_x_max), "activate", (GCallback)activate_entry_xmax, contoursplot); g_signal_connect (G_OBJECT (entry_y_min), "activate", (GCallback)activate_entry_ymin, contoursplot); g_signal_connect (G_OBJECT (entry_y_max), "activate", (GCallback)activate_entry_ymax, contoursplot); } /****************************************************************************************/ static void set_ranges_dialog(GtkWidget* contoursplot) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* parentWindow = NULL; GtkWidget* hbox = NULL; gtk_window_set_title (GTK_WINDOW (window), _("Set ranges")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)contoursplot); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show(hbox); add_ranges_frame(hbox, contoursplot); parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } /****************************************************************************************/ static void spin_hminor_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_set_ticks_hminor(GABEDIT_ContoursPLOT(contoursplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void spin_hmajor_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_set_ticks_hmajor(GABEDIT_ContoursPLOT(contoursplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void spin_vminor_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_set_ticks_vminor(GABEDIT_ContoursPLOT(contoursplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void spin_vmajor_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_set_ticks_vmajor(GABEDIT_ContoursPLOT(contoursplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void spin_length_ticks_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_set_ticks_length(GABEDIT_ContoursPLOT(contoursplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void add_ticks_frame(GtkWidget* hbox, GtkWidget* contoursplot) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* label = NULL; GtkWidget* spin_hmajor = NULL; GtkWidget* spin_hminor = NULL; GtkWidget* spin_vmajor = NULL; GtkWidget* spin_vminor = NULL; GtkWidget* spin_length = NULL; frame=gtk_frame_new(_("Ticks")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("X Major: ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_hmajor=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_hmajor, TRUE, FALSE, 2); gtk_widget_show(spin_hmajor); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Y Major: ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_vmajor=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_vmajor, TRUE, FALSE, 2); gtk_widget_show(spin_vmajor); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("X Minor: ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_hminor=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_hminor, TRUE, FALSE, 2); gtk_widget_show(spin_hminor); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Y Minor: ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_vminor=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_vminor, TRUE, FALSE, 2); gtk_widget_show(spin_vminor); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Length: ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_length=gtk_spin_button_new_with_range(3, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_length, TRUE, FALSE, 2); gtk_widget_show(spin_length); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_hmajor), GABEDIT_ContoursPLOT(contoursplot)->hmajor_ticks); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_hminor), GABEDIT_ContoursPLOT(contoursplot)->hminor_ticks); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_vmajor), GABEDIT_ContoursPLOT(contoursplot)->vmajor_ticks); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_vminor), GABEDIT_ContoursPLOT(contoursplot)->vminor_ticks); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_length), GABEDIT_ContoursPLOT(contoursplot)->length_ticks); g_signal_connect(G_OBJECT(spin_hmajor), "value-changed", G_CALLBACK(spin_hmajor_changed_value), contoursplot); g_signal_connect(G_OBJECT(spin_hminor), "value-changed", G_CALLBACK(spin_hminor_changed_value), contoursplot); g_signal_connect(G_OBJECT(spin_vmajor), "value-changed", G_CALLBACK(spin_vmajor_changed_value), contoursplot); g_signal_connect(G_OBJECT(spin_vminor), "value-changed", G_CALLBACK(spin_vminor_changed_value), contoursplot); g_signal_connect(G_OBJECT(spin_length), "value-changed", G_CALLBACK(spin_length_ticks_changed_value), contoursplot); } /****************************************************************************************/ static void set_ticks_dialog(GtkWidget* contoursplot) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* hbox = NULL; GtkWidget* parentWindow = NULL; gtk_window_set_title (GTK_WINDOW (window), _("Set ticks")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)contoursplot); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show(hbox); add_ticks_frame(hbox, contoursplot); parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } /****************************************************************************************/ static void spin_right_margins_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_set_margins_right(GABEDIT_ContoursPLOT(contoursplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void spin_left_margins_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_set_margins_left(GABEDIT_ContoursPLOT(contoursplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void spin_bottom_margins_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_set_margins_bottom(GABEDIT_ContoursPLOT(contoursplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void spin_top_margins_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_set_margins_top(GABEDIT_ContoursPLOT(contoursplot), gtk_spin_button_get_value(spinbutton)); } } /****************************************************************************************/ static void add_margins_frame(GtkWidget* hbox, GtkWidget* contoursplot) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* label = NULL; GtkWidget* spin_left_margins = NULL; GtkWidget* spin_right_margins = NULL; GtkWidget* spin_top_margins = NULL; GtkWidget* spin_bottom_margins = NULL; frame=gtk_frame_new(_("Margins")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Left: ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_left_margins=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_left_margins, TRUE, FALSE, 2); gtk_widget_show(spin_left_margins); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Top: ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_top_margins=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_top_margins, TRUE, FALSE, 2); gtk_widget_show(spin_top_margins); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Right: ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_right_margins=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_right_margins, TRUE, FALSE, 2); gtk_widget_show(spin_right_margins); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(hbox_frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Bottom: ")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_bottom_margins=gtk_spin_button_new_with_range(0, 30, 1); gtk_box_pack_start(GTK_BOX(hbox), spin_bottom_margins, TRUE, FALSE, 2); gtk_widget_show(spin_bottom_margins); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_left_margins), GABEDIT_ContoursPLOT(contoursplot)->left_margins); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_right_margins), GABEDIT_ContoursPLOT(contoursplot)->right_margins); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_top_margins), GABEDIT_ContoursPLOT(contoursplot)->top_margins); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_bottom_margins), GABEDIT_ContoursPLOT(contoursplot)->bottom_margins); g_signal_connect(G_OBJECT(spin_left_margins), "value-changed", G_CALLBACK(spin_left_margins_changed_value), contoursplot); g_signal_connect(G_OBJECT(spin_right_margins), "value-changed", G_CALLBACK(spin_right_margins_changed_value), contoursplot); g_signal_connect(G_OBJECT(spin_top_margins), "value-changed", G_CALLBACK(spin_top_margins_changed_value), contoursplot); g_signal_connect(G_OBJECT(spin_bottom_margins), "value-changed", G_CALLBACK(spin_bottom_margins_changed_value), contoursplot); } /****************************************************************************************/ static void set_margins_dialog(GtkWidget* contoursplot) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* hbox = NULL; GtkWidget* parentWindow = NULL; gtk_window_set_title (GTK_WINDOW (window), _("Set margins")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)contoursplot); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show(hbox); add_margins_frame(hbox, contoursplot); parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } /****************************************************************************************/ static void reflect_x_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_reflect_x (GABEDIT_ContoursPLOT(contoursplot), gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void reflect_y_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_reflect_y (GABEDIT_ContoursPLOT(contoursplot), gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void add_reflexion_frame(GtkWidget* hbox, GtkWidget* contoursplot) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* reflect_x_button; GtkWidget* reflect_y_button; frame=gtk_frame_new(_("Axes")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); reflect_x_button = gtk_check_button_new_with_label (_("Reflect X")); gtk_box_pack_start(GTK_BOX(hbox_frame), reflect_x_button, FALSE, FALSE, 2); gtk_widget_show(reflect_x_button); reflect_y_button = gtk_check_button_new_with_label (_("Reflect Y")); gtk_box_pack_start(GTK_BOX(hbox_frame), reflect_y_button, FALSE, FALSE, 2); gtk_widget_show(reflect_y_button); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(reflect_x_button), GABEDIT_ContoursPLOT(contoursplot)->reflect_x); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(reflect_y_button), GABEDIT_ContoursPLOT(contoursplot)->reflect_y); g_signal_connect (G_OBJECT (reflect_x_button), "toggled", (GCallback)reflect_x_toggled, contoursplot); g_signal_connect (G_OBJECT (reflect_y_button), "toggled", (GCallback)reflect_y_toggled, contoursplot); } /****************************************************************************************/ static void show_left_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_show_left_legends (GABEDIT_ContoursPLOT(contoursplot), gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void show_right_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_show_right_legends (GABEDIT_ContoursPLOT(contoursplot), gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void show_top_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_show_top_legends (GABEDIT_ContoursPLOT(contoursplot), gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void show_bottom_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_show_bottom_legends (GABEDIT_ContoursPLOT(contoursplot), gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void add_legends_frame(GtkWidget* hbox, GtkWidget* contoursplot) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* show_left; GtkWidget* show_right; GtkWidget* show_top; GtkWidget* show_bottom; frame=gtk_frame_new("Legends"); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); show_left = gtk_check_button_new_with_label (_("Left")); gtk_box_pack_start(GTK_BOX(hbox_frame), show_left, FALSE, FALSE, 2); gtk_widget_show(show_left); show_right = gtk_check_button_new_with_label (_("Right")); gtk_box_pack_start(GTK_BOX(hbox_frame), show_right, FALSE, FALSE, 2); gtk_widget_show(show_right); show_top = gtk_check_button_new_with_label (_("Top")); gtk_box_pack_start(GTK_BOX(hbox_frame), show_top, FALSE, FALSE, 2); gtk_widget_show(show_top); show_bottom = gtk_check_button_new_with_label (_("Bottom")); gtk_box_pack_start(GTK_BOX(hbox_frame), show_bottom, FALSE, FALSE, 2); gtk_widget_show(show_bottom); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(show_left), GABEDIT_ContoursPLOT(contoursplot)->show_left_legends); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(show_right), GABEDIT_ContoursPLOT(contoursplot)->show_right_legends); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(show_top), GABEDIT_ContoursPLOT(contoursplot)->show_top_legends); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(show_bottom), GABEDIT_ContoursPLOT(contoursplot)->show_bottom_legends); g_signal_connect (G_OBJECT (show_left), "toggled", (GCallback)show_left_toggled, contoursplot); g_signal_connect (G_OBJECT (show_right), "toggled", (GCallback)show_right_toggled, contoursplot); g_signal_connect (G_OBJECT (show_top), "toggled", (GCallback)show_top_toggled, contoursplot); g_signal_connect (G_OBJECT (show_bottom), "toggled", (GCallback)show_bottom_toggled, contoursplot); } /****************************************************************************************/ static void h_major_grids_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_enable_grids (GABEDIT_ContoursPLOT(contoursplot), GABEDIT_ContoursPLOT_HMAJOR_GRID, gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void h_minor_grids_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_enable_grids (GABEDIT_ContoursPLOT(contoursplot), GABEDIT_ContoursPLOT_HMINOR_GRID, gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void v_major_grids_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_enable_grids (GABEDIT_ContoursPLOT(contoursplot), GABEDIT_ContoursPLOT_VMAJOR_GRID, gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void v_minor_grids_toggled(GtkToggleButton *togglebutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); gabedit_contoursplot_enable_grids (GABEDIT_ContoursPLOT(contoursplot), GABEDIT_ContoursPLOT_VMINOR_GRID, gtk_toggle_button_get_active(togglebutton)); } } /****************************************************************************************/ static void add_grid_frame(GtkWidget* hbox, GtkWidget* contoursplot) { GtkWidget* frame = NULL; GtkWidget* hbox_frame = NULL; GtkWidget* h_major; GtkWidget* h_minor; GtkWidget* v_major; GtkWidget* v_minor; frame=gtk_frame_new(_("Grid")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 2); gtk_widget_show(frame); hbox_frame=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox_frame); gtk_widget_show(hbox_frame); h_major = gtk_check_button_new_with_label (_("H major")); gtk_box_pack_start(GTK_BOX(hbox_frame), h_major, FALSE, FALSE, 2); gtk_widget_show(h_major); v_major = gtk_check_button_new_with_label (_("V major")); gtk_box_pack_start(GTK_BOX(hbox_frame), v_major, FALSE, FALSE, 2); gtk_widget_show(v_major); h_minor = gtk_check_button_new_with_label (_("H minor")); gtk_box_pack_start(GTK_BOX(hbox_frame), h_minor, FALSE, FALSE, 2); gtk_widget_show(h_minor); v_minor = gtk_check_button_new_with_label (_("V minor")); gtk_box_pack_start(GTK_BOX(hbox_frame), v_minor, FALSE, FALSE, 2); gtk_widget_show(v_minor); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(h_major), GABEDIT_ContoursPLOT(contoursplot)->hmajor_grid); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(h_minor), GABEDIT_ContoursPLOT(contoursplot)->hminor_grid); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(v_major), GABEDIT_ContoursPLOT(contoursplot)->vmajor_grid); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(v_minor), GABEDIT_ContoursPLOT(contoursplot)->vminor_grid); g_signal_connect (G_OBJECT (h_major), "toggled", (GCallback)h_major_grids_toggled, contoursplot); g_signal_connect (G_OBJECT (h_minor), "toggled", (GCallback)h_minor_grids_toggled, contoursplot); g_signal_connect (G_OBJECT (v_major), "toggled", (GCallback)v_major_grids_toggled, contoursplot); g_signal_connect (G_OBJECT (v_minor), "toggled", (GCallback)v_minor_grids_toggled, contoursplot); } /****************************************************************************************/ static void set_all_dialog(GtkWidget* contoursplot) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* parentWindow = NULL; GtkWidget* hbox = NULL; GtkWidget* vbox = NULL; gtk_window_set_title (GTK_WINDOW (window), _("Set")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)contoursplot); vbox=gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox); gtk_widget_show(vbox); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 1); add_ranges_frame(hbox, contoursplot); gtk_widget_show(hbox); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 1); add_margins_frame(hbox, contoursplot); gtk_widget_show(hbox); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 1); add_labels_frame(hbox, contoursplot); add_font_size_frame(hbox, contoursplot); add_digits_frame(hbox, contoursplot); gtk_widget_show(hbox); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 1); add_ticks_frame(hbox, contoursplot); gtk_widget_show(hbox); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 1); add_reflexion_frame(hbox, contoursplot); add_legends_frame(hbox, contoursplot); add_grid_frame(hbox, contoursplot); gtk_widget_show(hbox); parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } /****************************************************************************************/ static void gabedit_contoursplot_save_gabedit_lines(GabeditContoursPlot *contoursplot, FILE* file) { gint i; fprintf(file,"lines %d\n", contoursplot->nObjectsLine); for(i=0;inObjectsLine;i++) { fprintf(file,"%lf %lf %lf %lf %d %d %lf %lf %lf %d\n", contoursplot->objectsLine[i].x1, contoursplot->objectsLine[i].y1, contoursplot->objectsLine[i].x2, contoursplot->objectsLine[i].y2, contoursplot->objectsLine[i].width, contoursplot->objectsLine[i].arrow_size, SCALE(contoursplot->objectsLine[i].color.red), SCALE(contoursplot->objectsLine[i].color.green), SCALE(contoursplot->objectsLine[i].color.blue), contoursplot->objectsLine[i].style ); } } /****************************************************************************************/ static void gabedit_contoursplot_save_gabedit_texts(GabeditContoursPlot *contoursplot, FILE* file) { gint i; fprintf(file,"texts %d\n", contoursplot->nObjectsText); for(i=0;inObjectsText;i++) { fprintf(file,"%lf %lf %lf\n", contoursplot->objectsText[i].x, contoursplot->objectsText[i].y, contoursplot->objectsText[i].angle ); fprintf(file,"%s\n", contoursplot->objectsText[i].str); } } /*************************************************************************************/ static gchar *get_suffix_name_file(const gchar* allname) { gchar *filename= g_path_get_basename(allname); gchar *dirname= g_path_get_dirname(allname); gchar *temp= g_strdup(filename); gint len=strlen(filename); gint i; gchar* name = NULL; if(!allname || strlen(allname)<1) return g_strdup("error"); filename= g_path_get_basename(allname); dirname= g_path_get_dirname(allname); temp= g_strdup(filename); len=strlen(filename); for(i=len;i>0;i--) if(temp[i]=='.') { temp[i] = '\0'; break; } name = g_strdup_printf("%s%s%s",dirname,G_DIR_SEPARATOR_S,temp); if(temp) g_free(temp); if(dirname) g_free(dirname); if(filename) g_free(filename); if(strcmp(name,".")==0) name = g_strdup(g_get_current_dir()); return name; } /*************************************************************************************/ static gchar *get_filename_png(const gchar* allname, gint i) { gchar *bas = get_suffix_name_file(allname); if(bas) { gchar* fn = g_strdup_printf("%s_%d.png",bas,i); g_free(bas); return fn; } return g_strdup_printf("%d.png",i); } /****************************************************************************************/ static void gabedit_contoursplot_save_gabedit_images(GabeditContoursPlot *contoursplot, FILE* file, gchar* fileName) { gint i; gchar *fn; fprintf(file,"images %d\n", contoursplot->nObjectsImage); for(i=0;inObjectsImage;i++) { fprintf(file,"%lf %lf %lf %lf\n", contoursplot->objectsImage[i].x, contoursplot->objectsImage[i].y, contoursplot->objectsImage[i].width, contoursplot->objectsImage[i].height ); fn = get_filename_png(fileName, i); fprintf(file,"%s\n", fn); cairo_surface_write_to_png (contoursplot->objectsImage[i].image,fn); g_free(fn); } } /****************************************************************************************/ static void gabedit_contoursplot_save_gabedit_parameters(GabeditContoursPlot *contoursplot, FILE* file) { GdkColor foreColor; GdkColor backColor; GdkGCValues gc_values; GdkColormap *colormap; colormap = gdk_window_get_colormap(GTK_WIDGET(contoursplot)->window); gdk_gc_get_values(contoursplot->back_gc, &gc_values); gdk_colormap_query_color(colormap, gc_values.foreground.pixel,&backColor); gdk_gc_get_values(contoursplot->fore_gc, &gc_values); gdk_colormap_query_color(colormap, gc_values.foreground.pixel,&foreColor); fprintf(file,"theme %d %d %d %d %d %d %d\n", gc_values.line_width, (gint)foreColor.red, (gint)foreColor.green,(gint)foreColor.blue, (gint)backColor.red, (gint)backColor.green,(gint)backColor.blue); fprintf(file,"digits %d %d\n", contoursplot->x_legends_digits, contoursplot->y_legends_digits); fprintf(file,"ticks %d %d %d %d %d\n", contoursplot->length_ticks, contoursplot->hmajor_ticks, contoursplot->hminor_ticks, contoursplot->vmajor_ticks, contoursplot->vminor_ticks); fprintf(file,"margins %d %d %d %d\n", contoursplot->left_margins, contoursplot->top_margins, contoursplot->right_margins, contoursplot->bottom_margins); fprintf(file,"grid %d %d %d %d\n", contoursplot->hmajor_grid, contoursplot->hminor_grid, contoursplot->vmajor_grid, contoursplot->vminor_grid); fprintf(file,"legends %d %d %d %d\n", contoursplot->show_left_legends, contoursplot->show_right_legends, contoursplot->show_top_legends, contoursplot->show_bottom_legends); fprintf(file,"axes %d %d\n", contoursplot->reflect_x, contoursplot->reflect_y); fprintf(file,"fonts %d\n", contoursplot->font_size); fprintf(file,"minmax %lf %lf %lf %lf\n", contoursplot->xmin, contoursplot->xmax, contoursplot->ymin, contoursplot->ymax); if(contoursplot->h_label_str) { fprintf(file,"hlabel 1\n"); fprintf(file,"%s\n", contoursplot->h_label_str); } else fprintf(file,"hlabel 0\n"); if(contoursplot->v_label_str) { fprintf(file,"vlabel 1\n"); fprintf(file,"%s\n", contoursplot->v_label_str); } else fprintf(file,"vlabel 0\n"); } /****************************************************************************************/ static void gabedit_contoursplot_save_gabedit_contour(ContourData* contour, FILE* file) { gint i; fprintf(file,"contourline %lf %lf %lf %d %d\n", SCALE(contour->line_color.red), SCALE(contour->line_color.green), SCALE(contour->line_color.blue), contour->line_width, contour->line_style); fprintf(file,"contourpoint %lf %lf %lf %d %s\n", SCALE(contour->point_color.red), SCALE(contour->point_color.green), SCALE(contour->point_color.blue), contour->point_size, contour->point_str); fprintf(file,"size %d\n", contour->size); fprintf(file,"value %lf\n", contour->value); if(contour->label) fprintf(file,"label 1 %lf %lf %s\n", contour->xlabel, contour->ylabel, contour->label); else fprintf(file,"label 0 0 0\n"); for(i=0;isize;i++) fprintf(file,"%lf %lf %d\n", contour->x[i],contour->y[i],contour->index[i]); } /****************************************************************************************/ static void gabedit_contoursplot_save_gabedit_data(ContoursPlotData* data, FILE* file) { gint i; fprintf(file, "datax %d %lf %lf\n",data->xsize, data->xmin, data->xmax); fprintf(file, "datay %d %lf %lf\n",data->ysize, data->ymin, data->ymax); fprintf(file, "dataz %lf %lf\n", data->zmin, data->zmax); for(i=0;ixsize*data->ysize; i++) fprintf(file, "%f\n",data->zValues[i]); fprintf(file, "ncontours %d\n",data->nContours); for(i=0;inContours; i++) gabedit_contoursplot_save_gabedit_contour(&data->contours[i], file); } /****************************************************************************************/ static void gabedit_contoursplot_save_gabedit_datas(GabeditContoursPlot *contoursplot, FILE* file) { gint nDatas = 0; ContoursPlotData* data; GList *current_node=g_list_first(GABEDIT_ContoursPLOT(contoursplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) nDatas++; fprintf(file,"ndatas %d\n",nDatas); if(nDatas<1) return; current_node=g_list_first(GABEDIT_ContoursPLOT(contoursplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(ContoursPlotData*)current_node->data; gabedit_contoursplot_save_gabedit_data(data, file); } } /****************************************************************************************/ static void gabedit_contoursplot_save_gabedit(GtkWidget* contoursplot, gchar* fileName) { FILE* file = fopen(fileName, "w"); if(!file) return; fprintf(file,"[Gabedit format]\n"); fprintf(file,"[ContoursPLOT]\n"); gabedit_contoursplot_save_gabedit_parameters(GABEDIT_ContoursPLOT(contoursplot), file); gabedit_contoursplot_save_gabedit_texts(GABEDIT_ContoursPLOT(contoursplot), file); gabedit_contoursplot_save_gabedit_lines(GABEDIT_ContoursPLOT(contoursplot), file); gabedit_contoursplot_save_gabedit_images(GABEDIT_ContoursPLOT(contoursplot), file,fileName); gabedit_contoursplot_save_gabedit_datas(GABEDIT_ContoursPLOT(contoursplot), file); fclose(file); } /**************************************************************************/ static void saveAsGabedit(GtkFileChooser *SelecFile, gint response_id) { gchar *fileName; GtkWidget* contoursplot = g_object_get_data (G_OBJECT (SelecFile), "ContoursPLOT"); if(response_id != GTK_RESPONSE_OK) return; if(!GABEDIT_IS_ContoursPLOT(contoursplot)) return; fileName = gtk_file_chooser_get_filename(SelecFile); gabedit_contoursplot_save_gabedit(contoursplot, fileName); } /********************************************************************************/ static void saveAsGabeditDlg(GtkWidget* contoursplot) { GtkFileFilter *filter; GtkWidget *dialog; GtkWidget *parentWindow; dialog = g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG, "action", GTK_FILE_CHOOSER_ACTION_SAVE, "file-system-backend", "gtk+", "select-multiple", FALSE, NULL); gtk_window_set_title (GTK_WINDOW (dialog), "Save as Gabedit format"); gtk_dialog_add_buttons (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_OK, NULL); filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, "*.gab"); gtk_file_filter_add_pattern (filter, "*.gab"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); g_signal_connect (dialog, "response", G_CALLBACK (saveAsGabedit),GTK_OBJECT(dialog)); g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy),GTK_OBJECT(dialog)); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog),"contoursplot.gab"); g_object_set_data (G_OBJECT (dialog), "ContoursPLOT",contoursplot); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); if(parentWindow) gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(parentWindow)); gtk_widget_show(dialog); } /****************************************************************************************/ static gboolean gabedit_contoursplot_read_gabedit_lines(GabeditContoursPlot *contoursplot, FILE* file) { gint i; gchar t[BSIZE]; gchar tmp[BSIZE]; gint style; if(contoursplot->objectsLine) { g_free(contoursplot->objectsLine); contoursplot->objectsLine = NULL; } if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d\n", tmp, &contoursplot->nObjectsLine); if(contoursplot->nObjectsLine>0) contoursplot->objectsLine = g_malloc(contoursplot->nObjectsLine*sizeof(ContoursPlotObjectLine)); for(i=0;inObjectsLine;i++) { gdouble r,g,b; if(!fgets(t,BSIZE,file)) { contoursplot->nObjectsLine= 0; g_free(contoursplot->objectsLine); contoursplot->objectsLine = NULL; contoursplot->nObjectsLine = 0; return FALSE; } sscanf(t,"%lf %lf %lf %lf %d %d %lf %lf %lf %d\n", &contoursplot->objectsLine[i].x1, &contoursplot->objectsLine[i].y1, &contoursplot->objectsLine[i].x2, &contoursplot->objectsLine[i].y2, &contoursplot->objectsLine[i].width, &contoursplot->objectsLine[i].arrow_size, &r,&g,&b, &style ); contoursplot->objectsLine[i].style = style; contoursplot->objectsLine[i].color.red=SCALE2(r); contoursplot->objectsLine[i].color.green=SCALE2(g); contoursplot->objectsLine[i].color.blue=SCALE2(b); } reset_object_line_pixels(contoursplot); return TRUE; } /****************************************************************************************/ static gboolean gabedit_contoursplot_read_gabedit_texts(GabeditContoursPlot *contoursplot, FILE* file) { gint i; gchar t[BSIZE]; gchar tmp[BSIZE]; if(contoursplot->objectsText) { for(i=0;inObjectsText;i++) { if(contoursplot->objectsText[i].str) g_free(contoursplot->objectsText[i].str); if(contoursplot->objectsText[i].pango) g_object_unref(contoursplot->objectsText[i].pango); } g_free(contoursplot->objectsText); contoursplot->objectsText = NULL; contoursplot->nObjectsText = 0; } if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d\n", tmp, &contoursplot->nObjectsText); if(contoursplot->nObjectsText>0) { contoursplot->objectsText = g_malloc(contoursplot->nObjectsText*sizeof(ContoursPlotObjectText)); for(i=0;inObjectsText;i++) contoursplot->objectsText[i].str = NULL; } for(i=0;inObjectsText;i++) { if(!fgets(t,BSIZE,file)) { for(i=0;inObjectsText;i++) if(contoursplot->objectsText[i].str) g_free(contoursplot->objectsText[i].str); contoursplot->nObjectsText= 0; g_free(contoursplot->objectsText); contoursplot->objectsText = NULL; return FALSE; } sscanf(t,"%lf %lf %lf", &contoursplot->objectsText[i].x, &contoursplot->objectsText[i].y, &contoursplot->objectsText[i].angle); if(fgets(t,BSIZE,file)) { gint j; for(j=0;jobjectsText[i].str= g_strdup(t); } else contoursplot->objectsText[i].str = g_strdup(" "); } for(i=0;inObjectsText;i++) { set_object_text_pango(contoursplot, &contoursplot->objectsText[i]); set_object_text_pixels(contoursplot, &contoursplot->objectsText[i]); } return TRUE; } /****************************************************************************************/ static gboolean gabedit_contoursplot_read_gabedit_images(GabeditContoursPlot *contoursplot, FILE* file) { gint i; gchar t[BSIZE]; gchar tmp[BSIZE]; if(contoursplot->objectsImage) { for(i=0;inObjectsImage;i++) { if(contoursplot->objectsImage[i].fileName) g_free(contoursplot->objectsImage[i].fileName); if(contoursplot->objectsImage[i].image) cairo_surface_destroy (contoursplot->objectsImage[i].image); } g_free(contoursplot->objectsImage); contoursplot->objectsImage = NULL; contoursplot->nObjectsImage = 0; } if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d\n", tmp, &contoursplot->nObjectsImage); if(contoursplot->nObjectsImage>0) { contoursplot->objectsImage = g_malloc(contoursplot->nObjectsImage*sizeof(ContoursPlotObjectImage)); for(i=0;inObjectsImage;i++) contoursplot->objectsImage[i].fileName = NULL; for(i=0;inObjectsImage;i++) contoursplot->objectsImage[i].image = NULL; } for(i=0;inObjectsImage;i++) { gdouble x,y,w,h; if(!fgets(t,BSIZE,file)) { for(i=0;inObjectsImage;i++) if(contoursplot->objectsImage[i].fileName) g_free(contoursplot->objectsImage[i].fileName); contoursplot->nObjectsImage= 0; g_free(contoursplot->objectsImage); contoursplot->objectsImage = NULL; return FALSE; } sscanf(t,"%lf %lf %lf %lf", &x, &y, &w, &h); contoursplot->objectsImage[i].x = x; contoursplot->objectsImage[i].y = y; contoursplot->objectsImage[i].width = w; contoursplot->objectsImage[i].height = h; if(fgets(t,BSIZE,file)) { gint j; gint len; len = strlen(t); for(j=0;j=0;j--) if(t[j]==' ') t[j] = '\0'; contoursplot->objectsImage[i].fileName= g_strdup(t); } else contoursplot->objectsImage[i].fileName = g_strdup(" "); } for(i=0;inObjectsImage;i++) { contoursplot->objectsImage[i].image = cairo_image_surface_create_from_png (contoursplot->objectsImage[i].fileName); if(!contoursplot->objectsImage[i].image) { printf("I cannot read %s png file\n",contoursplot->objectsImage[i].fileName); } } reset_object_image_pixels(contoursplot); return TRUE; } /****************************************************************************************/ static gboolean gabedit_contoursplot_read_gabedit_parameters(GabeditContoursPlot *contoursplot, FILE* file) { gchar tmp[BSIZE]; gchar t[BSIZE]; gint i; gint r1, g1, b1; gint r2, g2, b2; GdkColor foreColor; GdkColor backColor; gint line_width; if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d %d %d %d %d %d %d", tmp, &line_width, &r1, &g1, &b1, &r2, &g2, &b2); foreColor.red = (gushort)r1; foreColor.green = (gushort)g1; foreColor.blue = (gushort)b1; backColor.red = (gushort)r2; backColor.green = (gushort)g2; backColor.blue = (gushort)b2; if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d %d", tmp, &contoursplot->x_legends_digits, &contoursplot->y_legends_digits); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d %d %d %d %d", tmp, &contoursplot->length_ticks, &contoursplot->hmajor_ticks, &contoursplot->hminor_ticks, &contoursplot->vmajor_ticks, &contoursplot->vminor_ticks); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d %d %d %d", tmp, &contoursplot->left_margins, &contoursplot->top_margins, &contoursplot->right_margins, &contoursplot->bottom_margins); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d %d %d %d", tmp, &contoursplot->hmajor_grid, &contoursplot->hminor_grid, &contoursplot->vmajor_grid, &contoursplot->vminor_grid); gabedit_contoursplot_enable_grids (GABEDIT_ContoursPLOT(contoursplot), GABEDIT_ContoursPLOT_HMAJOR_GRID, contoursplot->hmajor_grid); gabedit_contoursplot_enable_grids (GABEDIT_ContoursPLOT(contoursplot), GABEDIT_ContoursPLOT_HMINOR_GRID, contoursplot->hminor_grid); gabedit_contoursplot_enable_grids (GABEDIT_ContoursPLOT(contoursplot), GABEDIT_ContoursPLOT_VMAJOR_GRID, contoursplot->vmajor_grid); gabedit_contoursplot_enable_grids (GABEDIT_ContoursPLOT(contoursplot), GABEDIT_ContoursPLOT_VMINOR_GRID, contoursplot->vminor_grid); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d %d %d %d", tmp, &contoursplot->show_left_legends, &contoursplot->show_right_legends, &contoursplot->show_top_legends, &contoursplot->show_bottom_legends); gabedit_contoursplot_show_left_legends (GABEDIT_ContoursPLOT(contoursplot), contoursplot->show_left_legends); gabedit_contoursplot_show_right_legends (GABEDIT_ContoursPLOT(contoursplot), contoursplot->show_right_legends); gabedit_contoursplot_show_top_legends (GABEDIT_ContoursPLOT(contoursplot), contoursplot->show_top_legends); gabedit_contoursplot_show_bottom_legends (GABEDIT_ContoursPLOT(contoursplot), contoursplot->show_bottom_legends); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d %d", tmp, &contoursplot->reflect_x, &contoursplot->reflect_y); gabedit_contoursplot_reflect_x (GABEDIT_ContoursPLOT(contoursplot), contoursplot->reflect_x); gabedit_contoursplot_reflect_y (GABEDIT_ContoursPLOT(contoursplot), contoursplot->reflect_y); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d", tmp, &contoursplot->font_size); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %lf %lf %lf %lf", tmp, &contoursplot->xmin, &contoursplot->xmax, &contoursplot->ymin, &contoursplot->ymax); if(contoursplot->h_label_str) g_free(contoursplot->h_label_str); if(contoursplot->v_label_str) g_free(contoursplot->v_label_str); contoursplot->h_label_str = NULL; contoursplot->v_label_str = NULL; if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d",tmp,&i); if(i!=0) { gint j; if(!fgets(t,BSIZE,file)) return FALSE; for(j=0;jh_label_str = g_strdup(t); } if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d",tmp,&i); if(i!=0) { gint j; if(!fgets(t,BSIZE,file)) return FALSE; for(j=0;jv_label_str = g_strdup(t); } contoursplot_build_legends(contoursplot); contoursplot_calculate_legends_sizes(contoursplot); contoursplot_calculate_sizes(contoursplot); reset_theme(GTK_WIDGET(contoursplot), line_width, &foreColor, &backColor); return TRUE; } /****************************************************************************************/ static gboolean gabedit_contoursplot_read_gabedit_contour(ContourData* contour, FILE* file) { gint i; gchar tmp[BSIZE]; gchar t[BSIZE]; gdouble r,g,b; gint style; contour->size = 0; contour->x = NULL; contour->y = NULL; contour->index = NULL; contour->point_pango = NULL; if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %lf %lf %lf %d %d", tmp, &r,&g,&b, &contour->line_width, &style); contour->line_style = style; contour->line_color.red = SCALE2(r); contour->line_color.green = SCALE2(g); contour->line_color.blue = SCALE2(b); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %lf %lf %lf %d %s", tmp, &r,&g,&b, &contour->point_size, contour->point_str); contour->point_color.red = SCALE2(r); contour->point_color.green = SCALE2(g); contour->point_color.blue = SCALE2(b); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d", tmp, &contour->size); if(contour->size<1) return TRUE; if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %lf", tmp, &contour->value); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d",tmp,&i); contour->label = NULL; contour->xlabel = 0; contour->ylabel = 0; if(i!=0) { contour->label = g_strdup(t); sscanf(t,"%s %d %lf %lf %s",tmp,&i,&contour->xlabel, &contour->ylabel, contour->label); } contour->x = g_malloc(contour->size*sizeof(gdouble)); contour->y = g_malloc(contour->size*sizeof(gdouble)); contour->index = g_malloc(contour->size*sizeof(gint)); for(i=0;isize;i++) { if(!fgets(t,BSIZE,file)) { contour->size = 0; if(contour->x) g_free(contour->x); if(contour->y) g_free(contour->y); if(contour->index) g_free(contour->index); contour->x = NULL; contour->y = NULL; contour->index = NULL; return FALSE; } sscanf(t,"%lf %lf %d", &contour->x[i],&contour->y[i], &contour->index[i]); } return TRUE; } /****************************************************************************************/ static gboolean gabedit_contoursplot_read_gabedit_data(ContoursPlotData* data, FILE* file) { gint i; gchar tmp[BSIZE]; gchar t[BSIZE]; gboolean Ok = TRUE; data->xsize = 0; data->ysize = 0; data->zValues = NULL; if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t, "%s %d %lf %lf",tmp, &data->xsize, &data->xmin, &data->xmax); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t, "%s %d %lf %lf",tmp, &data->ysize, &data->ymin, &data->ymax); if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t, "%s %lf %lf",tmp, &data->zmin, &data->zmax); if( data->xsize <1) return FALSE; if( data->ysize <1) return FALSE; data->zValues = g_malloc(data->xsize*data->ysize*sizeof(gdouble)); for(i=0;ixsize*data->ysize; i++) { if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t, "%lf",&data->zValues[i]); } data->nContours = 0; data->contours = NULL; if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t, "%s %d\n",tmp, &data->nContours); if(data->nContours<1) return TRUE; data->contours = g_malloc(data->nContours*sizeof(ContourData)); for(i=0;inContours; i++) { Ok = gabedit_contoursplot_read_gabedit_contour(&data->contours[i], file); if(!Ok) break; } if(!Ok) { g_free(data->contours); data->contours = NULL; data->nContours = 0; } return Ok; } /****************************************************************************************/ static gboolean gabedit_contoursplot_read_gabedit_datas(GabeditContoursPlot *contoursplot, FILE* file) { gint nDatas = 0; gchar tmp[BSIZE]; gchar t[BSIZE]; gint i; if(!fgets(t,BSIZE,file)) return FALSE; sscanf(t,"%s %d",tmp, &nDatas); if(nDatas<1) return TRUE; if(GABEDIT_ContoursPLOT(contoursplot)->data_list) { g_list_foreach(GABEDIT_ContoursPLOT(contoursplot)->data_list, (GFunc)g_free, NULL); g_list_free(GABEDIT_ContoursPLOT(contoursplot)->data_list); GABEDIT_ContoursPLOT(contoursplot)->data_list = NULL; } for(i=0;ixsize>0 && data->ysize>0 && data->zValues) { gabedit_contoursplot_add_data (GABEDIT_ContoursPLOT(contoursplot), data); } } return TRUE; } /****************************************************************************************/ static gboolean gabedit_contoursplot_read_gabedit(GtkWidget* contoursplot, gchar* fileName) { gchar t[BSIZE]; FILE* file = fopen(fileName, "rb"); if(!file) return FALSE; if(!fgets(t,BSIZE,file)) return FALSE; uppercase(t); if(!strstr(t,"[GABEDIT FORMAT]")) { contoursplot_message(_("This is not a Gabedit file\n")); fclose(file); return FALSE; } while(!feof(file)) { if(!fgets(t,BSIZE,file)) { fclose(file); return FALSE; } if(strstr(t,"[ContoursPLOT]")) { delete_objects_text(contoursplot); delete_objects_line(contoursplot); delete_contours(contoursplot,NULL); if(GABEDIT_ContoursPLOT(contoursplot)->data_list) { g_list_foreach(GABEDIT_ContoursPLOT(contoursplot)->data_list, (GFunc)g_free, NULL); g_list_free(GABEDIT_ContoursPLOT(contoursplot)->data_list); GABEDIT_ContoursPLOT(contoursplot)->data_list = NULL; } gabedit_contoursplot_read_gabedit_parameters(GABEDIT_ContoursPLOT(contoursplot), file); gabedit_contoursplot_read_gabedit_texts(GABEDIT_ContoursPLOT(contoursplot), file); gabedit_contoursplot_read_gabedit_lines(GABEDIT_ContoursPLOT(contoursplot), file); gabedit_contoursplot_read_gabedit_images(GABEDIT_ContoursPLOT(contoursplot), file); gabedit_contoursplot_read_gabedit_datas(GABEDIT_ContoursPLOT(contoursplot), file); reset_color_map(contoursplot, NULL); fclose(file); return TRUE; } } contoursplot_message(_("I can not read the ContoursPlot data\n")); fclose(file); return FALSE; } /**************************************************************************/ static void readAGabedit(GtkFileChooser *SelecFile, gint response_id) { gchar *fileName; GtkWidget* contoursplot = g_object_get_data (G_OBJECT (SelecFile), "ContoursPLOT"); if(response_id != GTK_RESPONSE_OK) return; if(!GABEDIT_IS_ContoursPLOT(contoursplot)) return; fileName = gtk_file_chooser_get_filename(SelecFile); gabedit_contoursplot_read_gabedit(contoursplot, fileName); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /********************************************************************************/ static void readAGabeditDlg(GtkWidget* contoursplot) { GtkFileFilter *filter; GtkWidget *dialog; GtkWidget *parentWindow; dialog = g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG, "action", GTK_FILE_CHOOSER_ACTION_OPEN, "file-system-backend", "gtk+", "select-multiple", FALSE, NULL); gtk_window_set_title (GTK_WINDOW (dialog), "Read a Gabedit file"); gtk_dialog_add_buttons (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, "*.gab"); gtk_file_filter_add_pattern (filter, "*.gab"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); g_signal_connect (dialog, "response", G_CALLBACK (readAGabedit),GTK_OBJECT(dialog)); g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy),GTK_OBJECT(dialog)); g_object_set_data (G_OBJECT (dialog), "ContoursPLOT",contoursplot); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); if(parentWindow) gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(parentWindow)); gtk_widget_show(dialog); } /*************************************************************************************/ static void Waiting(gdouble tsecond) { GTimer *timer; gdouble elaps; gulong m ; timer =g_timer_new( ); g_timer_start( timer ); g_timer_reset( timer ); do{ elaps = g_timer_elapsed( timer,&m); }while(elapsallocation.width, widget->allocation.height); contoursplot->cairo_export = cairo_create(surface); gabedit_contoursplot_draw (widget); cairo_show_page(contoursplot->cairo_export); cairo_surface_destroy(surface); cairo_destroy(contoursplot->cairo_export); contoursplot->cairo_export = NULL; return; } else if(!strcmp(fileType,"ps")) { cairo_surface_t *surface; surface = cairo_ps_surface_create(fileName, widget->allocation.width, widget->allocation.height); contoursplot->cairo_export = cairo_create(surface); gabedit_contoursplot_draw (widget); cairo_show_page(contoursplot->cairo_export); cairo_surface_destroy(surface); cairo_destroy(contoursplot->cairo_export); contoursplot->cairo_export = NULL; return; } else if(!strcmp(fileType,"eps")) { cairo_surface_t *surface; surface = cairo_ps_surface_create(fileName, widget->allocation.width, widget->allocation.height); cairo_ps_surface_set_eps(surface, TRUE); contoursplot->cairo_export = cairo_create(surface); gabedit_contoursplot_draw (widget); cairo_show_page(contoursplot->cairo_export); cairo_surface_destroy(surface); cairo_destroy(contoursplot->cairo_export); contoursplot->cairo_export = NULL; return; } else if(!strcmp(fileType,"svg")) { cairo_surface_t *surface; surface = cairo_svg_surface_create(fileName, widget->allocation.width, widget->allocation.height); contoursplot->cairo_export = cairo_create(surface); gabedit_contoursplot_draw (widget); cairo_show_page(contoursplot->cairo_export); cairo_surface_destroy(surface); cairo_destroy(contoursplot->cairo_export); contoursplot->cairo_export = NULL; return; } } /**************************************************************************/ static void exportImage(GtkFileChooser *SelecFile, gint response_id) { gchar *fileName; GtkWidget* contoursplot = g_object_get_data (G_OBJECT (SelecFile), "ContoursPLOT"); gchar* type = g_object_get_data (G_OBJECT (SelecFile), "ImageType"); if(response_id != GTK_RESPONSE_OK) return; fileName = gtk_file_chooser_get_filename(SelecFile); gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); Waiting(1.0); if(!GABEDIT_IS_ContoursPLOT(contoursplot)) return; gtk_widget_hide(contoursplot); gtk_widget_show(contoursplot); while( gtk_events_pending() ) gtk_main_iteration(); gabedit_contoursplot_export(GABEDIT_ContoursPLOT(contoursplot), fileName, type); } /********************************************************************************/ static void exportImageDlg(GtkWidget* contoursplot, gchar* type) { GtkFileFilter *filter; GtkWidget *dialog; gchar* tmp = NULL; GtkWidget *parentWindow; dialog = g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG, "action", GTK_FILE_CHOOSER_ACTION_SAVE, "file-system-backend", "gtk+", "select-multiple", FALSE, NULL); gtk_window_set_title (GTK_WINDOW (dialog), _("Export Contours plot")); gtk_dialog_add_buttons (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_OK, NULL); filter = gtk_file_filter_new (); tmp = g_strdup_printf("*.%s",type); gtk_file_filter_set_name (filter, tmp); gtk_file_filter_add_pattern (filter, tmp); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); g_free(tmp); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); g_signal_connect (dialog, "response", G_CALLBACK (exportImage),GTK_OBJECT(dialog)); g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy),GTK_OBJECT(dialog)); g_object_set_data(G_OBJECT (dialog), "ImageType", type); tmp = g_strdup_printf("gabeditExport.%s",type); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog),tmp); g_free(tmp); g_object_set_data (G_OBJECT (dialog), "ContoursPLOT",contoursplot); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); if(parentWindow) gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(parentWindow)); gtk_widget_show(dialog); } /********************************************************************************/ static void activate_entry_label_contour_str(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; GtkWidget* contoursplot = NULL; ContourData* contour = NULL; if(!user_data || !G_IS_OBJECT(user_data)) return; contoursplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); contour = g_object_get_data(G_OBJECT (entry), "CurentContour"); if(contour->label) g_free(contour->label); contour->label = g_strdup(t); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /********************************************************************************/ static void activate_entry_label_contour_x(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; GtkWidget* contoursplot = NULL; ContourData* contour = NULL; if(!user_data || !G_IS_OBJECT(user_data)) return; contoursplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); contour = g_object_get_data(G_OBJECT (entry), "CurentContour"); contour->xlabel = atof(t); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /********************************************************************************/ static void activate_entry_label_contour_y(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; GtkWidget* contoursplot = NULL; ContourData* contour = NULL; if(!user_data || !G_IS_OBJECT(user_data)) return; contoursplot = GTK_WIDGET(user_data); t= gtk_entry_get_text(GTK_ENTRY(entry)); contour = g_object_get_data(G_OBJECT (entry), "CurentContour"); contour->ylabel = atof(t); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ static void spin_line_width_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); ContourData* contour = g_object_get_data(G_OBJECT (spinbutton), "CurentContour"); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if(contour) contour->line_width = gtk_spin_button_get_value(spinbutton); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /****************************************************************************************/ static void spin_line_color_changed_value(GtkColorButton *colorbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); ContourData* contour = g_object_get_data(G_OBJECT (colorbutton), "CurentContour"); GdkColor c; gtk_color_button_get_color (colorbutton, &c); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if(contour) contour->line_color = c; gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /********************************************************************************************************/ static void combo_line_style_changed_value (GtkComboBox *combobox, gpointer user_data) { GtkTreeIter iter; gchar* d = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); GtkWidget* contoursplot = GTK_WIDGET(user_data); ContourData* contour = g_object_get_data(G_OBJECT (combobox), "CurentContour"); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); gtk_tree_model_get (model, &iter, 0, &d, -1); if(!d) return; if(contour) { if (!strcmp(d,"Solid") ) { contour->line_style = GDK_LINE_SOLID; } else if (!strcmp(d,"On-Off dashed") ) {contour->line_style = GDK_LINE_ON_OFF_DASH; } else if (!strcmp(d,"Double dashed") ) { contour->line_style = GDK_LINE_DOUBLE_DASH;} } gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /****************************************************************************************/ static void spin_point_size_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); ContourData* contour = g_object_get_data(G_OBJECT (spinbutton), "CurentContour"); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if(contour) { contour->point_size = gtk_spin_button_get_value(spinbutton); contoursplot_build_points_contour(GABEDIT_ContoursPLOT(contoursplot), contour); } gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /********************************************************************************************************/ static void combo_point_style_changed_value (GtkComboBox *combobox, gpointer user_data) { GtkTreeIter iter; gchar* d = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); GtkWidget* contoursplot = GTK_WIDGET(user_data); ContourData* contour = g_object_get_data(G_OBJECT (combobox), "CurentContour"); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); gtk_tree_model_get (model, &iter, 0, &d, -1); if(!d) return; if(contour) { sprintf(contour->point_str,"%s",d); contoursplot_build_points_contour(GABEDIT_ContoursPLOT(contoursplot), contour); } gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /****************************************************************************************/ static void spin_point_color_changed_value(GtkColorButton *colorbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); ContourData* contour = g_object_get_data(G_OBJECT (colorbutton), "CurentContour"); GdkColor c; g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); gtk_color_button_get_color (colorbutton, &c); if(contour) { contour->point_color = c; contoursplot_build_points_contour(GABEDIT_ContoursPLOT(contoursplot), contour); } gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /********************************************************************************************************/ static GtkWidget *add_point_types_combo(GtkWidget *hbox, ContourData* contour) { GtkTreeIter iter; GtkTreeStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; gint i = 0; gint k = 0; /* 0x2605=star, 25C6=BLACK DIAMOND, 0x25B2= black triangle, 0x25B3=white triangle */ /* long int x =0x2605; printf("%d\n",x) in decimal*/ gchar* list [] = {"","+","x", "", "", "", "", "", "", "", "", "", ""}; gint n = G_N_ELEMENTS (list); store = gtk_tree_store_new (1,G_TYPE_STRING); for(i=0;ipoint_str)) k = i; } model = GTK_TREE_MODEL (store); combobox = gtk_combo_box_new_with_model (model); g_object_unref (model); gtk_box_pack_start (GTK_BOX (hbox), combobox, TRUE, TRUE, 1); renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "markup", 0, NULL); gtk_widget_show(combobox); gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), k); return combobox; } /********************************************************************************************************/ static GtkWidget *add_line_types_combo(GtkWidget *hbox) { GtkTreeIter iter; GtkTreeStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; store = gtk_tree_store_new (1,G_TYPE_STRING); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Solid", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "On-Off dashed", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Double dashed", -1); model = GTK_TREE_MODEL (store); combobox = gtk_combo_box_new_with_model (model); g_object_unref (model); gtk_box_pack_start (GTK_BOX (hbox), combobox, TRUE, TRUE, 1); renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", 0, NULL); return combobox; } /****************************************************************************************/ static gdouble evaluate_formula(G_CONST_RETURN gchar* t) { gdouble a = 1.0; gchar* pos = strstr(t,"/"); if(pos && pos[1]!='\0') a = atof(t)/atof(pos+1); else { pos = strstr(t,"*"); if(pos && pos[1]!='\0') a = atof(t)*atof(pos+1); else a = atof(t); } return a; } /****************************************************************************************/ static void activate_entry_scale_z(GtkEntry *entry, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); ContoursPlotData* data = g_object_get_data(G_OBJECT (entry), "CurentData"); gint loop; gdouble a; G_CONST_RETURN gchar* t; g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); t= gtk_entry_get_text(GTK_ENTRY(entry)); if(!t) return; a = evaluate_formula(t); if(data) { for(loop=0;loopxsize*data->ysize; loop++) data->zValues[loop] *= a; for(loop=0;loopnContours; loop++) { double b = data->contours[loop].value *a; free_one_contour(&data->contours[loop]); data->contours[loop] = get_contour_point(contoursplot, data, b); } } else { GList *current_node; current_node=g_list_first(GABEDIT_ContoursPLOT(contoursplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(ContoursPlotData*)current_node->data; for(loop=0;loopxsize*data->ysize; loop++) data->zValues[loop] *= a; for(loop=0;loopnContours; loop++) { double b = data->contours[loop].value*a; free_one_contour(&data->contours[loop]); data->contours[loop] = get_contour_point(contoursplot, data, b); } } } gtk_entry_set_text(GTK_ENTRY(entry),"1.0"); gtk_editable_set_position(GTK_EDITABLE(entry),3); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /****************************************************************************************/ static void activate_entry_scale_x(GtkEntry *entry, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); ContoursPlotData* data = g_object_get_data(G_OBJECT (entry), "CurentData"); gint loop,i; gdouble a; G_CONST_RETURN gchar* t; g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); t= gtk_entry_get_text(GTK_ENTRY(entry)); if(!t) return; a = evaluate_formula(t); if(data) { data->xmin *= a; data->xmax *= a; for(loop=0;loopnContours; loop++) for(i=0;icontours[loop].size; i++) data->contours[loop].x[i] *= a; } else { GList *current_node; current_node=g_list_first(GABEDIT_ContoursPLOT(contoursplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(ContoursPlotData*)current_node->data; data->xmin *= a; data->xmax *= a; for(loop=0;loopnContours; loop++) for(i=0;icontours[loop].size; i++) data->contours[loop].x[i] *= a; } } gtk_entry_set_text(GTK_ENTRY(entry),"1.0"); gtk_editable_set_position(GTK_EDITABLE(entry),3); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /****************************************************************************************/ static void activate_entry_scale_y(GtkEntry *entry, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); ContoursPlotData* data = g_object_get_data(G_OBJECT (entry), "CurentData"); gdouble a; gint loop,i; G_CONST_RETURN gchar* t; g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); t= gtk_entry_get_text(GTK_ENTRY(entry)); if(!t) return; a = evaluate_formula(t); if(data) { data->ymin *= a; data->ymax *= a; for(loop=0;loopnContours; loop++) for(i=0;icontours[loop].size; i++) data->contours[loop].y[i] *= a; } else { GList *current_node; current_node=g_list_first(GABEDIT_ContoursPLOT(contoursplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(ContoursPlotData*)current_node->data; data->ymin *= a; data->ymax *= a; for(loop=0;loopnContours; loop++) for(i=0;icontours[loop].size; i++) data->contours[loop].y[i] *= a; } } gtk_entry_set_text(GTK_ENTRY(entry),"1.0"); gtk_editable_set_position(GTK_EDITABLE(entry),3); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /****************************************************************************************/ static void activate_entry_shift_z(GtkEntry *entry, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); ContoursPlotData* data = g_object_get_data(G_OBJECT (entry), "CurentData"); gint loop; gdouble a; G_CONST_RETURN gchar* t; g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); t= gtk_entry_get_text(GTK_ENTRY(entry)); if(!t) return; a = evaluate_formula(t); if(data) { for(loop=0;loopxsize*data->ysize; loop++) data->zValues[loop] += a; for(loop=0;loopnContours; loop++) { double b = data->contours[loop].value+a; free_one_contour(&data->contours[loop]); data->contours[loop] = get_contour_point(contoursplot, data, b); } } else { GList *current_node; current_node=g_list_first(GABEDIT_ContoursPLOT(contoursplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(ContoursPlotData*)current_node->data; for(loop=0;loopxsize*data->ysize; loop++) data->zValues[loop] += a; for(loop=0;loopnContours; loop++) { double b = data->contours[loop].value+a; free_one_contour(&data->contours[loop]); data->contours[loop] = get_contour_point(contoursplot, data, b); } } } gtk_entry_set_text(GTK_ENTRY(entry),"0.0"); gtk_editable_set_position(GTK_EDITABLE(entry),3); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /****************************************************************************************/ static void activate_entry_shift_x(GtkEntry *entry, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); ContoursPlotData* data = g_object_get_data(G_OBJECT (entry), "CurentData"); gdouble a; gint i,loop; G_CONST_RETURN gchar* t; g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); t= gtk_entry_get_text(GTK_ENTRY(entry)); if(!t) return; a = evaluate_formula(t); if(data) { data->xmin += a; data->xmax += a; for(loop=0;loopnContours; loop++) for(i=0;icontours[loop].size; i++) data->contours[loop].x[i] += a; } else { GList *current_node; current_node=g_list_first(GABEDIT_ContoursPLOT(contoursplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(ContoursPlotData*)current_node->data; data->xmin += a; data->xmax += a; for(loop=0;loopnContours; loop++) for(i=0;icontours[loop].size; i++) data->contours[loop].x[i] += a; } } gtk_entry_set_text(GTK_ENTRY(entry),"0.0"); gtk_editable_set_position(GTK_EDITABLE(entry),3); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /****************************************************************************************/ static void activate_entry_shift_y(GtkEntry *entry, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* contoursplot = GTK_WIDGET(user_data); ContoursPlotData* data = g_object_get_data(G_OBJECT (entry), "CurentData"); gdouble a; gint i,loop; G_CONST_RETURN gchar* t; g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); t= gtk_entry_get_text(GTK_ENTRY(entry)); if(!t) return; a = evaluate_formula(t); if(data) { data->ymin += a; data->ymax += a; for(loop=0;loopnContours; loop++) for(i=0;icontours[loop].size; i++) data->contours[loop].y[i] += a; } else { GList *current_node; current_node=g_list_first(GABEDIT_ContoursPLOT(contoursplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(ContoursPlotData*)current_node->data; data->ymin += a; data->ymax += a; for(loop=0;loopnContours; loop++) for(i=0;icontours[loop].size; i++) data->contours[loop].y[i] += a; } } gtk_entry_set_text(GTK_ENTRY(entry),"0.0"); gtk_editable_set_position(GTK_EDITABLE(entry),3); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /****************************************************************************************/ static void add_contour_data_dialog(GtkWidget* window, GtkWidget* vbox_window, GabeditContoursPlot* contoursplot, ContoursPlotData* data, ContourData* contour) { gint i,j; GtkWidget* frame = NULL; GtkWidget* hbox = NULL; GtkWidget* vbox_frame = NULL; GtkWidget* table = NULL; GtkWidget* hbox1 = NULL; GtkWidget* label = NULL; GtkWidget* combo = NULL; GtkWidget* combo_point = NULL; GtkWidget* spin = NULL; GtkWidget* button = NULL; GtkWidget* spin_point = NULL; GtkWidget* button_point = NULL; GtkWidget* entry_label_contour_str = NULL; GtkWidget* entry_label_contour_x = NULL; GtkWidget* entry_label_contour_y = NULL; gchar t[100]; if(!contour) return; hbox1=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_window), hbox1, TRUE, FALSE, 2); gtk_widget_show(hbox1); frame = gtk_frame_new(_("Set line type")); gtk_box_pack_start(GTK_BOX(hbox1), frame, TRUE, FALSE, 2); gtk_widget_show(frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Line width :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin = gtk_spin_button_new_with_range(0, 10, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), contour->line_width); gtk_box_pack_start(GTK_BOX(hbox), spin, TRUE, FALSE, 2); gtk_widget_show(spin); g_object_set_data(G_OBJECT (window), "SpinLineWidth", spin); label=gtk_label_new(_("Line type :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); combo = add_line_types_combo(hbox); gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); if(contour->line_style == GDK_LINE_SOLID) gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); else if(contour->line_style == GDK_LINE_ON_OFF_DASH) gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 1); else if(contour->line_style == GDK_LINE_DOUBLE_DASH) gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 2); gtk_widget_show(combo); g_object_set_data(G_OBJECT (window), "ComboLineType", combo); label=gtk_label_new(_("Line color :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); button = gtk_color_button_new_with_color (&contour->line_color); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 2); gtk_widget_show(button); g_object_set_data(G_OBJECT (window), "ColorButton", button); frame = gtk_frame_new(_("Set point type")); gtk_box_pack_start(GTK_BOX(vbox_window), frame, TRUE, FALSE, 2); gtk_widget_show(frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Point size :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin_point = gtk_spin_button_new_with_range(0, 30, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_point), contour->point_size); gtk_box_pack_start(GTK_BOX(hbox), spin_point, TRUE, FALSE, 2); gtk_widget_show(spin_point); g_object_set_data(G_OBJECT (window), "SpinPointWidth", spin_point); label=gtk_label_new(_("Point type :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); combo_point = add_point_types_combo(hbox, contour); gtk_widget_show(combo_point); g_object_set_data(G_OBJECT (window), "ComboPointType", combo_point); label=gtk_label_new(_("Point color :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); button_point = gtk_color_button_new_with_color (&contour->point_color); gtk_box_pack_start(GTK_BOX(hbox), button_point, TRUE, FALSE, 2); gtk_widget_show(button_point); g_object_set_data(G_OBJECT (window), "ColorButton", button_point); frame = gtk_frame_new(_("Set label")); gtk_box_pack_start(GTK_BOX(vbox_window), frame, TRUE, FALSE, 2); gtk_widget_show(frame); vbox_frame=gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), vbox_frame); gtk_widget_show(vbox_frame); table = gtk_table_new(3,3,FALSE); gtk_container_add(GTK_CONTAINER(vbox_frame),table); i = 0; j = 0; add_label_at_table(table,_(" Label "),i,j,GTK_JUSTIFY_LEFT); j++; add_label_at_table(table," : ",i,j,GTK_JUSTIFY_LEFT); j++; entry_label_contour_str = gtk_entry_new (); add_widget_table(table,entry_label_contour_str,i,j); if(contour->label) sprintf(t,"%s",contour->label); else t[0] = '\0'; gtk_entry_set_text(GTK_ENTRY(entry_label_contour_str),t); i = 1; j = 0; add_label_at_table(table,_(" X label "),i,j,GTK_JUSTIFY_LEFT); j++; add_label_at_table(table," : ",i,j,GTK_JUSTIFY_LEFT); j++; entry_label_contour_x = gtk_entry_new (); add_widget_table(table,entry_label_contour_x,i,j); sprintf(t,"%0.10lf",contour->xlabel); gtk_entry_set_text(GTK_ENTRY(entry_label_contour_x),t); i = 2; j = 0; add_label_at_table(table,_(" X label "),i,j,GTK_JUSTIFY_LEFT); j++; add_label_at_table(table," : ",i,j,GTK_JUSTIFY_LEFT); j++; entry_label_contour_y = gtk_entry_new (); add_widget_table(table,entry_label_contour_y,i,j); sprintf(t,"%0.10lf",contour->ylabel); gtk_entry_set_text(GTK_ENTRY(entry_label_contour_y),t); gtk_widget_show_all(table); gtk_widget_show(window); g_object_set_data(G_OBJECT (spin), "CurentData", data); g_object_set_data(G_OBJECT (spin), "CurentContour", contour); g_signal_connect(G_OBJECT(spin), "value-changed", G_CALLBACK(spin_line_width_changed_value), contoursplot); g_object_set_data(G_OBJECT (button), "CurentData", data); g_object_set_data(G_OBJECT (button), "CurentContour", contour); g_signal_connect(G_OBJECT(button), "color-set", G_CALLBACK(spin_line_color_changed_value), contoursplot); g_signal_connect(G_OBJECT(combo), "changed", G_CALLBACK(combo_line_style_changed_value), contoursplot); g_object_set_data(G_OBJECT (combo), "CurentData", data); g_object_set_data(G_OBJECT (combo), "CurentContour", contour); g_signal_connect(G_OBJECT(combo_point), "changed", G_CALLBACK(combo_point_style_changed_value), contoursplot); g_object_set_data(G_OBJECT (combo_point), "CurentData", data); g_object_set_data(G_OBJECT (combo_point), "CurentContour", contour); g_object_set_data(G_OBJECT (spin_point), "CurentData", data); g_object_set_data(G_OBJECT (spin_point), "CurentContour", contour); g_signal_connect(G_OBJECT(spin_point), "value-changed", G_CALLBACK(spin_point_size_changed_value), contoursplot); g_object_set_data(G_OBJECT (button_point), "CurentData", data); g_object_set_data(G_OBJECT (button_point), "CurentContour", contour); g_signal_connect(G_OBJECT(button_point), "color-set", G_CALLBACK(spin_point_color_changed_value), contoursplot); g_object_set_data(G_OBJECT (entry_label_contour_str), "CurentData", data); g_object_set_data(G_OBJECT (entry_label_contour_str), "CurentContour", contour); g_object_set_data(G_OBJECT (entry_label_contour_x), "CurentData", data); g_object_set_data(G_OBJECT (entry_label_contour_x), "CurentContour", contour); g_object_set_data(G_OBJECT (entry_label_contour_y), "CurentData", data); g_object_set_data(G_OBJECT (entry_label_contour_y), "CurentContour", contour); g_signal_connect (G_OBJECT (entry_label_contour_str), "activate", (GCallback)activate_entry_label_contour_str, contoursplot); g_signal_connect (G_OBJECT (entry_label_contour_x), "activate", (GCallback)activate_entry_label_contour_x, contoursplot); g_signal_connect (G_OBJECT (entry_label_contour_y), "activate", (GCallback)activate_entry_label_contour_y, contoursplot); } /****************************************************************************************/ static void set_data_dialog(GabeditContoursPlot* contoursplot, ContoursPlotData* data,ContourData* contour) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* frame = NULL; GtkWidget* hbox = NULL; GtkWidget* vbox = NULL; GtkWidget* label = NULL; GtkWidget* buttonSave = NULL; GtkWidget* buttonRemove = NULL; GtkWidget* buttonAutoRanges = NULL; GtkWidget* buttonAutoRangesAll = NULL; GtkWidget* parentWindow = NULL; GtkWidget* vbox_window = NULL; GtkWidget* entry_scale_x = NULL; GtkWidget* entry_scale_y = NULL; GtkWidget* entry_scale_z = NULL; GtkWidget* entry_shift_x = NULL; GtkWidget* entry_shift_y = NULL; GtkWidget* entry_shift_z = NULL; gtk_window_set_title (GTK_WINDOW (window), _("Set data options")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(destroy_data_dialog), (gpointer)contoursplot); vbox_window=gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox_window); gtk_widget_show(vbox_window); add_contour_data_dialog(window, vbox_window, contoursplot, data, contour); frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(vbox_window), frame, TRUE, FALSE, 2); gtk_widget_show(frame); vbox=gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_widget_show(vbox); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, FALSE, 2); gtk_widget_show(hbox); label=gtk_label_new(_("Scale X : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_scale_x = gtk_entry_new(); gtk_widget_set_size_request(entry_scale_x,50,-1); gtk_entry_set_text(GTK_ENTRY(entry_scale_x),"1.0"); gtk_box_pack_start(GTK_BOX(hbox), entry_scale_x, FALSE, FALSE, 2); gtk_widget_show(entry_scale_x); label=gtk_label_new(_("Scale Y : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_scale_y = gtk_entry_new(); gtk_widget_set_size_request(entry_scale_y,50,-1); gtk_entry_set_text(GTK_ENTRY(entry_scale_y),"1.0"); gtk_box_pack_start(GTK_BOX(hbox), entry_scale_y, FALSE, FALSE, 2); gtk_widget_show(entry_scale_y); label=gtk_label_new(_("Scale Z : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_scale_z = gtk_entry_new(); gtk_widget_set_size_request(entry_scale_z,50,-1); gtk_entry_set_text(GTK_ENTRY(entry_scale_z),"1.0"); gtk_box_pack_start(GTK_BOX(hbox), entry_scale_z, FALSE, FALSE, 2); gtk_widget_show(entry_scale_z); hbox=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, FALSE, 2); gtk_widget_show(hbox); label=gtk_label_new(_("Shift X : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_shift_x = gtk_entry_new(); gtk_widget_set_size_request(entry_shift_x,50,-1); gtk_entry_set_text(GTK_ENTRY(entry_shift_x),"0.0"); gtk_box_pack_start(GTK_BOX(hbox), entry_shift_x, FALSE, FALSE, 2); gtk_widget_show(entry_shift_x); label=gtk_label_new(_("Shift Y : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_shift_y = gtk_entry_new(); gtk_widget_set_size_request(entry_shift_y,50,-1); gtk_entry_set_text(GTK_ENTRY(entry_shift_y),"0.0"); gtk_box_pack_start(GTK_BOX(hbox), entry_shift_y, FALSE, FALSE, 2); gtk_widget_show(entry_shift_y); label=gtk_label_new(_("Shift Z : ")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show(label); entry_shift_z = gtk_entry_new(); gtk_widget_set_size_request(entry_shift_z,50,-1); gtk_entry_set_text(GTK_ENTRY(entry_shift_z),"0.0"); gtk_box_pack_start(GTK_BOX(hbox), entry_shift_z, FALSE, FALSE, 2); gtk_widget_show(entry_shift_z); frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(vbox_window), frame, TRUE, FALSE, 2); gtk_widget_show(frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_widget_show(hbox); buttonAutoRanges = gtk_button_new_with_label (_("Auto ranges")); gtk_box_pack_start(GTK_BOX(hbox), buttonAutoRanges, TRUE, TRUE, 4); gtk_widget_show (buttonAutoRanges); buttonAutoRangesAll = gtk_button_new_with_label (_("Auto ranges all")); gtk_box_pack_start(GTK_BOX(hbox), buttonAutoRangesAll, TRUE, TRUE, 4); gtk_widget_show (buttonAutoRangesAll); buttonSave = gtk_button_new_with_label (_("Save")); gtk_box_pack_start(GTK_BOX(hbox), buttonSave, TRUE, TRUE, 4); gtk_widget_show (buttonSave); buttonRemove = gtk_button_new_with_label (_("Remove")); gtk_box_pack_start(GTK_BOX(hbox), buttonRemove, TRUE, TRUE, 4); gtk_widget_show (buttonRemove); g_object_set_data(G_OBJECT (buttonSave), "CurentData", data); g_signal_connect(G_OBJECT(buttonSave), "clicked", G_CALLBACK(save_data_dlg), contoursplot); g_object_set_data(G_OBJECT (buttonRemove), "CurentData", data); g_object_set_data(G_OBJECT (buttonRemove), "Window", window); g_object_set_data(G_OBJECT (buttonRemove), "ContoursPLOT", contoursplot); g_signal_connect(G_OBJECT(buttonRemove), "clicked", G_CALLBACK(remove_data_dlg), contoursplot); g_object_set_data(G_OBJECT (buttonAutoRanges), "CurentData", data); g_signal_connect(G_OBJECT(buttonAutoRanges), "clicked", G_CALLBACK(auto_range_activate), contoursplot); g_object_set_data(G_OBJECT (buttonAutoRangesAll), "CurentData", NULL); g_signal_connect(G_OBJECT(buttonAutoRangesAll), "clicked", G_CALLBACK(auto_range_activate), contoursplot); g_object_set_data(G_OBJECT (entry_scale_x), "CurentData", data); g_object_set_data(G_OBJECT (entry_scale_y), "CurentData", data); g_object_set_data(G_OBJECT (entry_shift_x), "CurentData", data); g_object_set_data(G_OBJECT (entry_shift_y), "CurentData", data); g_signal_connect (G_OBJECT (entry_scale_x), "activate", (GCallback)activate_entry_scale_x, contoursplot); g_signal_connect (G_OBJECT (entry_scale_y), "activate", (GCallback)activate_entry_scale_y, contoursplot); g_signal_connect (G_OBJECT (entry_scale_z), "activate", (GCallback)activate_entry_scale_z, contoursplot); g_signal_connect (G_OBJECT (entry_shift_x), "activate", (GCallback)activate_entry_shift_x, contoursplot); g_signal_connect (G_OBJECT (entry_shift_y), "activate", (GCallback)activate_entry_shift_y, contoursplot); g_signal_connect (G_OBJECT (entry_shift_z), "activate", (GCallback)activate_entry_shift_z, contoursplot); parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); /* list_utf8();*/ } /*********************************************************************************************************************/ static void applyColorMapOptions(GtkWidget *dialogWindow, gpointer data) { GtkWidget* buttonMultiColor; GtkWidget* button2Colors; GtkWidget* buttonUniColor; GtkWidget* selectorUniColor; GtkWidget* selector2Colors1; GtkWidget* selector2Colors2; GabeditContoursPlot* contoursplot; GtkWidget* entryMin; GtkWidget* entryMax; GtkWidget* entryNLabels; gdouble min = -1; gdouble max = 1; gint N = 0; G_CONST_RETURN gchar *temp = NULL; if(!GTK_IS_WIDGET(dialogWindow)) return; buttonMultiColor = g_object_get_data(G_OBJECT (dialogWindow), "ButtonMultiColor"); button2Colors = g_object_get_data(G_OBJECT (dialogWindow), "Button2Colors"); buttonUniColor = g_object_get_data(G_OBJECT (dialogWindow), "ButtonUniColor"); selectorUniColor = g_object_get_data(G_OBJECT (dialogWindow), "SelectorUniColor"); selector2Colors1 = g_object_get_data(G_OBJECT (dialogWindow), "Selector2Colors1"); selector2Colors2 = g_object_get_data(G_OBJECT (dialogWindow), "Selector2Colors2"); entryMin =(GtkWidget*)g_object_get_data(G_OBJECT (dialogWindow), "EntryMin"); entryMax =(GtkWidget*)g_object_get_data(G_OBJECT (dialogWindow), "EntryMax"); entryNLabels =(GtkWidget*)g_object_get_data(G_OBJECT (dialogWindow), "EntryNLabels"); contoursplot = (GabeditContoursPlot* )g_object_get_data(G_OBJECT (dialogWindow), "ContoursPlot"); if(!entryNLabels) return; temp = gtk_entry_get_text(GTK_ENTRY(entryNLabels)); N = atoi(temp); if(N<=0) { Message(_("Error : The number of labels should be a positive integer. "),_("Error")); return; } if(!get_a_float(entryMin,&min,_("Error : The minimal value should be float."))) return; if(!get_a_float(entryMax,&max,_("Error : The maximal value should be float."))) return; if( max<=min) { Message(_("Error : The minimal value should be smaller than the maximal value "),_("Error")); return; } if(!buttonMultiColor) return; if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(buttonMultiColor))) { contoursplot->colorsMap.type=1; } else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button2Colors)) && selector2Colors1 && selector2Colors2) { GdkColor color; contoursplot->colorsMap.type=2; gtk_color_button_get_color (GTK_COLOR_BUTTON(selector2Colors1), &color); contoursplot->colorsMap.colors[0][0] = color.red/65535.0; contoursplot->colorsMap.colors[0][1] = color.green/65535.0; contoursplot->colorsMap.colors[0][2] = color.blue/65535.0; gtk_color_button_get_color (GTK_COLOR_BUTTON(selector2Colors2), &color); contoursplot->colorsMap.colors[1][0] = color.red/65535.0; contoursplot->colorsMap.colors[1][1] = color.green/65535.0; contoursplot->colorsMap.colors[1][2] = color.blue/65535.0; } else if(selectorUniColor) { GdkColor color; contoursplot->colorsMap.type=3; gtk_color_button_get_color (GTK_COLOR_BUTTON(selectorUniColor), &color); contoursplot->colorsMap.colors[2][0] = color.red/65535.0; contoursplot->colorsMap.colors[2][1] = color.green/65535.0; contoursplot->colorsMap.colors[2][2] = color.blue/65535.0; } contoursplot->colormap_nlegends = N; reset_color_map_min_max(GTK_WIDGET(contoursplot), min, max); reset_contour_colors(GTK_WIDGET(contoursplot), NULL); } /*********************************************************************************************************************/ static GtkWidget* addRadioButtonColorMapToATable(GtkWidget* table, GtkWidget* friendButton, gchar* label, gint i, gint j, gint k) { GtkWidget *newButton; if(friendButton) newButton = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (friendButton)), label); else newButton = gtk_radio_button_new_with_label( NULL, label); gtk_table_attach(GTK_TABLE(table),newButton,j,j+k,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT (newButton), "Type",NULL); return newButton; } /*********************************************************************************************************************/ static void createColorMapOptionsFrame(GtkWidget* dialogWindow, GtkWidget *box) { GtkWidget* button; GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget *table = gtk_table_new(3,3,TRUE); gint i; GtkWidget *selector; GdkColor color; GabeditContoursPlot* contoursplot = NULL; if(!GTK_IS_WIDGET(dialogWindow)) return; contoursplot = (GabeditContoursPlot* )g_object_get_data(G_OBJECT (dialogWindow), "ContoursPlot"); color.red = 65535; color.green = 65535; color.blue = 65535; frame = gtk_frame_new (_("Color mapping type")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); i = 0; button = NULL; button = addRadioButtonColorMapToATable(table, button, _("Multi color"), i, 0,1); if(contoursplot->colorsMap.type == 1) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); g_object_set_data(G_OBJECT (dialogWindow), "ButtonMultiColor",button); i = 1; button = addRadioButtonColorMapToATable(table, button, _("2 colors"), i, 0,1); if(contoursplot->colorsMap.type == 2) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); g_object_set_data(G_OBJECT (dialogWindow), "Button2Colors",button); color.red = (gushort)(contoursplot->colorsMap.colors[0][0]*65535); color.green = (gushort)(contoursplot->colorsMap.colors[0][1]*65535); color.blue = (gushort)(contoursplot->colorsMap.colors[0][2]*65535); selector = gtk_color_button_new_with_color (&color); gtk_table_attach(GTK_TABLE(table),selector,1,2,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT (dialogWindow), "Selector2Colors1",selector); color.red = (gushort)(contoursplot->colorsMap.colors[1][0]*65535); color.green = (gushort)(contoursplot->colorsMap.colors[1][1]*65535); color.blue = (gushort)(contoursplot->colorsMap.colors[1][2]*65535); selector = gtk_color_button_new_with_color (&color); gtk_table_attach(GTK_TABLE(table),selector,2,3,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT (dialogWindow), "Selector2Colors2",selector); i = 2; button = addRadioButtonColorMapToATable(table, button, _("Unicolor"), i, 0,1); if(contoursplot->colorsMap.type == 3) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); color.red = (gushort)(contoursplot->colorsMap.colors[2][0]*65535); color.green = (gushort)(contoursplot->colorsMap.colors[2][1]*65535); color.blue = (gushort)(contoursplot->colorsMap.colors[2][2]*65535); selector = gtk_color_button_new_with_color (&color); gtk_table_attach(GTK_TABLE(table),selector,1,2,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT (dialogWindow), "SelectorUniColor",selector); g_object_set_data(G_OBJECT (dialogWindow), "ButtonUniColor",button); } /****************************************************************************************************/ static void createColorMapOptionsWindow(GtkWidget* contoursplot) { GtkWidget *dialogWindow = NULL; GtkWidget *button; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxframe; gchar t[BSIZE]; gint i,j; GtkWidget *table; GtkWidget* entryMin; GtkWidget* entryMax; GtkWidget* entryNLabels; gdouble min = -1; gdouble max = 1; ColorMap* colorMap = NULL; colorMap =GABEDIT_ContoursPLOT(contoursplot)->colorsMap.colorMap; if(colorMap && colorMap->numberOfColors>0) { min = colorMap->colorValue[0].value; max = colorMap->colorValue[colorMap->numberOfColors-1].value; } dialogWindow = gtk_dialog_new(); gtk_widget_realize(GTK_WIDGET(dialogWindow)); sprintf(t, _("Color Mapping options")); gtk_window_set_title(GTK_WINDOW(dialogWindow),t); gtk_window_set_modal (GTK_WINDOW (dialogWindow), TRUE); gtk_window_set_position(GTK_WINDOW(dialogWindow),GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(dialogWindow), "delete_event", (GCallback)gtk_widget_destroy, NULL); g_object_set_data(G_OBJECT (dialogWindow), "ContoursPlot",contoursplot); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (GTK_WIDGET(GTK_DIALOG(dialogWindow)->vbox)), frame, TRUE, TRUE, 3); vboxframe = gtk_vbox_new (FALSE, 1); gtk_widget_show (vboxframe); gtk_container_add (GTK_CONTAINER (frame), vboxframe); hbox = gtk_hbox_new (FALSE, 1); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vboxframe), hbox, TRUE, TRUE, 0); createColorMapOptionsFrame(dialogWindow,hbox); hbox = gtk_hbox_new (FALSE, 1); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vboxframe), hbox, TRUE, TRUE, 0); table = gtk_table_new(3,3,FALSE); gtk_box_pack_start (GTK_BOX (hbox), table, TRUE, TRUE, 3); i = 0; j = 0; add_label_at_table(table,_(" Min iso-value "),i,j,GTK_JUSTIFY_LEFT); j++; add_label_at_table(table," : ",i,j,GTK_JUSTIFY_LEFT); j++; entryMin = gtk_entry_new (); add_widget_table(table,entryMin,i,j); sprintf(t,"%f",min); gtk_entry_set_text(GTK_ENTRY(entryMin),t); i = 1; j = 0; add_label_at_table(table,_(" Max iso-value "),i,j,GTK_JUSTIFY_LEFT); j++; add_label_at_table(table," : ",i,j,GTK_JUSTIFY_LEFT); j++; entryMax = gtk_entry_new (); add_widget_table(table,entryMax,i,j); sprintf(t,"%f",max); gtk_entry_set_text(GTK_ENTRY(entryMax),t); i = 2; j = 0; add_label_at_table(table,_(" # of labels "),i,j,GTK_JUSTIFY_LEFT); j++; add_label_at_table(table," : ",i,j,GTK_JUSTIFY_LEFT); j++; entryNLabels = gtk_entry_new (); add_widget_table(table,entryNLabels,i,j); if(GABEDIT_ContoursPLOT(contoursplot)->colormap_nlegends>0) sprintf(t,"%d",GABEDIT_ContoursPLOT(contoursplot)->colormap_nlegends); else sprintf(t,"20"); gtk_entry_set_text(GTK_ENTRY(entryNLabels),t); g_object_set_data(G_OBJECT (dialogWindow), "EntryMin",entryMin); g_object_set_data(G_OBJECT (dialogWindow), "EntryMax",entryMax); g_object_set_data(G_OBJECT (dialogWindow), "EntryNLabels",entryNLabels); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(dialogWindow)->action_area), TRUE); button = gtk_button_new_from_stock (GTK_STOCK_CLOSE); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(dialogWindow)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(dialogWindow)); button = gtk_button_new_from_stock (GTK_STOCK_APPLY); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(dialogWindow)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)applyColorMapOptions, GTK_OBJECT(dialogWindow)); button = gtk_button_new_from_stock (GTK_STOCK_OK); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(dialogWindow)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)applyColorMapOptions, GTK_OBJECT(dialogWindow)); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(dialogWindow)); gtk_widget_show_all(dialogWindow); } /****************************************************************************************/ static void toggle_action (GtkAction *action) { const gchar *name = gtk_action_get_name (action); gboolean enable = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); GtkWidget* contoursplot = g_object_get_data(G_OBJECT (action), "ContoursPLOT"); if(!contoursplot) return; if(!strcmp(name,"HGridShowMajor")) contoursplot_enable_grids (GABEDIT_ContoursPLOT(contoursplot), GABEDIT_ContoursPLOT_HMAJOR_GRID, enable); else if(!strcmp(name,"HGridShowMinor")) contoursplot_enable_grids (GABEDIT_ContoursPLOT(contoursplot), GABEDIT_ContoursPLOT_HMINOR_GRID, enable); else if(!strcmp(name,"VGridShowMajor")) contoursplot_enable_grids (GABEDIT_ContoursPLOT(contoursplot), GABEDIT_ContoursPLOT_VMAJOR_GRID, enable); else if(!strcmp(name,"VGridShowMinor")) contoursplot_enable_grids (GABEDIT_ContoursPLOT(contoursplot), GABEDIT_ContoursPLOT_VMINOR_GRID, enable); else if(!strcmp(name,"ShowColorMap")) contoursplot_show_colormap (GABEDIT_ContoursPLOT(contoursplot), enable); else if(!strcmp(name,"ShowLabelContours")) contoursplot_show_label_contours (GABEDIT_ContoursPLOT(contoursplot), enable); else if(!strcmp(name,"DashedNegativeContours")) contoursplot_dashed_negative_contours (GABEDIT_ContoursPLOT(contoursplot), enable); else if(!strcmp(name,"LegendShowLeft")) contoursplot_show_left_legends (GABEDIT_ContoursPLOT(contoursplot), enable); else if(!strcmp(name,"LegendShowRight")) contoursplot_show_right_legends (GABEDIT_ContoursPLOT(contoursplot), enable); else if(!strcmp(name,"LegendShowTop")) contoursplot_show_top_legends (GABEDIT_ContoursPLOT(contoursplot), enable); else if(!strcmp(name,"LegendShowBottom")) contoursplot_show_bottom_legends (GABEDIT_ContoursPLOT(contoursplot), enable); else if(!strcmp(name,"DirectionReflectX")) contoursplot_reflect_x (GABEDIT_ContoursPLOT(contoursplot), enable); else if(!strcmp(name,"DirectionReflectY")) contoursplot_reflect_y (GABEDIT_ContoursPLOT(contoursplot), enable); } /*--------------------------------------------------------------------------------------------------------------------*/ static GtkToggleActionEntry gtkActionToggleEntries[] = { { "HGridShowMajor", NULL, N_("show _H major"), NULL, "show H major", G_CALLBACK (toggle_action), TRUE }, { "HGridShowMinor", NULL, N_("show _H minor"), NULL, "show H minor", G_CALLBACK (toggle_action), FALSE }, { "VGridShowMajor", NULL, N_("show _V major"), NULL, "show V major", G_CALLBACK (toggle_action), TRUE }, { "VGridShowMinor", NULL, N_("show _V minor"), NULL, "show V minor", G_CALLBACK (toggle_action), FALSE }, { "LegendShowLeft", NULL, N_("show _left"), NULL, "show left", G_CALLBACK (toggle_action), TRUE }, { "LegendShowRight", NULL, N_("show _right"), NULL, "show right", G_CALLBACK (toggle_action), TRUE }, { "LegendShowTop", NULL, N_("show _top"), NULL, "show top", G_CALLBACK (toggle_action), TRUE }, { "LegendShowBottom", NULL, N_("show _bottom"), NULL, "show bottom", G_CALLBACK (toggle_action), TRUE }, { "DirectionReflectX", NULL, N_("_X reflect"), NULL, "X reflect", G_CALLBACK (toggle_action), FALSE }, { "DirectionReflectY", NULL, N_("_Y reflect"), NULL, "Y reflect", G_CALLBACK (toggle_action), FALSE }, { "ShowColorMap", NULL, N_("show _colormap"), NULL, "show colormap", G_CALLBACK (toggle_action), FALSE }, { "ShowLabelContours", NULL, N_("show _label contours"), NULL, "show label contours", G_CALLBACK (toggle_action), FALSE }, { "DashedNegativeContours", NULL, N_("dashed negative contours"), NULL, "dashed negative contours", G_CALLBACK (toggle_action), FALSE }, }; /*--------------------------------------------------------------------------------------------------------------------*/ static void init_toggle_entries (GtkWidget* contoursplot) { contoursplot_enable_grids (GABEDIT_ContoursPLOT(contoursplot), GABEDIT_ContoursPLOT_HMAJOR_GRID, gtkActionToggleEntries[0].is_active); contoursplot_enable_grids (GABEDIT_ContoursPLOT(contoursplot), GABEDIT_ContoursPLOT_HMINOR_GRID, gtkActionToggleEntries[1].is_active); contoursplot_enable_grids (GABEDIT_ContoursPLOT(contoursplot), GABEDIT_ContoursPLOT_VMAJOR_GRID, gtkActionToggleEntries[2].is_active); contoursplot_enable_grids (GABEDIT_ContoursPLOT(contoursplot), GABEDIT_ContoursPLOT_VMINOR_GRID, gtkActionToggleEntries[3].is_active); contoursplot_show_left_legends (GABEDIT_ContoursPLOT(contoursplot), gtkActionToggleEntries[4].is_active); contoursplot_show_right_legends (GABEDIT_ContoursPLOT(contoursplot), gtkActionToggleEntries[5].is_active); contoursplot_show_top_legends (GABEDIT_ContoursPLOT(contoursplot), gtkActionToggleEntries[6].is_active); contoursplot_show_bottom_legends (GABEDIT_ContoursPLOT(contoursplot), gtkActionToggleEntries[7].is_active); contoursplot_reflect_x (GABEDIT_ContoursPLOT(contoursplot), gtkActionToggleEntries[8].is_active); contoursplot_reflect_y (GABEDIT_ContoursPLOT(contoursplot), gtkActionToggleEntries[9].is_active); contoursplot_show_colormap (GABEDIT_ContoursPLOT(contoursplot), gtkActionToggleEntries[10].is_active); contoursplot_show_label_contours (GABEDIT_ContoursPLOT(contoursplot), gtkActionToggleEntries[11].is_active); contoursplot_dashed_negative_contours (GABEDIT_ContoursPLOT(contoursplot), gtkActionToggleEntries[12].is_active); } static gint numberOfGtkActionToggleEntries = G_N_ELEMENTS (gtkActionToggleEntries); /*********************************************************************************************************************/ static void activate_action (GtkAction *action) { const gchar *name = gtk_action_get_name (action); GtkWidget* contoursplot = g_object_get_data(G_OBJECT (action), "ContoursPLOT"); if(!strcmp(name,"SetTicks")) { set_ticks_dialog(contoursplot); } if(!strcmp(name,"SetMargins")) { set_margins_dialog(contoursplot); } if(!strcmp(name,"SetRanges")) { set_ranges_dialog(contoursplot); } if(!strcmp(name,"SetLabels")) { set_labels_dialog(contoursplot); } if(!strcmp(name,"SetDigits")) { set_digits_dialog(contoursplot); } if(!strcmp(name,"SetFontSize")) { set_font_size_dialog(contoursplot); } if(!strcmp(name,"SetAutoRanges")) { gabedit_contoursplot_set_autorange(GABEDIT_ContoursPLOT(contoursplot), NULL); } if(!strcmp(name,"DataRead")) { read_data_dlg(contoursplot); } if(!strcmp(name,"DataRemoveAll")) { remove_all_data_dlg(contoursplot); } if(!strcmp(name,"ContoursSet")) { create_contours(contoursplot,NULL);} if(!strcmp(name,"ContoursDelete")) { delete_contours(contoursplot,NULL);} if(!strcmp(name,"ContoursBuildLabelPositions")) { contoursplot_build_position_label_contours(GABEDIT_ContoursPLOT(contoursplot)); } if(!strcmp(name,"ColorMapSet")) { createColorMapOptionsWindow(contoursplot);} if(!strcmp(name,"ObjectsInsertText")) { begin_insert_objects_text(contoursplot); } if(!strcmp(name,"ObjectsDeleteTexts")) { delete_objects_text(contoursplot); } if(!strcmp(name,"ObjectsInsertLine")) { begin_insert_objects_line(contoursplot); } if(!strcmp(name,"ObjectsDeleteLines")) { delete_objects_line(contoursplot); } if(!strcmp(name,"ObjectsInsertImage")) { begin_insert_objects_image(contoursplot); } if(!strcmp(name,"ObjectsInsertImageClip")) { insert_objects_image_from_clipboard(contoursplot); } if(!strcmp(name,"ObjectsDeleteImages")) { delete_objects_image(contoursplot); } if(!strcmp(name,"ThemesPublication")) { set_theme_publication(contoursplot); } if(!strcmp(name,"ThemesGreenBlack")) { set_theme_green_black(contoursplot); } if(!strcmp(name,"ThemesOther")) { set_theme_dialog(contoursplot); } if(!strcmp(name,"ScreenCaptureBMP")) { saveImageDlg(contoursplot, "bmp");} if(!strcmp(name,"ScreenCaptureJPEG")) { saveImageDlg(contoursplot, "jpeg");} if(!strcmp(name,"ScreenCapturePNG")) { saveImageDlg(contoursplot, "png");} if(!strcmp(name,"ScreenCaptureTPNG")) { saveImageDlg(contoursplot, "tpng");} if(!strcmp(name,"ScreenCaptureTIF")) { saveImageDlg(contoursplot, "tif");} if(!strcmp(name,"ScreenCaptureClipBoard")) { copyImageToClipBoard(contoursplot); } if(!strcmp(name,"ExportSVG")) { exportImageDlg(contoursplot, "svg");} if(!strcmp(name,"ExportPDF")) { exportImageDlg(contoursplot, "pdf");} if(!strcmp(name,"ExportPS")) { exportImageDlg(contoursplot, "ps");} if(!strcmp(name,"ExportEPS")) { exportImageDlg(contoursplot, "eps");} if(!strcmp(name,"Read")) { readAGabeditDlg(contoursplot);} if(!strcmp(name,"Save")) { saveAsGabeditDlg(contoursplot);} if(!strcmp(name,"Help")) { gabedit_contoursplot_help();} if(!strcmp(name,"Close")) { destroy_contoursplot_window(contoursplot);} } /*--------------------------------------------------------------------*/ static GtkActionEntry gtkActionEntries[] = { {"Set", NULL, N_("_Set")}, {"SetTicks", NULL, N_("_Ticks"), NULL, "Ticks", G_CALLBACK (activate_action) }, {"SetMargins", NULL, N_("_Margins"), NULL, "Margins", G_CALLBACK (activate_action) }, {"SetRanges", NULL, N_("_Ranges"), NULL, "Ranges", G_CALLBACK (activate_action) }, {"SetLabels", NULL, N_("_Labels"), NULL, "Labels", G_CALLBACK (activate_action) }, {"SetDigits", NULL, N_("_Digits"), NULL, "Digits", G_CALLBACK (activate_action) }, {"SetFontSize", NULL, N_("_Font size"), NULL, "Font size", G_CALLBACK (activate_action) }, {"SetAutoRanges", NULL, N_("_Auto ranges"), NULL, "Auto ranges", G_CALLBACK (activate_action) }, {"Render", NULL, N_("_Render")}, {"RenderGrid", NULL, N_("_Grid")}, {"RenderLegends", NULL, N_("_Legends")}, {"RenderDirections", NULL, N_("_Directions")}, {"Data", NULL, N_("_Data")}, {"DataRead", NULL, N_("_Read data from an ASCII grid file"), NULL, "Read data from an ASCII grid file", G_CALLBACK (activate_action) }, {"DataSaveAll", NULL, N_("_Save all data in an ascii grid file"), NULL, "Save all data in an ascii file", G_CALLBACK (activate_action) }, {"DataRemoveAll", NULL, N_("_Remove all data"), NULL, "Remove all data", G_CALLBACK (activate_action) }, {"Contours", NULL, N_("_Contours")}, {"ContoursSet", NULL, N_("_Set contours values"), NULL, "Set contours values", G_CALLBACK (activate_action) }, {"ContoursBuildLabelPositions", NULL, N_("Reset _label positions"), NULL, "Reset label positions", G_CALLBACK (activate_action) }, {"ContoursDelete", NULL, N_("_Delete all"), NULL, "Delete all", G_CALLBACK (activate_action) }, {"ColorMap", NULL, N_("Color_Map")}, {"ColorMapSet", NULL, N_("_Set colors map"), NULL, "Set colors map", G_CALLBACK (activate_action) }, {"Objects", NULL, N_("_Objects")}, {"ObjectsInsertText", NULL, N_("Insert a _text(Click in window)"), NULL, "Insert a text", G_CALLBACK (activate_action) }, {"ObjectsDeleteTexts", NULL, N_("Delete all _texts"), NULL, "Delete all texts", G_CALLBACK (activate_action) }, {"ObjectsInsertLine", NULL, N_("Insert a _line(Click in window and move)"), NULL, "Insert a line", G_CALLBACK (activate_action) }, {"ObjectsDeleteLines", NULL, N_("Delete all _lines"), NULL, "Delete all lines", G_CALLBACK (activate_action) }, {"ObjectsInsertImage", NULL, N_("Insert an _image(Click in window)"), NULL, "Insert an image", G_CALLBACK (activate_action) }, {"ObjectsInsertImageClip", NULL, N_("Insert an _image from clipboard"), NULL, "Insert an image", G_CALLBACK (activate_action) }, {"ObjectsDeleteImages", NULL, N_("Delete all _images"), NULL, "Delete all images", G_CALLBACK (activate_action) }, {"Themes", NULL, N_("_Themes")}, {"ThemesPublication", NULL, N_("_Publication"), NULL, "Publication", G_CALLBACK (activate_action) }, {"ThemesGreenBlack", NULL, N_("_Green&black"), NULL, "Green&black", G_CALLBACK (activate_action) }, {"ThemesOther", NULL, N_("_Other"), NULL, "Other", G_CALLBACK (activate_action) }, {"ScreenCapture", NULL, N_("_Screen Capture")}, {"ScreenCaptureBMP", NULL, N_("_BMP format"), NULL, "BMP format", G_CALLBACK (activate_action) }, {"ScreenCaptureJPEG", NULL, N_("_JPEG format"), NULL, "JPEG format", G_CALLBACK (activate_action) }, {"ScreenCapturePNG", NULL, N_("_PNG format"), NULL, "PNG format", G_CALLBACK (activate_action) }, {"ScreenCaptureTPNG", NULL, N_("_Transparent PNG format"), NULL, "Transparent PNG format", G_CALLBACK (activate_action) }, {"ScreenCaptureTIF", NULL, N_("_TIF format"), NULL, "TIF format", G_CALLBACK (activate_action) }, {"ScreenCaptureClipBoard", NULL, N_("_Copy to clipboard"), NULL, "Copy to clipboard", G_CALLBACK (activate_action) }, {"Export", NULL, "_Export"}, {"ExportSVG", NULL, N_("Export _SVG format"), NULL, "SVG format", G_CALLBACK (activate_action) }, {"ExportPDF", NULL, N_("Export p_df format"), NULL, "PDF format", G_CALLBACK (activate_action) }, {"ExportPS", NULL, N_("Export _postscript format"), NULL, "PS format", G_CALLBACK (activate_action) }, {"ExportEPS", NULL, N_("Export _Encapsuled postscript format"), NULL, "EPS format", G_CALLBACK (activate_action) }, {"Read", GTK_STOCK_OPEN, N_("_Read"), NULL, "Read", G_CALLBACK (activate_action) }, {"Save", GTK_STOCK_SAVE, N_("_Save"), NULL, "Save", G_CALLBACK (activate_action) }, {"Help", GTK_STOCK_HELP, N_("_Help"), NULL, "Help", G_CALLBACK (activate_action) }, {"Close", GTK_STOCK_CLOSE, N_("_Close"), NULL, "Close", G_CALLBACK (activate_action) }, }; static gint numberOfGtkActionEntries = G_N_ELEMENTS (gtkActionEntries); /********************************************************************************/ static void add_data_to_actions(GtkUIManager *manager, GtkWidget *contoursplot) { GtkAction* action = NULL; action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Set/SetTicks"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Set/Margins"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Set/SetRanges"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Set/SetLabels"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Set/SetDigits"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Set/SetFontSize"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Set/SetAutoRanges"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderGrid/HGridShowMajor"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderGrid/HGridShowMinor"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderGrid/VGridShowMajor"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderGrid/VGridShowMinor"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderLegends/LegendShowLeft"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderLegends/LegendShowRight"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderLegends/LegendShowTop"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderLegends/LegendShowBottom"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderDirections/DirectionReflectX"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderDirections/DirectionReflectY"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/ShowColorMap"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/ShowLabelContours"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/DashedNegativeContours"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Data/DataRead"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Data/DataSaveAll"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Data/DataRemoveAll"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Contours/ContoursSet"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Contours/ContoursDelete"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Contours/ContoursBuildLabelPositions"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/ColorMap/ColorMapSet"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Objects/ObjectsDeleteTexts"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Objects/ObjectsInsertText"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Objects/ObjectsDeleteLines"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Objects/ObjectsInsertLine"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Objects/ObjectsInsertImage"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Objects/ObjectsInsertImageClip"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Objects/ObjectsDeleteImages"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Themes/ThemesPublication"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Themes/ThemesGreenBlack"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Themes/ThemesOther"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/ScreenCapture/ScreenCaptureBMP"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/ScreenCapture/ScreenCaptureJPEG"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/ScreenCapture/ScreenCapturePNG"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/ScreenCapture/ScreenCaptureTPNG"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/ScreenCapture/ScreenCaptureTIF"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/ScreenCapture/ScreenCaptureClipBoard"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Export/ExportSVG"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Export/ExportPDF"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Export/ExportPS"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Export/ExportEPS"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Read"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Save"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Help"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Close"); if(action) g_object_set_data(G_OBJECT (action), "ContoursPLOT", contoursplot); } /********************************************************************************/ static const gchar *uiMenuInfo = " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*****************************************************************************************/ static void add_widget (GtkUIManager *merge, GtkWidget *widget, GtkContainer *container) { GtkWidget *handlebox; if (!GTK_IS_TOOLBAR (widget)) return; handlebox =gtk_handle_box_new (); g_object_ref (handlebox); gtk_handle_box_set_handle_position (GTK_HANDLE_BOX(handlebox),GTK_POS_TOP); /* GTK_SHADOW_NONE, GTK_SHADOW_IN, GTK_SHADOW_OUT, GTK_SHADOW_ETCHED_IN, GTK_SHADOW_ETCHED_OUT */ gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(handlebox),GTK_SHADOW_OUT); gtk_box_pack_start (GTK_BOX (container), handlebox, FALSE, FALSE, 0); if (GTK_IS_TOOLBAR (widget)) { GtkToolbar *toolbar; toolbar = GTK_TOOLBAR (widget); gtk_toolbar_set_show_arrow (toolbar, TRUE); gtk_toolbar_set_style(toolbar, GTK_TOOLBAR_ICONS); gtk_toolbar_set_orientation(toolbar, GTK_ORIENTATION_VERTICAL); } gtk_widget_show (widget); gtk_container_add (GTK_CONTAINER (handlebox), widget); gtk_widget_show (handlebox); } /*************************************************************************************************/ static void add_toolbar_and_popup_menu(GtkWidget* parent, GtkWidget* box) { GtkActionGroup *actionGroup = NULL; GtkUIManager *merge = NULL; GError *error = NULL; merge = gtk_ui_manager_new (); g_signal_connect_swapped (parent, "destroy", G_CALLBACK (g_object_unref), merge); actionGroup = gtk_action_group_new ("GabeditContoursPlotActions"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntries, numberOfGtkActionEntries, NULL); gtk_action_group_add_toggle_actions (actionGroup, gtkActionToggleEntries, numberOfGtkActionToggleEntries, NULL); gtk_ui_manager_insert_action_group (merge, actionGroup, 0); if(box) g_signal_connect (merge, "add_widget", G_CALLBACK (add_widget), box); if (!gtk_ui_manager_add_ui_from_string (merge, uiMenuInfo, -1, &error)) { g_message (_("building menus of contoursplot failed: %s"), error->message); g_error_free (error); } g_object_set_data(G_OBJECT (parent), "Manager", merge); add_data_to_actions(merge,parent); init_toggle_entries (parent); } /****************************************************************************************/ GType gabedit_contoursplot_get_type () { static GType contoursplot_type = 0; if (!contoursplot_type) { static const GTypeInfo contoursplot_info = { sizeof (GabeditContoursPlotClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) gabedit_contoursplot_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GabeditContoursPlot), 0, /* n_preallocs */ (GInstanceInitFunc) gabedit_contoursplot_init, }; contoursplot_type = g_type_register_static (GTK_TYPE_WIDGET, "GabeditContoursPlot", &contoursplot_info, 0); } return contoursplot_type; } /****************************************************************************************/ static void gabedit_contoursplot_class_init (GabeditContoursPlotClass *class) { GtkObjectClass *object_class; GtkWidgetClass *widget_class; object_class = (GtkObjectClass*) class; widget_class = (GtkWidgetClass*) class; parent_class = g_type_class_peek_parent (class); object_class->destroy = gabedit_contoursplot_destroy; widget_class->realize = gabedit_contoursplot_realize; widget_class->expose_event = gabedit_contoursplot_expose; widget_class->size_request = gabedit_contoursplot_size_request; widget_class->size_allocate = gabedit_contoursplot_size_allocate; widget_class->button_press_event = gabedit_contoursplot_button_press; widget_class->button_release_event = gabedit_contoursplot_button_release; widget_class->motion_notify_event = gabedit_contoursplot_motion_notify; widget_class->scroll_event = gabedit_contoursplot_scroll; widget_class->style_set = gabedit_contoursplot_style_set; widget_class->key_press_event = gabedit_contoursplot_key_press; widget_class->key_release_event = gabedit_contoursplot_key_release; widget_class->enter_notify_event = gabedit_contoursplot_grab; widget_class->leave_notify_event = gabedit_contoursplot_grab; } /****************************************************************************************/ static void gabedit_contoursplot_init (GabeditContoursPlot *contoursplot) { gint i,j; g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); contoursplot->colorsMap.type=1; for(i=0;i<3;i++) for(j=0;j<3;j++) contoursplot->colorsMap.colors[i][j] = 1.0; for(j=0;j<3;j++) contoursplot->colorsMap.colors[2][j] = 0.0; contoursplot->colorsMap.colorMap = NULL; contoursplot->show_label_contours = FALSE; contoursplot->xmin=-1.0; contoursplot->xmax=1.0; contoursplot->ymin=-1.0; contoursplot->ymax=1.0; contoursplot->left_margins =0; contoursplot->top_margins =0; contoursplot->right_margins =0; contoursplot->bottom_margins =0; contoursplot->x_legends_digits=8; contoursplot->y_legends_digits=8; contoursplot->hmajor_ticks=11; contoursplot->hminor_ticks=3; contoursplot->vmajor_ticks=11; contoursplot->vminor_ticks=3; contoursplot->length_ticks=3; contoursplot->hmajor_grid=TRUE; contoursplot->hminor_grid=TRUE; contoursplot->vmajor_grid=TRUE; contoursplot->vminor_grid=TRUE; contoursplot->show_left_legends = TRUE; contoursplot->show_right_legends = FALSE; contoursplot->show_top_legends = FALSE; contoursplot->show_bottom_legends = TRUE; contoursplot->show_colormap = FALSE; contoursplot->colormap_nlegends = 20; contoursplot->colormap_width = 0; contoursplot->colormap_height = 0; contoursplot->colormap_legends = 0; contoursplot->colormap_legends_str = 0; contoursplot->reflect_x = FALSE; contoursplot->reflect_y = FALSE; contoursplot->data_list=NULL; contoursplot->mouse_zoom_enabled=TRUE; contoursplot->mouse_zoom_button = 2; contoursplot->mouse_displace_enabled=FALSE; contoursplot->wheel_zoom_enabled=FALSE; contoursplot->mouse_autorange_enabled=FALSE; contoursplot->mouse_autorange_button = 1; contoursplot->mouse_distance_enabled=TRUE; contoursplot->mouse_distance_button = 1; contoursplot->h_label_str = NULL; contoursplot->v_label_str = NULL; contoursplot->h_label = NULL; contoursplot->v_label = NULL; contoursplot->h_label_width = 0; contoursplot->h_label_height = 0; contoursplot->v_label_width = 0; contoursplot->v_label_height = 0; contoursplot->font_size = 12; contoursplot->cairo_widget = NULL; contoursplot->cairo_area = NULL; contoursplot->cairo_export = NULL; contoursplot->shift_key_pressed = FALSE; contoursplot->control_key_pressed = FALSE; contoursplot->dashed_negative_contours = FALSE; contoursplot->d_key_pressed = FALSE; contoursplot->nObjectsText = 0; contoursplot->objectsText = NULL; contoursplot->t_key_pressed = FALSE; contoursplot->selected_objects_text_num = -1; contoursplot->nObjectsLine = 0; contoursplot->objectsLine = NULL; contoursplot->l_key_pressed = FALSE; contoursplot->nObjectsLine = 0; contoursplot->objectsLine = NULL; contoursplot->l_key_pressed = FALSE; contoursplot->selected_objects_image_num = -1; contoursplot->selected_objects_line_num = -1; contoursplot->selected_objects_line_type = -1; contoursplot->object_begin_point.x=-1; contoursplot->object_begin_point.y=-1; contoursplot->object_end_point.x=-1; contoursplot->object_end_point.y=-1; contoursplot->r_key_pressed = FALSE; } /****************************************************************************************/ GtkWidget* gabedit_contoursplot_new () { GabeditContoursPlot *contoursplot; contoursplot = g_object_new (GABEDIT_TYPE_ContoursPLOT, NULL); return GTK_WIDGET (contoursplot); } /****************************************************************************************/ static void gabedit_contoursplot_destroy (GtkObject *object) { GabeditContoursPlot *contoursplot; g_return_if_fail (object != NULL); g_return_if_fail (G_IS_OBJECT (object)); g_return_if_fail (GABEDIT_IS_ContoursPLOT (object)); contoursplot = GABEDIT_ContoursPLOT (object); if (contoursplot->plotting_area && G_IS_OBJECT(contoursplot->plotting_area)) { g_object_unref(G_OBJECT(contoursplot->plotting_area)); contoursplot->plotting_area = NULL; } if (contoursplot->old_area && G_IS_OBJECT(contoursplot->old_area)) { g_object_unref(G_OBJECT(contoursplot->old_area)); contoursplot->old_area = NULL; } if (contoursplot->cairo_area) { cairo_destroy (contoursplot->cairo_area); contoursplot->cairo_area = NULL; } if (contoursplot->cairo_widget) { cairo_destroy (contoursplot->cairo_widget); contoursplot->cairo_widget = NULL; } if (contoursplot->back_gc && G_IS_OBJECT(contoursplot->back_gc)) { g_object_unref(contoursplot->back_gc); contoursplot->back_gc = NULL; } if (contoursplot->fore_gc && G_IS_OBJECT(contoursplot->fore_gc)) { g_object_unref(contoursplot->fore_gc); contoursplot->fore_gc = NULL; } if (contoursplot->data_gc && G_IS_OBJECT(contoursplot->data_gc)) { g_object_unref(contoursplot->data_gc); contoursplot->data_gc = NULL; } if (contoursplot->lines_gc && G_IS_OBJECT(contoursplot->lines_gc)) { g_object_unref(contoursplot->lines_gc); contoursplot->lines_gc = NULL; } if (contoursplot->hmajor_grid_gc && G_IS_OBJECT(contoursplot->hmajor_grid_gc)) { g_object_unref(contoursplot->hmajor_grid_gc); contoursplot->hmajor_grid_gc = NULL; } if (contoursplot->hminor_grid_gc && G_IS_OBJECT(contoursplot->hminor_grid_gc)) { g_object_unref(contoursplot->hminor_grid_gc); contoursplot->hminor_grid_gc = NULL; } if (contoursplot->vmajor_grid_gc && G_IS_OBJECT(contoursplot->vmajor_grid_gc)) { g_object_unref(contoursplot->vmajor_grid_gc); contoursplot->vmajor_grid_gc = NULL; } if (contoursplot->vminor_grid_gc && G_IS_OBJECT(contoursplot->vminor_grid_gc)) { g_object_unref(contoursplot->vminor_grid_gc); contoursplot->vminor_grid_gc = NULL; } if (GTK_OBJECT_CLASS (parent_class)->destroy) (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); gtk_object_destroy (object); } /****************************************************************************************/ static gint contoursplot_get_font_size (GtkWidget* widget, PangoFontDescription* font_desc) { gint font_size = 8; if(!font_desc) return font_size; font_size = pango_font_description_get_size (font_desc) / PANGO_SCALE; return font_size; } /********************************************************************************/ static gint gabedit_contoursplot_grab(GtkWidget* widget, GdkEventCrossing* event) { if(!event) return FALSE; switch(event->type) { case GDK_ENTER_NOTIFY: gtk_grab_add(GTK_WIDGET (widget)); break; case GDK_LEAVE_NOTIFY: { GabeditContoursPlot *contoursplot = NULL; if(widget && GABEDIT_IS_ContoursPLOT (widget)) contoursplot = GABEDIT_ContoursPLOT (widget); gtk_grab_remove(GTK_WIDGET (widget)); if(contoursplot) { contoursplot->shift_key_pressed = FALSE; contoursplot->control_key_pressed = FALSE; } } break; default: break; } return TRUE; } /********************************************************************************/ static gint gabedit_contoursplot_key_press(GtkWidget* widget, GdkEventKey *event) { GabeditContoursPlot *contoursplot; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GABEDIT_IS_ContoursPLOT (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); contoursplot = GABEDIT_ContoursPLOT (widget); if((event->keyval == GDK_Shift_L || event->keyval == GDK_Shift_R) ) contoursplot->shift_key_pressed = TRUE; if((event->keyval == GDK_Control_L || event->keyval == GDK_Control_R) ) contoursplot->control_key_pressed = TRUE; if((event->keyval == GDK_Alt_L || event->keyval == GDK_Alt_L) ) contoursplot->control_key_pressed = TRUE; if((event->keyval == GDK_d || event->keyval == GDK_D) ) contoursplot->d_key_pressed = TRUE; if((event->keyval == GDK_c || event->keyval == GDK_C) ) { if(contoursplot->control_key_pressed) copyImageToClipBoard(widget); } if((event->keyval == GDK_v || event->keyval == GDK_V) ) { if(contoursplot->control_key_pressed) { add_object_image(contoursplot, 0, 0, -1, -1, NULL); gtk_widget_queue_draw(widget); } } if((event->keyval == GDK_t || event->keyval == GDK_T) ) contoursplot->t_key_pressed = TRUE; if((event->keyval == GDK_l || event->keyval == GDK_L) ) contoursplot->l_key_pressed = TRUE; if((event->keyval == GDK_i || event->keyval == GDK_I) ) contoursplot->i_key_pressed = TRUE; if((event->keyval == GDK_r || event->keyval == GDK_R) ) contoursplot->r_key_pressed = TRUE; return TRUE; } /********************************************************************************/ static gint gabedit_contoursplot_key_release(GtkWidget* widget, GdkEventKey *event) { GabeditContoursPlot *contoursplot; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GABEDIT_IS_ContoursPLOT (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); contoursplot = GABEDIT_ContoursPLOT (widget); if((event->keyval == GDK_Shift_L || event->keyval == GDK_Shift_R) ) contoursplot->shift_key_pressed = FALSE; if((event->keyval == GDK_Control_L || event->keyval == GDK_Control_R) ) contoursplot->control_key_pressed = FALSE; if((event->keyval == GDK_Alt_L || event->keyval == GDK_Alt_R) ) contoursplot->control_key_pressed = FALSE; if((event->keyval == GDK_d || event->keyval == GDK_D) ) contoursplot->d_key_pressed = FALSE; if((event->keyval == GDK_t || event->keyval == GDK_T) ) contoursplot->t_key_pressed = FALSE; if((event->keyval == GDK_l || event->keyval == GDK_L) ) contoursplot->l_key_pressed = FALSE; if((event->keyval == GDK_i || event->keyval == GDK_I) ) contoursplot->i_key_pressed = FALSE; if((event->keyval == GDK_r || event->keyval == GDK_R) ) contoursplot->r_key_pressed = FALSE; return TRUE; } /****************************************************************************************/ static void gabedit_contoursplot_realize (GtkWidget *widget) { GabeditContoursPlot *contoursplot; GdkWindowAttr attributes; gint attributes_mask; GdkGCValues gc_values; GdkGCValuesMask gc_values_mask; GdkColor black; GdkColor white; GdkColormap *colormap; g_return_if_fail (widget != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (widget)); GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); contoursplot = GABEDIT_ContoursPLOT (widget); attributes.x = widget->allocation.x; attributes.y = widget->allocation.y; attributes.width = widget->allocation.width; attributes.height = widget->allocation.height; attributes.wclass = GDK_INPUT_OUTPUT; attributes.window_type = GDK_WINDOW_CHILD; attributes.event_mask = ( gtk_widget_get_events (widget) | GDK_VISIBILITY_NOTIFY_MASK| GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_ENTER_NOTIFY_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_FOCUS_CHANGE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); attributes.visual = gtk_widget_get_visual (widget); attributes.colormap = gtk_widget_get_colormap (widget); attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; widget->window = gdk_window_new (widget->parent->window, &attributes, attributes_mask); widget->style = gtk_style_attach (widget->style, widget->window); gdk_window_set_user_data (widget->window, widget); gtk_style_set_background (widget->style, widget->window, GTK_STATE_ACTIVE); colormap=gdk_drawable_get_colormap(widget->window); black.red = 0; black.green = 0; black.blue = 0; gdk_colormap_alloc_color (colormap, &black, FALSE, TRUE); white.red = 65535; white.green = 65535; white.blue = 65535; gdk_colormap_alloc_color (colormap, &white, FALSE, TRUE); gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &white); gtk_widget_modify_fg (widget, GTK_STATE_NORMAL, &black); gc_values.foreground=white; gc_values.line_style=GDK_LINE_SOLID; gc_values.line_width=1; gc_values_mask=GDK_GC_FOREGROUND | GDK_GC_LINE_STYLE | GDK_GC_LINE_WIDTH; contoursplot->back_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); gc_values.foreground=black; gc_values.line_style=GDK_LINE_SOLID; gc_values.line_width=2; gc_values_mask=GDK_GC_FOREGROUND | GDK_GC_LINE_STYLE | GDK_GC_LINE_WIDTH; contoursplot->fore_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); gc_values.foreground=black; contoursplot->hmajor_grid_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); contoursplot->vmajor_grid_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); gc_values.foreground=black; gc_values.line_style=GDK_LINE_ON_OFF_DASH; gc_values.line_width=1; gc_values_mask=GDK_GC_FOREGROUND | GDK_GC_LINE_STYLE | GDK_GC_LINE_WIDTH; contoursplot->hminor_grid_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); contoursplot->vminor_grid_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); contoursplot->data_gc=gdk_gc_new (widget->window); gc_values.foreground=black; gc_values.line_style=GDK_LINE_SOLID; gc_values.line_width=2; gc_values_mask=GDK_GC_FOREGROUND | GDK_GC_LINE_STYLE | GDK_GC_LINE_WIDTH; contoursplot->lines_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); contoursplot->font_size = contoursplot_get_font_size (widget, widget->style->font_desc); /* Create the initial legends*/ contoursplot->v_legends_str = NULL; contoursplot->h_legends_str = NULL; contoursplot_build_legends(contoursplot); contoursplot_calculate_legends_sizes(contoursplot); contoursplot->colormap_legends_str = NULL; contoursplot_build_colormap_legends(contoursplot); contoursplot_calculate_colormap_sizes(contoursplot); contoursplot_calculate_sizes(contoursplot); add_toolbar_and_popup_menu(widget, NULL); } /****************************************************************************************/ static void reset_theme(GtkWidget *widget, gint line_width, GdkColor* foreColor, GdkColor* backColor ) { GabeditContoursPlot *contoursplot; GdkGCValues gc_values; GdkGCValuesMask gc_values_mask; GdkColormap *colormap; g_return_if_fail (widget != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (widget)); contoursplot = GABEDIT_ContoursPLOT (widget); colormap=gdk_drawable_get_colormap(widget->window); gdk_colormap_alloc_color (colormap, backColor, FALSE, TRUE); gdk_colormap_alloc_color (colormap, foreColor, FALSE, TRUE); gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, backColor); gtk_widget_modify_fg (widget, GTK_STATE_NORMAL, foreColor); if (contoursplot->back_gc && G_IS_OBJECT(contoursplot->back_gc)) { g_object_unref(contoursplot->back_gc); contoursplot->back_gc = NULL; } if (contoursplot->fore_gc && G_IS_OBJECT(contoursplot->fore_gc)) { g_object_unref(contoursplot->fore_gc); contoursplot->fore_gc = NULL; } if (contoursplot->data_gc && G_IS_OBJECT(contoursplot->data_gc)) { g_object_unref(contoursplot->data_gc); contoursplot->data_gc = NULL; } if (contoursplot->hmajor_grid_gc && G_IS_OBJECT(contoursplot->hmajor_grid_gc)) { g_object_unref(contoursplot->hmajor_grid_gc); contoursplot->hmajor_grid_gc = NULL; } if (contoursplot->hminor_grid_gc && G_IS_OBJECT(contoursplot->hminor_grid_gc)) { g_object_unref(contoursplot->hminor_grid_gc); contoursplot->hminor_grid_gc = NULL; } if (contoursplot->vmajor_grid_gc && G_IS_OBJECT(contoursplot->vmajor_grid_gc)) { g_object_unref(contoursplot->vmajor_grid_gc); contoursplot->vmajor_grid_gc = NULL; } if (contoursplot->vminor_grid_gc && G_IS_OBJECT(contoursplot->vminor_grid_gc)) { g_object_unref(contoursplot->vminor_grid_gc); contoursplot->vminor_grid_gc = NULL; } gc_values.foreground=*backColor; gc_values.line_style=GDK_LINE_SOLID; gc_values.line_width=line_width; gc_values_mask=GDK_GC_FOREGROUND | GDK_GC_LINE_STYLE | GDK_GC_LINE_WIDTH; contoursplot->back_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); gc_values.foreground=*foreColor; gc_values.line_style=GDK_LINE_SOLID; gc_values.line_width=line_width; gc_values_mask=GDK_GC_FOREGROUND | GDK_GC_LINE_STYLE | GDK_GC_LINE_WIDTH; contoursplot->fore_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); gc_values.foreground=*foreColor; contoursplot->hmajor_grid_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); contoursplot->vmajor_grid_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); gc_values.foreground=*foreColor; gc_values.line_style=GDK_LINE_ON_OFF_DASH; if(line_width/2>0) gc_values.line_width=line_width/2; else gc_values.line_width=line_width; gc_values_mask=GDK_GC_FOREGROUND | GDK_GC_LINE_STYLE | GDK_GC_LINE_WIDTH; contoursplot->hminor_grid_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); contoursplot->vminor_grid_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); contoursplot->data_gc=gdk_gc_new (widget->window); if (contoursplot->nObjectsLine<1) { if (contoursplot->lines_gc && G_IS_OBJECT(contoursplot->lines_gc)) { g_object_unref(contoursplot->lines_gc); contoursplot->lines_gc = NULL; } gc_values.foreground=*foreColor; gc_values.line_style=GDK_LINE_SOLID; gc_values.line_width=line_width; gc_values_mask=GDK_GC_FOREGROUND | GDK_GC_LINE_STYLE | GDK_GC_LINE_WIDTH; contoursplot->lines_gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); } contoursplot_build_legends(contoursplot); contoursplot_calculate_legends_sizes(contoursplot); contoursplot_calculate_sizes(contoursplot); reset_object_text_pango(contoursplot); } /****************************************************************************************/ static void set_theme_publication(GtkWidget *widget) { GdkColor black; GdkColor white; gint line_width = 2; black.red = 0; black.green = 0; black.blue = 0; white.red = 65535; white.green = 65535; white.blue = 65535; reset_theme(widget, line_width, &black, &white); } /****************************************************************************************/ static void set_theme_green_black(GtkWidget *widget) { GdkColor black; GdkColor green; gint line_width = 2; black.red = 0; black.green = 0; black.blue = 0; green.red = 0; green.green = 65535; green.blue = 0; reset_theme(widget, line_width, &green, &black); } /****************************************************************************************/ static void theme_line_width_changed_value(GtkSpinButton *spinbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* widget = GTK_WIDGET(user_data); GdkColor foreColor; GdkColor backColor; GdkGCValues gc_values; gint line_width = 1; GabeditContoursPlot* contoursplot = NULL; GdkColormap *colormap; g_return_if_fail (GABEDIT_IS_ContoursPLOT (widget)); contoursplot = GABEDIT_ContoursPLOT(widget); colormap = gdk_window_get_colormap(widget->window); gdk_gc_get_values(contoursplot->back_gc, &gc_values); gdk_colormap_query_color(colormap, gc_values.foreground.pixel,&backColor); gdk_gc_get_values(contoursplot->fore_gc, &gc_values); gdk_colormap_query_color(colormap, gc_values.foreground.pixel,&foreColor); line_width=gc_values.line_width; line_width = gtk_spin_button_get_value(spinbutton); reset_theme(widget, line_width, &foreColor, &backColor); } } /****************************************************************************************/ static void theme_back_color_changed_value(GtkColorButton *colorbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* widget = GTK_WIDGET(user_data); GdkColor foreColor; GdkColor backColor; GdkGCValues gc_values; gint line_width = 1; GabeditContoursPlot* contoursplot = NULL; GdkColormap *colormap; g_return_if_fail (GABEDIT_IS_ContoursPLOT (widget)); contoursplot = GABEDIT_ContoursPLOT(widget); colormap = gdk_window_get_colormap(widget->window); gtk_color_button_get_color (colorbutton, &backColor); gdk_gc_get_values(contoursplot->fore_gc, &gc_values); gdk_colormap_query_color(colormap, gc_values.foreground.pixel,&foreColor); line_width=gc_values.line_width; reset_theme(widget, line_width, &foreColor, &backColor); } } /********************************************************************************************************/ static void theme_fore_color_changed_value(GtkColorButton *colorbutton, gpointer user_data) { if(user_data && G_IS_OBJECT(user_data)) { GtkWidget* widget = GTK_WIDGET(user_data); GdkColor foreColor; GdkColor backColor; GdkGCValues gc_values; gint line_width = 1; GabeditContoursPlot* contoursplot = NULL; GdkColormap *colormap; g_return_if_fail (GABEDIT_IS_ContoursPLOT (widget)); contoursplot = GABEDIT_ContoursPLOT(widget); colormap = gdk_window_get_colormap(widget->window); gtk_color_button_get_color (colorbutton, &foreColor); gdk_gc_get_values(contoursplot->back_gc, &gc_values); gdk_colormap_query_color(colormap, gc_values.foreground.pixel,&backColor); line_width=gc_values.line_width; reset_theme(widget, line_width, &foreColor, &backColor); } } /********************************************************************************************************/ static void set_theme_dialog(GtkWidget* widget) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* frame = NULL; GtkWidget* hbox = NULL; GtkWidget* hbox1 = NULL; GtkWidget* label = NULL; GtkWidget* spin = NULL; GtkWidget* button = NULL; GtkWidget* buttonBack = NULL; GtkWidget* buttonFore = NULL; GtkWidget* parentWindow = NULL; GtkWidget* vbox_window = NULL; GdkColor foreColor; GdkColor backColor; GdkGCValues gc_values; gint line_width = 1; GabeditContoursPlot* contoursplot = NULL; GdkColormap *colormap; g_return_if_fail (GABEDIT_IS_ContoursPLOT (widget)); contoursplot = GABEDIT_ContoursPLOT(widget); colormap = gdk_window_get_colormap(widget->window); gdk_gc_get_values(contoursplot->back_gc, &gc_values); gdk_colormap_query_color(colormap, gc_values.foreground.pixel,&backColor); gdk_gc_get_values(contoursplot->fore_gc, &gc_values); gdk_colormap_query_color(colormap, gc_values.foreground.pixel,&foreColor); line_width=gc_values.line_width; gtk_window_set_title (GTK_WINDOW (window), _("Set theme")); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_modal (GTK_WINDOW (window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), (gpointer)contoursplot); vbox_window=gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox_window); gtk_widget_show(vbox_window); hbox1=gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_window), hbox1, TRUE, FALSE, 2); gtk_widget_show(hbox1); frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(hbox1), frame, TRUE, FALSE, 2); gtk_widget_show(frame); hbox=gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_widget_show(hbox); label=gtk_label_new(_("Line width :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); spin = gtk_spin_button_new_with_range(0, 10, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), line_width); gtk_box_pack_start(GTK_BOX(hbox), spin, TRUE, FALSE, 2); gtk_widget_show(spin); g_object_set_data(G_OBJECT (window), "SpinLineWidth", spin); label=gtk_label_new(_("Background color :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); button = gtk_color_button_new_with_color (&backColor); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 2); gtk_widget_show(button); g_object_set_data(G_OBJECT (window), "BackColorButton", button); buttonBack = button; label=gtk_label_new(_("Foreground color :")); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 2); gtk_widget_show(label); button = gtk_color_button_new_with_color (&foreColor); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 2); gtk_widget_show(button); g_object_set_data(G_OBJECT (window), "ForeColorButton", button); buttonFore = button; g_signal_connect(G_OBJECT(spin), "value-changed", G_CALLBACK(theme_line_width_changed_value), contoursplot); g_signal_connect(G_OBJECT(buttonBack), "color-set", G_CALLBACK(theme_back_color_changed_value), contoursplot); g_signal_connect(G_OBJECT(buttonFore), "color-set", G_CALLBACK(theme_fore_color_changed_value), contoursplot); parentWindow = get_parent_window(GTK_WIDGET(contoursplot)); if(parentWindow) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parentWindow)); } gtk_widget_show(window); } /****************************************************************************************/ static void gabedit_contoursplot_size_request (GtkWidget *widget, GtkRequisition *requisition) { g_return_if_fail (widget != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (widget)); g_return_if_fail (requisition != NULL); requisition->width = ContoursPLOT_DEFAULT_SIZE; requisition->height = ContoursPLOT_DEFAULT_SIZE; } /****************************************************************************************/ static void gabedit_contoursplot_size_allocate (GtkWidget *widget, GtkAllocation *allocation) { GabeditContoursPlot *contoursplot; g_return_if_fail (widget != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (widget)); g_return_if_fail (allocation != NULL); widget->allocation = *allocation; contoursplot=GABEDIT_ContoursPLOT(widget); if (GTK_WIDGET_REALIZED (widget)) gdk_window_move_resize (widget->window, allocation->x, allocation->y, allocation->width, allocation->height); contoursplot_calculate_sizes(contoursplot); } /****************************************************************************************/ static void draw_points(GtkWidget *widget, GabeditContoursPlot *contoursplot, ContoursPlotData* data) { gint i; gint x, y; GdkRectangle rect; int n; rect.x=0; rect.y=0; rect.width=widget->allocation.width; rect.height=widget->allocation.height; for (n=0; nnContours; n++) { gdk_gc_set_rgb_fg_color (contoursplot->data_gc, &data->contours[n].point_color); for (i=0; icontours[n].size; i++) { if(data->contours[n].point_size<1) continue; value2pixel(contoursplot, data->contours[n].x[i], data->contours[n].y[i], &x, &y); y=contoursplot->plotting_rect.height-y; x -= data->contours[n].point_width/2; y -= data->contours[n].point_height/2; if(data->contours[n].point_pango) contoursplot_cairo_layout(contoursplot, contoursplot->cairo_area, x, y, data->contours[n].point_pango,FALSE,FALSE,0); } } } /****************************************************************************************/ static void draw_rectangle_gradient(GabeditContoursPlot *contoursplot, cairo_t* cr, gint x1, gint y1, gint x2, gint y2, gdouble c1[], gdouble c2[], gboolean vertical, gdouble alpha) { cairo_pattern_t *pat; gint w = 0; gint h = 0; gdouble col1[3]; gdouble col2[3]; gint k; for(k=0;k<3;k++) col1[k] = c1[k]; for(k=0;k<3;k++) col2[k] = c2[k]; if(vertical) { if(x2cairo_export) { cairo_t* cr =contoursplot->cairo_export; cairo_rectangle(cr, x1, y1, w, h); cairo_set_source(cr, pat); cairo_fill(cr); cairo_stroke (cr); } /* cairo_restore (cr); */ cairo_pattern_destroy (pat); } /****************************************************************************************/ /* static void draw_rectangle_bilinear(GabeditContoursPlot *contoursplot, gint x1, gint y1, gint x2, gint y2, gdouble c1[], gdouble c2[], gdouble c3[], gdouble c4[] ) { draw_rectangle_gradient(contoursplot, contoursplot->cairo_area, x1, y1, x2, y2, c1, c2, FALSE, 1.0); draw_rectangle_gradient(contoursplot, contoursplot->cairo_area, x1, y1, x2, y2, c2, c3, TRUE, 0.5); draw_rectangle_gradient(contoursplot, contoursplot->cairo_area, x1, y1, x2, y2, c3, c4, FALSE, 0.5); draw_rectangle_gradient(contoursplot, contoursplot->cairo_area, x1, y1, x2, y2, c1, c4, TRUE, 0.5); } */ /****************************************************************************************/ static void draw_lines(GtkWidget *widget, GabeditContoursPlot *contoursplot, ContoursPlotData* data) { GdkPoint* points; gint i; int n; points=(GdkPoint*)g_malloc( (sizeof(GdkPoint) * 2)); for (n=0; nnContours; n++) { gdk_gc_set_rgb_fg_color (contoursplot->data_gc, &data->contours[n].line_color); gdk_gc_set_line_attributes (contoursplot->data_gc, data->contours[n].line_width, data->contours[n].line_style, GDK_CAP_ROUND, GDK_JOIN_MITER); for (i=0; icontours[n].size-1; i++) { if(data->contours[n].line_width<1) continue; if(data->contours[n].index[i] != data->contours[n].index[i+1]) continue; value2pixel(contoursplot, data->contours[n].x[i], data->contours[n].y[i], (gint *)&points[0].x, (gint *)&points[0].y); points[0].y=contoursplot->plotting_rect.height-points[0].y; value2pixel(contoursplot, data->contours[n].x[i+1], data->contours[n].y[i+1], (gint *)&points[1].x, (gint *)&points[1].y); points[1].y=contoursplot->plotting_rect.height-points[1].y; contoursplot_cairo_lines(contoursplot, contoursplot->cairo_area, widget, contoursplot->data_gc, points, 2); } } g_free(points); } /****************************************************************************************/ static void draw_zoom_rectangle(GtkWidget *widget, GabeditContoursPlot *contoursplot) { if (!contoursplot->mouse_zoom_enabled || contoursplot->mouse_button != contoursplot->mouse_zoom_button) return; gdk_draw_rectangle(widget->window, contoursplot->fore_gc, FALSE, contoursplot->zoom_rect.x, contoursplot->zoom_rect.y, contoursplot->zoom_rect.width, contoursplot->zoom_rect.height); } /****************************************************************************************/ static void draw_object_line_gdk(GtkWidget *widget, GabeditContoursPlot *contoursplot) { gint arrow_size = 0; gint i = -1; if (contoursplot->object_begin_point.x<0 || contoursplot->object_begin_point.y<0) return; if (contoursplot->object_end_point.x<0 || contoursplot->object_end_point.y<0) return; i = contoursplot->selected_objects_line_num; if(i<0 && contoursplot->nObjectsLine>0) i = contoursplot->nObjectsLine-1; if(i>-1) { gdk_gc_set_rgb_fg_color (contoursplot->lines_gc, &contoursplot->objectsLine[i].color); gdk_gc_set_line_attributes (contoursplot->lines_gc, contoursplot->objectsLine[i].width, /* contoursplot->objectsLine[i].style, */ GDK_LINE_ON_OFF_DASH, GDK_CAP_ROUND, GDK_JOIN_MITER); arrow_size = contoursplot->objectsLine[i].arrow_size; } gdk_draw_line(widget->window, contoursplot->lines_gc, contoursplot->object_begin_point.x, contoursplot->object_begin_point.y, contoursplot->object_end_point.x, contoursplot->object_end_point.y ); if(arrow_size>0) { gdouble x1, y1, x2, y2; calc_arrow_vertexes(30.0, arrow_size*5.0, (gdouble)contoursplot->object_begin_point.x, (gdouble)contoursplot->object_begin_point.y, (gdouble)contoursplot->object_end_point.x, (gdouble)contoursplot->object_end_point.y, &x1, &y1, &x2, &y2 ); gdk_draw_line(widget->window, contoursplot->lines_gc, (gint)x1, (gint)y1, contoursplot->object_end_point.x, contoursplot->object_end_point.y ); gdk_draw_line(widget->window, contoursplot->lines_gc, (gint)x2, (gint)y2, contoursplot->object_end_point.x, contoursplot->object_end_point.y ); } } /****************************************************************************************/ static void get_rotated_rectangle( gint x, gint y, gint w, gint h, gdouble angle, gint* x1, gint* y1, gint* x2, gint* y2, gint* x3, gint* y3, gint* x4, gint* y4) { gdouble a = -angle; gdouble cosa = cos(a); gdouble sina = sin(a); *x1 = x; *y1 = y; *x2 = (gint)(x+w*cosa); *y2 = (gint)(y+w*sina); *x3 = x+(gint)(w*cosa-h*sina); *y3 = (gint)(y+w*sina+h*cosa); *x4 = (gint)(x-h*sina); *y4 = (gint)(y+h*cosa); } /*****************************************************************************************************************/ static void draw_rotated_rectangle(GtkWidget *widget, GabeditContoursPlot* contoursplot, gint x, gint y, gint w, gint h, gdouble angle) { static GdkPoint* points = NULL; if(!points) points = g_malloc(4*sizeof(GdkPoint)); get_rotated_rectangle( x, y, w, h, angle, &points[0].x, &points[0].y, &points[1].x, &points[1].y, &points[2].x, &points[2].y, &points[3].x, &points[3].y); gdk_draw_polygon(widget->window, contoursplot->fore_gc, FALSE, points, 4); } /****************************************************************************************/ static void draw_selected_objects_text_rectangle(GtkWidget *widget, GabeditContoursPlot *contoursplot) { gint i = contoursplot->selected_objects_text_num; gdouble angle = 0; if(i<0 || i>=contoursplot->nObjectsText) return; if (contoursplot->mouse_zoom_enabled && contoursplot->mouse_button == contoursplot->mouse_zoom_button) return; /* gdk_draw_rectangle(widget->window, contoursplot->fore_gc, FALSE, contoursplot->objectsText[i].xi, contoursplot->objectsText[i].yi, contoursplot->objectsText[i].width, contoursplot->objectsText[i].height); */ angle = contoursplot->objectsText[i].angle; draw_rotated_rectangle(widget, contoursplot, contoursplot->objectsText[i].xi, contoursplot->objectsText[i].yi, contoursplot->objectsText[i].width, contoursplot->objectsText[i].height, angle); } /****************************************************************************************/ static void draw_colormap(GtkWidget *widget, GabeditContoursPlot *contoursplot) { gint i; GdkRectangle rect; gint xlabel = 0; gint xlines = 0; gdouble dy = 0; gint ll = 1; ColorMap* colorMap; GdkColor color; gdouble C[3]; gdouble value; gdouble vmin; gdouble dv; gint x1, y1, x2, y2; gdouble col1[3]={0,0,0}; gdouble col2[3]={0,0,0}; if (!contoursplot->show_colormap) return; colorMap =GABEDIT_ContoursPLOT(contoursplot)->colorsMap.colorMap; if(!colorMap) return; if(colorMap->numberOfColors<2) return; rect.x=0; rect.y=0; rect.width=widget->allocation.width; rect.height=widget->allocation.height; xlabel = contoursplot->plotting_rect.x+contoursplot->plotting_rect.width+2; xlabel += contoursplot->colormap_width/2; ll = contoursplot->colormap_width/2-4; if (contoursplot->y_legends_digits!=0 && contoursplot->show_right_legends) { xlabel += contoursplot->y_legends_width+4; if (contoursplot->v_label && !contoursplot->show_left_legends && contoursplot->show_right_legends) xlabel += contoursplot->v_label_height; } xlines = xlabel - 2 -ll; if(contoursplot->colormap_nlegends<2) dy = 0; else dy = contoursplot->colormap_height/(gdouble)(contoursplot->colormap_nlegends-1); vmin = colorMap->colorValue[0].value; dv = (colorMap->colorValue[colorMap->numberOfColors-1].value-colorMap->colorValue[0].value)/(contoursplot->colormap_nlegends-1); x1 = xlines; y1 = contoursplot->plotting_rect.y+contoursplot->plotting_rect.height; for(i=0; icolormap_nlegends;i++) { contoursplot_cairo_string(contoursplot, contoursplot->cairo_widget, widget, contoursplot->fore_gc, xlabel, contoursplot->plotting_rect.y+contoursplot->plotting_rect.height-i*dy, contoursplot->colormap_legends_str[i], FALSE, TRUE,0); value = vmin + dv*i; set_Color_From_colorMap(colorMap, C, value); color.red=(gushort)(C[0]*65535); color.green=(gushort)(C[1]*65535); color.blue=(gushort)(C[2]*65535); gdk_gc_set_rgb_fg_color (contoursplot->data_gc, &color); gdk_gc_set_line_attributes (contoursplot->data_gc, 2, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_MITER); contoursplot_cairo_line(contoursplot, contoursplot->cairo_widget, GTK_WIDGET(contoursplot), contoursplot->data_gc, xlines, contoursplot->plotting_rect.y+contoursplot->plotting_rect.height-i*dy, xlines+ll, contoursplot->plotting_rect.y+contoursplot->plotting_rect.height-i*dy ); if(i==0) { int k; for(k=0;k<3;k++) col1[k] = C[k]; x1 = xlines; y1 = contoursplot->plotting_rect.y+contoursplot->plotting_rect.height-i*dy; } else { int k; for(k=0;k<3;k++) col2[k] = C[k]; x2 = xlines+ll; y2 = contoursplot->plotting_rect.y+contoursplot->plotting_rect.height-i*dy; /* that not works */ draw_rectangle_gradient(contoursplot, contoursplot->cairo_widget, x1, y1, x2, y2, col1, col2,TRUE,1.0); for(k=0;k<3;k++) col1[k] = col2[k]; x1 = xlines; y1 = y2; } } } /****************************************************************************************/ static void draw_selected_objects_image_rectangle(GtkWidget *widget, GabeditContoursPlot *contoursplot) { gint i = contoursplot->selected_objects_image_num; if(i<0 || i>=contoursplot->nObjectsImage) return; if (contoursplot->mouse_zoom_enabled && contoursplot->mouse_button == contoursplot->mouse_zoom_button) return; gdk_draw_rectangle(widget->window, contoursplot->fore_gc, FALSE, contoursplot->objectsImage[i].xi, contoursplot->objectsImage[i].yi, contoursplot->objectsImage[i].widthi, contoursplot->objectsImage[i].heighti); } /****************************************************************************************/ static void draw_distance_line(GtkWidget *widget, GabeditContoursPlot *contoursplot) { PangoLayout *playout; GdkRectangle rect; gchar begin[100]=" "; gchar end[100] = " "; gdouble x1,y1,x2,y2; gint x,y; if (!contoursplot->mouse_distance_enabled || contoursplot->mouse_button != contoursplot->mouse_distance_button) return; x=contoursplot->distance_rect.x; y=contoursplot->distance_rect.y; if(gabedit_contoursplot_get_point(GABEDIT_ContoursPLOT(contoursplot), x, y, &x1, &y1)) sprintf(begin,"(%f ; %f)",x1,y1); x = contoursplot->distance_rect.x+contoursplot->distance_rect.width; y = contoursplot->distance_rect.y+contoursplot->distance_rect.height; if(gabedit_contoursplot_get_point(GABEDIT_ContoursPLOT(contoursplot), x, y, &x2, &y2)) sprintf(end,"(%f ; %f)",x2,y2); rect.x=0; rect.y=0; rect.width=widget->allocation.width; rect.height=widget->allocation.height; playout=gtk_widget_create_pango_layout (widget, begin); if(!playout) return; gtk_paint_layout (widget->style, widget->window, GTK_STATE_NORMAL, FALSE, &rect, widget, NULL, contoursplot->distance_rect.x, contoursplot->distance_rect.y, playout); if (playout) g_object_unref(G_OBJECT(playout)); playout=gtk_widget_create_pango_layout (widget, end); gtk_paint_layout (widget->style, widget->window, GTK_STATE_NORMAL, FALSE, &rect, widget, NULL, contoursplot->distance_rect.x+contoursplot->distance_rect.width, contoursplot->distance_rect.y+contoursplot->distance_rect.height, playout); if (playout) g_object_unref(G_OBJECT(playout)); gdk_draw_line(widget->window, contoursplot->fore_gc, contoursplot->distance_rect.x, contoursplot->distance_rect.y, contoursplot->distance_rect.x+contoursplot->distance_rect.width, contoursplot->distance_rect.y+contoursplot->distance_rect.height); } /****************************************************************************************/ static void draw_hminor_ticks(GtkWidget *widget, GabeditContoursPlot *contoursplot) { gint i; gint j; if (contoursplot->hmajor_ticks<2 || contoursplot->hminor_ticks == 0 ) return; for (i=0; i < contoursplot->hmajor_ticks-1; i++) for (j=1; j <= contoursplot->hminor_ticks; j++) { if (contoursplot->show_bottom_legends) contoursplot_cairo_line(contoursplot, contoursplot->cairo_widget, widget, contoursplot->fore_gc, contoursplot->plotting_rect.x+i*contoursplot->d_hminor*(contoursplot->hminor_ticks+1)+j*contoursplot->d_hminor, contoursplot->plotting_rect.y+contoursplot->plotting_rect.height, contoursplot->plotting_rect.x+i*contoursplot->d_hminor*(contoursplot->hminor_ticks+1)+j*contoursplot->d_hminor, contoursplot->plotting_rect.y+contoursplot->plotting_rect.height+contoursplot->length_ticks); if (contoursplot->show_top_legends) contoursplot_cairo_line(contoursplot, contoursplot->cairo_widget, widget, contoursplot->fore_gc, contoursplot->plotting_rect.x+i*contoursplot->d_hminor*(contoursplot->hminor_ticks+1)+j*contoursplot->d_hminor, contoursplot->plotting_rect.y, contoursplot->plotting_rect.x+i*contoursplot->d_hminor*(contoursplot->hminor_ticks+1)+j*contoursplot->d_hminor, contoursplot->plotting_rect.y-contoursplot->length_ticks); } } /****************************************************************************************/ static void draw_hmajor_ticks_and_xlegends(GtkWidget *widget, GabeditContoursPlot *contoursplot) { gint i; GdkRectangle rect; rect.x=0; rect.y=0; rect.width=widget->allocation.width; rect.height=widget->allocation.height; if (contoursplot->hmajor_ticks>1) for (i=0; i < contoursplot->hmajor_ticks; i++) { gint l1 = i; if(contoursplot->reflect_x) l1 = contoursplot->hmajor_ticks-i-1; if (contoursplot->show_bottom_legends) contoursplot_cairo_line(contoursplot, contoursplot->cairo_widget, widget, contoursplot->fore_gc, contoursplot->plotting_rect.x+i*contoursplot->d_hmajor, contoursplot->plotting_rect.y+contoursplot->plotting_rect.height, contoursplot->plotting_rect.x+i*contoursplot->d_hmajor, contoursplot->plotting_rect.y+contoursplot->plotting_rect.height+contoursplot->length_ticks*2); if (contoursplot->show_top_legends) contoursplot_cairo_line(contoursplot, contoursplot->cairo_widget, widget, contoursplot->fore_gc, contoursplot->plotting_rect.x+i*contoursplot->d_hmajor, contoursplot->plotting_rect.y, contoursplot->plotting_rect.x+i*contoursplot->d_hmajor, contoursplot->plotting_rect.y-contoursplot->length_ticks*2); if (contoursplot->x_legends_digits!=0 && contoursplot->show_bottom_legends) contoursplot_cairo_string(contoursplot, contoursplot->cairo_widget, widget, contoursplot->fore_gc, contoursplot->plotting_rect.x+i*contoursplot->d_hmajor-0.5*contoursplot->x_legends_width, contoursplot->plotting_rect.y+contoursplot->plotting_rect.height+contoursplot->length_ticks*2, contoursplot->h_legends_str[l1], FALSE, FALSE,0); if (contoursplot->x_legends_digits!=0 && contoursplot->show_top_legends) contoursplot_cairo_string(contoursplot, contoursplot->cairo_widget, widget, contoursplot->fore_gc, contoursplot->plotting_rect.x+i*contoursplot->d_hmajor-0.5*contoursplot->x_legends_width, contoursplot->plotting_rect.y-contoursplot->length_ticks*2-contoursplot->x_legends_height, contoursplot->h_legends_str[l1], FALSE, FALSE,0); } if ( contoursplot->h_label && contoursplot->x_legends_digits!=0 && contoursplot->show_bottom_legends) { contoursplot_cairo_layout(contoursplot, contoursplot->cairo_widget, contoursplot->plotting_rect.x+0.5*contoursplot->plotting_rect.width, contoursplot->plotting_rect.y+contoursplot->plotting_rect.height+contoursplot->length_ticks*2+contoursplot->x_legends_height, contoursplot->h_label,TRUE,FALSE,0); } if (contoursplot->h_label && contoursplot->x_legends_digits!=0 && contoursplot->show_top_legends && !contoursplot->show_bottom_legends) { contoursplot_cairo_layout(contoursplot, contoursplot->cairo_widget, contoursplot->plotting_rect.x+0.5*contoursplot->plotting_rect.width, contoursplot->plotting_rect.y-contoursplot->x_legends_height-contoursplot->length_ticks*2-contoursplot->h_label_height, contoursplot->h_label,TRUE,FALSE,0); } } /****************************************************************************************/ static void contoursplot_cairo_line_grid(GabeditContoursPlot *contoursplot, cairo_t* cr, GtkWidget* widget, GdkGC* gc, gdouble x1,gdouble y1,gdouble x2,gdouble y2) { gabedit_contoursplot_cairo_line(cr, widget, gc, x1, y1, x2, y2); if(contoursplot->cairo_export) { x1+= contoursplot->plotting_rect.x; x2+= contoursplot->plotting_rect.x; y1+= contoursplot->plotting_rect.y; y2+= contoursplot->plotting_rect.y; gabedit_contoursplot_cairo_line(contoursplot->cairo_export, widget, gc, x1, y1, x2, y2); } } /****************************************************************************************/ static void draw_hminor_grid(GtkWidget *widget, GabeditContoursPlot *contoursplot) { gint i; gint j; if (contoursplot->hminor_grid && (contoursplot->vmajor_ticks > 1) && (contoursplot->vminor_ticks != 0)) for (i=0; i < contoursplot->vmajor_ticks-1; i++) for (j=1; j <= contoursplot->vminor_ticks; j++) { contoursplot_cairo_line_grid(contoursplot, contoursplot->cairo_area, widget, contoursplot->hminor_grid_gc, 0, i*contoursplot->d_vmajor+j*contoursplot->d_vminor, contoursplot->plotting_rect.width, i*contoursplot->d_vmajor+j*contoursplot->d_vminor); } } /****************************************************************************************/ static void draw_hmajor_grid(GtkWidget *widget, GabeditContoursPlot *contoursplot) { gint i; if (contoursplot->hmajor_grid && (contoursplot->vmajor_ticks > 1) ) for (i=1; i < (contoursplot->vmajor_ticks-1); i++) contoursplot_cairo_line_grid(contoursplot, contoursplot->cairo_area, widget, contoursplot->hmajor_grid_gc, 0, i*contoursplot->d_vmajor, contoursplot->plotting_rect.width, i*contoursplot->d_vmajor); } /****************************************************************************************/ static void draw_vminor_ticks(GtkWidget *widget, GabeditContoursPlot *contoursplot) { gint i; gint j; if ( (contoursplot->vmajor_ticks > 1) && (contoursplot->vminor_ticks != 0) ) for (i=0; i < contoursplot->vmajor_ticks-1; i++) for (j=1; j <= contoursplot->vminor_ticks; j++) { if (contoursplot->show_left_legends) contoursplot_cairo_line(contoursplot, contoursplot->cairo_widget, widget, contoursplot->fore_gc, contoursplot->plotting_rect.x, contoursplot->plotting_rect.y+i*contoursplot->d_vminor*(contoursplot->vminor_ticks+1)+j*contoursplot->d_vminor, contoursplot->plotting_rect.x-contoursplot->length_ticks, contoursplot->plotting_rect.y+i*contoursplot->d_vminor*(contoursplot->vminor_ticks+1)+j*contoursplot->d_vminor); if (contoursplot->show_right_legends) contoursplot_cairo_line(contoursplot, contoursplot->cairo_widget, widget, contoursplot->fore_gc, contoursplot->plotting_rect.x+contoursplot->plotting_rect.width, contoursplot->plotting_rect.y+i*contoursplot->d_vminor*(contoursplot->vminor_ticks+1)+j*contoursplot->d_vminor, contoursplot->plotting_rect.x+contoursplot->plotting_rect.width+contoursplot->length_ticks, contoursplot->plotting_rect.y+i*contoursplot->d_vminor*(contoursplot->vminor_ticks+1)+j*contoursplot->d_vminor); } } /****************************************************************************************/ static void draw_vmajor_ticks_and_ylegends(GtkWidget *widget, GabeditContoursPlot *contoursplot) { gint i; GdkRectangle rect; rect.x=0; rect.y=0; rect.width=widget->allocation.width; rect.height=widget->allocation.height; if (contoursplot->vmajor_ticks>1) for (i=0; i < contoursplot->vmajor_ticks; i++) { gint l1 = i; if(contoursplot->reflect_y) l1 = contoursplot->vmajor_ticks-i-1; if (contoursplot->show_left_legends) contoursplot_cairo_line(contoursplot, contoursplot->cairo_widget, widget, contoursplot->fore_gc, contoursplot->plotting_rect.x, contoursplot->plotting_rect.y+i*contoursplot->d_vmajor, contoursplot->plotting_rect.x-contoursplot->length_ticks*2, contoursplot->plotting_rect.y+i*contoursplot->d_vmajor); if (contoursplot->show_right_legends) contoursplot_cairo_line(contoursplot, contoursplot->cairo_widget, widget, contoursplot->fore_gc, contoursplot->plotting_rect.x+contoursplot->plotting_rect.width, contoursplot->plotting_rect.y+i*contoursplot->d_vmajor, contoursplot->plotting_rect.x+contoursplot->plotting_rect.width+contoursplot->length_ticks*2, contoursplot->plotting_rect.y+i*contoursplot->d_vmajor); if (contoursplot->y_legends_digits!=0 && contoursplot->show_left_legends) contoursplot_cairo_string(contoursplot, contoursplot->cairo_widget, widget, contoursplot->fore_gc, contoursplot->plotting_rect.x-contoursplot->y_legends_width-contoursplot->length_ticks*2-1, contoursplot->plotting_rect.y+contoursplot->plotting_rect.height-i*contoursplot->d_vmajor, contoursplot->v_legends_str[l1], FALSE, TRUE,0); if (contoursplot->y_legends_digits!=0 && contoursplot->show_right_legends) contoursplot_cairo_string(contoursplot, contoursplot->cairo_widget, widget, contoursplot->fore_gc, contoursplot->plotting_rect.x+contoursplot->plotting_rect.width+contoursplot->length_ticks*2, contoursplot->plotting_rect.y+contoursplot->plotting_rect.height-i*contoursplot->d_vmajor, contoursplot->v_legends_str[l1], FALSE, TRUE,0); } if (contoursplot->v_label && contoursplot->y_legends_digits!=0 && contoursplot->show_left_legends) { contoursplot_cairo_layout(contoursplot, contoursplot->cairo_widget, contoursplot->plotting_rect.x-contoursplot->y_legends_width-contoursplot->length_ticks*2-contoursplot->v_label_height, contoursplot->plotting_rect.y+0.5*contoursplot->plotting_rect.height, contoursplot->v_label,FALSE,TRUE,-M_PI/2); } if (contoursplot->v_label && contoursplot->y_legends_digits!=0 && contoursplot->show_right_legends && !contoursplot->show_left_legends) { contoursplot_cairo_layout(contoursplot, contoursplot->cairo_widget, contoursplot->plotting_rect.x+contoursplot->plotting_rect.width+contoursplot->y_legends_width+contoursplot->length_ticks*2, contoursplot->plotting_rect.y+0.5*contoursplot->plotting_rect.height, contoursplot->v_label,FALSE,TRUE,-M_PI/2); } } /****************************************************************************************/ static void draw_vminor_grid(GtkWidget *widget, GabeditContoursPlot *contoursplot) { gint i; gint j; if (contoursplot->vminor_grid && (contoursplot->hmajor_ticks > 1) && (contoursplot->hminor_ticks != 0) ) for (i=0; i < contoursplot->hmajor_ticks-1; i++) for (j=1; j <= contoursplot->hminor_ticks; j++) contoursplot_cairo_line_grid(contoursplot, contoursplot->cairo_area, widget, contoursplot->vminor_grid_gc, i*contoursplot->d_hmajor+j*contoursplot->d_hminor, 0, i*contoursplot->d_hmajor+j*contoursplot->d_hminor, contoursplot->plotting_rect.height); } /****************************************************************************************/ static void draw_vmajor_grid(GtkWidget *widget, GabeditContoursPlot *contoursplot) { gint i; if (contoursplot->vmajor_grid && (contoursplot->hmajor_ticks > 1)) for (i=1; i < (contoursplot->hmajor_ticks-1); i++) contoursplot_cairo_line_grid(contoursplot, contoursplot->cairo_area, widget, contoursplot->vmajor_grid_gc, i*contoursplot->d_hmajor, 0, i*contoursplot->d_hmajor, contoursplot->plotting_rect.height); } /****************************************************************************************/ static void draw_objects_text(GtkWidget *widget, GabeditContoursPlot *contoursplot) { gint i; for (i=0; i < contoursplot->nObjectsText; i++) if(contoursplot->objectsText[i].pango) { /* if ( !( (contoursplot->objectsText[i].xi > contoursplot->plotting_rect.x) && (contoursplot->objectsText[i].xi < (contoursplot->plotting_rect.x + contoursplot->plotting_rect.width)) && (contoursplot->objectsText[i].yi > contoursplot->plotting_rect.y) && (contoursplot->objectsText[i].yi < (contoursplot->plotting_rect.y + contoursplot->plotting_rect.height)) ) ) continue; */ contoursplot_cairo_layout(contoursplot, contoursplot->cairo_widget, contoursplot->objectsText[i].xi, contoursplot->objectsText[i].yi, contoursplot->objectsText[i].pango,FALSE,FALSE,-contoursplot->objectsText[i].angle); } } /****************************************************************************************/ static void draw_objects_line(GtkWidget *widget, GabeditContoursPlot *contoursplot) { gint i; for (i=0; i < contoursplot->nObjectsLine; i++) { /* if ( !( (contoursplot->objectsLine[i].x1i > contoursplot->plotting_rect.x) && (contoursplot->objectsLine[i].x1i < (contoursplot->plotting_rect.x + contoursplot->plotting_rect.width)) && (contoursplot->objectsLine[i].y1i > contoursplot->plotting_rect.y) && (contoursplot->objectsLine[i].y1i < (contoursplot->plotting_rect.y + contoursplot->plotting_rect.height)) ) ) continue; if ( !( (contoursplot->objectsLine[i].x2i > contoursplot->plotting_rect.x) && (contoursplot->objectsLine[i].x2i < (contoursplot->plotting_rect.x + contoursplot->plotting_rect.width)) && (contoursplot->objectsLine[i].y2i > contoursplot->plotting_rect.y) && (contoursplot->objectsLine[i].y2i < (contoursplot->plotting_rect.y + contoursplot->plotting_rect.height)) ) ) continue; */ /* HERE change gc vlaues */ gdouble x1, x2, y1, y2; gdk_gc_set_rgb_fg_color (contoursplot->lines_gc, &contoursplot->objectsLine[i].color); gdk_gc_set_line_attributes (contoursplot->lines_gc, contoursplot->objectsLine[i].width, contoursplot->objectsLine[i].style, GDK_CAP_ROUND, GDK_JOIN_MITER); contoursplot_cairo_line(contoursplot, contoursplot->cairo_widget, widget, contoursplot->lines_gc, contoursplot->objectsLine[i].x1i, contoursplot->objectsLine[i].y1i, contoursplot->objectsLine[i].x2i, contoursplot->objectsLine[i].y2i); if(contoursplot->objectsLine[i].arrow_size<1) continue; calc_arrow_vertexes(30.0, contoursplot->objectsLine[i].arrow_size*5.0, (gdouble)contoursplot->objectsLine[i].x1i, (gdouble)contoursplot->objectsLine[i].y1i, (gdouble)contoursplot->objectsLine[i].x2i, (gdouble)contoursplot->objectsLine[i].y2i, &x1, &y1, &x2, &y2 ); contoursplot_cairo_line(contoursplot, contoursplot->cairo_widget, widget, contoursplot->lines_gc, (gint)x1, (gint)y1, contoursplot->objectsLine[i].x2i, contoursplot->objectsLine[i].y2i); contoursplot_cairo_line(contoursplot, contoursplot->cairo_widget, widget, contoursplot->lines_gc, (gint)x2, (gint)y2, contoursplot->objectsLine[i].x2i, contoursplot->objectsLine[i].y2i); } } /****************************************************************************************/ static void draw_objects_image(GtkWidget *widget, GabeditContoursPlot *contoursplot) { gint i; for (i=0; i < contoursplot->nObjectsImage; i++) if(contoursplot->objectsImage[i].image) { /* if ( !( (contoursplot->objectsImage[i].xi > contoursplot->plotting_rect.x) && (contoursplot->objectsImage[i].xi < (contoursplot->plotting_rect.x + contoursplot->plotting_rect.width)) && (contoursplot->objectsImage[i].yi > contoursplot->plotting_rect.y) && (contoursplot->objectsImage[i].yi < (contoursplot->plotting_rect.y + contoursplot->plotting_rect.height)) ) ) continue; */ contoursplot_cairo_image(contoursplot, contoursplot->cairo_widget, widget, contoursplot->objectsImage[i].xi , contoursplot->objectsImage[i].yi, contoursplot->objectsImage[i].widthi, contoursplot->objectsImage[i].heighti, contoursplot->objectsImage[i].image); } } /****************************************************************************************/ static void clean_borders(GtkWidget *widget, GabeditContoursPlot *contoursplot) { if(contoursplot->cairo_export) { contoursplot_cairo_rectangle(contoursplot, contoursplot->cairo_export, widget, contoursplot->back_gc, TRUE, 0, 0, contoursplot->plotting_rect.x, widget->allocation.height); contoursplot_cairo_rectangle(contoursplot, contoursplot->cairo_export, widget, contoursplot->back_gc, TRUE, 0, 0, widget->allocation.width, contoursplot->plotting_rect.y ); contoursplot_cairo_rectangle(contoursplot, contoursplot->cairo_export, widget, contoursplot->back_gc, TRUE, 0, contoursplot->plotting_rect.y+contoursplot->plotting_rect.height, widget->allocation.width, widget->allocation.height-contoursplot->plotting_rect.y-contoursplot->plotting_rect.height ); contoursplot_cairo_rectangle(contoursplot, contoursplot->cairo_export, widget, contoursplot->back_gc, TRUE, contoursplot->plotting_rect.x+contoursplot->plotting_rect.width, 0, widget->allocation.width-contoursplot->plotting_rect.x-contoursplot->plotting_rect.width, widget->allocation.height ); } } /****************************************************************************************/ static void draw_borders(GtkWidget *widget, GabeditContoursPlot *contoursplot) { contoursplot_cairo_rectangle(contoursplot, contoursplot->cairo_widget, widget, contoursplot->fore_gc, FALSE, contoursplot->plotting_rect.x, contoursplot->plotting_rect.y, contoursplot->plotting_rect.width, contoursplot->plotting_rect.height); } /****************************************************************************************/ static void draw_background(GtkWidget *widget, GabeditContoursPlot *contoursplot) { GdkRectangle rect; rect.x=0; rect.y=0; rect.width=widget->allocation.width; rect.height=widget->allocation.height; gtk_paint_flat_box (widget->style, widget->window, GTK_STATE_NORMAL, GTK_SHADOW_NONE, &rect, widget, NULL, 0, 0, -1, -1); /* Filling the plotting area*/ contoursplot_cairo_rectangle(contoursplot, contoursplot->cairo_area, widget, contoursplot->back_gc, TRUE, 0, 0, contoursplot->plotting_rect.width, contoursplot->plotting_rect.height); if(contoursplot->cairo_export) { contoursplot_cairo_rectangle(contoursplot, contoursplot->cairo_export, widget, contoursplot->back_gc, TRUE, contoursplot->plotting_rect.x, contoursplot->plotting_rect.y, contoursplot->plotting_rect.width, contoursplot->plotting_rect.height); } } /****************************************************************************************/ static void draw_label_contours(GtkWidget *widget, GabeditContoursPlot *contoursplot) { gint n; GList *current_node; gint x,y; PangoLayout* pango = NULL; ContoursPlotData *data = NULL; gint width; gint height; current_node=g_list_first(GABEDIT_ContoursPLOT(contoursplot)->data_list); for (; current_node!=NULL; current_node=current_node->next) { data=(ContoursPlotData*)current_node->data; for(n=0;nnContours; n++) { gchar *str = NULL; if(!data->contours[n].label) continue; if(strlen(data->contours[n].label)<1) continue; str = g_strconcat("", data->contours[n].label, "", NULL); value2pixel(contoursplot, data->contours[n].xlabel, data->contours[n].ylabel, &x, &y); y=contoursplot->plotting_rect.height-y; pango = gtk_widget_create_pango_layout (GTK_WIDGET(contoursplot), data->contours[n].label); pango_layout_set_alignment(pango,PANGO_ALIGN_LEFT); pango_layout_set_markup(pango, str, -1); g_free(str); pango_layout_get_size(pango, &width, &height); width/=PANGO_SCALE; height/=PANGO_SCALE; y -= height/2; contoursplot_cairo_layout( contoursplot, contoursplot->cairo_area, x, y, pango,FALSE,FALSE,0); g_object_unref(G_OBJECT(pango)); } } } /**************************************************************/ /* static void draw_plan_color_coded(GtkWidget* contoursplot, ContoursPlotData *data) { gint i; gint j; gint k; gdouble v1,v2,v3,v4; gint ix1=0,iy1=0; gint ix2=0,iy2=0; gdouble x1,x2,y1,y2; gdouble dx, dy; gdouble xmin,xmax,ymin,ymax; gint xsize,ysize; gdouble* zValues; gdouble c1[3]; gdouble c2[3]; gdouble c3[3]; gdouble c4[3]; gint x1p; gint y1p; gint x2p; gint y2p; xmin = data->xmin; xmax = data->xmax; ymin = data->ymin; ymax = data->ymax; xsize = data->xsize; ysize = data->ysize; dx = (xmax-xmin)/(xsize-1); dy = (ymax-ymin)/(ysize-1); zValues = data->zValues; for( i = 0; icolorsMap.colorMap) { set_Color_From_colorMap(GABEDIT_ContoursPLOT(contoursplot)->colorsMap.colorMap, c1, v1); set_Color_From_colorMap(GABEDIT_ContoursPLOT(contoursplot)->colorsMap.colorMap, c2, v2); set_Color_From_colorMap(GABEDIT_ContoursPLOT(contoursplot)->colorsMap.colorMap, c3, v3); set_Color_From_colorMap(GABEDIT_ContoursPLOT(contoursplot)->colorsMap.colorMap, c4, v4); } x1 = xmin+dx*i; y1 = ymin+dy*j; x2 = xmin+dx*(i+1); y2 = ymin+dy*(j+1); value2pixel(GABEDIT_ContoursPLOT(contoursplot), x1, y1, &x1p, &y1p); value2pixel(GABEDIT_ContoursPLOT(contoursplot), x2, y2, &x2p, &y2p); draw_rectangle_bilinear(GABEDIT_ContoursPLOT(contoursplot), x1p, y1p, x2p, y2p, c1, c2, c3, c4); } } } */ /****************************************************************************************/ static void draw_data(GtkWidget *widget, GabeditContoursPlot *contoursplot) { ContoursPlotData *data = NULL; GList *current = NULL; if(contoursplot->data_list) for(current=g_list_first(contoursplot->data_list); current!=NULL; current=current->next) { data=(ContoursPlotData*)current->data; /* draw_plan_color_coded(widget, data);*/ draw_lines(widget, contoursplot, data); draw_points(widget, contoursplot, data); if(contoursplot->show_label_contours) draw_label_contours(widget, contoursplot); } } /****************************************************************************************/ static GdkPixmap* gdk_pixmap_copy(GdkPixmap *pixmap) { GdkPixmap *pixmap_out; GdkGC *gc; gint width, height, depth; g_return_val_if_fail(pixmap != NULL, NULL); gdk_drawable_get_size(pixmap, &width, &height); depth = gdk_drawable_get_depth(pixmap); pixmap_out = gdk_pixmap_new(NULL, width, height, depth); gc = gdk_gc_new(pixmap); gdk_draw_drawable(pixmap_out, gc, pixmap, 0, 0, 0, 0, width, height); g_object_unref(gc); return pixmap_out; } /****************************************************************************************/ static void set_old_area(GtkWidget *widget, GabeditContoursPlot *contoursplot) { if (contoursplot->old_area!=NULL) g_object_unref(G_OBJECT(contoursplot->old_area)); contoursplot->old_area=NULL; if (GTK_WIDGET_REALIZED(widget) && widget->window) { contoursplot->old_area=gdk_pixmap_copy(widget->window); } } /****************************************************************************************/ static void draw_plotting_area(GtkWidget *widget, GabeditContoursPlot *contoursplot) { gdk_draw_drawable (widget->window, contoursplot->back_gc, contoursplot->plotting_area, 0, 0, contoursplot->plotting_rect.x, contoursplot->plotting_rect.y, contoursplot->plotting_rect.width, contoursplot->plotting_rect.height); } /****************************************************************************************/ static gint gabedit_contoursplot_draw (GtkWidget *widget) { GabeditContoursPlot *contoursplot; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_WIDGET(widget), FALSE); if(!widget->window) return FALSE; if(!GDK_IS_DRAWABLE (widget->window)) return FALSE; g_return_val_if_fail (GABEDIT_IS_ContoursPLOT (widget), FALSE); contoursplot=GABEDIT_ContoursPLOT(widget); if(!contoursplot->h_legends_str) return FALSE; if (contoursplot->cairo_widget) { cairo_destroy (contoursplot->cairo_widget); contoursplot->cairo_widget = gdk_cairo_create (widget->window); } if (contoursplot->cairo_area) { cairo_destroy (contoursplot->cairo_area); contoursplot->cairo_area = gdk_cairo_create (contoursplot->plotting_area); } draw_background(widget, contoursplot); draw_hminor_grid(widget, contoursplot); draw_hmajor_grid(widget, contoursplot); draw_vminor_grid(widget, contoursplot); draw_vmajor_grid(widget, contoursplot); draw_data(widget, contoursplot); clean_borders(widget, contoursplot);/* for export */ draw_borders(widget, contoursplot); draw_hminor_ticks(widget, contoursplot); draw_hmajor_ticks_and_xlegends(widget, contoursplot); draw_vminor_ticks(widget, contoursplot); draw_vmajor_ticks_and_ylegends(widget, contoursplot); draw_plotting_area(widget, contoursplot); draw_colormap(widget, contoursplot); draw_objects_image(widget, contoursplot); draw_objects_line(widget, contoursplot); draw_objects_text(widget, contoursplot); set_old_area(widget, contoursplot); return 0; } /****************************************************************************************/ static gint gabedit_contoursplot_expose (GtkWidget *widget, GdkEventExpose *event) { GabeditContoursPlot *contoursplot; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GABEDIT_IS_ContoursPLOT (widget), FALSE); /* g_return_val_if_fail (event != NULL, FALSE);*/ if (event && event->count > 0) return FALSE; contoursplot=GABEDIT_ContoursPLOT(widget); if (contoursplot->mouse_zoom_enabled && contoursplot->mouse_button == contoursplot->mouse_zoom_button) { gint width; gint height; gdk_drawable_get_size(contoursplot->old_area, &width, &height); gdk_draw_drawable (widget->window, contoursplot->back_gc, contoursplot->old_area, 0, 0, 0, 0, width, height ); draw_zoom_rectangle(widget, contoursplot); return TRUE; } if (contoursplot->mouse_distance_enabled && contoursplot->mouse_button == contoursplot->mouse_distance_button) { gint width; gint height; gdk_drawable_get_size(contoursplot->old_area, &width, &height); gdk_draw_drawable (widget->window, contoursplot->back_gc, contoursplot->old_area, 0, 0, 0, 0, width, height ); draw_distance_line(widget, contoursplot); return TRUE; } if (contoursplot->selected_objects_text_num>-1) { gint width; gint height; gdk_drawable_get_size(contoursplot->old_area, &width, &height); gdk_draw_drawable (widget->window, contoursplot->back_gc, contoursplot->old_area, 0, 0, 0, 0, width, height ); draw_selected_objects_text_rectangle(widget, contoursplot); return TRUE; } if (contoursplot->selected_objects_image_num>-1) { gint width; gint height; gdk_drawable_get_size(contoursplot->old_area, &width, &height); gdk_draw_drawable (widget->window, contoursplot->back_gc, contoursplot->old_area, 0, 0, 0, 0, width, height ); draw_selected_objects_image_rectangle(widget, contoursplot); return TRUE; } if (contoursplot->object_begin_point.x>-1) { gint width; gint height; gdk_drawable_get_size(contoursplot->old_area, &width, &height); gdk_draw_drawable (widget->window, contoursplot->back_gc, contoursplot->old_area, 0, 0, 0, 0, width, height ); draw_object_line_gdk(widget, contoursplot); return TRUE; } gabedit_contoursplot_draw (widget); return 0; } /****************************************************************************************/ static gint get_distance_M_AB(GabeditContoursPlot *contoursplot,gint xM, gint yM, gint ixA, gint iyA, gint ixB, gint iyB) { gdouble xA = ixA; gdouble yA = iyA; gdouble xB = ixB; gdouble yB = iyB; gdouble xAB = xB -xA; gdouble yAB = yB -yA; gdouble AB2 = xAB*xAB + yAB*yAB; gdouble xMA; gdouble yMA; gdouble MA2; gdouble xMB; gdouble yMB; gdouble MB2; gdouble xC; gdouble yC; gdouble xMC; gdouble yMC; gdouble MC2; do{ xMA = xA -xM; yMA = yA -yM; MA2 = xMA*xMA + yMA*yMA; xMB = xB -xM; yMB = yB -yM; MB2 = xMB*xMB + yMB*yMB; xC = (xA + xB)/2.0; yC = (yA + yB)/2.0; xMC = xC - xM; yMC = yC - yM; MC2 = xMC*xMC + yMC*yMC; if(MA2>MB2) { if(MC21); return (gint)sqrt(MC2); } /****************************************************************************************/ static gint gabedit_contoursplot_double_click (GtkWidget *widget, GdkEventButton *event) { ContoursPlotData *data = NULL; ContourData *contour = NULL; GList* current = NULL; gint x; gint y; gboolean OK = FALSE; GabeditContoursPlot *contoursplot = NULL; gint loop; gint xOld; gint yOld; gint n; gint indexOld = -1; gint index; gint i; contoursplot=GABEDIT_ContoursPLOT(widget); /* test on objects label */ i = get_object_text_num(contoursplot, event->x, event->y); if(i>-1 && inObjectsText) { contoursplot->selected_objects_text_num = -1; add_set_object_text_dialog(GTK_WIDGET(contoursplot), i, 0,0); return TRUE; } /* test on objects line */ i = get_object_line_num(contoursplot, event->x, event->y); if(i>-1 && inObjectsLine) { contoursplot->selected_objects_line_num = -1; contoursplot->selected_objects_line_type = -1; contoursplot->object_begin_point.x = -1; contoursplot->object_begin_point.y = -1; contoursplot->object_end_point.x = -1; contoursplot->object_end_point.y = -1; set_object_line_dialog(contoursplot, i); return TRUE; } /* test on objects image */ i = get_object_image_num(contoursplot, event->x, event->y); if(i>-1 && inObjectsImage) { contoursplot->selected_objects_image_num = -1; contoursplot->object_begin_point.x = -1; contoursplot->object_begin_point.y = -1; contoursplot->object_end_point.x = -1; contoursplot->object_end_point.y = -1; add_set_object_image_dialog(GTK_WIDGET(contoursplot), i, 0,0); return TRUE; } if ( !( (event->x > contoursplot->plotting_rect.x) && (event->x < (contoursplot->plotting_rect.x + contoursplot->plotting_rect.width)) && (event->y > contoursplot->plotting_rect.y) && (event->y < (contoursplot->plotting_rect.y + contoursplot->plotting_rect.height)) ) ) { set_all_dialog(widget); return TRUE; } if(!(contoursplot->data_list)) return TRUE; current=g_list_first(contoursplot->data_list); for(; current != NULL; current = current->next) { data = (ContoursPlotData*)current->data; xOld = 0; yOld = 0; for (n=0; !OK && nnContours; n++) for(loop=0;loopcontours[n].size;loop++) { contour = &data->contours[n]; index = data->contours[n].index[loop]; value2pixel(contoursplot, data->contours[n].x[loop], data->contours[n].y[loop], &x, &y); y=contoursplot->plotting_rect.height-y; x += contoursplot->plotting_rect.x; y += contoursplot->plotting_rect.y; if(loop ==0 && abs(x-event->x)<5 && abs(y-event->y)<5) { OK = TRUE; break; } if(loop >0 && indexOld==index && get_distance_M_AB(contoursplot,(gint)event->x, (gint)event->y, (gint)xOld, (gint)yOld, (gint)x, (gint)y)<5) { OK = TRUE; break; } xOld = x; yOld = y; indexOld = index; } if(OK) break; } if(OK) { set_data_dialog(contoursplot,data,contour); } return OK; } /*********************************************************************************************************************/ static gboolean popuo_menu(GtkWidget* widget, guint button, guint32 time) { GtkUIManager *manager = g_object_get_data(G_OBJECT (widget), "Manager"); GtkWidget *menu = gtk_ui_manager_get_widget (manager, "/MenuContoursPlot"); if (GTK_IS_MENU (menu)) { gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, time); return TRUE; } else { g_message (_("popup menu of contoursplot failed")); } return FALSE; } /****************************************************************************************/ static gint gabedit_contoursplot_button_press (GtkWidget *widget, GdkEventButton *event) { GabeditContoursPlot *contoursplot; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GABEDIT_IS_ContoursPLOT (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); contoursplot = GABEDIT_ContoursPLOT (widget); if(event->type == GDK_2BUTTON_PRESS) { contoursplot->double_click = TRUE; return gabedit_contoursplot_double_click(widget,event); } if(event->button == 3) { return popuo_menu(widget, event->button, event->time); } if (contoursplot->mouse_zoom_enabled && (event->button == contoursplot->mouse_zoom_button || (event->button == 1 && contoursplot->control_key_pressed )) ) if ( (event->x > contoursplot->plotting_rect.x) && (event->x < (contoursplot->plotting_rect.x + contoursplot->plotting_rect.width)) && (event->y > contoursplot->plotting_rect.y) && (event->y < (contoursplot->plotting_rect.y + contoursplot->plotting_rect.height)) ){ contoursplot->mouse_button=contoursplot->mouse_zoom_button; contoursplot->zoom_point.x=event->x; contoursplot->zoom_point.y=event->y; /*set_old_area(widget, contoursplot);*/ } if (contoursplot->mouse_distance_enabled && (event->button == contoursplot->mouse_distance_button && contoursplot->shift_key_pressed ) ) if ( (event->x > contoursplot->plotting_rect.x) && (event->x < (contoursplot->plotting_rect.x + contoursplot->plotting_rect.width)) && (event->y > contoursplot->plotting_rect.y) && (event->y < (contoursplot->plotting_rect.y + contoursplot->plotting_rect.height)) ){ contoursplot->mouse_button=contoursplot->mouse_distance_button; contoursplot->distance_point.x=event->x; contoursplot->distance_point.y=event->y; /*set_old_area(widget, contoursplot);*/ } if (contoursplot->mouse_displace_enabled && (event->button == contoursplot->mouse_displace_button)) if ( (event->x > contoursplot->plotting_rect.x) && (event->x < (contoursplot->plotting_rect.x + contoursplot->plotting_rect.width)) && (event->y > contoursplot->plotting_rect.y) && (event->y < (contoursplot->plotting_rect.y + contoursplot->plotting_rect.height)) ){ contoursplot->mouse_button=event->button; contoursplot->move_point.x=event->x; contoursplot->move_point.y=event->y; } if (contoursplot->r_key_pressed && !contoursplot->control_key_pressed){ gint i; contoursplot->r_key_pressed = FALSE; i = get_object_text_num(contoursplot, event->x, event->y); if(i>-1) delete_object_text(GTK_WIDGET(contoursplot), i); else { i = get_object_line_num(contoursplot, event->x, event->y); if(i>-1) delete_object_line(GTK_WIDGET(contoursplot), i); else { i = get_object_image_num(contoursplot, event->x, event->y); if(i>-1) delete_object_image(GTK_WIDGET(contoursplot), i); } } } if ( !contoursplot->t_key_pressed && !contoursplot->l_key_pressed && !contoursplot->i_key_pressed && !contoursplot->shift_key_pressed && !contoursplot->control_key_pressed && event->button != contoursplot->mouse_zoom_button) /* if ( (event->x > contoursplot->plotting_rect.x) && (event->x < (contoursplot->plotting_rect.x + contoursplot->plotting_rect.width)) && (event->y > contoursplot->plotting_rect.y) && (event->y < (contoursplot->plotting_rect.y + contoursplot->plotting_rect.height)) ) */ { gdouble X, Y; gchar txt[BSIZE]; PangoLayout *playout; gboolean gp = gabedit_contoursplot_get_point(GABEDIT_ContoursPLOT(contoursplot), event->x, event->y, &X, &Y); gint i; sprintf(txt,"%s"," "); if(gp && !contoursplot->d_key_pressed) sprintf(txt,"(%f ; %f)",X,Y); else if(gp && contoursplot->d_key_pressed && (event->x > contoursplot->plotting_rect.x) && (event->x < (contoursplot->plotting_rect.x + contoursplot->plotting_rect.width)) && (event->y > contoursplot->plotting_rect.y) && (event->y < (contoursplot->plotting_rect.y + contoursplot->plotting_rect.height)) ) { gdouble z = 0; gdouble dzdx = 0; gdouble dzdy = 0; gdouble d2zdx2 = 0; gdouble d2zdy2 = 0; gdouble d2zdxdy = 0; gdouble evals[2] = {0,0}; gdouble evecs[2][2] = {{0,0},{0,0}}; gdouble delta; gdouble d = 0; gdouble precision = 1e-10; get_interpolatedValue(GTK_WIDGET(contoursplot), NULL, X, Y, &z, &dzdx, &dzdy, &d2zdx2, &d2zdy2, &d2zdxdy); delta = (d2zdx2-d2zdy2)*(d2zdx2-d2zdy2)+4*d2zdxdy*d2zdxdy; delta = sqrt(delta); evals[0] = ((d2zdx2+d2zdy2)+delta)/2; evals[1] = ((d2zdx2+d2zdy2)-delta)/2; evecs[0][0] = 1.0; evecs[0][1] = 0.0; evecs[1][0] = 0.0; evecs[1][1] = 1.0; d = sqrt(d2zdxdy*d2zdxdy+(d2zdx2-evals[0])*(d2zdx2-evals[0])); if(d>1e-10) { evecs[0][0] = d2zdxdy/d; evecs[0][1] = (d2zdx2-evals[0])/d; } d = sqrt(d2zdxdy*d2zdxdy+(d2zdx2-evals[1])*(d2zdx2-evals[1])); if(d>precision && fabs(evecs[0][1])>precision) { evecs[1][0] = d2zdxdy/d; evecs[1][1] = -evecs[0][0]*evecs[1][0]/evecs[0][1]; } else if(d>precision && fabs(evecs[0][0])>precision) { evecs[1][1] = (d2zdx2-evals[1])/d; evecs[1][0] = -evecs[0][1]*evecs[1][1]/evecs[0][0]; } sprintf(txt, "(x=%f ; y=%f ; z=%f)\n(dz/dx=%f ; dz/dy=%f)\n(d2z/dx2=%f)\n(d2z/dy2=%f)\n(d2z/dxdy=%f)" "\n(EigenHess=%f : %f %f )" "\n(EigenHess=%f : %f %f )", X,Y,z,dzdx, dzdy, d2zdx2, d2zdy2, d2zdxdy, evals[0], evecs[0][0], evecs[0][1], evals[1], evecs[1][0], evecs[1][1] ); if(evals[0]>=0) gdk_draw_line(widget->window, contoursplot->fore_gc, event->x-(gint)(evecs[0][0]*contoursplot->plotting_rect.width/10), event->y-(gint)(evecs[0][1]*contoursplot->plotting_rect.height/10), event->x+(gint)(evecs[0][0]*contoursplot->plotting_rect.width/10), event->y+(gint)(evecs[0][1]*contoursplot->plotting_rect.height/10)); if(evals[1]>=0) gdk_draw_line(widget->window, contoursplot->fore_gc, event->x-(gint)(evecs[1][0]*contoursplot->plotting_rect.width/10), event->y-(gint)(evecs[1][1]*contoursplot->plotting_rect.height/10), event->x+(gint)(evecs[1][0]*contoursplot->plotting_rect.width/10), event->y+(gint)(evecs[1][1]*contoursplot->plotting_rect.height/10)); if(evals[0]<0) { GdkGC* gc; GdkGCValues gc_values; GdkGCValuesMask gc_values_mask; GdkColor col; GdkColormap *colormap; col.red = 65000; col.green = 0; col.blue = 0; gc_values.foreground=col; gc_values.line_style=GDK_LINE_SOLID; gc_values.line_width=2; gc_values_mask=GDK_GC_FOREGROUND | GDK_GC_LINE_STYLE | GDK_GC_LINE_WIDTH; colormap = gdk_window_get_colormap(widget->window); gdk_colormap_alloc_color (colormap, &col, FALSE, TRUE); gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); gdk_gc_set_foreground(gc,&col); gdk_draw_line(widget->window,gc, event->x-(gint)(evecs[0][0]*contoursplot->plotting_rect.width/10), event->y-(gint)(evecs[0][1]*contoursplot->plotting_rect.height/10), event->x+(gint)(evecs[0][0]*contoursplot->plotting_rect.width/10), event->y+(gint)(evecs[0][1]*contoursplot->plotting_rect.height/10)); g_object_unref(gc); } if(evals[1]<0) { GdkGC* gc; GdkGCValues gc_values; GdkGCValuesMask gc_values_mask; GdkColor col; GdkColormap *colormap; col.red = 65000; col.green = 0; col.blue = 0; gc_values.foreground=col; gc_values.line_style=GDK_LINE_SOLID; gc_values.line_width=2; gc_values_mask=GDK_GC_FOREGROUND | GDK_GC_LINE_STYLE | GDK_GC_LINE_WIDTH; colormap = gdk_window_get_colormap(widget->window); gdk_colormap_alloc_color (colormap, &col, FALSE, TRUE); gc=gdk_gc_new_with_values (widget->window, &gc_values, gc_values_mask); gdk_gc_set_foreground(gc,&col); gdk_draw_line(widget->window,gc, event->x-(gint)(evecs[1][0]*contoursplot->plotting_rect.width/10), event->y-(gint)(evecs[1][1]*contoursplot->plotting_rect.height/10), event->x+(gint)(evecs[1][0]*contoursplot->plotting_rect.width/10), event->y+(gint)(evecs[1][1]*contoursplot->plotting_rect.height/10)); g_object_unref(gc); } } playout=gtk_widget_create_pango_layout (widget, txt); if(playout) { GdkRectangle rect; rect.x=0; rect.y=0; rect.width=widget->allocation.width; rect.height=widget->allocation.height; gtk_paint_layout (widget->style, widget->window, GTK_STATE_NORMAL, FALSE, &rect, widget, NULL, event->x, event->y, playout); g_object_unref(G_OBJECT(playout)); } i = get_object_text_num(contoursplot, event->x, event->y); if(i>-1 && inObjectsText) contoursplot->selected_objects_text_num = i; else contoursplot->selected_objects_text_num = -1; if(contoursplot->selected_objects_text_num>-1) { /*set_old_area(widget, contoursplot);*/ gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } if(contoursplot->selected_objects_text_num<0) { i = get_object_line_num(contoursplot, event->x, event->y); contoursplot->selected_objects_line_num = -1; contoursplot->selected_objects_line_type = -1; if(i>-1 && inObjectsLine) { gdouble xx,yy,d; contoursplot->selected_objects_line_num = i; contoursplot->selected_objects_line_type = 0; contoursplot->object_begin_point.x=contoursplot->objectsLine[i].x1i; contoursplot->object_begin_point.y=contoursplot->objectsLine[i].y1i; contoursplot->object_end_point.x=contoursplot->objectsLine[i].x2i; contoursplot->object_end_point.y=contoursplot->objectsLine[i].y2i; xx = event->x-contoursplot->objectsLine[i].x1i; yy = event->y-contoursplot->objectsLine[i].y1i; d = xx*xx+yy*yy; xx = event->x-contoursplot->objectsLine[i].x2i; yy = event->y-contoursplot->objectsLine[i].y2i; if(dselected_objects_line_type = 1; /*set_old_area(widget, contoursplot);*/ gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } if(contoursplot->selected_objects_text_num<0 && contoursplot->selected_objects_line_num<0) { i = get_object_image_num(contoursplot, event->x, event->y); if(i>-1 && inObjectsImage) contoursplot->selected_objects_image_num = i; else contoursplot->selected_objects_image_num = -1; if(contoursplot->selected_objects_image_num>-1) { gdouble xx = -event->x+contoursplot->objectsImage[i].xi+contoursplot->objectsImage[i].widthi; gdouble yy = -event->y+contoursplot->objectsImage[i].yi+contoursplot->objectsImage[i].heighti; if(xx*xx+yy*yy< (contoursplot->objectsImage[i].widthi*contoursplot->objectsImage[i].widthi+ contoursplot->objectsImage[i].heighti*contoursplot->objectsImage[i].heighti)/100 ) { contoursplot->object_begin_point.x=-1; contoursplot->object_begin_point.y=-1; contoursplot->object_end_point.x=(gint)fabs(xx); contoursplot->object_end_point.y=(gint)fabs(yy); } else { contoursplot->object_begin_point.x=event->x-contoursplot->objectsImage[i].xi; contoursplot->object_begin_point.y=event->y-contoursplot->objectsImage[i].yi; contoursplot->object_end_point.x=-1; contoursplot->object_end_point.y=-1; } set_old_area(widget, contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } } if (contoursplot->t_key_pressed && !contoursplot->control_key_pressed) /* if ( (event->x > contoursplot->plotting_rect.x) && (event->x < (contoursplot->plotting_rect.x + contoursplot->plotting_rect.width)) && (event->y > contoursplot->plotting_rect.y) && (event->y < (contoursplot->plotting_rect.y + contoursplot->plotting_rect.height)) ) */ { gdouble X, Y; if(gabedit_contoursplot_get_point(GABEDIT_ContoursPLOT(contoursplot), event->x, event->y, &X, &Y)) { contoursplot->t_key_pressed = FALSE; add_set_object_text_dialog(GTK_WIDGET(contoursplot), -1, X, Y); } } if (contoursplot->l_key_pressed && !contoursplot->control_key_pressed) /* if ( (event->x > contoursplot->plotting_rect.x) && (event->x < (contoursplot->plotting_rect.x + contoursplot->plotting_rect.width)) && (event->y > contoursplot->plotting_rect.y) && (event->y < (contoursplot->plotting_rect.y + contoursplot->plotting_rect.height)) ) */ { /*set_old_area(widget, contoursplot);*/ contoursplot->l_key_pressed = FALSE; contoursplot->object_begin_point.x=event->x; contoursplot->object_begin_point.y=event->y; contoursplot->object_end_point.x=-1; contoursplot->object_end_point.y=-1; } if (contoursplot->i_key_pressed && !contoursplot->control_key_pressed) /* if ( (event->x > contoursplot->plotting_rect.x) && (event->x < (contoursplot->plotting_rect.x + contoursplot->plotting_rect.width)) && (event->y > contoursplot->plotting_rect.y) && (event->y < (contoursplot->plotting_rect.y + contoursplot->plotting_rect.height)) ) */ { contoursplot->i_key_pressed = FALSE; add_set_object_image_dialog(GTK_WIDGET(contoursplot), -1, event->x, event->y); } if ( contoursplot->mouse_autorange_enabled && (event->button == contoursplot->mouse_autorange_button) ) gabedit_contoursplot_set_autorange(contoursplot, NULL); contoursplot->double_click = FALSE; return FALSE; } /****************************************************************************************/ static gint gabedit_contoursplot_button_release (GtkWidget *widget, GdkEventButton *event) { GabeditContoursPlot *contoursplot; gdouble xmin, xmax, ymin, ymax; gint xleft, ytop, xright, ybottom; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GABEDIT_IS_ContoursPLOT (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); contoursplot = GABEDIT_ContoursPLOT (widget); contoursplot->selected_objects_text_num=-1; if (contoursplot->selected_objects_image_num>-1) { contoursplot->object_begin_point.x=-1; contoursplot->object_begin_point.y=-1; contoursplot->object_end_point.x=-1; contoursplot->object_end_point.y=-1; contoursplot->selected_objects_image_num=-1; } if (contoursplot->selected_objects_line_num>-1) { contoursplot->object_begin_point.x=-1; contoursplot->object_begin_point.y=-1; contoursplot->object_end_point.x=-1; contoursplot->object_end_point.y=-1; contoursplot->selected_objects_line_num=-1; contoursplot->selected_objects_line_type=-1; } /* Zoom */ if ( !contoursplot->double_click && contoursplot->mouse_zoom_enabled && (contoursplot->mouse_button == contoursplot->mouse_zoom_button)){ xleft=contoursplot->zoom_rect.x-contoursplot->plotting_rect.x; xright=contoursplot->zoom_rect.x+contoursplot->zoom_rect.width-contoursplot->plotting_rect.x; ybottom=contoursplot->plotting_rect.y+contoursplot->plotting_rect.height-contoursplot->zoom_rect.y-contoursplot->zoom_rect.height; ytop=contoursplot->plotting_rect.y+contoursplot->plotting_rect.height-contoursplot->zoom_rect.y; pixel2value(contoursplot, xleft, ybottom, &xmin, &ymin); pixel2value(contoursplot, xright, ytop, &xmax, &ymax); if(contoursplot->reflect_x) { gdouble a = xmin; xmin = xmax; xmax = a; } if(contoursplot->reflect_y) { gdouble a = ymin; ymin = ymax; ymax = a; } gabedit_contoursplot_set_range(contoursplot, xmin, xmax, ymin, ymax); contoursplot->mouse_button=0; } /* draw object line */ if ( !contoursplot->double_click && contoursplot->object_begin_point.x>-1) { gdouble X1, Y1; gdouble X2, Y2; if(gabedit_contoursplot_get_point(GABEDIT_ContoursPLOT(contoursplot), event->x, event->y, &X2, &Y2) && gabedit_contoursplot_get_point(GABEDIT_ContoursPLOT(contoursplot), contoursplot->object_begin_point.x, contoursplot->object_begin_point.y, &X1, &Y1)) { contoursplot->l_key_pressed = FALSE; add_object_line(contoursplot, X1, Y1, X2, Y2); } contoursplot->object_begin_point.x = -1; } /* distance */ if ( !contoursplot->double_click && contoursplot->mouse_distance_enabled && (contoursplot->mouse_button == contoursplot->mouse_distance_button)){ xleft=contoursplot->distance_rect.x-contoursplot->plotting_rect.x; xright=contoursplot->distance_rect.x+contoursplot->distance_rect.width-contoursplot->plotting_rect.x; ybottom=contoursplot->plotting_rect.y+contoursplot->plotting_rect.height-contoursplot->distance_rect.y-contoursplot->distance_rect.height; ytop=contoursplot->plotting_rect.y+contoursplot->plotting_rect.height-contoursplot->distance_rect.y; pixel2value(contoursplot, xleft, ybottom, &xmin, &ymin); pixel2value(contoursplot, xright, ytop, &xmax, &ymax); if(contoursplot->reflect_x) { gdouble a = xmin; xmin = xmax; xmax = a; } if(contoursplot->reflect_y) { gdouble a = ymin; ymin = ymax; ymax = a; } { GtkWidget* dialog = NULL; gchar* tmp = NULL; tmp = g_strdup_printf("dX = %f ; dY = %f",xmax-xmin,ymax-ymin); dialog = gtk_message_dialog_new_with_markup (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "%s", tmp); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); g_free(tmp); } /* gabedit_contoursplot_set_range(contoursplot, xmin, xmax, ymin, ymax);*/ gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); contoursplot->mouse_button=0; } else gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); if (contoursplot->mouse_displace_enabled && (event->button == contoursplot->mouse_displace_button) && (contoursplot->mouse_button == contoursplot->mouse_displace_button) ){ contoursplot->mouse_button=0; } return FALSE; } /****************************************************************************************/ static gint gabedit_contoursplot_motion_notify (GtkWidget *widget, GdkEventMotion *event) { GabeditContoursPlot *contoursplot; gint x, y; gdouble px, py, mx, my; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GABEDIT_IS_ContoursPLOT (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); contoursplot = GABEDIT_ContoursPLOT (widget); x = event->x; y = event->y; if (event->is_hint || (event->window != widget->window)) gdk_window_get_pointer (widget->window, (gint *)&x, (gint *)&y, NULL); if (contoursplot->selected_objects_text_num>-1) { gint i = contoursplot->selected_objects_text_num; ContoursPlotObjectText* objectText = &GABEDIT_ContoursPLOT(contoursplot)->objectsText[i]; gabedit_contoursplot_get_point_control (contoursplot, x, y, objectText->width, objectText->height, objectText->angle, &mx, &my); set_object_text(contoursplot, objectText, mx,my, objectText->angle, objectText->str); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } else if (contoursplot->selected_objects_line_num>-1) { gint i = contoursplot->selected_objects_line_num; gdouble x1=0, y1=0, x2=0, y2=0; ContoursPlotObjectLine* objectLine = &GABEDIT_ContoursPLOT(contoursplot)->objectsLine[i]; if(contoursplot->selected_objects_line_type==0) { contoursplot->object_end_point.x=x; contoursplot->object_end_point.y=y; gabedit_contoursplot_get_point_control (contoursplot, contoursplot->object_begin_point.x, contoursplot->object_begin_point.y, objectLine->width,objectLine->width, 0, &x1, &y1); gabedit_contoursplot_get_point_control (contoursplot, contoursplot->object_end_point.x, contoursplot->object_end_point.y, objectLine->width,objectLine->width, 0, &x2, &y2); } else if(contoursplot->selected_objects_line_type==1) { contoursplot->object_begin_point.x=x; contoursplot->object_begin_point.y=y; gabedit_contoursplot_get_point_control (contoursplot, contoursplot->object_begin_point.x, contoursplot->object_begin_point.y, objectLine->width,objectLine->width, 0, &x1, &y1); gabedit_contoursplot_get_point_control (contoursplot, contoursplot->object_end_point.x, contoursplot->object_end_point.y, objectLine->width,objectLine->width, 0, &x2, &y2); } set_object_line(contoursplot, objectLine, x1, y1, x2, y2, objectLine->width, objectLine->arrow_size, objectLine->color, objectLine->style ); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } else if (contoursplot->selected_objects_image_num>-1) { gint i = contoursplot->selected_objects_image_num; ContoursPlotObjectImage* objectImage = &GABEDIT_ContoursPLOT(contoursplot)->objectsImage[i]; if(contoursplot->object_begin_point.x>0) { gint dx,dy; x -= contoursplot->object_begin_point.x; y -= contoursplot->object_begin_point.y; if(x<0) x = 0; if(y<0) y = 0; dx = x+objectImage->widthi-widget->allocation.width; if(dx>0) x-=dx; dy = y+objectImage->heighti-widget->allocation.height; if(dy>0) y-=dy; set_object_image(contoursplot, objectImage, x, y, objectImage->widthi, objectImage->heighti); } if(contoursplot->object_end_point.x>0) { gint w,h; x += contoursplot->object_end_point.x; y += contoursplot->object_end_point.y; if(xxi) x = objectImage->xi+20; if(yyi) y = objectImage->yi+20; if(x>widget->allocation.width) x = widget->allocation.width; if(y>widget->allocation.height) y = widget->allocation.height; w = (gint)(x-objectImage->xi); h = (gint)(y-objectImage->yi); set_object_image(contoursplot, objectImage, objectImage->xi, objectImage->yi, w, h); } gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } else if (contoursplot->object_begin_point.x>-1) { contoursplot->object_end_point.x=x; contoursplot->object_end_point.y=y; gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /* Zoom */ if (contoursplot->mouse_zoom_enabled && (contoursplot->mouse_button == contoursplot->mouse_zoom_button) ){ if (x < contoursplot->plotting_rect.x) x=contoursplot->plotting_rect.x; if(x > (contoursplot->plotting_rect.x + contoursplot->plotting_rect.width)) x=(contoursplot->plotting_rect.x + contoursplot->plotting_rect.width); if (y < contoursplot->plotting_rect.y) y=contoursplot->plotting_rect.y; if (y > (contoursplot->plotting_rect.y + contoursplot->plotting_rect.height)) y=(contoursplot->plotting_rect.y + contoursplot->plotting_rect.height); if (contoursplot->zoom_point.x < x){ contoursplot->zoom_rect.x=contoursplot->zoom_point.x; contoursplot->zoom_rect.width=x-contoursplot->zoom_point.x; }else{ contoursplot->zoom_rect.x=x; contoursplot->zoom_rect.width=contoursplot->zoom_point.x-x; } if (contoursplot->zoom_point.y < y){ contoursplot->zoom_rect.y=contoursplot->zoom_point.y; contoursplot->zoom_rect.height=y-contoursplot->zoom_point.y; }else{ contoursplot->zoom_rect.y=y; contoursplot->zoom_rect.height=contoursplot->zoom_point.y-y; } gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /* distance between 2 points */ if (contoursplot->mouse_distance_enabled && (contoursplot->mouse_button == contoursplot->mouse_distance_button) ){ if (x < contoursplot->plotting_rect.x) x=contoursplot->plotting_rect.x; if(x > (contoursplot->plotting_rect.x + contoursplot->plotting_rect.width)) x=(contoursplot->plotting_rect.x + contoursplot->plotting_rect.width); if (y < contoursplot->plotting_rect.y) y=contoursplot->plotting_rect.y; if (y > (contoursplot->plotting_rect.y + contoursplot->plotting_rect.height)) y=(contoursplot->plotting_rect.y + contoursplot->plotting_rect.height); contoursplot->distance_rect.x=contoursplot->distance_point.x; contoursplot->distance_rect.width=x-contoursplot->distance_point.x; contoursplot->distance_rect.y=contoursplot->distance_point.y; contoursplot->distance_rect.height=y-contoursplot->distance_point.y; gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } if (contoursplot->mouse_displace_enabled && (contoursplot->mouse_button==contoursplot->mouse_displace_button)) if ( (x > contoursplot->plotting_rect.x) && (x < (contoursplot->plotting_rect.width + contoursplot->plotting_rect.x)) && (y > contoursplot->plotting_rect.y) && (y < (contoursplot->plotting_rect.height + contoursplot->plotting_rect.y)) ){ pixel2value(contoursplot, contoursplot->move_point.x, contoursplot->move_point.y, &px, &py); pixel2value(contoursplot, x, y, &mx, &my); gabedit_contoursplot_set_range(contoursplot, contoursplot->xmin+(px-mx), contoursplot->xmax+(px-mx), contoursplot->ymin-(py-my), contoursplot->ymax-(py-my)); contoursplot->move_point.x=x; contoursplot->move_point.y=y; } return FALSE; } /****************************************************************************************/ static gint gabedit_contoursplot_scroll (GtkWidget *widget, GdkEventScroll *event) { GabeditContoursPlot *contoursplot; gdouble x_range = 0.0, y_range = 0.0, xmin = 0.0, xmax = 0.0, ymin = 0.0, ymax = 0.0; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GABEDIT_IS_ContoursPLOT (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); contoursplot=GABEDIT_ContoursPLOT(widget); if (contoursplot->wheel_zoom_enabled){ if (event->direction==GDK_SCROLL_UP){ x_range=contoursplot->wheel_zoom_factor*(contoursplot->xmax-contoursplot->xmin); y_range=contoursplot->wheel_zoom_factor*(contoursplot->ymax-contoursplot->ymin); } if (event->direction==GDK_SCROLL_DOWN){ x_range=(contoursplot->xmax-contoursplot->xmin)/contoursplot->wheel_zoom_factor; y_range=(contoursplot->ymax-contoursplot->ymin)/contoursplot->wheel_zoom_factor; } xmin=contoursplot->xmin+((contoursplot->xmax-contoursplot->xmin)/2.0)-(x_range/2.0); xmax=contoursplot->xmin+((contoursplot->xmax-contoursplot->xmin)/2.0)+(x_range/2.0); ymin=contoursplot->ymin+((contoursplot->ymax-contoursplot->ymin)/2.0)-(y_range/2.0); ymax=contoursplot->ymin+((contoursplot->ymax-contoursplot->ymin)/2.0)+(y_range/2.0); gabedit_contoursplot_set_range(contoursplot, xmin, xmax, ymin, ymax); } return TRUE; } /****************************************************************************************/ static void gabedit_contoursplot_style_set (GtkWidget *widget, GtkStyle *previous_style) { GabeditContoursPlot *contoursplot; g_return_if_fail (widget != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (widget)); contoursplot = GABEDIT_ContoursPLOT (widget); contoursplot_calculate_legends_sizes(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_set_range (GabeditContoursPlot *contoursplot, gdouble xmin, gdouble xmax, gdouble ymin, gdouble ymax) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if (xmin < xmax){ contoursplot->xmin=xmin; contoursplot->xmax=xmax; } if (ymin < ymax){ contoursplot->ymin=ymin; contoursplot->ymax=ymax; } contoursplot_free_legends(contoursplot); contoursplot_build_legends(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_set_range_xmin (GabeditContoursPlot *contoursplot, gdouble xmin) { gabedit_contoursplot_set_range(contoursplot, xmin, contoursplot->xmax, contoursplot->ymin , contoursplot->ymax); } /****************************************************************************************/ void gabedit_contoursplot_set_range_xmax (GabeditContoursPlot *contoursplot, gdouble xmax) { gabedit_contoursplot_set_range(contoursplot, contoursplot->xmin, xmax, contoursplot->ymin , contoursplot->ymax); } /****************************************************************************************/ void gabedit_contoursplot_set_range_ymin (GabeditContoursPlot *contoursplot, gdouble ymin) { gabedit_contoursplot_set_range(contoursplot, contoursplot->xmin, contoursplot->xmax, ymin , contoursplot->ymax); } /****************************************************************************************/ void gabedit_contoursplot_set_range_ymax (GabeditContoursPlot *contoursplot, gdouble ymax) { gabedit_contoursplot_set_range(contoursplot, contoursplot->xmin, contoursplot->xmax, contoursplot->ymin , ymax); } /****************************************************************************************/ void gabedit_contoursplot_set_autorange (GabeditContoursPlot *contoursplot, ContoursPlotData *data) { gdouble xmax, xmin, ymax, ymin; ContoursPlotData *current_data; GList *current_node; g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); xmax=1.0; xmin=-1.0; ymax=1.0; ymin=-1.0; if (data!=NULL){ xmax=data->xmax; xmin=data->xmin; ymax=data->ymin; ymin=data->ymax; } if ( (data == NULL) && contoursplot->data_list ){ current_node=g_list_first(contoursplot->data_list); current_data=(ContoursPlotData*)current_node->data; xmin=current_data->xmin; xmax=current_data->xmax; ymin=current_data->ymin; ymax=current_data->ymax; for (; current_node!=NULL; current_node=current_node->next) { current_data=(ContoursPlotData*)current_node->data; if (xmin > current_data->xmin) xmin=current_data->xmin; if (xmax < current_data->xmax) xmax=current_data->xmax; if (ymin > current_data->ymin) ymin=current_data->ymin; if (ymax < current_data->ymax) ymax=current_data->ymax; } } /* { gdouble dx,dy; dx=fabs(xmax-xmin); dy=fabs(ymax-ymin); xmin=xmin-dx*0.1; xmax=xmax+dx*0.1; ymin=ymin-dy*0.1; ymax=ymax+dy*0.1; } */ contoursplot->xmin=xmin; contoursplot->xmax=xmax; contoursplot->ymin=ymin; contoursplot->ymax=ymax; contoursplot_free_legends(contoursplot); contoursplot_build_legends(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_get_range (GabeditContoursPlot *contoursplot, gdouble *xmin, gdouble *xmax, gdouble *ymin, gdouble *ymax) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if (xmin!=NULL) *xmin=contoursplot->xmin; if (xmax!=NULL) *xmax=contoursplot->xmax; if (ymax!=NULL) *ymax=contoursplot->ymax; if (ymin!=NULL) *ymin=contoursplot->ymin; } /****************************************************************************************/ gboolean gabedit_contoursplot_get_point (GabeditContoursPlot *contoursplot, gint x, gint y, gdouble *xv, gdouble *yv) { g_return_val_if_fail (contoursplot != NULL, FALSE); g_return_val_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot),FALSE); /* if ((x < contoursplot->plotting_rect.x) || (x > (contoursplot->plotting_rect.x + contoursplot->plotting_rect.width)) || (y < contoursplot->plotting_rect.y) || (y > (contoursplot->plotting_rect.y + contoursplot->plotting_rect.height))) { *xv=*yv=0; return FALSE; } */ x=x-contoursplot->plotting_rect.x; y=contoursplot->plotting_rect.y+contoursplot->plotting_rect.height-y; pixel2value(contoursplot, x, y, xv, yv); return TRUE; } /****************************************************************************************/ gboolean gabedit_contoursplot_get_point_control(GabeditContoursPlot *contoursplot, gint x, gint y, gint width, gint height, gdouble angle, gdouble *xv, gdouble *yv ) { gdouble xa, ya; gdouble xmin,xmax,ymin,ymax; gint a[4],b[4]; gint i; gint ixmin,ixmax,iymin,iymax; gdouble alpha = angle; gdouble l; gint lcos; gint lsin; gint wcos; gint wsin; gint hcos; gint hsin; GtkWidget *widget = GTK_WIDGET(contoursplot); g_return_val_if_fail (contoursplot != NULL, FALSE); g_return_val_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot),FALSE); if(width>0) alpha -= atan((gdouble)height/width); l = sqrt(width*width+height*height); lcos = (gint)(l*cos(alpha)); lsin = (gint)(l*sin(alpha)); wcos = (gint)(width*cos(angle)); wsin = (gint)(width*sin(angle)); hcos = (gint)(height*cos(angle-M_PI/2)); hsin = (gint)(height*sin(angle-M_PI/2)); ixmin = 0; if(ixmin<-lcos) ixmin = -lcos; if(ixmin<-wcos) ixmin = -wcos; if(ixmin<-hcos) ixmin = -hcos; iymin = 0; if(iyminallocation.width-ixmax; iymax = 0; if(iymax<-lsin) iymax = -lsin; if(iymax<-wsin) iymax = -wsin; if(iymax<-hsin) iymax = -hsin; iymax = widget->allocation.height-iymax; /* printf("iminmax = %d %d %d %d\n",ixmin,ixmax,iymin,iymax);*/ a[0] = ixmin; a[1] = ixmax; a[2] = ixmax; a[3] = ixmin; b[0] = iymin; b[1] = iymin; b[2] = iymax; b[3] = iymax; gabedit_contoursplot_get_point (contoursplot, x, y, xv, yv); xmin = xmax = *xv; ymin = ymax = *yv; for(i=0;i<4;i++) { gabedit_contoursplot_get_point (contoursplot, a[i], b[i], &xa, &ya); if(i==0) { xmin = xa; xmax = xa; ymin = ya; ymax = ya; } else { if(xmin>xa) xmin = xa; if(ymin>ya) ymin = ya; if(xmaxxmax) *xv = xmax; if(*yv>ymax) *yv = ymax; return TRUE; } /****************************************************************************************/ void gabedit_contoursplot_set_ticks (GabeditContoursPlot *contoursplot, gint hmajor, gint hminor, gint vmajor, gint vminor, gint length) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); contoursplot_free_legends(contoursplot); contoursplot->hmajor_ticks=hmajor; contoursplot->hminor_ticks=hminor; contoursplot->vmajor_ticks=vmajor; contoursplot->vminor_ticks=vminor; contoursplot->length_ticks=length; contoursplot_build_legends(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_set_ticks_hmajor (GabeditContoursPlot *contoursplot, gint hmajor) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); contoursplot_free_legends(contoursplot); contoursplot->hmajor_ticks=hmajor; contoursplot_build_legends(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_set_ticks_hminor (GabeditContoursPlot *contoursplot, gint hminor) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); contoursplot_free_legends(contoursplot); contoursplot->hminor_ticks=hminor; contoursplot_build_legends(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_set_ticks_vmajor (GabeditContoursPlot *contoursplot, gint vmajor) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); contoursplot_free_legends(contoursplot); contoursplot->vmajor_ticks=vmajor; contoursplot_build_legends(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_set_ticks_vminor (GabeditContoursPlot *contoursplot, gint vminor) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); contoursplot_free_legends(contoursplot); contoursplot->vminor_ticks=vminor; contoursplot_build_legends(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_set_ticks_length (GabeditContoursPlot *contoursplot, gint length) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); contoursplot_free_legends(contoursplot); contoursplot->length_ticks=length; contoursplot_build_legends(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_get_ticks (GabeditContoursPlot *contoursplot, gint *hmajor, gint *hminor, gint *vmajor, gint *vminor, gint* length) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if (hmajor!=NULL) *hmajor=contoursplot->hmajor_ticks; if (hminor!=NULL) *hminor=contoursplot->hminor_ticks; if (vmajor!=NULL) *vmajor=contoursplot->vmajor_ticks; if (vminor!=NULL) *vminor=contoursplot->vminor_ticks; if (length!=NULL) *length=contoursplot->length_ticks; } /****************************************************************************************/ void gabedit_contoursplot_set_margins_left (GabeditContoursPlot *contoursplot, gint left) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); contoursplot_free_legends(contoursplot); contoursplot->left_margins=left; contoursplot_build_legends(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_set_margins_right (GabeditContoursPlot *contoursplot, gint right) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); contoursplot_free_legends(contoursplot); contoursplot->right_margins=right; contoursplot_build_legends(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_set_margins_top (GabeditContoursPlot *contoursplot, gint top) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); contoursplot_free_legends(contoursplot); contoursplot->top_margins=top; contoursplot_build_legends(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_set_margins_bottom (GabeditContoursPlot *contoursplot, gint bottom) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); contoursplot_free_legends(contoursplot); contoursplot->bottom_margins=bottom; contoursplot_build_legends(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_set_x_legends_digits (GabeditContoursPlot *contoursplot, gint digits) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if (digits != contoursplot->x_legends_digits){ contoursplot_free_legends(contoursplot); contoursplot->x_legends_digits=digits; contoursplot_build_legends(contoursplot); contoursplot_calculate_legends_sizes(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /****************************************************************************************/ void gabedit_contoursplot_set_y_legends_digits (GabeditContoursPlot *contoursplot, gint digits) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if (digits != contoursplot->y_legends_digits){ contoursplot_free_legends(contoursplot); contoursplot->y_legends_digits=digits; contoursplot_build_legends(contoursplot); contoursplot_calculate_legends_sizes(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /****************************************************************************************/ gint gabedit_contoursplot_get_x_legends_digits (GabeditContoursPlot *contoursplot) { g_return_val_if_fail (contoursplot != NULL, 0); g_return_val_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot), 0); return(contoursplot->x_legends_digits); } /****************************************************************************************/ gint gabedit_contoursplot_get_y_legends_digits (GabeditContoursPlot *contoursplot) { g_return_val_if_fail (contoursplot != NULL, 0); g_return_val_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot), 0); return(contoursplot->y_legends_digits); } /****************************************************************************************/ void gabedit_contoursplot_set_background_color (GabeditContoursPlot *contoursplot, GdkColor color) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); gdk_gc_set_rgb_fg_color(contoursplot->back_gc, &color); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_set_grids_attributes (GabeditContoursPlot *contoursplot, GabeditContoursPlotGrid grid, GdkColor color, gint line_width, GdkLineStyle line_style) { GdkGC *gc; g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); switch (grid){ case GABEDIT_ContoursPLOT_HMAJOR_GRID: gc=contoursplot->hmajor_grid_gc; break; case GABEDIT_ContoursPLOT_HMINOR_GRID: gc=contoursplot->hminor_grid_gc; break; case GABEDIT_ContoursPLOT_VMAJOR_GRID: gc=contoursplot->vmajor_grid_gc; break; case GABEDIT_ContoursPLOT_VMINOR_GRID: gc=contoursplot->vminor_grid_gc; break; default: return; } gdk_gc_set_rgb_fg_color(gc, &color); gdk_gc_set_line_attributes(gc, line_width, line_style, 0 ,0); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_get_grids_attributes (GabeditContoursPlot *contoursplot, GabeditContoursPlotGrid grid, GdkColor *color, gint *line_width, GdkLineStyle *line_style) { GdkGC *gc; GdkGCValues gc_values; g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); g_return_if_fail (color != NULL); g_return_if_fail (line_width != NULL); g_return_if_fail (line_style != NULL); switch (grid){ case GABEDIT_ContoursPLOT_HMAJOR_GRID: gc=contoursplot->hmajor_grid_gc; break; case GABEDIT_ContoursPLOT_HMINOR_GRID: gc=contoursplot->hminor_grid_gc; break; case GABEDIT_ContoursPLOT_VMAJOR_GRID: gc=contoursplot->vmajor_grid_gc; break; case GABEDIT_ContoursPLOT_VMINOR_GRID: gc=contoursplot->vminor_grid_gc; break; default: return; } gdk_gc_get_values(gc, &gc_values); *color=gc_values.foreground; *line_width=gc_values.line_width; *line_style=gc_values.line_style; } /****************************************************************************************/ static void contoursplot_enable_grids (GabeditContoursPlot *contoursplot, GabeditContoursPlotGrid grid, gboolean enable) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); switch (grid){ case GABEDIT_ContoursPLOT_HMAJOR_GRID: contoursplot->hmajor_grid=enable; break; case GABEDIT_ContoursPLOT_HMINOR_GRID: contoursplot->hminor_grid=enable; break; case GABEDIT_ContoursPLOT_VMAJOR_GRID: contoursplot->vmajor_grid=enable; break; case GABEDIT_ContoursPLOT_VMINOR_GRID: contoursplot->vminor_grid=enable; break; default: return; } contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_enable_grids (GabeditContoursPlot *contoursplot, GabeditContoursPlotGrid grid, gboolean enable) { GtkUIManager *manager = g_object_get_data(G_OBJECT (contoursplot), "Manager"); GtkAction* action = NULL; if(grid==GABEDIT_ContoursPLOT_HMAJOR_GRID) action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderGrid/HGridShowMajor"); if(grid==GABEDIT_ContoursPLOT_HMINOR_GRID) action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderGrid/HGridShowMinor"); if(grid==GABEDIT_ContoursPLOT_VMAJOR_GRID) action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderGrid/VGridShowMajor"); if(grid==GABEDIT_ContoursPLOT_VMINOR_GRID) action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderGrid/VGridShowMinor"); if(action) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action),enable); } /****************************************************************************************/ void gabedit_contoursplot_add_data(GabeditContoursPlot *contoursplot, ContoursPlotData *data) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); g_return_if_fail (data != NULL); if (g_list_find (contoursplot->data_list, (gpointer)data)==NULL) { gint i; contoursplot->data_list=g_list_append(contoursplot->data_list, (gpointer) data); for(i=0;inContours;i++) contoursplot_build_points_contour(GABEDIT_ContoursPLOT(contoursplot), &data->contours[i]); } } /****************************************************************************************/ void gabedit_contoursplot_remove_data(GabeditContoursPlot *contoursplot, ContoursPlotData *data) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); g_return_if_fail (data != NULL); if (g_list_find (contoursplot->data_list, (gpointer)data)!=NULL){ contoursplot->data_list=g_list_remove_all (contoursplot->data_list, (gpointer) data); } } /****************************************************************************************/ void gabedit_contoursplot_configure_mouse_zoom(GabeditContoursPlot *contoursplot, gboolean enabled, gint button) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); contoursplot->mouse_zoom_enabled=enabled; contoursplot->mouse_zoom_button=button; } /****************************************************************************************/ void gabedit_contoursplot_configure_mouse_distance(GabeditContoursPlot *contoursplot, gboolean enabled, gint button) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); contoursplot->mouse_distance_enabled=enabled; contoursplot->mouse_distance_button=button; } /****************************************************************************************/ void gabedit_contoursplot_configure_wheel_zoom(GabeditContoursPlot *contoursplot, gboolean enabled, gdouble factor) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); contoursplot->wheel_zoom_enabled=enabled; contoursplot->wheel_zoom_factor=factor; } /****************************************************************************************/ void gabedit_contoursplot_configure_mouse_displace(GabeditContoursPlot *contoursplot, gboolean enabled, gint button) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); contoursplot->mouse_displace_enabled=enabled; contoursplot->mouse_displace_button=button; } /****************************************************************************************/ void gabedit_contoursplot_configure_mouse_autorange(GabeditContoursPlot *contoursplot, gboolean enabled, gint button) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); contoursplot->mouse_autorange_enabled=enabled; contoursplot->mouse_autorange_button=button; } /********************************************************************************/ static guchar *get_rgb_image(GtkWidget* drawable) { gdouble fac=255.0/65535.0; GdkColormap *colormap; gint height; gint width; gint32 pixel; GdkImage* image = NULL; GdkVisual *v; gint8 component; gint k=0; gint x; gint y; gint i; guchar* rgbbuf=NULL; colormap = gdk_window_get_colormap(GTK_WIDGET(drawable)->window); height = drawable->allocation.height; width = drawable->allocation.width; rgbbuf=(guchar *) g_malloc(3*width*height*sizeof(guchar)); if(!colormap) return NULL; if(!rgbbuf) return NULL; image = gdk_image_get(drawable->window,0,0,width,height); v = gdk_colormap_get_visual(colormap); switch(v->type) { case GDK_VISUAL_STATIC_GRAY: case GDK_VISUAL_GRAYSCALE: case GDK_VISUAL_STATIC_COLOR: case GDK_VISUAL_PSEUDO_COLOR: for(y=height-1;y>=0;y--) for(x=0;x<(gint)width;x++) { pixel = gdk_image_get_pixel(image, x, y); rgbbuf[k] = (guchar)(colormap->colors[pixel].red*fac); rgbbuf[k+1] =(guchar) (colormap->colors[pixel].green*fac); rgbbuf[k+2] =(guchar) (colormap->colors[pixel].blue*fac); k+=3; } break; case GDK_VISUAL_TRUE_COLOR: for(y=height-1;y>=0;y--) for(x=0;x<(gint)width;x++) { pixel = gdk_image_get_pixel(image, x, y); component = 0; for (i = 24; i < 32; i += v->red_prec) component |= ((pixel & v->red_mask) << (32 - v->red_shift - v->red_prec)) >> i; rgbbuf[k] = (guchar)(component); component = 0; for (i = 24; i < 32; i += v->green_prec) component |= ((pixel & v->green_mask) << (32 - v->green_shift - v->green_prec)) >> i; rgbbuf[k+1] = (guchar)(component); component = 0; for (i = 24; i < 32; i += v->blue_prec) component |= ((pixel & v->blue_mask) << (32 - v->blue_shift - v->blue_prec)) >> i; rgbbuf[k+2] = (guchar)(component); k += 3; } break; case GDK_VISUAL_DIRECT_COLOR: for(y=height-1;y>=0;y--) for(x=0;x<(gint)width;x++) { pixel = gdk_image_get_pixel(image, x, y); component = colormap->colors[((pixel & v->red_mask) << (32 - v->red_shift - v->red_prec)) >> 24].red; rgbbuf[k] = (guchar)(component*fac); component = colormap->colors[((pixel & v->green_mask) << (32 - v->green_shift - v->green_prec)) >> 24].green; rgbbuf[k+1] = (guchar)(component*fac); component = colormap->colors[((pixel & v->blue_mask) << (32 - v->blue_shift - v->blue_prec)) >> 24].blue; rgbbuf[k+2] = (guchar)(component*fac); k += 3; } break; default : { g_free(rgbbuf); return NULL; } } return rgbbuf; } /********************************************************************************/ static void WLSBL(int val,char* arr) { arr[0] = (char) (val&0xff); arr[1] = (char) ((val>>8) &0xff); arr[2] = (char) ((val>>16)&0xff); arr[3] = (char) ((val>>24)&0xff); } /**************************************************************************/ static void writeBMP(GabeditContoursPlot *contoursplot, gchar *fileName) { guchar rgbtmp[3]; int pad; char bmp_header[]= { 'B','M', 0,0,0,0, 0,0, 0,0, 54,0,0,0, 40,0,0,0, 0,0,0,0, 0,0,0,0, 1,0, 24,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 }; GtkWidget *drawable; FILE *file; int i; int j; int width; int height; guchar *rgbbuf; file = fopen(fileName,"wb"); if (!file) return; drawable = GTK_WIDGET(contoursplot); rgbbuf = get_rgb_image(drawable); if (!rgbbuf) { fclose(file); return; } width = drawable->allocation.width; height = drawable->allocation.height; /* The number of bytes on a screenline should be wholly devisible by 4 */ pad = (width*3)%4; if (pad) pad = 4 - pad; WLSBL((int) (3*width+pad)*height+54,bmp_header+2); WLSBL((int) width,bmp_header+18); WLSBL((int) height,bmp_header+22); WLSBL((int) 3*width*height,bmp_header+34); {int it = fwrite(bmp_header,1,54,file);} for (i=0;iallocation.width; height = widget->allocation.height; pixbuf = gdk_pixbuf_get_from_drawable(NULL, widget->window, NULL, 0, 0, 0, 0, width, height); if(pixbuf) { GdkPixbuf *pixbufNew = NULL; guchar color[3] = {255, 255, 255}; GdkColor c; GdkGCValues gc_values; GdkColormap *colormap; colormap = gdk_window_get_colormap(widget->window); gdk_gc_get_values(contoursplot->back_gc, &gc_values); gdk_colormap_query_color(colormap, gc_values.foreground.pixel,&c); color[0] = (guchar)(SCALE(c.red)*255); color[1] = (guchar)(SCALE(c.green)*255); color[2] = (guchar)(SCALE(c.blue)*255); pixbufNew = gdk_pixbuf_add_alpha(pixbuf, TRUE, color[0], color[1], color[2]); if(pixbufNew) gdk_pixbuf_save(pixbufNew, fileName, "png", &error, NULL); else gdk_pixbuf_save(pixbuf, fileName, "png", &error, NULL); g_object_unref (pixbuf); g_object_unref (pixbufNew); } } /****************************************************************************************/ void gabedit_contoursplot_save_image(GabeditContoursPlot *contoursplot, gchar *fileName, gchar* type) { GtkWidget* widget = GTK_WIDGET(contoursplot); int width; int height; GError *error = NULL; GdkPixbuf *pixbuf = NULL; if(fileName && type && !strcmp(type,"bmp")) { writeBMP(contoursplot, fileName); return; } if(fileName && type && !strcmp(type,"tpng")) { writeTransparentPNG(contoursplot, fileName); return; } width = widget->allocation.width; height = widget->allocation.height; pixbuf = gdk_pixbuf_get_from_drawable(NULL, widget->window, NULL, 0, 0, 0, 0, width, height); if(pixbuf) { if(!fileName) { GtkClipboard * clipboard; clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); if(clipboard) { gtk_clipboard_clear(clipboard); gtk_clipboard_set_image(clipboard, pixbuf); } } else { if(type && strstr(type,"j") && strstr(type,"g") ) gdk_pixbuf_save(pixbuf, fileName, type, &error, "quality", "100", NULL); else if(type && strstr(type,"png")) gdk_pixbuf_save(pixbuf, fileName, type, &error, "compression", "5", NULL); else if(type && (strstr(type,"tif") || strstr(type,"tiff"))) gdk_pixbuf_save(pixbuf, fileName, "tiff", &error, "compression", "1", NULL); else gdk_pixbuf_save(pixbuf, fileName, type, &error, NULL); } g_object_unref (pixbuf); } } /****************************************************************************************/ static void contoursplot_calculate_sizes (GabeditContoursPlot *contoursplot) { GtkWidget *widget; gint left = 10; gint right = 10; gint top = 5; gint bottom = 5; g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); widget = GTK_WIDGET(contoursplot); left += 0.75*((gdouble)contoursplot->y_legends_width); right += 0.75*((gdouble)contoursplot->y_legends_width); top += 0.5*((gdouble)contoursplot->x_legends_height); bottom += 0.5*((gdouble)contoursplot->x_legends_height); if(contoursplot->show_left_legends) left = 10+1.5*((gdouble)contoursplot->y_legends_width)+1.0*((gdouble)contoursplot->v_label_height); if(contoursplot->show_right_legends) right = 10+1.5*((gdouble)contoursplot->y_legends_width)+1.0*((gdouble)contoursplot->v_label_height); if(contoursplot->show_top_legends) top = 5+1.5*((gdouble)contoursplot->x_legends_height)+1.0*((gdouble)contoursplot->h_label_height); if(contoursplot->show_bottom_legends) bottom = 5+1.5*((gdouble)contoursplot->x_legends_height)+1.0*((gdouble)contoursplot->h_label_height); if(contoursplot->show_colormap) right += (gdouble)contoursplot->colormap_width; if (contoursplot->v_label && !contoursplot->show_left_legends && contoursplot->show_right_legends) right += contoursplot->v_label_height; left += (gint)(contoursplot->left_margins/100.0*widget->allocation.width); right += (gint)(contoursplot->right_margins/100.0*widget->allocation.width); top += (gint)(contoursplot->top_margins/100.0*widget->allocation.height); bottom += (gint)(contoursplot->bottom_margins/100.0*widget->allocation.height); contoursplot->plotting_rect.x = left; contoursplot->plotting_rect.y = top; contoursplot->plotting_rect.width=widget->allocation.width -left - right; contoursplot->plotting_rect.height=widget->allocation.height - top - bottom ; if (contoursplot->hmajor_ticks>1){ contoursplot->d_hmajor=((gdouble)contoursplot->plotting_rect.width)/((gdouble)contoursplot->hmajor_ticks-1.0); contoursplot->d_hminor=((gdouble)contoursplot->d_hmajor)/((gdouble)contoursplot->hminor_ticks+1.0); } if (contoursplot->vmajor_ticks>1){ contoursplot->d_vmajor=((gdouble)contoursplot->plotting_rect.height)/((gdouble)contoursplot->vmajor_ticks-1.0); contoursplot->d_vminor=((gdouble)contoursplot->d_vmajor)/((gdouble)contoursplot->vminor_ticks+1.0); } /* Creating the plotting area (everytime the plotting area's size is changed, the size of the pismap must be changed too, so, a new one, with the right size is created*/ if (contoursplot->plotting_area!=NULL) g_object_unref(G_OBJECT(contoursplot->plotting_area)); if (contoursplot->cairo_widget!=NULL) cairo_destroy (contoursplot->cairo_widget); if (contoursplot->cairo_area!=NULL) cairo_destroy (contoursplot->cairo_area); if (GTK_WIDGET_REALIZED(widget)) { contoursplot->plotting_area=gdk_pixmap_new(widget->window, contoursplot->plotting_rect.width, contoursplot->plotting_rect.height, -1); contoursplot->cairo_area = gdk_cairo_create (contoursplot->plotting_area); contoursplot->cairo_widget = gdk_cairo_create (widget->window); } contoursplot->colormap_height = contoursplot->plotting_rect.height; reset_object_text_pixels(contoursplot); reset_object_line_pixels(contoursplot); } /****************************************************************************************/ static void value2pixel(GabeditContoursPlot *contoursplot, gdouble xv, gdouble yv, gint *x, gint *y) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); *x=(xv-contoursplot->xmin)*((gdouble)contoursplot->plotting_rect.width)/(contoursplot->xmax-contoursplot->xmin); if(contoursplot->reflect_x) *x = contoursplot->plotting_rect.width - *x; *y=(yv-contoursplot->ymin)*((gdouble)contoursplot->plotting_rect.height)/(contoursplot->ymax-contoursplot->ymin); if(contoursplot->reflect_y) *y = contoursplot->plotting_rect.height - *y; } /****************************************************************************************/ static void pixel2value(GabeditContoursPlot *contoursplot, gint xp, gint yp, gdouble *x, gdouble *y) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); gdouble xxp = (gdouble)xp; gdouble yyp = (gdouble)yp; if(contoursplot->reflect_x) xxp = contoursplot->plotting_rect.width-xxp; if(contoursplot->reflect_y) yyp = contoursplot->plotting_rect.height-yyp; *x=contoursplot->xmin+((gdouble)xxp)*(contoursplot->xmax-contoursplot->xmin)/((gdouble)contoursplot->plotting_rect.width); *y=contoursplot->ymin+((gdouble)yyp)*(contoursplot->ymax-contoursplot->ymin)/((gdouble)contoursplot->plotting_rect.height); } /****************************************************************************************/ static void contoursplot_calculate_colormap_sizes(GabeditContoursPlot *contoursplot) { GtkWidget *widget; g_return_if_fail (contoursplot != NULL); widget=GTK_WIDGET(contoursplot); if (contoursplot->colormap_legends) { pango_layout_set_font_description (contoursplot->colormap_legends[0], widget->style->font_desc); pango_layout_get_size(contoursplot->colormap_legends[0], &(contoursplot->colormap_width), &(contoursplot->colormap_height)); contoursplot->colormap_width /=PANGO_SCALE; contoursplot->colormap_height /=PANGO_SCALE; contoursplot->colormap_width *=2; contoursplot->colormap_height = contoursplot->plotting_rect.height; } } /****************************************************************************************/ static void contoursplot_build_colormap_legends(GabeditContoursPlot *contoursplot) { GtkWidget *widget; gint loop; ColorMap* colorMap = NULL; gint nlegends; gdouble vmin; gdouble dv; gdouble value; g_return_if_fail (contoursplot != NULL); widget=GTK_WIDGET(contoursplot); colorMap =GABEDIT_ContoursPLOT(contoursplot)->colorsMap.colorMap; if(!colorMap) return; if(colorMap->numberOfColors<2)return; nlegends = GABEDIT_ContoursPLOT(contoursplot)->colormap_nlegends; contoursplot->colormap_legends=g_new(PangoLayout*, nlegends); if(contoursplot->colormap_legends_str) g_free(contoursplot->colormap_legends_str); contoursplot->colormap_legends_str=g_malloc( (sizeof(gchar*) * nlegends)); vmin = colorMap->colorValue[0].value; dv = (colorMap->colorValue[colorMap->numberOfColors-1].value-colorMap->colorValue[0].value)/(nlegends-1); for (loop=0; loopcolormap_legends_str[loop]=g_malloc( (sizeof(gchar) * (contoursplot->y_legends_digits+1))); value = vmin + dv*loop; snprintf(contoursplot->colormap_legends_str[loop], contoursplot->y_legends_digits+1, "%lf", value); contoursplot->colormap_legends_str[loop][contoursplot->y_legends_digits]='\0'; /* printf("str[%d]=%s\n",loop, contoursplot->colormap_legends_str[loop]);*/ contoursplot->colormap_legends[loop]=gtk_widget_create_pango_layout (widget, contoursplot->colormap_legends_str[loop]); } contoursplot->colormap_nlegends=nlegends; contoursplot_calculate_colormap_sizes(contoursplot); } /****************************************************************************************/ static void contoursplot_calculate_legends_sizes(GabeditContoursPlot *contoursplot) { GtkWidget *widget; g_return_if_fail (contoursplot != NULL); widget=GTK_WIDGET(contoursplot); if (contoursplot->x_legends_digits==0 && contoursplot->y_legends_digits==0){ contoursplot->x_legends_width=0; contoursplot->x_legends_height=0; contoursplot->y_legends_width=0; contoursplot->y_legends_height=0; return; } if (contoursplot->h_legends) { pango_layout_set_font_description (contoursplot->h_legends[0], widget->style->font_desc); pango_layout_get_size(contoursplot->h_legends[0], &(contoursplot->x_legends_width), &(contoursplot->x_legends_height)); } if (contoursplot->v_legends) { gint i; pango_layout_set_font_description (contoursplot->v_legends[0], widget->style->font_desc); pango_layout_get_size(contoursplot->v_legends[0], &(contoursplot->y_legends_width), &(contoursplot->y_legends_height)); for (i=1; ivmajor_ticks; i++) { gint w,h; pango_layout_set_font_description (contoursplot->v_legends[i], widget->style->font_desc); pango_layout_get_size(contoursplot->v_legends[i], &w,&h); if(w>contoursplot->y_legends_width) contoursplot->y_legends_width=w; } } contoursplot->x_legends_width/=PANGO_SCALE; contoursplot->x_legends_height/=PANGO_SCALE; contoursplot->y_legends_width/=PANGO_SCALE; contoursplot->y_legends_height/=PANGO_SCALE; contoursplot->h_label_width = 0; contoursplot->h_label_height =0; if (contoursplot->h_label) { pango_layout_set_font_description (contoursplot->h_label, widget->style->font_desc); pango_layout_get_size(contoursplot->h_label, &(contoursplot->h_label_width), &(contoursplot->h_label_height)); contoursplot->h_label_width /=PANGO_SCALE; contoursplot->h_label_height /=PANGO_SCALE; } contoursplot->v_label_width = 0; contoursplot->v_label_height =0; if (contoursplot->v_label) { pango_layout_set_font_description (contoursplot->v_label, widget->style->font_desc); pango_layout_get_size(contoursplot->v_label, &(contoursplot->v_label_width), &(contoursplot->v_label_height)); contoursplot->v_label_width /=PANGO_SCALE; contoursplot->v_label_height /=PANGO_SCALE; } } /****************************************************************************************/ static void contoursplot_build_legends(GabeditContoursPlot *contoursplot) { GtkWidget *widget; gint loop; g_return_if_fail (contoursplot != NULL); widget=GTK_WIDGET(contoursplot); if ( (contoursplot->hmajor_ticks > 1) && (contoursplot->x_legends_digits != 0)){ contoursplot->d_hlegend=fabs(contoursplot->xmax-contoursplot->xmin)/((gdouble)contoursplot->hmajor_ticks-1.0); contoursplot->h_legends=g_new(PangoLayout*, contoursplot->hmajor_ticks); if(contoursplot->h_legends_str) g_free(contoursplot->h_legends_str); contoursplot->h_legends_str = g_malloc( (sizeof(gchar*) * contoursplot->hmajor_ticks ) ); for (loop=0; loophmajor_ticks; loop++){ contoursplot->h_legends_str[loop] = g_malloc( (sizeof(gchar) * (contoursplot->x_legends_digits+1)) ); snprintf(contoursplot->h_legends_str[loop] , contoursplot->x_legends_digits+1, "%lf", contoursplot->xmin + (gdouble)loop*contoursplot->d_hlegend); contoursplot->h_legends_str[loop] [contoursplot->x_legends_digits]='\0'; contoursplot->h_legends[loop]=gtk_widget_create_pango_layout (widget, contoursplot->h_legends_str[loop]); } } if ((contoursplot->vmajor_ticks > 1) && (contoursplot->y_legends_digits != 0) ){ contoursplot->d_vlegend=fabs(contoursplot->ymax-contoursplot->ymin)/((gdouble)contoursplot->vmajor_ticks-1.0); contoursplot->v_legends=g_new(PangoLayout*, contoursplot->vmajor_ticks); if(contoursplot->v_legends_str) g_free(contoursplot->v_legends_str); contoursplot->v_legends_str=g_malloc( (sizeof(gchar*) * contoursplot->vmajor_ticks)); for (loop=0; loopvmajor_ticks; loop++){ contoursplot->v_legends_str[loop]=g_malloc( (sizeof(gchar) * (contoursplot->y_legends_digits+1))); snprintf(contoursplot->v_legends_str[loop], contoursplot->y_legends_digits+1, "%lf", contoursplot->ymin + (gdouble)loop*contoursplot->d_vlegend); contoursplot->v_legends_str[loop][contoursplot->y_legends_digits]='\0'; contoursplot->v_legends[loop]=gtk_widget_create_pango_layout (widget, contoursplot->v_legends_str[loop]); } } contoursplot->h_label = get_pango_str(contoursplot, contoursplot->h_label_str); contoursplot->v_label = get_pango_str(contoursplot, contoursplot->v_label_str); contoursplot_calculate_legends_sizes(contoursplot); } /****************************************************************************************/ static void contoursplot_free_legends(GabeditContoursPlot *contoursplot) { gint loop; g_return_if_fail (contoursplot != NULL); if (contoursplot->h_legends!=NULL){ for (loop=0; loophmajor_ticks; loop++) if (contoursplot->h_legends[loop]!=NULL) g_object_unref(G_OBJECT(contoursplot->h_legends[loop])); g_free(contoursplot->h_legends); contoursplot->h_legends=NULL; } if (contoursplot->v_legends!=NULL){ for (loop=0; loopvmajor_ticks; loop++) if (contoursplot->v_legends[loop]!=NULL) g_object_unref(G_OBJECT(contoursplot->v_legends[loop])); g_free(contoursplot->v_legends); contoursplot->v_legends=NULL; } if (contoursplot->v_legends_str!=NULL) { for (loop=0; loopvmajor_ticks; loop++) g_free(contoursplot->v_legends_str[loop]); g_free(contoursplot->v_legends_str); } if (contoursplot->h_legends_str!=NULL) { for (loop=0; loophmajor_ticks; loop++) g_free(contoursplot->h_legends_str[loop]); g_free(contoursplot->h_legends_str); } contoursplot->v_legends_str = NULL; contoursplot->h_legends_str = NULL; } /****************************************************************************************/ static void contoursplot_reflect_x (GabeditContoursPlot *contoursplot, gboolean reflection) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if(contoursplot->reflect_x == reflection) return; contoursplot->reflect_x = reflection; reset_object_text_pixels(contoursplot); reset_object_line_pixels(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_reflect_x (GabeditContoursPlot *contoursplot, gboolean enable) { GtkUIManager *manager = g_object_get_data(G_OBJECT (contoursplot), "Manager"); GtkAction* action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderDirections/DirectionReflectX"); if(action) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action),enable); } /****************************************************************************************/ static void contoursplot_reflect_y (GabeditContoursPlot *contoursplot, gboolean reflection) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if(contoursplot->reflect_y == reflection) return; contoursplot->reflect_y = reflection; reset_object_text_pixels(contoursplot); reset_object_line_pixels(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_reflect_y (GabeditContoursPlot *contoursplot, gboolean enable) { GtkUIManager *manager = g_object_get_data(G_OBJECT (contoursplot), "Manager"); GtkAction* action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderDirections/DirectionReflectY"); if(action) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action),enable); } /****************************************************************************************/ static void contoursplot_show_label_contours (GabeditContoursPlot *contoursplot, gboolean show) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if(contoursplot->show_label_contours == show) return; contoursplot->show_label_contours = show; gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ static void contoursplot_build_position_label_contours (GabeditContoursPlot *contoursplot) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); reset_label_contours(GTK_WIDGET(contoursplot), NULL); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ static void contoursplot_show_colormap (GabeditContoursPlot *contoursplot, gboolean show) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if(contoursplot->show_colormap == show) return; contoursplot->show_colormap = show; contoursplot_build_colormap_legends(contoursplot); contoursplot_calculate_colormap_sizes(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ static void contoursplot_dashed_negative_contours (GabeditContoursPlot *contoursplot, gboolean dashed) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if(contoursplot->dashed_negative_contours == dashed) return; contoursplot->dashed_negative_contours = dashed; reset_contour_lines_styles(GTK_WIDGET(contoursplot), NULL); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ static void contoursplot_show_left_legends (GabeditContoursPlot *contoursplot, gboolean show) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if(contoursplot->show_left_legends == show) return; contoursplot->show_left_legends = show; contoursplot_build_legends(contoursplot); contoursplot_calculate_legends_sizes(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_show_left_legends (GabeditContoursPlot *contoursplot, gboolean enable) { GtkUIManager *manager = g_object_get_data(G_OBJECT (contoursplot), "Manager"); GtkAction* action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderLegends/LegendShowLeft"); if(action) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action),enable); } /****************************************************************************************/ static void contoursplot_show_right_legends (GabeditContoursPlot *contoursplot, gboolean show) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if(contoursplot->show_right_legends == show) return; contoursplot->show_right_legends = show; contoursplot_build_legends(contoursplot); contoursplot_calculate_legends_sizes(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_show_right_legends (GabeditContoursPlot *contoursplot, gboolean enable) { GtkUIManager *manager = g_object_get_data(G_OBJECT (contoursplot), "Manager"); GtkAction* action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderLegends/LegendShowRight"); if(action) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action),enable); } /****************************************************************************************/ static void contoursplot_show_top_legends (GabeditContoursPlot *contoursplot, gboolean show) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if(contoursplot->show_top_legends == show) return; contoursplot->show_top_legends = show; contoursplot_build_legends(contoursplot); contoursplot_calculate_legends_sizes(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_show_top_legends (GabeditContoursPlot *contoursplot, gboolean enable) { GtkUIManager *manager = g_object_get_data(G_OBJECT (contoursplot), "Manager"); GtkAction* action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderLegends/LegendShowTop"); if(action) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action),enable); } /****************************************************************************************/ static void contoursplot_show_bottom_legends (GabeditContoursPlot *contoursplot, gboolean show) { g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); if(contoursplot->show_bottom_legends == show) return; contoursplot->show_bottom_legends = show; contoursplot_build_legends(contoursplot); contoursplot_calculate_legends_sizes(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_show_bottom_legends (GabeditContoursPlot *contoursplot, gboolean enable) { GtkUIManager *manager = g_object_get_data(G_OBJECT (contoursplot), "Manager"); GtkAction* action = gtk_ui_manager_get_action (manager, "/MenuContoursPlot/Render/RenderLegends/LegendShowBottom"); if(action) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action),enable); } /****************************************************************************************/ void gabedit_contoursplot_set_font (GabeditContoursPlot *contoursplot, gchar* fontName) { GtkWidget* widget = NULL; g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); PangoFontDescription *font_desc = pango_font_description_from_string (fontName); widget=GTK_WIDGET(contoursplot); if(font_desc) { contoursplot->font_size = contoursplot_get_font_size (widget, font_desc); gtk_widget_modify_font (widget, font_desc); contoursplot_build_legends(contoursplot); contoursplot_calculate_legends_sizes(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } } /****************************************************************************************/ void gabedit_contoursplot_set_x_label (GabeditContoursPlot *contoursplot, G_CONST_RETURN gchar* str) { GtkWidget* widget = NULL; g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); widget=GTK_WIDGET(contoursplot); if(contoursplot->h_label_str) g_free(contoursplot->h_label_str); if(str && strlen(str)>0) { contoursplot->h_label_str = g_strdup(str); } else { contoursplot->h_label_str = NULL; } contoursplot_build_legends(contoursplot); contoursplot_calculate_legends_sizes(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ void gabedit_contoursplot_set_y_label (GabeditContoursPlot *contoursplot, G_CONST_RETURN gchar* str) { GtkWidget* widget = NULL; g_return_if_fail (contoursplot != NULL); g_return_if_fail (GABEDIT_IS_ContoursPLOT (contoursplot)); widget=GTK_WIDGET(contoursplot); if(contoursplot->v_label_str) g_free(contoursplot->v_label_str); if(str && strlen(str)>0) { contoursplot->v_label_str = g_strdup(str); } else contoursplot->v_label_str = NULL; contoursplot_build_legends(contoursplot); contoursplot_calculate_legends_sizes(contoursplot); contoursplot_calculate_sizes(contoursplot); gtk_widget_queue_draw(GTK_WIDGET(contoursplot)); } /****************************************************************************************/ static gboolean contoursplot_motion_notify_event(GtkWidget *contoursplot, GdkEventMotion *event, gpointer user_data) { double xv, yv; int x, y; char str[50]; int context_id; GtkWidget* statusbar = g_object_get_data(G_OBJECT (contoursplot), "StatusBar"); x=event->x; y=event->y; if (event->is_hint || (event->window != contoursplot->window)) gdk_window_get_pointer (contoursplot->window, &x, &y, NULL); if(gabedit_contoursplot_get_point(GABEDIT_ContoursPLOT(contoursplot), x, y, &xv, &yv)) snprintf(str, 50, "Mouse position: %f, %f", xv, yv); else sprintf(str, " "); context_id=gtk_statusbar_get_context_id (GTK_STATUSBAR(statusbar), "mouse position"); gtk_statusbar_push (GTK_STATUSBAR(statusbar), context_id, str); return TRUE; } /****************************************************************************************/ GtkWidget* gabedit_contoursplot_new_window(gchar* title, GtkWidget*parent) { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget* table = NULL; GtkWidget* box = NULL; GtkWidget* frame_contoursplot = NULL; GtkWidget* contoursplot = NULL; GtkWidget *statusbar = NULL; gtk_window_set_title (GTK_WINDOW (window), title); gtk_signal_connect (GTK_OBJECT (window), "delete_event", G_CALLBACK (gtk_widget_destroy), NULL); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_window_set_default_size (GTK_WINDOW(window),2*gdk_screen_width()/3,2*gdk_screen_height()/3); table=gtk_table_new(3, 1, FALSE); gtk_container_add(GTK_CONTAINER(window), table); gtk_widget_show(table); frame_contoursplot=gtk_frame_new("Contours GabeditPlot"); gtk_table_attach(GTK_TABLE(table), frame_contoursplot, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show(frame_contoursplot); contoursplot = gabedit_contoursplot_new(); gtk_container_add(GTK_CONTAINER(frame_contoursplot), contoursplot); gtk_widget_show (contoursplot); g_object_set_data (G_OBJECT (window), "ContoursPLOT",contoursplot); box=gtk_hbox_new(FALSE,0); gtk_table_attach(GTK_TABLE(table), box, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 5, 5); gtk_widget_show (box); g_object_set_data(G_OBJECT (contoursplot), "Box", box); statusbar=gtk_statusbar_new(); gtk_table_attach(GTK_TABLE(table), statusbar, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 5, 5); gtk_widget_show (statusbar); g_object_set_data(G_OBJECT (contoursplot), "StatusBar", statusbar); if(parent) gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parent)); gtk_widget_show (window); gabedit_contoursplot_set_range(GABEDIT_ContoursPLOT(contoursplot), 0.0, 10, 0, 20); gabedit_contoursplot_set_x_legends_digits(GABEDIT_ContoursPLOT(contoursplot), 5); gabedit_contoursplot_set_y_legends_digits(GABEDIT_ContoursPLOT(contoursplot), 5); gabedit_contoursplot_enable_grids (GABEDIT_ContoursPLOT(contoursplot), GABEDIT_ContoursPLOT_HMAJOR_GRID, FALSE); gabedit_contoursplot_enable_grids (GABEDIT_ContoursPLOT(contoursplot), GABEDIT_ContoursPLOT_VMAJOR_GRID, FALSE); gabedit_contoursplot_show_top_legends (GABEDIT_ContoursPLOT(contoursplot),FALSE); gabedit_contoursplot_show_right_legends (GABEDIT_ContoursPLOT(contoursplot),FALSE); g_signal_connect_after(G_OBJECT(contoursplot), "motion-notify-event", G_CALLBACK(contoursplot_motion_notify_event), NULL); g_object_set_data(G_OBJECT (contoursplot), "Window", window); g_object_set_data(G_OBJECT (window), "Box", box); gabedit_contoursplot_set_font (GABEDIT_ContoursPLOT(contoursplot), "sans 12"); return window; } /****************************************************************************************/ void gabedit_contoursplot_help() { GtkWidget* dialog = NULL; GtkWidget *label, *button; GtkWidget *frame, *vboxframe; GtkWidget* hbox; gchar* tmp = g_strdup_printf( _( "Mouse buttons and Keys :\n" "\t Right button : popup menu\n" "\t Middle button : zoom\n" "\t Left button + Control key : zoom\n" "\t Left button + Shift key : compute distance between 2 points\n" "\t d key : compute f and its dervivatives, using a bicubic interpolation\n" "\t Left button + t key : insert a text\n" "\t Left button + l key : insert a line (arrow)\n" "\t Left button + i key : insert an image (arrow)\n" "\t Left button + r key : remove selected image/text/line\n" "\t Left button, double click : select a data to change\n" "\n\n" "Popup menu :\n" "\t Set : ticks, margins, ranges, X and Y labels, digits, font size, auto ranges\n" "\t Render : grids, directions, legends, colormap\n" "\t Data : read data from a grid ASCII file (txt)\n" "\t Save all data at a txt file\n" "\t Remove all all\n" "\t Contours : set values or delete contours\n" "\t ColorMap : set colormap\n" "\t Objects : for insert/delete texts, lines or images\n" "\t Screen capture : BMP, JPEG, PNG, Transparent PNG, TIF\n" "\t Export image : SVG, PS, EPS and PDF (this is a real export, not a capture)\n" "\t Read : read all (parameters, data, texts, lines, images) from a Gabedit file\n" "\t Save : save all (parameters, data, texts, lines, images) in Gabedit file\n" "\t Help : for obtain this window (You guessed :))\n" "\t Close : very simple :)\n" ) ); dialog = gtk_dialog_new(); gtk_widget_realize(GTK_WIDGET(dialog)); gtk_window_set_title(GTK_WINDOW(dialog),_("Help")); g_signal_connect(G_OBJECT(dialog), "delete_event", (GCallback)gtk_widget_destroy, NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(dialog)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = gtk_vbox_new (FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), vboxframe); label = gtk_label_new(tmp); gtk_widget_show (label); gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT); hbox = gtk_hbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (vboxframe), hbox, FALSE, FALSE, 5); gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 5); gtk_widget_show (hbox); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(dialog)->action_area), FALSE); button = gtk_button_new_from_stock (GTK_STOCK_OK); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(dialog)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(dialog)); gtk_widget_show_all(dialog); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); g_free(tmp); } GabeditSrc250/src/Utils/HydrogenBond.c0000644000175100017510000005143213130665225020115 0ustar alloucheallouche/*HydrogenBond.c*/ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Common/Windows.h" #include "../Display/GLArea.h" #include "../Common/StockIcons.h" static gint nAtomsCanConnect = 6; static gchar** atomsCanConnect = NULL; static gdouble minDistance = 1.50; /* in Agnstrom */ static gdouble maxDistance = 3.15; /* in Agnstrom */ static gdouble minAngle = 145.0; static gdouble maxAngle = 215.0; static gint rowSelected = -1; static GtkTreeView *treeViewOfAtoms = NULL; static void rafreshTreeView(GtkTreeView *treeView); /************************************************************************/ void initHBonds() { nAtomsCanConnect = 6; atomsCanConnect = g_malloc(nAtomsCanConnect*sizeof(gchar*)); atomsCanConnect[0] = g_strdup("N"); atomsCanConnect[1] = g_strdup("O"); atomsCanConnect[2] = g_strdup("F"); atomsCanConnect[3] = g_strdup("Cl"); atomsCanConnect[4] = g_strdup("Br"); atomsCanConnect[5] = g_strdup("I"); minDistance = 1.50; /* in Agnstrom */ maxDistance = 3.15; /* in Agnstrom */ minAngle = 145.0; maxAngle = 215.0; } /******************************************************************/ void save_HBonds_properties() { gchar *hbondsfile; FILE *file; gint i; hbondsfile = g_strdup_printf("%s%shbonds",gabedit_directory(),G_DIR_SEPARATOR_S); file = FOpen(hbondsfile, "w"); if(!file) return; fprintf(file,"%f\n",minDistance); fprintf(file,"%f\n",maxDistance); fprintf(file,"%f\n",minAngle); fprintf(file,"%f\n",maxAngle); fprintf(file,"%d\n",nAtomsCanConnect); for(i=0;i= nAtomsCanConnect) return; if(!atomsCanConnect) return; if(nAtomsCanConnect == 1) { GtkWidget* win; win = Message(_("Sorry, You can not delete all atoms"),_("Warning"),TRUE); gtk_window_set_modal(GTK_WINDOW(win),TRUE); return; } for(j=k;j\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*******************************************************************************************************************************/ static GtkUIManager *create_menu(GtkWidget* win) { GtkActionGroup *actionGroup = NULL; GtkUIManager *manager = NULL; GError *error = NULL; manager = gtk_ui_manager_new (); g_signal_connect_swapped (win, "destroy", G_CALLBACK (g_object_unref), manager); actionGroup = gtk_action_group_new ("GabeditHBonds"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntries, numberOfGtkActionEntries, NULL); gtk_ui_manager_insert_action_group (manager, actionGroup, 0); gtk_window_add_accel_group (GTK_WINDOW (win), gtk_ui_manager_get_accel_group (manager)); if (!gtk_ui_manager_add_ui_from_string (manager, uiMenuInfo, -1, &error)) { g_message ("building menus failed: %s", error->message); g_error_free (error); } return manager; } /*******************************************************************************************************************************/ static void rafreshTreeView(GtkTreeView *treeView) { gint i; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(treeView); GtkTreeStore *store = GTK_TREE_STORE (model); gtk_tree_store_clear(store); model = GTK_TREE_MODEL (store); for(i=0;i0) { GtkTreePath *path; rowSelected = 0; path = gtk_tree_path_new_from_string ("0"); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeView)), path); gtk_tree_path_free(path); } } /*******************************************************************************************************************************/ static void event_dispatcher2(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; gint row = -1; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); row = atoi(gtk_tree_path_to_string(path)); gtk_tree_path_free(path); } } rowSelected = row; if(row<0) return; if (event->type == GDK_BUTTON_PRESS && ((GdkEventButton *) event)->button == 3) { GdkEventButton *bevent = (GdkEventButton *) event; GtkUIManager *manager = GTK_UI_MANAGER(user_data); show_menu_popup(manager, bevent->button, bevent->time); } } /********************************************************************************/ static GtkTreeView* addListOfAtoms(GtkWidget *vbox, GtkUIManager *manager) { GtkWidget *scr; gint i; gint widall=0; gint widths[]={10}; gint Factor=7; gint len = 1; GtkTreeStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeView *treeView; GtkTreeViewColumn *column; store = gtk_tree_store_new (1,G_TYPE_STRING); model = GTK_TREE_MODEL (store); for(i=0;i #include #include #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/GeomZmatrix.h" #include "../Geometry/InterfaceGeom.h" #include "GaussGlobal.h" /************************************************************************************************************/ static gint get_number_of_model_connections() { gint i; gint j; gint nc = 0; gint NC = NcentersXYZ; if(MethodeGeom == GEOM_IS_ZMAT) NC = NcentersZmat; for(i=0;iwindow= gtk_frame_new(NULL); HboxGeom = NULL; for(i=0;i<6;i++) EntryCS[i]=NULL; Frame = geominter->window; gtk_container_set_border_width(GTK_CONTAINER(Frame), 10); LabelOnglet = gtk_label_new(_("Molecular Specifications")); LabelMenu = gtk_label_new(_("Molecular Specifications")); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), Frame, LabelOnglet, LabelMenu); window1 = Frame; g_object_set_data(G_OBJECT (window1), "window1", window1); vbox =create_vbox(window1); hbox =create_hbox_false(vbox); hbox2 =create_hbox_false(vbox); NMethodes = 0; if(Methodes[1]!=NULL || Methodes[2]!=NULL ) { create_label_hbox(hbox,_("Charge of "),-1); create_combo_charge(hbox,0,_("Real system : ")); create_label_hbox(hbox2,_("2*Spin+1 of "),-1); create_combo_spin(hbox2,1,_("Real system : ")); NMethodes++; } else { create_label_hbox(hbox,_("Charge of "),-1); create_combo_charge(hbox,0,_("system : ")); create_label_hbox(hbox,_("2*Spin+1 of "),-1); create_combo_spin(hbox,1,_("system : ")); NMethodes++; } if(Methodes[1]!=NULL && Methodes[2]!=NULL ) { create_combo_charge(hbox,2,_("Intermediate system : ")); create_combo_spin(hbox2,3,_("Intermediate system : ")); NMethodes++; create_combo_charge(hbox,4,_("Model system : ")); create_combo_spin(hbox2,5,_("Model system : ")); NMethodes++; } else if(Methodes[1]!=NULL || Methodes[2]!=NULL ) { create_combo_charge(hbox,2,_("Model system : ")); create_combo_spin(hbox2,3,_("Model system : ")); NMethodes++; } if(!GeomFromCheck ) { create_hseparator(vbox); hbox =create_hbox_false(vbox); FrameType = create_frame(window1,hbox,_("TYPE")); combobox = create_geom(window1,FrameType); geominter->vbox=vbox; geominter->frametitle=g_strdup(_("GEOMETRY")); if(GeomXYZ != NULL && MethodeGeom == GEOM_IS_XYZ ) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); if(Geom != NULL && MethodeGeom == GEOM_IS_ZMAT) create_geom_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); } set_spin_of_electrons(); if(combobox) gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0); } GabeditSrc250/src/Gaussian/GInterfaceLink.h0000644000175100017510000000271413130665225021036 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GINTERFACELINK_H__ #define __GABEDIT_GINTERFACELINK_H__ void create_button_link(GtkWidget *w,GtkWidget *Wins); #endif /* __GABEDIT_GINTERFACELINK_H__ */ GabeditSrc250/src/Gaussian/Makefile0000644000175100017510000000072313130664665017505 0ustar allouchealloucheOBJECTS = GInterfaceBasis.o GInterfaceGeom.o GInterfaceLink.o GInterfaceMethodeBase.o GInterfaceRoute.o Gaussian.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/Gaussian/GInterfaceLink.c0000644000175100017510000001617613130665225021040 0ustar alloucheallouche/* GInterfaceLink.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "GaussGlobal.h" /*****************************************************************/ static void gene_one_entry2(GtkWidget *b,gpointer data) { GtkWidget *entry; G_CONST_RETURN gchar *entrytext; gchar *t; entry=(GtkWidget *)data; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); if(!StrLink) StrLink = g_strdup_printf("%s\n",entrytext); else { t = g_strdup(StrLink); StrLink = g_strdup_printf("%s%s\n",t,entrytext); g_free(t); } } /*****************************************************************/ static void gene_one_entry1(GtkWidget *b,gpointer data) { gchar *t; if(!StrLink) StrLink = g_strdup_printf("%s",(char*)data); else { t = g_strdup(StrLink); StrLink = g_strdup_printf("%s%s",t,(char*)data); g_free(t); } } /*****************************************************************/ static void c_one_entry (GtkWidget *bframe,gchar *titre,gchar *tlabel,gchar *mode,gchar *set,guint del) { GtkWidget *fp; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox1; GtkWidget *hbox2; GtkWidget *button; GtkWidget *label; GtkWidget *entry; GtkWidget *Wins = GTK_WIDGET(g_object_get_data (G_OBJECT (bframe), "Window")); fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(fp),TRUE); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_title(GTK_WINDOW(fp),titre); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Wins)); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); add_child(Wins,fp,gtk_widget_destroy,tlabel); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (titre); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox1 = create_hbox(vboxframe); label = gtk_label_new (tlabel); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox1), label, TRUE, FALSE, 0); entry = gtk_entry_new (); gtk_widget_show (entry); gtk_box_pack_start (GTK_BOX (hbox1), entry, FALSE, TRUE, 0); gtk_entry_set_text(GTK_ENTRY(entry),set); hbox2 = create_hbox(vboxall); gtk_widget_realize(fp); button = create_button(fp,_("Cancel")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(fp,_("OK")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(gene_one_entry1),(gpointer)mode); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(gene_one_entry2),(gpointer)entry); if (!strcmp((char *)titre,_("The checkpoint file")) ) { g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_show),GTK_OBJECT(CheckButtons[7])); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_show),GTK_OBJECT(CheckButtons[8])); } if(del) g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(bframe)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show_all(fp); } /*****************************************************************/ static void sorry(GtkWidget *bframe,gpointer data) { char *temp; temp=g_malloc(100); sprintf(temp,_("Sorry, the button of \"%s\" is not active"),(char*)data); Message(temp," Warning ",TRUE); gtk_widget_hide(bframe); g_free(temp); } /*****************************************************************/ static void Traite_Link_Option(GtkWidget *bframe,gpointer data) { if (!strcmp((char *)data,_("Dynamic memory")) ) c_one_entry(bframe,(char *)data,_("Memory size : "),"%Mem=","4MW",1); else if (!strcmp((char *)data,_("Read-Write file")) ) c_one_entry(bframe,(char *)data,_("File Name : "), "%RWF=","rwffile",1); else if (!strcmp((char *)data,_("2E derivative file")) ) c_one_entry(bframe,(char *)data,_("File Name : "), "%d2I=","d2intfile",1); else if (!strcmp((char *)data,_("The checkpoint file")) ) c_one_entry(bframe,(char *)data,_("File Name : "),"%Chk=","chkfile",1); else if (!strcmp((char *)data,_("2E integral file")) ) c_one_entry(bframe,(char *)data,_("File Name : "),"%Int=","intfile",1); else if (!strcmp((char *)data,"") ) sorry(bframe,data); else sorry(bframe,data); } /*****************************************************************/ void create_button_link(GtkWidget *w,GtkWidget *Wins) { GtkWidget* Table; GtkWidget* button; guint i; guint j; guint ColonneT=3; guint LigneT=2; char *LabelButton[3][2]={ {N_("Dynamic memory"), N_("Read-Write file"), }, {N_("The checkpoint file"), N_("2E derivative file"), } , {_("2E integral file"), "00" } }; StrLink = NULL; Table = gtk_table_new(LigneT,ColonneT,TRUE); gtk_container_add(GTK_CONTAINER(w),Table); for ( i = 0;i #include #include #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/GabeditTextEdit.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/AtomsProp.h" #include "GaussGlobal.h" #include "GInterfaceRoute.h" #include "GInterfaceGeom.h" #include "GInterfaceBasis.h" static GtkWidget *NoteBook; static GtkWidget *Wins=NULL; static gboolean AddMP2=FALSE; static gboolean AddConical=FALSE; GtkWidget *hboxb; static gint iinsert; static gboolean amber = FALSE; /*******************************************************************/ void DestroyWinsGauss(GtkWidget *win) { destroy(Wins,NULL); Wins = NULL; EntryCS[0] = 0; } /*******************************************************************/ static void to_cancel_win(GtkWidget* win,gpointer data) { Cancel_YesNo(win,data, destroy_children); } /*******************************************************************/ static void GetLink1() { gint nchar; gchar *t = NULL; gchar *t1 = NULL; gchar *t2 = NULL; gchar *DestOrig; gchar *DestStrLink; gchar *temp; gint n; nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); gabedit_text_set_point(GABEDIT_TEXT(text),nchar); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"--Link1--\n",-1); t1=gabedit_text_get_chars(text,0,-1); uppercase(t1); t= g_strdup("%Chk="); uppercase(t); DestOrig = strstr( t1,t); DestStrLink = NULL; if(StrLink != NULL) { t2= g_strdup(StrLink); uppercase(t2); DestStrLink = strstr( t2,t); } if(DestStrLink == NULL) { if(DestOrig == NULL) { gabedit_text_set_point(GABEDIT_TEXT(text),0); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"%Chk=checkfile\n",-1); nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); gabedit_text_set_point(GABEDIT_TEXT(text),nchar); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"%Chk=checkfile\n",-1); } else { temp = g_malloc(100); n = DestOrig - t1; g_free(t1); t1=gabedit_text_get_chars(text,0,-1); sscanf(t1+n,"%s",temp); temp = g_strdup_printf("%s\n",temp); nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); gabedit_text_set_point(GABEDIT_TEXT(text),nchar); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,temp,-1); g_free(temp); } } if(t) g_free(t); if(t1) g_free(t1); if(t2) g_free(t2); } /*******************************************************************/ static void GetInfoBasisT(gint i) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,BasisT[i].CenterName,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," 0\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,BasisT[i].BasisName,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\n*******\n",-1); } /*******************************************************************/ static void GetInfoBasisC(gint i) { gchar *temp; temp=g_strdup_printf(" %d 0\n",BasisC[i].Number); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,temp,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,BasisC[i].BasisName,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\n*******\n",-1); } /*******************************************************************/ static void GetInfoBasisLower() { gint i; gboolean chang=FALSE; for (i=0;iactive) return TRUE; else return FALSE; } /*******************************************************************/ static void GetInfoLink( ) { if(StrLink) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,StrLink,-1); g_free(StrLink); StrLink = NULL; } } /*******************************************************************/ static void GetInfoGene( ) { gint i; if(StrLink) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,StrLink,-1); g_free(StrLink); StrLink = NULL; } for (i=0;i<8;i++) { if(TestButtonActive(CheckButtons[i]) ) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\n#",-1); break; } } if(TestButtonActive(CheckButtons[0]) ) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," Gfinput IOP(6/7=3) ",-1); if(TestButtonActive(CheckButtons[1]) ) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," Pop=full ",-1); if(TestButtonActive(CheckButtons[5]) ) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," Density ",-1); if(TestButtonActive(CheckButtons[2]) ) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," Archive ",-1); else gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," Test ",-1); if(TestButtonActive(CheckButtons[3]) ) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," Nosymm ",-1); if(TestButtonActive(CheckButtons[6]) || TestButtonActive(CheckButtons[7]) ) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," Guess(",-1); if(TestButtonActive(CheckButtons[6])) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"Mix",-1); if(TestButtonActive(CheckButtons[7])) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,",Read",-1); }else { if(TestButtonActive(CheckButtons[7])) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"Read",-1); } if(TestButtonActive(CheckButtons[6]) || TestButtonActive(CheckButtons[7]) ) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,") ",-1); if(TestButtonActive(CheckButtons[8]) ) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," Geom=Check ",-1); GeomFromCheck = TRUE; } } /*******************************************************************/ static void GetInfoTitle( ) { gchar *temp; temp=gabedit_text_get_chars(TextTitle,0,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, temp,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); } /*******************************************************************/ static void GetInfoPFS( ) { gboolean okTimeDependent = FALSE; if( TtimeDependent!=NULL) if (!strcmp(Methodes[0],_("Density Functional Methods")) || !strcmp(Methodes[0],_("Hartree Fock")) || !strcmp(Methodes[0],_("Hybrid Functional Methods")) ) okTimeDependent = TRUE; if( (Tfreq!=NULL) || (Tscf!=NULL) || (Tpolar!=NULL) || (okTimeDependent) ) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\n# ",-1); if(Tfreq!=NULL) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,Tfreq,-1); g_free(Tfreq); Tfreq=NULL; } if(Tscf!=NULL) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,Tscf,-1); g_free(Tscf); Tscf=NULL; } if(Tpolar!=NULL) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,Tpolar,-1); g_free(Tpolar); Tpolar=NULL; } if(TtimeDependent!=NULL && okTimeDependent) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,TtimeDependent,-1); g_free(TtimeDependent); TtimeDependent=NULL; } } /*******************************************************************/ static gchar *get_info_basis(gint im) { gchar *temp; gchar **tmp; G_CONST_RETURN gchar *entrytext; gint nentry=0; gboolean Modify=FALSE; if(EntryBasis[0][im]!=NULL)nentry++; if(EntryBasis[1][im]!=NULL)nentry++; if( strcmp(Basis[im],"GEN") ) { tmp = g_strsplit(Basis[im],"G",2); temp = g_strdup(tmp[0]); } else temp = g_strdup(Basis[im]); if (strcmp(temp,Basis[im]) ) Modify=TRUE; if(EntryBasis[0][im]!=NULL) { entrytext = gtk_entry_get_text(GTK_ENTRY(EntryBasis[0][im])); if (strcmp(entrytext,_("No")) ) temp=g_strdup_printf("%s%s",temp,entrytext); } if (Modify) temp = g_strdup_printf("%sG",temp); if(EntryBasis[1][im]!=NULL) { entrytext = gtk_entry_get_text(GTK_ENTRY(EntryBasis[1][im])); if (strcmp(entrytext,_("No")) ) { if (strcmp(entrytext,_("Yes")) ) temp=g_strdup_printf("%s%s",temp,entrytext); else temp=g_strdup_printf("AUG-%s",temp); } } return temp; } /*******************************************************************/ static gchar *get_info_method(gint im) { gchar *temp; G_CONST_RETURN gchar *entrytext; gchar **tmp; gboolean Modify=FALSE; entrytext = gtk_entry_get_text(GTK_ENTRY(EntryMethods[0][im])); tmp = g_strsplit(entrytext,")",2); if(strstr(entrytext,"TDDFT")) temp=g_strdup_printf(" TD"); else temp=g_strdup(entrytext); if (strcmp(temp,tmp[0])) Modify=TRUE; if (!strcmp(Methodes[im],_("Density Functional Methods")) ) { entrytext = gtk_entry_get_text(GTK_ENTRY(EntryMethods[1][im])); temp=g_strdup_printf("%s%s",temp,entrytext); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryMethods[2][im])); if (!strcmp(entrytext,"LC-")) temp=g_strdup_printf("%s%s",entrytext,temp); } else if (!strcmp(Methodes[im],_("MP Methods")) ) { entrytext = gtk_entry_get_text(GTK_ENTRY(EntryMethods[1][im])); temp=g_strdup_printf("%s(%s",temp,entrytext); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryMethods[2][im])); if (strcmp(entrytext,_("default")) ) temp=g_strdup_printf("%s,%s",temp,entrytext); temp=g_strdup_printf("%s)",temp); } else if (!strcmp(Methodes[im],_("Excited States")) ) { entrytext = gtk_entry_get_text(GTK_ENTRY(EntryMethods[1][im])); temp=g_strdup_printf("%s(%s",temp,entrytext); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryMethods[2][im])); if (strcmp(entrytext,_("default")) ) temp=g_strdup_printf("%s,Nstates=%s",temp,entrytext); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryMethods[3][im])); if (strcmp(entrytext,_("default")) ) temp=g_strdup_printf("%s,Root=%s",temp,entrytext); temp=g_strdup_printf("%s)",temp); } else if (!strcmp(Methodes[im],_("CASSCF Method")) ) { temp=g_strdup("CASSCF"); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryMethods[0][im])); temp=g_strdup_printf("%s(%s",temp,entrytext); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryMethods[1][im])); temp=g_strdup_printf("%s,%s",temp,entrytext); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryMethods[2][im])); if (strcmp(entrytext,_("No")) ) AddMP2=TRUE; entrytext = gtk_entry_get_text(GTK_ENTRY(EntryMethods[3][im])); if (strcmp(entrytext,_("No")) ) temp=g_strdup_printf("%s,Spin",temp); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryMethods[4][im])); if (strcmp(entrytext,_("No")) ) AddConical=TRUE; entrytext = gtk_entry_get_text(GTK_ENTRY(EntryMethods[5][im])); if (strcmp(entrytext,_("default")) ) temp=g_strdup_printf("%s,Nroot=%s",temp,entrytext); temp=g_strdup_printf("%s)",temp); } else if (!strcmp(Methodes[im],_("CI Methods")) ) { temp=g_strdup(tmp[0]); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryMethods[1][im])); if(Modify) temp=g_strdup_printf("%s,%s",temp,entrytext); else temp=g_strdup_printf("%s(%s",temp,entrytext); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryMethods[2][im])); temp=g_strdup_printf("%s,Conver=%s",temp,entrytext); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryMethods[3][im])); temp=g_strdup_printf("%s,MaxCyc=%s",temp,entrytext); temp=g_strdup_printf("%s)",temp); } return temp; } /*******************************************************************/ static void AddWithBasis(gchar* method, gchar* basis) { if(strstr(method,"TD(")) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"B3LYP/",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,basis,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,method,-1); } else { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,method,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"/",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,basis,-1); } } /*******************************************************************/ static void GetInfoMB( ) { gboolean ONIOM=FALSE; gchar *temp; if ( Methodes[0]!=NULL ) { temp = get_info_method(0); if(!strcmp(temp,"AMBER")) amber = TRUE; if ( Methodes[1]!=NULL ) { temp = get_info_method(1); if(!strcmp(temp,"AMBER")) amber = TRUE; } if ( Methodes[2]!=NULL ) { temp = get_info_method(2); if(!strcmp(temp,"AMBER")) amber = TRUE; } } else { temp=g_strdup("HF"); Methodes[0]=g_strdup("HF"); } if ( (Methodes[1]!=NULL) ) ONIOM=TRUE; if ( (Methodes[2]!=NULL) ) ONIOM=TRUE; if ( ONIOM) { gabedit_text_insert (GABEDIT_TEXT(text),NULL,NULL,NULL,"ONIOM(",-1); } temp=get_info_method(0); if(strcmp(Methodes[0],_("Semi-Empirical Methods")) && strcmp(Methodes[0],_("Molecular Mechanics Methods"))) { if (Basis[0]!=NULL) AddWithBasis(temp, get_info_basis(0)); else gabedit_text_insert (GABEDIT_TEXT(text),NULL,NULL,NULL,temp,-1); } else gabedit_text_insert (GABEDIT_TEXT(text),NULL,NULL,NULL,temp,-1); if ( Methodes[1]!=NULL ) { temp=get_info_method(1); gabedit_text_insert (GABEDIT_TEXT(text),NULL,NULL,NULL,":",-1); if(strcmp(Methodes[1],_("Semi-Empirical Methods")) && strcmp(Methodes[1],_("Molecular Mechanics Methods"))) { if (Basis[1]!=NULL) AddWithBasis(temp, get_info_basis(1)); else gabedit_text_insert (GABEDIT_TEXT(text),NULL,NULL,NULL,temp,-1); } else gabedit_text_insert (GABEDIT_TEXT(text),NULL,NULL,NULL,temp,-1); } if ( Methodes[2]!=NULL ) { temp=get_info_method(2); gabedit_text_insert (GABEDIT_TEXT(text),NULL,NULL,NULL,":",-1); if(strcmp(Methodes[2],_("Semi-Empirical Methods")) && strcmp(Methodes[2],_("Molecular Mechanics Methods"))) { if (Basis[2]!=NULL) AddWithBasis(temp, get_info_basis(2)); else gabedit_text_insert (GABEDIT_TEXT(text),NULL,NULL,NULL,temp,-1); } else gabedit_text_insert (GABEDIT_TEXT(text),NULL,NULL,NULL,temp,-1); } if ( ONIOM) gabedit_text_insert (GABEDIT_TEXT(text),NULL,NULL,NULL,")",-1); } /*******************************************************************/ static void GetInfoType() { gchar *temp; G_CONST_RETURN gchar *entrytext; if(Types==NULL || !strcmp(Types,_("Single Point")) ) return; if(AddConical) { gabedit_text_insert (GABEDIT_TEXT(text),NULL,NULL,NULL," Opt=Conical ",-1); return; } entrytext = gtk_entry_get_text(GTK_ENTRY(EntryTypes[0])); if(strcmp(entrytext,_("default"))) temp=g_strdup_printf("Opt(%s",entrytext); else temp=g_strdup_printf("Opt("); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryTypes[1])); if( strcmp(entrytext,_("default")) ) temp=g_strdup_printf("%s,%s",temp,entrytext); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryTypes[2])); if( strcmp(entrytext,_("default")) ) temp=g_strdup_printf("%s,MaxCycle=%s",temp,entrytext); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryTypes[3])); if( strcmp(entrytext,_("default")) ) temp=g_strdup_printf("%s,StepSize=%s",temp,entrytext); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryTypes[4])); if( strcmp(entrytext,_("No")) ) temp=g_strdup_printf("%s,Saddle=%s",temp,entrytext); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryTypes[5])); if( strcmp(entrytext,_("No")) ) temp=g_strdup_printf("%s,TS, noeigentest",temp); temp=g_strdup_printf("%s) ",temp); if(strstr(temp,"Opt()")) temp=g_strdup_printf("Opt "); if(strstr(temp,"Opt(,")) temp[4]=' '; gabedit_text_insert (GABEDIT_TEXT(text),NULL,NULL,NULL,"\n# ",-1); gabedit_text_insert (GABEDIT_TEXT(text),NULL,NULL,NULL,temp,-1); } /*******************************************************************/ void SaveGauss( GtkWidget *widget, gpointer data ) { save_as_doc(); data_modify(FALSE); iedit=1; gabedit_text_set_editable(GABEDIT_TEXT(text), TRUE); } /*******************************************************************/ static void GetChargesAndMultiplicities( ) { G_CONST_RETURN gchar *entrytext; if(EntryCS[0]!=NULL) { entrytext = gtk_entry_get_text(GTK_ENTRY(EntryCS[0])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryCS[1])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); } if(EntryCS[2]!=NULL) { entrytext = gtk_entry_get_text(GTK_ENTRY(EntryCS[2])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryCS[3])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryCS[2])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryCS[3])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); } if(EntryCS[4]!=NULL) { entrytext = gtk_entry_get_text(GTK_ENTRY(EntryCS[4])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryCS[5])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryCS[4])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryCS[5])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryCS[4])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryCS[5])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); } gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\n",-1); } /*******************************************************************/ static void GetInfoZMatrix( ) { guint i; gchar *line; SAtomsProp prop; if(iframe==1) GetChargesAndMultiplicitiesFromMain( ); else GetChargesAndMultiplicities( ); if(GeomFromCheck) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\n",-1); return; } for(i=0;iNUMBER_ENTRY_0) line=g_strdup_printf("%s\t%s\t%s",line,Geom[i].NR,Geom[i].R); if(Geom[i].Nentry>NUMBER_ENTRY_R) line=g_strdup_printf("%s\t%s\t%s",line,Geom[i].NAngle,Geom[i].Angle); if(Geom[i].Nentry>NUMBER_ENTRY_ANGLE) line=g_strdup_printf("%s\t%s\t%s",line,Geom[i].NDihedral,Geom[i].Dihedral); if (strcmp(Geom[i].Layer," ") ) line=g_strdup_printf("%s 0\t %s\n",line,Geom[i].Layer); else line=g_strdup_printf("%s\n",line); prop = prop_atom_get(Geom[i].Symb); gabedit_text_insert (GABEDIT_TEXT(text), NULL,NULL, &prop.color,line,-1); } if(NVariables>0) for(i=0;i0 && !redundant) for(i=0;i0 && !redundant) for(i=0;i strstr( Destdiez, "\n") ) Enter = strstr( Destdiez, "\n"); nchar = Enter - Destdiez ; gabedit_text_set_point(GABEDIT_TEXT(text),Position); gabedit_text_forward_delete(GABEDIT_TEXT(text),nchar); if(Units == 0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"Units(Au,Deg)",-1); else gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"Units(Ang,Deg)",-1); } else { nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); Position = nchar; if(nchar != 0) { while(strlen(DestdiezOld)>0) { Destdiez = strstr( DestdiezOld, "#"); if(Destdiez != NULL) { DestdiezOld = Destdiez+1; Enter = strstr( Destdiez, "\n"); Position = Enter - Tompon+1 ; Destdiez = NULL; } else break; } } gabedit_text_set_point(GABEDIT_TEXT(text),Position); if(Units == 0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"# Units(Au,Deg)\n",-1); else gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"# Units(Ang,Deg)\n",-1); } nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); gabedit_text_set_point(GABEDIT_TEXT(text),nchar); g_free(t); g_free(t1); g_free(Tompon); } /*******************************************************************/ void GetInfoAll( GtkWidget *widget, gpointer data ) { printf("iframe = %d\n",iframe); if(iframe==1) { if(iinsert != 0) { reset_name_files(); ClearText(text); } else { GetLink1(); } data_modify(TRUE); GetInfoLink(); if(TestButtonActive(CheckButtons[4]) ) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"#P ",-1); else gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"# ",-1); GetInfoMB(); GetInfoType(); GetInfoPFS(); GetInfoGene(); if(AddMP2) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," MP2 ",-1); GetInfoTitle(); } else if(iframe==2) { GetInfoUnits(); if( MethodeGeom == GEOM_IS_ZMAT) GetInfoZMatrix(); else if( MethodeGeom == GEOM_IS_XYZ) GetInfoXYZ(); GeomFromCheck = FALSE; } else if(iframe==3) { GetInfoBasis(); } } /*******************************************************************/ static void putInfoAll( GtkWidget *Wins, gpointer data ) { if(iinsert != 0) { reset_name_files(); ClearText(text); } else { GetLink1(); } data_modify(TRUE); GetInfoLink(); if(TestButtonActive(CheckButtons[4]) ) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"#P ",-1); else gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"# ",-1); GetInfoMB(); GetInfoType(); GetInfoPFS(); GetInfoGene(); if(AddMP2) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," MP2 ",-1); GetInfoTitle(); GetInfoUnits(); if( MethodeGeom == GEOM_IS_ZMAT) GetInfoZMatrix(); else if( MethodeGeom == GEOM_IS_XYZ) GetInfoXYZ(); GeomFromCheck = FALSE; if(Wins) DestroyWinsGauss(Wins); } /*******************************************************************/ void insert_gaussian(gint itype) { GtkWidget *button; gboolean OK; gint i; gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0); if(Wins) DestroyWinsGauss(Wins); iframe=itype; iinsert=0; fileopen.command=g_strdup(NameCommandGaussian); Wins= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Wins),GTK_WIN_POS_NONE); gtk_window_set_transient_for(GTK_WINDOW(Wins),GTK_WINDOW(Fenetre)); gtk_window_set_title(>K_DIALOG(Wins)->window,_("Gaussian input")); init_child(Wins,DestroyWinsGauss,_(" Gauss input ")); g_signal_connect(G_OBJECT(Wins),"delete_event",(GCallback)destroy_children,NULL); NoteBook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX (GTK_DIALOG(Wins)->vbox), NoteBook,FALSE, FALSE, 0); switch(iframe) { case 2: OK=TRUE; i=iframe; if(GeomIsOpen && TypeGeomOpen !=0 ) { if(WindowGeom) gtk_widget_destroy(WindowGeom); } WindowGeom = Wins; GAjoutePageGeom(NoteBook); iframe = i; TypeGeomOpen = 2; break; case 3: OK=TRUE; GAjoutePageBasis(NoteBook); if(TypeGeomOpen == 2) { geom_is_not_open(); TypeGeomOpen = 0; WindowGeom = NULL; } break; } iedit=1; gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(Wins)->action_area), FALSE); gtk_widget_realize(Wins); button = create_button(Wins,"Cancel"); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(to_cancel_win),GTK_OBJECT(Wins)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show (button); button = create_button(Wins,"OK"); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)GetInfoAll,NULL); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)data_modify,NULL); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(destroy_children),GTK_OBJECT(Wins)); gtk_widget_show_all(Wins); } /*******************************************************************/ void gauss(gint ioption) { GtkWidget *button; if( (MethodeGeom == GEOM_IS_XYZ && NcentersXYZ<1) || (MethodeGeom == GEOM_IS_ZMAT && NcentersZmat<1) || (MethodeGeom != GEOM_IS_XYZ && MethodeGeom != GEOM_IS_ZMAT) ) { Message( _( "You must initially define your geometry.\n\n" "From the principal Menu select : Geometry/Draw\n" "and draw (or read) your molecule."), _("Error"),TRUE); return; } if(Wins) DestroyWinsGauss(Wins); fileopen.command=g_strdup(NameCommandGaussian); iframe=1; AddMP2=FALSE; AddConical=FALSE; if(!ioption) iinsert = 0; else iinsert = 1; gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0); Wins= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Wins),GTK_WIN_POS_NONE); gtk_window_set_transient_for(GTK_WINDOW(Wins),GTK_WINDOW(Fenetre)); gtk_window_set_title(>K_DIALOG(Wins)->window,_("Gaussian input")); init_child(Wins,DestroyWinsGauss,_(" Gauss input ")); g_signal_connect(G_OBJECT(Wins),"delete_event",(GCallback)destroy_children,NULL); NoteBook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX (GTK_DIALOG(Wins)->vbox), NoteBook,TRUE, TRUE, 0); GAjoutePageRouteMain(NoteBook,Wins); GAjoutePageRouteOptions(NoteBook,Wins); gtk_widget_realize(Wins); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(Wins)->action_area), TRUE); button = create_button(Wins,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(G_OBJECT(button),"clicked",G_CALLBACK(to_cancel_win),GTK_OBJECT(Wins)); gtk_widget_show (button); button = create_button(Wins,_("OK")); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)putInfoAll,NULL); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, TRUE, TRUE, 0); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); gtk_widget_show_all(Wins); if(iinsert != 0) { gtk_widget_hide (CheckButtons[7]); gtk_widget_hide (CheckButtons[8]); } else { GTK_TOGGLE_BUTTON (CheckButtons[7])->active=TRUE; GTK_TOGGLE_BUTTON (CheckButtons[8])->active=TRUE; } GeomFromCheck = FALSE; } GabeditSrc250/src/Gaussian/GInterfaceMethodeBase.h0000644000175100017510000000272113130665225022317 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GINTERFACEMETHODEBASE_H__ #define __GABEDIT_GINTERFACEMETHODEBASE_H__ void create_notebook_MB(GtkWidget *); #endif /* __GABEDIT_GINTERFACEMETHODEBASE_H__ */ GabeditSrc250/src/Gaussian/GInterfaceRoute.c0000644000175100017510000011272013130665225021231 0ustar alloucheallouche/* GInterfaceRoute.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/InterfaceGeom.h" #include "GInterfaceLink.h" #include "GInterfaceMethodeBase.h" #include "GaussGlobal.h" #include "GInterfaceGeom.h" static GtkWidget *EntryChargeSpin[6]; /*******************************************************************/ void GetChargesAndMultiplicitiesFromMain( ) { G_CONST_RETURN gchar *entrytext; if(EntryChargeSpin[0]!=NULL) { entrytext = gtk_entry_get_text(GTK_ENTRY(EntryChargeSpin[0])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryChargeSpin[1])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); } if(EntryChargeSpin[2]!=NULL) { entrytext = gtk_entry_get_text(GTK_ENTRY(EntryChargeSpin[2])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryChargeSpin[3])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryChargeSpin[2])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryChargeSpin[3])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); } if(EntryChargeSpin[4]!=NULL) { entrytext = gtk_entry_get_text(GTK_ENTRY(EntryChargeSpin[4])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryChargeSpin[5])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryChargeSpin[4])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryChargeSpin[5])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryChargeSpin[4])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(EntryChargeSpin[5])); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL," \t",-1); } gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\n",-1); } /************************************************************************************************************/ static gint get_number_of_model_connections() { gint i; gint j; gint nc = 0; gint NC = NcentersXYZ; if(MethodeGeom == GEOM_IS_ZMAT) NC = NcentersZmat; for(i=0;iactive) { if(Tpolar == NULL ) Tpolar=g_malloc(50*sizeof(gchar)); sprintf(Tpolar," polar"); if(GTK_IS_WIDGET(buttonOptions)) gtk_widget_set_sensitive(buttonOptions,TRUE); } else { if(Tpolar) g_free(Tpolar); Tpolar = NULL; if(GTK_IS_WIDGET(buttonOptions)) gtk_widget_set_sensitive(buttonOptions,FALSE); } } /*****************************************************************************************/ static void gene_polar(GtkWidget *b,gpointer data) { GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext; guint ipar; ipar=0; if(Tpolar == NULL ) Tpolar=g_malloc(50*sizeof(gchar)); sprintf(Tpolar," polar"); entryall=(GtkWidget **)data; entry=entryall[0]; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); if (strcmp(entrytext,_("default")) ) { ipar=1; sprintf(Tpolar+strlen(Tpolar),"(%s",entrytext); } entry=entryall[1]; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); if (strcmp(entrytext,_("default")) ) { if(ipar) sprintf(Tpolar+strlen(Tpolar),",Step=%s",entrytext); else { ipar=1; sprintf(Tpolar+strlen(Tpolar),"(Step=%s",entrytext); } } if(ipar) strcat(Tpolar,") "); } /*****************************************************************************************/ static void create_polar_option (GtkWidget* Wins) { GtkWidget *fp; GtkWidget *frame; GtkWidget **entry; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox1; GtkWidget *hbox2; GtkWidget *button; int nlist = 1; gchar *list[4]; entry=g_malloc(2*sizeof(GtkWidget*)); fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(fp),TRUE); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_title(GTK_WINDOW(fp),_("Options for dipole polarizabilities")); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Wins)); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); add_child(Wins,fp,gtk_widget_destroy,_(" Dipole polar. ")); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (_("Dipole polarizabilities")); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); nlist=4; list[0]=g_strdup(_("default")); list[1]=g_strdup("Analytic"); list[2]=g_strdup("Numerical"); list[3]=g_strdup("EnOnly"); hbox1 = create_hbox(vboxframe); entry[0]= create_combo_box_entry_liste(fp,hbox1,_("Type of second derivatives : "),list,nlist); nlist=4; list[0]=g_strdup(_("default")); list[1]=g_strdup("1"); list[2]=g_strdup("10"); list[3]=g_strdup("100"); hbox1 = create_hbox(vboxframe); entry[1]= create_combo_box_entry_liste(fp,hbox1,_("Step size in the electric field :"),list,nlist); hbox2 = create_hbox(vboxall); gtk_widget_realize(fp); button = create_button(fp,_("Cancel")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(fp,_("OK")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(gene_polar),(gpointer)entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show_all(fp); } /*****************************************************************************************/ static void gene_scf(GtkWidget *b,gpointer data) { GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext; guint ipar; ipar=0; if(Tscf == NULL ) Tscf=g_malloc(50*sizeof(gchar)); sprintf(Tscf," SCF"); entryall=(GtkWidget **)data; entry=entryall[0]; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); if (strcmp(entrytext,_("default")) ) { ipar=1; sprintf(Tscf+strlen(Tscf),"(%s",entrytext); } entry=entryall[1]; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); if (strcmp(entrytext,_("default")) ) { if(ipar) sprintf(Tscf+strlen(Tscf),",Vshift=%s",entrytext); else { ipar=1; sprintf(Tscf+strlen(Tscf),"(Vshift=%s",entrytext); } } entry=entryall[2]; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); if (strcmp(entrytext,_("default")) ) { if(ipar) sprintf(Tscf+strlen(Tscf),",MaxCycle=%s",entrytext); else { ipar=1; sprintf(Tscf+strlen(Tscf),"(MaxCycle=%s",entrytext); } } entry=entryall[3]; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); if (strcmp(entrytext,_("default")) ) { if(ipar) sprintf(Tscf+strlen(Tscf),",MaxRot=%s",entrytext); else { ipar=1; sprintf(Tscf+strlen(Tscf),"(MaxRot=%s",entrytext); } } entry=entryall[4]; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); if (strcmp(entrytext,_("default")) ) { if(ipar) sprintf(Tscf+strlen(Tscf),",Conver=%s",entrytext); else { ipar=1; sprintf(Tscf+strlen(Tscf),"(Conver=%s",entrytext); } } if(ipar) strcat(Tscf,") "); else { g_free(Tscf); Tscf = (char *)NULL; } } /*****************************************************************************************/ static void create_scf_option (GtkWidget* Wins) { GtkWidget *fp; GtkWidget *frame; GtkWidget **entry; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox1; GtkWidget *hbox2; GtkWidget *button; int nlist = 1; gchar *list[10]; entry=g_malloc(5*sizeof(GtkWidget*)); fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(fp),TRUE); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_title(GTK_WINDOW(fp),_("Controls of the SCF procedure")); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Wins)); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); add_child(Wins,fp,gtk_widget_destroy,_(" Dipole polar. ")); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (_("SCF procedure")); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox1 = create_hbox(vboxframe); list[0]=g_strdup(""); nlist=9; list[0]=g_strdup(_("default")); list[1]=g_strdup("Direct"); list[2]=g_strdup("InCore"); list[3]=g_strdup("QC"); list[4]=g_strdup("DIIS"); list[5]=g_strdup("SD"); list[6]=g_strdup("SSD"); list[7]=g_strdup("DM"); list[8]=g_strdup("Conventional"); entry[0]= create_combo_box_entry_liste(fp,hbox1,_("Algorithm : "),list,nlist); nlist=3; list[0]=g_strdup(_("default")); list[1]=g_strdup("100"); list[2]=g_strdup("200"); hbox1 = create_hbox(vboxframe); entry[1]= create_combo_box_entry_liste(fp,hbox1,_("Shift orbital energies : "),list,nlist); nlist=3; list[0]=g_strdup(_("default")); list[1]=g_strdup("64"); list[2]=g_strdup("512"); hbox1 = create_hbox(vboxframe); entry[2]= create_combo_box_entry_liste(fp,hbox1,_("Maximum number of SCF cycles : "),list,nlist); nlist=4; list[0]=g_strdup(_("default")); list[1]=g_strdup("2"); list[2]=g_strdup("3"); list[3]=g_strdup("4"); hbox1 = create_hbox(vboxframe); entry[3]= create_combo_box_entry_liste(fp,hbox1,_("Maximum rotation gradient :"),list,nlist); nlist=5; list[0]=g_strdup(_("default")); list[1]=g_strdup("6"); list[2]=g_strdup("7"); list[3]=g_strdup("8"); list[4]=g_strdup("9"); hbox1 = create_hbox(vboxframe); entry[4]= create_combo_box_entry_liste(fp,hbox1,_("Convergence criterion :"),list,nlist); hbox2 = create_hbox(vboxall); gtk_widget_realize(fp); button = create_button(fp,_("Cancel")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(fp,_("OK")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gene_scf),(gpointer)entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show_all(fp); } /*****************************************************************************************/ static void freq_activate(GtkWidget *button,gpointer data) { GtkWidget* buttonOptions =(GtkWidget*)data; if (GTK_TOGGLE_BUTTON (button)->active) { if(Tfreq == NULL ) Tfreq=g_malloc(50*sizeof(gchar)); sprintf(Tfreq," freq"); if(GTK_IS_WIDGET(buttonOptions)) gtk_widget_set_sensitive(buttonOptions,TRUE); } else { if(Tfreq) g_free(Tfreq); Tfreq = NULL; if(GTK_IS_WIDGET(buttonOptions)) gtk_widget_set_sensitive(buttonOptions,FALSE); } } /*****************************************************************************************/ static void gene_freq(GtkWidget *b,gpointer data) { GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext; guint ipar; ipar=0; if(Tfreq == NULL ) Tfreq=g_malloc(50*sizeof(gchar)); sprintf(Tfreq," freq"); entryall=(GtkWidget **)data; entry=entryall[0]; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); if (!strcmp(entrytext,_("Yes")) ) { ipar=1; strcat(Tfreq,"(VCD"); } entry=entryall[1]; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); if (!strcmp(entrytext,_("Yes")) ) { if(ipar) strcat(Tfreq,",Raman"); else { ipar=1; strcat(Tfreq,"(Raman"); } } entry=entryall[2]; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); if (strcmp(entrytext,_("default")) ) { if(ipar) sprintf(Tfreq+strlen(Tfreq),",%s",entrytext); else { ipar=1; sprintf(Tfreq+strlen(Tfreq),"(%s",entrytext); } } entry=entryall[3]; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); if (strcmp(entrytext,_("default")) ) { if(ipar) sprintf(Tfreq+strlen(Tfreq),",Step=%s",entrytext); else { ipar=1; sprintf(Tfreq+strlen(Tfreq),"(Step=%s",entrytext); } } if(ipar) strcat(Tfreq,") "); } /*****************************************************************************************/ static void create_freq_option ( GtkWidget *Wins) { GtkWidget *fp; GtkWidget *frame; GtkWidget **entry; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox1; GtkWidget *hbox2; GtkWidget *button; int nlist = 1; gchar *list[4]; entry=g_malloc(4*sizeof(GtkWidget*)); fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(fp),TRUE); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_title(GTK_WINDOW(fp),_("Compute frequencies")); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Wins)); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); add_child(Wins,fp,gtk_widget_destroy,_(" Constants force ")); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (_("Force constants")); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox1 = create_hbox(vboxframe); list[0]=g_strdup(""); nlist=2; list[0]=g_strdup(_("No")); list[1]=g_strdup(_("Yes")); entry[0]= create_combo_box_entry_liste(fp,hbox1,_("Compute the vibrational circular dichroism ? : "),list,nlist); nlist=2; list[0]=g_strdup(_("No")); list[1]=g_strdup(_("Yes")); hbox1 = create_hbox(vboxframe); entry[1]= create_combo_box_entry_liste(fp,hbox1,_("Compute Raman intensities ? : "),list,nlist); nlist=4; list[0]=g_strdup(_("default")); list[1]=g_strdup("Analytic"); list[2]=g_strdup("Numerical"); list[3]=g_strdup("EnOnly"); hbox1 = create_hbox(vboxframe); entry[2]= create_combo_box_entry_liste(fp,hbox1,_("Type of second derivatives : "),list,nlist); nlist=4; list[0]=g_strdup(_("default")); list[1]=g_strdup("1"); list[2]=g_strdup("10"); list[3]=g_strdup("100"); hbox1 = create_hbox(vboxframe); entry[3]= create_combo_box_entry_liste(fp,hbox1,_("Step-size for numerical differentiation :"),list,nlist); hbox2 = create_hbox(vboxall); gtk_widget_realize(fp); button = create_button(fp,_("Cancel")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(fp,_("OK")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(gene_freq),(gpointer)entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show_all(fp); } /*****************************************************************************************/ void traite_button_general (GtkWidget *button, gpointer data) { GtkWidget *Wins = GTK_WIDGET(g_object_get_data (G_OBJECT (button), "Window")); if (!strcmp((char *)data,_("Compute frequencies")) ) create_freq_option(Wins); else if (!strcmp((char *)data,_(" Controls the SCF procedure" )) ) create_scf_option(Wins); else if (!strcmp((char *)data,_("Compute the dipole polarizabilities" )) ) create_polar_option(Wins); } /*****************************************************************************************/ void connect_button(GtkWidget *Wins,GtkWidget *button,gchar *t) { g_object_set_data(G_OBJECT (button), "Window", Wins); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(traite_button_general),(gpointer)t); } /*****************************************************************************************/ void create_liste_general(GtkWidget*Wins,GtkWidget*win,GtkWidget *frame) { GtkWidget *vbox; GtkWidget *hbox; GtkWidget *hseparator; GtkWidget *checkbutton; gchar *t; GtkWidget *table; gint i; gint j; vbox =create_vbox(frame); hseparator = create_hseparator(vbox); table = gtk_table_new(8,2,FALSE); gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); /* polarisability */ { GtkWidget *buttonCheck; GtkWidget *buttonOption; i = 0; t=g_strdup(_("Compute the dipole polarizabilities")); buttonCheck = gtk_check_button_new_with_label (t); j = 0; gtk_table_attach(GTK_TABLE(table),buttonCheck,j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); gtk_widget_show (buttonCheck); buttonOption = gtk_button_new_with_label (_("Options")); j = 1; gtk_table_attach(GTK_TABLE(table),buttonOption,j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); gtk_widget_show (buttonOption); if(GTK_IS_WIDGET(buttonOption)) gtk_widget_set_sensitive(buttonOption,FALSE); connect_button(Wins,buttonOption,t); g_signal_connect(G_OBJECT(buttonCheck), "clicked",G_CALLBACK(polar_activate),(gpointer)buttonOption); hseparator = gtk_hseparator_new (); i++; gtk_table_attach(GTK_TABLE(table),hseparator,0,0+2,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); } /* force constants */ { GtkWidget *buttonCheck; GtkWidget *buttonOption; i++; t=g_strdup(_("Compute frequencies")); buttonCheck = gtk_check_button_new_with_label (t); j = 0; gtk_table_attach(GTK_TABLE(table),buttonCheck,j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); gtk_widget_show (buttonCheck); buttonOption = gtk_button_new_with_label (_("Options")); j = 1; gtk_table_attach(GTK_TABLE(table),buttonOption,j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); gtk_widget_show (buttonOption); if(GTK_IS_WIDGET(buttonOption)) gtk_widget_set_sensitive(buttonOption,FALSE); connect_button(Wins,buttonOption,t); g_signal_connect(G_OBJECT(buttonCheck), "clicked",G_CALLBACK(freq_activate),(gpointer)buttonOption); hseparator = gtk_hseparator_new (); i++; gtk_table_attach(GTK_TABLE(table),hseparator,0,0+2,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); } /* scf procedure */ { GtkWidget *label; GtkWidget *buttonOption; GtkWidget *hbox = gtk_hbox_new(0,FALSE); i++; t=g_strdup(_(" Controls the SCF procedure")); label = gtk_label_new (t); gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); gtk_widget_show (hbox); j = 0; gtk_table_attach(GTK_TABLE(table),hbox,j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); buttonOption = gtk_button_new_with_label (_("Go")); j = 1; gtk_table_attach(GTK_TABLE(table),buttonOption,j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); gtk_widget_show (buttonOption); if(GTK_IS_WIDGET(buttonOption)) gtk_widget_set_sensitive(buttonOption,TRUE); connect_button(Wins,buttonOption,t); hseparator = gtk_hseparator_new (); i++; gtk_table_attach(GTK_TABLE(table),hseparator,0,0+2,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); } hbox =create_hbox(vbox); checkbutton = gtk_check_button_new_with_label (_("Extra print keys for gabedit")); CheckButtons[0]=checkbutton; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton), TRUE); gtk_widget_show (checkbutton); gtk_box_pack_start (GTK_BOX (hbox), checkbutton, TRUE, TRUE, 0); checkbutton = gtk_check_button_new_with_label (_("Full population analysis")); CheckButtons[1]=checkbutton; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton), TRUE); gtk_widget_show (checkbutton); gtk_box_pack_start (GTK_BOX (hbox), checkbutton, TRUE, TRUE, 0); hbox =create_hbox(vbox); checkbutton = gtk_check_button_new_with_label (_("Archive")); CheckButtons[2]=checkbutton; gtk_widget_show (checkbutton); gtk_box_pack_start (GTK_BOX (hbox), checkbutton, TRUE, TRUE, 0); checkbutton = gtk_check_button_new_with_label (_("Ignore Symmetry")); CheckButtons[3]=checkbutton; gtk_widget_show (checkbutton); gtk_box_pack_start (GTK_BOX (hbox), checkbutton, TRUE, TRUE, 0); hbox =create_hbox(vbox); checkbutton = gtk_check_button_new_with_label (_("Addtional print")); CheckButtons[4]=checkbutton; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton), TRUE); gtk_widget_show (checkbutton); gtk_box_pack_start (GTK_BOX (hbox), checkbutton, TRUE, TRUE, 0); checkbutton = gtk_check_button_new_with_label (_("Density")); CheckButtons[5]=checkbutton; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton), TRUE); gtk_widget_show (checkbutton); gtk_box_pack_start (GTK_BOX (hbox), checkbutton, TRUE, TRUE, 0); checkbutton = gtk_check_button_new_with_label (_("Mix HOMO & LUMO in initial guess")); CheckButtons[6]=checkbutton; gtk_widget_show (checkbutton); gtk_box_pack_start (GTK_BOX (vbox), checkbutton, FALSE, FALSE, 0); checkbutton = gtk_check_button_new_with_label (_("Read initial Guess from checkpoint")); CheckButtons[7]=checkbutton; gtk_widget_show (checkbutton); gtk_box_pack_start (GTK_BOX (vbox), checkbutton, FALSE, FALSE, 0); checkbutton = gtk_check_button_new_with_label (_("Read geometry from checkpoint")); CheckButtons[8]=checkbutton; gtk_widget_show (checkbutton); gtk_box_pack_start (GTK_BOX (vbox), checkbutton, FALSE, FALSE, 0); hseparator = create_hseparator(vbox); } /*****************************************************************************************/ void c_opt_combo() { gchar *liste[9]; int nliste = 0; nliste=4; liste[0]=g_strdup(_("default")); liste[1]=g_strdup("Redundant"); liste[2]=g_strdup("Z-matrix"); liste[3]=g_strdup("Cartesian"); HboxT[0] = create_hbox(VboxT); EntryTypes[0]= create_combo_box_entry_liste(FrameT,HboxT[0],_(" Coordinate system options :"),liste,nliste); nliste=4; liste[0]=g_strdup(_("default")); liste[1]=g_strdup("Tight"); liste[2]=g_strdup("VeryTight"); liste[3]=g_strdup("Loose"); HboxT[1] = create_hbox(VboxT); EntryTypes[1]= create_combo_box_entry_liste(FrameT,HboxT[1],_(" Convergence criteries :"),liste,nliste); nliste=5; liste[0]=g_strdup(_("default")); liste[1]=g_strdup("20"); liste[2]=g_strdup("10"); liste[3]=g_strdup("30"); liste[4]=g_strdup("40"); HboxT[2] = create_hbox(VboxT); EntryTypes[2]= create_combo_box_entry_liste(FrameT,HboxT[2],_(" MaxCycle :"),liste,nliste); nliste=4; liste[0]=g_strdup(_("default")); liste[1]=g_strdup("20"); liste[2]=g_strdup("30"); liste[3]=g_strdup("40"); HboxT[3] = create_hbox(VboxT); EntryTypes[3]= create_combo_box_entry_liste(FrameT,HboxT[3],_(" StepSize :"),liste,nliste); nliste=4; liste[0]=g_strdup(_("No")); liste[1]=g_strdup("1"); liste[2]=g_strdup("2"); liste[3]=g_strdup("3"); HboxT[4] = create_hbox(VboxT); EntryTypes[4]= create_combo_box_entry_liste(FrameT,HboxT[4],_(" Saddle point of order :"),liste,nliste); nliste=2; liste[0]=g_strdup(_("No")); liste[1]=g_strdup(_("Yes")); HboxT[5] = create_hbox(VboxT); EntryTypes[5]= create_combo_box_entry_liste(FrameT,HboxT[5],_(" optimization a transition :"),liste,nliste); } /********************************************************************************************************/ static void traite_types (GtkComboBox *combobox, gpointer d) { guint i; GtkTreeIter iter; gchar* data = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } if(Types) g_free(Types); Types = NULL; if (data) Types = g_strdup(data); for (i=0;i #include #include #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/GeomGlobal.h" #include "GaussGlobal.h" #include "GInterfaceBasis.h" #define NC 3 #define NHboxBasis 3 static gchar selectedRowForCenter[100]="-1"; static GtkWidget *listC; static gchar selectedRowForType[100]="-1"; static GtkWidget *listT; static GtkWidget *HboxBasis[NHboxBasis]; static GtkWidget *VboxBasis; static GtkWidget *FrameBasis; static GtkWidget *EntryB[NHboxBasis]; static gchar *BasisName; static void DialogueEditT(GtkWidget *w,gpointer data); static void DialogueEditC(GtkWidget *w,gpointer data); /*************************************************************************************************/ static void selectRow(GtkWidget* list, gint row) { GtkTreePath *path; gchar* tmp = g_strdup_printf("%d",row); path = gtk_tree_path_new_from_string (tmp); g_free(tmp); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (list)), path); gtk_tree_path_free(path); } /*************************************************************************************************/ static gchar *get_info_basis() { gchar *temp; gchar **tmp; G_CONST_RETURN gchar *entrytext; gint nentry=0; gboolean Modify=FALSE; if(EntryB[0]!=NULL)nentry++; if(EntryB[1]!=NULL)nentry++; tmp = g_strsplit(BasisName,"G",2); temp = g_strdup(tmp[0]); if (strcmp(temp,BasisName) ) Modify=TRUE; if(EntryB[0]!=NULL) { entrytext = gtk_entry_get_text(GTK_ENTRY(EntryB[0])); if (strcmp(entrytext,_("No")) ) temp=g_strdup_printf("%s%s",temp,entrytext); } if (Modify) temp = g_strdup_printf("%sG",temp); if(EntryB[1]!=NULL) { entrytext = gtk_entry_get_text(GTK_ENTRY(EntryB[1])); if (strcmp(entrytext,_("No")) ) { if (strcmp(entrytext,_("Yes")) ) temp=g_strdup_printf("%s%s",temp,entrytext); else temp=g_strdup_printf("AUG-%s",temp); } } return temp; } /*************************************************************************************************/ static void c_basis_presents(gchar *ListAtoms) { GtkWidget *label; gchar *tlabel; gchar *lwhite; gchar *letoile; tlabel = g_malloc(1000); lwhite = g_malloc(100); letoile = g_malloc(100); sprintf(lwhite,"\n"); sprintf(letoile,"*******************************************************\n"); sprintf(tlabel,_("%s%sThis basis is present for %s atoms\n%s") ,lwhite,letoile,ListAtoms,letoile); HboxBasis[2] = create_hbox(VboxBasis); label = gtk_label_new (tlabel); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (HboxBasis[2]), label, TRUE, TRUE, 2); g_free(tlabel); g_free(lwhite); g_free(letoile); } /*************************************************************************************************/ static void c_polarization(guint nliste) { gchar *liste[20]; liste[0]=g_strdup(_("No")); liste[1]=g_strdup("*"); liste[2]=g_strdup("(d)"); liste[3]=g_strdup("**"); liste[4]=g_strdup("(d,p)"); liste[5]=g_strdup("(d,pd)"); liste[6]=g_strdup("(d,2pd)"); liste[7]=g_strdup("(d,3pd)"); liste[8]=g_strdup("(df,p)"); liste[9]=g_strdup("(df,pd)"); liste[10]=g_strdup("(df,2pd)"); liste[11]=g_strdup("(df,3pd)"); liste[12]=g_strdup("(2df,p)"); liste[13]=g_strdup("(2df,pd)"); liste[14]=g_strdup("(2df,2pd)"); liste[15]=g_strdup("(2df,3pd)"); liste[16]=g_strdup("(3df,p)"); liste[17]=g_strdup("(3df,pd)"); liste[18]=g_strdup("(3df,2pd)"); liste[19]=g_strdup("(3df,3pd)"); HboxBasis[1] = create_hbox(VboxBasis); EntryB[1]= create_combo_box_entry_liste(FrameBasis,HboxBasis[1],_(" Polarization function :"),liste,nliste); } /*************************************************************************************************/ static void c_diffuse_pp(guint nliste) { gchar *liste[3]; liste[0]=g_strdup(_("No")); liste[1]=g_strdup("+"); liste[2]=g_strdup("++"); HboxBasis[0] = create_hbox(VboxBasis); EntryB[0]= create_combo_box_entry_liste(FrameBasis,HboxBasis[0],_(" Diffuse function :"),liste,nliste); } /*************************************************************************************************/ static void c_diffuse_aug() { gchar *liste[2]; int nliste ; nliste=2; liste[0]=g_strdup(_("No")); liste[1]=g_strdup(_("Yes")); HboxBasis[1] = create_hbox(VboxBasis); EntryB[1]= create_combo_box_entry_liste(FrameBasis,HboxBasis[1],_(" Diffuse function :"),liste,nliste); } /********************************************************************************************************/ static void traite_basis (GtkComboBox *combobox, gpointer d) { guint i; GtkTreeIter iter; gchar* data = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } if(BasisName) g_free(BasisName); BasisName = NULL; if ( strcmp((char *)data,_("None(for DUMMY Center)")) ) BasisName =g_strdup((char *)data); else BasisName =g_strdup("Noselect"); for (i=0;i0) { NSymbTypes=1; BasisT=g_malloc(sizeof(BasisType)); BasisT[NSymbTypes-1].CenterName = g_strdup(BasisC[0].CenterName); BasisT[NSymbTypes-1].BasisName =g_strdup(BasisC[0].BasisName); BasisT[NSymbTypes-1].Layer =g_strdup(BasisC[0].Layer); } else return; for(i=1;ivbox,_("Title")); for (i=0;iaction_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); Bouton = create_button(Dialogue,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)EditBasisC, NULL); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); gtk_widget_show_all(Dialogue); } /*************************************************************************************************/ static void eventDispatcherType(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; GtkTreeIter iter; GtkTreeModel *model; if (!event) return; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); sprintf(selectedRowForType ,"%s",gtk_tree_path_to_string(path)); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free(path); if (event->type == GDK_2BUTTON_PRESS && ((GdkEventButton *) event)->button == 1) DialogueEditT(NULL,NULL); } else sprintf(selectedRowForType ,"-1"); } GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event); } /*************************************************************************************************/ static void eventDispatcherCenter(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; GtkTreeIter iter; GtkTreeModel *model; if (!event) return; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); sprintf(selectedRowForCenter ,"%s",gtk_tree_path_to_string(path)); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free(path); if (event->type == GDK_2BUTTON_PRESS && ((GdkEventButton *) event)->button == 1) DialogueEditC(NULL,NULL); } else sprintf(selectedRowForCenter ,"-1"); } GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event); } /*************************************************************************************************/ static void EditBasisT(GtkWidget *w,gpointer Entree) { gchar *texts[3]; gchar *texts3[4]; gchar *temp; gint Nc; gint i; GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; gint k; GtkTreeModel *modelCenter; GtkListStore *storeCenter; GtkTreeIter iterCenter; gchar pathString[10]; gint kc = 0; model = gtk_tree_view_get_model(GTK_TREE_VIEW(listT)); store = GTK_LIST_STORE (model); modelCenter = gtk_tree_view_get_model(GTK_TREE_VIEW(listC)); storeCenter = GTK_LIST_STORE (modelCenter); Nc=atoi(selectedRowForType); temp = get_info_basis(); if (!strcmp(temp,"Noselect") ) return; BasisT[Nc].BasisName=g_strdup(temp); texts[0] = g_strdup(BasisT[Nc].CenterName); texts[1] = g_strdup(BasisT[Nc].BasisName); texts[2] = g_strdup(BasisT[Nc].Layer); if(gtk_tree_model_get_iter_from_string (model, &iter, selectedRowForType)) gtk_list_store_remove(store, &iter); gtk_list_store_insert(store, &iter, Nc); for(k=0;k<3;k++) gtk_list_store_set (store, &iter, k, texts[k], -1); selectRow(listT, Nc); sprintf(selectedRowForType,"%d",Nc); for(i=0;i=0) { selectRow(listC, kc); sprintf(selectedRowForCenter,"%d",kc); } } /*******************************************************************/ static void DialogueEditT(GtkWidget *w,gpointer data) { GtkWidget *Dialogue; GtkWidget *Bouton; GtkWidget *frame; gint Nc; guint i; Nc=atoi(selectedRowForType); if(Nc<0 ) { Message(_("Please Select your center \n")," Warning ",TRUE); return; } Dialogue = gtk_dialog_new(); gtk_window_set_modal(GTK_WINDOW(Dialogue),TRUE); gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER); gtk_window_set_title(GTK_WINDOW(Dialogue),_("Basis")); frame = create_frame(GTK_WIDGET(Dialogue),GTK_DIALOG(Dialogue)->vbox,_("Title")); for (i=0;iaction_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); Bouton = create_button(Dialogue,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)EditBasisT, NULL); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); gtk_widget_show_all(Dialogue); } /***************************************************************************************************/ static void append_list_type() { gchar *texts[3]; gint Nc; GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; gint k; model = gtk_tree_view_get_model(GTK_TREE_VIEW(listT)); store = GTK_LIST_STORE (model); for(Nc=0;Nc0) { selectRow(listT, 0); sprintf(selectedRowForType,"0"); } } /***************************************************************************************************/ void create_basis_type_list(GtkWidget *vbox) { GtkWidget *scr; GtkWidget *button; GtkWidget *hbox; guint i; guint Factor=7; guint widall=0; gchar *titres[3]={ N_(" Symbol "),N_(" Basis "), N_(" Layer ")}; gint width[3]={6,18,8 }; GtkListStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeSelection *select; sprintf(selectedRowForType,"-1"); for(i=0;i<2;i++) widall+=width[i]; widall=widall*Factor; scr=gtk_scrolled_window_new(NULL,NULL); gtk_box_pack_start(GTK_BOX (vbox), scr,FALSE, FALSE, 2); gtk_widget_set_size_request(scr,widall,(gint)(ScreenHeight*0.3)); store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); model = GTK_TREE_MODEL (store); listT = gtk_tree_view_new_with_model (model); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (listT), TRUE); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (listT), TRUE); gtk_tree_view_set_reorderable(GTK_TREE_VIEW (listT), TRUE); for (i=0;i<3;i++) { column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, titres[i]); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_min_width(column, width[i]*Factor); gtk_tree_view_column_set_attributes (column, renderer, "text", i, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (listT), column); } gtk_container_add(GTK_CONTAINER(scr),listT); select = gtk_tree_view_get_selection (GTK_TREE_VIEW (listT)); gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE); g_signal_connect(listT, "button_press_event", G_CALLBACK(eventDispatcherType), NULL); gtk_widget_show (listT); hbox = create_hbox_false(vbox); button = gtk_button_new_with_label (_("Edit Basis")); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)DialogueEditT,NULL); gtk_box_pack_start (GTK_BOX(hbox), button, TRUE, TRUE, 0); gtk_widget_show (button); } /******************************************************************************/ static void append_list_center() { gchar *texts[4]; gint Nc; GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; gint k; model = gtk_tree_view_get_model(GTK_TREE_VIEW(listC)); store = GTK_LIST_STORE (model); for(Nc=0;Nc0) { selectRow(listC, 0); sprintf(selectedRowForCenter,"0"); } } /******************************************************************************/ void create_basis_center_list(GtkWidget *vbox) { GtkWidget *scr; GtkWidget *button; GtkWidget *hbox; guint i; guint Factor=7; guint widall=0; gchar *titres[4]={ N_(" Center Number "), N_(" Symbol "),N_(" Basis "), N_(" Layer ")}; gint width[4]={12,6,18,8 }; GtkListStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeSelection *select; for(i=0;i<2;i++) widall+=width[i]; widall=widall*Factor; scr=gtk_scrolled_window_new(NULL,NULL); gtk_box_pack_start(GTK_BOX (vbox), scr,FALSE, FALSE, 2); gtk_widget_set_size_request(scr,widall,(gint)(ScreenHeight*0.3)); store = gtk_list_store_new (4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); model = GTK_TREE_MODEL (store); listC = gtk_tree_view_new_with_model (model); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (listC), TRUE); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (listC), TRUE); gtk_tree_view_set_reorderable(GTK_TREE_VIEW (listC), TRUE); for (i=0;i<4;i++) { column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, titres[i]); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_min_width(column, width[i]*Factor); gtk_tree_view_column_set_attributes (column, renderer, "text", i, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (listC), column); } gtk_container_add(GTK_CONTAINER(scr),listC); select = gtk_tree_view_get_selection (GTK_TREE_VIEW (listC)); gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE); g_signal_connect(listC, "button_press_event", G_CALLBACK(eventDispatcherCenter), NULL); hbox = create_hbox_false(vbox); button = gtk_button_new_with_label (_("Edit Basis")); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)DialogueEditC,NULL); gtk_box_pack_start (GTK_BOX(hbox), button, TRUE, TRUE, 0); gtk_widget_show (button); } /*************************************************************************************************/ void create_basis_interface (GtkWidget *window,GtkWidget *hbox) { GtkWidget *vbox; GtkWidget *label; GtkWidget *vseparator; GtkWidget *Frame; Frame = create_frame(window,hbox,_("Basis")); hbox = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox); gtk_container_add (GTK_CONTAINER (Frame), hbox); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 5); label = gtk_label_new (_(" Define basis by type of center ")); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 2); create_basis_type_list(vbox); append_list_type(); vseparator = create_vseparator (hbox); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 5); label = gtk_label_new (_(" Define basis center by center (not recommended) ")); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 2); create_basis_center_list(vbox); append_list_center(); gtk_widget_show_all (Frame); } /*************************************************************************************************/ void GAjoutePageBasis(GtkWidget *NoteBook) { GtkWidget *window1; GtkWidget *Frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *vbox; GtkWidget *hbox; gint i; for (i=0;i #include #include #include "../Common/Global.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/InterfaceGeom.h" #include "GInterfaceGeom.h" #include "GaussGlobal.h" /************************************************************************************************************/ void c_basis_presents(gchar *ListAtoms) { GtkWidget *label; gchar *tlabel; gchar *lwhite; gchar *letoile; NM=gtk_notebook_get_current_page((GtkNotebook*)NoteBookMB); tlabel = g_malloc(1000); lwhite = g_malloc(100); letoile = g_malloc(100); sprintf(lwhite,"\n"); sprintf(letoile,"*******************************************************\n"); sprintf(tlabel,_("%s%sThis basis is present for %s atoms\n%s") ,lwhite,letoile,ListAtoms,letoile); HboxB[2][NM] = create_hbox(VboxB[NM]); label = gtk_label_new (tlabel); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (HboxB[2][NM]), label, TRUE, TRUE, 2); g_free(tlabel); g_free(lwhite); g_free(letoile); } void c_polarization(guint nliste) { gchar *liste[20]; NM=gtk_notebook_get_current_page((GtkNotebook*)NoteBookMB); liste[0]=g_strdup(_("No")); liste[1]=g_strdup("*"); liste[2]=g_strdup("(d)"); liste[3]=g_strdup("**"); liste[4]=g_strdup("(d,p)"); liste[5]=g_strdup("(d,pd)"); liste[6]=g_strdup("(d,2pd)"); liste[7]=g_strdup("(d,3pd)"); liste[8]=g_strdup("(df,p)"); liste[9]=g_strdup("(df,pd)"); liste[10]=g_strdup("(df,2pd)"); liste[11]=g_strdup("(df,3pd)"); liste[12]=g_strdup("(2df,p)"); liste[13]=g_strdup("(2df,pd)"); liste[14]=g_strdup("(2df,2pd)"); liste[15]=g_strdup("(2df,3pd)"); liste[16]=g_strdup("(3df,p)"); liste[17]=g_strdup("(3df,pd)"); liste[18]=g_strdup("(3df,2pd)"); liste[19]=g_strdup("(3df,3pd)"); HboxB[1][NM] = create_hbox(VboxB[NM]); EntryBasis[1][NM]= create_combo_box_entry_liste(FrameB[NM],HboxB[1][NM],_(" Polarization function :"),liste,nliste); } void c_diffuse_pp(guint nliste) { gchar *liste[3]; NM=gtk_notebook_get_current_page((GtkNotebook*)NoteBookMB); liste[0]=g_strdup(_("No")); liste[1]=g_strdup("+"); liste[2]=g_strdup("++"); HboxB[0][NM] = create_hbox(VboxB[NM]); EntryBasis[0][NM]= create_combo_box_entry_liste(FrameB[NM],HboxB[0][NM],_(" Diffuse function :"),liste,nliste); } /********************************************************************************************************/ void c_diffuse_aug() { gchar *liste[2]; int nliste ; NM=gtk_notebook_get_current_page((GtkNotebook*)NoteBookMB); nliste=2; liste[0]=g_strdup(_("No")); liste[1]=g_strdup(_("Yes")); HboxB[1][NM] = create_hbox(VboxB[NM]); EntryBasis[1][NM]= create_combo_box_entry_liste(FrameB[NM],HboxB[1][NM],_(" Diffuse function :"),liste,nliste); } /********************************************************************************************************/ static void traite_basis (GtkComboBox *combobox, gpointer d) { guint i; GtkTreeIter iter; gchar* data = NULL; NM=gtk_notebook_get_current_page((GtkNotebook*)NoteBookMB); if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } if(Basis[NM]) g_free(Basis[NM]); Basis[NM] = NULL; if ( strcmp((char *)data,_("Please select your basis")) && strcmp((char *)data,_("None")) ) Basis[NM] =g_strdup((char *)data); for (i=0;i=0 && HboxM[i][NM]!=NULL) { gtk_widget_destroy(HboxM[i][NM]); if(EntryMethods[i][NM]!=NULL) EntryMethods[i][NM]=NULL; HboxM[i][NM] = NULL; } } if (!strcmp((char *)data,_("Hartree Fock")) ) c_hf_combo(); else if (!strcmp((char *)data,_("CI Methods")) ) c_ci_combo(); else if (!strcmp((char *)data,_("CASSCF Method")) ) c_casscf_combo(); else if (!strcmp((char *)data,_("MP Methods")) ) c_mp_combo (); else if (!strcmp((char *)data,_("Semi-Empirical Methods")) ) c_semi_combo(); else if (!strcmp((char *)data,_("Molecular Mechanics Methods")) ) c_mecha_combo(); else if (!strcmp((char *)data,_("Hybrid/Standalone Functional Methods")) ) c_hybrid_combo(); else if (!strcmp((char *)data,_("Density Functional Methods")) ) c_dft_combo(); else if (!strcmp((char *)data,_("Excited States")) ) c_excited_combo(); gtk_widget_show_all(FrameM[NM]); } /********************************************************************************************************/ static GtkWidget *create_liste_methods(GtkWidget*win,GtkWidget *frame, gboolean nothing) { GtkWidget *hbox; GtkWidget *vbox; GtkWidget *hseparator; GtkTreeIter iter; GtkTreeStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; vbox =create_vbox(frame); VboxM[NM]=vbox; hbox =create_hbox(vbox); store = gtk_tree_store_new (1,G_TYPE_STRING); if(nothing) { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Nothing"), -1); } gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Hartree Fock"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("MP Methods"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("CI Methods"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("CASSCF Method"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Density Functional Methods"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Hybrid/Standalone Functional Methods"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Excited States"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Semi-Empirical Methods"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Molecular Mechanics Methods"), -1); model = GTK_TREE_MODEL (store); combobox = gtk_combo_box_new_with_model (model); g_object_unref (model); gtk_box_pack_start (GTK_BOX (hbox), combobox, TRUE, TRUE, 1); g_signal_connect (G_OBJECT(combobox), "changed", G_CALLBACK(traite_methods), NULL); renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", 0, NULL); hseparator = gtk_hseparator_new (); gtk_widget_show (hseparator); gtk_box_pack_start (GTK_BOX (vbox), hseparator, FALSE, FALSE, 1); return combobox; } /********************************************************************************************************/ static void GAjoutePageMB(GtkWidget *NoteBook,gchar * tNote,guint j, GtkWidget **comboMethod, GtkWidget **comboBasis) { GtkWidget *Frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *window1; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *FrameMethode; GtkWidget *FrameBasis; guint i; GtkWidget *combobox; gboolean nothing = TRUE; nothing = FALSE; NM=j; Basis[NM] =NULL; Methodes[NM]=NULL; for(i=0;i #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Psicode/PsicodeTypes.h" #include "../Psicode/PsicodeGlobal.h" #include "../Psicode/PsicodeMolecule.h" #include "../Psicode/PsicodeBasis.h" #include "../Psicode/PsicodeGuess.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget* comboSCF = NULL; static GtkWidget* comboMethod = NULL; static GtkWidget* comboTypeMethod = NULL; static GtkWidget* comboExcited = NULL; static void setPsicodeMethods(); /*************************************************************************************************************/ static gchar* listJobView[] = { "Single Point Energy", "Equilibrium structure search", "Frequencies", "Equilibrium structure search + Frequencies", }; static gchar* listJobReal[] = { "SP", "optimize", "freq", "opt&freq", }; static guint numberOfJobs = G_N_ELEMENTS (listJobView); static gchar selectedJob[BSIZE]="SP"; /*************************************************************************************************************/ static gchar* listSCFView[] = { "default","unrestricted", "restricted"}; static gchar* listSCFReal[] = { "DEF", "TRUE", "FALSE"}; static guint numberOfSCF = G_N_ELEMENTS (listSCFView); static gchar selectedSCF[BSIZE]="DEF"; /*************************************************************************************************************/ static gchar* listTypeMethodsView[] = { "Hatree-Fock", "Local and gradient corrected functionals", "Hybrid functionals", "Meta-GGA and hybrid meta-GGA's", "X_LRC", "Second Order Many Body Perturbation Theory", "High-level Single Reference Methods", /*"Semiempirical Methods",*/ }; static gchar* listTypeMethodsReal[] = { "SCF", "DFT", "Hybrid", "Meta-GGA", "X_LRC", "MP2", "HL-SR", /* "SemiEmp",*/ }; static guint numberOfTypeMethods = G_N_ELEMENTS (listTypeMethodsView); static gchar selectedTypeMethod[BSIZE]="SCF"; /*************************************************************************************************************/ static gchar* listHFMethodsView[] = { "HF", }; static gchar* listHFMethodsReal[] = { "SCF", }; static guint numberOfHFMethods = G_N_ELEMENTS (listHFMethodsView); /*************************************************************************************************************/ static gchar* listHFDFTMethodsView[] = { "HFexch", }; static gchar* listHFDFTMethodsReal[] = { "XC HFexch", }; static guint numberOfHFDFTMethods = G_N_ELEMENTS (listHFDFTMethodsView); /*************************************************************************************************************/ static gchar* listDFTMethodsView[] = { "B3_X", "B88_X", "B97-D", "BLYP", "BLYP-D", "BP86", "FT97", "FT97B_X", "FT97_C", "HCTH", "HCTH120", "HCTH147", "HCTH407", "LYP_C", "P86_C", "PBE", "PBE-D", "PBESOL_X", "PBE_C", "PBE_X", "PW91", "PW91_C", "PW91_X", "PW92_C", "PZ81_C", "SVWN", "S_X", "VWN3RPA_C", "VWN3_C", "VWN5RPA_C", "VWN5_C", }; static gchar* listDFTMethodsReal[] = { "B3_X", "B88_X", "B97-D", "BLYP", "BLYP-D", "BP86", "FT97", "FT97B_X", "FT97_C", "HCTH", "HCTH120", "HCTH147", "HCTH407", "LYP_C", "P86_C", "PBE", "PBE-D", "PBESOL_X", "PBE_C", "PBE_X", "PW91", "PW91_C", "PW91_X", "PW92_C", "PZ81_C", "SVWN", "S_X", "VWN3RPA_C", "VWN3_C", "VWN5RPA_C", "VWN5_C", }; static guint numberOfDFTMethods = G_N_ELEMENTS (listDFTMethodsView); /*************************************************************************************************************/ static gchar* listHybridMethodsView[] = { "B3LYP", "B3LYP-D", "B3LYP5", "B3LYP5-D", "B97-0", "B97-1", "B97-2", "PBE0", "wB97X Parameterized Hybrid LRC B97 GGA XC Functional", "wB97X-D", "wPBE0 SR-XC Functional (HJS Model)", "wPBE0sol0", }; static gchar* listHybridMethodsReal[] = { "B3LYP", "B3LYP-D", "B3LYP5 ", "B3LYP5-D", "B97-0", "B97-1", "B97-2", "PBE0", "wB97X", "wB97X-D", "wPBE0", "wPBE0sol0", }; static guint numberOfHybridMethods = G_N_ELEMENTS (listHybridMethodsView); /*************************************************************************************************************/ static gchar* listMetaGGAMethodsView[] = { "m05", "m05-2X", }; static gchar* listMetaGGAMethodsReal[] = { "m05", "m05-2X", }; static guint numberOfMetaGGAMethods = G_N_ELEMENTS (listMetaGGAMethodsView); /*************************************************************************************************************/ static gchar* listXLRCMethodsView[] = { "wB88_X", "wB97", "wB97X", "wB97X-D", "wBLYP", "wPBE", "wPBE0", "wPBE_X", "wPBEsol", "wPBEsol0", "wPBEsol_X", "wSVWN", "wS_X", }; static gchar* listXLRCMethodsReal[] = { "wB88_X", "wB97", "wB97X", "wB97X-D", "wBLYP", "wPBE", "wPBE0", "wPBE_X", "wPBEsol", "wPBEsol0", "wPBEsol_X", "wSVWN", "wS_X", }; static guint numberOfXLRCMethods = G_N_ELEMENTS (listXLRCMethodsView); /*************************************************************************************************************/ static gchar* listMP2MethodsView[] = { "MP2", "DF-MP2", }; static gchar* listMP2MethodsReal[] = { "MP2", "DF-MP2", }; static guint numberOfMP2Methods = G_N_ELEMENTS (listMP2MethodsView); /*************************************************************************************************************/ static gchar* listHighLevelSingleRefMethodsView[] = { "CC2", "CCD", "CCSD", "CC3", "CCD(T)", "CCSD(T) ", }; static gchar* listHighLevelSingleRefMethodsReal[] = { "CC2", "CCD", "CCSD", "CC3", "CCD(T)", "CCSD(T) ", }; static guint numberOfHighLevelSingleRefMethods = G_N_ELEMENTS (listHighLevelSingleRefMethodsView); /*************************************************************************************************************/ static gchar* listSemiEmpMethodsView[] = { "ZINDO/S", "ZINDO/1", "ZINDO/2", "NDDO/1", "NDDO/2", "MNDO", "AM1", "PM3", }; static gchar* listSemiEmpMethodsReal[] = { "ZINDO/S", "ZINDO/1", "ZINDO/2", "NDDO/1", "NDDO/2", "MNDO", "AM1", "PM3", }; static guint numberOfSemiEmpMethods = G_N_ELEMENTS (listSemiEmpMethodsView); /*************************************************************************************************************/ static gchar selectedMethod[BSIZE]="HF"; static gchar** listMethodsView = listHybridMethodsView; static gchar** listMethodsReal = listHybridMethodsReal; static guint numberOfMethods = G_N_ELEMENTS (listHybridMethodsView); /*************************************************************************************************************/ static gchar* listScfConvergenceView[] = { "Default", "Energy convergence = 10^-6 au", "Energy convergence = 10^-7 au", "Energy convergence = 10^-8 au", "Energy convergence = 10^-9 au", "Energy convergence = 10^-10 au" }; static gchar* listScfConvergenceReal[] = { "NONE", "6", "7", "8", "9", "10" }; static guint numberOfScfConvergence = G_N_ELEMENTS (listScfConvergenceView); static gchar selectedScfConvergence[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listNothingExcitedView[] = { "Nothing", }; static gchar* listNothingExcitedReal[] = { "NONE", }; static guint numberOfNothingExcited = G_N_ELEMENTS (listNothingExcitedView); /*************************************************************************************************************/ static gchar* listSemiEmpExcitedView[] = { "Nothing", "CIS", }; static gchar* listSemiEmpExcitedReal[] = { "NONE", "CIS", }; static guint numberOfSemiEmpExcited = G_N_ELEMENTS (listSemiEmpExcitedView); /*************************************************************************************************************/ static gchar* listHFExcitedView[] = { "Nothing", "CIS", "CIS(D)", }; static gchar* listHFExcitedReal[] = { "NONE", "CIS", "CIS(D)", }; static guint numberOfHFExcited = G_N_ELEMENTS (listHFExcitedView); /*************************************************************************************************************/ static gchar* listDFTExcitedView[] = { "Nothing", "CIS", "TDDFT", }; static gchar* listDFTExcitedReal[] = { "NONE", "CIS", "TDDFT", }; static guint numberOfDFTExcited = G_N_ELEMENTS (listDFTExcitedView); /*************************************************************************************************************/ static gchar* listHLExcitedView[] = { "Nothing", "EOM", }; static gchar* listHLExcitedReal[] = { "NONE", "EOM", }; static guint numberOfHLExcited = G_N_ELEMENTS (listHLExcitedView); /*************************************************************************************************************/ static gchar selectedExcited[BSIZE]="NONE"; static gchar** listExcitedView = listNothingExcitedView; static gchar** listExcitedReal = listNothingExcitedReal; static guint numberOfExcited = G_N_ELEMENTS (listNothingExcitedView); /*************************************************************************************************************/ gchar* getPsicodeExcitedMethod() { return selectedExcited; } /*************************************************************************************************************/ gchar* getPsicodeTypeMethod() { return selectedTypeMethod; } /*************************************************************************************************************/ static void putPsicodeExcitedInfoInTextEditor() { gchar buffer[BSIZE]; if(!strcmp(selectedExcited,"NONE"))return; if(!strcmp(selectedExcited,"EOM"))return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &psicodeColorFore.keyWord, &psicodeColorBack.keyWord, "tddft\n", -1); if(strstr(selectedExcited,"CIS")) sprintf(buffer," cis\n"); else sprintf(buffer," rpa\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer," nroots %d # the number of excited states to be calculated.\n",8); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer, "# nosinglet\n" "# notriplet\n" "# maxvecs 1000 # it is the maximum number of trial vectors that the calculation is allowed to hold\n" "# thresh 1e-4\n" "# maxiter 100\n" "# freeze atomic # To exclude the atom-like core regions\n" "# freeze 10 # the number of lowest-lying occupied orbitals be excluded\n" "# freeze virtual 5 # to freeze the top 5 virtual orbitals\n" ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"end #tddft\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /*************************************************************************************************************/ static void setPsicodeExcited() { GtkTreeIter iter; GtkTreeIter iter0; gint i; if(strcmp(selectedTypeMethod,"HF")==0) { listExcitedView = listHFExcitedView; listExcitedReal = listHFExcitedReal; numberOfExcited = numberOfHFExcited; } else if(strcmp(selectedTypeMethod,"HFexch")==0) { listExcitedView = listDFTExcitedView; listExcitedReal = listDFTExcitedReal; numberOfExcited = numberOfDFTExcited; } else if(strcmp(selectedTypeMethod,"DFT")==0) { listExcitedView = listDFTExcitedView; listExcitedReal = listDFTExcitedReal; numberOfExcited = numberOfDFTExcited; } else if(strcmp(selectedTypeMethod,"Hybrid")==0) { listExcitedView = listDFTExcitedView; listExcitedReal = listDFTExcitedReal; numberOfExcited = numberOfDFTExcited; } else if(strcmp(selectedTypeMethod,"Meta-GGA")==0) { listExcitedView = listDFTExcitedView; listExcitedReal = listDFTExcitedReal; numberOfExcited = numberOfDFTExcited; } else if(strcmp(selectedTypeMethod,"HL-SR")==0 && (!strcmp(selectedMethod,"CC2") || !strcmp(selectedMethod,"CCSD") )) { listExcitedView = listHLExcitedView; listExcitedReal = listHLExcitedReal; numberOfExcited = numberOfHLExcited; } else if(strcmp(selectedTypeMethod,"SemiEmp")==0 && strstr(selectedMethod,"/S")) { listExcitedView = listSemiEmpExcitedView; listExcitedReal = listSemiEmpExcitedReal; numberOfExcited = numberOfSemiEmpExcited; } else { listExcitedView = listNothingExcitedView; listExcitedReal = listNothingExcitedReal; numberOfExcited = numberOfNothingExcited; } if (comboExcited && gtk_combo_box_get_active_iter (GTK_COMBO_BOX(comboExcited), &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(GTK_COMBO_BOX(comboExcited)); GtkTreeStore *store = GTK_TREE_STORE(model); gtk_tree_store_clear(store); for(i=0;i Dep.mk -include Dep.mk GabeditSrc250/src/Psicode/Psicode.h0000644000175100017510000000274113130665225017413 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_PSICODE_H__ #define __GABEDIT_PSICODE_H__ void destroyWinsPsicode(GtkWidget *win,gpointer data); void newPsicode(); void insertPsicode(); #endif /* __GABEDIT_PSICODE_H__ */ GabeditSrc250/src/Psicode/Psicode.c0000644000175100017510000001674713130665225017421 0ustar alloucheallouche/* Psicode.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Common/Global.h" #include "../Psicode/PsicodeTypes.h" #include "../Psicode/PsicodeGlobal.h" #include "../Psicode/PsicodeMolecule.h" #include "../Psicode/PsicodeKeywords.h" #include "../Psicode/PsicodeBasis.h" #include "../Psicode/PsicodeGuess.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" static GtkWidget *Wins=NULL; static gboolean newFile = FALSE; /************************************************************************************************************/ static void setColors() { static gboolean first = TRUE; if(!first) return; first = FALSE; psicodeColorFore.keyWord.red = 65535; psicodeColorFore.keyWord.green = 0; psicodeColorFore.keyWord.blue = 0; psicodeColorBack.keyWord.red = (gushort)(65535/1.2); psicodeColorBack.keyWord.green = (gushort)(65535/1.2); psicodeColorBack.keyWord.blue = (gushort)(65535/1.2); psicodeColorFore.description.red = 0; psicodeColorFore.description.green = 65535; psicodeColorFore.description.blue = 65535; psicodeColorBack.description.red = (gushort)(65535/2.0); psicodeColorBack.description.green = (gushort)(65535/2.0); psicodeColorBack.description.blue = (gushort)(65535/2.0); } /************************************************************************************************************/ void destroyWinsPsicode(GtkWidget *win) { destroy(Wins,NULL); Wins = NULL; initPsicodeMoleculeButtons(); initPsicodeGuessFrame(); /* freePsicodeMolecule(); freePsicodeMpqc(); freePsicodeBasis(); */ } /************************************************************************************************************/ static void toCancelWin(GtkWidget* win,gpointer data) { Cancel_YesNo(win, data, destroy_children); } /************************************************************************************************************/ static void putTitleInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"%c ================================================================\n",'#'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"%c Psicode input file made in Gabedit\n",'#'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"%c ================================================================\n",'#'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /************************************************************************************************************/ static void putInfoInTextEditor(GtkWidget *button, gpointer data) { setColors(); if(newFile) { reset_name_files(); ClearText(text); } else { gint nchar; nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); gabedit_text_set_point(GABEDIT_TEXT(text),nchar); } data_modify(TRUE); putTitleInTextEditor(); putPsicodeMoleculeInfoInTextEditor(); putPsicodeKeywordsInfoInTextEditor(); iprogram = PROG_IS_PSICODE; fileopen.command=g_strdup(NameCommandPsicode); gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0); } /*********************************************************************************************/ static GtkWidget* addHboxToTable(GtkWidget* table, gint i, gint j, gint ki, gint kj) { GtkWidget *hbox = gtk_hbox_new(TRUE, 5); gtk_table_attach(GTK_TABLE(table),hbox,j,j+kj,i,i+ki, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); return hbox; } /************************************************************************************************************/ static void psicodeInputFileWindow(gboolean newInputFile) { GtkWidget *button; GtkWidget *hbox = NULL; GtkWidget *hboxChargeMultiplicity = NULL; GtkWidget *table = gtk_table_new(6,2,FALSE); newFile = newInputFile; initPsicodeMolecule(); setPsicodeMolecule(); if(psicodeMolecule.numberOfAtoms <1) { Message( _( "You must initially define your geometry.\n\n" "From the principal Menu select : Geometry/Draw\n" "and draw (or read) your molecule."), _("Error"),TRUE); return; } if(Wins) destroy_children(Wins); Wins= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Wins),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Wins),GTK_WINDOW(Fenetre)); gtk_window_set_title(>K_DIALOG(Wins)->window,_("Psicode input")); gtk_window_set_modal (GTK_WINDOW (Wins), TRUE); init_child(Wins, destroyWinsPsicode,_(" Psicode input ")); g_signal_connect(G_OBJECT(Wins),"delete_event",(GCallback)destroy_children,NULL); gtk_widget_realize(Wins); button = create_button(Wins,_("Cancel")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK( toCancelWin),GTK_OBJECT(Wins)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show (button); button = create_button(Wins,_("OK")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->vbox), table, FALSE, TRUE, 5); hbox =addHboxToTable(table, 0, 0, 1, 1); hboxChargeMultiplicity = hbox; hbox =addHboxToTable(table, 1, 0, 1, 2); initPsicodeGuessFrame(); createPsicodeKeywordsFrame(Wins, hbox); createPsicodeChargeMultiplicityFrame(hboxChargeMultiplicity); hbox =addHboxToTable(table, 2, 0, 1, 2); createPsicodeGuessFrame(Wins, hbox); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(putInfoInTextEditor),GTK_OBJECT(Wins)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(destroy_children),GTK_OBJECT(Wins)); gtk_widget_show_all(Wins); psicodeWin = Wins; } /************************************************************************************************************/ void newPsicode() { psicodeInputFileWindow(TRUE); } /************************************************************************************************************/ void insertPsicode() { psicodeInputFileWindow(FALSE); } GabeditSrc250/src/Psicode/PsicodeMolecule.h0000644000175100017510000000057213130665225021101 0ustar alloucheallouche #ifndef __GABEDIT_PSICODEMOLECULE_H__ #define __GABEDIT_PSICODEMOLECULE_H__ gint getPsicodeMultiplicity(); void initPsicodeMoleculeButtons(); void initPsicodeMolecule(); void freePsicodeMolecule(); void putPsicodeMoleculeInfoInTextEditor(); gboolean setPsicodeMolecule(); void createPsicodeChargeMultiplicityFrame(GtkWidget *box); #endif /* __GABEDIT_PSICODEMOLECULE_H__ */ GabeditSrc250/src/Psicode/PsicodeMolecule.c0000644000175100017510000005751513130665225021105 0ustar alloucheallouche/* PsicodeMolecule.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Psicode/PsicodeTypes.h" #include "../Psicode/PsicodeGlobal.h" #include "../Psicode/PsicodeKeywords.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" /************************************************************************************************************/ static gint totalCharge = 0; static gint spinMultiplicity=1; /************************************************************************************************************/ gint getPsicodeMultiplicity() { return spinMultiplicity; } /************************************************************************************************************/ void initPsicodeMoleculeButtons() { } /************************************************************************************************************/ void initPsicodeMolecule() { psicodeMolecule.listOfAtoms = NULL; psicodeMolecule.totalNumberOfElectrons = 0; psicodeMolecule.numberOfValenceElectrons = 0; psicodeMolecule.numberOfAtoms = 0; } /************************************************************************************************************/ void freePsicodeMolecule() { static gboolean first = TRUE; if(first) { initPsicodeMolecule(); first = FALSE; return; } if(psicodeMolecule.listOfAtoms) g_free(psicodeMolecule.listOfAtoms); initPsicodeMolecule(); } /************************************************************************************************************/ static gint setPsicodeMoleculeFromSXYZ(gint nAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z) { gint n; PsicodeAtom* atomList = NULL; psicodeMolecule.listOfAtoms = NULL; psicodeMolecule.numberOfAtoms = 0; if(nAtoms<1) return 1; psicodeMolecule.listOfAtoms = (PsicodeAtom*)g_malloc(sizeof(PsicodeAtom)*(nAtoms)); if(psicodeMolecule.listOfAtoms==NULL) return -1; psicodeMolecule.numberOfAtoms = nAtoms; atomList = psicodeMolecule.listOfAtoms; for(n=0; nposition[0] = X[n]; atomList->position[1] = Y[n]; atomList->position[2] = Z[n]; atomList->symbol = g_strdup(symbols[n]); atomList++; } return 0; } /************************************************************************************************************/ static void setXYZFromGeomXYZ(gint i, gdouble* x, gdouble* y, gdouble *z) { if(!test(GeomXYZ[i].X)) *x = get_value_variableXYZ(GeomXYZ[i].X); else *x = atof(GeomXYZ[i].X); if(!test(GeomXYZ[i].Y)) *y = get_value_variableXYZ(GeomXYZ[i].Y); else *y = atof(GeomXYZ[i].Y); if(!test(GeomXYZ[i].Z)) *z = get_value_variableXYZ(GeomXYZ[i].Z); else *z = atof(GeomXYZ[i].Z); if(Units==0) { *x *= BOHR_TO_ANG; *y *= BOHR_TO_ANG; *z *= BOHR_TO_ANG; } } /************************************************************************************************************/ static gboolean setPsicodeMoleculeFromGeomXYZ() { gint i; gchar** symbols = NULL; gdouble* X = NULL; gdouble* Y = NULL; gdouble* Z = NULL; gint numberOfAtoms = NcentersXYZ; if(numberOfAtoms<1) return FALSE; symbols = (gchar**)g_malloc(sizeof(gchar*)*(numberOfAtoms)); if(symbols == NULL) return FALSE; X = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(X == NULL) return FALSE; Y = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Y == NULL) return FALSE; Z = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Z == NULL) return FALSE; psicodeMolecule.totalNumberOfElectrons = 0; for(i=0; iposition[k]-atomList->position[k+1]; dd += xx*xx; } if(i==0) d = dd; else if(d>dd) d= dd; atomList++; } d = sqrt(d); return d; } */ /*************************************************************************************************************/ /* static void setFirstAtomToXAxis(gint numberOfAtoms, gdouble* X, gdouble* Y, gdouble*Z) { gdouble d; gdouble s; gdouble c; gint i; gdouble positionTolerance = -1; if(numberOfAtoms<1) return; d = X[0]*X[0]+Y[0]*Y[0]; if(d<1e-10) return; d = sqrt(d); if(positionTolerance<0) positionTolerance= getMinDistance()/50; s = -Y[0]/d; c = +X[0]/d; for (i=0;i0) for(i=0;i0 && nV!= 3*psicodeMolecule.numberOfAtoms) { sprintf(buffer,"\nconstraints\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &psicodeColorFore.keyWord, &psicodeColorBack.keyWord, buffer, -1); for (i=0;iNUMBER_ENTRY_0) line=g_strdup_printf("%s\t%s\t%s",line,Geom[i].NR,Geom[i].R); if(Geom[i].Nentry>NUMBER_ENTRY_R) line=g_strdup_printf("%s\t%s\t%s",line,Geom[i].NAngle,Geom[i].Angle); if(Geom[i].Nentry>NUMBER_ENTRY_ANGLE) line=g_strdup_printf("%s\t%s\t%s",line,Geom[i].NDihedral,Geom[i].Dihedral); line=g_strdup_printf("%s\n",line); prop = prop_atom_get(Geom[i].Symb); gabedit_text_insert (GABEDIT_TEXT(text), NULL,NULL, &prop.color,line,-1); g_free(line); } if(NVariables>0) { gint nV = 0; for(i=0;ichild; t = g_strdup_printf("%d",spin); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /************************************************************************************************************/ static void setComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity) { GList *glist = NULL; gint i; gint nlist = 0; gchar** list = NULL; gint k; gint kinc; gint ne = psicodeMolecule.numberOfValenceElectrons - totalCharge; if(ne%2==0) nlist = ne/2+1; else nlist = (ne+1)/2; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; t = g_strdup_printf("%d",charge); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /********************************************************************************/ static void setComboCharge(GtkWidget *comboCharge) { GList *glist = NULL; gint i; gint nlist; gchar** list = NULL; gint k; nlist = psicodeMolecule.numberOfValenceElectrons*2-2+1; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; g_object_set_data(G_OBJECT (entry), "Combo",combo); gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.2),-1); return entry; } /***********************************************************************************************/ static GtkWidget *addPsicodeChargeToTable(GtkWidget *table, gint i) { GtkWidget* entryCharge = NULL; GtkWidget* comboCharge = NULL; gint nlistCharge = 1; gchar* listCharge[] = {"0"}; add_label_table(table,_("Charge"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryCharge = addComboListToATable(table, listCharge, nlistCharge, i, 2, 1); comboCharge = g_object_get_data(G_OBJECT (entryCharge), "Combo"); gtk_widget_set_sensitive(entryCharge, FALSE); return comboCharge; } /***********************************************************************************************/ static GtkWidget *addPsicodeSpinToTable(GtkWidget *table, gint i) { GtkWidget* entrySpinMultiplicity = NULL; GtkWidget* comboSpinMultiplicity = NULL; gint nlistspinMultiplicity = 1; gchar* listspinMultiplicity[] = {"0"}; add_label_table(table,_("Spin multiplicity"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entrySpinMultiplicity = addComboListToATable(table, listspinMultiplicity, nlistspinMultiplicity, i, 2, 1); comboSpinMultiplicity = g_object_get_data(G_OBJECT (entrySpinMultiplicity), "Combo"); gtk_widget_set_sensitive(entrySpinMultiplicity, FALSE); g_signal_connect(G_OBJECT(entrySpinMultiplicity),"changed", G_CALLBACK(changedEntrySpinMultiplicity),NULL); return comboSpinMultiplicity; } /***********************************************************************************************/ static GtkWidget *addLabelNumberOfElectronsToTable(GtkWidget *table, gint i, GtkWidget *comboCharge) { GtkWidget* labelNumberOfElectrons = NULL; GtkWidget* hbox = NULL; GtkWidget* entryCharge = GTK_BIN(comboCharge)->child; labelNumberOfElectrons = gtk_label_new(" "); hbox = gtk_hbox_new(0,FALSE); gtk_box_pack_start (GTK_BOX (hbox), labelNumberOfElectrons, FALSE, FALSE, 0); gtk_table_attach(GTK_TABLE(table),hbox,0,0+3,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_SHRINK), 2,2); g_object_set_data(G_OBJECT (entryCharge), "LabelNumberOfElectrons", labelNumberOfElectrons); g_signal_connect(G_OBJECT(entryCharge),"changed", G_CALLBACK(changedEntryCharge),NULL); return labelNumberOfElectrons; } /***********************************************************************************************/ void createPsicodeChargeMultiplicityFrame(GtkWidget *box) { GtkWidget* frame; GtkWidget* sep; GtkWidget* labelNumberOfElectrons; GtkWidget* vboxFrame; GtkWidget* comboSpinMultiplicity = NULL; GtkWidget* comboCharge = NULL; GtkWidget *table = NULL; gint i; totalCharge = TotalCharges[0]; spinMultiplicity=SpinMultiplicities[0]; table = gtk_table_new(3,5,FALSE); frame = gtk_frame_new (_("Charge & Multiplicty")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); i = 0; comboCharge = addPsicodeChargeToTable(table, i); i = 1; comboSpinMultiplicity = addPsicodeSpinToTable(table, i); i = 2; sep = gtk_hseparator_new ();; gtk_table_attach(GTK_TABLE(table),sep,0,0+3,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); i = 3; labelNumberOfElectrons=addLabelNumberOfElectronsToTable(table, i, comboCharge); if(GTK_IS_COMBO_BOX(comboCharge)) g_object_set_data(G_OBJECT (GTK_BIN(comboCharge)->child), "ComboSpinMultiplicity", comboSpinMultiplicity); setComboCharge(comboCharge); setComboSpinMultiplicity(comboSpinMultiplicity); if(GTK_IS_WIDGET(labelNumberOfElectrons)) { gint ne = psicodeMolecule.numberOfValenceElectrons - totalCharge; gchar buffer[BSIZE]; sprintf(buffer, "Number of electrons = %d",ne); gtk_label_set_text(GTK_LABEL(labelNumberOfElectrons),buffer); } /* activate sensitivity */ /* if(GTK_IS_WIDGET(comboMethod)) setComboMethod(comboMethod); g_object_set_data(G_OBJECT (box), "EntryMethod", GTK_BIN(comboMethod)->child); */ } /************************************************************************************************************/ GabeditSrc250/src/Psicode/PsicodeBasis.c0000644000175100017510000005423113130665225020371 0ustar alloucheallouche/* PsicodeBasis.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Psicode/PsicodeTypes.h" #include "../Psicode/PsicodeGlobal.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Utils/GabeditTextEdit.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" static gchar selectedTypeBasis[BSIZE]=""; static gchar** listBasisReal = NULL; static gchar** listBasisView = NULL; static gint numberOfBasis = 0; /*************************************************************************************************************/ static gchar* listTypeBasisView[] = { "Pople Style basis sets", "Pople with one diffuse function on non-hydrogen atoms", "Pople with one diffuse function on all atoms", "Dunning basis sets", "Jensen Basis Sets", "Miscellenous and Specialized Basis Sets", }; static gchar* listTypeBasisReal[] = { "Pople", "PopleDiffuseNonHydrogen", "PopleDiffuseAllAtoms", "Dunning", "Jensen", "Miscellenous", }; static guint numberOfTypeBasis = G_N_ELEMENTS (listTypeBasisView); /*************************************************************************************************************/ static gchar* listPopleBasisView[] = { "6-31G Pople 6-31G and its modifications", "6-311G Pople 6-311G and its modifications", "3-21G* 3-21G plus one polarisation function all non-hydrogens atoms", "6-31G* 6-31G plus one polarisation function all non-hydrogens atoms", "6-311G* 6-311G plus one polarisation function all non-hydrogens atoms", "3-21G** 3-21G plus one polarisation function all atoms", "6-31G** 6-31G plus one polarisation function all atoms", "6-311G** 6-311G plus one polarisation function all atoms", "3-21G(2d) 3-21G plus two polarisation functions all non-hydrogens atoms", "6-31G(2d) 6-31G plus two polarisation functions all non-hydrogens atoms", "6-311G(2d) 6-311G plus two polarisation functions all non-hydrogens atoms", "3-21G(2d,2p) 3-21G plus two polarisation functions all atoms", "6-31G(2d,2p) 6-31G plus two polarisation functions all atoms", "6-311G(2d,2p) 6-311G plus two polarisation functions all atoms", "3-21G(2df) 3-21G plus three polarisation functions all non-hydrogens atoms", "6-31G(2df) 6-31G plus three polarisation functions all non-hydrogens atoms", "6-311G(2df) 6-311G plus three polarisation functions all non-hydrogens atoms", "3-21G(2df,2pd) 3-21G plus three polarisation functions all atoms", "6-31G(2df,2pd) 6-31G plus three polarisation functions all atoms", "6-311G(2df,2pd) 6-311G plus three polarisation functions all atoms", "3-21G(3df) 3-21G plus four polarisation functions all non-hydrogens atoms", "6-31G(3df) 6-31G plus four polarisation functions all non-hydrogens atoms", "6-311G(3df) 6-311G plus four polarisation functions all non-hydrogens atoms", "3-21G(3df,3pd) 3-21G plus four polarisation functions all atoms", "6-31G(3df,3pd) 6-31G plus four polarisation functions all atoms", "6-311G(3df,3pd) 6-311G plus four polarisation functions all atoms", }; static gchar* listPopleBasisReal[] = { "6-31G", "6-311G", "3-21G*", "6-31G*", "6-311G*", "3-21G**", "6-31G**", "6-311G**", "3-21G(2d)", "6-31G(2d)", "6-311G(2d)", "3-21G(2d,2p)", "6-31G(2d,2p)", "6-311G(2d,2p)", "3-21G(2df)", "6-31G(2df)", "6-311G(2df)", "3-21G(2df,2pd)", "6-31G(2df,2pd)", "6-311G(2df,2pd)", "3-21G(3df)", "6-31G(3df)", "6-311G(3df)", "3-21G(3df,3pd)", "6-31G(3df,3pd)", "6-311G(3df,3pd)", }; static guint numberOfPopleBasis = G_N_ELEMENTS (listPopleBasisView); /*************************************************************************************************************/ static gchar* listPopleDiffuseNonHydrogenBasisView[] = { "3-21+G 3-21G plus diffuse functions on all non-hydrogens atoms", "6-31+G 6-31G plus diffuse functions on all non-hydrogens atoms", "6-311+G 6-311G plus diffuse functions on all non-hydrogens atoms", "3-21+G* 3-21G + diff. non-hydrogens + 1 pol. non-hydrogens", "6-31+G* 6-31G + diff. non-hydrogens + 1 pol. non-hydrogens", "6-311+G* 6-311G + diff. non-hydrogens + 1 pol. non-hydrogens", "3-21+G** 3-21G + diff. non-hydrogens + 1 pol. ", "6-31+G** 6-31G + diff. non-hydrogens + 1 pol. ", "6-311+G** 6-311G + diff. non-hydrogens + 1 pol. ", "3-21+G(2d) 3-21G + diff. non-hydrogens + 2 pol. non-hydrogens", "6-31+G(2d) 6-31G + diff. non-hydrogens + 2 pol. non-hydrogens", "6-311+G(2d) 6-311G + diff. non-hydrogens + 2 pol. non-hydrogens", "3-21+G(2d,2p) 3-21G + diff. non-hydrogens + 2 pol.", "6-31+G(2d,2p) 6-31G + diff. non-hydrogens + 2 pol.", "6-311+G(2d,2p) 6-311G + diff. non-hydrogens + 2 pol.", "3-21+G(2df) 3-21G + diff. non-hydrogens + 3 pol. non-hydrogens", "6-31+G(2df) 6-31G + diff. non-hydrogens + 3 pol. non-hydrogens", "6-311+G(2df) 6-311G + diff. non-hydrogens + 3 pol. non-hydrogens", "3-21+G(2df,2pd) 3-21G + diff. non-hydrogens + 3 pol.", "6-31+G(2df,2pd) 6-31G + diff. non-hydrogens + 3 pol.", "6-311+G(2df,2pd) 6-311G + diff. non-hydrogens + 3 pol.", "3-21+G(3df) 3-21G + diff. non-hydrogens + 4 pol. non-hydrogens", "6-31+G(3df) 6-31G + diff. non-hydrogens + 4 pol. non-hydrogens", "6-311+G(3df) 6-311G + diff. non-hydrogens + 4 pol. non-hydrogens", "3-21+G(3df,3pd) 3-21G + diff. non-hydrogens + 4 pol.", "6-31+G(3df,3pd) 6-31G + diff. non-hydrogens + 4 pol.", "6-311+G(3df,3pd) 6-311G + diff. non-hydrogens + 4 pol.", }; static gchar* listPopleDiffuseNonHydrogenBasisReal[] = { "3-21+G", "6-31+G", "6-311+G", "3-21+G*", "6-31+G*", "6-311+G*", "3-21+G**", "6-31+G**", "6-311+G**", "3-21+G(2d)", "6-31+G(2d)", "6-311+G(2d)", "3-21+G(2d,2p)", "6-31+G(2d,2p)", "6-311+G(2d,2p)", "3-21+G(2df)", "6-31+G(2df)", "6-311+G(2df)", "3-21+G(2df,2pd)", "6-31+G(2df,2pd)", "6-311+G(2df,2pd)", "3-21+G(3df)", "6-31+G(3df)", "6-311+G(3df)", "3-21+G(3df,3pd)", "6-31+G(3df,3pd)", "6-311+G(3df,3pd)", }; static guint numberOfPopleDiffuseNonHydrogenBasis = G_N_ELEMENTS (listPopleDiffuseNonHydrogenBasisView); /*************************************************************************************************************/ static gchar* listPopleDiffuseAllAtomsBasisView[] = { "3-21++G 3-21G plus diffuse functions on all atoms", "6-31++G 6-31G plus diffuse functions on all atoms", "6-311++G 6-311G plus diffuse functions on all atoms", "3-21++G* 3-21G + diff. + 1 pol. non-hydrogens", "6-31++G* 6-31G + diff. + 1 pol. non-hydrogens", "6-311++G* 6-311G + diff. + 1 pol. non-hydrogens", "3-21++G** 3-21G + diff. + 1 pol. ", "6-31++G** 6-31G + diff. + 1 pol. ", "6-311++G** 6-311G + diff. + 1 pol. ", "3-21++G(2d) 3-21G + diff. + 2 pol. non-hydrogens", "6-31++G(2d) 6-31G + diff. + 2 pol. non-hydrogens", "6-311++G(2d) 6-311G + diff. + 2 pol. non-hydrogens", "3-21++G(2d,2p) 3-21G + diff. + 2 pol.", "6-31++G(2d,2p) 6-31G + diff. + 2 pol.", "6-311++G(2d,2p) 6-311G + diff. + 2 pol.", "3-21++G(2df) 3-21G + diff. + 3 pol. non-hydrogens", "6-31++G(2df) 6-31G + diff. + 3 pol. non-hydrogens", "6-311++G(2df) 6-311G + diff. + 3 pol. non-hydrogens", "3-21++G(2df,2pd) 3-21G + diff. + 3 pol.", "6-31++G(2df,2pd) 6-31G + diff. + 3 pol.", "6-311++G(2df,2pd) 6-311G + diff. + 3 pol.", "3-21++G(3df) 3-21G + diff. + 4 pol. non-hydrogens", "6-31++G(3df) 6-31G + diff. + 4 pol. non-hydrogens", "6-311++G(3df) 6-311G + diff. + 4 pol. non-hydrogens", "3-21++G(3df,3pd) 3-21G + diff. + 4 pol.", "6-31++G(3df,3pd) 6-31G + diff. + 4 pol.", "6-311++G(3df,3pd) 6-311G + diff. + 4 pol.", }; static gchar* listPopleDiffuseAllAtomsBasisReal[] = { "3-21++G", "6-31++G", "6-311++G", "3-21++G*", "6-31++G*", "6-311++G*", "3-21++G**", "6-31++G**", "6-311++G**", "3-21++G(2d)", "6-31++G(2d)", "6-311++G(2d)", "3-21++G(2d,2p)", "6-31++G(2d,2p)", "6-311++G(2d,2p)", "3-21++G(2df)", "6-31++G(2df)", "6-311++G(2df)", "3-21++G(2df,2pd)", "6-31++G(2df,2pd)", "6-311++G(2df,2pd)", "3-21++G(3df)", "6-31++G(3df)", "6-311++G(3df)", "3-21++G(3df,3pd)", "6-31++G(3df,3pd)", "6-311++G(3df,3pd)", }; static guint numberOfPopleDiffuseAllAtomsBasis = G_N_ELEMENTS (listPopleDiffuseAllAtomsBasisView); /*************************************************************************************************************/ static gchar* listDunningBasisView[] = { "cc-pVDZ Dunning correlation concisistent polarized double zeta", "Aug-cc-pVDZ Same but including diffuse functions", "cc-pVTZ Dunning correlation concisistent polarized triple zeta", "Aug-cc-pVTZ Same but including diffuse functions(g-functions deleted!)", "cc-pVQZ Dunning correlation concisistent polarized quadruple zeta", "Aug-cc-pVQZ with diffuse functions", "cc-pV5Z Dunning correlation concisistent polarized quintuple zeta", "Aug-cc-pV5Z with diffuse functions", "cc-pV6Z Dunning correlation concisistent polarized sextuple zeta", "Aug-cc-pV6Z ... with diffuse functions", }; static gchar* listDunningBasisReal[] = { "cc-pVDZ", "Aug-cc-pVDZ", "cc-pVTZ", "Aug-cc-pVTZ", "cc-pVQZ", "Aug-cc-pVQZ", "cc-pV5Z", "Aug-cc-pV5Z", "cc-pV6Z", "Aug-cc-pV6Z", }; static guint numberOfDunningBasis = G_N_ELEMENTS (listDunningBasisView); /*************************************************************************************************************/ static gchar* listJensenBasisView[] = { "PC-1 Polarization consistent basis sets (H-Ar) optimized for DFT", "PC-2 double zeta polarization consistent basis sets (H-Ar) optimized for DFT", "PC-3 triple zeta polarization consistent basis sets (H-Ar) optimized for DFT", "PC-4 quadruple zeta polarization consistent basis sets (H-Ar) optimized for DFT", "Aug-PC-1 PC-1 with augmentations by diffuse functions", "Aug-PC-2 PC-2 with augmentations by diffuse functions", "Aug-PC-3 PC-3 with augmentations by diffuse functions", "Aug-PC-4 PC-4 with augmentations by diffuse functions", }; static gchar* listJensenBasisReal[] = { "PC-1", "PC-2", "PC-3", "PC-4", "Aug-PC-1", "Aug-PC-2", "Aug-PC-3", "Aug-PC-4", }; static guint numberOfJensenBasis = G_N_ELEMENTS (listJensenBasisView); /*************************************************************************************************************/ static gchar* listMiscellenousBasisView[] = { "IGLO-II Kutzelniggs basis set for NMR and EPR calculations", "IGLO-III Kutzelniggs basis set for NMR and EPR calculations (accurate)", }; static gchar* listMiscellenousBasisReal[] = { "IGLO-II", "IGLO-III", }; static guint numberOfMiscellenousBasis = G_N_ELEMENTS (listMiscellenousBasisView); /*************************************************************************************************************/ static gchar* listAuxBasisView[] = { "cc-pVDZ-RI", "cc-pVTZ-RI", "cc-pVQZ-RI", "cc-pV5Z-RI", "cc-pV6Z-RI", "pCVDZ-RI", }; static gchar* listAuxBasisReal[] = { "cc-pVDZ-RI", "cc-pVTZ-RI", "cc-pVQZ-RI", "cc-pV5Z-RI", "cc-pV6Z-RI", "pCVDZ-RI", }; static guint numberOfAuxBasis = G_N_ELEMENTS (listAuxBasisView); /*************************************************************************************************************/ static void setPsicodeBasis(GtkWidget* comboBasis) { gint i; if(strcmp(selectedTypeBasis, "Pople")==0) { listBasisView = listPopleBasisView; listBasisReal = listPopleBasisReal; numberOfBasis = numberOfPopleBasis; } else if(strcmp(selectedTypeBasis, "PopleDiffuseNonHydrogen")==0) { listBasisView = listPopleDiffuseNonHydrogenBasisView; listBasisReal = listPopleDiffuseNonHydrogenBasisReal; numberOfBasis = numberOfPopleDiffuseNonHydrogenBasis; } else if(strcmp(selectedTypeBasis, "PopleDiffuseAllAtoms")==0) { listBasisView = listPopleDiffuseAllAtomsBasisView; listBasisReal = listPopleDiffuseAllAtomsBasisReal; numberOfBasis = numberOfPopleDiffuseAllAtomsBasis; } else if(strcmp(selectedTypeBasis, "Dunning")==0) { listBasisView = listDunningBasisView; listBasisReal = listDunningBasisReal; numberOfBasis = numberOfDunningBasis; } else if(strcmp(selectedTypeBasis, "Jensen")==0) { listBasisView = listJensenBasisView; listBasisReal = listJensenBasisReal; numberOfBasis = numberOfJensenBasis; } else { listBasisView = listMiscellenousBasisView; listBasisReal = listMiscellenousBasisReal; numberOfBasis = numberOfMiscellenousBasis; } if (comboBasis && GTK_IS_COMBO_BOX(comboBasis)) { GtkTreeModel * model = NULL; model = gtk_combo_box_get_model(GTK_COMBO_BOX(comboBasis)); gtk_list_store_clear(GTK_LIST_STORE(model)); for(i=0;ichild; g_object_set_data(G_OBJECT (entry), "Combo",combo); return entry; } /***********************************************************************************************/ void addPsicodeTypeBasisToTable(GtkWidget *table, gint i, GtkWidget* comboBasis) { GtkWidget* combo = NULL; add_label_table(table,_("Type"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); combo = create_list_type_basis(comboBasis); gtk_table_attach(GTK_TABLE(table),combo,2,2+1,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); } /***********************************************************************************************/ GtkWidget* addPsicodeBasisToTable(GtkWidget *table, gint i) { GtkWidget* entryBasis = NULL; GtkWidget* comboBasis = NULL; gint nlistBasis = 1; gchar* listBasis[] = {" "}; add_label_table(table,_("Basis"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryBasis = addComboListToATable(table, listBasis, nlistBasis, i, 2, 1); comboBasis = g_object_get_data(G_OBJECT (entryBasis), "Combo"); gtk_widget_set_sensitive(entryBasis, FALSE); g_signal_connect(G_OBJECT(entryBasis),"changed", G_CALLBACK(changedEntryBasis),NULL); return comboBasis; } /***********************************************************************************************/ void addPsicodeAuxBasisToTable(GtkWidget *table, gint i, GtkWidget* comboMethod, GtkWidget* comboExcited) { GtkWidget* entryAuxBasis = NULL; GtkWidget* comboAuxBasis = NULL; GtkWidget* label = NULL; label = add_label_table(table,_("Auxiliary basis"),(gushort)i,0); if(comboMethod) g_object_set_data(G_OBJECT (comboMethod), "LabelAuxBasis1", label); if(comboExcited) g_object_set_data(G_OBJECT (comboExcited), "LabelAuxBasis1", label); label = add_label_table(table,":",(gushort)i,1); if(comboMethod) g_object_set_data(G_OBJECT (comboMethod), "LabelAuxBasis2", label); if(comboExcited) g_object_set_data(G_OBJECT (comboExcited), "LabelAuxBasis2", label); entryAuxBasis = addComboListToATable(table, listAuxBasisView, numberOfAuxBasis, i, 2, 1); comboAuxBasis = g_object_get_data(G_OBJECT (entryAuxBasis), "Combo"); gtk_widget_set_sensitive(entryAuxBasis, FALSE); if(comboMethod) g_object_set_data(G_OBJECT (comboMethod), "ComboAuxBasis", comboAuxBasis); if(comboExcited) g_object_set_data(G_OBJECT (comboExcited), "ComboAuxBasis", comboAuxBasis); g_signal_connect(G_OBJECT(entryAuxBasis),"changed", G_CALLBACK(changedEntryAuxBasis),NULL); psicodeMolecule.auxBasisName=g_strdup(listAuxBasisReal[0]); } /***********************************************************************************************/ static void putPsicodeBasisInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"set basis %s\n\n",psicodeBasis.name); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } /***********************************************************************************************/ void putPsicodeAuxBasisInTextEditor() { gchar buffer[BSIZE]; if(!psicodeMolecule.auxBasisName) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &psicodeColorFore.keyWord, &psicodeColorBack.keyWord, "\nbasis \"ri-mp2 basis\" spherical\n", -1); sprintf(buffer," * library %s",psicodeMolecule.auxBasisName); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &psicodeColorFore.keyWord, &psicodeColorBack.keyWord, "\nend\n", -1); } /***********************************************************************************************/ void putPsicodeBasisInfoInTextEditor() { putPsicodeBasisInTextEditor(); } GabeditSrc250/src/Psicode/PsicodeBasis.h0000644000175100017510000000075513130665225020400 0ustar alloucheallouche #ifndef __GABEDIT_PSICODEBASIS_H__ #define __GABEDIT_PSICODEBASIS_H__ void initPsicodeBasis(); void freePsicodeBasis(); void addPsicodeTypeBasisToTable(GtkWidget *table, gint i, GtkWidget* comboBasis); GtkWidget* addPsicodeBasisToTable(GtkWidget *table, gint i); void addPsicodeAuxBasisToTable(GtkWidget *table, gint i, GtkWidget* comboMethod, GtkWidget* comboExcited); void putPsicodeBasisInfoInTextEditor(); void putPsicodeAuxBasisInTextEditor(); #endif /* __GABEDIT_PSICODEBASIS_H__ */ GabeditSrc250/src/Psicode/Dep.mk0000644000175100017510000000477713130664665016737 0ustar alloucheallouchePsicode.o: Psicode.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Psicode/PsicodeTypes.h \ ../Psicode/PsicodeGlobal.h ../Psicode/PsicodeMolecule.h \ ../Psicode/PsicodeKeywords.h ../Psicode/PsicodeBasis.h \ ../Psicode/PsicodeGuess.h ../Utils/UtilsInterface.h \ ../Geometry/GeomGlobal.h ../Geometry/InterfaceGeom.h ../Utils/Utils.h \ ../Utils/AtomsProp.h ../Utils/Constants.h ../Utils/GabeditTextEdit.h PsicodeMolecule.o: PsicodeMolecule.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Psicode/PsicodeTypes.h \ ../Psicode/PsicodeGlobal.h ../Psicode/PsicodeKeywords.h \ ../Geometry/GeomGlobal.h ../Geometry/GeomConversion.h \ ../Geometry/GeomXYZ.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/Constants.h \ ../Utils/GabeditTextEdit.h ../Geometry/InterfaceGeom.h \ ../Common/Windows.h ../Utils/AtomsProp.h ../Symmetry/MoleculeSymmetry.h \ ../Symmetry/MoleculeSymmetryInterface.h PsicodeKeywords.o: PsicodeKeywords.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Psicode/PsicodeTypes.h \ ../Psicode/PsicodeGlobal.h ../Psicode/PsicodeMolecule.h \ ../Psicode/PsicodeBasis.h ../Psicode/PsicodeGuess.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/GabeditTextEdit.h \ ../Common/Windows.h ../Utils/Constants.h PsicodeGuess.o: PsicodeGuess.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Psicode/PsicodeTypes.h \ ../Psicode/PsicodeGlobal.h ../Psicode/PsicodeBasis.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/GabeditTextEdit.h \ ../Common/Windows.h ../Utils/Constants.h PsicodeBasis.o: PsicodeBasis.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Psicode/PsicodeTypes.h \ ../Psicode/PsicodeGlobal.h ../Geometry/GeomGlobal.h \ ../Geometry/GeomConversion.h ../Geometry/GeomXYZ.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/Constants.h \ ../Geometry/InterfaceGeom.h ../Common/Windows.h ../Utils/AtomsProp.h \ ../Utils/GabeditTextEdit.h ../Symmetry/MoleculeSymmetry.h \ ../Symmetry/MoleculeSymmetryInterface.h GabeditSrc250/src/Psicode/PsicodeTypes.h0000644000175100017510000000323513130665225020437 0ustar alloucheallouche #ifndef __GABEDIT_PSICODETYPES_H__ #define __GABEDIT_PSICODETYPES_H__ typedef struct _PsicodeColorBack { GdkColor keyWord; GdkColor description; }PsicodeColorBack; typedef struct _PsicodeColorFore { GdkColor keyWord; GdkColor description; }PsicodeColorFore; typedef struct _PsicodeAtom { gdouble position[3]; gchar* symbol; }PsicodeAtom; typedef struct _PsicodeMolecule { gint numberOfAtoms; gint totalNumberOfElectrons; gint numberOfValenceElectrons; PsicodeAtom* listOfAtoms; gchar* auxBasisName; }PsicodeMolecule; typedef struct _PsicodeBasis { gchar* name; gchar* molecule; int numberOfBasisTypes; gchar** basisNames; }PsicodeBasis; typedef struct _PsicodeGuessWaveFunction { gboolean fromHCore; gchar* method; gchar* functional; gchar* molecule; gchar* basis; gchar* memory; gint totalCharge; gint spinMultiplicity; }PsicodeGuessWaveFunction; typedef enum { LSDAC = 0, PBEC, PW91C, P86C, NewP86C, VWN1LC, VWN1LCRPA, VWN2LC, VWN3LC, VWN4LC, VWN5LC, PW92LC, PZ81LC, LYPC, HFX, Xalpha, SlaterX, Becke88X, PBEX, PW86X, PW91X, mPW91_B88X, mPW91_PW91X,mPW91_mPW91X, G96X } PsicodeFunctionalType; typedef enum { XALPHA = 0, HFS, HFB, HFG96, G96LYP, BLYP, SVWN1, SVWN1RPA, SVWN2, SVWN3, SVWN4, SVWN5, SPZ81, SPW92, BPW91, BP86, B3LYP, B3PW91, B3P86, PBE, PW91, mPW_PW91_PW91, mPWPW91, mPW1PW91 } PsicodeStdFunctionalType; typedef struct _PsicodeFunctional { PsicodeFunctionalType type; gchar* name; gchar* comment; }PsicodeFunctional; typedef struct _PsicodeStdFunctional { PsicodeStdFunctionalType type; gchar* name; gint n; PsicodeFunctionalType* listOfTypes; gdouble* coefficients; }PsicodeStdFunctional; #endif /* __GABEDIT_PSICODETYPES_H__ */ GabeditSrc250/src/Psicode/PsicodeKeywords.h0000644000175100017510000000056113130665225021141 0ustar alloucheallouche#ifndef __GABEDIT_PSICODEKEYWORDS_H__ #define __GABEDIT_PSICODEKEYWORDS_H__ gchar* getPsicodeTypeMethod(); gchar* getPsicodeExcitedMethod(); gboolean psicodeSemiEmperical(); void putPsicodeKeywordsInfoInTextEditor(); void createPsicodeKeywordsFrame(GtkWidget *win, GtkWidget *box); void setPsicodeSCFMethod(gboolean okRHF); #endif /* __GABEDIT_PSICODEKEYWORDS_H__ */ GabeditSrc250/src/Psicode/PsicodeGlobal.h0000644000175100017510000000064113130665225020531 0ustar alloucheallouche #ifndef __GABEDIT_PSICODEGLOBAL_H__ #define __GABEDIT_PSICODEGLOBAL_H__ GtkWidget* psicodeWin; PsicodeMolecule psicodeMolecule; PsicodeColorFore psicodeColorFore; PsicodeColorBack psicodeColorBack; PsicodeBasis psicodeBasis; PsicodeGuessWaveFunction psicodeGuessWaveFunction; PsicodeFunctional* functionals; PsicodeStdFunctional* stdFunctionals; gdouble* sumFunctionals; #endif /* __GABEDIT_PSICODEGLOBAL_H__ */ GabeditSrc250/src/Psicode/PsicodeGuess.c0000644000175100017510000001446713130665225020425 0ustar alloucheallouche/* PsicodeGuess.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Psicode/PsicodeTypes.h" #include "../Psicode/PsicodeGlobal.h" #include "../Psicode/PsicodeBasis.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget *guessFrame = NULL; /*************************************************************************************************************/ static gchar* listGuessMethodView[] = { "Default", "Superposition of Atomic Densities", "Generalized olfsberg-Helmholtz", }; static gchar* listGuessMethodReal[] = { "NONE", "SAD", "GWH", }; static guint numberOfGuessMethods = G_N_ELEMENTS (listGuessMethodView); static gchar selectedGuessMethod[BSIZE]="NONE"; /*************************************************************************************************************/ void initPsicodeGuessFrame() { guessFrame = NULL; } /*************************************************************************************************************/ static void putPsicodeGuessOptionsInfoInTextEditor() { } /************************************************************************************************************/ static void putPsicodeGuessMethodInfoInTextEditor() { if( strcmp(selectedGuessMethod,"NONE")==0 ) return; { gchar buffer[BSIZE]; sprintf(buffer,"set guess %s\n",selectedGuessMethod); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } } /*************************************************************************************************************/ void putPsicodeGuessInfoInTextEditor() { putPsicodeGuessMethodInfoInTextEditor(); putPsicodeGuessOptionsInfoInTextEditor(); } /************************************************************************************************************/ static void traitementGuessMethod (GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; gchar* res = NULL; gint i; /* gchar* s;*/ if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } for(i=0;i Dep.mk -include Dep.mk GabeditSrc250/src/QFF/Gabedit2MRQFF.h0000644000175100017510000000271313130665225017267 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GABEDITQFFGAUSSIAN_H___H__ #define __GABEDIT_GABEDITQFFGAUSSIAN_H___H__ void read_2mrqff_file_dlg(); #endif /* __GABEDIT_GABEDITQFFGAUSSIAN_H___H__ */ GabeditSrc250/src/QFF/Dep.mk0000644000175100017510000000060713130664665015751 0ustar allouchealloucheGabedit2MRQFF.o: Gabedit2MRQFF.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/AtomsProp.h ../Utils/Utils.h ../Utils/UtilsInterface.h \ ../Files/FileChooser.h ../Files/FolderChooser.h \ ../Files/GabeditFolderChooser.h ../Common/Help.h ../Common/StockIcons.h \ ../Utils/GabeditTextEdit.h GabeditSrc250/src/QFF/Gabedit2MRQFF.c0000644000175100017510000013123513130665225017264 0ustar alloucheallouche/* Gabedit2MRTWOMRQFF.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Files/FileChooser.h" #include "../Files/FolderChooser.h" #include "../Files/GabeditFolderChooser.h" #include "../Common/Help.h" #include "../Common/StockIcons.h" #include "../Utils/GabeditTextEdit.h" #define DEBUGFLAG 0 /************************************************************************************************************/ typedef struct _TWOMRQFFDipole { gdouble values[3]; }TWOMRQFFDipole; typedef struct _TWOMRQFFAtom { gchar* symbol; gdouble coordinates[3]; }TWOMRQFFAtom; typedef struct _TWOMRQFFGeom { gint numberOfAtoms; TWOMRQFFAtom* atoms; }TWOMRQFFGeom; typedef struct _TWOMRQFF { gint numberOfFrequencies; gdouble* gradients; gdouble* frequencies; gint numberOfFirstDipolesInput; gint numberOfEnergies; gint numberOfDipoles; gdouble** firstDipolesInput; gdouble* calculatedFrequencies; gdouble* mass; gdouble* delta;//[i:0..Nfreq] gdouble V0; gdouble **VI; // [i:0..Nfreq][0..5] gdouble ***VIJ; // [i:0..Nfreq][j:0..Nfreq][0..3] gdouble ***VI3J; // [i:0..Nfreq][j:0..Nfreq][0..3] gdouble** cubicEnergies;//[i:0..Nfreq][j:0..Nfreq] for tiii, tiij gdouble** quarticEnergiesIIJJ;//[i:0..Nfreq][j:0..i-1] for uiijj gdouble** quarticEnergiesIIIJ;//[i:0..Nfreq][j:0..Nfreq] for uiiij and uiiii gdouble *dipole0; // [0..2] // 0..2 : x,y,z gdouble ***dipolesI; // mu[i:0..Nfreq][0..5][0..2] // 0..2 : x,y,z gdouble ****dipolesIJ; // mu[i:0..Nfreq][j:0..Nfreq][0..3][0..2] // 0..2 : x,y,z gdouble ****dipolesI3J; // mu[i:0..Nfreq][j:0..Nfreq][0..3][0..2] // 0..2 : x,y,z gdouble** firstDipoles;//[i:0..Nfreq][0..2] gdouble*** secondDipoles;//[i:0..Nfreq][i:0..Nfreq][0..2] gdouble*** cubicDipoles;//[i:0..Nfreq][i:0..Nfreq][0..2] // diii, diij gdouble*** quarticDipolesIIJJ;//[i:0..Nfreq][j:0..i-1][0..2] for uiijj gdouble*** quarticDipolesIIIJ;//[i:0..Nfreq][j:0..Nfreq][0..2] for uiiij and uiiii TWOMRQFFGeom geom; }TWOMRQFF; /************************************************************************************************************/ static void initTWOMRQFF(TWOMRQFF* qffConstants, gint nf) { gint i; qffConstants->numberOfFrequencies = nf; qffConstants->numberOfFirstDipolesInput = 0; qffConstants->numberOfEnergies = 0; qffConstants->numberOfDipoles = 0; qffConstants->frequencies = newVectorDouble(qffConstants->numberOfFrequencies); initVectorDouble(qffConstants->frequencies, qffConstants->numberOfFrequencies, 0.0); qffConstants->gradients = newVectorDouble(qffConstants->numberOfFrequencies); initVectorDouble(qffConstants->gradients, qffConstants->numberOfFrequencies, 0.0); qffConstants->calculatedFrequencies = newVectorDouble(qffConstants->numberOfFrequencies); initVectorDouble(qffConstants->calculatedFrequencies, qffConstants->numberOfFrequencies, 0.0); qffConstants->mass = newVectorDouble(qffConstants->numberOfFrequencies); initVectorDouble(qffConstants->mass, qffConstants->numberOfFrequencies, 0.0); qffConstants->delta = newVectorDouble(qffConstants->numberOfFrequencies); initVectorDouble(qffConstants->delta, qffConstants->numberOfFrequencies, 0.0); qffConstants->V0 = 0; qffConstants->VI = newMatrixDouble(qffConstants->numberOfFrequencies,6); initMatrixDouble(qffConstants->VI, qffConstants->numberOfFrequencies,6, 0.0); qffConstants->cubicEnergies = newMatrixDouble(qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies); initMatrixDouble(qffConstants->cubicEnergies, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies, 0.0); qffConstants->quarticEnergiesIIJJ = newMatrixDouble(qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies); initMatrixDouble(qffConstants->quarticEnergiesIIJJ, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies, 0.0); qffConstants->quarticEnergiesIIIJ = newMatrixDouble(qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies); initMatrixDouble(qffConstants->quarticEnergiesIIIJ, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies, 0.0); qffConstants->quarticDipolesIIJJ = newCubeDouble(qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies,3); initCubeDouble(qffConstants->quarticDipolesIIJJ, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies,3, 0.0); qffConstants->quarticDipolesIIIJ = newCubeDouble(qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies,3); initCubeDouble(qffConstants->quarticDipolesIIIJ, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies,3, 0.0); qffConstants->firstDipoles = newMatrixDouble(qffConstants->numberOfFrequencies,3); initMatrixDouble(qffConstants->firstDipoles, qffConstants->numberOfFrequencies,3, 0.0); qffConstants->firstDipolesInput = newMatrixDouble(qffConstants->numberOfFrequencies,3); initMatrixDouble(qffConstants->firstDipolesInput, qffConstants->numberOfFrequencies,3, 0.0); qffConstants->VIJ = newCubeDouble(qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies,4); initCubeDouble(qffConstants->VIJ, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies,4,0.0); qffConstants->VI3J = newCubeDouble(qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies,4); initCubeDouble(qffConstants->VI3J, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies,4,0.0); qffConstants->dipole0 = newVectorDouble(3); initVectorDouble(qffConstants->dipole0,3,0.0); qffConstants->dipolesI = newCubeDouble(qffConstants->numberOfFrequencies,6,3); initCubeDouble(qffConstants->dipolesI, qffConstants->numberOfFrequencies,6,3,0.0); qffConstants->secondDipoles = newCubeDouble(qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies,3); initCubeDouble(qffConstants->secondDipoles, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies,3,0.0); qffConstants->cubicDipoles = newCubeDouble(qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies,3); initCubeDouble(qffConstants->cubicDipoles, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies,3,0.0); qffConstants->dipolesIJ = newQuarticDouble(qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies,4,3); initQuarticDouble(qffConstants->dipolesIJ, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies,4,3,0.0); qffConstants->dipolesI3J = newQuarticDouble(qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies,4,3); initQuarticDouble(qffConstants->dipolesI3J, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies,4,3,0.0); qffConstants->geom.numberOfAtoms = 0; qffConstants->geom.atoms = NULL; } /************************************************************************************************************/ static void freeTWOMRQFF(TWOMRQFF* qffConstants) { freeVectorDouble(&qffConstants->frequencies); freeVectorDouble(&qffConstants->gradients); freeVectorDouble(&qffConstants->calculatedFrequencies); freeVectorDouble(&qffConstants->mass); freeVectorDouble(&qffConstants->delta); freeMatrixDouble(&qffConstants->VI, qffConstants->numberOfFrequencies); freeMatrixDouble(&qffConstants->cubicEnergies, qffConstants->numberOfFrequencies); freeMatrixDouble(&qffConstants->quarticEnergiesIIJJ, qffConstants->numberOfFrequencies); freeMatrixDouble(&qffConstants->quarticEnergiesIIIJ, qffConstants->numberOfFrequencies); freeCubeDouble(&qffConstants->quarticDipolesIIJJ, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies); freeCubeDouble(&qffConstants->quarticDipolesIIIJ, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies); freeMatrixDouble(&qffConstants->firstDipoles, qffConstants->numberOfFrequencies); freeMatrixDouble(&qffConstants->firstDipolesInput, qffConstants->numberOfFrequencies); freeCubeDouble(&qffConstants->VIJ, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies); freeCubeDouble(&qffConstants->VI3J, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies); freeVectorDouble(&qffConstants->dipole0); freeCubeDouble(&qffConstants->dipolesI, qffConstants->numberOfFrequencies,6); freeCubeDouble(&qffConstants->secondDipoles, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies); freeCubeDouble(&qffConstants->cubicDipoles, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies); freeQuarticDouble(&qffConstants->dipolesIJ, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies,4); freeQuarticDouble(&qffConstants->dipolesI3J, qffConstants->numberOfFrequencies,qffConstants->numberOfFrequencies,4); } /********************************************************************************/ static void save_result(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; GtkWidget *textResult = NULL; gchar *temp; FILE *file; gint i; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } textResult = g_object_get_data (G_OBJECT (SelecFile), "TextWidget"); if(!textResult) return; gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); file = FOpen(fileName, "wb"); if(file == NULL) { Message(_("Sorry, I can not save file"),_("Error"),TRUE); return; } temp=gabedit_text_get_chars(textResult,0,-1); /* for(i=0;inumberOfFrequencies; GtkWidget* resultWindow = createResultWindow("TWOMRQFF constants",qffConstants); GtkWidget* textResult = g_object_get_data (G_OBJECT (resultWindow), "TextWidget"); gint t; gchar txyz[]={'X','Y','Z'}; gint xyz; sprintf(tmp, "#====================================================================================\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); sprintf(tmp,"%s", "# 2MR-QFF constants\n" "# See Yagi et al. J. Chem. Phys. 121, 1383 (2004)\n" ); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); sprintf(tmp, "#====================================================================================\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"\n",-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"VPT2Model=GVPT2\n",-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"# VPT2Model=DCPT2\n",-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"# VPT2Model=HDCPT2\n",-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"# alphaHDCPT2=1.0\n",-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"# betaHDCPT2=5e5\n",-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"\n",-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"PropModel=GVPT2\n",-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"# PropModel=HDCPT2\n",-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"# PropModel=DCPT2\n",-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"# alphaPropHDCPT2=1.0\n",-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"# betaPropHDCPT2=5e5\n",-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"# alphaPropHDCPT2=1.0\n",-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"# betaPropHDCPT2=5e5\n",-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"maxFrequencyDifferenceFermi=200\n",-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"MartinCutOff1=1.0\n",-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"MartinCutOff2=1.0\n",-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"# ZCutOff=0.08\n",-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"\n",-1); sprintf(tmp, "#====================================================================================\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"\n",-1); sprintf(tmp,"nFrequencies=%d\n",nf); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); sprintf(tmp,"nDim=%d\n",3); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"\n",-1); sprintf(tmp,"#i Freq(cm-1) Calc.Freq dQ(Bohr) Mass(amu)\tGradient[ H amu^(-1/2) Bohr^(-1)]\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"Hessian\n",-1); for(i=0;ifrequencies[i], qffConstants->calculatedFrequencies[i], qffConstants->delta[i], qffConstants->mass[i], qffConstants->gradients[i]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); } gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"END\n\n",-1); sprintf(tmp,"# i\tj\tk\tReduced values [cm-1]\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"Cubic\n",-1); for(i=0;icubicEnergies[i][j])<1e-12) continue; sprintf(tmp,"%d\t%d\t%d\t%14.6f\n",i+1, i+1, j+1, qffConstants->cubicEnergies[i][j]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); } } gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"END\n\n",-1); sprintf(tmp,"# i\tj\tk\tl\tReduced values [cm-1]\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"Quartic\n",-1); for(i=0;iquarticEnergiesIIJJ[i][j])<1e-12) continue; sprintf(tmp,"%d\t%d\t%d\t%d\t%14.6f\n",i+1, i+1, j+1, j+1, qffConstants->quarticEnergiesIIJJ[i][j]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); } for(j=0;jquarticEnergiesIIIJ[i][j])<1e-12) continue; sprintf(tmp,"%d\t%d\t%d\t%d\t%14.6f\n",i+1, i+1, i+1, j+1, qffConstants->quarticEnergiesIIIJ[i][j]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); } } gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"END\n\n",-1); if(qffConstants->numberOfFirstDipolesInput==0) { sprintf(tmp,"#xyz\ti\tValues[au cm^1/2]\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"First derivatives\n",-1); for(i=0;ifirstDipoles[i][xyz])<1e-12) continue; sprintf(tmp,"%c\t%d\t%14.6f\n",txyz[xyz], i+1,qffConstants->firstDipoles[i][xyz]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); } gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"END\n\n",-1); } else { sprintf(tmp,"#xyz\ti\tInput values[au cm^1/2]\tCalculated values[au cm^1/2]\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"First derivatives\n",-1); for(i=0;ifirstDipolesInput[i][xyz])<1e-12) continue; sprintf(tmp,"%c\t%d\t%14.6f\t\t%14.6f\n",txyz[xyz], i+1,qffConstants->firstDipolesInput[i][xyz], qffConstants->firstDipoles[i][xyz]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); } gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"END\n\n",-1); } sprintf(tmp,"#xyz\ti\tj\tValues[au cm]\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"Second derivatives\n",-1); for(i=0;isecondDipoles[i][j][xyz])<1e-12) continue; sprintf(tmp,"%c\t%d\t%d\t%14.6f\n",txyz[xyz], i+1,j+1,qffConstants->secondDipoles[i][j][xyz]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); } gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"END\n\n",-1); sprintf(tmp,"#xyz\ti\tj\tk\tValues[au cm^3/2]\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"Cubic derivatives\n",-1); for(i=0;icubicDipoles[i][j][xyz])<1e-12) continue; sprintf(tmp,"%c\t%d\t%d\t%d\t%14.6f\n",txyz[xyz], i+1,i+1,j+1,qffConstants->cubicDipoles[i][j][xyz]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); if(i!=j) { sprintf(tmp,"%c\t%d\t%d\t%d\t%14.6f\n",txyz[xyz], i+1,j+1,i+1,qffConstants->cubicDipoles[i][j][xyz]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); sprintf(tmp,"%c\t%d\t%d\t%d\t%14.6f\n",txyz[xyz], j+1,i+1,i+1,qffConstants->cubicDipoles[i][j][xyz]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); } } gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"END\n\n",-1); gtk_widget_show_all(resultWindow); } /************************************************************************************************************/ static void printTWOMRQFF(TWOMRQFF* qffConstants) { gint i,j; gint t; gint nf = qffConstants->numberOfFrequencies; printf("nf = %d\n",nf); for(i=0;ifrequencies[i], qffConstants->calculatedFrequencies[i], qffConstants->delta[i], qffConstants->mass[i]); } } /************************************************************************************************************/ static gboolean readFrequenciesInitTWOMRQFF(FILE* file, TWOMRQFF* qffConstants) { gchar t[BSIZE]; gint nf = 0; gboolean Ok = TRUE; gdouble d = 0; gint nn=1; gdouble dum; gint i; if(!goToStr(file, "Frequencies")) { fprintf(stderr,"I cannot read the harmonic frequencies\nChech your input file\n"); return FALSE; } while(!feof(file)) { if(!fgets(t,BSIZE,file))break; nn = sscanf(t,"%lf",&dum); if(nn<1) break; nf++; } if(nf==0) { fprintf(stderr,"I cannot read the harmonic frequencies\nChech your input file\n"); return FALSE; } initTWOMRQFF(qffConstants,nf); rewind(file); goToStr(file, "Frequencies"); for(i=0;ifrequencies[i]); if(nn<1) break; } qffConstants->numberOfFirstDipolesInput = 0; if(nn==1) { rewind(file); if(goToStr(file, "First derivatives")) for(i=0;ifirstDipolesInput[i][xyz]); qffConstants->numberOfFirstDipolesInput+= nn; } if(qffConstants->numberOfFirstDipolesInput != nf) qffConstants->numberOfFirstDipolesInput=0; } if(nn!=1) Ok = FALSE; return Ok; } /************************************************************************************************************/ static gboolean readVectorReal(FILE* file, gchar* tag, gint n, gdouble* values) { gchar* TAG = NULL; int i=0; int ii; double v; int nn = 0; if(!tag) return FALSE; if(!values) return FALSE; TAG = g_strdup(tag); uppercase(TAG); rewind(file); if(!goToStr(file, TAG)) { fprintf(stderr,"I cannot find %s in our file\n",tag); if(TAG) g_free(TAG); return FALSE; } for(i=0;inumberOfEnergies = 0; nn = fscanf(file,"%lf",&qffConstants->V0); qffConstants->numberOfEnergies += nn; for(i=0;inumberOfFrequencies && nn==1;i++) for(k=0;k<6 && nn==1;k++) { nn = fscanf(file,"%lf",&qffConstants->VI[i][k]); qffConstants->numberOfEnergies += nn; if(nn!=1) break; } if(i!=qffConstants->numberOfFrequencies || k!=6) { fprintf(stderr,"I cannot read the 1MR energies\n"); return FALSE; } for(j=0;jnumberOfFrequencies && nn==1;j++) { for(i=0;iVIJ[j][i][k]); qffConstants->numberOfEnergies += nn; if(nn!=1) break; } if(nn==1) { qffConstants->VIJ[i][j][0] = qffConstants->VIJ[j][i][0]; qffConstants->VIJ[i][j][1] = qffConstants->VIJ[j][i][2]; qffConstants->VIJ[i][j][2] = qffConstants->VIJ[j][i][1]; qffConstants->VIJ[i][j][3] = qffConstants->VIJ[j][i][3]; } } for(i=0;inumberOfFrequencies && nn==1;i++) { if(i==j) continue; for(k=0;k<4 && nn==1;k++) { nn = fscanf(file,"%lf",&qffConstants->VI3J[j][i][k]); qffConstants->numberOfEnergies += nn; if(nn!=1) break; } } } return TRUE; } /************************************************************************************************************/ static gboolean readDipoles(FILE* file, TWOMRQFF* qffConstants) { gint i = 0; gint j = 0; gint k = 0; gint xyz = 0; int nn=1; gchar* TAG = NULL; TAG = g_strdup("DIPOLES"); uppercase(TAG); rewind(file); if(!goToStr(file, TAG)) { fprintf(stderr,"I cannot find %s in our file\n",TAG); if(TAG) g_free(TAG); return FALSE; } qffConstants->numberOfDipoles = 0; for(xyz=0;xyz<3 && nn==1;xyz++) { nn = fscanf(file,"%lf",&qffConstants->dipole0[xyz]); qffConstants->numberOfDipoles += nn; } if(nn!=1) { fprintf(stderr,"Warning : I cannot read the dipole\n"); if(TAG) g_free(TAG); return FALSE; } for(i=0;inumberOfFrequencies && nn==1;i++) for(k=0;k<6 && nn==1;k++) { for(xyz=0;xyz<3 && nn==1;xyz++) { nn = fscanf(file,"%lf",&qffConstants->dipolesI[i][k][xyz]); qffConstants->numberOfDipoles += nn; } } if(i!=qffConstants->numberOfFrequencies || k!=6 || xyz!=3) { fprintf(stderr,"Warning : I cannot read the 1MR dipoles\n"); if(TAG) g_free(TAG); return FALSE; } for(j=0;jnumberOfFrequencies && nn==1;j++) { for(i=0;idipolesIJ[j][i][k][xyz]); qffConstants->numberOfDipoles += nn; if(nn!=1) break; } } if(nn==1) { for(xyz=0;xyz<3 && nn==1;xyz++) { qffConstants->dipolesIJ[i][j][0][xyz] = qffConstants->dipolesIJ[j][i][0][xyz]; qffConstants->dipolesIJ[i][j][1][xyz] = qffConstants->dipolesIJ[j][i][2][xyz]; qffConstants->dipolesIJ[i][j][2][xyz] = qffConstants->dipolesIJ[j][i][1][xyz]; qffConstants->dipolesIJ[i][j][3][xyz] = qffConstants->dipolesIJ[j][i][3][xyz]; } } } for(i=0;inumberOfFrequencies && nn==1;i++) { if(i==j) continue; for(k=0;k<4 && nn==1;k++) { for(xyz=0;xyz<3 && nn==1;xyz++) { nn = fscanf(file,"%lf",&qffConstants->dipolesI3J[j][i][k][xyz]); qffConstants->numberOfDipoles += nn; qffConstants->dipolesI3J[i][j][k][xyz] = qffConstants->dipolesI3J[j][i][k][xyz]; if(nn!=1) break; } } } } qffConstants->numberOfDipoles /= 3; return TRUE; } /************************************************************************************************************/ static void computeGradients(TWOMRQFF* qffConstants) { gint nf = qffConstants->numberOfFrequencies; gint i; for(i=0;idelta[i]*sqrt(qffConstants->mass[i]*AMU_TO_AU); qffConstants->gradients[i]=( +qffConstants->VI[i][0]+ -9*qffConstants->VI[i][1]+ +45*qffConstants->VI[i][2]+ -45*qffConstants->VI[i][3]+ +9*qffConstants->VI[i][4] -qffConstants->VI[i][5] )/(60.0*di); } } /************************************************************************************************************/ static void computeFrequencies(TWOMRQFF* qffConstants) { gint nf = qffConstants->numberOfFrequencies; gint i; for(i=0;idelta[i]*qffConstants->delta[i]*AMU_TO_AU*qffConstants->mass[i]; gdouble f = 1/di/180; qffConstants->calculatedFrequencies[i]=AU_TO_CM1*sqrt(f*fabs(( 2*qffConstants->VI[i][0]+ -27*qffConstants->VI[i][1]+ +270*qffConstants->VI[i][2]+ -490*qffConstants->V0+ +270*qffConstants->VI[i][3]+ -27*qffConstants->VI[i][4]+ 2*qffConstants->VI[i][5] ))); /* qffConstants->calculatedFrequencies[i]=sqrt(fabs(( qffConstants->VI[i][2] - 2*qffConstants->V0 + qffConstants->VI[i][3] ) /di))*AU_TO_CM1; */ } } /************************************************************************************************************/ static void computeCubicForces(TWOMRQFF* qffConstants) { gint nf = qffConstants->numberOfFrequencies; gint i,j; gdouble f3cm1 = AU_TO_CM1*sqrt(AU_TO_CM1)*AU_TO_CM1; if(nf<1) return; // tiii for(i=0;imass[i]*AMU_TO_AU); gdouble f = 1.0/(8.0*qffConstants->delta[i]*qffConstants->delta[i]*qffConstants->delta[i]*mi*mi*mi); f = f/qffConstants->frequencies[i]/sqrt(qffConstants->frequencies[i])*f3cm1; qffConstants->cubicEnergies[i][i] = f*(-qffConstants->VI[i][0]+8*qffConstants->VI[i][1]-13*qffConstants->VI[i][2]+13*qffConstants->VI[i][3]-8*qffConstants->VI[i][4]+qffConstants->VI[i][5]); /* gdouble mi = sqrt(qffConstants->mass[i]); gdouble f = 1.0/(2.0*qffConstants->delta[i]*qffConstants->delta[i]*qffConstants->delta[i]*mi*mi*mi); qffConstants->cubicEnergies[i][i] = f*(-1*qffConstants->VI[i][1]+2*qffConstants->VI[i][2]-2*qffConstants->VI[i][3]+1*qffConstants->VI[i][4]); */ } // tiij if(qffConstants->numberOfEnergies > 1+6*nf) for(i=0;idelta[i]*qffConstants->delta[i]*qffConstants->mass[i]*AMU_TO_AU); fi = fi/qffConstants->frequencies[i]; for(j=0;jdelta[j]*sqrt(qffConstants->mass[j]*AMU_TO_AU)); fj = fj/sqrt(qffConstants->frequencies[j]); f = fi*fj*f3cm1; qffConstants->cubicEnergies[i][j] = f*( (qffConstants->VIJ[i][j][0]+qffConstants->VIJ[i][j][2]-2*qffConstants->VI[j][2]) -(qffConstants->VIJ[i][j][1]+qffConstants->VIJ[i][j][3]-2*qffConstants->VI[j][3]) ); } } } /************************************************************************************************************/ static void computeQuarticForces(TWOMRQFF* qffConstants) { gint nf = qffConstants->numberOfFrequencies; gdouble f4cm1 = AU_TO_CM1*AU_TO_CM1*AU_TO_CM1; gint i,j; if(nf<1) return; // uiiii for(i=0;imass[i]*AMU_TO_AU)*qffConstants->delta[i]; gdouble f = 1.0/(6.0*mdi*mdi*mdi*mdi)*f4cm1; f = f/(qffConstants->frequencies[i]*qffConstants->frequencies[i]); qffConstants->quarticEnergiesIIJJ[i][i] = f*( -qffConstants->VI[i][0] +12*qffConstants->VI[i][1] -39*qffConstants->VI[i][2] +56*qffConstants->V0 -39*qffConstants->VI[i][3] +12*qffConstants->VI[i][4] -qffConstants->VI[i][5] ); /* gdouble f = 1.0/(mdi*mdi*mdi*mdi)*f4cm1; f = f/(qffConstants->frequencies[i]*qffConstants->frequencies[i]); qffConstants->quarticEnergiesIIJJ[i][i] = f*( qffConstants->VI[i][1] -4*qffConstants->VI[i][2] +6*qffConstants->V0 -4*qffConstants->VI[i][3] +qffConstants->VI[i][4] ); */ qffConstants->quarticEnergiesIIIJ[i][i] = qffConstants->quarticEnergiesIIJJ[i][i]; } // uiiij if(qffConstants->numberOfEnergies > 1+6*nf) for(i=0;imass[i]*AMU_TO_AU)*qffConstants->delta[i]; gdouble fi = 1.0/(16.0*mdi*mdi*mdi); fi = fi/(qffConstants->frequencies[i]*sqrt(qffConstants->frequencies[i])); for(j=0;jdelta[j]*sqrt(qffConstants->mass[j]*AMU_TO_AU)); fj = fj/(sqrt(qffConstants->frequencies[j])); f = fi*fj*f4cm1; qffConstants->quarticEnergiesIIIJ[i][j] = f*( (qffConstants->VI3J[i][j][0]-3*qffConstants->VIJ[i][j][0]+3*qffConstants->VIJ[i][j][2]-qffConstants->VI3J[i][j][2]) -(qffConstants->VI3J[i][j][1]-3*qffConstants->VIJ[i][j][1]+3*qffConstants->VIJ[i][j][3]-qffConstants->VI3J[i][j][3]) ); } } // uiijj if(qffConstants->numberOfEnergies > 1+6*nf) for(i=0;imass[i]*AMU_TO_AU*qffConstants->delta[i]*qffConstants->delta[i]; gdouble f = 1.0/(mdi*mdi)*f4cm1; f = f/(qffConstants->frequencies[i]*qffConstants->frequencies[i]); for(j=0;jquarticEnergiesIIJJ[i][j] = f*( (qffConstants->VIJ[i][j][0]+qffConstants->VIJ[i][j][2]+qffConstants->VIJ[i][j][1]+qffConstants->VIJ[i][j][3]) -2*(qffConstants->VI[i][2]+qffConstants->VI[i][3]+qffConstants->VI[j][2]+qffConstants->VI[j][3]) +4*qffConstants->V0 ); qffConstants->quarticEnergiesIIJJ[j][i] = qffConstants->quarticEnergiesIIJJ[i][j]; } } } /************************************************************************************************************/ static void computeFirstDerivativesDipoles(TWOMRQFF* qffConstants) { gint nf = qffConstants->numberOfFrequencies; gint i; gint xyz = 0; for(i=0;idelta[i]*sqrt(qffConstants->mass[i]*AMU_TO_AU); gdouble f = 1/di; f =f*sqrt(AU_TO_CM1); for(xyz=0;xyz<3;xyz++) qffConstants->firstDipoles[i][xyz]=f*( +qffConstants->dipolesI[i][0][xyz]+ -9*qffConstants->dipolesI[i][1][xyz]+ +45*qffConstants->dipolesI[i][2][xyz]+ -45*qffConstants->dipolesI[i][3][xyz]+ +9*qffConstants->dipolesI[i][4][xyz] -qffConstants->dipolesI[i][5][xyz] ); } } /************************************************************************************************************/ static void changeUnitInputFirstDerivativesDipoles(TWOMRQFF* qffConstants) { gdouble mu0 = 4*PI*1e-7; gdouble eps0 = 1.0/(mu0*slight*slight); gdouble kmmolm1 = 4*PI*PI*PI*NAvogadro/3/hPlank/slight/4/PI/eps0*1e-3*100.0*8.47835267e-30*8.47835267e-30;/* 1e-3 m to km, 100 : cm-1 to m-1 */ gdouble f = 1.0/sqrt(kmmolm1); gint nf = qffConstants->numberOfFrequencies; gint i; gint xyz = 0; if(qffConstants->numberOfFirstDipolesInput==0) return; for(i=0;ifirstDipolesInput[i][xyz] *=f; } } /************************************************************************************************************/ static void computeSecondDerivativesDipoles(TWOMRQFF* qffConstants) { gint nf = qffConstants->numberOfFrequencies; gint i; gint j; gint xyz = 0; // dii for(i=0;idelta[i]*qffConstants->delta[i]*AMU_TO_AU*qffConstants->mass[i]; gdouble f = 1/(180*di); f =f*(AU_TO_CM1); for(xyz=0;xyz<3;xyz++) qffConstants->secondDipoles[i][i][xyz]=f*( 2*qffConstants->dipolesI[i][0][xyz] -27*qffConstants->dipolesI[i][1][xyz] +270*qffConstants->dipolesI[i][2][xyz] -490*qffConstants->dipole0[xyz] +270*qffConstants->dipolesI[i][3][xyz] -27*qffConstants->dipolesI[i][4][xyz] +2*qffConstants->dipolesI[i][5][xyz] ); /* qffConstants->secondDipoles[i][i][xyz]=180*f*( +qffConstants->dipolesI[i][2][xyz] -2*qffConstants->dipole0[xyz] +qffConstants->dipolesI[i][3][xyz] ); */ } // dij if(qffConstants->numberOfEnergies > 1+6*nf) for(i=0;idelta[i]*sqrt(qffConstants->mass[i]*AMU_TO_AU); for(j=0;jdelta[j]*sqrt(qffConstants->mass[j]*AMU_TO_AU); gdouble f = 1.0/(4.0*di*dj); if(i==j) continue; f =f*AU_TO_CM1; for(xyz=0;xyz<3;xyz++) qffConstants->secondDipoles[i][j][xyz]=f*( qffConstants->dipolesIJ[i][j][0][xyz] - qffConstants->dipolesIJ[i][j][1][xyz] - qffConstants->dipolesIJ[i][j][2][xyz] + qffConstants->dipolesIJ[i][j][3][xyz] ); //for(xyz=0;xyz<3;xyz++) //qffConstants->secondDipoles[j][i][xyz]=qffConstants->secondDipoles[i][j][xyz]; } } } /************************************************************************************************************/ static void computeCubicDerivativesDipoles(TWOMRQFF* qffConstants) { gint nf = qffConstants->numberOfFrequencies; gint i,j; gint xyz; if(nf<1) return; // diii for(i=0;imass[i]*AMU_TO_AU); gdouble f = 1.0/(8.0*qffConstants->delta[i]*qffConstants->delta[i]*qffConstants->delta[i]*mi*mi*mi); f =f*AU_TO_CM1*sqrt(AU_TO_CM1); for(xyz=0;xyz<3;xyz++) qffConstants->cubicDipoles[i][i][xyz] = f* ( - qffConstants->dipolesI[i][0][xyz] +8* qffConstants->dipolesI[i][1][xyz] -13*qffConstants->dipolesI[i][2][xyz] +13*qffConstants->dipolesI[i][3][xyz] -8* qffConstants->dipolesI[i][4][xyz] + qffConstants->dipolesI[i][5][xyz] ); //qffConstants->cubicDipoles[i][i][xyz] = f*(qffConstants->dipolesI[i][0][xyz]-3*qffConstants->dipolesI[i][2][xyz]+3*qffConstants->dipolesI[i][3][xyz]-qffConstants->dipolesI[i][5][xyz]); } // tiij if(qffConstants->numberOfEnergies > 1+6*nf) for(i=0;idelta[i]*qffConstants->delta[i]*qffConstants->mass[i]*AMU_TO_AU); for(j=0;jdelta[j]*sqrt(qffConstants->mass[j]*AMU_TO_AU)); f = fi*fj; f =f*AU_TO_CM1*sqrt(AU_TO_CM1); for(xyz=0;xyz<3;xyz++) qffConstants->cubicDipoles[i][j][xyz] = f*( (qffConstants->dipolesIJ[i][j][0][xyz]+qffConstants->dipolesIJ[i][j][2][xyz]-2*qffConstants->dipolesI[j][2][xyz]) -(qffConstants->dipolesIJ[i][j][1][xyz]+qffConstants->dipolesIJ[i][j][3][xyz]-2*qffConstants->dipolesI[j][3][xyz]) ); } } } /************************************************************************************************************/ static void computeQuarticDerivativesDipoles(TWOMRQFF* qffConstants) { gint nf = qffConstants->numberOfFrequencies; gint i,j; gint xyz; if(nf<1) return; // diiii for(i=0;imass[i]*AMU_TO_AU)*qffConstants->delta[i]; gdouble f = 1.0/(6*mdi*mdi*mdi*mdi); f =f*AU_TO_CM1*AU_TO_CM1; for(xyz=0;xyz<3;xyz++) { qffConstants->quarticDipolesIIJJ[i][i][xyz] = f*( -qffConstants->dipolesI[i][0][xyz] +12*qffConstants->dipolesI[i][1][xyz] -39*qffConstants->dipolesI[i][2][xyz] +56*qffConstants->dipole0[xyz] -39*qffConstants->dipolesI[i][3][xyz] +12*qffConstants->dipolesI[i][4][xyz] -qffConstants->dipolesI[i][5][xyz]); qffConstants->quarticDipolesIIIJ[i][i][xyz] = qffConstants->quarticDipolesIIJJ[i][i][xyz]; } } // diiij if(qffConstants->numberOfEnergies > 1+6*nf) for(i=0;imass[i]*AMU_TO_AU)*qffConstants->delta[i]; gdouble fi = 1.0/(16.0*mdi*mdi*mdi); for(j=0;jdelta[j]*sqrt(qffConstants->mass[j]*AMU_TO_AU)); f = fi*fj; f =f*AU_TO_CM1*AU_TO_CM1; for(xyz=0;xyz<3;xyz++) qffConstants->quarticDipolesIIIJ[i][j][xyz] = f*( ( qffConstants->dipolesI3J[i][j][0][xyz] -3*qffConstants->dipolesIJ[i][j][0][xyz] +3*qffConstants->dipolesIJ[i][j][2][xyz] -qffConstants->dipolesI3J[i][j][2][xyz] ) -( qffConstants->dipolesI3J[i][j][1][xyz] -3*qffConstants->dipolesIJ[i][j][1][xyz] +3*qffConstants->dipolesIJ[i][j][3][xyz] -qffConstants->dipolesI3J[i][j][3][xyz] ) ); } } // diijj if(qffConstants->numberOfEnergies > 1+6*nf) for(i=0;imass[i]*AMU_TO_AU*qffConstants->delta[i]*qffConstants->delta[i]; gdouble f = 1.0/(mdi*mdi); f =f*AU_TO_CM1*AU_TO_CM1; for(j=0;jquarticDipolesIIJJ[i][j][xyz] = f*( ( qffConstants->dipolesIJ[i][j][0][xyz] +qffConstants->dipolesIJ[i][j][2][xyz] +qffConstants->dipolesIJ[i][j][1][xyz] +qffConstants->dipolesIJ[i][j][3][xyz] ) -2*( qffConstants->dipolesI[i][2][xyz] +qffConstants->dipolesI[i][3][xyz] +qffConstants->dipolesI[j][2][xyz] +qffConstants->dipolesI[j][3][xyz] ) +4*qffConstants->dipole0[xyz] ); qffConstants->quarticDipolesIIJJ[j][i][xyz] = qffConstants->quarticDipolesIIJJ[i][j][xyz]; } } } } /************************************************************************************************************/ static gboolean read_2mrqff_file(GabeditFileChooser *filesel, gint response_id) { gint nf = 0; gchar* fileName = NULL; TWOMRQFF* qffConstants; gboolean Ok = TRUE; gint i; FILE* file = NULL; if(response_id != GTK_RESPONSE_OK) return FALSE; fileName = gabedit_file_chooser_get_current_file(filesel); file = FOpen(fileName, "rb"); if(!file) { fprintf(stderr,"I cannot open the %s file\n",fileName); return FALSE; } qffConstants = (TWOMRQFF*) g_malloc(sizeof(TWOMRQFF)); qffConstants->numberOfFrequencies = 0; Ok = readFrequenciesInitTWOMRQFF(file, qffConstants); if(Ok) Ok = readVectorReal(file, "Mass", qffConstants->numberOfFrequencies, qffConstants->mass); if(Ok) Ok = readVectorReal(file, "Delta", qffConstants->numberOfFrequencies, qffConstants->delta); if(Ok) Ok = readEnergies(file, qffConstants); if(Ok) readDipoles(file, qffConstants); if(Ok) computeGradients(qffConstants); if(Ok) computeFrequencies(qffConstants); if(Ok) computeCubicForces(qffConstants); if(Ok) computeQuarticForces(qffConstants); if(Ok) changeUnitInputFirstDerivativesDipoles(qffConstants); if(Ok) computeFirstDerivativesDipoles(qffConstants); if(Ok) computeSecondDerivativesDipoles(qffConstants); if(Ok) computeCubicDerivativesDipoles(qffConstants); if(Ok) computeQuarticDerivativesDipoles(qffConstants); /* if(Ok && DEBUGFLAG != 0 ) printTWOMRQFF(qffConstants); */ if(DEBUGFLAG != 0 ) printTWOMRQFF(qffConstants); //if(Ok) showTWOMRQFF(qffConstants); showTWOMRQFF(qffConstants); //printf("numberOfDipoles = %d numberOfEnergies = %d\n",qffConstants->numberOfDipoles,qffConstants->numberOfEnergies); if(qffConstants->numberOfDipoles!=0 && qffConstants->numberOfDipoles != qffConstants->numberOfEnergies) Message(_("????????????Error????????????\nNumber of dipoles != number of energies\n?????????????????????????????"),_("Error"),TRUE); //freeTWOMRQFF(qffConstants); // do not delete it here. It will used to create the data file for VPT2 program return TRUE; } /********************************************************************************/ void read_2mrqff_file_dlg() { GtkWidget* filesel = file_chooser_open(read_2mrqff_file, _("Read the data from 2MR-QFF file"), GABEDIT_TYPEFILE_GABEDIT,GABEDIT_TYPEWIN_OTHER); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } GabeditSrc250/src/Gamess/0000755000175100017510000000000013130743374015503 5ustar allouchealloucheGabeditSrc250/src/Gamess/GamessSCF.h0000644000175100017510000000042713130665225017430 0ustar alloucheallouche#ifndef __GABEDIT_GAMESSSCF_H__ #define __GABEDIT_GAMESSSCF_H__ void initGamessSCFFrame(); void setSensitiveGamessSCFFrame(gboolean sensitive); void putGamessSCFInfoInTextEditor(); void createGamessSCFFrame(GtkWidget *win, GtkWidget *box); #endif /* __GABEDIT_GAMESSSCF_H__ */ GabeditSrc250/src/Gamess/GamessGuess.c0000644000175100017510000002107713130665225020102 0ustar alloucheallouche/* GamessGuess.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Gamess/GamessTypes.h" #include "../Gamess/GamessGlobal.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget *buttonPrintGuess = NULL; static GtkWidget *buttonRotate = NULL; static GtkWidget *guessFrame = NULL; /*************************************************************************************************************/ static gchar* listGuessMethodView[] = { "Huckel", "Core" }; static gchar* listGuessMethodReal[] = { "NONE", "GUESS=HCORE" }; static guint numberOfGuessMethods = G_N_ELEMENTS (listGuessMethodView); static gchar selectedGuessMethod[BSIZE]="NONE"; /*************************************************************************************************************/ void initGamessGuessFrame() { guessFrame = NULL; } /*************************************************************************************************************/ void setSensitiveGamessGuessFrame(gboolean sensitive) { if(!guessFrame) return; gtk_widget_set_sensitive(guessFrame, sensitive); } /*************************************************************************************************************/ static void putGamessGuessOptionsInfoInTextEditor() { if(!GTK_TOGGLE_BUTTON (buttonPrintGuess)->active && !GTK_TOGGLE_BUTTON (buttonRotate)->active) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$GUESS",-1); if(GTK_TOGGLE_BUTTON (buttonPrintGuess)->active) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " PRTMO=.TRUE.",-1); if(GTK_TOGGLE_BUTTON (buttonRotate)->active) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " MIX=.TRUE.",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); } /************************************************************************************************************/ static void putGamessGuessMethodInfoInTextEditor() { if( strcmp(selectedGuessMethod,"NONE")==0 ) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$GUESS",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedGuessMethod,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); } /*************************************************************************************************************/ void putGamessGuessInfoInTextEditor() { putGamessGuessMethodInfoInTextEditor(); putGamessGuessOptionsInfoInTextEditor(); } /************************************************************************************************************/ static void traitementGuessMethod (GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; gchar* res = NULL; gint i; /* gchar* s;*/ if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } for(i=0;iwindow,_("Gamess input")); gtk_window_set_modal (GTK_WINDOW (Wins), TRUE); init_child(Wins, destroyWinsGamess,_(" Gamess input ")); g_signal_connect(G_OBJECT(Wins),"delete_event",(GCallback)destroy_children,NULL); gtk_widget_realize(Wins); button = create_button(Wins,_("Cancel")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK( toCancelWin),GTK_OBJECT(Wins)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show (button); button = create_button(Wins,_("OK")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->vbox), table, FALSE, TRUE, 5); hbox =addHboxToTable(table, 0, 0, 1, 1); hboxSymmetryChargeMultiplicity = hbox; createGamessSymmetryFrame(Wins, hbox); hbox =addHboxToTable(table, 1, 0, 1, 2); initGamessBasisFrame(); initGamessGuessFrame(); initGamessSCFFrame(); createGamessControlFrame(Wins, hbox); createGamessBasisFrame(Wins, hbox); createGamessChargeMultiplicityFrame(hboxSymmetryChargeMultiplicity); hbox =addHboxToTable(table, 2, 0, 1, 2); createGamessGuessFrame(Wins, hbox); createGamessSCFFrame(Wins, hbox); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(putInfoInTextEditor),GTK_OBJECT(Wins)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(destroy_children),GTK_OBJECT(Wins)); gtk_widget_show_all(Wins); gamessWin = Wins; } /************************************************************************************************************/ void newGamess() { gamessInputFileWindow(TRUE); } /************************************************************************************************************/ void insertGamess() { gamessInputFileWindow(FALSE); } GabeditSrc250/src/Gamess/Makefile0000644000175100017510000000067213130664665017155 0ustar allouchealloucheOBJECTS = Gamess.o GamessMolecule.o GamessControl.o GamessBasis.o GamessGuess.o GamessSCF.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/Gamess/GamessBasis.h0000644000175100017510000000044513130665225020056 0ustar alloucheallouche#ifndef __GABEDIT_GAMESSBASIS_H__ #define __GABEDIT_GAMESSBASIS_H__ void initGamessBasisFrame(); void setSensitiveGamessBasisFrame(gboolean sensitive); void putGamessBasisInfoInTextEditor(); void createGamessBasisFrame(GtkWidget *win, GtkWidget *box); #endif /* __GABEDIT_GAMESSBASIS_H__ */ GabeditSrc250/src/Gamess/GamessTypes.h0000644000175100017510000000265313130665225020124 0ustar alloucheallouche #ifndef __GABEDIT_GAMESSTYPES_H__ #define __GABEDIT_GAMESSTYPES_H__ typedef struct _GamessColorBack { GdkColor keyWord; GdkColor description; }GamessColorBack; typedef struct _GamessColorFore { GdkColor keyWord; GdkColor description; }GamessColorFore; typedef struct _GamessAtom { gdouble position[3]; gchar* symbol; }GamessAtom; typedef struct _GamessMolecule { gint numberOfAtoms; gint totalNumberOfElectrons; gint numberOfValenceElectrons; GamessAtom* listOfAtoms; gchar* groupSymmetry; }GamessMolecule; typedef struct _GamessBasis { gchar* name; gchar* molecule; int numberOfBasisTypes; gchar** basisNames; }GamessBasis; typedef enum { LSDAC = 0, PBEC, PW91C, P86C, NewP86C, VWN1LC, VWN1LCRPA, VWN2LC, VWN3LC, VWN4LC, VWN5LC, PW92LC, PZ81LC, LYPC, HFX, Xalpha, SlaterX, Becke88X, PBEX, PW86X, PW91X, mPW91_B88X, mPW91_PW91X,mPW91_mPW91X, G96X } GamessFunctionalType; typedef enum { XALPHA = 0, HFS, HFB, HFG96, G96LYP, BLYP, SVWN1, SVWN1RPA, SVWN2, SVWN3, SVWN4, SVWN5, SPZ81, SPW92, BPW91, BP86, B3LYP, B3PW91, B3P86, PBE, PW91, mPW_PW91_PW91, mPWPW91, mPW1PW91 } GamessStdFunctionalType; typedef struct _GamessFunctional { GamessFunctionalType type; gchar* name; gchar* comment; }GamessFunctional; typedef struct _GamessStdFunctional { GamessStdFunctionalType type; gchar* name; gint n; GamessFunctionalType* listOfTypes; gdouble* coefficients; }GamessStdFunctional; #endif /* __GABEDIT_GAMESSTYPES_H__ */ GabeditSrc250/src/Gamess/GamessMolecule.h0000644000175100017510000000073713130665225020566 0ustar alloucheallouche #ifndef __GABEDIT_GAMESSMOLECULE_H__ #define __GABEDIT_GAMESSMOLECULE_H__ gint getGamessMultiplicity(); void initGamessMoleculeButtons(); void initGamessMolecule(); void freeGamessMolecule(); void putGamessGeometryInfoInTextEditor(); gboolean setGamessMolecule(); void createGamessSymmetryFrame(GtkWidget *win, GtkWidget *box); void createGamessChargeMultiplicityFrame(GtkWidget *box); void putGamessChargeAndSpinInfoInTextEditor(); #endif /* __GABEDIT_GAMESSMOLECULE_H__ */ GabeditSrc250/src/Gamess/GamessBasis.c0000644000175100017510000006563513130665225020065 0ustar alloucheallouche/* GamessBasis.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Gamess/GamessTypes.h" #include "../Gamess/GamessGlobal.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget *buttonDiffuseL = NULL; static GtkWidget *buttonDiffuseS = NULL; static GtkWidget *basisFrame = NULL; static GtkWidget *comboBasisType = NULL; /*************************************************************************************************************/ static gchar* listBasisSetView[] = { "MINI", "MIDI", "STO-2G", "STO-3G", "STO-4G", "STO-5G", "STO-6G", "3-21G", "6-21G", "4-31G", "5-31G", "6-31G", "6-311G", "Double Zeta Valance", "Dunning/Hay DZ", "Triple Zeta Valance", "Mclean/Chandler", "SBKJC Valance", "Hay/Wadt Valance", "cc-pVDz","cc-pVTz","cc-pVQz","cc-pV5z","cc-pV6z", "aug-cc-pVDz","aug-cc-pVTz","aug-cc-pVQz","aug-cc-pV5z","aug-cc-pV6z", "cc-pCVDz","cc-pCVTz","cc-pCVQz","cc-pCV5z","cc-pCV6z", "aug-cc-pCVDz","aug-cc-pCVTz","aug-cc-pCVQz","aug-cc-pCV5z","aug-cc-pCV6z", "PC0","PC1","PC2","PC3","PC4", "APC0","APC1","APC2","APC3","APC4" }; static gchar* listBasisSetReal[] = { "GBASIS=MINI", "GBASIS=MIDI", "GBASIS=STO NGAUSS=2", "GBASIS=STO NGAUSS=3", "GBASIS=STO NGAUSS=4", "GBASIS=STO NGAUSS=5", "GBASIS=STO NGAUSS=6", "GBASIS=N21 NGAUSS=3", "GBASIS=N21 NGAUSS=6", "GBASIS=N31 NGAUSS=4", "GBASIS=N31 NGAUSS=5", "GBASIS=N31 NGAUSS=6", "GBASIS=N311 NGAUSS=6", "GBASIS=DZV", "GBASIS=DH", "GBASIS=TZV", "GBASIS=MC", "GBASIS=SBKJC", "GBASIS=HW", "GBASIS=CCD", "GBASIS=CCT", "GBASIS=CCQ", "GBASIS=CC5", "GBASIS=CC6", "GBASIS=ACCD", "GBASIS=ACCT", "GBASIS=ACCQ", "GBASIS=ACC5", "GBASIS=ACC6", "GBASIS=CCDC", "GBASIS=CCTC", "GBASIS=CCQC", "GBASIS=CC5C", "GBASIS=CC6C", "GBASIS=ACCDC", "GBASIS=ACCTC", "GBASIS=ACCQC", "GBASIS=ACC5C", "GBASIS=ACC6C", "GBASIS=PC0","GBASIS=PC1","GBASIS=PC2","GBASIS=PC3","GBASIS=PC4", "GBASIS=APC0","GBASIS=APC1","GBASIS=APC2","GBASIS=APC3","GBASIS=APC4" }; static guint numberOfBasisSet = G_N_ELEMENTS (listBasisSetView); static gchar selectedBasisSet[BSIZE]="MINI"; /*************************************************************************************************************/ static gchar* listBasisTypeView[] = { N_("Default"),"Cartezian", "Spherical" }; static gchar* listBasisTypeReal[] = { "NONE","ISPHER=0", "ISPHER=1" }; static guint numberOfBasisType = G_N_ELEMENTS (listBasisTypeView); static gchar selectedBasisType[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listBasisDPolView[] = { "0","1", "2","3"}; static gchar* listBasisDPolReal[] = { "NONE","NDFUNC=1", "NDFUNC=2","NDFUNC=3" }; static guint numberOfBasisDPol = G_N_ELEMENTS (listBasisDPolView); static gchar selectedBasisDPol[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listBasisFPolView[] = { "0","1"}; static gchar* listBasisFPolReal[] = { "NONE","NFFUNC=1"}; static guint numberOfBasisFPol = G_N_ELEMENTS (listBasisFPolView); static gchar selectedBasisFPol[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listBasisPPolView[] = { "0","1", "2","3"}; static gchar* listBasisPPolReal[] = { "NONE","NPFUNC=1", "NPFUNC=2","NPFUNC=3" }; static guint numberOfBasisPPol = G_N_ELEMENTS (listBasisPPolView); static gchar selectedBasisPPol[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listBasisPolarView[] = { N_("Default"),"Pople", "Pople N311","Dunning","Huzinaga","Hondo7"}; static gchar* listBasisPolarReal[] = { "NONE","POLAR=POPLE", "POLAR=POPN311","POLAR=DUNNING","POLAR=HUZINAGA","POLAR=HONDO7" }; static guint numberOfBasisPolar = G_N_ELEMENTS (listBasisPolarView); static gchar selectedBasisPolar[BSIZE]="NONE"; /*************************************************************************************************************/ void initGamessBasisFrame() { basisFrame = NULL; } /*************************************************************************************************************/ void setSensitiveGamessBasisFrame(gboolean sensitive) { if(!basisFrame) return; gtk_widget_set_sensitive(basisFrame, sensitive); } /*************************************************************************************************************/ static void putGamessBasisDiffuseFunctions() { if(!GTK_TOGGLE_BUTTON (buttonDiffuseL)->active && !GTK_TOGGLE_BUTTON (buttonDiffuseS)->active) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$BASIS",-1); if(GTK_TOGGLE_BUTTON (buttonDiffuseL)->active) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " DIFFSP=.TRUE.",-1); if(GTK_TOGGLE_BUTTON (buttonDiffuseS)->active) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " DIFFS=.TRUE.",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); } /************************************************************************************************************/ static void putGamessBasisPolInfoInTextEditor() { gchar* s=NULL; if( strcmp(selectedBasisDPol,"NONE")==0 && strcmp(selectedBasisPPol,"NONE")==0 && strcmp(selectedBasisPPol,"NONE")==0 && strcmp(selectedBasisPolar,"NONE")==0 ) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$BASIS",-1); s=selectedBasisDPol; if(strcmp(s,"NONE")!=0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, s,-1); } s=selectedBasisFPol; if(strcmp(s,"NONE")!=0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, s,-1); } s=selectedBasisPPol; if(strcmp(s,"NONE")!=0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, s,-1); } s=selectedBasisPolar; if(strcmp(s,"NONE")!=0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, s,-1); } gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); } /*************************************************************************************************************/ static void putGamessBasisSetInfoInTextEditor() { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$BASIS",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedBasisSet,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); if(strcmp(selectedBasisSet,"GBASIS=SBKJC")==0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ECP=SBKJC",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); } if(strcmp(selectedBasisSet,"GBASIS=HW")==0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ECP=HW",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); } } /*************************************************************************************************************/ static void putGamessBasisTypeInfoInTextEditor() { if(strcmp(selectedBasisType,"NONE")==0)return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedBasisType,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); } /*************************************************************************************************************/ void putGamessBasisInfoInTextEditor() { putGamessBasisSetInfoInTextEditor(); putGamessBasisTypeInfoInTextEditor(); putGamessBasisPolInfoInTextEditor(); putGamessBasisDiffuseFunctions(); } /************************************************************************************************************/ static void setGamessBasisType() { GtkTreeIter iter; if (!comboBasisType) return; if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX(comboBasisType), &iter)) return; if (comboBasisType && GTK_IS_COMBO_BOX(comboBasisType)) { if(strstr(selectedBasisSet,"CC") || strstr(selectedBasisSet,"PC") ) gtk_combo_box_set_active(GTK_COMBO_BOX(comboBasisType), 2); else gtk_combo_box_set_active(GTK_COMBO_BOX(comboBasisType), 0); } } /************************************************************************************************************/ static void traitementBasisSet (GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; gchar* res = NULL; gint i; /* gchar* s;*/ if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } for(i=0;i #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Gamess/GamessTypes.h" #include "../Gamess/GamessGlobal.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget *buttonDirectSCF = NULL; static GtkWidget *buttonChangeFock = NULL; static GtkWidget *buttonUHFNO = NULL; static GtkWidget *scfFrame = NULL; /*************************************************************************************************************/ void initGamessSCFFrame() { scfFrame = NULL; } /*************************************************************************************************************/ void setSensitiveGamessSCFFrame(gboolean sensitive) { if(!scfFrame) return; gtk_widget_set_sensitive(scfFrame, sensitive); } /*************************************************************************************************************/ static void putGamessSCFOptionsInfoInTextEditor() { if(!GTK_TOGGLE_BUTTON (buttonDirectSCF)->active && !GTK_TOGGLE_BUTTON (buttonChangeFock)->active && !GTK_TOGGLE_BUTTON (buttonUHFNO)->active ) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$SCF",-1); if(GTK_TOGGLE_BUTTON (buttonDirectSCF)->active) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " DIRSCF=.TRUE.",-1); if(GTK_TOGGLE_BUTTON (buttonChangeFock)->active) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " FDIFF=.TRUE.",-1); if(GTK_TOGGLE_BUTTON (buttonUHFNO)->active) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " UHFNOS=.TRUE.",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); } /************************************************************************************************************/ void putGamessSCFInfoInTextEditor() { putGamessSCFOptionsInfoInTextEditor(); } /************************************************************************************************************/ void createGamessSCFFrame(GtkWidget *win, GtkWidget *box) { GtkWidget* frame; GtkWidget* vboxFrame; gint l=0; gint c=0; gint ncases=1; GtkWidget *table = gtk_table_new(3,1,FALSE); buttonDirectSCF = NULL; buttonChangeFock = NULL; buttonUHFNO = NULL; frame = gtk_frame_new (_("SCF options")); scfFrame = frame; gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); /*------------------ DIrectSCF -----------------------------------------*/ l=0; c = 0; ncases=1; buttonDirectSCF = gtk_check_button_new_with_label (_("Direct SCF")); gtk_table_attach(GTK_TABLE(table),buttonDirectSCF,c,c+ncases,l,l+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_SHRINK), 2,2); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonDirectSCF), FALSE); /*------------------ ChangeFock ----------------------------------------*/ l++; c = 0; ncases=1; buttonChangeFock = gtk_check_button_new_with_label (_("Compute only change in Fock matrix")); gtk_table_attach(GTK_TABLE(table),buttonChangeFock,c,c+ncases,l,l+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_SHRINK), 2,2); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonChangeFock), FALSE); /*------------------ UHFNO ----------------------------------------*/ l++; c = 0; ncases=1; buttonUHFNO = gtk_check_button_new_with_label (_("Generate UHF Natural Orbitals")); gtk_table_attach(GTK_TABLE(table),buttonUHFNO,c,c+ncases,l,l+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_SHRINK), 2,2); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonUHFNO), FALSE); } GabeditSrc250/src/Gamess/GamessControl.c0000644000175100017510000010253313130665225020431 0ustar alloucheallouche/* GamessRunControl.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Gamess/GamessTypes.h" #include "../Gamess/GamessGlobal.h" #include "../Gamess/GamessMolecule.h" #include "../Gamess/GamessBasis.h" #include "../Gamess/GamessGuess.h" #include "../Gamess/GamessSCF.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget* entrySCFIterations = NULL; static GtkWidget* comboSCF = NULL; static GtkWidget* comboCorrMethod = NULL; static GtkWidget* comboCorrType = NULL; static void setGamessCorrType(); /*************************************************************************************************************/ static gchar* listRunView[] = { N_("Single Point Energy"), N_("Equilibrium geometry"), N_("Transition State"), N_("Frequencies"), "Gradient", "Trudge", "IRC", "VSCF", "DRC", "GlobOp", "OptFMO", "GradExtr", "Surface", "Drop", "Raman", "NMR", "Morokuma", "Transitn", "FField", "TDHF", "MakeFP" }; static gchar* listRunReal[] = { "Energy", "Optimize", "Sadpoint", "Hessian", "Gradient", "Trudge", "IRC", "VSCF", "DRC", "GlobOp", "OptFMO", "GradExtr", "Surface", "Drop", "Raman", "NMR", "Morokuma", "Transitn", "FField", "TDHF", "MakeFP" }; static guint numberOfRuns = G_N_ELEMENTS (listRunView); static gchar selectedRun[BSIZE]="ENERGY"; /*************************************************************************************************************/ static gchar* listSCFView[] = { "RHF", "UHF", "ROHF", "GVB", "MCSCF", "MNDO", "AM1", "PM3", "None" }; static gchar* listSCFReal[] = { "RHF", "UHF", "ROHF", "GVB", "MCSCF", "MNDO", "AM1", "PM3", "NONE" }; static guint numberOfSCF = G_N_ELEMENTS (listSCFView); static gchar selectedSCF[BSIZE]="RHF"; /*************************************************************************************************************/ static gchar* listCorrTypeView[] = { N_("None"), N_("Density Functional Theory"), N_("MP2"), N_("Coupled-Cluster")}; static gchar* listCorrTypeReal[] = { "NONE", "DFTTYP", "MPLEVL=2","CCTYP"}; static guint numberOfCorrType = G_N_ELEMENTS (listCorrTypeView); static gchar selectedCorrType[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listNoneView[] = { N_("None")}; static gchar* listNoneReal[] = { "NONE"}; static guint numberOfNone = G_N_ELEMENTS (listNoneView); static gchar* listMP2View[] = { N_("MP2")}; static gchar* listMP2Real[] = { "MP2"}; static guint numberOfMP2 = G_N_ELEMENTS (listMP2View); static gchar* listDFTView[] = { N_("B3LYP"), N_("BHHLYP (HF and BECKE exchange + LYP Correlation)"), N_("BLYP (Becke exchange + LYP Correlation)"), N_("BVWN (Becke exchange + VWN5 Correlation)"), N_("BOP (Becke exchange + OP Correlation)"), N_("GLYP (GILL exchange + LYP Correlation)"), N_("GVWN (GILL exchange + VWN5 Correlation)"), N_("GOP (GILL exchange + OP Correlation)"), N_("PBELYP (PBE exchange + LYP Correlation)"), N_("PBEVWN (PBE exchange + VWN5 Correlation)"), N_("PBEOP (PBE exchange + OP Correlation)"), N_("SLYP (Slater exchange + LYP Correlation)"), N_("SVWN (Slater exchange + VWN5 Correlation)"), N_("SOP (Slater exchange + OP Correlation)"), N_("SLATER (Exchange)"), N_("BECKE 1988 (Exchange)"), N_("GILL 1996 (Exchange)"), N_("PBE (Exchange only)"), N_("VWN (VWN5 Correlation)"), N_("LYP (Correlation)"), N_("OP (Correlation)") }; static gchar* listDFTReal[] = { "B3LYP", "BHHLYP", "BLYP", "BVWN", "BOP", "GLYP", "GVWN", "GOP", "PBELYP", "PBEVWN", "PBEOP", "SLYP", "SVWN", "SOP", "SLATER", "BECKE", "GILL", "PBE", "VWN", "LYP", "OP", }; static guint numberOfDFT = G_N_ELEMENTS (listDFTView); static gchar* listCCView[] = { "LCCD", "CCD", "CCSD", "CCSD(T)","R-CC","CR-CC","CCSD(TQ)","CR-CC(Q)","EOM-CCSD","CR-EOM" }; static gchar* listCCReal[] = { "LCCD", "CCD", "CCSD", "CCSD(T)","R-CC","CR-CC","CCSD(TQ)","CR-CC(Q)","EOM-CCSD","CR-EOM" }; static guint numberOfCC = G_N_ELEMENTS (listCCView); static guint numberOfCorrMethods = 0; static gchar** listCorrMethodsView = NULL; static gchar** listCorrMethodsReal = NULL; static gchar selectedCorrMethod[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listLocalizedView[] = { N_("None"), "Foster-Boys", "Edmiston-Ruedenberg","Pipek-Mezey"}; static gchar* listLocalizedReal[] = { "NONE", "BOYS", "RUEDNBRG","POP" }; static guint numberOfLocalized = G_N_ELEMENTS (listLocalizedView); static gchar selectedLocalized[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listEXEView[] = { N_("Normal Run"), N_("Check"), N_("Debug")}; static gchar* listEXEReal[] = { "NORMAL", "CHECK", "DEBUG" }; static guint numberOfEXE = G_N_ELEMENTS (listEXEView); static gchar selectedEXE[BSIZE]="NORMAL"; /*************************************************************************************************************/ gboolean gamessSemiEmperical() { if( strcmp(selectedSCF,"MNDO")==0 || strcmp(selectedSCF,"AM1")==0 || strcmp(selectedSCF,"PM3")==0 )return TRUE; else return FALSE; } /*************************************************************************************************************/ static gchar* calculWord(gchar* view) { gint i; for(i=0;i Put here the $HESS card.\n You can obtain it from your old frequecncies calculation(.pun or .irc file)\n"),-1); } } /*************************************************************************************************************/ static void putGamessSCFControlInfoInTextEditor() { G_CONST_RETURN gchar *entrytext; gint maxit=20; if(strcmp(selectedSCF,"NONE")==0)return; if(strcmp(selectedSCF,"MNDO")==0 || strcmp(selectedSCF,"AM1")==0 || strcmp(selectedSCF,"PM3")==0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$BASIS",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " GBASIS=",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedSCF,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); if(getGamessMultiplicity()!=1) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " SCFTYP=ROHF ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); } } else { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " SCFTYP=",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedSCF,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); } entrytext = gtk_entry_get_text(GTK_ENTRY(entrySCFIterations)); maxit=atoi(entrytext); if(maxit==0)maxit=30; if(maxit!=30) { gchar buffer[BSIZE]; sprintf(buffer," MAXIT=%d ",maxit); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); } } /*************************************************************************************************************/ static void putGamessCorrelationInfoInTextEditor() { if(strcmp(selectedCorrType,"NONE")==0)return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); if(strcmp(selectedCorrType,"DFTTYP")==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$DFT",-1); else gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); if(strcmp(selectedCorrType,"MPLEVL=2")==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedCorrType,-1); if(strcmp(selectedCorrType,"CCTYP")==0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " CCTYP=",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedCorrMethod,-1); } if(strcmp(selectedCorrType,"DFTTYP")==0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " DFTTYP=",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedCorrMethod,-1); } gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); } /*************************************************************************************************************/ static void putGamessLocalizedInfoInTextEditor() { if(strcmp(selectedLocalized,"NONE")==0)return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " LOCAL=",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedLocalized,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); } /*************************************************************************************************************/ static void putGamessEXEInfoInTextEditor() { if(strcmp(selectedEXE,"NORMAL")==0)return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " EXETYP=",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, selectedEXE,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); } /*************************************************************************************************************/ void putGamessControlInfoInTextEditor() { putGamessRunTypeInfoInTextEditor(); putGamessSCFControlInfoInTextEditor(); putGamessCorrelationInfoInTextEditor(); putGamessLocalizedInfoInTextEditor(); putGamessEXEInfoInTextEditor(); } /************************************************************************************************************/ static void traitementRunType (GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; gchar* res = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } else return; res = calculWord(data); if(res) sprintf(selectedRun,"%s",res); else sprintf(selectedRun,"Energy"); setGamessCorrType(); } /********************************************************************************************************/ static GtkWidget *create_list_runtype() { GtkTreeIter iter; GtkTreeStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; gint i; GtkTreeIter iter0; store = gtk_tree_store_new (1,G_TYPE_STRING); for(i=0;i #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../Gamess/GamessTypes.h" #include "../Gamess/GamessGlobal.h" #include "../Gamess/GamessControl.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/AtomsProp.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" /************************************************************************************************************/ typedef enum { GABEDIT = 0, GABFIXED }TypeOfSymmetryButton; static gboolean symReduction = TRUE; static GtkWidget* labelSymmetry = NULL; static GtkWidget *buttonTolerance = NULL; static GtkWidget *buttonSymWithCalc = NULL; /************************************************************************************************************/ static gint totalCharge = 0; static gint spinMultiplicity=1; /************************************************************************************************************/ gint getGamessMultiplicity() { return spinMultiplicity; } /************************************************************************************************************/ void initGamessMoleculeButtons() { labelSymmetry = NULL; buttonTolerance = NULL; buttonSymWithCalc = NULL; } /************************************************************************************************************/ void initGamessMolecule() { gamessMolecule.listOfAtoms = NULL; gamessMolecule.totalNumberOfElectrons = 0; gamessMolecule.numberOfValenceElectrons = 0; gamessMolecule.numberOfAtoms = 0; gamessMolecule.groupSymmetry = NULL; } /************************************************************************************************************/ void freeGamessMolecule() { static gboolean first = TRUE; if(first) { initGamessMolecule(); first = FALSE; return; } if(gamessMolecule.listOfAtoms) g_free(gamessMolecule.listOfAtoms); if(gamessMolecule.groupSymmetry) g_free(gamessMolecule.groupSymmetry); initGamessMolecule(); } /************************************************************************************************************/ static gint setGamessMoleculeFromSXYZ(gint nAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z) { gint n; GamessAtom* atomList = NULL; gamessMolecule.listOfAtoms = NULL; gamessMolecule.numberOfAtoms = 0; if(nAtoms<1) return 1; gamessMolecule.listOfAtoms = (GamessAtom*)g_malloc(sizeof(GamessAtom)*(nAtoms)); if(gamessMolecule.listOfAtoms==NULL) return -1; gamessMolecule.numberOfAtoms = nAtoms; atomList = gamessMolecule.listOfAtoms; for(n=0; nposition[0] = X[n]; atomList->position[1] = Y[n]; atomList->position[2] = Z[n]; atomList->symbol = g_strdup(symbols[n]); atomList++; } return 0; } /************************************************************************************************************/ static void setXYZFromGeomXYZ(gint i, gdouble* x, gdouble* y, gdouble *z) { if(!test(GeomXYZ[i].X)) *x = get_value_variableXYZ(GeomXYZ[i].X); else *x = atof(GeomXYZ[i].X); if(!test(GeomXYZ[i].Y)) *y = get_value_variableXYZ(GeomXYZ[i].Y); else *y = atof(GeomXYZ[i].Y); if(!test(GeomXYZ[i].Z)) *z = get_value_variableXYZ(GeomXYZ[i].Z); else *z = atof(GeomXYZ[i].Z); if(Units==0) { *x *= BOHR_TO_ANG; *y *= BOHR_TO_ANG; *z *= BOHR_TO_ANG; } } /************************************************************************************************************/ static void setGamessFormatGroup(gchar* pointGroupSymbol, gchar* gamessName) { if(!pointGroupSymbol) return; if(strlen(pointGroupSymbol)<2 || strcmp(pointGroupSymbol,"C1")==0) { sprintf(gamessName,"%s",pointGroupSymbol); return; } if(strcmp(pointGroupSymbol,"Cinfv")==0) { sprintf(gamessName,"Cnv 4"); return; } if(strcmp(pointGroupSymbol,"Dinfh")==0) { sprintf(gamessName,"Dnh 4"); return; } if(isdigit(pointGroupSymbol[1])) { gchar a[3]; sprintf(a,"%c",pointGroupSymbol[1]); gint n=atoi(a); if(pointGroupSymbol[0] !='S') { if(strlen(pointGroupSymbol)>2) sprintf(gamessName,"%cn%c %d",pointGroupSymbol[0],pointGroupSymbol[2],n); else sprintf(gamessName,"%cn %d",pointGroupSymbol[0],n); } else sprintf(gamessName,"%c2n %d",pointGroupSymbol[0],n/2); return; } sprintf(gamessName,"%s",pointGroupSymbol); return; } /************************************************************************************************************/ static gchar* computeGroupSymmetry() { gint i; gchar** symbols = NULL; gdouble* X = NULL; gdouble* Y = NULL; gdouble* Z = NULL; gint numberOfAtoms = gamessMolecule.numberOfAtoms; gchar pointGroupSymbol[BSIZE]; gchar message[BSIZE]; gint maximalOrder = 8; gdouble principalAxisTolerance = getTolerancePrincipalAxis(); gdouble positionTolerance = getTolerancePosition(); if(numberOfAtoms<1) return NULL; symbols = (gchar**)g_malloc(sizeof(gchar*)*(numberOfAtoms)); if(symbols == NULL) return NULL; X = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(X == NULL) return NULL; Y = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Y == NULL) return NULL; Z = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Z == NULL) return NULL; for(i=0; iNUMBER_ENTRY_0 && !test(Geom[i].R)) k++; if(Geom[i].Nentry>NUMBER_ENTRY_R && !test(Geom[i].Angle)) k++; if(Geom[i].Nentry>NUMBER_ENTRY_ANGLE && !test(Geom[i].Dihedral)) k++; } return k; } /*************************************************************************************************************/ static void putGamessMoleculeZMatInTextEditor() { gchar buffer[BSIZE]; gint i,k,l; gint nzvar = 0; gint nrzvar = 0; if(MethodeGeom==GEOM_IS_XYZ)return; if(NcentersZmat<2)return; if(NcentersZmat==2) nzvar = 3*NcentersZmat-5; else nzvar = 3*NcentersZmat-6; nrzvar = getRealNumberZmatVariables(); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$CONTRL",-1); sprintf(buffer," COORD=ZMT NZVAR=%d ",nzvar); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$ZMAT\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " IZMAT(1)=\n ",-1); for(i=0;iNUMBER_ENTRY_0) { sprintf(buffer,"1,%d,%s, ",i+1,Geom[i].NR); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if((i+1)%3==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); } } if(NcentersZmat%3!=0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); for(i=0;iNUMBER_ENTRY_R) { sprintf(buffer,"2,%d,%s,%s, ",i+1,Geom[i].NR,Geom[i].NAngle); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if((i+1)%3==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); } } if(NcentersZmat%3!=0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); for(i=0;iNUMBER_ENTRY_ANGLE) { sprintf(buffer,"3,%d,%s,%s,%s, ",i+1,Geom[i].NR,Geom[i].NAngle,Geom[i].NDihedral); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if((i+1)%3==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); } } gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); if(nrzvar==nzvar) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$STATPT\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " IFREEZ(1)=",-1); k = 0; l = 0; for(i=0;iNUMBER_ENTRY_0) { k++; if(test(Geom[i].R)) { l++; sprintf(buffer,"%d, ",k); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(l%5==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); } } } if(l!=0 && l%5!=0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); l = 0; for(i=0;iNUMBER_ENTRY_R) { k++; if(test(Geom[i].Angle)) { l++; sprintf(buffer,"%d, ",k); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(l%5==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); } } } if(l!=0 && l%5!=0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); l = 0; for(i=0;iNUMBER_ENTRY_ANGLE) { k++; if(test(Geom[i].Dihedral)) { l++; sprintf(buffer,"%d, ",k); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(l%5==0) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ", -1); } } } gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); } /************************************************************************/ static void setEpsToZero(gint n, gdouble* X, gdouble* Y, gdouble* Z, gdouble eps) { gint i; if(n<1) return; if(!X) return; if(!Y) return; if(!Z) return; if(eps<=0) eps = 1e-3; for(i=0;i1 && strcmp(pointGroupSymbol,"C1")!=0 && isdigit(pointGroupSymbol[1])) setFirstAtomToXAxis(numberOfAtoms, X, Y, Z); */ setGamessFormatGroup(gamessMolecule.groupSymmetry,g); } else { sprintf(g,"C1"); } if(strcmp(g,"C1")==0 || MethodeGeom!=GEOM_IS_XYZ) sprintf(buffer,"%s\n","C1"); else sprintf(buffer,"%s\n\n",g); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(MethodeGeom==GEOM_IS_XYZ) { if(buffer[0]=='T') { gdouble vect[3] = {-1.0,1.0,0.0}; vect[0] = 0.0; vect[1] = 0.0; vect[2] = 1.0; build_rotation_about_an_axis(vect, -135, numberOfAtoms, X, Y,Z); setEpsToZero(numberOfAtoms, X, Y, Z, positionTolerance); vect[0] = -1.0; vect[1] = 1.0; vect[2] = 0.0; build_rotation_about_an_axis(vect, atan(sqrt(2.0))*180/PI, numberOfAtoms, X, Y,Z); setEpsToZero(numberOfAtoms, X, Y, Z, positionTolerance); } if(strlen(buffer)>2 && buffer[0]=='D' && buffer[2]=='d') { gdouble vect[3] = {0.0,0.0,1.0}; gchar* t = strstr(buffer,"d")+1; gint o = 1; if(t && atoi(t)>0) o = atoi(t); build_rotation_about_an_axis(vect, 180/2/o, numberOfAtoms, X, Y,Z); setEpsToZero(numberOfAtoms, X, Y, Z, positionTolerance); } if(strlen(buffer)>2 && buffer[0]=='D' && buffer[2]=='h') { gdouble vect[3] = {0.0,0.0,1.0}; gchar* t = strstr(buffer,"h")+1; gint o = 1; if(t && atoi(t)>0) o = atoi(t); build_rotation_about_an_axis(vect, 2*180/2/o, numberOfAtoms, X, Y,Z); setEpsToZero(numberOfAtoms, X, Y, Z, positionTolerance); } for (i=0;iNUMBER_ENTRY_ANGLE) { sprintf(buffer,"%s %s %s %s %s %s %s\n", Geom[i].Symb, Geom[i].NR,Geom[i].R, Geom[i].NAngle,Geom[i].Angle, Geom[i].NDihedral,Geom[i].Dihedral); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } else if(Geom[i].Nentry>NUMBER_ENTRY_R) { sprintf(buffer,"%s %s %s %s %s\n", Geom[i].Symb, Geom[i].NR,Geom[i].R, Geom[i].NAngle,Geom[i].Angle ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } else if(Geom[i].Nentry>NUMBER_ENTRY_0) { sprintf(buffer,"%s %s %s\n", Geom[i].Symb, Geom[i].NR,Geom[i].R ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } else { sprintf(buffer,"%s \n", Geom[i].Symb ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } } if(NVariables>0 && getRealNumberZmatVariables()>0) { for(i=0;iactive ) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$CONTRL",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " NOSYM=1 ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); } /************************************************************************************************************/ static void putBeginGeometryInTextEditor() { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$DATA\n",-1); } /************************************************************************************************************/ static void putTitleGeometryInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"Molecule specification\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /************************************************************************************************************/ static void putEndGeometryInTextEditor() { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); } /************************************************************************************************************/ void putGamessGeometryInfoInTextEditor() { putNoSymmetryWithCalcul(); if(MethodeGeom!=GEOM_IS_XYZ) putGamessMoleculeZMatInTextEditor(); else putGamessMoleculeXYZFixedInTextEditor(); putBeginGeometryInTextEditor(); putTitleGeometryInTextEditor(); putGamessMoleculeInTextEditor(); putEndGeometryInTextEditor(); } /**************************************************************************************************************************************/ static void activateRadioButton(GtkWidget *button, gpointer data) { gint* type = NULL; GtkWidget* label = NULL; GtkWidget* comboSymmetry = NULL; gchar buffer[BSIZE]; if(!GTK_IS_WIDGET(button)) return; type = g_object_get_data(G_OBJECT (button), "Type"); label = g_object_get_data(G_OBJECT (button), "Label"); comboSymmetry = g_object_get_data(G_OBJECT (button), "ComboSymmetry"); if(type) { setGamessMolecule(); if( GTK_TOGGLE_BUTTON (button)->active && *type == GABFIXED) { if(gamessMolecule.groupSymmetry) g_free(gamessMolecule.groupSymmetry); gamessMolecule.groupSymmetry = g_strdup("C1"); symReduction = FALSE; if(GTK_IS_WIDGET(comboSymmetry)) gtk_widget_set_sensitive(comboSymmetry, TRUE); } if(GTK_TOGGLE_BUTTON (button)->active && *type == GABEDIT) { /* groupSymmetry define in setGamessMolecule */ symReduction = TRUE; if(GTK_IS_WIDGET(comboSymmetry)) gtk_widget_set_sensitive(comboSymmetry, FALSE); } if(label) gtk_label_set_text(GTK_LABEL(label)," "); if(GTK_IS_WIDGET(buttonTolerance) && symReduction ) gtk_widget_set_sensitive(buttonTolerance, TRUE); if(GTK_IS_WIDGET(buttonTolerance) && !symReduction ) gtk_widget_set_sensitive(buttonTolerance, FALSE); if(GTK_TOGGLE_BUTTON (button)->active && label && symReduction) { sprintf(buffer,"%s group",gamessMolecule.groupSymmetry); gtk_label_set_text(GTK_LABEL(label),buffer); } } } /************************************************************************************************************/ static GtkWidget* addRadioButtonToATable(GtkWidget* table, GtkWidget* friendButton, gchar* label, gint i, gint j, gint k) { GtkWidget *newButton; if(friendButton) newButton = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (friendButton)), label); else newButton = gtk_radio_button_new_with_label( NULL, label); gtk_table_attach(GTK_TABLE(table),newButton,j,j+k,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); g_object_set_data(G_OBJECT (newButton), "Label",NULL); g_object_set_data(G_OBJECT (newButton), "Type",NULL); return newButton; } /**************************************************************************************************************************************/ static void resetTolerance(GtkWidget *win) { gchar buffer[BSIZE]; setGamessMolecule(); if(labelSymmetry) { sprintf(buffer,"%s group",gamessMolecule.groupSymmetry); gtk_label_set_text(GTK_LABEL(labelSymmetry),buffer); } } /**************************************************************************************************************************************/ static void activateToleranceButton(GtkWidget *button, gpointer data) { if(!GTK_IS_WIDGET(button)) return; createToleranceWindow(gamessWin, resetTolerance); } /********************************************************************************/ static void setComboSymmetry(GtkWidget *comboSymmetry) { GList *glist = NULL; glist = g_list_append(glist,"C1"); glist = g_list_append(glist,"Cs"); glist = g_list_append(glist,"Ci"); glist = g_list_append(glist,"C2"); glist = g_list_append(glist,"C3"); glist = g_list_append(glist,"C4"); glist = g_list_append(glist,"C5"); glist = g_list_append(glist,"C6"); glist = g_list_append(glist,"C7"); glist = g_list_append(glist,"C8"); glist = g_list_append(glist,"C2v"); glist = g_list_append(glist,"C3v"); glist = g_list_append(glist,"C4v"); glist = g_list_append(glist,"C5v"); glist = g_list_append(glist,"C6v"); glist = g_list_append(glist,"C7v"); glist = g_list_append(glist,"C8v"); glist = g_list_append(glist,"C2h"); glist = g_list_append(glist,"C3h"); glist = g_list_append(glist,"C4h"); glist = g_list_append(glist,"C5h"); glist = g_list_append(glist,"C6h"); glist = g_list_append(glist,"C7h"); glist = g_list_append(glist,"C8h"); glist = g_list_append(glist,"D2"); glist = g_list_append(glist,"D3"); glist = g_list_append(glist,"D4"); glist = g_list_append(glist,"D5"); glist = g_list_append(glist,"D6"); glist = g_list_append(glist,"D7"); glist = g_list_append(glist,"D8"); glist = g_list_append(glist,"D2h"); glist = g_list_append(glist,"D3h"); glist = g_list_append(glist,"D4h"); glist = g_list_append(glist,"D5h"); glist = g_list_append(glist,"D6h"); glist = g_list_append(glist,"D7h"); glist = g_list_append(glist,"D8h"); glist = g_list_append(glist,"D2d"); glist = g_list_append(glist,"D3d"); glist = g_list_append(glist,"D4d"); glist = g_list_append(glist,"D5d"); glist = g_list_append(glist,"D6d"); glist = g_list_append(glist,"D7d"); glist = g_list_append(glist,"D8d"); glist = g_list_append(glist,"S2"); glist = g_list_append(glist,"S4"); glist = g_list_append(glist,"S6"); glist = g_list_append(glist,"S8"); glist = g_list_append(glist,"S10"); glist = g_list_append(glist,"S12"); glist = g_list_append(glist,"S14"); glist = g_list_append(glist,"S16"); glist = g_list_append(glist,"T"); glist = g_list_append(glist,"Td"); glist = g_list_append(glist,"Th"); glist = g_list_append(glist,"O"); glist = g_list_append(glist,"Oh"); gtk_combo_box_entry_set_popdown_strings( comboSymmetry, glist) ; g_list_free(glist); } /**********************************************************************/ static void changedEntrySymmetry(GtkWidget *entry, gpointer data) { G_CONST_RETURN gchar* entryText = NULL; if(!GTK_IS_WIDGET(entry)) return; entryText = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(entryText)<1)return; if(gamessMolecule.groupSymmetry) g_free(gamessMolecule.groupSymmetry); gamessMolecule.groupSymmetry = g_strdup(entryText); if(strstr(entryText,"C1")) symReduction = FALSE; else symReduction = FALSE; } /************************************************************************************************************/ void createGamessSymmetryFrame(GtkWidget *win, GtkWidget *box) { GtkWidget* button; GtkWidget* buttonGabedit; GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget* sep; GtkWidget* comboSymmetry = NULL; GtkWidget* entrySymmetry = NULL; GtkWidget* label = gtk_label_new(" "); GtkWidget *table = gtk_table_new(4,3,FALSE); static TypeOfSymmetryButton typeOfSymmetry[] = { GABEDIT, GABFIXED}; gchar* list[] = {"C1"}; frame = gtk_frame_new ("Symmetry"); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); comboSymmetry = create_combo_box_entry(list, 1, TRUE, -1, -1); entrySymmetry = GTK_BIN(comboSymmetry)->child; gtk_widget_set_sensitive(entrySymmetry, FALSE); if(gamessMolecule.groupSymmetry) g_free(gamessMolecule.groupSymmetry); gamessMolecule.groupSymmetry = g_strdup("C1"); button = addRadioButtonToATable(table, NULL, _("Detected by Gabedit"), 0, 0, 1); g_object_set_data(G_OBJECT (button), "Label",label); g_object_set_data(G_OBJECT (button), "Type",&typeOfSymmetry[GABEDIT]); g_object_set_data(G_OBJECT (button), "ComboSymmetry",comboSymmetry); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); add_widget_table(table, label, 0, 1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE); buttonGabedit=button; buttonTolerance = create_button(win,_("Tolerance")); add_widget_table(table, buttonTolerance, 0, 2); g_signal_connect(G_OBJECT(buttonTolerance),"clicked", G_CALLBACK(activateToleranceButton),NULL); labelSymmetry = label; gtk_widget_set_sensitive(buttonTolerance, FALSE); button = addRadioButtonToATable(table, button, _("Fixed Symmetry"), 1, 0,1); g_signal_connect(G_OBJECT(entrySymmetry),"changed", G_CALLBACK(changedEntrySymmetry),NULL); setComboSymmetry(comboSymmetry); gtk_table_attach(GTK_TABLE(table),comboSymmetry,1,1+2,1,1+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); g_object_set_data(G_OBJECT (button), "Label",label); g_object_set_data(G_OBJECT (button), "Type",&typeOfSymmetry[GABFIXED]); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE); g_object_set_data(G_OBJECT (button), "ComboSymmetry",comboSymmetry); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); gtk_widget_set_sensitive(comboSymmetry, FALSE); sep = gtk_hseparator_new ();; gtk_table_attach(GTK_TABLE(table),sep,0,0+3,2,2+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); buttonSymWithCalc = gtk_check_button_new_with_label (_("Symmetry not used during calculation")); gtk_table_attach(GTK_TABLE(table),buttonSymWithCalc,0,0+3,3,3+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonGabedit), FALSE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonGabedit), TRUE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); } /********************************************************************************/ static void setSpinMultiplicityComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity, gint spin) { GtkWidget *entry = NULL; gchar* t = NULL; if(!comboSpinMultiplicity) return; entry = GTK_BIN (comboSpinMultiplicity)->child; t = g_strdup_printf("%d",spin); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /************************************************************************************************************/ static void setComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity) { GList *glist = NULL; gint i; gint nlist = 0; gchar** list = NULL; gint k; gint kinc; gint ne = gamessMolecule.numberOfValenceElectrons - totalCharge; if(ne%2==0) nlist = ne/2+1; else nlist = (ne+1)/2; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; t = g_strdup_printf("%d",charge); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /********************************************************************************/ static void setComboCharge(GtkWidget *comboCharge) { GList *glist = NULL; gint i; gint nlist; gchar** list = NULL; gint k; nlist = gamessMolecule.numberOfValenceElectrons*2-2+1; if(nlist<1) return; if(nlist==1) nlist++; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; g_object_set_data(G_OBJECT (entry), "Combo",combo); gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.2),-1); return entry; } /***********************************************************************************************/ static GtkWidget *addGamessChargeToTable(GtkWidget *table, gint i) { GtkWidget* entryCharge = NULL; GtkWidget* comboCharge = NULL; gint nlistCharge = 1; gchar* listCharge[] = {"0"}; add_label_table(table,_("Charge"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryCharge = addComboListToATable(table, listCharge, nlistCharge, i, 2, 1); comboCharge = g_object_get_data(G_OBJECT (entryCharge), "Combo"); gtk_widget_set_sensitive(entryCharge, FALSE); return comboCharge; } /***********************************************************************************************/ static GtkWidget *addGamessSpinToTable(GtkWidget *table, gint i) { GtkWidget* entrySpinMultiplicity = NULL; GtkWidget* comboSpinMultiplicity = NULL; gint nlistspinMultiplicity = 1; gchar* listspinMultiplicity[] = {"0"}; add_label_table(table,_("Spin multiplicity"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entrySpinMultiplicity = addComboListToATable(table, listspinMultiplicity, nlistspinMultiplicity, i, 2, 1); comboSpinMultiplicity = g_object_get_data(G_OBJECT (entrySpinMultiplicity), "Combo"); gtk_widget_set_sensitive(entrySpinMultiplicity, FALSE); g_signal_connect(G_OBJECT(entrySpinMultiplicity),"changed", G_CALLBACK(changedEntrySpinMultiplicity),NULL); return comboSpinMultiplicity; } /***********************************************************************************************/ static GtkWidget *addLabelNumberOfElectronsToTable(GtkWidget *table, gint i, GtkWidget *comboCharge) { GtkWidget* labelNumberOfElectrons = NULL; GtkWidget* hbox = NULL; GtkWidget* entryCharge = GTK_BIN(comboCharge)->child; labelNumberOfElectrons = gtk_label_new(" "); hbox = gtk_hbox_new(0,FALSE); gtk_box_pack_start (GTK_BOX (hbox), labelNumberOfElectrons, FALSE, FALSE, 0); gtk_table_attach(GTK_TABLE(table),hbox,0,0+3,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_SHRINK), 2,2); g_object_set_data(G_OBJECT (entryCharge), "LabelNumberOfElectrons", labelNumberOfElectrons); g_signal_connect(G_OBJECT(entryCharge),"changed", G_CALLBACK(changedEntryCharge),NULL); return labelNumberOfElectrons; } /***********************************************************************************************/ void createGamessChargeMultiplicityFrame(GtkWidget *box) { GtkWidget* frame; GtkWidget* sep; GtkWidget* labelNumberOfElectrons; GtkWidget* vboxFrame; GtkWidget* comboSpinMultiplicity = NULL; GtkWidget* comboCharge = NULL; GtkWidget *table = NULL; gint i; totalCharge = TotalCharges[0]; spinMultiplicity=SpinMultiplicities[0]; table = gtk_table_new(3,5,FALSE); frame = gtk_frame_new (_("Charge & Multiplicty")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); i = 0; comboCharge = addGamessChargeToTable(table, i); i = 1; comboSpinMultiplicity = addGamessSpinToTable(table, i); i = 2; sep = gtk_hseparator_new ();; gtk_table_attach(GTK_TABLE(table),sep,0,0+3,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); i = 3; labelNumberOfElectrons=addLabelNumberOfElectronsToTable(table, i, comboCharge); if(GTK_IS_COMBO_BOX(comboCharge)) g_object_set_data(G_OBJECT (GTK_BIN(comboCharge)->child), "ComboSpinMultiplicity", comboSpinMultiplicity); setComboCharge(comboCharge); setComboSpinMultiplicity(comboSpinMultiplicity); if(GTK_IS_WIDGET(labelNumberOfElectrons)) { gint ne = gamessMolecule.numberOfValenceElectrons - totalCharge; gchar buffer[BSIZE]; sprintf(buffer, _("Number of electrons = %d"),ne); gtk_label_set_text(GTK_LABEL(labelNumberOfElectrons),buffer); } } /************************************************************************************************************/ void putGamessChargeAndSpinInfoInTextEditor() { gchar buffer[BSIZE]; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " ",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$CONTRL",-1); sprintf(buffer," ICHARG=%d ",totalCharge); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer," MULT=%d ",spinMultiplicity); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &gamessColorFore.keyWord, &gamessColorBack.keyWord, "$END\n",-1); } GabeditSrc250/src/Molpro/0000755000175100017510000000000013130743374015534 5ustar allouchealloucheGabeditSrc250/src/Molpro/MInterfaceComm.c0000644000175100017510000013130113130665225020526 0ustar alloucheallouche/* MInterfaceComm.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Geometry/GeomGlobal.h" #include "MInterfaceComm.h" static GtkWidget *combo_entry1; static GtkWidget *text1; static GtkWidget *text2; static GtkWidget *Window; static GtkWidget *VboxOption; static GtkWidget *FrameShow; static GtkWidget *Wins; static int begin = 1; /********************************************************************************************************/ static void gene_ref(GtkWidget *b,gpointer data) { GtkWidget *entry; G_CONST_RETURN gchar *entrytext; entry=(GtkWidget *)data; gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, "Ref",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, ",",-1); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, "; ",-1); } /********************************************************************************************************/ static void gene_nstate(GtkWidget *b,gpointer data) { GtkWidget *entry; G_CONST_RETURN gchar *entrytext; entry=(GtkWidget *)data; gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, "State",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, ",",-1); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, "; ",-1); } /********************************************************************************************************/ static void gene_guess(GtkWidget *b,gpointer data) { GtkWidget *entry; G_CONST_RETURN gchar *entrytext; entry=(GtkWidget *)data; gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, "Start",-1); entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, ",",-1); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, "; ",-1); } /********************************************************************************************************/ static void gene_entry(GtkWidget *b,gpointer data) { GtkWidget *entry; G_CONST_RETURN gchar *entrytext; entry=(GtkWidget *)data; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, "; ",-1); } /********************************************************************************************************/ static void c_restrictexcitation(GtkWidget *bframe,guint del) { GtkWidget *fp; GtkWidget *frame; GtkWidget *entry; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox1; GtkWidget *hbox2; GtkWidget *button; gchar *liste[3]; gchar *titre=_("Restriction of classes of excitations"); int nliste = 3; liste[0]=g_strdup("NOPAIR"); liste[1]=g_strdup("NOSINGLE"); liste[2]=g_strdup("NOEXC"); /* Fenetre principale */ fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(fp),TRUE); gtk_window_set_title(GTK_WINDOW(fp),titre); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Wins)); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); add_child(Wins,fp,gtk_widget_destroy,titre); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (titre); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox1 = create_hbox(vboxframe); entry= create_combo_box_entry_liste(Window,hbox1," Select : ",liste,nliste); hbox2 = create_hbox(vboxall); gtk_widget_realize(Window); button = create_button(Window,_("Cancel")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(Window,_("OK")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gene_entry),(gpointer)entry); if(del) g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(bframe)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show_all(fp); } /********************************************************************************************************/ static void c_type_orb(GtkWidget *bframe,guint del) { GtkWidget *fp; GtkWidget *frame; GtkWidget *entry; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox1; GtkWidget *hbox2; GtkWidget *button; gchar *liste[3]; int nliste = 3; gchar *titre=_("Type of orbital to save"); liste[0]=g_strdup("NatOrb"); liste[1]=g_strdup("CanOrb"); liste[2]=g_strdup("LocOrb"); fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(fp),TRUE); gtk_window_set_title(GTK_WINDOW(fp),titre); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Wins)); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); add_child(Wins,fp,gtk_widget_destroy,titre); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (titre); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox1 = create_hbox(vboxframe); entry= create_combo_box_entry_liste(Window,hbox1,_(" Type of robital :"),liste,nliste); hbox2 = create_hbox(vboxall); gtk_widget_realize(Window); button = create_button(Window,_("Cancel")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(Window,_("OK")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gene_entry),(gpointer)entry); if(del) g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(bframe)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show_all(fp); } /********************************************************************************************************/ static void c_ref(GtkWidget *bframe,guint del) { GtkWidget *fp; GtkWidget *frame; GtkWidget *entry; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox1; GtkWidget *hbox2; GtkWidget *button; gchar *liste[8]; int nliste = 8; gchar *titre =_("Additional reference symmetries"); liste[0]=g_strdup("1"); liste[1]=g_strdup("2"); liste[2]=g_strdup("3"); liste[3]=g_strdup("4"); liste[4]=g_strdup("5"); liste[5]=g_strdup("6"); liste[6]=g_strdup("7"); liste[7]=g_strdup("8"); /* Fenetre principale */ fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(fp),TRUE); gtk_window_set_title(GTK_WINDOW(fp),titre); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Wins)); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); add_child(Wins,fp,gtk_widget_destroy,titre); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (titre); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox1 = create_hbox(vboxframe); entry= create_combo_box_entry_liste(Window,hbox1,_("Additional reference symmetries :"),liste,nliste); hbox2 = create_hbox(vboxall); gtk_widget_realize(Window); button = create_button(Window,_("Cancel")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(Window,_("OK")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gene_ref),(gpointer)entry); if(del) g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(bframe)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show_all(fp); } /********************************************************************************************************/ static void c_nstate(GtkWidget *bframe,guint del) { GtkWidget *fp; GtkWidget *frame; GtkWidget *entry; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox1; GtkWidget *hbox2; GtkWidget *button; gchar *liste[5]; int nliste = 5; gchar *titre = _("Number of states"); liste[0]=g_strdup("1"); liste[1]=g_strdup("2"); liste[2]=g_strdup("3"); liste[3]=g_strdup("4"); liste[4]=g_strdup("5"); /* Fenetre principale */ fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(fp),TRUE); gtk_window_set_title(GTK_WINDOW(fp),titre); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Wins)); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); add_child(Wins,fp,gtk_widget_destroy,titre); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (titre); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox1 = create_hbox(vboxframe); entry= create_combo_box_entry_liste(Window,hbox1,_(" Number of states :"),liste,nliste); hbox2 = create_hbox(vboxall); gtk_widget_realize(Window); button = create_button(Window,_("Cancel")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(Window,_("OK")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gene_nstate),(gpointer)entry); if(del) g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(bframe)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show_all(fp); } /********************************************************************************************************/ static void c_initial_guess (GtkWidget *bframe) { GtkWidget *fp; GtkWidget *frame; GtkWidget *entry; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox1; GtkWidget *hbox2; GtkWidget *button; gchar *liste[2]; gchar *titre =_("Initial orbital guess"); int nliste = 2; liste[0]=g_strdup("H0"); liste[1]=g_strdup("ATDEN"); fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(fp),TRUE); gtk_window_set_title(GTK_WINDOW(fp),titre); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Wins)); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); add_child(Wins,fp,gtk_widget_destroy,titre); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (titre); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox1 = create_hbox(vboxframe); entry= create_combo_box_entry_liste(Window,hbox1,_(" The type of the initial orbital guess :"),liste,nliste); hbox2 = create_hbox(vboxall); gtk_widget_realize(Window); button = create_button(Window,_("Cancel")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(Window,_("OK")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gene_guess),(gpointer)entry); g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(bframe)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show_all(fp); } /********************************************************************************************************/ static void gene_S_orb_mode(GtkWidget *b,gpointer data) { if (!strcmp((char *)data,"DENSITY") ) gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, "Start,DENSITY=",-1); else gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, (char*)data,-1); if (strcmp((char *)data,"DENSITY") ) gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, ",",-1); } /********************************************************************************************************/ static void gene_S_orb_num(GtkWidget *b,gpointer data) { GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext; entryall=(GtkWidget **)data; entry=entryall[1]; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, ".",-1); entry=entryall[0]; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, "; ",-1); } /********************************************************************************************************/ static void gene_orb_mode(GtkWidget *b,gpointer data) { gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, (char*)data,-1); } /********************************************************************************************************/ static void gene_orb_num(GtkWidget *b,gpointer data) { GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext; guint i; entryall=(GtkWidget **)data; for (i=0;i<8;i++) { entry=entryall[i]; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, ",",-1); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, entrytext,-1); } gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, "; ",-1); } /********************************************************************************************************/ static void gene_one_entry2(GtkWidget *b,gpointer data) { GtkWidget *entry; G_CONST_RETURN gchar *entrytext; entry=(GtkWidget *)data; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, entrytext,-1); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, "; ",-1); } /********************************************************************************************************/ static void gene_one_entry1(GtkWidget *b,gpointer data) { gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, (char*)data,-1); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, ",",-1); } /********************************************************************************************************/ static void c_one_entry (GtkWidget *bframe,gchar *titre,gchar *mode,gchar *set,guint del) { GtkWidget *fp; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox1; GtkWidget *hbox2; GtkWidget *button; GtkWidget *label; GtkWidget *entry; fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(fp),TRUE); gtk_window_set_title(GTK_WINDOW(fp),titre); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Wins)); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); add_child(Wins,fp,gtk_widget_destroy,titre); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (titre); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox1 = create_hbox(vboxframe); label = gtk_label_new (titre); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox1), label, TRUE, FALSE, 0); entry = gtk_entry_new (); gtk_widget_show (entry); gtk_box_pack_start (GTK_BOX (hbox1), entry, FALSE, TRUE, 0); gtk_entry_set_text(GTK_ENTRY(entry),set); hbox2 = create_hbox(vboxall); gtk_widget_realize(Window); button = create_button(Window,_("Cancel")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(Window,_("OK")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gene_one_entry1),(gpointer)mode); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gene_one_entry2),(gpointer)entry); if(del) g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(bframe)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show_all(fp); } /********************************************************************************************************/ static void c_SS_orb (GtkWidget *bframe,gchar *titre,gchar *mode) { GtkWidget *fp; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox1; GtkWidget *hbox2; GtkWidget *button; GtkWidget *label; GtkWidget **entry; gchar *labelt[2]; guint i; entry=g_malloc(2*sizeof(GtkWidget *)); for (i=0;i<2;i++) labelt[i]=g_malloc(100); sprintf(labelt[0],_("File number : ")); sprintf(labelt[1],_("Record number: ")); /* Fenetre principale */ fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(fp),TRUE); gtk_window_set_title(GTK_WINDOW(fp),titre); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Wins)); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); add_child(Wins,fp,gtk_widget_destroy,titre); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (titre); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); for (i=0;i<2;i++) { hbox1 = create_hbox(vboxframe); label = gtk_label_new (labelt[i]); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox1), label, TRUE, FALSE, 0); entry[i] = gtk_entry_new (); gtk_widget_show (entry[i]); gtk_box_pack_start (GTK_BOX (hbox1), entry[i], FALSE, TRUE, 0); } hbox2 = create_hbox(vboxall); gtk_widget_realize(fp); button = create_button(fp,_("Cancel")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(fp,_("OK")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gene_S_orb_mode),(gpointer)mode); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gene_S_orb_num),(gpointer)entry); g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(bframe)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); for (i=1;i<2;i++) g_free(labelt[i]); gtk_widget_show_all(fp); } /********************************************************************************************************/ static void c_orb (GtkWidget *bframe,gchar *titre,gchar *mode) { GtkWidget *fp; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox1; GtkWidget *hbox2; GtkWidget *button; GtkWidget *label; GtkWidget **entry; gchar *Sym[8]; guint i; entry=g_malloc(8*sizeof(GtkWidget *)); for (i=0;i<8;i++) { Sym[i]=g_malloc(100); sprintf(Sym[i],_("In symmetry number %d : "),i+1); } /* Fenetre principale */ fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(fp),TRUE); gtk_window_set_title(GTK_WINDOW(fp),titre); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Wins)); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); add_child(Wins,fp,gtk_widget_destroy,titre); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (titre); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); for (i=0;i<8;i++) { hbox1 = create_hbox(vboxframe); label = gtk_label_new (Sym[i]); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox1), label, TRUE, FALSE, 0); entry[i] = gtk_entry_new (); gtk_widget_show (entry[i]); gtk_box_pack_start (GTK_BOX (hbox1), entry[i], FALSE, TRUE, 0); } hbox2 = create_hbox(vboxall); gtk_widget_realize(fp); button = create_button(fp,_("Cancel")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(fp,_("OK")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(gene_orb_mode),(gpointer)mode); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(gene_orb_num),(gpointer)entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(bframe)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); for (i=1;i<8;i++) g_free(Sym[i]); gtk_widget_show_all(fp); } /********************************************************************************************************/ static void gene_wf(GtkWidget *b,gpointer data) { GtkWidget **entryall; GtkWidget *entry; G_CONST_RETURN gchar *entrytext; guint i; entryall=(GtkWidget **)data; gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, "wf",-1); for (i=0;i<3;i++) { entry=entryall[i]; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, ",",-1); gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, entrytext,-1); } gabedit_text_insert (GABEDIT_TEXT(text2), NULL, NULL, NULL, "; ",-1); } /********************************************************************************************************/ static void cw_wave (GtkWidget *bframe,guint del) { GtkWidget *fp; GtkWidget *frame; GtkWidget **entry; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox1; GtkWidget *hbox2; GtkWidget *button; gchar *listene[1]; int nlistene = 1; gchar *listespin[7]; int nlistespin = 7; gchar *listeirre[8]; int nlisteiree = 8; gchar *titre=_("Wave function symmetry"); entry=g_malloc(3*sizeof(GtkWidget*)); listene[0]=g_strdup_printf("%d",Nelectrons); if(Nelectrons%2 == 0 && SpinMultiplicities[0]%2==0) listespin[0] = g_strdup_printf("%d",SpinMultiplicities[0]); else if(Nelectrons%2 == 1 && SpinMultiplicities[0]%2==1) listespin[0] = g_strdup_printf("%d",SpinMultiplicities[0]); else { if(Nelectrons%2 == 0) listespin[0]=g_strdup("0"); else listespin[0]=g_strdup("1"); } listespin[1]=g_strdup("0"); listespin[2]=g_strdup("1"); listespin[3]=g_strdup("2"); listespin[4]=g_strdup("3"); listespin[5]=g_strdup("4"); listespin[6]=g_strdup("5"); listeirre[0]=g_strdup("1"); listeirre[1]=g_strdup("2"); listeirre[2]=g_strdup("3"); listeirre[3]=g_strdup("4"); listeirre[4]=g_strdup("5"); listeirre[5]=g_strdup("6"); listeirre[6]=g_strdup("7"); listeirre[7]=g_strdup("8"); /* Fenetre principale */ fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(fp),TRUE); gtk_window_set_title(GTK_WINDOW(fp),titre); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Wins)); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); add_child(Wins,fp,gtk_widget_destroy,titre); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (titre); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox1 = create_hbox(vboxframe); entry[0]= create_combo_box_entry_liste(Window,hbox1,_("Number of electrons :"),listene,nlistene); hbox1 = create_hbox(vboxframe); entry[1]= create_combo_box_entry_liste(Window,hbox1,_("Number of the irreducible representation :"),listeirre,nlisteiree); hbox1 = create_hbox(vboxframe); entry[2]= create_combo_box_entry_liste(Window,hbox1,_("2*Spin :"),listespin,nlistespin); hbox2 = create_hbox(vboxall); gtk_widget_realize(fp); button = create_button(fp,_("Cancel")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(fp,_("OK")); gtk_box_pack_start (GTK_BOX( hbox2), button, TRUE, TRUE, 3); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gene_wf),(gpointer)entry); if(del) g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(bframe)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),GTK_OBJECT(fp)); gtk_widget_show_all(fp); } /********************************************************************************************************/ static void Traite_ci_Option(GtkWidget *bframe,gpointer data) { char *temp; temp=g_malloc(100); if (!strcmp((char *)data,_("Defining the state symmetry")) ) cw_wave(bframe,1); else if (!strcmp((char *)data,_("Defining the occupied orbitals")) ) c_orb(bframe,_("Defining the occupied orbitals"),"Occ"); else if (!strcmp((char *)data,_("Defining the closed-shell orbitals")) ) c_orb(bframe,_("Defining the closed-shell orbitals"),"Closed"); else if (!strcmp((char *)data,_("Defining the Frozen-core orbitals")) ) c_orb(bframe,_("Defining the Frozen-core orbitals"),"Core"); else if (!strcmp((char *)data,_("Saving the natural orbitals")) ) c_SS_orb(bframe,_("Saving the natural orbital"),"Natorb"); else if (!strcmp((char *)data,_("Defining the number of states in the present symmetry")) ) c_nstate(bframe,1); else if (!strcmp((char *)data,_("Defining the orbitals")) ) c_SS_orb(bframe,_("Defining the orbitals"),"Orbit"); else if (!strcmp((char *)data,_("Additional reference symmetries")) ) c_ref(bframe,0); else if (!strcmp((char *)data,_("Restriction of classes of excitations")) ) c_restrictexcitation(bframe,1); else { sprintf(temp,_("Sorry, the button of \"%s\" is not active"),(char*)data); Message(temp,_("Warning"),TRUE); gtk_widget_hide(bframe); } g_free(temp); } /********************************************************************************************************/ static void Traite_multi_Option(GtkWidget *bframe,gpointer data) { char *temp; temp=g_malloc(100); if (!strcmp((char *)data,_("Defining the state symmetry")) ) cw_wave(bframe,0); else if (!strcmp((char *)data,_("Defining the occupied orbitals")) ) c_orb(bframe,_("Defining the occupied orbitals"),"Occ"); else if (!strcmp((char *)data,_("Defining the closed-shell orbitals")) ) c_orb(bframe,_("Defining the closed-shell orbitals"),"Closed"); else if (!strcmp((char *)data,_("Defining the Frozen-core orbitals")) ) c_orb(bframe,_("Defining the Frozen-core orbitals"),"Core"); else if (!strcmp((char *)data,_("Saving the final orbitals")) ) c_SS_orb(bframe,_("Saving the final orbital"),"Orbital"); else if (!strcmp((char *)data,_("Defining the starting guess")) ) c_SS_orb(bframe,_("Defining the starting guess"),"Start"); else if (!strcmp((char *)data,_("Defining the number of states in the present symmetry")) ) c_nstate(bframe,0); else if (!strcmp((char *)data,_("Specifying weights in state-averaged calculations")) ) c_one_entry(bframe,_("Specifying weights in state-averaged calculations "),"Weights","1,1,1,1",0); else if (!strcmp((char *)data,_("Type of orbitals to save")) ) c_type_orb(bframe,1); else { sprintf(temp,_("Sorry, the button of \"%s\" is not active"),(char*)data); Message(temp,_("Warning"),TRUE); gtk_widget_hide(bframe); } g_free(temp); } static void Traite_hf_Option(GtkWidget *bframe,gpointer data) { char *temp; temp=g_malloc(100); if (!strcmp((char *)data,_("Defining the wavefunction")) ) cw_wave(bframe,1); else if (!strcmp((char *)data,_("Specifying closed-shell orbitals")) ) c_orb(bframe,_("Specifying closed-shell orbitals"),"Closed"); else if (!strcmp((char *)data,_("Defining the number of occupied orbitals in each symmetry")) ) c_orb(bframe,_("Defining the number of occupied orbitals in each symmetry"),"Occ"); else if (!strcmp((char *)data,_("Saving the final orbital")) ) c_SS_orb(bframe,_("Saving the final orbital"),"Save"); else if (!strcmp((char *)data,_("Starting with previous orbitals")) ) c_SS_orb(bframe,_("Starting with previous orbitals"),"Start"); else if (!strcmp((char *)data,_("Starting with a previous density matrix")) ) c_SS_orb(bframe,_("Starting with a previous density matrix"),"DENSITY"); else if (!strcmp((char *)data,_("Initial orbital guess")) ) c_initial_guess(bframe); else { sprintf(temp,_("Sorry, the button of \"%s\" is not active"),(char*)data); Message(temp,_("Warning"),TRUE); gtk_widget_hide(bframe); } g_free(temp); } /********************************************************************************************************/ static void button_fcioption(GtkWidget *w) { GtkWidget* Table; GtkWidget* button; guint i; guint j; guint ColonneT=2; guint LigneT=3; char *LabelButton[2][3]={ {_("Defining the orbitals"), _("Defining the closed-shell orbitals"), _("Defining the state symmetry"), }, {_("Defining the occupied orbitals"), _("Defining the Frozen-core orbitals"), "00" } }; Table = gtk_table_new(LigneT,ColonneT,TRUE); gtk_container_add(GTK_CONTAINER(w),Table); for ( i = 0;iTextComm=text2; gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0); } GabeditSrc250/src/Molpro/MolproLib.h0000644000175100017510000000276613130665225017615 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MOLPROLIB_H__ #define __GABEDIT_MOLPROLIB_H__ void get_basis_list(gchar* Symb,gchar* orb,gchar* outfile,gchar* errfile); gboolean create_molpro_basis_file(); #endif /* __GABEDIT_MOLPROLIB_H__ */ GabeditSrc250/src/Molpro/MInterfaceBasis.h0000644000175100017510000000370413130665225020706 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MINTERFACEBASIS_H__ #define __GABEDIT_MINTERFACEBASIS_H__ typedef enum { ATOMLIST_SYMBOL = 0, ATOMLIST_DATA, ATOMLIST_NUMBER_OF_COLUMNS, } MolproAtomsList; typedef enum { BASISLIST_NAME = 0, BASISLIST_CONTRACTION, BASISLIST_DATA, BASISLIST_NUMBER_OF_COLUMNS, } MolproBasisList; #define NORB 7 typedef struct _BaseS { GtkWidget *listOfAtoms; guint NRatoms; }BaseS; typedef struct _Cbase { gchar *TypeBase; }Cbase; typedef struct _Cbasetot { gchar *Name; gchar *ECP; gchar *Orb[NORB]; gboolean Cont[NORB]; }Cbasetot; gint NRatoms; void AjoutePageBasis(GtkWidget *,GtkWidget *,BaseS *); #endif /* __GABEDIT_MINTERFACEBASIS_H__ */ GabeditSrc250/src/Molpro/Makefile0000644000175100017510000000072713130664665017207 0ustar allouchealloucheOBJECTS = MolproLib.o MInterfaceBasis.o MInterfaceComm.o MInterfaceGene.o MInterfaceGeom.o Molpro.o MolproBasisLibrary.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/Molpro/Molpro.c0000644000175100017510000007231013130665225017151 0ustar alloucheallouche/* Molpro.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "MInterfaceGeom.h" #include "MInterfaceGene.h" #include "MInterfaceBasis.h" #include "MInterfaceComm.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Utils/GabeditTextEdit.h" #include "../../pixmaps/Next.xpm" static GtkWidget *hboxb; static int iinsert; GtkWidget *NoteBook; static GtkWidget *Wins=NULL; GeneS *gen; gint iset; GeomS *geom; BaseS *base; CommS *comm; /************************************************************************************************************/ void DestroyWinsMolpro(GtkWidget *win) { destroy(Wins,NULL); Wins = NULL; } /************************************************************************************************************/ static void GetInfoTitle() { gchar chaine[BSIZE]; G_CONST_RETURN gchar *chaine1; chaine1 = gtk_entry_get_text(GTK_ENTRY(gen->title)); sprintf(chaine,"***,%s;",chaine1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, chaine,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); } /************************************************************************************************************/ static void GetInfoMemory() { gchar chaine[BSIZE]; G_CONST_RETURN gchar *chaine1; chaine1=gtk_entry_get_text(GTK_ENTRY(gen->memory)); sprintf(chaine,"Memory,%s;",chaine1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, chaine,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); } /************************************************************************************************************/ static void insert_gth_option(gchar *type,gchar *def, const gchar *value,gchar *Commentaire) { gchar *chaine; chaine=g_strdup_printf("Gthresh,%s=%s; !%s\n",type,value,Commentaire); if(strcmp(def,value)) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,chaine,-1); g_free(chaine); } /************************************************************************************************************/ static void GetInfoGth() { guint i; gchar *NameOp[14]={ "zero", "oneint", "twoint","preface","locali", "eorder","energy","gradiant","step","orbital", "civec","coeff","printci","punchci" }; gchar *DefOp[14]={ "1.d-12", "1.d-12", "1.d-12","1.d-14","1.d-8", "1.d-4","1.d-6","1.d-2","1.d-3","1.d-5", "1.d-5","1.d-4","0.05","99" }; gchar *CommOp[14]={ _("Numerical zero"), _("Threshold for one-electron integrals"), _("Threshold for the neglect of two-electron integrals"), _("Threshold for test of prefactor in TWOINT"), _("Threshold for orbital localization"), _("Threshold for reordering of orbital after localization"), _("Convergence threshold for energy"), _("Convergence threshold for orbital gradient in MCSCF"), _("Convergence threshold for step length in MCSCF orbital optimization"), _("Convergence threshold for orbital optimization in the SCF program"), _("Convergence threshold for CI coefficients in MCSCF and reference vector in CI"), _("Convergence threshold for coefficients in CI and CCSD"), _("Threshold for printing CI coefficients"), _("Threshold for punching CI coefficients") }; G_CONST_RETURN gchar *chaine[14]; chaine[0]=gtk_entry_get_text(GTK_ENTRY(gen->gth_zero)); chaine[1]=gtk_entry_get_text(GTK_ENTRY(gen->gth_oneint)); chaine[2]=gtk_entry_get_text(GTK_ENTRY(gen->gth_twoint)); chaine[3]=gtk_entry_get_text(GTK_ENTRY(gen->gth_prefac)); chaine[4]=gtk_entry_get_text(GTK_ENTRY(gen->gth_locali)); chaine[5]=gtk_entry_get_text(GTK_ENTRY(gen->gth_eorder)); chaine[6]=gtk_entry_get_text(GTK_ENTRY(gen->gth_energy)); chaine[7]=gtk_entry_get_text(GTK_ENTRY(gen->gth_gradiant)); chaine[8]=gtk_entry_get_text(GTK_ENTRY(gen->gth_step)); chaine[9]=gtk_entry_get_text(GTK_ENTRY(gen->gth_orbital)); chaine[10]=gtk_entry_get_text(GTK_ENTRY(gen->gth_civec)); chaine[11]=gtk_entry_get_text(GTK_ENTRY(gen->gth_coeff)); chaine[12]=gtk_entry_get_text(GTK_ENTRY(gen->gth_printci)); chaine[13]=gtk_entry_get_text(GTK_ENTRY(gen->gth_punchci)); for(i=0;i<14;i++) insert_gth_option(NameOp[i],DefOp[i],chaine[i],CommOp[i]); } /************************************************************************************************************/ static int TestButtonActive(GtkWidget *button) { if (GTK_TOGGLE_BUTTON (button)->active) return 1; else return 0; } /************************************************************************************************************/ static void insert_gprint_option(gchar *Type,gchar *Commentaire) { gchar *chaine; chaine=g_strdup_printf("Gprint,%s; ! %s\n",Type,Commentaire); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,chaine,-1); } /************************************************************************************************************/ static void GetInfoGprint() { gchar *tGP[14]={ _("Print basis information "), _("Print CI vector in MCSCF"), _("Print reference CSFs and their coefficients in CI "), _("Print detailed I/O information "), _("Print orbitals in SCF and MCSCF "), _("Print bond angle information"), _("Print information for singles in CI, CCSD "), _("Print bond distances "), _("Print p-space configurations"), _("Print variables each time they are set or changed "), _("Print information for pairs in CI, CCSD "), _("Print microiterations in MCSCF and CI"), _("Print detailed CPU information "), _("Print pair list in CI, CCSD") }; if(TestButtonActive(gen->basis)) insert_gprint_option("basis",tGP[0]); if(TestButtonActive(gen->civector)) insert_gprint_option("civector",tGP[1]); if(TestButtonActive(gen->ref)) insert_gprint_option("ref",tGP[2]); if(TestButtonActive(gen->io)) insert_gprint_option("io",tGP[3]); if(TestButtonActive(gen->orbital)) insert_gprint_option("orbital",tGP[4]); if(TestButtonActive(gen->angles)) insert_gprint_option("angles",tGP[5]); if(TestButtonActive(gen->cs)) insert_gprint_option("cs",tGP[6]); if(TestButtonActive(gen->distance)) insert_gprint_option("distance",tGP[7]); if(TestButtonActive(gen->pspace)) insert_gprint_option("pspace",tGP[8]); if(TestButtonActive(gen->variable)) insert_gprint_option("variable",tGP[9]); if(TestButtonActive(gen->cp)) insert_gprint_option("cp",tGP[10]); if(TestButtonActive(gen->micro)) insert_gprint_option("micro",tGP[11]); if(TestButtonActive(gen->cpu)) insert_gprint_option("cpu",tGP[12]); if(TestButtonActive(gen->pairs)) insert_gprint_option("pairs",tGP[13]); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); } /************************************************************************************************************/ static void insert_option(gchar *Type,gchar *ChaineCenter,gchar *Commentaire) { gchar *chaine; chaine=g_strdup_printf("Gexpec,%s%s;%s\n",Type,ChaineCenter,Commentaire); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,chaine,-1); } /************************************************************************************************************/ static void GetInfoGOne() { gchar *tO[18]={ " !Compute Overlap ", " !Compute Kinetic energy", " !Compute Potential energy ", " !Compute Delta function ", " !Compute Delta4 function ", " !Compute One-electron Darwin term", " !Compute Mass-velocity term ", " !Compute Total Cowan-Griffin Relativistic correction", " !Compute Products of angular momentum operators ", " !Compute Dipole moments", " !Compute Second moment ", " !Compute Quadrupole moments and R2 ", " !Compute Electric field", " !Compute Field gradients ", " !Compute Angular momentum operators", " !Compute Velocity", " !Compute Spin-orbit operators", " !Compute ECP spin-orbit operators" }; gchar *ChaineCenter; G_CONST_RETURN gchar *chaineC; G_CONST_RETURN gchar *chaineX; G_CONST_RETURN gchar *chaineY; G_CONST_RETURN gchar *chaineZ; if(TestButtonActive(gen->RadCenter)) { chaineC=gtk_entry_get_text(GTK_ENTRY(gen->entryC)); ChaineCenter=g_strdup_printf("%s",chaineC); } else { chaineX=gtk_entry_get_text(GTK_ENTRY(gen->entryX)); chaineY=gtk_entry_get_text(GTK_ENTRY(gen->entryY)); chaineZ=gtk_entry_get_text(GTK_ENTRY(gen->entryZ)); ChaineCenter=g_strdup_printf(",,%s,%s,%s",chaineX,chaineY,chaineZ); } if(TestButtonActive(gen->Overlap)) insert_option("OV",ChaineCenter,tO[0]); if(TestButtonActive(gen->Kinetic)) insert_option("Ekin",ChaineCenter,tO[1]); if(TestButtonActive(gen->Potential)) insert_option("Pot",ChaineCenter,tO[2]); if(TestButtonActive(gen->Delta)) insert_option("Delta",ChaineCenter,tO[3]); if(TestButtonActive(gen->Delta4)) insert_option("Del4",ChaineCenter,tO[4]); if(TestButtonActive(gen->Darwin)) insert_option("Darw",ChaineCenter,tO[5]); if(TestButtonActive(gen->MassVelocity)) insert_option("Massv",ChaineCenter,tO[6]); if(TestButtonActive(gen->CowanGriffin)) insert_option("Rel",ChaineCenter,tO[7]); if(TestButtonActive(gen->ProductsMO)) { insert_option("LXLX",ChaineCenter,tO[8]); insert_option("LYLY",ChaineCenter," "); insert_option("LZLZ",ChaineCenter," "); insert_option("LXLY",ChaineCenter," "); insert_option("LXLZ",ChaineCenter," "); insert_option("LYLZ",ChaineCenter," "); insert_option("LYLX",ChaineCenter," "); insert_option("LZLX",ChaineCenter," "); insert_option("LZLY",ChaineCenter," "); } if(TestButtonActive(gen->Dipole)) insert_option("Dm",ChaineCenter,tO[9]); if(TestButtonActive(gen->Second)) insert_option("Sm",ChaineCenter,tO[10]); if(TestButtonActive(gen->Quadrupole)) insert_option("Qm",ChaineCenter,tO[11]); if(TestButtonActive(gen->Electric)) insert_option("Ef",ChaineCenter,tO[12]); if(TestButtonActive(gen->Field)) insert_option("Fg",ChaineCenter,tO[13]); if(TestButtonActive(gen->AngularMO)) { insert_option("LX",ChaineCenter,tO[14]); insert_option("LY",ChaineCenter," "); insert_option("LZ",ChaineCenter," "); } if(TestButtonActive(gen->Velocity)) insert_option("Velo",ChaineCenter,tO[15]); if(TestButtonActive(gen->SpinOrbit)) insert_option("Ls",ChaineCenter,tO[16]); if(TestButtonActive(gen->ECP)) insert_option("Ecpls",ChaineCenter,tO[17]); } /************************************************************************************************************/ static void GetInfoGene() { gint nchar; nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); if(iinsert) { reset_name_files(); data_modify(TRUE); gabedit_text_set_point(GABEDIT_TEXT(text),0); gabedit_text_forward_delete(GABEDIT_TEXT(text),nchar); } GetInfoTitle(); GetInfoMemory(); GetInfoGth(); GetInfoGprint(); GetInfoGOne(); if(iinsert) gabedit_text_set_point(GABEDIT_TEXT(text),0); } /************************************************************************************************************/ static void GetInfoXYZ(const gchar *SymEntry, const gchar *OptEntry) { guint i; gchar *chaine; gchar *line=NULL; gchar *Xstr=NULL; gchar *Ystr=NULL; gchar *Zstr=NULL; SAtomsProp prop; Nelectrons = get_number_electrons(0); if(NVariablesXYZ>0) for(i=0;i<(guint)NVariablesXYZ;i++) { if(VariablesXYZ[i].Used) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"!Variables :\n",-1); break; } } for(i=0;i<(guint)NVariablesXYZ;i++) { if(VariablesXYZ[i].Used) { if(Units==1) line=g_strdup_printf("%s=%s;\n", VariablesXYZ[i].Name,VariablesXYZ[i].Value); else line=g_strdup_printf("%s=%s;\n", VariablesXYZ[i].Name,bohr_to_ang(VariablesXYZ[i].Value)); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,line,-1); } } chaine=g_strdup("geomtyp=xyz\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, chaine,-1); chaine=g_strdup("geometry={"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, chaine,-1); chaine=g_strdup(SymEntry); if (strcmp(chaine,_("default")) ) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, chaine,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, ";",-1); } chaine=g_strdup(OptEntry); if (strcmp(chaine,_("none")) ) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, chaine,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, ";",-1); } gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "ANGSTROM;",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); chaine=g_strdup_printf("%d ! number of atoms \n",NcentersXYZ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, chaine,-1); chaine=g_strdup("GeomXYZ\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, chaine,-1); for(i=0;i<(guint)NcentersXYZ;i++) { if(Units==1) line=g_strdup_printf("%s, %s, %s, %s",GeomXYZ[i].Symb, GeomXYZ[i].X,GeomXYZ[i].Y,GeomXYZ[i].Z); else { Xstr =g_strdup(GeomXYZ[i].X); if(test(GeomXYZ[i].X)) Xstr =g_strdup(bohr_to_ang(GeomXYZ[i].X)); Ystr =g_strdup(GeomXYZ[i].Y); if(test(GeomXYZ[i].Y)) Ystr =g_strdup(bohr_to_ang(GeomXYZ[i].Y)); Zstr =g_strdup(GeomXYZ[i].Z); if(test(GeomXYZ[i].Z)) Zstr =g_strdup(bohr_to_ang(GeomXYZ[i].Z)); line=g_strdup_printf("%s, %s, %s, %s",GeomXYZ[i].Symb, Xstr,Ystr,Zstr); } line=g_strdup_printf("%s\n",line); prop = prop_atom_get(GeomXYZ[i].Symb); gabedit_text_insert (GABEDIT_TEXT(text), NULL,NULL, &prop.color,line,-1); } chaine=g_strdup("}"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, chaine,-1); if(chaine != NULL) g_free(chaine); if(line != NULL) g_free(line); if(Xstr != NULL) g_free(Xstr); if(Ystr != NULL) g_free(Ystr); if(Zstr != NULL) g_free(Zstr); } /************************************************************************************************************/ static void GetInfoZmatrix(const gchar *SymEntry, const gchar *OptEntry) { guint i; gchar *chaine; gchar *line; SAtomsProp prop; Nelectrons = get_number_electrons(0); if(NVariables>0) for(i=0;i<(guint)NVariables;i++) { if(Variables[i].Used) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"!Variables :\n",-1); break; } } for(i=0;i<(guint)NVariables;i++) { if(Variables[i].Used) { line=g_strdup_printf("%s = %s;\n",Variables[i].Name,Variables[i].Value); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,line,-1); } } gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); chaine=g_strdup("geometry={"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, chaine,-1); chaine=g_strdup(SymEntry); if (strcmp(chaine,_("default")) ) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, chaine,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, ";",-1); } chaine=g_strdup(OptEntry); if (strcmp(chaine,_("none")) ) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, chaine,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, ";",-1); } if (Units != 0 ) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "ANGSTROM;",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); chaine=g_strdup("! geometry input in Z-MATRIX type generated by gabedit\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, chaine,-1); for(i=0;i<(guint)NcentersZmat;i++) { line=g_strdup_printf("%s",Geom[i].Symb); if(Geom[i].Nentry>NUMBER_ENTRY_0) line=g_strdup_printf("%s, %s, %s",line,Geom[i].NR,Geom[i].R); if(Geom[i].Nentry>NUMBER_ENTRY_R) line=g_strdup_printf("%s, %s, %s",line,Geom[i].NAngle,Geom[i].Angle); if(Geom[i].Nentry>NUMBER_ENTRY_ANGLE) line=g_strdup_printf("%s, %s, %s",line,Geom[i].NDihedral,Geom[i].Dihedral); line=g_strdup_printf("%s;\n",line); prop = prop_atom_get(Geom[i].Symb); gabedit_text_insert (GABEDIT_TEXT(text), NULL,NULL, &prop.color,line,-1); } gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "}",-1); } /************************************************************************************************************/ static void GetInfoGeom() { gint nchar; G_CONST_RETURN gchar *SymEntry; G_CONST_RETURN gchar *OptEntry; nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); if(iinsert) gabedit_text_set_point(GABEDIT_TEXT(text),nchar); SymEntry = gtk_entry_get_text(GTK_ENTRY(geom->Symentry)); OptEntry = gtk_entry_get_text(GTK_ENTRY(geom->Optentry)); if(MethodeGeom == GEOM_IS_XYZ) GetInfoXYZ(SymEntry,OptEntry); else if(MethodeGeom == GEOM_IS_ZMAT) GetInfoZmatrix(SymEntry,OptEntry); if(iinsert) gabedit_text_set_point(GABEDIT_TEXT(text),0); } /************************************************************************************************************/ static void GetInfoBasis() { gint nchar; gint i; Cbasetot *basetot; GtkTreeModel *model; GtkTreeIter iter; gchar* pathString = NULL; model = gtk_tree_view_get_model(GTK_TREE_VIEW(base->listOfAtoms)); nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); if(iinsert) gabedit_text_set_point(GABEDIT_TEXT(text),nchar); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\nbasis={\n",-1); base->NRatoms=NRatoms; for (i=1;i<=(gint)base->NRatoms;i++) { pathString = g_strdup_printf("%d",i-1); if(!gtk_tree_model_get_iter_from_string (model, &iter, pathString))continue; g_free(pathString); gtk_tree_model_get (model, &iter, ATOMLIST_DATA, &basetot, -1); if(basetot->ECP != NULL) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,basetot->ECP ,-1); if(basetot->Orb[0] != NULL) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,basetot->Orb[0] ,-1); if(basetot->Orb[1] != NULL) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,basetot->Orb[1] ,-1); if(basetot->Orb[2] != NULL) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,basetot->Orb[2] ,-1); if(basetot->Orb[3] != NULL) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,basetot->Orb[3] ,-1); if(basetot->Orb[4] != NULL) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,basetot->Orb[4] ,-1); if(basetot->Orb[5] != NULL) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,basetot->Orb[5] ,-1); if(basetot->Orb[6] != NULL) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,basetot->Orb[6] ,-1); } gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"}\n",-1); if(iinsert) gabedit_text_set_point(GABEDIT_TEXT(text),0); } /************************************************************************************************************/ static void GetInfoComm() { gchar *CommText; guint nchar; nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); if(iinsert) gabedit_text_set_point(GABEDIT_TEXT(text),nchar); CommText= gabedit_text_get_chars(comm->TextComm, 0, -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, CommText,-1); if(strstr( CommText,"{")) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "}\n",-1); g_free(CommText); if(iinsert) gabedit_text_set_point(GABEDIT_TEXT(text),0); } /************************************************************************************************************/ static void GetInfo( GtkWidget *widget, gpointer data ) { iset=iframe-1; switch(iset) { case 0:GetInfoGene() ; break; case 1:GetInfoGeom() ; geom_is_not_open(); TypeGeomOpen = 0; WindowGeom = NULL; break; case 2:GetInfoBasis(); break; case 3:GetInfoComm(); if(data == NULL) destroy_children(Wins); break; } if( data !=NULL ){ save_as_doc(); data_modify(FALSE); iedit=1; gabedit_text_set_editable(GABEDIT_TEXT(text), TRUE); } } /************************************************************************************************************/ static void NewFrame( GtkWidget *widget, gpointer data ) { gint i; iframe++; switch(iframe) { case 2: geom=g_malloc(sizeof(GeomS)); i = iframe; if(GeomIsOpen && TypeGeomOpen !=0 ) { if(WindowGeom) gtk_widget_destroy(WindowGeom); } iframe=i; WindowGeom = Wins; AjoutePageGeom(NoteBook,geom); TypeGeomOpen = 3; break; case 3: base=g_malloc(sizeof(BaseS)); AjoutePageBasis(Wins,NoteBook,base); break; case 4: comm=g_malloc(sizeof(CommS)); AjoutePageComm(Wins,NoteBook,comm); gtk_widget_destroy(hboxb); hboxb=gtk_hbox_new(TRUE,2); create_label_hbox(hboxb,"FINISH",-1); gtk_container_add (GTK_CONTAINER (widget), hboxb); gtk_widget_show_all(widget); break; } delete_all_children(Wins); gtk_widget_show_all(Wins); gtk_notebook_set_current_page((GtkNotebook*)NoteBook,1); gtk_notebook_remove_page((GtkNotebook *)NoteBook,0); } /************************************************************************************************************/ static void to_cancel_win(GtkWidget* win,gpointer data) { Cancel_YesNo(win,data, destroy_children); } /************************************************************************************************************/ void insert_molpro(gint itype) { GtkWidget *button; int i; gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0); fileopen.command=g_strdup(NameCommandMolpro); if(Wins) destroy_children(Wins); iframe=itype; iinsert=0; Wins= gtk_dialog_new (); /* gtk_window_set_position(GTK_WINDOW(Wins),GTK_WIN_POS_CENTER_ALWAYS);*/ gtk_window_set_position(GTK_WINDOW(Wins), GTK_WIN_POS_CENTER_ON_PARENT); gtk_window_set_transient_for(GTK_WINDOW(Wins),GTK_WINDOW(Fenetre)); gtk_window_set_title(>K_DIALOG(Wins)->window,_("molpro input")); init_child(Wins,DestroyWinsMolpro,_(" Molpro input ")); g_signal_connect(G_OBJECT(Wins),"delete_event",(GCallback)destroy_children,NULL); NoteBook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX (GTK_DIALOG(Wins)->vbox), NoteBook,TRUE, TRUE, 0); switch (iframe) { case 1 : gen=g_malloc(sizeof(GeneS)); AjoutePageGene(NoteBook,gen); break; case 2 : geom=g_malloc(sizeof(GeomS)); i = iframe; if(GeomIsOpen && TypeGeomOpen !=0 ) { if(WindowGeom) gtk_widget_destroy(WindowGeom); } iframe = i; WindowGeom = Wins; AjoutePageGeom(NoteBook,geom); TypeGeomOpen = 3; break; case 3: base=g_malloc(sizeof(BaseS)); AjoutePageBasis(Wins,NoteBook,base); break; case 4: comm=g_malloc(sizeof(CommS)); AjoutePageComm(Wins,NoteBook,comm); break; } gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(Wins)->action_area), FALSE); gtk_widget_realize(Wins); button = create_button(Wins,_("Cancel")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK( to_cancel_win),GTK_OBJECT(Wins)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show (button); button = create_button(Wins,_("OK")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)GetInfo,NULL); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)data_modify,NULL); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(destroy_children),GTK_OBJECT(Wins)); gtk_widget_show_all(Wins); } /************************************************************************************************************/ void molpro() { GtkWidget *button; gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0); fileopen.command=g_strdup(NameCommandMolpro); if(Wins) destroy_children(Wins); iframe=1; iinsert=1; Wins= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Wins),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Wins),GTK_WINDOW(Fenetre)); gtk_window_set_title(>K_DIALOG(Wins)->window,_("molpro input")); init_child(Wins,DestroyWinsMolpro,_(" Molpro input ")); g_signal_connect(G_OBJECT(Wins),"delete_event",(GCallback)destroy_children,NULL); NoteBook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX (GTK_DIALOG(Wins)->vbox), NoteBook,TRUE, TRUE, 0); gen=g_malloc(sizeof(GeneS)); AjoutePageGene(NoteBook,gen); gtk_widget_realize(Wins); button = create_button(Wins,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK( to_cancel_win),GTK_OBJECT(Wins)); gtk_widget_show (button); /* button = create_button(Wins,"SAVE&CLOSE"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)GetInfo,&iframe); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(destroy_children),GTK_OBJECT(Wins)); gtk_widget_show (button); */ button = gtk_button_new(); hboxb=gtk_hbox_new(TRUE,2); gtk_container_add (GTK_CONTAINER (hboxb), create_label_pixmap(Wins,next_xpm,"Next")); gtk_container_add (GTK_CONTAINER (button), hboxb); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, TRUE, TRUE, 0); gtk_widget_show (button); gtk_widget_grab_default(button); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)GetInfo,NULL); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)NewFrame,NULL); gtk_widget_show_all(Wins); } GabeditSrc250/src/Molpro/MInterfaceGene.c0000644000175100017510000004400413130665225020514 0ustar alloucheallouche/* MInterfaceGene.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include "../Common/Global.h" #include "MInterfaceGene.h" #include "../Utils/UtilsInterface.h" static GtkWidget *entryC; static GtkWidget *entryX; static GtkWidget *entryY; static GtkWidget *entryZ; GtkWidget *checkbutton[32]; GtkWidget *ButtonRad1; GtkWidget *ButtonRad2; GtkWidget *Frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *window1; GtkWidget *label1; GtkWidget *entry20; GtkWidget *entry21; GtkWidget *frame1; GtkWidget *vboxo; GtkWidget *vbox1; GtkWidget *hbox1; GtkWidget *entry1; GtkWidget *entry2; GtkWidget *entry3; GtkWidget *entry4; GtkWidget *label5; GtkWidget *entry5; GtkWidget *entry6; GtkWidget *entry7; GtkWidget *vbox2; GtkWidget *entry8; GtkWidget *hbox5; GtkWidget *entry9; GtkWidget *entry10; GtkWidget *entry11; GtkWidget *entry12; GtkWidget *entry13; GtkWidget *entry14; /************************************************************************************************************/ static void Set_Entry1(GtkWidget *b,gpointer d) { if(entryC != NULL ) gtk_widget_set_sensitive(GTK_WIDGET(entryC),TRUE); if(entryX != NULL ) gtk_widget_set_sensitive(GTK_WIDGET(entryX),FALSE); if(entryY != NULL ) gtk_widget_set_sensitive(GTK_WIDGET(entryY),FALSE); if(entryZ != NULL ) gtk_widget_set_sensitive(GTK_WIDGET(entryZ),FALSE); } /************************************************************************************************************/ static void Set_Entry2(GtkWidget *b,gpointer d) { if(entryC != NULL ) gtk_widget_set_sensitive(GTK_WIDGET(entryC),FALSE); if(entryX != NULL ) gtk_widget_set_sensitive(GTK_WIDGET(entryX),TRUE); if(entryY != NULL ) gtk_widget_set_sensitive(GTK_WIDGET(entryY),TRUE); if(entryZ != NULL ) gtk_widget_set_sensitive(GTK_WIDGET(entryZ),TRUE); } /************************************************************************************************************/ /* static void add_separator_to_hbox(GtkWidget *win,GtkWidget *hbox) { GtkWidget *vseparator; vseparator = gtk_vseparator_new (); gtk_widget_show (vseparator); gtk_box_pack_start (GTK_BOX (hbox), vseparator, FALSE, FALSE, 10); } */ /************************************************************************************************************/ static void add_separator_to_vbox(GtkWidget *win,GtkWidget *vbox) { GtkWidget *hseparator; hseparator = gtk_hseparator_new (); gtk_widget_show (hseparator); gtk_box_pack_start (GTK_BOX (vbox), hseparator, FALSE, FALSE, 0); } /************************************************************************************************************/ static GtkWidget *create_label_and_entry_in_hbox_false(GtkWidget *win,GtkWidget *hbox,gchar *tlabel,gchar *tset,gint len) { GtkWidget *entry; GtkWidget *label; label = gtk_label_new (tlabel); gtk_widget_set_size_request(GTK_WIDGET(label),len,-1); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0); entry = gtk_entry_new (); gtk_entry_set_text(GTK_ENTRY(entry),tset); gtk_widget_set_size_request(GTK_WIDGET(entry),60,-1); gtk_widget_show (entry); gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, TRUE, 0); return entry; } /************************************************************************************************************/ static GtkWidget *create_label_and_entry_in_hbox(GtkWidget *win,GtkWidget *hbox,gchar *tlabel,gchar *tset) { GtkWidget *entry; GtkWidget *label; label = gtk_label_new (tlabel); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, FALSE, 0); entry = gtk_entry_new (); gtk_entry_set_text(GTK_ENTRY(entry),tset); gtk_widget_show (entry); gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, TRUE, 0); return entry; } /************************************************************************************************************/ static GtkWidget *create_hbox_in_Vbox(GtkWidget *win,GtkWidget *vbox) { GtkWidget *hbox; hbox = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0); return hbox; } /************************************************************************************************************/ static GtkWidget *create_hboxlabelentry(GtkWidget *win,GtkWidget *vbox,gchar *tlabel,gchar *tset) { GtkWidget *hbox; GtkWidget *entry; hbox = create_hbox_in_Vbox(win,vbox); entry = create_label_and_entry_in_hbox(win,hbox,tlabel,tset); return entry; } /************************************************************************************************************/ static void create_epilogue(GtkWidget *Frame) { GtkWidget *label1; GtkWidget *frame1; GtkWidget *vboxo; GtkWidget *vbox1; GtkWidget *hbox1; GtkWidget *label5; GtkWidget *window1; GtkWidget *hbox5; window1 = Frame; vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (window1), vbox1); hbox1 = gtk_hbox_new (FALSE, 10); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0); label1 = gtk_label_new ("Title :"); gtk_widget_show (label1); gtk_box_pack_start (GTK_BOX (hbox1), label1, FALSE, FALSE, 0); entry20 = gtk_entry_new (); gtk_widget_show (entry20); gtk_box_pack_start (GTK_BOX (hbox1), entry20, TRUE, TRUE, 0); gtk_entry_set_text(GTK_ENTRY(entry20),_("Input file generated by gabedit")); add_separator_to_vbox( window1,vbox1); hbox5 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox5); gtk_box_pack_start (GTK_BOX (vbox1), hbox5, FALSE, FALSE, 0); label5 = gtk_label_new (_("Memory size(in words) : ")); gtk_widget_show (label5); gtk_box_pack_start (GTK_BOX (hbox5), label5, FALSE, FALSE, 0); entry21 = gtk_entry_new (); gtk_entry_set_text(GTK_ENTRY(entry21),"4000000"); gtk_widget_show (entry21); gtk_box_pack_start (GTK_BOX (hbox5), entry21, FALSE, TRUE, 0); add_separator_to_vbox( window1,vbox1); window1 = vbox1; frame1 = gtk_frame_new (_("Global Thresholds ")); gtk_widget_show (frame1); gtk_container_add (GTK_CONTAINER (window1), frame1); gtk_frame_set_label_align (GTK_FRAME (frame1), 0.5, 0.5); hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox1); gtk_container_add (GTK_CONTAINER (frame1), hbox1); vboxo = vbox1; vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox1); gtk_box_pack_start (GTK_BOX (hbox1), vbox1, TRUE, TRUE, 0); entry1=create_hboxlabelentry(window1,vbox1,"Zero : ","1.d-12"); entry2=create_hboxlabelentry(window1,vbox1,"Oneint : ","1.d-12"); entry3=create_hboxlabelentry(window1,vbox1,"Twoint : ","1.d-12"); entry4=create_hboxlabelentry(window1,vbox1,"Prefac : ","1.d-14"); entry5=create_hboxlabelentry(window1,vbox1,"Locali : ","1.d-8"); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox1); gtk_box_pack_start (GTK_BOX (hbox1), vbox1, TRUE, TRUE, 0); entry6=create_hboxlabelentry(window1,vbox1," Eorder : ","1.d-4"); entry7=create_hboxlabelentry(window1,vbox1," Energy : ","1.d-6"); entry8=create_hboxlabelentry(window1,vbox1," Gradiant: ","1.d-2"); entry9=create_hboxlabelentry(window1,vbox1," Step : ","1.d-3"); entry10=create_hboxlabelentry(window1,vbox1," Orbital : ","1.d-5"); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox1); gtk_box_pack_start (GTK_BOX (hbox1), vbox1, TRUE, TRUE, 0); entry11=create_hboxlabelentry(window1,vbox1," Civec : ","1.d-5"); entry12=create_hboxlabelentry(window1,vbox1," Coeff : ","1.d-4"); entry13=create_hboxlabelentry(window1,vbox1," Printci : ","0.05"); entry14=create_hboxlabelentry(window1,vbox1," Punchci : ","99"); } /************************************************************************************************************/ static void create_gprint(GtkWidget *Frame) { guint i; GtkWidget *frame1; GtkWidget *vbox1; GtkWidget *vbox2; GtkWidget *hbox1; GtkWidget *window1; gchar *tGP1[7]={ _("Print basis information "), _("Print CI vector in MCSCF"), _("Print reference CSFs and their coefficients in CI "), _("Print detailed I/O information "), _("Print orbitals in SCF and MCSCF "), _("Print bond angle information"), _("Print information for singles in CI, CCSD ") }; gchar *tGP2[7]={ _("Print bond distances "), _("Print p-space configurations"), _("Print variables each time they are set or changed "), _("Print information for pairs in CI, CCSD "), _("Print microiterations in MCSCF and CI"), _("Print detailed CPU information "), _("Print pair list in CI, CCSD") }; window1 = Frame; vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (window1), vbox1); window1 = vbox1; frame1 = gtk_frame_new (_("Global Print Options")); gtk_widget_show (frame1); gtk_container_add (GTK_CONTAINER (window1), frame1); gtk_frame_set_label_align (GTK_FRAME (frame1), 0.5, 0.5); hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox1); gtk_container_add (GTK_CONTAINER (frame1), hbox1); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox1); gtk_box_pack_start (GTK_BOX (hbox1), vbox1, TRUE, TRUE, 0); for(i=0;i<7;i++) checkbutton[i] = create_checkbutton(window1,vbox1,tGP1[i]); /* GTK_TOGGLE_BUTTON (checkbutton[0])->active=TRUE; GTK_TOGGLE_BUTTON (checkbutton[4])->active=TRUE; */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton[0]), TRUE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton[4]), TRUE); vbox2 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox2); gtk_box_pack_start (GTK_BOX (hbox1), vbox2, TRUE, TRUE, 0); for(i=0;i<7;i++) checkbutton[i+7] = create_checkbutton(window1,vbox2,tGP2[i]); } /************************************************************************************************************/ static void create_oneop(GtkWidget *Frame) { guint i; GtkWidget *frame1; GtkWidget *vbox1; GtkWidget *vbox2; GtkWidget *hbox1; GtkWidget *window1; gchar *tO1[6]={ _("Overlap "), _("Kinetic energy"), _("Potential energy "), _("Delta function "), _("Delta4 function "), _("One-electron Darwin term") }; gchar *tO2[6]={ _("Mass-velocity term "), _("Total Cowan-Griffin Relativistic correction"), _("Products of angular momentum operators "), _("Dipole moments"), _("Second moment "), _("Quadrupole moments and R2 ") }; gchar *tO3[6]={ _("Electric field"), _("Field gradients "), _("Angular momentum operators"), _("Velocity"), _("Spin-orbit operators"), _("ECP spin-orbit operators") }; window1 = Frame; vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (window1), vbox1); window1 = vbox1; frame1 = gtk_frame_new (_("One-electron operators and expectation values")); gtk_widget_show (frame1); gtk_container_add (GTK_CONTAINER (window1), frame1); gtk_frame_set_label_align (GTK_FRAME (frame1), 0.5, 0.5); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (frame1), vbox1); add_separator_to_vbox( window1,vbox1); hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0); ButtonRad1 = gtk_radio_button_new_with_label( NULL,_("Compute with origin at ")); gtk_box_pack_start (GTK_BOX (hbox1), ButtonRad1, FALSE, FALSE, 0); gtk_widget_show (ButtonRad1); entryC = create_label_and_entry_in_hbox_false(window1,hbox1,_("Center Number : "),"1",(gint)(ScreenHeight*0.1)); g_signal_connect(G_OBJECT (ButtonRad1), "clicked", G_CALLBACK(Set_Entry1), NULL); hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0); ButtonRad2 = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonRad1)), _("Compute with origin at ")); gtk_box_pack_start (GTK_BOX (hbox1), ButtonRad2, FALSE, FALSE, 0); gtk_widget_show (ButtonRad2); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ButtonRad2), TRUE); entryX = create_label_and_entry_in_hbox_false(window1,hbox1," X : ","0.0",(gint)(ScreenHeight*0.1)); entryY = create_label_and_entry_in_hbox_false(window1,hbox1," Y : ","0.0",(gint)(ScreenHeight*0.05)); entryZ = create_label_and_entry_in_hbox_false(window1,hbox1," Z : ","0.0",(gint)(ScreenHeight*0.05)); g_signal_connect(G_OBJECT (ButtonRad2), "clicked", G_CALLBACK(Set_Entry2), NULL); Set_Entry2(NULL,NULL); add_separator_to_vbox( window1,vbox1); hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (vbox1), hbox1, TRUE, TRUE, 0); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox1); gtk_box_pack_start (GTK_BOX (hbox1), vbox1, TRUE, TRUE, 0); for(i=0;i<6;i++) checkbutton[i+14] = create_checkbutton(window1,vbox1,tO1[i]); vbox2 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox2); gtk_box_pack_start (GTK_BOX (hbox1), vbox2, TRUE, TRUE, 0); for(i=0;i<6;i++) checkbutton[i+20] = create_checkbutton(window1,vbox2,tO2[i]); vbox2 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox2); gtk_box_pack_start (GTK_BOX (hbox1), vbox2, TRUE, TRUE, 0); for(i=0;i<6;i++) checkbutton[i+26] = create_checkbutton(window1,vbox2,tO3[i]); } /************************************************************************************************************/ static void Add_page_gene(GtkWidget *NoteBook,gchar * tNote,guint j) { GtkWidget *Frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *window1; Frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(Frame), 10); LabelOnglet = gtk_label_new(tNote); LabelMenu = gtk_label_new(tNote); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), Frame, LabelOnglet, LabelMenu); window1 = Frame; g_object_set_data (G_OBJECT (window1), "window1", window1); if(j==0)create_epilogue(Frame); if(j==1)create_gprint(Frame); if(j==2)create_oneop(Frame); } /************************************************************************************************************/ static void create_notebook_gene(GtkWidget *frame) { GtkWidget *vbox; GtkWidget *NoteBook; vbox =create_vbox(frame); NoteBook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX (vbox), NoteBook,FALSE, FALSE, 0); Add_page_gene(NoteBook,_(" Title/Global Thresholds "),0); Add_page_gene(NoteBook,_(" Global Print Options "),1); Add_page_gene(NoteBook,_(" One-electron operators and expectation values "),2); } /************************************************************************************************************/ void AjoutePageGene(GtkWidget *NoteBook,GeneS *gen) { GtkWidget *Frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *window1; entryC=NULL; entryX=NULL; entryY=NULL; entryZ=NULL; Frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(Frame), 20); LabelOnglet = gtk_label_new(_("General")); LabelMenu = gtk_label_new(_("General")); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), Frame, LabelOnglet, LabelMenu); window1 = Frame; g_object_set_data (G_OBJECT (window1), "window1", window1); create_notebook_gene(Frame); gen->title=entry20; gen->memory=entry21; gen->gth_zero=entry1 ; gen->gth_oneint=entry2 ; gen->gth_twoint=entry3 ; gen->gth_prefac=entry4 ; gen->gth_locali=entry5 ; gen->gth_eorder=entry6 ; gen->gth_energy=entry7 ; gen->gth_gradiant=entry8 ; gen->gth_step=entry9 ; gen->gth_orbital=entry10 ; gen->gth_civec=entry11; gen->gth_coeff=entry12; gen->gth_printci=entry13; gen->gth_punchci=entry14; gen->basis=checkbutton[0]; gen->civector=checkbutton[1]; gen->ref=checkbutton[2]; gen->io=checkbutton[3]; gen->orbital=checkbutton[4]; gen->angles=checkbutton[5]; gen->cs=checkbutton[6]; gen->distance=checkbutton[7]; gen->pspace=checkbutton[8]; gen->variable=checkbutton[9]; gen->cp=checkbutton[10]; gen->micro=checkbutton[11]; gen->cpu=checkbutton[12]; gen->pairs=checkbutton[13]; gen->RadCenter=ButtonRad1; gen->entryC=entryC; gen->entryX=entryX; gen->entryY=entryY; gen->entryZ=entryZ; gen->Overlap=checkbutton[14]; gen->Kinetic=checkbutton[15]; gen->Potential=checkbutton[16]; gen->Delta=checkbutton[17]; gen->Delta4=checkbutton[18]; gen->Darwin=checkbutton[19]; gen->MassVelocity=checkbutton[20]; gen->CowanGriffin=checkbutton[21]; gen->ProductsMO=checkbutton[22]; gen->Dipole=checkbutton[23]; gen->Second=checkbutton[24]; gen->Quadrupole=checkbutton[25]; gen->Electric=checkbutton[26]; gen->Field=checkbutton[27]; gen->AngularMO=checkbutton[28]; gen->Velocity=checkbutton[29]; gen->SpinOrbit=checkbutton[30]; gen->ECP=checkbutton[31]; } GabeditSrc250/src/Molpro/MolproBasisLibrary.h0000644000175100017510000000140313130665225021460 0ustar alloucheallouche #ifndef __GABEDIT_MOLPROBASISLIBRARY_H__ #define __GABEDIT_MOLPROBASISLIBRARY_H__ typedef struct _MolproBasis MolproBasis; typedef struct _MolproAtom MolproAtom; typedef struct _MolproOneBasis MolproOneBasis; /************************************/ struct _MolproOneBasis { gchar* name; gboolean pseudo; gboolean orbitals[21]; }; /************************************/ struct _MolproAtom { gchar* symbol; gint numberOfBasis; MolproOneBasis* basis; }; /************************************/ struct _MolproBasis { gint numberOfAtoms; MolproAtom* atoms; }; void get_molpro_basis_list(gchar* Symb,gchar* orb,gchar* outfile,gchar* errfile); void setMolproBasisDlg(); void loadMolproBasis(); void saveMolproBasis(); #endif /* __GABEDIT_MOLPROBASISLIBRARY_H__ */ GabeditSrc250/src/Molpro/MInterfaceGene.h0000644000175100017510000000512013130665225020515 0ustar alloucheallouche/* InterfaceGene.h */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MINTERFACEGENE_H__ #define __GABEDIT_MINTERFACEGENE_H__ typedef struct _GeneS { GtkWidget *title; GtkWidget *memory; GtkWidget *gth_zero; GtkWidget *gth_oneint; GtkWidget *gth_twoint; GtkWidget *gth_prefac; GtkWidget *gth_locali; GtkWidget *gth_eorder; GtkWidget *gth_energy; GtkWidget *gth_gradiant; GtkWidget *gth_step; GtkWidget *gth_orbital; GtkWidget *gth_civec; GtkWidget *gth_coeff; GtkWidget *gth_printci; GtkWidget *gth_punchci; GtkWidget *basis; GtkWidget *distance; GtkWidget *angles; GtkWidget *orbital; GtkWidget *civector; GtkWidget *pairs; GtkWidget *cs; GtkWidget *cp; GtkWidget *ref; GtkWidget *pspace; GtkWidget *micro; GtkWidget *cpu; GtkWidget *io; GtkWidget *variable; GtkWidget *RadCenter; GtkWidget *entryC; GtkWidget *entryX; GtkWidget *entryY; GtkWidget *entryZ; GtkWidget *Overlap; GtkWidget *Kinetic; GtkWidget *Potential; GtkWidget *Delta; GtkWidget *Delta4; GtkWidget *Darwin; GtkWidget *MassVelocity; GtkWidget *CowanGriffin; GtkWidget *ProductsMO; GtkWidget *Dipole; GtkWidget *Second; GtkWidget *Quadrupole; GtkWidget *Electric; GtkWidget *Field; GtkWidget *AngularMO; GtkWidget *Velocity; GtkWidget *SpinOrbit; GtkWidget *ECP; }GeneS; void AjoutePageGene(GtkWidget *,GeneS *); #endif /* __GABEDIT_MINTERFACEGENE_H__ */ GabeditSrc250/src/Molpro/Dep.mk0000644000175100017510000000401613130664665016603 0ustar allouchealloucheMolproLib.o: MolproLib.c ../../Config.h ../Common/GabeditType.h \ ../Utils/Constants.h ../Utils/Utils.h ../Molpro/MolproLib.h MInterfaceBasis.o: MInterfaceBasis.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Utils/AtomsProp.h ../Utils/Constants.h ../Gaussian/GaussGlobal.h \ ../Geometry/GeomGlobal.h ../Utils/Utils.h ../Molpro/MInterfaceGeom.h \ ../Molpro/MInterfaceBasis.h ../Molpro/MolproLib.h \ ../Molpro/MolproBasisLibrary.h MInterfaceComm.o: MInterfaceComm.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Utils/GabeditTextEdit.h ../Geometry/GeomGlobal.h MInterfaceComm.h MInterfaceGene.o: MInterfaceGene.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h MInterfaceGene.h \ ../Utils/UtilsInterface.h MInterfaceGeom.o: MInterfaceGeom.c ../../Config.h MInterfaceGeom.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Geometry/GeomGlobal.h \ ../Geometry/GeomXYZ.h ../Geometry/GeomZmatrix.h \ ../Gaussian/GaussGlobal.h ../Utils/UtilsInterface.h \ ../Geometry/InterfaceGeom.h Molpro.o: Molpro.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Utils/Constants.h MInterfaceGeom.h MInterfaceGene.h \ MInterfaceBasis.h MInterfaceComm.h ../Geometry/GeomGlobal.h \ ../Geometry/InterfaceGeom.h ../Utils/Utils.h ../Utils/AtomsProp.h \ ../Utils/GabeditTextEdit.h ../../pixmaps/Next.xpm MolproBasisLibrary.o: MolproBasisLibrary.c ../../Config.h \ ../Utils/Constants.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Molpro/MolproLib.h \ ../Utils/Utils.h ../Utils/UtilsInterface.h ../Utils/AtomsProp.h \ ../Molpro/MolproBasisLibrary.h ../Common/StockIcons.h GabeditSrc250/src/Molpro/MolproBasisLibrary.c0000644000175100017510000012157213130665225021465 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include "../../Config.h" #include "../Utils/Constants.h" #include "../Common/Global.h" #include "../Molpro/MolproLib.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Molpro/MolproBasisLibrary.h" #include "../Common/StockIcons.h" static GtkWidget* Entry; static gint Factor = 7; #define lengthList 23 /************************************************************************************************************/ typedef enum { LIST_ATOM_SYMBOL = 0, LIST_BASIS_NAME, LIST_PSEUDO, LIST_s, LIST_p, LIST_d, LIST_f, LIST_g, LIST_h, LIST_i, LIST_j, LIST_k, LIST_l, LIST_S, LIST_P, LIST_D, LIST_F, LIST_G, LIST_H, LIST_I, LIST_J, LIST_K, LIST_L, VISIBLE_COLUMN, LIST_DATA /* column for data, this column is not visible */ }ListColumnsTypes; /************************************************************************************************************/ static MolproBasis molproBasis={0,NULL}; static GtkWidget *SetWinDlg = NULL; static GtkWidget *treeView = NULL; typedef struct _DataMolproTree DataMolproTree; struct _DataMolproTree { gint atomNumber; gint basisNumber; }; static gchar selectedRow[100] = "-1"; static void rafreshTreeView(); /********************************************************************************/ typedef enum { MENU_NEW_ATOM =0, MENU_DELETE_ATOM, MENU_NEW_BASIS, MENU_DELETE_BASIS, MENU_SAVE, MENU_CLOSE } EnumMenuType; /********************************************************************************/ static void deleteBasisDlg(GtkWidget *win,gpointer d); static void deleteAtomDlg(GtkWidget *win,gpointer d); static void newBasisDlg(); static void newAtomDlg(); /********************************************************************************/ static void freeMolproBasis() { if(molproBasis.numberOfAtoms<1) { molproBasis.numberOfAtoms = 0; molproBasis.atoms = NULL; return; } molproBasis.numberOfAtoms = 0; molproBasis.atoms = NULL; } /********************************************************************************/ static gint get_num_orb(gchar *orb) { gchar allorb[21] = {'E', 's','p','d','f','g','h','i','j','k','l', 'S','P','D','F','G','H','I','J','K','L'}; gint i=0; for(i=0;i<21;i++) if(orb[0] == allorb[i]) return i; return -1; } /********************************************************************************/ void get_molpro_basis_list(gchar* Symb,gchar* orb,gchar* outfile,gchar* errfile) { gchar *allorb[21] = {"ECP", "s","p","d","f","g","h","i","j","k","l", "S","P","D","F","G","H","I","J","K","L"}; FILE* fout=fopen(outfile,"w"); FILE* ferr=fopen(errfile,"w"); gint numorb1=-1; gint numorb2=-1; gchar bas[BSIZE]; gchar* orbdown = g_strdup(orb); gchar* orbup = g_strdup(orb); gint atomNumber = -1; gint i; lowercase(orbdown); uppercase(orbup); if(molproBasis.numberOfAtoms<1) { loadMolproBasis(); if(molproBasis.numberOfAtoms<1) return; } numorb1 = get_num_orb(orbup); numorb2 = get_num_orb(orbdown); atomNumber = -1; for(i=0;i=0) for(i=0;i=0 && molproBasis.atoms[atomNumber].basis[i].orbitals[numorb1-1]) fprintf(fout,"%s %s %s\n",Symb,allorb[numorb1],bas); if(numorb2>=0 && molproBasis.atoms[atomNumber].basis[i].orbitals[numorb2-1]) fprintf(fout,"%s %s %s\n",Symb,allorb[numorb2],bas); if(numorb2==0 && molproBasis.atoms[atomNumber].basis[i].pseudo) fprintf(fout,"%s %s %s\n",Symb,allorb[numorb2],bas); } g_free(orbdown); g_free(orbup); fclose(ferr); fclose(fout); } /********************************************************************************/ static void destroyDlg(GtkWidget* win, gpointer data) { gtk_widget_destroy(win); } /********************************************************************************/ static void Traitement(guint Operation) { switch(Operation) { case MENU_NEW_ATOM : newAtomDlg(); break; case MENU_DELETE_ATOM : deleteAtomDlg(NULL,NULL); break; case MENU_NEW_BASIS : newBasisDlg(); break; case MENU_DELETE_BASIS : deleteBasisDlg(NULL,NULL); break; case MENU_SAVE : saveMolproBasis(); break; case MENU_CLOSE : destroyDlg(SetWinDlg, NULL); SetWinDlg = NULL; } } /********************************************************************************/ static void set_sensitive_option(GtkUIManager *manager, gchar* path, gboolean sensitive) { GtkWidget *wid = gtk_ui_manager_get_widget (manager, path); if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid, sensitive); } /**********************************************************************************/ static void set_sensitive_menu(GtkUIManager *manager, gint row, gint basisNumber) { gint i; GtkWidget *menu = gtk_ui_manager_get_widget (manager, "/MenuMolproBasis"); static gchar* paths[] = { "/MenuMolproBasis/NewAtom", "/MenuMolproBasis/DeleteAtom", "/MenuMolproBasis/NewBasis", "/MenuMolproBasis/DeleteBasis", "/MenuMolproBasis/Save", "/MenuMolproBasis/Close" }; static gboolean sensitive[] = {TRUE, TRUE, TRUE, TRUE, TRUE, TRUE}; static gint o = MENU_NEW_ATOM; static gint n = MENU_CLOSE-MENU_NEW_ATOM; if (!GTK_IS_MENU (menu)) return; if(row < 0) { sensitive[MENU_NEW_ATOM-o] = TRUE; sensitive[MENU_DELETE_ATOM-o] = FALSE; sensitive[MENU_NEW_BASIS-o] = FALSE; sensitive[MENU_DELETE_BASIS-o] = FALSE; sensitive[MENU_SAVE-o] = TRUE; sensitive[MENU_CLOSE-o] = TRUE; for(i=0;i=0) { sensitive[MENU_NEW_ATOM-o] = FALSE; sensitive[MENU_DELETE_ATOM-o] = FALSE; sensitive[MENU_NEW_BASIS-o] = TRUE; sensitive[MENU_DELETE_BASIS-o] = TRUE; sensitive[MENU_SAVE-o] = TRUE; sensitive[MENU_CLOSE-o] = TRUE; for(i=0;i\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*******************************************************************************************************************************/ static GtkUIManager *newMenu(GtkWidget* win) { GtkActionGroup *actionGroup = NULL; GtkUIManager *manager = NULL; GError *error = NULL; manager = gtk_ui_manager_new (); g_signal_connect_swapped (win, "destroy", G_CALLBACK (g_object_unref), manager); actionGroup = gtk_action_group_new ("GabeditEditBasisMolproLibrary"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntries, numberOfGtkActionEntries, NULL); gtk_ui_manager_insert_action_group (manager, actionGroup, 0); gtk_window_add_accel_group (GTK_WINDOW (win), gtk_ui_manager_get_accel_group (manager)); if (!gtk_ui_manager_add_ui_from_string (manager, uiMenuInfo, -1, &error)) { g_message (_("building menus failed: %s"), error->message); g_error_free (error); } return manager; } /********************************************************************************/ static void eventDispatcher(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; GtkTreeIter iter; GtkTreeModel *model; if (!event) return; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); sprintf(selectedRow ,"%s",gtk_tree_path_to_string(path)); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free(path); if (event->type == GDK_BUTTON_PRESS && ((GdkEventButton *) event)->button == 3) { GdkEventButton *bevent = (GdkEventButton *) event; GtkUIManager *manager = GTK_UI_MANAGER(user_data); if(atoi(selectedRow) < 0) set_sensitive_menu(manager, TRUE, 0); else { DataMolproTree* data = NULL; gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1); if(data) set_sensitive_menu(manager, FALSE, data->basisNumber); } show_menu_popup(manager, bevent->button, bevent->time); } } } GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event); } /********************************************************************************/ static DataMolproTree* newDataMolproTree(gint atomNumber, gint basisNumber) { DataMolproTree* dataTree; dataTree = g_malloc(sizeof(DataMolproTree)); dataTree->atomNumber = atomNumber; dataTree->basisNumber = basisNumber; return dataTree; } /********************************************************************************/ static void freeDataMolproTree() { DataMolproTree* data = NULL; gint i = 0; gchar* pathString = NULL; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); pathString = g_strdup_printf("%d", i); while (gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE) { gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1); if(data) g_free(data); i++; g_free(pathString); pathString = g_strdup_printf("%d", i); } g_free(pathString); } /********************************************************************************/ static gboolean* getExpandInfo() { gint i; gboolean* expandeds = NULL; gint nNodes = 0; gchar* pathString = NULL; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); nNodes = 0; pathString = g_strdup_printf("%d", nNodes); while (gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE) { nNodes++; g_free(pathString); pathString = g_strdup_printf("%d", nNodes); } g_free(pathString); if(nNodes<1) return NULL; expandeds = g_malloc((nNodes+1)*sizeof(gboolean)); for(i=0;iatomNumber; basisNumber = data->basisNumber; if(atomNumber<0) return; if(basisNumber<0) return; if(molproBasis.atoms[atomNumber].basis[basisNumber].name) g_free(molproBasis.atoms[atomNumber].basis[basisNumber].name); numberOfBasis = molproBasis.atoms[atomNumber].numberOfBasis; for(i=basisNumber;iatomNumber; basisNumber = data->basisNumber; if(atomNumber<0) return; if(basisNumber<0) return; t =g_strdup_printf(format, molproBasis.atoms[atomNumber].basis[basisNumber].name, molproBasis.atoms[atomNumber].symbol ); w = Continue_YesNo(deleteOneBasis, NULL,t); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(SetWinDlg)); } /********************************************************************************/ static void deleteOneAtom(GtkWidget *win, gpointer d) { gint atomNumber; gint basisNumber; gint numberOfBasis; gint numberOfAtoms; gint i; gboolean* expandeds; GtkTreeIter node; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); DataMolproTree* data = NULL; if(atoi(selectedRow)<0) return; if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); if(!data) return; expandeds = getExpandInfo(); atomNumber = data->atomNumber; basisNumber = data->basisNumber; if(atomNumber<0) return; if(basisNumber>=0) return; numberOfBasis = molproBasis.atoms[atomNumber].numberOfBasis; numberOfAtoms = molproBasis.numberOfAtoms; for(i=0;iatomNumber; basisNumber = data->basisNumber; if(atomNumber<0) return; if(basisNumber>=0) return; t =g_strdup_printf(format,molproBasis.atoms[atomNumber].symbol); w = Continue_YesNo(deleteOneAtom, NULL,t); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(SetWinDlg)); } /********************************************************************************/ static void newAtom() { gint atomNumber; gint basisNumber; gint numberOfAtoms; MolproAtom* atoms; gchar* symbol = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry))); gboolean* expandeds; gint i; GtkTreeIter node; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); DataMolproTree* data = NULL; if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); atomNumber = -1; basisNumber = -1; if(data) { atomNumber = data->atomNumber; basisNumber = data->basisNumber; } if(strlen(symbol)<=0) return; numberOfAtoms = molproBasis.numberOfAtoms; atoms = molproBasis.atoms; for(i=0;i=0) { MolproAtom t = molproBasis.atoms[numberOfAtoms-1]; for(i=numberOfAtoms-1;i>atomNumber;i--) molproBasis.atoms[i] = molproBasis.atoms[i-1]; molproBasis.atoms[atomNumber] = t; } expandeds = getExpandInfo(); freeDataMolproTree(); rafreshTreeView(); setExpandeds(expandeds,selectedRow); if(expandeds) g_free(expandeds); } /********************************************************************************/ static void setAtom(GtkWidget *w,gpointer data) { gtk_entry_set_text(GTK_ENTRY(Entry),(char *)data); } /********************************************************************************/ static void selectAtom(GtkWidget *w,gpointer entry0) { GtkWidget* Table; GtkWidget* button; GtkWidget* frame; GtkWidget* FenetreTable; guint i; guint j; GtkStyle *button_style; GtkStyle *style; gchar*** Symb = get_periodic_table(); FenetreTable = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(FenetreTable),TRUE); gtk_window_set_title(GTK_WINDOW(FenetreTable),_("Select your atom")); gtk_window_set_default_size (GTK_WINDOW(FenetreTable),(gint)(ScreenWidth*0.5),(gint)(ScreenHeight*0.4)); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_container_add(GTK_CONTAINER(FenetreTable),frame); gtk_widget_show (frame); Table = gtk_table_new(PERIODIC_TABLE_N_ROWS-1,PERIODIC_TABLE_N_COLUMNS,TRUE); gtk_container_add(GTK_CONTAINER(frame),Table); button_style = gtk_widget_get_style(FenetreTable); for ( i = 0;iatomNumber; basisNumber = data->basisNumber; sprintf(title,_("New Atom")); WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),title); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(SetWinDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); Entry = create_label_entry(hbox,_(" Atom Symbol : "),-1,-1); gtk_entry_set_text(GTK_ENTRY(Entry),"H"); gtk_editable_set_editable((GtkEditable*) Entry,FALSE); Button = gtk_button_new_with_label(_(" Set ")); gtk_box_pack_start (GTK_BOX(hbox), Button, TRUE, TRUE, 5); g_signal_connect(G_OBJECT(Button), "clicked", (GCallback)selectAtom,Entry); gtk_widget_realize(WinDlg); Button = create_button(WinDlg,_("Cancel")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,_("OK")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)newAtom,GTK_OBJECT(WinDlg)); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /********************************************************************************/ static void newBasis() { gint atomNumber; gint basisNumber; gint numberOfBasis; MolproOneBasis* basis; gchar* basisName = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry))); gboolean* expandeds; gint i; GtkTreeIter node; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); DataMolproTree* data = NULL; if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); if(!data) return; atomNumber = data->atomNumber; basisNumber = data->basisNumber; if(atomNumber<0) return; delete_all_spaces(basisName); if(strlen(basisName)<=0) return; numberOfBasis = molproBasis.atoms[atomNumber].numberOfBasis; basis = molproBasis.atoms[atomNumber].basis; for(i=0;i=0) { MolproOneBasis t = molproBasis.atoms[atomNumber].basis[numberOfBasis-1]; for(i=numberOfBasis-1;i>basisNumber;i--) molproBasis.atoms[atomNumber].basis[i] = molproBasis.atoms[atomNumber].basis[i-1]; molproBasis.atoms[atomNumber].basis[basisNumber] = t; } expandeds = getExpandInfo(); freeDataMolproTree(); rafreshTreeView(); setExpandeds(expandeds,selectedRow); if(expandeds) g_free(expandeds); } /********************************************************************************/ static void newBasisDlg() { GtkWidget *WinDlg; GtkWidget *Button; GtkWidget *hbox; GtkWidget *frame; GtkWidget *vboxframe; gint atomNumber; gint basisNumber; gchar title[BSIZE]; GtkTreeIter node; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); DataMolproTree* data = NULL; if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); if(!data) return; atomNumber = data->atomNumber; basisNumber = data->basisNumber; if(atomNumber<0 ) return; sprintf(title,_("New Basis for %s atom :"),molproBasis.atoms[atomNumber].symbol); WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),title); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(SetWinDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); Entry = create_label_entry(hbox,_(" Basis Name : "),-1,-1); gtk_editable_set_editable((GtkEditable*) Entry,TRUE); gtk_widget_realize(WinDlg); Button = create_button(WinDlg,"Cancel"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,_("OK")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)newBasis,GTK_OBJECT(WinDlg)); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /********************************************************************************/ static void toggledAvailable (GtkCellRendererToggle *cell, gchar *path_string, gpointer data) { gint column = GPOINTER_TO_INT(data); GtkTreeIter iter; GtkTreePath *path = gtk_tree_path_new_from_string (path_string); gboolean value = FALSE; DataMolproTree* dataTree = NULL; GtkTreeModel *model; if(column<2) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_model_get (model, &iter, column, &value, LIST_DATA, &dataTree, -1); value = !value; gtk_tree_store_set (GTK_TREE_STORE (model), &iter, column, value, -1); gtk_tree_path_free (path); if(data) { gint iorb = column-2; gint ia = dataTree->atomNumber; gint ib = dataTree->basisNumber; if(iorb==0) molproBasis.atoms[ia].basis[ib].pseudo = value; else { iorb = iorb -1; molproBasis.atoms[ia].basis[ib].orbitals[iorb] = value; } } } /********************************************************************************/ static void addFeuille(GtkTreeIter *parent, MolproOneBasis* molproOneBasis, gint atomNumber, gint basisNumber) { GtkTreeIter feuille; DataMolproTree* dataTree; gint i; GtkTreeModel *model; GtkTreeStore *store; model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); store = GTK_TREE_STORE (model); dataTree = newDataMolproTree(atomNumber,basisNumber); gtk_tree_store_append(store, &feuille, parent); gtk_tree_store_set (store, &feuille, LIST_ATOM_SYMBOL, " ", -1); gtk_tree_store_set (store, &feuille, LIST_BASIS_NAME, molproOneBasis->name, -1); gtk_tree_store_set (store, &feuille, LIST_PSEUDO, molproOneBasis->pseudo, -1); for(i=3;iorbitals[i-3], -1); gtk_tree_store_set (store, &feuille, LIST_DATA, dataTree, -1); gtk_tree_store_set (store, &feuille, VISIBLE_COLUMN, TRUE, -1); } /********************************************************************************/ static GtkTreeIter addNode(gchar *text,gint atomNumber) { GtkTreeIter node; DataMolproTree* dataTree; GtkTreeModel *model; GtkTreeStore *store; model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); store = GTK_TREE_STORE (model); gtk_tree_store_append(store, &node, NULL); dataTree = newDataMolproTree(atomNumber,-1); gtk_tree_store_set (store, &node, LIST_ATOM_SYMBOL, text, -1); gtk_tree_store_set (store, &node, LIST_BASIS_NAME, " ", -1); gtk_tree_store_set (store, &node, VISIBLE_COLUMN, FALSE, -1); gtk_tree_store_set (store, &node, LIST_DATA, dataTree, -1); return node; } /***********************************************************************/ static void addBasisList() { gint i; GtkTreeIter node; MolproOneBasis* molproOneBasis; gint numberOfBasis = 0; gint j; for(i=0;i200) return; molproBasis.numberOfAtoms = natoms; molproBasis.atoms = g_malloc(natoms*sizeof(MolproAtom)); for(i=0;i #include #include #include #include #include "../Common/GabeditType.h" #include "../Utils/Constants.h" #include "../Utils/Utils.h" #include "../Molpro/MolproLib.h" /********************************************************************************/ static gint get_num_orb(gchar *orb) { gchar allorb[21] = {'E', 's','p','d','f','g','h','i','j','k','l', 'S','P','D','F','G','H','I','J','K','L'}; gint i=0; for(i=0;i<21;i++) if(orb[0] == allorb[i]) return i; return -1; } /********************************************************************************/ void get_basis_list(gchar* Symb,gchar* orb,gchar* outfile,gchar* errfile) { gchar *allorb[21] = {"ECP", "s","p","d","f","g","h","i","j","k","l", "S","P","D","F","G","H","I","J","K","L"}; FILE* fout=fopen(outfile,"w"); FILE* ferr=fopen(errfile,"w"); gchar *filename = g_strdup_printf("%s/molprobasis",gabedit_directory()); FILE* fin = fopen(filename,"r"); gchar t[BSIZE]; gint numorb1=-1; gint numorb2=-1; gint j=0; gchar* symb = g_malloc(5*sizeof(gchar)); gchar* bas = g_malloc(30*sizeof(gchar)); gchar* dump = g_malloc(30*sizeof(gchar)); gint orbok[21]; gint nbas = 0; gchar* orbdown = g_strdup(orb); gchar* orbup = g_strdup(orb); lowercase(orbdown); uppercase(orbup); if(!fin) { create_molpro_basis_file(); fin = fopen(filename,"r"); } if(!fin) { fprintf(ferr,_("Sorry the molprobasis is corrupted.\nPlease reinstall gabedit\n")); fclose(ferr); fclose(fout); return; } numorb1 = get_num_orb(orbup); numorb2 = get_num_orb(orbdown); /* Debug("numorb1 = %d numorb2 = %d \n",numorb1,numorb2);*/ { char* e = fgets(t,BSIZE,fin);} /* number of atoms */ while(!feof(fin)) { if(!fgets(t,BSIZE,fin)) break; if(strstr(t,"Atom") && strstr(t,Symb) && sscanf(t,"%s %s",dump,symb)==2 && strcmp(Symb,symb) ==0 ) { if(!fgets(t,BSIZE,fin)) break; sscanf(t,"%d",&nbas); for(j=0;j=0 && orbok[numorb1]!=0) { /* Debug("%s %s %s\n",Symb,allorb[numorb1],bas);*/ fprintf(fout,"%s %s %s\n",Symb,allorb[numorb1],bas); } if(numorb2>=0 && orbok[numorb2]!=0) fprintf(fout,"%s %s %s\n",Symb,allorb[numorb2],bas); } break; } } /* Debug("End of reading Symb = %s %s \n",Symb,orb);*/ fclose(ferr); fclose(fin); fclose(fout); } /********************************************************************************/ gboolean create_molpro_basis_file() { gchar *filename = g_strdup_printf("%s/molprobasis",gabedit_directory()); FILE* fout = fopen(filename,"w"); g_free(filename); if(fout==NULL) { return FALSE; } fprintf(fout,"Natoms = 102\n"); fprintf(fout,"Atom H\n"); fprintf(fout,"137\n"); fprintf(fout,"431G 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"631G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SV 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCV5Z 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACV5Z 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVQZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVQZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV5Z 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV5Z 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV6Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV6Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCV5Z 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CV5Z 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVQZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVQZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV5Z 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V5Z 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV6Z-old 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V6Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1P 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2P 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3P 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Chipman 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pV5Z 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pV6Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVQZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Xfit 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZP 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP+ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SV 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SVP 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SVP+ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-TZ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-pVTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-VTZ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G* 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G* 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G** 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G* 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G** 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G* 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31++G 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311++G 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G1P 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G1P 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G2P 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G3P 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G2P 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G3P 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31GD 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311GD 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"H02 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H03 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H04 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H05 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H06 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H07 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H08 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H09 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H10 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi-bang 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MINI 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"pV6Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ROOS 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg3 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg4 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg5 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G* 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G* 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"TZVP-DFT-orb 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V08 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VANDUIJN 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T6 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"TAYLOR 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T4 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T3 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom He\n"); fprintf(fout,"90\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCV5Z 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACV5Z 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVQZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVQZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV5Z 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV5Z 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCV5Z 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CV5Z 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVQZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVQZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV5Z 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V5Z 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pV5Z 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVQZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Xfit 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G* 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G* 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G** 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G* 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G** 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G* 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G1P 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G1P 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G2P 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G3P 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G2P 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G3P 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31GD 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311GD 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"H03 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H04 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H05 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H06 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H07 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H08 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H09 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H10 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ROOS 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G* 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G* 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Li\n"); fprintf(fout,"79\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SV 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SVP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SVP+ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-TZ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"6-311GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"LI_3-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H07 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H08 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H09 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H10 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H11 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ROOS 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G* 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G* 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Be\n"); fprintf(fout,"78\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SV 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SVP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SVP+ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-TZ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-pVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"6-311GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"H07 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H08 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H09 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H10 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H11 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ROOS 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G* 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G* 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom B\n"); fprintf(fout,"129\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVQZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVQZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"4D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2G 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1H 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1G 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Chipman 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pV6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP+ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SV 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SVP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SVP+ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-TZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-pVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"6-311GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"H0603 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0703 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0804 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0905 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1006 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1107 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ROOS 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg4 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg5 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G* 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G* 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom C\n"); fprintf(fout,"145\n"); fprintf(fout,"631G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SV 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVQZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVQZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV6Z-old 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"4D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2G 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1H 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1G 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Chipman 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pV6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP+ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SV 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SVP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SVP+ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-TZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-pVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"6-311GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"H0603 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0703 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0804 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0905 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1006 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1107 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi-bang 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZ73 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"pV6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ROOS 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg4 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg5 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G* 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G* 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"TZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V1308 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VANDUIJN 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T6 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"TAYLOR 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T4 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T2 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom N\n"); fprintf(fout,"143\n"); fprintf(fout,"631G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SV 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVQZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVQZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV6Z-old 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"4D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2G 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1H 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1G 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Chipman 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pV6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP+ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SV 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SVP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SVP+ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-TZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-pVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"6-311GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"H0703 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0804 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0905 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1006 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1107 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi-bang 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"pV6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ROOS 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 \n"); fprintf(fout,"rydberg1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg4 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg5 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G* 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G* 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"TZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V1308 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VANDUIJN 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T6 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"TAYLOR 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T4 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T2 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom O\n"); fprintf(fout,"143\n"); fprintf(fout,"631G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SV 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVQZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVQZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV6Z-old 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"4D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2G 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1H 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1G 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Chipman 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pV6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP+ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SV 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SVP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SVP+ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-TZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-pVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"6-311GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"H0703 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0804 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0905 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1006 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1107 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi-bang 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"pV6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ROOS 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg4 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg5 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G* 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G* 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"TZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V1308 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VANDUIJN 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T6 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"TAYLOR 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T4 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T2 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom F\n"); fprintf(fout,"151\n"); fprintf(fout,"631G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SV 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVQZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVQZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV6Z 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ+ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1DM 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2DM 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3DM 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1FM 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2FM 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ+ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1DMT 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2DMT 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3DMT 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1FMT 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2FMT 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"4D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2G 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1H 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1G 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Chipman 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP+ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SV 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SVP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SVP+ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-TZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-pVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"6-311GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"H0703 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0804 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0905 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1006 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1107 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi-bang 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ROOS 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg4 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg5 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G* 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G* 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"TZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V1308 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"FAVG 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T6 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"TAYLOR 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T4 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"T2 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Ne\n"); fprintf(fout,"113\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVQZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVQZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pCVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ACVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pCVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"CVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"4D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2G 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1H 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3D 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"2F 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"1G 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"d-aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP+ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SV 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SVP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-SVP+ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-TZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-pVTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"6-311GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"H1107 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ROOS 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg4 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg5 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G* 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G* 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Na\n"); fprintf(fout,"84\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"6-311GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0905 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1006 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1107 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"M1209P 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"M1209 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MC1209 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1810 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1811 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1910 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1911 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P2012 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PARTRIDG 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1513 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1613 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1614 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1813 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P-1811 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P-1911 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P+1510 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P+1611 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ROOS 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G* 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G* 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Mg\n"); fprintf(fout,"82\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"6-311GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0905 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1006 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1107 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1206 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"M1209P 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"M1209 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1709 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1810 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1811 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1911 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P2012 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PARTRIDG 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1813 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1814 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1913 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1914 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P+1811 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ROOS 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G* 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G* 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Al\n"); fprintf(fout,"93\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP+ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"6-311GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0905 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1006 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1107 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1209 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"M1209 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1712 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1813 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1914 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P2015 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PARTRIDG 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ROOS 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg4 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg5 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G* 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G* 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"TZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Si\n"); fprintf(fout,"91\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP+ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"6-311GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0905 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1006 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1107 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"M1209 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi-bang 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1712 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1813 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1914 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P2015 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ROOS 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg4 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg5 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G* 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G* 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"TZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom P\n"); fprintf(fout,"94\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP+ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"6-311GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0905 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1006 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1107 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1208 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"M1209 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi-bang 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1712 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1813 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1914 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P-1813 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P-1914 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P2015 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ROOS 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg4 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg5 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G* 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G* 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"TZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom S\n"); fprintf(fout,"94\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP+ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"6-311GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0905 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1006 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1107 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1208 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"M1209 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi-bang 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1712 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1813 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1914 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P-1813 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P-1914 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P2015 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ROOS 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg4 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg5 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G* 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G* 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"TZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Cl\n"); fprintf(fout,"95\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Dunning-DZP+ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311++G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311+G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"6-311GF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H0905 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1006 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1107 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1208 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1209 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"M1209 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi-bang 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1712 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1813 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1914 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P-1813 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P-1914 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P2015 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ROOS 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg4 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"rydberg5 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G* 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G* 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"TZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Ar\n"); fprintf(fout,"82\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pV5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"V5Z 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"GAMESS-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"3-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-21G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G** 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G* 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G1D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G2D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-31G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"6-311G3D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1209 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"M1209 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"A1610 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1712 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1510 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1610 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1611 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1812 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1813 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1913 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P1914 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P2015 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ROOS 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G* 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G* 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"TZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom K\n"); fprintf(fout,"34\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZ-ECP2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1206 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W1208 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP18SHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP18SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Ca\n"); fprintf(fout,"33\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H1206 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"mini-scaled 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP18SHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP18SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Sc\n"); fprintf(fout,"48\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Bauschlicher-ANO 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HAY 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H090503 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H120604 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P231608 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P211308 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P201209 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PARTRIDG 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P211409 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P221409 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P231510 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P231511 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P211408 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PSUPP 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MDF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W140905 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WACHTERS 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WSUPP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Ti\n"); fprintf(fout,"42\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Bauschlicher-ANO 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HAY 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H090503 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H120604 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P201209 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PARTRIDG 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PSUPP 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MDF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP18MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W140905 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WACHTERS 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WSUPP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom V\n"); fprintf(fout,"41\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Bauschlicher-ANO 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HAY 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H090503 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H120604 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P201209 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PARTRIDG 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PSUPP 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MDF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W140905 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WACHTERS 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WSUPP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Cr\n"); fprintf(fout,"41\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Bauschlicher-ANO 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HAY 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H090503 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H120604 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P201209 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PARTRIDG 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PSUPP 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MDF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W140905 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WACHTERS 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WSUPP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Mn\n"); fprintf(fout,"41\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Bauschlicher-ANO 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HAY 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H090503 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H120604 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P201209 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PARTRIDG 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PSUPP 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MDF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W140905 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WACHTERS 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WSUPP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Fe\n"); fprintf(fout,"41\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Bauschlicher-ANO 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HAY 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H090503 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H120604 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P201209 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PARTRIDG 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PSUPP 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MDF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W140905 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WACHTERS 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WSUPP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Co\n"); fprintf(fout,"41\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Bauschlicher-ANO 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HAY 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H090503 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H120604 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P201209 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PARTRIDG 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PSUPP 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MDF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W140905 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WACHTERS 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WSUPP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Ni\n"); fprintf(fout,"41\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Bauschlicher-ANO 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HAY 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H090503 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H120604 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P201209 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PARTRIDG 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PSUPP 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MDF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W140905 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WACHTERS 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WSUPP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Cu\n"); fprintf(fout,"50\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Bauschlicher-ANO 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HAY 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H090503 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H120604 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P201209 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PARTRIDG 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PD 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PARTRIDD 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PSUPP 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MDF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28SHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28SDF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W140905 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WACHTERS 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"W 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WS 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WSUPP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WSSUPP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WSP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WD 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"WDP 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Zn\n"); fprintf(fout,"33\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a2-Xfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP2-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H090503 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H120604 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"HUZINAGA 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"H 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P201209 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"P 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"PARTRIDG 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MDF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28SDF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Ga\n"); fprintf(fout,"39\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-SV 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-SVP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-VTZP 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP18MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP10MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Ge\n"); fprintf(fout,"37\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-SV 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-SVP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-VTZP 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28SHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom As\n"); fprintf(fout,"36\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-SV 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-SVP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-VTZP 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Se\n"); fprintf(fout,"36\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-SV 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-SVP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-VTZP 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Br\n"); fprintf(fout,"37\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-SV 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-SVP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-VTZP 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi-bang 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Kr\n"); fprintf(fout,"36\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-TZv 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Ahlrichs-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"aug-cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"AVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-SV 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-SVP 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-VTZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Binning-VTZP 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VDZ 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VQZ 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"cc-pVTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"VTZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO6G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Rb\n"); fprintf(fout,"16\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP36SHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP36SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Sr\n"); fprintf(fout,"19\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Partridge1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP36SHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP36SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-2G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO2G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Y\n"); fprintf(fout,"14\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Zr\n"); fprintf(fout,"14\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Nb\n"); fprintf(fout,"14\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Mo\n"); fprintf(fout,"14\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Tc\n"); fprintf(fout,"14\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Ru\n"); fprintf(fout,"14\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Rh\n"); fprintf(fout,"14\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Pd\n"); fprintf(fout,"14\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Ag\n"); fprintf(fout,"16\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46SHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46SDF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Cd\n"); fprintf(fout,"14\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46SDF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom In\n"); fprintf(fout,"15\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP36MWB 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Sn\n"); fprintf(fout,"12\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DGauss-a1-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Sb\n"); fprintf(fout,"11\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Te\n"); fprintf(fout,"11\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO-3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"STO3G 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom I\n"); fprintf(fout,"11\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi-bang 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46MDF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Xe\n"); fprintf(fout,"9\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DeMon-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"DZVP-DFT-orb 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Cs\n"); fprintf(fout,"10\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"midi 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP54SHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP54SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46MWB 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Ba\n"); fprintf(fout,"12\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP54SDF 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46MHF_MP2 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46MWB_MP2 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom La\n"); fprintf(fout,"10\n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP47MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP47MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Ce\n"); fprintf(fout,"8\n"); fprintf(fout,"ECP28MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP46MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP47MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP47MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP48MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP48MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Pr\n"); fprintf(fout,"6\n"); fprintf(fout,"ECP28MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP48MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP48MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP49MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP49MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Nd\n"); fprintf(fout,"6\n"); fprintf(fout,"ECP28MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP49MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP49MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP50MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP50MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Pm\n"); fprintf(fout,"6\n"); fprintf(fout,"ECP28MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP50MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP50MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP51MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP51MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Sm\n"); fprintf(fout,"6\n"); fprintf(fout,"ECP28MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP51MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP51MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP52MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP52MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Eu\n"); fprintf(fout,"6\n"); fprintf(fout,"ECP28MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP52MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP52MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP53MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP53MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Gd\n"); fprintf(fout,"6\n"); fprintf(fout,"ECP28MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP53MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP53MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP54MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP54MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Tb\n"); fprintf(fout,"6\n"); fprintf(fout,"ECP28MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP54MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP54MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP55MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP55MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Dy\n"); fprintf(fout,"6\n"); fprintf(fout,"ECP28MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP55MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP55MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP56MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP56MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Ho\n"); fprintf(fout,"6\n"); fprintf(fout,"ECP28MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP56MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP56MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP57MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP57MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Er\n"); fprintf(fout,"6\n"); fprintf(fout,"ECP28MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP57MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP57MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP58MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP58MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Tm\n"); fprintf(fout,"6\n"); fprintf(fout,"ECP28MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP58MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP58MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP59MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP59MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Yb\n"); fprintf(fout,"9\n"); fprintf(fout,"ECP28MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP28FMD 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP59MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP59MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MDF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP68MDF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Lu\n"); fprintf(fout,"2\n"); fprintf(fout,"ECP60MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Hf\n"); fprintf(fout,"9\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Ta\n"); fprintf(fout,"9\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom W\n"); fprintf(fout,"9\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Re\n"); fprintf(fout,"9\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Os\n"); fprintf(fout,"9\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Ir\n"); fprintf(fout,"9\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Pt\n"); fprintf(fout,"8\n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Au\n"); fprintf(fout,"14\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP2 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"LANL2DZ 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MHF_MP2 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB_MP2 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MDF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78SHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78SDF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Hg\n"); fprintf(fout,"11\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MHF_MP2 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB_MP2 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MDF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Tl\n"); fprintf(fout,"11\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP68MWB 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MHF 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB_MP2 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MDF 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Pb\n"); fprintf(fout,"6\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Bi\n"); fprintf(fout,"6\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"MBS-ECP1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Po\n"); fprintf(fout,"4\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom At\n"); fprintf(fout,"4\n"); fprintf(fout,"Ahlrichs-Cfit 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Rn\n"); fprintf(fout,"3\n"); fprintf(fout,"ECP78MHF 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"SBKJC 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Ac\n"); fprintf(fout,"3\n"); fprintf(fout,"ECP60MHF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Th\n"); fprintf(fout,"3\n"); fprintf(fout,"ECP60MHF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Pa\n"); fprintf(fout,"3\n"); fprintf(fout,"ECP60MHF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom U\n"); fprintf(fout,"4\n"); fprintf(fout,"LANL2DZ 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MHF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Np\n"); fprintf(fout,"4\n"); fprintf(fout,"LANL2DZ 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MHF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Pu\n"); fprintf(fout,"4\n"); fprintf(fout,"LANL2DZ 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MHF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Am\n"); fprintf(fout,"3\n"); fprintf(fout,"ECP60MHF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Cm\n"); fprintf(fout,"3\n"); fprintf(fout,"ECP60MHF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Bk\n"); fprintf(fout,"3\n"); fprintf(fout,"ECP60MHF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Cf\n"); fprintf(fout,"3\n"); fprintf(fout,"ECP60MHF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Es\n"); fprintf(fout,"3\n"); fprintf(fout,"ECP60MHF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Fm\n"); fprintf(fout,"3\n"); fprintf(fout,"ECP60MHF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Md\n"); fprintf(fout,"3\n"); fprintf(fout,"ECP60MHF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom No\n"); fprintf(fout,"3\n"); fprintf(fout,"ECP60MHF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Lr\n"); fprintf(fout,"3\n"); fprintf(fout,"ECP60MHF 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP60MWB 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP78MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"Atom Ha\n"); fprintf(fout,"3\n"); fprintf(fout,"ECP92MHF 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP92MDF 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fprintf(fout,"ECP92MWB 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"); fclose(fout); return TRUE; } /********************************************************************************/ GabeditSrc250/src/Molpro/MInterfaceGeom.h0000644000175100017510000000305013130665225020526 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MINTERFACEGEOM_H__ #define __GABEDIT_MINTERFACEGEOM_H__ typedef struct _GeomS { GtkWidget *Symentry; GtkWidget *Optentry; GtkWidget *Unitentry; }GeomS; void AjoutePageGeom(GtkWidget *,GeomS *); #endif /* __GABEDIT_MINTERFACEGEOM_H__ */ GabeditSrc250/src/Molpro/MInterfaceBasis.c0000644000175100017510000010606713130665225020707 0ustar alloucheallouche/* MInterfaceBasis.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "../Gaussian/GaussGlobal.h" #include "../Geometry/GeomGlobal.h" #include "../Utils/Utils.h" #include "../Molpro/MInterfaceGeom.h" #include "../Molpro/MInterfaceBasis.h" #include "../Molpro/MolproLib.h" #include "../Molpro/MolproBasisLibrary.h" #define NHBOX 5 /********************************************************************************/ static GtkWidget *listOfAtoms; static GtkWidget* BoiteVP; static GtkWidget* BoiteHP[NHBOX]; static GtkWidget *BoiteListeBaseAll[NORB+1] ; static GtkWidget *Wins = NULL; static gchar pathSelectedAtom[100] = "-1"; static gint NListeBase; static gchar *OrbSel; #ifdef G_OS_WIN32 static gint originbasis = 1; /* 1 -> from file */ #else static gint originbasis = 0; /* 0 -> libmol */ #endif gpointer d=NULL; GtkWidget *LabelInfo; typedef struct _ProgressData { GtkWidget *window; GtkWidget *pbar; GtkWidget *pbox; } ProgressData; ProgressData *pdata; /********************************************************************************/ static Cbasetot* get_base_total_from_path() { GtkTreeModel *model; GtkTreeIter iter; Cbasetot *base; if(atoi(pathSelectedAtom)<0) return NULL; model = gtk_tree_view_get_model(GTK_TREE_VIEW(listOfAtoms)); if(!gtk_tree_model_get_iter_from_string (model, &iter, pathSelectedAtom)) return NULL; gtk_tree_model_get (model, &iter, ATOMLIST_DATA, &base, -1); return base; } /********************************************************************************/ static void set_base_total_from_path(Cbasetot *basetot) { GtkTreeModel *model; GtkTreeIter iter; GtkListStore *store; if(atoi(pathSelectedAtom)<0) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(listOfAtoms)); if(!gtk_tree_model_get_iter_from_string (model, &iter, pathSelectedAtom)) return; store = GTK_LIST_STORE (model); gtk_list_store_set (store, &iter, ATOMLIST_DATA, (gpointer) basetot, -1); } /********************************************************************************/ static void removeSeletedAtom() { GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; if(atoi(pathSelectedAtom)<0) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(listOfAtoms)); if(!gtk_tree_model_get_iter_from_string (model, &iter, pathSelectedAtom)) return; store = GTK_LIST_STORE (model); gtk_list_store_remove(store, &iter); } /************************************************************************************************************/ static void selectRow(GtkWidget* list, gint row) { GtkTreePath *path; gchar* tmp = g_strdup_printf("%d",row); path = gtk_tree_path_new_from_string (tmp); g_free(tmp); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (list)), path); gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW (list), path, NULL, FALSE,0.5,0.5); gtk_tree_path_free(path); } /********************************************************************************/ /* Update the value of the progress bar so that we get some movement */ gint progress( gpointer d ) { gpointer data = pdata->pbar; gdouble new_val; gchar *t = NULL; if(d) new_val = 0; else new_val = gtk_progress_bar_get_fraction( GTK_PROGRESS_BAR(data) ) + 0.1; if (new_val > 1) new_val = 1.0; gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (data), new_val); if(originbasis == 0) t = g_strdup_printf(_(" Get Basis using libmol : %.0f%%"),new_val*100); else t = g_strdup_printf(_(" Get Basis from gabedit basis file : %.0f%%"),new_val*100); gtk_label_set_text( GTK_LABEL(LabelInfo),t); g_free(t); while( gtk_events_pending() ) gtk_main_iteration(); return TRUE; } /********************************************************************************/ void destroy_progress( GtkWidget *widget, gpointer data) { gtk_widget_destroy(pdata->pbox); g_free(pdata); pdata = NULL; } /********************************************************************************/ void create_progress_bar(GtkWidget *hbox) { GtkWidget *align; GtkWidget *separator; GtkWidget *vbox; pdata = g_malloc( sizeof(ProgressData) ); pdata->window = Wins; gtk_widget_show(hbox); pdata->pbox = vbox = gtk_vbox_new (FALSE, 5); gtk_container_set_border_width (GTK_CONTAINER (vbox), 10); gtk_container_add (GTK_CONTAINER (hbox), vbox); gtk_widget_show(vbox); align = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 5); gtk_widget_show(align); pdata->pbar = gtk_progress_bar_new (); gtk_container_add (GTK_CONTAINER (align), pdata->pbar); gtk_widget_show_all(pdata->pbar); separator = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, FALSE, 0); gtk_widget_show(separator); } /********************************************************************************/ gchar *get_one_base(gchar **AtomTypeBase,gchar* cont) { gchar *t; if(AtomTypeBase[2][strlen(AtomTypeBase[2])-1] =='\n') AtomTypeBase[2][strlen(AtomTypeBase[2])-1] = ' '; if(cont) t=g_strdup_printf("%s,%s,%s%s\n",AtomTypeBase[0],AtomTypeBase[1],AtomTypeBase[2],cont); else t=g_strdup_printf("%s,%s,%s\n",AtomTypeBase[0],AtomTypeBase[1],AtomTypeBase[2]); return t; } /********************************************************************************/ gint get_num_orb(gchar *nameorb) { gchar *orb = g_strdup(nameorb); gint k=-1; uppercase(orb); if(strcmp(orb,"ECP")==0) return -1; switch(orb[0]) { case 'S' : k=0;break; case 'P' : k=1;break; case 'D' : k=2;break; default : if(orb[0]<='I') k=(gint)orb[0]-(gint)'F'+3; } g_free(orb); return k; } /********************************************************************************/ void DefineTypeAll(Cbasetot *basetot,gchar **AtomTypeBase,gchar* cont) { gint k = -1; gchar *t = NULL; gint i; gint j; if(!strcmp(AtomTypeBase[0],"ECP") ) { if(basetot->ECP) g_free(basetot->ECP); basetot->ECP = get_one_base(AtomTypeBase,cont); k=-1; } else { k = get_num_orb(AtomTypeBase[0]); if(k==-1) return; if(basetot->Orb[k]) g_free(basetot->Orb[k]); basetot->Orb[k] = get_one_base(AtomTypeBase,cont); } /* BoiteListeBaseAll[1] <=> s and BoiteListeBaseAll[2] <=> p ...*/ if(k+2 >NORB) return; for(j=k+2;j<=NORB;j++) if(BoiteListeBaseAll[j]) gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (BoiteListeBaseAll[j]))); j=k+2; if(BoiteListeBaseAll[j]) { GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(BoiteListeBaseAll[j])); gchar* pathString; GtkTreeIter iter; i=0; pathString = g_strdup_printf("%d", i); while (gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE) { gtk_tree_model_get (model, &iter, BASISLIST_NAME, &t, -1); i++; g_free(pathString); pathString = g_strdup_printf("%d", i); if(!strcmp(t,AtomTypeBase[2])) { selectRow(BoiteListeBaseAll[j],i-1); break; } } g_free(pathString); } } /********************************************************************************/ void UnDefineTypeAll(Cbasetot *basetot,gchar **AtomTypeBase) { gint k; if(!strcmp(AtomTypeBase[0],"ECP") ) { if(basetot->ECP) g_free(basetot->ECP); basetot->ECP = NULL; return; } k = get_num_orb(AtomTypeBase[0]); if(k==-1) return; if(basetot->Orb[k]) g_free(basetot->Orb[k]); basetot->Orb[k] = NULL; } /********************************************************************************/ void AfficheTypeAll(Cbasetot *basetot) { if(basetot->ECP != NULL ) printf("%s",basetot->ECP); if(basetot->Orb[0] != NULL ) printf("%s",basetot->Orb[0]); if(basetot->Orb[1] != NULL ) printf("%s",basetot->Orb[1]); if(basetot->Orb[1] != NULL ) printf("%s",basetot->Orb[1]); if(basetot->Orb[2] != NULL ) printf("%s",basetot->Orb[2]); if(basetot->Orb[3] != NULL ) printf("%s",basetot->Orb[3]); if(basetot->Orb[4] != NULL ) printf("%s",basetot->Orb[4]); if(basetot->Orb[5] != NULL ) printf("%s",basetot->Orb[5]); if(basetot->Orb[6] != NULL ) printf("%s",basetot->Orb[6]); } /********************************************************************************/ static void DeselectionBase(Cbase *base) { gchar **AtomTypeBase; gchar *temp; Cbasetot *basetot; AtomTypeBase =g_strsplit (base->TypeBase," ",3); temp=AtomTypeBase[0]; AtomTypeBase[0]=AtomTypeBase[1]; AtomTypeBase[1]=temp; basetot = get_base_total_from_path(); UnDefineTypeAll(basetot,AtomTypeBase); set_base_total_from_path(basetot); g_strfreev(AtomTypeBase); } /********************************************************************************/ static void resetSelectedBasis(Cbase *base, gboolean cont) { gchar *AtomTypeBase[3]; gchar *temp; Cbasetot *basetot; gint i; for(i=0;i<3;i++) AtomTypeBase[i] = g_malloc(40*sizeof(gchar)); sscanf(base->TypeBase,"%s %s %s",AtomTypeBase[0],AtomTypeBase[1],AtomTypeBase[2]); temp=AtomTypeBase[0]; AtomTypeBase[0]=AtomTypeBase[1]; AtomTypeBase[1]=temp; basetot = get_base_total_from_path(); if(!strstr(AtomTypeBase[0],"ECP")) { if(cont) DefineTypeAll(basetot,AtomTypeBase,";c"); else DefineTypeAll(basetot,AtomTypeBase,NULL); } else DefineTypeAll(basetot,AtomTypeBase,NULL); set_base_total_from_path(basetot); for(i=0;i<3;i++) g_free(AtomTypeBase[i]); } /********************************************************************************/ static void selectionABasis(GtkTreeSelection *selection, gpointer data) { Cbase *base; gboolean cont; GtkTreeIter iter; GtkTreeModel *model; if (!gtk_tree_selection_get_selected (selection, &model, &iter)) return; gtk_tree_model_get (model, &iter, BASISLIST_CONTRACTION, &cont, BASISLIST_DATA, &base, -1); DeselectionBase(base); resetSelectedBasis(base, cont); } /********************************************************************************/ gboolean ListeBasis(GtkWidget *listOfBasis,char *NomFichier) { gchar basisName[40]; FILE *fd; Cbase *base; gboolean OK = FALSE; gchar temp[40]; gchar t[40]; GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; model = gtk_tree_view_get_model(GTK_TREE_VIEW(listOfBasis)); store = GTK_LIST_STORE (model); fd = fopen(NomFichier, "r"); if(fd!=NULL) { while(!feof(fd)) { if(!fgets(t,40,fd))break; sscanf(t,"%s %s %s", temp,temp, basisName); base = g_malloc(sizeof(Cbase)); base->TypeBase = g_strdup(t); gtk_list_store_append(store, &iter); gtk_list_store_set (store, &iter, BASISLIST_NAME, basisName, BASISLIST_CONTRACTION, TRUE, BASISLIST_DATA, (gpointer) base, -1); } fclose(fd); OK = TRUE; } return OK; } /********************************************************************************/ void select_one_list(gint norb) { gchar *basename = NULL; Cbasetot *basetot = get_base_total_from_path(); gchar **AtomTypeBase; gint j = norb; gint i = 0; gchar *t; if(basename) g_free(basename); basename = NULL; if(norb==0 && basetot->ECP) { AtomTypeBase =g_strsplit (basetot->ECP,",",3); basename= g_strdup(AtomTypeBase[2]); g_strfreev(AtomTypeBase); if(basename) { AtomTypeBase =g_strsplit (basename,";",1); g_free(basename); basename = NULL; basename= g_strdup(AtomTypeBase[0]); g_strfreev(AtomTypeBase); } } else if(basetot->Orb[norb-1]) { AtomTypeBase =g_strsplit (basetot->Orb[norb-1],",",3); basename= g_strdup(AtomTypeBase[2]); g_strfreev(AtomTypeBase); if(basename) { AtomTypeBase =g_strsplit (basename,";",1); g_free(basename); basename = NULL; basename= g_strdup(AtomTypeBase[0]); g_strfreev(AtomTypeBase); } } if(basename == NULL) return; g_strchug(basename); g_strchomp(basename); if(j >NORB) return; if(BoiteListeBaseAll[j]) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (BoiteListeBaseAll[j]))); } if(BoiteListeBaseAll[j]) { GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(BoiteListeBaseAll[j])); gchar* pathString; GtkTreeIter iter; i=0; pathString = g_strdup_printf("%d", i); while (gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE) { gtk_tree_model_get (model, &iter, BASISLIST_NAME, &t, -1); i++; g_free(pathString); pathString = g_strdup_printf("%d", i); if(strcmp(t,basename) == 0) { selectRow(BoiteListeBaseAll[j],i-1); break; } } g_free(pathString); } if(basename) g_free(basename); } /********************************************************************************/ static void toggledContraction (GtkCellRendererToggle *cell, gchar *path_string, gpointer data) { GtkTreeModel *model = GTK_TREE_MODEL (data); GtkTreeIter iter; GtkTreePath *path = gtk_tree_path_new_from_string (path_string); gboolean cont; Cbase *base; gtk_tree_model_get_iter (model, &iter, path); gtk_tree_model_get (model, &iter, BASISLIST_CONTRACTION, &cont, BASISLIST_DATA, &base, -1); cont = !cont; gtk_list_store_set (GTK_LIST_STORE (model), &iter, BASISLIST_CONTRACTION, cont, -1); gtk_tree_path_free (path); DeselectionBase(base); resetSelectedBasis(base, cont); } /********************************************************************************/ GtkWidget *CreateListeBase(char * NomFichier) { GtkWidget *Scr; GtkWidget *window; gchar *Titre[2]; gchar *temp; gint nhbox = 1; gboolean CreaHbox = FALSE; GtkWidget *CListeBase = NULL; if (!strcmp(OrbSel,"ECP") ) { temp =g_strdup("ECP"); nhbox = 1; } else { temp = g_strdup_printf(_(" Basis for %s "),OrbSel); if(strstr(OrbSel,"s") || strstr(OrbSel,"p")|| strstr(OrbSel,"d")) nhbox = 2; else if(strstr(OrbSel,"f") || strstr(OrbSel,"g")|| strstr(OrbSel,"h")) nhbox = 3; else nhbox = 4; } if(!BoiteHP[nhbox]) { CreaHbox = TRUE; BoiteHP[nhbox] = gtk_hbox_new(TRUE, 0); gtk_box_pack_start (GTK_BOX (BoiteVP), BoiteHP[nhbox], TRUE, TRUE, 2); } Titre[0]=g_strdup(temp); Titre[1]=g_strdup(" Cont. "); g_free(temp); window = gtk_vbox_new(FALSE, 0); gtk_box_pack_start (GTK_BOX (BoiteHP[nhbox]), window, TRUE, TRUE, 2); gtk_widget_show(window); Scr = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(Scr),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(window), Scr); if (!strcmp(OrbSel,"ECP") ) { GtkListStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_POINTER); /* the third column is not visible, used for data */ model = GTK_TREE_MODEL (store); CListeBase = gtk_tree_view_new_with_model (model); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (CListeBase), TRUE); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (CListeBase), TRUE); gtk_tree_view_set_reorderable(GTK_TREE_VIEW (CListeBase), FALSE); column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, Titre[0]); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", BASISLIST_NAME, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (CListeBase), column); } else { GtkListStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_POINTER); /* the third column is not visible, used for data */ model = GTK_TREE_MODEL (store); CListeBase = gtk_tree_view_new_with_model (model); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (CListeBase), TRUE); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (CListeBase), TRUE); gtk_tree_view_set_reorderable(GTK_TREE_VIEW (CListeBase), FALSE); column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, Titre[0]); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", BASISLIST_NAME, NULL); gtk_tree_view_column_set_min_width(column, (gint)(ScreenHeight*0.012)); gtk_tree_view_append_column (GTK_TREE_VIEW (CListeBase), column); column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, Titre[1]); renderer = gtk_cell_renderer_toggle_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "active", BASISLIST_CONTRACTION, NULL); gtk_tree_view_column_set_min_width(column, (gint)(ScreenHeight*0.09)); gtk_tree_view_append_column (GTK_TREE_VIEW (CListeBase), column); g_signal_connect (renderer, "toggled", G_CALLBACK (toggledContraction), model); } gtk_widget_set_size_request(listOfAtoms, (gint)(ScreenHeight*0.136),(gint)(ScreenHeight*0.06)); gtk_container_add(GTK_CONTAINER(Scr), CListeBase); if(!ListeBasis(CListeBase,NomFichier) && CreaHbox ) gtk_widget_destroy(BoiteHP[nhbox]); return (CListeBase); } /********************************************************************************/ gchar* get_error_message() { gchar *errfile= g_strdup_printf("%s%stmp%serrfile",gabedit_directory(), G_DIR_SEPARATOR_S, G_DIR_SEPARATOR_S); gchar *terr = NULL; gchar *dump = NULL; gint taille = BSIZE; gchar t[BSIZE]; FILE *fd; fd = fopen(errfile, "r"); if(fd) { while(!feof(fd)) { if(!fgets(t,taille, fd)) break; dump = terr; if(!terr) terr = g_strdup_printf("%s",t); else { terr = g_strdup_printf("%s%s",terr,t); g_free(dump); } } fclose(fd); #ifdef G_OS_WIN32 unlink (errfile); #else dump = g_strdup_printf("rm %s&",errfile); {int ierr = system(dump);} g_free(dump); #endif } g_free(errfile); return terr; } /********************************************************************************/ gint create_one_liste (GtkWidget *widget, gpointer data,gboolean fromfile) { gint OK = 1; gchar *t; gchar *terr; FILE *fd; Cbasetot *basetot; gchar *temp=NULL; gchar *outfile= g_strdup_printf("%s%stmp%soutfile",gabedit_directory(), G_DIR_SEPARATOR_S, G_DIR_SEPARATOR_S); gchar *errfile= g_strdup_printf("%s%stmp%serrfile",gabedit_directory(), G_DIR_SEPARATOR_S, G_DIR_SEPARATOR_S); gint k; OrbSel = (gchar *) data; basetot = get_base_total_from_path(); if(!fromfile) { temp = g_strdup_printf("sh -c 'libmol -e %s -t %s>%s 2>%s'",basetot->Name,(gchar*)data,outfile,errfile); {int ierr = system(temp);} } else { temp=g_strdup(" "); get_molpro_basis_list(basetot->Name,(gchar*)data,outfile,errfile); } t=g_malloc(40); terr = NULL; fd = fopen(outfile, "r"); if(fd) { terr=fgets(t,40,fd); fclose(fd); } if(terr!=NULL) { NListeBase++; k = get_num_orb(OrbSel); if(k<0) BoiteListeBaseAll[0] = CreateListeBase(outfile); else BoiteListeBaseAll[k+1] = CreateListeBase(outfile); } else OK = 0; fd = fopen(outfile, "r"); if(fd) { fclose(fd); #ifdef G_OS_WIN32 unlink (outfile); #else if(temp) g_free(temp); temp = g_strdup_printf("rm %s",outfile); {int ierr = system(temp);} #endif } g_free(t); g_free(temp); g_free(errfile); g_free(outfile); return OK; } /********************************************************************************/ gchar *CreateOrbitalTypeAll(gboolean fromfile) { gint n=0; gchar *terr = NULL; gchar *dump = NULL; progress(&n); gtk_widget_show (BoiteHP[0]); n += create_one_liste(NULL,(gpointer)"ECP",fromfile); progress( NULL); n += create_one_liste(NULL,(gpointer)"s",fromfile); progress( NULL); n += create_one_liste(NULL,(gpointer)"p",fromfile ); progress( NULL); n += create_one_liste(NULL,(gpointer)"d",fromfile ); progress( NULL); n += create_one_liste(NULL,(gpointer)"f",fromfile ); progress( NULL); n += create_one_liste(NULL,(gpointer)"g",fromfile ); progress( NULL); n += create_one_liste(NULL,(gpointer)"h",fromfile ); progress( NULL); n += create_one_liste(NULL,(gpointer)"i",fromfile ); progress( NULL); if( n == 0) { terr = get_error_message(); if(!terr) { if(originbasis == 0) terr = g_strdup(_(" Sorry,\nNo basis available for this atom,\nOr libmol is not installed in your system.")); else terr = g_strdup(_(" Sorry,\nNo basis available for this atom,\nOr gabedit molpro basis file is corrupted.")); } else { dump = terr; terr = g_strdup_printf(_("Error : %s"),dump); g_free(dump); } } progress( NULL); Waiting(0.2); gtk_widget_hide (BoiteHP[0]); return terr; } /********************************************************************************/ void RedefineListeBasis() { guint Ncenters; gboolean OK; guint i,j; Cbasetot *basetot; gchar *texts[1]={NULL}; GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; model = gtk_tree_view_get_model(GTK_TREE_VIEW(listOfAtoms)); store = GTK_LIST_STORE (model); if(MethodeGeom == GEOM_IS_XYZ) Ncenters = NcentersXYZ; else Ncenters = NcentersZmat; for (i=0;iName = g_strdup(texts[0]); basetot->ECP = NULL; for(j=0;jOrb[j] = NULL; gtk_list_store_append(store, &iter); gtk_list_store_set (store, &iter, ATOMLIST_SYMBOL, texts[0], ATOMLIST_DATA, (gpointer) basetot, -1); } } } /********************************************************************************/ static void DeselectionAnAtom() { guint i; if(NListeBase != -1 ) { for (i=0;(gint)i<=NORB;i++) { if(BoiteListeBaseAll[i]!=NULL) gtk_widget_hide_on_delete (BoiteListeBaseAll[i]); BoiteListeBaseAll[i] = NULL; } NListeBase=-1; } for(i=1;i0) selectRow(listOfAtoms, 0); else DeselectionAnAtom(); } /********************************************************************************/ static void DialogueDelete(GtkWidget *w) { GtkWidget *Dialogue; GtkWidget *Label; GtkWidget *Bouton; GtkWidget *frame, *vboxframe; if (NRatoms <1) { Message(_(" No Atom to delete !"),_("Warning"),TRUE); return ; } if (atoi(pathSelectedAtom) <0) { Message(_(" Please Select Your Atom to delete!"),_("Warning"),TRUE); return ; } Dialogue = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(Dialogue),_("Delete Atom")); gtk_window_set_modal (GTK_WINDOW (Dialogue), TRUE); gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER); Label = gtk_label_new(_("Are you sure to delete \nthe selected atom? \n")); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); gtk_box_pack_start(GTK_BOX(vboxframe), Label,TRUE,TRUE,0); gtk_widget_realize(Dialogue); Bouton = create_button(Dialogue,"No"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); Bouton = create_button(Dialogue,"Yes"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked",(GCallback)DelAtomList, NULL); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)gtk_widget_destroy, GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_show_all(Dialogue); } /********************************************************************************/ static void SetAtom(GtkWidget *w,gpointer data) { gchar *texts[1]; Cbasetot *basetot; GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; model = gtk_tree_view_get_model(GTK_TREE_VIEW(listOfAtoms)); store = GTK_LIST_STORE (model); texts[0]=g_strdup((gchar*)data); NRatoms++; basetot = g_malloc(sizeof(Cbasetot)); basetot->Name = g_strdup(texts[0]); basetot->ECP = NULL; basetot->Orb[0] = NULL; basetot->Orb[1] = NULL; basetot->Orb[2] = NULL; basetot->Orb[3] = NULL; basetot->Orb[4] = NULL; basetot->Orb[5] = NULL; basetot->Orb[6] = NULL; gtk_list_store_append(store, &iter); gtk_list_store_set (store, &iter, ATOMLIST_SYMBOL, texts[0], ATOMLIST_DATA, (gpointer) basetot, -1); selectRow(listOfAtoms, NRatoms-1); } /********************************************************************************/ static void DialogueAdd(GtkWidget *w,gpointer data) { GtkWidget* Table; GtkWidget* button; GtkWidget* FenetreTable; GtkWidget* frame; GtkWidget* vbox; GtkWidget* hbox; guint i; guint j; GtkStyle *button_style; GtkStyle *style; gchar*** Symb = get_periodic_table(); FenetreTable = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(FenetreTable),TRUE); gtk_window_set_title(GTK_WINDOW(FenetreTable),_("Select your atom")); gtk_window_set_position(GTK_WINDOW(FenetreTable),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(FenetreTable),GTK_WINDOW(Wins)); gtk_window_set_modal (GTK_WINDOW (FenetreTable), TRUE); gtk_window_set_default_size (GTK_WINDOW(FenetreTable),(gint)(ScreenWidth*0.5),(gint)(ScreenHeight*0.4)); add_child(Wins,FenetreTable,gtk_widget_destroy,_(" Selec. atom ")); g_signal_connect(G_OBJECT(FenetreTable),"delete_event",(GCallback)delete_child,NULL); button_style = gtk_widget_get_style(FenetreTable); vbox = gtk_vbox_new (FALSE, 5); gtk_container_add(GTK_CONTAINER(FenetreTable),vbox); hbox = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_container_add(GTK_CONTAINER(hbox),frame); gtk_widget_show (frame); Table = gtk_table_new(PERIODIC_TABLE_N_ROWS-1,PERIODIC_TABLE_N_COLUMNS,TRUE); gtk_container_add(GTK_CONTAINER(frame),Table); for ( i = 0;ilistOfAtoms = listOfAtoms; base->NRatoms = NRatoms; ButtonBar(BoiteV); for(i=0;i #include #include #include #include "MInterfaceGeom.h" #include "../Common/Global.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/GeomZmatrix.h" #include "../Gaussian/GaussGlobal.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/InterfaceGeom.h" /************************************************************************************************************/ void AjoutePageGeom(GtkWidget *NoteBook,GeomS *geom) { GtkWidget *hbox; GtkWidget *FrameType; GtkWidget *Frame; GtkWidget *LabelOnglet; GtkWidget *LabelMenu; GtkWidget *BoiteV; GtkWidget *window1; GtkWidget *vbox1; GtkWidget *hbox1; GtkWidget *label2; GtkWidget *label3; GtkWidget *hseparator2; GtkWidget *combo2; GtkWidget *combo_entry2; GtkWidget *combo3; GtkWidget *combo_entry3; GtkWidget *combobox; GList *combo2_items = NULL; GList *combo3_items = NULL; geom_is_open(); geominter=g_malloc(sizeof(GeomInter)); geominter->window= gtk_frame_new(NULL); HboxGeom = NULL; Frame =geominter->window; gtk_container_set_border_width(GTK_CONTAINER(Frame), 10); LabelOnglet = gtk_label_new(_("Geometry")); LabelMenu = gtk_label_new(_("Geometry")); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), Frame, LabelOnglet, LabelMenu); BoiteV = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(Frame), BoiteV); window1=Frame; vbox1 = BoiteV; hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0); label2 = gtk_label_new (_(" Symmetry : ")); gtk_widget_show (label2); gtk_box_pack_start (GTK_BOX (hbox1), label2, FALSE, FALSE, 0); combo2 = gtk_combo_box_entry_new_text (); gtk_widget_set_size_request(GTK_WIDGET(combo2),100,-1); gtk_widget_show (combo2); gtk_box_pack_start (GTK_BOX (hbox1), combo2, FALSE, FALSE, 0); combo2_items = g_list_append (combo2_items, _("default")); combo2_items = g_list_append (combo2_items, "NOSYM"); combo2_items = g_list_append (combo2_items, "Z"); combo2_items = g_list_append (combo2_items, "XY"); combo2_items = g_list_append (combo2_items, "XYZ"); combo2_items = g_list_append (combo2_items, "X,Y"); combo2_items = g_list_append (combo2_items, "XY,Z"); combo2_items = g_list_append (combo2_items, "XZ,YZ"); combo2_items = g_list_append (combo2_items, "X,Y,Z"); gtk_combo_box_entry_set_popdown_strings ( (combo2), combo2_items); g_list_free (combo2_items); combo_entry2 = GTK_BIN (combo2)->child; gtk_widget_show (combo_entry2); label3 = gtk_label_new (_(" Options : ")); gtk_widget_show (label3); gtk_box_pack_start (GTK_BOX (hbox1), label3, FALSE, FALSE, 0); combo3 = gtk_combo_box_entry_new_text (); gtk_widget_set_size_request(GTK_WIDGET(combo3),100,-1); gtk_widget_show (combo3); gtk_box_pack_start (GTK_BOX (hbox1), combo3, FALSE, FALSE, 0); combo3_items = g_list_append (combo3_items, _("none")); combo3_items = g_list_append (combo3_items, "MASS"); combo3_items = g_list_append (combo3_items, "CHARGE"); combo3_items = g_list_append (combo3_items, "NOORIENT"); combo3_items = g_list_append (combo3_items, "PLANEXZ"); combo3_items = g_list_append (combo3_items, "PLANEYZ"); combo3_items = g_list_append (combo3_items, "PLANEXY"); gtk_combo_box_entry_set_popdown_strings ( (combo3), combo3_items); g_list_free (combo3_items); combo_entry3 = GTK_BIN (combo3)->child; gtk_widget_show (combo_entry3); hseparator2 = gtk_hseparator_new (); gtk_widget_show (hseparator2); gtk_box_pack_start (GTK_BOX (BoiteV), hseparator2, FALSE, FALSE, 0); hbox =create_hbox_false(BoiteV); FrameType = create_frame(window1,hbox,_("TYPE")); combobox = create_geom(window1,FrameType); geominter->vbox=BoiteV; geominter->frametitle=g_strdup(_("GEOMETRY")); geom->Symentry=combo_entry2; geom->Optentry=combo_entry3; if(GeomXYZ != NULL && MethodeGeom == GEOM_IS_XYZ) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); if(Geom != NULL && MethodeGeom == GEOM_IS_ZMAT) create_geom_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0); } GabeditSrc250/src/Molpro/MInterfaceComm.h0000644000175100017510000000301713130665225020535 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MINTERFACECOMM_H__ #define __GABEDIT_MINTERFACECOMM_H__ typedef struct _CommS { GtkWidget *TextComm; }CommS; void AjoutePageComm(GtkWidget *Win,GtkWidget *NoteBook,CommS *); #endif /* __GABEDIT_MINTERFACECOMM_H__ */ GabeditSrc250/src/MPQC/0000755000175100017510000000000013130743374015024 5ustar allouchealloucheGabeditSrc250/src/MPQC/MPQCProperties.c0000644000175100017510000001233213130665225020004 0ustar alloucheallouche/* MPQCGuessWaveFunction.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../MPQC/MPQCTypes.h" #include "../MPQC/MPQCGlobal.h" #include "../MPQC/MPQCBasis.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" typedef enum { PRINTNPA, PRINTNAO, FREQUENCIES }ButtonTypes; /**************************************************************/ static void activateButton(GtkWidget *button, gpointer data) { gint* type = NULL; gboolean activate = FALSE; if(!GTK_IS_WIDGET(button)) return; if(GTK_TOGGLE_BUTTON (button)->active) activate = TRUE; type = g_object_get_data(G_OBJECT (button), "Type"); if(type) { if(*type == PRINTNPA) mpqcMole.printNPA = activate; if(*type == PRINTNAO) mpqcMole.printNAO = activate; if(*type == FREQUENCIES) mpqcMpqc.frequencies = activate; } } /******************************************************************************/ void createMPQCProperties(GtkWidget *box) { GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget *table = NULL; gint i; GtkWidget *buttonPrintNPA = NULL; GtkWidget *buttonPrintNAO = NULL; GtkWidget *buttonFrequencies = NULL; static ButtonTypes buttonTypes[] = {PRINTNPA, PRINTNAO, FREQUENCIES}; table = gtk_table_new(3,1,FALSE); frame = gtk_frame_new ("Properties"); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); i = 0; buttonPrintNPA = gtk_check_button_new_with_label (_("Print the natural population analysis ")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonPrintNPA), mpqcMole.printNPA); add_widget_table(table, buttonPrintNPA, (gushort)i, 0); g_object_set_data(G_OBJECT (buttonPrintNPA), "Type", &buttonTypes[PRINTNPA]); g_signal_connect(G_OBJECT(buttonPrintNPA),"clicked", G_CALLBACK(activateButton),NULL); i = 1; buttonPrintNAO = gtk_check_button_new_with_label (_("Print the natural atomic orbitals")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonPrintNAO), mpqcMole.printNAO); add_widget_table(table, buttonPrintNAO, (gushort)i, 0); g_object_set_data(G_OBJECT (buttonPrintNAO), "Type", &buttonTypes[PRINTNAO]); g_signal_connect(G_OBJECT(buttonPrintNAO),"clicked", G_CALLBACK(activateButton),NULL); i = 2; buttonFrequencies = gtk_check_button_new_with_label (_("Calcul Frequencies")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonFrequencies), mpqcMpqc.frequencies); add_widget_table(table, buttonFrequencies, (gushort)i, 0); g_object_set_data(G_OBJECT (buttonFrequencies), "Type", &buttonTypes[FREQUENCIES]); g_signal_connect(G_OBJECT(buttonFrequencies),"clicked", G_CALLBACK(activateButton),NULL); } /*******************************************************************************************/ static void putMPQCFrequenciesInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"%c vibrational frequency input\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"freq: (\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"\tmolecule = $:molecule\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"\tdebug = 1\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,")\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); } /*******************************************************************************************/ void putMPQCPropertiesInfoInTextEditor() { putMPQCFrequenciesInTextEditor(); } GabeditSrc250/src/MPQC/MPQC.h0000644000175100017510000000271713130665225015742 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MPQC_H__ #define __GABEDIT_MPQC_H__ void destroyWinsMPQC(GtkWidget *win,gpointer data); void newMPQC(); void insertMPQC(); #endif /* __GABEDIT_MPQC_H__ */ GabeditSrc250/src/MPQC/MPQCBasis.h0000644000175100017510000000056613130665225016724 0ustar alloucheallouche #ifndef __GABEDIT_MPQCBASIS_H__ #define __GABEDIT_MPQCBASIS_H__ void initMPQCBasis(); void freeMPQCBasis(); void addMPQCBasisToTable(GtkWidget *table, gint i); void addMPQCBasisGuessToTable(GtkWidget *table, gint i); void addMPQCAuxBasisToTable(GtkWidget *table, gint i, GtkWidget* comboMethod); void putMPQCBasisInfoInTextEditor(); #endif /* __GABEDIT_MPQCBASIS_H__ */ GabeditSrc250/src/MPQC/MPQCLib.h0000644000175100017510000000303313130665225016361 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MPQCLIB_H__ #define __GABEDIT_MPQCLIB_H__ GList* getMPQCBasisList(gchar* Symb, gchar* message); GList* getMPQCBasisListOfAtoms(GList* atomsList, gchar* message); gboolean create_mpqc_basis_file(); #endif /* __GABEDIT_MPQCLIB_H__ */ GabeditSrc250/src/MPQC/MPQCFunctionals.c0000644000175100017510000006256413130665225020151 0ustar alloucheallouche/* MPQCFunctionals.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../MPQC/MPQCTypes.h" #include "../MPQC/MPQCGlobal.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" /************************************************************************************************************/ void initMPQCFunctionals() { gint n = G96X+1; gint i; functionals = g_malloc(n*sizeof(MPQCFunctional)); sumFunctionals = g_malloc(n*sizeof(gdouble));; for(i=0;i=0) coefficients[*numFunctionals] = 0.0; } else { if(*numFunctionals>=0) coefficients[*numFunctionals] = atof(entryText); } } /***********************************************************************************************/ void createXCFunctionalsFrame(GtkWidget *box, gchar* title, gdouble* coefficients) { GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget* entry = NULL; GtkWidget *table = NULL; gint n = G96X + 1; gint i; gchar* t = NULL; table = gtk_table_new(5,4,FALSE); frame = gtk_frame_new (title); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); t = g_malloc(BSIZE*sizeof(gchar)); for(i=0;iwindow,_("MPQC Sum Density functionals")); gtk_window_set_modal (GTK_WINDOW (win), TRUE); g_object_set_data(G_OBJECT (win), "Coefficients", coefficients); init_child(win, destroyWindow,_(" MPQC Sum. Dens. ")); g_signal_connect(G_OBJECT(win),"delete_event",(GCallback)destroy_children,NULL); gtk_widget_realize(win); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(win)->vbox), table, FALSE, TRUE, 5); hbox =addHboxToTable(table, 0, 0, 1, 1); createXCFunctionalsFrame(hbox,_("Exchange functionals"), coefficients); hbox =addHboxToTable(table, 0, 1, 1, 1); createXCFunctionalsFrame(hbox,_("Correlation functionals"), coefficients); button = create_button(win,_("OK")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(win)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(setSumDensityFunctionals),GTK_OBJECT(win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(destroy_children),GTK_OBJECT(win)); button = create_button(win,_("Close")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(win)->action_area), button, FALSE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(destroy_children),GTK_OBJECT(win)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show (button); gtk_widget_show_all(win); } GabeditSrc250/src/MPQC/Makefile0000644000175100017510000000101313130664665016464 0ustar allouchealloucheOBJECTS = MPQC.o MPQCMolecule.o MPQCMole.o MPQCGuessWaveFunction.o MPQCMpqc.o MPQCBasis.o MPQCLib.o MPQCBasisLibrary.o MPQCFunctionals.o MPQCOptimization.o MPQCProperties.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/MPQC/MPQCMpqc.c0000644000175100017510000001214013130665225016545 0ustar alloucheallouche/* MPQCMpqc.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../MPQC/MPQCTypes.h" #include "../MPQC/MPQCGlobal.h" #include "../MPQC/MPQCProperties.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Utils/GabeditTextEdit.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" /************************************************************************************************************/ void initMPQCMpqc() { mpqcMpqc.mole = g_strdup("$:mole"); mpqcMpqc.opt = g_strdup("$:opt"); mpqcMpqc.do_gradient = FALSE; mpqcMpqc.optimize = FALSE; /*mpqcMpqc.optimize = TRUE;*/ mpqcMpqc.restart = FALSE; mpqcMpqc.checkpoint = FALSE; mpqcMpqc.savestate = FALSE; mpqcMpqc.frequencies = FALSE; } /************************************************************************************************************/ void freeMPQCMpqc() { if(mpqcMpqc.mole ) g_free(mpqcMpqc.mole); if(mpqcMpqc.opt ) g_free(mpqcMpqc.opt); mpqcMpqc.mole = NULL; mpqcMpqc.opt = NULL; } /**************************************************************************************************************************************/ static void putMPQCMpqcInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"%c----------------------------------------------------------------\n",'%'); sprintf(buffer,"mpqc: (\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); if(mpqcMpqc.do_gradient) sprintf(buffer,"\tdo_gradient = yes\n"); else sprintf(buffer,"\tdo_gradient = no\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(mpqcMpqc.optimize) sprintf(buffer,"\toptimize = yes\n"); else sprintf(buffer,"\toptimize = no\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(mpqcMpqc.restart) sprintf(buffer,"\trestart = yes\n"); else sprintf(buffer,"\trestart = no\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(mpqcMpqc.checkpoint) sprintf(buffer,"\tcheckpoint = yes\n"); else sprintf(buffer,"\tcheckpoint = no\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(mpqcMpqc.savestate) sprintf(buffer,"\tsavestate = yes\n"); else sprintf(buffer,"\tsavestate = no\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"\tmole = %s\n", mpqcMpqc.mole); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if( mpqcMpqc.optimize && !strstr(mpqcMole.method,"ZA") && !strstr(mpqcMole.method,"OPT") ) { sprintf(buffer,"\topt = %s\n", mpqcMpqc.opt); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } if(mpqcMpqc.frequencies) { sprintf(buffer,"\tfreq = $:freq\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } sprintf(buffer,")\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"%c----------------------------------------------------------------\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } /************************************************************************************************************/ void putMPQCMpqcInfoInTextEditor() { if(mpqcMpqc.frequencies) putMPQCPropertiesInfoInTextEditor(); putMPQCMpqcInTextEditor(); } GabeditSrc250/src/MPQC/MPQCGlobal.h0000644000175100017510000000067213130665225017061 0ustar alloucheallouche #ifndef __GABEDIT_MPQCGLOBAL_H__ #define __GABEDIT_MPQCGLOBAL_H__ GtkWidget* mpqcWin; MPQCMolecule mpqcMolecule; MPQCColorFore mpqcColorFore; MPQCColorBack mpqcColorBack; MPQCMole mpqcMole; MPQCGuessWaveFunction mpqcGuessWaveFunction; MPQCMpqc mpqcMpqc; MPQCBasis mpqcBasis; MPQCFunctional* functionals; MPQCStdFunctional* stdFunctionals; gdouble* sumFunctionals; MPQCOptimization mpqcOptimization; #endif /* __GABEDIT_MPQCGLOBAL_H__ */ GabeditSrc250/src/MPQC/MPQCOptimization.c0000644000175100017510000003200513130665225020335 0ustar alloucheallouche/* MPQCOptimization.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../MPQC/MPQCTypes.h" #include "../MPQC/MPQCGlobal.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" typedef enum { SINGLEPOINT, OPTIMIZE }ButtonTypes; /************************************************************************************************************/ void initMPQCOptimization() { mpqcOptimization.method = g_strdup("QNewtonOpt"); /* EFCOpt for trans*/ mpqcOptimization.transitionState = FALSE; mpqcOptimization.modeFollowing = FALSE; mpqcOptimization.maxIterations = 20; mpqcOptimization.updateMethod = g_strdup("BFGSUpdate"); /* PowellUpdate */ mpqcOptimization.function = g_strdup("$:mole"); mpqcOptimization.energy = g_strdup("$:mole"); mpqcOptimization.cartesian = TRUE; } /************************************************************************************************************/ void freeMPQCOptimization() { if(mpqcOptimization.method ) g_free(mpqcOptimization.method); if(mpqcOptimization.updateMethod) g_free(mpqcOptimization.updateMethod); if(mpqcOptimization.function) g_free(mpqcOptimization.function); if(mpqcOptimization.energy) g_free(mpqcOptimization.energy); mpqcOptimization.method = NULL; mpqcOptimization.updateMethod = NULL; mpqcOptimization.function = NULL; mpqcOptimization.energy = NULL; } /*********************************************************************************************************/ static void activateTransButton(GtkWidget *button, gpointer data) { if(!GTK_IS_WIDGET(button)) return; if(mpqcOptimization.method) g_free(mpqcOptimization.method); if(mpqcOptimization.updateMethod) g_free(mpqcOptimization.updateMethod); if(GTK_TOGGLE_BUTTON (button)->active) { mpqcOptimization.transitionState = TRUE; mpqcOptimization.modeFollowing = TRUE; mpqcOptimization.method = g_strdup("EFCOpt"); mpqcOptimization.updateMethod = g_strdup("PowellUpdate"); } else { mpqcOptimization.transitionState = FALSE; mpqcOptimization.modeFollowing = FALSE; mpqcOptimization.method = g_strdup("QNewtonOpt"); mpqcOptimization.updateMethod = g_strdup("BFGSUpdate"); } } /*********************************************************************************************************/ static void activateRadioButton(GtkWidget *button, gpointer data) { gint* type = NULL; GtkWidget* wid = NULL; if(!GTK_IS_WIDGET(button)) return; type = g_object_get_data(G_OBJECT (button), "Type"); if(type) { if(*type == SINGLEPOINT) mpqcMpqc.optimize = FALSE; if(*type == OPTIMIZE) mpqcMpqc.optimize = TRUE; wid = g_object_get_data(G_OBJECT (button), "LabelMaxIterations1"); if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid, mpqcMpqc.optimize); wid = g_object_get_data(G_OBJECT (button), "LabelMaxIterations2"); if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid, mpqcMpqc.optimize); wid = g_object_get_data(G_OBJECT (button), "ComboMaxIterations"); if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid, mpqcMpqc.optimize); wid = g_object_get_data(G_OBJECT (button), "ButtonTransition"); if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid, mpqcMpqc.optimize); } } /**********************************************************************/ static void changedEntryMaxIterations(GtkWidget *entry, gpointer data) { G_CONST_RETURN gchar* entryText = NULL; if(!GTK_IS_WIDGET(entry)) return; entryText = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(entryText)<1)return; if(atoi(entryText)>0) mpqcOptimization.maxIterations = atoi(entryText); else { mpqcOptimization.maxIterations = 10; gtk_entry_set_text(GTK_ENTRY(entry),"10"); } } /**********************************************************************/ static GtkWidget* addComboListToATable(GtkWidget* table, gchar** list, gint nlist, gint i, gint j, gint k) { GtkWidget *entry = NULL; GtkWidget *combo = NULL; combo = create_combo_box_entry(list, nlist, TRUE, -1, -1); gtk_table_attach(GTK_TABLE(table),combo,j,j+k,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); entry = GTK_BIN (combo)->child; g_object_set_data(G_OBJECT (entry), "Combo",combo); return entry; } /***********************************************************************************************/ static GtkWidget *addMPQCMaxIterationsToTable(GtkWidget *table, gint i,GtkWidget *buttonSinglePoint,GtkWidget *buttonOptimization) { GtkWidget* entryMaxIterations = NULL; GtkWidget* comboMaxIterations = NULL; gint nlistMaxIterations = 4; gchar* listMaxIterations[] = {"10","20","30","40"}; GtkWidget *labelMaxIterations1 = NULL; GtkWidget *labelMaxIterations2 = NULL; labelMaxIterations1 = add_label_table(table,_(" Max iterations"),(gushort)i,0); labelMaxIterations2 = add_label_table(table,":",(gushort)i,1); entryMaxIterations = addComboListToATable(table, listMaxIterations, nlistMaxIterations, i, 2, 1); comboMaxIterations = g_object_get_data(G_OBJECT (entryMaxIterations), "Combo"); gtk_widget_set_sensitive(entryMaxIterations, TRUE); g_object_set_data(G_OBJECT (buttonSinglePoint), "LabelMaxIterations1", labelMaxIterations1); g_object_set_data(G_OBJECT (buttonSinglePoint), "LabelMaxIterations2", labelMaxIterations2); g_object_set_data(G_OBJECT (buttonSinglePoint), "ComboMaxIterations", comboMaxIterations); g_object_set_data(G_OBJECT (buttonOptimization), "LabelMaxIterations1", labelMaxIterations1); g_object_set_data(G_OBJECT (buttonOptimization), "LabelMaxIterations2", labelMaxIterations2); g_object_set_data(G_OBJECT (buttonOptimization), "ComboMaxIterations", comboMaxIterations); gtk_widget_set_sensitive(labelMaxIterations1, mpqcMpqc.optimize); gtk_widget_set_sensitive(labelMaxIterations2, mpqcMpqc.optimize); gtk_widget_set_sensitive(comboMaxIterations, mpqcMpqc.optimize); return comboMaxIterations; } /***********************************************************************************************/ void createMPQCOptimization(GtkWidget *box) { GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget* comboMaxIterations = NULL; GtkWidget* entryMaxIterations = NULL; GtkWidget *table = NULL; gint i; GtkWidget *buttonSinglePoint = NULL; GtkWidget *buttonOptimization = NULL; GtkWidget *button = NULL; static ButtonTypes buttonTypes[] = {SINGLEPOINT, OPTIMIZE}; table = gtk_table_new(3,3,FALSE); frame = gtk_frame_new (_("Type of calcul")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); i = 0; button = gtk_radio_button_new_with_label(NULL, _("Single point")); gtk_table_attach(GTK_TABLE(table),button,0,0+1,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); buttonSinglePoint = button; g_object_set_data(G_OBJECT (buttonSinglePoint), "Type", &buttonTypes[0]); g_signal_connect(G_OBJECT(buttonSinglePoint),"clicked", G_CALLBACK(activateRadioButton),NULL); i = 1; button = gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)), _("Optimization")); gtk_table_attach(GTK_TABLE(table),button,0,0+1,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); buttonOptimization = button; g_object_set_data(G_OBJECT (buttonOptimization), "Type", &buttonTypes[1]); g_signal_connect(G_OBJECT(buttonOptimization),"clicked", G_CALLBACK(activateRadioButton),NULL); button = gtk_check_button_new_with_label (_("Transition state")); gtk_table_attach(GTK_TABLE(table),button,1,1+2,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_widget_set_sensitive(button, mpqcMpqc.optimize); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateTransButton),NULL); g_object_set_data(G_OBJECT (buttonOptimization), "ButtonTransition", button); g_object_set_data(G_OBJECT (buttonSinglePoint), "ButtonTransition", button); i = 2; comboMaxIterations = addMPQCMaxIterationsToTable(table, i, buttonSinglePoint, buttonOptimization); entryMaxIterations = GTK_BIN(comboMaxIterations)->child; g_signal_connect(G_OBJECT(entryMaxIterations),"changed", G_CALLBACK(changedEntryMaxIterations),NULL); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonSinglePoint), !mpqcMpqc.optimize); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonOptimization), mpqcMpqc.optimize); g_object_set_data(G_OBJECT (box), "ButtonSinglePoint", buttonSinglePoint); g_object_set_data(G_OBJECT (box), "ButtonOptimization", buttonOptimization); } /************************************************************************************************************/ /************************************************************************************************************/ static void putMPQCOptimizationInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"%c Optimizer object for the molecular geometry\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"opt<%s>: (\n", mpqcOptimization.method); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"\tfunction = %s\n", mpqcOptimization.function); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(mpqcOptimization.transitionState) { sprintf(buffer,"\ttransition_state = yes\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } if(mpqcOptimization.modeFollowing) { sprintf(buffer,"\tmode_following = yes\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } sprintf(buffer,"\tmax_iterations = %d\n",mpqcOptimization.maxIterations); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"update<%s>: ()\n",mpqcOptimization.updateMethod); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\t", -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"convergence: (\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\t", -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"\t\tenergy = %s\n", mpqcOptimization.energy); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(mpqcOptimization.cartesian) sprintf(buffer,"\t\tcartesian = yes\n"); else sprintf(buffer,"\t\tcartesian = no\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,")\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\t", -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,")\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"%c----------------------------------------------------------------\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } /**************************************************************************************************************************************/ /************************************************************************************************************/ void putMPQCOptimizationInfoInTextEditor() { putMPQCOptimizationInTextEditor(); } GabeditSrc250/src/MPQC/MPQCMole.c0000644000175100017510000010704013130665225016545 0ustar alloucheallouche/* MPQCMole.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../MPQC/MPQCTypes.h" #include "../MPQC/MPQCGlobal.h" #include "../MPQC/MPQCBasis.h" #include "../MPQC/MPQCFunctionals.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/AtomsProp.h" #include "../Utils/GabeditTextEdit.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" /************************************************************************************************************/ void initMPQCMole() { mpqcMole.method = g_strdup("CLHF"); mpqcMole.functional = g_strdup("B3LYP"); mpqcMole.molecule = g_strdup("$:molecule"); mpqcMole.basis = g_strdup("$:basis"); mpqcMole.auxBasisName = g_strdup("STO-3G"); mpqcMole.memory = g_strdup("16000000"); mpqcMole.totalCharge = TotalCharges[0]; mpqcMole.spinMultiplicity = SpinMultiplicities[0]; mpqcMole.printNPA = TRUE; mpqcMole.printNAO = TRUE; mpqcMole.guessWaveFunction = g_strdup("$:guess_wavefunction"); } /************************************************************************************************************/ void freeMPQCMole() { if(mpqcMole.method ) g_free(mpqcMole.method); if(mpqcMole.functional ) g_free(mpqcMole.functional); if(mpqcMole.molecule ) g_free(mpqcMole.molecule ); if(mpqcMole.basis ) g_free(mpqcMole.basis); if(mpqcMole.auxBasisName ) g_free(mpqcMole.auxBasisName); if(mpqcMole.memory ) g_free(mpqcMole.memory); if(mpqcMole.guessWaveFunction) g_free(mpqcMole.guessWaveFunction); mpqcMole.method = NULL; mpqcMole.functional = NULL; mpqcMole.molecule = NULL; mpqcMole.basis = NULL; mpqcMole.memory = NULL; mpqcMole.guessWaveFunction = NULL; } /************************************************************************************************************/ static void setComboMethod(GtkWidget *comboMethod) { GList *glist = NULL; GtkWidget* entrySpinMultiplicity = NULL; G_CONST_RETURN gchar* entryText = NULL; int multiplicity; entrySpinMultiplicity = g_object_get_data(G_OBJECT (comboMethod), "EntrySpinMultiplicity"); if(!(GTK_IS_WIDGET(entrySpinMultiplicity))) return; entryText = gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)); if(strlen(entryText)<1)return; multiplicity = atoi(entryText); if(multiplicity==1) { glist = g_list_append(glist,"CLHF"); glist = g_list_append(glist,"HSOSHF"); glist = g_list_append(glist,"CLKS"); glist = g_list_append(glist,"HSOSKS"); glist = g_list_append(glist,"UHF"); glist = g_list_append(glist,"UKS"); glist = g_list_append(glist,"MBPT2"); glist = g_list_append(glist,"MBPT2_R12/A"); glist = g_list_append(glist,"MBPT2_R12/A'"); } else { glist = g_list_append(glist,"UHF"); glist = g_list_append(glist,"HSOSHF"); glist = g_list_append(glist,"UKS"); glist = g_list_append(glist,"HSOSKS"); glist = g_list_append(glist,"ZAPT"); glist = g_list_append(glist,"OPT1"); glist = g_list_append(glist,"OPT2"); } gtk_combo_box_entry_set_popdown_strings( comboMethod, glist) ; } /************************************************************************************************************/ static void setLabelMethod(GtkWidget* labelMethod, gchar* method) { static GList *glistMethod = NULL; static GList *glistLabel = NULL; GList *glistM = NULL; GList *glistL = NULL; if(!glistMethod) { glistMethod = g_list_append(glistMethod,"CLHF"); glistLabel = g_list_append(glistLabel,"Closed Shell Hartree-Fock"); glistMethod = g_list_append(glistMethod,"HSOSHF"); glistLabel = g_list_append(glistLabel,"Restricted Open Shell Hartree-Fock"); glistMethod = g_list_append(glistMethod,"CLKS"); glistLabel = g_list_append(glistLabel,"Closed Shell Kohn-Sham"); glistMethod = g_list_append(glistMethod,"HSOSKS"); glistLabel = g_list_append(glistLabel,"Restricted Open Shell Kohn-Sham "); glistMethod = g_list_append(glistMethod,"UHF"); glistLabel = g_list_append(glistLabel,"Unrestricted Hartree-Fock"); glistMethod = g_list_append(glistMethod,"UKS"); glistLabel = g_list_append(glistLabel,"Unrestricted Kohn-Sham "); glistMethod = g_list_append(glistMethod,"MBPT2"); glistLabel = g_list_append(glistLabel,"MP2 closed shell"); glistMethod = g_list_append(glistMethod,"MBPT2_R12/A"); glistLabel = g_list_append(glistLabel,"MP2 + R12 correlation closed shell"); glistMethod = g_list_append(glistMethod,"MBPT2_R12/A'"); glistLabel = g_list_append(glistLabel,"MP2 + R12 correlation closed shell"); glistMethod = g_list_append(glistMethod,"ZAPT"); glistLabel = g_list_append(glistLabel,"MP2 open shell"); glistMethod = g_list_append(glistMethod,"OPT1"); glistLabel = g_list_append(glistLabel,"MP2 open shell"); glistMethod = g_list_append(glistMethod,"OPT2"); glistLabel = g_list_append(glistLabel,"MP2 open shell"); } glistM = glistMethod; glistL = glistLabel; while(glistM != NULL && glistL!=NULL) { if(strcmp((gchar*)glistM->data,method)==0) { gtk_label_set_text(GTK_LABEL(labelMethod),(gchar*)glistL->data); break; } glistM = glistM->next; glistL = glistL->next; } } /************************************************************************************************************/ static void changedEntryMethod(GtkWidget *entry, gpointer data) { G_CONST_RETURN gchar* entryText = NULL; GtkWidget* labelMethod = NULL; GtkWidget* wid = NULL; gboolean KS = FALSE; gboolean R12 = FALSE; gboolean ZAPT = FALSE; gboolean OPT = FALSE; GtkWidget* entryFunctional = NULL; GtkWidget* buttonSinglePoint = g_object_get_data(G_OBJECT (entry), "ButtonSinglePoint"); GtkWidget* buttonOptimization = g_object_get_data(G_OBJECT (entry), "ButtonOptimization"); gboolean OkOptimize = TRUE; if(!GTK_IS_WIDGET(entry)) return; entryText = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(entryText)<1)return; if(strstr(entryText,"KS"))KS = TRUE; if(strstr(entryText,"R12"))R12 = TRUE; if(strstr(entryText,"ZAPT"))ZAPT = TRUE; if(strstr(entryText,"OPT"))OPT = TRUE; if(R12 || ZAPT || OPT ) OkOptimize = FALSE; if(!OkOptimize) { if(GTK_IS_WIDGET(buttonSinglePoint)) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonSinglePoint), TRUE); if(GTK_IS_WIDGET(buttonOptimization)) gtk_widget_set_sensitive(buttonOptimization,FALSE); } else { if(GTK_IS_WIDGET(buttonSinglePoint)) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonSinglePoint), TRUE); if(GTK_IS_WIDGET(buttonOptimization)) gtk_widget_set_sensitive(buttonOptimization,TRUE); } if(mpqcMole.method) g_free(mpqcMole.method); mpqcMole.method=g_strdup(entryText); labelMethod = g_object_get_data(G_OBJECT (entry), "LabelMethod"); if(GTK_IS_WIDGET(labelMethod)) setLabelMethod(labelMethod, mpqcMole.method); wid = g_object_get_data(G_OBJECT (entry), "LabelAuxBasis1"); if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid,R12); wid = g_object_get_data(G_OBJECT (entry), "LabelAuxBasis2"); if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid,R12); wid = g_object_get_data(G_OBJECT (entry), "ComboAuxBasis"); if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid,R12); wid = g_object_get_data(G_OBJECT (entry), "LabelFunctional1"); if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid,KS); wid = g_object_get_data(G_OBJECT (entry), "LabelFunctional2"); if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid,KS); wid = g_object_get_data(G_OBJECT (entry), "ComboFunctional"); if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid,KS); if(KS && GTK_IS_COMBO_BOX(wid)) { gboolean sumDen = FALSE; entryFunctional=GTK_BIN(wid)->child; entryText = gtk_entry_get_text(GTK_ENTRY(entryFunctional)); if(strstr(entryText,"Your")) sumDen = TRUE; wid = g_object_get_data(G_OBJECT (entry), "ButtonWhat"); if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid,!sumDen); wid = g_object_get_data(G_OBJECT (entry), "ButtonSumDenFunctional"); if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid,sumDen); } else { wid = g_object_get_data(G_OBJECT (entry), "ButtonWhat"); if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid,KS); wid = g_object_get_data(G_OBJECT (entry), "ButtonSumDenFunctional"); if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid,KS); } } /********************************************************************************/ static void setSpinMultiplicityComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity, gint spin) { GtkWidget *entry = NULL; gchar* t = NULL; if(!comboSpinMultiplicity) return; entry = GTK_BIN (comboSpinMultiplicity)->child; t = g_strdup_printf("%d",spin); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /************************************************************************************************************/ static void setComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity) { GList *glist = NULL; gint i; gint nlist = 0; gchar** list = NULL; gint k; gint kinc; gint ne = mpqcMolecule.numberOfValenceElectrons - mpqcMole.totalCharge; if(ne%2==0) nlist = ne/2+1; else nlist = (ne+1)/2; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; t = g_strdup_printf("%d",charge); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /********************************************************************************/ static void setComboCharge(GtkWidget *comboCharge) { GList *glist = NULL; gint i; gint nlist; gchar** list = NULL; gint k; nlist = mpqcMolecule.numberOfValenceElectrons*2-2+1; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; g_object_set_data(G_OBJECT (entry), "Combo",combo); gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.2),-1); return entry; } /***********************************************************************************************/ static GtkWidget *addMPQCChargeToTable(GtkWidget *table, gint i) { GtkWidget* entryCharge = NULL; GtkWidget* comboCharge = NULL; gint nlistCharge = 1; gchar* listCharge[] = {"0"}; GtkWidget* labelNumberOfElectrons = NULL; GtkWidget* hbox = NULL; add_label_table(table,"Charge",(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryCharge = addComboListToATable(table, listCharge, nlistCharge, i, 2, 1); comboCharge = g_object_get_data(G_OBJECT (entryCharge), "Combo"); gtk_widget_set_sensitive(entryCharge, FALSE); labelNumberOfElectrons = gtk_label_new(" "); hbox = gtk_hbox_new(0,FALSE); gtk_box_pack_start (GTK_BOX (hbox), labelNumberOfElectrons, FALSE, FALSE, 0); gtk_table_attach(GTK_TABLE(table),hbox,3,3+2,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT (entryCharge), "LabelNumberOfElectrons", labelNumberOfElectrons); g_signal_connect(G_OBJECT(entryCharge),"changed", G_CALLBACK(changedEntryCharge),NULL); setComboCharge(comboCharge); return comboCharge; } /***********************************************************************************************/ static GtkWidget *addMPQCSpinToTable(GtkWidget *table, gint i) { GtkWidget* entrySpinMultiplicity = NULL; GtkWidget* comboSpinMultiplicity = NULL; gint nlistspinMultiplicity = 1; gchar* listspinMultiplicity[] = {"0"}; add_label_table(table,_("Spin multiplicity"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entrySpinMultiplicity = addComboListToATable(table, listspinMultiplicity, nlistspinMultiplicity, i, 2, 1); comboSpinMultiplicity = g_object_get_data(G_OBJECT (entrySpinMultiplicity), "Combo"); gtk_widget_set_sensitive(entrySpinMultiplicity, FALSE); g_signal_connect(G_OBJECT(entrySpinMultiplicity),"changed", G_CALLBACK(changedEntrySpinMultiplicity),NULL); setComboSpinMultiplicity(comboSpinMultiplicity); return comboSpinMultiplicity; } /***********************************************************************************************/ static GtkWidget* addMPQCMethodToTable(GtkWidget *table, gint i, GtkWidget *comboSpinMultiplicity) { GtkWidget* entryMethod = NULL; GtkWidget* comboMethod = NULL; gint nlistMethod = 1; gchar* listMethod[] = {"CLHF"}; GtkWidget* labelMethod = NULL; GtkWidget* entrySpinMultiplicity = NULL; GtkWidget* hbox = NULL; entrySpinMultiplicity = GTK_BIN (comboSpinMultiplicity)->child; add_label_table(table, _("Method"), (gushort)i, 0); add_label_table(table, ":", (gushort)i, 1); entryMethod = addComboListToATable(table, listMethod, nlistMethod, i, 2, 1); comboMethod = g_object_get_data(G_OBJECT (entryMethod), "Combo"); gtk_widget_set_sensitive(entryMethod, FALSE); /*labelMethod = add_label_table(table, " ", i, 3);*/ labelMethod = gtk_label_new(" "); hbox = gtk_hbox_new(0,FALSE); gtk_box_pack_start (GTK_BOX (hbox), labelMethod, FALSE, FALSE, 0); gtk_table_attach(GTK_TABLE(table),hbox,3,3+2,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT (entryMethod), "ComboSpinMultiplicity", comboSpinMultiplicity); g_object_set_data(G_OBJECT (entryMethod), "LabelMethod", labelMethod); g_object_set_data(G_OBJECT (entryMethod), "EntrySpinMultiplicity", entrySpinMultiplicity); g_object_set_data(G_OBJECT (comboMethod), "EntrySpinMultiplicity", entrySpinMultiplicity); g_object_set_data(G_OBJECT (entrySpinMultiplicity), "ComboMethod", comboMethod); g_signal_connect(G_OBJECT(entryMethod),"changed", G_CALLBACK(changedEntryMethod),NULL); setComboMethod(comboMethod); return comboMethod; } /***********************************************************************************************/ static void addMPQCFunctionalToTable(GtkWidget *table, gint i, GtkWidget* comboMethod) { GtkWidget* entryFunctional = NULL; GtkWidget* comboFunctional = NULL; gint nlistFunctional = 1; gchar* listFunctional[] = {"B3LYP"}; GtkWidget* entryMethod = NULL; GtkWidget* label = NULL; GtkWidget* what = NULL; GtkWidget* sumDenFunctional = NULL; GtkWidget* hbox = NULL; if(GTK_IS_COMBO_BOX(comboMethod)) entryMethod = GTK_BIN(comboMethod)->child; label = add_label_table(table, _("Functional"), (gushort)i, 0); if(entryMethod) g_object_set_data(G_OBJECT (entryMethod), "LabelFunctional1", label); add_label_table(table, ":", (gushort)i, 1); if(entryMethod) g_object_set_data(G_OBJECT (entryMethod), "LabelFunctional2", label); entryFunctional = addComboListToATable(table, listFunctional, nlistFunctional, i, 2, 1); comboFunctional = g_object_get_data(G_OBJECT (entryFunctional), "Combo"); if(entryMethod) g_object_set_data(G_OBJECT (entryMethod), "ComboFunctional", comboFunctional); gtk_widget_set_sensitive(entryFunctional, FALSE); what = gtk_button_new_with_label(_("What this ?")); hbox = gtk_hbox_new(0,FALSE); gtk_box_pack_start (GTK_BOX (hbox), what, FALSE, FALSE, 0); add_widget_table(table,hbox,(gushort)i,3); if(entryMethod) g_object_set_data(G_OBJECT (entryMethod), "ButtonWhat", what); sumDenFunctional = gtk_button_new_with_label(_("Your functional")); hbox = gtk_hbox_new(0,FALSE); gtk_box_pack_start (GTK_BOX (hbox), sumDenFunctional, TRUE, TRUE, 0); add_widget_table(table,hbox,(gushort)i,4); if(entryMethod) g_object_set_data(G_OBJECT (entryMethod), "ButtonSumDenFunctional", sumDenFunctional); g_object_set_data(G_OBJECT (entryFunctional), "ButtonWhat", what); g_object_set_data(G_OBJECT (entryFunctional), "ButtonSumDenFunctional", sumDenFunctional); g_signal_connect(G_OBJECT(entryFunctional),"changed", G_CALLBACK(changedEntryFunctional),NULL); setComboFunctional(comboFunctional); /* activate sensitivity */ if(GTK_IS_WIDGET(comboMethod)) setComboMethod(comboMethod); g_signal_connect_swapped(G_OBJECT(what), "clicked",G_CALLBACK(whatFunctional),GTK_OBJECT(entryFunctional)); g_signal_connect_swapped(G_OBJECT(sumDenFunctional), "clicked",G_CALLBACK(mpqcSumDensityFunctionalWindow),GTK_OBJECT(entryFunctional)); } /***********************************************************************************************/ void createMPQCMole(GtkWidget *box) { GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget* comboSpinMultiplicity = NULL; GtkWidget* comboCharge = NULL; GtkWidget* comboMethod = NULL; GtkWidget *table = NULL; gint i; table = gtk_table_new(6,5,FALSE); frame = gtk_frame_new (_("Parameters for computing the molecule's energy")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); i = 0; comboCharge = addMPQCChargeToTable(table, i); i = 1; comboSpinMultiplicity = addMPQCSpinToTable(table, i); if(GTK_IS_COMBO_BOX(comboCharge)) g_object_set_data(G_OBJECT (GTK_BIN(comboCharge)->child), "ComboSpinMultiplicity", comboSpinMultiplicity); i = 2; comboMethod = addMPQCMethodToTable(table, i, comboSpinMultiplicity); i = 3; addMPQCFunctionalToTable(table,i, comboMethod); i = 4; addMPQCBasisToTable(table, i); i = 5; addMPQCAuxBasisToTable(table, i, comboMethod); /* activate sensitivity */ if(GTK_IS_WIDGET(comboMethod)) setComboMethod(comboMethod); g_object_set_data(G_OBJECT (box), "EntryMethod", GTK_BIN(comboMethod)->child); } /************************************************************************************************************/ static void putMPQCFunctionalInTextEditor() { gchar buffer[BSIZE]; gchar dump[BSIZE]; sprintf(buffer,"\t%c Functional method\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(strstr(mpqcMole.functional,"Your")) { gint n = G96X + 1; gint i; sprintf(buffer,"functional: (\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\t", -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"\t\tcoefs = [ "); for(i=0;i:()\n", dump, functionals[i].name); } } sprintf(dump,"%s",buffer); sprintf(buffer,"%s\t\t]\n", dump); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,")\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\t", -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); } else { sprintf(buffer,"functional: (\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\t", -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"\t\tname = \"%s\" \n", mpqcMole.functional); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,")\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\t", -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); } } /************************************************************************************************************/ static void putMPQCAuxBasisInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"\t%c Auxiliary basis\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"aux_basis: (\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\t", -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"\t\tname = \"%s\" \n", mpqcMole.auxBasisName); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"\t\tmolecule = $:molecule\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,")\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\t", -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); } /************************************************************************************************************/ static void putMPQCMoleInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"%c Method for computing the molecule's energy\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"mole<%s>: (\n",mpqcMole.method); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"\ttotal_charge = %d\n", mpqcMole.totalCharge); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(!strstr(mpqcMole.method,"CL")) { sprintf(buffer,"\tmultiplicity = %d\n", mpqcMole.spinMultiplicity); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } sprintf(buffer,"\tmolecule = %s\n", mpqcMole.molecule); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"\tmemory = %s\n", mpqcMole.memory); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(mpqcMole.printNPA) sprintf(buffer,"\tprint_npa = yes\n"); else sprintf(buffer,"\tprint_npa = no\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(mpqcMole.printNAO) sprintf(buffer,"\tprint_nao = yes\n"); else sprintf(buffer,"\tprint_nao = no\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"\tbasis = %s\n", mpqcMole.basis); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(strstr(mpqcMole.method,"KS") || strstr(mpqcMole.method,"ks")) putMPQCFunctionalInTextEditor(); if(!mpqcGuessWaveFunction.fromHCore) { sprintf(buffer,"\tguess_wavefunction = %s\n",mpqcMole.guessWaveFunction); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } sprintf(buffer,")\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"%c----------------------------------------------------------------\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } /************************************************************************************************************/ static void putMPQCReferenceInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"%c Reference state for MP2\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"reference: (\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"\ttotal_charge = %d\n", mpqcMole.totalCharge); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"\tmultiplicity = %d\n", mpqcMole.spinMultiplicity); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"\tbasis = %s\n", mpqcMole.basis); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"\tmolecule = %s\n", mpqcMole.molecule); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"\tmemory = %s\n", mpqcMole.memory); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(mpqcMole.printNPA) sprintf(buffer,"\tprint_npa = yes\n"); else sprintf(buffer,"\tprint_npa = no\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(mpqcMole.printNAO) sprintf(buffer,"\tprint_nao = yes\n"); else sprintf(buffer,"\tprint_nao = no\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(!mpqcGuessWaveFunction.fromHCore) { sprintf(buffer,"\tguess_wavefunction = %s\n",mpqcMole.guessWaveFunction); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } sprintf(buffer,")\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); } /************************************************************************************************************/ static void putMPQCMoleMP2InTextEditor() { gchar buffer[BSIZE]; gchar* stdapprox = NULL; gchar* method = NULL; gchar* algorithm = NULL; sprintf(buffer,"%c Method for computing the molecule's energy\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(!strstr(mpqcMole.method,"R12")) { if(strstr(mpqcMole.method,"MBPT2")) { sprintf(buffer,"mole<%s>: (\n",mpqcMole.method); method = g_strdup("mp"); algorithm = g_strdup("v1"); } else if(strstr(mpqcMole.method,"ZAPT")) { sprintf(buffer,"mole: (\n"); method = g_strdup("zapt"); algorithm = g_strdup("v1"); } else if(strstr(mpqcMole.method,"OPT1")) { sprintf(buffer,"mole: (\n"); method = g_strdup("opt1"); algorithm = g_strdup("v1"); } else if(strstr(mpqcMole.method,"OPT2")) { sprintf(buffer,"mole: (\n"); method = g_strdup("opt2"); algorithm = g_strdup("v1"); } else sprintf(buffer,"mole<%s>: (\n",mpqcMole.method); } else { sprintf(buffer,"mole: (\n"); if(strstr(mpqcMole.method,"A'")) stdapprox = g_strdup_printf("\"A'\""); else stdapprox = g_strdup_printf("\"A\""); } gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"\tmolecule = %s\n", mpqcMole.molecule); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"\tbasis = %s\n", mpqcMole.basis); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"\tmemory = %s\n", mpqcMole.memory); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(strstr(mpqcMole.method,"R12")) { if(stdapprox) { sprintf(buffer,"\tstdapprox = %s\n",stdapprox); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); g_free(stdapprox); } putMPQCAuxBasisInTextEditor(); } if(method) { sprintf(buffer,"\tmethod = %s\n",method); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } if(algorithm) { if(method && strstr(method,"mp")) { sprintf(buffer,"\t%c algorithm = v1, v2, v2lb or memgrp \n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } else { sprintf(buffer,"\t%c algorithm = v1, v2 or v2lb \n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } sprintf(buffer,"\talgorithm = %s\n",algorithm); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } if(algorithm) g_free(algorithm); if(method) g_free(method); sprintf(buffer,"\treference = $:reference\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,")\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"%c----------------------------------------------------------------\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } /************************************************************************************************************/ void putMPQCMoleInfoInTextEditor() { if( strstr(mpqcMole.method,"MBPT2") || strstr(mpqcMole.method,"ZAPT") || strstr(mpqcMole.method,"OPT") ) { putMPQCReferenceInTextEditor(); putMPQCMoleMP2InTextEditor(); } else putMPQCMoleInTextEditor(); } GabeditSrc250/src/MPQC/MPQCMpqc.h0000644000175100017510000000026413130665225016556 0ustar alloucheallouche #ifndef __GABEDIT_MPQCMPQC_H__ #define __GABEDIT_MPQCMPQC_H__ void initMPQCMpqc(); void freeMPQCMpqc(); void putMPQCMpqcInfoInTextEditor(); #endif /* __GABEDIT_MPQCMPQC_H__ */ GabeditSrc250/src/MPQC/MPQCMolecule.c0000644000175100017510000004505213130665225017422 0ustar alloucheallouche/* MPQCMolecule.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../MPQC/MPQCTypes.h" #include "../MPQC/MPQCGlobal.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/AtomsProp.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" /************************************************************************************************************/ typedef enum { AUTO = 0, GABEDIT, GABFIXED }TypeOfSymmetryButton; static gboolean symReduction = TRUE; static GtkWidget* labelSymmetry = NULL; static GtkWidget *buttonTolerance = NULL; /************************************************************************************************************/ void initMoleculeButtons() { labelSymmetry = NULL; buttonTolerance = NULL; } /************************************************************************************************************/ void initMPQCMolecule() { mpqcMolecule.listOfAtoms = NULL; mpqcMolecule.totalNumberOfElectrons = 0; mpqcMolecule.numberOfValenceElectrons = 0; mpqcMolecule.numberOfAtoms = 0; mpqcMolecule.groupSymmetry = NULL; } /************************************************************************************************************/ void freeMPQCMolecule() { static gboolean first = TRUE; if(first) { initMPQCMolecule(); first = FALSE; return; } if(mpqcMolecule.listOfAtoms) g_free(mpqcMolecule.listOfAtoms); if(mpqcMolecule.groupSymmetry) g_free(mpqcMolecule.groupSymmetry); initMPQCMolecule(); } /************************************************************************************************************/ static gint setMPQCMoleculeFromSXYZ(gint nAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z) { gint n; MPQCAtom* atomList = NULL; mpqcMolecule.listOfAtoms = NULL; mpqcMolecule.numberOfAtoms = 0; if(nAtoms<1) return 1; mpqcMolecule.listOfAtoms = (MPQCAtom*)g_malloc(sizeof(MPQCAtom)*(nAtoms)); if(mpqcMolecule.listOfAtoms==NULL) return -1; mpqcMolecule.numberOfAtoms = nAtoms; atomList = mpqcMolecule.listOfAtoms; for(n=0; nposition[0] = X[n]; atomList->position[1] = Y[n]; atomList->position[2] = Z[n]; atomList->symbol = g_strdup(symbols[n]); atomList++; } return 0; } /************************************************************************************************************/ static void setXYZFromGeomXYZ(gint i, gdouble* x, gdouble* y, gdouble *z) { if(!test(GeomXYZ[i].X)) *x = get_value_variableXYZ(GeomXYZ[i].X); else *x = atof(GeomXYZ[i].X); if(!test(GeomXYZ[i].Y)) *y = get_value_variableXYZ(GeomXYZ[i].Y); else *y = atof(GeomXYZ[i].Y); if(!test(GeomXYZ[i].Z)) *z = get_value_variableXYZ(GeomXYZ[i].Z); else *z = atof(GeomXYZ[i].Z); if(Units==0) { *x *= BOHR_TO_ANG; *y *= BOHR_TO_ANG; *z *= BOHR_TO_ANG; } } /************************************************************************************************************/ static gchar* computeGroupSymmetry() { gint i; gchar** symbols = NULL; gdouble* X = NULL; gdouble* Y = NULL; gdouble* Z = NULL; gint numberOfAtoms = mpqcMolecule.numberOfAtoms; gchar pointGroupSymbol[BSIZE]; gchar abelianPointGroupSymbol[BSIZE]; gchar message[BSIZE]; gint maximalOrder = 20; gint nGenerators; gint nMolcas = 0; gint nElements; gchar* generators[3]; gchar* molcasGenerators[3]; gchar* elements[8]; gdouble principalAxisTolerance = getTolerancePrincipalAxis(); gdouble positionTolerance = getTolerancePosition(); if(numberOfAtoms<1) return FALSE; for(i=0;i<3;i++) { generators[i] = g_malloc(100*sizeof(gchar)); molcasGenerators[i] = g_malloc(100*sizeof(gchar)); } for(i=0;i<8;i++) elements[i] = g_malloc(100*sizeof(gchar)); symbols = (gchar**)g_malloc(sizeof(gchar*)*(numberOfAtoms)); if(symbols == NULL) return FALSE; X = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(X == NULL) return FALSE; Y = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Y == NULL) return FALSE; Z = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Z == NULL) return FALSE; for(i=0; i:(\n",-1); } /************************************************************************************************************/ static void putTitleGeometryInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"%c----------------------------------------------------------------\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"%c Molecule specification\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /************************************************************************************************************/ static void putEndGeometryInTextEditor() { gchar buffer[BSIZE]; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, ")\n",-1); sprintf(buffer,"%c----------------------------------------------------------------\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /************************************************************************************************************/ void putMPQCGeometryInfoInTextEditor() { putTitleGeometryInTextEditor(); putBeginGeometryInTextEditor(); putMPQCMoleculeInTextEditor(); putEndGeometryInTextEditor(); } /**************************************************************************************************************************************/ static void activateRadioButton(GtkWidget *button, gpointer data) { gint* type = NULL; GtkWidget* label = NULL; GtkWidget* comboSymmetry = NULL; gchar buffer[BSIZE]; if(!GTK_IS_WIDGET(button)) return; type = g_object_get_data(G_OBJECT (button), "Type"); label = g_object_get_data(G_OBJECT (button), "Label"); comboSymmetry = g_object_get_data(G_OBJECT (button), "ComboSymmetry"); if(type) { setMPQCMolecule(); if( GTK_TOGGLE_BUTTON (button)->active && *type == GABFIXED) { if(mpqcMolecule.groupSymmetry) g_free(mpqcMolecule.groupSymmetry); mpqcMolecule.groupSymmetry = g_strdup("C1"); symReduction = FALSE; if(GTK_IS_WIDGET(comboSymmetry)) gtk_widget_set_sensitive(comboSymmetry, TRUE); } if(GTK_TOGGLE_BUTTON (button)->active && *type == AUTO) { if(mpqcMolecule.groupSymmetry) g_free(mpqcMolecule.groupSymmetry); mpqcMolecule.groupSymmetry = g_strdup("auto"); symReduction = FALSE; if(GTK_IS_WIDGET(comboSymmetry)) gtk_widget_set_sensitive(comboSymmetry, FALSE); } if(GTK_TOGGLE_BUTTON (button)->active && *type == GABEDIT) { /* groupSymmetry define in setMPQCMolecule */ symReduction = TRUE; if(GTK_IS_WIDGET(comboSymmetry)) gtk_widget_set_sensitive(comboSymmetry, FALSE); } if(label) gtk_label_set_text(GTK_LABEL(label)," "); if(GTK_IS_WIDGET(buttonTolerance) && symReduction ) gtk_widget_set_sensitive(buttonTolerance, TRUE); if(GTK_IS_WIDGET(buttonTolerance) && !symReduction ) gtk_widget_set_sensitive(buttonTolerance, FALSE); if(GTK_TOGGLE_BUTTON (button)->active && label && symReduction) { sprintf(buffer,"%s group",mpqcMolecule.groupSymmetry); gtk_label_set_text(GTK_LABEL(label),buffer); } } } /************************************************************************************************************/ static GtkWidget* addRadioButtonToATable(GtkWidget* table, GtkWidget* friendButton, gchar* label, gint i, gint j, gint k) { GtkWidget *newButton; if(friendButton) newButton = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (friendButton)), label); else newButton = gtk_radio_button_new_with_label( NULL, label); gtk_table_attach(GTK_TABLE(table),newButton,j,j+k,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT (newButton), "Label",NULL); g_object_set_data(G_OBJECT (newButton), "Type",NULL); return newButton; } /**************************************************************************************************************************************/ static void resetTolerance(GtkWidget *win) { gchar buffer[BSIZE]; setMPQCMolecule(); if(labelSymmetry) { sprintf(buffer,"%s group",mpqcMolecule.groupSymmetry); gtk_label_set_text(GTK_LABEL(labelSymmetry),buffer); } } /**************************************************************************************************************************************/ static void activateToleranceButton(GtkWidget *button, gpointer data) { if(!GTK_IS_WIDGET(button)) return; createToleranceWindow(mpqcWin, resetTolerance); } /********************************************************************************/ static void setComboSymmetry(GtkWidget *comboSymmetry) { GList *glist = NULL; glist = g_list_append(glist,"C1"); glist = g_list_append(glist,"Cs"); glist = g_list_append(glist,"C2"); glist = g_list_append(glist,"D2"); glist = g_list_append(glist,"C2v"); glist = g_list_append(glist,"Ci"); glist = g_list_append(glist,"C2h"); glist = g_list_append(glist,"D2h"); gtk_combo_box_entry_set_popdown_strings( comboSymmetry, glist) ; g_list_free(glist); } /**********************************************************************/ static void changedEntrySymmetry(GtkWidget *entry, gpointer data) { G_CONST_RETURN gchar* entryText = NULL; if(!GTK_IS_WIDGET(entry)) return; entryText = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(entryText)<1)return; if(mpqcMolecule.groupSymmetry) g_free(mpqcMolecule.groupSymmetry); mpqcMolecule.groupSymmetry = g_strdup(entryText); if(strstr(entryText,"C1")) symReduction = FALSE; else symReduction = FALSE; } /************************************************************************************************************/ void createMPQCSymmetryFrame(GtkWidget *win, GtkWidget *box) { GtkWidget* button; GtkWidget* buttonAuto; GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget* comboSymmetry = NULL; GtkWidget* entrySymmetry = NULL; GtkWidget* label = gtk_label_new(" "); GtkWidget *table = gtk_table_new(3,3,FALSE); static TypeOfSymmetryButton typeOfSymmetry[] = { AUTO,GABEDIT, GABFIXED}; gchar* list[] = {"C1"}; frame = gtk_frame_new (_("Symmetry")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); comboSymmetry = create_combo_box_entry(list, 1, TRUE, -1, -1); entrySymmetry = GTK_BIN(comboSymmetry)->child; gtk_widget_set_sensitive(entrySymmetry, FALSE); if(mpqcMolecule.groupSymmetry) g_free(mpqcMolecule.groupSymmetry); mpqcMolecule.groupSymmetry = g_strdup("auto"); button = addRadioButtonToATable(table, NULL, _("Auto detection by MPQC"), 0, 0, 2); g_object_set_data(G_OBJECT (button), "Label",label); g_object_set_data(G_OBJECT (button), "Type",&typeOfSymmetry[AUTO]); g_object_set_data(G_OBJECT (button), "ComboSymmetry",comboSymmetry); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); buttonAuto = button; button = addRadioButtonToATable(table, button, _("Detected by Gabedit"), 1, 0, 1); g_object_set_data(G_OBJECT (button), "Label",label); g_object_set_data(G_OBJECT (button), "Type",&typeOfSymmetry[GABEDIT]); g_object_set_data(G_OBJECT (button), "ComboSymmetry",comboSymmetry); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); add_widget_table(table, label, 1, 1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE); buttonTolerance = create_button(win,_("Tolerance")); add_widget_table(table, buttonTolerance, 1, 2); g_signal_connect(G_OBJECT(buttonTolerance),"clicked", G_CALLBACK(activateToleranceButton),NULL); labelSymmetry = label; gtk_widget_set_sensitive(buttonTolerance, FALSE); button = addRadioButtonToATable(table, button, _("Fixed Symmetry"), 2, 0,1); g_signal_connect(G_OBJECT(entrySymmetry),"changed", G_CALLBACK(changedEntrySymmetry),NULL); setComboSymmetry(comboSymmetry); gtk_table_attach(GTK_TABLE(table),comboSymmetry,1,1+2,2,2+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT (button), "Label",label); g_object_set_data(G_OBJECT (button), "Type",&typeOfSymmetry[GABFIXED]); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE); g_object_set_data(G_OBJECT (button), "ComboSymmetry",comboSymmetry); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); gtk_widget_set_sensitive(comboSymmetry, FALSE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonAuto), FALSE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonAuto), TRUE); } GabeditSrc250/src/MPQC/MPQCGuessWaveFunction.c0000644000175100017510000004656113130665225021302 0ustar alloucheallouche/* MPQCGuessWaveFunction.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../MPQC/MPQCTypes.h" #include "../MPQC/MPQCGlobal.h" #include "../MPQC/MPQCBasis.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/AtomsProp.h" #include "../Utils/GabeditTextEdit.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" /************************************************************************************************************/ void initMPQCGuessWaveFunction() { mpqcGuessWaveFunction.method = g_strdup("CLHF"); mpqcGuessWaveFunction.functional = g_strdup("B3LYP"); mpqcGuessWaveFunction.molecule = g_strdup("$:molecule"); mpqcGuessWaveFunction.basis = g_strdup("STO-3G"); mpqcGuessWaveFunction.memory = g_strdup("16000000"); mpqcGuessWaveFunction.totalCharge = 0; mpqcGuessWaveFunction.spinMultiplicity = 1; mpqcGuessWaveFunction.fromHCore = FALSE; } /************************************************************************************************************/ void freeMPQCGuessWaveFunction() { if(mpqcGuessWaveFunction.method ) g_free(mpqcGuessWaveFunction.method); if(mpqcGuessWaveFunction.functional ) g_free(mpqcGuessWaveFunction.functional); if(mpqcGuessWaveFunction.molecule ) g_free(mpqcGuessWaveFunction.molecule ); if(mpqcGuessWaveFunction.basis ) g_free(mpqcGuessWaveFunction.basis); if(mpqcGuessWaveFunction.memory ) g_free(mpqcGuessWaveFunction.memory); mpqcGuessWaveFunction.method = NULL; mpqcGuessWaveFunction.functional = NULL; mpqcGuessWaveFunction.molecule = NULL; mpqcGuessWaveFunction.basis = NULL; mpqcGuessWaveFunction.memory = NULL; } /************************************************************************************************************/ static void setLabelMethod(GtkWidget* labelMethod, gchar* method) { static GList *glistMethod = NULL; static GList *glistLabel = NULL; GList *glistM = NULL; GList *glistL = NULL; if(!glistMethod) { glistMethod = g_list_append(glistMethod,"CLHF"); glistLabel = g_list_append(glistLabel,"Closed Shell Hartree-Fock"); glistMethod = g_list_append(glistMethod,"HSOSHF"); glistLabel = g_list_append(glistLabel,"Restricted Open Shell Hartree-Fock"); glistMethod = g_list_append(glistMethod,"CLKS"); glistLabel = g_list_append(glistLabel,"Closed Shell Kohn-Sham"); glistMethod = g_list_append(glistMethod,"HSOSKS"); glistLabel = g_list_append(glistLabel,"Restricted Open Shell Kohn-Sham "); glistMethod = g_list_append(glistMethod,"UHF"); glistLabel = g_list_append(glistLabel,"Unrestricted Hartree-Fock"); glistMethod = g_list_append(glistMethod,"UKS"); glistLabel = g_list_append(glistLabel,"Unrestricted Kohn-Sham "); glistMethod = g_list_append(glistMethod,"MBPT2"); glistLabel = g_list_append(glistLabel,"MP2 closed shell"); glistMethod = g_list_append(glistMethod,"MBPT2_R12/A"); glistLabel = g_list_append(glistLabel,"MP2 + R12 correlation closed shell"); glistMethod = g_list_append(glistMethod,"MBPT2_R12/A'"); glistLabel = g_list_append(glistLabel,"MP2 + R12 correlation closed shell"); glistMethod = g_list_append(glistMethod,"ZAPT2"); glistLabel = g_list_append(glistLabel,"MP2 open shell"); glistMethod = g_list_append(glistMethod,"OPT2(2)"); glistLabel = g_list_append(glistLabel,"MP2 open shell"); } glistM = glistMethod; glistL = glistLabel; while(glistM != NULL && glistL!=NULL) { if(strcmp((gchar*)glistM->data,method)==0) { gtk_label_set_text(GTK_LABEL(labelMethod),(gchar*)glistL->data); break; } glistM = glistM->next; glistL = glistL->next; } } /************************************************************************************************************/ static void changedEntryMethod(GtkWidget *entry, gpointer data) { G_CONST_RETURN gchar* entryText = NULL; GtkWidget* labelMethod = NULL; if(!GTK_IS_WIDGET(entry)) return; entryText = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(entryText)<1)return; if(mpqcGuessWaveFunction.method) g_free(mpqcGuessWaveFunction.method); mpqcGuessWaveFunction.method=g_strdup(entryText); labelMethod = g_object_get_data(G_OBJECT (entry), "LabelMethod"); if(GTK_IS_WIDGET(labelMethod)) setLabelMethod(labelMethod, mpqcGuessWaveFunction.method); } /************************************************************************************************************/ static void setComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity) { GList *glist = NULL; gint i; gint nlist = 0; gchar** list = NULL; gint k; gint kinc; gint ne = mpqcMolecule.numberOfValenceElectrons - mpqcGuessWaveFunction.totalCharge; if(ne%2==0) nlist = ne/2+1; else nlist = (ne+1)/2; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; g_object_set_data(G_OBJECT (entry), "Combo",combo); return entry; } /***********************************************************************************************/ static GtkWidget *addMPQCChargeToTable(GtkWidget *table, gint i) { GtkWidget* entryCharge = NULL; GtkWidget* comboCharge = NULL; gint nlistCharge = 1; gchar* listCharge[] = {"0"}; GtkWidget* labelNumberOfElectrons = NULL; add_label_table(table,"Charge",(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryCharge = addComboListToATable(table, listCharge, nlistCharge, i, 2, 1); comboCharge = g_object_get_data(G_OBJECT (entryCharge), "Combo"); gtk_widget_set_sensitive(entryCharge, FALSE); labelNumberOfElectrons = add_label_table(table," ",(gushort)i,3); g_object_set_data(G_OBJECT (entryCharge), "LabelNumberOfElectrons", labelNumberOfElectrons); g_signal_connect(G_OBJECT(entryCharge),"changed", G_CALLBACK(changedEntryCharge),NULL); setComboCharge(comboCharge); return comboCharge; } /***********************************************************************************************/ static GtkWidget *addMPQCSpinGuessToTable(GtkWidget *table, gint i) { GtkWidget* entrySpinMultiplicity = NULL; GtkWidget* comboSpinMultiplicity = NULL; gint nlistspinMultiplicity = 1; gchar* listspinMultiplicity[] = {"0"}; add_label_table(table,_("Spin multiplicity"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entrySpinMultiplicity = addComboListToATable(table, listspinMultiplicity, nlistspinMultiplicity, i, 2, 1); comboSpinMultiplicity = g_object_get_data(G_OBJECT (entrySpinMultiplicity), "Combo"); gtk_widget_set_sensitive(entrySpinMultiplicity, FALSE); g_signal_connect(G_OBJECT(entrySpinMultiplicity),"changed", G_CALLBACK(changedEntrySpinMultiplicity),NULL); setComboSpinMultiplicity(comboSpinMultiplicity); return comboSpinMultiplicity; } /***********************************************************************************************/ static void addMPQCMethodToTable(GtkWidget *table, gint i, GtkWidget *comboSpinMultiplicity) { GtkWidget* entryMethod = NULL; GtkWidget* comboMethod = NULL; gint nlistMethod = 1; gchar* listMethod[] = {"CLHF"}; GtkWidget* labelMethod = NULL; GtkWidget* entrySpinMultiplicity = NULL; entrySpinMultiplicity = GTK_BIN (comboSpinMultiplicity)->child; add_label_table(table, _("Method"),(gushort) i, 0); add_label_table(table, ":",(gushort) i, 1); entryMethod = addComboListToATable(table, listMethod, nlistMethod, i, 2, 1); comboMethod = g_object_get_data(G_OBJECT (entryMethod), "Combo"); gtk_widget_set_sensitive(entryMethod, FALSE); labelMethod = add_label_table(table, " ",(gushort) i, 3); g_object_set_data(G_OBJECT (entryMethod), "ComboSpinMultiplicity", comboSpinMultiplicity); g_object_set_data(G_OBJECT (entryMethod), "LabelMethod", labelMethod); g_object_set_data(G_OBJECT (entryMethod), "EntrySpinMultiplicity", entrySpinMultiplicity); g_object_set_data(G_OBJECT (comboMethod), "EntrySpinMultiplicity", entrySpinMultiplicity); g_object_set_data(G_OBJECT (entrySpinMultiplicity), "ComboMethod", comboMethod); g_signal_connect(G_OBJECT(entryMethod),"changed", G_CALLBACK(changedEntryMethod),NULL); setComboMethod(comboMethod); } /***********************************************************************************************/ void coreButtonClicked(GtkWidget *button, gpointer data) { GtkWidget* vboxTable = NULL; if(!GTK_IS_BUTTON(button))return; vboxTable = g_object_get_data(G_OBJECT (button), "VboxTable"); if(GTK_TOGGLE_BUTTON (button)->active) { if(GTK_IS_WIDGET(vboxTable)) gtk_widget_set_sensitive(vboxTable, FALSE); /* if(GTK_IS_WIDGET(vboxTable)) gtk_widget_hide(vboxTable);*/ mpqcGuessWaveFunction.fromHCore = TRUE; } else { if(GTK_IS_WIDGET(vboxTable)) gtk_widget_set_sensitive(vboxTable, TRUE); mpqcGuessWaveFunction.fromHCore = FALSE; /* if(GTK_IS_WIDGET(vboxTable)) gtk_widget_show(vboxTable);*/ } } /***********************************************************************************************/ void createMPQCGuess(GtkWidget *box) { GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget* vboxTable; GtkWidget* hboxButton; GtkWidget* comboSpinMultiplicity = NULL; GtkWidget* comboCharge = NULL; GtkWidget *table = NULL; GtkWidget *checkButton = NULL; gint i; table = gtk_table_new(5,4,FALSE); frame = gtk_frame_new (_("Parameters for computing the guess wave function")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); hboxButton = gtk_hbox_new(TRUE, 5); gtk_box_pack_start (GTK_BOX (vboxFrame), hboxButton, FALSE, FALSE, 5); checkButton = gtk_check_button_new_with_label (_("Starting from core Hamiltonian guess.")); gtk_box_pack_start (GTK_BOX (hboxButton), checkButton, TRUE, TRUE, 5); vboxTable = gtk_vbox_new (FALSE, 3); gtk_box_pack_start (GTK_BOX (vboxFrame), vboxTable, TRUE, TRUE, 3); gtk_box_pack_start (GTK_BOX (vboxTable), table, TRUE, TRUE, 0); i = 0; comboCharge = addMPQCChargeToTable(table, i); i = 1; comboSpinMultiplicity = addMPQCSpinGuessToTable(table, i); if(GTK_IS_COMBO_BOX(comboCharge)) g_object_set_data(G_OBJECT (GTK_BIN(comboCharge)->child), "ComboSpinMultiplicity", comboSpinMultiplicity); i = 2; addMPQCMethodToTable(table, i, comboSpinMultiplicity); i = 3; addMPQCBasisGuessToTable(table,i); g_object_set_data(G_OBJECT (checkButton), "VboxTable", vboxTable); g_signal_connect(G_OBJECT(checkButton),"clicked", G_CALLBACK(coreButtonClicked),NULL); } /**************************************************************************************************************************************/ static void putMPQCGuessWaveInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"%c Guess wave function\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"guess_wavefunction<%s>: (\n", mpqcGuessWaveFunction.method); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"\ttotal_charge = %d\n", mpqcGuessWaveFunction.totalCharge); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); if(!strstr(mpqcGuessWaveFunction.method,"CL")) { sprintf(buffer,"\tmultiplicity = %d\n", mpqcGuessWaveFunction.spinMultiplicity); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } sprintf(buffer,"\tmolecule = %s\n", mpqcGuessWaveFunction.molecule); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"\tmemory = %s\n", mpqcGuessWaveFunction.memory); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"basis: (\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\t", -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"\t\tmolecule = %s\n", mpqcGuessWaveFunction.molecule); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"\t\tname = \"%s\"\n", mpqcGuessWaveFunction.basis); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,")\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\t", -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,")\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"%c----------------------------------------------------------------\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } /**************************************************************************************************************************************/ /************************************************************************************************************/ void putMPQCGuessWaveFunctionInfoInTextEditor() { if(!mpqcGuessWaveFunction.fromHCore) putMPQCGuessWaveInTextEditor(); } GabeditSrc250/src/MPQC/MPQC.c0000644000175100017510000002066213130665225015734 0ustar alloucheallouche/* MPQC.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Common/Global.h" #include "../MPQC/MPQCTypes.h" #include "../MPQC/MPQCGlobal.h" #include "../MPQC/MPQCMolecule.h" #include "../MPQC/MPQCMole.h" #include "../MPQC/MPQCGuessWaveFunction.h" #include "../MPQC/MPQCMpqc.h" #include "../MPQC/MPQCBasis.h" #include "../MPQC/MPQCFunctionals.h" #include "../MPQC/MPQCOptimization.h" #include "../MPQC/MPQCProperties.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" static GtkWidget *Wins=NULL; static gboolean newFile = FALSE; /************************************************************************************************************/ static void setColors() { static gboolean first = TRUE; if(!first) return; first = FALSE; mpqcColorFore.keyWord.red = 65535; mpqcColorFore.keyWord.green = 0; mpqcColorFore.keyWord.blue = 0; mpqcColorBack.keyWord.red = (gushort)(65535/1.2); mpqcColorBack.keyWord.green = (gushort)(65535/1.2); mpqcColorBack.keyWord.blue = (gushort)(65535/1.2); mpqcColorFore.description.red = 0; mpqcColorFore.description.green = 65535; mpqcColorFore.description.blue = 65535; mpqcColorBack.description.red = (gushort)(65535/2.0); mpqcColorBack.description.green = (gushort)(65535/2.0); mpqcColorBack.description.blue = (gushort)(65535/2.0); } /************************************************************************************************************/ void destroyWinsMPQC(GtkWidget *win) { destroy(Wins,NULL); Wins = NULL; initMoleculeButtons(); freeMPQCFunctionals(); freeMPQCStdFunctionals(); freeMPQCMole(); freeMPQCGuessWaveFunction(); freeMPQCMolecule(); freeMPQCMpqc(); freeMPQCBasis(); freeMPQCOptimization(); } /************************************************************************************************************/ static void toCancelWin(GtkWidget* win,gpointer data) { Cancel_YesNo(win, data, destroy_children); } /************************************************************************************************************/ static void putTitleInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"%c ================================================================\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"%c This file was generated by Gabedit\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"%c ================================================================\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); } /************************************************************************************************************/ static void putInfoInTextEditor(GtkWidget *button, gpointer data) { setColors(); if(newFile) { reset_name_files(); ClearText(text); } else { gint nchar; nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); gabedit_text_set_point(GABEDIT_TEXT(text),nchar); } data_modify(TRUE); putTitleInTextEditor(); putMPQCGeometryInfoInTextEditor(); putMPQCBasisInfoInTextEditor(); putMPQCGuessWaveFunctionInfoInTextEditor(); putMPQCMoleInfoInTextEditor(); if(mpqcMpqc.optimize) putMPQCOptimizationInfoInTextEditor(); putMPQCMpqcInfoInTextEditor(); iprogram = PROG_IS_MPQC; gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0); } /*********************************************************************************************/ static GtkWidget* addHboxToTable(GtkWidget* table, gint i, gint j, gint ki, gint kj) { GtkWidget *hbox = gtk_hbox_new(TRUE, 5); gtk_table_attach(GTK_TABLE(table),hbox,j,j+kj,i,i+ki, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); return hbox; } /************************************************************************************************************/ static void mpqcInputFileWindow(gboolean newInputFile) { GtkWidget *button; GtkWidget *hbox = NULL; GtkWidget *table = gtk_table_new(6,2,FALSE); GtkWidget *entryMethod = NULL; GtkWidget *buttonSinglePoint; GtkWidget *buttonOptimization; fileopen.command=g_strdup(NameCommandMPQC); newFile = newInputFile; initMPQCMpqc(); initMPQCMole(); initMPQCFunctionals(); initMPQCStdFunctionals(); initMPQCGuessWaveFunction(); initMPQCMolecule(); initMPQCBasis(); initMPQCOptimization(); setMPQCMolecule(); if(mpqcMolecule.numberOfAtoms <1) { Message( _( "You must initially define your geometry.\n\n" "From the principal Menu select : Geometry/Draw\n" "and draw (or read) your molecule.") ,_("Error"),TRUE); return; } if(Wins) destroy_children(Wins); Wins= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Wins),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Wins),GTK_WINDOW(Fenetre)); gtk_window_set_title(>K_DIALOG(Wins)->window,_("MPQC input")); gtk_window_set_modal (GTK_WINDOW (Wins), TRUE); init_child(Wins, destroyWinsMPQC,_(" MPQC input ")); g_signal_connect(G_OBJECT(Wins),"delete_event",(GCallback)destroy_children,NULL); gtk_widget_realize(Wins); button = create_button(Wins,_("Cancel")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK( toCancelWin),GTK_OBJECT(Wins)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show (button); button = create_button(Wins,"OK"); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->vbox), table, FALSE, TRUE, 5); hbox =addHboxToTable(table, 0, 0, 1, 1); createMPQCSymmetryFrame(Wins, hbox); hbox =addHboxToTable(table, 1, 0, 1, 2); createMPQCMole(hbox); entryMethod = g_object_get_data(G_OBJECT (hbox), "EntryMethod"); hbox =addHboxToTable(table, 2, 0, 1, 2); createMPQCGuess(hbox); hbox =addHboxToTable(table, 0, 1, 1, 1); createMPQCOptimization(hbox); buttonSinglePoint = g_object_get_data(G_OBJECT (hbox), "ButtonSinglePoint"); buttonOptimization = g_object_get_data(G_OBJECT (hbox), "ButtonOptimization"); g_object_set_data(G_OBJECT (entryMethod),"ButtonSinglePoint", buttonSinglePoint); g_object_set_data(G_OBJECT (entryMethod), "ButtonOptimization", buttonOptimization); hbox =addHboxToTable(table, 4, 0, 1, 2); createMPQCProperties(hbox); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(putInfoInTextEditor),GTK_OBJECT(Wins)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(destroy_children),GTK_OBJECT(Wins)); gtk_widget_show_all(Wins); mpqcWin = Wins; } /************************************************************************************************************/ void newMPQC() { mpqcInputFileWindow(TRUE); } /************************************************************************************************************/ void insertMPQC() { mpqcInputFileWindow(FALSE); } GabeditSrc250/src/MPQC/MPQCBasisLibrary.c0000644000175100017510000012216613130665225020245 0ustar alloucheallouche/* MPQCBasisLibrary.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include "../../Config.h" #include "../Common/Global.h" #include "../MPQC/MPQCLib.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "../MPQC/MPQCBasisLibrary.h" #include "../Common/StockIcons.h" static GtkWidget* Entry; static GtkWidget* EntryBasisName; #define lengthList 2 static MPQCBasis mpqcBasis={0,NULL}; static GtkWidget *SetWinDlg = NULL; static GtkWidget *treeView = NULL; typedef struct _DataMPQCTree DataMPQCTree; struct _DataMPQCTree { gint atomNumber; gint basisNumber; }; static gchar selectedRow[100] = "-1"; static void rafreshTreeView(); typedef enum { LIST_ATOM_SYMBOL = 0, LIST_BASIS_NAME, LIST_DATA /* column for data, this column is not visible */ }ListColumnsTypes; /********************************************************************************/ typedef enum { MENU_NEW_ATOM = 0, MENU_DELETE_ATOM, MENU_NEW_BASIS, MENU_EDIT_BASIS, MENU_DELETE_BASIS, MENU_SAVE, MENU_CLOSE } EnumMenuType; /********************************************************************************/ static void deleteBasisDlg(GtkWidget *win,gpointer d); static void deleteAtomDlg(GtkWidget *win,gpointer d); static void newBasisDlg(); static void editBasisDlg(); static void newAtomDlg(); /********************************************************************************/ static void freeMPQCBasis() { if(mpqcBasis.numberOfAtoms<1) { mpqcBasis.numberOfAtoms = 0; mpqcBasis.atoms = NULL; return; } mpqcBasis.numberOfAtoms = 0; mpqcBasis.atoms = NULL; } /********************************************************************************/ void get_mpqc_basis_list(gchar* Symb,gchar* outfile,gchar* errfile) { FILE* fout=FOpen(outfile,"w"); FILE* ferr=FOpen(errfile,"w"); gchar bas[BSIZE]; gint atomNumber = -1; gint i; if(mpqcBasis.numberOfAtoms<1) { loadMPQCBasis(); if(mpqcBasis.numberOfAtoms<1) return; } atomNumber = -1; for(i=0;i=0) for(i=0;i=0) { sensitive[MENU_NEW_ATOM-o] = FALSE; sensitive[MENU_DELETE_ATOM-o] = FALSE; sensitive[MENU_NEW_BASIS-o] = TRUE; sensitive[MENU_EDIT_BASIS-o] = TRUE; sensitive[MENU_DELETE_BASIS-o] = TRUE; sensitive[MENU_SAVE-o] = TRUE; sensitive[MENU_CLOSE-o] = TRUE; for(i=0;i\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*******************************************************************************************************************************/ static GtkUIManager *newMenu(GtkWidget* win) { GtkActionGroup *actionGroup = NULL; GtkUIManager *manager = NULL; GError *error = NULL; manager = gtk_ui_manager_new (); g_signal_connect_swapped (win, "destroy", G_CALLBACK (g_object_unref), manager); actionGroup = gtk_action_group_new ("GabeditEditBasisMPQCLibrary"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntries, numberOfGtkActionEntries, NULL); gtk_ui_manager_insert_action_group (manager, actionGroup, 0); gtk_window_add_accel_group (GTK_WINDOW (win), gtk_ui_manager_get_accel_group (manager)); if (!gtk_ui_manager_add_ui_from_string (manager, uiMenuInfo, -1, &error)) { g_message (_("building menus failed: %s"), error->message); g_error_free (error); } return manager; } /*********************************************************************************************************************/ static void eventDispatcher(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; GtkTreeIter iter; GtkTreeModel *model; if (!event) return; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); sprintf(selectedRow ,"%s",gtk_tree_path_to_string(path)); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free(path); if (event->type == GDK_BUTTON_PRESS && ((GdkEventButton *) event)->button == 3) { GdkEventButton *bevent = (GdkEventButton *) event; GtkUIManager *manager = GTK_UI_MANAGER(user_data); if(atoi(selectedRow) < 0) set_sensitive_menu(manager, TRUE, 0); else { DataMPQCTree* data = NULL; gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1); if(data) set_sensitive_menu(manager, FALSE, data->basisNumber); } show_menu_popup(manager, bevent->button, bevent->time); } } } GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event); } /********************************************************************************/ static DataMPQCTree* newDataMPQCTree(gint atomNumber, gint basisNumber) { DataMPQCTree* dataTree; dataTree = g_malloc(sizeof(DataMPQCTree)); dataTree->atomNumber = atomNumber; dataTree->basisNumber = basisNumber; return dataTree; } /********************************************************************************/ static void freeDataMPQCTree() { DataMPQCTree* data = NULL; gint i = 0; gchar* pathString = NULL; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); pathString = g_strdup_printf("%d", i); while (gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE) { gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1); if(data) g_free(data); i++; g_free(pathString); pathString = g_strdup_printf("%d", i); } g_free(pathString); } /********************************************************************************/ static gboolean* getExpandInfo() { gint i; gboolean* expandeds = NULL; gint nNodes = 0; gchar* pathString = NULL; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); nNodes = 0; pathString = g_strdup_printf("%d", nNodes); while (gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE) { nNodes++; g_free(pathString); pathString = g_strdup_printf("%d", nNodes); } g_free(pathString); if(nNodes<1) return NULL; expandeds = g_malloc((nNodes+1)*sizeof(gboolean)); for(i=0;iatomNumber; basisNumber = data->basisNumber; if(atomNumber<0) return; if(basisNumber<0) return; if(mpqcBasis.atoms[atomNumber].basis[basisNumber].basisName) g_free(mpqcBasis.atoms[atomNumber].basis[basisNumber].basisName); numberOfBasis = mpqcBasis.atoms[atomNumber].numberOfBasis; for(i=basisNumber;iatomNumber; basisNumber = data->basisNumber; if(atomNumber<0) return; if(basisNumber<0) return; t =g_strdup_printf(format, mpqcBasis.atoms[atomNumber].basis[basisNumber].basisName, mpqcBasis.atoms[atomNumber].symbol ); w = Continue_YesNo(deleteOneBasis, NULL,t); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(SetWinDlg)); } /********************************************************************************/ static void deleteOneAtom(GtkWidget *win, gpointer d) { gint atomNumber; gint basisNumber; gint numberOfBasis; gint numberOfAtoms; gint i; gboolean* expandeds; GtkTreeIter node; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); DataMPQCTree* data = NULL; if(atoi(selectedRow)<0) return; if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; expandeds = getExpandInfo(); gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); if(!data) return; atomNumber = data->atomNumber; basisNumber = data->basisNumber; if(atomNumber<0) return; if(basisNumber>=0) return; numberOfBasis = mpqcBasis.atoms[atomNumber].numberOfBasis; numberOfAtoms = mpqcBasis.numberOfAtoms; for(i=0;iatomNumber; basisNumber = data->basisNumber; if(atomNumber<0) return; if(basisNumber>=0) return; t =g_strdup_printf(format,mpqcBasis.atoms[atomNumber].symbol); w = Continue_YesNo(deleteOneAtom, NULL,t); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(SetWinDlg)); } /********************************************************************************/ static void newAtom() { gint atomNumber; gint basisNumber; gint numberOfAtoms; MPQCAtom* atoms; gchar* symbol = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry))); gboolean* expandeds; gint i; GtkTreeIter node; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); DataMPQCTree* data = NULL; if(atoi(selectedRow)<0) return; if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); atomNumber = -1; basisNumber = -1; if(data) { atomNumber = data->atomNumber; basisNumber = data->basisNumber; } if(strlen(symbol)<=0) return; numberOfAtoms = mpqcBasis.numberOfAtoms; atoms = mpqcBasis.atoms; for(i=0;i=0) { MPQCAtom t = mpqcBasis.atoms[numberOfAtoms-1]; for(i=numberOfAtoms-1;i>atomNumber;i--) mpqcBasis.atoms[i] = mpqcBasis.atoms[i-1]; mpqcBasis.atoms[atomNumber] = t; } expandeds = getExpandInfo(); freeDataMPQCTree(); rafreshTreeView(); setExpandeds(expandeds,selectedRow); if(expandeds) g_free(expandeds); } /********************************************************************************/ static void setAtom(GtkWidget *w,gpointer data) { gtk_entry_set_text(GTK_ENTRY(Entry),(char *)data); } /********************************************************************************/ static void selectAtom(GtkWidget *w,gpointer entry0) { GtkWidget* Table; GtkWidget* button; GtkWidget* frame; GtkWidget* FenetreTable; guint i; guint j; GtkStyle *button_style; GtkStyle *style; gchar*** Symb = get_periodic_table(); FenetreTable = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(FenetreTable),TRUE); gtk_window_set_title(GTK_WINDOW(FenetreTable),_("Select your atom")); gtk_window_set_default_size (GTK_WINDOW(FenetreTable),(gint)(ScreenWidth*0.5),(gint)(ScreenHeight*0.4)); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_container_add(GTK_CONTAINER(FenetreTable),frame); gtk_widget_show (frame); Table = gtk_table_new(PERIODIC_TABLE_N_ROWS-1,PERIODIC_TABLE_N_COLUMNS,TRUE); gtk_container_add(GTK_CONTAINER(frame),Table); button_style = gtk_widget_get_style(FenetreTable); for ( i = 0;iatomNumber; basisNumber = data->basisNumber; sprintf(title,_("New Atom")); WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),title); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(SetWinDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); Entry = create_label_entry(hbox,_(" Atom Symbol : "),-1,-1); gtk_entry_set_text(GTK_ENTRY(Entry),"H"); gtk_editable_set_editable((GtkEditable*) Entry,FALSE); Button = gtk_button_new_with_label(_(" Set ")); gtk_box_pack_start (GTK_BOX(hbox), Button, TRUE, TRUE, 5); g_signal_connect(G_OBJECT(Button), "clicked", (GCallback)selectAtom,Entry); gtk_widget_realize(WinDlg); Button = create_button(WinDlg,_("Cancel")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,_("OK")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)newAtom,GTK_OBJECT(WinDlg)); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /********************************************************************************/ static void newBasis() { gint atomNumber; gint basisNumber; gint numberOfBasis; MPQCOneBasis* basis; gchar* basisName = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryBasisName))); gboolean* expandeds; gint i; GtkTreeIter node; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); DataMPQCTree* data = NULL; if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); if(!data) return; atomNumber = data->atomNumber; basisNumber = data->basisNumber; if(atomNumber<0) return; delete_first_spaces(basisName); delete_last_spaces(basisName); if(strlen(basisName)<=0) return; numberOfBasis = mpqcBasis.atoms[atomNumber].numberOfBasis; basis = mpqcBasis.atoms[atomNumber].basis; for(i=0;i=0) { MPQCOneBasis t = mpqcBasis.atoms[atomNumber].basis[numberOfBasis-1]; for(i=numberOfBasis-1;i>basisNumber;i--) mpqcBasis.atoms[atomNumber].basis[i] = mpqcBasis.atoms[atomNumber].basis[i-1]; mpqcBasis.atoms[atomNumber].basis[basisNumber] = t; } expandeds = getExpandInfo(); freeDataMPQCTree(); rafreshTreeView(); setExpandeds(expandeds,selectedRow); if(expandeds) g_free(expandeds); } /********************************************************************************/ static void newBasisDlg() { GtkWidget *WinDlg; GtkWidget *Button; GtkWidget *frame; GtkWidget *vboxframe; gint atomNumber; gint basisNumber; gchar title[BSIZE]; GtkWidget *table = NULL; GtkWidget *label = NULL; gushort i; GtkTreeIter node; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); DataMPQCTree* data = NULL; if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); if(!data) return; atomNumber = data->atomNumber; basisNumber = data->basisNumber; if(atomNumber<0 ) return; sprintf(title,_("New Basis for %s atom :"),mpqcBasis.atoms[atomNumber].symbol); WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),title); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(SetWinDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(4,3,FALSE); gtk_box_pack_start (GTK_BOX (vboxframe), table, TRUE, TRUE, 0); i = 0; label = gtk_label_new(_(" Basis Name ")); add_widget_table(table, label, i, 0); label = gtk_label_new(" : "); add_widget_table(table, label, i, 1); EntryBasisName = gtk_entry_new(); add_widget_table(table, EntryBasisName, i, 2); gtk_widget_realize(WinDlg); Button = create_button(WinDlg,_("Cancel")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,_("OK")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)newBasis,GTK_OBJECT(WinDlg)); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /********************************************************************************/ static void editBasis() { gint atomNumber; gint basisNumber; MPQCOneBasis* basis; gchar* basisName = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryBasisName))); gboolean* expandeds; GtkTreeIter node; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); DataMPQCTree* data = NULL; if(atoi(selectedRow)<0) return; if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); if(!data) return; atomNumber = data->atomNumber; basisNumber = data->basisNumber; if(atomNumber<0) return; if(basisNumber<0) return; delete_first_spaces(basisName); delete_last_spaces(basisName); if(strlen(basisName)<=0) return; basis = mpqcBasis.atoms[atomNumber].basis; if(basis[basisNumber].basisName) g_free(basis[basisNumber].basisName); basis[basisNumber].basisName = basisName; mpqcBasis.atoms[atomNumber].basis = basis; expandeds = getExpandInfo(); freeDataMPQCTree(); rafreshTreeView(); setExpandeds(expandeds,selectedRow); if(expandeds) g_free(expandeds); } /********************************************************************************/ static void editBasisDlg() { GtkWidget *WinDlg; GtkWidget *Button; GtkWidget *frame; GtkWidget *vboxframe; gint atomNumber; gint basisNumber; gchar title[BSIZE]; GtkWidget *table = NULL; GtkWidget *label = NULL; gushort i; GtkTreeIter node; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); DataMPQCTree* data = NULL; if(atoi(selectedRow)<0) return; if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return; gtk_tree_model_get (model, &node, LIST_DATA, &data, -1); if(!data) return; atomNumber = data->atomNumber; basisNumber = data->basisNumber; if(atomNumber<0 ) return; sprintf(title,_("Edit Basis for %s atom :"),mpqcBasis.atoms[atomNumber].symbol); WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),title); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(SetWinDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(4,3,FALSE); gtk_box_pack_start (GTK_BOX (vboxframe), table, TRUE, TRUE, 0); i = 0; label = gtk_label_new(_(" Basis Name ")); add_widget_table(table, label, i, 0); label = gtk_label_new(" : "); add_widget_table(table, label, i, 1); EntryBasisName = gtk_entry_new(); if(!strstr(mpqcBasis.atoms[atomNumber].basis[basisNumber].basisName,"UNK")) gtk_entry_set_text(GTK_ENTRY(EntryBasisName),mpqcBasis.atoms[atomNumber].basis[basisNumber].basisName); add_widget_table(table, EntryBasisName, i, 2); gtk_widget_realize(WinDlg); Button = create_button(WinDlg,_("Cancel")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,_("OK")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)editBasis,GTK_OBJECT(WinDlg)); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /*******************************************************************************************************/ static void addFeuille(GtkTreeIter *parent, MPQCOneBasis* mpqcOneBasis, gint atomNumber, gint basisNumber) { GtkTreeIter feuille; gchar* texts[lengthList]; DataMPQCTree* dataTree; gint i; GtkTreeModel *model; GtkTreeStore *store; model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); store = GTK_TREE_STORE (model); texts[0] = g_strdup(" "); texts[1] = g_strdup(mpqcOneBasis->basisName); dataTree = newDataMPQCTree(atomNumber,basisNumber); gtk_tree_store_append(store, &feuille, parent); gtk_tree_store_set (store, &feuille, LIST_ATOM_SYMBOL, texts[0], -1); gtk_tree_store_set (store, &feuille, LIST_BASIS_NAME, texts[1], -1); gtk_tree_store_set (store, &feuille, LIST_DATA, dataTree, -1); for(i=0;i200) return; mpqcBasis.numberOfAtoms = natoms; mpqcBasis.atoms = g_malloc(natoms*sizeof(MPQCAtom)); for(i=0;i #include #include "../../Config.h" #include "../Common/Global.h" #include "../MPQC/MPQCTypes.h" #include "../MPQC/MPQCGlobal.h" #include "../MPQC/MPQCLib.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Utils/GabeditTextEdit.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" /************************************************************************************************************/ void initMPQCBasis() { mpqcBasis.name = g_strdup("3-21G"); mpqcBasis.molecule = g_strdup("$:molecule"); mpqcBasis.numberOfBasisTypes=0; mpqcBasis.basisNames = NULL; } /************************************************************************************************************/ void freeMPQCBasis() { if(mpqcBasis.name ) g_free(mpqcBasis.name); mpqcBasis.name = NULL; if(mpqcBasis.molecule ) g_free(mpqcBasis.molecule); mpqcBasis.molecule = NULL; if(mpqcBasis.basisNames) { gint i; for(i=0;isymbol); atom++; } if(atomsList) basisList = getMPQCBasisListOfAtoms(atomsList,message); if(!basisList) basisList = g_list_append(basisList, _("Sorry, I can not obtain one type of bases for all atoms of your molecule")); g_list_free(atomsList); gtk_combo_box_entry_set_popdown_strings( comboBasis, basisList); g_free(message); } /************************************************************************************************************/ static void changedEntryBasis(GtkWidget *entry, gpointer data) { G_CONST_RETURN gchar* entryText = NULL; if(!GTK_IS_WIDGET(entry)) return; entryText = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(entryText)<1)return; if(mpqcBasis.name) g_free(mpqcBasis.name); mpqcBasis.name=g_strdup(entryText); } /************************************************************************************************************/ static void changedEntryBasisGuess(GtkWidget *entry, gpointer data) { G_CONST_RETURN gchar* entryText = NULL; if(!GTK_IS_WIDGET(entry)) return; entryText = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(entryText)<1)return; if(mpqcGuessWaveFunction.basis) g_free(mpqcGuessWaveFunction.basis); mpqcGuessWaveFunction.basis=g_strdup(entryText); } /************************************************************************************************************/ static void changedEntryAuxBasis(GtkWidget *entry, gpointer data) { G_CONST_RETURN gchar* entryText = NULL; if(!GTK_IS_WIDGET(entry)) return; entryText = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(entryText)<1)return; if(mpqcMole.auxBasisName) g_free(mpqcMole.auxBasisName); mpqcMole.auxBasisName=g_strdup(entryText); } /***********************************************************************************************/ static GtkWidget* addComboListToATable(GtkWidget* table, gchar** list, gint nlist, gint i, gint j, gint k) { GtkWidget *entry = NULL; GtkWidget *combo = NULL; combo = create_combo_box_entry(list, nlist, TRUE, -1, -1); gtk_table_attach(GTK_TABLE(table),combo,j,j+k,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); entry = GTK_BIN (combo)->child; g_object_set_data(G_OBJECT (entry), "Combo",combo); return entry; } /***********************************************************************************************/ void addMPQCBasisToTable(GtkWidget *table, gint i) { GtkWidget* entryBasis = NULL; GtkWidget* comboBasis = NULL; gint nlistBasis = 1; gchar* listBasis[] = {" "}; add_label_table(table,_("Basis"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryBasis = addComboListToATable(table, listBasis, nlistBasis, i, 2, 1); comboBasis = g_object_get_data(G_OBJECT (entryBasis), "Combo"); gtk_widget_set_sensitive(entryBasis, FALSE); g_signal_connect(G_OBJECT(entryBasis),"changed", G_CALLBACK(changedEntryBasis),NULL); setComboBasis(comboBasis); } /***********************************************************************************************/ void addMPQCBasisGuessToTable(GtkWidget *table, gint i) { GtkWidget* entryBasisGuess = NULL; GtkWidget* comboBasisGuess = NULL; gint nlistBasis = 1; gchar* listBasis[] = {" "}; add_label_table(table,_("Basis"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryBasisGuess = addComboListToATable(table, listBasis, nlistBasis, i, 2, 1); comboBasisGuess = g_object_get_data(G_OBJECT (entryBasisGuess), "Combo"); gtk_widget_set_sensitive(entryBasisGuess, FALSE); g_signal_connect(G_OBJECT(entryBasisGuess),"changed", G_CALLBACK(changedEntryBasisGuess),NULL); setComboBasis(comboBasisGuess); } /***********************************************************************************************/ void addMPQCAuxBasisToTable(GtkWidget *table, gint i, GtkWidget* comboMethod) { GtkWidget* entryAuxBasis = NULL; GtkWidget* comboAuxBasis = NULL; GtkWidget* label = NULL; gint nlistAuxBasis = 1; gchar* listAuxBasis[] = {" "}; GtkWidget* entryMethod = NULL; if(GTK_IS_COMBO_BOX(comboMethod)) entryMethod = GTK_BIN(comboMethod)->child; label = add_label_table(table,_("Auxiliary basis"),(gushort)i,0); if(entryMethod) g_object_set_data(G_OBJECT (entryMethod), "LabelAuxBasis1", label); label = add_label_table(table,":",(gushort)i,1); if(entryMethod) g_object_set_data(G_OBJECT (entryMethod), "LabelAuxBasis2", label); entryAuxBasis = addComboListToATable(table, listAuxBasis, nlistAuxBasis, i, 2, 1); comboAuxBasis = g_object_get_data(G_OBJECT (entryAuxBasis), "Combo"); gtk_widget_set_sensitive(entryAuxBasis, FALSE); if(entryMethod) g_object_set_data(G_OBJECT (entryMethod), "ComboAuxBasis", comboAuxBasis); g_signal_connect(G_OBJECT(entryAuxBasis),"changed", G_CALLBACK(changedEntryAuxBasis),NULL); setComboBasis(comboAuxBasis); } /***********************************************************************************************/ static void putMPQCBasisInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"%c Basis set specification\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"basis: (\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"\tmolecule = %s\n", mpqcBasis.molecule); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,"\tname = \"%s\"\n", mpqcBasis.name); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); sprintf(buffer,")\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &mpqcColorFore.keyWord, &mpqcColorBack.keyWord, buffer, -1); sprintf(buffer,"%c----------------------------------------------------------------\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } /************************************************************************************************************/ void putMPQCBasisInfoInTextEditor() { putMPQCBasisInTextEditor(); } GabeditSrc250/src/MPQC/Dep.mk0000644000175100017510000001175213130664665016100 0ustar allouchealloucheMPQC.o: MPQC.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../MPQC/MPQCTypes.h \ ../MPQC/MPQCGlobal.h ../MPQC/MPQCMolecule.h ../MPQC/MPQCMole.h \ ../MPQC/MPQCGuessWaveFunction.h ../MPQC/MPQCMpqc.h ../MPQC/MPQCBasis.h \ ../MPQC/MPQCFunctionals.h ../MPQC/MPQCOptimization.h \ ../MPQC/MPQCProperties.h ../Utils/UtilsInterface.h \ ../Geometry/GeomGlobal.h ../Geometry/InterfaceGeom.h ../Utils/Utils.h \ ../Utils/AtomsProp.h ../Utils/Constants.h ../Utils/GabeditTextEdit.h MPQCMolecule.o: MPQCMolecule.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../MPQC/MPQCTypes.h \ ../MPQC/MPQCGlobal.h ../Geometry/GeomGlobal.h \ ../Geometry/GeomConversion.h ../Geometry/GeomXYZ.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/Constants.h \ ../Utils/GabeditTextEdit.h ../Geometry/InterfaceGeom.h \ ../Common/Windows.h ../Utils/AtomsProp.h ../Symmetry/MoleculeSymmetry.h \ ../Symmetry/MoleculeSymmetryInterface.h MPQCMole.o: MPQCMole.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../MPQC/MPQCTypes.h \ ../MPQC/MPQCGlobal.h ../MPQC/MPQCBasis.h ../MPQC/MPQCFunctionals.h \ ../Geometry/GeomGlobal.h ../Geometry/GeomConversion.h \ ../Geometry/GeomXYZ.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/Constants.h \ ../Geometry/InterfaceGeom.h ../Common/Windows.h ../Utils/AtomsProp.h \ ../Utils/GabeditTextEdit.h ../Symmetry/MoleculeSymmetry.h \ ../Symmetry/MoleculeSymmetryInterface.h MPQCGuessWaveFunction.o: MPQCGuessWaveFunction.c ../../Config.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../MPQC/MPQCTypes.h \ ../MPQC/MPQCGlobal.h ../MPQC/MPQCBasis.h ../Geometry/GeomGlobal.h \ ../Geometry/GeomConversion.h ../Geometry/GeomXYZ.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/Constants.h \ ../Geometry/InterfaceGeom.h ../Common/Windows.h ../Utils/AtomsProp.h \ ../Utils/GabeditTextEdit.h ../Symmetry/MoleculeSymmetry.h \ ../Symmetry/MoleculeSymmetryInterface.h MPQCMpqc.o: MPQCMpqc.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../MPQC/MPQCTypes.h \ ../MPQC/MPQCGlobal.h ../MPQC/MPQCProperties.h ../Geometry/GeomGlobal.h \ ../Geometry/GeomConversion.h ../Geometry/GeomXYZ.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/Constants.h \ ../Geometry/InterfaceGeom.h ../Common/Windows.h ../Utils/AtomsProp.h \ ../Utils/GabeditTextEdit.h ../Symmetry/MoleculeSymmetry.h \ ../Symmetry/MoleculeSymmetryInterface.h MPQCBasis.o: MPQCBasis.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../MPQC/MPQCTypes.h \ ../MPQC/MPQCGlobal.h ../MPQC/MPQCLib.h ../Geometry/GeomGlobal.h \ ../Geometry/GeomConversion.h ../Geometry/GeomXYZ.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/Constants.h \ ../Geometry/InterfaceGeom.h ../Common/Windows.h ../Utils/AtomsProp.h \ ../Utils/GabeditTextEdit.h ../Symmetry/MoleculeSymmetry.h \ ../Symmetry/MoleculeSymmetryInterface.h MPQCLib.o: MPQCLib.c ../../Config.h ../Common/GabeditType.h \ ../Utils/Utils.h ../Utils/Constants.h ../MPQC/MPQCLib.h MPQCBasisLibrary.o: MPQCBasisLibrary.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../MPQC/MPQCLib.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/AtomsProp.h ../Utils/Constants.h \ ../MPQC/MPQCBasisLibrary.h ../Common/StockIcons.h MPQCFunctionals.o: MPQCFunctionals.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../MPQC/MPQCTypes.h \ ../MPQC/MPQCGlobal.h ../Utils/UtilsInterface.h ../Utils/Constants.h MPQCOptimization.o: MPQCOptimization.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../MPQC/MPQCTypes.h \ ../MPQC/MPQCGlobal.h ../Utils/Utils.h ../Utils/UtilsInterface.h \ ../Utils/Constants.h ../Utils/GabeditTextEdit.h MPQCProperties.o: MPQCProperties.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../MPQC/MPQCTypes.h \ ../MPQC/MPQCGlobal.h ../MPQC/MPQCBasis.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/Constants.h \ ../Utils/GabeditTextEdit.h ../Common/Windows.h GabeditSrc250/src/MPQC/MPQCFunctionals.h0000644000175100017510000000043013130665225020136 0ustar alloucheallouche #ifndef __GABEDIT_MPQCFUNCTIONALS_H__ #define __GABEDIT_MPQCFUNCTIONALS_H__ void initMPQCFunctionals(); void freeMPQCFunctionals(); void initMPQCStdFunctionals(); void freeMPQCStdFunctionals(); void mpqcSumDensityFunctionalWindow(); #endif /* __GABEDIT_MPQCFUNCTIONALS_H__ */ GabeditSrc250/src/MPQC/MPQCBasisLibrary.h0000644000175100017510000000126113130665225020242 0ustar alloucheallouche #ifndef __GABEDIT_MPQCBASISLIBRARY_H__ #define __GABEDIT_MPQCBASISLIBRARY_H__ typedef struct _MPQCBasis MPQCBasis; typedef struct _MPQCAtom MPQCAtom; typedef struct _MPQCOneBasis MPQCOneBasis; /************************************/ struct _MPQCOneBasis { gchar* basisName; }; /************************************/ struct _MPQCAtom { gchar* symbol; gint numberOfBasis; MPQCOneBasis* basis; }; /************************************/ struct _MPQCBasis { gint numberOfAtoms; MPQCAtom* atoms; }; void get_molcas_basis_list(gchar* Symb,gchar* outfile,gchar* errfile); void setMPQCBasisDlg(); void loadMPQCBasis(); void saveMPQCBasis(); #endif /* __GABEDIT_MPQCBASISLIBRARY_H__ */ GabeditSrc250/src/MPQC/MPQCGuessWaveFunction.h0000644000175100017510000000045013130665225021272 0ustar alloucheallouche #ifndef __GABEDIT_MPQCGUESSWAVEFUNCTION_H__ #define __GABEDIT_MPQCGUESSWAVEFUNCTION_H__ void initMPQCGuessWaveFunction(); void freeMPQCGuessWaveFunction(); void createMPQCGuess(GtkWidget *box); void putMPQCGuessWaveFunctionInfoInTextEditor(); #endif /* __GABEDIT_MPQCGUESSWAVEFUNCTION_H__ */ GabeditSrc250/src/MPQC/MPQCLib.c0000644000175100017510000010720613130665225016363 0ustar alloucheallouche/* MPQCLib.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include "../Common/GabeditType.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../MPQC/MPQCLib.h" /********************************************************************************/ GList* getMPQCBasisList(gchar* Symb, gchar* message) { GList *glist = NULL; gchar *filename = g_strdup_printf("%s%smpqcBasis",gabedit_directory(), G_DIR_SEPARATOR_S); gchar* basisName= NULL; gchar symb[6]; gint nbas = 0; gint n = 0; gint j; gchar* t = NULL; gchar* dump = NULL; gint k; FILE* fin = FOpen(filename,"r"); if(!fin) { create_mpqc_basis_file(); fin = FOpen(filename,"r"); } if(!fin) { sprintf(message,_("Sorry the mpqcBasis is corrupted.\nPlease reinstall gabedit\n")); return NULL; } t = g_malloc(BSIZE*sizeof(gchar)); dump = g_malloc(BSIZE*sizeof(gchar)); basisName= g_malloc(BSIZE*sizeof(gchar)); { char* e = fgets(t,BSIZE,fin);} /* number of atoms */ while(!feof(fin)) { if(!fgets(t,BSIZE,fin)) break; if(strstr(t,"Atom") && strstr(t,Symb) && sscanf(t,"%s %s",dump,symb)==2 && strcmp(Symb,symb) ==0 ) { if(!fgets(t,BSIZE,fin)) break; sscanf(t,"%d",&nbas); for(j=0;jdata,symb)==0) { Ok = TRUE; break; } l = l->next; } } if(Ok) { if(!fgets(t,BSIZE,fin)) break; sscanf(t,"%d",&nbas); if(nbas>0) { if(first) { list1 = g_malloc(nbas*sizeof(gchar*)); n1 = nbas; } else { list2 = g_malloc(nbas*sizeof(gchar*)); n2 = nbas; } } for(j=0;j0) first = FALSE; } else { if(!fgets(t,BSIZE,fin)) break; sscanf(t,"%d",&nbas); for(j=0;j #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/InterfaceGeom.h" #include "../Geometry/MenuToolBarGeom.h" static GtkWidget* Entrys[3]; static GtkWidget* FenetreTable = NULL; /********************************************************************************/ static void build_ring_molecule(GtkWidget *w,gpointer data) { G_CONST_RETURN gchar *t; gint Nc; gdouble Distance; gdouble Ro; G_CONST_RETURN gchar* Symb; gint j; gdouble angle; gdouble X; gdouble Y; Symb = gtk_entry_get_text(GTK_ENTRY(Entrys[0])); t = gtk_entry_get_text(GTK_ENTRY(Entrys[1])); Nc = atoi(t); t = gtk_entry_get_text(GTK_ENTRY(Entrys[2])); Distance = atof(t); unselect_all_atoms(); if(Units==0) Distance *= ANG_TO_BOHR; if(Nc<1) return; angle = (360.0/Nc)*DEG_TO_RAD; Ro = sqrt(2*(1-cos(angle) )); Ro = Distance/Ro; init_dipole(); if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(VariablesXYZ); NcentersXYZ = Nc; GeomXYZ=g_malloc(NcentersXYZ*sizeof(GeomXYZAtomDef)); for(j=0;jvbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); /* The Atom Entry */ hbox=create_hbox_false(vboxframe); Entrys[0] = create_label_entry(hbox,_("Atom : "),(gint)(ScreenHeight*0.2),(gint)(ScreenHeight*0.15)); gtk_entry_set_text(GTK_ENTRY(Entrys[0]),Symb); gtk_editable_set_editable((GtkEditable*) Entrys[0],FALSE); Button = gtk_button_new_with_label(_(" Set ")); gtk_box_pack_start (GTK_BOX(hbox), Button, TRUE, TRUE, 5); g_signal_connect(G_OBJECT(Button), "clicked", (GCallback)select_atom,Entrys[0]); /* The Number of atoms Entry */ tlist = g_malloc(nlist*sizeof(gchar*)); for(i=0;iaction_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked",(GCallback)delete_child,GTK_OBJECT(Dlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); /* The "OK" button */ Button = create_button(Dlg,_("OK")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)build_ring_molecule,NULL); g_signal_connect_swapped(G_OBJECT(Button), "clicked",(GCallback)delete_child,GTK_OBJECT(Dlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(GTK_DIALOG(Dlg)->vbox); gtk_widget_show_all(GTK_DIALOG(Dlg)->action_area); gtk_widget_show_now(Dlg); fit_windows_position(GeomDlg, Dlg); } GabeditSrc250/src/Geometry/AxesGeomGL.c0000644000175100017510000004716613130665226020173 0ustar alloucheallouche/* AxesGeomGL.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #ifdef DRAWGEOMGL #include #include #include #include #include "../../gl2ps/gl2ps.h" #include #include #include "../Common/Global.h" #include "../Common/GabeditType.h" #include "../Utils/Constants.h" #include "../Files/GabeditFileChooser.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/UtilsGL.h" #include "../Geometry/DrawGeomGL.h" #include "../Common/Windows.h" /************************************************************************/ typedef struct _AxesDef { gboolean show; gboolean negative; gdouble origin[3]; gdouble radius; gdouble scal; gdouble xColor[3]; gdouble yColor[3]; gdouble zColor[3]; }AxesDef; static AxesDef axes; /************************************************************************/ void getAxesGeomProperties(gboolean* show, gboolean* negative, gdouble origin[], gdouble* radius, gdouble* scal, gdouble xColor[], gdouble yColor[], gdouble zColor[]) { gint i; *show = axes.show; *negative = axes.negative; for(i=0;i<3;i++) origin [i] = axes.origin[i]; *radius = axes.radius; *scal = axes.scal; for(i=0;i<3;i++) { xColor[i] = axes.xColor[i]; yColor[i] = axes.yColor[i]; zColor[i] = axes.zColor[i]; } } /************************************************************************/ void initAxesGeom() { axes.show = FALSE; axes.negative = FALSE; axes.origin[0] = 0; axes.origin[1] = 0; axes.origin[2] = 0; axes.radius = 0.25; axes.scal = 5; axes.xColor[0] = 1.0; axes.xColor[1] = 0.0; axes.xColor[2] = 0.0; axes.yColor[0] = 0.0; axes.yColor[1] = 1.0; axes.yColor[2] = 0.0; axes.zColor[0] = 0.0; axes.zColor[1] = 1.0; axes.zColor[2] = 1.0; } /******************************************************************/ void save_axes_geom_properties() { gchar *axesfile; FILE *file; axesfile = g_strdup_printf("%s%saxesGeom",gabedit_directory(),G_DIR_SEPARATOR_S); file = fopen(axesfile, "w"); fprintf(file,"%d\n",axes.show); fprintf(file,"%d\n",axes.negative); fprintf(file,"%lf %lf %lf\n",axes.origin[0],axes.origin[1],axes.origin[2]); fprintf(file,"%lf\n",axes.radius); fprintf(file,"%lf\n",axes.scal); fprintf(file,"%lf %lf %lf\n",axes.xColor[0],axes.xColor[1],axes.xColor[2]); fprintf(file,"%lf %lf %lf\n",axes.yColor[0],axes.yColor[1],axes.yColor[2]); fprintf(file,"%lf %lf %lf\n",axes.zColor[0],axes.zColor[1],axes.zColor[2]); fclose(file); g_free(axesfile); } /******************************************************************/ void read_axes_geom_properties() { gchar *axesfile; FILE *file; gint n; initAxesGeom(); axesfile = g_strdup_printf("%s%saxesGeom",gabedit_directory(),G_DIR_SEPARATOR_S); file = fopen(axesfile, "rb"); if(!file) return; n = fscanf(file,"%d\n",&axes.show); if(n != 1) { initAxesGeom(); return ; fclose(file); g_free(axesfile);} n = fscanf(file,"%d\n",&axes.negative); if(n != 1) { initAxesGeom(); return ; fclose(file); g_free(axesfile);} n = fscanf(file,"%lf %lf %lf\n",&axes.origin[0],&axes.origin[1],&axes.origin[2]); if(n != 3) { initAxesGeom(); return ; fclose(file); g_free(axesfile);} n = fscanf(file,"%lf\n",&axes.radius); if(n != 1) { initAxesGeom(); return ; fclose(file); g_free(axesfile);} n = fscanf(file,"%lf\n",&axes.scal); if(n != 1) { initAxesGeom(); return ; fclose(file); g_free(axesfile);} n = fscanf(file,"%lf %lf %lf\n",&axes.xColor[0],&axes.xColor[1],&axes.xColor[2]); if(n != 3) { initAxesGeom(); return ; fclose(file); g_free(axesfile);} n = fscanf(file,"%lf %lf %lf\n",&axes.yColor[0],&axes.yColor[1],&axes.yColor[2]); if(n != 3) { initAxesGeom(); return ; fclose(file); g_free(axesfile);} n = fscanf(file,"%lf %lf %lf\n",&axes.zColor[0],&axes.zColor[1],&axes.zColor[2]); if(n != 3) { initAxesGeom(); return ; fclose(file); g_free(axesfile);} fclose(file); g_free(axesfile); } /******************************************************************/ static void set_axes(GtkWidget* fp,gpointer data) { GtkWidget** entrys = (GtkWidget**)data; gdouble *vX = g_object_get_data(G_OBJECT (fp), "XColor"); gdouble *vY = g_object_get_data(G_OBJECT (fp), "YColor"); gdouble *vZ = g_object_get_data(G_OBJECT (fp), "ZColor"); gboolean *negative = g_object_get_data(G_OBJECT (fp), "Negative"); G_CONST_RETURN gchar* tentry; gint i; tentry = gtk_entry_get_text(GTK_ENTRY(entrys[0])); axes.scal = atof(tentry); if(axes.scal<1e-6) axes.scal = 1.0; for(i=1;i<4;i++) { tentry = gtk_entry_get_text(GTK_ENTRY(entrys[i])); axes.origin[i-1] = atof(tentry)*ANG_TO_BOHR; } tentry = gtk_entry_get_text(GTK_ENTRY(entrys[4])); axes.radius = atof(tentry)*ANG_TO_BOHR; if(axes.radius<1e-6) axes.radius = 0.1; for(i=0;i<3;i++) { axes.xColor[i] = vX[i]; axes.yColor[i] = vY[i]; axes.zColor[i] = vZ[i]; } axes.negative = *negative; rafresh_drawing(); } /******************************************************************/ static void set_negative(GtkWidget* button,gpointer data) { gboolean *negative= g_object_get_data(G_OBJECT (button), "Negative"); *negative = !(*negative); } /******************************************************************/ static void set_axes_color(GtkColorSelection *Sel,gpointer *d) { GdkColor color; gdouble *v = g_object_get_data(G_OBJECT (Sel), "Color"); gtk_color_selection_get_current_color(Sel, &color); v[0] =color.red/65535.0; v[1] =color.green/65535.0; v[2] =color.blue/65535.0; } /******************************************************************/ static void set_axes_button_color(GtkObject *button,gpointer *data) { GtkStyle *style = g_object_get_data(G_OBJECT (button), "Style"); gdouble *v = g_object_get_data(G_OBJECT (button), "Color"); GtkWidget *OldButton = g_object_get_data(G_OBJECT (button), "Button"); style = gtk_style_copy(style); style->bg[0].red=(gushort)(v[0]*65535.0); style->bg[0].green=(gushort)(v[1]*65535.0); style->bg[0].blue=(gushort)(v[2]*65535.0); gtk_widget_set_style(OldButton, style); } /******************************************************************/ static void open_color_dlg_axes(GtkWidget *button,gpointer data) { GtkColorSelectionDialog *colorDlg; GtkStyle* style = g_object_get_data(G_OBJECT (button), "Style"); GtkWidget *win = g_object_get_data(G_OBJECT (button), "Win"); gdouble* v = g_object_get_data(G_OBJECT (button), "Color");; GdkColor color; colorDlg = (GtkColorSelectionDialog *)gtk_color_selection_dialog_new("Set Axes Color"); color.red = (gushort)(v[0]*65535); color.green = (gushort)(v[1]*65535); color.blue = (gushort)(v[2]*65535); gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (colorDlg->colorsel), &color); gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (colorDlg->colorsel), &color); gtk_window_set_transient_for(GTK_WINDOW(colorDlg),GTK_WINDOW(win)); gtk_window_set_position(GTK_WINDOW(colorDlg),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (colorDlg), TRUE); g_signal_connect(G_OBJECT(colorDlg), "delete_event",(GCallback)destroy_button_windows,NULL); g_signal_connect(G_OBJECT(colorDlg), "delete_event",G_CALLBACK(gtk_widget_destroy),NULL); g_object_set_data(G_OBJECT (colorDlg->colorsel), "Color", v); gtk_widget_hide(colorDlg->help_button); g_signal_connect_swapped(G_OBJECT(colorDlg->ok_button),"clicked", (GCallback)set_axes_color,GTK_OBJECT(colorDlg->colorsel)); g_object_set_data(G_OBJECT (colorDlg->ok_button), "Color", v); g_object_set_data(G_OBJECT (colorDlg->ok_button), "Button", button); g_object_set_data(G_OBJECT (colorDlg->ok_button), "Style", style); g_signal_connect(G_OBJECT(colorDlg->ok_button),"clicked", (GCallback)set_axes_button_color,NULL); g_signal_connect_swapped(G_OBJECT(colorDlg->ok_button), "clicked", (GCallback)destroy_button_windows,GTK_OBJECT(colorDlg)); g_signal_connect_swapped(G_OBJECT(colorDlg->ok_button),"clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(colorDlg)); g_signal_connect_swapped(G_OBJECT(colorDlg->cancel_button), "clicked", (GCallback)destroy_button_windows,GTK_OBJECT(colorDlg)); g_signal_connect_swapped(G_OBJECT(colorDlg->cancel_button),"clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(colorDlg)); add_button_windows(" Set Color ",GTK_WIDGET(colorDlg)); gtk_widget_show(GTK_WIDGET(colorDlg)); } /*********************************************************************/ void set_axes_geom_dialog () { GtkWidget *fp; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox; GtkWidget *button; GtkStyle *style; static GtkWidget* entrys[5]; static gdouble vX[3]; static gdouble vY[3]; static gdouble vZ[3]; static gboolean negative; gchar* tlabel[5]={"Factor","X Origin (Ang)","Y Origin (Ang)","Z Origin (Ang)","Radius"}; gint i; GtkWidget* table; fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(fp),TRUE); gtk_window_set_title(GTK_WINDOW(fp),_("Set the axes parameters")); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(GeomDlg)); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)gtk_widget_destroy,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(9,3,FALSE); gtk_box_pack_start(GTK_BOX(vboxframe), table,TRUE,TRUE,0); for(i=0;i<5;i++) { add_label_table(table,tlabel[i],(gushort)i,0); add_label_table(table," : ",(gushort)i,1); entrys[i] = gtk_entry_new (); gtk_table_attach(GTK_TABLE(table),entrys[i],2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); if(i!=0) { if(i==4) { gchar* t = g_strdup_printf("%lf",axes.radius*BOHR_TO_ANG); gtk_entry_set_text(GTK_ENTRY(entrys[i]),t); g_free(t); } else { gchar* t = g_strdup_printf("%lf",axes.origin[i-1]*BOHR_TO_ANG); gtk_entry_set_text(GTK_ENTRY(entrys[i]),t); g_free(t); } } else { gchar* t = g_strdup_printf("%lf",axes.scal); gtk_entry_set_text(GTK_ENTRY(entrys[i]),t); g_free(t); } } i = 5; add_label_table(table,_("Color for the X axes"),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); style = gtk_widget_get_style(fp); button = gtk_button_new_with_label(" "); style = gtk_style_copy(style); style->bg[0].red=axes.xColor[0]*65535.0; style->bg[0].green=axes.xColor[1]*65535.0; style->bg[0].blue=axes.xColor[2]*65535.0; vX[0] = axes.xColor[0]; vX[1] = axes.xColor[1]; vX[2] = axes.xColor[2]; gtk_widget_set_style(button, style ); gtk_table_attach(GTK_TABLE(table),button,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_widget_show (button); g_object_set_data(G_OBJECT (button), "Style", style); g_object_set_data(G_OBJECT (button), "Win", fp); g_object_set_data(G_OBJECT (button), "Color", vX); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)open_color_dlg_axes, NULL); i++; add_label_table(table,_("Color for the Y axes"),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); style = gtk_widget_get_style(fp); button = gtk_button_new_with_label(" "); style = gtk_style_copy(style); style->bg[0].red=axes.yColor[0]*65535.0; style->bg[0].green=axes.yColor[1]*65535.0; style->bg[0].blue=axes.yColor[2]*65535.0; vY[0] = axes.yColor[0]; vY[1] = axes.yColor[1]; vY[2] = axes.yColor[2]; gtk_widget_set_style(button, style ); gtk_table_attach(GTK_TABLE(table),button,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_widget_show (button); g_object_set_data(G_OBJECT (button), "Style", style); g_object_set_data(G_OBJECT (button), "Win", fp); g_object_set_data(G_OBJECT (button), "Color", vY); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)open_color_dlg_axes, NULL); hbox = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vboxframe), hbox, FALSE, FALSE, 1); i++; add_label_table(table,_("Color for the Z axes"),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); style = gtk_widget_get_style(fp); button = gtk_button_new_with_label(" "); style = gtk_style_copy(style); style->bg[0].red=axes.zColor[0]*65535.0; style->bg[0].green=axes.zColor[1]*65535.0; style->bg[0].blue=axes.zColor[2]*65535.0; vZ[0] = axes.zColor[0]; vZ[1] = axes.zColor[1]; vZ[2] = axes.zColor[2]; gtk_widget_set_style(button, style ); gtk_widget_set_style(button, style ); gtk_table_attach(GTK_TABLE(table),button,2,2+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_widget_show (button); g_object_set_data(G_OBJECT (button), "Style", style); g_object_set_data(G_OBJECT (button), "Win", fp); g_object_set_data(G_OBJECT (button), "Color", vZ); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)open_color_dlg_axes, NULL); i++; button = gtk_check_button_new_with_label (_("Show the negative part of the axes")); negative = axes.negative; g_object_set_data(G_OBJECT (button), "Negative", &negative); gtk_table_attach(GTK_TABLE(table),button,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 3,3); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), negative); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)set_negative, NULL); hbox = create_hbox(vboxall); button = create_button(GeomDlg,"Close"); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(fp)); gtk_widget_show (button); button = create_button(GeomDlg,"Apply"); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_object_set_data(G_OBJECT (button), "XColor", vX); g_object_set_data(G_OBJECT (button), "YColor", vY); g_object_set_data(G_OBJECT (button), "ZColor", vZ); g_object_set_data(G_OBJECT (button), "Negative", &negative); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(set_axes),(gpointer)entrys); gtk_widget_show (button); button = create_button(GeomDlg,"OK"); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_object_set_data(G_OBJECT (button), "XColor", vX); g_object_set_data(G_OBJECT (button), "YColor", vY); g_object_set_data(G_OBJECT (button), "ZColor", vZ); g_object_set_data(G_OBJECT (button), "Negative", &negative); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(set_axes),(gpointer)entrys); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(fp)); gtk_widget_show (button); gtk_widget_show_all(fp); } /************************************************************************/ gboolean testShowAxesGeom() { return axes.show; } /************************************************************************/ void showAxesGeom() { axes.show = TRUE; } /************************************************************************/ void hideAxesGeom() { axes.show = FALSE; } /************************************************************************/ void gl_build_axes(gdouble* position) { V4d specular = {1.0f,1.0f,1.0f,1.0f}; V4d xDiffuse = {1.0f,1.0f,1.0f,1.0f}; V4d xAmbiant = {1.0f,1.0f,1.0f,1.0f}; V4d yDiffuse = {1.0f,1.0f,1.0f,1.0f}; V4d yAmbiant = {1.0f,1.0f,1.0f,1.0f}; V4d zDiffuse = {1.0f,1.0f,1.0f,1.0f}; V4d zAmbiant = {1.0f,1.0f,1.0f,1.0f}; V3d vectorX = {1,0,0}; V3d vectorY = {0,1,0}; V3d vectorZ = {0,0,1}; GLdouble radius = axes.radius; gint i; V3d origin; for(i=0;i<3;i++) { xDiffuse[i] = axes.xColor[i]; yDiffuse[i] = axes.yColor[i]; zDiffuse[i] = axes.zColor[i]; xAmbiant[i] = xDiffuse[i]/10; yAmbiant[i] = yDiffuse[i]/10; zAmbiant[i] = zDiffuse[i]/10; } xDiffuse[3] = 1; yDiffuse[3] = 1; zDiffuse[3] = 1; for(i=0;i<3;i++) { vectorX[i] *= axes.scal; vectorY[i] *= axes.scal; vectorZ[i] *= axes.scal; } if(position) for(i=0;i<3;i++) origin[i] = position[i]; else for(i=0;i<3;i++) origin[i] = axes.origin[i]; Draw_Arrow(vectorX, radius, origin, specular, xDiffuse, xAmbiant, axes.negative); Draw_Arrow(vectorY, radius, origin, specular, yDiffuse, yAmbiant, axes.negative); Draw_Arrow(vectorZ, radius, origin, specular, zDiffuse, zAmbiant, axes.negative); } /*********************************************************************************************/ void showLabelAxesGeom(gboolean ortho, gdouble* position) { gint i; V4d color = {0.8,0.8,0.8,1.0 }; gchar buffer[BSIZE]; gboolean show; gboolean negative; gdouble origin[3]; gdouble radius; gdouble scal; gdouble xColor[3]; gdouble yColor[3]; gdouble zColor[3]; gdouble vectorX[] = {1,0,0}; gdouble vectorY[] = {0,1,0}; gdouble vectorZ[] = {0,0,1}; if(!testShowAxesGeom()) return; getAxesGeomProperties(&show, &negative, origin, &radius, &scal, xColor, yColor, zColor); if(position) { for(i=0;i<3;i++) origin[i]=position[i]; } for(i=0;i<3;i++) { vectorX[i] *= scal; vectorY[i] *= scal; vectorZ[i] *= scal; } for(i=0;i<3;i++) { vectorX[i] += origin[i]; vectorY[i] += origin[i]; vectorZ[i] += origin[i]; } color[0] = FontsStyleLabel.TextColor.red/65535.0; color[1] = FontsStyleLabel.TextColor.green/65535.0; color[2] = FontsStyleLabel.TextColor.blue/65535.0; glInitFontsUsing(FontsStyleLabel.fontname); if(radius<0.1) radius = 0.1; glDisable ( GL_LIGHTING ) ; glColor4dv(color); if(ortho) { sprintf(buffer,"X"); glPrintOrtho(vectorX[0], vectorX[1], vectorX[2], buffer,TRUE,TRUE); sprintf(buffer,"Y"); glPrintOrtho(vectorY[0], vectorY[1], vectorY[2], buffer,TRUE,TRUE); sprintf(buffer,"Z"); glPrintOrtho(vectorZ[0], vectorZ[1], vectorZ[2], buffer,TRUE,TRUE); } else { /* sprintf(buffer,"X"); glPrint(vectorX[0], vectorX[1], vectorX[2], buffer); sprintf(buffer,"Y"); glPrint(vectorY[0], vectorY[1], vectorY[2], buffer); sprintf(buffer,"Z"); glPrint(vectorZ[0], vectorZ[1], vectorZ[2], buffer); */ sprintf(buffer,"X"); glPrintScale(vectorX[0], vectorX[1], vectorX[2], 1.2*radius, buffer); sprintf(buffer,"Y"); glPrintScale(vectorY[0], vectorY[1], vectorY[2], 1.2*radius, buffer); sprintf(buffer,"Z"); glPrintScale(vectorZ[0], vectorZ[1], vectorZ[2], 1.2*radius, buffer); } glEnable ( GL_LIGHTING ) ; } #endif GabeditSrc250/src/Geometry/FragmentsPPD.h0000644000175100017510000000023013130665226020514 0ustar alloucheallouche #ifndef __GABEDIT_FRAGMENTSPPD_H__ #define __GABEDIT_FRAGMENTSPPD_H__ Fragment GetFragmentPPD(gchar* Name); #endif /* __GABEDIT_FRAGMENTSPPD_H__ */ GabeditSrc250/src/Geometry/GeomConversion.c0000644000175100017510000012604513130665226021167 0ustar alloucheallouche/* GeomConversion.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Common/Help.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Geometry/GeomGlobal.h" #include "../Utils/AtomsProp.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Files/ListeFiles.h" #include "../Common/Windows.h" #include "../Geometry/InterfaceGeom.h" #include "../Gaussian/Gaussian.h" #include "../Molpro/Molpro.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/GeomZmatrix.h" /*****************************************************************************/ typedef struct _GXYZ { gchar *Symb; gchar *mmType; gchar *pdbType; gchar *Residue; gchar *Layer; gchar *Charge; gboolean Variable; Point P; gint* typeConnections; }GXYZ; static GXYZ* gxyz = NULL; /* gemetry in xyz mod with dummy atoms*/ static gint Nat = 0; static gboolean *inStack = NULL; static gboolean done = FALSE; static gint bonds = 0; static gint ringSize = 3; /*****************************************************************************/ void free_gxyz() { gint i; if(!gxyz) return; for(i=0;i=Nat || j >=Nat || i<0 || j<0) { return -1000; } serr = get_distance_points(gxyz[i].P,gxyz[j].P,FALSE); res = atof(serr)/BOHR_TO_ANG; g_free(serr); return res; } /*****************************************************************************/ static gdouble get_angle_xyz(gint i,gint j,gint l) { Point A; Point B; Point V1; Point V2; guint k; if(i>=Nat || j >=Nat || l >=Nat || i<0 || j<0 || l<0) { return -1000; } A = gxyz[i].P; B = gxyz[j].P; for(k=0;k<3;k++) V1.C[k] = A.C[k] - B.C[k]; A = gxyz[l].P; for(k=0;k<3;k++) V2.C[k] = A.C[k] - B.C[k]; return atof(get_angle_vectors(V1,V2)); } /*****************************************************************************/ static gdouble get_dihedral_xyz(gint i,gint j,gint l,gint m) { Point A; Point B; Point V1; Point V2; Point W1; Point W2; guint k; gdouble angle; gdouble dihsgn; static gdouble precision = 1e-4; W1 = gxyz[i].P; W2 = gxyz[j].P; for(k=0;k<3;k++) V1.C[k] = W1.C[k] - W2.C[k]; W1 = gxyz[l].P; for(k=0;k<3;k++) V2.C[k] = W1.C[k] - W2.C[k]; A = get_produit_vectoriel(V1,V2); if(A.C[0]*A.C[0]+A.C[1]*A.C[1]+A.C[2]*A.C[2]0) dihsgn = -1.0e0; else dihsgn = 1.0e0; } angle *=dihsgn; return angle; } /*****************************************************************************/ Point get_X_position(gint i,gint j) { Point V1; Point V2; Point W1; Point W2; gint ii; gint jj; gint k; gdouble n; W1 = gxyz[i].P; W2 = gxyz[j].P; for(k=0;k<3;k++) V1.C[k] = W1.C[k] - W2.C[k]; /* Normalize Vector*/ n = 0.0; for(ii=0;ii<3;ii++) n += V1.C[ii]*V1.C[ii]; n = sqrt(n); for(ii=0;ii<3;ii++) V1.C[ii] /= n; jj = 0; for(ii=1;ii<3;ii++) if(fabs(V1.C[ii])>fabs(V1.C[jj])) jj = ii; V2.C[jj] = 0.0; V2.C[(jj+1)%3] = 1; V2.C[(jj+2)%3] = 1; /* Debug("j=%d\n",j);*/ n = 0.0; for(ii=0;ii<3;ii++) n += V1.C[ii]*V2.C[ii]; if(V1.C[jj] != 0) V2.C[jj] = -n/V1.C[jj]; else { for(ii=0;ii<3;ii++) V2.C[ii] = 1; V2.C[(jj+1)%3] = 1.0; } /* Normalize V[0]*/ n = 0.0; for(ii=0;ii<3;ii++) n += V2.C[ii]*V2.C[ii]; n = sqrt(n); for(ii=0;ii<3;ii++) V2.C[ii] /= n; for(k=0;k<3;k++) V2.C[k] += W1.C[k]; return V2; } /*****************************************************************************/ void sort_gxyz() { gint i; gint j; gint k; GXYZ t; if (Nat <= 0) return ; for (i = 1; i <(gint)Nat-1; i++) { k = i; for (j = i+1; j after;i--) gxyz[j].typeConnections[i]=gxyz[j].typeConnections[i-1]; gxyz[j].typeConnections[after]=0; } for (i = Nat-1; i >after;i--) { gxyz[i] = gxyz[i-1]; } gxyz[after].Symb = g_strdup("X"); gxyz[after].mmType = g_strdup("X"); gxyz[after].pdbType = g_strdup("X"); gxyz[after].Residue = g_strdup("DUM"); gxyz[after].Layer = g_strdup(" "); gxyz[after].Charge = g_strdup("0.0"); gxyz[after].Variable=FALSE; for (i = 0; i<3;i++) gxyz[after].P.C[i] = P.C[i]; gxyz[after].typeConnections=g_malloc(Nat*sizeof(gint)); for (i = 0; i 0;i--) { if(strstr(GeomXYZ[i].Symb,"X")) continue; k = -1; for(j=i-1;j>=0;j--) if(strstr(GeomXYZ[j].Symb,"X")) { k = j; break; } if(k!=-1) { t = GeomXYZ[i]; GeomXYZ[i] = GeomXYZ[k]; GeomXYZ[k] = t; } else break; } for(i=0;i<(gint)NcentersXYZ;i++) { if(strstr(GeomXYZ[i].Symb,"X")) { ndummy++; if(GeomXYZ[i].Symb) g_free(GeomXYZ[i].Symb); if(GeomXYZ[i].mmType) g_free(GeomXYZ[i].mmType); if(GeomXYZ[i].pdbType) g_free(GeomXYZ[i].pdbType); if(GeomXYZ[i].Layer) g_free(GeomXYZ[i].Layer); if(GeomXYZ[i].X) g_free(GeomXYZ[i].X); if(GeomXYZ[i].Y) g_free(GeomXYZ[i].Y); if(GeomXYZ[i].Z) g_free(GeomXYZ[i].Z); } } if(ndummy>0) { /*Debug("ndummys = %d\n",ndummy);*/ NcentersXYZ -= ndummy; GeomXYZ = g_realloc(GeomXYZ,NcentersXYZ*sizeof(GeomXYZAtomDef)); } } /*****************************************************************************/ gboolean zmat_to_xyz() { gdouble cosph,sinph,costh,sinth,coskh,sinkh; gdouble cosa,sina,cosd,sind; gdouble dist,angle,dihed; gdouble xpd,ypd,zpd,xqd,yqd,zqd; gdouble xa,ya,za,xb,yb,zb; gdouble rbc,xyb,yza,temp; gdouble xpa,ypa,zqa; gdouble xd,yd,zd; gboolean flag; gint i, na, nb, nc; GeomXYZAtomDef* GeomXYZtemp = NULL; if (NcentersZmat <= 0) return( FALSE ); GeomXYZtemp=g_malloc(NcentersZmat*sizeof(GeomXYZAtomDef)); for (i = 0; i <(gint)NcentersZmat; i++) { GeomXYZtemp[i].Nentry = NUMBER_LIST_XYZ; GeomXYZtemp[i].Symb = NULL; GeomXYZtemp[i].mmType = NULL; GeomXYZtemp[i].pdbType = NULL; GeomXYZtemp[i].Residue = NULL; GeomXYZtemp[i].X = NULL; GeomXYZtemp[i].Y = NULL; GeomXYZtemp[i].Z = NULL; GeomXYZtemp[i].Charge = NULL; GeomXYZtemp[i].Layer = NULL; GeomXYZtemp[i].typeConnections = NULL; } /* Atom #1 */ GeomXYZtemp[0].Nentry = NUMBER_LIST_XYZ; GeomXYZtemp[0].Symb = g_strdup(Geom[0].Symb); GeomXYZtemp[0].mmType = g_strdup(Geom[0].mmType); GeomXYZtemp[0].pdbType = g_strdup(Geom[0].pdbType); GeomXYZtemp[0].Residue = g_strdup(Geom[0].Residue); GeomXYZtemp[0].X = g_strdup("0.0"); GeomXYZtemp[0].Y = g_strdup("0.0"); GeomXYZtemp[0].Z = g_strdup("0.0"); GeomXYZtemp[0].Charge = g_strdup("0.0"); GeomXYZtemp[0].Layer = g_strdup(Geom[0].Layer); if(NcentersZmat==1) { FreeGeomXYZ(GeomXYZ, VariablesXYZ, NcentersXYZ, NVariablesXYZ); NcentersXYZ = NcentersZmat; GeomXYZ = GeomXYZtemp; NVariablesXYZ =0; VariablesXYZ = NULL; reset_connections_XYZ(); return TRUE; } /* Atom #2 */ GeomXYZtemp[1].Nentry = NUMBER_LIST_XYZ; GeomXYZtemp[1].Symb = g_strdup(Geom[1].Symb); GeomXYZtemp[1].mmType = g_strdup(Geom[1].mmType); GeomXYZtemp[1].pdbType = g_strdup(Geom[1].pdbType); GeomXYZtemp[1].Residue = g_strdup(Geom[1].Residue); GeomXYZtemp[1].Charge = g_strdup(Geom[1].Charge); if(!test(Geom[1].R)) GeomXYZtemp[1].X = g_strdup_printf("%f",get_value_variableZmat(Geom[1].R)); else GeomXYZtemp[1].X = g_strdup(Geom[1].R); GeomXYZtemp[1].Y = g_strdup("0.0"); GeomXYZtemp[1].Z =g_strdup("0.0"); GeomXYZtemp[1].Layer = g_strdup(Geom[1].Layer); if(NcentersZmat==2) { FreeGeomXYZ(GeomXYZ, VariablesXYZ, NcentersXYZ, NVariablesXYZ); NcentersXYZ = NcentersZmat; GeomXYZ = GeomXYZtemp; NVariablesXYZ =0; VariablesXYZ = NULL; if(!test(Geom[1].R)) set_variable_one_atom_in_GeomXYZ(1); reset_connections_XYZ(); return TRUE; } /* Atom #3 */ GeomXYZtemp[2].Nentry = NUMBER_LIST_XYZ; GeomXYZtemp[2].Symb = g_strdup(Geom[2].Symb); GeomXYZtemp[2].mmType = g_strdup(Geom[2].mmType); GeomXYZtemp[2].pdbType = g_strdup(Geom[2].pdbType); GeomXYZtemp[2].Residue = g_strdup(Geom[2].Residue); GeomXYZtemp[2].Charge = g_strdup(Geom[2].Charge); if(!test(Geom[2].R)) dist = get_value_variableZmat(Geom[2].R); else dist = atof(Geom[2].R); if(!test(Geom[2].Angle)) angle = get_value_variableZmat(Geom[2].Angle); else angle = atof(Geom[2].Angle); GeomXYZtemp[1].Y = g_strdup("0.0"); GeomXYZtemp[1].Z =g_strdup("0.0"); GeomXYZtemp[1].Layer = g_strdup(Geom[1].Layer); if(!test(Geom[2].R)) dist = get_value_variableZmat(Geom[2].R); else dist = atof(Geom[2].R); if(!test(Geom[2].Angle)) angle = get_value_variableZmat(Geom[2].Angle); else angle = atof(Geom[2].Angle); angle *= DEG_TO_RAD; cosa = cos(angle); sina = sin(angle); if( atoi (Geom[2].NAngle) == 2 ) GeomXYZtemp[2].X = g_strdup_printf("%f",atof(GeomXYZtemp[0].X) + cosa*dist); else GeomXYZtemp[2].X = g_strdup_printf("%f",atof(GeomXYZtemp[1].X) - cosa*dist); GeomXYZtemp[2].Y = g_strdup_printf("%f",sina*dist); GeomXYZtemp[2].Z = g_strdup("0.0"); GeomXYZtemp[2].Layer = g_strdup(Geom[2].Layer); if(NcentersZmat==3) { FreeGeomXYZ(GeomXYZ, VariablesXYZ, NcentersXYZ, NVariablesXYZ); NcentersXYZ = NcentersZmat; GeomXYZ = GeomXYZtemp; NVariablesXYZ =0; VariablesXYZ = NULL; if(!test(Geom[1].R)) set_variable_one_atom_in_GeomXYZ(1); if(!test(Geom[2].R) || !test(Geom[2].Angle) ) set_variable_one_atom_in_GeomXYZ(2); reset_connections_XYZ(); return TRUE; } for (i = 3; i <(gint)NcentersZmat; i++) { if(!test(Geom[i].R)) dist = get_value_variableZmat(Geom[i].R); else dist = atof(Geom[i].R); if(!test(Geom[i].Angle)) angle = get_value_variableZmat(Geom[i].Angle); else angle = atof(Geom[i].Angle) ; if(!test(Geom[i].Dihedral)) dihed = get_value_variableZmat(Geom[i].Dihedral); else dihed = atof(Geom[i].Dihedral) ; angle *= DEG_TO_RAD; dihed *= DEG_TO_RAD; na = atoi(Geom[i].NR)-1; nb = atoi(Geom[i].NAngle)-1; nc = atoi(Geom[i].NDihedral)-1; xb = atof(GeomXYZtemp[nb].X) - atof(GeomXYZtemp[na].X); yb = atof(GeomXYZtemp[nb].Y) - atof(GeomXYZtemp[na].Y); zb = atof(GeomXYZtemp[nb].Z) - atof(GeomXYZtemp[na].Z); rbc = xb*xb + yb*yb + zb*zb; if( rbc < 0.0001 ) { FreeGeomXYZ(GeomXYZtemp, NULL, NcentersZmat, 0); return( FALSE ); } rbc = 1.0/sqrt(rbc); cosa = cos(angle); sina = sin(angle); if( fabs(cosa) >= 0.999999 ) { /* Colinear */ temp = dist*rbc*cosa; GeomXYZtemp[i].X = g_strdup_printf("%f",atof(GeomXYZtemp[na].X) + temp*xb); GeomXYZtemp[i].Y = g_strdup_printf("%f",atof(GeomXYZtemp[na].Y) + temp*yb); GeomXYZtemp[i].Z = g_strdup_printf("%f",atof(GeomXYZtemp[na].Z) + temp*zb); } else { xa = atof(GeomXYZtemp[nc].X) - atof(GeomXYZtemp[na].X); ya = atof(GeomXYZtemp[nc].Y) - atof(GeomXYZtemp[na].Y); za = atof(GeomXYZtemp[nc].Z) - atof(GeomXYZtemp[na].Z); sind = -sin(dihed); cosd = cos(dihed); xd = dist*cosa; yd = dist*sina*cosd; zd = dist*sina*sind; xyb = sqrt(xb*xb + yb*yb); if( xyb < 0.1 ) { /* Rotate about y-axis! */ temp = za; za = -xa; xa = temp; temp = zb; zb = -xb; xb = temp; xyb = sqrt(xb*xb + yb*yb); flag = TRUE; } else flag = FALSE; costh = xb/xyb; sinth = yb/xyb; xpa = costh*xa + sinth*ya; ypa = costh*ya - sinth*xa; sinph = zb*rbc; cosph = sqrt(1.0 - sinph*sinph); zqa = cosph*za - sinph*xpa; yza = sqrt(ypa*ypa + zqa*zqa); if( yza > 1.0E-10 ) { coskh = ypa/yza; sinkh = zqa/yza; ypd = coskh*yd - sinkh*zd; zpd = coskh*zd + sinkh*yd; } else { /* coskh = 1.0; */ /* sinkh = 0.0; */ ypd = yd; zpd = zd; } xpd = cosph*xd - sinph*zpd; zqd = cosph*zpd + sinph*xd; xqd = costh*xpd - sinth*ypd; yqd = costh*ypd + sinth*xpd; if( flag ) { /* Rotate about y-axis! */ GeomXYZtemp[i].X = g_strdup_printf("%f",atof(GeomXYZtemp[na].X) - zqd); GeomXYZtemp[i].Y = g_strdup_printf("%f",atof(GeomXYZtemp[na].Y) + yqd); GeomXYZtemp[i].Z = g_strdup_printf("%f",atof(GeomXYZtemp[na].Z) + xqd); } else { GeomXYZtemp[i].X =g_strdup_printf("%f",atof(GeomXYZtemp[na].X) + xqd); GeomXYZtemp[i].Y =g_strdup_printf("%f",atof(GeomXYZtemp[na].Y) + yqd); GeomXYZtemp[i].Z =g_strdup_printf("%f",atof(GeomXYZtemp[na].Z) + zqd); } } } for(i=3;i<(gint)NcentersZmat;i++) { GeomXYZtemp[i].Nentry = NUMBER_LIST_XYZ; GeomXYZtemp[i].Symb = g_strdup(Geom[i].Symb); GeomXYZtemp[i].mmType = g_strdup(Geom[i].mmType); GeomXYZtemp[i].pdbType = g_strdup(Geom[i].pdbType); GeomXYZtemp[i].Residue = g_strdup(Geom[i].Residue); GeomXYZtemp[i].Charge = g_strdup(Geom[i].Charge); GeomXYZtemp[i].Layer = g_strdup(Geom[i].Layer); } FreeGeomXYZ(GeomXYZ, VariablesXYZ, NcentersXYZ, NVariablesXYZ); NcentersXYZ = NcentersZmat; GeomXYZ = GeomXYZtemp; NVariablesXYZ =0; VariablesXYZ = NULL; if(!test(Geom[1].R)) set_variable_one_atom_in_GeomXYZ(1); if(!test(Geom[2].R) || !test(Geom[2].Angle) ) set_variable_one_atom_in_GeomXYZ(2); for(i=3;i<(gint)NcentersZmat;i++) { if(!test(Geom[i].R) || !test(Geom[i].Angle) || !test(Geom[i].Dihedral) ) set_variable_one_atom_in_GeomXYZ(i); } reset_connections_XYZ(); return TRUE; } /*****************************************************************************/ static void rafresh_interface() { if(GeomIsOpen) { if(MethodeGeom==GEOM_IS_XYZ) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); else create_geom_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); } else { switch(iprogram) { case PROG_IS_MOLPRO : insert_molpro(2); break; case PROG_IS_GAUSS : insert_gaussian(2); break; default : edit_geometry(); } } if(GeomDrawingArea != NULL) rafresh_drawing(); } /*****************************************************************************/ void conversion_zmat_to_xyz() { if(!zmat_to_xyz()) { printf(_("I cannot convert the zmat to xyz\n")); return; } delete_dummy_atoms(); MethodeGeom = GEOM_IS_XYZ; rafresh_interface(); } /*****************************************************************************/ gboolean xyz_to_zmat() { gint i; GeomAtomDef* Geomtemp = NULL; set_gxyz(); if (Nat <= 0) return FALSE ; insert_dummy_atoms_gxyz(); Geomtemp=g_malloc(Nat*sizeof(GeomAtomDef)); for (i = 0; i <(gint)Nat; i++) { Geomtemp[i].Nentry = NUMBER_LIST_ZMATRIX; Geomtemp[i].Symb = NULL; Geomtemp[i].mmType = NULL; Geomtemp[i].pdbType = NULL; Geomtemp[i].Residue = NULL; Geomtemp[i].R = NULL; Geomtemp[i].NR = NULL; Geomtemp[i].Angle = NULL; Geomtemp[i].NAngle = NULL; Geomtemp[i].Dihedral = NULL; Geomtemp[i].NDihedral = NULL; Geomtemp[i].Charge = NULL; Geomtemp[i].Layer = NULL; } /* Atom #1 */ Geomtemp[0].Nentry = NUMBER_ENTRY_0; Geomtemp[0].Symb = g_strdup(gxyz[0].Symb); Geomtemp[0].mmType = g_strdup(gxyz[0].mmType); Geomtemp[0].pdbType = g_strdup(gxyz[0].pdbType); Geomtemp[0].Residue = g_strdup(gxyz[0].Residue); Geomtemp[0].Charge = g_strdup(gxyz[0].Charge); Geomtemp[0].Layer = g_strdup(gxyz[0].Layer); if(Nat==1) { freeGeom(); freeVariables(); NcentersZmat = Nat; freeGeomXYZ(); freeVariablesXYZ(); Geom = Geomtemp; NVariables =0; Variables = NULL; if(gxyz[0].Variable) set_variable_one_atom_in_GeomZMatrix(0); return TRUE; } /* Atom #2 */ Geomtemp[1].Nentry = NUMBER_ENTRY_R; Geomtemp[1].Symb = g_strdup(gxyz[1].Symb); Geomtemp[1].mmType = g_strdup(gxyz[1].mmType); Geomtemp[1].pdbType = g_strdup(gxyz[1].pdbType); Geomtemp[1].Residue = g_strdup(gxyz[1].Residue); Geomtemp[1].Charge = g_strdup(gxyz[1].Charge); Geomtemp[1].Layer = g_strdup(gxyz[1].Layer); Geomtemp[1].R = g_strdup_printf("%f",get_distance_xyz(0,1)); Geomtemp[1].NR = g_strdup_printf("%d",1); if(Nat==2) { freeGeom(); freeVariables(); NcentersZmat = Nat; freeGeomXYZ(); freeVariablesXYZ(); Geom = Geomtemp; NVariables =0; Variables = NULL; for (i = 0; i <(gint)Nat; i++) if(gxyz[i].Variable) set_variable_one_atom_in_GeomZMatrix(i); return TRUE; } /* Atom #3 */ Geomtemp[2].Nentry = NUMBER_ENTRY_ANGLE; Geomtemp[2].Symb = g_strdup(gxyz[2].Symb); Geomtemp[2].mmType = g_strdup(gxyz[2].mmType); Geomtemp[2].pdbType = g_strdup(gxyz[2].pdbType); Geomtemp[2].Residue = g_strdup(gxyz[2].Residue); Geomtemp[2].Charge = g_strdup(gxyz[2].Charge); Geomtemp[2].Layer = g_strdup(gxyz[2].Layer); Geomtemp[2].R = g_strdup_printf("%f",get_distance_xyz(1,2)); Geomtemp[2].NR = g_strdup_printf("%d",2); Geomtemp[2].Angle = g_strdup_printf("%f",get_angle_xyz(2,1,0)); Geomtemp[2].NAngle = g_strdup_printf("%d",1); if(Nat==3) { freeGeom(); freeVariables(); NcentersZmat = Nat; freeGeomXYZ(); freeVariablesXYZ(); Geom = Geomtemp; NVariables =0; Variables = NULL; for (i = 0; i <(gint)Nat; i++) if(gxyz[i].Variable) set_variable_one_atom_in_GeomZMatrix(i); return TRUE; } for (i = 3; i <(gint)Nat; i++) { Geomtemp[i].Nentry = NUMBER_ENTRY_DIHEDRAL; Geomtemp[i].Symb = g_strdup(gxyz[i].Symb); Geomtemp[i].mmType = g_strdup(gxyz[i].mmType); Geomtemp[i].pdbType = g_strdup(gxyz[i].pdbType); Geomtemp[i].Residue = g_strdup(gxyz[i].Residue); Geomtemp[i].Charge = g_strdup(gxyz[i].Charge); Geomtemp[i].Layer = g_strdup(gxyz[i].Layer); Geomtemp[i].R = g_strdup_printf("%f",get_distance_xyz(i-1,i)); Geomtemp[i].NR = g_strdup_printf("%d",i); Geomtemp[i].Angle = g_strdup_printf("%f",get_angle_xyz(i,i-1,i-2)); Geomtemp[i].NAngle = g_strdup_printf("%d",i-1); Geomtemp[i].Dihedral = g_strdup_printf("%f",get_dihedral_xyz(i,i-1,i-2,i-3)); Geomtemp[i].NDihedral = g_strdup_printf("%d",i-2); } freeGeom(); freeVariables(); NcentersZmat = Nat; freeGeomXYZ(); freeVariablesXYZ(); Geom = Geomtemp; NVariables =0; Variables = NULL; for (i = 0; i <(gint)Nat; i++) if(gxyz[i].Variable) set_variable_one_atom_in_GeomZMatrix(i); return TRUE; } /*****************************************************************************/ void conversion_xyz_to_zmat() { if(!xyz_to_zmat()) { Message(_("Sorry\nConversion is not possible"),_("Warning"),TRUE); return; } MethodeGeom = GEOM_IS_ZMAT; rafresh_interface(); } /*****************************************************************************/ static gint get_parent_upper_level(gint numAtom, gint* levels) { gint j; for (j = 0; j <(gint)Nat; j++) if(levels[j]==0 && gxyz[numAtom].typeConnections[j]>0) return j; return -1; } /*****************************************************************************/ static gint get_number_of_connections_to_upper_level(gint numAtom, gint* levels) { gint j; gint n = 0; for (j = 0; j <(gint)Nat; j++) if(levels[j]==0 && gxyz[numAtom].typeConnections[j]>0) n++; return n; } /*****************************************************************************/ /* static gboolean is_grand_parent_upper_level(gint numAtom, gint* levels) { gint j; for (j = 0; j <(gint)Nat; j++) if(levels[j]==0 && gxyz[numAtom].typeConnections[j]>0) { if(get_number_of_connections_to_upper_level(j, levels)>1) return TRUE; } return FALSE; } */ /*****************************************************************************/ static gint add_level_non_connected_atom(gint* levels, GList** lists, gint nLevels) { gint i; gint n = 0; for (i = 0; i <(gint)Nat; i++) { if(levels[i]>0) continue; n = get_number_of_connections_to_upper_level(i, levels); if(n==0) { levels[i] = nLevels+1; lists[nLevels] = g_list_append(lists[nLevels],GINT_TO_POINTER(-1)); /* the first is the grand parent */ lists[nLevels] = g_list_append(lists[nLevels],GINT_TO_POINTER(-1)); /* the second is the parent */ lists[nLevels] = g_list_append(lists[nLevels],GINT_TO_POINTER(i)); /* the first son */ return 1; } } return 0; } /*****************************************************************************/ static gint add_levels_connected_to_one_atom(gint* levels, GList** lists, gint nLevels, gint* nNewLevels) { gint i; gint n = 0; gint nAll = 0; gint nC = 0; gint nL = 0; gint* oneConnectedAtoms = NULL; gint* parents = NULL; if(Nat<1) return 0; oneConnectedAtoms = g_malloc(Nat*sizeof(gint)); parents = g_malloc(Nat*sizeof(gint)); for (i = 0; i <(gint)Nat; i++) { if(levels[i]>0) continue; n = get_number_of_connections_to_upper_level(i, levels); if(n==1) { oneConnectedAtoms[nC] = i; parents[nC] = get_parent_upper_level(i, levels); nC++; } } if(nC<1) { if(oneConnectedAtoms) g_free(oneConnectedAtoms); if(parents) g_free(parents); return 0; } /* sort by parents */ for (i = 0; i parents[k]) k = j; if(k!=i) { gint t; t = oneConnectedAtoms[i]; oneConnectedAtoms[i] = oneConnectedAtoms[k]; oneConnectedAtoms[k] = t; t = parents[i]; parents[i] = parents[k]; parents[k] = t; } } nL = nLevels; for (i = 0; i 2 ) && ( ringSize < 3 ) ) return TRUE; if ( bonds < ringSize ) { gint i; for (i = 0; i <(gint)Nat; i++) { if(i==currentAtom) continue; if(levels[i]!=0) continue; if(i==rootAtom && bonds<1) continue; if(gxyz[currentAtom].typeConnections[i]<1) continue; if ( ! ( inStack[i] ) ) { bonds++; done = inRing(i, rootAtom,levels); } if (done) return TRUE; } } inStack[currentAtom] = FALSE; bonds--; return FALSE; } /************************************************************************/ static gint* getRingAtoms() { gint i; gint n= 0; gint* ringAtoms = NULL; gint k; gint j; if(inStack && ringSize>1) { ringAtoms = g_malloc(ringSize*sizeof(gint)); for(i=0;iringSize) break; } } } if(ringAtoms) { for(i=1;i0) { k = j; break; } if(k!=(i+1)) { gint t = ringAtoms[i+1]; ringAtoms[i+1] = ringAtoms[k]; ringAtoms[k] = t; } } } return ringAtoms; } /********************************************************************************/ static gint* getListRingAtoms(gint i, gint j, gint* levels) { gint* num = NULL; gint n; gint nMax = 0; gint k; if(Nat <1) return NULL; for (k = 0; k <(gint)Nat; k++) if(levels[k]==0) nMax++; if(nMax <3) return NULL; for(n=2;n0) {j = k; break;} if(j<0) continue; gxyz[i].typeConnections[j]= 0; gxyz[j].typeConnections[i]= 0; numRing = getListRingAtoms( i, j, levels); gxyz[i].typeConnections[j]= 1; gxyz[j].typeConnections[i]= 1; if(!numRing) continue; parent = -1; for (k = 0; k <=ringSize; k++) { for (j = 0; j 0) { gint kp; for (kp = 0; kp <=ringSize; kp++) if(j==numRing[kp]) break; if(j==numRing[kp]) continue; parent = j; break; } if(parent>-1) { /* the first son of ring is connected to parent */ gint t = numRing[0]; numRing[0] = numRing[k]; numRing[k] = t; break; } } for (k = 0; k <=ringSize; k++) levels[numRing[k]] = nLevels+1; lists[nLevels] = g_list_append(lists[nLevels],GINT_TO_POINTER(-1)); /* the first is the grand parent */ lists[nLevels] = g_list_append(lists[nLevels],GINT_TO_POINTER(parent)); /* the second is the parent */ for (k = 0; k <=ringSize; k++) lists[nLevels] = g_list_append(lists[nLevels],GINT_TO_POINTER(numRing[k])); return ringSize+1; } } return 0; } /*****************************************************************************/ static GList* get_parent(GList* gp) { if(gp) return gp->next; else return NULL; } /*****************************************************************************/ static GList* get_first_son(GList* gp) { GList* p = get_parent(gp); if(p) return p->next; else return NULL; } /*****************************************************************************/ static gint build_parents(gint* levels, GList** lists, gint nLevels) { gint i,j,k; GList* l = NULL; GList* p = NULL; gdouble d = -1; gint im = -1; for (i = 0; i data)>-1) continue; l = p->next; if(!l) continue; j =GPOINTER_TO_INT(l->data); if(j<0 || j>Nat-1) continue; d = -1; for (k = 0; k data = GINT_TO_POINTER(im); } return 0; } /*****************************************************************************/ static gint build_grand_parents(gint* levels, GList** lists, gint nLevels) { gint i,j; GList* p = NULL; GList* gp = NULL; gint lj = -1; for (i = 0; i data)>-1) continue; p = gp->next; if(!p || GPOINTER_TO_INT(p->data)<0) continue; j =GPOINTER_TO_INT(p->data); lj = levels[j]; p = get_parent(lists[lj]); if(!p) continue; lists[i]->data = p->data; } return 0; } /*****************************************************************************/ static gint build_levels(gint* levels, GList** lists) { gint nLevels = 0; gint i; gint n = 0; gint nAll = 0; for (i = 0; i <(gint)Nat; i++) { n = add_level_non_connected_atom(levels, lists, nLevels); } for (i = 0; i <(gint)Nat; i++) { gint nL; n = add_level_non_connected_atom(levels, lists, nLevels); nAll += n; if(n>0) { nLevels++; if(nAll>=Nat) break; continue; } n = add_levels_connected_to_one_atom(levels, lists, nLevels, &nL); nAll += n; if(n>0) { nLevels+=nL; if(nAll>=Nat) break; continue; } n = add_level_ring(levels, lists, nLevels); nAll += n; if(n==0) { printf(_("Sorry I cannot compute the levels of groupes\n")); return 0; } nLevels++; if(nAll>=Nat) break; } /* for (i = 0; i next) printf("%d ",GPOINTER_TO_INT(l->data)); printf("\n\n"); } */ build_parents(levels, lists, nLevels); build_grand_parents(levels, lists, nLevels); /* printf("After build parents and grand parents\n"); for (i = 0; i next) printf("%d ",GPOINTER_TO_INT(l->data)); printf("\n\n"); } */ return nLevels; } /*****************************************************************************/ static gint build_list_of_atoms_by_level(gint* levels, GList** lists, gint nLevels, gint* atomNumbers) { gint i; GList* l = NULL; GList* son = NULL; gint nA = 0; for (i = 0; i =0; i--) { son = get_first_son(lists[i]); for(l=son;l!=NULL;l=l->next) { atomNumbers[nA]=GPOINTER_TO_INT(l->data); nA++; } } return nA; } /*****************************************************************************/ gint get_iop_nr(gint nL, gint I, gint* atomNumbersZ, GList** lists) { gint Io = -1; gdouble d=-1; static gdouble precision = 1e-1; GList* l; for(l=get_first_son(lists[nL]);l!=NULL;l=l->next) { gint J = GPOINTER_TO_INT(l->data); if(J==I) continue; if(atomNumbersZ[J]>=atomNumbersZ[I]) continue; d = get_distance_xyz(I,J); if(fabs(d)>precision) { Io = J; if(gxyz[I].typeConnections[J]>0) break; } } return Io; } /*****************************************************************************/ gint get_nr(gint i, gint* atomNumbers, gint* atomNumbersZ, gint* levels, GList** lists) { gint I = atomNumbers[i]; GList* p = get_parent(lists[levels[I]-1]); gint Ip = -1; if(p) Ip = GPOINTER_TO_INT(p->data); if(Ip<0) Ip = atomNumbers[i-1]; if(atomNumbersZ[Ip]>=atomNumbersZ[I]) { gint nL; for(nL=Nat-1;nL>levels[I]-1 ;nL--) { Ip = get_iop_nr( nL, I, atomNumbersZ, lists); if(Ip>-1) break; } } return Ip; } /*****************************************************************************/ gint get_iop_nangle(gint nL, gint I, gint IR, gint* atomNumbersZ, GList** lists) { gint Io = -1; gdouble angle=180; static gdouble precision = 1e-1; GList* l; for(l=get_first_son(lists[nL]);l!=NULL;l=l->next) { gint J = GPOINTER_TO_INT(l->data); if(J==I) continue; if(J==IR) continue; if(atomNumbersZ[J]>=atomNumbersZ[I]) continue; angle = get_angle_xyz(I,IR,J); if(fabs(angle-180)>precision &&fabs(angle)>precision) { Io = J; if(gxyz[IR].typeConnections[J]>0) break; } } return Io; } /*****************************************************************************/ gint get_nangle(gint i, gint* atomNumbers, gint* atomNumbersZ, gint* levels, GList** lists, gint IR) { gint I = atomNumbers[i]; gint Igp = -1; gint nL=levels[I]-1; Igp = get_iop_nangle( nL, I, IR, atomNumbersZ, lists); nL=levels[IR]-1; if(Igp<0) Igp = get_iop_nangle( nL, I, IR, atomNumbersZ, lists); if(Igp<0) for(nL=Nat-1;nL>levels[I]-1 ;nL--) { Igp = get_iop_nangle( nL, I, IR, atomNumbersZ, lists); if(Igp>-1) break; } if(Igp<0) { GList* gp = lists[levels[I]-1]; if(gp) Igp = GPOINTER_TO_INT(gp->data); if(Igp<0) Igp = atomNumbers[i-2]; if(IR == Igp) Igp = (IR+1)%i; if(I == Igp) Igp = (I+1)%i; } return Igp; } /*****************************************************************************/ gint get_iop_ndihedral(gint nL, gint I, gint IR, gint IAngle, gint* atomNumbersZ, GList** lists) { gint Io = -1; gdouble angle=180; static gdouble precision = 1e-1; GList* l; for(l=get_first_son(lists[nL]);l!=NULL;l=l->next) { gint J = GPOINTER_TO_INT(l->data); if(J==I) continue; if(J==IR) continue; if(J==IAngle) continue; if(atomNumbersZ[J]>=atomNumbersZ[I]) continue; angle = get_angle_xyz(IR,IAngle,J); if(fabs(angle-180)>precision &&fabs(angle)>precision) { Io = J; if(gxyz[IAngle].typeConnections[J]>0) break; } } return Io; } /*****************************************************************************/ gint get_ndihedral(gint i, gint* atomNumbers, gint* atomNumbersZ, gint* levels, GList** lists, gint IR, gint IAngle) { gint Id = -1; gint I = atomNumbers[i]; gint nL=levels[IR]-1; Id = get_iop_ndihedral( nL, I, IR, IAngle, atomNumbersZ, lists); if(Id<0) for(nL=Nat-1;nL>=0;nL--) { Id = get_iop_ndihedral( nL, I, IR, IAngle, atomNumbersZ, lists); if(Id>-1) break; } if(Id<0) { if(IR!=atomNumbers[i-1]) Id = atomNumbers[i-1]; else Id = atomNumbers[i-3]; } return Id; } /*****************************************************************************/ gboolean xyz_to_zmat_using_connections() { gint i; GeomAtomDef* Geomtemp = NULL; gint* levels = NULL; gint* atomNumbers = NULL; gint* atomNumbersZ = NULL; GList **lists=NULL; gint nLevels = 0; gint Ip,IpZ; gint Igp,IgpZ; gint Id,IdZ; gint nA; gint I; for(i=0;iNat) printf("Erreur Ipz>Nat"); if(IgpZ>Nat) printf("Erreur IgpZ>Nat"); Geomtemp[2].Nentry = NUMBER_ENTRY_ANGLE; Geomtemp[2].Symb = g_strdup(gxyz[I].Symb); Geomtemp[2].mmType = g_strdup(gxyz[I].mmType); Geomtemp[2].pdbType = g_strdup(gxyz[I].pdbType); Geomtemp[2].Residue = g_strdup(gxyz[I].Residue); Geomtemp[2].Charge = g_strdup(gxyz[I].Charge); Geomtemp[2].Layer = g_strdup(gxyz[I].Layer); Geomtemp[2].R = g_strdup_printf("%f",get_distance_xyz(I,Ip)); Geomtemp[2].NR = g_strdup_printf("%d",IpZ+1); Geomtemp[2].Angle = g_strdup_printf("%f",get_angle_xyz(I,Ip,Igp)); Geomtemp[2].NAngle = g_strdup_printf("%d",IgpZ+1); for (i = 3; i <(gint)Nat; i++) { I = atomNumbers[i]; Ip = get_nr(i, atomNumbers, atomNumbersZ, levels, lists); IpZ = atomNumbersZ[Ip]; Igp = get_nangle(i, atomNumbers, atomNumbersZ, levels, lists,Ip); IgpZ = atomNumbersZ[Igp]; Id = get_ndihedral( i, atomNumbers, atomNumbersZ, levels, lists, Ip, Igp); IdZ = atomNumbersZ[Id]; if(IdZ>Nat) printf("Erreur Idz>Nat"); if(IpZ>Nat) printf("Erreur Ipz>Nat"); if(IgpZ>Nat) printf("Erreur IgpZ>Nat"); Geomtemp[i].Nentry = NUMBER_ENTRY_DIHEDRAL; Geomtemp[i].Symb = g_strdup(gxyz[I].Symb); Geomtemp[i].mmType = g_strdup(gxyz[I].mmType); Geomtemp[i].pdbType = g_strdup(gxyz[I].pdbType); Geomtemp[i].Residue = g_strdup(gxyz[I].Residue); Geomtemp[i].Charge = g_strdup(gxyz[I].Charge); Geomtemp[i].Layer = g_strdup(gxyz[I].Layer); Geomtemp[i].R = g_strdup_printf("%f",get_distance_xyz(Ip,I)); Geomtemp[i].NR = g_strdup_printf("%d",IpZ+1); Geomtemp[i].Angle = g_strdup_printf("%f",get_angle_xyz(I,Ip,Igp)); Geomtemp[i].NAngle = g_strdup_printf("%d",IgpZ+1); Geomtemp[i].Dihedral = g_strdup_printf("%f",get_dihedral_xyz(I,Ip,Igp,Id)); Geomtemp[i].NDihedral = g_strdup_printf("%d",IdZ+1); } freeGeom(); freeVariables(); NcentersZmat = Nat; freeGeomXYZ(); freeVariablesXYZ(); Geom = Geomtemp; NVariables =0; Variables = NULL; for (i = 0; i <(gint)Nat; i++) if(gxyz[atomNumbers[i]].Variable) set_variable_one_atom_in_GeomZMatrix(i); if(levels) g_free(levels); if(atomNumbers) g_free(atomNumbers); if(atomNumbersZ) g_free(atomNumbersZ); if(lists) g_free(lists); return TRUE; } /*****************************************************************************/ void conversion_xyz_to_zmat_using_connections() { if(!xyz_to_zmat_using_connections()) { Message(_("Sorry\nConversion is not possible"),_("Warning"),TRUE); return; } MethodeGeom = GEOM_IS_ZMAT; rafresh_interface(); } GabeditSrc250/src/Geometry/BuildPolyNucleicAcid.c0000644000175100017510000023330313130665226022215 0ustar alloucheallouche/* BuildPolyNucleicAcid.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/InterfaceGeom.h" #include "../Geometry/FragmentsPNA.h" #include "../Geometry/RotFragments.h" #include "../Geometry/MenuToolBarGeom.h" #include "../Utils/Matrix3D.h" #include "../MolecularMechanics/PDBTemplate.h" void define_good_factor(); void create_GeomXYZ_from_draw_grometry(); gchar* tlabels[] = { "Tip","Inclination","Opening","Propeller twist", "Buckle","Twist","Roll","Tilt", "X-Displacement","Y-Displacement","Shear (Sx)", "Stretch (Sy)","Stagger (Sz)","Shift (Dx)", "Slide (Dy)","Rise (Dz)", "Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Chi" }; static gint numberSugarList = 10; static gchar* sugarList[] = { "C3'-endo","C4'-exo","O4'-endo","C1'-exo", "C2'-endo","C3'-exo","C4'-endo","O4'-exo", "C1'-endo","C2'-exo" }; static gchar* tbuttons[] = { "A - (T)","A - (U)","C - (G)","G - (C)", "T - (A)","U - (A)","5'-CAP","3'-CAP", "Custom", }; static gint numberDNATypeList = 4; static gchar* typeDNAList[] = { "ADE","CYT","GUA","THY" }; static gint numberRNATypeList = 16; static gchar* typeRNAList[] = { "ADE","CYT","GUA","URA","1MA","1MG","2MG","5MC", "7MG","H2U"," I ","M2G","OMC","OMG","PSU"," Y " }; static gint numberDNAFormList = 11; static gchar* formDNAList[] = { "a-form","b-form","b'-form","c-form","c'-form","c''-form", "d-form","e-form","t-form","z-form","custom" }; static gint numberRNAFormList = 3; static gchar* formRNAList[] = { "a-form","a'-form","custom" }; #define NENTRYS 23 typedef enum { E_TIP = 0, E_INCLINATION = 1, E_OPENNING = 2, E_PROPELLERTWIST = 3, E_BUCKLE = 4, E_TWIST = 5, E_ROLL = 6, E_TILT = 7, E_XDISPLACEMENT = 8, E_YDISPLACEMENT = 9, E_SHEARSX = 10, E_STRETCHSY = 11, E_STAGGERSZ = 12, E_SHIFTDX = 13, E_SLIDEDY = 14, E_RISEDZ = 15, E_ALPHA = 16, E_BETA = 17, E_GAMMA = 18, E_DELTA = 19, E_EPSILON = 20, E_ZETA = 21, E_CHI = 22, } EntryNumbers; static gchar* aformDNA[]={ "11.0","20.0","0.0","-8.3","-2.4","32.7","0.0","0.0", "-4.1","0.0","0.0","0.0","0.0","0.0","0.0","2.56", "130.15","-158.0","109.0","127.0","-59.05","130.15","-154.0" }; static gchar* aformRNA[]={ "0.0","17.5","0.0","0.0","0.0","32.7","0.0","0.0", "-4.4","0.0","0.0","0.0","0.0","0.0","0.0","2.8", "-160.9","-158.0","109.0","127.0","-133.4","-154.0","-158.0" }; static gchar* apformRNA[]={ "0.0","10.0","0.0","0.0","0.0","30.0","0.0","0.0", "-4.4","0.0","0.0","0.0","0.0","0.0","0.0","3.0", "-152.0","-158.0","109.0","127.0","-134.7","-157.4","-158.0", }; static gchar* bformDNA[]={ "0.6","-5.9","0.0","-11.1","-0.2","36.1","0.0","0.0", "0.14","0.1","0.0","0.0","0.0","0.0","0.0","3.36", "-149.7","-80.0","50.0","139.0","58.13","-6.4","-102.0" }; static gchar* bpformDNA[]={ "0.0","-7.9","0.0","-1.0","-0.2","36.0","0.0","0.0", "0.02","0.0","0.0","0.0","0.0","0.0","0.0","3.29", "-141.8","-80.0","50.0","139.0","80.28","-22.73","-96.0" }; static gchar* cformDNA[]={ "0.6","-8.0","0.0","1.0","-0.2","38.6","0.0","0.0", "1.0","0.4","0.0","0.0","0.0","0.0","0.0","3.31", "49.78","90.0","-10.0","139.0","-147.7","163.8","-97.0" }; static gchar* cpformDNA[]={ "0.6","-8.0","0.0","1.0","-0.2","40.0","0.0","0.0", "1.0","0.4","0.0","0.0","0.0","0.0","0.0","3.28", "49.60","90.0","-10.0","139.0","-142.9","160.4","-97.0" }; static gchar* csformDNA[]={ "0.6","-8.0","0.0","1.0","-0.2","40.0","0.0","0.0", "1.0","0.4","0.0","0.0","0.0","0.0","0.0","3.23", "47.76","90.0","-10.0","139.0","-138.7","156.4","-97.0" }; static gchar* dformDNA[]={ "-16.0","-1.5","0.0","-10.0","0.0","45.0","0.0","0.0", "1.8","0.0","0.0","0.0","0.0","0.0","0.0","3.03", "-125.9","-120.0","117.0","139.0","146.2","-128.5","-110.0" }; static gchar* eformDNA[]={ "0.0","0.0","0.0","1.0","-0.2","48.0","0.0","0.0","1.0", "0.4","0.0","0.0","0.0","0.0","0.0","3.04", "-157.3","-80.0","90.0","139.0","77.4","-47.9","-97.0" }; static gchar* tformDNA[]={ "0.0","-6.0","0.0","4.0","0.0","45.0","0.0","0.0", "1.43","0.0","0.0","0.0","0.0","0.0","0.0","3.40", "-135.4","-90.0","107.0","120.0","61.0","-60.6","-97.0" }; static gchar* z1formDNA[]={ "2.9","-6.2","0.0","-1.3","-6.2","-9.4","0.0","0.0", "3.0","-2.3","0.0","0.0","0.0","0.0","0.0","3.92", "-176.2","-139.0","-30.0","138.0","4.92","-65.57","-159.0" }; static gchar* z2formDNA[]={ "-2.9","-6.2","0.0","-1.3","6.2","-50.6","0.0","0.0", "3.0","2.3","0.0","0.0","0.0","0.0","0.0","3.51", "164.57","160.0","150.0","140.0","-142.1","8.55","68.0" }; #define NBUTTONS 9 typedef enum { B_AT = 0, B_AU = 1, B_CG = 2, B_GC = 3, B_TA = 4, B_UA = 5, B_5CAP = 6, B_3CAP = 7, B_ALL = 8 } ButtonNumbers; static GtkWidget* Entrys[NENTRYS]; static GtkWidget* Buttons[NBUTTONS]; static GtkWidget* buttonDNA = NULL; static GtkWidget* buttonRNA = NULL; static GtkWidget* buttonBuild35 = NULL; static GtkWidget* buttonBuild53 = NULL; static GtkWidget* buttonSingle = NULL; static GtkWidget* buttonDouble = NULL; static GtkWidget* buttonCounterIon = NULL; static GtkWidget* comboForm = NULL; static GtkWidget* comboSugar = NULL; static GtkWidget* comboLeftButton = NULL; static GtkWidget* comboRightButton = NULL; static GtkWidget* entryFragList = NULL; static GtkWidget* hboxCustom = NULL; static GtkWidget* WinPNADlg = NULL; /********************************************************************************/ static gint lastSenseFrag = -1; static gint lastAntiFrag = -1; static gint lastFrag = -1; static GeomDef* G=NULL; static gint Nb = 0; static gboolean zform = FALSE; static gboolean oddBasepair = TRUE; static gdouble opening = 0.0; static gdouble xOffset = 2.485/BOHR_TO_ANG; static gdouble stretch = 0.0/BOHR_TO_ANG; static gdouble tip = 0.0; static gdouble propellerTwist = 0.0; static gdouble inclination = 0.0; static gdouble buckle = 0.0; static gdouble Dx = 0.0/BOHR_TO_ANG; static gdouble Dy = 0.0/BOHR_TO_ANG; static gdouble shear = 0.0/BOHR_TO_ANG; static gdouble stagger = 0.0/BOHR_TO_ANG; static gdouble totalRise = 0.0/BOHR_TO_ANG; static gdouble totalTwist = 0.0; static gdouble twist = 0.0; static gdouble roll = 0.0; static gdouble tilt = 0.0; static gdouble shift = 0.0/BOHR_TO_ANG; static gdouble slide = 0.0/BOHR_TO_ANG; static gdouble rise = 0.0/BOHR_TO_ANG; static gdouble previousTip = 0.0; static gdouble previousInclination = 0.0; static gdouble previousDy = 0.0/BOHR_TO_ANG; static gdouble previousDx = 0.0/BOHR_TO_ANG; static gdouble alpha = 0.0; static gdouble beta = 0.0; static gdouble gammalocal = 0.0; static gdouble delta = 0.0; static gdouble epsilon = 0.0; static gdouble zeta = 0.0; static gdouble chi = 0.0; static gchar* custom5Value = NULL; static gchar* custom3Value = NULL; static gboolean capped3End = FALSE; static gboolean capped5End = FALSE; /*************************************************************************************/ static gdouble getTorsion(GeomDef* geom, gint a1, gint a2, gint a3,gint a4) { gdouble C1[3]={geom[a1].X,geom[a1].Y,geom[a1].Z}; gdouble C2[3]={geom[a2].X,geom[a2].Y,geom[a2].Z}; gdouble C3[3]={geom[a3].X,geom[a3].Y,geom[a3].Z}; gdouble C4[3]={geom[a4].X,geom[a4].Y,geom[a4].Z}; return TorsionToAtoms(C4,C1,C2,C3); } /********************************************************************************/ static void setCoord(gdouble A[],gint n) { A[0] = G[n].X; A[1] = G[n].Y; A[2] = G[n].Z; } /********************************************************************************/ static void deleteLastAtom() { Nb--; if(Nb>0) G = g_realloc(G,(Nb)*sizeof(GeomDef)); else { g_free(G); G = NULL; } Ddef = FALSE; } /********************************************************************************/ static void addAtom(gdouble c[],gchar *symb, gchar* pdbtype, gchar* residue, gdouble charge, gint fragmentNumber) { gint j; gchar* mmType; if(Nb>0) G = g_realloc(G,(Nb+1)*sizeof(GeomDef)); else G = g_malloc((1)*sizeof(GeomDef)); Ddef = FALSE; j=Nb; G[j].X=c[0]; G[j].Y=c[1]; G[j].Z=c[2]; G[j].Charge=charge; G[j].pdbType=g_strdup(pdbtype); mmType = getMMTypeFromPDBTpl(residue,pdbtype,&charge); if(!strcmp(mmType,"UNK")) { g_free(mmType); G[j].mmType=g_strdup(pdbtype); } else G[j].mmType=mmType; G[j].Residue=g_strdup(residue); G[j].ResidueNumber=fragmentNumber; G[j].Prop = prop_atom_get(symb); G[j].N = j+1; Nb++; } /********************************************************************************/ static void addFragment(Fragment Frag) { gint i; gint j; if(Nb>0) G = g_realloc(G,(Nb+Frag.NAtoms+1)*sizeof(GeomDef)); else G = g_malloc((Frag.NAtoms+1)*sizeof(GeomDef)); Ddef = FALSE; j=Nb-1; for(i=0;ichild; G_CONST_RETURN gchar* sugar = gtk_entry_get_text(GTK_ENTRY(entrySugar)); gchar* Name; gint number = -1; gdouble C1PAtom[3]; gdouble C2PAtom[3]; gdouble C3PAtom[3]; gdouble C4PAtom[3]; gdouble O4PAtom[3]; gdouble pseudoAtom[3] = { 0.0, 0.0, 0.0 }; gint pseudoNum = -1; gint sugarIndex = -1; gdouble sugarPucker = 20.0; /* Name = G[ i ].pdbType;*/ for ( i = 0; i < Nb; i++ ) { if(G[i].ResidueNumber != fragNumber) continue; Name = G[ i ].pdbType; number = i; if ( ( strstr(Name,"'" ) != NULL ) || ( strstr(Name, "T" ) != NULL ) || ( strstr(Name, "P" ) != NULL ) || (strstr(Name, "HO2" ) != NULL ) ) { if ( !strcmp(Name, "P" ) ) { P = number; nu1Array[ nu1ArrayCounter++ ] = number; nu2Array[ nu2ArrayCounter++ ] = number; C4PArray[ C4PArrayCounter++ ] = number; deltaArray2[ deltaArray2Counter++ ] = number; gammaArray[ gammaArrayCounter++ ] = number; } else if ( !strcmp(Name, "O1P" ) ) { O1P = number; nu1Array[ nu1ArrayCounter++ ] = number; nu2Array[ nu2ArrayCounter++ ] = number; C4PArray[ C4PArrayCounter++ ] = number; deltaArray2[ deltaArray2Counter++ ] = number; gammaArray[ gammaArrayCounter++ ] = number; betaArray[ betaArrayCounter++ ] = number; alphaArray[ alphaArrayCounter++ ] = number; } else if ( !strcmp(Name, "O2P" ) ) { O2P = number; nu1Array[ nu1ArrayCounter++ ] = number; nu2Array[ nu2ArrayCounter++ ] = number; C4PArray[ C4PArrayCounter++ ] = number; deltaArray2[ deltaArray2Counter++ ] = number; gammaArray[ gammaArrayCounter++ ] = number; betaArray[ betaArrayCounter++ ] = number; alphaArray[ alphaArrayCounter++ ] = number; } else if ( !strcmp(Name, "O5'" ) ) { O5P = number; nu1Array[ nu1ArrayCounter++ ] = number; nu2Array[ nu2ArrayCounter++ ] = number; C4PArray[ C4PArrayCounter++ ] = number; deltaArray2[ deltaArray2Counter++ ] = number; } else if ( !strcmp(Name, "C5'" ) ) { C5P = number; nu1Array[ nu1ArrayCounter++ ] = number; nu2Array[ nu2ArrayCounter++ ] = number; C4PArray[ C4PArrayCounter++ ] = number; deltaArray2[ deltaArray2Counter++ ] = number; } else if ( !strcmp(Name, "H5'1" ) ) { H5P1 = number; nu1Array[ nu1ArrayCounter++ ] = number; nu2Array[ nu2ArrayCounter++ ] = number; C4PArray[ C4PArrayCounter++ ] = number; deltaArray2[ deltaArray2Counter++ ] = number; gammaArray[ gammaArrayCounter++ ] = number; } else if ( !strcmp(Name, "H5'2" ) ) { H5P2 = number; nu1Array[ nu1ArrayCounter++ ] = number; nu2Array[ nu2ArrayCounter++ ] = number; C4PArray[ C4PArrayCounter++ ] = number; deltaArray2[ deltaArray2Counter++ ] = number; gammaArray[ gammaArrayCounter++ ] = number; } else if ( !strcmp(Name, "C4'" ) ) { C4P = number; nu1Array[ nu1ArrayCounter++ ] = number; nu2Array[ nu2ArrayCounter++ ] = number; C4PArray[ C4PArrayCounter++ ] = number; } else if ( !strcmp(Name, "H4'" ) ) { H4P = number; nu1Array[ nu1ArrayCounter++ ] = number; nu2Array[ nu2ArrayCounter++ ] = number; C4PArray[ C4PArrayCounter++ ] = number; deltaArray2[ deltaArray2Counter++ ] = number; } else if ( !strcmp(Name, "O4'" ) ) { O4P = number; } else if ( !strcmp(Name, "C1'" ) ) { C1P = number; C1PArray[ C1PArrayCounter++ ] = number; } else if ( !strcmp(Name, "H1'" ) ) { H1P = number; C1PArray[ C1PArrayCounter++ ] = number; if ( zform ) chiArray[ chiArrayCounter++ ] = number; } else if ( !strcmp(Name, "C3'" ) ) { C3P = number; nu1Array[ nu1ArrayCounter++ ] = number; C3PArray[ C3PArrayCounter++ ] = number; } else if ( !strcmp(Name, "H3'" ) ) { H3P = number; nu1Array[ nu1ArrayCounter++ ] = number; C3PArray[ C3PArrayCounter++ ] = number; deltaArray1[ deltaArray1Counter++ ] = number; } else if ( !strcmp(Name, "C2'" ) ) { C2P = number; C2PArray[ C2PArrayCounter++ ] = number; } else if ( !strcmp(Name, "H2'1" ) ) { H2P1 = number; C2PArray[ C2PArrayCounter++ ] = number; } else if ( !strcmp(Name, "H2'2" ) ) { H2P2 = number; C2PArray[ C2PArrayCounter++ ] = number; } else if ( !strcmp(Name, "O2'" ) ) { O2 = number; C2PArray[ C2PArrayCounter++ ] = number; } else if ( !strcmp(Name, "HO2" ) ) { HO2 = number; C2PArray[ C2PArrayCounter++ ] = number; } else if ( !strcmp(Name, "O3'" ) ) { O3P = number; nu1Array[ nu1ArrayCounter++ ] = number; C3PArray[ C3PArrayCounter++ ] = number; } if ( !( !strcmp(Name, "H1'" ) ) ) chiArray[ chiArrayCounter++ ] = number; } else { if ( !strcmp(Name, "N1" ) ) N1 = i; else if ( !strcmp(Name, "N9" ) ) N9 = i; else if ( !strcmp(Name, "C2" ) ) C2 = i; else if ( !strcmp(Name, "C4" ) ) C4 = i; } } if(O4P != -1 && C1P != -1 && C2P != -1 && C3P !=-1) SetTorsion( Nb,G,O4P, C1P, C2P, C3P, 0, nu1Array, nu1ArrayCounter ); if(C1P != -1 && C2P != -1 && C3P != -1 && C4P !=-1) SetTorsion( Nb,G,C1P, C2P, C3P, C4P, 0, nu2Array, nu2ArrayCounter ); setCoord(C1PAtom,C1P); setCoord(C2PAtom,C2P); setCoord(C3PAtom,C3P); setCoord(C4PAtom,C4P); setCoord(O4PAtom,O4P); if ( zform ) { if ( oddBasepair ) { if ( sense ) gtk_entry_set_text(GTK_ENTRY(entrySugar),sugarList[4]); else gtk_entry_set_text(GTK_ENTRY(entrySugar),sugarList[3]); } else { if ( sense ) gtk_entry_set_text(GTK_ENTRY(entrySugar),sugarList[3]); else gtk_entry_set_text(GTK_ENTRY(entrySugar),sugarList[4]); } } sugarIndex = -1; for(i=0;i= 0 ) && ( N9 >= 0 ) && ( C1P >=0) && (O4P>=0)) { SetTorsion( Nb,G, C4, N9, C1P, O4P, chi, chiArray, chiArrayCounter ); if ( zform ) { if ( ( C1P >= 0 ) && ( C2P >= 0 ) && ( C3P >=0) && (O3P>=0)) SetTorsion( Nb,G,C1P, C2P, C3P, O3P, 50.0, NULL, 0 ); } else { if ( ( H1P >= 0 ) && ( C1P >= 0 ) && ( C3P >=0) && (O3P>=0)) SetTorsion( Nb,G, H1P, C1P, C3P, O3P, 0, NULL, 0 ); } } else if ( ( C2 >= 0 ) && ( N1 >= 0 ) && (C1P>=0) &&( O4P>=0)) { SetTorsion( Nb,G, C2, N1, C1P, O4P, chi, chiArray, chiArrayCounter ); if ( zform ) { if ( ( C1P >= 0 ) && ( C2P >= 0 ) && ( C3P >=0) && (O3P>=0)) SetTorsion( Nb,G, C1P, C2P, C3P, O3P, 50.0, NULL, 0 ); } else { if ( ( H1P >= 0 ) && ( C1P >= 0 ) && ( C3P >=0) && (O3P>=0)) SetTorsion( Nb,G, H1P, C1P, C3P, O3P, 0, NULL, 0 ); } } /* set delta*/ if( (O3P >= 0 ) && ( C3P >= 0 ) && ( C4P >=0) && (C5P>=0)) SetTorsion( Nb,G, O3P, C3P, C4P, C5P, delta, deltaArray2, deltaArray2Counter ); if( (C3P >= 0 ) && ( C4P >= 0 ) && ( C5P >=0) && (O5P>=0)) SetTorsion( Nb,G, C3P, C4P, C5P, O5P, gammalocal, gammaArray, gammaArrayCounter ); if( (C4P >= 0 ) && ( C5P >= 0 ) && ( O5P >=0) && (P>=0)) SetTorsion( Nb,G, C4P, C5P, O5P, P, beta, betaArray, betaArrayCounter ); } /********************************************************************************/ static void fixBackbone( gint previousFragNumber, gint currentFragNumber ) { gint O3P = -1, O5P = -1, O1P = -1, O2P = -1, P = -1; gdouble pseudo[3] = { 0.0, 0.0, 0.0}; gint i; gchar* Name; for( i = 0; i < Nb; i++ ) { if(previousFragNumber != G[i].ResidueNumber) continue; Name = G[i].pdbType; if ( !strcmp(Name, "O3'" ) ) O3P = i; } for( i = 0; i < Nb; i++ ) { if(currentFragNumber != G[i].ResidueNumber) continue; Name = G[i].pdbType; if ( !strcmp(Name, "O1P" ) ) O1P = i; else if ( !strcmp(Name, "O2P" ) ) O2P = i; else if ( !strcmp(Name, "P" ) ) P = i; else if ( !strcmp(Name, "O5'" ) ) O5P = i; } if ( ( O3P == -1 ) || ( O1P == -1 ) || ( O2P == -1 ) || ( P == -1 ) || ( O5P == -1 ) ) return; pseudo[ 0 ] = (gdouble)( ( G[O3P].X + G[O5P].X ) / 2.0 ); pseudo[ 1 ] = (gdouble)( ( G[O3P].Y + G[O5P].Y ) / 2.0 ); pseudo[ 2 ] = (gdouble)( ( G[O3P].Z + G[O5P].Z ) / 2.0 ); addAtom( pseudo,"H","H","H",0.0,lastFrag); SetAngle( Nb,G, Nb-1, P, O1P, 122.5, NULL,0 ); SetTorsion( Nb,G, O3P, Nb-1, P, O1P, 90.0, NULL,0); SetAngle( Nb,G, Nb-1, P, O2P, 122.5, NULL, 0 ); SetTorsion( Nb,G, O3P, Nb-1, P, O2P, -90.0, NULL,0); deleteLastAtom(); } /********************************************************************************/ static void addCounterIons(gint fragNumber ) { gint C5P = -1, O5P = -1, P = -1, O1P = -1, O2P = -1; gint i; gchar* Name; gdouble pseudo[3] = {0.0, 0.0, 0.0}; gdouble naTorsion = 0.0; gdouble bondLength; gdouble distance; gdouble lengthFactor; gint ifrag = -1; for ( i = 0; i < Nb; i++ ) { if(fragNumber != G[i].ResidueNumber) continue; ifrag = i; Name = G[i].pdbType; if ( !strcmp(Name, "P" ) ) P = i; else if ( !strcmp(Name, "O5'" ) ) O5P = i; else if ( !strcmp(Name, "C5'" ) ) C5P = i; else if ( !strcmp(Name, "O1P" ) ) O1P = i; else if ( !strcmp(Name, "O2P" ) ) O2P = i; else if ( !strcmp(Name, "Na" ) ) return; } if ( ( P == -1 ) || ( O5P == -1 ) || ( C5P == -1 ) || ( O1P == -1 ) || ( O2P == -1 ) ) return; addAtom( pseudo,"Na","Na",G[ifrag].Residue,0.0,lastFrag); /* set Bond Distance */ bondLength = 1.88/BOHR_TO_ANG; pseudo[0] = G[P].X - G[O5P].X; pseudo[1] = G[P].Y - G[O5P].Y; pseudo[2] = G[P].Z - G[O5P].Z; distance = sqrt(pseudo[0]*pseudo[0]+pseudo[1]*pseudo[1]+pseudo[2]*pseudo[2]); lengthFactor = bondLength / distance; G[Nb-1].X = (gdouble)( pseudo[0] * lengthFactor + G[P].X); G[Nb-1].Y = (gdouble)( pseudo[1] * lengthFactor + G[P].Y); G[Nb-1].Z = (gdouble)( pseudo[2] * lengthFactor + G[P].Z); /* end set bond */ SetAngle( Nb,G, O5P, P, Nb-1 , 122.5, NULL,0 ); naTorsion = (getTorsion(G, C5P, O5P, P, O1P) + getTorsion(G, C5P, O5P, P , O2P) )/2.0; SetTorsion( Nb,G, C5P, O5P, P, Nb-1, naTorsion, NULL,0); } /*****************************************************************************/ static void defineGeometryToDraw() { gint i; gdouble C[3] = {0.0,0.0,0.0}; gint n; Free_One_Geom(geometry0,Natoms); Free_One_Geom(geometry ,Natoms); Natoms = 0; geometry0 = NULL; geometry = NULL; reset_origine_molecule_drawgeom(); Natoms = Nb; geometry0 = g_malloc((Natoms)*sizeof(GeomDef)); geometry = g_malloc((Natoms)*sizeof(GeomDef)); n = 0; for(i=0;i0) for(i=0;i<3;i++) C[i] /= n; /* center */ for(i=0;i0) { geometry0 = g_realloc(geometry0,(Natoms)*sizeof(GeomDef)); geometry = g_realloc(geometry,(Natoms)*sizeof(GeomDef)); } RebuildGeom = TRUE; } /*****************************************************************************/ static gboolean cap(gboolean fiveToThree, gboolean doubleStranded, gboolean fiveEnd ) { gint P = -1, O1P = -1, O2P = -1, O3P = -1, C3P = -1, O5P = -1, C4P = -1, C5P = -1; gint i; gchar* t; gchar* name; gdouble O3TAtom[] = { 0.0, 0.0, 0.0 }; gdouble H3TAtom[] = { 0.0, 0.0, 0.0 }; gdouble HT3Atom[] = { 0.0, 0.0, 0.0 }; gdouble bondLength, lengthFactor, distance; gdouble O3TTorsion = 180.0; gdouble H3TTorsion = 180.0; gdouble HT3Torsion = 180.0; gint O3T = -1; gint H3T = -1; gint HT3 = -1; gint firstFrag = -1; gint secondFrag = -1; GtkWidget* w; gint ifrag = -1; /* first fragment is fragment to be P-capped second fragment is fragment to be H-capped */ if(lastFrag == -1) { t = g_strdup(_("There are no residues to cap!\n" "You must first create a nucleic acid mono-/polymer.")); w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(WinPNADlg)); g_free(t); return FALSE; } else if(lastFrag == 0 && doubleStranded) { t = g_strdup(_("There are not enough residues to cap!\n" "There is only one residue in the molecule," "yet \"Double Stranded\" has been selected.")); w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(WinPNADlg)); g_free(t); return FALSE; } if ( fiveToThree ) { if ( fiveEnd ) { firstFrag = 0; if ( doubleStranded ) secondFrag = 1; } else { secondFrag = lastFrag; if ( doubleStranded ) { firstFrag = lastFrag; secondFrag = lastFrag-1; } } } else { if ( fiveEnd ) { firstFrag = lastFrag; if ( doubleStranded ) { firstFrag = lastFrag-1; secondFrag = lastFrag; } } else { secondFrag = 0; if ( doubleStranded ) { firstFrag = 1; } } } if ( firstFrag != -1 ) { for ( i = 0; i < Nb; i++ ) { if(firstFrag != G[i].ResidueNumber) continue; ifrag = i; name = G[i].pdbType; if ( !strcmp(name,"P" ) ) P = i; else if ( !strcmp(name, "O1P" ) ) O1P = i; else if ( !strcmp(name, "O2P" ) ) O2P = i; else if ( !strcmp(name, "O5'" ) ) O5P = i; else if ( !strcmp(name, "C5'" ) ) C5P = i; else if ( !strcmp(name, "O3T" ) ) { t = g_strdup(_("This residue is already capped(O3T)!")); w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(WinPNADlg)); g_free(t); return FALSE; } } if ( ( O5P == -1 ) || ( P == -1 ) || ( C5P == -1 ) || ( O1P == -1 ) || ( O2P == -1 ) ) { t = g_strdup(_("Unable to cap(first) residue.")); w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(WinPNADlg)); g_free(t); } else { addAtom( O3TAtom,"O","O3T",G[ifrag].Residue,0.0,firstFrag); O3T = Nb-1; /* set Bond Distance */ bondLength = 1.48/BOHR_TO_ANG; O3TAtom[0] = G[P].X - G[O5P].X; O3TAtom[1] = G[P].Y - G[O5P].Y; O3TAtom[2] = G[P].Z - G[O5P].Z; distance = sqrt(O3TAtom[0]*O3TAtom[0]+ O3TAtom[1]*O3TAtom[1]+ O3TAtom[2]*O3TAtom[2]); lengthFactor = bondLength / distance; G[O3T].X = (gdouble)( O3TAtom[0] * lengthFactor + G[P].X); G[O3T].Y = (gdouble)( O3TAtom[1] * lengthFactor + G[P].Y); G[O3T].Z = (gdouble)( O3TAtom[2] * lengthFactor + G[P].Z); /* end set bond */ SetAngle( Nb,G, O5P, P, O3T , 109.5, NULL,0 ); O3TTorsion = (getTorsion(G, C5P, O5P, P, O1P) + getTorsion(G, C5P, O5P, P , O2P) )/2.0; SetTorsion( Nb,G, C5P, O5P, P, O3T, O3TTorsion, NULL,0); addAtom( H3TAtom,"H","H3T",G[ifrag].Residue,0.0,firstFrag); H3T = Nb -1; /* set Bond Distance */ bondLength = 0.9/BOHR_TO_ANG; H3TAtom[0] = G[O3T].X - G[P].X; H3TAtom[1] = G[O3T].Y - G[P].Y; H3TAtom[2] = G[O3T].Z - G[P].Z; distance = sqrt(H3TAtom[0]*H3TAtom[0]+ H3TAtom[1]*H3TAtom[1]+ H3TAtom[2]*H3TAtom[2]); lengthFactor = bondLength / distance; G[H3T].X = (gdouble)( H3TAtom[0] * lengthFactor + G[P].X); G[H3T].Y = (gdouble)( H3TAtom[1] * lengthFactor + G[P].Y); G[H3T].Z = (gdouble)( H3TAtom[2] * lengthFactor + G[P].Z); /* end set bond */ SetAngle( Nb,G, P, O3T, H3T , 109.5, NULL,0 ); SetTorsion( Nb,G, O5P, P, O3T, H3T, H3TTorsion, NULL,0); } } if ( secondFrag != -1 ) { ifrag = -1; for ( i = 0; i < Nb; i++ ) { if(secondFrag != G[i].ResidueNumber) continue; ifrag = i; name = G[i].pdbType; if ( !strcmp(name, "C3'" ) ) C3P = i; else if ( !strcmp(name, "O3'" ) ) O3P = i; else if ( !strcmp(name, "C4'" ) ) C4P = i; else if ( !strcmp(name, "HT3" ) ) { t = g_strdup(_("This residue is already capped(HT3)!")); w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(WinPNADlg)); g_free(t); return FALSE; } } if ( ( C3P == -1 ) || ( O3P == -1 ) || ( C4P == -1 ) ) { t = g_strdup(_("Unable to cap residue.")); w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(WinPNADlg)); g_free(t); return FALSE; } addAtom( HT3Atom,"H","HT3",G[ifrag].Residue,0.0,secondFrag); HT3 = Nb-1; /* set Bond Distance */ bondLength = 0.9/BOHR_TO_ANG; HT3Atom[0] = G[O3P].X - G[C3P].X; HT3Atom[1] = G[O3P].Y - G[C3P].Y; HT3Atom[2] = G[O3P].Z - G[C3P].Z; distance = sqrt(HT3Atom[0]*HT3Atom[0]+ HT3Atom[1]*HT3Atom[1]+ HT3Atom[2]*HT3Atom[2]); lengthFactor = bondLength / distance; G[HT3].X = (gdouble)( HT3Atom[0] * lengthFactor + G[O3P].X); G[HT3].Y = (gdouble)( HT3Atom[1] * lengthFactor + G[O3P].Y); G[HT3].Z = (gdouble)( HT3Atom[2] * lengthFactor + G[O3P].Z); /* end set bond */ SetAngle( Nb,G, C3P, O3P, HT3 , 109.5, NULL,0 ); SetTorsion( Nb,G, C4P, C3P, O3P, HT3, HT3Torsion, NULL,0); } return TRUE; } /********************************************************************************/ static void makeBasepair( gchar* sense, gchar* anti, gdouble senseAngle, gdouble antiAngle, gdouble separation ) { gboolean fiveToThree = FALSE; GtkWidget* entry = GTK_BIN (comboForm)->child; G_CONST_RETURN gchar* form = gtk_entry_get_text(GTK_ENTRY(entry)); gdouble** aM=g_malloc(3*sizeof(gdouble*));/* Matrix 3D */ gdouble** sM=g_malloc(3*sizeof(gdouble*));/* Matrix 3D */ gdouble** aTmp = NULL; gdouble** sTmp = NULL; gint aNAtoms; gint sNAtoms; gdouble sFragC1P[2]; gdouble aFragC1P[2]; gdouble slideVector[2]; gdouble slideVectorLength; gint j; gint i; Fragment sFrag; Fragment aFrag; for(j=0;j<3;j++) { aM[j] = g_malloc(4*sizeof(gdouble)); sM[j] = g_malloc(4*sizeof(gdouble)); } sFrag = GetFragmentPNA( anti ); aFrag = GetFragmentPNA( sense ); if ( GTK_TOGGLE_BUTTON (buttonBuild53)->active ) { Fragment temp = aFrag; fiveToThree = TRUE; aFrag = sFrag; sFrag = temp; } if ( !strcmp(form,"z-form" ) ) { Fragment temp = aFrag; zform = TRUE; aFrag = sFrag; sFrag = temp; } else zform = FALSE; aNAtoms = aFrag.NAtoms; sNAtoms = sFrag.NAtoms; if(aNAtoms<=0) return; if(sNAtoms<=0) return; aTmp = g_malloc(aNAtoms*sizeof(gdouble*)); for(j=0;jactive ) { if ( fiveToThree ) { addFragment(sFrag); setTorsionAngles( lastFrag+1, TRUE ); if ( lastSenseFrag != -1 ) { gint fragmentDistance = abs( lastFrag+1- lastSenseFrag); if ( fragmentDistance == 1 ) { if ( zform ) { fixBackbone( lastFrag+1, lastSenseFrag); } else { fixBackbone( lastSenseFrag,lastFrag+1 ); } } } if ( GTK_TOGGLE_BUTTON (buttonCounterIon)->active ) addCounterIons(lastFrag+1 ); lastSenseFrag++; } else { addFragment(aFrag); setTorsionAngles( lastFrag+1, TRUE ); if ( lastAntiFrag != -1 ) { gint fragmentDistance = abs( lastFrag+1 - lastAntiFrag); if ( fragmentDistance == 1 ) { if ( zform ) { fixBackbone( lastAntiFrag, lastFrag+1 ); } else { fixBackbone( lastFrag+1, lastAntiFrag ); } } } if ( GTK_TOGGLE_BUTTON (buttonCounterIon)->active ) addCounterIons(lastFrag+1 ); lastAntiFrag++; } } else { addFragment(sFrag); setTorsionAngles( lastFrag+1, TRUE ); if ( GTK_TOGGLE_BUTTON (buttonCounterIon)->active ) addCounterIons(lastFrag+1 ); lastFrag++; addFragment(aFrag ); setTorsionAngles( lastFrag+1, FALSE ); if ( GTK_TOGGLE_BUTTON (buttonCounterIon)->active ) addCounterIons(lastFrag+1 ); if ( lastSenseFrag != -1 ) { int fragmentDistance = abs( lastFrag - lastSenseFrag ); if ( fragmentDistance == 2 ) { if ( zform ) { fixBackbone( lastFrag, lastSenseFrag ); } else { fixBackbone( lastSenseFrag, lastFrag ); } } } if ( lastAntiFrag != -1 ) { gint fragmentDistance = abs( lastFrag+1 - lastAntiFrag ); if ( fragmentDistance == 2 ) { if ( zform ) { fixBackbone( lastAntiFrag, lastFrag+1 ); } else { fixBackbone( lastFrag+1, lastAntiFrag ); } } } lastSenseFrag = lastFrag; lastAntiFrag = lastFrag+1; } lastFrag++; if ( oddBasepair ) oddBasepair = FALSE; else oddBasepair = TRUE; } /********************************************************************************/ static gboolean getOneValue(gdouble* value, G_CONST_RETURN gchar* strValue, G_CONST_RETURN gchar* name) { gchar* t; gchar* realSuggestion = N_("Suggestion: See if you put an O ( oh ) in instead of a 0 ( zero ) or l ( ell ) instead of 1 ( one )."); GtkWidget* w; if(!isFloat(strValue)) { t = g_strdup_printf( _("The value for '%s' must be a number.\n%s"),name,realSuggestion); w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(WinPNADlg)); g_free(t); return FALSE; } else *value = atof(strValue); return TRUE; } /********************************************************************************/ static gboolean getParameters() { gboolean build53 = GTK_TOGGLE_BUTTON (buttonBuild53)->active; G_CONST_RETURN gchar* tBeta = gtk_entry_get_text(GTK_ENTRY(Entrys[E_BETA])); G_CONST_RETURN gchar* tGamma = gtk_entry_get_text(GTK_ENTRY(Entrys[E_GAMMA])); G_CONST_RETURN gchar* tDelta = gtk_entry_get_text(GTK_ENTRY(Entrys[E_DELTA])); G_CONST_RETURN gchar* tChi = gtk_entry_get_text(GTK_ENTRY(Entrys[E_CHI])); G_CONST_RETURN gchar* tTip = gtk_entry_get_text(GTK_ENTRY(Entrys[E_TIP])); G_CONST_RETURN gchar* tInclination = gtk_entry_get_text(GTK_ENTRY(Entrys[E_INCLINATION])); G_CONST_RETURN gchar* tOpening = gtk_entry_get_text(GTK_ENTRY(Entrys[E_OPENNING])); G_CONST_RETURN gchar* tPropellerTwist = gtk_entry_get_text(GTK_ENTRY(Entrys[E_PROPELLERTWIST])); G_CONST_RETURN gchar* tBuckle = gtk_entry_get_text(GTK_ENTRY(Entrys[E_BUCKLE])); G_CONST_RETURN gchar* tTwist = gtk_entry_get_text(GTK_ENTRY(Entrys[E_TWIST])); G_CONST_RETURN gchar* tRoll = gtk_entry_get_text(GTK_ENTRY(Entrys[E_ROLL])); G_CONST_RETURN gchar* tDx = gtk_entry_get_text(GTK_ENTRY(Entrys[E_XDISPLACEMENT])); G_CONST_RETURN gchar* tDy = gtk_entry_get_text(GTK_ENTRY(Entrys[E_YDISPLACEMENT])); G_CONST_RETURN gchar* tShear = gtk_entry_get_text(GTK_ENTRY(Entrys[E_SHEARSX])); G_CONST_RETURN gchar* tStagger = gtk_entry_get_text(GTK_ENTRY(Entrys[E_STAGGERSZ])); G_CONST_RETURN gchar* tStretch = gtk_entry_get_text(GTK_ENTRY(Entrys[E_STRETCHSY])); G_CONST_RETURN gchar* tShift = gtk_entry_get_text(GTK_ENTRY(Entrys[E_SHIFTDX])); G_CONST_RETURN gchar* tSlide = gtk_entry_get_text(GTK_ENTRY(Entrys[E_SLIDEDY])); G_CONST_RETURN gchar* tRise = gtk_entry_get_text(GTK_ENTRY(Entrys[E_RISEDZ])); G_CONST_RETURN gchar* tTilt = gtk_entry_get_text(GTK_ENTRY(Entrys[E_TILT])); gchar* t; GtkWidget* w; GtkWidget* entryLeft = GTK_BIN (comboLeftButton)->child; GtkWidget* entryRight = GTK_BIN (comboRightButton)->child; gboolean DNA = GTK_TOGGLE_BUTTON (buttonDNA)->active; if(custom5Value) g_free(custom5Value); if(custom3Value) g_free(custom3Value); if(DNA) { custom5Value = g_strdup_printf("d%s",gtk_entry_get_text(GTK_ENTRY(entryLeft))); custom3Value = g_strdup_printf("d%s",gtk_entry_get_text(GTK_ENTRY(entryRight))); } else { custom5Value = g_strdup_printf("r%s",gtk_entry_get_text(GTK_ENTRY(entryLeft))); custom3Value = g_strdup_printf("r%s",gtk_entry_get_text(GTK_ENTRY(entryRight))); } delete_all_spaces(custom5Value); delete_all_spaces(custom3Value); if ( ( capped3End ) && ( build53 ) ) { t = g_strdup( _("The 3' end of the polynucleotide is already capped. You cannot add more residues once you have capped the end.\nSuggestion: Don't cap the ends of the polynucleotide until you have finished building the entire sequence.") ); w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(WinPNADlg)); g_free(t); return FALSE; } if ( ( capped5End ) && ( !build53 ) ) { t = g_strdup( _("The 5' end of the polynucleotide is already capped. You cannot add more residues once you have capped the end.\nSuggestion: Don't cap the ends of the polynucleotide until you have finished building the entire sequence.") ); w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(WinPNADlg)); g_free(t); return FALSE; } if(!getOneValue(&beta,tBeta,"beta")) return FALSE; if(!getOneValue(&gammalocal,tGamma,"gamma")) return FALSE; if(!getOneValue(&delta,tDelta,"delta")) return FALSE; if(!getOneValue(&chi,tChi,"chi")) return FALSE; if(!getOneValue(&tip,tTip,"tip")) return FALSE; if(!getOneValue(&inclination,tInclination,"inclination")) return FALSE; if(!getOneValue(&opening,tOpening,"opening")) return FALSE; if(!getOneValue(&propellerTwist,tPropellerTwist,"propellerTwist")) return FALSE; if(!getOneValue(&buckle,tBuckle,"buckle")) return FALSE; if(!getOneValue(&twist,tTwist,"twist")) return FALSE; if(!getOneValue(&roll,tRoll,"roll")) return FALSE; if(!getOneValue(&tilt,tTilt,"tilt")) return FALSE; if(!getOneValue(&Dx,tDx,"Dx")) return FALSE; if(!getOneValue(&Dy,tDy,"Dy")) return FALSE; if(!getOneValue(&shear,tShear,"shear")) return FALSE; if(!getOneValue(&stagger,tStagger,"stagger")) return FALSE; if(!getOneValue(&stretch,tStretch,"stretch")) return FALSE; if(!getOneValue(&shift,tShift,"shift")) return FALSE; if(!getOneValue(&slide,tSlide,"slide")) return FALSE; if(!getOneValue(&rise,tRise,"rise")) return FALSE; Dx /= BOHR_TO_ANG; Dy /= BOHR_TO_ANG; shear /= BOHR_TO_ANG; stagger /= BOHR_TO_ANG; stretch /= BOHR_TO_ANG; rise /= BOHR_TO_ANG; shift /= BOHR_TO_ANG; slide /= BOHR_TO_ANG; if ( tip == 0 ){ tip = roll + previousTip; } else if ( ( roll != 0 ) && ( roll != tip - previousTip ) ) { t = g_strdup( _("Your choices for tip and roll do not correlate. Roll should equal the difference of tip and the previous tip.\nThis check is performed only when tip and roll are both set to nonzero values. Suggestion: make either roll = 0 and control the rotation about the y-axis using only tip or make tip = 0 and control the rotation with roll." )); w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(WinPNADlg)); g_free(t); return FALSE; } if ( inclination == 0.0 ){ inclination = tilt + previousInclination; } else if ( ( tilt != 0 ) && ( tilt != inclination - previousInclination ) ) { t = g_strdup(_("Your choices for tilt and inclination do not correlate. Tilt should equal the difference of inclination and the previous inclination.\nThis check is performed only when tilt and inclination are both set to nonzero values. Suggestion: make either tilt = 0 and control the rotation about the x-axis using only inclination or make inclination = 0 and control the rotation with tilt.") ); w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(WinPNADlg)); g_free(t); return FALSE; } if ( Dy == 0.0 ){ Dy = slide + previousDy; } else if ( ( slide != 0 ) && ( slide != Dy - previousDy ) ) { t = g_strdup(_("Your choices for dy and slide do not correlate. Slide should equal the difference of dy and the previous dy.\nThis check is performed only when dy and slide are both set to nonzero values. Suggestion: make either dy = 0 and control the translation along the y-axis using only slide or make slide = 0 and control the translation with dy.") ); w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(WinPNADlg)); g_free(t); return FALSE; } if ( Dx == 0.0 ){ Dx = shift + previousDx; } else if ( ( shift != 0 ) && ( shift != Dx - previousDx ) ){ t = g_strdup(_("Your choices for dx and shift do not correlate. Shift should equal the difference of dx and the previous dx.\nThis check is performed only when dx and shift are both set to nonzero values. Suggestion: make either dx = 0 and control the translation along the x-axis using only shift or make shift = 0 and control the translation with dx.") ); w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(WinPNADlg)); g_free(t); return FALSE; } previousTip = tip; previousInclination = inclination; previousDx = Dx; previousDy = Dy; totalRise += rise; totalTwist -= twist; return TRUE; } /********************************************************************************/ static void buildNucleicAcid(GtkWidget *w,gpointer data) { static gdouble AT_SEPARATION = 10.44/BOHR_TO_ANG, CG_SEPARATION = 10.72/BOHR_TO_ANG; static gdouble CYT_ANGLE = 34.3, GUA_ANGLE = 35.6, THY_ANGLE = 32.6, ADE_ANGLE = 33.8; gchar* tbutton = (gchar*)data; gboolean DNA = GTK_TOGGLE_BUTTON (buttonDNA)->active; gboolean build53 = GTK_TOGGLE_BUTTON (buttonBuild53)->active; gboolean Single = GTK_TOGGLE_BUTTON (buttonSingle)->active; if(!getParameters()) return; if ( !strcmp(tbutton,"A - (T)") ) { if ( DNA) makeBasepair( "dADE","dTHY", ADE_ANGLE, THY_ANGLE, AT_SEPARATION ); else makeBasepair( "rADE", "rTHY", ADE_ANGLE, THY_ANGLE, AT_SEPARATION ); } else if ( !strcmp(tbutton, "A - (U)") ) { if ( DNA ) makeBasepair( "dADE", "dURA", ADE_ANGLE, THY_ANGLE, AT_SEPARATION ); else makeBasepair( "rADE", "rURA", ADE_ANGLE, THY_ANGLE, AT_SEPARATION ); } else if ( !strcmp(tbutton, "C - (G)") ) { if ( DNA ) makeBasepair( "dCYT", "dGUA", CYT_ANGLE, GUA_ANGLE, CG_SEPARATION ); else makeBasepair( "rCYT", "rGUA", CYT_ANGLE, GUA_ANGLE, CG_SEPARATION ); } else if ( !strcmp(tbutton,"G - (C)") ) { if ( DNA ) makeBasepair( "dGUA", "dCYT", GUA_ANGLE, CYT_ANGLE, CG_SEPARATION ); else makeBasepair( "rGUA", "rCYT", GUA_ANGLE, CYT_ANGLE, CG_SEPARATION ); } else if ( !strcmp(tbutton, "T - (A)") ) { if ( DNA ) makeBasepair( "dTHY", "dADE", THY_ANGLE, ADE_ANGLE, AT_SEPARATION ); else makeBasepair( "rTHY", "rADE", THY_ANGLE, ADE_ANGLE, AT_SEPARATION ); } else if ( !strcmp(tbutton, "U - (A)") ) { if ( DNA ) makeBasepair( "dURA", "dADE", THY_ANGLE, ADE_ANGLE, AT_SEPARATION ); else makeBasepair( "rURA", "rADE", THY_ANGLE, ADE_ANGLE, AT_SEPARATION ); } else if ( !strcmp(tbutton, "3'-CAP") ) { gboolean fiveToThree = FALSE; gboolean doubleStranded = FALSE; capped3End = FALSE; if ( build53 ) fiveToThree = TRUE; if ( !Single ) doubleStranded = TRUE; if( cap(fiveToThree, doubleStranded, FALSE ) ) { gint i; capped3End = TRUE; gtk_widget_set_sensitive(Buttons[B_3CAP], FALSE); if(capped5End) { for(i=0;i0) { defineGeometryToDraw(); reset_all_connections(); define_good_factor(); create_GeomXYZ_from_draw_grometry(); unselect_all_atoms(); reset_charges_multiplicities(); drawGeom(); } } /********************************************************************************/ static void resetSensitivitieButtons(GtkWidget* win, gpointer data) { gboolean Ok = FALSE; if(GTK_TOGGLE_BUTTON (buttonDNA)->active) Ok = TRUE; gtk_widget_set_sensitive(Buttons[B_AU], !Ok); gtk_widget_set_sensitive(Buttons[B_UA], !Ok); gtk_widget_set_sensitive(Buttons[B_AT], Ok); gtk_widget_set_sensitive(Buttons[B_TA], Ok); } /********************************************************************************/ static void resetFormList(GtkWidget* win, gpointer data) { gint i; GList *list=NULL; if(GTK_TOGGLE_BUTTON (buttonDNA)->active) { for (i=0;ichild),formDNAList[1]); } else { for (i=0;ichild; G_CONST_RETURN gchar* form = gtk_entry_get_text(GTK_ENTRY(entry)); for(i=0;ichild; G_CONST_RETURN gchar* form = gtk_entry_get_text(GTK_ENTRY(entry)); gchar** values = NULL; if(!strcmp(form,"a-form")) { if(GTK_TOGGLE_BUTTON (buttonDNA)->active) values = aformDNA; else values = aformRNA; } else if(!strcmp(form,"a'-form")) values = apformRNA; else if(!strcmp(form,"b-form")) values = bformDNA; else if(!strcmp(form,"b'-form")) values = bpformDNA; else if(!strcmp(form,"c-form")) values = cformDNA; else if(!strcmp(form,"c'-form")) values = cpformDNA; else if(!strcmp(form,"c''-form")) values = csformDNA; else if(!strcmp(form,"d-form")) values = dformDNA; else if(!strcmp(form,"e-form")) values = eformDNA; else if(!strcmp(form,"t-form")) values = tformDNA; else if(!strcmp(form,"z-form")) values = z2formDNA; if(!values) return; for(i=0;ichild; G_CONST_RETURN gchar* form = gtk_entry_get_text(GTK_ENTRY(entryForm)); G_CONST_RETURN gchar* tip = gtk_entry_get_text(GTK_ENTRY(Entrys[E_TIP])); GtkWidget* entrySugar = GTK_BIN(comboSugar)->child; gint i; if(strcmp(form,"z-form")!=0) return; gtk_entry_set_text(GTK_ENTRY(entrySugar),sugarList[0]); if(strcmp(tip,z1formDNA[E_TIP])==0) { for(i=0;ichild; GtkWidget* entrySugar = GTK_BIN(comboSugar)->child; G_CONST_RETURN gchar* form = gtk_entry_get_text(GTK_ENTRY(entryForm)); gchar* value = NULL; if(!strcmp(form,"a-form")) value = g_strdup("C3'-endo"); else if(!strcmp(form,"a'-form")) value = g_strdup("C3'-endo"); else if(!strcmp(form,"b-form")) value = g_strdup("C2'-endo"); else if(!strcmp(form,"b'-form")) value = g_strdup("C3'-exo"); else if(!strcmp(form,"c-form")) value = g_strdup("C3'-exo"); else if(!strcmp(form,"c'-form")) value = g_strdup("C3'-exo"); else if(!strcmp(form,"c''-form")) value = g_strdup("C3'-exo"); else if(!strcmp(form,"d-form")) value = g_strdup("C3'-exo"); else if(!strcmp(form,"e-form")) value = g_strdup("C3'-exo"); else if(!strcmp(form,"t-form")) value = g_strdup("C2'-endo"); else if(!strcmp(form,"z-form")) value = g_strdup("C3'-endo"); if(!value) return; gtk_entry_set_text(GTK_ENTRY(entrySugar), value); } /********************************************************************************/ static void resetTypeList(GtkWidget* win, gpointer data) { gint i; GList *list=NULL; if(GTK_TOGGLE_BUTTON (buttonDNA)->active) { for (i=0;ichild; tbutton = gtk_entry_get_text(GTK_ENTRY(entry)); if ( !strcmp(tbutton,"ADE" ) || !strcmp(tbutton,"CYT" ) || !strcmp(tbutton,"GUA" ) || !strcmp(tbutton,"THY" ) || !strcmp(tbutton,"URA" ) || !strcmp(tbutton," I " ) || !strcmp(tbutton," Y " ) ) { if(tbutton[0] != ' ') fragList = g_strdup_printf("%s%c",oldFragList,tbutton[0]); else fragList = g_strdup_printf("%s%c",oldFragList,tbutton[1]); } else fragList = g_strdup_printf("%s(%s)",oldFragList,tbutton); } gtk_entry_set_text(GTK_ENTRY(entryFragList),fragList); } /********************************************************************************/ static void resetButtonCustom(GtkWidget* win, gpointer data) { GtkWidget* entryLeft = GTK_BIN(comboLeftButton)->child; GtkWidget* entryRight = GTK_BIN(comboRightButton)->child; G_CONST_RETURN gchar* textLeft = gtk_entry_get_text(GTK_ENTRY(entryLeft)); G_CONST_RETURN gchar* textRight = gtk_entry_get_text(GTK_ENTRY(entryRight)); GtkWidget* button; gchar* tbutton = g_strdup_printf("%s-(%s)",textLeft,textRight); button = gtk_button_new_with_label(tbutton); gtk_widget_destroy(Buttons[B_ALL]); Buttons[B_ALL] = button; gtk_box_pack_start (GTK_BOX (hboxCustom), Buttons[B_ALL], TRUE, TRUE, 0); gtk_widget_show (button); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)resetFragList,tbuttons[B_ALL]); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)buildNucleicAcid,tbuttons[B_ALL]); } /********************************************************************************/ static GtkWidget* newCombo(gchar **tlist,gint nlist, gboolean edit) { GtkWidget* combo; GList *list=NULL; gint i; combo = gtk_combo_box_entry_new_text(); for (i=0;ichild,edit); return combo; } /********************************************************************************/ static GtkWidget* newLeftEntry() { GtkWidget* entry; entry = gtk_entry_new(); gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.1),-1); return entry; } /********************************************************************************/ static GtkWidget* newLeftLabel(gchar* tlabel) { GtkWidget* label; GtkWidget* hbox; label = gtk_label_new(tlabel); gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT); hbox = gtk_hbox_new (FALSE, 5); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 2); return hbox; } /********************************************************************************/ static void newLabelEntry(GtkWidget* table,EntryNumbers entryNum,gint l, gint c) { GtkWidget* label1; GtkWidget* label2; label1 = newLeftLabel(tlabels[entryNum]); label2 = newLeftLabel(" : "); Entrys [entryNum] = newLeftEntry(); gtk_table_attach(GTK_TABLE(table),label1,c,c+1,l,l+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); gtk_table_attach(GTK_TABLE(table),label2,c+1,c+2,l,l+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); gtk_table_attach(GTK_TABLE(table),Entrys [entryNum],c+2,c+3,l,l+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); } /********************************************************************************/ static void initVariables() { gint i; for(i=0;i0) { gint i; for (i=0;ichild; gtk_entry_set_text(GTK_ENTRY(entry),formDNAList[1]); gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.1),-1); gtk_table_attach(GTK_TABLE(table2),combo,2,3,0,1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); comboForm = combo; gtk_table_attach(GTK_TABLE(table2),vseparator,3,4,0,1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),5,1); label = newLeftLabel(_("Sugar Pucker")); gtk_table_attach(GTK_TABLE(table2),label,4,5,0,1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); label = newLeftLabel(" : "); gtk_table_attach(GTK_TABLE(table2),label,5,6,0,1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); combo = newCombo(sugarList,numberSugarList,FALSE); entry = GTK_BIN (combo)->child; gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.1),-1); gtk_table_attach(GTK_TABLE(table2),combo,6,7,0,1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); comboSugar = combo; gtk_box_pack_start (GTK_BOX (vbox), hseparator1, TRUE, TRUE, 3); buttonCounterIon = gtk_check_button_new_with_label (_("Add Counter Ion")); gtk_box_pack_start (GTK_BOX (vbox), buttonCounterIon, FALSE, TRUE, 1); gtk_box_pack_start (GTK_BOX (vbox), hseparator2, TRUE, TRUE, 0); entry = gtk_entry_new(); gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0); gtk_widget_set_sensitive(entry, FALSE); entryFragList = entry; } /******************************************************************************/ static void addButtons(GtkWidget *Dlg,GtkWidget* box) { GtkWidget* frame; GtkWidget* vbox; GtkWidget* table; GtkWidget* combo; GtkWidget* entry; GtkWidget *hseparator = gtk_hseparator_new (); gint i; #define NLIGNES 7 #define NCOLONNS 2 frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_box_pack_start(GTK_BOX(box), frame,TRUE,TRUE,0); gtk_widget_show (frame); vbox= create_vbox(frame); table = gtk_table_new(NLIGNES,NCOLONNS,FALSE); gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 3); Buttons[B_AT] = gtk_button_new_with_label(tbuttons[B_AT]); gtk_table_attach(GTK_TABLE(table),Buttons[B_AT],0,1,0,1,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND),1,1); Buttons[B_AU] = gtk_button_new_with_label(tbuttons[B_AU]); gtk_table_attach(GTK_TABLE(table),Buttons[B_AU],1,2,0,1,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND),1,1); Buttons[B_CG] = gtk_button_new_with_label(tbuttons[B_CG]); gtk_table_attach(GTK_TABLE(table),Buttons[B_CG],0,1,1,2,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND),1,1); Buttons[B_GC] = gtk_button_new_with_label(tbuttons[B_GC]); gtk_table_attach(GTK_TABLE(table),Buttons[B_GC],1,2,1,2,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND),1,1); Buttons[B_TA] = gtk_button_new_with_label(tbuttons[B_TA]); gtk_table_attach(GTK_TABLE(table),Buttons[B_TA],0,1,2,3,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND),1,1); Buttons[B_UA] = gtk_button_new_with_label(tbuttons[B_UA]); gtk_table_attach(GTK_TABLE(table),Buttons[B_UA],1,2,2,3,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND),1,1); Buttons[B_5CAP] = gtk_button_new_with_label(tbuttons[B_5CAP]); gtk_table_attach(GTK_TABLE(table),Buttons[B_5CAP],0,1,3,4,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND),1,1); Buttons[B_3CAP] = gtk_button_new_with_label(tbuttons[B_3CAP]); gtk_table_attach(GTK_TABLE(table),Buttons[B_3CAP],1,2,3,4,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND),1,1); gtk_table_attach(GTK_TABLE(table),hseparator,0,2,4,5,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,5); combo = newCombo(typeDNAList,numberDNATypeList ,FALSE); entry = GTK_BIN (combo)->child; gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.05),-1); gtk_table_attach(GTK_TABLE(table),combo,0,1,5,6,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); comboLeftButton = combo; combo = newCombo(typeDNAList,numberDNATypeList ,FALSE); entry = GTK_BIN (combo)->child; gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.05),-1); gtk_table_attach(GTK_TABLE(table),combo,1,2,5,6,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); comboRightButton = combo; hboxCustom = gtk_hbox_new (FALSE, 5); Buttons[B_ALL] = gtk_button_new_with_label(tbuttons[B_ALL]); gtk_box_pack_start (GTK_BOX (hboxCustom), Buttons[B_ALL], TRUE, TRUE, 0); gtk_widget_show (hboxCustom); gtk_table_attach(GTK_TABLE(table),hboxCustom,0,2,6,7,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND),1,1); for(i=0;ivbox), NoteBook,TRUE, TRUE, 0); AddNoteBookDlg(Dlg,NoteBook,_("Build"),addGeneralButtons); AddNoteBookDlg(Dlg,NoteBook,_("Parameters"),addHelicalParametersTorsionAngles); g_signal_connect_swapped(G_OBJECT(buttonDNA), "clicked",(GCallback)resetSensitivitieButtons,NULL); g_signal_connect_swapped(G_OBJECT(buttonDNA), "clicked",(GCallback)resetFormList,NULL); g_signal_connect_swapped(G_OBJECT(buttonDNA), "clicked",(GCallback)resetTypeList,NULL); g_signal_connect_swapped(G_OBJECT(buttonRNA), "clicked",(GCallback)resetSensitivitieButtons,NULL); g_signal_connect_swapped(G_OBJECT(buttonRNA), "clicked",(GCallback)resetFormList,NULL); g_signal_connect_swapped(G_OBJECT(buttonRNA), "clicked",(GCallback)resetTypeList,NULL); resetSensitivitieButtons(NULL,NULL); resetFormList(NULL,NULL); resetSensitivitieEntrys(NULL,NULL); g_signal_connect(G_OBJECT(GTK_BIN(comboForm)->child), "changed",G_CALLBACK(resetSensitivitieEntrys),NULL); g_signal_connect(G_OBJECT(GTK_BIN(comboForm)->child), "changed",G_CALLBACK(resetValueEntrys),NULL); g_signal_connect(G_OBJECT(GTK_BIN(comboForm)->child), "changed",G_CALLBACK(resetSugarEntry),NULL); resetValueEntrys(NULL, NULL); resetSugarEntry(NULL,NULL); resetButtonCustom(NULL,NULL); g_signal_connect(G_OBJECT(GTK_BIN(comboLeftButton)->child), "changed",G_CALLBACK(resetButtonCustom),NULL); g_signal_connect(G_OBJECT(GTK_BIN(comboRightButton)->child), "changed",G_CALLBACK(resetButtonCustom),NULL); /* The "Close" button */ gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(Dlg)->action_area), FALSE); gtk_widget_realize(Dlg); Button = create_button(Dlg,_("Close")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Dlg)->action_area), Button, FALSE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(Button), "clicked",(GCallback)destroyDlg,GTK_OBJECT(Dlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); WinPNADlg = Dlg; gtk_widget_show_all(GTK_DIALOG(Dlg)->vbox); gtk_widget_show_all(GTK_DIALOG(Dlg)->action_area); gtk_widget_show_now(Dlg); fit_windows_position(GeomDlg, Dlg); } GabeditSrc250/src/Geometry/AxesGeomGL.h0000644000175100017510000000111513130665226020160 0ustar alloucheallouche #ifndef __GABEDIT_AXISGEOMGL_H__ #define __GABEDIT_AXISGEOMGL_H__ #ifdef DRAWGEOMGL void getAxesGeomProperties(gboolean* show, gboolean* negative, gdouble origin[], gdouble* radius, gdouble* scal, gdouble xColor[], gdouble yColor[], gdouble zColor[]); void initAxesGeom(); void save_axes_geom_properties(); void read_axes_geom_properties(); void set_axes_geom_dialog (); gboolean testShowAxesGeom(); void showAxesGeom(); void hideAxesGeom(); void gl_build_axes(gdouble* position); void showLabelAxesGeom(gboolean ortho, gdouble* position); #endif #endif /* __GABEDIT_AXISGEOMGL_H__ */ GabeditSrc250/src/Geometry/BuildLinear.c0000644000175100017510000002136613130665226020424 0ustar alloucheallouche/* BuildLinear.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/InterfaceGeom.h" #include "../Geometry/MenuToolBarGeom.h" static GtkWidget* Entrys[3]; static GtkWidget* FenetreTable = NULL; /********************************************************************************/ static void build_linear_molecule(GtkWidget *w,gpointer data) { G_CONST_RETURN gchar *t; gint Nc; gdouble Distance; G_CONST_RETURN gchar* Symb; gint j; Symb = gtk_entry_get_text(GTK_ENTRY(Entrys[0])); t = gtk_entry_get_text(GTK_ENTRY(Entrys[1])); Nc = atoi(t); t = gtk_entry_get_text(GTK_ENTRY(Entrys[2])); Distance = atof(t); unselect_all_atoms(); if(Units==0) Distance *= ANG_TO_BOHR; if(Nc<1) return; init_dipole(); if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(VariablesXYZ); NcentersXYZ = Nc; GeomXYZ=g_malloc(NcentersXYZ*sizeof(GeomXYZAtomDef)); for(j=0;jvbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); /* The Atom Entry */ hbox=create_hbox_false(vboxframe); Entrys[0] = create_label_entry(hbox,_("Atom : "),(gint)(ScreenHeight*0.2),(gint)(ScreenHeight*0.15)); gtk_entry_set_text(GTK_ENTRY(Entrys[0]),Symb); gtk_editable_set_editable((GtkEditable*) Entrys[0],FALSE); Button = gtk_button_new_with_label(_(" Set ")); gtk_box_pack_start (GTK_BOX(hbox), Button, TRUE, TRUE, 5); g_signal_connect(G_OBJECT(Button), "clicked", (GCallback)select_atom,Entrys[0]); /* The Number of atoms Entry */ tlist = g_malloc(nlist*sizeof(gchar*)); for(i=0;iaction_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked",(GCallback)delete_child,GTK_OBJECT(Dlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); /* The "OK" button */ Button = create_button(Dlg,_("OK")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)build_linear_molecule,NULL); g_signal_connect_swapped(G_OBJECT(Button), "clicked",(GCallback)delete_child,GTK_OBJECT(Dlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(GTK_DIALOG(Dlg)->vbox); gtk_widget_show_all(GTK_DIALOG(Dlg)->action_area); gtk_widget_show_now(Dlg); fit_windows_position(GeomDlg, Dlg); } GabeditSrc250/src/Geometry/GeomSymmetry.c0000644000175100017510000003501313130665226020665 0ustar alloucheallouche/* GeomSymmetry.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Utils/GabeditTextEdit.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Jacobi.h" #include "../Utils/Transformation.h" #include "../Common/Windows.h" /********************************************************************************/ typedef struct _GeomPAxis { gchar *Symb; gdouble C[3]; }GeomPAxis; /********************************************************************************/ static gdouble Axis[3][3] = {{0.0,0.0,0.0},{0.0,0.0,0.0},{0.0,0.0,0.0}}; static gdouble I[3] = {0.0,0.0,0.0}; static gdouble K[3] = {0.0,0.0,0.0}; static gdouble D[3] = {0.0,0.0,0.0}; static GeomPAxis* geomPAxis = NULL; static gdouble Masse = 0; /********************************************************************************/ static void put_geom_in_text_widget(GtkWidget* TextWid) { gchar * t = NULL; guint n; GdkColor blue; GdkColor green; blue.red = 0; blue.green = 65535; blue.blue = 65535; green.red = 0; green.green = 50000; green.blue = 0; for(n=0;n1e-10) K[i] = x/I[i]; /* if(K[i]<-1) Debug(" %20s ","inf"); else Debug(" %20.8f ",K[i]); */ } /* Debug("\n"); Debug("Rotational constantes (GHz): "); for(i=0;i<3;i++) { if(K[i]<-1) Debug(" %20s ","inf"); else Debug(" %20.8f ",29.9792458*K[i]); } Debug("\n"); */ } /********************************************************************************/ static void set_axis_inertie_rot() { gdouble m[6]; gdouble** v = g_malloc(3*sizeof(gdouble*)); gint nrot; gint i; gint j; if(Natoms<1) return; for(i=0;i<3;i++) v[i] = g_malloc(3*sizeof(gdouble)); set_rot_matrice(m); jacobi(m, 3,I,v,&nrot); for(i=0;i<3;i++) for(j=0;j<3;j++) Axis[j][i] = v[j][i]; for(i=0;i<3;i++) g_free(v[i]); g_free(v); /* for(i=0;i<3;i++) Debug("%20.6f ",I[i]); Debug("\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) Debug("%20.6f ",Axis[j][i]); Debug("\n"); } */ set_rot_constantes(); set_dipole_to_principal_axis(); } /********************************************************************************/ static void create_frame_rotation(GtkWidget *Dialogue,GtkWidget *vboxframe) { GtkWidget *vbox; GtkWidget *Table; GtkWidget *Frame; GtkWidget *Label; guint i; guint j; gchar* textlabel[5][5] = { {" "," ",N_(" Axis n 1 "),N_(" Axis n 2 "),N_(" Axis n 3 ")}, {"I(uam 12C)",":"," "," "," "}, {"K(cm-1)",":"," "," "," "}, {"K(Ghz)",":"," "," "," "}, {N_("Mass "),"="," ","uam(12C)"," "} }; j = 4; textlabel[j][2] = g_strdup_printf("%.8f ",Masse); j = 1; for(i=2;i<5;i++) textlabel[j][i] = g_strdup_printf("%.8f ",I[i-2]); j = 2; for(i=2;i<5;i++) if(K[i-2]>0) textlabel[j][i] = g_strdup_printf("%.8f ",K[i-2]); else textlabel[j][i] = g_strdup_printf("%8s "," "); j = 3; for(i=2;i<5;i++) if(K[i-2]>0) textlabel[j][i] = g_strdup_printf("%.8f ",29.9792458*K[i-2]); else textlabel[j][i] = g_strdup_printf("%8s "," "); Frame = create_frame(Dialogue,vboxframe,_("Inertie Moment/Rotational Constants")); vbox = create_vbox(Frame); Table = gtk_table_new(5,5,FALSE); gtk_container_add(GTK_CONTAINER(vbox),Table); for(j=0;j<5;j++) for(i=0;i<5;i++) { Label = add_label_table(Table,textlabel[j][i],(gushort)j,(gushort)i); if(j== 1) set_fg_style(Label,20000,0,0); if(j== 2) set_fg_style(Label,0,20000,0); if(j== 3) set_fg_style(Label,0,0,20000); gtk_widget_hide(Label); gtk_widget_show(Label); } gtk_widget_show_all(Table); /* for(j=1;j<4;j++) for(i=2;i<5;i++) g_free(textlabel[j][i]); */ gtk_widget_show_all(Frame); } /********************************************************************************/ static void create_frame_dipole(GtkWidget *Dialogue,GtkWidget *vboxframe) { GtkWidget *vbox; GtkWidget *Table; GtkWidget *Frame; GtkWidget *Label; guint i; guint j; gdouble Module; gchar* textlabel[3][6] = { {" "," ",N_(" Axis n 1 "),N_(" Axis n 2 "),N_(" Axis n 3 "),N_(" Module ")}, {N_("Dipole(au)"),":"," "," "," "," "}, {N_("Dipole(Debye)"),":"," "," "," "," "}, }; Module = sqrt(D[0]*D[0] + D[1]*D[1] + D[2]*D[2]) ; j = 1; for(i=2;i<5;i++) textlabel[j][i] = g_strdup_printf("%.8f ",D[i-2]); textlabel[j][5] = g_strdup_printf("%.8f ",Module); j = 2; for(i=2;i<5;i++) textlabel[j][i] = g_strdup_printf("%.8f ",AUTODEB*D[i-2]); textlabel[j][5] = g_strdup_printf("%.8f ",AUTODEB*Module); Frame = create_frame(Dialogue,vboxframe,_("Dipole at principal axis")); vbox = create_vbox(Frame); Table = gtk_table_new(3,5,FALSE); gtk_container_add(GTK_CONTAINER(vbox),Table); for(j=0;j<3;j++) for(i=0;i<6;i++) { Label = add_label_table(Table,textlabel[j][i],(gushort)j,(gushort)i); if(j== 1) set_fg_style(Label,20000,0,0); if(j== 2) set_fg_style(Label,0,20000,0); gtk_widget_hide(Label); gtk_widget_show(Label); } gtk_widget_show_all(Table); /* for(j=1;j<3;j++) for(i=2;i<6;i++) g_free(textlabel[j][i]); */ gtk_widget_show_all(Frame); } /********************************************************************************/ void create_symmetry_window(GtkWidget* w,guint data) { GtkWidget *Dialogue = NULL; GtkWidget *Bouton; GtkWidget *frame, *vboxframe; gchar * title = NULL; if(Natoms<1) { Message(N_("Sorry Number of atoms is not positive"),N_("Error"),TRUE); return; } set_axis_inertie_rot(); Dialogue = gtk_dialog_new(); gtk_widget_realize(GTK_WIDGET(Dialogue)); if(Ddef) title = g_strdup(N_("Rotational constants & Dipole")); else title = g_strdup(N_("Rotational constants")); gtk_window_set_title(GTK_WINDOW(Dialogue),title); gtk_window_set_modal (GTK_WINDOW (Dialogue), TRUE); gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(Dialogue), "delete_event", (GCallback)destroy_button_windows, NULL); g_signal_connect(G_OBJECT(Dialogue), "delete_event", (GCallback)gtk_widget_destroy, NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); create_frame_rotation(Dialogue,vboxframe); if(Ddef) create_frame_dipole(Dialogue,vboxframe); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), FALSE); Bouton = create_button(Dialogue,"OK"); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), Bouton, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)destroy_button_windows, GTK_OBJECT(Dialogue)); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(Dialogue)); add_button_windows(title,Dialogue); gtk_widget_show_all(Dialogue); g_free(title); } /********************************************************************************/ void create_geometry_paxis_window(GtkWidget* w,guint data) { GtkWidget *Dialogue = NULL; GtkWidget *Bouton; GtkWidget *frame; GtkWidget *TextWid; gchar * title = NULL; if(Natoms<1) { Message(_("Sorry Number of atoms is not positive"),_("Error"),TRUE); return; } set_axis_inertie_rot(); set_geom_principal_axis(); Dialogue = gtk_dialog_new(); gtk_widget_realize(GTK_WIDGET(Dialogue)); title = g_strdup(_("Geometry at principal axis")); gtk_window_set_title(GTK_WINDOW(Dialogue),title); gtk_window_set_modal (GTK_WINDOW (Dialogue), TRUE); gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(Dialogue), "delete_event", (GCallback)destroy_button_windows, NULL); g_signal_connect(G_OBJECT(Dialogue), "delete_event", (GCallback)gtk_widget_destroy, NULL); TextWid = create_text_widget(GTK_WIDGET(GTK_DIALOG(Dialogue)->vbox),NULL,&frame); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), FALSE); Bouton = create_button(Dialogue,"OK"); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), Bouton, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)destroy_button_windows, GTK_OBJECT(Dialogue)); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(Dialogue)); add_button_windows(title,Dialogue); put_geom_in_text_widget(TextWid); gtk_window_set_default_size (GTK_WINDOW(Dialogue), ScreenWidth/3, ScreenHeight/3); gtk_widget_show_all(Dialogue); g_free(title); } GabeditSrc250/src/Geometry/InterfaceGeom.h0000644000175100017510000000354213130665226020743 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_INTERFACEGEOM_H__ #define __GABEDIT_INTERFACEGEOM_H__ void MessageGeom(gchar* message,gchar* type,gboolean center); void create_geom_interface (GabEditTypeFileGeom readfile); GtkWidget* create_geom(GtkWidget*win,GtkWidget *frame); void geom_is_open(); void geom_is_not_open(); void destroy_geometry(GtkWidget *win); void edit_geometry(); void create_units_option(GtkWidget *,gchar *); void selc_all_input_file(gchar *data); void create_geomXYZ_interface (GabEditTypeFileGeom readfile); void read_geom_any_file_dlg(); #endif /* __GABEDIT_INTERFACEGEOM_H__ */ GabeditSrc250/src/Geometry/FragmentsTree.h0000644000175100017510000000032113130665226020771 0ustar alloucheallouche #ifndef __GABEDIT_FRAGMENTSTREE_H__ #define __GABEDIT_FRAGMENTSTREE_H__ GtkWidget* addFragmentsTreeView(GtkWidget *box); void rafreshTreeView(GtkWidget *treeView); #endif /* __GABEDIT_FRAGMENTSTREE_H__ */ GabeditSrc250/src/Geometry/BuildPolyPeptide.h0000644000175100017510000000023413130665226021444 0ustar alloucheallouche #ifndef __GABEDIT_BUILDPOLYPEPTIDE_H__ #define __GABEDIT_BUILDPOLYPEPTIDE_H__ void build_polypeptide_dlg(); #endif /* __GABEDIT_BUILDPOLYPEPTIDE_H__ */ GabeditSrc250/src/Geometry/ExportGeom.c0000644000175100017510000001220113130665226020307 0ustar alloucheallouche/* ExportGeom.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Utils/Vector3d.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/Measure.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/ExportGeom.h" #include "../Common/Windows.h" #include "../Files/FileChooser.h" #ifdef DRAWGEOMGL /********************************************************************************/ static void export_file(GabeditFileChooser *SelecteurFichier , gint response_id) { gchar *fileName; FILE* file; gint buffsize = 0; gint state = GL2PS_OVERFLOW; gchar* type = NULL; gint gl2ps_type = GL2PS_PS; if(response_id != GTK_RESPONSE_OK) return; if(!GeomDrawingArea) return; if(!SelecteurFichier) return; type = (gchar*)g_object_get_data(G_OBJECT (SelecteurFichier), "Type"); if(!type) type = g_strdup("eps"); fileName = gabedit_file_chooser_get_current_file(SelecteurFichier); if(strstr(type,"eps")) gl2ps_type = GL2PS_EPS; if(strstr(type,"tex")) gl2ps_type = GL2PS_TEX; if(strstr(type,"pdf")) gl2ps_type = GL2PS_PDF; if(strstr(type,"svg")) gl2ps_type = GL2PS_SVG; if(strstr(type,"pgf")) gl2ps_type = GL2PS_PGF; file = FOpen(fileName, "wb"); printf("Writing '%s file'. Please wait... \n",type); while(state == GL2PS_OVERFLOW) { buffsize += 1024*1024; gl2psBeginPage("Gabedit", "Gabedit", NULL, gl2ps_type, GL2PS_BSP_SORT, GL2PS_OCCLUSION_CULL | GL2PS_USE_CURRENT_VIEWPORT | GL2PS_NO_BLENDING, GL_RGBA, 0, NULL, 0, 0, 0, buffsize, file,fileName); redrawGeomGL2PS(); state = gl2psEndPage(); } fclose(file); printf("End Writing '%s file'... \n",type); } /********************************************************************************/ void export_geometry_dlg(gchar* type) { gchar* title = g_strdup_printf("Create a %s file",type); gchar* patternsfiles[] = {"*","*.eps","*.ps","*.pdf","*.svg",NULL}; gchar* fileName = g_strdup_printf("gabedit.%s",type); gchar* filter = g_strdup_printf("*.%s",type); GtkWidget* win = choose_file_to_create(title, G_CALLBACK(export_file)); g_object_set_data(G_OBJECT (win), "Type",type); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(win), patternsfiles); gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(win),filter); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(win),fileName); g_free(title); g_free(fileName); g_free(filter); } #else /*****************************************************************************/ static void export_geometry_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; gchar* type = (gchar*)g_object_get_data(G_OBJECT (SelecFile), "Type"); if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } export_geometry(fileName, type); } /********************************************************************************/ void export_geometry_dlg(gchar* type) { gchar* title = g_strdup_printf("Create a %s file",type); gchar* patternsfiles[] = {"*","*.eps","*.ps","*.pdf","*.svg","*.pov",NULL}; gchar* fileName = g_strdup_printf("gabedit.%s",type); gchar* filter = g_strdup_printf("*.%s",type); GtkWidget* win = choose_file_to_create(title, G_CALLBACK(export_geometry_file)); g_object_set_data(G_OBJECT (win), "Type",type); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(win), patternsfiles); gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(win),filter); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(win),fileName); g_free(title); g_free(fileName); g_free(filter); } #endif GabeditSrc250/src/Geometry/ResultsAnalise.c0000644000175100017510000030625413130665226021172 0ustar alloucheallouche/* ResultsAnalise.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Geometry/ResultsAnalise.h" #include "../Geometry/EnergiesCurves.h" #include "../Common/Run.h" #include "../Display/ViewOrb.h" /*********************************************************************/ DataGeomConv free_geom_conv(DataGeomConv GeomConv) { gint i,j; for(i = 0;i0) { OK = TRUE; while(!feof(fd) && OK ) { if(!fgets(t, BSIZE,fd)) { OK = FALSE; break; } if(strstr(t,"HEAT_OF_FORM_UPDATED")) { gchar* t1 = strstr(t,"="); gint c; for(c=0;c0 && GeomConv[Ncalculs-1].Npoint == 0) { GeomConv[Ncalculs-1] = free_geom_conv(GeomConv[Ncalculs-1]); Ncalculs--; if(Ncalculs>0) GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); else { g_free(GeomConv); GeomConv = NULL; } } k = 0; for(i=0;(gint)i0 && GeomConv[Ncalculs-1].Npoint == 1) return 1; return 0; } /*********************************************************************/ DataGeomConv init_geom_mopac_irc_conv(gchar *namefile) { DataGeomConv GeomConv; gint i; GeomConv.Npoint = 0; GeomConv.Ntype = 3; GeomConv.TypeData = g_malloc(GeomConv.Ntype*sizeof(gchar*) ); GeomConv.fileType = GABEDIT_TYPEFILE_MOPAC_IRC; GeomConv.TypeData[0] = g_strdup(" Energy(KCal/Mol) "); GeomConv.TypeData[1] = g_strdup(" Potential"); GeomConv.TypeData[2] = g_strdup(" Energy lost"); GeomConv.Data = g_malloc(GeomConv.Ntype*sizeof(gchar**) ); for(i = 0;i0) { OK = TRUE; while(!feof(fd) && OK ) { if(!fgets(t, BSIZE,fd)) { OK = FALSE; break; } if( strstr(t,"POTENTIAL") && strstr(t,"LOST") && strstr(t,"TOTAL") ) { sprintf(elost," "); sprintf(potential," "); sprintf(e," "); if(!fgets(t, BSIZE,fd)) { OK = FALSE; break; } gint c; for(c=0;c0 && GeomConv[Ncalculs-1].Npoint == 0) { GeomConv[Ncalculs-1] = free_geom_conv(GeomConv[Ncalculs-1]); Ncalculs--; if(Ncalculs>0) GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); else { g_free(GeomConv); GeomConv = NULL; } } k = 0; for(i=0;(gint)i0) { OK = TRUE; while(!feof(fd) && OK ) { if(!fgets(t, BSIZE,fd)) { OK = FALSE; break; } if(strstr(t,"VARIABLE")&& strstr(t,"FUNCTION")) { sprintf(var1," "); sprintf(var2," "); sprintf(e," "); if(!fgets(t, BSIZE,fd)) { OK = FALSE; break; } gchar* t1 = strstr(t,":"); gint c; for(c=0;c0 && GeomConv[Ncalculs-1].Npoint == 0) { GeomConv[Ncalculs-1] = free_geom_conv(GeomConv[Ncalculs-1]); Ncalculs--; if(Ncalculs>0) GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); else { g_free(GeomConv); GeomConv = NULL; } } k = 0; for(i=0;(gint)i2 && strstr(t,"changing atomic coordinates:") ) { Ncalculs++; GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); GeomConv[Ncalculs-1] = init_geom_mpqc_conv(NomFichier); GeomConv[Ncalculs-1].TypeCalcul = g_malloc(100*sizeof(char)); sscanf(t,"%s",GeomConv[Ncalculs-1].TypeCalcul); } */ if(strstr(t,"changing atomic coordinates:")) { GeomConv[Ncalculs-1].TypeCalcul = g_malloc(100*sizeof(char)); sscanf(t,"%s",GeomConv[Ncalculs-1].TypeCalcul); newGeom = TRUE; if(strstr(t,"MBPT2")) mp2 = TRUE; } if(newGeom && mp2) { pdest = NULL; pdest = strstr( t,"MP2"); if(pdest) { if(strstr(t,"correlation")) pdest = NULL; else pdest = strstr( t,"energy"); if( pdest != NULL ) pdest = strstr( t,":"); } } if(newGeom && !mp2) { pdest = NULL; pdest = strstr( t,"total scf energy"); if( pdest != NULL ) pdest = strstr( t,"="); } if( pdest != NULL ) { pdest++; GeomConv[Ncalculs-1].Npoint++; if(GeomConv[Ncalculs-1].Npoint == 1 ) { GeomConv[Ncalculs-1].NumGeom = g_malloc(GeomConv[Ncalculs-1].Npoint*sizeof(gint)); for(i=0;(gint)i0) { pdest = strstr( t,":"); if(pdest) { pdest++; sscanf(pdest,"%s",GeomConv[Ncalculs-1].Data[1][GeomConv[Ncalculs-1].Npoint-1]); } } pdest = strstr( t,"Max Displacement"); if( pdest != NULL && GeomConv[Ncalculs-1].Npoint>0) { pdest = strstr( t,":"); if(pdest) { pdest++; sscanf(pdest,"%s",GeomConv[Ncalculs-1].Data[2][GeomConv[Ncalculs-1].Npoint-1]); } } } fclose(fd); if( Ncalculs>0 && GeomConv[Ncalculs-1].Npoint == 0) { GeomConv[Ncalculs-1] = free_geom_conv(GeomConv[Ncalculs-1]); Ncalculs--; if(Ncalculs>0) GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); else { g_free(GeomConv); GeomConv = NULL; } } /* printf("Npoint = %d\n ",GeomConv[Ncalculs-1].Npoint); printf("TypeCalcul = %s\n ",GeomConv[Ncalculs-1].TypeCalcul); for(i=0;i0) { if(Ncalculs==0) { Ncalculs = 1; GeomConv = g_malloc(sizeof(DataGeomConv) ); GeomConv[0] = init_geom_xyz_conv(fileName); } if(!fgets(t,taille,file)) break; /* title */ GeomConv[0].Npoint++; for(i=0;i0 && GeomConv[Ncalculs-1].Npoint == 0) { GeomConv[Ncalculs-1] = free_geom_conv(GeomConv[Ncalculs-1]); Ncalculs--; if(Ncalculs>0) GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); else { g_free(GeomConv); GeomConv = NULL; } } k = 0; for(i=0;(gint)i0 && GeomConv[Ncalculs-1].Npoint == 0) { GeomConv[Ncalculs-1] = free_geom_conv(GeomConv[Ncalculs-1]); Ncalculs--; if(Ncalculs>0) GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); else { g_free(GeomConv); GeomConv = NULL; } } k = 0; for(i=0;(gint)i0 && GeomConv[Ncalculs-1].Npoint == 0) { GeomConv[Ncalculs-1] = free_geom_conv(GeomConv[Ncalculs-1]); Ncalculs--; if(Ncalculs>0) GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); else { g_free(GeomConv); GeomConv = NULL; } } k = 0; for(i=0;(gint)i0 && GeomConv[Ncalculs-1].Npoint == 0) { GeomConv[Ncalculs-1] = free_geom_conv(GeomConv[Ncalculs-1]); Ncalculs--; if(Ncalculs>0) GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); else { g_free(GeomConv); GeomConv = NULL; } } k = 0; for(i=0;(gint)i2 && strstr(t,"Normal termination of Gaussian") ) { Ncalculs++; GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); GeomConv[Ncalculs-1] = init_geom_gauss_conv(NomFichier); } uppercase(t); if( strlen(t)>2 && t[1] == '#' && !GeomConv[Ncalculs-1].TypeCalcul) { GeomConv[Ncalculs-1].TypeCalcul = g_malloc(100*sizeof(char)); sscanf(t,"%s %s", temp, GeomConv[Ncalculs-1].TypeCalcul); } pdest = strstr( t,"SCF DONE"); if( pdest != NULL ) { pdest = strstr( t,"="); } if(!pdest) { pdest = strstr( t,"ENERGY="); if(pdest && t[1] == 'E' ) pdest = strstr( t,"="); else pdest = NULL; } if( pdest != NULL ) { pdest++; GeomConv[Ncalculs-1].Npoint++; if(GeomConv[Ncalculs-1].Npoint == 1 ) { GeomConv[Ncalculs-1].NumGeom = g_malloc(GeomConv[Ncalculs-1].Npoint*sizeof(gint)); for(i=0;(gint)i0) { for(i=1;(gint)i0 && GeomConv[Ncalculs-1].Npoint == 0) { GeomConv[Ncalculs-1] = free_geom_conv(GeomConv[Ncalculs-1]); Ncalculs--; if(Ncalculs>0) GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); else { g_free(GeomConv); GeomConv = NULL; } } /* printf("Npoint = %d\n ",GeomConv[Ncalculs-1].Npoint); printf("TypeCalcul = %s\n ",GeomConv[Ncalculs-1].TypeCalcul); for(i=0;i0) { GeomConv[Ncalculs-1].Npoint++; if(GeomConv[Ncalculs-1].Npoint == 1 ) { GeomConv[Ncalculs-1].NumGeom = g_malloc(GeomConv[Ncalculs-1].Npoint*sizeof(gint)); for(i=0;(gint)i0) GeomConv[Ncalculs-1].Npoint--; if( Ncalculs>0 && GeomConv[Ncalculs-1].Npoint == 0) { GeomConv[Ncalculs-1] = free_geom_conv(GeomConv[Ncalculs-1]); Ncalculs--; if(Ncalculs>0) GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); else { g_free(GeomConv); GeomConv = NULL; } } k = 0; for(i=0;(gint)i0) { GeomConv[Ncalculs-1].Npoint++; if(GeomConv[Ncalculs-1].Npoint == 1 ) { GeomConv[Ncalculs-1].NumGeom = g_malloc(GeomConv[Ncalculs-1].Npoint*sizeof(gint)); for(i=0;(gint)i0) GeomConv[Ncalculs-1].Npoint--; if( Ncalculs>0 && GeomConv[Ncalculs-1].Npoint == 0) { GeomConv[Ncalculs-1] = free_geom_conv(GeomConv[Ncalculs-1]); Ncalculs--; if(Ncalculs>0) GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); else { g_free(GeomConv); GeomConv = NULL; } } k = 0; for(i=0;(gint)i0) { Ok = TRUE; GeomConv[Ncalculs-1].Npoint++; if(GeomConv[Ncalculs-1].Npoint == 1 ) { GeomConv[Ncalculs-1].NumGeom = g_malloc(GeomConv[Ncalculs-1].Npoint*sizeof(gint)); for(i=0;(gint)i"); if(!pos) break; if(3!=sscanf(pos+1,"%lf %lf %lf",&x,&y,&z)) { Ok = FALSE; break;} X += x*x; Y += y*y; Z += z*z; nf++; } if(!Ok) break; if(nf<1) { Ok = FALSE; break;} X = sqrt(X/nf); Y = sqrt(Y/nf); Z = sqrt(Z/nf); while(!feof(fd)) { if(!fgets(t,BSIZE,fd)) { Ok = FALSE; break; } if(strstr(t,"/energy")) { Ok = FALSE; break;} if(strstr(t,"e_fr_energy")) break; } if(!Ok) break; if(!strstr(t,"e_fr_energy")) { Ok = FALSE; break;} pos = strstr(t,">"); if(!pos) { Ok = FALSE; break;} if(1!=sscanf(pos+1,"%lf",&energy)) { Ok = FALSE; break;} /* printf("energy = %f X = %f Y = %f Z = %f\n",energy,X,Y,Z);*/ GeomConv[Ncalculs-1].Data[0][GeomConv[Ncalculs-1].Npoint-1] = g_strdup_printf("%0.8f",energy); GeomConv[Ncalculs-1].Data[1][GeomConv[Ncalculs-1].Npoint-1] = g_strdup_printf("%0.6f",X); GeomConv[Ncalculs-1].Data[2][GeomConv[Ncalculs-1].Npoint-1] = g_strdup_printf("%0.6f",Y); GeomConv[Ncalculs-1].Data[3][GeomConv[Ncalculs-1].Npoint-1] = g_strdup_printf("%0.6f",Z); } } fclose(fd); if(!Ok && GeomConv && GeomConv[Ncalculs-1].Npoint>0) GeomConv[Ncalculs-1].Npoint--; if( Ncalculs>0 && GeomConv[Ncalculs-1].Npoint == 0) { GeomConv[Ncalculs-1] = free_geom_conv(GeomConv[Ncalculs-1]); Ncalculs--; if(Ncalculs>0) GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); else { g_free(GeomConv); GeomConv = NULL; } } k = 0; for(i=0;(gint)i2 && strstr(t,"GEOMETRY OPTIMIZATION STEP 1") ) { Ncalculs++; if(Ncalculs == 1) GeomConv = g_malloc(sizeof(DataGeomConv) ); else GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); GeomConv[Ncalculs-1] = init_geom_molpro_conv(NomFichier); } if( strlen(t)>2 && strstr(t,"Optimization point 1") && Ncalculs<1) { Ncalculs++; if(Ncalculs == 1) GeomConv = g_malloc(sizeof(DataGeomConv) ); else GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); GeomConv[Ncalculs-1] = init_geom_molpro_conv(NomFichier); } pdest = strstr( t,"Optimization point"); if( pdest != NULL && Ncalculs>0) { GeomConv[Ncalculs-1].Npoint++; if(GeomConv[Ncalculs-1].Npoint == 1 ) { GeomConv[Ncalculs-1].NumGeom = g_malloc(GeomConv[Ncalculs-1].Npoint*sizeof(gint)); for(i=0;(gint)i0 && GeomConv[Ncalculs-1].Npoint == 0) { GeomConv[Ncalculs-1] = free_geom_conv(GeomConv[Ncalculs-1]); Ncalculs--; if(Ncalculs>0) GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); else { g_free(GeomConv); GeomConv = NULL; } } k = 0; for(i=0;(gint)i2 && strstr(t,"Optimization Cycle: 1") ) { Ncalculs++; if(Ncalculs == 1) GeomConv = g_malloc(sizeof(DataGeomConv) ); else GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); GeomConv[Ncalculs-1] = init_geom_qchem_conv(NomFichier); } pdest = strstr( t,"Optimization Cycle:"); if( pdest != NULL && Ncalculs>0) { GeomConv[Ncalculs-1].Npoint++; if(GeomConv[Ncalculs-1].Npoint == 1 ) { GeomConv[Ncalculs-1].NumGeom = g_malloc(GeomConv[Ncalculs-1].Npoint*sizeof(gint)); for(i=0;(gint)i0 && GeomConv[Ncalculs-1].Npoint == 0) { GeomConv[Ncalculs-1] = free_geom_conv(GeomConv[Ncalculs-1]); Ncalculs--; if(Ncalculs>0) GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); else { g_free(GeomConv); GeomConv = NULL; } } k = 0; for(i=0;(gint)i0) { GeomConv[Ncalculs-1].Npoint++; if(GeomConv[Ncalculs-1].Npoint == 1 ) { GeomConv[Ncalculs-1].NumGeom = g_malloc(GeomConv[Ncalculs-1].Npoint*sizeof(gint)); for(i=0;(gint)i0 && GeomConv[Ncalculs-1].Npoint>0) GeomConv[Ncalculs-1].Npoint--; if( Ncalculs>0 && GeomConv[Ncalculs-1].Npoint == 0) { GeomConv[Ncalculs-1] = free_geom_conv(GeomConv[Ncalculs-1]); Ncalculs--; if(Ncalculs>0) GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); else { g_free(GeomConv); GeomConv = NULL; } } k = 0; for(i=0;(gint)i0) { GeomConv[Ncalculs-1].Npoint++; if(GeomConv[Ncalculs-1].Npoint == 1 ) { GeomConv[Ncalculs-1].NumGeom = g_malloc(GeomConv[Ncalculs-1].Npoint*sizeof(gint)); for(i=0;(gint)i0 && GeomConv[Ncalculs-1].Npoint>0) GeomConv[Ncalculs-1].Npoint--; if( Ncalculs>0 && GeomConv[Ncalculs-1].Npoint == 0) { GeomConv[Ncalculs-1] = free_geom_conv(GeomConv[Ncalculs-1]); Ncalculs--; if(Ncalculs>0) GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); else { g_free(GeomConv); GeomConv = NULL; } } k = 0; for(i=0;(gint)i0 && strstr( t,"ENERGY")) { while(!feof(fd)) { if(!fgets(t,taille,fd)) break; str_delete_n(t); delete_last_spaces(t); delete_first_spaces(t); if(!isFloat(t)) { /* printf("%s is not a real \n",t);*/ break; } GeomConv[Ncalculs-1].Npoint++; if(GeomConv[Ncalculs-1].Npoint == 1 ) { GeomConv[Ncalculs-1].NumGeom = g_malloc(GeomConv[Ncalculs-1].Npoint*sizeof(gint)); for(i=0;(gint)i0 && GeomConv[Ncalculs-1].Npoint>0 && strstr( t,"MAX-FORCE")) { i = 0; while(!feof(fd)) { if(!fgets(t,taille,fd)) break; if(i==GeomConv[Ncalculs-1].Npoint) break; str_delete_n(t); delete_last_spaces(t); delete_first_spaces(t); if(!isFloat(t)) break; sscanf(t,"%s", GeomConv[Ncalculs-1].Data[1][i]); i++; } GeomConv[Ncalculs-1].Npoint = i; } else if( Ncalculs>0 && GeomConv[Ncalculs-1].Npoint>0 && strstr( t,"RMS-FORCE")) { i = 0; while(!feof(fd)) { if(!fgets(t,taille,fd)) break; if(i==GeomConv[Ncalculs-1].Npoint) break; str_delete_n(t); delete_last_spaces(t); delete_first_spaces(t); if(!isFloat(t)) break; sscanf(t,"%s", GeomConv[Ncalculs-1].Data[2][i]); i++; } GeomConv[Ncalculs-1].Npoint = i; } else if( Ncalculs>0 && GeomConv[Ncalculs-1].Npoint>0 && strstr( t,"MAX-STEP") ) { i = 0; while(!feof(fd)) { if(!fgets(t,taille,fd)) break; if(i==GeomConv[Ncalculs-1].Npoint) break; str_delete_n(t); delete_last_spaces(t); delete_first_spaces(t); if(!isFloat(t)) break; sscanf(t,"%s", GeomConv[Ncalculs-1].Data[3][i]); i++; } GeomConv[Ncalculs-1].Npoint = i; } else if( Ncalculs>0 && GeomConv[Ncalculs-1].Npoint>0 && strstr( t,"RMS-STEP")) { i = 0; while(!feof(fd)) { if(!fgets(t,taille,fd)) break; if(i==GeomConv[Ncalculs-1].Npoint) break; str_delete_n(t); delete_last_spaces(t); delete_first_spaces(t); if(!isFloat(t)) break; sscanf(t,"%s", GeomConv[Ncalculs-1].Data[4][i]); i++; } GeomConv[Ncalculs-1].Npoint = i; } else if(!fgets(t,taille,fd)) break; } fclose(fd); if( Ncalculs>0 && GeomConv[Ncalculs-1].Npoint == 0) { GeomConv[Ncalculs-1] = free_geom_conv(GeomConv[Ncalculs-1]); Ncalculs--; if(Ncalculs>0) GeomConv = g_realloc(GeomConv, Ncalculs*sizeof(DataGeomConv) ); else { g_free(GeomConv); GeomConv = NULL; } } /* printf("Ncalculs = %d\n ",Ncalculs); if(Ncalculs>0) { printf("Npoint = %d\n ",GeomConv[Ncalculs-1].Npoint); printf("TypeCalcul = %s\n ",GeomConv[Ncalculs-1].TypeCalcul); for(i=0;i0) GeomConv.TypeData = g_malloc(GeomConv.Ntype*sizeof(gchar*) ); else GeomConv.TypeData = NULL; GeomConv.fileType = GABEDIT_TYPEFILE_GABEDIT; for(i=0;i0) GeomConv.Data = g_malloc(GeomConv.Ntype*sizeof(gchar**) ); else GeomConv.Data = NULL; for(i = 0;i0) GeomConv[Ncalculs-1] = free_geom_conv(GeomConv[Ncalculs-1]); return 3; } /* printf("Ncalculs = %d\n ",Ncalculs); if(Ncalculs>0) { printf("Npoint = %d\n ",GeomConv[Ncalculs-1].Npoint); printf("TypeCalcul = %s\n ",GeomConv[Ncalculs-1].TypeCalcul); for(i=0;i=4) { ext[1]='o'; ext[2]='u'; ext[3]='t'; fileType = get_type_file(fileName); if(fileType == GABEDIT_TYPEFILE_MOPAC_SCAN) find_energy_mopac_scan_output(fileName); if(fileType == GABEDIT_TYPEFILE_MOPAC_IRC) find_energy_mopac_irc_output(fileName); } } if( iprogram == PROG_IS_MOLCAS) { gchar* fileName = g_strdup_printf("%s%s%s.geo.molden",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.projectname); find_energy_molden(fileName); g_free(fileName); } g_free(fileName); } /************************************************************************************/ void read_geometries_conv_dalton(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } find_energy_dalton_output(fileName); } /************************************************************************************/ void read_geometries_conv_mopac(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } find_energy_mopac_aux(fileName); } /************************************************************************************/ void read_geometries_conv_mopac_irc(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } find_energy_mopac_irc_output(fileName); } /************************************************************************************/ void read_geometries_conv_mopac_scan(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } find_energy_mopac_scan_output(fileName); } /************************************************************************************/ void read_geometries_conv_gamess(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } find_energy_gamess_output(fileName); } /************************************************************************************/ void read_geometries_irc_gamess(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } find_energy_gamess_irc(fileName); } /************************************************************************************/ /************************************************************************************/ void read_geometries_conv_gaussian(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } find_energy_gauss_output(fileName); } /************************************************************************************/ void read_geometries_conv_molpro(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } find_energy_molpro_log(fileName); } /************************************************************************************/ void read_geometries_conv_orca(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } find_energy_orca_output(fileName); } /************************************************************************************/ void read_geometries_conv_vasp_outcar(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } find_energy_vasp_outcar(fileName); } /************************************************************************************/ void read_geometries_conv_vasp_xml(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } find_energy_vasp_xml(fileName); } /************************************************************************************/ void read_geometries_conv_nwchem(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } find_energy_nwchem_log(fileName); } /************************************************************************************/ void read_geometries_conv_psicode(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } find_energy_psicode_log(fileName); } /************************************************************************************/ void read_geometries_conv_qchem(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } find_energy_qchem_log(fileName); } /*************************************************************************************/ void read_geometries_conv_gabedit(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!FileName) || (strcmp(FileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } find_energy_gabedit(FileName); } /************************************************************************************/ void read_geometries_conv_molden(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!FileName) || (strcmp(FileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } find_energy_molden(FileName); } /************************************************************************************/ void read_geometries_conv_mpqc(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } find_energy_mpqc_output(fileName); } /************************************************************************************/ void read_geometries_conv_xyz(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } find_energy_xyz(fileName); } /********************************************************************************/ /********************************************************************************/ static void sensitive_password() { GtkWidget* Table; Table = g_object_get_data(G_OBJECT (ResultRemoteFrame), "PasswordTable"); if(fileopen.netWorkProtocol==GABEDIT_NETWORK_FTP_RSH) gtk_widget_show(Table); else { #ifdef G_OS_WIN32 gtk_widget_show(Table); #else gtk_widget_hide(Table); #endif } } /********************************************************************************/ static void sensitive_buttons_false() { sensitive_password(); gtk_widget_set_sensitive(ResultRemoteFrame, FALSE); } /********************************************************************************/ static void sensitive_buttons_true() { sensitive_password(); gtk_widget_set_sensitive(ResultRemoteFrame, TRUE); if( fileopen.remotehost && !this_is_a_backspace(fileopen.remotehost) && fileopen.remoteuser && !this_is_a_backspace(fileopen.remoteuser) ) { if(iprogram == PROG_IS_GAUSS) { GtkWidget* button = g_object_get_data(G_OBJECT(ResultRemoteFrame), "OutButton"); gtk_widget_set_sensitive(button, FALSE); button = g_object_get_data(G_OBJECT(ResultRemoteFrame),"AuxButton"); gtk_widget_set_sensitive(button, FALSE); } else { GtkWidget* button = g_object_get_data(G_OBJECT(ResultRemoteFrame),"OutButton"); gtk_widget_set_sensitive(button, TRUE); button = g_object_get_data(G_OBJECT(ResultRemoteFrame),"AuxButton"); gtk_widget_set_sensitive(button, TRUE); } } else gtk_widget_set_sensitive(ResultRemoteFrame, FALSE); } /*********************************************************************/ void set_sensitive_remote_frame(gboolean sensitive) { if(sensitive) sensitive_buttons_true(); else sensitive_buttons_false(); } /*********************************************************************/ void create_bar_result(GtkWidget* Vbox) { GtkWidget *Button; GtkWidget *vboxframe; GtkWidget *frame; GtkWidget *handlebox; GtkWidget *vbox; GtkWidget *Table; /* GtkWidget *Label;*/ GtkWidget *hseparator; static gint log = LOGFILE; static gint out = OUTFILE; static gint mol = MOLDENFILE; static gint all = ALLFILES; /* here init_geom_gauss_conv(); */ handlebox =gtk_handle_box_new (); g_object_ref (handlebox); gtk_container_add( GTK_CONTAINER (Vbox), handlebox); gtk_handle_box_set_shadow_type (GTK_HANDLE_BOX(handlebox),GTK_SHADOW_IN); /* GTK_SHADOW_NONE, GTK_SHADOW_IN, GTK_SHADOW_OUT, GTK_SHADOW_ETCHED_IN, GTK_SHADOW_ETCHED_OUT */ gtk_handle_box_set_handle_position (GTK_HANDLE_BOX(handlebox),GTK_POS_TOP); gtk_widget_show (handlebox); vbox = gtk_vbox_new (FALSE, 2); gtk_container_add( GTK_CONTAINER(handlebox), vbox); gtk_widget_show (vbox); frame = gtk_frame_new ("Local"); gtk_container_set_border_width (GTK_CONTAINER (frame), 2); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_box_pack_start (GTK_BOX(vbox), frame, FALSE, TRUE, 2); gtk_widget_show (frame); vboxframe = create_vbox(frame); ResultLocalFrame = frame; /* The Update Button */ Button = create_button(Fenetre,_("Update")); gtk_box_pack_start (GTK_BOX(vboxframe ), Button, FALSE, TRUE, 2); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show(Button); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)view_result,NULL); Button = create_button(Fenetre,_("Go to end")); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)goto_end_result,NULL); gtk_box_pack_start (GTK_BOX(vboxframe ), Button, FALSE, TRUE, 2); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_show(Button); Button = create_button(Fenetre,_("Update/end")); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)view_result_end,NULL); gtk_box_pack_start (GTK_BOX(vboxframe ), Button, FALSE, TRUE, 2); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_show(Button); Button = create_button(Fenetre,_("Geom. Conv.")); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)find_energy_all,NULL); gtk_box_pack_start (GTK_BOX(vboxframe ), Button, FALSE, TRUE, 2); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_show(Button); Button = create_button(Fenetre,_("Dens. Orb.")); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)draw_density_orbitals_gamess_or_gauss_or_molcas_or_molpro,NULL); gtk_box_pack_start (GTK_BOX(vboxframe ), Button, FALSE, TRUE, 2); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_show(Button); frame = gtk_frame_new (_("Remote")); gtk_container_set_border_width (GTK_CONTAINER (frame), 2); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_box_pack_start (GTK_BOX(vbox), frame, FALSE, TRUE, 2); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(3,1,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); gtk_widget_show_all(vboxframe); /* Label = add_label_table(Table,_("Password : "),0,0);*/ add_label_table(Table,_("Password : "),0,0); ResultEntryPass = gtk_entry_new(); gtk_entry_set_max_length (GTK_ENTRY(ResultEntryPass),15); gtk_widget_set_size_request (ResultEntryPass,(gint)(ScreenHeight*0.05),-1); gtk_entry_set_visibility(GTK_ENTRY (ResultEntryPass),FALSE); gtk_table_attach(GTK_TABLE(Table),ResultEntryPass,0,1,1,2, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(Table),hseparator,0,1,2,3, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); ResultRemoteFrame = frame; gtk_widget_set_sensitive(ResultRemoteFrame, FALSE); g_object_set_data(G_OBJECT (ResultRemoteFrame), "PasswordTable",Table); Button = create_button(Fenetre,_("Get All files")); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)get_file_frome_remote_host,&all); gtk_box_pack_start (GTK_BOX(vboxframe ), Button, FALSE, TRUE, 2); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_show(Button); g_object_set_data(G_OBJECT (ResultRemoteFrame), "AllButton",Button); g_signal_connect_swapped(G_OBJECT (ResultEntryPass), "activate", (GCallback) gtk_button_clicked, GTK_OBJECT (Button)); Button = create_button(Fenetre,_("Get log file")); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)get_file_frome_remote_host,&log); gtk_box_pack_start (GTK_BOX(vboxframe ), Button, FALSE, TRUE, 2); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_show(Button); g_object_set_data(G_OBJECT (ResultRemoteFrame), "LogButton",Button); Button = create_button(Fenetre,_("Get out file")); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)get_file_frome_remote_host,&out); gtk_box_pack_start (GTK_BOX(vboxframe ), Button, FALSE, TRUE, 2); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_show(Button); g_object_set_data(G_OBJECT (ResultRemoteFrame), "OutButton",Button); Button = create_button(Fenetre,_("Get aux. files")); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)get_file_frome_remote_host,&mol); gtk_box_pack_start (GTK_BOX(vboxframe ), Button, FALSE, TRUE, 2); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_show(Button); g_object_set_data(G_OBJECT (ResultRemoteFrame), "AuxButton",Button); } GabeditSrc250/src/Geometry/SelectionDlg.c0000644000175100017510000013570213130665226020606 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include "../../Config.h" #include "../Utils/Constants.h" #include "../Common/Global.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Common/StockIcons.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/DrawGeom.h" /************************************************************************************************************/ typedef struct _DataSelectionTree DataSelectionTree; struct _DataSelectionTree { gchar type[100]; gchar name[100]; gint number; gboolean checked; }; typedef enum { LIST_TYPE = 0, LIST_NAME, LIST_CHECK, VISIBLE_COLUMN, LIST_DATA /* column for data, this column is not visible */ }ListColumnsTypes; static gchar* typeSymbols ="Symbols"; static gchar* typeMM ="MM Type"; static gchar* typePDB ="MM PDB"; static gchar* typeResidues ="Residues"; static gchar* typeResidueNumbers ="Residue#"; /********************************************************************************/ static void eventDispatcher(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; GtkTreeIter iter; GtkTreeModel *model; gchar selectedRow[100]; if (!event) return; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); sprintf(selectedRow ,"%s",gtk_tree_path_to_string(path)); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free(path); /* printf("%s\n",selectedRow);*/ } } GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event); } /********************************************************************************/ static DataSelectionTree* newDataSelectionTree(gchar* type, gchar* name, gint number) { DataSelectionTree* dataTree; dataTree = g_malloc(sizeof(DataSelectionTree)); sprintf(dataTree->type,"UNK"); if(type) sprintf(dataTree->type,"%s",type); sprintf(dataTree->name,"UNK"); if(type) sprintf(dataTree->name,"%s",name); dataTree->number = number; dataTree->checked = FALSE; return dataTree; } /********************************************************************************/ static void freeDataSelectionTree(GtkWidget *treeView) { DataSelectionTree* data = NULL; gint i = 0; gint j = 0; gchar* pathString = NULL; gchar* pathStringJ = NULL; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); pathString = g_strdup_printf("%d", i); while (gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE) { gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1); if(data) g_free(data); j = 0; pathStringJ = g_strdup_printf("%d:%d", i,j); while (gtk_tree_model_get_iter_from_string (model, &iter, pathStringJ) == TRUE) { gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1); if(data) g_free(data); j++; g_free(pathStringJ); pathStringJ = g_strdup_printf("%d:%d", i,j); } g_free(pathStringJ); i++; g_free(pathString); pathString = g_strdup_printf("%d", i); } g_free(pathString); } /********************************************************************************/ static void apply(GtkWidget *treeView) { DataSelectionTree* data = NULL; gint i = 0; gint j = 0; gint k = 0; gchar* pathString = NULL; gchar* pathStringJ = NULL; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms = g_malloc(Natoms*sizeof(gint)); k = 0; pathString = g_strdup_printf("%d", i); while (gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE) { /* printf("path %s\n",pathString);*/ j = 0; pathStringJ = g_strdup_printf("%d:%d", i,j); while (gtk_tree_model_get_iter_from_string (model, &iter, pathStringJ) == TRUE) { /* printf("pathJ %s\n",pathStringJ);*/ gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1); if(data && data->checked) { gint ia; for (ia=0;ia<(gint)Natoms;ia++) { if(!geometry[ia].show) continue; if((!strcmp(data->type,typeSymbols) && !strcmp(geometry[ia].Prop.symbol,data->name)) ||(!strcmp(data->type,typeMM) && !strcmp(geometry[ia].mmType,data->name)) ||(!strcmp(data->type,typePDB) && !strcmp(geometry[ia].pdbType,data->name)) ||(!strcmp(data->type,typeResidues) && !strcmp(geometry[ia].Residue,data->name)) ||(!strcmp(data->type,typeResidueNumbers) && !strcmp(geometry[ia].Residue,data->name) && geometry[ia].ResidueNumber==data->number)) { gint ki; gboolean sel = FALSE; for(ki=0;kitype, data->name,data->number, data->checked);*/ } j++; g_free(pathStringJ); pathStringJ = g_strdup_printf("%d:%d", i,j); } g_free(pathStringJ); i++; g_free(pathString); pathString = g_strdup_printf("%d", i); } g_free(pathString); NFatoms = k; if(k<1) { NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms=NULL; } else { NumFatoms = g_realloc(NumFatoms,NFatoms*sizeof(gint)); } drawGeom(); } /********************************************************************************/ static void selUnselType(GtkWidget *treeView, gint sel, gint i) { /* sel = 1 => select All * = 0 => unselect all * = 2 => invert selection */ DataSelectionTree* data = NULL; gint j = 0; gchar* pathString = NULL; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); gint column = 2; j = 0; pathString = g_strdup_printf("%d:%d", i,j); while (gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE) { /* printf("pathJ %s\n",pathString);*/ gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1); if(data) { if(sel == 1 ) data->checked = TRUE; if(sel == 0 ) data->checked = FALSE; if(sel == 2 ) data->checked = !data->checked; gtk_tree_store_set (GTK_TREE_STORE (model), &iter, column, data->checked, -1); } j++; g_free(pathString); pathString = g_strdup_printf("%d:%d", i,j); } g_free(pathString); } /********************************************************************************/ /* sel = 1 => select All * = 0 => unselect all * = 2 => invert selection */ /* static void selUnselAll(GtkWidget *treeView, gint sel) { DataSelectionTree* data = NULL; gint i = 0; gint j = 0; gchar* pathString = NULL; gchar* pathStringJ = NULL; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); gint column = 2; pathString = g_strdup_printf("%d", i); while (gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE) { j = 0; pathStringJ = g_strdup_printf("%d:%d", i,j); while (gtk_tree_model_get_iter_from_string (model, &iter, pathStringJ) == TRUE) { gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1); if(data) { if(sel == 1 ) data->checked = TRUE; if(sel == 0 ) data->checked = FALSE; if(sel == 2 ) data->checked = !data->checked; gtk_tree_store_set (GTK_TREE_STORE (model), &iter, column, data->checked, -1); } j++; g_free(pathStringJ); pathStringJ = g_strdup_printf("%d:%d", i,j); } g_free(pathStringJ); i++; g_free(pathString); pathString = g_strdup_printf("%d", i); } g_free(pathString); } */ /********************************************************************************/ /* static void invertSelection(GtkWidget *treeView) { selUnselAll(treeView, 2); } */ /********************************************************************************/ static void destroyDlg(GtkWidget* win, gpointer data) { GtkWidget* treeView = g_object_get_data(G_OBJECT(win),"TreeView"); if(treeView) freeDataSelectionTree(treeView); gtk_widget_destroy(win); } /********************************************************************************/ /* static gboolean* getExpandInfo(GtkWidget *treeView) { gint i; gboolean* expandeds = NULL; gint nNodes = 0; gchar* pathString = NULL; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); nNodes = 0; pathString = g_strdup_printf("%d", nNodes); while (gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE) { nNodes++; g_free(pathString); pathString = g_strdup_printf("%d", nNodes); } g_free(pathString); if(nNodes<1) return NULL; expandeds = g_malloc((nNodes+1)*sizeof(gboolean)); for(i=0;ichecked = value; /* printf("%s %s %d cheked = %d\n",dataTree->type, dataTree->name,dataTree->number, dataTree->checked);*/ } if(!strstr(path_string,":")) selUnselType(treeView, value, atoi(path_string)); } /********************************************************************************/ static void addFeuille(GtkWidget *treeView, GtkTreeIter *parent, gchar* type, gchar* name, gint number) { GtkTreeIter feuille; DataSelectionTree* dataTree; GtkTreeModel *model; GtkTreeStore *store; model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); store = GTK_TREE_STORE (model); dataTree = newDataSelectionTree(type,name,number); gtk_tree_store_append(store, &feuille, parent); gtk_tree_store_set (store, &feuille, LIST_TYPE, " ", -1); if(number<0) gtk_tree_store_set (store, &feuille, LIST_NAME, name, -1); else { gchar* txt = g_strdup_printf("%s%d",name,number+1); gtk_tree_store_set (store, &feuille, LIST_NAME, txt, -1); } gtk_tree_store_set (store, &feuille, LIST_CHECK, FALSE, -1); gtk_tree_store_set (store, &feuille, LIST_DATA, dataTree, -1); gtk_tree_store_set (store, &feuille, VISIBLE_COLUMN, TRUE, -1); } /********************************************************************************/ static GtkTreeIter addNode(GtkWidget *treeView, gchar *text) { GtkTreeIter node; DataSelectionTree* dataTree; GtkTreeModel *model; GtkTreeStore *store; model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); store = GTK_TREE_STORE (model); gtk_tree_store_append(store, &node, NULL); dataTree = newDataSelectionTree(text," ",-1); gtk_tree_store_set (store, &node, LIST_TYPE, text, -1); gtk_tree_store_set (store, &node, LIST_NAME, " ", -1); gtk_tree_store_set (store, &node, LIST_CHECK, FALSE, -1); gtk_tree_store_set (store, &node, VISIBLE_COLUMN, TRUE, -1); gtk_tree_store_set (store, &node, LIST_DATA, dataTree, -1); return node; } /********************************************************************************/ gchar** getListResidueNumbers(gint* nlist, gint**nums) { gchar** t = NULL; gint* num = NULL; gint i; gint j; *nlist = 0; if(Natoms<1) return NULL; t = g_malloc(Natoms*sizeof(gchar*)); num = g_malloc(Natoms*sizeof(gint)); *nlist = 1; t[*nlist-1] = g_strdup(geometry0[0].Residue); num[*nlist-1] = geometry0[0].ResidueNumber; for(i=1;i0) k = j; if(i != k) { gchar* tmp = strs[i]; strs[i] = strs[k]; strs[k] = tmp; } } } /********************************************************************************/ static gchar** freeList(gchar** strs, gint nlist) { gint i; for(i=0;i=n) break; } n = k; if(n>0) num = g_realloc(num,n*sizeof(gint)); if(NumFatoms) g_free(NumFatoms); NumFatoms = num; NFatoms = n; RebuildGeom=TRUE; drawGeom(); } /********************************************************************************/ void unSelectAllAtoms() { if(Natoms<1) return; if(NFatoms<1) return; NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms = NULL; drawGeom(); } /*****************************************************************************/ void SelectLayerAtoms(GabEditLayerType layer) { gint i; gint k = 0; if(Natoms<1) return; NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms = g_malloc(Natoms*sizeof(gint)); k = 0; for (i=0;i<(gint)Natoms;i++) { if(!geometry[i].show) continue; if(layer==geometry[i].Layer) NumFatoms[k++]= geometry[i].N; } NFatoms = k; if(k<1) { NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms=NULL; } else { NumFatoms = g_realloc(NumFatoms,NFatoms*sizeof(gint)); } drawGeom(); } /********************************************************************************/ void SelectFixedVariableAtoms(gboolean variable) { gint i; gint k = 0; if(Natoms<1) return; NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms = g_malloc(Natoms*sizeof(gint)); k = 0; for (i=0;i<(gint)Natoms;i++) { if(!geometry[i].show) continue; if(variable==geometry[i].Variable) NumFatoms[k++]= geometry[i].N; } NFatoms = k; if(k<1) { NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms=NULL; } else { NumFatoms = g_realloc(NumFatoms,NFatoms*sizeof(gint)); } drawGeom(); } /********************************************************************************/ void SelectFirstResidue() { gint i; gint k = 0; if(Natoms<1) return; NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms = g_malloc(Natoms*sizeof(gint)); k = 0; for (i=0;i<(gint)Natoms;i++) { if(!geometry[i].show) continue; if(0==geometry[i].ResidueNumber) NumFatoms[k++]= geometry[i].N; } NFatoms = k; if(k<1) { NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms=NULL; } else { NumFatoms = g_realloc(NumFatoms,NFatoms*sizeof(gint)); } drawGeom(); } /********************************************************************************/ void SelectLastResidue() { gint i; gint k = 0; gint rMax = 0; if(Natoms<1) return; for (i=1;i<(gint)Natoms;i++) { if(rMaxvbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); n=0; t = getListResidues(&n); entry = create_label_combo(hbox,_(" Residue Name : "),t,n, TRUE,-1,-1); gtk_editable_set_editable((GtkEditable*) entry,TRUE); if(t) freeList(t,n); gtk_widget_realize(winDlg); button = create_button(winDlg,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); button = create_button(winDlg,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)selectResidueByName,entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show_all(winDlg); } /********************************************************************************/ static void selectResidueByNumber(GtkWidget* button, GtkWidget* entry) { gint i; gint k = 0; G_CONST_RETURN gchar *rName; gint n = 1; if(Natoms<1) return; rName = gtk_entry_get_text(GTK_ENTRY(entry)); n = atoi(rName); NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms = g_malloc(Natoms*sizeof(gint)); k = 0; for (i=0;i<(gint)Natoms;i++) { if(!geometry[i].show) continue; if(geometry[i].ResidueNumber == n-1) NumFatoms[k++]= geometry[i].N; } NFatoms = k; if(k<1) { NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms=NULL; } else { NumFatoms = g_realloc(NumFatoms,NFatoms*sizeof(gint)); } drawGeom(); } /********************************************************************************/ void selectResidueByNumberDlg() { GtkWidget *winDlg; GtkWidget *button; GtkWidget *hbox; GtkWidget *entry; GtkWidget *frame; GtkWidget *vboxframe; gint n=0; gchar** t = NULL; winDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(winDlg),_("Select by Residue number")); gtk_window_set_position(GTK_WINDOW(winDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(winDlg),GTK_WINDOW(GeomDlg)); add_child(GeomDlg,winDlg,gtk_widget_destroy,_(" Sel. Res. ")); g_signal_connect(G_OBJECT(winDlg),"delete_event",(GCallback)delete_child,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); n=1; t = g_malloc(2*sizeof(gchar*)); t[0] = g_strdup("1"); t[1] = NULL; entry = create_label_combo(hbox,_(" Residue Number : "),t,n, TRUE,-1,-1); gtk_editable_set_editable((GtkEditable*) entry,TRUE); if(t) freeList(t,n); gtk_widget_realize(winDlg); button = create_button(winDlg,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); button = create_button(winDlg,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)selectResidueByNumber,entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show_all(winDlg); } /********************************************************************************/ static void selectAtomsByMMType(GtkWidget* button, GtkWidget* entry) { gint i; gint k = 0; G_CONST_RETURN gchar *rName; if(Natoms<1) return; rName = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(rName)<1) return; NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms = g_malloc(Natoms*sizeof(gint)); k = 0; for (i=0;i<(gint)Natoms;i++) { if(!geometry[i].show) continue; if(!strcmp(geometry[i].mmType,rName)) NumFatoms[k++]= geometry[i].N; } NFatoms = k; if(k<1) { NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms=NULL; } else { NumFatoms = g_realloc(NumFatoms,NFatoms*sizeof(gint)); } drawGeom(); } /********************************************************************************/ void selectAtomsByMMTypeDlg() { GtkWidget *winDlg; GtkWidget *button; GtkWidget *hbox; GtkWidget *entry; GtkWidget *frame; GtkWidget *vboxframe; gint n=0; gchar** t = NULL; winDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(winDlg),_("Select by Type")); gtk_window_set_position(GTK_WINDOW(winDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(winDlg),GTK_WINDOW(GeomDlg)); add_child(GeomDlg,winDlg,gtk_widget_destroy,_(" Sel. Res. ")); g_signal_connect(G_OBJECT(winDlg),"delete_event",(GCallback)delete_child,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); n=0; t = getListGeomMMTypes(&n); entry = create_label_combo(hbox,_(" Type Name : "),t,n, TRUE,-1,-1); gtk_editable_set_editable((GtkEditable*) entry,TRUE); if(t) freeList(t,n); gtk_widget_realize(winDlg); button = create_button(winDlg,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); button = create_button(winDlg,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)selectAtomsByMMType,entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show_all(winDlg); } /********************************************************************************/ static void selectAtomsByPDBType(GtkWidget* button, GtkWidget* entry) { gint i; gint k = 0; G_CONST_RETURN gchar *rName; if(Natoms<1) return; rName = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(rName)<1) return; NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms = g_malloc(Natoms*sizeof(gint)); k = 0; for (i=0;i<(gint)Natoms;i++) { if(!geometry[i].show) continue; if(!strcmp(geometry[i].pdbType,rName)) NumFatoms[k++]= geometry[i].N; } NFatoms = k; if(k<1) { NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms=NULL; } else { NumFatoms = g_realloc(NumFatoms,NFatoms*sizeof(gint)); } drawGeom(); } /********************************************************************************/ void selectAtomsByPDBTypeDlg() { GtkWidget *winDlg; GtkWidget *button; GtkWidget *hbox; GtkWidget *entry; GtkWidget *frame; GtkWidget *vboxframe; gint n=0; gchar** t = NULL; winDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(winDlg),_("Select by PDB Type")); gtk_window_set_position(GTK_WINDOW(winDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(winDlg),GTK_WINDOW(GeomDlg)); add_child(GeomDlg,winDlg,gtk_widget_destroy,_(" Sel. Res. ")); g_signal_connect(G_OBJECT(winDlg),"delete_event",(GCallback)delete_child,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); n=0; t = getListPDBTypesFromGeom(&n); entry = create_label_combo(hbox,_(" Type Name : "),t,n, TRUE,-1,-1); gtk_editable_set_editable((GtkEditable*) entry,TRUE); if(t) freeList(t,n); gtk_widget_realize(winDlg); button = create_button(winDlg,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); button = create_button(winDlg,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)selectAtomsByPDBType,entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show_all(winDlg); } /********************************************************************************/ static void selectAtomsBySymbol(GtkWidget* button, GtkWidget* entry) { gint i; gint k = 0; G_CONST_RETURN gchar *rName; if(Natoms<1) return; rName = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(rName)<1) return; NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms = g_malloc(Natoms*sizeof(gint)); k = 0; for (i=0;i<(gint)Natoms;i++) { if(!geometry[i].show) continue; if(!strcmp(geometry[i].Prop.symbol,rName)) NumFatoms[k++]= geometry[i].N; } NFatoms = k; if(k<1) { NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms=NULL; } else { NumFatoms = g_realloc(NumFatoms,NFatoms*sizeof(gint)); } drawGeom(); } /********************************************************************************/ void selectAtomsBySymbolDlg() { GtkWidget *winDlg; GtkWidget *button; GtkWidget *hbox; GtkWidget *entry; GtkWidget *frame; GtkWidget *vboxframe; gint n=0; gchar** t = NULL; winDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(winDlg),_("Select by Symbol")); gtk_window_set_position(GTK_WINDOW(winDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(winDlg),GTK_WINDOW(GeomDlg)); add_child(GeomDlg,winDlg,gtk_widget_destroy,_(" Sel. Res. ")); g_signal_connect(G_OBJECT(winDlg),"delete_event",(GCallback)delete_child,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); n=0; t = getListSymbols(&n); entry = create_label_combo(hbox,_(" Symbol : "),t,n, TRUE,-1,-1); gtk_editable_set_editable((GtkEditable*) entry,TRUE); if(t) freeList(t,n); gtk_widget_realize(winDlg); button = create_button(winDlg,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); button = create_button(winDlg,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)selectAtomsBySymbol,entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show_all(winDlg); } /********************************************************************************/ void selectAtomsByChargeValues(gboolean positive) { gint i; gint k = 0; if(Natoms<1) return; NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms = g_malloc(Natoms*sizeof(gint)); k = 0; for (i=0;i<(gint)Natoms;i++) { if(!geometry[i].show) continue; if( (geometry[i].Charge>0 && positive) || (geometry[i].Charge<0 && !positive) ) NumFatoms[k++]= geometry[i].N; } NFatoms = k; if(k<1) { NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms=NULL; } else { NumFatoms = g_realloc(NumFatoms,NFatoms*sizeof(gint)); } drawGeom(); } /********************************************************************************/ static void selectAtomsBySphere(GtkWidget* button, GtkWidget* entry) { gint i; gint j; gint k = 0; G_CONST_RETURN gchar *rName; gdouble r = 1.0; gint* nums = NULL; if(Natoms<1) return; if(NFatoms<1) return; rName = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(rName)<1) return; r = atof(rName)*ANG_TO_BOHR; r = r*r; nums = g_malloc(Natoms*sizeof(gint)); for (k=0;k<(gint)NFatoms;k++) nums[k] = NumFatoms[k]; for (i=0;i<(gint)Natoms;i++) { if(!geometry[i].show) continue; for(j=0;jvbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); n=1; t = g_malloc(2*sizeof(gchar)); t[0] = g_strdup_printf("2.0"); t[1] = NULL; entry = create_label_combo(hbox,_(" Radius(Ang) : "),t,n, TRUE,-1,-1); gtk_editable_set_editable((GtkEditable*) entry,TRUE); if(t) freeList(t,n); gtk_widget_realize(winDlg); button = create_button(winDlg,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); button = create_button(winDlg,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)selectAtomsBySphere,entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show_all(winDlg); } GabeditSrc250/src/Geometry/Povray.h0000644000175100017510000000022013130665226017501 0ustar alloucheallouche #ifndef __GABEDIT_POVRAY_H__ #define __GABEDIT_POVRAY_H__ void exportPOVGeomDlg(GtkWidget *parentWindow); #endif /* __GABEDIT_POVRAY_H__ */ GabeditSrc250/src/Geometry/BuildRoZPhi.h0000644000175100017510000000022213130665226020356 0ustar alloucheallouche #ifndef __GABEDIT_BUILDROZPHI_H__ #define __GABEDIT_BUILDROZPHI_H__ void build_rozphi_molecule_dlg(); #endif /* __GABEDIT_BUILDROZPHI_H__ */ GabeditSrc250/src/Geometry/Makefile0000644000175100017510000000165213130664665017530 0ustar allouchealloucheOBJECTS = EnergiesCurves.o Fragments.o GeomConversion.o GeomXYZ.o GeomZmatrix.o ImagesGeom.o InterfaceGeom.o Measure.o Povray.o ResultsAnalise.o GeomSymmetry.o RotFragments.o BuildLinear.o BuildRing.o BuildRoZPhi.o BuildPolyPeptide.o FragmentsPPD.o FragmentsPSC.o FragmentsPNA.o BuildPolySaccharide.o BuildPolyNucleicAcid.o BuildNanoTube.o BuildPeriodic.o PersonalFragments.o SavePersonalFragments.o LoadPersonalFragments.o FragmentsSelector.o OpenBabel.o MenuToolBarGeom.o PreviewGeom.o FragmentsTree.o ExportGeom.o TreeMolecule.o DrawGeomGL.o AxesGeomGL.o DrawGeomCairo.o SelectionDlg.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/Geometry/PreviewGeom.h0000644000175100017510000000030513130665226020456 0ustar alloucheallouche #ifndef __GABEDIT_PREVIEWGEOM_H__ #define __GABEDIT_PREVIEWGEOM_H__ GtkWidget* add_preview_geom(GtkWidget* box); void add_frag_to_preview_geom(GtkWidget* drawingArea, Fragment* frag); #endif GabeditSrc250/src/Geometry/BuildPolySaccharide.c0000644000175100017510000006342213130665226022103 0ustar alloucheallouche/* BuildPolySaccharide.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/InterfaceGeom.h" #include "../Geometry/FragmentsPSC.h" #include "../Geometry/RotFragments.h" #include "../Geometry/MenuToolBarGeom.h" void define_good_factor(); void create_GeomXYZ_from_draw_grometry(); #define LigneT 7 #define ColonneT 2 static GtkWidget* Entrys[3]; static GtkWidget* ButtonAlpha = NULL; static GtkWidget* ButtonBeta = NULL; static GtkWidget* ButtonL = NULL; static GtkWidget* ButtonD = NULL; static char *Symb[ColonneT][LigneT]={ {"Allose","Altrose","Arabinose","Fructose","Galactose","Glucose","Gulose"}, {"Idose","Lyxose","Mannose","Ribose","Talose","Xylose","00"} }; static GtkWidget* SButtons[ColonneT][LigneT]; static gchar conf[30]; static gint lastFragNumber = -1; static gint O = -1; static gint O1 = -1; static gint O2 = -1; static gint O3 = -1; static gint O4 = -1; static gint O5 = -1; static gint O6 = -1; static gint HO1 = -1; static gint HO2 = -1; static gint HO3 = -1; static gint HO4 = -1; static gint HO6 = -1; static gint C1 = -1; static gint C2 = -1; static gint C3 = -1; static gint C4 = -1; static gint C5 = -1; static gint C6 = -1; static gint H1 = -1; static gint H2 = -1; static gint H3 = -1; static gint H4 = -1; static gint H5 = -1; static gint H6 = -1; static gint H61 = -1; static gint H62 = -1; static gint lastO = -1; static gint lastO1 = -1; static gint lastC1 = -1; static gint lastHO1 = -1; static gint connectTo = -1; static gint connect2 = -1; static gint become = -1; static gint removeH = -1; static gdouble phi = -57; static gdouble psi = 47; static gdouble omega = 180; static gdouble lastOmega = 180; static gdouble lastPsi = 180; static gdouble lastPhi = 180; gchar fragName[30] = "L"; gchar fullFragName[30] = "L"; static Fragment Frag = {0,NULL}; static GeomDef* G=NULL; static gint Nb = 0; static gboolean capped = FALSE; /********************************************************************************/ static void init_variables() { lastFragNumber = -1; capped = FALSE; lastOmega = 180; lastPsi = 180; lastPhi = 180; if(Nb!=0) { gint i; for (i=0;i-1 && newF>-1) { G[lastF].typeConnections[newF] = G[newF].typeConnections[lastF]=1; } } /*****************************************************************************/ static void define_geometry_to_draw() { gint i; gint j; gdouble C[3]={0.0,0.0,0.0}; Free_One_Geom(geometry0,Natoms); Free_One_Geom(geometry ,Natoms); Natoms = 0; geometry0 = NULL; geometry = NULL; reset_origine_molecule_drawgeom(); geometry0 = g_malloc((Nb)*sizeof(GeomDef)); geometry = g_malloc((Nb)*sizeof(GeomDef)); Natoms = 0; for(i=0;i0) { geometry0 = g_realloc(geometry0,(Natoms)*sizeof(GeomDef)); geometry = g_realloc(geometry,(Natoms)*sizeof(GeomDef)); } for(i=0;i<(gint)Natoms;i++) { geometry[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;j<(gint)Natoms;j++) geometry[i].typeConnections[j] = 0; geometry0[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;j<(gint)Natoms;j++) geometry0[i].typeConnections[j] = 0; } for(i=0;i<(gint)Natoms;i++) { gint iG = geometry[i].N-1; for(j=i+1;j<(gint)Natoms;j++) { gint jG = geometry[j].N-1; geometry[i].typeConnections[j] = G[iG].typeConnections[jG]; geometry[j].typeConnections[i] = G[jG].typeConnections[iG]; } } for(i=0;i<(gint)Natoms;i++) geometry[i].N = geometry0[i].N = i+1; copy_connections(geometry0,geometry,Natoms); RebuildGeom = TRUE; } /********************************************************************************/ static void fixH6BondAngles( gint previousFragNumber, gint currentFragNumber ) { gint H61 = -1, H62 = -1, LastO1 = -1, C6 = -1, C5 = -1; gdouble pseudo[] = {0.0, 0.0, 0.0}; gint i; for( i = 0; i < Nb; i++ ) { if(G[i].ResidueNumber != previousFragNumber) continue; if ( !strcmp(G[i].pdbType ,"O1" ) ) LastO1 = i; } for( i = 0; i < Nb; i++ ) { if(G[i].ResidueNumber != currentFragNumber) continue; if ( !strcmp(G[i].pdbType ,"H61" ) ) H61 = i; else if ( !strcmp(G[i].pdbType ,"H62" ) ) H62 = i; else if ( !strcmp(G[i].pdbType ,"H62" ) ) H62 = i; else if ( !strcmp(G[i].pdbType ,"C6" ) ) C6 = i; else if ( !strcmp(G[i].pdbType ,"C5" ) ) C5 = i; } if ( ( LastO1 == -1 ) || ( H61 == -1 ) || ( H62 == -1 ) || ( C6 == -1 ) || ( C5 == -1 ) ) return; pseudo[ 0 ] =( ( G[LastO1].X + G[C5].X ) / 2.0 ); pseudo[ 1 ] =( ( G[LastO1].Y + G[C5].Y ) / 2.0 ); pseudo[ 2 ] =( ( G[LastO1].Z + G[C5].Z ) / 2.0 ); if(Nb>0) G = g_realloc(G,(Nb+1)*sizeof(GeomDef)); else G = g_malloc((1)*sizeof(GeomDef)); G[Nb].X = pseudo[0]; G[Nb].Y = pseudo[1]; G[Nb].Z = pseudo[2]; SetAngle (Nb+1, G, Nb, C6, H61, 125.25 , NULL, 0); SetTorsion(Nb+1, G, lastO1, Nb, C6, H61, 90.0, NULL, 0); SetAngle (Nb+1, G, Nb, C6, H62, 125.25 , NULL, 0); SetTorsion(Nb+1, G, lastO1, Nb, C6, H62, -90.0, NULL, 0); if(Nb>0) G = g_realloc(G,(Nb)*sizeof(GeomDef)); } /********************************************************************************/ void add_fragment(GtkWidget* button) { gint i; gint j; G_CONST_RETURN gchar* t; gint omegaArrayCounter=0; gint* omegaArray=NULL; t = gtk_entry_get_text(GTK_ENTRY(Entrys[0])); phi = atof(t); t = gtk_entry_get_text(GTK_ENTRY(Entrys[1])); psi = atof(t); t = gtk_entry_get_text(GTK_ENTRY(Entrys[2])); omega = atof(t); if(Nb>0) G = g_realloc(G,(Nb+Frag.NAtoms+1)*sizeof(GeomDef)); else G = g_malloc((Frag.NAtoms+1)*sizeof(GeomDef)); omegaArray = g_malloc(Frag.NAtoms*sizeof(gint)); Ddef = FALSE; j=Nb-1; for(i=0;iactive) alpha = FALSE; sprintf(fullFragName,"%s",fragName); Frag = GetFragmentPSC(fullFragName,alpha); add_fragment(w); } /********************************************************************************************************/ static void traite_conformation(GtkComboBox *combobox, gpointer d) { gint i; gint j; GtkTreeIter iter; gchar* option = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &option, -1); } sprintf(conf,"%s",option); if(!strcmp(option,"O1 - C5") || !strcmp(option,"O1 - C6")) gtk_editable_set_editable((GtkEditable*) Entrys[2],TRUE); else gtk_editable_set_editable((GtkEditable*) Entrys[2],FALSE); if(!strcmp(option,"O1 - C5")) { for(i=0;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox = create_hbox_false(vboxframe); add_buttons(Dlg,hbox); vbox = gtk_vbox_new (FALSE, 0); gtk_box_pack_end (GTK_BOX(hbox), vbox, FALSE, FALSE, 5); gtk_widget_show (vbox); combobox = add_connectivity(Dlg,vbox); add_conformation(Dlg,vbox); hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_end (GTK_BOX(vbox), hbox, FALSE, FALSE, 5); gtk_widget_show (hbox); add_anomer(Dlg,hbox); add_isomer(Dlg,hbox); /* The "Close" button */ gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(Dlg)->action_area), FALSE); gtk_widget_realize(Dlg); Button = create_button(Dlg,_("Close")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Dlg)->action_area), Button, FALSE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(Button), "clicked",(GCallback)destroy_dlg,GTK_OBJECT(Dlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(GTK_DIALOG(Dlg)->vbox); gtk_widget_show_all(GTK_DIALOG(Dlg)->action_area); gtk_widget_show_now(Dlg); fit_windows_position(GeomDlg, Dlg); gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 3); } GabeditSrc250/src/Geometry/InterfaceGeom.c0000644000175100017510000006620413130665226020742 0ustar alloucheallouche/* InterfaceGeom.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include "../Common/Global.h" #include "../Geometry/InterfaceGeom.h" #include "../Gaussian/GaussGlobal.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/GeomZmatrix.h" #include "../Geometry/ResultsAnalise.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Common/Windows.h" #include "../Files/FileChooser.h" static GtkWidget *FrameGeom; /*************************************************************************/ void MessageGeom(gchar* message,gchar* type,gboolean center) { GtkWidget* Dialogue = Message(message,type,center); gtk_window_set_transient_for(GTK_WINDOW(Dialogue),GTK_WINDOW(Fenetre)); if(WindowGeom) gtk_window_set_transient_for(GTK_WINDOW(Dialogue),GTK_WINDOW(WindowGeom)); } /*************************************************************************/ void read_mopac_input_file(GabeditFileChooser *gabeditFileChooser, gint response_id) { gchar *fileName=NULL; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(gabeditFileChooser); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No file selected"),_("Warning"),TRUE); return ; } read_geom_in_mopac_input(fileName); } /*************************************************************************/ void read_mpqc_input_file(GabeditFileChooser *gabeditFileChooser, gint response_id) { gchar *fileName=NULL; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(gabeditFileChooser); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No file selected"),_("Warning"),TRUE); return ; } read_geom_in_mpqc_input(fileName); } /*************************************************************************/ void read_gauss_input_file(GabeditFileChooser *gabeditFileChooser, gint response_id) { gchar *NomFichier=NULL; if(response_id != GTK_RESPONSE_OK) return; NomFichier = gabedit_file_chooser_get_current_file(gabeditFileChooser); if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) { Message(_("Sorry\n No file selected"),_("Warning"),TRUE); return ; } read_geom_in_gauss_input(NomFichier); } /*************************************************************************/ void read_molcas_input_file(GabeditFileChooser *gabeditFileChooser, gint response_id) { gchar *NomFichier=NULL; if(response_id != GTK_RESPONSE_OK) return; NomFichier = gabedit_file_chooser_get_current_file(gabeditFileChooser); if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) { Message(_("Sorry\n No file selected"),_("Warning"),TRUE); return ; } read_geom_in_molcas_input(NomFichier); } /*************************************************************************/ void read_molpro_input_file(GabeditFileChooser *gabeditFileChooser, gint response_id) { gchar *NomFichier=NULL; if(response_id != GTK_RESPONSE_OK) return; NomFichier = gabedit_file_chooser_get_current_file(gabeditFileChooser); if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) { Message(_("Sorry\n No file selected"),_("Warning"),TRUE); return ; } read_geom_in_molpro_input(NomFichier); } /*************************************************************************/ void selc_all_input_file(gchar *data) { GtkWidget *gabeditFileChooser; gchar* patternsfiles[] = {"*.com","*.inp","*.mop","*",NULL}; gchar* temp = NULL; gabeditFileChooser = gabedit_file_chooser_new(data, GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_hide_hidden(GABEDIT_FILE_CHOOSER(gabeditFileChooser)); if(WindowGeom) gtk_window_set_transient_for(GTK_WINDOW(gabeditFileChooser),GTK_WINDOW(WindowGeom)); else gtk_window_set_transient_for(GTK_WINDOW(gabeditFileChooser),GTK_WINDOW(Fenetre)); gtk_window_set_modal (GTK_WINDOW (gabeditFileChooser), TRUE); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(gabeditFileChooser),patternsfiles); if( !strcmp(data,_("Read Geometry from a Mopac input file")) ) { temp = g_strdup_printf("%s.mop",fileopen.projectname); gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.mop"); } else temp = g_strdup_printf("%s.com",fileopen.projectname); if(!temp) temp = g_strdup_printf("dump.com"); if(lastdirectory) { gchar* t = g_strdup_printf("%s%s%s",lastdirectory,G_DIR_SEPARATOR_S,temp); gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser),t); g_free(t); g_free(temp); } else { if(fileopen.localdir) { gchar* t = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,temp); gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser),t); g_free(t); g_free(temp); } else { gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser),temp); g_free(temp); } } if( !strcmp(data,_("Read Geometry from a Gaussian input file")) ) g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (read_gauss_input_file), GTK_OBJECT(gabeditFileChooser)); else if( !strcmp(data,_("Read Geometry from a Molcas input file")) ) g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (read_molcas_input_file), GTK_OBJECT(gabeditFileChooser)); else if( !strcmp(data,_("Read Geometry from a Mopac input file")) ) g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (read_mopac_input_file), GTK_OBJECT(gabeditFileChooser)); else if( !strcmp(data,_("Read Geometry from a MPQC input file")) ) g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (read_mpqc_input_file), GTK_OBJECT(gabeditFileChooser)); else g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (read_molpro_input_file), GTK_OBJECT(gabeditFileChooser)); g_signal_connect (gabeditFileChooser, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(gabeditFileChooser)); gtk_widget_show(gabeditFileChooser); } /*************************************************************************/ void create_geomXYZ_interface (GabEditTypeFileGeom readfile) { GtkWidget *vbox; GtkWidget *hbox; GtkWidget *label; /*GtkWidget *vseparator;*/ MethodeGeom = GEOM_IS_XYZ; if( HboxGeom != NULL) gtk_widget_destroy(GTK_WIDGET(HboxGeom) ) ; hbox =create_hbox_true(geominter->vbox); HboxGeom= hbox; FrameGeom = create_frame(geominter->window,hbox,geominter->frametitle); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (FrameGeom), vbox); hbox =create_hbox_true(vbox); vbox = gtk_vbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 5); gtk_widget_show (vbox); label = gtk_label_new (_(" XYZ Editor ")); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 2); create_geomXYZ_list(vbox,readfile); /* vseparator = create_vseparator (hbox);*/ create_vseparator (hbox); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 5); label = gtk_label_new (_(" VARIABLES Editor ")); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 2); create_variablesXYZ_list(vbox,readfile); gtk_widget_show_all (FrameGeom); } /*************************************************************************/ void create_geom_interface (GabEditTypeFileGeom readfile) { GtkWidget *vbox; GtkWidget *hbox; GtkWidget *label; /* GtkWidget *vseparator;*/ MethodeGeom = GEOM_IS_ZMAT; if( HboxGeom != NULL) gtk_widget_destroy(GTK_WIDGET(HboxGeom) ) ; hbox =create_hbox_true(geominter->vbox); HboxGeom = hbox; FrameGeom = create_frame(geominter->window,hbox,geominter->frametitle); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (FrameGeom), vbox); hbox =create_hbox_true(vbox); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 5); label = gtk_label_new (_(" Z-MATRIX Editor ")); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 2); create_geom_list(vbox,readfile); /* vseparator = create_vseparator (hbox);*/ create_vseparator (hbox); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 5); label = gtk_label_new (_(" VARIABLES Editor ")); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 2); create_variables_list(vbox,readfile); gtk_widget_show_all (FrameGeom); } /********************************************************************************************************/ static void traite_geom(GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } if(!data) return; if (!strcmp((char*)data, _("New Z-Matrix geometry"))) create_geom_interface (GABEDIT_TYPEFILEGEOM_NEW); else if (!strcmp((char*)data, _("Read Geometry from a Gaussian Z-Matrix file"))) create_geom_interface (GABEDIT_TYPEFILEGEOM_GAUSSIAN_ZMATRIX); else if (!strcmp((char*)data, _("Read Geometry from a Mopac Z-Matrix file"))) create_geom_interface (GABEDIT_TYPEFILEGEOM_MOPAC_ZMATRIX); else if (!strcmp((char*)data, _("New XYZ geometry"))) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_NEW); else if (!strcmp((char*)data, _("Read Geometry from a XYZ file"))) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_XYZ); else if (!strcmp((char*)data, _("Read Geometry from a MOL2 file"))) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_MOL2); else if (!strcmp((char*)data, _("Read Geometry from a Tinker file"))) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_TINKER); else if (!strcmp((char*)data, _("Read Geometry from a PDB file"))) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_PDB); else if (!strcmp((char*)data, _("Read Geometry from a Hyperchem file"))) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_HIN); else if (!strcmp((char*)data, _("Read the first geometry from a Dalton output file"))) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_DALTONFIRST); else if (!strcmp((char*)data, _("Read the last geometry from a Dalton output file"))) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_DALTONLAST); else if (!strcmp((char*)data, _("Read the first geometry from a Molcas output file"))) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_MOLCASOUTFIRST); else if (!strcmp((char*)data, _("Read the last geometry from a Molcas output file"))) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_MOLCASOUTLAST); else if (!strcmp((char*)data, _("Read the first geometry from a Molpro output file"))) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_MOLPROOUTFIRST); else if (!strcmp((char*)data, _("Read the last geometry from a Molpro output file"))) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_MOLPROOUTLAST); else if (!strcmp((char*)data, _("Read the first geometry from a MPQC output file"))) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_MPQCOUTFIRST); else if (!strcmp((char*)data, _("Read the last geometry from a MPQC output file"))) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_MPQCOUTLAST); else if (!strcmp((char*)data, _("Read the first geometry from a Gaussian output file"))) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_GAUSSOUTFIRST); else if (!strcmp((char*)data, _("Read the last geometry from a Gaussian output file"))) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_GAUSSOUTLAST); else if (!strcmp((char*)data, _("Read Geometry from a Gaussian input file"))) { selc_all_input_file(data); } else if (!strcmp((char*)data, _("Read Geometry from a Molpro input file"))) { selc_all_input_file(data); } else if (!strcmp((char*)data, _("Read Geometry from a MPQC input file"))) { selc_all_input_file(data); } else if (!strcmp((char*)data, _("Read Geometry from a Molcas input file"))) { selc_all_input_file(data); } } /********************************************************************************************************/ /* only with 2.6.x static gboolean is_separator (GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { gchar* d = NULL; gtk_tree_model_get (model, iter, 0, &d, -1); return (d == NULL); } */ /********************************************************************************************************/ GtkWidget *create_geom(GtkWidget*win,GtkWidget *frame) { GtkTreeIter iter; GtkTreeStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *hseparator; vbox =create_vbox(frame); VboxM[NM]=vbox; hbox =create_hbox_false(vbox); store = gtk_tree_store_new (1,G_TYPE_STRING); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Select a option"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("New Z-Matrix geometry"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("New XYZ geometry"), -1); /* separator */ /* only with 2.6.x gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, NULL, -1); */ gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a XYZ file"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a MOL2 file"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a Tinker file"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a PDB file"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a Hyperchem file"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a Gaussian Z-Matrix file"), -1); gtk_tree_store_append (store, &iter, NULL); /* separator */ /* only with 2.6.x gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, NULL, -1); */ gtk_tree_store_set (store, &iter, 0, _("Read the first geometry from a Dalton output file"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Read the last geometry from a Dalton output file"), -1); gtk_tree_store_append (store, &iter, NULL); /* separator */ /* only with 2.6.x gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, NULL, -1); */ gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a Gaussian input file"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Read the first geometry from a Gaussian output file"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Read the last geometry from a Gaussian output file"), -1); gtk_tree_store_append (store, &iter, NULL); /* separator */ /* only with 2.6.x gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, NULL, -1); */ gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a Molcas input file"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Read the first geometry from a Molcas output file"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Read the last geometry from a Molcas output file"), -1); gtk_tree_store_append (store, &iter, NULL); /* separator */ /* only with 2.6.x gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, NULL, -1); */ gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a Molpro input file"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Read the first geometry from a Molpro output file"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Read the last geometry from a Molpro output file"), -1); gtk_tree_store_append (store, &iter, NULL); /* separator */ /* only with 2.6.x gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, NULL, -1); */ gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a MPQC input file"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Read the first geometry from a MPQC output file"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Read the last geometry from a MPQC output file"), -1); model = GTK_TREE_MODEL (store); combobox = gtk_combo_box_new_with_model (model); g_object_unref (model); g_signal_connect (G_OBJECT(combobox), "changed", G_CALLBACK(traite_geom), NULL); renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", 0, NULL); /* only with 2.6.x gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox), is_separator, NULL, NULL); */ gtk_box_pack_start (GTK_BOX (hbox), combobox, TRUE, TRUE, 10); create_units_option(hbox,_(" Units : ")); hseparator = gtk_hseparator_new (); gtk_widget_show (hseparator); gtk_box_pack_start (GTK_BOX (vbox), hseparator, FALSE, FALSE, 1); return combobox; } /*************************************************************************/ void geom_is_open() { GeomIsOpen = TRUE; TypeGeomOpen = 1; } /*************************************************************************/ void geom_is_not_open() { GeomIsOpen = FALSE; } /*************************************************************************/ void destroy_geometry(GtkWidget *win) { geom_is_not_open(); TypeGeomOpen = 0; gtk_widget_destroy(win); WindowGeom = NULL; } /*************************************************************************/ void edit_geometry() { GtkWidget *hbox; GtkWidget *BoiteV; GtkWidget *Frame; GtkWidget *FrameType; GtkWidget *button; GtkWidget *Window; GtkWidget *combobox; if( GeomIsOpen) { if(WindowGeom != NULL) { gtk_widget_hide(WindowGeom); gtk_widget_show(WindowGeom); } return; } geominter=g_malloc(sizeof(GeomInter)); geominter->window= gtk_frame_new(NULL); HboxGeom = NULL; WindowGeom = NULL; geom_is_open(); Window= gtk_dialog_new (); gtk_window_set_title(>K_DIALOG(Window)->window,_("Geometry Editor")); gtk_window_set_transient_for(GTK_WINDOW(Window),GTK_WINDOW(Fenetre)); gtk_widget_realize (Window); init_child(Window,destroy_geometry,_(" Geometry Editor ")); g_signal_connect(G_OBJECT(Window),"delete_event",(GCallback)destroy_children,NULL); Frame = geominter->window; gtk_container_set_border_width (GTK_CONTAINER (Frame), 10); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(Window)->vbox), Frame); BoiteV = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(Frame), BoiteV); hbox =create_hbox_false(BoiteV); FrameType = create_frame(Frame,hbox,_("TYPE")); combobox = create_geom(FrameGeom,FrameType); geominter->vbox=BoiteV; geominter->frametitle=g_strdup(_("GEOMETRY")); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(Window)->action_area), FALSE); gtk_widget_realize(Window); button = create_button(Window,_("Close")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Window)->action_area), button, FALSE, TRUE , 5); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)destroy_children,GTK_OBJECT(Window)); if(GeomXYZ != NULL && MethodeGeom == GEOM_IS_XYZ) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); if(Geom != NULL && MethodeGeom == GEOM_IS_ZMAT) create_geom_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); gtk_widget_show_all (Window); WindowGeom = Window; gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0); } /********************************************************************************************************/ static void traite_units_option(GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; guint OldUnits = Units; gchar* data = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } if(!data) return; if (!strcmp((char*)data, _("Angstrom"))) Units = 1; else if (!strcmp((char*)data, _("Bohr"))) Units = 0; if(GeomDrawingArea != NULL && OldUnits != Units) rafresh_drawing(); } /********************************************************************************************************/ void create_units_option(GtkWidget *hbox,gchar *tlabel) { GtkTreeIter iter; GtkTreeStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; GtkWidget *label; label = gtk_label_new (tlabel); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); gtk_widget_show (label); store = gtk_tree_store_new (1,G_TYPE_STRING); if(Units == 1 ) { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Angstrom"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Bohr"), -1); } else { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Bohr"), -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, _("Angstrom"), -1); } model = GTK_TREE_MODEL (store); combobox = gtk_combo_box_new_with_model (model); g_object_unref (model); g_signal_connect (G_OBJECT(combobox), "changed", G_CALLBACK(traite_units_option), NULL); renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", 0, NULL); gtk_widget_set_size_request(GTK_WIDGET(combobox), -1, 25 ); gtk_box_pack_start (GTK_BOX (hbox), combobox, TRUE, TRUE, 10); gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0); } /*************************************************************************/ static void read_file(GabeditFileChooser *selecFile, gint response_id) { gchar *fileName; GabEditTypeFile fileType = GABEDIT_TYPEFILE_UNKNOWN; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(selecFile); gtk_widget_hide(GTK_WIDGET(selecFile)); while( gtk_events_pending() ) gtk_main_iteration(); fileType = get_type_file(fileName); if(fileType == GABEDIT_TYPEFILE_HIN) read_hin_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_XYZ) read_XYZ_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_GABEDIT) read_gabedit_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_MPQC) read_last_mpqc_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_DALTON) read_last_dalton_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_GAUSSIAN) read_last_gaussian_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_MOLPRO) read_last_molpro_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_GAMESS) read_last_gamess_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_FIREFLY) read_last_gamess_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_MOLCAS) read_last_molcas_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_MOLPRO) read_last_molpro_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_ORCA) read_last_orca_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_QCHEM) read_last_qchem_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_NWCHEM) read_last_nwchem_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_MOPAC) read_last_mopac_output_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_MOPAC_AUX) read_last_mopac_aux_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_MOPAC_SCAN) read_geometries_conv_mopac_scan(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_MOPAC_IRC) read_geometries_conv_mopac_irc(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_MOL2) read_mol2_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_TINKER) read_tinker_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_PDB) read_pdb_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_GZMAT) read_ZMatrix_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_MZMAT) read_ZMatrix_mopac_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_GAUSSIANINPUT) read_gauss_input_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_MOLCASINPUT) read_molcas_input_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_MOLPROINPUT) read_molpro_input_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_MOPACINPUT) read_mopac_input_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_MPQCINPUT) read_mpqc_input_file(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_GAMESSIRC) read_geometries_irc_gamess(selecFile, response_id); else if(fileType == GABEDIT_TYPEFILE_GAUSSIAN_FCHK) read_fchk_gaussian_file(selecFile, response_id); else { Message( _("Sorry, I cannot read this file\n") ,_("Error"),TRUE); } } /********************************************************************************/ void read_geom_any_file_dlg() { GtkWidget* filesel = file_chooser_open(read_file, _("Read geometries"), GABEDIT_TYPEFILE_UNKNOWN,GABEDIT_TYPEWIN_ORB); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); } GabeditSrc250/src/Geometry/SavePersonalFragments.c0000644000175100017510000001160113130665226022472 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../Geometry/Fragments.h" #include "../Geometry/PersonalFragments.h" #include "../Utils/Utils.h" /************************************************************/ static void saveTitlePesoFrag(FILE* file) { fprintf(file,"Begin Title\n"); fprintf(file," Please not edit this file\n"); fprintf(file,"End\n"); } /**********************************************************************/ static void saveGroupesList(PersonalFragments* personnalFragments, FILE* file) { gint i; fprintf(file,"Begin Groupes List\n"); for(i=0;inumberOfGroupes;i++) fprintf(file,"%s\n",personnalFragments->personnalGroupes[i].groupName); fprintf(file,"End\n"); } /**********************************************************************/ static void saveOneFragmentsList(PersonalFragments* personnalFragments, FILE* file,gint groupeNumber) { PersonalGroupe* personnalGroupes = personnalFragments->personnalGroupes; gint numberOfFragments = personnalFragments->personnalGroupes[groupeNumber].numberOfFragments; OnePersonalFragment* fragments = personnalGroupes[groupeNumber].fragments; gint i; fprintf(file,"Begin %s Groupe\n",personnalGroupes[groupeNumber].groupName); for(i=0;inumberOfGroupes; gint i; for(i=0;ipersonnalGroupes; OnePersonalFragment* fragments = personnalGroupes[groupeNumber].fragments; Fragment f; gint i; fprintf(file,"Begin %s %s Fragment\n", personnalGroupes[groupeNumber].groupName, fragments[fragmentNumber].name ); f = fragments[fragmentNumber].f; fprintf(file,"%d\n",f.NAtoms); for(i=0;inumberOfGroupes; gint numberOfFragments; gint i; gint j; for(i=0;ipersonnalGroupes[i].numberOfFragments; for(j=0;j #include #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/PovrayUtils.h" #include "../Utils/AtomsProp.h" #include "../Utils/Vector3d.h" #include "../Utils/Constants.h" #include "../Utils/Transformation.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/Measure.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Common/Windows.h" #define PRECISON_CYLINDER 0.001 typedef struct _RGB { /* Red Green Blue */ gdouble Colors[3]; }RGB; typedef struct _XYZRC { /* X=C[0], Y=C[1], Z =C[2] Radius=C[3] */ gdouble C[4]; /* RGB Colors */ RGB P; }XYZRC; /********************************************************************************/ static gchar *get_pov_matrix_transformation() { gdouble q[4]; gdouble m[4][4]; gchar* temp; getQuatGeom(q); build_rotmatrix(m,q); temp = g_strdup_printf( "// Rotation matrix\n" "#declare myTransforms = transform {\n" "matrix <%lf, %lf ,%lf, %lf, %lf, %lf, %lf, %lf, %lf, %lf, %lf ,%lf>\n" "}\n\n", m[0][0],m[0][1],m[0][2], m[1][0],m[1][1],m[1][2], m[2][0],m[2][1],m[2][2], m[3][0],m[3][1],m[3][2] ); return temp; } /********************************************************************************/ static gchar *get_pov_begin_molecule() { gchar *temp; temp = g_strdup( "\n# declare molecule = union {\n"); return temp; } /********************************************************************************/ static gchar *get_pov_end_molecule() { gchar *temp; temp = g_strdup("transform { myTransforms }\n}\n\nobject {molecule}"); return temp; } /*****************************************************************************/ static gdouble get_epaisseur(gint i, gint j) { gdouble factorstick = get_factorstick(); gdouble ei = 1.0/3.0*factorstick; gdouble ej = 1.0/3.0*factorstick; gdouble e = 1.0/3.0*factorstick; gdouble sl = 4.5; gdouble sm = 2; if(geometry[i].Layer == LOW_LAYER) ei /= sl; if(geometry[i].Layer == MEDIUM_LAYER) ei /= sm; if(geometry[j].Layer == LOW_LAYER) ej /= sl; if(geometry[j].Layer == MEDIUM_LAYER) ej /= sm; e = (ei,%14.6f\n" "\t<%14.6f,%14.6f,%14.6f>,0.0 \n" "\ttexture { finish { Dull } }\n" "\tpigment { rgb<%14.6f,%14.6f,%14.6f> }\n}\n", C1.C[0],C1.C[1],C1.C[2],ep, C2.C[0],C2.C[1],C2.C[2], C2.P.Colors[0],C2.P.Colors[1],C2.P.Colors[2] ); return temp; } /********************************************************************************/ static gchar *get_pov_ball(gint num, gdouble scale) { gchar *temp; XYZRC Center = get_prop_center(num); temp = g_strdup_printf( "sphere\n" "{\n" "\t<%14.6f,%14.6f,%14.6f> %14.6f\n" "\ttexture { finish { Dull } }\n" "\tpigment { rgb<%14.6f,%14.6f,%14.6f> }\n}\n" , Center.C[0],Center.C[1],Center.C[2],Center.C[3]*get_factorball()*scale, Center.P.Colors[0], Center.P.Colors[1], Center.P.Colors[2] ); return temp; } /********************************************************************************/ static gchar *get_pov_ball_for_stick(gint num, gdouble scale) { gchar *temp; XYZRC Center = get_prop_center(num); temp = g_strdup_printf( "sphere\n" "{\n" "\t<%14.6f,%14.6f,%14.6f> %14.6f\n" "\ttexture { finish { Dull } }\n" "\tpigment { rgb<%14.6f,%14.6f,%14.6f> }\n}\n" , Center.C[0],Center.C[1],Center.C[2],scale*get_rayon(num), Center.P.Colors[0], Center.P.Colors[1], Center.P.Colors[2] ); return temp; } /********************************************************************************/ static gdouble get_min(gint k) { gdouble min=0; gint i=0; if(k==0) { min = geometry[0].X; for(i=1;i<(gint)Natoms;i++) if(min>geometry[i].X) min = geometry[i].X; } else { if(k==1) { min = geometry[0].Y; for(i=1;i<(gint)Natoms;i++) if(min>geometry[i].Y) min = geometry[i].Y; } else { min = geometry[0].Z; for(i=1;i<(gint)Natoms;i++) if(min>geometry[i].Z) min = geometry[i].Z; } } min -=100; return min; } /********************************************************************************/ static gchar *get_pov_cylingre(gdouble C1[],gdouble C2[],gdouble Colors[],gdouble ep) { gchar* temp = g_strdup_printf( "cylinder\n" "{\n" "\t<%14.6f,%14.6f,%14.6f>,\n" "\t<%14.6f,%14.6f,%14.6f> \n" "\t%14.6f\n" "\ttexture { finish { Dull } }\n" "\tpigment { rgb<%14.6f,%14.6f,%14.6f> }\n}\n", C1[0],C1[1],C1[2], C2[0],C2[1],C2[2], ep, Colors[0],Colors[1],Colors[2] ); return temp; } /********************************************************************************/ static gchar *get_pov_stick_dipole() { gchar *temp; XYZRC Center1; XYZRC Center2; gdouble ep; Center1 = get_prop_dipole(0); Center2 = get_prop_dipole(NDIVDIPOLE-NDIVDIPOLE/5); ep = Center1.C[3]; if(degenerated_cylinder(Center1.C, Center2.C)) return g_strdup(" "); temp = get_pov_cylingre(Center1.C,Center2.C,Center1.P.Colors,ep); return temp; } /********************************************************************************/ static gchar *get_pov_one_stick_for_ball(gint i,gint j) { gchar *temp; gchar *temp1; gchar *temp2; XYZRC Center1; XYZRC Center2; gint l; gdouble ep; gdouble poid1; gdouble poid2; gdouble poid; gdouble C[3]; gint nc = get_connection_type(i,j); if(nc<1) return " "; if(!getShowMultipleBonds()) nc = 1; Center1 = get_prop_center(i); Center2 = get_prop_center(j); ep =get_epaisseur(i,j); poid1 = geometry[i].Prop.covalentRadii+geometry[i].Prop.radii; poid2 = geometry[j].Prop.covalentRadii+geometry[j].Prop.radii; poid = poid1 + poid2 ; if(nc==3) { gchar* t; /* V3d vScal = {ep*0.5,ep*0.5,ep*0.5}; gdouble C1[3]; gdouble C2[3]; V3d cros; V3d sub; V3d C0={0,0,0}; gdouble C10[3]; gdouble C20[3]; gdouble CC1[3]; gdouble CC2[3]; for(l=0;l<3;l++) CC1[l] = Center1.C[l]; for(l=0;l<3;l++) CC2[l] = Center2.C[l]; v3d_sub(C0, CC1, C10); v3d_sub(C0, CC2, C20); v3d_cross(C10, C20, cros); v3d_sub(CC1, CC2, sub); v3d_cross(cros, sub, vScal); if(v3d_dot(vScal,vScal)!=0) { v3d_normal(vScal); v3d_scale(vScal, ep*0.5); } for(l=0;l<3;l++) C1[l] = Center1.C[l]-vScal[l]; for(l=0;l<3;l++) C2[l] = Center2.C[l]-vScal[l]; for(l=0;l<3;l++) C[l] =(C1[l]*poid2+C2[l]*poid1)/poid; temp1 = get_pov_cylingre(C1,C,Center1.P.Colors,ep/3); temp2 = get_pov_cylingre(C,C2,Center2.P.Colors,ep/3); temp = g_strdup_printf("%s%s",temp1,temp2); g_free(temp1); g_free(temp2); for(l=0;l<3;l++) C1[l] = Center1.C[l]; for(l=0;l<3;l++) C2[l] = Center2.C[l]; for(l=0;l<3;l++) C[l] =(C1[l]*poid2+C2[l]*poid1)/poid; temp1 = get_pov_cylingre(C1,C,Center1.P.Colors,ep/3); temp2 = get_pov_cylingre(C,C2,Center2.P.Colors,ep/3); t = temp; temp = g_strdup_printf("%s%s%s",t,temp1,temp2); g_free(temp1); g_free(temp2); g_free(t); for(l=0;l<3;l++) C1[l] = Center1.C[l]+vScal[l]; for(l=0;l<3;l++) C2[l] = Center2.C[l]+vScal[l]; for(l=0;l<3;l++) C[l] =(C1[l]*poid2+C2[l]*poid1)/poid; temp1 = get_pov_cylingre(C1,C,Center1.P.Colors,ep/3); temp2 = get_pov_cylingre(C,C2,Center2.P.Colors,ep/3); t = temp; temp = g_strdup_printf("%s%s%s",t,temp1,temp2); g_free(temp1); g_free(temp2); g_free(t); */ V3d C0; gdouble r = ep; gdouble C11[3]; gdouble C12[3]; gdouble C21[3]; gdouble C22[3]; gdouble C31[3]; gdouble C32[3]; gdouble C[3]; gdouble rs[3]; gdouble Ci[3]; gdouble Cj[3]; gint type = 1; if(geometry[i].Layer == LOW_LAYER || geometry[j].Layer == LOW_LAYER) type = 0; getOptimalCiCj(i, j, Ci, Cj,C0); getPositionsRadiusBond3(r, C0, Ci, Cj, C11, C12, C21, C22, C31, C32, rs, type); for(l=0;l<3;l++) C[l] =(C11[l]*poid2+C12[l]*poid1)/poid; temp1 = get_pov_cylingre(C11,C,Center1.P.Colors,rs[0]); temp2 = get_pov_cylingre(C,C12,Center2.P.Colors,rs[0]); temp = g_strdup_printf("%s%s",temp1,temp2); g_free(temp1); g_free(temp2); for(l=0;l<3;l++) C[l] =(C21[l]*poid2+C22[l]*poid1)/poid; temp1 = get_pov_cylingre(C21,C,Center1.P.Colors,rs[1]); temp2 = get_pov_cylingre(C,C22,Center2.P.Colors,rs[1]); t = temp; temp = g_strdup_printf("%s%s%s",t,temp1,temp2); g_free(temp1); g_free(temp2); g_free(t); for(l=0;l<3;l++) C[l] =(C31[l]*poid2+C32[l]*poid1)/poid; temp1 = get_pov_cylingre(C31,C,Center1.P.Colors,rs[2]); temp2 = get_pov_cylingre(C,C32,Center2.P.Colors,rs[2]); t = temp; temp = g_strdup_printf("%s%s%s",t,temp1,temp2); g_free(temp1); g_free(temp2); g_free(t); } else if(nc==2) { gchar* t; gdouble r = ep; gdouble C11[3]; gdouble C12[3]; gdouble C21[3]; gdouble C22[3]; gdouble C[3]; V3d C0; gdouble rs[3]; gint type = 1; if(geometry[i].Layer == LOW_LAYER || geometry[j].Layer == LOW_LAYER) type = 0; getOptimalCiCj(i, j, Center1.C, Center2.C, C0); getPositionsRadiusBond2(r, C0, Center1.C, Center2.C, C11, C12, C21, C22, rs, type); for(l=0;l<3;l++) C[l] =(C11[l]*poid2+C12[l]*poid1)/poid; temp1 = get_pov_cylingre(C11,C,Center1.P.Colors,rs[0]); temp2 = get_pov_cylingre(C,C12,Center2.P.Colors,rs[0]); temp = g_strdup_printf("%s%s",temp1,temp2); g_free(temp1); g_free(temp2); for(l=0;l<3;l++) C[l] =(C21[l]*poid2+C22[l]*poid1)/poid; temp1 = get_pov_cylingre(C21,C,Center1.P.Colors,rs[1]); temp2 = get_pov_cylingre(C,C22,Center2.P.Colors,rs[1]); t = temp; temp = g_strdup_printf("%s%s%s",t,temp1,temp2); g_free(temp1); g_free(temp2); g_free(t); } else { for(l=0;l<3;l++) C[l] =(Center1.C[l]*poid2+Center2.C[l]*poid1)/poid; temp1 = get_pov_cylingre(Center1.C,C,Center1.P.Colors,ep); temp2 = get_pov_cylingre(C,Center2.C,Center2.P.Colors,ep); temp = g_strdup_printf("%s%s",temp1,temp2); g_free(temp1); g_free(temp2); } return temp; } /********************************************************************************/ static gchar *get_pov_one_stick(gint i,gint j) { gchar *temp; gchar *temp1; gchar *temp2; XYZRC Center1; XYZRC Center2; gint l; gdouble ep; gdouble poid1; gdouble poid2; gdouble poid; gdouble C[3]; gint nc = get_connection_type(i,j); if(nc<1) return " "; if(!getShowMultipleBonds()) nc = 1; Center1 = get_prop_center(i); Center2 = get_prop_center(j); get_num_min_rayonIJ(i,j); ep =get_epaisseur(i,j); poid1 = geometry[i].Prop.covalentRadii+geometry[i].Prop.radii; poid2 = geometry[j].Prop.covalentRadii+geometry[j].Prop.radii; poid = poid1 + poid2 ; if(nc==3) { gchar* t; /* V3d vScal = {ep,ep,ep}; gdouble C1[3]; gdouble C2[3]; gdouble C12[3]; V3d cros; V3d sub; V3d C0={0,0,0}; gdouble C10[3]; gdouble C20[3]; gdouble CC1[3]; gdouble CC2[3]; for(l=0;l<3;l++) CC1[l] = Center1.C[l]; for(l=0;l<3;l++) CC2[l] = Center2.C[l]; v3d_sub(C0, CC1, C10); v3d_sub(C0, CC2, C20); v3d_cross(C10, C20, cros); v3d_sub(CC1, CC2, sub); v3d_cross(cros, sub, vScal); if(v3d_dot(vScal,vScal)!=0) { v3d_normal(vScal); v3d_scale(vScal, ep*2); } for(l=0;l<3;l++) C1[l] = Center1.C[l]-vScal[l]; for(l=0;l<3;l++) C2[l] = Center2.C[l]-vScal[l]; for(l=0;l<3;l++) C[l] =(C1[l]*poid2+C2[l]*poid1)/poid; v3d_sub(CC1, CC2, C12); if(v3d_dot(C12,C12)!=0) { v3d_normal(C12); } for(l=0;l<3;l++) C1[l] -= C12[l]*ep; for(l=0;l<3;l++) C2[l] += C12[l]*ep; temp1 = get_pov_cylingre(C1,C,Center1.P.Colors,ep/2); temp2 = get_pov_cylingre(C,C2,Center2.P.Colors,ep/2); temp = g_strdup_printf("%s%s",temp1,temp2); g_free(temp1); g_free(temp2); for(l=0;l<3;l++) C1[l] = Center1.C[l]; for(l=0;l<3;l++) C2[l] = Center2.C[l]; for(l=0;l<3;l++) C[l] =(C1[l]*poid2+C2[l]*poid1)/poid; temp1 = get_pov_cylingre(C1,C,Center1.P.Colors,ep); temp2 = get_pov_cylingre(C,C2,Center2.P.Colors,ep); t = temp; temp = g_strdup_printf("%s%s%s",t,temp1,temp2); g_free(temp1); g_free(temp2); g_free(t); for(l=0;l<3;l++) C1[l] = Center1.C[l]+vScal[l]; for(l=0;l<3;l++) C2[l] = Center2.C[l]+vScal[l]; for(l=0;l<3;l++) C[l] =(C1[l]*poid2+C2[l]*poid1)/poid; for(l=0;l<3;l++) C1[l] -= C12[l]*ep; for(l=0;l<3;l++) C2[l] += C12[l]*ep; temp1 = get_pov_cylingre(C1,C,Center1.P.Colors,ep/2); temp2 = get_pov_cylingre(C,C2,Center2.P.Colors,ep/2); t = temp; temp = g_strdup_printf("%s%s%s",t,temp1,temp2); g_free(temp1); g_free(temp2); g_free(t); */ V3d C0; gdouble r = ep; gdouble C11[3]; gdouble C12[3]; gdouble C21[3]; gdouble C22[3]; gdouble C31[3]; gdouble C32[3]; gdouble C[3]; gdouble rs[3]; gdouble Ci[3]; gdouble Cj[3]; gint type = 0; getOptimalCiCj(i, j, Ci, Cj,C0); getPositionsRadiusBond3(r, C0, Ci, Cj, C11, C12, C21, C22, C31, C32, rs, type); for(l=0;l<3;l++) C[l] =(C11[l]*poid2+C12[l]*poid1)/poid; temp1 = get_pov_cylingre(C11,C,Center1.P.Colors,rs[0]); temp2 = get_pov_cylingre(C,C12,Center2.P.Colors,rs[0]); temp = g_strdup_printf("%s%s",temp1,temp2); g_free(temp1); g_free(temp2); for(l=0;l<3;l++) C[l] =(C21[l]*poid2+C22[l]*poid1)/poid; temp1 = get_pov_cylingre(C21,C,Center1.P.Colors,rs[1]); temp2 = get_pov_cylingre(C,C22,Center2.P.Colors,rs[1]); t = temp; temp = g_strdup_printf("%s%s%s",t,temp1,temp2); g_free(temp1); g_free(temp2); g_free(t); for(l=0;l<3;l++) C[l] =(C31[l]*poid2+C32[l]*poid1)/poid; temp1 = get_pov_cylingre(C31,C,Center1.P.Colors,rs[2]); temp2 = get_pov_cylingre(C,C32,Center2.P.Colors,rs[2]); t = temp; temp = g_strdup_printf("%s%s%s",t,temp1,temp2); g_free(temp1); g_free(temp2); g_free(t); } else if(nc==2) { gchar* t; gdouble r = ep; gdouble C11[3]; gdouble C12[3]; gdouble C21[3]; gdouble C22[3]; gdouble C[3]; gdouble rs[3]; gint type = 0; V3d C0; getOptimalCiCj(i, j, Center1.C, Center2.C, C0); getPositionsRadiusBond2(r, C0, Center1.C, Center2.C, C11, C12, C21, C22, rs, type); for(l=0;l<3;l++) C[l] =(C11[l]*poid2+C12[l]*poid1)/poid; temp1 = get_pov_cylingre(C11,C,Center1.P.Colors,rs[0]); temp2 = get_pov_cylingre(C,C12,Center2.P.Colors,rs[0]); temp = g_strdup_printf("%s%s",temp1,temp2); g_free(temp1); g_free(temp2); for(l=0;l<3;l++) C[l] =(C21[l]*poid2+C22[l]*poid1)/poid; temp1 = get_pov_cylingre(C21,C,Center1.P.Colors,rs[1]); temp2 = get_pov_cylingre(C,C22,Center2.P.Colors,rs[1]); t = temp; temp = g_strdup_printf("%s%s%s",t,temp1,temp2); g_free(temp1); g_free(temp2); g_free(t); } else { for(l=0;l<3;l++) C[l] =(Center1.C[l]*poid2+Center2.C[l]*poid1)/poid; temp1 = get_pov_cylingre(Center1.C,C,Center1.P.Colors,ep); temp2 = get_pov_cylingre(C,Center2.C,Center2.P.Colors,ep); temp = g_strdup_printf("%s%s",temp1,temp2); g_free(temp1); g_free(temp2); } return temp; } /********************************************************************************/ static gchar *get_pov_one_hbond(gint i,gint j) { gchar *temp; XYZRC Center1; XYZRC Center2; gint l; gdouble ep; gdouble poid1; gdouble poid2; gdouble poid; gint n = 10; gdouble A[3]; gdouble B[3]; gdouble K[3]; gchar *dump; gchar *temp1; gint ibreak; gdouble aspect = 0.3; if( !hbond_connections(i,j)) return " "; Center1 = get_prop_center(i); Center2 = get_prop_center(j); if(geometry[i].Prop.radii180) fov = 179.99; if(perspective) temp = g_strdup_printf( "// CAMERA\n" "camera\n" "{\n" "\tright %0.14f *x\n" "\tup y\n" "\tdirection -z\n" "\tangle %0.14f\n" "\tlocation < 0.000000, 0.00000, %0.14f >\n" "\tlook_at < 0.000000, 0.00000, %0.14f >\n" "\ttranslate < %0.14f , %0.14f , 0.000000 >\n" "}\n\n", aspect, fov, position,f, -origin[0], -origin[1] ); else temp = g_strdup_printf( "// CAMERA\n" "camera\n" "{\torthographic\n" "\tright %0.14f *x\n" "\tup y\n" "\tdirection -z\n" "\tlocation < 0.000000, 0.00000, %14.8f >\n" "\t scale %0.14f\n" "\ttranslate < %0.14f , %0.14f , 0.000000 >\n" "}\n\n", aspect, position, angle, -origin[0], -origin[1] ); return temp; } /********************************************************************************/ static gchar *get_pov_light_source(gchar* title,gchar* color,gdouble x,gdouble y, gdouble z) { gchar *temp; temp = g_strdup_printf("%s%s\t<%10.6f,%10.6f,%10.6f>\n\tcolor %s\n}\n", title, "light_source\n" "{\n", x,y,z,color); return temp; } /********************************************************************************/ static gchar *get_pov_light_sources() { gchar *temp; gchar *dum1; gchar *dum2; gdouble Ymax; gint i=0; /* calcul of Ymax*/ Ymax = geometry[0].Y; for(i=1;i<(gint)Natoms;i++) if(Ymax0) Ok = g_malloc(Natoms*sizeof(gboolean)); for(i=0;i<(gint)Natoms;i++) Ok[i] = FALSE; temp = g_strdup( "// BONDS \n"); for(i=0;i<(gint)(Natoms-1);i++) { if(!geometry[i].show) continue; for(j=i+1;j<(gint)Natoms;j++) if(get_connection_type(i,j)>0 && geometry[i].show && geometry[j].show) { Ok[i] = TRUE; Ok[j] = TRUE; tempold = temp; if(ballstick) t =get_pov_one_stick_for_ball(i,j); else t =get_pov_one_stick(i,j); if(tempold) { temp = g_strdup_printf("%s%s",tempold,t); g_free(tempold); } else temp = g_strdup_printf("%s",t); } else { if(hbond_connections(i,j) && geometry[i].show && geometry[j].show) { tempold = temp; t =get_pov_one_hbond(i,j); if(tempold) { temp = g_strdup_printf("%s%s",tempold,t); g_free(tempold); } else temp = g_strdup_printf("%s",t); } } } for(i=0;i<(gint)(Natoms-1);i++) if(!Ok[i] && geometry[i].show) { tempold = temp; t =get_pov_ball(i, 0.5); if(tempold) { temp = g_strdup_printf("%s%s",tempold,t); g_free(tempold); } else temp = g_strdup_printf("%s",t); if(t) g_free(t); } return temp; } /********************************************************************************/ static gchar *get_pov_dipole() { gchar* t1; gchar* t2; gchar* t = NULL; t = g_strdup( "// Dipole \n"); t1 = t; t2 = get_pov_stick_dipole(); t = g_strdup_printf("%s%s",t1,t2); g_free(t1); g_free(t2); t1 = t; t2 = get_pov_cone_dipole(); t = g_strdup_printf("%s%s",t1,t2); g_free(t1); g_free(t2); return t; } /*****************************************************************************/ static gchar* get_pov_box() { guint i; guint j; gdouble rayon; gint ni, nj; gchar tmp[BSIZE]; gint nTv = 0; gint iTv[3] = {-1,-1,-1}; V3d Base1Pos; V3d Base2Pos; V4d Specular = {1.0f,1.0f,1.0f,1.0f}; V4d Diffuse = {1.0f,1.0f,1.0f,1.0f}; V4d Ambiant = {1.0f,1.0f,1.0f,1.0f}; gdouble radius = 0.1; gdouble Tv[3][3]; gdouble O[3]; gchar *temp; gchar *temp_all; XYZRC Center1; XYZRC Center2; gdouble Orig[3]= {0,0,0}; gchar* t; if(!testShowBoxGeom()) return g_strdup("\n"); for(i=0;i0\n")); return message; } temp = get_pov_begin_molecule(); fprintf(fd,"%s",temp); g_free(temp); if( !stick_mode()) { temp = get_pov_atoms(1.0); fprintf(fd,"%s",temp); g_free(temp); } else { temp = get_pov_atoms_for_stick(get_factorstick()); fprintf(fd,"%s",temp); g_free(temp); } temp = get_pov_bonds( !stick_mode()); fprintf(fd,"%s",temp); g_free(temp); if(Ddef && dipole_mode()) { temp = get_pov_dipole(); fprintf(fd,"%s",temp); g_free(temp); } temp = get_pov_box(); fprintf(fd,"%s",temp); g_free(temp); temp = get_pov_end_molecule(); fprintf(fd,"%s",temp); g_free(temp); fclose(fd); } else { message = g_strdup_printf(_("\nSorry, I cannot create the %s file\n"),fileName); } return message; } /********************************************************************************/ static void create_images_window (GtkWidget* parent, gchar* fileName, gint width, gint height) { GtkWidget *window; GtkWidget *scrolled_window; GtkWidget *table; GtkWidget *vbox; window = gtk_window_new(GTK_WINDOW_TOPLEVEL); vbox = create_vbox(window); g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); gtk_window_set_title (GTK_WINDOW (window), fileName); gtk_container_set_border_width (GTK_CONTAINER (window), 0); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 1); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0); gtk_widget_show (scrolled_window); table = gtk_table_new (1, 1, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 1); gtk_table_set_col_spacings (GTK_TABLE (table), 1); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); gtk_container_set_focus_hadjustment (GTK_CONTAINER (table), gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window))); gtk_container_set_focus_vadjustment (GTK_CONTAINER (table), gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window))); gtk_widget_show (table); { GtkWidget* image = gtk_image_new_from_file (fileName); if(image) gtk_table_attach(GTK_TABLE(table),image, 0,0+1,0,0+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_widget_show (image); } gtk_window_set_default_size (GTK_WINDOW (window), width+30, height+30); gtk_widget_realize(window); gtk_widget_show (window); gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); if(parent) { gtk_window_set_transient_for(GTK_WINDOW(window),GTK_WINDOW(parent)); } } /*****************************************************************************/ static gboolean create_cmd_pov(G_CONST_RETURN gchar* command, gchar* fileNameCMD, gchar* fileNamePov, gchar* fileNameIMG) { gchar* commandStr = g_strdup(command); FILE* fcmd = NULL; fcmd = FOpen(fileNameCMD, "w"); if(!fcmd) { Message(_("\nI can not create cmd file\n "),_("Error"),TRUE); return FALSE; } #ifndef G_OS_WIN32 fprintf(fcmd,"#!/bin/sh\n"); fprintf(fcmd,"rm %s\n",fileNameIMG); fprintf(fcmd,"%s +I%s +O%s\n",commandStr, fileNamePov, fileNameIMG); #else /* fprintf(fcmd,"setlocal\n");*/ fprintf(fcmd,"set PATH=\"%s\";%cPATH%c\n",povrayDirectory,'%','%'); fprintf(fcmd,"del %s\n",fileNameIMG); fprintf(fcmd,"%s +I%s +O%s\n",commandStr, fileNamePov, fileNameIMG); /* fprintf(fcmd,"endlocal");*/ #endif fclose(fcmd); #ifndef G_OS_WIN32 { gchar buffer[BSIZE]; sprintf(buffer,"chmod u+x %s",fileNameCMD); {int ierr = system(buffer);} } #endif if(commandStr) g_free(commandStr); return TRUE; } /*****************************************************************************/ static void exportPOVRay(GtkWidget* Win, gboolean runPovray) { gchar* fileNamePOV = NULL; gchar* fileNameIMG = NULL; gchar* fileNameCMD = NULL; GtkWidget *entryFileName = g_object_get_data(G_OBJECT (Win), "EntryFileName"); GtkWidget *buttonDirSelector =g_object_get_data(G_OBJECT (Win), "ButtonDirSelector"); GtkWidget *entryCommand = g_object_get_data(G_OBJECT (Win), "EntryCommand"); GtkWidget *parent = g_object_get_data(G_OBJECT (Win), "ParentWindow"); /* fileName */ if(entryFileName && buttonDirSelector ) { gchar* dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileName))); gint l = 0; gint i; if(tmp) l = strlen(tmp); for(i=l-1;i>=1;i--) if(tmp[i]=='.') tmp[i]='\0'; if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR) { fileNamePOV = g_strdup_printf("%s%s%s.pov",dirName, G_DIR_SEPARATOR_S,tmp); fileNameIMG = g_strdup_printf("%s%s%s.png",dirName, G_DIR_SEPARATOR_S,tmp); #ifndef G_OS_WIN32 fileNameCMD = g_strdup_printf("%s%s%s.cmd",dirName, G_DIR_SEPARATOR_S,tmp); #else fileNameCMD = g_strdup_printf("%s%s%s.bat",dirName, G_DIR_SEPARATOR_S,tmp); #endif } else { fileNamePOV = g_strdup_printf("%s%s.pov",dirName, tmp); fileNameIMG = g_strdup_printf("%s%s.png",dirName, tmp); #ifndef G_OS_WIN32 fileNameCMD = g_strdup_printf("%s%s.cmd",dirName, tmp); #else fileNameCMD = g_strdup_printf("%s%s.bat",dirName, tmp); #endif } g_free(tmp); g_free(dirName); } if(fileNamePOV) { applyPovrayOptions(NULL,NULL); gchar* message = export_to_povray(fileNamePOV); if(message) { GtkWidget *m = Message(message,_("Error"),TRUE); gtk_window_set_modal (GTK_WINDOW (m), TRUE); } else { G_CONST_RETURN gchar* command = gtk_entry_get_text(GTK_ENTRY(entryCommand)); if(create_cmd_pov(command, fileNameCMD, fileNamePOV, fileNameIMG)) { if(runPovray) { gint width = 500; gint height = 500; if(GeomDrawingArea->allocation.width) { width = GeomDrawingArea->allocation.width; height = GeomDrawingArea->allocation.height; } gtk_widget_hide(Win); while( gtk_events_pending() ) gtk_main_iteration(); {int ierr = system(fileNameCMD);} create_images_window (parent,fileNameIMG, width, height); } else { gchar* t = g_strdup_printf( _( "\n2 files was created :\n" " -\"%s\" a povray input file\n" " -\"%s\" a batch file for run povray\n") ,fileNamePOV,fileNameCMD); GtkWidget* winDlg = Message(t,_("Info"),TRUE); gtk_window_set_modal (GTK_WINDOW (winDlg), FALSE); g_free(t); } } else { gchar* t = g_strdup_printf(_("\nSorry, I cannot create the %s file\n"),fileNameCMD); GtkWidget* winDlg = Message(t,_("Info"),TRUE); gtk_window_set_modal (GTK_WINDOW (winDlg), FALSE); g_free(t); } } } gtk_widget_destroy(Win); } /*****************************************************************************/ static void savePOVRay(GtkWidget* Win, gpointer data) { gboolean runPovray = FALSE; exportPOVRay(Win, runPovray); } /*****************************************************************************/ static void runPOVRay(GtkWidget* Win, gpointer data) { gboolean runPovray = TRUE; exportPOVRay(Win, runPovray); } /**********************************************************************/ static void AddPOVRayLocationDlg(GtkWidget *box, GtkWidget *Win) { gint i = 0; gint j = 0; GtkWidget *label; GtkWidget *buttonDirSelector; GtkWidget *entryFileName; GtkWidget *table; table = gtk_table_new(2,3,FALSE); gtk_box_pack_start (GTK_BOX (box), table, TRUE, TRUE, 0); i++; j = 0; add_label_table(table,"Folder",(gushort)i,(gushort)j); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; buttonDirSelector = gabedit_dir_button(); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (buttonDirSelector), g_getenv("PWD")); gtk_widget_set_size_request(GTK_WIDGET(buttonDirSelector),(gint)(ScreenHeight*0.2),-1); gtk_table_attach(GTK_TABLE(table),buttonDirSelector, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ i++; j = 0; add_label_table(table,"File name",(gushort)i,(gushort)j); /*----------------------------------------------------------------------------------*/ j = 1; label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); /*----------------------------------------------------------------------------------*/ j = 2; entryFileName = gtk_entry_new(); gtk_table_attach(GTK_TABLE(table),entryFileName, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); gtk_entry_set_text(GTK_ENTRY(entryFileName),"gabeditPOV"); g_object_set_data(G_OBJECT (Win), "EntryFileName",entryFileName); g_object_set_data(G_OBJECT (Win), "ButtonDirSelector",buttonDirSelector); } /************************************************************************************************************/ static void AddPOVRayRunDlg(GtkWidget *box, GtkWidget *Win) { gint i = 0; gint j = 0; GtkWidget *entryCommand; GtkWidget *table; GtkWidget* label; gint width = 500; gint height = 500; gchar* tmp = NULL; if(GeomDrawingArea) { width = GeomDrawingArea->allocation.width; height = GeomDrawingArea->allocation.height; } table = gtk_table_new(2,3,FALSE); gtk_box_pack_start (GTK_BOX (box), table, TRUE, TRUE, 0); i = 0; j = 0; label = gtk_label_new ("Command for run povray : "); gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), (GtkAttachOptions)(GTK_FILL|GTK_SHRINK), 1,1); j++; entryCommand = gtk_entry_new(); gtk_table_attach(GTK_TABLE(table),entryCommand, j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), (GtkAttachOptions)(GTK_FILL|GTK_EXPAND), 1,1); tmp = g_strdup_printf("%s +W%d +H%d",NameCommandPovray, width,height); gtk_entry_set_text(GTK_ENTRY(entryCommand),tmp); g_free(tmp); g_object_set_data(G_OBJECT (Win), "EntryCommand",entryCommand); gtk_widget_set_size_request(GTK_WIDGET(entryCommand),400,-1); } /**********************************************************************/ void exportPOVGeomDlg(GtkWidget *parentWindow) { GtkWidget *button; GtkWidget *Win; gchar* title = "POV Ray export"; GtkWidget *hseparator = NULL; Win= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow)); gtk_window_set_title(>K_DIALOG(Win)->window,title); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)gtk_widget_destroy,NULL); createPOVBackgroundFrame(GTK_WIDGET (GTK_DIALOG(Win)->vbox)); AddPOVRayLocationDlg(GTK_WIDGET (GTK_DIALOG(Win)->vbox), Win); hseparator = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->vbox), hseparator, TRUE, TRUE, 0); AddPOVRayRunDlg(GTK_WIDGET (GTK_DIALOG(Win)->vbox), Win); gtk_widget_realize(Win); button = create_button(Win,"Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,"Save"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)savePOVRay,GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,"Run PovRay"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPOVRay,GTK_OBJECT(Win)); gtk_widget_show (button); gtk_widget_show_all(Win); g_object_set_data(G_OBJECT (Win), "ParentWindow",parentWindow); } GabeditSrc250/src/Geometry/OpenBabel.c0000644000175100017510000007613513130665226020065 0ustar alloucheallouche/* Babel.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/GabeditTextEdit.h" #include "../Files/FileChooser.h" #include "../Common/Windows.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomXYZ.h" #include "../../pixmaps/Open.xpm" #ifdef G_OS_WIN32 #include #include #else #include #endif static gchar* inputFormat[] = { "alc -- Alchemy file", "prep -- Amber PREP file", "bs -- Ball & Stick file", "caccrt -- Cacao Cartesian file", "ccc -- CCC file", "c3d1 -- Chem3D Cartesian 1 file", "c3d2 -- Chem3D Cartesian 2 file", "cml -- Chemical Markup Language file", "crk2d -- CRK2D: Chemical Resource Kit 2D file", "crk3d -- CRK3D: Chemical Resource Kit 3D file", "box -- Dock 3.5 Box file", "dmol -- DMol3 Coordinates file", "feat -- Feature file", "gam -- GAMESS Output file", "gamout -- GAMESS Output file", "gpr -- Ghemical Project file", "mm1gp -- Ghemical MM file", "qm1gp -- Ghemical QM file", "hin -- HyperChem HIN file", "jout -- Jaguar Output file", "bin -- OpenEye Binary file", "mmd -- MacroModel file", "mmod -- MacroModel file", "out -- MacroModel file", "dat -- MacroModel file", "car -- MSI Biosym/Insight II CAR file", "sdf -- MDL Isis SDF file", "sd -- MDL Isis SDF file", "mdl -- MDL Molfile file", "mol -- MDL Molfile file", "mopcrt -- MOPAC Cartesian file", "mopout -- MOPAC Output file", "mmads -- MMADS file", "mpqc -- MPQC file", "bgf -- MSI BGF file", "nwo -- NWChem Output file", "pdb -- PDB file", "ent -- PDB file", "pqs -- PQS file", "qcout -- Q-Chem Output file", "res -- ShelX file", "ins -- ShelX file", "smi -- SMILES file", "mol2 -- Sybyl Mol2 file", "unixyz -- UniChem XYZ file", "vmol -- ViewMol file", "xyz -- XYZ file" }; static gchar* outputFormat[] = { "alc -- Alchemy file", "bs -- Ball & Stick file", "caccrt -- Cacao Cartesian file", "cacint -- Cacao Internal file", "cache -- CAChe MolStruct file", "c3d1 -- Chem3D Cartesian 1 file", "c3d2 -- Chem3D Cartesian 2 file", "ct -- ChemDraw Connection Table file", "cht -- Chemtool file", "cml -- Chemical Markup Language file", "crk2d -- CRK2D: Chemical Resource Kit 2D file", "crk3d -- CRK3D: Chemical Resource Kit 3D file", "cssr -- CSD CSSR file", "box -- Dock 3.5 Box file", "dmol -- DMol3 Coordinates file", "feat -- Feature file", "fh -- Fenske-Hall Z-Matrix file", "gamin -- GAMESS Input file", "inp -- GAMESS Input file", "gcart -- Gaussian Cartesian file", "gau -- Gaussian Input file", "gpr -- Ghemical Project file", "gr96a -- GROMOS96 (A) file", "gr96n -- GROMOS96 (nm) file", "hin -- HyperChem HIN file", "jin -- Jaguar Input file", "bin -- OpenEye Binary file", "mmd -- MacroModel file", "mmod -- MacroModel file", "out -- MacroModel file", "dat -- MacroModel file", "sdf -- MDL Isis SDF file", "sd -- MDL Isis SDF file", "mdl -- MDL Molfile file", "mol -- MDL Molfile file", "mopcrt -- MOPAC Cartesian file", "mmads -- MMADS file", "bgf -- MSI BGF file", "csr -- MSI Quanta CSR file", "nw -- NWChem Input file", "pdb -- PDB file", "ent -- PDB file", "pov -- POV-Ray Output file", "pqs -- PQS file", "report -- Report file", "qcin -- Q-Chem Input file", "smi -- SMILES file", "fix -- SMILES Fix file", "mol2 -- Sybyl Mol2 file", "txyz -- Tinker XYZ file", "txt -- Titles file", "unixyz -- UniChem XYZ file", "vmol -- ViewMol file", "xed -- XED file", "xyz -- XYZ file", "zin -- ZINDO Input file", }; static guint nListInput = sizeof(inputFormat) /sizeof(gchar*); static guint nListOutput = sizeof(outputFormat) /sizeof(gchar*); static GtkWidget *inputTextEditor = NULL; static GtkWidget *inputEntry = NULL; static GtkWidget *inputEntryCombo = NULL; static GtkWidget *outputTextEditor = NULL; static GtkWidget *outputEntry = NULL; static GtkWidget *outputEntryCombo = NULL; static gchar** inputPatterns = NULL; static gchar** outputPatterns = NULL; static GtkWidget *errorEditor = NULL; /**********************************************************************************/ static void setPatterns() { gint i; char t[100]; if(!inputPatterns) { inputPatterns = g_malloc((nListInput+2)*sizeof(gchar*)); for( i=1;i<=(gint)nListInput;i++) { sscanf(inputFormat[i-1],"%s",t); inputPatterns[i] = g_strdup_printf("*.%s",t); } inputPatterns[nListInput+1] = NULL; inputPatterns[0] = g_strdup("*.*"); } if(!outputPatterns) { outputPatterns = g_malloc((nListOutput+2)*sizeof(gchar*)); for( i=1;i<=(gint)nListOutput;i++) { sscanf(outputFormat[i-1],"%s",t); outputPatterns[i] = g_strdup_printf("*.%s",t); } outputPatterns[nListOutput+1] = NULL; outputPatterns[0] = g_strdup("*.*"); } } /**********************************************************************************/ static GtkWidget *create_browser(GtkWidget* Wins,GtkWidget* vbox,gchar *deffile,gchar** patterns) { GtkWidget *Entry = NULL; GtkWidget *hbox ; GtkWidget *button = NULL; hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX(vbox), hbox, TRUE, TRUE, 0); Entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), Entry,TRUE,TRUE,0); if(deffile) { gint len = strlen(deffile)*8; gtk_widget_set_size_request(GTK_WIDGET(Entry),len,32); gtk_entry_set_text(GTK_ENTRY(Entry),deffile); } else { gtk_widget_set_size_request(GTK_WIDGET(Entry),350,32); } button = create_button_pixmap(Wins,open_xpm,NULL); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 1); g_object_set_data (G_OBJECT (hbox), "Entry", Entry); g_object_set_data (G_OBJECT (hbox), "Button", button); g_object_set_data (G_OBJECT (hbox), "Window", Wins); if(patterns && patterns[0]) { gchar* p = g_strdup(patterns[0]); g_free(patterns[0]); patterns[0] = g_malloc(100*sizeof(gchar)); sprintf(patterns[0],"%s",p); g_free(p); } g_object_set_data (G_OBJECT (hbox), "Patterns",patterns); gtk_widget_show_all(hbox); g_signal_connect_swapped(G_OBJECT (button), "clicked",G_CALLBACK(set_entry_selected_file),G_OBJECT(hbox)); return hbox; } /*****************************************************************************************/ GtkWidget * create_text_editor(GtkWidget *box) { GtkWidget *scrolledwindow; GtkWidget *textEditor; scrolledwindow = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow); gtk_container_add (GTK_CONTAINER (box), scrolledwindow); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); textEditor = gabedit_text_new (); gtk_widget_show (textEditor); gtk_container_add (GTK_CONTAINER (scrolledwindow), textEditor); return textEditor; } /*****************************************************************************************/ static void conversion_file(GtkWidget *wid,gpointer data) { gchar *fout = g_strdup_printf("%s%stmp%sfout",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); gchar *ferr = g_strdup_printf("%s%stmp%sferr",gabedit_directory(),G_DIR_SEPARATOR_S,G_DIR_SEPARATOR_S); G_CONST_RETURN gchar* inputFileName; G_CONST_RETURN gchar* outputFileName; gchar inputFileType[100]; gchar outputFileType[100]; G_CONST_RETURN gchar* t0; gchar* t; gchar options[BSIZE]; gchar* strout; gchar* strerr; gint nchar; GtkWidget *Win = (GtkWidget *)data; GtkWidget *buttonCenter = NULL; GtkWidget *buttonH = NULL; GtkWidget *buttonHAdd = NULL; GtkWidget *buttonHDelete = NULL; if(!this_is_an_object((GtkObject*)Win)) return; buttonCenter = g_object_get_data (G_OBJECT (Win), "ButtonCenter"); if(!this_is_an_object((GtkObject*)buttonCenter)) return; buttonH = g_object_get_data (G_OBJECT (Win), "ButtonH"); if(!this_is_an_object((GtkObject*)buttonH)) return; buttonHAdd = g_object_get_data (G_OBJECT (Win), "ButtonHAdd"); if(!this_is_an_object((GtkObject*)buttonHAdd)) return; buttonHDelete = g_object_get_data (G_OBJECT (Win), "ButtonHDelete"); if(!this_is_an_object((GtkObject*)buttonHDelete)) return; sprintf(options," "); if(!this_is_an_object((GtkObject*)inputEntry)) return; if(!this_is_an_object((GtkObject*)inputEntryCombo)) return; if(!this_is_an_object((GtkObject*)outputEntry)) return; if(!this_is_an_object((GtkObject*)outputEntryCombo)) return; if(GTK_TOGGLE_BUTTON(buttonCenter)->active) { if(GTK_TOGGLE_BUTTON(buttonH)->active) { if(GTK_TOGGLE_BUTTON(buttonHAdd)->active) sprintf(options," -c -h "); else sprintf(options," -c -d "); } else sprintf(options," -c "); } else if(GTK_TOGGLE_BUTTON(buttonH)->active) { if(GTK_TOGGLE_BUTTON(buttonHAdd)->active) sprintf(options," -h "); else sprintf(options," -d "); } inputFileName = gtk_entry_get_text(GTK_ENTRY(inputEntry)); outputFileName = gtk_entry_get_text(GTK_ENTRY(outputEntry)); t0 = gtk_entry_get_text(GTK_ENTRY(inputEntryCombo)); sscanf(t0,"%s",inputFileType); t0 = gtk_entry_get_text(GTK_ENTRY(outputEntryCombo)); sscanf(t0,"%s",outputFileType); t = g_strdup_printf("%s %s -i%s %s -o%s %s", babelCommand, options, inputFileType, inputFileName, outputFileType, outputFileName); gabedit_text_set_point(GABEDIT_TEXT(errorEditor),0); nchar = gabedit_text_get_length(GABEDIT_TEXT(errorEditor)); gabedit_text_forward_delete(GABEDIT_TEXT(errorEditor),nchar); run_local_command(fout,ferr,t,FALSE); strout = cat_file(fout,FALSE); strerr = cat_file(ferr,FALSE); if(strout) { gabedit_text_insert (GABEDIT_TEXT(errorEditor), NULL, NULL, NULL,strout,-1); g_free(strout); } if(strerr) { gabedit_text_insert (GABEDIT_TEXT(errorEditor), NULL, NULL, NULL,strerr,-1); g_free(strerr); } unlink(fout); unlink(ferr); g_free(fout); g_free(ferr); g_free(t); t = g_strdup(outputFileName); gtk_entry_set_text(GTK_ENTRY(outputEntry)," "); gtk_entry_set_text(GTK_ENTRY(outputEntry),t); } /*****************************************************************************************/ static void changed_file_name(GtkWidget *wid,gpointer data) { gchar* fileName = NULL; FILE* file = NULL; guint taille = BSIZE; gchar t[BSIZE]; gint nchar = 0; GtkWidget* textEditor; GtkWidget *entry = (GtkWidget *)data; if(!entry) return; if(!G_IS_OBJECT(entry)) return; textEditor = g_object_get_data (G_OBJECT (entry), "TextEditor"); if(!textEditor) return; if(!G_IS_OBJECT(textEditor)) return; fileName = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry))); if(fileName && strlen(fileName)>0) { delete_last_spaces(fileName); delete_first_spaces(fileName); str_delete_n(fileName); if(strlen(fileName)>0) file = FOpen(fileName, "rb"); } if(file) { gabedit_text_set_point(GABEDIT_TEXT(textEditor),0); nchar = gabedit_text_get_length(GABEDIT_TEXT(textEditor)); gabedit_text_forward_delete(GABEDIT_TEXT(textEditor),nchar); } while(file !=NULL) { nchar = fread(t, 1, taille, file); gabedit_text_insert (GABEDIT_TEXT(textEditor), NULL, NULL, NULL, t,nchar); if(nchar<(gint)taille) { fclose(file); break; } } if(file) gabedit_text_set_point(GABEDIT_TEXT(textEditor),0); if(fileName) g_free(fileName); } /********************************************************************************/ static void changed_type(GtkWidget *entry, gpointer data) { GtkWidget *entryCombo = NULL; GtkWidget *hboxBrowser = NULL; gchar type[100]; gchar **patterns = NULL; G_CONST_RETURN gchar* entrytext = NULL; G_CONST_RETURN gchar* entrycombo = NULL; gchar* temp = NULL; gchar* t = NULL; if(!entry) return; if(!G_IS_OBJECT(entry)) return; entryCombo = g_object_get_data (G_OBJECT (entry), "EntryCombo"); if(!entryCombo) return; if(!G_IS_OBJECT(entryCombo)) return; hboxBrowser = g_object_get_data (G_OBJECT (entry), "HBox"); if(!hboxBrowser) return; if(!G_IS_OBJECT(hboxBrowser)) return; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); entrycombo = gtk_entry_get_text(GTK_ENTRY(entryCombo)); sscanf(entrycombo,"%s",type); temp = get_suffix_name_file(entrytext); if(!strstr(type,"Automatic")) { t = g_strdup_printf("%s.%s",temp,type); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); t = g_strdup_printf("*.%s",type); } else { t = g_strdup_printf("%s.pdb",temp); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); t = g_strdup_printf("*.*"); } patterns = g_object_get_data (G_OBJECT (hboxBrowser), "Patterns"); strcpy(patterns[0],t); g_free(t); g_free(temp); } /********************************************************************************/ static void disconnect_type(GObject* entry, GObject *combo) { guint nh = 0; nh = g_signal_handlers_disconnect_by_func(G_OBJECT(combo), G_CALLBACK(changed_type), entry); } /********************************************************************************/ static GtkWidget *create_a_frame(GtkWidget *vboxall, GtkWidget *fp, gchar* title, gchar** labelLeft, gchar** patterns, gchar* combolist[], gint nlist) { GtkWidget *frame; GtkWidget *combo; GtkWidget *hbox; GtkWidget *box; GtkWidget *vboxframe; GtkWidget *entryCombo; GtkWidget *entryFileName; GtkWidget *textEditor; gushort i; GtkWidget *Table; gchar* liste = g_strdup_printf("%s%s%s.xyz",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.projectname); frame = gtk_frame_new (title); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); vboxframe = create_vbox(frame); Table = gtk_table_new(4,4,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); i=0; add_label_table(Table,labelLeft[i],(gushort)(i),0); add_label_table(Table,":",(gushort)(i),1); combo = create_combo_box_entry(combolist,nlist,TRUE,-1,-1); gtk_table_attach(GTK_TABLE(Table),combo,2,4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); entryCombo = GTK_BIN(combo)->child; gtk_editable_set_editable((GtkEditable*)entryCombo,FALSE); gtk_widget_show (combo); i=1; add_label_table(Table,labelLeft[i],(gushort)(i),0); add_label_table(Table,":",(gushort)(i),1); box = gtk_hbox_new(TRUE, 0); gtk_table_attach(GTK_TABLE(Table),box,2,4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); gtk_widget_show (box); hbox = create_browser(fp,box,liste,patterns); entryFileName = (GtkWidget*)(g_object_get_data(G_OBJECT(hbox),"Entry")); i=2; box = gtk_hbox_new(TRUE, 0); gtk_table_attach(GTK_TABLE(Table),box,0,4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); gtk_widget_show (box); textEditor = create_text_editor(box); gtk_widget_show_all(frame); g_object_set_data (G_OBJECT (entryFileName), "EntryCombo",entryCombo); g_object_set_data (G_OBJECT (entryFileName), "HBox",hbox); g_object_set_data (G_OBJECT (entryFileName), "TextEditor",textEditor); i = nlist-1; if(strstr(title,"Input")) i = 36; else i = nlist-2; gtk_entry_set_text(GTK_ENTRY(entryCombo),combolist[i]); g_free(liste); g_object_set_data (G_OBJECT (frame), "EntryFileName",entryFileName); g_object_set_data (G_OBJECT (frame), "EntryCombo",entryCombo); g_object_set_data (G_OBJECT (frame), "TextEditor",textEditor); g_object_set_data (G_OBJECT (frame), "Combo",combo); set_font (textEditor,FontsStyleData.fontname); return frame; } /*****************************************************************************************/ static void activateHButtons(GtkWidget *wid,gpointer data) { GtkWidget *Win = (GtkWidget *)data; GtkWidget *buttonH = NULL; GtkWidget *buttonHAdd = NULL; GtkWidget *buttonHDelete = NULL; gboolean sensitive; if(!this_is_an_object((GtkObject*)Win)) return; buttonH = g_object_get_data (G_OBJECT (Win), "ButtonH"); if(!this_is_an_object((GtkObject*)buttonH)) return; buttonHAdd = g_object_get_data (G_OBJECT (Win), "ButtonHAdd"); if(!this_is_an_object((GtkObject*)buttonHAdd)) return; buttonHDelete = g_object_get_data (G_OBJECT (Win), "ButtonHDelete"); if(!this_is_an_object((GtkObject*)buttonHDelete)) return; sensitive = GTK_TOGGLE_BUTTON(buttonH)->active; gtk_widget_set_sensitive(buttonHAdd, sensitive); gtk_widget_set_sensitive(buttonHDelete, sensitive); } /********************************************************************************/ void create_babel_dialogue() { GtkWidget *fp; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vbox1; GtkWidget *vbox2; GtkWidget *vpaned; GtkWidget *vboxwin; GtkWidget *hbox; GtkWidget *button; GtkWidget *table; GtkWidget *tableButtons; GtkWidget *buttonH; GtkWidget *buttonHAdd; GtkWidget *buttonHDelete; GtkWidget *buttonCenter; gchar title[]="Babel"; gchar *labelLeft[2]={N_("File Type"), N_("File Name")}; gint height = ScreenHeight; gint i; GtkWidget *frameInput; GtkWidget *frameOutput; GtkWidget *combo; GtkWidget *entry; setPatterns(); fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(fp),title); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Fenetre)); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); #ifdef G_OS_WIN32 height = ScreenHeight-40; gtk_window_set_default_size (GTK_WINDOW(fp), ScreenWidth-20, ScreenHeight-40); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); #else height = ScreenHeight-100; gtk_window_set_default_size (GTK_WINDOW(fp), ScreenWidth-20, ScreenHeight-100); #endif gtk_widget_realize(fp); init_child(fp, gtk_widget_destroy, " Babel "); g_signal_connect(G_OBJECT(fp),"delete_event",G_CALLBACK(destroy_children),NULL); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); vboxall = create_vbox(fp); vboxwin = vboxall; frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 1); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_add(GTK_CONTAINER(vboxall),frame); gtk_widget_show (frame); vboxall = gtk_vbox_new (TRUE, 0); gtk_widget_show (vboxall); gtk_container_add (GTK_CONTAINER (frame), vboxall); vpaned = gtk_vpaned_new(); gtk_paned_set_position(GTK_PANED(vpaned),(gint)(height*0.9)); gtk_container_add (GTK_CONTAINER (vboxall), vpaned); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_set_size_request(GTK_WIDGET(vbox1),-1,(gint)(height*0.9)); gtk_paned_add1(GTK_PANED(vpaned), vbox1); vbox2 = gtk_vbox_new (FALSE, 0); gtk_paned_add2(GTK_PANED(vpaned), vbox2); table = gtk_table_new(1,3,FALSE); gtk_box_pack_start (GTK_BOX(vbox1), table, TRUE, TRUE, 1); hbox = gtk_hbox_new (TRUE, 0); frame = create_a_frame(hbox, fp, _("Input File"),labelLeft, inputPatterns, inputFormat, nListInput); inputEntry = g_object_get_data (G_OBJECT (frame), "EntryFileName"); inputEntryCombo = g_object_get_data (G_OBJECT (frame), "EntryCombo"); inputTextEditor = g_object_get_data (G_OBJECT (frame), "TextEditor"); gabedit_text_set_editable (GABEDIT_TEXT (inputTextEditor), TRUE); frameInput = frame; set_base_style(inputTextEditor,0,0,0); set_text_style(inputTextEditor,0,256*250,0); gtk_table_attach(GTK_TABLE(table),hbox,0,1,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , 1,1); tableButtons = gtk_table_new(5,1,FALSE); gtk_table_attach(GTK_TABLE(table),tableButtons,1,2,0,1, (GtkAttachOptions)(GTK_SHRINK) , (GtkAttachOptions)(GTK_SHRINK), 1,1); button = gtk_button_new_with_label(_("Convert")); i = 0; gtk_table_attach(GTK_TABLE(tableButtons),button,0,1,i,i+1, (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(GTK_SHRINK), 1,1); buttonCenter = gtk_check_button_new_with_label(_("Center ") ); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCenter), FALSE); i=1; gtk_table_attach(GTK_TABLE(tableButtons),buttonCenter,0,1,i,i+1, (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(GTK_SHRINK), 1,1); buttonH = gtk_check_button_new_with_label(_("H atoms")); i=2; gtk_table_attach(GTK_TABLE(tableButtons),buttonH,0,1,i,i+1, (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(GTK_SHRINK), 1,1); buttonHAdd = gtk_radio_button_new_with_label( NULL,_("Add ") ); i=3; gtk_table_attach(GTK_TABLE(tableButtons),buttonHAdd,0,1,i,i+1, (GtkAttachOptions)(GTK_SHRINK), (GtkAttachOptions)(GTK_SHRINK), 1,1); buttonHDelete = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonHAdd)), _("Delete")); i=4; gtk_table_attach(GTK_TABLE(tableButtons),buttonHDelete,0,1,i,i+1, (GtkAttachOptions)(GTK_SHRINK), (GtkAttachOptions)(GTK_SHRINK), 1,1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonH), FALSE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonHAdd), TRUE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonHDelete), FALSE); gtk_widget_set_sensitive(buttonHAdd, FALSE); gtk_widget_set_sensitive(buttonHDelete, FALSE); g_object_set_data (G_OBJECT (fp), "ButtonCenter", buttonCenter); g_object_set_data (G_OBJECT (fp), "ButtonH", buttonH); g_object_set_data (G_OBJECT (fp), "ButtonHAdd", buttonHAdd); g_object_set_data (G_OBJECT (fp), "ButtonHDelete", buttonHDelete); g_signal_connect (G_OBJECT (buttonH), "clicked", G_CALLBACK(activateHButtons), fp); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); hbox = gtk_hbox_new (TRUE, 0); frame = create_a_frame(hbox, fp, _("Outpout File"),labelLeft, outputPatterns, outputFormat, nListOutput); outputEntry = g_object_get_data (G_OBJECT (frame), "EntryFileName"); outputEntryCombo = g_object_get_data (G_OBJECT (frame), "EntryCombo"); outputTextEditor = g_object_get_data (G_OBJECT (frame), "TextEditor"); gabedit_text_set_editable (GABEDIT_TEXT (outputTextEditor), TRUE); frameOutput = frame; set_base_style(outputTextEditor,0,0,0); set_text_style(outputTextEditor,256*250,256*250,256*250); gtk_table_attach(GTK_TABLE(table),hbox,2,3,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , 1,1); hbox = gtk_hbox_new (TRUE, 0); gtk_box_pack_start (GTK_BOX(vbox2), hbox, TRUE, TRUE, 5); errorEditor = create_text_editor(hbox); set_font (errorEditor,FontsStyleData.fontname); set_base_style(errorEditor,0,256*50,256*50); set_text_style(errorEditor,256*250,256*250,256*250); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(conversion_file),fp); gtk_widget_show_all(fp); combo = g_object_get_data (G_OBJECT (frameInput), "Combo"); entry = g_object_get_data (G_OBJECT (frameInput), "EntryFileName"); g_signal_connect_swapped(G_OBJECT(GTK_COMBO_BOX(combo)), "changed",G_CALLBACK(changed_type),entry); g_signal_connect_after(G_OBJECT(entry), "changed",G_CALLBACK(changed_file_name),entry); g_signal_connect_after(G_OBJECT(entry), "destroy",G_CALLBACK(disconnect_type),G_OBJECT(GTK_COMBO_BOX(combo))); entry = GTK_BIN(combo)->child; gtk_entry_set_text(GTK_ENTRY(entry),"txt"); gtk_entry_set_text(GTK_ENTRY(entry),inputFormat[36]); combo = g_object_get_data (G_OBJECT (frameOutput), "Combo"); entry = g_object_get_data (G_OBJECT (frameOutput), "EntryFileName"); g_signal_connect_swapped(G_OBJECT(GTK_COMBO_BOX(combo)), "changed",G_CALLBACK(changed_type),entry); g_signal_connect(G_OBJECT(entry), "changed",G_CALLBACK(changed_file_name),entry); g_signal_connect_after(G_OBJECT(entry), "destroy",G_CALLBACK(disconnect_type),G_OBJECT(GTK_COMBO_BOX(combo))); entry = GTK_BIN(combo)->child; gtk_entry_set_text(GTK_ENTRY(entry),"txt"); gtk_entry_set_text(GTK_ENTRY(entry),outputFormat[nListOutput-2]); } /************************************************************************************************************************************************************/ static GtkWidget *create_selector_frame(GtkWidget *vboxall, GtkWidget *fp, gboolean input, gchar** labelLeft, gchar** patterns, gchar* combolist[], gint nlist) { GtkWidget *frame; GtkWidget *combo; GtkWidget *hbox; GtkWidget *box; GtkWidget *vboxframe; GtkWidget *entryCombo; GtkWidget *entryFileName; gushort i; GtkWidget *Table; gchar* liste = g_strdup_printf("%s%s%s.xyz",fileopen.localdir,G_DIR_SEPARATOR_S,fileopen.projectname); frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); vboxframe = create_vbox(frame); Table = gtk_table_new(4,4,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); i=0; add_label_table(Table,labelLeft[i],(gushort)(i),0); add_label_table(Table,":",(gushort)(i),1); combo = create_combo_box_entry(combolist,nlist,TRUE,-1,-1); gtk_table_attach(GTK_TABLE(Table),combo,2,4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); entryCombo = GTK_BIN(combo)->child; gtk_editable_set_editable((GtkEditable*)entryCombo,FALSE); gtk_widget_show (combo); i=1; add_label_table(Table,labelLeft[i],(gushort)(i),0); add_label_table(Table,":",(gushort)(i),1); box = gtk_hbox_new(TRUE, 0); gtk_table_attach(GTK_TABLE(Table),box,2,4,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1); gtk_widget_show (box); hbox = create_browser(fp,box,liste,patterns); entryFileName = (GtkWidget*)(g_object_get_data(G_OBJECT(hbox),"Entry")); gtk_widget_show_all(frame); g_object_set_data (G_OBJECT (entryFileName), "EntryCombo",entryCombo); g_object_set_data (G_OBJECT (entryFileName), "HBox",hbox); i = 0; gtk_entry_set_text(GTK_ENTRY(entryCombo),combolist[i]); g_free(liste); g_object_set_data (G_OBJECT (frame), "EntryFileName",entryFileName); g_object_set_data (G_OBJECT (frame), "EntryCombo",entryCombo); g_object_set_data (G_OBJECT (frame), "Combo",combo); return frame; } /*****************************************************************************************/ GtkWidget* create_babel_read_save_dialogue(gboolean read) { GtkWidget *fp; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *hbox; GtkWidget *button; GtkWidget *okButton; GtkWidget *combo; GtkWidget *entry; GtkWidget *entryCombo; gchar *labelLeft[2]={"File Type", "File Name"}; static gchar** outputFormatWithAuto = NULL; static gchar** inputFormatWithAuto = NULL; gint i; gint n = nListOutput + 1; setPatterns(); if(read) n = nListInput +1; if(outputFormatWithAuto == NULL) { outputFormatWithAuto = g_malloc((nListOutput+1)*sizeof(gchar*)); outputFormatWithAuto[0] = g_strdup("Automatic"); for(i=1;i<(nListOutput+1);i++) outputFormatWithAuto[i] = g_strdup(outputFormat[i-1]); } if(inputFormatWithAuto == NULL) { inputFormatWithAuto = g_malloc((nListInput+1)*sizeof(gchar*)); inputFormatWithAuto[0] = g_strdup("Automatic"); for(i=1;i<(nListInput+1);i++) inputFormatWithAuto[i] = g_strdup(inputFormat[i-1]); } fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); if(read) gtk_window_set_title(GTK_WINDOW(fp),_("Read geometry (using Open Babel)")); else gtk_window_set_title(GTK_WINDOW(fp),_("Save geometry (using Open Babel)")); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Fenetre)); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_widget_realize(fp); if(read) init_child(fp, gtk_widget_destroy, _(" Read geometry with Open Babel ")); else init_child(fp, gtk_widget_destroy, _(" Save geometry using Open Babel ")); g_signal_connect(G_OBJECT(fp),"delete_event",G_CALLBACK(destroy_children),NULL); gtk_container_set_border_width (GTK_CONTAINER (fp), 0); vboxall = create_vbox(fp); frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 1); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_add(GTK_CONTAINER(vboxall),frame); gtk_widget_show (frame); vboxall = gtk_vbox_new (FALSE, 0); gtk_widget_show (vboxall); gtk_container_add (GTK_CONTAINER (frame), vboxall); hbox = gtk_hbox_new (TRUE, 0); gtk_box_pack_start( GTK_BOX(vboxall), hbox,TRUE,TRUE,0); if(read) frame = create_selector_frame(hbox, fp, TRUE, labelLeft, inputPatterns, inputFormatWithAuto, n); else frame = create_selector_frame(hbox, fp, TRUE, labelLeft, outputPatterns, outputFormatWithAuto, n); entry = g_object_get_data (G_OBJECT (frame), "EntryFileName"); entryCombo = g_object_get_data (G_OBJECT (frame), "EntryCombo"); hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vboxall), hbox, FALSE, FALSE, 2); button = create_button(fp,"OK"); gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 2); okButton = button; g_object_set_data (G_OBJECT (fp), "EntryFileName", entry); g_object_set_data (G_OBJECT (fp), "EntryCombo", entryCombo); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); button = create_button(fp,"Cancel"); gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 2); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(delete_child),G_OBJECT(fp)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); combo = g_object_get_data (G_OBJECT (frame), "Combo"); g_signal_connect_swapped(G_OBJECT(GTK_COMBO_BOX(combo)), "changed",G_CALLBACK(changed_type), entry); g_signal_connect_after(G_OBJECT(entry), "destroy",G_CALLBACK(disconnect_type),G_OBJECT(GTK_COMBO_BOX(combo))); gtk_widget_show_all(fp); gtk_entry_set_text(GTK_ENTRY(entryCombo),"txt"); if(read) gtk_entry_set_text(GTK_ENTRY(entryCombo),inputFormatWithAuto[0]); else gtk_entry_set_text(GTK_ENTRY(entryCombo),outputFormatWithAuto[0]); if(GTK_IS_WIDGET(entryCombo)) gtk_widget_set_sensitive(entryCombo,FALSE); g_object_set_data (G_OBJECT (okButton), "Window", fp); return okButton; } /********************************************************************************/ GabeditSrc250/src/Geometry/DrawGeomCairo.h0000644000175100017510000002323313130665226020715 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_DRAWGEOMCAIRO_H__ #define __GABEDIT_DRAWGEOMCAIRO_H__ #include "Fragments.h" typedef enum { ROTATION,ROTATIONZ,TRANSMOVIE,CENTER, SCALEGEOM,SCALESTICK,SCALEBALL,SCALEDIPOLE, SELECTOBJECTS, SELECTFRAG,SELECTRESIDUE, DELETEOBJECTS, /* Frag or atom or bond */ DELETEFRAG, MOVEFRAG,ROTLOCFRAG,ROTZLOCFRAG, ADDFRAGMENT, EDITOBJECTS, /* insert a atom(s) and or a bond, change a bond */ ADDATOMSBOND, CHANGEBOND,CUTBOND, MEASURE,SHOWMEASURE, RENDERSTICK,RENDERBALL, LABELNO,LABELSYMB,LABELNUMB,LABELMMTYP,LABELPDBTYP,LABELLAYER,LABELSYMBNUMB, LABELCHARGE,LABELSYMBCHARGE,LABELNUMBCHARGE,LABELRESIDUES,LABELCOORDINATES, FXYZ,FMOL2,FTINKER,FPDB,FHIN,FGABEDIT,FGZMAT,FMZMAT, FDALTONIN,FDALTONFIRST,FDALTONLAST, FGAMESSIN,FGAMESSFIRST,FGAMESSLAST, FGAUSSIN,FGAUSSOUTFIRST,FGAUSSOUTLAST, FMOLCASIN,FMOLCASOUTFIRST, FMOLCASOUTLAST, FMOLPROIN,FMOLPROOUTFIRST, FMOLPROOUTLAST, FMPQCIN,FMPQCOUTFIRST, FMPQCOUTLAST, FGEOMCONVDALTON,FGEOMCONVGAMESS,FGEOMCONVGAUSS,FGEOMCONVMOLPRO, FGEOMCONVMOLDEN,FGEOMCONVGABEDIT,FGEOMCONVMPQC, FGEOMCONVXYZ, SAVEJPEG, SAVEPPM, SAVEBMP, SAVEPS }GabEditGeomOperation; typedef enum { RECTANGLE,CIRCLE,ATOMS }GabEditSelectType; typedef enum { LOW_LAYER=0, MEDIUM_LAYER, HIGH_LAYER }GabEditLayerType; typedef struct _Camera { gdouble position; gdouble f; }Camera; typedef struct _GeomDef { gdouble X; gdouble Y; gdouble Z; gdouble Charge; SAtomsProp Prop; gchar* mmType; gchar* pdbType; gchar* Residue; gint ResidueNumber; gboolean show; gint Xi; gint Yi; gushort Rayon; gdouble Coefpers; guint N; gboolean ColorAlloc; GabEditLayerType Layer; gboolean Variable; gint* typeConnections; }GeomDef; typedef struct _GeomDraw { gint nAtoms; GeomDef* atoms; }GeomDraw; typedef struct _CoordMaxMin { gdouble Xmax; gdouble Xmin; gdouble Ymax; gdouble Ymin; gdouble Zmax; gdouble Zmin; gdouble Cmax; }CoordMaxMin; typedef struct _FragmentsItems { gchar* Name; gchar* Menu; gint Num; }FragmentsItems; FragmentsItems *FragItems; gint NFrags; CoordMaxMin coordmaxmin; GeomDef *geometry; GeomDef *geometry0; guint Natoms; gint *NumFatoms; guint NFatoms; void createIstopeDistributionCalculationFromDrawGeom(); void add_geometry_to_fifo(); void get_geometry_from_fifo(gboolean toNext); gdouble get_factorstick(); gdouble get_factorball(); gdouble get_factordipole(); gdouble get_factor(); gint TransX; gint TransY; GtkWidget *GeomDlg; GtkWidget *StopButton; gboolean StopCalcul; gboolean ShadMode; gboolean PersMode; gboolean LightMode; gboolean OrtepMode; gboolean DrawDistance; gboolean DrawDipole; gboolean ShowDipole; gboolean ShowHBonds; #define NDIVDIPOLE 20 gdouble dipole[NDIVDIPOLE][3]; gdouble dipole0[NDIVDIPOLE][3]; gdouble dipole00[NDIVDIPOLE][3]; gint DXi[NDIVDIPOLE]; gint DYi[NDIVDIPOLE]; gint Ndipole[NDIVDIPOLE]; gchar* AtomToInsert; gint NumSelAtoms[4]; gboolean Ddef; void copy_screen_geom_clipboard(); void reset_origine_molecule_drawgeom(); void get_origine_molecule_drawgeom(gdouble orig[]); void get_orgin_molecule_drawgeom(gdouble orig[]); void get_camera_values_drawgeom(gdouble* zn, gdouble* zf, gdouble* angle, gdouble* aspect, gboolean* persp); void create_drawmolecule_file(); void read_drawmolecule_file(); GeomDef* copyGeometry(GeomDef* geom0); void freeGeometry(GeomDef* geom); gint get_connection_type(gint i, gint j); void setMMTypeOfselectedAtomsDlg(); void setPDBTypeOfselectedAtomsDlg(); void setResidueNameOfselectedAtomsDlg(); void setChargeOfselectedAtomsDlg(); void scaleChargesOfSelectedAtomsDlg(); void addMaxHydrogens(); void addHydrogens(); void addOneHydrogen(); void addHydrogensTpl(); void set_fix_selected_atoms(); void set_variable_selected_atoms(); void messageAmberTypesDefine(); gboolean getShowMultipleBonds(); void RenderMultipleBonds(GtkWidget *win,gboolean show); GabEditGeomOperation getOperationType(); void set_origin_to_center_of_fragment(); void set_xyz_to_principal_axes_of_selected_atoms(gpointer data, guint Operation,GtkWidget* wid); void create_tolerance_window(GtkWidget*w, gpointer data); void get_abelian_orientation_with_reduction(GtkWidget*w, gpointer data); void get_standard_orientation_with_reduction(GtkWidget*w, gpointer data); void get_standard_orientation_with_symmetrization(GtkWidget*w, gpointer data); void setMMTypesCharges(gpointer data, guint Operation,GtkWidget* wid); GeomDef* Free_One_Geom(GeomDef* geom,gint N); void set_text_to_draw(gchar* str); void set_statubar_operation_str(gchar* str); GdkPixmap* get_drawing_pixmap(); GdkColormap* get_drawing_colormap(); guint label_option(); gboolean distances_draw_mode(); gboolean stick_mode(); gboolean space_fill_mode(); gboolean pers_mode(); gboolean shad_mode(); gboolean light_mode(); gboolean ortep_mode(); gboolean cartoon_mode(); gdouble get_frag_angle(); void set_frag_angle(gdouble a); gboolean hbond_connections(gint i, gint j); gchar *get_distance(gint i,gint j); gchar *get_angle(gint i,gint j,gint l); gchar *get_dihedral(gint i,gint j,gint l,gint m); void create_window_drawing(); void rafresh_drawing(); void rafresh_window_geom(); void draw_geometry(GtkWidget *,gpointer); gboolean draw_lines_yes_no(guint i,guint j); guint get_num_min_rayonIJ(guint i,guint j); void SetRadioPopupMenu(gchar* button); void HideShowMeasure(gboolean hiding); void AdjustHydrogensYesNo(gboolean adjust); gboolean getAdjustHydrogensYesNo(); void RebuildConnectionsDuringEditionYesNo(gboolean rebuild); gboolean getRebuildConnectionsDuringEditionYesNo(); void ActivateButtonOperation (GtkWidget *widget, guint data); void RenderStick(); void RenderBallStick(); void RenderSpaceFill(); gboolean dipole_draw_mode(); gboolean dipole_mode(); void CreateDrawMenu(); void TraitementGeom(gpointer data, guint Operation,GtkWidget* wid); void copySelectedAtoms(); void DeleteMolecule(); void SetOriginAtCenter(gpointer data, guint Operation,GtkWidget* wid); void read_geometries_convergence(gpointer data, guint Operation,GtkWidget* wid); void save_geometry(gpointer data, guint Operation,GtkWidget* wid); void read_geometry(gpointer data, guint Operation,GtkWidget* wid); void factor_default(GtkWidget *win,gpointer d); void factor_stick_default(GtkWidget *win,gpointer d); void factor_ball_default(GtkWidget *win,gpointer d); void factor_dipole_default(GtkWidget *win,gpointer d); void factor_all_default(GtkWidget *win,gpointer d); void RenderShad(GtkWidget *,gboolean); void RenderPers(GtkWidget *,gboolean); void RenderLight(GtkWidget *,gboolean); void RenderOrtep(GtkWidget *,gboolean); void RenderCartoon(GtkWidget *,gboolean); void RenderDipole(GtkWidget *,gboolean); void RenderHBonds(GtkWidget *,gboolean); void RenderHAtoms(GtkWidget *,gboolean); void set_layer_of_selected_atoms(GabEditLayerType l); void SetLabelDistances(GtkWidget *,gboolean); void SetLabelDipole(GtkWidget *win,gboolean YesNo); void initLabelOptions(guint data); void SetLabelOptions(GtkWidget *widget, guint data); void AddFragment(GtkWidget *widget, guint data); void add_a_fragment(GtkWidget*win, gchar* fragName); void addAFragment(gchar* fragName); void set_back_color_black(); void open_color_dlg(GtkWidget *win,gpointer *DrawingArea); void set_HBonds_dialog_geom(GtkWidget *win, guint data); void set_povray_options_geom(GtkWidget *win, guint data); void destroy_drawing_and_children(GtkWidget *win,gpointer data); void SetOperation(GtkWidget *,guint); void set_dipole_from_charges(); gdouble get_sum_charges(); void compute_total_charge(); void compute_charge_by_residue(); void compute_charge_of_selected_atoms(); void compute_dipole_from_charges(); void setPersonalFragment(Fragment F); void unselect_all_atoms(); void hide_selected_atoms(); void hide_not_selected_atoms(); void show_all_atoms(); void show_hydrogen_atoms(); void deleteSelectedAtoms(); void deleteHydrogenAtoms(); void define_geometry(); void reset_multiple_bonds(); void reset_all_connections(); void resetConnections(); void resetConnectionsBetweenSelectedAndNotSelectedAtoms(); void resetConnectionsBetweenSelectedAtoms(); void resetMultipleConnections(); void moveCenterOfSelectedAtomsToOrigin(); void alignPrincipalAxesOfSelectedAtomsToXYZ(); void alignSelectedAndNotSelectedAtoms(); void reset_hydrogen_bonds(); void export_geometry(gchar* fileName, gchar* fileType); void set_sensitive_stop_button(gboolean sens); void reset_charges_multiplicities(); void copy_connections(GeomDef* geom0, GeomDef* geom, gint n); void set_optimal_geom_view(); void getQuatGeom(gdouble q[]); void drawGeom(); void getOptimalCiCj(gint i, gint j, gdouble* Ci, gdouble* Cj, gdouble* C0); #endif /* __GABEDIT_DRAWGEOMCAIRO_H__ */ GabeditSrc250/src/Geometry/DrawGeomGL.h0000644000175100017510000002432413130665226020164 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_DRAWGEOMGL_H__ #define __GABEDIT_DRAWGEOMGL_H__ #include "Fragments.h" #include "../../gl2ps/gl2ps.h" #include "../Geometry/AxesGeomGL.h" typedef enum { ROTATION,ROTATIONZ,TRANSMOVIE,CENTER, SCALEGEOM,SCALESTICK,SCALEBALL,SCALEDIPOLE, SELECTOBJECTS, SELECTFRAG,SELECTRESIDUE, DELETEOBJECTS, /* Frag or atom or bond */ DELETEFRAG, MOVEFRAG,ROTLOCFRAG,ROTZLOCFRAG, ADDFRAGMENT, EDITOBJECTS, /* insert a atom(s) and or a bond, change a bond */ ADDATOMSBOND, CHANGEBOND,CUTBOND, MEASURE,SHOWMEASURE, RENDERSTICK,RENDERBALL, LABELNO,LABELSYMB,LABELNUMB,LABELMMTYP,LABELPDBTYP,LABELLAYER,LABELSYMBNUMB, LABELCHARGE,LABELSYMBCHARGE,LABELNUMBCHARGE,LABELRESIDUES,LABELCOORDINATES, FXYZ,FMOL2,FTINKER,FPDB,FHIN,FGABEDIT,FGZMAT,FMZMAT, FDALTONIN,FDALTONFIRST,FDALTONLAST, FGAMESSIN,FGAMESSFIRST,FGAMESSLAST, FGAUSSIN,FGAUSSOUTFIRST,FGAUSSOUTLAST, FMOLCASIN,FMOLCASOUTFIRST, FMOLCASOUTLAST, FMOLPROIN,FMOLPROOUTFIRST, FMOLPROOUTLAST, FMPQCIN,FMPQCOUTFIRST, FMPQCOUTLAST, FGEOMCONVDALTON,FGEOMCONVGAMESS,FGEOMCONVGAUSS,FGEOMCONVMOLPRO, FGEOMCONVMOLDEN,FGEOMCONVGABEDIT,FGEOMCONVMPQC, FGEOMCONVXYZ, SAVEJPEG, SAVEPPM, SAVEBMP, SAVEPS }GabEditGeomOperation; typedef enum { RECTANGLE,CIRCLE,ATOMS }GabEditSelectType; typedef enum { LOW_LAYER=0, MEDIUM_LAYER, HIGH_LAYER }GabEditLayerType; typedef struct _Camera { gdouble position; gdouble f; }Camera; typedef struct _GeomDef { gdouble X; gdouble Y; gdouble Z; gdouble Charge; SAtomsProp Prop; gchar* mmType; gchar* pdbType; gchar* Residue; gint ResidueNumber; gboolean show; gint Xi; gint Yi; gushort Rayon; gdouble Coefpers; guint N; gboolean ColorAlloc; GabEditLayerType Layer; gboolean Variable; gint* typeConnections; }GeomDef; typedef struct _GeomDraw { gint nAtoms; GeomDef* atoms; }GeomDraw; typedef struct _CoordMaxMin { gdouble Xmax; gdouble Xmin; gdouble Ymax; gdouble Ymin; gdouble Zmax; gdouble Zmin; gdouble Cmax; }CoordMaxMin; typedef struct _FragmentsItems { gchar* Name; gchar* Menu; gint Num; }FragmentsItems; FragmentsItems *FragItems; gint NFrags; CoordMaxMin coordmaxmin; GeomDef *geometry; GeomDef *geometry0; guint Natoms; gint *NumFatoms; guint NFatoms; void createIstopeDistributionCalculationFromDrawGeom(); void add_geometry_to_fifo(); void get_geometry_from_fifo(gboolean toNext); gdouble get_factorstick(); gdouble get_factorball(); gdouble get_factordipole(); gdouble get_factor(); gint TransX; gint TransY; GtkWidget *GeomDlg; GtkWidget *StopButton; gboolean StopCalcul; gboolean ShadMode; gboolean PersMode; gboolean LightMode; gboolean OrtepMode; gboolean DrawDistance; gboolean DrawDipole; gboolean ShowDipole; gboolean ShowHBonds; #define NDIVDIPOLE 20 gdouble dipole[NDIVDIPOLE][3]; gdouble dipole0[NDIVDIPOLE][3]; gdouble dipole00[NDIVDIPOLE][3]; gint DXi[NDIVDIPOLE]; gint DYi[NDIVDIPOLE]; gint Ndipole[NDIVDIPOLE]; gchar* AtomToInsert; gint NumSelAtoms[4]; gboolean Ddef; void set_camera_drawgeom(); void set_light_geom_on_off(gint i); void set_light_positions_drawgeom(gchar* title); void copy_screen_geom_clipboard(); void reset_origine_molecule_drawgeom(); void get_origine_molecule_drawgeom(gdouble orig[]); void get_orgin_molecule_drawgeom(gdouble orig[]); void get_camera_values_drawgeom(gdouble* zn, gdouble* zf, gdouble* angle, gdouble* aspect, gboolean* persp); void create_drawmolecule_file(); void read_drawmolecule_file(); GeomDef* copyGeometry(GeomDef* geom0); void freeGeometry(GeomDef* geom); gint get_connection_type(gint i, gint j); void setMMTypeOfselectedAtomsDlg(); void setPDBTypeOfselectedAtomsDlg(); void setResidueNameOfselectedAtomsDlg(); void setChargeOfselectedAtomsDlg(); void scaleChargesOfSelectedAtomsDlg(); void addMaxHydrogens(); void addHydrogens(); void addOneHydrogen(); void addHydrogensTpl(); void set_fix_selected_atoms(); void set_variable_selected_atoms(); void messageAmberTypesDefine(); gboolean getShowMultipleBonds(); void RenderMultipleBonds(GtkWidget *win,gboolean show); GabEditGeomOperation getOperationType(); void set_origin_to_center_of_fragment(); void set_xyz_to_principal_axes_of_selected_atoms(gpointer data, guint Operation,GtkWidget* wid); void create_tolerance_window(GtkWidget*w, gpointer data); void get_abelian_orientation_with_reduction(GtkWidget*w, gpointer data); void get_standard_orientation_with_reduction(GtkWidget*w, gpointer data); void get_standard_orientation_with_symmetrization(GtkWidget*w, gpointer data); void setMMTypesCharges(gpointer data, guint Operation,GtkWidget* wid); GeomDef* Free_One_Geom(GeomDef* geom,gint N); void set_text_to_draw(gchar* str); void set_statubar_operation_str(gchar* str); GdkPixmap* get_drawing_pixmap(); GdkColormap* get_drawing_colormap(); guint label_option(); gboolean distances_draw_mode(); gboolean ortho_mode(); gboolean stick_mode(); gboolean space_fill_mode(); gboolean pers_mode(); gboolean shad_mode(); gboolean light_mode(); gboolean ortep_mode(); gboolean cartoon_mode(); gdouble get_frag_angle(); void set_frag_angle(gdouble a); gboolean hbond_connections(gint i, gint j); gchar *get_distance(gint i,gint j); gchar *get_angle(gint i,gint j,gint l); gchar *get_dihedral(gint i,gint j,gint l,gint m); void create_window_drawing(); void rafresh_drawing(); void draw_geometry(GtkWidget *,gpointer); gboolean draw_lines_yes_no(guint i,guint j); guint get_num_min_rayonIJ(guint i,guint j); void SetRadioPopupMenu(gchar* button); void HideShowMeasure(gboolean hiding); void AdjustHydrogensYesNo(gboolean adjust); gboolean getAdjustHydrogensYesNo(); void RebuildConnectionsDuringEditionYesNo(gboolean rebuild); gboolean getRebuildConnectionsDuringEditionYesNo(); void ActivateButtonOperation (GtkWidget *widget, guint data); void RenderStick(); void RenderBallStick(); void RenderSpaceFill(); gboolean dipole_draw_mode(); gboolean dipole_mode(); void CreateDrawMenu(); void TraitementGeom(gpointer data, guint Operation,GtkWidget* wid); void copySelectedAtoms(); void DeleteMolecule(); void SetOriginAtCenter(gpointer data, guint Operation,GtkWidget* wid); void read_geometries_convergence(gpointer data, guint Operation,GtkWidget* wid); void save_geometry(gpointer data, guint Operation,GtkWidget* wid); void read_geometry(gpointer data, guint Operation,GtkWidget* wid); void factor_default(GtkWidget *win,gpointer d); void factor_stick_default(GtkWidget *win,gpointer d); void factor_ball_default(GtkWidget *win,gpointer d); void factor_dipole_default(GtkWidget *win,gpointer d); void factor_all_default(GtkWidget *win,gpointer d); void RenderShad(GtkWidget *,gboolean); void RenderPers(GtkWidget *,gboolean); void RenderLight(GtkWidget *,gboolean); void RenderOrtep(GtkWidget *,gboolean); void RenderCartoon(GtkWidget *,gboolean); void RenderDipole(GtkWidget *,gboolean); void RenderAxes(GtkWidget *,gboolean); void RenderBox(GtkWidget *,gboolean); void RenderHBonds(GtkWidget *,gboolean); void RenderHAtoms(GtkWidget *,gboolean); void set_layer_of_selected_atoms(GabEditLayerType l); void SetLabelDistances(GtkWidget *,gboolean); void SetLabelDipole(GtkWidget *win,gboolean YesNo); void SetLabelsOrtho(GtkWidget *,gboolean); void initLabelOptions(guint data); void SetLabelOptions(GtkWidget *widget, guint data); void AddFragment(GtkWidget *widget, guint data); void add_a_fragment(GtkWidget*win, gchar* fragName); void addAFragment(gchar* fragName); void set_back_color_black(); void open_color_dlg(GtkWidget *win,gpointer *DrawingArea); void set_HBonds_dialog_geom(GtkWidget *win, guint data); void set_povray_options_geom(GtkWidget *win, guint data); void destroy_drawing_and_children(GtkWidget *win,gpointer data); void SetOperation(GtkWidget *,guint); void set_dipole_from_charges(); gdouble get_sum_charges(); void compute_total_charge(); void compute_charge_by_residue(); void compute_charge_of_selected_atoms(); void compute_dipole_from_charges(); void setPersonalFragment(Fragment F); void unselect_all_atoms(); void hide_selected_atoms(); void hide_not_selected_atoms(); void show_all_atoms(); void show_hydrogen_atoms(); void deleteSelectedAtoms(); void deleteHydrogenAtoms(); void define_geometry(); void reset_multiple_bonds(); void reset_all_connections(); void resetConnections(); void resetConnectionsBetweenSelectedAndNotSelectedAtoms(); void resetConnectionsBetweenSelectedAtoms(); void resetMultipleConnections(); void moveCenterOfSelectedAtomsToOrigin(); void alignPrincipalAxesOfSelectedAtomsToXYZ(); void alignSelectedAndNotSelectedAtoms(); void reset_hydrogen_bonds(); void export_geometry(gchar* fileName, gchar* fileType); void set_sensitive_stop_button(gboolean sens); void reset_charges_multiplicities(); void copy_connections(GeomDef* geom0, GeomDef* geom, gint n); void set_optimal_geom_view(); void getQuatGeom(gdouble q[]); void redrawGeomGL2PS(); void drawGeom(); void getOptimalCiCj(gint i, gint j, gdouble* Ci, gdouble* Cj, gdouble* C0); void set_xyz_to_standard_orientation_all(); void set_xyz_to_standard_orientation_selected_atoms(); void set_xyz_to_standard_orientation_not_selected_atoms(); void set_xyz_to_standard_orientation_selected_and_not_selected_atoms(); gboolean testShowBoxGeom(); #endif /* __GABEDIT_DRAWGEOMGL_H__ */ GabeditSrc250/src/Geometry/RotFragments.h0000644000175100017510000000170313130665226020643 0ustar alloucheallouche #ifndef __GABEDIT_ROTFRAGMENTS_H__ #define __GABEDIT_ROTFRAGMENTS_H__ gdouble AngleAboutXAxis(gdouble* coord); gdouble AngleAboutYAxis(gdouble* coord); gdouble AngleAboutZAxis(gdouble* coord); gdouble AngleToAtoms(gdouble*C3,gdouble* C1,gdouble* C2); gdouble TorsionToAtoms(gdouble*C4,gdouble*C1,gdouble* C2,gdouble* C3); void SetBondDistance(GeomDef* geom,gint n1,gint n2,gdouble bondLength,gint list[],gint nlist); void SetBondDistanceX(GeomDef* geom,gint n1,gint n2,gdouble bondLength,gint list[],gint nlist); void SetTorsion(gint Natoms,GeomDef *geometry, gint a1num, gint a2num, gint a3num, gint a4num, gdouble torsion,gint atomList[], gint numberOfElements ); void SetAngle(gint Natoms,GeomDef *geometry, gint a1num, gint a2num, gint a3num, gdouble angle,gint atomList[], gint numberOfElements ); void SetOposedBondeds(gint Natoms,GeomDef *geometry, gint ns, gint toBond,gint atomList[], gint numberOfElements ); #endif /* __GABEDIT_ROTFRAGMENTS_H__ */ GabeditSrc250/src/Geometry/PersonalFragments.c0000644000175100017510000007062113130665226021662 0ustar alloucheallouche/*PersonalFragments.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Geometry/Fragments.h" #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/PersonalFragments.h" #include "../Geometry/SavePersonalFragments.h" #include "../Geometry/LoadPersonalFragments.h" #include "../Geometry/MenuToolBarGeom.h" #include "../Geometry/FragmentsSelector.h" #define NENTRYS 5 typedef enum { E_GROUPE=0, E_FRAGMENT, E_TODELETE, E_TOBONDTO, E_ANGLE } SetEntryType; static GtkWidget* Entrys[NENTRYS]; static gdouble labelWidth = 0.15; static gdouble entryWidth = 0.15; static PersonalFragments* personnalFragments = NULL; /*****************************************************************************/ gint getNumberOfGroups() { if(personnalFragments) return personnalFragments->numberOfGroupes; else return 0; } /*****************************************************************************/ static gint getIndexGeom(gint n) { gint k; if(n<1) return -1; for (k=0;k<(gint)Natoms;k++) if(geometry[k].N == (guint)n) return k; return -1; } /********************************************************************************/ static gint numGroupe(gchar* groupName) { gint i; for(i=0;inumberOfGroupes;i++) { if(!strcmp(groupName,personnalFragments->personnalGroupes[i].groupName)) return i; } return -1; } /*****************************************************************/ static gchar** getListGroupes(gint*n) { gchar**t = NULL; gint i; if(!personnalFragments) { *n = 0; return NULL; } *n = personnalFragments->numberOfGroupes; if(*n<1) return t; t = g_malloc((*n)*sizeof(gchar*)); for(i=0;inumberOfGroupes;i++) t[i] = g_strdup(personnalFragments->personnalGroupes[i].groupName); return t; } /*****************************************************************/ static gchar** getListFragments(gint*n, gchar* groupName) { gchar**t = NULL; gint i; gint k; PersonalGroupe* personnalGroupes = NULL; k = numGroupe(groupName); if(k<0) { *n = 0; return NULL; } personnalGroupes = personnalFragments->personnalGroupes; *n = personnalGroupes[k].numberOfFragments; t = g_malloc((*n)*sizeof(gchar*)); for(i=0;inumberOfGroupes = 0; personnalFragments->personnalGroupes = NULL; } if(numGroupe(groupName)!=-1) { gchar* t = g_strdup_printf(_("Sorry, I can not add this group\n%s is available."),groupName); GtkWidget* w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(win)); g_free(groupName); g_free(t); return; } numberOfGroupes = personnalFragments->numberOfGroupes; personnalGroupes = personnalFragments->personnalGroupes; numberOfGroupes++; if(!personnalGroupes) personnalGroupes = g_malloc(sizeof(PersonalGroupe)); else personnalGroupes = g_realloc(personnalGroupes,numberOfGroupes*sizeof(PersonalGroupe)); personnalGroupes[numberOfGroupes-1].groupName = g_strdup(groupName); personnalGroupes[numberOfGroupes-1].numberOfFragments = 0; personnalGroupes[numberOfGroupes-1].fragments = NULL; personnalFragments->numberOfGroupes = numberOfGroupes; personnalFragments->personnalGroupes = personnalGroupes; /* add_a_personal_group_to_menu(groupName);*/ g_free(groupName); gtk_widget_destroy(win); } /*****************************************************************/ void newGroupeDlg(gpointer data, guint Operation,GtkWidget* wid) { GtkWidget *WinDlg; GtkWidget *Button; GtkWidget *hbox; GtkWidget *frame; GtkWidget *vboxframe; WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),_("New Group")); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(GeomDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); Entrys[E_GROUPE] = create_label_entry(hbox,_("Group Name : "), (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_widget_realize(WinDlg); Button = create_button(WinDlg,_("Cancel")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,_("OK")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked",(GCallback)addGroupe,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /*****************************************************************/ static void deleteOneGroupe(GtkWidget*win, gpointer data) { PersonalGroupe* personnalGroupes = NULL; gint numberOfGroupes = 0; gint i; gint k; gchar* groupName; groupName = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entrys[E_GROUPE]))); /* delete_a_personal_group_from_menu(groupName);*/ if(!personnalFragments) return; k = numGroupe(groupName); if(k<0) return; numberOfGroupes = personnalFragments->numberOfGroupes; personnalGroupes = personnalFragments->personnalGroupes; if(personnalGroupes[k].groupName) { g_free(personnalGroupes[k].groupName); if(personnalGroupes[k].fragments) { for(i=0;i0) personnalGroupes = g_realloc(personnalGroupes,numberOfGroupes*sizeof(PersonalGroupe)); personnalFragments->numberOfGroupes = numberOfGroupes; personnalFragments->personnalGroupes = personnalGroupes; g_free(groupName); if(numberOfGroupes <1) { /* set_sensitive_personnal("/Add/Personal/Edit/Delete a Groupe",FALSE); set_sensitive_personnal("/Add/Personal/Edit/Add this molecule to personnal Fragments",FALSE); set_sensitive_personnal("/Add/Personal/Edit/Remove a Fragment",FALSE); */ } { gint ng; gchar** groups = getListGroupesWithFragments(&ng); if(ng==0) { /* set_sensitive_personnal("/Add/Personal/Edit/Remove a Fragment", FALSE); */ } else { for(i=0;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); Entrys[E_GROUPE] = create_label_combo(hbox,_("Group to delete : "),tlist,n, TRUE,(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_editable_set_editable((GtkEditable*) Entrys[E_GROUPE],FALSE); for(i=0;iaction_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,_("OK")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked",(GCallback)deleteOneGroupe,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /*****************************************************************/ static void addFragment(GtkWidget* win, gpointer data) { gchar* name; gchar* groupName = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entrys[E_GROUPE]))); gchar* fragmentName = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entrys[E_FRAGMENT]))); G_CONST_RETURN gchar* todelete = gtk_entry_get_text(GTK_ENTRY(Entrys[E_TODELETE])); G_CONST_RETURN gchar* tobondto = gtk_entry_get_text(GTK_ENTRY(Entrys[E_TOBONDTO])); G_CONST_RETURN gchar* angle = gtk_entry_get_text(GTK_ENTRY(Entrys[E_ANGLE])); gint i; gint itodelete = atoi(todelete); gint itobondto = atoi(tobondto); gint iangle = atoi(angle); PersonalGroupe* personnalGroupes = personnalFragments->personnalGroupes; gint numberOfFragments = 0; OnePersonalFragment* fragments = NULL; gint k; Fragment f; if(strlen(fragmentName)<1) return; for(i=0;i<(gint)strlen(fragmentName);i++) if(fragmentName[i] == '/' || fragmentName[i] == '_') fragmentName[i] = ' '; delete_all_spaces(fragmentName); if(strlen(fragmentName)<1) return; if(itodelete==-1) itobondto = -1; if(itobondto==-1) iangle = -1; itodelete = getIndexGeom(itodelete); itobondto = getIndexGeom(itobondto); iangle = getIndexGeom(iangle); if(itodelete >=0) { if(itobondto==itodelete) { gchar* t = g_strdup(_("Sorry, number of atom to delete can not = number of atom to bond to.")); GtkWidget* w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(win)); g_free(t); return; } if(iangle==itodelete) { gchar* t = g_strdup(_("Sorry, number of atom to delete can not = number of atom used for set angle.")); GtkWidget* w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(win)); g_free(t); return; } if(itobondto>0) { if(itobondto==iangle) { gchar* t = g_strdup(_("Sorry, number of atom to bond to can not = number of atom used for set angle.")); GtkWidget* w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(win)); g_free(t); return; } } } k = numGroupe(groupName); if(k<0) return; numberOfFragments = personnalGroupes[k].numberOfFragments; fragments = personnalGroupes[k].fragments; numberOfFragments++; if(numberOfFragments==1) fragments = g_malloc(sizeof(OnePersonalFragment)); else fragments = g_realloc(fragments, numberOfFragments*sizeof(OnePersonalFragment)); fragments[numberOfFragments-1].name = g_strdup(fragmentName); fragments[numberOfFragments-1].f.NAtoms = 0; f.NAtoms = Natoms ; f.Atoms = g_malloc(f.NAtoms*sizeof(Atom)); for(i=0;i<(gint)Natoms;i++) { f.Atoms[i].Residue = g_strdup(geometry[i].Residue); f.Atoms[i].Symb = g_strdup(geometry[i].Prop.symbol); f.Atoms[i].mmType = g_strdup(geometry[i].mmType); f.Atoms[i].pdbType = g_strdup(geometry[i].pdbType); f.Atoms[i].Coord[0] = geometry[i].X; f.Atoms[i].Coord[1] = geometry[i].Y; f.Atoms[i].Coord[2] = geometry[i].Z; f.Atoms[i].Charge = geometry[i].Charge; } f.atomToDelete = itodelete; f.atomToBondTo = itobondto; f.angleAtom = iangle; fragments[numberOfFragments-1].f = f; personnalGroupes[k].fragments = fragments; personnalGroupes[k].numberOfFragments = numberOfFragments; name = g_strdup_printf("%s/%s",groupName,fragmentName); /* add_a_personnal_fragement_to_menu(groupName,fragmentName);*/ savePersonalFragments(NULL); rafresh_fragments_selector(); gtk_widget_destroy(win); } /*****************************************************************/ static gchar** getListNumbers(gint*n) { gchar**t = NULL; gint i; if(Natoms<=0) { t = g_malloc(sizeof(gchar*)); t[0] = g_strdup("-1"); *n = 1; return t; } t = g_malloc((Natoms+1)*sizeof(gchar*)); t[0] = g_strdup("-1"); for(i=0;i<(gint)Natoms;i++) t[i+1] = g_strdup_printf("%d",i+1); *n = Natoms+1; return t; } /*****************************************************************/ void addFragmentDlg(gpointer data, guint Operation,GtkWidget* wid) { GtkWidget *WinDlg; GtkWidget *Button; GtkWidget *frame; GtkWidget *vboxframe; GtkWidget *table; GtkWidget *combo; gint nn = 0; gint ng = 0; gchar** numbers = NULL; gchar** groups = NULL; gint i; groups = getListGroupes(&ng); if(ng<1) { gchar* t = g_strdup(_("Sorry, no group available.")); GtkWidget* w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(GeomDlg)); g_free(t); return; } if(Natoms<1) { gchar* t = g_strdup(_("Sorry, number of atoms = 0.")); GtkWidget* w = Message(t,_("Error"),TRUE); gtk_window_set_modal(GTK_WINDOW(w),TRUE); gtk_window_set_transient_for(GTK_WINDOW(w),GTK_WINDOW(GeomDlg)); g_free(t); return; } WinDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(WinDlg),_("New Fragment")); gtk_window_set_position(GTK_WINDOW(WinDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(WinDlg),GTK_WINDOW(GeomDlg)); gtk_window_set_modal(GTK_WINDOW(WinDlg),TRUE); g_signal_connect(G_OBJECT(WinDlg),"delete_event",(GCallback)gtk_widget_destroy,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(5,3,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),table); i=0; add_label_table(table,_(" Group Name "),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); combo = create_combo_box_entry(groups,ng,FALSE,-1,-1); add_widget_table(table,combo,(gushort)i,2); Entrys[E_GROUPE] = GTK_BIN (combo)->child; gtk_editable_set_editable((GtkEditable*) Entrys[E_GROUPE],FALSE); i=1; add_label_table(table,_(" Fragment Name "),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); Entrys[E_FRAGMENT] = gtk_entry_new(); add_widget_table(table,Entrys[E_FRAGMENT],(gushort)i,2); numbers=getListNumbers(&nn); i=2; add_label_table(table,_(" Number of atoms to delete "),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); combo = create_combo_box_entry(numbers,nn,FALSE,-1,-1); Entrys[E_TODELETE] = GTK_BIN (combo)->child; add_widget_table(table,combo,(gushort)i,2); gtk_editable_set_editable((GtkEditable*) Entrys[E_TODELETE],FALSE); i=3; add_label_table(table,_(" Number of atoms to bond to "),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); combo = create_combo_box_entry(numbers,nn,FALSE,-1,-1); Entrys[E_TOBONDTO] = GTK_BIN (combo)->child; add_widget_table(table,combo,(gushort)i,2); gtk_editable_set_editable((GtkEditable*) Entrys[E_TOBONDTO],FALSE); i=4; add_label_table(table,_(" Number of atoms for set angle "),(gushort)i,0); add_label_table(table," : ",(gushort)i,1); combo = create_combo_box_entry(numbers,nn,FALSE,-1,-1); Entrys[E_ANGLE] = GTK_BIN (combo)->child; add_widget_table(table,combo,(gushort)i,2); gtk_editable_set_editable((GtkEditable*) Entrys[E_ANGLE],FALSE); for(i=0;iaction_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,_("OK")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked",(GCallback)addFragment,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /*****************************************************************/ static void deleteOneFragment(GtkWidget* win, gpointer data) { gchar* groupName = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entrys[E_GROUPE]))); gchar* fragmentName = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entrys[E_FRAGMENT]))); PersonalGroupe* personnalGroupes = personnalFragments->personnalGroupes; gint numberOfFragments = 0; OnePersonalFragment* fragments = NULL; gint k; gint i; gint j; k = numGroupe(groupName); if(k<0) return; numberOfFragments = personnalGroupes[k].numberOfFragments; if(numberOfFragments<1) return; fragments = personnalGroupes[k].fragments; for(i=0;i0) { fragments = g_realloc(fragments, numberOfFragments*sizeof(OnePersonalFragment)); } else { g_free(fragments); fragments = NULL; } break; } } personnalGroupes[k].fragments = fragments; personnalGroupes[k].numberOfFragments = numberOfFragments; { gint ng; gchar** groups = getListGroupesWithFragments(&ng); if(ng==0) { /* set_sensitive_personnal("/Add/Personal/Edit/Remove a Fragment", FALSE); */ } else { for(i=0;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); Entrys[E_GROUPE] = create_label_combo(hbox,_("Group Name : "),groups,ng, TRUE,(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_editable_set_editable((GtkEditable*) Entrys[E_GROUPE],FALSE); hbox=create_hbox_false(vboxframe); label = gtk_label_new(_("Fragment to delete : ")); gtk_widget_set_size_request(GTK_WIDGET(label),(gint)(ScreenHeight*labelWidth),-1); gtk_box_pack_start (GTK_BOX(hbox), label, TRUE, TRUE, 1); for (i=0;ichild; gtk_editable_set_editable((GtkEditable*) Entrys[E_FRAGMENT],FALSE); g_signal_connect_swapped(G_OBJECT(Entrys[E_GROUPE]), "changed", G_CALLBACK(resetFragmentCombo),GTK_OBJECT(combo)); for(i=0;iaction_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); Button = create_button(WinDlg,_("OK")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(WinDlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked",(GCallback)deleteOneFragment,GTK_OBJECT(WinDlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(WinDlg); } /*****************************************************************/ void addPersonalFragment(gpointer data, guint Operation,GtkWidget* wid) { gchar* name = (gchar*)data; gchar* groupName = NULL; gchar* fragmentName = NULL; gchar* slash = strstr(name,"/"); gint i; gint len; gint k; OnePersonalFragment* fragments; gint numberOfFragments; PersonalGroupe* personnalGroupes = NULL; personnalGroupes = personnalFragments->personnalGroupes; if(slash == NULL) { return; } fragmentName = g_strdup(slash+1); groupName = g_malloc(strlen(name)*sizeof(gchar)); len = 0; for(i=0;i<(gint)strlen(name);i++) { if(name[i] == '/') { len = i; break; } groupName[i] = name[i]; } groupName[len] = '\0'; k = numGroupe(groupName); if(k<0) return; numberOfFragments = personnalGroupes[k].numberOfFragments; fragments = personnalGroupes[k].fragments; for(i=0;inumberOfGroupes;i++) { add_a_personal_group_to_menu(personnalFragments->personnalGroupes[i].groupName); } } void addFragmentsToMenu() { PersonalGroupe* personnalGroupes; gint numberOfGroupes; gint i; gint j; gchar* name; if(!personnalFragments) return; personnalGroupes = personnalFragments->personnalGroupes; numberOfGroupes = personnalFragments->numberOfGroupes; for(i=0;i #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/RotFragments.h" #include "../Geometry/TreeMolecule.h" #include "../Utils/Matrix3D.h" static GtkWidget *EntryDistances[6]={NULL,NULL,NULL,NULL,NULL,NULL}; static GtkWidget *LabelDistances[6] = {NULL,NULL,NULL,NULL,NULL,NULL}; static GtkWidget *EntryAngles[2] = {NULL,NULL}; static GtkWidget *LabelAngles[2] = {NULL,NULL}; static GtkWidget *MoveGroupButton = NULL; static GtkWidget *Move23Button = NULL; GtkWidget *EntryDihedral = NULL; GtkWidget *LabelDihedral = NULL; GtkWidget *LabelAveraged; /*****************/ void rafresh_window_geom(); void create_GeomXYZ_from_draw_grometry(); /*****************/ /************************************************************************************************************/ static gboolean build_rotation_matrix_about_an_axis(gdouble m[3][3], gdouble* vect, gdouble angle) { gdouble q[4]; gdouble norm = 1; gdouble angleRad = angle/180.0*PI; gdouble vcos ; gdouble vsin ; gint i; gint j; for(i=0;i<3;i++) for(j=0;j<3;j++) m[i][j] = 0.0; for(i=0;i<3;i++) m[i][i] = 1.0; if(!vect)return FALSE; norm = vect[0]*vect[0] + vect[1]*vect[1] + vect[2]*vect[2]; norm = sqrt(norm); if(norm <1e-8) return FALSE; vect[0] /= norm; vect[1] /= norm; vect[2] /= norm; vcos = cos(angleRad/2); vsin = sin(angleRad/2); q[0] = vect[0]*vsin; q[1] = vect[1]*vsin; q[2] = vect[2]*vsin; q[3] = vcos; m[0][0] = 1.0 - 2.0 * (q[1] * q[1] + q[2] * q[2]); m[0][1] = 2.0 * (q[0] * q[1] - q[2] * q[3]); m[0][2] = 2.0 * (q[2] * q[0] + q[1] * q[3]); m[1][0] = 2.0 * (q[0] * q[1] + q[2] * q[3]); m[1][1]= 1.0 - 2.0 * (q[2] * q[2] + q[0] * q[0]); m[1][2] = 2.0 * (q[1] * q[2] - q[0] * q[3]); m[2][0] = 2.0 * (q[2] * q[0] - q[1] * q[3]); m[2][1] = 2.0 * (q[1] * q[2] + q[0] * q[3]); m[2][2] = 1.0 - 2.0 * (q[1] * q[1] + q[0] * q[0]); return TRUE; } /************************************************************************************************************/ static gint get_indice(gint n) { gint i; if(n<0) return n; for(i=0;i<(gint)Natoms;i++) if(geometry0[i].N==n)return i; return -1; } /********************************************************************************/ static void setDistance(GeomDef* geom,gint n1,gint n2,gdouble bondLength,gint list[],gint nlist) { gdouble a1[]={geom[n1].X,geom[n1].Y,geom[n1].Z}; gdouble a2[]={geom[n2].X,geom[n2].Y,geom[n2].Z}; gdouble coord[3]; gint i; gint atomNumber; gdouble len = 0; add_geometry_to_fifo(); bondLength *= ANG_TO_BOHR; for(i=0;i<3;i++) coord[i] = a1[i] - a2[i]; for(i=0;i<3;i++) len += coord[i]*coord[i]; if(len>1e-3) { len = 1-bondLength/sqrt(len); for(i=0;i<3;i++) coord[i] *= len; } else coord[0] -= bondLength; for ( i = 0; i < nlist; i++ ) { atomNumber = list[ i ]; if ( ( atomNumber == n1 ) || ( atomNumber == n2 ) ) continue; geom[atomNumber].X += coord[0]; geom[atomNumber].Y += coord[1]; geom[atomNumber].Z += coord[2]; } atomNumber = n2; geom[atomNumber].X += coord[0]; geom[atomNumber].Y += coord[1]; geom[atomNumber].Z += coord[2]; } /*****************************************************************/ void setAngle(gint Natoms,GeomDef *geometry, gint a1num, gint a2num, gint a3num, gdouble angle,gint atomList[], gint numberOfElements ) { gdouble a1[3]; gdouble a2[3]; gdouble a3[3]; gint i; gint j; gdouble originalAngle = 0; gdouble** tmp = NULL; gdouble M[3][3]; gdouble v1[3]; gdouble v2[3]; gdouble v[3]; gdouble m; gint numberOfCoordinates = 0; gint atomListLength = 0; gint atomNumber; add_geometry_to_fifo(); a1[0] = geometry[a1num].X; a1[1] = geometry[a1num].Y; a1[2] = geometry[a1num].Z; a2[0] = geometry[a2num].X; a2[1] = geometry[a2num].Y; a2[2] = geometry[a2num].Z; a3[0] = geometry[a3num].X; a3[1] = geometry[a3num].Y; a3[2] = geometry[a3num].Z; originalAngle = AngleToAtoms(a3,a1,a2); for(j=0;j<3;j++) v1[j] = a1[j] - a2[j]; for(j=0;j<3;j++) v2[j] = a3[j] - a2[j]; v[0] = v1[1]*v2[2] - v1[2]*v2[1]; v[1] = v1[2]*v2[0] - v1[0]*v2[2]; v[2] = v1[0]*v2[1] - v1[1]*v2[0]; m = 0; for(j=0;j<3;j++) m+=v[j]*v[j]; if(m<1e-3) { /* SetAngle(Natoms,geometry, a1num, a2num, a3num, angle,atomList, numberOfElements ); return; */ m = 1; v[0] = 0; v[1] = 0; v[2] = -1; } atomListLength = numberOfElements; numberOfCoordinates = atomListLength + 1; tmp = g_malloc(numberOfCoordinates*sizeof(gdouble*)); for(i=0;i0) averaged_value /= k; t = g_strdup_printf(" %f ",averaged_value); gtk_label_set_text(GTK_LABEL(LabelAveraged),t); g_free(t); } /************************************************************************************************************/ void set_distances() { gchar *t1; gchar *t2; gchar *t; gint N[4]; gint i; gint k; gint j; gint num[4] = {-1,-1,-1,-1}; for(i=0;i<4;i++) { N[i] = NumSelAtoms[i]; num[i] = get_indice(N[i]); } k=-1; for(i=0;i<3;i++) { if(num[i] != -1) t1 = g_strdup_printf("%s[%d]",geometry[num[i]].Prop.symbol,geometry[num[i]].N); else t1 = g_strdup(" "); for(j=i+1;j<4;j++) { if(num[j] != -1) t2 = g_strdup_printf("%s[%d]",geometry[num[j]].Prop.symbol,geometry[num[j]].N); else t2 = g_strdup(" "); t=g_strdup_printf("%s-%s",t1,t2); k++; if (N[i] != -1 && N[j] != -1 && N[i] <=(gint)Natoms&& N[j] <=(gint)Natoms) gtk_label_set_text(GTK_LABEL(LabelDistances[k]),t); else gtk_label_set_text(GTK_LABEL(LabelDistances[k])," "); g_free(t); g_free(t2); } g_free(t1); } k = 0; for(i=0;i<3;i++) for(j=i+1;j<4;j++) { if (N[i] != -1 && N[j] != -1 && N[i] <=(gint)Natoms&& N[j] <=(gint)Natoms) { t = g_strdup_printf("%s",get_distance(N[i],N[j])); gtk_widget_show(GTK_WIDGET(EntryDistances[k])); gtk_entry_set_text(GTK_ENTRY(EntryDistances[k]),t); /* gtk_editable_set_editable(GTK_EDITABLE(EntryDistances[k]),TRUE);*/ g_object_set_data(G_OBJECT (EntryDistances[k]), "N1", GINT_TO_POINTER(N[i])); g_object_set_data(G_OBJECT (EntryDistances[k]), "N2", GINT_TO_POINTER(N[j])); g_free(t); } else { g_object_set_data(G_OBJECT (EntryDistances[k]), "N1", GINT_TO_POINTER(-1)); g_object_set_data(G_OBJECT (EntryDistances[k]), "N2", GINT_TO_POINTER(-1)); gtk_widget_hide(GTK_WIDGET(EntryDistances[k])); } k++; } } /************************************************************************************************************/ void set_angles() { gint N[4]; gint i; gchar *t; gchar *t1; gboolean OK; gint num[4] = {-1,-1,-1,-1}; for(i=0;i<4;i++) { N[i] = NumSelAtoms[i]; num[i] = get_indice(N[i]); } OK = TRUE; for(i=0;i<3;i++) { if(num[i] == -1) { OK = FALSE; break; } } if(OK) for(i=0;i<2;i++) { if(N[i] == N[i+1]) { OK = FALSE; break; } } if(OK) { t = g_strdup_printf("%s[%d]-%s[%d]-%s[%d]", geometry[num[0]].Prop.symbol,geometry[num[0]].N, geometry[num[1]].Prop.symbol,geometry[num[1]].N, geometry[num[2]].Prop.symbol,geometry[num[2]].N); t1 = g_strdup_printf("%s",get_angle(N[0],N[1],N[2])); gtk_label_set_text(GTK_LABEL(LabelAngles[0]),t); gtk_widget_show(GTK_WIDGET(EntryAngles[0])); gtk_entry_set_text(GTK_ENTRY(EntryAngles[0]),t1); g_object_set_data(G_OBJECT (EntryAngles[0]), "N1", GINT_TO_POINTER(N[0])); g_object_set_data(G_OBJECT (EntryAngles[0]), "N2", GINT_TO_POINTER(N[1])); g_object_set_data(G_OBJECT (EntryAngles[0]), "N3", GINT_TO_POINTER(N[2])); } else { t = g_strdup(" "); t1 = g_strdup(" "); gtk_label_set_text(GTK_LABEL(LabelAngles[0]),t); gtk_widget_hide(GTK_WIDGET(EntryAngles[0])); gtk_entry_set_text(GTK_ENTRY(EntryAngles[0]),t1); g_object_set_data(G_OBJECT (EntryAngles[0]), "N1", GINT_TO_POINTER(-1)); g_object_set_data(G_OBJECT (EntryAngles[0]), "N2", GINT_TO_POINTER(-1)); g_object_set_data(G_OBJECT (EntryAngles[0]), "N3", GINT_TO_POINTER(-1)); } g_free(t); g_free(t1); OK = TRUE; for(i=1;i<4;i++) { if(num[i] == -1) { OK = FALSE; break; } } if(OK) for(i=1;i<3;i++) { if(N[i] == N[i+1]) { OK = FALSE; break; } } if(OK) { t = g_strdup_printf("%s[%d]-%s[%d]-%s[%d]", geometry[num[1]].Prop.symbol,geometry[num[1]].N, geometry[num[2]].Prop.symbol,geometry[num[2]].N, geometry[num[3]].Prop.symbol,geometry[num[3]].N); t1 = g_strdup_printf("%s",get_angle(N[1],N[2],N[3])); gtk_label_set_text(GTK_LABEL(LabelAngles[1]),t); gtk_widget_show(GTK_WIDGET(EntryAngles[1])); gtk_entry_set_text(GTK_ENTRY(EntryAngles[1]),t1); g_object_set_data(G_OBJECT (EntryAngles[1]), "N1", GINT_TO_POINTER(N[1])); g_object_set_data(G_OBJECT (EntryAngles[1]), "N2", GINT_TO_POINTER(N[2])); g_object_set_data(G_OBJECT (EntryAngles[1]), "N3", GINT_TO_POINTER(N[3])); } else { t = g_strdup(" "); t1 = g_strdup(" "); gtk_label_set_text(GTK_LABEL(LabelAngles[1]),t); gtk_widget_hide(GTK_WIDGET(EntryAngles[1])); gtk_entry_set_text(GTK_ENTRY(EntryAngles[1]),t1); g_object_set_data(G_OBJECT (EntryAngles[1]), "N1", GINT_TO_POINTER(-1)); g_object_set_data(G_OBJECT (EntryAngles[1]), "N2", GINT_TO_POINTER(-1)); g_object_set_data(G_OBJECT (EntryAngles[1]), "N3", GINT_TO_POINTER(-1)); } g_free(t); g_free(t1); } /************************************************************************************************************/ void set_dihedral() { gint N[4]; gint i; gchar *t; gchar *t1; gboolean OK; gint num[4] = {-1,-1,-1,-1}; for(i=0;i<4;i++) { N[i] = NumSelAtoms[i]; num[i] = get_indice(N[i]); } OK = TRUE; for(i=0;i<4;i++) { if(num[i] == -1) { OK = FALSE; break; } } if(OK) for(i=0;i<3;i++) { if(N[i] == N[i+1]) { OK = FALSE; break; } } if(OK) { t = g_strdup_printf("%s[%d]-%s[%d]-%s[%d]-%s[%d]", geometry[num[0]].Prop.symbol,geometry[num[0]].N, geometry[num[1]].Prop.symbol,geometry[num[1]].N, geometry[num[2]].Prop.symbol,geometry[num[2]].N, geometry[num[3]].Prop.symbol,geometry[num[3]].N); t1 = g_strdup_printf("%s",get_dihedral(N[0],N[1],N[2],N[3])); gtk_label_set_text(GTK_LABEL(LabelDihedral),t); gtk_widget_show(GTK_WIDGET(EntryDihedral)); gtk_entry_set_text(GTK_ENTRY(EntryDihedral),t1); g_object_set_data(G_OBJECT (EntryDihedral), "N1", GINT_TO_POINTER(N[0])); g_object_set_data(G_OBJECT (EntryDihedral), "N2", GINT_TO_POINTER(N[1])); g_object_set_data(G_OBJECT (EntryDihedral), "N3", GINT_TO_POINTER(N[2])); g_object_set_data(G_OBJECT (EntryDihedral), "N4", GINT_TO_POINTER(N[3])); } else { t = g_strdup(" "); t1 = g_strdup(" "); gtk_label_set_text(GTK_LABEL(LabelDihedral),t); gtk_widget_hide(GTK_WIDGET(EntryDihedral)); gtk_entry_set_text(GTK_ENTRY(EntryDihedral),t1); g_object_set_data(G_OBJECT (EntryDihedral), "N1", GINT_TO_POINTER(-1)); g_object_set_data(G_OBJECT (EntryDihedral), "N2", GINT_TO_POINTER(-1)); g_object_set_data(G_OBJECT (EntryDihedral), "N3", GINT_TO_POINTER(-1)); g_object_set_data(G_OBJECT (EntryDihedral), "N4", GINT_TO_POINTER(-1)); } g_free(t); g_free(t1); } /************************************************************************************************************/ void change_of_center(GtkWidget *entry,gpointer d) { gint k; for(k=0;k<6;k++) if(EntryDistances[k]) gtk_widget_hide(GTK_WIDGET(EntryDistances[k])); if(!GeomDrawingArea) return; set_distances(); set_angles(); set_dihedral(); set_averaged_bond(); } /************************************************************************************************************/ static void activate_distance_entry(GtkWidget* entry, gchar* data) { gint N1 = -1; gint N2 = -1; gint i1 = 0; gint i2 = 0; gint *p = NULL; gchar* oldD = NULL; gint nGroupAtoms = 0; gint* listGroupAtoms = NULL; G_CONST_RETURN gchar *entry_txt; gdouble newD = 1.0; if(!GTK_IS_OBJECT(entry)) return; if(!GTK_IS_ENTRY(entry)) return; p = g_object_get_data(G_OBJECT(entry), "N1"); if(p) N1 = GPOINTER_TO_INT(p); p = g_object_get_data(G_OBJECT(entry), "N2"); if(p) N2 = GPOINTER_TO_INT(p); if(N1<1 || N2<1) return; i1 = get_indice(N1); i2 = get_indice(N2); if(i1<0 || i2<0) return; oldD = g_strdup_printf("%s",get_distance(N1,N2)); entry_txt = gtk_entry_get_text(GTK_ENTRY(entry)); newD = atof(entry_txt); if(newD<0.1 || newD>100) { gtk_entry_set_text(GTK_ENTRY(entry),oldD); g_free(oldD); return; } if (GTK_TOGGLE_BUTTON (MoveGroupButton)->active) listGroupAtoms = getListGroupe(&nGroupAtoms, geometry0, Natoms, i1, i2,-1,-1); setDistance(geometry0,i1,i2,newD,listGroupAtoms,nGroupAtoms); if(listGroupAtoms) g_free(listGroupAtoms); rafresh_window_geom(); create_GeomXYZ_from_draw_grometry(); g_free(oldD); } /************************************************************************************************************/ static void activate_angle_entry(GtkWidget* entry, gchar* data) { gint N1 = -1; gint N2 = -1; gint N3 = -1; gint i1 = -1; gint i2 = -1; gint i3 = -1; gint *p = NULL; gchar* oldA = NULL; G_CONST_RETURN gchar *entry_txt; gdouble newA; gint* listGroupAtoms = NULL; gint nGroupAtoms = 0; if(!GTK_IS_OBJECT(entry)) return; if(!GTK_IS_ENTRY(entry)) return; p = g_object_get_data(G_OBJECT(entry), "N1"); if(p) N1 = GPOINTER_TO_INT(p); p = g_object_get_data(G_OBJECT(entry), "N2"); if(p) N2 = GPOINTER_TO_INT(p); p = g_object_get_data(G_OBJECT(entry), "N3"); if(p) N3 = GPOINTER_TO_INT(p); i1 = get_indice(N1); i2 = get_indice(N2); i3 = get_indice(N3); if(N1<1 || N2<1 || N3<1) return; if(i1<0 || i2<0 || i3<0) return; oldA = g_strdup_printf("%s",get_angle(N1,N2,N3)); entry_txt = gtk_entry_get_text(GTK_ENTRY(entry)); newA = atof(entry_txt); if(newA<0 || newA>360) { gtk_entry_set_text(GTK_ENTRY(entry),oldA); g_free(oldA); return; } if (GTK_TOGGLE_BUTTON (MoveGroupButton)->active) listGroupAtoms = getListGroupe(&nGroupAtoms, geometry0, Natoms, i1, i2,i3,-1); setAngle(Natoms,geometry0,i1,i2,i3,newA,listGroupAtoms,nGroupAtoms); if(listGroupAtoms) g_free(listGroupAtoms); rafresh_window_geom(); create_GeomXYZ_from_draw_grometry(); g_free(oldA); } /************************************************************************************************************/ static void activate_dihedral_entry(GtkWidget* entry, gchar* data) { gint N1 = -1; gint N2 = -1; gint N3 = -1; gint N4 = -1; gint i1 = -1; gint i2 = -1; gint i3 = -1; gint i4 = -1; gint *p = NULL; gchar* oldA = NULL; G_CONST_RETURN gchar *entry_txt; gdouble newA = 0; gint* listGroupAtoms = NULL; gint nGroupAtoms = 0; if(!GTK_IS_OBJECT(entry)) return; if(!GTK_IS_ENTRY(entry)) return; p = g_object_get_data(G_OBJECT(entry), "N1"); if(p) N1 = GPOINTER_TO_INT(p); p = g_object_get_data(G_OBJECT(entry), "N2"); if(p) N2 = GPOINTER_TO_INT(p); p = g_object_get_data(G_OBJECT(entry), "N3"); if(p) N3 = GPOINTER_TO_INT(p); p = g_object_get_data(G_OBJECT(entry), "N4"); if(p) N4 = GPOINTER_TO_INT(p); i1 = get_indice(N1); i2 = get_indice(N2); i3 = get_indice(N3); i4 = get_indice(N4); if(N1<1 || N2<1 || N3<1 || N4<1) return; if(i1<0 || i2<0 || i3<0 || i4<0) return; oldA = g_strdup_printf("%s",get_dihedral(N1,N2,N3,N4)); entry_txt = gtk_entry_get_text(GTK_ENTRY(entry)); newA = atof(entry_txt); if(newA<-180 || newA>180) { gtk_entry_set_text(GTK_ENTRY(entry),oldA); g_free(oldA); return; } if (GTK_TOGGLE_BUTTON (MoveGroupButton)->active) { if (GTK_TOGGLE_BUTTON (Move23Button)->active) listGroupAtoms = getListGroupe(&nGroupAtoms, geometry0, Natoms, i1, i2,i3,i4+Natoms); else listGroupAtoms = getListGroupe(&nGroupAtoms, geometry0, Natoms, i1, i2,i3,i4); } setTorsion(Natoms,geometry0,i1,i2,i3,i4,newA, listGroupAtoms,nGroupAtoms); if(listGroupAtoms) g_free(listGroupAtoms); rafresh_window_geom(); create_GeomXYZ_from_draw_grometry(); g_free(oldA); } /********************************************************************************/ static GtkWidget *add_label_table_expand(GtkWidget *Table, G_CONST_RETURN gchar *label, gint ic1, gint ic2, gint il1, gint il2 ) { GtkWidget *Label; GtkWidget *hbox = gtk_hbox_new(0,FALSE); Label = gtk_label_new (label); gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT); gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 0); gtk_table_attach(GTK_TABLE(Table),hbox,ic1,ic2,il1,il2,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),3,3); return Label; } /************************************************************************************************************/ void create_frame_distances_angles_dihedral(GtkWidget *Dialogue,GtkWidget *vboxframe) { GtkWidget *vbox; GtkWidget *Table; GtkWidget *Frame; guint i; gint iBegin = 0; GtkWidget *hseparator; for(i=0;i<6;i++) LabelDistances[i] = NULL; Frame = create_frame(Dialogue,vboxframe,NULL); vbox = create_vbox(Frame); Table = gtk_table_new(17,2,FALSE); gtk_container_add(GTK_CONTAINER(vbox),Table); i = 0; add_label_table_expand(Table, _("Distances (Angstroms)"), 0, 2, i, i+1); iBegin = 1; for(i=0;i<6;i++) LabelDistances[i] = add_label_table(Table," ",(gushort)(i+iBegin),0); for(i=0;i<6;i++) { EntryDistances[i] = gtk_entry_new(); g_object_set_data(G_OBJECT (EntryDistances[i]), "N1", GINT_TO_POINTER(-1)); g_object_set_data(G_OBJECT (EntryDistances[i]), "N2", GINT_TO_POINTER(-1)); /* gtk_widget_set_sensitive(EntryDistances[i], FALSE);*/ gtk_widget_set_size_request(GTK_WIDGET(EntryDistances[i]),120,-1); gtk_table_attach(GTK_TABLE(Table),EntryDistances[i],1,2,i+iBegin,i+iBegin+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),3,3); g_signal_connect(G_OBJECT (EntryDistances[i]), "activate", (GCallback) activate_distance_entry, NULL); } set_distances(); i = 7; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(Table),hseparator,0,3,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND) ,(GtkAttachOptions)(GTK_FILL|GTK_EXPAND),3,3); i = 8; add_label_table_expand(Table, _("Angles (Degrees)"), 0, 2, i, i+1); iBegin = 9; for(i=0;i<2;i++) LabelAngles[i] = add_label_table(Table," ",i+iBegin,0);; for(i=0;i<2;i++) { EntryAngles[i] = gtk_entry_new(); g_object_set_data(G_OBJECT (EntryAngles[i]), "N1", GINT_TO_POINTER(-1)); g_object_set_data(G_OBJECT (EntryAngles[i]), "N2", GINT_TO_POINTER(-1)); g_object_set_data(G_OBJECT (EntryAngles[i]), "N3", GINT_TO_POINTER(-1)); /* gtk_widget_set_sensitive(EntryAngles[i], FALSE);*/ gtk_widget_set_size_request(GTK_WIDGET(EntryAngles[i]),100,-1); gtk_table_attach(GTK_TABLE(Table),EntryAngles[i],1,2,i+iBegin,i+iBegin+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),3,3); g_signal_connect(G_OBJECT (EntryAngles[i]), "activate", (GCallback) activate_angle_entry, NULL); } set_angles(); i = 12; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(Table),hseparator,0,3,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),3,3); i = 13; add_label_table_expand(Table, _("Dihedral (Degrees)"), 0, 2, i, i+1); iBegin = 14; LabelDihedral = add_label_table(Table," ",iBegin,0); EntryDihedral = gtk_entry_new(); g_object_set_data(G_OBJECT (EntryDihedral), "N1", GINT_TO_POINTER(-1)); g_object_set_data(G_OBJECT (EntryDihedral), "N2", GINT_TO_POINTER(-1)); g_object_set_data(G_OBJECT (EntryDihedral), "N3", GINT_TO_POINTER(-1)); g_object_set_data(G_OBJECT (EntryDihedral), "N4", GINT_TO_POINTER(-1)); /* gtk_widget_set_sensitive(EntryDihedral, FALSE);*/ gtk_widget_set_size_request(GTK_WIDGET(EntryDihedral),80,-1); gtk_table_attach(GTK_TABLE(Table),EntryDihedral,1,2,iBegin,iBegin+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),3,3); g_signal_connect(G_OBJECT (EntryDihedral), "activate", (GCallback) activate_dihedral_entry, NULL); set_dihedral(); i = 15; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(Table),hseparator,0,3,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),3,3); i = 16; MoveGroupButton = gtk_check_button_new_with_label (_("Move group")); gtk_widget_show (MoveGroupButton); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (MoveGroupButton), TRUE); gtk_table_attach(GTK_TABLE(Table),MoveGroupButton,0,1,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),3,3); i = 17; Move23Button = gtk_check_button_new_with_label (_("Move 2-3 group")); gtk_widget_show (Move23Button); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (Move23Button), TRUE); gtk_table_attach(GTK_TABLE(Table),Move23Button,0,1,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),3,3); } /************************************************************************************************************/ void create_frame_averaged(GtkWidget *Dialogue,GtkWidget *hbox) { GtkWidget *FrameAveraged; GtkWidget *Table; GtkWidget *vbox; FrameAveraged = create_frame(Dialogue,hbox,_("Averaged distance (Angstroms)")); vbox = create_vbox(FrameAveraged); Table = gtk_table_new(1,1,FALSE); gtk_container_add(GTK_CONTAINER(vbox),Table); LabelAveraged = add_label_table(Table," ",0,0); set_averaged_bond(); } /************************************************************************************************************/ void AddMeasure(GtkWidget *Dialogue,GtkWidget *vboxframe) { GtkWidget *hbox; hbox = create_hbox(vboxframe); create_frame_distances_angles_dihedral(Dialogue,hbox); hbox = create_hbox(vboxframe); create_frame_averaged(Dialogue,hbox); } GabeditSrc250/src/Geometry/DrawGeom.h0000644000175100017510000000026613130665226017740 0ustar alloucheallouche#ifndef __GABEDIT_DRAWGEOM_H__ #define __GABEDIT_DRAWGEOM_H__ #ifdef DRAWGEOMGL #include "DrawGeomGL.h" #else #include "DrawGeomCairo.h" #endif #endif /* __GABEDIT_DRAWGEOM_H__ */ GabeditSrc250/src/Geometry/BuildNanoTube.h0000644000175100017510000000021713130665226020722 0ustar alloucheallouche #ifndef __GABEDIT_BUILDNANOTUBE_H__ #define __GABEDIT_BUILDNANOTUBE_H__ void build_nanotube_dlg(); #endif /*__GABEDIT_BUILDNANOTUBE_H__ */ GabeditSrc250/src/Geometry/Measure.h0000644000175100017510000000276013130665226017635 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MEASURE_H__ #define __GABEDIT_MEASURE_H__ void change_of_center(GtkWidget *entry,gpointer d); void AddMeasure(GtkWidget *Dialogue,GtkWidget *vboxframe); #endif /* __GABEDIT_MEASURE_H__ */ GabeditSrc250/src/Geometry/SavePersonalFragments.h0000644000175100017510000000034713130665226022504 0ustar alloucheallouche #ifndef __GABEDIT_SAVEPERSONALFRAGMENTS_H__ #define __GABEDIT_SAVEPERSONALFRAGMENTS_H__ gboolean saveAllPersonalFragments(PersonalFragments* personnalFragments,gchar* filename); #endif /* __GABEDIT_SAVEPERSONALFRAGMENTS_H__ */ GabeditSrc250/src/Geometry/GeomXYZ.c0000644000175100017510000146162113130665226017537 0ustar alloucheallouche/* GGeomXYZ.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Common/Help.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Geometry/GeomGlobal.h" #include "../Utils/AtomsProp.h" #include "../Utils/UtilsVASP.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/GeomZmatrix.h" #include "../Files/ListeFiles.h" #include "../Common/Windows.h" #include "../Geometry/InterfaceGeom.h" #include "../Gaussian/Gaussian.h" #include "../Molpro/Molpro.h" #include "../Geometry/GeomConversion.h" #include "../Common/StockIcons.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/ResultsAnalise.h" #include "../Geometry/OpenBabel.h" #include "../Geometry/SelectionDlg.h" #include "../MolecularMechanics/PDBTemplate.h" #include "../MolecularMechanics/CalculTypesAmber.h" #ifdef G_OS_WIN32 #include #include #else #include #endif #define MAXNAME 6 #define MAXATOMTYPE 4 #define MAXRESIDUENAME 4 #define MAXSYMBOL 2 typedef enum { E_NUMBER=0, E_SYMBOL, E_MMTYPE, E_PDBTYPE, E_RESIDUE, E_X, E_Y, E_Z, E_CHARGE, E_LAYER } GabeditEntryType; static GtkWidget *FenetreTable; static gint LineSelectedV; static GtkWidget *listv=NULL; static GtkWidget *EntryV[2]; static gint LineSelected; static GtkWidget *list = NULL; static GtkWidget *Entry[NUMBER_LIST_XYZ]; static gboolean DestroyDialog; static gint NCr; static gint LineSelectedOld = -1; static gdouble labelWidth = 0.15; static gdouble entryWidth = 0.20; static gint rowInserted = -1; /* static GtkTargetEntry row_targets[] = { { "GTK_TREE_MODEL_ROW", GTK_TARGET_SAME_APP, 0} }; */ static void TransXYZConstXVar(); static void TransXYZConstYVar(); static void TransXYZConstZVar(); static void get_position(guint i,gdouble Pos[]); gchar** getListMMTypes(gint* nlist); gchar** getListPDBTypes(gchar* residueName, gint* nlist); /********************************************************************************/ static gboolean connected(guint i,guint j); static void DialogueAdd(); static void DialogueEdit(); static void DialogueDelete(); void create_window_save_xyzmol2tinkerpdbhin(); static void DialogueTransInVar(); static void TransXYZConstVar(); static void MultiByA0(); static void DivideByA0(); static void OriginToCenter(); static void sort_GeomXYZ(); static void clearList(GtkWidget* myList); static void removeFromList(GtkWidget* myList, gint ligne); static void insertToList(GtkWidget* myList, gint ligne, gchar* texts[], gint nColumns); static void appendToList(GtkWidget* myList, gchar* texts[], gint nColumns); static void append_list(); static gboolean TestVariablesXYZCreated(gchar *NewName,gint j); static gint testav(gchar *t); static gint read_gabedit_geoms_file(gchar* fileName, gint geometryNumber); void read_geom_from_vasp_xml_file(gchar *fileName, gint numgeom); static void trans_coordXYZ_geom(gchar T, GeomXYZAtomDef* myGeomXYZ, gint i, VariablesXYZDef* myVariablesXYZ, gint iv); static void GeomXYZ_Change_Unit(gboolean toang); /********************************************************************************/ static gint get_layer(gchar* layer) { if(strstr(layer,"Low")) return LOW_LAYER; else if(strstr(layer,"Medium")) return MEDIUM_LAYER; else return HIGH_LAYER; } /*************************************************************************************/ static guint get_number_of_electrons(guint type) { /* type = 1 : Medium and High type = 2 : High type = other : All */ guint i; guint Ne=0; SAtomsProp Atom; for(i=0;i0) nc++; } } return nc; } /************************************************************************************************************/ static gint get_number_of_inter_connections() { gint i; gint j; gint nc = 0; gint NC = NcentersXYZ; for(i=0;i0) nc++; } } return nc; } /************************************************************************************************************/ static void reset_spin_of_electrons() { gint i; guint NumberElectrons[3]; guint SpinElectrons[3]; gint n = 1; gint nL = 0; gint nM = 0; gint nH = 0; if(NcentersXYZ<1) return; NumberElectrons[2]= get_number_of_electrons(2); NumberElectrons[1]= get_number_of_electrons(1); NumberElectrons[0]= get_number_of_electrons(0); for(i=0;i<3;i++) SpinElectrons[i]=0; for(i=0;i"), NULL, "All=>", G_CALLBACK (activate_action_xyz_geom) }, {"AllX", NULL,N_("All _X=>"), NULL, "All X=>", G_CALLBACK (activate_action_xyz_geom) }, {"AllY", NULL,N_("All _Y=>"), NULL, "All Y=>", G_CALLBACK (activate_action_xyz_geom) }, {"AllZ", NULL,N_("All _Z=>"), NULL, "All Z=>", G_CALLBACK (activate_action_xyz_geom) }, {"One", NULL,N_("_One=>"), NULL, "One=>", G_CALLBACK (activate_action_xyz_geom) }, {"MultiplyBya0", GABEDIT_STOCK_A0P, N_("M_ultiply by a0"), NULL, "Multiply by a0", G_CALLBACK (activate_action_xyz_geom) }, {"DivideBya0", GABEDIT_STOCK_A0D, N_("D_ivide by a0"), NULL, "D_ivide by a0", G_CALLBACK (activate_action_xyz_geom) }, {"Center", NULL, N_("_Center"), NULL, "Center", G_CALLBACK (activate_action_xyz_geom) }, {"Sort", NULL, N_("_Sort"), NULL, "Sort", G_CALLBACK (activate_action_xyz_geom) }, {"ToZmat", NULL, N_("to _Zmat"), NULL, "to _Zmat", G_CALLBACK (activate_action_xyz_geom) }, {"ToZmatConn", NULL, N_("to _Zmat using connections"), NULL, "to _Zmat using conn.", G_CALLBACK (activate_action_xyz_geom) }, }; static guint numberOfGtkActionEntriesXYZGeom = G_N_ELEMENTS (gtkActionEntriesXYZGeom); /********************************************************************************/ /* XML description of the menus for the test app. The parser understands * a subset of the Bonobo UI XML format, and uses GMarkup for parsing */ static const gchar *uiMenuXYZGeomInfo = " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*******************************************************************************************************************************/ static GtkUIManager *newMenuXYZGeom(GtkWidget* win) { GtkActionGroup *actionGroup = NULL; GtkUIManager *manager = NULL; GError *error = NULL; static gchar* menuName = "/MenuXYZGeom"; manager = gtk_ui_manager_new (); g_signal_connect_swapped (win, "destroy", G_CALLBACK (g_object_unref), manager); actionGroup = gtk_action_group_new ("GabeditListOfProject"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntriesXYZGeom, numberOfGtkActionEntriesXYZGeom, NULL); gtk_ui_manager_insert_action_group (manager, actionGroup, 0); gtk_window_add_accel_group (GTK_WINDOW (win), gtk_ui_manager_get_accel_group (manager)); if (!gtk_ui_manager_add_ui_from_string (manager, uiMenuXYZGeomInfo, -1, &error)) { g_message ("building menus failed: %s", error->message); g_error_free (error); } g_object_set_data(G_OBJECT(manager),"MenuName", menuName); return manager; } /********************************************************************************/ static void DialogueAddV(); static void DialogueEditV(); static void DialogueDeleteV(); static void DialogueTransInConst(); static void TransXYZVarConst(); /*********************************************************************************************************************/ static void activate_action_xyz_variables (GtkAction *action) { const gchar *name = gtk_action_get_name (action); if(!strcmp(name, "Edit")) DialogueEditV(); else if(!strcmp(name, "New")) DialogueAddV(); else if(!strcmp(name, "Delete")) DialogueDeleteV(); else if(!strcmp(name, "All")) DialogueTransInConst(); else if(!strcmp(name, "One")) TransXYZVarConst(); } /*--------------------------------------------------------------------*/ static GtkActionEntry gtkActionEntriesXYZVariables[] = { {"Edit", NULL, "_Edit", NULL, "Edit", G_CALLBACK (activate_action_xyz_variables) }, {"New", GABEDIT_STOCK_NEW, "_New", NULL, "New", G_CALLBACK (activate_action_xyz_variables) }, {"Delete", GABEDIT_STOCK_CUT, "_Delete", NULL, "Delete", G_CALLBACK (activate_action_xyz_variables) }, {"All", NULL, "<=_All", NULL, "<=All", G_CALLBACK (activate_action_xyz_variables) }, {"One", NULL, "<=_On", NULL, "<=One", G_CALLBACK (activate_action_xyz_variables) }, }; static guint numberOfGtkActionEntriesXYZVariables = G_N_ELEMENTS (gtkActionEntriesXYZVariables); /********************************************************************************/ /* XML description of the menus for the test app. The parser understands * a subset of the Bonobo UI XML format, and uses GMarkup for parsing */ static const gchar *uiMenuXYZVariablesInfo = " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*******************************************************************************************************************************/ static GtkUIManager *newMenuXYZVariables(GtkWidget* win) { GtkActionGroup *actionGroup = NULL; GtkUIManager *manager = NULL; GError *error = NULL; static gchar* menuName = "/MenuXYZVariables"; manager = gtk_ui_manager_new (); g_signal_connect_swapped (win, "destroy", G_CALLBACK (g_object_unref), manager); actionGroup = gtk_action_group_new ("GabeditListOfProject"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntriesXYZVariables, numberOfGtkActionEntriesXYZVariables, NULL); gtk_ui_manager_insert_action_group (manager, actionGroup, 0); gtk_window_add_accel_group (GTK_WINDOW (win), gtk_ui_manager_get_accel_group (manager)); if (!gtk_ui_manager_add_ui_from_string (manager, uiMenuXYZVariablesInfo, -1, &error)) { g_message ("building menus failed: %s", error->message); g_error_free (error); } g_object_set_data(G_OBJECT(manager),"MenuName", menuName); return manager; } /********************************************************************************/ static void row_inserted(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { rowInserted = atoi(gtk_tree_path_to_string(path)); } /********************************************************************************/ static void row_deleted(GtkTreeModel *model, GtkTreePath *path, gpointer data) { gint rowDeleted = atoi(gtk_tree_path_to_string(path)); gchar* tmp; GList *glist = NULL; GList *g = NULL; GeomXYZAtomDef* tmpGeomXYZ; gint i; gint k; gint nd; gint j; if(rowInserted>(gint)NcentersXYZ || rowDeleted>(gint)NcentersXYZ || rowInserted<0 || rowDeleted<0 || rowInserted == rowDeleted) return; for(i=0;irowDeleted) glist = g_list_remove(glist, GINT_TO_POINTER(rowDeleted)); tmpGeomXYZ=g_malloc(NcentersXYZ*sizeof(GeomXYZAtomDef)); i = 0; g = glist; while(g) { k = GPOINTER_TO_INT(g->data); if(k>=NcentersXYZ) { k -= NcentersXYZ; } tmpGeomXYZ[i].Symb = g_strdup(GeomXYZ[k].Symb); tmpGeomXYZ[i].mmType = g_strdup(GeomXYZ[k].mmType); tmpGeomXYZ[i].pdbType = g_strdup(GeomXYZ[k].pdbType); tmpGeomXYZ[i].Residue = g_strdup(GeomXYZ[k].Residue); tmpGeomXYZ[i].X = g_strdup(GeomXYZ[k].X); tmpGeomXYZ[i].Y = g_strdup(GeomXYZ[k].Y); tmpGeomXYZ[i].Z = g_strdup(GeomXYZ[k].Z); tmpGeomXYZ[i].Charge = g_strdup(GeomXYZ[k].Charge); tmpGeomXYZ[i].Layer = g_strdup(GeomXYZ[k].Layer); tmpGeomXYZ[i].typeConnections = g_malloc(NcentersXYZ*sizeof(gint)); for(j=0; jnext; i++; } g_list_free(glist); for(i=0;irowDeleted) LineSelected--; tmp = g_strdup_printf("%d", LineSelected); path = gtk_tree_path_new_from_string (tmp); g_free(tmp); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (list)), path); gtk_tree_path_free(path); NSA[0] = LineSelected+1; NSA[1] = NSA[2] = NSA[3] =-1; if(GeomDrawingArea != NULL) rafresh_drawing(); } /********************************************************************************/ static void event_dispatcher(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; gint row = -1; GtkUIManager *manager = NULL; gchar* menuName = NULL; if (!event) return; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); row = atoi(gtk_tree_path_to_string(path)); gtk_tree_path_free(path); } } manager = GTK_UI_MANAGER(user_data); menuName = g_object_get_data(G_OBJECT(manager),"MenuName"); if(strstr(menuName,"Geom")) { LineSelected = row; NSA[0] = LineSelected+1; NSA[1] = NSA[2] = NSA[3] =-1; } else { LineSelectedV = row; LineSelectedOld = row; } if(GeomDrawingArea != NULL) rafresh_drawing(); if (event->type == GDK_2BUTTON_PRESS) { if(strstr(menuName,"Geom")) DialogueEdit(); else DialogueEditV(); } if (event->type == GDK_BUTTON_PRESS && ((GdkEventButton *) event)->button == 3) { gchar* pathEdit = NULL; gchar* pathDelete = NULL; gchar* pathOne = NULL; gchar* pathAll = NULL; GdkEventButton *bevent = (GdkEventButton *) event; if(menuName) pathEdit = g_strdup_printf("%s/Edit",menuName); if(menuName) pathDelete = g_strdup_printf("%s/Delete",menuName); if(menuName) pathOne = g_strdup_printf("%s/One",menuName); if(menuName) pathAll = g_strdup_printf("%s/All",menuName); if(pathEdit) { if(row<0) set_sensitive_option(manager, pathEdit, FALSE); else set_sensitive_option(manager, pathEdit, TRUE); g_free(pathEdit); } if(pathOne) { if(row<0) set_sensitive_option(manager, pathOne, FALSE); else set_sensitive_option(manager, pathOne, TRUE); g_free(pathOne); } if(pathDelete) { if(strstr(menuName,"Geom")) { if(NcentersXYZ <1) set_sensitive_option(manager, pathDelete, FALSE); else set_sensitive_option(manager, pathDelete, TRUE); } else if(strstr(menuName,"Variable")) { if(NVariablesXYZ <1) set_sensitive_option(manager, pathDelete, FALSE); else set_sensitive_option(manager, pathDelete, TRUE); } g_free(pathDelete); } if(pathAll) { if(strstr(menuName,"Geom")) { if(NcentersXYZ <1) set_sensitive_option(manager, pathAll, FALSE); else set_sensitive_option(manager, pathAll, TRUE); } else if(strstr(menuName,"Variable")) { if(NVariablesXYZ <1) set_sensitive_option(manager, pathAll, FALSE); else set_sensitive_option(manager, pathAll, TRUE); } g_free(pathAll); } show_menu_popup(manager, menuName, bevent->button, bevent->time); } GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event); } /********************************************************************************/ static gchar** freeList(gchar** strs, gint nlist) { gint i; for(i=0;i0) return TRUE; else return FALSE; } if(GeomXYZ[j].typeConnections) { if(GeomXYZ[j].typeConnections[i]>0) return TRUE; else return FALSE; } set_coord(i,V1); set_coord(j,V2); dif[0] = V1[0]-V2[0]; dif[1] = V1[1]-V2[1]; dif[2] = V1[2]-V2[2]; distance = 0; for (k=0;k<3;k++) distance +=dif[k]*dif[k]; distance = sqrt(distance); Prop = prop_atom_get(GeomXYZ[i].Symb); vd1 = Prop.covalentRadii; g_free(Prop.symbol); Prop = prop_atom_get(GeomXYZ[j].Symb); vd2 = Prop.covalentRadii; g_free(Prop.name); g_free(Prop.symbol); if(distance<(vd1+vd2)) return TRUE; else return FALSE; } /********************************************************************************/ static void clearList(GtkWidget* myList) { GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(myList)); GtkListStore *store = GTK_LIST_STORE (model); if(myList == list) g_signal_handlers_disconnect_by_func (model, row_deleted, NULL); gtk_list_store_clear(store); if(myList == list) g_signal_connect_after(G_OBJECT (model), "row_deleted", G_CALLBACK(row_deleted), NULL); } /********************************************************************************/ static void removeFromList(GtkWidget* myList, gint ligne) { GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; gchar* tmp; if(ligne<0) return; tmp = g_strdup_printf("%d",ligne); model = gtk_tree_view_get_model(GTK_TREE_VIEW(myList)); store = GTK_LIST_STORE (model); if(myList == list) g_signal_handlers_disconnect_by_func (model, row_deleted, NULL); if(gtk_tree_model_get_iter_from_string (model, &iter, tmp)) { gtk_list_store_remove(store, &iter); } g_free(tmp); if(myList == list) g_signal_connect_after(G_OBJECT (model), "row_deleted", G_CALLBACK(row_deleted), NULL); } /********************************************************************************/ static void changeNameVariableInGeometry(gchar* oldName, gchar* newName) { gint i; gint k=-1; for(i=0;i=NcentersXYZ)return; if(newNum==oldNum)return; /* swap oldNum and newNum */ g = GeomXYZ[oldNum]; GeomXYZ[oldNum] = GeomXYZ[newNum]; GeomXYZ[newNum] = g; for (i = 0; i <(gint)NcentersXYZ; i++) { if(!GeomXYZ[i].typeConnections) continue; j = GeomXYZ[i].typeConnections[oldNum]; GeomXYZ[i].typeConnections[oldNum] = GeomXYZ[i].typeConnections[newNum]; GeomXYZ[i].typeConnections[newNum] = j; } clearList(list); append_list(); if(GeomDrawingArea != NULL) rafresh_drawing(); return; } /* symbol */ if(numCol==1) { gint nc = strlen(new_text); if(nc<1)return; new_text[0]=toupper(new_text[0]); if(nc>1)new_text[1]=tolower(new_text[1]); if(!test_atom_define(new_text)) { gchar* message=g_strdup_printf(_("Sorry %s is not a symbol for an atom \n"),new_text); MessageGeom(message,_("Error"),TRUE); g_free(message); return; } Nc = atoi(path_string); if(GeomXYZ[Nc].Symb) g_free(GeomXYZ[Nc].Symb); GeomXYZ[Nc].Symb = g_strdup(new_text); path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (model, &iter, path); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 2*numCol, new_text, -1); gtk_tree_path_free (path); if(GeomDrawingArea != NULL) rafresh_drawing(); return; } /* MM Type */ if(numCol==2) { gint nc = strlen(new_text); if(nc<1)return; Nc = atoi(path_string); if(GeomXYZ[Nc].mmType) g_free(GeomXYZ[Nc].mmType); GeomXYZ[Nc].mmType = g_strdup(new_text); path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (model, &iter, path); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 2*numCol, new_text, -1); gtk_tree_path_free (path); if(GeomDrawingArea != NULL) rafresh_drawing(); return; } /* PDB Type */ if(numCol==3) { gint nc = strlen(new_text); if(nc<1)return; Nc = atoi(path_string); if(GeomXYZ[Nc].pdbType) g_free(GeomXYZ[Nc].pdbType); GeomXYZ[Nc].pdbType = g_strdup(new_text); path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (model, &iter, path); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 2*numCol, new_text, -1); gtk_tree_path_free (path); if(GeomDrawingArea != NULL) rafresh_drawing(); return; } /* Residue Name */ if(numCol==4) { gint nc = strlen(new_text); if(nc<1)return; Nc = atoi(path_string); if(strcmp(GeomXYZ[Nc].Residue,new_text)) { if(GeomXYZ[Nc].Residue) g_free(GeomXYZ[Nc].Residue); GeomXYZ[Nc].Residue = g_strdup(new_text); gint k; GeomXYZ[Nc].ResidueNumber = -1; for(k=0;k<(gint)NcentersXYZ;k++) { if(Nc != k && !strcmp(GeomXYZ[Nc].Residue,GeomXYZ[k].Residue)) { GeomXYZ[Nc].ResidueNumber = GeomXYZ[k].ResidueNumber; break; } } if(GeomXYZ[Nc].ResidueNumber == -1) { for(k=0;k<(gint)NcentersXYZ;k++) { if(GeomXYZ[Nc].ResidueNumber=(gint)NcentersXYZ || j >=(gint)NcentersXYZ || i<0 || j<0) { return -1000; } get_position(i,Pos); for(k=0;k<3;k++) A.C[k] = Pos[k]; get_position(j,Pos); for(k=0;k<3;k++) B.C[k] = Pos[k]; serr = get_distance_points(A,B,FALSE); res = atof(serr); g_free(serr); return res; } /*****************************************************************************/ static void sort_GeomXYZ() { gint i; gint j; gint k; GeomXYZAtomDef t; gint* oldNum = NULL; gint* N = NULL; if (NcentersXYZ <= 0) return ; oldNum = g_malloc(NcentersXYZ*sizeof(gint)); for (i = 0; i <(gint)NcentersXYZ; i++) oldNum[i] = i; N = g_malloc(NcentersXYZ*sizeof(gint)); for (i = 0; i <(gint)NcentersXYZ; i++) N[i] = 0; for (i = 1; i <(gint)NcentersXYZ-1; i++) { k = i; for (j = i+1; j <(gint)NcentersXYZ; j++) if( get_distance_xyz(j,i-1)MOLECULE\n"); fprintf(fd,"MOL2 : Made in Gabedit. mol2 file\n"); fprintf(fd," %10d %10d %10d\n",NcentersXYZ,n,1); fprintf(fd," SMALL\n"); fprintf(fd," NO_CHARGES\n"); fprintf(fd," ****\n"); fprintf(fd," ****\n"); fprintf(fd,"@ATOM\n"); for(i=0;iBOND\n"); n = 0; for(i=0;iSUBSTRUCTURE\n"); fprintf(fd," 1 RES1 1\n"); fclose(fd); datafile = get_name_file(FileName); temp = get_suffix_name_file(FileName); projectname = get_name_file(temp); localdir = get_name_dir(temp); if(lastdirectory) g_free(lastdirectory); lastdirectory = g_strdup(localdir); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_MOL2],projectname,datafile,localdir,remotehost,remoteuser,remotepass,remotedir,GABEDIT_TYPENODE_MOL2,NULL, defaultNetWorkProtocol); g_free(temp); g_free(datafile); g_free(projectname); g_free(localdir); } /************************************************************************************/ void save_geometry_mol2_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!FileName) || (strcmp(FileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } save_mol2_file(FileName); } /********************************************************************************/ void save_mol2_file_entry(GtkWidget* entry) { G_CONST_RETURN gchar *FileName; FileName = gtk_entry_get_text(GTK_ENTRY(entry)); if ((!FileName) || (strcmp(FileName,"") == 0)) return; save_mol2_file(FileName); } /********************************************************************************/ static gint testav(gchar *t) { guint i; if(!test(t) ){ for(i=0;i0) show_geom_in_list(i); } for(i=num;i0) AllocationVariableXYZ(); else freeVariablesXYZ(); /* ChangeVariablesXYZUseds(); */ removeFromList(listv, num); } /********************************************************************************/ void trans_allVariables_to_Constants() { guint numV; guint numC; guint k; guint i; guint NRem=0; gboolean *Rem; VariablesXYZDef *VXYZ; Rem = g_malloc(NVariablesXYZ*sizeof(gboolean)); VXYZ = g_malloc(NVariablesXYZ*sizeof(VariablesXYZDef)); for(numV=0;numV=0) { if(VariablesXYZ[i].Value) g_free(VariablesXYZ[i].Value); VariablesXYZ[i].Value = g_strdup(ValueV); if(rafresh) { gchar* texts[2] = { VariablesXYZ[i].Name, VariablesXYZ[i].Value}; removeFromList(listv, i); insertToList(listv, i, texts, 2); } return TRUE; } return FALSE; } /********************************************************************************/ void trans_coordXYZ(gchar T,guint i, gboolean rafresh) { gdouble V; gchar *NameV; gchar *ValueV; gint j; gint k; gboolean OK; V = atof(GeomXYZ[i].X); if( T == 'Y' ) V = atof(GeomXYZ[i].Y); if( T == 'Z' ) V = atof(GeomXYZ[i].Z); NameV = g_strdup_printf("%c%s%d",T,GeomXYZ[i].Symb,i+1); k = i+2; OK = FALSE; while(!OK) { OK = TRUE; for(j=0;j<(gint)NVariablesXYZ;j++) { if(strcmp(NameV,VariablesXYZ[j].Name )==0) { NameV = g_strdup_printf("%c%s%d",T,GeomXYZ[i].Symb,k); k++; OK = FALSE; break; } } } ValueV = g_strdup_printf("%f",V); if(!reset_variableXYZ_value(NameV,ValueV, rafresh)) AddVariableXYZ(NameV,ValueV,rafresh); if( T == 'X' ) GeomXYZ[i].X=g_strdup(NameV); if( T == 'Y' ) GeomXYZ[i].Y=g_strdup(NameV); if( T == 'Z' ) GeomXYZ[i].Z=g_strdup(NameV); } /********************************************************************************/ void set_variable_one_atom_in_GeomXYZ(gint i) { if(test(GeomXYZ[i].X)) trans_coordXYZ('X',(guint)i,FALSE); if(test(GeomXYZ[i].Y)) trans_coordXYZ('Y',(guint)i,FALSE); if(test(GeomXYZ[i].Z)) trans_coordXYZ('Z',(guint)i,FALSE); ChangeVariablesXYZUseds(); } /********************************************************************************/ void trans_OneGeomXYZ_to_variables(guint i) { if(test(GeomXYZ[i].X)) trans_coordXYZ('X',i,TRUE); if(test(GeomXYZ[i].Y)) trans_coordXYZ('Y',i,TRUE); if(test(GeomXYZ[i].Z)) trans_coordXYZ('Z',i,TRUE); show_geom_in_list(i); ChangeVariablesXYZUseds(); } /********************************************************************************/ void trans_allGeomXYZ_to_variables() { guint i; if(NcentersXYZ <1 ) return; for(i=0;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); gtk_box_pack_start(GTK_BOX(vboxframe), Label,TRUE,TRUE,0); Bouton = create_button(Dialogue,_("No")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); Bouton = create_button(Dialogue,_("Yes")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)trans_allGeomXYZ_to_variables, NULL); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_show_all(Dialogue); } /********************************************************************************/ static void DialogueTransInConst() { GtkWidget *Dialogue; GtkWidget *Label; GtkWidget *Bouton; GtkWidget *frame, *vboxframe; if (NcentersXYZ <1) { MessageGeom(_(" Sorry No Center !"),_("Error"),TRUE); return ; } Dialogue = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(Dialogue),"Tansform all variables in constants "); gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Dialogue),GTK_WINDOW(WindowGeom)); gtk_window_set_modal (GTK_WINDOW (Dialogue), TRUE); add_child(WindowGeom,Dialogue,gtk_widget_destroy,_(" Question ")); g_signal_connect(G_OBJECT(Dialogue),"delete_event",(GCallback)delete_child,NULL); gtk_widget_realize(Dialogue); Label = create_label_with_pixmap(Dialogue,_("\nAre you sure to transform\nall variables in constants? \n"),_(" Question ")); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); g_object_ref (frame); g_object_set_data_full(G_OBJECT (Dialogue), "frame", frame,(GDestroyNotify) g_object_unref); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); gtk_box_pack_start(GTK_BOX(vboxframe), Label,TRUE,TRUE,0); Bouton = create_button(Dialogue,_("No")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); Bouton = create_button(Dialogue,_("Yes")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)trans_allVariables_to_Constants, NULL); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_show_all(Dialogue); } /********************************************************************************/ static void TransXYZConstVar() { gint Nc; Nc=LineSelected; if(Nc<0) { MessageGeom(_("Sorry No line selected"),_("Error"),TRUE); return; } trans_OneGeomXYZ_to_variables((guint)Nc); LineSelected = -1; if(GeomDrawingArea != NULL) rafresh_drawing(); } /********************************************************************************/ static void TransXYZConstXVar() { gint i; if (NcentersXYZ <1) return ; for(i=0;i-1) { GeomXYZ=g_realloc(GeomXYZ,NcentersXYZ*sizeof(GeomXYZAtomDef)); removeFromList(list, NcentersXYZ); } else freeGeomXYZ(); ChangeVariablesXYZUseds(); if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS) set_spin_of_electrons(); } /********************************************************************************/ static void addAtom(GtkWidget *w,gpointer Entree) { gchar *texts[NUMBER_LIST_XYZ]; gchar *message; gint i; gint k; DestroyDialog = TRUE; texts[E_NUMBER] = g_strdup_printf("%d",NcentersXYZ+1); texts[E_SYMBOL] = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry[E_SYMBOL]))); texts[E_MMTYPE] = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry[E_MMTYPE]))); texts[E_PDBTYPE] = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry[E_PDBTYPE]))); texts[E_RESIDUE] = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry[E_RESIDUE]))); for (i=E_X;i<=E_Z;i++) { texts[i] = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry[i]))); if (!texts[i] || !strcmp(texts[i], "")) { MessageGeom(_("Sorry a Entry text is void !\n"),_("Error"),TRUE); DestroyDialog = FALSE; return; } k=testav(texts[i]); if(k<-1) { message=g_strdup_printf(_("Sorry\n %s \nis not a number \nand is not a variable "),texts[i]); MessageGeom(message,_("Error"),TRUE); DestroyDialog = FALSE; return; } } texts[E_CHARGE] = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry[E_CHARGE]))); if(iprogram == PROG_IS_MOLPRO) texts[E_LAYER] = g_strdup(" "); else texts[E_LAYER] = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry[E_LAYER]))); NcentersXYZ++; if(GeomXYZ==NULL) GeomXYZ=g_malloc(sizeof(GeomXYZAtomDef)); else GeomXYZ=g_realloc(GeomXYZ,NcentersXYZ*sizeof(GeomXYZAtomDef)); for(i=0; i-1) { for(i=E_X;i<=E_Z;i++) if(test(texts[i]) && !testpointeE(texts[i]) ) texts[i]=g_strdup_printf("%s.0",texts[i]); if(!strcmp(GeomXYZ[Nc].Residue,texts[E_RESIDUE])) oldResidue = TRUE; GeomXYZ[Nc].Nentry=NUMBER_LIST_XYZ; GeomXYZ[Nc].Symb = g_strdup(texts[E_SYMBOL]); GeomXYZ[Nc].mmType = g_strdup(texts[E_MMTYPE]); GeomXYZ[Nc].pdbType = g_strdup(texts[E_PDBTYPE]); GeomXYZ[Nc].Residue = g_strdup(texts[E_RESIDUE]); GeomXYZ[Nc].X = g_strdup(texts[E_X]); GeomXYZ[Nc].Y = g_strdup(texts[E_Y]); GeomXYZ[Nc].Z = g_strdup(texts[E_Z]); GeomXYZ[Nc].Charge = g_strdup(texts[E_CHARGE]); GeomXYZ[Nc].Layer = g_strdup(texts[E_LAYER]); if(!oldResidue) { gint k; GeomXYZ[Nc].ResidueNumber = -1; for(k=0;k<(gint)NcentersXYZ;k++) { if(Nc != k && !strcmp(GeomXYZ[Nc].Residue,GeomXYZ[k].Residue)) { GeomXYZ[Nc].ResidueNumber = GeomXYZ[k].ResidueNumber; break; } } if(GeomXYZ[Nc].ResidueNumber == -1) { for(k=0;k<(gint)NcentersXYZ;k++) { if(GeomXYZ[Nc].ResidueNumbervbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); Entry[E_SYMBOL] = create_label_entry(hbox,tlabel[E_SYMBOL],(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); if(NcentersXYZ==0) gtk_entry_set_text(GTK_ENTRY(Entry[E_SYMBOL]),"H"); else gtk_entry_set_text(GTK_ENTRY(Entry[E_SYMBOL]),GeomXYZ[NcentersXYZ-1].Symb); gtk_editable_set_editable((GtkEditable*) Entry[E_SYMBOL],FALSE); Bouton = gtk_button_new_with_label(_(" Set ")); gtk_box_pack_start (GTK_BOX(hbox), Bouton, TRUE, TRUE, 5); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)SelectAtom, Entry[E_SYMBOL]); hbox=create_hbox_false(vboxframe); { gint n=0; gchar** t = getListMMTypes(&n); if(n!=0) { Entry[E_MMTYPE] = create_label_combo(hbox,tlabel[E_MMTYPE],t,n, TRUE,(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } else { Entry[E_MMTYPE] = create_label_entry(hbox,tlabel[E_MMTYPE], (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } if(t) freeList(t,n); if(NcentersXYZ==0) { gtk_entry_set_text(GTK_ENTRY(Entry[E_MMTYPE]),"H"); } else { gtk_entry_set_text(GTK_ENTRY(Entry[E_MMTYPE]),GeomXYZ[NcentersXYZ-1].mmType); } } hbox=create_hbox_false(vboxframe); { gint n=0; gchar** t = getListPDBTypes("UNK", &n); if(n!=0) { Entry[E_PDBTYPE] = create_label_combo(hbox,tlabel[E_PDBTYPE],t,n, TRUE,(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } else { Entry[E_PDBTYPE] = create_label_entry(hbox,tlabel[E_PDBTYPE], (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } if(t) freeList(t,n); if(NcentersXYZ==0) { gtk_entry_set_text(GTK_ENTRY(Entry[E_PDBTYPE]),"H"); } else { gtk_entry_set_text(GTK_ENTRY(Entry[E_PDBTYPE]),GeomXYZ[NcentersXYZ-1].pdbType); } } hbox=create_hbox_false(vboxframe); Entry[E_RESIDUE] = create_label_entry(hbox,tlabel[E_RESIDUE], (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); if(NcentersXYZ==0) gtk_entry_set_text(GTK_ENTRY(Entry[E_RESIDUE])," "); else gtk_entry_set_text(GTK_ENTRY(Entry[E_RESIDUE]),GeomXYZ[NcentersXYZ-1].Residue); tlistvar =get_list_variablesXYZ(); for (i=E_X;i<=E_Z;i++) { hbox=create_hbox_false(vboxframe); Entry[i] = create_label_combo(hbox,tlabel[i],tlistvar, 2*NVariablesXYZ+1,TRUE, (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } freelistvariablesXYZ(tlistvar); set_entry_XYZ(); hbox=create_hbox_false(vboxframe); Entry[E_CHARGE] = create_label_entry(hbox,tlabel[E_CHARGE], (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_entry_set_text(GTK_ENTRY(Entry[E_CHARGE]),"0.0"); tlist=g_malloc(4*sizeof(char*)); tlist[0]=g_strdup(" "); tlist[1]=g_strdup("High"); tlist[2]=g_strdup("Medium"); tlist[3]=g_strdup("Low"); nlist=4; if(NcentersXYZ<3) nlist=1; hbox=create_hbox_false(vboxframe); if(iprogram != PROG_IS_MOLPRO) Entry[E_LAYER] = create_label_combo(hbox,tlabel[E_LAYER],tlist,nlist,FALSE,(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_widget_realize(Dialogue); Bouton = create_button(Dialogue,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); Bouton = create_button(Dialogue,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked",(GCallback)addAtom,Entry[E_SYMBOL]); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)destroy_dialogue,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); gtk_widget_show_all(Dialogue); g_free(tlist); } /********************************************************************************/ static void DialogueEdit() { GtkWidget *Dialogue; GtkWidget *Bouton; GtkWidget *hbox; GtkWidget *frame, *vboxframe; gint nlist; gchar *tlabel[]={ " ", N_("Atom Symbol : "), N_("MM Type : "), N_("PDB Type : "), N_("Residue Type : "), " X : ", " Y : ", " Z : ", N_(" Charge : "),N_(" Layer : ") }; gint i; gchar **tlist; gchar **tlistvar; gint Nc; Nc=LineSelected; if(Nc<0 ) { if(NcentersXYZ<1 ) MessageGeom(_("Create center before \n"),_("Error"),TRUE); else MessageGeom(_("Please Select your center \n"),_("Warning"),TRUE); return; } Dialogue = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(Dialogue),_("Edit Center")); gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Dialogue),GTK_WINDOW(WindowGeom)); add_child(WindowGeom,Dialogue,gtk_widget_destroy,_(" Edit Center ")); g_signal_connect(G_OBJECT(Dialogue),"delete_event",(GCallback)delete_child,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); g_object_ref (frame); g_object_set_data_full(G_OBJECT (Dialogue), "frame", frame,(GDestroyNotify) g_object_unref); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); Entry[E_SYMBOL] = create_label_entry(hbox,tlabel[E_SYMBOL],(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_entry_set_text(GTK_ENTRY(Entry[E_SYMBOL]),GeomXYZ[Nc].Symb); gtk_editable_set_editable((GtkEditable*) Entry[E_SYMBOL],FALSE); Bouton = gtk_button_new_with_label(_(" Set ")); gtk_box_pack_start (GTK_BOX(hbox), Bouton, TRUE, TRUE, 5); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)SelectAtom, Entry[E_SYMBOL]); hbox=create_hbox_false(vboxframe); { gint n=0; gchar** t = getListMMTypes(&n); if(n!=0) { Entry[E_MMTYPE] = create_label_combo(hbox,tlabel[E_MMTYPE],t,n, TRUE,(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } else { Entry[E_MMTYPE] = create_label_entry(hbox,tlabel[E_MMTYPE], (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } if(t) freeList(t,n); gtk_entry_set_text(GTK_ENTRY(Entry[E_MMTYPE]),GeomXYZ[Nc].mmType); } hbox=create_hbox_false(vboxframe); { gint n=0; gchar** t = getListPDBTypes(GeomXYZ[Nc].Residue, &n); if(n!=0) { Entry[E_PDBTYPE] = create_label_combo(hbox,tlabel[E_PDBTYPE],t,n, TRUE,(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } else { Entry[E_PDBTYPE] = create_label_entry(hbox,tlabel[E_PDBTYPE], (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } if(t) freeList(t,n); gtk_entry_set_text(GTK_ENTRY(Entry[E_PDBTYPE]),GeomXYZ[Nc].pdbType); } hbox=create_hbox_false(vboxframe); Entry[E_RESIDUE] = create_label_entry(hbox,tlabel[E_RESIDUE], (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); if(NcentersXYZ==0) gtk_entry_set_text(GTK_ENTRY(Entry[E_RESIDUE])," "); else gtk_entry_set_text(GTK_ENTRY(Entry[E_RESIDUE]),GeomXYZ[Nc].Residue); tlistvar =get_list_variablesXYZ(); for (i=E_X;i<=E_Z;i++) { hbox=create_hbox_false(vboxframe); if(i==E_X)tlistvar[0] = g_strdup(GeomXYZ[Nc].X); if(i==E_Y)tlistvar[0] = g_strdup(GeomXYZ[Nc].Y); if(i==E_Z)tlistvar[0] = g_strdup(GeomXYZ[Nc].Z); Entry[i] = create_label_combo(hbox,tlabel[i],tlistvar, 2*NVariablesXYZ+1,TRUE, (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } freelistvariablesXYZ(tlistvar); gtk_entry_set_text(GTK_ENTRY(Entry[E_X]),GeomXYZ[Nc].X); gtk_entry_set_text(GTK_ENTRY(Entry[E_Y]),GeomXYZ[Nc].Y); gtk_entry_set_text(GTK_ENTRY(Entry[E_Z]),GeomXYZ[Nc].Z); hbox=create_hbox_false(vboxframe); Entry[E_CHARGE] = create_label_entry(hbox,tlabel[E_CHARGE],(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_entry_set_text(GTK_ENTRY(Entry[E_CHARGE]),GeomXYZ[Nc].Charge); tlist=g_malloc(4*sizeof(char*)); tlist[0]=g_strdup(" "); tlist[1]=g_strdup("High"); tlist[2]=g_strdup("Medium"); tlist[3]=g_strdup("Low"); nlist=4; if(LineSelected<3) nlist=1; hbox=create_hbox_false(vboxframe); if(iprogram != PROG_IS_MOLPRO) { Entry[E_LAYER] = create_label_combo(hbox,tlabel[E_LAYER],tlist,nlist,FALSE,(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_entry_set_text(GTK_ENTRY(Entry[E_LAYER]),GeomXYZ[Nc].Layer); } gtk_widget_realize(Dialogue); Bouton = create_button(Dialogue,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); Bouton = create_button(Dialogue,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked",(GCallback)EditAtom,Entry[E_SYMBOL]); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)destroy_dialogue,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); gtk_widget_show_all(Dialogue); g_free(tlist); } /********************************************************************************/ static void DialogueDelete() { GtkWidget *Dialogue; GtkWidget *Label; GtkWidget *Bouton; GtkWidget *frame, *vboxframe; if (NcentersXYZ <1) { MessageGeom(_(" No Center to delete !"),_("Info"),TRUE); return ; } Dialogue = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(Dialogue),_("Delete Center")); gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Dialogue),GTK_WINDOW(WindowGeom)); gtk_window_set_modal (GTK_WINDOW (Dialogue), TRUE); add_child(WindowGeom,Dialogue,gtk_widget_destroy,_(" Delete Center ")); g_signal_connect(G_OBJECT(Dialogue),"delete_event",(GCallback)delete_child,NULL); gtk_widget_realize(Dialogue); Label = create_label_with_pixmap(Dialogue,_("\nAre you sure to delete \nthe last center?\n"),_("Question")); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); g_object_ref (frame); g_object_set_data_full(G_OBJECT (Dialogue), "frame", frame,(GDestroyNotify) g_object_unref); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); gtk_box_pack_start(GTK_BOX(vboxframe), Label,TRUE,TRUE,0); Bouton = create_button(Dialogue,_("No")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); Bouton = create_button(Dialogue,_("Yes")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked",(GCallback)DelAtom, NULL); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_show_all(Dialogue); } /********************************************************************************/ static gchar* get_symb_atom(gchar* symb) { gchar* S; gchar Forbidden[]={'0','1','2','3','4','5','6','7','8','9'}; if(strlen(symb)==1) S = g_strdup(symb); else { gint Ok = 1; gint i; for(i=0;i<10;i++) if(symb[1]== Forbidden[i]) { Ok =0; break; } if(Ok==1) { S = g_strdup_printf("%c%c",toupper(symb[0]),symb[1]); } else S = g_strdup_printf("%c",toupper(symb[0])); } if(!test_atom_define(S)) { S = g_strdup_printf("%c",toupper(symb[0])); if(!test_atom_define(S)) S = g_strdup("H"); } return S; } /********************************************************************************/ static gint get_connections_one_atom_hin(gchar* t, gint nAtoms, gint* connections) { gint k; gint nc; gint nj; gchar** split = NULL; gint nA = 0; gint type = 1; gint ibeg = 11; for(k=0;k Atom Type PDB Style*/ /* 1 -> Atom Symbol*/ /* 2 -> Atom Type Amber*/ /* 3 -> Atom Charge*/ /* 4 -> x*/ /* 5 -> y*/ /* 6 -> z*/ sscanf(t,"%s %s %s %s %s %s %s %s %s %s",dump,dump,listFields[0],listFields[1],listFields[2],dump,listFields[3],listFields[4],listFields[5],listFields[6]); *nc = get_connections_one_atom_hin(t, nAtoms, connections); } for(i=0;i<6;i++) { delete_last_spaces(listFields[i]); delete_first_spaces(listFields[i]); } return TRUE; } /*************************************************************************************/ void read_hin_file_no_add_list(gchar *NomFichier) { FILE *fd; int natoms; int nresidues; gchar *listFields[8]; gint i; gint j; gchar resName[BSIZE] = "U"; gint taille = BSIZE; gint ncAll =0; for(i=0;i<8;i++) listFields[i]=g_malloc(taille*sizeof(gchar)); fd = FOpen(NomFichier, "rb"); if(fd == NULL) { gchar* t; t = g_strdup_printf(_("Sorry\n I can not open \"%s\" file"),NomFichier); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } read_hin_numbers_of_atoms(fd,&natoms, &nresidues); if(natoms <1) { gchar* t; t = g_strdup_printf(_("Sorry\n I can read \"%s\" file"),NomFichier); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(); init_dipole(); GeomXYZ=g_malloc(natoms*sizeof(GeomXYZAtomDef)); for(i=0; i Atom Type PDB Style*/ /* 1 -> Atom Symbol*/ /* 2 -> Atom Type Amber*/ /* 3 -> Atom Charge*/ /* 4 -> x*/ /* 5 -> y*/ /* 6 -> z*/ /* printf("%s %s %s %s %s %s %s \n",listFields[0],listFields[1],listFields[2],listFields[3],listFields[4],listFields[5],listFields[6]);*/ GeomXYZ[j].Nentry=NUMBER_LIST_XYZ; GeomXYZ[j].Symb= g_strdup(listFields[1]); if(strcmp(listFields[0],"-")==0) GeomXYZ[j].pdbType= g_strdup(listFields[1]); else GeomXYZ[j].pdbType= g_strdup(listFields[1]); if(strcmp(listFields[2],"**")==0) GeomXYZ[j].mmType= g_strdup(listFields[1]); else GeomXYZ[j].mmType= g_strdup(listFields[2]); GeomXYZ[j].Residue= g_strdup(resName); GeomXYZ[j].ResidueNumber= i; if(Units==1) { GeomXYZ[j].X=g_strdup(listFields[4]); GeomXYZ[j].Y=g_strdup(listFields[5]); GeomXYZ[j].Z=g_strdup(listFields[6]); } else { GeomXYZ[j].X=g_strdup(ang_to_bohr(listFields[4])); GeomXYZ[j].Y=g_strdup(ang_to_bohr(listFields[5])); GeomXYZ[j].Z=g_strdup(ang_to_bohr(listFields[6])); } GeomXYZ[j].Charge=g_strdup(listFields[3]); GeomXYZ[j].Layer=g_strdup(" "); j++; if(j>=natoms)break; } if(natoms!=j) { if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(); NcentersXYZ = 0; NVariablesXYZ = 0; } fclose(fd); for(i=0;i<8;i++) g_free(listFields[i]); if(ncAll==0) { for(i=0; i0) { fprintf(file,"%d ",N); for(i=0;i0 && strcmp(GeomXYZ[0].Residue,"U")!=0) fprintf(fd,"res 1 %s 1 - - \n",GeomXYZ[0].Residue); connection = g_malloc(NcentersXYZ*sizeof(gint)); connectionType = g_malloc(NcentersXYZ*sizeof(gint)); j = 1; for(i=0;i<(gint)NcentersXYZ;i++) { N = 0; if(GeomXYZ[i].typeConnections) for(k=0;k<(gint)NcentersXYZ;k++) { if(i==k) continue; if(GeomXYZ[i].typeConnections[k]>0) { connection[N] = k+1; connectionType[N] = GeomXYZ[i].typeConnections[k]; N++; } } if(i>0&& strcmp(GeomXYZ[i].Residue,GeomXYZ[i-1].Residue)!=0) { fprintf(fd,"endres %d\n",j); /* if(i!=(gint)(NcentersXYZ-1)) */ fprintf(fd,"res %d %s %d - - \n",j+1,GeomXYZ[i].Residue,j+1); j++; } if(!test(GeomXYZ[i].X)) X = get_value_variableXYZ(GeomXYZ[i].X); else X = atof(GeomXYZ[i].X); if(!test(GeomXYZ[i].Y)) Y = get_value_variableXYZ(GeomXYZ[i].Y); else Y = atof(GeomXYZ[i].Y); if(!test(GeomXYZ[i].Z)) Z = get_value_variableXYZ(GeomXYZ[i].Z); else Z = atof(GeomXYZ[i].Z); if(Units==0) { X *= BOHR_TO_ANG; Y *= BOHR_TO_ANG; Z *= BOHR_TO_ANG; } save_atom_hin_file(fd,"ATOM",i+1,GeomXYZ[i].pdbType, GeomXYZ[i].mmType,GeomXYZ[i].Residue, GeomXYZ[i].ResidueNumber, X,Y,Z, 1.0, 300.0, GeomXYZ[i].Symb, atof(GeomXYZ[i].Charge),N,connection, connectionType); } if(NcentersXYZ>0 && strcmp(GeomXYZ[NcentersXYZ-1].Residue,"U")!=0) fprintf(fd,"endres %d\n",j); fprintf(fd,"endmol 1\n"); fclose(fd); g_free(connection); g_free(connectionType); datafile = get_name_file(FileName); temp = get_suffix_name_file(FileName); projectname = get_name_file(temp); localdir = get_name_dir(temp); if(lastdirectory) g_free(lastdirectory); lastdirectory = g_strdup(localdir); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_HIN],projectname,datafile,localdir,remotehost,remoteuser,remotepass,remotedir,GABEDIT_TYPENODE_HIN, NULL, defaultNetWorkProtocol); g_free(temp); g_free(datafile); g_free(projectname); g_free(localdir); return TRUE; } /************************************************************************************/ void save_geometry_hin_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!FileName) || (strcmp(FileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } save_hin_file(FileName); } /********************************************************************************/ void save_hin_file_entry(GtkWidget* entry) { G_CONST_RETURN gchar *FileName; FileName = gtk_entry_get_text(GTK_ENTRY(entry)); if ((!FileName) || (strcmp(FileName,"") == 0)) return ; save_hin_file(FileName); } /*****************************************************************************/ static gboolean save_cchemi_file(G_CONST_RETURN gchar* fileNameGeom) { FILE* file = NULL; gint j; gint k; gdouble X,Y,Z; gint nc = 0; gint* connection = NULL; gint* connectionType = NULL; gint ct; gboolean allFixed = TRUE; if(NcentersXYZ<1) return FALSE; if(!GeomXYZ) return FALSE; file = fopen(fileNameGeom, "w"); if(!file) return FALSE; fprintf(file,"#RunType = Energy, Optimization, MD, MDConfo, REMDConfo, RDCONFO, OptFreq\n"); fprintf(file,"RunType=MDConfo\n"); fprintf(file,"#Model = MM , Mopac , Orca or FireFly\n"); fprintf(file,"Model=MM\n"); fprintf(file,"#QMKeys=PM6\n"); fprintf(file,"QMKeys=AM1\n"); fprintf(file,"mopacCommand=mopac\n"); fprintf(file,"orcaCommand=orca\n"); fprintf(file,"fireflyCommand=firefly\n"); fprintf(file,"\n"); fprintf(file,"#Confo\n"); fprintf(file,"gaussianCommand=g09\n"); fprintf(file,"fireflyCommand=firefly\n"); fprintf(file,"numberOfGeometries=500\n"); fprintf(file,"tolEnergy=0.1\n"); fprintf(file,"tolDistance=0.1\n"); fprintf(file,"ConfoOptMM=TRUE\n"); fprintf(file,"ConfoOptMopac=TRUE\n"); fprintf(file,"ConfoOptMopacMethod=PM6 GNORM=0.001\n"); fprintf(file,"ConfoOptFireFly=FALSE\n"); fprintf(file,"# remove # if post processing required\n"); fprintf(file,"#mopacKeywordsPost=PM6\n"); fprintf(file,"gaussianKeywordsPost=B3LYP/6-31G*\n"); fprintf(file,"#fireflyKeywordsPost=AM1\n"); fprintf(file,"\n"); fprintf(file,"#MM\n"); fprintf(file,"# AMBER, UFF(not implemented), PAIRWISE\n"); fprintf(file,"ForceFieldType=0\n"); fprintf(file,"ForceFieldUseBond=TRUE\n"); fprintf(file,"ForceFieldUseBend=TRUE\n"); fprintf(file,"ForceFieldUseStrBend=FALSE\n"); fprintf(file,"ForceFieldUseDihedral=TRUE\n"); fprintf(file,"ForceFieldUseOutOfPlane=FALSE\n"); fprintf(file,"ForceFieldUseImproper=FALSE\n"); fprintf(file,"ForceFieldUseHydrogenBonded=FALSE\n"); fprintf(file,"ForceFieldUsecoulomb=TRUE\n"); fprintf(file,"#ForceFieldChargesType=ACKH2\n"); fprintf(file,"#ForceFieldChargesType=ACKH2-BEGIN\n"); fprintf(file,"#ForceFieldChargesType=EEM\n"); fprintf(file,"#ForceFieldChargesType=EEM-BEGIN\n"); fprintf(file,"ForceFieldVanderWals=6-12\n"); fprintf(file,"#ForceFieldVanderWals=7-14\n"); fprintf(file,"# NOCONSTRAINTS = 0, BONDSCONSTRAINTS = 1, BONDSANGLESCONSTRAINTS = 2\n"); fprintf(file,"ForceFieldConstraints=1\n"); fprintf(file,"\n"); fprintf(file,"#MD\n"); fprintf(file,"updateFrequency=5\n"); fprintf(file,"#Time in ps\n"); fprintf(file,"heatTime = 0.1\n"); fprintf(file,"equiTime = 0.1\n"); fprintf(file,"runTime = 2.0\n"); fprintf(file,"coolTime = 0\n"); fprintf(file,"timeExchange = 0.01\n"); fprintf(file,"heatTemp = 0\n"); fprintf(file,"runTemp = 400\n"); fprintf(file,"runTempMax = 700\n"); fprintf(file,"nTemperatures = 10\n"); fprintf(file,"#in fs\n"); fprintf(file,"stepSize = 0.5\n"); fprintf(file,"# VERLET = 0, BEEMAN = 1, STOCHASTIC = 2\n"); fprintf(file,"integrator = 0\n"); fprintf(file,"# NONE = 0, ANDERSEN = 1, BERENDSEN = 2, BUSSI = 3, NOSEHOOVER = 4\n"); fprintf(file,"thermostat = 0\n"); fprintf(file,"friction=40\n"); fprintf(file,"collide = 20\n"); fprintf(file,"\n"); fprintf(file,"#QuasiNewton\n"); fprintf(file,"useQuasiNewton = TRUE\n"); fprintf(file,"quasiNewtonMaxIterations = 20000\n"); fprintf(file,"quasiNewtonUpdateFrequency = 100\n"); fprintf(file,"quasiNewtonEpsilon = 0.0001\n"); fprintf(file,"quasiNewtonTolerence = 1e-16\n"); fprintf(file,"quasiNewtonMaxLines = 25\n"); fprintf(file,"\n"); fprintf(file,"#ConjugateGradient\n"); fprintf(file,"useConjugateGradient = FALSE\n"); fprintf(file,"conjugateGradientGradientNorm = 1e-3\n"); fprintf(file,"conjugateGradientMaxIterations = 100\n"); fprintf(file,"conjugateGradientUpdateFrequency = 1\n"); fprintf(file,"conjugateGradientMaxLines = 25\n"); fprintf(file,"conjugateGradientInitialStep = 0.001\n"); fprintf(file,"# 1 : Hestenes Stiefel, 2 : Fletcher Reeves, 3 : Polak Ribiere, 4 : Wolf Powell\n"); fprintf(file,"conjugateGradientMethod = 1\n"); fprintf(file,"\n"); fprintf(file,"#Geometry, nAtoms, charge, spin multiplicity. For each atom : symbol, MMType, pdbType, residueName, numResidue, charge, layer, x(Ang),y,z, nconn, num1, type1, num2, type2,...\n"); fprintf(file,"Geometry\n"); fprintf(file,"%d %d %d\n",Natoms,TotalCharges[0],SpinMultiplicities[0]); connection = g_malloc(NcentersXYZ*sizeof(gint)); connectionType = g_malloc(NcentersXYZ*sizeof(gint)); for(j=0;j0 && str[0] ==';') continue; if(strstr(str,"[")) break; split = NULL; split = gab_split(str); i = 0; if(split) for(i=0;i<8;i++) { if(split[i]==NULL) break; if(i==6 && split[i]) break; } if(i==6) { j++; GeomXYZ[j].Charge=g_strdup(split[6]); } if(split) g_strfreev(split); if(j>=NcentersXYZ) break; } fclose(file); } /*************************************************************************************/ static gboolean read_atom_pdb_file(gchar* line,gchar* listFields[]) { gint i; gint k = 0; if(strlen(line)<54) return FALSE; /* 0 -> Atom Type */ k = 0; for(i=0;i Residue Name */ k = 1; for(i=0;i Residue Number */ k = 2; for(i=0;i<4;i++) listFields[k][i] = line[23+i-1]; listFields[k][4] = '\0'; /* 3-> x */ k = 3; for(i=0;i<8;i++) listFields[k][i] = line[31+i-1]; listFields[k][8] = '\0'; /* 4-> y */ k = 4; for(i=0;i<8;i++) listFields[k][i] = line[39+i-1]; listFields[k][8] = '\0'; /* 5-> z */ k = 5; for(i=0;i<8;i++) listFields[k][i] = line[47+i-1]; listFields[k][8] = '\0'; /* 6-> Symbol */ k = 6; if(strlen(line)>=78) { for(i=0;i<2;i++) { listFields[k][i] = line[76+i]; } listFields[k][2] = '\0'; if(listFields[k][1]==' ') listFields[k][1] = '\0'; if(listFields[k][0]==' ') listFields[k][0] = '\0'; } else listFields[k][0] = '\0'; /* 7-> Charge */ k = 7; if(strlen(line)>=80) { for(i=0;i<(gint)strlen(line)-79+1;i++) listFields[k][i] = line[79+i-1]; listFields[k][strlen(line)-79+1] = '\0'; if(listFields[k][strlen(line)-79]=='\n') listFields[k][strlen(line)-79]='\0'; } else listFields[k][0] = '\0'; for(i=0;i<8;i++) { delete_last_spaces(listFields[i]); delete_first_spaces(listFields[i]); } return TRUE; } /********************************************************************************/ gint get_connections_one_connect_pdb(gchar* t) { gint k; gint ni; gint nj; gchar** split = NULL; gint nA = 0; split = gab_split(t); nA = 0; while(split && split[nA]!=NULL) nA++; if(nA<3) { g_strfreev(split); return 0; } ni = atoi(split[1])-1; if(ni<0 || ni>NcentersXYZ-1) { g_strfreev(split); return 0; } GeomXYZ[ni].typeConnections = g_malloc(NcentersXYZ*sizeof(gint)); for(k=0;kNcentersXYZ-1) continue; GeomXYZ[ni].typeConnections[nj] = 1; } g_strfreev(split); return 1; } /*************************************************************************************/ void read_pdb_file_no_add_list(gchar *NomFichier) { gchar *t; gchar *listFields[8]; FILE *fd; guint taille=BSIZE; guint i; gint j; gdouble charge; for(i=0;i<8;i++) listFields[i]=g_malloc(taille*sizeof(gchar)); fd = FOpen(NomFichier, "rb"); if(fd == NULL) { t = g_strdup_printf(_("Sorry\n I can not open \"%s\" file"),NomFichier); MessageGeom(t,_("Error"),TRUE); return; } t=g_malloc(taille); if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(); init_dipole(); GeomXYZ=g_malloc(sizeof(GeomXYZAtomDef)); GeomXYZ[0].typeConnections = NULL; j=0; while(!feof(fd)) { if(!fgets(t,taille,fd)) break; sscanf(t,"%s",listFields[0]); if(strcmp(listFields[0],"HETATM")!=0 && strcmp(listFields[0],"ATOM")!=0) continue; if(!strcmp(t,"END")) break; if(!read_atom_pdb_file(t,listFields)) continue; /* 0 -> Atom Type 1-> Residue Name 2-> Residue Number * 3-> x 4-> y 5-> z 6-> Symbol 7-> Charge */ GeomXYZ=g_realloc(GeomXYZ,(j+1)*sizeof(GeomXYZAtomDef)); GeomXYZ[j].typeConnections = NULL; GeomXYZ[j].Nentry=NUMBER_LIST_XYZ; if(strlen(listFields[6])<=0) GeomXYZ[j].Symb= get_symb_atom(listFields[0]); else GeomXYZ[j].Symb= g_strdup(listFields[6]); GeomXYZ[j].pdbType= g_strdup(listFields[0]); GeomXYZ[j].Residue= g_strdup(listFields[1]); GeomXYZ[j].ResidueNumber= atoi(listFields[2])-1; GeomXYZ[j].mmType= getMMTypeFromPDBTpl(GeomXYZ[j].Residue,GeomXYZ[j].pdbType,&charge); if(Units==1) { GeomXYZ[j].X=g_strdup(listFields[3]); GeomXYZ[j].Y=g_strdup(listFields[4]); GeomXYZ[j].Z=g_strdup(listFields[5]); } else { GeomXYZ[j].X=g_strdup(ang_to_bohr(listFields[3])); GeomXYZ[j].Y=g_strdup(ang_to_bohr(listFields[4])); GeomXYZ[j].Z=g_strdup(ang_to_bohr(listFields[5])); } if(strlen(listFields[7])<=0) { GeomXYZ[j].Charge=g_strdup_printf("%f",charge); } else GeomXYZ[j].Charge=g_strdup(listFields[7]); GeomXYZ[j].Layer=g_strdup(" "); j++; } fseek(fd, 0L, SEEK_SET); NcentersXYZ = j; NVariablesXYZ = 0; while(!feof(fd)) { if(!fgets(t,taille,fd)) break; sscanf(t,"%s",listFields[0]); if(strcmp(listFields[0],"CONECT")!=0) continue; if(!strcmp(t,"END")) break; if(!read_atom_pdb_file(t,listFields)) continue; get_connections_one_connect_pdb(t); } fclose(fd); /* multiple bond not define in a pdb file */ set_multiple_bonds(); g_free(t); for(i=0;i<8;i++) g_free(listFields[i]); read_charges_from_gromacs_topology_file(NomFichier); if(GeomIsOpen) { create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); } else if(GeomDrawingArea == NULL) { /* switch(iprogram) { case PROG_IS_MOLPRO : insert_molpro(2); break; case PROG_IS_GAUSS : insert_gaussian(2); break; default : edit_geometry(); } */ create_window_drawing(); } if(GeomDrawingArea != NULL) rafresh_drawing(); if(NcentersXYZ==0) { t = g_strdup_printf(_("Sorry\n I can read \"%s\" file"),NomFichier); MessageGeom(t,_("Error"),TRUE); return; } } /******************************************************************************/ static void save_atom_pdb_file(FILE* file, gchar*name, gint atomNumber, gchar* atomType, gchar* residueName, gint residueNumber, gdouble x, gdouble y, gdouble z, gdouble occupancy, gdouble temperature, gchar* symbol, gdouble charge ) { gchar localName[MAXNAME+1]; gchar localAtomType[MAXATOMTYPE+1]; gchar localResidueName[MAXRESIDUENAME+1]; gchar localSymbol[MAXSYMBOL+1]; localName[MAXNAME] = '\0'; localAtomType[MAXATOMTYPE] = '\0'; localResidueName[MAXRESIDUENAME] = '\0'; localSymbol[MAXSYMBOL] = '\0'; if(strlen(name)>MAXNAME) strncpy(localName, name, MAXNAME); else strcpy(localName, name); uppercase(localName); if(strlen(atomType)>MAXATOMTYPE) { strncpy(localAtomType, atomType, MAXATOMTYPE); } else { if(atomType && isdigit(atomType[0])) strcpy(localAtomType,atomType); else { sprintf(localAtomType," %s",atomType); if(strlen(localAtomType)>=MAXATOMTYPE) { if(isdigit(localAtomType[MAXATOMTYPE])) localAtomType[0] = localAtomType[MAXATOMTYPE]; localAtomType[MAXATOMTYPE] = '\0'; } } } if(strlen(residueName)>=MAXRESIDUENAME) strncpy(localResidueName, residueName, MAXRESIDUENAME); else { sprintf(localResidueName," %s",residueName); if(strlen(localResidueName)>=MAXRESIDUENAME) { if(isdigit(localResidueName[MAXRESIDUENAME])) localResidueName[0] = localResidueName[MAXRESIDUENAME]; localResidueName[MAXRESIDUENAME] = '\0'; } } uppercase(localResidueName); if(strlen(symbol)>MAXSYMBOL) strncpy(localSymbol, symbol, MAXSYMBOL); else strcpy(localSymbol,symbol); localSymbol[0] = toupper(localSymbol[0]); if(strlen(localSymbol)>1) localSymbol[1] = tolower(localSymbol[1]); if(atomNumber>99999) atomNumber = 99999; if(residueNumber>9999) residueNumber = 9999; fprintf(file,"%-6s",localName); /* Atom or HETATM */ fprintf(file,"%-6d",atomNumber); fprintf(file,"%-4s",localAtomType); fprintf(file,"%-4s",localResidueName); fprintf(file," "); fprintf(file,"%-4d",residueNumber); fprintf(file," "); fprintf(file,"%-8.3f",x); fprintf(file,"%-8.3f",y); fprintf(file,"%-8.3f",z); fprintf(file,"%-6.2f",occupancy); fprintf(file,"%-6.2f",temperature); fprintf(file," "); fprintf(file," "); fprintf(file,"%-2s",localSymbol); fprintf(file,"%-9.4f\n",charge); } /******************************************************************************/ gboolean save_pdb_file(G_CONST_RETURN gchar* FileName) { guint i; guint j; FILE* fd; gdouble X; gdouble Y; gdouble Z; gchar *projectname = NULL; gchar *datafile = NULL; gchar *localdir = NULL; gchar *remotehost = NULL; gchar *remoteuser = NULL; gchar *remotepass = NULL; gchar *remotedir = NULL; gchar *temp = NULL; gint* connection = NULL; gint N; temp = get_suffix_name_file(FileName); FileName = g_strdup_printf("%s.pdb",temp); g_free(temp); fd = FOpen(FileName, "w"); if(fd == NULL) { gchar* t = g_strdup_printf(_("Sorry,\n I can not open %s file"),FileName); Message(t,_("Error"),TRUE); g_free(t); return FALSE; } sortGeomXYZByResidueNumber(); fprintf(fd,"HEADER PROTEIN\n"); fprintf(fd,"COMPND UNNAMED\n"); temp = get_time_str(); if(temp) fprintf(fd,"AUTHOR GENERATED BY GABEDIT %d.%d.%d at %s",MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION,temp); else fprintf(fd,"AUTHOR GENERATED BY GABEDIT %d.%d.%d\n",MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION); for(i=0;i0) { connection[N] = j+1; N++; } } if(N>0) { gint len = 0; fprintf(fd,"CONECT %4d ",i+1); len += 6 + 1 +4; fprintf(fd,"%4d",connection[0]); len += 4; for(j=1;j<(guint)N;j++) { fprintf(fd,"%5d",connection[j]); len += 5; } if(len<72) for(j=1;j<72-len;j++) fprintf(fd," "); fprintf(fd,"\n"); } } fprintf(fd,"MASTER 0 0 0 0 0 0 0 0 "); fprintf(fd,"%4d 0 %4d 0\n",NcentersXYZ,NcentersXYZ); fprintf(fd,"END\n"); fclose(fd); g_free(connection); datafile = get_name_file(FileName); temp = get_suffix_name_file(FileName); projectname = get_name_file(temp); localdir = get_name_dir(temp); if(lastdirectory) g_free(lastdirectory); lastdirectory = g_strdup(localdir); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_PDB],projectname,datafile,localdir,remotehost,remoteuser,remotepass,remotedir,GABEDIT_TYPENODE_PDB, NULL, defaultNetWorkProtocol); g_free(temp); g_free(datafile); g_free(projectname); g_free(localdir); return TRUE; } /************************************************************************************/ void save_geometry_pdb_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *FileName; if(response_id != GTK_RESPONSE_OK) return; FileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!FileName) || (strcmp(FileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } save_pdb_file(FileName); } /********************************************************************************/ void save_pdb_file_entry(GtkWidget* entry) { G_CONST_RETURN gchar *FileName; FileName = gtk_entry_get_text(GTK_ENTRY(entry)); if ((!FileName) || (strcmp(FileName,"") == 0)) return ; save_pdb_file(FileName); } /********************************************************************************/ void get_charges_from_gamess_output_file(FILE* fd,gint N) { guint taille=BSIZE; gchar t[BSIZE]; gchar dump[BSIZE]; gchar d[BSIZE]; gchar* pdest; gint i; /* printf("NAtoms = %d\n",N);*/ for(i=0;i2) break; } } } /********************************************************************************/ void get_natural_charges_from_gaussian_output_file(FILE* fd,gint N) { guint taille=BSIZE; gchar t[BSIZE]; gchar dump[BSIZE]; gchar d[BSIZE]; gchar* pdest; gint i; gint ngrad =0; while(!feof(fd) ) { pdest = NULL; { char* e = fgets(t,taille,fd);} pdest = strstr( t, "Summary of Natural Population Analysis:"); if(!pdest) /* Gaussian 03 */ pdest = strstr( t, "Summary of Natural Population Analysis:"); if(pdest) { if(!feof(fd)) { char* e = fgets(t,taille,fd);} else break; if(!feof(fd)) { char* e = fgets(t,taille,fd);} else break; if(!strstr(t,"Natural Population"))break; if(!feof(fd)) { char* e = fgets(t,taille,fd);} else break; if(!strstr(t,"Natural"))break; if(!feof(fd)) { char* e = fgets(t,taille,fd);} else break; if(!strstr(t,"Charge"))break; if(!feof(fd)) { char* e = fgets(t,taille,fd);} else break; if(!strstr(t,"-------------"))break; for(i=0;i2) break; } } } /********************************************************************************/ void get_esp_charges_from_gaussian_output_file(FILE* fd,gint N) { guint taille=BSIZE; gchar t[BSIZE]; gchar dump[BSIZE]; gchar d[BSIZE]; gchar* pdest; gint i; gint ngrad=0; while(!feof(fd) ) { pdest = NULL; { char* e = fgets(t,taille,fd);} pdest = strstr( t, "Charges from ESP fit"); if(!pdest) /* Gaussian 03 */ pdest = strstr( t, "harges from ESP"); if(pdest) { if(!feof(fd)) { char* e = fgets(t,taille,fd);} else break; if(!feof(fd)) { char* e = fgets(t,taille,fd);} else break; for(i=0;i2) break; } } } /********************************************************************************/ static void read_molden_gabedit_geom_conv_file(gchar* fileName, gint geometryNumber, GabEditTypeFile type) { gchar t[BSIZE]; gchar AtomCoord[5][BSIZE]; FILE *fd; guint taille=BSIZE; gint i; gint l; gint numgeom; gchar *pdest; gint nn; fd = FOpen(fileName, "rb"); if(fd ==NULL) { sprintf(t,"Sorry\nI can not open %s file ",fileName); MessageGeom(t," Error ",TRUE); return; } numgeom =0; while(!feof(fd)) { if(!fgets(t,taille,fd))break; pdest = strstr( t, "[GEOMETRIES]"); if(pdest && strstr(t,"ZMAT")) { if(type == GABEDIT_TYPEFILE_MOLDEN) sprintf(t,_("Sorry\nMolden file with ZMAT coordinate is not supported by Gabedit")); if(type == GABEDIT_TYPEFILE_GABEDIT) sprintf(t,_("Sorry\nGabedit file with ZMAT coordinate is not supported by Gabedit")); MessageGeom(t,_("Error"),TRUE); return; } if (pdest) { while(!feof(fd)) { if(!fgets(t,taille,fd))break; str_delete_n(t); delete_last_spaces(t); delete_first_spaces(t); if(!isInteger(t))break; numgeom++; if(numgeom == geometryNumber) { nn = atoi(t); if(nn<1)break; GeomXYZ=g_malloc(nn*sizeof(GeomXYZAtomDef)); for(i=0; i0) { GeomXYZ=g_malloc(nAtoms*sizeof(GeomXYZAtomDef)); for(i=0; i")) { gboolean OkUnit = FALSE; do{ if(!fgets(t,taille,fd))break; if(strstr(t,"unit")) { OkUnit = TRUE; if(strstr(t,"angstrom"))unitOfOutAng=TRUE; break; }; }while(!feof(fd)); if(!OkUnit) break; numGeom++; if((gint)numGeom == numGeometry ) { OK = TRUE; break; } if(numGeometry<0 ) { OK = TRUE; break; } } } if(!OK && (numGeom == 0) ) { g_free(t); t = g_strdup_printf(_("Sorry\nI can read Geometry from %s file "),fileName); MessageGeom(t,_("Error"),TRUE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); return; } if(!OK) break; OK = FALSE; while(!feof(fd) ) { if(!fgets(t,taille,fd))break; if ( !(strstr(t,"atoms") && strstr(t,"geometry"))) continue; OK = TRUE; break; } if(!OK) { g_free(t); t = g_strdup_printf(_("Sorry\nI can read Geometry from %s file "),fileName); MessageGeom(t,_("Error"),TRUE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); return; } j=-1; while(!feof(fd) ) { if(!fgets(t,taille,fd))break; if(strstr(t,"}"))break; j++; if(GeomXYZ==NULL) GeomXYZ=g_malloc(sizeof(GeomXYZAtomDef)); else GeomXYZ=g_realloc(GeomXYZ,(j+1)*sizeof(GeomXYZAtomDef)); GeomXYZ[j].typeConnections = NULL; for(i=0;i=0) break; }while(!feof(fd)); fclose(fd); calculMMTypes(FALSE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(GeomIsOpen && MethodeGeom == GEOM_IS_XYZ) { clearList(list); append_list(); } MethodeGeom = GEOM_IS_XYZ; if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS && GeomIsOpen) set_spin_of_electrons(); } /********************************************************************************/ void read_geom_from_dalton_output_file(gchar *NomFichier, gint numgeometry) { gchar *t; gboolean OK; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; guint i; gint j=0; gint l; guint numgeom; gchar dum[100]; gint kk; for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); t=g_malloc(taille); fd = FOpen(NomFichier, "rb"); if(fd ==NULL) { g_free(t); t = g_strdup_printf(_("Sorry\nI can not open %s file "),NomFichier); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } numgeom = 0; do { OK=FALSE; while(!feof(fd)){ { char* e = fgets(t,taille,fd);} if ( strstr(t,"geometry (au)")) { { char* e = fgets(t,taille,fd);} { char* e = fgets(t,taille,fd);} numgeom++; if((gint)numgeom == numgeometry ) { OK = TRUE; break; } if(numgeometry<0 ) { OK = TRUE; break; } } } if(!OK && (numgeom == 0) ){ g_free(t); t = g_strdup_printf(_("Sorry\nI can not open %s file "),NomFichier); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } if(!OK)break; j=-1; while(!feof(fd) ) { { char* e = fgets(t,taille,fd);} if ( !strcmp(t,"\n")) { get_dipole_from_dalton_output_file(fd); break; } j++; if(GeomXYZ==NULL) GeomXYZ=g_malloc(sizeof(GeomXYZAtomDef)); else GeomXYZ=g_realloc(GeomXYZ,(j+1)*sizeof(GeomXYZAtomDef)); GeomXYZ[j].typeConnections = NULL; kk = sscanf(t,"%s %s %s %s %s",AtomCoord[0],AtomCoord[1], AtomCoord[2],AtomCoord[3], dum); if(kk==5) sscanf(t,"%s %s %s %s %s",AtomCoord[0],dum, AtomCoord[1], AtomCoord[2],AtomCoord[3]); { gint k; for(k=0;k<(gint)strlen(AtomCoord[0]);k++) if(isdigit(AtomCoord[0][k])) AtomCoord[0][k] = ' '; delete_all_spaces(AtomCoord[0]); } AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZ[j].Nentry=NUMBER_LIST_XYZ; GeomXYZ[j].Symb=g_strdup(AtomCoord[0]); GeomXYZ[j].mmType=g_strdup(AtomCoord[0]); GeomXYZ[j].pdbType=g_strdup(AtomCoord[0]); GeomXYZ[j].Residue=g_strdup(AtomCoord[0]); GeomXYZ[j].ResidueNumber=0; if(Units == 1 ) { GeomXYZ[j].X=g_strdup(bohr_to_ang(AtomCoord[1])); GeomXYZ[j].Y=g_strdup(bohr_to_ang(AtomCoord[2])); GeomXYZ[j].Z=g_strdup(bohr_to_ang(AtomCoord[3])); } else { GeomXYZ[j].X=g_strdup(AtomCoord[1]); GeomXYZ[j].Y=g_strdup(AtomCoord[2]); GeomXYZ[j].Z=g_strdup(AtomCoord[3]); } GeomXYZ[j].Charge=g_strdup("0.0"); GeomXYZ[j].Layer=g_strdup(" "); } NcentersXYZ = j+1; if(OK && numgeometry>=0) break; }while(!feof(fd)); fclose(fd); calculMMTypes(FALSE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(GeomIsOpen && MethodeGeom == GEOM_IS_XYZ) { clearList(list); append_list(); } MethodeGeom = GEOM_IS_XYZ; if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS && GeomIsOpen) set_spin_of_electrons(); } /********************************************************************************/ void read_first_dalton_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } read_geom_from_dalton_output_file(fileName,1); } /********************************************************************************/ void read_last_dalton_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } read_geom_from_dalton_output_file(fileName,-1); } /********************************************************************************/ void read_geom_conv_from_gamess_output_file(gchar *NomFichier, gint numgeometry) { gchar *t; gboolean OK; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; guint i; gint j=0; gint l; guint numgeom; gchar dum[100]; gint uni=1; for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); t=g_malloc(taille); fd = FOpen(NomFichier, "rb"); if(fd ==NULL) { g_free(t); t = g_strdup_printf(_("Sorry\nI can not open %s file "),NomFichier); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } numgeom = 0; do { OK=FALSE; while(!feof(fd)){ { char* e = fgets(t,taille,fd);} if ( strstr(t,"COORDINATES OF ALL ATOMS ARE (ANGS)")) { { char* e = fgets(t,taille,fd);} { char* e = fgets(t,taille,fd);} numgeom++; uni=1; if((gint)numgeom == numgeometry ) { OK = TRUE; break; } if(numgeometry<0 ) { OK = TRUE; break; } } } if(!OK && (numgeom == 0) ){ g_free(t); t = g_strdup_printf(_("Sorry\nI can not open %s file "),NomFichier); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } if(!OK)break; j=-1; while(!feof(fd) ) { { char* e = fgets(t,taille,fd);} if ( !strcmp(t,"\n") || !strcmp(t,"\r\n")) { get_dipole_from_gamess_output_file(fd); break; } j++; if(GeomXYZ==NULL) GeomXYZ=g_malloc(sizeof(GeomXYZAtomDef)); else GeomXYZ=g_realloc(GeomXYZ,(j+1)*sizeof(GeomXYZAtomDef)); GeomXYZ[j].typeConnections = NULL; sscanf(t,"%s %s %s %s %s",AtomCoord[0],dum, AtomCoord[1], AtomCoord[2],AtomCoord[3]); { gint k; for(k=0;k<(gint)strlen(AtomCoord[0]);k++) if(isdigit(AtomCoord[0][k])) AtomCoord[0][k] = ' '; delete_all_spaces(AtomCoord[0]); } AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZ[j].Nentry=NUMBER_LIST_XYZ; /* GeomXYZ[j].Symb=g_strdup(AtomCoord[0]);*/ GeomXYZ[j].Symb=get_symbol_using_z(atoi(dum)); GeomXYZ[j].mmType=g_strdup(AtomCoord[0]); GeomXYZ[j].pdbType=g_strdup(AtomCoord[0]); GeomXYZ[j].Residue=g_strdup(AtomCoord[0]); GeomXYZ[j].ResidueNumber=0; if(Units != uni ) { if(Units==1) { GeomXYZ[j].X=g_strdup(bohr_to_ang(AtomCoord[1])); GeomXYZ[j].Y=g_strdup(bohr_to_ang(AtomCoord[2])); GeomXYZ[j].Z=g_strdup(bohr_to_ang(AtomCoord[3])); } else { GeomXYZ[j].X=g_strdup(ang_to_bohr(AtomCoord[1])); GeomXYZ[j].Y=g_strdup(ang_to_bohr(AtomCoord[2])); GeomXYZ[j].Z=g_strdup(ang_to_bohr(AtomCoord[3])); } } else { GeomXYZ[j].X=g_strdup(AtomCoord[1]); GeomXYZ[j].Y=g_strdup(AtomCoord[2]); GeomXYZ[j].Z=g_strdup(AtomCoord[3]); } GeomXYZ[j].Charge=g_strdup("0.0"); GeomXYZ[j].Layer=g_strdup(" "); } NcentersXYZ = j+1; if(OK && numgeometry>=0) break; }while(!feof(fd)); fclose(fd); calculMMTypes(FALSE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(GeomIsOpen && MethodeGeom == GEOM_IS_XYZ) { clearList(list); append_list(); } MethodeGeom = GEOM_IS_XYZ; if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS && GeomIsOpen) set_spin_of_electrons(); } /********************************************************************************/ void get_charges_from_aimall_file(FILE* fd,gint N) { guint taille=BSIZE; gchar t[BSIZE]; gchar dump[BSIZE]; gchar d[BSIZE]; gchar* pdest; gint i; /* printf("NAtoms = %d\n",N);*/ for(i=0;i=0) break; if(numgeometry<0) geomposok = ftell(fd); }while(!feof(fd)); if ( NcentersXYZ >0 ) { if(numgeometry<0) fseek(fd, geomposok, SEEK_SET); geomposok = ftell(fd); get_charges_from_gamess_output_file(fd,NcentersXYZ); get_dipole_from_gamess_output_file(fd); fseek(fd, geomposok, SEEK_SET); get_charge_and_multilicity(fd); } fclose(fd); calculMMTypes(FALSE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(GeomIsOpen && MethodeGeom == GEOM_IS_XYZ) { clearList(list); append_list(); } MethodeGeom = GEOM_IS_XYZ; if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS && GeomIsOpen) set_spin_of_electrons(); } /********************************************************************************/ void read_geom_from_gamess_irc_file(gchar *NomFichier, gint numgeometry) { gchar *t; gboolean OK; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; guint i; gint j=0; gint l; guint numgeom; gchar dum[100]; gint uni=1; /* long geomposok = 0;*/ for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); t=g_malloc(taille); #ifdef G_OS_WIN32 fd = FOpen(NomFichier, "rb"); #else fd = FOpen(NomFichier, "rb"); #endif if(fd ==NULL) { g_free(t); t = g_strdup_printf(_("Sorry\nI can not open %s file "),NomFichier); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } numgeom = 0; do { OK=FALSE; while(!feof(fd)){ { char* e = fgets(t,taille,fd);} if (strstr(t,"CARTESIAN COORDINATES (BOHR)")) { numgeom++; uni=0; if((gint)numgeom == numgeometry ) { OK = TRUE; break; } } } if(!OK && (numgeom == 0) ){ g_free(t); t = g_strdup_printf(_("Sorry\nI can not open %s file "),NomFichier); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } if(!OK)break; j=-1; while(!feof(fd) ) { gdouble rdum = 0; { char* e = fgets(t,taille,fd);} if ( !strcmp(t,"GRADIENT")) break; if(2!=sscanf(t,"%s %lf",AtomCoord[0],&rdum)) break; j++; if(GeomXYZ==NULL) GeomXYZ=g_malloc(sizeof(GeomXYZAtomDef)); else GeomXYZ=g_realloc(GeomXYZ,(j+1)*sizeof(GeomXYZAtomDef)); GeomXYZ[j].typeConnections = NULL; sscanf(t,"%s %s %s %s %s",AtomCoord[0],dum, AtomCoord[1], AtomCoord[2],AtomCoord[3]); { gint k; for(k=0;k<(gint)strlen(AtomCoord[0]);k++) if(isdigit(AtomCoord[0][k])) AtomCoord[0][k] = ' '; delete_all_spaces(AtomCoord[0]); } AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZ[j].Nentry=NUMBER_LIST_XYZ; /* GeomXYZ[j].Symb=g_strdup(AtomCoord[0]);*/ GeomXYZ[j].Symb=get_symbol_using_z(atoi(dum)); GeomXYZ[j].mmType=g_strdup(AtomCoord[0]); GeomXYZ[j].pdbType=g_strdup(AtomCoord[0]); GeomXYZ[j].Residue=g_strdup(AtomCoord[0]); GeomXYZ[j].ResidueNumber=0; if(Units != uni ) { if(Units==1) { GeomXYZ[j].X=g_strdup(bohr_to_ang(AtomCoord[1])); GeomXYZ[j].Y=g_strdup(bohr_to_ang(AtomCoord[2])); GeomXYZ[j].Z=g_strdup(bohr_to_ang(AtomCoord[3])); } else { GeomXYZ[j].X=g_strdup(ang_to_bohr(AtomCoord[1])); GeomXYZ[j].Y=g_strdup(ang_to_bohr(AtomCoord[2])); GeomXYZ[j].Z=g_strdup(ang_to_bohr(AtomCoord[3])); } } else { GeomXYZ[j].X=g_strdup(AtomCoord[1]); GeomXYZ[j].Y=g_strdup(AtomCoord[2]); GeomXYZ[j].Z=g_strdup(AtomCoord[3]); } GeomXYZ[j].Charge=g_strdup("0.0"); GeomXYZ[j].Layer=g_strdup(" "); } NcentersXYZ = j+1; if(OK && numgeometry>=0) break; // if(numgeometry<0) geomposok = ftell(fd);*/ }while(!feof(fd)); if ( NcentersXYZ >0 ) { reset_charges_multiplicities_XYZ(); } fclose(fd); calculMMTypes(FALSE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(GeomIsOpen && MethodeGeom == GEOM_IS_XYZ) { clearList(list); append_list(); } MethodeGeom = GEOM_IS_XYZ; if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS && GeomIsOpen) set_spin_of_electrons(); } /********************************************************************************/ void read_first_gamess_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } read_geom_from_gamess_output_file(fileName,1); } /********************************************************************************/ void read_last_gamess_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } read_geom_from_gamess_output_file(fileName,-1); } /********************************************************************************/ void read_last_irc_gamess_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } read_geom_from_gamess_irc_file(fileName,-1); } /********************************************************************************/ void read_aimall_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } read_geom_from_aimall_file(fileName); } /********************************************************************************/ void read_geom_from_turbomole_output_file(gchar *fileName, gint numgeometry) { gchar *t; gboolean OK; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; guint i; gint j=0; gint l; guint numgeom; gint uni=1; long geomposok = 0; for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); t=g_malloc(taille*sizeof(gchar)); fd = FOpen(fileName, "rb"); if(fd ==NULL) { g_free(t); t = g_strdup_printf(_("Sorry\nI can not open %s file "),fileName); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } numgeom = 0; do { OK=FALSE; while(!feof(fd)){ { char* e = fgets(t,taille,fd);} if ( strstr(t,"Atomic coordinate, charge and isotop information")) { while(!feof(fd)){ { char* e = fgets(t,taille,fd);} if(strstr(t,"atomic") && strstr(t, "coordinates") && strstr(t,"atom") && strstr(t,"shells") && strstr(t,"charge")) break; } if(!(strstr(t,"atomic") && strstr(t, "coordinates") && strstr(t,"atom") && strstr(t,"shells") && strstr(t,"charge"))) {OK = FALSE; break;} numgeom++; uni=0; if((gint)numgeom == numgeometry ) { OK = TRUE; break; } if(numgeometry<0 ) { OK = TRUE; break; } } } if(!OK && (numgeom == 0) ){ g_free(t); t = g_strdup_printf(_("Sorry\nI can not open %s file "),fileName); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } if(!OK)break; j=-1; while(!feof(fd) ) { { char* e = fgets(t,taille,fd);} if ( !strcmp(t,"\n")) break; if ( !strcmp(t,"\r\n")) break; j++; if(GeomXYZ==NULL) GeomXYZ=g_malloc(sizeof(GeomXYZAtomDef)); else GeomXYZ=g_realloc(GeomXYZ,(j+1)*sizeof(GeomXYZAtomDef)); GeomXYZ[j].typeConnections = NULL; sscanf(t,"%s %s %s %s",AtomCoord[1], AtomCoord[2],AtomCoord[3], AtomCoord[0]); { gint k; for(k=0;k<(gint)strlen(AtomCoord[0]);k++) if(isdigit(AtomCoord[0][k])) AtomCoord[0][k] = ' '; delete_all_spaces(AtomCoord[0]); } AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZ[j].Nentry=NUMBER_LIST_XYZ; GeomXYZ[j].Symb=g_strdup(AtomCoord[0]); /* GeomXYZ[j].Symb=get_symbol_using_z(atoi(dum));*/ GeomXYZ[j].mmType=g_strdup(AtomCoord[0]); GeomXYZ[j].pdbType=g_strdup(AtomCoord[0]); GeomXYZ[j].Residue=g_strdup(AtomCoord[0]); GeomXYZ[j].ResidueNumber=0; if(Units != uni ) { if(Units==1) { GeomXYZ[j].X=g_strdup(bohr_to_ang(AtomCoord[1])); GeomXYZ[j].Y=g_strdup(bohr_to_ang(AtomCoord[2])); GeomXYZ[j].Z=g_strdup(bohr_to_ang(AtomCoord[3])); } else { GeomXYZ[j].X=g_strdup(ang_to_bohr(AtomCoord[1])); GeomXYZ[j].Y=g_strdup(ang_to_bohr(AtomCoord[2])); GeomXYZ[j].Z=g_strdup(ang_to_bohr(AtomCoord[3])); } } else { GeomXYZ[j].X=g_strdup(AtomCoord[1]); GeomXYZ[j].Y=g_strdup(AtomCoord[2]); GeomXYZ[j].Z=g_strdup(AtomCoord[3]); } GeomXYZ[j].Charge=g_strdup("0.0"); GeomXYZ[j].Layer=g_strdup(" "); } NcentersXYZ = j+1; if(OK && numgeometry>=0) break; if(numgeometry<0) geomposok = ftell(fd); }while(!feof(fd)); if ( NcentersXYZ >0 ) { if(numgeometry<0) fseek(fd, geomposok, SEEK_SET); geomposok = ftell(fd); get_charges_from_turbomole_output_file(fd,NcentersXYZ); fseek(fd, geomposok, SEEK_SET); get_dipole_from_turbomole_output_file(fd); /* fseek(fd, geomposok, SEEK_SET); get_charge_and_multilicity(fd); */ } fclose(fd); calculMMTypes(FALSE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(GeomIsOpen && MethodeGeom == GEOM_IS_XYZ) { clearList(list); append_list(); } MethodeGeom = GEOM_IS_XYZ; if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS && GeomIsOpen) set_spin_of_electrons(); } /********************************************************************************/ void read_first_turbomole_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } read_geom_from_turbomole_output_file(fileName,1); } /********************************************************************************/ void read_last_turbomole_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } read_geom_from_turbomole_output_file(fileName,-1); } /********************************************************************************/ void read_geom_from_vasp_xml_file(gchar *fileName, gint numgeom) { gchar** symbols = NULL; gdouble* positions[3]= { NULL, NULL, NULL}; gint nAtoms = 0; gdouble* X; gdouble* Y; gdouble* Z; gint k; nAtoms = read_geometry_vasp_xml_file(fileName, numgeom, &symbols, positions); if(nAtoms<1) { gchar* t = g_strdup_printf(_("Sorry\nI can not the geometry number %d from %s file "),numgeom, fileName); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } init_dipole(); if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(); NcentersXYZ = nAtoms; GeomXYZ = g_malloc(NcentersXYZ*sizeof(GeomXYZAtomDef)); X = positions[0]; Y = positions[1]; Z = positions[2]; for(k=0;k0 && fgets(t,BSIZE,file)) { deleteLastSpaces(t); strsplit2 = gab_split(t); } while(strsplit2 && strsplit2[nmax2]) nmax2++; if(nmax<1 || nmax != nmax2) { if(t)g_free(t); t = g_strdup_printf(_("Sorry\nI can not the symbol of atoms from %s file,\nadd these after the cell definition before the number of each type"),fileName); MessageGeom(t,_("Error"),TRUE); g_free(t); if(strsplit1) g_strfreev(strsplit1); if(strsplit2) g_strfreev(strsplit2); return; } } types = g_malloc(nmax*sizeof(gchar*)); i = 0; while(strsplit1 && strsplit1[i]) { types[i] = g_strdup(strsplit1[i]); i++;} ntypes = g_malloc(nmax*sizeof(gint)); i = 0; while(strsplit2 && strsplit2[i]) { ntypes[i] = atoi(strsplit2[i]); i++;} nAtoms = 0; //printf("nmax = %d\n",nmax); //for(i=0;i0 ) { { char* e = fgets(t,taille,fd);} { char* e = fgets(t,taille,fd);} { char* e = fgets(t,taille,fd);} pdest = strstr( t, "Type" ); result = pdest - t ; if(result>0) itype=1; else itype=0; { char* e = fgets(t,taille,fd);} numgeom++; if(numgeom == numgeometry ) { OK = TRUE; break; } } } if(!OK && (numgeom == 0) ) { g_free(t); t = g_strdup_printf(_("Sorry\nI can not read geometry in %s file "),NomFichier); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } if(!OK)break; j=-1; while(!feof(fd) ) { { char* e = fgets(t,taille,fd);} pdest = strstr( t, "----------------------------------" ); result = pdest - t ; if ( result >0 ) { long geomposok = ftell(fd); get_dipole_from_gaussian_output_file(fd); fseek(fd, geomposok, SEEK_SET); get_charges_from_gaussian_output_file(fd,j+1); get_natural_charges_from_gaussian_output_file(fd,j+1); fseek(fd, geomposok, SEEK_SET); get_esp_charges_from_gaussian_output_file(fd,j+1); break; } j++; if(GeomXYZ==NULL) GeomXYZ=g_malloc(sizeof(GeomXYZAtomDef)); else GeomXYZ=g_realloc(GeomXYZ,(j+1)*sizeof(GeomXYZAtomDef)); GeomXYZ[j].typeConnections = NULL; if(itype==0) sscanf(t,"%d %s %s %s %s",&idummy,AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3]); else sscanf(t,"%d %s %d %s %s %s",&idummy,AtomCoord[0],&idummy,AtomCoord[1],AtomCoord[2],AtomCoord[3]); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZ[j].Nentry=NUMBER_LIST_XYZ; GeomXYZ[j].Symb=g_strdup(symb_atom_get((guint)atoi(AtomCoord[0]))); GeomXYZ[j].mmType=g_strdup(GeomXYZ[j].Symb); GeomXYZ[j].pdbType=g_strdup(GeomXYZ[j].Symb); GeomXYZ[j].Residue=g_strdup(GeomXYZ[j].Symb); GeomXYZ[j].ResidueNumber=0; if(Units == 0 ) { GeomXYZ[j].X=g_strdup(ang_to_bohr(AtomCoord[1])); GeomXYZ[j].Y=g_strdup(ang_to_bohr(AtomCoord[2])); GeomXYZ[j].Z=g_strdup(ang_to_bohr(AtomCoord[3])); } else { GeomXYZ[j].X=g_strdup(AtomCoord[1]); GeomXYZ[j].Y=g_strdup(AtomCoord[2]); GeomXYZ[j].Z=g_strdup(AtomCoord[3]); } GeomXYZ[j].Charge=g_strdup("0.0"); GeomXYZ[j].Layer=g_strdup(" "); } NcentersXYZ = j+1; if(OK) break; }while(!feof(fd)); fclose(fd); g_free(t); calculMMTypes(FALSE); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(GeomIsOpen && MethodeGeom == GEOM_IS_XYZ) { clearList(list); append_list(); } MethodeGeom = GEOM_IS_XYZ; if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS && GeomIsOpen) set_spin_of_electrons(); } /********************************************************************************/ void read_geom_from_molpro_file(gchar *NomFichier, gint numgeometry) { gchar *t; gboolean OK; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; guint idummy; guint i; gint j=0; gint l; guint numgeom; for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); t=g_malloc(taille); fd = FOpen(NomFichier, "rb"); if(fd ==NULL) { g_free(t); t = g_strdup_printf(_("Sorry\nI can not open %s file "),NomFichier); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } numgeom = 0; do { OK=FALSE; while(!feof(fd)){ { char* e = fgets(t,taille,fd);} if ( !strcmp(t," ATOMIC COORDINATES\n")) { { char* e = fgets(t,taille,fd);} { char* e = fgets(t,taille,fd);} { char* e = fgets(t,taille,fd);} numgeom++; if((gint)numgeom == numgeometry ) { OK = TRUE; break; } } } if(!OK && (numgeom == 0) ){ g_free(t); t = g_strdup_printf(_("Sorry\nI can not open %s file "),NomFichier); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } if(!OK)break; j=-1; while(!feof(fd) ) { { char* e = fgets(t,taille,fd);} if ( !strcmp(t,"\n")) { get_dipole_from_molpro_output_file(fd); break; } j++; if(GeomXYZ==NULL) GeomXYZ=g_malloc(sizeof(GeomXYZAtomDef)); else GeomXYZ=g_realloc(GeomXYZ,(j+1)*sizeof(GeomXYZAtomDef)); GeomXYZ[j].typeConnections = NULL; sscanf(t,"%d %s %s %s %s %s",&idummy,AtomCoord[0],AtomCoord[1],AtomCoord[1], AtomCoord[2],AtomCoord[3]); { gint k; for(k=0;k<(gint)strlen(AtomCoord[0]);k++) if(isdigit(AtomCoord[0][k])) AtomCoord[0][k] = ' '; delete_all_spaces(AtomCoord[0]); } AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZ[j].Nentry=NUMBER_LIST_XYZ; GeomXYZ[j].Symb=g_strdup(AtomCoord[0]); GeomXYZ[j].mmType=g_strdup(AtomCoord[0]); GeomXYZ[j].pdbType=g_strdup(AtomCoord[0]); GeomXYZ[j].Residue=g_strdup(AtomCoord[0]); GeomXYZ[j].ResidueNumber=0; if(Units == 1 ) { GeomXYZ[j].X=g_strdup(bohr_to_ang(AtomCoord[1])); GeomXYZ[j].Y=g_strdup(bohr_to_ang(AtomCoord[2])); GeomXYZ[j].Z=g_strdup(bohr_to_ang(AtomCoord[3])); } else { GeomXYZ[j].X=g_strdup(AtomCoord[1]); GeomXYZ[j].Y=g_strdup(AtomCoord[2]); GeomXYZ[j].Z=g_strdup(AtomCoord[3]); } GeomXYZ[j].Charge=g_strdup("0.0"); GeomXYZ[j].Layer=g_strdup(" "); } NcentersXYZ = j+1; if(OK) break; }while(!feof(fd)); fclose(fd); g_free(t); calculMMTypes(FALSE); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(GeomIsOpen && MethodeGeom == GEOM_IS_XYZ) { clearList(list); append_list(); } MethodeGeom = GEOM_IS_XYZ; if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS && GeomIsOpen) set_spin_of_electrons(); } /********************************************************************************/ void read_last_gaussian_file(GabeditFileChooser *SelecFile , gint response_id) { gchar *t; gchar *NomFichier; gboolean OK; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; guint idummy; guint i; gint j=0; gint l; guint numgeom; gchar *pdest; gint result; guint itype=0; gchar* strInput = "Input orientation:"; gchar* strStand = "Standard orientation:"; gchar* strSearch = strInput; if(response_id != GTK_RESPONSE_OK) return; for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); NomFichier = gabedit_file_chooser_get_current_file(SelecFile); if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } t=g_malloc(taille); fd = FOpen(NomFichier, "rb"); if(fd ==NULL) { MessageGeom(_("Sorry\nI can not open this file"),_("Error"),TRUE); return; } while(!feof(fd)){ if(!fgets(t,taille,fd))break; if(strstr(t,strStand)) { strSearch = strStand; break; } } fseek(fd, 0, SEEK_SET); numgeom =1; do { OK=FALSE; while(!feof(fd)){ { char* e = fgets(t,taille,fd);} if(strstr(t,"Charge =") && strstr(t,"Multiplicity =")) { gchar* p = strstr(t,"Charge =")+8; TotalCharges[0] = atoi(p); p = strstr(t,"Multiplicity =")+14; SpinMultiplicities[0] = atoi(p); } pdest = strstr( t, strSearch); result = pdest - t ; if ( result >0 ) { { char* e = fgets(t,taille,fd);} { char* e = fgets(t,taille,fd);} { char* e = fgets(t,taille,fd);} pdest = strstr( t, "Type" ); result = pdest - t ; if(result>0) itype=1; else itype=0; { char* e = fgets(t,taille,fd);} numgeom++; OK = TRUE; break; } } if(!OK && (numgeom == 1) ){ MessageGeom(_("Sorry\nI can not read this file"),_("Error"),TRUE); return; } if(!OK)break; j=-1; while(!feof(fd) ) { { char* e = fgets(t,taille,fd);} pdest = strstr( t, "----------------------------------" ); result = pdest - t ; if ( result >0 ) { long geomposok = ftell(fd); get_dipole_from_gaussian_output_file(fd); fseek(fd, geomposok, SEEK_SET); get_charges_from_gaussian_output_file(fd,j+1); get_natural_charges_from_gaussian_output_file(fd,j+1); fseek(fd, geomposok, SEEK_SET); get_esp_charges_from_gaussian_output_file(fd,j+1); fseek(fd, geomposok, SEEK_SET); break; } j++; if(GeomXYZ==NULL) GeomXYZ=g_malloc(sizeof(GeomXYZAtomDef)); else GeomXYZ=g_realloc(GeomXYZ,(j+1)*sizeof(GeomXYZAtomDef)); GeomXYZ[j].typeConnections = NULL; if(itype==0) sscanf(t,"%d %s %s %s %s",&idummy,AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3]); else sscanf(t,"%d %s %d %s %s %s",&idummy,AtomCoord[0],&idummy,AtomCoord[1],AtomCoord[2],AtomCoord[3]); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZ[j].Nentry=NUMBER_LIST_XYZ; GeomXYZ[j].Symb=g_strdup(symb_atom_get((guint)atoi(AtomCoord[0]))); GeomXYZ[j].mmType=g_strdup(GeomXYZ[j].Symb); GeomXYZ[j].pdbType=g_strdup(GeomXYZ[j].Symb); GeomXYZ[j].Residue=g_strdup(GeomXYZ[j].Symb); GeomXYZ[j].ResidueNumber=0; if(Units == 0 ) { GeomXYZ[j].X=g_strdup(ang_to_bohr(AtomCoord[1])); GeomXYZ[j].Y=g_strdup(ang_to_bohr(AtomCoord[2])); GeomXYZ[j].Z=g_strdup(ang_to_bohr(AtomCoord[3])); } else { GeomXYZ[j].X=g_strdup(AtomCoord[1]); GeomXYZ[j].Y=g_strdup(AtomCoord[2]); GeomXYZ[j].Z=g_strdup(AtomCoord[3]); } GeomXYZ[j].Charge=g_strdup("0.0"); GeomXYZ[j].Layer=g_strdup(" "); } NcentersXYZ = j+1; }while(!feof(fd)); fclose(fd); calculMMTypes(FALSE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(GeomIsOpen) { append_list(); } if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS) set_spin_of_electrons(); set_last_directory(NomFichier); } /********************************************************************************/ void read_first_gaussian_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *t; gchar *NomFichier; gboolean OK; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; guint idummy; guint i; gint j=0; gint l; gchar *pdest; gint result; guint itype=0; gchar* strInput = "Input orientation:"; gchar* strStand = "Standard orientation:"; gchar* strSearch = strInput; if(response_id != GTK_RESPONSE_OK) return; for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); NomFichier = gabedit_file_chooser_get_current_file(SelecFile); if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } t=g_malloc(taille); fd = FOpen(NomFichier, "rb"); if(fd ==NULL) { MessageGeom(_("Sorry\nI can not open this file"),_("Error"),TRUE); return; } while(!feof(fd)){ if(!fgets(t,taille,fd))break; if(strstr(t,strStand)) { strSearch = strStand; break; } } fseek(fd, 0, SEEK_SET); OK=FALSE; while(!feof(fd)){ { char* e = fgets(t,taille,fd);} if(strstr(t,"Charge =") && strstr(t,"Multiplicity =")) { gchar* p = strstr(t,"Charge =")+8; TotalCharges[0] = atoi(p); p = strstr(t,"Multiplicity =")+14; SpinMultiplicities[0] = atoi(p); } pdest = strstr( t, strSearch ); result = pdest - t ; if ( result >0 ) { { char* e = fgets(t,taille,fd);} { char* e = fgets(t,taille,fd);} { char* e = fgets(t,taille,fd);} pdest = strstr( t, "Type" ); result = pdest - t ; if(result>0) itype=1; else itype=0; { char* e = fgets(t,taille,fd);} OK = TRUE; break; } } if(!OK){ MessageGeom(_("Sorry\nI can not read this file"),_("Error"),TRUE); return; } j=-1; while(!feof(fd) ) { { char* e = fgets(t,taille,fd);} pdest = strstr( t, "----------------------------------" ); result = pdest - t ; if ( result >0 ) { long geomposok = ftell(fd); get_dipole_from_gaussian_output_file(fd); fseek(fd, geomposok, SEEK_SET); get_charges_from_gaussian_output_file(fd,j+1); get_natural_charges_from_gaussian_output_file(fd,j+1); fseek(fd, geomposok, SEEK_SET); get_esp_charges_from_gaussian_output_file(fd,j+1); break; } j++; if(GeomXYZ==NULL)GeomXYZ=g_malloc(sizeof(GeomXYZAtomDef)); else GeomXYZ=g_realloc(GeomXYZ,(j+1)*sizeof(GeomXYZAtomDef)); GeomXYZ[j].typeConnections = NULL; if(itype==0) sscanf(t,"%d %s %s %s %s",&idummy,AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3]); else sscanf(t,"%d %s %d %s %s %s",&idummy,AtomCoord[0],&idummy,AtomCoord[1],AtomCoord[2],AtomCoord[3]); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZ[j].Nentry=NUMBER_LIST_XYZ; GeomXYZ[j].Symb=g_strdup(symb_atom_get((guint)atoi(AtomCoord[0]))); GeomXYZ[j].mmType=g_strdup(GeomXYZ[j].Symb); GeomXYZ[j].pdbType=g_strdup(GeomXYZ[j].Symb); GeomXYZ[j].Residue=g_strdup(GeomXYZ[j].Symb); GeomXYZ[j].ResidueNumber=0; if(Units == 0 ) { GeomXYZ[j].X=g_strdup(ang_to_bohr(AtomCoord[1])); GeomXYZ[j].Y=g_strdup(ang_to_bohr(AtomCoord[2])); GeomXYZ[j].Z=g_strdup(ang_to_bohr(AtomCoord[3])); } else { GeomXYZ[j].X=g_strdup(AtomCoord[1]); GeomXYZ[j].Y=g_strdup(AtomCoord[2]); GeomXYZ[j].Z=g_strdup(AtomCoord[3]); } GeomXYZ[j].Charge=g_strdup("0.0"); GeomXYZ[j].Layer=g_strdup(" "); } fclose(fd); calculMMTypes(FALSE); NcentersXYZ = j+1; g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(GeomIsOpen) { append_list(); } if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS) set_spin_of_electrons(); set_last_directory(NomFichier); } /********************************************************************************/ void read_fchk_gaussian_file(GabeditFileChooser *SelecFile , gint response_id) { gchar *fileName; FILE *file; gint i,j; gint *z = NULL; gdouble* coords = NULL; gdouble* charges = NULL; gdouble* dipole = NULL; gint n; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } file = FOpen(fileName, "rb"); if(file ==NULL) { MessageGeom(_("Sorry\nI can not open this file"),_("Error"),TRUE); return; } i = get_one_int_from_fchk_gaussian_file(file,"Multiplicity "); if(i<1) { MessageGeom(_("Sorry\nI can not the multiplicity from this file"),_("Error"),TRUE); return; } rewind(file); j = get_one_int_from_fchk_gaussian_file(file,"Number of atoms "); if(j<1) { MessageGeom(_("Sorry\nI can not the number of atoms from this file"),_("Error"),TRUE); return; } SpinMultiplicities[0] = i; rewind(file); z = get_array_int_from_fchk_gaussian_file(file, "Atomic numbers ", &n); if(n!=j) { MessageGeom(_("Sorry\nI can not read the atomic numbers from this file"),_("Error"),TRUE); return; } rewind(file); coords = get_array_real_from_fchk_gaussian_file(file, "Current cartesian coordinates ", &n); if(n!=3*j) { MessageGeom(_("Sorry\nI can not read the current cartesian coordinates from this file"),_("Error"),TRUE); return; } rewind(file); TotalCharges[0] = get_one_int_from_fchk_gaussian_file(file,"Charge "); NcentersXYZ = j; GeomXYZ=g_malloc(NcentersXYZ*sizeof(GeomXYZAtomDef)); for(j=0;j2) break; } } } /********************************************************************************/ void read_geom_from_qchem_file(gchar *NomFichier, gint numgeometry) { gchar *t; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; guint idummy; guint i; gint j=0; gint l; gint numgeom; gchar *pdest; long int geomposok = 0; for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(gchar)); t=g_malloc(taille*sizeof(gchar)); fd = FOpen(NomFichier, "rb"); if(fd ==NULL) { g_free(t); t = g_strdup_printf(_("Sorry\nI can not open %s file "),NomFichier); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } numgeom =0; while(!feof(fd)) { if(!fgets(t,taille,fd))break; pdest = NULL; if(( strstr( t,"Atom") || strstr( t,"ATOM")) && strstr( t,"X") && strstr( t,"Y") && strstr( t,"Z")) { if(strstr( t,"Atom")) if(!fgets(t,taille,fd))break; /* ---- ligne */ pdest = t; } if ( pdest ) { numgeom++; geomposok = ftell(fd); if(numgeom == numgeometry ) { break; } } } if(numgeom == 0) { g_free(t); t = g_strdup_printf(_("Sorry\nI can not read geometry in %s file "),NomFichier); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } j=-1; fseek(fd, geomposok, SEEK_SET); while(!feof(fd) ) { if(!fgets(t,taille,fd))break; if (atoi(t)<1) { geomposok = ftell(fd); get_charges_from_qchem_output_file(fd,j+1); fseek(fd, geomposok, SEEK_SET); get_dipole_from_qchem_output_file(fd); break; } j++; if(GeomXYZ==NULL) GeomXYZ=g_malloc(sizeof(GeomXYZAtomDef)); else GeomXYZ=g_realloc(GeomXYZ,(j+1)*sizeof(GeomXYZAtomDef)); GeomXYZ[j].typeConnections = NULL; sscanf(t,"%d %s %s %s %s",&idummy,AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3]); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if(isdigit(AtomCoord[0][1]))l=1; if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); if(l==1)sprintf(t,"%c",AtomCoord[0][0]); else sprintf(t,"%c%c",AtomCoord[0][0],AtomCoord[0][1]); GeomXYZ[j].Nentry=NUMBER_LIST_XYZ; GeomXYZ[j].Symb=g_strdup(t); GeomXYZ[j].mmType=g_strdup(GeomXYZ[j].Symb); GeomXYZ[j].pdbType=g_strdup(GeomXYZ[j].Symb); GeomXYZ[j].Residue=g_strdup(GeomXYZ[j].Symb); GeomXYZ[j].ResidueNumber=0; if(Units == 0 ) { GeomXYZ[j].X=g_strdup(ang_to_bohr(AtomCoord[1])); GeomXYZ[j].Y=g_strdup(ang_to_bohr(AtomCoord[2])); GeomXYZ[j].Z=g_strdup(ang_to_bohr(AtomCoord[3])); } else { GeomXYZ[j].X=g_strdup(AtomCoord[1]); GeomXYZ[j].Y=g_strdup(AtomCoord[2]); GeomXYZ[j].Z=g_strdup(AtomCoord[3]); } GeomXYZ[j].Charge=g_strdup("0.0"); GeomXYZ[j].Layer=g_strdup(" "); } NcentersXYZ = j+1; fclose(fd); calculMMTypes(FALSE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(GeomIsOpen && MethodeGeom == GEOM_IS_XYZ) { clearList(list); append_list(); } MethodeGeom = GEOM_IS_XYZ; if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS && GeomIsOpen) set_spin_of_electrons(); } /********************************************************************************/ void get_charges_from_nwchem_output_file(FILE* fd,gint N) { guint taille=BSIZE; gchar t[BSIZE]; gchar d3[BSIZE]; gchar d4[BSIZE]; gchar d[BSIZE]; gchar* pdest; gint i; for(i=0;i0) { fseek(fd, 0, SEEK_SET); get_charge_and_multiplicity_from_mopac_output_file(fd); } fclose(fd); calculMMTypes(FALSE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(GeomIsOpen && MethodeGeom == GEOM_IS_XYZ) { clearList(list); append_list(); } MethodeGeom = GEOM_IS_XYZ; if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS && GeomIsOpen) set_spin_of_electrons(); } /********************************************************************************/ void read_XYZ_from_mopac_irc_output_file(gchar *FileName, gint numGeom) { gchar *t; gboolean OK; gchar *AtomCoord[10]; FILE *fd; guint taille=BSIZE; guint i,l; GeomXYZAtomDef* GeomXYZtemp=NULL; gint Ncent = 0; gint Nvar = 0; VariablesXYZDef* VariablesXYZtemp=NULL; gchar symb[20]; gchar type[20]; gchar charge[20]; gint k1; gint j; for(i=0;i<10;i++) AtomCoord[i]=g_malloc(taille*sizeof(gchar)); fd = FOpen(FileName, "rb"); if(fd == NULL) { t = g_strdup_printf(_("Sorry\n I can not open \"%s\" file"),FileName); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } t=g_malloc(taille); OK = TRUE; i = 0; while(!feof(fd) ) { if(!fgets(t, taille, fd))break; if( strstr(t,"POTENTIAL") && strstr(t,"LOST") && strstr(t,"TOTAL") ) { i++; if(i==numGeom)break; } } if(i==0) OK = FALSE; while(!feof(fd) && OK ) { if(!fgets(t, taille, fd))OK = FALSE; if( strstr(t,"ATOM")&& strstr(t,"X")&& strstr(t,"Y")&& strstr(t,"Z")) break; } if(!OK) { g_free(t); t = g_strdup_printf(_("Sorry\n I can not read geometry from \"%s\" file"),FileName); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } Ncent=0; GeomXYZtemp = NULL; j=0; while(!feof(fd) ) { if(!fgets(t,taille,fd))break; if(this_is_a_backspace(t)) break; i = sscanf(t,"%d %s %s %s %s", &k1,AtomCoord[0], AtomCoord[1],AtomCoord[2],AtomCoord[3]); if(i==0) break; if( i== 5) { Ncent = j+1; GeomXYZtemp=g_realloc(GeomXYZtemp,Ncent*sizeof(GeomXYZAtomDef)); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l>=2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZtemp[j].Nentry=NUMBER_LIST_XYZ; get_symb_type_charge(AtomCoord[0],symb,type,charge); { gint k; for(k=0;k<(gint)strlen(symb);k++) if(isdigit(symb[k])) symb[k] = ' '; delete_all_spaces(symb); } GeomXYZtemp[j].Symb=g_strdup(symb); GeomXYZtemp[j].mmType=g_strdup(type); GeomXYZtemp[j].pdbType=g_strdup(type); GeomXYZtemp[j].Charge=g_strdup(charge); GeomXYZtemp[j].Residue=g_strdup("DUM"); GeomXYZtemp[j].ResidueNumber=0; GeomXYZtemp[j].X=g_strdup(AtomCoord[1]); GeomXYZtemp[j].Y=g_strdup(AtomCoord[2]); GeomXYZtemp[j].Z=g_strdup(AtomCoord[3]); GeomXYZtemp[j].Layer=g_strdup(" "); GeomXYZtemp[j].typeConnections = NULL; j++; } } fseek(fd, 0L, SEEK_SET); if(j==0) OK = FALSE; else get_charge_and_multiplicity_from_mopac_output_file(fd); fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if( !OK || Ncent <1 ) { FreeGeomXYZ(GeomXYZtemp,VariablesXYZtemp,Ncent, Nvar); MessageGeom(_("Sorry\n I can not read geometry in Mopac input file"),_("Error"),TRUE); return; } if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(); GeomXYZ = GeomXYZtemp; NcentersXYZ = Ncent; NVariablesXYZ = Nvar; VariablesXYZ = VariablesXYZtemp; MethodeGeom = GEOM_IS_XYZ; calculMMTypes(FALSE); if( Units== 0 ) GeomXYZ_Change_Unit(FALSE); if(GeomIsOpen) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); if(GeomDrawingArea != NULL) rafresh_drawing(); set_last_directory(FileName); } /********************************************************************************/ void read_geom_from_mopac_irc_output_file(gchar *FileName, gint numGeom) { if(zmat_mopac_irc_output_file(FileName)) { read_Zmat_from_mopac_irc_output_file(FileName, numGeom); } else read_XYZ_from_mopac_irc_output_file(FileName, numGeom); } /********************************************************************************/ void read_XYZ_from_mopac_scan_output_file(gchar *FileName, gint numGeom) { gchar *t; gboolean OK; gchar *AtomCoord[10]; FILE *fd; guint taille=BSIZE; guint i,l; GeomXYZAtomDef* GeomXYZtemp=NULL; gint Ncent = 0; gint Nvar = 0; VariablesXYZDef* VariablesXYZtemp=NULL; gchar symb[20]; gchar type[20]; gchar charge[20]; gint k1,k2,k3; gint j; for(i=0;i<10;i++) AtomCoord[i]=g_malloc(taille*sizeof(gchar)); fd = FOpen(FileName, "rb"); if(fd == NULL) { t = g_strdup_printf(_("Sorry\n I can not open \"%s\" file"),FileName); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } t=g_malloc(taille); OK = TRUE; i = 0; while(!feof(fd) ) { if(!fgets(t, taille, fd))break; if( strstr(t,"VARIABLE") && strstr(t,"FUNCTION") ) { i++; if(i==numGeom)break; } } if(i==0) OK = FALSE; if(OK && !fgets(t, taille, fd))OK = FALSE; /* Values */ while(!feof(fd) && OK ) { if(!fgets(t, taille, fd))OK = FALSE; if(t[0] != '*') break; /* Keywords */ } if(!fgets(t,taille,fd)) OK = FALSE; if(!fgets(t,taille,fd)) OK = FALSE; if(!OK) { g_free(t); t = g_strdup_printf(_("Sorry\n I can not read geometry from \"%s\" file"),FileName); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } Ncent=0; GeomXYZtemp = NULL; j=0; while(!feof(fd) ) { if(!fgets(t,taille,fd))break; if(this_is_a_backspace(t)) break; i = sscanf(t,"%s %s %d %s %d %s %d", AtomCoord[0],AtomCoord[1],&k1,AtomCoord[2],&k2,AtomCoord[3],&k3); if(i==0) break; if( i== 7) { gint newVar = 0; Ncent = j+1; GeomXYZtemp=g_realloc(GeomXYZtemp,Ncent*sizeof(GeomXYZAtomDef)); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l>=2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZtemp[j].Nentry=NUMBER_LIST_XYZ; get_symb_type_charge(AtomCoord[0],symb,type,charge); { gint k; for(k=0;k<(gint)strlen(symb);k++) if(isdigit(symb[k])) symb[k] = ' '; delete_all_spaces(symb); } GeomXYZtemp[j].Symb=g_strdup(symb); GeomXYZtemp[j].mmType=g_strdup(type); GeomXYZtemp[j].pdbType=g_strdup(type); GeomXYZtemp[j].Charge=g_strdup(charge); GeomXYZtemp[j].Residue=g_strdup("DUM"); GeomXYZtemp[j].ResidueNumber=0; GeomXYZtemp[j].X=g_strdup(AtomCoord[1]); GeomXYZtemp[j].Y=g_strdup(AtomCoord[2]); GeomXYZtemp[j].Z=g_strdup(AtomCoord[3]); GeomXYZtemp[j].Layer=g_strdup(" "); GeomXYZtemp[j].typeConnections = NULL; if(k1==1) newVar++; if(k2==1) newVar++; if(k3==1) newVar++; if(newVar>0) { gint n = Nvar+newVar; if(n==1) VariablesXYZtemp = g_malloc(n*sizeof(VariablesXYZDef)); else VariablesXYZtemp = g_realloc(VariablesXYZtemp,n*sizeof(VariablesXYZDef)); } newVar = 0; if(k1==1) { newVar++; trans_coordXYZ_geom('X', GeomXYZtemp, j, VariablesXYZtemp, Nvar+newVar-1); } if(k2==1) { newVar++; trans_coordXYZ_geom('Y', GeomXYZtemp, j, VariablesXYZtemp, Nvar+newVar-1); } if(k3==1) { newVar++; trans_coordXYZ_geom('Z', GeomXYZtemp, j, VariablesXYZtemp, Nvar+newVar-1); } Nvar += newVar; j++; } } fseek(fd, 0L, SEEK_SET); if(j==0) OK = FALSE; else get_charge_and_multiplicity_from_mopac_output_file(fd); fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if( !OK || Ncent <1 ) { FreeGeomXYZ(GeomXYZtemp,VariablesXYZtemp,Ncent, Nvar); MessageGeom(_("Sorry\n I can not read geometry in Mopac input file"),_("Error"),TRUE); return; } if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(); GeomXYZ = GeomXYZtemp; NcentersXYZ = Ncent; NVariablesXYZ = Nvar; VariablesXYZ = VariablesXYZtemp; MethodeGeom = GEOM_IS_XYZ; calculMMTypes(FALSE); if( Units== 0 ) GeomXYZ_Change_Unit(FALSE); if(GeomIsOpen) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); if(GeomDrawingArea != NULL) rafresh_drawing(); set_last_directory(FileName); } /********************************************************************************/ void read_geom_from_mopac_scan_output_file(gchar *FileName, gint numGeom) { if(zmat_mopac_scan_output_file(FileName)) read_Zmat_from_mopac_scan_output_file(FileName, numGeom); else read_XYZ_from_mopac_scan_output_file(FileName, numGeom); } /********************************************************************************/ void get_charge_and_multiplicity_from_mopac_aux_file(FILE* fd) { guint taille=BSIZE; gchar t[BSIZE]; TotalCharges[0] = 0; SpinMultiplicities[0] =1; while(!feof(fd) ) { if(!fgets(t,taille,fd)) break; if ( strstr(t,"KEYWORDS=")) { if(strstr(t,"CHARGE=")) { gchar* p = strstr(t,"CHARGE=")+7; TotalCharges[0] = atoi(p); } if ( strstr(t,"SINGLET")) SpinMultiplicities[0] = 1; if ( strstr(t,"DOUBLET")) SpinMultiplicities[0] = 2; if ( strstr(t,"TRIPLET")) SpinMultiplicities[0] = 3; if ( strstr(t,"QUARTET")) SpinMultiplicities[0] = 4; if ( strstr(t,"QUINTET")) SpinMultiplicities[0] = 5; if ( strstr(t,"SEXTET")) SpinMultiplicities[0] = 6; } } } /********************************************************************************/ void get_charges_from_mopac_aux_file(FILE* fd,gint N) { gchar** elements = NULL; gint n; gint i; for(i=0;i0) { NcentersXYZ = j+1; compute_dipole_using_charges_of_xyz_geom(); } /* Only module of dipole is available in aux mopac file*/ } break; } if(j+1>nElements)break; j++; if(GeomXYZ==NULL) GeomXYZ=g_malloc(sizeof(GeomXYZAtomDef)); else GeomXYZ=g_realloc(GeomXYZ,(j+1)*sizeof(GeomXYZAtomDef)); GeomXYZ[j].typeConnections = NULL; sscanf(t,"%s %s %s",AtomCoord[1],AtomCoord[2],AtomCoord[3]); if(j0) { fseek(fd, geomposok, SEEK_SET); j += get_translation_vectors_from_mopac_aux_file(fd,j+1); fseek(fd, 0, SEEK_SET); get_charge_and_multiplicity_from_mopac_aux_file(fd); } fclose(fd); NcentersXYZ = j+1; calculMMTypes(FALSE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(GeomIsOpen && MethodeGeom == GEOM_IS_XYZ) { clearList(list); append_list(); } MethodeGeom = GEOM_IS_XYZ; if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS && GeomIsOpen) set_spin_of_electrons(); free_one_string_table(elements, nElements); } /********************************************************************************/ void get_charges_from_orca_output_file(FILE* fd,gint N) { guint taille=BSIZE; gchar t[BSIZE]; gchar dump[BSIZE]; gchar d[BSIZE]; gchar* pdest; gint i; for(i=0;i2) t3[2]='\0'; symbols[i]=g_strdup(t3); /* printf("symb =%s\n",symbols[i]);*/ } } /*printf("Ok end symbols\n");*/ OK = TRUE; for(i=0;i-1) { fseek(fd, latticeposok, SEEK_SET); /* printf("%ld %ld\n",geomposok,latticeposok);*/ j += get_translation_vectors_from_vasp_file(fd,j+1); } NcentersXYZ = j+1; fclose(fd); calculMMTypes(FALSE); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(GeomIsOpen && MethodeGeom == GEOM_IS_XYZ) { clearList(list); append_list(); } MethodeGeom = GEOM_IS_XYZ; if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS && GeomIsOpen) set_spin_of_electrons(); g_free(symbols); g_free(nntypes); } /********************************************************************************/ void read_first_vasp_file(GabeditFileChooser *SelecFile , gint response_id) { gchar *NomFichier; if(response_id != GTK_RESPONSE_OK) return; NomFichier = gabedit_file_chooser_get_current_file(SelecFile); if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } read_geom_from_vasp_file(NomFichier, 1); set_last_directory(NomFichier); } /********************************************************************************/ void read_last_vasp_file(GabeditFileChooser *SelecFile , gint response_id) { gchar *NomFichier; if(response_id != GTK_RESPONSE_OK) return; NomFichier = gabedit_file_chooser_get_current_file(SelecFile); if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } read_geom_from_vasp_file(NomFichier, -1); set_last_directory(NomFichier); } /********************************************************************************/ void read_first_molcas_file(GabeditFileChooser *SelecFile, gint response_id) { gchar t[BSIZE]; gchar *NomFichier; gboolean OK; gchar symb[100]; gchar x[100]; gchar y[100]; gchar z[100]; FILE *file; guint idummy; gint i; gint j=0; gint l; if(response_id != GTK_RESPONSE_OK) return; NomFichier = gabedit_file_chooser_get_current_file(SelecFile); if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } file = FOpen(NomFichier, "rb"); if(file ==NULL) { MessageGeom(_("Sorry\nI can not open this file"),_("Error"),TRUE); return; } OK=FALSE; while(!feof(file)) { { char* e = fgets(t,BSIZE,file);} if (strstr(t," Cartesian coordinates:")) { { char* e = fgets(t,BSIZE,file);} { char* e = fgets(t,BSIZE,file);} { char* e = fgets(t,BSIZE,file);} OK = TRUE; break; } } if(!OK) { MessageGeom(_("Sorry\nI can not read this file"),_("Error"),TRUE); return; } j=-1; while(!feof(file) ) { { char* e = fgets(t,BSIZE,file);} if (strstr(t,"-----------------------------------------")) { /* get_dipole_from_molcas_output_file(file); */ break; } j++; if(GeomXYZ==NULL)GeomXYZ=g_malloc(sizeof(GeomXYZAtomDef)); else GeomXYZ=g_realloc(GeomXYZ,(j+1)*sizeof(GeomXYZAtomDef)); GeomXYZ[j].typeConnections = NULL; sscanf(t,"%d %s %s %s %s",&idummy,symb,x,y,z); for(i=0;i<(gint)strlen(symb);i++) if(isdigit(symb[i])) symb[i] = ' '; delete_all_spaces(symb); symb[0]=toupper(symb[0]); l=strlen(symb); for(i=1;i")) { while(!feof(fd) && OK ) { if(!fgets(t,taille,fd)) { OK = FALSE; break; }; if(strstr(t,"unit")) if(strstr(t,"bohr")) unitAng=FALSE; if (strstr(t,"atoms") && strstr(t,"geometry")) break; } } break; } } if(OK) GeomXYZtemp=g_malloc(sizeof(GeomXYZAtomDef)); j=-1; while(!feof(fd) && OK ) { j++; { char* e = fgets(t,taille,fd);} if(this_is_a_backspace(t)) break; if(strstr(t,"}")) break; i = sscanf(t,"%s ",AtomCoord[0]); if(i != 1) { OK = FALSE; break; } for(i=0;i<(gint)strlen(t);i++) if(t[i]=='[' || t[i] ==']') t[i]=' '; i = sscanf(t,"%s %s %s %s",AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3]); if( i==4) { Ncent = j+1; GeomXYZtemp=g_realloc(GeomXYZtemp,Ncent*sizeof(GeomXYZAtomDef)); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZtemp[j].Nentry=NUMBER_LIST_XYZ; get_symb_type_charge(AtomCoord[0],symb,type,charge); GeomXYZtemp[j].Symb=g_strdup(symb); GeomXYZtemp[j].mmType=g_strdup(type); GeomXYZtemp[j].pdbType=g_strdup(type); GeomXYZtemp[j].Charge=g_strdup(charge); GeomXYZtemp[j].Residue=g_strdup("DUM"); GeomXYZtemp[j].ResidueNumber=0; GeomXYZtemp[j].X=g_strdup_printf("%f",atof(AtomCoord[1])); GeomXYZtemp[j].Y=g_strdup_printf("%f",atof(AtomCoord[2])); GeomXYZtemp[j].Z=g_strdup_printf("%f",atof(AtomCoord[3])); GeomXYZtemp[j].Layer=g_strdup(" "); GeomXYZtemp[j].typeConnections = NULL; } else OK = FALSE; } fclose(fd); } else OK = FALSE; g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if( !OK || Ncent <1 ) { FreeGeomXYZ(GeomXYZtemp,VariablesXYZtemp,Ncent, 0); MessageGeom(_("Sorry\n I can not read geometry from your Gamess input file"),_("Error"),TRUE); return; } if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(); GeomXYZ = GeomXYZtemp; NcentersXYZ = Ncent; NVariablesXYZ = 0; VariablesXYZ = VariablesXYZtemp; MethodeGeom = GEOM_IS_XYZ; calculMMTypes(FALSE); if( unitAng && Units== 0 ) GeomXYZ_Change_Unit(FALSE); else if( !unitAng && Units== 1 ) GeomXYZ_Change_Unit(TRUE); if(GeomIsOpen) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); if(GeomDrawingArea != NULL) rafresh_drawing(); set_last_directory(fileName); } /*************************************************************************************/ void read_XYZ_from_mpqc_input_file(gchar *fileName) { gchar *t; gboolean OK; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; gint i; gint j; gint l; GeomXYZAtomDef* GeomXYZtemp=NULL; gint Ncent = 0; VariablesXYZDef* VariablesXYZtemp=NULL; gchar symb[BSIZE]; gchar type[BSIZE]; gchar charge[BSIZE]; gboolean unitAng = TRUE; for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); t=g_malloc(taille); fd = FOpen(fileName, "rb"); OK=TRUE; if(fd!=NULL) { while(!feof(fd) && OK ) { if(!fgets(t,taille,fd)) { OK = FALSE; break; }; if(strstr(t,"molecule") && strstr(t,":")) { if(strstr(t,"<") && strstr(t,">")) { while(!feof(fd) && OK ) { if(!fgets(t,taille,fd)) { OK = FALSE; break; }; if(strstr(t,"unit")) if(strstr(t,"bohr")) unitAng=FALSE; if (strstr(t,"atoms") && strstr(t,"geometry")) break; } } break; } } if(OK) GeomXYZtemp=g_malloc(sizeof(GeomXYZAtomDef)); j=-1; while(!feof(fd) && OK ) { j++; { char* e = fgets(t,taille,fd);} if(this_is_a_backspace(t)) break; if(strstr(t,"}")) break; i = sscanf(t,"%s ",AtomCoord[0]); if(i != 1) { OK = FALSE; break; } for(i=0;i<(gint)strlen(t);i++) if(t[i]=='[' || t[i] ==']') t[i]=' '; i = sscanf(t,"%s %s %s %s",AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3]); if( i==4) { Ncent = j+1; GeomXYZtemp=g_realloc(GeomXYZtemp,Ncent*sizeof(GeomXYZAtomDef)); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZtemp[j].Nentry=NUMBER_LIST_XYZ; get_symb_type_charge(AtomCoord[0],symb,type,charge); GeomXYZtemp[j].Symb=g_strdup(symb); GeomXYZtemp[j].mmType=g_strdup(type); GeomXYZtemp[j].pdbType=g_strdup(type); GeomXYZtemp[j].Charge=g_strdup(charge); GeomXYZtemp[j].Residue=g_strdup("DUM"); GeomXYZtemp[j].ResidueNumber=0; GeomXYZtemp[j].X=g_strdup_printf("%f",atof(AtomCoord[1])); GeomXYZtemp[j].Y=g_strdup_printf("%f",atof(AtomCoord[2])); GeomXYZtemp[j].Z=g_strdup_printf("%f",atof(AtomCoord[3])); GeomXYZtemp[j].Layer=g_strdup(" "); GeomXYZtemp[j].typeConnections = NULL; } else OK = FALSE; } fclose(fd); } else OK = FALSE; g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if( !OK || Ncent <1 ) { FreeGeomXYZ(GeomXYZtemp,VariablesXYZtemp,Ncent, 0); MessageGeom(_("Sorry\n I can not read geometry from your MPQC input file"),_("Error"),TRUE); return; } if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(); GeomXYZ = GeomXYZtemp; NcentersXYZ = Ncent; NVariablesXYZ = 0; VariablesXYZ = VariablesXYZtemp; MethodeGeom = GEOM_IS_XYZ; calculMMTypes(FALSE); if( unitAng && Units== 0 ) GeomXYZ_Change_Unit(FALSE); else if( !unitAng && Units== 1 ) GeomXYZ_Change_Unit(TRUE); if(GeomIsOpen) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); if(GeomDrawingArea != NULL) rafresh_drawing(); set_last_directory(fileName); } /*************************************************************************************/ void read_XYZ_from_molpro_input_file(gchar *NomFichier, FilePosTypeGeom InfoFile ) { gchar *t; gchar *t1; gchar *t2; gchar *t3; gboolean OK; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; guint i; gint j; gint l; gint Kvar=0; gboolean Uvar=FALSE; GeomXYZAtomDef* GeomXYZtemp=NULL; gint Ncent = 0; gint Nvar = 0; VariablesXYZDef* VariablesXYZtemp=NULL; for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); t=g_malloc(taille); /* Read Geomery */ fd = FOpen(NomFichier, "rb"); OK=TRUE; if(fd!=NULL) { for(i=0;(gint)i=2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZtemp[j].Nentry=NUMBER_LIST_XYZ; get_symb_type_charge(AtomCoord[0],symb,type,charge); { gint k; for(k=0;k<(gint)strlen(symb);k++) if(isdigit(symb[k])) symb[k] = ' '; delete_all_spaces(symb); } GeomXYZtemp[j].Symb=g_strdup(symb); GeomXYZtemp[j].mmType=g_strdup(type); GeomXYZtemp[j].pdbType=g_strdup(type); GeomXYZtemp[j].Charge=g_strdup(charge); GeomXYZtemp[j].Residue=g_strdup("DUM"); GeomXYZtemp[j].ResidueNumber=0; if(!test(AtomCoord[1]) || !test(AtomCoord[2]) || !test(AtomCoord[3])) Uvar = TRUE; GeomXYZtemp[j].X=g_strdup(AtomCoord[1]); GeomXYZtemp[j].Y=g_strdup(AtomCoord[2]); GeomXYZtemp[j].Z=g_strdup(AtomCoord[3]); if(strstr(t,"Low")) GeomXYZtemp[j].Layer=g_strdup("Low"); else if(strstr(t,"Med")) GeomXYZtemp[j].Layer=g_strdup("Medium"); else GeomXYZtemp[j].Layer=g_strdup(" "); GeomXYZtemp[j].typeConnections = NULL; } else { OK = FALSE; } } /* Variables */ Nvar=0; while(!feof(fd) && Uvar && OK ) { if(!fgets(t,taille,fd))break; deleteFirstSpaces(t); if(t[0] == '#') continue; if(t[0] == '\n') continue; Nvar++; if(Nvar==1) VariablesXYZtemp = g_malloc(Nvar*sizeof(VariablesXYZDef)); else VariablesXYZtemp = g_realloc(VariablesXYZtemp,Nvar*sizeof(VariablesXYZDef)); i = sscanf(t,"%s %s",AtomCoord[0],AtomCoord[1]); //fprintf(stderr,"ilue=%d\n",i); if( i == 2) { for(j=0;j%s\n", t,AtomCoord[0]); if(!strcmp(t,AtomCoord[0])) { //fprintf(stderr,"Okkkkkkkkkkkkkkkkkkkkkkkkkk\n"); VariablesXYZtemp[Nvar-1].Name=g_strdup_printf("%s%s",AtomCoord[1],AtomCoord[0]); if(strstr(AtomCoord[1],"X") || strstr(AtomCoord[1],"x")) { VariablesXYZtemp[Nvar-1].Value= g_strdup_printf("%s",GeomXYZtemp[j].X); GeomXYZtemp[j].X=g_strdup(VariablesXYZtemp[Nvar-1].Name); } if(strstr(AtomCoord[1],"Y") || strstr(AtomCoord[1],"y")) { VariablesXYZtemp[Nvar-1].Value= g_strdup_printf("%s",GeomXYZtemp[j].Y); GeomXYZtemp[j].Y=g_strdup(VariablesXYZtemp[Nvar-1].Name); } if(strstr(AtomCoord[1],"Z") || strstr(AtomCoord[1],"z")) { VariablesXYZtemp[Nvar-1].Value= g_strdup_printf("%s",GeomXYZtemp[j].Z); GeomXYZtemp[j].Z=g_strdup(VariablesXYZtemp[Nvar-1].Name); } VariablesXYZtemp[Nvar-1].Used=TRUE; OK = TRUE; break; } } } else { Nvar--; VariablesXYZtemp = g_realloc(VariablesXYZtemp,Nvar*sizeof(VariablesXYZDef)); OK = FALSE; break; } } /* end while variables */ fclose(fd); } else OK = FALSE; g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if( !OK || Ncent <1 ) { FreeGeomXYZ(GeomXYZtemp,VariablesXYZtemp,Ncent, Nvar); MessageGeom(_("Sorry\n I can not read geometry in DeMon input file"),_("Error"),TRUE); return; } if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(); GeomXYZ = GeomXYZtemp; NcentersXYZ = Ncent; NVariablesXYZ = Nvar; VariablesXYZ = VariablesXYZtemp; MethodeGeom = GEOM_IS_XYZ; if( InfoFile.units== 1 && Units== 0 ) GeomXYZ_Change_Unit(FALSE); else if( InfoFile.units== 0 && Units== 1 ) GeomXYZ_Change_Unit(TRUE); if(GeomIsOpen) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); if(GeomDrawingArea != NULL) rafresh_drawing(); set_last_directory(NomFichier); } /*************************************************************************************/ void read_XYZ_from_gauss_input_file(gchar *NomFichier, FilePosTypeGeom InfoFile ) { gchar *t; gboolean OK; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; gint i; gint j; gint l; gboolean Uvar=FALSE; GeomXYZAtomDef* GeomXYZtemp=NULL; gint Ncent = 0; gint Nvar = 0; VariablesXYZDef* VariablesXYZtemp=NULL; gchar symb[BSIZE]; gchar type[BSIZE]; gchar charge[BSIZE]; for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(gchar)); t=g_malloc(taille*sizeof(gchar)); fd = FOpen(NomFichier, "rb"); OK=TRUE; if(fd!=NULL) { for(i=0;i=2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZtemp[j].Nentry=NUMBER_LIST_XYZ; get_symb_type_charge(AtomCoord[0],symb,type,charge); { gint k; for(k=0;k<(gint)strlen(symb);k++) if(isdigit(symb[k])) symb[k] = ' '; delete_all_spaces(symb); } GeomXYZtemp[j].Symb=g_strdup(symb); GeomXYZtemp[j].mmType=g_strdup(type); GeomXYZtemp[j].pdbType=g_strdup(type); GeomXYZtemp[j].Charge=g_strdup(charge); GeomXYZtemp[j].Residue=g_strdup("DUM"); GeomXYZtemp[j].ResidueNumber=0; if(!test(AtomCoord[1]) || !test(AtomCoord[2]) || !test(AtomCoord[3])) Uvar = TRUE; GeomXYZtemp[j].X=g_strdup(AtomCoord[1]); GeomXYZtemp[j].Y=g_strdup(AtomCoord[2]); GeomXYZtemp[j].Z=g_strdup(AtomCoord[3]); if(strstr(t,"Low")) GeomXYZtemp[j].Layer=g_strdup("Low"); else if(strstr(t,"Med")) GeomXYZtemp[j].Layer=g_strdup("Medium"); else GeomXYZtemp[j].Layer=g_strdup(" "); GeomXYZtemp[j].typeConnections = NULL; } else { OK = FALSE; } } /* Variables */ Nvar=0; while(!feof(fd) && Uvar && OK ) { { char* e = fgets(t,taille,fd);} OK=TRUE; for(i=0;i<(gint)strlen(t)-1;i++) if ( (int)t[i] != (int)' ' ) OK=FALSE; if(OK) { OK = TRUE; break; } else { Nvar++; if(Nvar==1) VariablesXYZtemp = g_malloc(Nvar*sizeof(VariablesXYZDef)); else VariablesXYZtemp = g_realloc(VariablesXYZtemp,Nvar*sizeof(VariablesXYZDef)); i = sscanf(t,"%s %s",AtomCoord[0],AtomCoord[1]); if( i == 2) { VariablesXYZtemp[Nvar-1].Name=g_strdup(AtomCoord[0]); VariablesXYZtemp[Nvar-1].Value=g_strdup(AtomCoord[1]); VariablesXYZtemp[Nvar-1].Used=TRUE; OK = TRUE; } else { Nvar--; VariablesXYZtemp = g_realloc(VariablesXYZtemp,Nvar*sizeof(VariablesXYZDef)); OK = FALSE; break; } } } /* end while variables */ fclose(fd); } else OK = FALSE; g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if( !OK || Ncent <1 ) { FreeGeomXYZ(GeomXYZtemp,VariablesXYZtemp,Ncent, Nvar); MessageGeom(_("Sorry\n I can not read geometry in Gaussian input file"),_("Error"),TRUE); return; } if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(); GeomXYZ = GeomXYZtemp; NcentersXYZ = Ncent; NVariablesXYZ = Nvar; VariablesXYZ = VariablesXYZtemp; MethodeGeom = GEOM_IS_XYZ; if( InfoFile.units== 1 && Units== 0 ) GeomXYZ_Change_Unit(FALSE); else if( InfoFile.units== 0 && Units== 1 ) GeomXYZ_Change_Unit(TRUE); if(GeomIsOpen) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); if(GeomDrawingArea != NULL) rafresh_drawing(); set_last_directory(NomFichier); } /*************************************************************************************/ void read_XYZ_from_nwchem_input_file(gchar *NomFichier) { gchar *t; gboolean OK; gboolean icharge; gchar *AtomCoord[5]; FILE *file; guint taille=BSIZE; gint i; gint j; gint l; gint k; gboolean Uvar=FALSE; GeomXYZAtomDef* GeomXYZtemp=NULL; gint Ncent = 0; gint Nvar = 0; VariablesXYZDef* VariablesXYZtemp=NULL; gchar symb[BSIZE]; gchar type[BSIZE]; gchar charge[BSIZE]; gint globalCharge, mult; file = FOpen(NomFichier, "rb"); OK=TRUE; if(file==NULL) { MessageGeom(_("Sorry\n I can not read geometry in NWChem input file"),_("Error"),TRUE); return; } t=g_malloc(taille*sizeof(gchar)); for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); while(!feof(file)) { if(!fgets(t,taille,file)) { OK = FALSE; break; } uppercase(t); if(strstr(t,"GEOMETRY")) { OK = TRUE; break; } } if(OK) GeomXYZtemp=g_malloc(sizeof(GeomXYZAtomDef)); j=-1; while(!feof(file) && OK ) { j++; if(!fgets(t,taille,file))break; uppercase(t); if(strstr(t,"ZMATRIX")) { g_free(GeomXYZtemp); MessageGeom(_("Sorry\n I can not zmatrix geometry from a NWChem input file"),_("Error"),TRUE); return; } if(strstr(t,"END")) break; if(strstr(t,"SYMMETRY")) { j--; continue;} for(i=0;i<(gint)strlen(t);i++) if(t[i] != ' ') break; if(i<=(gint)strlen(t) && t[i] == '*') break; for(k=0;k<(gint)strlen(t);k++) if(t[k]=='{' || t[k]=='}') t[k] = ' '; i = sscanf(t,"%s %s %s %s",AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3]); if(i== 4) { Ncent = j+1; GeomXYZtemp=g_realloc(GeomXYZtemp,Ncent*sizeof(GeomXYZAtomDef)); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l>=2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZtemp[j].Nentry=NUMBER_LIST_XYZ; get_symb_type_charge(AtomCoord[0],symb,type,charge); { gint k; for(k=0;k<(gint)strlen(symb);k++) if(isdigit(symb[k])) symb[k] = ' '; delete_all_spaces(symb); } GeomXYZtemp[j].Symb=g_strdup(symb); GeomXYZtemp[j].mmType=g_strdup(type); GeomXYZtemp[j].pdbType=g_strdup(type); GeomXYZtemp[j].Charge=g_strdup(charge); GeomXYZtemp[j].Residue=g_strdup("DUM"); GeomXYZtemp[j].ResidueNumber=0; if(!test(AtomCoord[1]) || !test(AtomCoord[2]) || !test(AtomCoord[3])) Uvar = TRUE; GeomXYZtemp[j].X=g_strdup(AtomCoord[1]); GeomXYZtemp[j].Y=g_strdup(AtomCoord[2]); GeomXYZtemp[j].Z=g_strdup(AtomCoord[3]); GeomXYZtemp[j].Layer=g_strdup(" "); GeomXYZtemp[j].typeConnections = NULL; } else OK = FALSE; } /* Variables */ Nvar=0; fseek(file, 0L, SEEK_SET); if(Uvar) { OK =FALSE; while(!feof(file) && Uvar) { if(!fgets(t,taille,file)) break; uppercase(t); if(strstr(t,"VARIABLE")) { OK = TRUE; break; } } } while(!feof(file) && Uvar && OK ) { uppercase(t); for(k=0;k<(gint)strlen(t);k++) if(t[k]=='=') t[k] = ' '; for(j=0;j5 && strstr(t,"MULT") && sscanf(strstr(t,"MULT")+4,"%d",&k) && k>0 ) mult=k; if(strlen(t)>6 && strstr(t,"NOPEN") && sscanf(strstr(t,"NOOPEN")+5,"%d",&k) && k>0 ) mult=2*k; if(mult>0 && icharge) break; } fclose(file); g_free(t); if(OK) { TotalCharges[0] = globalCharge; if(mult>0) SpinMultiplicities[0] = mult; else reset_spin_of_electrons(); } for(i=0;i<5;i++) g_free(AtomCoord[i]); if( !OK || Ncent <1 ) { FreeGeomXYZ(GeomXYZtemp,VariablesXYZtemp,Ncent, Nvar); MessageGeom(_("Sorry\n I can not read geometry in NWChem input file"),_("Error"),TRUE); return; } if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(); GeomXYZ = GeomXYZtemp; NcentersXYZ = Ncent; NVariablesXYZ = Nvar; VariablesXYZ = VariablesXYZtemp; MethodeGeom = GEOM_IS_XYZ; calculMMTypes(FALSE); if( Units== 0 ) GeomXYZ_Change_Unit(FALSE); if(GeomIsOpen) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); if(GeomDrawingArea != NULL) rafresh_drawing(); set_last_directory(NomFichier); } /*************************************************************************************/ void read_XYZ_from_psicode_input_file(gchar *NomFichier) { gchar *t; gboolean OK; gboolean icharge; gchar *AtomCoord[5]; FILE *file; guint taille=BSIZE; gint i; gint j; gint l; gint k; gboolean Uvar=FALSE; GeomXYZAtomDef* GeomXYZtemp=NULL; gint Ncent = 0; gint Nvar = 0; VariablesXYZDef* VariablesXYZtemp=NULL; gchar symb[BSIZE]; gchar type[BSIZE]; gchar charge[BSIZE]; gint globalCharge, mult; /* printf("Coucou\n");*/ file = FOpen(NomFichier, "rb"); OK=TRUE; if(file==NULL) { gchar* buffer = g_strdup_printf(_("Sorry\n I can not read geometry in Psicode input file %s"), NomFichier); MessageGeom(buffer,_("Error"),TRUE); g_free(buffer); return; } t=g_malloc(taille*sizeof(gchar)); for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); while(!feof(file)) { if(!fgets(t,taille,file)) { OK = FALSE; break; } uppercase(t); /*printf("t=%s\n", t);*/ if(strstr(t,"MOLECULE")) { OK = TRUE; break; } } if(fgets(t,taille,file) && 2==sscanf(t,"%d %d",&globalCharge,&mult)) OK = TRUE; else OK = FALSE; /*printf("charge = %d mult = %d\n", globalCharge, mult);*/ if(OK) GeomXYZtemp=g_malloc(sizeof(GeomXYZAtomDef)); j=-1; while(!feof(file) && OK ) { j++; if(!fgets(t,taille,file))break; uppercase(t); if(strstr(t,"SYMMETRY")) continue; if(strstr(t,"ZMATRIX")) { g_free(GeomXYZtemp); MessageGeom(_("Sorry\n I can not zmatrix geometry from a Psicode input file"),_("Error"),TRUE); return; } if(strstr(t,"}")) break; if(this_is_a_backspace(t)) break; for(i=0;i<(gint)strlen(t);i++) if(t[i] != ' ' && t[i]!= '\t') break; if(i<=(gint)strlen(t) && t[i] == '#') continue; i = sscanf(t,"%s %s %s %s",AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3]); /* printf("t=%s\n", t);*/ if(i== 4) { Ncent = j+1; GeomXYZtemp=g_realloc(GeomXYZtemp,Ncent*sizeof(GeomXYZAtomDef)); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l>=2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZtemp[j].Nentry=NUMBER_LIST_XYZ; get_symb_type_charge(AtomCoord[0],symb,type,charge); { gint k; for(k=0;k<(gint)strlen(symb);k++) if(isdigit(symb[k])) symb[k] = ' '; delete_all_spaces(symb); } GeomXYZtemp[j].Symb=g_strdup(symb); GeomXYZtemp[j].mmType=g_strdup(type); GeomXYZtemp[j].pdbType=g_strdup(type); GeomXYZtemp[j].Charge=g_strdup(charge); GeomXYZtemp[j].Residue=g_strdup("DUM"); GeomXYZtemp[j].ResidueNumber=0; if(!test(AtomCoord[1]) || !test(AtomCoord[2]) || !test(AtomCoord[3])) Uvar = TRUE; GeomXYZtemp[j].X=g_strdup(AtomCoord[1]); GeomXYZtemp[j].Y=g_strdup(AtomCoord[2]); GeomXYZtemp[j].Z=g_strdup(AtomCoord[3]); GeomXYZtemp[j].Layer=g_strdup(" "); GeomXYZtemp[j].typeConnections = NULL; } else OK = FALSE; } /* Variables */ Nvar=0; while(!feof(file) && Uvar && OK ) { uppercase(t); for(k=0;k<(gint)strlen(t);k++) if(t[k]=='=') t[k] = ' '; for(j=0;j=2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); if(!strcmp(AtomCoord[0],"Da")) sprintf(AtomCoord[0],"X"); GeomXYZtemp[j].Nentry=NUMBER_LIST_XYZ; get_symb_type_charge(AtomCoord[0],symb,type,charge); { gint k; for(k=0;k<(gint)strlen(symb);k++) if(isdigit(symb[k])) symb[k] = ' '; delete_all_spaces(symb); } GeomXYZtemp[j].Symb=g_strdup(symb); GeomXYZtemp[j].mmType=g_strdup(type); GeomXYZtemp[j].pdbType=g_strdup(type); GeomXYZtemp[j].Charge=g_strdup(charge); GeomXYZtemp[j].Residue=g_strdup("DUM"); GeomXYZtemp[j].ResidueNumber=0; if(!test(AtomCoord[1]) || !test(AtomCoord[2]) || !test(AtomCoord[3])) Uvar = TRUE; GeomXYZtemp[j].X=g_strdup(AtomCoord[1]); GeomXYZtemp[j].Y=g_strdup(AtomCoord[2]); GeomXYZtemp[j].Z=g_strdup(AtomCoord[3]); GeomXYZtemp[j].Layer=g_strdup(" "); GeomXYZtemp[j].typeConnections = NULL; } else OK = FALSE; } /* Variables */ Nvar=0; fseek(file, 0L, SEEK_SET); if(Uvar) { OK =FALSE; while(!feof(file) && Uvar) { if(!fgets(t,taille,file)) break; uppercase(t); if(strstr(t,"PARAS")) { OK = TRUE; break; } } } while(!feof(file) && Uvar && OK ) { uppercase(t); for(k=0;k<(gint)strlen(t);k++) if(t[k]=='=') t[k] = ' '; for(j=0;j=2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZtemp[j].Nentry=NUMBER_LIST_XYZ; get_symb_type_charge(AtomCoord[0],symb,type,charge); { gint k; for(k=0;k<(gint)strlen(symb);k++) if(isdigit(symb[k])) symb[k] = ' '; delete_all_spaces(symb); } GeomXYZtemp[j].Symb=g_strdup(symb); GeomXYZtemp[j].mmType=g_strdup(type); GeomXYZtemp[j].pdbType=g_strdup(type); GeomXYZtemp[j].Charge=g_strdup(charge); GeomXYZtemp[j].Residue=g_strdup("DUM"); GeomXYZtemp[j].ResidueNumber=0; if(!test(AtomCoord[1]) || !test(AtomCoord[2]) || !test(AtomCoord[3])) Uvar = TRUE; GeomXYZtemp[j].X=g_strdup(AtomCoord[1]); GeomXYZtemp[j].Y=g_strdup(AtomCoord[2]); GeomXYZtemp[j].Z=g_strdup(AtomCoord[3]); GeomXYZtemp[j].Layer=g_strdup(" "); GeomXYZtemp[j].typeConnections = NULL; } else { OK = FALSE; } } /* Variables */ Nvar=0; while(!feof(fd) && Uvar && OK ) { { char* e = fgets(t,taille,fd);} OK=TRUE; for(i=0;i<(gint)strlen(t)-1;i++) if ( (int)t[i] != (int)' ' ) OK=FALSE; if(OK || strstr(t,"$")) { OK = TRUE; /* sortie normale*/ break; } else { Nvar++; if(Nvar==1) VariablesXYZtemp = g_malloc(Nvar*sizeof(VariablesXYZDef)); else VariablesXYZtemp = g_realloc(VariablesXYZtemp,Nvar*sizeof(VariablesXYZDef)); i = sscanf(t,"%s %s",AtomCoord[0],AtomCoord[1]); if( i == 2) { VariablesXYZtemp[Nvar-1].Name=g_strdup(AtomCoord[0]); VariablesXYZtemp[Nvar-1].Value=g_strdup(AtomCoord[1]); VariablesXYZtemp[Nvar-1].Used=TRUE; OK = TRUE; } else { Nvar--; VariablesXYZtemp = g_realloc(VariablesXYZtemp,Nvar*sizeof(VariablesXYZDef)); OK = FALSE; break; } } } /* end while variables */ fclose(fd); } else OK = FALSE; g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if( !OK || Ncent <1 ) { FreeGeomXYZ(GeomXYZtemp,VariablesXYZtemp,Ncent, Nvar); MessageGeom(_("Sorry\n I can not read geometry in QChem input file"),_("Error"),TRUE); return; } if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(); GeomXYZ = GeomXYZtemp; NcentersXYZ = Ncent; NVariablesXYZ = Nvar; VariablesXYZ = VariablesXYZtemp; MethodeGeom = GEOM_IS_XYZ; calculMMTypes(FALSE); if( Units== 0 ) GeomXYZ_Change_Unit(FALSE); if(GeomIsOpen) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); if(GeomDrawingArea != NULL) rafresh_drawing(); set_last_directory(NomFichier); } /********************************************************************************/ static void trans_coordXYZ_geom(gchar T, GeomXYZAtomDef* myGeomXYZ, gint i, VariablesXYZDef* myVariablesXYZ, gint iv) { gdouble V; gchar *NameV; gchar *ValueV; V = atof(myGeomXYZ[i].X); if( T == 'Y' ) V = atof(myGeomXYZ[i].Y); if( T == 'Z' ) V = atof(myGeomXYZ[i].Z); NameV = g_strdup_printf("%c%s%d",T,myGeomXYZ[i].Symb,i+1); ValueV = g_strdup_printf("%f",V); if( T == 'X' ) { g_free(myGeomXYZ[i].X); myGeomXYZ[i].X=g_strdup(NameV);} if( T == 'Y' ) { g_free(myGeomXYZ[i].Y); myGeomXYZ[i].Y=g_strdup(NameV);} if( T == 'Z' ) { g_free(myGeomXYZ[i].Z); myGeomXYZ[i].Z=g_strdup(NameV);} myVariablesXYZ[iv].Name = g_strdup(NameV); myVariablesXYZ[iv].Value = g_strdup(ValueV); } /********************************************************************************/ static void get_charge_and_multiplicity_from_mopac_input_file(FILE* fd) { guint taille=BSIZE; gchar t[BSIZE]; gint i; TotalCharges[0] = 0; SpinMultiplicities[0] =1; fseek(fd, 0L, SEEK_SET); while(!feof(fd) ) { if(!fgets(t, taille, fd)) return; if(t[0] !='*') break; } for(i=0;i<2;i++) { uppercase(t); if ( strstr(t,"CHARGE") && strstr(t,"=")) { gchar* p = strstr(t,"=")+1; TotalCharges[0] = atoi(p); } if ( strstr(t,"SINGLET")) SpinMultiplicities[0] = 1; if ( strstr(t,"DOUBLET")) SpinMultiplicities[0] = 2; if ( strstr(t,"TRIPLET")) SpinMultiplicities[0] = 3; if ( strstr(t,"QUARTET")) SpinMultiplicities[0] = 4; if ( strstr(t,"QUINTET")) SpinMultiplicities[0] = 5; if ( strstr(t,"SEXTET")) SpinMultiplicities[0] = 6; if(!fgets(t,taille,fd)) break; } } /*************************************************************************************/ void read_XYZ_from_mopac_input_file(gchar *NomFichier) { gchar *t; gboolean OK; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; gint i; gint j; gint l; /*gboolean Uvar=FALSE;*/ GeomXYZAtomDef* GeomXYZtemp=NULL; gint Ncent = 0; gint Nvar = 0; VariablesXYZDef* VariablesXYZtemp=NULL; gchar symb[BSIZE]; gchar type[BSIZE]; gchar charge[BSIZE]; gint k1,k2,k3; for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(gchar)); t=g_malloc(taille); fd = FOpen(NomFichier, "rb"); OK=TRUE; j = -1; if(fd!=NULL) { while(!feof(fd) ) { if(!fgets(t, taille, fd)) {OK = FALSE; break;} if(t[0] !='*') break; } if(!fgets(t, taille, fd)) OK = FALSE; if(!fgets(t, taille, fd)) OK = FALSE; if(OK) GeomXYZtemp=g_malloc(sizeof(GeomXYZAtomDef)); j=-1; while(!feof(fd) && OK ) { j++; if(!fgets(t,taille,fd)) break; if(this_is_a_backspace(t)) break; if(t[0] == '0') break; for(i=0;i<(gint)strlen(t);i++) if(t[i] != ' ') break; if(i == (gint)strlen(t)-1) break; i = sscanf(t,"%s ",AtomCoord[0]); if(i != 1) { OK = FALSE; break; } i = sscanf(t,"%s %s %d %s %d %s %d", AtomCoord[0], AtomCoord[1],&k1,AtomCoord[2],&k2,AtomCoord[3],&k3); if( i== 7) { gint newVar = 0; Ncent = j+1; GeomXYZtemp=g_realloc(GeomXYZtemp,Ncent*sizeof(GeomXYZAtomDef)); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l>=2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZtemp[j].Nentry=NUMBER_LIST_XYZ; get_symb_type_charge(AtomCoord[0],symb,type,charge); { gint k; for(k=0;k<(gint)strlen(symb);k++) if(isdigit(symb[k])) symb[k] = ' '; delete_all_spaces(symb); } GeomXYZtemp[j].Symb=g_strdup(symb); GeomXYZtemp[j].mmType=g_strdup(type); GeomXYZtemp[j].pdbType=g_strdup(type); GeomXYZtemp[j].Charge=g_strdup(charge); GeomXYZtemp[j].Residue=g_strdup("DUM"); GeomXYZtemp[j].ResidueNumber=0; GeomXYZtemp[j].X=g_strdup(AtomCoord[1]); GeomXYZtemp[j].Y=g_strdup(AtomCoord[2]); GeomXYZtemp[j].Z=g_strdup(AtomCoord[3]); GeomXYZtemp[j].Layer=g_strdup(" "); GeomXYZtemp[j].typeConnections = NULL; /* if(k1 ==1 || k2 == 1 || k3==1) Uvar = TRUE;*/ if(k1==1) newVar++; if(k2==1) newVar++; if(k3==1) newVar++; if(newVar>0) { gint n = Nvar+newVar; if(n==1) VariablesXYZtemp = g_malloc(n*sizeof(VariablesXYZDef)); else VariablesXYZtemp = g_realloc(VariablesXYZtemp,n*sizeof(VariablesXYZDef)); } newVar = 0; if(k1==1) { newVar++; trans_coordXYZ_geom('X', GeomXYZtemp, j, VariablesXYZtemp, Nvar+newVar-1); } if(k2==1) { newVar++; trans_coordXYZ_geom('Y', GeomXYZtemp, j, VariablesXYZtemp, Nvar+newVar-1); } if(k3==1) { newVar++; trans_coordXYZ_geom('Z', GeomXYZtemp, j, VariablesXYZtemp, Nvar+newVar-1); } Nvar += newVar; } else { OK = FALSE; } } } if(j<0) OK = FALSE; else get_charge_and_multiplicity_from_mopac_input_file(fd); fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if( !OK || Ncent <1 ) { FreeGeomXYZ(GeomXYZtemp,VariablesXYZtemp,Ncent, Nvar); MessageGeom(_("Sorry\n I can not read geometry in Mopac input file"),_("Error"),TRUE); return; } if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(); GeomXYZ = GeomXYZtemp; NcentersXYZ = Ncent; NVariablesXYZ = Nvar; VariablesXYZ = VariablesXYZtemp; MethodeGeom = GEOM_IS_XYZ; calculMMTypes(FALSE); if( Units== 0 ) GeomXYZ_Change_Unit(FALSE); if(GeomIsOpen) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); if(GeomDrawingArea != NULL) rafresh_drawing(); set_last_directory(NomFichier); } /*************************************************************************************/ static gint get_pdbtype_charge_from_tinker_amber_key_file( gchar* NomFichier, gchar***types, gchar***residues, gdouble**charges) { FILE *file; gint n = 0; gchar* tstr = NULL; gchar sdum0[100]; gchar sdum1[100]; gchar sdum2[100]; gchar sdum3[500]; gchar res[100]; gint idum; gint k; gchar** pdbTypes = NULL; gchar** residueNames = NULL; gdouble* chargesValue = NULL; gdouble ddum; gint i; gchar *fileNameKey = NULL; gchar *fileNameParameters = NULL; *charges = chargesValue; *types = pdbTypes; *residues = residueNames; fileNameKey = get_suffix_name_file(NomFichier); fileNameKey = g_strdup_printf("%s.key",fileNameKey); /* printf("Key file = %s\n", fileNameKey);*/ file = FOpen(fileNameKey, "rb"); if(fileNameKey) g_free(fileNameKey); if(file == NULL) return 0; tstr = g_malloc(BSIZE*sizeof(gchar)); sprintf(sdum1,"NO"); while(!feof(file)) { if(!fgets(tstr,BSIZE,file)) break; k = sscanf(tstr,"%s %s",sdum1,sdum3); if(k!=2) continue; if(!strstr(sdum1,"parameters")) continue; if(strstr(sdum3,".prm")) fileNameParameters = g_strdup(sdum3); else fileNameParameters = g_strdup_printf("%s.prm",sdum3); } fclose(file); /* printf("param file = %s\n", fileNameParameters);*/ if(!fileNameParameters) return 0; file = FOpen(fileNameParameters, "rb"); if(file == NULL) return 0; fseek(file, 0L, SEEK_SET); /* get the number of pdb type */ n = 0; while(!feof(file)) { if(!fgets(tstr,BSIZE,file)) break; k = sscanf(tstr,"%s %d %s %s",sdum1,&idum,sdum2,sdum3); if(k!=4) continue; if(idum<1) continue; if(!strstr(sdum1,"biotyp")) continue; n++; if(idum>n) n = idum; } if(n==0) { fclose(file); return 0; } pdbTypes = g_malloc(n*sizeof(gchar*)); residueNames = g_malloc(n*sizeof(gchar*)); chargesValue = g_malloc(n*sizeof(gdouble)); for(i=0;in) continue; i = idum-1; pdbTypes[i] = g_strdup(sdum2); sprintf(res,"UNK"); k = 0; for(i=0;i2)break; } if(strstr(sdum3,"C-Terminus"))sprintf(res,"NME"); else if(strstr(sdum3,"N-Terminus"))sprintf(res,"ACE"); else if(strstr(sdum3,"C-Terminal"))sprintf(res,"CTE"); else if(strstr(sdum3,"Adenosine"))sprintf(res,"DA"); else if(strstr(sdum3,"Guanosine"))sprintf(res,"DG"); else if(strstr(sdum3,"Cytidine"))sprintf(res,"DC"); else if(strstr(sdum3,"Uridine"))sprintf(res,"DU"); else if(strstr(sdum3,"Deoxyadenosine"))sprintf(res,"DA"); else if(strstr(sdum3,"Deoxyguanosine"))sprintf(res,"DG"); else if(strstr(sdum3,"Deoxycytidine"))sprintf(res,"DC"); else if(strstr(sdum3,"Deoxythymidine"))sprintf(res,"DT"); else if(strstr(sdum3,"5'") && strstr(sdum3,"RNA"))sprintf(res,"RG"); else if(strstr(sdum3,"3'") && strstr(sdum3,"RNA"))sprintf(res,"RG"); else if(strstr(sdum3,"5'") && strstr(sdum3,"DNA"))sprintf(res,"DT"); else if(strstr(sdum3,"3'") && strstr(sdum3,"DNA"))sprintf(res,"DT"); i = idum-1; residueNames[i] = g_strdup(res); } for(i=0;in) continue; i = idum-1; chargesValue[i] = ddum; } fclose(file); *charges = chargesValue; *types = pdbTypes; *residues = residueNames; /* for(i=0;iATOM"); OK=FALSE; } else { Type = NULL; OK=TRUE; } while(Type && !feof(fd)) { { char* e = fgets(t,taille,fd);} if(strstr(t,Type)) { OK = TRUE; break; } } if(!OK) { g_free(t); t = g_strdup_printf(_("Sorry\n \"%s\" is not at MOL2 format"),NomFichier); MessageGeom(t,_("Error"),TRUE); if(Type) g_free(Type); return; } if(!Type) { { char* e = fgets(t,taille,fd);} Nc=atoi(t); init_dipole(); if(Nc<1) { OK=FALSE; NcentersXYZ=0; t = g_strdup_printf(_("Sorry\n \"%s\" is not at Tinker format"),NomFichier); MessageGeom(t,_("Error"),TRUE); return; } npdb = get_pdbtype_charge_from_tinker_amber_key_file (NomFichier, &pdbTypes, &residueNames, &charges); } if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(); init_dipole(); GeomXYZ=g_malloc(sizeof(GeomXYZAtomDef)); j=0; GeomXYZ[j].typeConnections = NULL; while(!feof(fd) && OK ) { if(Nc>0 && j>Nc) break; if(!fgets(t,taille,fd)) break; if(atoi(t)<=0) break; GeomXYZ=g_realloc(GeomXYZ,(j+1)*sizeof(GeomXYZAtomDef)); if(type) { gchar rname[100]; gchar charge[100]; gint k; ipdb = 0; GeomXYZ[j].ResidueNumber=0; k = sscanf(t,"%d %s %s %s %s %s %d %s %s",&i,AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3],AtomCoord[4],&GeomXYZ[j].ResidueNumber, rname,charge); GeomXYZ[j].Residue=NULL; GeomXYZ[j].Charge=NULL; if(k>=8) GeomXYZ[j].Residue=g_strdup(rname); if(k>=9) GeomXYZ[j].Charge=g_strdup_printf("%f",atof(charge)); } else { sscanf(t,"%d %s %s %s %s %d",&i,AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3],&ipdb); GeomXYZ[j].ResidueNumber=0; } AtomCoord[0][0]=toupper(AtomCoord[0][0]); GeomXYZ[j].typeConnections = NULL; GeomXYZ[j].Nentry=NUMBER_LIST_XYZ; GeomXYZ[j].Symb= get_symb_atom(AtomCoord[0]); GeomXYZ[j].mmType=g_strdup(AtomCoord[0]); GeomXYZ[j].pdbType=g_strdup(AtomCoord[0]); if(ipdb>0 && npdb>0 && ipdbBOND")) { fseek(fd, 0L, SEEK_SET); while(!feof(fd)) { { char* e = fgets(t,taille,fd);} if(strstr(t,"BOND")) { OK = TRUE; break; } } } else OK = TRUE; if(OK) { for(i=0;i=NcentersXYZ || i<0) break; if(j>=NcentersXYZ || j<0) break; if(d<0) break; GeomXYZ[i].typeConnections[j] = d; GeomXYZ[j].typeConnections[i] = d; } } if(residueNames) g_free(residueNames); if(pdbTypes) g_free(pdbTypes); if(charges) g_free(charges); fclose(fd); g_free(t); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(GeomIsOpen) { create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); } else if(GeomDrawingArea == NULL) { /* switch(iprogram) { case PROG_IS_MOLPRO : insert_molpro(2); break; case PROG_IS_GAUSS : insert_gaussian(2); break; default : edit_geometry(); } */ create_window_drawing(); } if(GeomDrawingArea != NULL) rafresh_drawing(); } /*****************************************************************************/ static void get_position(guint i,gdouble Pos[]) { if(!test(GeomXYZ[i].X)) Pos[0] = get_value_variableXYZ(GeomXYZ[i].X); else Pos[0] = atof(GeomXYZ[i].X); if(!test(GeomXYZ[i].Y)) Pos[1] = get_value_variableXYZ(GeomXYZ[i].Y); else Pos[1] = atof(GeomXYZ[i].Y); if(!test(GeomXYZ[i].Z)) Pos[2] = get_value_variableXYZ(GeomXYZ[i].Z); else Pos[2] = atof(GeomXYZ[i].Z); } /*****************************************************************************/ static gboolean connected(guint i,guint j) { gdouble distance; gdouble dif[3]; gdouble Pos1[3]; gdouble Pos2[3]; guint k; SAtomsProp Prop; gdouble d; get_position(i,Pos1); get_position(j,Pos2); for (k=0;k<3;k++) dif[k] = Pos1[k] - Pos2[k]; distance = 0; for (k=0;k<3;k++) distance +=dif[k]*dif[k]; distance = sqrt(distance); Prop = prop_atom_get(GeomXYZ[i].Symb); d = Prop.covalentRadii; Prop = prop_atom_get(GeomXYZ[j].Symb); d += Prop.covalentRadii; if(Units == 1) d *= BOHR_TO_ANG; if(distance0) { gint k; for(j=0;jNcentersXYZ) break; if(j>NcentersXYZ) break; i--; j--; if(i<0) break; if(j<0) break; if(d<0) break; GeomXYZ[i].typeConnections[j] = d; GeomXYZ[j].typeConnections[i] = d; } } fclose(fd); g_free(t); calculMMTypes(FALSE); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(GeomIsOpen) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); else if(GeomDrawingArea == NULL) create_window_drawing(); if(GeomDrawingArea != NULL) rafresh_drawing(); } /********************************************************************************/ void read_XYZ_file_no_add_list(G_CONST_RETURN gchar *NomFichier) { gchar *t; gboolean OK; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; guint i; gint j; gint l; gint Nc; for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); t=g_malloc(taille); fd = FOpen(NomFichier, "rb"); OK=TRUE; if(fd!=NULL) { { char* e = fgets(t,taille,fd);} Nc=atoi(t); if(Nc<1) { OK=FALSE; MessageGeom(_("Sorry\n this is not a XYZ file"),_("Error"),TRUE); return; } if(OK) { init_dipole(); if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(); NcentersXYZ = Nc; GeomXYZ=g_malloc(NcentersXYZ*sizeof(GeomXYZAtomDef)); for(j=0;j=(gint)NcentersXYZ) break; if(!fgets(t,taille,fd)) { if(j-1 != (gint)NcentersXYZ) { NcentersXYZ = j -1; } break; }; sscanf(t,"%s %s %s %s",AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3]); delete_first_spaces(AtomCoord[0]); delete_last_spaces(AtomCoord[0]); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZ[j].Nentry=NUMBER_LIST_XYZ; GeomXYZ[j].Symb=g_strdup(AtomCoord[0]); GeomXYZ[j].mmType=g_strdup(AtomCoord[0]); GeomXYZ[j].pdbType=g_strdup(AtomCoord[0]); GeomXYZ[j].Residue=g_strdup(AtomCoord[0]); GeomXYZ[j].ResidueNumber=0; if(Units==1) { GeomXYZ[j].X=g_strdup(AtomCoord[1]); GeomXYZ[j].Y=g_strdup(AtomCoord[2]); GeomXYZ[j].Z=g_strdup(AtomCoord[3]); } else { GeomXYZ[j].X=g_strdup(ang_to_bohr(AtomCoord[1])); GeomXYZ[j].Y=g_strdup(ang_to_bohr(AtomCoord[2])); GeomXYZ[j].Z=g_strdup(ang_to_bohr(AtomCoord[3])); } GeomXYZ[j].Charge=g_strdup("0.0"); GeomXYZ[j].Layer=g_strdup(" "); } fclose(fd); } g_free(t); calculMMTypes(FALSE); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(GeomIsOpen) create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); else if(GeomDrawingArea == NULL) { /* switch(iprogram) { case PROG_IS_MOLPRO : insert_molpro(2); break; case PROG_IS_GAUSS : insert_gaussian(2); break; default : edit_geometry(); } */ create_window_drawing(); } if(GeomDrawingArea != NULL) rafresh_drawing(); } /*************************************************************************************/ void create_GeomXYZ_from_draw_grometry() { gint j; gint jj; gboolean toSort = FALSE; gint iHigh = -1; gint i; gint* numOrd = NULL; gdouble Orig[3]; gdouble X,Y,Z; if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(); get_origine_molecule_drawgeom(Orig); init_dipole(); NcentersXYZ = Natoms; /* if(Natoms<1) return; GeomXYZ=g_malloc(NcentersXYZ*sizeof(GeomXYZAtomDef)); */ if(Natoms>0) GeomXYZ=g_malloc(NcentersXYZ*sizeof(GeomXYZAtomDef)); if(Natoms>0) numOrd=g_malloc(NcentersXYZ*sizeof(GeomXYZAtomDef)); for(i=0;i<(gint)NcentersXYZ;i++) { numOrd[i] = i; for(j=0;j<(gint)NcentersXYZ;j++) if(geometry0[j].N-1==i) { numOrd[i] = j; break; } } copy_connections(geometry0, geometry, Natoms); for(j=0;j<(gint)NcentersXYZ;j++) { jj = numOrd[j]; GeomXYZ[j].Nentry=NUMBER_LIST_XYZ; GeomXYZ[j].Symb=g_strdup(geometry0[jj].Prop.symbol); GeomXYZ[j].mmType=g_strdup(geometry0[jj].mmType); GeomXYZ[j].pdbType=g_strdup(geometry0[jj].pdbType); GeomXYZ[j].Residue=g_strdup(geometry0[jj].Residue); GeomXYZ[j].ResidueNumber=geometry0[jj].ResidueNumber; GeomXYZ[j].typeConnections = g_malloc(NcentersXYZ*sizeof(gint)); for(i=0;i=0) { GeomXYZAtomDef t; gint i; gint j; gint k; gint* oldNum = NULL; gint* N = NULL; oldNum = g_malloc(NcentersXYZ*sizeof(gint)); for (i = 0; i <(gint)NcentersXYZ; i++) oldNum[i] = i; N = g_malloc(NcentersXYZ*sizeof(gint)); for (i = 0; i <(gint)NcentersXYZ; i++) N[i] = 0; /* sorting Hight, Medium, Low */ if(iHigh != 0) { t= GeomXYZ[0]; GeomXYZ[0] = GeomXYZ[iHigh]; GeomXYZ[iHigh] = t; j = oldNum[0]; oldNum[0]=oldNum[iHigh]; oldNum[iHigh]=j; } for (i = 0; i <(gint)NcentersXYZ-1; i++) { if(strcmp(GeomXYZ[i].Layer," ")==0) continue; k = i; for (j = i+1; j <(gint)NcentersXYZ; j++) if( strcmp(GeomXYZ[j].Layer," ")==0) {k = j; break;} if(k!=i) { t= GeomXYZ[i]; GeomXYZ[i] = GeomXYZ[k]; GeomXYZ[k] = t; j = oldNum[i]; oldNum[i]=oldNum[k]; oldNum[k]=j; } } for (i = 0; i <(gint)NcentersXYZ-1; i++) { if(strcmp(GeomXYZ[i].Layer," ")==0) continue; if(strcmp(GeomXYZ[i].Layer,"Medium")==0) continue; k = i; for (j = i+1; j <(gint)NcentersXYZ; j++) if( strcmp(GeomXYZ[j].Layer,"Medium")==0) {k = j; break;} if(k!=i) { t= GeomXYZ[i]; GeomXYZ[i] = GeomXYZ[k]; GeomXYZ[k] = t; j = oldNum[i]; oldNum[i]=oldNum[k]; oldNum[k]=j; } } for (i = 0; i <(gint)NcentersXYZ; i++) { if(!GeomXYZ[i].typeConnections) continue; for (j = 0; j <(gint)NcentersXYZ; j++) N[j] = GeomXYZ[i].typeConnections[j]; for (j = 0; j <(gint)NcentersXYZ; j++) GeomXYZ[i].typeConnections[j]=N[oldNum[j]]; } if(N) g_free(N); if(oldNum) g_free(oldNum); } MethodeGeom = GEOM_IS_XYZ; if(GeomIsOpen) { create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); if(toSort) unSelectAllAtoms(); } } /********************************************************************************/ void read_mol2_file(GabeditFileChooser *SelecFile , gint response_id) { gchar *NomFichier; gchar *projectname = NULL; gchar *datafile = NULL; gchar *localdir = NULL; gchar *remotehost = NULL; gchar *remoteuser = NULL; gchar *remotepass = NULL; gchar *remotedir = NULL; gchar *temp = NULL; if(response_id != GTK_RESPONSE_OK) return; NomFichier = gabedit_file_chooser_get_current_file(SelecFile); if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } read_mol2_tinker_file_no_add_list(NomFichier,"MOL2"); datafile = get_name_file(NomFichier); temp = get_suffix_name_file(NomFichier); projectname = get_name_file(temp); localdir = get_name_dir(temp); if(lastdirectory) g_free(lastdirectory); lastdirectory = g_strdup(localdir); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_MOL2],projectname,datafile,localdir,remotehost,remoteuser,remotepass,remotedir,GABEDIT_TYPENODE_MOL2, NULL, defaultNetWorkProtocol); g_free(temp); g_free(datafile); g_free(projectname); g_free(localdir); } /********************************************************************************/ void read_tinker_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *NomFichier; gchar *projectname = NULL; gchar *datafile = NULL; gchar *localdir = NULL; gchar *remotehost = NULL; gchar *remoteuser = NULL; gchar *remotepass = NULL; gchar *remotedir = NULL; gchar *temp = NULL; if(response_id != GTK_RESPONSE_OK) return; NomFichier = gabedit_file_chooser_get_current_file(SelecFile); if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } read_mol2_tinker_file_no_add_list(NomFichier,"TINKER"); datafile = get_name_file(NomFichier); temp = get_suffix_name_file(NomFichier); projectname = get_name_file(temp); localdir = get_name_dir(temp); if(lastdirectory) g_free(lastdirectory); lastdirectory = g_strdup(localdir); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_TINKER],projectname,datafile,localdir,remotehost,remoteuser,remotepass,remotedir,GABEDIT_TYPENODE_TINKER, NULL, defaultNetWorkProtocol); g_free(temp); g_free(datafile); g_free(projectname); g_free(localdir); } /********************************************************************************/ void read_pdb_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *NomFichier; gchar *projectname = NULL; gchar *datafile = NULL; gchar *localdir = NULL; gchar *remotehost = NULL; gchar *remoteuser = NULL; gchar *remotepass = NULL; gchar *remotedir = NULL; gchar *temp = NULL; if(response_id != GTK_RESPONSE_OK) return; NomFichier = gabedit_file_chooser_get_current_file(SelecFile); if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } read_pdb_file_no_add_list(NomFichier); datafile = get_name_file(NomFichier); temp = get_suffix_name_file(NomFichier); projectname = get_name_file(temp); localdir = get_name_dir(temp); if(lastdirectory) g_free(lastdirectory); lastdirectory = g_strdup(localdir); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_PDB],projectname,datafile,localdir,remotehost,remoteuser,remotepass,remotedir,GABEDIT_TYPENODE_PDB, NULL, defaultNetWorkProtocol); g_free(temp); g_free(datafile); g_free(projectname); g_free(localdir); } /********************************************************************************/ void read_mol_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *NomFichier; gchar *projectname = NULL; gchar *datafile = NULL; gchar *localdir = NULL; /* gchar *remotehost = NULL; gchar *remoteuser = NULL; gchar *remotepass = NULL; gchar *remotedir = NULL; */ gchar *temp = NULL; if(response_id != GTK_RESPONSE_OK) return; NomFichier = gabedit_file_chooser_get_current_file(SelecFile); if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } read_mol_file_no_add_list(NomFichier); datafile = get_name_file(NomFichier); temp = get_suffix_name_file(NomFichier); projectname = get_name_file(temp); localdir = get_name_dir(temp); if(lastdirectory) g_free(lastdirectory); lastdirectory = g_strdup(localdir); /* CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_XYZ],projectname,datafile,localdir,remotehost,remoteuser,remotepass,remotedir,GABEDIT_TYPENODE_XYZ, NULL, defaultNetWorkProtocol);*/ g_free(temp); g_free(datafile); g_free(projectname); g_free(localdir); } /********************************************************************************/ void read_XYZ_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *t; gchar *NomFichier; gboolean OK; gchar *AtomCoord[5]; FILE *fd; guint taille=BSIZE; guint i; gint j; gint l; gchar *projectname = NULL; gchar *datafile = NULL; gchar *localdir = NULL; gchar *remotehost = NULL; gchar *remoteuser = NULL; gchar *remotepass = NULL; gchar *remotedir = NULL; gchar *temp = NULL; if(response_id != GTK_RESPONSE_OK) return; for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); NomFichier = gabedit_file_chooser_get_current_file(SelecFile); if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) { MessageGeom(_("Sorry\n No file selected"),_("Error"),TRUE); return ; } t=g_malloc(taille); fd = FOpen(NomFichier, "rb"); OK=TRUE; if(fd!=NULL) { { char* e = fgets(t,taille,fd);} NcentersXYZ=atoi(t); if(NcentersXYZ<1) { OK=FALSE; NcentersXYZ=0; MessageGeom(_("Sorry\n this is not a XYZ file"),_("Error"),TRUE); return; } if(OK) { init_dipole(); GeomXYZ=g_malloc(NcentersXYZ*sizeof(GeomXYZAtomDef)); for(j=0;j=(gint)NcentersXYZ) break; if(!fgets(t,taille,fd)) { if(j-1 != (gint)NcentersXYZ) { NcentersXYZ = j -1; } break; }; delete_first_spaces(t); sscanf(t,"%s %s %s %s",AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3]); AtomCoord[0][0]=toupper(AtomCoord[0][0]); l=strlen(AtomCoord[0]); if (l==2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); GeomXYZ[j].Nentry=NUMBER_LIST_XYZ; GeomXYZ[j].Symb=g_strdup(AtomCoord[0]); GeomXYZ[j].mmType=g_strdup(AtomCoord[0]); GeomXYZ[j].pdbType=g_strdup(AtomCoord[0]); GeomXYZ[j].Residue=g_strdup(AtomCoord[0]); GeomXYZ[j].ResidueNumber=0; if(Units==1) { GeomXYZ[j].X=g_strdup(AtomCoord[1]); GeomXYZ[j].Y=g_strdup(AtomCoord[2]); GeomXYZ[j].Z=g_strdup(AtomCoord[3]); } else { GeomXYZ[j].X=g_strdup(ang_to_bohr(AtomCoord[1])); GeomXYZ[j].Y=g_strdup(ang_to_bohr(AtomCoord[2])); GeomXYZ[j].Z=g_strdup(ang_to_bohr(AtomCoord[3])); } GeomXYZ[j].Charge=g_strdup("0.0"); GeomXYZ[j].Layer=g_strdup(" "); } fclose(fd); } g_free(t); calculMMTypes(FALSE); for(i=0;i<5;i++) g_free(AtomCoord[i]); if(GeomIsOpen) append_list(); if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS) set_spin_of_electrons(); datafile = get_name_file(NomFichier); temp = get_suffix_name_file(NomFichier); projectname = get_name_file(temp); localdir = get_name_dir(temp); if(lastdirectory) g_free(lastdirectory); lastdirectory = g_strdup(localdir); CreeFeuille(treeViewProjects, noeud[GABEDIT_TYPENODE_XYZ],projectname,datafile,localdir,remotehost,remoteuser,remotepass,remotedir,GABEDIT_TYPENODE_XYZ, NULL, defaultNetWorkProtocol); g_free(temp); g_free(datafile); g_free(projectname); g_free(localdir); } /********************************************************************************/ void put_geomXYZ_in_list() { if(GeomXYZ != NULL ) append_list(); if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS) set_spin_of_electrons(); } /********************************************************************************/ void selc_XYZ_file(GabEditTypeFileGeom itype) { GtkWidget *SelecFile=NULL; gchar* patternsxyz[] = {"*.xyz","*",NULL}; gchar* patternsmol2[] = {"*.mol2","*",NULL}; gchar* patternspdb[] = {"*.pdb","*",NULL}; gchar* patternshin[] = {"*.hin","*",NULL}; gchar* patternsaimall[] = {"*.sum","*",NULL}; gchar* patternstnk[] = {"*.tnk","*",NULL}; gchar* patternslog[] = {"*.log","*",NULL}; gchar* patternsout[] = {"*.out","*.log","*",NULL}; gchar* patternsaux[] = {"*.aux","*",NULL}; gchar* patternsgab[] = {"*.gab","*",NULL}; gchar* patternsmol[] = {"*.mol","*",NULL}; gchar* patternsirc[] = {"*.irc","*",NULL}; gchar* patternsfchk[] = {"*.fchk","*",NULL}; gchar* patternsposcar[] = {"POS*","*",NULL}; gchar* patternsxml[] = {"*.xml","*",NULL}; gchar* patternsall[] = {"*",NULL}; switch(itype){ case GABEDIT_TYPEFILEGEOM_NEW : return; break; case GABEDIT_TYPEFILEGEOM_XYZ : SelecFile = gabedit_file_chooser_new(_("Read XYZ file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsxyz); break; case GABEDIT_TYPEFILEGEOM_MOL : SelecFile = gabedit_file_chooser_new(_("Read Mol file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsmol); break; case GABEDIT_TYPEFILEGEOM_DALTONFIRST : SelecFile = gabedit_file_chooser_new(_("Read the first geometry from a dalton output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_DALTONLAST : SelecFile = gabedit_file_chooser_new(_("Read the last geometry from a dalton output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_FIREFLYFIRST : case GABEDIT_TYPEFILEGEOM_GAMESSFIRST : SelecFile = gabedit_file_chooser_new(_("Read the first geometry from a Gamess output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternslog); break; case GABEDIT_TYPEFILEGEOM_FIREFLYLAST : case GABEDIT_TYPEFILEGEOM_GAMESSLAST : SelecFile = gabedit_file_chooser_new(_("Read the last geometry from a Gamess output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternslog); break; case GABEDIT_TYPEFILEGEOM_GAMESSIRC : SelecFile = gabedit_file_chooser_new(_("Read the last geometry from a Gamess IRC file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsirc); break; case GABEDIT_TYPEFILEGEOM_TURBOMOLEFIRST : case GABEDIT_TYPEFILEGEOM_TURBOMOLELAST : SelecFile = gabedit_file_chooser_new(_("Read the last geometry from a Turbomole output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_GAUSSOUTFIRST : SelecFile = gabedit_file_chooser_new(_("Read the first geometry from a gaussian output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternslog); break; case GABEDIT_TYPEFILEGEOM_GAUSSOUTLAST : SelecFile = gabedit_file_chooser_new(_("Read the last geometry from a gaussian output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternslog); break; case GABEDIT_TYPEFILEGEOM_GAUSSIAN_FCHK : SelecFile = gabedit_file_chooser_new(_("Read the geometry from a gaussian fchk file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsfchk); break; case GABEDIT_TYPEFILEGEOM_MOLCASOUTFIRST : SelecFile = gabedit_file_chooser_new(_("Read the first geometry from a molcas output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_MOLCASOUTLAST : SelecFile = gabedit_file_chooser_new(_("Read the last geometry from a molcas output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_MOLPROOUTFIRST : SelecFile = gabedit_file_chooser_new(_("Read the first geometry from a molpro output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_MOLPROOUTLAST : SelecFile = gabedit_file_chooser_new(_("Read the last geometry from a molpro output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_MOL2 : SelecFile = gabedit_file_chooser_new(_("Read MOL2 file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsmol2); break; case GABEDIT_TYPEFILEGEOM_MPQCOUTFIRST : SelecFile = gabedit_file_chooser_new(_("Read the first geometry from a MPQC output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_MPQCOUTLAST : SelecFile = gabedit_file_chooser_new(_("Read the last geometry from a MPQC output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_VASPXMLFIRST : SelecFile = gabedit_file_chooser_new(_("Read the first geometry from a VASP/xml file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsxml); break; case GABEDIT_TYPEFILEGEOM_VASPXMLLAST : SelecFile = gabedit_file_chooser_new(_("Read the last geometry from a VASP/xml file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsxml); break; case GABEDIT_TYPEFILEGEOM_ORCAOUTFIRST : SelecFile = gabedit_file_chooser_new(_("Read the first geometry from a ORCA output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_ORCAOUTLAST : SelecFile = gabedit_file_chooser_new(_("Read the last geometry from a ORCA output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_VASPOUTFIRST : SelecFile = gabedit_file_chooser_new(_("Read the first geometry from a VASP output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsall); break; case GABEDIT_TYPEFILEGEOM_VASPOUTLAST : SelecFile = gabedit_file_chooser_new(_("Read the last geometry from a VASP output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsall); break; case GABEDIT_TYPEFILEGEOM_NWCHEMOUTFIRST : SelecFile = gabedit_file_chooser_new(_("Read the first geometry from a NWCHEM output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_NWCHEMOUTLAST : SelecFile = gabedit_file_chooser_new(_("Read the last geometry from a NWCHEM output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_PSICODEOUTFIRST : SelecFile = gabedit_file_chooser_new(_("Read the first geometry from a Psicode output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_PSICODEOUTLAST : SelecFile = gabedit_file_chooser_new(_("Read the last geometry from a Psicode output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_QCHEMOUTFIRST : SelecFile = gabedit_file_chooser_new(_("Read the first geometry from a Q-Chem output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_QCHEMOUTLAST : SelecFile = gabedit_file_chooser_new(_("Read the last geometry from a Q-Chem output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_MOPACOUTFIRST : SelecFile = gabedit_file_chooser_new(_("Read the first geometry from a Mopac output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_MOPACOUTLAST : SelecFile = gabedit_file_chooser_new(_("Read the last geometry from a Mopac output file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_MOPACAUX : SelecFile = gabedit_file_chooser_new(_("Read the last geometry from a Mopac aux file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsaux); break; case GABEDIT_TYPEFILEGEOM_TINKER : SelecFile = gabedit_file_chooser_new(_("Read Tinker file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternstnk); break; case GABEDIT_TYPEFILEGEOM_PDB : SelecFile = gabedit_file_chooser_new(_("Read pdb file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternspdb); break; case GABEDIT_TYPEFILEGEOM_HIN : SelecFile = gabedit_file_chooser_new(_("Read hyperchem file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternshin); break; case GABEDIT_TYPEFILEGEOM_AIMALL : SelecFile = gabedit_file_chooser_new(_("Read AIMAll file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsaimall); break; case GABEDIT_TYPEFILEGEOM_GABEDIT : SelecFile = gabedit_file_chooser_new(_("Read Gabedit file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsgab); break; case GABEDIT_TYPEFILEGEOM_MOPACOUTSCAN : SelecFile = gabedit_file_chooser_new(_("Read geometries from a Mopac scan output"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsout); break; case GABEDIT_TYPEFILEGEOM_VASPPOSCAR : SelecFile = gabedit_file_chooser_new(_("Read geometries from a POSCAR/VASP file"), GTK_FILE_CHOOSER_ACTION_OPEN); gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(SelecFile),patternsposcar); break; case GABEDIT_TYPEFILEGEOM_MOLDEN : return; case GABEDIT_TYPEFILEGEOM_DALTONIN : return; case GABEDIT_TYPEFILEGEOM_FIREFLYIN : return; case GABEDIT_TYPEFILEGEOM_GAMESSIN : return; case GABEDIT_TYPEFILEGEOM_GAUSSIN : return; case GABEDIT_TYPEFILEGEOM_MOLCASIN : return; case GABEDIT_TYPEFILEGEOM_MOLPROIN : return; case GABEDIT_TYPEFILEGEOM_MPQCIN : return; case GABEDIT_TYPEFILEGEOM_ORCAIN : return; case GABEDIT_TYPEFILEGEOM_VASPIN : return; case GABEDIT_TYPEFILEGEOM_NWCHEMIN : return; case GABEDIT_TYPEFILEGEOM_QCHEMIN : return; case GABEDIT_TYPEFILEGEOM_MOPACIN : return; case GABEDIT_TYPEFILEGEOM_GAUSSIAN_ZMATRIX : return; case GABEDIT_TYPEFILEGEOM_MOPAC_ZMATRIX : return; case GABEDIT_TYPEFILEGEOM_UNKNOWN : return; case GABEDIT_TYPEFILEGEOM_PSICODEIN : return; } if(lastdirectory) { gchar* t = g_strdup_printf("%s%sdump.xyz",lastdirectory,G_DIR_SEPARATOR_S); gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(SelecFile),t); g_free(t); } gabedit_file_chooser_hide_hidden(GABEDIT_FILE_CHOOSER(SelecFile)); if(WindowGeom) gtk_window_set_transient_for(GTK_WINDOW(SelecFile),GTK_WINDOW(WindowGeom)); else gtk_window_set_transient_for(GTK_WINDOW(SelecFile),GTK_WINDOW(Fenetre)); gtk_window_set_modal (GTK_WINDOW (SelecFile), TRUE); switch(itype){ case GABEDIT_TYPEFILEGEOM_XYZ : g_signal_connect (SelecFile, "response", G_CALLBACK (read_XYZ_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_MOL : g_signal_connect (SelecFile, "response", G_CALLBACK (read_mol_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_DALTONFIRST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_first_dalton_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_DALTONLAST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_last_dalton_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_FIREFLYFIRST : case GABEDIT_TYPEFILEGEOM_GAMESSFIRST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_first_gamess_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_GAMESSLAST : case GABEDIT_TYPEFILEGEOM_FIREFLYLAST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_last_gamess_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_GAMESSIRC : g_signal_connect (SelecFile, "response", G_CALLBACK (read_last_irc_gamess_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_GAUSSOUTFIRST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_first_gaussian_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_GAUSSOUTLAST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_last_gaussian_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_TURBOMOLEFIRST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_first_turbomole_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_TURBOMOLELAST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_last_turbomole_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_GAUSSIAN_FCHK : g_signal_connect (SelecFile, "response", G_CALLBACK (read_fchk_gaussian_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_MOLCASOUTFIRST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_first_molcas_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_MOLCASOUTLAST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_last_molcas_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_MOLPROOUTFIRST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_first_molpro_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_MOLPROOUTLAST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_last_molpro_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_MPQCOUTFIRST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_first_mpqc_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_MPQCOUTLAST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_last_mpqc_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_VASPXMLFIRST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_first_vasp_xml_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_VASPXMLLAST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_last_vasp_xml_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_ORCAOUTFIRST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_first_orca_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_ORCAOUTLAST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_last_orca_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_VASPOUTFIRST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_first_vasp_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_VASPOUTLAST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_last_vasp_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_QCHEMOUTFIRST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_first_qchem_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_QCHEMOUTLAST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_last_qchem_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_NWCHEMOUTFIRST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_first_nwchem_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_NWCHEMOUTLAST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_last_nwchem_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_PSICODEOUTFIRST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_first_psicode_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_PSICODEOUTLAST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_last_psicode_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_MOPACOUTFIRST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_first_mopac_output_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_MOPACOUTLAST : g_signal_connect (SelecFile, "response", G_CALLBACK (read_last_mopac_output_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_MOPACAUX : g_signal_connect (SelecFile, "response", G_CALLBACK (read_last_mopac_aux_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_MOL2 : g_signal_connect (SelecFile, "response", G_CALLBACK (read_mol2_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_TINKER : g_signal_connect (SelecFile, "response", G_CALLBACK (read_tinker_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_PDB : g_signal_connect (SelecFile, "response", G_CALLBACK (read_pdb_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_HIN : g_signal_connect (SelecFile, "response", G_CALLBACK (read_hin_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_AIMALL : g_signal_connect (SelecFile, "response", G_CALLBACK (read_aimall_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_GABEDIT : g_signal_connect (SelecFile, "response", G_CALLBACK (read_gabedit_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_MOPACOUTSCAN : g_signal_connect (SelecFile, "response", G_CALLBACK (read_geometries_conv_mopac_scan), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_VASPPOSCAR : g_signal_connect (SelecFile, "response", G_CALLBACK (read_poscar_file), GTK_OBJECT(SelecFile)); break; case GABEDIT_TYPEFILEGEOM_NEW : case GABEDIT_TYPEFILEGEOM_MOLDEN : case GABEDIT_TYPEFILEGEOM_GAUSSIN : case GABEDIT_TYPEFILEGEOM_DALTONIN : case GABEDIT_TYPEFILEGEOM_FIREFLYIN : case GABEDIT_TYPEFILEGEOM_GAMESSIN : case GABEDIT_TYPEFILEGEOM_MOLCASIN : case GABEDIT_TYPEFILEGEOM_MOLPROIN : case GABEDIT_TYPEFILEGEOM_MPQCIN : case GABEDIT_TYPEFILEGEOM_ORCAIN : case GABEDIT_TYPEFILEGEOM_VASPIN : case GABEDIT_TYPEFILEGEOM_NWCHEMIN : case GABEDIT_TYPEFILEGEOM_QCHEMIN : case GABEDIT_TYPEFILEGEOM_MOPACIN : case GABEDIT_TYPEFILEGEOM_GAUSSIAN_ZMATRIX : case GABEDIT_TYPEFILEGEOM_MOPAC_ZMATRIX : case GABEDIT_TYPEFILEGEOM_PSICODEIN : case GABEDIT_TYPEFILEGEOM_UNKNOWN : return; } g_signal_connect_swapped(SelecFile, "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(SelecFile)); g_signal_connect_swapped(SelecFile, "close", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(SelecFile)); gtk_widget_show(SelecFile); } /********************************************************************************/ void save_xyzmol2tinkerpdbhin_file(GtkWidget* win,gpointer data) { GtkWidget * ButtonXYZ = g_object_get_data(G_OBJECT(win),"ButtonXYZ"); GtkWidget * ButtonMol2 = g_object_get_data(G_OBJECT(win),"ButtonMol2"); GtkWidget * ButtonPDB = g_object_get_data(G_OBJECT(win),"ButtonPDB"); GtkWidget * ButtonHIN = g_object_get_data(G_OBJECT(win),"ButtonHIN"); GtkWidget * entry = g_object_get_data(G_OBJECT(win),"Entry"); GtkWidget * buttonDirSelector = g_object_get_data(G_OBJECT(win),"ButtonDirSelector"); G_CONST_RETURN gchar *entrytext; gchar *dirName; gchar *fileName; entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector)); fileName = get_dir_file_name(dirName,entrytext); if ((!fileName) || (strcmp(fileName,"") == 0)) return ; if (GTK_TOGGLE_BUTTON (ButtonXYZ)->active) { save_xyz_file(fileName); } else if (GTK_TOGGLE_BUTTON (ButtonMol2)->active) { save_mol2_file(fileName); } else if (GTK_TOGGLE_BUTTON (ButtonPDB)->active) { save_pdb_file(fileName); } if (GTK_TOGGLE_BUTTON (ButtonHIN)->active) { save_hin_file(fileName); } else { save_tinker_file(fileName); } } /********************************************************************************/ static void reset_extended_file(gpointer data,G_CONST_RETURN gchar* ext) { GtkWidget* entry = GTK_WIDGET(data); G_CONST_RETURN gchar* entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); gchar* temp = get_filename_without_ext(entrytext); gchar* t = g_strdup_printf("%s.%s",temp,ext); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); g_free(temp); } /********************************************************************************/ static void reset_extended_xyz_file(GtkWidget* b,gpointer data) { reset_extended_file(data,"xyz"); } /********************************************************************************/ static void reset_extended_mol2_file(GtkWidget* b,gpointer data) { reset_extended_file(data,"mol2"); } /********************************************************************************/ static void reset_extended_tinker_file(GtkWidget* b,gpointer data) { reset_extended_file(data,"tnk"); } /********************************************************************************/ static void reset_extended_pdb_file(GtkWidget* b,gpointer data) { reset_extended_file(data,"pdb"); } /********************************************************************************/ static void reset_extended_hin_file(GtkWidget* b,gpointer data) { reset_extended_file(data,"hin"); } /********************************************************************************/ void create_window_save_xyzmol2tinkerpdbhin() { GtkWidget *fp; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox; GtkWidget *button; GtkWidget *buttonDirSelector; GtkWidget *ButtonXYZ; GtkWidget *ButtonMol2; GtkWidget *ButtonTinker; GtkWidget *ButtonPDB; GtkWidget *ButtonHIN; GtkWidget *entry; GtkWidget *Win = WindowGeom; gchar *labelt = g_strdup(" File : "); gchar *titre=g_strdup("Save in xyz/mol2/tinker/Hyperchem file"); gchar* fileName = g_strdup_printf("%s.xyz",fileopen.projectname); if(NcentersXYZ<1) { MessageGeom(_(" Sorry No Center !"),_("Error"),TRUE); return; } if(!Win) Win = Fenetre; fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(fp),titre); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Fenetre)); add_child(Win,fp,gtk_widget_destroy,_(" Save XYZ ")); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)delete_child,NULL); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)gtk_widget_destroy,NULL); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); vboxall = create_vbox(fp); frame = gtk_frame_new ("Type of file"); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox = gtk_hbox_new(FALSE, 10); gtk_box_pack_start (GTK_BOX (vboxframe), hbox, FALSE, FALSE, 5); gtk_widget_show (hbox); ButtonXYZ = gtk_radio_button_new_with_label( NULL,"XYZ " ); gtk_box_pack_start (GTK_BOX (hbox), ButtonXYZ, FALSE, FALSE, 5); gtk_widget_show (ButtonXYZ); ButtonMol2 = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonXYZ)), "Mol2"); gtk_box_pack_start (GTK_BOX (hbox), ButtonMol2, FALSE, FALSE, 5); gtk_widget_show (ButtonMol2); ButtonTinker = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonXYZ)), "Tinker"); gtk_box_pack_start (GTK_BOX (hbox), ButtonTinker, FALSE, FALSE, 5); gtk_widget_show (ButtonTinker); hbox = gtk_hbox_new(FALSE, 10); gtk_box_pack_start (GTK_BOX (vboxframe), hbox, FALSE, FALSE, 5); ButtonPDB = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonXYZ)), "PDB"); gtk_box_pack_start (GTK_BOX (hbox), ButtonPDB, FALSE, FALSE, 5); gtk_widget_show (ButtonPDB); ButtonHIN = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonXYZ)), "Hyperchem"); gtk_box_pack_start (GTK_BOX (hbox), ButtonHIN, FALSE, FALSE, 5); gtk_widget_show (ButtonHIN); create_hseparator(vboxframe); create_table_browser(Win,vboxframe); entry = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"EntryFileName")); gtk_entry_set_text(GTK_ENTRY(entry),fileName); buttonDirSelector = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"ButtonDirSelector")); if(fileopen.localdir && strcmp(fileopen.localdir,"NoName")!=0) gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(buttonDirSelector), fileopen.localdir); create_hseparator(vboxframe); g_signal_connect(G_OBJECT(ButtonXYZ),"clicked",(GCallback)reset_extended_xyz_file,(gpointer)(entry)); g_signal_connect(G_OBJECT(ButtonMol2),"clicked",(GCallback)reset_extended_mol2_file,(gpointer)(entry)); g_signal_connect(G_OBJECT(ButtonTinker),"clicked",(GCallback)reset_extended_tinker_file,(gpointer)(entry)); g_signal_connect(G_OBJECT(ButtonPDB),"clicked",(GCallback)reset_extended_pdb_file,(gpointer)(entry)); g_signal_connect(G_OBJECT(ButtonHIN),"clicked",(GCallback)reset_extended_hin_file,(gpointer)(entry)); g_object_set_data(G_OBJECT (fp), "ButtonXYZ",ButtonXYZ); g_object_set_data(G_OBJECT (fp), "ButtonMol2",ButtonMol2); g_object_set_data(G_OBJECT (fp), "ButtonTinker",ButtonTinker); g_object_set_data(G_OBJECT (fp), "ButtonPDB",ButtonPDB); g_object_set_data(G_OBJECT (fp), "ButtonHIN",ButtonHIN); g_object_set_data(G_OBJECT (fp), "Entry",entry); g_object_set_data(G_OBJECT (fp), "ButtonDirSelector",buttonDirSelector); create_hseparator(vboxall); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start (GTK_BOX (vboxall), hbox, FALSE, FALSE, 5); gtk_widget_realize(fp); button = create_button(fp,_("OK")); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, FALSE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(save_xyzmol2tinkerpdbhin_file),GTK_OBJECT(fp)); g_signal_connect_swapped(G_OBJECT(button),"clicked",(GCallback)delete_child,GTK_OBJECT(fp)); button = create_button(fp,_("Cancel")); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, FALSE, 3); g_signal_connect_swapped(G_OBJECT(button),"clicked",(GCallback)delete_child,GTK_OBJECT(fp)); gtk_widget_show (button); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_free(labelt); g_free(fileName); gtk_widget_show_all(fp); } /********************************************************************************/ void create_geomXYZ_list(GtkWidget *vbox, GabEditTypeFileGeom readfile) { GtkListStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkWidget *scr; guint i; guint Factor=7; guint widall=0; gchar *titres[NUMBER_LIST_XYZ]={ "Nr", " Symbol ", " MM Type ", " PDB Type ", " Residue ", " X ", " Y ", " Z ", " Charge "," Layer " }; gint width[NUMBER_LIST_XYZ]={4,6,8,8,8,10,10,10,10,10 }; GtkUIManager *manager = NULL; if(iprogram == PROG_IS_MOLPRO) NCr = NUMBER_LIST_XYZ-1; else NCr = NUMBER_LIST_XYZ; NSA[0] = -1; NSA[1] = NSA[2] = NSA[3] =-1; MethodeGeom = GEOM_IS_XYZ; if(GeomXYZ!=NULL && readfile != GABEDIT_TYPEFILEGEOM_UNKNOWN) { freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(); } LineSelected=-1; if(readfile != GABEDIT_TYPEFILEGEOM_NEW) selc_XYZ_file(readfile); else NcentersXYZ=0; for(i=0;(gint)i0) { imin=LineSelectedV; removeFromList(listv, LineSelectedV); for(i=imin;i0) VariablesXYZ=g_realloc(VariablesXYZ,NVariablesXYZ*sizeof(VariablesXYZDef)); else freeVariablesXYZ(); } LineSelectedV=-1; } /********************************************************************************/ static gboolean TestVariablesXYZCreated(gchar *NewName,gint j) { gint i; gboolean k; k=FALSE; for (i=0;i<(gint)NVariablesXYZ;i++) { if (j==i)continue; if (!strcmp(VariablesXYZ[i].Name, NewName) ) { k=TRUE; break; } } return k; } /********************************************************************************/ static void EditVariable(GtkWidget *w,gpointer Entree) { gchar *texts[2]; gchar *message; gint Nc; DestroyDialog = TRUE; texts[0] = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryV[0]))); texts[1] = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryV[1]))); if(!variable_name_valid(texts[0])) { show_forbidden_characters(); DestroyDialog = FALSE; return; } if ( strcmp(texts[0], "") && strcmp(texts[1], "") ) { Nc=LineSelectedV; if(Nc<0) Nc = LineSelectedOld; } else { MessageGeom(_("Sorry a Entry text is void !\n"),_("Error"),TRUE); DestroyDialog = FALSE; return; } if(TestVariablesXYZCreated(texts[0],Nc) ) { MessageGeom(_("Sorry a other variable have any Name !\n"),_("Error"),TRUE); DestroyDialog = FALSE; return; } if(!test(texts[1])) { message=g_strdup_printf(_("Sorry %s is not a number \n"),texts[1]); MessageGeom(message,_("Error"),TRUE); DestroyDialog = FALSE; } else { if(test(texts[1]) && !testpointeE(texts[1]) ) texts[1]=g_strdup_printf("%s.0",texts[1]); VariablesXYZ[Nc].Name=g_strdup(texts[0]); VariablesXYZ[Nc].Value=g_strdup(texts[1]); removeFromList(listv, Nc); insertToList(listv, Nc, texts, 2); } } /********************************************************************************/ static void DialogueDeleteV() { GtkWidget *Dialogue; GtkWidget *Label; GtkWidget *Bouton; GtkWidget *frame; GtkWidget *vboxframe; gchar *message; if (NVariablesXYZ <1) { MessageGeom(_(" No Variable to delet !"),_("Error"),TRUE); return ; } if(LineSelectedV<0) LineSelectedV=NVariablesXYZ-1; if(VariablesXYZ[LineSelectedV].Used) { message=g_strdup_printf(_("Sorry\n %s \n is used in Geometry"),VariablesXYZ[LineSelectedV].Name); MessageGeom(message,_("Error"),TRUE); return; } Dialogue = gtk_dialog_new(); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER); gtk_window_set_title(GTK_WINDOW(Dialogue),"Delete Variable"); gtk_window_set_transient_for(GTK_WINDOW(Dialogue),GTK_WINDOW(WindowGeom)); gtk_window_set_modal (GTK_WINDOW (Dialogue), TRUE); add_child(WindowGeom,Dialogue,gtk_widget_destroy," Delete Variable "); g_signal_connect(G_OBJECT(Dialogue),"delete_event",(GCallback)delete_child,NULL); g_object_ref (frame); g_object_set_data_full(G_OBJECT (Dialogue), "frame", frame,(GDestroyNotify) g_object_unref); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); gtk_widget_realize(Dialogue); message = g_strdup_printf("\nAre you sure to delete the variable\n %s\n?",VariablesXYZ[LineSelectedV].Name); Label = create_label_with_pixmap(Dialogue,message," Question "); gtk_box_pack_start(GTK_BOX(vboxframe), Label,TRUE,TRUE,0); Bouton = create_button(Dialogue,"No"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); Bouton = create_button(Dialogue,"Yes"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked",(GCallback)DelVariable, NULL); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_show_all(Dialogue); } /********************************************************************************/ static void DialogueEditV() { GtkWidget *Dialogue; GtkWidget *Bouton; GtkWidget *hbox; GtkWidget *frame, *vboxframe; gint Nc; gchar *tlabel[]={" Name : ", " Value : "}; Nc=LineSelectedV; if(Nc<0 ) { if(NVariablesXYZ<1) MessageGeom(_("Create variable before \n"),_("Warning"),TRUE); else MessageGeom(_("Please Select your variable \n"),_("Warning"),TRUE); return; } Dialogue = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(Dialogue),_("Edit Variable")); gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Dialogue),GTK_WINDOW(Fenetre)); gtk_window_set_transient_for(GTK_WINDOW(Dialogue),GTK_WINDOW(WindowGeom)); add_child(WindowGeom,Dialogue,gtk_widget_destroy,_(" Edit Variable ")); g_signal_connect(G_OBJECT(Dialogue),"delete_event",(GCallback)delete_child,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); g_object_ref (frame); g_object_set_data_full(G_OBJECT (Dialogue), "frame", frame,(GDestroyNotify) g_object_unref); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); EntryV[0] = create_label_entry(hbox,tlabel[0],(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_entry_set_text(GTK_ENTRY(EntryV[0]),VariablesXYZ[Nc].Name); if(VariablesXYZ[Nc].Used) gtk_editable_set_editable((GtkEditable*) EntryV[0],FALSE); hbox=create_hbox_false(vboxframe); EntryV[1] = create_label_entry(hbox,tlabel[1],(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_entry_set_text(GTK_ENTRY(EntryV[1]),VariablesXYZ[Nc].Value); gtk_widget_realize(Dialogue); Bouton = create_button(Dialogue,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); Bouton = create_button(Dialogue,_("OK")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked",(GCallback)EditVariable,NULL); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)destroy_dialogue,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); gtk_widget_show_all(Dialogue); } /********************************************************************************/ static void AddVariable(GtkWidget *w,gpointer Entree) { gchar *texts[2]; gchar *message; texts[0] = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryV[0]))); texts[1] = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryV[1]))); DestroyDialog = TRUE; if(TestVariablesXYZCreated(texts[0],-1)) { MessageGeom(_("Sorry a other variable have any Name !\n"),_("Error"),TRUE); DestroyDialog = FALSE; return; } if(!variable_name_valid(texts[0])) { show_forbidden_characters(); DestroyDialog = FALSE; return; } if ( strcmp(texts[0], "") && strcmp(texts[1], "") ) NVariablesXYZ++; else { MessageGeom(_("Sorry a Entry text is void !\n"),_("Error"),TRUE); DestroyDialog = FALSE; return; } if(VariablesXYZ==NULL) VariablesXYZ=g_malloc(sizeof(VariablesXYZDef)); else VariablesXYZ=g_realloc(VariablesXYZ,NVariablesXYZ*sizeof(VariablesXYZDef)); if(test(texts[1]) && !testpointeE(texts[1]) ) texts[1]=g_strdup_printf("%s.0",texts[1]); VariablesXYZ[NVariablesXYZ-1].Name=g_strdup(texts[0]); VariablesXYZ[NVariablesXYZ-1].Value=g_strdup(texts[1]); VariablesXYZ[NVariablesXYZ-1].Used=FALSE; if(!test(texts[1])) { message=g_strdup_printf(_("Sorry %s is not a number \n"),texts[1]); DestroyDialog = FALSE; MessageGeom(message,_("Error"),TRUE); NVariablesXYZ--; if(NVariablesXYZ>0) VariablesXYZ=g_realloc(VariablesXYZ,NVariablesXYZ*sizeof(VariablesXYZDef)); else VariablesXYZ=NULL; } else appendToList(listv, texts, 2); } /********************************************************************************/ static void DialogueAddV() { GtkWidget *Dialogue; GtkWidget *Bouton; GtkWidget *hbox; GtkWidget *frame, *vboxframe; gchar *tlabel[]={" Name : ", " Value : "}; Dialogue = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(Dialogue),"New Variable"); gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Dialogue),GTK_WINDOW(WindowGeom)); add_child(WindowGeom,Dialogue,gtk_widget_destroy," New Variable "); g_signal_connect(G_OBJECT(Dialogue),"delete_event",(GCallback)delete_child,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); g_object_ref (frame); g_object_set_data_full(G_OBJECT (Dialogue), "frame", frame,(GDestroyNotify) g_object_unref); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); EntryV[0] = create_label_entry(hbox,tlabel[0],(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); hbox=create_hbox_false(vboxframe); EntryV[1] = create_label_entry(hbox,tlabel[1],(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_widget_realize(Dialogue); Bouton = create_button(Dialogue,_("Cancel")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); Bouton = create_button(Dialogue,_("OK")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked",(GCallback)AddVariable,NULL); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)destroy_dialogue,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); gtk_widget_show_all(Dialogue); } /********************************************************************************/ void create_variablesXYZ_list(GtkWidget *vbox,guint itype) { GtkWidget *scr; guint i; guint Factor=7; guint widall=0; gchar *titres[2]={ " Name "," Value "}; gint width[2]={10,10 }; GtkUIManager *manager; GtkListStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; if(itype!=GABEDIT_TYPEFILEGEOM_UNKNOWN) freeVariablesXYZ(); LineSelectedV=-1; for(i=0;i<2;i++) widall+=width[i]; widall=widall*Factor+50; scr=gtk_scrolled_window_new(NULL,NULL); gtk_widget_set_size_request(scr,widall,(gint)(ScreenHeight*0.4)); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scr),GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX (vbox), scr,TRUE, TRUE, 2); store = gtk_list_store_new (4, G_TYPE_STRING, G_TYPE_BOOLEAN,G_TYPE_STRING,G_TYPE_BOOLEAN); model = GTK_TREE_MODEL (store); listv = gtk_tree_view_new_with_model (model); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (listv), TRUE); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (listv), TRUE); gtk_tree_view_set_reorderable(GTK_TREE_VIEW (listv), TRUE); for (i=0;(gint)i<2;i++) { column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, titres[i]); gtk_tree_view_column_set_min_width(column, width[i]*Factor); gtk_tree_view_column_set_reorderable(column, TRUE); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", i+i, "editable",i+i+1,NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (listv), column); g_object_set_data(G_OBJECT(renderer),"NumColumn", GINT_TO_POINTER(i)); g_signal_connect (renderer, "edited", G_CALLBACK (editedVariable), model); } gtk_container_add(GTK_CONTAINER(scr),listv); set_base_style(listv,58000,58000,58000); gtk_widget_show (listv); if(WindowGeom) manager = newMenuXYZVariables(WindowGeom); else manager = newMenuXYZVariables(Fenetre); if(GeomXYZ != NULL && VariablesXYZ != NULL) append_VariablesXYZ_in_list(); g_signal_connect(G_OBJECT (listv), "button_press_event", G_CALLBACK(event_dispatcher), manager); } /********************************************************************************/ static void multi_by_factor(gdouble factor) { gint i; for (i=0;(guint)i=3) break; } for(i=0;i<3;i++) gtk_entry_set_text(GTK_ENTRY(entrys[i]),"1.0"); if(GeomDrawingArea != NULL) rafresh_drawing(); } /*********************************************************************/ GtkWidget* scale_cell_dialog () { GtkWidget *fp; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox; GtkWidget *button; GtkWidget *label; GtkStyle *style; static GtkWidget* entrys[3]; static GdkColor color; gchar* tlabel[3]={"a : ","b : ","c : "}; gint i; /* principal Window */ fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(fp),TRUE); gtk_window_set_title(GTK_WINDOW(fp),_("Scal box")); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (fp), TRUE); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)gtk_widget_destroy,NULL); vboxall = create_vbox(fp); frame = gtk_frame_new (_("Scaling factors")); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); for(i=0;i<3;i++) { hbox = create_hbox(vboxframe); label = gtk_label_new (tlabel[i]); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, FALSE, 0); entrys[i] = gtk_entry_new (); gtk_widget_show (entrys[i]); gtk_box_pack_start (GTK_BOX (hbox), entrys[i], FALSE, TRUE, 0); gtk_entry_set_text(GTK_ENTRY(entrys[i]),"1.0"); } hbox = create_hbox(vboxall); button = create_button(Fenetre,_("Close")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(fp)); button = create_button(Fenetre,_("Apply")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(scale_cell),(gpointer)entrys); gtk_widget_show (button); button = create_button(Fenetre,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(scale_cell),(gpointer)entrys); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(fp)); gtk_widget_show (button); gtk_widget_show_all(fp); return fp; } GabeditSrc250/src/Geometry/FragmentsPNA.c0000644000175100017510000021456413130665226020523 0ustar alloucheallouche/* FragmentsPNA.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Common/GabeditType.h" #include "../Utils/Utils.h" #include "../Geometry/Fragments.h" #include "../MolecularMechanics/PDBTemplate.h" #include "../Geometry/DrawGeom.h" #include "../MolecularMechanics/CalculTypesAmber.h" #define ANG_TO_BOHR 1.0/0.52917726 /*****************************************************************/ static void SetResidue(Fragment* Frag,gchar* name) { gint i; for(i=0;iNAtoms;i++) Frag->Atoms[i].Residue = g_strdup(name); } /********************************************************************************/ static void SetMMTypes(Fragment* Frag) { gint i; gchar* residue = NULL; gdouble charge; if(Frag->NAtoms<1) return; residue = Frag->Atoms[0].Residue; for(i=0;iNAtoms;i++) { if(Frag->Atoms[i].mmType) g_free(Frag->Atoms[i].mmType); Frag->Atoms[i].mmType = getMMTypeFromPDBTpl(residue, Frag->Atoms[i].pdbType,&charge); if(strcmp(Frag->Atoms[i].mmType,"UNK")) Frag->Atoms[i].Charge = charge; } for(i=0;iNAtoms;i++) if(!strcmp(Frag->Atoms[i].mmType,"UNK")) break; if(i!=Frag->NAtoms) calculTypesAmberForAFragment(Frag); } /*****************************************************************/ static void SetAtom(Atom* A,gchar* symb,gdouble x,gdouble y,gdouble z,gdouble charge) { A->mmType = g_strdup(symb); A->pdbType = g_strdup(symb); A->Symb = g_strdup_printf("%c",toupper(symb[0])); A->Coord[0] = (gdouble)x*(gdouble)ANG_TO_BOHR; A->Coord[1] = (gdouble)y*(gdouble)ANG_TO_BOHR; A->Coord[2] = (gdouble)z*(gdouble)ANG_TO_BOHR; A->Charge = charge; } /*****************************************************************/ Fragment GetFragmentPNA(gchar* Name) { Fragment F; gchar T[100]="UNK"; gint i; F.NAtoms = 0; F.Atoms = NULL; F.atomToDelete = -1; F.atomToBondTo = -1; F.angleAtom = -1; if ( !strcmp(Name, "dADE") ) { F.NAtoms = 32 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "P", 0.130f, -4.768f, 1.423f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.137f, -5.477f, 1.133f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.326f, -5.261f, 0.703f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", -0.056f, -3.204f, 1.147f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -0.767f, -2.405f, 2.111f, 0.118f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.527f, -3.016f, 2.598f, 0.021f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -0.065f, -2.031f, 2.855f, 0.021f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.433f, -1.226f, 1.419f, 0.036f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.236f, -0.840f, 2.047f, 0.056f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.475f, -0.127f, 1.332f, -0.368f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.376f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.245f, 0.991f, -0.381f, 0.009f ); SetAtom(&F.Atoms[ 12 ], "C3'", -1.871f, -1.464f, -0.028f, 0.233f ); SetAtom(&F.Atoms[ 13 ], "H3'", -2.275f, -2.474f, -0.111f, 0.025f ); SetAtom(&F.Atoms[ 14 ], "C2'", -0.605f, -1.139f, -0.824f, -0.307f ); SetAtom(&F.Atoms[ 15 ], "H2'1", -0.294f, -2.017f, -1.388f, 0.081f ); SetAtom(&F.Atoms[ 16 ], "H2'2", -0.809f, -0.318f, -1.512f, 0.081f ); SetAtom(&F.Atoms[ 17 ], "O3'", -2.909f, -0.631f, -0.522f, -0.509f ); SetAtom(&F.Atoms[ 18 ], "N9", 1.520f, 0.000f, 0.000f, -0.073f ); SetAtom(&F.Atoms[ 19 ], "C8", 2.423f, -1.030f, 0.000f, 0.263f ); SetAtom(&F.Atoms[ 20 ], "H8", 2.075f, -2.052f, -0.001f, 0.062f ); SetAtom(&F.Atoms[ 21 ], "N7", 3.663f, -0.645f, -0.063f, -0.543f ); SetAtom(&F.Atoms[ 22 ], "C5", 3.583f, 0.748f, -0.061f, -0.097f ); SetAtom(&F.Atoms[ 23 ], "C6", 4.559f, 1.750f, -0.112f, 0.769f ); SetAtom(&F.Atoms[ 24 ], "N6", 5.873f, 1.499f, -0.177f, -0.768f ); SetAtom(&F.Atoms[ 25 ], "H61", 6.206f, 0.546f, -0.192f, 0.324f ); SetAtom(&F.Atoms[ 26 ], "H62", 6.532f, 2.264f, -0.212f, 0.335f ); SetAtom(&F.Atoms[ 27 ], "N1", 4.138f, 3.022f, -0.094f, -0.774f ); SetAtom(&F.Atoms[ 28 ], "C2", 2.832f, 3.265f, -0.029f, 0.661f ); SetAtom(&F.Atoms[ 29 ], "H2", 2.472f, 4.282f, -0.014f, -0.032f ); SetAtom(&F.Atoms[ 30 ], "N3", 1.825f, 2.408f, 0.001f, -0.728f ); SetAtom(&F.Atoms[ 31 ], "C4", 2.277f, 1.136f, 0.000f, 0.546f ); } else if ( !strcmp(Name, "dCYT") ) { F.NAtoms = 30 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "P", 0.178f, -4.768f, 1.420f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.094f, -5.480f, 1.164f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.357f, -5.257f, 0.669f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", -0.018f, -3.203f, 1.149f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -0.707f, -2.406f, 2.131f, 0.118f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.452f, -3.019f, 2.638f, 0.021f ); SetAtom(&F.Atoms[ 6 ], "H5'2", 0.014f, -2.030f, 2.856f, 0.021f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.393f, -1.229f, 1.456f, 0.036f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.264f, -1.035f, 2.082f, 0.056f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.440f, -0.128f, 1.344f, -0.368f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.376f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.335f, 0.955f, -0.402f, 0.009f ); SetAtom(&F.Atoms[ 12 ], "N1", 1.490f, 0.000f, 0.000f, -0.187f ); SetAtom(&F.Atoms[ 13 ], "C6", 2.193f, -1.165f, -0.001f, 0.185f ); SetAtom(&F.Atoms[ 14 ], "H6", 1.671f, -2.110f, -0.001f, 0.098f ); SetAtom(&F.Atoms[ 15 ], "C5", 3.553f, -1.162f, -0.001f, -0.576f ); SetAtom(&F.Atoms[ 16 ], "H5", 4.099f, -2.105f, -0.001f, 0.153f ); SetAtom(&F.Atoms[ 17 ], "C4", 4.198f, 0.114f, -0.002f, 0.935f ); SetAtom(&F.Atoms[ 18 ], "N4", 5.515f, 0.191f, -0.002f, -0.834f ); SetAtom(&F.Atoms[ 19 ], "H41", 6.035f, -0.675f, -0.002f, 0.329f ); SetAtom(&F.Atoms[ 20 ], "H42", 5.973f, 1.091f, -0.002f, 0.351f ); SetAtom(&F.Atoms[ 21 ], "N3", 3.502f, 1.272f, -0.001f, -0.860f ); SetAtom(&F.Atoms[ 22 ], "C2", 2.143f, 1.226f, -0.001f, 0.859f ); SetAtom(&F.Atoms[ 23 ], "O", 1.443f, 2.249f, 0.000f, -0.508f ); SetAtom(&F.Atoms[ 24 ], "C3'", -1.868f, -1.469f, 0.021f, 0.233f ); SetAtom(&F.Atoms[ 25 ], "H3'", -2.271f, -2.479f, -0.051f, 0.025f ); SetAtom(&F.Atoms[ 26 ], "C2'", -0.624f, -1.140f, -0.807f, -0.307f ); SetAtom(&F.Atoms[ 27 ], "H2'1", -0.325f, -2.018f, -1.379f, 0.081f ); SetAtom(&F.Atoms[ 28 ], "H2'2", -0.847f, -0.321f, -1.490f, 0.081f ); SetAtom(&F.Atoms[ 29 ], "O3'", -2.920f, -0.638f, -0.446f, -0.509f ); } else if ( !strcmp(Name, "dGUA") ) { F.NAtoms = 33 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "P", 0.179f, -4.768f, 1.420f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.093f, -5.479f, 1.165f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.357f, -5.257f, 0.668f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", -0.017f, -3.203f, 1.149f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -0.705f, -2.406f, 2.131f, 0.118f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.450f, -3.019f, 2.639f, 0.021f ); SetAtom(&F.Atoms[ 6 ], "H5'2", 0.016f, -2.030f, 2.856f, 0.021f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.392f, -1.229f, 1.457f, 0.036f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.263f, -1.035f, 2.084f, 0.056f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.439f, -0.128f, 1.344f, -0.368f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.376f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.335f, 0.955f, -0.402f, 0.009f ); SetAtom(&F.Atoms[ 12 ], "N9", 1.490f, 0.000f, 0.000f, -0.042f ); SetAtom(&F.Atoms[ 13 ], "C8", 2.363f, -1.069f, 0.000f, 0.266f ); SetAtom(&F.Atoms[ 14 ], "H8", 1.979f, -2.079f, 0.000f, 0.046f ); SetAtom(&F.Atoms[ 15 ], "N7", 3.627f, -0.726f, 0.002f, -0.543f ); SetAtom(&F.Atoms[ 16 ], "C5", 3.595f, 0.664f, 0.004f, -0.060f ); SetAtom(&F.Atoms[ 17 ], "C6", 4.655f, 1.609f, 0.006f, 0.690f ); SetAtom(&F.Atoms[ 18 ], "O6", 5.868f, 1.405f, 0.007f, -0.458f ); SetAtom(&F.Atoms[ 19 ], "N1", 4.169f, 2.922f, 0.009f, -0.729f ); SetAtom(&F.Atoms[ 20 ], "H1", 4.842f, 3.661f, 0.012f, 0.336f ); SetAtom(&F.Atoms[ 21 ], "C2", 2.835f, 3.276f, 0.006f, 0.871f ); SetAtom(&F.Atoms[ 22 ], "N2", 2.577f, 4.592f, 0.008f, -0.778f ); SetAtom(&F.Atoms[ 23 ], "H21", 3.252f, 5.344f, 0.023f, 0.325f ); SetAtom(&F.Atoms[ 24 ], "H22", 1.604f, 4.861f, 0.015f, 0.339f ); SetAtom(&F.Atoms[ 25 ], "N3", 1.844f, 2.390f, 0.003f, -0.709f ); SetAtom(&F.Atoms[ 26 ], "C4", 2.299f, 1.109f, 0.000f, 0.391f ); SetAtom(&F.Atoms[ 27 ], "C3'", -1.868f, -1.469f, 0.022f, 0.233f ); SetAtom(&F.Atoms[ 28 ], "H3'", -2.271f, -2.479f, -0.049f, 0.025f ); SetAtom(&F.Atoms[ 29 ], "C2'", -0.624f, -1.140f, -0.807f, -0.307f ); SetAtom(&F.Atoms[ 30 ], "H2'1", -0.326f, -2.018f, -1.379f, 0.081f ); SetAtom(&F.Atoms[ 31 ], "H2'2", -0.848f, -0.321f, -1.489f, 0.081f ); SetAtom(&F.Atoms[ 32 ], "O3'", -2.921f, -0.638f, -0.444f, -0.509f ); } if ( !strcmp(Name, "dTHY") ) { F.NAtoms = 32 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "P", 0.131f, -4.768f, 1.425f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.136f, -5.477f, 1.136f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.327f, -5.260f, 0.705f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", -0.055f, -3.203f, 1.149f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -0.767f, -2.404f, 2.112f, 0.118f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.526f, -3.015f, 2.600f, 0.021f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -0.064f, -2.030f, 2.856f, 0.021f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.433f, -1.225f, 1.420f, 0.036f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.235f, -0.839f, 2.048f, 0.056f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.475f, -0.127f, 1.332f, -0.368f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.376f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.322f, 0.956f, -0.411f, 0.009f ); SetAtom(&F.Atoms[ 12 ], "N1", 1.531f, 0.000f, 0.000f, -0.217f ); SetAtom(&F.Atoms[ 13 ], "C6", 2.277f, -1.148f, -0.001f, 0.034f ); SetAtom(&F.Atoms[ 14 ], "H6", 1.789f, -2.110f, 0.000f, 0.134f ); SetAtom(&F.Atoms[ 15 ], "C5", 3.615f, -1.106f, -0.055f, -0.176f ); SetAtom(&F.Atoms[ 16 ], "C7", 4.443f, -2.357f, -0.055f, -0.382f ); SetAtom(&F.Atoms[ 17 ], "H71", 4.180f, -2.966f, -0.920f, 0.114f ); SetAtom(&F.Atoms[ 18 ], "H72", 5.500f, -2.095f, -0.104f, 0.114f ); SetAtom(&F.Atoms[ 19 ], "H73", 4.251f, -2.920f, 0.858f, 0.114f ); SetAtom(&F.Atoms[ 20 ], "C4", 4.311f, 0.154f, -0.115f, 0.809f ); SetAtom(&F.Atoms[ 21 ], "O4", 5.532f, 0.291f, -0.167f, -0.464f ); SetAtom(&F.Atoms[ 22 ], "N3", 3.476f, 1.373f, -0.002f, -0.851f ); SetAtom(&F.Atoms[ 23 ], "H3", 3.996f, 2.330f, -0.046f, 0.355f ); SetAtom(&F.Atoms[ 24 ], "C2", 2.103f, 1.246f, -0.001f, 0.849f ); SetAtom(&F.Atoms[ 25 ], "O", 1.368f, 2.216f, 0.091f, -0.488f ); SetAtom(&F.Atoms[ 26 ], "C3'", -1.871f, -1.464f, -0.028f, 0.233f ); SetAtom(&F.Atoms[ 27 ], "H3'", -2.275f, -2.474f, -0.109f, 0.025f ); SetAtom(&F.Atoms[ 28 ], "C2'", -0.605f, -1.139f, -0.823f, -0.307f ); SetAtom(&F.Atoms[ 29 ], "H2'1", -0.294f, -2.017f, -1.387f, 0.081f ); SetAtom(&F.Atoms[ 30 ], "H2'2", -0.809f, -0.319f, -1.511f, 0.081f ); SetAtom(&F.Atoms[ 31 ], "O3'", -2.909f, -0.632f, -0.521f, -0.509f ); } else if ( !strcmp(Name, "rADE") ) { F.NAtoms = 33 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "P", 0.130f, -4.768f, 1.423f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.137f, -5.477f, 1.133f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.326f, -5.261f, 0.703f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", -0.056f, -3.204f, 1.147f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -0.767f, -2.405f, 2.111f, 0.180f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.527f, -3.016f, 2.598f, 0.008f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -0.065f, -2.031f, 2.855f, 0.008f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.433f, -1.226f, 1.419f, 0.100f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.320f, -1.030f, 2.022f, 0.061f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.475f, -0.127f, 1.332f, -0.343f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.117f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.322f, 0.956f, -0.410f, 0.054f ); SetAtom(&F.Atoms[ 12 ], "N9", 1.520f, 0.000f, 0.000f, -0.073f ); SetAtom(&F.Atoms[ 13 ], "C8", 2.423f, -1.030f, 0.000f, 0.263f ); SetAtom(&F.Atoms[ 14 ], "H8", 2.075f, -2.052f, -0.001f, 0.062f ); SetAtom(&F.Atoms[ 15 ], "N7", 3.663f, -0.645f, -0.063f, -0.543f ); SetAtom(&F.Atoms[ 16 ], "C5", 3.583f, 0.748f, -0.061f, -0.097f ); SetAtom(&F.Atoms[ 17 ], "C6", 4.559f, 1.750f, -0.112f, 0.769f ); SetAtom(&F.Atoms[ 18 ], "N6", 5.873f, 1.499f, -0.177f, -0.768f ); SetAtom(&F.Atoms[ 19 ], "H61", 6.206f, 0.546f, -0.192f, 0.324f ); SetAtom(&F.Atoms[ 20 ], "H62", 6.532f, 2.264f, -0.212f, 0.335f ); SetAtom(&F.Atoms[ 21 ], "N1", 4.138f, 3.022f, -0.094f, -0.774f ); SetAtom(&F.Atoms[ 22 ], "C2", 2.832f, 3.265f, -0.029f, 0.661f ); SetAtom(&F.Atoms[ 23 ], "H2", 2.472f, 4.282f, -0.014f, -0.032f ); SetAtom(&F.Atoms[ 24 ], "N3", 1.825f, 2.408f, 0.001f, -0.728f ); SetAtom(&F.Atoms[ 25 ], "C4", 2.277f, 1.136f, 0.000f, 0.546f ); SetAtom(&F.Atoms[ 26 ], "C3'", -1.871f, -1.464f, -0.028f, 0.233f ); SetAtom(&F.Atoms[ 27 ], "H3'", -2.275f, -2.474f, -0.111f, 0.007f ); SetAtom(&F.Atoms[ 28 ], "C2'", -0.605f, -1.139f, -0.824f, 0.101f ); SetAtom(&F.Atoms[ 29 ], "H2'", -0.294f, -2.017f, -1.388f, 0.008f ); SetAtom(&F.Atoms[ 30 ], "O2'", -0.873f, -0.063f, -1.727f, -0.546f ); SetAtom(&F.Atoms[ 31 ], "HO2", -1.320f, -0.402f, -2.505f, -0.324f ); SetAtom(&F.Atoms[ 32 ], "O3'", -2.909f, -0.631f, -0.522f, -0.509f ); } else if ( !strcmp(Name, "rCYT") ) { F.NAtoms = 31 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "P", 0.178f, -4.768f, 1.420f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.094f, -5.480f, 1.164f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.357f, -5.257f, 0.669f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", -0.018f, -3.203f, 1.149f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -0.707f, -2.406f, 2.131f, 0.180f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.452f, -3.019f, 2.638f, 0.008f ); SetAtom(&F.Atoms[ 6 ], "H5'2", 0.014f, -2.030f, 2.856f, 0.008f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.393f, -1.229f, 1.456f, 0.100f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.264f, -1.035f, 2.082f, 0.061f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.440f, -0.128f, 1.344f, -0.343f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.177f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.335f, 0.955f, -0.402f, 0.054f ); SetAtom(&F.Atoms[ 12 ], "N1", 1.490f, 0.000f, 0.000f, -0.187f ); SetAtom(&F.Atoms[ 13 ], "C6", 2.193f, -1.165f, -0.001f, 0.185f ); SetAtom(&F.Atoms[ 14 ], "H6", 1.671f, -2.110f, -0.001f, 0.098f ); SetAtom(&F.Atoms[ 15 ], "C5", 3.553f, -1.162f, -0.001f, -0.576f ); SetAtom(&F.Atoms[ 16 ], "H5", 4.099f, -2.105f, -0.001f, 0.153f ); SetAtom(&F.Atoms[ 17 ], "C4", 4.198f, 0.114f, -0.002f, 0.935f ); SetAtom(&F.Atoms[ 18 ], "N4", 5.515f, 0.191f, -0.002f, -0.834f ); SetAtom(&F.Atoms[ 19 ], "H41", 6.035f, -0.675f, -0.002f, 0.329f ); SetAtom(&F.Atoms[ 20 ], "H42", 5.973f, 1.091f, -0.002f, 0.351f ); SetAtom(&F.Atoms[ 21 ], "N3", 3.502f, 1.272f, -0.001f, -0.860f ); SetAtom(&F.Atoms[ 22 ], "C2", 2.143f, 1.226f, -0.001f, 0.859f ); SetAtom(&F.Atoms[ 23 ], "O", 1.443f, 2.249f, 0.000f, -0.508f ); SetAtom(&F.Atoms[ 24 ], "C3'", -1.868f, -1.469f, 0.021f, 0.303f ); SetAtom(&F.Atoms[ 25 ], "H3'", -2.271f, -2.479f, -0.051f, 0.007f ); SetAtom(&F.Atoms[ 26 ], "C2'", -0.624f, -1.140f, -0.807f, 0.101f ); SetAtom(&F.Atoms[ 27 ], "H2'", -0.325f, -2.018f, -1.379f, 0.008f ); SetAtom(&F.Atoms[ 28 ], "O2'", -0.918f, -0.065f, -1.703f, -0.546f ); SetAtom(&F.Atoms[ 29 ], "HO2", -1.384f, -0.406f, -2.470f, -0.324f ); SetAtom(&F.Atoms[ 30 ], "O3'", -2.920f, -0.638f, -0.446f, -0.509f ); } else if ( !strcmp(Name, "rGUA") ) { F.NAtoms = 34 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "P", 0.179f, -4.768f, 1.420f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.093f, -5.479f, 1.165f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.357f, -5.257f, 0.668f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", -0.017f, -3.203f, 1.149f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -0.705f, -2.406f, 2.131f, 0.180f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.450f, -3.019f, 2.639f, 0.008f ); SetAtom(&F.Atoms[ 6 ], "H5'2", 0.016f, -2.030f, 2.856f, 0.008f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.392f, -1.229f, 1.457f, 0.100f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.263f, -1.035f, 2.084f, 0.061f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.439f, -0.128f, 1.344f, -0.343f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.117f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.335f, 0.955f, -0.402f, 0.054f ); SetAtom(&F.Atoms[ 12 ], "N9", 1.490f, 0.000f, 0.000f, -0.042f ); SetAtom(&F.Atoms[ 13 ], "C8", 2.363f, -1.069f, 0.000f, 0.266f ); SetAtom(&F.Atoms[ 14 ], "H8", 1.979f, -2.079f, 0.000f, 0.046f ); SetAtom(&F.Atoms[ 15 ], "N7", 3.627f, -0.726f, 0.002f, -0.543f ); SetAtom(&F.Atoms[ 16 ], "C5", 3.595f, 0.664f, 0.004f, -0.060f ); SetAtom(&F.Atoms[ 17 ], "C6", 4.655f, 1.609f, 0.006f, 0.690f ); SetAtom(&F.Atoms[ 18 ], "O6", 5.868f, 1.405f, 0.007f, -0.458f ); SetAtom(&F.Atoms[ 19 ], "N1", 4.169f, 2.922f, 0.009f, -0.729f ); SetAtom(&F.Atoms[ 20 ], "H1", 4.842f, 3.661f, 0.012f, 0.336f ); SetAtom(&F.Atoms[ 21 ], "C2", 2.835f, 3.276f, 0.006f, 0.871f ); SetAtom(&F.Atoms[ 22 ], "N2", 2.577f, 4.592f, 0.008f, -0.778f ); SetAtom(&F.Atoms[ 23 ], "H21", 3.252f, 5.344f, 0.023f, 0.325f ); SetAtom(&F.Atoms[ 24 ], "H22", 1.604f, 4.861f, 0.015f, 0.339f ); SetAtom(&F.Atoms[ 25 ], "N3", 1.844f, 2.390f, 0.003f, -0.709f ); SetAtom(&F.Atoms[ 26 ], "C4", 2.299f, 1.109f, 0.000f, 0.391f ); SetAtom(&F.Atoms[ 27 ], "C3'", -1.868f, -1.469f, 0.022f, 0.303f ); SetAtom(&F.Atoms[ 28 ], "H3'", -2.271f, -2.479f, -0.049f, 0.007f ); SetAtom(&F.Atoms[ 29 ], "C2'", -0.624f, -1.140f, -0.807f, 0.101f ); SetAtom(&F.Atoms[ 30 ], "H2'", -0.326f, -2.018f, -1.379f, 0.008f ); SetAtom(&F.Atoms[ 31 ], "O2'", -0.919f, -0.065f, -1.703f, -0.546f ); SetAtom(&F.Atoms[ 32 ], "HO2", -1.385f, -0.406f, -2.469f, -0.324f ); SetAtom(&F.Atoms[ 33 ], "O3'", -2.921f, -0.638f, -0.444f, -0.509f ); } if ( !strcmp(Name, "rURA") ) { F.NAtoms = 30 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "P", 0.131f, -4.768f, 1.425f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.136f, -5.477f, 1.136f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.327f, -5.260f, 0.705f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", -0.055f, -3.203f, 1.149f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -0.767f, -2.404f, 2.112f, 0.180f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.526f, -3.015f, 2.600f, 0.008f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -0.064f, -2.030f, 2.856f, 0.008f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.433f, -1.225f, 1.420f, 0.100f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.320f, -1.029f, 2.023f, 0.061f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.475f, -0.127f, 1.332f, -0.343f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.117f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.322f, 0.956f, -0.411f, 0.054f ); SetAtom(&F.Atoms[ 12 ], "N1", 1.531f, 0.000f, 0.000f, -0.159f ); SetAtom(&F.Atoms[ 13 ], "C6", 2.277f, -1.148f, -0.001f, 0.160f ); SetAtom(&F.Atoms[ 14 ], "H6", 1.789f, -2.110f, 0.000f, 0.098f ); SetAtom(&F.Atoms[ 15 ], "C5", 3.615f, -1.106f, -0.055f, -0.529f ); SetAtom(&F.Atoms[ 16 ], "H5", 4.190f, -2.031f, -0.054f, 0.146f ); SetAtom(&F.Atoms[ 17 ], "C4", 4.311f, 0.154f, -0.115f, 0.834f ); SetAtom(&F.Atoms[ 18 ], "O4", 5.532f, 0.291f, -0.167f, -0.474f ); SetAtom(&F.Atoms[ 19 ], "N3", 3.476f, 1.373f, -0.002f, -0.768f ); SetAtom(&F.Atoms[ 20 ], "H3", 3.996f, 2.330f, -0.046f, 0.334f ); SetAtom(&F.Atoms[ 21 ], "C2", 2.103f, 1.246f, -0.001f, 0.775f ); SetAtom(&F.Atoms[ 22 ], "O", 1.368f, 2.216f, 0.091f, -0.472f ); SetAtom(&F.Atoms[ 23 ], "C3'", -1.871f, -1.464f, -0.028f, 0.303f ); SetAtom(&F.Atoms[ 24 ], "H3'", -2.275f, -2.474f, -0.109f, 0.007f ); SetAtom(&F.Atoms[ 25 ], "C2'", -0.605f, -1.139f, -0.823f, 0.101f ); SetAtom(&F.Atoms[ 26 ], "H2'", -0.294f, -2.017f, -1.387f, 0.008f ); SetAtom(&F.Atoms[ 27 ], "O2'", -0.873f, -0.064f, -1.726f, -0.546f ); SetAtom(&F.Atoms[ 28 ], "HO2", -1.320f, -0.403f, -2.505f, -0.324f ); SetAtom(&F.Atoms[ 29 ], "O3'", -2.909f, -0.632f, -0.521f, -0.509f ); } else if ( !strcmp(Name, "dURA") ) { F.NAtoms = 29 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "P", 0.131f, -4.768f, 1.425f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.136f, -5.477f, 1.136f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.327f, -5.260f, 0.705f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", -0.055f, -3.203f, 1.149f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -0.767f, -2.404f, 2.112f, 0.118f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.526f, -3.015f, 2.600f, 0.021f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -0.064f, -2.030f, 2.856f, 0.021f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.433f, -1.225f, 1.420f, 0.036f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.320f, -1.029f, 2.023f, 0.056f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.475f, -0.127f, 1.332f, -0.368f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.376f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.322f, 0.956f, -0.411f, 0.009f ); SetAtom(&F.Atoms[ 12 ], "N1", 1.531f, 0.000f, 0.000f, -0.159f ); SetAtom(&F.Atoms[ 13 ], "C6", 2.277f, -1.148f, -0.001f, 0.160f ); SetAtom(&F.Atoms[ 14 ], "H6", 1.789f, -2.110f, 0.000f, 0.098f ); SetAtom(&F.Atoms[ 15 ], "C5", 3.615f, -1.106f, -0.055f, -0.529f ); SetAtom(&F.Atoms[ 16 ], "H5", 4.190f, -2.031f, -0.054f, 0.146f ); SetAtom(&F.Atoms[ 17 ], "C4", 4.311f, 0.154f, -0.115f, 0.834f ); SetAtom(&F.Atoms[ 18 ], "O4", 5.532f, 0.291f, -0.167f, -0.474f ); SetAtom(&F.Atoms[ 19 ], "N3", 3.476f, 1.373f, -0.002f, -0.768f ); SetAtom(&F.Atoms[ 20 ], "H3", 3.996f, 2.330f, -0.046f, 0.334f ); SetAtom(&F.Atoms[ 21 ], "C2", 2.103f, 1.246f, -0.001f, 0.775f ); SetAtom(&F.Atoms[ 22 ], "O", 1.368f, 2.216f, 0.091f, -0.472f ); SetAtom(&F.Atoms[ 23 ], "C3'", -1.871f, -1.464f, -0.028f, 0.233f ); SetAtom(&F.Atoms[ 24 ], "H3'", -2.275f, -2.474f, -0.109f, 0.025f ); SetAtom(&F.Atoms[ 25 ], "C2'", -0.605f, -1.139f, -0.823f, -0.307f ); SetAtom(&F.Atoms[ 26 ], "H2'1", -0.294f, -2.017f, -1.387f, 0.081f ); SetAtom(&F.Atoms[ 27 ], "H2'2", -0.873f, -0.064f, -1.726f, 0.081f ); SetAtom(&F.Atoms[ 28 ], "O3'", -2.909f, -0.632f, -0.521f, -0.509f ); } else if ( !strcmp(Name, "rTHY") ) { F.NAtoms = 33 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "P", 0.131f, -4.768f, 1.425f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.136f, -5.477f, 1.136f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.327f, -5.260f, 0.705f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", -0.055f, -3.203f, 1.149f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -0.767f, -2.404f, 2.112f, 0.180f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.526f, -3.015f, 2.600f, 0.008f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -0.064f, -2.030f, 2.856f, 0.008f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.433f, -1.225f, 1.420f, 0.100f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.235f, -0.839f, 2.048f, 0.061f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.475f, -0.127f, 1.332f, -0.343f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.117f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.322f, 0.956f, -0.411f, 0.054f ); SetAtom(&F.Atoms[ 12 ], "N1", 1.531f, 0.000f, 0.000f, -0.217f ); SetAtom(&F.Atoms[ 13 ], "C6", 2.277f, -1.148f, -0.001f, 0.034f ); SetAtom(&F.Atoms[ 14 ], "H6", 1.789f, -2.110f, 0.000f, 0.134f ); SetAtom(&F.Atoms[ 15 ], "C5", 3.615f, -1.106f, -0.055f, -0.176f ); SetAtom(&F.Atoms[ 16 ], "C7", 4.443f, -2.357f, -0.055f, -0.382f ); SetAtom(&F.Atoms[ 17 ], "H71", 4.180f, -2.966f, -0.920f, 0.114f ); SetAtom(&F.Atoms[ 18 ], "H72", 5.500f, -2.095f, -0.104f, 0.114f ); SetAtom(&F.Atoms[ 19 ], "H73", 4.251f, -2.920f, 0.858f, 0.114f ); SetAtom(&F.Atoms[ 20 ], "C4", 4.311f, 0.154f, -0.115f, 0.809f ); SetAtom(&F.Atoms[ 21 ], "O4", 5.532f, 0.291f, -0.167f, -0.464f ); SetAtom(&F.Atoms[ 22 ], "N3", 3.476f, 1.373f, -0.002f, -0.851f ); SetAtom(&F.Atoms[ 23 ], "H3", 3.996f, 2.330f, -0.046f, 0.355f ); SetAtom(&F.Atoms[ 24 ], "C2", 2.103f, 1.246f, -0.001f, 0.849f ); SetAtom(&F.Atoms[ 25 ], "O", 1.368f, 2.216f, 0.091f, -0.488f ); SetAtom(&F.Atoms[ 26 ], "C3'", -1.871f, -1.464f, -0.028f, 0.303f ); SetAtom(&F.Atoms[ 27 ], "H3'", -2.275f, -2.474f, -0.109f, 0.007f ); SetAtom(&F.Atoms[ 28 ], "C2'", -0.605f, -1.139f, -0.823f, 0.101f ); SetAtom(&F.Atoms[ 29 ], "H2'", -0.294f, -2.017f, -1.387f, 0.008f ); SetAtom(&F.Atoms[ 30 ], "O2'", -0.873f, -0.064f, -1.726f, -0.546f ); SetAtom(&F.Atoms[ 31 ], "HO2", -1.320f, -0.403f, -2.505f, -0.324f ); SetAtom(&F.Atoms[ 32 ], "O3'", -2.909f, -0.632f, -0.521f, -0.509f ); } if ( ( !strcmp(Name, "r1MA") ) || ( !strcmp(Name, "d1MA") ) ) { if ( !strcmp(Name, "r1MA") ) { F.NAtoms = 37 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } else { F.NAtoms = 36 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } SetAtom(&F.Atoms[ 0 ], "P", 0.061f, 5.054f, 2.445f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.252f, 5.327f, 3.632f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.641f, 5.402f, 3.213f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", 0.026f, 3.350f, 1.898f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -1.321f, 2.971f, 1.607f, 0.180f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.936f, 3.099f, 2.497f, 0.008f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -1.704f, 3.602f, 0.804f, 0.008f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.370f, 1.523f, 1.163f, 0.100f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.435f, 1.359f, 0.998f, 0.061f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.517f, 1.321f, 0.000f, -0.343f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.117f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.348f, -0.526f, -0.889f, 0.054f ); SetAtom(&F.Atoms[ 12 ], "N9", 1.470f, 0.000f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 13 ], "C8", 2.442f, -1.174f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 14 ], "H8", 2.163f, -2.217f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 15 ], "N7", 3.713f, -0.696f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 16 ], "C5", 3.703f, 0.654f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 17 ], "C6", 4.788f, 1.524f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 18 ], "N6", 6.031f, 1.080f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 19 ], "H61", 6.212f, 0.086f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 20 ], "H62", 6.801f, 1.733f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 21 ], "N1", 4.515f, 2.824f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 22 ], "C1", 5.628f, 3.785f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 23 ], "H11", 6.238f, 3.633f, -0.894f ,0.000f ); SetAtom(&F.Atoms[ 24 ], "H12", 5.231f, 4.801f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 25 ], "H13", 6.239f, 3.634f, 0.886f ,0.000f ); SetAtom(&F.Atoms[ 26 ], "C2", 3.262f, 3.288f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 27 ], "H2", 3.101f, 4.356f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 28 ], "N3", 2.189f, 2.469f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 29 ], "C4", 2.427f, 1.158f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 30 ], "C3'", -0.833f, 0.500f, 2.166f, 0.303f ); SetAtom(&F.Atoms[ 31 ], "H3'", 0.020f, 0.890f, 2.720f, 0.007f ); SetAtom(&F.Atoms[ 32 ], "C2'", -0.554f, -0.685f, 1.245f, 0.101f ); if ( !strcmp(Name, "r1MA") ) { SetAtom(&F.Atoms[ 33 ], "H2'", -1.493f, -1.182f, 0.999f, 0.008f ); SetAtom(&F.Atoms[ 34 ], "O2'", 0.317f, -1.670f, 1.807f, -0.546f ); SetAtom(&F.Atoms[ 35 ], "HO2", -0.097f, -2.056f, 2.583f, -0.324f ); SetAtom(&F.Atoms[ 36 ], "O3'", -1.744f, 0.133f, 3.299f, -0.509f ); } else { SetAtom(&F.Atoms[ 33 ], "H2'1", -1.493f, -1.182f, 0.999f, 0.081f ); SetAtom(&F.Atoms[ 34 ], "H2'2", 0.317f, -1.670f, 1.807f, 0.081f ); SetAtom(&F.Atoms[ 35 ], "O3'", -1.744f, 0.133f, 3.299f, -0.509f ); } } else if ( ( !strcmp(Name, "r1MG") ) || ( !strcmp(Name, "d1MG") ) ) { if ( !strcmp(Name, "r1MG") ) { F.NAtoms = 37 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } else { F.NAtoms = 36 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } SetAtom(&F.Atoms[ 0 ], "P", 0.061f, 5.054f, 2.445f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.252f, 5.328f, 3.631f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.641f, 5.402f, 3.213f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", 0.026f, 3.350f, 1.898f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -1.321f, 2.971f, 1.607f, 0.180f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.936f, 3.099f, 2.497f, 0.008f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -1.704f, 3.602f, 0.804f, 0.008f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.370f, 1.523f, 1.163f, 0.100f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.435f, 1.359f, 0.998f, 0.061f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.517f, 1.321f, 0.000f, -0.343f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.117f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.348f, -0.526f, -0.889f, 0.054f ); SetAtom(&F.Atoms[ 12 ], "N9", 1.470f, 0.000f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 13 ], "C8", 2.263f, -1.078f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 14 ], "H8", 1.918f, -2.101f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 15 ], "N7", 3.542f, -0.703f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 16 ], "C5", 3.500f, 0.686f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 17 ], "C6", 4.571f, 1.661f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 18 ], "O6", 5.745f, 1.331f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 19 ], "N1", 4.198f, 2.935f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 20 ], "C1A", 5.231f, 3.981f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 21 ], "H11", 5.852f, 3.878f, -0.894f ,0.000f ); SetAtom(&F.Atoms[ 22 ], "H12", 4.755f, 4.961f, -0.004f ,0.000f ); SetAtom(&F.Atoms[ 23 ], "H13", 5.852f, 3.879f, 0.886f ,0.000f ); SetAtom(&F.Atoms[ 24 ], "C2", 2.910f, 3.296f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 25 ], "N2", 2.614f, 4.583f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 26 ], "H21", 3.353f, 5.271f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 27 ], "H22", 1.648f, 4.879f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 28 ], "N3", 1.914f, 2.413f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 29 ], "C4", 2.252f, 1.062f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 30 ], "C3'", -0.833f, 0.500f, 2.166f, 0.303f ); SetAtom(&F.Atoms[ 31 ], "H3'", 0.020f, 0.890f, 2.720f, 0.007f ); SetAtom(&F.Atoms[ 32 ], "C2'", -0.554f, -0.685f, 1.245f, 0.101f ); if ( !strcmp(Name, "r1MG") ) { SetAtom(&F.Atoms[ 33 ], "H2'", -1.493f, -1.182f, 0.999f, 0.008f ); SetAtom(&F.Atoms[ 34 ], "O2'", 0.317f, -1.670f, 1.807f, -0.546f ); SetAtom(&F.Atoms[ 35 ], "HO2", -0.097f, -2.056f, 2.583f, -0.324f ); SetAtom(&F.Atoms[ 36 ], "O3'", -1.744f, 0.133f, 3.299f, -0.509f ); } else { SetAtom(&F.Atoms[ 33 ], "H2'1", -1.493f, -1.182f, 0.999f, 0.081f ); SetAtom(&F.Atoms[ 34 ], "H2'2", 0.317f, -1.670f, 1.807f, 0.081f ); SetAtom(&F.Atoms[ 35 ], "O3'", -1.744f, 0.133f, 3.299f, -0.509f ); } } else if ( ( !strcmp(Name, "r2MG") ) || ( !strcmp(Name, "d2MG") ) ) { if ( !strcmp(Name, "r2MG") ) { F.NAtoms = 37 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } else { F.NAtoms = 36 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } SetAtom(&F.Atoms[ 0 ], "P", 0.061f, 5.054f, 2.445f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.252f, 5.328f, 3.631f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.641f, 5.402f, 3.213f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", 0.026f, 3.350f, 1.898f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -1.321f, 2.971f, 1.607f, 0.180f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.936f, 3.099f, 2.497f, 0.008f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -1.704f, 3.602f, 0.804f, 0.008f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.370f, 1.523f, 1.163f, 0.100f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.435f, 1.359f, 0.998f, 0.061f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.517f, 1.321f, 0.000f, -0.343f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.117f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.348f, -0.526f, -0.889f, 0.054f ); SetAtom(&F.Atoms[ 12 ], "N9", 1.470f, 0.000f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 13 ], "C8", 2.263f, -1.078f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 14 ], "H8", 1.918f, -2.101f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 15 ], "N7", 3.542f, -0.703f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 16 ], "C5", 3.500f, 0.686f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 17 ], "C6", 4.571f, 1.661f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 18 ], "O6", 5.745f, 1.331f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 19 ], "N1", 4.198f, 2.935f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 20 ], "H1", 4.907f, 3.654f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 21 ], "C2", 2.910f, 3.296f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 22 ], "N2", 2.614f, 4.583f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 23 ], "H2", 3.353f, 5.271f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 24 ], "C2A", 1.208f, 5.014f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 25 ], "H2A1", 1.162f, 6.103f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 26 ], "H2A2", 0.710f, 4.629f, -0.891f ,0.000f ); SetAtom(&F.Atoms[ 27 ], "H2A3", 0.711f, 4.629f, 0.888f ,0.000f ); SetAtom(&F.Atoms[ 28 ], "N3", 1.914f, 2.413f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 29 ], "C4", 2.252f, 1.062f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 30 ], "C3'", -0.833f, 0.500f, 2.166f, 0.303f ); SetAtom(&F.Atoms[ 31 ], "H3'", 0.020f, 0.890f, 2.720f, 0.007f ); SetAtom(&F.Atoms[ 32 ], "C2'", -0.554f, -0.685f, 1.245f, 0.101f ); if ( !strcmp(Name, "r2MG") ) { SetAtom(&F.Atoms[ 33 ], "H2'", -1.493f, -1.182f, 0.999f, 0.008f ); SetAtom(&F.Atoms[ 34 ], "O2'", 0.317f, -1.670f, 1.807f, -0.546f ); SetAtom(&F.Atoms[ 35 ], "HO2", -0.097f, -2.056f, 2.583f, -0.324f ); SetAtom(&F.Atoms[ 36 ], "O3'", -1.744f, 0.133f, 3.299f, -0.509f ); } else { SetAtom(&F.Atoms[ 33 ], "H2'1", -1.493f, -1.182f, 0.999f, 0.081f ); SetAtom(&F.Atoms[ 34 ], "H2'2", 0.317f, -1.670f, 1.807f, 0.081f ); SetAtom(&F.Atoms[ 35 ], "O3'", -1.744f, 0.133f, 3.299f, -0.509f ); } } if ( ( !strcmp(Name, "r5MC") ) || ( !strcmp(Name, "d5MC") ) ) { if ( !strcmp(Name, "r5MC") ) { F.NAtoms = 34 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } else { F.NAtoms = 33 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } SetAtom(&F.Atoms[ 0 ], "P", 0.061f, 5.054f, 2.446f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.252f, 5.327f, 3.632f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.641f, 5.401f, 3.214f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", 0.026f, 3.349f, 1.899f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -1.321f, 2.970f, 1.607f, 0.180f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.936f, 3.098f, 2.498f, 0.008f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -1.704f, 3.602f, 0.805f, 0.008f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.370f, 1.523f, 1.163f, 0.100f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.435f, 1.359f, 0.998f, 0.061f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.517f, 1.321f, 0.000f, -0.343f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.117f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.348f, -0.526f, -0.889f, 0.054f ); SetAtom(&F.Atoms[ 12 ], "N1", 1.470f, 0.000f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 13 ], "C6", 2.117f, -1.155f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 14 ], "H6", 1.559f, -2.080f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 15 ], "C5", 3.456f, -1.186f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 16 ], "C5A", 4.194f, -2.515f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 17 ], "H5A1", 3.921f, -3.083f, -0.892f ,0.000f ); SetAtom(&F.Atoms[ 18 ], "H5A2", 5.269f, -2.333f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 19 ], "H5A3", 3.923f, -3.083f, 0.889f ,0.000f ); SetAtom(&F.Atoms[ 20 ], "C4", 4.196f, 0.068f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 21 ], "N4", 5.515f, 0.075f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 22 ], "H41", 6.024f, -0.798f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 23 ], "H42", 6.016f, 0.952f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 24 ], "N3", 3.517f, 1.197f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 25 ], "C2", 2.116f, 1.155f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 26 ], "O2", 1.484f, 2.199f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 27 ], "C3'", -0.833f, 0.500f, 2.166f, 0.303f ); SetAtom(&F.Atoms[ 28 ], "H3'", 0.020f, 0.890f, 2.720f, 0.007f ); SetAtom(&F.Atoms[ 29 ], "C2'", -0.554f, -0.685f, 1.245f, 0.101f ); if ( !strcmp(Name, "r5MC") ) { SetAtom(&F.Atoms[ 30 ], "H2'", -1.493f, -1.182f, 0.999f, 0.008f ); SetAtom(&F.Atoms[ 31 ], "O2'", 0.317f, -1.670f, 1.807f, -0.546f ); SetAtom(&F.Atoms[ 32 ], "HO2", -0.097f, -2.057f, 2.583f, -0.324f ); SetAtom(&F.Atoms[ 33 ], "O3'", -1.744f, 0.132f, 3.299f, -0.509f ); } else{ SetAtom(&F.Atoms[ 30 ], "H2'1", -1.493f, -1.182f, 0.999f, 0.081f ); SetAtom(&F.Atoms[ 31 ], "H2'2", 0.317f, -1.670f, 1.807f, 0.081f ); SetAtom(&F.Atoms[ 32 ], "O3'", -1.744f, 0.132f, 3.299f, -0.509f ); } } else if ( ( !strcmp(Name, "r5MU") ) || ( !strcmp(Name, "d5MU") ) ) { if ( !strcmp(Name, "r5MU") ) { F.NAtoms = 33 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } else { F.NAtoms = 32 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } SetAtom(&F.Atoms[ 0 ], "P", 0.061f, 5.054f, 2.447f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.252f, 5.327f, 3.633f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.641f, 5.401f, 3.214f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", 0.026f, 3.349f, 1.899f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -1.321f, 2.970f, 1.607f, 0.180f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.936f, 3.098f, 2.498f, 0.008f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -1.704f, 3.602f, 0.805f, 0.008f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.370f, 1.523f, 1.164f, 0.100f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.435f, 1.359f, 0.999f, 0.061f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.517f, 1.321f, 0.001f, -0.343f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.117f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.348f, -0.526f, -0.889f, 0.054f ); SetAtom(&F.Atoms[ 12 ], "N1", 1.470f, 0.000f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 13 ], "C6", 2.116f, -1.153f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 14 ], "H6", 1.566f, -2.083f, 0.002f ,0.000f ); SetAtom(&F.Atoms[ 15 ], "C5", 3.452f, -1.167f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 16 ], "C5A", 4.221f, -2.479f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 17 ], "H5A1", 3.960f, -3.052f, -0.892f ,0.000f ); SetAtom(&F.Atoms[ 18 ], "H5A2", 3.961f, -3.052f, 0.888f ,0.000f ); SetAtom(&F.Atoms[ 19 ], "H5A3", 5.291f, -2.274f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 20 ], "C4", 4.153f, 0.108f, -0.005f ,0.000f ); SetAtom(&F.Atoms[ 21 ], "O4", 5.372f, 0.151f, -0.008f ,0.000f ); SetAtom(&F.Atoms[ 22 ], "N3", 3.438f, 1.216f, -0.004f ,0.000f ); SetAtom(&F.Atoms[ 23 ], "H3", 3.902f, 2.114f, -0.006f ,0.000f ); SetAtom(&F.Atoms[ 24 ], "C2", 2.117f, 1.157f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 25 ], "O2", 1.476f, 2.195f, 0.002f ,0.000f ); SetAtom(&F.Atoms[ 26 ], "C3'", -0.833f, 0.500f, 2.166f, 0.303f ); SetAtom(&F.Atoms[ 27 ], "H3'", 0.020f, 0.889f, 2.720f, 0.007f ); SetAtom(&F.Atoms[ 28 ], "C2'", -0.554f, -0.686f, 1.245f, 0.101f ); if ( !strcmp(Name, "r5MU") ) { SetAtom(&F.Atoms[ 29 ], "H2'", -1.493f, -1.182f, 0.999f, 0.008f ); SetAtom(&F.Atoms[ 30 ], "O2'", 0.317f, -1.670f, 1.807f, -0.546f ); SetAtom(&F.Atoms[ 31 ], "HO2", -0.097f, -2.057f, 2.583f, -0.324f ); SetAtom(&F.Atoms[ 32 ], "O3'", -1.744f, 0.132f, 3.299f, -0.509f ); } else{ SetAtom(&F.Atoms[ 29 ], "H2'1", -1.493f, -1.182f, 0.999f, 0.081f ); SetAtom(&F.Atoms[ 30 ], "H2'2", 0.317f, -1.670f, 1.807f, 0.081f ); SetAtom(&F.Atoms[ 31 ], "O3'", -1.744f, 0.132f, 3.299f, -0.509f ); } } if ( ( !strcmp(Name, "r7MG") ) || ( !strcmp(Name, "d7MG") ) ) { if ( !strcmp(Name, "r7MG") ) { F.NAtoms = 38 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } else { F.NAtoms = 37 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } SetAtom(&F.Atoms[ 0 ], "P", 0.061f, 5.053f, 2.447f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.252f, 5.326f, 3.633f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.641f, 5.401f, 3.215f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", 0.026f, 3.349f, 1.899f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -1.321f, 2.970f, 1.608f, 0.180f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.936f, 3.098f, 2.498f, 0.008f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -1.704f, 3.602f, 0.805f, 0.008f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.370f, 1.523f, 1.164f, 0.100f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.435f, 1.359f, 0.999f, 0.061f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.517f, 1.321f, 0.001f, -0.343f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.117f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.348f, -0.526f, -0.889f, 0.054f ); SetAtom(&F.Atoms[ 12 ], "N9", 1.470f, 0.000f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 13 ], "C8", 2.257f, -1.070f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 14 ], "H8", 1.942f, -2.103f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 15 ], "N7", 3.688f, -0.557f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 16 ], "C7", 4.938f, -1.331f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 17 ], "H71", 4.976f, -1.959f, -0.892f ,0.000f ); SetAtom(&F.Atoms[ 18 ], "H72", 5.788f, -0.648f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 19 ], "H73", 4.977f, -1.959f, 0.887f ,0.000f ); SetAtom(&F.Atoms[ 20 ], "C5", 3.534f, 0.746f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 21 ], "C6", 4.551f, 1.781f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 22 ], "O6", 5.740f, 1.510f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 23 ], "N1", 4.121f, 3.036f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 24 ], "H1", 4.797f, 3.785f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 25 ], "C2", 2.820f, 3.335f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 26 ], "N2", 2.464f, 4.607f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 27 ], "H21", 3.170f, 5.329f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 28 ], "H22", 1.486f, 4.857f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 29 ], "N3", 1.868f, 2.407f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 30 ], "C4", 2.254f, 1.067f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 31 ], "C3'", -0.833f, 0.500f, 2.166f, 0.303f ); SetAtom(&F.Atoms[ 32 ], "H3'", 0.020f, 0.889f, 2.720f, 0.007f ); SetAtom(&F.Atoms[ 33 ], "C2'", -0.554f, -0.686f, 1.245f, 0.101f ); if ( !strcmp(Name, "r7MG") ) { SetAtom(&F.Atoms[ 34 ], "H2'", -1.493f, -1.182f, 0.999f, 0.008f ); SetAtom(&F.Atoms[ 35 ], "O2'", 0.317f, -1.670f, 1.807f, -0.546f ); SetAtom(&F.Atoms[ 36 ], "HO2", -0.097f, -2.057f, 2.582f, -0.324f ); SetAtom(&F.Atoms[ 37 ], "O3'", -1.744f, 0.132f, 3.299f, -0.509f ); } else { SetAtom(&F.Atoms[ 34 ], "H2'1", -1.493f, -1.182f, 0.999f, 0.081f ); SetAtom(&F.Atoms[ 35 ], "H2'2", 0.317f, -1.670f, 1.807f, 0.081f ); SetAtom(&F.Atoms[ 36 ], "O3'", -1.744f, 0.132f, 3.299f, -0.509f ); } } else if ( !strcmp(Name, "rH2U") ) { F.NAtoms = 32 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "P", 0.061f, 5.053f, 2.448f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.252f, 5.326f, 3.635f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.641f, 5.400f, 3.216f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", 0.026f, 3.349f, 1.900f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -1.321f, 2.970f, 1.608f, 0.180f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.936f, 3.097f, 2.499f, 0.008f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -1.704f, 3.602f, 0.806f, 0.008f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.370f, 1.523f, 1.164f, 0.100f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.435f, 1.359f, 0.999f, 0.061f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.517f, 1.321f, 0.001f, -0.343f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.117f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.348f, -0.526f, -0.889f, 0.054f ); SetAtom(&F.Atoms[ 12 ], "C3'", -0.833f, 0.499f, 2.166f, 0.303f ); SetAtom(&F.Atoms[ 13 ], "H3'", 0.020f, 0.889f, 2.721f, 0.007f ); SetAtom(&F.Atoms[ 14 ], "C2'", -0.554f, -0.686f, 1.245f, 0.101f ); SetAtom(&F.Atoms[ 15 ], "H2'", -1.493f, -1.183f, 0.998f, 0.008f ); SetAtom(&F.Atoms[ 16 ], "O2'", 0.317f, -1.671f, 1.806f, -0.546f ); SetAtom(&F.Atoms[ 17 ], "HO2", -0.097f, -2.058f, 2.582f, -0.324f ); SetAtom(&F.Atoms[ 18 ], "O3'", -1.744f, 0.131f, 3.299f, -0.509f ); SetAtom(&F.Atoms[ 19 ], "N1", 1.470f, 0.000f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 20 ], "C6", 2.201f, -1.274f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 21 ], "H61", 1.550f, -2.075f, -0.352f ,0.000f ); SetAtom(&F.Atoms[ 22 ], "H62", 2.548f, -1.502f, 1.006f ,0.000f ); SetAtom(&F.Atoms[ 23 ], "C5", 3.401f, -1.125f, -0.946f ,0.000f ); SetAtom(&F.Atoms[ 24 ], "H51", 3.057f, -1.047f, -1.978f ,0.000f ); SetAtom(&F.Atoms[ 25 ], "H52", 4.062f, -1.986f, -0.847f ,0.000f ); SetAtom(&F.Atoms[ 26 ], "C4", 4.134f, 0.142f, -0.547f ,0.000f ); SetAtom(&F.Atoms[ 27 ], "O4", 5.353f, 0.183f, -0.581f ,0.000f ); SetAtom(&F.Atoms[ 28 ], "N3", 3.443f, 1.201f, -0.161f ,0.000f ); SetAtom(&F.Atoms[ 29 ], "H3", 3.928f, 2.070f, 0.013f ,0.000f ); SetAtom(&F.Atoms[ 30 ], "C2", 2.128f, 1.149f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 31 ], "O2", 1.508f, 2.187f, 0.152f ,0.000f ); } else if ( ( !strcmp(Name, "rI") ) || ( !strcmp(Name, "dI") ) ) { if ( !strcmp(Name, "rI") ) { F.NAtoms = 31 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } else { F.NAtoms = 30 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } SetAtom(&F.Atoms[ 0 ], "P", 0.061f, 5.054f, 2.445f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.252f, 5.328f, 3.631f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.641f, 5.402f, 3.213f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", 0.026f, 3.350f, 1.898f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -1.321f, 2.971f, 1.607f, 0.180f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.936f, 3.099f, 2.497f, 0.008f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -1.704f, 3.602f, 0.804f, 0.008f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.370f, 1.523f, 1.163f, 0.100f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.435f, 1.359f, 0.998f, 0.061f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.517f, 1.321f, 0.000f, -0.343f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.117f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.348f, -0.526f, -0.889f, 0.054f ); SetAtom(&F.Atoms[ 12 ], "N9", 1.470f, 0.000f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 13 ], "C8", 2.263f, -1.078f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 14 ], "H8", 1.918f, -2.101f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 15 ], "N7", 3.542f, -0.703f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 16 ], "C5", 3.500f, 0.686f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 17 ], "C6", 4.571f, 1.661f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 18 ], "O6", 5.745f, 1.331f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 19 ], "N1", 4.198f, 2.935f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 20 ], "H1", 4.907f, 3.654f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 21 ], "C2", 2.910f, 3.296f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 22 ], "N3", 1.914f, 2.413f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 23 ], "C4", 2.252f, 1.062f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 24 ], "C3'", -0.833f, 0.500f, 2.166f, 0.303f ); SetAtom(&F.Atoms[ 25 ], "H3'", 0.020f, 0.890f, 2.720f, 0.007f ); SetAtom(&F.Atoms[ 26 ], "C2'", -0.554f, -0.685f, 1.245f, 0.101f ); if ( !strcmp(Name, "rI") ) { SetAtom(&F.Atoms[ 27 ], "H2'", -1.493f, -1.182f, 0.999f, 0.008f ); SetAtom(&F.Atoms[ 28 ], "O2'", 0.317f, -1.670f, 1.807f, -0.546f ); SetAtom(&F.Atoms[ 29 ], "HO2", -0.097f, -2.056f, 2.583f, -0.324f ); SetAtom(&F.Atoms[ 30 ], "O3'", -1.744f, 0.133f, 3.299f, -0.509f ); } else { SetAtom(&F.Atoms[ 27 ], "H2'1", -1.493f, -1.182f, 0.999f, 0.081f ); SetAtom(&F.Atoms[ 28 ], "H2'2", 0.317f, -1.670f, 1.807f, 0.081f ); SetAtom(&F.Atoms[ 29 ], "O3'", -1.744f, 0.133f, 3.299f, -0.509f ); } } if ( ( !strcmp(Name, "rM2G") ) || ( !strcmp(Name, "dM2G") ) ) { if ( !strcmp(Name, "rM2G") ) { F.NAtoms = 40 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } else { F.NAtoms = 39 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } SetAtom(&F.Atoms[ 0 ], "P", 0.061f, 5.054f, 2.445f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.252f, 5.328f, 3.631f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.641f, 5.402f, 3.213f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", 0.026f, 3.350f, 1.898f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -1.321f, 2.971f, 1.607f, 0.180f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.936f, 3.099f, 2.497f, 0.008f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -1.704f, 3.602f, 0.804f, 0.008f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.370f, 1.523f, 1.163f, 0.100f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.435f, 1.359f, 0.998f, 0.061f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.517f, 1.321f, 0.000f, -0.343f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.117f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.348f, -0.526f, -0.889f, 0.054f ); SetAtom(&F.Atoms[ 12 ], "N9", 1.470f, 0.000f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 13 ], "C8", 2.263f, -1.078f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 14 ], "H8", 1.918f, -2.101f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 15 ], "N7", 3.542f, -0.703f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 16 ], "C5", 3.500f, 0.686f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 17 ], "C6", 4.571f, 1.661f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 18 ], "O6", 5.745f, 1.331f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 19 ], "N1", 4.198f, 2.935f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 20 ], "H1", 4.907f, 3.654f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 21 ], "C2", 2.910f, 3.296f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 22 ], "N2", 2.614f, 4.583f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 23 ], "C2A", 3.690f, 5.584f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 24 ], "H2A1", 3.256f, 6.585f, -0.004f ,0.000f ); SetAtom(&F.Atoms[ 25 ], "H2A2", 4.306f, 5.456f, 0.887f ,0.000f ); SetAtom(&F.Atoms[ 26 ], "H2A3", 4.305f, 5.456f, -0.893f ,0.000f ); SetAtom(&F.Atoms[ 27 ], "C2B", 1.208f, 5.014f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 28 ], "H2B1", 1.162f, 6.103f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 29 ], "H2B2", 0.710f, 4.629f, -0.891f ,0.000f ); SetAtom(&F.Atoms[ 30 ], "H2B3", 0.711f, 4.629f, 0.888f ,0.000f ); SetAtom(&F.Atoms[ 31 ], "N3", 1.914f, 2.413f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 32 ], "C4", 2.252f, 1.062f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 33 ], "C3'", -0.833f, 0.500f, 2.166f, 0.303f ); SetAtom(&F.Atoms[ 34 ], "H3'", 0.020f, 0.890f, 2.720f, 0.007f ); SetAtom(&F.Atoms[ 35 ], "C2'", -0.554f, -0.685f, 1.245f, 0.101f ); if ( !strcmp(Name, "rM2G") ) { SetAtom(&F.Atoms[ 36 ], "H2'", -1.493f, -1.182f, 0.999f, 0.008f ); SetAtom(&F.Atoms[ 37 ], "O2'", 0.317f, -1.670f, 1.807f, -0.546f ); SetAtom(&F.Atoms[ 38 ], "HO2", -0.097f, -2.056f, 2.583f, -0.324f ); SetAtom(&F.Atoms[ 39 ], "O3'", -1.744f, 0.133f, 3.299f, -0.509f ); } else { SetAtom(&F.Atoms[ 36 ], "H2'1", -1.493f, -1.182f, 0.999f, 0.081f ); SetAtom(&F.Atoms[ 37 ], "H2'2", 0.317f, -1.670f, 1.807f, 0.081f ); SetAtom(&F.Atoms[ 38 ], "O3'", -1.744f, 0.133f, 3.299f, -0.509f ); } } else if ( ( !strcmp(Name, "rOMC") ) || ( !strcmp(Name, "dOMC") ) ) { F.NAtoms = 34 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "P", 0.061f, 5.054f, 2.446f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.252f, 5.327f, 3.632f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.641f, 5.401f, 3.214f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", 0.026f, 3.349f, 1.899f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -1.321f, 2.970f, 1.607f, 0.180f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.936f, 3.098f, 2.498f, 0.008f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -1.704f, 3.602f, 0.805f, 0.008f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.370f, 1.523f, 1.163f, 0.100f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.435f, 1.359f, 0.998f, 0.061f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.517f, 1.321f, 0.000f, -0.343f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.117f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.348f, -0.526f, -0.889f, 0.054f ); SetAtom(&F.Atoms[ 12 ], "N1", 1.470f, 0.000f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 13 ], "C6", 2.117f, -1.155f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 14 ], "H6", 1.559f, -2.080f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 15 ], "C5", 3.456f, -1.186f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 16 ], "H5", 3.980f, -2.131f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 17 ], "C4", 4.196f, 0.068f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 18 ], "N4", 5.515f, 0.075f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 19 ], "H41", 6.024f, -0.798f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 20 ], "H42", 6.016f, 0.952f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 21 ], "N3", 3.517f, 1.197f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 22 ], "C2", 2.116f, 1.155f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 23 ], "O2", 1.421f, 2.301f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 24 ], "C3'", -0.833f, 0.500f, 2.166f, 0.303f ); SetAtom(&F.Atoms[ 25 ], "H3'", 0.020f, 0.890f, 2.720f, 0.007f ); SetAtom(&F.Atoms[ 26 ], "C2'", -0.554f, -0.685f, 1.245f, 0.101f ); SetAtom(&F.Atoms[ 27 ], "H2'", -1.493f, -1.182f, 0.999f, 0.008f ); SetAtom(&F.Atoms[ 28 ], "O2'", 0.317f, -1.670f, 1.807f ,0.000f ); SetAtom(&F.Atoms[ 29 ], "C2A", -0.299f, -2.246f, 2.963f ,0.000f ); SetAtom(&F.Atoms[ 30 ], "H2A1", 0.366f, -2.996f, 3.392f ,0.000f ); SetAtom(&F.Atoms[ 31 ], "H2A2", -0.488f, -1.465f, 3.700f ,0.000f ); SetAtom(&F.Atoms[ 32 ], "H2A3", -1.241f, -2.714f, 2.678f ,0.000f ); SetAtom(&F.Atoms[ 33 ], "O3'", -1.744f, 0.132f, 3.299f, -0.509f ); } if ( ( !strcmp(Name, "rOMG") ) || ( !strcmp(Name, "dOMG") ) ) { F.NAtoms = 37 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "P", 0.064f, 5.054f, 2.447f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.248f, 5.329f, 3.633f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.644f, 5.400f, 3.215f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", 0.028f, 3.351f, 1.899f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -1.320f, 2.973f, 1.607f, 0.180f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.934f, 3.101f, 2.498f, 0.008f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -1.701f, 3.604f, 0.805f, 0.008f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.369f, 1.524f, 1.163f, 0.100f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.434f, 1.362f, 0.998f, 0.061f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.516f, 1.322f, 0.000f, -0.343f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.117f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.347f, -0.525f, -0.889f, 0.054f ); SetAtom(&F.Atoms[ 12 ], "N9", 1.470f, 0.000f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 13 ], "C8", 2.263f, -1.078f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 14 ], "H8", 1.917f, -2.101f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 15 ], "N7", 3.543f, -0.705f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 16 ], "C5", 3.500f, 0.683f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 17 ], "C6", 4.572f, 1.659f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 18 ], "O6", 5.747f, 1.328f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 19 ], "N1", 4.199f, 2.933f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 20 ], "H1", 4.910f, 3.651f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 21 ], "C2", 2.912f, 3.296f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 22 ], "N2", 2.617f, 4.582f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 23 ], "H21", 3.357f, 5.270f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 24 ], "H22", 1.652f, 4.879f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 25 ], "N3", 1.916f, 2.413f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 26 ], "C4", 2.252f, 1.061f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 27 ], "C3'", -0.833f, 0.502f, 2.166f, 0.303f ); SetAtom(&F.Atoms[ 28 ], "H3'", 0.021f, 0.890f, 2.720f, 0.007f ); SetAtom(&F.Atoms[ 29 ], "C2'", -0.555f, -0.685f, 1.245f, 0.101f ); SetAtom(&F.Atoms[ 30 ], "H2'", -1.494f, -1.180f, 0.998f, 0.008f ); SetAtom(&F.Atoms[ 31 ], "O2'", 0.315f, -1.670f, 1.807f ,0.000f ); SetAtom(&F.Atoms[ 32 ], "C2A", -0.301f, -2.245f, 2.963f ,0.000f ); SetAtom(&F.Atoms[ 33 ], "H2A1", 0.363f, -2.997f, 3.391f ,0.000f ); SetAtom(&F.Atoms[ 34 ], "H2A2", -0.491f, -1.465f, 3.699f ,0.000f ); SetAtom(&F.Atoms[ 35 ], "H2A3", -1.243f, -2.712f, 2.677f ,0.000f ); SetAtom(&F.Atoms[ 36 ], "O3'", -1.745f, 0.134f, 3.299f, -0.509f ); } else if ( ( !strcmp(Name, "rPSU") ) || ( !strcmp(Name, "dPSU") ) ) { if ( !strcmp(Name, "rPSU") ) { F.NAtoms = 30 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } else { F.NAtoms = 29 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } SetAtom(&F.Atoms[ 0 ], "P", -1.472f, 4.834f, 2.447f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -2.806f, 4.697f, 3.634f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", -0.071f, 5.644f, 3.216f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", -0.990f, 3.200f, 1.900f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -2.159f, 2.431f, 1.608f, 0.180f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -2.783f, 2.366f, 2.498f, 0.008f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -2.714f, 2.917f, 0.805f, 0.008f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.767f, 1.037f, 1.163f, 0.100f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.733f, 0.558f, 0.998f, 0.061f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.893f, 1.103f, 0.001f, -0.343f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.117f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.172f, -0.606f, -0.889f, 0.054f ); SetAtom(&F.Atoms[ 12 ], "N1", 3.703f, 0.000f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 13 ], "H1", 4.453f, -0.676f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 14 ], "C6", 2.450f, -0.425f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 15 ], "H6", 2.238f, -1.483f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 16 ], "C5", 1.449f, 0.460f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 17 ], "C4", 1.783f, 1.876f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 18 ], "O4", 0.905f, 2.724f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 19 ], "N3", 3.055f, 2.221f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 20 ], "H3", 3.311f, 3.198f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 21 ], "C2", 3.996f, 1.292f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 22 ], "O2", 5.167f, 1.634f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 23 ], "C3'", -0.946f, 0.223f, 2.166f, 0.303f ); SetAtom(&F.Atoms[ 24 ], "H3'", -0.251f, 0.853f, 2.721f, 0.007f ); SetAtom(&F.Atoms[ 25 ], "C2'", -0.321f, -0.821f, 1.244f, 0.101f ); if ( !strcmp(Name, "rPSU") ) { SetAtom(&F.Atoms[ 26 ], "H2'", -1.065f, -1.579f, 0.998f, 0.008f ); SetAtom(&F.Atoms[ 27 ], "O2'", 0.807f, -1.496f, 1.807f, -0.546f ); SetAtom(&F.Atoms[ 28 ], "HO2", 0.530f, -1.990f, 2.582f, -0.324f ); SetAtom(&F.Atoms[ 29 ], "O3'", -1.703f, -0.403f, 3.299f, -0.509f ); } else { SetAtom(&F.Atoms[ 26 ], "H2'1", -1.065f, -1.579f, 0.998f, 0.081f ); SetAtom(&F.Atoms[ 27 ], "H2'2", 0.807f, -1.496f, 1.807f, 0.081f ); SetAtom(&F.Atoms[ 28 ], "O3'", -1.703f, -0.403f, 3.299f, -0.509f ); } } else if ( ( !strcmp(Name, "rY") ) || ( !strcmp(Name, "dY") ) ) { gint i = 0; if ( !strcmp(Name, "rY") ) { F.NAtoms = 66 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } else { F.NAtoms = 65 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); } SetAtom(&F.Atoms[ i++ ], "P", 0.061f, 5.054f, 2.446f, 1.385f ); SetAtom(&F.Atoms[ i++ ], "O1P", -1.252f, 5.327f, 3.633f, -0.847f ); SetAtom(&F.Atoms[ i++ ], "O2P", 1.641f, 5.401f, 3.214f, -0.847f ); SetAtom(&F.Atoms[ i++ ], "O5'", 0.026f, 3.349f, 1.899f, -0.509f ); SetAtom(&F.Atoms[ i++ ], "C5'", -1.321f, 2.970f, 1.607f, 0.180f ); SetAtom(&F.Atoms[ i++ ], "H5'1", -1.936f, 3.098f, 2.498f, 0.008f ); SetAtom(&F.Atoms[ i++ ], "H5'2", -1.704f, 3.602f, 0.805f, 0.008f ); SetAtom(&F.Atoms[ i++ ], "C4'", -1.370f, 1.523f, 1.163f, 0.100f ); SetAtom(&F.Atoms[ i++ ], "H4'", -2.435f, 1.359f, 0.999f, 0.061f ); SetAtom(&F.Atoms[ i++ ], "O4'", -0.517f, 1.321f, 0.001f, -0.343f ); SetAtom(&F.Atoms[ i++ ], "C1'", 0.000f, 0.000f, 0.000f, 0.117f ); SetAtom(&F.Atoms[ i++ ], "H1'", -0.348f, -0.526f, -0.889f, 0.054f ); SetAtom(&F.Atoms[ i++ ], "C3'", -0.833f, 0.500f, 2.166f, 0.303f ); SetAtom(&F.Atoms[ i++ ], "H3'", 0.020f, 0.890f, 2.720f, 0.007f ); SetAtom(&F.Atoms[ i++ ], "C2'", -0.554f, -0.686f, 1.245f, 0.101f ); if ( !strcmp(Name, "rY") ) { SetAtom(&F.Atoms[ i++ ], "H2'", -1.493f, -1.182f, 0.999f, 0.008f ); SetAtom(&F.Atoms[ i++ ], "O2'", 0.317f, -1.670f, 1.807f, -0.546f ); SetAtom(&F.Atoms[ i++ ], "HO2", -0.097f, -2.057f, 2.583f, -0.324f ); } else { SetAtom(&F.Atoms[ i++ ], "H2'1", -1.493f, -1.182f, 0.999f, 0.081f ); SetAtom(&F.Atoms[ i++ ], "H2'2", 0.317f, -1.670f, 1.807f, 0.081f ); } SetAtom(&F.Atoms[ i++ ], "O3'", -1.744f, 0.132f, 3.299f, -0.509f ); SetAtom(&F.Atoms[ i++ ], "N9", 1.470f, 0.000f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "C8", 2.413f, -1.192f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H8", 2.133f, -2.235f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "N7", 3.647f, -0.703f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H7", 4.502f, -1.240f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "C5", 3.549f, 0.617f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "C6", 4.637f, 1.582f, -0.006f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "O6", 5.814f, 1.259f, -0.004f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "N1", 4.235f, 2.838f, -0.011f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "C2", 2.963f, 3.181f, -0.012f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "N2", 2.857f, 4.492f, -0.025f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "N3", 1.961f, 2.312f, -0.005f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "C3", 0.559f, 2.753f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H31", 0.363f, 3.348f, -0.895f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H32", -0.095f, 1.881f, 0.003f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H33", 0.369f, 3.355f, 0.885f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "C4", 2.284f, 1.031f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "C10", 4.597f, 6.435f, -0.046f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H101", 4.205f, 6.936f, 0.839f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H102", 5.685f, 6.500f, -0.048f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H103", 4.203f, 6.918f, -0.940f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "C11", 4.177f, 4.975f, -0.032f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "C12", 5.002f, 3.911f, -0.022f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "C13", 6.523f, 3.941f, -0.024f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H131", 6.865f, 4.975f, -0.035f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H132", 6.896f, 3.443f, 0.870f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "C14", 7.047f, 3.212f, -1.275f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H141", 6.705f, 2.178f, -1.265f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H142", 6.674f, 3.710f, -2.170f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "C15", 8.588f, 3.242f, -1.278f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H15", 8.963f, 2.745f, -0.383f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "C16", 9.107f, 2.524f, -2.513f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "O17", 10.308f, 2.434f, -2.706f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "O18", 8.232f, 1.981f, -3.401f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "C19", 8.958f, 1.365f, -4.468f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H191", 8.257f, 0.931f, -5.181f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H192", 9.569f, 2.115f, -4.972f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H193", 9.600f, 0.583f, -4.067f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "N20", 9.050f, 4.638f, -1.291f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H20", 8.380f, 5.392f, -1.299f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "C21", 10.343f, 4.904f, -1.296f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "O22", 10.727f, 6.062f, -1.308f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "O23", 11.247f, 3.888f, -1.287f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "C24", 12.572f, 4.428f, -1.294f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H241", 13.296f, 3.613f, -1.288f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H242", 12.712f, 5.031f, -2.190f ,0.000f ); SetAtom(&F.Atoms[ i++ ], "H243", 12.715f, 5.049f, -0.410f ,0.000f ); } if ( !strcmp(Name, "dH2U") ) { F.NAtoms = 31 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "P", 0.061f, 5.053f, 2.448f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.252f, 5.326f, 3.635f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.641f, 5.400f, 3.216f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", 0.026f, 3.349f, 1.900f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -1.321f, 2.970f, 1.608f, 0.118f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.936f, 3.097f, 2.499f, 0.021f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -1.704f, 3.602f, 0.806f, 0.021f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.370f, 1.523f, 1.164f, 0.036f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.435f, 1.359f, 0.999f, 0.056f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.517f, 1.321f, 0.001f, -0.368f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.376f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.348f, -0.526f, -0.889f, 0.009f ); SetAtom(&F.Atoms[ 12 ], "C3'", -0.833f, 0.499f, 2.166f, 0.233f ); SetAtom(&F.Atoms[ 13 ], "H3'", 0.020f, 0.889f, 2.721f, 0.025f ); SetAtom(&F.Atoms[ 14 ], "C2'", -0.554f, -0.686f, 1.245f, -0.307f ); SetAtom(&F.Atoms[ 15 ], "H2'1", -1.493f, -1.183f, 0.998f, 0.081f ); SetAtom(&F.Atoms[ 16 ], "H2'2", 0.317f, -1.671f, 1.806f, 0.081f ); SetAtom(&F.Atoms[ 17 ], "O3'", -1.744f, 0.131f, 3.299f, -0.509f ); SetAtom(&F.Atoms[ 18 ], "N1", 1.470f, 0.000f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 19 ], "C6", 2.201f, -1.274f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 20 ], "H61", 1.550f, -2.075f, -0.352f ,0.000f ); SetAtom(&F.Atoms[ 21 ], "H62", 2.548f, -1.502f, 1.006f ,0.000f ); SetAtom(&F.Atoms[ 22 ], "C5", 3.401f, -1.125f, -0.946f ,0.000f ); SetAtom(&F.Atoms[ 23 ], "H51", 3.057f, -1.047f, -1.978f ,0.000f ); SetAtom(&F.Atoms[ 24 ], "H52", 4.062f, -1.986f, -0.847f ,0.000f ); SetAtom(&F.Atoms[ 25 ], "C4", 4.134f, 0.142f, -0.547f ,0.000f ); SetAtom(&F.Atoms[ 26 ], "O4", 5.353f, 0.183f, -0.581f ,0.000f ); SetAtom(&F.Atoms[ 27 ], "N3", 3.443f, 1.201f, -0.161f ,0.000f ); SetAtom(&F.Atoms[ 28 ], "H3", 3.928f, 2.070f, 0.013f ,0.000f ); SetAtom(&F.Atoms[ 29 ], "C2", 2.128f, 1.149f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 30 ], "O2", 1.508f, 2.187f, 0.152f ,0.000f ); } else if ( !strcmp(Name, "dY") ) { F.NAtoms = 65 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "P", 0.061f, 5.054f, 2.446f, 1.385f ); SetAtom(&F.Atoms[ 1 ], "O1P", -1.252f, 5.327f, 3.633f, -0.847f ); SetAtom(&F.Atoms[ 2 ], "O2P", 1.641f, 5.401f, 3.214f, -0.847f ); SetAtom(&F.Atoms[ 3 ], "O5'", 0.026f, 3.349f, 1.899f, -0.509f ); SetAtom(&F.Atoms[ 4 ], "C5'", -1.321f, 2.970f, 1.607f, 0.118f ); SetAtom(&F.Atoms[ 5 ], "H5'1", -1.936f, 3.098f, 2.498f, 0.021f ); SetAtom(&F.Atoms[ 6 ], "H5'2", -1.704f, 3.602f, 0.805f, 0.021f ); SetAtom(&F.Atoms[ 7 ], "C4'", -1.370f, 1.523f, 1.163f, 0.036f ); SetAtom(&F.Atoms[ 8 ], "H4'", -2.435f, 1.359f, 0.999f, 0.056f ); SetAtom(&F.Atoms[ 9 ], "O4'", -0.517f, 1.321f, 0.001f, -0.368f ); SetAtom(&F.Atoms[ 10 ], "C1'", 0.000f, 0.000f, 0.000f, 0.376f ); SetAtom(&F.Atoms[ 11 ], "H1'", -0.348f, -0.526f, -0.889f, 0.009f ); SetAtom(&F.Atoms[ 12 ], "C3'", -0.833f, 0.500f, 2.166f, 0.233f ); SetAtom(&F.Atoms[ 13 ], "H3'", 0.020f, 0.890f, 2.720f, 0.025f ); SetAtom(&F.Atoms[ 14 ], "C2'", -0.554f, -0.686f, 1.245f, -0.307f ); SetAtom(&F.Atoms[ 15 ], "H2'1", -1.493f, -1.182f, 0.999f, 0.081f ); SetAtom(&F.Atoms[ 16 ], "H2'2", 0.317f, -1.670f, 1.807f, 0.081f ); SetAtom(&F.Atoms[ 17 ], "O3'", -1.744f, 0.132f, 3.299f, -0.509f ); SetAtom(&F.Atoms[ 18 ], "N9", 1.470f, 0.000f, 0.000f ,0.000f ); SetAtom(&F.Atoms[ 19 ], "C8", 2.413f, -1.192f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 20 ], "H8", 2.133f, -2.235f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 21 ], "N7", 3.647f, -0.703f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 22 ], "H7", 4.502f, -1.240f, -0.002f ,0.000f ); SetAtom(&F.Atoms[ 23 ], "C5", 3.549f, 0.617f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 24 ], "C6", 4.637f, 1.582f, -0.006f ,0.000f ); SetAtom(&F.Atoms[ 25 ], "O6", 5.814f, 1.259f, -0.004f ,0.000f ); SetAtom(&F.Atoms[ 26 ], "N1", 4.235f, 2.838f, -0.011f ,0.000f ); SetAtom(&F.Atoms[ 27 ], "C2", 2.963f, 3.181f, -0.012f ,0.000f ); SetAtom(&F.Atoms[ 28 ], "N2", 2.857f, 4.492f, -0.025f ,0.000f ); SetAtom(&F.Atoms[ 29 ], "N3", 1.961f, 2.312f, -0.005f ,0.000f ); SetAtom(&F.Atoms[ 30 ], "C3", 0.559f, 2.753f, -0.003f ,0.000f ); SetAtom(&F.Atoms[ 31 ], "H31", 0.363f, 3.348f, -0.895f ,0.000f ); SetAtom(&F.Atoms[ 32 ], "H32", -0.095f, 1.881f, 0.003f ,0.000f ); SetAtom(&F.Atoms[ 33 ], "H33", 0.369f, 3.355f, 0.885f ,0.000f ); SetAtom(&F.Atoms[ 34 ], "C4", 2.284f, 1.031f, -0.001f ,0.000f ); SetAtom(&F.Atoms[ 35 ], "C10", 4.597f, 6.435f, -0.046f ,0.000f ); SetAtom(&F.Atoms[ 36 ], "H101", 4.205f, 6.936f, 0.839f ,0.000f ); SetAtom(&F.Atoms[ 37 ], "H102", 5.685f, 6.500f, -0.048f ,0.000f ); SetAtom(&F.Atoms[ 38 ], "H103", 4.203f, 6.918f, -0.940f ,0.000f ); SetAtom(&F.Atoms[ 39 ], "C11", 4.177f, 4.975f, -0.032f ,0.000f ); SetAtom(&F.Atoms[ 40 ], "C12", 5.002f, 3.911f, -0.022f ,0.000f ); SetAtom(&F.Atoms[ 41 ], "C13", 6.523f, 3.941f, -0.024f ,0.000f ); SetAtom(&F.Atoms[ 42 ], "H131", 6.865f, 4.975f, -0.035f ,0.000f ); SetAtom(&F.Atoms[ 43 ], "H132", 6.896f, 3.443f, 0.870f ,0.000f ); SetAtom(&F.Atoms[ 44 ], "C14", 7.047f, 3.212f, -1.275f ,0.000f ); SetAtom(&F.Atoms[ 45 ], "H141", 6.705f, 2.178f, -1.265f ,0.000f ); SetAtom(&F.Atoms[ 46 ], "H142", 6.674f, 3.710f, -2.170f ,0.000f ); SetAtom(&F.Atoms[ 47 ], "C15", 8.588f, 3.242f, -1.278f ,0.000f ); SetAtom(&F.Atoms[ 48 ], "H15", 8.963f, 2.745f, -0.383f ,0.000f ); SetAtom(&F.Atoms[ 49 ], "C16", 9.107f, 2.524f, -2.513f ,0.000f ); SetAtom(&F.Atoms[ 50 ], "O17", 10.308f, 2.434f, -2.706f ,0.000f ); SetAtom(&F.Atoms[ 51 ], "O18", 8.232f, 1.981f, -3.401f ,0.000f ); SetAtom(&F.Atoms[ 52 ], "C19", 8.958f, 1.365f, -4.468f ,0.000f ); SetAtom(&F.Atoms[ 53 ], "H191", 8.257f, 0.931f, -5.181f ,0.000f ); SetAtom(&F.Atoms[ 54 ], "H192", 9.569f, 2.115f, -4.972f ,0.000f ); SetAtom(&F.Atoms[ 55 ], "H193", 9.600f, 0.583f, -4.067f ,0.000f ); SetAtom(&F.Atoms[ 56 ], "N20", 9.050f, 4.638f, -1.291f ,0.000f ); SetAtom(&F.Atoms[ 57 ], "H20", 8.380f, 5.392f, -1.299f ,0.000f ); SetAtom(&F.Atoms[ 58 ], "C21", 10.343f, 4.904f, -1.296f ,0.000f ); SetAtom(&F.Atoms[ 59 ], "O22", 10.727f, 6.062f, -1.308f ,0.000f ); SetAtom(&F.Atoms[ 60 ], "O23", 11.247f, 3.888f, -1.287f ,0.000f ); SetAtom(&F.Atoms[ 61 ], "C24", 12.572f, 4.428f, -1.294f ,0.000f ); SetAtom(&F.Atoms[ 62 ], "H241", 13.296f, 3.613f, -1.288f ,0.000f ); SetAtom(&F.Atoms[ 63 ], "H242", 12.712f, 5.031f, -2.190f ,0.000f ); SetAtom(&F.Atoms[ 64 ], "H243", 12.715f, 5.049f, -0.410f ,0.000f ); } if(!strcmp(Name,"dADE")) SetResidue(&F,"DA3"); else if ( !strcmp(Name, "dCYT") ) SetResidue(&F,"DC3"); else if ( !strcmp(Name, "dTHY") ) SetResidue(&F,"DT3"); else if ( !strcmp(Name, "dGUA") ) SetResidue(&F,"DG3"); else if ( !strcmp(Name, "dURA") ) SetResidue(&F,"DU3"); else if ( !strcmp(Name, "rADE") ) SetResidue(&F,"RA3"); else if ( !strcmp(Name, "rCYT") ) SetResidue(&F,"RC3"); else if ( !strcmp(Name, "rGUA") ) SetResidue(&F,"RG3"); else if ( !strcmp(Name, "rTHY") ) SetResidue(&F,"RT3"); else if ( !strcmp(Name, "rURA") ) SetResidue(&F,"RU3"); else { for(i=1;i<(gint)strlen(Name);i++) T[i-1] = toupper(Name[i]); if(strlen(Name)-1>0) { T[strlen(Name)-1] ='\0'; SetResidue(&F,T); } else SetResidue(&F,"UNK"); } SetMMTypes(&F); return F; } GabeditSrc250/src/Geometry/Fragments.c0000644000175100017510000061403113130665226020155 0ustar alloucheallouche/* Fragments.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Common/GabeditType.h" #include "../Geometry/Fragments.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../MolecularMechanics/PDBTemplate.h" #include "../Geometry/DrawGeom.h" #include "../MolecularMechanics/CalculTypesAmber.h" #define ANG_TO_BOHR 1.0/0.52917726 #define BOHR_TO_ANG 0.52917726 /*****************************************************************/ void FreeFragment(Fragment* F) { gint i=0; if(F->NAtoms==0) return; for(i=0;iNAtoms;i++) { if(F->Atoms[i].Symb) g_free(F->Atoms[i].Symb); if(F->Atoms[i].mmType) g_free(F->Atoms[i].mmType); if(F->Atoms[i].pdbType) g_free(F->Atoms[i].pdbType); if(F->Atoms[i].Residue) g_free(F->Atoms[i].Residue); } g_free(F->Atoms); F->NAtoms = 0; F->Atoms = NULL; } /********************************************************************************/ static void SetResidue(Fragment* Frag,gchar* name) { gint i; for(i=0;iNAtoms;i++) Frag->Atoms[i].Residue = g_strdup(name); } /********************************************************************************/ static void SetMMTypes(Fragment* Frag) { gint i; gchar* residue = NULL; gdouble charge; if(Frag->NAtoms<1) return; residue = Frag->Atoms[0].Residue; for(i=0;iNAtoms;i++) { if(Frag->Atoms[i].mmType) g_free(Frag->Atoms[i].mmType); Frag->Atoms[i].mmType = getMMTypeFromPDBTpl(residue, Frag->Atoms[i].pdbType,&charge); if(strcmp(Frag->Atoms[i].mmType,"UNK")) Frag->Atoms[i].Charge = charge; } for(i=0;iNAtoms;i++) if(!strcmp(Frag->Atoms[i].mmType,"UNK")) break; if(i!=Frag->NAtoms) calculTypesAmberForAFragment(Frag); } /*****************************************************************/ static void SetAtom(Atom* A,gchar* symb,gdouble x,gdouble y,gdouble z) { gchar Forbidden[]={'0','1','2','3','4','5','6','7','8','9'}; A->mmType = g_strdup(symb); A->pdbType = g_strdup(symb); if(strlen(symb)==1) A->Symb = g_strdup(symb); else { gint Ok = 1; gint i; for(i=0;i<10;i++) if(symb[1]== Forbidden[i]) { Ok =0; break; } if(Ok==1) { A->Symb = g_strdup_printf("%c%c",toupper(symb[0]),tolower(symb[1])); } else A->Symb = g_strdup_printf("%c",toupper(symb[0])); } if(!strcmp(A->Symb,"Hh") || !strcmp(A->Symb,"Oh") ) A->Symb = g_strdup_printf("%c",toupper(symb[0])); if(!strcmp(A->Symb,"Hw") || !strcmp(A->Symb,"Ow") ) A->Symb = g_strdup_printf("%c",toupper(symb[0])); A->Coord[0] = (gdouble)x*(gdouble)ANG_TO_BOHR; A->Coord[1] = (gdouble)y*(gdouble)ANG_TO_BOHR; A->Coord[2] = (gdouble)z*(gdouble)ANG_TO_BOHR; A->Charge = 0.0; } /*****************************************************************/ void CenterFrag(Fragment* F) { float C[3]={0,0,0}; int i,j; if(F->NAtoms<=0) return; for(i=0;i<3;i++) for(j=0;jNAtoms;j++) C[i] += F->Atoms[j].Coord[i]; for(i=0;i<3;i++) C[i] /=F->NAtoms; for(i=0;i<3;i++) for(j=0;jNAtoms;j++) F->Atoms[j].Coord[i] -= C[i]; } /********************************************************************************/ gint AddHToAtomPDB(Fragment* Frag, gchar* pdb) { gint i; gint j; gint C = -1; gint O = -1; gdouble V[3] = {0,0,0}; SAtomsProp* props = NULL; SAtomsProp propH; gdouble d; gdouble a; gdouble norm; gdouble rcut; if(Frag->NAtoms<1) return -1; for(i=0;iNAtoms;i++) { if(Frag->Atoms[i].pdbType && !strcmp(Frag->Atoms[i].pdbType,pdb)) { C = i; break; } } if(C==-1) return -1; props = g_malloc(Frag->NAtoms*sizeof(SAtomsProp)); for(i=0;iNAtoms;i++) props[i] = prop_atom_get(Frag->Atoms[i].Symb); propH = prop_atom_get("H"); for(i=0;iNAtoms;i++) { d = 0; for(j=0;j<3;j++) { a = Frag->Atoms[C].Coord[j]-Frag->Atoms[i].Coord[j]; d += a*a; } rcut = props[C].covalentRadii+props[i].covalentRadii; rcut = rcut* rcut; if(d<=rcut) { norm = 0; for(j=0;j<3;j++) { a = Frag->Atoms[C].Coord[j]-Frag->Atoms[i].Coord[j]; norm += a*a; } if(norm>1e-10) norm = 1/sqrt(norm); for(j=0;j<3;j++) { a = Frag->Atoms[C].Coord[j]-Frag->Atoms[i].Coord[j]; V[j] += a*norm; } } } norm = 0; for(j=0;j<3;j++) norm += V[j]*V[j]; if(norm<1e-10) { for(j=0;j<3;j++) V[j] = rand()/(gdouble)RAND_MAX-0.5; norm = 0; for(j=0;j<3;j++) norm += V[j]*V[j]; } if(norm>1e-10) norm = 1/sqrt(norm); norm *=(props[C].covalentRadii+propH.covalentRadii)*0.5*BOHR_TO_ANG; for(j=0;j<3;j++) V[j] *= norm; for(j=0;j<3;j++) V[j] +=Frag->Atoms[C].Coord[j]*BOHR_TO_ANG; Frag->NAtoms++; Frag->Atoms = g_realloc(Frag->Atoms,Frag->NAtoms*sizeof(Atom)); i = Frag->NAtoms-1; SetAtom(&Frag->Atoms[i],"H", (gdouble)(V[0]), (gdouble)(V[1]), (gdouble)(V[2]) ); Frag->Atoms[i].Residue = g_strdup(Frag->Atoms[C].Residue); if(props) for(i=0;iNAtoms-1;i++) { if(props[i].name) g_free(props[i].name); if(props[i].symbol) g_free(props[i].symbol); } if(props) g_free(props); if(propH.name) g_free(propH.name); if(propH.symbol) g_free(propH.symbol); Frag->atomToDelete = Frag->NAtoms-1; Frag->atomToBondTo = C; for(i=0;iNAtoms;i++) { if(i==C) continue; if(Frag->Atoms[i].Symb && !strcmp(Frag->Atoms[i].Symb,"H")) continue; d = 0; for(j=0;j<3;j++) { a = Frag->Atoms[C].Coord[j]-Frag->Atoms[i].Coord[j]; d += a*a; } rcut = props[C].covalentRadii+props[i].covalentRadii; rcut = rcut*rcut; if(d<=rcut) { O = i; if(Frag->Atoms[i].pdbType && !strcmp(Frag->Atoms[i].pdbType,"O")) break; } } Frag->angleAtom = O; return Frag->NAtoms-1; } /*****************************************************************/ Fragment GetFragment(gchar* Name) { Fragment F; gchar T[100]="UNK"; gint i; F.NAtoms = 0; F.Atoms = NULL; if ( !strcmp(Name, "Acid Anhydride" ) ) { F.NAtoms =7 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GANH"); SetAtom(&F.Atoms[ 0 ] , "C1", 4.996f, 1.858f, -8.663f ); SetAtom(&F.Atoms[ 1 ] , "O2", 6.185f, 1.875f, -8.348f ); SetAtom(&F.Atoms[ 2 ] , "O3", 4.400f, 0.684f, -9.004f ); SetAtom(&F.Atoms[ 3 ] , "C4", 5.307f, -0.326f, -8.925f ); SetAtom(&F.Atoms[ 4 ] , "O5", 6.464f, -0.088f, -8.584f ); SetAtom(&F.Atoms[ 5 ] , "H11", 4.431f, 2.767f, -8.668f ); SetAtom(&F.Atoms[ 6 ] , "H41", 5.013f, -1.328f, -9.160f ); F.atomToDelete = 5; F.atomToBondTo = 0; F.angleAtom = 2; } else if ( !strcmp(Name, "Aldehyde" ) ) { F.NAtoms =4 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GALD"); SetAtom(&F.Atoms[ 0 ] , "C1", 3.450f, 0.774f, -9.239f ); SetAtom(&F.Atoms[ 1 ] , "O2", 4.639f, 0.791f, -8.925f ); SetAtom(&F.Atoms[ 2 ] , "H11", 2.972f, -0.166f, -9.513f ); SetAtom(&F.Atoms[ 3 ] , "H12", 2.885f, 1.683f, -9.245f ); F.atomToDelete = 3; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Amide" ) ){ F.NAtoms =4; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GAMD"); SetAtom(&F.Atoms[ 0 ] , "N1", 3.975f, 0.737f, -8.798f ); SetAtom(&F.Atoms[ 1 ] , "H11", 4.979f, 0.953f, -8.799f ); SetAtom(&F.Atoms[ 2 ] , "H12", 3.618f, -0.044f, -9.359f ); SetAtom(&F.Atoms[ 3 ] , "H13", 3.330f, 1.303f, -8.236f ); F.atomToDelete = 3; F.atomToBondTo = 0; F.angleAtom = 2; } else if ( !strcmp(Name, "Amine" ) ) { F.NAtoms = 4; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GAMN"); SetAtom(&F.Atoms[ 0 ] , "N1", 4.030f, 0.810f, -9.087f ); SetAtom(&F.Atoms[ 1 ] , "H11", 5.007f, 0.824f, -8.828f ); SetAtom(&F.Atoms[ 2 ] , "H12", 3.754f, -0.136f, -9.308f ); SetAtom(&F.Atoms[ 3 ] , "H13", 3.473f, 1.152f, -8.317f ); F.atomToDelete = 3; F.atomToBondTo = 0; F.angleAtom = 2; } else if ( !strcmp(Name, "Isopropyl" ) ) { F.NAtoms = 11; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GIPP"); SetAtom(&F.Atoms[ 0 ] , "H",-2.026358f,-0.863664f,0.000860f); SetAtom(&F.Atoms[ 1 ] , "H",-0.613329f,-1.465632f,0.893451f); SetAtom(&F.Atoms[ 2 ] , "H",-0.601007f,-1.455971f,-0.878523f); SetAtom(&F.Atoms[ 3 ] , "C",-0.932741f,-0.903367f,0.007574f); SetAtom(&F.Atoms[ 4 ] , "C",-0.336419f,0.507577f,0.007574f); SetAtom(&F.Atoms[ 5 ] , "H",-0.741680f,1.117072f,0.821854f); SetAtom(&F.Atoms[ 6 ] , "H",-0.692521f,1.044680f,-0.876150f); SetAtom(&F.Atoms[ 7 ] , "C",1.195365f,0.507577f,0.007574f); SetAtom(&F.Atoms[ 8 ] , "H",1.575231f,-0.013116f,-0.878523f); SetAtom(&F.Atoms[ 9 ] , "H",1.588926f,-0.005526f,0.893451f); SetAtom(&F.Atoms[ 10 ] , "H",1.584538f,1.530375f,0.000861f); F.atomToDelete =6; F.atomToBondTo =4; F.angleAtom =7; } else if ( !strcmp(Name, "Carboxylate" ) ) { F.NAtoms =4; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GCXT"); SetAtom(&F.Atoms[ 0 ] , "C1", 9.131f, 1.248f, -7.673f ); SetAtom(&F.Atoms[ 1 ] , "O2", 10.445f, 1.266f, -7.325f ); SetAtom(&F.Atoms[ 2 ] , "O3", 8.534f, 0.074f, -8.014f ); SetAtom(&F.Atoms[ 3 ] , "H11", 8.566f, 2.156f, -7.678f ); F.atomToDelete = 3; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Carboxylic Acid" ) ) { F.NAtoms =5; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GCXA"); SetAtom(&F.Atoms[ 0 ] , "C1", 6.536f, 1.243f, -8.355f ); SetAtom(&F.Atoms[ 1 ] , "O2", 7.725f, 1.260f, -8.040f ); SetAtom(&F.Atoms[ 2 ] , "O3", 5.939f, 0.070f, -8.697f ); SetAtom(&F.Atoms[ 3 ] , "H11", 5.971f, 2.152f, -8.360f ); SetAtom(&F.Atoms[ 4 ] , "H31", 6.580f, -0.643f, -8.641f ); F.atomToDelete = 3; F.atomToBondTo = 0; F.angleAtom = 2; } else if ( !strcmp(Name, "Hydroxy" ) ) { F.NAtoms =3; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GHDX"); SetAtom(&F.Atoms[ 0 ] , "OH", 4.013f, 0.831f, -9.083f ); SetAtom(&F.Atoms[ 1 ] , "HH1", 4.941f, 0.844f, -8.837f ); SetAtom(&F.Atoms[ 2 ] , "HH2", 3.750f, -0.068f, -9.293f ); F.atomToDelete = 2; F.atomToBondTo = 0; } else if ( !strcmp(Name, "Methoxy" ) ) { F.NAtoms =6; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GMTX"); SetAtom(&F.Atoms[ 0 ] , "O1", 3.177f, 0.623f, -8.490f ); SetAtom(&F.Atoms[ 1 ] , "C2", 4.559f, 0.642f, -8.124f ); SetAtom(&F.Atoms[ 2 ] , "H11", 2.820f, 1.513f, -8.443f ); SetAtom(&F.Atoms[ 3 ] , "H21", 4.967f, -0.378f, -8.177f ); SetAtom(&F.Atoms[ 4 ] , "H22", 5.113f, 1.295f, -8.815f ); SetAtom(&F.Atoms[ 5 ] , "H23", 4.662f, 1.025f, -7.097f ); F.atomToDelete = 2; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( ( !strcmp(Name, "Methyl" ) ) ) { F.NAtoms =5; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GMTL"); SetAtom(&F.Atoms[ 0 ] , "C1", 3.875f, 0.678f, -8.417f ); SetAtom(&F.Atoms[ 1 ] , "H11", 3.800f, 1.690f, -8.076f ); SetAtom(&F.Atoms[ 2 ] , "H12", 4.907f, 0.410f, -8.516f ); SetAtom(&F.Atoms[ 3 ] , "H13", 3.406f, 0.026f, -7.711f ); SetAtom(&F.Atoms[ 4 ] , "H14", 3.389f, 0.583f, -9.366f ); F.atomToDelete = 4; F.atomToBondTo = 0; F.angleAtom = 1; } else if (( !strcmp(Name, "Methane" ) ) ) { F.NAtoms =5; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GMTL"); SetAtom(&F.Atoms[ 0 ] , "C1", 3.875f, 0.678f, -8.417f ); SetAtom(&F.Atoms[ 1 ] , "H11", 3.800f, 1.690f, -8.076f ); SetAtom(&F.Atoms[ 2 ] , "H12", 4.907f, 0.410f, -8.516f ); SetAtom(&F.Atoms[ 3 ] , "H13", 3.406f, 0.026f, -7.711f ); SetAtom(&F.Atoms[ 4 ] , "H14", 3.389f, 0.583f, -9.366f ); F.atomToDelete = 4; F.atomToBondTo = 0; F.angleAtom = 1; } if ( !strcmp(Name, "Nitrile" ) ) { F.NAtoms =3; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GNIL"); SetAtom(&F.Atoms[ 0 ] , "C1", 3.506f, 0.774f, -9.225f ); SetAtom(&F.Atoms[ 1 ] , "N2", 4.628f, 0.790f, -8.928f ); SetAtom(&F.Atoms[ 2 ] , "H11", 2.482f, 0.760f, -9.496f ); F.atomToDelete = 2; F.atomToBondTo = 0; } else if ( !strcmp(Name, "Nitroso" ) ) { F.NAtoms =3; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GNIS"); SetAtom(&F.Atoms[ 0 ] , "N1", 3.470f, 0.802f, -9.230f ); SetAtom(&F.Atoms[ 1 ] , "O2", 4.621f, 0.818f, -8.925f ); SetAtom(&F.Atoms[ 2 ] , "H11", 3.027f, -0.070f, -9.483f ); F.atomToDelete = 2; F.atomToBondTo = 0; } else if ( !strcmp(Name, "Nitro" ) ) { F.NAtoms =4; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GNIO"); SetAtom(&F.Atoms[ 0 ] , "N1", 10.980f, 1.214f, -7.193f ); SetAtom(&F.Atoms[ 1 ] , "O2", 12.149f, 1.231f, -6.883f ); SetAtom(&F.Atoms[ 2 ] , "O3", 10.449f, 0.170f, -7.496f ); SetAtom(&F.Atoms[ 3 ] , "H11", 10.446f, 2.072f, -7.198f ); F.atomToDelete = 3; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Thiol" ) ) { F.NAtoms =3; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GTHL"); SetAtom(&F.Atoms[ 0 ] , "C", -1.444f, 0.079f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "S", -1.396f, 1.890f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "H", -2.720f, 2.065f, 0.000f ); F.atomToDelete = 0; F.atomToBondTo = 1; F.angleAtom = 2; } else if ( !strcmp(Name, "Ethane" ) ) { F.NAtoms =8; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GETH"); SetAtom(&F.Atoms[ 0 ] , "C1", 3.108f, 0.653f, -8.526f ); SetAtom(&F.Atoms[ 1 ] , "C2", 4.597f, 0.674f, -8.132f ); SetAtom(&F.Atoms[ 2 ] , "H11", 2.815f, -0.349f, -8.761f ); SetAtom(&F.Atoms[ 3 ] , "H12", 2.517f, 1.015f, -7.711f ); SetAtom(&F.Atoms[ 4 ] , "H13", 2.956f, 1.278f, -9.381f ); SetAtom(&F.Atoms[ 5 ] , "H21", 4.748f, 0.049f, -7.277f ); SetAtom(&F.Atoms[ 6 ] , "H22", 5.187f, 0.312f, -8.947f ); SetAtom(&F.Atoms[ 7 ] , "H23", 4.890f, 1.676f, -7.897f ); F.atomToDelete = 4; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Ethylene" ) ) { F.NAtoms =6; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GETL"); SetAtom(&F.Atoms[ 0 ] , "C1", 3.402f, 0.773f, -9.252f ); SetAtom(&F.Atoms[ 1 ] , "C2", 4.697f, 0.791f, -8.909f ); SetAtom(&F.Atoms[ 2 ] , "H11", 2.933f, -0.150f, -9.521f ); SetAtom(&F.Atoms[ 3 ] , "H12", 2.837f, 1.682f, -9.258f ); SetAtom(&F.Atoms[ 4 ] , "H21", 5.262f, -0.118f, -8.904f ); SetAtom(&F.Atoms[ 5 ] , "H22", 5.167f, 1.714f, -8.641f ); F.atomToDelete = 3; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Propane" ) ) { F.NAtoms =11; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GPPN"); SetAtom(&F.Atoms[ 0 ] , "C1", 2.709f, 1.156f, -8.689f ); SetAtom(&F.Atoms[ 1 ] , "C2", 4.198f, 1.177f, -8.295f ); SetAtom(&F.Atoms[ 2 ] , "C3", 4.770f, -0.251f, -8.369f ); SetAtom(&F.Atoms[ 3 ] , "H11", 2.171f, 0.522f, -8.017f ); SetAtom(&F.Atoms[ 4 ] , "H13", 2.312f, 2.149f, -8.637f ); SetAtom(&F.Atoms[ 5 ] , "H12", 2.609f, 0.785f, -9.687f ); SetAtom(&F.Atoms[ 6 ] , "H21", 4.736f, 1.812f, -8.967f ); SetAtom(&F.Atoms[ 7 ] , "H22", 4.298f, 1.549f, -7.296f ); SetAtom(&F.Atoms[ 8 ] , "H31", 5.804f, -0.236f, -8.095f ); SetAtom(&F.Atoms[ 9 ] , "H32", 4.232f, -0.886f, -7.697f ); SetAtom(&F.Atoms[ 10 ] , "H33", 4.671f, -0.623f, -9.368f ); F.atomToDelete = 4; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Propylene" ) ) { F.NAtoms =9; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GPPL"); SetAtom(&F.Atoms[ 0 ] , "C1", 5.705f, 1.171f, -7.853f ); SetAtom(&F.Atoms[ 1 ] , "C2", 7.000f, 1.189f, -7.509f ); SetAtom(&F.Atoms[ 2 ] , "C3", 7.808f, -0.110f, -7.502f ); SetAtom(&F.Atoms[ 3 ] , "H11", 5.235f, 0.247f, -8.121f ); SetAtom(&F.Atoms[ 4 ] , "H12", 5.140f, 2.079f, -7.858f ); SetAtom(&F.Atoms[ 5 ] , "H21", 7.469f, 2.112f, -7.241f ); SetAtom(&F.Atoms[ 6 ] , "H31", 7.178f, -0.924f, -7.795f ); SetAtom(&F.Atoms[ 7 ] , "H32", 8.625f, -0.027f, -8.188f ); SetAtom(&F.Atoms[ 8 ] , "H33", 8.186f, -0.290f, -6.517f ); F.atomToDelete = 4; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "cis-Butane" ) ) { F.NAtoms =14; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GSBN"); SetAtom(&F.Atoms[ 0 ] , "C", -0.064f, -0.757f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C", -0.064f, 0.783f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C", -1.516f, 1.296f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C", -2.484f, 0.098f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "H", 0.963f, -1.120f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "H", -0.578f, -1.120f, 0.890f ); SetAtom(&F.Atoms[ 6 ] , "H", -0.578f, -1.120f, -0.890f ); SetAtom(&F.Atoms[ 7 ] , "H", 0.449f, 1.146f, 0.890f ); SetAtom(&F.Atoms[ 8 ] , "H", 0.450f, 1.146f, -0.890f ); SetAtom(&F.Atoms[ 9 ] , "H", -1.688f, 1.902f, 0.890f ); SetAtom(&F.Atoms[ 10 ] , "H", -1.688f, 1.902f, -0.890f ); SetAtom(&F.Atoms[ 11 ] , "H", -3.512f, 0.462f, 0.000f ); SetAtom(&F.Atoms[ 12 ] , "H", -2.313f, -0.507f, -0.890f ); SetAtom(&F.Atoms[ 13 ] , "H", -2.313f, -0.507f, 0.890f ); F.atomToDelete = 4; F.atomToBondTo = 0; F.angleAtom = 1; } if ( !strcmp(Name, "trans-Butane" ) ) { F.NAtoms =14; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GTBN"); SetAtom(&F.Atoms[ 0 ] , "C1", 2.142f, 1.395f, -8.932f ); SetAtom(&F.Atoms[ 1 ] , "C2", 3.631f, 1.416f, -8.537f ); SetAtom(&F.Atoms[ 2 ] , "C3", 4.203f, -0.012f, -8.612f ); SetAtom(&F.Atoms[ 3 ] , "C4", 5.691f, 0.009f, -8.218f ); SetAtom(&F.Atoms[ 4 ] , "H11", 1.604f, 0.760f, -8.260f ); SetAtom(&F.Atoms[ 5 ] , "H13", 1.745f, 2.388f, -8.880f ); SetAtom(&F.Atoms[ 6 ] , "H12", 2.043f, 1.024f, -9.930f ); SetAtom(&F.Atoms[ 7 ] , "H21", 4.169f, 2.051f, -9.210f ); SetAtom(&F.Atoms[ 8 ] , "H22", 3.731f, 1.788f, -7.539f ); SetAtom(&F.Atoms[ 9 ] , "H31", 3.665f, -0.647f, -7.940f ); SetAtom(&F.Atoms[ 10 ] , "H32", 4.104f, -0.384f, -9.610f ); SetAtom(&F.Atoms[ 11 ] , "H41", 6.088f, -0.983f, -8.270f ); SetAtom(&F.Atoms[ 12 ] , "H42", 5.791f, 0.381f, -7.220f ); SetAtom(&F.Atoms[ 13 ] , "H43", 6.230f, 0.644f, -8.890f ); F.atomToDelete = 5; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Butadiene" ) ) { F.NAtoms =10; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GBDN"); SetAtom(&F.Atoms[ 0 ] , "C1", 2.351f, 1.413f, -9.428f ); SetAtom(&F.Atoms[ 1 ] , "C2", 3.646f, 1.432f, -9.085f ); SetAtom(&F.Atoms[ 2 ] , "C3", 4.454f, 0.132f, -9.077f ); SetAtom(&F.Atoms[ 3 ] , "C4", 5.749f, 0.151f, -8.734f ); SetAtom(&F.Atoms[ 4 ] , "H11", 1.881f, 0.490f, -9.696f ); SetAtom(&F.Atoms[ 5 ] , "H12", 1.786f, 2.322f, -9.433f ); SetAtom(&F.Atoms[ 6 ] , "H21", 4.115f, 2.355f, -8.816f ); SetAtom(&F.Atoms[ 7 ] , "H31", 3.984f, -0.791f, -9.346f ); SetAtom(&F.Atoms[ 8 ] , "H41", 6.314f, -0.758f, -8.729f ); SetAtom(&F.Atoms[ 9 ] , "H42", 6.218f, 1.074f, -8.465f ); F.atomToDelete = 5; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Hexane" ) ) { F.NAtoms =20; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GHXN"); SetAtom(&F.Atoms[ 0 ] , "C", -0.124f, -2.470f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C", -0.124f, -0.930f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C", -1.576f, -0.417f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C", -1.576f, 1.123f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C", -3.028f, 1.636f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "C", -3.028f, 3.176f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "H", 0.903f, -2.834f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H", -0.638f, -2.834f, 0.890f ); SetAtom(&F.Atoms[ 8 ] , "H", -0.638f, -2.834f, -0.890f ); SetAtom(&F.Atoms[ 9 ] , "H", 0.389f, -0.567f, 0.890f ); SetAtom(&F.Atoms[ 10 ] , "H", 0.389f, -0.567f, -0.890f ); SetAtom(&F.Atoms[ 11 ] , "H", -2.090f, -0.780f, -0.890f ); SetAtom(&F.Atoms[ 12 ] , "H", -2.090f, -0.780f, 0.890f ); SetAtom(&F.Atoms[ 13 ] , "H", -1.063f, 1.486f, 0.890f ); SetAtom(&F.Atoms[ 14 ] , "H", -1.063f, 1.486f, -0.890f ); SetAtom(&F.Atoms[ 15 ] , "H", -3.542f, 1.273f, -0.890f ); SetAtom(&F.Atoms[ 16 ] , "H", -3.542f, 1.273f, 0.890f ); SetAtom(&F.Atoms[ 17 ] , "H", -4.056f, 3.540f, 0.000f ); SetAtom(&F.Atoms[ 18 ] , "H", -2.514f, 3.540f, 0.890f ); SetAtom(&F.Atoms[ 19 ] , "H", -2.514f, 3.540f, -0.890f ); F.atomToDelete = 6; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Heptane" ) ) { F.NAtoms =23; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GHPN"); SetAtom(&F.Atoms[ 0 ] , "C", -0.265f, -2.359f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C", -0.265f, -0.819f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C", -1.717f, -0.305f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C", -1.717f, 1.235f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C", -3.169f, 1.748f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "C", -3.169f, 3.288f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "C", 1.187f, -2.872f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H", -0.779f, -2.722f, 0.890f ); SetAtom(&F.Atoms[ 8 ] , "H", -0.779f, -2.722f, -0.890f ); SetAtom(&F.Atoms[ 9 ] , "H", 0.249f, -0.455f, 0.890f ); SetAtom(&F.Atoms[ 10 ] , "H", 0.249f, -0.455f, -0.890f ); SetAtom(&F.Atoms[ 11 ] , "H", -2.231f, -0.669f, -0.890f ); SetAtom(&F.Atoms[ 12 ] , "H", -2.231f, -0.669f, 0.890f ); SetAtom(&F.Atoms[ 13 ] , "H", -1.203f, 1.598f, 0.890f ); SetAtom(&F.Atoms[ 14 ] , "H", -1.203f, 1.598f, -0.890f ); SetAtom(&F.Atoms[ 15 ] , "H", -3.682f, 1.385f, -0.890f ); SetAtom(&F.Atoms[ 16 ] , "H", -3.682f, 1.385f, 0.890f ); SetAtom(&F.Atoms[ 17 ] , "H", -4.196f, 3.651f, 0.000f ); SetAtom(&F.Atoms[ 18 ] , "H", -2.655f, 3.651f, 0.890f ); SetAtom(&F.Atoms[ 19 ] , "H", -2.655f, 3.651f, -0.890f ); SetAtom(&F.Atoms[ 20 ] , "H", 1.187f, -3.962f, 0.000f ); SetAtom(&F.Atoms[ 21 ] , "H", 1.701f, -2.509f, -0.890f ); SetAtom(&F.Atoms[ 22 ] , "H", 1.701f, -2.509f, 0.890f ); F.atomToDelete = 20; F.atomToBondTo = 6; F.angleAtom = 0; } if ( !strcmp(Name, "Octane" ) ) { F.NAtoms =26; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GOCN"); SetAtom(&F.Atoms[ 0 ] , "C", -0.324f, -2.196f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C", -0.324f, -0.656f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C", -1.776f, -0.142f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C", -1.776f, 1.398f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C", -3.228f, 1.911f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "C", -3.228f, 3.451f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "C", 1.128f, -2.709f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H", -0.838f, -2.559f, 0.890f ); SetAtom(&F.Atoms[ 8 ] , "H", -0.838f, -2.559f, -0.890f ); SetAtom(&F.Atoms[ 9 ] , "H", 0.190f, -0.292f, 0.890f ); SetAtom(&F.Atoms[ 10 ] , "H", 0.190f, -0.292f, -0.890f ); SetAtom(&F.Atoms[ 11 ] , "H", -2.290f, -0.506f, -0.890f ); SetAtom(&F.Atoms[ 12 ] , "H", -2.290f, -0.506f, 0.890f ); SetAtom(&F.Atoms[ 13 ] , "H", -1.262f, 1.761f, 0.890f ); SetAtom(&F.Atoms[ 14 ] , "H", -1.262f, 1.761f, -0.890f ); SetAtom(&F.Atoms[ 15 ] , "H", -3.742f, 1.548f, -0.890f ); SetAtom(&F.Atoms[ 16 ] , "H", -3.742f, 1.548f, 0.890f ); SetAtom(&F.Atoms[ 17 ] , "H", -4.256f, 3.814f, 0.000f ); SetAtom(&F.Atoms[ 18 ] , "H", -2.714f, 3.814f, 0.890f ); SetAtom(&F.Atoms[ 19 ] , "H", -2.714f, 3.814f, -0.890f ); SetAtom(&F.Atoms[ 20 ] , "C", 1.128f, -4.249f, 0.000f ); SetAtom(&F.Atoms[ 21 ] , "H", 1.642f, -2.346f, -0.890f ); SetAtom(&F.Atoms[ 22 ] , "H", 1.642f, -2.346f, 0.890f ); SetAtom(&F.Atoms[ 23 ] , "H", 2.156f, -4.612f, 0.000f ); SetAtom(&F.Atoms[ 24 ] , "H", 0.614f, -4.612f, 0.890f ); SetAtom(&F.Atoms[ 25 ] , "H", 0.614f, -4.612f, -0.890f ); F.atomToDelete = 23; F.atomToBondTo = 20; F.angleAtom = 6; } else if ( !strcmp(Name, "Nonane" ) ) { F.NAtoms =29; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GNNN"); SetAtom(&F.Atoms[ 0 ] , "C", -0.451f, -2.085f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C", -0.451f, -0.545f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C", -1.903f, -0.031f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C", -1.903f, 1.509f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C", -3.355f, 2.022f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "C", -3.355f, 3.562f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "C", 1.001f, -2.598f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H", -0.965f, -2.448f, 0.890f ); SetAtom(&F.Atoms[ 8 ] , "H", -0.965f, -2.448f, -0.890f ); SetAtom(&F.Atoms[ 9 ] , "H", 0.063f, -0.181f, 0.890f ); SetAtom(&F.Atoms[ 10 ] , "H", 0.063f, -0.181f, -0.890f ); SetAtom(&F.Atoms[ 11 ] , "H", -2.417f, -0.395f, -0.890f ); SetAtom(&F.Atoms[ 12 ] , "H", -2.417f, -0.395f, 0.890f ); SetAtom(&F.Atoms[ 13 ] , "H", -1.389f, 1.872f, 0.890f ); SetAtom(&F.Atoms[ 14 ] , "H", -1.389f, 1.872f, -0.890f ); SetAtom(&F.Atoms[ 15 ] , "H", -3.868f, 1.659f, -0.890f ); SetAtom(&F.Atoms[ 16 ] , "H", -3.868f, 1.659f, 0.890f ); SetAtom(&F.Atoms[ 17 ] , "H", -4.382f, 3.925f, 0.000f ); SetAtom(&F.Atoms[ 18 ] , "H", -2.841f, 3.925f, 0.890f ); SetAtom(&F.Atoms[ 19 ] , "H", -2.841f, 3.925f, -0.890f ); SetAtom(&F.Atoms[ 20 ] , "C", 1.001f, -4.138f, 0.000f ); SetAtom(&F.Atoms[ 21 ] , "H", 1.515f, -2.235f, -0.890f ); SetAtom(&F.Atoms[ 22 ] , "H", 1.515f, -2.235f, 0.890f ); SetAtom(&F.Atoms[ 23 ] , "C", 2.453f, -4.651f, 0.000f ); SetAtom(&F.Atoms[ 24 ] , "H", 0.487f, -4.501f, 0.890f ); SetAtom(&F.Atoms[ 25 ] , "H", 0.487f, -4.501f, -0.890f ); SetAtom(&F.Atoms[ 26 ] , "H", 2.453f, -5.741f, 0.000f ); SetAtom(&F.Atoms[ 27 ] , "H", 2.967f, -4.288f, -0.890f ); SetAtom(&F.Atoms[ 28 ] , "H", 2.967f, -4.288f, 0.890f ); F.atomToDelete = 17; F.atomToBondTo = 5; F.angleAtom = 4; } else if ( !strcmp(Name, "Decane" ) ) { F.NAtoms =32; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GDCN"); SetAtom(&F.Atoms[ 0 ] , "C", -0.514f, -1.932f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C", -0.514f, -0.392f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C", -1.966f, 0.121f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C", -1.966f, 1.661f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C", -3.418f, 2.175f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "C", -3.418f, 3.715f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "C", 0.938f, -2.445f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H", -1.028f, -2.295f, 0.890f ); SetAtom(&F.Atoms[ 8 ] , "H", -1.028f, -2.295f, -0.890f ); SetAtom(&F.Atoms[ 9 ] , "H", 0.000f, -0.029f, 0.890f ); SetAtom(&F.Atoms[ 10 ] , "H", 0.000f, -0.029f, -0.890f ); SetAtom(&F.Atoms[ 11 ] , "H", -2.480f, -0.242f, -0.890f ); SetAtom(&F.Atoms[ 12 ] , "H", -2.480f, -0.242f, 0.890f ); SetAtom(&F.Atoms[ 13 ] , "H", -1.452f, 2.025f, 0.890f ); SetAtom(&F.Atoms[ 14 ] , "H", -1.452f, 2.025f, -0.890f ); SetAtom(&F.Atoms[ 15 ] , "H", -3.931f, 1.811f, -0.890f ); SetAtom(&F.Atoms[ 16 ] , "H", -3.932f, 1.811f, 0.890f ); SetAtom(&F.Atoms[ 17 ] , "H", -4.445f, 4.078f, 0.000f ); SetAtom(&F.Atoms[ 18 ] , "H", -2.904f, 4.078f, 0.890f ); SetAtom(&F.Atoms[ 19 ] , "H", -2.904f, 4.078f, -0.890f ); SetAtom(&F.Atoms[ 20 ] , "C", 0.938f, -3.985f, 0.000f ); SetAtom(&F.Atoms[ 21 ] , "H", 1.452f, -2.082f, -0.890f ); SetAtom(&F.Atoms[ 22 ] , "H", 1.452f, -2.082f, 0.890f ); SetAtom(&F.Atoms[ 23 ] , "C", 2.390f, -4.499f, 0.000f ); SetAtom(&F.Atoms[ 24 ] , "H", 0.424f, -4.349f, 0.890f ); SetAtom(&F.Atoms[ 25 ] , "H", 0.424f, -4.349f, -0.890f ); SetAtom(&F.Atoms[ 26 ] , "C", 2.390f, -6.039f, 0.000f ); SetAtom(&F.Atoms[ 27 ] , "H", 2.904f, -4.135f, -0.890f ); SetAtom(&F.Atoms[ 28 ] , "H", 2.904f, -4.135f, 0.890f ); SetAtom(&F.Atoms[ 29 ] , "H", 3.418f, -6.402f, 0.000f ); SetAtom(&F.Atoms[ 30 ] , "H", 1.876f, -6.402f, 0.890f ); SetAtom(&F.Atoms[ 31 ] , "H", 1.876f, -6.402f, -0.890f ); F.atomToDelete = 17; F.atomToBondTo = 5; F.angleAtom = 4; } if ( !strcmp(Name, "Undecane" ) ) { F.NAtoms =35; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GUCN"); SetAtom(&F.Atoms[ 0 ] , "C", -0.632f, -1.821f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C", -0.632f, -0.281f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C", -2.084f, 0.232f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C", -2.084f, 1.772f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C", -3.536f, 2.286f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "C", -3.536f, 3.826f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "C", 0.820f, -2.334f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H", -1.146f, -2.184f, 0.890f ); SetAtom(&F.Atoms[ 8 ] , "H", -1.146f, -2.184f, -0.890f ); SetAtom(&F.Atoms[ 9 ] , "H", -0.118f, 0.082f, 0.890f ); SetAtom(&F.Atoms[ 10 ] , "H", -0.118f, 0.082f, -0.890f ); SetAtom(&F.Atoms[ 11 ] , "H", -2.598f, -0.131f, -0.890f ); SetAtom(&F.Atoms[ 12 ] , "H", -2.598f, -0.131f, 0.890f ); SetAtom(&F.Atoms[ 13 ] , "H", -1.570f, 2.136f, 0.890f ); SetAtom(&F.Atoms[ 14 ] , "H", -1.570f, 2.136f, -0.890f ); SetAtom(&F.Atoms[ 15 ] , "H", -4.050f, 1.922f, -0.890f ); SetAtom(&F.Atoms[ 16 ] , "H", -4.050f, 1.922f, 0.890f ); SetAtom(&F.Atoms[ 17 ] , "H", -4.563f, 4.189f, 0.000f ); SetAtom(&F.Atoms[ 18 ] , "H", -3.022f, 4.189f, 0.890f ); SetAtom(&F.Atoms[ 19 ] , "H", -3.022f, 4.189f, -0.890f ); SetAtom(&F.Atoms[ 20 ] , "C", 0.820f, -3.874f, 0.000f ); SetAtom(&F.Atoms[ 21 ] , "H", 1.334f, -1.971f, -0.890f ); SetAtom(&F.Atoms[ 22 ] , "H", 1.334f, -1.971f, 0.890f ); SetAtom(&F.Atoms[ 23 ] , "C", 2.272f, -4.388f, 0.000f ); SetAtom(&F.Atoms[ 24 ] , "H", 0.306f, -4.238f, 0.890f ); SetAtom(&F.Atoms[ 25 ] , "H", 0.306f, -4.238f, -0.890f ); SetAtom(&F.Atoms[ 26 ] , "C", 2.272f, -5.928f, 0.000f ); SetAtom(&F.Atoms[ 27 ] , "H", 2.786f, -4.024f, -0.890f ); SetAtom(&F.Atoms[ 28 ] , "H", 2.786f, -4.024f, 0.890f ); SetAtom(&F.Atoms[ 29 ] , "C", 3.724f, -6.441f, 0.000f ); SetAtom(&F.Atoms[ 30 ] , "H", 1.758f, -6.291f, 0.890f ); SetAtom(&F.Atoms[ 31 ] , "H", 1.758f, -6.291f, -0.890f ); SetAtom(&F.Atoms[ 32 ] , "H", 3.724f, -7.531f, 0.000f ); SetAtom(&F.Atoms[ 33 ] , "H", 4.238f, -6.078f, -0.890f ); SetAtom(&F.Atoms[ 34 ] , "H", 4.238f, -6.078f, 0.890f ); F.atomToDelete = 17; F.atomToBondTo = 5; F.angleAtom = 4; } else if ( !strcmp(Name, "Dodecane" ) ) { F.NAtoms =38; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GDON"); SetAtom(&F.Atoms[ 0 ] , "C", -0.697f, -1.676f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C", -0.697f, -0.136f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C", -2.149f, 0.378f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C", -2.149f, 1.918f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C", -3.601f, 2.431f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "C", -3.601f, 3.971f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "C", 0.754f, -2.189f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H", -1.211f, -2.039f, 0.890f ); SetAtom(&F.Atoms[ 8 ] , "H", -1.211f, -2.039f, -0.890f ); SetAtom(&F.Atoms[ 9 ] , "H", -0.184f, 0.228f, 0.890f ); SetAtom(&F.Atoms[ 10 ] , "H", -0.184f, 0.228f, -0.890f ); SetAtom(&F.Atoms[ 11 ] , "H", -2.663f, 0.014f, -0.890f ); SetAtom(&F.Atoms[ 12 ] , "H", -2.663f, 0.014f, 0.890f ); SetAtom(&F.Atoms[ 13 ] , "H", -1.636f, 2.281f, 0.890f ); SetAtom(&F.Atoms[ 14 ] , "H", -1.636f, 2.281f, -0.890f ); SetAtom(&F.Atoms[ 15 ] , "H", -4.115f, 2.068f, -0.890f ); SetAtom(&F.Atoms[ 16 ] , "H", -4.115f, 2.068f, 0.890f ); SetAtom(&F.Atoms[ 17 ] , "H", -4.629f, 4.334f, 0.000f ); SetAtom(&F.Atoms[ 18 ] , "H", -3.087f, 4.334f, 0.890f ); SetAtom(&F.Atoms[ 19 ] , "H", -3.087f, 4.334f, -0.890f ); SetAtom(&F.Atoms[ 20 ] , "C", 0.754f, -3.729f, 0.000f ); SetAtom(&F.Atoms[ 21 ] , "H", 1.268f, -1.826f, -0.890f ); SetAtom(&F.Atoms[ 22 ] , "H", 1.268f, -1.826f, 0.890f ); SetAtom(&F.Atoms[ 23 ] , "C", 2.206f, -4.242f, 0.000f ); SetAtom(&F.Atoms[ 24 ] , "H", 0.241f, -4.092f, 0.890f ); SetAtom(&F.Atoms[ 25 ] , "H", 0.241f, -4.092f, -0.890f ); SetAtom(&F.Atoms[ 26 ] , "C", 2.206f, -5.782f, 0.000f ); SetAtom(&F.Atoms[ 27 ] , "H", 2.720f, -3.879f, -0.890f ); SetAtom(&F.Atoms[ 28 ] , "H", 2.720f, -3.879f, 0.890f ); SetAtom(&F.Atoms[ 29 ] , "C", 3.658f, -6.296f, 0.000f ); SetAtom(&F.Atoms[ 30 ] , "H", 1.693f, -6.146f, 0.890f ); SetAtom(&F.Atoms[ 31 ] , "H", 1.693f, -6.146f, -0.890f ); SetAtom(&F.Atoms[ 32 ] , "C", 3.658f, -7.836f, 0.000f ); SetAtom(&F.Atoms[ 33 ] , "H", 4.172f, -5.932f, -0.890f ); SetAtom(&F.Atoms[ 34 ] , "H", 4.172f, -5.932f, 0.890f ); SetAtom(&F.Atoms[ 35 ] , "H", 4.686f, -8.199f, 0.000f ); SetAtom(&F.Atoms[ 36 ] , "H", 3.145f, -8.199f, 0.890f ); SetAtom(&F.Atoms[ 37 ] , "H", 3.144f, -8.199f, -0.890f ); F.atomToDelete = 17; F.atomToBondTo = 5; F.angleAtom = 4; } else if ( !strcmp(Name, "Tridecane" ) ) { F.NAtoms =41; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GTDN"); SetAtom(&F.Atoms[ 0 ] , "C", -0.809f, -1.565f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C", -0.809f, -0.025f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C", -2.261f, 0.489f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C", -2.261f, 2.029f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C", -3.713f, 2.542f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "C", -3.713f, 4.082f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "C", 0.643f, -2.078f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H", -1.323f, -1.928f, 0.890f ); SetAtom(&F.Atoms[ 8 ] , "H", -1.323f, -1.928f, -0.890f ); SetAtom(&F.Atoms[ 9 ] , "H", -0.296f, 0.339f, 0.890f ); SetAtom(&F.Atoms[ 10 ] , "H", -0.296f, 0.339f, -0.890f ); SetAtom(&F.Atoms[ 11 ] , "H", -2.775f, 0.125f, -0.890f ); SetAtom(&F.Atoms[ 12 ] , "H", -2.775f, 0.125f, 0.890f ); SetAtom(&F.Atoms[ 13 ] , "H", -1.748f, 2.392f, 0.890f ); SetAtom(&F.Atoms[ 14 ] , "H", -1.748f, 2.392f, -0.890f ); SetAtom(&F.Atoms[ 15 ] , "H", -4.227f, 2.179f, -0.890f ); SetAtom(&F.Atoms[ 16 ] , "H", -4.227f, 2.179f, 0.890f ); SetAtom(&F.Atoms[ 17 ] , "H", -4.741f, 4.445f, 0.000f ); SetAtom(&F.Atoms[ 18 ] , "H", -3.199f, 4.445f, 0.890f ); SetAtom(&F.Atoms[ 19 ] , "H", -3.199f, 4.445f, -0.890f ); SetAtom(&F.Atoms[ 20 ] , "C", 0.643f, -3.618f, 0.000f ); SetAtom(&F.Atoms[ 21 ] , "H", 1.156f, -1.715f, -0.890f ); SetAtom(&F.Atoms[ 22 ] , "H", 1.156f, -1.715f, 0.890f ); SetAtom(&F.Atoms[ 23 ] , "C", 2.094f, -4.131f, 0.000f ); SetAtom(&F.Atoms[ 24 ] , "H", 0.129f, -3.981f, 0.890f ); SetAtom(&F.Atoms[ 25 ] , "H", 0.129f, -3.981f, -0.890f ); SetAtom(&F.Atoms[ 26 ] , "C", 2.094f, -5.671f, 0.000f ); SetAtom(&F.Atoms[ 27 ] , "H", 2.608f, -3.768f, -0.890f ); SetAtom(&F.Atoms[ 28 ] , "H", 2.608f, -3.768f, 0.890f ); SetAtom(&F.Atoms[ 29 ] , "C", 3.546f, -6.185f, 0.000f ); SetAtom(&F.Atoms[ 30 ] , "H", 1.581f, -6.035f, 0.890f ); SetAtom(&F.Atoms[ 31 ] , "H", 1.581f, -6.035f, -0.890f ); SetAtom(&F.Atoms[ 32 ] , "C", 3.546f, -7.725f, 0.000f ); SetAtom(&F.Atoms[ 33 ] , "H", 4.060f, -5.821f, -0.890f ); SetAtom(&F.Atoms[ 34 ] , "H", 4.060f, -5.821f, 0.890f ); SetAtom(&F.Atoms[ 35 ] , "C", 4.998f, -8.238f, 0.000f ); SetAtom(&F.Atoms[ 36 ] , "H", 3.033f, -8.088f, 0.890f ); SetAtom(&F.Atoms[ 37 ] , "H", 3.033f, -8.088f, -0.890f ); SetAtom(&F.Atoms[ 38 ] , "H", 4.998f, -9.328f, 0.000f ); SetAtom(&F.Atoms[ 39 ] , "H", 5.512f, -7.875f, -0.890f ); SetAtom(&F.Atoms[ 40 ] , "H", 5.512f, -7.875f, 0.890f ); F.atomToDelete = 17; F.atomToBondTo = 5; F.angleAtom = 4; } else if ( !strcmp(Name, "Tetradecane" ) ) { F.NAtoms =44; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GTTN"); SetAtom(&F.Atoms[ 0 ] , "C", -0.877f, -1.424f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C", -0.877f, 0.116f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C", -2.329f, 0.629f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C", -2.329f, 2.169f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C", -3.781f, 2.682f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "C", -3.781f, 4.222f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "C", 0.575f, -1.938f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H", -1.391f, -1.788f, 0.890f ); SetAtom(&F.Atoms[ 8 ] , "H", -1.391f, -1.788f, -0.890f ); SetAtom(&F.Atoms[ 9 ] , "H", -0.363f, 0.479f, 0.890f ); SetAtom(&F.Atoms[ 10 ] , "H", -0.363f, 0.479f, -0.890f ); SetAtom(&F.Atoms[ 11 ] , "H", -2.843f, 0.266f, -0.890f ); SetAtom(&F.Atoms[ 12 ] , "H", -2.843f, 0.266f, 0.890f ); SetAtom(&F.Atoms[ 13 ] , "H", -1.815f, 2.532f, 0.890f ); SetAtom(&F.Atoms[ 14 ] , "H", -1.815f, 2.532f, -0.890f ); SetAtom(&F.Atoms[ 15 ] , "H", -4.295f, 2.319f, -0.890f ); SetAtom(&F.Atoms[ 16 ] , "H", -4.295f, 2.319f, 0.890f ); SetAtom(&F.Atoms[ 17 ] , "H", -4.808f, 4.586f, 0.000f ); SetAtom(&F.Atoms[ 18 ] , "H", -3.267f, 4.586f, 0.890f ); SetAtom(&F.Atoms[ 19 ] , "H", -3.267f, 4.586f, -0.890f ); SetAtom(&F.Atoms[ 20 ] , "C", 0.575f, -3.478f, 0.000f ); SetAtom(&F.Atoms[ 21 ] , "H", 1.089f, -1.574f, -0.890f ); SetAtom(&F.Atoms[ 22 ] , "H", 1.089f, -1.574f, 0.890f ); SetAtom(&F.Atoms[ 23 ] , "C", 2.027f, -3.991f, 0.000f ); SetAtom(&F.Atoms[ 24 ] , "H", 0.061f, -3.841f, 0.890f ); SetAtom(&F.Atoms[ 25 ] , "H", 0.061f, -3.841f, -0.890f ); SetAtom(&F.Atoms[ 26 ] , "C", 2.027f, -5.531f, 0.000f ); SetAtom(&F.Atoms[ 27 ] , "H", 2.541f, -3.628f, -0.890f ); SetAtom(&F.Atoms[ 28 ] , "H", 2.541f, -3.628f, 0.890f ); SetAtom(&F.Atoms[ 29 ] , "C", 3.479f, -6.044f, 0.000f ); SetAtom(&F.Atoms[ 30 ] , "H", 1.513f, -5.894f, 0.890f ); SetAtom(&F.Atoms[ 31 ] , "H", 1.513f, -5.894f, -0.890f ); SetAtom(&F.Atoms[ 32 ] , "C", 3.479f, -7.584f, 0.000f ); SetAtom(&F.Atoms[ 33 ] , "H", 3.993f, -5.681f, -0.890f ); SetAtom(&F.Atoms[ 34 ] , "H", 3.993f, -5.681f, 0.890f ); SetAtom(&F.Atoms[ 35 ] , "C", 4.931f, -8.098f, 0.000f ); SetAtom(&F.Atoms[ 36 ] , "H", 2.965f, -7.948f, 0.890f ); SetAtom(&F.Atoms[ 37 ] , "H", 2.965f, -7.948f, -0.890f ); SetAtom(&F.Atoms[ 38 ] , "C", 4.931f, -9.638f, 0.000f ); SetAtom(&F.Atoms[ 39 ] , "H", 5.445f, -7.734f, -0.890f ); SetAtom(&F.Atoms[ 40 ] , "H", 5.445f, -7.734f, 0.890f ); SetAtom(&F.Atoms[ 41 ] , "H", 5.959f, -10.001f, 0.000f ); SetAtom(&F.Atoms[ 42 ] , "H", 4.417f, -10.001f, 0.890f ); SetAtom(&F.Atoms[ 43 ] , "H", 4.417f, -10.001f, -0.890f ); F.atomToDelete = 17; F.atomToBondTo = 5; F.angleAtom = 4; } if ( !strcmp(Name, "Pentadecane" ) ) { F.NAtoms =47; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GPTN"); SetAtom(&F.Atoms[ 0 ] , "C", -0.984f, -1.314f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C", -0.984f, 0.226f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C", -2.436f, 0.740f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C", -2.436f, 2.280f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C", -3.888f, 2.793f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "C", -3.888f, 4.333f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "C", 0.468f, -1.827f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H", -1.498f, -1.677f, 0.890f ); SetAtom(&F.Atoms[ 8 ] , "H", -1.498f, -1.677f, -0.890f ); SetAtom(&F.Atoms[ 9 ] , "H", -0.471f, 0.590f, 0.890f ); SetAtom(&F.Atoms[ 10 ] , "H", -0.471f, 0.590f, -0.890f ); SetAtom(&F.Atoms[ 11 ] , "H", -2.950f, 0.376f, -0.890f ); SetAtom(&F.Atoms[ 12 ] , "H", -2.950f, 0.376f, 0.890f ); SetAtom(&F.Atoms[ 13 ] , "H", -1.922f, 2.643f, 0.890f ); SetAtom(&F.Atoms[ 14 ] , "H", -1.922f, 2.643f, -0.890f ); SetAtom(&F.Atoms[ 15 ] , "H", -4.402f, 2.430f, -0.890f ); SetAtom(&F.Atoms[ 16 ] , "H", -4.402f, 2.430f, 0.890f ); SetAtom(&F.Atoms[ 17 ] , "H", -4.916f, 4.696f, 0.000f ); SetAtom(&F.Atoms[ 18 ] , "H", -3.374f, 4.696f, 0.890f ); SetAtom(&F.Atoms[ 19 ] , "H", -3.374f, 4.696f, -0.890f ); SetAtom(&F.Atoms[ 20 ] , "C", 0.468f, -3.367f, 0.000f ); SetAtom(&F.Atoms[ 21 ] , "H", 0.981f, -1.463f, -0.890f ); SetAtom(&F.Atoms[ 22 ] , "H", 0.981f, -1.463f, 0.890f ); SetAtom(&F.Atoms[ 23 ] , "C", 1.919f, -3.880f, 0.000f ); SetAtom(&F.Atoms[ 24 ] , "H", -0.046f, -3.730f, 0.890f ); SetAtom(&F.Atoms[ 25 ] , "H", -0.046f, -3.730f, -0.890f ); SetAtom(&F.Atoms[ 26 ] , "C", 1.919f, -5.420f, 0.000f ); SetAtom(&F.Atoms[ 27 ] , "H", 2.433f, -3.517f, -0.890f ); SetAtom(&F.Atoms[ 28 ] , "H", 2.433f, -3.517f, 0.890f ); SetAtom(&F.Atoms[ 29 ] , "C", 3.371f, -5.933f, 0.000f ); SetAtom(&F.Atoms[ 30 ] , "H", 1.406f, -5.783f, 0.890f ); SetAtom(&F.Atoms[ 31 ] , "H", 1.406f, -5.783f, -0.890f ); SetAtom(&F.Atoms[ 32 ] , "C", 3.371f, -7.473f, 0.000f ); SetAtom(&F.Atoms[ 33 ] , "H", 3.885f, -5.570f, -0.890f ); SetAtom(&F.Atoms[ 34 ] , "H", 3.885f, -5.570f, 0.890f ); SetAtom(&F.Atoms[ 35 ] , "C", 4.823f, -7.987f, 0.000f ); SetAtom(&F.Atoms[ 36 ] , "H", 2.858f, -7.837f, 0.890f ); SetAtom(&F.Atoms[ 37 ] , "H", 2.858f, -7.837f, -0.890f ); SetAtom(&F.Atoms[ 38 ] , "C", 4.823f, -9.527f, 0.000f ); SetAtom(&F.Atoms[ 39 ] , "H", 5.337f, -7.623f, -0.890f ); SetAtom(&F.Atoms[ 40 ] , "H", 5.337f, -7.623f, 0.890f ); SetAtom(&F.Atoms[ 41 ] , "C", 6.275f, -10.040f, 0.000f ); SetAtom(&F.Atoms[ 42 ] , "H", 4.310f, -9.890f, 0.890f ); SetAtom(&F.Atoms[ 43 ] , "H", 4.310f, -9.890f, -0.890f ); SetAtom(&F.Atoms[ 44 ] , "H", 6.275f, -11.130f, 0.000f ); SetAtom(&F.Atoms[ 45 ] , "H", 6.789f, -9.677f, -0.890f ); SetAtom(&F.Atoms[ 46 ] , "H", 6.789f, -9.677f, 0.890f ); F.atomToDelete = 17; F.atomToBondTo = 5; F.angleAtom = 4; } else if ( !strcmp(Name, "Hexadecane" ) ) { F.NAtoms =50; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GHTN"); SetAtom(&F.Atoms[ 0 ] , "C", -1.053f, -1.177f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C", -1.053f, 0.363f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C", -2.505f, 0.877f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C", -2.505f, 2.417f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C", -3.957f, 2.930f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "C", -3.957f, 4.470f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "C", 0.399f, -1.690f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H", -1.567f, -1.540f, 0.890f ); SetAtom(&F.Atoms[ 8 ] , "H", -1.567f, -1.540f, -0.890f ); SetAtom(&F.Atoms[ 9 ] , "H", -0.539f, 0.727f, 0.890f ); SetAtom(&F.Atoms[ 10 ] , "H", -0.539f, 0.727f, -0.890f ); SetAtom(&F.Atoms[ 11 ] , "H", -3.019f, 0.513f, -0.890f ); SetAtom(&F.Atoms[ 12 ] , "H", -3.019f, 0.513f, 0.890f ); SetAtom(&F.Atoms[ 13 ] , "H", -1.991f, 2.780f, 0.890f ); SetAtom(&F.Atoms[ 14 ] , "H", -1.991f, 2.780f, -0.890f ); SetAtom(&F.Atoms[ 15 ] , "H", -4.471f, 2.567f, -0.890f ); SetAtom(&F.Atoms[ 16 ] , "H", -4.471f, 2.567f, 0.890f ); SetAtom(&F.Atoms[ 17 ] , "H", -4.985f, 4.833f, 0.000f ); SetAtom(&F.Atoms[ 18 ] , "H", -3.443f, 4.833f, 0.890f ); SetAtom(&F.Atoms[ 19 ] , "H", -3.443f, 4.833f, -0.890f ); SetAtom(&F.Atoms[ 20 ] , "C", 0.399f, -3.230f, 0.000f ); SetAtom(&F.Atoms[ 21 ] , "H", 0.913f, -1.327f, -0.890f ); SetAtom(&F.Atoms[ 22 ] , "H", 0.913f, -1.327f, 0.890f ); SetAtom(&F.Atoms[ 23 ] , "C", 1.851f, -3.743f, 0.000f ); SetAtom(&F.Atoms[ 24 ] , "H", -0.115f, -3.593f, 0.890f ); SetAtom(&F.Atoms[ 25 ] , "H", -0.115f, -3.593f, -0.890f ); SetAtom(&F.Atoms[ 26 ] , "C", 1.851f, -5.283f, 0.000f ); SetAtom(&F.Atoms[ 27 ] , "H", 2.365f, -3.380f, -0.890f ); SetAtom(&F.Atoms[ 28 ] , "H", 2.365f, -3.380f, 0.890f ); SetAtom(&F.Atoms[ 29 ] , "C", 3.303f, -5.797f, 0.000f ); SetAtom(&F.Atoms[ 30 ] , "H", 1.337f, -5.647f, 0.890f ); SetAtom(&F.Atoms[ 31 ] , "H", 1.337f, -5.647f, -0.890f ); SetAtom(&F.Atoms[ 32 ] , "C", 3.303f, -7.337f, 0.000f ); SetAtom(&F.Atoms[ 33 ] , "H", 3.816f, -5.433f, -0.890f ); SetAtom(&F.Atoms[ 34 ] , "H", 3.816f, -5.433f, 0.890f ); SetAtom(&F.Atoms[ 35 ] , "C", 4.755f, -7.850f, 0.000f ); SetAtom(&F.Atoms[ 36 ] , "H", 2.789f, -7.700f, 0.890f ); SetAtom(&F.Atoms[ 37 ] , "H", 2.789f, -7.700f, -0.890f ); SetAtom(&F.Atoms[ 38 ] , "C", 4.755f, -9.390f, 0.000f ); SetAtom(&F.Atoms[ 39 ] , "H", 5.268f, -7.487f, -0.890f ); SetAtom(&F.Atoms[ 40 ] , "H", 5.268f, -7.487f, 0.890f ); SetAtom(&F.Atoms[ 41 ] , "C", 6.206f, -9.903f, 0.000f ); SetAtom(&F.Atoms[ 42 ] , "H", 4.241f, -9.753f, 0.890f ); SetAtom(&F.Atoms[ 43 ] , "H", 4.241f, -9.753f, -0.890f ); SetAtom(&F.Atoms[ 44 ] , "C", 6.206f, -11.443f, 0.000f ); SetAtom(&F.Atoms[ 45 ] , "H", 6.720f, -9.540f, -0.890f ); SetAtom(&F.Atoms[ 46 ] , "H", 6.720f, -9.540f, 0.890f ); SetAtom(&F.Atoms[ 47 ] , "H", 7.234f, -11.807f, 0.000f ); SetAtom(&F.Atoms[ 48 ] , "H", 5.693f, -11.807f, 0.890f ); SetAtom(&F.Atoms[ 49 ] , "H", 5.693f, -11.807f, -0.890f ); F.atomToDelete = 17; F.atomToBondTo = 5; F.angleAtom = 4; } else if ( !strcmp(Name, "Heptadecane" ) ) { F.NAtoms =53; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GHDN"); SetAtom(&F.Atoms[ 0 ] , "C", -1.157f, -1.066f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C", -1.157f, 0.474f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C", -2.609f, 0.987f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C", -2.609f, 2.527f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C", -4.061f, 3.041f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "C", -4.061f, 4.581f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "C", 0.295f, -1.579f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H", -1.671f, -1.429f, 0.890f ); SetAtom(&F.Atoms[ 8 ] , "H", -1.671f, -1.429f, -0.890f ); SetAtom(&F.Atoms[ 9 ] , "H", -0.643f, 0.837f, 0.890f ); SetAtom(&F.Atoms[ 10 ] , "H", -0.643f, 0.837f, -0.890f ); SetAtom(&F.Atoms[ 11 ] , "H", -3.123f, 0.624f, -0.890f ); SetAtom(&F.Atoms[ 12 ] , "H", -3.123f, 0.624f, 0.890f ); SetAtom(&F.Atoms[ 13 ] , "H", -2.095f, 2.891f, 0.890f ); SetAtom(&F.Atoms[ 14 ] , "H", -2.095f, 2.891f, -0.890f ); SetAtom(&F.Atoms[ 15 ] , "H", -4.575f, 2.677f, -0.890f ); SetAtom(&F.Atoms[ 16 ] , "H", -4.575f, 2.677f, 0.890f ); SetAtom(&F.Atoms[ 17 ] , "H", -5.089f, 4.944f, 0.000f ); SetAtom(&F.Atoms[ 18 ] , "H", -3.547f, 4.944f, 0.890f ); SetAtom(&F.Atoms[ 19 ] , "H", -3.547f, 4.944f, -0.890f ); SetAtom(&F.Atoms[ 20 ] , "C", 0.295f, -3.119f, 0.000f ); SetAtom(&F.Atoms[ 21 ] , "H", 0.809f, -1.216f, -0.890f ); SetAtom(&F.Atoms[ 22 ] , "H", 0.809f, -1.216f, 0.890f ); SetAtom(&F.Atoms[ 23 ] , "C", 1.747f, -3.633f, 0.000f ); SetAtom(&F.Atoms[ 24 ] , "H", -0.219f, -3.483f, 0.890f ); SetAtom(&F.Atoms[ 25 ] , "H", -0.219f, -3.483f, -0.890f ); SetAtom(&F.Atoms[ 26 ] , "C", 1.747f, -5.173f, 0.000f ); SetAtom(&F.Atoms[ 27 ] , "H", 2.260f, -3.269f, -0.890f ); SetAtom(&F.Atoms[ 28 ] , "H", 2.260f, -3.269f, 0.890f ); SetAtom(&F.Atoms[ 29 ] , "C", 3.199f, -5.686f, 0.000f ); SetAtom(&F.Atoms[ 30 ] , "H", 1.233f, -5.536f, 0.890f ); SetAtom(&F.Atoms[ 31 ] , "H", 1.233f, -5.536f, -0.890f ); SetAtom(&F.Atoms[ 32 ] , "C", 3.199f, -7.226f, 0.000f ); SetAtom(&F.Atoms[ 33 ] , "H", 3.712f, -5.323f, -0.890f ); SetAtom(&F.Atoms[ 34 ] , "H", 3.712f, -5.323f, 0.890f ); SetAtom(&F.Atoms[ 35 ] , "C", 4.650f, -7.739f, 0.000f ); SetAtom(&F.Atoms[ 36 ] , "H", 2.685f, -7.589f, 0.890f ); SetAtom(&F.Atoms[ 37 ] , "H", 2.685f, -7.589f, -0.890f ); SetAtom(&F.Atoms[ 38 ] , "C", 4.650f, -9.279f, 0.000f ); SetAtom(&F.Atoms[ 39 ] , "H", 5.164f, -7.376f, -0.890f ); SetAtom(&F.Atoms[ 40 ] , "H", 5.164f, -7.376f, 0.890f ); SetAtom(&F.Atoms[ 41 ] , "C", 6.102f, -9.793f, 0.000f ); SetAtom(&F.Atoms[ 42 ] , "H", 4.137f, -9.643f, 0.890f ); SetAtom(&F.Atoms[ 43 ] , "H", 4.137f, -9.643f, -0.890f ); SetAtom(&F.Atoms[ 44 ] , "C", 6.102f, -11.333f, 0.000f ); SetAtom(&F.Atoms[ 45 ] , "H", 6.616f, -9.429f, -0.890f ); SetAtom(&F.Atoms[ 46 ] , "H", 6.616f, -9.429f, 0.890f ); SetAtom(&F.Atoms[ 47 ] , "C", 7.554f, -11.846f, 0.000f ); SetAtom(&F.Atoms[ 48 ] , "H", 5.589f, -11.696f, 0.890f ); SetAtom(&F.Atoms[ 49 ] , "H", 5.589f, -11.696f, -0.890f ); SetAtom(&F.Atoms[ 50 ] , "H", 7.554f, -12.936f, 0.000f ); SetAtom(&F.Atoms[ 51 ] , "H", 8.068f, -11.483f, -0.890f ); SetAtom(&F.Atoms[ 52 ] , "H", 8.068f, -11.483f, 0.890f ); F.atomToDelete = 17; F.atomToBondTo = 5; F.angleAtom = 4; } else if ( !strcmp(Name, "Octadecane" ) ) { F.NAtoms =56; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GODN"); SetAtom(&F.Atoms[ 0 ] , "C", -1.227f, -0.932f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C", -1.227f, 0.608f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C", -2.679f, 1.121f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C", -2.679f, 2.661f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C", -4.131f, 3.175f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "C", -4.131f, 4.715f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "C", 0.225f, -1.445f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H", -1.741f, -1.295f, 0.890f ); SetAtom(&F.Atoms[ 8 ] , "H", -1.741f, -1.295f, -0.890f ); SetAtom(&F.Atoms[ 9 ] , "H", -0.713f, 0.971f, 0.890f ); SetAtom(&F.Atoms[ 10 ] , "H", -0.713f, 0.971f, -0.890f ); SetAtom(&F.Atoms[ 11 ] , "H", -3.193f, 0.758f, -0.890f ); SetAtom(&F.Atoms[ 12 ] , "H", -3.193f, 0.758f, 0.890f ); SetAtom(&F.Atoms[ 13 ] , "H", -2.165f, 3.025f, 0.890f ); SetAtom(&F.Atoms[ 14 ] , "H", -2.165f, 3.025f, -0.890f ); SetAtom(&F.Atoms[ 15 ] , "H", -4.645f, 2.811f, -0.890f ); SetAtom(&F.Atoms[ 16 ] , "H", -4.645f, 2.811f, 0.890f ); SetAtom(&F.Atoms[ 17 ] , "H", -5.159f, 5.078f, 0.000f ); SetAtom(&F.Atoms[ 18 ] , "H", -3.617f, 5.078f, 0.890f ); SetAtom(&F.Atoms[ 19 ] , "H", -3.617f, 5.078f, -0.890f ); SetAtom(&F.Atoms[ 20 ] , "C", 0.225f, -2.985f, 0.000f ); SetAtom(&F.Atoms[ 21 ] , "H", 0.739f, -1.082f, -0.890f ); SetAtom(&F.Atoms[ 22 ] , "H", 0.739f, -1.082f, 0.890f ); SetAtom(&F.Atoms[ 23 ] , "C", 1.677f, -3.499f, 0.000f ); SetAtom(&F.Atoms[ 24 ] , "H", -0.289f, -3.349f, 0.890f ); SetAtom(&F.Atoms[ 25 ] , "H", -0.289f, -3.349f, -0.890f ); SetAtom(&F.Atoms[ 26 ] , "C", 1.677f, -5.039f, 0.000f ); SetAtom(&F.Atoms[ 27 ] , "H", 2.191f, -3.135f, -0.890f ); SetAtom(&F.Atoms[ 28 ] , "H", 2.191f, -3.135f, 0.890f ); SetAtom(&F.Atoms[ 29 ] , "C", 3.129f, -5.552f, 0.000f ); SetAtom(&F.Atoms[ 30 ] , "H", 1.163f, -5.402f, 0.890f ); SetAtom(&F.Atoms[ 31 ] , "H", 1.163f, -5.402f, -0.890f ); SetAtom(&F.Atoms[ 32 ] , "C", 3.129f, -7.092f, 0.000f ); SetAtom(&F.Atoms[ 33 ] , "H", 3.643f, -5.189f, -0.890f ); SetAtom(&F.Atoms[ 34 ] , "H", 3.643f, -5.189f, 0.890f ); SetAtom(&F.Atoms[ 35 ] , "C", 4.581f, -7.605f, 0.000f ); SetAtom(&F.Atoms[ 36 ] , "H", 2.615f, -7.455f, 0.890f ); SetAtom(&F.Atoms[ 37 ] , "H", 2.615f, -7.455f, -0.890f ); SetAtom(&F.Atoms[ 38 ] , "C", 4.581f, -9.145f, 0.000f ); SetAtom(&F.Atoms[ 39 ] , "H", 5.094f, -7.242f, -0.890f ); SetAtom(&F.Atoms[ 40 ] , "H", 5.094f, -7.242f, 0.890f ); SetAtom(&F.Atoms[ 41 ] , "C", 6.033f, -9.659f, 0.000f ); SetAtom(&F.Atoms[ 42 ] , "H", 4.067f, -9.509f, 0.890f ); SetAtom(&F.Atoms[ 43 ] , "H", 4.067f, -9.509f, -0.890f ); SetAtom(&F.Atoms[ 44 ] , "C", 6.033f, -11.199f, 0.000f ); SetAtom(&F.Atoms[ 45 ] , "H", 6.546f, -9.295f, -0.890f ); SetAtom(&F.Atoms[ 46 ] , "H", 6.546f, -9.295f, 0.890f ); SetAtom(&F.Atoms[ 47 ] , "C", 7.484f, -11.712f, 0.000f ); SetAtom(&F.Atoms[ 48 ] , "H", 5.519f, -11.562f, 0.890f ); SetAtom(&F.Atoms[ 49 ] , "H", 5.519f, -11.562f, -0.890f ); SetAtom(&F.Atoms[ 50 ] , "C", 7.484f, -13.252f, 0.000f ); SetAtom(&F.Atoms[ 51 ] , "H", 7.998f, -11.349f, -0.890f ); SetAtom(&F.Atoms[ 52 ] , "H", 7.998f, -11.349f, 0.890f ); SetAtom(&F.Atoms[ 53 ] , "H", 8.512f, -13.615f, 0.000f ); SetAtom(&F.Atoms[ 54 ] , "H", 6.971f, -13.615f, 0.890f ); SetAtom(&F.Atoms[ 55 ] , "H", 6.971f, -13.615f, -0.890f ); F.atomToDelete = 17; F.atomToBondTo = 5; F.angleAtom = 4; } if ( !strcmp(Name, "Nonadecane" ) ) { F.NAtoms =59; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GNDN"); SetAtom(&F.Atoms[ 0 ] , "C", -1.328f, -0.821f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C", -1.328f, 0.719f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C", -2.780f, 1.232f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C", -2.780f, 2.772f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C", -4.232f, 3.285f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "C", -4.232f, 4.825f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "C", 0.123f, -1.335f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H", -1.842f, -1.185f, 0.890f ); SetAtom(&F.Atoms[ 8 ] , "H", -1.842f, -1.185f, -0.890f ); SetAtom(&F.Atoms[ 9 ] , "H", -0.815f, 1.082f, 0.890f ); SetAtom(&F.Atoms[ 10 ] , "H", -0.815f, 1.082f, -0.890f ); SetAtom(&F.Atoms[ 11 ] , "H", -3.294f, 0.869f, -0.890f ); SetAtom(&F.Atoms[ 12 ] , "H", -3.294f, 0.869f, 0.890f ); SetAtom(&F.Atoms[ 13 ] , "H", -2.267f, 3.135f, 0.890f ); SetAtom(&F.Atoms[ 14 ] , "H", -2.267f, 3.135f, -0.890f ); SetAtom(&F.Atoms[ 15 ] , "H", -4.746f, 2.922f, -0.890f ); SetAtom(&F.Atoms[ 16 ] , "H", -4.746f, 2.922f, 0.890f ); SetAtom(&F.Atoms[ 17 ] , "H", -5.260f, 5.189f, 0.000f ); SetAtom(&F.Atoms[ 18 ] , "H", -3.719f, 5.189f, 0.890f ); SetAtom(&F.Atoms[ 19 ] , "H", -3.718f, 5.189f, -0.890f ); SetAtom(&F.Atoms[ 20 ] , "C", 0.123f, -2.875f, 0.000f ); SetAtom(&F.Atoms[ 21 ] , "H", 0.637f, -0.971f, -0.890f ); SetAtom(&F.Atoms[ 22 ] , "H", 0.637f, -0.971f, 0.890f ); SetAtom(&F.Atoms[ 23 ] , "C", 1.575f, -3.388f, 0.000f ); SetAtom(&F.Atoms[ 24 ] , "H", -0.390f, -3.238f, 0.890f ); SetAtom(&F.Atoms[ 25 ] , "H", -0.390f, -3.238f, -0.890f ); SetAtom(&F.Atoms[ 26 ] , "C", 1.575f, -4.928f, 0.000f ); SetAtom(&F.Atoms[ 27 ] , "H", 2.089f, -3.025f, -0.890f ); SetAtom(&F.Atoms[ 28 ] , "H", 2.089f, -3.025f, 0.890f ); SetAtom(&F.Atoms[ 29 ] , "C", 3.027f, -5.441f, 0.000f ); SetAtom(&F.Atoms[ 30 ] , "H", 1.062f, -5.291f, 0.890f ); SetAtom(&F.Atoms[ 31 ] , "H", 1.062f, -5.291f, -0.890f ); SetAtom(&F.Atoms[ 32 ] , "C", 3.027f, -6.981f, 0.000f ); SetAtom(&F.Atoms[ 33 ] , "H", 3.541f, -5.078f, -0.890f ); SetAtom(&F.Atoms[ 34 ] , "H", 3.541f, -5.078f, 0.890f ); SetAtom(&F.Atoms[ 35 ] , "C", 4.479f, -7.495f, 0.000f ); SetAtom(&F.Atoms[ 36 ] , "H", 2.513f, -7.345f, 0.890f ); SetAtom(&F.Atoms[ 37 ] , "H", 2.513f, -7.345f, -0.890f ); SetAtom(&F.Atoms[ 38 ] , "C", 4.479f, -9.035f, 0.000f ); SetAtom(&F.Atoms[ 39 ] , "H", 4.993f, -7.131f, -0.890f ); SetAtom(&F.Atoms[ 40 ] , "H", 4.993f, -7.131f, 0.890f ); SetAtom(&F.Atoms[ 41 ] , "C", 5.931f, -9.548f, 0.000f ); SetAtom(&F.Atoms[ 42 ] , "H", 3.965f, -9.398f, 0.890f ); SetAtom(&F.Atoms[ 43 ] , "H", 3.965f, -9.398f, -0.890f ); SetAtom(&F.Atoms[ 44 ] , "C", 5.931f, -11.088f, 0.000f ); SetAtom(&F.Atoms[ 45 ] , "H", 6.445f, -9.185f, -0.890f ); SetAtom(&F.Atoms[ 46 ] , "H", 6.445f, -9.185f, 0.890f ); SetAtom(&F.Atoms[ 47 ] , "C", 7.383f, -11.601f, 0.000f ); SetAtom(&F.Atoms[ 48 ] , "H", 5.417f, -11.451f, 0.890f ); SetAtom(&F.Atoms[ 49 ] , "H", 5.417f, -11.451f, -0.890f ); SetAtom(&F.Atoms[ 50 ] , "C", 7.383f, -13.141f, 0.000f ); SetAtom(&F.Atoms[ 51 ] , "H", 7.897f, -11.238f, -0.890f ); SetAtom(&F.Atoms[ 52 ] , "H", 7.897f, -11.238f, 0.890f ); SetAtom(&F.Atoms[ 53 ] , "C", 8.835f, -13.655f, 0.000f ); SetAtom(&F.Atoms[ 54 ] , "H", 6.869f, -13.505f, 0.890f ); SetAtom(&F.Atoms[ 55 ] , "H", 6.869f, -13.505f, -0.890f ); SetAtom(&F.Atoms[ 56 ] , "H", 8.835f, -14.745f, 0.000f ); SetAtom(&F.Atoms[ 57 ] , "H", 9.349f, -13.291f, -0.890f ); SetAtom(&F.Atoms[ 58 ] , "H", 9.349f, -13.291f, 0.890f ); F.atomToDelete = 17; F.atomToBondTo = 5; F.angleAtom = 4; } else if ( !strcmp(Name, "Eicosane" ) ) { F.NAtoms =62; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GECS"); SetAtom(&F.Atoms[ 0 ] , "C", -1.399f, -0.690f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C", -1.399f, 0.850f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C", -2.851f, 1.363f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C", -2.851f, 2.903f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C", -4.303f, 3.417f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "C", -4.303f, 4.957f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "C", 0.053f, -1.203f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H", -1.913f, -1.053f, 0.890f ); SetAtom(&F.Atoms[ 8 ] , "H", -1.913f, -1.053f, -0.890f ); SetAtom(&F.Atoms[ 9 ] , "H", -0.885f, 1.213f, 0.890f ); SetAtom(&F.Atoms[ 10 ] , "H", -0.885f, 1.213f, -0.890f ); SetAtom(&F.Atoms[ 11 ] , "H", -3.365f, 1.000f, -0.890f ); SetAtom(&F.Atoms[ 12 ] , "H", -3.365f, 1.000f, 0.890f ); SetAtom(&F.Atoms[ 13 ] , "H", -2.337f, 3.267f, 0.890f ); SetAtom(&F.Atoms[ 14 ] , "H", -2.337f, 3.267f, -0.890f ); SetAtom(&F.Atoms[ 15 ] , "H", -4.817f, 3.053f, -0.890f ); SetAtom(&F.Atoms[ 16 ] , "H", -4.817f, 3.053f, 0.890f ); SetAtom(&F.Atoms[ 17 ] , "H", -5.331f, 5.320f, 0.000f ); SetAtom(&F.Atoms[ 18 ] , "H", -3.789f, 5.320f, 0.890f ); SetAtom(&F.Atoms[ 19 ] , "H", -3.789f, 5.320f, -0.890f ); SetAtom(&F.Atoms[ 20 ] , "C", 0.053f, -2.743f, 0.000f ); SetAtom(&F.Atoms[ 21 ] , "H", 0.567f, -0.840f, -0.890f ); SetAtom(&F.Atoms[ 22 ] , "H", 0.567f, -0.840f, 0.890f ); SetAtom(&F.Atoms[ 23 ] , "C", 1.505f, -3.257f, 0.000f ); SetAtom(&F.Atoms[ 24 ] , "H", -0.461f, -3.107f, 0.890f ); SetAtom(&F.Atoms[ 25 ] , "H", -0.461f, -3.107f, -0.890f ); SetAtom(&F.Atoms[ 26 ] , "C", 1.505f, -4.797f, 0.000f ); SetAtom(&F.Atoms[ 27 ] , "H", 2.019f, -2.893f, -0.890f ); SetAtom(&F.Atoms[ 28 ] , "H", 2.019f, -2.893f, 0.890f ); SetAtom(&F.Atoms[ 29 ] , "C", 2.957f, -5.310f, 0.000f ); SetAtom(&F.Atoms[ 30 ] , "H", 0.991f, -5.160f, 0.890f ); SetAtom(&F.Atoms[ 31 ] , "H", 0.991f, -5.160f, -0.890f ); SetAtom(&F.Atoms[ 32 ] , "C", 2.957f, -6.850f, 0.000f ); SetAtom(&F.Atoms[ 33 ] , "H", 3.470f, -4.947f, -0.890f ); SetAtom(&F.Atoms[ 34 ] , "H", 3.470f, -4.947f, 0.890f ); SetAtom(&F.Atoms[ 35 ] , "C", 4.409f, -7.363f, 0.000f ); SetAtom(&F.Atoms[ 36 ] , "H", 2.443f, -7.213f, 0.890f ); SetAtom(&F.Atoms[ 37 ] , "H", 2.443f, -7.213f, -0.890f ); SetAtom(&F.Atoms[ 38 ] , "C", 4.409f, -8.903f, 0.000f ); SetAtom(&F.Atoms[ 39 ] , "H", 4.922f, -7.000f, -0.890f ); SetAtom(&F.Atoms[ 40 ] , "H", 4.922f, -7.000f, 0.890f ); SetAtom(&F.Atoms[ 41 ] , "C", 5.860f, -9.417f, 0.000f ); SetAtom(&F.Atoms[ 42 ] , "H", 3.895f, -9.267f, 0.890f ); SetAtom(&F.Atoms[ 43 ] , "H", 3.895f, -9.267f, -0.890f ); SetAtom(&F.Atoms[ 44 ] , "C", 5.860f, -10.957f, 0.000f ); SetAtom(&F.Atoms[ 45 ] , "H", 6.374f, -9.053f, -0.890f ); SetAtom(&F.Atoms[ 46 ] , "H", 6.374f, -9.053f, 0.890f ); SetAtom(&F.Atoms[ 47 ] , "C", 7.312f, -11.470f, 0.000f ); SetAtom(&F.Atoms[ 48 ] , "H", 5.347f, -11.320f, 0.890f ); SetAtom(&F.Atoms[ 49 ] , "H", 5.347f, -11.320f, -0.890f ); SetAtom(&F.Atoms[ 50 ] , "C", 7.312f, -13.010f, 0.000f ); SetAtom(&F.Atoms[ 51 ] , "H", 7.826f, -11.107f, -0.890f ); SetAtom(&F.Atoms[ 52 ] , "H", 7.826f, -11.107f, 0.890f ); SetAtom(&F.Atoms[ 53 ] , "C", 8.764f, -13.523f, 0.000f ); SetAtom(&F.Atoms[ 54 ] , "H", 6.799f, -13.373f, 0.890f ); SetAtom(&F.Atoms[ 55 ] , "H", 6.799f, -13.373f, -0.890f ); SetAtom(&F.Atoms[ 56 ] , "C", 8.764f, -15.063f, 0.000f ); SetAtom(&F.Atoms[ 57 ] , "H", 9.278f, -13.160f, -0.890f ); SetAtom(&F.Atoms[ 58 ] , "H", 9.278f, -13.160f, 0.890f ); SetAtom(&F.Atoms[ 59 ] , "H", 9.792f, -15.427f, 0.000f ); SetAtom(&F.Atoms[ 60 ] , "H", 8.251f, -15.427f, 0.890f ); SetAtom(&F.Atoms[ 61 ] , "H", 8.251f, -15.427f, -0.890f ); F.atomToDelete = 17; F.atomToBondTo = 5; F.angleAtom = 4; } if ( !strcmp(Name, "Triacontane" ) ) { F.NAtoms =92; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GTCN"); SetAtom(&F.Atoms[ 0 ] , "C", -2.185f, 0.280f, -0.037f ); SetAtom(&F.Atoms[ 1 ] , "C", -2.185f, 1.820f, -0.037f ); SetAtom(&F.Atoms[ 2 ] , "C", -3.637f, 2.334f, -0.037f ); SetAtom(&F.Atoms[ 3 ] , "C", -3.637f, 3.874f, -0.037f ); SetAtom(&F.Atoms[ 4 ] , "C", -5.089f, 4.387f, -0.037f ); SetAtom(&F.Atoms[ 5 ] , "C", -5.089f, 5.927f, -0.037f ); SetAtom(&F.Atoms[ 6 ] , "C", -0.733f, -0.233f, -0.037f ); SetAtom(&F.Atoms[ 7 ] , "H", -2.699f, -0.083f, 0.853f ); SetAtom(&F.Atoms[ 8 ] , "H", -2.699f, -0.083f, -0.927f ); SetAtom(&F.Atoms[ 9 ] , "H", -1.672f, 2.184f, 0.853f ); SetAtom(&F.Atoms[ 10 ] , "H", -1.672f, 2.184f, -0.927f ); SetAtom(&F.Atoms[ 11 ] , "H", -4.151f, 1.970f, -0.927f ); SetAtom(&F.Atoms[ 12 ] , "H", -4.151f, 1.970f, 0.853f ); SetAtom(&F.Atoms[ 13 ] , "H", -3.123f, 4.237f, 0.853f ); SetAtom(&F.Atoms[ 14 ] , "H", -3.123f, 4.237f, -0.927f ); SetAtom(&F.Atoms[ 15 ] , "H", -5.603f, 4.024f, -0.927f ); SetAtom(&F.Atoms[ 16 ] , "H", -5.603f, 4.024f, 0.853f ); SetAtom(&F.Atoms[ 17 ] , "H", -6.117f, 6.290f, -0.037f ); SetAtom(&F.Atoms[ 18 ] , "H", -4.575f, 6.290f, 0.853f ); SetAtom(&F.Atoms[ 19 ] , "H", -4.575f, 6.290f, -0.927f ); SetAtom(&F.Atoms[ 20 ] , "C", -0.733f, -1.773f, -0.037f ); SetAtom(&F.Atoms[ 21 ] , "H", -0.220f, 0.130f, -0.927f ); SetAtom(&F.Atoms[ 22 ] , "H", -0.220f, 0.130f, 0.853f ); SetAtom(&F.Atoms[ 23 ] , "C", 0.718f, -2.286f, -0.037f ); SetAtom(&F.Atoms[ 24 ] , "H", -1.247f, -2.136f, 0.853f ); SetAtom(&F.Atoms[ 25 ] , "H", -1.247f, -2.136f, -0.927f ); SetAtom(&F.Atoms[ 26 ] , "C", 0.718f, -3.826f, -0.037f ); SetAtom(&F.Atoms[ 27 ] , "H", 1.232f, -1.923f, -0.927f ); SetAtom(&F.Atoms[ 28 ] , "H", 1.232f, -1.923f, 0.853f ); SetAtom(&F.Atoms[ 29 ] , "C", 2.170f, -4.340f, -0.037f ); SetAtom(&F.Atoms[ 30 ] , "H", 0.205f, -4.190f, 0.853f ); SetAtom(&F.Atoms[ 31 ] , "H", 0.205f, -4.190f, -0.927f ); SetAtom(&F.Atoms[ 32 ] , "C", 2.170f, -5.880f, -0.037f ); SetAtom(&F.Atoms[ 33 ] , "H", 2.684f, -3.976f, -0.927f ); SetAtom(&F.Atoms[ 34 ] , "H", 2.684f, -3.976f, 0.853f ); SetAtom(&F.Atoms[ 35 ] , "C", 3.622f, -6.393f, -0.037f ); SetAtom(&F.Atoms[ 36 ] , "H", 1.657f, -6.243f, 0.853f ); SetAtom(&F.Atoms[ 37 ] , "H", 1.657f, -6.243f, -0.927f ); SetAtom(&F.Atoms[ 38 ] , "C", 3.622f, -7.933f, -0.037f ); SetAtom(&F.Atoms[ 39 ] , "H", 4.136f, -6.030f, -0.927f ); SetAtom(&F.Atoms[ 40 ] , "H", 4.136f, -6.030f, 0.853f ); SetAtom(&F.Atoms[ 41 ] , "C", 5.074f, -8.446f, -0.037f ); SetAtom(&F.Atoms[ 42 ] , "H", 3.109f, -8.296f, 0.853f ); SetAtom(&F.Atoms[ 43 ] , "H", 3.108f, -8.296f, -0.927f ); SetAtom(&F.Atoms[ 44 ] , "C", 5.074f, -9.986f, -0.037f ); SetAtom(&F.Atoms[ 45 ] , "H", 5.588f, -8.083f, -0.927f ); SetAtom(&F.Atoms[ 46 ] , "H", 5.588f, -8.083f, 0.853f ); SetAtom(&F.Atoms[ 47 ] , "C", 6.526f, -10.500f, -0.037f ); SetAtom(&F.Atoms[ 48 ] , "H", 4.560f, -10.350f, 0.853f ); SetAtom(&F.Atoms[ 49 ] , "H", 4.560f, -10.350f, -0.927f ); SetAtom(&F.Atoms[ 50 ] , "C", 6.526f, -12.040f, -0.037f ); SetAtom(&F.Atoms[ 51 ] , "H", 7.040f, -10.136f, -0.927f ); SetAtom(&F.Atoms[ 52 ] , "H", 7.040f, -10.136f, 0.853f ); SetAtom(&F.Atoms[ 53 ] , "C", 7.978f, -12.553f, -0.037f ); SetAtom(&F.Atoms[ 54 ] , "H", 6.012f, -12.403f, 0.853f ); SetAtom(&F.Atoms[ 55 ] , "H", 6.012f, -12.403f, -0.927f ); SetAtom(&F.Atoms[ 56 ] , "C", 7.978f, -14.093f, -0.037f ); SetAtom(&F.Atoms[ 57 ] , "H", 8.492f, -12.190f, -0.927f ); SetAtom(&F.Atoms[ 58 ] , "H", 8.492f, -12.190f, 0.853f ); SetAtom(&F.Atoms[ 59 ] , "C", 9.430f, -14.606f, -0.037f ); SetAtom(&F.Atoms[ 60 ] , "H", 7.464f, -14.456f, 0.853f ); SetAtom(&F.Atoms[ 61 ] , "H", 7.464f, -14.456f, -0.927f ); SetAtom(&F.Atoms[ 62 ] , "C", 9.430f, -16.146f, -0.037f ); SetAtom(&F.Atoms[ 63 ] , "H", 9.944f, -14.243f, -0.927f ); SetAtom(&F.Atoms[ 64 ] , "H", 9.944f, -14.243f, 0.853f ); SetAtom(&F.Atoms[ 65 ] , "C", 10.882f, -16.660f, -0.037f ); SetAtom(&F.Atoms[ 66 ] , "H", 8.916f, -16.510f, 0.853f ); SetAtom(&F.Atoms[ 67 ] , "H", 8.916f, -16.510f, -0.927f ); SetAtom(&F.Atoms[ 68 ] , "C", 10.882f, -18.200f, -0.037f ); SetAtom(&F.Atoms[ 69 ] , "C", 12.334f, -18.713f, -0.037f ); SetAtom(&F.Atoms[ 70 ] , "C", 12.334f, -20.253f, -0.037f ); SetAtom(&F.Atoms[ 71 ] , "C", 13.786f, -20.766f, -0.037f ); SetAtom(&F.Atoms[ 72 ] , "C", 13.786f, -22.306f, -0.037f ); SetAtom(&F.Atoms[ 73 ] , "C", 15.238f, -22.820f, -0.037f ); SetAtom(&F.Atoms[ 74 ] , "C", 15.238f, -24.360f, -0.037f ); SetAtom(&F.Atoms[ 75 ] , "H", 11.396f, -16.296f, -0.927f ); SetAtom(&F.Atoms[ 76 ] , "H", 11.396f, -16.296f, 0.853f ); SetAtom(&F.Atoms[ 77 ] , "H", 10.368f, -18.563f, 0.853f ); SetAtom(&F.Atoms[ 78 ] , "H", 10.368f, -18.563f, -0.927f ); SetAtom(&F.Atoms[ 79 ] , "H", 12.848f, -18.350f, -0.927f ); SetAtom(&F.Atoms[ 80 ] , "H", 12.848f, -18.350f, 0.853f ); SetAtom(&F.Atoms[ 81 ] , "H", 11.820f, -20.616f, 0.853f ); SetAtom(&F.Atoms[ 82 ] , "H", 11.820f, -20.616f, -0.927f ); SetAtom(&F.Atoms[ 83 ] , "H", 14.300f, -20.403f, -0.927f ); SetAtom(&F.Atoms[ 84 ] , "H", 14.300f, -20.403f, 0.853f ); SetAtom(&F.Atoms[ 85 ] , "H", 13.272f, -22.670f, 0.853f ); SetAtom(&F.Atoms[ 86 ] , "H", 13.272f, -22.670f, -0.927f ); SetAtom(&F.Atoms[ 87 ] , "H", 15.752f, -22.456f, -0.927f ); SetAtom(&F.Atoms[ 88 ] , "H", 15.752f, -22.456f, 0.853f ); SetAtom(&F.Atoms[ 89 ] , "H", 16.265f, -24.723f, -0.037f ); SetAtom(&F.Atoms[ 90 ] , "H", 14.724f, -24.723f, 0.853f ); SetAtom(&F.Atoms[ 91 ] , "H", 14.724f, -24.723f, -0.927f ); F.atomToDelete = 17; F.atomToBondTo = 5; F.angleAtom = 4; } else if ( !strcmp(Name, "Tetracontane" ) ) { F.NAtoms =122; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GTON"); SetAtom(&F.Atoms[ 0 ] , "C", -2.909f, 1.109f, -0.079f ); SetAtom(&F.Atoms[ 1 ] , "C", -2.909f, 2.649f, -0.079f ); SetAtom(&F.Atoms[ 2 ] , "C", -4.361f, 3.162f, -0.079f ); SetAtom(&F.Atoms[ 3 ] , "C", -4.361f, 4.702f, -0.079f ); SetAtom(&F.Atoms[ 4 ] , "C", -5.813f, 5.216f, -0.079f ); SetAtom(&F.Atoms[ 5 ] , "C", -5.813f, 6.756f, -0.079f ); SetAtom(&F.Atoms[ 6 ] , "C", -1.457f, 0.596f, -0.079f ); SetAtom(&F.Atoms[ 7 ] , "H", -3.423f, 0.746f, 0.811f ); SetAtom(&F.Atoms[ 8 ] , "H", -3.423f, 0.746f, -0.969f ); SetAtom(&F.Atoms[ 9 ] , "H", -2.396f, 3.012f, 0.811f ); SetAtom(&F.Atoms[ 10 ] , "H", -2.396f, 3.012f, -0.969f ); SetAtom(&F.Atoms[ 11 ] , "H", -4.875f, 2.799f, -0.969f ); SetAtom(&F.Atoms[ 12 ] , "H", -4.875f, 2.799f, 0.811f ); SetAtom(&F.Atoms[ 13 ] , "H", -3.847f, 5.066f, 0.811f ); SetAtom(&F.Atoms[ 14 ] , "H", -3.847f, 5.066f, -0.969f ); SetAtom(&F.Atoms[ 15 ] , "H", -6.327f, 4.852f, -0.969f ); SetAtom(&F.Atoms[ 16 ] , "H", -6.327f, 4.852f, 0.811f ); SetAtom(&F.Atoms[ 17 ] , "H", -6.841f, 7.119f, -0.079f ); SetAtom(&F.Atoms[ 18 ] , "H", -5.299f, 7.119f, 0.811f ); SetAtom(&F.Atoms[ 19 ] , "H", -5.299f, 7.119f, -0.969f ); SetAtom(&F.Atoms[ 20 ] , "C", -1.457f, -0.944f, -0.079f ); SetAtom(&F.Atoms[ 21 ] , "H", -0.944f, 0.959f, -0.969f ); SetAtom(&F.Atoms[ 22 ] , "H", -0.944f, 0.959f, 0.811f ); SetAtom(&F.Atoms[ 23 ] , "C", -0.005f, -1.458f, -0.079f ); SetAtom(&F.Atoms[ 24 ] , "H", -1.971f, -1.308f, 0.811f ); SetAtom(&F.Atoms[ 25 ] , "H", -1.971f, -1.308f, -0.969f ); SetAtom(&F.Atoms[ 26 ] , "C", -0.005f, -2.998f, -0.079f ); SetAtom(&F.Atoms[ 27 ] , "H", 0.508f, -1.094f, -0.969f ); SetAtom(&F.Atoms[ 28 ] , "H", 0.508f, -1.094f, 0.811f ); SetAtom(&F.Atoms[ 29 ] , "C", 1.446f, -3.511f, -0.079f ); SetAtom(&F.Atoms[ 30 ] , "H", -0.519f, -3.361f, 0.811f ); SetAtom(&F.Atoms[ 31 ] , "H", -0.519f, -3.361f, -0.969f ); SetAtom(&F.Atoms[ 32 ] , "C", 1.446f, -5.051f, -0.079f ); SetAtom(&F.Atoms[ 33 ] , "H", 1.960f, -3.148f, -0.969f ); SetAtom(&F.Atoms[ 34 ] , "H", 1.960f, -3.148f, 0.811f ); SetAtom(&F.Atoms[ 35 ] , "C", 2.898f, -5.564f, -0.079f ); SetAtom(&F.Atoms[ 36 ] , "H", 0.933f, -5.414f, 0.811f ); SetAtom(&F.Atoms[ 37 ] , "H", 0.933f, -5.414f, -0.969f ); SetAtom(&F.Atoms[ 38 ] , "C", 2.898f, -7.104f, -0.079f ); SetAtom(&F.Atoms[ 39 ] , "H", 3.412f, -5.201f, -0.969f ); SetAtom(&F.Atoms[ 40 ] , "H", 3.412f, -5.201f, 0.811f ); SetAtom(&F.Atoms[ 41 ] , "C", 4.350f, -7.618f, -0.079f ); SetAtom(&F.Atoms[ 42 ] , "H", 2.385f, -7.468f, 0.811f ); SetAtom(&F.Atoms[ 43 ] , "H", 2.385f, -7.468f, -0.969f ); SetAtom(&F.Atoms[ 44 ] , "C", 4.350f, -9.158f, -0.079f ); SetAtom(&F.Atoms[ 45 ] , "H", 4.864f, -7.254f, -0.969f ); SetAtom(&F.Atoms[ 46 ] , "H", 4.864f, -7.254f, 0.811f ); SetAtom(&F.Atoms[ 47 ] , "C", 5.802f, -9.671f, -0.079f ); SetAtom(&F.Atoms[ 48 ] , "H", 3.836f, -9.521f, 0.811f ); SetAtom(&F.Atoms[ 49 ] , "H", 3.836f, -9.521f, -0.969f ); SetAtom(&F.Atoms[ 50 ] , "C", 5.802f, -11.211f, -0.079f ); SetAtom(&F.Atoms[ 51 ] , "H", 6.316f, -9.308f, -0.969f ); SetAtom(&F.Atoms[ 52 ] , "H", 6.316f, -9.308f, 0.811f ); SetAtom(&F.Atoms[ 53 ] , "C", 7.254f, -11.724f, -0.079f ); SetAtom(&F.Atoms[ 54 ] , "H", 5.288f, -11.574f, 0.811f ); SetAtom(&F.Atoms[ 55 ] , "H", 5.288f, -11.574f, -0.969f ); SetAtom(&F.Atoms[ 56 ] , "C", 7.254f, -13.264f, -0.079f ); SetAtom(&F.Atoms[ 57 ] , "H", 7.768f, -11.361f, -0.969f ); SetAtom(&F.Atoms[ 58 ] , "H", 7.768f, -11.361f, 0.811f ); SetAtom(&F.Atoms[ 59 ] , "C", 8.706f, -13.778f, -0.079f ); SetAtom(&F.Atoms[ 60 ] , "H", 6.740f, -13.628f, 0.811f ); SetAtom(&F.Atoms[ 61 ] , "H", 6.740f, -13.628f, -0.969f ); SetAtom(&F.Atoms[ 62 ] , "C", 8.706f, -15.318f, -0.079f ); SetAtom(&F.Atoms[ 63 ] , "H", 9.220f, -13.414f, -0.969f ); SetAtom(&F.Atoms[ 64 ] , "H", 9.220f, -13.414f, 0.811f ); SetAtom(&F.Atoms[ 65 ] , "C", 10.158f, -15.831f, -0.079f ); SetAtom(&F.Atoms[ 66 ] , "H", 8.192f, -15.681f, 0.811f ); SetAtom(&F.Atoms[ 67 ] , "H", 8.192f, -15.681f, -0.969f ); SetAtom(&F.Atoms[ 68 ] , "C", 10.158f, -17.371f, -0.079f ); SetAtom(&F.Atoms[ 69 ] , "C", 11.610f, -17.884f, -0.079f ); SetAtom(&F.Atoms[ 70 ] , "C", 11.610f, -19.424f, -0.079f ); SetAtom(&F.Atoms[ 71 ] , "C", 13.062f, -19.938f, -0.079f ); SetAtom(&F.Atoms[ 72 ] , "C", 13.062f, -21.478f, -0.079f ); SetAtom(&F.Atoms[ 73 ] , "C", 14.514f, -21.991f, -0.079f ); SetAtom(&F.Atoms[ 74 ] , "C", 14.514f, -23.531f, -0.079f ); SetAtom(&F.Atoms[ 75 ] , "H", 10.672f, -15.468f, -0.969f ); SetAtom(&F.Atoms[ 76 ] , "H", 10.672f, -15.468f, 0.811f ); SetAtom(&F.Atoms[ 77 ] , "H", 9.644f, -17.734f, 0.811f ); SetAtom(&F.Atoms[ 78 ] , "H", 9.644f, -17.734f, -0.969f ); SetAtom(&F.Atoms[ 79 ] , "H", 12.124f, -17.521f, -0.969f ); SetAtom(&F.Atoms[ 80 ] , "H", 12.124f, -17.521f, 0.811f ); SetAtom(&F.Atoms[ 81 ] , "H", 11.096f, -19.788f, 0.811f ); SetAtom(&F.Atoms[ 82 ] , "H", 11.096f, -19.788f, -0.969f ); SetAtom(&F.Atoms[ 83 ] , "H", 13.576f, -19.574f, -0.969f ); SetAtom(&F.Atoms[ 84 ] , "H", 13.576f, -19.574f, 0.811f ); SetAtom(&F.Atoms[ 85 ] , "H", 12.548f, -21.841f, 0.811f ); SetAtom(&F.Atoms[ 86 ] , "H", 12.548f, -21.841f, -0.969f ); SetAtom(&F.Atoms[ 87 ] , "H", 15.028f, -21.628f, -0.969f ); SetAtom(&F.Atoms[ 88 ] , "H", 15.028f, -21.628f, 0.811f ); SetAtom(&F.Atoms[ 89 ] , "C", 15.966f, -24.044f, -0.079f ); SetAtom(&F.Atoms[ 90 ] , "H", 14.000f, -23.894f, 0.811f ); SetAtom(&F.Atoms[ 91 ] , "H", 14.000f, -23.894f, -0.969f ); SetAtom(&F.Atoms[ 92 ] , "C", 15.966f, -25.584f, -0.079f ); SetAtom(&F.Atoms[ 93 ] , "C", 17.418f, -26.098f, -0.079f ); SetAtom(&F.Atoms[ 94 ] , "C", 17.418f, -27.638f, -0.079f ); SetAtom(&F.Atoms[ 95 ] , "C", 18.870f, -28.151f, -0.079f ); SetAtom(&F.Atoms[ 96 ] , "C", 18.870f, -29.691f, -0.079f ); SetAtom(&F.Atoms[ 97 ] , "C", 20.321f, -30.204f, -0.079f ); SetAtom(&F.Atoms[ 98 ] , "C", 20.321f, -31.744f, -0.079f ); SetAtom(&F.Atoms[ 99 ] , "C", 21.773f, -32.258f, -0.079f ); SetAtom(&F.Atoms[ 100 ] , "C", 21.773f, -33.798f, -0.079f ); SetAtom(&F.Atoms[ 101 ] , "H", 16.480f, -23.681f, -0.969f ); SetAtom(&F.Atoms[ 102 ] , "H", 16.480f, -23.681f, 0.811f ); SetAtom(&F.Atoms[ 103 ] , "H", 15.452f, -25.948f, 0.811f ); SetAtom(&F.Atoms[ 104 ] , "H", 15.452f, -25.948f, -0.969f ); SetAtom(&F.Atoms[ 105 ] , "H", 17.931f, -25.734f, -0.969f ); SetAtom(&F.Atoms[ 106 ] , "H", 17.931f, -25.734f, 0.811f ); SetAtom(&F.Atoms[ 107 ] , "H", 16.904f, -28.001f, 0.811f ); SetAtom(&F.Atoms[ 108 ] , "H", 16.904f, -28.001f, -0.969f ); SetAtom(&F.Atoms[ 109 ] , "H", 19.383f, -27.788f, -0.969f ); SetAtom(&F.Atoms[ 110 ] , "H", 19.383f, -27.788f, 0.811f ); SetAtom(&F.Atoms[ 111 ] , "H", 18.356f, -30.054f, 0.811f ); SetAtom(&F.Atoms[ 112 ] , "H", 18.356f, -30.054f, -0.969f ); SetAtom(&F.Atoms[ 113 ] , "H", 20.835f, -29.841f, -0.969f ); SetAtom(&F.Atoms[ 114 ] , "H", 20.835f, -29.841f, 0.811f ); SetAtom(&F.Atoms[ 115 ] , "H", 19.808f, -32.108f, 0.811f ); SetAtom(&F.Atoms[ 116 ] , "H", 19.808f, -32.108f, -0.969f ); SetAtom(&F.Atoms[ 117 ] , "H", 22.287f, -31.894f, -0.969f ); SetAtom(&F.Atoms[ 118 ] , "H", 22.287f, -31.894f, 0.811f ); SetAtom(&F.Atoms[ 119 ] , "H", 22.801f, -34.161f, -0.079f ); SetAtom(&F.Atoms[ 120 ] , "H", 21.260f, -34.161f, 0.811f ); SetAtom(&F.Atoms[ 121 ] , "H", 21.260f, -34.161f, -0.969f ); F.atomToDelete = 17; F.atomToBondTo = 5; F.angleAtom = 4; } if ( !strcmp(Name, "Acenaphthene" ) ) { F.NAtoms =22; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GAPT"); SetAtom(&F.Atoms[ 0 ] , "C6", -1.247f, -2.075f, -0.001f ); SetAtom(&F.Atoms[ 1 ] , "C7", -2.425f, -1.310f, 0.002f ); SetAtom(&F.Atoms[ 2 ] , "C8", -2.390f, 0.092f, 0.001f ); SetAtom(&F.Atoms[ 3 ] , "C9", -1.145f, 0.724f, -0.001f ); SetAtom(&F.Atoms[ 4 ] , "C1", -0.786f, 2.211f, -0.003f ); SetAtom(&F.Atoms[ 5 ] , "C2", 0.781f, 2.213f, 0.001f ); SetAtom(&F.Atoms[ 6 ] , "C10", 1.144f, 0.726f, 0.001f ); SetAtom(&F.Atoms[ 7 ] , "C3", 2.390f, 0.097f, 0.002f ); SetAtom(&F.Atoms[ 8 ] , "C4", 2.428f, -1.306f, 0.000f ); SetAtom(&F.Atoms[ 9 ] , "C5", 1.251f, -2.072f, -0.001f ); SetAtom(&F.Atoms[ 10 ] , "C11", 0.001f, -1.441f, -0.001f ); SetAtom(&F.Atoms[ 11 ] , "C12", 0.000f, -0.052f, 0.000f ); SetAtom(&F.Atoms[ 12 ] , "H7", 1.312f, -3.156f, -0.002f ); SetAtom(&F.Atoms[ 13 ] , "H6", 3.389f, -1.809f, -0.001f ); SetAtom(&F.Atoms[ 14 ] , "H5", 3.302f, 0.683f, 0.004f ); SetAtom(&F.Atoms[ 15 ] , "H3", 1.193f, 2.693f, 0.902f ); SetAtom(&F.Atoms[ 16 ] , "H4", 1.198f, 2.694f, -0.898f ); SetAtom(&F.Atoms[ 17 ] , "H1", -1.198f, 2.689f, -0.905f ); SetAtom(&F.Atoms[ 18 ] , "H2", -1.203f, 2.694f, 0.895f ); SetAtom(&F.Atoms[ 19 ] , "H10", -3.303f, 0.677f, 0.002f ); SetAtom(&F.Atoms[ 20 ] , "H9", -3.386f, -1.815f, 0.004f ); SetAtom(&F.Atoms[ 21 ] , "H8", -1.306f, -3.158f, -0.003f ); F.atomToDelete = 21; F.atomToBondTo = 0; F.angleAtom = 10; } else if ( !strcmp(Name, "Benzene" ) ) { F.NAtoms =12; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GBZN"); SetAtom(&F.Atoms[ 0 ] , "C1", 5.274f, 1.999f, -8.568f ); SetAtom(&F.Atoms[ 1 ] , "C2", 6.627f, 2.018f, -8.209f ); SetAtom(&F.Atoms[ 2 ] , "C3", 7.366f, 0.829f, -8.202f ); SetAtom(&F.Atoms[ 3 ] , "C4", 6.752f, -0.379f, -8.554f ); SetAtom(&F.Atoms[ 4 ] , "C5", 5.399f, -0.398f, -8.912f ); SetAtom(&F.Atoms[ 5 ] , "C6", 4.660f, 0.791f, -8.919f ); SetAtom(&F.Atoms[ 6 ] , "H11", 4.704f, 2.916f, -8.573f ); SetAtom(&F.Atoms[ 7 ] , "H21", 7.101f, 2.950f, -7.938f ); SetAtom(&F.Atoms[ 8 ] , "H31", 8.410f, 0.844f, -7.926f ); SetAtom(&F.Atoms[ 9 ] , "H41", 7.322f, -1.296f, -8.548f ); SetAtom(&F.Atoms[ 10 ] , "H51", 4.925f, -1.330f, -9.183f ); SetAtom(&F.Atoms[ 11 ] , "H61", 3.616f, 0.776f, -9.196f ); F.atomToDelete = 6; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Benzofuran" ) ) { F.NAtoms =15; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GBNZ"); SetAtom(&F.Atoms[ 0 ] , "C3", -0.630f, -1.409f, -0.001f ); SetAtom(&F.Atoms[ 1 ] , "C4", -1.896f, -0.810f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C5", -2.033f, 0.587f, 0.001f ); SetAtom(&F.Atoms[ 3 ] , "C6", -0.910f, 1.426f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C7", 0.350f, 0.826f, -0.001f ); SetAtom(&F.Atoms[ 5 ] , "O1", 1.554f, 1.528f, -0.001f ); SetAtom(&F.Atoms[ 6 ] , "C1", 2.443f, 0.509f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "C2", 1.957f, -0.741f, 0.001f ); SetAtom(&F.Atoms[ 8 ] , "C8", 0.468f, -0.551f, 0.000f ); SetAtom(&F.Atoms[ 9 ] , "H2", 2.507f, -1.681f, 0.002f ); SetAtom(&F.Atoms[ 10 ] , "H1", 3.515f, 0.704f, 0.000f ); SetAtom(&F.Atoms[ 11 ] , "H6", -1.012f, 2.506f, 0.000f ); SetAtom(&F.Atoms[ 12 ] , "H5", -3.025f, 1.027f, 0.002f ); SetAtom(&F.Atoms[ 13 ] , "H4", -2.783f, -1.436f, -0.001f ); SetAtom(&F.Atoms[ 14 ] , "H3", -0.504f, -2.486f, -0.001f ); F.atomToDelete = 10; F.atomToBondTo = 6; F.angleAtom = 5; } else if ( !strcmp(Name, "Cyclopropane" ) ) { F.NAtoms =9; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GCPA"); SetAtom(&F.Atoms[ 0 ] , "C1", -0.727f, -0.481f, 0.111f ); SetAtom(&F.Atoms[ 1 ] , "C2", 0.780f, -0.397f, -0.078f ); SetAtom(&F.Atoms[ 2 ] , "C3", -0.052f, 0.876f, -0.032f ); SetAtom(&F.Atoms[ 3 ] , "H11", -1.311f, -0.834f, -0.740f ); SetAtom(&F.Atoms[ 4 ] , "H12", -1.087f, -0.752f, 1.103f ); SetAtom(&F.Atoms[ 5 ] , "H21", 1.174f, -0.694f, -1.050f ); SetAtom(&F.Atoms[ 6 ] , "H22", 1.399f, -0.614f, 0.792f ); SetAtom(&F.Atoms[ 7 ] , "H31", -0.202f, 1.404f, -0.974f ); SetAtom(&F.Atoms[ 8 ] , "H32", 0.026f, 1.486f, 0.868f ); F.atomToDelete = 4; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Cyclobutane" ) ) { F.NAtoms =12; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GCBN"); SetAtom(&F.Atoms[ 0 ] , "C1", -1.469f, 0.919f, -0.493f ); SetAtom(&F.Atoms[ 1 ] , "C2", -0.744f, 0.468f, 0.829f ); SetAtom(&F.Atoms[ 2 ] , "C3", 0.641f, 0.549f, 0.088f ); SetAtom(&F.Atoms[ 3 ] , "C4", -0.071f, 1.192f, -1.159f ); SetAtom(&F.Atoms[ 4 ] , "H11", -2.019f, 0.109f, -0.974f ); SetAtom(&F.Atoms[ 5 ] , "H12", -2.064f, 1.822f, -0.365f ); SetAtom(&F.Atoms[ 6 ] , "H21", -1.007f, -0.545f, 1.133f ); SetAtom(&F.Atoms[ 7 ] , "H22", -0.841f, 1.195f, 1.635f ); SetAtom(&F.Atoms[ 8 ] , "H31", 1.070f, -0.430f, -0.126f ); SetAtom(&F.Atoms[ 9 ] , "H32", 1.344f, 1.226f, 0.572f ); SetAtom(&F.Atoms[ 10 ] , "H41", 0.084f, 0.625f, -2.076f ); SetAtom(&F.Atoms[ 11 ] , "H42", 0.147f, 2.254f, -1.272f ); F.atomToDelete = 5; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Cyclobutene" ) ) { F.NAtoms =10; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GCTN"); SetAtom(&F.Atoms[ 0 ] , "C1", -0.662f, -0.898f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C2", 0.664f, -0.897f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C3", 0.781f, 0.600f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C4", -0.783f, 0.598f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "H5", -1.246f, 0.997f, 0.916f ); SetAtom(&F.Atoms[ 5 ] , "H6", -1.246f, 0.997f, -0.916f ); SetAtom(&F.Atoms[ 6 ] , "H3", 1.244f, 0.999f, -0.916f ); SetAtom(&F.Atoms[ 7 ] , "H4", 1.244f, 0.999f, 0.916f ); SetAtom(&F.Atoms[ 8 ] , "H2", 1.405f, -1.696f, 0.000f ); SetAtom(&F.Atoms[ 9 ] , "H1", -1.401f, -1.699f, 0.000f ); F.atomToDelete = 9; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Cyclobutadiene" ) ) { F.NAtoms =8; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GCBD"); SetAtom(&F.Atoms[ 0 ] , "C1", -0.735f, 0.668f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C2", -0.735f, -0.668f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C3", 0.735f, -0.668f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C4", 0.735f, 0.668f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "H4", 1.505f, 1.438f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "H3", 1.505f, -1.438f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "H2", -1.505f, -1.438f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H1", -1.505f, 1.438f, 0.000f ); F.atomToDelete = 7; F.atomToBondTo = 0; F.angleAtom = 1; } if ( !strcmp(Name, "Cyclopentane" ) ) { F.NAtoms =15; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GCPT"); SetAtom(&F.Atoms[ 0 ] , "C1", 2.791f, 1.160f, -8.743f ); SetAtom(&F.Atoms[ 1 ] , "C2", 4.193f, 1.206f, -8.137f ); SetAtom(&F.Atoms[ 2 ] , "C3", 4.756f, -0.182f, -8.439f ); SetAtom(&F.Atoms[ 3 ] , "C13", 2.943f, 0.322f, -10.017f ); SetAtom(&F.Atoms[ 4 ] , "C33", 4.201f, -0.537f, -9.822f ); SetAtom(&F.Atoms[ 5 ] , "H11", 2.090f, 0.667f, -8.043f ); SetAtom(&F.Atoms[ 6 ] , "H12", 2.387f, 2.169f, -8.947f ); SetAtom(&F.Atoms[ 7 ] , "H21", 4.803f, 1.988f, -8.628f ); SetAtom(&F.Atoms[ 8 ] , "H22", 4.179f, 1.432f, -7.055f ); SetAtom(&F.Atoms[ 9 ] , "H31", 5.861f, -0.204f, -8.408f ); SetAtom(&F.Atoms[ 10 ] , "H32", 4.398f, -0.910f, -7.685f ); SetAtom(&F.Atoms[ 11 ] , "H131", 3.065f, 0.979f, -10.899f ); SetAtom(&F.Atoms[ 12 ] , "H132", 2.045f, -0.295f, -10.203f ); SetAtom(&F.Atoms[ 13 ] , "H332", 4.945f, -0.305f, -10.607f ); SetAtom(&F.Atoms[ 14 ] , "H331", 3.981f, -1.618f, -9.903f ); F.atomToDelete = 6; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Cyclopentene" ) ) { F.NAtoms =13; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GCPN"); SetAtom(&F.Atoms[ 0 ] , "C1", -0.667f, 1.157f, 0.052f ); SetAtom(&F.Atoms[ 1 ] , "C2", 0.667f, 1.157f, 0.052f ); SetAtom(&F.Atoms[ 2 ] , "C3", 1.232f, -0.221f, -0.140f ); SetAtom(&F.Atoms[ 3 ] , "C4", 0.000f, -1.095f, 0.207f ); SetAtom(&F.Atoms[ 4 ] , "C5", -1.232f, -0.221f, -0.140f ); SetAtom(&F.Atoms[ 5 ] , "H7", -1.533f, -0.341f, -1.192f ); SetAtom(&F.Atoms[ 6 ] , "H8", -2.092f, -0.426f, 0.519f ); SetAtom(&F.Atoms[ 7 ] , "H5", 0.000f, -1.281f, 1.295f ); SetAtom(&F.Atoms[ 8 ] , "H6", 0.000f, -2.067f, -0.313f ); SetAtom(&F.Atoms[ 9 ] , "H3", 2.092f, -0.426f, 0.518f ); SetAtom(&F.Atoms[ 10 ] , "H4", 1.533f, -0.341f, -1.193f ); SetAtom(&F.Atoms[ 11 ] , "H2", 1.278f, 2.052f, 0.167f ); SetAtom(&F.Atoms[ 12 ] , "H1", -1.278f, 2.052f, 0.167f ); F.atomToDelete = 12; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Cyclopentadiene" ) ) { F.NAtoms =11; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GCPE"); SetAtom(&F.Atoms[ 0 ] , "C1", -0.189f, 1.147f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C2", 1.081f, 0.733f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "C3", 1.081f, -0.733f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C4", -0.188f, -1.147f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C5", -1.162f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "H5", -1.789f, 0.000f, -0.905f ); SetAtom(&F.Atoms[ 6 ] , "H6", -1.790f, 0.000f, 0.904f ); SetAtom(&F.Atoms[ 7 ] , "H4", -0.487f, -2.196f, 0.000f ); SetAtom(&F.Atoms[ 8 ] , "H3", 1.966f, -1.368f, 0.000f ); SetAtom(&F.Atoms[ 9 ] , "H2", 1.965f, 1.369f, 0.000f ); SetAtom(&F.Atoms[ 10 ] , "H1", -0.488f, 2.195f, 0.001f ); F.atomToDelete = 10; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Cyclohexane" ) ) { F.NAtoms =18; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GCHX"); SetAtom(&F.Atoms[ 0 ] , "C1", 3.593f, 1.069f, -9.284f ); SetAtom(&F.Atoms[ 1 ] , "C2", 4.975f, 0.956f, -8.613f ); SetAtom(&F.Atoms[ 2 ] , "C3", 4.949f, -0.181f, -7.573f ); SetAtom(&F.Atoms[ 3 ] , "C4", 3.883f, 0.121f, -6.502f ); SetAtom(&F.Atoms[ 4 ] , "C5", 2.501f, 0.233f, -7.172f ); SetAtom(&F.Atoms[ 5 ] , "C6", 2.525f, 1.371f, -8.211f ); SetAtom(&F.Atoms[ 6 ] , "H11", 3.611f, 1.860f, -10.006f ); SetAtom(&F.Atoms[ 7 ] , "H12", 3.356f, 0.147f, -9.772f ); SetAtom(&F.Atoms[ 8 ] , "H21", 5.716f, 0.746f, -9.356f ); SetAtom(&F.Atoms[ 9 ] , "H22", 5.212f, 1.878f, -8.125f ); SetAtom(&F.Atoms[ 10 ] , "H31", 5.909f, -0.260f, -7.107f ); SetAtom(&F.Atoms[ 11 ] , "H32", 4.713f, -1.104f, -8.061f ); SetAtom(&F.Atoms[ 12 ] , "H41", 3.866f, -0.669f, -5.780f ); SetAtom(&F.Atoms[ 13 ] , "H42", 4.119f, 1.043f, -6.014f ); SetAtom(&F.Atoms[ 14 ] , "H51", 1.760f, 0.443f, -6.428f ); SetAtom(&F.Atoms[ 15 ] , "H52", 2.264f, -0.689f, -7.660f ); SetAtom(&F.Atoms[ 16 ] , "H61", 1.564f, 1.449f, -8.677f ); SetAtom(&F.Atoms[ 17 ] , "H62", 2.761f, 2.294f, -7.724f ); F.atomToDelete = 7; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Cyclohexene" ) ) { F.NAtoms =16; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GCHH"); SetAtom(&F.Atoms[ 0 ] , "C1", -0.668f, 1.407f, 0.049f ); SetAtom(&F.Atoms[ 1 ] , "C2", 0.668f, 1.407f, -0.050f ); SetAtom(&F.Atoms[ 2 ] , "C3", 1.494f, 0.146f, -0.108f ); SetAtom(&F.Atoms[ 3 ] , "C4", 0.690f, -1.098f, 0.349f ); SetAtom(&F.Atoms[ 4 ] , "C5", -0.690f, -1.098f, -0.350f ); SetAtom(&F.Atoms[ 5 ] , "C6", -1.494f, 0.146f, 0.109f ); SetAtom(&F.Atoms[ 6 ] , "H9", -2.387f, 0.253f, -0.527f ); SetAtom(&F.Atoms[ 7 ] , "H10", -1.827f, 0.014f, 1.151f ); SetAtom(&F.Atoms[ 8 ] , "H7", -1.248f, -2.017f, -0.102f ); SetAtom(&F.Atoms[ 9 ] , "H8", -0.543f, -1.068f, -1.442f ); SetAtom(&F.Atoms[ 10 ] , "H5", 0.543f, -1.069f, 1.441f ); SetAtom(&F.Atoms[ 11 ] , "H6", 1.249f, -2.016f, 0.100f ); SetAtom(&F.Atoms[ 12 ] , "H3", 2.386f, 0.254f, 0.530f ); SetAtom(&F.Atoms[ 13 ] , "H4", 1.829f, 0.015f, -1.150f ); SetAtom(&F.Atoms[ 14 ] , "H2", 1.194f, 2.362f, -0.097f ); SetAtom(&F.Atoms[ 15 ] , "H1", -1.195f, 2.362f, 0.096f ); F.atomToDelete = 15; F.atomToBondTo = 0; F.angleAtom = 1; } if ( !strcmp(Name, "Cycloheptane" ) ) { F.NAtoms =21; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GCPP"); SetAtom(&F.Atoms[ 0 ] , "C1", 1.612f, -0.409f, -0.203f ); SetAtom(&F.Atoms[ 1 ] , "C2", 1.326f, 0.967f, 0.406f ); SetAtom(&F.Atoms[ 2 ] , "C3", 0.086f, 1.717f, -0.109f ); SetAtom(&F.Atoms[ 3 ] , "C4", -1.296f, 1.081f, 0.115f ); SetAtom(&F.Atoms[ 4 ] , "C5", -1.559f, -0.274f, -0.551f ); SetAtom(&F.Atoms[ 5 ] , "C6", -0.837f, -1.496f, 0.086f ); SetAtom(&F.Atoms[ 6 ] , "C7", 0.669f, -1.562f, 0.247f ); SetAtom(&F.Atoms[ 7 ] , "H11", 1.585f, -0.364f, -1.299f ); SetAtom(&F.Atoms[ 8 ] , "H12", 2.639f, -0.697f, 0.063f ); SetAtom(&F.Atoms[ 9 ] , "H22", 1.281f, 0.915f, 1.498f ); SetAtom(&F.Atoms[ 10 ] , "H21", 2.183f, 1.619f, 0.161f ); SetAtom(&F.Atoms[ 11 ] , "H32", 0.071f, 2.691f, 0.403f ); SetAtom(&F.Atoms[ 12 ] , "H31", 0.213f, 1.920f, -1.180f ); SetAtom(&F.Atoms[ 13 ] , "H42", -1.498f, 1.038f, 1.189f ); SetAtom(&F.Atoms[ 14 ] , "H41", -2.020f, 1.800f, -0.309f ); SetAtom(&F.Atoms[ 15 ] , "H52", -2.639f, -0.470f, -0.515f ); SetAtom(&F.Atoms[ 16 ] , "H51", -1.289f, -0.245f, -1.614f ); SetAtom(&F.Atoms[ 17 ] , "H62", -1.349f, -1.643f, 1.069f ); SetAtom(&F.Atoms[ 18 ] , "H61", -1.213f, -2.362f, -0.508f ); SetAtom(&F.Atoms[ 19 ] , "H72", 0.945f, -1.749f, 1.314f ); SetAtom(&F.Atoms[ 20 ] , "H71", 1.088f, -2.459f, -0.267f ); F.atomToDelete = 8; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Cycloheptene" ) ) { F.NAtoms =19; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GCHE"); SetAtom(&F.Atoms[ 0 ] , "C1", -0.669f, 1.630f, -0.184f ); SetAtom(&F.Atoms[ 1 ] , "C2", 0.669f, 1.630f, -0.184f ); SetAtom(&F.Atoms[ 2 ] , "C3", 1.501f, 0.528f, 0.423f ); SetAtom(&F.Atoms[ 3 ] , "C4", 1.307f, -0.817f, -0.326f ); SetAtom(&F.Atoms[ 4 ] , "C5", 0.000f, -1.560f, 0.065f ); SetAtom(&F.Atoms[ 5 ] , "C6", -1.307f, -0.817f, -0.326f ); SetAtom(&F.Atoms[ 6 ] , "C7", -1.501f, 0.528f, 0.423f ); SetAtom(&F.Atoms[ 7 ] , "H11", -2.561f, 0.824f, 0.343f ); SetAtom(&F.Atoms[ 8 ] , "H12", -1.273f, 0.417f, 1.494f ); SetAtom(&F.Atoms[ 9 ] , "H9", -2.150f, -1.480f, -0.065f ); SetAtom(&F.Atoms[ 10 ] , "H10", -1.338f, -0.647f, -1.415f ); SetAtom(&F.Atoms[ 11 ] , "H7", 0.000f, -1.755f, 1.151f ); SetAtom(&F.Atoms[ 12 ] , "H8", 0.000f, -2.538f, -0.447f ); SetAtom(&F.Atoms[ 13 ] , "H5", 2.150f, -1.480f, -0.065f ); SetAtom(&F.Atoms[ 14 ] , "H6", 1.338f, -0.647f, -1.415f ); SetAtom(&F.Atoms[ 15 ] , "H3", 1.273f, 0.417f, 1.494f ); SetAtom(&F.Atoms[ 16 ] , "H4", 2.561f, 0.825f, 0.343f ); SetAtom(&F.Atoms[ 17 ] , "H2", 1.184f, 2.471f, -0.653f ); SetAtom(&F.Atoms[ 18 ] , "H1", -1.185f, 2.471f, -0.653f ); F.atomToDelete = 18; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Cyclooctane" ) ) { F.NAtoms =24; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GCON"); SetAtom(&F.Atoms[ 0 ] , "C1", 0.255f, 0.953f, -1.443f ); SetAtom(&F.Atoms[ 1 ] , "C2", -1.254f, 0.921f, -1.138f ); SetAtom(&F.Atoms[ 2 ] , "C3", -1.798f, 0.027f, -0.024f ); SetAtom(&F.Atoms[ 3 ] , "C4", -1.298f, 0.208f, 1.409f ); SetAtom(&F.Atoms[ 4 ] , "C5", 0.201f, 0.068f, 1.735f ); SetAtom(&F.Atoms[ 5 ] , "C6", 1.015f, -1.058f, 1.106f ); SetAtom(&F.Atoms[ 6 ] , "C7", 1.813f, -0.782f, -0.187f ); SetAtom(&F.Atoms[ 7 ] , "C8", 1.057f, -0.344f, -1.461f ); SetAtom(&F.Atoms[ 8 ] , "H9", 0.722f, 1.695f, -0.758f ); SetAtom(&F.Atoms[ 9 ] , "H10", 0.343f, 1.472f, -2.428f ); SetAtom(&F.Atoms[ 10 ] , "H11", -1.789f, 0.596f, -2.058f ); SetAtom(&F.Atoms[ 11 ] , "H12", -1.604f, 1.947f, -0.955f ); SetAtom(&F.Atoms[ 12 ] , "H13", -1.619f, -1.024f, -0.316f ); SetAtom(&F.Atoms[ 13 ] , "4H1", -2.889f, 0.164f, -0.004f ); SetAtom(&F.Atoms[ 14 ] , "5H1", -1.653f, 1.181f, 1.777f ); SetAtom(&F.Atoms[ 15 ] , "6H1", -1.856f, -0.546f, 2.009f ); SetAtom(&F.Atoms[ 16 ] , "7H1", 0.253f, 0.003f, 2.848f ); SetAtom(&F.Atoms[ 17 ] , "8H1", 0.681f, 1.054f, 1.546f ); SetAtom(&F.Atoms[ 18 ] , "H19", 0.407f, -1.957f, 0.916f ); SetAtom(&F.Atoms[ 19 ] , "H20", 1.787f, -1.401f, 1.831f ); SetAtom(&F.Atoms[ 20 ] , "H21", 2.555f, -0.003f, 0.041f ); SetAtom(&F.Atoms[ 21 ] , "H22", 2.365f, -1.698f, -0.433f ); SetAtom(&F.Atoms[ 22 ] , "H23", 0.450f, -1.206f, -1.779f ); SetAtom(&F.Atoms[ 23 ] , "4H2", 1.853f, -0.272f, -2.235f ); F.atomToDelete = 9; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Imidazole" ) ) { F.NAtoms =9; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GIDL"); SetAtom(&F.Atoms[ 0 ] , "N1", 0.650f, 0.656f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C1", 1.087f, -0.564f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "N2", 0.110f, -1.350f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C2", -1.121f, -0.607f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C3", -0.664f, 0.661f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "H4", -1.294f, 1.551f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "H3", -2.147f, -0.974f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H2", 2.132f, -0.871f, 0.000f ); SetAtom(&F.Atoms[ 8 ] , "H1", 1.246f, 1.498f, 0.000f ); F.atomToDelete = 8; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Norbornane" ) ) { F.NAtoms =19; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GNBN"); SetAtom(&F.Atoms[ 0 ] , "C1", -0.002f, 1.117f, 0.354f ); SetAtom(&F.Atoms[ 1 ] , "C2", 1.264f, 0.778f, -0.478f ); SetAtom(&F.Atoms[ 2 ] , "C3", 1.267f, -0.775f, -0.476f ); SetAtom(&F.Atoms[ 3 ] , "C4", 0.002f, -1.117f, 0.354f ); SetAtom(&F.Atoms[ 4 ] , "C5", -1.264f, -0.778f, -0.478f ); SetAtom(&F.Atoms[ 5 ] , "C6", -1.267f, 0.775f, -0.476f ); SetAtom(&F.Atoms[ 6 ] , "H9", -1.230f, 1.206f, -1.489f ); SetAtom(&F.Atoms[ 7 ] , "H10", -2.164f, 1.163f, 0.036f ); SetAtom(&F.Atoms[ 8 ] , "H7", -2.160f, -1.172f, 0.030f ); SetAtom(&F.Atoms[ 9 ] , "H8", -1.222f, -1.207f, -1.492f ); SetAtom(&F.Atoms[ 10 ] , "C7", 0.000f, 0.000f, 1.419f ); SetAtom(&F.Atoms[ 11 ] , "H11", -0.900f, -0.002f, 2.056f ); SetAtom(&F.Atoms[ 12 ] , "H12", 0.900f, 0.001f, 2.056f ); SetAtom(&F.Atoms[ 13 ] , "H6", 0.003f, -2.147f, 0.750f ); SetAtom(&F.Atoms[ 14 ] , "H4", 2.164f, -1.163f, 0.036f ); SetAtom(&F.Atoms[ 15 ] , "H5", 1.230f, -1.206f, -1.489f ); SetAtom(&F.Atoms[ 16 ] , "H2", 2.160f, 1.172f, 0.031f ); SetAtom(&F.Atoms[ 17 ] , "H3", 1.222f, 1.207f, -1.492f ); SetAtom(&F.Atoms[ 18 ] , "H1", -0.003f, 2.147f, 0.750f ); F.atomToDelete = 16; F.atomToBondTo = 1; F.angleAtom = 0; } else if ( !strcmp(Name, "2-Norbornene" ) ) { F.NAtoms =17; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"G2NB"); SetAtom(&F.Atoms[ 0 ] , "C1", -0.184f, -1.124f, -0.292f ); SetAtom(&F.Atoms[ 1 ] , "C2", -1.342f, -0.666f, 0.553f ); SetAtom(&F.Atoms[ 2 ] , "C3", -1.341f, 0.667f, 0.554f ); SetAtom(&F.Atoms[ 3 ] , "C4", -0.182f, 1.124f, -0.292f ); SetAtom(&F.Atoms[ 4 ] , "C5", 1.104f, 0.779f, 0.506f ); SetAtom(&F.Atoms[ 5 ] , "C6", 1.102f, -0.781f, 0.506f ); SetAtom(&F.Atoms[ 6 ] , "H7", 1.986f, -1.179f, -0.019f ); SetAtom(&F.Atoms[ 7 ] , "H8", 1.070f, -1.209f, 1.521f ); SetAtom(&F.Atoms[ 8 ] , "H5", 1.073f, 1.208f, 1.521f ); SetAtom(&F.Atoms[ 9 ] , "H6", 1.988f, 1.176f, -0.020f ); SetAtom(&F.Atoms[ 10 ] , "C7", -0.209f, 0.001f, -1.350f ); SetAtom(&F.Atoms[ 11 ] , "H9", -1.126f, 0.001f, -1.966f ); SetAtom(&F.Atoms[ 12 ] , "H10", 0.673f, 0.000f, -2.013f ); SetAtom(&F.Atoms[ 13 ] , "H4", -0.259f, 2.151f, -0.683f ); SetAtom(&F.Atoms[ 14 ] , "H3", -2.045f, 1.311f, 1.081f ); SetAtom(&F.Atoms[ 15 ] , "H2", -2.047f, -1.309f, 1.079f ); SetAtom(&F.Atoms[ 16 ] , "H1", -0.262f, -2.151f, -0.685f ); F.atomToDelete = 6; F.atomToBondTo = 5; F.angleAtom = 0; } if ( !strcmp(Name, "Oxazole" ) ) { F.NAtoms =8; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GOXL"); SetAtom(&F.Atoms[ 0 ] , "O1", 0.602f, 1.081f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C1", 1.321f, -0.058f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "N1", 0.511f, -1.030f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C2", -0.870f, -0.652f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C3", -0.682f, 0.668f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "H3", -1.511f, 1.375f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "H2", -1.777f, -1.255f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H1", 2.407f, -0.130f, 0.000f ); F.atomToDelete = 6; F.atomToBondTo = 3; F.angleAtom = 4; } else if ( !strcmp(Name, "Porphine" ) ) { F.NAtoms =38; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GPFN"); SetAtom(&F.Atoms[ 0 ] , "C1", -2.374f, 0.827f, -8.284f ); SetAtom(&F.Atoms[ 1 ] , "C2", -1.021f, 0.847f, -7.926f ); SetAtom(&F.Atoms[ 2 ] , "C2", -0.534f, -0.464f, -8.004f ); SetAtom(&F.Atoms[ 3 ] , "N2", -1.587f, -1.293f, -8.411f ); SetAtom(&F.Atoms[ 4 ] , "C2", -2.724f, -0.495f, -8.584f ); SetAtom(&F.Atoms[ 5 ] , "C1", 0.775f, -0.873f, -7.725f ); SetAtom(&F.Atoms[ 6 ] , "C4", 1.262f, -2.183f, -7.803f ); SetAtom(&F.Atoms[ 7 ] , "C3", 2.571f, -2.593f, -7.524f ); SetAtom(&F.Atoms[ 8 ] , "C4", 2.643f, -3.977f, -7.723f ); SetAtom(&F.Atoms[ 9 ] , "C4", 1.379f, -4.423f, -8.125f ); SetAtom(&F.Atoms[ 10 ] , "N4", 0.525f, -3.314f, -8.175f ); SetAtom(&F.Atoms[ 11 ] , "C2", 1.029f, -5.745f, -8.425f ); SetAtom(&F.Atoms[ 12 ] , "C6", -0.235f, -6.191f, -8.828f ); SetAtom(&F.Atoms[ 13 ] , "C5", -0.585f, -7.513f, -9.127f ); SetAtom(&F.Atoms[ 14 ] , "C6", -1.938f, -7.532f, -9.486f ); SetAtom(&F.Atoms[ 15 ] , "C6", -2.425f, -6.221f, -9.407f ); SetAtom(&F.Atoms[ 16 ] , "N6", -1.373f, -5.393f, -9.001f ); SetAtom(&F.Atoms[ 17 ] , "C1", -3.734f, -5.812f, -9.687f ); SetAtom(&F.Atoms[ 18 ] , "C8", -4.221f, -4.502f, -9.608f ); SetAtom(&F.Atoms[ 19 ] , "C7", -5.530f, -4.092f, -9.888f ); SetAtom(&F.Atoms[ 20 ] , "C8", -5.603f, -2.708f, -9.689f ); SetAtom(&F.Atoms[ 21 ] , "C8", -4.338f, -2.263f, -9.287f ); SetAtom(&F.Atoms[ 22 ] , "N8", -3.484f, -3.371f, -9.237f ); SetAtom(&F.Atoms[ 23 ] , "C4", -3.989f, -0.940f, -8.987f ); SetAtom(&F.Atoms[ 24 ] , "H11", -3.033f, 1.682f, -8.323f ); SetAtom(&F.Atoms[ 25 ] , "H21", -0.453f, 1.719f, -7.639f ); SetAtom(&F.Atoms[ 26 ] , "H1", 1.474f, -0.108f, -7.421f ); SetAtom(&F.Atoms[ 27 ] , "H31", 3.383f, -1.954f, -7.210f ); SetAtom(&F.Atoms[ 28 ] , "H41", 3.521f, -4.592f, -7.589f ); SetAtom(&F.Atoms[ 29 ] , "H4", -0.451f, -3.328f, -8.434f ); SetAtom(&F.Atoms[ 30 ] , "H1", 1.807f, -6.489f, -8.338f ); SetAtom(&F.Atoms[ 31 ] , "H51", 0.074f, -8.368f, -9.089f ); SetAtom(&F.Atoms[ 32 ] , "H61", -2.507f, -8.404f, -9.773f ); SetAtom(&F.Atoms[ 33 ] , "H1", -4.433f, -6.577f, -9.991f ); SetAtom(&F.Atoms[ 34 ] , "H71", -6.342f, -4.732f, -10.202f ); SetAtom(&F.Atoms[ 35 ] , "H81", -6.480f, -2.093f, -9.822f ); SetAtom(&F.Atoms[ 36 ] , "H8", -2.508f, -3.357f, -8.978f ); SetAtom(&F.Atoms[ 37 ] , "H1", -4.766f, -0.196f, -9.074f ); F.atomToDelete = 35; F.atomToBondTo = 20; F.angleAtom = 21; } else if ( !strcmp(Name, "Xanthene" ) ) { F.NAtoms =24; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GXTN"); SetAtom(&F.Atoms[ 0 ] , "C1", 2.512f, 1.210f, 0.031f ); SetAtom(&F.Atoms[ 1 ] , "C2", 3.694f, 0.467f, 0.092f ); SetAtom(&F.Atoms[ 2 ] , "C3", 3.639f, -0.929f, 0.065f ); SetAtom(&F.Atoms[ 3 ] , "C4", 2.401f, -1.572f, -0.020f ); SetAtom(&F.Atoms[ 4 ] , "C5", 1.217f, -0.832f, -0.078f ); SetAtom(&F.Atoms[ 5 ] , "C6", 1.272f, 0.566f, -0.054f ); SetAtom(&F.Atoms[ 6 ] , "C9", 0.000f, 1.408f, -0.121f ); SetAtom(&F.Atoms[ 7 ] , "C8", -1.273f, 0.566f, -0.056f ); SetAtom(&F.Atoms[ 8 ] , "C7", -1.216f, -0.832f, -0.076f ); SetAtom(&F.Atoms[ 9 ] , "O1", 0.000f, -1.512f, -0.159f ); SetAtom(&F.Atoms[ 10 ] , "C10", -2.401f, -1.573f, -0.015f ); SetAtom(&F.Atoms[ 11 ] , "C11", -3.638f, -0.929f, 0.068f ); SetAtom(&F.Atoms[ 12 ] , "C12", -3.694f, 0.467f, 0.089f ); SetAtom(&F.Atoms[ 13 ] , "C13", -2.512f, 1.210f, 0.025f ); SetAtom(&F.Atoms[ 14 ] , "H10", -2.560f, 2.294f, 0.037f ); SetAtom(&F.Atoms[ 15 ] , "H9", -4.653f, 0.972f, 0.154f ); SetAtom(&F.Atoms[ 16 ] , "H8", -4.553f, -1.512f, 0.117f ); SetAtom(&F.Atoms[ 17 ] , "H7", -2.356f, -2.657f, -0.032f ); SetAtom(&F.Atoms[ 18 ] , "H5", 0.001f, 1.973f, -1.066f ); SetAtom(&F.Atoms[ 19 ] , "H6", -0.001f, 2.116f, 0.722f ); SetAtom(&F.Atoms[ 20 ] , "H4", 2.357f, -2.656f, -0.042f ); SetAtom(&F.Atoms[ 21 ] , "H3", 4.554f, -1.511f, 0.110f ); SetAtom(&F.Atoms[ 22 ] , "H2", 4.652f, 0.973f, 0.161f ); SetAtom(&F.Atoms[ 23 ] , "H1", 2.559f, 2.294f, 0.049f ); F.atomToDelete = 23; F.atomToBondTo = 0; F.angleAtom = 5; } else if ( !strcmp(Name, "Ammonia" ) ) { F.NAtoms =4; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GAMA"); SetAtom(&F.Atoms[ 0 ] , "N1", 0.000f, 0.000f, -0.270f ); SetAtom(&F.Atoms[ 1 ] , "H1", 0.000f, 1.018f, 0.090f ); SetAtom(&F.Atoms[ 2 ] , "H2", 0.882f, -0.509f, 0.090f ); SetAtom(&F.Atoms[ 3 ] , "H3", -0.882f, -0.509f, 0.090f ); F.atomToDelete = 3; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Formaldehyde" ) ) { F.NAtoms =4; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GFMD"); SetAtom(&F.Atoms[ 0 ] , "C1", 0.033f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "O1", -1.187f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "H1", 0.577f, 0.943f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "H2", 0.577f, -0.943f, 0.000f ); F.atomToDelete = 3; F.atomToBondTo = 0; F.angleAtom = 1; } if ( !strcmp(Name, "Formamide" ) ) { F.NAtoms =6; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GFME"); SetAtom(&F.Atoms[ 0 ] , "C1", -0.640f, -0.053f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "O1", -1.364f, 0.930f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "N1", 0.708f, 0.030f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "H2", 1.157f, 0.924f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "H3", 1.266f, -0.802f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "H1", -1.127f, -1.029f, 0.000f ); F.atomToDelete = 5; F.atomToBondTo = 0; F.angleAtom = 2; } else if ( !strcmp(Name, "Glycerol" ) ) { F.NAtoms =14; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GGCL"); SetAtom(&F.Atoms[ 0 ] , "C1", 2.383f, 0.745f, -8.395f ); SetAtom(&F.Atoms[ 1 ] , "O4", 1.852f, 2.071f, -8.326f ); SetAtom(&F.Atoms[ 2 ] , "C2", 3.871f, 0.766f, -8.001f ); SetAtom(&F.Atoms[ 3 ] , "O5", 4.591f, 1.614f, -8.899f ); SetAtom(&F.Atoms[ 4 ] , "C3", 4.443f, -0.662f, -8.076f ); SetAtom(&F.Atoms[ 5 ] , "O6", 5.825f, -0.642f, -7.710f ); SetAtom(&F.Atoms[ 6 ] , "H11", 2.283f, 0.373f, -9.394f ); SetAtom(&F.Atoms[ 7 ] , "H12", 1.844f, 0.110f, -7.723f ); SetAtom(&F.Atoms[ 8 ] , "H41", 0.924f, 2.058f, -8.572f ); SetAtom(&F.Atoms[ 9 ] , "H21", 3.971f, 1.138f, -7.003f ); SetAtom(&F.Atoms[ 10 ] , "H51", 4.502f, 1.281f, -9.795f ); SetAtom(&F.Atoms[ 11 ] , "H31", 3.905f, -1.298f, -7.404f ); SetAtom(&F.Atoms[ 12 ] , "H32", 4.344f, -1.035f, -9.074f ); SetAtom(&F.Atoms[ 13 ] , "H61", 6.181f, -1.533f, -7.756f ); F.atomToDelete = 10; F.atomToBondTo = 3; F.angleAtom = 2; } else if ( !strcmp(Name, "Glycol" ) ) { F.NAtoms =10; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GGCO"); SetAtom(&F.Atoms[ 0 ] , "C1", 3.176f, 0.694f, -8.784f ); SetAtom(&F.Atoms[ 1 ] , "O3", 2.784f, -0.645f, -9.098f ); SetAtom(&F.Atoms[ 2 ] , "C2", 4.664f, 0.715f, -8.390f ); SetAtom(&F.Atoms[ 3 ] , "O4", 5.056f, 2.054f, -8.076f ); SetAtom(&F.Atoms[ 4 ] , "H11", 2.585f, 1.056f, -7.969f ); SetAtom(&F.Atoms[ 5 ] , "H12", 3.024f, 1.319f, -9.639f ); SetAtom(&F.Atoms[ 6 ] , "H31", 1.856f, -0.658f, -9.344f ); SetAtom(&F.Atoms[ 7 ] , "H21", 5.255f, 0.353f, -9.205f ); SetAtom(&F.Atoms[ 8 ] , "H22", 4.816f, 0.090f, -7.535f ); SetAtom(&F.Atoms[ 9 ] , "H41", 5.984f, 2.067f, -7.830f ); F.atomToDelete = 6; F.atomToBondTo = 1; F.angleAtom = 0; } if ( !strcmp(Name, "Hydrazone" ) ) { F.NAtoms =7; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GHZN"); SetAtom(&F.Atoms[ 0 ] , "C1", 2.803f, 1.003f, -8.612f ); SetAtom(&F.Atoms[ 1 ] , "N2", 4.050f, 1.020f, -8.282f ); SetAtom(&F.Atoms[ 2 ] , "N3", 4.631f, 0.086f, -8.276f ); SetAtom(&F.Atoms[ 3 ] , "H11", 2.238f, 1.911f, -8.617f ); SetAtom(&F.Atoms[ 4 ] , "H12", 2.334f, 0.079f, -8.881f ); SetAtom(&F.Atoms[ 5 ] , "H31", 4.988f, -0.084f, -7.347f ); SetAtom(&F.Atoms[ 6 ] , "H32", 5.402f, 0.165f, -8.924f ); F.atomToDelete = 4; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "Imine" ) ) { F.NAtoms =5; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GIMN"); SetAtom(&F.Atoms[ 0 ] , "N1", -0.747f, -0.496f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "C1", 0.425f, -0.001f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "H2", 1.281f, -0.675f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "H3", 0.603f, 1.075f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "H1", -1.562f, 0.098f, 0.000f ); F.atomToDelete = 3; F.atomToBondTo = 1; F.angleAtom = 0; } else if ( !strcmp(Name, "Urea" ) ) { F.NAtoms =8; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GURA"); SetAtom(&F.Atoms[ 0 ] , "C1", 0.000f, 0.481f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "O1", 0.000f, 1.703f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "N1", -1.170f, -0.197f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "H1", -2.038f, 0.303f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "H2", -1.193f, -1.198f, 0.000f ); SetAtom(&F.Atoms[ 5 ] , "N2", 1.170f, -0.197f, 0.000f ); SetAtom(&F.Atoms[ 6 ] , "H4", 2.038f, 0.303f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "H3", 1.193f, -1.198f, 0.000f ); F.atomToDelete = 6; F.atomToBondTo = 5; F.angleAtom = 0; } else if ( !strcmp(Name, "Water" ) ) { F.NAtoms =3; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"HOH"); SetAtom(&F.Atoms[ 0 ] , "OW", 0.000f, -0.388f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "HW1", 0.751f, 0.194f, 0.000f ); SetAtom(&F.Atoms[ 2 ] , "HW2", -0.751f, 0.194f, 0.000f ); F.atomToDelete = 2; F.atomToBondTo = 0; F.angleAtom = 1; } else if ( !strcmp(Name, "C60" ) ) { F.NAtoms = 60; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GC60"); SetAtom(&F.Atoms[ 0 ] , "C",1.226500f,0.000000f,3.314500f); SetAtom(&F.Atoms[ 1 ] , "C",0.379000f,1.166400f,3.314500f); SetAtom(&F.Atoms[ 2 ] , "C",-0.992200f,0.720900f,3.314500f); SetAtom(&F.Atoms[ 3 ] , "C",-0.992200f,-0.720900f,3.314500f); SetAtom(&F.Atoms[ 4 ] , "C",0.379000f,-1.166400f,3.314500f); SetAtom(&F.Atoms[ 5 ] , "C",3.408400f,0.720900f,0.594800f); SetAtom(&F.Atoms[ 6 ] , "C",2.795100f,1.166400f,1.821300f); SetAtom(&F.Atoms[ 7 ] , "C",2.416100f,0.000000f,2.579300f); SetAtom(&F.Atoms[ 8 ] , "C",2.795100f,-1.166400f,1.821300f); SetAtom(&F.Atoms[ 9 ] , "C",3.408400f,-0.720900f,0.594800f); SetAtom(&F.Atoms[ 10 ] , "C",0.367600f,3.464300f,0.594800f); SetAtom(&F.Atoms[ 11 ] , "C",-0.245600f,3.018800f,1.821300f); SetAtom(&F.Atoms[ 12 ] , "C",0.746600f,2.297900f,2.579300f); SetAtom(&F.Atoms[ 13 ] , "C",1.973100f,2.297900f,1.821300f); SetAtom(&F.Atoms[ 14 ] , "C",1.738900f,3.018800f,0.594800f); SetAtom(&F.Atoms[ 15 ] , "C",-3.181200f,1.420200f,0.594800f); SetAtom(&F.Atoms[ 16 ] , "C",-2.946900f,0.699300f,1.821300f); SetAtom(&F.Atoms[ 17 ] , "C",-1.954700f,1.420200f,2.579300f); SetAtom(&F.Atoms[ 18 ] , "C",-1.575700f,2.586600f,1.821300f); SetAtom(&F.Atoms[ 19 ] , "C",-2.333700f,2.586600f,0.594800f); SetAtom(&F.Atoms[ 20 ] , "C",-2.333700f,-2.586600f,0.594800f); SetAtom(&F.Atoms[ 21 ] , "C",-1.575700f,-2.586600f,1.821300f); SetAtom(&F.Atoms[ 22 ] , "C",-1.954700f,-1.420200f,2.579300f); SetAtom(&F.Atoms[ 23 ] , "C",-2.946900f,-0.699300f,1.821300f); SetAtom(&F.Atoms[ 24 ] , "C",-3.181200f,-1.420200f,0.594800f); SetAtom(&F.Atoms[ 25 ] , "C",1.738900f,-3.018800f,0.594800f); SetAtom(&F.Atoms[ 26 ] , "C",1.973100f,-2.297900f,1.821300f); SetAtom(&F.Atoms[ 27 ] , "C",0.746600f,-2.297900f,2.579300f); SetAtom(&F.Atoms[ 28 ] , "C",-0.245600f,-3.018800f,1.821300f); SetAtom(&F.Atoms[ 29 ] , "C",0.367600f,-3.464300f,0.594800f); SetAtom(&F.Atoms[ 30 ] , "C",0.992200f,0.720900f,-3.314500f); SetAtom(&F.Atoms[ 31 ] , "C",-0.379000f,1.166400f,-3.314500f); SetAtom(&F.Atoms[ 32 ] , "C",-1.226500f,0.000000f,-3.314500f); SetAtom(&F.Atoms[ 33 ] , "C",-0.379000f,-1.166400f,-3.314500f); SetAtom(&F.Atoms[ 34 ] , "C",0.992200f,-0.720900f,-3.314500f); SetAtom(&F.Atoms[ 35 ] , "C",2.333700f,2.586600f,-0.594800f); SetAtom(&F.Atoms[ 36 ] , "C",1.575700f,2.586600f,-1.821300f); SetAtom(&F.Atoms[ 37 ] , "C",1.954700f,1.420200f,-2.579300f); SetAtom(&F.Atoms[ 38 ] , "C",2.946900f,0.699300f,-1.821300f); SetAtom(&F.Atoms[ 39 ] , "C",3.181200f,1.420200f,-0.594800f); SetAtom(&F.Atoms[ 40 ] , "C",-1.738900f,3.018800f,-0.594800f); SetAtom(&F.Atoms[ 41 ] , "C",-1.973100f,2.297900f,-1.821300f); SetAtom(&F.Atoms[ 42 ] , "C",-0.746600f,2.297900f,-2.579300f); SetAtom(&F.Atoms[ 43 ] , "C",0.245600f,3.018800f,-1.821300f); SetAtom(&F.Atoms[ 44 ] , "C",-0.367600f,3.464300f,-0.594800f); SetAtom(&F.Atoms[ 45 ] , "C",-3.408400f,-0.720900f,-0.594800f); SetAtom(&F.Atoms[ 46 ] , "C",-2.795100f,-1.166400f,-1.821300f); SetAtom(&F.Atoms[ 47 ] , "C",-2.416100f,0.000000f,-2.579300f); SetAtom(&F.Atoms[ 48 ] , "C",-2.795100f,1.166400f,-1.821300f); SetAtom(&F.Atoms[ 49 ] , "C",-3.408400f,0.720900f,-0.594800f); SetAtom(&F.Atoms[ 50 ] , "C",-0.367600f,-3.464300f,-0.594800f); SetAtom(&F.Atoms[ 51 ] , "C",0.245600f,-3.018800f,-1.821300f); SetAtom(&F.Atoms[ 52 ] , "C",-0.746600f,-2.297900f,-2.579300f); SetAtom(&F.Atoms[ 53 ] , "C",-1.973100f,-2.297900f,-1.821300f); SetAtom(&F.Atoms[ 54 ] , "C",-1.738900f,-3.018800f,-0.594800f); SetAtom(&F.Atoms[ 55 ] , "C",3.181200f,-1.420200f,-0.594800f); SetAtom(&F.Atoms[ 56 ] , "C",2.946900f,-0.699300f,-1.821300f); SetAtom(&F.Atoms[ 57 ] , "C",1.954700f,-1.420200f,-2.579300f); SetAtom(&F.Atoms[ 58 ] , "C",1.575700f,-2.586600f,-1.821300f); SetAtom(&F.Atoms[ 59 ] , "C",2.333700f,-2.586600f,-0.594800f); F.atomToDelete =1; F.atomToBondTo =2; F.angleAtom =3; } else if ( !strcmp(Name, "Aspirin" ) ) { F.NAtoms = 21; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GAPN"); SetAtom(&F.Atoms[ 0 ] , "C",0.000000f,0.000000f,0.000000f); SetAtom(&F.Atoms[ 1 ] , "C",1.400000f,0.000000f,0.000000f); SetAtom(&F.Atoms[ 2 ] , "C",2.091000f,1.216000f,0.000000f); SetAtom(&F.Atoms[ 3 ] , "C",1.392000f,2.427000f,-0.050000f); SetAtom(&F.Atoms[ 4 ] , "C",-0.007000f,2.423000f,-0.082000f); SetAtom(&F.Atoms[ 5 ] , "C",-0.701000f,1.210000f,-0.048000f); SetAtom(&F.Atoms[ 6 ] , "C",3.549000f,1.211000f,0.032000f); SetAtom(&F.Atoms[ 7 ] , "O",4.157000f,2.250000f,0.019000f); SetAtom(&F.Atoms[ 8 ] , "O",4.212000f,0.043000f,0.066000f); SetAtom(&F.Atoms[ 9 ] , "O",2.161000f,-1.217000f,0.072000f); SetAtom(&F.Atoms[ 10 ] , "C",1.720000f,-2.408000f,-0.335000f); SetAtom(&F.Atoms[ 11 ] , "O",2.362000f,-3.380000f,-0.031000f); SetAtom(&F.Atoms[ 12 ] , "C",0.786000f,-2.523000f,-1.507000f); SetAtom(&F.Atoms[ 13 ] , "H",-0.552000f,-0.935000f,0.085000f); SetAtom(&F.Atoms[ 14 ] , "H",1.935000f,3.372000f,-0.063000f); SetAtom(&F.Atoms[ 15 ] , "H",-0.554000f,3.365000f,-0.117000f); SetAtom(&F.Atoms[ 16 ] , "H",-1.791000f,1.207000f,-0.045000f); SetAtom(&F.Atoms[ 17 ] , "H",4.314000f,-0.248000f,0.998000f); SetAtom(&F.Atoms[ 18 ] , "H",0.720000f,-1.568000f,-2.029000f); SetAtom(&F.Atoms[ 19 ] , "H",-0.203000f,-2.823000f,-1.161000f); SetAtom(&F.Atoms[ 20 ] , "H",1.168000f,-3.278000f,-2.194000f); F.atomToDelete =17; F.atomToBondTo =8; F.angleAtom =6; } else if ( !strcmp(Name, "Caffeine" ) ) { F.NAtoms = 24; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GCFN"); SetAtom(&F.Atoms[ 0 ] , "C",0.000000f,0.000000f,0.000000f); SetAtom(&F.Atoms[ 1 ] , "C",1.392000f,0.000000f,0.000000f); SetAtom(&F.Atoms[ 2 ] , "N",2.076000f,1.164000f,0.000000f); SetAtom(&F.Atoms[ 3 ] , "C",1.373000f,2.321000f,-0.003000f); SetAtom(&F.Atoms[ 4 ] , "O",1.978000f,3.365000f,-0.017000f); SetAtom(&F.Atoms[ 5 ] , "N",0.017000f,2.344000f,0.003000f); SetAtom(&F.Atoms[ 6 ] , "C",-0.710000f,1.202000f,0.002000f); SetAtom(&F.Atoms[ 7 ] , "O",-1.915000f,1.218000f,-0.006000f); SetAtom(&F.Atoms[ 8 ] , "N",-0.404000f,-1.287000f,-0.019000f); SetAtom(&F.Atoms[ 9 ] , "N",1.830000f,-1.279000f,-0.020000f); SetAtom(&F.Atoms[ 10 ] , "C",0.715000f,-2.048000f,-0.031000f); SetAtom(&F.Atoms[ 11 ] , "C",-1.795000f,-1.761000f,-0.044000f); SetAtom(&F.Atoms[ 12 ] , "C",3.546000f,1.178000f,-0.016000f); SetAtom(&F.Atoms[ 13 ] , "C",-0.690000f,3.634000f,-0.013000f); SetAtom(&F.Atoms[ 14 ] , "H",0.720000f,-3.138000f,-0.055000f); SetAtom(&F.Atoms[ 15 ] , "H",-1.813000f,-2.850000f,-0.090000f); SetAtom(&F.Atoms[ 16 ] , "H",-2.307000f,-1.428000f,0.860000f); SetAtom(&F.Atoms[ 17 ] , "H",-2.302000f,-1.352000f,-0.918000f); SetAtom(&F.Atoms[ 18 ] , "H",3.894000f,1.455000f,-1.011000f); SetAtom(&F.Atoms[ 19 ] , "H",3.929000f,0.190000f,0.239000f); SetAtom(&F.Atoms[ 20 ] , "H",3.911000f,1.904000f,0.710000f); SetAtom(&F.Atoms[ 21 ] , "H",-1.557000f,3.583000f,0.645000f); SetAtom(&F.Atoms[ 22 ] , "H",-0.027000f,4.428000f,0.329000f); SetAtom(&F.Atoms[ 23 ] , "H",-1.020000f,3.851000f,-1.029000f); F.atomToDelete =15; F.atomToBondTo =11; F.angleAtom =9; } else if ( !strcmp(Name, "Heroine" ) ) { F.NAtoms = 50; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GHIN"); SetAtom(&F.Atoms[ 0 ] , "C",0.000000f,0.000000f,0.000000f); SetAtom(&F.Atoms[ 1 ] , "C",1.400000f,0.000000f,0.000000f); SetAtom(&F.Atoms[ 2 ] , "C",2.108000f,1.210000f,0.000000f); SetAtom(&F.Atoms[ 3 ] , "C",1.452000f,2.447000f,-0.065000f); SetAtom(&F.Atoms[ 4 ] , "C",0.055000f,2.457000f,-0.018000f); SetAtom(&F.Atoms[ 5 ] , "C",-0.624000f,1.244000f,0.041000f); SetAtom(&F.Atoms[ 6 ] , "C",-2.081000f,1.501000f,-0.201000f); SetAtom(&F.Atoms[ 7 ] , "C",-2.725000f,0.343000f,-0.973000f); SetAtom(&F.Atoms[ 8 ] , "C",-2.367000f,-0.953000f,-0.210000f); SetAtom(&F.Atoms[ 9 ] , "C",-0.836000f,-1.236000f,-0.253000f); SetAtom(&F.Atoms[ 10 ] , "C",-1.913000f,2.852000f,-0.934000f); SetAtom(&F.Atoms[ 11 ] , "C",-2.752000f,1.623000f,1.177000f); SetAtom(&F.Atoms[ 12 ] , "C",-2.503000f,0.306000f,1.943000f); SetAtom(&F.Atoms[ 13 ] , "N",-2.936000f,-0.856000f,1.147000f); SetAtom(&F.Atoms[ 14 ] , "C",-2.820000f,-2.103000f,1.920000f); SetAtom(&F.Atoms[ 15 ] , "H",-3.807000f,0.473000f,-0.972000f); SetAtom(&F.Atoms[ 16 ] , "C",-2.256000f,0.283000f,-2.408000f); SetAtom(&F.Atoms[ 17 ] , "C",-1.948000f,1.398000f,-3.085000f); SetAtom(&F.Atoms[ 18 ] , "C",-1.494000f,2.675000f,-2.413000f); SetAtom(&F.Atoms[ 19 ] , "H",-2.820000f,3.452000f,-0.859000f); SetAtom(&F.Atoms[ 20 ] , "O",-0.799000f,3.480000f,-0.318000f); SetAtom(&F.Atoms[ 21 ] , "H",-1.885000f,3.520000f,-2.982000f); SetAtom(&F.Atoms[ 22 ] , "O",-0.083000f,2.674000f,-2.462000f); SetAtom(&F.Atoms[ 23 ] , "O",2.142000f,3.620000f,-0.142000f); SetAtom(&F.Atoms[ 24 ] , "H",1.942000f,-0.945000f,-0.044000f); SetAtom(&F.Atoms[ 25 ] , "H",3.198000f,1.180000f,-0.006000f); SetAtom(&F.Atoms[ 26 ] , "H",-2.866000f,-1.782000f,-0.712000f); SetAtom(&F.Atoms[ 27 ] , "H",-0.588000f,-1.599000f,-1.250000f); SetAtom(&F.Atoms[ 28 ] , "H",-0.574000f,-2.010000f,0.465000f); SetAtom(&F.Atoms[ 29 ] , "H",-3.823000f,1.785000f,1.052000f); SetAtom(&F.Atoms[ 30 ] , "H",-2.320000f,2.456000f,1.731000f); SetAtom(&F.Atoms[ 31 ] , "H",-3.068000f,0.334000f,2.874000f); SetAtom(&F.Atoms[ 32 ] , "H",-1.444000f,0.211000f,2.184000f); SetAtom(&F.Atoms[ 33 ] , "H",-3.492000f,-2.057000f,2.778000f); SetAtom(&F.Atoms[ 34 ] , "H",-1.799000f,-2.234000f,2.280000f); SetAtom(&F.Atoms[ 35 ] , "H",-3.099000f,-2.953000f,1.298000f); SetAtom(&F.Atoms[ 36 ] , "H",-2.414000f,-0.639000f,-2.967000f); SetAtom(&F.Atoms[ 37 ] , "H",-1.797000f,1.313000f,-4.161000f); SetAtom(&F.Atoms[ 38 ] , "C",3.076000f,3.567000f,-1.091000f); SetAtom(&F.Atoms[ 39 ] , "O",2.786000f,3.826000f,-2.230000f); SetAtom(&F.Atoms[ 40 ] , "C",4.523000f,3.509000f,-0.695000f); SetAtom(&F.Atoms[ 41 ] , "H",5.012000f,2.691000f,-1.224000f); SetAtom(&F.Atoms[ 42 ] , "H",4.600000f,3.345000f,0.380000f); SetAtom(&F.Atoms[ 43 ] , "H",5.008000f,4.450000f,-0.954000f); SetAtom(&F.Atoms[ 44 ] , "C",0.390000f,3.733000f,-3.117000f); SetAtom(&F.Atoms[ 45 ] , "O",0.845000f,3.595000f,-4.223000f); SetAtom(&F.Atoms[ 46 ] , "C",0.417000f,5.083000f,-2.459000f); SetAtom(&F.Atoms[ 47 ] , "H",1.199000f,5.692000f,-2.913000f); SetAtom(&F.Atoms[ 48 ] , "H",0.619000f,4.970000f,-1.395000f); SetAtom(&F.Atoms[ 49 ] , "H",-0.547000f,5.574000f,-2.594000f); F.atomToDelete =33; F.atomToBondTo =14; F.angleAtom =35; } else if ( !strcmp(Name, "LSD" ) ) { F.NAtoms = 49; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GLSD"); SetAtom(&F.Atoms[ 0 ] , "C",0.000000f,0.000000f,0.000000f); SetAtom(&F.Atoms[ 1 ] , "C",1.397000f,0.000000f,0.000000f); SetAtom(&F.Atoms[ 2 ] , "C",2.012000f,1.258000f,0.000000f); SetAtom(&F.Atoms[ 3 ] , "C",1.246000f,2.433000f,-0.052000f); SetAtom(&F.Atoms[ 4 ] , "C",-0.155000f,2.405000f,-0.125000f); SetAtom(&F.Atoms[ 5 ] , "C",-0.773000f,1.155000f,-0.096000f); SetAtom(&F.Atoms[ 6 ] , "N",-2.065000f,0.769000f,-0.378000f); SetAtom(&F.Atoms[ 7 ] , "C",-2.092000f,-0.602000f,-0.503000f); SetAtom(&F.Atoms[ 8 ] , "C",-0.810000f,-1.103000f,-0.242000f); SetAtom(&F.Atoms[ 9 ] , "C",-0.159000f,-2.415000f,-0.700000f); SetAtom(&F.Atoms[ 10 ] , "C",1.178000f,-2.555000f,0.075000f); SetAtom(&F.Atoms[ 11 ] , "C",2.056000f,-1.321000f,-0.019000f); SetAtom(&F.Atoms[ 12 ] , "H",0.916000f,-2.675000f,1.126000f); SetAtom(&F.Atoms[ 13 ] , "N",1.899000f,-3.768000f,-0.346000f); SetAtom(&F.Atoms[ 14 ] , "C",3.394000f,-1.430000f,0.057000f); SetAtom(&F.Atoms[ 15 ] , "C",4.101000f,-2.765000f,0.134000f); SetAtom(&F.Atoms[ 16 ] , "C",3.115000f,-3.899000f,0.470000f); SetAtom(&F.Atoms[ 17 ] , "H",4.565000f,-2.960000f,-0.830000f); SetAtom(&F.Atoms[ 18 ] , "C",5.121000f,-2.704000f,1.237000f); SetAtom(&F.Atoms[ 19 ] , "O",4.720000f,-2.413000f,2.335000f); SetAtom(&F.Atoms[ 20 ] , "N",6.434000f,-3.000000f,1.089000f); SetAtom(&F.Atoms[ 21 ] , "C",7.305000f,-2.925000f,2.274000f); SetAtom(&F.Atoms[ 22 ] , "C",7.755000f,-4.340000f,2.686000f); SetAtom(&F.Atoms[ 23 ] , "C",7.047000f,-3.307000f,-0.215000f); SetAtom(&F.Atoms[ 24 ] , "C",6.736000f,-4.755000f,-0.646000f); SetAtom(&F.Atoms[ 25 ] , "H",3.094000f,1.350000f,0.014000f); SetAtom(&F.Atoms[ 26 ] , "H",1.757000f,3.398000f,-0.079000f); SetAtom(&F.Atoms[ 27 ] , "H",-0.732000f,3.319000f,-0.249000f); SetAtom(&F.Atoms[ 28 ] , "H",-2.858000f,1.432000f,-0.658000f); SetAtom(&F.Atoms[ 29 ] , "H",-2.917000f,-1.177000f,-0.924000f); SetAtom(&F.Atoms[ 30 ] , "H",0.025000f,-2.349000f,-1.772000f); SetAtom(&F.Atoms[ 31 ] , "H",-0.811000f,-3.260000f,-0.484000f); SetAtom(&F.Atoms[ 32 ] , "H",4.015000f,-0.538000f,0.044000f); SetAtom(&F.Atoms[ 33 ] , "H",2.844000f,-3.840000f,1.524000f); SetAtom(&F.Atoms[ 34 ] , "H",3.586000f,-4.865000f,0.286000f); SetAtom(&F.Atoms[ 35 ] , "H",6.768000f,-2.468000f,3.105000f); SetAtom(&F.Atoms[ 36 ] , "H",8.181000f,-2.318000f,2.047000f); SetAtom(&F.Atoms[ 37 ] , "H",8.376000f,-4.772000f,1.903000f); SetAtom(&F.Atoms[ 38 ] , "H",6.879000f,-4.969000f,2.844000f); SetAtom(&F.Atoms[ 39 ] , "H",8.332000f,-4.283000f,3.609000f); SetAtom(&F.Atoms[ 40 ] , "H",8.129000f,-3.199000f,-0.132000f); SetAtom(&F.Atoms[ 41 ] , "H",6.693000f,-2.606000f,-0.971000f); SetAtom(&F.Atoms[ 42 ] , "H",5.663000f,-4.894000f,-0.765000f); SetAtom(&F.Atoms[ 43 ] , "H",7.103000f,-5.451000f,0.107000f); SetAtom(&F.Atoms[ 44 ] , "H",7.230000f,-4.962000f,-1.595000f); SetAtom(&F.Atoms[ 45 ] , "C",2.198000f,-3.813000f,-1.786000f); SetAtom(&F.Atoms[ 46 ] , "H",2.586000f,-2.854000f,-2.128000f); SetAtom(&F.Atoms[ 47 ] , "H",1.292000f,-4.053000f,-2.342000f); SetAtom(&F.Atoms[ 48 ] , "H",2.936000f,-4.591000f,-1.982000f); F.atomToDelete =38; F.atomToBondTo =22; F.angleAtom =39; } else if ( !strcmp(Name, "Methadone" ) ) { F.NAtoms = 50; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GMTD"); SetAtom(&F.Atoms[ 0 ] , "C",0.000000f,0.000000f,0.000000f); SetAtom(&F.Atoms[ 1 ] , "C",1.399000f,0.000000f,0.000000f); SetAtom(&F.Atoms[ 2 ] , "C",2.111000f,1.206000f,0.000000f); SetAtom(&F.Atoms[ 3 ] , "C",1.399000f,2.412000f,0.009000f); SetAtom(&F.Atoms[ 4 ] , "C",0.001000f,2.417000f,0.017000f); SetAtom(&F.Atoms[ 5 ] , "C",-0.704000f,1.209000f,0.006000f); SetAtom(&F.Atoms[ 6 ] , "C",3.621000f,1.251000f,-0.125000f); SetAtom(&F.Atoms[ 7 ] , "C",4.210000f,2.073000f,0.989000f); SetAtom(&F.Atoms[ 8 ] , "O",5.375000f,2.369000f,0.925000f); SetAtom(&F.Atoms[ 9 ] , "C",3.443000f,2.436000f,2.231000f); SetAtom(&F.Atoms[ 10 ] , "C",4.388000f,2.354000f,3.446000f); SetAtom(&F.Atoms[ 11 ] , "C",4.250000f,-0.119000f,0.038000f); SetAtom(&F.Atoms[ 12 ] , "C",5.130000f,-0.681000f,-0.896000f); SetAtom(&F.Atoms[ 13 ] , "C",5.718000f,-1.929000f,-0.657000f); SetAtom(&F.Atoms[ 14 ] , "C",5.462000f,-2.614000f,0.535000f); SetAtom(&F.Atoms[ 15 ] , "C",4.623000f,-2.038000f,1.495000f); SetAtom(&F.Atoms[ 16 ] , "C",4.037000f,-0.792000f,1.249000f); SetAtom(&F.Atoms[ 17 ] , "C",3.988000f,2.015000f,-1.428000f); SetAtom(&F.Atoms[ 18 ] , "C",3.164000f,1.644000f,-2.693000f); SetAtom(&F.Atoms[ 19 ] , "C",3.134000f,2.909000f,-3.584000f); SetAtom(&F.Atoms[ 20 ] , "N",3.744000f,0.466000f,-3.368000f); SetAtom(&F.Atoms[ 21 ] , "C",3.911000f,0.585000f,-4.826000f); SetAtom(&F.Atoms[ 22 ] , "C",2.965000f,-0.751000f,-3.086000f); SetAtom(&F.Atoms[ 23 ] , "H",-0.544000f,-0.945000f,-0.010000f); SetAtom(&F.Atoms[ 24 ] , "H",1.913000f,-0.959000f,-0.015000f); SetAtom(&F.Atoms[ 25 ] , "H",1.930000f,3.363000f,-0.003000f); SetAtom(&F.Atoms[ 26 ] , "H",-0.541000f,3.363000f,0.019000f); SetAtom(&F.Atoms[ 27 ] , "H",-1.794000f,1.209000f,0.003000f); SetAtom(&F.Atoms[ 28 ] , "H",2.608000f,1.753000f,2.383000f); SetAtom(&F.Atoms[ 29 ] , "H",3.065000f,3.454000f,2.138000f); SetAtom(&F.Atoms[ 30 ] , "H",5.217000f,3.049000f,3.312000f); SetAtom(&F.Atoms[ 31 ] , "H",4.776000f,1.340000f,3.538000f); SetAtom(&F.Atoms[ 32 ] , "H",3.840000f,2.616000f,4.351000f); SetAtom(&F.Atoms[ 33 ] , "H",5.366000f,-0.171000f,-1.826000f); SetAtom(&F.Atoms[ 34 ] , "H",6.386000f,-2.365000f,-1.400000f); SetAtom(&F.Atoms[ 35 ] , "H",5.923000f,-3.584000f,0.721000f); SetAtom(&F.Atoms[ 36 ] , "H",4.429000f,-2.557000f,2.434000f); SetAtom(&F.Atoms[ 37 ] , "H",3.385000f,-0.358000f,2.006000f); SetAtom(&F.Atoms[ 38 ] , "H",5.053000f,1.929000f,-1.637000f); SetAtom(&F.Atoms[ 39 ] , "H",3.796000f,3.067000f,-1.223000f); SetAtom(&F.Atoms[ 40 ] , "H",2.131000f,1.433000f,-2.422000f); SetAtom(&F.Atoms[ 41 ] , "H",4.149000f,3.208000f,-3.846000f); SetAtom(&F.Atoms[ 42 ] , "H",2.659000f,3.723000f,-3.037000f); SetAtom(&F.Atoms[ 43 ] , "H",2.555000f,2.728000f,-4.488000f); SetAtom(&F.Atoms[ 44 ] , "H",4.567000f,1.419000f,-5.071000f); SetAtom(&F.Atoms[ 45 ] , "H",2.942000f,0.719000f,-5.308000f); SetAtom(&F.Atoms[ 46 ] , "H",4.366000f,-0.328000f,-5.209000f); SetAtom(&F.Atoms[ 47 ] , "H",1.983000f,-0.678000f,-3.553000f); SetAtom(&F.Atoms[ 48 ] , "H",2.841000f,-0.877000f,-2.016000f); SetAtom(&F.Atoms[ 49 ] , "H",3.488000f,-1.621000f,-3.483000f); F.atomToDelete =34; F.atomToBondTo =13; F.angleAtom =12; } else if ( !strcmp(Name, "Morphine" ) ) { F.NAtoms = 40; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GMPN"); SetAtom(&F.Atoms[ 0 ] , "C",0.000000f,0.000000f,0.000000f); SetAtom(&F.Atoms[ 1 ] , "C",1.400000f,0.000000f,0.000000f); SetAtom(&F.Atoms[ 2 ] , "C",2.106000f,1.211000f,0.000000f); SetAtom(&F.Atoms[ 3 ] , "C",1.444000f,2.446000f,-0.039000f); SetAtom(&F.Atoms[ 4 ] , "C",0.047000f,2.458000f,0.013000f); SetAtom(&F.Atoms[ 5 ] , "C",-0.629000f,1.243000f,0.051000f); SetAtom(&F.Atoms[ 6 ] , "C",-2.081000f,1.500000f,-0.228000f); SetAtom(&F.Atoms[ 7 ] , "C",-2.727000f,0.342000f,-0.999000f); SetAtom(&F.Atoms[ 8 ] , "C",-2.363000f,-0.953000f,-0.239000f); SetAtom(&F.Atoms[ 9 ] , "C",-0.832000f,-1.231000f,-0.285000f); SetAtom(&F.Atoms[ 10 ] , "C",-1.885000f,2.839000f,-0.975000f); SetAtom(&F.Atoms[ 11 ] , "C",-2.772000f,1.631000f,1.137000f); SetAtom(&F.Atoms[ 12 ] , "C",-2.525000f,0.318000f,1.912000f); SetAtom(&F.Atoms[ 13 ] , "N",-2.930000f,-0.855000f,1.119000f); SetAtom(&F.Atoms[ 14 ] , "C",-2.790000f,-2.096000f,1.899000f); SetAtom(&F.Atoms[ 15 ] , "H",-3.810000f,0.470000f,-0.978000f); SetAtom(&F.Atoms[ 16 ] , "C",-2.300000f,0.287000f,-2.447000f); SetAtom(&F.Atoms[ 17 ] , "C",-2.022000f,1.415000f,-3.116000f); SetAtom(&F.Atoms[ 18 ] , "C",-1.406000f,2.612000f,-2.428000f); SetAtom(&F.Atoms[ 19 ] , "H",-2.795000f,3.439000f,-0.953000f); SetAtom(&F.Atoms[ 20 ] , "O",-0.796000f,3.478000f,-0.328000f); SetAtom(&F.Atoms[ 21 ] , "H",-1.616000f,3.510000f,-3.009000f); SetAtom(&F.Atoms[ 22 ] , "O",0.011000f,2.407000f,-2.414000f); SetAtom(&F.Atoms[ 23 ] , "O",2.143000f,3.606000f,-0.184000f); SetAtom(&F.Atoms[ 24 ] , "H",1.942000f,-0.943000f,-0.066000f); SetAtom(&F.Atoms[ 25 ] , "H",3.195000f,1.192000f,-0.045000f); SetAtom(&F.Atoms[ 26 ] , "H",-2.861000f,-1.784000f,-0.739000f); SetAtom(&F.Atoms[ 27 ] , "H",-0.580000f,-1.568000f,-1.291000f); SetAtom(&F.Atoms[ 28 ] , "H",-0.568000f,-2.021000f,0.414000f); SetAtom(&F.Atoms[ 29 ] , "H",-3.842000f,1.788000f,0.997000f); SetAtom(&F.Atoms[ 30 ] , "H",-2.350000f,2.469000f,1.692000f); SetAtom(&F.Atoms[ 31 ] , "H",-3.107000f,0.346000f,2.833000f); SetAtom(&F.Atoms[ 32 ] , "H",-1.471000f,0.235000f,2.174000f); SetAtom(&F.Atoms[ 33 ] , "H",-3.461000f,-2.058000f,2.757000f); SetAtom(&F.Atoms[ 34 ] , "H",-1.767000f,-2.205000f,2.257000f); SetAtom(&F.Atoms[ 35 ] , "H",-3.054000f,-2.955000f,1.282000f); SetAtom(&F.Atoms[ 36 ] , "H",-2.529000f,-0.612000f,-3.019000f); SetAtom(&F.Atoms[ 37 ] , "H",-1.956000f,1.362000f,-4.203000f); SetAtom(&F.Atoms[ 38 ] , "H",0.343000f,2.320000f,-3.313000f); SetAtom(&F.Atoms[ 39 ] , "H",2.435000f,3.917000f,0.680000f); F.atomToDelete =34; F.atomToBondTo =14; F.angleAtom =33; } else if ( !strcmp(Name, "Nicotine" ) ) { F.NAtoms = 26; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GNTN"); SetAtom(&F.Atoms[ 0 ] , "C",0.000000f,0.000000f,0.000000f); SetAtom(&F.Atoms[ 1 ] , "C",1.400000f,0.000000f,0.000000f); SetAtom(&F.Atoms[ 2 ] , "C",2.082000f,1.223000f,0.000000f); SetAtom(&F.Atoms[ 3 ] , "C",1.361000f,2.420000f,-0.060000f); SetAtom(&F.Atoms[ 4 ] , "C",-0.037000f,2.388000f,-0.103000f); SetAtom(&F.Atoms[ 5 ] , "N",-0.698000f,1.182000f,-0.064000f); SetAtom(&F.Atoms[ 6 ] , "C",2.135000f,-1.320000f,0.103000f); SetAtom(&F.Atoms[ 7 ] , "H",-0.543000f,-0.944000f,0.043000f); SetAtom(&F.Atoms[ 8 ] , "H",3.168000f,1.256000f,0.062000f); SetAtom(&F.Atoms[ 9 ] , "H",1.886000f,3.375000f,-0.067000f); SetAtom(&F.Atoms[ 10 ] , "H",-0.604000f,3.318000f,-0.148000f); SetAtom(&F.Atoms[ 11 ] , "H",2.087000f,-1.661000f,1.139000f); SetAtom(&F.Atoms[ 12 ] , "N",1.561000f,-2.374000f,-0.749000f); SetAtom(&F.Atoms[ 13 ] , "C",3.616000f,-1.255000f,-0.318000f); SetAtom(&F.Atoms[ 14 ] , "C",3.943000f,-2.708000f,-0.713000f); SetAtom(&F.Atoms[ 15 ] , "C",2.580000f,-3.434000f,-0.690000f); SetAtom(&F.Atoms[ 16 ] , "C",1.359000f,-1.946000f,-2.144000f); SetAtom(&F.Atoms[ 17 ] , "H",4.247000f,-0.910000f,0.502000f); SetAtom(&F.Atoms[ 18 ] , "H",3.736000f,-0.608000f,-1.187000f); SetAtom(&F.Atoms[ 19 ] , "H",4.627000f,-3.166000f,0.001000f); SetAtom(&F.Atoms[ 20 ] , "H",4.371000f,-2.732000f,-1.715000f); SetAtom(&F.Atoms[ 21 ] , "H",2.475000f,-3.968000f,0.255000f); SetAtom(&F.Atoms[ 22 ] , "H",2.490000f,-4.135000f,-1.520000f); SetAtom(&F.Atoms[ 23 ] , "H",2.299000f,-1.632000f,-2.594000f); SetAtom(&F.Atoms[ 24 ] , "H",0.648000f,-1.122000f,-2.190000f); SetAtom(&F.Atoms[ 25 ] , "H",0.956000f,-2.781000f,-2.717000f); F.atomToDelete =25; F.atomToBondTo =16; F.angleAtom =12; } else if ( !strcmp(Name, "Valium" ) ) { F.NAtoms = 33; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GVLM"); SetAtom(&F.Atoms[ 0 ] , "C",0.000000f,0.000000f,0.000000f); SetAtom(&F.Atoms[ 1 ] , "C",1.404000f,0.000000f,0.000000f); SetAtom(&F.Atoms[ 2 ] , "C",2.078000f,1.228000f,0.000000f); SetAtom(&F.Atoms[ 3 ] , "C",1.385000f,2.440000f,0.068000f); SetAtom(&F.Atoms[ 4 ] , "C",-0.010000f,2.435000f,0.129000f); SetAtom(&F.Atoms[ 5 ] , "C",-0.691000f,1.215000f,0.091000f); SetAtom(&F.Atoms[ 6 ] , "C",-0.816000f,-1.201000f,-0.161000f); SetAtom(&F.Atoms[ 7 ] , "N",-0.557000f,-2.306000f,0.509000f); SetAtom(&F.Atoms[ 8 ] , "C",0.644000f,-2.399000f,1.387000f); SetAtom(&F.Atoms[ 9 ] , "C",1.834000f,-2.309000f,0.479000f); SetAtom(&F.Atoms[ 10 ] , "N",2.168000f,-1.141000f,-0.115000f); SetAtom(&F.Atoms[ 11 ] , "C",3.483000f,-1.089000f,-0.775000f); SetAtom(&F.Atoms[ 12 ] , "O",2.572000f,-3.256000f,0.388000f); SetAtom(&F.Atoms[ 13 ] , "C",-2.042000f,-1.183000f,-0.954000f); SetAtom(&F.Atoms[ 14 ] , "C",-2.272000f,-0.202000f,-1.928000f); SetAtom(&F.Atoms[ 15 ] , "C",-3.438000f,-0.233000f,-2.700000f); SetAtom(&F.Atoms[ 16 ] , "C",-4.374000f,-1.256000f,-2.516000f); SetAtom(&F.Atoms[ 17 ] , "C",-4.130000f,-2.260000f,-1.572000f); SetAtom(&F.Atoms[ 18 ] , "C",-2.960000f,-2.229000f,-0.805000f); SetAtom(&F.Atoms[ 19 ] , "H",3.167000f,1.258000f,0.004000f); SetAtom(&F.Atoms[ 20 ] , "H",1.931000f,3.383000f,0.095000f); SetAtom(&F.Atoms[ 21 ] , "H",-1.779000f,1.218000f,0.162000f); SetAtom(&F.Atoms[ 22 ] , "H",0.647000f,-3.356000f,1.910000f); SetAtom(&F.Atoms[ 23 ] , "H",0.654000f,-1.582000f,2.109000f); SetAtom(&F.Atoms[ 24 ] , "H",3.459000f,-0.375000f,-1.597000f); SetAtom(&F.Atoms[ 25 ] , "H",3.732000f,-2.072000f,-1.176000f); SetAtom(&F.Atoms[ 26 ] , "H",4.244000f,-0.795000f,-0.053000f); SetAtom(&F.Atoms[ 27 ] , "H",-1.519000f,0.556000f,-2.140000f); SetAtom(&F.Atoms[ 28 ] , "H",-3.608000f,0.529000f,-3.460000f); SetAtom(&F.Atoms[ 29 ] , "H",-5.281000f,-1.283000f,-3.121000f); SetAtom(&F.Atoms[ 30 ] , "H",-4.848000f,-3.068000f,-1.438000f); SetAtom(&F.Atoms[ 31 ] , "H",-2.778000f,-3.016000f,-0.073000f); SetAtom(&F.Atoms[ 32 ] , "Cl",-0.894000f,3.930000f,0.243000f); F.atomToDelete =23; F.atomToBondTo =8; F.angleAtom =22; } else if ( !strcmp(Name, "Viagra" ) ) { F.NAtoms = 63; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GVGR"); SetAtom(&F.Atoms[ 0 ] , "C",0.000000f,0.000000f,0.000000f); SetAtom(&F.Atoms[ 1 ] , "C",1.398000f,0.000000f,0.000000f); SetAtom(&F.Atoms[ 2 ] , "C",2.105000f,1.207000f,0.000000f); SetAtom(&F.Atoms[ 3 ] , "C",1.417000f,2.427000f,-0.037000f); SetAtom(&F.Atoms[ 4 ] , "C",0.017000f,2.422000f,-0.014000f); SetAtom(&F.Atoms[ 5 ] , "C",-0.692000f,1.216000f,-0.005000f); SetAtom(&F.Atoms[ 6 ] , "H",-0.545000f,-0.944000f,0.023000f); SetAtom(&F.Atoms[ 7 ] , "H",1.939000f,-0.946000f,0.029000f); SetAtom(&F.Atoms[ 8 ] , "H",-0.531000f,3.364000f,-0.022000f); SetAtom(&F.Atoms[ 9 ] , "C",2.100000f,3.733000f,-0.053000f); SetAtom(&F.Atoms[ 10 ] , "N",3.453000f,3.848000f,-0.302000f); SetAtom(&F.Atoms[ 11 ] , "C",4.091000f,5.067000f,-0.302000f); SetAtom(&F.Atoms[ 12 ] , "C",3.259000f,6.246000f,-0.033000f); SetAtom(&F.Atoms[ 13 ] , "C",1.897000f,6.080000f,0.190000f); SetAtom(&F.Atoms[ 14 ] , "N",1.310000f,4.840000f,0.169000f); SetAtom(&F.Atoms[ 15 ] , "O",5.271000f,5.168000f,-0.544000f); SetAtom(&F.Atoms[ 16 ] , "H",4.029000f,2.992000f,-0.569000f); SetAtom(&F.Atoms[ 17 ] , "N",3.538000f,7.572000f,0.006000f); SetAtom(&F.Atoms[ 18 ] , "N",2.406000f,8.264000f,0.248000f); SetAtom(&F.Atoms[ 19 ] , "C",1.373000f,7.363000f,0.369000f); SetAtom(&F.Atoms[ 20 ] , "C",4.863000f,8.163000f,-0.230000f); SetAtom(&F.Atoms[ 21 ] , "H",4.799000f,9.247000f,-0.133000f); SetAtom(&F.Atoms[ 22 ] , "H",5.200000f,7.907000f,-1.235000f); SetAtom(&F.Atoms[ 23 ] , "H",5.570000f,7.774000f,0.501000f); SetAtom(&F.Atoms[ 24 ] , "C",-0.079000f,7.701000f,0.624000f); SetAtom(&F.Atoms[ 25 ] , "C",-0.226000f,9.225000f,0.805000f); SetAtom(&F.Atoms[ 26 ] , "H",-0.415000f,7.190000f,1.526000f); SetAtom(&F.Atoms[ 27 ] , "H",-0.680000f,7.372000f,-0.224000f); SetAtom(&F.Atoms[ 28 ] , "C",-1.702000f,9.584000f,1.072000f); SetAtom(&F.Atoms[ 29 ] , "H",0.112000f,9.732000f,-0.099000f); SetAtom(&F.Atoms[ 30 ] , "H",0.383000f,9.550000f,1.649000f); SetAtom(&F.Atoms[ 31 ] , "H",-1.796000f,10.663000f,1.198000f); SetAtom(&F.Atoms[ 32 ] , "H",-2.043000f,9.083000f,1.978000f); SetAtom(&F.Atoms[ 33 ] , "H",-2.315000f,9.264000f,0.229000f); SetAtom(&F.Atoms[ 34 ] , "O",3.461000f,1.164000f,0.124000f); SetAtom(&F.Atoms[ 35 ] , "C",3.859000f,0.886000f,1.450000f); SetAtom(&F.Atoms[ 36 ] , "C",3.396000f,1.998000f,2.414000f); SetAtom(&F.Atoms[ 37 ] , "H",4.947000f,0.824000f,1.480000f); SetAtom(&F.Atoms[ 38 ] , "H",3.443000f,-0.069000f,1.771000f); SetAtom(&F.Atoms[ 39 ] , "H",3.774000f,1.788000f,3.414000f); SetAtom(&F.Atoms[ 40 ] , "H",2.307000f,2.037000f,2.446000f); SetAtom(&F.Atoms[ 41 ] , "H",3.786000f,2.959000f,2.077000f); SetAtom(&F.Atoms[ 42 ] , "S",-2.443000f,1.230000f,0.022000f); SetAtom(&F.Atoms[ 43 ] , "N",-3.045000f,-0.296000f,-0.555000f); SetAtom(&F.Atoms[ 44 ] , "C",-4.498000f,-0.382000f,-0.345000f); SetAtom(&F.Atoms[ 45 ] , "C",-4.996000f,-1.765000f,-0.804000f); SetAtom(&F.Atoms[ 46 ] , "N",-4.674000f,-1.957000f,-2.227000f); SetAtom(&F.Atoms[ 47 ] , "C",-3.222000f,-1.855000f,-2.442000f); SetAtom(&F.Atoms[ 48 ] , "C",-2.728000f,-0.471000f,-1.980000f); SetAtom(&F.Atoms[ 49 ] , "H",-5.005000f,0.395000f,-0.919000f); SetAtom(&F.Atoms[ 50 ] , "H",-4.725000f,-0.254000f,0.715000f); SetAtom(&F.Atoms[ 51 ] , "H",-6.076000f,-1.822000f,-0.662000f); SetAtom(&F.Atoms[ 52 ] , "H",-4.513000f,-2.539000f,-0.208000f); SetAtom(&F.Atoms[ 53 ] , "H",-2.998000f,-1.979000f,-3.502000f); SetAtom(&F.Atoms[ 54 ] , "H",-2.707000f,-2.629000f,-1.872000f); SetAtom(&F.Atoms[ 55 ] , "H",-3.222000f,0.303000f,-2.569000f); SetAtom(&F.Atoms[ 56 ] , "H",-1.651000f,-0.407000f,-2.135000f); SetAtom(&F.Atoms[ 57 ] , "O",-2.929000f,2.282000f,-0.818000f); SetAtom(&F.Atoms[ 58 ] , "O",-2.893000f,1.442000f,1.364000f); SetAtom(&F.Atoms[ 59 ] , "C",-5.177000f,-3.257000f,-2.700000f); SetAtom(&F.Atoms[ 60 ] , "H",-4.954000f,-3.372000f,-3.760000f); SetAtom(&F.Atoms[ 61 ] , "H",-6.257000f,-3.305000f,-2.557000f); SetAtom(&F.Atoms[ 62 ] , "H",-4.703000f,-4.065000f,-2.142000f); F.atomToDelete =62; F.atomToBondTo =59; F.angleAtom =60; } else if ( !strcmp(Name, "C70" ) ) { F.NAtoms = 70; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GC70"); SetAtom(&F.Atoms[ 0 ] , "C",8.793000f,-0.828000f,-0.153000f); SetAtom(&F.Atoms[ 1 ] , "C",9.405000f,0.041000f,-1.062000f); SetAtom(&F.Atoms[ 2 ] , "C",8.400000f,0.766000f,-1.711000f); SetAtom(&F.Atoms[ 3 ] , "C",7.167000f,0.345000f,-1.203000f); SetAtom(&F.Atoms[ 4 ] , "C",7.409000f,-0.640000f,-0.240000f); SetAtom(&F.Atoms[ 5 ] , "C",10.608000f,0.668000f,-0.724000f); SetAtom(&F.Atoms[ 6 ] , "C",10.806000f,2.016000f,-1.036000f); SetAtom(&F.Atoms[ 7 ] , "C",9.808000f,2.736000f,-1.680000f); SetAtom(&F.Atoms[ 8 ] , "C",8.603000f,2.115000f,-2.019000f); SetAtom(&F.Atoms[ 9 ] , "C",7.574000f,3.040000f,-1.821000f); SetAtom(&F.Atoms[ 10 ] , "C",6.349000f,2.622000f,-1.317000f); SetAtom(&F.Atoms[ 11 ] , "C",6.141000f,1.276000f,-1.005000f); SetAtom(&F.Atoms[ 12 ] , "C",5.359000f,1.219000f,0.152000f); SetAtom(&F.Atoms[ 13 ] , "C",5.600000f,0.241000f,1.108000f); SetAtom(&F.Atoms[ 14 ] , "C",6.625000f,-0.690000f,0.917000f); SetAtom(&F.Atoms[ 15 ] , "C",7.223000f,-0.930000f,2.157000f); SetAtom(&F.Atoms[ 16 ] , "C",8.597000f,-1.117000f,2.243000f); SetAtom(&F.Atoms[ 17 ] , "C",9.386000f,-1.066000f,1.091000f); SetAtom(&F.Atoms[ 18 ] , "C",10.590000f,-0.438000f,1.423000f); SetAtom(&F.Atoms[ 19 ] , "C",11.198000f,0.425000f,0.520000f); SetAtom(&F.Atoms[ 20 ] , "C",9.312000f,-0.528000f,3.287000f); SetAtom(&F.Atoms[ 21 ] , "C",10.549000f,-0.106000f,2.777000f); SetAtom(&F.Atoms[ 22 ] , "C",11.520000f,2.605000f,0.009000f); SetAtom(&F.Atoms[ 23 ] , "C",11.763000f,1.617000f,0.975000f); SetAtom(&F.Atoms[ 24 ] , "C",6.568000f,-0.155000f,3.114000f); SetAtom(&F.Atoms[ 25 ] , "C",5.560000f,0.572000f,2.463000f); SetAtom(&F.Atoms[ 26 ] , "C",5.080000f,2.526000f,0.553000f); SetAtom(&F.Atoms[ 27 ] , "C",5.694000f,3.397000f,-0.359000f); SetAtom(&F.Atoms[ 28 ] , "C",8.140000f,4.231000f,-1.366000f); SetAtom(&F.Atoms[ 29 ] , "C",9.527000f,4.042000f,-1.278000f); SetAtom(&F.Atoms[ 30 ] , "C",10.274000f,4.676000f,-0.271000f); SetAtom(&F.Atoms[ 31 ] , "C",11.296000f,3.939000f,0.389000f); SetAtom(&F.Atoms[ 32 ] , "C",11.788000f,1.942000f,2.341000f); SetAtom(&F.Atoms[ 33 ] , "C",11.165000f,1.058000f,3.266000f); SetAtom(&F.Atoms[ 34 ] , "C",8.664000f,0.205000f,4.296000f); SetAtom(&F.Atoms[ 35 ] , "C",7.257000f,0.397000f,4.207000f); SetAtom(&F.Atoms[ 36 ] , "C",4.973000f,2.869000f,1.911000f); SetAtom(&F.Atoms[ 37 ] , "C",5.220000f,1.867000f,2.891000f); SetAtom(&F.Atoms[ 38 ] , "C",7.470000f,5.058000f,-0.448000f); SetAtom(&F.Atoms[ 39 ] , "C",6.215000f,4.630000f,0.068000f); SetAtom(&F.Atoms[ 40 ] , "C",9.649000f,5.730000f,0.417000f); SetAtom(&F.Atoms[ 41 ] , "C",8.262000f,5.919000f,0.330000f); SetAtom(&F.Atoms[ 42 ] , "C",11.885000f,3.305000f,2.670000f); SetAtom(&F.Atoms[ 43 ] , "C",11.642000f,4.292000f,1.704000f); SetAtom(&F.Atoms[ 44 ] , "C",10.670000f,1.582000f,4.473000f); SetAtom(&F.Atoms[ 45 ] , "C",9.434000f,1.160000f,4.982000f); SetAtom(&F.Atoms[ 46 ] , "C",5.816000f,5.085000f,1.337000f); SetAtom(&F.Atoms[ 47 ] , "C",5.202000f,4.214000f,2.248000f); SetAtom(&F.Atoms[ 48 ] , "C",5.683000f,2.260000f,4.158000f); SetAtom(&F.Atoms[ 49 ] , "C",6.690000f,1.533000f,4.809000f); SetAtom(&F.Atoms[ 50 ] , "C",7.467000f,2.435000f,5.537000f); SetAtom(&F.Atoms[ 51 ] , "C",8.841000f,2.248000f,5.623000f); SetAtom(&F.Atoms[ 52 ] , "C",10.833000f,2.928000f,4.803000f); SetAtom(&F.Atoms[ 53 ] , "C",11.441000f,3.790000f,3.900000f); SetAtom(&F.Atoms[ 54 ] , "C",11.050000f,5.381000f,2.345000f); SetAtom(&F.Atoms[ 55 ] , "C",10.052000f,6.101000f,1.700000f); SetAtom(&F.Atoms[ 56 ] , "C",7.818000f,6.405000f,1.559000f); SetAtom(&F.Atoms[ 57 ] , "C",6.592000f,5.988000f,2.063000f); SetAtom(&F.Atoms[ 58 ] , "C",5.844000f,3.606000f,4.488000f); SetAtom(&F.Atoms[ 59 ] , "C",5.603000f,4.584000f,3.532000f); SetAtom(&F.Atoms[ 60 ] , "C",8.922000f,6.522000f,2.407000f); SetAtom(&F.Atoms[ 61 ] , "C",6.460000f,5.683000f,3.421000f); SetAtom(&F.Atoms[ 62 ] , "C",6.944000f,3.717000f,5.343000f); SetAtom(&F.Atoms[ 63 ] , "C",9.705000f,3.341000f,5.517000f); SetAtom(&F.Atoms[ 64 ] , "C",10.927000f,5.075000f,3.703000f); SetAtom(&F.Atoms[ 65 ] , "C",9.187000f,4.626000f,5.325000f); SetAtom(&F.Atoms[ 66 ] , "C",9.800000f,5.495000f,4.416000f); SetAtom(&F.Atoms[ 67 ] , "C",8.795000f,6.220000f,3.767000f); SetAtom(&F.Atoms[ 68 ] , "C",7.804000f,4.814000f,5.238000f); SetAtom(&F.Atoms[ 69 ] , "C",7.562000f,5.800000f,4.275000f); F.atomToDelete =1; F.atomToBondTo =2; F.angleAtom =3; } else if ( !strcmp(Name, "C78" ) ) { F.NAtoms = 78; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GC78"); SetAtom(&F.Atoms[ 0 ] , "C",4.214000f,-1.186000f,0.704000f); SetAtom(&F.Atoms[ 1 ] , "C",3.416000f,-2.159000f,1.422000f); SetAtom(&F.Atoms[ 2 ] , "C",4.214000f,-1.189000f,-0.691000f); SetAtom(&F.Atoms[ 3 ] , "C",2.723000f,-3.135000f,0.738000f); SetAtom(&F.Atoms[ 4 ] , "C",0.731000f,-0.834000f,3.624000f); SetAtom(&F.Atoms[ 5 ] , "C",2.773000f,-1.493000f,2.537000f); SetAtom(&F.Atoms[ 6 ] , "C",1.468000f,-1.837000f,2.947000f); SetAtom(&F.Atoms[ 7 ] , "C",0.737000f,-2.891000f,2.236000f); SetAtom(&F.Atoms[ 8 ] , "C",-0.734000f,-2.892000f,2.236000f); SetAtom(&F.Atoms[ 9 ] , "C",1.406000f,-3.541000f,1.186000f); SetAtom(&F.Atoms[ 10 ] , "C",-1.402000f,-3.543000f,1.187000f); SetAtom(&F.Atoms[ 11 ] , "C",4.072000f,1.258000f,-0.721000f); SetAtom(&F.Atoms[ 12 ] , "C",4.072000f,1.261000f,0.725000f); SetAtom(&F.Atoms[ 13 ] , "C",4.110000f,0.060000f,-1.411000f); SetAtom(&F.Atoms[ 14 ] , "C",4.111000f,0.066000f,1.419000f); SetAtom(&F.Atoms[ 15 ] , "C",3.214000f,-0.129000f,2.549000f); SetAtom(&F.Atoms[ 16 ] , "C",2.370000f,0.900000f,3.003000f); SetAtom(&F.Atoms[ 17 ] , "C",1.179000f,0.498000f,3.675000f); SetAtom(&F.Atoms[ 18 ] , "C",1.177000f,2.973000f,-2.344000f); SetAtom(&F.Atoms[ 19 ] , "C",2.370000f,2.174000f,-2.296000f); SetAtom(&F.Atoms[ 20 ] , "C",3.193000f,2.322000f,-1.169000f); SetAtom(&F.Atoms[ 21 ] , "C",2.717000f,3.020000f,-0.001000f); SetAtom(&F.Atoms[ 22 ] , "C",0.733000f,3.696000f,1.225000f); SetAtom(&F.Atoms[ 23 ] , "C",1.467000f,3.661000f,-0.002000f); SetAtom(&F.Atoms[ 24 ] , "C",0.732000f,3.690000f,-1.229000f); SetAtom(&F.Atoms[ 25 ] , "C",2.372000f,2.183000f,2.297000f); SetAtom(&F.Atoms[ 26 ] , "C",3.194000f,2.327000f,1.169000f); SetAtom(&F.Atoms[ 27 ] , "C",1.179000f,2.983000f,2.343000f); SetAtom(&F.Atoms[ 28 ] , "C",2.369000f,0.888000f,-2.997000f); SetAtom(&F.Atoms[ 29 ] , "C",3.213000f,-0.139000f,-2.539000f); SetAtom(&F.Atoms[ 30 ] , "C",-0.005000f,2.542000f,-3.081000f); SetAtom(&F.Atoms[ 31 ] , "C",-0.004000f,1.336000f,-3.721000f); SetAtom(&F.Atoms[ 32 ] , "C",1.177000f,0.483000f,-3.667000f); SetAtom(&F.Atoms[ 33 ] , "C",-1.187000f,2.971000f,-2.343000f); SetAtom(&F.Atoms[ 34 ] , "C",-2.379000f,2.170000f,-2.294000f); SetAtom(&F.Atoms[ 35 ] , "C",-3.201000f,2.317000f,-1.167000f); SetAtom(&F.Atoms[ 36 ] , "C",-0.741000f,3.694000f,1.226000f); SetAtom(&F.Atoms[ 37 ] , "C",-1.476000f,3.659000f,-0.001000f); SetAtom(&F.Atoms[ 38 ] , "C",-0.742000f,3.689000f,-1.228000f); SetAtom(&F.Atoms[ 39 ] , "C",-2.725000f,3.016000f,0.001000f); SetAtom(&F.Atoms[ 40 ] , "C",0.729000f,-0.848000f,-3.610000f); SetAtom(&F.Atoms[ 41 ] , "C",1.466000f,-1.849000f,-2.929000f); SetAtom(&F.Atoms[ 42 ] , "C",2.772000f,-1.503000f,-2.522000f); SetAtom(&F.Atoms[ 43 ] , "C",3.415000f,-2.164000f,-1.404000f); SetAtom(&F.Atoms[ 44 ] , "C",2.722000f,-3.137000f,-0.716000f); SetAtom(&F.Atoms[ 45 ] , "C",-0.735000f,-2.901000f,-2.213000f); SetAtom(&F.Atoms[ 46 ] , "C",0.736000f,-2.899000f,-2.213000f); SetAtom(&F.Atoms[ 47 ] , "C",1.405000f,-3.546000f,-1.162000f); SetAtom(&F.Atoms[ 48 ] , "C",-1.403000f,-3.548000f,-1.161000f); SetAtom(&F.Atoms[ 49 ] , "C",-0.682000f,-3.969000f,0.014000f); SetAtom(&F.Atoms[ 50 ] , "C",0.686000f,-3.968000f,0.013000f); SetAtom(&F.Atoms[ 51 ] , "C",-0.733000f,-0.849000f,-3.609000f); SetAtom(&F.Atoms[ 52 ] , "C",-2.774000f,-1.508000f,-2.520000f); SetAtom(&F.Atoms[ 53 ] , "C",-1.468000f,-1.851000f,-2.928000f); SetAtom(&F.Atoms[ 54 ] , "C",-2.375000f,0.884000f,-2.996000f); SetAtom(&F.Atoms[ 55 ] , "C",-1.183000f,0.481000f,-3.666000f); SetAtom(&F.Atoms[ 56 ] , "C",-3.217000f,-0.144000f,-2.537000f); SetAtom(&F.Atoms[ 57 ] , "C",-4.216000f,-1.196000f,-0.688000f); SetAtom(&F.Atoms[ 58 ] , "C",-3.416000f,-2.170000f,-1.402000f); SetAtom(&F.Atoms[ 59 ] , "C",-2.720000f,-3.142000f,-0.714000f); SetAtom(&F.Atoms[ 60 ] , "C",-4.215000f,-1.193000f,0.707000f); SetAtom(&F.Atoms[ 61 ] , "C",-4.078000f,1.254000f,0.728000f); SetAtom(&F.Atoms[ 62 ] , "C",-4.078000f,1.251000f,-0.719000f); SetAtom(&F.Atoms[ 63 ] , "C",-4.115000f,0.053000f,-1.408000f); SetAtom(&F.Atoms[ 64 ] , "C",-4.114000f,0.059000f,1.422000f); SetAtom(&F.Atoms[ 65 ] , "C",-1.185000f,2.981000f,2.343000f); SetAtom(&F.Atoms[ 66 ] , "C",-2.377000f,2.180000f,2.299000f); SetAtom(&F.Atoms[ 67 ] , "C",-3.200000f,2.322000f,1.171000f); SetAtom(&F.Atoms[ 68 ] , "C",-1.181000f,0.496000f,3.676000f); SetAtom(&F.Atoms[ 69 ] , "C",-0.002000f,1.351000f,3.727000f); SetAtom(&F.Atoms[ 70 ] , "C",-0.003000f,2.554000f,3.082000f); SetAtom(&F.Atoms[ 71 ] , "C",-3.216000f,-0.134000f,2.551000f); SetAtom(&F.Atoms[ 72 ] , "C",-2.373000f,0.896000f,3.005000f); SetAtom(&F.Atoms[ 73 ] , "C",-2.720000f,-3.139000f,0.739000f); SetAtom(&F.Atoms[ 74 ] , "C",-3.415000f,-2.164000f,1.425000f); SetAtom(&F.Atoms[ 75 ] , "C",-2.772000f,-1.497000f,2.539000f); SetAtom(&F.Atoms[ 76 ] , "C",-1.466000f,-1.840000f,2.948000f); SetAtom(&F.Atoms[ 77 ] , "C",-0.730000f,-0.835000f,3.624000f); F.atomToDelete =1; F.atomToBondTo =2; F.angleAtom =3; } else if ( !strcmp(Name, "C80" ) ) { F.NAtoms = 80; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GC80"); SetAtom(&F.Atoms[ 0 ] , "C",-1.790000f,-1.249000f,7.854000f); SetAtom(&F.Atoms[ 1 ] , "C",-1.795000f,0.150000f,7.869000f); SetAtom(&F.Atoms[ 2 ] , "C",-0.601000f,0.882000f,7.869000f); SetAtom(&F.Atoms[ 3 ] , "C",0.643000f,0.242000f,7.855000f); SetAtom(&F.Atoms[ 4 ] , "C",0.648000f,-1.156000f,7.903000f); SetAtom(&F.Atoms[ 5 ] , "C",-0.546000f,-1.888000f,7.902000f); SetAtom(&F.Atoms[ 6 ] , "C",-2.751000f,0.881000f,7.154000f); SetAtom(&F.Atoms[ 7 ] , "C",-3.738000f,0.241000f,6.396000f); SetAtom(&F.Atoms[ 8 ] , "C",-3.770000f,-1.157000f,6.431000f); SetAtom(&F.Atoms[ 9 ] , "C",-2.814000f,-1.888000f,7.147000f); SetAtom(&F.Atoms[ 10 ] , "C",-0.318000f,-3.088000f,7.218000f); SetAtom(&F.Atoms[ 11 ] , "C",-1.325000f,-3.695000f,6.460000f); SetAtom(&F.Atoms[ 12 ] , "C",-2.586000f,-3.089000f,6.463000f); SetAtom(&F.Atoms[ 13 ] , "C",1.614000f,-1.904000f,7.218000f); SetAtom(&F.Atoms[ 14 ] , "C",1.017000f,-3.098000f,6.795000f); SetAtom(&F.Atoms[ 15 ] , "C",-0.819000f,2.065000f,7.154000f); SetAtom(&F.Atoms[ 16 ] , "C",-2.148000f,2.065000f,6.711000f); SetAtom(&F.Atoms[ 17 ] , "C",-4.133000f,-1.905000f,5.304000f); SetAtom(&F.Atoms[ 18 ] , "C",-3.401000f,-3.099000f,5.324000f); SetAtom(&F.Atoms[ 19 ] , "C",1.677000f,0.865000f,7.148000f); SetAtom(&F.Atoms[ 20 ] , "C",1.460000f,2.048000f,6.432000f); SetAtom(&F.Atoms[ 21 ] , "C",0.199000f,2.655000f,6.396000f); SetAtom(&F.Atoms[ 22 ] , "C",-0.172000f,3.297000f,5.210000f); SetAtom(&F.Atoms[ 23 ] , "C",-1.501000f,3.297000f,4.768000f); SetAtom(&F.Atoms[ 24 ] , "C",-2.509000f,2.654000f,5.494000f); SetAtom(&F.Atoms[ 25 ] , "C",-3.539000f,2.048000f,4.767000f); SetAtom(&F.Atoms[ 26 ] , "C",-4.142000f,0.864000f,5.210000f); SetAtom(&F.Atoms[ 27 ] , "C",-4.505000f,0.116000f,4.083000f); SetAtom(&F.Atoms[ 28 ] , "C",-4.477000f,-1.283000f,4.099000f); SetAtom(&F.Atoms[ 29 ] , "C",-4.115000f,-1.933000f,2.914000f); SetAtom(&F.Atoms[ 30 ] , "C",-3.384000f,-3.127000f,2.933000f); SetAtom(&F.Atoms[ 31 ] , "C",-2.986000f,-3.716000f,4.139000f); SetAtom(&F.Atoms[ 32 ] , "C",-1.752000f,-4.376000f,4.155000f); SetAtom(&F.Atoms[ 33 ] , "C",-0.937000f,-4.365000f,5.294000f); SetAtom(&F.Atoms[ 34 ] , "C",0.398000f,-4.375000f,4.871000f); SetAtom(&F.Atoms[ 35 ] , "C",1.395000f,-3.716000f,5.598000f); SetAtom(&F.Atoms[ 36 ] , "C",2.644000f,0.117000f,6.463000f); SetAtom(&F.Atoms[ 37 ] , "C",2.612000f,-1.282000f,6.460000f); SetAtom(&F.Atoms[ 38 ] , "C",3.033000f,-1.932000f,5.295000f); SetAtom(&F.Atoms[ 39 ] , "C",2.436000f,-3.126000f,4.872000f); SetAtom(&F.Atoms[ 40 ] , "C",0.698000f,0.155000f,0.384000f); SetAtom(&F.Atoms[ 41 ] , "C",0.703000f,-1.245000f,0.369000f); SetAtom(&F.Atoms[ 42 ] , "C",-0.491000f,-1.976000f,0.369000f); SetAtom(&F.Atoms[ 43 ] , "C",-1.736000f,-1.337000f,0.384000f); SetAtom(&F.Atoms[ 44 ] , "C",-1.740000f,0.062000f,0.336000f); SetAtom(&F.Atoms[ 45 ] , "C",-0.546000f,0.793000f,0.336000f); SetAtom(&F.Atoms[ 46 ] , "C",1.659000f,-1.976000f,1.085000f); SetAtom(&F.Atoms[ 47 ] , "C",2.646000f,-1.336000f,1.843000f); SetAtom(&F.Atoms[ 48 ] , "C",2.678000f,0.062000f,1.807000f); SetAtom(&F.Atoms[ 49 ] , "C",1.722000f,0.794000f,1.092000f); SetAtom(&F.Atoms[ 50 ] , "C",-0.774000f,1.994000f,1.021000f); SetAtom(&F.Atoms[ 51 ] , "C",0.233000f,2.600000f,1.779000f); SetAtom(&F.Atoms[ 52 ] , "C",1.494000f,1.994000f,1.776000f); SetAtom(&F.Atoms[ 53 ] , "C",-2.706000f,0.809000f,1.021000f); SetAtom(&F.Atoms[ 54 ] , "C",-2.109000f,2.003000f,1.444000f); SetAtom(&F.Atoms[ 55 ] , "C",-0.273000f,-3.160000f,1.085000f); SetAtom(&F.Atoms[ 56 ] , "C",1.055000f,-3.160000f,1.527000f); SetAtom(&F.Atoms[ 57 ] , "C",3.040000f,0.810000f,2.934000f); SetAtom(&F.Atoms[ 58 ] , "C",2.308000f,2.004000f,2.915000f); SetAtom(&F.Atoms[ 59 ] , "C",-2.770000f,-1.959000f,1.091000f); SetAtom(&F.Atoms[ 60 ] , "C",-2.552000f,-3.143000f,1.807000f); SetAtom(&F.Atoms[ 61 ] , "C",-1.292000f,-3.749000f,1.842000f); SetAtom(&F.Atoms[ 62 ] , "C",-0.921000f,-4.392000f,3.029000f); SetAtom(&F.Atoms[ 63 ] , "C",0.408000f,-4.392000f,3.471000f); SetAtom(&F.Atoms[ 64 ] , "C",1.416000f,-3.749000f,2.744000f); SetAtom(&F.Atoms[ 65 ] , "C",2.446000f,-3.143000f,3.471000f); SetAtom(&F.Atoms[ 66 ] , "C",3.050000f,-1.959000f,3.029000f); SetAtom(&F.Atoms[ 67 ] , "C",3.412000f,-1.211000f,4.156000f); SetAtom(&F.Atoms[ 68 ] , "C",3.385000f,0.188000f,4.139000f); SetAtom(&F.Atoms[ 69 ] , "C",3.023000f,0.838000f,5.325000f); SetAtom(&F.Atoms[ 70 ] , "C",2.291000f,2.032000f,5.305000f); SetAtom(&F.Atoms[ 71 ] , "C",1.893000f,2.621000f,4.100000f); SetAtom(&F.Atoms[ 72 ] , "C",0.659000f,3.281000f,4.083000f); SetAtom(&F.Atoms[ 73 ] , "C",-0.156000f,3.271000f,2.944000f); SetAtom(&F.Atoms[ 74 ] , "C",-1.491000f,3.281000f,3.367000f); SetAtom(&F.Atoms[ 75 ] , "C",-2.488000f,2.621000f,2.641000f); SetAtom(&F.Atoms[ 76 ] , "C",-3.736000f,-1.212000f,1.775000f); SetAtom(&F.Atoms[ 77 ] , "C",-3.704000f,0.187000f,1.779000f); SetAtom(&F.Atoms[ 78 ] , "C",-4.126000f,0.837000f,2.944000f); SetAtom(&F.Atoms[ 79 ] , "C",-3.529000f,2.031000f,3.367000f); F.atomToDelete =1; F.atomToBondTo =2; F.angleAtom =3; } else if ( !strcmp(Name, "C82" ) ) { F.NAtoms = 82; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GC82"); SetAtom(&F.Atoms[ 0 ] , "C",3.228000f,-1.003000f,2.195000f); SetAtom(&F.Atoms[ 1 ] , "C",4.135000f,-0.812000f,1.136000f); SetAtom(&F.Atoms[ 2 ] , "C",4.474000f,0.500000f,0.661000f); SetAtom(&F.Atoms[ 3 ] , "C",2.717000f,0.171000f,2.898000f); SetAtom(&F.Atoms[ 4 ] , "C",3.128000f,1.442000f,2.458000f); SetAtom(&F.Atoms[ 5 ] , "C",3.955000f,1.610000f,1.301000f); SetAtom(&F.Atoms[ 6 ] , "C",0.783000f,-1.149000f,3.714000f); SetAtom(&F.Atoms[ 7 ] , "C",1.449000f,0.086000f,3.634000f); SetAtom(&F.Atoms[ 8 ] , "C",0.642000f,1.244000f,3.771000f); SetAtom(&F.Atoms[ 9 ] , "C",1.025000f,2.486000f,3.139000f); SetAtom(&F.Atoms[ 10 ] , "C",2.220000f,2.578000f,2.487000f); SetAtom(&F.Atoms[ 11 ] , "C",-0.774000f,1.166000f,3.715000f); SetAtom(&F.Atoms[ 12 ] , "C",-1.440000f,-0.069000f,3.641000f); SetAtom(&F.Atoms[ 13 ] , "C",-0.632000f,-1.228000f,3.777000f); SetAtom(&F.Atoms[ 14 ] , "C",4.025000f,1.498000f,-1.542000f); SetAtom(&F.Atoms[ 15 ] , "C",3.409000f,2.632000f,-0.869000f); SetAtom(&F.Atoms[ 16 ] , "C",4.573000f,0.464000f,-0.795000f); SetAtom(&F.Atoms[ 17 ] , "C",3.430000f,2.725000f,0.516000f); SetAtom(&F.Atoms[ 18 ] , "C",2.302000f,3.266000f,1.204000f); SetAtom(&F.Atoms[ 19 ] , "C",2.213000f,2.980000f,-1.573000f); SetAtom(&F.Atoms[ 20 ] , "C",1.082000f,3.478000f,-0.919000f); SetAtom(&F.Atoms[ 21 ] , "C",1.132000f,3.656000f,0.522000f); SetAtom(&F.Atoms[ 22 ] , "C",-1.332000f,3.729000f,0.579000f); SetAtom(&F.Atoms[ 23 ] , "C",-0.120000f,3.673000f,1.278000f); SetAtom(&F.Atoms[ 24 ] , "C",-0.158000f,3.101000f,2.576000f); SetAtom(&F.Atoms[ 25 ] , "C",3.672000f,-1.208000f,-2.365000f); SetAtom(&F.Atoms[ 26 ] , "C",3.041000f,-0.131000f,-3.107000f); SetAtom(&F.Atoms[ 27 ] , "C",4.390000f,-0.914000f,-1.212000f); SetAtom(&F.Atoms[ 28 ] , "C",3.210000f,1.189000f,-2.702000f); SetAtom(&F.Atoms[ 29 ] , "C",2.088000f,2.075000f,-2.712000f); SetAtom(&F.Atoms[ 30 ] , "C",1.749000f,-0.573000f,-3.528000f); SetAtom(&F.Atoms[ 31 ] , "C",0.657000f,0.295000f,-3.594000f); SetAtom(&F.Atoms[ 32 ] , "C",0.831000f,1.669000f,-3.166000f); SetAtom(&F.Atoms[ 33 ] , "C",-1.370000f,3.656000f,-0.879000f); SetAtom(&F.Atoms[ 34 ] , "C",-0.210000f,3.337000f,-1.598000f); SetAtom(&F.Atoms[ 35 ] , "C",-0.329000f,2.439000f,-2.729000f); SetAtom(&F.Atoms[ 36 ] , "C",-1.595000f,1.953000f,-3.077000f); SetAtom(&F.Atoms[ 37 ] , "C",3.365000f,-2.818000f,-0.045000f); SetAtom(&F.Atoms[ 38 ] , "C",2.640000f,-3.155000f,-1.256000f); SetAtom(&F.Atoms[ 39 ] , "C",4.181000f,-1.710000f,-0.011000f); SetAtom(&F.Atoms[ 40 ] , "C",2.757000f,-2.336000f,-2.377000f); SetAtom(&F.Atoms[ 41 ] , "C",1.576000f,-1.954000f,-3.079000f); SetAtom(&F.Atoms[ 42 ] , "C",1.360000f,-3.651000f,-0.875000f); SetAtom(&F.Atoms[ 43 ] , "C",0.197000f,-3.334000f,-1.590000f); SetAtom(&F.Atoms[ 44 ] , "C",0.312000f,-2.439000f,-2.724000f); SetAtom(&F.Atoms[ 45 ] , "C",-1.770000f,0.571000f,-3.522000f); SetAtom(&F.Atoms[ 46 ] , "C",-0.678000f,-0.297000f,-3.590000f); SetAtom(&F.Atoms[ 47 ] , "C",-0.851000f,-1.670000f,-3.158000f); SetAtom(&F.Atoms[ 48 ] , "C",-2.105000f,-2.075000f,-2.698000f); SetAtom(&F.Atoms[ 49 ] , "C",1.277000f,-2.312000f,2.984000f); SetAtom(&F.Atoms[ 50 ] , "C",2.448000f,-2.245000f,2.205000f); SetAtom(&F.Atoms[ 51 ] , "C",2.511000f,-3.112000f,1.085000f); SetAtom(&F.Atoms[ 52 ] , "C",1.328000f,-3.720000f,0.583000f); SetAtom(&F.Atoms[ 53 ] , "C",0.119000f,-3.663000f,1.287000f); SetAtom(&F.Atoms[ 54 ] , "C",0.162000f,-3.087000f,2.583000f); SetAtom(&F.Atoms[ 55 ] , "C",-2.215000f,-2.565000f,2.503000f); SetAtom(&F.Atoms[ 56 ] , "C",-1.018000f,-2.471000f,3.150000f); SetAtom(&F.Atoms[ 57 ] , "C",-2.225000f,-2.978000f,-1.556000f); SetAtom(&F.Atoms[ 58 ] , "C",-1.092000f,-3.473000f,-0.906000f); SetAtom(&F.Atoms[ 59 ] , "C",-1.136000f,-3.648000f,0.536000f); SetAtom(&F.Atoms[ 60 ] , "C",-2.303000f,-3.256000f,1.221000f); SetAtom(&F.Atoms[ 61 ] , "C",-4.037000f,-1.495000f,-1.521000f); SetAtom(&F.Atoms[ 62 ] , "C",-3.418000f,-2.628000f,-0.848000f); SetAtom(&F.Atoms[ 63 ] , "C",-3.434000f,-2.717000f,0.537000f); SetAtom(&F.Atoms[ 64 ] , "C",-4.582000f,-0.459000f,-0.775000f); SetAtom(&F.Atoms[ 65 ] , "C",-3.688000f,1.209000f,-2.353000f); SetAtom(&F.Atoms[ 66 ] , "C",-3.060000f,0.130000f,-3.094000f); SetAtom(&F.Atoms[ 67 ] , "C",-3.228000f,-1.189000f,-2.685000f); SetAtom(&F.Atoms[ 68 ] , "C",-4.401000f,0.918000f,-1.196000f); SetAtom(&F.Atoms[ 69 ] , "C",-3.372000f,2.825000f,-0.038000f); SetAtom(&F.Atoms[ 70 ] , "C",-2.651000f,3.159000f,-1.253000f); SetAtom(&F.Atoms[ 71 ] , "C",-2.773000f,2.337000f,-2.372000f); SetAtom(&F.Atoms[ 72 ] , "C",-4.187000f,1.717000f,0.002000f); SetAtom(&F.Atoms[ 73 ] , "C",-1.270000f,2.327000f,2.984000f); SetAtom(&F.Atoms[ 74 ] , "C",-2.445000f,2.258000f,2.209000f); SetAtom(&F.Atoms[ 75 ] , "C",-2.513000f,3.122000f,1.088000f); SetAtom(&F.Atoms[ 76 ] , "C",-3.955000f,-1.600000f,1.321000f); SetAtom(&F.Atoms[ 77 ] , "C",-3.123000f,-1.429000f,2.474000f); SetAtom(&F.Atoms[ 78 ] , "C",-2.711000f,-0.156000f,2.910000f); SetAtom(&F.Atoms[ 79 ] , "C",-4.477000f,-0.491000f,0.680000f); SetAtom(&F.Atoms[ 80 ] , "C",-4.136000f,0.822000f,1.151000f); SetAtom(&F.Atoms[ 81 ] , "C",-3.225000f,1.016000f,2.206000f); F.atomToDelete =1; F.atomToBondTo =2; F.angleAtom =3; } else if ( !strcmp(Name, "C84" ) ) { F.NAtoms = 84; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GC84"); SetAtom(&F.Atoms[ 0 ] , "C",-1.579000f,0.721000f,3.576000f); SetAtom(&F.Atoms[ 1 ] , "C",-2.509000f,1.451000f,2.805000f); SetAtom(&F.Atoms[ 2 ] , "C",-3.603000f,0.728000f,2.285000f); SetAtom(&F.Atoms[ 3 ] , "C",-4.306000f,1.175000f,1.099000f); SetAtom(&F.Atoms[ 4 ] , "C",-3.883000f,2.320000f,0.461000f); SetAtom(&F.Atoms[ 5 ] , "C",-0.646000f,3.054000f,2.235000f); SetAtom(&F.Atoms[ 6 ] , "C",-2.051000f,2.663000f,2.132000f); SetAtom(&F.Atoms[ 7 ] , "C",-2.796000f,3.103000f,1.018000f); SetAtom(&F.Atoms[ 8 ] , "C",-0.111000f,3.862000f,1.225000f); SetAtom(&F.Atoms[ 9 ] , "C",-0.845000f,4.145000f,0.031000f); SetAtom(&F.Atoms[ 10 ] , "C",-2.152000f,3.745000f,-0.086000f); SetAtom(&F.Atoms[ 11 ] , "C",0.298000f,2.263000f,3.039000f); SetAtom(&F.Atoms[ 12 ] , "C",1.729000f,2.270000f,2.724000f); SetAtom(&F.Atoms[ 13 ] , "C",-0.214000f,1.177000f,3.756000f); SetAtom(&F.Atoms[ 14 ] , "C",2.522000f,1.189000f,3.150000f); SetAtom(&F.Atoms[ 15 ] , "C",-4.552000f,0.004000f,-1.047000f); SetAtom(&F.Atoms[ 16 ] , "C",-3.999000f,1.171000f,-1.708000f); SetAtom(&F.Atoms[ 17 ] , "C",-4.704000f,0.007000f,0.336000f); SetAtom(&F.Atoms[ 18 ] , "C",-3.747000f,2.330000f,-0.989000f); SetAtom(&F.Atoms[ 19 ] , "C",-2.613000f,3.134000f,-1.323000f); SetAtom(&F.Atoms[ 20 ] , "C",-3.046000f,0.731000f,-2.686000f); SetAtom(&F.Atoms[ 21 ] , "C",-1.897000f,1.463000f,-2.983000f); SetAtom(&F.Atoms[ 22 ] , "C",-1.686000f,2.737000f,-2.307000f); SetAtom(&F.Atoms[ 23 ] , "C",0.701000f,2.654000f,-2.974000f); SetAtom(&F.Atoms[ 24 ] , "C",-0.335000f,3.293000f,-2.232000f); SetAtom(&F.Atoms[ 25 ] , "C",0.048000f,4.031000f,-1.099000f); SetAtom(&F.Atoms[ 26 ] , "C",-3.883000f,-2.305000f,0.473000f); SetAtom(&F.Atoms[ 27 ] , "C",-3.747000f,-2.322000f,-0.977000f); SetAtom(&F.Atoms[ 28 ] , "C",-4.306000f,-1.157000f,1.105000f); SetAtom(&F.Atoms[ 29 ] , "C",-3.999000f,-1.167000f,-1.702000f); SetAtom(&F.Atoms[ 30 ] , "C",-3.046000f,-0.733000f,-2.682000f); SetAtom(&F.Atoms[ 31 ] , "C",-2.614000f,-3.128000f,-1.307000f); SetAtom(&F.Atoms[ 32 ] , "C",-1.687000f,-2.737000f,-2.293000f); SetAtom(&F.Atoms[ 33 ] , "C",-1.897000f,-1.466000f,-2.975000f); SetAtom(&F.Atoms[ 34 ] , "C",0.454000f,1.398000f,-3.675000f); SetAtom(&F.Atoms[ 35 ] , "C",-0.761000f,0.732000f,-3.564000f); SetAtom(&F.Atoms[ 36 ] , "C",-0.761000f,-0.739000f,-3.561000f); SetAtom(&F.Atoms[ 37 ] , "C",0.454000f,-1.407000f,-3.668000f); SetAtom(&F.Atoms[ 38 ] , "C",-0.845000f,-4.133000f,0.052000f); SetAtom(&F.Atoms[ 39 ] , "C",-2.796000f,-3.085000f,1.034000f); SetAtom(&F.Atoms[ 40 ] , "C",-2.152000f,-3.734000f,-0.067000f); SetAtom(&F.Atoms[ 41 ] , "C",0.047000f,-4.025000f,-1.079000f); SetAtom(&F.Atoms[ 42 ] , "C",0.700000f,-2.659000f,-2.961000f); SetAtom(&F.Atoms[ 43 ] , "C",-0.336000f,-3.293000f,-2.215000f); SetAtom(&F.Atoms[ 44 ] , "C",-0.112000f,-3.845000f,1.246000f); SetAtom(&F.Atoms[ 45 ] , "C",-0.646000f,-3.032000f,2.252000f); SetAtom(&F.Atoms[ 46 ] , "C",-2.051000f,-2.641000f,2.147000f); SetAtom(&F.Atoms[ 47 ] , "C",-2.509000f,-1.426000f,2.813000f); SetAtom(&F.Atoms[ 48 ] , "C",-3.603000f,-0.704000f,2.289000f); SetAtom(&F.Atoms[ 49 ] , "C",-1.579000f,-0.692000f,3.579000f); SetAtom(&F.Atoms[ 50 ] , "C",1.729000f,-2.247000f,2.737000f); SetAtom(&F.Atoms[ 51 ] , "C",0.298000f,-2.237000f,3.052000f); SetAtom(&F.Atoms[ 52 ] , "C",-0.215000f,-1.148000f,3.762000f); SetAtom(&F.Atoms[ 53 ] , "C",2.522000f,-1.163000f,3.157000f); SetAtom(&F.Atoms[ 54 ] , "C",1.923000f,0.015000f,3.721000f); SetAtom(&F.Atoms[ 55 ] , "C",0.578000f,0.016000f,4.021000f); SetAtom(&F.Atoms[ 56 ] , "C",1.288000f,-3.788000f,0.875000f); SetAtom(&F.Atoms[ 57 ] , "C",3.374000f,-2.586000f,0.887000f); SetAtom(&F.Atoms[ 58 ] , "C",2.209000f,-3.024000f,1.593000f); SetAtom(&F.Atoms[ 59 ] , "C",2.032000f,-2.658000f,-2.527000f); SetAtom(&F.Atoms[ 60 ] , "C",2.384000f,-3.238000f,-1.267000f); SetAtom(&F.Atoms[ 61 ] , "C",1.379000f,-3.915000f,-0.553000f); SetAtom(&F.Atoms[ 62 ] , "C",3.425000f,-2.628000f,-0.520000f); SetAtom(&F.Atoms[ 63 ] , "C",4.553000f,-0.705000f,0.115000f); SetAtom(&F.Atoms[ 64 ] , "C",4.115000f,-1.417000f,1.311000f); SetAtom(&F.Atoms[ 65 ] , "C",3.695000f,-0.722000f,2.416000f); SetAtom(&F.Atoms[ 66 ] , "C",4.554000f,0.715000f,0.110000f); SetAtom(&F.Atoms[ 67 ] , "C",2.664000f,-1.410000f,-2.978000f); SetAtom(&F.Atoms[ 68 ] , "C",3.611000f,-0.723000f,-2.171000f); SetAtom(&F.Atoms[ 69 ] , "C",4.094000f,-1.410000f,-1.002000f); SetAtom(&F.Atoms[ 70 ] , "C",2.664000f,1.404000f,-2.985000f); SetAtom(&F.Atoms[ 71 ] , "C",1.706000f,0.695000f,-3.738000f); SetAtom(&F.Atoms[ 72 ] , "C",1.706000f,-0.704000f,-3.734000f); SetAtom(&F.Atoms[ 73 ] , "C",4.094000f,1.414000f,-1.010000f); SetAtom(&F.Atoms[ 74 ] , "C",3.612000f,0.721000f,-2.174000f); SetAtom(&F.Atoms[ 75 ] , "C",1.380000f,3.923000f,-0.574000f); SetAtom(&F.Atoms[ 76 ] , "C",3.426000f,2.635000f,-0.534000f); SetAtom(&F.Atoms[ 77 ] , "C",2.385000f,3.242000f,-1.284000f); SetAtom(&F.Atoms[ 78 ] , "C",2.033000f,2.655000f,-2.540000f); SetAtom(&F.Atoms[ 79 ] , "C",3.695000f,0.744000f,2.412000f); SetAtom(&F.Atoms[ 80 ] , "C",4.115000f,1.433000f,1.302000f); SetAtom(&F.Atoms[ 81 ] , "C",3.375000f,2.600000f,0.873000f); SetAtom(&F.Atoms[ 82 ] , "C",2.209000f,3.042000f,1.576000f); SetAtom(&F.Atoms[ 83 ] , "C",1.289000f,3.803000f,0.855000f); F.atomToDelete =1; F.atomToBondTo =2; F.angleAtom =3; } else if ( !strcmp(Name, "C240" ) ) { F.NAtoms = 240; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); sprintf(T,"GC240"); SetAtom(&F.Atoms[ 0 ] , "C",-2.281342f,4.587967f,4.598389f); SetAtom(&F.Atoms[ 1 ] , "C",-2.163620f,5.608307f,3.610657f); SetAtom(&F.Atoms[ 2 ] , "C",-3.035400f,5.630814f,2.448380f); SetAtom(&F.Atoms[ 3 ] , "C",-2.598221f,6.220490f,1.216995f); SetAtom(&F.Atoms[ 4 ] , "C",-3.314468f,5.983368f,-0.007492f); SetAtom(&F.Atoms[ 5 ] , "C",-4.476868f,4.028839f,3.625458f); SetAtom(&F.Atoms[ 6 ] , "C",-4.205200f,4.810272f,2.468735f); SetAtom(&F.Atoms[ 7 ] , "C",-4.930496f,4.563858f,1.218552f); SetAtom(&F.Atoms[ 8 ] , "C",-4.491714f,5.125992f,0.012085f); SetAtom(&F.Atoms[ 9 ] , "C",-3.447052f,3.781830f,4.620193f); SetAtom(&F.Atoms[ 10 ] , "C",0.158890f,4.818054f,5.102020f); SetAtom(&F.Atoms[ 11 ] , "C",0.181076f,5.961777f,4.279022f); SetAtom(&F.Atoms[ 12 ] , "C",-0.947586f,6.359512f,3.557632f); SetAtom(&F.Atoms[ 13 ] , "C",-1.093765f,4.176498f,5.349075f); SetAtom(&F.Atoms[ 14 ] , "C",-2.306000f,2.143768f,6.094131f); SetAtom(&F.Atoms[ 15 ] , "C",-1.128693f,2.963745f,6.079330f); SetAtom(&F.Atoms[ 16 ] , "C",-3.478760f,2.552400f,5.362061f); SetAtom(&F.Atoms[ 17 ] , "C",-5.606659f,3.143860f,3.598740f); SetAtom(&F.Atoms[ 18 ] , "C",-4.514542f,1.590210f,5.133850f); SetAtom(&F.Atoms[ 19 ] , "C",-5.613495f,1.966141f,4.312393f); SetAtom(&F.Atoms[ 20 ] , "C",2.575500f,4.476532f,4.583984f); SetAtom(&F.Atoms[ 21 ] , "C",2.492889f,5.511398f,3.581207f); SetAtom(&F.Atoms[ 22 ] , "C",3.308090f,5.489700f,2.422394f); SetAtom(&F.Atoms[ 23 ] , "C",2.847504f,6.086060f,1.169830f); SetAtom(&F.Atoms[ 24 ] , "C",3.512115f,5.847488f,-0.032288f); SetAtom(&F.Atoms[ 25 ] , "C",1.295074f,6.313600f,3.553452f); SetAtom(&F.Atoms[ 26 ] , "C",1.413100f,4.120712f,5.337097f); SetAtom(&F.Atoms[ 27 ] , "C",-5.046661f,-0.794907f,4.618820f); SetAtom(&F.Atoms[ 28 ] , "C",-5.996689f,-0.366486f,3.621780f); SetAtom(&F.Atoms[ 29 ] , "C",-6.281952f,-1.177551f,2.471466f); SetAtom(&F.Atoms[ 30 ] , "C",-6.721237f,-0.573166f,1.231200f); SetAtom(&F.Atoms[ 31 ] , "C",-6.721115f,-1.326370f,0.017288f); SetAtom(&F.Atoms[ 32 ] , "C",-6.335770f,1.023224f,3.591690f); SetAtom(&F.Atoms[ 33 ] , "C",-4.304977f,0.188828f,5.360260f); SetAtom(&F.Atoms[ 34 ] , "C",-3.139084f,-0.212646f,6.100311f); SetAtom(&F.Atoms[ 35 ] , "C",0.081879f,1.156265f,7.191818f); SetAtom(&F.Atoms[ 36 ] , "C",-1.038132f,0.381668f,7.199600f); SetAtom(&F.Atoms[ 37 ] , "C",-2.242004f,0.793808f,6.564178f); SetAtom(&F.Atoms[ 38 ] , "C",0.127670f,2.411163f,6.554962f); SetAtom(&F.Atoms[ 39 ] , "C",1.376022f,2.901947f,6.075867f); SetAtom(&F.Atoms[ 40 ] , "C",3.720000f,3.613846f,4.564987f); SetAtom(&F.Atoms[ 41 ] , "C",4.715469f,3.818283f,3.572525f); SetAtom(&F.Atoms[ 42 ] , "C",4.463913f,4.636276f,2.403183f); SetAtom(&F.Atoms[ 43 ] , "C",5.154221f,4.405411f,1.174545f); SetAtom(&F.Atoms[ 44 ] , "C",4.703796f,5.001190f,-0.053680f); SetAtom(&F.Atoms[ 45 ] , "C",-1.432159f,-1.956421f,6.577133f); SetAtom(&F.Atoms[ 46 ] , "C",-0.670486f,-0.942596f,7.229706f); SetAtom(&F.Atoms[ 47 ] , "C",-2.747894f,-1.603119f,6.094482f); SetAtom(&F.Atoms[ 48 ] , "C",-3.478989f,-2.567642f,5.369919f); SetAtom(&F.Atoms[ 49 ] , "C",-4.653976f,-2.161926f,4.614151f); SetAtom(&F.Atoms[ 50 ] , "C",-5.197128f,-3.049683f,3.633484f); SetAtom(&F.Atoms[ 51 ] , "C",-5.866226f,-2.544052f,2.466766f); SetAtom(&F.Atoms[ 52 ] , "C",-5.855911f,-3.303268f,1.231827f); SetAtom(&F.Atoms[ 53 ] , "C",-6.267044f,-2.707489f,0.017838f); SetAtom(&F.Atoms[ 54 ] , "C",3.690735f,2.376968f,5.327179f); SetAtom(&F.Atoms[ 55 ] , "C",2.543076f,2.028885f,6.067291f); SetAtom(&F.Atoms[ 56 ] , "C",2.407074f,0.684982f,6.557129f); SetAtom(&F.Atoms[ 57 ] , "C",1.191437f,0.332932f,7.221466f); SetAtom(&F.Atoms[ 58 ] , "C",0.735352f,-0.992142f,7.238327f); SetAtom(&F.Atoms[ 59 ] , "C",5.815781f,2.895920f,3.521881f); SetAtom(&F.Atoms[ 60 ] , "C",5.106384f,-1.031204f,4.567413f); SetAtom(&F.Atoms[ 61 ] , "C",6.064880f,-0.636398f,3.567581f); SetAtom(&F.Atoms[ 62 ] , "C",6.291779f,-1.429077f,2.410324f); SetAtom(&F.Atoms[ 63 ] , "C",6.709442f,-0.811920f,1.156600f); SetAtom(&F.Atoms[ 64 ] , "C",6.670029f,-1.524933f,-0.042038f); SetAtom(&F.Atoms[ 65 ] , "C",6.465179f,0.748276f,3.528030f); SetAtom(&F.Atoms[ 66 ] , "C",5.785538f,1.705963f,4.250702f); SetAtom(&F.Atoms[ 67 ] , "C",4.698105f,1.373444f,5.076614f); SetAtom(&F.Atoms[ 68 ] , "C",-2.921341f,-5.753769f,3.571700f); SetAtom(&F.Atoms[ 69 ] , "C",-1.487717f,-5.855667f,3.604904f); SetAtom(&F.Atoms[ 70 ] , "C",-0.814056f,-6.373337f,2.439957f); SetAtom(&F.Atoms[ 71 ] , "C",-1.521591f,-6.589935f,1.212067f); SetAtom(&F.Atoms[ 72 ] , "C",-0.815628f,-6.809708f,-0.011185f); SetAtom(&F.Atoms[ 73 ] , "C",-0.792786f,-5.097672f,4.590271f); SetAtom(&F.Atoms[ 74 ] , "C",-1.485077f,-4.082718f,5.352325f); SetAtom(&F.Atoms[ 75 ] , "C",-2.900360f,-3.862656f,5.117722f); SetAtom(&F.Atoms[ 76 ] , "C",-3.587784f,-4.775269f,4.304123f); SetAtom(&F.Atoms[ 77 ] , "C",-4.712662f,-4.402771f,3.588531f); SetAtom(&F.Atoms[ 78 ] , "C",3.444565f,-2.729233f,5.321991f); SetAtom(&F.Atoms[ 79 ] , "C",4.630356f,-2.377792f,4.561539f); SetAtom(&F.Atoms[ 80 ] , "C",4.410477f,-0.023636f,5.322876f); SetAtom(&F.Atoms[ 81 ] , "C",3.247955f,-0.368011f,6.066437f); SetAtom(&F.Atoms[ 82 ] , "C",2.762085f,-1.735260f,6.064392f); SetAtom(&F.Atoms[ 83 ] , "C",1.442551f,-2.028824f,6.561111f); SetAtom(&F.Atoms[ 84 ] , "C",0.640442f,-5.132553f,4.589569f); SetAtom(&F.Atoms[ 85 ] , "C",1.380905f,-4.153290f,5.334854f); SetAtom(&F.Atoms[ 86 ] , "C",0.702087f,-3.152420f,6.076965f); SetAtom(&F.Atoms[ 87 ] , "C",-0.757339f,-3.118744f,6.084885f); SetAtom(&F.Atoms[ 88 ] , "C",2.800186f,-3.994095f,5.084030f); SetAtom(&F.Atoms[ 89 ] , "C",3.450073f,-4.936371f,4.267776f); SetAtom(&F.Atoms[ 90 ] , "C",1.306732f,-5.928940f,3.596436f); SetAtom(&F.Atoms[ 91 ] , "C",0.622620f,-6.397705f,2.441010f); SetAtom(&F.Atoms[ 92 ] , "C",1.336914f,-6.618240f,1.192703f); SetAtom(&F.Atoms[ 93 ] , "C",0.644928f,-6.807007f,-0.008987f); SetAtom(&F.Atoms[ 94 ] , "C",2.748398f,-5.885086f,3.554871f); SetAtom(&F.Atoms[ 95 ] , "C",5.132614f,-3.274719f,3.574570f); SetAtom(&F.Atoms[ 96 ] , "C",5.831253f,-2.789703f,2.405655f); SetAtom(&F.Atoms[ 97 ] , "C",5.815720f,-3.527924f,1.179398f); SetAtom(&F.Atoms[ 98 ] , "C",6.233582f,-2.920303f,-0.049622f); SetAtom(&F.Atoms[ 99 ] , "C",4.591705f,-4.604752f,3.537811f); SetAtom(&F.Atoms[ 100 ] , "C",-0.536224f,6.964478f,2.354218f); SetAtom(&F.Atoms[ 101 ] , "C",0.865067f,6.926071f,2.338135f); SetAtom(&F.Atoms[ 102 ] , "C",-1.295303f,6.826416f,1.124420f); SetAtom(&F.Atoms[ 103 ] , "C",-0.615600f,6.915833f,-0.126144f); SetAtom(&F.Atoms[ 104 ] , "C",1.558655f,6.737503f,1.117233f); SetAtom(&F.Atoms[ 105 ] , "C",0.841339f,6.865524f,-0.143723f); SetAtom(&F.Atoms[ 106 ] , "C",-6.798706f,1.610200f,2.390091f); SetAtom(&F.Atoms[ 107 ] , "C",-6.335495f,2.932495f,2.383636f); SetAtom(&F.Atoms[ 108 ] , "C",-6.904129f,0.850052f,1.160095f); SetAtom(&F.Atoms[ 109 ] , "C",-6.788712f,1.533768f,-0.095245f); SetAtom(&F.Atoms[ 110 ] , "C",-5.947433f,3.545502f,1.160583f); SetAtom(&F.Atoms[ 111 ] , "C",-6.294678f,2.900757f,-0.100662f); SetAtom(&F.Atoms[ 112 ] , "C",-3.622513f,-6.001526f,2.374680f); SetAtom(&F.Atoms[ 113 ] , "C",-4.738495f,-5.151596f,2.377151f); SetAtom(&F.Atoms[ 114 ] , "C",-2.937469f,-6.324844f,1.140594f); SetAtom(&F.Atoms[ 115 ] , "C",-3.552536f,-5.997055f,-0.107941f); SetAtom(&F.Atoms[ 116 ] , "C",-5.204193f,-4.585709f,1.156250f); SetAtom(&F.Atoms[ 117 ] , "C",-4.703308f,-5.107895f,-0.102310f); SetAtom(&F.Atoms[ 118 ] , "C",4.608597f,-5.347473f,2.340088f); SetAtom(&F.Atoms[ 119 ] , "C",3.449066f,-6.142365f,2.339508f); SetAtom(&F.Atoms[ 120 ] , "C",5.127106f,-4.795273f,1.103149f); SetAtom(&F.Atoms[ 121 ] , "C",4.622421f,-5.273941f,-0.141754f); SetAtom(&F.Atoms[ 122 ] , "C",2.765274f,-6.401215f,1.122559f); SetAtom(&F.Atoms[ 123 ] , "C",3.411179f,-6.087860f,-0.141541f); SetAtom(&F.Atoms[ 124 ] , "C",6.517166f,2.688507f,2.318253f); SetAtom(&F.Atoms[ 125 ] , "C",6.914017f,1.340561f,2.308716f); SetAtom(&F.Atoms[ 126 ] , "C",6.145111f,3.358047f,1.084030f); SetAtom(&F.Atoms[ 127 ] , "C",6.432526f,2.735504f,-0.162582f); SetAtom(&F.Atoms[ 128 ] , "C",6.938019f,0.615250f,1.091568f); SetAtom(&F.Atoms[ 129 ] , "C",6.828200f,1.329849f,-0.172058f); SetAtom(&F.Atoms[ 130 ] , "C",-3.455124f,6.047440f,-2.451965f); SetAtom(&F.Atoms[ 131 ] , "C",-4.575836f,5.227280f,-2.436646f); SetAtom(&F.Atoms[ 132 ] , "C",-5.061386f,4.679428f,-1.252472f); SetAtom(&F.Atoms[ 133 ] , "C",-2.749603f,6.367615f,-1.258362f); SetAtom(&F.Atoms[ 134 ] , "C",-2.818665f,5.899277f,-3.670929f); SetAtom(&F.Atoms[ 135 ] , "C",-4.682037f,4.552826f,-3.662720f); SetAtom(&F.Atoms[ 136 ] , "C",-3.557434f,4.928391f,-4.437302f); SetAtom(&F.Atoms[ 137 ] , "C",-6.875809f,-1.431961f,-2.431549f); SetAtom(&F.Atoms[ 138 ] , "C",-6.450317f,-2.769424f,-2.431427f); SetAtom(&F.Atoms[ 139 ] , "C",-6.032990f,-3.397964f,-1.228561f); SetAtom(&F.Atoms[ 140 ] , "C",-6.935455f,-0.663528f,-1.239548f); SetAtom(&F.Atoms[ 141 ] , "C",-6.525100f,-0.876144f,-3.653915f); SetAtom(&F.Atoms[ 142 ] , "C",-5.825485f,-3.088028f,-3.681732f); SetAtom(&F.Atoms[ 143 ] , "C",-5.831146f,-1.887300f,-4.433945f); SetAtom(&F.Atoms[ 144 ] , "C",-4.470474f,-4.850616f,-2.595810f); SetAtom(&F.Atoms[ 145 ] , "C",-3.319061f,-5.720184f,-2.600555f); SetAtom(&F.Atoms[ 146 ] , "C",-2.856995f,-6.265854f,-1.341095f); SetAtom(&F.Atoms[ 147 ] , "C",-5.131378f,-4.527283f,-1.323456f); SetAtom(&F.Atoms[ 148 ] , "C",-4.724380f,-4.049622f,-3.767029f); SetAtom(&F.Atoms[ 149 ] , "C",-2.440353f,-5.731857f,-3.768417f); SetAtom(&F.Atoms[ 150 ] , "C",-2.518555f,-4.706360f,-4.785233f); SetAtom(&F.Atoms[ 151 ] , "C",-5.970993f,2.737595f,-2.592667f); SetAtom(&F.Atoms[ 152 ] , "C",-6.449493f,1.380569f,-2.590363f); SetAtom(&F.Atoms[ 153 ] , "C",-6.835892f,0.779312f,-1.326202f); SetAtom(&F.Atoms[ 154 ] , "C",-5.871643f,3.476044f,-1.321472f); SetAtom(&F.Atoms[ 155 ] , "C",-5.271408f,3.216843f,-3.755997f); SetAtom(&F.Atoms[ 156 ] , "C",-6.182053f,0.535034f,-3.755081f); SetAtom(&F.Atoms[ 157 ] , "C",-5.221054f,0.920914f,-4.770538f); SetAtom(&F.Atoms[ 158 ] , "C",-0.758102f,-6.964478f,-2.451019f); SetAtom(&F.Atoms[ 159 ] , "C",0.634155f,-6.960739f,-2.449203f); SetAtom(&F.Atoms[ 160 ] , "C",1.354126f,-6.790009f,-1.273132f); SetAtom(&F.Atoms[ 161 ] , "C",-1.506546f,-6.797913f,-1.257187f); SetAtom(&F.Atoms[ 162 ] , "C",-1.195190f,-6.487274f,-3.668304f); SetAtom(&F.Atoms[ 163 ] , "C",1.110840f,-6.501007f,-3.681808f); SetAtom(&F.Atoms[ 164 ] , "C",-0.027176f,-6.147339f,-4.447739f); SetAtom(&F.Atoms[ 165 ] , "C",3.231964f,-5.782028f,-2.632065f); SetAtom(&F.Atoms[ 166 ] , "C",4.421875f,-4.962708f,-2.636581f); SetAtom(&F.Atoms[ 167 ] , "C",5.087051f,-4.695862f,-1.381500f); SetAtom(&F.Atoms[ 168 ] , "C",2.724915f,-6.302368f,-1.353958f); SetAtom(&F.Atoms[ 169 ] , "C",2.381287f,-5.770859f,-3.790039f); SetAtom(&F.Atoms[ 170 ] , "C",4.692673f,-4.129578f,-3.808746f); SetAtom(&F.Atoms[ 171 ] , "C",3.686279f,-3.887543f,-4.820602f); SetAtom(&F.Atoms[ 172 ] , "C",6.384476f,-2.905212f,-2.490494f); SetAtom(&F.Atoms[ 173 ] , "C",6.796951f,-1.574600f,-2.483414f); SetAtom(&F.Atoms[ 174 ] , "C",6.858002f,-0.841080f,-1.309036f); SetAtom(&F.Atoms[ 175 ] , "C",6.007751f,-3.571213f,-1.293045f); SetAtom(&F.Atoms[ 176 ] , "C",5.791473f,-3.173447f,-3.706619f); SetAtom(&F.Atoms[ 177 ] , "C",6.494781f,-0.978134f,-3.711731f); SetAtom(&F.Atoms[ 178 ] , "C",5.813843f,-1.952667f,-4.479752f); SetAtom(&F.Atoms[ 179 ] , "C",6.461014f,1.259033f,-2.656418f); SetAtom(&F.Atoms[ 180 ] , "C",6.053055f,2.645905f,-2.653214f); SetAtom(&F.Atoms[ 181 ] , "C",6.019531f,3.360825f,-1.400421f); SetAtom(&F.Atoms[ 182 ] , "C",6.810013f,0.614716f,-1.381439f); SetAtom(&F.Atoms[ 183 ] , "C",6.184235f,0.455078f,-3.811142f); SetAtom(&F.Atoms[ 184 ] , "C",5.340179f,3.162537f,-3.820908f); SetAtom(&F.Atoms[ 185 ] , "C",4.794952f,2.279282f,-4.829605f); SetAtom(&F.Atoms[ 186 ] , "C",4.723389f,5.161072f,-2.496597f); SetAtom(&F.Atoms[ 187 ] , "C",3.589966f,5.971695f,-2.479370f); SetAtom(&F.Atoms[ 188 ] , "C",2.916763f,6.250793f,-1.298065f); SetAtom(&F.Atoms[ 189 ] , "C",5.244339f,4.590652f,-1.300858f); SetAtom(&F.Atoms[ 190 ] , "C",4.780960f,4.508865f,-3.714584f); SetAtom(&F.Atoms[ 191 ] , "C",2.919205f,5.865829f,-3.707947f); SetAtom(&F.Atoms[ 192 ] , "C",3.627640f,4.910385f,-4.482025f); SetAtom(&F.Atoms[ 193 ] , "C",0.787903f,6.515564f,-2.633316f); SetAtom(&F.Atoms[ 194 ] , "C",-0.655273f,6.543564f,-2.619644f); SetAtom(&F.Atoms[ 195 ] , "C",-1.343689f,6.722824f,-1.360596f); SetAtom(&F.Atoms[ 196 ] , "C",1.515320f,6.646866f,-1.359940f); SetAtom(&F.Atoms[ 197 ] , "C",1.461395f,6.007904f,-3.796570f); SetAtom(&F.Atoms[ 198 ] , "C",-1.371109f,6.021347f,-3.783722f); SetAtom(&F.Atoms[ 199 ] , "C",-0.704391f,5.234131f,-4.799683f); SetAtom(&F.Atoms[ 200 ] , "C",1.487015f,4.197433f,-5.560700f); SetAtom(&F.Atoms[ 201 ] , "C",0.756012f,5.231171f,-4.814621f); SetAtom(&F.Atoms[ 202 ] , "C",2.926880f,3.972763f,-5.329819f); SetAtom(&F.Atoms[ 203 ] , "C",3.573654f,2.674271f,-5.569458f); SetAtom(&F.Atoms[ 204 ] , "C",4.482239f,-0.138321f,-5.570816f); SetAtom(&F.Atoms[ 205 ] , "C",5.236160f,0.883300f,-4.833100f); SetAtom(&F.Atoms[ 206 ] , "C",4.712509f,-1.580353f,-5.330139f); SetAtom(&F.Atoms[ 207 ] , "C",3.683426f,-2.602142f,-5.565200f); SetAtom(&F.Atoms[ 208 ] , "C",1.292618f,-4.333145f,-5.553802f); SetAtom(&F.Atoms[ 209 ] , "C",2.497345f,-4.739594f,-4.817734f); SetAtom(&F.Atoms[ 210 ] , "C",-0.008987f,-4.988220f,-5.303207f); SetAtom(&F.Atoms[ 211 ] , "C",-1.296432f,-4.318054f,-5.533035f); SetAtom(&F.Atoms[ 212 ] , "C",-3.681946f,-2.577438f,-5.526932f); SetAtom(&F.Atoms[ 213 ] , "C",-3.698471f,-3.843857f,-4.785553f); SetAtom(&F.Atoms[ 214 ] , "C",-4.711990f,-1.546844f,-5.282089f); SetAtom(&F.Atoms[ 215 ] , "C",-4.470688f,-0.119995f,-5.515869f); SetAtom(&F.Atoms[ 216 ] , "C",-3.550995f,2.677689f,-5.525055f); SetAtom(&F.Atoms[ 217 ] , "C",-4.759735f,2.304413f,-4.776276f); SetAtom(&F.Atoms[ 218 ] , "C",-2.889908f,3.974976f,-5.290649f); SetAtom(&F.Atoms[ 219 ] , "C",-1.459198f,4.191818f,-5.537811f); SetAtom(&F.Atoms[ 220 ] , "C",1.459061f,1.973221f,-6.689713f); SetAtom(&F.Atoms[ 221 ] , "C",0.746200f,3.175430f,-6.259521f); SetAtom(&F.Atoms[ 222 ] , "C",2.828247f,1.664368f,-6.269196f); SetAtom(&F.Atoms[ 223 ] , "C",0.689056f,0.909729f,-7.219086f); SetAtom(&F.Atoms[ 224 ] , "C",2.366074f,-0.804565f,-6.693527f); SetAtom(&F.Atoms[ 225 ] , "C",3.286438f,0.249863f,-6.271927f); SetAtom(&F.Atoms[ 226 ] , "C",2.495361f,-2.204208f,-6.265991f); SetAtom(&F.Atoms[ 227 ] , "C",1.117661f,-0.401016f,-7.221893f); SetAtom(&F.Atoms[ 228 ] , "C",0.006531f,-2.522263f,-6.676620f); SetAtom(&F.Atoms[ 229 ] , "C",1.293411f,-3.075928f,-6.260117f); SetAtom(&F.Atoms[ 230 ] , "C",-1.283264f,-3.069443f,-6.239258f); SetAtom(&F.Atoms[ 231 ] , "C",0.004333f,-1.212753f,-7.212982f); SetAtom(&F.Atoms[ 232 ] , "C",-2.355179f,-0.806305f,-6.659775f); SetAtom(&F.Atoms[ 233 ] , "C",-2.483887f,-2.196000f,-6.233673f); SetAtom(&F.Atoms[ 234 ] , "C",-3.276642f,0.249542f,-6.226471f); SetAtom(&F.Atoms[ 235 ] , "C",-1.111603f,-0.404495f,-7.203903f); SetAtom(&F.Atoms[ 236 ] , "C",-1.455704f,1.965561f,-6.667694f); SetAtom(&F.Atoms[ 237 ] , "C",-2.816849f,1.658600f,-6.231796f); SetAtom(&F.Atoms[ 238 ] , "C",-0.737030f,3.172806f,-6.246613f); SetAtom(&F.Atoms[ 239 ] , "C",-0.688217f,0.906082f,-7.207108f); F.atomToDelete =1; F.atomToBondTo =2; F.angleAtom =3; } else if ( !strcmp(Name, "Acyclovir" ) ) { F.NAtoms = 27; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C",0.547000f,-1.514000f,0.152000f); SetAtom(&F.Atoms[ 1 ] , "N",-0.646000f,-2.035000f,0.111000f); SetAtom(&F.Atoms[ 2 ] , "C",-1.561000f,-1.041000f,0.039000f); SetAtom(&F.Atoms[ 3 ] , "C",-0.868000f,0.163000f,0.038000f); SetAtom(&F.Atoms[ 4 ] , "N",0.453000f,-0.154000f,0.110000f); SetAtom(&F.Atoms[ 5 ] , "C",1.571000f,0.792000f,0.136000f); SetAtom(&F.Atoms[ 6 ] , "O",2.803000f,0.072000f,0.215000f); SetAtom(&F.Atoms[ 7 ] , "C",3.849000f,1.046000f,0.237000f); SetAtom(&F.Atoms[ 8 ] , "C",5.203000f,0.337000f,0.321000f); SetAtom(&F.Atoms[ 9 ] , "O",5.367000f,-0.513000f,-0.816000f); SetAtom(&F.Atoms[ 10 ] , "N",-1.577000f,1.335000f,-0.029000f); SetAtom(&F.Atoms[ 11 ] , "C",-2.934000f,1.319000f,-0.092000f); SetAtom(&F.Atoms[ 12 ] , "N",-3.629000f,0.202000f,-0.093000f); SetAtom(&F.Atoms[ 13 ] , "C",-3.025000f,-0.996000f,-0.031000f); SetAtom(&F.Atoms[ 14 ] , "O",-3.681000f,-2.026000f,-0.033000f); SetAtom(&F.Atoms[ 15 ] , "N",-3.604000f,2.511000f,-0.157000f); SetAtom(&F.Atoms[ 16 ] , "H",1.469000f,-2.073000f,0.216000f); SetAtom(&F.Atoms[ 17 ] , "H",1.559000f,1.394000f,-0.772000f); SetAtom(&F.Atoms[ 18 ] , "H",1.475000f,1.444000f,1.005000f); SetAtom(&F.Atoms[ 19 ] , "H",3.808000f,1.644000f,-0.673000f); SetAtom(&F.Atoms[ 20 ] , "H",3.724000f,1.694000f,1.105000f); SetAtom(&F.Atoms[ 21 ] , "H",6.001000f,1.079000f,0.338000f); SetAtom(&F.Atoms[ 22 ] , "H",5.244000f,-0.262000f,1.231000f); SetAtom(&F.Atoms[ 23 ] , "H",6.230000f,-0.939000f,-0.724000f); SetAtom(&F.Atoms[ 24 ] , "H",-1.105000f,2.183000f,-0.030000f); SetAtom(&F.Atoms[ 25 ] , "H",-4.573000f,2.521000f,-0.203000f); SetAtom(&F.Atoms[ 26 ] , "H",-3.111000f,3.346000f,-0.157000f); F.atomToDelete =23; F.atomToBondTo =9; F.angleAtom =8; } else if ( !strcmp(Name, "Cidofovir" ) ) { F.NAtoms = 32; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C",2.399000f,0.658000f,-1.469000f); SetAtom(&F.Atoms[ 1 ] , "C",1.181000f,1.229000f,-1.307000f); SetAtom(&F.Atoms[ 2 ] , "N",0.709000f,1.445000f,-0.047000f); SetAtom(&F.Atoms[ 3 ] , "C",1.445000f,1.096000f,1.024000f); SetAtom(&F.Atoms[ 4 ] , "O",1.007000f,1.297000f,2.144000f); SetAtom(&F.Atoms[ 5 ] , "N",2.644000f,0.534000f,0.880000f); SetAtom(&F.Atoms[ 6 ] , "C",3.145000f,0.304000f,-0.327000f); SetAtom(&F.Atoms[ 7 ] , "N",4.384000f,-0.278000f,-0.462000f); SetAtom(&F.Atoms[ 8 ] , "C",-0.606000f,2.062000f,0.142000f); SetAtom(&F.Atoms[ 9 ] , "C",-1.677000f,0.972000f,0.203000f); SetAtom(&F.Atoms[ 10 ] , "C",-3.050000f,1.616000f,0.401000f); SetAtom(&F.Atoms[ 11 ] , "O",-3.281000f,2.573000f,-0.635000f); SetAtom(&F.Atoms[ 12 ] , "O",-1.670000f,0.229000f,-1.018000f); SetAtom(&F.Atoms[ 13 ] , "C",-2.150000f,-1.081000f,-0.708000f); SetAtom(&F.Atoms[ 14 ] , "P",-0.824000f,-2.039000f,0.096000f); SetAtom(&F.Atoms[ 15 ] , "O",-0.513000f,-1.441000f,1.414000f); SetAtom(&F.Atoms[ 16 ] , "O",-1.308000f,-3.561000f,0.298000f); SetAtom(&F.Atoms[ 17 ] , "O",0.494000f,-2.013000f,-0.829000f); SetAtom(&F.Atoms[ 18 ] , "H",2.790000f,0.473000f,-2.459000f); SetAtom(&F.Atoms[ 19 ] , "H",0.591000f,1.509000f,-2.167000f); SetAtom(&F.Atoms[ 20 ] , "H",4.894000f,-0.521000f,0.326000f); SetAtom(&F.Atoms[ 21 ] , "H",4.747000f,-0.445000f,-1.346000f); SetAtom(&F.Atoms[ 22 ] , "H",-0.611000f,2.629000f,1.073000f); SetAtom(&F.Atoms[ 23 ] , "H",-0.816000f,2.732000f,-0.692000f); SetAtom(&F.Atoms[ 24 ] , "H",-1.466000f,0.302000f,1.036000f); SetAtom(&F.Atoms[ 25 ] , "H",-3.821000f,0.846000f,0.363000f); SetAtom(&F.Atoms[ 26 ] , "H",-3.082000f,2.115000f,1.369000f); SetAtom(&F.Atoms[ 27 ] , "H",-4.155000f,2.954000f,-0.474000f); SetAtom(&F.Atoms[ 28 ] , "H",-3.003000f,-1.005000f,-0.034000f); SetAtom(&F.Atoms[ 29 ] , "H",-2.456000f,-1.583000f,-1.626000f); SetAtom(&F.Atoms[ 30 ] , "H",-0.579000f,-4.032000f,0.725000f); SetAtom(&F.Atoms[ 31 ] , "H",0.238000f,-2.372000f,-1.689000f); F.atomToDelete =27; F.atomToBondTo =11; F.angleAtom =10; } else if ( !strcmp(Name, "Famciclovir" ) ) { F.NAtoms = 42; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C",5.860000f,-2.729000f,-0.247000f); SetAtom(&F.Atoms[ 1 ] , "C",4.574000f,-2.346000f,0.439000f); SetAtom(&F.Atoms[ 2 ] , "O",4.405000f,-2.622000f,1.603000f); SetAtom(&F.Atoms[ 3 ] , "O",3.616000f,-1.699000f,-0.244000f); SetAtom(&F.Atoms[ 4 ] , "C",2.377000f,-1.331000f,0.417000f); SetAtom(&F.Atoms[ 5 ] , "C",1.464000f,-0.610000f,-0.577000f); SetAtom(&F.Atoms[ 6 ] , "C",0.158000f,-0.222000f,0.120000f); SetAtom(&F.Atoms[ 7 ] , "C",-0.755000f,0.499000f,-0.874000f); SetAtom(&F.Atoms[ 8 ] , "N",-2.006000f,0.871000f,-0.207000f); SetAtom(&F.Atoms[ 9 ] , "C",-2.252000f,2.039000f,0.452000f); SetAtom(&F.Atoms[ 10 ] , "N",-3.464000f,2.039000f,0.923000f); SetAtom(&F.Atoms[ 11 ] , "C",-4.075000f,0.872000f,0.599000f); SetAtom(&F.Atoms[ 12 ] , "C",-5.340000f,0.330000f,0.831000f); SetAtom(&F.Atoms[ 13 ] , "N",-5.612000f,-0.873000f,0.357000f); SetAtom(&F.Atoms[ 14 ] , "C",-4.709000f,-1.564000f,-0.328000f); SetAtom(&F.Atoms[ 15 ] , "N",-3.497000f,-1.092000f,-0.572000f); SetAtom(&F.Atoms[ 16 ] , "C",-3.145000f,0.110000f,-0.136000f); SetAtom(&F.Atoms[ 17 ] , "N",-5.047000f,-2.821000f,-0.802000f); SetAtom(&F.Atoms[ 18 ] , "C",2.163000f,0.650000f,-1.090000f); SetAtom(&F.Atoms[ 19 ] , "O",2.453000f,1.531000f,0.027000f); SetAtom(&F.Atoms[ 20 ] , "C",3.068000f,2.705000f,-0.187000f); SetAtom(&F.Atoms[ 21 ] , "O",3.380000f,3.028000f,-1.308000f); SetAtom(&F.Atoms[ 22 ] , "C",3.370000f,3.620000f,0.973000f); SetAtom(&F.Atoms[ 23 ] , "H",6.511000f,-3.242000f,0.461000f); SetAtom(&F.Atoms[ 24 ] , "H",5.642000f,-3.390000f,-1.085000f); SetAtom(&F.Atoms[ 25 ] , "H",6.358000f,-1.831000f,-0.613000f); SetAtom(&F.Atoms[ 26 ] , "H",1.879000f,-2.229000f,0.783000f); SetAtom(&F.Atoms[ 27 ] , "H",2.595000f,-0.669000f,1.256000f); SetAtom(&F.Atoms[ 28 ] , "H",1.245000f,-1.272000f,-1.415000f); SetAtom(&F.Atoms[ 29 ] , "H",-0.340000f,-1.120000f,0.486000f); SetAtom(&F.Atoms[ 30 ] , "H",0.376000f,0.440000f,0.958000f); SetAtom(&F.Atoms[ 31 ] , "H",-0.257000f,1.397000f,-1.240000f); SetAtom(&F.Atoms[ 32 ] , "H",-0.974000f,-0.163000f,-1.712000f); SetAtom(&F.Atoms[ 33 ] , "H",-1.544000f,2.847000f,0.565000f); SetAtom(&F.Atoms[ 34 ] , "H",-6.083000f,0.884000f,1.387000f); SetAtom(&F.Atoms[ 35 ] , "H",-5.931000f,-3.183000f,-0.632000f); SetAtom(&F.Atoms[ 36 ] , "H",-4.399000f,-3.340000f,-1.304000f); SetAtom(&F.Atoms[ 37 ] , "H",3.093000f,0.374000f,-1.586000f); SetAtom(&F.Atoms[ 38 ] , "H",1.512000f,1.164000f,-1.798000f); SetAtom(&F.Atoms[ 39 ] , "H",3.868000f,4.518000f,0.607000f); SetAtom(&F.Atoms[ 40 ] , "H",2.440000f,3.896000f,1.469000f); SetAtom(&F.Atoms[ 41 ] , "H",4.021000f,3.106000f,1.681000f); F.atomToDelete =35; F.atomToBondTo =17; F.angleAtom =14; } else if ( !strcmp(Name, "Ganciclovir" ) ) { F.NAtoms = 31; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C",-0.048000f,-1.611000f,0.045000f); SetAtom(&F.Atoms[ 1 ] , "N",-1.257000f,-2.081000f,-0.072000f); SetAtom(&F.Atoms[ 2 ] , "C",-2.137000f,-1.054000f,-0.048000f); SetAtom(&F.Atoms[ 3 ] , "C",-1.404000f,0.118000f,0.093000f); SetAtom(&F.Atoms[ 4 ] , "N",-0.095000f,-0.252000f,0.149000f); SetAtom(&F.Atoms[ 5 ] , "C",1.053000f,0.646000f,0.296000f); SetAtom(&F.Atoms[ 6 ] , "O",2.259000f,-0.122000f,0.315000f); SetAtom(&F.Atoms[ 7 ] , "C",3.336000f,0.805000f,0.459000f); SetAtom(&F.Atoms[ 8 ] , "C",4.490000f,0.133000f,1.207000f); SetAtom(&F.Atoms[ 9 ] , "O",4.937000f,-1.006000f,0.468000f); SetAtom(&F.Atoms[ 10 ] , "C",3.815000f,1.250000f,-0.924000f); SetAtom(&F.Atoms[ 11 ] , "O",4.263000f,0.111000f,-1.662000f); SetAtom(&F.Atoms[ 12 ] , "N",-2.071000f,1.315000f,0.144000f); SetAtom(&F.Atoms[ 13 ] , "C",-3.426000f,1.354000f,0.058000f); SetAtom(&F.Atoms[ 14 ] , "N",-4.158000f,0.269000f,-0.075000f); SetAtom(&F.Atoms[ 15 ] , "C",-3.597000f,-0.949000f,-0.136000f); SetAtom(&F.Atoms[ 16 ] , "O",-4.287000f,-1.948000f,-0.260000f); SetAtom(&F.Atoms[ 17 ] , "N",-4.055000f,2.569000f,0.113000f); SetAtom(&F.Atoms[ 18 ] , "H",0.853000f,-2.206000f,0.061000f); SetAtom(&F.Atoms[ 19 ] , "H",1.079000f,1.343000f,-0.541000f); SetAtom(&F.Atoms[ 20 ] , "H",0.963000f,1.202000f,1.229000f); SetAtom(&F.Atoms[ 21 ] , "H",2.995000f,1.674000f,1.022000f); SetAtom(&F.Atoms[ 22 ] , "H",5.312000f,0.840000f,1.317000f); SetAtom(&F.Atoms[ 23 ] , "H",4.149000f,-0.184000f,2.192000f); SetAtom(&F.Atoms[ 24 ] , "H",5.662000f,-1.399000f,0.973000f); SetAtom(&F.Atoms[ 25 ] , "H",2.994000f,1.729000f,-1.457000f); SetAtom(&F.Atoms[ 26 ] , "H",4.638000f,1.957000f,-0.814000f); SetAtom(&F.Atoms[ 27 ] , "H",4.555000f,0.435000f,-2.525000f); SetAtom(&F.Atoms[ 28 ] , "H",-1.571000f,2.141000f,0.242000f); SetAtom(&F.Atoms[ 29 ] , "H",-5.022000f,2.618000f,0.054000f); SetAtom(&F.Atoms[ 30 ] , "H",-3.533000f,3.381000f,0.212000f); F.atomToDelete =24; F.atomToBondTo =9; F.angleAtom =8; } else if ( !strcmp(Name, "Idoxuridine" ) ) { F.NAtoms = 28; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C",3.367000f,1.217000f,0.292000f); SetAtom(&F.Atoms[ 1 ] , "C",3.501000f,-0.136000f,1.026000f); SetAtom(&F.Atoms[ 2 ] , "C",2.605000f,-1.095000f,0.212000f); SetAtom(&F.Atoms[ 3 ] , "O",2.533000f,-0.505000f,-1.104000f); SetAtom(&F.Atoms[ 4 ] , "C",2.405000f,0.916000f,-0.878000f); SetAtom(&F.Atoms[ 5 ] , "N",1.028000f,1.251000f,-0.506000f); SetAtom(&F.Atoms[ 6 ] , "C",0.089000f,0.259000f,-0.417000f); SetAtom(&F.Atoms[ 7 ] , "C",-1.180000f,0.568000f,-0.074000f); SetAtom(&F.Atoms[ 8 ] , "C",-1.513000f,1.919000f,0.187000f); SetAtom(&F.Atoms[ 9 ] , "O",-2.651000f,2.222000f,0.499000f); SetAtom(&F.Atoms[ 10 ] , "N",-0.559000f,2.867000f,0.089000f); SetAtom(&F.Atoms[ 11 ] , "C",0.700000f,2.530000f,-0.249000f); SetAtom(&F.Atoms[ 12 ] , "O",1.549000f,3.395000f,-0.334000f); SetAtom(&F.Atoms[ 13 ] , "I",-2.637000f,-0.931000f,0.068000f); SetAtom(&F.Atoms[ 14 ] , "C",3.240000f,-2.485000f,0.139000f); SetAtom(&F.Atoms[ 15 ] , "O",2.396000f,-3.355000f,-0.617000f); SetAtom(&F.Atoms[ 16 ] , "O",4.858000f,-0.583000f,1.008000f); SetAtom(&F.Atoms[ 17 ] , "H",2.938000f,1.970000f,0.954000f); SetAtom(&F.Atoms[ 18 ] , "H",4.335000f,1.545000f,-0.084000f); SetAtom(&F.Atoms[ 19 ] , "H",3.139000f,-0.052000f,2.051000f); SetAtom(&F.Atoms[ 20 ] , "H",1.611000f,-1.154000f,0.656000f); SetAtom(&F.Atoms[ 21 ] , "H",2.704000f,1.470000f,-1.768000f); SetAtom(&F.Atoms[ 22 ] , "H",0.362000f,-0.766000f,-0.621000f); SetAtom(&F.Atoms[ 23 ] , "H",-0.779000f,3.794000f,0.267000f); SetAtom(&F.Atoms[ 24 ] , "H",4.215000f,-2.414000f,-0.344000f); SetAtom(&F.Atoms[ 25 ] , "H",3.362000f,-2.882000f,1.147000f); SetAtom(&F.Atoms[ 26 ] , "H",2.832000f,-4.218000f,-0.639000f); SetAtom(&F.Atoms[ 27 ] , "H",5.379000f,0.084000f,1.476000f); F.atomToDelete =26; F.atomToBondTo =15; F.angleAtom =14; } else if ( !strcmp(Name, "Penciclovir" ) ) { F.NAtoms = 33; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C",-0.831000f,-2.426000f,0.380000f); SetAtom(&F.Atoms[ 1 ] , "N",-2.077000f,-2.305000f,0.021000f); SetAtom(&F.Atoms[ 2 ] , "C",-2.394000f,-0.991000f,-0.046000f); SetAtom(&F.Atoms[ 3 ] , "C",-1.256000f,-0.271000f,0.297000f); SetAtom(&F.Atoms[ 4 ] , "N",-0.286000f,-1.189000f,0.562000f); SetAtom(&F.Atoms[ 5 ] , "C",1.092000f,-0.900000f,0.967000f); SetAtom(&F.Atoms[ 6 ] , "C",1.974000f,-0.773000f,-0.276000f); SetAtom(&F.Atoms[ 7 ] , "C",3.413000f,-0.472000f,0.147000f); SetAtom(&F.Atoms[ 8 ] , "C",4.295000f,-0.346000f,-1.096000f); SetAtom(&F.Atoms[ 9 ] , "O",5.639000f,-0.064000f,-0.701000f); SetAtom(&F.Atoms[ 10 ] , "C",3.449000f,0.840000f,0.934000f); SetAtom(&F.Atoms[ 11 ] , "O",2.962000f,1.902000f,0.111000f); SetAtom(&F.Atoms[ 12 ] , "N",-1.316000f,1.099000f,0.305000f); SetAtom(&F.Atoms[ 13 ] , "C",-2.469000f,1.741000f,-0.017000f); SetAtom(&F.Atoms[ 14 ] , "N",-3.568000f,1.098000f,-0.348000f); SetAtom(&F.Atoms[ 15 ] , "C",-3.609000f,-0.243000f,-0.385000f); SetAtom(&F.Atoms[ 16 ] , "O",-4.635000f,-0.828000f,-0.694000f); SetAtom(&F.Atoms[ 17 ] , "N",-2.488000f,3.110000f,0.003000f); SetAtom(&F.Atoms[ 18 ] , "H",-0.311000f,-3.362000f,0.518000f); SetAtom(&F.Atoms[ 19 ] , "H",1.117000f,0.035000f,1.528000f); SetAtom(&F.Atoms[ 20 ] , "H",1.463000f,-1.710000f,1.595000f); SetAtom(&F.Atoms[ 21 ] , "H",1.948000f,-1.708000f,-0.837000f); SetAtom(&F.Atoms[ 22 ] , "H",1.603000f,0.037000f,-0.904000f); SetAtom(&F.Atoms[ 23 ] , "H",3.784000f,-1.282000f,0.775000f); SetAtom(&F.Atoms[ 24 ] , "H",4.269000f,-1.280000f,-1.657000f); SetAtom(&F.Atoms[ 25 ] , "H",3.924000f,0.465000f,-1.724000f); SetAtom(&F.Atoms[ 26 ] , "H",6.160000f,0.008000f,-1.512000f); SetAtom(&F.Atoms[ 27 ] , "H",2.820000f,0.749000f,1.820000f); SetAtom(&F.Atoms[ 28 ] , "H",4.474000f,1.054000f,1.236000f); SetAtom(&F.Atoms[ 29 ] , "H",3.001000f,2.708000f,0.643000f); SetAtom(&F.Atoms[ 30 ] , "H",-0.529000f,1.614000f,0.543000f); SetAtom(&F.Atoms[ 31 ] , "H",-3.302000f,3.587000f,-0.224000f); SetAtom(&F.Atoms[ 32 ] , "H",-1.688000f,3.603000f,0.245000f); F.atomToDelete =29; F.atomToBondTo =11; F.angleAtom =10; } else if ( !strcmp(Name, "Valacyclovir" ) ) { F.NAtoms = 43; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C",5.303000f,2.771000f,1.124000f); SetAtom(&F.Atoms[ 1 ] , "C",4.720000f,1.669000f,0.238000f); SetAtom(&F.Atoms[ 2 ] , "C",5.419000f,1.684000f,-1.123000f); SetAtom(&F.Atoms[ 3 ] , "C",4.935000f,0.310000f,0.907000f); SetAtom(&F.Atoms[ 4 ] , "C",4.361000f,-0.777000f,0.034000f); SetAtom(&F.Atoms[ 5 ] , "O",5.051000f,-1.306000f,-0.804000f); SetAtom(&F.Atoms[ 6 ] , "O",3.082000f,-1.156000f,0.188000f); SetAtom(&F.Atoms[ 7 ] , "C",2.529000f,-2.202000f,-0.653000f); SetAtom(&F.Atoms[ 8 ] , "C",1.066000f,-2.440000f,-0.275000f); SetAtom(&F.Atoms[ 9 ] , "O",0.323000f,-1.234000f,-0.465000f); SetAtom(&F.Atoms[ 10 ] , "C",-1.028000f,-1.518000f,-0.097000f); SetAtom(&F.Atoms[ 11 ] , "N",-1.845000f,-0.315000f,-0.270000f); SetAtom(&F.Atoms[ 12 ] , "C",-1.409000f,0.899000f,-0.712000f); SetAtom(&F.Atoms[ 13 ] , "N",-2.406000f,1.736000f,-0.742000f); SetAtom(&F.Atoms[ 14 ] , "C",-3.528000f,1.106000f,-0.323000f); SetAtom(&F.Atoms[ 15 ] , "C",-3.180000f,-0.206000f,-0.025000f); SetAtom(&F.Atoms[ 16 ] , "N",-4.151000f,-1.063000f,0.426000f); SetAtom(&F.Atoms[ 17 ] , "C",-5.432000f,-0.636000f,0.578000f); SetAtom(&F.Atoms[ 18 ] , "N",-5.803000f,0.597000f,0.308000f); SetAtom(&F.Atoms[ 19 ] , "C",-4.926000f,1.508000f,-0.143000f); SetAtom(&F.Atoms[ 20 ] , "O",-5.284000f,2.649000f,-0.390000f); SetAtom(&F.Atoms[ 21 ] , "N",-6.372000f,-1.523000f,1.030000f); SetAtom(&F.Atoms[ 22 ] , "N",6.374000f,0.078000f,1.093000f); SetAtom(&F.Atoms[ 23 ] , "H",5.149000f,3.739000f,0.647000f); SetAtom(&F.Atoms[ 24 ] , "H",4.804000f,2.760000f,2.093000f); SetAtom(&F.Atoms[ 25 ] , "H",6.370000f,2.600000f,1.262000f); SetAtom(&F.Atoms[ 26 ] , "H",3.652000f,1.840000f,0.099000f); SetAtom(&F.Atoms[ 27 ] , "H",6.487000f,1.512000f,-0.984000f); SetAtom(&F.Atoms[ 28 ] , "H",5.004000f,0.898000f,-1.754000f); SetAtom(&F.Atoms[ 29 ] , "H",5.266000f,2.652000f,-1.599000f); SetAtom(&F.Atoms[ 30 ] , "H",4.437000f,0.299000f,1.876000f); SetAtom(&F.Atoms[ 31 ] , "H",2.590000f,-1.899000f,-1.698000f); SetAtom(&F.Atoms[ 32 ] , "H",3.096000f,-3.122000f,-0.508000f); SetAtom(&F.Atoms[ 33 ] , "H",0.650000f,-3.225000f,-0.906000f); SetAtom(&F.Atoms[ 34 ] , "H",1.005000f,-2.743000f,0.770000f); SetAtom(&F.Atoms[ 35 ] , "H",-1.417000f,-2.316000f,-0.730000f); SetAtom(&F.Atoms[ 36 ] , "H",-1.062000f,-1.834000f,0.946000f); SetAtom(&F.Atoms[ 37 ] , "H",-0.393000f,1.131000f,-0.994000f); SetAtom(&F.Atoms[ 38 ] , "H",-3.922000f,-1.982000f,0.637000f); SetAtom(&F.Atoms[ 39 ] , "H",-7.292000f,-1.237000f,1.146000f); SetAtom(&F.Atoms[ 40 ] , "H",-6.118000f,-2.436000f,1.235000f); SetAtom(&F.Atoms[ 41 ] , "H",6.792000f,0.097000f,0.175000f); SetAtom(&F.Atoms[ 42 ] , "H",6.734000f,0.878000f,1.592000f); F.atomToDelete =39; F.atomToBondTo =21; F.angleAtom =17; } else if ( !strcmp(Name, "Vidarabine" ) ) { F.NAtoms = 32; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C",3.517000f,-1.643000f,-0.431000f); SetAtom(&F.Atoms[ 1 ] , "N",2.220000f,-1.488000f,-0.586000f); SetAtom(&F.Atoms[ 2 ] , "C",1.640000f,-0.321000f,-0.320000f); SetAtom(&F.Atoms[ 3 ] , "C",2.433000f,0.747000f,0.131000f); SetAtom(&F.Atoms[ 4 ] , "C",3.814000f,0.532000f,0.281000f); SetAtom(&F.Atoms[ 5 ] , "N",4.303000f,-0.669000f,-0.010000f); SetAtom(&F.Atoms[ 6 ] , "N",4.645000f,1.548000f,0.721000f); SetAtom(&F.Atoms[ 7 ] , "N",1.607000f,1.803000f,0.325000f); SetAtom(&F.Atoms[ 8 ] , "C",0.387000f,1.459000f,0.029000f); SetAtom(&F.Atoms[ 9 ] , "N",0.356000f,0.157000f,-0.374000f); SetAtom(&F.Atoms[ 10 ] , "C",-0.832000f,-0.593000f,-0.790000f); SetAtom(&F.Atoms[ 11 ] , "C",-1.337000f,-1.485000f,0.366000f); SetAtom(&F.Atoms[ 12 ] , "C",-2.425000f,-0.630000f,1.052000f); SetAtom(&F.Atoms[ 13 ] , "C",-2.449000f,0.678000f,0.230000f); SetAtom(&F.Atoms[ 14 ] , "O",-1.926000f,0.309000f,-1.065000f); SetAtom(&F.Atoms[ 15 ] , "C",-3.882000f,1.197000f,0.097000f); SetAtom(&F.Atoms[ 16 ] , "O",-3.882000f,2.405000f,-0.666000f); SetAtom(&F.Atoms[ 17 ] , "O",-3.693000f,-1.286000f,0.987000f); SetAtom(&F.Atoms[ 18 ] , "O",-1.899000f,-2.696000f,-0.145000f); SetAtom(&F.Atoms[ 19 ] , "H",3.955000f,-2.605000f,-0.652000f); SetAtom(&F.Atoms[ 20 ] , "H",5.596000f,1.387000f,0.820000f); SetAtom(&F.Atoms[ 21 ] , "H",4.276000f,2.420000f,0.930000f); SetAtom(&F.Atoms[ 22 ] , "H",-0.473000f,2.109000f,0.093000f); SetAtom(&F.Atoms[ 23 ] , "H",-0.609000f,-1.199000f,-1.668000f); SetAtom(&F.Atoms[ 24 ] , "H",-0.527000f,-1.703000f,1.062000f); SetAtom(&F.Atoms[ 25 ] , "H",-2.153000f,-0.425000f,2.088000f); SetAtom(&F.Atoms[ 26 ] , "H",-1.814000f,1.431000f,0.696000f); SetAtom(&F.Atoms[ 27 ] , "H",-4.494000f,0.449000f,-0.407000f); SetAtom(&F.Atoms[ 28 ] , "H",-4.291000f,1.393000f,1.088000f); SetAtom(&F.Atoms[ 29 ] , "H",-4.802000f,2.698000f,-0.726000f); SetAtom(&F.Atoms[ 30 ] , "H",-4.330000f,-0.708000f,1.429000f); SetAtom(&F.Atoms[ 31 ] , "H",-2.195000f,-3.210000f,0.619000f); F.atomToDelete =35; F.atomToBondTo =16; F.angleAtom =15; } else if ( !strcmp(Name, "Oxirane" ) ) { F.NAtoms = 7; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C",-0.402595f,-0.615042f,0.000000f); SetAtom(&F.Atoms[ 1 ] , "C",0.284268f,0.677882f,0.000000f); SetAtom(&F.Atoms[ 2 ] , "O",1.059153f,-0.562572f,0.000000f); SetAtom(&F.Atoms[ 3 ] , "H",-0.827647f,-0.991214f,0.907601f); SetAtom(&F.Atoms[ 4 ] , "H",-0.827647f,-0.991214f,-0.907601f); SetAtom(&F.Atoms[ 5 ] , "H",0.357233f,1.241081f,0.907472f); SetAtom(&F.Atoms[ 6 ] , "H",0.357233f,1.241081f,-0.907472f); F.atomToDelete =5; F.atomToBondTo =1; F.angleAtom =2; } else if ( !strcmp(Name, "Pyrazine" ) ) { F.NAtoms = 10; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C",-1.142455f,0.693552f,-0.000001f); SetAtom(&F.Atoms[ 1 ] , "C",-1.142454f,-0.693554f,-0.000001f); SetAtom(&F.Atoms[ 2 ] , "N",0.000003f,-1.379209f,-0.000001f); SetAtom(&F.Atoms[ 3 ] , "C",1.142453f,-0.693555f,-0.000001f); SetAtom(&F.Atoms[ 4 ] , "C",1.142452f,0.693557f,-0.000002f); SetAtom(&F.Atoms[ 5 ] , "N",-0.000000f,1.379209f,-0.000001f); SetAtom(&F.Atoms[ 6 ] , "H",-2.051798f,1.255978f,0.000003f); SetAtom(&F.Atoms[ 7 ] , "H",-2.051795f,-1.255982f,-0.000001f); SetAtom(&F.Atoms[ 8 ] , "H",2.051799f,-1.255976f,0.000000f); SetAtom(&F.Atoms[ 9 ] , "H",2.051796f,1.255980f,0.000003f); F.atomToDelete =8; F.atomToBondTo =3; F.angleAtom =4; } else if ( !strcmp(Name, "Pyridazine" ) ) { F.NAtoms = 10; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "N",1.577143f,-0.662045f,0.000000f); SetAtom(&F.Atoms[ 1 ] , "C",0.430083f,-1.327300f,0.000000f); SetAtom(&F.Atoms[ 2 ] , "C",-0.808096f,-0.688291f,0.000000f); SetAtom(&F.Atoms[ 3 ] , "C",-0.808096f,0.688292f,0.000000f); SetAtom(&F.Atoms[ 4 ] , "C",0.430083f,1.327301f,0.000000f); SetAtom(&F.Atoms[ 5 ] , "N",1.577142f,0.662040f,0.000000f); SetAtom(&F.Atoms[ 6 ] , "H",-1.716804f,-1.256125f,0.000000f); SetAtom(&F.Atoms[ 7 ] , "H",0.517673f,-2.392318f,0.000000f); SetAtom(&F.Atoms[ 8 ] , "H",-1.716803f,1.256129f,0.000000f); SetAtom(&F.Atoms[ 9 ] , "H",0.517674f,2.392317f,0.000000f); F.atomToDelete =8; F.atomToBondTo =3; F.angleAtom =4; } else if ( !strcmp(Name, "Pyridine" ) ) { F.NAtoms = 11; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C",-1.148339f,-0.906766f,-0.000006f); SetAtom(&F.Atoms[ 1 ] , "C",-1.195817f,0.480609f,0.000107f); SetAtom(&F.Atoms[ 2 ] , "C",-0.000022f,1.186549f,-0.000100f); SetAtom(&F.Atoms[ 3 ] , "C",1.195829f,0.480583f,0.000005f); SetAtom(&F.Atoms[ 4 ] , "C",1.148375f,-0.906724f,0.000095f); SetAtom(&F.Atoms[ 5 ] , "N",-0.000010f,-1.584876f,-0.000112f); SetAtom(&F.Atoms[ 6 ] , "H",-2.043681f,-1.493782f,-0.000012f); SetAtom(&F.Atoms[ 7 ] , "H",-2.139723f,0.989187f,0.000072f); SetAtom(&F.Atoms[ 8 ] , "H",0.000016f,2.259781f,-0.000128f); SetAtom(&F.Atoms[ 9 ] , "H",2.139699f,0.989232f,-0.000009f); SetAtom(&F.Atoms[ 10 ] , "H",2.043678f,-1.493795f,0.000086f); F.atomToDelete =8; F.atomToBondTo =2; F.angleAtom =1; } else if ( !strcmp(Name, "Pyrimidine" ) ) { F.NAtoms = 10; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C",1.534217f,-0.000108f,-0.000080f); SetAtom(&F.Atoms[ 1 ] , "N",0.918358f,1.179416f,0.000059f); SetAtom(&F.Atoms[ 2 ] , "C",-0.415899f,1.181598f,-0.000071f); SetAtom(&F.Atoms[ 3 ] , "C",-1.141488f,0.000051f,-0.000021f); SetAtom(&F.Atoms[ 4 ] , "C",-0.416072f,-1.181541f,0.000054f); SetAtom(&F.Atoms[ 5 ] , "N",0.918237f,-1.179507f,-0.000032f); SetAtom(&F.Atoms[ 6 ] , "H",2.600696f,-0.000139f,0.000098f); SetAtom(&F.Atoms[ 7 ] , "H",-0.892809f,2.139446f,0.000040f); SetAtom(&F.Atoms[ 8 ] , "H",-2.212198f,0.000143f,-0.000021f); SetAtom(&F.Atoms[ 9 ] , "H",-0.893039f,-2.139358f,-0.000022f); F.atomToDelete =8; F.atomToBondTo =3; F.angleAtom =2; } else if ( !strcmp(Name, "Pyrrol" ) ) { F.NAtoms = 10; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C",0.351489f,1.121865f,0.000023f); SetAtom(&F.Atoms[ 1 ] , "C",-0.952283f,0.715301f,-0.000093f); SetAtom(&F.Atoms[ 2 ] , "C",-0.952387f,-0.715164f,0.000117f); SetAtom(&F.Atoms[ 3 ] , "C",0.351327f,-1.121916f,-0.000111f); SetAtom(&F.Atoms[ 4 ] , "N",1.143151f,-0.000083f,0.000048f); SetAtom(&F.Atoms[ 5 ] , "H",2.133110f,-0.000154f,0.000067f); SetAtom(&F.Atoms[ 6 ] , "H",0.772432f,2.102003f,0.000050f); SetAtom(&F.Atoms[ 7 ] , "H",-1.809385f,1.352494f,-0.000138f); SetAtom(&F.Atoms[ 8 ] , "H",-1.809580f,-1.352234f,0.000202f); SetAtom(&F.Atoms[ 9 ] , "H",0.772130f,-2.102114f,-0.000169f); F.atomToDelete =7; F.atomToBondTo =1; F.angleAtom =0; } else if ( !strcmp(Name, "Tetrahydrofuran" ) ) { F.NAtoms = 13; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C",-1.202620f,0.698233f,0.000000f); SetAtom(&F.Atoms[ 1 ] , "O",-0.000000f,1.490026f,0.000000f); SetAtom(&F.Atoms[ 2 ] , "C",1.202620f,0.698233f,0.000000f); SetAtom(&F.Atoms[ 3 ] , "C",0.773866f,-0.780206f,0.000000f); SetAtom(&F.Atoms[ 4 ] , "C",-0.773868f,-0.780203f,0.000000f); SetAtom(&F.Atoms[ 5 ] , "H",-1.773890f,0.962285f,0.878456f); SetAtom(&F.Atoms[ 6 ] , "H",-1.773890f,0.962285f,-0.878456f); SetAtom(&F.Atoms[ 7 ] , "H",1.773892f,0.962283f,-0.878456f); SetAtom(&F.Atoms[ 8 ] , "H",1.773892f,0.962283f,0.878456f); SetAtom(&F.Atoms[ 9 ] , "H",1.160534f,-1.293803f,-0.871096f); SetAtom(&F.Atoms[ 10 ] , "H",1.160534f,-1.293803f,0.871096f); SetAtom(&F.Atoms[ 11 ] , "H",-1.160534f,-1.293804f,-0.871096f); SetAtom(&F.Atoms[ 12 ] , "H",-1.160534f,-1.293804f,0.871096f); F.atomToDelete =12; F.atomToBondTo =4; F.angleAtom =0; } else if ( !strcmp(Name, "Thiophene" ) ) { F.NAtoms = 9; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C",0.545098f,-1.259389f,0.000035f); SetAtom(&F.Atoms[ 1 ] , "C",-0.688205f,-0.722497f,-0.000052f); SetAtom(&F.Atoms[ 2 ] , "C",-0.688205f,0.722496f,0.000044f); SetAtom(&F.Atoms[ 3 ] , "C",0.545097f,1.259389f,-0.000016f); SetAtom(&F.Atoms[ 4 ] , "S",1.816333f,0.000000f,-0.000006f); SetAtom(&F.Atoms[ 5 ] , "H",0.818245f,-2.290665f,0.000051f); SetAtom(&F.Atoms[ 6 ] , "H",-1.583303f,-1.310470f,-0.000074f); SetAtom(&F.Atoms[ 7 ] , "H",-1.583304f,1.310468f,0.000048f); SetAtom(&F.Atoms[ 8 ] , "H",0.818242f,2.290666f,-0.000032f); F.atomToDelete =6; F.atomToBondTo =1; F.angleAtom =2; } CenterFrag(&F); if(!strcmp(T,"UNK")) for(i=0;i<(gint)strlen(Name);i++) T[i] = toupper(Name[i]); if(strlen(Name)>0) { T[strlen(Name)] ='\0'; delete_all_spaces(T); SetResidue(&F,T); } else SetResidue(&F,"UNK"); SetMMTypes(&F); return F; } /*****************************************************************/ GabeditSrc250/src/Geometry/FragmentsSelector.h0000644000175100017510000000041513130665226021656 0ustar alloucheallouche #ifndef __GABEDIT_FRAGMENTSSELECTOR_H__ #define __GABEDIT_FRAGMENTSSELECTOR_H__ void create_window_fragments_selector(); void rafresh_fragments_selector(); void hide_fragments_selector(); void show_fragments_selector(); #endif /* __GABEDIT_FRAGMENTSSELECTOR_H__ */ GabeditSrc250/src/Geometry/GeomZmatrix.c0000644000175100017510000067653113130665226020512 0ustar alloucheallouche/* GeomZmatrix.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Common/Help.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Geometry/GeomGlobal.h" #include "../Utils/AtomsProp.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Files/ListeFiles.h" #include "../Common/Windows.h" #include "../Geometry/InterfaceGeom.h" #include "../Gaussian/Gaussian.h" #include "../Molpro/Molpro.h" #include "../Geometry/GeomConversion.h" #include "../Common/StockIcons.h" #undef Factor typedef enum { E_NUMBER=0, E_SYMBOL, E_MMTYPE, E_PDBTYPE, E_RESIDUE, E_R, E_NUMBER_R, E_ANGLE, E_NUMBER_ANGLE, E_DIHEDRAL, E_NUMBER_DIHEDRAL, E_CHARGE, E_LAYER } GabeditEntryType; static GtkWidget *FenetreTable; static gint LineSelectedV=-1; static GtkWidget *listv; static GtkWidget *EntryV[NUMBER_LIST_ZMATRIX]; static gint LineSelected=-1; static GtkWidget *list; static GtkWidget *Entry[NUMBER_LIST_ZMATRIX]; static gboolean DestroyDialog; static gint NCr; static gboolean InEdit= FALSE; static gint LineSelectedOld = -1; static gdouble labelWidth = 0.15; static gdouble entryWidth = 0.20; gchar** getListMMTypes(gint* nlist); gchar** getListPDBTypes(gchar* residueName, gint* nlist); /********************************************************************************/ static void clearList(GtkWidget* myList); static void removeFromList(GtkWidget* myList, gint ligne); static void insertToList(GtkWidget* myList, gint ligne, gchar* texts[], gint nColumns); static void appendToList(GtkWidget* myList, gchar* texts[], gint nColumns); static gint get_info_one_center(gchar* t, gchar* info[]); static void set_center(gchar* info[]); static gboolean TestVariablesCreated(gchar *NewName,gint j); static void append_list_geom(); static gint testav(gchar *t); static void append_list_variables(); /********************************************************************************/ static void DialogueAdd(); static void DialogueEdit(); static void DialogueDelete(); void create_window_save_zmat(); static void DialogueTransInVar(); static void trans_allRGeom_to_variables(); static void trans_allAngleGeom_to_variables(); static void trans_allDihedralGeom_to_variables(); static void TransConstVar(gboolean vr, gboolean va, gboolean vd); static void MultiByA0(); static void DivideByA0(); /********************************************************************************/ static void DialogueAddV(); static void DialogueEditV(); static void DialogueDeleteV(); static void DialogueTransInConst(); static void TransVarConst(); /********************************************************************************/ static void clearList(GtkWidget* myList) { GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(myList)); GtkListStore *store = GTK_LIST_STORE (model); gtk_list_store_clear(store); } /********************************************************************************/ static void removeFromList(GtkWidget* myList, gint ligne) { GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; gchar* tmp; if(ligne<0) return; tmp = g_strdup_printf("%d",ligne); model = gtk_tree_view_get_model(GTK_TREE_VIEW(myList)); store = GTK_LIST_STORE (model); if(gtk_tree_model_get_iter_from_string (model, &iter, tmp)) { gtk_list_store_remove(store, &iter); } g_free(tmp); } /********************************************************************************/ static void insertToList(GtkWidget* myList, gint ligne, gchar* texts[], gint nColumns) { GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; gint k; gint Nc = ligne; if(ligne<0) ligne = 0; model = gtk_tree_view_get_model(GTK_TREE_VIEW(myList)); store = GTK_LIST_STORE (model); gtk_list_store_insert(store, &iter, ligne); for(k=0;k4 && k<11) ed=FALSE; if(myList == list && Nc<2 && k>6 && k<11) ed=FALSE; if(myList == list && Nc<3 && k>8 && k<11) ed=FALSE; gtk_list_store_set (store, &iter, k+k, texts[k],k+k+1,ed, -1); g_free(texts[k]); } } /********************************************************************************/ static void appendToList(GtkWidget* myList, gchar* texts[], gint nColumns) { GtkTreeModel *model; GtkListStore *store; GtkTreeIter iter; gint k; gint Nc = NcentersZmat -1; model = gtk_tree_view_get_model(GTK_TREE_VIEW(myList)); store = GTK_LIST_STORE (model); gtk_list_store_append(store, &iter); for(k=0;k4 && k<11) ed=FALSE; if(myList == list && Nc<2 && k>6 && k<11) ed=FALSE; if(myList == list && Nc<3 && k>8 && k<11) ed=FALSE; gtk_list_store_set (store, &iter, k+k, texts[k],k+k+1,ed, -1); g_free(texts[k]); } } /********************************************************************************/ static void changeNameVariableInGeometry(gchar* oldName, gchar* newName) { gint i; gint k=-1; for(i=0;i0 && !strcmp(Geom[i].R,oldName)) { if(Geom[i].R) g_free(Geom[i].R); Geom[i].R = g_strdup(newName); k = 0; } if(i>1 && !strcmp(Geom[i].Angle,oldName)) { if(Geom[i].Angle) g_free(Geom[i].Angle); Geom[i].Angle = g_strdup(newName); k = 0; } if(i>2 && !strcmp(Geom[i].Dihedral,oldName)) { if(Geom[i].Dihedral) g_free(Geom[i].Dihedral); Geom[i].Dihedral = g_strdup(newName); k=0; } } if(k==0) { clearList(list); append_list_geom(); } } /********************************************************************************/ static void editedVariable (GtkCellRendererText *cell, gchar *path_string, gchar *new_text, gpointer data) { GtkTreeModel *model = GTK_TREE_MODEL (data); GtkTreeIter iter; GtkTreePath *path = NULL; gint numCol = 0; gint Nc = -1; numCol = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cell),"NumColumn")); gchar* oldName = NULL; if(numCol==0) { Nc = -1; if(!variable_name_valid(new_text)) { show_forbidden_characters(); return; } if ( !strcmp(new_text, "")) return; Nc = atoi(path_string); if(TestVariablesCreated(new_text,Nc) ) { MessageGeom(_("Sorry a other variable have any Name !\n"),_("Error"),TRUE); return; } } if(numCol==1) { if(!test(new_text)) { gchar* message=g_strdup_printf(_("Sorry %s is not a number \n"),new_text); MessageGeom(message,_("Error"),TRUE); g_free(message); return; } if ( !strcmp(new_text, "")) return; Nc = atoi(path_string); if(test(new_text) && !testpointeE(new_text) ) new_text=g_strdup_printf("%s.0",new_text); } if(Nc<0)return; if(numCol==0) { oldName = Variables[Nc].Name; Variables[Nc].Name=g_strdup(new_text); } if(numCol==1) { if(Variables[Nc].Value) g_free(Variables[Nc].Value); Variables[Nc].Value=g_strdup(new_text); } /* printf("%s\n",path_string);*/ path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (model, &iter, path); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 2*numCol, new_text, -1); gtk_tree_path_free (path); if(numCol==0 && oldName) { changeNameVariableInGeometry(oldName, new_text); g_free(oldName); } if(numCol==1 && GeomDrawingArea != NULL) rafresh_drawing(); } /*****************************************************************************/ static gchar* get_distance_zmatrix(gint ai, gint aj) { gdouble cosph,sinph,costh,sinth,coskh,sinkh; gdouble cosa,sina,cosd,sind; gdouble dist,angle,dihed; gdouble xpd,ypd,zpd,xqd,yqd,zqd; gdouble xa,ya,za,xb,yb,zb; gdouble rbc,xyb,yza,temp; gdouble xpa,ypa,zqa; gdouble xd,yd,zd; gboolean flag; gint i, na, nb, nc; gdouble *X = NULL; gdouble *Y = NULL; gdouble *Z = NULL; gint amax = aj; if (NcentersZmat <= 1) return NULL; if (ai < 0) return NULL; if (aj < 0) return NULL; if (ai > aj) amax = ai; if (amax > NcentersZmat-1) return NULL; X = g_malloc(NcentersZmat*sizeof(gdouble)); Y = g_malloc(NcentersZmat*sizeof(gdouble)); Z = g_malloc(NcentersZmat*sizeof(gdouble)); for (i = 0; i <(gint)NcentersZmat; i++) X[i] = Y[i] = Z[i] = 0; /* Atom #1 */ X[0] = 0; Y[0] = 0; Z[0] = 0; /* Atom #2 */ if(!test(Geom[1].R)) X[1] = get_value_variableZmat(Geom[1].R); else X[1] = atof(Geom[1].R); Y[1] = 0; Z[1] = 0; if (NcentersZmat == 2 && amax<2) { gdouble r = X[1]; g_free(X); g_free(Y); g_free(Z); return g_strdup_printf("%f",r); } /* Atom #3 */ if(!test(Geom[2].R)) dist = get_value_variableZmat(Geom[2].R); else dist = atof(Geom[2].R); if(!test(Geom[2].Angle)) angle = get_value_variableZmat(Geom[2].Angle); else angle = atof(Geom[2].Angle); angle *= DEG_TO_RAD; cosa = cos(angle); sina = sin(angle); if( atoi (Geom[2].NAngle) == 2 ) X[2] = X[0] + cosa*dist; else X[2] = X[1] - cosa*dist; Y[2] = sina*dist; Z[2] = 0.0; if(amax<3) { gdouble r = (X[ai]-X[aj])*(X[ai]-X[aj])+(Y[ai]-Y[aj])*(Y[ai]-Y[aj])+(Z[ai]-Z[aj])*(Z[ai]-Z[aj]); r = sqrt(r); g_free(X); g_free(Y); g_free(Z); return g_strdup_printf("%f",r); } for (i = 3; i <(gint)NcentersZmat; i++) { if(i>amax)break; if(!test(Geom[i].R)) dist = get_value_variableZmat(Geom[i].R); else dist = atof(Geom[i].R); if(!test(Geom[i].Angle)) angle = get_value_variableZmat(Geom[i].Angle); else angle = atof(Geom[i].Angle) ; if(!test(Geom[i].Dihedral)) dihed = get_value_variableZmat(Geom[i].Dihedral); else dihed = atof(Geom[i].Dihedral) ; angle *= DEG_TO_RAD; dihed *= DEG_TO_RAD; na = atoi(Geom[i].NR)-1; nb = atoi(Geom[i].NAngle)-1; nc = atoi(Geom[i].NDihedral)-1; xb = X[nb] - X[na]; yb = Y[nb] - Y[na]; zb = Z[nb] - Z[na]; rbc = xb*xb + yb*yb + zb*zb; if( rbc < 0.0001 ) { g_free(X); g_free(Y); g_free(Z); printf("Warning : rbc < 0.0001 in get_distance_zmatrix\n"); return NULL; } rbc = 1.0/sqrt(rbc); cosa = cos(angle); sina = sin(angle); if( fabs(cosa) >= 0.999999 ) { /* Colinear */ temp = dist*rbc*cosa; X[i] = X[na] + temp*xb; Y[i] = Y[na] + temp*yb; Z[i] = Z[na] + temp*zb; } else { xa = X[nc] - X[na]; ya = Y[nc] - Y[na]; za = Z[nc] - Z[na]; sind = -sin(dihed); cosd = cos(dihed); xd = dist*cosa; yd = dist*sina*cosd; zd = dist*sina*sind; xyb = sqrt(xb*xb + yb*yb); if( xyb < 0.1 ) { /* Rotate about y-axis! */ temp = za; za = -xa; xa = temp; temp = zb; zb = -xb; xb = temp; xyb = sqrt(xb*xb + yb*yb); flag = TRUE; } else flag = FALSE; costh = xb/xyb; sinth = yb/xyb; xpa = costh*xa + sinth*ya; ypa = costh*ya - sinth*xa; sinph = zb*rbc; cosph = sqrt(1.0 - sinph*sinph); zqa = cosph*za - sinph*xpa; yza = sqrt(ypa*ypa + zqa*zqa); if( yza > 1.0E-10 ) { coskh = ypa/yza; sinkh = zqa/yza; ypd = coskh*yd - sinkh*zd; zpd = coskh*zd + sinkh*yd; } else { /* coskh = 1.0; */ /* sinkh = 0.0; */ ypd = yd; zpd = zd; } xpd = cosph*xd - sinph*zpd; zqd = cosph*zpd + sinph*xd; xqd = costh*xpd - sinth*ypd; yqd = costh*ypd + sinth*xpd; if( flag ) { /* Rotate about y-axis! */ X[i] = X[na] - zqd; Y[i] = Y[na] + yqd; Z[i] = Z[na] + xqd; } else { X[i] =X[na] + xqd; Y[i] =Y[na] + yqd; Z[i] =Z[na] + zqd; } } } { gdouble r = (X[ai]-X[aj])*(X[ai]-X[aj])+(Y[ai]-Y[aj])*(Y[ai]-Y[aj])+(Z[ai]-Z[aj])*(Z[ai]-Z[aj]); r = sqrt(r); g_free(X); g_free(Y); g_free(Z); return g_strdup_printf("%f",r); } } /*****************************************************************************/ static gchar* get_angle_zmatrix(gint ai, gint aj, gint ak) { gdouble cosph,sinph,costh,sinth,coskh,sinkh; gdouble cosa,sina,cosd,sind; gdouble dist,angle,dihed; gdouble xpd,ypd,zpd,xqd,yqd,zqd; gdouble xa,ya,za,xb,yb,zb; gdouble rbc,xyb,yza,temp; gdouble xpa,ypa,zqa; gdouble xd,yd,zd; gboolean flag; gint i, na, nb, nc; gdouble *X = NULL; gdouble *Y = NULL; gdouble *Z = NULL; gint amax = ak; gchar* t = NULL; if (NcentersZmat <= 1) return NULL; if (ai < 0) return NULL; if (aj < 0) return NULL; if (ak < 0) return NULL; if (ai > amax) amax = ai; if (aj > amax) amax = aj; if (amax > NcentersZmat-1) return NULL; X = g_malloc(NcentersZmat*sizeof(gdouble)); Y = g_malloc(NcentersZmat*sizeof(gdouble)); Z = g_malloc(NcentersZmat*sizeof(gdouble)); for (i = 0; i <(gint)NcentersZmat; i++) X[i] = Y[i] = Z[i] = 0; /* Atom #1 */ X[0] = 0; Y[0] = 0; Z[0] = 0; /* Atom #2 */ if(!test(Geom[1].R)) X[1] = get_value_variableZmat(Geom[1].R); else X[1] = atof(Geom[1].R); Y[1] = 0; Z[1] = 0; /* Atom #3 */ if(!test(Geom[2].R)) dist = get_value_variableZmat(Geom[2].R); else dist = atof(Geom[2].R); if(!test(Geom[2].Angle)) angle = get_value_variableZmat(Geom[2].Angle); else angle = atof(Geom[2].Angle); angle *= DEG_TO_RAD; cosa = cos(angle); sina = sin(angle); if( atoi (Geom[2].NAngle) == 2 ) X[2] = X[0] + cosa*dist; else X[2] = X[1] - cosa*dist; Y[2] = sina*dist; Z[2] = 0.0; if(amax<3) { Point A; Point B; A.C[0]=X[ai]-X[aj]; A.C[1]=Y[ai]-Y[aj]; A.C[2]=Z[ai]-Z[aj]; B.C[0]=X[ak]-X[aj]; B.C[1]=Y[ak]-Y[aj]; B.C[2]=Z[ak]-Z[aj]; g_free(X); g_free(Y); g_free(Z); t = get_angle_vectors(A,B); if(t) { gchar* a = g_strdup_printf("%0.6lf",atof(t)); g_free(t); return a; } return NULL; } for (i = 3; i <(gint)NcentersZmat; i++) { if(i>amax)break; if(!test(Geom[i].R)) dist = get_value_variableZmat(Geom[i].R); else dist = atof(Geom[i].R); if(!test(Geom[i].Angle)) angle = get_value_variableZmat(Geom[i].Angle); else angle = atof(Geom[i].Angle) ; if(!test(Geom[i].Dihedral)) dihed = get_value_variableZmat(Geom[i].Dihedral); else dihed = atof(Geom[i].Dihedral) ; angle *= DEG_TO_RAD; dihed *= DEG_TO_RAD; na = atoi(Geom[i].NR)-1; nb = atoi(Geom[i].NAngle)-1; nc = atoi(Geom[i].NDihedral)-1; xb = X[nb] - X[na]; yb = Y[nb] - Y[na]; zb = Z[nb] - Z[na]; rbc = xb*xb + yb*yb + zb*zb; if( rbc < 0.0001 ) { g_free(X); g_free(Y); g_free(Z); printf("Warning : rbc < 0.0001 in get_distance_zmatrix\n"); return NULL; } rbc = 1.0/sqrt(rbc); cosa = cos(angle); sina = sin(angle); if( fabs(cosa) >= 0.999999 ) { /* Colinear */ temp = dist*rbc*cosa; X[i] = X[na] + temp*xb; Y[i] = Y[na] + temp*yb; Z[i] = Z[na] + temp*zb; } else { xa = X[nc] - X[na]; ya = Y[nc] - Y[na]; za = Z[nc] - Z[na]; sind = -sin(dihed); cosd = cos(dihed); xd = dist*cosa; yd = dist*sina*cosd; zd = dist*sina*sind; xyb = sqrt(xb*xb + yb*yb); if( xyb < 0.1 ) { /* Rotate about y-axis! */ temp = za; za = -xa; xa = temp; temp = zb; zb = -xb; xb = temp; xyb = sqrt(xb*xb + yb*yb); flag = TRUE; } else flag = FALSE; costh = xb/xyb; sinth = yb/xyb; xpa = costh*xa + sinth*ya; ypa = costh*ya - sinth*xa; sinph = zb*rbc; cosph = sqrt(1.0 - sinph*sinph); zqa = cosph*za - sinph*xpa; yza = sqrt(ypa*ypa + zqa*zqa); if( yza > 1.0E-10 ) { coskh = ypa/yza; sinkh = zqa/yza; ypd = coskh*yd - sinkh*zd; zpd = coskh*zd + sinkh*yd; } else { /* coskh = 1.0; */ /* sinkh = 0.0; */ ypd = yd; zpd = zd; } xpd = cosph*xd - sinph*zpd; zqd = cosph*zpd + sinph*xd; xqd = costh*xpd - sinth*ypd; yqd = costh*ypd + sinth*xpd; if( flag ) { /* Rotate about y-axis! */ X[i] = X[na] - zqd; Y[i] = Y[na] + yqd; Z[i] = Z[na] + xqd; } else { X[i] =X[na] + xqd; Y[i] =Y[na] + yqd; Z[i] =Z[na] + zqd; } } } { Point A; Point B; A.C[0]=X[ai]-X[aj]; A.C[1]=Y[ai]-Y[aj]; A.C[2]=Z[ai]-Z[aj]; B.C[0]=X[ak]-X[aj]; B.C[1]=Y[ak]-Y[aj]; B.C[2]=Z[ak]-Z[aj]; g_free(X); g_free(Y); g_free(Z); t = get_angle_vectors(A,B); if(t) { gchar* a = g_strdup_printf("%0.6lf",atof(t)); g_free(t); return a; } return NULL; } } /*****************************************************************************/ static gchar* get_dihedral_zmatrix(gint ai, gint aj, gint ak, gint al) { gdouble cosph,sinph,costh,sinth,coskh,sinkh; gdouble cosa,sina,cosd,sind; gdouble dist,angle,dihed; gdouble xpd,ypd,zpd,xqd,yqd,zqd; gdouble xa,ya,za,xb,yb,zb; gdouble rbc,xyb,yza,temp; gdouble xpa,ypa,zqa; gdouble xd,yd,zd; gboolean flag; gint i, na, nb, nc; gdouble *X = NULL; gdouble *Y = NULL; gdouble *Z = NULL; gint amax = al; if (NcentersZmat <= 1) return NULL; if (ai < 0) return NULL; if (aj < 0) return NULL; if (ak < 0) return NULL; if (al < 0) return NULL; if (ai > amax) amax = ai; if (aj > amax) amax = aj; if (ak > amax) amax = ak; if (amax > NcentersZmat-1) return NULL; X = g_malloc(NcentersZmat*sizeof(gdouble)); Y = g_malloc(NcentersZmat*sizeof(gdouble)); Z = g_malloc(NcentersZmat*sizeof(gdouble)); for (i = 0; i <(gint)NcentersZmat; i++) X[i] = Y[i] = Z[i] = 0; /* Atom #1 */ X[0] = 0; Y[0] = 0; Z[0] = 0; /* Atom #2 */ if(!test(Geom[1].R)) X[1] = get_value_variableZmat(Geom[1].R); else X[1] = atof(Geom[1].R); Y[1] = 0; Z[1] = 0; /* Atom #3 */ if(!test(Geom[2].R)) dist = get_value_variableZmat(Geom[2].R); else dist = atof(Geom[2].R); if(!test(Geom[2].Angle)) angle = get_value_variableZmat(Geom[2].Angle); else angle = atof(Geom[2].Angle); angle *= DEG_TO_RAD; cosa = cos(angle); sina = sin(angle); if( atoi (Geom[2].NAngle) == 2 ) X[2] = X[0] + cosa*dist; else X[2] = X[1] - cosa*dist; Y[2] = sina*dist; Z[2] = 0.0; for (i = 3; i <(gint)NcentersZmat; i++) { if(i>amax)break; if(!test(Geom[i].R)) dist = get_value_variableZmat(Geom[i].R); else dist = atof(Geom[i].R); if(!test(Geom[i].Angle)) angle = get_value_variableZmat(Geom[i].Angle); else angle = atof(Geom[i].Angle) ; if(!test(Geom[i].Dihedral)) dihed = get_value_variableZmat(Geom[i].Dihedral); else dihed = atof(Geom[i].Dihedral) ; angle *= DEG_TO_RAD; dihed *= DEG_TO_RAD; na = atoi(Geom[i].NR)-1; nb = atoi(Geom[i].NAngle)-1; nc = atoi(Geom[i].NDihedral)-1; xb = X[nb] - X[na]; yb = Y[nb] - Y[na]; zb = Z[nb] - Z[na]; rbc = xb*xb + yb*yb + zb*zb; if( rbc < 0.0001 ) { g_free(X); g_free(Y); g_free(Z); printf("Warning : rbc < 0.0001 in get_distance_zmatrix\n"); return NULL; } rbc = 1.0/sqrt(rbc); cosa = cos(angle); sina = sin(angle); if( fabs(cosa) >= 0.999999 ) { /* Colinear */ temp = dist*rbc*cosa; X[i] = X[na] + temp*xb; Y[i] = Y[na] + temp*yb; Z[i] = Z[na] + temp*zb; } else { xa = X[nc] - X[na]; ya = Y[nc] - Y[na]; za = Z[nc] - Z[na]; sind = -sin(dihed); cosd = cos(dihed); xd = dist*cosa; yd = dist*sina*cosd; zd = dist*sina*sind; xyb = sqrt(xb*xb + yb*yb); if( xyb < 0.1 ) { /* Rotate about y-axis! */ temp = za; za = -xa; xa = temp; temp = zb; zb = -xb; xb = temp; xyb = sqrt(xb*xb + yb*yb); flag = TRUE; } else flag = FALSE; costh = xb/xyb; sinth = yb/xyb; xpa = costh*xa + sinth*ya; ypa = costh*ya - sinth*xa; sinph = zb*rbc; cosph = sqrt(1.0 - sinph*sinph); zqa = cosph*za - sinph*xpa; yza = sqrt(ypa*ypa + zqa*zqa); if( yza > 1.0E-10 ) { coskh = ypa/yza; sinkh = zqa/yza; ypd = coskh*yd - sinkh*zd; zpd = coskh*zd + sinkh*yd; } else { /* coskh = 1.0; */ /* sinkh = 0.0; */ ypd = yd; zpd = zd; } xpd = cosph*xd - sinph*zpd; zqd = cosph*zpd + sinph*xd; xqd = costh*xpd - sinth*ypd; yqd = costh*ypd + sinth*xpd; if( flag ) { /* Rotate about y-axis! */ X[i] = X[na] - zqd; Y[i] = Y[na] + yqd; Z[i] = Z[na] + xqd; } else { X[i] =X[na] + xqd; Y[i] =Y[na] + yqd; Z[i] =Z[na] + zqd; } } } { Point A; Point B; Point V1; Point V2; Point W1; gdouble angle; gdouble dihsgn; V1.C[0]=X[ai]-X[aj]; V1.C[1]=Y[ai]-Y[aj]; V1.C[2]=Z[ai]-Z[aj]; V2.C[0]=X[ak]-X[aj]; V2.C[1]=Y[ak]-Y[aj]; V2.C[2]=Z[ak]-Z[aj]; A = get_produit_vectoriel(V1,V2); V1.C[0]=X[al]-X[ak]; V1.C[1]=Y[al]-Y[ak]; V1.C[2]=Z[al]-Z[ak]; V2.C[0]=X[aj]-X[ak]; V2.C[1]=Y[aj]-Y[ak]; V2.C[2]=Z[aj]-Z[ak]; B = get_produit_vectoriel(V2,V1); angle = atof(get_angle_vectors(A,B)); W1 = get_produit_vectoriel(A,B); if (get_module(W1)<1e-5 ) dihsgn = 1.0e0; else { dihsgn = get_scalaire(W1,V2); if (dihsgn>0) dihsgn = -1.0e0; else dihsgn = 1.0e0; } angle *=dihsgn; return g_strdup_printf("%f",angle); } } /********************************************************************************/ static void set_text_column (GtkTreeModel *model , gchar *path_string, gchar *text, gint n) { GtkTreeIter iter; GtkTreePath *path = NULL; path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (model, &iter, path); gtk_list_store_set (GTK_LIST_STORE (model), &iter, n, text, -1); gtk_tree_path_free (path); } /********************************************************************************/ static gboolean reset_r_value(gint Nc, gchar* val) { gint numvar = testav(Geom[Nc].R); if(numvar>=0){ if(Variables[numvar].Value) g_free(Variables[numvar].Value); Variables[numvar].Value = val; clearList(listv); append_list_variables(); return FALSE; } else { if(Geom[Nc].R) g_free(Geom[Nc].R); Geom[Nc].R = val; return TRUE; } } /********************************************************************************/ static gboolean reset_angle_value(gint Nc, gchar* val) { gint numvar = testav(Geom[Nc].Angle); if(numvar>=0){ if(Variables[numvar].Value) g_free(Variables[numvar].Value); Variables[numvar].Value = val; clearList(listv); append_list_variables(); return FALSE; } else { if(Geom[Nc].Angle) g_free(Geom[Nc].Angle); Geom[Nc].Angle = val; return TRUE; } } /********************************************************************************/ static gboolean reset_dihedral_value(gint Nc, gchar* val) { gint numvar = testav(Geom[Nc].Dihedral); if(numvar>=0){ if(Variables[numvar].Value) g_free(Variables[numvar].Value); Variables[numvar].Value = val; clearList(listv); append_list_variables(); return FALSE; } else { if(Geom[Nc].Dihedral) g_free(Geom[Nc].Dihedral); Geom[Nc].Dihedral = val; return TRUE; } } /********************************************************************************/ static void selectedCell (GtkCellRenderer *renderer, GtkCellEditable *editable, gchar *path_string, gpointer user_data) { gint numCol = 0; numCol = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(renderer),"NumColumn")); gint Nc = -1; Nc = atoi(path_string); if(Nc<0) return; if((numCol==E_R || numCol==E_NUMBER_R) && Nc>0) { NSA[0] = Nc+1; NSA[1] = atoi(Geom[Nc].NR); NSA[2] = -1; NSA[3] = -1; if(GeomDrawingArea != NULL) rafresh_drawing(); } else if((numCol==E_ANGLE || numCol==E_NUMBER_ANGLE) && Nc>1) { NSA[0] = Nc+1; NSA[1] = atoi(Geom[Nc].NR); NSA[2] = atoi(Geom[Nc].NAngle); NSA[3] = -1; if(GeomDrawingArea != NULL) rafresh_drawing(); } else if((numCol==E_DIHEDRAL || numCol==E_NUMBER_DIHEDRAL) && Nc>2) { NSA[0] = Nc+1; NSA[1] = atoi(Geom[Nc].NR); NSA[2] = atoi(Geom[Nc].NAngle); NSA[3] = atoi(Geom[Nc].NDihedral); if(GeomDrawingArea != NULL) rafresh_drawing(); } } /********************************************************************************/ static void editedGeom (GtkCellRendererText *cell, gchar *path_string, gchar *new_text, gpointer data) { GtkTreeModel *model = GTK_TREE_MODEL (data); GtkTreeIter iter; GtkTreePath *path = NULL; gint numCol = 0; gint Nc = -1; numCol = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cell),"NumColumn")); if(numCol==E_NUMBER) return; if(!new_text) return; /* symbol */ if(numCol==E_SYMBOL) { gint nc = strlen(new_text); if(nc<1)return; new_text[0]=toupper(new_text[0]); if(nc>1)new_text[1]=tolower(new_text[1]); if(!test_atom_define(new_text)) { gchar* message=g_strdup_printf(_("Sorry %s is not a symbol for an atom \n"),new_text); MessageGeom(message,_("Error"),TRUE); g_free(message); return; } Nc = atoi(path_string); if(Geom[Nc].Symb) g_free(Geom[Nc].Symb); Geom[Nc].Symb = g_strdup(new_text); path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (model, &iter, path); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 2*numCol, new_text, -1); gtk_tree_path_free (path); if(GeomDrawingArea != NULL) rafresh_drawing(); return; } /* MM Type */ if(numCol==E_MMTYPE) { gint nc = strlen(new_text); if(nc<1)return; Nc = atoi(path_string); if(Geom[Nc].mmType) g_free(Geom[Nc].mmType); Geom[Nc].mmType = g_strdup(new_text); path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (model, &iter, path); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 2*numCol, new_text, -1); gtk_tree_path_free (path); if(GeomDrawingArea != NULL) rafresh_drawing(); return; } /* PDB Type */ if(numCol==E_PDBTYPE) { gint nc = strlen(new_text); if(nc<1)return; Nc = atoi(path_string); if(Geom[Nc].pdbType) g_free(Geom[Nc].pdbType); Geom[Nc].pdbType = g_strdup(new_text); path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (model, &iter, path); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 2*numCol, new_text, -1); gtk_tree_path_free (path); if(GeomDrawingArea != NULL) rafresh_drawing(); return; } /* Residue Name */ if(numCol==E_RESIDUE) { gint nc = strlen(new_text); if(nc<1)return; Nc = atoi(path_string); if(strcmp(Geom[Nc].Residue,new_text)) { if(Geom[Nc].Residue) g_free(Geom[Nc].Residue); Geom[Nc].Residue = g_strdup(new_text); gint k; Geom[Nc].ResidueNumber = -1; for(k=0;k<(gint)NcentersZmat;k++) { if(Nc != k && !strcmp(Geom[Nc].Residue,Geom[k].Residue)) { Geom[Nc].ResidueNumber = Geom[k].ResidueNumber; break; } } if(Geom[Nc].ResidueNumber == -1) { for(k=0;k<(gint)NcentersZmat;k++) { if(Geom[Nc].ResidueNumber=Nc+1) { gchar* message=g_strdup_printf(_("Sorry\n %s \nis not an integer between 1 and %d"),new_text,Nc); MessageGeom(message,_("Error"),TRUE); g_free(message); return; } if( numCol==E_NUMBER_R && N == atoi(Geom[Nc].NR)) return; if( numCol==E_NUMBER_ANGLE && N == atoi(Geom[Nc].NAngle)) return; if( numCol==E_NUMBER_DIHEDRAL && N == atoi(Geom[Nc].NDihedral)) return; if( numCol==E_NUMBER_R) NR = N; if( numCol==E_NUMBER_R && ((Nc>1 && N==atoi(Geom[Nc].NAngle)) || (Nc>2 && N==atoi(Geom[Nc].NDihedral)))) { gchar* message=NULL; if((Nc>1 && N==atoi(Geom[Nc].NAngle))) { NA = atoi(Geom[Nc].NR); message=g_strdup_printf( _( "Because a multiple references to a center on the same card\n" "I set NA to %d\n" ) ,NA ); } if(Nc>2 && N==atoi(Geom[Nc].NDihedral)) { ND = atoi(Geom[Nc].NR); message=g_strdup_printf( _( "Because a multiple references to a center on the same card\n" "I set ND to %d\n" ) ,ND ); } MessageGeom(message,_("Error"),TRUE); g_free(message); } if( numCol==E_NUMBER_ANGLE) NA = N; if( numCol==E_NUMBER_ANGLE && ((Nc>0 && N==atoi(Geom[Nc].NR)) || (Nc>2 && N==atoi(Geom[Nc].NDihedral)))) { gchar* message= NULL; if(Nc>0 && N==atoi(Geom[Nc].NR)) { NR = atoi(Geom[Nc].NAngle); message=g_strdup_printf( _( "Because a multiple references to a center on the same card\n" "I set NR to %d\n" ) ,NR ); } if(Nc>2 && N==atoi(Geom[Nc].NDihedral)) { ND = atoi(Geom[Nc].NAngle); message=g_strdup_printf( "Because a multiple references to a center on the same card\n" "I set ND to %d\n",ND ); } MessageGeom(message,_("Error"),TRUE); g_free(message); } if( numCol==E_NUMBER_DIHEDRAL) ND = N; if( numCol==E_NUMBER_DIHEDRAL && ( (Nc>1 && N==atoi(Geom[Nc].NAngle)) || (Nc>0 && N==atoi(Geom[Nc].NR)))) { gchar* message=NULL; if(Nc>1 && N==atoi(Geom[Nc].NAngle)) { NA = atoi(Geom[Nc].NDihedral); message=g_strdup_printf( _( "Because a multiple references to a center on the same card\n" "I set NA to %d\n" ) ,NA ); } if(Nc>0 && N==atoi(Geom[Nc].NR)) { NR = atoi(Geom[Nc].NDihedral); message=g_strdup_printf( _( "Because a multiple references to a center on the same card\n" "I set NR to %d\n" ) ,NR ); } MessageGeom(message,_("Error"),TRUE); g_free(message); } if( numCol==E_NUMBER_R) { gchar* dist = NULL; gchar* angle = NULL; gchar* dih = NULL; dist = get_distance_zmatrix(NR-1, Nc); if(NA>0) angle = get_angle_zmatrix(NA-1,NR-1, Nc); else if(Nc>=2) angle = get_angle_zmatrix(atoi(Geom[Nc].NAngle)-1,NR-1, Nc); if(ND>0) dih = get_dihedral_zmatrix(ND-1,atoi(Geom[Nc].NAngle)-1,NR-1,Nc); else if(Nc>=3) dih = get_dihedral_zmatrix(atoi(Geom[Nc].NDihedral)-1,atoi(Geom[Nc].NAngle)-1, NR-1, Nc); if(dist) { if(reset_r_value(Nc, dist)) set_text_column (model , path_string, dist,2*(numCol-1)); } if(angle) { if(reset_angle_value(Nc, angle)) set_text_column (model , path_string, angle,2*(numCol+1)); } if(dih) { if(reset_dihedral_value(Nc, dih)) set_text_column (model , path_string, dih,2*(numCol+3)); } if(Geom[Nc].NR) g_free(Geom[Nc].NR); Geom[Nc].NR = g_strdup(new_text); if(NA>0) { if(Geom[Nc].NAngle) g_free(Geom[Nc].NAngle); Geom[Nc].NAngle = g_strdup_printf("%d",NA); set_text_column (model , path_string, Geom[Nc].NAngle,2*(numCol+2)); } if(ND>0) { if(Geom[Nc].NDihedral) g_free(Geom[Nc].NDihedral); Geom[Nc].NDihedral = g_strdup_printf("%d",ND); set_text_column (model , path_string, Geom[Nc].NDihedral,2*(numCol+4)); } } if( numCol==E_NUMBER_ANGLE) { gchar* dist = NULL; gchar* angle = NULL; gchar* dih = NULL; if(NR>0) dist = get_distance_zmatrix(NR-1, Nc); if(NR>0) angle = get_angle_zmatrix (NA-1, NR-1, Nc); else angle = get_angle_zmatrix (NA-1, atoi(Geom[Nc].NR)-1, Nc); if(ND>0) dih = get_dihedral_zmatrix(ND-1,NA-1,atoi(Geom[Nc].NR)-1, Nc); else if(Nc>=3) { if(NR>0) dih = get_dihedral_zmatrix(atoi(Geom[Nc].NDihedral)-1, NA-1,NR-1, Nc); else dih = get_dihedral_zmatrix(atoi(Geom[Nc].NDihedral)-1, NA-1,atoi(Geom[Nc].NR)-1, Nc); } if(dist) { if(reset_r_value(Nc, dist)) set_text_column (model , path_string, dist,2*(numCol-3)); } if(angle) { if(reset_angle_value(Nc, angle)) set_text_column (model , path_string, angle,2*(numCol-1)); } if(dih) { if(reset_dihedral_value(Nc, dih)) set_text_column (model , path_string, dih,2*(numCol+1)); } if(Geom[Nc].NAngle) g_free(Geom[Nc].NAngle); Geom[Nc].NAngle = g_strdup(new_text); if(NR>0) { if(Geom[Nc].NR) g_free(Geom[Nc].NR); Geom[Nc].NR = g_strdup_printf("%d",NR); set_text_column (model , path_string, Geom[Nc].NR,2*(numCol-2)); } if(ND>0) { if(Geom[Nc].NDihedral) g_free(Geom[Nc].NDihedral); Geom[Nc].NDihedral = g_strdup_printf("%d",ND); set_text_column (model , path_string, Geom[Nc].NDihedral,2*(numCol+2)); } } if( numCol==E_NUMBER_DIHEDRAL) { gchar* dist = NULL; gchar* angle = NULL; gchar* dih = NULL; if(NR>0) dist = get_distance_zmatrix(NR-1, Nc); if(NR>0) angle = get_angle_zmatrix (atoi(Geom[Nc].NAngle)-1, NR-1, Nc); if(NA>0 && NR<0) angle = get_angle_zmatrix (NA-1, atoi(Geom[Nc].NR)-1, Nc); if(NA>0) dih = get_dihedral_zmatrix(ND-1,NA-1,atoi(Geom[Nc].NR)-1, Nc); if(NR>0) dih = get_dihedral_zmatrix(ND-1,atoi(Geom[Nc].NAngle)-1,NR-1,Nc); if(NR<0 && NA<0) dih = get_dihedral_zmatrix(ND-1,atoi(Geom[Nc].NAngle)-1,atoi(Geom[Nc].NR)-1,Nc); if(dist) { if(reset_r_value(Nc, dist)) set_text_column (model , path_string, dist,2*(numCol-5)); } if(angle) { if(reset_angle_value(Nc, angle)) set_text_column (model , path_string, angle,2*(numCol-3)); } if(dih) { if(reset_dihedral_value(Nc, dih)) set_text_column (model , path_string, dih,2*(numCol-1)); } if(Geom[Nc].NDihedral) g_free(Geom[Nc].NDihedral); Geom[Nc].NDihedral = g_strdup(new_text); if(NA>0) { if(Geom[Nc].NAngle) g_free(Geom[Nc].NAngle); Geom[Nc].NAngle = g_strdup_printf("%d",NA); set_text_column (model , path_string, Geom[Nc].NAngle,2*(numCol-2)); } if(NR>0) { if(Geom[Nc].NR) g_free(Geom[Nc].NR); Geom[Nc].NR = g_strdup_printf("%d",NR); set_text_column (model , path_string, Geom[Nc].NR,2*(numCol-4)); } } set_text_column (model , path_string, new_text,2*numCol); if(GeomDrawingArea != NULL) rafresh_drawing(); return; } /* Charge */ if(numCol==E_CHARGE) { gint nc = strlen(new_text); gchar* txt = NULL; if(nc<1)return; Nc = atoi(path_string); if(!test(new_text)) { gchar* message=g_strdup_printf(_("Sorry %s is not a number \n"),new_text); MessageGeom(message,_("Error"),TRUE); g_free(message); return; } if(test(new_text) && !testpointeE(new_text) ) txt=g_strdup_printf("%s.0",new_text); else txt=g_strdup_printf("%s",new_text); if(Geom[Nc].Charge) g_free(Geom[Nc].Charge); Geom[Nc].Charge = g_strdup(txt); path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (model, &iter, path); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 2*numCol, txt, -1); gtk_tree_path_free (path); if(GeomDrawingArea != NULL) rafresh_drawing(); if(txt) g_free(txt); return; } /* Layer */ if(numCol==E_LAYER) { gint nc = strlen(new_text); gint i; if(nc<1)return; new_text[0] = toupper(new_text[0]); for(i=1;i", NULL, "All=>", G_CALLBACK (activate_action_xyz_geom) }, {"AllR", NULL, "All _R =>", NULL, "All R=>", G_CALLBACK (activate_action_xyz_geom) }, {"AllAngles", NULL, "All _Angles =>", NULL, "All Angles =>", G_CALLBACK (activate_action_xyz_geom) }, {"AllDihedrals", NULL, "All _Dihedral =>", NULL, "All Dihedral =>", G_CALLBACK (activate_action_xyz_geom) }, {"OneAtom", NULL, "_One atom=>", NULL, "One atom=>", G_CALLBACK (activate_action_xyz_geom) }, {"OneR", NULL, "_One R=>", NULL, "One R=>", G_CALLBACK (activate_action_xyz_geom) }, {"OneAngle", NULL, "_One Angle=>", NULL, "One Angle=>", G_CALLBACK (activate_action_xyz_geom) }, {"OneDihedral", NULL, "_One Dihedral=>", NULL, "One Dihedral=>", G_CALLBACK (activate_action_xyz_geom) }, {"MultiplyBya0", GABEDIT_STOCK_A0P, "M_ultiply by a0", NULL, "Multiply by a0", G_CALLBACK (activate_action_xyz_geom) }, {"DivideBya0", GABEDIT_STOCK_A0D, "D_ivide by a0", NULL, "D_ivide by a0", G_CALLBACK (activate_action_xyz_geom) }, {"ToXYZ", NULL, "to _XYZ", NULL, "to XYZ", G_CALLBACK (activate_action_xyz_geom) }, }; static guint numberOfGtkActionEntriesZMatGeom = G_N_ELEMENTS (gtkActionEntriesZMatGeom); /********************************************************************************/ /* XML description of the menus for the test app. The parser understands * a subset of the Bonobo UI XML format, and uses GMarkup for parsing */ static const gchar *uiMenuZMatGeomInfo = " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*******************************************************************************************************************************/ static GtkUIManager *newMenuZMatGeom(GtkWidget* win) { GtkActionGroup *actionGroup = NULL; GtkUIManager *manager = NULL; GError *error = NULL; static gchar* menuName = "/MenuZMatGeom"; manager = gtk_ui_manager_new (); g_signal_connect_swapped (win, "destroy", G_CALLBACK (g_object_unref), manager); actionGroup = gtk_action_group_new ("GabeditListOfProject"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntriesZMatGeom, numberOfGtkActionEntriesZMatGeom, NULL); gtk_ui_manager_insert_action_group (manager, actionGroup, 0); gtk_window_add_accel_group (GTK_WINDOW (win), gtk_ui_manager_get_accel_group (manager)); if (!gtk_ui_manager_add_ui_from_string (manager, uiMenuZMatGeomInfo, -1, &error)) { g_message ("building menus failed: %s", error->message); g_error_free (error); } g_object_set_data(G_OBJECT(manager),"MenuName", menuName); return manager; } /********************************************************************************/ static void activate_action_zmat_variables (GtkAction *action) { const gchar *name = gtk_action_get_name (action); if(!strcmp(name, "Edit")) DialogueEditV(); else if(!strcmp(name, "New")) DialogueAddV(); else if(!strcmp(name, "Delete")) DialogueDeleteV(); else if(!strcmp(name, "All")) DialogueTransInConst(); else if(!strcmp(name, "One")) TransVarConst(); } /*--------------------------------------------------------------------*/ static GtkActionEntry gtkActionEntriesZMatVariables[] = { {"Edit", NULL, "_Edit", NULL, "Edit", G_CALLBACK (activate_action_zmat_variables) }, {"New", GABEDIT_STOCK_NEW, "_New", NULL, "New", G_CALLBACK (activate_action_zmat_variables) }, {"Delete", GABEDIT_STOCK_CUT, "_Delete", NULL, "Delete", G_CALLBACK (activate_action_zmat_variables) }, {"All", NULL, "<=_All", NULL, "<=All", G_CALLBACK (activate_action_zmat_variables) }, {"One", NULL, "<=_One", NULL, "<=One", G_CALLBACK (activate_action_zmat_variables) }, }; static guint numberOfGtkActionEntriesZMatVariables = G_N_ELEMENTS (gtkActionEntriesZMatVariables); /********************************************************************************/ /* XML description of the menus for the test app. The parser understands * a subset of the Bonobo UI XML format, and uses GMarkup for parsing */ static const gchar *uiMenuZMatVariablesInfo = " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*******************************************************************************************************************************/ static GtkUIManager *newMenuZMatVariables(GtkWidget* win) { GtkActionGroup *actionGroup = NULL; GtkUIManager *manager = NULL; GError *error = NULL; static gchar* menuName = "/MenuZMatVariables"; manager = gtk_ui_manager_new (); g_signal_connect_swapped (win, "destroy", G_CALLBACK (g_object_unref), manager); actionGroup = gtk_action_group_new ("GabeditListOfProject"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntriesZMatVariables, numberOfGtkActionEntriesZMatVariables, NULL); gtk_ui_manager_insert_action_group (manager, actionGroup, 0); gtk_window_add_accel_group (GTK_WINDOW (win), gtk_ui_manager_get_accel_group (manager)); if (!gtk_ui_manager_add_ui_from_string (manager, uiMenuZMatVariablesInfo, -1, &error)) { g_message ("building menus failed: %s", error->message); g_error_free (error); } g_object_set_data(G_OBJECT(manager),"MenuName", menuName); return manager; } /********************************************************************************/ static void event_dispatcher(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; gint row = -1; GtkUIManager *manager = NULL; gchar* menuName = NULL; if (!event) return; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); row = atoi(gtk_tree_path_to_string(path)); gtk_tree_path_free(path); } } manager = GTK_UI_MANAGER(user_data); menuName = g_object_get_data(G_OBJECT(manager),"MenuName"); if(strstr(menuName,"Geom")) { LineSelected = row; NSA[0] = LineSelected+1; NSA[1] = NSA[2] = NSA[3] =-1; } else { LineSelectedV = row; LineSelectedOld = row; } if(GeomDrawingArea != NULL) rafresh_drawing(); if (event->type == GDK_2BUTTON_PRESS) { if(strstr(menuName,"Geom")) DialogueEdit(); else DialogueEditV(); } if (event->type == GDK_BUTTON_PRESS && ((GdkEventButton *) event)->button == 3) { gchar* pathEdit = NULL; gchar* pathDelete = NULL; gchar* pathOne = NULL; gchar* pathAll = NULL; GdkEventButton *bevent = (GdkEventButton *) event; if(menuName) pathEdit = g_strdup_printf("%s/Edit",menuName); if(menuName) pathDelete = g_strdup_printf("%s/Delete",menuName); if(menuName) pathOne = g_strdup_printf("%s/One",menuName); if(menuName) pathAll = g_strdup_printf("%s/All",menuName); if(pathEdit) { if(row<0) set_sensitive_option(manager, pathEdit, FALSE); else set_sensitive_option(manager, pathEdit, TRUE); g_free(pathEdit); } if(pathOne) { if(row<0) set_sensitive_option(manager, pathOne, FALSE); else set_sensitive_option(manager, pathOne, TRUE); g_free(pathOne); } if(pathDelete) { if(strstr(menuName,"Geom")) { if(NcentersZmat <1) set_sensitive_option(manager, pathDelete, FALSE); else set_sensitive_option(manager, pathDelete, TRUE); } else if(strstr(menuName,"Variable")) { if(NVariables <1) set_sensitive_option(manager, pathDelete, FALSE); else set_sensitive_option(manager, pathDelete, TRUE); } g_free(pathDelete); } if(pathAll) { if(strstr(menuName,"Geom")) { if(NcentersZmat <1) set_sensitive_option(manager, pathAll, FALSE); else set_sensitive_option(manager, pathAll, TRUE); } else if(strstr(menuName,"Variable")) { if(NVariables <1) set_sensitive_option(manager, pathAll, FALSE); else set_sensitive_option(manager, pathAll, TRUE); } g_free(pathAll); } show_menu_popup(manager, menuName, bevent->button, bevent->time); } GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event); } /********************************************************************************/ static gchar** freeList(gchar** strs, gint nlist) { gint i; for(i=0;i4 && k<11) ed=FALSE; if(Nc<2 && k>6 && k<11) ed=FALSE; if(Nc<3 && k>8 && k<11) ed=FALSE; gtk_list_store_set (store, &iter, k+k, texts[k],k+k+1,ed, -1); g_free(texts[k]); } } } /********************************************************************************/ void FreeGeom(GeomAtomDef* Geomtemp,VariablesDef* Variablestemp,gint Ncent,gint Nvar) { guint i; init_dipole(); if( Geomtemp) for(i=0;(gint)i0) { if(Geomtemp[i].R) g_free(Geomtemp[i].R); if(Geomtemp[i].NR) g_free(Geomtemp[i].NR); } if(i>1) { if(Geomtemp[i].Angle) g_free(Geomtemp[i].Angle); if(Geomtemp[i].NAngle) g_free(Geomtemp[i].NAngle); } if(i>2) { if(Geomtemp[i].Dihedral) g_free(Geomtemp[i].Dihedral); if(Geomtemp[i].NDihedral) g_free(Geomtemp[i].NDihedral); } if(Geomtemp[i].Charge) g_free(Geomtemp[i].Charge); if(Geomtemp[i].Layer) g_free(Geomtemp[i].Layer); } if( Geomtemp) g_free(Geomtemp); if( !Variablestemp) return; for(i=0;(gint)i0) { g_free(Geom[i].R); g_free(Geom[i].NR); } if(i>1) { g_free(Geom[i].Angle); g_free(Geom[i].NAngle); } if(i>2) { g_free(Geom[i].Dihedral); g_free(Geom[i].NDihedral); } g_free(Geom[i].Charge); g_free(Geom[i].Layer); } g_free(Geom); Geom = NULL; NcentersZmat = 0; } /********************************************************************************/ void freeVariables() { guint i; if(Variables==NULL) return; for(i=0;i1) { if(Units==1 || !test(Geom[1].R)) fprintf(fd,"%s\t%s\t%s\n",Geom[1].Symb, Geom[1].NR,Geom[1].R); else fprintf(fd,"%s\t%s\t%s\n",Geom[1].Symb, Geom[1].NR,bohr_to_ang(Geom[1].R)); } if(NcentersZmat>2) { if(Units==1 || !test(Geom[2].R)) fprintf(fd,"%s\t%s\t%s\t%s\t%s\n",Geom[2].Symb, Geom[2].NR,Geom[2].R, Geom[2].NAngle,Geom[2].Angle); else fprintf(fd,"%s\t%s\t%s\t%s\t%s\n",Geom[2].Symb, Geom[2].NR,bohr_to_ang(Geom[2].R), Geom[2].NAngle,Geom[2].Angle); } for(i=3;iactive) { save_gzmatrix_file(fileName); } else { save_mzmatrix_file(fileName); } } /********************************************************************************/ static void reset_extended_file(gpointer data,G_CONST_RETURN gchar* ext) { GtkWidget* entry = GTK_WIDGET(data); G_CONST_RETURN gchar* entrytext = gtk_entry_get_text(GTK_ENTRY(entry)); gchar* temp = get_filename_without_ext(entrytext); gchar* t = g_strdup_printf("%s.%s",temp,ext); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); g_free(temp); } /********************************************************************************/ void reset_extended_gzmat_file(GtkWidget* b,gpointer data) { reset_extended_file(data,"gzmt"); } /********************************************************************************/ void reset_extended_mzmat_file(GtkWidget* b,gpointer data) { reset_extended_file(data,"zmt"); } /********************************************************************************/ void create_window_save_zmat() { GtkWidget *fp; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vboxframe; GtkWidget *hbox; GtkWidget *button; GtkWidget *ButtonGZmat; GtkWidget *ButtonMZmat; GtkWidget *entry; GtkWidget *Win = WindowGeom; gchar *labelt = g_strdup(" File : "); gchar *fileName; gchar *titre=g_strdup("Save in Z-matrix file"); GtkWidget* buttonDirSelector; if(NcentersZmat<1) { MessageGeom(_(" Sorry No Center !"),_("Error"),TRUE); return; } if(!Win) Win = Fenetre; fileName = g_strdup_printf("%s.gzmt",fileopen.projectname); /* Fenetre principale */ fp = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(fp),titre); gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Fenetre)); add_child(Win,fp,gtk_widget_destroy," Save Z-matrix "); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)delete_child,NULL); g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)gtk_widget_destroy,NULL); gtk_container_set_border_width (GTK_CONTAINER (fp), 5); vboxall = create_vbox(fp); frame = gtk_frame_new ("Type of file"); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox = gtk_hbox_new(TRUE, 10); gtk_container_add (GTK_CONTAINER (vboxframe), hbox); gtk_widget_show (hbox); ButtonGZmat = gtk_radio_button_new_with_label( NULL,"Gaussian Z-matrix " ); gtk_box_pack_start (GTK_BOX (hbox), ButtonGZmat, FALSE, FALSE, 5); gtk_widget_show (ButtonGZmat); ButtonMZmat = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonGZmat)), "Mopac Z-matrix"); gtk_box_pack_start (GTK_BOX (hbox), ButtonMZmat, FALSE, FALSE, 5); gtk_widget_show (ButtonMZmat); create_hseparator(vboxframe); create_table_browser(Win,vboxframe); entry = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"EntryFileName")); gtk_entry_set_text(GTK_ENTRY(entry),fileName); buttonDirSelector = (GtkWidget*)(g_object_get_data(G_OBJECT(Win),"ButtonDirSelector")); if(fileopen.localdir && strcmp(fileopen.localdir,"NoName")!=0) gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(buttonDirSelector), fileopen.localdir); create_hseparator(vboxframe); g_signal_connect(G_OBJECT(ButtonGZmat),"clicked",(GCallback)reset_extended_gzmat_file,(gpointer)(entry)); g_signal_connect(G_OBJECT(ButtonMZmat),"clicked",(GCallback)reset_extended_mzmat_file,(gpointer)(entry)); g_object_set_data(G_OBJECT (fp), "ButtonGZmat",ButtonGZmat); g_object_set_data(G_OBJECT (fp), "ButtonMZmat",ButtonMZmat); g_object_set_data(G_OBJECT (fp), "Entry",entry); g_object_set_data(G_OBJECT (fp), "ButtonDirSelector",buttonDirSelector); /* buttons */ create_hseparator(vboxall); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start (GTK_BOX (vboxall), hbox, FALSE, FALSE, 5); gtk_widget_realize(fp); button = create_button(fp,_("OK")); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, FALSE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(save_gmzmatrix_file),GTK_OBJECT(fp)); g_signal_connect_swapped(G_OBJECT(button),"clicked",(GCallback)delete_child,GTK_OBJECT(fp)); button = create_button(fp,_("Cancel")); gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, FALSE, 3); g_signal_connect_swapped(G_OBJECT(button),"clicked",(GCallback)delete_child,GTK_OBJECT(fp)); gtk_widget_show (button); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_free(labelt); g_free(fileName); gtk_widget_show_all(fp); } /********************************************************************************/ static gint testav(gchar *t) { guint i; if(!test(t) ){ for(i=0;iNUMBER_ENTRY_0) { if (!strcmp(Variables[i].Name, Geom[j].R) ) k=TRUE; if(k)break; } if(Geom[j].Nentry>NUMBER_ENTRY_R) { if (!strcmp(Variables[i].Name, Geom[j].Angle) ) k=TRUE; if(k)break; } if(Geom[j].Nentry>NUMBER_ENTRY_ANGLE) { if (!strcmp(Variables[i].Name, Geom[j].Dihedral) ) k=TRUE; if(k)break; } } Variables[i].Used=k; } } /********************************************************************************/ void AllocationVariable() { if(Variables != NULL) Variables = g_realloc(Variables,NVariables*sizeof(VariablesDef)); else Variables = g_malloc(NVariables*sizeof(VariablesDef)); } /********************************************************************************/ void AddVariableZmat(gchar *NameV,gchar *ValueV, gboolean rafresh) { gchar *texts[2]; NVariables++; AllocationVariable(); Variables[NVariables-1].Name = g_strdup(NameV); Variables[NVariables-1].Value = g_strdup(ValueV); texts[0] = g_strdup(NameV); texts[1] = g_strdup(ValueV); if(rafresh) appendToList(listv, texts, 2); } /********************************************************************************/ static gboolean reset_variable_value(gchar *NameV,gchar *ValueV, gboolean rafresh) { gint i=testav(NameV); if(i>=0) { if(Variables[i].Value) g_free(Variables[i].Value); Variables[i].Value = g_strdup(ValueV); if(rafresh) { gchar* texts[2] = { Variables[i].Name, Variables[i].Value}; removeFromList(listv, i); insertToList(listv, i, texts, 2); } return TRUE; } return FALSE; } /********************************************************************************/ static void trans_coord_Zmat(gchar T,guint i, gboolean rafresh) { gdouble V; gchar *NameV; gchar *ValueV; V = atof(Geom[i].R); if( T == 'A' ) V = atof(Geom[i].Angle); if( T == 'D' ) V = atof(Geom[i].Dihedral); NameV = g_strdup_printf("%c%s%d",T,Geom[i].Symb,i+1); ValueV = g_strdup_printf("%f",V); if(!reset_variable_value(NameV,ValueV, rafresh)) AddVariableZmat(NameV,ValueV, rafresh); if( T == 'R' ) Geom[i].R=g_strdup(NameV); if( T == 'A' ) Geom[i].Angle=g_strdup(NameV); if( T == 'D' ) Geom[i].Dihedral=g_strdup(NameV); } /********************************************************************************/ void set_variable_one_atom_in_GeomZMatrix(gint i) { if( i>0 && test(Geom[i].R)) trans_coord_Zmat('R',i,FALSE); if( i>1 && test(Geom[i].Angle) ) trans_coord_Zmat('A',i,FALSE); if(i>2 && test(Geom[i].Dihedral) ) trans_coord_Zmat('D',i,FALSE); ChangeVariablesUseds(); } /********************************************************************************/ void trans_OneGeom_to_variables(guint i, gboolean rv, gboolean ra, gboolean rd) { guint j; gchar *texts[NUMBER_LIST_ZMATRIX]; for(j=0;j0 && test(Geom[i].R) && rv) trans_coord_Zmat('R',i,TRUE); if( i>1 && test(Geom[i].Angle) && ra) trans_coord_Zmat('A',i,TRUE); if(i>2 && test(Geom[i].Dihedral) && rd ) trans_coord_Zmat('D',i,TRUE); texts[E_NUMBER] =g_strdup_printf("%d",i+1); texts[E_SYMBOL] = g_strdup(Geom[i].Symb); texts[E_MMTYPE] = g_strdup(Geom[i].mmType); texts[E_PDBTYPE] = g_strdup(Geom[i].pdbType); texts[E_RESIDUE] = g_strdup(Geom[i].Residue); if(i>0) { texts[E_R] = g_strdup(Geom[i].R); texts[E_NUMBER_R] = g_strdup(Geom[i].NR); } if(i>1) { texts[E_ANGLE] = g_strdup(Geom[i].Angle); texts[E_NUMBER_ANGLE] = g_strdup(Geom[i].NAngle); } if(i>2) { texts[E_DIHEDRAL] = g_strdup(Geom[i].Dihedral); texts[E_NUMBER_DIHEDRAL] = g_strdup(Geom[i].NDihedral); } texts[E_CHARGE] = g_strdup(Geom[i].Charge); texts[E_LAYER] = g_strdup(Geom[i].Layer); removeFromList(list, i); insertToList(list, i, texts, NUMBER_LIST_ZMATRIX); ChangeVariablesUseds(); } /********************************************************************************/ void trans_allGeom_to_variables() { guint i; if(NcentersZmat <1 ) return; for(i=0;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); gtk_box_pack_start(GTK_BOX(vboxframe), Label,TRUE,TRUE,0); Bouton = create_button(Dialogue,"No"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); Bouton = create_button(Dialogue,"Yes"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)trans_allGeom_to_variables, NULL); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_show_all(Dialogue); } /********************************************************************************/ static void TransConstVar(gboolean vr, gboolean va, gboolean vd) { gint Nc; Nc=LineSelected; if(Nc<0) { MessageGeom(_("Sorry No line selected"),_("Warning"),TRUE); return; } trans_OneGeom_to_variables((guint)Nc, vr,va,vd); if(GeomDrawingArea != NULL) rafresh_drawing(); } /********************************************************************************/ static void show_geom_in_list(guint i) { gchar *texts[NUMBER_LIST_ZMATRIX]; guint k; for(k=0;k0) { texts[E_R] = g_strdup(Geom[i].R); texts[E_NUMBER_R] = g_strdup(Geom[i].NR); } if(i>1) { texts[E_ANGLE] = g_strdup(Geom[i].Angle); texts[E_NUMBER_ANGLE] = g_strdup(Geom[i].NAngle); } if(i>2) { texts[E_DIHEDRAL] = g_strdup(Geom[i].Dihedral); texts[E_NUMBER_DIHEDRAL] = g_strdup(Geom[i].NDihedral); } texts[E_CHARGE] = g_strdup(Geom[i].Charge); texts[E_LAYER] = g_strdup(Geom[i].Layer); removeFromList(list, i); insertToList(list, i, texts, NUMBER_LIST_ZMATRIX); } /********************************************************************************/ guint ModifyCoord(gchar T,guint numC,guint numV ) { if(T == 'R') { if(!strcmp(Geom[numC].R,Variables[numV].Name)) Geom[numC].R =g_strdup(Variables[numV].Value); return 1; } if(T == 'A') { if(!strcmp(Geom[numC].Angle,Variables[numV].Name)) Geom[numC].Angle =g_strdup(Variables[numV].Value); return 1; } if(T == 'D') { if(!strcmp(Geom[numC].Dihedral,Variables[numV].Name)) Geom[numC].Dihedral =g_strdup(Variables[numV].Value); return 1; } return 0; } /********************************************************************************/ void OneVariableToConst(guint num) { guint i; guint k; if(!Variables[num].Used) return; for(i=0;i0) k += ModifyCoord('R',i,num); if(i>1) k += ModifyCoord('A',i,num); if(i>2) k += ModifyCoord('D',i,num); if(k>0) show_geom_in_list(i); } for(i=num;i0) AllocationVariable(); else freeVariables(); removeFromList(listv, num); } /********************************************************************************/ static void TransVarConst() { gint Nc; Nc=LineSelectedV; if(Nc<0) { MessageGeom(_("Sorry No Variable selected"),_("Warning"),TRUE); return; } OneVariableToConst((guint)Nc); if(GeomDrawingArea != NULL) rafresh_drawing(); } /********************************************************************************/ static void trans_allVariables_to_Constants() { guint numV; guint numC; guint k; guint i; guint NRem=0; gboolean *Rem; VariablesDef *VZmat; Rem = g_malloc(NVariables*sizeof(gboolean)); VZmat = g_malloc(NVariables*sizeof(VariablesDef)); for(numV=0;numV0) k += ModifyCoord('R',numC,numV); if(numC>1) k += ModifyCoord('A',numC,numV); if(numC>2) k += ModifyCoord('D',numC,numV); } NRem++; Rem[numV] = TRUE; Variables[numV].Used = FALSE; } } for(i=0;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); gtk_box_pack_start(GTK_BOX(vboxframe), Label,TRUE,TRUE,0); Bouton = create_button(Dialogue,"No"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); Bouton = create_button(Dialogue,"Yes"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)trans_allVariables_to_Constants,NULL); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_show_all(Dialogue); } /********************************************************************************/ static void set_entry_Zmat() { SAtomsProp Atom[3]; gdouble r; gdouble Coord[3]; gdouble angle; gdouble dihed; gchar *strdump; G_CONST_RETURN gchar *Atomdump; angle = (gdouble)rand()/RAND_MAX*60; dihed = (gdouble)rand()/RAND_MAX*60; angle = 109.0; dihed = 180.0; if(NcentersZmat==0) return; if(InEdit && LineSelected<1) return; Atomdump =gtk_entry_get_text(GTK_ENTRY(Entry[E_SYMBOL])); Atom[0] = prop_atom_get(Atomdump); Atom[1] = prop_atom_get(Geom[NcentersZmat-1].Symb); r = Atom[0].covalentRadii+Atom[1].covalentRadii; r *=0.8; if(Units==1) r*=BOHR_TO_ANG; Coord[0] = r ; Coord[1] = angle; Coord[2] = dihed; strdump = g_strdup_printf("%f", Coord[0]); gtk_entry_set_text(GTK_ENTRY(Entry[E_R]),strdump); if(NcentersZmat<2 || (InEdit && LineSelected<2)) { g_free(strdump); return; } strdump = g_strdup_printf("%f", Coord[1]); gtk_entry_set_text(GTK_ENTRY(Entry[E_ANGLE]),strdump); if(NcentersZmat<3 || (InEdit && LineSelected<3)) { g_free(strdump); return; } strdump = g_strdup_printf("%f", Coord[2]); gtk_entry_set_text(GTK_ENTRY(Entry[E_DIHEDRAL]),strdump); g_free(strdump); } /********************************************************************************/ static void SetAtom(GtkWidget *w,gpointer data) { gtk_entry_set_text(GTK_ENTRY(Entry[E_MMTYPE]),(char *)data); gtk_entry_set_text(GTK_ENTRY(Entry[E_PDBTYPE]),(char *)data); gtk_entry_set_text(GTK_ENTRY(Entry[E_SYMBOL]),(char *)data); gtk_entry_set_text(GTK_ENTRY(Entry[E_RESIDUE]),(char *)data); gtk_editable_set_editable((GtkEditable*) Entry[E_SYMBOL],FALSE); gtk_widget_destroy(FenetreTable); set_entry_Zmat(); } /********************************************************************************/ static void SelectAtom(GtkWidget *w,gpointer entry0) { GtkWidget* Table; GtkWidget* button; GtkWidget* frame; guint i; guint j; GtkStyle *button_style; GtkStyle *style; gchar*** Symb = get_periodic_table(); FenetreTable = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(FenetreTable),TRUE); gtk_window_set_title(GTK_WINDOW(FenetreTable),"Select your atom"); gtk_window_set_default_size (GTK_WINDOW(FenetreTable),(gint)(ScreenWidth*0.5),(gint)(ScreenHeight*0.4)); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_container_add(GTK_CONTAINER(FenetreTable),frame); gtk_widget_show (frame); Table = gtk_table_new(PERIODIC_TABLE_N_ROWS-1,PERIODIC_TABLE_N_COLUMNS,TRUE); gtk_container_add(GTK_CONTAINER(frame),Table); button_style = gtk_widget_get_style(FenetreTable); for ( i = 0;i-1) { Geom=g_realloc(Geom,NcentersZmat*sizeof(GeomAtomDef)); removeFromList(list, NcentersZmat); if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS) set_spin_of_electrons(); } else freeGeom(); ChangeVariablesUseds(); } /********************************************************************************/ static void addAtom(GtkWidget *w,gpointer Entree) { gchar *texts[NUMBER_LIST_ZMATRIX]; gchar *message; gint i; gboolean false; false = FALSE; DestroyDialog=TRUE; for (i=0;i1) { for (i=E_R;i<=E_NUMBER_R;i++) texts[i] = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry[i]))); if (!texts[E_R] || !strcmp(texts[E_R], "")) { MessageGeom(_("Sorry a Entry text is void !\n"),_("Warning"),TRUE); DestroyDialog=FALSE; false = TRUE; } i=testav(texts[E_R]); if(i>-1)Variables[i].Used=TRUE; if(i<-1) { message=g_strdup_printf( _( "Sorry\n %s \nis not a number \nand is not a variable ") ,texts[E_R] ); MessageGeom(message,_("Warning"),TRUE); g_free(message); DestroyDialog=FALSE; false = TRUE; } Geom[NcentersZmat-1].Nentry = NUMBER_ENTRY_R; if(test(texts[E_R]) && !testpointeE(texts[E_R]) ) texts[E_R]=g_strdup_printf("%s.0",texts[E_R]); Geom[NcentersZmat-1].R=g_strdup(texts[E_R]); Geom[NcentersZmat-1].NR=g_strdup(texts[E_NUMBER_R]); } if ( (NcentersZmat>2) && (!false) ) { for (i=E_ANGLE;i<=E_NUMBER_ANGLE;i++) texts[i] = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry[i]))); if (!texts[E_ANGLE] || !strcmp(texts[E_ANGLE], "")) { MessageGeom(_("Sorry a Entry text is void !\n"),_("Warning"),TRUE); DestroyDialog=FALSE; false = TRUE; } i=testav(texts[E_ANGLE]); if(i>-1)Variables[i].Used=TRUE; if(i<-1) { message=g_strdup_printf( _("Sorry\n %s \nis not a number \nand is not a variable ") ,texts[E_ANGLE] ); MessageGeom(message,_("Warning"),TRUE); g_free(message); DestroyDialog=FALSE; false = TRUE; } Geom[NcentersZmat-1].Nentry = NUMBER_ENTRY_ANGLE; if(test(texts[E_ANGLE]) && !testpointeE(texts[E_ANGLE]) ) texts[E_ANGLE]=g_strdup_printf("%s.0",texts[E_ANGLE]); Geom[NcentersZmat-1].Angle=g_strdup(texts[E_ANGLE]); Geom[NcentersZmat-1].NAngle=g_strdup(texts[E_NUMBER_ANGLE]); } if( (NcentersZmat>3) && (!false) ) { for (i=E_DIHEDRAL;i<=E_NUMBER_DIHEDRAL;i++) texts[i] = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry[i]))); if (!texts[E_DIHEDRAL] || !strcmp(texts[E_DIHEDRAL], "")) { MessageGeom(_("Sorry a Entry text is void !\n"),_("Warning"),TRUE); DestroyDialog=FALSE; false = TRUE; } i=testav(texts[E_DIHEDRAL]); if(i>-1)Variables[i].Used=TRUE; if(i<-1) { message=g_strdup_printf( _("Sorry\n %s \nis not a number \nand is not a variable ") ,texts[E_DIHEDRAL] ); MessageGeom(message,_("Warning"),TRUE); g_free(message); DestroyDialog=FALSE; false = TRUE; } Geom[NcentersZmat-1].Nentry = NUMBER_ENTRY_DIHEDRAL; if(test(texts[E_DIHEDRAL]) && !testpointeE(texts[E_DIHEDRAL]) ) texts[E_DIHEDRAL]=g_strdup_printf("%s.0",texts[E_DIHEDRAL]); Geom[NcentersZmat-1].Dihedral=g_strdup(texts[E_DIHEDRAL]); Geom[NcentersZmat-1].NDihedral=g_strdup(texts[E_NUMBER_DIHEDRAL]); } texts[E_CHARGE] = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry[E_CHARGE]))); Geom[NcentersZmat-1].Charge=g_strdup(texts[E_CHARGE]); if(iprogram != PROG_IS_MOLPRO) texts[E_LAYER] = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry[E_LAYER]))); else texts[E_LAYER] = g_strdup(" "); Geom[NcentersZmat-1].Layer=g_strdup(texts[E_LAYER]); if(!false) { appendToList(list, texts, NUMBER_LIST_ZMATRIX); if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS) set_spin_of_electrons(); } else { NcentersZmat--; if(NcentersZmat>0) Geom=g_realloc(Geom,NcentersZmat*sizeof(GeomAtomDef)); else Geom=NULL; } } } /********************************************************************************/ static void EditAtom(GtkWidget *w,gpointer Entree) { gchar *texts[NUMBER_LIST_ZMATRIX]; gchar *message; gint i; gint Nc; gint j; gint k; gboolean False; GeomAtomDef Gtmp; False = FALSE; DestroyDialog=TRUE; j=-1; Nc=-1; for (i=0;i=0) { gboolean oldResidue = FALSE; Gtmp=Geom[Nc]; if(!strcmp(Gtmp.Residue,texts[E_RESIDUE])) oldResidue = TRUE; Gtmp.Symb=g_strdup(texts[E_SYMBOL]); Gtmp.mmType=g_strdup(texts[E_MMTYPE]); Gtmp.pdbType=g_strdup(texts[E_PDBTYPE]); Gtmp.Residue=g_strdup(texts[E_RESIDUE]); if(!oldResidue) { gint k; Gtmp.ResidueNumber = -1; for(k=0;k<(gint)NcentersZmat;k++) { if(Nc != k && !strcmp(Gtmp.Residue,Geom[k].Residue)) { Gtmp.ResidueNumber = Geom[k].ResidueNumber; break; } } if(Gtmp.ResidueNumber == -1) { for(k=0;k<(gint)NcentersZmat;k++) { if(Gtmp.ResidueNumber0) { for (i=E_R;i<=E_NUMBER_R;i++) { texts[i] = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry[i]))); k=testav(texts[i]); if(k<-1) { j=i; False=TRUE; break; } } if (!texts[E_R] || !strcmp(texts[E_R], "")) { MessageGeom(_("Sorry a Entry text is void !\n"),_("Warning"),TRUE); DestroyDialog=FALSE; return; } if(False) { message=g_strdup_printf( _("Sorry\n %s \nis not a number \nand is not a variable "),texts[j] ); MessageGeom(message,_("Warning"),TRUE); g_free(message); DestroyDialog=FALSE; return; } if(test(texts[E_R]) && !testpointeE(texts[E_R]) ) texts[E_R]=g_strdup_printf("%s.0",texts[E_R]); Gtmp.R=g_strdup(texts[E_R]); Gtmp.NR=g_strdup(texts[E_NUMBER_R]); } if(Nc>1) { for (i=E_ANGLE;i<=E_NUMBER_ANGLE;i++) { texts[i] = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry[i]))); k=testav(texts[i]); if(k<-1) { j=i; False=TRUE; break; } } if (!texts[E_ANGLE] || !strcmp(texts[E_ANGLE], "")) { MessageGeom(_("Sorry a Entry text is void !\n"),_("Warning"),TRUE); DestroyDialog=FALSE; return; } if(False) { message=g_strdup_printf( _("Sorry\n %s \nis not a number \nand is not a variable ") ,texts[j] ); MessageGeom(message,_("Warning"),TRUE); g_free(message); DestroyDialog=FALSE; return; } if(test(texts[E_ANGLE]) && !testpointeE(texts[E_ANGLE]) ) texts[E_ANGLE]=g_strdup_printf("%s.0",texts[E_ANGLE]); Gtmp.Angle=g_strdup(texts[E_ANGLE]); Gtmp.NAngle=g_strdup(texts[E_NUMBER_ANGLE]); } if(Nc>2) { for (i=E_DIHEDRAL;i<=E_NUMBER_DIHEDRAL;i++) { texts[i] = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry[i]))); k=testav(texts[i]); if(k<-1) { j=i; False=TRUE; break; } } if (!texts[E_DIHEDRAL] || !strcmp(texts[E_DIHEDRAL], "")) { MessageGeom(_("Sorry a Entry text is void !\n"),_("Warning"),TRUE); DestroyDialog=FALSE; return; } if(False) { message=g_strdup_printf( _("Sorry\n %s \nis not a number \nand is not a variable ") ,texts[j] ); MessageGeom(message,_("Warning"),TRUE); g_free(message); DestroyDialog=FALSE; return; } if(test(texts[E_DIHEDRAL]) && !testpointeE(texts[E_DIHEDRAL]) ) texts[E_DIHEDRAL]=g_strdup_printf("%s.0",texts[E_DIHEDRAL]); Gtmp.Dihedral=g_strdup(texts[E_DIHEDRAL]); Gtmp.NDihedral=g_strdup(texts[E_NUMBER_DIHEDRAL]); } texts[E_CHARGE] = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry[E_CHARGE]))); Gtmp.Charge=g_strdup(texts[E_CHARGE]); if(iprogram != PROG_IS_MOLPRO) texts[E_LAYER] = g_strdup(gtk_entry_get_text(GTK_ENTRY(Entry[E_LAYER]))); else texts[E_LAYER] = g_strdup(" "); Gtmp.Layer=g_strdup(texts[E_LAYER]); Geom[Nc]=Gtmp; removeFromList(list, Nc); insertToList(list, Nc, texts, NUMBER_LIST_ZMATRIX); if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS) set_spin_of_electrons(); } else MessageGeom(_("Sorry No line selected"),_("Warning"),TRUE); ChangeVariablesUseds(); } /********************************************************************************/ static gchar **get_list_variables() { guint i; gchar **tlist; tlist=g_malloc((NVariables+1)*sizeof(gchar*)); for (i=0;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); Entry[E_SYMBOL] = create_label_entry(hbox,tlabel[E_SYMBOL], (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); if(NcentersZmat==0) gtk_entry_set_text(GTK_ENTRY(Entry[E_SYMBOL]),"H"); else gtk_entry_set_text(GTK_ENTRY(Entry[E_SYMBOL]),Geom[NcentersZmat-1].Symb); gtk_editable_set_editable((GtkEditable*) Entry[E_SYMBOL],FALSE); Bouton = gtk_button_new_with_label(" Set "); gtk_box_pack_start (GTK_BOX(hbox), Bouton, TRUE, TRUE, 5); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)SelectAtom, Entry[E_SYMBOL]); hbox=create_hbox_false(vboxframe); { gint n=0; gchar** t = getListMMTypes(&n); if(n!=0) { Entry[E_MMTYPE] = create_label_combo(hbox,tlabel[E_MMTYPE],t,n, TRUE,(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } else { Entry[E_MMTYPE] = create_label_entry(hbox,tlabel[E_MMTYPE], (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } if(t) freeList(t,n); if(NcentersZmat==0) { gtk_entry_set_text(GTK_ENTRY(Entry[E_MMTYPE]),"H"); } else { gtk_entry_set_text(GTK_ENTRY(Entry[E_MMTYPE]),Geom[NcentersZmat-1].mmType); } } hbox=create_hbox_false(vboxframe); { gint n=0; gchar** t = getListPDBTypes("UNK",&n); if(n!=0) { Entry[E_PDBTYPE] = create_label_combo(hbox,tlabel[E_PDBTYPE],t,n, TRUE,(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } else { Entry[E_PDBTYPE] = create_label_entry(hbox,tlabel[E_PDBTYPE], (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } if(NcentersZmat==0) { gtk_entry_set_text(GTK_ENTRY(Entry[E_PDBTYPE]),"H"); } else { gtk_entry_set_text(GTK_ENTRY(Entry[E_PDBTYPE]),Geom[NcentersZmat-1].pdbType); } if(t) freeList(t,n); } hbox=create_hbox_false(vboxframe); Entry[E_RESIDUE] = create_label_entry(hbox,tlabel[E_RESIDUE], (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); if(NcentersZmat==0) gtk_entry_set_text(GTK_ENTRY(Entry[E_RESIDUE]),""); else gtk_entry_set_text(GTK_ENTRY(Entry[E_RESIDUE]),Geom[NcentersZmat-1].Residue); tlistvar = get_list_variables(); if(NcentersZmat>0) { hbox=create_hbox_false(vboxframe); Entry[E_R] = create_label_combo(hbox,tlabel[E_R],tlistvar,NVariables+1,TRUE, (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); Entry[E_NUMBER_R] = create_label_combo(hbox,tlabel[E_NUMBER_R],tlist,NcentersZmat,FALSE, (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*0.08)); gtk_entry_set_text(GTK_ENTRY(Entry[E_NUMBER_R]),tlist[NcentersZmat-1]); } if(NcentersZmat>1) { hbox=create_hbox_false(vboxframe); Entry[E_ANGLE] = create_label_combo(hbox,tlabel[E_ANGLE],tlistvar,NVariables+1,TRUE, (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); Entry[E_NUMBER_ANGLE] = create_label_combo(hbox,tlabel[E_NUMBER_ANGLE],tlist,NcentersZmat,FALSE, (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*0.08)); gtk_entry_set_text(GTK_ENTRY(Entry[E_NUMBER_R]),tlist[NcentersZmat-1]); gtk_entry_set_text(GTK_ENTRY(Entry[E_NUMBER_ANGLE]),tlist[NcentersZmat-2]); } if(NcentersZmat>2) { hbox=create_hbox_false(vboxframe); Entry[E_DIHEDRAL] = create_label_combo(hbox,tlabel[E_DIHEDRAL],tlistvar,NVariables+1,TRUE, (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); Entry[E_NUMBER_DIHEDRAL] = create_label_combo(hbox,tlabel[E_NUMBER_DIHEDRAL],tlist,NcentersZmat,FALSE, (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*0.08)); gtk_entry_set_text(GTK_ENTRY(Entry[E_NUMBER_R]),tlist[NcentersZmat-1]); gtk_entry_set_text(GTK_ENTRY(Entry[E_NUMBER_ANGLE]),tlist[NcentersZmat-2]); gtk_entry_set_text(GTK_ENTRY(Entry[E_NUMBER_DIHEDRAL]),tlist[NcentersZmat-3]); } g_free(tlist); freelistvariables(tlistvar); hbox=create_hbox_false(vboxframe); Entry[E_CHARGE] = create_label_entry(hbox,tlabel[E_CHARGE],(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_entry_set_text(GTK_ENTRY(Entry[E_CHARGE]),"0.0"); tlist=g_malloc(4*sizeof(gchar*)); nlist=4; /* if(NcentersZmat<3) nlist=1;*/ tlist[0]=g_strdup(" "); tlist[1]=g_strdup("High"); tlist[2]=g_strdup("Medium"); tlist[3]=g_strdup("Low"); hbox=create_hbox_false(vboxframe); if(iprogram != PROG_IS_MOLPRO) Entry[E_LAYER] = create_label_combo(hbox,tlabel[E_LAYER],tlist,nlist,FALSE, (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_widget_realize(Dialogue); Bouton = create_button(Dialogue,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); Bouton = create_button(Dialogue,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)addAtom, Entry[E_SYMBOL]); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)destroy_dialogue, GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); gtk_widget_show_all(Dialogue); g_free(tlist); set_entry_Zmat(); } /********************************************************************************/ static void DialogueEdit() { GtkWidget *Dialogue; GtkWidget *Bouton; GtkWidget *hbox; GtkWidget *frame; GtkWidget *vboxframe; gint nlist; gchar *tlabel[]={ " ", N_("Atom Symbol : "), N_("MM Type : "), N_("PDB Type : "), N_("Residue : "), N_("R : "), N_("Center : "), N_("Angle : "), N_("Center : "), N_("Dihedral : "), N_("Center : "), N_("Charge : "), N_("Layer : ") }; gchar **tlist=NULL; gchar **tlistvar; gint i; gint Nc; InEdit = TRUE; Nc=LineSelected; if(Nc<0 ) { if(NcentersZmat<1 ) MessageGeom(_("Create center before \n"),_("Warning"),TRUE); else MessageGeom(_("Please Select your center \n"),_("Warning"),TRUE); return; } if(Nc>0) { tlist=g_malloc(Nc*sizeof(gchar*)); for (i=0;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); Entry[E_SYMBOL] = create_label_entry(hbox,tlabel[E_SYMBOL],(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_entry_set_text(GTK_ENTRY(Entry[E_SYMBOL]),Geom[Nc].Symb); gtk_editable_set_editable((GtkEditable*) Entry[E_SYMBOL],FALSE); Bouton = gtk_button_new_with_label(" Set "); gtk_box_pack_start (GTK_BOX(hbox), Bouton, TRUE, TRUE, 5); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)SelectAtom, Entry[E_SYMBOL]); hbox=create_hbox_false(vboxframe); { gint n=0; gchar** t = getListMMTypes(&n); if(n!=0) { Entry[E_MMTYPE] = create_label_combo(hbox,tlabel[E_MMTYPE],t,n, TRUE,(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } else { Entry[E_MMTYPE] = create_label_entry(hbox,tlabel[E_MMTYPE], (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } gtk_entry_set_text(GTK_ENTRY(Entry[E_MMTYPE]),Geom[Nc].mmType); if(t) freeList(t,n); } hbox=create_hbox_false(vboxframe); { gint n=0; gchar** t = getListPDBTypes(Geom[Nc].Residue, &n); if(n!=0) { Entry[E_PDBTYPE] = create_label_combo(hbox,tlabel[E_PDBTYPE],t,n, TRUE,(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } else { Entry[E_PDBTYPE] = create_label_entry(hbox,tlabel[E_PDBTYPE], (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); } gtk_entry_set_text(GTK_ENTRY(Entry[E_PDBTYPE]),Geom[Nc].pdbType); if(t) freeList(t,n); } hbox=create_hbox_false(vboxframe); Entry[E_RESIDUE] = create_label_entry(hbox,tlabel[E_RESIDUE], (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); if(NcentersZmat==0) gtk_entry_set_text(GTK_ENTRY(Entry[E_RESIDUE]),""); else gtk_entry_set_text(GTK_ENTRY(Entry[E_RESIDUE]),Geom[Nc].Residue); tlistvar = get_list_variables(); if(Nc>0) { hbox=create_hbox_false(vboxframe); tlistvar[0] = g_strdup(Geom[Nc].R); Entry[E_R] = create_label_combo(hbox,tlabel[E_R],tlistvar,NVariables+1,TRUE, (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); Entry[E_NUMBER_R] = create_label_combo(hbox,tlabel[E_NUMBER_R],tlist,Nc,FALSE, (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*0.08)); gtk_entry_set_text(GTK_ENTRY(Entry[E_R]),Geom[Nc].R); gtk_entry_set_text(GTK_ENTRY(Entry[E_NUMBER_R]),Geom[Nc].NR); } if(Nc>1) { hbox=create_hbox_false(vboxframe); tlistvar[0] = g_strdup(Geom[Nc].Angle); Entry[E_ANGLE] = create_label_combo(hbox,tlabel[E_ANGLE],tlistvar,NVariables+1,TRUE, (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); Entry[E_NUMBER_ANGLE] = create_label_combo(hbox,tlabel[E_NUMBER_ANGLE],tlist,Nc,FALSE, (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*0.08)); gtk_entry_set_text(GTK_ENTRY(Entry[E_ANGLE]),Geom[Nc].Angle); gtk_entry_set_text(GTK_ENTRY(Entry[E_NUMBER_ANGLE]),Geom[Nc].NAngle); } if(Nc>2) { hbox=create_hbox_false(vboxframe); tlistvar[0] = g_strdup(Geom[Nc].Dihedral); Entry[E_DIHEDRAL] = create_label_combo(hbox,tlabel[E_DIHEDRAL],tlistvar,NVariables+1,TRUE, (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); Entry[E_NUMBER_DIHEDRAL] = create_label_combo(hbox,tlabel[E_NUMBER_DIHEDRAL],tlist,Nc,FALSE, (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*0.08)); gtk_entry_set_text(GTK_ENTRY(Entry[E_DIHEDRAL]),Geom[Nc].Dihedral); gtk_entry_set_text(GTK_ENTRY(Entry[E_NUMBER_DIHEDRAL]),Geom[Nc].NDihedral); } if(tlist) g_free(tlist); freelistvariables(tlistvar); hbox=create_hbox_false(vboxframe); Entry[E_CHARGE] = create_label_entry(hbox,tlabel[E_CHARGE],(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_entry_set_text(GTK_ENTRY(Entry[E_CHARGE]),Geom[Nc].Charge); tlist=g_malloc(4*sizeof(gchar*)); nlist=4; /* if(LineSelected<3) nlist=1;*/ tlist[0]=g_strdup(" "); tlist[1]=g_strdup("High"); tlist[2]=g_strdup("Medium"); tlist[3]=g_strdup("Low"); hbox=create_hbox_false(vboxframe); if(iprogram != PROG_IS_MOLPRO) { Entry[E_LAYER] = create_label_combo(hbox,tlabel[E_LAYER],tlist,nlist,FALSE, (gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_entry_set_text(GTK_ENTRY(Entry[E_LAYER]),Geom[Nc].Layer); } gtk_widget_realize(Dialogue); Bouton = create_button(Dialogue,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); Bouton = create_button(Dialogue,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)EditAtom, Entry[E_SYMBOL]); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)destroy_dialogue, GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); gtk_widget_show_all(Dialogue); g_free(tlist); } /********************************************************************************/ static void DialogueDelete() { GtkWidget *Dialogue; GtkWidget *Label; GtkWidget *Bouton; GtkWidget *frame; GtkWidget *vboxframe; if (NcentersZmat <1) { MessageGeom(_(" No Center to delet !"),_(" Warning "),TRUE); return ; } Dialogue = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(Dialogue),_("Delete Center")); gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Dialogue),GTK_WINDOW(WindowGeom)); gtk_window_set_modal (GTK_WINDOW (Dialogue), TRUE); add_child(WindowGeom,Dialogue,gtk_widget_destroy,_(" Question ")); g_signal_connect(G_OBJECT(Dialogue),"delete_event",(GCallback)delete_child,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); g_object_ref (frame); g_object_set_data_full(G_OBJECT (Dialogue), "frame", frame,(GDestroyNotify) g_object_unref); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); gtk_widget_realize(Dialogue); /* The Label */ Label = create_label_with_pixmap(Dialogue,_("\nAre you sure to delete \nthe last center? \n"),_(" Question ")); gtk_box_pack_start(GTK_BOX(vboxframe), Label,TRUE,TRUE,0); Bouton = create_button(Dialogue,"No"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); Bouton = create_button(Dialogue,"Yes"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked",(GCallback)DelAtom, NULL); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_show_all(Dialogue); } /********************************************************************************/ void put_geom_in_list() { if(Geom != NULL ) append_list_geom(); if(GeomDrawingArea != NULL) rafresh_drawing(); if(iprogram == PROG_IS_GAUSS) set_spin_of_electrons(); } /********************************************************************************/ gboolean ThisIsNotAnAtom(gchar *t) { gint i,j; gchar *temp; gchar *t1; gchar*** Symb = get_periodic_table(); temp = g_strdup(t); uppercase(temp); for ( i = 0;i0) st[0] = toupper(st[0]); for(i=1;i0) OK = TRUE; break; } } if(!OK) { gchar buffer[BSIZE]; sprintf(buffer,_("Sorry, I cannot read the Z-Matrix from the %s file"),fileName); MessageGeom(buffer,_("Error"),TRUE); return -1; } for(i=0;i<7;i++) AtomCoord[i]=g_malloc(BSIZE*sizeof(gchar)); Geomtemp=g_malloc(sizeof(GeomAtomDef)); /* First atom */ { { char* e = fgets(t,BSIZE,file);} i = sscanf(t,"%s",AtomCoord[0]); if( i == 1 ) { deleteNumericChars(AtomCoord[0]); Ncent ++; Geomtemp=g_malloc(sizeof(GeomAtomDef)); Geomtemp[Ncent-1].Nentry=NUMBER_ENTRY_0; Geomtemp[Ncent-1].Symb=g_strdup(AtomCoord[0]); Geomtemp[Ncent-1].mmType=g_strdup(AtomCoord[0]); Geomtemp[Ncent-1].pdbType=g_strdup(AtomCoord[0]); Geomtemp[Ncent-1].Residue=g_strdup(" "); Geomtemp[Ncent-1].ResidueNumber=0; Geomtemp[Ncent-1].Charge=g_strdup("0.0"); Geomtemp[Ncent-1].Layer=g_strdup(" "); } else { OK = FALSE; Ncent--; g_free(Geomtemp); Geomtemp = NULL; } } j=-1; while( !feof(file) && OK) { j++; { char* e = fgets(t,BSIZE,file);} uppercase(t); if(strstr(t,"END") && strstr(t,"MATRIX")) break; if(strstr(t,"VARIABLE")) break; Ncent++; Geomtemp=g_realloc(Geomtemp,Ncent*sizeof(GeomAtomDef)); Geomtemp[Ncent-1].Symb=NULL; Geomtemp[Ncent-1].mmType=NULL; Geomtemp[Ncent-1].pdbType=NULL; Geomtemp[Ncent-1].NR=NULL; Geomtemp[Ncent-1].R=NULL; Geomtemp[Ncent-1].NAngle=NULL; Geomtemp[Ncent-1].Angle=NULL; Geomtemp[Ncent-1].NDihedral=NULL; Geomtemp[Ncent-1].Dihedral=NULL; Geomtemp[Ncent-1].Charge=NULL; Geomtemp[Ncent-1].Layer=NULL; switch(Ncent) { case 2 : i = sscanf(t,"%s %s %s ",AtomCoord[0],AtomCoord[1],AtomCoord[2]) ; deleteNumericChars(AtomCoord[0]); if(i == 3 && test(AtomCoord[2])) { Geomtemp[Ncent-1].Nentry=NUMBER_ENTRY_R; Geomtemp[Ncent-1].Symb=g_strdup(AtomCoord[0]); Geomtemp[Ncent-1].mmType=g_strdup(AtomCoord[0]); Geomtemp[Ncent-1].pdbType=g_strdup(AtomCoord[0]); Geomtemp[Ncent-1].Residue=g_strdup(" "); Geomtemp[Ncent-1].ResidueNumber=0; Geomtemp[Ncent-1].NR=g_strdup(AtomCoord[1]); Geomtemp[Ncent-1].R=g_strdup(AtomCoord[2]); Geomtemp[Ncent-1].Charge=g_strdup("0.0"); Geomtemp[Ncent-1].Layer=g_strdup(" "); } else { Ncent--; Geomtemp=g_realloc(Geomtemp,Ncent*sizeof(GeomAtomDef)); OK = FALSE; } break; case 3 : i = sscanf( t,"%s %s %s %s %s", AtomCoord[0],AtomCoord[1],AtomCoord[2], AtomCoord[3],AtomCoord[4] ) ; deleteNumericChars(AtomCoord[0]); if(i == 5 && test(AtomCoord[2]) && test(AtomCoord[4])) { Geomtemp[Ncent-1].Nentry=NUMBER_ENTRY_ANGLE; Geomtemp[Ncent-1].Symb=g_strdup(AtomCoord[0]); Geomtemp[Ncent-1].mmType=g_strdup(AtomCoord[0]); Geomtemp[Ncent-1].pdbType=g_strdup(AtomCoord[0]); Geomtemp[Ncent-1].Residue=g_strdup(" "); Geomtemp[Ncent-1].ResidueNumber=0; Geomtemp[Ncent-1].NR=g_strdup(AtomCoord[1]); Geomtemp[Ncent-1].R=g_strdup(AtomCoord[2]); Geomtemp[Ncent-1].NAngle=g_strdup(AtomCoord[3]); Geomtemp[Ncent-1].Angle=g_strdup(AtomCoord[4]); Geomtemp[Ncent-1].Charge=g_strdup("0.0"); Geomtemp[Ncent-1].Layer=g_strdup(" "); } else { Ncent--; Geomtemp=g_realloc(Geomtemp,Ncent*sizeof(GeomAtomDef)); OK = FALSE; } break; default : i = sscanf( t,"%s %s %s %s %s %s %s ", AtomCoord[0],AtomCoord[1],AtomCoord[2],AtomCoord[3], AtomCoord[4],AtomCoord[5],AtomCoord[6] ); deleteNumericChars(AtomCoord[0]); if(i == 7 && test(AtomCoord[2]) && test(AtomCoord[4]) && test(AtomCoord[6])) { Geomtemp[Ncent-1].Nentry=NUMBER_ENTRY_DIHEDRAL; Geomtemp[Ncent-1].Symb=g_strdup(AtomCoord[0]); Geomtemp[Ncent-1].mmType=g_strdup(AtomCoord[0]); Geomtemp[Ncent-1].pdbType=g_strdup(AtomCoord[0]); Geomtemp[Ncent-1].Residue=g_strdup(" "); Geomtemp[Ncent-1].ResidueNumber=0; Geomtemp[Ncent-1].NR=g_strdup(AtomCoord[1]); Geomtemp[Ncent-1].R=g_strdup(AtomCoord[2]); Geomtemp[Ncent-1].NAngle=g_strdup(AtomCoord[3]); Geomtemp[Ncent-1].Angle=g_strdup(AtomCoord[4]); Geomtemp[Ncent-1].NDihedral=g_strdup(AtomCoord[5]); Geomtemp[Ncent-1].Dihedral=g_strdup(AtomCoord[6]); Geomtemp[Ncent-1].Charge=g_strdup("0.0"); Geomtemp[Ncent-1].Layer=g_strdup(" "); } else { Ncent--; Geomtemp=g_realloc(Geomtemp,Ncent*sizeof(GeomAtomDef)); OK = FALSE; } } } for(i=0;i<7;i++) g_free(AtomCoord[i]); if( !OK || Ncent <1 ) { MessageGeom(_("Sorry\n I can not read geometry from you Molcas input file"),_("Error"),TRUE); return -1; } get_charge_and_multiplicity_from_molcas_input_file(file); fclose(file); if(Geom) freeGeom(); if(Variables) freeVariables(); Geom = Geomtemp; NcentersZmat = Ncent; NVariables = 0; Variables = NULL; MethodeGeom = GEOM_IS_ZMAT; if(Units== 0 ) Geom_Change_Unit(FALSE); if(GeomIsOpen) create_geom_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); if(GeomDrawingArea != NULL) rafresh_drawing(); set_last_directory(fileName); return 0; } /*************************************************************************************/ void read_Zmat_from_molpro_input_file(gchar *NomFichier, FilePosTypeGeom InfoFile ) { gchar *t; gchar *t1; gchar *t2; gchar *t3; gboolean OK; gchar *AtomCoord[7]; FILE *fd; guint taille=BSIZE; guint i; gint j; gint k; gint Kvar=0; gboolean Uvar=FALSE; GeomAtomDef* Geomtemp=NULL; gint Ncent = 0; gint Nvar = 0; VariablesDef* Variablestemp=NULL; for(i=0;i<7;i++) AtomCoord[i]=g_malloc(taille*sizeof(gchar)); t=g_malloc(taille); /* Read Geomery */ fd = FOpen(NomFichier, "rb"); OK=TRUE; if(fd!=NULL) { for(i=0;(gint)i=2) co[1] = Geomtemp[j].Angle; if(j>=3) co[2] = Geomtemp[j].Dihedral; /* printf("j = %d \n",j);*/ for(k=0;k<3;k++) if(co[k] && !test(co[k])) { gchar* b = strstr(t,co[k]); /* printf("co = %s t = %s\n",co[k],t);*/ if(b) { b = b+strlen(co[k])+1; Nvar++; if(Nvar==1) Variablestemp = g_malloc(Nvar*sizeof(VariablesDef)); else Variablestemp = g_realloc(Variablestemp,Nvar*sizeof(VariablesDef)); Variablestemp[Nvar-1].Name=g_strdup(co[k]); Variablestemp[Nvar-1].Value=g_strdup_printf("%f",atof(b)); Variablestemp[Nvar-1].Used=TRUE; } } } if(strstr(t,"}")) break; } /* end while variables */ fclose(file); if(OK) { TotalCharges[0] = globalCharge; SpinMultiplicities[0] = mult; } g_free(t); for(i=0;i<7;i++) g_free(AtomCoord[i]); if( !OK || Ncent <1 ) { FreeGeom(Geomtemp,Variablestemp,Ncent,Nvar); MessageGeom(_("Sorry\n I can not read geometry in Psicode input file"),_("Error"),TRUE); return; } if(Geom) freeGeom(); if(Variables) freeVariables(); Geom = Geomtemp; NcentersZmat = Ncent; NVariables = Nvar; Variables = Variablestemp; MethodeGeom = GEOM_IS_ZMAT; if( Units== 0 ) Geom_Change_Unit(FALSE); if(GeomIsOpen) create_geom_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN); if(GeomDrawingArea != NULL) rafresh_drawing(); set_last_directory(NomFichier); } /*************************************************************************************/ void read_Zmat_from_orca_input_file(gchar *NomFichier) { gchar *t; gboolean OK; gchar *AtomCoord[7]; FILE *file; guint taille=BSIZE; guint i; gint j; gint k; gboolean Uvar=FALSE; GeomAtomDef* Geomtemp=NULL; gint Ncent = 0; gint Nvar = 0; VariablesDef* Variablestemp=NULL; gchar symb[BSIZE]; gchar type[BSIZE]; gchar charge[BSIZE]; gint globalCharge, mult; gint l; if ( strcmp(NomFichier,"") == 0 ) return; file = FOpen(NomFichier, "rb"); OK=TRUE; if(file==NULL) { MessageGeom(_("Sorry\n I can not read geometry in Orca input file"),_("Error"),TRUE); return; } t=g_malloc(taille*sizeof(gchar)); for(i=0;i<5;i++) AtomCoord[i]=g_malloc(taille*sizeof(char)); while(!feof(file)) { if(!fgets(t,taille,file)) { OK = FALSE; break; } uppercase(t); if(strstr(t,"* INT") && 4==sscanf(t,"%s %s %d %d",AtomCoord[0],AtomCoord[1],&globalCharge, &mult) ) { OK = TRUE; break; } } for(i=0;i<7;i++) AtomCoord[i]=g_malloc(taille*sizeof(gchar)); Ncent = 0; while(!feof(file) && OK ) { { char* e = fgets(t,taille,file);} for(i=0;i<(gint)strlen(t);i++) if(t[i] != ' ') break; if(i<=(gint)strlen(t) && t[i] == '*') break; for(k=0;k<(gint)strlen(t);k++) if(t[k]=='{' || t[k]=='}') t[k] = ' '; i = sscanf(t,"%s ",AtomCoord[0]); if(i != 1) { OK = FALSE; break; } Ncent++; if(Ncent==1) Geomtemp=g_malloc(Ncent*sizeof(GeomAtomDef)); else Geomtemp=g_realloc(Geomtemp,Ncent*sizeof(GeomAtomDef)); switch( Ncent ){ case 1 : Geomtemp[Ncent-1].Nentry=NUMBER_ENTRY_0; l=strlen(AtomCoord[0]); if (l>=2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); if(!strcmp(AtomCoord[0],"Da")) sprintf(AtomCoord[0],"X"); get_symb_type_charge(AtomCoord[0],symb,type,charge); Geomtemp[Ncent-1].Symb = g_strdup(symb); Geomtemp[Ncent-1].mmType = g_strdup(type); Geomtemp[Ncent-1].pdbType = g_strdup(type); Geomtemp[Ncent-1].Charge=g_strdup(charge); Geomtemp[Ncent-1].Residue=g_strdup("DUM"); Geomtemp[Ncent-1].ResidueNumber=0; Geomtemp[Ncent-1].Layer=g_strdup(" "); break; case 2 : i = sscanf( t,"%s %s %s %s %s", AtomCoord[0],AtomCoord[1],AtomCoord[2], AtomCoord[3],AtomCoord[4] ); if( i != 5 ) { Ncent--; Geomtemp=g_realloc(Geomtemp,Ncent*sizeof(GeomAtomDef)); OK = FALSE; } if( !test(AtomCoord[4]) ) Uvar = TRUE; Geomtemp[Ncent-1].Nentry=NUMBER_ENTRY_R; l=strlen(AtomCoord[0]); if (l>=2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); if(!strcmp(AtomCoord[0],"Da")) sprintf(AtomCoord[0],"X"); get_symb_type_charge(AtomCoord[0],symb,type,charge); Geomtemp[Ncent-1].Symb = g_strdup(symb); Geomtemp[Ncent-1].mmType = g_strdup(type); Geomtemp[Ncent-1].pdbType = g_strdup(type); Geomtemp[Ncent-1].Charge=g_strdup(charge); Geomtemp[Ncent-1].Residue=g_strdup("DUM"); Geomtemp[Ncent-1].ResidueNumber=0; Geomtemp[Ncent-1].NR=g_strdup(AtomCoord[1]); Geomtemp[Ncent-1].R=g_strdup(AtomCoord[4]); Geomtemp[Ncent-1].Layer=g_strdup(" "); break; case 3 : i = sscanf( t,"%s %s %s %s %s %s", AtomCoord[0],AtomCoord[1],AtomCoord[2], AtomCoord[3],AtomCoord[4],AtomCoord[5] ); if(i != 6) { Ncent--; Geomtemp=g_realloc(Geomtemp,Ncent*sizeof(GeomAtomDef)); OK = FALSE; } if(!test(AtomCoord[4]) || !test(AtomCoord[5]) ) Uvar = TRUE; Geomtemp[Ncent-1].Nentry=NUMBER_ENTRY_ANGLE; l=strlen(AtomCoord[0]); if (l>=2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); if(!strcmp(AtomCoord[0],"Da")) sprintf(AtomCoord[0],"X"); get_symb_type_charge(AtomCoord[0],symb,type,charge); Geomtemp[Ncent-1].Symb = g_strdup(symb); Geomtemp[Ncent-1].mmType = g_strdup(type); Geomtemp[Ncent-1].pdbType = g_strdup(type); Geomtemp[Ncent-1].Charge=g_strdup(charge); Geomtemp[Ncent-1].Residue=g_strdup("DUM"); Geomtemp[Ncent-1].ResidueNumber=0; Geomtemp[Ncent-1].NR=g_strdup(AtomCoord[1]); Geomtemp[Ncent-1].R=g_strdup(AtomCoord[4]); Geomtemp[Ncent-1].NAngle=g_strdup(AtomCoord[2]); Geomtemp[Ncent-1].Angle=g_strdup(AtomCoord[5]); Geomtemp[Ncent-1].Layer=g_strdup(" "); break; default : i = sscanf( t,"%s %s %s %s %s %s %s", AtomCoord[0],AtomCoord[1],AtomCoord[2], AtomCoord[3],AtomCoord[4],AtomCoord[5],AtomCoord[6] ); if( i!= 7) { Ncent--; Geomtemp=g_realloc(Geomtemp,Ncent*sizeof(GeomAtomDef)); OK = FALSE; } if(!test(AtomCoord[4]) || !test(AtomCoord[5]) || !test(AtomCoord[6])) Uvar = TRUE; Geomtemp[Ncent-1].Nentry=NUMBER_ENTRY_DIHEDRAL; l=strlen(AtomCoord[0]); if (l>=2) AtomCoord[0][1]=tolower(AtomCoord[0][1]); if(!strcmp(AtomCoord[0],"Da")) sprintf(AtomCoord[0],"X"); get_symb_type_charge(AtomCoord[0],symb,type,charge); Geomtemp[Ncent-1].Symb = g_strdup(symb); Geomtemp[Ncent-1].mmType = g_strdup(type); Geomtemp[Ncent-1].pdbType = g_strdup(type); Geomtemp[Ncent-1].Charge=g_strdup(charge); Geomtemp[Ncent-1].Residue=g_strdup("DUM"); Geomtemp[Ncent-1].ResidueNumber=0; Geomtemp[Ncent-1].NR=g_strdup(AtomCoord[1]); Geomtemp[Ncent-1].R=g_strdup(AtomCoord[4]); Geomtemp[Ncent-1].NAngle=g_strdup(AtomCoord[2]); Geomtemp[Ncent-1].Angle=g_strdup(AtomCoord[5]); Geomtemp[Ncent-1].NDihedral=g_strdup(AtomCoord[3]); Geomtemp[Ncent-1].Dihedral=g_strdup(AtomCoord[6]); Geomtemp[Ncent-1].Layer=g_strdup(" "); }/*end switch*/ }/*end while*/ /* Variables */ Nvar=0; fseek(file, 0L, SEEK_SET); if(Uvar) { OK =FALSE; while(!feof(file) && Uvar) { if(!fgets(t,taille,file)) break; uppercase(t); if(strstr(t,"PARAS")) { OK = TRUE; break; } } } while(!feof(file) && Uvar && OK ) { uppercase(t); for(k=0;k<(gint)strlen(t);k++) if(t[k]=='=') t[k] = ' '; for(j=0;j0 && atoi(AtomCoord[2])==1)trans_coord_Zmat('R',i,FALSE); if(NcentersZmat>1 && atoi(AtomCoord[4])==1)trans_coord_Zmat('A',i,FALSE); if(NcentersZmat>2 && atoi(AtomCoord[6])==1)trans_coord_Zmat('D',i,FALSE); } fseek(fd, 0L, SEEK_SET); get_charge_and_multiplicity_from_mopac_input_file(fd); fclose(fd); for(i=0;i<10;i++) g_free(AtomCoord[i]); for (i=0;i1 && atoi(AtomCoord[2])==1)trans_coord_Zmat('R',i,FALSE); if(NcentersZmat>2 && atoi(AtomCoord[4])==1)trans_coord_Zmat('A',i,FALSE); if(NcentersZmat>3 && atoi(AtomCoord[6])==1)trans_coord_Zmat('D',i,FALSE); } fseek(fd, 0L, SEEK_SET); get_charge_and_multiplicity_from_mopac_output_file(fd); fclose(fd); for(i=0;i<10;i++) g_free(AtomCoord[i]); for (i=0;i1 && atoi(AtomCoord[2])==1)trans_coord_Zmat('R',i,FALSE); if(NcentersZmat>2 && atoi(AtomCoord[4])==1)trans_coord_Zmat('A',i,FALSE); if(NcentersZmat>3 && atoi(AtomCoord[6])==1)trans_coord_Zmat('D',i,FALSE); } fseek(fd, 0L, SEEK_SET); get_charge_and_multiplicity_from_mopac_output_file(fd); fclose(fd); for(i=0;i<10;i++) g_free(AtomCoord[i]); for (i=0;i0) n++; */ if(NcentersZmat<=3) n = NcentersZmat -1; else n = 3; return n; } /********************************************************************************/ static void set_center(gchar* info[]) { gint n = get_number_connection(info); switch(n) { case 0 : Geom[NcentersZmat-1].Nentry=NUMBER_ENTRY_0; Geom[NcentersZmat-1].Symb=g_strdup(info[0]); Geom[NcentersZmat-1].mmType=g_strdup(info[0]); Geom[NcentersZmat-1].pdbType=g_strdup(info[0]); Geom[NcentersZmat-1].Residue=g_strdup(" "); Geom[NcentersZmat-1].ResidueNumber=0; Geom[NcentersZmat-1].Charge=g_strdup("0.0"); Geom[NcentersZmat-1].Layer=g_strdup(" "); break; case 1 : Geom[NcentersZmat-1].Nentry=NUMBER_ENTRY_R; Geom[NcentersZmat-1].Symb=g_strdup(info[0]); Geom[NcentersZmat-1].mmType=g_strdup(info[0]); Geom[NcentersZmat-1].pdbType=g_strdup(info[0]); Geom[NcentersZmat-1].Residue=g_strdup(" "); Geom[NcentersZmat-1].ResidueNumber=0; Geom[NcentersZmat-1].NR=g_strdup(info[7]); Geom[NcentersZmat-1].R=g_strdup(info[1]); Geom[NcentersZmat-1].Charge=g_strdup("0.0"); Geom[NcentersZmat-1].Layer=g_strdup(" "); break; case 2 : Geom[NcentersZmat-1].Nentry=NUMBER_ENTRY_ANGLE; Geom[NcentersZmat-1].Symb=g_strdup(info[0]); Geom[NcentersZmat-1].mmType=g_strdup(info[0]); Geom[NcentersZmat-1].pdbType=g_strdup(info[0]); Geom[NcentersZmat-1].Residue=g_strdup(" "); Geom[NcentersZmat-1].ResidueNumber=0; Geom[NcentersZmat-1].NR=g_strdup(info[7]); Geom[NcentersZmat-1].R=g_strdup(info[1]); Geom[NcentersZmat-1].NAngle=g_strdup(info[8]); Geom[NcentersZmat-1].Angle=g_strdup(info[3]); Geom[NcentersZmat-1].Charge=g_strdup("0.0"); Geom[NcentersZmat-1].Layer=g_strdup(" "); break; case 3 : Geom[NcentersZmat-1].Nentry=NUMBER_ENTRY_DIHEDRAL; Geom[NcentersZmat-1].Symb=g_strdup(info[0]); Geom[NcentersZmat-1].mmType=g_strdup(info[0]); Geom[NcentersZmat-1].pdbType=g_strdup(info[0]); Geom[NcentersZmat-1].Residue=g_strdup(" "); Geom[NcentersZmat-1].ResidueNumber=0; Geom[NcentersZmat-1].NR=g_strdup(info[7]); Geom[NcentersZmat-1].R=g_strdup(info[1]); Geom[NcentersZmat-1].NAngle=g_strdup(info[8]); Geom[NcentersZmat-1].Angle=g_strdup(info[3]); Geom[NcentersZmat-1].NDihedral=g_strdup(info[9]); Geom[NcentersZmat-1].Dihedral=g_strdup(info[5]); Geom[NcentersZmat-1].Charge=g_strdup("0.0"); Geom[NcentersZmat-1].Layer=g_strdup(" "); break; } } /********************************************************************************/ static gint get_info_one_center(gchar* t, gchar* info[]) { gint i = sscanf(t,"%s %s %s %s %s %s %s %s %s %s", info[0],info[1],info[2],info[3],info[4], info[5],info[6],info[7],info[8],info[9]); if(i<10) return EOF; else return i; } /********************************************************************************/ void read_ZMatrix_mopac_file_no_add_list(gchar*FileName) { gchar *t; gboolean OK; gchar *AtomCoord[10]; FILE *fd; guint taille=BSIZE; guint i,l; for(i=0;i<10;i++) AtomCoord[i]=g_malloc(taille*sizeof(gchar)); fd = FOpen(FileName, "rb"); if(fd == NULL) { t = g_strdup_printf(_("Sorry\n I can not open \"%s\" file"),FileName); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } t=g_malloc(taille); OK = TRUE; for(i=0;i<4;i++) { { char* e = fgets(t,taille,fd);} if(feof(fd)) { OK = FALSE; break; } } if(!OK) { g_free(t); t = g_strdup_printf(_("Sorry\n I can not read \"%s\" file"),FileName); MessageGeom(t,_("Error"),TRUE); g_free(t); return; } if( get_info_one_center(t,AtomCoord) == EOF) { MessageGeom(_("Sorry\n This is not a Zmatrix mopac file"),_("Error"),TRUE); g_free(t); for(i=0;i<10;i++) g_free(AtomCoord[i]); freeGeom(); freeVariables(); fclose(fd); return; } NcentersZmat=0; NcentersZmat++; Geom=g_malloc(sizeof(GeomAtomDef)); set_center(AtomCoord); while(!feof(fd) ) { { char* e = fgets(t,taille,fd);} if(feof(fd)) break; if(this_is_a_backspace(t)) break; if( get_info_one_center(t,AtomCoord) == EOF) break; NcentersZmat++; Geom=g_realloc(Geom,NcentersZmat*sizeof(GeomAtomDef)); set_center(AtomCoord); } /* Variable */ NVariables=0; fclose(fd); for(i=0;i<10;i++) g_free(AtomCoord[i]); for (i=0;i0) { imin=LineSelectedV; removeFromList(listv, LineSelectedV); for(i=imin;i<(gint)NVariables-1;i++) { Variables[i].Name=g_strdup(Variables[i+1].Name); Variables[i].Value=g_strdup(Variables[i+1].Value); Variables[i].Used=Variables[i+1].Used; } NVariables--; if(NVariables>0) Variables=g_realloc(Variables,NVariables*sizeof(VariablesDef)); else freeVariables(); } LineSelectedV=-1; } /********************************************************************************/ static gboolean TestVariablesCreated(gchar *NewName,gint j) { guint i; gboolean k; k=FALSE; for (i=0;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); gtk_widget_realize(Dialogue); message = g_strdup_printf("\n Are you sure to delete the variable\n %s\n?",Variables[LineSelectedV].Name); Label = create_label_with_pixmap(Dialogue,message," Question "); gtk_box_pack_start(GTK_BOX(vboxframe), Label,TRUE,TRUE,0); Bouton = create_button(Dialogue,"No"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); Bouton = create_button(Dialogue,"Yes"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked",(GCallback)DelVariable, NULL); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_show_all(Dialogue); } /********************************************************************************/ static void DialogueEditV() { GtkWidget *Dialogue; GtkWidget *Bouton; GtkWidget *hbox; GtkWidget *frame; GtkWidget *vboxframe; gint Nc; gchar *tlabel[]={" Name : ", " Value : "}; Nc=LineSelectedV; if(Nc<0 ) { if(NVariables<1) MessageGeom(_("Create variable before \n"),_("Warning"),TRUE); else MessageGeom(_("Please Select your variable \n"),_("Warning"),TRUE); return; } Dialogue = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(Dialogue),_("Edit Variable")); gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Dialogue),GTK_WINDOW(WindowGeom)); add_child(WindowGeom,Dialogue,gtk_widget_destroy,_(" Edit variable ")); g_signal_connect(G_OBJECT(Dialogue),"delete_event",(GCallback)delete_child,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); g_object_ref (frame); g_object_set_data_full(G_OBJECT (Dialogue), "frame", frame,(GDestroyNotify) g_object_unref); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); EntryV[0] = create_label_entry(hbox,tlabel[0],(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_entry_set_text(GTK_ENTRY(EntryV[0]),Variables[Nc].Name); if(Variables[Nc].Used) gtk_editable_set_editable((GtkEditable*) EntryV[0],FALSE); hbox=create_hbox_false(vboxframe); EntryV[1] = create_label_entry(hbox,tlabel[1],(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_entry_set_text(GTK_ENTRY(EntryV[1]),Variables[Nc].Value); gtk_widget_realize(Dialogue); Bouton = create_button(Dialogue,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); Bouton = create_button(Dialogue,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)EditVariable, NULL); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)destroy_dialogue, GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); gtk_widget_show_all(Dialogue); } /********************************************************************************/ static void AddVariable(GtkWidget *w,gpointer Entree) { gchar *texts[2]; gchar *message; DestroyDialog=TRUE; texts[0] = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryV[0]))); texts[1] = g_strdup(gtk_entry_get_text(GTK_ENTRY(EntryV[1]))); if(!variable_name_valid(texts[0])) { show_forbidden_characters(); DestroyDialog = FALSE; return; } if(TestVariablesCreated(texts[0],-1)) { MessageGeom(_("Sorry a other variable have any Name !\n"),_("Warning"),TRUE); DestroyDialog=FALSE; return; } if ( strcmp(texts[0], "") && strcmp(texts[1], "") ) NVariables++; else { MessageGeom(_("Sorry a Entry text is void !\n"),_("Warning"),TRUE); DestroyDialog=FALSE; return; } if(Variables==NULL) Variables=g_malloc(sizeof(VariablesDef)); else Variables=g_realloc(Variables,NVariables*sizeof(VariablesDef)); if(test(texts[1]) && !testpointeE(texts[1]) ) texts[1]=g_strdup_printf("%s.0",texts[1]); Variables[NVariables-1].Name=g_strdup(texts[0]); Variables[NVariables-1].Value=g_strdup(texts[1]); Variables[NVariables-1].Used=FALSE; if(!test(texts[1])) { message=g_strdup_printf(_("Sorry %s is not a number \n"),texts[1]); MessageGeom(message,_("Warning"),TRUE); DestroyDialog=FALSE; NVariables--; if(NVariables>0) Variables=g_realloc(Variables,NVariables*sizeof(VariablesDef)); else Variables=NULL; } else appendToList(listv, texts, 2); } /********************************************************************************/ static void DialogueAddV() { GtkWidget *Dialogue; GtkWidget *Bouton; GtkWidget *hbox; GtkWidget *frame; GtkWidget *vboxframe; gchar *tlabel[]={" Name : ", " Value : "}; Dialogue = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(Dialogue),"New Variable"); gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Dialogue),GTK_WINDOW(WindowGeom)); add_child(WindowGeom,Dialogue,gtk_widget_destroy," New Variable "); g_signal_connect(G_OBJECT(Dialogue),"delete_event",(GCallback)delete_child,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); g_object_ref (frame); g_object_set_data_full(G_OBJECT (Dialogue), "frame", frame,(GDestroyNotify) g_object_unref); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); EntryV[0] = create_label_entry(hbox,tlabel[0],(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); hbox=create_hbox_false(vboxframe); EntryV[1] = create_label_entry(hbox,tlabel[1],(gint)(ScreenHeight*labelWidth),(gint)(ScreenHeight*entryWidth)); gtk_widget_realize(Dialogue); Bouton = create_button(Dialogue,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)delete_child,GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); Bouton = create_button(Dialogue,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)AddVariable, NULL); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)destroy_dialogue, GTK_OBJECT(Dialogue)); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); gtk_widget_show_all(Dialogue); } /********************************************************************************/ void create_variables_list(GtkWidget *vbox,GabEditTypeFileGeom itype) { GtkListStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkWidget *scr; guint i; guint Factor=7; guint widall=0; gchar *titres[2]={ " Name "," value "}; guint width[2]={8,8 }; GtkUIManager *manager = NULL; if(itype != GABEDIT_TYPEFILEGEOM_UNKNOWN) freeVariables(); LineSelectedV=-1; for(i=0;i<2;i++) widall+=width[i]; widall=widall*Factor+50; scr=gtk_scrolled_window_new(NULL,NULL); gtk_widget_set_size_request(scr,widall,(gint)(ScreenHeight*0.4)); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scr),GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX (vbox), scr,TRUE, TRUE, 2); store = gtk_list_store_new (4, G_TYPE_STRING, G_TYPE_BOOLEAN,G_TYPE_STRING,G_TYPE_BOOLEAN); model = GTK_TREE_MODEL (store); listv = gtk_tree_view_new_with_model (model); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (listv), TRUE); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (listv), TRUE); gtk_tree_view_set_reorderable(GTK_TREE_VIEW (listv), TRUE); for (i=0;(gint)i<2;i++) { column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, titres[i]); gtk_tree_view_column_set_min_width(column, width[i]*Factor); gtk_tree_view_column_set_reorderable(column, TRUE); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", i+i, "editable",i+i+1,NULL); g_object_set_data(G_OBJECT(renderer),"NumColumn", GINT_TO_POINTER(i)); g_signal_connect (renderer, "edited", G_CALLBACK (editedVariable), model); gtk_tree_view_append_column (GTK_TREE_VIEW (listv), column); } gtk_container_add(GTK_CONTAINER(scr),listv); set_base_style(listv,58000,58000,58000); gtk_widget_show (listv); if(WindowGeom) manager = newMenuZMatVariables(WindowGeom); else manager = newMenuZMatVariables(Fenetre); if(Geom != NULL && Variables != NULL) append_list_variables(); g_signal_connect(G_OBJECT (listv), "button_press_event", G_CALLBACK(event_dispatcher), manager); } /********************************************************************************/ static void multi_by_factor(gdouble factor) { gint i; guint j; for (i=1;(guint)i #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/InterfaceGeom.h" #include "../Geometry/MenuToolBarGeom.h" static GtkWidget* Entrys[6]; static GtkWidget* WinTable = NULL; static gboolean First = TRUE; /********************************************************************************/ static void build_rozphi_molecule(GtkWidget *w,gpointer data) { G_CONST_RETURN gchar *t; gint Nc; gdouble Distance; gdouble Ro; G_CONST_RETURN gchar* Symb; gint j; gdouble angle; gdouble X; gdouble Y; gdouble Z; gint N0=0; gdouble phi=0; if(First) { unselect_all_atoms(); if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(VariablesXYZ); NcentersXYZ = 0; } N0 = NcentersXYZ; First = FALSE; Symb = gtk_entry_get_text(GTK_ENTRY(Entrys[0])); t = gtk_entry_get_text(GTK_ENTRY(Entrys[1])); Nc = atoi(t); t = gtk_entry_get_text(GTK_ENTRY(Entrys[2])); Distance = atof(t); if(Nc==1) Distance = 0.0; t = gtk_entry_get_text(GTK_ENTRY(Entrys[4])); Z = atof(t); t = gtk_entry_get_text(GTK_ENTRY(Entrys[5])); phi = atof(t); if(Units==0) { Distance *= ANG_TO_BOHR; Z *= ANG_TO_BOHR; } if(Nc<1) return; angle = (360.0/Nc)*DEG_TO_RAD; Ro = sqrt(2*(1-cos(angle) )); Ro = Distance/Ro; phi *= DEG_TO_RAD; init_dipole(); NcentersXYZ += Nc; if(!GeomXYZ) GeomXYZ=g_malloc(NcentersXYZ*sizeof(GeomXYZAtomDef)); else GeomXYZ=g_realloc(GeomXYZ,NcentersXYZ*sizeof(GeomXYZAtomDef)); for(j=N0;j1) gtk_entry_set_text(GTK_ENTRY(Entrys[3]),t); else gtk_entry_set_text(GTK_ENTRY(Entrys[3]),"0.0"); g_free(t); } /********************************************************************************/ static void set_atom(GtkWidget *w,gpointer data) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),(char *)data); gtk_editable_set_editable((GtkEditable*) Entrys[0],FALSE); gtk_widget_destroy(WinTable); set_entry_distance(NULL,data); } /********************************************************************************/ static void select_atom(GtkWidget *w,gpointer entry0) { GtkWidget* Table; GtkWidget* button; GtkWidget* frame; guint i; guint j; GtkStyle *button_style; GtkStyle *style; gchar*** Symb = get_periodic_table(); WinTable = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(WinTable),TRUE); gtk_window_set_title(GTK_WINDOW(WinTable),_("Select your atom")); gtk_window_set_default_size (GTK_WINDOW(WinTable),(gint)(ScreenWidth*0.5),(gint)(ScreenHeight*0.4)); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_container_add(GTK_CONTAINER(WinTable),frame); gtk_widget_show (frame); Table = gtk_table_new(PERIODIC_TABLE_N_ROWS-1,PERIODIC_TABLE_N_COLUMNS,TRUE); gtk_container_add(GTK_CONTAINER(frame),Table); button_style = gtk_widget_get_style(WinTable); for ( i = 0;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(6,4,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); for(i=0;iaction_area), FALSE); Button = create_button(Dlg,_("Close")); gtk_box_pack_end (GTK_BOX(GTK_DIALOG(Dlg)->action_area), Button, FALSE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(Button), "clicked",(GCallback)delete_child,GTK_OBJECT(Dlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(GTK_DIALOG(Dlg)->vbox); gtk_widget_show_all(GTK_DIALOG(Dlg)->action_area); gtk_widget_show_now(Dlg); fit_windows_position(GeomDlg, Dlg); } GabeditSrc250/src/Geometry/TreeMolecule.c0000644000175100017510000002365613130665226020623 0ustar alloucheallouche/* TreeMolecule.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Geometry/GeomGlobal.h" #include "../Utils/Vector3d.h" #include "../Utils/Transformation.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Geometry/TreeMolecule.h" /************************************************************************/ static void freeStack(TreeMolecule* treeMolecule) { if(treeMolecule->inStack) g_free(treeMolecule->inStack); treeMolecule->inStack = NULL; } /************************************************************************/ static void initStack(TreeMolecule* treeMolecule) { gint i; /* if(treeMolecule->inStack) freeStack(treeMolecule);*/ treeMolecule->inStack = g_malloc(treeMolecule->nAtoms*sizeof(gboolean)); for(i=0;inAtoms;i++) treeMolecule->inStack[i] = FALSE; } /************************************************************************/ static void freeConnections(TreeMolecule* treeMolecule) { gint i; if(!treeMolecule->connected) return; for(i=0;inAtoms;i++) { if(treeMolecule->connected[i]) g_free(treeMolecule->connected[i]); } g_free(treeMolecule->connected); treeMolecule->connected = NULL; treeMolecule->nAtoms = 0; } /************************************************************************/ static void disconnect(TreeMolecule* treeMolecule, gint n1, gint n2) { gint i; gint k; if(treeMolecule->nAtoms<1) return; for(k=1;k<=treeMolecule->connected[n1][0];k++) { if(treeMolecule->connected[n1][k]==n2) { for(i=k;iconnected[n1][0];i++) treeMolecule->connected[n1][i]=treeMolecule->connected[n1][i+1]; treeMolecule->connected[n1][0]--; break; } } for(k=1;k<=treeMolecule->connected[n2][0];k++) { if(treeMolecule->connected[n2][k]==n1) { for(i=k;iconnected[n2][0];i++) treeMolecule->connected[n2][i]=treeMolecule->connected[n2][i+1]; treeMolecule->connected[n2][0]--; break; } } } /************************************************************************/ static void initConnections(TreeMolecule* treeMolecule, GeomDef* geom) { gint i; gint j; gint k; gint nj; if(treeMolecule->nAtoms<1) return; treeMolecule->connected = g_malloc(treeMolecule->nAtoms*sizeof(gint*)); for(i=0;inAtoms;i++) { treeMolecule->connected[i] = g_malloc((treeMolecule->nAtoms+1)*sizeof(gint)); treeMolecule->connected[i][0] = 0; } for(i=0;inAtoms;i++) if(geom[i].typeConnections) for(j=0;jnAtoms;j++) { if(i==j) continue; nj = geom[j].N-1; if(geom[i].typeConnections[nj]>0) { treeMolecule->connected[i][0]++; k = treeMolecule->connected[i][0]; treeMolecule->connected[i][k]=j; } } } /************************************************************************/ void initTreeMolecule(TreeMolecule* treeMolecule, GeomDef* geom, gint NAtoms, gint ringSize) { treeMolecule->done = FALSE; treeMolecule->bonds = 0; treeMolecule->ringSize = ringSize; treeMolecule->nAtoms = NAtoms; if(NAtoms<1) return; initStack(treeMolecule); initConnections(treeMolecule, geom); } /************************************************************************/ void freeTreeMolecule(TreeMolecule* treeMolecule) { freeConnections(treeMolecule); freeStack(treeMolecule); } /************************************************************************/ gboolean inRingTreeMolecule(TreeMolecule* treeMolecule,gint currentAtom, gint rootAtom) { gint i; treeMolecule->inStack[currentAtom] = TRUE; if (treeMolecule->done) return TRUE; else if ( ( currentAtom == rootAtom ) && ( treeMolecule->bonds == treeMolecule->ringSize ) ) return TRUE; else if ( ( currentAtom == rootAtom ) && ( treeMolecule->bonds > 2 ) && ( treeMolecule->ringSize < 3 ) ) return TRUE; if ( treeMolecule->bonds < treeMolecule->ringSize ) { gint numberOfConnections = treeMolecule->connected[ currentAtom ][ 0 ]; for (i = 1; i <= numberOfConnections; i++ ) { gint newAtom = treeMolecule->connected[currentAtom][i]; if ( ! ( treeMolecule->inStack[newAtom] ) ) { treeMolecule->bonds++; treeMolecule->done = inRingTreeMolecule(treeMolecule, newAtom, rootAtom); } if (treeMolecule->done) return TRUE; } } treeMolecule->inStack[currentAtom] = FALSE; treeMolecule->bonds--; return FALSE; } /************************************************************************/ static gboolean isConnected(TreeMolecule* treeMolecule, gint i, gint j) { gint k; for(k=0;kconnected[i][0];k++) if(treeMolecule->connected[i][k+1]==j) return TRUE; return FALSE; } /************************************************************************/ gint* getRingTreeMolecule(TreeMolecule* treeMolecule) { gint i; gint n= 0; gint* ringAtoms = NULL; gint k; gint j; if(treeMolecule->inStack && treeMolecule->ringSize>1) { ringAtoms = g_malloc(treeMolecule->ringSize*sizeof(gint)); for(i=0;inAtoms;i++) { if(treeMolecule->inStack[i]) { ringAtoms[n] = i; n++; if(n>=treeMolecule->ringSize) break; } } } if(ringAtoms) { for(i=1;inAtoms) return; n = 4; initTreeMolecule(treeMolecule, geom, NAtoms, n-1); if(inRingTreeMolecule(treeMolecule,j, i) ) num = getRingTreeMolecule(treeMolecule); if(!num) { n++; initTreeMolecule(treeMolecule, geom, NAtoms, n-1); if(inRingTreeMolecule(treeMolecule,j, i)) num = getRingTreeMolecule(treeMolecule); } if(!num) { n++; initTreeMolecule(treeMolecule, geom, NAtoms, n-1); if(inRingTreeMolecule(treeMolecule,j, i)) num = getRingTreeMolecule(treeMolecule); } if(num) { C[0] += geom[j].X; C[1] += geom[j].Y; C[2] += geom[j].Z; for(k=0;kinStack[currentAtom] = TRUE; if ( currentAtom == nEx1 || currentAtom == nEx2 || currentAtom == nEx2 ) { treeMolecule->done = TRUE; return TRUE; } { gint numberOfConnections = treeMolecule->connected[ currentAtom ][ 0 ]; for (i = 1; i <= numberOfConnections; i++ ) { gint newAtom = treeMolecule->connected[currentAtom][i]; if ( ! ( treeMolecule->inStack[newAtom] ) ) { treeMolecule->bonds++; end = inGroupTreeMolecule(treeMolecule, newAtom, nEx1, nEx2, nEx3); } } } return FALSE; } /************************************************************************/ gint* getListGroupe(gint* nGroupAtoms, GeomDef* geom, gint NAtoms, gint i1, gint i2, gint i3, gint i4) { gint i; gint nG = 0; gint nEx1 = 0; gint nEx2 = 0; gint nEx3 = 0; TreeMolecule treeMolecule; gint* listGroupAtoms = NULL; gint n = 0; *nGroupAtoms = 0; if(NAtoms<2) return NULL; if(i1<0 || i2<0) return NULL; initTreeMolecule(&treeMolecule, geom, NAtoms, 6); if(i3>=0 && i4>=0) { if(i4>=NAtoms) { nG = i3; nEx1 = i2; nEx2 = i1; nEx3 = i4-NAtoms; } else { nG = i4; nEx1 = i3; nEx2 = i2; nEx3 = i1; } } else if(i3>=0) { nG = i3; nEx1 = i2; nEx2 = i1; nEx3 = i4; } else { nG = i2; nEx1 = i1; nEx2 = i3; nEx3 = i4; } disconnect(&treeMolecule, nG, nEx1); inGroupTreeMolecule(&treeMolecule,nG, nEx1, nEx2, nEx3); if(treeMolecule.done) return NULL; /* printf("end = %d\n",treeMolecule.done); printf("nex = %d n = %d\n",geom[nEx1].N, geom[nG].N); for(i=0;i #include #include #include "../Common/Global.h" #include "../Geometry/Fragments.h" #include "../Geometry/PersonalFragments.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" /************************************************************/ static void freeOneList(gchar** t, gint nl) { gint i; if(nl<1) return; for(i=0;inumberOfGroupes = numberOfGroupes; personnalFragments->personnalGroupes= NULL; if(numberOfGroupes<1) return; personnalFragments->personnalGroupes = g_malloc(numberOfGroupes*sizeof(PersonalGroupe)); for(i=0;inumberOfGroupes;i++) { personnalFragments->personnalGroupes[i].groupName = g_strdup(groupes[i]); personnalFragments->personnalGroupes[i].numberOfFragments = 0; personnalFragments->personnalGroupes[i].fragments = NULL; } freeOneList(groupes,numberOfGroupes); } /**********************************************************************/ static void loadOneFragmentsList(PersonalFragments* personnalFragments, FILE* file,gint groupeNumber) { PersonalGroupe* personnalGroupes = personnalFragments->personnalGroupes; gint numberOfFragments = 0; OnePersonalFragment* fragments = NULL; gint i; gchar* str = g_strdup_printf("Begin %s Groupe",personnalGroupes[groupeNumber].groupName); gchar** fragmentsList = getOneList(file,&numberOfFragments,str,TRUE); if(numberOfFragments<1) { g_free(str); return; } fragments = g_malloc(numberOfFragments*sizeof(OnePersonalFragment)); for(i=0;inumberOfGroupes; gint i; for(i=0;ipersonnalGroupes; OnePersonalFragment* fragments = personnalGroupes[groupeNumber].fragments; Fragment f = fragments[fragmentNumber].f; gint i; gchar* str = g_strdup_printf("Begin %s %s Fragment", personnalGroupes[groupeNumber].groupName, fragments[fragmentNumber].name ); gint nlines; gchar** list = getOneList(file,&nlines,str,FALSE); gchar dump1[BSIZE]; gchar dump2[BSIZE]; gchar dump3[BSIZE]; gchar dump4[BSIZE]; f.NAtoms = 0; f.Atoms = NULL; if(nlines<1) { g_free(str); return; } f.NAtoms = atoi(list[0]); if(f.NAtoms<1) return; f.Atoms = g_malloc(f.NAtoms*sizeof(Atom)); for(i=0;inumberOfGroupes; gint numberOfFragments; gint i; gint j; for(i=0;ipersonnalGroupes[i].numberOfFragments; for(j=0;jnumberOfGroupes = 0; personnalFragments->personnalGroupes= NULL; loadGroupesList(personnalFragments,file); if(personnalFragments->numberOfGroupes == 0) { g_free(personnalFragments); personnalFragments = NULL; if(file) fclose(file); return NULL; } loadAllFragmentsList(personnalFragments,file); loadAllFragments(personnalFragments,file); fclose(file); return personnalFragments; } /**********************************************************************/ GabeditSrc250/src/Geometry/RotFragments.c0000644000175100017510000004406113130665226020642 0ustar alloucheallouche/* RotFragments.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include "../Common/Global.h" #include "../Utils/Matrix3D.h" #include "../Utils/Constants.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/AtomsProp.h" /*****************************************************************/ static void GetATomCoords(gint n,GeomDef *geometry,gdouble C[]) { C[0] = geometry[n].X; C[1] = geometry[n].Y; C[2] = geometry[n].Z; } /*****************************************************************/ gdouble AngleToAtoms(gdouble*C3,gdouble* C1,gdouble* C2) { gdouble x12, x32, y12, y32, z12, z32, l12, l32, dp; x12 = C1[ 0 ] - C2[ 0 ]; y12 = C1[ 1 ] - C2[ 1 ]; z12 = C1[ 2 ] - C2[ 2 ]; x32 = C3[ 0 ] - C2[ 0 ]; y32 = C3[ 1 ] - C2[ 1 ]; z32 = C3[ 2 ] - C2[ 2 ]; l12 = sqrt( x12 * x12 + y12 * y12 + z12 * z12 ); l32 = sqrt( x32 * x32 + y32 * y32 + z32 * z32 ); if( l12 == 0.0 ) { return 0.0; } if( l32 == 0.0 ) { return 0.0; } dp = ( x12 * x32 + y12 * y32 + z12 * z32 ) / (l12 * l32 ); if ( dp < -1.0 ) dp = -1.0; else if ( dp > 1.0 ) dp = 1.0; return RAD_TO_DEG * acos(dp); } /*****************************************************************/ gdouble TorsionToAtoms(gdouble*C4,gdouble*C1,gdouble* C2,gdouble* C3) { gdouble xij, yij, zij; gdouble xkj, ykj, zkj; gdouble xkl, ykl, zkl; gdouble dx, dy, dz; gdouble gx, gy, gz; gdouble bi, bk; gdouble ct, d, ap, app, bibk; xij = C1[ 0 ] - C2[ 0 ]; yij = C1[ 1 ] - C2[ 1 ]; zij = C1[ 2 ] - C2[ 2 ]; xkj = C3[ 0 ] - C2[ 0 ]; ykj = C3[ 1 ] - C2[ 1 ]; zkj = C3[ 2 ] - C2[ 2 ]; xkl = C3[ 0 ] - C4[ 0 ]; ykl = C3[ 1 ] - C4[ 1 ]; zkl = C3[ 2 ] - C4[ 2 ]; dx = yij * zkj - zij * ykj; dy = zij * xkj - xij * zkj; dz = xij * ykj - yij * xkj; gx = zkj * ykl - ykj * zkl; gy = xkj * zkl - zkj * xkl; gz = ykj * xkl - xkj * ykl; bi = dx * dx + dy * dy + dz * dz; bk = gx * gx + gy * gy + gz * gz; ct = dx * gx + dy * gy + dz * gz; bibk = bi * bk; if ( bibk < 1.0e-6 ) return 0; ct = ct / sqrt( bibk ); if( ct < -1.0 ) ct = -1.0; else if( ct > 1.0 ) ct = 1.0; ap = acos( ct ); d = xkj*(dz*gy-dy*gz) + ykj*(dx*gz-dz*gx) + zkj*(dy*gx-dx*gy); if( d < 0.0 ) ap = -ap; ap = PI - ap; app = 180.0 * ap / PI; if( app > 180.0 ) app = app - 360.0; return( app ); } /*****************************************************************/ gdouble AngleAboutXAxis(gdouble* coord) { gdouble distance = sqrt( coord[ 0 ] * coord[ 0 ] + coord[ 1 ] * coord[ 1 ] + coord[ 2 ] * coord[ 2 ] ); gdouble yComponent = coord[ 1 ] / distance; gdouble zComponent = coord[ 2 ] / distance; gdouble theta = 0.0; if ( ( zComponent == 0 ) && ( yComponent > 0 ) ) theta = 90.0; else if ( ( zComponent == 0 ) && ( yComponent < 0 ) ) theta = 270.0; else if ( ( yComponent == 0 ) && ( zComponent > 0 ) ) theta = 180.0; else if ( ( yComponent == 0 ) && ( zComponent <= 0 ) ) theta = 0.0; else{ theta = atan( fabs( yComponent / zComponent ) ) * RAD_TO_DEG; if ( ( yComponent > 0 ) && ( zComponent > 0 ) ) theta = 90.0 + atan( fabs( zComponent / yComponent ) ) * RAD_TO_DEG; else if ( ( yComponent < 0 ) && ( zComponent > 0 ) ) theta += 180.0; else if ( ( yComponent < 0 ) && ( zComponent < 0 ) ) theta = 270.0 + atan( fabs( zComponent / yComponent ) ) * RAD_TO_DEG; } return( theta ); } /*****************************************************************/ gdouble AngleAboutYAxis(gdouble* coord) { gdouble distance = sqrt( coord[ 0 ] * coord[ 0 ] + coord[ 1 ] * coord[ 1 ] + coord[ 2 ] * coord[ 2 ] ); gdouble xComponent = coord[ 0 ] / distance; gdouble zComponent = coord[ 2 ] / distance; gdouble theta = 0.0; if ( ( zComponent == 0 ) && ( xComponent > 0 ) ) theta = 180.0; else if ( ( zComponent == 0 ) && ( xComponent <= 0 ) ) theta = 0.0; else if ( ( xComponent == 0 ) && ( zComponent > 0 ) ) theta = 90.0; else if ( ( xComponent == 0 ) && ( zComponent < 0 ) ) theta = 270.0; else{ theta = atan( fabs( zComponent / xComponent ) ) * RAD_TO_DEG; if ( ( zComponent > 0 ) && ( xComponent > 0 ) ) theta = 90.0 + atan( fabs( xComponent / zComponent ) ) * RAD_TO_DEG; else if ( ( zComponent < 0 ) && ( xComponent > 0 ) ) theta += 180.0; else if ( ( zComponent < 0 ) && ( xComponent < 0 ) ) theta = 270.0 + atan( fabs( xComponent / zComponent ) ) * RAD_TO_DEG; } return( theta ); } /*****************************************************************/ gdouble AngleAboutZAxis(gdouble* coord) { double distance = sqrt( coord[ 0 ] * coord[ 0 ] + coord[ 1 ] * coord[ 1 ] + coord[ 2 ] * coord[ 2 ] ); double xComponent = coord[ 0 ] / distance; double yComponent = coord[ 1 ] / distance; double theta = 0.0; if ( ( xComponent == 0 ) && ( yComponent > 0 ) ) theta = 90.0; else if ( ( xComponent == 0 ) && ( yComponent < 0 ) ) theta = 270.0; else if ( ( yComponent == 0 ) && ( xComponent >= 0 ) ) theta = 0.0; else if ( ( yComponent == 0 ) && ( xComponent < 0 ) ) theta = 180.0; else{ theta = atan( fabs( yComponent / xComponent ) ) * RAD_TO_DEG; if ( ( yComponent > 0 ) && ( xComponent < 0 ) ) theta = 90.0 + atan( fabs( xComponent / yComponent ) ) * RAD_TO_DEG; else if ( ( yComponent < 0 ) && ( xComponent < 0 ) ) theta += 180.0; else if ( ( yComponent < 0 ) && ( xComponent > 0 ) ) theta = 270.0 + atan( fabs( xComponent / yComponent ) ) * RAD_TO_DEG; } return( theta ); } /********************************************************************************/ void SetBondDistance(GeomDef* geom,gint n1,gint n2,gdouble bondLength,gint list[],gint nlist) { gdouble a1[]={geom[n1].X,geom[n1].Y,geom[n1].Z}; gdouble a2[]={geom[n2].X,geom[n2].Y,geom[n2].Z}; gdouble coord[3]; gint i; gint atomNumber; gdouble len = 0; bondLength *= ANG_TO_BOHR; for(i=0;i<3;i++) coord[i] = a1[i] - a2[i]; for(i=0;i<3;i++) len += coord[i]*coord[i]; if(len>1e-3) { len = 1-bondLength/sqrt(len); for(i=0;i<3;i++) coord[i] *= len; } else coord[0] -= bondLength; for ( i = 0; i < nlist; i++ ) { atomNumber = list[ i ]; if ( ( atomNumber == n1 ) || ( atomNumber == n2 ) ) continue; geom[atomNumber].X += coord[0]; geom[atomNumber].Y += coord[1]; geom[atomNumber].Z += coord[2]; } atomNumber = n2; geom[atomNumber].X += coord[0]; geom[atomNumber].Y += coord[1]; geom[atomNumber].Z += coord[2]; } /********************************************************************************/ void SetBondDistanceX(GeomDef* geom,gint n1,gint n2,gdouble bondLength,gint list[],gint nlist) { gdouble a1[]={geom[n1].X,geom[n1].Y,geom[n1].Z}; gdouble a2[]={geom[n2].X,geom[n2].Y,geom[n2].Z}; gdouble coord[3]; gint i; gint atomNumber; bondLength *= ANG_TO_BOHR; for(i=0;i<3;i++) coord[i] = a1[i] - a2[i]; coord[0] -= bondLength; for ( i = 0; i < nlist; i++ ) { atomNumber = list[ i ]; if ( ( atomNumber == n1 ) || ( atomNumber == n2 ) ) continue; geom[atomNumber].X += coord[0]; geom[atomNumber].Y += coord[1]; geom[atomNumber].Z += coord[2]; } atomNumber = n2; geom[atomNumber].X += coord[0]; geom[atomNumber].Y += coord[1]; geom[atomNumber].Z += coord[2]; } /*****************************************************************/ void SetAngle(gint Natoms,GeomDef *geometry, gint a1num, gint a2num, gint a3num, gdouble angle,gint atomList[], gint numberOfElements ) { gdouble a1[3]; gdouble a2[3]; gdouble a3[3]; gint i; gint j; gdouble** pseudoAtom =g_malloc(sizeof(gdouble*)); gdouble originalAngle = 0; gdouble** tmp = NULL; gdouble** M=g_malloc(3*sizeof(gdouble*));/* Matrix 3D */ gint numberOfCoordinates = 0; gint atomListLength = 0; gint atomNumber; gdouble a1YAngle = 0; gdouble a1ZAngle = 0; gdouble a3XAngle = 0; GetATomCoords(a1num,geometry,a1); GetATomCoords(a2num,geometry,a2); GetATomCoords(a3num,geometry,a3); originalAngle = AngleToAtoms(a3,a1,a2); pseudoAtom[0] = g_malloc(3*sizeof(gdouble)); for(j=0;j<3;j++) pseudoAtom[0][j] = a1[j] - a2[j]; if ( numberOfElements == 0 ){ atomListLength = 0; numberOfCoordinates = 1; } else{ atomListLength = numberOfElements; numberOfCoordinates = atomListLength + 1; } for(j=0;j<3;j++) M[j] = g_malloc(4*sizeof(gdouble)); tmp = g_malloc(numberOfCoordinates*sizeof(gdouble*)); for(i=0;i0) { V[0]+=geometry[ns].X-geometry[j].X; V[1]+=geometry[ns].Y-geometry[j].Y; V[2]+=geometry[ns].Z-geometry[j].Z; } } norm = V[0]* V[0]+ V[1]* V[1]+V[2]* V[2]; if(norm<1e-8) return; for(k=0;k<3;k++) V[k]/= sqrt(norm); tmpGeom =g_malloc((Natoms+1)*sizeof(GeomDef)); for(i=0;i #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/InterfaceGeom.h" #include "../Geometry/MenuToolBarGeom.h" void define_good_factor(); void create_GeomXYZ_from_draw_grometry(); #define LigneT 9 #define ColonneT 2 static GtkWidget* Entrys[3]; static GeomDef* G=NULL; static GeomDef* G0=NULL; static gint Nb = 0; static gint Nb0 = 0; static gint fisrtFragNumber = 0; static gint nTv = 0; static gint iTv[3] = {0,0,0}; typedef enum { LEFT1 = 0, RIGHT1, LEFT2, RIGHT2, LEFT3, RIGHT3 } FragPositions; /* static gdouble getTorsion(GeomDef* geom, gint a1, gint a2, gint a3,gint a4) { gdouble C1[3]={geom[a1].X,geom[a1].Y,geom[a1].Z}; gdouble C2[3]={geom[a2].X,geom[a2].Y,geom[a2].Z}; gdouble C3[3]={geom[a3].X,geom[a3].Y,geom[a3].Z}; gdouble C4[3]={geom[a4].X,geom[a4].Y,geom[a4].Z}; return TorsionToAtoms(C4,C1,C2,C3); } */ /********************************************************************************/ static gboolean isItTv(gchar* symbol) { static gchar tmp[BSIZE]; sprintf(tmp,"%s",symbol); uppercase(tmp); if(!strcmp(tmp,"TV")) return TRUE; return FALSE; } /********************************************************************************/ static void init_variables() { gint j; gint i; if(Nb!=0) { gint i; for (i=0;i0) for(i=0;i<3;i++) C[i] /= n; for(i=0;i0) { geometry0 = g_realloc(geometry0,(Natoms)*sizeof(GeomDef)); geometry = g_realloc(geometry,(Natoms)*sizeof(GeomDef)); } for(i=0;i<(gint)Natoms;i++) { geometry[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;j<(gint)Natoms;j++) geometry[i].typeConnections[j] = 0; geometry0[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;j<(gint)Natoms;j++) geometry0[i].typeConnections[j] = 0; } /* for(i=0;i<(gint)Natoms;i++) { gint iG = geometry[i].N-1; for(j=i+1;j<(gint)Natoms;j++) { gint jG = geometry[j].N-1; geometry[i].typeConnections[j] = G[iG].typeConnections[jG]; geometry[j].typeConnections[i] = G[jG].typeConnections[iG]; } } */ for(i=0;i<(gint)Natoms;i++) geometry[i].N = geometry0[i].N = i+1; //copy_connections(geometry0,geometry,Natoms); RebuildGeom = TRUE; } /********************************************************************************/ static gboolean getTvVector(gchar* what, gdouble Tv[]) { gint k = 0; gboolean Ok = FALSE; gint j; gdouble orig[3]; get_origine_molecule_drawgeom(orig); if(nTv<1) return FALSE; j = iTv[0]; if(strstr(what,"LEFT 1")) { Tv[0] = -(G[j].X+orig[0]); Tv[1] = -(G[j].Y+orig[1]); Tv[2] = -(G[j].Z+orig[2]); return TRUE; } if(strstr(what,"RIGHT 1")) { Tv[0] = (G[j].X+orig[0]); Tv[1] = (G[j].Y+orig[1]); Tv[2] = (G[j].Z+orig[2]); return TRUE; } if(nTv<2) return FALSE; j = iTv[1]; if(strstr(what,"LEFT 2")) { Tv[0] = -(G[j].X+orig[0]); Tv[1] = -(G[j].Y+orig[1]); Tv[2] = -(G[j].Z+orig[2]); return TRUE; } if(strstr(what,"RIGHT 2")) { Tv[0] = (G[j].X+orig[0]); Tv[1] = (G[j].Y+orig[1]); Tv[2] = (G[j].Z+orig[2]); return TRUE; } if(strstr(what,"L1-L2")) { Tv[0] =-(G[iTv[0]].X+orig[0])-(G[iTv[1]].X+orig[0]); Tv[1] =-(G[iTv[0]].Y+orig[1])-(G[iTv[1]].Y+orig[1]); Tv[2] =-(G[iTv[0]].Z+orig[2])-(G[iTv[1]].Z+orig[2]); return TRUE; } if(strstr(what,"L1-R2")) { Tv[0] =-(G[iTv[0]].X+orig[0])+(G[iTv[1]].X+orig[0]); Tv[1] =-(G[iTv[0]].Y+orig[1])+(G[iTv[1]].Y+orig[1]); Tv[2] =-(G[iTv[0]].Z+orig[2])+(G[iTv[1]].Z+orig[2]); return TRUE; } if(strstr(what,"L2-R1")) { Tv[0] =(G[iTv[0]].X+orig[0])-(G[iTv[1]].X+orig[0]); Tv[1] =(G[iTv[0]].Y+orig[1])-(G[iTv[1]].Y+orig[1]); Tv[2] =(G[iTv[0]].Z+orig[2])-(G[iTv[1]].Z+orig[2]); return TRUE; } if(strstr(what,"R1-R2")) { Tv[0] =(G[iTv[0]].X+orig[0])+(G[iTv[1]].X+orig[0]); Tv[1] =(G[iTv[0]].Y+orig[1])+(G[iTv[1]].Y+orig[1]); Tv[2] =(G[iTv[0]].Z+orig[2])+(G[iTv[1]].Z+orig[2]); return TRUE; } if(nTv<2) return FALSE; j = iTv[2]; if(strstr(what,"LEFT 3")) { Tv[0] = -(G[j].X+orig[0]); Tv[1] = -(G[j].Y+orig[1]); Tv[2] = -(G[j].Z+orig[2]); return TRUE; } if(strstr(what,"RIGHT 3")) { Tv[0] = (G[j].X+orig[0]); Tv[1] = (G[j].Y+orig[1]); Tv[2] = (G[j].Z+orig[2]); return TRUE; } if(strstr(what,"L1-L3")) { Tv[0] =-(G[iTv[0]].X+orig[0])-(G[iTv[2]].X+orig[0]); Tv[1] =-(G[iTv[0]].Y+orig[1])-(G[iTv[2]].Y+orig[1]); Tv[2] =-(G[iTv[0]].Z+orig[2])-(G[iTv[2]].Z+orig[2]); return TRUE; } if(strstr(what,"L1-R3")) { Tv[0] =-(G[iTv[0]].X+orig[0])+(G[iTv[2]].X+orig[0]); Tv[1] =-(G[iTv[0]].Y+orig[1])+(G[iTv[2]].Y+orig[1]); Tv[2] =-(G[iTv[0]].Z+orig[2])+(G[iTv[2]].Z+orig[2]); return TRUE; } if(strstr(what,"L2-L3")) { Tv[0] =-(G[iTv[1]].X+orig[0])-(G[iTv[2]].X+orig[0]); Tv[1] =-(G[iTv[1]].Y+orig[1])-(G[iTv[2]].Y+orig[1]); Tv[2] =-(G[iTv[1]].Z+orig[2])-(G[iTv[2]].Z+orig[2]); return TRUE; } if(strstr(what,"L2-R3")) { Tv[0] =-(G[iTv[1]].X+orig[0])+(G[iTv[2]].X+orig[0]); Tv[1] =-(G[iTv[1]].Y+orig[1])+(G[iTv[2]].Y+orig[1]); Tv[2] =-(G[iTv[1]].Z+orig[2])+(G[iTv[2]].Z+orig[2]); return TRUE; } if(strstr(what,"L3-R1")) { Tv[0] =-(G[iTv[2]].X+orig[0])+(G[iTv[0]].X+orig[0]); Tv[1] =-(G[iTv[2]].Y+orig[1])+(G[iTv[0]].Y+orig[1]); Tv[2] =-(G[iTv[2]].Z+orig[2])+(G[iTv[0]].Z+orig[2]); return TRUE; } if(strstr(what,"L3-R2")) { Tv[0] =-(G[iTv[2]].X+orig[0])+(G[iTv[1]].X+orig[0]); Tv[1] =-(G[iTv[2]].Y+orig[1])+(G[iTv[1]].Y+orig[1]); Tv[2] =-(G[iTv[2]].Z+orig[2])+(G[iTv[1]].Z+orig[2]); return TRUE; } if(strstr(what,"R1-R3")) { Tv[0] =(G[iTv[0]].X+orig[0])+(G[iTv[2]].X+orig[0]); Tv[1] =(G[iTv[0]].Y+orig[1])+(G[iTv[2]].Y+orig[1]); Tv[2] =(G[iTv[0]].Z+orig[2])+(G[iTv[2]].Z+orig[2]); return TRUE; } if(strstr(what,"R2-R3")) { Tv[0] =(G[iTv[1]].X+orig[0])+(G[iTv[2]].X+orig[0]); Tv[1] =(G[iTv[1]].Y+orig[1])+(G[iTv[2]].Y+orig[1]); Tv[2] =(G[iTv[1]].Z+orig[2])+(G[iTv[2]].Z+orig[2]); return TRUE; } return FALSE; } /********************************************************************************/ static gint getNumFrag(gchar* what) { gint k = 0; gboolean Ok = FALSE; gint j; gint ll; if(strstr(what,"LEFT 1")) return fisrtFragNumber+1; if(strstr(what,"RIGHT 1")) return fisrtFragNumber+2; if(strstr(what,"LEFT 2")) return fisrtFragNumber+3; if(strstr(what,"RIGHT 2")) return fisrtFragNumber+4; if(strstr(what,"LEFT 3")) return fisrtFragNumber+5; if(strstr(what,"RIGHT 3")) return fisrtFragNumber+6; ll = fisrtFragNumber+6; if(strstr(what,"L1-L2")) return ll+1; if(strstr(what,"L1-L3")) return ll+2; if(strstr(what,"L1-R2")) return ll+3; if(strstr(what,"L1-R3")) return ll+4; if(strstr(what,"L2-R1")) return ll+5; if(strstr(what,"L2-R3")) return ll+6; if(strstr(what,"L2-L3")) return ll+7; if(strstr(what,"L3-R1")) return ll+8; if(strstr(what,"L3-R2")) return ll+9; if(strstr(what,"R1-R2")) return ll+10; if(strstr(what,"R1-R3")) return ll+11; if(strstr(what,"R2-R3")) return ll+12; return ll+13; } /********************************************************************************/ static void add_fragment(gchar* what) { gint i; gint j; gint nAtomsNew= 0; gdouble Tv[3]; gint numFrag = 0; G_CONST_RETURN gchar* t; if(nTv<1) return; nAtomsNew= Nb0; if(nAtomsNew<1) return; if(!getTvVector(what, Tv)) return; if(Nb>0) G = g_realloc(G,(Nb+nAtomsNew)*sizeof(GeomDef)); else G = g_malloc((nAtomsNew)*sizeof(GeomDef)); Ddef = FALSE; //printf("Tv= %f %f %f\n",G[numTv].X,G[numTv].Y,G[numTv].Z); numFrag = getNumFrag(what); j=Nb-1; for(i=0;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox = create_hbox_false(vboxframe); add_buttons(Dlg,hbox); hbox = create_hbox_false(vboxframe); vbox = create_vbox_false(hbox); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(Dlg)->action_area), FALSE); gtk_widget_realize(Dlg); Button = create_button(Dlg,_("Close")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Dlg)->action_area), Button, FALSE, TRUE, 2); g_signal_connect_swapped(G_OBJECT(Button), "clicked",(GCallback)destroy_dlg,GTK_OBJECT(Dlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(GTK_DIALOG(Dlg)->vbox); gtk_widget_show_all(GTK_DIALOG(Dlg)->action_area); gtk_widget_show_now(Dlg); fit_windows_position(GeomDlg, Dlg); } GabeditSrc250/src/Geometry/Dep.mk0000644000175100017510000004236313130664665017135 0ustar allouchealloucheEnergiesCurves.o: EnergiesCurves.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ResultsAnalise.h \ ../Utils/UtilsInterface.h ../Geometry/GeomGlobal.h ../Utils/AtomsProp.h \ ../Utils/Utils.h ../Geometry/EnergiesCurves.h ../Geometry/GeomXYZ.h \ ../Common/Windows.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h Fragments.o: Fragments.c ../../Config.h ../Common/GabeditType.h \ ../Geometry/Fragments.h ../Utils/Utils.h ../Utils/AtomsProp.h \ ../MolecularMechanics/PDBTemplate.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../MolecularMechanics/CalculTypesAmber.h GeomConversion.o: GeomConversion.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h ../Common/Help.h \ ../Utils/UtilsInterface.h ../Utils/Utils.h ../Geometry/GeomGlobal.h \ ../Utils/AtomsProp.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Files/ListeFiles.h ../Common/Windows.h ../Geometry/InterfaceGeom.h \ ../Gaussian/Gaussian.h ../Molpro/Molpro.h ../Geometry/GeomXYZ.h \ ../Geometry/GeomZmatrix.h GeomXYZ.o: GeomXYZ.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h ../Common/Help.h \ ../Utils/UtilsInterface.h ../Utils/Utils.h ../Geometry/GeomGlobal.h \ ../Utils/AtomsProp.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/GeomZmatrix.h ../Files/ListeFiles.h ../Common/Windows.h \ ../Geometry/InterfaceGeom.h ../Gaussian/Gaussian.h ../Molpro/Molpro.h \ ../Geometry/GeomConversion.h ../Common/StockIcons.h \ ../Geometry/GeomXYZ.h ../Geometry/ResultsAnalise.h \ ../Geometry/OpenBabel.h ../Geometry/SelectionDlg.h \ ../MolecularMechanics/PDBTemplate.h \ ../MolecularMechanics/CalculTypesAmber.h GeomZmatrix.o: GeomZmatrix.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h ../Common/Help.h \ ../Utils/UtilsInterface.h ../Utils/Utils.h ../Geometry/GeomGlobal.h \ ../Utils/AtomsProp.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Files/ListeFiles.h ../Common/Windows.h ../Geometry/InterfaceGeom.h \ ../Gaussian/Gaussian.h ../Molpro/Molpro.h ../Geometry/GeomConversion.h \ ../Common/StockIcons.h ImagesGeom.o: ImagesGeom.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Geometry/GeomGlobal.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Utils/UtilsInterface.h ../Utils/Utils.h InterfaceGeom.o: InterfaceGeom.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Geometry/InterfaceGeom.h \ ../Gaussian/GaussGlobal.h ../Geometry/GeomGlobal.h ../Geometry/GeomXYZ.h \ ../Geometry/GeomZmatrix.h ../Geometry/ResultsAnalise.h \ ../Utils/UtilsInterface.h ../Utils/Utils.h ../Utils/AtomsProp.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h ../Common/Windows.h \ ../Files/FileChooser.h Measure.o: Measure.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/UtilsInterface.h ../Utils/Utils.h ../Utils/AtomsProp.h \ ../Geometry/GeomGlobal.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/RotFragments.h ../Geometry/TreeMolecule.h \ ../Geometry/DrawGeom.h ../Utils/Matrix3D.h Povray.o: Povray.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Geometry/InterfaceGeom.h ../Utils/Utils.h ../Utils/PovrayUtils.h \ ../Utils/AtomsProp.h ../Utils/Vector3d.h ../Utils/Constants.h \ ../Utils/Transformation.h ../Geometry/GeomGlobal.h ../Geometry/Measure.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h ../Common/Windows.h ResultsAnalise.o: ResultsAnalise.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Utils/Utils.h ../Utils/Constants.h ../Geometry/ResultsAnalise.h \ ../Geometry/EnergiesCurves.h ../Common/Run.h ../Display/ViewOrb.h GeomSymmetry.o: GeomSymmetry.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Utils/Utils.h ../Utils/Constants.h ../Utils/AtomsProp.h \ ../Utils/GabeditTextEdit.h ../Geometry/GeomGlobal.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h ../Utils/Jacobi.h \ ../Utils/Transformation.h ../Common/Windows.h RotFragments.o: RotFragments.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Matrix3D.h \ ../Utils/Constants.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h ../Utils/AtomsProp.h BuildLinear.o: BuildLinear.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Utils.h ../Utils/Constants.h \ ../Utils/UtilsInterface.h ../Utils/AtomsProp.h ../Geometry/GeomGlobal.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/GeomXYZ.h ../Geometry/InterfaceGeom.h \ ../Geometry/MenuToolBarGeom.h BuildRing.o: BuildRing.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/AtomsProp.h ../Geometry/GeomGlobal.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/GeomXYZ.h ../Geometry/InterfaceGeom.h \ ../Geometry/MenuToolBarGeom.h BuildRoZPhi.o: BuildRoZPhi.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/Constants.h ../Utils/AtomsProp.h \ ../Geometry/GeomGlobal.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/GeomXYZ.h ../Geometry/InterfaceGeom.h \ ../Geometry/MenuToolBarGeom.h BuildPolyPeptide.o: BuildPolyPeptide.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/AtomsProp.h ../Utils/Constants.h \ ../Geometry/GeomGlobal.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/GeomXYZ.h ../Geometry/InterfaceGeom.h \ ../Geometry/FragmentsPPD.h ../Geometry/RotFragments.h \ ../Geometry/MenuToolBarGeom.h ../MolecularMechanics/PDBTemplate.h FragmentsPPD.o: FragmentsPPD.c ../../Config.h ../Common/GabeditType.h \ ../Utils/Utils.h ../Utils/Vector3d.h ../Geometry/Fragments.h \ ../MolecularMechanics/PDBTemplate.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../MolecularMechanics/CalculTypesAmber.h FragmentsPSC.o: FragmentsPSC.c ../../Config.h ../Common/GabeditType.h \ ../Utils/Utils.h ../Geometry/Fragments.h \ ../MolecularMechanics/PDBTemplate.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../MolecularMechanics/CalculTypesAmber.h FragmentsPNA.o: FragmentsPNA.c ../../Config.h ../Common/GabeditType.h \ ../Utils/Utils.h ../Geometry/Fragments.h \ ../MolecularMechanics/PDBTemplate.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../MolecularMechanics/CalculTypesAmber.h BuildPolySaccharide.o: BuildPolySaccharide.c ../../Config.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/AtomsProp.h ../Geometry/GeomGlobal.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/GeomXYZ.h ../Geometry/InterfaceGeom.h \ ../Geometry/FragmentsPSC.h ../Geometry/RotFragments.h \ ../Geometry/MenuToolBarGeom.h BuildPolyNucleicAcid.o: BuildPolyNucleicAcid.c ../../Config.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/AtomsProp.h ../Geometry/GeomGlobal.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/GeomXYZ.h ../Geometry/InterfaceGeom.h \ ../Geometry/FragmentsPNA.h ../Geometry/RotFragments.h \ ../Geometry/MenuToolBarGeom.h ../Utils/Matrix3D.h \ ../MolecularMechanics/PDBTemplate.h BuildNanoTube.o: BuildNanoTube.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Utils.h ../Utils/Constants.h \ ../Utils/UtilsInterface.h ../Utils/AtomsProp.h ../Geometry/GeomGlobal.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/GeomXYZ.h ../Geometry/InterfaceGeom.h \ ../Geometry/MenuToolBarGeom.h BuildPeriodic.o: BuildPeriodic.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/AtomsProp.h ../Utils/Constants.h \ ../Geometry/GeomGlobal.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/GeomXYZ.h ../Geometry/InterfaceGeom.h \ ../Geometry/MenuToolBarGeom.h PersonalFragments.o: PersonalFragments.c ../../Config.h \ ../Geometry/Fragments.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Geometry/InterfaceGeom.h ../Utils/Utils.h ../Utils/AtomsProp.h \ ../Geometry/GeomGlobal.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/PersonalFragments.h ../Geometry/SavePersonalFragments.h \ ../Geometry/LoadPersonalFragments.h ../Geometry/MenuToolBarGeom.h \ ../Geometry/FragmentsSelector.h SavePersonalFragments.o: SavePersonalFragments.c ../../Config.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Geometry/Fragments.h \ ../Geometry/PersonalFragments.h ../Utils/Utils.h LoadPersonalFragments.o: LoadPersonalFragments.c ../../Config.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Geometry/Fragments.h \ ../Geometry/PersonalFragments.h ../Utils/Utils.h ../Utils/Constants.h FragmentsSelector.o: FragmentsSelector.c ../../Config.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/UtilsInterface.h ../Geometry/InterfaceGeom.h ../Utils/Utils.h \ ../Utils/PovrayUtils.h ../Utils/AtomsProp.h ../Geometry/GeomGlobal.h \ ../Common/Windows.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/PreviewGeom.h ../Geometry/FragmentsTree.h OpenBabel.o: OpenBabel.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/UtilsInterface.h ../Utils/Utils.h ../Utils/GabeditTextEdit.h \ ../Files/FileChooser.h ../Common/Windows.h ../Geometry/GeomGlobal.h \ ../Geometry/GeomXYZ.h ../../pixmaps/Open.xpm MenuToolBarGeom.o: MenuToolBarGeom.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Geometry/InterfaceGeom.h ../Utils/Utils.h ../Utils/AtomsProp.h \ ../Geometry/GeomGlobal.h ../Geometry/Measure.h ../Geometry/Fragments.h \ ../Geometry/DrawGeom.h ../Geometry/DrawGeomCairo.h \ ../Geometry/Fragments.h ../Geometry/Povray.h ../Common/Windows.h \ ../Utils/Transformation.h ../MolecularMechanics/MolecularMechanicsDlg.h \ ../MolecularMechanics/SetMMParameters.h \ ../MolecularMechanics/SetPDBTemplate.h \ ../SemiEmpirical/SemiEmpiricalDlg.h ../Geometry/GeomXYZ.h \ ../Geometry/GeomZmatrix.h ../Geometry/GeomSymmetry.h \ ../Files/FileChooser.h ../Geometry/ImagesGeom.h \ ../Geometry/RotFragments.h ../Geometry/BuildLinear.h \ ../Geometry/BuildRing.h ../Geometry/BuildRoZPhi.h \ ../Geometry/BuildPolyPeptide.h ../Geometry/BuildPeriodic.h \ ../Geometry/BuildPolySaccharide.h ../Geometry/BuildPolyNucleicAcid.h \ ../Geometry/BuildNanoTube.h ../Geometry/PersonalFragments.h \ ../Geometry/ResultsAnalise.h ../Geometry/GeomConversion.h \ ../Geometry/MenuToolBarGeom.h ../Geometry/OpenBabel.h \ ../Geometry/FragmentsSelector.h ../Geometry/ExportGeom.h \ ../Utils/HydrogenBond.h ../Symmetry/MoleculeSymmetryInterface.h \ ../Common/StockIcons.h ../Geometry/AxesGeomGL.h \ ../Geometry/SelectionDlg.h PreviewGeom.o: PreviewGeom.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/UtilsInterface.h ../Geometry/InterfaceGeom.h ../Utils/Utils.h \ ../Utils/PovrayUtils.h ../Utils/AtomsProp.h ../Geometry/GeomGlobal.h \ ../Geometry/Measure.h ../Geometry/Povray.h ../Common/Windows.h \ ../Utils/Transformation.h ../Geometry/GeomXYZ.h \ ../Geometry/GeomZmatrix.h ../Geometry/GeomSymmetry.h \ ../Files/FileChooser.h ../Geometry/ImagesGeom.h ../Geometry/Fragments.h \ ../Geometry/DrawGeom.h ../Geometry/DrawGeomCairo.h \ ../Geometry/Fragments.h ../Geometry/RotFragments.h \ ../Geometry/GeomConversion.h ../Geometry/ResultsAnalise.h \ ../Utils/HydrogenBond.h ../MolecularMechanics/PDBTemplate.h \ ../MolecularMechanics/CalculTypesAmber.h \ ../Symmetry/MoleculeSymmetryInterface.h ../Utils/Jacobi.h \ ../Utils/Vector3d.h ../Utils/GabeditTextEdit.h \ ../Geometry/MenuToolBarGeom.h FragmentsTree.o: FragmentsTree.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/UtilsInterface.h ../Geometry/InterfaceGeom.h ../Utils/Utils.h \ ../Utils/PovrayUtils.h ../Utils/AtomsProp.h ../Geometry/GeomGlobal.h \ ../Common/Windows.h ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/PreviewGeom.h ../Geometry/PersonalFragments.h \ ../Geometry/LoadPersonalFragments.h ExportGeom.o: ExportGeom.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/UtilsInterface.h \ ../Geometry/InterfaceGeom.h ../Utils/Utils.h ../Utils/AtomsProp.h \ ../Utils/Vector3d.h ../Geometry/GeomGlobal.h ../Geometry/Measure.h \ ../Geometry/Fragments.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/ExportGeom.h ../Common/Windows.h ../Files/FileChooser.h TreeMolecule.o: TreeMolecule.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Geometry/GeomGlobal.h ../Utils/Vector3d.h ../Utils/Transformation.h \ ../Utils/Utils.h ../Utils/UtilsInterface.h ../Geometry/TreeMolecule.h \ ../Geometry/DrawGeom.h ../Geometry/DrawGeomCairo.h \ ../Geometry/Fragments.h DrawGeomGL.o: DrawGeomGL.c AxesGeomGL.o: AxesGeomGL.c ../../Config.h DrawGeomCairo.o: DrawGeomCairo.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/UtilsInterface.h ../Geometry/InterfaceGeom.h ../Utils/Utils.h \ ../Utils/PovrayUtils.h ../Utils/AtomsProp.h ../Geometry/GeomGlobal.h \ ../Geometry/Measure.h ../Geometry/Povray.h ../Common/Windows.h \ ../Utils/Transformation.h ../Geometry/GeomXYZ.h \ ../Geometry/GeomZmatrix.h ../Geometry/GeomSymmetry.h \ ../Files/FileChooser.h ../Geometry/ImagesGeom.h ../Geometry/Fragments.h \ ../Geometry/FragmentsPPD.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h \ ../Geometry/RotFragments.h ../Geometry/GeomConversion.h \ ../Geometry/PersonalFragments.h ../Geometry/ResultsAnalise.h \ ../Utils/HydrogenBond.h ../MolecularMechanics/PDBTemplate.h \ ../MolecularMechanics/CalculTypesAmber.h \ ../Symmetry/MoleculeSymmetryInterface.h ../Utils/Jacobi.h \ ../Utils/Vector3d.h ../Utils/GabeditTextEdit.h ../Utils/UtilsCairo.h \ ../Geometry/MenuToolBarGeom.h ../Geometry/PreviewGeom.h \ ../Geometry/FragmentsSelector.h ../Geometry/SelectionDlg.h \ ../IsotopeDistribution/IsotopeDistributionCalculatorDlg.h \ ../IsotopeDistribution/../IsotopeDistribution/IsotopeDistributionCalculator.h \ ../Geometry/TreeMolecule.h ../Geometry/DrawGeom.h SelectionDlg.o: SelectionDlg.c ../../Config.h ../Utils/Constants.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Utils.h \ ../Utils/UtilsInterface.h ../Utils/AtomsProp.h ../Common/StockIcons.h \ ../Geometry/GeomGlobal.h ../Geometry/DrawGeom.h \ ../Geometry/DrawGeomCairo.h ../Geometry/Fragments.h GabeditSrc250/src/Geometry/FragmentsPSC.c0000644000175100017510000006447413130665226020535 0ustar alloucheallouche/* FragmentsPSC.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Common/GabeditType.h" #include "../Utils/Utils.h" #include "../Geometry/Fragments.h" #include "../MolecularMechanics/PDBTemplate.h" #include "../Geometry/DrawGeom.h" #include "../MolecularMechanics/CalculTypesAmber.h" #define ANG_TO_BOHR 1.0/0.52917726 /*****************************************************************/ static void SetResidue(Fragment* Frag,gchar* name) { gint i; for(i=0;iNAtoms;i++) Frag->Atoms[i].Residue = g_strdup(name); } /********************************************************************************/ static void SetMMTypes(Fragment* Frag) { gint i; gchar* residue = NULL; gdouble charge; if(Frag->NAtoms<1) return; residue = Frag->Atoms[0].Residue; for(i=0;iNAtoms;i++) { if(Frag->Atoms[i].mmType) g_free(Frag->Atoms[i].mmType); Frag->Atoms[i].mmType = getMMTypeFromPDBTpl(residue, Frag->Atoms[i].pdbType,&charge); if(strcmp(Frag->Atoms[i].mmType,"UNK")) Frag->Atoms[i].Charge = charge; } for(i=0;iNAtoms;i++) if(!strcmp(Frag->Atoms[i].mmType,"UNK")) break; if(i!=Frag->NAtoms) calculTypesAmberForAFragment(Frag); } /********************************************************************************/ static void SetAtom(Atom* A,gchar* symb,gdouble x,gdouble y,gdouble z) { A->mmType = g_strdup(symb); A->pdbType = g_strdup(symb); A->Symb = g_strdup_printf("%c",toupper(symb[0])); A->Coord[0] = (gdouble)x*(gdouble)ANG_TO_BOHR; A->Coord[1] = (gdouble)y*(gdouble)ANG_TO_BOHR; A->Coord[2] = (gdouble)z*(gdouble)ANG_TO_BOHR; A->Charge = 0.0; } /*****************************************************************/ Fragment GetFragmentPSC(gchar* Name,gboolean alpha) { Fragment F; gchar T[100]="Unknown"; gint i; F.NAtoms = 0; F.Atoms = NULL; F.atomToDelete = -1; F.atomToBondTo = -1; F.angleAtom = -1; if ( !strcmp(Name,"Allose" ) ) { F.NAtoms = 24 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C5", -0.167f, 2.160f, 1.365f ); SetAtom(&F.Atoms[ 1 ] , "O", -0.667f, 1.350f, 2.458f ); SetAtom(&F.Atoms[ 2 ] , "C1", -0.160f, -0.012f, 2.547f ); SetAtom(&F.Atoms[ 4 ] , "C2", -0.488f, -0.780f, 1.244f ); SetAtom(&F.Atoms[ 5 ] , "O2", 0.112f, -2.053f, 1.277f ); SetAtom(&F.Atoms[ 6 ] , "C3", 0.000f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "O3", 1.404f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 8 ] , "C4", -0.482f, 1.473f, 0.000f ); SetAtom(&F.Atoms[ 9 ] , "O4", 0.133f, 2.163f, -1.062f ); SetAtom(&F.Atoms[ 10 ] , "C6", -0.789f, 3.579f, 1.507f ); SetAtom(&F.Atoms[ 11 ] , "O6", -0.208f, 4.489f, 0.599f ); SetAtom(&F.Atoms[ 12 ] , "H5", 0.929f, 2.264f, 1.471f ); SetAtom(&F.Atoms[ 15 ] , "H2", -1.587f, -0.908f, 1.172f ); SetAtom(&F.Atoms[ 16 ] , "HO2", -0.135f, -2.508f, 0.450f ); SetAtom(&F.Atoms[ 17 ] , "H3", -0.351f, -0.507f, -0.921f ); SetAtom(&F.Atoms[ 18 ] , "HO3", 1.690f, -0.933f, -0.021f ); SetAtom(&F.Atoms[ 19 ] , "H4", -1.578f, 1.486f, -0.157f ); SetAtom(&F.Atoms[ 20 ] , "HO4", -0.209f, 3.075f, -1.048f ); SetAtom(&F.Atoms[ 21 ] , "H61", -0.628f, 3.945f, 2.527f ); SetAtom(&F.Atoms[ 22 ] , "H62", -1.871f, 3.536f, 1.352f ); SetAtom(&F.Atoms[ 23 ] , "H6", -0.630f, 5.337f, 0.750f ); if ( alpha ) { SetAtom(&F.Atoms[ 3 ] , "O1", 1.218f, 0.026f, 2.734f ); SetAtom(&F.Atoms[ 13 ] , "H1", -0.627f, -0.512f, 3.411f ); SetAtom(&F.Atoms[ 14 ] , "HO1", 1.610f, 0.462f, 1.952f ); } else { SetAtom(&F.Atoms[ 3 ] , "O1", -0.750f, -0.642f, 3.637f ); SetAtom(&F.Atoms[ 13 ] , "H1", 0.933f, 0.018f, 2.695f ); SetAtom(&F.Atoms[ 14 ] , "HO1", -1.716f, -0.647f, 3.488f ); } } else if ( !strcmp(Name,"Altrose" ) ) { F.NAtoms = 24 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C5", -0.167f, 2.160f, 1.365f ); SetAtom(&F.Atoms[ 1 ] , "O", -0.667f, 1.350f, 2.458f ); SetAtom(&F.Atoms[ 2 ] , "C1", -0.160f, -0.012f, 2.547f ); SetAtom(&F.Atoms[ 4 ] , "C2", -0.488f, -0.780f, 1.244f ); SetAtom(&F.Atoms[ 5 ] , "O2", -1.884f, -0.943f, 1.153f ); SetAtom(&F.Atoms[ 6 ] , "C3", 0.000f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "O3", 1.404f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 8 ] , "C4", -0.482f, 1.473f, 0.000f ); SetAtom(&F.Atoms[ 9 ] , "O4", 0.133f, 2.163f, -1.062f ); SetAtom(&F.Atoms[ 10 ] , "C6", -0.789f, 3.579f, 1.507f ); SetAtom(&F.Atoms[ 11 ] , "O6", -0.208f, 4.489f, 0.599f ); SetAtom(&F.Atoms[ 12 ] , "H5", 0.929f, 2.264f, 1.471f ); SetAtom(&F.Atoms[ 15 ] , "H2", -0.016f, -1.783f, 1.271f ); SetAtom(&F.Atoms[ 16 ] , "HO2", -2.166f, -1.442f, 1.942f ); SetAtom(&F.Atoms[ 17 ] , "H3", -0.351f, -0.507f, -0.921f ); SetAtom(&F.Atoms[ 18 ] , "HO3", 1.690f, -0.933f, -0.021f ); SetAtom(&F.Atoms[ 19 ] , "H4", -1.578f, 1.486f, -0.157f ); SetAtom(&F.Atoms[ 20 ] , "HO4", -0.209f, 3.075f, -1.048f ); SetAtom(&F.Atoms[ 21 ] , "H61", -0.628f, 3.945f, 2.527f ); SetAtom(&F.Atoms[ 22 ] , "H62", -1.871f, 3.536f, 1.352f ); SetAtom(&F.Atoms[ 23 ] , "H6", -0.630f, 5.337f, 0.750f ); if ( alpha ){ SetAtom(&F.Atoms[ 3 ] , "O1", 1.218f, 0.026f, 2.734f ); SetAtom(&F.Atoms[ 13 ] , "H1", -0.627f, -0.512f, 3.411f ); SetAtom(&F.Atoms[ 14 ] , "HO1", 1.610f, 0.462f, 1.952f ); } else{ SetAtom(&F.Atoms[ 3 ] , "O1", -0.750f, -0.642f, 3.637f ); SetAtom(&F.Atoms[ 13 ] , "H1", 0.933f, 0.018f, 2.695f ); SetAtom(&F.Atoms[ 14 ] , "HO1", -1.716f, -0.647f, 3.488f ); } } else if ( !strcmp(Name,"Arabinose" ) ){ F.NAtoms = 20 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C4", -0.577f, 1.416f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "O", -1.854f, 1.324f, 0.641f ); SetAtom(&F.Atoms[ 2 ] , "C1", -1.966f, 0.072f, 1.327f ); SetAtom(&F.Atoms[ 4 ] , "C2", -0.590f, -0.591f, 1.277f ); SetAtom(&F.Atoms[ 5 ] , "O2", -0.700f, -1.997f, 1.177f ); SetAtom(&F.Atoms[ 6 ] , "C3", 0.000f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "O3", 1.413f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 8 ] , "C5", -0.715f, 2.048f, -1.388f ); SetAtom(&F.Atoms[ 9 ] , "O5", 0.551f, 2.198f, -1.995f ); SetAtom(&F.Atoms[ 10 ] , "H4", 0.050f, 2.058f, 0.636f ); SetAtom(&F.Atoms[ 13 ] , "H2", -0.001f, -0.309f, 2.161f ); SetAtom(&F.Atoms[ 14 ] , "HO2", 0.187f, -2.385f, 1.096f ); SetAtom(&F.Atoms[ 15 ] , "H3", -0.392f, -0.554f, -0.864f ); SetAtom(&F.Atoms[ 16 ] , "HO3", 1.735f, 0.506f, 0.765f ); SetAtom(&F.Atoms[ 17 ] , "H51", -1.178f, 3.031f, -1.285f ); SetAtom(&F.Atoms[ 18 ] , "H52", -1.347f, 1.417f, -2.014f ); SetAtom(&F.Atoms[ 19 ] , "H5", 0.430f, 2.596f, -2.860f ); if ( alpha ){ SetAtom(&F.Atoms[ 3 ] , "O1", -2.374f, 0.319f, 2.633f ); SetAtom(&F.Atoms[ 11 ] , "H1", -2.715f, -0.528f, 0.790f ); SetAtom(&F.Atoms[ 12 ] , "HO1", -2.618f, -0.520f, 3.059f ); } else{ SetAtom(&F.Atoms[ 3 ] , "O1", -2.916f, -0.690f, 0.645f ); SetAtom(&F.Atoms[ 11 ] , "H1", -2.291f, 0.263f, 2.357f ); SetAtom(&F.Atoms[ 12 ] , "HO1", -3.787f, -0.271f, 0.737f ); } } else if ( !strcmp(Name,"Fructose" ) ) { F.NAtoms = 24 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); if ( alpha ){ SetAtom(&F.Atoms[ 0 ] , "O", -0.449f, 0.577f, -2.248f ); SetAtom(&F.Atoms[ 1 ] , "C5", -0.532f, 1.817f, -1.517f ); SetAtom(&F.Atoms[ 2 ] , "C4", -0.458f, 1.473f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C3", 0.000f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C2", -0.557f, -0.530f, -1.344f ); SetAtom(&F.Atoms[ 5 ] , "C6", 0.691f, 2.643f, -1.994f ); SetAtom(&F.Atoms[ 6 ] , "O4", -1.682f, 1.680f, 0.724f ); SetAtom(&F.Atoms[ 7 ] , "O3", 1.440f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 8 ] , "C1", 0.325f, -1.688f, -1.878f ); SetAtom(&F.Atoms[ 9 ] , "O1", 1.727f, -1.374f, -1.805f ); SetAtom(&F.Atoms[ 10 ] , "O6", 0.805f, 3.882f, -1.275f ); SetAtom(&F.Atoms[ 11 ] , "O2", -1.911f, -0.990f, -1.293f ); SetAtom(&F.Atoms[ 12 ] , "HO2", -2.469f, -0.281f, -0.964f ); SetAtom(&F.Atoms[ 13 ] , "H5", -1.449f, 2.399f, -1.695f ); SetAtom(&F.Atoms[ 14 ] , "H4", 0.338f, 2.075f, 0.463f ); SetAtom(&F.Atoms[ 15 ] , "H3", -0.359f, -0.646f, 0.815f ); SetAtom(&F.Atoms[ 16 ] , "H61", 1.603f, 2.050f, -1.831f ); SetAtom(&F.Atoms[ 17 ] , "H62", 0.582f, 2.844f, -3.070f ); SetAtom(&F.Atoms[ 18 ] , "HO4", -2.341f, 1.079f, 0.396f ); SetAtom(&F.Atoms[ 19 ] , "HO3", 1.749f, -0.898f, 0.004f ); SetAtom(&F.Atoms[ 20 ] , "H11", 0.128f, -2.585f, -1.273f ); SetAtom(&F.Atoms[ 21 ] , "H12", 0.040f, -1.890f, -2.922f ); SetAtom(&F.Atoms[ 22 ] , "HO1", 2.227f, -2.118f, -2.116f ); SetAtom(&F.Atoms[ 23 ] , "H6", 0.020f, 4.399f, -1.421f ); } else{ SetAtom(&F.Atoms[ 0 ] , "O", -0.449f, 0.577f, -2.248f ); SetAtom(&F.Atoms[ 1 ] , "C5", -0.533f, 1.817f, -1.518f ); SetAtom(&F.Atoms[ 2 ] , "C4", -0.458f, 1.473f, 0.000f ); SetAtom(&F.Atoms[ 3 ] , "C3", 0.000f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 4 ] , "C2", -0.557f, -0.530f, -1.344f ); SetAtom(&F.Atoms[ 5 ] , "H5", -1.439f, 2.383f, -1.774f ); SetAtom(&F.Atoms[ 6 ] , "C6", 0.691f, 2.643f, -1.994f ); SetAtom(&F.Atoms[ 7 ] , "O4", -1.682f, 1.681f, 0.724f ); SetAtom(&F.Atoms[ 8 ] , "H4", 0.263f, 2.115f, 0.531f ); SetAtom(&F.Atoms[ 9 ] , "H3", -0.378f, -0.553f, 0.875f ); SetAtom(&F.Atoms[ 10 ] , "O3", 1.440f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 11 ] , "C1", -2.025f, -1.028f, -1.289f ); SetAtom(&F.Atoms[ 12 ] , "O1", -2.941f, 0.032f, -0.964f ); SetAtom(&F.Atoms[ 13 ] , "O6", 0.805f, 3.882f, -1.275f ); SetAtom(&F.Atoms[ 14 ] , "O2", 0.256f, -1.598f, -1.837f ); SetAtom(&F.Atoms[ 15 ] , "H61", 1.614f, 2.068f, -1.830f ); SetAtom(&F.Atoms[ 16 ] , "H62", 0.601f, 2.842f, -3.077f ); SetAtom(&F.Atoms[ 17 ] , "HO4", -2.391f, 1.114f, 0.452f ); SetAtom(&F.Atoms[ 18 ] , "HO3", 1.809f, -0.877f, 0.005f ); SetAtom(&F.Atoms[ 19 ] , "H11", -2.284f, -1.432f, -2.282f ); SetAtom(&F.Atoms[ 20 ] , "H12", -2.103f, -1.839f, -0.546f ); SetAtom(&F.Atoms[ 21 ] , "HO1", -3.851f, -0.256f, -0.953f ); SetAtom(&F.Atoms[ 22 ] , "H6", 0.042f, 4.436f, -1.389f ); SetAtom(&F.Atoms[ 23 ] , "HO2", 1.169f, -1.303f, -1.877f ); } } else if ( !strcmp(Name,"Galactose" ) ){ F.NAtoms = 24 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C5", -2.070f, 1.496f, -0.189f ); SetAtom(&F.Atoms[ 1 ] , "O", -2.450f, 0.707f, -1.345f ); SetAtom(&F.Atoms[ 2 ] , "C1", -2.061f, -0.696f, -1.335f ); SetAtom(&F.Atoms[ 4 ] , "C2", -0.523f, -0.813f, -1.208f ); SetAtom(&F.Atoms[ 5 ] , "O2", -0.158f, -2.166f, -1.070f ); SetAtom(&F.Atoms[ 6 ] , "C3", 0.000f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "O3", 1.406f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 8 ] , "C4", -0.521f, 1.460f, 0.000f ); SetAtom(&F.Atoms[ 9 ] , "O4", 0.078f, 2.150f, -1.071f ); SetAtom(&F.Atoms[ 10 ] , "C6", -2.640f, 2.930f, -0.389f ); SetAtom(&F.Atoms[ 11 ] , "O6", -2.484f, 3.712f, 0.775f ); SetAtom(&F.Atoms[ 12 ] , "H5", -2.552f, 1.067f, 0.709f ); SetAtom(&F.Atoms[ 15 ] , "H2", -0.057f, -0.413f, -2.131f ); SetAtom(&F.Atoms[ 16 ] , "HO2", 0.815f, -2.195f, -1.012f ); SetAtom(&F.Atoms[ 17 ] , "H3", -0.350f, -0.490f, 0.929f ); SetAtom(&F.Atoms[ 18 ] , "HO3", 1.690f, 0.496f, 0.792f ); SetAtom(&F.Atoms[ 19 ] , "H4", -0.228f, 1.954f, 0.948f ); SetAtom(&F.Atoms[ 20 ] , "HO4", 1.042f, 2.102f, -0.940f ); SetAtom(&F.Atoms[ 21 ] , "H61", -3.706f, 2.865f, -0.633f ); SetAtom(&F.Atoms[ 22 ] , "H62", -2.149f, 3.419f, -1.236f ); SetAtom(&F.Atoms[ 23 ] , "H6", -2.865f, 4.571f, 0.582f ); if ( alpha ){ SetAtom(&F.Atoms[ 3 ] , "O1", -2.670f, -1.329f, -0.256f ); SetAtom(&F.Atoms[ 13 ] , "H1", -2.403f, -1.168f, -2.270f ); SetAtom(&F.Atoms[ 14 ] , "HO1", -2.343f, -0.902f, 0.560f ); } else{ SetAtom(&F.Atoms[ 3 ] , "O1", -2.494f, -1.292f, -2.512f ); SetAtom(&F.Atoms[ 13 ] , "H1", -2.544f, -1.198f, -0.476f ); SetAtom(&F.Atoms[ 14 ] , "HO1", -2.063f, -0.826f, -3.254f ); } } else if ( !strcmp(Name,"Glucose" ) ){ F.NAtoms = 24 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C5", -2.070f, 1.496f, -0.189f ); SetAtom(&F.Atoms[ 1 ] , "O", -2.450f, 0.707f, -1.345f ); SetAtom(&F.Atoms[ 2 ] , "C1", -2.061f, -0.696f, -1.335f ); SetAtom(&F.Atoms[ 4 ] , "C2", -0.523f, -0.813f, -1.208f ); SetAtom(&F.Atoms[ 5 ] , "O2", -0.158f, -2.166f, -1.070f ); SetAtom(&F.Atoms[ 6 ] , "C3", 0.000f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "O3", 1.406f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 8 ] , "C4", -0.521f, 1.460f, 0.000f ); SetAtom(&F.Atoms[ 9 ] , "O4", -0.148f, 2.087f, 1.204f ); SetAtom(&F.Atoms[ 10 ] , "C6", -2.640f, 2.930f, -0.389f ); SetAtom(&F.Atoms[ 11 ] , "O6", -2.484f, 3.712f, 0.775f ); SetAtom(&F.Atoms[ 12 ] , "H5", -2.552f, 1.067f, 0.709f ); SetAtom(&F.Atoms[ 15 ] , "H2", -0.057f, -0.413f, -2.131f ); SetAtom(&F.Atoms[ 16 ] , "HO2", 0.815f, -2.195f, -1.012f ); SetAtom(&F.Atoms[ 17 ] , "H3", -0.350f, -0.490f, 0.929f ); SetAtom(&F.Atoms[ 18 ] , "HO3", 1.690f, 0.496f, 0.792f ); SetAtom(&F.Atoms[ 19 ] , "H4", -0.050f, 2.003f, -0.843f ); SetAtom(&F.Atoms[ 20 ] , "HO4", -0.469f, 3.005f, 1.161f ); SetAtom(&F.Atoms[ 21 ] , "H61", -3.706f, 2.865f, -0.633f ); SetAtom(&F.Atoms[ 22 ] , "H62", -2.149f, 3.419f, -1.236f ); SetAtom(&F.Atoms[ 23 ] , "H6", -2.865f, 4.571f, 0.582f ); if ( alpha ){ SetAtom(&F.Atoms[ 3 ] , "O1", -2.670f, -1.329f, -0.256f ); SetAtom(&F.Atoms[ 13 ] , "H1", -2.403f, -1.168f, -2.270f ); SetAtom(&F.Atoms[ 14 ] , "HO1", -2.343f, -0.902f, 0.560f ); } else{ SetAtom(&F.Atoms[ 3 ] , "O1", -2.494f, -1.292f, -2.512f ); SetAtom(&F.Atoms[ 13 ] , "H1", -2.544f, -1.198f, -0.476f ); SetAtom(&F.Atoms[ 14 ] , "HO1", -2.063f, -0.826f, -3.254f ); } } else if ( !strcmp(Name,"Gulose" ) ){ F.NAtoms = 24 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C5", -0.167f, 2.160f, 1.365f ); SetAtom(&F.Atoms[ 1 ] , "O", -0.667f, 1.350f, 2.458f ); SetAtom(&F.Atoms[ 2 ] , "C1", -0.160f, -0.012f, 2.547f ); SetAtom(&F.Atoms[ 4 ] , "C2", -0.488f, -0.780f, 1.244f ); SetAtom(&F.Atoms[ 5 ] , "O2", 0.112f, -2.053f, 1.277f ); SetAtom(&F.Atoms[ 6 ] , "C3", 0.000f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "O3", 1.404f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 8 ] , "C4", -0.482f, 1.473f, 0.000f ); SetAtom(&F.Atoms[ 9 ] , "O4", -1.875f, 1.489f, -0.200f ); SetAtom(&F.Atoms[ 10 ] , "C6", -0.789f, 3.579f, 1.507f ); SetAtom(&F.Atoms[ 11 ] , "O6", -0.208f, 4.489f, 0.599f ); SetAtom(&F.Atoms[ 12 ] , "H5", 0.929f, 2.264f, 1.471f ); SetAtom(&F.Atoms[ 15 ] , "H2", -1.587f, -0.908f, 1.172f ); SetAtom(&F.Atoms[ 16 ] , "HO2", -0.135f, -2.508f, 0.450f ); SetAtom(&F.Atoms[ 17 ] , "H3", -0.351f, -0.507f, -0.921f ); SetAtom(&F.Atoms[ 18 ] , "HO3", 1.690f, -0.933f, -0.021f ); SetAtom(&F.Atoms[ 19 ] , "H4", 0.002f, 2.017f, -0.836f ); SetAtom(&F.Atoms[ 20 ] , "HO4", -2.049f, 1.044f, -1.048f ); SetAtom(&F.Atoms[ 21 ] , "H61", -0.628f, 3.945f, 2.527f ); SetAtom(&F.Atoms[ 22 ] , "H62", -1.871f, 3.536f, 1.352f ); SetAtom(&F.Atoms[ 23 ] , "H6", -0.630f, 5.337f, 0.750f ); if ( alpha ){ SetAtom(&F.Atoms[ 3 ] , "O1", 1.218f, 0.026f, 2.734f ); SetAtom(&F.Atoms[ 13 ] , "H1", -0.627f, -0.512f, 3.411f ); SetAtom(&F.Atoms[ 14 ] , "HO1", 1.610f, 0.462f, 1.952f ); } else{ SetAtom(&F.Atoms[ 3 ] , "O1", -0.750f, -0.642f, 3.637f ); SetAtom(&F.Atoms[ 13 ] , "H1", 0.933f, 0.018f, 2.695f ); SetAtom(&F.Atoms[ 14 ] , "HO1", -1.716f, -0.647f, 3.488f ); } } else if ( !strcmp(Name,"Idose" ) ){ F.NAtoms = 24 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C5", -0.167f, 2.160f, 1.365f ); SetAtom(&F.Atoms[ 1 ] , "O", -0.667f, 1.350f, 2.458f ); SetAtom(&F.Atoms[ 2 ] , "C1", -0.160f, -0.012f, 2.547f ); SetAtom(&F.Atoms[ 4 ] , "C2", -0.488f, -0.780f, 1.244f ); SetAtom(&F.Atoms[ 5 ] , "O2", -1.884f, -0.943f, 1.153f ); SetAtom(&F.Atoms[ 6 ] , "C3", 0.000f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "O3", 1.404f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 8 ] , "C4", -0.482f, 1.473f, 0.000f ); SetAtom(&F.Atoms[ 9 ] , "O4", -1.875f, 1.489f, -0.200f ); SetAtom(&F.Atoms[ 10 ] , "C6", -0.789f, 3.579f, 1.507f ); SetAtom(&F.Atoms[ 11 ] , "O6", -0.208f, 4.489f, 0.599f ); SetAtom(&F.Atoms[ 12 ] , "H5", 0.929f, 2.264f, 1.471f ); SetAtom(&F.Atoms[ 15 ] , "H2", -0.016f, -1.783f, 1.271f ); SetAtom(&F.Atoms[ 16 ] , "HO2", -2.166f, -1.442f, 1.942f ); SetAtom(&F.Atoms[ 17 ] , "H3", -0.351f, -0.507f, -0.921f ); SetAtom(&F.Atoms[ 18 ] , "HO3", 1.690f, -0.933f, -0.021f ); SetAtom(&F.Atoms[ 19 ] , "H4", 0.002f, 2.017f, -0.836f ); SetAtom(&F.Atoms[ 20 ] , "HO4", -2.049f, 1.044f, -1.048f ); SetAtom(&F.Atoms[ 21 ] , "H61", -0.628f, 3.945f, 2.527f ); SetAtom(&F.Atoms[ 22 ] , "H62", -1.871f, 3.536f, 1.352f ); SetAtom(&F.Atoms[ 23 ] , "H6", -0.630f, 5.337f, 0.750f ); if ( alpha ){ SetAtom(&F.Atoms[ 3 ] , "O1", 1.218f, 0.026f, 2.734f ); SetAtom(&F.Atoms[ 13 ] , "H1", -0.627f, -0.512f, 3.411f ); SetAtom(&F.Atoms[ 14 ] , "HO1", 1.610f, 0.462f, 1.952f ); } else{ SetAtom(&F.Atoms[ 3 ] , "O1", -0.750f, -0.642f, 3.637f ); SetAtom(&F.Atoms[ 13 ] , "H1", 0.933f, 0.018f, 2.695f ); SetAtom(&F.Atoms[ 14 ] , "HO1", -1.716f, -0.647f, 3.488f ); } } else if ( !strcmp(Name,"Lyxose" ) ){ F.NAtoms = 20 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C4", -0.508f, 1.442f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "O", -0.510f, 1.862f, -1.369f ); SetAtom(&F.Atoms[ 2 ] , "C1", -0.379f, 0.724f, -2.228f ); SetAtom(&F.Atoms[ 4 ] , "C2", -0.496f, -0.519f, -1.346f ); SetAtom(&F.Atoms[ 5 ] , "O2", 0.330f, -1.564f, -1.819f ); SetAtom(&F.Atoms[ 6 ] , "C3", 0.000f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "O3", 1.412f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 8 ] , "C5", 0.314f, 2.407f, 0.858f ); SetAtom(&F.Atoms[ 9 ] , "O5", 0.266f, 2.031f, 2.218f ); SetAtom(&F.Atoms[ 10 ] , "H4", -1.556f, 1.453f, 0.336f ); SetAtom(&F.Atoms[ 13 ] , "H2", -1.544f, -0.847f, -1.290f ); SetAtom(&F.Atoms[ 14 ] , "HO2", 0.273f, -2.320f, -1.211f ); SetAtom(&F.Atoms[ 15 ] , "H3", -0.391f, -0.578f, 0.850f ); SetAtom(&F.Atoms[ 16 ] , "HO3", 1.734f, 0.505f, -0.766f ); SetAtom(&F.Atoms[ 17 ] , "H51", -0.097f, 3.413f, 0.753f ); SetAtom(&F.Atoms[ 18 ] , "H52", 1.350f, 2.406f, 0.517f ); SetAtom(&F.Atoms[ 19 ] , "H5", 0.788f, 2.654f, 2.728f ); if ( alpha ){ SetAtom(&F.Atoms[ 3 ] , "O1", -1.386f, 0.775f, -3.186f ); SetAtom(&F.Atoms[ 11 ] , "H1", 0.612f, 0.784f, -2.700f ); SetAtom(&F.Atoms[ 12 ] , "HO1", -1.211f, 0.110f, -3.873f ); } else{ SetAtom(&F.Atoms[ 3 ] , "O1", 0.878f, 0.799f, -2.826f ); SetAtom(&F.Atoms[ 11 ] , "H1", -1.173f, 0.763f, -2.986f ); SetAtom(&F.Atoms[ 12 ] , "HO1", 0.904f, 1.569f, -3.418f ); } } else if ( !strcmp(Name,"Mannose" ) ){ F.NAtoms = 24 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C5", -2.070f, 1.496f, -0.189f ); SetAtom(&F.Atoms[ 1 ] , "O", -2.450f, 0.707f, -1.345f ); SetAtom(&F.Atoms[ 2 ] , "C1", -2.061f, -0.696f, -1.335f ); SetAtom(&F.Atoms[ 4 ] , "C2", -0.523f, -0.813f, -1.208f ); SetAtom(&F.Atoms[ 5 ] , "O2", 0.069f, -0.306f, -2.381f ); SetAtom(&F.Atoms[ 6 ] , "C3", 0.000f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "O3", 1.406f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 8 ] , "C4", -0.521f, 1.460f, 0.000f ); SetAtom(&F.Atoms[ 9 ] , "O4", -0.148f, 2.087f, 1.204f ); SetAtom(&F.Atoms[ 10 ] , "C6", -2.640f, 2.930f, -0.389f ); SetAtom(&F.Atoms[ 11 ] , "O6", -2.484f, 3.712f, 0.775f ); SetAtom(&F.Atoms[ 12 ] , "H5", -2.552f, 1.067f, 0.709f ); SetAtom(&F.Atoms[ 15 ] , "H2", -0.236f, -1.879f, -1.100f ); SetAtom(&F.Atoms[ 16 ] , "HO2", -0.270f, -0.838f, -3.125f ); SetAtom(&F.Atoms[ 17 ] , "H3", -0.350f, -0.490f, 0.929f ); SetAtom(&F.Atoms[ 18 ] , "HO3", 1.690f, 0.496f, 0.792f ); SetAtom(&F.Atoms[ 19 ] , "H4", -0.050f, 2.003f, -0.843f ); SetAtom(&F.Atoms[ 20 ] , "HO4", -0.469f, 3.005f, 1.161f ); SetAtom(&F.Atoms[ 21 ] , "H61", -3.706f, 2.865f, -0.633f ); SetAtom(&F.Atoms[ 22 ] , "H62", -2.149f, 3.419f, -1.236f ); SetAtom(&F.Atoms[ 23 ] , "H6", -2.865f, 4.571f, 0.582f ); if ( alpha ){ SetAtom(&F.Atoms[ 3 ] , "O1", -2.670f, -1.329f, -0.256f ); SetAtom(&F.Atoms[ 13 ] , "H1", -2.403f, -1.168f, -2.270f ); SetAtom(&F.Atoms[ 14 ] , "HO1", -2.343f, -0.902f, 0.560f ); } else{ SetAtom(&F.Atoms[ 3 ] , "O1", -2.494f, -1.292f, -2.512f ); SetAtom(&F.Atoms[ 13 ] , "H1", -2.544f, -1.198f, -0.476f ); SetAtom(&F.Atoms[ 14 ] , "HO1", -2.063f, -0.826f, -3.254f ); } } else if ( !strcmp(Name,"Ribose" ) ){ F.NAtoms = 20 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C4", -0.577f, 1.416f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "O", -1.854f, 1.324f, 0.641f ); SetAtom(&F.Atoms[ 2 ] , "C1", -1.966f, 0.072f, 1.327f ); SetAtom(&F.Atoms[ 4 ] , "C2", -0.590f, -0.591f, 1.277f ); SetAtom(&F.Atoms[ 5 ] , "O2", 0.168f, -0.229f, 2.414f ); SetAtom(&F.Atoms[ 6 ] , "C3", 0.000f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "O3", 1.413f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 8 ] , "C5", -0.715f, 2.048f, -1.388f ); SetAtom(&F.Atoms[ 9 ] , "O5", 0.551f, 2.198f, -1.995f ); SetAtom(&F.Atoms[ 10 ] , "H4", 0.050f, 2.058f, 0.636f ); SetAtom(&F.Atoms[ 13 ] , "H2", -0.676f, -1.685f, 1.199f ); SetAtom(&F.Atoms[ 14 ] , "HO2", -0.271f, -0.564f, 3.215f ); SetAtom(&F.Atoms[ 15 ] , "H3", -0.392f, -0.554f, -0.864f ); SetAtom(&F.Atoms[ 16 ] , "HO3", 1.735f, 0.506f, 0.765f ); SetAtom(&F.Atoms[ 17 ] , "H51", -1.178f, 3.031f, -1.285f ); SetAtom(&F.Atoms[ 18 ] , "H52", -1.347f, 1.417f, -2.014f ); SetAtom(&F.Atoms[ 19 ] , "H5", 0.430f, 2.596f, -2.860f ); if ( alpha ){ SetAtom(&F.Atoms[ 3 ] , "O1", -2.374f, 0.319f, 2.633f ); SetAtom(&F.Atoms[ 11 ] , "H1", -2.715f, -0.528f, 0.790f ); SetAtom(&F.Atoms[ 12 ] , "HO1", -2.618f, -0.520f, 3.059f ); } else{ SetAtom(&F.Atoms[ 3 ] , "O1", -2.916f, -0.690f, 0.645f ); SetAtom(&F.Atoms[ 11 ] , "H1", -2.291f, 0.263f, 2.357f ); SetAtom(&F.Atoms[ 12 ] , "HO1", -3.787f, -0.271f, 0.737f ); } } else if ( !strcmp(Name,"Talose" ) ){ F.NAtoms = 24 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C5", -2.070f, 1.496f, -0.189f ); SetAtom(&F.Atoms[ 1 ] , "O", -2.450f, 0.707f, -1.345f ); SetAtom(&F.Atoms[ 2 ] , "C1", -2.061f, -0.696f, -1.335f ); SetAtom(&F.Atoms[ 4 ] , "C2", -0.523f, -0.813f, -1.208f ); SetAtom(&F.Atoms[ 5 ] , "O2", 0.069f, -0.306f, -2.381f ); SetAtom(&F.Atoms[ 6 ] , "C3", 0.000f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "O3", 1.406f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 8 ] , "C4", -0.521f, 1.460f, 0.000f ); SetAtom(&F.Atoms[ 9 ] , "O4", 0.078f, 2.150f, -1.071f ); SetAtom(&F.Atoms[ 10 ] , "C6", -2.640f, 2.930f, -0.389f ); SetAtom(&F.Atoms[ 11 ] , "O6", -2.484f, 3.712f, 0.775f ); SetAtom(&F.Atoms[ 12 ] , "H5", -2.552f, 1.067f, 0.709f ); SetAtom(&F.Atoms[ 15 ] , "H2", -0.236f, -1.879f, -1.100f ); SetAtom(&F.Atoms[ 16 ] , "HO2", -0.270f, -0.838f, -3.125f ); SetAtom(&F.Atoms[ 17 ] , "H3", -0.350f, -0.490f, 0.929f ); SetAtom(&F.Atoms[ 18 ] , "HO3", 1.690f, 0.496f, 0.792f ); SetAtom(&F.Atoms[ 19 ] , "H4", -0.228f, 1.954f, 0.948f ); SetAtom(&F.Atoms[ 20 ] , "HO4", 1.042f, 2.102f, -0.940f ); SetAtom(&F.Atoms[ 21 ] , "H61", -3.706f, 2.865f, -0.633f ); SetAtom(&F.Atoms[ 22 ] , "H62", -2.149f, 3.419f, -1.236f ); SetAtom(&F.Atoms[ 23 ] , "H6", -2.865f, 4.571f, 0.582f ); if ( alpha ){ SetAtom(&F.Atoms[ 3 ] , "O1", -2.670f, -1.329f, -0.256f ); SetAtom(&F.Atoms[ 13 ] , "H1", -2.403f, -1.168f, -2.270f ); SetAtom(&F.Atoms[ 14 ] , "HO1", -2.343f, -0.902f, 0.560f ); } else{ SetAtom(&F.Atoms[ 3 ] , "O1", -2.494f, -1.292f, -2.512f ); SetAtom(&F.Atoms[ 13 ] , "H1", -2.544f, -1.198f, -0.476f ); SetAtom(&F.Atoms[ 14 ] , "HO1", -2.063f, -0.826f, -3.254f ); } } else if ( !strcmp(Name,"Xylose" ) ){ F.NAtoms = 20 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "C4", -0.508f, 1.442f, 0.000f ); SetAtom(&F.Atoms[ 1 ] , "O", -0.510f, 1.862f, -1.369f ); SetAtom(&F.Atoms[ 2 ] , "C1", -0.379f, 0.724f, -2.228f ); SetAtom(&F.Atoms[ 4 ] , "C2", -0.496f, -0.519f, -1.346f ); SetAtom(&F.Atoms[ 5 ] , "O2", -1.844f, -0.942f, -1.274f ); SetAtom(&F.Atoms[ 6 ] , "C3", 0.000f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 7 ] , "O3", 1.412f, 0.000f, 0.000f ); SetAtom(&F.Atoms[ 8 ] , "C5", 0.314f, 2.407f, 0.858f ); SetAtom(&F.Atoms[ 9 ] , "O5", 0.266f, 2.031f, 2.218f ); SetAtom(&F.Atoms[ 10 ] , "H4", -1.556f, 1.453f, 0.336f ); SetAtom(&F.Atoms[ 13 ] , "H2", 0.147f, -1.332f, -1.714f ); SetAtom(&F.Atoms[ 14 ] , "HO2", -2.148f, -1.202f, -2.160f ); SetAtom(&F.Atoms[ 15 ] , "H3", -0.391f, -0.578f, 0.850f ); SetAtom(&F.Atoms[ 16 ] , "HO3", 1.734f, 0.505f, -0.766f ); SetAtom(&F.Atoms[ 17 ] , "H51", -0.097f, 3.413f, 0.753f ); SetAtom(&F.Atoms[ 18 ] , "H52", 1.350f, 2.406f, 0.517f ); SetAtom(&F.Atoms[ 19 ] , "H5", 0.788f, 2.654f, 2.728f ); if ( alpha ){ SetAtom(&F.Atoms[ 3 ] , "O1", -1.386f, 0.775f, -3.186f ); SetAtom(&F.Atoms[ 11 ] , "H1", 0.612f, 0.784f, -2.700f ); SetAtom(&F.Atoms[ 12 ] , "HO1", -1.211f, 0.110f, -3.873f ); } else{ SetAtom(&F.Atoms[ 3 ] , "O1", 0.878f, 0.799f, -2.826f ); SetAtom(&F.Atoms[ 11 ] , "H1", -1.173f, 0.763f, -2.986f ); SetAtom(&F.Atoms[ 12 ] , "HO1", 0.904f, 1.569f, -3.418f ); } } for(i=0;i<(gint)strlen(Name);i++) T[i] = toupper(Name[i]); if(strlen(Name)>0) { T[strlen(Name)] ='\0'; if(strlen(Name)>3) T[3] = '\0'; if(!strcmp(T,"GLU")) T[2] = 'C'; SetResidue(&F,T); } else SetResidue(&F,"UNK"); SetMMTypes(&F); return F; } GabeditSrc250/src/Geometry/FragmentsPNA.h0000644000175100017510000000023013130665226020507 0ustar alloucheallouche #ifndef __GABEDIT_FRAGMENTSPNA_H__ #define __GABEDIT_FRAGMENTSPNA_H__ Fragment GetFragmentPNA(gchar* Name); #endif /* __GABEDIT_FRAGMENTSPNA_H__ */ GabeditSrc250/src/Geometry/ImagesGeom.h0000644000175100017510000000110013130665226020234 0ustar alloucheallouche #ifndef __GABEDIT_IMAGESGEOM_H__ #define __GABEDIT_IMAGESGEOM_H__ void save_geometry_jpeg_file(GabeditFileChooser *SelecFile, gint response_id); void save_geometry_ppm_file(GabeditFileChooser *SelecFile, gint response_id); void save_geometry_bmp_file(GabeditFileChooser *SelecFile, gint response_id); void save_geometry_ps_file(GabeditFileChooser *SelecFile, gint response_id); void save_geometry_png_file(GabeditFileChooser *SelecFile, gint response_id); void save_geometry_tiff_file(GabeditFileChooser *SelecFile, gint response_id); #endif /* __GABEDIT_IMAGESGEOM_H__ */ GabeditSrc250/src/Geometry/BuildPolySaccharide.h0000644000175100017510000000025013130665226022076 0ustar alloucheallouche #ifndef __GABEDIT_BUILDPOLYSACCHARIDE_H__ #define __GABEDIT_BUILDPOLYSACCHARIDE_H__ void build_polysaccharide_dlg(); #endif /* __GABEDIT_BUILDPOLYSACCHARIDE_H__ */ GabeditSrc250/src/Geometry/ImagesGeom.c0000644000175100017510000005532713130665226020253 0ustar alloucheallouche/* ImagesGeom.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Common/Global.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #ifdef DRAWGEOMGL #include #include /**************************************************************************/ static void snapshot_pixbuf_free (guchar *pixels, gpointer data) { g_free (pixels); } /**************************************************************************/ static GdkPixbuf *get_pixbuf_gl(guchar* colorTrans) { gint stride; GdkPixbuf *pixbuf = NULL; GdkPixbuf *tmp = NULL; GdkPixbuf *tmp2 = NULL; guchar *data; gint height; gint width; GLint viewport[4]; glGetIntegerv(GL_VIEWPORT, viewport); width = viewport[2]; height = viewport[3]; stride = width*4; data = g_malloc0 (sizeof (guchar) * stride * height); #ifdef G_OS_WIN32 glReadBuffer(GL_BACK); glReadPixels(0,0,width,height,GL_RGBA,GL_UNSIGNED_BYTE,data); #else glReadBuffer(GL_FRONT); glReadPixels(0,0,width,height,GL_RGBA,GL_UNSIGNED_BYTE,data); #endif tmp = gdk_pixbuf_new_from_data (data, GDK_COLORSPACE_RGB, TRUE, 8, width, height, stride, snapshot_pixbuf_free, NULL); if(tmp) { tmp2 = gdk_pixbuf_flip (tmp, TRUE); g_object_unref (tmp); } if(tmp2) { pixbuf = gdk_pixbuf_rotate_simple (tmp2, GDK_PIXBUF_ROTATE_UPSIDEDOWN); g_object_unref (tmp2); } if(colorTrans) { tmp = gdk_pixbuf_add_alpha(pixbuf, TRUE, colorTrans[0], colorTrans[1], colorTrans[2]); if(tmp!=pixbuf) { g_object_unref (pixbuf); pixbuf = tmp; } } return pixbuf; } /*************************************************************************/ static void gabedit_save_image_gl(GtkWidget* widget, gchar *fileName, gchar* type, guchar* colorTrans) { GError *error = NULL; GdkPixbuf *pixbuf = NULL; pixbuf = get_pixbuf_gl(colorTrans); if(pixbuf) { if(!fileName) { GtkClipboard * clipboard; clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); if(clipboard) { gtk_clipboard_clear(clipboard); gtk_clipboard_set_image(clipboard, pixbuf); } } else { if(type && strstr(type,"j") && strstr(type,"g") ) gdk_pixbuf_save(pixbuf, fileName, type, &error, "quality", "100", NULL); else if(type && strstr(type,"png")) gdk_pixbuf_save(pixbuf, fileName, type, &error, "compression", "5", NULL); else if(type && (strstr(type,"tif") || strstr(type,"tiff"))) gdk_pixbuf_save(pixbuf, fileName, "tiff", &error, "compression", "1", NULL); else gdk_pixbuf_save(pixbuf, fileName, type, &error, NULL); } g_object_unref (pixbuf); } } #endif /**********************************************************************************************************************************/ static void save_geometry_image(GabeditFileChooser *SelecFile, gchar* type, guchar* colorTrans) { gchar *fileName; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); gtk_window_move(GTK_WINDOW(GeomDlg),0,0); rafresh_drawing(); while( gtk_events_pending() ) gtk_main_iteration(); #ifdef DRAWGEOMGL gabedit_save_image_gl(GeomDrawingArea, fileName, type, colorTrans); #else gabedit_save_image(GeomDrawingArea, fileName, type); #endif } /************************************************************************** * Get image in rgb format **************************************************************************/ guchar *get_rgb_image() { if(!GeomDrawingArea) { Message(_("Sorry I can not create image file \nbecause Geometry display windows is closed"),_("Error"),TRUE); return NULL; } #ifdef DRAWGEOMGL { GdkPixbuf* tmp = get_pixbuf_gl(NULL); guchar *data = NULL; if(tmp) data =gdk_pixbuf_get_pixels(tmp); return data; } #endif { gdouble fac=255.0/65535.0; GdkPixmap* pixmap = get_drawing_pixmap(); GdkColormap *colormap = get_drawing_colormap(); guint height = GeomDrawingArea->allocation.height; guint width = GeomDrawingArea->allocation.width; guint32 pixel; GdkImage* image = NULL; GdkVisual *v; guint8 component; guint k=0; gint x; gint y; gint i; guchar* rgbbuf=(guchar *) g_malloc(3*width*height*sizeof(guchar)); if(!pixmap || !colormap) return NULL; if(!rgbbuf) { Message(_("Sorry: couldn't allocate memory\n"),_("Error"),TRUE); return NULL; } /* Debug("End get colormap\n");*/ image = gdk_drawable_get_image(GeomDrawingArea->window,0,0,width,height); /* Debug("End get Image\n");*/ v = gdk_colormap_get_visual(colormap); /* Debug("End get visual\n");*/ switch(v->type) { case GDK_VISUAL_STATIC_GRAY: case GDK_VISUAL_GRAYSCALE: case GDK_VISUAL_STATIC_COLOR: case GDK_VISUAL_PSEUDO_COLOR: for(y=height-1;y>=0;y--) for(x=0;x<(gint)width;x++) { pixel = gdk_image_get_pixel(image, x, y); rgbbuf[k] = (guchar)(colormap->colors[pixel].red*fac); rgbbuf[k+1] =(guchar) (colormap->colors[pixel].green*fac); rgbbuf[k+2] =(guchar) (colormap->colors[pixel].blue*fac); k+=3; } break; case GDK_VISUAL_TRUE_COLOR: /* Debug("True color\n");*/ for(y=height-1;y>=0;y--) for(x=0;x<(gint)width;x++) { pixel = gdk_image_get_pixel(image, x, y); component = 0; for (i = 24; i < 32; i += v->red_prec) component |= ((pixel & v->red_mask) << (32 - v->red_shift - v->red_prec)) >> i; rgbbuf[k] = (guchar)(component); component = 0; for (i = 24; i < 32; i += v->green_prec) component |= ((pixel & v->green_mask) << (32 - v->green_shift - v->green_prec)) >> i; rgbbuf[k+1] = (guchar)(component); component = 0; for (i = 24; i < 32; i += v->blue_prec) component |= ((pixel & v->blue_mask) << (32 - v->blue_shift - v->blue_prec)) >> i; rgbbuf[k+2] = (guchar)(component); k += 3; } break; case GDK_VISUAL_DIRECT_COLOR: for(y=height-1;y>=0;y--) for(x=0;x<(gint)width;x++) { pixel = gdk_image_get_pixel(image, x, y); component = colormap->colors[((pixel & v->red_mask) << (32 - v->red_shift - v->red_prec)) >> 24].red; rgbbuf[k] = (guchar)(component*fac); component = colormap->colors[((pixel & v->green_mask) << (32 - v->green_shift - v->green_prec)) >> 24].green; rgbbuf[k+1] = (guchar)(component*fac); component = colormap->colors[((pixel & v->blue_mask) << (32 - v->blue_shift - v->blue_prec)) >> 24].blue; rgbbuf[k+2] = (guchar)(component*fac); k += 3; } break; default : Message(_("Unknown visual\n"),_("Error"),TRUE); g_free(rgbbuf); return NULL; } return rgbbuf; } return NULL; } /************************************************************************** * Save the Frame Buffer in a jpeg format file **************************************************************************/ void save_geometry_jpeg_file(GabeditFileChooser *SelecFile, gint response_id) { if(response_id != GTK_RESPONSE_OK) return; save_geometry_image(SelecFile, "jpeg",NULL); } /************************************************************************** * Save the Frame Buffer in a ppm format file **************************************************************************/ #ifdef DRAWGEOMGL static gchar* save_ppm(gchar* fileName) { FILE *file; int i; int j; int k; int width; int height; GLubyte *rgbbuf; static gchar message[1024]; int ierr; if ((!fileName) || (strcmp(fileName,"") == 0)) { sprintf(message,_("Sorry\n No selected file")); return message; } file = FOpen(fileName,"wb"); if (!file) { sprintf(message,_("Sorry: can't open %s file\n"), fileName); return message; } height = GeomDrawingArea->allocation.height; width = GeomDrawingArea->allocation.width; glPixelStorei(GL_PACK_ROW_LENGTH,width); glPixelStorei(GL_PACK_ALIGNMENT,1); rgbbuf = (GLubyte *) malloc(3*width*height*sizeof(GLubyte)); if (!rgbbuf) { sprintf(message,_("Sorry: couldn't allocate memory\n")); fclose(file); return message; } #ifdef G_OS_WIN32 glReadPixels(0,0,width,height,GL_RGB,GL_UNSIGNED_BYTE,rgbbuf); #else glReadBuffer(GL_FRONT); glReadPixels(0,0,width,height,GL_RGB,GL_UNSIGNED_BYTE,rgbbuf); #endif fprintf(file,"P6\n"); fprintf(file,"#Image rendered with gabedit\n"); fprintf(file,"%d\n%d\n255\n", width,height); for(i=height-1; i>= 0; i--){ for(j=0; j< width; j++){ k = 3*(j + i*width); ierr = fwrite( &rgbbuf[k] ,sizeof(*rgbbuf), 1, file); ierr = fwrite( &rgbbuf[k+1] ,sizeof(*rgbbuf), 1, file); ierr = fwrite( &rgbbuf[k+2] ,sizeof(*rgbbuf), 1, file); } } fclose(file); free(rgbbuf); return NULL; } #else static gchar* save_ppm(gchar* FileName) { FILE *file; int i; int j; int k; int width; int height; guchar *rgbbuf; static gchar message[1024]; file = FOpen(FileName,"wb"); if (!file) { sprintf(message,_("Sorry: can't open %s file\n"), FileName); return message; } rgbbuf = get_rgb_image(); if (!rgbbuf) { sprintf(message,_("Sorry: couldn't allocate memory\n")); fclose(file); return message; } width = GeomDrawingArea->allocation.width; height = GeomDrawingArea->allocation.height; fprintf(file,"P6\n"); fprintf(file,"#Image rendered with gabedit\n"); fprintf(file,"%d\n%d\n255\n", width,height); for(i=height-1; i>= 0; i--){ for(j=0; j< width; j++){ k = 3*(j + i*width); fwrite( &rgbbuf[k] ,sizeof(*rgbbuf), 1, file); fwrite( &rgbbuf[k+1] ,sizeof(*rgbbuf), 1, file); fwrite( &rgbbuf[k+2] ,sizeof(*rgbbuf), 1, file); } } fclose(file); g_free(rgbbuf); return NULL; } #endif /**************************************************************************/ void save_geometry_ppm_file(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; gchar* message; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } gtk_widget_hide(GTK_WIDGET(SelecFile)); gtk_window_move(GTK_WINDOW(GeomDlg),0,0); rafresh_drawing(); while( gtk_events_pending() ) gtk_main_iteration(); message = save_ppm(fileName); if(message != NULL) { Message(message,_("Error"),TRUE); } } /************************************************************************** * Save the Frame Buffer in a bmp format file **************************************************************************/ static void WLSBL(int val,char* arr) { arr[0] = (char) (val&0xff); arr[1] = (char) ((val>>8) &0xff); arr[2] = (char) ((val>>16)&0xff); arr[3] = (char) ((val>>24)&0xff); } /**************************************************************************/ #ifdef DRAWGEOMGL static gchar* save_bmp(gchar* fileName) { FILE *file; int i; int j; int width; int height; GLubyte *rgbbuf; GLubyte rgbtmp[3]; int pad; static gchar message[1024]; int ierr; char bmp_header[]= { 'B','M', 0,0,0,0, 0,0, 0,0, 54,0,0,0, 40,0,0,0, 0,0,0,0, 0,0,0,0, 1,0, 24,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 }; if ((!fileName) || (strcmp(fileName,"") == 0)) { sprintf(message,_("Sorry\n No selected file")); return message; } file = FOpen(fileName,"wb"); if (!file) { sprintf(message,_("Sorry: can't open %s file\n"), fileName); return message; } height = GeomDrawingArea->allocation.height; width = GeomDrawingArea->allocation.width; glPixelStorei(GL_PACK_ROW_LENGTH,width); glPixelStorei(GL_PACK_ALIGNMENT,1); rgbbuf = (GLubyte *)malloc(3*width*height*sizeof(GLubyte)); if (!rgbbuf) { sprintf(message,_("Sorry: couldn't allocate memory\n")); fclose(file); return message; } #ifdef G_OS_WIN32 glReadPixels(0,0,width,height,GL_RGB,GL_UNSIGNED_BYTE,rgbbuf); #else glReadBuffer(GL_FRONT); glReadPixels(0,0,width,height,GL_RGB,GL_UNSIGNED_BYTE,rgbbuf); #endif /* The number of bytes on a screenline should be wholly devisible by 4 */ pad = (width*3)%4; if (pad) pad = 4 - pad; WLSBL((int) (3*width+pad)*height+54,bmp_header+2); WLSBL((int) width,bmp_header+18); WLSBL((int) height,bmp_header+22); WLSBL((int) 3*width*height,bmp_header+34); ierr = fwrite(bmp_header,1,54,file); for (i=0;iallocation.height; width = GeomDrawingArea->allocation.width; rgbbuf = get_rgb_image(); if (!rgbbuf) { sprintf(message,_("Sorry: couldn't allocate memory\n")); fclose(file); return message; } pad = (width*3)%4; if (pad) pad = 4 - pad; WLSBL((int) (3*width+pad)*height+54,bmp_header+2); WLSBL((int) width,bmp_header+18); WLSBL((int) height,bmp_header+22); WLSBL((int) 3*width*height,bmp_header+34); fwrite(bmp_header,1,54,file); for (i=0;iallocation.height; width = GeomDrawingArea->allocation.width; #ifdef DRAWGEOMGL glPixelStorei(GL_PACK_ROW_LENGTH,width); glPixelStorei(GL_PACK_ALIGNMENT,1); rgbbuf = (GLubyte *) malloc(3*width*height*sizeof(GLubyte)); #else rgbbuf = get_rgb_image(); #endif if (!rgbbuf) { Message(_("Sorry: couldn't allocate memory\n"),_("Error"),TRUE); return; } #ifdef DRAWGEOMGL #ifdef G_OS_WIN32 glReadPixels(0,0,width,height,GL_RGB,GL_UNSIGNED_BYTE,rgbbuf); #else glReadBuffer(GL_FRONT); glReadPixels(0,0,width,height,GL_RGB,GL_UNSIGNED_BYTE,rgbbuf); #endif #endif file = FOpen(fileName,"w"); if (!file) { Message(_("Sorry: can't open output file\n"),_("Error"),TRUE); return; } fprintf(file,"%%!PS-Adobe-2.0 EPSF-2.0\n"); fprintf(file,"%%%%BoundingBox: 16 16 %d %d\n",width+16,height+16); fprintf(file,"%%%%Creator: gabedit\n"); fprintf(file,"%%%%Title: gabedit output file\n"); fprintf(file,"%%%%EndComments\n"); ps_header(file); fprintf(file,"/picstr %d string def\n",height*3); fprintf(file,"16 16 translate\n"); fprintf(file,"%d %d scale\n",width,height); fprintf(file,"%d %d 8 [ %d 0 0 %d 0 0] \n",width,height,width,height); fprintf(file,"{ currentfile picstr readhexstring pop }\n"); fprintf(file,"false 3 colorimage\n"); j = k = 0; for (i=0;i70){ fprintf(file,"\n"); k=0; } } fprintf(file,"\nshowpage\n"); fprintf(file,"%%%%Trailer\n"); fclose(file); g_free(rgbbuf); } /**********************************************************************************************************************************/ void save_geometry_png_file(GabeditFileChooser *SelecFile, gint response_id) { if(response_id != GTK_RESPONSE_OK) return; save_geometry_image(SelecFile, "png",NULL); } /**********************************************************************************************************************************/ void save_geometry_tiff_file(GabeditFileChooser *SelecFile, gint response_id) { if(response_id != GTK_RESPONSE_OK) return; save_geometry_image(SelecFile, "tiff",NULL); } GabeditSrc250/src/Geometry/SelectionDlg.h0000644000175100017510000000147113130665226020606 0ustar alloucheallouche #ifndef __GABEDIT_SELECTION_DLG_H__ #define __GABEDIT_SELECTION_DLG_H__ void selectionDlg(); void SelectFixedVariableAtoms(gboolean variable); void SelectFirstResidue(); void SelectLastResidue(); void selectResidueByNameDlg(); void selectResidueByNumberDlg(); void selectAtomsByMMTypeDlg(); void selectAtomsByPDBTypeDlg(); void selectAtomsBySymbolDlg(); void selectAtomsByChargeValues(gboolean positive); void SelectAllAtoms(); void InvertSelectionOfAtoms(); void unSelectAllAtoms(); void SelectLayerAtoms(GabEditLayerType layer); void selectAtomsBySphereDlg(); gchar** getListResidueNumbers(gint* nlist, gint**nums); gchar** getListResidues(gint* nlist); gchar** getListGeomMMTypes(gint* nlist); gchar** getListPDBTypesFromGeom(gint* nlist); gchar** getListSymbols(gint* nlist); #endif /* __GABEDIT_SELECTION_DLG_H__ */ GabeditSrc250/src/Geometry/PreviewGeom.c0000644000175100017510000011162213130665226020456 0ustar alloucheallouche/* PreviewGeom.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/PovrayUtils.h" #include "../Utils/AtomsProp.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/Measure.h" #include "../Geometry/Povray.h" #include "../Common/Windows.h" #include "../Utils/Transformation.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/GeomZmatrix.h" #include "../Geometry/GeomSymmetry.h" #include "../Files/FileChooser.h" #include "../Geometry/ImagesGeom.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/RotFragments.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/ResultsAnalise.h" #include "../Utils/HydrogenBond.h" #include "../MolecularMechanics/PDBTemplate.h" #include "../MolecularMechanics/CalculTypesAmber.h" #include "../Symmetry/MoleculeSymmetryInterface.h" #include "../Utils/Jacobi.h" #include "../Utils/Vector3d.h" #include "../Utils/GabeditTextEdit.h" #include "../Geometry/MenuToolBarGeom.h" typedef enum { GABEDIT_PREVIEW_OPERATION_ROTATION = 0, GABEDIT_PREVIEW_OPERATION_SELECTION = 1, } GabEditPreviewOperation; /********************************************************************************/ typedef struct _PrevGeom { gdouble C[3]; gchar* symbol; gint Xi; gint Yi; gushort Rayon; gint N; }PrevGeom; /********************************************************************************/ typedef struct _PrevData { gint nAtoms; PrevGeom* geom; PrevGeom* geom0; gint** connections; gdouble quat[4]; gdouble beginX; gdouble beginY; Camera camera; GdkGC* gc; GdkPixmap* pixmap; gdouble zoom; gint atomToDelete; gint atomToBondTo; gint angleAtom; Fragment* frag; GabEditPreviewOperation operation; }PrevData; /*****************************************************************************/ static gdouble get_angle_preview(PrevGeom* geom, gint nAtoms, gint ni,gint nj,gint nl) { gint k; gint i=0; gint j=0; gint l=0; gdouble A[3]; gdouble B[3]; gdouble normA = 0; gdouble normB = 0; gdouble norm = 0; gdouble angle = 0; for (k=0;k=1) return 0.0; angle = acos(angle)/DEG_TO_RAD; return angle; } /*****************************************************************************/ static void init_prevData(PrevData* prevData) { gint i; prevData->nAtoms = 0; prevData->geom = NULL; prevData->geom0 = NULL; prevData->connections = NULL; for(i=0;i<3;i++) prevData->quat[i] = 0; prevData->quat[3] = 1; prevData->beginX = 0; prevData->beginY = 0; prevData->camera.position = 10; prevData->camera.f = 5; prevData->gc = NULL; prevData->pixmap = NULL; prevData->zoom = 1; prevData->atomToDelete = -1; prevData->atomToBondTo = -1; prevData->angleAtom = -1; prevData->operation = GABEDIT_PREVIEW_OPERATION_ROTATION; prevData->frag = NULL; } /*****************************************************************************/ static void free_connections(gint** connections, gint nAtoms) { gint i; if(!connections) return; for(i=0;inAtoms>0) { gint i; if(prevData->geom) for(i=0;inAtoms;i++) if(prevData->geom[i].symbol) g_free(prevData->geom[i].symbol); if(prevData->geom0) for(i=0;inAtoms;i++) if(prevData->geom0[i].symbol) g_free(prevData->geom0[i].symbol); } if(prevData->geom) g_free(prevData->geom); if(prevData->geom0) g_free(prevData->geom0); if(prevData->pixmap) g_object_unref(prevData->pixmap); if(prevData->gc) g_object_unref(prevData->gc); free_connections(prevData->connections,prevData->nAtoms); init_prevData(prevData); /* do not delete frag */ } /*****************************************************************************/ static void init_connections(GtkWidget* drawingArea) { PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); gint i; gint j; if(!prevData) return; if(prevData->connections) free_connections(prevData->connections,prevData->nAtoms); prevData->connections = g_malloc(prevData->nAtoms*sizeof(gint*)); for(i=0;inAtoms;i++) { prevData->connections[i] = g_malloc(prevData->nAtoms*sizeof(gint)); for(j=0;jnAtoms;j++) prevData->connections[i][j] = 0; } } /************************************************************************/ static void setMultipleBonds(GtkWidget* drawingArea) { PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); gint* nBonds = NULL; gint* num = NULL; gint i; gint j; gint nAtoms = 0; gint** connections = NULL; PrevGeom* geom = NULL; if(!prevData) return; nAtoms = prevData->nAtoms; if(nAtoms<1) return; connections = prevData->connections; geom = prevData->geom; nBonds = g_malloc(nAtoms*sizeof(gint)); num = g_malloc(nAtoms*sizeof(gint)); for(i=0;inAtoms; if(nAtoms<1) return; init_connections(drawingArea); connections = prevData->connections; geom = prevData->geom; for(i=0;iXmax)Xmax =geom[i].C[0]; if (geom[i].C[0]Ymax)Ymax =geom[i].C[1]; if (geom[i].C[1]Zmax)Zmax =geom[i].C[2]; if (geom[i].C[2]geom[j].C[2]) { k=j; tmpgeom = geom[k]; } if(k!=i) { tmpgeom = geom[i]; geom[i] = geom[k]; geom[k] = tmpgeom; } } } /*****************************************************************************/ static void define_good_factor(GtkWidget* drawingArea) { gushort Xmax; gushort Ymax; gushort Rmax; gint Xi; gint Yi; guint i; gdouble X; gdouble Y; gdouble Cmax; gint X1,X2; gint Y1,Y2; PrevGeom* geom = NULL; Camera camera; gint nAtoms; gdouble factor; PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); if(!prevData) return; geom = prevData->geom; nAtoms = prevData->nAtoms; camera = prevData->camera; factor = prevData->zoom; Xmax=drawingArea->allocation.width; Ymax=drawingArea->allocation.height; X1 = Xmax; X2 = Xmax; Y1 = Ymax; Y2 = Ymax; Rmax = Xmax; if(RmaxXi) X1 = Xi; if(X2Yi) Y1 = Yi; if(Y2(gint)Xmax) factor *= fabs((gdouble)(Xmax-20)/(X2-X1)); if((Y2-Y1)>(gint)Ymax) factor *= fabs((gdouble)(Ymax-20)/(Y2-Y1)); prevData->zoom = factor/Cmax; } /*****************************************************************************/ static void define_coord_ecran(GtkWidget* drawingArea) { gushort Xmax; gushort Ymax; gushort Rmax; gint Xi; gint Yi; guint i; gdouble X; gdouble Y; gdouble Cmax; PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); PrevGeom* geom = NULL; Camera camera; gint nAtoms = 0; gdouble factor; if(!prevData) return; geom = prevData->geom; nAtoms = prevData->nAtoms; camera = prevData->camera; factor = prevData->zoom; Xmax=drawingArea->allocation.width; Ymax=drawingArea->allocation.height; Rmax = Xmax; if(Rmaxgc; pixmap = prevData->pixmap; colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); vis = gdk_colormap_get_visual(colormap); { gdouble vx = (y2 - y1); gdouble vy = (x1 - x2); gdouble v2 = sqrt(vx*vx + vy*vy); GdkColor colorgray; if(vis->depth >15) { colorgray.red = (gushort)(colori.red*0.6); colorgray.green = (gushort)(colori.green*0.6); colorgray.blue = (gushort)(colori.blue*0.6); } else { colorgray.red = (gushort)(35000); colorgray.green = (gushort)(35000); colorgray.blue = (gushort)(35000); } gdk_colormap_alloc_color(colormap,&colori,FALSE,TRUE); gdk_gc_set_foreground(gc,&colori); gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_NOT_LAST,GDK_JOIN_MITER); if(v2>=0) gdk_draw_line(pixmap,gc,x1,y1,x2,y2); } } /*****************************************************************************/ static void draw_line2(GtkWidget* drawingArea, gint epaisseur,guint i,guint j,gint x1,gint y1,gint x2,gint y2, GdkColor color1,GdkColor color2) { PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); PrevGeom* geom = NULL; SAtomsProp propi; SAtomsProp propj; if(!prevData)return; geom = prevData->geom; propi = prop_atom_get(geom[i].symbol); propj = prop_atom_get(geom[j].symbol); gint x0; gint y0; gdouble poid1; gdouble poid2; gdouble poid; gint xp; gint yp; gdouble k; gdouble vx,vy; gint ep; xp = x1; yp = y1; poid1 = propi.covalentRadii+propi.radii; poid2 = propj.covalentRadii+propj.radii; poid = poid1 + poid2 ; x0=(gint)((x1*poid2+x2*poid1)/poid+0.5); y0=(gint)((y1*poid2+y2*poid1)/poid+0.5); draw_line(drawingArea, xp,yp,x0,y0,color1,epaisseur,&vx,&vy,&ep,TRUE); k= (gdouble)(x2-x0)*(gdouble)(x2-x0)+(gdouble)(y2-y0)*(gdouble)(y2-y0); if(k>1e-10) { x0 = (gint)(x0 -1.0*(gdouble)(x2-x0)/sqrt(k)+0.5), y0 = (gint)(y0 -1.0*(gdouble)(y2-y0)/sqrt(k)+0.5); } draw_line(drawingArea, x0,y0,x2,y2,color2,epaisseur,&vx,&vy,&ep,FALSE); } /*****************************************************************************/ static void draw_anneau(GtkWidget* drawingArea, gint x,gint y,gint rayon,GdkColor colori) { GdkColormap *colormap; PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); GdkGC* gc = NULL; GdkPixmap* pixmap; if(!prevData)return; gc = prevData->gc; pixmap = prevData->pixmap; colormap = gdk_drawable_get_colormap(drawingArea->window); gdk_colormap_alloc_color(colormap,&colori,FALSE,TRUE); gdk_gc_set_foreground(gc,&colori); gdk_gc_set_line_attributes(gc,2,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); gdk_gc_set_fill(gc,GDK_STIPPLED); gdk_draw_arc(pixmap,gc,FALSE,x-rayon,y-rayon,2*rayon,2*rayon,0,380*64); } /*****************************************************************************/ static void draw_cercle(GtkWidget* drawingArea, gint xi,gint yi,gint rayoni,GdkColor colori) { GdkColormap *colormap; gint x=xi,y=yi,rayon=rayoni; GdkVisual* vis; GdkColor colorgray; PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); GdkGC* gc = NULL; GdkPixmap* pixmap; if(!prevData)return; gc = prevData->gc; pixmap = prevData->pixmap; colorgray.red = (gushort)(colori.red*0.6); colorgray.green = (gushort)(colori.green*0.6); colorgray.blue = (gushort)(colori.blue*0.6); colormap = gdk_drawable_get_colormap(drawingArea->window); vis = gdk_colormap_get_visual(colormap); if(vis->depth >15) { colorgray.red = (gushort)(colori.red*0.6); colorgray.green = (gushort)(colori.green*0.6); colorgray.blue = (gushort)(colori.blue*0.6); } else { colorgray.red = (gushort)(35000); colorgray.green = (gushort)(35000); colorgray.blue = (gushort)(35000); } gdk_colormap_alloc_color(colormap,&colori,FALSE,TRUE); gdk_gc_set_foreground(gc,&colori); gdk_gc_set_line_attributes(gc,2,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); gdk_gc_set_fill(gc,GDK_SOLID); gdk_draw_arc(pixmap,gc,TRUE,x-rayon,y-rayon,2*rayon,2*rayon,0,380*64); gdk_colormap_alloc_color(colormap,&colorgray,FALSE,TRUE); gdk_gc_set_foreground(gc,&colorgray); gdk_draw_arc(pixmap,gc,TRUE,x-rayon,y-rayon,2*rayon,2*rayon,90*64,180*64); gdk_gc_set_foreground(gc,&colori); gdk_draw_arc(pixmap,gc,TRUE,x-rayon/2,y-rayon,rayon,2*rayon,0,380*64); } /*****************************************************************************/ static guint get_num_min_rayon(PrevGeom* geom, guint i,guint j) { if(geom[i].Rayon > geom[j].Rayon) return j; else return i; } /*****************************************************************************/ static void init_quat(gdouble quat[]) { gint i; for(i=0;i<3;i++) quat[i] = 0.0; quat[3] = 1.0; } /*****************************************************************************/ static void rotation_geometry_quat(PrevGeom* geom, gint nAtoms, gdouble m[4][4]) { gdouble* A[3]; gdouble B[3]; guint i,j,k; if(nAtoms<1) return; for(j=0;j<3;j++) A[j] = g_malloc(nAtoms*sizeof(gdouble)); for (i=0;ipixmap, drawingArea->style->black_gc, TRUE, 0, 0, drawingArea->allocation.width, drawingArea->allocation.height); } /*****************************************************************************/ static void redraw(GtkWidget *drawingArea) { PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); if(!prevData)return; gdk_draw_drawable(drawingArea->window, drawingArea->style->fg_gc[GTK_WIDGET_STATE (drawingArea)], prevData->pixmap, 0,0, 0,0, drawingArea->allocation.width, drawingArea->allocation.height); } /*****************************************************************************/ static gboolean draw_molecule( GtkWidget *drawingArea) { guint i; guint j; guint k; gint epaisseur; GdkColor color1; GdkColor color2; GdkColor colorRed; GdkColor colorGreen; GdkColor colorBlue; gushort rayon; gboolean* FreeAtoms = NULL; PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); PrevGeom* geom = NULL; gdouble m[4][4]; if(!prevData)return FALSE; geom = prevData->geom; build_rotmatrix(m,prevData->quat); rotation_geometry_quat(geom, prevData->nAtoms,m); init_quat(prevData->quat); set_connections(drawingArea); define_coord_ecran(drawingArea); FreeAtoms = g_malloc(prevData->nAtoms*sizeof(gboolean)); for(i=0;inAtoms;i++) FreeAtoms[i] = TRUE; colorRed.red = 65535; colorRed.green = 0; colorRed.blue = 0; colorRed.pixel = 0; colorGreen.red = 0; colorGreen.green = 65535; colorGreen.blue = 0; colorGreen.pixel = 0; colorBlue.red = 0; colorBlue.green = 0; colorBlue.blue = 65535; colorBlue.pixel = 0; pixmap_init(drawingArea); for(i=0;inAtoms;i++) { k = -1; SAtomsProp propi = prop_atom_get(geom[i].symbol); for(j=i+1;jnAtoms;j++) if(prevData->connections[i][j]!=0) { SAtomsProp propj = prop_atom_get(geom[j].symbol); gint split[2] = {0,0}; gdouble ab[] = {0,0}; if(prevData->connections[i][j]!=1) { gdouble m = 0; ab[0] = geom[j].Yi-geom[i].Yi; ab[1] = -geom[j].Xi+geom[i].Xi; m = sqrt(ab[0]*ab[0]+ab[1]*ab[1]); if(m !=0) { ab[0] /= m; ab[1] /= m; } } FreeAtoms[j] = FALSE; FreeAtoms[i] = FALSE; k =get_num_min_rayon(geom,i,j); epaisseur = (gint) (geom[k].Rayon/4); color1 = propi.color; color2 = propj.color; draw_line2(drawingArea, epaisseur,i,j,geom[i].Xi,geom[i].Yi, geom[j].Xi,geom[j].Yi, color1,color2); if(prevData->connections[i][j]==2) { gint x1; gint x2; gint y1; gint y2; split[0] = (gint)(ab[0]*epaisseur*1.5); split[1] = (gint)(ab[1]*epaisseur*1.5); x1 = geom[i].Xi-split[0]-split[1]; y1 = geom[i].Yi-split[1]+split[0]; x2 = geom[j].Xi-split[0]+split[1]; y2 = geom[j].Yi-split[1]-split[0]; draw_line2(drawingArea, epaisseur/3,i,j,x1, y1, x2, y2, color1,color2); } if(prevData->connections[i][j]==3) { gint x1; gint x2; gint y1; gint y2; split[0] = (gint)(ab[0]*epaisseur*1.5); split[1] = (gint)(ab[1]*epaisseur*1.5); x1 = geom[i].Xi-split[0]-split[1]; y1 = geom[i].Yi-split[1]+split[0]; x2 = geom[j].Xi-split[0]+split[1]; y2 = geom[j].Yi-split[1]-split[0]; draw_line2(drawingArea, epaisseur/2,i,j,x1, y1, x2, y2, color1,color2); x1 = geom[i].Xi+split[0]-split[1]; y1 = geom[i].Yi+split[1]+split[0]; x2 = geom[j].Xi+split[0]+split[1]; y2 = geom[j].Yi+split[1]-split[0]; draw_line2(drawingArea, epaisseur/2,i,j,x1, y1, x2, y2, color1,color2); } } if(FreeAtoms[i]) { rayon =(gushort)(geom[i].Rayon)/2; color1 = propi.color; draw_cercle(drawingArea, geom[i].Xi,geom[i].Yi,rayon,color1); } if(geom[i].N==prevData->atomToDelete) { rayon =(gushort)(geom[i].Rayon)/4; if(rayon<5) rayon = 5; draw_anneau(drawingArea, geom[i].Xi,geom[i].Yi,rayon,colorRed); } if(geom[i].N==prevData->atomToBondTo) { rayon =(gushort)(geom[i].Rayon)/4; if(rayon<5) rayon = 5; draw_anneau(drawingArea, geom[i].Xi,geom[i].Yi,rayon,colorGreen); } if(geom[i].N==prevData->angleAtom) { rayon =(gushort)(geom[i].Rayon)/4; if(rayon<5) rayon = 5; draw_anneau(drawingArea, geom[i].Xi,geom[i].Yi,rayon,colorBlue); } } g_free(FreeAtoms); redraw(drawingArea); return TRUE; } /*****************************************************************************/ static gboolean configure_event( GtkWidget *drawingArea, GdkEventConfigure *event ) { PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); if(!prevData)return FALSE; if(!prevData->gc) prevData->gc = gdk_gc_new(drawingArea->window); if (prevData->pixmap) g_object_unref(prevData->pixmap); prevData->pixmap = gdk_pixmap_new(drawingArea->window, drawingArea->allocation.width, drawingArea->allocation.height, -1); draw_molecule(drawingArea); return TRUE; } /********************************************************************************/ static gboolean expose_event( GtkWidget *widget, GdkEventExpose *event ) { PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (widget), "PrevData"); if(event->count >0) return FALSE; if(!prevData)return FALSE; gdk_draw_drawable(widget->window, widget->style->fg_gc[GTK_WIDGET_STATE (widget)], prevData->pixmap, event->area.x, event->area.y, event->area.x, event->area.y, event->area.width, event->area.height); return FALSE; } /*****************************************************************************/ static gint atom_conneted_to(GtkWidget* drawingArea, gint i) { PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); gint j; if(!prevData) return -1; if(!prevData->connections) return -1; if(prevData->nAtoms<2) return -1; for(j=0;jnAtoms;j++) if(prevData->connections[i][j]>0) return prevData->geom[j].N; return -1; } /*****************************************************************************/ static gint atom_noni_conneted_to(GtkWidget* drawingArea, gint i, gint k) { PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); gint j; gint l; if(!prevData) return -1; if(!prevData->connections) return -1; if(prevData->nAtoms<3) return -1; for(j=0;jnAtoms;j++) { if(j==i) continue; for(l=0;lnAtoms;l++) if(k==prevData->geom[l].N && ( prevData->connections[l][j]>0 || prevData->connections[j][l]>0) && prevData->geom[l].symbol[0] !='H') return prevData->geom[j].N; } for(j=0;jnAtoms;j++) { if(j==i) continue; for(l=0;lnAtoms;l++) if(k==prevData->geom[l].N && prevData->connections[l][j]>0) return prevData->geom[j].N; } return -1; } /*****************************************************************************/ static gint number_of_atoms_conneted_to(GtkWidget* drawingArea, gint i) { PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); gint nBonds = 0; gint j; if(!prevData) return 0; if(!prevData->connections) return 0; if(prevData->nAtoms<2) return 0; if(i<0 || i>=prevData->nAtoms) return 0; for(j=0;jnAtoms;j++) if(prevData->connections[i][j]>0) nBonds++; return nBonds; } /*****************************************************************************/ static gint get_atom_to_select(GtkWidget *drawingArea, gdouble xi, gdouble yi) { gdouble xii,yii; gint i; gdouble d2 ; gdouble d1 ; PrevGeom* geom; gint nAtoms; PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); if(!prevData)return -1; geom = prevData->geom; nAtoms = prevData->nAtoms; for(i=0;i<(gint)nAtoms;i++) { gdouble rayon; xii = xi-geom[i].Xi; yii = yi-geom[i].Yi; d1 = xii*xii+yii*yii; rayon = geom[i].Rayon; d2 = d1-rayon*rayon; if(d2<=0) return i; } return -1; } /********************************************************************************/ static gboolean button_press(GtkWidget *drawingArea, GdkEvent *event, gpointer Menu) { GdkEventButton *bevent; PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); if(!prevData) return FALSE; switch (event->type) { case GDK_BUTTON_PRESS: { gint i = -1; bevent = (GdkEventButton *) event; prevData->beginX = bevent->x; prevData->beginY = bevent->y; i =get_atom_to_select(drawingArea,bevent->x,bevent->y); if(number_of_atoms_conneted_to(drawingArea,i)!=1) i=-1; if(i>=0 && prevData->atomToDelete == prevData->geom[i].N) { prevData->atomToDelete = -1; prevData->atomToBondTo = -1; prevData->angleAtom = -1; prevData->frag->atomToDelete = -1; prevData->frag->atomToBondTo = -1; prevData->frag->angleAtom=-1; draw_molecule(drawingArea); } else if(i>=0) { prevData->operation = GABEDIT_PREVIEW_OPERATION_SELECTION; prevData->atomToDelete = prevData->geom[i].N; prevData->atomToBondTo = atom_conneted_to(drawingArea, i); prevData->angleAtom = atom_noni_conneted_to(drawingArea, i,prevData->atomToBondTo); if(prevData->frag && prevData->frag->NAtoms>0) { gint j = prevData->geom[i].N-1; prevData->frag->atomToDelete = -1; prevData->frag->atomToBondTo = -1; prevData->frag->angleAtom = -1; if(jfrag->NAtoms) { prevData->frag->atomToDelete = j; j = atom_conneted_to(drawingArea, i)-1; prevData->frag->atomToBondTo=j; j = atom_noni_conneted_to(drawingArea, i,prevData->atomToBondTo)-1; prevData->frag->angleAtom=j; } } draw_molecule(drawingArea); } return TRUE; } default: break; } return FALSE; } /***************************************************************************** * release_button ******************************************************************************/ gint release_button(GtkWidget *drawingArea, GdkEvent *event, gpointer pointer) { GdkEventButton *bevent; if(event->type == GDK_BUTTON_RELEASE) { bevent = (GdkEventButton *) event; if (bevent->button == 3) return TRUE; if (bevent->button == 2) return TRUE; if (bevent->button == 1) { PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); if(prevData) prevData->operation = GABEDIT_PREVIEW_OPERATION_ROTATION; } } draw_molecule(drawingArea); return TRUE; } /********************************************************************************/ static gboolean RotationByMouse(GtkWidget *widget, GdkEventMotion *event) { int x, y; GdkRectangle area; GdkModifierType state; gdouble spin_quat[4]; gint BeginX = 0; gint BeginY = 0; PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (widget), "PrevData"); if(!prevData) return FALSE; BeginX = prevData->beginX; BeginY = prevData->beginY; if (event->is_hint) { #if !defined(G_OS_WIN32) gdk_window_get_pointer(event->window, &x, &y, &state); #else x = event->x; y = event->y; state = event->state; #endif } else { x = event->x; y = event->y; state = event->state; } area.x = 0; area.y = 0; area.width = widget->allocation.width; area.height = widget->allocation.height; trackball(spin_quat, (2.0*BeginX - area.width) / area.width, (area.height - 2.0*BeginY) / area.height, (2.0*x - area.width) / area.width, (area.height - 2.0*y ) / area.height); add_quats(spin_quat, prevData->quat, prevData->quat); draw_molecule(widget); prevData->beginX = x; prevData->beginY = y; return TRUE; } /********************************************************************************/ static gboolean ScaleByMouse(GtkWidget *drawingArea, gpointer data) { GdkEventButton *bevent=(GdkEventButton *)data; PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); gdouble factor; if(!prevData) return FALSE; factor = prevData->zoom; factor +=((bevent->y - prevData->beginY) / drawingArea->allocation.height) * 5; if(factor<0.1) factor = 0.01; if(factor>10) factor = 10; prevData->zoom = factor; draw_molecule(drawingArea); prevData->beginX = bevent->x; prevData->beginY = bevent->y; return TRUE; } /********************************************************************************/ static gboolean motion_notify(GtkWidget *drawingArea, GdkEventMotion *event) { GdkModifierType state; PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); if(!prevData) return FALSE; if (event->is_hint) { #if !defined(G_OS_WIN32) gint x,y; gdk_window_get_pointer(event->window, &x, &y, &state); #else state = event->state; #endif } else state = event->state; if (state & GDK_BUTTON1_MASK) { PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); if(prevData && prevData->operation == GABEDIT_PREVIEW_OPERATION_ROTATION) RotationByMouse(drawingArea,event); else if( prevData && prevData->operation == GABEDIT_PREVIEW_OPERATION_SELECTION && prevData->atomToDelete>=0 && prevData->atomToBondTo>=0 ) { gint i = -1; GdkEventButton *bevent = (GdkEventButton *) event; i =get_atom_to_select(drawingArea,bevent->x,bevent->y); if( i>=0 && inAtoms && prevData->geom[i].N != prevData->atomToDelete && prevData->geom[i].N != prevData->atomToBondTo ) { gdouble angle = get_angle_preview(prevData->geom, prevData->nAtoms, prevData->atomToDelete, prevData->atomToBondTo, prevData->geom[i].N ); if(fabs(angle-180)>0.1 && prevData->frag && prevData->frag->NAtoms>0) { gint j = prevData->geom[i].N-1; prevData->angleAtom = prevData->geom[i].N; if(jfrag->NAtoms) prevData->frag->angleAtom=j; } draw_molecule(drawingArea); } } } if (state & GDK_BUTTON2_MASK) { RotationByMouse(drawingArea,event); } if (state & GDK_BUTTON3_MASK) { ScaleByMouse(drawingArea,event); } return TRUE; } /*****************************************************************************/ static void destroy_prev_geom(GtkWidget *drawingArea) { PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); if(!prevData) return; free_prevData(prevData); } /********************************************************************************/ GtkWidget* add_preview_geom(GtkWidget* box) { GtkWidget *vboxframe; GtkWidget *frame; GtkWidget *drawingArea; PrevData* prevData= g_malloc(sizeof(PrevData)); init_prevData(prevData); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 1); gtk_box_pack_start(GTK_BOX(box), frame,TRUE,TRUE,1); gtk_widget_show (frame); vboxframe = create_vbox(frame); gtk_widget_show (vboxframe); /* DrawingArea */ drawingArea = gtk_drawing_area_new(); gtk_box_pack_start(GTK_BOX(vboxframe), drawingArea,TRUE,TRUE,1); gtk_widget_show(drawingArea); g_object_set_data(G_OBJECT (drawingArea), "PrevData", prevData); g_signal_connect(G_OBJECT(drawingArea),"configure_event", (GCallback)configure_event,NULL); gtk_widget_set_events (drawingArea, GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK); gtk_widget_set_size_request (GTK_WIDGET(drawingArea), 100, 100); /* Evenments */ g_signal_connect(G_OBJECT(drawingArea), "expose_event", (GCallback)expose_event,NULL); g_signal_connect(G_OBJECT(drawingArea), "button_press_event", G_CALLBACK(button_press), NULL); g_signal_connect(G_OBJECT(drawingArea), "motion_notify_event",G_CALLBACK(motion_notify), NULL); g_signal_connect(G_OBJECT(drawingArea), "button_release_event",G_CALLBACK(release_button), NULL); g_signal_connect(G_OBJECT(drawingArea),"delete_event",(GCallback)destroy_prev_geom,NULL); return drawingArea; } /*********************************************************************************/ void add_frag_to_preview_geom(GtkWidget* drawingArea, Fragment* frag) { gint i; gint j; PrevData* prevData = (PrevData*)g_object_get_data(G_OBJECT (drawingArea), "PrevData"); if(!prevData) return; if(frag->NAtoms<1) return; free_prevData(prevData); prevData->nAtoms = frag->NAtoms; prevData->geom = g_malloc(prevData->nAtoms*sizeof(PrevGeom)); for(i=0;inAtoms;i++) { for(j=0;j<3;j++) prevData->geom[i].C[j] = frag->Atoms[i].Coord[j]; prevData->geom[i].symbol = g_strdup(frag->Atoms[i].Symb); prevData->geom[i].N = i+1; } if(frag->atomToDelete>=0 && frag->atomToDeletenAtoms) prevData->atomToDelete = prevData->geom[frag->atomToDelete].N; else prevData->atomToDelete = -1; if(frag->atomToBondTo>=0 && frag->atomToBondTonAtoms) prevData->atomToBondTo = prevData->geom[frag->atomToBondTo].N; else prevData->atomToBondTo =-1; if(frag->angleAtom>=0 && frag->angleAtomnAtoms) prevData->angleAtom = prevData->geom[frag->angleAtom].N; else prevData->angleAtom =-1; prevData->frag = frag; define_coord_ecran(drawingArea); configure_event(drawingArea, NULL); gtk_widget_hide_all(drawingArea); gtk_widget_show_all(drawingArea); define_good_factor(drawingArea); draw_molecule(drawingArea); } GabeditSrc250/src/Geometry/FragmentsSelector.c0000644000175100017510000002123413130665226021653 0ustar alloucheallouche/* FragmentsSelector.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/PovrayUtils.h" #include "../Utils/AtomsProp.h" #include "../Geometry/GeomGlobal.h" #include "../Common/Windows.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/PreviewGeom.h" #include "../Geometry/FragmentsTree.h" /********************************************************************************/ void hide_fragments_selector() { GtkWidget* FragmentsSelectorDlg = NULL; FragmentsSelectorDlg = g_object_get_data(G_OBJECT(GeomDlg), "FragmentsSelectorDlg"); if( FragmentsSelectorDlg) gtk_widget_hide(FragmentsSelectorDlg); } /********************************************************************************/ void show_fragments_selector() { GtkWidget* FragmentsSelectorDlg = NULL; FragmentsSelectorDlg = g_object_get_data(G_OBJECT(GeomDlg), "FragmentsSelectorDlg"); if( FragmentsSelectorDlg) gtk_widget_hide(FragmentsSelectorDlg); } /********************************************************************************/ void rafresh_fragments_selector() { GtkWidget* FragmentsSelectorDlg = NULL; GtkWidget* treeView = NULL; FragmentsSelectorDlg = g_object_get_data(G_OBJECT(GeomDlg), "FragmentsSelectorDlg"); if( FragmentsSelectorDlg) treeView = g_object_get_data(G_OBJECT(FragmentsSelectorDlg), "TreeView"); if( treeView) rafreshTreeView(treeView); } /********************************************************************************/ static void changed_entry_angle(GtkWidget *entry, gpointer user_data) { G_CONST_RETURN gchar* t; gdouble a; t= gtk_entry_get_text(GTK_ENTRY(entry)); a = atof(t); set_frag_angle(a); } /***************************************************************************/ static void help(GtkWidget* button, GtkWidget* FragmentsSelectorDlg) { gchar* temp; GtkWidget* win; temp = g_strdup_printf( _( " * In the fragment selector :\n" " Clic to an atom (generally a H atom) connected to only one other atom. \n" " This atom is colored in red.\n" " The atom connected to red atom is colored in green.\n" " A third atom is colored in blue.\n" " To change the blue atom : \n" " select the red atom and move the mouse (button always pressed).\n" " The angle between red-green-blue atoms cannot be null\n" " Clic to red atom for unselect all.\n\n" " * In the Draw geometry window :\n" " Clic to an atom (generally a H atom) connected to only one other atom.\n" " This atom is colored in red.\n" " The atom connected to red atom is colored in green.\n" " A third atom is colored in blue.\n" " To change the blue atom : \n" " select the red atom and move the mouse (button always pressed).\n" " The angle between red-green-blue atoms cannot be null\n\n" " After release of the left mouse button :\n" " The red atom of fragment is placed on the green atom of the old molecule\n" " the fragment is rotated so that the red, green atoms are aligned\n" " The red atoms are deleted\n" " The dihedral angle between the blue, green (of molecule), green and blue (of fragment) is set to the value given by user\n\n" " If all atoms of the fragment are unselected, then all these atoms are inserted in the molecule.\n" ) ); win = Message(temp,_("Info"),FALSE); gtk_window_set_transient_for(GTK_WINDOW(win),GTK_WINDOW(FragmentsSelectorDlg)); gtk_window_set_modal (GTK_WINDOW (win), TRUE); g_free(temp); } /********************************************************************************/ void create_window_fragments_selector() { GtkWidget *vboxframe; GtkWidget *frame; GtkWidget *hboxframe; GtkWidget *VboxWin; GtkWidget* FragmentsSelectorDlg = NULL; GtkWidget* drawingArea = NULL; GtkWidget* treeView = NULL; GtkWidget *table = gtk_table_new(2,4,FALSE); gint l, c, ncases; GtkWidget* entry = NULL; GtkWidget* button = NULL; gchar tmp[BSIZE]; FragmentsSelectorDlg = g_object_get_data(G_OBJECT(GeomDlg), "FragmentsSelectorDlg"); if(!FragmentsSelectorDlg || !GTK_IS_OBJECT(FragmentsSelectorDlg)) { FragmentsSelectorDlg = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_object_set_data(G_OBJECT(GeomDlg), "FragmentsSelectorDlg", FragmentsSelectorDlg); } else { gtk_widget_show(FragmentsSelectorDlg); return; } VboxWin = gtk_vbox_new (TRUE, 0); gtk_container_add(GTK_CONTAINER(FragmentsSelectorDlg),VboxWin); gtk_widget_show(VboxWin); gtk_window_set_title(GTK_WINDOW(FragmentsSelectorDlg),_("Gabedit : Fragment Selector ")); gtk_window_set_transient_for(GTK_WINDOW(FragmentsSelectorDlg),GTK_WINDOW(GeomDlg)); gtk_widget_add_events(GeomDlg,GDK_KEY_RELEASE_MASK); gtk_window_move(GTK_WINDOW(GeomDlg),0,0); add_child(GeomDlg,FragmentsSelectorDlg, gtk_widget_destroy,_(" Frag. Sel. ")); g_signal_connect (GTK_OBJECT (FragmentsSelectorDlg), "delete_event", G_CALLBACK (gtk_widget_hide), NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 1); gtk_box_pack_start(GTK_BOX(VboxWin), frame,TRUE,TRUE,1); gtk_widget_show (frame); vboxframe = create_vbox(frame); gtk_widget_show (vboxframe); hboxframe = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vboxframe), hboxframe, TRUE, TRUE, 0); treeView = addFragmentsTreeView(hboxframe); gtk_widget_show_all (hboxframe); hboxframe = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vboxframe), hboxframe, TRUE, TRUE, 0); gtk_widget_show (hboxframe); drawingArea = add_preview_geom(hboxframe); g_object_set_data(G_OBJECT(FragmentsSelectorDlg), "DrawingArea", drawingArea); g_object_set_data(G_OBJECT(FragmentsSelectorDlg), "TreeView", treeView); g_object_set_data(G_OBJECT(treeView), "DrawingArea", drawingArea); hboxframe = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vboxframe), hboxframe, FALSE, TRUE, 0); gtk_widget_show (hboxframe); gtk_box_pack_start (GTK_BOX (hboxframe), table, TRUE, TRUE, 0); /*------------------ Angle & Help -----------------------------------------*/ l=0; c = 0; add_label_table(table,"Angle",l,c); c = 1; add_label_table(table,":",l,c); entry = gtk_entry_new(); c = 2; ncases=1; sprintf(tmp,"%f",get_frag_angle()); gtk_entry_set_text(GTK_ENTRY(entry),tmp); gtk_table_attach(GTK_TABLE(table),entry,c,c+ncases,l,l+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_SHRINK), 1,1); c = 3; ncases = 1; button = gtk_button_new_from_stock(GTK_STOCK_HELP); gtk_table_attach(GTK_TABLE(table),button,c,c+ncases,l,l+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 1,1); gtk_widget_show_all (table); gtk_widget_set_size_request(GTK_WIDGET(FragmentsSelectorDlg),(gint)(ScreenHeight*0.35),(gint)(ScreenHeight*0.85)); gtk_widget_show (FragmentsSelectorDlg); fit_windows_position(GeomDlg,FragmentsSelectorDlg); add_a_fragment(FragmentsSelectorDlg,"Amine"); g_signal_connect (G_OBJECT (entry), "changed", (GCallback)changed_entry_angle, NULL); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)help,FragmentsSelectorDlg); } GabeditSrc250/src/Geometry/GeomXYZ.h0000644000175100017510000002014213130665226017530 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GEOMXYZ_H__ #define __GABEDIT_GEOMXYZ_H__ void compute_dipole_using_charges_of_xyz_geom(); void set_variable_one_atom_in_GeomXYZ(gint i); void create_geomXYZ_list(GtkWidget *, GabEditTypeFileGeom readfile); void create_variablesXYZ_list(GtkWidget *,guint); void create_babel_read_dialogue(); void read_gabedit_file_add_list(gchar *NomFichier); void read_gabedit_file_no_add_list(gchar *NomFichier); void read_XYZ_file_no_add_list(G_CONST_RETURN gchar *); void read_mol2_tinker_file_no_add_list(gchar *NomFichier,gchar*type); void read_pdb_file_no_add_list(gchar *NomFichier); void read_hin_file_no_add_list(gchar *NomFichier); void read_XYZ_from_demon_input_file(gchar *NomFichier, FilePosTypeGeom InfoFile ); void read_XYZ_from_gauss_input_file(gchar *NomFichier, FilePosTypeGeom InfoFile ); void read_XYZ_from_gamess_input_file(gchar *NomFichier ); void read_XYZ_from_mpqc_input_file(gchar *NomFichier ); void read_XYZ_from_nwchem_input_file(gchar *NomFichier ); void read_XYZ_from_psicode_input_file(gchar *NomFichier ); void read_XYZ_from_orca_input_file(gchar *NomFichier ); void read_XYZ_from_qchem_input_file(gchar *NomFichier ); void read_XYZ_from_mopac_input_file(gchar *NomFichier ); void read_geom_conv_from_dalton_output_file(gchar *NomFichier, gint numgeometry); void read_geom_conv_from_gamess_output_file(gchar *NomFichier, gint numgeometry); void read_geom_from_molden_geom_conv_file(gchar *fileName, gint numgeometry); void read_geom_from_gabedit_geom_conv_file(gchar *fileName, gint numgeometry); void read_geom_from_gamess_output_file(gchar *NomFichier, gint numgeometry); void read_geom_from_gaussian_file(gchar *NomFichier, gint numgeometry); void read_geom_from_mpqc_output_file(gchar *fileName, gint numGeometry); void read_geom_from_molpro_file(gchar *NomFichier, gint numgeometry); void read_geom_from_orca_file(gchar *NomFichier, gint numgeometry); void read_geom_from_vasp_file(gchar *NomFichier, gint numgeometry); void read_geom_from_vasp_xml_file(gchar *NomFichier, gint numgeometry); void read_geom_from_nwchem_file(gchar *NomFichier, gint numgeometry); void read_geom_from_psicode_file(gchar *NomFichier, gint numgeometry); void read_geom_from_qchem_file(gchar *NomFichier, gint numgeometry); void read_geom_from_mopac_output_file(gchar *NomFichier, gint numgeometry); void read_geom_from_gamess_irc_file(gchar *NomFichier, gint numgeometry); void read_XYZ_from_mopac_irc_output_file(gchar *FileName, gint numGeom); void read_XYZ_from_mopac_scan_output_file(gchar *FileName, gint numGeom); void read_geom_from_mopac_scan_output_file(gchar *FileName, gint numGeom); void read_geom_from_mopac_irc_output_file(gchar *FileName, gint numGeom); void read_geom_from_mopac_aux_file(gchar *NomFichier, gint numgeometry); void read_geom_from_xyz_file(gchar *fileName, gint numGeom); void read_geom_from_poscar_file(gchar *fileName); void read_XYZ_from_molpro_input_file(gchar *NomFichier, FilePosTypeGeom InfoFile); void create_GeomXYZ_from_draw_grometry(); void freeGeomXYZ(); void freeVariablesXYZ(); void FreeGeomXYZ(GeomXYZAtomDef* GeomXYZtemp, VariablesXYZDef* VariablesXYZtemp, gint Ncent, gint Nvar); void selc_XYZ_file(GabEditTypeFileGeom itype); void create_babel_save_dialogue(); void save_geometry_poscar_file(GabeditFileChooser *SelecFile, gint response_id); void save_geometry_xyz_file(GabeditFileChooser *SelecFile, gint response_id); void save_geometry_mol_file(GabeditFileChooser *SelecFile, gint response_id); void save_geometry_mol2_file(GabeditFileChooser *SelecFile, gint response_id); void save_geometry_tinker_file(GabeditFileChooser *SelecFile, gint response_id); void save_geometry_pdb_file(GabeditFileChooser *SelecFile, gint response_id); void save_geometry_hin_file(GabeditFileChooser *SelecFile, gint response_id); void save_geometry_gabedit_file(GabeditFileChooser *SelecFile, gint response_id); void save_geometry_cchemi_file(GabeditFileChooser *SelecFile, gint response_id); void save_xyz_file_no_add_list(const gchar* FileName); void save_poscar_file_no_add_list(const gchar* FileName); gboolean connecteds(guint i,guint j); void read_hin_file(GabeditFileChooser *SelecFile, gint response_id); void read_gabedit_file(GabeditFileChooser *SelecFile, gint response_id); void read_first_mpqc_file(GabeditFileChooser *SelecFile, gint response_id); void read_last_mpqc_file(GabeditFileChooser *SelecFile, gint response_id); void read_first_dalton_file(GabeditFileChooser *SelecFile, gint response_id); void read_last_dalton_file(GabeditFileChooser *SelecFile, gint response_id); void read_first_gamess_file(GabeditFileChooser *SelecFile, gint response_id); void read_last_gamess_file(GabeditFileChooser *SelecFile, gint response_id); void read_aimall_file(GabeditFileChooser *SelecFile, gint response_id); void read_first_turbomole_file(GabeditFileChooser *SelecFile, gint response_id); void read_last_turbomole_file(GabeditFileChooser *SelecFile, gint response_id); void read_last_gaussian_file(GabeditFileChooser *SelecFile , gint response_id); void read_first_gaussian_file(GabeditFileChooser *SelecFile, gint response_id); void read_fchk_gaussian_file(GabeditFileChooser *SelecFile , gint response_id); void read_last_molcas_file(GabeditFileChooser *SelecFile , gint response_id); void read_last_molpro_file(GabeditFileChooser *SelecFile , gint response_id); void read_first_orca_file(GabeditFileChooser *SelecFile , gint response_id); void read_last_orca_file(GabeditFileChooser *SelecFile , gint response_id); void read_first_vasp_file(GabeditFileChooser *SelecFile , gint response_id); void read_last_vasp_file(GabeditFileChooser *SelecFile , gint response_id); void read_first_nwchem_file(GabeditFileChooser *SelecFile , gint response_id); void read_first_psicode_file(GabeditFileChooser *SelecFile , gint response_id); void read_last_nwchem_file(GabeditFileChooser *SelecFile , gint response_id); void read_last_psicode_file(GabeditFileChooser *SelecFile , gint response_id); void read_first_qchem_file(GabeditFileChooser *SelecFile , gint response_id); void read_last_qchem_file(GabeditFileChooser *SelecFile , gint response_id); void read_first_mopac_output_file(GabeditFileChooser *SelecFile , gint response_id); void read_last_mopac_output_file(GabeditFileChooser *SelecFile , gint response_id); void read_last_mopac_aux_file(GabeditFileChooser *SelecFile , gint response_id); void read_last_irc_gamess_file(GabeditFileChooser *SelecFile, gint response_id); void read_first_molcas_file(GabeditFileChooser *SelecFile, gint response_id); void read_first_molpro_file(GabeditFileChooser *SelecFile, gint response_id); void read_mol2_file(GabeditFileChooser *SelecFile , gint response_id); void read_tinker_file(GabeditFileChooser *SelecFile, gint response_id); void read_pdb_file(GabeditFileChooser *SelecFile, gint response_id); void read_XYZ_file(GabeditFileChooser *SelecFile, gint response_id); void reset_connections_XYZ(); GtkWidget* scale_cell_dialog (); #endif /* __GABEDIT_GEOMXYZ_H__ */ GabeditSrc250/src/Geometry/PersonalFragments.h0000644000175100017510000000230613130665226021662 0ustar alloucheallouche #ifndef __GABEDIT_PERSONALFRAGMENTS_H__ #define __GABEDIT_PERSONALFRAGMENTS_H__ typedef struct _PersonalFragments PersonalFragments; typedef struct _PersonalGroupe PersonalGroupe; typedef struct _OnePersonalFragment OnePersonalFragment; /************************************/ struct _OnePersonalFragment { gchar* name; Fragment f; }; /************************************/ struct _PersonalGroupe { gchar* groupName; gint numberOfFragments; OnePersonalFragment* fragments; }; /************************************/ struct _PersonalFragments { gint numberOfGroupes; PersonalGroupe* personnalGroupes; }; /************************************/ /* void addGroupesToMenu();*/ gint getNumberOfGroups(); /* void addFragmentsToMenu();*/ void newGroupeDlg(gpointer data, guint Operation,GtkWidget* wid); void deleteGroupeDlg(gpointer data, guint Operation,GtkWidget* wid); void addFragmentDlg(gpointer data, guint Operation,GtkWidget* wid); void deleteFragmentDlg(gpointer data, guint Operation,GtkWidget* wid); void addPersonalFragment(gpointer data, guint Operation,GtkWidget* wid); void savePersonalFragments(GtkWidget* win); void loadPersonalFragments(GtkWidget* win); #endif /* __GABEDIT_PERSONALFRAGMENTS_H__ */ GabeditSrc250/src/Geometry/BuildPolyPeptide.c0000644000175100017510000013241413130665226021445 0ustar alloucheallouche/* BuildPolyPeptide.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/InterfaceGeom.h" #include "../Geometry/FragmentsPPD.h" #include "../Geometry/RotFragments.h" #include "../Geometry/MenuToolBarGeom.h" #include "../MolecularMechanics/PDBTemplate.h" void define_good_factor(); void create_GeomXYZ_from_draw_grometry(); #define LigneT 7 #define ColonneT 4 static GtkWidget* Entrys[3]; static GtkWidget* ButtonL = NULL; static GtkWidget* ButtonD = NULL; static int nbuffer = 0; static int ibuffer = 0; static gdouble phiBuffer[ 4 ]; static gdouble psiBuffer[ 4 ]; static gdouble omegaBuffer[ 4 ]; static gchar conf[30]; static gint lastFragNumber = -1; static gint CA = -1; static gint C = -1; static gint N = -1; static gint O = -1; static gint H = -1; static gint CH3 = -1; static gint lastCA = -1; static gint lastC = -1; static gint lastN = -1; static gint lastO = -1; static gint lastH = -1; static gint lastCH3 = -1; static gdouble phi = -57; static gdouble psi = 47; static gdouble omega = 180; static gdouble lastOmega = 180; static gdouble lastPsi = 180; static gchar fragName[30] = "L"; static gchar fullFragName[30] = "L"; static gboolean NCapped = FALSE; static gboolean zwitterionic = FALSE; static Fragment Frag = {0,NULL}; static GeomDef* G=NULL; static gint Nb = 0; /* static gdouble getTorsion(GeomDef* geom, gint a1, gint a2, gint a3,gint a4) { gdouble C1[3]={geom[a1].X,geom[a1].Y,geom[a1].Z}; gdouble C2[3]={geom[a2].X,geom[a2].Y,geom[a2].Z}; gdouble C3[3]={geom[a3].X,geom[a3].Y,geom[a3].Z}; gdouble C4[3]={geom[a4].X,geom[a4].Y,geom[a4].Z}; return TorsionToAtoms(C4,C1,C2,C3); } */ /********************************************************************************/ static void init_variables() { lastFragNumber = -1; CA = -1; C = -1; N = -1; O = -1; H = -1; CH3 = -1; lastCA = -1; lastC = -1; lastN = -1; lastO = -1; lastH = -1; lastCH3 = -1; phi = -57; psi = 47; omega = 180; lastOmega = 180; lastPsi = 180; sprintf(fragName,"%s","L"); sprintf(fullFragName,"%s","L"); NCapped = FALSE; zwitterionic = FALSE; if(Nb!=0) { gint i; for (i=0;i-1 && N>-1) { G[lastC].typeConnections[N] = G[N].typeConnections[lastC]=1; } } /*****************************************************************************/ static void define_geometry_to_draw() { gint i; gint j; gdouble C[3] = {0.0,0.0,0.0}; gint n; Free_One_Geom(geometry0,Natoms); Free_One_Geom(geometry ,Natoms); Natoms = 0; geometry0 = NULL; geometry = NULL; Natoms = Nb; if(Natoms<1) return; reset_origine_molecule_drawgeom(); geometry0 = g_malloc((Natoms)*sizeof(GeomDef)); geometry = g_malloc((Natoms)*sizeof(GeomDef)); n = 0; for(i=0;i0) for(i=0;i<3;i++) C[i] /= n; /* center */ for(i=0;i0) { geometry0 = g_realloc(geometry0,(Natoms)*sizeof(GeomDef)); geometry = g_realloc(geometry,(Natoms)*sizeof(GeomDef)); } for(i=0;i<(gint)Natoms;i++) { geometry[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;j<(gint)Natoms;j++) geometry[i].typeConnections[j] = 0; geometry0[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;j<(gint)Natoms;j++) geometry0[i].typeConnections[j] = 0; } for(i=0;i<(gint)Natoms;i++) { gint iG = geometry[i].N-1; for(j=i+1;j<(gint)Natoms;j++) { gint jG = geometry[j].N-1; geometry[i].typeConnections[j] = G[iG].typeConnections[jG]; geometry[j].typeConnections[i] = G[jG].typeConnections[iG]; } } for(i=0;i<(gint)Natoms;i++) geometry[i].N = geometry0[i].N = i+1; copy_connections(geometry0,geometry,Natoms); RebuildGeom = TRUE; } /********************************************************************************/ static void re_set_angles(gboolean forward) { gchar* t = NULL; if(nbuffer<1) return; if(forward) ibuffer++; else ibuffer--; if(ibuffer>nbuffer-1) ibuffer = 0; if(ibuffer<0) ibuffer = nbuffer-1; t = g_strdup_printf("%0.1f ",phiBuffer[ibuffer]); gtk_entry_set_text(GTK_ENTRY(Entrys[0]),t); g_free(t); t = g_strdup_printf("%0.1f ",psiBuffer[ibuffer]); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),t); g_free(t); t = g_strdup_printf("%0.1f ",omegaBuffer[ibuffer]); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),t); g_free(t); } /********************************************************************************/ static void add_fragment(gchar* what) { gint i; gint j; gint omegaArrayCounter=0; gint* omegaArray=NULL; gint phiArrayCounter = 0; gint* phiArray = NULL; gboolean CCapped = FALSE; gint H2 = -1; G_CONST_RETURN gchar* t; C = -1; N = -1; CA = -1; CH3 = -1; O = -1; H = -1; if(Frag.NAtoms<1) return; t = gtk_entry_get_text(GTK_ENTRY(Entrys[0])); phi = atof(t); t = gtk_entry_get_text(GTK_ENTRY(Entrys[1])); psi = atof(t); t = gtk_entry_get_text(GTK_ENTRY(Entrys[2])); omega = atof(t); if(Nb>0) G = g_realloc(G,(Nb+Frag.NAtoms+1)*sizeof(GeomDef)); else G = g_malloc((Frag.NAtoms+1)*sizeof(GeomDef)); omegaArray = g_malloc(Frag.NAtoms*sizeof(gint)); phiArray = g_malloc(Frag.NAtoms*sizeof(gint)); Ddef = FALSE; j=Nb-1; for(i=0;i -1 ) { if ( lastN > -1 && lastCA > -1 && lastC > 1 && N > -1 ) { SetAngle( Nb,G,lastCA, lastC, N, 111.2, omegaArray, omegaArrayCounter); SetAngle( Nb,G, lastC, N, CA, 121.9, omegaArray, omegaArrayCounter); SetTorsion( Nb,G,lastN, lastCA, lastC, N, lastPsi, omegaArray, omegaArrayCounter ); } if ( !CCapped ) { if ( lastCA > -1 && lastC > 1 && N > -1 && C > -1) SetTorsion( Nb,G, lastCA, lastC, N, C, lastOmega, omegaArray, omegaArrayCounter ); } else { if ( lastCA > -1 && lastC > 1 && N > -1 && CA > -1) SetTorsion( Nb,G, lastCA, lastC, N, CA, lastOmega, omegaArray, omegaArrayCounter ); } } else { if ( lastCA > -1 && lastC > 1 && N > -1 && CA > -1) SetTorsion( Nb,G, lastCA, lastC, N, CA, lastOmega, omegaArray, omegaArrayCounter ); } if ( !CCapped ) { if ( lastC > -1 && N > 1 && CA > -1 && C > -1) SetTorsion( Nb,G, lastC, N, CA, C, phi, phiArray, phiArrayCounter ); } } g_free(omegaArray); g_free(phiArray); /* Pseudo atom */ G[Nb].X=0.0; G[Nb].Y=0.0; G[Nb].Z=0.0; G[Nb].Charge = 0.0; G[Nb].Prop = prop_atom_get("H"); G[Nb].mmType = g_strdup("H"); G[Nb].pdbType = g_strdup("H"); G[Nb].Residue = g_strdup("H"); G[Nb].ResidueNumber = lastFragNumber+1; G[Nb].N = Nb+1; if ( lastCA > -1 && N > -1) { G[Nb].X = (G[lastCA].X + G[N].X)/2.0; G[Nb].Y = (G[lastCA].Y + G[N].Y)/2.0; G[Nb].Z = (G[lastCA].Z + G[N].Z)/2.0; } else if ( lastCH3 > -1 && N > -1) { G[Nb].X = (G[lastCH3].X + G[N].X)/2.0; G[Nb].Y = (G[lastCH3].Y + G[N].Y)/2.0; G[Nb].Z = (G[lastCH3].Z + G[N].Z)/2.0; } if(lastC>-1 && lastO>-1) SetAngle( Nb+1,G,Nb, lastC, lastO, 180.0, NULL, 0 ); if ( strcmp(what, "Pro") ) { if ( CA > -1 && lastC > -1) { G[Nb].X = (G[CA].X + G[lastC].X)/2.0; G[Nb].Y = (G[CA].Y + G[lastC].Y)/2.0; G[Nb].Z = (G[CA].Z + G[lastC].Z)/2.0; if(N>-1 && H > -1) SetAngle( Nb+1,G,Nb, N, H, 180.0, NULL, 0 ); } } set_connections(Nb-Frag.NAtoms,lastC,N); define_geometry_to_draw(); define_good_factor(); unselect_all_atoms(); reset_all_connections(); reset_charges_multiplicities(); drawGeom(); create_GeomXYZ_from_draw_grometry(); lastFragNumber++; lastC = C; lastN = N; lastCA = CA; lastCH3 = CH3; lastO = O; lastH = H; lastOmega = omega; lastPsi = psi; } /********************************************************************************/ static void delete_last_fragment() { if(lastFragNumber >= 0 && Nb>0) { gint i; gint k; G_CONST_RETURN gchar* t; /* delete the last Fragment */ k = 0; for ( i = 0; i < Nb; i++ ) { if(G[i].ResidueNumber != lastFragNumber) continue; if(G[i].pdbType) g_free(G[i].pdbType); if(G[i].Prop.symbol) g_free(G[i].Prop.symbol); if(G[i].Prop.name) g_free(G[i].Prop.name); if(G[i].mmType) g_free(G[i].mmType); if(G[i].Residue) g_free(G[i].Residue); if(G[i].typeConnections) g_free(G[i].typeConnections); k++; } Nb -= k; lastFragNumber--; lastC = -1; lastN = -1; lastCA = -1; lastCH3 = -1; lastO = -1; lastH = -1; for ( i = 0; i < Nb; i++ ) { if(G[i].ResidueNumber != lastFragNumber) continue; if(!strcmp(G[i].pdbType,"C")) lastC = i; else if(!strcmp(G[i].pdbType,"N")) lastN = i; else if(!strcmp(G[i].pdbType,"CA")) lastCA = i; else if(!strcmp(G[i].pdbType,"CH3")) lastCH3 = i; else if(!strcmp(G[i].pdbType,"O")) lastO = i; else if(!strcmp(G[i].pdbType,"H")) lastH = i; } i = Nb-1; if(i>=0) { if(!strcmp(G[i].Residue , "NME")) { CA = CH3;} if(!strcmp(G[i].Residue , "NHE")) { CA = N;} if(!strcmp(G[i].Residue , "ACE")) { CA = CH3;} } re_set_angles(FALSE); t = gtk_entry_get_text(GTK_ENTRY(Entrys[1])); lastPsi = atof(t); t = gtk_entry_get_text(GTK_ENTRY(Entrys[2])); lastOmega = atof(t); } } /********************************************************************************/ static void reset_n_cap(GtkWidget *button,gpointer data) { GtkWidget* Dlg = g_object_get_data(G_OBJECT (button), "WinDlg"); if(Dlg) g_object_set_data(G_OBJECT (Dlg), "N-CAP",(gchar*)data); } /********************************************************************************/ static void reset_c_cap(GtkWidget *button,gpointer data) { GtkWidget* Dlg = g_object_get_data(G_OBJECT (button), "WinDlg"); if(Dlg) g_object_set_data(G_OBJECT (Dlg), "C-CAP",(gchar*)data); } /********************************************************************************/ static void reset_sensitive_undo_button(GtkWidget *Dlg) { GtkWidget* undoButton = g_object_get_data(G_OBJECT (Dlg), "UndoButton"); if(!undoButton) return; if(Nb<1) gtk_widget_set_sensitive(undoButton, FALSE); else gtk_widget_set_sensitive(undoButton, TRUE); } /********************************************************************************/ static void reset_sensitive_build_c_capping(GtkWidget *Dlg, gboolean sens) { GtkWidget* buildCCapping = g_object_get_data(G_OBJECT (Dlg), "BuildCCapping"); if(!buildCCapping) return; gtk_widget_set_sensitive(buildCCapping, sens); } /********************************************************************************/ static void undo(GtkWidget *Dlg, gpointer data) { GtkWidget* frameAminoAcide = NULL; if(!Dlg) return; if(Nb>0 && (strlen(G[Nb-1].Residue)<4 || (strlen(G[Nb-1].Residue)==4 && (G[Nb-1].Residue[0]=='N'||G[Nb-1].Residue[0]=='H') ) ) ) { delete_last_fragment(); if( lastFragNumber == 0 && Nb>0 && !strcmp(G[Nb-1].Residue,"ACE")) delete_last_fragment(); } else { sprintf(fragName,"%s",G[Nb-1].Residue+1); delete_last_fragment(); lowercase(fragName); if (GTK_TOGGLE_BUTTON (ButtonL)->active) sprintf(fullFragName,"L%s",fragName); else sprintf(fullFragName,"D%s",fragName); FreeFragment(&Frag); Frag = GetFragmentPPD(fullFragName); add_fragment(fragName); re_set_angles(TRUE); } if( lastFragNumber == -1) { GtkWidget* frameNCap = g_object_get_data(G_OBJECT (Dlg), "FrameNCap"); if(frameNCap) gtk_widget_set_sensitive(frameNCap, TRUE); } define_geometry_to_draw(); if(Nb>0) define_good_factor(); unselect_all_atoms(); reset_all_connections(); reset_charges_multiplicities(); drawGeom(); create_GeomXYZ_from_draw_grometry(); frameAminoAcide = g_object_get_data(G_OBJECT (Dlg), "FrameAminoAcide"); if(frameAminoAcide) gtk_widget_set_sensitive(frameAminoAcide, TRUE); reset_sensitive_undo_button(Dlg); if( lastFragNumber == -1 || Nb<1) reset_sensitive_build_c_capping(Dlg, FALSE); else if( lastFragNumber == 0 && strlen(G[Nb-1].Residue)==4) reset_sensitive_build_c_capping(Dlg, FALSE); else reset_sensitive_build_c_capping(Dlg, TRUE); } /********************************************************************************/ static void build_c_capping(GtkWidget *Dlg,gpointer data) { GtkWidget* frameAminoAcide = NULL; gchar* ccap = NULL; gboolean sens = TRUE; if(!Dlg) return; frameAminoAcide = g_object_get_data(G_OBJECT (Dlg), "FrameAminoAcide"); ccap = (gchar*) g_object_get_data(G_OBJECT (Dlg), "C-CAP"); if(!ccap ) return; if(!strcmp(ccap,_("Nothing"))) return; if(lastFragNumber < 0) return; if(!strcmp(ccap,"NME")) { sprintf(fragName,"%s","nme"); lowercase(fragName); if (GTK_TOGGLE_BUTTON (ButtonL)->active) sprintf(fullFragName,"L%s",fragName); else sprintf(fullFragName,"D%s",fragName); FreeFragment(&Frag); Frag = GetFragmentPPD(fullFragName); add_fragment("Nme"); re_set_angles(TRUE); sens = FALSE; } else if(!strcmp(ccap,"NHE")) { sprintf(fragName,"%s","nhe"); lowercase(fragName); if (GTK_TOGGLE_BUTTON (ButtonL)->active) sprintf(fullFragName,"L%s",fragName); else sprintf(fullFragName,"D%s",fragName); FreeFragment(&Frag); Frag = GetFragmentPPD(fullFragName); add_fragment("Nhe"); re_set_angles(TRUE); sens = FALSE; } else if(lastFragNumber >= 0 && Nb>0 && strlen(G[Nb-1].Residue)<4) { if(!strcmp(ccap,"COOH")) sprintf(fragName,"O%s",G[Nb-1].Residue); else sprintf(fragName,"C%s",G[Nb-1].Residue); delete_last_fragment(); lowercase(fragName); if (GTK_TOGGLE_BUTTON (ButtonL)->active) sprintf(fullFragName,"L%s",fragName); else sprintf(fullFragName,"D%s",fragName); FreeFragment(&Frag); Frag = GetFragmentPPD(fullFragName); add_fragment(fragName); re_set_angles(TRUE); sens = FALSE; } if(frameAminoAcide) gtk_widget_set_sensitive(frameAminoAcide, sens); reset_sensitive_build_c_capping(Dlg, sens); } /********************************************************************************/ static void build_n_capping(GtkWidget *Dlg,gchar* firstResidue) { gchar* ncap = NULL; if(!Dlg) return; ncap = (gchar*) g_object_get_data(G_OBJECT (Dlg), "N-CAP"); if(!ncap) return; if(!strcmp(ncap,"ACE")) { sprintf(fragName,"%s","ace"); lowercase(fragName); if (GTK_TOGGLE_BUTTON (ButtonL)->active) sprintf(fullFragName,"L%s",fragName); else sprintf(fullFragName,"D%s",fragName); FreeFragment(&Frag); Frag = GetFragmentPPD(fullFragName); add_fragment("Ace"); re_set_angles(TRUE); sprintf(fragName,"%s",firstResidue); lowercase(fragName); if (GTK_TOGGLE_BUTTON (ButtonL)->active) sprintf(fullFragName,"L%s",fragName); else sprintf(fullFragName,"D%s",fragName); FreeFragment(&Frag); Frag = GetFragmentPPD(fullFragName); add_fragment(firstResidue); re_set_angles(TRUE); reset_sensitive_build_c_capping(Dlg, TRUE); } else if(!strcmp(ncap,_("Nothing"))) { sprintf(fragName,"%s",firstResidue); lowercase(fragName); if (GTK_TOGGLE_BUTTON (ButtonL)->active) sprintf(fullFragName,"L%s",fragName); else sprintf(fullFragName,"D%s",fragName); FreeFragment(&Frag); Frag = GetFragmentPPD(fullFragName); add_fragment(firstResidue); re_set_angles(TRUE); reset_sensitive_build_c_capping(Dlg, TRUE); } else { if(!strcmp(ncap,"NH2")) sprintf(fragName,"H%s",firstResidue); else sprintf(fragName,"N%s",firstResidue); lowercase(fragName); if (GTK_TOGGLE_BUTTON (ButtonL)->active) sprintf(fullFragName,"L%s",fragName); else sprintf(fullFragName,"D%s",fragName); FreeFragment(&Frag); Frag = GetFragmentPPD(fullFragName); add_fragment(firstResidue); re_set_angles(TRUE); reset_sensitive_build_c_capping(Dlg, TRUE); } } /********************************************************************************/ static void build_polypeptide(GtkWidget *button,gpointer data) { GtkWidget* Dlg = g_object_get_data(G_OBJECT (button), "WinDlg"); if(lastFragNumber == -1) { GtkWidget* frameNCap = NULL; if(!Dlg) return; build_n_capping(Dlg,(gchar*)data); frameNCap = g_object_get_data(G_OBJECT (Dlg), "FrameNCap"); if(frameNCap) gtk_widget_set_sensitive(frameNCap, FALSE); reset_sensitive_undo_button(Dlg); return; } sprintf(fragName,"%s",(gchar*)data); lowercase(fragName); if (GTK_TOGGLE_BUTTON (ButtonL)->active) sprintf(fullFragName,"L%s",fragName); else sprintf(fullFragName,"D%s",fragName); FreeFragment(&Frag); Frag = GetFragmentPPD(fullFragName); add_fragment((gchar*)data); re_set_angles(TRUE); reset_sensitive_undo_button(Dlg); reset_sensitive_build_c_capping(Dlg, TRUE); } /********************************************************************************************************/ static void traite_conformation(GtkComboBox *combobox, gpointer d) { gint i; GtkTreeIter iter; gchar* option = NULL; if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &option, -1); } if(!option) return; ibuffer = 0; sprintf(conf,"%s",option); if(!strcmp(option,"Other")) for(i=0;i<3;i++) { gtk_editable_set_editable((GtkEditable*) Entrys[i],TRUE); } else for(i=0;i<3;i++) { gtk_editable_set_editable((GtkEditable*) Entrys[i],FALSE); } if ( !strcmp(option, "3-10 Helix" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-49.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"-26.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 0; return ; } else if ( !strcmp(option, "Alpha Helix" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-57.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"-47.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 0; return ; } else if ( !strcmp(option, "Alpha Helix (LH)" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"57.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"47.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 0; return ; } else if ( !strcmp(option, "Beta Sheet (anti-prl)" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-139.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"135.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"-178.0"); nbuffer = 0; return ; } else if ( !strcmp(option, "Beta Sheet (parallel)" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-119.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"113.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"-178.0"); nbuffer = 0; return ; } else if ( !strcmp(option, "Omega Helix" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"64.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"55.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 0; return ; } else if ( !strcmp(option, "Pi Helix" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-57.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"-70.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 0; return ; } else if ( !strcmp(option, "Polyglycine II" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"80.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"-150.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 0; return ; } else if ( !strcmp(option, "Polyglycine II (LH)" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-80.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"150.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 0; return ; } else if ( !strcmp(option, "Polyproline I" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-83.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"158.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"0.0"); nbuffer = 0; return ; } else if ( !strcmp(option, "Polyproline II" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-80.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"150.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 0; return ; } else if ( !strcmp(option, "Other" )) { nbuffer = 0; return ; } else if ( !strcmp(option, "Extended" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"180.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"180.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 0; return ; } else if ( !strcmp(option, "Gamma Turn" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"180.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"180.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 3; phiBuffer[ 0 ] = 180.0; phiBuffer[ 1 ] = 75.0; phiBuffer[ 2 ] = 180.0; psiBuffer[ 0 ] = 180.0; psiBuffer[ 1 ] = -65.0; psiBuffer[ 2 ] = 180.0; omegaBuffer[ 0 ] = 180.0; omegaBuffer[ 1 ] = 180.0; omegaBuffer[ 2 ] = 180.0; return ; } else if ( !strcmp(option, "Gamma Turn (rev)" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-57.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"-47.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 3; phiBuffer[ 0 ] = -57.0; phiBuffer[ 1 ] = -75.0; phiBuffer[ 2 ] = 180.0; psiBuffer[ 0 ] = -47.0; psiBuffer[ 1 ] = 65.0; psiBuffer[ 2 ] = 180.0; omegaBuffer[ 0 ] = 180.0; omegaBuffer[ 1 ] = 180.0; omegaBuffer[ 2 ] = 180.0; return ; } else if ( !strcmp(option, "Beta 1 Turn" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-57.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"-47.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 4; phiBuffer[ 0 ] = -57.0; phiBuffer[ 1 ] = -60.0; phiBuffer[ 2 ] = -90.0; phiBuffer[ 3 ] = -57.0; psiBuffer[ 0 ] = -47.0; psiBuffer[ 1 ] = -30.0; psiBuffer[ 2 ] = 0.0; psiBuffer[ 3 ] = -47.0; omegaBuffer[ 0 ] = 180.0; omegaBuffer[ 1 ] = 180.0; omegaBuffer[ 2 ] = 180.0; omegaBuffer[ 3 ] = 180.0; return ; } else if ( !strcmp(option, "Beta 2 Turn" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-57.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"-47.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 4; phiBuffer[ 0 ] = -57.0; phiBuffer[ 1 ] = -60.0; phiBuffer[ 2 ] = 80.0; phiBuffer[ 3 ] = -57.0; psiBuffer[ 0 ] = -47.0; psiBuffer[ 1 ] = 120.0; psiBuffer[ 2 ] = 0.0; psiBuffer[ 3 ] = -47.0; omegaBuffer[ 0 ] = 180.0; omegaBuffer[ 1 ] = 180.0; omegaBuffer[ 2 ] = 180.0; omegaBuffer[ 3 ] = 180.0; return ; } else if ( !strcmp(option, "Beta 3 Turn" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-57.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"-47.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 4; phiBuffer[ 0 ] = -57.0; phiBuffer[ 1 ] = -60.0; phiBuffer[ 2 ] = -60.0; phiBuffer[ 3 ] = -57.0; psiBuffer[ 0 ] = -47.0; psiBuffer[ 1 ] = -30.0; psiBuffer[ 2 ] = -30.0; psiBuffer[ 3 ] = -47.0; omegaBuffer[ 0 ] = 180.0; omegaBuffer[ 1 ] = 180.0; omegaBuffer[ 2 ] = 180.0; omegaBuffer[ 3 ] = 180.0; return ; } else if ( !strcmp(option, "Beta 5 Turn" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-57.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"-47.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 4; phiBuffer[ 0 ] = -57.0; phiBuffer[ 1 ] = -80.0; phiBuffer[ 2 ] = -80.0; phiBuffer[ 3 ] = -57.0; psiBuffer[ 0 ] = -47.0; psiBuffer[ 1 ] = 80.0; psiBuffer[ 2 ] = 80.0; psiBuffer[ 3 ] = -47.0; omegaBuffer[ 0 ] = 180.0; omegaBuffer[ 1 ] = 180.0; omegaBuffer[ 2 ] = 180.0; omegaBuffer[ 3 ] = 180.0; return ; } else if ( !strcmp(option, "Beta 6a Turn" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-57.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"-47.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 4; phiBuffer[ 0 ] = -57.0; phiBuffer[ 1 ] = -60.0; phiBuffer[ 2 ] = -90.0; phiBuffer[ 3 ] = -57.0; psiBuffer[ 0 ] = -47.0; psiBuffer[ 1 ] = 120.0; psiBuffer[ 2 ] = 0.0; psiBuffer[ 3 ] = -47.0; omegaBuffer[ 0 ] = 180.0; omegaBuffer[ 1 ] = 180.0; omegaBuffer[ 2 ] = 180.0; omegaBuffer[ 3 ] = 180.0; return ; } else if ( !strcmp(option, "Beta 6b Turn" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-57.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"-47.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 4; phiBuffer[ 0 ] = -57.0; phiBuffer[ 1 ] = -120.0; phiBuffer[ 2 ] = -60.0; phiBuffer[ 3 ] = -57.0; psiBuffer[ 0 ] = -47.0; psiBuffer[ 1 ] = 120.0; psiBuffer[ 2 ] = 0.0; psiBuffer[ 3 ] = -47.0; omegaBuffer[ 0 ] = 180.0; omegaBuffer[ 1 ] = 180.0; omegaBuffer[ 2 ] = 180.0; omegaBuffer[ 3 ] = 180.0; return ; } else if ( !strcmp(option, "Beta 8 Turn" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-57.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"-47.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 4; phiBuffer[ 0 ] = -57.0; phiBuffer[ 1 ] = -60.0; phiBuffer[ 2 ] = -120.0; phiBuffer[ 3 ] = -57.0; psiBuffer[ 0 ] = -47.0; psiBuffer[ 1 ] = -30.0; psiBuffer[ 2 ] = 120.0; psiBuffer[ 3 ] = -47.0; omegaBuffer[ 0 ] = 180.0; omegaBuffer[ 1 ] = 180.0; omegaBuffer[ 2 ] = 180.0; omegaBuffer[ 3 ] = 180.0; return ; } else if ( !strcmp(option, "Beta 1' Turn" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-57.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"-47.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 4; phiBuffer[ 0 ] = -57.0; phiBuffer[ 1 ] = 60.0; phiBuffer[ 2 ] = 90.0; phiBuffer[ 3 ] = -57.0; psiBuffer[ 0 ] = -47.0; psiBuffer[ 1 ] = 30.0; psiBuffer[ 2 ] = 0.0; psiBuffer[ 3 ] = -47.0; omegaBuffer[ 0 ] = 180.0; omegaBuffer[ 1 ] = 180.0; omegaBuffer[ 2 ] = 180.0; omegaBuffer[ 3 ] = 180.0; return ; } else if ( !strcmp(option, "Beta 2' Turn" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-57.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"-47.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 4; phiBuffer[ 0 ] = -57.0; phiBuffer[ 1 ] = 60.0; phiBuffer[ 2 ] = -80.0; phiBuffer[ 3 ] = -57.0; psiBuffer[ 0 ] = -47.0; psiBuffer[ 1 ] = -120.0; psiBuffer[ 2 ] = 0.0; psiBuffer[ 3 ] = -47.0; omegaBuffer[ 0 ] = 180.0; omegaBuffer[ 1 ] = 180.0; omegaBuffer[ 2 ] = 180.0; omegaBuffer[ 3 ] = 180.0; return ; } else if ( !strcmp(option, "Beta 3' Turn" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-57.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"-47.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 4; phiBuffer[ 0 ] = -57.0; phiBuffer[ 1 ] = 60.0; phiBuffer[ 2 ] = 60.0; phiBuffer[ 3 ] = -57.0; psiBuffer[ 0 ] = -47.0; psiBuffer[ 1 ] = 30.0; psiBuffer[ 2 ] = 30.0; psiBuffer[ 3 ] = -47.0; omegaBuffer[ 0 ] = 180.0; omegaBuffer[ 1 ] = 180.0; omegaBuffer[ 2 ] = 180.0; omegaBuffer[ 3 ] = 180.0; return ; } else if ( !strcmp(option, "Beta 5' Turn" )) { gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"-57.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"-47.0"); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"180.0"); nbuffer = 4; phiBuffer[ 0 ] = -57.0; phiBuffer[ 1 ] = 80.0; phiBuffer[ 2 ] = 80.0; phiBuffer[ 3 ] = -57.0; psiBuffer[ 0 ] = -47.0; psiBuffer[ 1 ] = -80.0; psiBuffer[ 2 ] = -80.0; psiBuffer[ 3 ] = -47.0; omegaBuffer[ 0 ] = 180.0; omegaBuffer[ 1 ] = 180.0; omegaBuffer[ 2 ] = 180.0; omegaBuffer[ 3 ] = 180.0; return ; } } /********************************************************************************************************/ static GtkWidget *get_button_conformation() { GtkTreeIter iter; GtkTreeStore *store; GtkTreeModel *model; GtkWidget *combobox; GtkCellRenderer *renderer; store = gtk_tree_store_new (1,G_TYPE_STRING); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "3-10 Helix", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Alpha Helix", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Alpha Helix (LH)", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Beta Sheet (anti-prl)", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Beta Sheet (parallel)", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Beta 1 Turn", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Beta 1' Turn", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Beta 2 Turn", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Beta 2' Turn", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Beta 3 Turn", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Beta 3' Turn", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Beta 5 Turn", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Beta 5' Turn", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Beta 6a Turn", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Beta 6b Turn", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Beta 8 Turn", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Extended", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Gamma Turn", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Gamma Turn (rev)", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Omega Helix", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Pi Helix", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Polyglycine II", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Polyproline I", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Polyproline II", -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, "Other", -1); sprintf(conf,"Extended"); model = GTK_TREE_MODEL (store); combobox = gtk_combo_box_new_with_model (model); g_object_unref (model); g_signal_connect (G_OBJECT(combobox), "changed", G_CALLBACK(traite_conformation), NULL); renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", 0, NULL); return combobox; } /********************************************************************************/ static GtkWidget* add_options(GtkWidget* Dlg,GtkWidget *box) { GtkWidget* Table; GtkWidget* frame; GtkWidget* combobox; GtkWidget* Label; gchar* tlabel[] = {"Phi","Psi","Omega"}; gchar* elabel[] = {"180.0","180.0","180.0"}; gint i; frame = gtk_frame_new ("Conformation"); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 1); gtk_container_add(GTK_CONTAINER(box),frame); gtk_widget_show (frame); Table = gtk_table_new(5,3,TRUE); gtk_container_add(GTK_CONTAINER(frame),Table); combobox =get_button_conformation(); gtk_table_attach(GTK_TABLE(Table), combobox,0,3,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); for(i=0;i<3;i++) { Label = gtk_label_new(tlabel[i]); gtk_table_attach(GTK_TABLE(Table),Label,0,1,i+1,i+2, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); Entrys[i] = gtk_entry_new(); gtk_table_attach(GTK_TABLE(Table),Entrys[i],1,3,i+1,i+2, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); gtk_editable_set_editable((GtkEditable*) Entrys[i],FALSE); gtk_entry_set_text(GTK_ENTRY(Entrys[i]),elabel[i]); } Label = gtk_label_new("Isomer"); gtk_table_attach(GTK_TABLE(Table),Label,0,1,4,5, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); ButtonL = gtk_radio_button_new_with_label( NULL," L " ); gtk_table_attach(GTK_TABLE(Table),ButtonL,1,2,4,5, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); ButtonD = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonL)), " D "); gtk_table_attach(GTK_TABLE(Table),ButtonD,2,3,4,5, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); g_object_set_data(G_OBJECT (Dlg), "ButtonL",ButtonL); g_object_set_data(G_OBJECT (Dlg), "ButtonD",ButtonD); return combobox; } /********************************************************************************/ static GtkWidget* add_n_cap(GtkWidget* Dlg,GtkWidget *box) { GtkWidget* table; GtkWidget* frame; GtkWidget* button1; GtkWidget* button; static gchar* list[] = {"ACE","NH3+","NH2",N_("Nothing")}; gint i; gint nOptions = G_N_ELEMENTS (list); frame = gtk_frame_new ("N-cap"); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 1); gtk_container_add(GTK_CONTAINER(box),frame); gtk_widget_show (frame); table = gtk_table_new(nOptions/2+nOptions%2,2,TRUE); gtk_container_add(GTK_CONTAINER(frame),table); button1 = NULL; for(i=0;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox = create_hbox_false(vboxframe); add_buttons(Dlg,hbox); hbox = create_hbox_false(vboxframe); combobox = add_options(Dlg,hbox); vbox = create_vbox_false(hbox); add_n_cap(Dlg,vbox); add_c_cap(Dlg,vbox); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(Dlg)->action_area), FALSE); gtk_widget_realize(Dlg); Button = gtk_button_new_with_mnemonic("_Undo"); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Dlg)->action_area), Button, FALSE, FALSE, 5); g_signal_connect_swapped(G_OBJECT(Button), "clicked",(GCallback)undo,GTK_OBJECT(Dlg)); g_object_set_data(G_OBJECT (Dlg), "UndoButton",Button); reset_sensitive_undo_button(Dlg); Button = create_button(Dlg,_("Add C-capping")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Dlg)->action_area), Button, FALSE, FALSE, 5); g_signal_connect_swapped(G_OBJECT(Button), "clicked",(GCallback)build_c_capping,GTK_OBJECT(Dlg)); g_object_set_data(G_OBJECT (Dlg), "BuildCCapping",Button); reset_sensitive_build_c_capping(Dlg, FALSE); Button = create_button(Dlg,_("Close")); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Dlg)->action_area), Button, FALSE, TRUE, 2); g_signal_connect_swapped(G_OBJECT(Button), "clicked",(GCallback)destroy_dlg,GTK_OBJECT(Dlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(GTK_DIALOG(Dlg)->vbox); gtk_widget_show_all(GTK_DIALOG(Dlg)->action_area); gtk_widget_show_now(Dlg); fit_windows_position(GeomDlg, Dlg); gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 16); } GabeditSrc250/src/Geometry/ExportGeom.h0000644000175100017510000000022313130665226020315 0ustar alloucheallouche #ifndef __GABEDIT_EXPORTGEOM_H__ #define __GABEDIT_EXPORTGEOM_H__ void export_geometry_dlg(gchar* type); #endif /* __GABEDIT_EXPORTGEOM_H__ */ GabeditSrc250/src/Geometry/FragmentsTree.c0000644000175100017510000005063713130665226021003 0ustar alloucheallouche/* FragmentsTree.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include "../../Config.h" #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/PovrayUtils.h" #include "../Utils/AtomsProp.h" #include "../Geometry/GeomGlobal.h" #include "../Common/Windows.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/PreviewGeom.h" #include "../Geometry/PersonalFragments.h" #include "../Geometry/LoadPersonalFragments.h" /********************************************************************************/ typedef struct _FragmentGroup FragmentGroup; typedef struct _FragmentsList FragmentsList; typedef struct _DataFragTree DataFragTree; struct _FragmentGroup { gchar* name; gint numberOfFragments; gchar** fragmentNames; }; struct _FragmentsList { gint numberOfGroups; FragmentGroup* groups; }; struct _DataFragTree { gint groupNumber; gint fragNumber; }; /********************************************************************************/ #define lengthList 1 static gchar *listTitles[]={ "Fragments"}; typedef enum { LIST_NAME = 0, LIST_DATA /* column for data, this column is not visible */ }ListColumnsTypes; /********************************************************************************/ static void freeFragmentsList(FragmentsList* fragList) { gint i; gint j; if(!fragList) return; if(fragList->numberOfGroups<1) { fragList->numberOfGroups = 0; fragList->groups = NULL; return; } if(fragList->groups) for(i=0;inumberOfGroups;i++) { for(j=0;jgroups[i].numberOfFragments;j++) { if(fragList->groups[i].fragmentNames[j]) g_free(fragList->groups[i].fragmentNames[j]); } } if(fragList->groups) g_free(fragList->groups); fragList->numberOfGroups = 0; fragList->groups = NULL; } /********************************************************************************/ static void addOneGroup(FragmentsList* fragList, gchar* groupName, gint nFrag, gchar** fragNames) { gint i; gint j; if(!fragList) return; fragList->numberOfGroups++; fragList->groups = g_realloc(fragList->groups, fragList->numberOfGroups*sizeof(FragmentGroup)); i = fragList->numberOfGroups-1; fragList->groups[i].name = g_strdup(groupName); fragList->groups[i].numberOfFragments = nFrag; fragList->groups[i].fragmentNames = g_malloc(nFrag*sizeof(gchar*)); for(j=0;jgroups[i].fragmentNames[j] = g_strdup(fragNames[j]); } /********************************************************************************/ static void addDrugs(FragmentsList* fragList) { static gchar *names[]= {"Viagra","Valium","Morphine", "Methadone","LSD","Heroine", "Nicotine","Caffeine","Aspirin"}; if(!fragList) return; addOneGroup(fragList, "Drugs", G_N_ELEMENTS(names), names); } /********************************************************************************/ static void addRings(FragmentsList* fragList) { static gchar *names[]={ "Benzene","Benzofuran","Acenaphthene","Xanthene", "Norbornane","Porphine","Oxazole","2-Norbornene", "Cyclohexene","Cyclohexane","Cyclopentadiene","Cyclopentene", "Cyclopentane","Cyclobutene","Cyclobutane","Cyclopropane", "Cycloheptene","Cycloheptane","Imidazole" }; if(!fragList) return; addOneGroup(fragList, "Rings", G_N_ELEMENTS (names), names); } /********************************************************************************/ static void addFullerenes(FragmentsList* fragList) { static gchar *names[]={ "C60","C70","C78", "C80","C82","C84", "C240" }; if(!fragList) return; addOneGroup(fragList, "Fullerenes", G_N_ELEMENTS (names), names); } /********************************************************************************/ static void addFunctionals(FragmentsList* fragList) { static gchar *names[]={ "Methyl","Hydroxy","Carboxylic Acid","Carboxylate", "Amine","Amide","Aldehyde","Acid Anhydride", "Methoxy","Nitrile","Nitroso","Nitro", "Isopropyl","Thiol","Acid Anhydride" }; if(!fragList) return; addOneGroup(fragList, "Functionals", G_N_ELEMENTS (names), names); } /********************************************************************************/ static void addHydrocarbon(FragmentsList* fragList) { static gchar *names[]={ "Propane", "Ethylene", "Ethane", "Methane", "Butadiene", "trans-Butane", "cis-Butane", "Propylene", "Nonane", "Octane", "Heptane", "Hexane", "Tridecane", "Dodecane", "Undecane", "Decane", "Heptadecane", "Hexadecane", "Pentadecane", "Tetradecane", "Tetracontane", "Eicosane", "Nonadecane", "Octadecane" }; if(!fragList) return; addOneGroup(fragList, "Hydrocarbon", G_N_ELEMENTS (names), names); } /********************************************************************************/ static void addMiscellaneous(FragmentsList* fragList) { static gchar *names[]={ "Water","Imine","Glycerol", "Ammonia","Hydrazone","Formamide", "Urea","Glycol","Formaldehyde" }; if(!fragList) return; addOneGroup(fragList, "Miscellaneous", G_N_ELEMENTS (names), names); } /********************************************************************************/ static void addAminoAcidsL(FragmentsList* fragList) { static gchar *names[]={ "Ala","Cys","Gly","His","Met","Thr", "Arg","Cyx","Cym","Hid","Ile","Phe","Tyr", "Asn","Gln","Hie","Leu","Pro","Trp", "Asp","Glu","Hip","Lys","Ser","Val", "Ash", "Glh","Lyn","Roh", "Ace","Nme" "Cala","Ccys","Cgly","Chis","Cmet","Cthr", "Carg","Ccyx","Ccym","Chid","Cile","Cphe","Ctyr", "Casn","Cgln","Chie","Cleu","Cpro","Ctrp", "Casp","Cglu","Chip","Clys","Cser","Cval", "Cash", "Cglh","Clyn", "Nala","Ncys","Ngly","Nhis","Nmet","Nthr", "Narg","Ncyx","Ncym","Nhid","Nile","Nphe","Ntyr", "Nasn","Ngln","Nhie","Nleu","Npro","Ntrp", "Nasp","Nglu","Nhip","Nlys","Nser","Nval", "Nash", "Nglh","Nlyn", "Oala","Ocys","Ogly","Ohis","Omet","Othr", "Oarg","Ocyx","Ocym","Ohid","Oile","Ophe","Otyr", "Oasn","Ogln","Ohie","Oleu","Opro","Otrp", "Oasp","Oglu","Ohip","Olys","Oser","Oval", "Oash", "Oglh","Olyn", "Hala","Hcys","Hgly","Hhis","Hmet","Hthr", "Harg","Hcyx","Hcym","Hhid","Hile","Hphe","Htyr", "Hasn","Hgln","Hhie","Hleu","Hpro","Htrp", "Hasp","Hglu","Hhip","Hlys","Hser","Hval", "Hash", "Hglh","Hlyn" }; if(!fragList) return; addOneGroup(fragList, "Aminoacids(L)", G_N_ELEMENTS (names), names); } /********************************************************************************/ static void addAminoAcidsD(FragmentsList* fragList) { static gchar *names[]={ "Ala","Cys","Gly","His","Met","Thr", "Arg","Cyx","Cym","Hid","Ile","Phe","Tyr", "Asn","Gln","Hie","Leu","Pro","Trp", "Asp","Glu","Hip","Lys","Ser","Val", "Ash", "Glh","Lyn","Roh", "Ace","Nme" "Cala","Ccys","Cgly","Chis","Cmet","Cthr", "Carg","Ccyx","Ccym","Chid","Cile","Cphe","Ctyr", "Casn","Cgln","Chie","Cleu","Cpro","Ctrp", "Casp","Cglu","Chip","Clys","Cser","Cval", "Cash", "Cglh","Clyn", "Nala","Ncys","Ngly","Nhis","Nmet","Nthr", "Narg","Ncyx","Ncym","Nhid","Nile","Nphe","Ntyr", "Nasn","Ngln","Nhie","Nleu","Npro","Ntrp", "Nasp","Nglu","Nhip","Nlys","Nser","Nval", "Nash", "Nglh","Nlyn", "Oala","Ocys","Ogly","Ohis","Omet","Othr", "Oarg","Ocyx","Ocym","Ohid","Oile","Ophe","Otyr", "Oasn","Ogln","Ohie","Oleu","Opro","Otrp", "Oasp","Oglu","Ohip","Olys","Oser","Oval", "Oash", "Oglh","Olyn", "Hala","Hcys","Hgly","Hhis","Hmet","Hthr", "Harg","Hcyx","Hcym","Hhid","Hile","Hphe","Htyr", "Hasn","Hgln","Hhie","Hleu","Hpro","Htrp", "Hasp","Hglu","Hhip","Hlys","Hser","Hval", "Hash", "Hglh","Hlyn" }; if(!fragList) return; addOneGroup(fragList, "Aminoacids(D)", G_N_ELEMENTS (names), names); } /********************************************************************************/ static void addAntivirals(FragmentsList* fragList) { static gchar *names[]={ "Acyclovir" , "Cidofovir" , "Famciclovir", "Ganciclovir" , "Idoxuridine" , "Penciclovir", "Valacyclovir" , "Vidarabine" , }; if(!fragList) return; addOneGroup(fragList, "Antiviral agents", G_N_ELEMENTS (names), names); } /********************************************************************************/ static void addHeterocyclic(FragmentsList* fragList) { static gchar *names[]={ "Oxirane" , "Pyrazine" , "Pyridazine" , "Pyridine" , "Pyrimidine" , "Pyrrol" , "Tetrahydrofuran" , "Thiophene" }; if(!fragList) return; addOneGroup(fragList, "Heterocyclic", G_N_ELEMENTS (names), names); } /********************************************************************************/ static void addPersonnalFragments(FragmentsList* fragList) { static gchar **names = NULL; gchar* fileName = g_strdup_printf("%s%sPersonalFragments.frg", gabedit_directory(), G_DIR_SEPARATOR_S); gint numberOfGroupes = 0; PersonalFragments* personnalFragments = NULL; PersonalGroupe* personnalGroupes = NULL; gint i; gint j; personnalFragments = loadAllPersonalFragments(fileName); if(personnalFragments) numberOfGroupes = personnalFragments->numberOfGroupes; if(personnalFragments) personnalGroupes = personnalFragments->personnalGroupes; if(fragList && personnalFragments) for(i=0;ipersonnalGroupes[i].groupName, personnalGroupes[i].numberOfFragments, names); g_free(names); } g_free(fileName); } /********************************************************************************/ static FragmentsList* getFragmentsList() { FragmentsList* fragList = g_malloc(sizeof(FragmentsList)); fragList->numberOfGroups = 0; fragList->groups = NULL; addFunctionals(fragList); addRings(fragList); addHeterocyclic(fragList); addHydrocarbon(fragList); addDrugs(fragList); addFullerenes(fragList); addAminoAcidsL(fragList); addAminoAcidsD(fragList); addAntivirals(fragList); addMiscellaneous(fragList); addPersonnalFragments(fragList); return fragList; } /********************************************************************************/ static void eventDispatcher(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; GtkTreeIter iter; GtkTreeModel *model; GtkWidget* treeView = widget; if (!event) return; if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget)) && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))); } if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { if(path) { DataFragTree* data = NULL; model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free(path); gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1); if(data) { FragmentsList* fragList = g_object_get_data(G_OBJECT(treeView), "FramentsList"); if(fragList) { gint nG = fragList->numberOfGroups; gint i = data->groupNumber; if( i>=0 && igroups && fragList->groups[i].name && fragList->groups[i].fragmentNames ) { gint j = data->fragNumber; gint nF = fragList->groups[i].numberOfFragments; if( j>=0 && jgroups[i].fragmentNames[j] ) { gchar* tmp = NULL; if(strstr(fragList->groups[i].name,"Aminoacids")) { gchar* dum = g_strdup(fragList->groups[i].fragmentNames[j]); lowercase(dum); if(strstr(fragList->groups[i].name,"(L)")) tmp = g_strdup_printf("%s/L%s", fragList->groups[i].name, dum); else tmp = g_strdup_printf("%s/D%s", fragList->groups[i].name, dum); g_free(dum); } else { tmp = g_strdup_printf("%s/%s", fragList->groups[i].name, fragList->groups[i].fragmentNames[j]); } add_a_fragment(treeView,tmp); g_free(tmp); } } } } } } GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event); } /********************************************************************************/ static DataFragTree* newDataFragTree(gint groupNumber, gint fragNumber) { DataFragTree* dataTree; dataTree = g_malloc(sizeof(DataFragTree)); dataTree->groupNumber = groupNumber; dataTree->fragNumber = fragNumber; return dataTree; } /********************************************************************************/ /* static void freeDataFragTree(GtkWidget* treeView) { DataFragTree* data = NULL; gint i = 0; gchar* pathString = NULL; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); pathString = g_strdup_printf("%d", i); while (gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE) { gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1); if(data) g_free(data); i++; g_free(pathString); pathString = g_strdup_printf("%d", i); } g_free(pathString); } */ /********************************************************************************/ /* static gboolean* getExpandInfo(GtkWidget* treeView) { gint i; gboolean* expandeds = NULL; gint nNodes = 0; gchar* pathString = NULL; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); nNodes = 0; pathString = g_strdup_printf("%d", nNodes); while (gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE) { nNodes++; g_free(pathString); pathString = g_strdup_printf("%d", nNodes); } g_free(pathString); if(nNodes<1) return NULL; expandeds = g_malloc((nNodes+1)*sizeof(gboolean)); for(i=0;inumberOfGroups;i++) { node = addNode(treeView, list->groups[i].name,i); for(j=0;jgroups[i].numberOfFragments;j++) { addFeuille(treeView, &node,list->groups[i].fragmentNames[j],i,j); } } } /********************************************************************************/ static void clearTreeView(GtkWidget* treeView) { GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); GtkTreeStore *store = GTK_TREE_STORE (model); gtk_tree_store_clear(store); } /********************************************************************************/ void rafreshTreeView(GtkWidget *treeView) { FragmentsList* fragList = NULL; if(treeView == NULL) return; fragList = g_object_get_data(G_OBJECT(treeView), "FramentsList"); if(fragList) freeFragmentsList(fragList); fragList = getFragmentsList(); clearTreeView(treeView); addFragmentsList(treeView, fragList); g_object_set_data(G_OBJECT(treeView), "FramentsList", fragList); } /***********************************************************************/ GtkWidget* addFragmentsTreeView(GtkWidget *box) { GtkWidget *scr; gint i; GtkTreeStore *store; GtkTreeModel *model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkWidget* treeView; GtkWidget* drawingArea = NULL; scr = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scr), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(box), scr); store = gtk_tree_store_new (lengthList+1, G_TYPE_STRING, G_TYPE_POINTER); model = GTK_TREE_MODEL (store); treeView = gtk_tree_view_new_with_model (model); g_object_set_data(G_OBJECT(box), "FramentsTreeView", treeView); drawingArea = g_object_get_data(G_OBJECT(box), "DrawingArea"); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeView), TRUE); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeView), TRUE); for (i=0;i #include #include "../Common/Global.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/Measure.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/Povray.h" #include "../Common/Windows.h" #include "../Utils/Transformation.h" #include "../MolecularMechanics/MolecularMechanicsDlg.h" #include "../MolecularMechanics/SetMMParameters.h" #include "../MolecularMechanics/SetPDBTemplate.h" #include "../SemiEmpirical/SemiEmpiricalDlg.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/GeomZmatrix.h" #include "../Geometry/GeomSymmetry.h" #include "../Files/FileChooser.h" #include "../Geometry/ImagesGeom.h" #include "../Geometry/RotFragments.h" #include "../Geometry/BuildLinear.h" #include "../Geometry/BuildRing.h" #include "../Geometry/BuildRoZPhi.h" #include "../Geometry/BuildPolyPeptide.h" #include "../Geometry/BuildPeriodic.h" #include "../Geometry/BuildPolySaccharide.h" #include "../Geometry/BuildPolyNucleicAcid.h" #include "../Geometry/BuildNanoTube.h" #include "../Geometry/PersonalFragments.h" #include "../Geometry/ResultsAnalise.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/MenuToolBarGeom.h" #include "../Geometry/OpenBabel.h" #include "../Geometry/FragmentsSelector.h" #include "../Geometry/ExportGeom.h" #include "../Utils/HydrogenBond.h" #include "../Symmetry/MoleculeSymmetryInterface.h" #include "../Common/StockIcons.h" #include "../Geometry/AxesGeomGL.h" #include "../Geometry/SelectionDlg.h" /* #define EXPERIMENTAL 1*/ /*********************************************************************************************************************/ static GtkUIManager *manager = NULL; static GtkWidget* handleBoxToolBar = NULL; static gboolean ViewToolBar = TRUE; static GtkToolbar* toolBar = NULL; /******************************************************************/ static void view_toolbar () { if(!handleBoxToolBar) return; if(ViewToolBar) gtk_widget_hide (GTK_WIDGET(handleBoxToolBar)); else gtk_widget_show (GTK_WIDGET(handleBoxToolBar)); ViewToolBar = !ViewToolBar; } /********************************************************************************/ static void set_atom(GtkWidget *button,gpointer data) { GtkWidget* WinTable = g_object_get_data(G_OBJECT(button), "WinTable"); /* GtkStyle *button_style = gtk_widget_get_style(WinTable); gchar* told; gtk_button_set_label(GTK_BUTTON(AtomButton), (gchar*)data); told = GTK_BUTTON(AtomButton)->label_text; GTK_BUTTON(AtomButton)->label_text = g_strdup(data); if(told) g_free(told); set_button_style(button_style,AtomButton,(gchar*)data); */ if(AtomToInsert) g_free(AtomToInsert); AtomToInsert = g_strdup((gchar*)data); if(GTK_IS_WIDGET(WinTable)) gtk_widget_destroy(WinTable); } /********************************************************************************/ static void select_atom() { GtkWidget* Table; GtkWidget* button; GtkWidget* frame; GtkWidget* WinTable; guint i; guint j; GtkStyle *button_style; /* GtkStyle *style;*/ gchar*** Symb = get_periodic_table(); WinTable = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(WinTable),TRUE); gtk_window_set_title(GTK_WINDOW(WinTable),_("Select your atom")); gtk_window_set_default_size (GTK_WINDOW(WinTable),(gint)(ScreenWidth*0.5),(gint)(ScreenHeight*0.4)); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_container_add(GTK_CONTAINER(WinTable),frame); gtk_widget_show (frame); Table = gtk_table_new(PERIODIC_TABLE_N_ROWS-1,PERIODIC_TABLE_N_COLUMNS,TRUE); gtk_container_add(GTK_CONTAINER(frame),Table); button_style = gtk_widget_get_style(WinTable); for ( i = 0;i\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" #ifdef EXPERIMENTAL " \n" " \n" #endif " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" #ifdef DRAWGEOMGL " \n" " \n" #endif " \n" " \n" " \n" " \n" #ifdef DRAWGEOMGL " \n" #endif " \n" " \n" #ifndef DRAWGEOMGL " \n" " \n" " \n" " \n" #endif " \n" #ifdef DRAWGEOMGL " \n" " \n" #endif " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" #ifdef DRAWGEOMGL " \n" " \n" " \n" " \n" " \n" " \n" #endif " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" #ifdef DRAWGEOMGL " \n" " \n" " \n" " \n" " \n" #endif " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" ; /*******************************************************************************************************************************/ static void set_init_gtkActionToggleEntries() { gint i=0; gtkActionToggleEntries[i++].is_active = distances_draw_mode(); /* LabelsDistances */ gtkActionToggleEntries[i++].is_active = dipole_draw_mode(); /* LabelsDipole */ #ifdef DRAWGEOMGL gtkActionToggleEntries[i++].is_active = ortho_mode(); /* RenderLabelsOrtho */ #endif gtkActionToggleEntries[i++].is_active = pers_mode(); /* RenderPerspective */ gtkActionToggleEntries[i++].is_active = light_mode(); /* RenderLighting */ gtkActionToggleEntries[i++].is_active = ortep_mode(); /* RenderOrtep */ gtkActionToggleEntries[i++].is_active = cartoon_mode(); /* RenderCartoon */ gtkActionToggleEntries[i++].is_active = shad_mode(); /* RenderShad */ #ifdef DRAWGEOMGL gtkActionToggleEntries[i++].is_active = testShowAxesGeom(); /* RenderShowAxes */ gtkActionToggleEntries[i++].is_active = testShowBoxGeom(); /* RenderShowBox */ #endif gtkActionToggleEntries[i++].is_active = dipole_mode(); /* RenderShowDipole */ gtkActionToggleEntries[i++].is_active = ShowHBonds; /* RenderShowHydrogenBonds */ gtkActionToggleEntries[i++].is_active = getShowMultipleBonds(); /* RenderShowDoubleTripleBonds */ gtkActionToggleEntries[i++].is_active = TRUE; /* ShowToolBar */ gtkActionToggleEntries[i++].is_active = TRUE; /* ShowStatusBox */ gtkActionToggleEntries[i++].is_active = !MeasureIsHide; /* ShowMeasureNoteBook */ gtkActionToggleEntries[i++].is_active = getAdjustHydrogensYesNo(); /* Ajust hydrogens */ gtkActionToggleEntries[i++].is_active = getRebuildConnectionsDuringEditionYesNo(); /* rebuild connection */ } /*******************************************************************************************************************************/ static void add_widget (GtkUIManager *merge, GtkWidget *widget, GtkContainer *container) { GtkWidget *handlebox; if (!GTK_IS_TOOLBAR (widget)) return; handlebox =gtk_handle_box_new (); g_object_ref (handlebox); gtk_handle_box_set_handle_position (GTK_HANDLE_BOX(handlebox),GTK_POS_TOP); /* GTK_SHADOW_NONE, GTK_SHADOW_IN, GTK_SHADOW_OUT, GTK_SHADOW_ETCHED_IN, GTK_SHADOW_ETCHED_OUT */ gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(handlebox),GTK_SHADOW_OUT); gtk_box_pack_start (GTK_BOX (container), handlebox, FALSE, FALSE, 0); if (GTK_IS_TOOLBAR (widget)) { GtkToolbar *toolbar; toolbar = GTK_TOOLBAR (widget); gtk_toolbar_set_show_arrow (toolbar, TRUE); gtk_toolbar_set_style(toolbar, GTK_TOOLBAR_ICONS); gtk_toolbar_set_orientation(toolbar, GTK_ORIENTATION_VERTICAL); toolBar = toolbar; handleBoxToolBar = handlebox; } gtk_widget_show (widget); gtk_container_add (GTK_CONTAINER (handlebox), widget); gtk_widget_show (handlebox); } /*********************************************************************************************************************/ void activate_rotation() { GtkAction * actionRotation = gtk_ui_manager_get_action(manager, "/MenuGeom/Operations/OperationsRotation"); if(GTK_IS_TOGGLE_ACTION(actionRotation)) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(actionRotation), TRUE); } /*********************************************************************************************************************/ void activate_edit_objects() { GtkAction * actionEdition = gtk_ui_manager_get_action(manager, "/MenuGeom/Operations/OperationsEditObjects"); if(GTK_IS_TOGGLE_ACTION(actionEdition)) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(actionEdition), TRUE); } /*********************************************************************************************************************/ void activate_insert_fragment() { GtkAction * action = gtk_ui_manager_get_action(manager, "/MenuGeom/Operations/OperationsInsertFrag"); if(GTK_IS_TOGGLE_ACTION(action)) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), TRUE); } /*******************************************************************************************************************************/ void create_toolbar_and_popup_menu_geom(GtkWidget* box) { GtkActionGroup *actionGroup = NULL; GtkUIManager *merge = NULL; GError *error = NULL; TypeRenderGeom mode = GEOMETRY_STICK; merge = gtk_ui_manager_new (); g_signal_connect_swapped (GeomDlg, "destroy", G_CALLBACK (g_object_unref), merge); actionGroup = gtk_action_group_new ("GabeditPopupMenuGeomActions"); gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE); gtk_action_group_add_actions (actionGroup, gtkActionEntries, numberOfGtkActionEntries, NULL); set_init_gtkActionToggleEntries(); gtk_action_group_add_toggle_actions (actionGroup, gtkActionToggleEntries, numberOfGtkActionToggleEntries, NULL); if(getOperationType() == ROTATION) gtk_action_group_add_radio_actions (actionGroup, operationsEntries, numberOfOperationsEntries, OPERATION_ROTATION, G_CALLBACK (render_operation_radio_action), NULL); else gtk_action_group_add_radio_actions (actionGroup, operationsEntries, numberOfOperationsEntries, OPERATION_EDIT_OBJECTS, G_CALLBACK (render_operation_radio_action), NULL); initLabelOptions (LABELNO); gtk_action_group_add_radio_actions (actionGroup, labelEntries , numberOfLabelEntries, LABEL_NO, G_CALLBACK (render_label_radio_action), NULL); if(!stick_mode()) mode = GEOMETRY_BALLSTICK; gtk_action_group_add_radio_actions (actionGroup, rendereGeometryEntries, numberOfRenderGeometryEntries, mode, G_CALLBACK (render_geometry_radio_action), NULL); gtk_ui_manager_insert_action_group (merge, actionGroup, 0); g_signal_connect (merge, "add_widget", G_CALLBACK (add_widget), box); gtk_window_add_accel_group (GTK_WINDOW (GeomDlg), gtk_ui_manager_get_accel_group (merge)); if (!gtk_ui_manager_add_ui_from_string (merge, uiMenuInfo, -1, &error)) { g_message ("building menus failed: %s", error->message); g_error_free (error); } else { /* add_attach_functional_to_menu(merge); add_hydrocarbon_to_menu(merge); add_rings_to_menu(merge); add_drugs_to_menu(merge); add_miscellaneous_to_menu(merge); add_fullerene_to_menu(merge); */ } manager = merge; /* addGroupesToMenu(); addFragmentsToMenu(); */ } /*********************************************************************************************************************/ static void set_sensitive() { GtkWidget *saveAs = gtk_ui_manager_get_widget (manager, "/MenuGeom/SaveAs"); GtkWidget *deleteMolecule = gtk_ui_manager_get_widget (manager, "/MenuGeom/Edit/EditDeleteMolecule"); GtkWidget *deleteHydrogenAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Edit/EditDeleteHydrogenAtoms"); GtkWidget *deleteSelectedAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Edit/EditDeleteSelectedAtoms"); GtkWidget *moveSelectedAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Edit/EditMoveCenterOfSelectedAtomsToOrigin"); GtkWidget *alignSelectedAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Edit/EditAlignPrincipalAxesOfSelectedAtomsToXYZ"); GtkWidget *alignSelectedAndNotSelectedAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Edit/EditAlignSelectedAndNotSelectedAtoms"); GtkWidget *copySelectedAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Edit/EditCopySelectedAtoms"); GtkWidget *resetAllConnections = gtk_ui_manager_get_widget (manager, "/MenuGeom/Edit/EditResetAllConnections"); GtkWidget *resetMultipleConnections = gtk_ui_manager_get_widget (manager, "/MenuGeom/Edit/EditResetMultipleConnections"); GtkWidget *resetSelectedConnections = gtk_ui_manager_get_widget (manager, "/MenuGeom/Edit/EditResetConnectionsBetweenSelectedAtoms"); GtkWidget *resetSelectedAndNotSelectedConnections = gtk_ui_manager_get_widget (manager, "/MenuGeom/Edit/EditResetConnectionsBetweenSelectedAndNotSelectedAtoms"); GtkWidget *selectAllAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Selection/EditSelectAll"); GtkWidget *invertSelection = gtk_ui_manager_get_widget (manager, "/MenuGeom/Selection/EditInvertSelection"); GtkWidget *unSelectAll = gtk_ui_manager_get_widget (manager, "/MenuGeom/Selection/EditUnSelectAll"); GtkWidget *selectHighAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Selection/EditSelectHighAtoms"); GtkWidget *selectMediumAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Selection/EditSelectMediumAtoms"); GtkWidget *selectLowAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Selection/EditSelectLowAtoms"); GtkWidget *selectFixedAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Selection/EditSelectFixedAtoms"); GtkWidget *selectVariableAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Selection/EditSelectVariableAtoms"); GtkWidget *selectFirstResidue = gtk_ui_manager_get_widget (manager, "/MenuGeom/Selection/EditSelectFirstResidue"); GtkWidget *selectLastResidue = gtk_ui_manager_get_widget (manager, "/MenuGeom/Selection/EditSelectLastResidue"); GtkWidget *selectResidueByName = gtk_ui_manager_get_widget (manager, "/MenuGeom/Selection/EditSelectResidueByName"); GtkWidget *selectAtomsByType = gtk_ui_manager_get_widget (manager, "/MenuGeom/Selection/EditSelectAtomsByType"); GtkWidget *selectAtomsBySymbol = gtk_ui_manager_get_widget (manager, "/MenuGeom/Selection/EditSelectAtomsBySymbol"); GtkWidget *selectAtomsBySphere = gtk_ui_manager_get_widget (manager, "/MenuGeom/Selection/EditSelectAtomsBySphere"); GtkWidget *selectAtomsByPositiveCharges = gtk_ui_manager_get_widget (manager, "/MenuGeom/Selection/EditSelectAtomsByPositiveCharges"); GtkWidget *selectAtomsByNegativeCharges = gtk_ui_manager_get_widget (manager, "/MenuGeom/Selection/EditSelectAtomsByNegativeCharges"); GtkWidget *selectAtomsMultiple = gtk_ui_manager_get_widget (manager, "/MenuGeom/Selection/EditSelectAtomsMultiple"); GtkWidget *symmetry = gtk_ui_manager_get_widget (manager, "/MenuGeom/Symmetry"); GtkWidget *export = gtk_ui_manager_get_widget (manager, "/MenuGeom/Export"); GtkWidget *mm = gtk_ui_manager_get_widget (manager, "/MenuGeom/MolecularMechanics"); GtkWidget *sm = gtk_ui_manager_get_widget (manager, "/MenuGeom/SemiEmpirical"); GtkWidget *origMolecule = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetOriginToCenterOfMolecule"); GtkWidget *dipoleCharges = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetDipoleFormCharges"); GtkWidget *charges = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetChargesUsingPDBTemplate"); GtkWidget *type = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetAtomTypesUsingPDBTemplate"); GtkWidget *typeCharges = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetAtomTypeAndChargeUsingPDBTemplate"); GtkWidget *typeCalcul = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetAtomTypeCalcul"); GtkWidget *chargesZero = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetChargesToZero"); GtkWidget *origAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetOriginToCenterOfSelectedAtoms"); GtkWidget *pax = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetXYZToPAX"); GtkWidget *paz = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetXYZToPAZ"); GtkWidget *so = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetXYZToStandardOrientaion"); GtkWidget *sosns = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetXYZToStandardOrientaionSelectedAndNotSelected"); GtkWidget *layerHigh = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetSelectedAtomsToHighLayer"); GtkWidget *layerMedium = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetSelectedAtomsToMediumLayer"); GtkWidget *layerLow = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetSelectedAtomsToLowLayer"); GtkWidget *fixedAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetSelectedAtomsToFixed"); GtkWidget *variableAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetSelectedAtomsToVariable"); GtkWidget *setMMTypeOfselectedAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetMMTypeOfselectedAtoms"); GtkWidget *setPDBTypeOfselectedAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetPDBTypeOfselectedAtoms"); GtkWidget *setResidueNameOfselectedAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetResidueNameOfselectedAtoms"); GtkWidget *setChargeOfselectedAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/SetChargeOfselectedAtoms"); GtkWidget *scaleChargeOfselectedAtoms = gtk_ui_manager_get_widget (manager, "/MenuGeom/Set/ScaleChargeOfselectedAtoms"); GtkWidget *addPersonnalFragment = gtk_ui_manager_get_widget (manager, "/MenuGeom/Edit/PersonalFragments/PersonalFragmentsAddMolecule"); GtkWidget *removePersonnalFragment = gtk_ui_manager_get_widget (manager, "/MenuGeom/Edit/PersonalFragments/PersonalFragmentsRemoveFragment"); GtkWidget *removeAGroup = gtk_ui_manager_get_widget (manager, "/MenuGeom/Edit/PersonalFragments/PersonalFragmentsDeleteGroup"); gboolean sensitive = TRUE; if(Natoms<1) sensitive = FALSE; if(GTK_IS_WIDGET(saveAs)) gtk_widget_set_sensitive(saveAs, sensitive); if(GTK_IS_WIDGET(deleteHydrogenAtoms)) gtk_widget_set_sensitive(deleteHydrogenAtoms, sensitive); if(GTK_IS_WIDGET(deleteMolecule)) gtk_widget_set_sensitive(deleteMolecule, sensitive); if(GTK_IS_WIDGET(selectAllAtoms)) gtk_widget_set_sensitive(selectAllAtoms, sensitive); if(GTK_IS_WIDGET(selectHighAtoms)) gtk_widget_set_sensitive(selectHighAtoms, sensitive); if(GTK_IS_WIDGET(selectMediumAtoms)) gtk_widget_set_sensitive(selectMediumAtoms, sensitive); if(GTK_IS_WIDGET(selectLowAtoms)) gtk_widget_set_sensitive(selectLowAtoms, sensitive); if(GTK_IS_WIDGET(selectFixedAtoms)) gtk_widget_set_sensitive(selectFixedAtoms, sensitive); if(GTK_IS_WIDGET(selectVariableAtoms)) gtk_widget_set_sensitive(selectVariableAtoms, sensitive); if(GTK_IS_WIDGET(selectFirstResidue)) gtk_widget_set_sensitive(selectFirstResidue, sensitive); if(GTK_IS_WIDGET(selectLastResidue)) gtk_widget_set_sensitive(selectLastResidue, sensitive); if(GTK_IS_WIDGET(selectResidueByName)) gtk_widget_set_sensitive(selectResidueByName, sensitive); if(GTK_IS_WIDGET(selectAtomsByType)) gtk_widget_set_sensitive(selectAtomsByType, sensitive); if(GTK_IS_WIDGET(selectAtomsBySymbol)) gtk_widget_set_sensitive(selectAtomsBySymbol, sensitive); if(GTK_IS_WIDGET(selectAtomsBySphere)) gtk_widget_set_sensitive(selectAtomsBySphere, sensitive); if(GTK_IS_WIDGET(selectAtomsBySphere) && NFatoms<1) gtk_widget_set_sensitive(selectAtomsBySphere, FALSE); if(GTK_IS_WIDGET(selectAtomsByPositiveCharges)) gtk_widget_set_sensitive(selectAtomsByPositiveCharges, sensitive); if(GTK_IS_WIDGET(selectAtomsByNegativeCharges)) gtk_widget_set_sensitive(selectAtomsByNegativeCharges, sensitive); if(GTK_IS_WIDGET(selectAtomsMultiple)) gtk_widget_set_sensitive(selectAtomsMultiple, sensitive); if(GTK_IS_WIDGET(symmetry)) gtk_widget_set_sensitive(symmetry, sensitive); if(GTK_IS_WIDGET(export)) gtk_widget_set_sensitive(export, sensitive); if(GTK_IS_WIDGET(mm)) gtk_widget_set_sensitive(mm, sensitive); if(GTK_IS_WIDGET(sm)) gtk_widget_set_sensitive(sm, sensitive); if(GTK_IS_WIDGET(origMolecule)) gtk_widget_set_sensitive(origMolecule, sensitive); if(GTK_IS_WIDGET(dipoleCharges)) gtk_widget_set_sensitive(dipoleCharges, sensitive); if(GTK_IS_WIDGET(charges)) gtk_widget_set_sensitive(charges, sensitive); if(GTK_IS_WIDGET(type)) gtk_widget_set_sensitive(type, sensitive); if(GTK_IS_WIDGET(typeCharges)) gtk_widget_set_sensitive(typeCharges, sensitive); if(GTK_IS_WIDGET(typeCalcul)) gtk_widget_set_sensitive(typeCalcul, sensitive); if(GTK_IS_WIDGET(chargesZero)) gtk_widget_set_sensitive(chargesZero, sensitive); if(NFatoms<1) sensitive = FALSE; if(GTK_IS_WIDGET(origAtoms)) gtk_widget_set_sensitive(origAtoms, sensitive); if( getOperationType()!=SELECTFRAG && getOperationType()!=SELECTRESIDUE && getOperationType()!=SELECTOBJECTS )sensitive = FALSE; if(GTK_IS_WIDGET(deleteSelectedAtoms)) gtk_widget_set_sensitive(deleteSelectedAtoms, sensitive); if(GTK_IS_WIDGET(moveSelectedAtoms)) gtk_widget_set_sensitive(moveSelectedAtoms, sensitive); if(GTK_IS_WIDGET(alignSelectedAtoms)) gtk_widget_set_sensitive(alignSelectedAtoms, sensitive); if(GTK_IS_WIDGET(alignSelectedAndNotSelectedAtoms)) gtk_widget_set_sensitive(alignSelectedAndNotSelectedAtoms, sensitive); if(GTK_IS_WIDGET(copySelectedAtoms)) gtk_widget_set_sensitive(copySelectedAtoms, sensitive); if(GTK_IS_WIDGET(setMMTypeOfselectedAtoms)) gtk_widget_set_sensitive(setMMTypeOfselectedAtoms, sensitive); if(GTK_IS_WIDGET(setPDBTypeOfselectedAtoms)) gtk_widget_set_sensitive(setPDBTypeOfselectedAtoms, sensitive); if(GTK_IS_WIDGET(setResidueNameOfselectedAtoms)) gtk_widget_set_sensitive(setResidueNameOfselectedAtoms, sensitive); if(GTK_IS_WIDGET(setChargeOfselectedAtoms)) gtk_widget_set_sensitive(setChargeOfselectedAtoms, sensitive); if(GTK_IS_WIDGET(scaleChargeOfselectedAtoms)) gtk_widget_set_sensitive(scaleChargeOfselectedAtoms, sensitive); if(GTK_IS_WIDGET(resetSelectedConnections)) gtk_widget_set_sensitive(resetSelectedConnections, sensitive); if(GTK_IS_WIDGET(resetSelectedAndNotSelectedConnections)) gtk_widget_set_sensitive(resetSelectedAndNotSelectedConnections, sensitive); sensitive = TRUE; if(Natoms<2) sensitive = FALSE; if(GTK_IS_WIDGET(resetAllConnections)) gtk_widget_set_sensitive(resetAllConnections, sensitive); if(GTK_IS_WIDGET(resetMultipleConnections)) gtk_widget_set_sensitive(resetMultipleConnections, sensitive); if(GTK_IS_WIDGET(so)) gtk_widget_set_sensitive(so, sensitive); if(NFatoms<2) sensitive = FALSE; if(GTK_IS_WIDGET(pax)) gtk_widget_set_sensitive(pax, sensitive); if(GTK_IS_WIDGET(paz)) gtk_widget_set_sensitive(paz, sensitive); if(GTK_IS_WIDGET(fixedAtoms)) gtk_widget_set_sensitive(fixedAtoms, sensitive); if(GTK_IS_WIDGET(variableAtoms)) gtk_widget_set_sensitive(variableAtoms, sensitive); sensitive = TRUE; if(Natoms<1) sensitive = FALSE; if(NFatoms<1) sensitive = FALSE; if(GTK_IS_WIDGET(layerHigh)) gtk_widget_set_sensitive(layerHigh, sensitive); if(GTK_IS_WIDGET(invertSelection)) gtk_widget_set_sensitive(invertSelection, sensitive); if(GTK_IS_WIDGET(unSelectAll)) gtk_widget_set_sensitive(unSelectAll, sensitive); if(GTK_IS_WIDGET(sosns)) gtk_widget_set_sensitive(sosns, sensitive); if(Natoms<2) sensitive = FALSE; if(GTK_IS_WIDGET(layerMedium)) gtk_widget_set_sensitive(layerMedium, sensitive); if(GTK_IS_WIDGET(layerLow)) gtk_widget_set_sensitive(layerLow, sensitive); sensitive = TRUE; if(getNumberOfGroups()<1) sensitive = FALSE; if(GTK_IS_WIDGET(addPersonnalFragment)) gtk_widget_set_sensitive(addPersonnalFragment, sensitive); if(GTK_IS_WIDGET(removePersonnalFragment)) gtk_widget_set_sensitive(removePersonnalFragment, sensitive); if(GTK_IS_WIDGET(removeAGroup)) gtk_widget_set_sensitive(removeAGroup, sensitive); } /*********************************************************************************************************************/ gboolean popup_menu_geom(guint button, guint32 time) { GtkWidget *menu = gtk_ui_manager_get_widget (manager, "/MenuGeom"); if (GTK_IS_MENU (menu)) { set_sensitive(); gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, time); return TRUE; } else printf(_("Error menu is not a menu\n")); return FALSE; } /*******************************************************************************************************************************/ /* static void free_id_list(GObject* win, gchar* groupName) { GSList* listOfId = NULL; if(!G_IS_OBJECT(manager)) return; listOfId = g_object_get_data(G_OBJECT(manager),groupName); if(!listOfId) return; g_slist_free(listOfId); } void add_a_personal_group_to_menu(gchar* groupName) { guint merge_id; GtkActionGroup *dag = NULL; GtkActionEntry *actionEntry; gchar* name; gchar* label; gchar* tmp; gchar* dagName = g_strdup_printf("PersonalFragmentsActions%s", groupName); GSList* listOfId = g_slist_alloc(); if(!manager) return; merge_id = gtk_ui_manager_new_merge_id (GTK_UI_MANAGER (manager)); dag = gtk_action_group_new (dagName); gtk_action_group_set_translation_domain(dag,GETTEXT_PACKAGE); gtk_ui_manager_insert_action_group (manager, dag, 0); g_signal_connect_swapped (GeomDlg, "destroy", G_CALLBACK (g_object_unref), dag); g_signal_connect(GeomDlg, "destroy", G_CALLBACK (free_id_list), groupName); name = g_strdup_printf("%s", groupName); label = g_strdup_printf ("%s", groupName); actionEntry = g_malloc(sizeof(GtkActionEntry)); actionEntry->name = name; actionEntry->stock_id = NULL; actionEntry->label = label; actionEntry->accelerator = NULL; actionEntry->tooltip = NULL; actionEntry->callback = NULL; gtk_action_group_add_actions (dag, actionEntry, 1, NULL); tmp = g_strdup_printf("/MenuGeom/Edit/PersonalFragments"); gtk_ui_manager_add_ui(GTK_UI_MANAGER (manager), merge_id, tmp, groupName, groupName, GTK_UI_MANAGER_MENU, FALSE); g_free(tmp); listOfId = g_slist_prepend(listOfId, GUINT_TO_POINTER(merge_id)); g_object_set_data(G_OBJECT(manager),groupName,listOfId); g_object_set_data(G_OBJECT(manager),dagName,dag); g_free(dagName); gtk_ui_manager_ensure_update (manager); } void delete_a_personal_group_from_menu(gchar* groupName) { GSList* listOfId = NULL; gchar* dagName = NULL; GtkActionGroup *dag = NULL; guint merge_id; GSList* list = NULL; if(!manager) return; listOfId = g_object_get_data(G_OBJECT(manager),groupName); if(!listOfId) return; dagName = g_strdup_printf("PersonalFragmentsActions%s", groupName); dag = g_object_get_data(G_OBJECT(manager), dagName); g_free(dagName); list = listOfId; while(list != NULL) { merge_id = GPOINTER_TO_INT(list->data); if(merge_id != 0) gtk_ui_manager_remove_ui(GTK_UI_MANAGER (manager), merge_id); list = list->next; } if(dag) { gtk_ui_manager_remove_action_group (GTK_UI_MANAGER (manager), dag); } gtk_ui_manager_ensure_update (manager); } static void activate_add_personal_fragment (GtkAction *action, gpointer data) { gchar* nameFrag = NULL; if(data) nameFrag = (gchar*) data; if(nameFrag) { addPersonalFragment(nameFrag, 0, NULL); } } void add_a_personnal_fragement_to_menu(gchar* groupName,gchar* fragName) { const gchar* menuBase = "Edit/PersonalFragments"; guint merge_id; static GtkActionGroup *dag = NULL; GtkActionEntry *actionEntry; GtkAction *action; gchar* name; gchar* label; gchar* data; GList* listOfActions = NULL; GList* list = NULL; gint i; gchar* tmp; GSList* listOfId = NULL; if(!manager) return; merge_id = gtk_ui_manager_new_merge_id (GTK_UI_MANAGER (manager)); if(!dag) { dag = gtk_action_group_new ("FragmentsActions"); gtk_action_group_set_translation_domain(dag,GETTEXT_PACKAGE); gtk_ui_manager_insert_action_group (manager, dag, 0); g_signal_connect (GeomDlg, "destroy", G_CALLBACK (delete_dag), &dag); } listOfActions = gtk_action_group_list_actions(dag); i = 0; list = listOfActions; tmp = g_strdup_printf("%s%s", groupName, fragName); while(list != NULL) { G_CONST_RETURN gchar* nameAction; action = (GtkAction *)(list->data); if(!GTK_IS_ACTION(action)) break; nameAction = gtk_action_get_name(GTK_ACTION(action)); if(strstr(nameAction,tmp)) i++; list = list->next; } g_free(tmp); if(i==0) { name = g_strdup_printf("%s%s", groupName, fragName); label = g_strdup_printf ("%s", fragName); data = g_strdup_printf("%s/%s", groupName, fragName); } else { name = g_strdup_printf("%s%s%d", groupName, fragName,i); label = g_strdup_printf ("%s%d", fragName,i); data = g_strdup_printf("%s/%s%d", groupName, fragName,i); } actionEntry = g_malloc(sizeof(GtkActionEntry)); actionEntry->name = name; actionEntry->stock_id = NULL; actionEntry->label = label; actionEntry->accelerator = NULL; actionEntry->tooltip = NULL; actionEntry->callback = G_CALLBACK(activate_add_personal_fragment); gtk_action_group_add_actions (dag, actionEntry, 1, data); tmp = g_strdup_printf("/MenuGeom/%s/%s", menuBase, groupName); gtk_ui_manager_add_ui(GTK_UI_MANAGER (manager), merge_id, tmp, name, name, GTK_UI_MANAGER_MENUITEM, TRUE); g_free(tmp); listOfId = g_object_get_data(G_OBJECT(manager),groupName); if(listOfId) { listOfId = g_slist_prepend(listOfId, GUINT_TO_POINTER(merge_id)); g_object_set_data(G_OBJECT(manager),groupName,listOfId); } g_object_set_data(G_OBJECT(manager),name,GUINT_TO_POINTER(merge_id)); gtk_ui_manager_ensure_update (manager); } void delete_a_personal_fragment_from_menu(gchar* groupName,gchar* fragName) { GSList* listOfId = NULL; guint merge_id; GSList* list = NULL; gpointer id; guint myId; gchar* name = NULL; if(!manager) return; name = g_strdup_printf("%s%s", groupName, fragName); id = g_object_get_data(G_OBJECT(manager),name); g_free(name); if(!id) return; myId = GPOINTER_TO_INT(id); if(myId == 0) return; listOfId = g_object_get_data(G_OBJECT(manager),groupName); if(!listOfId) return; list = listOfId; while(list != NULL) { merge_id = GPOINTER_TO_INT(list->data); if(merge_id != 0 && merge_id == myId ) list->data = 0; list = list->next; } gtk_ui_manager_remove_ui(GTK_UI_MANAGER (manager), myId); gtk_ui_manager_ensure_update (manager); } */ GabeditSrc250/src/Geometry/OpenBabel.h0000644000175100017510000000026613130665226020062 0ustar alloucheallouche #ifndef __GABEDIT_BABEL_H__ #define __GABEDIT_BABEL_H__ void create_babel_dialogue(); GtkWidget* create_babel_read_save_dialogue(gboolean read); #endif /* __GABEDIT_BABEL_H__ */ GabeditSrc250/src/Geometry/EnergiesCurves.c0000644000175100017510000007017113130665226021161 0ustar alloucheallouche/* EnergiesCurve.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "ResultsAnalise.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/GeomGlobal.h" #include "../Utils/AtomsProp.h" #include "../Utils/Utils.h" #include "../Geometry/EnergiesCurves.h" #include "../Geometry/GeomXYZ.h" #include "../Common/Windows.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #define Nmax 10 gboolean DrawEnergies(GtkWidget *dessin,GdkEventConfigure *ev); gboolean grille(GtkWidget *dessin,GdkEventConfigure *ev); void set_point(GtkWidget *widget, gint x,gint y, gint k); gint get_coord(gint len,gdouble min, gdouble max,gdouble v,gboolean renv); void get_coord_ecran(GtkWidget *widget,gint *tabx,gint *taby); static void set_geom(GtkWidget *widget,gpointer data); /********************************************************************************************/ static void draw_geom(GtkWidget *widget,gpointer data) { if(GeomDrawingArea==NULL) create_window_drawing(); else { rafresh_drawing(); } } /********************************************************************************************/ static void set_geom(GtkWidget *widget,gpointer data) { DataGeomConv *GeomConv = (DataGeomConv*)(g_object_get_data(G_OBJECT(widget),"Geometry")); gint *ki; gint k; ki = (gint*)(g_object_get_data(G_OBJECT(widget),"Point")); k = *ki; if(GeomConv->fileType == GABEDIT_TYPEFILE_DALTON) read_geom_conv_from_dalton_output_file(GeomConv->GeomFile,GeomConv->NumGeom[k]); if(GeomConv->fileType == GABEDIT_TYPEFILE_GAMESS) read_geom_conv_from_gamess_output_file(GeomConv->GeomFile,GeomConv->NumGeom[k]); if(GeomConv->fileType == GABEDIT_TYPEFILE_GAMESSIRC) read_geom_from_gamess_irc_file(GeomConv->GeomFile,GeomConv->NumGeom[k]); if(GeomConv->fileType == GABEDIT_TYPEFILE_GAUSSIAN) read_geom_from_gaussian_file(GeomConv->GeomFile,GeomConv->NumGeom[k]); if(GeomConv->fileType == GABEDIT_TYPEFILE_MOLPRO) read_geom_from_molpro_file(GeomConv->GeomFile,GeomConv->NumGeom[k]); if(GeomConv->fileType == GABEDIT_TYPEFILE_QCHEM) read_geom_from_qchem_file(GeomConv->GeomFile,GeomConv->NumGeom[k]); if(GeomConv->fileType == GABEDIT_TYPEFILE_NWCHEM) read_geom_from_nwchem_file(GeomConv->GeomFile,GeomConv->NumGeom[k]); if(GeomConv->fileType == GABEDIT_TYPEFILE_PSICODE) read_geom_from_psicode_file(GeomConv->GeomFile,GeomConv->NumGeom[k]); if(GeomConv->fileType == GABEDIT_TYPEFILE_ORCA) read_geom_from_orca_file(GeomConv->GeomFile,GeomConv->NumGeom[k]); if(GeomConv->fileType == GABEDIT_TYPEFILE_VASPOUTCAR) read_geom_from_vasp_file(GeomConv->GeomFile,GeomConv->NumGeom[k]); if(GeomConv->fileType == GABEDIT_TYPEFILE_MOLDEN) read_geom_from_molden_geom_conv_file(GeomConv->GeomFile,GeomConv->NumGeom[k]); if(GeomConv->fileType == GABEDIT_TYPEFILE_GABEDIT) read_geom_from_gabedit_geom_conv_file(GeomConv->GeomFile,GeomConv->NumGeom[k]); if(GeomConv->fileType == GABEDIT_TYPEFILE_MPQC) read_geom_from_mpqc_output_file(GeomConv->GeomFile,GeomConv->NumGeom[k]); if(GeomConv->fileType == GABEDIT_TYPEFILE_MOPAC) read_geom_from_mopac_aux_file(GeomConv->GeomFile,GeomConv->NumGeom[k]); if(GeomConv->fileType == GABEDIT_TYPEFILE_MOPAC_SCAN) read_geom_from_mopac_scan_output_file(GeomConv->GeomFile,GeomConv->NumGeom[k]); if(GeomConv->fileType == GABEDIT_TYPEFILE_MOPAC_IRC) read_geom_from_mopac_irc_output_file(GeomConv->GeomFile,GeomConv->NumGeom[k]); if(GeomConv->fileType == GABEDIT_TYPEFILE_XYZ) read_geom_from_xyz_file(GeomConv->GeomFile,GeomConv->NumGeom[k]); if(GeomConv->fileType == GABEDIT_TYPEFILE_VASPXML) read_geom_from_vasp_xml_file(GeomConv->GeomFile,GeomConv->NumGeom[k]); } /********************************************************************************************/ static void set_default_point(GtkWidget *widget) { DataGeomConv *GeomConv; gint *tabx; gint* taby; gint *k; GeomConv = (DataGeomConv*)(g_object_get_data(G_OBJECT(widget),"Geometry")); tabx = g_malloc(GeomConv->Npoint*sizeof(gint)); taby = g_malloc(GeomConv->Npoint*sizeof(gint)); k = (gint*)(g_object_get_data(G_OBJECT(widget),"Point")); get_coord_ecran(widget,tabx,taby); set_point(widget,tabx[*k],taby[*k],*k); g_free(tabx); g_free(taby); } /********************************************************************************************/ /* Création d'un nouveau pixmap d'arrière-plan de la taille voulue */ static gint configure_event (GtkWidget *widget, GdkEventConfigure *event) { GdkColor couleur; GdkColormap *colormap; GdkGC *gc; GdkPixmap *pixmap = NULL; colormap=gdk_drawable_get_colormap(widget->window); /* couleur.red=(gushort)(0.85*65535); couleur.green=(gushort)(0.85*65535); couleur.blue=(gushort)(0.85*65535); */ couleur.red=(gushort)(0); couleur.green=(gushort)(0); couleur.blue=(gushort)(0); gdk_colormap_alloc_color(colormap, &couleur, FALSE, TRUE); /* pixmapold = (GdkPixmap*)(g_object_get_data(G_OBJECT(widget),"Pixmap")); if (pixmapold) { g_object_unref(pixmapold); } */ gc = gdk_gc_new(widget->window); gdk_gc_set_foreground(gc,&couleur); pixmap = gdk_pixmap_new(widget->window, widget->allocation.width, widget->allocation.height, -1); g_object_set_data_full(G_OBJECT (widget), "Pixmap", pixmap, (GDestroyNotify) g_object_unref); gdk_draw_rectangle ( pixmap, gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height); g_object_unref(gc); grille(widget,event); DrawEnergies(widget,event); return TRUE; } /********************************************************************************************/ static gint expose_event (GtkWidget *widget, GdkEventExpose *event) { GdkPixmap *pixmap = (GdkPixmap*)(g_object_get_data(G_OBJECT(widget),"Pixmap")); gdk_draw_drawable(widget->window, widget->style->fg_gc[GTK_WIDGET_STATE (widget)], pixmap, event->area.x, event->area.y, event->area.x, event->area.y, event->area.width, event->area.height); set_default_point(widget); return FALSE; } /********************************************************************************************/ void set_point(GtkWidget *widget, gint x,gint y, gint k) { GdkPixmap *pixmap = (GdkPixmap*)(g_object_get_data(G_OBJECT(widget),"Pixmap")); GtkWidget* Label; DataGeomConv *GeomConv; GdkColor couleur; GdkColormap *colormap; GdkGC *gc; gchar *t; gint *ki; gint rayon = 10; gint i; gdk_draw_drawable(widget->window, widget->style->fg_gc[GTK_WIDGET_STATE (widget)], pixmap, 0,0, 0,0, widget->allocation.width,widget->allocation.height); colormap=gdk_drawable_get_colormap(widget->window); gc = gdk_gc_new(widget->window); couleur.red=0; couleur.green=65535; couleur.blue=0; gdk_colormap_alloc_color(colormap, &couleur, FALSE, TRUE); gdk_gc_set_foreground(gc,&couleur); gdk_gc_set_line_attributes(gc,1,GDK_LINE_SOLID,GDK_CAP_BUTT,GDK_JOIN_MITER); GeomConv = (DataGeomConv*)(g_object_get_data(G_OBJECT(widget),"Geometry")); t = g_strdup(GeomConv->Data[0][k]); Label = GTK_WIDGET(g_object_get_data(G_OBJECT(widget),GeomConv->TypeData[0])); gtk_label_set_text(GTK_LABEL(Label),t); if(GeomConv->Npoint>1) { for(i=1;iNtype;i++) { t = g_strdup(GeomConv->Data[i][k]); Label = GTK_WIDGET(g_object_get_data(G_OBJECT(widget),GeomConv->TypeData[i])); gtk_label_set_text(GTK_LABEL(Label),t); } } gdk_draw_arc(widget->window,gc,FALSE,x-rayon,y-rayon,2*rayon,2*rayon,0,380*64); ki = (gint*)(g_object_get_data(G_OBJECT(widget),"Point")); *ki = k; g_object_unref(gc); } /********************************************************************************************/ gint get_coord(gint len,gdouble min, gdouble max,gdouble v,gboolean renv) { gint imin = len/20; gint pasi = (len-2*imin)/10; gint imax= imin+10*pasi; gint i; if(renv) imax= imin+10*pasi-pasi/2; if(max-min>1e-8) i = (imax-imin)/(max-min)*(v-min)+imin; else { if(renv) i = imax; else i = imin; } if(renv) i = imax+imin-i; return i; } /********************************************************************************************/ void get_coord_ecran(GtkWidget *widget,gint *tabx,gint *taby) { DataGeomConv *GeomConv; gdouble *tab; gdouble ymin,ymax; int i; GeomConv = (DataGeomConv*)(g_object_get_data(G_OBJECT(widget),"Geometry")); tab = g_malloc(GeomConv->Npoint*sizeof(gdouble) ); for( i = 0;iNpoint;i++) tab[i] = atof(GeomConv->Data[0][i]); ymin = tab[0]; ymax = tab[0]; for( i = 1;iNpoint;i++) { if( tab[i]ymax) ymax= tab[i]; } for( i = 0;iNpoint;i++) tabx[i] = get_coord(widget->allocation.width, 1.0,(gdouble)GeomConv->Npoint,(gdouble)(i+1),FALSE); for( i = 0;iNpoint;i++) taby[i] = get_coord(widget->allocation.height, ymin,ymax,tab[i],TRUE); /* printf("Npoint = %d\n",GeomConv->Npoint); for( i = 0;iNpoint;i++) printf("(%d,%d) ; %f\n",tabx[i],taby[i],tab[i]); */ g_free(tab) ; } /********************************************************************************************/ gboolean grille(GtkWidget *dessin,GdkEventConfigure *ev) { GdkPixmap *pixmap = (GdkPixmap*)(g_object_get_data(G_OBJECT(dessin),"Pixmap")); GdkColor couleur; GdkColormap *colormap; GdkGC *gc; PangoFontDescription *font_desc = NULL; gint xmin = dessin->allocation.width/20; gint ymin = dessin->allocation.height/20; gint pasx = (dessin->allocation.width-2*xmin)/10; gint pasy = (dessin->allocation.height-2*ymin)/10; gint xmax= xmin+10*pasx; gint ymax= ymin+10*pasy; gint i; gchar *st; DataGeomConv *GeomConv; GeomConv = (DataGeomConv*)(g_object_get_data(G_OBJECT(dessin),"Geometry")); colormap=gdk_drawable_get_colormap(dessin->window); couleur.red=65535; couleur.green=0; couleur.blue=0; gdk_colormap_alloc_color(colormap, &couleur, FALSE, TRUE); gc = gdk_gc_new(dessin->window); gdk_gc_set_foreground(gc,&couleur); gdk_gc_set_line_attributes(gc,1,GDK_LINE_SOLID,GDK_CAP_PROJECTING,GDK_JOIN_MITER); for( i = xmin; i<=xmax;i+=pasx) gdk_draw_line(pixmap,gc,i,ymin,i,ymax); for( i = ymin; i<=ymax;i+=pasy) gdk_draw_line(pixmap,gc,xmin,i,xmax,i); /* couleur.red=0; couleur.green=0; couleur.blue=0; */ couleur.red=(gushort)(0.85*65535); couleur.green=(gushort)(0.85*65535); couleur.blue=(gushort)(0.85*65535); gdk_colormap_alloc_color(colormap, &couleur, FALSE, TRUE); gdk_gc_set_foreground(gc,&couleur); font_desc = pango_font_description_from_string ("times 12"); for( i = xmin; i<=xmax;i+=pasx) { st = g_strdup_printf("%4.1f", 1+((GeomConv->Npoint-1)/10.0)* ((i-xmin)/pasx) ); gabedit_draw_string(dessin, pixmap, font_desc, gc, i, ymax, st, TRUE, FALSE); g_free(st); } if(font_desc) pango_font_description_free (font_desc); if(GeomConv->Npoint==1) { font_desc = pango_font_description_from_string ("times 16"); st = g_strdup(_("Single point")); gabedit_draw_string(dessin, pixmap, font_desc, gc, dessin->allocation.width/2, dessin->allocation.height/2, st, TRUE, TRUE); g_free(st); if(font_desc) pango_font_description_free (font_desc); } if(GeomConv->TypeCalcul && !this_is_a_backspace(GeomConv->TypeCalcul)) { font_desc = pango_font_description_from_string ("times 14"); st = g_strdup_printf("%s", GeomConv->TypeCalcul); gabedit_draw_string(dessin, pixmap, font_desc, gc, dessin->allocation.width/2, ymin/2, st, TRUE, TRUE); g_free(st); if(font_desc) pango_font_description_free (font_desc); } g_object_unref(gc); return TRUE; } /********************************************************************************************/ gboolean DrawEnergies(GtkWidget *dessin,GdkEventConfigure *ev) { GdkPixmap *pixmap = (GdkPixmap*)(g_object_get_data(G_OBJECT(dessin),"Pixmap")); GdkColor couleur; GdkColormap *colormap; GdkGC *gc; DataGeomConv *GeomConv; gint *tabx; gint *taby; gint rayon = 6; int i; GeomConv = (DataGeomConv*)(g_object_get_data(G_OBJECT(dessin),"Geometry")); tabx = g_malloc(GeomConv->Npoint*sizeof(gint)); taby = g_malloc(GeomConv->Npoint*sizeof(gint)); get_coord_ecran(dessin,tabx,taby); colormap=gdk_drawable_get_colormap(dessin->window); gc = gdk_gc_new(dessin->window); couleur.red=0; couleur.green=0; couleur.blue=65535; gdk_colormap_alloc_color(colormap, &couleur, FALSE, TRUE); gdk_gc_set_foreground(gc,&couleur); gdk_gc_set_line_attributes(gc,2,GDK_LINE_SOLID,GDK_CAP_PROJECTING,GDK_JOIN_MITER); for( i = 0;iNpoint-1;i++) gdk_draw_line(pixmap,gc,tabx[i],taby[i], tabx[i+1],taby[i+1]); gdk_gc_set_fill(gc,GDK_SOLID); gdk_gc_set_line_attributes(gc,1,GDK_LINE_SOLID,GDK_CAP_PROJECTING,GDK_JOIN_MITER); couleur.red=(gushort)(0.9*65535); couleur.green=(gushort)(0.9*65535); couleur.blue=(gushort)(0.9*65535); gdk_colormap_alloc_color(colormap, &couleur, FALSE, TRUE); gdk_gc_set_foreground(gc,&couleur); for( i = 0;iNpoint;i++) gdk_draw_arc(pixmap,gc,TRUE,tabx[i]-rayon,taby[i]-rayon,2*rayon,2*rayon,0,380*64); g_object_unref(gc); g_free(tabx); g_free(taby); return TRUE; } /********************************************************************************/ static gint set_key_press(GtkWidget* wid, GdkEventKey *event, gpointer data) { GtkWidget *dessin = (GtkWidget*) data; gint *pk = NULL; gint k = 0; gint s = 0; DataGeomConv *GeomConv; gint* tabx = NULL; gint* taby = NULL; if(event->keyval == GDK_rightarrow ) s=1; else if(event->keyval == GDK_leftarrow ) s=-1; else if(event->keyval == GDK_downarrow ) s=2; else if(event->keyval == GDK_uparrow) s=-2; else if(event->keyval == GDK_n ) s=1; else if(event->keyval == GDK_N ) s=1; else if(event->keyval == GDK_p ) s=-1; else if(event->keyval == GDK_P ) s=-1; else if(event->keyval == GDK_f ) s=-2; else if(event->keyval == GDK_F ) s=-2; else if(event->keyval == GDK_l ) s=2; else if(event->keyval == GDK_L ) s=2; if(!dessin) return FALSE; pk = (gint*)(g_object_get_data(G_OBJECT(dessin),"Point")); if(!pk) return FALSE; k = *pk; GeomConv = (DataGeomConv*)(g_object_get_data(G_OBJECT(dessin),"Geometry")); if(!GeomConv) return FALSE; if(GeomConv->Npoint<1) return FALSE; tabx = g_malloc(GeomConv->Npoint*sizeof(gint)); taby = g_malloc(GeomConv->Npoint*sizeof(gint)); if(s==-2) k = 0; else if(s==2) k = GeomConv->Npoint-1; else if(s==1) k++; else if(s==-1) k--; if(k<0) k = 0; if(k>GeomConv->Npoint-1) k=GeomConv->Npoint-1; *pk = k; get_coord_ecran(dessin,tabx,taby); set_point(dessin,tabx[k],taby[k],k); set_geom(dessin,NULL); g_free(tabx); g_free(taby); GTK_WIDGET_GET_CLASS(wid)->key_press_event(wid, event); return TRUE; } /********************************************************************************************/ static gint button_press_event (GtkWidget *widget, GdkEventButton *event) { GdkPixmap *pixmap = (GdkPixmap*)(g_object_get_data(G_OBJECT(widget),"Pixmap")); gint *tabx; gint *taby; gint i,k; DataGeomConv *GeomConv; GeomConv = (DataGeomConv*)(g_object_get_data(G_OBJECT(widget),"Geometry")); tabx = g_malloc(GeomConv->Npoint*sizeof(gint)); taby = g_malloc(GeomConv->Npoint*sizeof(gint)); get_coord_ecran(widget,tabx,taby); k=0; for( i =0; iNpoint;i++) if( (event->x - tabx[i])*(event->x - tabx[i]) + (event->y - taby[i])*(event->y - taby[i]) < (event->x - tabx[k])*(event->x - tabx[k]) + (event->y - taby[k])*(event->y - taby[k]) ) k =i; if (event->button == 1 && pixmap != NULL) { set_point(widget,tabx[k],taby[k],k); set_geom(widget,NULL); } g_free(tabx); g_free(taby); return TRUE; } /********************************************************************************************/ static GtkWidget*add_label(gchar *tlabel,GtkWidget *vbox) { GtkWidget *Label; GtkWidget *Frame; Frame = gtk_frame_new (tlabel); gtk_frame_set_shadow_type( GTK_FRAME(Frame),GTK_SHADOW_ETCHED_OUT); g_object_ref (Frame); gtk_box_pack_start(GTK_BOX(vbox), Frame,FALSE,FALSE,0); gtk_widget_show (Frame); Label = gtk_label_new(" "); gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT); g_object_ref (Label); gtk_container_add (GTK_CONTAINER (Frame), Label); return Label; } /********************************************************************************************/ static void destroy_widget_null(GtkWidget *wid) { GtkWidget **pwid; DataGeomConv *GeomConv = (DataGeomConv *)g_object_get_data(G_OBJECT(wid),"GeometryPointer"); gint *k = (gint *)g_object_get_data(G_OBJECT(wid),"GeometryDim"); gint i; destroy_button_windows(wid); pwid = (GtkWidget**)(g_object_get_data(G_OBJECT(wid),"PointerWidget")); /* if(wid) gtk_widget_destroy(wid); */ *pwid = NULL; for(i=0;i<*k;i++) GeomConv[i] = free_geom_conv( GeomConv[i]); g_free(GeomConv); g_free(k); GeomConvIsOpen = FALSE; } /********************************************************************************************/ GtkWidget *add_energies_curve( GtkWidget *WindowEnergies, DataGeomConv* GeomConv,gboolean init) { GdkPixmap *pixmap = NULL; GtkWidget *dessin; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *Label; GtkWidget *Frame; GtkWidget *button; static GtkWidget *Hbox = NULL; GtkWidget *Vbox = (GtkWidget *)(g_object_get_data(G_OBJECT(WindowEnergies),"Vbox")); gint *N = (gint *)g_object_get_data(G_OBJECT(WindowEnergies),"GeometryDim"); gint *k; gint i; static gint j = 0; gchar *t; if(init) { Hbox = NULL; j = 0; } if(!GeomConv || GeomConv->Npoint < 1) { switch(GeomConv->fileType) { case GABEDIT_TYPEFILE_GAUSSIAN : Message(_("Sorry\n I can not read energies from your gaussian output file\n"),_("Error"),TRUE); break; case GABEDIT_TYPEFILE_MOLPRO : Message(_("Sorry\n I can not read energies from your molpro log file\n"),_("Error"),TRUE); break; case GABEDIT_TYPEFILE_QCHEM : Message(_("Sorry\n I can not read energies from your qchem output file\n"),_("Error"),TRUE); break; case GABEDIT_TYPEFILE_NWCHEM : Message(_("Sorry\n I can not read energies from your nwchem output file\n"),_("Error"),TRUE); break; case GABEDIT_TYPEFILE_PSICODE : Message(_("Sorry\n I can not read energies from your psicode output file\n"),_("Error"),TRUE); break; case GABEDIT_TYPEFILE_MOLDEN : Message(_("Sorry\n I can not read energies from your molden file\n"),_("Error"),TRUE); break; case GABEDIT_TYPEFILE_GABEDIT : Message(_("Sorry\n I can not read energies from your gabedit file\n"),_("Error"),TRUE); break; case GABEDIT_TYPEFILE_MPQC : Message(_("Sorry\n I can not read energies from your MPQC output file\n"),_("Error"),TRUE); break; case GABEDIT_TYPEFILE_XYZ : Message(_("Sorry\n I can not read your XYZ file\n"),_("Error"),TRUE); break; default : Message(_("Sorry\n I can not read energies\n"),_("Error"),TRUE); } } if(j%2 == 0) { Hbox = gtk_hbox_new (FALSE, 0); g_object_ref (Hbox); t = g_strdup_printf("Hbox%d",j); g_object_set_data_full(G_OBJECT (Vbox), t, Hbox,(GDestroyNotify) g_object_unref); g_free(t); gtk_widget_show (Hbox); gtk_box_pack_start(GTK_BOX(Vbox), Hbox,TRUE,TRUE,1); } j++; k = g_malloc(sizeof(gint)); *k = GeomConv->Npoint -1; if(*k<0) *k = 0; Frame = gtk_frame_new (GeomConv->TypeCalcul); gtk_frame_set_shadow_type( GTK_FRAME(Frame),GTK_SHADOW_ETCHED_OUT); g_object_ref (Frame); gtk_box_pack_start(GTK_BOX(Hbox), Frame,TRUE,TRUE,1); gtk_widget_show (Frame); hbox = gtk_hbox_new (FALSE, 0); g_object_ref (hbox); gtk_widget_show (hbox); gtk_container_add(GTK_CONTAINER(Frame),hbox); dessin=gtk_drawing_area_new(); gtk_widget_set_events (dessin, GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_CONTROL_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK); gtk_box_pack_start (GTK_BOX (hbox), dessin, TRUE, TRUE, 0); gtk_widget_set_size_request(GTK_WIDGET(dessin),ScreenWidth/6,ScreenHeight/(*N)/6); gtk_widget_realize (dessin); pixmap = gdk_pixmap_new(dessin->window, dessin->allocation.width, dessin->allocation.height, -1); g_object_set_data_full(G_OBJECT (dessin), "Pixmap", pixmap, (GDestroyNotify) g_object_unref); Frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(Frame),GTK_SHADOW_ETCHED_OUT); g_object_ref (Frame); g_object_set_data_full(G_OBJECT (WindowEnergies), "Frame", Frame,(GDestroyNotify) g_object_unref); gtk_box_pack_start(GTK_BOX(hbox), Frame,FALSE,FALSE,2); gtk_widget_show (Frame); vbox = gtk_vbox_new (FALSE, 0); g_object_ref (vbox); g_object_set_data_full(G_OBJECT (Frame), "vbox", vbox, (GDestroyNotify) g_object_unref); gtk_widget_show (vbox); gtk_container_add(GTK_CONTAINER (Frame), vbox); Label = add_label(GeomConv->TypeData[0],vbox); g_object_set_data_full(G_OBJECT (dessin),GeomConv->TypeData[0], Label, (GDestroyNotify) g_object_unref); if(GeomConv->Npoint > 1) { for(i=1;iNtype ;i++) { Label = add_label(GeomConv->TypeData[i],vbox); g_object_set_data_full(G_OBJECT (dessin), GeomConv->TypeData[i], Label, (GDestroyNotify) g_object_unref); } } button = create_button(WindowEnergies,"Close"); g_signal_connect_swapped(G_OBJECT(button),"clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(WindowEnergies)); gtk_box_pack_end(GTK_BOX(vbox), button,FALSE,FALSE,1); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); /* button = create_button(WindowEnergies,"Movie"); g_signal_connect_swapped(G_OBJECT(button),"clicked", (GCallback)movie_geom,GTK_OBJECT(dessin)); gtk_box_pack_end(GTK_BOX(vbox), button,FALSE,FALSE,1); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); */ button = create_button(WindowEnergies,"Draw"); g_signal_connect_swapped(G_OBJECT(button),"clicked", (GCallback)draw_geom,GTK_OBJECT(WindowEnergies)); gtk_box_pack_end(GTK_BOX(vbox), button,FALSE,FALSE,1); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_object_set_data(G_OBJECT (dessin), "Geometry", GeomConv); g_object_set_data_full(G_OBJECT (dessin), "Point", k, (GDestroyNotify) g_free); g_signal_connect(G_OBJECT (dessin),"button_press_event", (GCallback) button_press_event, NULL); g_signal_connect(G_OBJECT(dessin),"expose_event", (GCallback)expose_event,NULL); g_signal_connect(G_OBJECT(dessin),"configure_event", (GCallback)configure_event,NULL); g_signal_connect(G_OBJECT (WindowEnergies), "key_press_event", (GCallback) set_key_press, dessin); set_geom(dessin,NULL); return dessin; } /********************************************************************************************/ void create_energies_curves(DataGeomConv* GeomConv,gint N) { static GtkWidget *WindowEnergies=NULL; /* GtkWidget *dessin;*/ GtkWidget *Vbox; gchar *t; gint i; gint* k; if(!GeomConv) { return; } if(N < 1) { switch(GeomConv->fileType) { case GABEDIT_TYPEFILE_GAUSSIAN : Message(_("Sorry\n I can not read energies from your gaussian output file\n"),_("Error"),TRUE); break; case GABEDIT_TYPEFILE_MOLPRO : Message(_("Sorry\n I can not read energies from your molpro log file\n"),_("Error"),TRUE); break; case GABEDIT_TYPEFILE_QCHEM : Message(_("Sorry\n I can not read energies from your q-chem output file\n"),_("Error"),TRUE); break; case GABEDIT_TYPEFILE_NWCHEM : Message(_("Sorry\n I can not read energies from your nwchem output file\n"),_("Error"),TRUE); break; case GABEDIT_TYPEFILE_PSICODE : Message(_("Sorry\n I can not read energies from your psicode output file\n"),_("Error"),TRUE); break; case GABEDIT_TYPEFILE_MOLDEN : Message(_("Sorry\n I can not read energies from your molden file\n"),_("Error"),TRUE); break; case GABEDIT_TYPEFILE_GABEDIT : Message(_("Sorry\n I can not read energies from your gabedit file\n"),_("Error"),TRUE); break; case GABEDIT_TYPEFILE_MPQC : Message(_("Sorry\n I can not read energies from your MPQC output file\n"),_("Error"),TRUE); break; case GABEDIT_TYPEFILE_MOPAC : Message(_("Sorry\n I can not read energies from your Mopax aux file\n"),_("Error"),TRUE); break; case GABEDIT_TYPEFILE_XYZ : Message(_("Sorry\n I can not read your xyz file\n"),_("Error"),TRUE); break; default : Message(_("Sorry\n I can not read energies\n"),_("Error"),TRUE); } return; } k = g_malloc(sizeof(gint)); *k = N; if(WindowEnergies) { gtk_widget_destroy(WindowEnergies); } GeomConvIsOpen = TRUE; WindowEnergies = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_object_set_data(G_OBJECT (WindowEnergies), "PointerWidget",&WindowEnergies); gtk_container_set_border_width(GTK_CONTAINER(WindowEnergies),0); t = g_strdup_printf(_("Geometry convergence from file : %s"),GeomConv->GeomFile); gtk_window_set_title(GTK_WINDOW(WindowEnergies),t); g_free(t); g_signal_connect(G_OBJECT(WindowEnergies),"delete_event", (GCallback)gtk_widget_destroy,NULL); g_signal_connect(G_OBJECT(WindowEnergies),"destroy", (GCallback)destroy_widget_null,NULL); Vbox = gtk_vbox_new (FALSE, 0); g_object_ref (Vbox); gtk_widget_show (Vbox); gtk_container_add(GTK_CONTAINER(WindowEnergies),Vbox); g_object_set_data_full(G_OBJECT (WindowEnergies), "Vbox", Vbox,(GDestroyNotify) g_object_unref); gtk_widget_realize (WindowEnergies); g_object_set_data(G_OBJECT (WindowEnergies), "GeometryPointer",GeomConv); g_object_set_data(G_OBJECT (WindowEnergies), "GeometryDim",k); add_energies_curve(WindowEnergies,&GeomConv[0],TRUE); for(i=1;i #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/PovrayUtils.h" #include "../Utils/AtomsProp.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/Measure.h" #include "../Geometry/Povray.h" #include "../Common/Windows.h" #include "../Utils/Transformation.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/GeomZmatrix.h" #include "../Geometry/GeomSymmetry.h" #include "../Files/FileChooser.h" #include "../Geometry/ImagesGeom.h" #include "../Geometry/Fragments.h" #include "../Geometry/FragmentsPPD.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/RotFragments.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/PersonalFragments.h" #include "../Geometry/ResultsAnalise.h" #include "../Utils/HydrogenBond.h" #include "../MolecularMechanics/PDBTemplate.h" #include "../MolecularMechanics/CalculTypesAmber.h" #include "../Symmetry/MoleculeSymmetryInterface.h" #include "../Utils/Jacobi.h" #include "../Utils/Vector3d.h" #include "../Utils/GabeditTextEdit.h" #include "../Utils/UtilsCairo.h" #include "../Geometry/MenuToolBarGeom.h" #include "../Geometry/PreviewGeom.h" #include "../Geometry/FragmentsSelector.h" #include "../Geometry/SelectionDlg.h" #include "../IsotopeDistribution/IsotopeDistributionCalculatorDlg.h" #include "../Geometry/TreeMolecule.h" /********************************************************************************/ #define MAT 30 #define SCALE(i) (i / 65535.) /********************************************************************************/ static gdouble Quat[4] = {0.0,0.0,0.0,1.0}; static gdouble QuatFrag[4] = {0.0,0.0,0.0,1.0}; static gdouble QuatAtom[4] = {0.0,0.0,0.0,1.0}; static gdouble Orig[3] = {0.0,0.0,0.0}; static gdouble BeginX = 0; static gdouble BeginY = 0; static Camera camera = { 10,5}; static gdouble CSselectedAtom[3] = {0.0,0.0,0.0}; static gint NumSelectedAtom = -1; static gint NumProcheAtom = -1; static gboolean ButtonPressed = FALSE; static gboolean ShiftKeyPressed = FALSE; static gboolean ControlKeyPressed = FALSE; static gboolean FKeyPressed = FALSE; static gboolean GKeyPressed = FALSE; gchar* strToDraw = NULL; static gdouble minDistanceH = 1.50; /* in Agnstrom */ static gdouble maxDistanceH = 3.15; /* in Agnstrom */ static gdouble minAngleH = 145.0; static gdouble maxAngleH = 215.0; static gboolean showMultipleBonds = TRUE; static gboolean CartoonMode = TRUE; static gboolean ShowHydrogenAtoms = TRUE; static gboolean AdjustHydrogenAtoms = TRUE; static gboolean RebuildConnectionsDuringEdition = FALSE; static gint NumBatoms[2] = {-1,-1}; static gint NBatoms = 0; static gint atomToDelete = -1; static gint atomToBondTo = -1; static gint angleTo = -1; static gdouble fragAngle = 180.0; static gdouble factor = 1.0; static gdouble factorstick = 1.0; static gdouble factorball = 1.0; static gdouble factordipole = 1.0; static gboolean buttonpress = FALSE; static GabEditTypeGeom TypeGeom = GABEDIT_TYPEGEOM_STICK; /********************************************************************************/ void set_statubar_pop_sel_atom(); void calcul_ndipole(); void redefine_dipole(); void drawGeom_dipole(); GtkWidget *AddNoteBookPage(GtkWidget *NoteBook,char *label); void drawGeom(); void destroy_all_drawing(GtkWidget *win); void ActivateButtonOperation (GtkWidget *widget, guint data); void delete_selected_atoms(); void delete_selected_bond(); void change_selected_bond(); void add_bond(); gint unselected_atom(GdkEventButton *bevent); static gint insert_atom(GdkEventButton *event); static gint insert_fragment(GtkWidget *widget,GdkEvent *event); void define_good_factor(); void set_optimal_geom_view(); void define_coefs_pers(); gboolean if_selected(gint Num); gint index_selected(gint Num); void sort_with_zaxis(); void define_geometry(); void buildRotation(); void deleteHydrogensConnectedTo(gint n, gint nH); void delete_one_atom(gint NumDel); static gint replace_atom(); /********************************************************************************/ static GdkGC* gc=NULL; static GdkColor* BackColor=NULL; static GdkPixmap *pixmap = NULL; static cairo_t *cr = NULL; static GtkWidget *NoteBookDraw; static GtkWidget *vboxmeasure; static gdouble TCOS[91],TSIN[91]; static gdouble CenterCoor[2]; static GtkWidget *vboxhandle; static GtkWidget *StatusRotation = NULL; static GtkWidget *StatusPopup = NULL; static GtkWidget *StatusOperation = NULL; static guint idStatusRotation = 0; static guint idStatusPopup = 0; static guint idStatusOperation = 0; static GabEditGeomOperation OperationType = ROTATION; static GabEditSelectType SelectType = RECTANGLE; guint LabelOption = LABELNO; static Fragment Frag = {0,NULL}; static cairo_t *crExport = NULL; static GList* fifoGeometries = NULL; static GList* currentFifoGeometries = NULL; static gboolean oldNext = FALSE; /**********************************************************************************/ static void stop_calcul(GtkWidget *wi, gpointer data); void delete_all_selected_atoms(); static void reset_connections_between_selected_atoms(); static void reset_connections_between_selected_and_notselected_atoms(); /*********************************************************************************************/ gboolean testShowBoxGeom() { return FALSE; } /*********************************************************************************************/ void getQuatGeom(gdouble q[]) { gint i; /*for(i=0;i<4;i++) q[i] = Quat[i];*/ for(i=0;i<4;i++) q[i] = 0.0; } /*********************************************************************************************/ void reset_origine_molecule_drawgeom() { Orig[0] = 0.0; Orig[1] = 0.0; Orig[2] = 0.0; } /*********************************************************************************************/ void get_origine_molecule_drawgeom(gdouble orig[]) { orig[0] = Orig[0]; orig[1] = Orig[1]; orig[2] = Orig[2]; } /**********************************************************************************/ static gchar* getFormulaOfTheMolecule() { gint i,j; gchar* formula = NULL; gchar* dum = NULL; gint *tag = NULL; if(Natoms<1) return formula; tag = g_malloc(Natoms*sizeof(gint)); if(!tag) return formula; for(i=0;iallocation.width; if(Rmaxallocation.height) Rmax = GeomDrawingArea->allocation.height; if(PersMode) Cmax = coordmaxmin.Cmax*camera.f/(camera.position); else Cmax = coordmaxmin.Cmax; orig[0] = TransX *2*Cmax/factor/Rmax; orig[1] = -TransY *2*Cmax/factor/Rmax; } /*********************************************************************************************/ void get_camera_values_drawgeom(gdouble* zn, gdouble* zf, gdouble* angle, gdouble* aspect, gboolean* persp) { gdouble width = 500; gdouble height = 500; if(GeomDrawingArea) { width = GeomDrawingArea->allocation.width; height = GeomDrawingArea->allocation.height; } *aspect = width/height; if(PersMode) { *zf = camera.position; *zn = camera.f; *angle = 45.0*1.2/factor; if(*angle>=180) *angle = 160; } else { gdouble Cmax = coordmaxmin.Cmax; gdouble Rmax = GeomDrawingArea->allocation.width; if(Rmaxallocation.height) Rmax = GeomDrawingArea->allocation.height; *zf = Cmax*Rmax; *zn = 10; *angle = *aspect/factor*45*36*(Cmax/Rmax); if(*angle>=180) *angle = 160; } *persp = PersMode; } /**********************************************************************************/ static void free_geometries_from_current_to_end() { if( !fifoGeometries) return; if( !currentFifoGeometries) return; if( g_list_last(fifoGeometries) == currentFifoGeometries) return; if( fifoGeometries && currentFifoGeometries) { GList* list; if(currentFifoGeometries) for(list=currentFifoGeometries;list!=NULL;list=list->next) { GeomDraw* geom = NULL; geom = (GeomDraw*)list->data; if(geom && geom->atoms ) Free_One_Geom(geom->atoms,geom->nAtoms); list->data = NULL; } if(currentFifoGeometries->prev) currentFifoGeometries->prev->next = NULL; else fifoGeometries = NULL; g_list_free(currentFifoGeometries); currentFifoGeometries = g_list_last(fifoGeometries); } } /**********************************************************************************/ void add_geometry_to_fifo() { gint i,j; GeomDraw* geom = g_malloc(sizeof(GeomDraw)); geom->nAtoms = Natoms; if(Natoms>0) geom->atoms = g_malloc(Natoms*sizeof(GeomDef)); else geom->atoms = NULL; for(i=0;iatoms[i].X = geometry0[i].X; geom->atoms[i].Y = geometry0[i].Y; geom->atoms[i].Z = geometry0[i].Z; geom->atoms[i].Xi = geometry0[i].Xi; geom->atoms[i].Yi = geometry0[i].Yi; geom->atoms[i].Prop = prop_atom_get(geometry0[i].Prop.symbol); geom->atoms[i].mmType = g_strdup(geometry0[i].mmType); geom->atoms[i].pdbType = g_strdup(geometry0[i].pdbType); geom->atoms[i].Residue = g_strdup(geometry0[i].Residue); geom->atoms[i].ResidueNumber = geometry0[i].ResidueNumber; geom->atoms[i].show = geometry0[i].show; geom->atoms[i].Charge = geometry0[i].Charge; geom->atoms[i].Layer = geometry0[i].Layer; geom->atoms[i].N = geometry0[i].N; geom->atoms[i].Variable = geometry0[i].Variable; geom->atoms[i].ColorAlloc = geometry0[i].ColorAlloc; geom->atoms[i].Rayon = geometry0[i].Rayon; geom->atoms[i].Coefpers = geometry0[i].Coefpers; if(geometry0[i].typeConnections) { geom->atoms[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;jatoms[i].typeConnections[j] = geometry0[i].typeConnections[j]; } else geom->atoms[i].typeConnections = NULL; } free_geometries_from_current_to_end(); fifoGeometries = g_list_append(fifoGeometries,geom); currentFifoGeometries = g_list_last(fifoGeometries); oldNext = FALSE; } /**********************************************************************************/ void get_geometry_from_fifo(gboolean toNext) { gint i,j; GeomDraw* geom = NULL; GList* list = NULL; if(!fifoGeometries) return; if(!currentFifoGeometries) return; if(toNext) { GList* last = g_list_last(fifoGeometries); if(currentFifoGeometries == last) return; list = g_list_next(currentFifoGeometries); currentFifoGeometries = list; oldNext = TRUE; } else { if( !oldNext && currentFifoGeometries == g_list_last(fifoGeometries)) { add_geometry_to_fifo(); } if(g_list_previous(currentFifoGeometries)) currentFifoGeometries = g_list_previous(currentFifoGeometries); list = currentFifoGeometries; oldNext = FALSE; } geom = (GeomDraw*)list->data; if(!geom) return; geometry0 = Free_One_Geom(geometry0,Natoms); geometry = Free_One_Geom(geometry,Natoms); Natoms = geom->nAtoms; if(Natoms>0) { geometry0 = g_malloc(Natoms*sizeof(GeomDef)); geometry = g_malloc(Natoms*sizeof(GeomDef)); } for(i=0;iatoms[i].X; geometry0[i].Y = geom->atoms[i].Y; geometry0[i].Z = geom->atoms[i].Z; geometry0[i].Xi = geom->atoms[i].Xi; geometry0[i].Yi = geom->atoms[i].Yi; geometry0[i].Prop = prop_atom_get(geom->atoms[i].Prop.symbol); geometry0[i].mmType = g_strdup(geom->atoms[i].mmType); geometry0[i].pdbType = g_strdup(geom->atoms[i].pdbType); geometry0[i].Residue = g_strdup(geom->atoms[i].Residue); geometry0[i].ResidueNumber = geom->atoms[i].ResidueNumber; geometry0[i].show = geom->atoms[i].show; geometry0[i].Charge = geom->atoms[i].Charge; geometry0[i].Layer = geom->atoms[i].Layer; geometry0[i].N = geom->atoms[i].N; geometry0[i].Variable = geom->atoms[i].Variable; geometry0[i].ColorAlloc = geom->atoms[i].ColorAlloc; geometry0[i].Rayon = geom->atoms[i].Rayon; geometry0[i].Coefpers = geom->atoms[i].Coefpers; if(geom->atoms[i].typeConnections) { geometry0[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;jatoms[i].typeConnections[j]; } else { geometry0[i].typeConnections = NULL; } } for(i=0;iatoms[i].X; geometry[i].Y = geom->atoms[i].Y; geometry[i].Z = geom->atoms[i].Z; geometry[i].Xi = geom->atoms[i].Xi; geometry[i].Yi = geom->atoms[i].Yi; geometry[i].Prop = prop_atom_get(geom->atoms[i].Prop.symbol); geometry[i].mmType = g_strdup(geom->atoms[i].mmType); geometry[i].pdbType = g_strdup(geom->atoms[i].pdbType); geometry[i].Residue = g_strdup(geom->atoms[i].Residue); geometry[i].ResidueNumber = geom->atoms[i].ResidueNumber; geometry[i].show = geom->atoms[i].show; geometry[i].Charge = geom->atoms[i].Charge; geometry[i].Layer = geom->atoms[i].Layer; geometry[i].N = geom->atoms[i].N; geometry[i].Variable = geom->atoms[i].Variable; geometry[i].ColorAlloc = geom->atoms[i].ColorAlloc; geometry[i].Rayon = geom->atoms[i].Rayon; geometry[i].Coefpers = geom->atoms[i].Coefpers; if(geom->atoms[i].typeConnections) { geometry[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;jatoms[i].typeConnections[j]; } else { geometry[i].typeConnections = NULL; } } /* if(!fifoGeometries) printf("fifoGeometries is void\n");*/ change_of_center(NULL,NULL); create_GeomXYZ_from_draw_grometry(); } /**********************************************************************************/ static gint get_indice(gint n) { gint i; if(n<0) return n; for(i=0;i<(gint)Natoms;i++) if(geometry[i].N==n)return i; return -1; } /*****************************************************************************/ static gushort get_epaisseur() { gushort e; if(Natoms>0) e = (gushort)(7.0/1200*GeomDrawingArea->allocation.width*factorstick); else e = 3; if(e<3) e = 3; return e; } /*****************************************************************************/ static gushort get_rayon(gint i) { gushort rayon; if ( !stick_mode() && geometry[i].Layer != LOW_LAYER ) { rayon =(gushort)(0.8*geometry[i].Rayon*factorball); if (PersMode) rayon =(gushort)(geometry[i].Coefpers*geometry[i].Rayon*factorball); if(geometry[i].Layer == LOW_LAYER) rayon /= 6; if(geometry[i].Layer == MEDIUM_LAYER) rayon /= 2; } else rayon = get_epaisseur(); if(rayon<5) rayon = 5; return rayon; } /**********************************************************************************/ void create_drawmolecule_file() { gchar *drawMolecule; FILE *fd; drawMolecule = g_strdup_printf("%s%sdrawmolecule",gabedit_directory(),G_DIR_SEPARATOR_S); fd = FOpen(drawMolecule, "w"); if(fd !=NULL) { if(BackColor) fprintf(fd,"%d %d %d\n",BackColor->red, BackColor->green, BackColor->blue); else fprintf(fd,"0 0 0\n"); fprintf(fd,"%d\n",AdjustHydrogenAtoms); fprintf(fd,"%d\n",RebuildConnectionsDuringEdition); fprintf(fd,"%f\n",fragAngle); fprintf(fd,"%f\n",factorstick); fprintf(fd,"%f\n",factorball); fclose(fd); } g_free(drawMolecule); } /*************************************************************************************/ void read_drawmolecule_file() { gchar *drawMolecule; FILE *fd; gint r = 0; gint g = 0; gint b = 0; gint sh = 1; gint rc = 0; drawMolecule = g_strdup_printf("%s%sdrawmolecule",gabedit_directory(),G_DIR_SEPARATOR_S); fragAngle = 180; factor_stick_default(NULL,NULL); factor_ball_default(NULL,NULL); fd = fopen(drawMolecule, "rb"); if(fd !=NULL) { guint taille = BSIZE; gchar t[BSIZE]; if(fgets(t,taille,fd)) if(sscanf(t,"%d %d %d",&r, &g, &b)!=3) { printf("t=%s\n",t); r = 0; g = 0; b = 0; } if(fgets(t,taille,fd)) if(sscanf(t,"%d",&sh)!=1) sh = 1; if(fgets(t,taille,fd)) if(sscanf(t,"%d",&rc)!=1) rc = 0; if(fgets(t,taille,fd)) if(sscanf(t,"%lf",&fragAngle)!=1) fragAngle = 180; if(fgets(t,taille,fd)) if(sscanf(t,"%lf",&factorstick)!=1) factor_stick_default(NULL,NULL); if(fgets(t,taille,fd)) if(sscanf(t,"%lf",&factorball)!=1) factor_ball_default(NULL,NULL); fclose(fd); } g_free(drawMolecule); if(r==0 && g == 0 && b == 0) r = g = b = 20000; { BackColor = g_malloc(sizeof(GdkColor)); BackColor->red = r; BackColor->green = g; BackColor->blue = b; } AdjustHydrogenAtoms = (gboolean)sh; RebuildConnectionsDuringEdition = (gboolean)rc; } /*************************************************************************************/ GeomDef* copyGeometry(GeomDef* geom0) { gint i; GeomDef* geom = NULL; if(Natoms<1) return geom; geom =g_malloc(Natoms*sizeof(GeomDef)); for(i=0;i=Natoms || j>=Natoms ) return 0; if(!geometry[i].typeConnections)return 0; nj = geometry[j].N-1; if(geometry[i].typeConnections[nj]>0) return geometry[i].typeConnections[nj]; return 0; } /*****************************************************************************/ static void set_fix_variable_of_selected_atoms(gboolean variable) { gint i; for (i=0;i<(gint)Natoms;i++) { if(if_selected(i)) { geometry[i].Variable = variable; geometry0[i].Variable = variable; } } create_GeomXYZ_from_draw_grometry(); drawGeom(); } /*****************************************************************************/ void set_fix_selected_atoms() { gint i; gint nf=0; for (i=0;i<(gint)Natoms;i++) if(geometry[i].Variable) nf++; if(nf==0) { for (i=0;i<(gint)Natoms;i++) { geometry[i].Variable=TRUE; geometry0[i].Variable = TRUE; } } set_fix_variable_of_selected_atoms(FALSE); } /*****************************************************************************/ void set_variable_selected_atoms() { set_fix_variable_of_selected_atoms(TRUE); } /*****************************************************************************/ void hide_selected_atoms() { gint i; for (i=0;i<(gint)Natoms;i++) { if(if_selected(i)) { geometry[i].show = FALSE; geometry0[i].show = FALSE; } } unselect_all_atoms(); drawGeom(); } /*****************************************************************************/ void hide_not_selected_atoms() { gint i; for (i=0;i<(gint)Natoms;i++) { if(!if_selected(i)) { geometry[i].show = FALSE; geometry0[i].show = FALSE; } } drawGeom(); } /*****************************************************************************/ void show_hydrogen_atoms() { gint i; gint j; gint ni; gint nj; for (i=0;i<(gint)Natoms;i++) { ni = geometry[i].N-1; if(!geometry[i].show) continue; for (j=0;j<(gint)Natoms;j++) { nj = geometry[j].N-1; if(!geometry[i].typeConnections) continue; if(geometry[i].typeConnections[nj]<1) continue; if(!strcmp(geometry[j].Prop.symbol,"H")) { geometry[j].show = TRUE; geometry0[j].show = TRUE; } } } drawGeom(); ShowHydrogenAtoms = TRUE; } /*****************************************************************************/ void show_all_atoms() { gint i; for (i=0;i<(gint)Natoms;i++) { geometry[i].show = TRUE; geometry0[i].show = TRUE; } drawGeom(); ShowHydrogenAtoms = TRUE; } /********************************************************************************/ static gint testAmberTypesDefine() { gint i; gint k; if(Natoms<1)return 0; for(i=0;i<(gint)Natoms;i++) if(geometry[i].mmType && strlen(geometry[i].mmType)>2) { printf("Problem with %s\n",geometry[i].mmType); return -1; } k = 0; for(i=0;i<(gint)Natoms;i++) if(geometry[i].mmType && strcmp(geometry[i].mmType,geometry[i].Prop.symbol)==0) k++; if(k==Natoms) return -2; return 0; } /********************************************************************************/ void messageAmberTypesDefine() { gint k = testAmberTypesDefine(); if(k==0) return; if(k==-1) { GtkWidget* m; m = Message(_("The type of One (or several) of atoms is not a Amber type.\n" "You can set the types of atoms by : \n" " \"Set/Atom Type&Charge using PDB Template\" \n" " \"Or\" \n" " \"Set/Atom Types using connections types\" \n" ) ,_("Warning"),TRUE); gtk_window_set_modal (GTK_WINDOW (m), TRUE); } if(k==-2) { GtkWidget* m; m = Message(_("The types of the atoms are identical to the symbols of these atoms.\n" "You can set the types of atoms by \n" "\"Set/Atom Types using connections types\" \n" ) ,_("Warning"),TRUE); gtk_window_set_modal (GTK_WINDOW (m), TRUE); } } /*****************************************************************************/ gboolean getShowMultipleBonds() { return showMultipleBonds; } /*****************************************************************************/ void RenderMultipleBonds(GtkWidget *win,gboolean show) { showMultipleBonds = show; drawGeom(); } /*****************************************************************************/ void resetConnections() { reset_all_connections(); drawGeom(); } /*****************************************************************************/ void resetConnectionsBetweenSelectedAndNotSelectedAtoms() { reset_connections_between_selected_and_notselected_atoms(); drawGeom(); } /*****************************************************************************/ void resetConnectionsBetweenSelectedAtoms() { reset_connections_between_selected_atoms(); drawGeom(); } /*****************************************************************************/ void resetMultipleConnections() { reset_multiple_bonds(); drawGeom(); } /*****************************************************************************/ GabEditGeomOperation getOperationType() { return OperationType; } /*****************************************************************************/ gdouble get_real_distance2(GeomDef* g,gint i,gint j) { gdouble xx; gdouble d; xx = g[i].X-g[j].X; d = xx*xx; xx = g[i].Y-g[j].Y; d += xx*xx; xx = g[i].Z-g[j].Z; d += xx*xx; return d; } /*******************************************************************/ void adjust_multiple_bonds_with_one_atom(gint n) { if(Natoms<2) return; if(!geometry[n].typeConnections) return; { gint ni = 0; gint nj = 0; gint i,j; gint nBonds = 0; i = n; ni = geometry[i].N-1; for(j=0;j<(gint)Natoms;j++) { if(j==i) continue; nj = geometry[j].N-1; if(geometry[i].typeConnections[nj]>0) { nBonds += geometry[i].typeConnections[nj]; } } if(nBonds<=geometry[i].Prop.maximumBondValence) return; for(j=0;j<(gint)Natoms;j++) { nj = geometry[j].N-1; if(i==j) continue; if(geometry[i].typeConnections[nj]<=1) continue; geometry[i].typeConnections[nj] -=1; geometry[j].typeConnections[ni] -=1; nBonds--; if(nBonds<=geometry[i].Prop.maximumBondValence) return; } copy_connections(geometry0, geometry, Natoms); } } /*******************************************************************/ void reset_connection_with_one_atom(gint n) { if(Natoms<2) return; if(!geometry[n].typeConnections) return; { gint ni = 0; gint nj = 0; gint i,j; gint* nBonds = g_malloc(Natoms*sizeof(gint)); for(i=0;i<(gint)Natoms;i++) nBonds[i] = 0; for(i=0;i<(gint)Natoms-1;i++) { if(i==n) continue; for(j=i+1;j<(gint)Natoms;j++) { if(j==n) continue; nj = geometry[j].N-1; if(geometry[i].typeConnections[nj]>0) { nBonds[i] += geometry[i].typeConnections[nj]; nBonds[j] += geometry[i].typeConnections[nj]; } } } i = n; ni = geometry[i].N-1; for(j=0;j<(gint)Natoms;j++) { if(i==j) continue; nj = geometry[j].N-1; if(draw_lines_yes_no(i,j)) geometry[i].typeConnections[nj]= 1; else geometry[i].typeConnections[nj]=0; if(geometry[j].typeConnections) geometry[j].typeConnections[ni] = geometry[i].typeConnections[nj]; nBonds[i]+= geometry[i].typeConnections[nj]; nBonds[j]+= geometry[i].typeConnections[nj]; if(nBonds[i]>geometry[i].Prop.maximumBondValence || nBonds[j]>geometry[j].Prop.maximumBondValence ) { geometry[i].typeConnections[nj]= 0; if(geometry[j].typeConnections) geometry[j].typeConnections[ni] = 0; nBonds[i]--; nBonds[j]--; } } for(j=0;j<(gint)Natoms;j++) { nj = geometry[j].N-1; if(i==j) continue; if(geometry[i].typeConnections[nj]==0) continue; if( nBonds[i] < geometry[i].Prop.maximumBondValence && nBonds[j] < geometry[j].Prop.maximumBondValence ) { geometry[i].typeConnections[nj] = geometry[j].typeConnections[ni] = 2; nBonds[i] += 1; nBonds[j] += 1; } } for(j=0;j<(gint)Natoms;j++) { nj = geometry[j].N-1; if(i==j) continue; if(geometry[i].typeConnections[nj]==0) continue; if( nBonds[i] < geometry[i].Prop.maximumBondValence && nBonds[j] < geometry[j].Prop.maximumBondValence ) { geometry[i].typeConnections[nj] = geometry[j].typeConnections[ni] = 3; nBonds[i] += 1; nBonds[j] += 1; } } copy_connections(geometry0, geometry, Natoms); } } /*****************************************************************************/ static void init_connections() { gint i; gint j; if(Natoms<1) return; if(geometry) for(i=0;i<(gint)Natoms;i++) { geometry[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;j<(gint)Natoms;j++) geometry[i].typeConnections[j] = 0; } if(geometry0) for(i=0;i<(gint)Natoms;i++) { geometry0[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;j<(gint)Natoms;j++) geometry0[i].typeConnections[j] = 0; } } /************************************************************************/ static void reSetSimpleConnections() { gint* nBonds = NULL; gint* num = NULL; gint* numConn = NULL; gdouble* dists = NULL; gint i; gint j; gint ni; gint nj; gint k; gint kmax; gint nb0; if(Natoms<1) return; nBonds = g_malloc(Natoms*sizeof(gint)); num = g_malloc(Natoms*sizeof(gint)); numConn = g_malloc(Natoms*sizeof(gint)); dists = g_malloc(Natoms*sizeof(gdouble)); for(i=0;i<(gint)Natoms;i++) num[i] = i; for(i=0;i<(gint)Natoms-1;i++) { gint k = i; for(j=i+1;j<(gint)Natoms;j++) if(geometry[num[j]].N0) { nBonds[i] += 1; nBonds[j] += 1; } } } /* remove H1-H2 connections if H1 and H2 are not connected to others atoms */ for(i=0;i<(gint)Natoms;i++) { ni = geometry[num[i]].N-1; if( nBonds[i] <= geometry[num[i]].Prop.maximumBondValence) continue; if( geometry[num[i]].Prop.maximumBondValence>1) continue; for(k=0;k<(gint)nBonds[i];k++) numConn[k] = -1; k = 0; for(j=0;j<(gint)Natoms;j++) { nj = geometry[num[j]].N-1; if(i!=j && geometry[num[i]].typeConnections[nj]>0) { gdouble p = geometry[num[i]].Prop.covalentRadii+geometry[num[j]].Prop.covalentRadii; p = p*p; numConn[k] = j; dists[k] = get_real_distance2(geometry, num[i], num[j])/p; if( geometry[num[j]].Prop.maximumBondValence>1) numConn[k] =-1; k++; } } nb0 = nBonds[i]; do{ kmax = -1; for(k=0;k-1) { kmax = k; break;} if(kmax<0) break; for(k=0;k-1 && dists[k]>dists[kmax]) kmax = k; nBonds[i] -= 1; j = numConn[kmax]; nBonds[j] -= 1; nj = geometry[num[j]].N-1; geometry[num[i]].typeConnections[nj] = 0; geometry[num[j]].typeConnections[ni] = 0; numConn[kmax]=-1; }while( nBonds[i] > geometry[num[i]].Prop.maximumBondValence); } /* remove A-H-B connections */ for(i=0;i<(gint)Natoms;i++) { ni = geometry[num[i]].N-1; if( nBonds[i] <= geometry[num[i]].Prop.maximumBondValence) continue; if( geometry[num[i]].Prop.maximumBondValence>1) continue; for(k=0;k<(gint)nBonds[i];k++) numConn[k] = -1; k = 0; for(j=0;j<(gint)Natoms;j++) { nj = geometry[num[j]].N-1; if(i!=j && geometry[num[i]].typeConnections[nj]>0) { gdouble p = geometry[num[i]].Prop.covalentRadii+geometry[num[j]].Prop.covalentRadii; p = p*p; numConn[k] = j; dists[k] = get_real_distance2(geometry, num[i], num[j])/p; k++; } } nb0 = nBonds[i]; do{ kmax = -1; for(k=0;k-1) { kmax = k; break;} if(kmax<0) break; for(k=0;k-1 && dists[k]>dists[kmax]) kmax = k; nBonds[i] -= 1; j = numConn[kmax]; nBonds[j] -= 1; nj = geometry[num[j]].N-1; geometry[num[i]].typeConnections[nj] = 0; geometry[num[j]].typeConnections[ni] = 0; numConn[kmax]=-1; }while( nBonds[i] > geometry[num[i]].Prop.maximumBondValence); } /* remove H-B connections if B saturated */ for(i=0;i<(gint)Natoms;i++) { gint nV = geometry[num[i]].Prop.maximumBondValence; if(geometry[num[i]].mmType && !strcmp(geometry[num[i]].mmType,"N3")) nV++; if( nBonds[i] <= nV) continue; if( nV<=1) continue; ni = geometry[num[i]].N-1; for(k=0;k<(gint)nBonds[i];k++) numConn[k] = -1; k = 0; for(j=0;j<(gint)Natoms;j++) { nj = geometry[num[j]].N-1; if(i!=j && geometry[num[i]].typeConnections[nj]>0) { gdouble p = geometry[num[i]].Prop.covalentRadii+geometry[num[j]].Prop.covalentRadii; p = p*p; numConn[k] = j; dists[k] = get_real_distance2(geometry, num[i], num[j])/p; if( geometry[num[j]].Prop.maximumBondValence>1) numConn[k] =-1; k++; } } nb0 = nBonds[i]; do{ kmax = -1; for(k=0;k-1) { kmax = k; break;} if(kmax<0) break; for(k=0;k-1 && dists[k]>dists[kmax]) kmax = k; nBonds[i] -= 1; j = numConn[kmax]; nBonds[j] -= 1; nj = geometry[num[j]].N-1; geometry[num[i]].typeConnections[nj] = 0; geometry[num[j]].typeConnections[ni] = 0; numConn[kmax]=-1; }while( nBonds[i] > geometry[num[i]].Prop.maximumBondValence); } /* remove A-B connections if A or B saturated */ for(i=0;i<(gint)Natoms;i++) { ni = geometry[num[i]].N-1; if( geometry[num[i]].Prop.maximumBondValence<=1) continue; if( nBonds[i] <= geometry[num[i]].Prop.maximumBondValence) continue; if(geometry[num[i]].mmType && !strcmp(geometry[num[i]].mmType,"N3") && nBonds[i] <= geometry[num[i]].Prop.maximumBondValence+1) continue; for(k=0;k<(gint)nBonds[i];k++) numConn[k] = -1; k = 0; for(j=0;j<(gint)Natoms;j++) { nj = geometry[num[j]].N-1; if(i!=j && geometry[num[i]].typeConnections[nj]>0) { gdouble p = geometry[num[i]].Prop.covalentRadii+geometry[num[j]].Prop.covalentRadii; p = p*p; numConn[k] = j; dists[k] = get_real_distance2(geometry, num[i], num[j])/p; k++; } } nb0 = nBonds[i]; do{ kmax = -1; for(k=0;k-1) { kmax = k; break;} if(kmax<0) break; for(k=0;k-1 && dists[k]>dists[kmax]) kmax = k; nBonds[i] -= 1; j = numConn[kmax]; nBonds[j] -= 1; nj = geometry[num[j]].N-1; geometry[num[i]].typeConnections[nj] = 0; geometry[num[j]].typeConnections[ni] = 0; numConn[kmax]=-1; }while( nBonds[i] > geometry[num[i]].Prop.maximumBondValence); } g_free(nBonds); g_free(num); g_free(numConn); g_free(dists); } /************************************************************************/ static void setMultipleBonds() { gint* nBonds = NULL; gint* num = NULL; gint i; gint j; gint ni; gint nj; if(Natoms<1) return; nBonds = g_malloc(Natoms*sizeof(gint)); num = g_malloc(Natoms*sizeof(gint)); for(i=0;i<(gint)Natoms;i++) num[i] = i; for(i=0;i<(gint)Natoms-1;i++) { gint k = i; for(j=i+1;j<(gint)Natoms;j++) if(geometry[num[j]].N0) { nBonds[i] += 1; nBonds[j] += 1; } } } // sort atoms nBonds min at first for(i=0;i<(gint)Natoms-1;i++) { gint k = i; for(j=i+1;j<(gint)Natoms;j++) if(nBonds[j]0) continue; if(i==j) continue; if(strcmp(geometry[j].Prop.symbol, "H")!=0)continue; dx = geometry[i].X-geometry[j].X; dy = geometry[i].Y-geometry[j].Y; dz = geometry[i].Z-geometry[j].Z; distance2 = (dx*dx+dy*dy+dz*dz); if(distance2maxDistanceH2) continue; Ok = FALSE; for(k=0;k<(gint)Natoms;k++) { nk = geometry[k].N-1; if(k==j) continue; if(k==i) continue; if(geometry[j].typeConnections[nk]<=0) continue; A.C[0]=geometry[i].X-geometry[j].X; A.C[1]=geometry[i].Y-geometry[j].Y; A.C[2]=geometry[i].Z-geometry[j].Z; B.C[0]=geometry[k].X-geometry[j].X; B.C[1]=geometry[k].Y-geometry[j].Y; B.C[2]=geometry[k].Z-geometry[j].Z; strAngle = get_angle_vectors(A,B); angle = atof(strAngle); if(strAngle) g_free(strAngle); if(angle>=minAngleH &&angle<=maxAngleH) { Ok = TRUE; break; } } if(Ok) { geometry[i].typeConnections[nj]=-1; geometry[j].typeConnections[ni]=-1; } } } } /*****************************************************************************/ void copy_connections(GeomDef* geom0, GeomDef* geom, gint n) { gint i; gint j; if(!geom) return; if(!geom0) return; for(i=0;i0) nc++; } } return nc; } /************************************************************************************************************/ static gint get_number_of_inter_connections() { gint i; gint j; gint nc = 0; gint NC = Natoms; for(i=0;i0) nc++; } } return nc; } /*************************************************************************************/ static guint get_number_of_electrons(guint type) { /* type = 1 : Medium and High type = 2 : High type = other : All */ guint i; guint Ne=0; SAtomsProp Atom; for(i=0;i1) geometry[i].typeConnections[nj] = 1; } } setMultipleBonds(); } /*****************************************************************************/ void reset_all_connections() { if(Natoms<1) return; buildRotation(); set_connections(); if(ShowHBonds) set_Hconnections(); copy_connections(geometry0, geometry, Natoms); } /*****************************************************************************/ static void reset_connections_between_selected_atoms() { gint i; gint j; gint ni; gint nj; gint* nBonds = NULL; gint* num = NULL; if(Natoms<2) return; nBonds = g_malloc(Natoms*sizeof(gint)); num = g_malloc(Natoms*sizeof(gint)); for(i=0;i<(gint)Natoms;i++) num[i] = i; for(i=0;i<(gint)Natoms-1;i++) { gint k = i; for(j=i+1;j<(gint)Natoms;j++) if(geometry[num[j]].N0) { nBonds[i] += geometry[num[i]].typeConnections[nj]; nBonds[j] += geometry[num[i]].typeConnections[nj]; } } } for(i=0;i<(gint)Natoms;i++) { gboolean isa = if_selected(num[i]); if(!isa) continue; ni = geometry[num[i]].N-1; if(geometry[num[i]].typeConnections) for(j=i+1;j<(gint)Natoms;j++) { gboolean jsa = if_selected(num[j]); if(!jsa) continue; nj = geometry[num[j]].N-1; if(draw_lines_yes_no(num[i],num[j])) geometry[num[i]].typeConnections[nj]= 1; else geometry[num[i]].typeConnections[nj]=0; if(geometry[num[j]].typeConnections) geometry[num[j]].typeConnections[ni] = geometry[num[i]].typeConnections[nj]; nBonds[i]+= geometry[num[i]].typeConnections[nj]; nBonds[j]+= geometry[num[i]].typeConnections[nj]; if(nBonds[i]>geometry[num[i]].Prop.maximumBondValence || nBonds[j]>geometry[num[j]].Prop.maximumBondValence ) { geometry[num[i]].typeConnections[nj]= 0; if(geometry[num[j]].typeConnections) geometry[num[j]].typeConnections[ni] = 0; nBonds[i]--; nBonds[j]--; } } } for(i=0;i<(gint)Natoms;i++) { gboolean isa = if_selected(num[i]); ni = geometry[num[i]].N-1; if(!isa) continue; for(j=i+1;j<(gint)Natoms;j++) { gboolean jsa = if_selected(num[j]); if(!jsa) continue; nj = geometry[num[j]].N-1; if(geometry[num[i]].typeConnections[nj]==0) continue; if( nBonds[i] < geometry[num[i]].Prop.maximumBondValence && nBonds[j] < geometry[num[j]].Prop.maximumBondValence ) { geometry[num[i]].typeConnections[nj] = geometry[num[j]].typeConnections[ni] = 2; nBonds[i] += 1; nBonds[j] += 1; } } } for(i=0;i<(gint)Natoms;i++) { gboolean isa = if_selected(num[i]); if(!isa) continue; ni = geometry[num[i]].N-1; for(j=i+1;j<(gint)Natoms;j++) { gboolean jsa = if_selected(num[j]); if(!jsa) continue; nj = geometry[num[j]].N-1; if(geometry[num[i]].typeConnections[nj]==0) continue; if( nBonds[i] < geometry[num[i]].Prop.maximumBondValence && nBonds[j] < geometry[num[j]].Prop.maximumBondValence ) { geometry[num[i]].typeConnections[nj] = geometry[num[j]].typeConnections[ni] = 3; nBonds[i] += 1; nBonds[j] += 1; } } } g_free(nBonds); g_free(num); copy_connections(geometry0, geometry, Natoms); } /*****************************************************************************/ static void reset_connections_between_selected_and_notselected_atoms() { gint i; gint j; gint ni; gint nj; gint* nBonds = NULL; gint* num = NULL; if(Natoms<2) return; nBonds = g_malloc(Natoms*sizeof(gint)); num = g_malloc(Natoms*sizeof(gint)); for(i=0;i<(gint)Natoms;i++) num[i] = i; for(i=0;i<(gint)Natoms-1;i++) { gint k = i; for(j=i+1;j<(gint)Natoms;j++) if(geometry[num[j]].N0) { nBonds[i] += geometry[num[i]].typeConnections[nj]; nBonds[j] += geometry[num[i]].typeConnections[nj]; } } } for(i=0;i<(gint)Natoms;i++) { gboolean isa = if_selected(num[i]); ni = geometry[num[i]].N-1; if(geometry[num[i]].typeConnections) for(j=i+1;j<(gint)Natoms;j++) { gboolean jsa = if_selected(num[j]); if(isa==jsa) continue; nj = geometry[num[j]].N-1; if(draw_lines_yes_no(num[i],num[j])) geometry[num[i]].typeConnections[nj]= 1; else geometry[num[i]].typeConnections[nj]=0; if(geometry[num[j]].typeConnections) geometry[num[j]].typeConnections[ni] = geometry[num[i]].typeConnections[nj]; nBonds[i]+= geometry[num[i]].typeConnections[nj]; nBonds[j]+= geometry[num[i]].typeConnections[nj]; if(nBonds[i]>geometry[num[i]].Prop.maximumBondValence || nBonds[j]>geometry[num[j]].Prop.maximumBondValence ) { geometry[num[i]].typeConnections[nj]= 0; if(geometry[num[j]].typeConnections) geometry[num[j]].typeConnections[ni] = 0; nBonds[i]--; nBonds[j]--; } } } for(i=0;i<(gint)Natoms;i++) { gboolean isa = if_selected(num[i]); ni = geometry[num[i]].N-1; for(j=i+1;j<(gint)Natoms;j++) { gboolean jsa = if_selected(num[j]); nj = geometry[num[j]].N-1; if(geometry[num[i]].typeConnections[nj]==0) continue; if( nBonds[i] < geometry[num[i]].Prop.maximumBondValence && nBonds[j] < geometry[num[j]].Prop.maximumBondValence ) { if(isa != jsa) { geometry[num[i]].typeConnections[nj] = geometry[num[j]].typeConnections[ni] = 2; nBonds[i] += 1; nBonds[j] += 1; } } } } for(i=0;i<(gint)Natoms;i++) { gboolean isa = if_selected(num[i]); ni = geometry[num[i]].N-1; for(j=i+1;j<(gint)Natoms;j++) { gboolean jsa = if_selected(num[j]); nj = geometry[num[j]].N-1; if(geometry[num[i]].typeConnections[nj]==0) continue; if( nBonds[i] < geometry[num[i]].Prop.maximumBondValence && nBonds[j] < geometry[num[j]].Prop.maximumBondValence ) { if(isa != jsa) { geometry[num[i]].typeConnections[nj] = geometry[num[j]].typeConnections[ni] = 3; nBonds[i] += 1; nBonds[j] += 1; } } } } g_free(nBonds); g_free(num); copy_connections(geometry0, geometry, Natoms); } /*****************************************************************************/ gboolean hbond_connections(gint i, gint j) { if(ShowHBonds) { gint nj = geometry[j].N-1; if(i<(gint)Natoms && j<(gint)Natoms && geometry[i].typeConnections[nj]==-1) return TRUE; else return FALSE; } else return FALSE; } /*****************************************************************************/ void init_quat(gdouble quat[]) { gint i; for(i=0;i<3;i++) quat[i] = 0.0; quat[3] = 1.0; } /********************************************************************************/ static void set_origin_to_point(gdouble center[]) { gint n; for(n = 0;n<(gint)Natoms;n++) { geometry0[n].X -= center[0]; geometry0[n].Y -= center[1]; geometry0[n].Z -= center[2]; geometry[n].X -= center[0]; geometry[n].Y -= center[1]; geometry[n].Z -= center[2]; } for (n=0;n<3;n++) Orig[n] += center[n]; } /********************************************************************************/ void set_origin_to_center_of_fragment() { gdouble C[3] = {0,0,0}; gint j = 0; gint i; for (i=0;i<(gint)Natoms;i++) { if(if_selected(i)) { j++; C[0] += geometry0[i].X; C[1] += geometry0[i].Y; C[2] += geometry0[i].Z; } } if(j==0) return; for (i=0;i<3;i++) C[i] /= j; set_origin_to_point(C); create_GeomXYZ_from_draw_grometry(); TransX = 0; TransY = 0; drawGeom(); } /********************************************************************************/ static void set_geom_to_axes(gdouble axis1[], gdouble axis2[], gdouble axis3[]) { gdouble **m0 = NULL; gdouble** minv; gint i,j; guint n; gdouble A[3]; gdouble B[3]; guint k; gdouble* X; gdouble* Y; gdouble* Z; if(Natoms<1) return; m0 = g_malloc(3*sizeof(gdouble*)); X = g_malloc(Natoms*sizeof(gdouble)); Y = g_malloc(Natoms*sizeof(gdouble)); Z = g_malloc(Natoms*sizeof(gdouble)); for(i=0;i<3;i++) m0[i] = g_malloc(3*sizeof(gdouble)); m0[0][0] = axis1[0]; m0[0][1] = axis1[1]; m0[0][2] = axis1[2]; m0[1][0] = axis2[0]; m0[1][1] = axis2[1]; m0[1][2] = axis2[2]; m0[2][0] = axis3[0]; m0[2][1] = axis3[1]; m0[2][2] = axis3[2]; minv = Inverse(m0,3,1e-7); for(n = 0;nd[j]) {dmin=d[j]; jmin = j;} for (i=0;ikeyval == GDK_Shift_L || event->keyval == GDK_Shift_R) ) ShiftKeyPressed = TRUE; else if((event->keyval == GDK_Control_L || event->keyval == GDK_Control_R) ) { ControlKeyPressed = TRUE; } else if((event->keyval == GDK_Alt_L || event->keyval == GDK_Alt_R) ) { ControlKeyPressed = TRUE; } else if((event->keyval == GDK_F || event->keyval == GDK_f) ) { FKeyPressed = TRUE; } else if((event->keyval == GDK_G || event->keyval == GDK_g) ) { GKeyPressed = TRUE; } else if((event->keyval == GDK_A || event->keyval == GDK_a) && ControlKeyPressed) { SelectAllAtoms(); } else if((event->keyval == GDK_u || event->keyval == GDK_U)) { switch(OperationType) { case MOVEFRAG : case DELETEOBJECTS : case MEASURE : case EDITOBJECTS : case ADDFRAGMENT : case ROTLOCFRAG : case ROTZLOCFRAG : get_geometry_from_fifo( event->keyval == GDK_U); drawGeom(); break; default:break; } } else if((event->keyval == GDK_z || event->keyval == GDK_y) && ControlKeyPressed) { switch(OperationType) { case MOVEFRAG : case DELETEOBJECTS : case MEASURE : case EDITOBJECTS : case ADDFRAGMENT : case ROTLOCFRAG : case ROTZLOCFRAG : get_geometry_from_fifo(event->keyval == GDK_y); drawGeom(); break; default:break; } } GTK_WIDGET_GET_CLASS(wid)->key_press_event(wid, event); return TRUE; } /********************************************************************************/ static gint set_key_release(GtkWidget* wid, GdkEventKey *event, gpointer data) { if((event->keyval == GDK_Shift_L || event->keyval == GDK_Shift_R) ) ShiftKeyPressed = FALSE; else if((event->keyval == GDK_Control_L || event->keyval == GDK_Control_R) ) ControlKeyPressed = FALSE; else if((event->keyval == GDK_Alt_L || event->keyval == GDK_Alt_R) ) ControlKeyPressed = FALSE; else if((event->keyval == GDK_F || event->keyval == GDK_f) ) FKeyPressed = FALSE; else if((event->keyval == GDK_G || event->keyval == GDK_g) ) GKeyPressed = FALSE; return TRUE; } /********************************************************************************/ void setMMTypesChargesFromPDBTpl(guint Operation) { gint i; gchar* mmType = NULL; gdouble charge = 0.0; for(i=0;i<(gint)Natoms;i++) { if(Operation!=3) { mmType = getMMTypeFromPDBTpl(geometry[i].Residue,geometry[i].pdbType,&charge); if(!strcmp(mmType,"UNK")) { g_free(mmType); continue; } } switch(Operation) { case 0: geometry[i].Charge = charge; geometry0[i].Charge = charge; break; case 1: g_free(geometry[i].mmType); g_free(geometry0[i].mmType); geometry[i].mmType = g_strdup(mmType); geometry0[i].mmType = g_strdup(mmType); break; case 2: g_free(geometry[i].mmType); g_free(geometry0[i].mmType); geometry[i].mmType = g_strdup(mmType); geometry0[i].mmType = g_strdup(mmType); geometry[i].Charge = charge; geometry0[i].Charge = charge; break; case 3:geometry[i].Charge = charge; geometry0[i].Charge = charge; break; default: break; } if(Operation!=3) g_free(mmType); } } /********************************************************************************/ void setMMTypesCharges(gpointer data, guint Operation,GtkWidget* wid) { if(Operation==4) { gint i; calculTypesAmber(geometry, (gint)Natoms); for(i=0;i<(gint)Natoms;i++) { geometry0[i].mmType = g_strdup(geometry[i].mmType); geometry0[i].pdbType = g_strdup(geometry[i].pdbType); } } else setMMTypesChargesFromPDBTpl(Operation); create_GeomXYZ_from_draw_grometry(); drawGeom(); } /*****************************************************************************/ GeomDef* Free_One_Geom(GeomDef* geom,gint N) { gint i; if(!geom) return NULL; for (i=0;iallocation.width/20; gint y0 = GeomDrawingArea->allocation.height-GeomDrawingArea->allocation.height/10; color.red = FontsStyleLabel.TextColor.red; color.green = FontsStyleLabel.TextColor.green; color.blue = FontsStyleLabel.TextColor.blue; colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap, &color, FALSE, TRUE); gdk_gc_set_foreground(gc,&color); gabedit_cairo_string(cr, GeomDrawingArea, font_desc, gc, x0, y0, str, FALSE,TRUE); if(crExport) gabedit_cairo_string(crExport, GeomDrawingArea, font_desc, gc, x0, y0, str, FALSE,TRUE); if(font_desc) pango_font_description_free (font_desc); } /*****************************************************************************/ gboolean select_atoms_by_groupe() { gint i; gdouble x1=0; gdouble y1=0; gdouble xi; gdouble yi; gdouble d = 0; gint j; gint k; gboolean OK = FALSE; x1 = BeginX; y1 = BeginY; for(i=0;i<(gint)Natoms;i++) { xi = geometry[i].Xi; yi = geometry[i].Yi; d = (xi-x1)*(xi-x1) + (yi-y1)*(yi-y1); d = sqrt(d); if(d<=geometry[i].Rayon) { if(NumFatoms == NULL) NumFatoms = g_malloc((NFatoms+1)*sizeof(gint)); else NumFatoms = g_realloc(NumFatoms, (NFatoms+1)*sizeof(gint)); NumFatoms[NFatoms] = geometry[i].N; NFatoms+=1; for(j=0;j<(gint)Natoms;j++) { if(get_connection_type(i,j)>0) { gint nGroupAtoms=0; gint * listGroupAtoms = getListGroupe(&nGroupAtoms, geometry0, Natoms, i, j,-1,-1); if(NumFatoms == NULL) NumFatoms = g_malloc((NFatoms+nGroupAtoms+1)*sizeof(gint)); else NumFatoms = g_realloc(NumFatoms, (NFatoms+nGroupAtoms+1)*sizeof(gint)); NumFatoms[NFatoms] = geometry[j].N; for(k=NFatoms+1;k=0 && del) { if((NFatoms-1)>0) { for(k=selectedj;k<(gint)(NFatoms-1);k++) NumFatoms[k] = NumFatoms[k+1]; NumFatoms = g_realloc(NumFatoms, (NFatoms-1)*sizeof(gint)); NFatoms--; } else { g_free(NumFatoms); NumFatoms = NULL; NFatoms = 0; } } } } break; } } drawGeom(); return OK; } /*****************************************************************************/ void select_atoms_by_rectangle(gdouble x,gdouble y) { gint i; gdouble x1=0; gdouble y1=0; gdouble x2=0; gdouble y2=0; gdouble xi; gdouble yi; if(x>BeginX) { x1 = BeginX; x2 = x; } else { x1 = x; x2 = BeginX; } if(y>BeginY) { y1 = BeginY; y2 = y; } else { y1 = y; y2 = BeginY; } if(!ShiftKeyPressed) { if(!NumFatoms) g_free(NumFatoms); NumFatoms = NULL; NFatoms = 0; } for(i=0;i<(gint)Natoms;i++) { if(!geometry[i].show) continue; xi = geometry[i].Xi; yi = geometry[i].Yi; if(xi>=x1 && xi<=x2 && yi>=y1 && yi<=y2 && !if_selected(i)) { if(NumFatoms == NULL) NumFatoms = g_malloc((NFatoms+1)*sizeof(gint)); else NumFatoms = g_realloc(NumFatoms,(NFatoms+1)*sizeof(gint)); NumFatoms[NFatoms] = geometry[i].N; NFatoms++; } } } /********************************************************************************/ void draw_selection_rectangle(gdouble x,gdouble y) { gdouble xi=0; gdouble yi=0; gdouble xf=0; gdouble yf=0; GdkColor color; GdkColormap *colormap; colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); color.red = 65535; color.green = 65535; color.blue = 65535; drawGeom(); gdk_colormap_alloc_color(colormap,&color,FALSE,TRUE); gdk_gc_set_foreground(gc,&color); if(x>BeginX) { xi = BeginX; xf = x-BeginX; } else { xi = x; xf = BeginX-x; } if(y>BeginY) { yi = BeginY; yf = y-BeginY; } else { yi = y; yf = BeginY-y; } gdk_gc_set_line_attributes(gc,1,GDK_LINE_DOUBLE_DASH,GDK_CAP_NOT_LAST,GDK_JOIN_MITER); #if !defined(G_OS_WIN32) gdk_draw_rectangle (GeomDrawingArea->window,gc,FALSE,xi, yi, xf, yf); #else gdk_draw_rectangle (GeomDrawingArea->window,GeomDrawingArea->style->white_gc,FALSE,xi, yi, xf, yf); #endif } /********************************************************************************/ void draw_selection_circle(gdouble x,gdouble y) { gdouble xi=0; gdouble yi=0; gdouble xf=0; gdouble yf=0; GdkColor color; GdkColormap *colormap; colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); color.red = 65535; color.green = 65535; color.blue = 65535; drawGeom(); gdk_colormap_alloc_color(colormap,&color,FALSE,TRUE); gdk_gc_set_foreground(gc,&color); /* GDK_LINE_ON_OFF_DASH, GDK_LINE_DOUBLE_DASH*/ if(x>BeginX) { xi = BeginX; xf = x-BeginX; } else { xi = x; xf = BeginX-x; } if(y>BeginY) { yi = BeginY; yf = y-BeginY; } else { yi = y; yf = BeginY-y; } gdk_gc_set_line_attributes(gc,1,GDK_LINE_DOUBLE_DASH,GDK_CAP_NOT_LAST,GDK_JOIN_MITER); gdk_draw_arc(GeomDrawingArea->window,gc,FALSE,xi,yi,xf,yf,0,380*64); } /********************************************************************************/ static void delete_molecule() { if(Natoms<1) return; add_geometry_to_fifo(); geometry0 =Free_One_Geom(geometry0,Natoms); geometry =Free_One_Geom(geometry,Natoms); Natoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms = NULL; NFatoms = 0; create_GeomXYZ_from_draw_grometry(); Ddef = FALSE; drawGeom(); set_statubar_pop_sel_atom(); free_text_to_draw(); change_of_center(NULL,NULL); } /********************************************************************************/ void copySelectedAtoms() { Fragment F; gint i; gint k; if(Frag.NAtoms) FreeFragment(&Frag); Frag.NAtoms = 0; Frag.Atoms = NULL; if(NFatoms<1) return; F.NAtoms = NFatoms; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); for (k=0;k<(gint)NFatoms;k++) { for (i=0;i<(gint)Natoms;i++) { if(NumFatoms[k]==geometry[i].N) { F.Atoms[k].Symb=g_strdup(geometry[i].Prop.symbol); F.Atoms[k].mmType=g_strdup(geometry[i].mmType); F.Atoms[k].pdbType=g_strdup(geometry[i].pdbType); F.Atoms[k].Residue = g_strdup(geometry[i].Residue); F.Atoms[k].Coord[0]=geometry[i].X; F.Atoms[k].Coord[1]=geometry[i].Y; F.Atoms[k].Coord[2]=geometry[i].Z; F.Atoms[k].Charge=geometry[i].Charge; break; } } if(i==Natoms) break; } if(k!=NFatoms) { if(F.Atoms) g_free(F.Atoms); return; } F.atomToDelete = -1; F.atomToBondTo = -1; F.angleAtom = -1; CenterFrag(&F); Frag = F; SetOperation (NULL,ADDFRAGMENT); } /********************************************************************************/ static gchar** freeList(gchar** strs, gint nlist) { gint i; for(i=0;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); n=0; t = getListGeomMMTypes(&n); entry = create_label_combo(hbox,_(" Type Name : "),t,n, TRUE,-1,-1); if(strcmp(tmp,"UNK")) gtk_entry_set_text(GTK_ENTRY(entry),tmp); gtk_editable_set_editable((GtkEditable*) entry,TRUE); if(t) freeList(t,n); gtk_widget_realize(winDlg); button = create_button(winDlg,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); button = create_button(winDlg,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)setMMTypeOfselectedAtoms,entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show_all(winDlg); } /********************************************************************************/ static void setPDBTypeOfselectedAtoms(GtkWidget* button, GtkWidget* entry) { gint i; gint k = 0; G_CONST_RETURN gchar *tName; if(Natoms<1) return; tName = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(tName)<1) return; if(NFatoms<1) return; if(!NumFatoms) return; for (k=0;k<(gint)NFatoms;k++) for (i=0;i<(gint)Natoms;i++) { if(geometry[i].N== NumFatoms[k]) { if(geometry[i].pdbType) g_free(geometry[i].pdbType); geometry[i].pdbType = g_strdup(tName); if(geometry0[i].pdbType) g_free(geometry0[i].pdbType); geometry0[i].pdbType = g_strdup(tName); } } create_GeomXYZ_from_draw_grometry(); drawGeom(); } /********************************************************************************/ void setPDBTypeOfselectedAtomsDlg() { GtkWidget *winDlg; GtkWidget *button; GtkWidget *hbox; GtkWidget *entry; GtkWidget *frame; GtkWidget *vboxframe; gint n=0; gchar** t = NULL; gchar tmp[100] = "UNK"; gint i; gint k; if(Natoms<1) return; if(NFatoms<1) return; if(!NumFatoms) return; k=0; for (i=0;i<(gint)Natoms;i++) { if(geometry[i].N == NumFatoms[k]) { sprintf(tmp,"%s",geometry[i].pdbType); break; } } winDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(winDlg),_("Set PDB Type of selected atoms")); gtk_window_set_position(GTK_WINDOW(winDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(winDlg),GTK_WINDOW(GeomDlg)); add_child(GeomDlg,winDlg,gtk_widget_destroy,_(" Set Sel. Type.")); g_signal_connect(G_OBJECT(winDlg),"delete_event",(GCallback)delete_child,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); n=0; t = getListPDBTypesFromGeom(&n); entry = create_label_combo(hbox,_(" Type Name : "),t,n, TRUE,-1,-1); if(strcmp(tmp,"UNK")) gtk_entry_set_text(GTK_ENTRY(entry),tmp); gtk_editable_set_editable((GtkEditable*) entry,TRUE); if(t) freeList(t,n); gtk_widget_realize(winDlg); button = create_button(winDlg,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); button = create_button(winDlg,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)setPDBTypeOfselectedAtoms,entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show_all(winDlg); } /********************************************************************************/ static void setResidueNameOfselectedAtoms(GtkWidget* button, GtkWidget* entry) { gint i; gint k = 0; G_CONST_RETURN gchar *tName; if(Natoms<1) return; tName = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(tName)<1) return; if(NFatoms<1) return; if(!NumFatoms) return; for (k=0;k<(gint)NFatoms;k++) for (i=0;i<(gint)Natoms;i++) { if(geometry[i].N== NumFatoms[k]) { if(geometry[i].Residue) g_free(geometry[i].Residue); geometry[i].Residue = g_strdup(tName); if(geometry0[i].Residue) g_free(geometry0[i].Residue); geometry0[i].Residue = g_strdup(tName); } } create_GeomXYZ_from_draw_grometry(); drawGeom(); } /********************************************************************************/ static gchar* getResidueNameOfselectedAtoms() { gint i; gint k = 0; if(Natoms<1) return g_strdup("DUM"); if(NFatoms<1) return g_strdup("DUM"); if(!NumFatoms) return g_strdup("DUM"); for (k=0;k<(gint)NFatoms;k++) for (i=0;i<(gint)Natoms;i++) { if(geometry[i].N== NumFatoms[k]) { g_strdup(geometry[i].Residue); } } return g_strdup("DUM"); } /********************************************************************************/ void setResidueNameOfselectedAtomsDlg() { GtkWidget *winDlg; GtkWidget *button; GtkWidget *hbox; GtkWidget *entry; GtkWidget *frame; GtkWidget *vboxframe; gint n=0; gchar** t = NULL; gchar tmp[100] = "UNK"; gint i; gint k; if(Natoms<1) return; if(NFatoms<1) return; if(!NumFatoms) return; k=0; for (i=0;i<(gint)Natoms;i++) { if(geometry[i].N == NumFatoms[k]) { sprintf(tmp,"%s",geometry[i].pdbType); break; } } winDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(winDlg),_("Set Residue name of selected atoms")); gtk_window_set_position(GTK_WINDOW(winDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(winDlg),GTK_WINDOW(GeomDlg)); add_child(GeomDlg,winDlg,gtk_widget_destroy,_(" Set Sel. Type.")); g_signal_connect(G_OBJECT(winDlg),"delete_event",(GCallback)delete_child,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); n=1; t = g_malloc(sizeof(gchar*)*2); t[0] = NULL; t[1] = NULL; t[0] = getResidueNameOfselectedAtoms(); entry = create_label_combo(hbox,_(" Residue Name : "),t,n, TRUE,-1,-1); g_free(t[0]); g_free(t); if(strcmp(tmp,"UNK")) gtk_entry_set_text(GTK_ENTRY(entry),tmp); gtk_editable_set_editable((GtkEditable*) entry,TRUE); gtk_widget_realize(winDlg); button = create_button(winDlg,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); button = create_button(winDlg,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)setResidueNameOfselectedAtoms,entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show_all(winDlg); } /********************************************************************************/ gchar** getListCharges(gint* nlist) { gchar** t = NULL; gint i; gint j; *nlist = 0; if(Natoms<1) return NULL; t = g_malloc(Natoms*sizeof(gchar*)); *nlist = 1; t[*nlist-1] = g_strdup_printf("%f",geometry0[0].Charge); for(i=1;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); n=0; t = getListCharges(&n); entry = create_label_combo(hbox, _(" Charge : "),t,n, TRUE,-1,-1); if(strcmp(tmp,"UNK")) gtk_entry_set_text(GTK_ENTRY(entry),tmp); gtk_editable_set_editable((GtkEditable*) entry,TRUE); if(t) freeList(t,n); gtk_widget_realize(winDlg); button = create_button(winDlg,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); button = create_button(winDlg,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)setChargeOfselectedAtoms,entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show_all(winDlg); } /********************************************************************************/ static void scaleChargesOfSelectedAtoms(GtkWidget* button, GtkWidget* entry) { gint i; gint k; G_CONST_RETURN gchar *strEntry; gdouble factor = 1.0; if(Natoms<1) return; if(NFatoms<1) return; if(!NumFatoms) return; strEntry = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(strEntry)<1) return; factor = atof(strEntry); for (k=0;k<(gint)NFatoms;k++) for (i=0;i<(gint)Natoms;i++) { if(geometry[i].N== NumFatoms[k]) { geometry[i].Charge *= factor; geometry0[i].Charge *= factor; } } drawGeom(); } /********************************************************************************/ void scaleChargesOfSelectedAtomsDlg() { GtkWidget *winDlg; GtkWidget *button; GtkWidget *hbox; GtkWidget *label; GtkWidget *entry; GtkWidget *frame; GtkWidget *vboxframe; winDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(winDlg),_("Scale charges of selected atoms")); gtk_window_set_position(GTK_WINDOW(winDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(winDlg),GTK_WINDOW(GeomDlg)); add_child(GeomDlg,winDlg,gtk_widget_destroy,_(" Scal. Char. ")); g_signal_connect(G_OBJECT(winDlg),"delete_event",(GCallback)delete_child,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); label = gtk_label_new(_(" Factor : ")); gtk_box_pack_start( GTK_BOX(hbox), label,TRUE,TRUE,0); entry = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry),"1.0"); gtk_box_pack_start( GTK_BOX(hbox), entry,TRUE,TRUE,0); gtk_widget_realize(winDlg); button = create_button(winDlg,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); button = create_button(winDlg,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)scaleChargesOfSelectedAtoms,entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show_all(winDlg); } /*****************************************************************************/ static void set_vect_ij(gint i, gint j, gdouble V[]) { V[0] = geometry0[j].X-geometry0[i].X; V[1] = geometry0[j].Y-geometry0[i].Y; V[2] = geometry0[j].Z-geometry0[i].Z; } /*****************************************************************************/ static void add_hydrogen_atoms(gint addToI, gint nH, gchar* HType) { static SAtomsProp propH = {0}; static gint begin = 0; gint i; gint k; gdouble dist = 1.0; gint geom = 0; /* 0=3D, 1=planar, 2=linear */ gdouble angle = 109.5*PI/180.0; gint nV; gint nC; gint* listOfConnectedAtoms = NULL; if(begin==0) { begin++; propH = prop_atom_get("H"); } dist = (geometry[addToI].Prop.covalentRadii+propH.covalentRadii)*0.9; if(nH==1 && strcmp(geometry0[addToI].Prop.symbol,"N")) { angle = 180.0*PI/180.0; geom = 2; } if(nH==2 && !strcmp(geometry0[addToI].Prop.symbol,"N")) { angle = 120.0*PI/180.0; geom = 1; } nV =geometry[addToI].Prop.maximumBondValence; if(nV<1) return; listOfConnectedAtoms = g_malloc(nV*sizeof(gint)); if(Natoms>0) { geometry0 = g_realloc(geometry0,(Natoms+nH)*sizeof(GeomDef)); geometry = g_realloc(geometry,(Natoms+nH)*sizeof(GeomDef)); } else { geometry0 = g_malloc(nH*sizeof(GeomDef)); geometry = g_malloc(nH*sizeof(GeomDef)); } nC = 0; for(i=0;i<(gint)Natoms;i++) { gint ni = geometry[i].N-1; if(geometry[addToI].typeConnections[ni]>0) { listOfConnectedAtoms[nC] = i; nC++; } } for(i=0;i1) { v3d_add(v2,v3,v4); if(v3d_length(v4)>1e-2) v3d_normal(v4); v3d_scale(v4,-1.0); v3d_cross(v2,v3,v5); if(v3d_length(v5)<1e-2) for(k=0;k<3;k++) v5[k] = rand()/(gdouble)RAND_MAX-0.5; v3d_normal(v5); v3d_scale(v4,0.5); v3d_scale(v5,0.5); v3d_add(v4,v5,v1); v3d_normal(v1); } else { v3d_add(v2,v3,v1); v3d_normal(v1); v3d_scale(v1,-1.0); } break; } default: if(nC>=3) { set_vect_ij(addToI, listOfConnectedAtoms[nC-3], v2); v3d_normal(v2); set_vect_ij(addToI, listOfConnectedAtoms[nC-2], v3); v3d_normal(v3); set_vect_ij(addToI, listOfConnectedAtoms[nC-1], v4); v3d_normal(v4); v3d_add(v2,v3,v5); v3d_add(v5,v4,v1); if(v3d_length(v1)<2e-1) v3d_cross(v2,v3,v1); v3d_normal(v1); v3d_scale(v1,-1.0); break; } } geometry[Natoms].X= geometry0[addToI].X + dist*v1[0]; geometry[Natoms].Y= geometry0[addToI].Y + dist*v1[1]; geometry[Natoms].Z= geometry0[addToI].Z + dist*v1[2]; geometry[Natoms].Prop = prop_atom_get("H"); geometry[Natoms].pdbType = g_strdup(HType); if(Natoms==0) { geometry[Natoms].Residue = g_strdup("H"); geometry[Natoms].ResidueNumber = 0; } else { geometry[Natoms].Residue = g_strdup(geometry[addToI].Residue); geometry[Natoms].ResidueNumber = geometry[addToI].ResidueNumber; } { gdouble charge; gchar* mmType = getMMTypeFromPDBTpl(geometry[Natoms].Residue,geometry[Natoms].pdbType,&charge); if(!strcmp(mmType,"UNK")) { geometry[Natoms].mmType = g_strdup(HType); g_free(mmType); } else geometry[Natoms].mmType = mmType; } geometry[Natoms].Layer = geometry[addToI].Layer; geometry[Natoms].N = Natoms+1; geometry[Natoms].typeConnections = NULL; geometry[Natoms].Charge = 0.0; geometry[Natoms].Variable = TRUE; geometry[Natoms].show = ShowHydrogenAtoms; geometry0[Natoms].X = geometry[Natoms].X; geometry0[Natoms].Y = geometry[Natoms].Y; geometry0[Natoms].Z = geometry[Natoms].Z; geometry0[Natoms].Prop = prop_atom_get("H"); geometry0[Natoms].mmType = g_strdup(geometry[Natoms].mmType); geometry0[Natoms].pdbType = g_strdup(geometry[Natoms].pdbType); geometry0[Natoms].Layer = geometry[Natoms].Layer; geometry0[Natoms].Residue = g_strdup(geometry[Natoms].Residue); geometry0[Natoms].ResidueNumber = geometry[Natoms].ResidueNumber; geometry0[Natoms].Charge = 0.0; geometry0[Natoms].Variable = TRUE; geometry0[Natoms].N = geometry[Natoms].N; geometry0[Natoms].show = geometry[Natoms].show; geometry0[Natoms].typeConnections = NULL; Natoms++; nC++; listOfConnectedAtoms = g_realloc(listOfConnectedAtoms, nC*sizeof(gint)); listOfConnectedAtoms[nC-1] = Natoms-1; } { gint i,j; for(i=0;i<(gint)Natoms-nH;i++) { geometry[i].typeConnections = g_realloc(geometry[i].typeConnections,Natoms*sizeof(gint)); for(j=Natoms-nH;j<(gint)Natoms;j++) geometry[i].typeConnections[j] = 0; geometry0[i].typeConnections = g_realloc(geometry0[i].typeConnections,Natoms*sizeof(gint)); for(j=Natoms-nH;j<(gint)Natoms;j++) geometry0[i].typeConnections[j] = 0; } for(i=(gint)Natoms-nH;i<(gint)Natoms;i++) { geometry[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;j<(gint)Natoms;j++) geometry[i].typeConnections[j] = 0; geometry0[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;j<(gint)Natoms;j++) geometry0[i].typeConnections[j] = 0; } for(i=(gint)Natoms-nH;i<(gint)Natoms;i++) { geometry[addToI].typeConnections[geometry[i].N-1] = 1; geometry0[addToI].typeConnections[geometry0[i].N-1] = 1; geometry[i].typeConnections[geometry[addToI].N-1] = 1; geometry0[i].typeConnections[geometry0[addToI].N-1] = 1; } /* adjust_multiple_bonds_with_one_atom(addToI);*/ } if(listOfConnectedAtoms) g_free(listOfConnectedAtoms); } /*****************************************************************************/ static gboolean add_hydrogen_atom(gint addToI) { gint nMultiple = 0; gint nAll = 0; gchar HType[100] = "H"; gint j; gint nV = 0; gint nH = 0; if(Natoms<1 ) return FALSE; if(addToI>Natoms-1) return FALSE; nV =geometry[addToI].Prop.maximumBondValence; if(nV<1) return FALSE; for(j=0;j<(gint)Natoms;j++) { gint nj = geometry[j].N-1; if(geometry[addToI].typeConnections[nj]>1) nMultiple++; nAll += geometry[addToI].typeConnections[nj]; } nH = nV - nAll; if(nH<1) { return FALSE; } if(nAll>=geometry[addToI].Prop.maximumBondValence && nMultiple==0) { return FALSE; } if(!strcmp(geometry[addToI].pdbType,"CA")) sprintf(HType,"HA"); else if(!strcmp(geometry[addToI].pdbType,"OH")) sprintf(HType,"HO"); else if(strstr(geometry[addToI].pdbType,"OE")) sprintf(HType,"HO"); else if(strstr(geometry[addToI].pdbType,"OD")) sprintf(HType,"HO"); else if(!strcmp(geometry[addToI].pdbType,"OG1")) sprintf(HType,"HG1"); else if(!strcmp(geometry[addToI].pdbType,"CT")) sprintf(HType,"HT"); else if(!strcmp(geometry[addToI].pdbType,"CB")) sprintf(HType,"HB1"); else if(!strcmp(geometry[addToI].pdbType,"SG")) sprintf(HType,"HG"); else if(!strcmp(geometry[addToI].pdbType,"CD1")) sprintf(HType,"HD11"); else if(!strcmp(geometry[addToI].pdbType,"CD2")) sprintf(HType,"HD22"); else if(strstr(geometry[addToI].pdbType,"CD")) sprintf(HType,"HD1"); else if(!strcmp(geometry[addToI].pdbType,"CG1")) sprintf(HType,"HG11"); else if(!strcmp(geometry[addToI].pdbType,"CG2")) sprintf(HType,"HG22"); else if(strstr(geometry[addToI].pdbType,"CG")) sprintf(HType,"HG1"); else if(!strcmp(geometry[addToI].pdbType,"CE1")) sprintf(HType,"HE1"); else if(!strcmp(geometry[addToI].pdbType,"CE2")) sprintf(HType,"HE2"); else if(strstr(geometry[addToI].pdbType,"CE")) sprintf(HType,"HE2"); else if(strstr(geometry[addToI].pdbType,"NZ")) sprintf(HType,"HZ2"); else if(strstr(geometry[addToI].pdbType,"NZ")) sprintf(HType,"HZ2"); else if(!strcmp(geometry[addToI].pdbType,"CZ1")) sprintf(HType,"HZ1"); else if(!strcmp(geometry[addToI].pdbType,"CZ2")) sprintf(HType,"HZ2"); else if(!strcmp(geometry[addToI].pdbType,"CZ3")) sprintf(HType,"HZ3"); else if(strstr(geometry[addToI].pdbType,"CZ")) sprintf(HType,"HZ"); else if(!strcmp(geometry[addToI].pdbType,"NE")) sprintf(HType,"HE"); else if(!strcmp(geometry[addToI].pdbType,"N")) sprintf(HType,"H"); else if(!strcmp(geometry[addToI].pdbType,"NE1")) sprintf(HType,"HE1"); else if(!strcmp(geometry[addToI].pdbType,"NH1")) sprintf(HType,"HH11"); else if(!strcmp(geometry[addToI].pdbType,"NH2")) sprintf(HType,"HH21"); else if(!strcmp(geometry[addToI].pdbType,"CH1")) sprintf(HType,"HH1"); else if(!strcmp(geometry[addToI].pdbType,"CH2")) sprintf(HType,"HH2"); else if(!strcmp(geometry[addToI].pdbType,"CH3")) sprintf(HType,"H2"); else { sprintf(HType,"%s1",geometry[addToI].pdbType); if(strlen(HType)>0) HType[0] = 'H'; } add_hydrogen_atoms(addToI, nH, HType); reset_charges_multiplicities(); return TRUE; } /*****************************************************************************/ static gboolean add_max_hydrogen_atom(gint addToI) { gint nAll = 0; gchar HType[100] = "H"; gint j; gint nV = 0; gint nH = 0; if(Natoms<1 ) return FALSE; if(addToI>Natoms-1) return FALSE; nV =geometry[addToI].Prop.maximumBondValence; if(nV<1) return FALSE; for(j=0;j<(gint)Natoms;j++) { gint nj = geometry[j].N-1; if(geometry[addToI].typeConnections[nj]>0) nAll += 1; } /* printf("Type = %s res = %s\n", geometry[addToI].mmType, geometry[addToI].Residue); */ nH = nV - nAll; if(nH<1) { return FALSE; } if(!strcmp(geometry[addToI].pdbType,"CA")) sprintf(HType,"HA"); else if(!strcmp(geometry[addToI].pdbType,"OH")) sprintf(HType,"HO"); else if(strstr(geometry[addToI].pdbType,"OE")) sprintf(HType,"HO"); else if(strstr(geometry[addToI].pdbType,"OD")) sprintf(HType,"HO"); else if(!strcmp(geometry[addToI].pdbType,"OG1")) sprintf(HType,"HG1"); else if(!strcmp(geometry[addToI].pdbType,"CT")) sprintf(HType,"HT"); else if(!strcmp(geometry[addToI].pdbType,"CB")) sprintf(HType,"HB1"); else if(!strcmp(geometry[addToI].pdbType,"SG")) sprintf(HType,"HG"); else if(!strcmp(geometry[addToI].pdbType,"CD1")) sprintf(HType,"HD11"); else if(!strcmp(geometry[addToI].pdbType,"CD2")) sprintf(HType,"HD22"); else if(strstr(geometry[addToI].pdbType,"CD")) sprintf(HType,"HD1"); else if(!strcmp(geometry[addToI].pdbType,"CG1")) sprintf(HType,"HG11"); else if(!strcmp(geometry[addToI].pdbType,"CG2")) sprintf(HType,"HG22"); else if(strstr(geometry[addToI].pdbType,"CG")) sprintf(HType,"HG1"); else if(!strcmp(geometry[addToI].pdbType,"CE1")) sprintf(HType,"HE1"); else if(!strcmp(geometry[addToI].pdbType,"CE2")) sprintf(HType,"HE2"); else if(strstr(geometry[addToI].pdbType,"CE")) sprintf(HType,"HE2"); else if(strstr(geometry[addToI].pdbType,"NZ")) sprintf(HType,"HZ2"); else if(strstr(geometry[addToI].pdbType,"NZ")) sprintf(HType,"HZ2"); else if(!strcmp(geometry[addToI].pdbType,"CZ1")) sprintf(HType,"HZ1"); else if(!strcmp(geometry[addToI].pdbType,"CZ2")) sprintf(HType,"HZ2"); else if(!strcmp(geometry[addToI].pdbType,"CZ3")) sprintf(HType,"HZ3"); else if(strstr(geometry[addToI].pdbType,"CZ")) sprintf(HType,"HZ"); else if(!strcmp(geometry[addToI].pdbType,"NE")) sprintf(HType,"HE"); else if(!strcmp(geometry[addToI].pdbType,"N")) sprintf(HType,"H"); else if(!strcmp(geometry[addToI].pdbType,"NE1")) sprintf(HType,"HE1"); else if(!strcmp(geometry[addToI].pdbType,"NH1")) sprintf(HType,"HH11"); else if(!strcmp(geometry[addToI].pdbType,"NH2")) sprintf(HType,"HH21"); else if(!strcmp(geometry[addToI].pdbType,"CH1")) sprintf(HType,"HH1"); else if(!strcmp(geometry[addToI].pdbType,"CH2")) sprintf(HType,"HH2"); else if(!strcmp(geometry[addToI].pdbType,"CH3")) sprintf(HType,"H2"); else { sprintf(HType,"%s1",geometry[addToI].pdbType); if(strlen(HType)>0) HType[0] = 'H'; } add_hydrogen_atoms(addToI, nH, HType); setMultipleBonds(); reset_charges_multiplicities(); return TRUE; } /*****************************************************************************/ static gboolean add_one_hydrogen_atom(gint addToI) { gint nMultiple = 0; gint nAll = 0; gchar HType[100] = "H"; gint j; gint nV = 0; gint nH = 0; gint nC = 0; if(Natoms<1 ) return FALSE; if(addToI>Natoms-1) return FALSE; nV =geometry[addToI].Prop.maximumBondValence; if(nV<1) return FALSE; for(j=0;j<(gint)Natoms;j++) { gint nj = geometry[j].N-1; if(geometry[addToI].typeConnections[nj]>0) nC++; if(geometry[addToI].typeConnections[nj]>1) nMultiple++; nAll += geometry[addToI].typeConnections[nj]; } nH = nV - nC; if(nH<1) { return FALSE; } else nH = 1; if(nAll>=geometry[addToI].Prop.maximumBondValence && nMultiple==0) { return FALSE; } if(!strcmp(geometry[addToI].pdbType,"CA")) sprintf(HType,"HA"); else if(!strcmp(geometry[addToI].pdbType,"OH")) sprintf(HType,"HO"); else if(strstr(geometry[addToI].pdbType,"OE")) sprintf(HType,"HO"); else if(strstr(geometry[addToI].pdbType,"OD")) sprintf(HType,"HO"); else if(!strcmp(geometry[addToI].pdbType,"OG1")) sprintf(HType,"HG1"); else if(!strcmp(geometry[addToI].pdbType,"CT")) sprintf(HType,"HT"); else if(!strcmp(geometry[addToI].pdbType,"CB")) sprintf(HType,"HB1"); else if(!strcmp(geometry[addToI].pdbType,"SG")) sprintf(HType,"HG"); else if(!strcmp(geometry[addToI].pdbType,"CD1")) sprintf(HType,"HD11"); else if(!strcmp(geometry[addToI].pdbType,"CD2")) sprintf(HType,"HD22"); else if(strstr(geometry[addToI].pdbType,"CD")) sprintf(HType,"HD1"); else if(!strcmp(geometry[addToI].pdbType,"CG1")) sprintf(HType,"HG11"); else if(!strcmp(geometry[addToI].pdbType,"CG2")) sprintf(HType,"HG22"); else if(strstr(geometry[addToI].pdbType,"CG")) sprintf(HType,"HG1"); else if(!strcmp(geometry[addToI].pdbType,"CE1")) sprintf(HType,"HE1"); else if(!strcmp(geometry[addToI].pdbType,"CE2")) sprintf(HType,"HE2"); else if(strstr(geometry[addToI].pdbType,"CE")) sprintf(HType,"HE2"); else if(strstr(geometry[addToI].pdbType,"NZ")) sprintf(HType,"HZ2"); else if(strstr(geometry[addToI].pdbType,"NZ")) sprintf(HType,"HZ2"); else if(!strcmp(geometry[addToI].pdbType,"CZ1")) sprintf(HType,"HZ1"); else if(!strcmp(geometry[addToI].pdbType,"CZ2")) sprintf(HType,"HZ2"); else if(!strcmp(geometry[addToI].pdbType,"CZ3")) sprintf(HType,"HZ3"); else if(strstr(geometry[addToI].pdbType,"CZ")) sprintf(HType,"HZ"); else if(!strcmp(geometry[addToI].pdbType,"NE")) sprintf(HType,"HE"); else if(!strcmp(geometry[addToI].pdbType,"N")) sprintf(HType,"H"); else if(!strcmp(geometry[addToI].pdbType,"NE1")) sprintf(HType,"HE1"); else if(!strcmp(geometry[addToI].pdbType,"NH1")) sprintf(HType,"HH11"); else if(!strcmp(geometry[addToI].pdbType,"NH2")) sprintf(HType,"HH21"); else if(!strcmp(geometry[addToI].pdbType,"CH1")) sprintf(HType,"HH1"); else if(!strcmp(geometry[addToI].pdbType,"CH2")) sprintf(HType,"HH2"); else if(!strcmp(geometry[addToI].pdbType,"CH3")) sprintf(HType,"H2"); else { sprintf(HType,"%s1",geometry[addToI].pdbType); if(strlen(HType)>0) HType[0] = 'H'; } add_hydrogen_atoms(addToI, nH, HType); return TRUE; } /********************************************************************************/ void addMaxHydrogens() { gint i; gint k = 0; if(Natoms<1) return; if(!NumFatoms) SelectAllAtoms(); if(NFatoms<1) return; if(!NumFatoms) return; for (k=0;k<(gint)NFatoms;k++) for (i=0;i<(gint)Natoms;i++) { if(geometry[i].N== NumFatoms[k]) { add_max_hydrogen_atom(i); break; } } reset_multiple_bonds(); create_GeomXYZ_from_draw_grometry(); reset_charges_multiplicities(); drawGeom(); } /********************************************************************************/ void addHydrogens() { gint i; gint k = 0; if(Natoms<1) return; if(!NumFatoms) SelectAllAtoms(); if(NFatoms<1) return; if(!NumFatoms) return; for (k=0;k<(gint)NFatoms;k++) for (i=0;i<(gint)Natoms;i++) { if(geometry[i].N== NumFatoms[k]) { add_hydrogen_atom(i); break; } } create_GeomXYZ_from_draw_grometry(); reset_charges_multiplicities(); drawGeom(); } /********************************************************************************/ void addOneHydrogen() { gint i; gint k = 0; if(Natoms<1) return; if(!NumFatoms) SelectAllAtoms(); if(NFatoms<1) return; if(!NumFatoms) return; for (k=0;k<(gint)NFatoms;k++) for (i=0;i<(gint)Natoms;i++) { if(geometry[i].N== NumFatoms[k]) { add_one_hydrogen_atom(i); break; } } create_GeomXYZ_from_draw_grometry(); reset_charges_multiplicities(); drawGeom(); } /*******************************************************************/ void adjust_hydrogens_connected_to_atom(gint ia) { if(Natoms<1) return; if(ia<0 || ia>Natoms-1) return; { gint nj = 0; gint j; gint nBondsA = 0; for(j=0;j<(gint)Natoms;j++) { nj = geometry[j].N-1; if(geometry[ia].typeConnections && geometry[ia].typeConnections[nj]>0) nBondsA += geometry[ia].typeConnections[nj]; } if( nBondsA==geometry[ia].Prop.maximumBondValence ) return; if(nBondsAgeometry[ia].Prop.maximumBondValence) { gint nHA = nBondsA-geometry[ia].Prop.maximumBondValence; deleteHydrogensConnectedTo(ia, nHA); } reset_charges_multiplicities(); } } /*******************************************************************/ void adjust_hydrogens_connected_to_atoms(gint ia, gint ib) { if(Natoms<2) return; if(ia<0 || ib<0 || ia>Natoms-1 || ib>Natoms-1) return; if(!geometry[ia].typeConnections) return; if(!geometry[ib].typeConnections) return; { gint nj = 0; gint j; gint nBondsA = 0; gint nBondsB = 0; for(j=0;j<(gint)Natoms;j++) { nj = geometry[j].N-1; if(geometry[ia].typeConnections[nj]>0) nBondsA += geometry[ia].typeConnections[nj]; if(geometry[ib].typeConnections[nj]>0) nBondsB += geometry[ib].typeConnections[nj]; } if( nBondsA==geometry[ia].Prop.maximumBondValence && nBondsB==geometry[ib].Prop.maximumBondValence ) return; if(nBondsAgeometry[ia].Prop.maximumBondValence && nBondsB<=geometry[ib].Prop.maximumBondValence) { gint nHA = nBondsA-geometry[ia].Prop.maximumBondValence; deleteHydrogensConnectedTo(ia, nHA); } if(nBondsB>geometry[ib].Prop.maximumBondValence && nBondsA<=geometry[ia].Prop.maximumBondValence) { gint nHB = nBondsA-geometry[ib].Prop.maximumBondValence; deleteHydrogensConnectedTo(ib, nHB); } if(nBondsA>geometry[ia].Prop.maximumBondValence && nBondsB>geometry[ib].Prop.maximumBondValence) { gint nHA = nBondsA-geometry[ia].Prop.maximumBondValence; gint nHB = nBondsB-geometry[ib].Prop.maximumBondValence; gint* numHA = NULL; gint* numHB = NULL; gint kA = 0; gint kB = 0; gint k; gint i; GeomDef tmp; gint* oldN = NULL; if(nHA>0) numHA = g_malloc(nHA*sizeof(gint)); if(nHB>0) numHB = g_malloc(nHB*sizeof(gint)); for(j=0;j=nHA) break; } } kB = 0; for(j=0;j<(gint)Natoms;j++) { if(j==ib) continue; nj = geometry[j].N-1; if(geometry[ib].typeConnections[nj] && !strcmp(geometry[j].Prop.symbol,"H")) { numHB[kB++] = geometry[j].N; if(kB>=nHB) break; } } copy_connections(geometry0, geometry, Natoms); for (i=0;i<(gint)Natoms-1;i++) { gboolean toDelete = FALSE; for(k=0;k0) { geometry0 = g_realloc(geometry0,Natoms*sizeof(GeomDef)); geometry = g_realloc(geometry,Natoms*sizeof(GeomDef)); } else { if(geometry0) g_free(geometry0); geometry0 = NULL; if(geometry) g_free(geometry); geometry = NULL; Natoms = 0; } Ddef = FALSE; reset_charges_multiplicities(); } } } /*****************************************************************************/ static void add_hydrogen_atoms_tpl(gint addToI, gint nA) { static SAtomsProp propH = {0}; static gint begin = 0; gint i; gint k; gdouble dist = 1.0; gint geom = 0; /* 0=3D, 1=planar, 2=linear */ gdouble angle = 109.5*PI/180.0; gint nV; gint nC; gint* listOfConnectedAtoms = NULL; gint nH; gchar* hAtoms[10]; gint nAll; gint nOldH = 0; nV =geometry[addToI].Prop.maximumBondValence; if(nV<1) return; nAll = 0; nOldH = 0; for(i=0;i<(gint)nA;i++) { gint ni = geometry[i].N-1; if(geometry[addToI].typeConnections[ni]>0) { nAll += 1; } } if(!strcmp(geometry[addToI].Prop.symbol,"N")) nV++; for(i=0;i<10;i++) hAtoms[i] = g_malloc(sizeof(gchar)*100); nH = getHydrogensFromPDBTpl(geometry[addToI].Residue,geometry[addToI].pdbType, hAtoms); nH -= nOldH; if(nH<1) { for(i=0;i<10;i++) g_free(hAtoms[i]); return; } if(begin==0) { begin++; propH = prop_atom_get("H"); } dist = (geometry[addToI].Prop.covalentRadii+propH.covalentRadii)*0.9; listOfConnectedAtoms = g_malloc(nV*sizeof(gint)); if(Natoms>0) { geometry0 = g_realloc(geometry0,(Natoms+nH)*sizeof(GeomDef)); geometry = g_realloc(geometry,(Natoms+nH)*sizeof(GeomDef)); } else { geometry0 = g_malloc(nH*sizeof(GeomDef)); geometry = g_malloc(nH*sizeof(GeomDef)); } nC = 0; for(i=0;i<(gint)nA;i++) { gint ni = geometry[i].N-1; if(geometry[addToI].typeConnections[ni]>0) { listOfConnectedAtoms[nC] = i; nC++; } } for(i=0;i=3) { set_vect_ij(addToI, listOfConnectedAtoms[nC-3], v2); v3d_normal(v2); set_vect_ij(addToI, listOfConnectedAtoms[nC-2], v3); v3d_normal(v3); set_vect_ij(addToI, listOfConnectedAtoms[nC-1], v4); v3d_normal(v4); v3d_add(v2,v3,v5); v3d_add(v5,v4,v1); v3d_normal(v1); v3d_scale(v1,-1.0); break; } } geometry[Natoms].X= geometry0[addToI].X + dist*v1[0]; geometry[Natoms].Y= geometry0[addToI].Y + dist*v1[1]; geometry[Natoms].Z= geometry0[addToI].Z + dist*v1[2]; geometry[Natoms].Prop = prop_atom_get("H"); geometry[Natoms].mmType = g_strdup(hAtoms[i]); geometry[Natoms].pdbType = g_strdup(hAtoms[i]); geometry[Natoms].Layer = geometry[addToI].Layer; geometry[Natoms].N = Natoms+1; geometry[Natoms].typeConnections = NULL; if(Natoms==0) { geometry[Natoms].Residue = g_strdup("H"); geometry[Natoms].ResidueNumber = 0; } else { geometry[Natoms].Residue = g_strdup(geometry[addToI].Residue); geometry[Natoms].ResidueNumber = geometry[addToI].ResidueNumber; } geometry[Natoms].Charge = 0.0; geometry[Natoms].Variable = TRUE; geometry[Natoms].show = ShowHydrogenAtoms; geometry0[Natoms].X = geometry[Natoms].X; geometry0[Natoms].Y = geometry[Natoms].Y; geometry0[Natoms].Z = geometry[Natoms].Z; geometry0[Natoms].Prop = prop_atom_get("H"); geometry0[Natoms].mmType = g_strdup(geometry[Natoms].mmType); geometry0[Natoms].pdbType = g_strdup(geometry[Natoms].pdbType); geometry0[Natoms].Layer = geometry[Natoms].Layer; geometry0[Natoms].Residue = g_strdup(geometry[Natoms].Residue); geometry0[Natoms].ResidueNumber = geometry[Natoms].ResidueNumber; geometry0[Natoms].Charge = 0.0; geometry0[Natoms].Variable = TRUE; geometry0[Natoms].N = geometry[Natoms].N; geometry0[Natoms].show = geometry[Natoms].show; geometry0[Natoms].typeConnections = NULL; Natoms++; nC++; listOfConnectedAtoms = g_realloc(listOfConnectedAtoms, nC*sizeof(gint)); listOfConnectedAtoms[nC-1] = Natoms-1; } { gint i,j; for(i=0;i<(gint)Natoms-nH;i++) { geometry[i].typeConnections = g_realloc(geometry[i].typeConnections,Natoms*sizeof(gint)); for(j=Natoms-nH;j<(gint)Natoms;j++) geometry[i].typeConnections[j] = 0; geometry0[i].typeConnections = g_realloc(geometry0[i].typeConnections,Natoms*sizeof(gint)); for(j=Natoms-nH;j<(gint)Natoms;j++) geometry0[i].typeConnections[j] = 0; } for(i=(gint)Natoms-nH;i<(gint)Natoms;i++) { geometry[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;j<(gint)Natoms;j++) geometry[i].typeConnections[j] = 0; geometry0[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;j<(gint)Natoms;j++) geometry0[i].typeConnections[j] = 0; } for(i=(gint)Natoms-nH;i<(gint)Natoms;i++) { geometry[addToI].typeConnections[geometry[i].N-1] = 1; geometry0[addToI].typeConnections[geometry0[i].N-1] = 1; geometry[i].typeConnections[geometry[addToI].N-1] = 1; geometry0[i].typeConnections[geometry0[addToI].N-1] = 1; } adjust_multiple_bonds_with_one_atom(addToI); } if(listOfConnectedAtoms) g_free(listOfConnectedAtoms); for(i=0;i<10;i++) g_free(hAtoms[i]); } /********************************************************************************/ void addHydrogensTpl() { gint i; gint k = 0; gint nA = Natoms; if(Natoms<1) return; if(!NumFatoms) SelectAllAtoms(); if(NFatoms<1) return; if(!NumFatoms) return; for (k=0;k<(gint)NFatoms;k++) for (i=0;i<(gint)nA;i++) { if(geometry[i].N== NumFatoms[k]) { add_hydrogen_atoms_tpl(i,nA); break; } } setMMTypesChargesFromPDBTpl(2); create_GeomXYZ_from_draw_grometry(); reset_charges_multiplicities(); drawGeom(); } /********************************************************************************/ void DeleteMolecule() { gchar *t =N_("Do you want to really destroy this molecule?"); if(Natoms>0) Continue_YesNo(delete_molecule, NULL,t); else Message(_("No molecule to delete\n"),_("Warning"),TRUE); } /********************************************************************************/ void SetOriginAtCenter(gpointer data, guint Operation,GtkWidget* wid) { gdouble C[3]; gint i; if(Natoms<1) return; for(i=0;i<3;i++) C[i] = 0.0; for(i=0;i<(gint)Natoms;i++) { C[0] += geometry0[i].X; C[1] += geometry0[i].Y; C[2] += geometry0[i].Z; } for(i=0;i<3;i++) C[i] /= Natoms; for(i=0;i<(gint)Natoms;i++) { geometry0[i].X -= C[0]; geometry0[i].Y -= C[1]; geometry0[i].Z -= C[2]; } Ddef = FALSE; TransX = 0; TransY = 0; //reset_origine_molecule_drawgeom(); for (i=0;i<3;i++) Orig[i] += C[i]; drawGeom(); set_statubar_pop_sel_atom(); return; } /********************************************************************************/ void TraitementGeom(gpointer data, guint Operation,GtkWidget* wid) { switch((GabEditGeomOperation)Operation) { case SAVEJPEG: file_chooser_save(save_geometry_jpeg_file,_("Save image in jpeg file format"),GABEDIT_TYPEFILE_JPEG,GABEDIT_TYPEWIN_GEOM); break; case SAVEPPM: file_chooser_save(save_geometry_ppm_file,_("Save image in ppm file format"),GABEDIT_TYPEFILE_PPM,GABEDIT_TYPEWIN_GEOM); break; case SAVEBMP: file_chooser_save(save_geometry_bmp_file,_("Save image in bmp file format"),GABEDIT_TYPEFILE_BMP,GABEDIT_TYPEWIN_GEOM); break; case SAVEPS: file_chooser_save(save_geometry_ps_file,_("Save image in ps file format"),GABEDIT_TYPEFILE_PS,GABEDIT_TYPEWIN_GEOM); break; default: printf("Operation = %d\n",Operation); } } /********************************************************************************/ GdkPixmap *get_drawing_pixmap() { return pixmap; } /********************************************************************************/ cairo_t *get_drawing_cairo() { return cr; } /********************************************************************************/ GdkColormap* get_drawing_colormap() { GdkColormap *colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); return colormap; } /********************************************************************************/ void read_geometries_convergence(gpointer data, guint Operation,GtkWidget* wid) { switch(Operation) { case FGEOMCONVDALTON: file_chooser_open(read_geometries_conv_dalton,_("Load Geom. Conv. From Dalton Output file"), GABEDIT_TYPEFILE_DALTON,GABEDIT_TYPEWIN_GEOM); break; case FGEOMCONVGAMESS: file_chooser_open(read_geometries_conv_dalton,_("Load Geom. Conv. From Gamess Output file"), GABEDIT_TYPEFILE_GAMESS,GABEDIT_TYPEWIN_GEOM); break; case FGEOMCONVGAUSS: file_chooser_open(read_geometries_conv_gaussian,_("Load Geom. Conv. From Gaussian Output file"), GABEDIT_TYPEFILE_GAUSSIAN,GABEDIT_TYPEWIN_GEOM); break; case FGEOMCONVMOLPRO: file_chooser_open(read_geometries_conv_molpro,_("Load Geom. Conv. From Molpro log file"), GABEDIT_TYPEFILE_MOLPRO_LOG,GABEDIT_TYPEWIN_GEOM); break; case FGEOMCONVMOLDEN: file_chooser_open(read_geometries_conv_molden,_("Load Geom. Conv. From Molden file"), GABEDIT_TYPEFILE_MOLDEN,GABEDIT_TYPEWIN_GEOM); break; case FGEOMCONVGABEDIT: file_chooser_open(read_geometries_conv_gabedit,_("Load Geom. Conv. From Gabedit file"), GABEDIT_TYPEFILE_GABEDIT,GABEDIT_TYPEWIN_GEOM); break; case FGEOMCONVMPQC: file_chooser_open(read_geometries_conv_mpqc,_("Load Geom. Conv. From MPQC output file"), GABEDIT_TYPEFILE_MPQC,GABEDIT_TYPEWIN_GEOM); break; case FGEOMCONVXYZ: file_chooser_open(read_geometries_conv_xyz,_("Load Geom. Conv. From XYZ"), GABEDIT_TYPEFILE_XYZ,GABEDIT_TYPEWIN_GEOM); break; default : break; } } /********************************************************************************/ void save_geometry(gpointer data, guint Operation,GtkWidget* wid) { if(Natoms<1) { Message(_("Sorry,No molecule to save\n"),_("Warning"),TRUE); return; } switch(Operation) { case FXYZ : create_GeomXYZ_from_draw_grometry(); file_chooser_save(save_geometry_xyz_file,_("Save geometry in xyz file"), GABEDIT_TYPEFILE_XYZ,GABEDIT_TYPEWIN_GEOM); break; case FMOL2 : create_GeomXYZ_from_draw_grometry(); file_chooser_save(save_geometry_mol2_file,_("Save geometry in mol2 file"), GABEDIT_TYPEFILE_MOL2,GABEDIT_TYPEWIN_GEOM); break; case FTINKER : create_GeomXYZ_from_draw_grometry(); file_chooser_save(save_geometry_tinker_file,_("Save geometry in tinker file"), GABEDIT_TYPEFILE_TINKER,GABEDIT_TYPEWIN_GEOM); break; case FPDB : create_GeomXYZ_from_draw_grometry(); file_chooser_save(save_geometry_pdb_file,_("Save geometry in pdb file"), GABEDIT_TYPEFILE_PDB,GABEDIT_TYPEWIN_GEOM); break; case FHIN : create_GeomXYZ_from_draw_grometry(); file_chooser_save(save_geometry_hin_file,_("Save geometry in hyperchem file"), GABEDIT_TYPEFILE_HIN,GABEDIT_TYPEWIN_GEOM); break; case FGABEDIT : create_GeomXYZ_from_draw_grometry(); file_chooser_save(save_geometry_gabedit_file,_("Save geometry in gabedit file"), GABEDIT_TYPEFILE_GABEDIT,GABEDIT_TYPEWIN_GEOM); break; case FMZMAT : create_GeomXYZ_from_draw_grometry(); if(!xyz_to_zmat()) { Message(_("Sorry\nConversion is not possible from XYZ to Zmat"),_("Error"),TRUE); return; } file_chooser_save(save_geometry_mzmatrix_file,_("Save geometry in mopac z-matrix file"), GABEDIT_TYPEFILE_MZMAT,GABEDIT_TYPEWIN_GEOM); create_GeomXYZ_from_draw_grometry(); MethodeGeom = GEOM_IS_XYZ; break; case FGZMAT : create_GeomXYZ_from_draw_grometry(); if(!xyz_to_zmat()) { Message(_("Sorry\nConversion is not possible from XYZ to Zmat"),_("Error"),TRUE); return; } file_chooser_save(save_geometry_gzmatrix_file,_("Save geometry in gaussian z-matrix file"), GABEDIT_TYPEFILE_GZMAT,GABEDIT_TYPEWIN_GEOM); create_GeomXYZ_from_draw_grometry(); MethodeGeom = GEOM_IS_XYZ; break; default : break; } } /********************************************************************************/ void read_geometry(gpointer data, guint Operation,GtkWidget* wid) { switch(Operation) { case FXYZ : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_XYZ);break; case FGZMAT : MethodeGeom = GEOM_IS_ZMAT;selc_ZMatrix_file();break; case FMZMAT : MethodeGeom = GEOM_IS_ZMAT;selc_ZMatrix_mopac_file();break; case FMOL2 : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_MOL2);break; case FTINKER : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_TINKER);break; case FPDB : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_PDB);break; case FHIN : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_HIN);break; case FDALTONIN : break; case FDALTONFIRST: MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_DALTONFIRST);break; case FDALTONLAST : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_DALTONLAST);break; case FGAUSSIN : selc_all_input_file(_("Read Geometry from a Gaussian input file"));break; case FGAUSSOUTFIRST: MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_GAUSSOUTFIRST);break; case FGAUSSOUTLAST : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_GAUSSOUTLAST);break; case FMOLCASIN : selc_all_input_file(_("Read Geometry from a Molcas input file"));break; case FMOLCASOUTFIRST: MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_MOLCASOUTFIRST);break; case FMOLCASOUTLAST : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_MOLCASOUTLAST);break; case FMOLPROIN : selc_all_input_file(_("Read Geometry from a Molpro input file"));break; case FMOLPROOUTFIRST: MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_MOLPROOUTFIRST);break; case FMOLPROOUTLAST : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_MOLPROOUTLAST);break; case FMPQCIN : selc_all_input_file(_("Read Geometry from a MPQC input file"));break; case FMPQCOUTFIRST: MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_MPQCOUTFIRST);break; case FMPQCOUTLAST : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_MPQCOUTLAST);break; } } /********************************************************************************/ guint label_option() { return LabelOption; } /********************************************************************************/ gboolean dipole_draw_mode() { return DrawDipole; } /********************************************************************************/ gboolean distances_draw_mode() { return DrawDistance; } /********************************************************************************/ gboolean dipole_mode() { return ShowDipole; } /********************************************************************************/ gboolean stick_mode() { if(TypeGeom== GABEDIT_TYPEGEOM_STICK) return TRUE; return FALSE; } /********************************************************************************/ gboolean space_fill_mode() { if( TypeGeom == GABEDIT_TYPEGEOM_SPACE ) return TRUE; return FALSE; } /********************************************************************************/ gboolean pers_mode() { return PersMode; } /********************************************************************************/ gboolean shad_mode() { return ShadMode; } /********************************************************************************/ gboolean light_mode() { return LightMode; } /********************************************************************************/ gboolean ortep_mode() { return OrtepMode; } /********************************************************************************/ gboolean cartoon_mode() { return CartoonMode; } /********************************************************************************/ gdouble get_frag_angle() { return fragAngle; } /********************************************************************************/ void set_frag_angle(gdouble a) { fragAngle = a; } /********************************************************************************/ void set_HBonds_dialog_geom(GtkWidget *win, guint data) { set_HBonds_dialog (GeomDlg); } /********************************************************************************/ void set_povray_options_geom(GtkWidget *win, guint data) { createPovrayOptionsWindow(GeomDlg); } /********************************************************************************/ void HideShowMeasure(gboolean hiding) { if(hiding) { gtk_widget_hide(vboxhandle); gtk_widget_hide(GeomDrawingArea); gtk_widget_show(GeomDrawingArea); while( gtk_events_pending() ) gtk_main_iteration(); } else gtk_widget_show(vboxhandle); MeasureIsHide=hiding; } /********************************************************************************/ void AdjustHydrogensYesNo(gboolean adjust) { AdjustHydrogenAtoms = adjust; } /********************************************************************************/ gboolean getAdjustHydrogensYesNo() { return AdjustHydrogenAtoms; } /********************************************************************************/ void RebuildConnectionsDuringEditionYesNo(gboolean rebuild) { RebuildConnectionsDuringEdition = rebuild; } /********************************************************************************/ gboolean getRebuildConnectionsDuringEditionYesNo() { return RebuildConnectionsDuringEdition; } /********************************************************************************/ static gint ScaleByMouse(gpointer data) { GdkEventButton *bevent=(GdkEventButton *)data; switch(OperationType) { case SCALEGEOM : factor +=((bevent->y - BeginY) / GeomDrawingArea->allocation.height) * 5; if(factor<0.1) factor = 0.1; if(factor>10) factor = 10; drawGeom(); break; case SCALESTICK : factorstick +=((bevent->y - BeginY) / GeomDrawingArea->allocation.height) * 5; if(factorstick <0.1) factorstick = 0.1; if(factorstick >10) factorstick = 10; drawGeom(); break; case SCALEBALL : factorball +=((bevent->y - BeginY) / GeomDrawingArea->allocation.height) * 5; if(factorball <0.1) factorball = 0.1; if(factorball >10) factorball = 10; drawGeom(); break; case SCALEDIPOLE : factordipole +=((bevent->y - BeginY) / GeomDrawingArea->allocation.height) * 5; if(factordipole <0.1) factordipole = 0.1; if(factordipole >100) factordipole = 100; redefine_dipole(); drawGeom(); break; default : break; } BeginX = bevent->x; BeginY = bevent->y; return TRUE; } /********************************************************************************/ static gint TranslationByMouse(GtkWidget *widget, GdkEventMotion *event) { int x, y; GdkRectangle area; GdkModifierType state; if (event->is_hint) { #if !defined(G_OS_WIN32) gdk_window_get_pointer(event->window, &x, &y, &state); #else x = event->x; y = event->y; state = event->state; #endif } else { x = event->x; y = event->y; state = event->state; } area.x = 0; area.y = 0; area.width = widget->allocation.width; area.height = widget->allocation.height; TransX =(gint)(TransX+(x - BeginX)); TransY =(gint)(TransY+(y - BeginY)); drawGeom(); BeginX = x; BeginY = y; return TRUE; } /********************************************************************************/ static gint RotationByMouse(GtkWidget *widget, GdkEventMotion *event) { int x, y; GdkRectangle area; GdkModifierType state; gdouble spin_quat[4]; if (event->is_hint) { #if !defined(G_OS_WIN32) gdk_window_get_pointer(event->window, &x, &y, &state); #else x = event->x; y = event->y; state = event->state; #endif } else { x = event->x; y = event->y; state = event->state; } area.x = 0; area.y = 0; area.width = widget->allocation.width; area.height = widget->allocation.height; trackball(spin_quat, (2.0*BeginX - area.width) / area.width, (area.height - 2.0*BeginY) / area.height, (2.0*x - area.width) / area.width, (area.height - 2.0*y ) / area.height); add_quats(spin_quat, Quat, Quat); drawGeom(); BeginX = x; BeginY = y; return TRUE; } /********************************************************************************/ static gint RotationZByMouse(GtkWidget *widget, GdkEventMotion *event) { int x, y; GdkModifierType state; gdouble spin_quat[4] = {0,0,0,0}; gdouble phi = 1.0/180*PI; gdouble width; gdouble height; gint Xi; gint Yi; if (event->is_hint) { #if !defined(G_OS_WIN32) gdk_window_get_pointer(event->window, &x, &y, &state); #else x = event->x; y = event->y; state = event->state; #endif } else { x = event->x; y = event->y; state = event->state; } width = widget->allocation.width; height = widget->allocation.height; Xi = width/2 + TransX; Yi = height/2 + TransY; if(abs(BeginX-x)>abs(BeginY-y)) { gdouble sign = 1.0; if(BeginY> Yi && BeginXx) sign = -1; phi = sign* fabs(BeginX-x)/width*PI; } else { gdouble sign = 1.0; if(BeginX> Xi && BeginY>y) sign = -1; if(BeginX< Xi && BeginY0) { if(PersMode) Cmax = coordmaxmin.Cmax*camera.f/(camera.position); else Cmax = coordmaxmin.Cmax; } else return FALSE; Xmax=GeomDrawingArea->allocation.width; Ymax=GeomDrawingArea->allocation.height; Rmax = Xmax; if(Rmaxis_hint) { #if !defined(G_OS_WIN32) gdk_window_get_pointer(event->window, &x, &y, &state); #else x = event->x; y = event->y; state = event->state; #endif } else { x = event->x; y = event->y; state = event->state; } width = widget->allocation.width; height = widget->allocation.height; if(abs(BeginX-x)>abs(BeginY-y)) { gdouble sign = 1.0; if(BeginY> Yi && BeginXx) sign = -1; phi = sign* fabs(BeginX-x)/width*PI; } else { gdouble sign = 1.0; if(BeginX> Xi && BeginY>y) sign = -1; if(BeginX< Xi && BeginY0) { if(PersMode) Cmax = coordmaxmin.Cmax*camera.f/(camera.position); else Cmax = coordmaxmin.Cmax; } else return FALSE; Xmax=GeomDrawingArea->allocation.width; Ymax=GeomDrawingArea->allocation.height; Rmax = Xmax; if(Rmaxis_hint) { #if !defined(G_OS_WIN32) gdk_window_get_pointer(event->window, &x, &y, &state); #else x = event->x; y = event->y; state = event->state; #endif } else { x = event->x; y = event->y; state = event->state; } width = widget->allocation.width; height = widget->allocation.height; trackball(spin_quat, (2.0*(width/2+BeginX-Xi) - (width)) / (width), ((height) - 2.0*(height/2+BeginY-Yi)) / (height), (2.0*(width/2+x-Xi) - (width)) / (width), ((height) - 2.0*(height/2+y-Yi) ) / (height)); add_quats(spin_quat, QuatFrag, QuatFrag); build_rotmatrix(m,QuatFrag); rotation_fragment_quat(m,C); if(RebuildConnectionsDuringEdition) reset_connections_between_selected_and_notselected_atoms(); /* reset_all_connections();*/ drawGeom(); init_quat(QuatFrag); BeginX = x; BeginY = y; return TRUE; } /********************************************************************************/ void set_statubar_pop_sel_atom() { gchar* temp = NULL; if(NumSelectedAtom >=0 && OperationType == DELETEFRAG) { temp = g_strdup_printf(_("%s[%d] ; Coord (Ang) : %f %f %f ; Move your mouse to cancel the operation "), geometry0[NumSelectedAtom].Prop.symbol,NumSelectedAtom+1, geometry0[NumSelectedAtom].X*BOHR_TO_ANG, geometry0[NumSelectedAtom].Y*BOHR_TO_ANG, geometry0[NumSelectedAtom].Z*BOHR_TO_ANG); } if(OperationType == CUTBOND || OperationType == CHANGEBOND) { temp = g_strdup_printf(_("Move your mouse to cancel the operation ")); } if(temp) { gtk_statusbar_pop(GTK_STATUSBAR(StatusOperation),idStatusOperation); gtk_statusbar_push(GTK_STATUSBAR(StatusOperation),idStatusOperation,temp); g_free(temp); } } /********************************************************************************/ static gint move_one_atom(GdkEventMotion *event) { int x, y; GdkModifierType state; gdouble X; gdouble Y; gdouble Z; gdouble Cmax; gushort Xmax; gushort Ymax; gushort Rmax; if(NumSelectedAtom<0) return -1; Xmax=GeomDrawingArea->allocation.width; Ymax=GeomDrawingArea->allocation.height; Rmax = Xmax; if(Rmaxis_hint) { #if !defined(G_OS_WIN32) gdk_window_get_pointer(event->window, &x, &y, &state); #else x = event->x; y = event->y; state = event->state; #endif } else { x = event->x; y = event->y; state = event->state; } if(PersMode) Cmax = coordmaxmin.Cmax*camera.f/(camera.position); else Cmax = coordmaxmin.Cmax; X = (gdouble)(x-Xmax/2-TransX)*2.0*Cmax/(factor*Rmax); Y = -(gdouble)(y-Ymax/2-TransY)*2.0*Cmax/(factor*Rmax); Z = geometry[NumSelectedAtom].Z; if(PersMode) { X = X/camera.f*(-Z+camera.position); Y = Y/camera.f*(-Z+camera.position); } { gdouble m[4][4]; gdouble **m0 = g_malloc(3*sizeof(gdouble*)); gdouble** minv; gint i,j; gdouble A[3]; gdouble B[3]; guint k; for(i=0;i<3;i++) m0[i] = g_malloc(3*sizeof(gdouble)); build_rotmatrix(m,Quat); for(i=0;i<3;i++) for(j=0;j<3;j++) m0[i][j] = m[i][j]; minv = Inverse(m0,3,1e-7); A[0] = X; A[1] = Y; A[2] = Z; for(j=0;j<3;j++) { B[j] = 0.0; for(k=0;k<3;k++) B[j] += minv[k][j]*A[k]; } X=B[0]; Y=B[1]; Z=B[2]; i = NumSelectedAtom; geometry0[i].X=B[0]; geometry0[i].Y=B[1]; geometry0[i].Z=B[2]; for(i=0;i<3;i++) if(minv[i]) g_free(minv[i]); if(minv) g_free(minv); for(i=0;i<3;i++) if(m0[i]) g_free(m0[i]); if(m0) g_free(m0); } Ddef = FALSE; buildRotation(); drawGeom(); set_statubar_pop_sel_atom(); return TRUE; } /***********************************************************************************/ static gint move_all_selected_atoms(GtkWidget *widget, GdkEventMotion *event) { int x, y; GdkModifierType state; gdouble X; gdouble Y; gdouble Z; gdouble Cmax; gushort Xmax; gushort Ymax; gushort Rmax; if(NumSelectedAtom<0) return -1; Xmax=GeomDrawingArea->allocation.width; Ymax=GeomDrawingArea->allocation.height; Rmax = Xmax; if(Rmaxis_hint) { #if !defined(G_OS_WIN32) gdk_window_get_pointer(event->window, &x, &y, &state); #else x = event->x; y = event->y; state = event->state; #endif } else { x = event->x; y = event->y; state = event->state; } if(PersMode) Cmax = coordmaxmin.Cmax*camera.f/(camera.position); else Cmax = coordmaxmin.Cmax; X = (gdouble)(x-Xmax/2-TransX)*2.0*Cmax/(factor*Rmax); Y = -(gdouble)(y-Ymax/2-TransY)*2.0*Cmax/(factor*Rmax); Z = geometry[NumSelectedAtom].Z; if(PersMode) { X = X/camera.f*(-Z+camera.position); Y = Y/camera.f*(-Z+camera.position); } { gdouble m[4][4]; gdouble **m0 = g_malloc(3*sizeof(gdouble*)); gdouble** minv; gint i,j; gdouble A[3]; gdouble B[3]; guint k; for(i=0;i<3;i++) m0[i] = g_malloc(3*sizeof(gdouble)); build_rotmatrix(m,Quat); for(i=0;i<3;i++) for(j=0;j<3;j++) m0[i][j] = m[i][j]; minv = Inverse(m0,3,1e-7); A[0] = X; A[1] = Y; A[2] = Z; for(j=0;j<3;j++) { B[j] = 0.0; for(k=0;k<3;k++) B[j] += minv[k][j]*A[k]; } X=B[0]; Y=B[1]; Z=B[2]; i = NumSelectedAtom; B[0] -=geometry0[i].X; B[1] -=geometry0[i].Y; B[2] -=geometry0[i].Z; for(i=0;i<(gint)Natoms;i++) for(j=0;j<(gint)NFatoms;j++) if(NumFatoms[j]==(gint)geometry0[i].N) { geometry0[i].X += B[0]; geometry0[i].Y += B[1]; geometry0[i].Z += B[2]; } for(i=0;i<3;i++) if(minv[i]) g_free(minv[i]); if(minv) g_free(minv); for(i=0;i<3;i++) if(m0[i]) g_free(m0[i]); if(m0) g_free(m0); } Ddef = FALSE; if(RebuildConnectionsDuringEdition) reset_connections_between_selected_and_notselected_atoms(); drawGeom(); set_statubar_pop_sel_atom(); return TRUE; } /********************************************************************************/ static gint MoveAtomByMouse(GtkWidget *widget, GdkEventMotion *event) { gboolean MoveAll = FALSE; gint i; gint j; if(NumSelectedAtom<0) return FALSE; for(i=0;i<(gint)Natoms;i++) if((gint)i==NumSelectedAtom) { for(j = 0;j<(gint)NFatoms;j++) if(NumFatoms[j] == (gint)geometry[i].N) MoveAll = TRUE; break; } if(!MoveAll) { move_one_atom(event); if(RebuildConnectionsDuringEdition) reset_connection_with_one_atom(NumSelectedAtom); return TRUE; } move_all_selected_atoms(widget, event); return TRUE; } /*****************************************************************************/ gint set_proche_atom(GdkEventButton *bevent) { gdouble xi,yi,xii,yii; gint i; gdouble mindist = -1; gdouble d1 ; xi = bevent->x; yi = bevent->y; NumProcheAtom = -1; for(i=Natoms-1;i>=0;i--) { xii = xi-geometry[i].Xi; yii = yi-geometry[i].Yi; d1 = xii*xii+yii*yii; if(mindist<0) { mindist = fabs(d1); NumProcheAtom = i; } if(mindist>fabs(d1)) { mindist = fabs(d1); NumProcheAtom = i; } } return NumProcheAtom; } /*****************************************************************************/ gint set_selected_atoms(GdkEventButton *bevent) { gdouble xi,yi,xii,yii; gint i; gdouble mindist = -1; gdouble d2 ; gdouble d1 ; gint ns = -1; xi = bevent->x; yi = bevent->y; for(i=Natoms-1;i>=0;i--) { gdouble rayon = 2*get_rayon(i); xii = xi-geometry[i].Xi; yii = yi-geometry[i].Yi; d1 = xii*xii+yii*yii; d2 = d1-rayon*rayon; if(d2<0) { if(mindist<0) { mindist = fabs(d1); ns = i; } if(mindist>fabs(d1)) { mindist = fabs(d1); ns = i; } } } if(ns != -1) { gboolean Ok = FALSE; for(i=0;i<4;i++) if(NumSelAtoms[i] ==(gint) geometry[ns].N) { NumSelAtoms[i] = -1; Ok = TRUE; break; } if(!Ok) for(i=0;i<4;i++) if(NumSelAtoms[i] == -1 || NumSelAtoms[i] >(gint)Natoms) { NumSelAtoms[i] = geometry[ns].N; Ok = TRUE; break; } if(!Ok) { for(i=0;i<3;i++) NumSelAtoms[i] = NumSelAtoms[i+1]; NumSelAtoms[3] = geometry[ns].N; } } for(i=0;i<3;i++) if(NumSelAtoms[i] == -1) { NumSelAtoms[i] = NumSelAtoms[i+1]; NumSelAtoms[i+1] = -1; } drawGeom(); change_of_center(NULL,NULL); set_statubar_pop_sel_atom(); return ns; } /*****************************************************************************/ gint unselected_atom(GdkEventButton *bevent) { gdouble xi,yi,xii,yii; xi = bevent->x; yi = bevent->y; xii = xi-BeginX; yii = yi-BeginY; if(xii*xii+yii*yii > 8) { NumSelectedAtom = -1; drawGeom(); SetOperation (NULL,OperationType); } return NumSelectedAtom; } /*****************************************************************************/ gint unselected_bond(GdkEventButton *bevent) { gdouble xi,yi,xii,yii; xi = bevent->x; yi = bevent->y; xii = xi-BeginX; yii = yi-BeginY; if(xii*xii+yii*yii > 8) { NumBatoms[0] = NumBatoms[1] = -1; NBatoms = 0; drawGeom(); SetOperation (NULL,OperationType); } return 0; } /*****************************************************************************/ gint set_selected_second_atom_bond(GdkEventButton *bevent) { gdouble xi,yi,xa,ya; gint i; gdouble da ; gint nb=0; xi = bevent->x; yi = bevent->y; for(i=Natoms-1;i>=0;i--) { gdouble rayon = 2*get_rayon(i); xa = xi-geometry[i].Xi; ya = yi-geometry[i].Yi; da = xa*xa+ya*ya; if(geometry[i].N==geometry[NumSelectedAtom].N) continue; if(da0) { NBatoms = 2; NumBatoms[1] = nb; } else { NBatoms = 1; } drawGeom(); change_of_center(NULL,NULL); set_statubar_pop_sel_atom(); return NBatoms; } /*****************************************************************************/ gint set_selected_atom(GdkEventButton *bevent) { gdouble xi,yi,xii,yii; gint i; gdouble mindist = -1; gdouble d2 ; gdouble d1 ; xi = bevent->x; yi = bevent->y; NumSelectedAtom = -1; for(i=Natoms-1;i>=0;i--) { gdouble rayon; if(!geometry[i].show) continue; rayon = 2*get_rayon(i); xii = xi-geometry[i].Xi; yii = yi-geometry[i].Yi; d1 = xii*xii+yii*yii; d2 = d1-rayon*rayon; if(d2<0) { if(mindist<0) { mindist = fabs(d1); NumSelectedAtom = i; } if(mindist>fabs(d1)) { mindist = fabs(d1); NumSelectedAtom = i; } } } for(i=0;i<3;i++) QuatAtom[i] = 0; QuatAtom[3] = 1; if(NumSelectedAtom>=0) { CSselectedAtom[0] = geometry0[NumSelectedAtom].X; CSselectedAtom[1] = geometry0[NumSelectedAtom].Y; CSselectedAtom[2] = geometry0[NumSelectedAtom].Z; } drawGeom(); set_statubar_pop_sel_atom(); return NumSelectedAtom; } /*****************************************************************************/ gint set_selected_bond(GdkEventButton *bevent) { gdouble xi,yi,xa,ya,xb,yb; gint i,j; gdouble da ; gdouble db ; gint na = -1; gint nb = -1; xi = bevent->x; yi = bevent->y; NumBatoms[0] = NumBatoms[1] = -1; NBatoms = 0; for(i=Natoms-1;i>=0;i--) { gdouble rayoni; xa = xi-geometry[i].Xi; ya = yi-geometry[i].Yi; da = xa*xa+ya*ya; rayoni = get_rayon(i)/2; rayoni = rayoni*rayoni; for(j=Natoms-1;j>=0;j--) { gdouble rayonj; gdouble minrayon; if(i==j) continue; gint nj = geometry[j].N-1; if(geometry[i].typeConnections[nj]<1) continue; xb = xi-geometry[j].Xi; yb = yi-geometry[j].Yi; db = xb*xb+yb*yb; rayonj = get_rayon(j)/2; rayonj = rayonj*rayonj; minrayon = rayoni; if(minrayon>rayonj) minrayon = rayonj; if( da-1 && nb>-1) break; } if(na != -1 && nb != -1) { NBatoms = 2; NumBatoms[0] = (gint) geometry[na].N; NumBatoms[1] = (gint) geometry[nb].N; } drawGeom(); change_of_center(NULL,NULL); set_statubar_pop_sel_atom(); return NBatoms; } /*****************************************************************************/ gint set_selected_atom_bond(GdkEventButton *bevent) { gdouble xi,yi,xa,ya; gint i; gdouble da ; xi = bevent->x; yi = bevent->y; NumBatoms[0] = NumBatoms[1] = -1; NBatoms = 0; for(i=Natoms-1;i>=0;i--) { gdouble rayon = 2*get_rayon(i); xa = xi-geometry[i].Xi; ya = yi-geometry[i].Yi; da = xa*xa+ya*ya; if(dax; yi = bevent->y; for(i=Natoms-1;i>=0;i--) { gdouble rayon; if(!geometry[i].show) continue; if(i==NumSelectedAtom) continue; xii = xi-geometry[i].Xi; yii = yi-geometry[i].Yi; d1 = xii*xii+yii*yii; rayon = 2*get_rayon(i); d2 = d1-rayon*rayon; if(d2<0) return i; } return -1; } /*****************************************************************************/ gint set_selected_atom_or_bond_to_delete(GdkEventButton *bevent) { NumSelectedAtom = -1; if(get_atom_to_select(bevent)>=0) { OperationType = DELETEFRAG; return set_selected_atom(bevent); } OperationType = CUTBOND; return set_selected_bond(bevent); } /*****************************************************************************/ gint add_begin_atoms_bond(GdkEventButton *bevent) { gint ni,nj,i,j; if(NBatoms==1 && NumBatoms[0]>0) { insert_atom(bevent); j = Natoms-1; nj = geometry[j].N-1; for(i=0;i<(gint)Natoms;i++) if(geometry[i].N==NumBatoms[0]) { ni = geometry[i].N-1; geometry0[j].typeConnections[ni] = 1; geometry0[i].typeConnections[nj] = 1; geometry[j].typeConnections[ni] = 1; geometry[i].typeConnections[nj] = 1; break; } NumSelectedAtom = Natoms-1; return 1; } insert_atom(bevent); NumProcheAtom = Natoms-1; insert_atom(bevent); j = Natoms-1; i = Natoms-2; ni = geometry[i].N-1; nj = geometry[j].N-1; geometry0[j].typeConnections[ni] = 1; geometry0[i].typeConnections[nj] = 1; geometry[j].typeConnections[ni] = 1; geometry[i].typeConnections[nj] = 1; NumSelectedAtom = Natoms-1; NumBatoms[0] = -(geometry0[i].N+Natoms); return 2; } /*****************************************************************************/ gint set_selected_atom_or_bond_to_edit(GdkEventButton *bevent) { gint res = -1; NumSelectedAtom = -1; res = get_atom_to_select(bevent); if(res==-1) { set_selected_bond(bevent); if(NBatoms==2) { OperationType = CHANGEBOND; return NBatoms; } } set_selected_atom_bond(bevent); OperationType = ADDATOMSBOND; res = set_selected_atom(bevent); set_proche_atom(bevent); return res; } /*****************************************************************************/ static gint atom_noni_connected_to(gint i, gint k) { gint j; gint l; if(Natoms<3) return -1; if(geometry[i].typeConnections) for(j=0;j0 || geometry[j].typeConnections[nl]>0) && geometry[l].Prop.symbol[0] !='H') return geometry[j].N; } } for(j=0;j0) return geometry[j].N; } return -1; } /*****************************************************************************/ gint set_selected_atoms_for_insert_frag(GdkEventButton *bevent) { gint nb = 0; gint i; gint j; NumSelectedAtom = -1; angleTo = -1; atomToBondTo = -1; NumSelectedAtom = -1; i = get_atom_to_select(bevent); if(i<0) return i; atomToDelete = geometry[i].N; atomToBondTo = -1; for (j=0;j<(gint)Natoms;j++) if(geometry[j].typeConnections && geometry[j].typeConnections[atomToDelete-1]>0) { nb++; atomToBondTo = geometry[j].N; angleTo = atom_noni_connected_to( i, atomToBondTo); } if(nb != 1 || atomToBondTo==-1) { atomToDelete = -1; atomToBondTo = -1; angleTo = -1; } if(Frag.NAtoms>0 && Frag.atomToDelete != -1) drawGeom(); return atomToDelete; } /***************************************************************************** * event_dispatcher ******************************************************************************/ gint button_press(GtkWidget *DrawingArea, GdkEvent *event, gpointer Menu) { GdkEventButton *bevent; switch (event->type) { case GDK_BUTTON_PRESS: { buttonpress = TRUE; bevent = (GdkEventButton *) event; if (bevent->button == 3) /* Right Button ==> Popup Menu */ { buttonpress = FALSE; popup_menu_geom( bevent->button, bevent->time); } else if (bevent->button == 1 && ControlKeyPressed) { BeginX= bevent->x; BeginY = bevent->y; return TRUE; } else if (bevent->button == 1) { /* beginning of drag, reset mouse position */ BeginX= bevent->x; BeginY = bevent->y; switch(OperationType) { case SELECTOBJECTS : if(GKeyPressed && select_atoms_by_groupe()) SetOperation(NULL,SELECTRESIDUE); else if(!FKeyPressed && select_atoms_by_residues()) SetOperation(NULL,SELECTRESIDUE); else SetOperation(NULL,SELECTFRAG); break; case MOVEFRAG : add_geometry_to_fifo(); set_selected_atom(bevent); break; case DELETEOBJECTS : add_geometry_to_fifo(); set_selected_atom_or_bond_to_delete(bevent);break; case MEASURE : set_selected_atoms(bevent);break; case EDITOBJECTS : add_geometry_to_fifo(); set_selected_atom_or_bond_to_edit(bevent); if(NBatoms<2) add_begin_atoms_bond(bevent); drawGeom(); break; case ADDFRAGMENT : add_geometry_to_fifo(); set_selected_atoms_for_insert_frag(bevent); set_proche_atom(bevent);break; case ROTLOCFRAG : add_geometry_to_fifo(); init_quat(QuatFrag); ButtonPressed = TRUE; drawGeom(); break; case ROTZLOCFRAG : add_geometry_to_fifo(); init_quat(QuatFrag); ButtonPressed = TRUE; drawGeom(); break; default:break; } return TRUE; } else if (bevent->button == 2) { BeginX= bevent->x; BeginY = bevent->y; return TRUE; } } default: break; } return FALSE; } /*************************/ void unselect_all_atoms() { NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms = NULL; } /***************************************************************************** * event_release ******************************************************************************/ gint button_release(GtkWidget *DrawingArea, GdkEvent *event, gpointer Menu) { GdkEventButton *bevent; buttonpress = FALSE; if(event->type == GDK_BUTTON_RELEASE) { bevent = (GdkEventButton *) event; if (bevent->button == 3) return TRUE; if (bevent->button == 2) { drawGeom(); return TRUE;} if (bevent->button == 1 && ControlKeyPressed) return TRUE; } if(NumSelectedAtom !=-1) { switch(OperationType) { case MOVEFRAG : create_GeomXYZ_from_draw_grometry(); NumSelectedAtom = -1; if(GeomIsOpen) unselect_all_atoms(); free_text_to_draw(); drawGeom(); SetOperation (NULL,MOVEFRAG); change_of_center(NULL,NULL); break; case DELETEFRAG : delete_selected_atoms(); create_GeomXYZ_from_draw_grometry(); NumSelectedAtom = -1; free_text_to_draw(); drawGeom(); SetOperation (NULL,DELETEOBJECTS); change_of_center(NULL,NULL); break; default:break; } } switch(OperationType) { case SELECTRESIDUE : SetOperation(NULL,SELECTOBJECTS); break; case SELECTFRAG : SetOperation(NULL,SELECTOBJECTS); break; case ADDATOMSBOND : if(NBatoms==2 && NumBatoms[0]>0 && NumBatoms[1]>0 && NumBatoms[0]!=NumBatoms[1]) { delete_one_atom(NumSelectedAtom); add_bond(); } else if(NBatoms==2 && NumBatoms[0]<-Natoms && NumBatoms[1]>0) { NumBatoms[0] = -NumBatoms[0]-Natoms; delete_one_atom(NumSelectedAtom); if( NumBatoms[0] != NumBatoms[1]) add_bond(); } else if(NumBatoms[0]>0) { gint res = get_atom_to_select((GdkEventButton *)event); if(res != -1) { delete_one_atom(NumSelectedAtom); replace_atom(get_indice(NumBatoms[0])); if(AdjustHydrogenAtoms) adjust_hydrogens_connected_to_atom(get_indice(NumBatoms[0])); } else if(AdjustHydrogenAtoms) { adjust_hydrogens_connected_to_atoms(NumSelectedAtom,get_indice(NumBatoms[0])); } } else if(NumBatoms[0]<-Natoms) { gint res = -1; NumBatoms[0] = -NumBatoms[0]-Natoms; res = get_atom_to_select((GdkEventButton *)event); if(res != -1) { delete_one_atom(NumSelectedAtom); if(AdjustHydrogenAtoms) adjust_hydrogens_connected_to_atom(get_indice(NumBatoms[0])); } else if(AdjustHydrogenAtoms) { adjust_hydrogens_connected_to_atoms(NumSelectedAtom,get_indice(NumBatoms[0])); } } create_GeomXYZ_from_draw_grometry(); reset_charges_multiplicities(); SetOperation (NULL,EDITOBJECTS); change_of_center(NULL,NULL); NumProcheAtom = -1; NumSelectedAtom = -1; free_text_to_draw(); NBatoms = 0; NumBatoms[0] = NumBatoms[1] = -1; drawGeom(); break; case ADDFRAGMENT : insert_fragment(DrawingArea,event); create_GeomXYZ_from_draw_grometry(); NumProcheAtom = -1; atomToDelete = -1; atomToBondTo = -1; angleTo = -1; free_text_to_draw(); drawGeom(); /*activate_rotation();*/ SetOperation (NULL,ADDFRAGMENT); change_of_center(NULL,NULL); break; case ROTLOCFRAG : ButtonPressed = FALSE; create_GeomXYZ_from_draw_grometry(); drawGeom(); change_of_center(NULL,NULL); break; case ROTZLOCFRAG : ButtonPressed = FALSE; create_GeomXYZ_from_draw_grometry(); drawGeom(); change_of_center(NULL,NULL); break; case CUTBOND : delete_selected_bond(); free_text_to_draw(); create_GeomXYZ_from_draw_grometry(); reset_charges_multiplicities(); drawGeom(); SetOperation (NULL,DELETEOBJECTS); break; case CHANGEBOND : change_selected_bond(); free_text_to_draw(); create_GeomXYZ_from_draw_grometry(); reset_charges_multiplicities(); drawGeom(); SetOperation (NULL,EDITOBJECTS); break; default: drawGeom(); } return TRUE; } /***************************************************************************** * event_dispatcher ******************************************************************************/ gint event_dispatcher(GtkWidget *DrawingArea, GdkEvent *event, gpointer Menu) { return button_press(DrawingArea,event,Menu); } /********************************************************************************/ /* Moption Notify */ /********************************************************************************/ gint motion_notify(GtkWidget *widget, GdkEventMotion *event) { GdkModifierType state; if (event->is_hint) { #if !defined(G_OS_WIN32) int x, y; gdk_window_get_pointer(event->window, &x, &y, &state); #else state = event->state; #endif } else state = event->state; if (state & GDK_BUTTON1_MASK) { if(ControlKeyPressed) { RotationByMouse(widget,event); return TRUE; } } if (state & GDK_BUTTON1_MASK) { switch(OperationType) { case ROTATION : RotationByMouse(widget,event);break; case ROTATIONZ : RotationZByMouse(widget,event);break; case TRANSMOVIE : TranslationByMouse(widget,event);break; case SCALEGEOM : case SCALESTICK : case SCALEBALL : case SCALEDIPOLE: ScaleByMouse((gpointer)event);break; case SELECTFRAG : switch(SelectType) { case CIRCLE : draw_selection_circle(event->x,event->y); break; case RECTANGLE: draw_selection_rectangle(event->x,event->y); select_atoms_by_rectangle(event->x,event->y); break; default:break; } break; case MOVEFRAG : MoveAtomByMouse(widget,event); free_text_to_draw(); change_of_center(NULL,NULL); break; case ROTLOCFRAG : local_rotate_fragment(widget,event); free_text_to_draw(); change_of_center(NULL,NULL); break; case ROTZLOCFRAG : local_zrotate_fragment(widget,event); free_text_to_draw(); change_of_center(NULL,NULL); break; case DELETEFRAG : if(unselected_atom((GdkEventButton *)event)==-1) { OperationType = DELETEOBJECTS; unselected_atom((GdkEventButton *)event); } free_text_to_draw(); change_of_center(NULL,NULL); break; case CUTBOND : OperationType = DELETEOBJECTS; unselected_bond((GdkEventButton *)event); free_text_to_draw(); drawGeom(); break; case CHANGEBOND : unselected_bond((GdkEventButton *)event); free_text_to_draw(); break; case ADDATOMSBOND : move_one_atom(event); set_selected_second_atom_bond((GdkEventButton *)event); free_text_to_draw(); break; case ADDFRAGMENT : if(atomToDelete>-1) { gint j = get_atom_to_select((GdkEventButton *)event); if(j>=0 && geometry[j].N != atomToDelete && geometry[j].N != atomToBondTo && fabs(atof(get_angle(atomToDelete,atomToBondTo,geometry[j].N))-180)>0.1) { angleTo = geometry[j].N; drawGeom(); } } default : return FALSE; } } if (state & GDK_BUTTON2_MASK) { RotationByMouse(widget,event); } return TRUE; } /********************************************************************************/ static void redraw() { gdk_draw_drawable(GeomDrawingArea->window, GeomDrawingArea->style->fg_gc[GTK_WIDGET_STATE (GeomDrawingArea)], pixmap, 0,0, 0,0, GeomDrawingArea->allocation.width, GeomDrawingArea->allocation.height); } /********************************************************************************/ static void pixmap_init(GtkWidget *widget) { GdkColormap *colormap; if(!BackColor) gdk_draw_rectangle (pixmap, widget->style->black_gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height); else { colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap,BackColor,FALSE,TRUE); gdk_gc_set_foreground(gc,BackColor); gdk_draw_rectangle (pixmap, gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height); } } /*****************************************************************************/ static gint configure_event( GtkWidget *widget, GdkEventConfigure *event ) { if(!gc) gc = gdk_gc_new(GeomDrawingArea->window); if (pixmap) g_object_unref(pixmap); pixmap = gdk_pixmap_new(widget->window, widget->allocation.width, widget->allocation.height, -1); cr = gdk_cairo_create (pixmap); drawGeom(); return TRUE; } /********************************************************************************/ static gint expose_event( GtkWidget *widget, GdkEventExpose *event ) { if(event->count >0) return FALSE; gdk_draw_drawable(widget->window, widget->style->fg_gc[GTK_WIDGET_STATE (widget)], pixmap, event->area.x, event->area.y, event->area.x, event->area.y, event->area.width, event->area.height); return FALSE; } /*****************************************************************************/ void SetCosSin() { int i; for ( i=0; i < 91; i++ ) { TSIN[i] = sin((PI*i)/180.0); TCOS[i] = cos((PI*i)/180.0); } } /*****************************************************************************/ void RenderStick() { TypeGeom = GABEDIT_TYPEGEOM_STICK; drawGeom(); } /*****************************************************************************/ void RenderBallStick() { TypeGeom = GABEDIT_TYPEGEOM_BALLSTICK; drawGeom(); } /*****************************************************************************/ void RenderSpaceFill() { TypeGeom = GABEDIT_TYPEGEOM_SPACE; drawGeom(); } /*****************************************************************************/ void ActivateButtonOperation (GtkWidget *widget, guint data) { SetOperation (widget,data); } /*****************************************************************************/ void SetOperation (GtkWidget *widget, guint data) { gchar* temp = NULL; if(data == CENTER) { TransX = 0; TransY = 0; drawGeom(); return; } OperationType = data ; if( OperationType != ADDFRAGMENT) hide_fragments_selector(); switch(data) { case ROTATION : temp = g_strdup(_(" Press the Left mouse button and move your mouse for a \"Rotate molecule\". "));break; case ROTATIONZ : temp = g_strdup(_(" Press the Left mouse button and move your mouse for a \"Rotate molecule about z axis\". "));break; case TRANSMOVIE : temp = g_strdup(_(" Press the Left mouse button and move your mouse for a \"Translation\". "));break; case SCALEGEOM : temp = g_strdup(_(" Press the Left mouse button and move your mouse for a \"Zoom\". "));break; case SCALESTICK : temp = g_strdup(_(" Press the Left mouse button and move your mouse for \"Scale Stick\". "));break; case SCALEBALL : temp = g_strdup(_(" Press the Left mouse button and move your mouse for \"Scale Ball\". "));break; case SCALEDIPOLE: temp = g_strdup(_(" Press the Left mouse button and move your mouse for \"Scale Dipole\". "));break; case SELECTOBJECTS : temp = g_strdup(_("Pick an atom to select a residue, G key + pick an atom to select a group, Or F key + move your mouse to select a fragment. Use shift key for more selections."));break; case SELECTFRAG : temp = g_strdup(_(" Press the Left mouse button and move your mouse for \"select a fragment\".Use shift key for more selections. "));break; case SELECTRESIDUE : temp = g_strdup(_(" Press the Left mouse button for pick an atom, all atoms for residue of this atom are selected(or unselected)."));break; case DELETEFRAG : temp = g_strdup(_(" Press the Left mouse button(for pick an atom or all selected atoms) and release for \"Delete selected atom(s)\". "));break; case ROTLOCFRAG : temp = g_strdup(_(" Press the Left mouse button and move your mouse for \"Rotatation of selected atom(s)[Local Rotation]\". "));break; case ROTZLOCFRAG : temp = g_strdup(_(" Press the Left mouse button and move your mouse for \"Rotation, about z axis, of selected atom(s)[Local Rotation]\". "));break; case MOVEFRAG : temp = g_strdup(_(" Press the Left mouse button(for pick an atom or all selected atoms) and move your mouse for \"Move selected atom(s)\". "));break; case EDITOBJECTS : temp = g_strdup(_(" Press and release the Left mouse button for \"Insert/Change atom(s)/bond\".\"Pick an atom for replace it.\""));break; case ADDATOMSBOND : temp = g_strdup(_(" Press and release the Left mouse button for \"Insert atom(s)/bond\".\"Pick an atom for replace it.\""));break; case CHANGEBOND : temp = g_strdup(_(" Press the Left mouse button(for pick a bond) and release for \"Change selected bond\". "));break; case CUTBOND : temp = g_strdup(_(" Press the Left mouse button(for pick a bond) and release for \"Delete selected bond\". "));break; case MEASURE : temp = g_strdup(_(" Press and release the Left mouse button for \"Select your atoms\". ")); HideShowMeasure(FALSE); change_of_center(NULL,NULL); drawGeom(); break; case ADDFRAGMENT : temp = g_strdup(_(" Press and release the Left mouse button for \"Insert a Fragment\". "));break; } if(temp) { gtk_statusbar_pop(GTK_STATUSBAR(StatusOperation),idStatusOperation); gtk_statusbar_push(GTK_STATUSBAR(StatusOperation),idStatusOperation,temp); g_free(temp); } drawGeom(); } /*****************************************************************************/ void setPersonalFragment(Fragment F) { gint i; Frag.NAtoms = F.NAtoms; Frag.Atoms = g_malloc(Frag.NAtoms*sizeof(Atom)); for(i=0;istrlen(slash)) { Frag = GetFragment(slash+1); if(Frag.NAtoms>1 && strstr(fragName,"Fullerenes")) { AddHToAtomPDB(&Frag,"C"); } if(Frag.NAtoms<1) { gint OC1 = -1; gint C = -1; gint N = -1; gint i ; Frag = GetFragmentPPD(slash+1); for(i=0;i1) { if(C != -1 && N == -1) AddHToAtomPDB(&Frag,"C"); else if(C == -1 && N != -1) AddHToAtomPDB(&Frag,"N"); else if(strlen(Frag.Atoms[0].Residue)<4) AddHToAtomPDB(&Frag,"C"); else if(strlen(Frag.Atoms[0].Residue)==4) { if( toupper(Frag.Atoms[0].Residue[0])=='C' || toupper(Frag.Atoms[0].Residue[0])=='O' ) AddHToAtomPDB(&Frag,"N"); else AddHToAtomPDB(&Frag,"C"); } } } if(Frag.NAtoms<1) addPersonalFragment(fragName, 0, NULL); } else Frag = GetFragment(fragName); drawingArea = g_object_get_data(G_OBJECT(button), "DrawingArea"); if(drawingArea) add_frag_to_preview_geom(drawingArea, &Frag); } /*****************************************************************************/ void addAFragment(gchar* fragName) { FreeFragment(&Frag); if(fragName) Frag = GetFragment(fragName); else return; SetOperation (NULL,ADDFRAGMENT); } /*****************************************************************************/ void initLabelOptions (guint data) { LabelOption = data ; } /*****************************************************************************/ void SetLabelOptions (GtkWidget *widget, guint data) { if(LabelOption != data) { LabelOption = data ; drawGeom(); } } /*****************************************************************************/ void SetLabelDistances(GtkWidget *win,gboolean YesNo) { DrawDistance = !DrawDistance; drawGeom(); } /*****************************************************************************/ void SetLabelDipole(GtkWidget *win,gboolean YesNo) { DrawDipole = !DrawDipole; drawGeom(); } /*****************************************************************************/ void RenderShad(GtkWidget *win,gboolean YesNo) { ShadMode = !ShadMode; drawGeom(); } /*****************************************************************************/ void RenderPers(GtkWidget *win,gboolean YesNo) { PersMode = !PersMode; if(PersMode) define_coefs_pers(); drawGeom(); } /*****************************************************************************/ void RenderLight(GtkWidget *win,gboolean YesNo) { LightMode = !LightMode; drawGeom(); } /*****************************************************************************/ void RenderOrtep(GtkWidget *win,gboolean YesNo) { OrtepMode = !OrtepMode; drawGeom(); } /*****************************************************************************/ void RenderCartoon(GtkWidget *win,gboolean YesNo) { CartoonMode = !CartoonMode; drawGeom(); } /*****************************************************************************/ void RenderHBonds(GtkWidget *win,gboolean YesNo) { ShowHBonds = !ShowHBonds; if(ShowHBonds) set_Hconnections(); drawGeom(); } /*****************************************************************************/ void RenderHAtoms(GtkWidget *win,gboolean YesNo) { gint i; for (i=0;i<(gint)Natoms;i++) { if(!strcmp(geometry0[i].Prop.symbol,"H")) { geometry[i].show = YesNo; geometry0[i].show = YesNo; } } drawGeom(); ShowHydrogenAtoms = YesNo; } /*****************************************************************************/ void RenderDipole(GtkWidget *win,gboolean YesNo) { ShowDipole = !ShowDipole; drawGeom(); } /*****************************************************************************/ void set_dipole_from_charges() { gint i; gint j; create_GeomXYZ_from_draw_grometry(); NumSelectedAtom = -1; unselect_all_atoms(); Dipole.def = TRUE; for(i=0;i<3;i++) Dipole.value[i] = 0.0; for(j=0;j<(gint)Natoms;j++) { Dipole.value[0] += geometry0[j].X*geometry0[j].Charge; Dipole.value[1] += geometry0[j].Y*geometry0[j].Charge; Dipole.value[2] += geometry0[j].Z*geometry0[j].Charge; } define_geometry(); drawGeom(); } /*****************************************************************************/ gdouble get_sum_charges() { gdouble c = 0; gint j; for(j=0;j<(gint)Natoms;j++) c += geometry0[j].Charge; return c; } /*****************************************************************************/ void compute_total_charge() { gdouble c = 0; gdouble cNeg = 0; gdouble cPos = 0; gint j; GtkWidget* m; gchar tmp[BSIZE]; for(j=0;j<(gint)Natoms;j++) { if(geometry0[j].Charge>0) cPos += geometry0[j].Charge; if(geometry0[j].Charge<0) cNeg += geometry0[j].Charge; c += geometry0[j].Charge; } if(cNeg !=0 && cPos != 0) sprintf(tmp, _( "Total Charge = %f\n" "Sum of positive charges = %f\n" "Sum of negative charges = %f\n" "positive/negative = %f\n" "negative/positive = %f\n" ) , c, cPos, cNeg, cPos/cNeg, cNeg/cPos); else sprintf(tmp, _( "Total Charge = %f\n" "Sum of positive charges = %f\n" "Sum of negative charges = %f\n" ) , c, cPos, cNeg); m = Message(tmp,_("Info"),TRUE); gtk_window_set_modal (GTK_WINDOW (m), TRUE); } /*****************************************************************************/ void compute_charge_of_selected_atoms() { gdouble c = 0; gdouble cNeg = 0; gdouble cPos = 0; gint j; GtkWidget* m; gchar tmp[BSIZE]; for(j=0;j<(gint)Natoms;j++) { if(!if_selected(j)) continue; if(geometry0[j].Charge>0) cPos += geometry0[j].Charge; if(geometry0[j].Charge<0) cNeg += geometry0[j].Charge; c += geometry0[j].Charge; } if(cNeg !=0 && cPos != 0) sprintf(tmp, _( "Total Charge = %f\n" "Sum of positive charges = %f\n" "Sum of negative charges = %f\n" "positive/negative = %f\n" "negative/positive = %f\n" ) , c, cPos, cNeg, cPos/cNeg, cNeg/cPos); else sprintf(tmp, _( "Total Charge = %f\n" "Sum of positive charges = %f\n" "Sum of negative charges = %f\n" ) , c, cPos, cNeg); m = Message(tmp,_("Info"),TRUE); gtk_window_set_modal (GTK_WINDOW (m), TRUE); } /********************************************************************************/ static GtkWidget* create_text_win(gchar* title) { GtkWidget *Win; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *text; /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),title); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(Fenetre)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); gtk_widget_realize(Win); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)gtk_widget_destroy,NULL); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); vboxall = create_vbox(Win); vboxwin = vboxall; frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_add(GTK_CONTAINER(vboxall),frame); gtk_widget_show (frame); text = create_text(Win,frame,TRUE); set_font (text,FontsStyleResult.fontname); set_base_style(text,FontsStyleResult.BaseColor.red ,FontsStyleResult.BaseColor.green ,FontsStyleResult.BaseColor.blue); set_text_style(text,FontsStyleResult.TextColor.red ,FontsStyleResult.TextColor.green ,FontsStyleResult.TextColor.blue); g_object_set_data(G_OBJECT (Win), "Text", text); return Win; } /*****************************************************************************/ void compute_charge_by_residue() { gint i; gint j; gint k; gdouble* charges = NULL; gint nr = 0; GtkWidget *win; GtkWidget *text; gchar tmp[BSIZE]; gint* nums = NULL; if(Natoms<1) return; for(j=0;j<(gint)Natoms;j++) { if( nrgeometry0[nums[j]].ResidueNumber) k = j; if(i!=k) { gdouble x; gint ix; x = charges[k]; charges[k] = charges[i]; charges[i] = x; ix = nums[k]; nums[k] = nums[i]; nums[i] = ix; } } win = create_text_win(_("Charge by residues")); gtk_widget_set_size_request(GTK_WIDGET(win),(gint)(ScreenHeight*0.5),(gint)(ScreenHeight*0.5)); text = g_object_get_data(G_OBJECT (win), "Text"); if(text) for(k=0;k0) dihsgn = -1.0e0; else dihsgn = 1.0e0; } angle *=dihsgn; return g_strdup_printf("%f",angle); } /*****************************************************************************/ void define_coord_maxmin() { guint i; gdouble XmaxMmin; gdouble YmaxMmin; if(Natoms==0) return; coordmaxmin.Xmax =geometry[0].X; coordmaxmin.Ymax =geometry[0].Y; coordmaxmin.Zmax =geometry[0].Z; coordmaxmin.Xmin =geometry[0].X; coordmaxmin.Ymin =geometry[0].Y; coordmaxmin.Zmin =geometry[0].Z; for (i = 1;icoordmaxmin.Xmax) coordmaxmin.Xmax =geometry[i].X; if (geometry[i].Xcoordmaxmin.Ymax) coordmaxmin.Ymax =geometry[i].Y; if (geometry[i].Ycoordmaxmin.Zmax) coordmaxmin.Zmax =geometry[i].Z; if (geometry[i].Z0 && !test(Geom[i].R)) { geometry[i].Variable = TRUE; return; } if(i>1 && !test(Geom[i].Angle)) { geometry[i].Variable = TRUE; return; } if(i>2 && !test(Geom[i].Dihedral)) { geometry[i].Variable = TRUE; return; } geometry[i].Variable = FALSE; } } /*****************************************************************************/ void set_layer_of_selected_atoms(GabEditLayerType l) { gint i; for (i=0;i<(gint)Natoms;i++) { if(if_selected(i)) { geometry[i].Layer = l; geometry0[i].Layer = l; } } create_GeomXYZ_from_draw_grometry(); drawGeom(); } /*****************************************************************************/ void define_geometry_from_xyz() { guint i; for(i=0;i= 0.999999 ) { /* Colinear */ temp = dist*rbc*cosa; geometry[i].X = geometry[na].X + temp*xb; geometry[i].Y = geometry[na].Y + temp*yb; geometry[i].Z = geometry[na].Z + temp*zb; geometry[i].N = i+1; geometry[i].typeConnections = NULL; } else { xa = geometry[nc].X - geometry[na].X; ya = geometry[nc].Y - geometry[na].Y; za = geometry[nc].Z - geometry[na].Z; sind = -sin(dihed); cosd = cos(dihed); xd = dist*cosa; yd = dist*sina*cosd; zd = dist*sina*sind; xyb = sqrt(xb*xb + yb*yb); if( xyb < 0.1 ) { /* Rotate about y-axis! */ temp = za; za = -xa; xa = temp; temp = zb; zb = -xb; xb = temp; xyb = sqrt(xb*xb + yb*yb); flag = TRUE; } else flag = FALSE; costh = xb/xyb; sinth = yb/xyb; xpa = costh*xa + sinth*ya; ypa = costh*ya - sinth*xa; sinph = zb*rbc; cosph = sqrt(1.0 - sinph*sinph); zqa = cosph*za - sinph*xpa; yza = sqrt(ypa*ypa + zqa*zqa); if( yza > 1.0E-10 ) { coskh = ypa/yza; sinkh = zqa/yza; ypd = coskh*yd - sinkh*zd; zpd = coskh*zd + sinkh*yd; } else { /* coskh = 1.0; */ /* sinkh = 0.0; */ ypd = yd; zpd = zd; } xpd = cosph*xd - sinph*zpd; zqd = cosph*zpd + sinph*xd; xqd = costh*xpd - sinth*ypd; yqd = costh*ypd + sinth*xpd; if( flag ) { /* Rotate about y-axis! */ geometry[i].X = geometry[na].X - zqd; geometry[i].Y = geometry[na].Y + yqd; geometry[i].Z = geometry[na].Z + xqd; geometry[i].N = i+1; geometry[i].typeConnections = NULL; } else { geometry[i].X = geometry[na].X + xqd; geometry[i].Y = geometry[na].Y + yqd; geometry[i].Z = geometry[na].Z + zqd; geometry[i].N = i+1; geometry[i].typeConnections = NULL; } } } for(i=0;i<(gint)Natoms;i++) { geometry[i].Prop = prop_atom_get(Geom[i].Symb); geometry[i].mmType = g_strdup(Geom[i].mmType); geometry[i].pdbType = g_strdup(Geom[i].pdbType); geometry[i].Residue = g_strdup(Geom[i].Residue); geometry[i].ResidueNumber = Geom[i].ResidueNumber; geometry[i].Charge = atof(Geom[i].Charge); geometry[i].show = TRUE; set_layer(Geom[i].Layer, &geometry[i].Layer); set_constant_variable(i, FALSE); } return( TRUE ); } /*****************************************************************************/ void set_optimal_geom_view() { gushort Xmax; gushort Ymax; gushort Rmax; gint Xi; gint Yi; guint i; gdouble X; gdouble Y; gdouble Cmax; gint X1,X2; gint Y1,Y2; Xmax=GeomDrawingArea->allocation.width; Ymax=GeomDrawingArea->allocation.height; X1 = Xmax; X2 = Xmax; Y1 = Ymax; Y2 = Ymax; Rmax = Xmax; if(RmaxXi) X1 = Xi; if(X2Yi) Y1 = Yi; if(Y2(gint)Xmax) factor *= fabs((gdouble)(Xmax-20)/(X2-X1)); if((Y2-Y1)>(gint)Ymax) factor *= fabs((gdouble)(Ymax-20)/(Y2-Y1)); } /********************************************************************************/ void define_good_factor() { set_optimal_geom_view(); } /********************************************************************************/ /* static void define_good_trans() { gdouble C[3]={0,0,0}; gint i; gint k; gushort Xmax; gushort Ymax; gushort Rmax; gdouble Cmax; printf("Begin define_good_trans\n"); if(!GeomDrawingArea) return; if(Natoms>0) { if(PersMode) Cmax = coordmaxmin.Cmax*camera.f/(camera.position); else Cmax = coordmaxmin.Cmax; } else return; Xmax=GeomDrawingArea->allocation.width; Ymax=GeomDrawingArea->allocation.height; Rmax = Xmax; if(Rmaxallocation.width; Ymax=GeomDrawingArea->allocation.height; Rmax = Xmax; if(Rmaxgeometry[j].Z) { k=j; Z =geometry[k].Z; } if(k!=i) { tmpgeom = geometry[i]; geometry[i] = geometry[k]; geometry[k] = tmpgeom; tmpgeom = geometry0[i]; geometry0[i] = geometry0[k]; geometry0[k] = tmpgeom; if(NumSelectedAtom == (gint)i) NumSelectedAtom = (gint)k; else if(NumSelectedAtom == (gint)k) NumSelectedAtom = (gint)i; } } calcul_ndipole(); } /*****************************************************************************/ void define_coefs_pers() { guint i; if(fabs(coordmaxmin.Zmax-coordmaxmin.Zmin)<1.e-6) { camera.position = 10; camera.f = 5; for(i=0;i1.e-6) { Coef = fabs(0.99-0.2*(coordmaxmin.Zmax-geometry[i].Z)/(coordmaxmin.Zmax-coordmaxmin.Zmin)); if(Coef<1.0) { color->red = (gushort)(color->red*Coef) ; color->green = (gushort)(color->green*Coef) ; color->blue = (gushort)(color->blue*Coef) ; } } } /*****************************************************************************/ void rotationGen(gdouble alpha,gdouble Axe[],gdouble A[],gdouble B[]) { /* Axe est un tableau de 2 elements qui definit l'axe de rotation qui se trouve dans le paln xOy*/ /* theta angle entre l'axe de rotation et l'axe x. l'axe de rotation se trouve dans le plan xoy */ /* alpha angle rotation autour de l'axe de rotation defini par theta */ gdouble cosa = cos(alpha/180*PI); gdouble sina = sin(alpha/180*PI); gdouble cost=Axe[0]/sqrt(Axe[0]*Axe[0] + Axe[1]*Axe[1] ); gdouble sint=Axe[1]/sqrt(Axe[0]*Axe[0] + Axe[1]*Axe[1] ); B[0] = A[0]*cost*cost + A[1]*sint*cost + A[0]*sint*sint*cosa - A[1]*cost*cosa*sint+A[2]*sint*sina; B[1] = A[0]*cost*sint + A[1]*sint*sint - A[0]*sint*cost*cosa + A[1]*cost*cosa*cost-A[2]*cost*sina; B[2] = -A[0]*sint*sina + A[1]*cost*sina + A[2]*cosa; } /*****************************************************************************/ static gint replace_atom(gint i) { g_free(geometry[i].Prop.symbol); geometry[i].Prop = prop_atom_get(AtomToInsert); g_free(geometry0[i].Prop.symbol); geometry0[i].Prop = prop_atom_get(AtomToInsert); g_free(geometry[i].mmType); geometry[i].mmType = g_strdup(AtomToInsert); g_free(geometry0[i].mmType); geometry0[i].mmType = g_strdup(AtomToInsert); g_free(geometry[i].pdbType); geometry[i].pdbType = g_strdup(AtomToInsert); g_free(geometry0[i].pdbType); geometry0[i].pdbType = g_strdup(AtomToInsert); return 1; } /*****************************************************************************/ static gint insert_atom(GdkEventButton *bevent) { int x, y; gdouble X; gdouble Y; gdouble Z; gdouble Cmax; gushort Xmax; gushort Ymax; gushort Rmax; if(Natoms>0 && NumProcheAtom<0) return -1; if(Natoms>0) { geometry0 = g_realloc(geometry0,(Natoms+1)*sizeof(GeomDef)); geometry = g_realloc(geometry,(Natoms+1)*sizeof(GeomDef)); } else { geometry0 = g_malloc(sizeof(GeomDef)); geometry = g_malloc(sizeof(GeomDef)); } Ddef = FALSE; Xmax=GeomDrawingArea->allocation.width; Ymax=GeomDrawingArea->allocation.height; Rmax = Xmax; if(Rmaxx; y = bevent->y; if(Natoms>0) { if(PersMode) Cmax = coordmaxmin.Cmax*camera.f/(camera.position); else Cmax = coordmaxmin.Cmax; } else { geometry[Natoms].Prop = prop_atom_get(AtomToInsert); Cmax = 4*geometry[Natoms].Prop.covalentRadii; coordmaxmin.Cmax = Cmax; } X = (gdouble)(x-Xmax/2-TransX)*2.0*Cmax/(factor*Rmax); Y = -(gdouble)(y-Ymax/2-TransY)*2.0*Cmax/(factor*Rmax); if(Natoms>0) Z = geometry[NumProcheAtom].Z; else Z = 0.0; if(PersMode) { X = X/camera.f*(-Z+camera.position); Y = Y/camera.f*(-Z+camera.position); } { gdouble m[4][4]; gdouble **m0 = g_malloc(3*sizeof(gdouble*)); gdouble** minv; gint i,j; gdouble A[3]; gdouble B[3]; guint k; for(i=0;i<3;i++) m0[i] = g_malloc(3*sizeof(gdouble)); build_rotmatrix(m,Quat); for(i=0;i<3;i++) for(j=0;j<3;j++) m0[i][j] = m[i][j]; minv = Inverse(m0,3,1e-7); if(minv) { A[0] = X; A[1] = Y; A[2] = Z; for(j=0;j<3;j++) { B[j] = 0.0; for(k=0;k<3;k++) B[j] += minv[k][j]*A[k]; } geometry[Natoms].X=B[0]; geometry[Natoms].Y=B[1]; geometry[Natoms].Z=B[2]; geometry[Natoms].Prop = prop_atom_get(AtomToInsert); geometry[Natoms].mmType = g_strdup(AtomToInsert); geometry[Natoms].pdbType = g_strdup(AtomToInsert); geometry[Natoms].Layer = HIGH_LAYER; geometry[Natoms].show = TRUE; geometry[Natoms].N = Natoms+1; geometry[Natoms].typeConnections = NULL; if(Natoms==0) { geometry[Natoms].Residue = g_strdup(AtomToInsert); geometry[Natoms].ResidueNumber = 0; } else { gint k; gint proche = 0; gdouble d; gdouble d1; d = get_real_distance2(geometry,0,Natoms); for(k=1;k<(gint)Natoms;k++) { d1 = get_real_distance2(geometry,k,Natoms); if(d10 && NumProcheAtom<0) { FreeFragment(&Frag); return 0; } if(Frag.NAtoms<=0) { FreeFragment(&Frag); return 0; } if(Natoms>0) { geometry0 = g_realloc(geometry0,(Natoms+Frag.NAtoms)*sizeof(GeomDef)); geometry = g_realloc(geometry,(Natoms+Frag.NAtoms)*sizeof(GeomDef)); } else { geometry0 = g_malloc(Frag.NAtoms*sizeof(GeomDef)); geometry = g_malloc(Frag.NAtoms*sizeof(GeomDef)); } Ddef = FALSE; Xmax=GeomDrawingArea->allocation.width; Ymax=GeomDrawingArea->allocation.height; Rmax = Xmax; if(Rmaxx; y = bevent->y; if(Natoms>0) { if(PersMode) Cmax = coordmaxmin.Cmax*camera.f/(camera.position); else Cmax = coordmaxmin.Cmax; } else { Natoms = 0; for(i=0;i0) Z = geometry[NumProcheAtom].Z; else Z = 0.0; if(PersMode) { X = X/camera.f*(-Z+camera.position); Y = Y/camera.f*(-Z+camera.position); } { gdouble m[4][4]; gdouble **m0 = g_malloc(3*sizeof(gdouble*)); gdouble** minv; gint i,j; gdouble A[3]; gdouble B[3]; guint k; for(i=0;i<3;i++) m0[i] = g_malloc(3*sizeof(gdouble)); build_rotmatrix(m,Quat); for(i=0;i<3;i++) for(j=0;j<3;j++) m0[i][j] = m[i][j]; minv = Inverse(m0,3,1e-7); if(minv) { A[0] = X; A[1] = Y; A[2] = Z; for(j=0;j<3;j++) { B[j] = 0.0; for(k=0;k<3;k++) B[j] += minv[k][j]*A[k]; } j = -1; for(i=0;i= Natoms || toB>= Natoms || Frag.atomToDelete>= Frag.NAtoms || Frag.atomToBondTo>= Frag.NAtoms) return 0; if(Natoms>0) { geometry0 = g_realloc(geometry0,(Natoms+Frag.NAtoms)*sizeof(GeomDef)); geometry = g_realloc(geometry,(Natoms+Frag.NAtoms)*sizeof(GeomDef)); } else { geometry0 = g_malloc(Frag.NAtoms*sizeof(GeomDef)); geometry = g_malloc(Frag.NAtoms*sizeof(GeomDef)); } Ddef = FALSE; atomlist = g_malloc((Frag.NAtoms)*sizeof(gint)); B[0] = geometry0[toB].X - Frag.Atoms[Frag.atomToDelete].Coord[0]; B[1] = geometry0[toB].Y - Frag.Atoms[Frag.atomToDelete].Coord[1]; B[2] = geometry0[toB].Z - Frag.Atoms[Frag.atomToDelete].Coord[2]; j = -1; toBond = -1; toAngle = -1; toDel = -1; for(i=0;i-1 && toAngle>-1) { SetTorsion(Natoms,geometry0, toA,toB, toBond, toAngle, fragAngle,atomlist, Frag.NAtoms); } if(!atomlist) g_free(atomlist); iBegin = Natoms-Frag.NAtoms; for(i=0;i0 && NumProcheAtom<0) { FreeFragment(&Frag); return 0; } if(Frag.NAtoms<=0) { FreeFragment(&Frag); return 0; } if(atomToDelete>=0) { return insert_fragment_connected_to_an_atom( get_indice(atomToDelete), get_indice(atomToBondTo),get_indice(angleTo)); } else if(Frag.NAtoms>0 && Frag.atomToDelete<0) return insert_fragment_without_delete_an_atom(widget,event); else if(Natoms==0) return insert_fragment_without_delete_an_atom(widget,event); return 0; } /*****************************************************************************/ void delete_one_atom(gint NumDel) { gint i; gint j; gint* oldN = NULL; if(Natoms<1) return; copy_connections(geometry0, geometry, Natoms); i = NumDel; if(geometry0[i].typeConnections) g_free(geometry0[i].typeConnections); if(geometry[i].typeConnections) g_free(geometry[i].typeConnections); for (i=NumDel;i<(gint)Natoms-1;i++) { geometry0[i]=geometry0[i+1]; geometry[i]=geometry[i+1]; } oldN = g_malloc(Natoms*sizeof(gint)); for (i=0;i<(gint)Natoms;i++) oldN[i] = geometry0[i].N-1; Natoms--; for(j=0;j<(gint)NFatoms;j++) { for (i=0;i<(gint)Natoms;i++) if(NumFatoms[j] ==(gint) geometry[i].N) { NumFatoms[j] = i+1; break;} if(i==Natoms) NumFatoms[j] =-1; } for(j=0;j<(gint)NFatoms;j++) if( NumFatoms[j]<0) { for (i=j;i<(gint)NFatoms-1;i++) NumFatoms[i]= NumFatoms[i+1]; NFatoms--; j--; } for(j=0;j<2;j++) for (i=0;i<(gint)Natoms;i++) if(NumBatoms[j]==(gint) geometry[i].N) {NumBatoms[j] = i+1; break;} for (i=0;i<(gint)Natoms;i++) { geometry0[i].N = i+1; geometry[i].N = i+1; } /* in geometry0 : old connections , in geometry new connection */ for (i=0;i<(gint)Natoms;i++) { if(geometry[i].typeConnections) { for(j=0;j<(gint)Natoms;j++) { geometry[i].typeConnections[j] = geometry0[i].typeConnections[oldN[j]]; } } } if(oldN) g_free(oldN); copy_connections(geometry0, geometry, Natoms); if(Natoms>0) { geometry0 = g_realloc(geometry0,Natoms*sizeof(GeomDef)); geometry = g_realloc(geometry,Natoms*sizeof(GeomDef)); } else { if(geometry0) g_free(geometry0); geometry0 = NULL; if(geometry) g_free(geometry); geometry = NULL; Natoms = 0; } Ddef = FALSE; reset_charges_multiplicities(); } /********************************************************************************/ void deleteHydrogensConnectedTo(gint n, gint nH) { gint i; gint k = 0; gint ni; if(Natoms<1) return; add_geometry_to_fifo(); for (i=0;i<(gint)Natoms;i++) { ni = geometry[i].N-1; if(geometry[n].typeConnections[ni] && !strcmp(geometry[i].Prop.symbol,"H")) { delete_one_atom(i); k++; if(k>=nH) break; } } } /*****************************************************************************/ gint index_selected(gint Num) { gint j; if(NFatoms<1 || !NumFatoms ) return -1; for(j=0;j<(gint)NFatoms;j++) if(NumFatoms[j] == (gint)geometry[Num].N) return j; return -1; } /*****************************************************************************/ gboolean if_selected(gint Num) { gint j; if(NFatoms<1 || !NumFatoms ) return FALSE; for(j=0;j<(gint)NFatoms;j++) if(NumFatoms[j] == (gint)geometry[Num].N) return TRUE; return FALSE; } /*****************************************************************************/ void delete_all_selected_atoms() { gint i; gint j; GeomDef tmp; gint* oldN = NULL; if(Natoms<1) return; copy_connections(geometry0, geometry, Natoms); for (i=0;i<(gint)Natoms-1;i++) { if(!if_selected(i)) continue; for(j=i+1;j<(gint)Natoms;j++) if(!if_selected(j)) { tmp = geometry0[i]; geometry0[i] = geometry0[j]; geometry0[j] = tmp ; tmp = geometry[i]; geometry[i] = geometry[j]; geometry[j] = tmp ; break; } } oldN = g_malloc(Natoms*sizeof(gint)); for (i=0;i<(gint)Natoms;i++) oldN[i] = geometry0[i].N-1; if(NFatoms>Natoms) { printf("internal error\n"); Natoms = 0; } else { for (i=(gint)Natoms-NFatoms;i<(gint)Natoms;i++) { if(geometry0[i].typeConnections) g_free(geometry0[i].typeConnections); if(geometry[i].typeConnections) g_free(geometry[i].typeConnections); } Natoms-=NFatoms; } for(j=0;j<(gint)NBatoms;j++) for (i=0;i<(gint)Natoms;i++) if(NumBatoms[j] ==(gint) geometry[i].N) NumBatoms[j] = i+1; for (i=0;i<(gint)Natoms;i++) { geometry0[i].N = i+1; geometry[i].N = i+1; } /* in geometry0 : old connections , in geometry new connection */ for (i=0;i<(gint)Natoms;i++) { if(geometry[i].typeConnections) { for(j=0;j<(gint)Natoms;j++) { geometry[i].typeConnections[j] = geometry0[i].typeConnections[oldN[j]]; } } } if(oldN) g_free(oldN); copy_connections(geometry0, geometry, Natoms); if(Natoms>0) { geometry0 = g_realloc(geometry0,Natoms*sizeof(GeomDef)); geometry = g_realloc(geometry,Natoms*sizeof(GeomDef)); } else { if(geometry0) g_free(geometry0); geometry0 = NULL; if(geometry) g_free(geometry); geometry = NULL; Natoms = 0; } NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms = NULL; Ddef = FALSE; reset_charges_multiplicities(); } /********************************************************************************/ static void rotate_frag_for_set_its_principal_axes_to_xyz(gboolean sel) { gdouble **m0 = NULL; gdouble** minv; gint i,j; guint n; gdouble A[3]; gdouble B[3]; guint k; gdouble* X; gdouble* Y; gdouble* Z; gdouble axis1[3] = {1,0,0}; gdouble axis2[3] = {0,1,0}; gdouble axis3[3] = {0,0,1}; gdouble C[3] = {0,0,0}; gint nFrag = 0; if(Natoms<1) return; nFrag = compute_fragment_principal_axes(axis1,axis2,axis3,C,sel); if(nFrag <2 ) return; printf("nFrag = %d\n",nFrag); m0 = g_malloc(3*sizeof(gdouble*)); X = g_malloc(Natoms*sizeof(gdouble)); Y = g_malloc(Natoms*sizeof(gdouble)); Z = g_malloc(Natoms*sizeof(gdouble)); for(i=0;i<3;i++) m0[i] = g_malloc(3*sizeof(gdouble)); m0[0][0] = axis1[0]; m0[0][1] = axis1[1]; m0[0][2] = axis1[2]; m0[1][0] = axis2[0]; m0[1][1] = axis2[1]; m0[1][2] = axis2[2]; m0[2][0] = axis3[0]; m0[2][1] = axis3[1]; m0[2][2] = axis3[2]; minv = Inverse(m0,3,1e-7); for(n = 0;n0) oldN = g_malloc(Natoms*sizeof(gint)); for (i=0;i<(gint)Natoms;i++) oldN[i] = geometry0[i].N-1; Natoms = nA; for(j=0;j<(gint)NFatoms;j++) { for (i=0;i<(gint)Natoms;i++) if(NumFatoms[j] ==(gint) geometry[i].N) { NumFatoms[j] = i+1; break;} if(i==(gint)Natoms) NumFatoms[j] =-1; } for(j=0;j<(gint)NFatoms;j++) if( NumFatoms[j]<0) { for (i=j;i<(gint)NFatoms-1;i++) NumFatoms[i]= NumFatoms[i+1]; NFatoms--; j--; } for (i=0;i<(gint)Natoms;i++) { geometry0[i].N = i+1; geometry[i].N = i+1; } /* in geometry0 : old connections , in geometry new connection */ for (i=0;i<(gint)Natoms;i++) { if(geometry[i].typeConnections) { for(j=0;j<(gint)Natoms;j++) { geometry[i].typeConnections[j] = geometry0[i].typeConnections[oldN[j]]; } } } if(oldN) g_free(oldN); copy_connections(geometry0, geometry, Natoms); if(Natoms>0) { geometry0 = g_realloc(geometry0,Natoms*sizeof(GeomDef)); geometry = g_realloc(geometry,Natoms*sizeof(GeomDef)); } else { if(geometry0) g_free(geometry0); geometry0 = NULL; if(geometry) g_free(geometry); geometry = NULL; Natoms = 0; } Ddef = FALSE; /* reset_all_connections();*/ reset_charges_multiplicities(); create_GeomXYZ_from_draw_grometry(); drawGeom(); activate_edit_objects(); } /********************************************************************************/ void deleteHydrogenAtoms() { gchar *t =N_("Do you want to really remove all hydrogen atoms?"); if(Natoms>0) Continue_YesNo(delete_hydrogen_atoms, NULL,t); else Message(_("No hydrogen atoms to remove\n"),_("Warning"),TRUE); } /*****************************************************************************/ void delete_selected_atoms() { gint i; gint j; gboolean DelAll = FALSE; if(NumSelectedAtom<0) return; add_geometry_to_fifo(); for(i=0;i<(gint)Natoms;i++) if((gint)i==NumSelectedAtom) { for(j = 0;j<(gint)NFatoms;j++) if(NumFatoms[j] == (gint)geometry[i].N) DelAll = TRUE; break; } if(DelAll==FALSE) { delete_one_atom(NumSelectedAtom); return; } delete_all_selected_atoms(); } /*****************************************************************************/ void delete_selected_bond() { if(NBatoms!=2) return; if(NBatoms>Natoms) { printf("internal error\n"); Natoms = 0; } if(NumBatoms[0]>0 && NumBatoms[1]>0) { gint na = NumBatoms[0]-1; gint nb = NumBatoms[1]-1; gint ia = -1; gint ib = -1; gint i; for(i=0;i<(gint)Natoms;i++) if(geometry[i].N-1==na) { ia = i; break; } for(i=0;i<(gint)Natoms;i++) if(geometry[i].N-1==nb) { ib = i; break; } if(ia>=0 && ib>=0) { geometry[ia].typeConnections[nb] = 0; geometry[ib].typeConnections[na] = 0; } if(ia>=0 && ib>=0 && AdjustHydrogenAtoms) adjust_hydrogens_connected_to_atoms(ia,ib); } copy_connections(geometry0, geometry, Natoms); NBatoms = 0; NumBatoms[0] = NumBatoms[1] = -1; } /*****************************************************************************/ void change_selected_bond() { if(NBatoms!=2) return; if(NBatoms>Natoms) { printf("internal error\n"); Natoms = 0; } if(NumBatoms[0]>0 && NumBatoms[1]>0) { gint na = NumBatoms[0]-1; gint nb = NumBatoms[1]-1; gint newC = 1; gint i; gint ni=-1; gint nj=-1; gint nBondsA = 0; gint nBondsB = 0; for(i=0;i<(gint)Natoms;i++) if(geometry[i].N-1==na) { ni = i; break; } for(i=0;i<(gint)Natoms;i++) if(geometry[i].N-1==nb) { nj = i; break; } if(ni>=0) newC = geometry[ni].typeConnections[nb]+1; if(newC>3) newC = 1; if(newC==1) { if(ni>=0 && nj>=0) geometry[ni].typeConnections[nb] = geometry[nj].typeConnections[na] = newC; } else { if(ni>=0 && nj>=0) for(i=0;i<(gint)Natoms;i++) { gint nk = geometry[i].N-1; if(i==ni) continue; if(i==nj) continue; if(geometry[ni].typeConnections[nk]==0) continue; if(!strcmp(geometry[i].Prop.symbol, "H") && AdjustHydrogenAtoms)continue; nBondsA+=geometry[ni].typeConnections[nk]; } if(ni>=0 && nj>=0) for(i=0;i<(gint)Natoms;i++) { gint nk = geometry[i].N-1; if(i==ni) continue; if(i==nj) continue; if(geometry[nj].typeConnections[nk]==0) continue; if(!strcmp(geometry[i].Prop.symbol, "H") && AdjustHydrogenAtoms )continue; nBondsB+=geometry[nj].typeConnections[nk]; } if( !( ni>=0 && nj>=0 && ((gint)geometry[ni].Prop.maximumBondValence-(nBondsA+newC))>=0 && ((gint)geometry[nj].Prop.maximumBondValence-(nBondsB+newC))>=0 ) ) newC = 1; if(ni>=0 && nj>=0) geometry[ni].typeConnections[nb] = geometry[nj].typeConnections[na] = newC; } if(ni>=0 && nj>=0 && AdjustHydrogenAtoms) adjust_hydrogens_connected_to_atoms(ni,nj); } copy_connections(geometry0, geometry, Natoms); NBatoms = 0; NumBatoms[0] = NumBatoms[1] = -1; } /*****************************************************************************/ void add_bond() { if(NBatoms==1) { NBatoms = 0; NumBatoms[0] = NumBatoms[1] = -1; } if(NBatoms!=2) return; if(NBatoms>Natoms) { printf("internal error\n"); Natoms = 0; } if(NumBatoms[0]>0 && NumBatoms[1]>0) { gint na = NumBatoms[0]-1; gint nb = NumBatoms[1]-1; gint newC = 1; gint i; gint ni=-1; gint nj=-1; gint nBondsA = 0; gint nBondsB = 0; { for(i=0;i<(gint)Natoms;i++) if(geometry[i].N-1==na) { ni = i; break; } if(ni>=0) for(i=0;i<(gint)Natoms;i++) if(geometry[i].N-1==nb) { nj = i; break; } if(ni>=0 && nj>=0) for(i=0;i<(gint)Natoms;i++) { gint nk = geometry[i].N-1; if(i==ni) continue; if(i==nj) continue; if(geometry[ni].typeConnections[nk]==0) continue; if(!strcmp(geometry[i].Prop.symbol, "H") && AdjustHydrogenAtoms )continue; nBondsA+=geometry[ni].typeConnections[nk]; } if(ni>=0 && nj>=0) for(i=0;i<(gint)Natoms;i++) { gint nk = geometry[i].N-1; if(i==ni) continue; if(i==nj) continue; if(geometry[nj].typeConnections[nk]==0) continue; if(!strcmp(geometry[i].Prop.symbol, "H"))continue; nBondsB+=geometry[nj].typeConnections[nk]; } if( !( ni>=0 && nj>=0 && ((gint)geometry[ni].Prop.maximumBondValence-(nBondsA+newC))>=0 && ((gint)geometry[nj].Prop.maximumBondValence-(nBondsB+newC))>=0 ) ) newC = 0; if(ni>=0 && nj>=0) geometry[ni].typeConnections[nb] = geometry[nj].typeConnections[na] = newC; } if(ni>=0 && nj>=0 && AdjustHydrogenAtoms) adjust_hydrogens_connected_to_atoms(ni,nj); } copy_connections(geometry0, geometry, Natoms); NBatoms = 0; NumBatoms[0] = NumBatoms[1] = -1; } /*****************************************************************************/ void rotation_geometry_quat(gdouble m[4][4]) { gdouble A[3]; gdouble B[3]; guint i,j,k; for (i=0;iXmax) Xmax =geometry[i].X; if (geometry[i].XYmax) Ymax =geometry[i].Y; if (geometry[i].YZmax) Zmax =geometry[i].Z; if (geometry[i].Z geometry[j].Rayon) { rmin = geometry[j].Rayon; kmin =j; } return kmin; } /*****************************************************************************/ void draw_triangle(gint x1,gint y1,gint x2,gint y2,gint x3,gint y3, GdkColor colori) { GdkColormap *colormap; colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap,&colori,FALSE,TRUE); gdk_gc_set_foreground(gc,&colori); gdk_gc_set_line_attributes(gc,1,GDK_LINE_SOLID,GDK_CAP_NOT_LAST,GDK_JOIN_MITER); gabedit_cairo_triangle(cr, GeomDrawingArea, gc, x1, y1, x2, y2, x3, y3); if(crExport) gabedit_cairo_triangle(crExport, GeomDrawingArea, gc, x1, y1, x2, y2, x3, y3); } /*****************************************************************************/ GdkColor get_color_string(guint i) { GdkColor color; color.pixel = 0; if (ShadMode) { color.red =(gushort)(65535-geometry[i].Prop.color.red*geometry[i].Coefpers); color.green =(gushort)(65535-geometry[i].Prop.color.green*geometry[i].Coefpers); color.blue =(gushort)(65535-geometry[i].Prop.color.blue*geometry[i].Coefpers); } else { color.red =FontsStyleLabel.TextColor.red; color.green =FontsStyleLabel.TextColor.green; color.blue =FontsStyleLabel.TextColor.blue; } return color; } /*****************************************************************************/ void draw_distance(gint i,gint j,gint x0,gint y0) { GdkColormap *colormap; GdkColor color; PangoFontDescription *font_desc = pango_font_description_from_string (FontsStyleLabel.fontname); Point A; Point B; A.C[0]=geometry[i].X; A.C[1]=geometry[i].Y; A.C[2]=geometry[i].Z; B.C[0]=geometry[j].X; B.C[1]=geometry[j].Y; B.C[2]=geometry[j].Z; color = get_color_string(i); colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap, &color, FALSE, TRUE); gdk_gc_set_foreground(gc,&color); gabedit_cairo_string(cr, GeomDrawingArea, font_desc, gc, x0,y0,get_distance_points(A,B,TRUE),TRUE,TRUE); if(crExport) gabedit_cairo_string(crExport, GeomDrawingArea, font_desc, gc, x0,y0,get_distance_points(A,B,TRUE),TRUE,TRUE); if(font_desc) pango_font_description_free (font_desc); } /*****************************************************************************/ void draw_line(gdouble x1,gdouble y1,gdouble x2,gdouble y2,GdkColor colori,gint epaisseuri, gboolean round) { GdkColormap *colormap; gint epaisseur=epaisseuri; colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap,&colori,FALSE,TRUE); gdk_gc_set_foreground(gc,&colori); if(round) gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); else gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_NOT_LAST,GDK_JOIN_ROUND); gabedit_cairo_line(cr, GeomDrawingArea, gc, x1,y1,x2,y2); if(crExport) gabedit_cairo_line(crExport, GeomDrawingArea, gc, x1,y1,x2,y2); } /*****************************************************************************/ static void draw_line_hbond(gint x1,gint y1,gint x2,gint y2,GdkColor color,gint epaisseur) { GdkColormap *colormap; colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap,&color,FALSE,TRUE); gdk_gc_set_foreground(gc,&color); gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_ON_OFF_DASH,GDK_CAP_NOT_LAST,GDK_JOIN_MITER); gabedit_cairo_line(cr, GeomDrawingArea, gc, x1,y1,x2,y2); if(crExport) gabedit_cairo_line(crExport, GeomDrawingArea, gc, x1,y1,x2,y2); } /*****************************************************************************/ static void draw_line2_hbond(gint x1,gint y1,gint x2,gint y2, gint i, gint j, GdkColor color1,GdkColor color2, gint epaisseur) { gdouble x0; gdouble y0; gdouble poid1; gdouble poid2; gdouble poid; gushort rayon; gdouble xp; gdouble yp; gdouble k; gint nj = geometry[j].N-1; GdkColor colorblack; colorblack.red = 0; colorblack.green = 0; colorblack.blue = 0; if(epaisseur<1) epaisseur = 1; if((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)0 &&(( (gdouble)(x2-x1)*(gdouble)(x2-x1)+(gdouble)(y2-y1)*(gdouble)(y2-y1) )>2)) k = (sqrt(k))/(gdouble)(sqrt( (gdouble)(x2-x1)*(gdouble)(x2-x1)+(gdouble)(y2-y1)*(gdouble)(y2-y1) ) ); else k=0.0; xp = x1 + k *(x2-x1); yp = y1 + k *(y2-y1); } else { xp = x1; yp = y1; } poid1 = geometry[i].Prop.covalentRadii+geometry[i].Prop.radii; poid2 = geometry[j].Prop.covalentRadii+geometry[j].Prop.radii; poid = poid1 + poid2 ; x0=((x1*poid2+x2*poid1)/poid); y0=((y1*poid2+y2*poid1)/poid); if(color1.red==color2.red && color1.green==color2.green && color1.blue==color2.blue) { draw_line_hbond(xp,yp,x2,y2,color1,epaisseur); } else { draw_line_hbond(xp,yp,x0,y0,color1,epaisseur); draw_line_hbond(x0,y0,x2,y2,color2,epaisseur); } if(DrawDistance) draw_distance(i,j,x0,y0); } /*****************************************************************************/ void draw_anneau(gint xi,gint yi,gint rayoni,GdkColor colori) { GdkColormap *colormap; colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap,&colori,FALSE,TRUE); gdk_gc_set_foreground(gc,&colori); gdk_gc_set_line_attributes(gc,4,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); gdk_gc_set_fill(gc,GDK_STIPPLED); gabedit_cairo_cercle(cr, GeomDrawingArea, gc, xi, yi,rayoni); if(crExport) gabedit_cairo_cercle(crExport, GeomDrawingArea, gc, xi, yi,rayoni); gdk_gc_set_fill(gc,GDK_SOLID); } /*****************************************************************************/ gboolean draw_lines_yes_no(guint i,guint j) { gdouble distance; gdouble rcut; gdouble x,y,z; x = geometry[i].X-geometry[j].X; y = geometry[i].Y-geometry[j].Y; z = geometry[i].Z-geometry[j].Z; distance = x*x+y*y+z*z; rcut = geometry[i].Prop.covalentRadii+geometry[j].Prop.covalentRadii; rcut = rcut* rcut; if(distancewindow); gdk_colormap_alloc_color(colormap, &color, FALSE, TRUE); gdk_gc_set_foreground(gc,&color); if(epaisseur == 0)epaisseur =1; gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); gabedit_cairo_string(cr, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,t,TRUE,TRUE); if(crExport) gabedit_cairo_string(crExport, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,t,TRUE,TRUE); if(font_desc) pango_font_description_free (font_desc); g_free(t); } /*****************************************************************************/ void draw_numb(guint epaisseur,guint i) { GdkColormap *colormap; GdkColor color; gchar *temp; PangoFontDescription *font_desc = pango_font_description_from_string (FontsStyleLabel.fontname); temp = g_strdup_printf("%d",geometry[i].N); color = get_color_string(i); colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap, &color, FALSE, TRUE); gdk_gc_set_foreground(gc,&color); if(epaisseur == 0)epaisseur =1; gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); gabedit_cairo_string(cr, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,temp,TRUE,TRUE); if(crExport) gabedit_cairo_string(crExport, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,temp,TRUE,TRUE); if(font_desc) pango_font_description_free (font_desc); g_free(temp); } /*****************************************************************************/ void draw_layer(guint epaisseur,guint i) { GdkColormap *colormap; GdkColor color; PangoFontDescription *font_desc = pango_font_description_from_string (FontsStyleLabel.fontname); gchar* t= NULL; if(geometry[i].Layer==LOW_LAYER) t= g_strdup_printf("L"); else if(geometry[i].Layer==MEDIUM_LAYER) t= g_strdup_printf("M"); else t= g_strdup_printf(" "); color = get_color_string(i); colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap, &color, FALSE, TRUE); gdk_gc_set_foreground(gc,&color); if(epaisseur == 0)epaisseur =1; gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); gabedit_cairo_string(cr, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,t,TRUE,TRUE); if(crExport) gabedit_cairo_string(crExport, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,t,TRUE,TRUE); if(font_desc) pango_font_description_free (font_desc); g_free(t); } /*****************************************************************************/ void draw_mmtyp(guint epaisseur,guint i) { GdkColormap *colormap; GdkColor color; PangoFontDescription *font_desc = pango_font_description_from_string (FontsStyleLabel.fontname); gchar* t= g_strdup_printf("%s", geometry[i].mmType); color = get_color_string(i); colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap, &color, FALSE, TRUE); gdk_gc_set_foreground(gc,&color); if(epaisseur == 0)epaisseur =1; gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); gabedit_cairo_string(cr, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,t,TRUE,TRUE); if(crExport) gabedit_cairo_string(crExport, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,t,TRUE,TRUE); if(font_desc) pango_font_description_free (font_desc); g_free(t); } /*****************************************************************************/ void draw_pdbtyp(guint epaisseur,guint i) { GdkColormap *colormap; GdkColor color; PangoFontDescription *font_desc = pango_font_description_from_string (FontsStyleLabel.fontname); gchar* t= g_strdup_printf("%s", geometry[i].pdbType); color = get_color_string(i); colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap, &color, FALSE, TRUE); gdk_gc_set_foreground(gc,&color); if(epaisseur == 0)epaisseur =1; gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); gabedit_cairo_string(cr, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,t,TRUE,TRUE); if(crExport) gabedit_cairo_string(crExport, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,t,TRUE,TRUE); if(font_desc) pango_font_description_free (font_desc); g_free(t); } /*****************************************************************************/ void draw_numb_symb(guint epaisseur,guint i) { GdkColormap *colormap; GdkColor color; gchar *temp; PangoFontDescription *font_desc = pango_font_description_from_string (FontsStyleLabel.fontname); temp = g_strdup_printf("%s[%d]",geometry[i].Prop.symbol,geometry[i].N); color = get_color_string(i); colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap, &color, FALSE, TRUE); gdk_gc_set_foreground(gc,&color); if(epaisseur == 0)epaisseur =1; gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); gabedit_cairo_string(cr, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,temp,TRUE,TRUE); if(crExport) gabedit_cairo_string(crExport, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,temp,TRUE,TRUE); if(font_desc) pango_font_description_free (font_desc); g_free(temp); } /*****************************************************************************/ void draw_charge(guint epaisseur,guint i) { GdkColormap *colormap; GdkColor color; gchar *temp; PangoFontDescription *font_desc = pango_font_description_from_string (FontsStyleLabel.fontname); temp = g_strdup_printf("%0.3f",geometry[i].Charge); color = get_color_string(i); colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap, &color, FALSE, TRUE); gdk_gc_set_foreground(gc,&color); if(epaisseur == 0)epaisseur =1; gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); gabedit_cairo_string(cr, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,temp,TRUE,TRUE); if(crExport) gabedit_cairo_string(crExport, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,temp,TRUE,TRUE); if(font_desc) pango_font_description_free (font_desc); g_free(temp); } /*****************************************************************************/ void draw_symb_charge(guint epaisseur,guint i) { GdkColormap *colormap; GdkColor color; gchar *temp; PangoFontDescription *font_desc = pango_font_description_from_string (FontsStyleLabel.fontname); temp = g_strdup_printf("%s[%0.3f]",geometry[i].Prop.symbol,geometry[i].Charge); color = get_color_string(i); colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap, &color, FALSE, TRUE); gdk_gc_set_foreground(gc,&color); if(epaisseur == 0)epaisseur =1; gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); gabedit_cairo_string(cr, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,temp,TRUE,TRUE); if(crExport) gabedit_cairo_string(crExport, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,temp,TRUE,TRUE); if(font_desc) pango_font_description_free (font_desc); g_free(temp); } /*****************************************************************************/ void draw_numb_charge(guint epaisseur,guint i) { GdkColormap *colormap; GdkColor color; gchar *temp; PangoFontDescription *font_desc = pango_font_description_from_string (FontsStyleLabel.fontname); temp = g_strdup_printf("%d[%0.3f]",geometry[i].N,geometry[i].Charge); color = get_color_string(i); colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap, &color, FALSE, TRUE); gdk_gc_set_foreground(gc,&color); if(epaisseur == 0)epaisseur =1; gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); gabedit_cairo_string(cr, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,temp,TRUE,TRUE); if(crExport) gabedit_cairo_string(crExport, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,temp,TRUE,TRUE); if(font_desc) pango_font_description_free (font_desc); g_free(temp); } /*****************************************************************************/ void draw_residues(guint epaisseur,guint i) { GdkColormap *colormap; GdkColor color; gchar *temp; PangoFontDescription *font_desc = pango_font_description_from_string (FontsStyleLabel.fontname); temp = g_strdup_printf("%s[%d]",geometry[i].Residue,geometry[i].ResidueNumber+1); color = get_color_string(i); colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap, &color, FALSE, TRUE); gdk_gc_set_foreground(gc,&color); if(epaisseur == 0)epaisseur =1; gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); gabedit_cairo_string(cr, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,temp,TRUE,TRUE); if(crExport) gabedit_cairo_string(crExport, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,temp,TRUE,TRUE); if(font_desc) pango_font_description_free (font_desc); g_free(temp); } /*****************************************************************************/ void draw_coordinates(guint epaisseur,guint i) { GdkColormap *colormap; GdkColor color; gchar *temp; PangoFontDescription *font_desc = pango_font_description_from_string (FontsStyleLabel.fontname); temp = g_strdup_printf("%s[%0.3f,%0.3f,%0.3f] Ang", geometry0[i].Prop.symbol, geometry0[i].X*BOHR_TO_ANG, geometry0[i].Y*BOHR_TO_ANG, geometry0[i].Z*BOHR_TO_ANG); color = get_color_string(i); colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap, &color, FALSE, TRUE); gdk_gc_set_foreground(gc,&color); if(epaisseur == 0)epaisseur =1; gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); gabedit_cairo_string(cr, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,temp,TRUE,TRUE); if(crExport) gabedit_cairo_string(crExport, GeomDrawingArea, font_desc, gc, geometry[i].Xi,geometry[i].Yi,temp,TRUE,TRUE); if(font_desc) pango_font_description_free (font_desc); g_free(temp); } /*****************************************************************************/ void draw_label(guint epaisseur,guint i) { switch(LabelOption) { case LABELSYMB: draw_symb(epaisseur,i);break; case LABELNUMB: draw_numb(epaisseur,i);break; case LABELMMTYP: draw_mmtyp(epaisseur,i);break; case LABELPDBTYP: draw_pdbtyp(epaisseur,i);break; case LABELLAYER: draw_layer(epaisseur,i);break; case LABELSYMBNUMB: draw_numb_symb(epaisseur,i);break; case LABELCHARGE: draw_charge(epaisseur,i);break; case LABELSYMBCHARGE: draw_symb_charge(epaisseur,i);break; case LABELNUMBCHARGE: draw_numb_charge(epaisseur,i);break; case LABELRESIDUES: draw_residues(epaisseur,i);break; case LABELCOORDINATES: draw_coordinates(epaisseur,i);break; } } /*****************************************************************************/ void draw_line2(gint epaisseur,guint i,guint j,gint x1,gint y1,gint x2,gint y2, GdkColor color1,GdkColor color2, gboolean hideDistance) { gdouble x0; gdouble y0; gdouble poid1; gdouble poid2; gdouble poid; gushort rayon; gdouble xp; gdouble yp; gdouble k; gint nj = geometry[j].N-1; GdkColor colorblack; colorblack.red = 0; colorblack.green = 0; colorblack.blue = 0; if((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)0 &&(( (gdouble)(x2-x1)*(gdouble)(x2-x1)+(gdouble)(y2-y1)*(gdouble)(y2-y1) )>2)) k = (sqrt(k))/(gdouble)(sqrt( (gdouble)(x2-x1)*(gdouble)(x2-x1)+(gdouble)(y2-y1)*(gdouble)(y2-y1) ) ); else k=0.0; xp = x1 + k *(x2-x1); yp = y1 + k *(y2-y1); } else { xp = x1; yp = y1; } gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); if(CartoonMode && !(buttonpress&&Natoms>MAT)) draw_line(xp,yp,x2,y2,colorblack,epaisseur+2,TRUE); poid1 = geometry[i].Prop.covalentRadii+geometry[i].Prop.radii; poid2 = geometry[j].Prop.covalentRadii+geometry[j].Prop.radii; poid = poid1 + poid2 ; x0=((x1*poid2+x2*poid1)/poid); y0=((y1*poid2+y2*poid1)/poid); if(color1.red==color2.red && color1.green==color2.green && color1.blue==color2.blue) { if(LightMode) { if (!stick_mode()) { color1.red = color1.green = color1.blue = 0; draw_line(xp,yp,x2,y2,color1,epaisseur,TRUE); } else { GdkColormap *colormap; colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap,&color1,FALSE,TRUE); gdk_gc_set_foreground(gc,&color1); gdk_colormap_alloc_color(colormap,&color2,FALSE,TRUE); if(!stick_mode()) gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_NOT_LAST,GDK_JOIN_ROUND); else gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); gabedit_cairo_line_gradient(cr, GeomDrawingArea, gc, color1, color2, xp, yp, x2, y2); if(crExport) gabedit_cairo_line_gradient(crExport, GeomDrawingArea, gc, color1, color2, xp, yp, x2, y2); } } else draw_line(xp,yp,x2,y2,color1,epaisseur,TRUE); } else { if(LightMode) { if (!stick_mode()) { color1.red = color1.green = color1.blue = 0; draw_line(xp,yp,x2,y2,color1,epaisseur,TRUE); } else { GdkColormap *colormap; colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); gdk_colormap_alloc_color(colormap,&color1,FALSE,TRUE); gdk_gc_set_foreground(gc,&color1); gdk_colormap_alloc_color(colormap,&color2,FALSE,TRUE); if (!stick_mode()) gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_NOT_LAST,GDK_JOIN_ROUND); else gdk_gc_set_line_attributes(gc,epaisseur,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); gabedit_cairo_line_gradient(cr, GeomDrawingArea, gc, color1, color2, xp, yp, x2, y2); if(crExport) gabedit_cairo_line_gradient(crExport, GeomDrawingArea, gc, color1, color2, xp, yp, x2, y2); } } else { draw_line(xp,yp,x0,y0,color1,epaisseur,TRUE); draw_line(x0,y0,x2,y2,color2,epaisseur,TRUE); } } if(DrawDistance && !hideDistance) draw_distance(i,j,x0,y0); } /*****************************************************************************/ void draw_cercle(gint xi,gint yi,gint rayoni,GdkColor colori, gboolean fill, gboolean cartoon, gboolean lighting) { GdkColormap *colormap; gint x=xi,y=yi,rayon=rayoni; GdkColor colorblack; colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); if(cartoon) { colorblack.red = 0; colorblack.green = 0; colorblack.blue = 0; gdk_colormap_alloc_color(colormap,&colorblack,FALSE,TRUE); gdk_gc_set_line_attributes(gc,1,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); rayon = rayoni+1; gdk_gc_set_foreground(gc,&colorblack); gdk_gc_set_fill(gc,GDK_STIPPLED); gabedit_cairo_cercle(cr, GeomDrawingArea, gc, x, y,rayon); if(crExport) gabedit_cairo_cercle(crExport, GeomDrawingArea, gc, x, y,rayon); gdk_gc_set_fill(gc,GDK_SOLID); } if(fill) { rayon = rayoni; gdk_colormap_alloc_color(colormap,&colori,FALSE,TRUE); gdk_gc_set_foreground(gc,&colori); gdk_gc_set_fill(gc,GDK_SOLID); if (lighting) { gabedit_cairo_cercle_gradient(cr, GeomDrawingArea, gc, x, y,rayon); if(crExport) gabedit_cairo_cercle_gradient(crExport, GeomDrawingArea, gc, x, y,rayon); } else { gabedit_cairo_cercle(cr, GeomDrawingArea, gc, x, y,rayon); if(crExport) gabedit_cairo_cercle(crExport, GeomDrawingArea, gc, x, y,rayon); } } } /*****************************************************************************/ void draw_arc(gint xi,gint yi,gint rayoni,gdouble angle1, gdouble angle2, gdouble scale1, gdouble scale2, GdkColor colori) { GdkColormap *colormap; gint x=xi,y=yi,rayon=rayoni; GdkColor colorblack; colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); if(CartoonMode) { gint lw = 2; colorblack.red = 0; colorblack.green = 0; colorblack.blue = 0; gdk_colormap_alloc_color(colormap,&colorblack,FALSE,TRUE); gdk_gc_set_line_attributes(gc,lw,GDK_LINE_SOLID,GDK_CAP_ROUND,GDK_JOIN_ROUND); /* rayon = rayoni+1;*/ rayon = rayoni; gdk_gc_set_foreground(gc,&colorblack); gabedit_cairo_arc(cr, GeomDrawingArea, gc, x, y,rayon, angle1, angle2, scale1, scale2); if(crExport) gabedit_cairo_arc(crExport, GeomDrawingArea, gc, x, y,rayon, angle1, angle2,scale1, scale2); } /* rayon = rayoni; gdk_colormap_alloc_color(colormap,&colori,FALSE,TRUE); gdk_gc_set_foreground(gc,&colori); gdk_gc_set_fill(gc,GDK_SOLID); if (LightMode) { gabedit_cairo_arc(cr, GeomDrawingArea, gc, x, y,rayon,angle1, angle2, scale1, scale2); if(crExport) gabedit_cairo_arc(crExport, GeomDrawingArea, gc, x, y,rayon,angle1, angle2, scale1, scale2); } else { gabedit_cairo_arc(cr, GeomDrawingArea, gc, x, y,rayon,angle1, angle2, scale1, scale2); if(crExport) gabedit_cairo_arc(crExport, GeomDrawingArea, gc, x, y,rayon,angle1, angle2,scale1, scale2); } */ } /************************************************************************/ void getOptimalCiCj(gint i, gint j, gdouble* Ci, gdouble* Cj, gdouble* C0) { C0[0] = 0; C0[1] = 0; C0[2] = 0; Ci[0] = geometry[i].X; Ci[1] = geometry[i].Y; Ci[2] = geometry[i].Z; Cj[0] = geometry[j].X; Cj[1] = geometry[j].Y; Cj[2] = geometry[j].Z; /* serach a one none hydrogen atom connected to i or j atoms */ if(geometry[i].typeConnections) { gint l; gint nl; for(l=0, nl = geometry[l].N-1;l0 && strcmp(geometry[l].Prop.symbol,"H")) { C0[0] = geometry[l].X; C0[1] = geometry[l].Y; C0[2] = geometry[l].Z; /* printf("---%s\n",geometry[l].Prop.symbol);*/ return; } } if(geometry[j].typeConnections) { gint l; gint nl; for(l=0, nl = geometry[l].N-1;l0 && strcmp(geometry[l].Prop.symbol,"H")) { C0[0] = geometry[l].X; C0[1] = geometry[l].Y; C0[2] = geometry[l].Z; /* printf("--%s\n",geometry[l].Prop.symbol);*/ return; } } if(geometry[i].typeConnections) { gint l; gint nl; for(l=0, nl = geometry[l].N-1;l0) { C0[0] = geometry[l].X; C0[1] = geometry[l].Y; C0[2] = geometry[l].Z; /* printf("%s\n",geometry[l].Prop.symbol);*/ return; } } if(geometry[j].typeConnections) { gint l; gint nl; for(l=0, nl = geometry[l].N-1;l0) { C0[0] = geometry[l].X; C0[1] = geometry[l].Y; C0[2] = geometry[l].Z; /* printf("%s\n",geometry[l].Prop.symbol);*/ return; } } } /*****************************************************************************/ void draw_ball(gint xi,gint yi,gint rayoni,GdkColor colori) { if(!(buttonpress&&Natoms>MAT)) draw_cercle(xi,yi,rayoni,colori, TRUE, CartoonMode, LightMode); else draw_cercle(xi,yi,rayoni,colori, TRUE, FALSE, LightMode); if(OrtepMode && !(buttonpress&&Natoms>MAT)) { draw_arc(xi,yi,rayoni,0, M_PI, 1.0, 0.5, colori); draw_arc(xi,yi,rayoni,M_PI/2,3*M_PI/2,0.5,1.0, colori); } } /*****************************************************************************/ void drawGeom_byLayer() { guint i; guint j; guint k; gint epaisseur; gushort rayon; GdkColor color1; GdkColor color2; GdkColor colorRed; GdkColor colorGreen; GdkColor colorBlue; GdkColor colorYellow; GdkColor colorFrag; gint ni; gint nj; gint epMin = -1; gint epMinH = -1; gint epMinM = -1; gint epMinL = -1; colorRed.red = 40000; colorRed.green = 0; colorRed.blue = 0; colorRed.pixel = 0; colorGreen.red = 0; colorGreen.green = 40000; colorGreen.blue = 0; colorBlue.red = 0; colorBlue.green = 0; colorBlue.blue = 40000; colorYellow.red = 40000; colorYellow.green = 40000; colorYellow.blue = 0; colorFrag = colorGreen; if(Natoms<1) return; for(i=0;i0) epMin = epMinH; else if(epMinM>0) epMin = epMinM; else if(epMinL>0) epMin = epMinL; else epMin = 2; epMin *= factorstick; if(epMin<1) epMin = 1; for(i=0;i-1 && (gint)geometry[i].N == NSA[0]) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorRed); if(NSA[1]>-1 && (gint)geometry[i].N == NSA[1]) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorGreen); if(NSA[2]>-1 && (gint)geometry[i].N == NSA[2]) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorBlue); if(NSA[3]>-1 && (gint)geometry[i].N == NSA[3]) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorYellow); } if(OperationType == MEASURE) for(j = 0;j<4;j++) if(NumSelAtoms[j] == (gint)geometry[i].N) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorGreen); switch(OperationType) { case ADDFRAGMENT : if(atomToDelete == (gint)geometry[i].N) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorRed); if(atomToBondTo == (gint)geometry[i].N) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorGreen); if(angleTo == (gint)geometry[i].N) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorBlue); break; case SELECTOBJECTS : case SELECTFRAG : case SELECTRESIDUE : case DELETEOBJECTS : case DELETEFRAG : case ROTLOCFRAG : case ROTZLOCFRAG : case MOVEFRAG : for(j = 0;j0) { if(!geometry[j].show) continue; gint split[2] = {0,0}; gdouble ab[] = {0,0}; k = i; if(geometry0[i].Layer == geometry0[j].Layer ) k =get_num_min_rayonIJ(i,j); else { if(geometry0[i].Layer == MEDIUM_LAYER) k = i; if(geometry0[j].Layer == MEDIUM_LAYER) k = j; if(geometry0[i].Layer == LOW_LAYER) k = i; if(geometry0[j].Layer == LOW_LAYER) k = j; } /* epaisseur = get_rayon(k)*factorstick;*/ epaisseur = epMin; if(geometry[i].Layer == LOW_LAYER || geometry[j].Layer == LOW_LAYER) epaisseur=(gint)(epaisseur/2.5); else if(geometry[i].Layer == MEDIUM_LAYER || geometry[j].Layer == MEDIUM_LAYER) epaisseur=(gint)(epaisseur/1.2); if(epaisseur<3) epaisseur = 3; color2 = geometry[j].Prop.color; if (ShadMode) set_color_shad(&color2,j); if(geometry[i].typeConnections[nj]>1 && showMultipleBonds) { gdouble m = 0; ab[0] = geometry[j].Yi-geometry[i].Yi; ab[1] = -geometry[j].Xi+geometry[i].Xi; m = sqrt(ab[0]*ab[0]+ab[1]*ab[1]); if(m !=0) { ab[0] /= m; ab[1] /= m; } } if(geometry[i].typeConnections[nj]==3 && showMultipleBonds) { gint x1; gint x2; gint y1; gint y2; split[0] = (gint)(ab[0]*(epaisseur+10)/5); split[1] = (gint)(ab[1]*(epaisseur+10)/5); x1 = geometry[i].Xi-2*split[0]; x2 = geometry[j].Xi-2*split[0]; y1 = geometry[i].Yi-2*split[1]; y2 = geometry[j].Yi-2*split[1]; draw_line2(epaisseur/5,i,j,x1,y1, x2, y2, color1,color2,TRUE); x1 = geometry[i].Xi; x2 = geometry[j].Xi; y1 = geometry[i].Yi; y2 = geometry[j].Yi; draw_line2(epaisseur/5,i,j,x1,y1, x2, y2, color1,color2,TRUE); x1 = geometry[i].Xi+2*split[0]; x2 = geometry[j].Xi+2*split[0]; y1 = geometry[i].Yi+2*split[1]; y2 = geometry[j].Yi+2*split[1]; draw_line2(epaisseur/5,i,j,x1,y1, x2, y2, color1,color2,FALSE); } else if(geometry[i].typeConnections[nj]==2 && showMultipleBonds) { gint x1; gint x2; gint y1; gint y2; split[0] = (gint)(ab[0]*(epaisseur+3)/3); split[1] = (gint)(ab[1]*(epaisseur+3)/3); x1 = geometry[i].Xi-split[0]; x2 = geometry[j].Xi-split[0]; y1 = geometry[i].Yi-split[1]; y2 = geometry[j].Yi-split[1]; draw_line2(epaisseur/3,i,j,x1,y1, x2, y2, color1,color2,TRUE); x1 = geometry[i].Xi+split[0]; x2 = geometry[j].Xi+split[0]; y1 = geometry[i].Yi+split[1]; y2 = geometry[j].Yi+split[1]; draw_line2(epaisseur/3,i,j,x1,y1, x2, y2, color1,color2,FALSE); } else draw_line2(epaisseur,i,j,geometry[i].Xi,geometry[i].Yi, geometry[j].Xi,geometry[j].Yi, color1,color2,FALSE); if((OperationType==CUTBOND || OperationType==CHANGEBOND) && NBatoms==2 && NumBatoms[0]>0 && NumBatoms[1]>0) { gint na = NumBatoms[0]; gint nb = NumBatoms[1]; if( (na == (gint)geometry[i].N && geometry[i].show && nb == (gint)geometry[j].N && geometry[j].show) || (nb == (gint)geometry[i].N && geometry[i].show && na == (gint)geometry[j].N && geometry[j].show) ) { if(OperationType==CUTBOND) draw_line2(epaisseur,i,j,geometry[i].Xi,geometry[i].Yi, geometry[j].Xi,geometry[j].Yi, colorRed,colorRed,FALSE); else draw_line2(epaisseur,i,j,geometry[i].Xi,geometry[i].Yi, geometry[j].Xi,geometry[j].Yi, colorFrag,colorFrag,FALSE); } } } else { k =get_num_min_rayonIJ(i,j); epaisseur = get_rayon(k); if(OperationType==ADDATOMSBOND && NFatoms==2 && NumFatoms[0]>0 && NumFatoms[1]>0) { gint na = NumFatoms[0]; gint nb = NumFatoms[1]; if( (na == (gint)geometry[i].N && geometry[i].show && nb == (gint)geometry[j].N && geometry[j].show) || (nb == (gint)geometry[i].N && geometry[i].show && na == (gint)geometry[j].N && geometry[j].show) ) draw_line2(epaisseur,i,j,geometry[i].Xi,geometry[i].Yi, geometry[j].Xi,geometry[j].Yi, colorFrag,colorFrag,FALSE); } if(geometry[i].show && geometry[j].show && ShowHBonds && geometry[i].typeConnections[nj]==-1) { epaisseur = 6; epaisseur*=factorstick; color1 = geometry[i].Prop.color; color2 = geometry[j].Prop.color; draw_line2_hbond(geometry[i].Xi,geometry[i].Yi, geometry[j].Xi,geometry[j].Yi, i, j, color1, color2, epaisseur); } } if (LabelOption != 0) draw_label(5,i); if(ShowDipole) for(j = 0;j-1 && (gint)geometry[i].N == NSA[0] && geometry[i].show) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorRed); if(NSA[1]>-1 && (gint)geometry[i].N == NSA[1] && geometry[i].show) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorGreen); if(NSA[2]>-1 && (gint)geometry[i].N == NSA[2] && geometry[i].show) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorBlue); if(NSA[3]>-1 && (gint)geometry[i].N == NSA[2] && geometry[i].show) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorYellow); } if(OperationType == MEASURE && geometry[i].show) for(j = 0;j<4;j++) if(NumSelAtoms[j] == (gint)geometry[i].N ) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorGreen); switch(OperationType) { case ADDFRAGMENT : if(atomToDelete == (gint)geometry[i].N) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorRed); if(atomToBondTo == (gint)geometry[i].N) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorGreen); if(angleTo == (gint)geometry[i].N) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorBlue); break; case SELECTOBJECTS : case SELECTFRAG : case SELECTRESIDUE : case DELETEFRAG : case DELETEOBJECTS : case ROTLOCFRAG : case ROTZLOCFRAG : case MOVEFRAG : for(j = 0;j0) { if(!geometry[j].show) continue; gint split[2] = {0,0}; gdouble ab[] = {0,0}; if(geometry[i].typeConnections[nj]>1 && showMultipleBonds) { gdouble m = 0; ab[0] = geometry[j].Yi-geometry[i].Yi; ab[1] = -geometry[j].Xi+geometry[i].Xi; m = sqrt(ab[0]*ab[0]+ab[1]*ab[1]); if(m !=0) { ab[0] /= m; ab[1] /= m; } } FreeAtoms[j] = FALSE; FreeAtoms[i] = FALSE; k =get_num_min_rayonIJ(i,j); epaisseur = (gint) (geometry[k].Rayon/2*factorstick); epaisseur = get_epaisseur(); if (PersMode) epaisseur =(gint)(geometry[k].Coefpers*epaisseur); color1 = geometry[i].Prop.color; color2 = geometry[j].Prop.color; if (ShadMode) { set_color_shad(&color1,i); set_color_shad(&color2,j); } draw_line2(epaisseur,i,j,geometry[i].Xi,geometry[i].Yi, geometry[j].Xi,geometry[j].Yi, color1,color2,FALSE); if(geometry[i].typeConnections[nj]==2 && showMultipleBonds) { gint x1; gint x2; gint y1; gint y2; split[0] = (gint)(ab[0]*epaisseur*1.5); split[1] = (gint)(ab[1]*epaisseur*1.5); x1 = geometry[i].Xi-split[0]-split[1]; y1 = geometry[i].Yi-split[1]+split[0]; x2 = geometry[j].Xi-split[0]+split[1]; y2 = geometry[j].Yi-split[1]-split[0]; draw_line2(epaisseur/3,i,j,x1, y1, x2, y2, color1,color2,TRUE); } if(geometry[i].typeConnections[nj]==3 && showMultipleBonds) { gint x1; gint x2; gint y1; gint y2; split[0] = (gint)(ab[0]*epaisseur*1.5); split[1] = (gint)(ab[1]*epaisseur*1.5); x1 = geometry[i].Xi-split[0]-split[1]; y1 = geometry[i].Yi-split[1]+split[0]; x2 = geometry[j].Xi-split[0]+split[1]; y2 = geometry[j].Yi-split[1]-split[0]; draw_line2(epaisseur/2,i,j,x1, y1, x2, y2, color1,color2,TRUE); x1 = geometry[i].Xi+split[0]-split[1]; y1 = geometry[i].Yi+split[1]+split[0]; x2 = geometry[j].Xi+split[0]+split[1]; y2 = geometry[j].Yi+split[1]-split[0]; draw_line2(epaisseur/2,i,j,x1, y1, x2, y2, color1,color2,TRUE); } if((OperationType==CUTBOND || OperationType==CHANGEBOND) && NBatoms==2 && NumBatoms[0]>0 && NumBatoms[1]>0) { gint na = NumBatoms[0]; gint nb = NumBatoms[1]; if( (na == (gint)geometry[i].N && geometry[i].show && nb == (gint)geometry[j].N && geometry[j].show) || (nb == (gint)geometry[i].N && geometry[i].show && na == (gint)geometry[j].N && geometry[j].show) ) { if(OperationType==CUTBOND) draw_line2(epaisseur,i,j,geometry[i].Xi,geometry[i].Yi, geometry[j].Xi,geometry[j].Yi, colorRed,colorRed,FALSE); else draw_line2(epaisseur,i,j,geometry[i].Xi,geometry[i].Yi, geometry[j].Xi,geometry[j].Yi, colorFrag,colorFrag,FALSE); } } } else { k =get_num_min_rayonIJ(i,j); epaisseur = (gint) (geometry[k].Rayon/2*factorstick); epaisseur = get_epaisseur(); if (PersMode) epaisseur =(gint)(geometry[k].Coefpers*epaisseur); if(OperationType==ADDATOMSBOND && NFatoms==2 && NumFatoms[0]>0 && NumFatoms[1]>0) { gint na = NumFatoms[0]; gint nb = NumFatoms[1]; if( (na == (gint)geometry[i].N && geometry[i].show && nb == (gint)geometry[j].N && geometry[j].show) || (nb == (gint)geometry[i].N && geometry[i].show && na == (gint)geometry[j].N && geometry[j].show) ) draw_line2(epaisseur,i,j,geometry[i].Xi,geometry[i].Yi, geometry[j].Xi,geometry[j].Yi, colorFrag,colorFrag,FALSE); } if(geometry[i].show && geometry[j].show && ShowHBonds && geometry[i].typeConnections[nj]==-1) { epaisseur = 3; epaisseur*=factorstick; color1 = geometry[i].Prop.color; color2 = geometry[j].Prop.color; draw_line2_hbond(geometry[i].Xi,geometry[i].Yi, geometry[j].Xi,geometry[j].Yi, i, j, color1, color2, epaisseur); } } if(FreeAtoms[i]) { rayon =(gushort)(geometry[i].Rayon*factorball)/2; if (PersMode) rayon =(gushort)(geometry[i].Coefpers*geometry[i].Rayon*factorball)/2; color1 = geometry[i].Prop.color; if (ShadMode) set_color_shad(&color1,i); if(rayon<5) rayon = 5; draw_ball(geometry[i].Xi,geometry[i].Yi,rayon,color1); } else { rayon =(gushort)(geometry[i].Rayon*factorstick)/3; if (PersMode) rayon =(gushort)(geometry[i].Coefpers*geometry[i].Rayon*factorstick)/3; if(rayon<5) rayon = 5; } if((gint)i==NumSelectedAtom) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorRed); else { if(NSA[0]>-1 && (gint)geometry[i].N == NSA[0]) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorRed); if(NSA[1]>-1 && (gint)geometry[i].N == NSA[1]) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorGreen); if(NSA[2]>-1 && (gint)geometry[i].N == NSA[2]) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorBlue); if(NSA[3]>-1 && (gint)geometry[i].N == NSA[3]) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorYellow); } if(OperationType == MEASURE) for(j = 0;j<4;j++) if(NumSelAtoms[j] == (gint)geometry[i].N) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorGreen); switch(OperationType) { case ADDFRAGMENT : if(atomToDelete == (gint)geometry[i].N) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorRed); if(atomToBondTo == (gint)geometry[i].N) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorGreen); if(angleTo == (gint)geometry[i].N) draw_anneau(geometry[i].Xi,geometry[i].Yi,rayon,colorBlue); break; case SELECTOBJECTS : case SELECTFRAG : case SELECTRESIDUE : case DELETEFRAG : case DELETEOBJECTS : case ROTLOCFRAG : case ROTZLOCFRAG : case MOVEFRAG : for(j = 0;jwindow); gdk_colormap_alloc_color(colormap, &color, FALSE, TRUE); gdk_gc_set_foreground(gc,&color); gabedit_cairo_string(cr, GeomDrawingArea, font_desc, gc, x0,y0,t,TRUE,TRUE); if(crExport) gabedit_cairo_string(crExport, GeomDrawingArea, font_desc, gc, x0,y0,t,TRUE,TRUE); if(font_desc) pango_font_description_free (font_desc); } /*****************************************************************************/ void calcul_ndipole() { gint i; gint j; for (j = 0;jgeometry[i].Z) Ndipole[j] = i; } } /*****************************************************************************/ void drawGeom_dipole(gint i) { gint epaisseur; GdkColor color; if(!Ddef) return; epaisseur = (gint) (10*factorstick); epaisseur = (gint) (epaisseur/2.0); epaisseur =(gint)(epaisseur*Dipole.radius/0.25); if(istyle->black_gc, TRUE, 0, 0, GeomDrawingArea->allocation.width, GeomDrawingArea->allocation.height); drawGeom(); } /*****************************************************************************/ void set_back_color(GtkColorSelection *Sel,gpointer *d) { GdkColor color; GdkColormap *colormap; gtk_color_selection_get_current_color(Sel, &color); colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); BackColor = gdk_color_copy(&color); gdk_colormap_alloc_color(colormap,&color,FALSE,TRUE); gdk_gc_set_foreground(gc,&color); gdk_draw_rectangle (pixmap, gc, TRUE, 0, 0, GeomDrawingArea->allocation.width, GeomDrawingArea->allocation.height); drawGeom(); } /*****************************************************************************/ void set_back_color_grey() { GdkColor color; GdkColormap *colormap; color.red = 80*257; color.green = 80*257; color.blue = 80*257; colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); BackColor = gdk_color_copy(&color); gdk_colormap_alloc_color(colormap,&color,FALSE,TRUE); gdk_gc_set_foreground(gc,&color); gdk_draw_rectangle (pixmap, gc, TRUE, 0, 0, GeomDrawingArea->allocation.width, GeomDrawingArea->allocation.height); drawGeom(); } /*****************************************************************************/ void set_back_color_default() { static gint first = 0; GdkColor color; GdkColormap *colormap; if(!BackColor) { set_back_color_grey(); return; } color.red = BackColor->red; color.green = BackColor->green; color.blue = BackColor->blue; colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); if(first==0) { g_free(BackColor); first = 1; } BackColor = gdk_color_copy(&color); gdk_colormap_alloc_color(colormap,&color,FALSE,TRUE); gdk_gc_set_foreground(gc,&color); gdk_draw_rectangle (pixmap, gc, TRUE, 0, 0, GeomDrawingArea->allocation.width, GeomDrawingArea->allocation.height); drawGeom(); } /*****************************************************************************/ void open_color_dlg(GtkWidget *win,gpointer *DrawingArea) { GtkColorSelectionDialog *ColorDlg; ColorDlg = (GtkColorSelectionDialog *)gtk_color_selection_dialog_new( _("Set Background Color")); gtk_window_set_modal (GTK_WINDOW (ColorDlg), TRUE); gtk_window_set_transient_for(GTK_WINDOW(ColorDlg),GTK_WINDOW(Fenetre)); gtk_widget_hide(ColorDlg->help_button); g_signal_connect_swapped(G_OBJECT(ColorDlg->ok_button),"clicked", (GCallback)set_back_color,GTK_OBJECT(ColorDlg->colorsel)); g_signal_connect_swapped(G_OBJECT(ColorDlg->ok_button),"clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(ColorDlg)); g_signal_connect_swapped(G_OBJECT(ColorDlg->cancel_button),"clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(ColorDlg)); gtk_widget_show(GTK_WIDGET(ColorDlg)); } /*****************************************************************************/ GtkWidget *create_drawing_in_box(GtkWidget *box) { GtkWidget *DrawingArea; DrawingArea = gtk_drawing_area_new(); gtk_box_pack_start(GTK_BOX(box), DrawingArea,TRUE,TRUE,0); gtk_widget_set_size_request(GTK_WIDGET(DrawingArea),400,-1); gtk_widget_show(DrawingArea); return DrawingArea; } /*****************************************************************************/ GtkWidget *create_drawing_in_table(GtkWidget *Table,gint i,gint j,gint k,gint l) { GtkWidget *DrawingArea; DrawingArea = gtk_drawing_area_new(); gtk_table_attach(GTK_TABLE(Table), DrawingArea, i,j, k,l, GTK_FILL | GTK_EXPAND, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_set_size_request(GTK_WIDGET(DrawingArea),400,-1); gtk_widget_show(DrawingArea); return DrawingArea; } /*****************************************************************************/ GtkWidget *create_frame_in_vbox(gchar *title,GtkWidget *win,GtkWidget *vbox,gboolean type) { GtkWidget *frame; frame = gtk_frame_new (title); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); g_object_ref (frame); g_object_set_data_full(G_OBJECT (win), "frame", frame,(GDestroyNotify) g_object_unref); gtk_container_set_border_width (GTK_CONTAINER (frame), 1); gtk_box_pack_start(GTK_BOX(vbox), frame,type,type,1); gtk_widget_show (frame); return frame; } /*****************************************************************************/ GtkWidget *create_vbox_in_hbox(GtkWidget *win,GtkWidget *hbox,gboolean type) { GtkWidget *vbox; vbox = gtk_vbox_new (FALSE, 0); g_object_ref (vbox); g_object_set_data_full(G_OBJECT (win), "vbox", vbox, (GDestroyNotify) g_object_unref); gtk_widget_show (vbox); gtk_box_pack_start (GTK_BOX (hbox), vbox, type, type, 1); return vbox; } /*****************************************************************************/ GtkWidget *create_hbox_in_vbox(GtkWidget *vbox) { GtkWidget *hbox; hbox = gtk_hbox_new (FALSE, 0); g_object_ref (hbox); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); return hbox; } /*****************************************************************************/ void destroy_drawing_and_children(GtkWidget *win,gpointer data) { destroy_children(GeomDlg); } /*****************************************************************************/ void destroy_all_drawing(GtkWidget *win) { stop_calcul(win, NULL); while( gtk_events_pending() ) gtk_main_iteration(); geometry = Free_One_Geom(geometry ,Natoms); geometry0 = Free_One_Geom(geometry0,Natoms); g_free(NumFatoms); NumFatoms = NULL; NFatoms = 0; Natoms = 0; gtk_widget_destroy(GeomDrawingArea); GeomDrawingArea = NULL; gtk_widget_destroy(GeomDlg); if (pixmap) g_object_unref(pixmap); pixmap = NULL; if (cr) cairo_destroy (cr); cr = NULL; if (gc) g_object_unref(gc); gc = NULL; Orig[0] = Orig[1] = Orig[2] = 0.0; } /*****************************************************************************/ GtkWidget *AddNoteBookPage(GtkWidget *NoteBook,char *label) { GtkWidget *vboxpage; GtkWidget *Frame; Frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(Frame), 2); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), Frame, NULL, NULL); g_object_set_data(G_OBJECT (Frame), "Frame", Frame); gtk_widget_show(Frame); vboxpage = create_vbox(Frame); return vboxpage; } /********************************************************************************/ void set_sensitive_stop_button(gboolean sens) { if(GeomDrawingArea) gtk_widget_set_sensitive(StopButton, sens); } /********************************************************************************************/ static void stop_calcul(GtkWidget *wi, gpointer data) { StopCalcul = TRUE; } /********************************************************************************/ void add_stop_button(GtkWidget *Win, GtkWidget *box) { StopButton = gtk_button_new_with_label("Cancel"); gtk_box_pack_start (GTK_BOX (box), StopButton, FALSE, TRUE, 0); gtk_widget_set_sensitive(StopButton, FALSE); g_signal_connect(G_OBJECT(StopButton), "clicked", G_CALLBACK (stop_calcul), NULL); } /********************************************************************************/ static void open_menu(GtkWidget *Win, GdkEvent *event, gpointer Menu) { GdkEventButton *bevent; bevent = (GdkEventButton *) event; popup_menu_geom( bevent->button, bevent->time); } /********************************************************************************/ static void add_menu_button(GtkWidget *Win, GtkWidget *box) { GtkWidget* menuButton; menuButton = gtk_button_new_with_label("M"); gtk_box_pack_start (GTK_BOX (box), menuButton, FALSE, TRUE, 0); g_signal_connect(G_OBJECT(menuButton), "button_press_event",G_CALLBACK(open_menu), NULL); gtk_widget_show (menuButton); } /********************************************************************************/ void create_window_drawing() { GtkWidget *vboxframe; GtkWidget *frame; GtkWidget *hboxframe; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *hboxoperation; GtkWidget *DrawingArea; GtkWidget *vboxleft; GtkWidget *vboxright; GtkWidget *NoteBook; GtkWidget *Table; GtkWidget *handelbox; GtkWidget *Status; GtkWidget *VboxWin; GtkWidget *hboxtoolbar; GtkWidget* handlebox; GtkWidget* table; { gint i; factor=1.0; /* factorstick=1.0; factorball=1.0; */ factordipole=1.0; TransX=0; TransY=0; SetCosSin(); Ddef = FALSE; AtomToInsert = g_strdup("C"); for(i=0;i<4;i++) NumSelAtoms[i] = -1; TypeGeom = GABEDIT_TYPEGEOM_STICK; ShadMode = FALSE; PersMode = FALSE; LightMode = FALSE; OrtepMode = FALSE; CartoonMode = TRUE; DrawDistance=FALSE; DrawDipole = FALSE; StopCalcul = FALSE; ShowHBonds = FALSE; Frag.NAtoms = 0; Frag.Atoms = NULL; FragItems = NULL; NFrags = 0; OperationType = ROTATION ; } geometry = NULL; geometry0 = NULL; Natoms = 0; NumFatoms = NULL; NFatoms = 0; define_geometry(); if(Natoms == 0) OperationType = EDITOBJECTS; GeomDlg = NULL ; GeomDlg = gtk_window_new(GTK_WINDOW_TOPLEVEL); VboxWin = gtk_vbox_new (TRUE, 0); gtk_container_add(GTK_CONTAINER(GeomDlg),VboxWin); gtk_widget_show(VboxWin); gtk_window_set_title(GTK_WINDOW(GeomDlg),_("Gabedit : Draw Geometry ")); gtk_window_set_transient_for(GTK_WINDOW(GeomDlg),GTK_WINDOW(Fenetre)); gtk_window_move(GTK_WINDOW(GeomDlg),0,0); init_child(GeomDlg,destroy_all_drawing,_(" Draw Geom. ")); g_signal_connect(G_OBJECT(GeomDlg),"delete_event",(GCallback)destroy_children,NULL); frame = create_frame_in_vbox(NULL,GeomDlg,VboxWin,TRUE); gtk_widget_show (frame); vboxframe = create_vbox(frame); gtk_widget_show (vboxframe); hboxframe = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vboxframe), hboxframe, TRUE, TRUE, 0); gtk_widget_show (hboxframe); /* DrawingArea */ vbox = create_vbox_in_hbox(frame,hboxframe,TRUE); frame = create_frame_in_vbox(NULL,GeomDlg,vbox,TRUE); hbox = create_hbox_in_vbox(vbox); vbox = create_vbox(frame); vboxleft= vbox; vbox = create_vbox_in_hbox(frame,hboxframe,FALSE); vboxhandle = vbox; handelbox =gtk_handle_box_new (); gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(handelbox),GTK_SHADOW_NONE); gtk_handle_box_set_handle_position (GTK_HANDLE_BOX(handelbox),GTK_POS_TOP); gtk_container_add( GTK_CONTAINER (vbox), handelbox); gtk_widget_show (handelbox); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add( GTK_CONTAINER(handelbox), vbox); gtk_widget_show (vbox); vboxright= vbox; vbox = vboxleft; /* The Table */ Table = gtk_table_new(1, 2, FALSE); gtk_container_add(GTK_CONTAINER(vbox), Table); gtk_widget_show(Table); DrawingArea = create_drawing_in_table(Table,1,2,0,1); gtk_widget_set_size_request(GTK_WIDGET(DrawingArea ),(gint)(ScreenHeight*0.5),(gint)(ScreenHeight*0.5)); GeomDrawingArea = DrawingArea; g_signal_connect(G_OBJECT(GeomDrawingArea),"configure_event", (GCallback)configure_event,NULL); vbox = gtk_vbox_new (FALSE, 0); gtk_table_attach(GTK_TABLE(Table), vbox, 0,1, 0,1, GTK_FILL , GTK_FILL, 0, 0); gtk_widget_show(vbox); add_menu_button(GeomDlg, vbox); hboxtoolbar = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hboxtoolbar, TRUE, TRUE, 0); gtk_widget_show(hboxtoolbar); gtk_widget_set_events (GeomDrawingArea, GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_CONTROL_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK); gtk_widget_realize(GeomDlg); NoteBook = gtk_notebook_new(); gtk_notebook_set_show_tabs(GTK_NOTEBOOK(NoteBook), FALSE); gtk_notebook_set_show_border(GTK_NOTEBOOK(NoteBook), FALSE); NoteBookDraw = NoteBook; gtk_box_pack_start(GTK_BOX (vboxright), NoteBook,TRUE, TRUE, 0); vboxmeasure =AddNoteBookPage(NoteBook,_("Measure")); AddMeasure(GeomDlg,vboxmeasure); gtk_widget_show(NoteBook); gtk_widget_show_all(vboxmeasure); change_of_center(NULL,NULL); gtk_widget_show(vboxright); handlebox = gtk_handle_box_new (); gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(handlebox),GTK_SHADOW_NONE); gtk_handle_box_set_handle_position (GTK_HANDLE_BOX(handlebox),GTK_POS_LEFT); gtk_widget_show (handlebox); gtk_box_pack_start(GTK_BOX (hbox), handlebox,TRUE, TRUE, 0); table = gtk_table_new(2,2,FALSE); gtk_container_add (GTK_CONTAINER (handlebox), table); gtk_widget_show(table); /* Rotation Status */ Status = gtk_statusbar_new(); gtk_table_attach(GTK_TABLE(table),Status,0,1,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); idStatusRotation = gtk_statusbar_get_context_id(GTK_STATUSBAR(Status),_("Rotation")); StatusRotation = Status; gtk_statusbar_pop(GTK_STATUSBAR(StatusRotation),idStatusRotation); gtk_statusbar_push(GTK_STATUSBAR(StatusRotation),idStatusRotation, _(" Press the Middle mouse button and move your mouse for a \"Rotation\". ")); /* Mode Status */ Status = gtk_statusbar_new(); gtk_table_attach(GTK_TABLE(table),Status,1,2,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); idStatusPopup= gtk_statusbar_get_context_id(GTK_STATUSBAR(Status),"Ball&Stick"); StatusPopup = Status; gtk_statusbar_pop(GTK_STATUSBAR(StatusPopup),idStatusPopup); gtk_statusbar_push(GTK_STATUSBAR(StatusPopup),idStatusPopup, _(" Press the Right mouse button for display the popup menu. ")); /* Operation Status */ Status = gtk_statusbar_new(); hboxoperation = gtk_hbox_new (FALSE, 0); gtk_table_attach(GTK_TABLE(table), hboxoperation,0,2,1,2, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); gtk_box_pack_start (GTK_BOX(hboxoperation),Status, TRUE, TRUE, 1); idStatusOperation = gtk_statusbar_get_context_id(GTK_STATUSBAR(Status),_("Rotation")); StatusOperation = Status; gtk_statusbar_pop(GTK_STATUSBAR(StatusOperation),idStatusOperation); gtk_statusbar_push(GTK_STATUSBAR(StatusOperation),idStatusOperation, _(" Press the Left mouse button and move your mouse for a \"Rotation\". ")); add_stop_button(GeomDlg, hboxoperation); gtk_widget_show_all(hbox); gtk_widget_show_all(hboxoperation); gtk_widget_show_all(vbox); gtk_widget_show(frame); if(MeasureIsHide) { gtk_widget_hide(vboxhandle); } else gtk_widget_show(vboxhandle); gtk_window_set_default_size (GTK_WINDOW(GeomDlg), (gint)(ScreenHeight*0.85), (gint)(ScreenHeight*0.85)); g_object_set_data(G_OBJECT(GeomDlg), "StatusBox",handlebox); create_toolbar_and_popup_menu_geom(hboxtoolbar); /* Evenments */ g_signal_connect(G_OBJECT(GeomDrawingArea),"expose_event",(GCallback)expose_event,NULL); g_signal_connect(G_OBJECT(GeomDrawingArea), "button_press_event",G_CALLBACK(event_dispatcher), NULL); g_signal_connect(G_OBJECT(GeomDrawingArea), "motion_notify_event",G_CALLBACK(motion_notify), NULL); g_signal_connect(G_OBJECT(GeomDrawingArea), "button_release_event",G_CALLBACK(button_release), NULL); g_signal_connect(G_OBJECT (GeomDlg), "key_press_event", (GCallback) set_key_press, GeomDlg); g_signal_connect(G_OBJECT (GeomDlg), "key_release_event", (GCallback) set_key_release, NULL); gtk_widget_show(GeomDlg); gtk_window_move(GTK_WINDOW(GeomDlg),0,0); /* set_back_color_black();*/ /* set_back_color_grey();*/ set_back_color_default(); set_icone(GeomDlg); if(Natoms == 0) SetOperation(NULL,EDITOBJECTS); /*define_good_trans();*/ } /*****************************************************************************/ void draw_geometry(GtkWidget *w,gpointer d) { if(GeomDrawingArea == NULL) create_window_drawing(); else { gtk_widget_hide(GeomDlg); gtk_widget_show(GeomDlg); rafresh_drawing(); } } /*****************************************************************************/ void export_geometry(gchar* fileName, gchar* fileType) { if(!fileName) return; if(!fileType) return; if(!GeomDrawingArea) return; if(!strcmp(fileType,"pdf")) { cairo_surface_t *surface; surface = cairo_pdf_surface_create(fileName, GeomDrawingArea->allocation.width, GeomDrawingArea->allocation.height); crExport = cairo_create(surface); drawGeom(); cairo_show_page(crExport); cairo_surface_destroy(surface); cairo_destroy(crExport); crExport = NULL; return; } else if(!strcmp(fileType,"ps")) { cairo_surface_t *surface; surface = cairo_ps_surface_create(fileName, GeomDrawingArea->allocation.width, GeomDrawingArea->allocation.height); crExport = cairo_create(surface); drawGeom(); cairo_show_page(crExport); cairo_surface_destroy(surface); cairo_destroy(crExport); crExport = NULL; return; } else if(!strcmp(fileType,"eps")) { cairo_surface_t *surface; surface = cairo_ps_surface_create(fileName, GeomDrawingArea->allocation.width, GeomDrawingArea->allocation.height); cairo_ps_surface_set_eps(surface, TRUE); crExport = cairo_create(surface); drawGeom(); cairo_show_page(crExport); cairo_surface_destroy(surface); cairo_destroy(crExport); crExport = NULL; return; } else if(!strcmp(fileType,"svg")) { cairo_surface_t *surface; surface = cairo_svg_surface_create(fileName, GeomDrawingArea->allocation.width, GeomDrawingArea->allocation.height); crExport = cairo_create(surface); drawGeom(); cairo_show_page(crExport); cairo_surface_destroy(surface); cairo_destroy(crExport); crExport = NULL; return; } } #endif /* DRAWGEOMGL */ GabeditSrc250/src/Geometry/BuildPeriodic.h0000644000175100017510000000022013130665226020737 0ustar alloucheallouche #ifndef __GABEDIT_BUILDPERIODIC_H__ #define __GABEDIT_BUILDPERIODIC_H__ void build_periodic_dlg(); #endif /* __GABEDIT_BUILDPERIODIC_H__ */ GabeditSrc250/src/Geometry/DrawGeomGL.c0000644000175100017510000116764713130665226020200 0ustar alloucheallouche/* DrawGeomGL.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifdef DRAWGEOMGL #include "../../Config.h" #include #include #include #include #include #include "../../gl2ps/gl2ps.h" #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsGL.h" #include "../Utils/PovrayUtils.h" #include "../Utils/AtomsProp.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/Measure.h" #include "../Geometry/Povray.h" #include "../Common/Windows.h" #include "../Utils/Transformation.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/GeomZmatrix.h" #include "../Geometry/GeomSymmetry.h" #include "../Files/FileChooser.h" #include "../Geometry/ImagesGeom.h" #include "../Geometry/Fragments.h" #include "../Geometry/FragmentsPPD.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/AxesGeomGL.h" #include "../Geometry/RotFragments.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/PersonalFragments.h" #include "../Geometry/ResultsAnalise.h" #include "../Utils/HydrogenBond.h" #include "../MolecularMechanics/PDBTemplate.h" #include "../MolecularMechanics/CalculTypesAmber.h" #include "../Symmetry/MoleculeSymmetryInterface.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Utils/Jacobi.h" #include "../Utils/Vector3d.h" #include "../Utils/GabeditTextEdit.h" #include "../Utils/UtilsCairo.h" #include "../Geometry/MenuToolBarGeom.h" #include "../Geometry/PreviewGeom.h" #include "../Geometry/FragmentsSelector.h" #include "../Geometry/SelectionDlg.h" #include "../IsotopeDistribution/IsotopeDistributionCalculatorDlg.h" #include "../Geometry/TreeMolecule.h" /********************************************************************************/ #define MAT 30 #define SCALE(i) (i / 65535.) /********************************************************************************/ static gdouble scaleAnneau = 1.3; static gboolean ortho = FALSE; static gint xSelection = -1; static gint ySelection = -1; static GLint viewport[4]; static GLdouble mvmatrix[16]; static GLdouble projmatrix[16]; static gboolean lightOnOff[3] = { TRUE,FALSE,FALSE}; static V4d light0_position = {0.0, 0.0,50.0,0.0}; static V4d light1_position = {0.0, 50.0,50.0,0.0}; static V4d light2_position = {50.0, 0.0,50.0,0.0}; static gdouble zNear = 1.0; static gdouble zFar = 100.0; static GLdouble Zoom = 45; static gdouble Trans[3] = { 0,0,-50.0}; static gdouble Quat[4] = {0.0,0.0,0.0,1.0}; static gdouble QuatFrag[4] = {0.0,0.0,0.0,1.0}; static gdouble QuatAtom[4] = {0.0,0.0,0.0,1.0}; static gdouble Orig[3] = {0.0,0.0,0.0}; static gdouble BeginX = 0; static gdouble BeginY = 0; static gdouble CSselectedAtom[3] = {0.0,0.0,0.0}; static gint NumSelectedAtom = -1; static gint NumProcheAtom = -1; static gint NumPointedAtom = -1; static gboolean ButtonPressed = FALSE; static gboolean ShiftKeyPressed = FALSE; static gboolean ControlKeyPressed = FALSE; static gboolean FKeyPressed = FALSE; static gboolean GKeyPressed = FALSE; gchar* strToDraw = NULL; static gdouble minDistanceH = 1.50; /* in Agnstrom */ static gdouble maxDistanceH = 3.15; /* in Agnstrom */ static gdouble minAngleH = 145.0; static gdouble maxAngleH = 215.0; static gboolean showMultipleBonds = TRUE; static gboolean CartoonMode = TRUE; static gboolean ShowHydrogenAtoms = TRUE; static gboolean AdjustHydrogenAtoms = TRUE; static gboolean RebuildConnectionsDuringEdition = FALSE; static gint NumBatoms[2] = {-1,-1}; static gint NBatoms = 0; static gint atomToDelete = -1; static gint atomToBondTo = -1; static gint angleTo = -1; static gdouble fragAngle = 180.0; static gdouble factorstick = 1.0; static gdouble factorball = 1.0; static gdouble factordipole = 1.0; static gboolean buttonpress = FALSE; static int optcol = 0; static GLuint GeomList = 0; static GLuint SelectionList = 0; static GLuint DipoleList = 0; static gboolean showBox = TRUE; static GLuint AxesList = 0; static GabEditTypeGeom TypeGeom = GABEDIT_TYPEGEOM_STICK; /********************************************************************************/ void set_statubar_pop_sel_atom(); GtkWidget *AddNoteBookPage(GtkWidget *NoteBook,char *label); void drawGeom(); void destroy_all_drawing(GtkWidget *win); void ActivateButtonOperation (GtkWidget *widget, guint data); void delete_selected_atoms(); void delete_selected_bond(); void change_selected_bond(); void add_bond(); gint unselected_atom(GdkEventButton *bevent); static gint insert_atom(GdkEventButton *event); static gint insert_fragment(GtkWidget *widget,GdkEvent *event); void set_optimal_geom_view(); gboolean if_selected(gint Num); gint index_selected(gint Num); void define_geometry(); void buildRotation(); void deleteHydrogensConnectedTo(gint n, gint nH); void delete_one_atom(gint NumDel); static gint replace_atom(); static void draw_rectangle_selection(); /********************************************************************************/ static GdkColor* BackColor=NULL; static cairo_t *cr = NULL; static GtkWidget *NoteBookDraw; static GtkWidget *vboxmeasure; static gdouble TCOS[91],TSIN[91]; static GtkWidget *vboxhandle; static GtkWidget *StatusRotation = NULL; static GtkWidget *StatusPopup = NULL; static GtkWidget *StatusOperation = NULL; static guint idStatusRotation = 0; static guint idStatusPopup = 0; static guint idStatusOperation = 0; static GabEditGeomOperation OperationType = ROTATION; static GabEditSelectType SelectType = RECTANGLE; guint LabelOption = LABELNO; static Fragment Frag = {0,NULL}; static cairo_t *crExport = NULL; static GList* fifoGeometries = NULL; static GList* currentFifoGeometries = NULL; static gboolean oldNext = FALSE; /**********************************************************************************/ static void stop_calcul(GtkWidget *wi, gpointer data); void delete_all_selected_atoms(); static void reset_connections_between_selected_atoms(); static void reset_connections_between_selected_and_notselected_atoms(); static GtkWidget* NewGeomDrawingArea(GtkWidget* vboxwin, GtkWidget* GeomDlg); static void SetLight(); static void gl_build_box(); static void gl_build_geometry(); static void gl_build_selection(); static void gl_build_labels(); static void gl_build_dipole(); static gint redraw(GtkWidget *widget); /*********************************************************************************************/ void getQuatGeom(gdouble q[]) { gint i; for(i=0;i<4;i++) q[i] = Quat[i]; } /********************************************************************************/ static void destroy_setlight_window(GtkWidget* Win,gpointer data) { GtkWidget**entrys =(GtkWidget**) g_object_get_data(G_OBJECT (Win), "Entrys"); gtk_widget_destroy(Win); if(entrys) g_free(entrys); } /*********************************************************************************************/ void set_light_geom_on_off(gint i) { lightOnOff[i] = !lightOnOff[i] ; } /*********************************************************************************************/ static gchar** get_light_position(gint num) { gint i; gchar** t = g_malloc(3*sizeof(gchar*)); switch(num) { case 0 : for(i=0;i<3;i++) t[i] = g_strdup_printf("%lf",light0_position[i]); break; case 1 : for(i=0;i<3;i++) t[i] = g_strdup_printf("%lf",light1_position[i]); break; case 2 : for(i=0;i<3;i++) t[i] = g_strdup_printf("%lf",light2_position[i]); break; } return t; } /*********************************************************************************************/ /* static gboolean get_light(gint num,gdouble v[]) { gint i; v[0] = v[1] = v[2] = 0; if(num<0 || num>2) return FALSE; switch(num) { case 0 : for(i=0;i<3;i++) v[i] = light0_position[i]; break; case 1 : for(i=0;i<3;i++) v[i] = light1_position[i]; break; case 2 : for(i=0;i<3;i++) v[i] = light2_position[i]; break; } return lightOnOff[num]; } */ /*********************************************************************************************/ static void set_light_position(gint num,gdouble v[]) { gint i; switch(num) { case 0 : for(i=0;i<3;i++) light0_position[i] = v[i]; break; case 1 : for(i=0;i<3;i++) light1_position[i] = v[i]; break; case 2 : for(i=0;i<3;i++) light2_position[i] = v[i]; break; } } /********************************************************************************/ static void apply_ligth_positions(GtkWidget *Win,gpointer data) { GtkWidget** Entrys =(GtkWidget**)g_object_get_data(G_OBJECT (Win), "Entrys"); G_CONST_RETURN gchar* temp; gint i; gint j; gdouble v[3]; for(i=0;i<3;i++) { for(j=0;j<3;j++) { temp = gtk_entry_get_text(GTK_ENTRY(Entrys[j*3+i])); v[j] = atof(temp); } set_light_position(i,v); } destroy_setlight_window(Win,data); rafresh_drawing(); } /********************************************************************************/ static GtkWidget *create_light_positions_frame( GtkWidget *vboxall,gchar* title) { GtkWidget *frame; GtkWidget *vboxframe; GtkWidget **Entrys = g_malloc(9*sizeof(GtkWidget*)); gushort i; gushort j; GtkWidget *Table; gchar** temp[3]; #define NLIGNES 3 #define NCOLUMNS 3 gchar *strcolumns[NCOLUMNS] = {" X "," Y "," Z "}; gchar *strlignes[NLIGNES] = {" Light 1 : "," Light 2 : "," Light 3 : "}; for(i=0;i<3;i++) temp[i] = get_light_position(i); frame = gtk_frame_new (title); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_container_add (GTK_CONTAINER (vboxall), frame); gtk_widget_show (frame); vboxframe = create_vbox(frame); Table = gtk_table_new(4,4,FALSE); gtk_container_add(GTK_CONTAINER(vboxframe),Table); for(j=1;jC[j]) min = C[j]; if(maxallocation.width; height = GeomDrawingArea->allocation.height; } *aspect = width/height; *zn = zNear; *zf = zFar; *angle = Zoom; *persp = PersMode; } /*********************************************************************************************/ static void set_camera_values(gdouble zn, gdouble zf, gdouble zo, gboolean persp) { zNear = zn; zFar = zf; Zoom = zo; PersMode = persp; Trans[2] = -zf/2; redraw(GeomDrawingArea); } /********************************************************************************/ static void set_camera_optimal(GtkWidget* Win,gpointer data) { GtkWidget* EntryZNear = (GtkWidget*)g_object_get_data(G_OBJECT (Win), "EntryZNear"); GtkWidget* EntryZFar = (GtkWidget*)g_object_get_data(G_OBJECT (Win), "EntryZFar"); GtkWidget* EntryZoom = (GtkWidget*)g_object_get_data(G_OBJECT (Win), "EntryZoom"); gchar* temp; gdouble min = 0; gdouble max = 0; get_min_max_coord(&min, &max); if(min == 0 && max == 0) return; temp = g_strdup("1"); gtk_entry_set_text(GTK_ENTRY(EntryZNear),temp); temp = g_strdup_printf("%lf",fabs(max-min)*5); gtk_entry_set_text(GTK_ENTRY(EntryZFar), temp); temp = g_strdup("1.0"); gtk_entry_set_text(GTK_ENTRY(EntryZoom),temp); } /********************************************************************************/ static void apply_camera(GtkWidget* Win,gpointer data) { GtkWidget* EntryZNear = (GtkWidget*)g_object_get_data(G_OBJECT (Win), "EntryZNear"); GtkWidget* EntryZFar = (GtkWidget*)g_object_get_data(G_OBJECT (Win), "EntryZFar"); GtkWidget* EntryZoom = (GtkWidget*)g_object_get_data(G_OBJECT (Win), "EntryZoom"); GtkWidget* buttonPerspective = (GtkWidget*)g_object_get_data(G_OBJECT (Win), "ButtonPerspective"); G_CONST_RETURN gchar* temp; gdouble zNear = 1; gdouble zFar = 100; gdouble Zoom = 45; gdouble zn; gdouble zf; gdouble zo; gdouble aspect; gboolean perspective; get_camera_values(&zNear, &zFar, &Zoom, &aspect, &perspective); temp = gtk_entry_get_text(GTK_ENTRY(EntryZNear)); zn = atof(temp); if(zn<=0) zn = zNear; temp = gtk_entry_get_text(GTK_ENTRY(EntryZFar)); zf = atof(temp); if(zf<=0) zn = zFar; temp = gtk_entry_get_text(GTK_ENTRY(EntryZoom)); zo = atof(temp); if(zo<=0) zo = Zoom; else zo = 1/zo*45; if(GTK_IS_WIDGET(buttonPerspective)) perspective =GTK_TOGGLE_BUTTON (buttonPerspective)->active; set_camera_values(zn, zf, zo, perspective); } /********************************************************************************/ static void set_sensitive_camera(GtkWidget* buttonPerspective, gpointer data) { if(GTK_IS_WIDGET(buttonPerspective)) { gboolean perspective = GTK_TOGGLE_BUTTON (buttonPerspective)->active; GtkWidget* EntryZNear = (GtkWidget*)g_object_get_data(G_OBJECT (buttonPerspective), "EntryZNear"); GtkWidget* EntryZFar = g_object_get_data(G_OBJECT (buttonPerspective), "EntryZFar"); GtkWidget* buttonOptimal = g_object_get_data(G_OBJECT (buttonPerspective), "ButtonOptimal"); GtkWidget* labelZNear = g_object_get_data(G_OBJECT (buttonPerspective), "LabelZNear"); GtkWidget* labelZFar = g_object_get_data(G_OBJECT (buttonPerspective), "LabelZFar"); if(GTK_IS_WIDGET(EntryZNear))gtk_widget_set_sensitive(EntryZNear,perspective); if(GTK_IS_WIDGET(EntryZFar))gtk_widget_set_sensitive(EntryZFar,perspective); if(GTK_IS_WIDGET(buttonOptimal))gtk_widget_set_sensitive(buttonOptimal,perspective); if(GTK_IS_WIDGET(labelZNear))gtk_widget_set_sensitive(labelZNear,perspective); if(GTK_IS_WIDGET(labelZFar))gtk_widget_set_sensitive(labelZFar,perspective); } } /********************************************************************************/ static GtkWidget* create_camera_frame(GtkWidget* Win,GtkWidget *vbox) { GtkWidget *frame; GtkWidget *vboxframe; GtkWidget* buttonOptimal; GtkWidget* EntryZNear; GtkWidget* EntryZFar; GtkWidget* EntryZoom; GtkWidget *table = gtk_table_new(8,3,FALSE); GtkWidget *hseparator; gushort i; gdouble zNear = 1; gdouble zFar = 100; gdouble Zoom = 45; gdouble aspect = 1; gboolean perspective = TRUE; GtkWidget* buttonPerspective; GtkWidget* buttonNoPerspective; GtkWidget* labelZFar; GtkWidget* labelZNear; get_camera_values(&zNear, &zFar, &Zoom, &aspect, &perspective); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxframe = gtk_vbox_new (FALSE, 0); gtk_widget_show (vboxframe); gtk_container_add (GTK_CONTAINER (frame), vboxframe); gtk_box_pack_start (GTK_BOX (vboxframe), table, TRUE, TRUE, 0); /* ------------------------------------------------------------------*/ i = 4; labelZNear = add_label_table(table,_(" Distance from the viewer to the near clipping plane "),i,0); add_label_table(table," : ",i,1); EntryZNear = gtk_entry_new(); add_widget_table(table,EntryZNear,i,2); gtk_editable_set_editable((GtkEditable*)EntryZNear,TRUE); gtk_entry_set_text (GTK_ENTRY (EntryZNear),g_strdup_printf("%lf",zNear)); /* ------------------------------------------------------------------*/ i = 5; labelZFar = add_label_table(table,_(" Distance from the viewer to the far clipping plane "),i,0); add_label_table(table," : ",i,1); EntryZFar = gtk_entry_new(); add_widget_table(table,EntryZFar,i,2); gtk_editable_set_editable((GtkEditable*)EntryZFar,TRUE); gtk_entry_set_text (GTK_ENTRY (EntryZFar),g_strdup_printf("%lf",zFar)); /* ------------------------------------------------------------------*/ i = 6; add_label_table(table,_(" Zoom factor "),i,0); add_label_table(table," : ",i,1); EntryZoom = gtk_entry_new(); add_widget_table(table,EntryZoom,i,2); gtk_editable_set_editable((GtkEditable*)EntryZoom,TRUE); gtk_entry_set_text (GTK_ENTRY (EntryZoom),g_strdup_printf("%lf",1/Zoom*45.0)); /* ------------------------------------------------------------------*/ i=3; buttonOptimal = gtk_button_new_with_label(_("Get Optimal values") ); add_widget_table(table,buttonOptimal,i,2); gtk_widget_show (buttonOptimal); g_object_set_data(G_OBJECT (frame), "EntryZNear",EntryZNear); g_object_set_data(G_OBJECT (frame), "EntryZFar",EntryZFar); g_object_set_data(G_OBJECT (frame), "EntryZoom",EntryZoom); g_signal_connect_swapped(G_OBJECT(buttonOptimal),"clicked",(GCallback)set_camera_optimal,GTK_OBJECT(Win)); /* ------------------------------------------------------------------*/ i = 0; buttonPerspective = gtk_radio_button_new_with_label(NULL,_("Perspective")); add_widget_table(table,buttonPerspective,i,0); g_object_set_data(G_OBJECT (buttonPerspective), "EntryZNear",EntryZNear); g_object_set_data(G_OBJECT (buttonPerspective), "EntryZFar",EntryZFar); g_object_set_data(G_OBJECT (buttonPerspective), "ButtonOptimal",buttonOptimal); g_object_set_data(G_OBJECT (buttonPerspective), "LabelZNear",labelZNear); g_object_set_data(G_OBJECT (buttonPerspective), "LabelZFar",labelZFar); i = 1; buttonNoPerspective = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonPerspective)), _("No perspective")); add_widget_table(table,buttonNoPerspective,i,0); g_signal_connect(G_OBJECT(buttonPerspective),"clicked",(GCallback)set_sensitive_camera,NULL); if(perspective) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonPerspective), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonNoPerspective), TRUE); /* ------------------------------------------------------------------*/ i = 2; hseparator = gtk_hseparator_new (); gtk_table_attach(GTK_TABLE(table),hseparator,0,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); g_object_set_data(G_OBJECT (frame), "ButtonPerspective",buttonPerspective); g_object_set_data(G_OBJECT (frame), "ButtonNoPerspective",buttonNoPerspective); gtk_widget_show_all(frame); return frame; } /********************************************************************************/ void set_camera_drawgeom() { GtkWidget *Win; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *button; GtkWidget* EntryZNear; GtkWidget* EntryZFar; GtkWidget* EntryZoom; GtkWidget* buttonPerspective; GtkWidget* buttonNoPerspective; Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),_("Camera")); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(GeomDlg)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); add_child(GeomDlg,Win,gtk_widget_destroy,"Camera"); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)delete_child,NULL); vboxall = create_vbox(Win); vboxwin = vboxall; frame = create_camera_frame(Win,vboxall); EntryZNear = (GtkWidget*) g_object_get_data(G_OBJECT (frame), "EntryZNear"); EntryZFar = (GtkWidget*) g_object_get_data(G_OBJECT (frame), "EntryZFar"); EntryZoom = (GtkWidget*) g_object_get_data(G_OBJECT (frame), "EntryZoom"); buttonPerspective = (GtkWidget*) g_object_get_data(G_OBJECT (frame), "ButtonPerspective"); buttonNoPerspective = (GtkWidget*) g_object_get_data(G_OBJECT (frame), "ButtonNoPerspective"); g_object_set_data(G_OBJECT (Win), "EntryZNear",EntryZNear); g_object_set_data(G_OBJECT (Win), "EntryZFar",EntryZFar); g_object_set_data(G_OBJECT (Win), "EntryZoom",EntryZoom); g_object_set_data(G_OBJECT (Win), "ButtonPerspective",buttonPerspective); g_object_set_data(G_OBJECT (Win), "ButtonNoPerspective",buttonNoPerspective); hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("Close")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy, GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,_("Apply")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_camera, GTK_OBJECT(Win)); button = create_button(Win,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_camera, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child, GTK_OBJECT(Win)); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Win)); gtk_widget_show_all (Win); } /********************************************************************************/ void set_light_positions_drawgeom(gchar* title) { GtkWidget *Win; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *button; GtkWidget** Entrys; /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),title); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(GeomDlg)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); vboxall = create_vbox(Win); vboxwin = vboxall; frame = create_light_positions_frame(vboxall,_("Ligth positions")); Entrys = (GtkWidget**) g_object_get_data(G_OBJECT (frame), "Entrys"); g_object_set_data(G_OBJECT (Win), "Entrys",Entrys); /* buttons box */ hbox = create_hbox_false(vboxwin); gtk_widget_realize(Win); button = create_button(Win,_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)destroy_setlight_window, GTK_OBJECT(Win)); gtk_widget_show (button); button = create_button(Win,_("OK")); gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)apply_ligth_positions,GTK_OBJECT(Win)); /* Show all */ gtk_widget_show_all (Win); } /*********************************************************************************************/ /* window to real space conversion primitive */ static void glGetWorldCoordinates(gdouble x, gdouble y, gdouble *w) { gint i; GLdouble r[3]; GLfloat winX, winY,winZ; winX = (float)x; winY = (float)viewport[3] - (float)y; glEnable(GL_DEPTH_TEST); glDepthMask(GL_TRUE); glDepthRange(0.0f,1.0f); glReadPixels( (GLint)x, (GLint)(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ ); if(fabs(winZ-1)<1e-10 && Natoms>1) { GLdouble View2D[3]; gdouble mindist = -1; gdouble xii,yii,d1; for(i=Natoms-1;i>=0;i--) { gluProject(geometry[i].X, geometry[i].Y, geometry[i].Z,mvmatrix, projmatrix, viewport, &View2D[0], &View2D[1], &View2D[2]); xii = View2D[0]-winX; yii = View2D[1]-winY; d1 = xii*xii+yii*yii; if(mindist<0 || mindist>d1) { mindist = d1; winZ = View2D[2]; } } } gluUnProject( winX, winY, winZ, mvmatrix, projmatrix, viewport, &r[0], &r[1], &r[2]); for(i=0;i<3;i++) w[i] = r[i]; } /*********************************************************************************************************/ static void getW(gdouble x1, gdouble y1, gdouble w[]) { gint i = 0; GLdouble View2D[3]; if(Natoms<1) { glGetWorldCoordinates(x1, y1, w); return; } gluProject(geometry[i].X, geometry[i].Y, geometry[i].Z,mvmatrix, projmatrix, viewport, &View2D[0], &View2D[1], &View2D[2]); gluUnProject( (float)x1, (float)viewport[3] - (float)y1, View2D[2], mvmatrix, projmatrix, viewport, &w[0], &w[1], &w[2]); } /*********************************************************************************************************/ static void Projected_Rectangle_Draw(gdouble x1, gdouble y1, gdouble width, gdouble height) { gdouble w[3]; glLineWidth(3); glEnable (GL_LINE_STIPPLE); /*glLineStipple (1, 0x0101);*/ /* dotted */ /*glLineStipple (1, 0x00FF);*/ /* dashed */ /*glLineStipple (1, 0x1C47);*/ /* dash/dot/dash */ /* glLineStipple (2, 0xAAAA); */ glLineStipple (3, 0x5555); glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); glBegin(GL_POLYGON); getW(x1, y1, w); glVertex3d(w[0],w[1],w[2]); getW(x1+width, y1, w); glVertex3d(w[0],w[1],w[2]); getW(x1+width, y1+height, w); glVertex3d(w[0],w[1],w[2]); getW(x1, y1+height, w); glVertex3d(w[0],w[1],w[2]); glEnd(); glLineWidth(1.5); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glDisable (GL_LINE_STIPPLE); } /*********************************************************************************************/ void reset_origine_molecule_drawgeom() { Orig[0] = 0.0; Orig[1] = 0.0; Orig[2] = 0.0; } /*********************************************************************************************/ void get_origine_molecule_drawgeom(gdouble orig[]) { orig[0] = Orig[0]; orig[1] = Orig[1]; orig[2] = Orig[2]; } /**********************************************************************************/ static gchar* getFormulaOfTheMolecule() { gint i,j; gchar* formula = NULL; gchar* dum = NULL; gint *tag = NULL; if(Natoms<1) return formula; tag = g_malloc(Natoms*sizeof(gint)); if(!tag) return formula; for(i=0;inext) { GeomDraw* geom = NULL; geom = (GeomDraw*)list->data; if(geom && geom->atoms ) Free_One_Geom(geom->atoms,geom->nAtoms); list->data = NULL; } if(currentFifoGeometries->prev) currentFifoGeometries->prev->next = NULL; else fifoGeometries = NULL; g_list_free(currentFifoGeometries); currentFifoGeometries = g_list_last(fifoGeometries); } } /**********************************************************************************/ void add_geometry_to_fifo() { gint i,j; GeomDraw* geom = g_malloc(sizeof(GeomDraw)); geom->nAtoms = Natoms; if(Natoms>0) geom->atoms = g_malloc(Natoms*sizeof(GeomDef)); else geom->atoms = NULL; for(i=0;iatoms[i].X = geometry0[i].X; geom->atoms[i].Y = geometry0[i].Y; geom->atoms[i].Z = geometry0[i].Z; geom->atoms[i].Xi = geometry0[i].Xi; geom->atoms[i].Yi = geometry0[i].Yi; geom->atoms[i].Prop = prop_atom_get(geometry0[i].Prop.symbol); geom->atoms[i].mmType = g_strdup(geometry0[i].mmType); geom->atoms[i].pdbType = g_strdup(geometry0[i].pdbType); geom->atoms[i].Residue = g_strdup(geometry0[i].Residue); geom->atoms[i].ResidueNumber = geometry0[i].ResidueNumber; geom->atoms[i].show = geometry0[i].show; geom->atoms[i].Charge = geometry0[i].Charge; geom->atoms[i].Layer = geometry0[i].Layer; geom->atoms[i].N = geometry0[i].N; geom->atoms[i].Variable = geometry0[i].Variable; geom->atoms[i].ColorAlloc = geometry0[i].ColorAlloc; geom->atoms[i].Rayon = geometry0[i].Rayon; geom->atoms[i].Coefpers = geometry0[i].Coefpers; if(geometry0[i].typeConnections) { geom->atoms[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;jatoms[i].typeConnections[j] = geometry0[i].typeConnections[j]; } else geom->atoms[i].typeConnections = NULL; } free_geometries_from_current_to_end(); fifoGeometries = g_list_append(fifoGeometries,geom); currentFifoGeometries = g_list_last(fifoGeometries); oldNext = FALSE; } /**********************************************************************************/ void get_geometry_from_fifo(gboolean toNext) { gint i,j; GeomDraw* geom = NULL; GList* list = NULL; if(!fifoGeometries) return; if(!currentFifoGeometries) return; if(toNext) { GList* last = g_list_last(fifoGeometries); if(currentFifoGeometries == last) return; list = g_list_next(currentFifoGeometries); currentFifoGeometries = list; oldNext = TRUE; } else { if( !oldNext && currentFifoGeometries == g_list_last(fifoGeometries)) { add_geometry_to_fifo(); } if(g_list_previous(currentFifoGeometries)) currentFifoGeometries = g_list_previous(currentFifoGeometries); list = currentFifoGeometries; oldNext = FALSE; } geom = (GeomDraw*)list->data; if(!geom) return; geometry0 = Free_One_Geom(geometry0,Natoms); geometry = Free_One_Geom(geometry,Natoms); Natoms = geom->nAtoms; if(Natoms>0) { geometry0 = g_malloc(Natoms*sizeof(GeomDef)); geometry = g_malloc(Natoms*sizeof(GeomDef)); } for(i=0;iatoms[i].X; geometry0[i].Y = geom->atoms[i].Y; geometry0[i].Z = geom->atoms[i].Z; geometry0[i].Xi = geom->atoms[i].Xi; geometry0[i].Yi = geom->atoms[i].Yi; geometry0[i].Prop = prop_atom_get(geom->atoms[i].Prop.symbol); geometry0[i].mmType = g_strdup(geom->atoms[i].mmType); geometry0[i].pdbType = g_strdup(geom->atoms[i].pdbType); geometry0[i].Residue = g_strdup(geom->atoms[i].Residue); geometry0[i].ResidueNumber = geom->atoms[i].ResidueNumber; geometry0[i].show = geom->atoms[i].show; geometry0[i].Charge = geom->atoms[i].Charge; geometry0[i].Layer = geom->atoms[i].Layer; geometry0[i].N = geom->atoms[i].N; geometry0[i].Variable = geom->atoms[i].Variable; geometry0[i].ColorAlloc = geom->atoms[i].ColorAlloc; geometry0[i].Rayon = geom->atoms[i].Rayon; geometry0[i].Coefpers = geom->atoms[i].Coefpers; if(geom->atoms[i].typeConnections) { geometry0[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;jatoms[i].typeConnections[j]; } else { geometry0[i].typeConnections = NULL; } } for(i=0;iatoms[i].X; geometry[i].Y = geom->atoms[i].Y; geometry[i].Z = geom->atoms[i].Z; geometry[i].Xi = geom->atoms[i].Xi; geometry[i].Yi = geom->atoms[i].Yi; geometry[i].Prop = prop_atom_get(geom->atoms[i].Prop.symbol); geometry[i].mmType = g_strdup(geom->atoms[i].mmType); geometry[i].pdbType = g_strdup(geom->atoms[i].pdbType); geometry[i].Residue = g_strdup(geom->atoms[i].Residue); geometry[i].ResidueNumber = geom->atoms[i].ResidueNumber; geometry[i].show = geom->atoms[i].show; geometry[i].Charge = geom->atoms[i].Charge; geometry[i].Layer = geom->atoms[i].Layer; geometry[i].N = geom->atoms[i].N; geometry[i].Variable = geom->atoms[i].Variable; geometry[i].ColorAlloc = geom->atoms[i].ColorAlloc; geometry[i].Rayon = geom->atoms[i].Rayon; geometry[i].Coefpers = geom->atoms[i].Coefpers; if(geom->atoms[i].typeConnections) { geometry[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;jatoms[i].typeConnections[j]; } else { geometry[i].typeConnections = NULL; } } /* if(!fifoGeometries) printf("fifoGeometries is void\n");*/ change_of_center(NULL,NULL); create_GeomXYZ_from_draw_grometry(); RebuildGeom=TRUE; } /**********************************************************************************/ static gint get_indice(gint n) { gint i; if(n<0) return n; for(i=0;i<(gint)Natoms;i++) if(geometry[i].N==n)return i; return -1; } /*****************************************************************************/ static gdouble get_epaisseur(gint i, gint j) { /* gdouble factorstick = get_factorstick();*/ gdouble ei = 1.0/3.0*factorstick; gdouble ej = 1.0/3.0*factorstick; gdouble e = 1.0/3.0*factorstick; gdouble sl = 4.5; gdouble sm = 2; if(geometry[i].Layer == LOW_LAYER) ei /= sl; if(geometry[i].Layer == MEDIUM_LAYER) ei /= sm; if(geometry[j].Layer == LOW_LAYER) ej /= sl; if(geometry[j].Layer == MEDIUM_LAYER) ej /= sm; e = (eired, BackColor->green, BackColor->blue); else fprintf(fd,"0 0 0\n"); fprintf(fd,"%d\n",AdjustHydrogenAtoms); fprintf(fd,"%d\n",RebuildConnectionsDuringEdition); fprintf(fd,"%f\n",fragAngle); fprintf(fd,"%f\n",factorstick); fprintf(fd,"%f\n",factorball); fclose(fd); } g_free(drawMolecule); } /*************************************************************************************/ void read_drawmolecule_file() { gchar *drawMolecule; FILE *fd; gint r = 0; gint g = 0; gint b = 0; gint sh = 1; gint rc = 0; drawMolecule = g_strdup_printf("%s%sdrawmolecule",gabedit_directory(),G_DIR_SEPARATOR_S); fragAngle = 180; factor_stick_default(NULL,NULL); factor_ball_default(NULL,NULL); fd = fopen(drawMolecule, "rb"); if(fd !=NULL) { guint taille = BSIZE; gchar t[BSIZE]; if(fgets(t,taille,fd)) if(sscanf(t,"%d %d %d",&r, &g, &b)!=3) { printf("t=%s\n",t); r = 0; g = 0; b = 0; } if(fgets(t,taille,fd)) if(sscanf(t,"%d",&sh)!=1) sh = 1; if(fgets(t,taille,fd)) if(sscanf(t,"%d",&rc)!=1) rc = 0; if(fgets(t,taille,fd)) if(sscanf(t,"%lf",&fragAngle)!=1) fragAngle = 180; if(fgets(t,taille,fd)) if(sscanf(t,"%lf",&factorstick)!=1) factor_stick_default(NULL,NULL); if(fgets(t,taille,fd)) if(sscanf(t,"%lf",&factorball)!=1) factor_ball_default(NULL,NULL); fclose(fd); } g_free(drawMolecule); if(r==0 && g == 0 && b == 0) r = g = b = 20000; { BackColor = g_malloc(sizeof(GdkColor)); BackColor->red = r; BackColor->green = g; BackColor->blue = b; } AdjustHydrogenAtoms = (gboolean)sh; RebuildConnectionsDuringEdition = (gboolean)rc; } /*************************************************************************************/ GeomDef* copyGeometry(GeomDef* geom0) { gint i; GeomDef* geom = NULL; if(Natoms<1) return geom; geom =g_malloc(Natoms*sizeof(GeomDef)); for(i=0;i=Natoms || j>=Natoms ) return 0; if(!geometry[i].typeConnections)return 0; nj = geometry[j].N-1; if(geometry[i].typeConnections[nj]>0) return geometry[i].typeConnections[nj]; return 0; } /*****************************************************************************/ static void set_fix_variable_of_selected_atoms(gboolean variable) { gint i; for (i=0;i<(gint)Natoms;i++) { if(if_selected(i)) { geometry[i].Variable = variable; geometry0[i].Variable = variable; } } create_GeomXYZ_from_draw_grometry(); drawGeom(); } /*****************************************************************************/ void set_fix_selected_atoms() { gint i; gint nf=0; for (i=0;i<(gint)Natoms;i++) if(geometry[i].Variable) nf++; if(nf==0) { for (i=0;i<(gint)Natoms;i++) { geometry[i].Variable = TRUE; geometry0[i].Variable = TRUE; } } set_fix_variable_of_selected_atoms(FALSE); } /*****************************************************************************/ void set_variable_selected_atoms() { set_fix_variable_of_selected_atoms(TRUE); } /*****************************************************************************/ void hide_selected_atoms() { gint i; for (i=0;i<(gint)Natoms;i++) { if(if_selected(i)) { geometry[i].show = FALSE; geometry0[i].show = FALSE; } } unselect_all_atoms(); RebuildGeom=TRUE; drawGeom(); } /*****************************************************************************/ void hide_not_selected_atoms() { gint i; for (i=0;i<(gint)Natoms;i++) { if(!if_selected(i)) { geometry[i].show = FALSE; geometry0[i].show = FALSE; } } RebuildGeom=TRUE; drawGeom(); } /*****************************************************************************/ void show_hydrogen_atoms() { gint i; gint j; gint ni; gint nj; for (i=0;i<(gint)Natoms;i++) { ni = geometry[i].N-1; if(!geometry[i].show) continue; for (j=0;j<(gint)Natoms;j++) { nj = geometry[j].N-1; if(!geometry[i].typeConnections) continue; if(geometry[i].typeConnections[nj]<1) continue; if(!strcmp(geometry[j].Prop.symbol,"H")) { geometry[j].show = TRUE; geometry0[j].show = TRUE; } } } RebuildGeom=TRUE; drawGeom(); ShowHydrogenAtoms = TRUE; } /*****************************************************************************/ void show_all_atoms() { gint i; for (i=0;i<(gint)Natoms;i++) { geometry[i].show = TRUE; geometry0[i].show = TRUE; } RebuildGeom=TRUE; drawGeom(); ShowHydrogenAtoms = TRUE; } /********************************************************************************/ static gint testAmberTypesDefine() { gint i; gint k; if(Natoms<1)return 0; for(i=0;i<(gint)Natoms;i++) if(geometry[i].mmType && strlen(geometry[i].mmType)>2) { printf("Problem with %s\n",geometry[i].mmType); return -1; } k = 0; for(i=0;i<(gint)Natoms;i++) if(geometry[i].mmType && strcmp(geometry[i].mmType,geometry[i].Prop.symbol)==0) k++; if(k==Natoms) return -2; return 0; } /********************************************************************************/ void messageAmberTypesDefine() { gint k = testAmberTypesDefine(); if(k==0) return; if(k==-1) { GtkWidget* m; m = Message(_("The type of One (or several) of atoms is not a Amber type.\n" "You can set the types of atoms by : \n" " \"Set/Atom Type&Charge using PDB Template\" \n" " \"Or\" \n" " \"Set/Atom Types using connections types\" \n" ) ,_("Warning"),TRUE); gtk_window_set_modal (GTK_WINDOW (m), TRUE); } if(k==-2) { GtkWidget* m; m = Message(_("The types of the atoms are identical to the symbols of these atoms.\n" "You can set the types of atoms by \n" "\"Set/Atom Types using connections types\" \n" ) ,_("Warning"),TRUE); gtk_window_set_modal (GTK_WINDOW (m), TRUE); } } /*****************************************************************************/ gboolean getShowMultipleBonds() { return showMultipleBonds; } /*****************************************************************************/ void RenderMultipleBonds(GtkWidget *win,gboolean show) { showMultipleBonds = show; RebuildGeom=TRUE; drawGeom(); } /*****************************************************************************/ void resetConnections() { reset_all_connections(); RebuildGeom=TRUE; drawGeom(); } /*****************************************************************************/ void resetConnectionsBetweenSelectedAndNotSelectedAtoms() { reset_connections_between_selected_and_notselected_atoms(); RebuildGeom=TRUE; drawGeom(); } /*****************************************************************************/ void resetConnectionsBetweenSelectedAtoms() { reset_connections_between_selected_atoms(); RebuildGeom=TRUE; drawGeom(); } /*****************************************************************************/ void resetMultipleConnections() { reset_multiple_bonds(); RebuildGeom=TRUE; drawGeom(); } /*****************************************************************************/ GabEditGeomOperation getOperationType() { return OperationType; } /*****************************************************************************/ gdouble get_real_distance2(GeomDef* g,gint i,gint j) { gdouble xx; gdouble d; xx = g[i].X-g[j].X; d = xx*xx; xx = g[i].Y-g[j].Y; d += xx*xx; xx = g[i].Z-g[j].Z; d += xx*xx; return d; } /*******************************************************************/ void adjust_multiple_bonds_with_one_atom(gint n) { if(Natoms<2) return; if(!geometry[n].typeConnections) return; { gint ni = 0; gint nj = 0; gint i,j; gint nBonds = 0; i = n; ni = geometry[i].N-1; for(j=0;j<(gint)Natoms;j++) { if(j==i) continue; nj = geometry[j].N-1; if(geometry[i].typeConnections[nj]>0) { nBonds += geometry[i].typeConnections[nj]; } } if(nBonds<=geometry[i].Prop.maximumBondValence) return; for(j=0;j<(gint)Natoms;j++) { nj = geometry[j].N-1; if(i==j) continue; if(geometry[i].typeConnections[nj]<=1) continue; geometry[i].typeConnections[nj] -=1; geometry[j].typeConnections[ni] -=1; nBonds--; if(nBonds<=geometry[i].Prop.maximumBondValence) return; } copy_connections(geometry0, geometry, Natoms); } } /*******************************************************************/ void reset_connection_with_one_atom(gint n) { if(Natoms<2) return; if(!geometry[n].typeConnections) return; { gint ni = 0; gint nj = 0; gint i,j; gint* nBonds = g_malloc(Natoms*sizeof(gint)); for(i=0;i<(gint)Natoms;i++) nBonds[i] = 0; for(i=0;i<(gint)Natoms-1;i++) { if(i==n) continue; for(j=i+1;j<(gint)Natoms;j++) { if(j==n) continue; nj = geometry[j].N-1; if(geometry[i].typeConnections[nj]>0) { nBonds[i] += geometry[i].typeConnections[nj]; nBonds[j] += geometry[i].typeConnections[nj]; } } } i = n; ni = geometry[i].N-1; for(j=0;j<(gint)Natoms;j++) { if(i==j) continue; nj = geometry[j].N-1; if(draw_lines_yes_no(i,j)) geometry[i].typeConnections[nj]= 1; else geometry[i].typeConnections[nj]=0; if(geometry[j].typeConnections) geometry[j].typeConnections[ni] = geometry[i].typeConnections[nj]; nBonds[i]+= geometry[i].typeConnections[nj]; nBonds[j]+= geometry[i].typeConnections[nj]; if(nBonds[i]>geometry[i].Prop.maximumBondValence || nBonds[j]>geometry[j].Prop.maximumBondValence ) { geometry[i].typeConnections[nj]= 0; if(geometry[j].typeConnections) geometry[j].typeConnections[ni] = 0; nBonds[i]--; nBonds[j]--; } } for(j=0;j<(gint)Natoms;j++) { nj = geometry[j].N-1; if(i==j) continue; if(geometry[i].typeConnections[nj]==0) continue; if( nBonds[i] < geometry[i].Prop.maximumBondValence && nBonds[j] < geometry[j].Prop.maximumBondValence ) { geometry[i].typeConnections[nj] = geometry[j].typeConnections[ni] = 2; nBonds[i] += 1; nBonds[j] += 1; } } for(j=0;j<(gint)Natoms;j++) { nj = geometry[j].N-1; if(i==j) continue; if(geometry[i].typeConnections[nj]==0) continue; if( nBonds[i] < geometry[i].Prop.maximumBondValence && nBonds[j] < geometry[j].Prop.maximumBondValence ) { geometry[i].typeConnections[nj] = geometry[j].typeConnections[ni] = 3; nBonds[i] += 1; nBonds[j] += 1; } } copy_connections(geometry0, geometry, Natoms); } } /*****************************************************************************/ static void init_connections() { gint i; gint j; if(Natoms<1) return; if(geometry) for(i=0;i<(gint)Natoms;i++) { geometry[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;j<(gint)Natoms;j++) geometry[i].typeConnections[j] = 0; } if(geometry0) for(i=0;i<(gint)Natoms;i++) { geometry0[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;j<(gint)Natoms;j++) geometry0[i].typeConnections[j] = 0; } } /************************************************************************/ static void reSetSimpleConnections() { gint* nBonds = NULL; gint* num = NULL; gint* numConn = NULL; gdouble* dists = NULL; gint i; gint j; gint ni; gint nj; gint k; gint kmax; gint nb0; if(Natoms<1) return; nBonds = g_malloc(Natoms*sizeof(gint)); num = g_malloc(Natoms*sizeof(gint)); numConn = g_malloc(Natoms*sizeof(gint)); dists = g_malloc(Natoms*sizeof(gdouble)); for(i=0;i<(gint)Natoms;i++) num[i] = i; for(i=0;i<(gint)Natoms-1;i++) { gint k = i; for(j=i+1;j<(gint)Natoms;j++) if(geometry[num[j]].N0) { nBonds[i] += 1; nBonds[j] += 1; } } } /* remove H1-H2 connections if H1 and H2 are not connected to others atoms */ for(i=0;i<(gint)Natoms;i++) { ni = geometry[num[i]].N-1; if( nBonds[i] <= geometry[num[i]].Prop.maximumBondValence) continue; if( geometry[num[i]].Prop.maximumBondValence>1) continue; for(k=0;k<(gint)nBonds[i];k++) numConn[k] = -1; k = 0; for(j=0;j<(gint)Natoms;j++) { nj = geometry[num[j]].N-1; if(i!=j && geometry[num[i]].typeConnections[nj]>0) { gdouble p = geometry[num[i]].Prop.covalentRadii+geometry[num[j]].Prop.covalentRadii; p = p*p; numConn[k] = j; dists[k] = get_real_distance2(geometry, num[i], num[j])/p; if( geometry[num[j]].Prop.maximumBondValence>1) numConn[k] =-1; k++; } } nb0 = nBonds[i]; do{ kmax = -1; for(k=0;k-1) { kmax = k; break;} if(kmax<0) break; for(k=0;k-1 && dists[k]>dists[kmax]) kmax = k; nBonds[i] -= 1; j = numConn[kmax]; nBonds[j] -= 1; nj = geometry[num[j]].N-1; geometry[num[i]].typeConnections[nj] = 0; geometry[num[j]].typeConnections[ni] = 0; numConn[kmax]=-1; }while( nBonds[i] > geometry[num[i]].Prop.maximumBondValence); } /* remove A-H-B connections */ for(i=0;i<(gint)Natoms;i++) { ni = geometry[num[i]].N-1; if( nBonds[i] <= geometry[num[i]].Prop.maximumBondValence) continue; if( geometry[num[i]].Prop.maximumBondValence>1) continue; for(k=0;k<(gint)nBonds[i];k++) numConn[k] = -1; k = 0; for(j=0;j<(gint)Natoms;j++) { nj = geometry[num[j]].N-1; if(i!=j && geometry[num[i]].typeConnections[nj]>0) { gdouble p = geometry[num[i]].Prop.covalentRadii+geometry[num[j]].Prop.covalentRadii; p = p*p; numConn[k] = j; dists[k] = get_real_distance2(geometry, num[i], num[j])/p; k++; } } nb0 = nBonds[i]; do{ kmax = -1; for(k=0;k-1) { kmax = k; break;} if(kmax<0) break; for(k=0;k-1 && dists[k]>dists[kmax]) kmax = k; nBonds[i] -= 1; j = numConn[kmax]; nBonds[j] -= 1; nj = geometry[num[j]].N-1; geometry[num[i]].typeConnections[nj] = 0; geometry[num[j]].typeConnections[ni] = 0; numConn[kmax]=-1; }while( nBonds[i] > geometry[num[i]].Prop.maximumBondValence); } /* remove H-B connections if B saturated */ for(i=0;i<(gint)Natoms;i++) { gint nV = geometry[num[i]].Prop.maximumBondValence; if(geometry[num[i]].mmType && !strcmp(geometry[num[i]].mmType,"N3")) nV++; if( nBonds[i] <= nV) continue; if( nV<=1) continue; ni = geometry[num[i]].N-1; for(k=0;k<(gint)nBonds[i];k++) numConn[k] = -1; k = 0; for(j=0;j<(gint)Natoms;j++) { nj = geometry[num[j]].N-1; if(i!=j && geometry[num[i]].typeConnections[nj]>0) { gdouble p = geometry[num[i]].Prop.covalentRadii+geometry[num[j]].Prop.covalentRadii; p = p*p; numConn[k] = j; dists[k] = get_real_distance2(geometry, num[i], num[j])/p; if( geometry[num[j]].Prop.maximumBondValence>1) numConn[k] =-1; k++; } } nb0 = nBonds[i]; do{ kmax = -1; for(k=0;k-1) { kmax = k; break;} if(kmax<0) break; for(k=0;k-1 && dists[k]>dists[kmax]) kmax = k; nBonds[i] -= 1; j = numConn[kmax]; nBonds[j] -= 1; nj = geometry[num[j]].N-1; geometry[num[i]].typeConnections[nj] = 0; geometry[num[j]].typeConnections[ni] = 0; numConn[kmax]=-1; }while( nBonds[i] > geometry[num[i]].Prop.maximumBondValence); } /* remove A-B connections if A or B saturated */ for(i=0;i<(gint)Natoms;i++) { ni = geometry[num[i]].N-1; if( geometry[num[i]].Prop.maximumBondValence<=1) continue; if( nBonds[i] <= geometry[num[i]].Prop.maximumBondValence) continue; if(geometry[num[i]].mmType && !strcmp(geometry[num[i]].mmType,"N3") && nBonds[i] <= geometry[num[i]].Prop.maximumBondValence+1) continue; for(k=0;k<(gint)nBonds[i];k++) numConn[k] = -1; k = 0; for(j=0;j<(gint)Natoms;j++) { nj = geometry[num[j]].N-1; if(i!=j && geometry[num[i]].typeConnections[nj]>0) { gdouble p = geometry[num[i]].Prop.covalentRadii+geometry[num[j]].Prop.covalentRadii; p = p*p; numConn[k] = j; dists[k] = get_real_distance2(geometry, num[i], num[j])/p; k++; } } nb0 = nBonds[i]; do{ kmax = -1; for(k=0;k-1) { kmax = k; break;} if(kmax<0) break; for(k=0;k-1 && dists[k]>dists[kmax]) kmax = k; nBonds[i] -= 1; j = numConn[kmax]; nBonds[j] -= 1; nj = geometry[num[j]].N-1; geometry[num[i]].typeConnections[nj] = 0; geometry[num[j]].typeConnections[ni] = 0; numConn[kmax]=-1; }while( nBonds[i] > geometry[num[i]].Prop.maximumBondValence); } g_free(nBonds); g_free(num); g_free(numConn); g_free(dists); } /************************************************************************/ static void setMultipleBonds() { gint* nBonds = NULL; gint* num = NULL; gint i; gint j; gint ni; gint nj; if(Natoms<1) return; nBonds = g_malloc(Natoms*sizeof(gint)); num = g_malloc(Natoms*sizeof(gint)); for(i=0;i<(gint)Natoms;i++) num[i] = i; for(i=0;i<(gint)Natoms-1;i++) { gint k = i; for(j=i+1;j<(gint)Natoms;j++) if(geometry[num[j]].N0) { nBonds[i] += 1; nBonds[j] += 1; } } } // sort atoms nBonds min at first for(i=0;i<(gint)Natoms-1;i++) { gint k = i; for(j=i+1;j<(gint)Natoms;j++) if(nBonds[j]%s[%d] %d\n",geometry[num[i]].Prop.symbol, geometry[num[i]].N,nBonds[i]); */ for(i=0;i<(gint)Natoms;i++) { ni = geometry[num[i]].N-1; for(j=i+1;j<(gint)Natoms;j++) { nj = geometry[num[j]].N-1; if(geometry[num[i]].typeConnections[nj]==0) continue; if( nBonds[i] < geometry[num[i]].Prop.maximumBondValence && nBonds[j] < geometry[num[j]].Prop.maximumBondValence ) { geometry[num[i]].typeConnections[nj] = geometry[num[j]].typeConnections[ni] = 3; nBonds[i] += 1; nBonds[j] += 1; } } } /* for(i=0;i<(gint)Natoms;i++) printf("33=====>%s[%d] %d\n",geometry[num[i]].Prop.symbol, geometry[num[i]].N,nBonds[i]); */ g_free(nBonds); g_free(num); } /*****************************************************************************/ static void set_connections() { gint i; gint j; gint ni; gint nj; init_connections(); for(i=0;i<(gint)Natoms;i++) { ni = geometry[i].N-1; for(j=i+1;j<(gint)Natoms;j++) { nj = geometry[j].N-1; if(draw_lines_yes_no(i,j)) geometry[i].typeConnections[nj]= 1; else geometry[i].typeConnections[nj]=0; geometry[j].typeConnections[ni] = geometry[i].typeConnections[nj]; } } reSetSimpleConnections(); setMultipleBonds(); } /*****************************************************************************/ static void set_Hconnections() { gint i; gint j; gint k; gboolean Ok; gdouble distance2; gdouble dx; gdouble dy; gdouble dz; gdouble angle; gchar* strAngle; gdouble minDistanceH2; gdouble maxDistanceH2; Point A; Point B; gint ni, nj, nk; minDistanceH = getMinDistanceHBonds(); minDistanceH2 = minDistanceH*minDistanceH*ANG_TO_BOHR*ANG_TO_BOHR; maxDistanceH = getMaxDistanceHBonds(); maxDistanceH2 = maxDistanceH*maxDistanceH*ANG_TO_BOHR*ANG_TO_BOHR; minAngleH = getMinAngleHBonds(); maxAngleH = getMaxAngleHBonds(); for(i=0;i<(gint)Natoms;i++) { ni = geometry[i].N-1; Ok = FALSE; Ok = atomCanDoHydrogenBond(geometry[i].Prop.symbol); if(!Ok) continue; for(j=0;j<(gint)Natoms;j++) { nj = geometry[j].N-1; if(geometry[i].typeConnections[nj]>0) continue; if(i==j) continue; if(strcmp(geometry[j].Prop.symbol, "H")!=0)continue; dx = geometry[i].X-geometry[j].X; dy = geometry[i].Y-geometry[j].Y; dz = geometry[i].Z-geometry[j].Z; distance2 = (dx*dx+dy*dy+dz*dz); if(distance2maxDistanceH2) continue; Ok = FALSE; for(k=0;k<(gint)Natoms;k++) { nk = geometry[k].N-1; if(k==j) continue; if(k==i) continue; if(geometry[j].typeConnections[nk]<=0) continue; A.C[0]=geometry[i].X-geometry[j].X; A.C[1]=geometry[i].Y-geometry[j].Y; A.C[2]=geometry[i].Z-geometry[j].Z; B.C[0]=geometry[k].X-geometry[j].X; B.C[1]=geometry[k].Y-geometry[j].Y; B.C[2]=geometry[k].Z-geometry[j].Z; strAngle = get_angle_vectors(A,B); angle = atof(strAngle); if(strAngle) g_free(strAngle); if(angle>=minAngleH &&angle<=maxAngleH) { Ok = TRUE; break; } } if(Ok) { geometry[i].typeConnections[nj]=-1; geometry[j].typeConnections[ni]=-1; } } } } /*****************************************************************************/ void copy_connections(GeomDef* geom0, GeomDef* geom, gint n) { gint i; gint j; if(!geom) return; if(!geom0) return; for(i=0;i0) nc++; } } return nc; } /************************************************************************************************************/ static gint get_number_of_inter_connections() { gint i; gint j; gint nc = 0; gint NC = Natoms; for(i=0;i0) nc++; } } return nc; } /*************************************************************************************/ static guint get_number_of_electrons(guint type) { /* type = 1 : Medium and High type = 2 : High type = other : All */ guint i; guint Ne=0; SAtomsProp Atom; for(i=0;i1) geometry[i].typeConnections[nj] = 1; } } setMultipleBonds(); RebuildGeom = TRUE; } /*****************************************************************************/ void reset_all_connections() { if(Natoms<1) return; set_connections(); if(ShowHBonds) set_Hconnections(); copy_connections(geometry0, geometry, Natoms); RebuildGeom = TRUE; } /*****************************************************************************/ static void reset_connections_between_selected_atoms() { gint i; gint j; gint ni; gint nj; gint* nBonds = NULL; gint* num = NULL; if(Natoms<2) return; nBonds = g_malloc(Natoms*sizeof(gint)); num = g_malloc(Natoms*sizeof(gint)); for(i=0;i<(gint)Natoms;i++) num[i] = i; for(i=0;i<(gint)Natoms-1;i++) { gint k = i; for(j=i+1;j<(gint)Natoms;j++) if(geometry[num[j]].N0) { nBonds[i] += geometry[num[i]].typeConnections[nj]; nBonds[j] += geometry[num[i]].typeConnections[nj]; } } } for(i=0;i<(gint)Natoms;i++) { gboolean isa = if_selected(num[i]); if(!isa) continue; ni = geometry[num[i]].N-1; if(geometry[num[i]].typeConnections) for(j=i+1;j<(gint)Natoms;j++) { gboolean jsa = if_selected(num[j]); if(!jsa) continue; nj = geometry[num[j]].N-1; if(draw_lines_yes_no(num[i],num[j])) geometry[num[i]].typeConnections[nj]= 1; else geometry[num[i]].typeConnections[nj]=0; if(geometry[num[j]].typeConnections) geometry[num[j]].typeConnections[ni] = geometry[num[i]].typeConnections[nj]; nBonds[i]+= geometry[num[i]].typeConnections[nj]; nBonds[j]+= geometry[num[i]].typeConnections[nj]; if(nBonds[i]>geometry[num[i]].Prop.maximumBondValence || nBonds[j]>geometry[num[j]].Prop.maximumBondValence ) { geometry[num[i]].typeConnections[nj]= 0; if(geometry[num[j]].typeConnections) geometry[num[j]].typeConnections[ni] = 0; nBonds[i]--; nBonds[j]--; } } } for(i=0;i<(gint)Natoms;i++) { gboolean isa = if_selected(num[i]); ni = geometry[num[i]].N-1; if(!isa) continue; for(j=i+1;j<(gint)Natoms;j++) { gboolean jsa = if_selected(num[j]); if(!jsa) continue; nj = geometry[num[j]].N-1; if(geometry[num[i]].typeConnections[nj]==0) continue; if( nBonds[i] < geometry[num[i]].Prop.maximumBondValence && nBonds[j] < geometry[num[j]].Prop.maximumBondValence ) { geometry[num[i]].typeConnections[nj] = geometry[num[j]].typeConnections[ni] = 2; nBonds[i] += 1; nBonds[j] += 1; } } } for(i=0;i<(gint)Natoms;i++) { gboolean isa = if_selected(num[i]); if(!isa) continue; ni = geometry[num[i]].N-1; for(j=i+1;j<(gint)Natoms;j++) { gboolean jsa = if_selected(num[j]); if(!jsa) continue; nj = geometry[num[j]].N-1; if(geometry[num[i]].typeConnections[nj]==0) continue; if( nBonds[i] < geometry[num[i]].Prop.maximumBondValence && nBonds[j] < geometry[num[j]].Prop.maximumBondValence ) { geometry[num[i]].typeConnections[nj] = geometry[num[j]].typeConnections[ni] = 3; nBonds[i] += 1; nBonds[j] += 1; } } } g_free(nBonds); g_free(num); copy_connections(geometry0, geometry, Natoms); RebuildGeom = TRUE; } /*****************************************************************************/ static void reset_connections_between_selected_and_notselected_atoms() { gint i; gint j; gint ni; gint nj; gint* nBonds = NULL; gint* num = NULL; if(Natoms<2) return; nBonds = g_malloc(Natoms*sizeof(gint)); num = g_malloc(Natoms*sizeof(gint)); for(i=0;i<(gint)Natoms;i++) num[i] = i; for(i=0;i<(gint)Natoms-1;i++) { gint k = i; for(j=i+1;j<(gint)Natoms;j++) if(geometry[num[j]].N0) { nBonds[i] += geometry[num[i]].typeConnections[nj]; nBonds[j] += geometry[num[i]].typeConnections[nj]; } } } for(i=0;i<(gint)Natoms;i++) { gboolean isa = if_selected(num[i]); ni = geometry[num[i]].N-1; if(geometry[num[i]].typeConnections) for(j=i+1;j<(gint)Natoms;j++) { gboolean jsa = if_selected(num[j]); if(isa==jsa) continue; nj = geometry[num[j]].N-1; if(draw_lines_yes_no(num[i],num[j])) geometry[num[i]].typeConnections[nj]= 1; else geometry[num[i]].typeConnections[nj]=0; if(geometry[num[j]].typeConnections) geometry[num[j]].typeConnections[ni] = geometry[num[i]].typeConnections[nj]; nBonds[i]+= geometry[num[i]].typeConnections[nj]; nBonds[j]+= geometry[num[i]].typeConnections[nj]; if(nBonds[i]>geometry[num[i]].Prop.maximumBondValence || nBonds[j]>geometry[num[j]].Prop.maximumBondValence ) { geometry[num[i]].typeConnections[nj]= 0; if(geometry[num[j]].typeConnections) geometry[num[j]].typeConnections[ni] = 0; nBonds[i]--; nBonds[j]--; } } } for(i=0;i<(gint)Natoms;i++) { gboolean isa = if_selected(num[i]); ni = geometry[num[i]].N-1; for(j=i+1;j<(gint)Natoms;j++) { gboolean jsa = if_selected(num[j]); nj = geometry[num[j]].N-1; if(geometry[num[i]].typeConnections[nj]==0) continue; if( nBonds[i] < geometry[num[i]].Prop.maximumBondValence && nBonds[j] < geometry[num[j]].Prop.maximumBondValence ) { if(isa != jsa) { geometry[num[i]].typeConnections[nj] = geometry[num[j]].typeConnections[ni] = 2; nBonds[i] += 1; nBonds[j] += 1; } } } } for(i=0;i<(gint)Natoms;i++) { gboolean isa = if_selected(num[i]); ni = geometry[num[i]].N-1; for(j=i+1;j<(gint)Natoms;j++) { gboolean jsa = if_selected(num[j]); nj = geometry[num[j]].N-1; if(geometry[num[i]].typeConnections[nj]==0) continue; if( nBonds[i] < geometry[num[i]].Prop.maximumBondValence && nBonds[j] < geometry[num[j]].Prop.maximumBondValence ) { if(isa != jsa) { geometry[num[i]].typeConnections[nj] = geometry[num[j]].typeConnections[ni] = 3; nBonds[i] += 1; nBonds[j] += 1; } } } } g_free(nBonds); g_free(num); copy_connections(geometry0, geometry, Natoms); RebuildGeom = TRUE; } /*****************************************************************************/ gboolean hbond_connections(gint i, gint j) { if(ShowHBonds) { gint nj = geometry[j].N-1; if(i<(gint)Natoms && j<(gint)Natoms && geometry[i].typeConnections[nj]==-1) return TRUE; else return FALSE; } else return FALSE; } /*****************************************************************************/ void init_quat(gdouble quat[]) { gint i; for(i=0;i<3;i++) quat[i] = 0.0; quat[3] = 1.0; } /********************************************************************************/ static void set_origin_to_point(gdouble center[]) { gint n; for(n = 0;n<(gint)Natoms;n++) { geometry0[n].X -= center[0]; geometry0[n].Y -= center[1]; geometry0[n].Z -= center[2]; geometry[n].X -= center[0]; geometry[n].Y -= center[1]; geometry[n].Z -= center[2]; } RebuildGeom = TRUE; // TO DO reset_origine_molecule_drawgeom(); //for (n=0;n<3;n++) Orig[n] += center[n]; } /********************************************************************************/ void set_origin_to_center_of_fragment() { gdouble C[3] = {0,0,0}; gint j = 0; gint i; for (i=0;i<(gint)Natoms;i++) { if(if_selected(i)) { j++; C[0] += geometry0[i].X; C[1] += geometry0[i].Y; C[2] += geometry0[i].Z; } } if(j==0) return; for (i=0;i<3;i++) C[i] /= j; set_origin_to_point(C); create_GeomXYZ_from_draw_grometry(); Trans[0] = 0; Trans[1] = 0; RebuildGeom = TRUE; drawGeom(); } /********************************************************************************/ static void set_geom_to_axes(gdouble axis1[], gdouble axis2[], gdouble axis3[]) { gdouble **m0 = NULL; gdouble** minv; gint i,j; guint n; gdouble A[3]; gdouble B[3]; guint k; gdouble* X; gdouble* Y; gdouble* Z; if(Natoms<1) return; m0 = g_malloc(3*sizeof(gdouble*)); X = g_malloc(Natoms*sizeof(gdouble)); Y = g_malloc(Natoms*sizeof(gdouble)); Z = g_malloc(Natoms*sizeof(gdouble)); for(i=0;i<3;i++) m0[i] = g_malloc(3*sizeof(gdouble)); m0[0][0] = axis1[0]; m0[0][1] = axis1[1]; m0[0][2] = axis1[2]; m0[1][0] = axis2[0]; m0[1][1] = axis2[1]; m0[1][2] = axis2[2]; m0[2][0] = axis3[0]; m0[2][1] = axis3[1]; m0[2][2] = axis3[2]; minv = Inverse(m0,3,1e-7); for(n = 0;nd[j]) {dmin=d[j]; jmin = j;} for (i=0;ikeyval == GDK_Shift_L || event->keyval == GDK_Shift_R) ) ShiftKeyPressed = TRUE; else if((event->keyval == GDK_Control_L || event->keyval == GDK_Control_R) ) { ControlKeyPressed = TRUE; } else if((event->keyval == GDK_Alt_L || event->keyval == GDK_Alt_R) ) { ControlKeyPressed = TRUE; } else if((event->keyval == GDK_F || event->keyval == GDK_f) ) { FKeyPressed = TRUE; } else if((event->keyval == GDK_G || event->keyval == GDK_g) ) { GKeyPressed = TRUE; } else if((event->keyval == GDK_A || event->keyval == GDK_a) && ControlKeyPressed) { SelectAllAtoms(); } else if((event->keyval == GDK_u || event->keyval == GDK_U)) { switch(OperationType) { case MOVEFRAG : case DELETEOBJECTS : case MEASURE : case EDITOBJECTS : case ADDFRAGMENT : case ROTLOCFRAG : case ROTZLOCFRAG : get_geometry_from_fifo( event->keyval == GDK_U); drawGeom(); break; default:break; } } else if((event->keyval == GDK_z || event->keyval == GDK_y) && ControlKeyPressed) { switch(OperationType) { case MOVEFRAG : case DELETEOBJECTS : case MEASURE : case EDITOBJECTS : case ADDFRAGMENT : case ROTLOCFRAG : case ROTZLOCFRAG : get_geometry_from_fifo(event->keyval == GDK_y); drawGeom(); break; default:break; } } GTK_WIDGET_GET_CLASS(wid)->key_press_event(wid, event); return TRUE; } /********************************************************************************/ static gint set_key_release(GtkWidget* wid, GdkEventKey *event, gpointer data) { if((event->keyval == GDK_Shift_L || event->keyval == GDK_Shift_R) ) ShiftKeyPressed = FALSE; else if((event->keyval == GDK_Control_L || event->keyval == GDK_Control_R) ) ControlKeyPressed = FALSE; else if((event->keyval == GDK_Alt_L || event->keyval == GDK_Alt_R) ) ControlKeyPressed = FALSE; else if((event->keyval == GDK_F || event->keyval == GDK_f) ) FKeyPressed = FALSE; else if((event->keyval == GDK_G || event->keyval == GDK_g) ) GKeyPressed = FALSE; return TRUE; } /********************************************************************************/ void setMMTypesChargesFromPDBTpl(guint Operation) { gint i; gchar* mmType = NULL; gdouble charge = 0.0; for(i=0;i<(gint)Natoms;i++) { if(Operation!=3) { mmType = getMMTypeFromPDBTpl(geometry[i].Residue,geometry[i].pdbType,&charge); if(!strcmp(mmType,"UNK")) { g_free(mmType); continue; } } switch(Operation) { case 0: geometry[i].Charge = charge; geometry0[i].Charge = charge; break; case 1: g_free(geometry[i].mmType); g_free(geometry0[i].mmType); geometry[i].mmType = g_strdup(mmType); geometry0[i].mmType = g_strdup(mmType); break; case 2: g_free(geometry[i].mmType); g_free(geometry0[i].mmType); geometry[i].mmType = g_strdup(mmType); geometry0[i].mmType = g_strdup(mmType); geometry[i].Charge = charge; geometry0[i].Charge = charge; break; case 3:geometry[i].Charge = charge; geometry0[i].Charge = charge; break; default: break; } if(Operation!=3) g_free(mmType); } } /********************************************************************************/ void setMMTypesCharges(gpointer data, guint Operation,GtkWidget* wid) { if(Operation==4) { gint i; calculTypesAmber(geometry, (gint)Natoms); for(i=0;i<(gint)Natoms;i++) { geometry0[i].mmType = g_strdup(geometry[i].mmType); geometry0[i].pdbType = g_strdup(geometry[i].pdbType); } } else setMMTypesChargesFromPDBTpl(Operation); create_GeomXYZ_from_draw_grometry(); drawGeom(); } /*****************************************************************************/ GeomDef* Free_One_Geom(GeomDef* geom,gint N) { gint i; if(!geom) return NULL; for (i=0;iallocation.width/20.0; gdouble y = GeomDrawingArea->allocation.height-GeomDrawingArea->allocation.height/10.0; gdouble w[3]; glInitFontsUsing(FontsStyleLabel.fontname); color[0] = FontsStyleLabel.TextColor.red/65535.0; color[1] = FontsStyleLabel.TextColor.green/65535.0; color[2] = FontsStyleLabel.TextColor.blue/65535.0; glDisable ( GL_LIGHTING ) ; glColor4dv(color); getW(x,y,w); glPrintOrtho(w[0], w[1], w[2], str,FALSE,TRUE); glEnable ( GL_LIGHTING ) ; glDeleteFontsList(); } /*****************************************************************************/ gboolean select_atoms_by_groupe() { gint i; gdouble x1=0; gdouble y1=0; gdouble xi; gdouble yi; gdouble zi; gdouble d = 0; gint j; gint k; gboolean OK = FALSE; gdouble w[3]; gdouble rayon; x1 = BeginX; y1 = BeginY; glGetWorldCoordinates(x1,y1,w); for(i=0;i<(gint)Natoms;i++) { if(!geometry[i].show) continue; xi = w[0]-geometry[i].X; yi = w[1]-geometry[i].Y; zi = w[2]-geometry[i].Z; d = xi*xi + yi*yi + zi*zi; rayon = get_rayon_selection(i); if(d<=rayon*rayon) { if(NumFatoms == NULL) NumFatoms = g_malloc((NFatoms+1)*sizeof(gint)); else NumFatoms = g_realloc(NumFatoms, (NFatoms+1)*sizeof(gint)); NumFatoms[NFatoms] = geometry[i].N; NFatoms+=1; for(j=0;j<(gint)Natoms;j++) { if(get_connection_type(i,j)>0) { gint nGroupAtoms=0; gint * listGroupAtoms = getListGroupe(&nGroupAtoms, geometry0, Natoms, i, j,-1,-1); if(NumFatoms == NULL) NumFatoms = g_malloc((NFatoms+nGroupAtoms+1)*sizeof(gint)); else NumFatoms = g_realloc(NumFatoms, (NFatoms+nGroupAtoms+1)*sizeof(gint)); NumFatoms[NFatoms] = geometry[j].N; for(k=NFatoms+1;k=0 && del) { if((NFatoms-1)>0) { for(k=selectedj;k<(gint)(NFatoms-1);k++) NumFatoms[k] = NumFatoms[k+1]; NumFatoms = g_realloc(NumFatoms, (NFatoms-1)*sizeof(gint)); NFatoms--; } else { g_free(NumFatoms); NumFatoms = NULL; NFatoms = 0; } } } } break; } } drawGeom(); return OK; } /*****************************************************************************/ void select_atoms_by_rectangle(gdouble x,gdouble y) { gint i; gdouble x1=0; gdouble y1=0; gdouble x2=0; gdouble y2=0; gdouble xi; gdouble yi; GLdouble View2D[3]; if(x>BeginX) { x1 = BeginX; x2 = x; } else { x1 = x; x2 = BeginX; } if(y>BeginY) { y1 = BeginY; y2 = y; } else { y1 = y; y2 = BeginY; } if(!ShiftKeyPressed) { if(!NumFatoms) g_free(NumFatoms); NumFatoms = NULL; NFatoms = 0; } for(i=0;i<(gint)Natoms;i++) { if(!geometry[i].show) continue; gluProject(geometry[i].X, geometry[i].Y, geometry[i].Z,mvmatrix, projmatrix, viewport, &View2D[0], &View2D[1], &View2D[2]); xi = View2D[0]; yi = viewport[3]-View2D[1]; if(xi>=x1 && xi<=x2 && yi>=y1 && yi<=y2 && !if_selected(i)) { if(NumFatoms == NULL) NumFatoms = g_malloc((NFatoms+1)*sizeof(gint)); else NumFatoms = g_realloc(NumFatoms,(NFatoms+1)*sizeof(gint)); NumFatoms[NFatoms] = geometry[i].N; NFatoms++; } } redraw(GeomDrawingArea); } /********************************************************************************/ void draw_selection_rectangle(gdouble x,gdouble y) { xSelection = x; ySelection = y; } /********************************************************************************/ void draw_selection_circle(gdouble x,gdouble y) { } /********************************************************************************/ static void delete_molecule() { if(Natoms<1) return; add_geometry_to_fifo(); geometry0 =Free_One_Geom(geometry0,Natoms); geometry =Free_One_Geom(geometry,Natoms); Natoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms = NULL; NFatoms = 0; create_GeomXYZ_from_draw_grometry(); Ddef = FALSE; RebuildGeom=TRUE; drawGeom(); set_statubar_pop_sel_atom(); free_text_to_draw(); change_of_center(NULL,NULL); } /********************************************************************************/ void copySelectedAtoms() { Fragment F; gint i; gint k; if(Frag.NAtoms) FreeFragment(&Frag); Frag.NAtoms = 0; Frag.Atoms = NULL; if(NFatoms<1) return; F.NAtoms = NFatoms; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); for (k=0;k<(gint)NFatoms;k++) { for (i=0;i<(gint)Natoms;i++) { if(NumFatoms[k]==geometry[i].N) { F.Atoms[k].Symb=g_strdup(geometry[i].Prop.symbol); F.Atoms[k].mmType=g_strdup(geometry[i].mmType); F.Atoms[k].pdbType=g_strdup(geometry[i].pdbType); F.Atoms[k].Residue = g_strdup(geometry[i].Residue); F.Atoms[k].Coord[0]=geometry[i].X; F.Atoms[k].Coord[1]=geometry[i].Y; F.Atoms[k].Coord[2]=geometry[i].Z; F.Atoms[k].Charge=geometry[i].Charge; break; } } if(i==Natoms) break; } if(k!=NFatoms) { if(F.Atoms) g_free(F.Atoms); return; } F.atomToDelete = -1; F.atomToBondTo = -1; F.angleAtom = -1; CenterFrag(&F); Frag = F; SetOperation (NULL,ADDFRAGMENT); } /********************************************************************************/ static gchar** freeList(gchar** strs, gint nlist) { gint i; for(i=0;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); n=0; t = getListGeomMMTypes(&n); entry = create_label_combo(hbox,_(" Type Name : "),t,n, TRUE,-1,-1); if(strcmp(tmp,"UNK")) gtk_entry_set_text(GTK_ENTRY(entry),tmp); gtk_editable_set_editable((GtkEditable*) entry,TRUE); if(t) freeList(t,n); gtk_widget_realize(winDlg); button = create_button(winDlg,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); button = create_button(winDlg,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)setMMTypeOfselectedAtoms,entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show_all(winDlg); } /********************************************************************************/ static void setPDBTypeOfselectedAtoms(GtkWidget* button, GtkWidget* entry) { gint i; gint k = 0; G_CONST_RETURN gchar *tName; if(Natoms<1) return; tName = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(tName)<1) return; if(NFatoms<1) return; if(!NumFatoms) return; for (k=0;k<(gint)NFatoms;k++) for (i=0;i<(gint)Natoms;i++) { if(geometry[i].N== NumFatoms[k]) { if(geometry[i].pdbType) g_free(geometry[i].pdbType); geometry[i].pdbType = g_strdup(tName); if(geometry0[i].pdbType) g_free(geometry0[i].pdbType); geometry0[i].pdbType = g_strdup(tName); } } create_GeomXYZ_from_draw_grometry(); drawGeom(); } /********************************************************************************/ void setPDBTypeOfselectedAtomsDlg() { GtkWidget *winDlg; GtkWidget *button; GtkWidget *hbox; GtkWidget *entry; GtkWidget *frame; GtkWidget *vboxframe; gint n=0; gchar** t = NULL; gchar tmp[100] = "UNK"; gint i; gint k; if(Natoms<1) return; if(NFatoms<1) return; if(!NumFatoms) return; k=0; for (i=0;i<(gint)Natoms;i++) { if(geometry[i].N == NumFatoms[k]) { sprintf(tmp,"%s",geometry[i].pdbType); break; } } winDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(winDlg),_("Set PDB Type of selected atoms")); gtk_window_set_position(GTK_WINDOW(winDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(winDlg),GTK_WINDOW(GeomDlg)); add_child(GeomDlg,winDlg,gtk_widget_destroy,_(" Set Sel. Type.")); g_signal_connect(G_OBJECT(winDlg),"delete_event",(GCallback)delete_child,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); n=0; t = getListPDBTypesFromGeom(&n); entry = create_label_combo(hbox,_(" Type Name : "),t,n, TRUE,-1,-1); if(strcmp(tmp,"UNK")) gtk_entry_set_text(GTK_ENTRY(entry),tmp); gtk_editable_set_editable((GtkEditable*) entry,TRUE); if(t) freeList(t,n); gtk_widget_realize(winDlg); button = create_button(winDlg,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); button = create_button(winDlg,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)setPDBTypeOfselectedAtoms,entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show_all(winDlg); } /********************************************************************************/ static void setResidueNameOfselectedAtoms(GtkWidget* button, GtkWidget* entry) { gint i; gint k = 0; G_CONST_RETURN gchar *tName; if(Natoms<1) return; tName = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(tName)<1) return; if(NFatoms<1) return; if(!NumFatoms) return; for (k=0;k<(gint)NFatoms;k++) for (i=0;i<(gint)Natoms;i++) { if(geometry[i].N== NumFatoms[k]) { if(geometry[i].Residue) g_free(geometry[i].Residue); geometry[i].Residue = g_strdup(tName); if(geometry0[i].Residue) g_free(geometry0[i].Residue); geometry0[i].Residue = g_strdup(tName); } } create_GeomXYZ_from_draw_grometry(); drawGeom(); } /********************************************************************************/ static gchar* getResidueNameOfselectedAtoms() { gint i; gint k = 0; if(Natoms<1) return g_strdup("DUM"); if(NFatoms<1) return g_strdup("DUM"); if(!NumFatoms) return g_strdup("DUM"); for (k=0;k<(gint)NFatoms;k++) for (i=0;i<(gint)Natoms;i++) { if(geometry[i].N== NumFatoms[k]) { g_strdup(geometry[i].Residue); } } return g_strdup("DUM"); } /********************************************************************************/ void setResidueNameOfselectedAtomsDlg() { GtkWidget *winDlg; GtkWidget *button; GtkWidget *hbox; GtkWidget *entry; GtkWidget *frame; GtkWidget *vboxframe; gint n=0; gchar** t = NULL; gchar tmp[100] = "UNK"; gint i; gint k; if(Natoms<1) return; if(NFatoms<1) return; if(!NumFatoms) return; k=0; for (i=0;i<(gint)Natoms;i++) { if(geometry[i].N == NumFatoms[k]) { sprintf(tmp,"%s",geometry[i].pdbType); break; } } winDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(winDlg),_("Set Residue name of selected atoms")); gtk_window_set_position(GTK_WINDOW(winDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(winDlg),GTK_WINDOW(GeomDlg)); add_child(GeomDlg,winDlg,gtk_widget_destroy,_(" Set Sel. Type.")); g_signal_connect(G_OBJECT(winDlg),"delete_event",(GCallback)delete_child,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); n=1; t = g_malloc(sizeof(gchar*)*2); t[0] = NULL; t[1] = NULL; t[0] = getResidueNameOfselectedAtoms(); entry = create_label_combo(hbox,_(" Residue Name : "),t,n, TRUE,-1,-1); g_free(t[0]); g_free(t); if(strcmp(tmp,"UNK")) gtk_entry_set_text(GTK_ENTRY(entry),tmp); gtk_editable_set_editable((GtkEditable*) entry,TRUE); gtk_widget_realize(winDlg); button = create_button(winDlg,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); button = create_button(winDlg,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)setResidueNameOfselectedAtoms,entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show_all(winDlg); } /********************************************************************************/ gchar** getListCharges(gint* nlist) { gchar** t = NULL; gint i; gint j; *nlist = 0; if(Natoms<1) return NULL; t = g_malloc(Natoms*sizeof(gchar*)); *nlist = 1; t[*nlist-1] = g_strdup_printf("%f",geometry0[0].Charge); for(i=1;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); n=0; t = getListCharges(&n); entry = create_label_combo(hbox, _(" Charge : "),t,n, TRUE,-1,-1); if(strcmp(tmp,"UNK")) gtk_entry_set_text(GTK_ENTRY(entry),tmp); gtk_editable_set_editable((GtkEditable*) entry,TRUE); if(t) freeList(t,n); gtk_widget_realize(winDlg); button = create_button(winDlg,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); button = create_button(winDlg,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)setChargeOfselectedAtoms,entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show_all(winDlg); } /********************************************************************************/ static void scaleChargesOfSelectedAtoms(GtkWidget* button, GtkWidget* entry) { gint i; gint k; G_CONST_RETURN gchar *strEntry; gdouble factor = 1.0; if(Natoms<1) return; if(NFatoms<1) return; if(!NumFatoms) return; strEntry = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(strEntry)<1) return; factor = atof(strEntry); for (k=0;k<(gint)NFatoms;k++) for (i=0;i<(gint)Natoms;i++) { if(geometry[i].N== NumFatoms[k]) { geometry[i].Charge *= factor; geometry0[i].Charge *= factor; } } drawGeom(); } /********************************************************************************/ void scaleChargesOfSelectedAtomsDlg() { GtkWidget *winDlg; GtkWidget *button; GtkWidget *hbox; GtkWidget *label; GtkWidget *entry; GtkWidget *frame; GtkWidget *vboxframe; winDlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(winDlg),_("Scale charges of selected atoms")); gtk_window_set_position(GTK_WINDOW(winDlg),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(winDlg),GTK_WINDOW(GeomDlg)); add_child(GeomDlg,winDlg,gtk_widget_destroy,_(" Scal. Char. ")); g_signal_connect(G_OBJECT(winDlg),"delete_event",(GCallback)delete_child,NULL); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->vbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); hbox=create_hbox_false(vboxframe); label = gtk_label_new(_(" Factor : ")); gtk_box_pack_start( GTK_BOX(hbox), label,TRUE,TRUE,0); entry = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry),"1.0"); gtk_box_pack_start( GTK_BOX(hbox), entry,TRUE,TRUE,0); gtk_widget_realize(winDlg); button = create_button(winDlg,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); button = create_button(winDlg,_("OK")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(winDlg)->action_area), button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(button), "clicked",(GCallback)scaleChargesOfSelectedAtoms,entry); g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)delete_child,GTK_OBJECT(winDlg)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show_all(winDlg); } /*****************************************************************************/ static void set_vect_ij(gint i, gint j, gdouble V[]) { V[0] = geometry0[j].X-geometry0[i].X; V[1] = geometry0[j].Y-geometry0[i].Y; V[2] = geometry0[j].Z-geometry0[i].Z; } /*****************************************************************************/ static void add_hydrogen_atoms(gint addToI, gint nH, gchar* HType) { static SAtomsProp propH = {0}; static gint begin = 0; gint i; gint k; gdouble dist = 1.0; gint geom = 0; /* 0=3D, 1=planar, 2=linear */ gdouble angle = 109.5*PI/180.0; gint nV; gint nC; gint* listOfConnectedAtoms = NULL; if(begin==0) { begin++; propH = prop_atom_get("H"); } dist = (geometry[addToI].Prop.covalentRadii+propH.covalentRadii)*0.9; if(nH==1 && strcmp(geometry0[addToI].Prop.symbol,"N")) { angle = 180.0*PI/180.0; geom = 2; } if(nH==2 && !strcmp(geometry0[addToI].Prop.symbol,"N")) { angle = 120.0*PI/180.0; geom = 1; } nV =geometry[addToI].Prop.maximumBondValence; if(nV<1) return; listOfConnectedAtoms = g_malloc(nV*sizeof(gint)); if(Natoms>0) { geometry0 = g_realloc(geometry0,(Natoms+nH)*sizeof(GeomDef)); geometry = g_realloc(geometry,(Natoms+nH)*sizeof(GeomDef)); } else { geometry0 = g_malloc(nH*sizeof(GeomDef)); geometry = g_malloc(nH*sizeof(GeomDef)); } nC = 0; for(i=0;i<(gint)Natoms;i++) { gint ni = geometry[i].N-1; if(geometry[addToI].typeConnections[ni]>0) { listOfConnectedAtoms[nC] = i; nC++; } } for(i=0;i1) { v3d_add(v2,v3,v4); if(v3d_length(v4)>1e-2) v3d_normal(v4); v3d_scale(v4,-1.0); v3d_cross(v2,v3,v5); if(v3d_length(v5)<1e-2) for(k=0;k<3;k++) v5[k] = rand()/(gdouble)RAND_MAX-0.5; v3d_normal(v5); v3d_scale(v4,0.5); v3d_scale(v5,0.5); v3d_add(v4,v5,v1); v3d_normal(v1); } else { v3d_add(v2,v3,v1); v3d_normal(v1); v3d_scale(v1,-1.0); } break; } default: if(nC>=3) { set_vect_ij(addToI, listOfConnectedAtoms[nC-3], v2); v3d_normal(v2); set_vect_ij(addToI, listOfConnectedAtoms[nC-2], v3); v3d_normal(v3); set_vect_ij(addToI, listOfConnectedAtoms[nC-1], v4); v3d_normal(v4); v3d_add(v2,v3,v5); v3d_add(v5,v4,v1); if(v3d_length(v1)<2e-1) v3d_cross(v2,v3,v1); v3d_normal(v1); v3d_scale(v1,-1.0); break; } } geometry[Natoms].X= geometry0[addToI].X + dist*v1[0]; geometry[Natoms].Y= geometry0[addToI].Y + dist*v1[1]; geometry[Natoms].Z= geometry0[addToI].Z + dist*v1[2]; geometry[Natoms].Prop = prop_atom_get("H"); geometry[Natoms].pdbType = g_strdup(HType); if(Natoms==0) { geometry[Natoms].Residue = g_strdup("H"); geometry[Natoms].ResidueNumber = 0; } else { geometry[Natoms].Residue = g_strdup(geometry[addToI].Residue); geometry[Natoms].ResidueNumber = geometry[addToI].ResidueNumber; } { gdouble charge; gchar* mmType = getMMTypeFromPDBTpl(geometry[Natoms].Residue,geometry[Natoms].pdbType,&charge); if(!strcmp(mmType,"UNK")) { geometry[Natoms].mmType = g_strdup(HType); g_free(mmType); } else geometry[Natoms].mmType = mmType; } geometry[Natoms].Layer = geometry[addToI].Layer; geometry[Natoms].N = Natoms+1; geometry[Natoms].typeConnections = NULL; geometry[Natoms].Charge = 0.0; geometry[Natoms].Variable = TRUE; geometry[Natoms].show = ShowHydrogenAtoms; geometry0[Natoms].X = geometry[Natoms].X; geometry0[Natoms].Y = geometry[Natoms].Y; geometry0[Natoms].Z = geometry[Natoms].Z; geometry0[Natoms].Prop = prop_atom_get("H"); geometry0[Natoms].mmType = g_strdup(geometry[Natoms].mmType); geometry0[Natoms].pdbType = g_strdup(geometry[Natoms].pdbType); geometry0[Natoms].Layer = geometry[Natoms].Layer; geometry0[Natoms].Residue = g_strdup(geometry[Natoms].Residue); geometry0[Natoms].ResidueNumber = geometry[Natoms].ResidueNumber; geometry0[Natoms].Charge = 0.0; geometry0[Natoms].Variable = TRUE; geometry0[Natoms].N = geometry[Natoms].N; geometry0[Natoms].show = geometry[Natoms].show; geometry0[Natoms].typeConnections = NULL; Natoms++; nC++; listOfConnectedAtoms = g_realloc(listOfConnectedAtoms, nC*sizeof(gint)); listOfConnectedAtoms[nC-1] = Natoms-1; } { gint i,j; for(i=0;i<(gint)Natoms-nH;i++) { geometry[i].typeConnections = g_realloc(geometry[i].typeConnections,Natoms*sizeof(gint)); for(j=Natoms-nH;j<(gint)Natoms;j++) geometry[i].typeConnections[j] = 0; geometry0[i].typeConnections = g_realloc(geometry0[i].typeConnections,Natoms*sizeof(gint)); for(j=Natoms-nH;j<(gint)Natoms;j++) geometry0[i].typeConnections[j] = 0; } for(i=(gint)Natoms-nH;i<(gint)Natoms;i++) { geometry[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;j<(gint)Natoms;j++) geometry[i].typeConnections[j] = 0; geometry0[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;j<(gint)Natoms;j++) geometry0[i].typeConnections[j] = 0; } for(i=(gint)Natoms-nH;i<(gint)Natoms;i++) { geometry[addToI].typeConnections[geometry[i].N-1] = 1; geometry0[addToI].typeConnections[geometry0[i].N-1] = 1; geometry[i].typeConnections[geometry[addToI].N-1] = 1; geometry0[i].typeConnections[geometry0[addToI].N-1] = 1; } /* adjust_multiple_bonds_with_one_atom(addToI);*/ } if(listOfConnectedAtoms) g_free(listOfConnectedAtoms); } /*****************************************************************************/ static gboolean add_hydrogen_atom(gint addToI) { gint nMultiple = 0; gint nAll = 0; gchar HType[100] = "H"; gint j; gint nV = 0; gint nH = 0; if(Natoms<1 ) return FALSE; if(addToI>Natoms-1) return FALSE; nV =geometry[addToI].Prop.maximumBondValence; if(nV<1) return FALSE; for(j=0;j<(gint)Natoms;j++) { gint nj = geometry[j].N-1; if(geometry[addToI].typeConnections[nj]>1) nMultiple++; nAll += geometry[addToI].typeConnections[nj]; } nH = nV - nAll; if(nH<1) { return FALSE; } if(nAll>=geometry[addToI].Prop.maximumBondValence && nMultiple==0) { return FALSE; } if(!strcmp(geometry[addToI].pdbType,"CA")) sprintf(HType,"HA"); else if(!strcmp(geometry[addToI].pdbType,"OH")) sprintf(HType,"HO"); else if(strstr(geometry[addToI].pdbType,"OE")) sprintf(HType,"HO"); else if(strstr(geometry[addToI].pdbType,"OD")) sprintf(HType,"HO"); else if(!strcmp(geometry[addToI].pdbType,"OG1")) sprintf(HType,"HG1"); else if(!strcmp(geometry[addToI].pdbType,"CT")) sprintf(HType,"HT"); else if(!strcmp(geometry[addToI].pdbType,"CB")) sprintf(HType,"HB1"); else if(!strcmp(geometry[addToI].pdbType,"SG")) sprintf(HType,"HG"); else if(!strcmp(geometry[addToI].pdbType,"CD1")) sprintf(HType,"HD11"); else if(!strcmp(geometry[addToI].pdbType,"CD2")) sprintf(HType,"HD22"); else if(strstr(geometry[addToI].pdbType,"CD")) sprintf(HType,"HD1"); else if(!strcmp(geometry[addToI].pdbType,"CG1")) sprintf(HType,"HG11"); else if(!strcmp(geometry[addToI].pdbType,"CG2")) sprintf(HType,"HG22"); else if(strstr(geometry[addToI].pdbType,"CG")) sprintf(HType,"HG1"); else if(!strcmp(geometry[addToI].pdbType,"CE1")) sprintf(HType,"HE1"); else if(!strcmp(geometry[addToI].pdbType,"CE2")) sprintf(HType,"HE2"); else if(strstr(geometry[addToI].pdbType,"CE")) sprintf(HType,"HE2"); else if(strstr(geometry[addToI].pdbType,"NZ")) sprintf(HType,"HZ2"); else if(strstr(geometry[addToI].pdbType,"NZ")) sprintf(HType,"HZ2"); else if(!strcmp(geometry[addToI].pdbType,"CZ1")) sprintf(HType,"HZ1"); else if(!strcmp(geometry[addToI].pdbType,"CZ2")) sprintf(HType,"HZ2"); else if(!strcmp(geometry[addToI].pdbType,"CZ3")) sprintf(HType,"HZ3"); else if(strstr(geometry[addToI].pdbType,"CZ")) sprintf(HType,"HZ"); else if(!strcmp(geometry[addToI].pdbType,"NE")) sprintf(HType,"HE"); else if(!strcmp(geometry[addToI].pdbType,"N")) sprintf(HType,"H"); else if(!strcmp(geometry[addToI].pdbType,"NE1")) sprintf(HType,"HE1"); else if(!strcmp(geometry[addToI].pdbType,"NH1")) sprintf(HType,"HH11"); else if(!strcmp(geometry[addToI].pdbType,"NH2")) sprintf(HType,"HH21"); else if(!strcmp(geometry[addToI].pdbType,"CH1")) sprintf(HType,"HH1"); else if(!strcmp(geometry[addToI].pdbType,"CH2")) sprintf(HType,"HH2"); else if(!strcmp(geometry[addToI].pdbType,"CH3")) sprintf(HType,"H2"); else { sprintf(HType,"%s1",geometry[addToI].pdbType); if(strlen(HType)>0) HType[0] = 'H'; } add_hydrogen_atoms(addToI, nH, HType); reset_charges_multiplicities(); return TRUE; } /*****************************************************************************/ static gboolean add_max_hydrogen_atom(gint addToI) { gint nAll = 0; gchar HType[100] = "H"; gint j; gint nV = 0; gint nH = 0; if(Natoms<1 ) return FALSE; if(addToI>Natoms-1) return FALSE; nV =geometry[addToI].Prop.maximumBondValence; if(nV<1) return FALSE; for(j=0;j<(gint)Natoms;j++) { gint nj = geometry[j].N-1; if(geometry[addToI].typeConnections[nj]>0) nAll += 1; } /* printf("Type = %s res = %s\n", geometry[addToI].mmType, geometry[addToI].Residue); */ nH = nV - nAll; if(nH<1) { return FALSE; } if(!strcmp(geometry[addToI].pdbType,"CA")) sprintf(HType,"HA"); else if(!strcmp(geometry[addToI].pdbType,"OH")) sprintf(HType,"HO"); else if(strstr(geometry[addToI].pdbType,"OE")) sprintf(HType,"HO"); else if(strstr(geometry[addToI].pdbType,"OD")) sprintf(HType,"HO"); else if(!strcmp(geometry[addToI].pdbType,"OG1")) sprintf(HType,"HG1"); else if(!strcmp(geometry[addToI].pdbType,"CT")) sprintf(HType,"HT"); else if(!strcmp(geometry[addToI].pdbType,"CB")) sprintf(HType,"HB1"); else if(!strcmp(geometry[addToI].pdbType,"SG")) sprintf(HType,"HG"); else if(!strcmp(geometry[addToI].pdbType,"CD1")) sprintf(HType,"HD11"); else if(!strcmp(geometry[addToI].pdbType,"CD2")) sprintf(HType,"HD22"); else if(strstr(geometry[addToI].pdbType,"CD")) sprintf(HType,"HD1"); else if(!strcmp(geometry[addToI].pdbType,"CG1")) sprintf(HType,"HG11"); else if(!strcmp(geometry[addToI].pdbType,"CG2")) sprintf(HType,"HG22"); else if(strstr(geometry[addToI].pdbType,"CG")) sprintf(HType,"HG1"); else if(!strcmp(geometry[addToI].pdbType,"CE1")) sprintf(HType,"HE1"); else if(!strcmp(geometry[addToI].pdbType,"CE2")) sprintf(HType,"HE2"); else if(strstr(geometry[addToI].pdbType,"CE")) sprintf(HType,"HE2"); else if(strstr(geometry[addToI].pdbType,"NZ")) sprintf(HType,"HZ2"); else if(strstr(geometry[addToI].pdbType,"NZ")) sprintf(HType,"HZ2"); else if(!strcmp(geometry[addToI].pdbType,"CZ1")) sprintf(HType,"HZ1"); else if(!strcmp(geometry[addToI].pdbType,"CZ2")) sprintf(HType,"HZ2"); else if(!strcmp(geometry[addToI].pdbType,"CZ3")) sprintf(HType,"HZ3"); else if(strstr(geometry[addToI].pdbType,"CZ")) sprintf(HType,"HZ"); else if(!strcmp(geometry[addToI].pdbType,"NE")) sprintf(HType,"HE"); else if(!strcmp(geometry[addToI].pdbType,"N")) sprintf(HType,"H"); else if(!strcmp(geometry[addToI].pdbType,"NE1")) sprintf(HType,"HE1"); else if(!strcmp(geometry[addToI].pdbType,"NH1")) sprintf(HType,"HH11"); else if(!strcmp(geometry[addToI].pdbType,"NH2")) sprintf(HType,"HH21"); else if(!strcmp(geometry[addToI].pdbType,"CH1")) sprintf(HType,"HH1"); else if(!strcmp(geometry[addToI].pdbType,"CH2")) sprintf(HType,"HH2"); else if(!strcmp(geometry[addToI].pdbType,"CH3")) sprintf(HType,"H2"); else { sprintf(HType,"%s1",geometry[addToI].pdbType); if(strlen(HType)>0) HType[0] = 'H'; } add_hydrogen_atoms(addToI, nH, HType); setMultipleBonds(); reset_charges_multiplicities(); RebuildGeom=TRUE; return TRUE; } /*****************************************************************************/ static gboolean add_one_hydrogen_atom(gint addToI) { gint nMultiple = 0; gint nAll = 0; gchar HType[100] = "H"; gint j; gint nV = 0; gint nH = 0; gint nC = 0; if(Natoms<1 ) return FALSE; if(addToI>Natoms-1) return FALSE; nV =geometry[addToI].Prop.maximumBondValence; if(nV<1) return FALSE; for(j=0;j<(gint)Natoms;j++) { gint nj = geometry[j].N-1; if(geometry[addToI].typeConnections[nj]>0) nC++; if(geometry[addToI].typeConnections[nj]>1) nMultiple++; nAll += geometry[addToI].typeConnections[nj]; } nH = nV - nC; if(nH<1) { return FALSE; } else nH = 1; if(nAll>=geometry[addToI].Prop.maximumBondValence && nMultiple==0) { return FALSE; } if(!strcmp(geometry[addToI].pdbType,"CA")) sprintf(HType,"HA"); else if(!strcmp(geometry[addToI].pdbType,"OH")) sprintf(HType,"HO"); else if(strstr(geometry[addToI].pdbType,"OE")) sprintf(HType,"HO"); else if(strstr(geometry[addToI].pdbType,"OD")) sprintf(HType,"HO"); else if(!strcmp(geometry[addToI].pdbType,"OG1")) sprintf(HType,"HG1"); else if(!strcmp(geometry[addToI].pdbType,"CT")) sprintf(HType,"HT"); else if(!strcmp(geometry[addToI].pdbType,"CB")) sprintf(HType,"HB1"); else if(!strcmp(geometry[addToI].pdbType,"SG")) sprintf(HType,"HG"); else if(!strcmp(geometry[addToI].pdbType,"CD1")) sprintf(HType,"HD11"); else if(!strcmp(geometry[addToI].pdbType,"CD2")) sprintf(HType,"HD22"); else if(strstr(geometry[addToI].pdbType,"CD")) sprintf(HType,"HD1"); else if(!strcmp(geometry[addToI].pdbType,"CG1")) sprintf(HType,"HG11"); else if(!strcmp(geometry[addToI].pdbType,"CG2")) sprintf(HType,"HG22"); else if(strstr(geometry[addToI].pdbType,"CG")) sprintf(HType,"HG1"); else if(!strcmp(geometry[addToI].pdbType,"CE1")) sprintf(HType,"HE1"); else if(!strcmp(geometry[addToI].pdbType,"CE2")) sprintf(HType,"HE2"); else if(strstr(geometry[addToI].pdbType,"CE")) sprintf(HType,"HE2"); else if(strstr(geometry[addToI].pdbType,"NZ")) sprintf(HType,"HZ2"); else if(strstr(geometry[addToI].pdbType,"NZ")) sprintf(HType,"HZ2"); else if(!strcmp(geometry[addToI].pdbType,"CZ1")) sprintf(HType,"HZ1"); else if(!strcmp(geometry[addToI].pdbType,"CZ2")) sprintf(HType,"HZ2"); else if(!strcmp(geometry[addToI].pdbType,"CZ3")) sprintf(HType,"HZ3"); else if(strstr(geometry[addToI].pdbType,"CZ")) sprintf(HType,"HZ"); else if(!strcmp(geometry[addToI].pdbType,"NE")) sprintf(HType,"HE"); else if(!strcmp(geometry[addToI].pdbType,"N")) sprintf(HType,"H"); else if(!strcmp(geometry[addToI].pdbType,"NE1")) sprintf(HType,"HE1"); else if(!strcmp(geometry[addToI].pdbType,"NH1")) sprintf(HType,"HH11"); else if(!strcmp(geometry[addToI].pdbType,"NH2")) sprintf(HType,"HH21"); else if(!strcmp(geometry[addToI].pdbType,"CH1")) sprintf(HType,"HH1"); else if(!strcmp(geometry[addToI].pdbType,"CH2")) sprintf(HType,"HH2"); else if(!strcmp(geometry[addToI].pdbType,"CH3")) sprintf(HType,"H2"); else { sprintf(HType,"%s1",geometry[addToI].pdbType); if(strlen(HType)>0) HType[0] = 'H'; } add_hydrogen_atoms(addToI, nH, HType); RebuildGeom=TRUE; return TRUE; } /********************************************************************************/ void addMaxHydrogens() { gint i; gint k = 0; if(Natoms<1) return; if(!NumFatoms) SelectAllAtoms(); if(NFatoms<1) return; if(!NumFatoms) return; for (k=0;k<(gint)NFatoms;k++) for (i=0;i<(gint)Natoms;i++) { if(geometry[i].N== NumFatoms[k]) { add_max_hydrogen_atom(i); break; } } reset_multiple_bonds(); create_GeomXYZ_from_draw_grometry(); reset_charges_multiplicities(); RebuildGeom=TRUE; drawGeom(); } /********************************************************************************/ void addHydrogens() { gint i; gint k = 0; if(Natoms<1) return; if(!NumFatoms) SelectAllAtoms(); if(NFatoms<1) return; if(!NumFatoms) return; for (k=0;k<(gint)NFatoms;k++) for (i=0;i<(gint)Natoms;i++) { if(geometry[i].N== NumFatoms[k]) { add_hydrogen_atom(i); break; } } create_GeomXYZ_from_draw_grometry(); reset_charges_multiplicities(); RebuildGeom=TRUE; drawGeom(); } /********************************************************************************/ void addOneHydrogen() { gint i; gint k = 0; if(Natoms<1) return; if(!NumFatoms) SelectAllAtoms(); if(NFatoms<1) return; if(!NumFatoms) return; for (k=0;k<(gint)NFatoms;k++) for (i=0;i<(gint)Natoms;i++) { if(geometry[i].N== NumFatoms[k]) { add_one_hydrogen_atom(i); break; } } create_GeomXYZ_from_draw_grometry(); reset_charges_multiplicities(); RebuildGeom=TRUE; drawGeom(); } /*******************************************************************/ void adjust_hydrogens_connected_to_atom(gint ia) { if(Natoms<1) return; if(ia<0 || ia>Natoms-1) return; { gint nj = 0; gint j; gint nBondsA = 0; for(j=0;j<(gint)Natoms;j++) { nj = geometry[j].N-1; if(geometry[ia].typeConnections && geometry[ia].typeConnections[nj]>0) nBondsA += geometry[ia].typeConnections[nj]; } if( nBondsA==geometry[ia].Prop.maximumBondValence ) return; if(nBondsAgeometry[ia].Prop.maximumBondValence) { gint nHA = nBondsA-geometry[ia].Prop.maximumBondValence; deleteHydrogensConnectedTo(ia, nHA); } reset_charges_multiplicities(); } } /*******************************************************************/ void adjust_hydrogens_connected_to_atoms(gint ia, gint ib) { if(Natoms<2) return; if(ia<0 || ib<0 || ia>Natoms-1 || ib>Natoms-1) return; if(!geometry[ia].typeConnections) return; if(!geometry[ib].typeConnections) return; { gint nj = 0; gint j; gint nBondsA = 0; gint nBondsB = 0; for(j=0;j<(gint)Natoms;j++) { nj = geometry[j].N-1; if(geometry[ia].typeConnections[nj]>0) nBondsA += geometry[ia].typeConnections[nj]; if(geometry[ib].typeConnections[nj]>0) nBondsB += geometry[ib].typeConnections[nj]; } if( nBondsA==geometry[ia].Prop.maximumBondValence && nBondsB==geometry[ib].Prop.maximumBondValence ) return; if(nBondsAgeometry[ia].Prop.maximumBondValence && nBondsB<=geometry[ib].Prop.maximumBondValence) { gint nHA = nBondsA-geometry[ia].Prop.maximumBondValence; deleteHydrogensConnectedTo(ia, nHA); } if(nBondsB>geometry[ib].Prop.maximumBondValence && nBondsA<=geometry[ia].Prop.maximumBondValence) { gint nHB = nBondsA-geometry[ib].Prop.maximumBondValence; deleteHydrogensConnectedTo(ib, nHB); } if(nBondsA>geometry[ia].Prop.maximumBondValence && nBondsB>geometry[ib].Prop.maximumBondValence) { gint nHA = nBondsA-geometry[ia].Prop.maximumBondValence; gint nHB = nBondsB-geometry[ib].Prop.maximumBondValence; gint* numHA = NULL; gint* numHB = NULL; gint kA = 0; gint kB = 0; gint k; gint i; GeomDef tmp; gint* oldN = NULL; if(nHA>0) numHA = g_malloc(nHA*sizeof(gint)); if(nHB>0) numHB = g_malloc(nHB*sizeof(gint)); for(j=0;j=nHA) break; } } kB = 0; for(j=0;j<(gint)Natoms;j++) { if(j==ib) continue; nj = geometry[j].N-1; if(geometry[ib].typeConnections[nj] && !strcmp(geometry[j].Prop.symbol,"H")) { numHB[kB++] = geometry[j].N; if(kB>=nHB) break; } } copy_connections(geometry0, geometry, Natoms); for (i=0;i<(gint)Natoms-1;i++) { gboolean toDelete = FALSE; for(k=0;k0) { geometry0 = g_realloc(geometry0,Natoms*sizeof(GeomDef)); geometry = g_realloc(geometry,Natoms*sizeof(GeomDef)); } else { if(geometry0) g_free(geometry0); geometry0 = NULL; if(geometry) g_free(geometry); geometry = NULL; Natoms = 0; } Ddef = FALSE; reset_charges_multiplicities(); } } } /*****************************************************************************/ static void add_hydrogen_atoms_tpl(gint addToI, gint nA) { static SAtomsProp propH = {0}; static gint begin = 0; gint i; gint k; gdouble dist = 1.0; gint geom = 0; /* 0=3D, 1=planar, 2=linear */ gdouble angle = 109.5*PI/180.0; gint nV; gint nC; gint* listOfConnectedAtoms = NULL; gint nH; gchar* hAtoms[10]; gint nAll; gint nOldH = 0; nV =geometry[addToI].Prop.maximumBondValence; if(nV<1) return; nAll = 0; nOldH = 0; for(i=0;i<(gint)nA;i++) { gint ni = geometry[i].N-1; if(geometry[addToI].typeConnections[ni]>0) { nAll += 1; } } if(!strcmp(geometry[addToI].Prop.symbol,"N")) nV++; for(i=0;i<10;i++) hAtoms[i] = g_malloc(sizeof(gchar)*100); nH = getHydrogensFromPDBTpl(geometry[addToI].Residue,geometry[addToI].pdbType, hAtoms); nH -= nOldH; if(nH<1) { for(i=0;i<10;i++) g_free(hAtoms[i]); return; } if(begin==0) { begin++; propH = prop_atom_get("H"); } dist = (geometry[addToI].Prop.covalentRadii+propH.covalentRadii)*0.9; listOfConnectedAtoms = g_malloc(nV*sizeof(gint)); if(Natoms>0) { geometry0 = g_realloc(geometry0,(Natoms+nH)*sizeof(GeomDef)); geometry = g_realloc(geometry,(Natoms+nH)*sizeof(GeomDef)); } else { geometry0 = g_malloc(nH*sizeof(GeomDef)); geometry = g_malloc(nH*sizeof(GeomDef)); } nC = 0; for(i=0;i<(gint)nA;i++) { gint ni = geometry[i].N-1; if(geometry[addToI].typeConnections[ni]>0) { listOfConnectedAtoms[nC] = i; nC++; } } for(i=0;i=3) { set_vect_ij(addToI, listOfConnectedAtoms[nC-3], v2); v3d_normal(v2); set_vect_ij(addToI, listOfConnectedAtoms[nC-2], v3); v3d_normal(v3); set_vect_ij(addToI, listOfConnectedAtoms[nC-1], v4); v3d_normal(v4); v3d_add(v2,v3,v5); v3d_add(v5,v4,v1); v3d_normal(v1); v3d_scale(v1,-1.0); break; } } geometry[Natoms].X= geometry0[addToI].X + dist*v1[0]; geometry[Natoms].Y= geometry0[addToI].Y + dist*v1[1]; geometry[Natoms].Z= geometry0[addToI].Z + dist*v1[2]; geometry[Natoms].Prop = prop_atom_get("H"); geometry[Natoms].mmType = g_strdup(hAtoms[i]); geometry[Natoms].pdbType = g_strdup(hAtoms[i]); geometry[Natoms].Layer = geometry[addToI].Layer; geometry[Natoms].N = Natoms+1; geometry[Natoms].typeConnections = NULL; if(Natoms==0) { geometry[Natoms].Residue = g_strdup("H"); geometry[Natoms].ResidueNumber = 0; } else { geometry[Natoms].Residue = g_strdup(geometry[addToI].Residue); geometry[Natoms].ResidueNumber = geometry[addToI].ResidueNumber; } geometry[Natoms].Charge = 0.0; geometry[Natoms].Variable = TRUE; geometry[Natoms].show = ShowHydrogenAtoms; geometry0[Natoms].X = geometry[Natoms].X; geometry0[Natoms].Y = geometry[Natoms].Y; geometry0[Natoms].Z = geometry[Natoms].Z; geometry0[Natoms].Prop = prop_atom_get("H"); geometry0[Natoms].mmType = g_strdup(geometry[Natoms].mmType); geometry0[Natoms].pdbType = g_strdup(geometry[Natoms].pdbType); geometry0[Natoms].Layer = geometry[Natoms].Layer; geometry0[Natoms].Residue = g_strdup(geometry[Natoms].Residue); geometry0[Natoms].ResidueNumber = geometry[Natoms].ResidueNumber; geometry0[Natoms].Charge = 0.0; geometry0[Natoms].Variable = TRUE; geometry0[Natoms].N = geometry[Natoms].N; geometry0[Natoms].show = geometry[Natoms].show; geometry0[Natoms].typeConnections = NULL; Natoms++; nC++; listOfConnectedAtoms = g_realloc(listOfConnectedAtoms, nC*sizeof(gint)); listOfConnectedAtoms[nC-1] = Natoms-1; } { gint i,j; for(i=0;i<(gint)Natoms-nH;i++) { geometry[i].typeConnections = g_realloc(geometry[i].typeConnections,Natoms*sizeof(gint)); for(j=Natoms-nH;j<(gint)Natoms;j++) geometry[i].typeConnections[j] = 0; geometry0[i].typeConnections = g_realloc(geometry0[i].typeConnections,Natoms*sizeof(gint)); for(j=Natoms-nH;j<(gint)Natoms;j++) geometry0[i].typeConnections[j] = 0; } for(i=(gint)Natoms-nH;i<(gint)Natoms;i++) { geometry[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;j<(gint)Natoms;j++) geometry[i].typeConnections[j] = 0; geometry0[i].typeConnections = g_malloc(Natoms*sizeof(gint)); for(j=0;j<(gint)Natoms;j++) geometry0[i].typeConnections[j] = 0; } for(i=(gint)Natoms-nH;i<(gint)Natoms;i++) { geometry[addToI].typeConnections[geometry[i].N-1] = 1; geometry0[addToI].typeConnections[geometry0[i].N-1] = 1; geometry[i].typeConnections[geometry[addToI].N-1] = 1; geometry0[i].typeConnections[geometry0[addToI].N-1] = 1; } adjust_multiple_bonds_with_one_atom(addToI); } if(listOfConnectedAtoms) g_free(listOfConnectedAtoms); for(i=0;i<10;i++) g_free(hAtoms[i]); } /********************************************************************************/ void addHydrogensTpl() { gint i; gint k = 0; gint nA = Natoms; if(Natoms<1) return; if(!NumFatoms) SelectAllAtoms(); if(NFatoms<1) return; if(!NumFatoms) return; for (k=0;k<(gint)NFatoms;k++) for (i=0;i<(gint)nA;i++) { if(geometry[i].N== NumFatoms[k]) { add_hydrogen_atoms_tpl(i,nA); break; } } setMMTypesChargesFromPDBTpl(2); create_GeomXYZ_from_draw_grometry(); reset_charges_multiplicities(); RebuildGeom=TRUE; drawGeom(); } /********************************************************************************/ void DeleteMolecule() { gchar *t =N_("Do you want to really destroy this molecule?"); if(Natoms>0) Continue_YesNo(delete_molecule, NULL,t); else Message(_("No molecule to delete\n"),_("Warning"),TRUE); } /********************************************************************************/ void SetOriginAtCenter(gpointer data, guint Operation,GtkWidget* wid) { gdouble C[3]; gint i; if(Natoms<1) return; for(i=0;i<3;i++) C[i] = 0.0; for(i=0;i<(gint)Natoms;i++) { C[0] += geometry0[i].X; C[1] += geometry0[i].Y; C[2] += geometry0[i].Z; } for(i=0;i<3;i++) C[i] /= Natoms; for(i=0;i<(gint)Natoms;i++) { geometry0[i].X -= C[0]; geometry0[i].Y -= C[1]; geometry0[i].Z -= C[2]; } copyCoordinates2to1(geometry, geometry0); Ddef = FALSE; Trans[0] = 0; Trans[0] = 0; //printf("Centre = %f %f %f\n", C[0], C[1], C[2]); reset_origine_molecule_drawgeom(); //for (i=0;i<3;i++) Orig[i] = 0.0; RebuildGeom=TRUE; drawGeom(); set_statubar_pop_sel_atom(); create_GeomXYZ_from_draw_grometry(); return; } /********************************************************************************/ void TraitementGeom(gpointer data, guint Operation,GtkWidget* wid) { switch((GabEditGeomOperation)Operation) { case SAVEJPEG: file_chooser_save(save_geometry_jpeg_file,_("Save image in jpeg file format"),GABEDIT_TYPEFILE_JPEG,GABEDIT_TYPEWIN_GEOM); break; case SAVEPPM: file_chooser_save(save_geometry_ppm_file,_("Save image in ppm file format"),GABEDIT_TYPEFILE_PPM,GABEDIT_TYPEWIN_GEOM); break; case SAVEBMP: file_chooser_save(save_geometry_bmp_file,_("Save image in bmp file format"),GABEDIT_TYPEFILE_BMP,GABEDIT_TYPEWIN_GEOM); break; case SAVEPS: file_chooser_save(save_geometry_ps_file,_("Save image in ps file format"),GABEDIT_TYPEFILE_PS,GABEDIT_TYPEWIN_GEOM); break; default: printf("Operation = %d\n",Operation); } } /********************************************************************************/ GdkPixmap *get_drawing_pixmap() { return NULL; } /********************************************************************************/ cairo_t *get_drawing_cairo() { return cr; } /********************************************************************************/ GdkColormap* get_drawing_colormap() { GdkColormap *colormap = gdk_drawable_get_colormap(GeomDrawingArea->window); return colormap; } /********************************************************************************/ void read_geometries_convergence(gpointer data, guint Operation,GtkWidget* wid) { switch(Operation) { case FGEOMCONVDALTON: file_chooser_open(read_geometries_conv_dalton,_("Load Geom. Conv. From Dalton Output file"), GABEDIT_TYPEFILE_DALTON,GABEDIT_TYPEWIN_GEOM); break; case FGEOMCONVGAMESS: file_chooser_open(read_geometries_conv_dalton,_("Load Geom. Conv. From Gamess Output file"), GABEDIT_TYPEFILE_GAMESS,GABEDIT_TYPEWIN_GEOM); break; case FGEOMCONVGAUSS: file_chooser_open(read_geometries_conv_gaussian,_("Load Geom. Conv. From Gaussian Output file"), GABEDIT_TYPEFILE_GAUSSIAN,GABEDIT_TYPEWIN_GEOM); break; case FGEOMCONVMOLPRO: file_chooser_open(read_geometries_conv_molpro,_("Load Geom. Conv. From Molpro log file"), GABEDIT_TYPEFILE_MOLPRO_LOG,GABEDIT_TYPEWIN_GEOM); break; case FGEOMCONVMOLDEN: file_chooser_open(read_geometries_conv_molden,_("Load Geom. Conv. From Molden file"), GABEDIT_TYPEFILE_MOLDEN,GABEDIT_TYPEWIN_GEOM); break; case FGEOMCONVGABEDIT: file_chooser_open(read_geometries_conv_gabedit,_("Load Geom. Conv. From Gabedit file"), GABEDIT_TYPEFILE_GABEDIT,GABEDIT_TYPEWIN_GEOM); break; case FGEOMCONVMPQC: file_chooser_open(read_geometries_conv_mpqc,_("Load Geom. Conv. From MPQC output file"), GABEDIT_TYPEFILE_MPQC,GABEDIT_TYPEWIN_GEOM); break; case FGEOMCONVXYZ: file_chooser_open(read_geometries_conv_xyz,_("Load Geom. Conv. From XYZ"), GABEDIT_TYPEFILE_XYZ,GABEDIT_TYPEWIN_GEOM); break; default : break; } } /********************************************************************************/ void save_geometry(gpointer data, guint Operation,GtkWidget* wid) { if(Natoms<1) { Message(_("Sorry,No molecule to save\n"),_("Warning"),TRUE); return; } switch(Operation) { case FXYZ : create_GeomXYZ_from_draw_grometry(); file_chooser_save(save_geometry_xyz_file,_("Save geometry in xyz file"), GABEDIT_TYPEFILE_XYZ,GABEDIT_TYPEWIN_GEOM); break; case FMOL2 : create_GeomXYZ_from_draw_grometry(); file_chooser_save(save_geometry_mol2_file,_("Save geometry in mol2 file"), GABEDIT_TYPEFILE_MOL2,GABEDIT_TYPEWIN_GEOM); break; case FTINKER : create_GeomXYZ_from_draw_grometry(); file_chooser_save(save_geometry_tinker_file,_("Save geometry in tinker file"), GABEDIT_TYPEFILE_TINKER,GABEDIT_TYPEWIN_GEOM); break; case FPDB : create_GeomXYZ_from_draw_grometry(); file_chooser_save(save_geometry_pdb_file,_("Save geometry in pdb file"), GABEDIT_TYPEFILE_PDB,GABEDIT_TYPEWIN_GEOM); break; case FHIN : create_GeomXYZ_from_draw_grometry(); file_chooser_save(save_geometry_hin_file,_("Save geometry in hyperchem file"), GABEDIT_TYPEFILE_HIN,GABEDIT_TYPEWIN_GEOM); break; case FGABEDIT : create_GeomXYZ_from_draw_grometry(); file_chooser_save(save_geometry_gabedit_file,_("Save geometry in gabedit file"), GABEDIT_TYPEFILE_GABEDIT,GABEDIT_TYPEWIN_GEOM); break; case FMZMAT : create_GeomXYZ_from_draw_grometry(); if(!xyz_to_zmat()) { Message(_("Sorry\nConversion is not possible from XYZ to Zmat"),_("Error"),TRUE); return; } file_chooser_save(save_geometry_mzmatrix_file,_("Save geometry in mopac z-matrix file"), GABEDIT_TYPEFILE_MZMAT,GABEDIT_TYPEWIN_GEOM); create_GeomXYZ_from_draw_grometry(); MethodeGeom = GEOM_IS_XYZ; break; case FGZMAT : create_GeomXYZ_from_draw_grometry(); if(!xyz_to_zmat()) { Message(_("Sorry\nConversion is not possible from XYZ to Zmat"),_("Error"),TRUE); return; } file_chooser_save(save_geometry_gzmatrix_file,_("Save geometry in gaussian z-matrix file"), GABEDIT_TYPEFILE_GZMAT,GABEDIT_TYPEWIN_GEOM); create_GeomXYZ_from_draw_grometry(); MethodeGeom = GEOM_IS_XYZ; break; default : break; } } /********************************************************************************/ void read_geometry(gpointer data, guint Operation,GtkWidget* wid) { switch(Operation) { case FXYZ : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_XYZ);break; case FGZMAT : MethodeGeom = GEOM_IS_ZMAT;selc_ZMatrix_file();break; case FMZMAT : MethodeGeom = GEOM_IS_ZMAT;selc_ZMatrix_mopac_file();break; case FMOL2 : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_MOL2);break; case FTINKER : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_TINKER);break; case FPDB : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_PDB);break; case FHIN : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_HIN);break; case FDALTONIN : break; case FDALTONFIRST: MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_DALTONFIRST);break; case FDALTONLAST : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_DALTONLAST);break; case FGAUSSIN : selc_all_input_file(_("Read Geometry from a Gaussian input file"));break; case FGAUSSOUTFIRST: MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_GAUSSOUTFIRST);break; case FGAUSSOUTLAST : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_GAUSSOUTLAST);break; case FMOLCASIN : selc_all_input_file(_("Read Geometry from a Molcas input file"));break; case FMOLCASOUTFIRST: MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_MOLCASOUTFIRST);break; case FMOLCASOUTLAST : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_MOLCASOUTLAST);break; case FMOLPROIN : selc_all_input_file(_("Read Geometry from a Molpro input file"));break; case FMOLPROOUTFIRST: MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_MOLPROOUTFIRST);break; case FMOLPROOUTLAST : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_MOLPROOUTLAST);break; case FMPQCIN : selc_all_input_file(_("Read Geometry from a MPQC input file"));break; case FMPQCOUTFIRST: MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_MPQCOUTFIRST);break; case FMPQCOUTLAST : MethodeGeom = GEOM_IS_XYZ;selc_XYZ_file(GABEDIT_TYPEFILEGEOM_MPQCOUTLAST);break; } } /********************************************************************************/ guint label_option() { return LabelOption; } /********************************************************************************/ gboolean dipole_draw_mode() { return DrawDipole; } /********************************************************************************/ gboolean ortho_mode() { return ortho; } /********************************************************************************/ gboolean distances_draw_mode() { return DrawDistance; } /********************************************************************************/ gboolean dipole_mode() { return ShowDipole; } /********************************************************************************/ gboolean stick_mode() { if( TypeGeom == GABEDIT_TYPEGEOM_STICK ) return TRUE; return FALSE; } /********************************************************************************/ gboolean space_fill_mode() { if( TypeGeom == GABEDIT_TYPEGEOM_SPACE ) return TRUE; return FALSE; } /********************************************************************************/ gboolean pers_mode() { return PersMode; } /********************************************************************************/ gboolean shad_mode() { return ShadMode; } /********************************************************************************/ gboolean light_mode() { return LightMode; } /********************************************************************************/ gboolean ortep_mode() { return OrtepMode; } /********************************************************************************/ gboolean cartoon_mode() { return CartoonMode; } /********************************************************************************/ gdouble get_frag_angle() { return fragAngle; } /********************************************************************************/ void set_frag_angle(gdouble a) { fragAngle = a; } /********************************************************************************/ void set_HBonds_dialog_geom(GtkWidget *win, guint data) { set_HBonds_dialog (GeomDlg); } /********************************************************************************/ void set_povray_options_geom(GtkWidget *win, guint data) { createPovrayOptionsWindow(GeomDlg); } /********************************************************************************/ void HideShowMeasure(gboolean hiding) { if(hiding) { gtk_widget_hide(vboxhandle); gtk_widget_hide(GeomDrawingArea); gtk_widget_show(GeomDrawingArea); while( gtk_events_pending() ) gtk_main_iteration(); } else gtk_widget_show(vboxhandle); MeasureIsHide=hiding; } /********************************************************************************/ void AdjustHydrogensYesNo(gboolean adjust) { AdjustHydrogenAtoms = adjust; } /********************************************************************************/ gboolean getAdjustHydrogensYesNo() { return AdjustHydrogenAtoms; } /********************************************************************************/ void RebuildConnectionsDuringEditionYesNo(gboolean rebuild) { RebuildConnectionsDuringEdition = rebuild; } /********************************************************************************/ gboolean getRebuildConnectionsDuringEditionYesNo() { return RebuildConnectionsDuringEdition; } /********************************************************************************/ static gint ScaleByMouse(gpointer data) { GdkEventButton *bevent=(GdkEventButton *)data; gdouble height = GeomDrawingArea->allocation.height; switch(OperationType) { case SCALEGEOM : Zoom -= ((bevent->y - BeginY) / height) * 40; if (Zoom < 0.1) Zoom = 0.1; if (Zoom > 500) Zoom = 500; drawGeom(); break; case SCALESTICK : factorstick +=((bevent->y - BeginY) / GeomDrawingArea->allocation.height) * 5; if(factorstick <0.1) factorstick = 0.1; if(factorstick >10) factorstick = 10; RebuildGeom=TRUE; drawGeom(); break; case SCALEBALL : factorball +=((bevent->y - BeginY) / GeomDrawingArea->allocation.height) * 5; if(factorball <0.1) factorball = 0.1; if(factorball >10) factorball = 10; RebuildGeom=TRUE; drawGeom(); break; case SCALEDIPOLE : factordipole +=((bevent->y - BeginY) / GeomDrawingArea->allocation.height) * 5; if(factordipole <0.1) factordipole = 0.1; if(factordipole >100) factordipole = 100; RebuildGeom=TRUE; drawGeom(); break; default : break; } BeginX = bevent->x; BeginY = bevent->y; return TRUE; } /********************************************************************************/ static gint TranslationByMouse(GtkWidget *widget, GdkEventMotion *event) { int x, y; GdkModifierType state; gdouble width, height; if (event->is_hint) { #if !defined(G_OS_WIN32) gdk_window_get_pointer(event->window, &x, &y, &state); #else x = event->x; y = event->y; state = event->state; #endif } else { x = event->x; y = event->y; state = event->state; } width = widget->allocation.width; height = widget->allocation.height; Trans[0] += ((x - BeginX) / width) * 40; Trans[1] += ((BeginY - y) / height) * 40; drawGeom(); BeginX = x; BeginY = y; return TRUE; } /********************************************************************************/ static gint RotationByMouse(GtkWidget *widget, GdkEventMotion *event) { int x, y; GdkRectangle area; GdkModifierType state; gdouble spin_quat[4]; if (event->is_hint) { #if !defined(G_OS_WIN32) gdk_window_get_pointer(event->window, &x, &y, &state); #else x = event->x; y = event->y; state = event->state; #endif } else { x = event->x; y = event->y; state = event->state; } area.x = 0; area.y = 0; area.width = widget->allocation.width; area.height = widget->allocation.height; trackball(spin_quat, (2.0*BeginX - area.width) / area.width, (area.height - 2.0*BeginY) / area.height, (2.0*x - area.width) / area.width, (area.height - 2.0*y ) / area.height); add_quats(spin_quat, Quat, Quat); drawGeom(); BeginX = x; BeginY = y; return TRUE; } /********************************************************************************/ static gint RotationZByMouse(GtkWidget *widget, GdkEventMotion *event) { int x, y; GdkModifierType state; gdouble spin_quat[4] = {0,0,0,0}; gdouble phi = 1.0/180*PI; gdouble width; gdouble height; gint Xi; gint Yi; if (event->is_hint) { #if !defined(G_OS_WIN32) gdk_window_get_pointer(event->window, &x, &y, &state); #else x = event->x; y = event->y; state = event->state; #endif } else { x = event->x; y = event->y; state = event->state; } width = widget->allocation.width; height = widget->allocation.height; Xi = width/2 + Trans[0]; Yi = height/2 + Trans[1]; if(abs(BeginX-x)>abs(BeginY-y)) { gdouble sign = 1.0; if(BeginY> Yi && BeginXx) sign = -1; phi = sign* fabs(BeginX-x)/width*PI; } else { gdouble sign = 1.0; if(BeginX> Xi && BeginY>y) sign = -1; if(BeginX< Xi && BeginYis_hint) { #if !defined(G_OS_WIN32) gdk_window_get_pointer(event->window, &x, &y, &state); #else x = event->x; y = event->y; state = event->state; gdk_window_get_pointer(event->window, &x, &y, &state); #endif } else { x = event->x; y = event->y; state = event->state; } width = widget->allocation.width; height = widget->allocation.height; if(abs(BeginX-x)>abs(BeginY-y)) { gdouble sign = 1.0; if(BeginY> Yi && BeginXx) sign = -1; phi = sign* fabs(BeginX-x)/width*PI; } else { gdouble sign = 1.0; if(BeginX> Xi && BeginY>y) sign = -1; if(BeginX< Xi && BeginYis_hint) { #if !defined(G_OS_WIN32) gdk_window_get_pointer(event->window, &x, &y, &state); #else x = event->x; y = event->y; state = event->state; #endif } else { x = event->x; y = event->y; state = event->state; } width = widget->allocation.width; height = widget->allocation.height; trackball(spin_quat, (2.0*(width/2+BeginX-Xi) - (width)) / (width), ((height) - 2.0*(height/2+BeginY-Yi)) / (height), (2.0*(width/2+x-Xi) - (width)) / (width), ((height) - 2.0*(height/2+y-Yi) ) / (height)); add_quats(spin_quat, QuatFrag, QuatFrag); build_rotmatrix(m,QuatFrag); rotation_fragment_quat(m,C); if(RebuildConnectionsDuringEdition) reset_connections_between_selected_and_notselected_atoms(); /* reset_all_connections();*/ drawGeom(); init_quat(QuatFrag); BeginX = x; BeginY = y; return TRUE; } /********************************************************************************/ void set_statubar_pop_sel_atom() { gchar* temp = NULL; if(NumSelectedAtom >=0 && OperationType == DELETEFRAG) { temp = g_strdup_printf(_("%s[%d] ; Coord (Ang) : %f %f %f ; Move your mouse to cancel the operation "), geometry0[NumSelectedAtom].Prop.symbol,NumSelectedAtom+1, geometry0[NumSelectedAtom].X*BOHR_TO_ANG, geometry0[NumSelectedAtom].Y*BOHR_TO_ANG, geometry0[NumSelectedAtom].Z*BOHR_TO_ANG); } if(OperationType == CUTBOND || OperationType == CHANGEBOND) { temp = g_strdup_printf(_("Move your mouse to cancel the operation ")); } if(temp) { gtk_statusbar_pop(GTK_STATUSBAR(StatusOperation),idStatusOperation); gtk_statusbar_push(GTK_STATUSBAR(StatusOperation),idStatusOperation,temp); g_free(temp); } } /********************************************************************************/ static gint move_one_atom(GdkEventMotion *event) { int x, y; GdkModifierType state; gdouble w[3]; gint i; GLdouble View2D[3]; if(NumSelectedAtom<0) return -1; if (event->is_hint) { #if !defined(G_OS_WIN32) gdk_window_get_pointer(event->window, &x, &y, &state); #else x = event->x; y = event->y; state = event->state; #endif } else { x = event->x; y = event->y; state = event->state; } i = NumSelectedAtom; gluProject(geometry[i].X, geometry[i].Y, geometry[i].Z,mvmatrix, projmatrix, viewport, &View2D[0], &View2D[1], &View2D[2]); gluUnProject( (float)x, (float)viewport[3] - (float)y, View2D[2], mvmatrix, projmatrix, viewport, &w[0], &w[1], &w[2]); geometry0[i].X=w[0]; geometry0[i].Y=w[1]; geometry0[i].Z=w[2]; geometry[i].X=w[0]; geometry[i].Y=w[1]; geometry[i].Z=w[2]; Ddef = FALSE; drawGeom(); set_statubar_pop_sel_atom(); return TRUE; } /***********************************************************************************/ static gint move_all_selected_atoms(GtkWidget *widget, GdkEventMotion *event) { int x, y; GdkModifierType state; gdouble X; gdouble Y; gdouble Z; gdouble w[3]; GLdouble View2D[3]; gint i = NumSelectedAtom; if(NumSelectedAtom<0) return -1; if (event->is_hint) { #if !defined(G_OS_WIN32) gdk_window_get_pointer(event->window, &x, &y, &state); #else x = event->x; y = event->y; state = event->state; #endif } else { x = event->x; y = event->y; state = event->state; } gluProject(geometry[i].X, geometry[i].Y, geometry[i].Z,mvmatrix, projmatrix, viewport, &View2D[0], &View2D[1], &View2D[2]); gluUnProject( (float)x, (float)viewport[3] - (float)y, View2D[2], mvmatrix, projmatrix, viewport, &w[0], &w[1], &w[2]); X = w[0]; Y = w[1]; Z = w[2]; { gint j; gdouble B[3]={X,Y,Z}; B[0] -=geometry[i].X; B[1] -=geometry[i].Y; B[2] -=geometry[i].Z; for(i=0;i<(gint)Natoms;i++) for(j=0;j<(gint)NFatoms;j++) if(NumFatoms[j]==(gint)geometry0[i].N) { geometry[i].X += B[0]; geometry[i].Y += B[1]; geometry[i].Z += B[2]; } } for (i=0;ix; yi = bevent->y; glGetWorldCoordinates(xi,yi,w); NumProcheAtom = -1; for(i=Natoms-1;i>=0;i--) { xii = w[0]-geometry[i].X; yii = w[1]-geometry[i].Y; zii = w[2]-geometry[i].Z; d1 = xii*xii+yii*yii+zii*zii; if(mindist<0) { mindist = fabs(d1); NumProcheAtom = i; } if(mindist>fabs(d1)) { mindist = fabs(d1); NumProcheAtom = i; } } return NumProcheAtom; } /*****************************************************************************/ gint set_selected_atoms(GdkEventButton *bevent) { gdouble xi,yi,xii,yii,zii; gint i; gdouble mindist = -1; gdouble d2 ; gdouble d1 ; gint ns = -1; gdouble w[3]; xi = bevent->x; yi = bevent->y; glGetWorldCoordinates(xi,yi,w); for(i=Natoms-1;i>=0;i--) { gdouble rayon = get_rayon_selection(i); xii = w[0]-geometry[i].X; yii = w[1]-geometry[i].Y; zii = w[2]-geometry[i].Z; d1 = xii*xii+yii*yii+zii*zii; d2 = d1-rayon*rayon; if(d2<0) { if(mindist<0) { mindist = fabs(d1); ns = i; } if(mindist>fabs(d1)) { mindist = fabs(d1); ns = i; } } } if(ns != -1) { gboolean Ok = FALSE; for(i=0;i<4;i++) if(NumSelAtoms[i] ==(gint) geometry[ns].N) { NumSelAtoms[i] = -1; Ok = TRUE; break; } if(!Ok) for(i=0;i<4;i++) if(NumSelAtoms[i] == -1 || NumSelAtoms[i] >(gint)Natoms) { NumSelAtoms[i] = geometry[ns].N; Ok = TRUE; break; } if(!Ok) { for(i=0;i<3;i++) NumSelAtoms[i] = NumSelAtoms[i+1]; NumSelAtoms[3] = geometry[ns].N; } } for(i=0;i<3;i++) if(NumSelAtoms[i] == -1) { NumSelAtoms[i] = NumSelAtoms[i+1]; NumSelAtoms[i+1] = -1; } drawGeom(); change_of_center(NULL,NULL); set_statubar_pop_sel_atom(); return ns; } /*****************************************************************************/ gint unselected_atom(GdkEventButton *bevent) { gdouble xi,yi,xii,yii; xi = bevent->x; yi = bevent->y; xii = xi-BeginX; yii = yi-BeginY; if(xii*xii+yii*yii > 8) { NumSelectedAtom = -1; drawGeom(); SetOperation (NULL,OperationType); } return NumSelectedAtom; } /*****************************************************************************/ gint unselected_bond(GdkEventButton *bevent) { gdouble xi,yi,xii,yii; xi = bevent->x; yi = bevent->y; xii = xi-BeginX; yii = yi-BeginY; if(xii*xii+yii*yii > 8) { NumBatoms[0] = NumBatoms[1] = -1; NBatoms = 0; drawGeom(); SetOperation (NULL,OperationType); } return 0; } /*****************************************************************************/ gint set_selected_second_atom_bond(GdkEventButton *bevent) { gdouble xi,yi,xa,ya,za; gint i; gdouble da ; gint nb=0; gdouble w[3]; xi = bevent->x; yi = bevent->y; glGetWorldCoordinates(xi,yi,w); for(i=Natoms-1;i>=0;i--) { gdouble rayon = get_rayon_selection(i); if(geometry[i].N==geometry[NumSelectedAtom].N) continue; if(geometry[i].N==NumBatoms[0]) continue; xa = w[0]-geometry[i].X; ya = w[1]-geometry[i].Y; za = w[2]-geometry[i].Z; da = xa*xa+ya*ya+za*za; if(da=0 && Natoms>1) { /* NumPointedAtom could be on top of an atom, Search it */ gdouble rb = 0; gdouble rmin = 1000; if(NumPointedAtom>=0) rb = get_rayon_selection(Natoms-1); for(i=Natoms-2;i>=0;i--) { gchar *dist = NULL; gdouble d = 0; gdouble rcut = 0.0; if(geometry[i].N==geometry[NumSelectedAtom].N) continue; if(i == NumPointedAtom) continue; if(geometry[i].N==NumBatoms[0]) continue; dist = get_distance(geometry[i].N, geometry[Natoms-1].N); if(dist) rcut = get_rayon_selection(i)+rb; if(dist) d = atof(dist) / BOHR_TO_ANG; if(d=0;i--) { gluProject(geometry[i].X, geometry[i].Y, geometry[i].Z,mvmatrix, projmatrix, viewport, &View2D[0], &View2D[1], &View2D[2]); xii = View2D[0]-winX; yii = View2D[1]-winY; d1 = xii*xii+yii*yii; if(mindist<0 || mindist>d1) { mindist = d1; imin = i; } } i =imin; gluProject(geometry[i].X, geometry[i].Y, geometry[i].Z,mvmatrix, projmatrix, viewport, &View2D[0], &View2D[1], &View2D[2]); printf("imin = %d mindis = %f winz = %f winz2 = %f \n",imin,sqrt(mindist),winZ, View2D[2] ); if(imin>0 && sqrt(mindist)0 && nb != NumBatoms[0]) //if(nb>0) { NBatoms = 2; NumBatoms[1] = nb; } else { NBatoms = 1; } drawGeom(); change_of_center(NULL,NULL); set_statubar_pop_sel_atom(); return NBatoms; } /*****************************************************************************/ gint set_selected_atom(GdkEventButton *bevent) { gdouble xi,yi,xii,yii,zii; gint i; gdouble mindist = -1; gdouble d2 ; gdouble d1 ; gdouble w[3]; xi = bevent->x; yi = bevent->y; glGetWorldCoordinates(xi,yi,w); NumSelectedAtom = -1; for(i=Natoms-1;i>=0;i--) { gdouble rayon; if(!geometry[i].show) continue; rayon = get_rayon_selection(i); xii = w[0]-geometry[i].X; yii = w[1]-geometry[i].Y; zii = w[2]-geometry[i].Z; d1 = xii*xii+yii*yii+zii*zii; d2 = d1-rayon*rayon; if(d2<0) { if(mindist<0) { mindist = fabs(d1); NumSelectedAtom = i; } if(mindist>fabs(d1)) { mindist = fabs(d1); NumSelectedAtom = i; } } } for(i=0;i<3;i++) QuatAtom[i] = 0; QuatAtom[3] = 1; if(NumSelectedAtom>=0) { CSselectedAtom[0] = geometry0[NumSelectedAtom].X; CSselectedAtom[1] = geometry0[NumSelectedAtom].Y; CSselectedAtom[2] = geometry0[NumSelectedAtom].Z; } drawGeom(); set_statubar_pop_sel_atom(); return NumSelectedAtom; } /*****************************************************************************/ gint set_selected_bond(GdkEventButton *bevent) { gdouble xi,yi,xa,ya,za,xb,yb,zb; gint i,j; gdouble da ; gdouble db ; gint na = -1; gint nb = -1; gdouble w[3]; xi = bevent->x; yi = bevent->y; glGetWorldCoordinates(xi,yi,w); NumBatoms[0] = NumBatoms[1] = -1; NBatoms = 0; for(i=Natoms-1;i>=0;i--) { gdouble rayoni; if(!geometry[i].show) continue; xa = w[0]-geometry[i].X; ya = w[1]-geometry[i].Y; za = w[2]-geometry[i].Z; da = xa*xa+ya*ya+za*za; rayoni = get_rayon_selection(i); rayoni = rayoni*rayoni; for(j=Natoms-1;j>=0;j--) { gdouble rayonj; gdouble minrayon; if(i==j) continue; if(!geometry[j].show) continue; gint nj = geometry[j].N-1; if(geometry[i].typeConnections[nj]<1) continue; xb = w[0]-geometry[j].X; yb = w[1]-geometry[j].Y; zb = w[2]-geometry[j].Z; db = xb*xb+yb*yb+zb*zb; rayonj = get_rayon_selection(j); rayonj = rayonj*rayonj; minrayon = rayoni; if(minrayon>rayonj) minrayon = rayonj; if( da-1 && nb>-1) break; } if(na != -1 && nb != -1) { NBatoms = 2; NumBatoms[0] = (gint) geometry[na].N; NumBatoms[1] = (gint) geometry[nb].N; } drawGeom(); change_of_center(NULL,NULL); set_statubar_pop_sel_atom(); return NBatoms; } /*****************************************************************************/ gint set_selected_atom_bond(GdkEventButton *bevent) { gdouble xi,yi,xa,ya,za; gint i; gdouble da ; gdouble w[3]; xi = bevent->x; yi = bevent->y; glGetWorldCoordinates(xi,yi,w); NumBatoms[0] = NumBatoms[1] = -1; NBatoms = 0; for(i=Natoms-1;i>=0;i--) { gdouble rayon = get_rayon_selection(i); xa = w[0]-geometry[i].X; ya = w[1]-geometry[i].Y; za = w[2]-geometry[i].Z; da = xa*xa+ya*ya+za*za; if(dax; yi = bevent->y; glGetWorldCoordinates(xi,yi,w); for(i=Natoms-1;i>=0;i--) { gdouble rayon; if(!geometry[i].show) continue; if(i==NumSelectedAtom) continue; xii = w[0]-geometry[i].X; yii = w[1]-geometry[i].Y; zii = w[2]-geometry[i].Z; d1 = xii*xii+yii*yii+zii*zii; rayon = f*get_rayon_selection(i); d2 = d1-rayon*rayon; /* printf("i=%d, d1 = %f , d2 = %f\n",i,d1,d2);*/ if(d2<0) return i; } return -1; } /*****************************************************************************/ gint set_selected_atom_or_bond_to_delete(GdkEventButton *bevent) { NumSelectedAtom = -1; if(get_atom_to_select(bevent,1.0)>=0) { OperationType = DELETEFRAG; return set_selected_atom(bevent); } OperationType = CUTBOND; return set_selected_bond(bevent); } /*****************************************************************************/ gint add_begin_atoms_bond(GdkEventButton *bevent) { gint ni,nj,i,j; if(NBatoms==1 && NumBatoms[0]>0) { insert_atom(bevent); j = Natoms-1; nj = geometry[j].N-1; for(i=0;i<(gint)Natoms;i++) if(geometry[i].N==NumBatoms[0]) { ni = geometry[i].N-1; geometry0[j].typeConnections[ni] = 1; geometry0[i].typeConnections[nj] = 1; geometry[j].typeConnections[ni] = 1; geometry[i].typeConnections[nj] = 1; break; } NumSelectedAtom = Natoms-1; return 1; } insert_atom(bevent); NumProcheAtom = Natoms-1; insert_atom(bevent); j = Natoms-1; i = Natoms-2; ni = geometry[i].N-1; nj = geometry[j].N-1; geometry0[j].typeConnections[ni] = 1; geometry0[i].typeConnections[nj] = 1; geometry[j].typeConnections[ni] = 1; geometry[i].typeConnections[nj] = 1; NumSelectedAtom = Natoms-1; NumBatoms[0] = -(geometry0[i].N+Natoms); return 2; } /*****************************************************************************/ gint set_selected_atom_or_bond_to_edit(GdkEventButton *bevent) { gint res = -1; NumSelectedAtom = -1; res = get_atom_to_select(bevent,1.0); /* printf("res = %d\n",res);*/ if(res==-1) { set_selected_bond(bevent); /* printf("NBatoms = %d\n",NBatoms);*/ if(NBatoms==2) { OperationType = CHANGEBOND; return NBatoms; } } set_selected_atom_bond(bevent); OperationType = ADDATOMSBOND; res = set_selected_atom(bevent); set_proche_atom(bevent); return res; } /*****************************************************************************/ static gint atom_noni_connected_to(gint i, gint k) { gint j; gint l; if(Natoms<3) return -1; if(geometry[i].typeConnections) for(j=0;j0 || geometry[j].typeConnections[nl]>0) && geometry[l].Prop.symbol[0] !='H') return geometry[j].N; } } for(j=0;j0) return geometry[j].N; } return -1; } /*****************************************************************************/ gint set_selected_atoms_for_insert_frag(GdkEventButton *bevent) { gint nb = 0; gint i; gint j; NumSelectedAtom = -1; angleTo = -1; atomToBondTo = -1; NumSelectedAtom = -1; i = get_atom_to_select(bevent,1.0); if(i<0) return i; atomToDelete = geometry[i].N; atomToBondTo = -1; for (j=0;j<(gint)Natoms;j++) if(geometry[j].typeConnections && geometry[j].typeConnections[atomToDelete-1]>0) { nb++; atomToBondTo = geometry[j].N; angleTo = atom_noni_connected_to( i, atomToBondTo); } if(nb != 1 || atomToBondTo==-1) { atomToDelete = -1; atomToBondTo = -1; angleTo = -1; } if(Frag.NAtoms>0 && Frag.atomToDelete != -1) drawGeom(); return atomToDelete; } /***************************************************************************** * event_dispatcher ******************************************************************************/ gint button_press(GtkWidget *DrawingArea, GdkEvent *event, gpointer Menu) { GdkEventButton *bevent; switch (event->type) { case GDK_BUTTON_PRESS: { buttonpress = TRUE; bevent = (GdkEventButton *) event; if (bevent->button == 3) /* Right Button ==> Popup Menu */ { buttonpress = FALSE; popup_menu_geom( bevent->button, bevent->time); } else if (bevent->button == 1 && ControlKeyPressed) { BeginX= bevent->x; BeginY = bevent->y; return TRUE; } else if (bevent->button == 1) { /* beginning of drag, reset mouse position */ BeginX= bevent->x; BeginY = bevent->y; switch(OperationType) { case SELECTOBJECTS : if(GKeyPressed && select_atoms_by_groupe()) SetOperation(NULL,SELECTRESIDUE); else if(!FKeyPressed && select_atoms_by_residues()) SetOperation(NULL,SELECTRESIDUE); else SetOperation(NULL,SELECTFRAG); break; case MOVEFRAG : add_geometry_to_fifo(); set_selected_atom(bevent); break; case DELETEOBJECTS : add_geometry_to_fifo(); set_selected_atom_or_bond_to_delete(bevent);break; case MEASURE : set_selected_atoms(bevent);break; case EDITOBJECTS : add_geometry_to_fifo(); set_selected_atom_or_bond_to_edit(bevent); if(NBatoms<2) add_begin_atoms_bond(bevent); RebuildGeom = TRUE; drawGeom(); break; case ADDFRAGMENT : add_geometry_to_fifo(); set_selected_atoms_for_insert_frag(bevent); set_proche_atom(bevent);break; case ROTLOCFRAG : add_geometry_to_fifo(); init_quat(QuatFrag); ButtonPressed = TRUE; drawGeom(); break; case ROTZLOCFRAG : add_geometry_to_fifo(); init_quat(QuatFrag); ButtonPressed = TRUE; drawGeom(); break; default:break; } return TRUE; } else if (bevent->button == 2) { BeginX= bevent->x; BeginY = bevent->y; return TRUE; } } default: break; } return FALSE; } /*************************/ void unselect_all_atoms() { NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms = NULL; } /***************************************************************************** * event_release ******************************************************************************/ gint button_release(GtkWidget *DrawingArea, GdkEvent *event, gpointer Menu) { GdkEventButton *bevent; buttonpress = FALSE; if(event->type == GDK_BUTTON_RELEASE) { bevent = (GdkEventButton *) event; xSelection = -1; ySelection = -1; if (bevent->button == 3) return TRUE; if (bevent->button == 2) { drawGeom(); return TRUE;} if (bevent->button == 1 && ControlKeyPressed) return TRUE; } if(NumSelectedAtom !=-1) { switch(OperationType) { case MOVEFRAG : create_GeomXYZ_from_draw_grometry(); NumSelectedAtom = -1; if(GeomIsOpen) unselect_all_atoms(); free_text_to_draw(); RebuildGeom = TRUE; drawGeom(); SetOperation (NULL,MOVEFRAG); change_of_center(NULL,NULL); break; case DELETEFRAG : delete_selected_atoms(); create_GeomXYZ_from_draw_grometry(); NumSelectedAtom = -1; free_text_to_draw(); RebuildGeom = TRUE; drawGeom(); SetOperation (NULL,DELETEOBJECTS); change_of_center(NULL,NULL); break; default:break; } } switch(OperationType) { case SELECTRESIDUE : SetOperation(NULL,SELECTOBJECTS); break; case SELECTFRAG : SetOperation(NULL,SELECTOBJECTS); break; case ADDATOMSBOND : /* printf("NBatoms=%d NumBatoms=%d %d\n",NBatoms, NumBatoms[0], NumBatoms[1]); if(NBatoms==2 && NumBatoms[0]>0 && NumBatoms[1]>0 && NumBatoms[0]==NumBatoms[1]) { delete_one_atom(NumSelectedAtom); } else */ if(NBatoms==2 && NumBatoms[0]>0 && NumBatoms[1]>0 && NumBatoms[0]!=NumBatoms[1]) { delete_one_atom(NumSelectedAtom); add_bond(); } else if(NBatoms==2 && NumBatoms[0]<-Natoms && NumBatoms[1]>0) { NumBatoms[0] = -NumBatoms[0]-Natoms; delete_one_atom(NumSelectedAtom); if( NumBatoms[0] != NumBatoms[1]) add_bond(); } else if(NumBatoms[0]>0 && NumSelectedAtom>-1) { gchar *dist = get_distance(geometry[NumSelectedAtom].N,NumBatoms[0]); gdouble d = 0; gdouble rcut = get_rayon_selection(NumSelectedAtom)+get_rayon_selection(get_indice(NumBatoms[0])); if(dist) d = atof(dist) / BOHR_TO_ANG; /* printf("distance = %f\n",d); printf("rcut = %f\n",rcut); printf("NumSelectedatom = %d\n",NumSelectedAtom); printf("Numbatom = %d\n",get_indice(NumBatoms[0])); */ //if(res != -1) if(dist && dis_hint) { #if !defined(G_OS_WIN32) int x, y; gdk_window_get_pointer(event->window, &x, &y, &state); #else state = event->state; #endif } else state = event->state; if (state & GDK_BUTTON1_MASK) { if(ControlKeyPressed) { RotationByMouse(widget,event); return TRUE; } } if(OperationType==EDITOBJECTS && !(state & GDK_BUTTON2_MASK)) { NumPointedAtom = get_atom_to_select((GdkEventButton*)event,1.0); drawGeom(); } if (state & GDK_BUTTON1_MASK) { switch(OperationType) { case ROTATION : RotationByMouse(widget,event);break; case ROTATIONZ : RotationZByMouse(widget,event);break; case TRANSMOVIE : TranslationByMouse(widget,event);break; case SCALEGEOM : case SCALESTICK : case SCALEBALL : case SCALEDIPOLE: ScaleByMouse((gpointer)event);break; case SELECTFRAG : switch(SelectType) { case CIRCLE : draw_selection_circle(event->x,event->y); break; case RECTANGLE: draw_selection_rectangle(event->x,event->y); select_atoms_by_rectangle(event->x,event->y); break; default:break; } break; case MOVEFRAG : RebuildGeom = TRUE; MoveAtomByMouse(widget,event); free_text_to_draw(); change_of_center(NULL,NULL); break; case ROTLOCFRAG : RebuildGeom = TRUE; local_rotate_fragment(widget,event); free_text_to_draw(); change_of_center(NULL,NULL); break; case ROTZLOCFRAG : RebuildGeom = TRUE; local_zrotate_fragment(widget,event); free_text_to_draw(); change_of_center(NULL,NULL); break; case DELETEFRAG : RebuildGeom = TRUE; if(unselected_atom((GdkEventButton *)event)==-1) { OperationType = DELETEOBJECTS; unselected_atom((GdkEventButton *)event); } free_text_to_draw(); change_of_center(NULL,NULL); break; case CUTBOND : RebuildGeom = TRUE; OperationType = DELETEOBJECTS; unselected_bond((GdkEventButton *)event); free_text_to_draw(); drawGeom(); break; case CHANGEBOND : RebuildGeom = TRUE; unselected_bond((GdkEventButton *)event); free_text_to_draw(); break; case ADDATOMSBOND : RebuildGeom = TRUE; move_one_atom(event); set_selected_second_atom_bond((GdkEventButton *)event); free_text_to_draw(); break; case ADDFRAGMENT : RebuildGeom = TRUE; if(atomToDelete>-1) { gint j = get_atom_to_select((GdkEventButton *)event,1.0); if(j>=0 && geometry[j].N != atomToDelete && geometry[j].N != atomToBondTo && fabs(atof(get_angle(atomToDelete,atomToBondTo,geometry[j].N))-180)>0.1) { angleTo = geometry[j].N; drawGeom(); } } default : return FALSE; } } if (state & GDK_BUTTON2_MASK) { RotationByMouse(widget,event); } return TRUE; } /*********************************************************************************************/ static void drawChecker() { GLdouble x, y, z; GLint i,j; V4d Diffuse1 = {0.0,0.0,0.0,0.8}; V4d Diffuse2 = {0.8,0.8,0.8,0.8}; V4d Specular = {0.8,0.8,0.8,0.8 }; V4d Ambiant = {0.1,0.1,0.1,0.8}; static GLdouble w = 4; static GLint n = 50; static GLdouble x0 = -100; static GLdouble y0 = 0; static GLdouble z0 = -100; GLdouble max = 0; /* if(Ncenters>0) max = fabs(geometry[0].C[0]); else max = 10; for(i=0;i<(gint)Ncenters;i++) { if(max-5-max) y0 = -5-max; glMaterialdv(GL_FRONT_AND_BACK,GL_SPECULAR,Specular); glMaterialdv(GL_FRONT_AND_BACK,GL_DIFFUSE,Diffuse1); glMaterialdv(GL_FRONT_AND_BACK,GL_AMBIENT,Ambiant); glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,100); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glRotatef(-5,0,1,0); for(i=0;ired/65535.0; g = BackColor->green/65535.0; b = BackColor->blue/65535.0; } glClearColor(r,g,b,o); } /*****************************************************************************/ static void redrawGeometry() { if (RebuildGeom || glIsList(GeomList) != GL_TRUE ) { if (glIsList(GeomList) == GL_TRUE) glDeleteLists(GeomList,1); GeomList = glGenLists(1); glNewList(GeomList, GL_COMPILE); gl_build_geometry(); glEndList(); glCallList(GeomList); RebuildGeom = FALSE; } else { glCallList(GeomList); } } /*****************************************************************************/ static void redrawSelection() { /*if (RebuildSelection || glIsList(SelectionList) != GL_TRUE )*/ { if (glIsList(SelectionList) == GL_TRUE) glDeleteLists(SelectionList,1); SelectionList = glGenLists(1); glNewList(SelectionList, GL_COMPILE); gl_build_selection(); glEndList(); glCallList(SelectionList); /*RebuildSelection = TRUE;*/ } /*else { glCallList(SelectionList); }*/ } /*****************************************************************************/ static void redrawLabels() { gl_build_labels(); } /*****************************************************************************/ /* static void getOriginAxes(gdouble* w) { gint x = GeomDrawingArea->allocation.width/20; gint y = GeomDrawingArea->allocation.height-GeomDrawingArea->allocation.height/10; if(Natoms>0) { gint i = 0; GLdouble View2D[3]; gluProject(geometry[i].X, geometry[i].Y, geometry[i].Z,mvmatrix, projmatrix, viewport, &View2D[0], &View2D[1], &View2D[2]); gluUnProject( (float)x, (float)viewport[3] - (float)y, View2D[2], mvmatrix, projmatrix, viewport, &w[0], &w[1], &w[2]); } else { gint i; for(i=0;i<3;i++)w[i] = 0; } } */ /*****************************************************************************/ static void redrawAxes() { /*gdouble w[3]={0,0,0};*/ if(!testShowAxesGeom()) return; /*if (RebuildAxes || glIsList(AxesList) != GL_TRUE )*/ { if (glIsList(AxesList) == GL_TRUE) glDeleteLists(AxesList,1); AxesList = glGenLists(1); glNewList(AxesList, GL_COMPILE); /*getOriginAxes(w);*/ /*gl_build_axes(w);*/ gl_build_axes(NULL); glEndList(); glCallList(AxesList); /*RebuildAxes = TRUE;*/ } /*else { glCallList(AxesList); }*/ } /*****************************************************************************/ static void redrawDipole() { if(!ShowDipole) return; if(!Dipole.def) return; /*if (RebuildDipole || glIsList(DipoleList) != GL_TRUE )*/ { if (glIsList(DipoleList) == GL_TRUE) glDeleteLists(DipoleList,1); DipoleList = glGenLists(1); glNewList(DipoleList, GL_COMPILE); gl_build_dipole(); glEndList(); glCallList(DipoleList); /*RebuildSelection = TRUE;*/ } /*else { glCallList(DipoleList); }*/ } /********************************************************************************/ static gint redraw(GtkWidget *widget) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); GLdouble m[4][4]; if(Zoom>=180) Zoom = 160; if(!GTK_IS_WIDGET(widget)) return TRUE; if(!GTK_WIDGET_REALIZED(widget)) return TRUE; if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; glMatrixMode(GL_PROJECTION); glLoadIdentity(); addFog(); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glClearDepth(1.0); set_background_color(); mYPerspective(45,(GLdouble)widget->allocation.width/(GLdouble)widget->allocation.height,1,100); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if(optcol==-1) drawChecker(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(PersMode) mYPerspective(Zoom,(GLdouble)widget->allocation.width/(GLdouble)widget->allocation.height,zNear,zFar); else { gdouble fw = (GLdouble)widget->allocation.width/(GLdouble)widget->allocation.height; gdouble fh = 1.0; glOrtho(-fw,fw,-fh,fh,-1,1); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if(PersMode) glTranslatef(Trans[0],Trans[1],Trans[2]); else { glTranslatef(Trans[0]/10,Trans[1]/10,0); glScalef(1/Zoom*2,1/Zoom*2,1/Zoom*2); } SetLight(); build_rotmatrix(m,Quat); glMultMatrixd(&m[0][0]); redrawGeometry(); redrawSelection(); redrawDipole(); redrawLabels(); redrawAxes(); if(strToDraw) draw_text(strToDraw); if(OperationType==SELECTFRAG) draw_rectangle_selection(); glGetIntegerv(GL_VIEWPORT, viewport); glGetDoublev(GL_MODELVIEW_MATRIX, mvmatrix); glGetDoublev(GL_PROJECTION_MATRIX, projmatrix); glEnable(GL_DEPTH_TEST); glDepthMask(GL_TRUE); glDepthRange(0.0f,1.0f); if (gdk_gl_drawable_is_double_buffered (gldrawable)) gdk_gl_drawable_swap_buffers (gldrawable); else glFlush (); gdk_gl_drawable_gl_end (gldrawable); while( gtk_events_pending() ) gtk_main_iteration(); return TRUE; } /********************************************************************************/ void redrawGeomGL2PS() { GtkWidget* widget = GeomDrawingArea; GLdouble m[4][4]; if(Zoom>=180) Zoom = 160; if(!GTK_IS_WIDGET(widget)) return; if(!GTK_WIDGET_REALIZED(widget)) return; glMatrixMode(GL_PROJECTION); glLoadIdentity(); addFog(); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); set_background_color(); mYPerspective(45,(GLdouble)widget->allocation.width/(GLdouble)widget->allocation.height,1,100); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if(optcol==-1) drawChecker(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(PersMode) mYPerspective(Zoom,(GLdouble)widget->allocation.width/(GLdouble)widget->allocation.height,zNear,zFar); else { gdouble fw = (GLdouble)widget->allocation.width/(GLdouble)widget->allocation.height; gdouble fh = 1.0; glOrtho(-fw,fw,-fh,fh,-1,1); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if(PersMode) glTranslatef(Trans[0],Trans[1],Trans[2]); else { glTranslatef(Trans[0]/10,Trans[1]/10,0); glScalef(1/Zoom*2,1/Zoom*2,1/Zoom*2); } SetLight(); build_rotmatrix(m,Quat); glMultMatrixd(&m[0][0]); gl_build_geometry(); gl_build_selection(); gl_build_labels(); gl_build_dipole(); if(testShowAxesGeom()) redrawAxes(); glFlush (); } /********************************************************************************/ static gint configure_event( GtkWidget *widget, GdkEventConfigure *event ) { drawGeom(); return TRUE; } /********************************************************************************/ static gint expose_event( GtkWidget *widget, GdkEventExpose *event ) { if(event->count >0) return FALSE; drawGeom(); return FALSE; } /*****************************************************************************/ void SetCosSin() { int i; for ( i=0; i < 91; i++ ) { TSIN[i] = sin((PI*i)/180.0); TCOS[i] = cos((PI*i)/180.0); } } /*****************************************************************************/ void RenderStick() { TypeGeom = GABEDIT_TYPEGEOM_STICK; RebuildGeom = TRUE; drawGeom(); } /*****************************************************************************/ void RenderBallStick() { TypeGeom = GABEDIT_TYPEGEOM_BALLSTICK; RebuildGeom = TRUE; drawGeom(); } /*****************************************************************************/ void RenderSpaceFill() { TypeGeom = GABEDIT_TYPEGEOM_SPACE; RebuildGeom = TRUE; drawGeom(); } /*****************************************************************************/ void ActivateButtonOperation (GtkWidget *widget, guint data) { SetOperation (widget,data); } /*****************************************************************************/ void SetOperation (GtkWidget *widget, guint data) { gchar* temp = NULL; if(data == CENTER) { Trans[0] = 0; Trans[1] = 0; drawGeom(); return; } OperationType = data ; if( OperationType != ADDFRAGMENT) hide_fragments_selector(); switch(data) { case ROTATION : temp = g_strdup(_(" Press the Left mouse button and move your mouse for a \"Rotate molecule\". "));break; case ROTATIONZ : temp = g_strdup(_(" Press the Left mouse button and move your mouse for a \"Rotate molecule about z axis\". "));break; case TRANSMOVIE : temp = g_strdup(_(" Press the Left mouse button and move your mouse for a \"Translation\". "));break; case SCALEGEOM : temp = g_strdup(_(" Press the Left mouse button and move your mouse for a \"Zoom\". "));break; case SCALESTICK : temp = g_strdup(_(" Press the Left mouse button and move your mouse for \"Scale Stick\". "));break; case SCALEBALL : temp = g_strdup(_(" Press the Left mouse button and move your mouse for \"Scale Ball\". "));break; case SCALEDIPOLE: temp = g_strdup(_(" Press the Left mouse button and move your mouse for \"Scale Dipole\". "));break; case SELECTOBJECTS : temp = g_strdup(_("Pick an atom to select a residue, G key + pick an atom to select a group, Or F key + move your mouse to select a fragment. Use shift key for more selections."));break; case SELECTFRAG : temp = g_strdup(_(" Press the Left mouse button and move your mouse for \"select a fragment\".Use shift key for more selections. "));break; case SELECTRESIDUE : temp = g_strdup(_(" Press the Left mouse button for pick an atom, all atoms for residue of this atom are selected(or unselected)."));break; case DELETEFRAG : temp = g_strdup(_(" Press the Left mouse button(for pick an atom or all selected atoms) and release for \"Delete selected atom(s)\". "));break; case ROTLOCFRAG : temp = g_strdup(_(" Press the Left mouse button and move your mouse for \"Rotatation of selected atom(s)[Local Rotation]\". "));break; case ROTZLOCFRAG : temp = g_strdup(_(" Press the Left mouse button and move your mouse for \"Rotation, about z axis, of selected atom(s)[Local Rotation]\". "));break; case MOVEFRAG : temp = g_strdup(_(" Press the Left mouse button(for pick an atom or all selected atoms) and move your mouse for \"Move selected atom(s)\". "));break; case EDITOBJECTS : temp = g_strdup(_(" Press and release the Left mouse button for \"Insert/Change atom(s)/bond\".\"Pick an atom for replace it.\""));break; case ADDATOMSBOND : temp = g_strdup(_(" Press and release the Left mouse button for \"Insert atom(s)/bond\".\"Pick an atom for replace it.\""));break; case CHANGEBOND : temp = g_strdup(_(" Press the Left mouse button(for pick a bond) and release for \"Change selected bond\". "));break; case CUTBOND : temp = g_strdup(_(" Press the Left mouse button(for pick a bond) and release for \"Delete selected bond\". "));break; case MEASURE : temp = g_strdup(_(" Press and release the Left mouse button for \"Select your atoms\". ")); HideShowMeasure(FALSE); change_of_center(NULL,NULL); drawGeom(); break; case ADDFRAGMENT : temp = g_strdup(_(" Press and release the Left mouse button for \"Insert a Fragment\". "));break; } if(temp) { gtk_statusbar_pop(GTK_STATUSBAR(StatusOperation),idStatusOperation); gtk_statusbar_push(GTK_STATUSBAR(StatusOperation),idStatusOperation,temp); g_free(temp); } drawGeom(); } /*****************************************************************************/ void setPersonalFragment(Fragment F) { gint i; Frag.NAtoms = F.NAtoms; Frag.Atoms = g_malloc(Frag.NAtoms*sizeof(Atom)); for(i=0;istrlen(slash)) { Frag = GetFragment(slash+1); if(Frag.NAtoms>1 && strstr(fragName,"Fullerenes")) { AddHToAtomPDB(&Frag,"C"); } if(Frag.NAtoms<1) { gint OC1 = -1; gint C = -1; gint N = -1; gint i ; Frag = GetFragmentPPD(slash+1); for(i=0;i1) { if(C != -1 && N == -1) AddHToAtomPDB(&Frag,"C"); else if(C == -1 && N != -1) AddHToAtomPDB(&Frag,"N"); else if(strlen(Frag.Atoms[0].Residue)<4) AddHToAtomPDB(&Frag,"C"); else if(strlen(Frag.Atoms[0].Residue)==4) { if( toupper(Frag.Atoms[0].Residue[0])=='C' || toupper(Frag.Atoms[0].Residue[0])=='O' ) AddHToAtomPDB(&Frag,"N"); else AddHToAtomPDB(&Frag,"C"); } } } if(Frag.NAtoms<1) addPersonalFragment(fragName, 0, NULL); } else Frag = GetFragment(fragName); drawingArea = g_object_get_data(G_OBJECT(button), "DrawingArea"); if(drawingArea) add_frag_to_preview_geom(drawingArea, &Frag); } /*****************************************************************************/ void addAFragment(gchar* fragName) { FreeFragment(&Frag); if(fragName) Frag = GetFragment(fragName); else return; SetOperation (NULL,ADDFRAGMENT); } /*****************************************************************************/ void initLabelOptions (guint data) { LabelOption = data ; } /*****************************************************************************/ void SetLabelOptions (GtkWidget *widget, guint data) { if(LabelOption != data) { LabelOption = data ; drawGeom(); } } /*****************************************************************************/ void SetLabelDistances(GtkWidget *win,gboolean YesNo) { DrawDistance = !DrawDistance; drawGeom(); } /*****************************************************************************/ void SetLabelDipole(GtkWidget *win,gboolean YesNo) { DrawDipole = !DrawDipole; drawGeom(); } /*****************************************************************************/ void SetLabelsOrtho(GtkWidget *win,gboolean YesNo) { ortho = !ortho; drawGeom(); } /*****************************************************************************/ void RenderShad(GtkWidget *win,gboolean YesNo) { ShadMode = !ShadMode; drawGeom(); } /*****************************************************************************/ void RenderPers(GtkWidget *win,gboolean YesNo) { PersMode = !PersMode; drawGeom(); } /*****************************************************************************/ void RenderLight(GtkWidget *win,gboolean YesNo) { LightMode = !LightMode; drawGeom(); } /*****************************************************************************/ void RenderOrtep(GtkWidget *win,gboolean YesNo) { OrtepMode = !OrtepMode; drawGeom(); } /*****************************************************************************/ void RenderCartoon(GtkWidget *win,gboolean YesNo) { CartoonMode = !CartoonMode; drawGeom(); } /*****************************************************************************/ void RenderHBonds(GtkWidget *win,gboolean YesNo) { ShowHBonds = !ShowHBonds; if(ShowHBonds) set_Hconnections(); RebuildGeom=TRUE; drawGeom(); } /*****************************************************************************/ void RenderHAtoms(GtkWidget *win,gboolean YesNo) { gint i; for (i=0;i<(gint)Natoms;i++) { if(!strcmp(geometry0[i].Prop.symbol,"H")) { geometry[i].show = YesNo; geometry0[i].show = YesNo; } } RebuildGeom=TRUE; drawGeom(); ShowHydrogenAtoms = YesNo; } /*****************************************************************************/ void RenderDipole(GtkWidget *win,gboolean YesNo) { ShowDipole = !ShowDipole; drawGeom(); } /*****************************************************************************/ void RenderAxes(GtkWidget *win,gboolean YesNo) { if(testShowAxesGeom()) hideAxesGeom(); else showAxesGeom(); drawGeom(); } /*****************************************************************************/ void RenderBox(GtkWidget *win,gboolean YesNo) { if(testShowBoxGeom()) showBox = FALSE; else showBox = TRUE; RebuildGeom = TRUE; drawGeom(); } /*****************************************************************************/ void set_dipole_from_charges() { gint i; gint j; create_GeomXYZ_from_draw_grometry(); NumSelectedAtom = -1; unselect_all_atoms(); Dipole.def = TRUE; for(i=0;i<3;i++) Dipole.value[i] = 0.0; for(i=0;i<3;i++) Dipole.origin[i] = 0.0; for(j=0;j<(gint)Natoms;j++) { Dipole.value[0] += geometry0[j].X*geometry0[j].Charge; Dipole.value[1] += geometry0[j].Y*geometry0[j].Charge; Dipole.value[2] += geometry0[j].Z*geometry0[j].Charge; } drawGeom(); } /*****************************************************************************/ gdouble get_sum_charges() { gdouble c = 0; gint j; for(j=0;j<(gint)Natoms;j++) c += geometry0[j].Charge; return c; } /*****************************************************************************/ void compute_total_charge() { gdouble c = 0; gdouble cNeg = 0; gdouble cPos = 0; gint j; GtkWidget* m; gchar tmp[BSIZE]; for(j=0;j<(gint)Natoms;j++) { if(geometry0[j].Charge>0) cPos += geometry0[j].Charge; if(geometry0[j].Charge<0) cNeg += geometry0[j].Charge; c += geometry0[j].Charge; } if(cNeg !=0 && cPos != 0) sprintf(tmp, _( "Total Charge = %f\n" "Sum of positive charges = %f\n" "Sum of negative charges = %f\n" "positive/negative = %f\n" "negative/positive = %f\n" ) , c, cPos, cNeg, cPos/cNeg, cNeg/cPos); else sprintf(tmp, _( "Total Charge = %f\n" "Sum of positive charges = %f\n" "Sum of negative charges = %f\n" ) , c, cPos, cNeg); m = Message(tmp,_("Info"),TRUE); gtk_window_set_modal (GTK_WINDOW (m), TRUE); } /*****************************************************************************/ void compute_charge_of_selected_atoms() { gdouble c = 0; gdouble cNeg = 0; gdouble cPos = 0; gint j; GtkWidget* m; gchar tmp[BSIZE]; for(j=0;j<(gint)Natoms;j++) { if(!if_selected(j)) continue; if(geometry0[j].Charge>0) cPos += geometry0[j].Charge; if(geometry0[j].Charge<0) cNeg += geometry0[j].Charge; c += geometry0[j].Charge; } if(cNeg !=0 && cPos != 0) sprintf(tmp, _( "Total Charge = %f\n" "Sum of positive charges = %f\n" "Sum of negative charges = %f\n" "positive/negative = %f\n" "negative/positive = %f\n" ) , c, cPos, cNeg, cPos/cNeg, cNeg/cPos); else sprintf(tmp, _( "Total Charge = %f\n" "Sum of positive charges = %f\n" "Sum of negative charges = %f\n" ) , c, cPos, cNeg); m = Message(tmp,_("Info"),TRUE); gtk_window_set_modal (GTK_WINDOW (m), TRUE); } /********************************************************************************/ static GtkWidget* create_text_win(gchar* title) { GtkWidget *Win; GtkWidget *frame; GtkWidget *vboxall; GtkWidget *vboxwin; GtkWidget *text; /* Principal Window */ Win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(Win),title); gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(Fenetre)); gtk_window_set_modal (GTK_WINDOW (Win), TRUE); gtk_widget_realize(Win); g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)gtk_widget_destroy,NULL); gtk_container_set_border_width (GTK_CONTAINER (Win), 5); vboxall = create_vbox(Win); vboxwin = vboxall; frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 5); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_container_add(GTK_CONTAINER(vboxall),frame); gtk_widget_show (frame); text = create_text(Win,frame,TRUE); set_font (text,FontsStyleResult.fontname); set_base_style(text,FontsStyleResult.BaseColor.red ,FontsStyleResult.BaseColor.green ,FontsStyleResult.BaseColor.blue); set_text_style(text,FontsStyleResult.TextColor.red ,FontsStyleResult.TextColor.green ,FontsStyleResult.TextColor.blue); g_object_set_data(G_OBJECT (Win), "Text", text); return Win; } /*****************************************************************************/ void compute_charge_by_residue() { gint i; gint j; gint k; gdouble* charges = NULL; gint nr = 0; GtkWidget *win; GtkWidget *text; gchar tmp[BSIZE]; gint* nums = NULL; if(Natoms<1) return; for(j=0;j<(gint)Natoms;j++) { if( nrgeometry0[nums[j]].ResidueNumber) k = j; if(i!=k) { gdouble x; gint ix; x = charges[k]; charges[k] = charges[i]; charges[i] = x; ix = nums[k]; nums[k] = nums[i]; nums[i] = ix; } } win = create_text_win(_("Charge by residues")); gtk_widget_set_size_request(GTK_WIDGET(win),(gint)(ScreenHeight*0.5),(gint)(ScreenHeight*0.5)); text = g_object_get_data(G_OBJECT (win), "Text"); if(text) for(k=0;k0) dihsgn = -1.0e0; else dihsgn = 1.0e0; } angle *=dihsgn; return g_strdup_printf("%f",angle); } /*****************************************************************************/ void geometry_in_au() { guint i; for(i=0;i0 && !test(Geom[i].R)) { geometry[i].Variable = TRUE; return; } if(i>1 && !test(Geom[i].Angle)) { geometry[i].Variable = TRUE; return; } if(i>2 && !test(Geom[i].Dihedral)) { geometry[i].Variable = TRUE; return; } geometry[i].Variable = FALSE; } } /*****************************************************************************/ void set_layer_of_selected_atoms(GabEditLayerType l) { gint i; for (i=0;i<(gint)Natoms;i++) { if(if_selected(i)) { geometry[i].Layer = l; geometry0[i].Layer = l; } } create_GeomXYZ_from_draw_grometry(); RebuildGeom = TRUE; drawGeom(); } /*****************************************************************************/ void define_geometry_from_xyz() { guint i; for(i=0;i= 0.999999 ) { /* Colinear */ temp = dist*rbc*cosa; geometry[i].X = geometry[na].X + temp*xb; geometry[i].Y = geometry[na].Y + temp*yb; geometry[i].Z = geometry[na].Z + temp*zb; geometry[i].N = i+1; geometry[i].typeConnections = NULL; } else { xa = geometry[nc].X - geometry[na].X; ya = geometry[nc].Y - geometry[na].Y; za = geometry[nc].Z - geometry[na].Z; sind = -sin(dihed); cosd = cos(dihed); xd = dist*cosa; yd = dist*sina*cosd; zd = dist*sina*sind; xyb = sqrt(xb*xb + yb*yb); if( xyb < 0.1 ) { /* Rotate about y-axis! */ temp = za; za = -xa; xa = temp; temp = zb; zb = -xb; xb = temp; xyb = sqrt(xb*xb + yb*yb); flag = TRUE; } else flag = FALSE; costh = xb/xyb; sinth = yb/xyb; xpa = costh*xa + sinth*ya; ypa = costh*ya - sinth*xa; sinph = zb*rbc; cosph = sqrt(1.0 - sinph*sinph); zqa = cosph*za - sinph*xpa; yza = sqrt(ypa*ypa + zqa*zqa); if( yza > 1.0E-10 ) { coskh = ypa/yza; sinkh = zqa/yza; ypd = coskh*yd - sinkh*zd; zpd = coskh*zd + sinkh*yd; } else { /* coskh = 1.0; */ /* sinkh = 0.0; */ ypd = yd; zpd = zd; } xpd = cosph*xd - sinph*zpd; zqd = cosph*zpd + sinph*xd; xqd = costh*xpd - sinth*ypd; yqd = costh*ypd + sinth*xpd; if( flag ) { /* Rotate about y-axis! */ geometry[i].X = geometry[na].X - zqd; geometry[i].Y = geometry[na].Y + yqd; geometry[i].Z = geometry[na].Z + xqd; geometry[i].N = i+1; geometry[i].typeConnections = NULL; } else { geometry[i].X = geometry[na].X + xqd; geometry[i].Y = geometry[na].Y + yqd; geometry[i].Z = geometry[na].Z + zqd; geometry[i].N = i+1; geometry[i].typeConnections = NULL; } } } for(i=0;i<(gint)Natoms;i++) { geometry[i].Prop = prop_atom_get(Geom[i].Symb); geometry[i].mmType = g_strdup(Geom[i].mmType); geometry[i].pdbType = g_strdup(Geom[i].pdbType); geometry[i].Residue = g_strdup(Geom[i].Residue); geometry[i].ResidueNumber = Geom[i].ResidueNumber; geometry[i].Charge = atof(Geom[i].Charge); geometry[i].show = TRUE; set_layer(Geom[i].Layer, &geometry[i].Layer); set_constant_variable(i, FALSE); } return( TRUE ); } /********************************************************************************/ void set_optimal_geom_view() { gint i,j; gdouble min = 0; gdouble max = 0; gboolean perspective = FALSE; gdouble zn, zf, zo; gdouble aspect; gdouble C[3]; gdouble X0[3]; if(!geometry || Natoms<1 ) return; for(i=0;i<3;i++) X0[i] = 0.0; min = geometry[0].X; max = geometry[0].Y; for(i=0;iC[j]) min = C[j]; if(max1e-10) zo = 20/d; else zo = 1.0; } zo = 1/zo*45; set_camera_values(zn,zf,zo,perspective); Trans[0]=0; Trans[1]=0; for(i=0;i0 && NumProcheAtom<0) return -1; if(Natoms>0) { geometry0 = g_realloc(geometry0,(Natoms+1)*sizeof(GeomDef)); geometry = g_realloc(geometry,(Natoms+1)*sizeof(GeomDef)); } else { geometry0 = g_malloc(sizeof(GeomDef)); geometry = g_malloc(sizeof(GeomDef)); } Ddef = FALSE; x = bevent->x; y = bevent->y; glGetWorldCoordinates(x,y,w); X = w[0]; Y = w[1]; Z = w[2]; if(Natoms==0) geometry[Natoms].Prop = prop_atom_get(AtomToInsert); /* if(Natoms>0 && NumProcheAtom>-1) Z = geometry[NumProcheAtom].Z; else Z = 0.0; */ //if(Natoms==0) Z = 0; geometry[Natoms].X=X; geometry[Natoms].Y=Y; geometry[Natoms].Z=Z; geometry[Natoms].Prop = prop_atom_get(AtomToInsert); geometry[Natoms].mmType = g_strdup(AtomToInsert); geometry[Natoms].pdbType = g_strdup(AtomToInsert); geometry[Natoms].Layer = HIGH_LAYER; geometry[Natoms].show = TRUE; geometry[Natoms].N = Natoms+1; geometry[Natoms].typeConnections = NULL; if(Natoms==0) { geometry[Natoms].Residue = g_strdup(AtomToInsert); geometry[Natoms].ResidueNumber = 0; } else { gint k; gint proche = 0; gdouble d; gdouble d1; d = get_real_distance2(geometry,0,Natoms); for(k=1;k<(gint)Natoms;k++) { d1 = get_real_distance2(geometry,k,Natoms); if(d10 && NumProcheAtom<0) { FreeFragment(&Frag); return 0; } if(Frag.NAtoms<=0) { FreeFragment(&Frag); return 0; } if(Natoms>0) { geometry0 = g_realloc(geometry0,(Natoms+Frag.NAtoms)*sizeof(GeomDef)); geometry = g_realloc(geometry,(Natoms+Frag.NAtoms)*sizeof(GeomDef)); } else { geometry0 = g_malloc(Frag.NAtoms*sizeof(GeomDef)); geometry = g_malloc(Frag.NAtoms*sizeof(GeomDef)); } Ddef = FALSE; x = bevent->x; y = bevent->y; if(Natoms>0) glGetWorldCoordinates(x,y,w); X = w[0]; Y = w[1]; Z = w[2]; { gint i,j; gdouble B[3]; { B[0] = X; B[1] = Y; B[2] = Z; j = -1; for(i=0;i= Natoms || toB>= Natoms || Frag.atomToDelete>= Frag.NAtoms || Frag.atomToBondTo>= Frag.NAtoms) return 0; if(Natoms>0) { geometry0 = g_realloc(geometry0,(Natoms+Frag.NAtoms)*sizeof(GeomDef)); geometry = g_realloc(geometry,(Natoms+Frag.NAtoms)*sizeof(GeomDef)); } else { geometry0 = g_malloc(Frag.NAtoms*sizeof(GeomDef)); geometry = g_malloc(Frag.NAtoms*sizeof(GeomDef)); } Ddef = FALSE; atomlist = g_malloc((Frag.NAtoms)*sizeof(gint)); B[0] = geometry[toB].X - Frag.Atoms[Frag.atomToDelete].Coord[0]; B[1] = geometry[toB].Y - Frag.Atoms[Frag.atomToDelete].Coord[1]; B[2] = geometry[toB].Z - Frag.Atoms[Frag.atomToDelete].Coord[2]; j = -1; toBond = -1; toAngle = -1; toDel = -1; for(i=0;i-1 && toAngle>-1) { SetTorsion(Natoms,geometry, toA,toB, toBond, toAngle, fragAngle,atomlist, Frag.NAtoms); } if(!atomlist) g_free(atomlist); iBegin = Natoms-Frag.NAtoms; for(i=0;i0 && NumProcheAtom<0) { FreeFragment(&Frag); return 0; } if(Frag.NAtoms<=0) { FreeFragment(&Frag); return 0; } if(atomToDelete>=0) { return insert_fragment_connected_to_an_atom( get_indice(atomToDelete), get_indice(atomToBondTo),get_indice(angleTo)); } else if(Frag.NAtoms>0 && Frag.atomToDelete<0) return insert_fragment_without_delete_an_atom(widget,event); else if(Natoms==0) return insert_fragment_without_delete_an_atom(widget,event); return 0; } /*****************************************************************************/ void delete_one_atom(gint NumDel) { gint i; gint j; gint* oldN = NULL; if(Natoms<1) return; copy_connections(geometry0, geometry, Natoms); i = NumDel; if(geometry0[i].typeConnections) g_free(geometry0[i].typeConnections); if(geometry[i].typeConnections) g_free(geometry[i].typeConnections); for (i=NumDel;i<(gint)Natoms-1;i++) { geometry0[i]=geometry0[i+1]; geometry[i]=geometry[i+1]; } oldN = g_malloc(Natoms*sizeof(gint)); for (i=0;i<(gint)Natoms;i++) oldN[i] = geometry0[i].N-1; Natoms--; for(j=0;j<(gint)NFatoms;j++) { for (i=0;i<(gint)Natoms;i++) if(NumFatoms[j] ==(gint) geometry[i].N) { NumFatoms[j] = i+1; break;} if(i==Natoms) NumFatoms[j] =-1; } for(j=0;j<(gint)NFatoms;j++) if( NumFatoms[j]<0) { for (i=j;i<(gint)NFatoms-1;i++) NumFatoms[i]= NumFatoms[i+1]; NFatoms--; j--; } for(j=0;j<2;j++) for (i=0;i<(gint)Natoms;i++) if(NumBatoms[j]==(gint) geometry[i].N) {NumBatoms[j] = i+1; break;} for (i=0;i<(gint)Natoms;i++) { geometry0[i].N = i+1; geometry[i].N = i+1; } /* in geometry0 : old connections , in geometry new connection */ for (i=0;i<(gint)Natoms;i++) { if(geometry[i].typeConnections) { for(j=0;j<(gint)Natoms;j++) { geometry[i].typeConnections[j] = geometry0[i].typeConnections[oldN[j]]; } } } if(oldN) g_free(oldN); copy_connections(geometry0, geometry, Natoms); if(Natoms>0) { geometry0 = g_realloc(geometry0,Natoms*sizeof(GeomDef)); geometry = g_realloc(geometry,Natoms*sizeof(GeomDef)); } else { if(geometry0) g_free(geometry0); geometry0 = NULL; if(geometry) g_free(geometry); geometry = NULL; Natoms = 0; } Ddef = FALSE; reset_charges_multiplicities(); RebuildGeom=TRUE; } /********************************************************************************/ void deleteHydrogensConnectedTo(gint n, gint nH) { gint i; gint k = 0; gint ni; if(Natoms<1) return; add_geometry_to_fifo(); for (i=0;i<(gint)Natoms;i++) { ni = geometry[i].N-1; if(geometry[n].typeConnections[ni] && !strcmp(geometry[i].Prop.symbol,"H")) { delete_one_atom(i); k++; if(k>=nH) break; } } } /*****************************************************************************/ gint index_selected(gint Num) { gint j; if(NFatoms<1 || !NumFatoms ) return -1; for(j=0;j<(gint)NFatoms;j++) if(NumFatoms[j] == (gint)geometry[Num].N) return j; return -1; } /*****************************************************************************/ gboolean if_selected(gint Num) { gint j; if(NFatoms<1 || !NumFatoms ) return FALSE; for(j=0;j<(gint)NFatoms;j++) if(NumFatoms[j] == (gint)geometry[Num].N) return TRUE; return FALSE; } /*****************************************************************************/ void delete_all_selected_atoms() { gint i; gint j; GeomDef tmp; gint* oldN = NULL; if(Natoms<1) return; copy_connections(geometry0, geometry, Natoms); for (i=0;i<(gint)Natoms-1;i++) { if(!if_selected(i)) continue; for(j=i+1;j<(gint)Natoms;j++) if(!if_selected(j)) { tmp = geometry0[i]; geometry0[i] = geometry0[j]; geometry0[j] = tmp ; tmp = geometry[i]; geometry[i] = geometry[j]; geometry[j] = tmp ; break; } } oldN = g_malloc(Natoms*sizeof(gint)); for (i=0;i<(gint)Natoms;i++) oldN[i] = geometry0[i].N-1; if(NFatoms>Natoms) { printf("internal error\n"); Natoms = 0; } else { for (i=(gint)Natoms-NFatoms;i<(gint)Natoms;i++) { if(geometry0[i].typeConnections) g_free(geometry0[i].typeConnections); if(geometry[i].typeConnections) g_free(geometry[i].typeConnections); } Natoms-=NFatoms; } for(j=0;j<(gint)NBatoms;j++) for (i=0;i<(gint)Natoms;i++) if(NumBatoms[j] ==(gint) geometry[i].N) NumBatoms[j] = i+1; for (i=0;i<(gint)Natoms;i++) { geometry0[i].N = i+1; geometry[i].N = i+1; } /* in geometry0 : old connections , in geometry new connection */ for (i=0;i<(gint)Natoms;i++) { if(geometry[i].typeConnections) { for(j=0;j<(gint)Natoms;j++) { geometry[i].typeConnections[j] = geometry0[i].typeConnections[oldN[j]]; } } } if(oldN) g_free(oldN); copy_connections(geometry0, geometry, Natoms); if(Natoms>0) { geometry0 = g_realloc(geometry0,Natoms*sizeof(GeomDef)); geometry = g_realloc(geometry,Natoms*sizeof(GeomDef)); } else { if(geometry0) g_free(geometry0); geometry0 = NULL; if(geometry) g_free(geometry); geometry = NULL; Natoms = 0; } NFatoms = 0; if(NumFatoms) g_free(NumFatoms); NumFatoms = NULL; Ddef = FALSE; reset_charges_multiplicities(); } /********************************************************************************/ static void rotate_frag_for_set_its_principal_axes_to_xyz(gboolean sel) { gdouble **m0 = NULL; gdouble** minv; gint i,j; guint n; gdouble A[3]; gdouble B[3]; guint k; gdouble* X; gdouble* Y; gdouble* Z; gdouble axis1[3] = {1,0,0}; gdouble axis2[3] = {0,1,0}; gdouble axis3[3] = {0,0,1}; gdouble C[3] = {0,0,0}; gint nFrag = 0; if(Natoms<1) return; nFrag = compute_fragment_principal_axes(axis1,axis2,axis3,C,sel); if(nFrag <2 ) return; printf("nFrag = %d\n",nFrag); m0 = g_malloc(3*sizeof(gdouble*)); X = g_malloc(Natoms*sizeof(gdouble)); Y = g_malloc(Natoms*sizeof(gdouble)); Z = g_malloc(Natoms*sizeof(gdouble)); for(i=0;i<3;i++) m0[i] = g_malloc(3*sizeof(gdouble)); m0[0][0] = axis1[0]; m0[0][1] = axis1[1]; m0[0][2] = axis1[2]; m0[1][0] = axis2[0]; m0[1][1] = axis2[1]; m0[1][2] = axis2[2]; m0[2][0] = axis3[0]; m0[2][1] = axis3[1]; m0[2][2] = axis3[2]; minv = Inverse(m0,3,1e-7); for(n = 0;n0) oldN = g_malloc(Natoms*sizeof(gint)); for (i=0;i<(gint)Natoms;i++) oldN[i] = geometry0[i].N-1; Natoms = nA; for(j=0;j<(gint)NFatoms;j++) { for (i=0;i<(gint)Natoms;i++) if(NumFatoms[j] ==(gint) geometry[i].N) { NumFatoms[j] = i+1; break;} if(i==(gint)Natoms) NumFatoms[j] =-1; } for(j=0;j<(gint)NFatoms;j++) if( NumFatoms[j]<0) { for (i=j;i<(gint)NFatoms-1;i++) NumFatoms[i]= NumFatoms[i+1]; NFatoms--; j--; } for (i=0;i<(gint)Natoms;i++) { geometry0[i].N = i+1; geometry[i].N = i+1; } /* in geometry0 : old connections , in geometry new connection */ for (i=0;i<(gint)Natoms;i++) { if(geometry[i].typeConnections) { for(j=0;j<(gint)Natoms;j++) { geometry[i].typeConnections[j] = geometry0[i].typeConnections[oldN[j]]; } } } if(oldN) g_free(oldN); copy_connections(geometry0, geometry, Natoms); if(Natoms>0) { geometry0 = g_realloc(geometry0,Natoms*sizeof(GeomDef)); geometry = g_realloc(geometry,Natoms*sizeof(GeomDef)); } else { if(geometry0) g_free(geometry0); geometry0 = NULL; if(geometry) g_free(geometry); geometry = NULL; Natoms = 0; } Ddef = FALSE; /* reset_all_connections();*/ reset_charges_multiplicities(); create_GeomXYZ_from_draw_grometry(); RebuildGeom=TRUE; drawGeom(); activate_edit_objects(); } /********************************************************************************/ void deleteHydrogenAtoms() { gchar *t =N_("Do you want to really remove all hydrogen atoms?"); if(Natoms>0) Continue_YesNo(delete_hydrogen_atoms, NULL,t); else Message(_("No hydrogen atoms to remove\n"),_("Warning"),TRUE); } /*****************************************************************************/ void delete_selected_atoms() { gint i; gint j; gboolean DelAll = FALSE; if(NumSelectedAtom<0) return; add_geometry_to_fifo(); for(i=0;i<(gint)Natoms;i++) if((gint)i==NumSelectedAtom) { for(j = 0;j<(gint)NFatoms;j++) if(NumFatoms[j] == (gint)geometry[i].N) DelAll = TRUE; break; } if(DelAll==FALSE) { delete_one_atom(NumSelectedAtom); return; } delete_all_selected_atoms(); } /*****************************************************************************/ void delete_selected_bond() { if(NBatoms!=2) return; if(NBatoms>Natoms) { printf("internal error\n"); Natoms = 0; } if(NumBatoms[0]>0 && NumBatoms[1]>0) { gint na = NumBatoms[0]-1; gint nb = NumBatoms[1]-1; gint ia = -1; gint ib = -1; gint i; for(i=0;i<(gint)Natoms;i++) if(geometry[i].N-1==na) { ia = i; break; } for(i=0;i<(gint)Natoms;i++) if(geometry[i].N-1==nb) { ib = i; break; } if(ia>=0 && ib>=0) { geometry[ia].typeConnections[nb] = 0; geometry[ib].typeConnections[na] = 0; } if(ia>=0 && ib>=0 && AdjustHydrogenAtoms) adjust_hydrogens_connected_to_atoms(ia,ib); } copy_connections(geometry0, geometry, Natoms); NBatoms = 0; NumBatoms[0] = NumBatoms[1] = -1; } /*****************************************************************************/ void change_selected_bond() { if(NBatoms!=2) return; if(NBatoms>Natoms) { printf("internal error\n"); Natoms = 0; } if(NumBatoms[0]>0 && NumBatoms[1]>0) { gint na = NumBatoms[0]-1; gint nb = NumBatoms[1]-1; gint newC = 1; gint i; gint ni=-1; gint nj=-1; gint nBondsA = 0; gint nBondsB = 0; for(i=0;i<(gint)Natoms;i++) if(geometry[i].N-1==na) { ni = i; break; } for(i=0;i<(gint)Natoms;i++) if(geometry[i].N-1==nb) { nj = i; break; } if(ni>=0) newC = geometry[ni].typeConnections[nb]+1; if(newC>3) newC = 1; if(newC==1) { if(ni>=0 && nj>=0) geometry[ni].typeConnections[nb] = geometry[nj].typeConnections[na] = newC; } else { if(ni>=0 && nj>=0) for(i=0;i<(gint)Natoms;i++) { gint nk = geometry[i].N-1; if(i==ni) continue; if(i==nj) continue; if(geometry[ni].typeConnections[nk]==0) continue; if(!strcmp(geometry[i].Prop.symbol, "H") && AdjustHydrogenAtoms)continue; nBondsA+=geometry[ni].typeConnections[nk]; } if(ni>=0 && nj>=0) for(i=0;i<(gint)Natoms;i++) { gint nk = geometry[i].N-1; if(i==ni) continue; if(i==nj) continue; if(geometry[nj].typeConnections[nk]==0) continue; if(!strcmp(geometry[i].Prop.symbol, "H") && AdjustHydrogenAtoms )continue; nBondsB+=geometry[nj].typeConnections[nk]; } if( !( ni>=0 && nj>=0 && ((gint)geometry[ni].Prop.maximumBondValence-(nBondsA+newC))>=0 && ((gint)geometry[nj].Prop.maximumBondValence-(nBondsB+newC))>=0 ) ) newC = 1; if(ni>=0 && nj>=0) geometry[ni].typeConnections[nb] = geometry[nj].typeConnections[na] = newC; } if(ni>=0 && nj>=0 && AdjustHydrogenAtoms) adjust_hydrogens_connected_to_atoms(ni,nj); } copyCoordinates2to1(geometry0, geometry); copy_connections(geometry0, geometry, Natoms); NBatoms = 0; NumBatoms[0] = NumBatoms[1] = -1; } /*****************************************************************************/ void add_bond() { if(NBatoms==1) { NBatoms = 0; NumBatoms[0] = NumBatoms[1] = -1; } if(NBatoms!=2) return; if(NBatoms>Natoms) { printf("internal error\n"); Natoms = 0; } if(NumBatoms[0]>0 && NumBatoms[1]>0) { gint na = NumBatoms[0]-1; gint nb = NumBatoms[1]-1; gint newC = 1; gint i; gint ni=-1; gint nj=-1; gint nBondsA = 0; gint nBondsB = 0; { for(i=0;i<(gint)Natoms;i++) if(geometry[i].N-1==na) { ni = i; break; } if(ni>=0) for(i=0;i<(gint)Natoms;i++) if(geometry[i].N-1==nb) { nj = i; break; } if(ni>=0 && nj>=0) for(i=0;i<(gint)Natoms;i++) { gint nk = geometry[i].N-1; if(i==ni) continue; if(i==nj) continue; if(geometry[ni].typeConnections[nk]==0) continue; if(!strcmp(geometry[i].Prop.symbol, "H") && AdjustHydrogenAtoms )continue; nBondsA+=geometry[ni].typeConnections[nk]; } if(ni>=0 && nj>=0) for(i=0;i<(gint)Natoms;i++) { gint nk = geometry[i].N-1; if(i==ni) continue; if(i==nj) continue; if(geometry[nj].typeConnections[nk]==0) continue; if(!strcmp(geometry[i].Prop.symbol, "H"))continue; nBondsB+=geometry[nj].typeConnections[nk]; } if( !( ni>=0 && nj>=0 && ((gint)geometry[ni].Prop.maximumBondValence-(nBondsA+newC))>=0 && ((gint)geometry[nj].Prop.maximumBondValence-(nBondsB+newC))>=0 ) ) newC = 0; if(ni>=0 && nj>=0) geometry[ni].typeConnections[nb] = geometry[nj].typeConnections[na] = newC; } if(ni>=0 && nj>=0 && AdjustHydrogenAtoms) adjust_hydrogens_connected_to_atoms(ni,nj); } copyCoordinates2to1(geometry0, geometry); copy_connections(geometry0, geometry, Natoms); NBatoms = 0; NumBatoms[0] = NumBatoms[1] = -1; } /*****************************************************************************/ void rotation_atom_quat(gint i,gdouble m[4][4]) { gdouble A[3]; gdouble B[3]; guint j,k; A[0] = CSselectedAtom[0] ; A[1] = CSselectedAtom[1] ; A[2] = CSselectedAtom[2] ; for(j=0;j<3;j++) { B[j] = 0.0; for(k=0;k<3;k++) B[j] += m[k][j]*A[k]; } geometry0[i].X=B[0]; geometry0[i].Y=B[1]; geometry0[i].Z=B[2]; } /*****************************************************************************/ void rotation(double a,double b,double angle,double *ap,double *bp) { double cosangle = cos(angle/180*PI); double sinangle = sin(angle/180*PI); *ap = a*cosangle - b *sinangle; *bp = b*cosangle + a *sinangle; } /*****************************************************************************/ void define_geometry() { guint i; guint j; gdouble X0[3]; gint nC = 0; if(geometry != NULL) { for (i=0;i get_rayon(j)) return j; return i; } /*****************************************************************************/ static void draw_rectangle_selection() { gdouble x1, y1, w, h; V4d Ambiant = {1.0f,1.0f,1.0f,1.0f}; if(Natoms<1) return; if(xSelection<0) return; x1 = BeginX; y1 = BeginY; w = xSelection-BeginX; h = ySelection-BeginY; if(w<0) { x1 = xSelection; w = -w; } if(h<0) { y1 = ySelection; h = -h; } glDisable ( GL_LIGHTING ) ; glColor4dv(Ambiant); Projected_Rectangle_Draw(x1, y1, w, h); glEnable ( GL_LIGHTING ) ; } /*****************************************************************************/ GdkColor get_color_string(guint i) { GdkColor color; color.pixel = 0; if (ShadMode) { color.red =(gushort)(65535-geometry[i].Prop.color.red*geometry[i].Coefpers); color.green =(gushort)(65535-geometry[i].Prop.color.green*geometry[i].Coefpers); color.blue =(gushort)(65535-geometry[i].Prop.color.blue*geometry[i].Coefpers); } else { color.red =FontsStyleLabel.TextColor.red; color.green =FontsStyleLabel.TextColor.green; color.blue =FontsStyleLabel.TextColor.blue; } return color; } /*****************************************************************************/ void draw_label_dipole() { gdouble P[3]; gchar* t= NULL; gdouble d = 0.0; V3d Base1Pos = {Dipole.origin[0],Dipole.origin[1],Dipole.origin[2]}; V3d Base2Pos = {Dipole.origin[0]+Dipole.value[0],Dipole.origin[1]+Dipole.value[1],Dipole.origin[2]+Dipole.value[2]}; GLdouble scal = 2*factordipole; gint i; GLdouble radius = Dipole.radius; if(radius<0.1) radius = 0.1; for(i=0;i<3;i++) { d += Dipole.value[i]*Dipole.value[i]; P[i]=(Dipole.value[i]*scal+Base1Pos[i]+Base1Pos[i])/2; } t = g_strdup_printf("%0.3f D",sqrt(d)*AUTODEB); if(ortho) glPrintOrtho(P[0], P[1], P[2], t, TRUE, TRUE); else glPrintScale(P[0], P[1], P[2], 1.1*radius,t); g_free(t); } /*****************************************************************************/ void draw_distance(gint i,gint j) { gdouble P[3]; gchar* t= NULL; if(!geometry[i].show) return; if(!geometry[j].show) return; P[0]=(geometry[i].X+geometry[j].X)/2; P[1]=(geometry[i].Y+geometry[j].Y)/2; P[2]=(geometry[i].Z+geometry[j].Z)/2; Point A; Point B; A.C[0]=geometry[i].X; A.C[1]=geometry[i].Y; A.C[2]=geometry[i].Z; B.C[0]=geometry[j].X; B.C[1]=geometry[j].Y; B.C[2]=geometry[j].Z; t = get_distance_points(A,B,TRUE); if(ortho) glPrintOrtho(P[0], P[1], P[2], t, TRUE, TRUE); else glPrintScale(P[0], P[1], P[2], 1.1*get_rayon(i),t); g_free(t); } /*****************************************************************************/ static void draw_anneau(gdouble X, gdouble Y, gdouble Z, GLdouble radii, GdkColor* color) { int k; gdouble alpha = 0.5; V4d Specular = {1.0f,1.0f,1.0f,alpha}; V4d Diffuse = {0.0f,0.0f,0.0f,alpha}; V4d Ambiant = {0.0f,0.0f,0.0f,alpha}; V3d position = {X,Y,Z}; Specular[0] = color->red/(gdouble)65535; Specular[1] = color->green/(gdouble)65535; Specular[2] = color->blue/(gdouble)65535; for(k=0;k<3;k++) Diffuse[k] = Specular[k]*0.8; for(k=0;k<3;k++) Ambiant[k] = Specular[k]*0.5; for(k=0;k<3;k++) Specular[k] = 0.8; for(k=0;k<3;k++) Ambiant[k] = 0.0; glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); Sphere_Draw_Color(scaleAnneau*radii,position,Specular,Diffuse,Ambiant); glDisable(GL_BLEND); } /*****************************************************************************/ gboolean draw_lines_yes_no(guint i,guint j) { gdouble distance; gdouble rcut; gdouble x,y,z; x = geometry[i].X-geometry[j].X; y = geometry[i].Y-geometry[j].Y; z = geometry[i].Z-geometry[j].Z; distance = x*x+y*y+z*z; rcut = geometry[i].Prop.covalentRadii+geometry[j].Prop.covalentRadii; rcut = rcut* rcut; if(distancered/(gdouble)65535; Specular[1] = color->green/(gdouble)65535; Specular[2] = color->blue/(gdouble)65535; for(k=0;k<3;k++) Diffuse[k] = Specular[k]*0.8; for(k=0;k<3;k++) Ambiant[k] = Specular[k]*0.5; for(k=0;k<3;k++) Specular[k] = 0.8; for(k=0;k<3;k++) Ambiant[k] = 0.0; if(TypeGeom == GABEDIT_TYPEGEOM_SPACE) { OpenGLOptions openGLOptions = get_opengl_options(); Sphere_Draw_Color_Precision(radii,position,Specular,Diffuse,Ambiant, (GLint)openGLOptions.numberOfSubdivisionsSphere*2); } else Sphere_Draw_Color(radii,position,Specular,Diffuse,Ambiant); } /************************************************************************/ void getOptimalCiCj(gint i, gint j, gdouble* Ci, gdouble* Cj, gdouble* C0) { C0[0] = 0; C0[1] = 0; C0[2] = 0; Ci[0] = geometry[i].X; Ci[1] = geometry[i].Y; Ci[2] = geometry[i].Z; Cj[0] = geometry[j].X; Cj[1] = geometry[j].Y; Cj[2] = geometry[j].Z; /* serach a one none hydrogen atom connected to i or j atoms */ if(geometry[i].typeConnections) { gint l; gint nl; for(l=0, nl = geometry[l].N-1;l0 && strcmp(geometry[l].Prop.symbol,"H")) { C0[0] = geometry[l].X; C0[1] = geometry[l].Y; C0[2] = geometry[l].Z; /* printf("---%s\n",geometry[l].Prop.symbol);*/ return; } } if(geometry[j].typeConnections) { gint l; gint nl; for(l=0, nl = geometry[l].N-1;l0 && strcmp(geometry[l].Prop.symbol,"H")) { C0[0] = geometry[l].X; C0[1] = geometry[l].Y; C0[2] = geometry[l].Z; /* printf("--%s\n",geometry[l].Prop.symbol);*/ return; } } if(geometry[i].typeConnections) { gint l; gint nl; for(l=0, nl = geometry[l].N-1;l0) { C0[0] = geometry[l].X; C0[1] = geometry[l].Y; C0[2] = geometry[l].Z; /* printf("%s\n",geometry[l].Prop.symbol);*/ return; } } if(geometry[j].typeConnections) { gint l; gint nl; for(l=0, nl = geometry[l].N-1;l0) { C0[0] = geometry[l].X; C0[1] = geometry[l].Y; C0[2] = geometry[l].Z; /* printf("%s\n",geometry[l].Prop.symbol);*/ return; } } } /************************************************************************/ static void draw_hbond(int i,int j,GLdouble scal) { int k; GLdouble g; V4d Specular1 = {1.0f,1.0f,1.0f,1.0f}; V4d Diffuse1 = {0.0f,0.0f,0.0f,1.0f}; V4d Ambiant1 = {0.0f,0.0f,0.0f,1.0f}; V4d Specular2 = {1.0f,1.0f,1.0f,1.0f}; V4d Diffuse2 = {0.0f,0.0f,0.0f,1.0f}; V4d Ambiant2 = {0.0f,0.0f,0.0f,1.0f}; GLdouble aspect = scal; GLdouble p1; GLdouble p2; gdouble A[3]; gdouble B[3]; gdouble K[3]; static gint n = 10; gint kbreak; gdouble Ci[3] = {geometry[i].X, geometry[i].Y,geometry[i].Z}; gdouble Cj[3] = {geometry[j].X, geometry[j].Y,geometry[j].Z}; if(geometry[i].Prop.radiired/(gdouble)65535; Specular1[1] = color->green/(gdouble)65535; Specular1[2] = color->blue/(gdouble)65535; Specular2[0] = color->red/(gdouble)65535; Specular2[1] = color->green/(gdouble)65535; Specular2[2] = color->blue/(gdouble)65535; for(k=0;k<3;k++) { Diffuse1[k] = Specular1[k]*0.8; Diffuse2[k] = Specular2[k]*0.8; } for(k=0;k<3;k++) { Ambiant1[k] = Specular1[k]*0.5; Ambiant2[k] = Specular2[k]*0.5; } for(k=0;k<3;k++) { Ambiant1[k] = 0.1; Ambiant2[k] = 0.1; } for(k=0;k<3;k++) { Specular1[k] = 0.8; Specular2[k] = 0.8; } p1 = geometry[i].Prop.covalentRadii+geometry[i].Prop.radii; p2 = geometry[j].Prop.covalentRadii+geometry[j].Prop.radii; glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); Cylinder_Draw_Color_Two(g,Ci,Cj, Specular1,Diffuse1,Ambiant1, Specular2,Diffuse2,Ambiant2, p1,p2); glDisable(GL_BLEND); } /*****************************************************************************/ gboolean testShowBoxGeom() { return showBox; } /*****************************************************************************/ static void gl_build_box() { guint i; guint j; GdkColor colorRed; GdkColor colorGreen; GdkColor colorBlue; GdkColor colorYellow; GdkColor colorFrag; gdouble rayon; gint ni, nj; gchar tmp[BSIZE]; gint nTv = 0; gint iTv[3] = {-1,-1,-1}; V3d Base1Pos; V3d Base2Pos; V4d Specular = {1.0f,1.0f,1.0f,1.0f}; V4d Diffuse = {1.0f,1.0f,1.0f,1.0f}; V4d Ambiant = {1.0f,1.0f,1.0f,1.0f}; gdouble radius = 0.1; gdouble Tv[3][3]; gdouble O[3]; if(!testShowBoxGeom()) return; for(i=0;i0) { if(!geometry[j].show) continue; draw_bond(i, j,1.0, geometry[i].typeConnections[nj]); } else { if(geometry[i].show && geometry[j].show && ShowHBonds && geometry[i].typeConnections[nj]==-1) { draw_hbond(i,j,0.2); } } } gl_build_box(); /* for(i=0;i0) { if(!geometry[j].show) continue; if((OperationType==CUTBOND || OperationType==CHANGEBOND) && NBatoms==2 && NumBatoms[0]>0 && NumBatoms[1]>0) { gint na = NumBatoms[0]; gint nb = NumBatoms[1]; if( (na == (gint)geometry[i].N && geometry[i].show && nb == (gint)geometry[j].N && geometry[j].show) || (nb == (gint)geometry[i].N && geometry[i].show && na == (gint)geometry[j].N && geometry[j].show) ) { gdouble s = get_rayon_selection(i)/rayon; if(OperationType==CUTBOND) draw_bond_blend(i, j,s, geometry[i].typeConnections[nj],&colorRed); else draw_bond_blend(i, j,s, geometry[i].typeConnections[nj],&colorFrag); } } } else { if(OperationType==ADDATOMSBOND && NFatoms==2 && NumFatoms[0]>0 && NumFatoms[1]>0) { gint na = NumFatoms[0]; gint nb = NumFatoms[1]; gdouble s = get_rayon_selection(i)/rayon; if( (na == (gint)geometry[i].N && geometry[i].show && nb == (gint)geometry[j].N && geometry[j].show) || (nb == (gint)geometry[i].N && geometry[i].show && na == (gint)geometry[j].N && geometry[j].show) ) draw_bond_blend(i, j,s, geometry[i].typeConnections[nj],&colorFrag); } } if((gint)i==NumSelectedAtom) draw_anneau(geometry[i].X, geometry[i].Y, geometry[i].Z, rayon,&colorRed); else if(GeomIsOpen) { if(NSA[0]>-1 && (gint)geometry[i].N == NSA[0]) draw_anneau(geometry[i].X, geometry[i].Y, geometry[i].Z, rayon,&colorRed); if(NSA[1]>-1 && (gint)geometry[i].N == NSA[1]) draw_anneau(geometry[i].X, geometry[i].Y, geometry[i].Z, rayon,&colorGreen); if(NSA[2]>-1 && (gint)geometry[i].N == NSA[2]) draw_anneau(geometry[i].X, geometry[i].Y, geometry[i].Z, rayon,&colorBlue); if(NSA[3]>-1 && (gint)geometry[i].N == NSA[3]) draw_anneau(geometry[i].X, geometry[i].Y, geometry[i].Z, rayon,&colorYellow); } if(EDITOBJECTS==OperationType &&(gint)i==NumPointedAtom) draw_anneau(geometry[i].X, geometry[i].Y, geometry[i].Z, rayon,&colorRed); if(OperationType == MEASURE) for(j = 0;j<4;j++) if(NumSelAtoms[j] == (gint)geometry[i].N) draw_anneau(geometry[i].X, geometry[i].Y, geometry[i].Z, rayon,&colorGreen); switch(OperationType) { case ADDFRAGMENT : if(atomToDelete == (gint)geometry[i].N) draw_anneau(geometry[i].X, geometry[i].Y, geometry[i].Z, rayon,&colorRed); if(atomToBondTo == (gint)geometry[i].N) draw_anneau(geometry[i].X, geometry[i].Y, geometry[i].Z, rayon,&colorGreen); if(angleTo == (gint)geometry[i].N) draw_anneau(geometry[i].X, geometry[i].Y, geometry[i].Z, rayon,&colorBlue); break; case SELECTOBJECTS : case SELECTFRAG : case SELECTRESIDUE : case DELETEFRAG : case DELETEOBJECTS : case ROTLOCFRAG : case ROTZLOCFRAG : case MOVEFRAG : for(j = 0;j0) draw_distance(i,j); if(ShowDipole && Dipole.def) draw_label_dipole(); showLabelAxesGeom(ortho,NULL); glEnable ( GL_LIGHTING ) ; glDeleteFontsList(); } /*****************************************************************************/ static void gl_build_dipole() { V4d Specular = {1.0f,1.0f,1.0f,1.0f}; V4d Diffuse = {0.0f,0.0f,1.0f,1.0f}; V4d Ambiant = {0.0f,0.0f,0.1f,1.0f}; V3d Base1Pos = {Dipole.origin[0],Dipole.origin[1],Dipole.origin[2]}; V3d Base2Pos = {Dipole.origin[0]+Dipole.value[0],Dipole.origin[1]+Dipole.value[1],Dipole.origin[2]+Dipole.value[2]}; GLdouble radius = Dipole.radius; V3d Center; GLdouble scal = 2*factordipole; V3d Direction; double lengt; gint i; if(!ShowDipole) return; if(!Dipole.def) return; for(i=0;i<3;i++) { Diffuse[i] = Dipole.color[i]/65535.0; Ambiant[i] = Diffuse[i]/10; } Direction[0] = Base2Pos[0]-Base1Pos[0]; Direction[1] = Base2Pos[1]-Base1Pos[1]; Direction[2] = Base2Pos[2]-Base1Pos[2]; lengt = v3d_length(Direction); if(radius<0.1) radius = 0.1; Base2Pos[0] = Base1Pos[0] + Direction[0]*scal; Base2Pos[1] = Base1Pos[1] + Direction[1]*scal; Base2Pos[2] = Base1Pos[2] + Direction[2]*scal; Direction[0] /= lengt; Direction[1] /= lengt; Direction[2] /= lengt; Center[0] = Base2Pos[0]; Center[1] = Base2Pos[1]; Center[2] = Base2Pos[2]; Base2Pos[0] += Direction[0]*2*radius; Base2Pos[1] += Direction[1]*2*radius; Base2Pos[2] += Direction[2]*2*radius; Cylinder_Draw_Color(radius/2,Base1Pos,Center,Specular,Diffuse,Ambiant); for(i=0;i<3;i++) { Diffuse[i] *=0.6; Ambiant[i] *=0.6; } Diffuse[1] = Diffuse[2]; Prism_Draw_Color(radius/1.5,Center,Base2Pos,Specular,Diffuse,Ambiant); } /*****************************************************************************/ void buildRotation() { gdouble m[4][4]; build_rotmatrix(m,Quat); } /*****************************************************************************/ void drawGeom() { if(!GeomDrawingArea) return; if(!GTK_IS_WIDGET(GeomDrawingArea)) return; redraw(GeomDrawingArea); } /*****************************************************************************/ void rafresh_drawing() { guint i; HideShowMeasure(MeasureIsHide); i= gtk_notebook_get_current_page(GTK_NOTEBOOK(NoteBookDraw)); define_geometry(); if(ShowHBonds) set_Hconnections(); gtk_notebook_remove_page((GtkNotebook *)NoteBookDraw,0); vboxmeasure =AddNoteBookPage(NoteBookDraw,_("Measure")); AddMeasure(GeomDlg,vboxmeasure); gtk_widget_hide_all(NoteBookDraw); gtk_widget_show_all(NoteBookDraw); gtk_notebook_set_current_page((GtkNotebook*)NoteBookDraw,i); drawGeom(); change_of_center(NULL,NULL); } /*****************************************************************************/ void multi_geometry_by_factor(gdouble fa0) { guint i; for(i=0;ired; color.green = BackColor->green; color.blue = BackColor->blue; if(first==0) { g_free(BackColor); first = 1; } BackColor = gdk_color_copy(&color); drawGeom(); } /*****************************************************************************/ void open_color_dlg(GtkWidget *win,gpointer *DrawingArea) { GtkColorSelectionDialog *ColorDlg; ColorDlg = (GtkColorSelectionDialog *)gtk_color_selection_dialog_new( _("Set Background Color")); gtk_window_set_modal (GTK_WINDOW (ColorDlg), TRUE); gtk_window_set_transient_for(GTK_WINDOW(ColorDlg),GTK_WINDOW(Fenetre)); gtk_widget_hide(ColorDlg->help_button); g_signal_connect_swapped(G_OBJECT(ColorDlg->ok_button),"clicked", (GCallback)set_back_color,GTK_OBJECT(ColorDlg->colorsel)); g_signal_connect_swapped(G_OBJECT(ColorDlg->ok_button),"clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(ColorDlg)); g_signal_connect_swapped(G_OBJECT(ColorDlg->cancel_button),"clicked", (GCallback)gtk_widget_destroy,GTK_OBJECT(ColorDlg)); gtk_widget_show(GTK_WIDGET(ColorDlg)); } /*****************************************************************************/ GtkWidget *create_frame_in_vbox(gchar *title,GtkWidget *win,GtkWidget *vbox,gboolean type) { GtkWidget *frame; frame = gtk_frame_new (title); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); g_object_ref (frame); gtk_container_set_border_width (GTK_CONTAINER (frame), 1); gtk_box_pack_start(GTK_BOX(vbox), frame,type,type,1); gtk_widget_show (frame); return frame; } /*****************************************************************************/ GtkWidget *create_vbox_in_hbox(GtkWidget *win,GtkWidget *hbox,gboolean type) { GtkWidget *vbox; vbox = gtk_vbox_new (FALSE, 0); g_object_ref (vbox); gtk_widget_show (vbox); gtk_box_pack_start (GTK_BOX (hbox), vbox, type, type, 1); return vbox; } /*****************************************************************************/ GtkWidget *create_hbox_in_vbox(GtkWidget *vbox) { GtkWidget *hbox; hbox = gtk_hbox_new (FALSE, 0); g_object_ref (hbox); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); return hbox; } /*****************************************************************************/ void destroy_drawing_and_children(GtkWidget *win,gpointer data) { destroy_children(GeomDlg); } /*****************************************************************************/ void destroy_all_drawing(GtkWidget *win) { stop_calcul(win, NULL); while( gtk_events_pending() ) gtk_main_iteration(); geometry = Free_One_Geom(geometry ,Natoms); geometry0 = Free_One_Geom(geometry0,Natoms); g_free(NumFatoms); NumFatoms = NULL; NFatoms = 0; Natoms = 0; gtk_widget_destroy(GeomDrawingArea); GeomDrawingArea = NULL; gtk_widget_destroy(GeomDlg); if (cr) cairo_destroy (cr); cr = NULL; Orig[0] = Orig[1] = Orig[2] = 0.0; } /*****************************************************************************/ GtkWidget *AddNoteBookPage(GtkWidget *NoteBook,char *label) { GtkWidget *vboxpage; GtkWidget *Frame; Frame = gtk_frame_new(NULL); gtk_container_set_border_width(GTK_CONTAINER(Frame), 2); gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), Frame, NULL, NULL); g_object_set_data(G_OBJECT (Frame), "Frame", Frame); gtk_widget_show(Frame); vboxpage = create_vbox(Frame); return vboxpage; } /********************************************************************************/ void set_sensitive_stop_button(gboolean sens) { if(GeomDrawingArea) gtk_widget_set_sensitive(StopButton, sens); } /********************************************************************************************/ static void stop_calcul(GtkWidget *wi, gpointer data) { StopCalcul = TRUE; } /********************************************************************************/ void add_stop_button(GtkWidget *Win, GtkWidget *box) { StopButton = gtk_button_new_with_label("Cancel"); gtk_box_pack_start (GTK_BOX (box), StopButton, FALSE, TRUE, 0); gtk_widget_set_sensitive(StopButton, FALSE); g_signal_connect(G_OBJECT(StopButton), "clicked", G_CALLBACK (stop_calcul), NULL); } /********************************************************************************/ static void open_menu(GtkWidget *Win, GdkEvent *event, gpointer Menu) { GdkEventButton *bevent; bevent = (GdkEventButton *) event; popup_menu_geom( bevent->button, bevent->time); } /********************************************************************************/ static void add_menu_button(GtkWidget *Win, GtkWidget *box) { GtkWidget* menuButton; menuButton = gtk_button_new_with_label("M"); gtk_box_pack_start (GTK_BOX (box), menuButton, FALSE, TRUE, 0); g_signal_connect(G_OBJECT(menuButton), "button_press_event",G_CALLBACK(open_menu), NULL); gtk_widget_show (menuButton); } /********************************************************************************/ void draw_geometry(GtkWidget *w,gpointer d) { if(GeomDrawingArea == NULL) create_window_drawing(); else rafresh_drawing(); } /*****************************************************************************/ void export_geometry(gchar* fileName, gchar* fileType) { if(!fileName) return; if(!fileType) return; if(!GeomDrawingArea) return; if(!strcmp(fileType,"pdf")) { cairo_surface_t *surface; surface = cairo_pdf_surface_create(fileName, GeomDrawingArea->allocation.width, GeomDrawingArea->allocation.height); crExport = cairo_create(surface); drawGeom(); cairo_show_page(crExport); cairo_surface_destroy(surface); cairo_destroy(crExport); crExport = NULL; return; } else if(!strcmp(fileType,"ps")) { cairo_surface_t *surface; surface = cairo_ps_surface_create(fileName, GeomDrawingArea->allocation.width, GeomDrawingArea->allocation.height); crExport = cairo_create(surface); drawGeom(); cairo_show_page(crExport); cairo_surface_destroy(surface); cairo_destroy(crExport); crExport = NULL; return; } else if(!strcmp(fileType,"eps")) { cairo_surface_t *surface; surface = cairo_ps_surface_create(fileName, GeomDrawingArea->allocation.width, GeomDrawingArea->allocation.height); cairo_ps_surface_set_eps(surface, TRUE); crExport = cairo_create(surface); drawGeom(); cairo_show_page(crExport); cairo_surface_destroy(surface); cairo_destroy(crExport); crExport = NULL; return; } else if(!strcmp(fileType,"svg")) { cairo_surface_t *surface; surface = cairo_svg_surface_create(fileName, GeomDrawingArea->allocation.width, GeomDrawingArea->allocation.height); crExport = cairo_create(surface); drawGeom(); cairo_show_page(crExport); cairo_surface_destroy(surface); cairo_destroy(crExport); crExport = NULL; return; } } /******************************************************************************/ gint glgeom_rafresh(GtkWidget *widget) { if(!widget) return FALSE; redraw(GeomDrawingArea); return TRUE; } /******************************************************************************/ void rafresh_window_geom() { if(GeomDrawingArea != NULL) { RebuildGeom = TRUE; copyCoordinates2to1(geometry, geometry0); redraw(GeomDrawingArea); } } /*********************************************************************************************/ static void SetLight() { static float lmodel_ambient[] = {0.1, 0.1, 0.1, 0.1}; static float lmodel_twoside[] = {GL_TRUE}; static float lmodel_local[] = {GL_FALSE}; static V4d light0_ambient = {0.5, 0.5, 0.5, 1.0}; static V4d light0_diffuse = {1.0, 1.0, 1.0, 0.0}; static V4d light0_specular = {1.0, 1.0, 1.0, 0.0}; static V4d light1_ambient = {1.0, 1.0, 1.0, 1.0}; static V4d light1_diffuse = {1.0, 1.0, 1.0, 0.0}; static V4d light1_specular = {1.0, 1.0, 1.0, 0.0}; static V4d light2_ambient = {0.1, 0.1, 0.1, 1.0}; static V4d light2_diffuse = {1.0, 1.0, 1.0, 0.0}; static V4d light2_specular = {1.0, 1.0, 1.0, 0.0}; glLightdv(GL_LIGHT0, GL_AMBIENT, light0_ambient); glLightdv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse); glLightdv(GL_LIGHT0, GL_SPECULAR, light0_specular); glLightdv(GL_LIGHT0, GL_POSITION, light0_position); glLightdv(GL_LIGHT1, GL_AMBIENT, light1_ambient); glLightdv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse); glLightdv(GL_LIGHT1, GL_SPECULAR, light1_specular); glLightdv(GL_LIGHT1, GL_POSITION, light1_position); glLightdv(GL_LIGHT2, GL_AMBIENT, light2_ambient); glLightdv(GL_LIGHT2, GL_DIFFUSE, light2_diffuse); glLightdv(GL_LIGHT2, GL_SPECULAR, light2_specular); glLightdv(GL_LIGHT2, GL_POSITION, light2_position); glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, lmodel_local); glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); glEnable(GL_LIGHTING); glDisable(GL_LIGHT0); glDisable(GL_LIGHT1); glDisable(GL_LIGHT2); if(lightOnOff[0]) glEnable(GL_LIGHT0); if(lightOnOff[1]) glEnable(GL_LIGHT1); if(lightOnOff[2]) glEnable(GL_LIGHT2); } /*********************************************************************************/ /* When widget is exposed it's contents are redrawn. */ static gint draw(GtkWidget *widget, GdkEventExpose *event) { static gint i = 0; i++; if (!GTK_IS_WIDGET(widget)) return TRUE; if(!GTK_WIDGET_REALIZED(widget)) return TRUE; /* Draw only last expose. */ if (event->count > 0) return FALSE; redraw(widget); return FALSE; } /*****************************************************************************/ /* When GLArea widget size changes, viewport size is set to match the new size */ static gint reshape(GtkWidget *widget, GdkEventConfigure *event) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); if(!GTK_IS_WIDGET(widget)) return TRUE; if(!GTK_WIDGET_REALIZED(widget)) return TRUE; if (gdk_gl_drawable_gl_begin (gldrawable, glcontext)) { /* pthread_mutex_lock (&theRender_mutex);*/ glViewport(0,0, widget->allocation.width, widget->allocation.height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(PersMode) { mYPerspective(Zoom,(GLdouble)widget->allocation.width/(GLdouble)widget->allocation.height,zNear,zFar); } else { gdouble fw = (GLdouble)widget->allocation.width/(GLdouble)widget->allocation.height; gdouble fh = 1.0; glOrtho(-fw,fw,-fh,fh,-1,1); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gdk_gl_drawable_gl_end (gldrawable); /* pthread_mutex_unlock (&theRender_mutex);*/ gdk_window_invalidate_rect (gtk_widget_get_parent_window (widget), &widget->allocation, TRUE); gdk_window_process_updates (gtk_widget_get_parent_window (widget), TRUE); } return TRUE; } /*****************************************************************************/ static void initGL() { /* static GLdouble fog_color[4] = { 0.0, 0.0, 0.0, 0.0 };*/ /* remove back faces */ glEnable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); glColorMaterial(GL_FRONT_AND_BACK,GL_DIFFUSE); /*glEnable(GL_COLOR_MATERIAL);*/ glEnable(GL_NORMALIZE); glShadeModel(GL_SMOOTH); SetLight(); glInitFonts(); /* glFogi(GL_FOG_MODE, GL_EXP); glFogf(GL_FOG_DENSITY, 0.15); glFogdv(GL_FOG_COLOR, fog_color); */ } /*****************************************************************************/ static gint init(GtkWidget *widget) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); if(!GTK_IS_WIDGET(widget)) return TRUE; if(!GTK_WIDGET_REALIZED(widget)) return TRUE; if (gdk_gl_drawable_gl_begin (gldrawable, glcontext)) { glViewport(0,0, widget->allocation.width, widget->allocation.height); initGL(); gdk_window_invalidate_rect (gtk_widget_get_parent_window (widget), &widget->allocation, TRUE); /* gdk_window_process_updates (gtk_widget_get_parent_window (widget), TRUE);*/ } return TRUE; } /********************************************************************************************/ /* Configure the OpenGL framebuffer.*/ static GdkGLConfig *configure_gl() { GdkGLConfig *glconfig; GdkGLConfigMode modedouble = GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE; GdkGLConfigMode modesimple = GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH; GdkGLConfigMode mode = GDK_GL_MODE_RGB; /* Try the user visual */ if(openGLOptions.rgba !=0) mode = GDK_GL_MODE_RGBA; if(openGLOptions.depthSize!=0) mode |= GDK_GL_MODE_DEPTH; if(openGLOptions.alphaSize!=0) mode |= GDK_GL_MODE_ALPHA; if(openGLOptions.doubleBuffer!=0) mode |= GDK_GL_MODE_DOUBLE; glconfig = gdk_gl_config_new_by_mode (mode); if(glconfig!=NULL) return glconfig; /* Try double-buffered visual */ glconfig = gdk_gl_config_new_by_mode (modedouble); if (glconfig == NULL) { printf ("\n*** Cannot find the double-buffered visual.\n"); printf ("\n*** Trying single-buffered visual.\n"); /* Try single-buffered visual */ glconfig = gdk_gl_config_new_by_mode (modesimple); if (glconfig == NULL) { printf ("*** No appropriate OpenGL-capable visual found.\n"); exit (1); } } return glconfig; } /********************************************************************************************/ static GtkWidget* NewGeomDrawingArea(GtkWidget* vboxwin, GtkWidget* GeomDlg) { GtkWidget* frame; /* gchar *info_str; */ GtkWidget* table; GtkWidget* hboxtoolbar; #define DIMAL 13 int k = 0; GdkGLConfig *glconfig; { gint i; Zoom = 45; /* factorstick=1.0; factorball=1.0; */ factordipole=1.0; Trans[0]=0; Trans[1]=0; SetCosSin(); Ddef = FALSE; AtomToInsert = g_strdup("C"); for(i=0;i<4;i++) NumSelAtoms[i] = -1; TypeGeom = GABEDIT_TYPEGEOM_STICK; ShadMode = FALSE; PersMode = FALSE; LightMode = FALSE; OrtepMode = FALSE; CartoonMode = TRUE; DrawDistance=FALSE; DrawDipole = FALSE; StopCalcul = FALSE; ShowHBonds = FALSE; Frag.NAtoms = 0; Frag.Atoms = NULL; FragItems = NULL; NFrags = 0; OperationType = ROTATION ; } k = 0; /* if(openGLOptions.alphaSize!=0) { attrlist[k++] = GDK_GL_ALPHA_SIZE; attrlist[k++] = 1; } if(openGLOptions.depthSize!=0) { attrlist[k++] = GDK_GL_DEPTH_SIZE; attrlist[k++] = 1; } if(openGLOptions.doubleBuffer!=0) attrlist[k++] = GDK_GL_DOUBLEBUFFER; */ trackball(Quat , 0.0, 0.0, 0.0, 0.0); frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 0); gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT); gtk_box_pack_start (GTK_BOX (vboxwin), frame, TRUE, TRUE, 0); gtk_widget_show (frame); table = gtk_table_new(2,2,FALSE); gtk_container_add(GTK_CONTAINER(frame),table); gtk_widget_show(GTK_WIDGET(table)); hboxtoolbar = gtk_hbox_new (FALSE, 0); gtk_widget_show (hboxtoolbar); gtk_table_attach(GTK_TABLE(table), hboxtoolbar,0,1,0,1, (GtkAttachOptions)(GTK_FILL | GTK_SHRINK ), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND ), 0,0); gtk_quit_add_destroy(1, GTK_OBJECT(GeomDlg)); /* Create new OpenGL widget. */ /* pthread_mutex_init (&theRender_mutex, NULL);*/ GeomDrawingArea = gtk_drawing_area_new (); gtk_drawing_area_size(GTK_DRAWING_AREA(GeomDrawingArea),(gint)(ScreenHeight*0.2),(gint)(ScreenHeight*0.2)); gtk_table_attach(GTK_TABLE(table),GeomDrawingArea,1,2,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND ), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND ), 0,0); gtk_widget_show(GTK_WIDGET(GeomDrawingArea)); /* Events for widget must be set before X Window is created */ gtk_widget_set_events(GeomDrawingArea, GDK_EXPOSURE_MASK| GDK_BUTTON_PRESS_MASK| GDK_BUTTON_RELEASE_MASK| GDK_POINTER_MOTION_MASK| GDK_POINTER_MOTION_HINT_MASK | GDK_SCROLL_MASK ); /* prepare GL */ glconfig = configure_gl(); if (!glconfig) { g_assert_not_reached (); } if (!gtk_widget_set_gl_capability (GeomDrawingArea, glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE)) { g_assert_not_reached (); } g_signal_connect(G_OBJECT(GeomDrawingArea), "realize", G_CALLBACK(init), NULL); g_signal_connect(G_OBJECT(GeomDrawingArea), "configure_event", G_CALLBACK(reshape), NULL); g_signal_connect(G_OBJECT(GeomDrawingArea), "expose_event", G_CALLBACK(draw), NULL); gtk_widget_realize(GTK_WIDGET(GeomDlg)); /* info_str = gdk_gl_get_info(); Debug("%s\n",info_str); g_free(info_str); */ g_signal_connect(G_OBJECT(GeomDrawingArea), "button_press_event",G_CALLBACK(event_dispatcher), NULL); g_signal_connect(G_OBJECT(GeomDrawingArea), "motion_notify_event",G_CALLBACK(motion_notify), NULL); g_signal_connect(G_OBJECT(GeomDrawingArea), "button_release_event",G_CALLBACK(button_release), NULL); g_signal_connect(G_OBJECT (GeomDlg), "key_press_event", (GCallback) set_key_press, GeomDlg); g_signal_connect(G_OBJECT (GeomDlg), "key_release_event", (GCallback) set_key_release, NULL); return GeomDrawingArea; } /*****************************************************************************/ void create_window_drawing() { GtkWidget *vboxframe; GtkWidget *frame; GtkWidget *hboxframe; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *hboxoperation; GtkWidget *DrawingArea; GtkWidget *vboxleft; GtkWidget *vboxright; GtkWidget *NoteBook; GtkWidget *Table; GtkWidget *handelbox; GtkWidget *Status; GtkWidget *VboxWin; GtkWidget *hboxtoolbar; GtkWidget* handlebox; GtkWidget* table; GtkWidget* vboxda; { gint i; Zoom=45; /* factorstick=1.0; factorball=1.0; */ factordipole=1.0; Trans[0]=0; Trans[1]=0; SetCosSin(); Ddef = FALSE; AtomToInsert = g_strdup("C"); for(i=0;i<4;i++) NumSelAtoms[i] = -1; TypeGeom = GABEDIT_TYPEGEOM_STICK; ShadMode = FALSE; PersMode = FALSE; LightMode = FALSE; OrtepMode = FALSE; CartoonMode = TRUE; DrawDistance=FALSE; DrawDipole = FALSE; StopCalcul = FALSE; ShowHBonds = FALSE; Frag.NAtoms = 0; Frag.Atoms = NULL; FragItems = NULL; NFrags = 0; OperationType = ROTATION ; RebuildGeom = TRUE; } geometry = NULL; geometry0 = NULL; Natoms = 0; NumFatoms = NULL; NFatoms = 0; define_geometry(); GeomDlg = NULL ; GeomDlg = gtk_window_new(GTK_WINDOW_TOPLEVEL); VboxWin = gtk_vbox_new (TRUE, 0); gtk_container_add(GTK_CONTAINER(GeomDlg),VboxWin); gtk_widget_show(VboxWin); gtk_window_set_title(GTK_WINDOW(GeomDlg),_("Gabedit : Draw Geometry ")); gtk_window_set_transient_for(GTK_WINDOW(GeomDlg),GTK_WINDOW(Fenetre)); gtk_window_move(GTK_WINDOW(GeomDlg),0,0); init_child(GeomDlg,destroy_all_drawing,_(" Draw Geom. ")); g_signal_connect(G_OBJECT(GeomDlg),"delete_event",(GCallback)destroy_children,NULL); frame = create_frame_in_vbox(NULL,GeomDlg,VboxWin,TRUE); gtk_widget_show (frame); vboxframe = create_vbox(frame); gtk_widget_show (vboxframe); hboxframe = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vboxframe), hboxframe, TRUE, TRUE, 0); gtk_widget_show (hboxframe); /* DrawingArea */ vbox = create_vbox_in_hbox(frame,hboxframe,TRUE); frame = create_frame_in_vbox(NULL,GeomDlg,vbox,TRUE); hbox = create_hbox_in_vbox(vbox); vbox = create_vbox(frame); vboxleft= vbox; vbox = create_vbox_in_hbox(frame,hboxframe,FALSE); vboxhandle = vbox; handelbox =gtk_handle_box_new (); gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(handelbox),GTK_SHADOW_NONE); gtk_handle_box_set_handle_position (GTK_HANDLE_BOX(handelbox),GTK_POS_TOP); gtk_container_add( GTK_CONTAINER (vbox), handelbox); gtk_widget_show (handelbox); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add( GTK_CONTAINER(handelbox), vbox); gtk_widget_show (vbox); vboxright= vbox; vbox = vboxleft; /* The Table */ Table = gtk_table_new(1, 2, FALSE); gtk_container_add(GTK_CONTAINER(vbox), Table); gtk_widget_show(Table); vboxda = gtk_vbox_new (FALSE, 0); gtk_table_attach(GTK_TABLE(Table), vboxda, 1,2, 0,1, GTK_EXPAND|GTK_FILL , GTK_EXPAND |GTK_FILL, 0, 0); gtk_widget_show(vboxda); DrawingArea = NewGeomDrawingArea(vboxda, GeomDlg); gtk_widget_set_size_request(GTK_WIDGET(DrawingArea ),(gint)(ScreenHeight*0.5),(gint)(ScreenHeight*0.5)); GeomDrawingArea = DrawingArea; g_signal_connect(G_OBJECT(GeomDrawingArea),"configure_event", (GCallback)configure_event,NULL); /* hboxtoolbar = gtk_hbox_new (FALSE, 0); gtk_table_attach(GTK_TABLE(Table), hboxtoolbar, 0,1, 0,1, GTK_FILL , GTK_SHRINK |GTK_FILL, 0, 0); gtk_widget_show(hboxtoolbar); */ vbox = gtk_vbox_new (FALSE, 0); gtk_table_attach(GTK_TABLE(Table), vbox, 0,1, 0,1, GTK_FILL , GTK_FILL, 0, 0); gtk_widget_show(vbox); add_menu_button(GeomDlg, vbox); hboxtoolbar = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hboxtoolbar, TRUE, TRUE, 0); gtk_widget_show(hboxtoolbar); gtk_widget_set_events (GeomDrawingArea, GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_CONTROL_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK); gtk_widget_realize(GeomDlg); NoteBook = gtk_notebook_new(); gtk_notebook_set_show_tabs(GTK_NOTEBOOK(NoteBook), FALSE); gtk_notebook_set_show_border(GTK_NOTEBOOK(NoteBook), FALSE); NoteBookDraw = NoteBook; gtk_box_pack_start(GTK_BOX (vboxright), NoteBook,TRUE, TRUE, 0); vboxmeasure =AddNoteBookPage(NoteBook,_("Measure")); AddMeasure(GeomDlg,vboxmeasure); gtk_widget_show(NoteBook); gtk_widget_show_all(vboxmeasure); change_of_center(NULL,NULL); gtk_widget_show(vboxright); handlebox = gtk_handle_box_new (); gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(handlebox),GTK_SHADOW_NONE); gtk_handle_box_set_handle_position (GTK_HANDLE_BOX(handlebox),GTK_POS_LEFT); gtk_widget_show (handlebox); gtk_box_pack_start(GTK_BOX (hbox), handlebox,TRUE, TRUE, 0); table = gtk_table_new(2,2,FALSE); gtk_container_add (GTK_CONTAINER (handlebox), table); gtk_widget_show(table); /* Rotation Status */ Status = gtk_statusbar_new(); gtk_table_attach(GTK_TABLE(table),Status,0,1,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); idStatusRotation = gtk_statusbar_get_context_id(GTK_STATUSBAR(Status),_("Rotation")); StatusRotation = Status; gtk_statusbar_pop(GTK_STATUSBAR(StatusRotation),idStatusRotation); gtk_statusbar_push(GTK_STATUSBAR(StatusRotation),idStatusRotation, _(" Press the Middle mouse button and move your mouse for a \"Rotation\". ")); /* Mode Status */ Status = gtk_statusbar_new(); gtk_table_attach(GTK_TABLE(table),Status,1,2,0,1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); idStatusPopup= gtk_statusbar_get_context_id(GTK_STATUSBAR(Status),"Ball&Stick"); StatusPopup = Status; gtk_statusbar_pop(GTK_STATUSBAR(StatusPopup),idStatusPopup); gtk_statusbar_push(GTK_STATUSBAR(StatusPopup),idStatusPopup, _(" Press the Right mouse button for display the popup menu. ")); /* Operation Status */ Status = gtk_statusbar_new(); hboxoperation = gtk_hbox_new (FALSE, 0); gtk_table_attach(GTK_TABLE(table), hboxoperation,0,2,1,2, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1); gtk_box_pack_start (GTK_BOX(hboxoperation),Status, TRUE, TRUE, 1); idStatusOperation = gtk_statusbar_get_context_id(GTK_STATUSBAR(Status),_("Rotation")); StatusOperation = Status; gtk_statusbar_pop(GTK_STATUSBAR(StatusOperation),idStatusOperation); gtk_statusbar_push(GTK_STATUSBAR(StatusOperation),idStatusOperation, _(" Press the Left mouse button and move your mouse for a \"Rotation\". ")); add_stop_button(GeomDlg, hboxoperation); gtk_widget_show_all(hbox); gtk_widget_show_all(hboxoperation); gtk_widget_show_all(vbox); gtk_widget_show(frame); if(MeasureIsHide) { gtk_widget_hide(vboxhandle); } else gtk_widget_show(vboxhandle); gtk_window_set_default_size (GTK_WINDOW(GeomDlg), (gint)(ScreenHeight*0.85), (gint)(ScreenHeight*0.85)); g_object_set_data(G_OBJECT(GeomDlg), "StatusBox",handlebox); create_toolbar_and_popup_menu_geom(hboxtoolbar); /* Evenments */ g_signal_connect(G_OBJECT(GeomDrawingArea),"expose_event",(GCallback)expose_event,NULL); g_signal_connect(G_OBJECT(GeomDrawingArea), "button_press_event",G_CALLBACK(event_dispatcher), NULL); g_signal_connect(G_OBJECT(GeomDrawingArea), "motion_notify_event",G_CALLBACK(motion_notify), NULL); g_signal_connect(G_OBJECT(GeomDrawingArea), "button_release_event",G_CALLBACK(button_release), NULL); g_signal_connect(G_OBJECT (GeomDlg), "key_press_event", (GCallback) set_key_press, GeomDlg); g_signal_connect(G_OBJECT (GeomDlg), "key_release_event", (GCallback) set_key_release, NULL); gtk_widget_show(GeomDlg); gtk_window_move(GTK_WINDOW(GeomDlg),0,0); /* set_back_color_black();*/ /* set_back_color_grey();*/ set_back_color_default(); set_icone(GeomDlg); /*if(Natoms == 0) SetOperation(NULL,EDITOBJECTS);*/ /*define_good_trans();*/ } #endif /* DRAWGEOMGL*/ GabeditSrc250/src/Geometry/GeomGlobal.h0000644000175100017510000000620313130665226020240 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GEOMGLOBAL_H__ #define __GABEDIT_GEOMGLOBAL_H__ #ifndef GEOM_IS_XYZ #define GEOM_IS_XYZ 2 /* 0 for IS_MOLPRO 1 for IS_GAUSS */ #endif #ifndef GEOM_IS_ZMAT #define GEOM_IS_ZMAT 3 #endif #ifndef GEOM_IS_OTHER #define GEOM_IS_OTHER -1 #endif typedef struct _VariablesDef { gchar *Name; gchar *Value; gboolean Used; }VariablesDef; typedef struct _GeomAtomDef { gint Nentry; gchar *Symb; gchar *mmType; gchar *pdbType; gchar *Residue; gint ResidueNumber; gchar *R; gchar *NR; gchar *Angle; gchar *NAngle; gchar *Dihedral; gchar *NDihedral; gchar* Charge; gchar *Layer; }GeomAtomDef; typedef struct _VariablesXYZDef { gchar *Name; gchar *Value; gboolean Used; }VariablesXYZDef; typedef struct _GeomXYZAtomDef { gint Nentry; gchar *Symb; gchar *mmType; gchar *pdbType; gchar *Residue; gint ResidueNumber; gchar* Charge; gchar *X; gchar *Y; gchar *Z; gchar *Layer; gint* typeConnections; }GeomXYZAtomDef; typedef struct _GeomInter { GtkWidget *window; GtkWidget *vbox; gchar *frametitle; }GeomInter; typedef struct _FilePosTypeGeom { gint numline; gint geomtyp; gint units; }FilePosTypeGeom; #define NUMBER_ENTRY_0 5 #define NUMBER_ENTRY_R 7 #define NUMBER_ENTRY_ANGLE 9 #define NUMBER_ENTRY_DIHEDRAL 11 #define NUMBER_LIST_ZMATRIX 13 #define NUMBER_LIST_XYZ 10 VariablesXYZDef *VariablesXYZ; VariablesDef *Variables; GeomAtomDef* Geom; GeomXYZAtomDef* GeomXYZ; guint NVariablesXYZ; guint NVariables; guint NcentersXYZ; guint NcentersZmat; guint MethodeGeom; guint Nelectrons; DipoleDef Dipole; GtkWidget *GeomDrawingArea; GeomInter *geominter; GtkWidget *HboxGeom; GtkWidget *WindowGeom; gboolean GeomIsOpen; guint TypeGeomOpen; guint Units; guint NMethodes; gint NSA[4]; gint TotalCharges[3]; gint SpinMultiplicities[3]; gboolean RebuildGeom; void set_spin_of_electrons(); #endif /* __GABEDIT_GEOMGLOBAL_H__ */ GabeditSrc250/src/Geometry/GeomSymmetry.h0000644000175100017510000000276613130665226020703 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_SYMMETRY_H__ #define __GABEDIT_SYMMETRY_H__ void create_symmetry_window(GtkWidget* w,guint data); void create_geometry_paxis_window(GtkWidget* w,guint data); #endif /* __GABEDIT_SYMMETRY_H__ */ GabeditSrc250/src/Geometry/ResultsAnalise.h0000644000175100017510000000754313130665226021176 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_RESULTSANALISE_H__ #define __GABEDIT_RESULTSANALISE_H__ typedef struct _DataGeomConv { gint Npoint; gint Ntype; gchar *TypeCalcul; gchar **TypeData; gchar ***Data; gint *NumGeom; gchar *GeomFile; GabEditTypeFile fileType; }DataGeomConv; void set_sensitive_remote_frame(gboolean sensitive); void create_bar_result(GtkWidget* Vbox); DataGeomConv free_geom_conv(DataGeomConv); void find_energy_all(GtkWidget *wid,gpointer data); void read_geometries_conv_dalton(GabeditFileChooser *SelecFile, gint response_id); void read_geometries_conv_gamess(GabeditFileChooser *SelecFile, gint response_id); void read_geometries_conv_gaussian(GabeditFileChooser *SelecFile, gint response_id); void read_geometries_conv_molpro(GabeditFileChooser *SelecFile, gint response_id); void read_geometries_conv_mopac(GabeditFileChooser *SelecFile, gint response_id); void read_geometries_conv_mopac_scan(GabeditFileChooser *SelecFile, gint response_id); void read_geometries_conv_mopac_irc(GabeditFileChooser *SelecFile, gint response_id); void read_geometries_conv_orca(GabeditFileChooser *SelecFile, gint response_id); void read_geometries_conv_vasp_outcar(GabeditFileChooser *SelecFile, gint response_id); void read_geometries_conv_vasp_xml(GabeditFileChooser *SelecFile, gint response_id); void read_geometries_conv_qchem(GabeditFileChooser *SelecFile, gint response_id); void read_geometries_conv_nwchem(GabeditFileChooser *SelecFile, gint response_id); void read_geometries_conv_psicode(GabeditFileChooser *SelecFile, gint response_id); void read_geometries_conv_gabedit(GabeditFileChooser *SelecFile, gint response_id); void read_geometries_conv_molden(GabeditFileChooser *SelecFile, gint response_id); void read_geometries_conv_mpqc(GabeditFileChooser *SelecFile, gint response_id); void read_geometries_conv_xyz(GabeditFileChooser *SelecFile, gint response_id); void read_geometries_irc_gamess(GabeditFileChooser *SelecFile, gint response_id); void find_energy_molden(gchar* FileName); void find_energy_gabedit(gchar* FileName); void find_energy_gamess_output(gchar* fileName); void find_energy_gamess_output_heat(gchar* fileName); void find_energy_irc_output(gchar* fileName); void find_energy_gauss_output(gchar* fileName); void find_energy_mpqc_output(gchar* fileName); void find_energy_molpro_output(gchar* fileName); void find_energy_orca_output(gchar* fileName); void find_energy_qchem_output(gchar* fileName); gint find_energy_mopac_aux(gchar* fileName); void find_energy_mopac_scan_output(gchar* fileName); void find_energy_mopac_irc_output(gchar* fileName); #endif /* __GABEDIT_RESULTSANALISE_H__ */ GabeditSrc250/src/Geometry/LoadPersonalFragments.h0000644000175100017510000000031313130665226022456 0ustar alloucheallouche #ifndef __GABEDIT_LOADPERSONALFRAGMENTS_H__ #define __GABEDIT_LOADPERSONALFRAGMENTS_H__ PersonalFragments* loadAllPersonalFragments(gchar* filename); #endif /* __GABEDIT_LOADPERSONALFRAGMENTS_H__ */ GabeditSrc250/src/Geometry/BuildNanoTube.c0000644000175100017510000002503213130665226020717 0ustar alloucheallouche/* BuildNanoTube.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Common/Global.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Utils/AtomsProp.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/InterfaceGeom.h" #include "../Geometry/MenuToolBarGeom.h" static GtkWidget* Entrys[4]; static gint entryWidth = 40; /********************************************************************************/ static void build_nanotube(GtkWidget *w,gpointer data) { G_CONST_RETURN gchar *te; /* refrence : Phys. Rev. B, 47, 5485 (1993) */ gint n=10; /* First integer of the pair (n,m), which defines the tube chirality.*/ gint m=7; /* Second integer of the pair (n,m), which defines the tube chirality.*/ gdouble b = 1.422; /* Carbon-carbon bond length in graphene sheet, in Angstroms */ gint ncells = 2; /* Number of unit cells to be generated */ gint hcd; /* the higher common divisor of both n and m */ gint L; gdouble Rm; gdouble radius; /* tube radius */ gint dR; gint Nc; /* the number of two-atom unit cells in the translational cell */ gdouble phi; gint p1; gdouble t; gint p2; gdouble alpha; gdouble h; gdouble* coord[4]; gint i; te = gtk_entry_get_text(GTK_ENTRY(Entrys[0])); n = atoi(te); if(n<=0) n = 10; te = gtk_entry_get_text(GTK_ENTRY(Entrys[1])); m = atoi(te); if(m<0) m = 0; te = gtk_entry_get_text(GTK_ENTRY(Entrys[2])); b = atof(te); if(b<=0) b = 1.422; te = gtk_entry_get_text(GTK_ENTRY(Entrys[3])); ncells = atoi(te); if(ncells<1) ncells = 1; unselect_all_atoms(); if(Units==0) b *= ANG_TO_BOHR; if(m==0) hcd = n; else { for(hcd = m; hcd>=1; hcd--) if(n%hcd ==0 && m%hcd==0) break; } L = m*m+n*m+n*n; Rm = b*sqrt(3.0*L); radius = Rm/2.0/PI; if((n-m) % (3*hcd)==0) dR = 3*hcd; else dR = hcd; Nc = 2*L/dR; if(Nc<1) return; for(i=0;i<4;i++) coord[i] = g_malloc(2*Nc*ncells*sizeof(gdouble)); phi = (PI*(m+n))/L; t = (b*(m-n)*(m-n))/(2*L); p1 = 0; p2 = 0; for(p1=0; p1<=n; p1++) { gdouble pp2; pp2 = (gdouble)(hcd+p1*m)/n; if(fabs(pp2 -(gint)pp2)<1e-10) { p2 = (gint)pp2; break; } } alpha = PI*(m*(2*p2+p1)+n*(2*p1+p2))/L; h = (3*hcd*b)/(2*sqrt(1.0*L)); /* Set the first atom position in the two-atom unit cell */ coord[0][0] = radius; coord[1][0] = 0.0; coord[2][0] = 0.0; coord[3][0] = 0.0; /* Set the second atom position in the two-atom unit cell */ coord[0][1] = radius*cos(phi); coord[1][1] = radius*sin(phi); coord[2][1] = t; coord[3][1] = coord[3][0]+phi; /* Complete the tubule helical motif */ for(i=2; i<2*hcd; i++) { coord[0][i] = radius*cos(coord[3][i-2]+(2*PI)/hcd); coord[1][i] = radius*sin(coord[3][i-2]+(2*PI)/hcd); coord[2][i] = coord[2][i-2]; coord[3][i] = coord[3][i-2]+(2*PI)/hcd; } /* Complete the translational unit cell */ for(i=2*hcd; i<2*Nc*ncells; i++) { coord[0][i] = radius*cos((coord[3][i-(2*hcd)])+alpha); coord[1][i] = radius*sin((coord[3][i-(2*hcd)])+alpha); coord[2][i] = coord[2][i-(2*hcd)]+h; coord[3][i] = coord[3][i-(2*hcd)]+alpha; } init_dipole(); if(GeomXYZ) freeGeomXYZ(); if(VariablesXYZ) freeVariablesXYZ(VariablesXYZ); NcentersXYZ = 2*Nc*ncells; GeomXYZ=g_malloc(NcentersXYZ*sizeof(GeomXYZAtomDef)); for(i=0;ivbox), frame,TRUE,TRUE,0); gtk_widget_show (frame); vboxframe = create_vbox(frame); table = gtk_table_new(3,8,FALSE); gtk_box_pack_start (GTK_BOX (vboxframe), table, TRUE, TRUE, 3); i = 0; label = gtk_label_new(_("Chirality")); gtk_table_attach(GTK_TABLE(table),label,0,1,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label,1,2,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); label = gtk_label_new("("); gtk_table_attach(GTK_TABLE(table),label,2,3,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); Entrys[0] = gtk_entry_new(); gtk_widget_set_size_request(GTK_WIDGET(Entrys[0]),entryWidth,-1); gtk_entry_set_text(GTK_ENTRY(Entrys[0]),"10"); gtk_table_attach(GTK_TABLE(table),Entrys[0],3,4,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); label = gtk_label_new(","); gtk_table_attach(GTK_TABLE(table),label,4,5,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); Entrys[1] = gtk_entry_new(); gtk_widget_set_size_request(GTK_WIDGET(Entrys[1]),entryWidth,-1); gtk_entry_set_text(GTK_ENTRY(Entrys[1]),"0"); gtk_table_attach(GTK_TABLE(table),Entrys[1],5,6,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); label = gtk_label_new(")"); gtk_table_attach(GTK_TABLE(table),label,6,7,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); label = gtk_label_new(_(" see PRB,47,5485")); gtk_table_attach(GTK_TABLE(table),label,7,8,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); i = 1; label = gtk_label_new(_("C-C bond length")); gtk_table_attach(GTK_TABLE(table),label,0,1,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label,1,2,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); Entrys[2] = gtk_entry_new(); gtk_widget_set_size_request(GTK_WIDGET(Entrys[2]),entryWidth*2,-1); gtk_entry_set_text(GTK_ENTRY(Entrys[2]),"1.422"); gtk_table_attach(GTK_TABLE(table),Entrys[2],2,7,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); label = gtk_label_new(_("Angstroms")); gtk_table_attach(GTK_TABLE(table),label,7,8,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); i = 2; label = gtk_label_new(_("Number of translational unit cells")); gtk_table_attach(GTK_TABLE(table),label,0,1,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); label = gtk_label_new(":"); gtk_table_attach(GTK_TABLE(table),label,1,2,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); Entrys[3] = gtk_entry_new(); gtk_widget_set_size_request(GTK_WIDGET(Entrys[3]),entryWidth,-1); gtk_entry_set_text(GTK_ENTRY(Entrys[3]),"1"); gtk_table_attach(GTK_TABLE(table),Entrys[3],2,8,i,i+1,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,(GtkAttachOptions)(GTK_FILL|GTK_SHRINK),1,1); gtk_widget_realize(Dlg); /* The "Cancel" button */ Button = create_button(Dlg,_("Cancel")); gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect_swapped(G_OBJECT(Button), "clicked",(GCallback)delete_child,GTK_OBJECT(Dlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); /* The "OK" button */ Button = create_button(Dlg,_("OK")); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dlg)->action_area), Button,TRUE,TRUE,0); g_signal_connect(G_OBJECT(Button), "clicked",(GCallback)build_nanotube,NULL); g_signal_connect_swapped(G_OBJECT(Button), "clicked",(GCallback)delete_child,GTK_OBJECT(Dlg)); GTK_WIDGET_SET_FLAGS(Button, GTK_CAN_DEFAULT); gtk_widget_grab_default(Button); gtk_widget_show_all(GTK_DIALOG(Dlg)->vbox); gtk_widget_show_all(GTK_DIALOG(Dlg)->action_area); gtk_widget_show_now(Dlg); fit_windows_position(GeomDlg, Dlg); } GabeditSrc250/src/Geometry/FragmentsPPD.c0000644000175100017510000032041713130665226020523 0ustar alloucheallouche/* FragmentsPPD.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include #include "../Common/GabeditType.h" #include "../Utils/Utils.h" #include "../Utils/Vector3d.h" #include "../Geometry/Fragments.h" #include "../MolecularMechanics/PDBTemplate.h" #include "../Geometry/DrawGeom.h" #include "../MolecularMechanics/CalculTypesAmber.h" #define ANG_TO_BOHR 1.0/0.52917726 /*****************************************************************************/ static void set_vect_ij(Fragment* F, gint i, gint j, gdouble V[]) { gint c; for(c=0;c<3;c++) V[c] = F->Atoms[j].Coord[c]-F->Atoms[i].Coord[c]; } /*****************************************************************/ static void SetResidue(Fragment* Frag,gchar* name) { gint i; for(i=0;iNAtoms;i++) Frag->Atoms[i].Residue = g_strdup(name); } /********************************************************************************/ static void SetMMTypes(Fragment* Frag) { gint i; gchar* residue = NULL; gdouble charge; if(Frag->NAtoms<1) return; residue = Frag->Atoms[0].Residue; for(i=0;iNAtoms;i++) { if(Frag->Atoms[i].mmType) g_free(Frag->Atoms[i].mmType); Frag->Atoms[i].mmType = getMMTypeFromPDBTpl(residue, Frag->Atoms[i].pdbType,&charge); if(strcmp(Frag->Atoms[i].mmType,"UNK")) Frag->Atoms[i].Charge = charge; } for(i=0;iNAtoms;i++) if(!strcmp(Frag->Atoms[i].mmType,"UNK")) break; if(i!=Frag->NAtoms) calculTypesAmberForAFragment(Frag); } /********************************************************************************/ static void SetAtom(Atom* A,gchar* symb,gdouble x,gdouble y,gdouble z,gdouble charge) { A->mmType = g_strdup(symb); A->pdbType = g_strdup(symb); A->Symb = g_strdup_printf("%c",toupper(symb[0])); A->Coord[0] = (gdouble)x*(gdouble)ANG_TO_BOHR; A->Coord[1] = (gdouble)y*(gdouble)ANG_TO_BOHR; A->Coord[2] = (gdouble)z*(gdouble)ANG_TO_BOHR; A->Charge = charge; } /*****************************************************************/ static void initFragment(Fragment* F) { F->NAtoms = 0; F->Atoms = NULL; F->atomToDelete = -1; F->atomToBondTo = -1; F->angleAtom = -1; } /*****************************************************************/ Fragment GetFragmentPPDNonTerminal(gchar* Name) { Fragment F; gchar T[100]="UNK"; gint i; initFragment(&F); if ( !strcmp(Name, "Lace" ) ){ F.NAtoms = 6 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "HH31", 0.000f, 0.000f, 0.000f,0.000f ); SetAtom(&F.Atoms[ 1 ], "CH3", 0.000f, 1.090f, 0.000f,0.000f ); SetAtom(&F.Atoms[ 2 ], "HH32", 1.028f, 1.453f, 0.000f,0.000f ); SetAtom(&F.Atoms[ 3 ], "HH33", -0.514f, 1.453f, -0.890f,0.000f ); SetAtom(&F.Atoms[ 4 ], "C", -0.721f, 1.600f, 1.249f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.839f, 2.806f, 1.453f, -0.504f ); } else if ( !strcmp(Name, "Lala" ) ){ F.NAtoms = 10 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.580f, -1.780f, 1.205f, 0.036f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.077f, -0.816f, 1.241f, 0.036f ); SetAtom(&F.Atoms[ 9 ], "HB3", 1.638f, -0.260f, 2.131f, 0.036f ); } else if ( !strcmp(Name, "Larg" ) ){ F.NAtoms = 24 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.080f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.077f, -0.816f, 1.241f, 0.056f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.638f, -0.260f, 2.131f, 0.056f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.418f, -2.182f, 1.194f, -0.103f ); SetAtom(&F.Atoms[ 10 ], "HG1", 0.329f, -2.136f, 1.186f, 0.074f ); SetAtom(&F.Atoms[ 11 ], "HG2", 1.767f, -2.692f, 0.296f, 0.074f ); SetAtom(&F.Atoms[ 12 ], "CD", 1.884f, -2.951f, 2.427f, -0.228f ); SetAtom(&F.Atoms[ 13 ], "HD1", 2.973f, -2.984f, 2.445f, 0.133f ); SetAtom(&F.Atoms[ 14 ], "HD2", 1.511f, -2.438f, 3.314f, 0.133f ); SetAtom(&F.Atoms[ 15 ], "NE", 1.349f, -4.332f, 2.424f, -0.324f ); SetAtom(&F.Atoms[ 16 ], "HE", 0.761f, -4.619f, 1.655f, 0.269f ); SetAtom(&F.Atoms[ 17 ], "CZ", 1.606f, -5.209f, 3.389f, 0.760f ); SetAtom(&F.Atoms[ 18 ], "NH1", 2.372f, -4.905f, 4.434f, -0.624f ); SetAtom(&F.Atoms[ 19 ], "HH11", 2.774f, -3.982f, 4.509f, 0.361f ); SetAtom(&F.Atoms[ 20 ], "HH12", 2.546f, -5.597f, 5.148f, 0.361f ); SetAtom(&F.Atoms[ 21 ], "NH2", 1.074f, -6.424f, 3.287f, -0.624f ); SetAtom(&F.Atoms[ 22 ], "HH21", 0.494f, -6.653f, 2.493f, 0.361f ); SetAtom(&F.Atoms[ 23 ], "HH22", 1.252f, -7.113f, 4.004f, 0.361f ); } else if ( !strcmp(Name, "Lasn" ) ){ F.NAtoms = 14 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.086f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.077f, -0.800f, 1.251f, 0.038f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.613f, -0.256f, 2.118f, 0.038f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.439f, -2.188f, 1.232f, 0.675f ); SetAtom(&F.Atoms[ 10 ], "OD1", 0.720f, -2.579f, 0.315f, -0.470f ); SetAtom(&F.Atoms[ 11 ], "ND2", 1.780f, -2.961f, 2.266f, -0.867f ); SetAtom(&F.Atoms[ 12 ], "HD21", 2.374f, -2.591f, 2.995f, 0.344f ); SetAtom(&F.Atoms[ 13 ], "HD22", 1.443f, -3.912f, 2.315f, 0.344f ); } else if ( !strcmp(Name, "Lasp" ) ){ F.NAtoms = 12 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.398f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.077f, -0.816f, 1.241f, 0.071f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.638f, -0.260f, 2.131f, 0.071f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.417f, -2.185f, 1.194f, 0.714f ); SetAtom(&F.Atoms[ 10 ], "OD1", 2.107f, -3.069f, 0.620f, -0.721f ); SetAtom(&F.Atoms[ 11 ], "OD2", 0.297f, -2.369f, 1.741f, -0.721f ); } else if ( !strcmp(Name, "Lash" ) ) { F.NAtoms = 13; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "H",-1.174000f,-1.717000f,0.799000f,0.271900f); SetAtom(&F.Atoms[ 1 ] , "N",-0.440000f,-1.888000f,0.054000f,-0.415700f); SetAtom(&F.Atoms[ 2 ] , "HB2",0.481000f,0.068000f,1.497000f,0.048800f); SetAtom(&F.Atoms[ 3 ] , "C",1.887000f,-1.346000f,-0.471000f,0.597300f); SetAtom(&F.Atoms[ 4 ] , "CA",0.464000f,-0.811000f,-0.388000f,0.034100f); SetAtom(&F.Atoms[ 5 ] , "CB",0.462000f,0.416000f,0.575000f,-0.031600f); SetAtom(&F.Atoms[ 6 ] , "OD1",-1.015000f,2.176000f,1.228000f,-0.555400f); SetAtom(&F.Atoms[ 7 ] , "HB1",1.261000f,0.954000f,0.370000f,0.048800f); SetAtom(&F.Atoms[ 8 ] , "CG",-0.782000f,1.276000f,0.391000f,0.646200f); SetAtom(&F.Atoms[ 9 ] , "O",2.533000f,-1.237000f,-1.489000f,-0.567900f); SetAtom(&F.Atoms[ 10 ] , "HA",0.185000f,-0.559000f,-1.315000f,0.086400f); SetAtom(&F.Atoms[ 11 ] , "OD2",-1.546000f,1.043000f,-0.546000f,-0.637600f); SetAtom(&F.Atoms[ 12 ] , "HD2",-2.314000f,1.619000f,-0.711000f,0.474700f); } else if ( !strcmp(Name, "Lcys" ) ){ F.NAtoms = 11 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.060f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.076f, -0.748f, 1.283f, 0.038f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.528f, -0.252f, 2.075f, 0.038f ); SetAtom(&F.Atoms[ 9 ], "SG", 1.409f, -2.479f, 1.367f, -0.135f ); SetAtom(&F.Atoms[ 10 ], "HG", 1.890f, -3.023f, 2.481f, 0.135f ); } else if ( !strcmp(Name, "Lcyx" ) ){ F.NAtoms = 10 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.076f, -0.748f, 1.283f, 0.0495f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.528f, -0.252f, 2.075f, 0.0495f ); SetAtom(&F.Atoms[ 9 ], "SG", 1.409f, -2.479f, 1.367f, 0.015f ); } else if ( !strcmp(Name, "Lcym" ) ){ F.NAtoms = 10 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.41570f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.27190f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, -0.03510f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.05080f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.59730f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.56790f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.24130f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.076f, -0.748f, 1.283f, 0.11220f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.528f, -0.252f, 2.075f, 0.11220f ); SetAtom(&F.Atoms[ 9 ], "SG", 1.409f, -2.479f, 1.367f, -0.88440f ); } else if ( !strcmp(Name, "Lgln" ) ){ F.NAtoms = 17 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.077f, -0.816f, 1.241f, 0.038f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.638f, -0.260f, 2.131f, 0.038f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.418f, -2.182f, 1.194f, -0.102f ); SetAtom(&F.Atoms[ 10 ], "HG1", 0.330f, -2.135f, 1.168f, 0.057f ); SetAtom(&F.Atoms[ 11 ], "HG2", 1.792f, -2.681f, 0.300f, 0.057f ); SetAtom(&F.Atoms[ 12 ], "CD", 1.861f, -2.984f, 2.410f, 0.675f ); SetAtom(&F.Atoms[ 13 ], "OE1", 2.585f, -2.476f, 3.263f, -0.470f ); SetAtom(&F.Atoms[ 14 ], "NE2", 1.422f, -4.243f, 2.489f, -0.867f ); SetAtom(&F.Atoms[ 15 ], "HE21", 0.828f, -4.614f, 1.761f, 0.344f ); SetAtom(&F.Atoms[ 16 ], "HE22", 1.687f, -4.819f, 3.275f, 0.344f ); } else if ( !strcmp(Name, "Lglu" ) ){ F.NAtoms = 15 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.184f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.077f, -0.816f, 1.241f, 0.092f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.638f, -0.260f, 2.131f, 0.092f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.423f, -2.168f, 1.195f, -0.398f ); SetAtom(&F.Atoms[ 10 ], "HG1", 0.334f, -2.122f, 1.187f, 0.071f ); SetAtom(&F.Atoms[ 11 ], "HG2", 1.772f, -2.678f, 0.296f, 0.071f ); SetAtom(&F.Atoms[ 12 ], "CD", 1.890f, -2.939f, 2.429f, 0.714f ); SetAtom(&F.Atoms[ 13 ], "OE1", 1.161f, -2.878f, 3.455f, -0.721f ); SetAtom(&F.Atoms[ 14 ], "OE2", 2.971f, -3.578f, 2.334f, -0.721f ); } else if ( !strcmp(Name, "Lglh" ) ) { F.NAtoms = 16; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "O",-1.949000f,-2.791000f,-0.835000f,-0.567900f); SetAtom(&F.Atoms[ 1 ] , "C",-2.296000f,-1.802000f,-0.153000f,0.597300f); SetAtom(&F.Atoms[ 2 ] , "HB2",-0.260000f,-0.468000f,-1.065000f,0.025600f); SetAtom(&F.Atoms[ 3 ] , "HB1",-1.151000f,0.749000f,-0.440000f,0.025600f); SetAtom(&F.Atoms[ 4 ] , "CB",-0.538000f,0.009000f,-0.257000f,-0.007100f); SetAtom(&F.Atoms[ 5 ] , "CA",-1.275000f,-0.999000f,0.652000f,0.014500f); SetAtom(&F.Atoms[ 6 ] , "HE2",1.420000f,3.318000f,-1.234000f,0.464100f); SetAtom(&F.Atoms[ 7 ] , "OE2",1.029000f,2.636000f,-0.762000f,-0.651100f); SetAtom(&F.Atoms[ 8 ] , "H",0.472000f,-2.367000f,0.675000f,0.271900f); SetAtom(&F.Atoms[ 9 ] , "HA",-1.724000f,-0.520000f,1.384000f,0.077900f); SetAtom(&F.Atoms[ 10 ] , "CD",1.504000f,1.556000f,-0.485000f,0.680100f); SetAtom(&F.Atoms[ 11 ] , "OE1",2.602000f,1.115000f,-0.903000f,-0.583800f); SetAtom(&F.Atoms[ 12 ] , "N",-0.329000f,-1.992000f,1.215000f,-0.415700f); SetAtom(&F.Atoms[ 13 ] , "CG",0.726000f,0.604000f,0.386000f,-0.017400f); SetAtom(&F.Atoms[ 14 ] , "HG1",1.325000f,-0.151000f,0.624000f,0.043000f); SetAtom(&F.Atoms[ 15 ] , "HG2",0.443000f,1.096000f,1.200000f,0.043000f); } else if ( !strcmp(Name, "Lgly" ) ){ F.NAtoms = 7 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.027f, 1.358f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.697f, 1.839f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA1", 1.886f, -0.523f, -0.885f, 0.032f ); SetAtom(&F.Atoms[ 4 ], "HA2", 1.874f, -0.506f, 0.899f, 0.032f); SetAtom(&F.Atoms[ 5 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 6 ], "O", -0.624f, 1.058f, 0.000f, -0.504f ); } else if ( !strcmp(Name, "Lhid" ) ){ F.NAtoms = 17 ; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.076f, -0.759f, 1.276f, 0.038f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.547f, -0.251f, 2.084f, 0.038f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.492f, -2.192f, 1.321f, -0.032f ); SetAtom(&F.Atoms[ 10 ], "ND1", 1.829f, -3.024f, 2.383f, -0.146f ); SetAtom(&F.Atoms[ 11 ], "HD1", 2.411f, -2.777f, 3.169f, 0.228f ); SetAtom(&F.Atoms[ 12 ], "CD2", 0.698f, -2.921f, 0.493f, 0.195f ); SetAtom(&F.Atoms[ 13 ], "HD2", 0.306f, -2.473f, -0.421f, 0.018f ); SetAtom(&F.Atoms[ 14 ], "CE1", 1.252f, -4.194f, 2.183f, 0.241f ); SetAtom(&F.Atoms[ 15 ], "HE1", 1.387f, -5.000f, 2.905f, 0.036f ); SetAtom(&F.Atoms[ 16 ], "NE2", 0.576f, -4.150f, 1.061f, -0.502f ); } else if ( !strcmp(Name, "Lhie" ) ){ F.NAtoms = 17; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.076f, -0.759f, 1.276f, 0.038f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.547f, -0.251f, 2.084f, 0.038f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.492f, -2.192f, 1.321f, 0.251f ); SetAtom(&F.Atoms[ 10 ], "ND1", 1.829f, -3.024f, 2.383f, -0.502f ); SetAtom(&F.Atoms[ 11 ], "CD2", 0.698f, -2.921f, 0.493f, -0.184f ); SetAtom(&F.Atoms[ 12 ], "HD2", 0.306f, -2.473f, -0.421f, 0.114f ); SetAtom(&F.Atoms[ 13 ], "CE1", 1.252f, -4.194f, 2.183f, 0.241f ); SetAtom(&F.Atoms[ 14 ], "HE1", 1.387f, -5.000f, 2.905f, 0.036f ); SetAtom(&F.Atoms[ 15 ], "NE2", 0.576f, -4.150f, 1.061f, -0.146f ); SetAtom(&F.Atoms[ 16 ], "HE2", 0.041f, -4.916f, 0.677f, 0.228f ); } else if ( !strcmp(Name, "Lhip" ) ){ F.NAtoms = 18; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.076f, -0.759f, 1.276f, 0.086f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.547f, -0.251f, 2.084f, 0.086f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.492f, -2.192f, 1.321f, 0.058f ); SetAtom(&F.Atoms[ 10 ], "ND1", 1.829f, -3.024f, 2.383f, -0.058f ); SetAtom(&F.Atoms[ 11 ], "HD1", 2.411f, -2.777f, 3.169f, 0.306f ); SetAtom(&F.Atoms[ 12 ], "CD2", 0.698f, -2.921f, 0.493f, -0.037f ); SetAtom(&F.Atoms[ 13 ], "HD2", 0.306f, -2.473f, -0.421f, 0.153f ); SetAtom(&F.Atoms[ 14 ], "CE1", 1.252f, -4.194f, 2.183f, 0.114f ); SetAtom(&F.Atoms[ 15 ], "HE1", 1.387f, -5.000f, 2.905f, 0.158f ); SetAtom(&F.Atoms[ 16 ], "NE2", 0.576f, -4.150f, 1.061f, -0.058f ); SetAtom(&F.Atoms[ 17 ], "HE2", 0.041f, -4.916f, 0.677f, 0.306f ); } else if ( !strcmp(Name, "Lhis" ) ){ F.NAtoms = 18; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.076f, -0.759f, 1.276f, 0.086f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.547f, -0.251f, 2.084f, 0.086f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.492f, -2.192f, 1.321f, 0.058f ); SetAtom(&F.Atoms[ 10 ], "ND1", 1.829f, -3.024f, 2.383f, -0.058f ); SetAtom(&F.Atoms[ 11 ], "HD1", 2.411f, -2.777f, 3.169f, 0.306f ); SetAtom(&F.Atoms[ 12 ], "CD2", 0.698f, -2.921f, 0.493f, -0.037f ); SetAtom(&F.Atoms[ 13 ], "HD2", 0.248f, -2.587f, -0.442f, 0.153f ); SetAtom(&F.Atoms[ 14 ], "CE1", 1.252f, -4.194f, 2.183f, 0.114f ); SetAtom(&F.Atoms[ 15 ], "HE1", 1.327f, -5.058f, 2.843f, 0.158f ); SetAtom(&F.Atoms[ 16 ], "NE2", 0.576f, -4.150f, 1.061f, -0.058f ); SetAtom(&F.Atoms[ 17 ], "HE2", 0.041f, -4.916f, 0.677f, 0.306f ); } else if ( !strcmp(Name, "Lile" ) ){ F.NAtoms = 19; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.875f, -0.500f, -0.902f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 2.009f, -0.733f, 1.245f, -0.012f ); SetAtom(&F.Atoms[ 7 ], "HB", 3.098f, -0.765f, 1.245f, 0.022f ); SetAtom(&F.Atoms[ 8 ], "CG1", 1.459f, -2.156f, 1.245f, -0.049f ); SetAtom(&F.Atoms[ 9 ], "HG11", 0.370f, -2.124f, 1.245f, 0.027f ); SetAtom(&F.Atoms[ 10 ], "HG12", 1.807f, -2.680f, 0.355f, 0.027f ); SetAtom(&F.Atoms[ 11 ], "CG2", 1.522f, 0.000f, 2.491f, -0.085f ); SetAtom(&F.Atoms[ 12 ], "HG21", 1.870f, -0.524f, 3.381f, 0.029f ); SetAtom(&F.Atoms[ 13 ], "HG22", 1.914f, 1.017f, 2.490f, 0.029f ); SetAtom(&F.Atoms[ 14 ], "HG23", 0.432f, 0.032f, 2.491f, 0.029f ); SetAtom(&F.Atoms[ 15 ], "CD", 1.947f, -2.889f, 2.491f, -0.085f ); SetAtom(&F.Atoms[ 16 ], "HD1", 1.554f, -3.906f, 2.490f, 0.028f ); SetAtom(&F.Atoms[ 17 ], "HD2", 3.036f, -2.921f, 2.491f, 0.028f); SetAtom(&F.Atoms[ 18 ], "HD3", 1.599f, -2.365f, 3.381f, 0.028f ); } else if ( !strcmp(Name, "Lleu" ) ){ F.NAtoms = 19; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.061f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.077f, -0.816f, 1.241f, 0.033f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.638f, -0.260f, 2.131f, 0.033f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.418f, -2.182f, 1.194f, -0.010f ); SetAtom(&F.Atoms[ 10 ], "HG", 0.329f, -2.136f, 1.186f, 0.031f ); SetAtom(&F.Atoms[ 11 ], "CD1", 1.906f, -2.894f, -0.063f, -0.107f ); SetAtom(&F.Atoms[ 12 ], "HD11", 1.499f, -3.905f, -0.090f, 0.034f ); SetAtom(&F.Atoms[ 13 ], "HD12", 1.573f, -2.345f, -0.943f, 0.034f ); SetAtom(&F.Atoms[ 14 ], "HD13", 2.995f, -2.941f, -0.055f, 0.034f ); SetAtom(&F.Atoms[ 15 ], "CD2", 1.884f, -2.951f, 2.427f, -0.107f ); SetAtom(&F.Atoms[ 16 ], "HD21", 1.476f, -3.962f, 2.400f, 0.034f ); SetAtom(&F.Atoms[ 17 ], "HD22", 2.973f, -2.998f, 2.436f, 0.034f ); SetAtom(&F.Atoms[ 18 ], "HD23", 1.534f, -2.443f, 3.325f, 0.034f ); } else if ( !strcmp(Name, "Llys" ) ){ F.NAtoms = 22; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.077f, -0.816f, 1.241f, 0.038f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.638f, -0.260f, 2.131f, 0.038f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.418f, -2.182f, 1.194f, -0.160f ); SetAtom(&F.Atoms[ 10 ], "HG1", 0.329f, -2.136f, 1.186f, 0.116f ); SetAtom(&F.Atoms[ 11 ], "HG2", 1.767f, -2.692f, 0.296f, 0.116f ); SetAtom(&F.Atoms[ 12 ], "CD", 1.884f, -2.951f, 2.427f, -0.180f ); SetAtom(&F.Atoms[ 13 ], "HD1", 2.973f, -2.998f, 2.436f, 0.122f ); SetAtom(&F.Atoms[ 14 ], "HD2", 1.534f, -2.443f, 3.325f, 0.122f ); SetAtom(&F.Atoms[ 15 ], "CE", 1.314f, -4.366f, 2.389f, -0.038f ); SetAtom(&F.Atoms[ 16 ], "HE1", 0.225f, -4.318f, 2.381f, 0.098f ); SetAtom(&F.Atoms[ 17 ], "HE2", 1.663f, -4.874f, 1.491f, 0.098f ); SetAtom(&F.Atoms[ 18 ], "NZ", 1.763f, -5.107f, 3.577f, -0.138f ); SetAtom(&F.Atoms[ 19 ], "HZ1", 1.385f, -6.042f, 3.552f, 0.294f ); SetAtom(&F.Atoms[ 20 ], "HZ2", 2.772f, -5.150f, 3.585f, 0.294f ); SetAtom(&F.Atoms[ 21 ], "HZ3", 1.440f, -4.635f, 4.409f, 0.294f ); } else if ( !strcmp(Name, "Llyn" ) ) { F.NAtoms = 21; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "O",1.729000f,2.855000f,-1.324000f,-0.567900f); SetAtom(&F.Atoms[ 1 ] , "HB2",-0.594000f,1.168000f,-0.595000f,0.034000f); SetAtom(&F.Atoms[ 2 ] , "HD2",-2.511000f,-0.662000f,-0.388000f,0.011500f); SetAtom(&F.Atoms[ 3 ] , "HB1",0.254000f,0.058000f,-1.823000f,0.034000f); SetAtom(&F.Atoms[ 4 ] , "HD1",-1.606000f,-1.734000f,-1.575000f,0.011500f); SetAtom(&F.Atoms[ 5 ] , "C",2.134000f,1.720000f,-1.093000f,0.597300f); SetAtom(&F.Atoms[ 6 ] , "CB",0.182000f,0.284000f,-0.668000f,-0.048500f); SetAtom(&F.Atoms[ 7 ] , "CD",-1.665000f,-1.482000f,-0.425000f,-0.037700f); SetAtom(&F.Atoms[ 8 ] , "CA",1.506000f,0.798000f,-0.055000f,-0.072100f); SetAtom(&F.Atoms[ 9 ] , "CG",-0.393000f,-0.877000f,0.146000f,0.066100f); SetAtom(&F.Atoms[ 10 ] , "HE2",-2.932000f,-3.309000f,-0.094000f,-0.033600f); SetAtom(&F.Atoms[ 11 ] , "H",2.128000f,2.311000f,1.352000f,0.271900f); SetAtom(&F.Atoms[ 12 ] , "N",1.310000f,1.473000f,1.221000f,-0.415700f); SetAtom(&F.Atoms[ 13 ] , "HZ1",-2.048000f,-1.163000f,2.067000f,0.386000f); SetAtom(&F.Atoms[ 14 ] , "CE",-2.109000f,-2.678000f,0.468000f,0.326000f); SetAtom(&F.Atoms[ 15 ] , "NZ",-2.693000f,-2.090000f,1.730000f,-1.035800f); SetAtom(&F.Atoms[ 16 ] , "HG1",-0.493000f,-0.618000f,1.292000f,0.010400f); SetAtom(&F.Atoms[ 17 ] , "HG2",0.412000f,-1.734000f,0.051000f,0.010400f); SetAtom(&F.Atoms[ 18 ] , "HA",2.218000f,-0.109000f,0.193000f,0.099400f); SetAtom(&F.Atoms[ 19 ] , "HZ2",-2.884000f,-2.879000f,2.585000f,0.386000f); SetAtom(&F.Atoms[ 20 ] , "HE1",-1.284000f,-3.503000f,0.640000f,-0.033600f); } else if ( !strcmp(Name, "Lmet" ) ){ F.NAtoms = 17; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.151f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.077f, -0.816f, 1.241f, 0.027f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.638f, -0.260f, 2.131f, 0.027f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.418f, -2.182f, 1.194f, -0.054f ); SetAtom(&F.Atoms[ 10 ], "HG1", 0.329f, -2.135f, 1.179f, 0.0652f ); SetAtom(&F.Atoms[ 11 ], "HG2", 1.775f, -2.688f, 0.297f, 0.0652f ); SetAtom(&F.Atoms[ 12 ], "SD", 1.962f, -3.109f, 2.652f, -0.025f ); SetAtom(&F.Atoms[ 13 ], "CE", 1.167f, -4.670f, 2.341f, -0.134f ); SetAtom(&F.Atoms[ 14 ], "HE1", 1.399f, -5.364f, 3.149f, 0.0652f ); SetAtom(&F.Atoms[ 15 ], "HE2", 0.088f, -4.523f, 2.287f, 0.0652f ); SetAtom(&F.Atoms[ 16 ], "HE3", 1.525f, -5.079f, 1.396f, 0.0652f ); } else if ( !strcmp(Name, "Lnme" ) ){ F.NAtoms = 6; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", -1.227f, 0.728f, 2.125f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", -1.124f, -0.261f, 1.947f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CH3", -1.918f, 1.159f, 3.323f, 0.03502f ); SetAtom(&F.Atoms[ 3 ], "HH31", -1.939f, 2.249f, 3.358f, 0.0586f ); SetAtom(&F.Atoms[ 4 ], "HH32", -2.939f, 0.777f, 3.311f, 0.0586f ); SetAtom(&F.Atoms[ 5 ], "HH33", -1.398f, 0.777f, 4.201f, 0.0586f ); } else if ( !strcmp(Name, "Lnhe" ) ){ F.NAtoms = 3; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 1.074f, -6.424f, -3.287f, -0.624f ); SetAtom(&F.Atoms[ 1 ], "H1", 0.494f, -6.652f, -2.492f, 0.361f ); SetAtom(&F.Atoms[ 2 ], "H2", 1.252f, -7.112f, -4.004f, 0.361f ); } else if ( !strcmp(Name, "Lphe" ) ){ F.NAtoms = 20; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.100f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.076f, -0.759f, 1.276f, 0.108f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.547f, -0.251f, 2.084f, 0.108f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.492f, -2.192f, 1.321f, -0.100f ); SetAtom(&F.Atoms[ 10 ], "CD1", 1.856f, -2.993f, 2.410f, -0.150f ); SetAtom(&F.Atoms[ 11 ], "HD1", 2.497f, -2.589f, 3.194f, 0.150f ); SetAtom(&F.Atoms[ 12 ], "CD2", 0.669f, -2.712f, 0.315f, -0.150f ); SetAtom(&F.Atoms[ 13 ], "HD2", 0.385f, -2.087f, -0.533f, 0.150f ); SetAtom(&F.Atoms[ 14 ], "CE1", 1.398f, -4.313f, 2.492f, -0.150f ); SetAtom(&F.Atoms[ 15 ], "HE1", 1.681f, -4.937f, 3.340f, 0.150f ); SetAtom(&F.Atoms[ 16 ], "CE2", 0.210f, -4.031f, 0.397f, -0.150f ); SetAtom(&F.Atoms[ 17 ], "HE2", -0.431f, -4.435f, -0.386f, 0.150f ); SetAtom(&F.Atoms[ 18 ], "CZ", 0.575f, -4.833f, 1.486f, -0.150f ); SetAtom(&F.Atoms[ 19 ], "HZ", 0.217f, -5.860f, 1.550f, 0.150f ); } else if ( !strcmp(Name, "Lpro" ) ){ F.NAtoms = 14; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 1.308, -0.309, -0.502, -0.229f ); SetAtom(&F.Atoms[ 1 ], "CA", 0.530, 0.966, -0.441, 0.035f ); SetAtom(&F.Atoms[ 2 ], "HA", 0.207, 1.291, -1.428, 0.048f ); SetAtom(&F.Atoms[ 3 ], "C", 1.356, 2.102, 0.114, 0.526f ); SetAtom(&F.Atoms[ 4 ], "O", 1.874, 2.004, 1.270, -0.500f ); SetAtom(&F.Atoms[ 5 ], "CB", -0.664, 0.627, 0.470, -0.115f ); SetAtom(&F.Atoms[ 6 ], "HB1", -0.406, 0.733, 1.523, 0.061f ); SetAtom(&F.Atoms[ 7 ], "HB2", -1.519, 1.266, 0.264, 0.061f ); SetAtom(&F.Atoms[ 8 ], "CG", -0.952, -0.841, 0.104, -0.121f ); SetAtom(&F.Atoms[ 9 ], "HG1", -1.728, -0.878, -0.658, 0.063f ); SetAtom(&F.Atoms[ 10 ], "HG2",-1.253, -1.385, 0.997, 0.063f ); SetAtom(&F.Atoms[ 11 ], "CD", 0.346, -1.452, -0.456, -0.0012f ); SetAtom(&F.Atoms[ 12 ], "HD1", 0.714, -2.249, 0.188, 0.060f ); SetAtom(&F.Atoms[ 13 ], "HD2", 0.187, -1.872, -1.446, 0.060f ); } else if ( !strcmp(Name, "Lser" ) ){ F.NAtoms = 11; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, 0.018f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.077f, -0.816f, 1.241f, 0.119f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.638f, -0.260f, 2.131f, 0.119f ); SetAtom(&F.Atoms[ 9 ], "OG", 1.453f, -2.094f, 1.197f, -0.550f ); SetAtom(&F.Atoms[ 10 ], "HG", 1.746f, -2.579f, 1.973f, 0.310f ); } else if ( !strcmp(Name, "Lthr" ) ){ F.NAtoms = 14; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, 0.170f ); SetAtom(&F.Atoms[ 7 ], "HB", 1.580f, -1.780f, 1.205f, 0.082f ); SetAtom(&F.Atoms[ 8 ], "OG1", 1.530f, -0.101f, 2.411f, -0.550f ); SetAtom(&F.Atoms[ 9 ], "HG1", 1.823f, -0.585f, 3.187f, 0.310f ); SetAtom(&F.Atoms[ 10 ], "CG2", 3.510f, -0.835f, 1.244f, -0.191f ); SetAtom(&F.Atoms[ 11 ], "HG21", 3.844f, -1.384f, 2.125f, 0.065f ); SetAtom(&F.Atoms[ 12 ], "HG22", 3.860f, -1.343f, 0.346f, 0.065f ); SetAtom(&F.Atoms[ 13 ], "HG23", 3.918f, 0.177f, 1.271f, 0.065f ); } else if ( !strcmp(Name, "Ltrp" ) ){ F.NAtoms = 24; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.076f, -0.759f, 1.276f, 0.038f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.547f, -0.251f, 2.084f, 0.038f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.492f, -2.192f, 1.321f, -0.0135f ); SetAtom(&F.Atoms[ 10 ], "CD1", 1.752f, -3.078f, 2.293f, 0.044f ); SetAtom(&F.Atoms[ 11 ], "HD1", 2.365f, -2.906f, 3.178f, 0.093f ); SetAtom(&F.Atoms[ 12 ], "CD2", 0.669f, -2.868f, 0.412f, 0.146f ); SetAtom(&F.Atoms[ 13 ], "NE1", 1.072f, -4.288f, 1.950f, -0.352f ); SetAtom(&F.Atoms[ 14 ], "HE1", 1.079f, -5.139f, 2.493f, 0.271f ); SetAtom(&F.Atoms[ 15 ], "CE2", 0.438f, -4.113f, 0.817f, 0.154f ); SetAtom(&F.Atoms[ 16 ], "CE3", 0.103f, -2.412f, -0.785f, -0.173f ); SetAtom(&F.Atoms[ 17 ], "HE3", 0.273f, -1.397f, -1.145f, 0.086f ); SetAtom(&F.Atoms[ 18 ], "CZ2", -0.350f, -5.037f, 0.120f, -0.168f ); SetAtom(&F.Atoms[ 19 ], "HZ2", -0.515f, -6.050f, 0.487f, 0.084f ); SetAtom(&F.Atoms[ 20 ], "CZ3", -0.694f, -3.325f, -1.505f, -0.066f ); SetAtom(&F.Atoms[ 21 ], "HZ3", -1.150f, -3.005f, -2.442f, 0.057f ); SetAtom(&F.Atoms[ 22 ], "CH2", -0.912f, -4.584f, -1.069f, -0.077f ); SetAtom(&F.Atoms[ 23 ], "HH2", -1.535f, -5.257f, -1.658f, 0.074f ); } else if ( !strcmp(Name, "Ltyr" ) ){ F.NAtoms = 21; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 3.077f, -0.816f, 1.241f, 0.038f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.638f, -0.260f, 2.131f, 0.038f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.423f, -2.168f, 1.195f, -0.030f ); SetAtom(&F.Atoms[ 10 ], "CD1", 1.715f, -3.068f, 2.227f, -0.002f ); SetAtom(&F.Atoms[ 11 ], "HD1", 2.348f, -2.758f, 3.058f, 0.064f ); SetAtom(&F.Atoms[ 12 ], "CD2", 0.609f, -2.567f, 0.128f, -0.002f ); SetAtom(&F.Atoms[ 13 ], "HD2", 0.382f, -1.867f, -0.676f, 0.064f ); SetAtom(&F.Atoms[ 14 ], "CE1", 1.192f, -4.367f, 2.193f, -0.264f ); SetAtom(&F.Atoms[ 15 ], "HE1", 1.418f, -5.067f, 2.996f, 0.102f ); SetAtom(&F.Atoms[ 16 ], "CE2", 0.086f, -3.866f, 0.093f, -0.264f ); SetAtom(&F.Atoms[ 17 ], "HE2", -0.548f, -4.176f, -0.737f, 0.102f ); SetAtom(&F.Atoms[ 18 ], "CZ", 0.378f, -4.766f, 1.126f, 0.462f ); SetAtom(&F.Atoms[ 19 ], "OH", -0.131f, -6.026f, 1.092f, -0.528f ); SetAtom(&F.Atoms[ 20 ], "HH", 0.132f, -6.557f, 1.849f, 0.334f ); } else if ( !strcmp(Name, "Lval" ) ){ F.NAtoms = 16; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, -0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, 1.233f, -0.012f ); SetAtom(&F.Atoms[ 7 ], "HB", 3.077f, -0.816f, 1.241f, 0.024f ); SetAtom(&F.Atoms[ 8 ], "CG1", 1.499f, -0.057f, 2.490f, -0.091f ); SetAtom(&F.Atoms[ 9 ], "HG11", 1.832f, -0.606f, 3.370f, 0.031f ); SetAtom(&F.Atoms[ 10 ], "HG12", 1.906f, 0.953f, 2.516f, 0.031f ); SetAtom(&F.Atoms[ 11 ], "HG13", 0.410f, -0.010f, 2.481f, 0.031f ); SetAtom(&F.Atoms[ 12 ], "CG2", 1.418f, -2.182f, 1.194f, -0.091f ); SetAtom(&F.Atoms[ 13 ], "HG21", 1.751f, -2.732f, 2.075f, 0.031f ); SetAtom(&F.Atoms[ 14 ], "HG22", 0.329f, -2.136f, 1.186f, 0.031f ); SetAtom(&F.Atoms[ 15 ], "HG23", 1.767f, -2.692f, 0.296f, 0.031f ); } else if ( !strcmp(Name, "Lnmet" ) ) { F.NAtoms = 19; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "H1",0.908681f,-1.794836f,2.943187f,0.198400f); SetAtom(&F.Atoms[ 1 ] , "H3",2.228918f,-1.389931f,1.627620f,0.198400f); SetAtom(&F.Atoms[ 2 ] , "H2",1.146678f,0.003813f,2.153970f,0.198400f); SetAtom(&F.Atoms[ 3 ] , "N",1.125100f,-1.161000f,1.972900f,0.159200f); SetAtom(&F.Atoms[ 4 ] , "HB2",-1.008657f,-0.109078f,1.797042f,0.012500f); SetAtom(&F.Atoms[ 5 ] , "CA",0.232100f,-1.577000f,0.915900f,0.022100f); SetAtom(&F.Atoms[ 6 ] , "HA",-0.357581f,-2.564897f,1.173538f,0.111600f); SetAtom(&F.Atoms[ 7 ] , "O",2.203100f,-1.338000f,-0.554100f,-0.571300f); SetAtom(&F.Atoms[ 8 ] , "HG2",0.168100f,1.174000f,0.324900f,0.029200f); SetAtom(&F.Atoms[ 9 ] , "C",1.108100f,-1.886000f,-0.322100f,0.612300f); SetAtom(&F.Atoms[ 10 ] , "CB",-0.867900f,-0.572000f,0.721900f,0.086500f); SetAtom(&F.Atoms[ 11 ] , "CG",-0.544900f,0.602000f,-0.118100f,0.033400f); SetAtom(&F.Atoms[ 12 ] , "HB1",-1.877593f,-1.083765f,0.392268f,0.012500f); SetAtom(&F.Atoms[ 13 ] , "HG1",-0.143235f,0.201135f,-1.151547f,0.029200f); SetAtom(&F.Atoms[ 14 ] , "HE1",-0.486463f,3.507001f,-0.887983f,0.059700f); SetAtom(&F.Atoms[ 15 ] , "SD",-2.055900f,1.642000f,-0.404100f,-0.277400f); SetAtom(&F.Atoms[ 16 ] , "CE",-1.193900f,2.807000f,-1.520100f,-0.034100f); SetAtom(&F.Atoms[ 17 ] , "HE3",-0.520300f,2.176494f,-2.254107f,0.059700f); SetAtom(&F.Atoms[ 18 ] , "HE2",-1.909283f,3.385429f,-2.257452f,0.059700f); } else if ( !strcmp(Name, "Lnser" ) ) { F.NAtoms = 13; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "O",-2.281000f,1.023000f,-0.519000f,-0.572200f); SetAtom(&F.Atoms[ 1 ] , "HB2",-0.045000f,-0.256000f,1.687000f,0.027300f); SetAtom(&F.Atoms[ 2 ] , "C",-1.657000f,-0.037000f,-0.519000f,0.616300f); SetAtom(&F.Atoms[ 3 ] , "H3",0.064000f,1.800000f,0.305000f,0.189800f); SetAtom(&F.Atoms[ 4 ] , "HG",0.088000f,-2.616000f,1.454000f,0.423900f); SetAtom(&F.Atoms[ 5 ] , "OG",-0.204000f,-2.130000f,0.678000f,-0.671400f); SetAtom(&F.Atoms[ 6 ] , "CB",0.331000f,-0.805000f,0.714000f,0.259600f); SetAtom(&F.Atoms[ 7 ] , "CA",-0.135000f,-0.037000f,-0.519000f,0.056700f); SetAtom(&F.Atoms[ 8 ] , "N",0.387000f,1.316000f,-0.519000f,0.184900f); SetAtom(&F.Atoms[ 9 ] , "H1",0.204000f,1.903000f,-1.525000f,0.189800f); SetAtom(&F.Atoms[ 10 ] , "HB1",1.420000f,-0.852000f,0.722000f,0.027300f); SetAtom(&F.Atoms[ 11 ] , "H2",1.563000f,1.251000f,-0.466000f,0.189800f); SetAtom(&F.Atoms[ 12 ] , "HA",0.269000f,-0.555000f,-1.497000f,0.078200f); } else if ( !strcmp(Name, "Lroh" ) ) { F.NAtoms = 26; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "HA",2.974000f,-0.251000f,-1.589000f,-0.013000f); SetAtom(&F.Atoms[ 1 ] , "HG2",0.512000f,0.260000f,-1.433000f,0.078100f); SetAtom(&F.Atoms[ 2 ] , "HB1",1.407000f,-1.903000f,-0.628000f,0.162200f); SetAtom(&F.Atoms[ 3 ] , "CA",2.975000f,-0.436000f,-0.515000f,0.613500f); SetAtom(&F.Atoms[ 4 ] , "N",4.035000f,-1.390000f,-0.257000f,-0.687400f); SetAtom(&F.Atoms[ 5 ] , "HD1",-1.024000f,-1.432000f,-0.465000f,0.055100f); SetAtom(&F.Atoms[ 6 ] , "HE",-1.655000f,1.356000f,-0.611000f,0.383700f); SetAtom(&F.Atoms[ 7 ] , "CG",0.537000f,0.044000f,-0.365000f,-0.121200f); SetAtom(&F.Atoms[ 8 ] , "HH21",-3.760000f,2.047000f,-0.602000f,0.511600f); SetAtom(&F.Atoms[ 9 ] , "CB",1.621000f,-0.988000f,-0.077000f,-0.426200f); SetAtom(&F.Atoms[ 10 ] , "OH",2.519000f,1.823000f,-0.102000f,-0.747600f); SetAtom(&F.Atoms[ 11 ] , "NE",-1.898000f,0.470000f,-0.192000f,-0.707500f); SetAtom(&F.Atoms[ 12 ] , "CD",-0.817000f,-0.507000f,0.072000f,0.185000f); SetAtom(&F.Atoms[ 13 ] , "C",3.212000f,0.865000f,0.239000f,0.683200f); SetAtom(&F.Atoms[ 14 ] , "NH2",-4.064000f,1.181000f,-0.182000f,-1.121400f); SetAtom(&F.Atoms[ 15 ] , "HG1",0.750000f,0.960000f,0.186000f,0.126700f); SetAtom(&F.Atoms[ 16 ] , "HO",2.750000f,2.721000f,0.195000f,0.544600f); SetAtom(&F.Atoms[ 17 ] , "CZ",-3.174000f,0.233000f,0.098000f,1.082900f); SetAtom(&F.Atoms[ 18 ] , "HH22",-5.041000f,1.030000f,0.026000f,0.514900f); SetAtom(&F.Atoms[ 19 ] , "H",4.073000f,-1.591000f,0.731000f,0.362500f); SetAtom(&F.Atoms[ 20 ] , "NH1",-3.572000f,-0.910000f,0.650000f,-0.981100f); SetAtom(&F.Atoms[ 21 ] , "O",4.222000f,1.002000f,0.965000f,-0.590800f); SetAtom(&F.Atoms[ 22 ] , "HB2",1.645000f,-1.202000f,0.991000f,0.097600f); SetAtom(&F.Atoms[ 23 ] , "HH11",-2.894000f,-1.627000f,0.862000f,0.452300f); SetAtom(&F.Atoms[ 24 ] , "HH12",-4.549000f,-1.055000f,0.857000f,0.483000f); SetAtom(&F.Atoms[ 25 ] , "HD2",-0.780000f,-0.699000f,1.145000f,0.059300f); } else if ( !strcmp(Name, "Dace" ) ){ F.NAtoms = 6; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "HH31", 0.000f, 0.000f, 0.000f,0.000f ); SetAtom(&F.Atoms[ 1 ], "CH3", 0.000f, 1.090f, 0.000f,0.000f ); SetAtom(&F.Atoms[ 2 ], "HH32", 1.028f, 1.453f, 0.000f,0.000f ); SetAtom(&F.Atoms[ 3 ], "HH33", -0.514f, 1.453f, -0.890f ,0.000f); SetAtom(&F.Atoms[ 4 ], "C", -0.721f, 1.600f, 1.249f, 0.616f); SetAtom(&F.Atoms[ 5 ], "O", -0.839f, 2.806f, 1.453f, -0.504f); } else if ( !strcmp(Name, "Dala" ) ){ F.NAtoms = 10; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.580f, -1.779f, -1.205f, 0.036f ); SetAtom(&F.Atoms[ 8 ], "HB2", 1.638f, -0.260f, -2.131f, 0.036f ); SetAtom(&F.Atoms[ 9 ], "HB3", 3.077f, -0.816f, -1.241f, 0.036f ); } else if ( !strcmp(Name, "Darg" ) ){ F.NAtoms = 24; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.080f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.638f, -0.260f, -2.131f, 0.056f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.077f, -0.816f, -1.241f, 0.056f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.418f, -2.183f, -1.195f, -0.103f ); SetAtom(&F.Atoms[ 10 ], "HG1", 1.767f, -2.692f, -0.296f, 0.074f ); SetAtom(&F.Atoms[ 11 ], "HG2", 0.328f, -2.136f, -1.186f, 0.074f ); SetAtom(&F.Atoms[ 12 ], "CD", 1.884f, -2.951f, -2.427f, -0.228f ); SetAtom(&F.Atoms[ 13 ], "HD1", 1.549f, -2.433f, -3.326f, 0.133f ); SetAtom(&F.Atoms[ 14 ], "HD2", 2.972f, -3.004f, -2.410f, 0.133f ); SetAtom(&F.Atoms[ 15 ], "NE", 1.348f, -4.332f, -2.424f, -0.324f ); SetAtom(&F.Atoms[ 16 ], "HE", 0.761f, -4.619f, -1.655f, 0.269f ); SetAtom(&F.Atoms[ 17 ], "CZ", 1.606f, -5.210f, -3.390f, 0.760f ); SetAtom(&F.Atoms[ 18 ], "NH1", 2.371f, -4.905f, -4.434f, -0.624f ); SetAtom(&F.Atoms[ 19 ], "HH11", 2.774f, -3.982f, -4.509f, 0.361f ); SetAtom(&F.Atoms[ 20 ], "HH12", 2.545f, -5.597f, -5.148f, 0.361f ); SetAtom(&F.Atoms[ 21 ], "NH2", 1.074f, -6.424f, -3.287f, -0.624f ); SetAtom(&F.Atoms[ 22 ], "HH21", 0.494f, -6.652f, -2.492f, 0.361f ); SetAtom(&F.Atoms[ 23 ], "HH22", 1.252f, -7.112f, -4.004f, 0.361f ); } else if ( !strcmp(Name, "Dasn" ) ){ F.NAtoms = 14; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.086f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.653f, -0.251f, -2.131f, 0.038f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.076f, -0.821f, -1.214f, 0.038f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.438f, -2.188f, -1.232f, 0.675f ); SetAtom(&F.Atoms[ 10 ], "OD1", 0.720f, -2.579f, -0.316f, -0.470f ); SetAtom(&F.Atoms[ 11 ], "ND2", 1.780f, -2.961f, -2.265f, -0.867f ); SetAtom(&F.Atoms[ 12 ], "HD21", 2.374f, -2.591f, -2.994f, 0.344f ); SetAtom(&F.Atoms[ 13 ], "HD22", 1.443f, -3.912f, -2.315f, 0.344f ); } else if ( !strcmp(Name, "Dasp" ) ){ F.NAtoms = 12; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.398f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.638f, -0.260f, -2.131f, 0.071f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.077f, -0.816f, -1.241f, 0.071f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.417f, -2.184f, -1.195f, 0.714f ); SetAtom(&F.Atoms[ 10 ], "OD1", 0.297f, -2.369f, -1.741f, -0.721f ); SetAtom(&F.Atoms[ 11 ], "OD2", 2.107f, -3.069f, -0.620f, -0.721f ); } else if ( !strcmp(Name, "Dash" ) ) { F.NAtoms = 13; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "OD1",0.300000f,-1.105000f,-4.076000f,-0.555400f); SetAtom(&F.Atoms[ 1 ] , "HB1",0.597000f,0.562000f,-1.945000f,0.048800f); SetAtom(&F.Atoms[ 2 ] , "HD2",1.746000f,-2.820000f,-3.224000f,0.474700f); SetAtom(&F.Atoms[ 3 ] , "O",2.533000f,-1.237000f,-1.489000f,-0.567900f); SetAtom(&F.Atoms[ 4 ] , "CG",0.656000f,-1.277000f,-2.890000f,0.646200f); SetAtom(&F.Atoms[ 5 ] , "OD2",1.366000f,-2.225000f,-2.553000f,-0.637600f); SetAtom(&F.Atoms[ 6 ] , "CB",0.148000f,-0.308000f,-1.830000f,-0.031600f); SetAtom(&F.Atoms[ 7 ] , "HB2",-0.831000f,-0.228000f,-1.907000f,0.048800f); SetAtom(&F.Atoms[ 8 ] , "C",1.887000f,-1.346000f,-0.471000f,0.597300f); SetAtom(&F.Atoms[ 9 ] , "CA",0.464000f,-0.811000f,-0.388000f,0.034100f); SetAtom(&F.Atoms[ 10 ] , "HA",0.387000f,-0.073000f,0.284000f,0.086400f); SetAtom(&F.Atoms[ 11 ] , "N",-0.440000f,-1.888000f,0.054000f,-0.415700f); SetAtom(&F.Atoms[ 12 ] , "H",-1.174000f,-1.717000f,0.799000f,0.271900f); } else if ( !strcmp(Name, "Dcys" ) ){ F.NAtoms = 11; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.060f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.707f, -0.219f, -2.130f, 0.038f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.069f, -0.846f, -1.122f, 0.038f ); SetAtom(&F.Atoms[ 9 ], "SG", 1.409f, -2.479f, -1.365f, -0.135f ); SetAtom(&F.Atoms[ 10 ], "HG", 1.889f, -3.023f, -2.481f, 0.135f ); } else if ( !strcmp(Name, "Dcyx" ) ){ F.NAtoms = 10; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.707f, -0.219f, -2.130f, 0.0495f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.069f, -0.846f, -1.122f, 0.0495f ); SetAtom(&F.Atoms[ 9 ], "SG", 1.409f, -2.479f, -1.365f, 0.015f ); } else if ( !strcmp(Name, "Dcym" ) ){ F.NAtoms = 10; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.41570f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.27190f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, -0.03510f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.05080f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.59730f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.56790f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.24130f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.707f, -0.219f, -2.130f, 0.11220f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.069f, -0.846f, -1.122f, 0.11220f ); SetAtom(&F.Atoms[ 9 ], "SG", 1.409f, -2.479f, -1.365f, -0.88440f ); } else if ( !strcmp(Name, "Dgln" ) ){ F.NAtoms = 17; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.638f, -0.260f, -2.131f, 0.038f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.077f, -0.816f, -1.241f, 0.038f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.418f, -2.183f, -1.195f, -0.102f ); SetAtom(&F.Atoms[ 10 ], "HG1", 1.752f, -2.685f, -0.287f, 0.057f ); SetAtom(&F.Atoms[ 11 ], "HG2", 0.330f, -2.115f, -1.205f, 0.057f ); SetAtom(&F.Atoms[ 12 ], "CD", 1.861f, -2.984f, -2.410f, 0.675f ); SetAtom(&F.Atoms[ 13 ], "OE1", 2.585f, -2.476f, -3.263f, -0.470f ); SetAtom(&F.Atoms[ 14 ], "NE2", 1.422f, -4.243f, -2.489f, -0.867f ); SetAtom(&F.Atoms[ 15 ], "HE21", 0.828f, -4.613f, -1.760f, 0.344f ); SetAtom(&F.Atoms[ 16 ], "HE22", 1.687f, -4.819f, -3.275f, 0.344f ); } else if ( !strcmp(Name, "Dglu" ) ){ F.NAtoms = 15; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.184f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.638f, -0.260f, -2.131f, 0.092f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.077f, -0.816f, -1.241f, 0.092f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.423f, -2.168f, -1.195f, -0.398f ); SetAtom(&F.Atoms[ 10 ], "HG1", 1.772f, -2.677f, -0.296f, 0.071f ); SetAtom(&F.Atoms[ 11 ], "HG2", 0.334f, -2.122f, -1.186f, 0.071f ); SetAtom(&F.Atoms[ 12 ], "CD", 1.890f, -2.938f, -2.429f, 0.714f ); SetAtom(&F.Atoms[ 13 ], "OE1", 2.971f, -3.579f, -2.334f, -0.721f ); SetAtom(&F.Atoms[ 14 ], "OE2", 1.160f, -2.879f, -3.455f, -0.721f ); } else if ( !strcmp(Name, "Dglh" ) ) { F.NAtoms = 16; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "HG1",-0.822000f,1.476000f,1.725000f,0.043000f); SetAtom(&F.Atoms[ 1 ] , "OE1",-2.016000f,2.827000f,3.246000f,-0.583800f); SetAtom(&F.Atoms[ 2 ] , "HA",-0.795000f,-0.376000f,0.062000f,0.077900f); SetAtom(&F.Atoms[ 3 ] , "CG",-1.085000f,0.844000f,2.444000f,-0.017400f); SetAtom(&F.Atoms[ 4 ] , "HG2",-0.287000f,0.395000f,2.825000f,0.043000f); SetAtom(&F.Atoms[ 5 ] , "CD",-1.739000f,1.640000f,3.544000f,0.680100f); SetAtom(&F.Atoms[ 6 ] , "CA",-1.275000f,-0.999000f,0.652000f,0.014500f); SetAtom(&F.Atoms[ 7 ] , "HB2",-2.760000f,0.199000f,1.441000f,0.025600f); SetAtom(&F.Atoms[ 8 ] , "H",0.472000f,-2.367000f,0.675000f,0.271900f); SetAtom(&F.Atoms[ 9 ] , "CB",-1.967000f,-0.243000f,1.807000f,-0.007100f); SetAtom(&F.Atoms[ 10 ] , "OE2",-1.993000f,1.103000f,4.600000f,-0.651100f); SetAtom(&F.Atoms[ 11 ] , "N",-0.329000f,-1.992000f,1.215000f,-0.415700f); SetAtom(&F.Atoms[ 12 ] , "C",-2.296000f,-1.802000f,-0.153000f,0.597300f); SetAtom(&F.Atoms[ 13 ] , "HE2",-2.337000f,1.487000f,5.358000f,0.464100f); SetAtom(&F.Atoms[ 14 ] , "O",-1.949000f,-2.791000f,-0.835000f,-0.567900f); SetAtom(&F.Atoms[ 15 ] , "HB1",-2.180000f,-0.895000f,2.505000f,0.025600f); F.atomToDelete =1; F.atomToBondTo =2; F.angleAtom =3; } else if ( !strcmp(Name, "Dgly" ) ){ F.NAtoms = 7; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.027f, 1.358f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.697f, 1.839f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA1", 1.886f, -0.523f, -0.885f, 0.032f ); SetAtom(&F.Atoms[ 4 ], "HA2", 1.874f, -0.506f, 0.899f, 0.032f ); SetAtom(&F.Atoms[ 5 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 6 ], "O", -0.624f, 1.058f, 0.000f, -0.504f ); } else if ( !strcmp(Name, "Dhid" ) ){ F.NAtoms = 17; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.695f, -0.225f, -2.131f, 0.038f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.071f, -0.840f, -1.141f, 0.038f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.492f, -2.192f, -1.321f, -0.032f ); SetAtom(&F.Atoms[ 10 ], "ND1", 1.828f, -3.024f, -2.383f, -0.146f ); SetAtom(&F.Atoms[ 11 ], "HD1", 2.411f, -2.776f, -3.170f, 0.228f ); SetAtom(&F.Atoms[ 12 ], "CD2", 0.698f, -2.921f, -0.492f, 0.195f ); SetAtom(&F.Atoms[ 13 ], "HD2", 0.306f, -2.472f, 0.421f, 0.018f ); SetAtom(&F.Atoms[ 14 ], "CE1", 1.251f, -4.195f, -2.182f, 0.241f ); SetAtom(&F.Atoms[ 15 ], "HE1", 1.387f, -4.999f, -2.905f, 0.036f ); SetAtom(&F.Atoms[ 16 ], "NE2", 0.575f, -4.150f, -1.061f, -0.502f ); } else if ( !strcmp(Name, "Dhie" ) ){ F.NAtoms = 17; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.695f, -0.225f, -2.131f, 0.038f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.071f, -0.840f, -1.141f, 0.038f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.492f, -2.192f, -1.321f, 0.251f ); SetAtom(&F.Atoms[ 10 ], "ND1", 1.828f, -3.024f, -2.383f, -0.502f ); SetAtom(&F.Atoms[ 11 ], "CD2", 0.698f, -2.921f, -0.492f, -0.184f ); SetAtom(&F.Atoms[ 12 ], "HD2", 0.306f, -2.472f, 0.421f, 0.114f ); SetAtom(&F.Atoms[ 13 ], "CE1", 1.251f, -4.195f, -2.182f, 0.241f ); SetAtom(&F.Atoms[ 14 ], "HE1", 1.387f, -4.999f, -2.905f, 0.036f ); SetAtom(&F.Atoms[ 15 ], "NE2", 0.575f, -4.150f, -1.061f, -0.146f ); SetAtom(&F.Atoms[ 16 ], "HE2", 0.041f, -4.917f, -0.677f, 0.228f ); } else if ( !strcmp(Name, "Dhip" ) ){ F.NAtoms = 18; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.695f, -0.225f, -2.131f, 0.086f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.071f, -0.840f, -1.141f, 0.086f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.492f, -2.192f, -1.321f, 0.058f ); SetAtom(&F.Atoms[ 10 ], "ND1", 1.828f, -3.024f, -2.383f, -0.058f ); SetAtom(&F.Atoms[ 11 ], "HD1", 2.411f, -2.776f, -3.170f, 0.306f ); SetAtom(&F.Atoms[ 12 ], "CD2", 0.698f, -2.921f, -0.492f, -0.037f ); SetAtom(&F.Atoms[ 13 ], "HD2", 0.306f, -2.472f, 0.421f, 0.153f ); SetAtom(&F.Atoms[ 14 ], "CE1", 1.251f, -4.195f, -2.182f, 0.114f ); SetAtom(&F.Atoms[ 15 ], "HE1", 1.387f, -4.999f, -2.905f, 0.158f ); SetAtom(&F.Atoms[ 16 ], "NE2", 0.575f, -4.150f, -1.061f, -0.058f ); SetAtom(&F.Atoms[ 17 ], "HE2", 0.041f, -4.917f, -0.677f, 0.306f ); } else if ( !strcmp(Name, "Dhis" ) ){ F.NAtoms = 18; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.695f, -0.225f, -2.131f, 0.086f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.071f, -0.840f, -1.141f, 0.086f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.492f, -2.192f, -1.321f, 0.058f ); SetAtom(&F.Atoms[ 10 ], "ND1", 1.828f, -3.024f, -2.383f, -0.058f ); SetAtom(&F.Atoms[ 11 ], "HD1", 2.411f, -2.776f, -3.170f, 0.306f ); SetAtom(&F.Atoms[ 12 ], "CD2", 0.698f, -2.921f, -0.492f, -0.037f ); SetAtom(&F.Atoms[ 13 ], "HD2", 0.248f, -2.586f, 0.442f, 0.153f ); SetAtom(&F.Atoms[ 14 ], "CE1", 1.251f, -4.195f, -2.182f, 0.114f ); SetAtom(&F.Atoms[ 15 ], "HE1", 1.326f, -5.058f, -2.843f, 0.158f ); SetAtom(&F.Atoms[ 16 ], "NE2", 0.575f, -4.150f, -1.061f, -0.058f ); SetAtom(&F.Atoms[ 17 ], "HE2", 0.041f, -4.917f, -0.677f, 0.306f ); } else if ( !strcmp(Name, "Dile" ) ){ F.NAtoms = 19; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.875f, -0.500f, 0.902f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 2.009f, -0.733f, -1.245f, -0.012f ); SetAtom(&F.Atoms[ 7 ], "HB", 1.661f, -0.209f, -2.135f, 0.022f ); SetAtom(&F.Atoms[ 8 ], "CG1", 1.459f, -2.156f, -1.246f, -0.049f ); SetAtom(&F.Atoms[ 9 ], "HG11", 1.807f, -2.680f, -0.355f, 0.027f ); SetAtom(&F.Atoms[ 10 ], "HG12", 0.370f, -2.124f, -1.246f, 0.027f ); SetAtom(&F.Atoms[ 11 ], "CG2", 3.533f, -0.777f, -1.245f, -0.085f ); SetAtom(&F.Atoms[ 12 ], "HG21", 3.882f, -1.301f, -2.135f, 0.029f ); SetAtom(&F.Atoms[ 13 ], "HG22", 3.927f, 0.239f, -1.245f, 0.029f ); SetAtom(&F.Atoms[ 14 ], "HG23", 3.882f, -1.301f, -0.355f, 0.029f ); SetAtom(&F.Atoms[ 15 ], "CD", 1.946f, -2.889f, -2.490f, -0.085f ); SetAtom(&F.Atoms[ 16 ], "HD1", 1.554f, -3.905f, -2.490f, 0.028f ); SetAtom(&F.Atoms[ 17 ], "HD2", 1.598f, -2.365f, -3.380f, 0.028f ); SetAtom(&F.Atoms[ 18 ], "HD3", 3.036f, -2.920f, -2.490f, 0.028f ); } else if ( !strcmp(Name, "Dleu" ) ){ F.NAtoms = 19; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.061f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.638f, -0.260f, -2.131f, 0.033f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.077f, -0.816f, -1.241f, 0.033f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.418f, -2.183f, -1.195f, -0.010f ); SetAtom(&F.Atoms[ 10 ], "HG", 1.766f, -2.692f, -0.296f, 0.031f ); SetAtom(&F.Atoms[ 11 ], "CD1", -0.106f, -2.117f, -1.182f, -0.107f ); SetAtom(&F.Atoms[ 12 ], "HD11", -0.513f, -3.128f, -1.155f, 0.034f ); SetAtom(&F.Atoms[ 13 ], "HD12", -0.438f, -1.567f, -0.302f, 0.034f ); SetAtom(&F.Atoms[ 14 ], "HD13", -0.455f, -1.608f, -2.081f, 0.034f ); SetAtom(&F.Atoms[ 15 ], "CD2", 1.884f, -2.951f, -2.427f, -0.107f ); SetAtom(&F.Atoms[ 16 ], "HD21", 1.476f, -3.962f, -2.400f, 0.034f ); SetAtom(&F.Atoms[ 17 ], "HD22", 1.534f, -2.443f, -3.326f, 0.034f ); SetAtom(&F.Atoms[ 18 ], "HD23", 2.973f, -2.999f, -2.436f, 0.034f ); } else if ( !strcmp(Name, "Dlys" ) ){ F.NAtoms = 22; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.638f, -0.260f, -2.131f, 0.038f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.077f, -0.816f, -1.241f, 0.038f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.418f, -2.183f, -1.195f, -0.160f ); SetAtom(&F.Atoms[ 10 ], "HG1", 1.767f, -2.692f, -0.296f, 0.116f ); SetAtom(&F.Atoms[ 11 ], "HG2", 0.328f, -2.136f, -1.186f, 0.116f ); SetAtom(&F.Atoms[ 12 ], "CD", 1.884f, -2.951f, -2.427f, -0.180f ); SetAtom(&F.Atoms[ 13 ], "HD1", 1.534f, -2.443f, -3.326f, 0.122f ); SetAtom(&F.Atoms[ 14 ], "HD2", 2.973f, -2.999f, -2.436f, 0.122f ); SetAtom(&F.Atoms[ 15 ], "CE", 1.313f, -4.366f, -2.389f, -0.038f ); SetAtom(&F.Atoms[ 16 ], "HE1", 1.663f, -4.874f, -1.491f, 0.098f ); SetAtom(&F.Atoms[ 17 ], "HE2", 0.224f, -4.318f, -2.380f, 0.098f ); SetAtom(&F.Atoms[ 18 ], "NZ", 1.762f, -5.106f, -3.577f, -0.138f ); SetAtom(&F.Atoms[ 19 ], "HZ1", 1.385f, -6.042f, -3.552f, 0.294f ); SetAtom(&F.Atoms[ 20 ], "HZ2", 1.440f, -4.636f, -4.410f, 0.294f ); SetAtom(&F.Atoms[ 21 ], "HZ3", 2.771f, -5.149f, -3.585f, 0.294f ); } else if ( !strcmp(Name, "Dlyn" ) ) { F.NAtoms = 21; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "HZ2",1.325000f,-3.726000f,3.419000f,0.386000f); SetAtom(&F.Atoms[ 1 ] , "HZ1",1.239000f,-2.700000f,1.729000f,0.386000f); SetAtom(&F.Atoms[ 2 ] , "NZ",1.916000f,-3.280000f,2.501000f,-1.035800f); SetAtom(&F.Atoms[ 3 ] , "HD2",3.564000f,-2.481000f,0.712000f,0.011500f); SetAtom(&F.Atoms[ 4 ] , "HG1",1.473000f,-0.971000f,1.207000f,0.010400f); SetAtom(&F.Atoms[ 5 ] , "CE",3.093000f,-2.417000f,2.887000f,0.326000f); SetAtom(&F.Atoms[ 6 ] , "HE2",3.961000f,-3.095000f,3.307000f,-0.033600f); SetAtom(&F.Atoms[ 7 ] , "HB2",2.894000f,-0.488000f,-0.916000f,0.034000f); SetAtom(&F.Atoms[ 8 ] , "CD",3.569000f,-1.696000f,1.592000f,-0.037700f); SetAtom(&F.Atoms[ 9 ] , "HA",0.928000f,0.937000f,-0.619000f,0.099400f); SetAtom(&F.Atoms[ 10 ] , "CG",2.588000f,-0.589000f,1.245000f,0.066100f); SetAtom(&F.Atoms[ 11 ] , "HE1",2.907000f,-1.707000f,3.810000f,-0.033600f); SetAtom(&F.Atoms[ 12 ] , "CB",2.965000f,0.235000f,0.013000f,-0.048500f); SetAtom(&F.Atoms[ 13 ] , "HD1",4.697000f,-1.352000f,1.617000f,0.011500f); SetAtom(&F.Atoms[ 14 ] , "CA",1.951000f,1.377000f,-0.231000f,-0.072100f); SetAtom(&F.Atoms[ 15 ] , "HG2",2.665000f,0.169000f,2.145000f,0.010400f); SetAtom(&F.Atoms[ 16 ] , "HB1",4.088000f,0.596000f,0.013000f,0.034000f); SetAtom(&F.Atoms[ 17 ] , "C",2.579000f,2.299000f,-1.269000f,0.597300f); SetAtom(&F.Atoms[ 18 ] , "N",1.755000f,2.052000f,1.045000f,-0.415700f); SetAtom(&F.Atoms[ 19 ] , "O",2.174000f,3.434000f,-1.500000f,-0.567900f); SetAtom(&F.Atoms[ 20 ] , "H",2.573000f,2.891000f,1.176000f,0.271900f); } else if ( !strcmp(Name, "Dmet" ) ){ F.NAtoms = 17; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.151f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.638f, -0.260f, -2.131f, 0.027f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.077f, -0.816f, -1.241f, 0.027f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.418f, -2.183f, -1.195f, -0.054f ); SetAtom(&F.Atoms[ 10 ], "HG1", 1.762f, -2.690f, -0.292f, 0.0652f ); SetAtom(&F.Atoms[ 11 ], "HG2", 0.329f, -2.129f, -1.191f, 0.0652f ); SetAtom(&F.Atoms[ 12 ], "SD", 1.962f, -3.109f, -2.652f, -0.025f ); SetAtom(&F.Atoms[ 13 ], "CE", 1.167f, -4.670f, -2.341f, -0.134f ); SetAtom(&F.Atoms[ 14 ], "HE1", 1.399f, -5.363f, -3.150f, 0.0652f ); SetAtom(&F.Atoms[ 15 ], "HE2", 1.525f, -5.079f, -1.397f, 0.0652f ); SetAtom(&F.Atoms[ 16 ], "HE3", 0.087f, -4.523f, -2.287f, 0.0652f ); } else if ( !strcmp(Name, "Dnme" ) ){ F.NAtoms = 6; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", -1.227f, 0.728f, 2.125f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", -1.124f, -0.261f, 1.947f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CH3", -1.918f, 1.159f, 3.323f, 0.03502f ); SetAtom(&F.Atoms[ 3 ], "HH31", -1.939f, 2.249f, 3.358f, 0.0586f ); SetAtom(&F.Atoms[ 4 ], "HH32", -2.939f, 0.777f, 3.311f, 0.0586f ); SetAtom(&F.Atoms[ 5 ], "HH33", -1.398f, 0.777f, 4.201f, 0.0586f ); } else if ( !strcmp(Name, "Dnhe" ) ){ F.NAtoms = 3; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 1.074f, -6.424f, -3.287f, -0.624f ); SetAtom(&F.Atoms[ 1 ], "H1", 0.494f, -6.652f, -2.492f, 0.361f ); SetAtom(&F.Atoms[ 2 ], "H2", 1.252f, -7.112f, -4.004f, 0.361f ); } else if ( !strcmp(Name, "Dphe" ) ){ F.NAtoms = 20; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.100f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.695f, -0.225f, -2.131f, 0.108f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.071f, -0.840f, -1.141f, 0.108f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.492f, -2.192f, -1.321f, -0.100f ); SetAtom(&F.Atoms[ 10 ], "CD1", 1.856f, -2.993f, -2.410f, -0.150f ); SetAtom(&F.Atoms[ 11 ], "HD1", 2.497f, -2.589f, -3.194f, 0.150f ); SetAtom(&F.Atoms[ 12 ], "CD2", 0.669f, -2.711f, -0.315f, -0.150f ); SetAtom(&F.Atoms[ 13 ], "HD2", 0.385f, -2.087f, 0.533f, 0.150f ); SetAtom(&F.Atoms[ 14 ], "CE1", 1.398f, -4.313f, -2.492f, -0.150f ); SetAtom(&F.Atoms[ 15 ], "HE1", 1.681f, -4.937f, -3.340f, 0.150f ); SetAtom(&F.Atoms[ 16 ], "CE2", 0.210f, -4.031f, -0.397f, -0.150f ); SetAtom(&F.Atoms[ 17 ], "HE2", -0.431f, -4.436f, 0.387f, 0.150f ); SetAtom(&F.Atoms[ 18 ], "CZ", 0.575f, -4.833f, -1.486f, -0.150f ); SetAtom(&F.Atoms[ 19 ], "HZ", 0.217f, -5.861f, -1.550f, 0.150f ); } else if ( !strcmp(Name, "Dpro" ) ){ F.NAtoms = 14; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.067f, 1.413f, 0.000f, -0.229f ); SetAtom(&F.Atoms[ 1 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 2 ], "HA", 1.308f, -0.765f, 0.745f, 0.048f ); SetAtom(&F.Atoms[ 3 ], "C", 0.000f, 0.000f, 0.000f, 0.526f ); SetAtom(&F.Atoms[ 4 ], "O", -0.624f, 1.059f, 0.000f, -0.500f ); SetAtom(&F.Atoms[ 5 ], "CB", 2.632f, -0.865f, -0.521f, -0.115f ); SetAtom(&F.Atoms[ 6 ], "HB1", 2.901f, -1.604f, 0.234f, 0.061f ); SetAtom(&F.Atoms[ 7 ], "HB2", 2.302f, -1.372f, -1.426f, 0.061f ); SetAtom(&F.Atoms[ 8 ], "CG", 3.834f, -0.007f, -0.835f, -0.121f ); SetAtom(&F.Atoms[ 9 ], "HG1", 4.671f, -0.309f, -0.206f, 0.063f ); SetAtom(&F.Atoms[ 10 ], "HG2", 4.135f, -0.100f, -1.878f, 0.063f ); SetAtom(&F.Atoms[ 11 ], "CD", 3.438f, 1.400f, -0.496f, -0.0012f ); SetAtom(&F.Atoms[ 12 ], "HD1", 3.507f, 2.022f, -1.389f, 0.060f ); SetAtom(&F.Atoms[ 13 ], "HD2", 4.105f, 1.791f, 0.271f, 0.060f ); } else if ( !strcmp(Name, "Dser" ) ){ F.NAtoms = 11; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, 0.018f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.638f, -0.260f, -2.131f, 0.119f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.077f, -0.816f, -1.241f, 0.119f ); SetAtom(&F.Atoms[ 9 ], "OG", 1.453f, -2.095f, -1.196f, -0.550f ); SetAtom(&F.Atoms[ 10 ], "HG", 1.746f, -2.578f, -1.973f, 0.310f ); } else if ( !strcmp(Name, "Dthr" ) ){ F.NAtoms = 14; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, 0.170f ); SetAtom(&F.Atoms[ 7 ], "HB", 1.580f, -1.779f, -1.205f, 0.082f ); SetAtom(&F.Atoms[ 8 ], "OG1", 3.416f, -0.831f, -1.244f, -0.550f ); SetAtom(&F.Atoms[ 9 ], "HG1", 3.710f, -1.314f, -2.020f, 0.310f ); SetAtom(&F.Atoms[ 10 ], "CG2", 1.499f, -0.057f, -2.490f, -0.191f ); SetAtom(&F.Atoms[ 11 ], "HG21", 1.832f, -0.606f, -3.370f, 0.065f ); SetAtom(&F.Atoms[ 12 ], "HG22", 0.410f, -0.010f, -2.480f, 0.065f ); SetAtom(&F.Atoms[ 13 ], "HG23", 1.906f, 0.953f, -2.516f, 0.065f ); } else if ( !strcmp(Name, "Dtrp" ) ){ F.NAtoms = 24; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.695f, -0.225f, -2.131f, 0.038f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.071f, -0.840f, -1.141f, 0.038f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.492f, -2.192f, -1.321f, -0.135f ); SetAtom(&F.Atoms[ 10 ], "CD1", 1.752f, -3.078f, -2.293f, 0.044f ); SetAtom(&F.Atoms[ 11 ], "HD1", 2.365f, -2.907f, -3.178f, 0.093f ); SetAtom(&F.Atoms[ 12 ], "CD2", 0.669f, -2.868f, -0.412f, 0.146f ); SetAtom(&F.Atoms[ 13 ], "NE1", 1.072f, -4.288f, -1.950f, -0.352f ); SetAtom(&F.Atoms[ 14 ], "HE1", 1.079f, -5.139f, -2.493f, 0.271f ); SetAtom(&F.Atoms[ 15 ], "CE2", 0.437f, -4.114f, -0.817f, 0.154f ); SetAtom(&F.Atoms[ 16 ], "CE3", 0.103f, -2.412f, 0.785f, -0.173f ); SetAtom(&F.Atoms[ 17 ], "HE3", 0.273f, -1.398f, 1.145f, 0.086f ); SetAtom(&F.Atoms[ 18 ], "CZ2", -0.350f, -5.037f, -0.120f, -0.168f ); SetAtom(&F.Atoms[ 19 ], "HZ2", -0.515f, -6.050f, -0.487f, 0.084f ); SetAtom(&F.Atoms[ 20 ], "CZ3", -0.694f, -3.326f, 1.506f, -0.066f ); SetAtom(&F.Atoms[ 21 ], "HZ3", -1.150f, -3.005f, 2.442f, 0.057f ); SetAtom(&F.Atoms[ 22 ], "CH2", -0.912f, -4.585f, 1.069f, -0.168f ); SetAtom(&F.Atoms[ 23 ], "HH2", -1.535f, -5.257f, 1.658f, 0.084f ); } else if ( !strcmp(Name, "Dtyr" ) ){ F.NAtoms = 21; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.098f ); SetAtom(&F.Atoms[ 7 ], "HB1", 1.638f, -0.260f, -2.131f, 0.038f ); SetAtom(&F.Atoms[ 8 ], "HB2", 3.077f, -0.816f, -1.241f, 0.038f ); SetAtom(&F.Atoms[ 9 ], "CG", 1.423f, -2.168f, -1.195f, -0.030f ); SetAtom(&F.Atoms[ 10 ], "CD1", 1.715f, -3.069f, -2.228f, -0.002f ); SetAtom(&F.Atoms[ 11 ], "HD1", 2.348f, -2.758f, -3.058f, 0.064f ); SetAtom(&F.Atoms[ 12 ], "CD2", 0.609f, -2.567f, -0.128f, -0.002f ); SetAtom(&F.Atoms[ 13 ], "HD2", 0.382f, -1.866f, 0.676f, 0.064f ); SetAtom(&F.Atoms[ 14 ], "CE1", 1.191f, -4.367f, -2.193f, -0.264f ); SetAtom(&F.Atoms[ 15 ], "HE1", 1.418f, -5.067f, -2.996f, 0.102f ); SetAtom(&F.Atoms[ 16 ], "CE2", 0.086f, -3.865f, -0.094f, -0.264f ); SetAtom(&F.Atoms[ 17 ], "HE2", -0.548f, -4.176f, 0.737f, 0.102f ); SetAtom(&F.Atoms[ 18 ], "CZ", 0.378f, -4.765f, -1.126f, 0.462f ); SetAtom(&F.Atoms[ 19 ], "OH", -0.131f, -6.027f, -1.093f, -0.528f ); SetAtom(&F.Atoms[ 20 ], "HH", 0.132f, -6.557f, -1.848f, 0.334f ); } else if ( !strcmp(Name, "Dval" ) ){ F.NAtoms = 16; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ], "N", 2.044f, 1.352f, 0.000f, -0.463f ); SetAtom(&F.Atoms[ 1 ], "H", 1.721f, 1.837f, 0.824f, 0.252f ); SetAtom(&F.Atoms[ 2 ], "CA", 1.522f, 0.000f, 0.000f, 0.035f ); SetAtom(&F.Atoms[ 3 ], "HA", 1.896f, -0.481f, 0.904f, 0.048f ); SetAtom(&F.Atoms[ 4 ], "C", 0.000f, 0.000f, 0.000f, 0.616f ); SetAtom(&F.Atoms[ 5 ], "O", -0.624f, 1.060f, 0.000f, -0.504f ); SetAtom(&F.Atoms[ 6 ], "CB", 1.988f, -0.769f, -1.232f, -0.012f ); SetAtom(&F.Atoms[ 7 ], "HB", 1.638f, -0.260f, -2.131f, 0.024f ); SetAtom(&F.Atoms[ 8 ], "CG1", 3.510f, -0.834f, -1.245f, -0.091f ); SetAtom(&F.Atoms[ 9 ], "HG11", 3.844f, -1.383f, -2.125f, 0.031f ); SetAtom(&F.Atoms[ 10 ], "HG12", 3.918f, 0.176f, -1.271f, 0.031f ); SetAtom(&F.Atoms[ 11 ], "HG13", 3.860f, -1.343f, -0.346f, 0.031f ); SetAtom(&F.Atoms[ 12 ], "CG2", 1.418f, -2.183f, -1.195f, -0.091f ); SetAtom(&F.Atoms[ 13 ], "HG21", 1.751f, -2.732f, -2.075f, 0.031f ); SetAtom(&F.Atoms[ 14 ], "HG22", 1.767f, -2.692f, -0.296f, 0.031f ); SetAtom(&F.Atoms[ 15 ], "HG23", 0.328f, -2.136f, -1.186f, 0.031f ); } else if ( !strcmp(Name, "Dnmet" ) ) { F.NAtoms = 19; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "HA",0.339414f,-0.885395f,0.470621f,0.111600f); SetAtom(&F.Atoms[ 1 ] , "H2",1.914305f,-0.102627f,-1.243780f,0.198400f); SetAtom(&F.Atoms[ 2 ] , "HG2",-0.365841f,-3.125766f,1.851430f,0.029200f); SetAtom(&F.Atoms[ 3 ] , "O",-0.793765f,-1.444440f,-2.300202f,-0.571300f); SetAtom(&F.Atoms[ 4 ] , "C",-0.561765f,-1.992440f,-1.205202f,0.612300f); SetAtom(&F.Atoms[ 5 ] , "CA",0.676235f,-1.683440f,-0.329202f,0.022100f); SetAtom(&F.Atoms[ 6 ] , "HB2",1.698924f,-2.255033f,1.430932f,0.012500f); SetAtom(&F.Atoms[ 7 ] , "HE1",-1.108365f,-5.219647f,3.402800f,0.059700f); SetAtom(&F.Atoms[ 8 ] , "N",1.733235f,-1.267440f,-1.222202f,0.159200f); SetAtom(&F.Atoms[ 9 ] , "CG",0.167201f,-3.660447f,1.171883f,0.033400f); SetAtom(&F.Atoms[ 10 ] , "CB",1.188765f,-2.809147f,0.523885f,0.086500f); SetAtom(&F.Atoms[ 11 ] , "H3",1.387955f,-1.496371f,-2.326020f,0.198400f); SetAtom(&F.Atoms[ 12 ] , "HG1",-0.554372f,-4.056416f,0.327738f,0.029200f); SetAtom(&F.Atoms[ 13 ] , "HE3",-1.365540f,-5.784180f,1.599233f,0.059700f); SetAtom(&F.Atoms[ 14 ] , "H1",2.703522f,-1.901276f,-1.005783f,0.198400f); SetAtom(&F.Atoms[ 15 ] , "CE",-0.635728f,-5.846384f,2.523109f,-0.034100f); SetAtom(&F.Atoms[ 16 ] , "SD",0.961031f,-5.101482f,2.031982f,-0.277400f); SetAtom(&F.Atoms[ 17 ] , "HB1",2.003278f,-3.450430f,-0.037689f,0.012500f); SetAtom(&F.Atoms[ 18 ] , "HE2",-0.581719f,-7.005304f,2.732938f,0.059700f); } else if ( !strcmp(Name, "Dnser" ) ) { F.NAtoms = 13; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "HG",0.088000f,-0.452000f,-3.739000f,0.423900f); SetAtom(&F.Atoms[ 1 ] , "OG",-0.204000f,-0.024000f,-2.930000f,-0.671400f); SetAtom(&F.Atoms[ 2 ] , "HB2",-0.045000f,-1.836000f,-1.814000f,0.027300f); SetAtom(&F.Atoms[ 3 ] , "O",-2.281000f,1.023000f,-0.519000f,-0.572200f); SetAtom(&F.Atoms[ 4 ] , "C",-1.657000f,-0.037000f,-0.519000f,0.616300f); SetAtom(&F.Atoms[ 5 ] , "CB",0.331000f,-0.719000f,-1.801000f,0.259600f); SetAtom(&F.Atoms[ 6 ] , "HB1",1.420000f,-0.703000f,-1.846000f,0.027300f); SetAtom(&F.Atoms[ 7 ] , "CA",-0.135000f,-0.037000f,-0.519000f,0.056700f); SetAtom(&F.Atoms[ 8 ] , "H1",0.204000f,1.903000f,-1.525000f,0.189800f); SetAtom(&F.Atoms[ 9 ] , "HA",0.269000f,-0.624000f,0.420000f,0.078200f); SetAtom(&F.Atoms[ 10 ] , "N",0.387000f,1.316000f,-0.519000f,0.184900f); SetAtom(&F.Atoms[ 11 ] , "H3",0.064000f,1.800000f,0.305000f,0.189800f); SetAtom(&F.Atoms[ 12 ] , "H2",1.563000f,1.251000f,-0.466000f,0.189800f); } else if ( !strcmp(Name, "Droh" ) ) { F.NAtoms = 26; F.Atoms = g_malloc(F.NAtoms*sizeof(Atom)); SetAtom(&F.Atoms[ 0 ] , "HH21",-3.014000f,2.568000f,-1.738000f,0.511600f); SetAtom(&F.Atoms[ 1 ] , "HE",-1.768000f,1.277000f,-0.439000f,0.383700f); SetAtom(&F.Atoms[ 2 ] , "HG1",-0.992000f,-0.793000f,0.861000f,0.126700f); SetAtom(&F.Atoms[ 3 ] , "NH2",-2.505000f,2.271000f,-2.557000f,-1.121400f); SetAtom(&F.Atoms[ 4 ] , "HA",0.240000f,-2.161000f,2.579000f,-0.013000f); SetAtom(&F.Atoms[ 5 ] , "HH22",-2.747000f,2.634000f,-3.468000f,0.514900f); SetAtom(&F.Atoms[ 6 ] , "NE",-1.223000f,0.942000f,-1.220000f,-0.707500f); SetAtom(&F.Atoms[ 7 ] , "OH",0.711000f,0.560000f,2.655000f,-0.747600f); SetAtom(&F.Atoms[ 8 ] , "CG",-0.047000f,-0.364000f,0.527000f,-0.121200f); SetAtom(&F.Atoms[ 9 ] , "CZ",-1.510000f,1.396000f,-2.436000f,1.082900f); SetAtom(&F.Atoms[ 10 ] , "HG2",0.156000f,0.547000f,1.090000f,0.078100f); SetAtom(&F.Atoms[ 11 ] , "HO",0.942000f,1.458000f,2.952000f,0.544600f); SetAtom(&F.Atoms[ 12 ] , "CA",1.167000f,-1.699000f,2.242000f,0.613500f); SetAtom(&F.Atoms[ 13 ] , "C",1.404000f,-0.398000f,2.996000f,0.683200f); SetAtom(&F.Atoms[ 14 ] , "HD2",-0.362000f,-0.950000f,-1.504000f,0.059300f); SetAtom(&F.Atoms[ 15 ] , "CD",-0.139000f,-0.032000f,-0.959000f,0.185000f); SetAtom(&F.Atoms[ 16 ] , "H",2.265000f,-2.854000f,3.488000f,0.362500f); SetAtom(&F.Atoms[ 17 ] , "HB2",0.871000f,-2.278000f,0.192000f,0.097600f); SetAtom(&F.Atoms[ 18 ] , "CB",1.077000f,-1.368000f,0.754000f,-0.426200f); SetAtom(&F.Atoms[ 19 ] , "O",2.414000f,-0.261000f,3.722000f,-0.590800f); SetAtom(&F.Atoms[ 20 ] , "NH1",-0.836000f,1.004000f,-3.514000f,-0.981100f); SetAtom(&F.Atoms[ 21 ] , "N",2.227000f,-2.653000f,2.500000f,-0.687400f); SetAtom(&F.Atoms[ 22 ] , "HH12",-1.083000f,1.369000f,-4.422000f,0.483000f); SetAtom(&F.Atoms[ 23 ] , "HD1",0.811000f,0.381000f,-1.299000f,0.055100f); SetAtom(&F.Atoms[ 24 ] , "HH11",-0.082000f,0.339000f,-3.419000f,0.452300f); SetAtom(&F.Atoms[ 25 ] , "HB1",2.020000f,-0.938000f,0.420000f,0.162200f); } /*CenterFrag(&F);*/ for(i=1;i<(gint)strlen(Name);i++) T[i-1] = toupper(Name[i]); if(strlen(Name)-1>0) { T[strlen(Name)-1] ='\0'; SetResidue(&F,T); } else SetResidue(&F,"UNK"); SetMMTypes(&F); return F; } /*****************************************************************/ Fragment GetFragmentPPDCTerminal(gchar* Name) { Fragment F; Fragment FNonTerm; gchar* NameNonTerm = NULL; gint i; gint l; gint CA = -1; gint O = -1; gint C = -1; gchar T[100]="UNK"; gdouble v[3]; gint j; gdouble n = 0; gdouble dCO = 0; initFragment(&F); if(!Name || strlen(Name)!=5 || toupper(Name[1])!='C') return F; NameNonTerm = g_strdup(Name); l = strlen(Name); for(i=1;i0) { T[strlen(Name)-1] ='\0'; SetResidue(&F,T); } else SetResidue(&F,"UNK"); SetMMTypes(&F); FreeFragment(&FNonTerm); return F; } /*****************************************************************/ Fragment GetFragmentPPDNTerminal(gchar* Name) { Fragment F; Fragment FNonTerm; gchar* NameNonTerm = NULL; gint i; gint l; gint c; gint CA = -1; gint N = -1; gint H = -1; gint CD = -1;/* for Proline */ gchar T[100]="UNK"; gint j; gdouble dNH = 0; gdouble v1[3]; gdouble v2[3]; gdouble v3[3]; gdouble v4[3]; gdouble v5[3]; initFragment(&F); if(!Name || strlen(Name)!=5 || toupper(Name[1])!='N') return F; NameNonTerm = g_strdup(Name); l = strlen(Name); for(i=1;i1e-2) v3d_normal(v4); v3d_scale(v4,-1.0); v3d_cross(v2,v3,v5); if(v3d_length(v5)<1e-2) for(c=0;c<3;c++) v5[c] = rand()/(gdouble)RAND_MAX-0.5; v3d_normal(v5); v3d_scale(v4,0.5); v3d_scale(v5,0.5); v3d_add(v4,v5,v1); v3d_normal(v1); i = F.NAtoms-2; for(c=0;c<3;c++) F.Atoms[i].Coord[c] = F.Atoms[N].Coord[c]+v1[c]*dNH; set_vect_ij(&F, N, i, v4); v3d_normal(v4); v3d_add(v2,v3,v5); v3d_add(v5,v4,v1); if(v3d_length(v1)<2e-1) v3d_cross(v2,v3,v1); v3d_normal(v1); v3d_scale(v1,-1.0); i = F.NAtoms-1; for(c=0;c<3;c++) F.Atoms[i].Coord[c] = F.Atoms[N].Coord[c]+v1[c]*dNH; for(i=1;i<(gint)strlen(Name);i++) T[i-1] = toupper(Name[i]); if(strlen(Name)-1>0) { T[strlen(Name)-1] ='\0'; SetResidue(&F,T); } else SetResidue(&F,"UNK"); SetMMTypes(&F); FreeFragment(&FNonTerm); return F; } /*****************************************************************/ Fragment GetFragmentPPDCOOHTerminal(gchar* Name) { Fragment F; Fragment FNonTerm; gchar* NameNonTerm = NULL; gint i; gint l; gint CA = -1; gint O = -1; gint C = -1; gint OH = -1; gint HO = -1; gchar T[100]="UNK"; gdouble vCOH[3]; gdouble vCO[3]; gdouble vOH[3]; gint j; gdouble nCOH = 0; gdouble nCO = 0; gdouble nOH = 0; gdouble dCO = 1.251*ANG_TO_BOHR; gdouble dCOH = 1.231*ANG_TO_BOHR; gdouble dH = 0.974*ANG_TO_BOHR; gdouble chargeO = -0.555; gdouble chargeOH = -0.638; gdouble chargeH = 0.475; gdouble chargeC = 0.646; gdouble QCOOld = 0; gdouble QCH = chargeC+chargeH; gdouble QOO = chargeOH+chargeO; gdouble scaleCH = 1.0; gdouble scaleOO = 1.0; /* scale C, H, O, and OH charge for obtain the old (C,H) charge, with * a contraint (1-scaleCH)^2 + (1-scaleOO)^2 should be minimal */ gdouble sigma = 0; initFragment(&F); if(!Name || strlen(Name)!=5 || toupper(Name[1])!='O') return F; NameNonTerm = g_strdup(Name); l = strlen(Name); for(i=1;i0) { T[strlen(Name)-1] ='\0'; SetResidue(&F,T); } else SetResidue(&F,"UNK"); SetMMTypes(&F); FreeFragment(&FNonTerm); return F; } /*****************************************************************/ Fragment GetFragmentPPDNH2Terminal(gchar* Name) { Fragment F; Fragment FNonTerm; gchar* NameNonTerm = NULL; gint i; gint l; gint CA = -1; gint N = -1; gint H = -1; gint CD = -1;/* for Proline */ gchar T[100]="UNK"; gdouble vNH1[3]; gdouble vNH2[3]; gint j; gdouble nNH2 = 0; gdouble dNH1 = 0; gdouble chargeN = -0.919; gdouble chargeH = 0.420638; gdouble QCOOld = 0; gdouble QN = chargeN; gdouble QHH = chargeH+chargeH; gdouble scaleN = 1.0; gdouble scaleH = 1.0; /* scale N, 2H charge for obtain the old (N,H) charge, with * a contraint (1-scaleN)^2 + (1-scaleH)^2 should be minimal */ gdouble sigma = 0; initFragment(&F); if(!Name || strlen(Name)!=5 || toupper(Name[1])!='H') return F; NameNonTerm = g_strdup(Name); l = strlen(Name); for(i=1;i0) { T[strlen(Name)-1] ='\0'; SetResidue(&F,T); } else SetResidue(&F,"UNK"); SetMMTypes(&F); FreeFragment(&FNonTerm); return F; } /*****************************************************************/ Fragment GetFragmentPPD(gchar* Name) { Fragment F; initFragment(&F); if(Name && strlen(Name)==4) return GetFragmentPPDNonTerminal(Name); else if(Name && strlen(Name)==5 && toupper(Name[1])=='C') return GetFragmentPPDCTerminal(Name); else if(Name && strlen(Name)==5 && toupper(Name[1])=='N') return GetFragmentPPDNTerminal(Name); else if(Name && strlen(Name)==5 && toupper(Name[1])=='O') return GetFragmentPPDCOOHTerminal(Name); else if(Name && strlen(Name)==5 && toupper(Name[1])=='H') return GetFragmentPPDNH2Terminal(Name); return F; } GabeditSrc250/src/NWChem/0000755000175100017510000000000013130743374015405 5ustar allouchealloucheGabeditSrc250/src/NWChem/NWChem.c0000644000175100017510000001666313130665226016705 0ustar alloucheallouche/* NWChem.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Common/Global.h" #include "../NWChem/NWChemTypes.h" #include "../NWChem/NWChemGlobal.h" #include "../NWChem/NWChemMolecule.h" #include "../NWChem/NWChemKeywords.h" #include "../NWChem/NWChemBasis.h" #include "../NWChem/NWChemGuess.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" static GtkWidget *Wins=NULL; static gboolean newFile = FALSE; /************************************************************************************************************/ static void setColors() { static gboolean first = TRUE; if(!first) return; first = FALSE; nwchemColorFore.keyWord.red = 65535; nwchemColorFore.keyWord.green = 0; nwchemColorFore.keyWord.blue = 0; nwchemColorBack.keyWord.red = (gushort)(65535/1.2); nwchemColorBack.keyWord.green = (gushort)(65535/1.2); nwchemColorBack.keyWord.blue = (gushort)(65535/1.2); nwchemColorFore.description.red = 0; nwchemColorFore.description.green = 65535; nwchemColorFore.description.blue = 65535; nwchemColorBack.description.red = (gushort)(65535/2.0); nwchemColorBack.description.green = (gushort)(65535/2.0); nwchemColorBack.description.blue = (gushort)(65535/2.0); } /************************************************************************************************************/ void destroyWinsNWChem(GtkWidget *win) { destroy(Wins,NULL); Wins = NULL; initNWChemMoleculeButtons(); initNWChemGuessFrame(); /* freeNWChemMolecule(); freeNWChemMpqc(); freeNWChemBasis(); */ } /************************************************************************************************************/ static void toCancelWin(GtkWidget* win,gpointer data) { Cancel_YesNo(win, data, destroy_children); } /************************************************************************************************************/ static void putTitleInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"%c ================================================================\n",'#'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"%c NWChem input file made in Gabedit\n",'#'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"%c ================================================================\n",'#'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /************************************************************************************************************/ static void putInfoInTextEditor(GtkWidget *button, gpointer data) { setColors(); if(newFile) { reset_name_files(); ClearText(text); } else { gint nchar; nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); gabedit_text_set_point(GABEDIT_TEXT(text),nchar); } data_modify(TRUE); putTitleInTextEditor(); putNWChemMoleculeInfoInTextEditor(); putNWChemKeywordsInfoInTextEditor(); iprogram = PROG_IS_NWCHEM; fileopen.command=g_strdup(NameCommandNWChem); gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0); } /*********************************************************************************************/ static GtkWidget* addHboxToTable(GtkWidget* table, gint i, gint j, gint ki, gint kj) { GtkWidget *hbox = gtk_hbox_new(TRUE, 5); gtk_table_attach(GTK_TABLE(table),hbox,j,j+kj,i,i+ki, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); return hbox; } /************************************************************************************************************/ static void nwchemInputFileWindow(gboolean newInputFile) { GtkWidget *button; GtkWidget *hbox = NULL; GtkWidget *hboxChargeMultiplicity = NULL; GtkWidget *table = gtk_table_new(6,2,FALSE); newFile = newInputFile; initNWChemMolecule(); setNWChemMolecule(); if(nwchemMolecule.numberOfAtoms <1) { Message( _( "You must initially define your geometry.\n\n" "From the principal Menu select : Geometry/Draw\n" "and draw (or read) your molecule."), _("Error"),TRUE); return; } if(Wins) destroy_children(Wins); Wins= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Wins),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Wins),GTK_WINDOW(Fenetre)); gtk_window_set_title(>K_DIALOG(Wins)->window,_("NWChem input")); gtk_window_set_modal (GTK_WINDOW (Wins), TRUE); init_child(Wins, destroyWinsNWChem,_(" NWChem input ")); g_signal_connect(G_OBJECT(Wins),"delete_event",(GCallback)destroy_children,NULL); gtk_widget_realize(Wins); button = create_button(Wins,_("Cancel")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK( toCancelWin),GTK_OBJECT(Wins)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show (button); button = create_button(Wins,_("OK")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->vbox), table, FALSE, TRUE, 5); hbox =addHboxToTable(table, 0, 0, 1, 1); hboxChargeMultiplicity = hbox; hbox =addHboxToTable(table, 1, 0, 1, 2); initNWChemGuessFrame(); createNWChemKeywordsFrame(Wins, hbox); createNWChemChargeMultiplicityFrame(hboxChargeMultiplicity); hbox =addHboxToTable(table, 2, 0, 1, 2); createNWChemGuessFrame(Wins, hbox); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(putInfoInTextEditor),GTK_OBJECT(Wins)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(destroy_children),GTK_OBJECT(Wins)); gtk_widget_show_all(Wins); nwchemWin = Wins; } /************************************************************************************************************/ void newNWChem() { nwchemInputFileWindow(TRUE); } /************************************************************************************************************/ void insertNWChem() { nwchemInputFileWindow(FALSE); } GabeditSrc250/src/NWChem/NWChemGlobal.h0000644000175100017510000000062113130665226020016 0ustar alloucheallouche #ifndef __GABEDIT_NWCHEMGLOBAL_H__ #define __GABEDIT_NWCHEMGLOBAL_H__ GtkWidget* nwchemWin; NWChemMolecule nwchemMolecule; NWChemColorFore nwchemColorFore; NWChemColorBack nwchemColorBack; NWChemBasis nwchemBasis; NWChemGuessWaveFunction nwchemGuessWaveFunction; NWChemFunctional* functionals; NWChemStdFunctional* stdFunctionals; gdouble* sumFunctionals; #endif /* __GABEDIT_NWCHEMGLOBAL_H__ */ GabeditSrc250/src/NWChem/NWChemMolecule.h0000644000175100017510000000056013130665226020365 0ustar alloucheallouche #ifndef __GABEDIT_NWCHEMMOLECULE_H__ #define __GABEDIT_NWCHEMMOLECULE_H__ gint getNWChemMultiplicity(); void initNWChemMoleculeButtons(); void initNWChemMolecule(); void freeNWChemMolecule(); void putNWChemMoleculeInfoInTextEditor(); gboolean setNWChemMolecule(); void createNWChemChargeMultiplicityFrame(GtkWidget *box); #endif /* __GABEDIT_NWCHEMMOLECULE_H__ */ GabeditSrc250/src/NWChem/Makefile0000644000175100017510000000065713130664665017062 0ustar allouchealloucheOBJECTS = NWChem.o NWChemMolecule.o NWChemKeywords.o NWChemGuess.o NWChemBasis.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/NWChem/NWChemGuess.c0000644000175100017510000001460613130665226017707 0ustar alloucheallouche/* NWChemGuess.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../NWChem/NWChemTypes.h" #include "../NWChem/NWChemGlobal.h" #include "../NWChem/NWChemBasis.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget *guessFrame = NULL; /*************************************************************************************************************/ static gchar* listGuessMethodView[] = { "Default", "PATOM : polarized atoms guess", "PMODEL : model potential guess", "HUECKEL : extended Huckel guess", "HCORE : one-electron matrix guess", }; static gchar* listGuessMethodReal[] = { "NONE", "PATOM", "PMODEL", "HUECKEL", "HCORE", }; static guint numberOfGuessMethods = G_N_ELEMENTS (listGuessMethodView); static gchar selectedGuessMethod[BSIZE]="NONE"; /*************************************************************************************************************/ void initNWChemGuessFrame() { guessFrame = NULL; } /*************************************************************************************************************/ static void putNWChemGuessOptionsInfoInTextEditor() { } /************************************************************************************************************/ static void putNWChemGuessMethodInfoInTextEditor() { if( strcmp(selectedGuessMethod,"NONE")==0 ) return; { gchar buffer[BSIZE]; sprintf(buffer," %s ",selectedGuessMethod); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } } /*************************************************************************************************************/ void putNWChemGuessInfoInTextEditor() { putNWChemGuessMethodInfoInTextEditor(); putNWChemGuessOptionsInfoInTextEditor(); } /************************************************************************************************************/ static void traitementGuessMethod (GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; gchar* res = NULL; gint i; /* gchar* s;*/ if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } for(i=0;i #include #include "../../Config.h" #include "../Common/Global.h" #include "../NWChem/NWChemTypes.h" #include "../NWChem/NWChemGlobal.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Utils/GabeditTextEdit.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" static gchar selectedTypeBasis[BSIZE]=""; static gchar** listBasisReal = NULL; static gchar** listBasisView = NULL; static gint numberOfBasis = 0; /*************************************************************************************************************/ static gchar* listTypeBasisView[] = { "Pople Style basis sets", "Pople with one diffuse function on non-hydrogen atoms", "Pople with one diffuse function on all atoms", "Dunning basis sets", "Jensen Basis Sets", "Miscellenous and Specialized Basis Sets", }; static gchar* listTypeBasisReal[] = { "Pople", "PopleDiffuseNonHydrogen", "PopleDiffuseAllAtoms", "Dunning", "Jensen", "Miscellenous", }; static guint numberOfTypeBasis = G_N_ELEMENTS (listTypeBasisView); /*************************************************************************************************************/ static gchar* listPopleBasisView[] = { "6-31G Pople 6-31G and its modifications", "6-311G Pople 6-311G and its modifications", "3-21G* 3-21G plus one polarisation function all non-hydrogens atoms", "6-31G* 6-31G plus one polarisation function all non-hydrogens atoms", "6-311G* 6-311G plus one polarisation function all non-hydrogens atoms", "3-21G** 3-21G plus one polarisation function all atoms", "6-31G** 6-31G plus one polarisation function all atoms", "6-311G** 6-311G plus one polarisation function all atoms", "3-21G(2d) 3-21G plus two polarisation functions all non-hydrogens atoms", "6-31G(2d) 6-31G plus two polarisation functions all non-hydrogens atoms", "6-311G(2d) 6-311G plus two polarisation functions all non-hydrogens atoms", "3-21G(2d,2p) 3-21G plus two polarisation functions all atoms", "6-31G(2d,2p) 6-31G plus two polarisation functions all atoms", "6-311G(2d,2p) 6-311G plus two polarisation functions all atoms", "3-21G(2df) 3-21G plus three polarisation functions all non-hydrogens atoms", "6-31G(2df) 6-31G plus three polarisation functions all non-hydrogens atoms", "6-311G(2df) 6-311G plus three polarisation functions all non-hydrogens atoms", "3-21G(2df,2pd) 3-21G plus three polarisation functions all atoms", "6-31G(2df,2pd) 6-31G plus three polarisation functions all atoms", "6-311G(2df,2pd) 6-311G plus three polarisation functions all atoms", "3-21G(3df) 3-21G plus four polarisation functions all non-hydrogens atoms", "6-31G(3df) 6-31G plus four polarisation functions all non-hydrogens atoms", "6-311G(3df) 6-311G plus four polarisation functions all non-hydrogens atoms", "3-21G(3df,3pd) 3-21G plus four polarisation functions all atoms", "6-31G(3df,3pd) 6-31G plus four polarisation functions all atoms", "6-311G(3df,3pd) 6-311G plus four polarisation functions all atoms", }; static gchar* listPopleBasisReal[] = { "6-31G", "6-311G", "3-21G*", "6-31G*", "6-311G*", "3-21G**", "6-31G**", "6-311G**", "3-21G(2d)", "6-31G(2d)", "6-311G(2d)", "3-21G(2d,2p)", "6-31G(2d,2p)", "6-311G(2d,2p)", "3-21G(2df)", "6-31G(2df)", "6-311G(2df)", "3-21G(2df,2pd)", "6-31G(2df,2pd)", "6-311G(2df,2pd)", "3-21G(3df)", "6-31G(3df)", "6-311G(3df)", "3-21G(3df,3pd)", "6-31G(3df,3pd)", "6-311G(3df,3pd)", }; static guint numberOfPopleBasis = G_N_ELEMENTS (listPopleBasisView); /*************************************************************************************************************/ static gchar* listPopleDiffuseNonHydrogenBasisView[] = { "3-21+G 3-21G plus diffuse functions on all non-hydrogens atoms", "6-31+G 6-31G plus diffuse functions on all non-hydrogens atoms", "6-311+G 6-311G plus diffuse functions on all non-hydrogens atoms", "3-21+G* 3-21G + diff. non-hydrogens + 1 pol. non-hydrogens", "6-31+G* 6-31G + diff. non-hydrogens + 1 pol. non-hydrogens", "6-311+G* 6-311G + diff. non-hydrogens + 1 pol. non-hydrogens", "3-21+G** 3-21G + diff. non-hydrogens + 1 pol. ", "6-31+G** 6-31G + diff. non-hydrogens + 1 pol. ", "6-311+G** 6-311G + diff. non-hydrogens + 1 pol. ", "3-21+G(2d) 3-21G + diff. non-hydrogens + 2 pol. non-hydrogens", "6-31+G(2d) 6-31G + diff. non-hydrogens + 2 pol. non-hydrogens", "6-311+G(2d) 6-311G + diff. non-hydrogens + 2 pol. non-hydrogens", "3-21+G(2d,2p) 3-21G + diff. non-hydrogens + 2 pol.", "6-31+G(2d,2p) 6-31G + diff. non-hydrogens + 2 pol.", "6-311+G(2d,2p) 6-311G + diff. non-hydrogens + 2 pol.", "3-21+G(2df) 3-21G + diff. non-hydrogens + 3 pol. non-hydrogens", "6-31+G(2df) 6-31G + diff. non-hydrogens + 3 pol. non-hydrogens", "6-311+G(2df) 6-311G + diff. non-hydrogens + 3 pol. non-hydrogens", "3-21+G(2df,2pd) 3-21G + diff. non-hydrogens + 3 pol.", "6-31+G(2df,2pd) 6-31G + diff. non-hydrogens + 3 pol.", "6-311+G(2df,2pd) 6-311G + diff. non-hydrogens + 3 pol.", "3-21+G(3df) 3-21G + diff. non-hydrogens + 4 pol. non-hydrogens", "6-31+G(3df) 6-31G + diff. non-hydrogens + 4 pol. non-hydrogens", "6-311+G(3df) 6-311G + diff. non-hydrogens + 4 pol. non-hydrogens", "3-21+G(3df,3pd) 3-21G + diff. non-hydrogens + 4 pol.", "6-31+G(3df,3pd) 6-31G + diff. non-hydrogens + 4 pol.", "6-311+G(3df,3pd) 6-311G + diff. non-hydrogens + 4 pol.", }; static gchar* listPopleDiffuseNonHydrogenBasisReal[] = { "3-21+G", "6-31+G", "6-311+G", "3-21+G*", "6-31+G*", "6-311+G*", "3-21+G**", "6-31+G**", "6-311+G**", "3-21+G(2d)", "6-31+G(2d)", "6-311+G(2d)", "3-21+G(2d,2p)", "6-31+G(2d,2p)", "6-311+G(2d,2p)", "3-21+G(2df)", "6-31+G(2df)", "6-311+G(2df)", "3-21+G(2df,2pd)", "6-31+G(2df,2pd)", "6-311+G(2df,2pd)", "3-21+G(3df)", "6-31+G(3df)", "6-311+G(3df)", "3-21+G(3df,3pd)", "6-31+G(3df,3pd)", "6-311+G(3df,3pd)", }; static guint numberOfPopleDiffuseNonHydrogenBasis = G_N_ELEMENTS (listPopleDiffuseNonHydrogenBasisView); /*************************************************************************************************************/ static gchar* listPopleDiffuseAllAtomsBasisView[] = { "3-21++G 3-21G plus diffuse functions on all atoms", "6-31++G 6-31G plus diffuse functions on all atoms", "6-311++G 6-311G plus diffuse functions on all atoms", "3-21++G* 3-21G + diff. + 1 pol. non-hydrogens", "6-31++G* 6-31G + diff. + 1 pol. non-hydrogens", "6-311++G* 6-311G + diff. + 1 pol. non-hydrogens", "3-21++G** 3-21G + diff. + 1 pol. ", "6-31++G** 6-31G + diff. + 1 pol. ", "6-311++G** 6-311G + diff. + 1 pol. ", "3-21++G(2d) 3-21G + diff. + 2 pol. non-hydrogens", "6-31++G(2d) 6-31G + diff. + 2 pol. non-hydrogens", "6-311++G(2d) 6-311G + diff. + 2 pol. non-hydrogens", "3-21++G(2d,2p) 3-21G + diff. + 2 pol.", "6-31++G(2d,2p) 6-31G + diff. + 2 pol.", "6-311++G(2d,2p) 6-311G + diff. + 2 pol.", "3-21++G(2df) 3-21G + diff. + 3 pol. non-hydrogens", "6-31++G(2df) 6-31G + diff. + 3 pol. non-hydrogens", "6-311++G(2df) 6-311G + diff. + 3 pol. non-hydrogens", "3-21++G(2df,2pd) 3-21G + diff. + 3 pol.", "6-31++G(2df,2pd) 6-31G + diff. + 3 pol.", "6-311++G(2df,2pd) 6-311G + diff. + 3 pol.", "3-21++G(3df) 3-21G + diff. + 4 pol. non-hydrogens", "6-31++G(3df) 6-31G + diff. + 4 pol. non-hydrogens", "6-311++G(3df) 6-311G + diff. + 4 pol. non-hydrogens", "3-21++G(3df,3pd) 3-21G + diff. + 4 pol.", "6-31++G(3df,3pd) 6-31G + diff. + 4 pol.", "6-311++G(3df,3pd) 6-311G + diff. + 4 pol.", }; static gchar* listPopleDiffuseAllAtomsBasisReal[] = { "3-21++G", "6-31++G", "6-311++G", "3-21++G*", "6-31++G*", "6-311++G*", "3-21++G**", "6-31++G**", "6-311++G**", "3-21++G(2d)", "6-31++G(2d)", "6-311++G(2d)", "3-21++G(2d,2p)", "6-31++G(2d,2p)", "6-311++G(2d,2p)", "3-21++G(2df)", "6-31++G(2df)", "6-311++G(2df)", "3-21++G(2df,2pd)", "6-31++G(2df,2pd)", "6-311++G(2df,2pd)", "3-21++G(3df)", "6-31++G(3df)", "6-311++G(3df)", "3-21++G(3df,3pd)", "6-31++G(3df,3pd)", "6-311++G(3df,3pd)", }; static guint numberOfPopleDiffuseAllAtomsBasis = G_N_ELEMENTS (listPopleDiffuseAllAtomsBasisView); /*************************************************************************************************************/ static gchar* listDunningBasisView[] = { "cc-pVDZ Dunning correlation concisistent polarized double zeta", "Aug-cc-pVDZ Same but including diffuse functions", "cc-pVTZ Dunning correlation concisistent polarized triple zeta", "Aug-cc-pVTZ Same but including diffuse functions(g-functions deleted!)", "cc-pVQZ Dunning correlation concisistent polarized quadruple zeta", "Aug-cc-pVQZ with diffuse functions", "cc-pV5Z Dunning correlation concisistent polarized quintuple zeta", "Aug-cc-pV5Z with diffuse functions", "cc-pV6Z Dunning correlation concisistent polarized sextuple zeta", "Aug-cc-pV6Z ... with diffuse functions", }; static gchar* listDunningBasisReal[] = { "cc-pVDZ", "Aug-cc-pVDZ", "cc-pVTZ", "Aug-cc-pVTZ", "cc-pVQZ", "Aug-cc-pVQZ", "cc-pV5Z", "Aug-cc-pV5Z", "cc-pV6Z", "Aug-cc-pV6Z", }; static guint numberOfDunningBasis = G_N_ELEMENTS (listDunningBasisView); /*************************************************************************************************************/ static gchar* listJensenBasisView[] = { "PC-1 Polarization consistent basis sets (H-Ar) optimized for DFT", "PC-2 double zeta polarization consistent basis sets (H-Ar) optimized for DFT", "PC-3 triple zeta polarization consistent basis sets (H-Ar) optimized for DFT", "PC-4 quadruple zeta polarization consistent basis sets (H-Ar) optimized for DFT", "Aug-PC-1 PC-1 with augmentations by diffuse functions", "Aug-PC-2 PC-2 with augmentations by diffuse functions", "Aug-PC-3 PC-3 with augmentations by diffuse functions", "Aug-PC-4 PC-4 with augmentations by diffuse functions", }; static gchar* listJensenBasisReal[] = { "PC-1", "PC-2", "PC-3", "PC-4", "Aug-PC-1", "Aug-PC-2", "Aug-PC-3", "Aug-PC-4", }; static guint numberOfJensenBasis = G_N_ELEMENTS (listJensenBasisView); /*************************************************************************************************************/ static gchar* listMiscellenousBasisView[] = { "IGLO-II Kutzelniggs basis set for NMR and EPR calculations", "IGLO-III Kutzelniggs basis set for NMR and EPR calculations (accurate)", }; static gchar* listMiscellenousBasisReal[] = { "IGLO-II", "IGLO-III", }; static guint numberOfMiscellenousBasis = G_N_ELEMENTS (listMiscellenousBasisView); /*************************************************************************************************************/ static gchar* listAuxBasisView[] = { "cc-pVDZ-RI", "cc-pVTZ-RI", "cc-pVQZ-RI", "cc-pV5Z-RI", "cc-pV6Z-RI", "pCVDZ-RI", }; static gchar* listAuxBasisReal[] = { "cc-pVDZ-RI", "cc-pVTZ-RI", "cc-pVQZ-RI", "cc-pV5Z-RI", "cc-pV6Z-RI", "pCVDZ-RI", }; static guint numberOfAuxBasis = G_N_ELEMENTS (listAuxBasisView); /*************************************************************************************************************/ static void setNWChemBasis(GtkWidget* comboBasis) { gint i; if(strcmp(selectedTypeBasis, "Pople")==0) { listBasisView = listPopleBasisView; listBasisReal = listPopleBasisReal; numberOfBasis = numberOfPopleBasis; } else if(strcmp(selectedTypeBasis, "PopleDiffuseNonHydrogen")==0) { listBasisView = listPopleDiffuseNonHydrogenBasisView; listBasisReal = listPopleDiffuseNonHydrogenBasisReal; numberOfBasis = numberOfPopleDiffuseNonHydrogenBasis; } else if(strcmp(selectedTypeBasis, "PopleDiffuseAllAtoms")==0) { listBasisView = listPopleDiffuseAllAtomsBasisView; listBasisReal = listPopleDiffuseAllAtomsBasisReal; numberOfBasis = numberOfPopleDiffuseAllAtomsBasis; } else if(strcmp(selectedTypeBasis, "Dunning")==0) { listBasisView = listDunningBasisView; listBasisReal = listDunningBasisReal; numberOfBasis = numberOfDunningBasis; } else if(strcmp(selectedTypeBasis, "Jensen")==0) { listBasisView = listJensenBasisView; listBasisReal = listJensenBasisReal; numberOfBasis = numberOfJensenBasis; } else { listBasisView = listMiscellenousBasisView; listBasisReal = listMiscellenousBasisReal; numberOfBasis = numberOfMiscellenousBasis; } if (comboBasis && GTK_IS_COMBO_BOX(comboBasis)) { GtkTreeModel * model = NULL; model = gtk_combo_box_get_model(GTK_COMBO_BOX(comboBasis)); gtk_list_store_clear(GTK_LIST_STORE(model)); for(i=0;ichild; g_object_set_data(G_OBJECT (entry), "Combo",combo); return entry; } /***********************************************************************************************/ void addNWChemTypeBasisToTable(GtkWidget *table, gint i, GtkWidget* comboBasis) { GtkWidget* combo = NULL; add_label_table(table,_("Type"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); combo = create_list_type_basis(comboBasis); gtk_table_attach(GTK_TABLE(table),combo,2,2+1,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); } /***********************************************************************************************/ GtkWidget* addNWChemBasisToTable(GtkWidget *table, gint i) { GtkWidget* entryBasis = NULL; GtkWidget* comboBasis = NULL; gint nlistBasis = 1; gchar* listBasis[] = {" "}; add_label_table(table,_("Basis"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryBasis = addComboListToATable(table, listBasis, nlistBasis, i, 2, 1); comboBasis = g_object_get_data(G_OBJECT (entryBasis), "Combo"); gtk_widget_set_sensitive(entryBasis, FALSE); g_signal_connect(G_OBJECT(entryBasis),"changed", G_CALLBACK(changedEntryBasis),NULL); return comboBasis; } /***********************************************************************************************/ void addNWChemAuxBasisToTable(GtkWidget *table, gint i, GtkWidget* comboMethod, GtkWidget* comboExcited) { GtkWidget* entryAuxBasis = NULL; GtkWidget* comboAuxBasis = NULL; GtkWidget* label = NULL; label = add_label_table(table,_("Auxiliary basis"),(gushort)i,0); if(comboMethod) g_object_set_data(G_OBJECT (comboMethod), "LabelAuxBasis1", label); if(comboExcited) g_object_set_data(G_OBJECT (comboExcited), "LabelAuxBasis1", label); label = add_label_table(table,":",(gushort)i,1); if(comboMethod) g_object_set_data(G_OBJECT (comboMethod), "LabelAuxBasis2", label); if(comboExcited) g_object_set_data(G_OBJECT (comboExcited), "LabelAuxBasis2", label); entryAuxBasis = addComboListToATable(table, listAuxBasisView, numberOfAuxBasis, i, 2, 1); comboAuxBasis = g_object_get_data(G_OBJECT (entryAuxBasis), "Combo"); gtk_widget_set_sensitive(entryAuxBasis, FALSE); if(comboMethod) g_object_set_data(G_OBJECT (comboMethod), "ComboAuxBasis", comboAuxBasis); if(comboExcited) g_object_set_data(G_OBJECT (comboExcited), "ComboAuxBasis", comboAuxBasis); g_signal_connect(G_OBJECT(entryAuxBasis),"changed", G_CALLBACK(changedEntryAuxBasis),NULL); nwchemMolecule.auxBasisName=g_strdup(listAuxBasisReal[0]); } /***********************************************************************************************/ static void putNWChemBasisInTextEditor() { gchar buffer[BSIZE]; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &nwchemColorFore.keyWord, &nwchemColorBack.keyWord, "\nbasis \"ao basis\" spherical\n", -1); sprintf(buffer," * library %s ",nwchemBasis.name); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &nwchemColorFore.keyWord, &nwchemColorBack.keyWord, "\nend\n", -1); } /***********************************************************************************************/ void putNWChemAuxBasisInTextEditor() { gchar buffer[BSIZE]; if(!nwchemMolecule.auxBasisName) return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, &nwchemColorFore.keyWord, &nwchemColorBack.keyWord, "\nbasis \"ri-mp2 basis\" spherical\n", -1); sprintf(buffer," * library %s",nwchemMolecule.auxBasisName); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &nwchemColorFore.keyWord, &nwchemColorBack.keyWord, "\nend\n", -1); } /***********************************************************************************************/ void putNWChemBasisInfoInTextEditor() { putNWChemBasisInTextEditor(); } GabeditSrc250/src/NWChem/NWChemKeywords.c0000644000175100017510000012352013130665226020424 0ustar alloucheallouche/* NWChemKeywords.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../NWChem/NWChemTypes.h" #include "../NWChem/NWChemGlobal.h" #include "../NWChem/NWChemMolecule.h" #include "../NWChem/NWChemBasis.h" #include "../NWChem/NWChemGuess.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget* comboSCF = NULL; static GtkWidget* comboMethod = NULL; static GtkWidget* comboTypeMethod = NULL; static GtkWidget* comboExcited = NULL; static void setNWChemMethods(); /*************************************************************************************************************/ static gchar* listJobView[] = { "Single Point Energy", "Equilibrium structure search", "Frequencies", "Transition state", "Equilibrium structure search + Frequencies", "Transition state + Frequencies", }; static gchar* listJobReal[] = { "SP", "optimize", "freq", "saddle", "opt&freq", "saddle&freq", }; static guint numberOfJobs = G_N_ELEMENTS (listJobView); static gchar selectedJob[BSIZE]="SP"; /*************************************************************************************************************/ static gchar* listSCFView[] = { "default","unrestricted", "restricted"}; static gchar* listSCFReal[] = { "DEF", "TRUE", "FALSE"}; static guint numberOfSCF = G_N_ELEMENTS (listSCFView); static gchar selectedSCF[BSIZE]="DEF"; /*************************************************************************************************************/ static gchar* listTypeMethodsView[] = { "Hatree-Fock", "Hatree-Fock using DFT module", "Local and gradient corrected functionals", "Hybrid functionals", "Meta-GGA and hybrid meta-GGA's", "Second Order Many Body Perturbation Theory", "High-level Single Reference Methods", "Semiempirical Methods", }; static gchar* listTypeMethodsReal[] = { "SCF", "HFexch", "DFT", "Hybrid", "Meta-GGA", "MP2", "HL-SR", "SemiEmp", }; static guint numberOfTypeMethods = G_N_ELEMENTS (listTypeMethodsView); static gchar selectedTypeMethod[BSIZE]="SCF"; /*************************************************************************************************************/ static gchar* listHFMethodsView[] = { "HF", }; static gchar* listHFMethodsReal[] = { "SCF", }; static guint numberOfHFMethods = G_N_ELEMENTS (listHFMethodsView); /*************************************************************************************************************/ static gchar* listHFDFTMethodsView[] = { "HFexch", }; static gchar* listHFDFTMethodsReal[] = { "XC HFexch", }; static guint numberOfHFDFTMethods = G_N_ELEMENTS (listHFDFTMethodsView); /*************************************************************************************************************/ static gchar* listDFTMethodsView[] = { "Slater Slater Exchange only functional", "LDA Local density approximation", "VWN5 Vosko-Wilk-Nusair local density approx", "VWN3 Vosko-Wilk-Nusair local density approx.", "PWLDA Perdew-Wang parameterization of LDA", "BP86 Becke '88 exchange and Perdew '86 correlation", "BLYP Becke '88 exchange and Lee-Yang-Parr correlation", "OLYP Handy's 'optimal' exchange and Lee-Yang-Parr correlation", "GLYP Gill's '96 exchange and Lee-Yang-Parr correlation", "XLYP The Xu and Goddard exchange and Lee-Yang-Parr correlation", "PW91 Perdew-Wang '91 GGA functional", "mPWPW Modified PW exchange and PW correlation", "mPWLYP Modified PW exchange and LYP correlation", "PBE Perdew-Burke-Erzerhoff GGA functional", }; static gchar* listDFTMethodsReal[] = { "XC slater", "XC slater vwn_5", "XC vwn_5", "XC vwn_3", "XC pw91lda", "XC becke88 perdew86", "XC becke88 lyp", "XC op lyp", "XC gill96 lyp", "XC xperdew91 lyp", "XC perdew91", "XC mpw91 perdew91", "XC mpw91 lyp", "XC xpbe96 cpbe96", }; static guint numberOfDFTMethods = G_N_ELEMENTS (listDFTMethodsView); /*************************************************************************************************************/ static gchar* listHybridMethodsView[] = { "B3LYP The popular B3LYP functional (20% HF exchange)", "PBE0 One parameter hybrid version of PBE", "beckehandh", "acm", "becke97", "becke97-1", "becke97-2", "becke97-3", "becke98", "mpw1k", }; static gchar* listHybridMethodsReal[] = { "XC B3LYP", "XC PBE0", "XC beckehandh", "XC acm", "XC becke97", "XC becke97-1", "XC becke97-2", "XC becke97-3", "XC becke98", "XC mpw1k", }; static guint numberOfHybridMethods = G_N_ELEMENTS (listHybridMethodsView); /*************************************************************************************************************/ static gchar* listMetaGGAMethodsView[] = { "xpkzb99 cpkzb99", "xtpss03 ctpss03", "cpw6b95 cpwb6k", "xm05 cm05", "xm05-2x cm05-2x", "xvsxc cvsxc", "xm06-L cm06-L", "xm06-hf cm06-hf", "xm06 cm06", "xm06-2x cm06-2x", "xctpssh", "bb1k", "mpw1b95", "mpwb1k", "pw6b95", "pwb6k", "m05", "vsxc", "m06-hf", "m06", "m06-2x", }; static gchar* listMetaGGAMethodsReal[] = { "XC xpkzb99 cpkzb99", "XC xtpss03 ctpss03", "XC cpw6b95 cpwb6k", "XC xm05 cm05", "XC xm05-2x cm05-2x", "XC xvsxc cvsxc", "XC xm06-L cm06-L", "XC xm06-hf cm06-hf", "XC xm06 cm06", "XC xm06-2x cm06-2x", "XC xctpssh", "XC bb1k", "XC mpw1b95", "XC mpwb1k", "XC pw6b95", "XC pwb6k", "XC m05", "XC vsxc", "XC m06-hf", "XC m06", "XC m06-2x", }; static guint numberOfMetaGGAMethods = G_N_ELEMENTS (listMetaGGAMethodsView); /*************************************************************************************************************/ static gchar* listMP2MethodsView[] = { "MP2", "RIMP2", }; static gchar* listMP2MethodsReal[] = { "MP2", "RIMP2", }; static guint numberOfMP2Methods = G_N_ELEMENTS (listMP2MethodsView); /*************************************************************************************************************/ static gchar* listHighLevelSingleRefMethodsView[] = { "LCCD", "CCD", "CCSD", "LCCSD", "CCSDT", "CCSDTQ", "CCSD(T) ", "CCSD[T]", "CISD", "QCISD", "CISDT", "CISDTQ", "MBPT2", "MBPT3", "MBPT4", }; static gchar* listHighLevelSingleRefMethodsReal[] = { "LCCD", "CCD", "CCSD", "LCCSD", "CCSDT", "CCSDTQ", "CCSD(T) ", "CCSD[T]", "CISD", "QCISD", "CISDT", "CISDTQ", "MBPT2", "MBPT3", "MBPT4", }; static guint numberOfHighLevelSingleRefMethods = G_N_ELEMENTS (listHighLevelSingleRefMethodsView); /*************************************************************************************************************/ static gchar* listSemiEmpMethodsView[] = { "ZINDO/S", "ZINDO/1", "ZINDO/2", "NDDO/1", "NDDO/2", "MNDO", "AM1", "PM3", }; static gchar* listSemiEmpMethodsReal[] = { "ZINDO/S", "ZINDO/1", "ZINDO/2", "NDDO/1", "NDDO/2", "MNDO", "AM1", "PM3", }; static guint numberOfSemiEmpMethods = G_N_ELEMENTS (listSemiEmpMethodsView); /*************************************************************************************************************/ static gchar selectedMethod[BSIZE]="HF"; static gchar** listMethodsView = listHybridMethodsView; static gchar** listMethodsReal = listHybridMethodsReal; static guint numberOfMethods = G_N_ELEMENTS (listHybridMethodsView); /*************************************************************************************************************/ static gchar* listScfConvergenceView[] = { "Default", "Energy convergence = 10-6 au", "Energy convergence = 10-7 au", "Energy convergence = 10-8 au", "Energy convergence = 10-9 au", "Energy convergence = 10-10 au" }; static gchar* listScfConvergenceReal[] = { "NONE", "1e-6", "1e-7", "1e-8", "1e-9", "1e-10" }; static guint numberOfScfConvergence = G_N_ELEMENTS (listScfConvergenceView); static gchar selectedScfConvergence[BSIZE]="NONE"; /*************************************************************************************************************/ static gchar* listNothingExcitedView[] = { "Nothing", }; static gchar* listNothingExcitedReal[] = { "NONE", }; static guint numberOfNothingExcited = G_N_ELEMENTS (listNothingExcitedView); /*************************************************************************************************************/ static gchar* listSemiEmpExcitedView[] = { "Nothing", "CIS", }; static gchar* listSemiEmpExcitedReal[] = { "NONE", "CIS", }; static guint numberOfSemiEmpExcited = G_N_ELEMENTS (listSemiEmpExcitedView); /*************************************************************************************************************/ static gchar* listHFExcitedView[] = { "Nothing", "CIS", "CIS(D)", }; static gchar* listHFExcitedReal[] = { "NONE", "CIS", "CIS(D)", }; static guint numberOfHFExcited = G_N_ELEMENTS (listHFExcitedView); /*************************************************************************************************************/ static gchar* listDFTExcitedView[] = { "Nothing", "CIS", "TDDFT", }; static gchar* listDFTExcitedReal[] = { "NONE", "CIS", "TDDFT", }; static guint numberOfDFTExcited = G_N_ELEMENTS (listDFTExcitedView); /*************************************************************************************************************/ static gchar* listHLExcitedView[] = { "Nothing", "EOM", }; static gchar* listHLExcitedReal[] = { "NONE", "EOM", }; static guint numberOfHLExcited = G_N_ELEMENTS (listHLExcitedView); /*************************************************************************************************************/ static gchar selectedExcited[BSIZE]="NONE"; static gchar** listExcitedView = listNothingExcitedView; static gchar** listExcitedReal = listNothingExcitedReal; static guint numberOfExcited = G_N_ELEMENTS (listNothingExcitedView); /*************************************************************************************************************/ gchar* getNWChemExcitedMethod() { return selectedExcited; } /*************************************************************************************************************/ gchar* getNWChemTypeMethod() { return selectedTypeMethod; } /*************************************************************************************************************/ static void putNWChemExcitedInfoInTextEditor() { gchar buffer[BSIZE]; if(!strcmp(selectedExcited,"NONE"))return; if(!strcmp(selectedExcited,"EOM"))return; gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, "\n",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &nwchemColorFore.keyWord, &nwchemColorBack.keyWord, "tddft\n", -1); if(strstr(selectedExcited,"CIS")) sprintf(buffer," cis\n"); else sprintf(buffer," rpa\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer," nroots %d # the number of excited states to be calculated.\n",8); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer, "# nosinglet\n" "# notriplet\n" "# maxvecs 1000 # it is the maximum number of trial vectors that the calculation is allowed to hold\n" "# thresh 1e-4\n" "# maxiter 100\n" "# freeze atomic # To exclude the atom-like core regions\n" "# freeze 10 # the number of lowest-lying occupied orbitals be excluded\n" "# freeze virtual 5 # to freeze the top 5 virtual orbitals\n" ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"end #tddft\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } /*************************************************************************************************************/ static void setNWChemExcited() { GtkTreeIter iter; GtkTreeIter iter0; gint i; if(strcmp(selectedTypeMethod,"HF")==0) { listExcitedView = listHFExcitedView; listExcitedReal = listHFExcitedReal; numberOfExcited = numberOfHFExcited; } else if(strcmp(selectedTypeMethod,"HFexch")==0) { listExcitedView = listDFTExcitedView; listExcitedReal = listDFTExcitedReal; numberOfExcited = numberOfDFTExcited; } else if(strcmp(selectedTypeMethod,"DFT")==0) { listExcitedView = listDFTExcitedView; listExcitedReal = listDFTExcitedReal; numberOfExcited = numberOfDFTExcited; } else if(strcmp(selectedTypeMethod,"Hybrid")==0) { listExcitedView = listDFTExcitedView; listExcitedReal = listDFTExcitedReal; numberOfExcited = numberOfDFTExcited; } else if(strcmp(selectedTypeMethod,"Meta-GGA")==0) { listExcitedView = listDFTExcitedView; listExcitedReal = listDFTExcitedReal; numberOfExcited = numberOfDFTExcited; } else if(strcmp(selectedTypeMethod,"HL-SR")==0&& (!strcmp(selectedMethod,"CCSD")||!strcmp(selectedMethod,"CCSDT")||!strcmp(selectedMethod,"CCSDTQ"))) { listExcitedView = listHLExcitedView; listExcitedReal = listHLExcitedReal; numberOfExcited = numberOfHLExcited; } else if(strcmp(selectedTypeMethod,"SemiEmp")==0 && strstr(selectedMethod,"/S")) { listExcitedView = listSemiEmpExcitedView; listExcitedReal = listSemiEmpExcitedReal; numberOfExcited = numberOfSemiEmpExcited; } else { listExcitedView = listNothingExcitedView; listExcitedReal = listNothingExcitedReal; numberOfExcited = numberOfNothingExcited; } if (comboExcited && gtk_combo_box_get_active_iter (GTK_COMBO_BOX(comboExcited), &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(GTK_COMBO_BOX(comboExcited)); GtkTreeStore *store = GTK_TREE_STORE(model); gtk_tree_store_clear(store); for(i=0;i #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../NWChem/NWChemTypes.h" #include "../NWChem/NWChemGlobal.h" #include "../NWChem/NWChemKeywords.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" /************************************************************************************************************/ static gint totalCharge = 0; static gint spinMultiplicity=1; /************************************************************************************************************/ gint getNWChemMultiplicity() { return spinMultiplicity; } /************************************************************************************************************/ void initNWChemMoleculeButtons() { } /************************************************************************************************************/ void initNWChemMolecule() { nwchemMolecule.listOfAtoms = NULL; nwchemMolecule.totalNumberOfElectrons = 0; nwchemMolecule.numberOfValenceElectrons = 0; nwchemMolecule.numberOfAtoms = 0; } /************************************************************************************************************/ void freeNWChemMolecule() { static gboolean first = TRUE; if(first) { initNWChemMolecule(); first = FALSE; return; } if(nwchemMolecule.listOfAtoms) g_free(nwchemMolecule.listOfAtoms); initNWChemMolecule(); } /************************************************************************************************************/ static gint setNWChemMoleculeFromSXYZ(gint nAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z) { gint n; NWChemAtom* atomList = NULL; nwchemMolecule.listOfAtoms = NULL; nwchemMolecule.numberOfAtoms = 0; if(nAtoms<1) return 1; nwchemMolecule.listOfAtoms = (NWChemAtom*)g_malloc(sizeof(NWChemAtom)*(nAtoms)); if(nwchemMolecule.listOfAtoms==NULL) return -1; nwchemMolecule.numberOfAtoms = nAtoms; atomList = nwchemMolecule.listOfAtoms; for(n=0; nposition[0] = X[n]; atomList->position[1] = Y[n]; atomList->position[2] = Z[n]; atomList->symbol = g_strdup(symbols[n]); atomList++; } return 0; } /************************************************************************************************************/ static void setXYZFromGeomXYZ(gint i, gdouble* x, gdouble* y, gdouble *z) { if(!test(GeomXYZ[i].X)) *x = get_value_variableXYZ(GeomXYZ[i].X); else *x = atof(GeomXYZ[i].X); if(!test(GeomXYZ[i].Y)) *y = get_value_variableXYZ(GeomXYZ[i].Y); else *y = atof(GeomXYZ[i].Y); if(!test(GeomXYZ[i].Z)) *z = get_value_variableXYZ(GeomXYZ[i].Z); else *z = atof(GeomXYZ[i].Z); if(Units==0) { *x *= BOHR_TO_ANG; *y *= BOHR_TO_ANG; *z *= BOHR_TO_ANG; } } /************************************************************************************************************/ static gboolean setNWChemMoleculeFromGeomXYZ() { gint i; gchar** symbols = NULL; gdouble* X = NULL; gdouble* Y = NULL; gdouble* Z = NULL; gint numberOfAtoms = NcentersXYZ; if(numberOfAtoms<1) return FALSE; symbols = (gchar**)g_malloc(sizeof(gchar*)*(numberOfAtoms)); if(symbols == NULL) return FALSE; X = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(X == NULL) return FALSE; Y = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Y == NULL) return FALSE; Z = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Z == NULL) return FALSE; nwchemMolecule.totalNumberOfElectrons = 0; for(i=0; iposition[k]-atomList->position[k+1]; dd += xx*xx; } if(i==0) d = dd; else if(d>dd) d= dd; atomList++; } d = sqrt(d); return d; } */ /*************************************************************************************************************/ /* static void setFirstAtomToXAxis(gint numberOfAtoms, gdouble* X, gdouble* Y, gdouble*Z) { gdouble d; gdouble s; gdouble c; gint i; gdouble positionTolerance = -1; if(numberOfAtoms<1) return; d = X[0]*X[0]+Y[0]*Y[0]; if(d<1e-10) return; d = sqrt(d); if(positionTolerance<0) positionTolerance= getMinDistance()/50; s = -Y[0]/d; c = +X[0]/d; for (i=0;i0) for(i=0;i0 && nV!= 3*nwchemMolecule.numberOfAtoms) { sprintf(buffer,"\nconstraints\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &nwchemColorFore.keyWord, &nwchemColorBack.keyWord, buffer, -1); for (i=0;iNUMBER_ENTRY_0) line=g_strdup_printf("%s\t%s\t%s",line,Geom[i].NR,Geom[i].R); if(Geom[i].Nentry>NUMBER_ENTRY_R) line=g_strdup_printf("%s\t%s\t%s",line,Geom[i].NAngle,Geom[i].Angle); if(Geom[i].Nentry>NUMBER_ENTRY_ANGLE) line=g_strdup_printf("%s\t%s\t%s",line,Geom[i].NDihedral,Geom[i].Dihedral); line=g_strdup_printf("%s\n",line); prop = prop_atom_get(Geom[i].Symb); gabedit_text_insert (GABEDIT_TEXT(text), NULL,NULL, &prop.color,line,-1); g_free(line); } if(NVariables>0) { gint nV = 0; for(i=0;i0) { gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL,"\t",-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &nwchemColorFore.keyWord, &nwchemColorBack.keyWord,"end\n",-1); } } gabedit_text_insert (GABEDIT_TEXT(text), NULL, &nwchemColorFore.keyWord, &nwchemColorBack.keyWord,"end\n",-1); } } /************************************************************************************************************/ void putNWChemMoleculeInfoInTextEditor() { putNWChemMoleculeInTextEditor(); } /************************************************************************************************************/ /* static GtkWidget* addRadioButtonToATable(GtkWidget* table, GtkWidget* friendButton, gchar* label, gint i, gint j, gint k) { GtkWidget *newButton; if(friendButton) newButton = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (friendButton)), label); else newButton = gtk_radio_button_new_with_label( NULL, label); gtk_table_attach(GTK_TABLE(table),newButton,j,j+k,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); g_object_set_data(G_OBJECT (newButton), "Label",NULL); g_object_set_data(G_OBJECT (newButton), "Type",NULL); return newButton; } */ /********************************************************************************/ static void setSpinMultiplicityComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity, gint spin) { GtkWidget *entry = NULL; gchar* t = NULL; if(!comboSpinMultiplicity) return; entry = GTK_BIN (comboSpinMultiplicity)->child; t = g_strdup_printf("%d",spin); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /************************************************************************************************************/ static void setComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity) { GList *glist = NULL; gint i; gint nlist = 0; gchar** list = NULL; gint k; gint kinc; gint ne = nwchemMolecule.numberOfValenceElectrons - totalCharge; if(ne%2==0) nlist = ne/2+1; else nlist = (ne+1)/2; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; t = g_strdup_printf("%d",charge); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /********************************************************************************/ static void setComboCharge(GtkWidget *comboCharge) { GList *glist = NULL; gint i; gint nlist; gchar** list = NULL; gint k; nlist = nwchemMolecule.numberOfValenceElectrons*2-2+1; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; g_object_set_data(G_OBJECT (entry), "Combo",combo); gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.2),-1); return entry; } /***********************************************************************************************/ static GtkWidget *addNWChemChargeToTable(GtkWidget *table, gint i) { GtkWidget* entryCharge = NULL; GtkWidget* comboCharge = NULL; gint nlistCharge = 1; gchar* listCharge[] = {"0"}; add_label_table(table,_("Charge"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryCharge = addComboListToATable(table, listCharge, nlistCharge, i, 2, 1); comboCharge = g_object_get_data(G_OBJECT (entryCharge), "Combo"); gtk_widget_set_sensitive(entryCharge, FALSE); return comboCharge; } /***********************************************************************************************/ static GtkWidget *addNWChemSpinToTable(GtkWidget *table, gint i) { GtkWidget* entrySpinMultiplicity = NULL; GtkWidget* comboSpinMultiplicity = NULL; gint nlistspinMultiplicity = 1; gchar* listspinMultiplicity[] = {"0"}; add_label_table(table,_("Spin multiplicity"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entrySpinMultiplicity = addComboListToATable(table, listspinMultiplicity, nlistspinMultiplicity, i, 2, 1); comboSpinMultiplicity = g_object_get_data(G_OBJECT (entrySpinMultiplicity), "Combo"); gtk_widget_set_sensitive(entrySpinMultiplicity, FALSE); g_signal_connect(G_OBJECT(entrySpinMultiplicity),"changed", G_CALLBACK(changedEntrySpinMultiplicity),NULL); return comboSpinMultiplicity; } /***********************************************************************************************/ static GtkWidget *addLabelNumberOfElectronsToTable(GtkWidget *table, gint i, GtkWidget *comboCharge) { GtkWidget* labelNumberOfElectrons = NULL; GtkWidget* hbox = NULL; GtkWidget* entryCharge = GTK_BIN(comboCharge)->child; labelNumberOfElectrons = gtk_label_new(" "); hbox = gtk_hbox_new(0,FALSE); gtk_box_pack_start (GTK_BOX (hbox), labelNumberOfElectrons, FALSE, FALSE, 0); gtk_table_attach(GTK_TABLE(table),hbox,0,0+3,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_SHRINK), 2,2); g_object_set_data(G_OBJECT (entryCharge), "LabelNumberOfElectrons", labelNumberOfElectrons); g_signal_connect(G_OBJECT(entryCharge),"changed", G_CALLBACK(changedEntryCharge),NULL); return labelNumberOfElectrons; } /***********************************************************************************************/ void createNWChemChargeMultiplicityFrame(GtkWidget *box) { GtkWidget* frame; GtkWidget* sep; GtkWidget* labelNumberOfElectrons; GtkWidget* vboxFrame; GtkWidget* comboSpinMultiplicity = NULL; GtkWidget* comboCharge = NULL; GtkWidget *table = NULL; gint i; totalCharge = TotalCharges[0]; spinMultiplicity=SpinMultiplicities[0]; table = gtk_table_new(3,5,FALSE); frame = gtk_frame_new (_("Charge & Multiplicty")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); i = 0; comboCharge = addNWChemChargeToTable(table, i); i = 1; comboSpinMultiplicity = addNWChemSpinToTable(table, i); i = 2; sep = gtk_hseparator_new ();; gtk_table_attach(GTK_TABLE(table),sep,0,0+3,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); i = 3; labelNumberOfElectrons=addLabelNumberOfElectronsToTable(table, i, comboCharge); if(GTK_IS_COMBO_BOX(comboCharge)) g_object_set_data(G_OBJECT (GTK_BIN(comboCharge)->child), "ComboSpinMultiplicity", comboSpinMultiplicity); setComboCharge(comboCharge); setComboSpinMultiplicity(comboSpinMultiplicity); if(GTK_IS_WIDGET(labelNumberOfElectrons)) { gint ne = nwchemMolecule.numberOfValenceElectrons - totalCharge; gchar buffer[BSIZE]; sprintf(buffer, "Number of electrons = %d",ne); gtk_label_set_text(GTK_LABEL(labelNumberOfElectrons),buffer); } /* activate sensitivity */ /* if(GTK_IS_WIDGET(comboMethod)) setComboMethod(comboMethod); g_object_set_data(G_OBJECT (box), "EntryMethod", GTK_BIN(comboMethod)->child); */ } /************************************************************************************************************/ GabeditSrc250/src/QChem/0000755000175100017510000000000013130743374015261 5ustar allouchealloucheGabeditSrc250/src/QChem/QChemMolecule.h0000644000175100017510000000054613130665226020121 0ustar alloucheallouche #ifndef __GABEDIT_QCHEMMOLECULE_H__ #define __GABEDIT_QCHEMMOLECULE_H__ gint getQChemMultiplicity(); void initQChemMoleculeButtons(); void initQChemMolecule(); void freeQChemMolecule(); void putQChemMoleculeInfoInTextEditor(); gboolean setQChemMolecule(); void createQChemChargeMultiplicityFrame(GtkWidget *box); #endif /* __GABEDIT_QCHEMMOLECULE_H__ */ GabeditSrc250/src/QChem/QChemLib.c0000644000175100017510000011760213130665226017057 0ustar alloucheallouche/* QChemLib.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include #include "../Common/GabeditType.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../QChem/QChemLib.h" /********************************************************************************/ GList* getQChemBasisList(gchar* Symb, gchar* message) { GList *glist = NULL; gchar *filename = g_strdup_printf("%s%sqchemBasis",gabedit_directory(), G_DIR_SEPARATOR_S); gchar* basisName= NULL; gchar symb[6]; gint nbas = 0; gint n = 0; gint j; gchar* t = NULL; gchar* dump = NULL; gint k; FILE* fin = FOpen(filename,"r"); if(!fin) { create_qchem_basis_file(); fin = FOpen(filename,"r"); } if(!fin) { sprintf(message,_("Sorry the qchemBasis is corrupted.\nPlease reinstall gabedit\n")); return NULL; } t = g_malloc(BSIZE*sizeof(gchar)); dump = g_malloc(BSIZE*sizeof(gchar)); basisName= g_malloc(BSIZE*sizeof(gchar)); { char* e = fgets(t,BSIZE,fin);} /* number of atoms */ while(!feof(fin)) { if(!fgets(t,BSIZE,fin)) break; if(strstr(t,"Atom") && strstr(t,Symb) && sscanf(t,"%s %s",dump,symb)==2 && strcmp(Symb,symb) ==0 ) { if(!fgets(t,BSIZE,fin)) break; sscanf(t,"%d",&nbas); for(j=0;jdata,symb)==0) { Ok = TRUE; break; } l = l->next; } } if(Ok) { if(!fgets(t,BSIZE,fin)) break; sscanf(t,"%d",&nbas); if(nbas>0) { if(first) { list1 = g_malloc(nbas*sizeof(gchar*)); n1 = nbas; } else { list2 = g_malloc(nbas*sizeof(gchar*)); n2 = nbas; } } for(j=0;j0) first = FALSE; } else { if(!fgets(t,BSIZE,fin)) break; sscanf(t,"%d",&nbas); for(j=0;j #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../QChem/QChemTypes.h" #include "../QChem/QChemGlobal.h" #include "../QChem/QChemMolecule.h" #include "../QChem/QChemBasis.h" #include "../QChem/QChemGuess.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget* entrySCFIterations = NULL; static GtkWidget* comboSCF = NULL; static GtkWidget* comboCorrelationMethod = NULL; static GtkWidget* comboExchangeMethod = NULL; static void setQChemCorrelationMethods(); /*************************************************************************************************************/ static gchar* listJobView[] = { "Single Point Energy", "Equilibrium structure search", "Frequencies", "Transition structure search", "NMR Chemical Shift", "Intrinsic reaction pathway", "Forces", }; static gchar* listJobReal[] = { "SP", "OPT", "FREQ", "TS", "NMR", "RPATH", "FORCE" }; static guint numberOfJobs = G_N_ELEMENTS (listJobView); static gchar selectedJob[BSIZE]="SP"; /*************************************************************************************************************/ static gchar* listSCFView[] = { "default","unrestricted", "restricted"}; static gchar* listSCFReal[] = { "DEF", "TRUE", "FALSE"}; static guint numberOfSCF = G_N_ELEMENTS (listSCFView); static gchar selectedSCF[BSIZE]="DEF"; /*************************************************************************************************************/ static gchar* listExchangeMethodsView[] = { "Hatree-Fock", "Slater", "Becke", "Gill96, Gill 1996", "GG99, Gilbert and Gill 1999 ", "Becke(EDF1), Becke (uses EDF1 parameters) ", "PW91, Perdew 91", "B3PW91, hybrid Becke-HF-PW91", "B3LYP, hybrid Becke-HF-LYP", "B3LYP5, Original hybrid Becke-HF-LYP(using VWN5)", "EDF1", "EDF2", "BMK", }; static gchar* listExchangeMethodsReal[] = { "HF", "Slater", "Becke", "Gill96", "GG99 ", "Becke(EDF1)" "PW91", "B3PW91", "B3LYP", "B3LYP5", "EDF1", "EDF2", "BMK", }; static guint numberOfExchangeMethods = G_N_ELEMENTS (listExchangeMethodsView); static gchar selectedExchangeMethod[BSIZE]="HF"; /*************************************************************************************************************/ static gchar* listCorrelationHybridMethodsView[] = { " ", }; static gchar* listCorrelationHybridMethodsReal[] = { "NONE", }; static guint numberOfCorrelationHybridMethods = G_N_ELEMENTS (listCorrelationHybridMethodsView); /*************************************************************************************************************/ static gchar* listCorrelationDFTMethodsView[] = { "No correlation", "VWN, Vosko-Wilk-Nusair parameterization", "LYP, Lee-Yang-Parr", "PW91, Perdew 91", "LYP(EDF1), parameterization", "Perdew86, Perdew 1986", "PZ81, Perdew-Zunger 1981", "Wigner", }; static gchar* listCorrelationDFTMethodsReal[] = { "NONE", "VWN", "LYP", "PW91", "LYP(EDF1)", "Perdew86", "PZ81", "Wigner", }; static guint numberOfCorrelationDFTMethods = G_N_ELEMENTS (listCorrelationDFTMethodsView); /*************************************************************************************************************/ static gchar* listCorrelationWFMethodsView[] = { "No correlation", "MP2", "RIMP2", "Local MP2", "RILMP2", "ZAPT2", "SOSMP2", "MOSMP2", "MP3", "MP4", "MP4SDQ", "PP(2)", "IP", "RIP", "CCD", "CCD(2)", "CCSD", "CCSD(T)", "CCSD(2)", "QCISD", "QCISD(T)", "OD", "OD(T)", "OD(2)", "VOD", "VOD(2)", "QCCD", "VQCCD", }; static gchar* listCorrelationWFMethodsReal[] = { "NONE", "MP2", "RIMP2", "LMP2", "RILMP2", "ZAPT2", "SOSMP2", "MOSMP2", "MP3", "MP4", "MP4SDQ", "PP(2)", "IP", "RIP", "CCD", "CCD(2)", "CCSD", "CCSD(T)", "CCSD(2)", "QCISD", "QCISD(T)", "OD", "OD(T)", "OD(2)", "VOD", "VOD(2)", "QCCD", "VQCCD", }; static guint numberOfCorrelationWFMethods = G_N_ELEMENTS (listCorrelationWFMethodsView); /*************************************************************************************************************/ static gchar selectedCorrelationMethod[BSIZE]="NONE"; static gchar** listCorrelationMethodsView = listCorrelationHybridMethodsView; static gchar** listCorrelationMethodsReal = listCorrelationHybridMethodsReal; static guint numberOfCorrelationMethods = G_N_ELEMENTS (listCorrelationHybridMethodsView); /*************************************************************************************************************/ static gchar* calculWord(gchar* view) { gint i; for(i=0;i Dep.mk -include Dep.mk GabeditSrc250/src/QChem/QChem.h0000644000175100017510000000272513130665226016434 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_QCHEM_H__ #define __GABEDIT_QCHEM_H__ void destroyWinsQChem(GtkWidget *win,gpointer data); void newQChem(); void insertQChem(); #endif /* __GABEDIT_QCHEM_H__ */ GabeditSrc250/src/QChem/QChemBasis.h0000644000175100017510000000074313130665226017414 0ustar alloucheallouche #ifndef __GABEDIT_QCHEMBASIS_H__ #define __GABEDIT_QCHEMBASIS_H__ void initQChemBasis(); void freeQChemBasis(); void addQChemBasisToTable(GtkWidget *table, gint i); void addQChemBasisGuessToTable(GtkWidget *table, gint i, GtkWidget* comboGuess); void addQChemAuxBasisToTable(GtkWidget *table, gint i, GtkWidget* comboCorrelation); void putQChemBasisInfoInTextEditor(); void putQChemAuxBasisInTextEditor(); void putQChemBasis2InTextEditor(); #endif /* __GABEDIT_QCHEMBASIS_H__ */ GabeditSrc250/src/QChem/QChemTypes.h0000644000175100017510000000315313130665226017455 0ustar alloucheallouche #ifndef __GABEDIT_QCHEMTYPES_H__ #define __GABEDIT_QCHEMTYPES_H__ typedef struct _QChemColorBack { GdkColor keyWord; GdkColor description; }QChemColorBack; typedef struct _QChemColorFore { GdkColor keyWord; GdkColor description; }QChemColorFore; typedef struct _QChemAtom { gdouble position[3]; gchar* symbol; }QChemAtom; typedef struct _QChemMolecule { gint numberOfAtoms; gint totalNumberOfElectrons; gint numberOfValenceElectrons; QChemAtom* listOfAtoms; gchar* auxBasisName; }QChemMolecule; typedef struct _QChemBasis { gchar* name; gchar* molecule; int numberOfBasisTypes; gchar** basisNames; }QChemBasis; typedef struct _QChemGuessWaveFunction { gboolean fromHCore; gchar* method; gchar* functional; gchar* molecule; gchar* basis; gchar* memory; gint totalCharge; gint spinMultiplicity; }QChemGuessWaveFunction; typedef enum { LSDAC = 0, PBEC, PW91C, P86C, NewP86C, VWN1LC, VWN1LCRPA, VWN2LC, VWN3LC, VWN4LC, VWN5LC, PW92LC, PZ81LC, LYPC, HFX, Xalpha, SlaterX, Becke88X, PBEX, PW86X, PW91X, mPW91_B88X, mPW91_PW91X,mPW91_mPW91X, G96X } QChemFunctionalType; typedef enum { XALPHA = 0, HFS, HFB, HFG96, G96LYP, BLYP, SVWN1, SVWN1RPA, SVWN2, SVWN3, SVWN4, SVWN5, SPZ81, SPW92, BPW91, BP86, B3LYP, B3PW91, B3P86, PBE, PW91, mPW_PW91_PW91, mPWPW91, mPW1PW91 } QChemStdFunctionalType; typedef struct _QChemFunctional { QChemFunctionalType type; gchar* name; gchar* comment; }QChemFunctional; typedef struct _QChemStdFunctional { QChemStdFunctionalType type; gchar* name; gint n; QChemFunctionalType* listOfTypes; gdouble* coefficients; }QChemStdFunctional; #endif /* __GABEDIT_QCHEMTYPES_H__ */ GabeditSrc250/src/QChem/QChem.c0000644000175100017510000001736313130665226016433 0ustar alloucheallouche/* QChem.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include "../Common/Global.h" #include "../QChem/QChemTypes.h" #include "../QChem/QChemGlobal.h" #include "../QChem/QChemMolecule.h" #include "../QChem/QChemRem.h" #include "../QChem/QChemBasis.h" #include "../QChem/QChemGuess.h" #include "../Utils/UtilsInterface.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/InterfaceGeom.h" #include "../Utils/Utils.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" static GtkWidget *Wins=NULL; static gboolean newFile = FALSE; /************************************************************************************************************/ static void setColors() { static gboolean first = TRUE; if(!first) return; first = FALSE; qchemColorFore.keyWord.red = 65535; qchemColorFore.keyWord.green = 0; qchemColorFore.keyWord.blue = 0; qchemColorBack.keyWord.red = (gushort)(65535/1.2); qchemColorBack.keyWord.green = (gushort)(65535/1.2); qchemColorBack.keyWord.blue = (gushort)(65535/1.2); qchemColorFore.description.red = 0; qchemColorFore.description.green = 65535; qchemColorFore.description.blue = 65535; qchemColorBack.description.red = (gushort)(65535/2.0); qchemColorBack.description.green = (gushort)(65535/2.0); qchemColorBack.description.blue = (gushort)(65535/2.0); } /************************************************************************************************************/ void destroyWinsQChem(GtkWidget *win) { destroy(Wins,NULL); Wins = NULL; initQChemMoleculeButtons(); initQChemGuessFrame(); /* freeQChemMolecule(); freeQChemMpqc(); freeQChemBasis(); */ } /************************************************************************************************************/ static void toCancelWin(GtkWidget* win,gpointer data) { Cancel_YesNo(win, data, destroy_children); } /************************************************************************************************************/ static void putTitleInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer,"%c ================================================================\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"%c This file was generated by Gabedit\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); sprintf(buffer,"%c ================================================================\n",'%'); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &qchemColorFore.keyWord, &qchemColorBack.keyWord, "$comment\n",-1); sprintf(buffer," This file was generated by Gabedit\n"); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); gabedit_text_insert (GABEDIT_TEXT(text), NULL, &qchemColorFore.keyWord, &qchemColorBack.keyWord, "$end\n\n",-1); } /************************************************************************************************************/ static void putInfoInTextEditor(GtkWidget *button, gpointer data) { setColors(); if(newFile) { reset_name_files(); ClearText(text); } else { gint nchar; nchar=gabedit_text_get_length(GABEDIT_TEXT(text)); gabedit_text_set_point(GABEDIT_TEXT(text),nchar); } data_modify(TRUE); putTitleInTextEditor(); putQChemMoleculeInfoInTextEditor(); putQChemRemInfoInTextEditor(); iprogram = PROG_IS_QCHEM; fileopen.command=g_strdup(NameCommandQChem); gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0); } /*********************************************************************************************/ static GtkWidget* addHboxToTable(GtkWidget* table, gint i, gint j, gint ki, gint kj) { GtkWidget *hbox = gtk_hbox_new(TRUE, 5); gtk_table_attach(GTK_TABLE(table),hbox,j,j+kj,i,i+ki, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); return hbox; } /************************************************************************************************************/ static void qchemInputFileWindow(gboolean newInputFile) { GtkWidget *button; GtkWidget *hbox = NULL; GtkWidget *hboxChargeMultiplicity = NULL; GtkWidget *table = gtk_table_new(6,2,FALSE); newFile = newInputFile; initQChemMolecule(); setQChemMolecule(); if(qchemMolecule.numberOfAtoms <1) { Message( _( "You must initially define your geometry.\n\n" "From the principal Menu select : Geometry/Draw\n" "and draw (or read) your molecule." ), "Error",TRUE); return; } if(Wins) destroy_children(Wins); Wins= gtk_dialog_new (); gtk_window_set_position(GTK_WINDOW(Wins),GTK_WIN_POS_CENTER); gtk_window_set_transient_for(GTK_WINDOW(Wins),GTK_WINDOW(Fenetre)); gtk_window_set_title(>K_DIALOG(Wins)->window,_("QChem input")); gtk_window_set_modal (GTK_WINDOW (Wins), TRUE); init_child(Wins, destroyWinsQChem,_(" QChem input ")); g_signal_connect(G_OBJECT(Wins),"delete_event",(GCallback)destroy_children,NULL); gtk_widget_realize(Wins); button = create_button(Wins,_("Cancel")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK( toCancelWin),GTK_OBJECT(Wins)); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show (button); button = create_button(Wins,_("OK")); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->vbox), table, FALSE, TRUE, 5); hbox =addHboxToTable(table, 0, 0, 1, 1); hboxChargeMultiplicity = hbox; hbox =addHboxToTable(table, 1, 0, 1, 2); initQChemGuessFrame(); createQChemRemFrame(Wins, hbox); createQChemChargeMultiplicityFrame(hboxChargeMultiplicity); hbox =addHboxToTable(table, 2, 0, 1, 2); createQChemGuessFrame(Wins, hbox); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Wins)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show (button); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(putInfoInTextEditor),GTK_OBJECT(Wins)); g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(destroy_children),GTK_OBJECT(Wins)); gtk_widget_show_all(Wins); qchemWin = Wins; } /************************************************************************************************************/ void newQChem() { qchemInputFileWindow(TRUE); } /************************************************************************************************************/ void insertQChem() { qchemInputFileWindow(FALSE); } GabeditSrc250/src/QChem/QChemGuess.c0000644000175100017510000002023313130665226017430 0ustar alloucheallouche/* QChemGuess.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../QChem/QChemTypes.h" #include "../QChem/QChemGlobal.h" #include "../QChem/QChemBasis.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" static GtkWidget *buttonMixed = NULL; static GtkWidget *guessFrame = NULL; /*************************************************************************************************************/ static gchar* listGuessMethodView[] = { "Default", "Diagonalize core Hamiltonian", "Superposition of atomic density", "Apply generalized Wolfsberg-Helmholtz approximation", "Basis set projection (basis2)", }; static gchar* listGuessMethodReal[] = { "NONE", "core", "SAD", "GWH", "BASIS2", }; static guint numberOfGuessMethods = G_N_ELEMENTS (listGuessMethodView); static gchar selectedGuessMethod[BSIZE]="NONE"; /*************************************************************************************************************/ void initQChemGuessFrame() { guessFrame = NULL; buttonMixed = NULL; } /*************************************************************************************************************/ void setSensitiveQChemGuessMixed(gboolean sensitive) { if(!buttonMixed) return; gtk_widget_set_sensitive(buttonMixed, sensitive); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMixed), FALSE); } /*************************************************************************************************************/ static void putQChemGuessOptionsInfoInTextEditor() { if(GTK_TOGGLE_BUTTON (buttonMixed)->active) gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, " scf_guess_mix 5\n",-1); } /************************************************************************************************************/ static void putQChemGuessMethodInfoInTextEditor() { if( strcmp(selectedGuessMethod,"NONE")==0 ) return; if( strcmp(selectedGuessMethod,"BASIS2")==0 ) { putQChemBasis2InTextEditor(); } else { gchar buffer[BSIZE]; sprintf(buffer," scf_guess %s\n",selectedGuessMethod); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer,-1); } } /*************************************************************************************************************/ void putQChemGuessInfoInTextEditor() { putQChemGuessMethodInfoInTextEditor(); putQChemGuessOptionsInfoInTextEditor(); } /************************************************************************************************************/ static void traitementGuessMethod (GtkComboBox *combobox, gpointer d) { GtkTreeIter iter; gchar* data = NULL; gchar* res = NULL; gint i; gboolean basis2 = FALSE; GtkWidget* wid; /* gchar* s;*/ if (gtk_combo_box_get_active_iter (combobox, &iter)) { GtkTreeModel* model = gtk_combo_box_get_model(combobox); gtk_tree_model_get (model, &iter, 0, &data, -1); } for(i=0;i #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../QChem/QChemTypes.h" #include "../QChem/QChemGlobal.h" #include "../QChem/QChemRem.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" /************************************************************************************************************/ static gint totalCharge = 0; static gint spinMultiplicity=1; /************************************************************************************************************/ gint getQChemMultiplicity() { return spinMultiplicity; } /************************************************************************************************************/ void initQChemMoleculeButtons() { } /************************************************************************************************************/ void initQChemMolecule() { qchemMolecule.listOfAtoms = NULL; qchemMolecule.totalNumberOfElectrons = 0; qchemMolecule.numberOfValenceElectrons = 0; qchemMolecule.numberOfAtoms = 0; } /************************************************************************************************************/ void freeQChemMolecule() { static gboolean first = TRUE; if(first) { initQChemMolecule(); first = FALSE; return; } if(qchemMolecule.listOfAtoms) g_free(qchemMolecule.listOfAtoms); initQChemMolecule(); } /************************************************************************************************************/ static gint setQChemMoleculeFromSXYZ(gint nAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z) { gint n; QChemAtom* atomList = NULL; qchemMolecule.listOfAtoms = NULL; qchemMolecule.numberOfAtoms = 0; if(nAtoms<1) return 1; qchemMolecule.listOfAtoms = (QChemAtom*)g_malloc(sizeof(QChemAtom)*(nAtoms)); if(qchemMolecule.listOfAtoms==NULL) return -1; qchemMolecule.numberOfAtoms = nAtoms; atomList = qchemMolecule.listOfAtoms; for(n=0; nposition[0] = X[n]; atomList->position[1] = Y[n]; atomList->position[2] = Z[n]; atomList->symbol = g_strdup(symbols[n]); atomList++; } return 0; } /************************************************************************************************************/ static void setXYZFromGeomXYZ(gint i, gdouble* x, gdouble* y, gdouble *z) { if(!test(GeomXYZ[i].X)) *x = get_value_variableXYZ(GeomXYZ[i].X); else *x = atof(GeomXYZ[i].X); if(!test(GeomXYZ[i].Y)) *y = get_value_variableXYZ(GeomXYZ[i].Y); else *y = atof(GeomXYZ[i].Y); if(!test(GeomXYZ[i].Z)) *z = get_value_variableXYZ(GeomXYZ[i].Z); else *z = atof(GeomXYZ[i].Z); if(Units==0) { *x *= BOHR_TO_ANG; *y *= BOHR_TO_ANG; *z *= BOHR_TO_ANG; } } /************************************************************************************************************/ static gboolean setQChemMoleculeFromGeomXYZ() { gint i; gchar** symbols = NULL; gdouble* X = NULL; gdouble* Y = NULL; gdouble* Z = NULL; gint numberOfAtoms = NcentersXYZ; if(numberOfAtoms<1) return FALSE; symbols = (gchar**)g_malloc(sizeof(gchar*)*(numberOfAtoms)); if(symbols == NULL) return FALSE; X = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(X == NULL) return FALSE; Y = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Y == NULL) return FALSE; Z = (gdouble*)g_malloc(sizeof(gdouble)*(numberOfAtoms)); if(Z == NULL) return FALSE; qchemMolecule.totalNumberOfElectrons = 0; for(i=0; iposition[k]-atomList->position[k+1]; dd += xx*xx; } if(i==0) d = dd; else if(d>dd) d= dd; atomList++; } d = sqrt(d); return d; } */ /*************************************************************************************************************/ /* static void setFirstAtomToXAxis(gint numberOfAtoms, gdouble* X, gdouble* Y, gdouble*Z) { gdouble d; gdouble s; gdouble c; gint i; gdouble positionTolerance = -1; if(numberOfAtoms<1) return; d = X[0]*X[0]+Y[0]*Y[0]; if(d<1e-10) return; d = sqrt(d); if(positionTolerance<0) positionTolerance= getMinDistance()/50; s = -Y[0]/d; c = +X[0]/d; for (i=0;iNUMBER_ENTRY_ANGLE) { sprintf(buffer,"%s %s %s %s %s %s %s\n", Geom[i].Symb, Geom[i].NR,Geom[i].R, Geom[i].NAngle,Geom[i].Angle, Geom[i].NDihedral,Geom[i].Dihedral); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } else if(Geom[i].Nentry>NUMBER_ENTRY_R) { sprintf(buffer,"%s %s %s %s %s\n", Geom[i].Symb, Geom[i].NR,Geom[i].R, Geom[i].NAngle,Geom[i].Angle ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } else if(Geom[i].Nentry>NUMBER_ENTRY_0) { sprintf(buffer,"%s %s %s\n", Geom[i].Symb, Geom[i].NR,Geom[i].R ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } else { sprintf(buffer,"%s \n", Geom[i].Symb ); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, &prop.color, buffer, -1); } } if(NVariables>0) for(i=0;ichild; t = g_strdup_printf("%d",spin); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /************************************************************************************************************/ static void setComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity) { GList *glist = NULL; gint i; gint nlist = 0; gchar** list = NULL; gint k; gint kinc; gint ne = qchemMolecule.numberOfValenceElectrons - totalCharge; if(ne%2==0) nlist = ne/2+1; else nlist = (ne+1)/2; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; t = g_strdup_printf("%d",charge); gtk_entry_set_text(GTK_ENTRY(entry),t); g_free(t); } /********************************************************************************/ static void setComboCharge(GtkWidget *comboCharge) { GList *glist = NULL; gint i; gint nlist; gchar** list = NULL; gint k; nlist = qchemMolecule.numberOfValenceElectrons*2-2+1; if(nlist<1) return; list = g_malloc(nlist*sizeof(gchar*)); if(!list) return; for(i=0;ichild; g_object_set_data(G_OBJECT (entry), "Combo",combo); gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.2),-1); return entry; } /***********************************************************************************************/ static GtkWidget *addQChemChargeToTable(GtkWidget *table, gint i) { GtkWidget* entryCharge = NULL; GtkWidget* comboCharge = NULL; gint nlistCharge = 1; gchar* listCharge[] = {"0"}; add_label_table(table,_("Charge"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryCharge = addComboListToATable(table, listCharge, nlistCharge, i, 2, 1); comboCharge = g_object_get_data(G_OBJECT (entryCharge), "Combo"); gtk_widget_set_sensitive(entryCharge, FALSE); return comboCharge; } /***********************************************************************************************/ static GtkWidget *addQChemSpinToTable(GtkWidget *table, gint i) { GtkWidget* entrySpinMultiplicity = NULL; GtkWidget* comboSpinMultiplicity = NULL; gint nlistspinMultiplicity = 1; gchar* listspinMultiplicity[] = {"0"}; add_label_table(table,_("Spin multiplicity"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entrySpinMultiplicity = addComboListToATable(table, listspinMultiplicity, nlistspinMultiplicity, i, 2, 1); comboSpinMultiplicity = g_object_get_data(G_OBJECT (entrySpinMultiplicity), "Combo"); gtk_widget_set_sensitive(entrySpinMultiplicity, FALSE); g_signal_connect(G_OBJECT(entrySpinMultiplicity),"changed", G_CALLBACK(changedEntrySpinMultiplicity),NULL); return comboSpinMultiplicity; } /***********************************************************************************************/ static GtkWidget *addLabelNumberOfElectronsToTable(GtkWidget *table, gint i, GtkWidget *comboCharge) { GtkWidget* labelNumberOfElectrons = NULL; GtkWidget* hbox = NULL; GtkWidget* entryCharge = GTK_BIN(comboCharge)->child; labelNumberOfElectrons = gtk_label_new(" "); hbox = gtk_hbox_new(0,FALSE); gtk_box_pack_start (GTK_BOX (hbox), labelNumberOfElectrons, FALSE, FALSE, 0); gtk_table_attach(GTK_TABLE(table),hbox,0,0+3,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_SHRINK), 2,2); g_object_set_data(G_OBJECT (entryCharge), "LabelNumberOfElectrons", labelNumberOfElectrons); g_signal_connect(G_OBJECT(entryCharge),"changed", G_CALLBACK(changedEntryCharge),NULL); return labelNumberOfElectrons; } /***********************************************************************************************/ void createQChemChargeMultiplicityFrame(GtkWidget *box) { GtkWidget* frame; GtkWidget* sep; GtkWidget* labelNumberOfElectrons; GtkWidget* vboxFrame; GtkWidget* comboSpinMultiplicity = NULL; GtkWidget* comboCharge = NULL; GtkWidget *table = NULL; gint i; totalCharge = TotalCharges[0]; spinMultiplicity=SpinMultiplicities[0]; table = gtk_table_new(3,5,FALSE); frame = gtk_frame_new (_("Charge & Multiplicty")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); i = 0; comboCharge = addQChemChargeToTable(table, i); i = 1; comboSpinMultiplicity = addQChemSpinToTable(table, i); i = 2; sep = gtk_hseparator_new ();; gtk_table_attach(GTK_TABLE(table),sep,0,0+3,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 2,2); i = 3; labelNumberOfElectrons=addLabelNumberOfElectronsToTable(table, i, comboCharge); if(GTK_IS_COMBO_BOX(comboCharge)) g_object_set_data(G_OBJECT (GTK_BIN(comboCharge)->child), "ComboSpinMultiplicity", comboSpinMultiplicity); setComboCharge(comboCharge); setComboSpinMultiplicity(comboSpinMultiplicity); if(GTK_IS_WIDGET(labelNumberOfElectrons)) { gint ne = qchemMolecule.numberOfValenceElectrons - totalCharge; gchar buffer[BSIZE]; sprintf(buffer, _("Number of electrons = %d"),ne); gtk_label_set_text(GTK_LABEL(labelNumberOfElectrons),buffer); } /* activate sensitivity */ /* if(GTK_IS_WIDGET(comboMethod)) setComboMethod(comboMethod); g_object_set_data(G_OBJECT (box), "EntryMethod", GTK_BIN(comboMethod)->child); */ } /************************************************************************************************************/ GabeditSrc250/src/QChem/QChemBasis.c0000644000175100017510000002466713130665226017422 0ustar alloucheallouche/* QChemBasis.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include #include #include "../../Config.h" #include "../Common/Global.h" #include "../QChem/QChemTypes.h" #include "../QChem/QChemGlobal.h" #include "../QChem/QChemLib.h" #include "../Geometry/GeomGlobal.h" #include "../Geometry/GeomConversion.h" #include "../Geometry/GeomXYZ.h" #include "../Geometry/Fragments.h" #include "../Geometry/DrawGeom.h" #include "../Utils/Utils.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Constants.h" #include "../Geometry/InterfaceGeom.h" #include "../Common/Windows.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Utils/GabeditTextEdit.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/MoleculeSymmetryInterface.h" /************************************************************************************************************/ void initQChemBasis() { qchemBasis.name = g_strdup("3-21G"); qchemBasis.molecule = g_strdup("$:molecule"); qchemBasis.numberOfBasisTypes=0; qchemBasis.basisNames = NULL; } /************************************************************************************************************/ void freeQChemBasis() { if(qchemBasis.name ) g_free(qchemBasis.name); qchemBasis.name = NULL; if(qchemBasis.molecule ) g_free(qchemBasis.molecule); qchemBasis.molecule = NULL; if(qchemBasis.basisNames) { gint i; for(i=0;isymbol); atom++; } if(atomsList) basisList = getQChemBasisListOfAtoms(atomsList,message); if(!basisList) basisList = g_list_append(basisList, _("Sorry, I can not obtain one type of bases for all atoms of your molecule")); g_list_free(atomsList); l = basisList; while( l ) { if(strstr(l->data,"rimp")) basisListAux = g_list_append(basisListAux,l->data); if(strstr(l->data,_("Sorry"))) basisListAux = g_list_append(basisListAux,l->data); l = l->next; } gtk_combo_box_entry_set_popdown_strings( comboBasis, basisListAux); g_list_free(basisList); g_free(message); } /************************************************************************************************************/ static void setComboBasis(GtkWidget *comboBasis) { GList *atomsList = NULL; GList *basisList = NULL; QChemAtom* atom = NULL; gchar* message = g_malloc(BSIZE*sizeof(gchar)); gint i; atom = qchemMolecule.listOfAtoms; for(i=0; isymbol); atom++; } if(atomsList) basisList = getQChemBasisListOfAtoms(atomsList,message); if(!basisList) basisList = g_list_append(basisList, _("Sorry, I can not obtain one type of bases for all atoms of your molecule")); g_list_free(atomsList); gtk_combo_box_entry_set_popdown_strings( comboBasis, basisList); g_free(message); } /************************************************************************************************************/ static void changedEntryBasis(GtkWidget *entry, gpointer data) { G_CONST_RETURN gchar* entryText = NULL; if(!GTK_IS_WIDGET(entry)) return; entryText = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(entryText)<1)return; if(qchemBasis.name) g_free(qchemBasis.name); qchemBasis.name=g_strdup(entryText); } /************************************************************************************************************/ static void changedEntryBasisGuess(GtkWidget *entry, gpointer data) { G_CONST_RETURN gchar* entryText = NULL; if(!GTK_IS_WIDGET(entry)) return; entryText = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(entryText)<1)return; if(qchemGuessWaveFunction.basis) g_free(qchemGuessWaveFunction.basis); qchemGuessWaveFunction.basis=g_strdup(entryText); } /************************************************************************************************************/ static void changedEntryAuxBasis(GtkWidget *entry, gpointer data) { G_CONST_RETURN gchar* entryText = NULL; if(!GTK_IS_WIDGET(entry)) return; entryText = gtk_entry_get_text(GTK_ENTRY(entry)); if(strlen(entryText)<1)return; if(qchemMolecule.auxBasisName) g_free(qchemMolecule.auxBasisName); qchemMolecule.auxBasisName=g_strdup(entryText); } /***********************************************************************************************/ static GtkWidget* addComboListToATable(GtkWidget* table, gchar** list, gint nlist, gint i, gint j, gint k) { GtkWidget *entry = NULL; GtkWidget *combo = NULL; combo = create_combo_box_entry(list, nlist, TRUE, -1, -1); gtk_table_attach(GTK_TABLE(table),combo,j,j+k,i,i+1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); entry = GTK_BIN (combo)->child; g_object_set_data(G_OBJECT (entry), "Combo",combo); return entry; } /***********************************************************************************************/ void addQChemBasisToTable(GtkWidget *table, gint i) { GtkWidget* entryBasis = NULL; GtkWidget* comboBasis = NULL; gint nlistBasis = 1; gchar* listBasis[] = {" "}; add_label_table(table,_("Basis"),(gushort)i,0); add_label_table(table,":",(gushort)i,1); entryBasis = addComboListToATable(table, listBasis, nlistBasis, i, 2, 1); comboBasis = g_object_get_data(G_OBJECT (entryBasis), "Combo"); gtk_widget_set_sensitive(entryBasis, FALSE); g_signal_connect(G_OBJECT(entryBasis),"changed", G_CALLBACK(changedEntryBasis),NULL); setComboBasis(comboBasis); } /***********************************************************************************************/ void addQChemBasisGuessToTable(GtkWidget *table, gint i, GtkWidget* comboGuess) { GtkWidget* entryBasisGuess = NULL; GtkWidget* comboBasisGuess = NULL; GtkWidget* label = NULL; gint nlistBasis = 1; gchar* listBasis[] = {" "}; label = add_label_table(table,_("Basis"),(gushort)i,0); if(comboGuess) g_object_set_data(G_OBJECT (comboGuess), "LabelGuessBasis1", label); label = add_label_table(table,":",(gushort)i,1); if(comboGuess) g_object_set_data(G_OBJECT (comboGuess), "LabelGuessBasis2", label); entryBasisGuess = addComboListToATable(table, listBasis, nlistBasis, i, 2, 1); comboBasisGuess = g_object_get_data(G_OBJECT (entryBasisGuess), "Combo"); gtk_widget_set_sensitive(entryBasisGuess, FALSE); if(comboGuess) g_object_set_data(G_OBJECT (comboGuess), "ComboGuessBasis", comboBasisGuess); g_signal_connect(G_OBJECT(entryBasisGuess),"changed", G_CALLBACK(changedEntryBasisGuess),NULL); setComboBasis(comboBasisGuess); } /***********************************************************************************************/ void addQChemAuxBasisToTable(GtkWidget *table, gint i, GtkWidget* comboCorrelation) { GtkWidget* entryAuxBasis = NULL; GtkWidget* comboAuxBasis = NULL; GtkWidget* label = NULL; gint nlistAuxBasis = 1; gchar* listAuxBasis[] = {" "}; label = add_label_table(table,_("Auxiliary basis"),(gushort)i,0); if(comboCorrelation) g_object_set_data(G_OBJECT (comboCorrelation), "LabelAuxBasis1", label); label = add_label_table(table,":",(gushort)i,1); if(comboCorrelation) g_object_set_data(G_OBJECT (comboCorrelation), "LabelAuxBasis2", label); entryAuxBasis = addComboListToATable(table, listAuxBasis, nlistAuxBasis, i, 2, 1); comboAuxBasis = g_object_get_data(G_OBJECT (entryAuxBasis), "Combo"); gtk_widget_set_sensitive(entryAuxBasis, FALSE); if(comboCorrelation) g_object_set_data(G_OBJECT (comboCorrelation), "ComboAuxBasis", comboAuxBasis); g_signal_connect(G_OBJECT(entryAuxBasis),"changed", G_CALLBACK(changedEntryAuxBasis),NULL); setComboBasisAux(comboAuxBasis); } /***********************************************************************************************/ static void putQChemBasisInTextEditor() { gchar buffer[BSIZE]; sprintf(buffer," basis %s\n",qchemBasis.name); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } /***********************************************************************************************/ void putQChemAuxBasisInTextEditor() { gchar buffer[BSIZE]; if(!qchemMolecule.auxBasisName) return; sprintf(buffer," aux_basis %s\n",qchemMolecule.auxBasisName); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } /***********************************************************************************************/ void putQChemBasis2InTextEditor() { gchar buffer[BSIZE]; if(!qchemGuessWaveFunction.basis) return; sprintf(buffer," basis2 %s\n",qchemGuessWaveFunction.basis); gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, buffer, -1); } /************************************************************************************************************/ void putQChemBasisInfoInTextEditor() { putQChemBasisInTextEditor(); } GabeditSrc250/src/QChem/QChemLib.h0000644000175100017510000000304113130665226017053 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_QCHEMLIB_H__ #define __GABEDIT_QCHEMLIB_H__ GList* getQChemBasisList(gchar* Symb, gchar* message); GList* getQChemBasisListOfAtoms(GList* atomsList, gchar* message); gboolean create_qchem_basis_file(); #endif /* __GABEDIT_QCHEMLIB_H__ */ GabeditSrc250/src/VibrationalCorrections/0000755000175100017510000000000013130743374020751 5ustar allouchealloucheGabeditSrc250/src/VibrationalCorrections/Makefile0000644000175100017510000000060013130664665022412 0ustar allouchealloucheOBJECTS = GabeditGaussianInput.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/VibrationalCorrections/GabeditGaussianInput.h0000644000175100017510000000274113130665226025177 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GABEDITGAUSSIANINPUT_H___H__ #define __GABEDIT_GABEDITGAUSSIANINPUT_H___H__ void read_vibcorrection_gaussian_file_dlg(); #endif /* __GABEDIT_GABEDITGAUSSIANINPUT_H___H__ */ GabeditSrc250/src/VibrationalCorrections/Dep.mk0000644000175100017510000000063313130664665022021 0ustar allouchealloucheGabeditGaussianInput.o: GabeditGaussianInput.c ../../Config.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/Constants.h \ ../Utils/AtomsProp.h ../Utils/Utils.h ../Utils/UtilsInterface.h \ ../Files/FileChooser.h ../Files/FolderChooser.h \ ../Files/GabeditFolderChooser.h ../Common/Help.h ../Common/StockIcons.h \ ../Utils/GabeditTextEdit.h GabeditSrc250/src/VibrationalCorrections/GabeditGaussianInput.c0000644000175100017510000014265313130665226025201 0ustar alloucheallouche/* Vibration.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include "../Common/Global.h" #include "../Utils/Constants.h" #include "../Utils/AtomsProp.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/UtilsInterface.h" #include "../Files/FileChooser.h" #include "../Files/FolderChooser.h" #include "../Files/GabeditFolderChooser.h" #include "../Common/Help.h" #include "../Common/StockIcons.h" #include "../Utils/GabeditTextEdit.h" #define DEBUGFLAG 0 /************************************************************************************************************/ typedef struct _VibCorrectionsSigma { gdouble tensor[3][3]; gdouble isotropic; gdouble anisotropy; }VibCorrectionsSigma; typedef struct _VibCorrectionsAtom { gchar* symbol; gdouble coordinates[3]; }VibCorrectionsAtom; typedef struct _VibCorrectionsGeom { gint numberOfAtoms; VibCorrectionsAtom* atoms; }VibCorrectionsGeom; typedef struct _VibCorrections { gint numberOfFrequencies; gdouble* frequences; gdouble* calculatedFrequencies; gdouble* mass; gint nTemperatures; gdouble* temperatures; gdouble* akI; gdouble** sumF; gdouble delta; gdouble **energies; gdouble **F; VibCorrectionsGeom geom; VibCorrectionsSigma* sigmas; VibCorrectionsSigma** sigmasVC; gdouble **spinspins; gdouble ***spinspinsVC; gboolean centrifugeFlag; }VibCorrections; /************************************************************************************************************/ static void initVibCorrections(VibCorrections* vibCorrections, gint nf, gint nT, gdouble* T) { gint i; vibCorrections->numberOfFrequencies = nf; vibCorrections->frequences = NULL; vibCorrections->mass = NULL; vibCorrections->nTemperatures = 0; vibCorrections->temperatures = NULL; vibCorrections->akI = NULL; vibCorrections->sumF = NULL; vibCorrections->energies = NULL; vibCorrections->F = NULL; if(nf<=0) return; vibCorrections->frequences = g_malloc(nf*sizeof(gdouble)); vibCorrections->calculatedFrequencies = g_malloc(nf*sizeof(gdouble)); vibCorrections->mass = g_malloc(nf*sizeof(gdouble)); vibCorrections->nTemperatures = nT; vibCorrections->temperatures = g_malloc(vibCorrections->nTemperatures*sizeof(gdouble)); for(i=0;inTemperatures;i++) vibCorrections->temperatures[i] = T[i]; vibCorrections->sumF = g_malloc(vibCorrections->nTemperatures*sizeof(gdouble*)); for(i=0;inTemperatures;i++) vibCorrections->sumF[i]= g_malloc(nf*sizeof(gdouble)); vibCorrections->akI = g_malloc(nf*sizeof(gdouble)); for(i=0;iakI[i] = 0; vibCorrections->energies = g_malloc((2*nf+1)*sizeof(gdouble*)); for(i=0;i<2*nf+1;i++) vibCorrections->energies[i] = g_malloc((2*nf+1)*sizeof(gdouble)); vibCorrections->F = g_malloc(nf*sizeof(gdouble*)); for(i=0;iF[i] = g_malloc(nf*sizeof(gdouble)); vibCorrections->geom.numberOfAtoms = 0; vibCorrections->geom.atoms = NULL; vibCorrections->sigmas = NULL; vibCorrections->sigmasVC = g_malloc(vibCorrections->nTemperatures*sizeof(VibCorrectionsSigma*)); for(i=0;inTemperatures;i++) vibCorrections->sigmasVC[i] = NULL; vibCorrections->spinspins = NULL; vibCorrections->spinspinsVC = g_malloc(vibCorrections->nTemperatures*sizeof(gdouble**)); for(i=0;inTemperatures;i++) vibCorrections->spinspinsVC[i] = NULL; vibCorrections->centrifugeFlag = TRUE; } /************************************************************************************************************/ static void freeVibCorrections(VibCorrections* vibCorrections) { gint i; gint nf = vibCorrections->numberOfFrequencies; if( vibCorrections->frequences) g_free(vibCorrections->frequences); if( vibCorrections->calculatedFrequencies) g_free(vibCorrections->calculatedFrequencies); if( vibCorrections->mass) g_free(vibCorrections->mass); if( vibCorrections->temperatures) g_free(vibCorrections->temperatures); if( vibCorrections->akI) g_free(vibCorrections->akI); if( vibCorrections->sigmas) g_free(vibCorrections->sigmas); if( vibCorrections->sumF) { for(i=0;inTemperatures;i++) g_free(vibCorrections->sumF[i]); g_free(vibCorrections->sumF); } if( vibCorrections->energies) { for(i=0;i<2*nf+1;i++) if(vibCorrections->energies[i]) g_free(vibCorrections->energies[i]); g_free(vibCorrections->energies); } if(vibCorrections->F) { for(i=0;iF[i]) g_free(vibCorrections->F[i]); g_free(vibCorrections->F); } if(vibCorrections->geom.atoms) { for(i=0;igeom.numberOfAtoms;i++) if(vibCorrections->geom.atoms[i].symbol) g_free(vibCorrections->geom.atoms[i].symbol); g_free(vibCorrections->geom.atoms); } if(vibCorrections->sigmasVC) { gint t; for(t=0;tnTemperatures;t++) if(vibCorrections->sigmasVC[t]) g_free(vibCorrections->sigmasVC[t]); g_free(vibCorrections->sigmasVC); } if(vibCorrections->spinspins) { for(i=0;igeom.numberOfAtoms;i++) if(vibCorrections->spinspins[i]) g_free(vibCorrections->spinspins[i]); g_free(vibCorrections->spinspins); } if(vibCorrections->spinspinsVC) { gint t; for(t=0;tnTemperatures;t++) { if(vibCorrections->spinspinsVC[t]) { for(i=0;igeom.numberOfAtoms;i++) if(vibCorrections->spinspinsVC[t][i]) g_free(vibCorrections->spinspinsVC[t][i]); g_free(vibCorrections->spinspinsVC[t]); } } g_free(vibCorrections->spinspinsVC); } vibCorrections->centrifugeFlag = TRUE; } /********************************************************************************/ static void save_result(GabeditFileChooser *SelecFile, gint response_id) { gchar *fileName; GtkWidget *textResult = NULL; gchar *temp; FILE *file; gint i; if(response_id != GTK_RESPONSE_OK) return; fileName = gabedit_file_chooser_get_current_file(SelecFile); if ((!fileName) || (strcmp(fileName,"") == 0)) { Message(_("Sorry\n No selected file"),_("Error"),TRUE); return ; } textResult = g_object_get_data (G_OBJECT (SelecFile), "TextResult"); if(!textResult) return; gtk_widget_hide(GTK_WIDGET(SelecFile)); while( gtk_events_pending() ) gtk_main_iteration(); file = FOpen(fileName, "wb"); if(file == NULL) { Message(_("Sorry, I can not save file"),_("Error"),TRUE); return; } temp=gabedit_text_get_chars(textResult,0,-1); for(i=0;inumberOfAtoms;i++) { sprintf(tmp,"%s %f %f %f ", geom->atoms[i].symbol, geom->atoms[i].coordinates[0]*BOHR_TO_ANG, geom->atoms[i].coordinates[1]*BOHR_TO_ANG, geom->atoms[i].coordinates[2]*BOHR_TO_ANG); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); sprintf(tmp," Isotropic = %f Anisotropy = %f\n",sigmas[i].isotropic,sigmas[i].anisotropy); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); for(k=0;k<3;k++) { for(l=0;l<3;l++) { sprintf(tmp,"\t%f",sigmas[i].tensor[k][l]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); } gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"\n",-1); } } gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"\n",-1); } /************************************************************************************************************/ static void showSpinSpins(GtkWidget* textResult, VibCorrectionsGeom* geom, gdouble** spinspins) { gchar tmp[BSIZE]; gint i,j; for(i=0;inumberOfAtoms;i++) for(j=i;jnumberOfAtoms;j++) { sprintf(tmp,"%s[%d] %s[%d] %f\n", geom->atoms[i].symbol,i+1, geom->atoms[j].symbol,j+1, spinspins[i][j] ); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); } gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"\n",-1); } /************************************************************************************************************/ static void showVibCorrections(VibCorrections* vibCorrections) { gchar tmp[BSIZE]; gint i,j; gint nf = vibCorrections->numberOfFrequencies; GtkWidget* resultWindow = createResultWindow("Vibrational corrections"); GtkWidget* textResult = g_object_get_data (G_OBJECT (resultWindow), "TextWiddget"); gint t; sprintf(tmp,"%s", "Vibrational corrections to Shielding, indirect nuclear spin-spin coupling constantes\n" "See Ruden et al. J. Chem. Phys. 118, 9572 (2003) and\n" ); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); sprintf(tmp,"%s", "Calculation of NMR and EPR parameters: theory and applications\n" "By Martin Kaupp, Michael Buhl, Vladimir G. Malkin\n" "Published by Wiley-VCH, 2004, ISBN 3527307796, 9783527307791\n" "Page 153\n" ); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); sprintf(tmp, "====================================================================================\n" ); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); if(!vibCorrections->centrifugeFlag) { sprintf(tmp,"%s", "Warnning : I cannot read the centrifugal coefficents from your gaussian output file\n" " So the centrifugal correction is neglected.\n" ); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); sprintf(tmp, "------------------------------------------------------------------------------------\n" ); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); } sprintf(tmp,"\nDisplacement = %f\n\n",vibCorrections->delta); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); /* sprintf(tmp,"Energies\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); for(i=0;i<2*nf+1;i++) { for(j=0;j<2*nf+1;j++) { sprintf(tmp,"%0.10f ",vibCorrections->energies[i][j]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); if((j+1)%4==0) { sprintf(tmp,"\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); } } sprintf(tmp,"\n\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); } */ sprintf(tmp,"Geometry(Angstrom)\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); for(i=0;igeom.numberOfAtoms;i++) { sprintf(tmp,"%s %f %f %f\n", vibCorrections->geom.atoms[i].symbol, vibCorrections->geom.atoms[i].coordinates[0]*BOHR_TO_ANG, vibCorrections->geom.atoms[i].coordinates[1]*BOHR_TO_ANG, vibCorrections->geom.atoms[i].coordinates[2]*BOHR_TO_ANG); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); } sprintf(tmp,"\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); sprintf(tmp,"i Freq(cm-1) Calc.Freq Mass(amu) CentCoef[amu^(-1/2) Bohr^(-1)]\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); for(i=0;ifrequences[i], vibCorrections->calculatedFrequencies[i], vibCorrections->mass[i], vibCorrections->akI[i]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); } sprintf(tmp,"\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); sprintf(tmp,"Cubic Force Const.[Hartree*amu(-3/2)*Bohr(-3)]\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); sprintf(tmp,"i j k\tKijk\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); for(i=0;iF[i][j]*AMU_TO_AU*sqrt(AMU_TO_AU)); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); } gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,"\n",-1); if(vibCorrections->sigmas) { sprintf(tmp,"Shielding tensor at equilibrium geometry (SigmaEq)\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); showShieldingTensors(textResult, &vibCorrections->geom, vibCorrections->sigmas); } for(t=0;tnTemperatures;t++) { if(vibCorrections->sigmasVC[t]) { if(fabs(vibCorrections->temperatures[t])<1e-6) sprintf(tmp,"Zero-point vibrational corrections to Sigma(ppm)\n"); else sprintf(tmp,"Vibrational correction at T = %f K\n",vibCorrections->temperatures[t]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); showShieldingTensors(textResult, &vibCorrections->geom, vibCorrections->sigmasVC[t]); } if(vibCorrections->sigmas && vibCorrections->sigmasVC[t] && fabs(vibCorrections->temperatures[t])>1e-6) { VibCorrectionsSigma* sigmasDiff; sigmasDiff=g_malloc(vibCorrections->geom.numberOfAtoms*sizeof(VibCorrectionsSigma)); for(j=0;jgeom.numberOfAtoms;j++) { gint k,l; sigmasDiff[j].isotropic = vibCorrections->sigmasVC[t][j].isotropic-vibCorrections->sigmasVC[0][j].isotropic; sigmasDiff[j].anisotropy = vibCorrections->sigmasVC[t][j].anisotropy-vibCorrections->sigmasVC[0][j].anisotropy; for(k=0;k<3;k++) for(l=0;l<3;l++) sigmasDiff[j].tensor[k][l] = vibCorrections->sigmasVC[t][j].tensor[k][l]-vibCorrections->sigmasVC[0][j].tensor[k][l]; } sprintf(tmp,"Sigma(T=%f) - Sigma(T=0)\n",vibCorrections->temperatures[t]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); showShieldingTensors(textResult,&vibCorrections->geom, sigmasDiff); if(sigmasDiff) g_free(sigmasDiff); } if(vibCorrections->sigmas && vibCorrections->sigmasVC[t]) { VibCorrectionsSigma* sigmasAll; sigmasAll=g_malloc(vibCorrections->geom.numberOfAtoms*sizeof(VibCorrectionsSigma)); for(j=0;jgeom.numberOfAtoms;j++) { gint k,l; sigmasAll[j].isotropic = vibCorrections->sigmas[j].isotropic+vibCorrections->sigmasVC[t][j].isotropic; sigmasAll[j].anisotropy = vibCorrections->sigmas[j].anisotropy+vibCorrections->sigmasVC[t][j].anisotropy; for(k=0;k<3;k++) for(l=0;l<3;l++) sigmasAll[j].tensor[k][l] = vibCorrections->sigmas[j].tensor[k][l]+vibCorrections->sigmasVC[t][j].tensor[k][l]; } if(fabs(vibCorrections->temperatures[t])<1e-6) sprintf(tmp,"Sigma = SigmaEq + Zero-point vibrational corrections\n"); else sprintf(tmp,"Sigma = SigmaEq + vibrational corrections at T = %f\n",vibCorrections->temperatures[t]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); showShieldingTensors(textResult,&vibCorrections->geom, sigmasAll); if(sigmasAll) g_free(sigmasAll); } } if(vibCorrections->spinspins) { sprintf(tmp,"Total nuclear spin-spin coupling J (Hz) at equilibrium geometry\n"); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); showSpinSpins(textResult, &vibCorrections->geom, vibCorrections->spinspins); } for(t=0;tnTemperatures;t++) { if(vibCorrections->spinspinsVC[t]) { if(fabs(vibCorrections->temperatures[t])<1e-6) sprintf(tmp,"Zero-point vibrational corrections to total nuclear spin-spin coupling J (Hz)\n"); else sprintf(tmp,"Vibrational corrections at T= %f, to total nuclear spin-spin coupling J (Hz)\n",vibCorrections->temperatures[t]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); showSpinSpins(textResult, &vibCorrections->geom, vibCorrections->spinspinsVC[t]); } if(vibCorrections->spinspins &&vibCorrections->spinspinsVC[t] && fabs(vibCorrections->temperatures[t])>1e-6) { gdouble** spinspinsDiff; gint nAtoms = vibCorrections->geom.numberOfAtoms; spinspinsDiff=g_malloc(nAtoms*sizeof(gdouble*)); for(i=0;ispinspinsVC[t][i][j]-vibCorrections->spinspinsVC[0][i][j]; } sprintf(tmp,"J(Hz at T=%f) - J(Hz at T=0)\n",vibCorrections->temperatures[t]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); showSpinSpins(textResult,&vibCorrections->geom, spinspinsDiff); for(i=0;ispinspins &&vibCorrections->spinspinsVC[t]) { gdouble** spinspinsAll; gint nAtoms = vibCorrections->geom.numberOfAtoms; spinspinsAll=g_malloc(nAtoms*sizeof(gdouble*)); for(i=0;ispinspins[i][j]+vibCorrections->spinspinsVC[t][i][j]; } if(fabs(vibCorrections->temperatures[t])<1e-6) sprintf(tmp,"J(Hz) = JEq + Zero-point vibrational corrections\n"); else sprintf(tmp,"J(Hz) = JEq + Vibrational corrections at T= %f\n",vibCorrections->temperatures[t]); gabedit_text_insert (GABEDIT_TEXT(textResult), NULL, NULL, NULL,tmp,-1); showSpinSpins(textResult,&vibCorrections->geom, spinspinsAll); for(i=0;inumberOfAtoms;i++) { printf("%s %f %f %f ", geom->atoms[i].symbol, geom->atoms[i].coordinates[0]*BOHR_TO_ANG, geom->atoms[i].coordinates[1]*BOHR_TO_ANG, geom->atoms[i].coordinates[2]*BOHR_TO_ANG); printf(" Isotropic = %f Anisotropy = %f\n",sigmas[i].isotropic,sigmas[i].anisotropy); for(k=0;k<3;k++) { for(l=0;l<3;l++) printf("\t%f",sigmas[i].tensor[k][l]); printf("\n"); } } } /************************************************************************************************************/ static void printSpinSpins(VibCorrectionsGeom* geom, gdouble** spinspins) { gint i,j; for(i=0;inumberOfAtoms;i++) for(j=i;jnumberOfAtoms;j++) { printf("%s[%d] %s[%d] %f\n", geom->atoms[i].symbol,i+1, geom->atoms[j].symbol,j+1, spinspins[i][j] ); } } /************************************************************************************************************/ static void printVibCorrections(VibCorrections* vibCorrections) { gint i,j; gint t; gint nf = vibCorrections->numberOfFrequencies; if(!vibCorrections->centrifugeFlag) { printf("------------------------------------------------------------------------------------\n"); printf("%s", "Warnning : I cannot read the centrifugal coefficents from your gaussian output file\n" " So the centrifugal correction is neglected.\n" ); printf("------------------------------------------------------------------------------------\n"); } printf("\nDisplacement = %f\n",vibCorrections->delta); printf("Energies\n"); for(i=0;i<2*nf+1;i++) { for(j=0;j<2*nf+1;j++) { printf("%0.10f ",vibCorrections->energies[i][j]); if((j+1)%4==0) printf("\n"); } printf("\n\n"); } printf("Geometry(Angstrom)\n"); for(i=0;igeom.numberOfAtoms;i++) printf("%s %f %f %f\n", vibCorrections->geom.atoms[i].symbol, vibCorrections->geom.atoms[i].coordinates[0]*BOHR_TO_ANG, vibCorrections->geom.atoms[i].coordinates[1]*BOHR_TO_ANG, vibCorrections->geom.atoms[i].coordinates[2]*BOHR_TO_ANG); printf("\n"); printf("i Freq(cm-1) Calc.Freq Mass(amu) CentCoef[amu^(-1/2) Bohr^(-1)]\n"); for(i=0;ifrequences[i], vibCorrections->calculatedFrequencies[i], vibCorrections->mass[i], vibCorrections->akI[i]); printf("\n"); printf("Cubic Force Const.[Hartree*amu(-3/2)*Bohr(-3)]\n"); printf("i j k\tKijk\n"); for(i=0;iF[i][j]*AMU_TO_AU*sqrt(AMU_TO_AU)); if(vibCorrections->sigmas) { printf("Shielding tensor at equilibrium geometry (SigmaEq)\n"); printShieldingTensors(&vibCorrections->geom, vibCorrections->sigmas); } for(t=0;tnTemperatures;t++) { if(vibCorrections->sigmasVC[t]) { if(fabs(vibCorrections->temperatures[t])<1e-6) printf("Zero-point vibrational corrections to Sigma(ppm)\n"); else printf("Vibrational correction at T = %f K\n",vibCorrections->temperatures[t]); printShieldingTensors(&vibCorrections->geom, vibCorrections->sigmasVC[t]); } if(vibCorrections->sigmas && vibCorrections->sigmasVC[t] && fabs(vibCorrections->temperatures[t])>1e-6) { VibCorrectionsSigma* sigmasDiff; sigmasDiff=g_malloc(vibCorrections->geom.numberOfAtoms*sizeof(VibCorrectionsSigma)); for(j=0;jgeom.numberOfAtoms;j++) { gint k,l; sigmasDiff[j].isotropic = vibCorrections->sigmasVC[t][j].isotropic-vibCorrections->sigmasVC[0][j].isotropic; sigmasDiff[j].anisotropy = vibCorrections->sigmasVC[t][j].anisotropy-vibCorrections->sigmasVC[0][j].anisotropy; for(k=0;k<3;k++) for(l=0;l<3;l++) sigmasDiff[j].tensor[k][l] = vibCorrections->sigmasVC[t][j].tensor[k][l]-vibCorrections->sigmasVC[0][j].tensor[k][l]; } printf("Sigma(T=%f) - Sigma(T=0)\n",vibCorrections->temperatures[t]); printShieldingTensors(&vibCorrections->geom, sigmasDiff); if(sigmasDiff) g_free(sigmasDiff); } if(vibCorrections->sigmas && vibCorrections->sigmasVC[t]) { VibCorrectionsSigma* sigmasAll; sigmasAll=g_malloc(vibCorrections->geom.numberOfAtoms*sizeof(VibCorrectionsSigma)); for(j=0;jgeom.numberOfAtoms;j++) { gint k,l; sigmasAll[j].isotropic = vibCorrections->sigmas[j].isotropic+vibCorrections->sigmasVC[t][j].isotropic; sigmasAll[j].anisotropy = vibCorrections->sigmas[j].anisotropy+vibCorrections->sigmasVC[t][j].anisotropy; for(k=0;k<3;k++) for(l=0;l<3;l++) sigmasAll[j].tensor[k][l] = vibCorrections->sigmas[j].tensor[k][l]+vibCorrections->sigmasVC[t][j].tensor[k][l]; } if(fabs(vibCorrections->temperatures[t])<1e-6) printf("Sigma = SigmaEq + Zero-point vibrational corrections\n"); else printf("Sigma = SigmaEq + vibrational corrections at T = %f\n",vibCorrections->temperatures[t]); printShieldingTensors(&vibCorrections->geom, sigmasAll); if(sigmasAll) g_free(sigmasAll); } } if(vibCorrections->spinspins) { printf("Total nuclear spin-spin coupling J (Hz) at equilibrium geometry\n"); printSpinSpins(&vibCorrections->geom, vibCorrections->spinspins); } for(t=0;tnTemperatures;t++) { if(vibCorrections->spinspinsVC[t]) { if(fabs(vibCorrections->temperatures[t])<1e-6) printf("Zero-point vibrational corrections to total nuclear spin-spin coupling J (Hz)\n"); else printf("Vibrational corrections at T= %f, to total nuclear spin-spin coupling J (Hz)\n",vibCorrections->temperatures[t]); printSpinSpins(&vibCorrections->geom, vibCorrections->spinspinsVC[t]); } if(vibCorrections->spinspins &&vibCorrections->spinspinsVC[t] && fabs(vibCorrections->temperatures[t])>1e-6) { gdouble** spinspinsDiff; gint nAtoms = vibCorrections->geom.numberOfAtoms; spinspinsDiff=g_malloc(nAtoms*sizeof(gdouble*)); for(i=0;ispinspinsVC[t][i][j]-vibCorrections->spinspinsVC[0][i][j]; } printf("J(Hz at T=%f) - J(Hz at T=0)\n",vibCorrections->temperatures[t]); printSpinSpins(&vibCorrections->geom, spinspinsDiff); for(i=0;ispinspins &&vibCorrections->spinspinsVC[t]) { gdouble** spinspinsAll; gint nAtoms = vibCorrections->geom.numberOfAtoms; spinspinsAll=g_malloc(nAtoms*sizeof(gdouble*)); for(i=0;ispinspins[i][j]+vibCorrections->spinspinsVC[t][i][j]; } if(fabs(vibCorrections->temperatures[t])<1e-6) printf("J(Hz) = JEq + Zero-point vibrational corrections\n"); else printf("J(Hz) = JEq + Vibrational corrections at T= %f\n",vibCorrections->temperatures[t]); printSpinSpins(&vibCorrections->geom, spinspinsAll); for(i=0;iakI[nf] = d; else vibCorrections->centrifugeFlag = FALSE; Ok =getValueFromLine(t,"FREQ","=",&vibCorrections->frequences[nf]); if(!Ok) break; Ok =getValueFromLine(t,"MASS","=",&vibCorrections->mass[nf]); if(!Ok) break; Ok =getValueFromLine(t,"QEQ","+",&d); if(!Ok) break; if(nf==0) vibCorrections->delta = d; else if(fabs(vibCorrections->delta - d)>1e-8) { Ok = FALSE; break; } nf++; if(nf>=vibCorrections->numberOfFrequencies) break; } } } fclose(file); return Ok; } /************************************************************************************************************/ static gboolean readEnergies(gchar* fileName, VibCorrections* vibCorrections) { gchar t[BSIZE]; FILE* file; gint nf = vibCorrections->numberOfFrequencies; gint twonf = 2*nf; gint twonfp1 = twonf+1; gboolean Ok = TRUE; gint i = 0; gint j = 0; gint nAll = 0; file = FOpen(fileName, "rb"); if(!file) return FALSE; while(!feof(file)) { if(!fgets(t,BSIZE,file))break; if(strstr(t,"E(") && strstr(t,"SCF Done")) { Ok =getValueFromLine(t,"E(","=",&vibCorrections->energies[i][j]); if(!Ok) break; nAll++; j++; if(nAll == twonfp1+twonf*twonf) break; if(nAll == twonfp1) { for(i=1;ienergies[i][0] = vibCorrections->energies[0][i]; i = 1; j = 1; } else if(nAll>twonfp1 && (nAll-twonfp1)%twonf==0) { i++; j = 1; } } } if(nAll != twonfp1+twonf*twonf) Ok = FALSE; fclose(file); return Ok; } /********************************************************************************/ static gboolean read_gaussian_file_geomi_str(VibCorrectionsGeom* geom, gchar *fileName,gint num,gchar* str) { gchar t[BSIZE]; gboolean OK; gchar tmpStr[5][100]; FILE *fd; guint idummy; guint i; gint j=0; gint l; guint numgeom; guint itype=0; fd = FOpen(fileName, "rb"); if(!fd) return FALSE; numgeom =1; do { OK=FALSE; while(!feof(fd)) { if(!fgets(t,BSIZE,fd))break; if(strstr( t,str)) { if(!fgets(t,BSIZE,fd))break; if(!fgets(t,BSIZE,fd))break; if(!fgets(t,BSIZE,fd))break; if(strstr( t, "Type" )) itype=1; else itype=0; if(!fgets(t,BSIZE,fd))break; numgeom++; OK = TRUE; break; } } if(!OK && (numgeom == 1) ) { fclose(fd); return FALSE; } if(!OK)break; j=-1; while(!feof(fd) ) { if(!fgets(t,BSIZE,fd))break; if(strstr( t, "----------------------------------" ))break; j++; if(geom->atoms==NULL) geom->atoms=g_malloc(sizeof(VibCorrectionsAtom)); else geom->atoms=g_realloc(geom->atoms,(j+1)*sizeof(VibCorrectionsAtom)); if(itype==0) sscanf(t,"%d %s %s %s %s",&idummy,tmpStr[0],tmpStr[1],tmpStr[2],tmpStr[3]); else sscanf(t,"%d %s %d %s %s %s",&idummy,tmpStr[0],&idummy,tmpStr[1],tmpStr[2],tmpStr[3]); tmpStr[0][0]=toupper(tmpStr[0][0]); l=strlen(tmpStr[0]); if (l>1) tmpStr[0][1]=tolower(tmpStr[0][1]); geom->atoms[j].symbol=g_strdup(symb_atom_get((guint)atoi(tmpStr[0]))); for(i=0;i<3;i++) geom->atoms[j].coordinates[i]=atof(ang_to_bohr(tmpStr[i+1])); } if(num >0 && (gint)numgeom-1 == num) break; }while(!feof(fd)); geom->numberOfAtoms = j+1; fclose(fd); if(geom->numberOfAtoms == 0 ) { if(geom->atoms) g_free(geom->atoms); geom->atoms = NULL; return FALSE; } return TRUE; } /********************************************************************************/ static gboolean read_gaussian_file_geomi(VibCorrectionsGeom* geom, gchar *fileName,gint num) { if(read_gaussian_file_geomi_str(geom, fileName,num,"Standard orientation:")) return TRUE; if(read_gaussian_file_geomi_str(geom, fileName,num,"Input orientation:")) return TRUE; /* for calculation with nosym option */ if(!read_gaussian_file_geomi_str(geom, fileName,num,"Z-Matrix orientation:")) { Message(_("Sorry\nI can not read geometry in this file"),_("Error"),TRUE); return FALSE; } return TRUE; } /************************************************************************************************************/ static gdouble getOneTerm(gdouble p0, gdouble pp, gdouble pm, gdouble OneOverFourW, gdouble OneOverFourW2sumF, gdouble fm, gdouble f2m, gdouble fCent) { gdouble d=0,d2=0; gdouble dCent=0; gdouble d1; d1 = (pp-pm)*fm; dCent = fCent*d1; d = -d1*OneOverFourW2sumF; d2 = (pp+pm-2*p0)*f2m; d2 = d2*OneOverFourW; /* printf("pp=%f pm=%f s=%f\n",pp,pm,(pp+pm-2*p0)*f2m); */ return d+d2+dCent; } /************************************************************************************************************/ static gboolean readLastShieldingTensors(FILE* file, VibCorrectionsSigma* sigmas, gint nAtoms) { gchar t[BSIZE]; gboolean Ok = TRUE; gchar* str = "shielding tensor (ppm)"; gint i; while(!feof(file)) { if(!fgets(t,BSIZE,file)) return FALSE; if(strstr(t,str)) break; } if(!strstr(t,str)) return FALSE; for(i=0;igeom.numberOfAtoms; gboolean Ok; gint nf = vibCorrections->numberOfFrequencies; gint i,j; gdouble f = 2*vibCorrections->delta*sqrt(AMU_TO_AU); gdouble f2 = vibCorrections->delta*vibCorrections->delta*AMU_TO_AU; gint t; if(nAtoms<1) return FALSE; file = FOpen(fileName, "rb"); if(!file) return FALSE; sigmas0=g_malloc(nAtoms*sizeof(VibCorrectionsSigma)); sigmasP=g_malloc(nAtoms*sizeof(VibCorrectionsSigma)); sigmasM=g_malloc(nAtoms*sizeof(VibCorrectionsSigma)); Ok = readLastShieldingTensors(file, sigmas0, nAtoms); if(Ok) { vibCorrections->sigmas=g_malloc(nAtoms*sizeof(VibCorrectionsSigma)); for(j=0;jsigmas[j]= sigmas0[j]; for(t=0;tnTemperatures;t++) { vibCorrections->sigmasVC[t]=g_malloc(nAtoms*sizeof(VibCorrectionsSigma)); for(j=0;jsigmasVC[t][j].isotropic = 0.0; vibCorrections->sigmasVC[t][j].anisotropy = 0.0; for(k=0;k<3;k++) for(l=0;l<3;l++) vibCorrections->sigmasVC[t][j].tensor[k][l] = 0.0; } } } if(Ok) for(i=0;ifrequences[i]/AU_TO_CM1; gdouble w2 =w*w; gdouble fm = 1/(f*sqrt(vibCorrections->mass[i])); gdouble f2m = 1/(f2*vibCorrections->mass[i]); Ok = readLastShieldingTensors(file, sigmasP, nAtoms); if(!Ok) break; Ok = readLastShieldingTensors(file, sigmasM, nAtoms); if(!Ok) break; if(DEBUGFLAG != 0) { printf("Sigma+ nf = %d\n",i+1); printShieldingTensors(&vibCorrections->geom, sigmasP); printf("Sigma- nf = %d\n",i+1); printShieldingTensors(&vibCorrections->geom, sigmasM); } for(t=0;tnTemperatures;t++) { gdouble OneOverFourW2sumF = 1.0/4/w2*vibCorrections->sumF[t][i]; gdouble kT = 3.16681552e-06*vibCorrections->temperatures[t]; gdouble fCent = kT*vibCorrections->akI[i]/w2/2/sqrt(AMU_TO_AU); gdouble OneOverFourW = 1.0/4/w; if(fabs(vibCorrections->temperatures[t])>1e-6) { gdouble x = w/2/kT; OneOverFourW *= cosh(x)/sinh(x); } for(j=0;jsigmasVC[t][j].isotropic += getOneTerm(sigmas0[j].isotropic, sigmasP[j].isotropic, sigmasM[j].isotropic, OneOverFourW, OneOverFourW2sumF, fm, f2m,fCent); vibCorrections->sigmasVC[t][j].anisotropy += getOneTerm(sigmas0[j].anisotropy, sigmasP[j].anisotropy, sigmasM[j].anisotropy, OneOverFourW, OneOverFourW2sumF, fm, f2m,fCent); for(k=0;k<3;k++) for(l=0;l<3;l++) vibCorrections->sigmasVC[t][j].tensor[k][l] += getOneTerm(sigmas0[j].tensor[k][l], sigmasP[j].tensor[k][l], sigmasM[j].tensor[k][l], OneOverFourW, OneOverFourW2sumF, fm, f2m,fCent); } } } g_free(sigmas0); g_free(sigmasP); g_free(sigmasM); fclose(file); return TRUE; } /************************************************************************************************************/ static gboolean readLastSpinSpins(FILE* file, gdouble** spinspins, gint nAtoms) { gchar t[BSIZE]; gboolean Ok = TRUE; gchar* str = "Total nuclear spin-spin coupling J (Hz):"; gint nBlock = nAtoms/5; gint rest = nAtoms%5; gint i,j,k,l,a,b,nl,ib; gdouble A[5]; if(rest!=0) nBlock++; while(!feof(file)) { if(!fgets(t,BSIZE,file)) return FALSE; if(strstr(t,str)) break; } if(!strstr(t,str)) return FALSE; for(ib=0;Ok && ibgeom.numberOfAtoms; gboolean Ok; gint nf = vibCorrections->numberOfFrequencies; gint i,j; gdouble f = 2*vibCorrections->delta*sqrt(AMU_TO_AU); gdouble f2 = vibCorrections->delta*vibCorrections->delta*AMU_TO_AU; gint t; if(nAtoms<1) return FALSE; file = FOpen(fileName, "rb"); if(!file) return FALSE; spinspins0=g_malloc(nAtoms*sizeof(gdouble*)); for(i=0;ispinspins=g_malloc(nAtoms*sizeof(gdouble*)); for(i=0;ispinspins[i]=g_malloc(nAtoms*sizeof(gdouble)); for(j=0;jspinspins[i][j]= spinspins0[i][j]; } for(t=0;tnTemperatures;t++) { vibCorrections->spinspinsVC[t]=g_malloc(nAtoms*sizeof(gdouble*)); for(i=0;ispinspinsVC[t][i]=g_malloc(nAtoms*sizeof(gdouble)); for(j=0;jspinspinsVC[t][i][j]= 0; } } } if(Ok) for(i=0;ifrequences[i]/AU_TO_CM1; gdouble w2 =w*w; gdouble fm = 1/(f*sqrt(vibCorrections->mass[i])); gdouble f2m = 1/(f2*vibCorrections->mass[i]); Ok = readLastSpinSpins(file, spinspinsP, nAtoms); if(!Ok) break; Ok = readLastSpinSpins(file, spinspinsM, nAtoms); if(!Ok) break; for(t=0;tnTemperatures;t++) { gdouble OneOverFourW2sumF = 1.0/4/w2*vibCorrections->sumF[t][i]; gdouble kT = 3.16681552e-06*vibCorrections->temperatures[t]; gdouble fCent = kT*vibCorrections->akI[i]/w2/2/sqrt(AMU_TO_AU); gdouble OneOverFourW = 1.0/4/w; if(fabs(vibCorrections->temperatures[t])>1e-6) { gdouble x = w/2/kT; OneOverFourW *= cosh(x)/sinh(x); } for(j=0;jspinspinsVC[t][j][k] += getOneTerm(spinspins0[j][k], spinspinsP[j][k], spinspinsM[j][k], OneOverFourW, OneOverFourW2sumF, fm, f2m,fCent); } } } for(i=0;inumberOfFrequencies; gdouble f = vibCorrections->delta*vibCorrections->delta*AMU_TO_AU; gint i; for(i=0;icalculatedFrequencies[i]=sqrt(fabs(( vibCorrections->energies[0][2*i+1]+ vibCorrections->energies[0][2*i+2]- 2*vibCorrections->energies[0][0])/ (f*vibCorrections->mass[i])))*AU_TO_CM1; } } /************************************************************************************************************/ static void computeCubicForces(VibCorrections* vibCorrections) { gdouble deriv0; /* nul on well */ gdouble derivP; gdouble derivM; gint nf = vibCorrections->numberOfFrequencies; gdouble f = 2*vibCorrections->delta*sqrt(AMU_TO_AU); gdouble f2 = vibCorrections->delta*vibCorrections->delta*AMU_TO_AU; gint i,j; if(nf<1) return; for(i=0;imass[i]); for(j=0;jmass[j])); deriv0 =(vibCorrections->energies[0][2*j+1]-vibCorrections->energies[0][2*j+2])*fm; derivP =(vibCorrections->energies[2*i+1][2*j+1]-vibCorrections->energies[2*i+1][2*j+2])*fm; derivM =(vibCorrections->energies[2*i+2][2*j+1]-vibCorrections->energies[2*i+2][2*j+2])*fm; vibCorrections->F[i][j] = (derivP+derivM-2*deriv0)*f2m; } } } /************************************************************************************************************/ static void computeSumCubicForces(VibCorrections* vibCorrections) { gint nf = vibCorrections->numberOfFrequencies; gint i,j,t; for(t=0;tnTemperatures;t++) { gdouble twokT = 2*3.16681552e-06*vibCorrections->temperatures[t]; for(i=0;isumF[t][i] = 0; for(j=0;jfrequences[j]/AU_TO_CM1; if(fabs(vibCorrections->temperatures[t])<1e-6) vibCorrections->sumF[t][i] += vibCorrections->F[j][i]/w; else { gdouble x = w/twokT; vibCorrections->sumF[t][i] += vibCorrections->F[j][i]/w*cosh(x)/sinh(x); } } } } } /********************************************************************************/ static gboolean read_gaussian_file(GabeditFileChooser *filesel, gint response_id) { gint nf = 0; gchar* fileName = NULL; VibCorrections vibCorrections; gboolean Ok = TRUE; gint nT = 2; gdouble* T =NULL; GtkWidget* entryTemperatureBegin = NULL; GtkWidget* entryTemperatureN = NULL; GtkWidget* entryTemperatureStep = NULL; gdouble TBegin = 300; gdouble TStep = 10; gint nStep = 1; gint i; if(response_id != GTK_RESPONSE_OK) return FALSE; fileName = gabedit_file_chooser_get_current_file(filesel); entryTemperatureBegin = g_object_get_data (G_OBJECT (filesel), "EntryTemperatureBegin"); entryTemperatureN = g_object_get_data (G_OBJECT (filesel), "EntryTemperatureN"); entryTemperatureStep = g_object_get_data (G_OBJECT (filesel), "EntryTemperatureStep"); if(!entryTemperatureBegin) return FALSE; if(!entryTemperatureN) return FALSE; if(!entryTemperatureStep) return FALSE; TBegin = atof(gtk_entry_get_text(GTK_ENTRY(entryTemperatureBegin))); if(TBegin<0) TBegin = -TBegin; nStep = atoi(gtk_entry_get_text(GTK_ENTRY(entryTemperatureN))); if(nStep<0) nStep = 0; TStep = atof(gtk_entry_get_text(GTK_ENTRY(entryTemperatureStep))); if(TStep<0) TStep = -TStep; nT = nStep +1; T = g_malloc(nT*sizeof(gdouble)); T[0] = 0; for(i=1;i<=nStep;i++) T[i] = TBegin + TStep*(i-1); nf = getNumberOfFrequencies(fileName); if(nf<0) return FALSE; initVibCorrections(&vibCorrections,nf, nT,T); g_free(T); Ok = read_gaussian_file_geomi(&vibCorrections.geom, fileName,1); if(Ok) Ok = readFrequenciesMassDelta(fileName, &vibCorrections); if(Ok) Ok = readEnergies(fileName, &vibCorrections); if(Ok) computeFrequencies(&vibCorrections); if(Ok) computeCubicForces(&vibCorrections); if(Ok) computeSumCubicForces(&vibCorrections); if(Ok) readShieldingTensors(fileName,&vibCorrections); if(Ok) readSpinSpins(fileName,&vibCorrections); if(Ok && DEBUGFLAG != 0 ) printVibCorrections(&vibCorrections); if(Ok) showVibCorrections(&vibCorrections); freeVibCorrections(&vibCorrections); return TRUE; } /********************************************************************************/ void read_vibcorrection_gaussian_file_dlg() { GtkWidget* filesel = file_chooser_open(read_gaussian_file, _("Read the Gaussian output file for a input file created by Gabedit"), GABEDIT_TYPEFILE_GAUSSIAN,GABEDIT_TYPEWIN_OTHER); GtkWidget* entryTemperatureBegin = gtk_entry_new(); GtkWidget* entryTemperatureN = gtk_entry_new(); GtkWidget* entryTemperatureStep = gtk_entry_new(); GtkWidget* hbox = gtk_hbox_new(FALSE,1); GtkWidget* hsep1 = gtk_hseparator_new(); GtkWidget* hsep2 = gtk_hseparator_new(); GtkWidget* labelBegin = gtk_label_new(_("Temperatures (K) from : ")); GtkWidget* labelN = gtk_label_new(_(" Number of values : ")); GtkWidget* labelStep = gtk_label_new(_(" with a step(K) : ")); gtk_entry_set_text(GTK_ENTRY(entryTemperatureBegin),"300.0"); gtk_entry_set_text(GTK_ENTRY(entryTemperatureStep),"10.0"); gtk_entry_set_text(GTK_ENTRY(entryTemperatureN),"1"); gtk_box_pack_start (GTK_BOX (hbox), labelBegin, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), entryTemperatureBegin, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), labelN, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), entryTemperatureN, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), labelStep, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), entryTemperatureStep, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (GTK_DIALOG(filesel)->vbox), hsep1, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (GTK_DIALOG(filesel)->vbox), hbox, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (GTK_DIALOG(filesel)->vbox), hsep2, FALSE, FALSE, 0); gtk_widget_show_all(hsep1); gtk_widget_show_all(hsep2); gtk_widget_show_all(hbox); gtk_window_set_modal (GTK_WINDOW (filesel), TRUE); g_object_set_data (G_OBJECT (filesel), "EntryTemperatureBegin",entryTemperatureBegin); g_object_set_data (G_OBJECT (filesel), "EntryTemperatureN",entryTemperatureN); g_object_set_data (G_OBJECT (filesel), "EntryTemperatureStep",entryTemperatureStep); } GabeditSrc250/src/Symmetry/0000755000175100017510000000000013130743374016115 5ustar allouchealloucheGabeditSrc250/src/Symmetry/SOperation.h0000644000175100017510000000346413130665226020357 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_SOPERATION_H__ #define __GABEDIT_SOPERATION_H__ #include "../Utils/Point3D.h" typedef struct _SOperation SOperation; struct _SOperation { gint number; gchar elementType[10]; gint degree; gchar str[10]; /* methods */ gint (*getNumber) (SOperation* operation); gint (*getDegree)(SOperation* operation); gchar* (*getElementType)(SOperation* operation); gchar* (*toString)(SOperation* operation); }; SOperation newSOperation(gint number, gchar* type, gint degree); #endif /* __GABEDIT_SOPERATION_H__ */ GabeditSrc250/src/Symmetry/GenerateMolecule.c0000644000175100017510000007213013130665226021503 0ustar alloucheallouche/* GenerateMolecule.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "../Symmetry/MoleculeSymmetryType.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/SymmetryOperators.h" #include "../Symmetry/ReduceMolecule.h" #include "../Symmetry/ReducePolyHedralMolecule.h" #include "../Symmetry/PolyHedralOperators.h" #include #include #include #include #define SQU(x,y,z) ((x)*(x) + (y)*(y) + (z)*(z)) #define C5X 0.6070619987 #define C5Z 0.7946544719 /************************************************************************************************************/ static void printAMolecule(MolSymMolecule* mol) { gint i; MolSymAtom *atomList; atomList = mol->listOfAtoms; for (i=0;inumberOfAtoms;i++) { printf("%d %f %f %f\n", atomList->type , atomList->position[0], atomList->position[1], atomList->position[2] ); atomList++;; } } /************************************************************************************************************/ static gint applyProperRotationOneAtom(gdouble point[], gdouble axis[], gdouble angle, gdouble oldAtom[], gdouble newAtom[]) { gint i,j,k; gdouble c, s; gdouble m[3][3]; for (i=0;i<3;i++) newAtom[i] = oldAtom[i]; c = cos(angle); s = sin(angle); for (i=0;i<3;i++) for (j=i+1;j<3;j++) { gdouble p = s; k = (j+1)%3; if(k==i) { k = (i+1)%3; p = -p;} m[i][j] = (1-c)*axis[i]*axis[j]-p*axis[k]; m[j][i] = (1-c)*axis[i]*axis[j]+p*axis[k]; } for (i=0;i<3;i++) m[i][i] = c + (1-c)*axis[i]*axis[i]; /*Translate the reflection plane to the origin, and translate atom by the same vector*/ for (i=0;i<3;i++) oldAtom[i] -= point[i]; /*Apply the reflection matrix*/ for (i=0;i<3;i++) { newAtom[i] = 0.0; for (j=0;j<3;j++) newAtom[i] += m[i][j]*oldAtom[j]; } /*Translate the atoms and reflection plane back*/ for (i=0;i<3;i++) oldAtom[i] += point[i]; for (i=0;i<3;i++) newAtom[i] += point[i]; return 0; } /************************************************************************************************************/ static gint applyReflectionOneAtom(gdouble point[], gdouble normal[], gdouble oldAtom[], gdouble newAtom[]) { gdouble len = 0; gint i,j; gdouble a[3]; gdouble m[3][3]; for (i=0;i<3;i++) newAtom[i] = oldAtom[i]; for (i=0;i<3;i++) len += normal[i]*normal[i]; if(len<1e-14) return 1; len = sqrt(len); for (i=0;i<3;i++) a[i] = normal[i]/len; for (i=0;i<3;i++) for (j=i+1;j<3;j++) { m[i][j] = -2*a[i]*a[j]; m[j][i] = m[i][j]; } for (i=0;i<3;i++) m[i][i] = -a[i]*a[i]+a[(i+1)%3]*a[(i+1)%3]+a[(i+2)%3]*a[(i+2)%3]; /*Translate the reflection plane to the origin, and translate atom by the same vector*/ for (i=0;i<3;i++) oldAtom[i] -= point[i]; /*Apply the reflection matrix*/ for (i=0;i<3;i++) { newAtom[i] = 0.0; for (j=0;j<3;j++) newAtom[i] += m[i][j]*oldAtom[j]; } /*Translate the atoms and reflection plane back*/ for (i=0;i<3;i++) oldAtom[i] += point[i]; for (i=0;i<3;i++) newAtom[i] += point[i]; return 0; } /************************************************************************************************************/ /* static gint applyImproperRotationOneAtom(gdouble point[], gdouble axis[], gdouble angle, gdouble oldAtom[], gdouble newAtom[]) { gint res = applyProperRotationOneAtom(point, axis, angle, oldAtom, newAtom); if(res==0) res = applyReflectionOneAtom(point, axis, oldAtom, newAtom); return res; } */ /************************************************************************************************************/ static gint freeAMolecule(MolSymMolecule* mol) { gint i; if(mol->numberOfAtoms>0 && mol->listOfAtoms) g_free(mol->listOfAtoms); mol->listOfAtoms = NULL; mol->numberOfAtoms = 0; if(mol->numberOfDifferentKindsOfAtoms>0 && mol->symbol) { for(i=0;inumberOfDifferentKindsOfAtoms;i++) if( mol->symbol[i]) g_free(mol->symbol[i]); g_free(mol->symbol); } mol->symbol = NULL; if(mol->numberOfDifferentKindsOfAtoms>0 && mol->numberOfAtomsOfEachType) g_free(mol->numberOfAtomsOfEachType); mol->numberOfAtomsOfEachType = 0; if(mol->numberOfDifferentKindsOfAtoms>0 && mol->masse) g_free(mol->masse); mol->masse = 0; mol->numberOfDifferentKindsOfAtoms = 0; return 0; } /************************************************************************************************************/ static void removeEquivAtoms(MolSymMolecule* mol) { gdouble eps = 1e-3; gint i; gint j; gint numberOfAtoms = mol->numberOfAtoms; gint deleted = mol->numberOfDifferentKindsOfAtoms; /* tag for deleted atom */ gdouble rr = 0; gdouble xx = 0; gdouble yy = 0; gdouble zz = 0; for(i=1;inumberOfAtoms;i++) { for(j=0;jlistOfAtoms[i].type != deleted && mol->listOfAtoms[j].type == mol->listOfAtoms[i].type) { xx = mol->listOfAtoms[i].position[0] - mol->listOfAtoms[j].position[0]; yy = mol->listOfAtoms[i].position[1] - mol->listOfAtoms[j].position[1]; zz = mol->listOfAtoms[i].position[2] - mol->listOfAtoms[j].position[2]; eps = fabs( mol->listOfAtoms[i].eps + mol->listOfAtoms[j].eps)/2; rr = SQU(xx,yy,zz); if(rrlistOfAtoms[j].type = deleted; numberOfAtoms--; } } } } qsort(mol->listOfAtoms,mol->numberOfAtoms,sizeof(MolSymAtom),compare2atoms); mol->numberOfAtoms = numberOfAtoms; } /************************************************************************************************************/ static gint copyAMolecule(MolSymMolecule* mol, MolSymMolecule* mol2Copy) { gint i; MolSymAtom *atomList; MolSymAtom *tmpAtomList; if(mol->numberOfAtoms>0 && mol->listOfAtoms) g_free(mol->listOfAtoms); mol->listOfAtoms = NULL; if(mol2Copy->numberOfAtoms<1) return -1; mol->numberOfDifferentKindsOfAtoms = mol2Copy->numberOfDifferentKindsOfAtoms; if(mol->numberOfDifferentKindsOfAtoms>0 && mol->symbol) { for(i=0;inumberOfDifferentKindsOfAtoms;i++) if( mol->symbol[i]) g_free(mol->symbol[i]); g_free(mol->symbol); } mol->symbol = (gchar**)g_malloc(mol->numberOfDifferentKindsOfAtoms*sizeof(gchar*)); if(mol->numberOfDifferentKindsOfAtoms>0 && mol->numberOfAtomsOfEachType) g_free(mol->numberOfAtomsOfEachType); mol->numberOfAtomsOfEachType = (gint*)g_malloc(mol->numberOfDifferentKindsOfAtoms*sizeof(gint)); if(mol->numberOfDifferentKindsOfAtoms>0 && mol->masse) g_free(mol->masse); mol->masse = (gdouble*)g_malloc(mol->numberOfDifferentKindsOfAtoms*sizeof(gdouble)); mol->numberOfAtoms=mol2Copy->numberOfAtoms; mol->listOfAtoms = (MolSymAtom*)g_malloc(mol->numberOfAtoms*sizeof(MolSymAtom)); atomList = mol->listOfAtoms; tmpAtomList = mol2Copy->listOfAtoms; for (i=0;inumberOfAtoms;i++) { atomList->position[0] = tmpAtomList->position[0]; atomList->position[1] = tmpAtomList->position[1]; atomList->position[2] = tmpAtomList->position[2]; atomList->type = tmpAtomList->type; atomList->eps = tmpAtomList->eps; atomList++;; tmpAtomList++; } for (i=0;inumberOfDifferentKindsOfAtoms;i++) { mol->numberOfAtomsOfEachType[i] = mol2Copy->numberOfAtomsOfEachType[i]; mol->symbol[i] = g_strdup(mol2Copy->symbol[i]); mol->masse[i] = mol2Copy->masse[i]; } return 0; } /************************************************************************************************************/ static gint AddHalfSpace(MolSymMolecule* mol, RotationReflectionOperator op) { gint n; gint i; MolSymAtom *atomList; MolSymAtom *tmpAtomList; MolSymMolecule tmpMol; gint numberOfAtoms = 0; gchar** symbols = NULL; gdouble* masses = NULL; gint originalNumberOfAtoms = mol->numberOfAtoms; tmpMol.numberOfAtoms=2*mol->numberOfAtoms; tmpMol.listOfAtoms = (MolSymAtom*)g_malloc(tmpMol.numberOfAtoms*sizeof(MolSymAtom)); tmpMol.symbol = (gchar**)g_malloc(tmpMol.numberOfAtoms*sizeof(gchar*)); tmpMol.numberOfAtomsOfEachType = (gint*)g_malloc(tmpMol.numberOfAtoms*sizeof(gint)); tmpMol.masse = (gdouble*)g_malloc(tmpMol.numberOfAtoms*sizeof(gdouble)); symbols = (gchar**)g_malloc(tmpMol.numberOfAtoms*sizeof(gchar*)); masses = (gdouble*)g_malloc(tmpMol.numberOfAtoms*sizeof(gdouble)); if (tmpMol.listOfAtoms == NULL) return -1; atomList = mol->listOfAtoms; tmpAtomList = tmpMol.listOfAtoms; /* copy molecule */ numberOfAtoms = 0; for (n=0;nnumberOfAtoms;n++) { numberOfAtoms++; tmpAtomList->position[0] = atomList->position[0]; tmpAtomList->position[1] = atomList->position[1]; tmpAtomList->position[2] = atomList->position[2]; tmpAtomList->type = atomList->type; tmpAtomList->eps = atomList->eps; symbols[numberOfAtoms-1] = g_strdup(mol->symbol[atomList->type]); masses[numberOfAtoms-1] = mol->masse[atomList->type]; atomList++;; tmpAtomList++; } atomList = mol->listOfAtoms; for (n=0;nnumberOfAtoms;n++) { switch(op) { case XY_PLANE: tmpAtomList->position[0] = atomList->position[0]; tmpAtomList->position[1] = atomList->position[1]; tmpAtomList->position[2] = -atomList->position[2]; numberOfAtoms++; symbols[numberOfAtoms-1] = g_strdup(mol->symbol[atomList->type]); masses[numberOfAtoms-1] = mol->masse[atomList->type]; tmpAtomList->type = atomList->type; tmpAtomList->eps = atomList->eps; atomList++;; tmpAtomList++; break; case XZ_PLANE: tmpAtomList->position[0] = atomList->position[0]; tmpAtomList->position[1] = -atomList->position[1]; tmpAtomList->position[2] = atomList->position[2]; numberOfAtoms++; symbols[numberOfAtoms-1] = g_strdup(mol->symbol[atomList->type]); masses[numberOfAtoms-1] = mol->masse[atomList->type]; tmpAtomList->type = atomList->type; tmpAtomList->eps = atomList->eps; atomList++;; tmpAtomList++; break; case YZ_PLANE: tmpAtomList->position[0] = -atomList->position[0]; tmpAtomList->position[1] = atomList->position[1]; tmpAtomList->position[2] = atomList->position[2]; numberOfAtoms++; symbols[numberOfAtoms-1] = g_strdup(mol->symbol[atomList->type]); masses[numberOfAtoms-1] = mol->masse[atomList->type]; tmpAtomList->type = atomList->type; tmpAtomList->eps = atomList->eps; atomList++;; tmpAtomList++; break; case POINT_INV: tmpAtomList->position[0] = -atomList->position[0]; tmpAtomList->position[1] = -atomList->position[1]; tmpAtomList->position[2] = -atomList->position[2]; numberOfAtoms++; symbols[numberOfAtoms-1] = g_strdup(mol->symbol[atomList->type]); masses[numberOfAtoms-1] = mol->masse[atomList->type]; tmpAtomList->type = atomList->type; tmpAtomList->eps = atomList->eps; atomList++;; tmpAtomList++; break; case ROT2X: tmpAtomList->position[0] = atomList->position[0]; tmpAtomList->position[1] = -atomList->position[1]; tmpAtomList->position[2] = -atomList->position[2]; numberOfAtoms++; symbols[numberOfAtoms-1] = g_strdup(mol->symbol[atomList->type]); masses[numberOfAtoms-1] = mol->masse[atomList->type]; tmpAtomList->type = atomList->type; tmpAtomList->eps = atomList->eps; atomList++;; tmpAtomList++; break; case ROT2Y: tmpAtomList->position[0] = -atomList->position[0]; tmpAtomList->position[1] = atomList->position[1]; tmpAtomList->position[2] = -atomList->position[2]; numberOfAtoms++; symbols[numberOfAtoms-1] = g_strdup(mol->symbol[atomList->type]); masses[numberOfAtoms-1] = mol->masse[atomList->type]; tmpAtomList->type = atomList->type; tmpAtomList->eps = atomList->eps; atomList++;; tmpAtomList++; break; case ROT2Z: tmpAtomList->position[0] = -atomList->position[0]; tmpAtomList->position[1] = -atomList->position[1]; tmpAtomList->position[2] = atomList->position[2]; numberOfAtoms++; symbols[numberOfAtoms-1] = g_strdup(mol->symbol[atomList->type]); masses[numberOfAtoms-1] = mol->masse[atomList->type]; tmpAtomList->type = atomList->type; tmpAtomList->eps = atomList->eps; atomList++;; tmpAtomList++; } } tmpMol.numberOfAtoms = numberOfAtoms; tmpAtomList = tmpMol.listOfAtoms; tmpMol.numberOfDifferentKindsOfAtoms = 0; for(n=0; ntype = i; tmpAtomList++; } /* printf("Avant remove\n"); printAMolecule(&tmpMol);*/ removeEquivAtoms(&tmpMol); /* printf("Apres remove\n"); printAMolecule(&tmpMol);*/ copyAMolecule(mol, &tmpMol); freeAMolecule(&tmpMol); if(symbols) { for(i=0; inumberOfAtoms; if(nax<2) return 0; tmpMol.numberOfAtoms=nax*mol->numberOfAtoms; tmpMol.listOfAtoms = (MolSymAtom*)g_malloc(tmpMol.numberOfAtoms*sizeof(MolSymAtom)); tmpMol.symbol = (gchar**)g_malloc(tmpMol.numberOfAtoms*sizeof(gchar*)); tmpMol.numberOfAtomsOfEachType = (gint*)g_malloc(tmpMol.numberOfAtoms*sizeof(gint)); tmpMol.masse = (gdouble*)g_malloc(tmpMol.numberOfAtoms*sizeof(gdouble)); symbols = (gchar**)g_malloc(tmpMol.numberOfAtoms*sizeof(gchar*)); masses = (gdouble*)g_malloc(tmpMol.numberOfAtoms*sizeof(gdouble)); if (tmpMol.listOfAtoms == NULL) return -1; atomList = mol->listOfAtoms; tmpAtomList = tmpMol.listOfAtoms; /* copy molecule */ numberOfAtoms = 0; for (n=0;nnumberOfAtoms;n++) { numberOfAtoms++; tmpAtomList->position[0] = atomList->position[0]; tmpAtomList->position[1] = atomList->position[1]; tmpAtomList->position[2] = atomList->position[2]; tmpAtomList->type = atomList->type; tmpAtomList->eps = atomList->eps; symbols[numberOfAtoms-1] = g_strdup(mol->symbol[atomList->type]); masses[numberOfAtoms-1] = mol->masse[atomList->type]; atomList++;; tmpAtomList++; } atomList = mol->listOfAtoms; for (n=0;nnumberOfAtoms;n++) { gint k; gdouble cr,sr,x,y,rr; rr = atomList->position[0]*atomList->position[0] + atomList->position[1]*atomList->position[1]; if (rr > atomList->eps*atomList->eps) for(k=1;kposition[0]*cr-atomList->position[1]*sr; y = atomList->position[0]*sr+atomList->position[1]*cr; tmpAtomList->position[0] = x; tmpAtomList->position[1] = y; tmpAtomList->position[2] = atomList->position[2]; numberOfAtoms++; symbols[numberOfAtoms-1] = g_strdup(mol->symbol[atomList->type]); masses[numberOfAtoms-1] = mol->masse[atomList->type]; tmpAtomList->type = atomList->type; tmpAtomList->eps = atomList->eps; tmpAtomList++; printf("n=%d k=%d\n",n,k); } atomList++;; } printf("numberofAtoms after rotation = %d\n",numberOfAtoms); tmpMol.numberOfAtoms = numberOfAtoms; tmpAtomList = tmpMol.listOfAtoms; tmpMol.numberOfDifferentKindsOfAtoms = 0; for(n=0; ntype = i; tmpAtomList++; } printf("Avant remove\n"); printAMolecule(&tmpMol); removeEquivAtoms(&tmpMol); printf("Apres remove\n"); printAMolecule(&tmpMol); copyAMolecule(mol, &tmpMol); printf("End copy molecule\n"); freeAMolecule(&tmpMol); printf("End freeMolecule\n"); if(symbols) { for(i=0; inumberOfAtoms; gdouble point[] = {0,0,0}; gdouble normal[] = {x,y,z}; tmpMol.numberOfAtoms=2*mol->numberOfAtoms; tmpMol.listOfAtoms = (MolSymAtom*)g_malloc(tmpMol.numberOfAtoms*sizeof(MolSymAtom)); tmpMol.symbol = (gchar**)g_malloc(tmpMol.numberOfAtoms*sizeof(gchar*)); tmpMol.numberOfAtomsOfEachType = (gint*)g_malloc(tmpMol.numberOfAtoms*sizeof(gint)); tmpMol.masse = (gdouble*)g_malloc(tmpMol.numberOfAtoms*sizeof(gdouble)); symbols = (gchar**)g_malloc(tmpMol.numberOfAtoms*sizeof(gchar*)); masses = (gdouble*)g_malloc(tmpMol.numberOfAtoms*sizeof(gdouble)); if (tmpMol.listOfAtoms == NULL) return -1; atomList = mol->listOfAtoms; tmpAtomList = tmpMol.listOfAtoms; /* copy molecule */ numberOfAtoms = 0; for (atomList = mol->listOfAtoms,n=0;nnumberOfAtoms;n++,atomList++) { numberOfAtoms++; tmpAtomList->position[0] = atomList->position[0]; tmpAtomList->position[1] = atomList->position[1]; tmpAtomList->position[2] = atomList->position[2]; tmpAtomList->type = atomList->type; tmpAtomList->eps = atomList->eps; symbols[numberOfAtoms-1] = g_strdup(mol->symbol[atomList->type]); masses[numberOfAtoms-1] = mol->masse[atomList->type]; tmpAtomList++; } for (atomList = mol->listOfAtoms,n=0;nnumberOfAtoms;n++,atomList++) { applyReflectionOneAtom(point, normal, atomList->position, tmpAtomList->position); numberOfAtoms++; symbols[numberOfAtoms-1] = g_strdup(mol->symbol[atomList->type]); masses[numberOfAtoms-1] = mol->masse[atomList->type]; tmpAtomList->type = atomList->type; tmpAtomList->eps = atomList->eps; tmpAtomList++; } tmpMol.numberOfAtoms = numberOfAtoms; tmpAtomList = tmpMol.listOfAtoms; tmpMol.numberOfDifferentKindsOfAtoms = 0; for(n=0; ntype = i; tmpAtomList++; } /* printf("Avant remove\n"); printAMolecule(&tmpMol);*/ removeEquivAtoms(&tmpMol); /* printf("Apres remove\n"); printAMolecule(&tmpMol);*/ copyAMolecule(mol, &tmpMol); freeAMolecule(&tmpMol); if(symbols) { for(i=0; inumberOfAtoms; gdouble point[] = {0,0,0}; gdouble axis[] = {x,y,z}; gint k; gdouble angle; tmpMol.numberOfAtoms=nax*mol->numberOfAtoms; tmpMol.listOfAtoms = (MolSymAtom*)g_malloc(tmpMol.numberOfAtoms*sizeof(MolSymAtom)); tmpMol.symbol = (gchar**)g_malloc(tmpMol.numberOfAtoms*sizeof(gchar*)); tmpMol.numberOfAtomsOfEachType = (gint*)g_malloc(tmpMol.numberOfAtoms*sizeof(gint)); tmpMol.masse = (gdouble*)g_malloc(tmpMol.numberOfAtoms*sizeof(gdouble)); symbols = (gchar**)g_malloc(tmpMol.numberOfAtoms*sizeof(gchar*)); masses = (gdouble*)g_malloc(tmpMol.numberOfAtoms*sizeof(gdouble)); if (tmpMol.listOfAtoms == NULL) return -1; atomList = mol->listOfAtoms; tmpAtomList = tmpMol.listOfAtoms; /* copy molecule */ numberOfAtoms = 0; for (n=0;nnumberOfAtoms;n++) { numberOfAtoms++; tmpAtomList->position[0] = atomList->position[0]; tmpAtomList->position[1] = atomList->position[1]; tmpAtomList->position[2] = atomList->position[2]; tmpAtomList->type = atomList->type; tmpAtomList->eps = atomList->eps; symbols[numberOfAtoms-1] = g_strdup(mol->symbol[atomList->type]); masses[numberOfAtoms-1] = mol->masse[atomList->type]; atomList++;; tmpAtomList++; } for ( atomList = mol->listOfAtoms, n=0;nnumberOfAtoms;n++,atomList++) { for(k=1;kposition, tmpAtomList->position); numberOfAtoms++; symbols[numberOfAtoms-1] = g_strdup(mol->symbol[atomList->type]); masses[numberOfAtoms-1] = mol->masse[atomList->type]; tmpAtomList->type = atomList->type; tmpAtomList->eps = atomList->eps; tmpAtomList++; } } tmpMol.numberOfAtoms = numberOfAtoms; tmpAtomList = tmpMol.listOfAtoms; tmpMol.numberOfDifferentKindsOfAtoms = 0; for(n=0; ntype = i; tmpAtomList++; } /* printf("Avant remove\n"); printAMolecule(&tmpMol);*/ removeEquivAtoms(&tmpMol); /* printf("Apres remove\n"); printAMolecule(&tmpMol);*/ copyAMolecule(mol, &tmpMol); freeAMolecule(&tmpMol); if(symbols) { for(i=0; inumberOfAtoms; gdouble point[] = {0,0,0}; gdouble axis[] = {x,y,z}; gint k; gdouble angle; tmpMol.numberOfAtoms=2*mol->numberOfAtoms; tmpMol.listOfAtoms = (MolSymAtom*)g_malloc(tmpMol.numberOfAtoms*sizeof(MolSymAtom)); tmpMol.symbol = (gchar**)g_malloc(tmpMol.numberOfAtoms*sizeof(gchar*)); tmpMol.numberOfAtomsOfEachType = (gint*)g_malloc(tmpMol.numberOfAtoms*sizeof(gint)); tmpMol.masse = (gdouble*)g_malloc(tmpMol.numberOfAtoms*sizeof(gdouble)); symbols = (gchar**)g_malloc(tmpMol.numberOfAtoms*sizeof(gchar*)); masses = (gdouble*)g_malloc(tmpMol.numberOfAtoms*sizeof(gdouble)); if (tmpMol.listOfAtoms == NULL) return -1; atomList = mol->listOfAtoms; tmpAtomList = tmpMol.listOfAtoms; // copy molecule numberOfAtoms = 0; for (n=0;nnumberOfAtoms;n++) { numberOfAtoms++; tmpAtomList->position[0] = atomList->position[0]; tmpAtomList->position[1] = atomList->position[1]; tmpAtomList->position[2] = atomList->position[2]; tmpAtomList->type = atomList->type; tmpAtomList->eps = atomList->eps; symbols[numberOfAtoms-1] = g_strdup(mol->symbol[atomList->type]); masses[numberOfAtoms-1] = mol->masse[atomList->type]; atomList++;; tmpAtomList++; } for ( atomList = mol->listOfAtoms, n=0;nnumberOfAtoms;n++,atomList++) { for(k=1;kposition, tmpAtomList->position); numberOfAtoms++; symbols[numberOfAtoms-1] = g_strdup(mol->symbol[atomList->type]); masses[numberOfAtoms-1] = mol->masse[atomList->type]; tmpAtomList->type = atomList->type; tmpAtomList->eps = atomList->eps; tmpAtomList++; } } tmpMol.numberOfAtoms = numberOfAtoms; tmpAtomList = tmpMol.listOfAtoms; tmpMol.numberOfDifferentKindsOfAtoms = 0; for(n=0; ntype = i; tmpAtomList++; } // printf("Avant remove\n"); printAMolecule(&tmpMol); removeEquivAtoms(&tmpMol); // printf("Apres remove\n"); printAMolecule(&tmpMol); copyAMolecule(mol, &tmpMol); freeAMolecule(&tmpMol); if(symbols) { for(i=0; i=3) { gint nax = atoi(&elements[i][1]); printf("nax = %d\n",nax); AddRotnZ(mol, nax); printf("end AddRotnZ\n"); } } } /************************************************************************************************************/ /* tetraedal symmetry */ void generateForTetraedalSymmetry(MolSymMolecule *mol,gint sym, gdouble axes[3][3]) { AddProperRotationMolecule(mol, 3, sqrt(8.)/3., 0.,-1./3.); AddProperRotationMolecule(mol, 3, 0, 0,1); if (sym & SYM_D) AddHalfSpaceMolecule(mol, -0.866025404, 0.5, 0.0); } /************************************************************************************************************/ /* octaedral symmetry */ void generateForOctaedralSymmetry(MolSymMolecule *mol,gint sym, gdouble axes[3][3]) { rotationAroundZAxisByPi(mol); AddHalfSpaceMolecule(mol, 0.0, -1.0, 0.0); AddHalfSpaceMolecule(mol, 0.577350269, 0.0, -0.816496581); AddHalfSpaceMolecule(mol, -0.816496581, 0.0, -0.577350269); } /************************************************************************************************************/ /* icosaedral symmetry */ void generateForIcosaedralSymmetry(MolSymMolecule *mol,gint sym, gdouble axes[3][3]) { AddProperRotationMolecule(mol, 5, C5X, 0, C5Z); AddHalfSpace(mol, POINT_INV); AddProperRotationMolecule(mol, 3, 0, 0, 1.0); AddHalfSpace(mol, POINT_INV); /* AddHalfSpaceMolecule(mol, -0.467086179481, -0.809016994375, +0.356822089773); AddHalfSpaceMolecule(mol, 0.0, +1.0, 0.0); */ } GabeditSrc250/src/Symmetry/SymmetryOperators.h0000644000175100017510000000402513130665226022016 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_SYMMETRYOPERATORS_H__ #define __GABEDIT_SYMMETRYOPERATORS_H__ gint compare2atoms(const void* av,const void* bv); gint checkequivalence2Molecules(MolSymAtom* a,MolSymAtom* b,gint n); gint determineOrderOfZAxis(MolSymMolecule* mol, gint maxf); gint rotateAroundZaxes(MolSymMolecule* mol, gint n); gint testRotationReflection(MolSymMolecule* mol, RotationReflectionOperator op); void rotateAroundZaxesToPlacePointOnXZPlane(MolSymMolecule* mol,MolSymMolecule* tmpMol,gdouble x,gdouble y); void rotateAroundXAxisToPlaceYAxisOntoZAxis(MolSymMolecule* mol); void rotateAroundYAxisToPlaceXAxisOntoZAxis(MolSymMolecule* mol); gint checkForVPlanesOrDAxis(MolSymMolecule* mol,gint n, gchar* message); #endif /* __GABEDIT_SYMMETRYOPERATORS_H__ */ GabeditSrc250/src/Symmetry/SMolecule.c0000644000175100017510000002163613130665226020160 0ustar alloucheallouche/* SMolecule.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "../Common/Global.h" #include "../Symmetry/SMolecule.h" /************************************************************************************************************/ static void addAtom(SMolecule* mol, SAtom* atom); static void addAtomsnmxyz(SMolecule* mol, gchar* symbol, gint number, gdouble mass, gdouble x, gdouble y, gdouble z); static GList* getAtoms(SMolecule* mol); static gint size(SMolecule* mol); static SAtom* get(SMolecule* mol, gint i); static gint indexOf(SMolecule* mol, SAtom* atom, gdouble tol); static SMolecule getCopy(SMolecule* mol); static void clear(SMolecule* mol); static void addSMolecule(SMolecule* mol, SMolecule* mol2); static void set(SMolecule* mol, gint i, SAtom* atom); static void setSymmetryUniqueAll(SMolecule* mol, gboolean u); static void setSymmetryUnique(SMolecule* mol, gint i, gboolean u); static gboolean contains(SMolecule* mol, SAtom* atom, gdouble tol); static void setMolecule(SMolecule* mol, gint nAtoms, gchar** symbols, gdouble* mass, gdouble* X, gdouble* Y, gdouble* Z); static gint getNumber(gchar* symbol); static void printSMolecule(SMolecule* mol); /************************************************************************************************************/ SMolecule newSMolecule() { SMolecule mol; mol.listOfAtoms = NULL; mol.nAtoms = 0; /* methods */ mol.addAtom = addAtom; mol.addAtomsnmxyz = addAtomsnmxyz; mol.getAtoms = getAtoms; mol.size = size; mol.get = get; mol.indexOf = indexOf; mol.getCopy = getCopy; mol.clear = clear; mol.free = clear; mol.addSMolecule = addSMolecule; mol.setMolecule = setMolecule; mol.set = set; mol.setSymmetryUniqueAll = setSymmetryUniqueAll; mol.setSymmetryUnique = setSymmetryUnique; mol.contains = contains; mol.print = printSMolecule; return mol; } /************************************************************************************************************/ SMolecule newSMoleculeSize(gint n) { SMolecule mol = newSMolecule(); gint i; for(i=0;ilistOfAtoms = g_list_append(mol->listOfAtoms, a); mol->nAtoms++; } /************************************************************************************************************/ static void addAtomsnmxyz(SMolecule* mol, gchar* symbol, gint number, gdouble mass, gdouble x, gdouble y, gdouble z) { SAtom* a = g_malloc(sizeof(SAtom)); *a = newSAtomxyz(symbol, number, mass, x, y, z); mol->listOfAtoms = g_list_append(mol->listOfAtoms, a); mol->nAtoms++; } /************************************************************************************************************/ static GList* getAtoms(SMolecule* mol) { return mol->listOfAtoms; } /************************************************************************************************************/ static gint size(SMolecule* mol) { return mol->nAtoms; } /************************************************************************************************************/ static SAtom* get(SMolecule* mol, gint i) { GList* l = NULL; gint j = 0; if(!mol) return NULL; for( l = mol->listOfAtoms; l != NULL; l = l->next, j++) if(j==i) return (SAtom*) l->data; return NULL; } /************************************************************************************************************/ static gint indexOf(SMolecule* mol, SAtom* atom, gdouble tol) { GList* l = NULL; gint j = 0; if(!mol) return -1; for( l = mol->listOfAtoms; l != NULL; l = l->next, j++) { SAtom* a = l->data; if(a->equals(a,atom,tol)) return j; } return -1; } /************************************************************************************************************/ static SMolecule getCopy(SMolecule* mol) { SMolecule nmol = newSMolecule(); GList* l = NULL; for( l = mol->listOfAtoms; l != NULL; l = l->next) nmol.addAtom(&nmol, (SAtom*) l->data); return nmol; } /************************************************************************************************************/ static void clear(SMolecule* mol) { GList* l = NULL; for( l = mol->listOfAtoms; l != NULL; l = l->next) if( l->data) g_free(l->data); g_list_free(mol->listOfAtoms); mol->listOfAtoms = NULL; mol->nAtoms = 0; } /************************************************************************************************************/ static void addSMolecule(SMolecule* mol, SMolecule* mol2) { GList* l = NULL; for( l = mol2->listOfAtoms; l != NULL; l = l->next) mol->addAtom(mol, (SAtom*) l->data); } /************************************************************************************************************/ static void setMolecule(SMolecule* mol, gint nAtoms, gchar** symbols, gdouble* mass, gdouble* X, gdouble* Y, gdouble* Z) { gint i; mol->clear(mol); for(i=0; ilistOfAtoms; l != NULL; l = l->next, j++) if(j==i) { *(SAtom*) l->data = *atom; return; } } /************************************************************************************************************/ static void setSymmetryUniqueAll(SMolecule* mol, gboolean u) { GList* l = NULL; for( l = mol->listOfAtoms; l != NULL; l = l->next) { SAtom* a= (SAtom*) l->data; a->setSymmetryUnique(a,u); } } /************************************************************************************************************/ static void setSymmetryUnique(SMolecule* mol, gint i, gboolean u) { GList* l = NULL; gint j = 0; for( l = mol->listOfAtoms; l != NULL; l = l->next, j++) if(j==i) { SAtom* a= (SAtom*) l->data; a->setSymmetryUnique(a,u); return; } } /************************************************************************************************************/ static gboolean contains(SMolecule* mol, SAtom* atom, gdouble tol) { GList* l = NULL; for( l = mol->listOfAtoms; l != NULL; l = l->next) { SAtom* a= (SAtom*) l->data; if(a->equals(a,atom,tol)) return TRUE; } return FALSE; } /************************************************************************************************************/ static void printSMolecule(SMolecule* mol) { GList* l = NULL; for( l = mol->listOfAtoms; l != NULL; l = l->next) { SAtom* a= (SAtom*) l->data; printf("%s %d %f %f %f %f\n",a->symbol, a->number, a->mass, a->position.x, a->position.y, a->position.z); } } GabeditSrc250/src/Symmetry/ReduceMolecule.h0000644000175100017510000000274713130665226021174 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_REDUCEMOLECULE_H__ #define __GABEDIT_REDUCEMOLECULE_H__ void reduceMoleculeToItsBasisSetOfAtoms (MolSymMolecule* mol, gint sym, gint nax); #endif /* __GABEDIT_REDUCEMOLECULE_H__ */ GabeditSrc250/src/Symmetry/SAtom.h0000644000175100017510000000430413130665226017311 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_SATOM_H__ #define __GABEDIT_SATOM_H__ #include "../Utils/Point3D.h" typedef struct _SAtom SAtom; struct _SAtom { Point3D position; gint number; gdouble mass; gchar symbol[10]; gboolean isSymmetryUnique; gchar str[1024]; /* methods */ gchar* (*getSymbol) (SAtom* atom); gint (*getNumber) (SAtom* atom); gdouble (*getMass)(SAtom* atom); Point3D (*getPosition)(SAtom* atom); void (*setPosition)(SAtom* atom, Point3D* newPos); void (*setSymmetryUnique)(SAtom* atom, gboolean isUnique); SAtom (*findClosestAtom)(SAtom* atom, GList* closeAtoms); gdouble (*distance)(SAtom* atom, SAtom* other); gchar* (*toString)(SAtom* atom); gboolean (*equals)(SAtom* atom1, SAtom* atom2, gdouble tol); }; SAtom newSAtom(); SAtom newSAtomxyz(gchar* symbol, gint number, gdouble mass, gdouble x, gdouble y, gdouble z); SAtom newSAtomsnm(gchar* symbol, gint number, gdouble mass); #endif /* __GABEDIT_SATOM_H__ */ GabeditSrc250/src/Symmetry/SMolecule.h0000644000175100017510000000475413130665226020167 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_SMOLECULE_H__ #define __GABEDIT_SMOLECULE_H__ #include "../Utils/Point3D.h" #include "../Symmetry/SAtom.h" typedef struct _SMolecule SMolecule; struct _SMolecule { GList* listOfAtoms; gint nAtoms; /* methods */ void (*addAtom) (SMolecule* mol, SAtom* atom); void (*addAtomsnmxyz) (SMolecule* mol, gchar* symbol, gint number, gdouble mass, gdouble x, gdouble y, gdouble z); GList* (*getAtoms) (SMolecule* mol); gint (*size) (SMolecule* mol); SAtom* (*get) (SMolecule* mol, gint i); SMolecule (*getCopy) (SMolecule* mol); void (*clear) (SMolecule* mol); void (*free) (SMolecule* mol); void (*addSMolecule) (SMolecule* mol, SMolecule* mol2); void (*setMolecule)(SMolecule* mol, gint nAtoms, gchar** symbols, gdouble* mass, gdouble* X, gdouble* Y, gdouble* Z); void (*set) (SMolecule* mol, gint i, SAtom* atom); void (*setSymmetryUniqueAll)(SMolecule* mol, gboolean u); void (*setSymmetryUnique)(SMolecule* mol, gint i, gboolean u); gboolean (*contains)(SMolecule* mol, SAtom* atom, gdouble tol); gint (*indexOf)(SMolecule* mol, SAtom* atom, gdouble tol); void (*print)(SMolecule* mol); }; SMolecule newSMolecule(); SMolecule newSMoleculeSize(gint n); #endif /* __GABEDIT_SMOLECULE_H__ */ GabeditSrc250/src/Symmetry/PointGroup.c0000644000175100017510000010125613130665226020373 0ustar alloucheallouche/* PointGroup.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ /* reference : Largent, RJ, Polik, WF, Schmidt, JR, J. Comput Chem. 33 (2012) 1637-1642 */ #include "../../Config.h" #include #include "../Common/Global.h" #include "../Symmetry/PointGroup.h" /************************************************************************************************************/ static gchar* getName(PointGroup* pointGroup); static gchar* toString(PointGroup* pointGroup); static gboolean isCubic(PointGroup* pointGroup); static gdouble uniquenessThreshold(PointGroup* pointGroup, gdouble tolerance); static void findUniqueAtoms(PointGroup* pointGroup, gdouble tolerance); static SMolecule getUniqueAtoms(PointGroup* pointGroup, gdouble tolerance); static SMolecule getMolecule(PointGroup* pointGroup); static Elements getElements(PointGroup* pointGroup); static void setDistance(PointGroup* pointGroup, gdouble distance); static void setNumExtraElements(PointGroup* pointGroup, gint extra); static void setNumMissingElements( PointGroup* pointGroup, gint missing); static gdouble getDistance(PointGroup* pointGroup); static gint getNumExtraElements(PointGroup* pointGroup); static gint getNumMissingElements(PointGroup* pointGroup); static void adjustUniqueAtomsToElements(PointGroup* pointGroup, gdouble tolerance); static SMolecule createSymmetrizedMolecule(PointGroup* pointGroup, gdouble tolerance); static Elements symmetrizeIcosahedralElements(PointGroup* pointGroup, Element* primaryRotation, gboolean isIh); static Elements symmetrizeOctahedralElements(PointGroup* pointGroup, Element* primaryRotation, gboolean isOh); static Elements symmetrizeTetrahedralElements(PointGroup* pointGroup, Element* primaryRotation, gint numRefs); static SMolecule symmetrizeMolecule(PointGroup* pointGroup, gdouble tolerance); static gchar** getListOfGroups(PointGroup* pointGroup); static void freePointGroup(PointGroup* pointGroup); /************************************************************************************************************/ PointGroup newPointGroupDefault() { PointGroup pointGroup; pointGroup.symmetrizeTolerance = 0.15; pointGroup.molecule = newSMolecule(); pointGroup.uniqueMolecule = newSMolecule(); sprintf(pointGroup.name,"C1"); pointGroup.elements = newElements(); pointGroup.distance = -1.0; pointGroup.isCubicGroup = FALSE; pointGroup.numExtraElements = 0; pointGroup.numMissingElements = 0; /* methods */ pointGroup.getName = getName; pointGroup.toString = toString; pointGroup.isCubic = isCubic; pointGroup.findUniqueAtoms = findUniqueAtoms; pointGroup.getUniqueAtoms = getUniqueAtoms; pointGroup.getMolecule = getMolecule; pointGroup.getElements = getElements; pointGroup.setDistance = setDistance; pointGroup.setNumExtraElements = setNumExtraElements; pointGroup.setNumMissingElements = setNumMissingElements; pointGroup.getDistance = getDistance; pointGroup.getNumExtraElements = getNumExtraElements; pointGroup.getNumMissingElements = getNumMissingElements; pointGroup.adjustUniqueAtomsToElements = adjustUniqueAtomsToElements; pointGroup.createSymmetrizedMolecule = createSymmetrizedMolecule; pointGroup.symmetrizeMolecule = symmetrizeMolecule; pointGroup.getListOfGroups = getListOfGroups; pointGroup.clear = freePointGroup; pointGroup.free = freePointGroup; return pointGroup; } /************************************************************************************************************/ PointGroup newPointGroup(Elements* elements, SMolecule* mol, gchar* groupName) { PointGroup pointGroup = newPointGroupDefault(); if(mol) pointGroup.molecule = mol->getCopy(mol); if(elements) pointGroup.elements = elements->getCopy(elements); sprintf(pointGroup.name,"%s", groupName); pointGroup.isCubicGroup = isCubic(&pointGroup); return pointGroup; } /************************************************************************************************************/ static gchar* getName(PointGroup* pointGroup) { return pointGroup->name; } /************************************************************************************************************/ static gchar* toString(PointGroup* pointGroup) { return pointGroup->name; } /************************************************************************************************************/ static gboolean isCubic(PointGroup* pointGroup) { if(!strcmp(pointGroup->name,"Th")) return TRUE; if(!strcmp(pointGroup->name,"T")) return TRUE; if(!strcmp(pointGroup->name,"Td")) return TRUE; if(!strcmp(pointGroup->name,"O")) return TRUE; if(!strcmp(pointGroup->name,"Oh")) return TRUE; if(!strcmp(pointGroup->name,"I")) return TRUE; if(!strcmp(pointGroup->name,"Ih")) return TRUE; return FALSE; } /************************************************************************************************************/ static gdouble uniquenessThreshold(PointGroup* pointGroup, gdouble tolerance) { if(pointGroup->elements.size(&pointGroup->elements)>0 ) { Element e = pointGroup->elements.get(&pointGroup->elements,0); if(e.ERROR > tolerance*2.0) return e.ERROR; } return tolerance*2.0; } /************************************************************************************************************/ static void findUniqueAtoms(PointGroup* pointGroup, gdouble tolerance) { gint i,j; pointGroup->uniqueMolecule = newSMolecule(); SMolecule generatedAtoms = newSMolecule(); SMolecule* mol = &pointGroup->molecule; SMolecule* gmol = &generatedAtoms; Elements* els = &pointGroup->elements; GList* listOfElements = els->getElements(els); GList* l; gint n; GList* listOfAtoms = mol->getAtoms(mol); gint atomsFinishedGenerating = 0; mol->setSymmetryUniqueAll(mol, TRUE); mol->setSymmetryUnique(mol,0,TRUE); for(i=0; isize(mol); i++) { SAtom* a = mol->get(mol,i); if(a->isSymmetryUnique) { gmol->addAtom(gmol, a); for(j= atomsFinishedGenerating; jsize(gmol); j++) { for(l = listOfElements; l != NULL; l = l->next) { Element* elem = (Element*) l->data; SAtom* b = gmol->get(gmol,j); SAtom startAtom = elem->doOperationSAtom(elem, b); for(n=0; ngetDegree(elem); n++) { SAtom closestAtom = startAtom.findClosestAtom(&startAtom, listOfAtoms); if(startAtom.distance(&startAtom, &closestAtom) < uniquenessThreshold(pointGroup,tolerance) && !gmol->contains(gmol, &closestAtom, tolerance) && (n ==0 || mol->indexOf(mol,&closestAtom, tolerance/1000) != mol->indexOf(mol,&startAtom, tolerance/1000)) ) { gint index = mol->indexOf(mol,&closestAtom, tolerance); closestAtom.setSymmetryUnique(&closestAtom,FALSE); gmol->addAtom(gmol,&closestAtom); mol->set(mol,index,&closestAtom); } startAtom = closestAtom; } } atomsFinishedGenerating++; } } } for(i=0; isize(gmol); i++) { SAtom* a = gmol->get(gmol,i); if(a->isSymmetryUnique) { pointGroup->uniqueMolecule.addAtom(&pointGroup->uniqueMolecule, a); } } } /************************************************************************************************************/ static SMolecule getUniqueAtoms(PointGroup* pointGroup, gdouble tolerance) { SMolecule* mol = &pointGroup->uniqueMolecule; if(mol->size(mol)<1) pointGroup->findUniqueAtoms(pointGroup, tolerance); return mol->getCopy(&pointGroup->uniqueMolecule); } /************************************************************************************************************/ static SMolecule getMolecule(PointGroup* pointGroup) { SMolecule* mol = &pointGroup->molecule; return mol->getCopy(mol); } /************************************************************************************************************/ static Elements getElements(PointGroup* pointGroup) { Elements* els = &pointGroup->elements; return els->getCopy(els); } /************************************************************************************************************/ static void setDistance(PointGroup* pointGroup, gdouble distance) { pointGroup->distance = distance; } /************************************************************************************************************/ static void setNumExtraElements(PointGroup* pointGroup, gint extra) { pointGroup->numExtraElements = extra; } /************************************************************************************************************/ static void setNumMissingElements( PointGroup* pointGroup, gint missing) { pointGroup->numMissingElements = missing; } /************************************************************************************************************/ static gdouble getDistance(PointGroup* pointGroup) { return pointGroup->distance; } /************************************************************************************************************/ static gint getNumExtraElements(PointGroup* pointGroup) { return pointGroup->numExtraElements; } /************************************************************************************************************/ static gint getNumMissingElements( PointGroup* pointGroup) { return pointGroup->numMissingElements; } /************************************************************************************************************/ static void adjustUniqueAtomsToElements(PointGroup* pointGroup, gdouble tolerance) { SMolecule* umol = &pointGroup->uniqueMolecule; Elements* els = &pointGroup->elements; GList* listOfElements = els->getElements(els); GList* l; gint i; for(i=0; isize(umol); i++) { SAtom* atom = umol->get(umol,i); for(l = listOfElements; l != NULL; l = l->next) { Element* elem = (Element*) l->data; if(elem->type==ROTATION) { Point3D atomPos = atom->getPosition(atom); elem->getPoint(elem); elem->getAxis(elem); Point3D closestPoint = newPoint3D(); closestPoint = closestPoint.closestPointOnAxis(&atomPos, elem->getPoint(elem), elem->getAxis(elem)); if(atomPos.distance(&atomPos, &closestPoint) < uniquenessThreshold(pointGroup, tolerance)) atom->setPosition(atom, &closestPoint); } else if(elem->type==REFLECTION) { Point3D atomPos = atom->getPosition(atom); Point3D closestPoint = newPoint3D(); closestPoint = closestPoint.closestPointInPlane(&atomPos, elem->getPoint(elem), elem->getNormal(elem)); if(atomPos.distance(&atomPos, &closestPoint) < uniquenessThreshold(pointGroup, tolerance)) atom->setPosition(atom, &closestPoint); } else if(elem->type == INVERSION) { Point3D atomPos = atom->getPosition(atom); if(atomPos.distance(&atomPos, elem->getPoint(elem)) < uniquenessThreshold(pointGroup, tolerance)) atom->setPosition(atom, elem->getPoint(elem)); } } } } /************************************************************************************************************/ static SMolecule createSymmetrizedMolecule(PointGroup* pointGroup, gdouble tolerance) { gint i; SMolecule* mol = &pointGroup->molecule; SMolecule newMolecule = newSMolecule(mol->size(mol)); SMolecule* umol = &pointGroup->uniqueMolecule; Elements* els = &pointGroup->elements; GList* listOfElements = els->getElements(els); GList* l; GList* listOfAtoms = mol->getAtoms(mol); HashMapSAtoms orderMap = newHashMapSAtoms(); SMolecule finalMolecule = newSMolecule(); newMolecule.addSMolecule(&newMolecule, &pointGroup->uniqueMolecule); for(i=0; isize(umol); i++) { SAtom* atom = umol->get(umol,i); orderMap.put(&orderMap, mol->indexOf(mol,atom, 2*tolerance), atom); } for(l = listOfElements; l != NULL; l = l->next) { Element* elem = (Element*) l->data; for(i=0; igetDegree(elem); gint n; if(degree > 1) degree--; for(n=0; ndoOperationSAtom(elem,&atom); GList* listOfNewAtoms = newMolecule.getAtoms(&newMolecule); SAtom closestAtom = newAtom.findClosestAtom(&newAtom, listOfNewAtoms); if(newAtom.distance(&newAtom, &closestAtom) > 2*elem->ERROR) { SAtom closestOriginalAtom = newAtom.findClosestAtom(&newAtom, listOfAtoms); gint index; newAtom.setSymmetryUnique(&newAtom, FALSE); newMolecule.addAtom(&newMolecule, &newAtom); index = mol->indexOf(mol,&closestOriginalAtom, 2*tolerance); orderMap.put(&orderMap, index, &newAtom); } atom = newAtom; if(newMolecule.size(&newMolecule)>=mol->size(mol)) break; } } if(newMolecule.size(&newMolecule)>=mol->size(mol)) break; } finalMolecule = newSMolecule(); for(i=0; isize(mol)) { printf("Error : the number of generated atoms does not match the initial molecule\n"); } return finalMolecule; } /************************************************************************************************************/ static Elements symmetrizeIcosahedralElements(PointGroup* pointGroup, Element* primaryRotation, gboolean isIh) { Elements symmetrizedElements = newElements(); Point3D* center = primaryRotation->getPoint(primaryRotation); Point3D t = newPoint3Dxyz(0, 0, 1); Point3D* paxis = primaryRotation->getAxis(primaryRotation); Point3D rotAxis = t.crossProd(&t,paxis); gdouble overallAngle = M_PI / 10; gdouble vertexAngle = (63.4349488 / 180) * M_PI; gdouble faceAngle = (M_PI - vertexAngle) / 2; gdouble c3Angle = (20.905157439 / 180) * M_PI; Elements* els = &pointGroup->elements; GList* listOfElements = els->getElements(els); GList* l; gint i; Point3D O = newPoint3D(); for(l = listOfElements; l != NULL; l = l->next) { Element* elem = (Element*) l->data; Element* firstRot = elem; if(elem->type==ROTATION) { Point3D* axis = firstRot->getAxis(firstRot); gdouble dotprod = axis->dotProd(axis, paxis); if(fabs(cos(vertexAngle) - dotprod) < 0.1 && firstRot->getDegree(firstRot) == 5) rotAxis = axis->crossProd(axis, paxis); } } rotAxis.unit(&rotAxis); symmetrizedElements.addElementRotation(&symmetrizedElements, center, paxis, 5); if(isIh) { symmetrizedElements.addElementImproperRotation(&symmetrizedElements, center, paxis, 10); } for(i=0; igetDegree(primaryRotation)*2; i++) { if(i % 4 == 0) { Point3D newAxis = paxis->rotate(paxis, &O , &rotAxis, faceAngle + c3Angle); symmetrizedElements.addElementRotation(&symmetrizedElements,center, &newAxis, 3); if(isIh) symmetrizedElements.addElementImproperRotation(&symmetrizedElements, center, &newAxis, 6); newAxis = paxis->rotate(paxis, &O , &rotAxis, faceAngle); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 2); if(isIh) symmetrizedElements.addElementReflection(&symmetrizedElements,center, &newAxis); newAxis = paxis->rotate(paxis, &O , &rotAxis, faceAngle + c3Angle); symmetrizedElements.addElementRotation(&symmetrizedElements,center, &newAxis, 3); if(isIh) symmetrizedElements.addElementImproperRotation(&symmetrizedElements, center, &newAxis, 6); newAxis = paxis->rotate(paxis, &O , &rotAxis, 2*faceAngle); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 5); if(isIh) symmetrizedElements.addElementImproperRotation(&symmetrizedElements, center, &newAxis, 10); newAxis = paxis->rotate(paxis, &O , &rotAxis, 2*faceAngle + vertexAngle / 2); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 2); if(isIh) symmetrizedElements.addElementReflection(&symmetrizedElements,center, &newAxis); } else if(i % 4 == 2) { Point3D newAxis = paxis->rotate(paxis, &O , &rotAxis, vertexAngle / 2); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 2); if(isIh) symmetrizedElements.addElementReflection(&symmetrizedElements,center, &newAxis); newAxis = paxis->rotate(paxis, &O , &rotAxis, vertexAngle); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 5); if(isIh) symmetrizedElements.addElementImproperRotation(&symmetrizedElements, center, &newAxis, 10); newAxis = paxis->rotate(paxis, &O , &rotAxis, vertexAngle + faceAngle - c3Angle); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 3); if(isIh) symmetrizedElements.addElementImproperRotation(&symmetrizedElements, center, &newAxis, 6); newAxis = paxis->rotate(paxis, &O , &rotAxis, vertexAngle + faceAngle); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 2); if(isIh) symmetrizedElements.addElementReflection(&symmetrizedElements,center, &newAxis); newAxis = paxis->rotate(paxis, &O , &rotAxis, vertexAngle + faceAngle + c3Angle); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 3); if(isIh) symmetrizedElements.addElementImproperRotation(&symmetrizedElements, center, &newAxis, 6); } else { Point3D newAxis = paxis->rotate(paxis, &O , &rotAxis, M_PI / 2); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 2); if(isIh) symmetrizedElements.addElementReflection(&symmetrizedElements,center, &newAxis); } rotAxis = rotAxis.rotate(&rotAxis, &O, paxis, overallAngle); } symmetrizedElements.addElementInversion(&symmetrizedElements, center); return symmetrizedElements; } /************************************************************************************************************/ static Elements symmetrizeOctahedralElements(PointGroup* pointGroup, Element* primaryRotation, gboolean isOh) { Elements symmetrizedElements = newElements(); Point3D* center = primaryRotation->getPoint(primaryRotation); Point3D t = newPoint3Dxyz(0, 0, 1); Point3D* paxis = primaryRotation->getAxis(primaryRotation); Point3D rotAxis = t.crossProd(&t,paxis); gdouble overallAngle = M_PI / 4; Elements* els = &pointGroup->elements; GList* listOfElements = els->getElements(els); GList* l; gint i; Point3D O = newPoint3D(); for(l = listOfElements; l != NULL; l = l->next) { Element* elem = (Element*) l->data; Element* firstRot = elem; if(elem->type==ROTATION) { Point3D* axis = firstRot->getAxis(firstRot); gdouble dotprod = axis->dotProd(axis, paxis); if(dotprod>0.1 && dotprod < 0.9 && firstRot->getDegree(firstRot) == 2) rotAxis = axis->crossProd(axis, paxis); } } rotAxis.unit(&rotAxis); symmetrizedElements.addElementRotation(&symmetrizedElements, center, paxis, 2); if(isOh) { symmetrizedElements.addElementImproperRotation(&symmetrizedElements, center, paxis, 4); symmetrizedElements.addElementReflection(&symmetrizedElements, center, paxis); } for(i=0; igetDegree(primaryRotation)*2; i++) { if(i % 2 == 0) { gdouble rotAngle = M_PI / 4; Point3D newAxis = paxis->rotate(paxis, &O , &rotAxis, M_PI / 2); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 2); if(isOh) symmetrizedElements.addElementReflection(&symmetrizedElements, center, &newAxis); newAxis = paxis->rotate(paxis, &O , &rotAxis, 2*rotAngle); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 2); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 4); if(isOh) { symmetrizedElements.addElementImproperRotation(&symmetrizedElements, center, &newAxis, 4); symmetrizedElements.addElementReflection(&symmetrizedElements, center, &newAxis); } newAxis = paxis->rotate(paxis, &O , &rotAxis, 3*rotAngle); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 2); if(isOh) symmetrizedElements.addElementReflection(&symmetrizedElements, center, &newAxis); } else { gdouble rotAngleC3 = (109.47122064 / 180) * M_PI / 2; gdouble rotAngleC2 = M_PI / 2; gdouble rotAngle2C3 = ((90 + (90 - 109.47122064 / 2) )/ 180) * M_PI; Point3D newAxis = paxis->rotate(paxis, &O , &rotAxis, rotAngleC3); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 3); if(isOh) symmetrizedElements.addElementImproperRotation(&symmetrizedElements, center, &newAxis, 6); newAxis = paxis->rotate(paxis, &O , &rotAxis, rotAngleC2); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 2); if(isOh) symmetrizedElements.addElementReflection(&symmetrizedElements, center, &newAxis); newAxis = paxis->rotate(paxis, &O , &rotAxis, rotAngle2C3); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 3); if(isOh) symmetrizedElements.addElementImproperRotation(&symmetrizedElements, center, &newAxis, 6); } rotAxis = rotAxis.rotate(&rotAxis, &O, paxis, overallAngle); } symmetrizedElements.addElementInversion(&symmetrizedElements, center); return symmetrizedElements; } /************************************************************************************************************/ static Elements symmetrizeTetrahedralElements(PointGroup* pointGroup, Element* pRot, gint numRefs) { Elements symmetrizedElements = newElements(); Element* primaryRotation = NULL; copyElement(pRot,&primaryRotation); Point3D* center = primaryRotation->getPoint(primaryRotation); Point3D t = newPoint3Dxyz(0, 0, 1); Point3D* paxis = primaryRotation->getAxis(primaryRotation); Point3D rotAxis = t.crossProd(&t,paxis); GList* c3s = NULL; GList* c3si; GList* c3sj; gdouble overallAngle = M_PI / 4; Elements* els = &pointGroup->elements; GList* listOfElements = els->getElements(els); GList* l; gint i; Point3D O = newPoint3D(); Point3D* p; for(l = listOfElements; l != NULL; l = l->next) { Element* elem = (Element*) l->data; Element* firstRot = elem; if(elem->type==ROTATION) { if(firstRot->getDegree(firstRot) == 2) { Point3D* axis = firstRot->getAxis(firstRot); gdouble dotprod = axis->dotProd(axis, paxis); if(primaryRotation->getDegree(primaryRotation) == 3) { copyElement(firstRot, &primaryRotation); } else if(fabs(dotprod)<0.1) { paxis = primaryRotation->getAxis(primaryRotation); rotAxis = axis->crossProd(axis, paxis); break; } } } } rotAxis.unit(&rotAxis); symmetrizedElements.addElementRotation(&symmetrizedElements, center, paxis, 2); if(numRefs == 6) symmetrizedElements.addElementImproperRotation(&symmetrizedElements, center, paxis, 4); for(i=0; igetDegree(primaryRotation)*2; i++) { if(i % 2 == 0) { gdouble rotAngle = M_PI / 2; Point3D newAxis = paxis->rotate(paxis, &O , &rotAxis, rotAngle); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 2); if(numRefs == 3) symmetrizedElements.addElementReflection(&symmetrizedElements, center, &newAxis); else if(numRefs == 6) symmetrizedElements.addElementImproperRotation(&symmetrizedElements, center, &newAxis, 4); } else { gdouble rotC3Angle2 = (125.2643896827 / 180) * M_PI; gdouble rotC3Angle1 = M_PI / 2 - (rotC3Angle2 - M_PI / 2); Point3D newAxis = paxis->rotate(paxis, &O , &rotAxis, rotC3Angle1); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 3); if(numRefs == 3) symmetrizedElements.addElementImproperRotation(&symmetrizedElements, center, &newAxis, 6); p = g_malloc(sizeof(Point3D)); *p = newAxis; c3s = g_list_append(c3s,p); newAxis = paxis->rotate(paxis, &O , &rotAxis, rotC3Angle2); symmetrizedElements.addElementRotation(&symmetrizedElements, center, &newAxis, 3); if(numRefs == 3) symmetrizedElements.addElementImproperRotation(&symmetrizedElements, center, &newAxis, 6); p = g_malloc(sizeof(Point3D)); *p = newAxis; c3s = g_list_append(c3s,p); } rotAxis = rotAxis.rotate(&rotAxis, &O, paxis, overallAngle); } if(numRefs == 3) symmetrizedElements.addElementInversion(&symmetrizedElements, center); else if(numRefs == 6) { gint i,j; for( i=0, c3si = c3s; c3si != NULL; c3si = c3si->next, i++) for( j=0, c3sj = c3s; c3sj != NULL; c3sj = c3sj->next, j++) if(j>=i) { Point3D* pi = (Point3D*)(c3si->data); Point3D* pj = (Point3D*)(c3sj->data); Point3D cp = pi->crossProd(pi,pj); Element ref = newElementReflection(center, &cp); Point3D* normal = ref.getNormal(&ref); if(!normal->equals(normal, &O)) symmetrizedElements.addElement(&symmetrizedElements, &ref); } } for( c3si = c3s; c3si != NULL; c3si = c3si->next) if( c3si->data) g_free(c3si->data); g_list_free(c3s); return symmetrizedElements; } /************************************************************************************************************/ static SMolecule symmetrizeMolecule(PointGroup* pointGroup, gdouble tolerance) { Elements oldElements = pointGroup->elements.getCopy(&pointGroup->elements); Elements idealElements = newElements(); GList* l; gint i; SMolecule* mol = &pointGroup->molecule; Element startElement; gchar* name = pointGroup->getName(pointGroup); pointGroup->isCubicGroup = isCubic(pointGroup); if(pointGroup->elements.size(&pointGroup->elements) == 0) return *mol; startElement = pointGroup->elements.get(&pointGroup->elements,0); for(l = pointGroup->elements.getElements(&pointGroup->elements) ; l != NULL; l = l->next) { Element* elem = (Element*) l->data; if(elem->getDegree(elem)> startElement.getDegree(&startElement)) if(!pointGroup->isCubicGroup || elem->type==ROTATION) startElement = *elem; } idealElements.addElement(&idealElements, &startElement); oldElements.remove(&oldElements, &startElement); if(!strcmp(name,"T") || !strcmp(name,"Th") || !strcmp(name,"Td")) { gint numReflections = 0; if(!strcmp(name,"Th")) numReflections = 3; if(!strcmp(name,"Td")) numReflections = 6; idealElements.clear(&idealElements); idealElements = symmetrizeTetrahedralElements(pointGroup, &startElement, numReflections); oldElements.clear(&oldElements); } else if(!strcmp(name,"O") || !strcmp(name,"Oh")) { idealElements.clear(&idealElements); idealElements = symmetrizeOctahedralElements(pointGroup, &startElement, !strcmp(name,"Oh")); oldElements.clear(&oldElements); } else if(!strcmp(name,"I") || !strcmp(name,"Ih")) { idealElements.clear(&idealElements); idealElements = symmetrizeIcosahedralElements(pointGroup, &startElement, !strcmp(name,"Ih")); oldElements.clear(&oldElements); } else if(strstr(name,"inf")) { idealElements.clear(&idealElements); idealElements = pointGroup->elements.getCopy(&pointGroup->elements); oldElements.clear(&oldElements); } else { if(startElement.getDegree(&startElement) > 1) { Point3D* rotAxis = NULL; Point3D* refAxis = NULL; Element* primaryRotation = &startElement; Point3D* center = primaryRotation->getPoint(primaryRotation); gdouble maxAngle = (2 * M_PI / primaryRotation->getDegree(primaryRotation)); if(primaryRotation->type==ROTATION) maxAngle /= 2; for(i=0;i< oldElements.size(&oldElements); i++) { Element e = oldElements.get(&oldElements, i); Element* elem = &e; if(elem->type==INVERSION) { idealElements.addElementInversion(&idealElements, center); oldElements.remove(&oldElements, elem); i--; } else { Point3D* currentAxis = NULL; Point3D* otherAxis = NULL; Point3D* newAxis = NULL; gdouble dotprod = 0; if(elem->type==ROTATION || elem->type==IMPROPERROTATION) { newAxis = elem->getAxis(elem); Point3D* paxis = primaryRotation->getAxis(primaryRotation); dotprod = newAxis->dotProd(newAxis, paxis); currentAxis = rotAxis; otherAxis = refAxis; } else if(elem->type==REFLECTION) { newAxis = elem->getNormal(elem); Point3D* paxis = primaryRotation->getAxis(primaryRotation); dotprod = newAxis->dotProd(newAxis, paxis); currentAxis = refAxis; otherAxis = rotAxis; } if(fabs(1.0 - fabs(dotprod)) < pointGroup->symmetrizeTolerance) { Point3D* paxis = primaryRotation->getAxis(primaryRotation); if(elem->type==ROTATION) idealElements.addElementRotation(&idealElements, center, paxis, elem->getDegree(elem)); else if(elem->type==IMPROPERROTATION) idealElements.addElementImproperRotation(&idealElements, center, paxis, elem->getDegree(elem)); else if(elem->type==REFLECTION) idealElements.addElementReflection(&idealElements, center, paxis); oldElements.remove(&oldElements, elem); i--; } else if(fabs(dotprod) < pointGroup->symmetrizeTolerance) { if(currentAxis == NULL) { currentAxis = newAxis->copy(newAxis); Point3D* paxis = primaryRotation->getAxis(primaryRotation); Point3D rotPoint = center->add(center,currentAxis); gdouble angle = M_PI / 2 - currentAxis->angleBetween(currentAxis, paxis); Point3D cp = currentAxis->crossProd(currentAxis, paxis); rotPoint = rotPoint.rotate(&rotPoint, center, &cp, -angle); currentAxis = currentAxis->copyPoint(rotPoint.sub(&rotPoint, center)); if(otherAxis != NULL) { gdouble currentAngle = currentAxis->angleBetween(currentAxis, otherAxis); gdouble correctAngle = (gint)(0.5+currentAngle/(maxAngle/2))*(maxAngle/2); gdouble angleOffset = correctAngle - currentAngle; rotPoint = center->add(center,currentAxis); rotPoint = rotPoint.rotate(&rotPoint, center, paxis, angleOffset); currentAxis = currentAxis->copyPoint(rotPoint.sub(&rotPoint, center)); } } else { Point3D* paxis = primaryRotation->getAxis(primaryRotation); Point3D caxis = *currentAxis; caxis = caxis.add(&caxis, center); caxis = caxis.rotate(&caxis, center, paxis, maxAngle); caxis = caxis.sub(&caxis, center); if(currentAxis) g_free(currentAxis); currentAxis = currentAxis->copy(&caxis); } if(elem->type==ROTATION) { idealElements.addElementRotation(&idealElements, center, currentAxis, elem->getDegree(elem)); rotAxis = currentAxis; refAxis = otherAxis; } else if(elem->type==IMPROPERROTATION) { idealElements.addElementImproperRotation(&idealElements, center, currentAxis, elem->getDegree(elem)); rotAxis = currentAxis; refAxis = otherAxis; } if(elem->type==REFLECTION) { idealElements.addElementReflection(&idealElements, center, currentAxis); refAxis = currentAxis; rotAxis = otherAxis; } oldElements.remove(&oldElements, elem); i--; } } } } } idealElements.print(&idealElements); pointGroup->elements.clear(&pointGroup->elements); pointGroup->elements = idealElements.getCopy(&idealElements); pointGroup->findUniqueAtoms(pointGroup, tolerance); pointGroup->adjustUniqueAtomsToElements(pointGroup,tolerance); SMolecule symMol = createSymmetrizedMolecule(pointGroup, tolerance); return symMol; } /************************************************************************************************************/ static gchar** getListOfGroups(PointGroup* pointGroup) { static gchar* list[] = { "C1" ,"Cs" ,"Ci" ,"C2" ,"C3" ,"C4" ,"C5" ,"C6" ,"C7" ,"C8" ,"D2" ,"D3" ,"D4" ,"D5" ,"D6" ,"C2v" ,"C3v", "C4v" ,"C5v" ,"C6v" ,"D2d" ,"D3d" ,"D4d" ,"D5d" ,"D6d" ,"C2h" ,"C3h" ,"C4h" ,"C5h" ,"C6h" ,"D2h" ,"D3h", "D4h" ,"D5h" ,"D6h" ,"S4" ,"S6" ,"S8" ,"T" ,"Th" ,"Td" ,"O" ,"Oh" ,"I" ,"Ih" ,"Cinfv" ,"Dinfh", NULL }; return list; } /************************************************************************************************************/ static void freePointGroup(PointGroup* pointGroup) { pointGroup->molecule.free(&pointGroup->molecule); pointGroup->uniqueMolecule.free(&pointGroup->uniqueMolecule); pointGroup->elements.free(&pointGroup->elements); } GabeditSrc250/src/Symmetry/Makefile0000644000175100017510000000121213130664665017556 0ustar allouchealloucheOBJECTS = MoleculeSymmetry.o MoleculeSymmetryInterface.o PolyHedralOperators.o ReducePolyHedralMolecule.o PrincipalAxis.o ReduceMolecule.o SymmetryOperators.o GenerateMolecule.o Element.o SAtom.o SMolecule.o Elements.o SOperation.o SOperations.o HashMapSAtoms.o PointGroup.o PointGroups.o Symmetry.o include ../../CONFIG CFLAGS = $(COMMONCFLAGS) $(GTKCFLAGS) all: compiling %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.chk p *o gabedit *.com *.out *.log *.test test* *.cpp *old *.ps .*swp *~ #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/src/Symmetry/Elements.h0000644000175100017510000000511713130665226020045 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_ELEMENTS_H__ #define __GABEDIT_ELEMENTS_H__ #include "../Utils/Point3D.h" #include "../Symmetry/Element.h" typedef struct _Elements Elements; struct _Elements { GList* listOfElements; gint nElements; /* methods */ void (*addElement) (Elements* elements, Element* element); void (*addElementRotation) (Elements* elements, Point3D* center, Point3D* axis, gint n); void (*addElementImproperRotation) (Elements* elements, Point3D* center, Point3D* axis, gint n); void (*addElementReflection) (Elements* elements, Point3D* center, Point3D* axis ); void (*addElementInversion) (Elements* elements, Point3D* center); GList* (*getElements) (Elements* elements); gint (*size) (Elements* elements); Element (*get) (Elements* elements, gint i); Elements (*getCopy) (Elements* elements); void (*clear) (Elements* elements); void (*free) (Elements* elements); void (*addElements) (Elements* elements, Elements* elements2); void (*set) (Elements* elements, gint i, Element* element); void (*remove) (Elements* elements, Element* element); gboolean (*contains)(Elements* elements, Element* elemnt, gdouble tol); gint (*indexOf)(Elements* elements, Element* elemnt); void (*print) (Elements* elements); }; Elements newElements(); Elements newElementsSize(gint n); #endif /* __GABEDIT_ELEMENTS_H__ */ GabeditSrc250/src/Symmetry/SymmetryOperators.c0000644000175100017510000003205213130665226022012 0ustar alloucheallouche/* SymmetryOperators.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "../Utils/Constants.h" #include "../Symmetry/MoleculeSymmetryType.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/SymmetryOperators.h" #include #include #include #include #define SQU(x,y,z) ((x)*(x) + (y)*(y) + (z)*(z)) #define SQU2(x,y) ((x)*(x) + (y)*(y)) #define MYMAX(x,y) ( ((x) > (y)) ? x : y ) /************************************************************************************************************/ /* compare 2 atoms -- Hierarchy: 1. Atom type 2. distance from z-axis (bigger distances first) 3. angle around z -axis 4. z coordinate */ gint compare2atoms(const void* av,const void* bv) { gint d; gdouble dd; gdouble xa,xb; gdouble eps; MolSymAtom *a, *b; a = (MolSymAtom*)av; b = (MolSymAtom*)bv; eps = (a->eps + b->eps)/2; d = a->type - b->type; if (d != 0) return d; xa = a->position[0]*a->position[0] + a->position[1]*a->position[1]; xb = b->position[0]*b->position[0] + b->position[1]*b->position[1]; if (fabs(xa-xb) > eps*(xa+xb)) return (xa < xb) ? 1 : -1; if ((xa > eps*eps) && (xb > eps*eps)) { /* angle is only significant if not on z-axis */ xa = (a->position[1]>0) ? -1-a->position[0]/sqrt(xa) : 1+a->position[0]/sqrt(xa); xb = (b->position[1]>0) ? -1-b->position[0]/sqrt(xb) : 1+b->position[0]/sqrt(xb); if (fabs(xa-xb) > eps*2.*MYMAX(xa,xb)) return (xa > xb) ? 1 : -1; } dd = a->position[2] - b->position[2]; if (dd != 0.0) return (dd > 0) ? 1 : -1; return 0; } /************************************************************************************************************/ /*check two molecules for equivalence */ gint checkequivalence2Molecules(MolSymAtom* a,MolSymAtom* b,gint n) { MolSymAtom* atomList; gint i,j; gdouble eps = 1e-3; eps = a->eps; for (i=0;itype == atomList->type) && (SQU(a->position[0] - atomList->position[0],a->position[1] - atomList->position[1], a->position[2] - atomList->position[2]) < eps*eps)) break; atomList++;; } if (j==n) return 0; a++; } return 1; } /************************************************************************************************************/ gint determineOrderOfZAxis(MolSymMolecule* mol, gint maxf) /* determine order of z - axis */ { gint prime[]= {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,0}; gint i; gint nf=1; gdouble eps = 1e-3; if(mol->numberOfAtoms >0) eps = mol->listOfAtoms[0].eps; for (i=0;prime[i] > 0;i++) { do { nf *= prime[i]; if (nf > maxf) break; } while (rotateAroundZaxes(mol,nf) == 1); nf /= prime[i]; } return nf; } /************************************************************************************************************/ /* rotate around z axes by angle 2PI/n and check for identity */ /* returns 1 if invariant against rotation, 0 if not, -1 : error */ /* negative n - perform improper rotation */ gint rotateAroundZaxes(MolSymMolecule* mol, gint n) { gint i; gdouble s,c; MolSymAtom *atomList,*tmpAtomList; MolSymMolecule tmpMol; gdouble eps = 1e-3; if(mol->numberOfAtoms >0) eps = mol->listOfAtoms[0].eps; /* copy molecule */ tmpMol.numberOfAtoms=mol->numberOfAtoms; tmpMol.listOfAtoms = (MolSymAtom*)g_malloc(tmpMol.numberOfAtoms*sizeof(MolSymAtom)); if (tmpMol.listOfAtoms == NULL) { return -1; } /* perform rotation */ s = sin(2*PI/n); c = cos(2*PI/n); if (n<0) s = -s; /* always turn in positive direction */ atomList = mol->listOfAtoms; tmpAtomList = tmpMol.listOfAtoms; for (i=0;inumberOfAtoms;i++) { tmpAtomList->position[0] = c*atomList->position[0] - s*atomList->position[1]; tmpAtomList->position[1] = s*atomList->position[0] + c*atomList->position[1]; if ((SQU2(atomList->position[0],atomList->position[1]) > eps*eps) && (SQU2(tmpAtomList->position[0] - atomList->position[0],tmpAtomList->position[1] - atomList->position[1]) 0) /* proper rotation */ tmpAtomList->position[2] = atomList->position[2]; else /* improper rotation */ tmpAtomList->position[2] = -atomList->position[2]; tmpAtomList->type = atomList->type; atomList++;; tmpAtomList++; } /* test for equivalence */ atomList = mol->listOfAtoms; tmpAtomList = tmpMol.listOfAtoms; i = checkequivalence2Molecules(atomList,tmpAtomList,mol->numberOfAtoms); g_free(tmpMol.listOfAtoms); return i; } /************************************************************************************************************/ /* tests for reflection on xy xz or yz plane or point inversion */ /* returns 1 if invariant against reflection, 0 if not, -1 : error */ gint testRotationReflection(MolSymMolecule* mol, RotationReflectionOperator op) { gint i; MolSymAtom *atomList,*tmpAtomList; MolSymMolecule tmpMol; /* copy molecule */ tmpMol.numberOfAtoms=mol->numberOfAtoms; tmpMol.listOfAtoms = (MolSymAtom*)g_malloc(tmpMol.numberOfAtoms*sizeof(MolSymAtom)); if (tmpMol.listOfAtoms == NULL) { return -1; } atomList = mol->listOfAtoms; tmpAtomList = tmpMol.listOfAtoms; for (i=0;inumberOfAtoms;i++) { switch(op) { case XY_PLANE: tmpAtomList->position[0] = atomList->position[0]; tmpAtomList->position[1] = atomList->position[1]; tmpAtomList->position[2] = -atomList->position[2]; break; case XZ_PLANE: tmpAtomList->position[0] = atomList->position[0]; tmpAtomList->position[1] = -atomList->position[1]; tmpAtomList->position[2] = atomList->position[2]; break; case YZ_PLANE: tmpAtomList->position[0] = -atomList->position[0]; tmpAtomList->position[1] = atomList->position[1]; tmpAtomList->position[2] = atomList->position[2]; break; case POINT_INV: tmpAtomList->position[0] = -atomList->position[0]; tmpAtomList->position[1] = -atomList->position[1]; tmpAtomList->position[2] = -atomList->position[2]; break; case ROT2X: tmpAtomList->position[0] = atomList->position[0]; tmpAtomList->position[1] = -atomList->position[1]; tmpAtomList->position[2] = -atomList->position[2]; break; case ROT2Y: tmpAtomList->position[0] = -atomList->position[0]; tmpAtomList->position[1] = atomList->position[1]; tmpAtomList->position[2] = -atomList->position[2]; break; case ROT2Z: tmpAtomList->position[0] = -atomList->position[0]; tmpAtomList->position[1] = -atomList->position[1]; tmpAtomList->position[2] = atomList->position[2]; } tmpAtomList->type = atomList->type; atomList++;; tmpAtomList++; } /* test for equivalence */ atomList = mol->listOfAtoms; tmpAtomList = tmpMol.listOfAtoms; i = checkequivalence2Molecules(atomList,tmpAtomList,mol->numberOfAtoms); g_free(tmpMol.listOfAtoms); return i; } /************************************************************************************************************/ /* rotate molecule around z-axis to place point (x,y,z) on xz plane */ /* original in mol, result in tmpMol */ void rotateAroundZaxesToPlacePointOnXZPlane(MolSymMolecule* mol,MolSymMolecule* tmpMol,gdouble x,gdouble y) { gint i; gdouble s,c; MolSymAtom *atomList,*tmpAtomList; /* perform rotation */ c = x/sqrt(x*x+y*y); s = -y/sqrt(x*x+y*y); atomList = mol->listOfAtoms; tmpAtomList = tmpMol->listOfAtoms; for (i=0;inumberOfAtoms;i++) { tmpAtomList->position[0] = c*atomList->position[0] - s*atomList->position[1]; tmpAtomList->position[1] = s*atomList->position[0] + c*atomList->position[1]; tmpAtomList->position[2] = atomList->position[2]; tmpAtomList->type = atomList->type; tmpAtomList->eps = atomList->eps; atomList++;; tmpAtomList++; } qsort(tmpMol->listOfAtoms,tmpMol->numberOfAtoms,sizeof(MolSymAtom),compare2atoms); } /************************************************************************************************************/ /* rotate molecule around x-axis to place y- axis onto z_axis*/ void rotateAroundXAxisToPlaceYAxisOntoZAxis(MolSymMolecule* mol) { gint i; gdouble y; MolSymAtom * atomList; /* perform rotation */ atomList = mol->listOfAtoms; for (i=0;inumberOfAtoms;i++) { y = atomList->position[1]; atomList->position[1] = - atomList->position[2]; atomList->position[2] = y; atomList++;; } qsort(mol->listOfAtoms,mol->numberOfAtoms,sizeof(MolSymAtom),compare2atoms); } /************************************************************************************************************/ /* rotate molecule around y-axis to place x- axis onto z_axis*/ void rotateAroundYAxisToPlaceXAxisOntoZAxis(MolSymMolecule* mol) { gint i; gdouble x; MolSymAtom * atomList; /* perform rotation */ atomList = mol->listOfAtoms; for (i=0;inumberOfAtoms;i++) { x = atomList->position[0]; atomList->position[0] = - atomList->position[2]; atomList->position[2] = x; atomList++;; } qsort(mol->listOfAtoms,mol->numberOfAtoms,sizeof(MolSymAtom),compare2atoms); } /************************************************************************************************************/ /* check for v planes or D -axis -- molecule should be sorted! */ /* returns 1 for v plane, 2 for D-axis, 0 for nothing ,-1 for error */ gint checkForVPlanesOrDAxis(MolSymMolecule* mol,gint nax, gchar* message) { gint i,ret; gint nmin,nmax; gint typ; gdouble x,y,rr; MolSymAtom * atomList; MolSymMolecule tmpMol; gdouble eps = 1e-3; if(mol->numberOfAtoms >0) eps = mol->listOfAtoms[0].eps; /* copy molecule */ tmpMol.numberOfAtoms=mol->numberOfAtoms; tmpMol.listOfAtoms = (MolSymAtom*)g_malloc(tmpMol.numberOfAtoms*sizeof(MolSymAtom)); if (tmpMol.listOfAtoms == NULL) { sprintf(message, "From checkForVPlanesOrDAxis : memory allocation for molecule failed\n"); return -1; } atomList = mol->listOfAtoms; /* find first atom not on z-axis */ for (nmin=0;nminnumberOfAtoms;nmin++) { rr = atomList->position[0]*atomList->position[0] + atomList->position[1]*atomList->position[1]; typ = atomList->type; if (rr > eps*eps) break; atomList++;; } /* should not happen for sorted Cn molecule */ if (nmin >= mol->numberOfAtoms) { sprintf(message, "From checkForVPlanesOrDAxis : This is a linear molecule!\n"); return -2; } /* count atoms on largest cylinder */ for (nmax=nmin;nmax < mol->numberOfAtoms;nmax++) { if ((typ != atomList->type) || (fabs(rr - atomList->position[0]*atomList->position[0] - atomList->position[1]*atomList->position[1]) > eps*2.*rr)) break; atomList++;; } /* printf("nmin = %d nmax = %d nax = %d\n",nmin,nmax, nax);*/ if ((nax>0) && (nmax-nmin) % nax != 0) { sprintf(message, "From checkForVPlanesOrDAxis: Inconsistent rotation symmetry \n"); return -2; } atomList = mol->listOfAtoms + nmin; ret = 0; /* now check for v planes and D axes */ for (i=0;i<(nmax-nmin)/nax;i++) { /* turn one atom onto xz -plane */ x = atomList->position[0]; y = atomList->position[1]; rotateAroundZaxesToPlacePointOnXZPlane(mol,&tmpMol,x,y); ret = testRotationReflection(&tmpMol,XZ_PLANE); /* v-plane ? */ /* printf("ret testRotationReflection %d\n",ret);*/ if (ret != 0) break; /* yes- found */ ret = testRotationReflection(&tmpMol,ROT2X); /* D-axis ? */ if (++ret != 1) break; /* yes- found */ ret--; /* turn center point between one atom and the next onto xz -plane */ atomList++;; rotateAroundZaxesToPlacePointOnXZPlane(mol,&tmpMol,(x+atomList->position[0])/2.,(y+atomList->position[1])/2.); ret = testRotationReflection(&tmpMol,XZ_PLANE); /* v-plane ? */ if (ret != 0) break; /* yes- found */ ret = testRotationReflection(&tmpMol,ROT2X); /* D-axis ? */ if (++ret != 1) break; /* yes- found */ ret--; } if (ret > 0) /* copy tmpMol back to mol */ memcpy(mol->listOfAtoms,tmpMol.listOfAtoms,mol->numberOfAtoms*sizeof(MolSymAtom)); g_free(tmpMol.listOfAtoms); return ret; } /************************************************************************************************************/ GabeditSrc250/src/Symmetry/ReduceMolecule.c0000644000175100017510000001526313130665226021164 0ustar alloucheallouche/* ReduceMolecule.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "../Utils/Constants.h" #include "../Symmetry/MoleculeSymmetryType.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/SymmetryOperators.h" #include "../Symmetry/ReduceMolecule.h" #include "../Symmetry/ReducePolyHedralMolecule.h" #include #include #include #define SQU(x,y,z) ((x)*(x) + (y)*(y) + (z)*(z)) /************************************************************************************************************/ static void setEpsToZero(MolSymMolecule* mol) { gdouble eps = 1e-3; gint i; gint numberOfAtoms = mol->numberOfAtoms; MolSymAtom *atomList = mol->listOfAtoms; if(mol->numberOfAtoms >0) eps = mol->listOfAtoms[0].eps; for(i=0;iposition[0]) < eps) atomList->position[0] = 0.0; if( fabs(atomList->position[1]) < eps) atomList->position[1] = 0.0; if( fabs(atomList->position[2]) < eps) atomList->position[2] = 0.0; atomList++; } } /************************************************************************************************************/ static void removeHalfSpace(MolSymMolecule* mol, RotationReflectionOperator op) { gdouble eps = 1e-3; gint i; gint numberOfAtoms = mol->numberOfAtoms; gint deleted = mol->numberOfDifferentKindsOfAtoms; /* tag for deleted atom */ MolSymAtom *atomList = mol->listOfAtoms; if(mol->numberOfAtoms >0) eps = mol->listOfAtoms[0].eps; /* printf("eps = %f\n",eps);*/ for(i=0;inumberOfAtoms;i++) { switch(op) { case XY_PLANE: if (atomList->position[2] < -eps) { atomList->type = deleted; numberOfAtoms--; } break; case XZ_PLANE: if (atomList->position[1] < -eps) { atomList->type = deleted; numberOfAtoms--; } break; case ROT2X: if (atomList->position[2] > eps) break; if (atomList->position[2] < -eps) { atomList->type = deleted; numberOfAtoms--; break; } /* now |z| < eps */ if (atomList->position[1] < -eps) { atomList->type = deleted; numberOfAtoms--; break; } break; case POINT_INV: /* printf("pointinv = %f %f %f %f\n", atomList->position[0], atomList->position[1], atomList->position[2], eps);*/ if (atomList->position[2] > eps) break; if (atomList->position[2] < -eps) { atomList->type = deleted; numberOfAtoms--; break; } /* now |z| < eps */ if (atomList->position[1] > eps) break; if (atomList->position[1] < -eps) { atomList->type = deleted; numberOfAtoms--; break; } /* now |y| position[0] < -eps) { atomList->type = deleted; numberOfAtoms--; break; } break; default: return; } atomList++; } qsort(mol->listOfAtoms,mol->numberOfAtoms,sizeof(MolSymAtom),compare2atoms); mol->numberOfAtoms = numberOfAtoms; } /************************************************************************************************************/ static void removeByRotation(MolSymMolecule* mol, gint nax, gint sym) { gdouble eps = 1e-3; gint i; gdouble c,ca,rr; gint numberOfAtoms = mol->numberOfAtoms; gint deleted = mol->numberOfDifferentKindsOfAtoms; /* tag for deleted atom */ MolSymAtom *atomList; if (nax<2) return; if(mol->numberOfAtoms >0) eps = mol->listOfAtoms[0].eps; if (sym & SYM_V) c = cos(PI/nax); else c = cos(2.0*PI/nax); atomList = mol->listOfAtoms; for(i=0;inumberOfAtoms;i++) { rr = atomList->position[0]*atomList->position[0] + atomList->position[1]*atomList->position[1]; if ((atomList->type != deleted) && (rr > eps*eps)) { if (atomList->position[1] < -eps) { atomList->type = deleted; numberOfAtoms--; } else { /* calculate cos of molecule turned a bit clockwise */ ca = atomList->position[0]/sqrt(rr); if (sym & SYM_V) ca += eps*atomList->position[1]/rr; else ca -= eps*atomList->position[1]/rr; if (ca < c) { atomList->type = deleted; numberOfAtoms--; } } } atomList++; } qsort(mol->listOfAtoms,mol->numberOfAtoms,sizeof(MolSymAtom),compare2atoms); mol->numberOfAtoms = numberOfAtoms; } /************************************************************************************************************/ void reduceMoleculeToItsBasisSetOfAtoms(MolSymMolecule* mol, gint sym, gint nax) { /* printf("sym symh = %d\n", sym & SYM_H); printf("sym symv = %d\n", sym & SYM_V); printf("sym symd = %d\n", sym & SYM_D); printf("sym symi = %d\n", sym & SYM_I); printf("sym syms = %d\n", sym & SYM_S); printf("sym symDD = %d\n", sym & SYM_DD); printf("sym symT = %d\n", sym & SYM_T); printf("sym symO = %d\n", sym & SYM_O); printf("sym symIC = %d\n", sym & SYM_IC); printf("sym symR = %d\n", sym & SYM_R); printf("sym symU = %d\n", sym & SYM_U); printf("nax = %d\n", nax); */ /* cannot deal with high symmetries */ if (sym & SYM_R) return; if (sym & SYM_O) { reduceForOctaedralSymmetry(mol,sym); setEpsToZero(mol); return; } if (sym & SYM_T) { reduceForTetraedalSymmetry(mol,sym); setEpsToZero(mol); return; } if (sym & SYM_IC) { reduceForIcosaedralSymmetry(mol,sym); setEpsToZero(mol); return; } if (sym & SYM_H) removeHalfSpace(mol,XY_PLANE); else if (sym & SYM_I) removeHalfSpace(mol,POINT_INV); if (nax > 1) { removeByRotation(mol,nax,sym); if (sym & SYM_D) removeHalfSpace(mol,ROT2X); if (sym & SYM_S) removeHalfSpace(mol,XY_PLANE); } setEpsToZero(mol); } GabeditSrc250/src/Symmetry/PointGroups.c0000644000175100017510000001522213130665226020553 0ustar alloucheallouche/* PointGroups.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "../Common/Global.h" #include "../Symmetry/PointGroups.h" /************************************************************************************************************/ static void addPointGroup(PointGroups* pointGroups, PointGroup* pointGroup); static void addPointGroupPos(PointGroups* pointGroups, gint pos, PointGroup* pointGroup); static GList* getPointGroups(PointGroups* pointGroups); static gint size(PointGroups* pointGroups); static PointGroup get(PointGroups* pointGroups, gint i); static PointGroup* getPointer(PointGroups* pointGroups, gint i); static PointGroups getCopy(PointGroups* pointGroups); static void clear(PointGroups* pointGroups); static void addPointGroups(PointGroups* pointGroups, PointGroups* pointGroups2); static void set(PointGroups* pointGroups, gint i, PointGroup* pointGroup); /************************************************************************************************************/ PointGroups newPointGroups() { PointGroups pointGroups; pointGroups.listOfPointGroups = NULL; pointGroups.nPointGroups = 0; /* methods */ pointGroups.addPointGroup = addPointGroup; pointGroups.addPointGroupPos = addPointGroupPos; pointGroups.getPointGroups = getPointGroups; pointGroups.size = size; pointGroups.get = get; pointGroups.getPointer = getPointer; pointGroups.getCopy = getCopy; pointGroups.clear = clear; pointGroups.free = clear; pointGroups.addPointGroups = addPointGroups; pointGroups.set = set; return pointGroups; } /************************************************************************************************************/ PointGroups newPointGroupsSize(gint n) { PointGroups pointGroups = newPointGroups(); gint i; for(i=0;ilistOfPointGroups = g_list_append(pointGroups->listOfPointGroups, a); pointGroups->nPointGroups++; } /************************************************************************************************************/ static void addPointGroupPos(PointGroups* pointGroups, gint pos, PointGroup* pointGroup) { PointGroup* a = g_malloc(sizeof(PointGroup)); *a = *pointGroup; pointGroups->listOfPointGroups = g_list_insert(pointGroups->listOfPointGroups, a, pos); pointGroups->nPointGroups++; } /************************************************************************************************************/ static GList* getPointGroups(PointGroups* pointGroups) { return pointGroups->listOfPointGroups; } /************************************************************************************************************/ static gint size(PointGroups* pointGroups) { return pointGroups->nPointGroups; } /************************************************************************************************************/ static PointGroup get(PointGroups* pointGroups, gint i) { GList* l = NULL;; gint j = 0; if(!pointGroups) return newPointGroupDefault(); for( l = pointGroups->listOfPointGroups; l != NULL; l = l->next, j++) if(j==i) return *(PointGroup*) l->data; return newPointGroupDefault(); } /************************************************************************************************************/ static PointGroup* getPointer(PointGroups* pointGroups, gint i) { GList* l = NULL;; gint j = 0; if(!pointGroups) return NULL; for( l = pointGroups->listOfPointGroups; l != NULL; l = l->next, j++) if(j==i) return (PointGroup*) l->data; return NULL; } /************************************************************************************************************/ static PointGroups getCopy(PointGroups* pointGroups) { PointGroups npointGroups = newPointGroups(); GList* l = NULL;; for( l = pointGroups->listOfPointGroups; l != NULL; l = l->next) npointGroups.addPointGroup(&npointGroups, (PointGroup*) l->data); return npointGroups; } /************************************************************************************************************/ static void clear(PointGroups* pointGroups) { GList* l = NULL;; for( l = pointGroups->listOfPointGroups; l != NULL; l = l->next) if( l->data) { PointGroup* pg = (PointGroup*) l->data; pg->free(pg); g_free(l->data); } g_list_free(pointGroups->listOfPointGroups); pointGroups->listOfPointGroups = NULL; pointGroups->nPointGroups = 0; } /************************************************************************************************************/ static void addPointGroups(PointGroups* pointGroups, PointGroups* pointGroups2) { GList* l = NULL;; for( l = pointGroups2->listOfPointGroups; l != NULL; l = l->next) pointGroups->addPointGroup(pointGroups, (PointGroup*) l->data); } /************************************************************************************************************/ static void set(PointGroups* pointGroups, gint i, PointGroup* pointGroup) { GList* l = NULL;; gint j = 0; for( l = pointGroups->listOfPointGroups; l != NULL; l = l->next, j++) if(j==i) { *(PointGroup*) l->data = *pointGroup; return; } } /************************************************************************************************************/ GabeditSrc250/src/Symmetry/SAtom.c0000644000175100017510000001535513130665226017314 0ustar alloucheallouche/* SAtom.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "../Common/Global.h" #include "../Symmetry/SAtom.h" /************************************************************************************************************/ static gchar* getSymbol(SAtom* atom); static gint getNumber(SAtom* atom); static gdouble getMass(SAtom* atom); static Point3D getPosition(SAtom* atom); static void setPosition(SAtom* atom, Point3D* newPos); static void setSymmetryUnique(SAtom* atom, gboolean isUnique); static gdouble distance(SAtom* atom, SAtom* other); static SAtom findClosestAtom(SAtom* atom, GList* closeAtoms); static gchar* toString(SAtom* atom); static gboolean equals(SAtom* atom1, SAtom* atom2, gdouble tol); /************************************************************************************************************/ SAtom newSAtom() { SAtom e; e.position = newPoint3D(); e.number = 1; sprintf(e.symbol,"H"); e.mass = 1.007900; e.isSymmetryUnique = TRUE; /* methods */ e.getSymbol = getSymbol; e.getNumber = getNumber; e.getMass = getMass; e.getPosition = getPosition; e.setPosition = setPosition; e.setSymmetryUnique = setSymmetryUnique; e.findClosestAtom = findClosestAtom; e.distance = distance; e.toString = toString; e.equals = equals; return e; } /************************************************************************************************************/ SAtom newSAtomsnm(gchar* symbol, gint number, gdouble mass) { SAtom e; e = newSAtom(); e.number = number; if(symbol) sprintf(e.symbol,"%s",symbol); e.mass = mass; e.isSymmetryUnique = TRUE; return e; } /************************************************************************************************************/ SAtom newSAtomxyz(gchar* symbol, gint number, gdouble mass, gdouble x, gdouble y, gdouble z) { SAtom e; e = newSAtomsnm(symbol, number, mass); e.position = newPoint3Dxyz(x,y,z); return e; } /************************************************************************************************************/ static gchar* getSymbol(SAtom* atom) { return atom->symbol; } /************************************************************************************************************/ static gint getNumber(SAtom* atom) { return atom->number; } /************************************************************************************************************/ static gdouble getMass(SAtom* atom) { return atom->number; } /************************************************************************************************************/ static Point3D getPosition(SAtom* atom) { return atom->position; } /************************************************************************************************************/ static void setPosition(SAtom* atom, Point3D* newPos) { atom->position = *newPos; } /************************************************************************************************************/ static void setSymmetryUnique(SAtom* atom, gboolean isUnique) { atom->isSymmetryUnique = isUnique; } /************************************************************************************************************/ static gdouble distance(SAtom* atom, SAtom* other) { Point3D position = atom->getPosition(atom); Point3D otherPos = other->getPosition(other); return position.distance(&position,&otherPos); } /************************************************************************************************************/ static SAtom findClosestAtom(SAtom* atom, GList* closeAtoms) { SAtom* closestAtom = NULL; Point3D thisPos, testPos; gdouble dx,dy,dz,distSq; gdouble shortestDistanceSq = 1E40; GList* list; SAtom* testAtom; thisPos = atom->getPosition(atom); for(list = closeAtoms; list != NULL; list = list->next) { testAtom = (SAtom*)(list->data); testPos = testAtom->getPosition(testAtom); dx = thisPos.x - testPos.x; dy = thisPos.y - testPos.y; dz = thisPos.z - testPos.z; distSq = dx*dx+dy*dy+dz*dz; if(atom->getNumber(atom) == testAtom->getNumber(testAtom) && atom!=testAtom && (closestAtom == NULL || distSq < shortestDistanceSq)) { closestAtom = testAtom; shortestDistanceSq = distSq; } } if(closestAtom != NULL) { return *closestAtom; } return *atom; } /************************************************************************************************************/ static gchar* toString(SAtom* atom) { gchar tmp[10]; sprintf(tmp," "); if(atom->isSymmetryUnique) sprintf(tmp,"*"); sprintf(atom->str,"%s%s at %s", tmp, atom->getSymbol(atom), atom->position.toString(&atom->position)); return atom->str; } /************************************************************************************************************/ static gboolean eq(gdouble d1, gdouble d2, gdouble tol) { return fabs(d1 - d2) < tol; } /************************************************************************************************************/ static gboolean eqPoint(Point3D* p1, Point3D* p2, gdouble tol) { return eq(p1->x, p2->x, tol) && eq(p1->y, p2->y,tol) && eq(p1->z, p2->z,tol); } /************************************************************************************************************/ static gboolean equals(SAtom* atom1, SAtom* atom2, gdouble tol) { if(!atom1 || !atom2) return FALSE; return !strcmp(getSymbol(atom1), getSymbol(atom2)) && eqPoint(&atom1->position, &atom2->position, tol) && atom1->number == atom2->number && fabs(atom1->mass - atom2->mass)<1e-10; } GabeditSrc250/src/Symmetry/MoleculeSymmetry.c0000644000175100017510000007556413130665226021620 0ustar alloucheallouche/* MoleculeSymmetry.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include #include #include "../Symmetry/MoleculeSymmetryType.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/PrincipalAxis.h" #include "../Symmetry/PolyHedralOperators.h" #include "../Symmetry/SymmetryOperators.h" #include "../Symmetry/ReduceMolecule.h" #include "../Symmetry/GenerateMolecule.h" #include "../Common/GabeditType.h" #include "../Utils/AtomsProp.h" #include "../Utils/Constants.h" #include "../Utils/Utils.h" #include "../Symmetry/Symmetry.h" #include #include #include #include #include #define SQU(x,y,z) ((x)*(x) + (y)*(y) + (z)*(z)) #define C5X 0.6070619987 #define C5Z 0.7946544719 /************************************************************************************************************/ static gint freeAMolecule(MolSymMolecule* mol) { gint i; if(mol->numberOfAtoms>0 && mol->listOfAtoms) g_free(mol->listOfAtoms); mol->listOfAtoms = NULL; mol->numberOfAtoms = 0; if(mol->numberOfDifferentKindsOfAtoms>0 && mol->symbol) { for(i=0;inumberOfDifferentKindsOfAtoms;i++) if( mol->symbol[i]) g_free(mol->symbol[i]); g_free(mol->symbol); } mol->symbol = NULL; if(mol->numberOfDifferentKindsOfAtoms>0 && mol->numberOfAtomsOfEachType) g_free(mol->numberOfAtomsOfEachType); mol->numberOfAtomsOfEachType = 0; if(mol->numberOfDifferentKindsOfAtoms>0 && mol->masse) g_free(mol->masse); mol->masse = 0; mol->numberOfDifferentKindsOfAtoms = 0; return 0; } /************************************************************************************************************/ /* static void printMolSymMolecules(MolSymMolecule* mol) { gint i; MolSymAtom *atomList; gint deleted = mol->numberOfDifferentKindsOfAtoms; // tag for deleted atom atomList = mol->listOfAtoms; for (i=0;inumberOfAtoms;i++) { gint j = mol->listOfAtoms[i].type; if(j!=deleted) printf("%s %d %f %f %f\n",mol->symbol[j],atomList->type, atomList->position[0],atomList->position[1], atomList->position[2]); else printf("%s %d %f %f %f\n","DE",atomList->type, atomList->position[0],atomList->position[1], atomList->position[2]); atomList++; } } */ /************************************************************************************************************/ static gdouble getSmallestDistanceBetweenAtoms(MolSymMolecule* mol) { gint i,j; gdouble min_dd,max_dd,dd; MolSymAtom *atomList; MolSymAtom *tmpAtomList; min_dd = 1.E99; max_dd = 0.0; atomList = mol->listOfAtoms; for (i=0;inumberOfAtoms;i++) { tmpAtomList = atomList + 1; for (j=i+1;jnumberOfAtoms;j++) { dd = SQU(atomList->position[0] - tmpAtomList->position[0], atomList->position[1] - tmpAtomList->position[1], atomList->position[2] - tmpAtomList->position[2]); if (dd < min_dd) min_dd = dd; if (dd > max_dd) max_dd = dd; tmpAtomList++; } atomList++; } if ((max_dd > 0.0) && (min_dd/max_dd < 1.E-6)) printf(_("Warning: Two atoms on same position\n")); if(mol->numberOfAtoms<2) min_dd = 0.1; return sqrt(min_dd); } /************************************************************************************************************/ void setGeneratorsAbelianGroup(gchar* groupName, gint* nGenerators, gchar** generators, gint* nMolcas, gchar** molcasGenerators, gint* nElements, gchar** elements ) { gchar group[BSIZE]; sprintf(group,"%s",groupName); uppercase(group); if(!strcmp(group,"D2H")) { *nGenerators = 3; sprintf(generators[0],"C2z"); sprintf(generators[1],"C2y"); sprintf(generators[2],"i"); *nMolcas = 3; sprintf(molcasGenerators[0],"xy"); sprintf(molcasGenerators[1],"xz"); sprintf(molcasGenerators[2],"xyz"); *nElements = 8; sprintf(elements[0],"E"); sprintf(elements[1],"C2z"); sprintf(elements[2],"C2y"); sprintf(elements[3],"C2x"); sprintf(elements[4],"i"); sprintf(elements[5],"Sigma xy"); sprintf(elements[6],"Sigma xz"); sprintf(elements[7],"Sigma yz"); } else if(!strcmp(group,"C2H")) { *nGenerators = 2; sprintf(generators[0],"C2z"); sprintf(generators[1],"i"); *nMolcas = 2; sprintf(molcasGenerators[0],"xy"); sprintf(molcasGenerators[1],"xyz"); *nElements = 4; sprintf(elements[0],"E"); sprintf(elements[1],"C2z"); sprintf(elements[2],"i"); sprintf(elements[3],"Sigma h"); } else if(!strcmp(group,"CI")) { *nGenerators = 1; sprintf(generators[0],"i"); *nMolcas = 1; sprintf(molcasGenerators[0],"xyz"); *nElements = 2; sprintf(elements[0],"E"); sprintf(elements[1],"i"); } else if(!strcmp(group,"C2V")) { *nGenerators = 2; sprintf(generators[0],"C2z"); sprintf(generators[1],"Sigma v"); *nMolcas = 2; sprintf(molcasGenerators[0],"xy"); sprintf(molcasGenerators[1],"y"); *nElements = 4; sprintf(elements[0],"E"); sprintf(elements[1],"C2z"); sprintf(elements[2],"Sigma v"); sprintf(elements[3],"Sigma' v"); } else if(!strcmp(group,"D2")) { *nGenerators = 2; sprintf(generators[0],"C2z"); sprintf(generators[1],"C2y"); *nMolcas = 2; sprintf(molcasGenerators[0],"xy"); sprintf(molcasGenerators[1],"xz"); *nElements = 4; sprintf(elements[0],"E"); sprintf(elements[1],"C2z"); sprintf(elements[2],"C2y"); sprintf(elements[3],"C2z"); } else if(!strcmp(group,"CS")) { *nGenerators = 1; sprintf(generators[0],"Sigma"); *nMolcas = 1; sprintf(molcasGenerators[0],"x"); *nElements = 2; sprintf(elements[0],"E"); sprintf(elements[1],"Sigma"); } else if(!strcmp(group,"C2")) { *nGenerators = 1; sprintf(generators[0],"C2z"); *nMolcas = 1; sprintf(molcasGenerators[0],"xy"); *nElements = 2; sprintf(elements[0],"E"); sprintf(elements[1],"C2z"); } else { *nGenerators = 0; *nMolcas = 0; *nElements = 0; } } /************************************************************************************************************/ static void getAbelianGroupSymbol(MolSymMolecule* mol, gchar* groupName) { gint nax = 0; gint iz = 0; gint iy = 0; gint ix = 0; gint ixy = 0; gint ixz = 0; gint ixyz = 0; nax = determineOrderOfZAxis(mol, 12); ixy = testRotationReflection(mol,XY_PLANE); ixz = testRotationReflection(mol,XZ_PLANE); ixyz = testRotationReflection(mol,POINT_INV); ix = testRotationReflection(mol,ROT2X); iy = testRotationReflection(mol,ROT2X); if(nax%2==0) iz = 1; if(ixyz) { if(iz && iy) sprintf(groupName,"D2h"); else if(iz) sprintf(groupName,"C2h"); else sprintf(groupName,"Ci"); } else if(ixz && iz ) sprintf(groupName,"C2v"); else if( iz && iy ) sprintf(groupName,"D2"); else if( ixy ) sprintf(groupName,"Cs"); else if( iz ) sprintf(groupName,"C2"); else sprintf(groupName,"C1"); } /************************************************************************************************************/ static void getAbelianGroup(MolSymMolecule* mol, gchar* groupName, gint* nGenerators, gchar** generators, gint* nMolcas, gchar** molcasGenerators, gint* nElements, gchar** elements, gchar* error) { getAbelianGroupSymbol(mol, groupName); setGeneratorsAbelianGroup(groupName, nGenerators, generators, nMolcas, molcasGenerators, nElements, elements); } /************************************************************************************************************/ static void getPointGroupSymbol(gint sym, gint nax, gchar* pgsym) { *pgsym = 0; if (sym==0 && nax>0) sprintf(pgsym,"C%d",nax); else if (sym & SYM_R) strcat(pgsym,"R3"); else if (sym & SYM_T) { strcat(pgsym,"T"); if (sym & SYM_D) strcat(pgsym,"d"); if (sym & SYM_I) strcat(pgsym,"h"); } else if (sym & SYM_O) { strcat(pgsym,"O"); if (sym & SYM_D) strcat(pgsym,"h"); } else if (sym & SYM_IC) { strcat(pgsym,"I"); if (sym & SYM_D) strcat(pgsym,"h"); } else if (sym & SYM_S) { sprintf(pgsym,"S%d",nax); if (sym & SYM_V) { if(nax==4) sprintf(pgsym,"S%d",2*nax); else sprintf(pgsym,"D%dd",nax); } } else { if (sym & SYM_D) strcat(pgsym,"D"); else strcat(pgsym,"C"); if (nax == 0) strcat(pgsym,"inf"); else if (nax == 1) if (sym & SYM_I) strcat(pgsym,"i"); else if (sym & SYM_H) strcat(pgsym,"s"); else strcat(pgsym,"1"); else sprintf(pgsym+1,"%d",nax); if ((nax != 1) && (sym & SYM_H)) strcat(pgsym,"h"); else if (sym & SYM_V) strcat(pgsym,"v"); } } /************************************************************************************************************/ static gint determineSymmetry(MolSymMolecule* mol,int* nax, gint numberOfEquivalentAxes, gint maximalOrder, gdouble principalAxisTolerance, gchar* error) { gint symmetry = 0; gint ret; switch(numberOfEquivalentAxes) { case -3: symmetry |= SYM_R; /* spherical symmetry */ break; case -2: symmetry |= SYM_V; if (testRotationReflection(mol,XY_PLANE)==1) symmetry |= SYM_H; /* linear molecule */ break; case 1: qsort(mol->listOfAtoms,mol->numberOfAtoms,sizeof(MolSymAtom),compare2atoms); *nax = determineOrderOfZAxis(mol, maximalOrder); if (*nax == 0) /* error */ { sprintf(error,_("Nonlinear molecule with symmetry Cinf! Try smaller precision for atom position\n" "Current precision = %0.5f"),mol->listOfAtoms[0].eps); return 0; } if (*nax == 1) { if (testRotationReflection(mol,ROT2X)==1) { *nax = 2; rotateAroundYAxisToPlaceXAxisOntoZAxis(mol); /* may not work sometimes ! */ } else if (testRotationReflection(mol,ROT2Y)==1) { *nax = 2; rotateAroundXAxisToPlaceYAxisOntoZAxis(mol); } else if (testRotationReflection(mol,XY_PLANE)) { symmetry |= SYM_H; /* symmetry Cs */ break; } else if (testRotationReflection(mol,XZ_PLANE)) { rotateAroundXAxisToPlaceYAxisOntoZAxis(mol); symmetry |= SYM_H; /* symmetry Cs */ break; } else if (testRotationReflection(mol,YZ_PLANE)) { rotateAroundYAxisToPlaceXAxisOntoZAxis(mol); symmetry |= SYM_H; /* symmetry Cs */ break; } else if (testRotationReflection(mol,POINT_INV)) { symmetry |= SYM_I; /* symmetry Ci */ break; } } if (*nax > 1) { if (testRotationReflection(mol,XY_PLANE)) symmetry |= SYM_H; ret = checkForVPlanesOrDAxis(mol,*nax, error); if (ret == 1) symmetry |= SYM_V; if (ret == 2) symmetry |= SYM_D; } break; case 2: qsort(mol->listOfAtoms,mol->numberOfAtoms,sizeof(MolSymAtom),compare2atoms); *nax = determineOrderOfZAxis(mol, maximalOrder); if (*nax == 0) /* error */ { sprintf(error,_("Nonlinear molecule with symmetry Cinf! Try smaller precision for atom position\n" "Current precision = %0.5f"),mol->listOfAtoms[0].eps); return 0; } if (*nax == 1) { if (testRotationReflection(mol,ROT2Y)==1) { rotateAroundXAxisToPlaceYAxisOntoZAxis(mol); *nax = determineOrderOfZAxis(mol, maximalOrder); } } if (rotateAroundZaxes(mol,-2* *nax)) { *nax *=2; /* improper rotation axis */ symmetry |= SYM_S; } else if (testRotationReflection(mol,XY_PLANE)) symmetry |= SYM_H; ret = checkForVPlanesOrDAxis(mol,*nax, error); /* printf("ret = %d\n",ret);*/ if (ret == 1) symmetry |= SYM_V; if (ret == 2) symmetry |= SYM_D; if (testRotationReflection(mol,POINT_INV) ==1) symmetry |= SYM_I; if ((*nax == 1) && (symmetry & SYM_V)) { rotateAroundXAxisToPlaceYAxisOntoZAxis(mol); symmetry |= SYM_H; symmetry &=~SYM_V; } break; case 3: *nax = searchForC3Axes(mol, error); if (*nax<3) { sprintf(error,_("Could not find symmetry axis (see tolerance parameters)\n" "Current precision for position of atoms = %0.5f\n" "Current tolerance for principal axis = %0.5f"),mol->listOfAtoms[0].eps,principalAxisTolerance); return 0; } if (rotateAroundArbitraryAxes(mol,3, sqrt(8.)/3., 0.,-1./3., error) == 1) symmetry = SYM_T; else if (rotateAroundArbitraryAxes(mol,5,C5X,0.,C5Z, error) ==1) symmetry = SYM_IC; else { rotationAroundZAxisByPi(mol); if (rotateAroundArbitraryAxes(mol,3, sqrt(8.)/3., 0.,-1./3., error) == 1) symmetry = SYM_T; else if (rotateAroundArbitraryAxes(mol,5,C5X,0.,C5Z, error) ==1) symmetry = SYM_IC; else { sprintf(error,_("Irregular 3-fold axis detected\n")); return 0; } } if (symmetry == SYM_T) { if (rotateAroundArbitraryAxes(mol,4,sqrt(2./3.), 0.0, sqrt(1./3.), error) == 1) symmetry = SYM_O; /* CUBIC symmetry */ else if (testRotationReflection(mol,POINT_INV) == 1) symmetry |= SYM_I; /* Th symmetry */ } if (testRotationReflection(mol,XZ_PLANE) == 1) symmetry |= SYM_D; *nax = 3; break; } if (*nax == 0) symmetry |= SYM_V; if ((symmetry & (SYM_S | SYM_V)) == (SYM_S | SYM_V)) *nax /= 2; if ((symmetry & (SYM_H | SYM_V)) == (SYM_H | SYM_V)) symmetry |= SYM_D; if (((symmetry & SYM_H) == SYM_H) && ((*nax % 2) ==0)) symmetry |= SYM_I; return symmetry; } /************************************************************************************************************/ static void getSymmetryFromSymbol(gchar* syml,int* sym,int* nax, gchar* error) { gchar *s; gchar c1,c2; *nax = 1; *sym = 0; for(s=syml;*s != 0;s++) *s = toupper(*s); if (strcmp(syml,"CS") == 0) { *sym = SYM_H; return;} if (strcmp(syml,"CI") == 0) { *sym = SYM_I; return;} if (strcmp(syml,"R3") == 0) { *sym = SYM_R; return;} if (strcmp(syml,"DINFH") == 0) { *sym = SYM_H; *nax = 0; return;} if (strcmp(syml,"CINFV") == 0) { *nax = 0; return; } if (strcmp(syml,"D3D") == 0) { *nax = 3; *sym = (SYM_I | SYM_S | SYM_V); return; } c2 = 0; if (sscanf(syml,"%c%d%c",&c1,nax,&c2) < 2) { if (c1 == 'T') { *sym = SYM_T; if (syml[1] == 'H') *sym |= SYM_I; else if (syml[1] == 'D') *sym |= SYM_D; else *sym = SYM_U; } else if (c1 == 'O') { *sym = SYM_O; if (syml[1] == 'H') *sym |= SYM_D; else *sym = SYM_U; } else if (c1 == 'I') { *sym = SYM_I; if (syml[1] == 'H') *sym |= SYM_D; else *sym = SYM_U; } else *sym = SYM_U; } else if ((c1 == 'S') && (c2 == 0)) *sym = SYM_S; else if ((c1 == 'D') && (c2 == 0)) *sym = SYM_D; else if ((c1 == 'D') && (c2 == 'H')) *sym |= (SYM_D | SYM_H | SYM_V); else if ((c1 == 'D') && (c2 == 'D')) *sym |= (SYM_S | SYM_V); else if ((c1 == 'C') && (c2 == 'V')) *sym |= SYM_V; else if ((c1 == 'C') && (c2 == 'H')) *sym |= SYM_H; else if ((c1 == 'C') && (c2 == 0)); else if ((c1 == 'S') && (c2 == 0))*sym |= SYM_H; else *sym = SYM_U; if ((c1 == 'D') && (c2 == 'H') && *nax%2==0) *sym |= SYM_I; if (*sym == SYM_U) { sprintf(error,_("Unknown symmetry - set to C1")); *sym = 0; *nax = 1; } } /************************************************************************************************************/ static gint setMolSymMolecule(MolSymMolecule* mol, gint nAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z, gdouble eps) { gint i; gint n; MolSymAtom* atomList = NULL; mol->listOfAtoms = NULL; mol->numberOfAtoms = 0; mol->numberOfDifferentKindsOfAtoms=0; mol->symbol = NULL; mol->numberOfAtomsOfEachType = NULL; mol->listOfAtoms = (MolSymAtom*)g_malloc(sizeof(MolSymAtom)*(nAtoms)); if(mol->listOfAtoms==NULL) return -1; mol->numberOfAtoms = nAtoms; mol->symbol = (gchar**)g_malloc(sizeof(gchar*)*(mol->numberOfAtoms)); if( mol->symbol == NULL) return -1; for(n=0; nnumberOfAtoms; n++) mol->symbol[n] = NULL; mol->numberOfAtomsOfEachType = (gint*)g_malloc(sizeof(gint)*(mol->numberOfAtoms)); if(mol->numberOfAtomsOfEachType == NULL) return -1; mol->masse = (gdouble*)g_malloc(sizeof(gdouble)*(mol->numberOfAtoms)); if(mol->masse == NULL) return -1; atomList = mol->listOfAtoms; for(n=0; nnumberOfAtoms; n++) { atomList->position[0] = X[n]; atomList->position[1] = Y[n]; atomList->position[2] = Z[n]; atomList->eps = eps; i = 0; for (i=0;inumberOfDifferentKindsOfAtoms;i++) /* search symbol */ { if ((strcmp(symbols[n],mol->symbol[i]))==0) { mol->numberOfAtomsOfEachType[i]++; break; } } if (i==mol->numberOfDifferentKindsOfAtoms) { SAtomsProp prop = prop_atom_get(symbols[n]); mol->symbol[i] = g_strdup(symbols[n]); mol->masse[i] = prop.masse; mol->numberOfAtomsOfEachType[i] = 1; mol->numberOfDifferentKindsOfAtoms++; } atomList->type = i; atomList++; } if (eps < 0.) eps = getSmallestDistanceBetweenAtoms(mol)/50.; /* default */ atomList = mol->listOfAtoms; for(n=0; nnumberOfAtoms; n++) { atomList->eps = eps; atomList++; } return 0; } /* INPUT gdouble principalAxisTolerance; tolerance for principal axis classification gboolean axz_3; O and I symmetry: z-axis of C3 type ? gint maximalOrder; maximal order for z-axis gboolean redu; reduction to symmetry base INPUT OUPUT gint* numberOfAtoms; number of atoms (modified if reduction) gchar** symbols; symbol of atoms; gdouble *X,*Y,*Z; positions of atoms; (modified) gint pointGroupSymbol; if not NO -> symmetry fixed manually (modified if pointGroupSymbol="NO") OUPUT gchar* message; Error Message */ /************************************************************************************************************/ /* INPUT gdouble principalAxisTolerance; tolerance for principal axis classification gint maximalOrder; maximal order for z-axis gboolean redu; reduction to symmetry base INPUT OUPUT gint* numberOfAtoms; number of atoms (modified if reduction) gchar** symbols; symbol of atoms; gdouble *X,*Y,*Z; positions of atoms; (modified) OUPUT gchar* message; Error Message gint pointGroupSymbol; point group name gint abelianPointGroupSymbol abelian point group name gint* nGenerators numbuer of generators gchar** generators generators name gint* nMolcas numbuer of generators with Molcas style gchar** molcasGenerators generators name with Molcas style gint* nElements number of all elements gchar** elements name for all elements */ /************************************************************************************************************/ int computeAbelianGroup( gdouble principalAxisTolerance, gchar* pointGroupSymbol, gchar* abelianPointGroupSymbol, gint maximalOrder, gboolean redu, gint* numberOfAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z, gint* nGenerators, gchar** generators, gint* nMolcas, gchar** molcasGenerators, gint* nElements, gchar** elements, gdouble* precision, gchar* message) { gdouble eps = *precision; MolSymMolecule mol; gdouble centerOfGravity[3]; gint numberOfEquivalentAxes; gdouble inertialMoment[3]; gdouble axes[3][3]; gint ret; gint nax = 0; /* order of z axis */ gint symmetry; gint i; gint nAtoms = *numberOfAtoms; gchar buffer[BSIZE]; sprintf(message,"C1 Group"); sprintf(pointGroupSymbol,"C1"); sprintf(abelianPointGroupSymbol,"C1"); ret = setMolSymMolecule(&mol, nAtoms, symbols, X, Y, Z, eps); if (ret != 0) { sprintf(message,_("Not enough memory for molecule")); return ret; } determinePrincipalAxis(&mol,centerOfGravity,&numberOfEquivalentAxes,inertialMoment,axes, principalAxisTolerance,TRUE); /* transform to principal axes */ symmetry = determineSymmetry(&mol,&nax,numberOfEquivalentAxes, maximalOrder, principalAxisTolerance, message); if(symmetry == 0) { *precision = mol.listOfAtoms[0].eps; *nGenerators = 0; *nMolcas = 0; *nElements = 0; return -1; } getPointGroupSymbol(symmetry,nax, pointGroupSymbol); getAbelianGroup(&mol, abelianPointGroupSymbol, nGenerators, generators, nMolcas, molcasGenerators, nElements, elements, NULL); if (redu) { sprintf(buffer,"%s",abelianPointGroupSymbol); getSymmetryFromSymbol(buffer,&symmetry,&nax, message); reduceMoleculeToItsBasisSetOfAtoms(&mol,symmetry,nax); } for (i=0;i < mol.numberOfAtoms;i++) { sprintf(symbols[i],"%s",mol.symbol[mol.listOfAtoms[i].type]); X[i] = mol.listOfAtoms[i].position[0]; Y[i] = mol.listOfAtoms[i].position[1]; Z[i] = mol.listOfAtoms[i].position[2]; } *numberOfAtoms = mol.numberOfAtoms; *precision = mol.listOfAtoms[0].eps; freeAMolecule(&mol); return 0; } /************************************************************************************************************/ int generateMoleculeUsingAbelianGroup( gchar* abelianPointGroupSymbol, gint* numberOfAtoms, gchar*** symbols, gdouble** X, gdouble** Y, gdouble** Z ) { gint numberOfGenerators; gint numberOfMolcasGenerators; gint numberOfElements; gchar* generators[3]; gchar* molcasGenerators[3]; gchar* elements[8]; gint nAtoms = *numberOfAtoms; MolSymMolecule mol; gdouble eps = -1; gint ret = 0; gint i; if(*numberOfAtoms<1) return -1; ret = setMolSymMolecule(&mol, nAtoms, *symbols, *X, *Y, *Z, eps); if (ret != 0) return -1; for(i=0;i<3;i++) { generators[i] = g_malloc(100*sizeof(gchar)); molcasGenerators[i] = g_malloc(100*sizeof(gchar)); } for(i=0;i<8;i++) elements[i] = g_malloc(100*sizeof(gchar)); setGeneratorsAbelianGroup(abelianPointGroupSymbol, &numberOfGenerators, generators, &numberOfMolcasGenerators, molcasGenerators, &numberOfElements, elements); generateMoleculeFromTheBasisSetOfAtoms(&mol, numberOfElements, elements); if(*symbols) { for(i=0;i<*numberOfAtoms;i++) g_free((*symbols)[i]); g_free((*symbols)); } if(*X) g_free(*X); if(*Y) g_free(*Y); if(*Z) g_free(*Z); *symbols = g_malloc(mol.numberOfAtoms*sizeof(gchar*)); *X = g_malloc(mol.numberOfAtoms*sizeof(gdouble)); *Y = g_malloc(mol.numberOfAtoms*sizeof(gdouble)); *Z = g_malloc(mol.numberOfAtoms*sizeof(gdouble)); *numberOfAtoms = mol.numberOfAtoms; for(i=0;itype]);*/ m = fabs(mol.masse[atomList->type]); x += m*atomList->position[0]; y += m*atomList->position[1]; z += m*atomList->position[2]; mtot += m; atomList++; } centerOfGravity[0] = x/mtot; centerOfGravity[1] = y/mtot; centerOfGravity[2] = z/mtot; for (i=0;i < mol.numberOfAtoms;i++) { X[i] = mol.listOfAtoms[i].position[0]-centerOfGravity[0]; Y[i] = mol.listOfAtoms[i].position[1]-centerOfGravity[1]; Z[i] = mol.listOfAtoms[i].position[2]-centerOfGravity[2]; } freeAMolecule(&mol); } /* INPUT gdouble principalAxisTolerance; tolerance for principal axis classification gboolean axz_3; O and I symmetry: z-axis of C3 type ? gint maximalOrder; maximal order for z-axis gboolean redu; reduction to symmetry base INPUT OUPUT gint* numberOfAtoms; number of atoms (modified if reduction) gchar** symbols; symbol of atoms; gdouble *X,*Y,*Z; positions of atoms; (modified) gint pointGroupSymbol; if not NO -> symmetry fixed manually (modified if pointGroupSymbol="NO") OUPUT gchar* message; Error Message */ /************************************************************************************************************/ int computeSymmetryOld( gdouble principalAxisTolerance, gboolean axz_3, gchar* pointGroupSymbol, gint maximalOrder, gboolean redu, gint* numberOfAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z, gdouble* precision, gchar* message) { gdouble eps = *precision; MolSymMolecule mol; gdouble centerOfGravity[3]; gint numberOfEquivalentAxes; gdouble inertialMoment[3]; gdouble axes[3][3]; gdouble ax1[3],ax2[3]; gint ret; gint nax = 0; /* order of z axis */ gint symmetry; gint symf = -1; gchar* syml = pointGroupSymbol; gint i; gint nAtoms = *numberOfAtoms; sprintf(message,"C1 Group"); if(strcmp(syml,"NO")!=0) getSymmetryFromSymbol(syml,&symf,&nax, message); if(symf == 0 && nax<2) { sprintf(pointGroupSymbol,"C1"); return 0; } ret = setMolSymMolecule(&mol, nAtoms, symbols, X, Y, Z, eps); if (ret != 0) { sprintf(message,_("Not enough memory for molecule")); return ret; } determinePrincipalAxis(&mol,centerOfGravity,&numberOfEquivalentAxes,inertialMoment,axes, principalAxisTolerance, TRUE); /* transform to principal axes */ if (symf < 0 ) /* symmetry not fixed */ { symmetry = determineSymmetry(&mol,&nax,numberOfEquivalentAxes, maximalOrder, principalAxisTolerance, message); } else { gchar ns[100]; gint naxOld = nax; symmetry =determineSymmetry(&mol,&nax,numberOfEquivalentAxes, maximalOrder, principalAxisTolerance, message); getPointGroupSymbol(symmetry, nax, ns); uppercase(pointGroupSymbol); uppercase(ns); if(strcmp(ns,pointGroupSymbol)!=0) { nax = naxOld; symmetry = symf; } } if(symmetry == 0 && nax<2) { *precision = mol.listOfAtoms[0].eps; return -1; } if (redu) reduceMoleculeToItsBasisSetOfAtoms(&mol,symmetry,nax); if ((symmetry & SYM_O) && !axz_3) /* x,y,z axis C4 symmetry */ { ax1[0] = sqrt(2./3.); ax1[1] = 0.0; ax1[2] = sqrt(1./3.); ax2[0] = sqrt(1./6.); ax2[1] = sqrt(1./2.); ax2[2] =-sqrt(1./3.); rotateMoleculeToPlaceFirstPointOnZAxisAndSecondOnXZPlane(&mol,ax1,ax2); qsort(mol.listOfAtoms,mol.numberOfAtoms, sizeof(MolSymAtom),compare2atomsUsingCenterOfGravity); nax = 4; } if ((symmetry & SYM_IC) && ! axz_3) /* z axis C5 symmetry */ { ax1[0] = C5X; ax1[1] = 0.0; ax1[2] = C5Z; ax2[0] = 0.0; ax2[1] = 0.0; ax2[2] = 1.0; rotateMoleculeToPlaceFirstPointOnZAxisAndSecondOnXZPlane(&mol,ax1,ax2); qsort(mol.listOfAtoms,mol.numberOfAtoms, sizeof(MolSymAtom),compare2atomsUsingCenterOfGravity); nax = 5; } getPointGroupSymbol(symmetry,nax, pointGroupSymbol); for (i=0;i < mol.numberOfAtoms;i++) { sprintf(symbols[i],"%s",mol.symbol[mol.listOfAtoms[i].type]); X[i] = mol.listOfAtoms[i].position[0]; Y[i] = mol.listOfAtoms[i].position[1]; Z[i] = mol.listOfAtoms[i].position[2]; } *numberOfAtoms = mol.numberOfAtoms; *precision = mol.listOfAtoms[0].eps; freeAMolecule(&mol); return 0; } /************************************************************************************************************/ int computeSymmetry( gdouble principalAxisTolerance, gchar* pointGroupSymbol, gint maximalOrder, gboolean redu, gint* numberOfAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z, gdouble* precision, gchar* message) { gdouble eps = *precision; gint nAtoms = *numberOfAtoms; gdouble* mass = NULL; gint i = 0; SMolecule mol = newSMolecule(); Symmetry sym; SMolecule* pmol = NULL; if(eps<=0) eps = 0.1; sprintf(message,"C1 Group"); if(nAtoms<1) return 1; mass = g_malloc(nAtoms*sizeof(gdouble)); for(i=0;isize(pmol);i++) { SAtom* atom = pmol->get(pmol,i); Point3D pos = atom->getPosition(atom); X[i] = pos.x; Y[i] = pos.y; Z[i] = pos.z; } *numberOfAtoms = pmol->size(pmol); sym.free(&sym); mol.free(&mol); return 0; } /************************************************************************************************************/ int computeSymmetrization( gdouble principalAxisTolerance, gchar* pointGroupSymbol, gint maximalOrder, gint* numberOfAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z, gdouble* precision, gchar* message) { gdouble eps = *precision; gint nAtoms = *numberOfAtoms; gdouble* mass = NULL; gint i = 0; SMolecule mol = newSMolecule(); Symmetry sym; gchar* gn; if(eps<=0) eps = 0.1; sprintf(message,"C1 Group"); if(nAtoms<1) return 1; mass = g_malloc(nAtoms*sizeof(gdouble)); for(i=0;igetPosition(atom); X[i] = pos.x; Y[i] = pos.y; Z[i] = pos.z; if(symbols && symbols[i]) g_free(symbols[i]); symbols[i] = g_strdup(atom->getSymbol(atom)); } sym.free(&sym); mol.free(&mol); return 0; } GabeditSrc250/src/Symmetry/PointGroup.h0000644000175100017510000000605113130665226020375 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_POINTGROUP_H__ #define __GABEDIT_POINTGROUP_H__ #include "../Utils/Point3D.h" #include "../Symmetry/SOperations.h" #include "../Symmetry/SMolecule.h" #include "../Symmetry/Elements.h" #include "../Symmetry/HashMapSAtoms.h" typedef struct _PointGroup PointGroup; struct _PointGroup { gdouble symmetrizeTolerance; SMolecule molecule; SMolecule uniqueMolecule; Elements elements; gchar name[10]; gdouble distance; gboolean isCubicGroup; gint numExtraElements; gint numMissingElements; /* methods */ gchar* (*getName) (PointGroup* pointGroup); gchar* (*toString) (PointGroup* pointGroup); gboolean (*isCubic) (PointGroup* pointGroup); void (*findUniqueAtoms)(PointGroup* pointGroup, gdouble tolerance); SMolecule (*getUniqueAtoms)(PointGroup* pointGroup, gdouble tolerance); SMolecule (*getMolecule)(PointGroup* pointGroup); Elements (*getElements)(PointGroup* pointGroup); void (*setDistance)(PointGroup* pointGroup, gdouble distance); void (*setNumExtraElements)(PointGroup* pointGroup, gint extra); void (*setNumMissingElements)( PointGroup* pointGroup, gint missing); gdouble (*getDistance)(PointGroup* pointGroup); gint (*getNumExtraElements)(PointGroup* pointGroup); gint (*getNumMissingElements)(PointGroup* pointGroup); void (*adjustUniqueAtomsToElements)(PointGroup* pointGroup, gdouble tolerance); SMolecule (*createSymmetrizedMolecule)(PointGroup* pointGroup, gdouble tolerance); SMolecule (*symmetrizeMolecule)(PointGroup* pointGroup, gdouble tolerance); gchar** (*getListOfGroups)(PointGroup* pointGroup); void (*clear)(PointGroup* pointGroup); void (*free)(PointGroup* pointGroup); }; PointGroup newPointGroupDefault(); PointGroup newPointGroup(Elements* elements, SMolecule* mol, gchar* groupName); #endif /* __GABEDIT_POINTGROUP_H__ */ GabeditSrc250/src/Symmetry/PrincipalAxis.h0000644000175100017510000000313413130665226021034 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_PRINCIPALAXIS_H__ #define __GABEDIT_PRINCIPALAXIS_H__ void determinePrincipalAxis(MolSymMolecule* mol,gdouble* centerOfGravity, int* numberOfEquivalentAxes, gdouble* inertialMoment, gdouble axes[3][3], gdouble principalAxisTolerance, gboolean sorting); #endif /* __GABEDIT_PRINCIPALAXIS_H__ */ GabeditSrc250/src/Symmetry/MoleculeSymmetryInterface.c0000644000175100017510000007100313130665226023421 0ustar alloucheallouche/* MolSymInterface.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include #include "../Common/Global.h" #include "../Utils/AtomsProp.h" #include "../Utils/UtilsInterface.h" #include "../Utils/Utils.h" #include "../Utils/Constants.h" #include "../Utils/GabeditTextEdit.h" #include "../Common/Windows.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/Symmetry.h" /* 0-> Position ; 1-> Principal axis */ static gint typeOfTolerance[] = { 0,1}; /* -1 = Default, tolerance = (min distance between atoms) /50 */ static gdouble tolerancePosition[] = { -1.0, 0.3, 0.1, 0.03, 0.003, 0.0}; static gdouble tolerancePrincipalAxis[] = { 5e-3, 0.3, 0.1, 0.03, 0.003, 0.0}; static gdouble tolerancePositionValue = -1.0; static gdouble tolerancePrincipalAxisValue = 5e-3; static gdouble tmpTolerancePositionValue = -1.0; static gdouble tmpTolerancePrincipalAxisValue = 5e-3; /****************************************************************************************************************************/ static void setToleranceParametersFromTmp(GtkWidget* TextWid, gchar* groupSymbol) { tolerancePositionValue = tmpTolerancePositionValue; tolerancePrincipalAxisValue = tmpTolerancePrincipalAxisValue; } /****************************************************************************************************************************/ static void putInfoInTextWidget(GtkWidget* TextWid, gchar* groupSymbol, gdouble principalAxisTolerance, gdouble eps, gchar* message) { gchar t[BSIZE]; gabedit_text_insert (GABEDIT_TEXT(TextWid), NULL, NULL, NULL,message,-1); sprintf(t,_("Tolerance for principal axis classification : %0.5f\n"),principalAxisTolerance); gabedit_text_insert (GABEDIT_TEXT(TextWid), NULL, NULL, NULL,t,-1); sprintf(t,_("Precision for atom position : %0.5f\n\n"),eps); gabedit_text_insert (GABEDIT_TEXT(TextWid), NULL, NULL, NULL,t,-1); sprintf(t,_("Group Symmetry : %s\n"),groupSymbol); gabedit_text_insert (GABEDIT_TEXT(TextWid), NULL, NULL, NULL,t,-1); sprintf(t,"-----------------------------------------------------------------------------------------\n\n"); gabedit_text_insert (GABEDIT_TEXT(TextWid), NULL, NULL, NULL,t,-1); } /****************************************************************************************************/ static void putInfoAbelianGroup(GtkWidget* TextWid, gchar* groupName, gint nGenerators, gchar** generators, gint nMolcas, gchar** molcasGenerators, gint nElements, gchar** elements) { gchar t[BSIZE]; gint i; sprintf(t,_("Abelian Group Name : %s\n\n"),groupName); gabedit_text_insert (GABEDIT_TEXT(TextWid), NULL, NULL, NULL,t,-1); sprintf(t,_("Generators : ")); for(i=0;ivbox),NULL,&frame); gabedit_text_set_editable(GABEDIT_TEXT(TextWid), TRUE); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), FALSE); Bouton = create_button(Dialogue,"OK"); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), Bouton, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)destroy_button_windows, GTK_OBJECT(Dialogue)); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(Dialogue)); add_button_windows(title,Dialogue); if(strcmp(groupSymbol,"C1")!=0) { sprintf(message , _("Group & Geometry with reduction of molecule to its basis set of atoms\n")); strcat(message,"*************************************************************************\n\n"); } else { sprintf(message , _("Group & Geometry\n")); strcat(message,"***********************\n\n"); } putInfoInTextWidget(TextWid, groupSymbol, principalAxisTolerance, eps, message); putGeometryInTextWidget(TextWid,numberOfAtoms, symbols, X, Y, Z); if(strcmp(groupSymbol,"C1")!=0) { numberOfAtoms = ntmp; sprintf(groupSymbol,_("NO")); err = computeSymmetryOld(principalAxisTolerance, FALSE, groupSymbol,maximalOrder, FALSE, &numberOfAtoms,symbolstmp, Xtmp, Ytmp, Ztmp, &eps, message); sprintf(message, _("Group & Geometry\n")); strcat(message,"***********************\n\n"); putInfoInTextWidget(TextWid, groupSymbol, principalAxisTolerance, eps, message); putGeometryInTextWidget(TextWid,numberOfAtoms, symbolstmp, Xtmp, Ytmp, Ztmp); } gtk_window_set_default_size (GTK_WINDOW(Dialogue), ScreenWidth/3, ScreenHeight/3); gtk_widget_show_all(Dialogue); g_free(title); { numberOfAtoms = ntmp; gdouble* mass = g_malloc(numberOfAtoms*sizeof(gdouble)); gint i = 0; for(i=0;ivbox),NULL,&frame); gabedit_text_set_editable(GABEDIT_TEXT(TextWid), TRUE); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), FALSE); Bouton = create_button(Dialogue,"OK"); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), Bouton, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)destroy_button_windows, GTK_OBJECT(Dialogue)); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(Dialogue)); add_button_windows(title,Dialogue); if(strcmp(pointGroupSymbol,"C1")!=0) { sprintf(message, _("Group & Geometry with reduction of molecule to its basis set of atoms\n")); strcat(message,"**************************************************************************\n\n"); } else { sprintf(message, _("Group & Geometry\n")); strcat(message,"************************\n\n"); } putInfoInTextWidget(TextWid, pointGroupSymbol, principalAxisTolerance, eps, message); putInfoAbelianGroup(TextWid, abelianPointGroupSymbol, nGenerators, generators, nMolcas, molcasGenerators, nElements, elements); putGeometryInTextWidget(TextWid,numberOfAtoms, symbols, X, Y, Z); gtk_window_set_default_size (GTK_WINDOW(Dialogue), ScreenWidth/3, ScreenHeight/3); gtk_widget_show_all(Dialogue); g_free(title); for(i=0;i<3;i++) { g_free(generators[i]); g_free(molcasGenerators[i]); } for(i=0;i<8;i++) g_free(elements[i]); return Dialogue; } /**************************************************************************************************************************************/ static void activateEntry(GtkWidget *entry, gpointer data) { GtkWidget* button = ( GtkWidget*)data; gdouble value = -1; gint* type = NULL; G_CONST_RETURN gchar* entryText = NULL; if(!GTK_IS_WIDGET(entry)) return; if(!GTK_IS_WIDGET(button)) return; entry = g_object_get_data(G_OBJECT (button), "Entry"); type = g_object_get_data(G_OBJECT (button), "Type"); entryText = gtk_entry_get_text(GTK_ENTRY(entry)); value = atof(entryText); if(value<0) { gchar newValue[BSIZE]; value = -value; sprintf(newValue,"%f",value); gtk_entry_set_text(GTK_ENTRY(entry),newValue); } if(fabs(value)<1e-10) { value = 0.01; /* gtk_entry_set_text(GTK_ENTRY(entry),"0.01");*/ } if(type && *type == typeOfTolerance[0]) tmpTolerancePositionValue = value; else tmpTolerancePrincipalAxisValue = value; } /**************************************************************************************************************************************/ static void activateRadioButton(GtkWidget *button, gpointer data) { GtkWidget* entry = NULL; gdouble* value = NULL; gint* type = NULL; if(!GTK_IS_WIDGET(button)) return; entry = g_object_get_data(G_OBJECT (button), "Entry"); type = g_object_get_data(G_OBJECT (button), "Type"); value = g_object_get_data(G_OBJECT (button), "Value"); if(entry) { if(value && fabs(*value)<1e-10) gtk_widget_set_sensitive(entry, TRUE); else gtk_widget_set_sensitive(entry, FALSE); } if(value && fabs(*value)>1e-10) { if(type && *type == typeOfTolerance[0]) tmpTolerancePositionValue = *value; else tmpTolerancePrincipalAxisValue = *value; } else { if(type && *type == typeOfTolerance[0]) { tmpTolerancePositionValue = 0.01; } else { tmpTolerancePrincipalAxisValue = 0.01; } gtk_entry_set_text(GTK_ENTRY(entry),"0.01"); } } /**************************************************************************************************************************************/ static GtkWidget* addRadioButtonToATable(GtkWidget* table, GtkWidget* friendButton, gchar* label, gint i, gint j, gint k) { GtkWidget *newButton; if(friendButton) newButton = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (friendButton)), label); else newButton = gtk_radio_button_new_with_label( NULL, label); gtk_table_attach(GTK_TABLE(table),newButton,j,j+k,i,i+1, /* (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), */ (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), 3,3); g_object_set_data(G_OBJECT (newButton), "Entry",NULL); g_object_set_data(G_OBJECT (newButton), "Type",NULL); g_object_set_data(G_OBJECT (newButton), "Value",NULL); return newButton; } /**************************************************************************************************************************************/ static void createTolerancePrincipalAxisFrame(GtkWidget *box) { GtkWidget* button; GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget* entry = gtk_entry_new(); GtkWidget *table = gtk_table_new(6,2,TRUE); frame = gtk_frame_new (_("Tolerance for principal axis")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); button = addRadioButtonToATable(table, NULL, "Default [5e-3] ", 0, 0,2); g_object_set_data(G_OBJECT (button), "Entry",entry); g_object_set_data(G_OBJECT (button), "Type",&typeOfTolerance[1]); g_object_set_data(G_OBJECT (button), "Value",&tolerancePrincipalAxis[0]); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); button = addRadioButtonToATable(table, button, "Very Coarser [0.3]", 1, 0, 2); g_object_set_data(G_OBJECT (button), "Entry",entry); g_object_set_data(G_OBJECT (button), "Type",&typeOfTolerance[1]); g_object_set_data(G_OBJECT (button), "Value",&tolerancePrincipalAxis[1]); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); button = addRadioButtonToATable(table, button, "Coarser [0.1]", 2, 0, 2); g_object_set_data(G_OBJECT (button), "Entry",entry); g_object_set_data(G_OBJECT (button), "Type",&typeOfTolerance[1]); g_object_set_data(G_OBJECT (button), "Value",&tolerancePrincipalAxis[2]); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); button = addRadioButtonToATable(table, button, "Medium [0.03]", 3, 0, 2); g_object_set_data(G_OBJECT (button), "Entry",entry); g_object_set_data(G_OBJECT (button), "Type",&typeOfTolerance[1]); g_object_set_data(G_OBJECT (button), "Value",&tolerancePrincipalAxis[3]); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); button = addRadioButtonToATable(table, button, "Fine [0.003]", 4, 0, 2); g_object_set_data(G_OBJECT (button), "Entry",entry); g_object_set_data(G_OBJECT (button), "Type",&typeOfTolerance[1]); g_object_set_data(G_OBJECT (button), "Value",&tolerancePrincipalAxis[4]); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); button = addRadioButtonToATable(table, button, "Other", 5, 0, 1); g_object_set_data(G_OBJECT (button), "Entry",entry); g_object_set_data(G_OBJECT (button), "Type",&typeOfTolerance[1]); g_object_set_data(G_OBJECT (button), "Value",&tolerancePrincipalAxis[5]); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); gtk_widget_set_size_request(GTK_WIDGET(entry),50,-1); add_widget_table(table, entry,5,1); gtk_widget_set_sensitive(entry, FALSE); gtk_entry_set_text(GTK_ENTRY(entry),"0.01"); g_signal_connect(G_OBJECT(entry),"changed", G_CALLBACK(activateEntry),button); tmpTolerancePrincipalAxisValue = 5e-3; } /**************************************************************************************************************************************/ static void createTolerancePositionFrame(GtkWidget *box) { GtkWidget* button; GtkWidget* frame; GtkWidget* vboxFrame; GtkWidget* entry = gtk_entry_new(); GtkWidget *table = gtk_table_new(6,2,TRUE); frame = gtk_frame_new (_("Tolerance for atom positions")); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3); gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); vboxFrame = gtk_vbox_new (FALSE, 3); gtk_widget_show (vboxFrame); gtk_container_add (GTK_CONTAINER (frame), vboxFrame); gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0); button = addRadioButtonToATable(table, NULL, "Default [(min distance)/50]", 0, 0,2); g_object_set_data(G_OBJECT (button), "Entry",entry); g_object_set_data(G_OBJECT (button), "Type",&typeOfTolerance[0]); g_object_set_data(G_OBJECT (button), "Value",&tolerancePosition[0]); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); button = addRadioButtonToATable(table, button, "Very Coarser [0.3]", 1, 0, 2); g_object_set_data(G_OBJECT (button), "Entry",entry); g_object_set_data(G_OBJECT (button), "Type",&typeOfTolerance[0]); g_object_set_data(G_OBJECT (button), "Value",&tolerancePosition[1]); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); button = addRadioButtonToATable(table, button, "Coarser [0.1]", 2, 0, 2); g_object_set_data(G_OBJECT (button), "Entry",entry); g_object_set_data(G_OBJECT (button), "Type",&typeOfTolerance[0]); g_object_set_data(G_OBJECT (button), "Value",&tolerancePosition[2]); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); button = addRadioButtonToATable(table, button, "Medium [0.03]", 3, 0, 2); g_object_set_data(G_OBJECT (button), "Entry",entry); g_object_set_data(G_OBJECT (button), "Type",&typeOfTolerance[0]); g_object_set_data(G_OBJECT (button), "Value",&tolerancePosition[3]); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); button = addRadioButtonToATable(table, button, "Fine [0.003]", 4, 0, 2); g_object_set_data(G_OBJECT (button), "Entry",entry); g_object_set_data(G_OBJECT (button), "Type",&typeOfTolerance[0]); g_object_set_data(G_OBJECT (button), "Value",&tolerancePosition[4]); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); button = addRadioButtonToATable(table, button, "Other", 5, 0, 1); g_object_set_data(G_OBJECT (button), "Entry",entry); g_object_set_data(G_OBJECT (button), "Type",&typeOfTolerance[0]); g_object_set_data(G_OBJECT (button), "Value",&tolerancePosition[5]); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(activateRadioButton),NULL); gtk_widget_set_size_request(GTK_WIDGET(entry),50,-1); add_widget_table(table, entry,5,1); gtk_widget_set_sensitive(entry, FALSE); gtk_entry_set_text(GTK_ENTRY(entry),"0.01"); g_signal_connect(G_OBJECT(entry),"changed", G_CALLBACK(activateEntry),button); tmpTolerancePositionValue = -1.0; } /****************************************************************************************************/ void createToleranceWindow(GtkWidget* win, GabeditSignalFunc myFunc) { GtkWidget *dialogWindow = NULL; GtkWidget *button; GtkWidget *frame; GtkWidget *hbox; gchar title[BSIZE]; dialogWindow = gtk_dialog_new(); gtk_widget_realize(GTK_WIDGET(dialogWindow)); sprintf(title, _("Tolerance for computing the point group")); gtk_window_set_title(GTK_WINDOW(dialogWindow),title); gtk_window_set_modal (GTK_WINDOW (dialogWindow), TRUE); gtk_window_set_position(GTK_WINDOW(dialogWindow),GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(dialogWindow), "delete_event", (GCallback)destroy_button_windows, NULL); g_signal_connect(G_OBJECT(dialogWindow), "delete_event", (GCallback)gtk_widget_destroy, NULL); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (GTK_WIDGET(GTK_DIALOG(dialogWindow)->vbox)), frame, TRUE, TRUE, 3); hbox = gtk_hbox_new (FALSE, 3); gtk_widget_show (hbox); gtk_container_add (GTK_CONTAINER (frame), hbox); createTolerancePositionFrame(hbox); createTolerancePrincipalAxisFrame(hbox); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(dialogWindow)->action_area), TRUE); button = create_button(dialogWindow,"Cancel"); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(dialogWindow)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)destroy_button_windows, GTK_OBJECT(dialogWindow)); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(dialogWindow)); button = create_button(dialogWindow,"OK"); gtk_box_pack_start (GTK_BOX( GTK_DIALOG(dialogWindow)->action_area), button, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)setToleranceParametersFromTmp, GTK_OBJECT(dialogWindow)); if(myFunc) g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)myFunc, GTK_OBJECT(dialogWindow)); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)destroy_button_windows, GTK_OBJECT(dialogWindow)); g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(dialogWindow)); add_button_windows(title,dialogWindow); gtk_widget_show_all(dialogWindow); if(GTK_IS_WIDGET(win)) gtk_window_set_transient_for(GTK_WINDOW(dialogWindow),GTK_WINDOW(win)); } /****************************************************************************************************************************/ void getToleranceValues(gdouble* tolerancePosition , gdouble* tolerancePrincipalAxis) { *tolerancePosition = tolerancePositionValue; *tolerancePrincipalAxis = tolerancePrincipalAxisValue; } /****************************************************************************************************************************/ gdouble getTolerancePosition() { return tolerancePositionValue; } /****************************************************************************************************************************/ gdouble getTolerancePrincipalAxis() { return tolerancePrincipalAxisValue; } /****************************************************************************************************************************/ void buildStandardOrientationDlg(gint numberOfAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z) { buildStandardOrientation(numberOfAtoms, symbols, X, Y, Z); } /****************************************************************************************************/ void createGeometrySymmetrizationWindow(gint numberOfAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z, gchar* groupSymbol) { GtkWidget *Dialogue = NULL; GtkWidget *Bouton; GtkWidget *frame; GtkWidget *TextWid; gchar * title = NULL; gchar message[BSIZE]; gint err; gint maximalOrder = 20; gdouble principalAxisTolerance = tolerancePrincipalAxisValue; gdouble eps = tolerancePositionValue; if(eps<0) eps = 0.1; if(numberOfAtoms<1) { Message(_("Sorry Number of atoms is not positive"),_("Error"),TRUE); return; } sprintf(groupSymbol,"NO"); err = computeSymmetrization(principalAxisTolerance, groupSymbol, maximalOrder, &numberOfAtoms, symbols, X, Y, Z, &eps, message); if(err != 0) { Message(message,"Error",TRUE); return; } Dialogue = gtk_dialog_new(); gtk_widget_realize(GTK_WIDGET(Dialogue)); title = g_strdup(_("Group symmetry & Geometry")); gtk_window_set_title(GTK_WINDOW(Dialogue),title); gtk_window_set_modal (GTK_WINDOW (Dialogue), FALSE); gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(Dialogue), "delete_event", (GCallback)destroy_button_windows, NULL); g_signal_connect(G_OBJECT(Dialogue), "delete_event", (GCallback)gtk_widget_destroy, NULL); TextWid = create_text_widget(GTK_WIDGET(GTK_DIALOG(Dialogue)->vbox),NULL,&frame); gabedit_text_set_editable(GABEDIT_TEXT(TextWid), TRUE); gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), FALSE); Bouton = create_button(Dialogue,"OK"); gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), Bouton, FALSE, TRUE, 5); GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT); gtk_widget_grab_default(Bouton); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)destroy_button_windows, GTK_OBJECT(Dialogue)); g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(Dialogue)); add_button_windows(title,Dialogue); sprintf(message , _("Group & Geometry after symmetrization\n")); strcat(message,"*******************************************\n\n"); putInfoInTextWidget(TextWid, groupSymbol, principalAxisTolerance, eps, message); putGeometryInTextWidget(TextWid,numberOfAtoms, symbols, X, Y, Z); gtk_window_set_default_size (GTK_WINDOW(Dialogue), ScreenWidth/3, ScreenHeight/3); gtk_widget_show_all(Dialogue); g_free(title); } GabeditSrc250/src/Symmetry/Symmetry.h0000644000175100017510000000615513130665226020125 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_SYMMETRY_H__ #define __GABEDIT_SYMMETRY_H__ #include "../Utils/Point3D.h" #include "../Symmetry/SOperations.h" #include "../Symmetry/SMolecule.h" #include "../Symmetry/Elements.h" #include "../Symmetry/HashMapSAtoms.h" #include "../Symmetry/PointGroups.h" typedef struct _Symmetry Symmetry; struct _Symmetry { gdouble GAUSSIAN_SYMMETRY_TOLERANCE; gint MAX_DEGREE; gdouble DEFAULT_TOLERANCE; gdouble MOMENT_TOLERANCE; gdouble DOT_TOLERANCE; gdouble GABEDIT_T_APOTHEM; Elements elements; SMolecule molecule; PointGroups pointGroups; Elements rotations; Element* primaryAxis; gdouble tolerance; Point3D centerOfMass; Point3D principalAxes[3]; gdouble principalMoments[3]; gint degeneracy; /* methods */ void (*findProperRotationAxes) (Symmetry* symmetry); void (*findImproperRotationAxes) (Symmetry* symmetry); void (*findReflectionPlanes) (Symmetry* symmetry); PointGroups (*findAllPointGroups)(Symmetry* symmetry); void (*findSymmetryElements) (Symmetry* symmetry); void (*findPointGroups) (Symmetry* symmetry); void (*findInversionCenter) (Symmetry* symmetry); void (*free) (Symmetry* symmetry); void (*clear) (Symmetry* symmetry); PointGroups (*getPointGroups)(Symmetry* symmetry); Elements (*getElements)(Symmetry* symmetry); SMolecule (*getMolecule)(Symmetry* symmetry); void (*printPointGroupResults)(Symmetry* symmetry); gchar* (*findSinglePointGroup)(Symmetry* symmetry); void (*printElementResults)(Symmetry* symmetry); SMolecule (*getUniqueMolecule)(Symmetry* symmetry); SMolecule (*getSymmetrizeMolecule)(Symmetry* symmetry); void (*setMaxDegree)(Symmetry* symmetry, gint maxDegree); void (*setMomentTolerance)(Symmetry* symmetry, gdouble tolerance); gchar* (*getGroupName)(Symmetry* symmetry); }; Symmetry newSymmetry(SMolecule* mol, gdouble tolerance); #endif /* __GABEDIT_SYMMETRY_H__ */ GabeditSrc250/src/Symmetry/PolyHedralOperators.c0000644000175100017510000002260713130665226022231 0ustar alloucheallouche/* PolyHedralOperators.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "../Utils/Constants.h" #include "../Symmetry/MoleculeSymmetryType.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/PolyHedralOperators.h" #include "../Symmetry/SymmetryOperators.h" #include #include #include #define SQU(x,y,z) ((x)*(x) + (y)*(y) + (z)*(z)) #define MYMAX(x,y) ( ((x) > (y)) ? x : y ) /************************************************************************************************************/ /* * compare 2 atoms -- order hierarchy: * 1. Atom type * 2. distance from center of gravity (bigger distances first) * 3. z coordinate */ gint compare2atomsUsingCenterOfGravity(const void* av,const void* bv) { gint d; gdouble dd; gdouble xa,xb; MolSymAtom *a, *b; gdouble eps = 1e-3; a = (MolSymAtom*)av; b = (MolSymAtom*)bv; /*cast from void* for compatibility with qsort*/ eps = (a->eps+b->eps)/2; d = a->type - b->type; if (d != 0) return d; xa = a->position[0]*a->position[0] + a->position[1]*a->position[1] + a->position[2]*a->position[2]; xb = b->position[0]*b->position[0] + b->position[1]*b->position[1] + b->position[2]*b->position[2]; if (fabs(xa-xb) > 2.*eps*MYMAX(xa,xb)) return (xa < xb) ? 1 : -1; dd = a->position[2] - b->position[2]; if (dd != 0.0) return (dd > 0) ? 1 : -1; return 0; } /************************************************************************************************************/ gint searchForC3Axes(MolSymMolecule* mol, gchar* message) { MolSymAtom *atomList; MolSymAtom *tmpAtomList; gdouble eps = 1e-3; gdouble rr,rr2; gdouble x,y,z; gdouble vx,vy,vz; gdouble ux,uy,uz; gdouble ax,ay,az; gdouble axis1[3], axis2[3]; gint imin,imax; gint i,j; gint ret,nax; if(mol->numberOfAtoms >0) eps = mol->listOfAtoms[0].eps; qsort(mol->listOfAtoms,mol->numberOfAtoms,sizeof(MolSymAtom),compare2atomsUsingCenterOfGravity); /* determine number of atoms on shell with radius rr^1/2 */ rr = 1.0; atomList = mol->listOfAtoms; for (imin=0;imin < mol->numberOfAtoms;imin++) { rr = atomList->position[0]*atomList->position[0]+atomList->position[1]*atomList->position[1]+atomList->position[2]*atomList->position[2]; atomList++; if (rr > eps*eps) break; } for (imax = imin+1;imaxnumberOfAtoms;imax++) { rr2 = atomList->position[0]*atomList->position[0]+atomList->position[1]*atomList->position[1]+atomList->position[2]*atomList->position[2]; if (fabs(rr-rr2) > 2.*eps*rr) break; atomList++; } if (imax-imin<4) return 0; /* this cannot be a regular polyhedron */ atomList = mol->listOfAtoms+imin; x = atomList->position[0]; y = atomList->position[1]; z = atomList->position[2]; nax = 0; for (i=imin+1;iposition[0]; vy = y - atomList->position[1]; vz = z - atomList->position[2]; rr = sqrt(vx*vx + vy*vy + vz*vz); vx /= rr; vy /= rr; vz /= rr; tmpAtomList = atomList; for (j=i+1;jposition[0]; uy = y - tmpAtomList->position[1]; uz = z - tmpAtomList->position[2]; rr = sqrt(ux*ux + uy*uy + uz*uz); ux /= rr; uy /= rr; uz /= rr; /* cos(phi) */ if (fabs(vx*ux + vy*uy + vz*uz -0.5) < 0.866*eps/rr) { /* vector product */ ax = vy*uz - vz*uy; ay = vz*ux - vx*uz; az = vx*uy - vy*ux; rr = sqrt(ax*ax + ay*ay + az*az); ax /= rr; ay /= rr; az /= rr; /* is this a C3 axis ? */ ret = rotateAroundArbitraryAxes(mol,3,ax,ay,az, message); if (ret<0) return ret; /* error */ if (ret == 1) { nax++; if (nax == 1) /* first axis ? */ { axis1[0] = ax; axis1[1] = ay; axis1[2] = az; } else if (nax == 2) /* first axis ? */ { axis2[0] = ax; axis2[1] = ay; axis2[2] = az; } } } } } rotateMoleculeToPlaceFirstPointOnZAxisAndSecondOnXZPlane(mol,axis1,axis2); qsort(mol->listOfAtoms,mol->numberOfAtoms,sizeof(MolSymAtom),compare2atomsUsingCenterOfGravity); return nax; } /************************************************************************************************************/ /* rotate around artbitary axes u by angle 2PI/n and check for identity */ /* returns 1 if invariant against rotation, 0 if not, -1 : error */ /* u = (ux,uy,uz) should be a normalized vector */ gint rotateAroundArbitraryAxes(MolSymMolecule* mol, gint n,gdouble ux, gdouble uy, gdouble uz, gchar* message) { gint i; gdouble s,c; gdouble a11,a12,a13; gdouble a21,a22,a23; gdouble a31,a32,a33; gdouble eps = 1e-3; MolSymAtom *atomList; MolSymAtom *tmpAtomList; MolSymMolecule tmpMol; if(mol->numberOfAtoms>0) eps = mol->listOfAtoms[0].eps; /* copy molecule */ tmpMol.numberOfAtoms=mol->numberOfAtoms; tmpMol.listOfAtoms = (MolSymAtom*)g_malloc(tmpMol.numberOfAtoms*sizeof(MolSymAtom)); if (tmpMol.listOfAtoms == NULL) { if(message) sprintf(message,"rotateAroundArbitraryAxes : memory allocation for molecule failed\n"); return -1; } /* construct rotation matrix */ s = sin(2*PI/n); c = cos(2*PI/n); a11 = ux*ux*(1-c) + c; a12 = ux*uy*(1-c) - s*uz; a13 = ux*uz*(1-c) + s*uy; a21 = uy*ux*(1-c) + s*uz; a22 = uy*uy*(1-c) + c; a23 = uy*uz*(1-c) - s*ux; a31 = uz*ux*(1-c) - s*uy; a32 = uz*uy*(1-c) + s*ux; a33 = uz*uz*(1-c) + c; /* perform rotation */ atomList = mol->listOfAtoms; tmpAtomList = tmpMol.listOfAtoms; for (i=0;inumberOfAtoms;i++) { tmpAtomList->position[0] = a11*atomList->position[0] + a12*atomList->position[1] + a13*atomList->position[2]; tmpAtomList->position[1] = a21*atomList->position[0] + a22*atomList->position[1] + a23*atomList->position[2]; tmpAtomList->position[2] = a31*atomList->position[0] + a32*atomList->position[1] + a33*atomList->position[2]; tmpAtomList->type = atomList->type; tmpAtomList->eps = atomList->eps; atomList++; tmpAtomList++; } /* test for equivalence */ atomList = mol->listOfAtoms; tmpAtomList = tmpMol.listOfAtoms; i = checkequivalence2Molecules(atomList, tmpAtomList, mol->numberOfAtoms); g_free(tmpMol.listOfAtoms); return i; } /************************************************************************************************************/ /* rotate molecule to place point x1 on z axis, x2 on xz plane */ /* original in mol, result in tmpMol */ void rotateMoleculeToPlaceFirstPointOnZAxisAndSecondOnXZPlane(MolSymMolecule* mol,gdouble* x1,gdouble* x2) { gint i; gdouble a11,a12,a21,a22,a23,a31,a32,a33; gdouble r,R; gdouble x,y; MolSymAtom *atomList; /* calculate rotation matrix elements */ r = sqrt(x1[0]*x1[0]+x1[1]*x1[1]); R = sqrt(x1[0]*x1[0]+x1[1]*x1[1]+x1[2]*x1[2]); if (r<1.E-12) return; /* nothing to do */ a11 = x1[1]/r; a12 = -x1[0]/r; a21 = x1[0]*x1[2]/(r*R); a22 = x1[1]*x1[2]/(r*R); a23 = -r/R; a31 = x1[0]/R; a32 = x1[1]/R; a33 = x1[2]/R; /* perform rotation */ atomList = mol->listOfAtoms; for (i=0;inumberOfAtoms;i++) { x = a11*atomList->position[0] + a12*atomList->position[1]; y = a21*atomList->position[0] + a22*atomList->position[1] + a23*atomList->position[2]; atomList->position[2] = a31*atomList->position[0] + a32*atomList->position[1] + a33*atomList->position[2]; atomList->position[0] = x; atomList->position[1] = y; atomList++; } /* turn second axis */ x = a11*x2[0] + a12*x2[1]; y = a21*x2[0] + a22*x2[1] + a23*x2[2]; /* rotate now to xz plane */ r = sqrt(x*x+y*y); a11 = x/r; a12 = y/r; a21 = -a12; a22 = a11; atomList = mol->listOfAtoms; for (i=0;inumberOfAtoms;i++) { x = a11*atomList->position[0] + a12*atomList->position[1]; atomList->position[1] = a21*atomList->position[0] + a22*atomList->position[1]; atomList->position[0] = x; atomList++; } } /************************************************************************************************************/ void rotationAroundZAxisByPi(MolSymMolecule* mol) { gint i; MolSymAtom *atomList; /* perform reflexion */ atomList = mol->listOfAtoms; for (i=0;inumberOfAtoms;i++) { atomList->position[0] = - atomList->position[0]; atomList->position[1] = - atomList->position[1]; atomList++; } } GabeditSrc250/src/Symmetry/SOperations.h0000644000175100017510000000446213130665226020541 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_OPERATIONS_H__ #define __GABEDIT_OPERATIONS_H__ #include "../Utils/Point3D.h" #include "../Symmetry/SOperation.h" typedef struct _SOperations SOperations; struct _SOperations { GList* listOfSOperations; gint nSOperations; gchar str[1024]; /* methods */ void (*addSOperation) (SOperations* operations, SOperation* operation); void (*addOperation) (SOperations* operations, gint number, gchar* type, gint degree); GList* (*getSOperations) (SOperations* operations); gint (*size) (SOperations* operations); SOperation (*get) (SOperations* operations, gint i); SOperations (*copy) (SOperations* operations); void (*clear) (SOperations* operations); void (*addSOperations) (SOperations* operations, SOperations* operations2); void (*set) (SOperations* operations, gint i, SOperation* operation); gchar* (*toString) (SOperations* operations); }; SOperations newSOperations(); SOperations newSOperationsSize(gint n); SOperations getSOperationsForOneGroup(gchar* groupName); #endif /* __GABEDIT_OPERATIONS_H__ */ GabeditSrc250/src/Symmetry/MoleculeSymmetryInterface.h0000644000175100017510000000427513130665226023435 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MOLECULESYMMETRYINTERFACE_H__ #define __GABEDIT_MOLECULESYMMETRYINTERFACE_H__ void createGeometrySymmetryWindow(gint numberOfAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z, gchar* groupeSymbol); void createGeometrySymmetrizationWindow(gint numberOfAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z, gchar* groupeSymbol); GtkWidget* createGeometryAbelianGroupWindow(gint numberOfAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z, gchar* pointGroupSymbol, gchar* abelianPointGroupSymbol); void createToleranceWindow(GtkWidget* win, GabeditSignalFunc myFunc); void getToleranceValues(gdouble* tolerancePosition , gdouble* tolerancePrincipalAxis); gdouble getTolerancePosition(); gdouble getTolerancePrincipalAxis(); void buildStandardOrientationDlg(gint numberOfAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z); #endif /* __GABEDIT_MOLECULESYMMETRYINTERFACE_H__ */ GabeditSrc250/src/Symmetry/SOperations.c0000644000175100017510000003701013130665226020527 0ustar alloucheallouche/* SOperations.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "../Common/Global.h" #include "../Symmetry/SOperations.h" /************************************************************************************************************/ static void addOperation(SOperations* operations, gint number, gchar* type, gint degree); static void addSOperation(SOperations* operations, SOperation* operation); static GList* getSOperations(SOperations* operations); static gint size(SOperations* operations); static SOperation get(SOperations* operations, gint i); static SOperations copy(SOperations* operations); static void clear(SOperations* operations); static void addSOperations(SOperations* operations, SOperations* operations2); static void set(SOperations* operations, gint i, SOperation* operation); static gchar* toString(SOperations* operations); /************************************************************************************************************/ SOperations newSOperations() { SOperations operations; operations.listOfSOperations = NULL; operations.nSOperations = 0; sprintf(operations.str," "); /* methods */ operations.addOperation = addOperation; operations.addSOperation = addSOperation; operations.getSOperations = getSOperations; operations.size = size; operations.get = get; operations.copy = copy; operations.clear = clear; operations.addSOperations = addSOperations; operations.set = set; operations.toString = toString; return operations; } /************************************************************************************************************/ SOperations newSOperationsSize(gint n) { SOperations operations = newSOperations(); gint i; for(i=0;ilistOfSOperations = g_list_append(operations->listOfSOperations, a); operations->nSOperations++; } /************************************************************************************************************/ static void addSOperation(SOperations* operations, SOperation* operation) { SOperation* a = g_malloc(sizeof(SOperation)); *a = *operation; operations->listOfSOperations = g_list_append(operations->listOfSOperations, a); operations->nSOperations++; } /************************************************************************************************************/ static GList* getSOperations(SOperations* operations) { return operations->listOfSOperations; } /************************************************************************************************************/ static gint size(SOperations* operations) { return operations->nSOperations; } /************************************************************************************************************/ static SOperation get(SOperations* operations, gint i) { GList* l = NULL;; gint j = 0; if(!operations) return newSOperation(1,"E",1); for( l = operations->listOfSOperations; l != NULL; l = l->next, j++) if(j==i) return *(SOperation*) l->data; return newSOperation(1,"E",1); } /************************************************************************************************************/ static SOperations copy(SOperations* operations) { SOperations noperations = newSOperations(); GList* l = NULL;; for( l = operations->listOfSOperations; l != NULL; l = l->next) noperations.addSOperation(&noperations, (SOperation*) l->data); return noperations; } /************************************************************************************************************/ static void clear(SOperations* operations) { GList* l = NULL;; for( l = operations->listOfSOperations; l != NULL; l = l->next) if( l->data) g_free(l->data); g_list_free(operations->listOfSOperations); operations->listOfSOperations = NULL; operations->nSOperations = 0; } /************************************************************************************************************/ static void addSOperations(SOperations* operations, SOperations* operations2) { GList* l = NULL;; for( l = operations2->listOfSOperations; l != NULL; l = l->next) operations->addSOperation(operations, (SOperation*) l->data); } /************************************************************************************************************/ static void set(SOperations* operations, gint i, SOperation* operation) { GList* l = NULL;; gint j = 0; for( l = operations->listOfSOperations; l != NULL; l = l->next, j++) if(j==i) { *(SOperation*) l->data = *operation; return; } } /************************************************************************************************************/ static gchar* toString(SOperations* operations) { sprintf(operations->str," "); GList* l = NULL;; for( l = operations->listOfSOperations; l != NULL; l = l->next) { SOperation* o =(SOperation*) l->data; strcat(operations->str, o->toString(o)); } return operations->str; } GabeditSrc250/src/Symmetry/Element.c0000644000175100017510000003475213130665226017664 0ustar alloucheallouche/* Point3D.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ /* reference : Largent, RJ, Polik, WF, Schmidt, JR, J. Comput Chem. 33 (2012) 1637-1642 */ #include "../../Config.h" #include #include "../Common/Global.h" #include "../Symmetry/Element.h" /************************************************************************************************************/ static void setERROR(Element* e, gdouble ERROR); static void setDotTolerance(Element* e, gdouble DOT_TOLERANCE); static void setDistance(Element* e, gdouble distance); static double getDistance(Element* e); static gchar* getName(Element* e); static gint getDegree(Element* e); static gboolean equals(Element* e, Element* other); static gboolean eq(Element* e, gdouble d1, gdouble d2); static gboolean eqPoint(Element* e, Point3D* p1, Point3D* p2); static gboolean eqAxes(Element* e, Point3D* p1, Point3D* p2); static gint getNumUniqueOperations(Element* e); static Point3D doInversion(Element* e, Point3D* before); static Point3D* getPosition(Element* e); static Point3D* getPoint(Element* e); static Point3D* getNormal(Element* e); static Point3D* getAxis(Element* e); static Point3D doReflection(Element* e, Point3D* before); static Point3D doUnit(Element* e, Point3D* before); static Point3D doRotation(Element* e, Point3D* before); static Point3D doImproperRotation(Element* e, Point3D* before); static SAtom doOperationSAtom(Element* element, SAtom* oldAtom); static gchar* toString(Element* element); /************************************************************************************************************/ Element newElement() { Element e; gint i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) e.m[i][j] = 0.0; for(i=0;i<3;i++) e.m[i][i] = 1.0; e.type = INVERSION; e.ERROR = 0.2; e.DOT_TOLERANCE = 0.017365 * 2; e.GABEDIT_C_INFINITY = -1; e.distance = -1; sprintf(e.name,"E"); e.point = newPoint3D(); e.normal = newPoint3Dxyz(0,0,1); e.axis = newPoint3Dxyz(0,0,1); e.n = 1; e.numUniqueOperations = 1; /* methods */ e.getDistance = getDistance; e.setDistance = setDistance; e.setERROR = setERROR; e.setDotTolerance = setDotTolerance; e.getNumUniqueOperations = getNumUniqueOperations; e.getName = getName; e.getDegree = getDegree; e.equals = equals; e.eqPoint = eqPoint; e.eqAxes = eqAxes; e.getPosition = getPosition; e.getPoint = getPoint; e.getNormal = getNormal; e.getAxis = getAxis; e.doOperation = doUnit; e.doOperationSAtom = doOperationSAtom; e.toString = toString; return e; } /************************************************************************************************************/ Element newElementInversion(Point3D* center) { Element e = newElement(); e.point = *center; e.doOperation = doInversion; sprintf(e.name,"i"); e.numUniqueOperations = 1; return e; } /************************************************************************************************************/ Element newElementReflection(Point3D* center, Point3D* normal) { Element e = newElement(); e.point = *center; e.doOperation = doReflection; e.type = REFLECTION; sprintf(e.name,"sigma"); e.normal = *normal; e.normal.unit(&e.normal); gdouble a = e.normal.x; gdouble b = e.normal.y; gdouble c = e.normal.z; e.m[0][0] = -(a * a) + b * b + c * c; e.m[0][1] = -2 * a * b; e.m[0][2] = -2 * a *c; e.m[1][0] = -2 * a * b; e.m[1][1] = a * a - b * b + c * c; e.m[1][2] = -2 * b * c; e.m[2][0] = -2 * a * c; e.m[2][1] = -2 * b * c; e.m[2][2] = a * a + b * b - c * c; return e; } /************************************************************************************************************/ Element newElementRotation(Point3D* center, Point3D* axis, gint n) { Element e = newElement(); gint i; e.type = ROTATION; e.point = *center; e.axis = *axis; e.axis.unit(&e.axis); e.n = n; if(n == e.GABEDIT_C_INFINITY) e.distance = 0; if(n == -1) sprintf(e.name,"Cinf"); else sprintf(e.name,"C%d", n); e.numUniqueOperations = 1; for(i=2; inumUniqueOperations; } /************************************************************************************************************/ static void setDistance(Element* e, gdouble distance) { e->distance = distance; } /************************************************************************************************************/ static void setERROR(Element* e, gdouble ERROR) { e->ERROR = ERROR; } /************************************************************************************************************/ static void setDotTolerance(Element* e, gdouble DOT_TOLERANCE) { e->DOT_TOLERANCE = DOT_TOLERANCE; } /************************************************************************************************************/ static double getDistance(Element* e) { return e->distance; } /************************************************************************************************************/ static gchar* getName(Element* e) { return e->name; } /************************************************************************************************************/ static gint getDegree(Element* e) { return e->n; } /************************************************************************************************************/ static Point3D* getPosition(Element* e) { return &e->point; } /************************************************************************************************************/ static Point3D* getPoint(Element* e) { return &e->point; } /************************************************************************************************************/ static Point3D* getNormal(Element* e) { return &e->normal; } /************************************************************************************************************/ static Point3D* getAxis(Element* e) { return &e->axis; } /************************************************************************************************************/ static gboolean equals(Element* e, Element* other) { if(!e || !other) return FALSE; return !strcmp(getName(e), getName(other)) && eqPoint(e, &e->point, &other->point) && eqAxes(e, &e->normal, &other->normal) && eqAxes(e, &e->axis, &other->axis) && e->n == other->n; } /************************************************************************************************************/ static gboolean eq(Element* e, gdouble d1, gdouble d2) { return fabs(d1 - d2) < e->ERROR; } /************************************************************************************************************/ static gboolean eqPoint(Element* e, Point3D* p1, Point3D* p2) { return eq(e,p1->x, p2->x) && eq(e,p1->y, p2->y) && eq(e,p1->z, p2->z); } /************************************************************************************************************/ static gboolean eqAxes(Element* e, Point3D* p1, Point3D* p2) { return 1.0 - fabs(p1->dotProd(p1,p2)) < e->DOT_TOLERANCE; } /************************************************************************************************************/ static Point3D doInversion(Element* e, Point3D* before) { Point3D newPos = newPoint3D(); newPos.x = 2 * e->point.x - before->x; newPos.y = 2 * e->point.y - before->y; newPos.z = 2 * e->point.z - before->z; return newPos; } /************************************************************************************************************/ static Point3D doReflection(Element* e, Point3D* before) { Point3D oldCoords = before->sub(before,&e->point); Point3D newCoords = newPoint3D(); newCoords.x = e->m[0][0]*oldCoords.x + e->m[0][1]*oldCoords.y + e->m[0][2]*oldCoords.z; newCoords.y = e->m[1][0]*oldCoords.x + e->m[1][1]*oldCoords.y + e->m[1][2]*oldCoords.z; newCoords.z = e->m[2][0]*oldCoords.x + e->m[2][1]*oldCoords.y + e->m[2][2]*oldCoords.z; newCoords = newCoords.add(&newCoords,&e->point); return newCoords; } /************************************************************************************************************/ static Point3D doRotation(Element* e, Point3D* before) { if(e->n == e->GABEDIT_C_INFINITY) return *before; else { Point3D oldCoords = before->sub(before,&e->point); Point3D newCoords = newPoint3D(); newCoords.x = e->m[0][0]*oldCoords.x + e->m[0][1]*oldCoords.y + e->m[0][2]*oldCoords.z; newCoords.y = e->m[1][0]*oldCoords.x + e->m[1][1]*oldCoords.y + e->m[1][2]*oldCoords.z; newCoords.z = e->m[2][0]*oldCoords.x + e->m[2][1]*oldCoords.y + e->m[2][2]*oldCoords.z; newCoords = newCoords.add(&newCoords,&e->point); return newCoords; } } /************************************************************************************************************/ static Point3D doImproperRotation(Element* e, Point3D* before) { Point3D oldCoords = before->sub(before,&e->point); Point3D newCoords = newPoint3D(); if(e->n==0) return newCoords; gdouble a = e->axis.x; gdouble b = e->axis.y; gdouble c = e->axis.z; gdouble angle = 2 * M_PI / e->n; gdouble cs = cos(angle); gdouble sn = sin(angle); e->m[0][0] = -(a * a) + b * b + c * c; e->m[0][1] = -2 * a * b; e->m[0][2] = -2 * a *c; e->m[1][0] = -2 * a * b; e->m[1][1] = a * a - b * b + c * c; e->m[1][2] = -2 * b * c; e->m[2][0] = -2 * a * c; e->m[2][1] = -2 * b * c; e->m[2][2] = a * a + b * b - c * c; newCoords.x = e->m[0][0]*oldCoords.x + e->m[0][1]*oldCoords.y + e->m[0][2]*oldCoords.z; newCoords.y = e->m[1][0]*oldCoords.x + e->m[1][1]*oldCoords.y + e->m[1][2]*oldCoords.z; newCoords.z = e->m[2][0]*oldCoords.x + e->m[2][1]*oldCoords.y + e->m[2][2]*oldCoords.z; Point3D axis = e->axis; e->m[0][0] = cs + (1 - cs) * axis.x * axis.x; e->m[0][1] = (1 - cs) * axis.x * axis.y - sn * axis.z; e->m[0][2] = (1 - cs) * axis.x * axis.z + sn * axis.y; e->m[1][0] = (1 - cs) * axis.x * axis.y + sn * axis.z; e->m[1][1] = cs + (1 - cs) * axis.y * axis.y; e->m[1][2] = (1 - cs) * axis.z * axis.y - sn * axis.x; e->m[2][0] = (1 - cs) * axis.x * axis.z - sn * axis.y; e->m[2][1] = (1 - cs) * axis.y * axis.z + sn * axis.x; e->m[2][2] = cs + (1 - cs) * axis.z * axis.z; Point3D finalCoords = newPoint3D(); finalCoords.x = e->m[0][0]*newCoords.x + e->m[0][1]*newCoords.y + e->m[0][2]*newCoords.z; finalCoords.y = e->m[1][0]*newCoords.x + e->m[1][1]*newCoords.y + e->m[1][2]*newCoords.z; finalCoords.z = e->m[2][0]*newCoords.x + e->m[2][1]*newCoords.y + e->m[2][2]*newCoords.z; finalCoords = finalCoords.add(&finalCoords,&e->point); return finalCoords; } /************************************************************************************************************/ static SAtom doOperationSAtom(Element* e, SAtom* before) { SAtom a = *before; Point3D oldPosition = a.getPosition(&a); Point3D newPosition = e->doOperation(e, &oldPosition); a.setPosition(&a, &newPosition); return a; } /************************************************************************************************************/ static gchar* toString(Element* e) { static gchar tmp[1024]; static gchar n[1024]; sprintf(tmp, " "); if(e->type==ROTATION) strcat(tmp,"Rotation "); if(e->type==IMPROPERROTATION) strcat(tmp,"Improper Rotation "); if(e->type==REFLECTION) strcat(tmp,"Reflection "); if(e->type==INVERSION) strcat(tmp,"Inverion "); strcat(tmp, "Point "); strcat(tmp, e->point.toString(&e->point)); strcat(tmp, "Normal "); strcat(tmp, e->normal.toString(&e->normal)); strcat(tmp, "Axis "); strcat(tmp, e->axis.toString(&e->axis)); sprintf(n,"%s n = %d",tmp,e->n); sprintf(tmp,"%s",n); return tmp; } GabeditSrc250/src/Symmetry/Symmetry.c0000644000175100017510000012531413130665226020117 0ustar alloucheallouche/* Symmetry.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ /* reference : Largent, RJ, Polik, WF, Schmidt, JR, J. Comput Chem. 33 (2012) 1637-1642 */ #include "../../Config.h" #include #include "../Common/Global.h" #include "../Symmetry/Symmetry.h" /************************************************************************************************************/ static Elements getElements(Symmetry* symmetry); static PointGroups getPointGroups(Symmetry* symmetry); static SMolecule getMolecule(Symmetry* symmetry); static void initSymmetry(Symmetry* symmetry); static PointGroups findAllPointGroups(Symmetry* symmetry); static void findProperRotationAxes(Symmetry* symmetry); static void findImproperRotationAxes(Symmetry* symmetry); static void findReflectionPlanes(Symmetry* symmetry); static void findSymmetryElements(Symmetry* symmetry); static void findPointGroups(Symmetry* symmetry); static void findInversionCenter(Symmetry* symmetry); static Point3D findCenterOfMass(SMolecule* mol); static void findPrincipalAxes(SMolecule* mol, Point3D centerOfMass, gdouble momentsOutput[], Point3D axesOutput[]); static gboolean addElement(Symmetry* symmetry, Element* elem); static gdouble testSymmetryElement(Symmetry* symmetry, Element* elem); static gboolean isInertiallyAllowed(Symmetry* symmetry, Point3D* axis); static void printPointGroupResults(Symmetry* symmetry); static void getPrincipalAxisRotations(Symmetry* symmetry); static void getAtomRotations(Symmetry* symmetry); static void getMidpointRotations(Symmetry* symmetry); static void getFaceRotations(Symmetry* symmetry); static void getRotationNormals(Symmetry* symmetry); static void getMidpointNormals(Symmetry* symmetry); static void findReflectionPlanes(Symmetry* symmetry); static gchar* findSinglePointGroup(Symmetry* symmetry); static void printElementResults(Symmetry* symmetry); static SMolecule getUniqueMolecule(Symmetry* symmetry); static SMolecule getSymmetrizeMolecule(Symmetry* symmetry); static void freeSymmetry(Symmetry* symmetry); static void setMaxDegree(Symmetry* symmetry, gint maxDegree); static void setMomentTolerance(Symmetry* symmetry, gdouble tolerance); static gchar* getGroupName(Symmetry* symmetry); /************************************************************************************************************/ static void initSymmetry(Symmetry* symmetry) { gint i; symmetry->GAUSSIAN_SYMMETRY_TOLERANCE = 1e-6; symmetry->MAX_DEGREE = 6; symmetry->DEFAULT_TOLERANCE = 0.1; symmetry->MOMENT_TOLERANCE = 0.1; symmetry->DOT_TOLERANCE = 0.017365 * 2; symmetry->GABEDIT_T_APOTHEM = 0.3333333333; symmetry->elements = newElements(); symmetry->molecule = newSMolecule(); symmetry->pointGroups = newPointGroups(); symmetry->rotations = newElements(); symmetry->primaryAxis = NULL; symmetry->tolerance = symmetry->DEFAULT_TOLERANCE; symmetry->centerOfMass = newPoint3D(); for(i=0;i<3;i++) { symmetry->principalAxes[i] = newPoint3D(); symmetry->principalMoments[i] = 0; } symmetry->degeneracy = 1; symmetry->getElements = getElements; symmetry->getMolecule = getMolecule; symmetry->getPointGroups = getPointGroups; symmetry->findAllPointGroups = findAllPointGroups; symmetry->findProperRotationAxes = findProperRotationAxes; symmetry->findImproperRotationAxes = findImproperRotationAxes; symmetry->findReflectionPlanes = findReflectionPlanes; symmetry->findSymmetryElements = findSymmetryElements; symmetry->findPointGroups = findPointGroups; symmetry->findInversionCenter = findInversionCenter; symmetry->printPointGroupResults = printPointGroupResults; symmetry->findSinglePointGroup = findSinglePointGroup; symmetry->printElementResults = printElementResults; symmetry->getUniqueMolecule=getUniqueMolecule; symmetry->getSymmetrizeMolecule=getSymmetrizeMolecule; symmetry->free=freeSymmetry; symmetry->clear=freeSymmetry; symmetry->setMaxDegree=setMaxDegree; symmetry->setMomentTolerance= setMomentTolerance; symmetry->getGroupName = getGroupName; } /************************************************************************************************************/ Symmetry newSymmetry(SMolecule* mol,gdouble tolerance) { Symmetry symmetry; initSymmetry(&symmetry); if(tolerance<=0) tolerance = 0.1; symmetry.tolerance = tolerance; symmetry.molecule = mol->getCopy(mol); return symmetry; } /************************************************************************************************************/ static PointGroups findAllPointGroups(Symmetry* symmetry) { SMolecule* mol = &symmetry->molecule; if(mol->size(mol) < 2) return newPointGroups(); symmetry->findSymmetryElements(symmetry); symmetry->printElementResults(symmetry); symmetry->findPointGroups(symmetry); return symmetry->pointGroups; } /************************************************************************************************************/ /** * Calls delegate methods for calculating the physical properties of the molecule * and searching for the individual symmetry elements. */ static void findSymmetryElements(Symmetry* symmetry) { Point3D tempPrincipalAxes[3]; gboolean isLinear = FALSE; gint i; SMolecule* mol = &symmetry->molecule; gdouble minMoment; gdouble maxMoment; gdouble momentDiff; symmetry->elements = newElements(); symmetry->centerOfMass = findCenterOfMass(mol); findPrincipalAxes(mol, symmetry->centerOfMass, symmetry->principalMoments, tempPrincipalAxes); for(i=0; i<3; i++) { symmetry->principalAxes[i] = newPoint3Dxyz(tempPrincipalAxes[i].x, tempPrincipalAxes[i].y, tempPrincipalAxes[i].z); } symmetry->degeneracy = 1; minMoment = fmin(symmetry->principalMoments[0], fmin(symmetry->principalMoments[1], symmetry->principalMoments[2])); maxMoment = fmax(symmetry->principalMoments[0], fmax(symmetry->principalMoments[1], symmetry->principalMoments[2])); momentDiff = (maxMoment - minMoment) / maxMoment; if(momentDiff < symmetry->MOMENT_TOLERANCE) symmetry->degeneracy = 3; else if(fabs(symmetry->principalMoments[0] - symmetry->principalMoments[1]) / maxMoment < symmetry->MOMENT_TOLERANCE || fabs(symmetry->principalMoments[1] - symmetry->principalMoments[2]) / maxMoment < symmetry->MOMENT_TOLERANCE || fabs(symmetry->principalMoments[0] - symmetry->principalMoments[2]) / maxMoment < symmetry->MOMENT_TOLERANCE) { symmetry->degeneracy = 2; if(minMoment < symmetry->MOMENT_TOLERANCE) { gint minPos = symmetry->principalMoments[1] == minMoment ? 1 : symmetry->principalMoments[2] == minMoment ? 2 : 0; Element infRot = newElementRotation(&symmetry->centerOfMass, &symmetry->principalAxes[minPos], -1); gdouble distance = 0; gint i; for(i = 0; isize(mol); i++) { SAtom* atom = mol->get(mol,i); Point3D pos = atom->getPosition(atom); Point3D* rot = infRot.getPoint(&infRot); Point3D* axis = infRot.getAxis(&infRot); Point3D closP = pos.closestPointOnAxis(&pos, rot, axis); distance += pos.distance(&pos, &closP); } distance /= mol->size(mol); infRot.setDistance(&infRot,distance); symmetry->elements.addElement(&symmetry->elements, &infRot); isLinear = TRUE; } } symmetry->rotations = newElements(); symmetry->findInversionCenter(symmetry); if(!isLinear) { symmetry->findProperRotationAxes(symmetry); symmetry->findImproperRotationAxes(symmetry); symmetry->findReflectionPlanes(symmetry); } } /************************************************************************************************************/ static Point3D findCenterOfMass(SMolecule* mol) { gdouble totalMass = 0; gdouble comX = 0; gdouble comY = 0; gdouble comZ = 0; gint i; for(i = 0; isize(mol); i++) { SAtom* a = mol->get(mol,i); gdouble m = a->getMass(a); comX += a->getPosition(a).x * m; comY += a->getPosition(a).y * m; comZ += a->getPosition(a).z * m; totalMass += m; } return newPoint3Dxyz(comX/totalMass, comY/totalMass, comZ/totalMass); } /************************************************************************************************************/ static void findInversionCenter(Symmetry* symmetry) { Element inv = newElementInversion(&symmetry->centerOfMass); testSymmetryElement(symmetry, &inv); addElement(symmetry, &inv); } /************************************************************************************************************/ #define EPSILON 1.0E-12 #define SQU(x,y,z) ((x)*(x) + (y)*(y) + (z)*(z)) /* Jacobi diagonalisation of 3x3 symmetric matrix */ /* matrix mat stored like 0 3 5 1 4 2 */ static void jacobi(gdouble *mat, gdouble evec[3][3]) { gdouble t,s,u; gdouble a; evec[0][1] = evec[0][2] = evec[1][0] = 0.0; /* unity matrix */ evec[1][2] = evec[2][0] = evec[2][1] = 0.0; /* unity matrix */ evec[0][0] = evec[1][1] = evec[2][2] = 1.0; /* do jacobi sweep */ while(SQU(mat[3],mat[4],mat[5]) > EPSILON) { /* set mat[3] to zero */ if (mat[3]*mat[3] > EPSILON) { t = (mat[1]-mat[0])/(2.*mat[3]); t = (t>0) ? 1./(t+sqrt(t*t+1.)) : -1./(-t+sqrt(t*t+1.)); s = t/(sqrt(t*t+1.)); u = s*t/(s+t); mat[0] -= t*mat[3]; mat[1] += t*mat[3]; a = mat[5]; mat[5] -= s*(mat[4]+u*mat[5]); mat[4] += s*( a -u*mat[4]); mat[3] = 0.; a = evec[0][0]; evec[0][0] -= s*(evec[0][1]+u*evec[0][0]); evec[0][1] += s*( a -u*evec[0][1]); a = evec[1][0]; evec[1][0] -= s*(evec[1][1]+u*evec[1][0]); evec[1][1] += s*( a -u*evec[1][1]); a = evec[2][0]; evec[2][0] -= s*(evec[2][1]+u*evec[2][0]); evec[2][1] += s*( a -u*evec[2][1]); } /* set mat[5] to zero */ if (mat[5]*mat[5] > EPSILON) { t = (mat[2]-mat[0])/(2.*mat[5]); t = (t>0) ? 1./(t+sqrt(t*t+1.)) : -1./(-t+sqrt(t*t+1.)); s = t/(sqrt(t*t+1.)); u = s*t/(s+t); mat[0] -= t*mat[5]; mat[2] += t*mat[5]; a = mat[3]; mat[3] -= s*(mat[4]+u*mat[3]); mat[4] += s*( a -u*mat[4]); mat[5] = 0.; a = evec[0][0]; evec[0][0] -= s*(evec[0][2]+u*evec[0][0]); evec[0][2] += s*( a -u*evec[0][2]); a = evec[1][0]; evec[1][0] -= s*(evec[1][2]+u*evec[1][0]); evec[1][2] += s*( a -u*evec[1][2]); a = evec[2][0]; evec[2][0] -= s*(evec[2][2]+u*evec[2][0]); evec[2][2] += s*( a -u*evec[2][2]); } /* set mat[4] to zero */ if (mat[4]*mat[4] > EPSILON) { t = (mat[2]-mat[1])/(2.*mat[4]); t = (t>0) ? 1./(t+sqrt(t*t+1.)) : -1./(-t+sqrt(t*t+1.)); s = t/(sqrt(t*t+1.)); u = s*t/(s+t); mat[1] -= t*mat[4]; mat[2] += t*mat[4]; a = mat[3]; mat[3] -= s*(mat[5]+u*mat[3]); mat[5] += s*( a -u*mat[5]); mat[4] = 0.; a = evec[0][1]; evec[0][1] -= s*(evec[0][2]+u*evec[0][1]); evec[0][2] += s*( a -u*evec[0][2]); a = evec[1][1]; evec[1][1] -= s*(evec[1][2]+u*evec[1][1]); evec[1][2] += s*( a -u*evec[1][2]); a = evec[2][1]; evec[2][1] -= s*(evec[2][2]+u*evec[2][1]); evec[2][2] += s*( a -u*evec[2][2]); } } } /************************************************************************************************************/ static void swap(gint i,gint j,gdouble* mat, gdouble vecs[3][3]) { gint k; gdouble t; t = mat[i]; mat[i] = mat[j]; mat[j] = t; for(k=0;k<3;k++) { t = vecs[k][i]; vecs[k][i] = vecs[k][j]; vecs[k][j] = t; } } /********************************************************************************************************************************************/ static void findPrincipalAxes(SMolecule* mol, Point3D centerOfMass, gdouble inertialMoment[], Point3D axesOutput[]) { gint i; gdouble mat[6]; gdouble axes[3][3]; for(i=0;i<6;i++) mat[i]=0.0; /* build up inertial tensor */ for(i = 0; isize(mol); i++) { SAtom* atom = mol->get(mol,i); Point3D a = atom->getPosition(atom); gdouble m = atom->getMass(atom); mat[0] += m*(pow(a.y-centerOfMass.y,2)+pow(a.z-centerOfMass.z,2)); mat[1] += m*(pow(a.z-centerOfMass.z,2)+pow(a.x-centerOfMass.x,2)); mat[2] += m*(pow(a.x-centerOfMass.x,2)+pow(a.y-centerOfMass.y,2)); mat[3] -= m*(a.x-centerOfMass.x)*(a.y-centerOfMass.y); mat[4] -= m*(a.y-centerOfMass.y)*(a.z-centerOfMass.z); mat[5] -= m*(a.x-centerOfMass.x)*(a.z-centerOfMass.z); } jacobi(mat,axes);/* diagonalize tensor */ /* sort eigenvalues */ if (mat[0]elements; } /************************************************************************************************************/ static PointGroups getPointGroups(Symmetry* symmetry) { return symmetry->pointGroups; } /************************************************************************************************************/ static SMolecule getMolecule(Symmetry* symmetry) { return symmetry->molecule; } /************************************************************************************************************/ static gboolean addElement(Symmetry* symmetry, Element* elem) { Elements* elements = &symmetry->elements; if(elem->getDistance(elem) < symmetry->tolerance) { gboolean found = FALSE; gint i; for(i=0; isize(elements); i++) { Element check = elements->get(elements,i); if(elem->equals(elem,&check)) { found = TRUE; if(elem->getDistance(elem) < check.getDistance(&check)) { elements->remove(elements, &check); elements->addElement(elements, elem); return TRUE; } } } if(found == FALSE) { elements->addElement(elements, elem); return TRUE; } } if(!elements->contains(elements, elem, symmetry->tolerance) && elem->getDistance(elem) < symmetry->tolerance) { elements->addElement(elements, elem); return TRUE; } return FALSE; } /************************************************************************************************************/ static void printElementResults(Symmetry* symmetry) { Elements* elements = &symmetry->elements; if(elements->size(elements) > 0) { gint i; /* printf("\nELEMENTS FOUND:\n");*/ printf("\nELEMENTS FOUND: "); for(i=0; isize(elements); i++) { Element elem = elements->get(elements,i); printf("%s ", elem.getName(&elem)); /* printf("\t%s with a rating of %f\n", elem.getName(&elem), elem.getDistance(&elem));*/ /* printf("\t%s with a rating of %f\n", elem.toString(&elem), elem.getDistance(&elem));*/ } printf("\n\n"); } else printf("\n--- NO ELEMENTS FOUND! --- \n"); } /************************************************************************************************************/ static void printPointGroupResults(Symmetry* symmetry) { PointGroup finalGroup = symmetry->pointGroups.get(&symmetry->pointGroups,0); gchar* exact = "==========================="; if(finalGroup.getNumExtraElements(&finalGroup) == 0) printf("%s\n%2d %s : %f \n%s\n",exact, 1, finalGroup.getName(&finalGroup), finalGroup.getDistance(&finalGroup), exact); else printf("\n%2d %s : %f \n", 1, finalGroup.getName(&finalGroup), finalGroup.getDistance(&finalGroup)); { gint i; for(i=1; ipointGroups.size(&symmetry->pointGroups); i++) { finalGroup = symmetry->pointGroups.get(&symmetry->pointGroups,i); printf("%2d %s : %f \n", i+1, finalGroup.getName(&finalGroup), finalGroup.getDistance(&finalGroup)); } } printf("\n"); } /************************************************************************************************************/ static gdouble testSymmetryElement(Symmetry* symmetry, Element* elem) { gdouble totalDist = 0; gdouble subTotalDist = 0; gint numOperations = 1; gint i; SMolecule* mol = &symmetry->molecule; GList* atoms = mol->getAtoms(mol); if(elem->getDegree(elem) > 1) numOperations = elem->getDegree(elem) - 1; for(i = 0; i < numOperations; i++) { gint j; for(j = 0; jsize(mol); j++) { SAtom* before = mol->get(mol,j); SAtom after = elem->doOperationSAtom(elem,before); SAtom closestAtom = after.findClosestAtom(&after, atoms); gdouble shortestDist = after.distance(&after,&closestAtom); gdouble dist = 1.0; if (elem->type == INVERSION) { Point3D p = closestAtom.getPosition(&closestAtom); dist = p.distance(&p,&symmetry->centerOfMass); } else if (elem->type == REFLECTION) { Point3D ca = closestAtom.getPosition(&closestAtom); Point3D* pe = elem->getPoint(elem); Point3D* ne = elem->getNormal(elem); Point3D closestPoint = ca.closestPointInPlane(&ca, pe, ne); dist = ca.distance(&ca,&closestPoint); } else if (elem->type == ROTATION) { Point3D ca = closestAtom.getPosition(&closestAtom); Point3D* pe = elem->getPoint(elem); Point3D* ae = elem->getAxis(elem); Point3D closestPoint = ca.closestPointOnAxis(&ca, pe, ae); dist = ca.distance(&ca,&closestPoint); } if(dist > 1) shortestDist /= dist; subTotalDist = fmax(subTotalDist, shortestDist); } if(subTotalDist > symmetry->tolerance) { elem->setDistance(elem,subTotalDist); return subTotalDist; } totalDist += subTotalDist; } totalDist /= numOperations; elem->setDistance(elem,totalDist); return totalDist; } /************************************************************************************************************/ static gboolean isInertiallyAllowed(Symmetry* symmetry, Point3D* axis) { gint degeneracy = symmetry->degeneracy; Point3D point = *axis; if(degeneracy == 3) return TRUE; else { gdouble dotproducts[3]; gdouble maxDotprod = 0; gdouble minDotprod = 1; Point3D checkPoint = point; gint i; checkPoint.unit(&checkPoint); for(i=0; i<3; i++) { dotproducts[i] = fabs(checkPoint.dotProd(&checkPoint,&symmetry->principalAxes[i])); if(dotproducts[i] > maxDotprod) maxDotprod = dotproducts[i]; if(dotproducts[i] < minDotprod) minDotprod = dotproducts[i]; } if(fabs(minDotprod) < symmetry->DOT_TOLERANCE) { if(degeneracy == 2) return TRUE; else if(fabs(1.0 - maxDotprod) < symmetry->DOT_TOLERANCE) return TRUE; } return FALSE; } } /************************************************************************************************************/ static void findPointGroups(Symmetry* symmetry) { SMolecule* mol = &symmetry->molecule; symmetry->pointGroups = newPointGroups(); PointGroup testGrp = newPointGroup(NULL,NULL,"C1"); gchar** listOfGroups = testGrp.getListOfGroups(&testGrp); gint j; Elements* elements = &symmetry->elements; SOperations operations; GList* l; GList* listOp; GList* listE; PointGroup ptGrp; gdouble ptGrpDistance = 0; for(j = 0; listOfGroups[j] != NULL; j++) { Elements foundElements = elements->getCopy(elements); Elements finalElements = newElements(); gint missingElements = 0; gint extraElements = 0; gint totalOperations = 0; Element* groupPrimaryAxis = NULL; gboolean groupPrimaryAxisSet = FALSE; if(symmetry->primaryAxis) copyElement(symmetry->primaryAxis, &groupPrimaryAxis); testGrp = newPointGroup(NULL,NULL,listOfGroups[j]); operations = getSOperationsForOneGroup(listOfGroups[j]); if(testGrp.isCubic(&testGrp)) { groupPrimaryAxis = NULL; groupPrimaryAxisSet = TRUE; } listOp = operations.getSOperations(&operations); for(l = listOp; l != NULL; l = l->next) { SOperation testOp = *(SOperation*)l->data; gboolean moreElements = TRUE; gint count = 1; gint num = testOp.getNumber(&testOp); gboolean coincidentWithPrimary = TRUE; while(count <= num && moreElements) { Element* bestElement = NULL; gint i; moreElements = FALSE; for(i=0; igetDistance(bestElement)) { if(groupPrimaryAxis != NULL) { Point3D* checkAxis = NULL; if(checkElement.type == ROTATION) checkAxis = checkElement.getAxis(&checkElement); else if(checkElement.type == REFLECTION) checkAxis = checkElement.getNormal(&checkElement); if(checkAxis != NULL) { if(coincidentWithPrimary) { Point3D* paxis = groupPrimaryAxis->getAxis(groupPrimaryAxis); if(1 - fabs(checkAxis->dotProd(checkAxis, paxis)) < symmetry->DOT_TOLERANCE) copyElement(&checkElement, &bestElement); } else { Point3D* paxis = groupPrimaryAxis->getAxis(groupPrimaryAxis); if(fabs(checkAxis->dotProd(checkAxis, paxis)) < symmetry->DOT_TOLERANCE) copyElement(&checkElement, &bestElement); } } else copyElement(&checkElement, &bestElement); } else copyElement(&checkElement, &bestElement); } } } if(bestElement != NULL) { if(bestElement->type==ROTATION && !groupPrimaryAxisSet) { copyElement(bestElement, &groupPrimaryAxis); groupPrimaryAxisSet = TRUE; } foundElements.remove(&foundElements, bestElement); finalElements.addElement(&finalElements, bestElement); count += bestElement->getNumUniqueOperations(bestElement); totalOperations += bestElement->getNumUniqueOperations(bestElement); moreElements = TRUE; g_free(bestElement); } else if(coincidentWithPrimary) { coincidentWithPrimary = FALSE; moreElements = TRUE; } if(moreElements == FALSE) missingElements += num - count + 1; } } if(groupPrimaryAxis) g_free(groupPrimaryAxis); listE = foundElements.getElements(&foundElements); for(l = listE; l != NULL; l = l->next) { Element* e = (Element*) l->data; extraElements += e->getNumUniqueOperations(e); } ptGrp = newPointGroup(&finalElements, mol, listOfGroups[j]); ptGrpDistance = 0; listE = finalElements.getElements(&finalElements); for(l = listE; l != NULL; l = l->next) { Element* e = (Element*) l->data; ptGrpDistance += e->getDistance(e); } ptGrp.setDistance(&ptGrp, ptGrpDistance/(finalElements.size(&finalElements) == 0 ? 1 : finalElements.size(&finalElements))); ptGrp.setNumExtraElements(&ptGrp, extraElements); ptGrp.setNumMissingElements(&ptGrp, missingElements); if(missingElements == 0) { gint index = 0; gint i; PointGroups* pgs = &symmetry->pointGroups; for(i=0; isize(pgs); i++) { PointGroup pg = pgs->get(pgs,i); gint ne = pg.getNumExtraElements(&pg); if(extraElements > ne) index++; else if(extraElements == ne) { if(ptGrp.getDistance(&ptGrp) > pg.getDistance(&pg)) index++; } else break; } pgs->addPointGroupPos(pgs,index, &ptGrp); } } symmetry->printPointGroupResults(symmetry); } /************************************************************************************************************/ static void findProperRotationAxes(Symmetry* symmetry) { gint degeneracy = symmetry->degeneracy; symmetry->rotations = newElements(); getPrincipalAxisRotations(symmetry); getAtomRotations(symmetry); getMidpointRotations(symmetry); if(degeneracy == 3) getFaceRotations(symmetry); if(degeneracy != 3) { if(symmetry->primaryAxis == NULL) { GList* listE = symmetry->elements.getElements(&symmetry->elements); GList* l; for(l = listE; l != NULL; l = l->next) { Element* rot = (Element*) l->data; if(symmetry->primaryAxis == NULL || rot->getDegree(rot) > symmetry->primaryAxis->getDegree(symmetry->primaryAxis)) { copyElement(rot, &symmetry->primaryAxis); } } } } else symmetry->primaryAxis = NULL; } /************************************************************************************************************/ static void getPrincipalAxisRotations(Symmetry* symmetry) { gint i,n; Element rot; for(i=0; i<3; i++) { Point3D pAxis = symmetry->principalAxes[i]; for(n=2; n<= symmetry->MAX_DEGREE; n++) { rot = newElementRotation(&symmetry->centerOfMass, &pAxis, n); testSymmetryElement(symmetry, &rot); if(addElement(symmetry, &rot)) { if(symmetry->primaryAxis == NULL || rot.getDegree(&rot) > symmetry->primaryAxis->getDegree(symmetry->primaryAxis)) { copyElement(&rot, &symmetry->primaryAxis); } symmetry->rotations.addElement(&symmetry->rotations, &rot); } } symmetry->rotations.addElementRotation(&symmetry->rotations, &symmetry->centerOfMass, &pAxis, 1); } } /************************************************************************************************************/ static void getAtomRotations(Symmetry* symmetry) { SMolecule* mol = &symmetry->molecule; gint i,n; Element rot; for(i=0;isize(mol); i++) { SAtom* atom = mol->get(mol,i); Point3D pos = atom->getPosition(atom); Point3D axis = pos.sub(&pos, &symmetry->centerOfMass); if(isInertiallyAllowed(symmetry, &axis)) { for(n=2; n<= symmetry->MAX_DEGREE; n++) { rot = newElementRotation(&symmetry->centerOfMass, &axis, n); testSymmetryElement(symmetry, &rot); if(addElement(symmetry, &rot)) { if(symmetry->rotations.contains(&symmetry->rotations, &rot, symmetry->tolerance)) symmetry->rotations.set(&symmetry->rotations, symmetry->rotations.indexOf(&symmetry->rotations, &rot), &rot); else symmetry->rotations.addElement(&symmetry->rotations, &rot); } } } } } /************************************************************************************************************/ static void getMidpointRotations(Symmetry* symmetry) { SMolecule* mol = &symmetry->molecule; gint nAtoms = mol->size(mol); gint i,j, n; gint degeneracy = symmetry->degeneracy; Element rot; int nR = 0; for(i=0; iget(mol,i); Point3D posfrom = from->getPosition(from); for(j=i+1; jget(mol,j); if(to->getNumber(to) == from->getNumber(from) && (degeneracy != 3 || to->distance(to,from) < 5)) { Point3D pos = to->getPosition(to); Point3D midPoint = pos.add(&pos,&posfrom); midPoint = midPoint.mult(&midPoint, 0.5); Point3D midAxis = midPoint.sub(&midPoint, &symmetry->centerOfMass); if(isInertiallyAllowed(symmetry, &midAxis)) { for(n=2; n<=symmetry->MAX_DEGREE; n+=2) { rot = newElementRotation(&symmetry->centerOfMass, &midAxis, n); testSymmetryElement(symmetry, &rot); if(addElement(symmetry, &rot)) { if(symmetry->rotations.contains(&symmetry->rotations, &rot, symmetry->tolerance)) { symmetry->rotations.set(&symmetry->rotations, symmetry->rotations.indexOf(&symmetry->rotations, &rot), &rot); } else { symmetry->rotations.addElement(&symmetry->rotations, &rot); nR++; } } } } } } } } /************************************************************************************************************/ static void getFaceRotations(Symmetry* symmetry) { GList* listR = symmetry->rotations.getElements(&symmetry->rotations); GList* l; gint n[] = {3, 5}; gint i,j,k; gint factor; gint c2sSize = 0; Element elemi; Element elemj; Point3D* axisi; Point3D* axisj; Point3D* axisk; Point3D distVector; Point3D midAxis; Element rot; Point3D* rot1; Point3D* rot2; gint polygon; gint nlength = sizeof(n)/sizeof(n[0]); Elements c2s = newElements(); for(l = listR; l != NULL; l = l->next) { Element* rot = (Element*) l->data; if(rot->getDegree(rot) == 2) c2s.addElement(&c2s, rot); } c2sSize = c2s.size(&c2s); if(c2sSize == 3) { for(i=0; iadd(axisi, axisj); midpoint = midpoint.mult(&midpoint, 0.5*factor); for(k=0; kGABEDIT_T_APOTHEM); midAxis = midpoint.sub(&midpoint, &distVector); rot = newElementRotation(&symmetry->centerOfMass, &midAxis, 3); testSymmetryElement(symmetry,&rot); if(addElement(symmetry, &rot)) { if(symmetry->rotations.contains(&symmetry->rotations, &rot, symmetry->tolerance)) symmetry->rotations.set(&symmetry->rotations, symmetry->rotations.indexOf(&symmetry->rotations, &rot), &rot); else symmetry->rotations.addElement(&symmetry->rotations, &rot); } } } } } } else { for(i=0; icrossProd(rot1,rot2); Element rot = newElementRotation(&symmetry->centerOfMass, &c12, n[polygon]); testSymmetryElement(symmetry, &rot); if(addElement(symmetry, &rot)) { if(symmetry->rotations.contains(&symmetry->rotations, &rot, symmetry->tolerance)) symmetry->rotations.set(&symmetry->rotations, symmetry->rotations.indexOf(&symmetry->rotations, &rot), &rot); else symmetry->rotations.addElement(&symmetry->rotations, &rot); } } } } } } /************************************************************************************************************/ static void findImproperRotationAxes(Symmetry* symmetry) { gint n; GList* listR = symmetry->rotations.getElements(&symmetry->rotations); GList* l; for(l = listR; l != NULL; l = l->next) { Element* rot = (Element*) l->data; for(n=1; n<=2; n++) { gint degree = rot->getDegree(rot) * n; if(degree > 2) { Point3D* point = rot->getPoint(rot); Point3D* axis = rot->getAxis(rot); Element impRot = newElementImproperRotation(point, axis, degree); testSymmetryElement(symmetry, &impRot); addElement(symmetry, &impRot); } } } } /************************************************************************************************************/ static void findReflectionPlanes(Symmetry* symmetry) { gboolean isTetrahedral = TRUE; gint degeneracy = symmetry->degeneracy; GList* listR = symmetry->rotations.getElements(&symmetry->rotations); GList* l; if(degeneracy == 3) { for(l = listR; l != NULL; l = l->next) { Element* elem = (Element*) l->data; if(!strcmp(elem->getName(elem),"S6")) { isTetrahedral = FALSE; break; } } if(!isTetrahedral) { gint i; for(i=0; irotations.size(&symmetry->rotations); i++) { Element elem = symmetry->rotations.get(&symmetry->rotations,i); if(elem.getDegree(&elem) != 2) { symmetry->rotations.remove(&symmetry->rotations,&elem); i--; } } } } getRotationNormals(symmetry); if(degeneracy != 3 || isTetrahedral) getMidpointNormals(symmetry); } /************************************************************************************************************/ static void getRotationNormals(Symmetry* symmetry) { GList* listR = symmetry->rotations.getElements(&symmetry->rotations); GList* l; for(l = listR; l != NULL; l = l->next) { Element* elem = (Element*) l->data; Point3D* point = elem->getPoint(elem); Point3D* axis = elem->getAxis(elem); Element ref = newElementReflection(point, axis); testSymmetryElement(symmetry, &ref); addElement(symmetry, &ref); } } /************************************************************************************************************/ static void getMidpointNormals(Symmetry* symmetry) { SMolecule* mol = &symmetry->molecule; gint nAtoms = mol->size(mol); gint i,j; gint degeneracy = symmetry->degeneracy; for(i=0; iget(mol,i); Point3D fromp = from->getPosition(from); fromp = fromp.sub(&fromp, &symmetry->centerOfMass); for(j=i+1; jget(mol,j); if(to->getNumber(to) == from->getNumber(from) && (degeneracy != 3 || to->distance(to,from) < 5)) { Point3D axis; Point3D crossProd; Point3D midPoint; Point3D top = to->getPosition(to); top = top.sub(&top, &symmetry->centerOfMass); midPoint = top.add(&top,&fromp); midPoint = midPoint.mult(&midPoint, 0.5); axis = fromp.crossProd(&fromp,&top); crossProd = axis.crossProd(&axis, &midPoint); if(isInertiallyAllowed(symmetry, &crossProd)) { if(crossProd.length(&crossProd) > 0.001) { Element ref = newElementReflection(&symmetry->centerOfMass, &crossProd); testSymmetryElement(symmetry, &ref); addElement(symmetry, &ref); } } } } } } /************************************************************************************************************/ static gchar* findSinglePointGroup(Symmetry* symmetry) { static gchar pointGroupGuess[100]; gdouble GUESS_TOLERANCE = 0.1; Point3D tempPrincipalAxes[3]; SMolecule* mol = &symmetry->molecule; gint nAtoms = mol->size(mol); gdouble minMoment; gdouble maxMoment; gdouble momentDiff; Element* primaryAxis = NULL; gint perpAxes = 0; gint perpPlanes = 0; gint i,j; Point3D orthogAxis; Element ref; Element rot; gint size; symmetry->tolerance = GUESS_TOLERANCE; sprintf(pointGroupGuess,"C1"); symmetry->elements = newElements(); if(nAtoms == 1) { sprintf(pointGroupGuess,"R3"); return pointGroupGuess; } symmetry->centerOfMass = findCenterOfMass(mol); findPrincipalAxes(mol, symmetry->centerOfMass, symmetry->principalMoments, tempPrincipalAxes); minMoment = fmin(symmetry->principalMoments[0], fmin(symmetry->principalMoments[1], symmetry->principalMoments[2])); maxMoment = fmax(symmetry->principalMoments[0], fmax(symmetry->principalMoments[1], symmetry->principalMoments[2])); momentDiff = (maxMoment - minMoment) / maxMoment; if(minMoment < symmetry->MOMENT_TOLERANCE) { gint index = 0; Point3D refAxis; Element ref; if(symmetry->principalMoments[1] == minMoment) index = 1; else if(symmetry->principalMoments[2] == minMoment) index = 2; refAxis = newPoint3D(tempPrincipalAxes[index].x, tempPrincipalAxes[index].y, tempPrincipalAxes[index].z); ref = newElementReflection(&symmetry->centerOfMass, &refAxis); testSymmetryElement(symmetry, &ref); sprintf(pointGroupGuess,"Cinfv"); if(addElement(symmetry, &ref)) sprintf(pointGroupGuess,"Dinfh"); return pointGroupGuess; } if(momentDiff < symmetry->MOMENT_TOLERANCE) return "cubic"; primaryAxis = NULL; for(i=0; i<3; i++) { Point3D pAxis = newPoint3Dxyz(tempPrincipalAxes[i].x, tempPrincipalAxes[i].y, tempPrincipalAxes[i].z); gint n; symmetry->principalAxes[i] = pAxis; for(n=2; n<= symmetry->MAX_DEGREE; n++) { rot = newElementRotation(&symmetry->centerOfMass, &pAxis, n); testSymmetryElement(symmetry, &rot); if(addElement(symmetry, &rot) && (primaryAxis == NULL || rot.getDegree(&rot) > primaryAxis->getDegree(primaryAxis))) { copyElement(&rot, &primaryAxis); } } Element ref = newElementReflection(&symmetry->centerOfMass, &pAxis); testSymmetryElement(symmetry, &ref); addElement(symmetry, &ref); } if(primaryAxis == NULL) { if(symmetry->elements.size(&symmetry->elements) == 1) { Element elem = symmetry->elements.get(&symmetry->elements,0); if(elem.type==REFLECTION) return "Cs"; } else if(symmetry->elements.size(&symmetry->elements) == 0) { Element inv = newElementInversion(&symmetry->centerOfMass); testSymmetryElement(symmetry, &inv); if(addElement(symmetry, &inv)) return "Ci"; } } else { gint i; for(i=0; ielements.size(&symmetry->elements); i++) { Element elem = symmetry->elements.get(&symmetry->elements,i); if(elem.type == ROTATION) { Point3D* axis = elem.getAxis(&elem); Point3D* paxis = primaryAxis->getAxis(primaryAxis); if(!axis->equals(axis, paxis)) { symmetry->elements.remove(&symmetry->elements,&elem); i--; } else { } } else { symmetry->elements.remove(&symmetry->elements,&elem); i--; } } perpAxes = 0; perpPlanes = 0; for(i=0; iget(mol,i); Point3D fromp = from->getPosition(from); Point3D atomAxis = fromp.sub(&fromp, &symmetry->centerOfMass); Point3D* paxis = primaryAxis->getAxis(primaryAxis); gdouble dotprod = atomAxis.dotProd(&atomAxis, paxis); if(fabs(dotprod) < GUESS_TOLERANCE) { rot = newElementRotation(&symmetry->centerOfMass, &atomAxis, 2); size = symmetry->elements.size(&symmetry->elements); testSymmetryElement(symmetry, &rot); if(addElement(symmetry, &rot) && size != symmetry->elements.size(&symmetry->elements)) perpAxes++; } orthogAxis = atomAxis.crossProd(&atomAxis, paxis); ref = newElementReflection(&symmetry->centerOfMass, &orthogAxis); testSymmetryElement(symmetry, &ref); size = symmetry->elements.size(&symmetry->elements); if(addElement(symmetry, &ref) && size != symmetry->elements.size(&symmetry->elements)) perpPlanes++; for(j=i+1; jget(mol,j); if(to->getNumber(to) == from->getNumber(from)) { Point3D midPoint; Point3D midAxis; Point3D top = to->getPosition(to); top = top.sub(&top, &symmetry->centerOfMass); midPoint = top.add(&top,&fromp); midPoint = midPoint.mult(&midPoint, 0.5); midAxis = midPoint.sub(&midPoint, &symmetry->centerOfMass); dotprod = midAxis.dotProd(&midAxis, paxis); if(fabs(dotprod) < GUESS_TOLERANCE) { rot = newElementRotation(&symmetry->centerOfMass, &midAxis, 2); testSymmetryElement(symmetry, &rot); size = symmetry->elements.size(&symmetry->elements); if(addElement(symmetry, &rot) && size != symmetry->elements.size(&symmetry->elements)) perpAxes++; } orthogAxis = midAxis.crossProd(&midAxis, paxis); ref = newElementReflection(&symmetry->centerOfMass, &orthogAxis); testSymmetryElement(symmetry, &ref); size = symmetry->elements.size(&symmetry->elements); if(addElement(symmetry, &ref) && size != symmetry->elements.size(&symmetry->elements)) perpPlanes++; } } } /*Check for dihedral planes orthogonal to principal axes */ for(i=0; i<3; i++) { Point3D* paxis = primaryAxis->getAxis(primaryAxis); if(!paxis->equals(paxis, &symmetry->principalAxes[i])) { Point3D refAxis = paxis->crossProd(paxis, &symmetry->principalAxes[i]); ref = newElementReflection(&symmetry->centerOfMass, &refAxis); testSymmetryElement(symmetry, &ref); size = symmetry->elements.size(&symmetry->elements); if(addElement(symmetry, &ref) && size != symmetry->elements.size(&symmetry->elements)) perpPlanes++; } } if(perpAxes == primaryAxis->getDegree(primaryAxis)) { sprintf(pointGroupGuess,"D%d", primaryAxis->getDegree(primaryAxis)); } else { sprintf(pointGroupGuess,"C%d", primaryAxis->getDegree(primaryAxis)); } ref = newElementReflection(&symmetry->centerOfMass, primaryAxis->getAxis(primaryAxis)); testSymmetryElement(symmetry, &ref); if(addElement(symmetry, &ref)) { strcat(pointGroupGuess,"h"); return pointGroupGuess; } if(perpPlanes == primaryAxis->getDegree(primaryAxis)) { if(strstr(pointGroupGuess,"D")) { strcat(pointGroupGuess,"d"); return pointGroupGuess; } else { strcat(pointGroupGuess,"v"); return pointGroupGuess; } } else if(perpPlanes == 0) { gint n; for(n=4; n<10; n+=2) { Element imp = newElementImproperRotation(&symmetry->centerOfMass, primaryAxis->getAxis(primaryAxis), n); testSymmetryElement(symmetry,&imp); if(addElement(symmetry, &imp)) { sprintf(pointGroupGuess,"S%d",imp.getDegree(&imp)); return pointGroupGuess; } } } } return pointGroupGuess; } /************************************************************************************************************/ static SMolecule getUniqueMolecule(Symmetry* symmetry) { PointGroup finalGroup = symmetry->pointGroups.get(&symmetry->pointGroups,0); SMolecule molUnique = finalGroup.getUniqueAtoms(&finalGroup, symmetry->tolerance); return molUnique; } /************************************************************************************************************/ static SMolecule getSymmetrizeMolecule(Symmetry* symmetry) { PointGroup* finalGroup = symmetry->pointGroups.getPointer(&symmetry->pointGroups,0); finalGroup->molecule.print(&finalGroup->molecule); SMolecule smol = finalGroup->symmetrizeMolecule(finalGroup, symmetry->tolerance); smol.print(&smol); return smol; } /************************************************************************************************************/ static void freeSymmetry(Symmetry* symmetry) { symmetry->elements.free(&symmetry->elements); symmetry->molecule.free(&symmetry->molecule); symmetry->rotations.free(&symmetry->rotations); symmetry->pointGroups.free(&symmetry->pointGroups); } /************************************************************************************************************/ static void setMaxDegree(Symmetry* symmetry, gint maxDegree) { symmetry->MAX_DEGREE = maxDegree; } /************************************************************************************************************/ static void setMomentTolerance(Symmetry* symmetry, gdouble tolerance) { symmetry->MOMENT_TOLERANCE = tolerance; } /************************************************************************************************************/ static gchar* getGroupName(Symmetry* symmetry) { if( symmetry->pointGroups.size(&symmetry->pointGroups)<1) return g_strdup("C1"); PointGroup finalGroup = symmetry->pointGroups.get(&symmetry->pointGroups,0); return g_strdup(finalGroup.getName(&finalGroup)); } GabeditSrc250/src/Symmetry/ReducePolyHedralMolecule.c0000644000175100017510000001101613130665226023140 0ustar alloucheallouche/* ReducePolyHedralMolecule.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "../Symmetry/MoleculeSymmetryType.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/PolyHedralOperators.h" #include "../Symmetry/ReducePolyHedralMolecule.h" #include "../Symmetry/SymmetryOperators.h" #include /************************************************************************************************************/ /* remove all points on one side of a plane given in Hessian form */ static void removeAllPointsOnOneSideOfAPlane(MolSymMolecule *mol,gdouble nx,gdouble ny,gdouble nz,gdouble d) { gint i; gdouble r; gdouble eps = 1e-3; gint numberOfAtoms; gint deleted; /* tag for deleted atom */ MolSymAtom *atomList; if(mol->numberOfAtoms >0) eps = mol->listOfAtoms[0].eps; numberOfAtoms = mol->numberOfAtoms; deleted = mol->numberOfDifferentKindsOfAtoms; /* tag for deleted atom */ atomList = mol->listOfAtoms; for(i=0;inumberOfAtoms;i++) { if ((nz*nz > 0.00001) || (atomList->position[0]*atomList->position[0] + atomList->position[1]*atomList->position[1] > eps*eps)) { r = atomList->position[0]*nx + atomList->position[1]*ny + atomList->position[2]*nz - d; if (r > 0.0) { atomList->type = deleted; numberOfAtoms--; } } atomList++; } qsort(mol->listOfAtoms,mol->numberOfAtoms,sizeof(MolSymAtom),compare2atomsUsingCenterOfGravity); mol->numberOfAtoms = numberOfAtoms; } /************************************************************************************************************/ /* tetraedal symmetry */ void reduceForTetraedalSymmetry(MolSymMolecule *mol,gint sym) { gdouble eps = 1e-3; if(mol->numberOfAtoms >0) eps = mol->listOfAtoms[0].eps; removeAllPointsOnOneSideOfAPlane(mol, 0.577350269, 0.0, -0.816496581, eps); if (sym & SYM_D) removeAllPointsOnOneSideOfAPlane(mol,-0.866025404, 0.5, 0.0,-eps); else removeAllPointsOnOneSideOfAPlane(mol,0.5, -0.866025404, 0.0,eps); } /************************************************************************************************************/ /* octaedral symmetry */ void reduceForOctaedralSymmetry(MolSymMolecule *mol,gint sym) { gdouble eps = 1e-3; if(mol->numberOfAtoms >0) eps = mol->listOfAtoms[0].eps; rotationAroundZAxisByPi(mol); removeAllPointsOnOneSideOfAPlane(mol, 0.0, -1.0, 0.0, eps); removeAllPointsOnOneSideOfAPlane(mol, 0.577350269, 0.0, -0.816496581, eps); removeAllPointsOnOneSideOfAPlane(mol, -0.816496581, 0.0, -0.577350269, eps); /* if (sym & SYM_D) removeAllPointsOnOneSideOfAPlane(mol,-0.866025404, 0.5, 0.0, -eps); else removeAllPointsOnOneSideOfAPlane(mol,0.408248290, 1.414213562, -0.577350269, eps); */ } /************************************************************************************************************/ /* icosaedral symmetry */ void reduceForIcosaedralSymmetry(MolSymMolecule *mol,gint sym) { gdouble eps = 1e-3; if(mol->numberOfAtoms >0) eps = mol->listOfAtoms[0].eps; removeAllPointsOnOneSideOfAPlane(mol, 0.0, -1.0, 0.0, eps); removeAllPointsOnOneSideOfAPlane(mol, 0.467086179481, 0.809016994375, -0.356822089773,eps); if (sym & SYM_D) removeAllPointsOnOneSideOfAPlane(mol,-0.866025404, 0.5, 0.0, eps); else removeAllPointsOnOneSideOfAPlane(mol,-0.866025404,-0.5, 0.0,-eps); } GabeditSrc250/src/Symmetry/SOperation.c0000644000175100017510000000651113130665226020346 0ustar alloucheallouche/* SOperation.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "../Common/Global.h" #include "../Symmetry/SOperation.h" /* methods */ /************************************************************************************************************/ static gint getNumber(SOperation* operation); static gchar* getElementType(SOperation* operation); static gint getDegree(SOperation* operation); static gchar* toString(SOperation* operation); /************************************************************************************************************/ SOperation newSOperation(gint number, gchar* type, gint degree) { SOperation o; o.number = number; o.degree = degree; sprintf(o.str," "); sprintf(o.elementType,"E"); if(type) sprintf(o.elementType,"%s",type); if(degree!=1) { gchar n[10]; sprintf(n,"%d",degree); if(degree<0) sprintf(n,"inf"); strcat(o.elementType,n); } /* methods */ o.getNumber = getNumber; o.getDegree = getDegree; o.getElementType = getElementType; o.toString = toString; return o; } /************************************************************************************************************/ static gchar* getElementType(SOperation* operation) { return operation->elementType; } /************************************************************************************************************/ static gint getNumber(SOperation* operation) { return operation->number; } /************************************************************************************************************/ static gint getDegree(SOperation* operation) { return operation->degree; } /************************************************************************************************************/ static gchar* toString(SOperation* operation) { gchar n[10]; gchar m[10]; sprintf(n," "); if(operation->number>1) sprintf(n," %d",operation->number); sprintf(m," "); if(operation->degree>1) sprintf(m,"%d ",operation->degree); if(operation->degree<0) sprintf(m,"inf "); sprintf(operation->str,"%s%s%s",n, operation->elementType, m); return operation->str; } GabeditSrc250/src/Symmetry/Element.h0000644000175100017510000000576213130665226017670 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_ELEMENT_H__ #define __GABEDIT_ELEMENT_H__ #include "../Utils/Point3D.h" #include "../Symmetry/SAtom.h" typedef struct _Element Element; typedef enum { INVERSION, ROTATION, IMPROPERROTATION, REFLECTION, } ElementType; struct _Element { gdouble m[3][3]; ElementType type; gdouble ERROR; gdouble DOT_TOLERANCE; gdouble distance; gchar name[10]; gint degree; Point3D point; Point3D normal; Point3D axis; gint n; gint numUniqueOperations; gint GABEDIT_C_INFINITY; /* methods */ Point3D (*doOperation)(Element* element, Point3D* oldPoint); SAtom (*doOperationSAtom)(Element* element, SAtom* oldAtom); gdouble (*getDistance)(Element* element); void (*setDistance)(Element* element, gdouble distance); void (*setERROR)(Element* element, gdouble ERROR); void (*setDotTolerance)(Element* element, gdouble DOT_TOLERANCE); gint (*getNumUniqueOperations)(Element* element); gchar* (*getName)(Element* element); gint (*getDegree)(Element* element); gboolean (*equals)(Element* element1, Element* element2); gboolean (*eqPoint)(Element* e, Point3D* p1, Point3D* p2); gboolean (*eqAxes)(Element* e, Point3D* p1, Point3D* p2); Point3D* (*getPosition)(Element* element); Point3D* (*getPoint)(Element* element); Point3D* (*getNormal)(Element* element); Point3D* (*getAxis)(Element* element); gchar* (*toString)(Element* element); }; Element newElement(); Element newElementInversion(Point3D* center); Element newElementReflection(Point3D* center, Point3D* normal); Element newElementRotation(Point3D* center, Point3D* axis, gint n); Element newElementImproperRotation(Point3D* center, Point3D* axis, int n); void copyElement(Element* element, Element** newElement); #endif /* __GABEDIT_ELEMENT_H__ */ GabeditSrc250/src/Symmetry/Dep.mk0000644000175100017510000001520213130664665017163 0ustar allouchealloucheMoleculeSymmetryInterface.o: MoleculeSymmetryInterface.c ../../Config.h \ ../Common/Global.h ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Utils/AtomsProp.h \ ../Utils/UtilsInterface.h ../Utils/Utils.h ../Utils/Constants.h \ ../Utils/GabeditTextEdit.h ../Common/Windows.h \ ../Symmetry/MoleculeSymmetry.h ../Symmetry/Symmetry.h \ ../Symmetry/../Utils/Point3D.h ../Symmetry/../Symmetry/SOperations.h \ ../Symmetry/../Symmetry/../Utils/Point3D.h \ ../Symmetry/../Symmetry/../Symmetry/SOperation.h \ ../Symmetry/../Symmetry/../Symmetry/../Utils/Point3D.h \ ../Symmetry/../Symmetry/SMolecule.h \ ../Symmetry/../Symmetry/../Symmetry/SAtom.h \ ../Symmetry/../Symmetry/Elements.h \ ../Symmetry/../Symmetry/../Symmetry/Element.h \ ../Symmetry/../Symmetry/../Symmetry/../Symmetry/SAtom.h \ ../Symmetry/../Symmetry/HashMapSAtoms.h \ ../Symmetry/../Symmetry/PointGroups.h \ ../Symmetry/../Symmetry/../Symmetry/PointGroup.h \ ../Symmetry/../Symmetry/../Symmetry/../Symmetry/SOperations.h \ ../Symmetry/../Symmetry/../Symmetry/../Symmetry/SMolecule.h \ ../Symmetry/../Symmetry/../Symmetry/../Symmetry/Elements.h \ ../Symmetry/../Symmetry/../Symmetry/../Symmetry/HashMapSAtoms.h PolyHedralOperators.o: PolyHedralOperators.c ../../Config.h \ ../Utils/Constants.h ../Symmetry/MoleculeSymmetryType.h \ ../Symmetry/MoleculeSymmetry.h ../Symmetry/PolyHedralOperators.h \ ../Symmetry/SymmetryOperators.h ReducePolyHedralMolecule.o: ReducePolyHedralMolecule.c ../../Config.h \ ../Symmetry/MoleculeSymmetryType.h ../Symmetry/MoleculeSymmetry.h \ ../Symmetry/PolyHedralOperators.h \ ../Symmetry/ReducePolyHedralMolecule.h ../Symmetry/SymmetryOperators.h PrincipalAxis.o: PrincipalAxis.c ../../Config.h \ ../Symmetry/MoleculeSymmetryType.h ../Symmetry/MoleculeSymmetry.h \ ../Symmetry/SymmetryOperators.h ReduceMolecule.o: ReduceMolecule.c ../../Config.h ../Utils/Constants.h \ ../Symmetry/MoleculeSymmetryType.h ../Symmetry/MoleculeSymmetry.h \ ../Symmetry/SymmetryOperators.h ../Symmetry/ReduceMolecule.h \ ../Symmetry/ReducePolyHedralMolecule.h SymmetryOperators.o: SymmetryOperators.c ../../Config.h \ ../Utils/Constants.h ../Symmetry/MoleculeSymmetryType.h \ ../Symmetry/MoleculeSymmetry.h ../Symmetry/SymmetryOperators.h Element.o: Element.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Symmetry/Element.h \ ../Symmetry/../Utils/Point3D.h ../Symmetry/../Symmetry/SAtom.h \ ../Symmetry/../Symmetry/../Utils/Point3D.h SAtom.o: SAtom.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Symmetry/SAtom.h \ ../Symmetry/../Utils/Point3D.h SMolecule.o: SMolecule.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Symmetry/SMolecule.h \ ../Symmetry/../Utils/Point3D.h ../Symmetry/../Symmetry/SAtom.h \ ../Symmetry/../Symmetry/../Utils/Point3D.h Elements.o: Elements.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Symmetry/Elements.h \ ../Symmetry/../Utils/Point3D.h ../Symmetry/../Symmetry/Element.h \ ../Symmetry/../Symmetry/../Utils/Point3D.h \ ../Symmetry/../Symmetry/../Symmetry/SAtom.h \ ../Symmetry/../Symmetry/../Symmetry/../Utils/Point3D.h SOperation.o: SOperation.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Symmetry/SOperation.h \ ../Symmetry/../Utils/Point3D.h SOperations.o: SOperations.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Symmetry/SOperations.h \ ../Symmetry/../Utils/Point3D.h ../Symmetry/../Symmetry/SOperation.h \ ../Symmetry/../Symmetry/../Utils/Point3D.h HashMapSAtoms.o: HashMapSAtoms.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Symmetry/HashMapSAtoms.h \ ../Symmetry/../Symmetry/SAtom.h \ ../Symmetry/../Symmetry/../Utils/Point3D.h PointGroup.o: PointGroup.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Symmetry/PointGroup.h \ ../Symmetry/../Utils/Point3D.h ../Symmetry/../Symmetry/SOperations.h \ ../Symmetry/../Symmetry/../Utils/Point3D.h \ ../Symmetry/../Symmetry/../Symmetry/SOperation.h \ ../Symmetry/../Symmetry/../Symmetry/../Utils/Point3D.h \ ../Symmetry/../Symmetry/SMolecule.h \ ../Symmetry/../Symmetry/../Symmetry/SAtom.h \ ../Symmetry/../Symmetry/Elements.h \ ../Symmetry/../Symmetry/../Symmetry/Element.h \ ../Symmetry/../Symmetry/../Symmetry/../Symmetry/SAtom.h \ ../Symmetry/../Symmetry/HashMapSAtoms.h PointGroups.o: PointGroups.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Symmetry/PointGroups.h \ ../Symmetry/../Utils/Point3D.h ../Symmetry/../Symmetry/PointGroup.h \ ../Symmetry/../Symmetry/../Utils/Point3D.h \ ../Symmetry/../Symmetry/../Symmetry/SOperations.h \ ../Symmetry/../Symmetry/../Symmetry/../Utils/Point3D.h \ ../Symmetry/../Symmetry/../Symmetry/../Symmetry/SOperation.h \ ../Symmetry/../Symmetry/../Symmetry/../Symmetry/../Utils/Point3D.h \ ../Symmetry/../Symmetry/../Symmetry/SMolecule.h \ ../Symmetry/../Symmetry/../Symmetry/../Symmetry/SAtom.h \ ../Symmetry/../Symmetry/../Symmetry/Elements.h \ ../Symmetry/../Symmetry/../Symmetry/../Symmetry/Element.h \ ../Symmetry/../Symmetry/../Symmetry/../Symmetry/../Symmetry/SAtom.h \ ../Symmetry/../Symmetry/../Symmetry/HashMapSAtoms.h Symmetry.o: Symmetry.c ../../Config.h ../Common/Global.h \ ../Common/../Files/GabeditFileChooser.h \ ../Common/../Common/GabeditType.h ../Symmetry/Symmetry.h \ ../Symmetry/../Utils/Point3D.h ../Symmetry/../Symmetry/SOperations.h \ ../Symmetry/../Symmetry/../Utils/Point3D.h \ ../Symmetry/../Symmetry/../Symmetry/SOperation.h \ ../Symmetry/../Symmetry/../Symmetry/../Utils/Point3D.h \ ../Symmetry/../Symmetry/SMolecule.h \ ../Symmetry/../Symmetry/../Symmetry/SAtom.h \ ../Symmetry/../Symmetry/Elements.h \ ../Symmetry/../Symmetry/../Symmetry/Element.h \ ../Symmetry/../Symmetry/../Symmetry/../Symmetry/SAtom.h \ ../Symmetry/../Symmetry/HashMapSAtoms.h \ ../Symmetry/../Symmetry/PointGroups.h \ ../Symmetry/../Symmetry/../Symmetry/PointGroup.h \ ../Symmetry/../Symmetry/../Symmetry/../Symmetry/SOperations.h \ ../Symmetry/../Symmetry/../Symmetry/../Symmetry/SMolecule.h \ ../Symmetry/../Symmetry/../Symmetry/../Symmetry/Elements.h \ ../Symmetry/../Symmetry/../Symmetry/../Symmetry/HashMapSAtoms.h GabeditSrc250/src/Symmetry/PolyHedralOperators.h0000644000175100017510000000346413130665226022236 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_POLYHEDRALOPERATORS_H__ #define __GABEDIT_POLYHEDRALOPERATORS_H__ gint compare2atomsUsingCenterOfGravity(const void* av,const void* bv); gint searchForC3Axes(MolSymMolecule* mol, gchar* message); void rotateMoleculeToPlaceFirstPointOnZAxisAndSecondOnXZPlane(MolSymMolecule* mol,gdouble* x1,gdouble* x2); gint rotateAroundArbitraryAxes(MolSymMolecule* mol,gint n,gdouble ux,gdouble uy, gdouble uz, gchar* message); void rotationAroundZAxisByPi(MolSymMolecule* mol); #endif /* __GABEDIT_POLYHEDRALOPERATORS_H__ */ GabeditSrc250/src/Symmetry/ReducePolyHedralMolecule.h0000644000175100017510000000316213130665226023150 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_REDUCEPOLYHEDRALMOLECULE_H__ #define __GABEDIT_REDUCEPOLYHEDRALMOLECULE_H__ void reduceForTetraedalSymmetry(MolSymMolecule *mol,gint sym); void reduceForOctaedralSymmetry(MolSymMolecule *mol,gint sym); void reduceForIcosaedralSymmetry(MolSymMolecule *mol,gint sym); #endif /* __GABEDIT_REDUCEPOLYHEDRALMOLECULE_H__ */ GabeditSrc250/src/Symmetry/GenerateMolecule.h0000644000175100017510000000343713130665226021514 0ustar alloucheallouche/* GenerateMolecule.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_GENERATEMOLECULE_H__ #define __GABEDIT_GENERATEMOLECULE_H__ void generateMoleculeFromTheBasisSetOfAtoms(MolSymMolecule* mol, gint numberOfElements, gchar** elements); void generateForTetraedalSymmetry(MolSymMolecule *mol,gint sym, gdouble axes[3][3]); void generateForOctaedralSymmetry(MolSymMolecule *mol,gint sym, gdouble axes[3][3]); void generateForIcosaedralSymmetry(MolSymMolecule *mol,gint sym, gdouble axes[3][3]); #endif /* __GABEDIT_GENERATEMOLECULE_H__ */ GabeditSrc250/src/Symmetry/PointGroups.h0000644000175100017510000000446213130665226020564 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_POINTGROUPS_H__ #define __GABEDIT_POINTGROUPS_H__ #include "../Utils/Point3D.h" #include "../Symmetry/PointGroup.h" typedef struct _PointGroups PointGroups; struct _PointGroups { GList* listOfPointGroups; gint nPointGroups; /* methods */ void (*addPointGroup) (PointGroups* pointGroups, PointGroup* pointGroup); void (*addPointGroupPos) (PointGroups* pointGroups, gint pos, PointGroup* pointGroup); GList* (*getPointGroups) (PointGroups* pointGroups); gint (*size) (PointGroups* pointGroups); PointGroup (*get) (PointGroups* pointGroups, gint i); PointGroup* (*getPointer) (PointGroups* pointGroups, gint i); PointGroups (*getCopy) (PointGroups* pointGroups); void (*clear) (PointGroups* pointGroups); void (*free) (PointGroups* pointGroups); void (*addPointGroups) (PointGroups* pointGroups, PointGroups* pointGroups2); void (*set) (PointGroups* pointGroups, gint i, PointGroup* pointGroup); }; PointGroups newPointGroups(); PointGroups newPointGroupsSize(gint n); #endif /* __GABEDIT_POINTGROUPS_H__ */ GabeditSrc250/src/Symmetry/Elements.c0000644000175100017510000002246313130665226020043 0ustar alloucheallouche/* Elements.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ /* reference : Largent, RJ, Polik, WF, Schmidt, JR, J. Comput Chem. 33 (2012) 1637-1642 */ #include "../../Config.h" #include #include "../Common/Global.h" #include "../Symmetry/Elements.h" /************************************************************************************************************/ static void addElement(Elements* elements, Element* element); static GList* getElements(Elements* elements); static gint size(Elements* elements); static Element get(Elements* elements, gint i); static Elements getCopy(Elements* elements); static void clear(Elements* elements); static void printElements(Elements* elements); static void addElements(Elements* elements, Elements* elements2); static void set(Elements* elements, gint i, Element* element); static void removeElement(Elements* elements, Element* element); static void addElementRotation(Elements* elements, Point3D* center, Point3D* axis, gint n); static void addElementImproperRotation(Elements* elements, Point3D* center, Point3D* axis, gint n); static void addElementReflection(Elements* elements, Point3D* center, Point3D* axis ); static void addElementInversion(Elements* elements, Point3D* center); static gboolean contains(Elements* mol, Element* element, gdouble tol); static gint indexOf(Elements* elements, Element* elem); /************************************************************************************************************/ Elements newElements() { Elements elements; elements.listOfElements = NULL; elements.nElements = 0; /* methods */ elements.addElement = addElement; elements.getElements = getElements; elements.size = size; elements.get = get; elements.getCopy = getCopy; elements.clear = clear; elements.free = clear; elements.print = printElements; elements.addElements = addElements; elements.set = set; elements.contains = contains; elements.remove = removeElement; elements.addElementRotation = addElementRotation; elements.addElementImproperRotation = addElementImproperRotation ; elements.addElementReflection = addElementReflection ; elements.addElementInversion = addElementInversion ; elements.indexOf = indexOf; return elements; } /************************************************************************************************************/ Elements newElementsSize(gint n) { Elements elements = newElements(); gint i; for(i=0;ilistOfElements = g_list_append(elements->listOfElements, a); elements->nElements++; } /************************************************************************************************************/ static void addElementRotation(Elements* elements, Point3D* center, Point3D* axis, gint n) { Element e = newElementRotation(center, axis, n); elements->addElement(elements, &e); } /************************************************************************************************************/ static void addElementImproperRotation(Elements* elements, Point3D* center, Point3D* axis, gint n) { Element e = newElementImproperRotation(center, axis, n); elements->addElement(elements, &e); } /************************************************************************************************************/ static void addElementReflection(Elements* elements, Point3D* center, Point3D* axis ) { Element e = newElementReflection(center, axis); elements->addElement(elements, &e); } /************************************************************************************************************/ static void addElementInversion(Elements* elements, Point3D* center) { Element e = newElementInversion(center); elements->addElement(elements, &e); } /************************************************************************************************************/ static GList* getElements(Elements* elements) { return elements->listOfElements; } /************************************************************************************************************/ static gint size(Elements* elements) { return elements->nElements; } /************************************************************************************************************/ static Element get(Elements* elements, gint i) { GList* l = NULL;; gint j = 0; if(!elements) return newElement(); for( l = elements->listOfElements; l != NULL; l = l->next, j++) if(j==i) return *(Element*) l->data; return newElement(); } /************************************************************************************************************/ static Elements getCopy(Elements* elements) { Elements nelements = newElements(); GList* l = NULL;; for( l = elements->listOfElements; l != NULL; l = l->next) nelements.addElement(&nelements, (Element*) l->data); return nelements; } /************************************************************************************************************/ static void clear(Elements* elements) { GList* l = NULL;; if(!elements->listOfElements) return; int i =0; for( l = elements->listOfElements; l != NULL; l = l->next) { i++; if( l->data) g_free(l->data); } g_list_free(elements->listOfElements); elements->listOfElements = NULL; elements->nElements = 0; } /************************************************************************************************************/ static void addElements(Elements* elements, Elements* elements2) { GList* l = NULL;; for( l = elements2->listOfElements; l != NULL; l = l->next) elements->addElement(elements, (Element*) l->data); } /************************************************************************************************************/ static void set(Elements* elements, gint i, Element* element) { GList* l = NULL;; gint j = 0; for( l = elements->listOfElements; l != NULL; l = l->next, j++) if(j==i) { *(Element*) l->data = *element; return; } } /************************************************************************************************************/ static void removeElement(Elements* elements, Element* element) { GList* l = NULL;; for( l = elements->listOfElements; l != NULL; l = l->next) { if(l->data && element->equals(element,(Element*) l->data)) { elements->listOfElements = g_list_remove(elements->listOfElements, (gpointer) l->data); elements->nElements--; return; } } } /************************************************************************************************************/ static gboolean contains(Elements* elements, Element* element, gdouble tol) { GList* l = NULL; Element e = *element; e.setDotTolerance(&e, tol); for( l = elements->listOfElements; l != NULL; l = l->next) { Element* a= (Element*) l->data; if(e.equals(&e,a)) return TRUE; } return FALSE; } /************************************************************************************************************/ static gint indexOf(Elements* elements, Element* elem) { GList* l = NULL; gint j = 0; if(!elements) return -1; for( l = elements->listOfElements; l != NULL; l = l->next, j++) { Element* a = l->data; if(a->equals(a,elem)) return j; } return -1; } /************************************************************************************************************/ static void printElements(Elements* elements) { if(elements && elements->size(elements) > 0) { gint i; printf("\nELEMENTS FOUND:"); for(i=0; isize(elements); i++) { Element elem = elements->get(elements,i); printf("%s ", elem.getName(&elem)); /* printf("\t%s with a rating of %f\n", elem.getName(&elem), elem.getDistance(&elem));*/ /*printf("\t%s with a rating of %f\n", elem.toString(&elem), elem.getDistance(&elem));*/ } printf("\n\n"); } else printf("\n--- NO ELEMENTS FOUND! --- \n"); } GabeditSrc250/src/Symmetry/MoleculeSymmetryType.h0000644000175100017510000000150113130665226022443 0ustar alloucheallouche #ifndef __GABEDIT_MOLECULESYMMETRYTYPE_H__ #define __GABEDIT_MOLECULESYMMETRYTYPE_H__ #define SYM_H 0x01 #define SYM_V 0x02 #define SYM_D 0x04 #define SYM_I 0x08 #define SYM_S 0x10 #define SYM_DD 0x20 #define SYM_T 0x40 #define SYM_O 0x80 #define SYM_IC 0x100 #define SYM_R 0x200 #define SYM_U 0x400 typedef struct _MolSymAtom { gdouble position[3]; gint type; gdouble eps; /* precision for atom position */ }MolSymAtom; typedef struct _MolSymMolecule { gint numberOfAtoms; gint numberOfDifferentKindsOfAtoms; MolSymAtom* listOfAtoms; gchar** symbol; gint* numberOfAtomsOfEachType; gdouble* masse; }MolSymMolecule; typedef enum _RotationReflectionOperator { XY_PLANE = 0, XZ_PLANE, YZ_PLANE, POINT_INV, ROT2X, ROT2Y, ROT2Z } RotationReflectionOperator; #endif /* __GABEDIT_MOLECULESYMMETRYTYPE_H__ */ GabeditSrc250/src/Symmetry/MoleculeSymmetry.h0000644000175100017510000000577713130665226021624 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_MOLECULESYMMETRY_H__ #define __GABEDIT_MOLECULESYMMETRY_H__ int computeAbelianGroup( gdouble principalAxisTolerance, gchar* pointGroupSymbol, gchar* abelianPointGroupSymbol, gint maximalOrder, gboolean redu, gint* numberOfAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z, gint* nGenerators, gchar** generators, gint* nMolcas, gchar** molcasGenerators, gint* nElements, gchar** elements, gdouble* precision, gchar* message); int generateMoleculeUsingAbelianGroup( gchar* abelianPointGroupSymbol, gint* numberOfAtoms, gchar*** symbols, gdouble** X, gdouble** Y, gdouble** Z ); void buildStandardOrientation(gint numberOfAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z); int computeAndSymmetrize(gdouble principalAxisTolerance, gboolean axz_3, gchar* pointGroupSymbol,gint maximalOrder, gint* numberOfAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z, gdouble* precision, gchar* message); int computeSymmetry( gdouble principalAxisTolerance, gchar* pointGroupSymbol, gint maximalOrder, gboolean redu, gint* numberOfAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z, gdouble* precision, gchar* message); int computeSymmetryOld( gdouble principalAxisTolerance, gboolean axz_3, gchar* pointGroupSymbol, gint maximalOrder, gboolean redu, gint* numberOfAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z, gdouble* precision, gchar* message); int computeSymmetrization( gdouble principalAxisTolerance, gchar* pointGroupSymbol, gint maximalOrder, gint* numberOfAtoms, gchar** symbols, gdouble* X, gdouble* Y, gdouble* Z, gdouble* precision, gchar* message); #endif /* __GABEDIT_MOLECULESYMMETRY_H__ */ GabeditSrc250/src/Symmetry/PrincipalAxis.c0000644000175100017510000001710213130665226021027 0ustar alloucheallouche/* PrincipalAxis.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "../Symmetry/MoleculeSymmetryType.h" #include "../Symmetry/MoleculeSymmetry.h" #include "../Symmetry/SymmetryOperators.h" #include #include #define EPSILON 1.0E-12 #define SQU(x,y,z) ((x)*(x) + (y)*(y) + (z)*(z)) /************************************************************************************************************/ /* Jacobi diagonalisation of 3x3 symmetric matrix */ /* matrix mat stored like 0 3 5 1 4 2 */ static void jacobi(gdouble *mat, gdouble evec[3][3]) { gdouble t,s,u; gdouble a; evec[0][1] = evec[0][2] = evec[1][0] = 0.0; /* unity matrix */ evec[1][2] = evec[2][0] = evec[2][1] = 0.0; /* unity matrix */ evec[0][0] = evec[1][1] = evec[2][2] = 1.0; /* do jacobi sweep */ while(SQU(mat[3],mat[4],mat[5]) > EPSILON) { /* set mat[3] to zero */ if (mat[3]*mat[3] > EPSILON) { t = (mat[1]-mat[0])/(2.*mat[3]); t = (t>0) ? 1./(t+sqrt(t*t+1.)) : -1./(-t+sqrt(t*t+1.)); s = t/(sqrt(t*t+1.)); u = s*t/(s+t); mat[0] -= t*mat[3]; mat[1] += t*mat[3]; a = mat[5]; mat[5] -= s*(mat[4]+u*mat[5]); mat[4] += s*( a -u*mat[4]); mat[3] = 0.; a = evec[0][0]; evec[0][0] -= s*(evec[0][1]+u*evec[0][0]); evec[0][1] += s*( a -u*evec[0][1]); a = evec[1][0]; evec[1][0] -= s*(evec[1][1]+u*evec[1][0]); evec[1][1] += s*( a -u*evec[1][1]); a = evec[2][0]; evec[2][0] -= s*(evec[2][1]+u*evec[2][0]); evec[2][1] += s*( a -u*evec[2][1]); } /* set mat[5] to zero */ if (mat[5]*mat[5] > EPSILON) { t = (mat[2]-mat[0])/(2.*mat[5]); t = (t>0) ? 1./(t+sqrt(t*t+1.)) : -1./(-t+sqrt(t*t+1.)); s = t/(sqrt(t*t+1.)); u = s*t/(s+t); mat[0] -= t*mat[5]; mat[2] += t*mat[5]; a = mat[3]; mat[3] -= s*(mat[4]+u*mat[3]); mat[4] += s*( a -u*mat[4]); mat[5] = 0.; a = evec[0][0]; evec[0][0] -= s*(evec[0][2]+u*evec[0][0]); evec[0][2] += s*( a -u*evec[0][2]); a = evec[1][0]; evec[1][0] -= s*(evec[1][2]+u*evec[1][0]); evec[1][2] += s*( a -u*evec[1][2]); a = evec[2][0]; evec[2][0] -= s*(evec[2][2]+u*evec[2][0]); evec[2][2] += s*( a -u*evec[2][2]); } /* set mat[4] to zero */ if (mat[4]*mat[4] > EPSILON) { t = (mat[2]-mat[1])/(2.*mat[4]); t = (t>0) ? 1./(t+sqrt(t*t+1.)) : -1./(-t+sqrt(t*t+1.)); s = t/(sqrt(t*t+1.)); u = s*t/(s+t); mat[1] -= t*mat[4]; mat[2] += t*mat[4]; a = mat[3]; mat[3] -= s*(mat[5]+u*mat[3]); mat[5] += s*( a -u*mat[5]); mat[4] = 0.; a = evec[0][1]; evec[0][1] -= s*(evec[0][2]+u*evec[0][1]); evec[0][2] += s*( a -u*evec[0][2]); a = evec[1][1]; evec[1][1] -= s*(evec[1][2]+u*evec[1][1]); evec[1][2] += s*( a -u*evec[1][2]); a = evec[2][1]; evec[2][1] -= s*(evec[2][2]+u*evec[2][1]); evec[2][2] += s*( a -u*evec[2][2]); } } } /************************************************************************************************************/ static void swap(gint i,gint j,gdouble* mat, gdouble vecs[3][3]) { gint k; gdouble t; t = mat[i]; mat[i] = mat[j]; mat[j] = t; for(k=0;k<3;k++) { t = vecs[k][i]; vecs[k][i] = vecs[k][j]; vecs[k][j] = t; } } /************************************************************************************************************/ /* inertial moment of a molecule */ /* matrix mat stored like 0 3 5 1 4 2 */ void determinePrincipalAxis(MolSymMolecule* mol,gdouble* centerOfGravity, gint* numberOfEquivalentAxes, gdouble* inertialMoment, gdouble axes[3][3], gdouble principalAxisTolerance, gboolean sorting) { gint i,j; gdouble mat[6]; gdouble m; gdouble mtot = 0.0; gdouble x,y,z; MolSymAtom *atomList; atomList = mol->listOfAtoms; x = y = z =0.0; for (i=0;inumberOfAtoms;i++) /* center of gravity and total mass */ { /* m = sqrt(prime[atomList->type]);*/ m = fabs(mol->masse[atomList->type]); x += m*atomList->position[0]; y += m*atomList->position[1]; z += m*atomList->position[2]; mtot += m; atomList++; } centerOfGravity[0] = x/mtot; centerOfGravity[1] = y/mtot; centerOfGravity[2] = z/mtot; for(i=0;i<6;i++) mat[i]=0.0; atomList = mol->listOfAtoms; for (i=0;inumberOfAtoms;i++) /* build up inertial tensor */ { x = (atomList->position[0] -= centerOfGravity[0]); y = (atomList->position[1] -= centerOfGravity[1]); z = (atomList->position[2] -= centerOfGravity[2]); /* m = sqrt(prime[atomList->type]);*/ m = fabs(mol->masse[atomList->type]); mat[0] += m*(y*y+z*z); mat[1] += m*(x*x+z*z); mat[2] += m*(x*x+y*y); mat[3] -= m*(x*y); mat[4] -= m*(y*z); mat[5] -= m*(x*z); atomList++; } jacobi(mat,axes); /* diagonalize tensor */ /* sort eigenvalues */ if (mat[0] 1.E-8) { mat[1] /= mat[0]; mat[2] /= mat[0]; mat[0] = 1.0; } if ((mat[1]-mat[2])*(mat[1]-mat[2])< principalAxisTolerance*principalAxisTolerance) swap(0,2,mat,axes); /* determin number of equivalent axes */ *numberOfEquivalentAxes = 1; if ((mat[0]-mat[1])*(mat[0]-mat[1]) < principalAxisTolerance*principalAxisTolerance) (*numberOfEquivalentAxes)++; /* 2 axes equiv. */ if ((mat[0]-mat[2])*(mat[0]-mat[2]) < principalAxisTolerance*principalAxisTolerance) (*numberOfEquivalentAxes)++; /* 3 axes equiv. */ if (mat[2] < principalAxisTolerance) *numberOfEquivalentAxes = -*numberOfEquivalentAxes; /* linear or point */ /* multiply atom vectors v_i by eigenvector matrix v_i' = v_i * V to rotate molecule - principal axes will be equivalent to coordinate axes */ atomList = mol->listOfAtoms; for (i=0;inumberOfAtoms;i++) /* perform rotation */ { x = atomList->position[0]; y = atomList->position[1]; for (j=0;j<3;j++) atomList->position[j] = x*axes[0][j] + y*axes[1][j] + atomList->position[2]*axes[2][j]; atomList++; } if(sorting) qsort(mol->listOfAtoms,mol->numberOfAtoms,sizeof(MolSymAtom),compare2atoms); } GabeditSrc250/src/Symmetry/HashMapSAtoms.c0000644000175100017510000000706613130665226020741 0ustar alloucheallouche/* HashMapSAtoms.c */ /********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #include "../../Config.h" #include #include "../Common/Global.h" #include "../Symmetry/HashMapSAtoms.h" /************************************************************************************************************/ static void put(HashMapSAtoms* map, gint index, SAtom* atom); static gint size(HashMapSAtoms* map); static SAtom* get(HashMapSAtoms* map, gint i); static void clear(HashMapSAtoms* map); /************************************************************************************************************/ HashMapSAtoms newHashMapSAtoms() { HashMapSAtoms map; map.listOfAtoms = NULL; map.listOfIndex = NULL; map.nAtoms = 0; /* methods */ map.put = put; map.get = get; map.clear = clear; map.size = size; return map; } /************************************************************************************************************/ static void put(HashMapSAtoms* map, gint index, SAtom* atom) { SAtom* a = g_malloc(sizeof(SAtom)); gint* i = g_malloc(sizeof(gint)); *a = *atom; map->listOfAtoms = g_list_append(map->listOfAtoms, a); *i = index; map->listOfIndex = g_list_append(map->listOfIndex, i); map->nAtoms++; } /************************************************************************************************************/ static gint size(HashMapSAtoms* map) { return map->nAtoms; } /************************************************************************************************************/ static SAtom* get(HashMapSAtoms* map, gint i) { GList* la = NULL; GList* li = NULL; if(!map) return NULL; for( la = map->listOfAtoms, li=map->listOfIndex ; la != NULL && li != NULL; la = la->next, li = li->next) { if(*(gint*)(li->data)==i) return (SAtom*) la->data; } return NULL; } /************************************************************************************************************/ static void clear(HashMapSAtoms* map) { GList* l = NULL; for( l = map->listOfAtoms; l != NULL; l = l->next) if( l->data) g_free(l->data); for( l = map->listOfIndex; l != NULL; l = l->next) if( l->data) g_free(l->data); g_list_free(map->listOfAtoms); g_list_free(map->listOfIndex); map->listOfAtoms = NULL; map->listOfIndex = NULL; map->nAtoms = 0; } /************************************************************************************************************/ GabeditSrc250/src/Symmetry/HashMapSAtoms.h0000644000175100017510000000343413130665226020741 0ustar alloucheallouche/********************************************************************************************************** Copyright (c) 2002-2017 Abdul-Rahman Allouche. All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ************************************************************************************************************/ #ifndef __GABEDIT_HASHMAPSATOMS_H__ #define __GABEDIT_HASHMAPSATOMS_H__ #include "../Symmetry/SAtom.h" typedef struct _HashMapSAtoms HashMapSAtoms; struct _HashMapSAtoms { GList* listOfAtoms; GList* listOfIndex; gint nAtoms; /* methods */ void (*put) (HashMapSAtoms* mol, gint index, SAtom* atom); SAtom* (*get) (HashMapSAtoms* mol, gint index); void (*clear) (HashMapSAtoms* mol); gint (*size) (HashMapSAtoms* mol); }; HashMapSAtoms newHashMapSAtoms(); #endif /* __GABEDIT_HASHMAPSATOMS_H__ */ GabeditSrc250/icons/0000755000175100017510000000000013130664665014615 5ustar allouchealloucheGabeditSrc250/icons/Gabedit48.ico0000644000175100017510000002267613130664665017041 0ustar alloucheallouche00 ¨%(0` ÿÿÿÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿfÿÿÿ!ÂÂ…3ÂÂ…ÿÂÂ…ÿÂÂ…ÿÀÀƒÿ³³wÿ¾¾ÿ´´xÿ¾¾€ÿµµyÿ¼¼ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…Rÿÿÿ3ÿÿÿÿÿÿÿÿýýýÿÅÅÅÿ~~ÿ˜˜¥ÿ‚ÿ––¢ÿ‚‚…ÿ¦¦¦ÿõõõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿþþþÿÏÏÏÿQQRÿ 7ÿÿgÿÿ Vÿ//5ÿ©©©ÿúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿýýýÿ¿¿¿ÿ,,Rÿ¡ÿòÿâÿóÿÄÿYÿ‘‘”ÿõõõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿþþþÿÎÎÏÿ;;uÿÈÿþÿøÿþÿæÿ€ÿ¡¡©ÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáññÿ¶ßßÿÏééÿýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÊÊ”3ÊÊ”ÿÈÈ“ÿ––pÿ""$ÿ[ÿ»ÿ ÿ»ÿÿ $ÿrrVÿÂÂÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÂÆÿ<¥‚ÿ¾¾ÿÉÉÿÂÂÿ©˜ÿް{ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”Rÿÿÿ3ÿÿÿÿÿÿÿÿÑÑÑÿ=>>ÿ&ÿW‚ÿ>SÿV~ÿ4Hÿÿ¤¤¤ÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ\ÆÆÿÏÏÿääÿììÿååÿÒÒÿ­­ÿ«ÏÊÿ¬É¸ÿ¸¡ÿ’¹¤ÿ¤Å¶ÿÈÚÔÿúûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿüüüÿ¹¹¹ÿ&@@ÿ‰‰ÿããÿÏÏÿääÿ®®ÿ CCÿŒÿóóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖììÿººÿááÿôôÿüüÿõõÿããÿÄÄÿqÿB“ÿ@™ÿ<›ÿ2˜%ÿ%.ÿ*ŠEÿq«‹ÿØåáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿÒÔÔÿ?~~ÿÓÓÿÿÿÿþþÿÿÿÿïïÿ‰‰ÿ¥¯¯ÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÖÖÿÂÂÿääÿøøÿþþÿööÿääÿÉÉÿ“Žÿª—ÿ©ÿ¡ªÿ‡ªÿk¨ÿO§ÿ3Ÿ&ÿŒ6ÿ{°’ÿòöõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRõõë3õõëÿòòèÿ±±©ÿ#HFÿ¸¸ÿüüÿÿÿÿÿÿÿÚÚÿ ZYÿ…†€ÿééßÿõõëÿõõëÿõõëÿõõëÿõõëÿŸÎÆÿ¹¹ÿÛÛÿííÿôôÿïïÿÞÞÿÂÂÿˆˆÿÅ?ÿÈAÿÉRÿÄvÿ´ˆÿ¦£ÿ…®ÿW­ÿ*› ÿA‘YÿâéàÿõõëÿõõëÿõõëÿõõëÿõõëÿõõëÿõõëÿõõëRÌÌ™3ÌÌ™ÿÌÌ™ÿ©«‚ÿ3rfÿÔÓÿÿÿÿÿÿÿÿÿÿððÿ„~ÿ…nÿˢÿÌÌ™ÿÌÌ™ÿÌÌ™ÿÌÌ™ÿÌÌ™ÿ¼ÇžÿžžÿÇÇÿÚÚÿààÿÛÛÿÊÊÿ­­ÿ5ccÿÌ**ÿÌJFÿÌI>ÿÌC#ÿÌNÿÌeÿÆÿ´°ÿ€²ÿAÿ/*ÿÁÄÿÌÌ™ÿÌÌ™ÿÌÌ™ÿÌÌ™ÿÌÌ™ÿÌÌ™ÿÌÌ™Rÿÿÿ3ÿÿÿÿüüüÿ¹¹¹ÿ&KKÿ¸¸ÿüüÿÿÿÿÿÿÿÚÚÿ [[ÿ‹ŒŒÿóóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøúùÿ-…lÿ¡¡ÿººÿÀÀÿ½½ÿ««ÿ„„ÿžccÿÌhhÿÌÿÌwtÿÌDAÿÌ1&ÿÌ,ÿÌ>ÿÊgÿµŠÿŽ£ÿU™ÿo¤qÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿÒÔÔÿ?}}ÿÔÔÿÿÿÿÿÿÿÿÿÿïïÿ‰‰ÿ¥®®ÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–µ™ÿZ„ÿTc@ÿ {zÿÿˆˆÿÿ ÿ¼ccÿÌuuÿÌxxÿÌffÿÌ<<ÿÌ''ÿÌÿÌÿÌ ÿÆ8ÿ­bÿ‘ˆÿTŠÿÒßÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿüüüÿºººÿ'MMÿ¹¹ÿüüÿÿÿÿÿÿÿÛÛÿ ^^ÿŽŽÿóóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûüûÿG3ÿƒrÿ¸9ÿÁÿ¬#!ÿqAAÿ¶¶ÿÀÀÿc^cÿÌ77ÿÌ88ÿÌ))ÿÌ$$ÿÌÿÌÿÌÿÌÿËÿÂ#ÿ¯Iÿ‚ÿ‰¦nÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRëëÖ3ëëÖÿêêÖÿ¿Á¯ÿ8tnÿÑÑÿÿÿÿÿÿÿÿÿÿîîÿƒ€ÿ–žÿèèÓÿëëÖÿëëÖÿëëÖÿëëÖÿ«À¡ÿ\ƒÿ©iÿ¿'ÿÉÿÌÿÉÿ …ÿœ»ÿ ‚ÿÀ!ÿÌÿÌÿÌÿÌÿÌÿÌÿÌÿÊÿÄÿºÿžKÿru$ÿèéÕÿëëÖÿëëÖÿëëÖÿëëÖÿëëÖRÞÞ½3ÞÞ½ÿÜܺÿ¢£ˆÿ"KDÿ¼¼ÿýýÿÿÿÿÿÿÿÝÝÿ _[ÿ{}hÿÔÔ³ÿÞÞ½ÿÞÞ½ÿÞÞ½ÿÞÞ½ÿo’Sÿ…„ÿ±RÿÂÿÊÿÌÿÌÿ†2ÿŽÿ•ÿl BÿÌÿÌÿÌÿÌÿÌÿÌÿÊÿÈÿÂÿ¹ÿ© ÿ„Tÿ¾ÂšÿÞÞ½ÿÞÞ½ÿÞÞ½ÿÞÞ½ÿÞÞ½Rÿÿÿ3ÿÿÿÿþþþÿÍÎÎÿ:ssÿÎÎÿþþÿÿÿÿÿÿÿëëÿ€€ÿ §§ÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿs‘Pÿ˜rÿ³5ÿÁÿÈÿËÿËÿËÿ&fÿÿ0Yÿ%.ÿ…1.ÿƒ=-ÿI)ÿ‚O"ÿŒLÿ™Bÿ©/ÿ¸ÿ¶ÿ¨ÿ‰7ÿÖÔÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿýýýÿÀÀÀÿ-ZZÿ¿¿ÿýýÿÿÿÿÿÿÿààÿhhÿ’––ÿöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿy…BÿšUÿ²ÿ½ÿÄÿÇÿÈÿ±ÿy#+ÿr75ÿ\6ÿ‚y4ÿ{‹7ÿo•7ÿ\˜6ÿK—4ÿG•1ÿU‘%ÿZ‰"ÿWx ÿqNÿ“$ÿ†%ÿÛ×ÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿþþþÿÉÊÊÿ6llÿÊÊÿþþÿÿÿÿÿÿÿèèÿhhÿq@@ÿâÄÄÿùööÿÿÿÿÿÿÿÿÿÿÿÿÿ„}Fÿ—:ÿ®ÿ·ÿ¾ÿ²ÿ”.ÿ‹N(ÿ}k4ÿu„4ÿjš9ÿY¦;ÿG­>ÿ:¯?ÿ,°Aÿ%¯Fÿ­Jÿ©Jÿ8§@ÿ?Ÿ<ÿ>’9ÿ<{*ÿQKÿèçâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÙÙ³3ÙÙ³ÿØØ²ÿ©©Žÿ,\WÿÄÄÿýýÿÿÿÿÿÿÿããÿ ]]ÿc ÿ¾ÿÊ ÿÛ00ÿá``ÿâÿ[?ÿŽ&ÿ§ÿ±ÿ›,ÿ’_ÿ‡~%ÿf3ÿY¡7ÿI¯:ÿ@¶Dÿ8ºQÿ,¾Zÿ(¿bÿ¿fÿ¾nÿ¼wÿ¹zÿµtÿ:³fÿ9ªdÿ5Wÿ,ŠCÿO‰ZÿÓ×´ÿÙÙ³ÿÙÙ³ÿÙÙ³ÿÙÙ³RèèÑ3èèÑÿççÐÿµ¶¥ÿ/a^ÿÅÅÿýýÿÿÿÿÿÿÿääÿqqÿ‹…ÿââÌÿçæÑÿæÎËÿã¡¡ÿárrÿØ;;ÿÅÿÇÿŠ:ÿ‡zÿy”ÿK£1ÿB¯@ÿ5¶Jÿ%½OÿÃZÿÆkÿÈ{ÿɆÿÉÿÈ—ÿÈ ÿÅ£ÿ¡ÿ1Àÿ7¹Šÿ2¯€ÿ"ŸnÿˆUÿE‚MÿäåÍÿèèÑÿèèÑÿèèÑRÿÿÿ3ÿÿÿÿþþþÿÈÉÉÿ5iiÿÈÈÿþþÿÿÿÿÿÿÿççÿwwÿ›¡¡ÿùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùøøÿy*)ÿk>ÿd}ÿ[—ÿQ¦%ÿ*±Fÿ"»YÿÂgÿÆvÿÉ…ÿÉ“ÿÊ¢ÿÊ­ÿË·ÿ˼ÿËÁÿËÃÿÉ¿ÿ'DZÿ4æÿ,ºŸÿ¬ÿœyÿ„\ÿ©’ÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿýýýÿÁÂÂÿ.\\ÿÁÁÿýýÿÿÿÿÿÿÿááÿkkÿ”˜˜ÿöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–~ÿGw ÿ@—'ÿC¨7ÿ3µIÿ¼eÿÃxÿÆÿÉŸÿË­ÿË»ÿÌÊÿÌÒÿÌÙÿÌÚÿÌÜÿÌÛÿÌØÿ$ÌÉÿ/˽ÿÀ³ÿµ¦ÿ¨•ÿ–~ÿ{[ÿçîêÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿþþþÿÌÍÍÿ9qqÿÌÌÿþþÿÿÿÿÿÿÿêêÿ~~ÿŸ¦¦ÿúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿFw?ÿ(Œ/ÿ5¤Gÿ8´Wÿ/¾jÿ‰ÿÈÿʳÿÌÄÿÌÍÿ!Ì×ÿ%Ìáÿ%Ìãÿ ÌèÿÌåÿÌäÿÌãÿËßÿ"ËÐÿ ÇÅÿÁÀÿ»»ÿ¯¬ÿž–ÿ‹yÿ…¯ŸÿÿÿÿÿÿÿÿRÏÏž3ÏÏžÿÍÍœÿ—˜qÿ J?ÿ½½ÿýýÿÿÿÿÿÿÿÞÞÿ _[ÿsuWÿÅÅ–ÿÏÏžÿÏÏžÿÏÏžÿÏÏžÿ¢±†ÿv0ÿ•Lÿ%¬fÿ0ºtÿ,ÄŒÿÉ«ÿÌ»ÿÌÌÿÌÛÿ$Ìàÿ/Ìåÿ4Ìíÿ;Ìíÿ7Ìðÿ)Ìïÿ!ÌëÿËéÿÈãÿÅÏÿ¾Èÿ¹Åÿ¶Áÿ­·ÿ£¨ÿ“Œÿ/kÿÏÏžÿÏÏžRúúõ3úúõÿúúôÿËÌÈÿ;vuÿÐÐÿÿÿÿÿÿÿÿÿÿííÿƒ‚ÿŸ§¤ÿööñÿúúõÿúúõÿúúõÿúúõÿ`gÿ„Hÿžiÿ®‚ÿ»¢ÿÄÀÿÊÆÿÌÐÿÌÚÿÌçÿ&Ììÿ8ÌðÿGÌóÿUÌñÿYÌïÿ=Ìîÿ,Ëìÿ ÅèÿÂàÿ¼ÌÿµÌÿ²Éÿ¯Äÿ©ºÿ¡®ÿ•šÿ|pÿßæßÿúúõRÿÿÿ3ÿÿÿÿüüüÿ»»»ÿ(OOÿººÿüüÿÿÿÿÿÿÿÜÜÿ __ÿÿôôôÿåññÿg»»ÿ0¦¦ÿ?¡¡ÿ%tKÿ’fÿ¬–ÿ²¸ÿ¼ÈÿÃÒÿÈÐÿËÚÿÌæÿÌêÿ/ÌíÿEÌîÿeÌïÿ…Ìîÿ€ÌíÿLÌìÿ5Êéÿ"¾åÿ¹Òÿ²Ìÿ«ÌÿªÊÿ§Æÿ ½ÿ˜°ÿ‘Ÿÿ‚ÿÂÔÑÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿÒÓÓÿ>||ÿÓÓÿÿÿÿÿÿÿÿÿÿïïÿˆˆÿ¥®®ÿîööÿ°°ÿÇÇÿÍÍÿ¾¾ÿgÿ»žÿÈ¿ÿ³Èÿ¸ÄÿÀÄÿÄÉÿÄÐÿÇáÿÉçÿ*Ëéÿ?ËêÿbËëÿÌëÿ–ÌêÿeÌèÿ?Èäÿ)»Õÿ°Ìÿ©Ìÿ£Ìÿ¡ÊÿžÆÿ˜½ÿ’²ÿŒ ÿ€„ÿºÐÍÿÿÿÿRÿÿÿ3ÿÿÿÿüüüÿ¹¹¹ÿ&LLÿ¸¸ÿùùÿÿÿÿüüÿÚÚÿ \\ÿ‹ÿ…ÊÊÿÐÐÿêêÿîîÿÚÙÿ•vÿ»«ÿ¾¸ÿ³²ÿ³ºÿ¹Æÿ¸Ëÿ¸ÌÿºÎÿ¾Ûÿ(Ããÿ8ÈæÿWÈæÿsÈæÿeÈäÿIÇÝÿ8¿Ñÿ'±Ìÿ¥Ìÿ ÌÿœÌÿ™Ëÿ–Æÿ“½ÿްÿ‡Ÿÿ{ƒÿÊÛÚÿÿÿÿRÂÂ…3ÂÂ…ÿÂÂ…ÿ ¢pÿ0o`ÿÀ¿ÿ¹¹ÿÑÑÿ»»ÿÈÈÿzÿ~ˆ`ÿQ³™ÿÞÞÿøøÿûûÿçæÿ“{ÿª¡ÿŸ¡ÿ©±ÿ«¾ÿ­Æÿ¬Éÿ¬Ëÿ¬Ìÿ°Ìÿ$¶Ïÿ*¼Óÿ3¿ÕÿAÀÔÿ6½Ïÿ0µÌÿ%ªÌÿ¡ÌÿÌÿ›Ìÿ˜Ëÿ”Êÿ‘Äÿ»ÿŠ®ÿœÿs~ÿ¯¶}ÿÂÂ…Rÿÿÿ3ÿÿÿÿüüüÿ¸¸¸ÿ'88ÿ??ÿ&&ÿ>>ÿ((ÿ;;ÿ 00ÿ‹ŒŒÿ”ÑÑÿÔÔÿòòÿööÿããÿ–…ÿžšÿ˜Ÿÿ °ÿ¡»ÿ¢Äÿ¢Éÿ¢Ìÿ¢Ìÿ¤Ìÿ¨Ìÿ"­Ìÿ'°Ìÿ)±Ìÿ$©Ìÿ ¢ÌÿœÌÿšÌÿ—Ìÿ•Ìÿ’ËÿÈÿÁÿˆ¸ÿ„«ÿz—ÿ1{…ÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿåååÿxxxÿÿÿÿÿÿSSSÿÈÈÈÿùüüÿ>ÂÂÿÐÐÿ××ÿÅÅÿ‹ÿ†„ÿœÿ”«ÿ˜¶ÿ˜ÀÿšÇÿšËÿ›ÌÿœÌÿÌÿžÌÿŸÌÿÌÿ™Ìÿ—Ìÿ–Ìÿ”ÌÿÌÿŽËÿŒÉÿ‰Åÿˆ½ÿ„³ÿ|¥ÿsŽÿ~¨¯ÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿÿÖÖÖÿEEEÿÿÿÿ###ÿ«««ÿýýýÿÿÿÿÿúýýÿÖÖÿmÆÆÿŽÍÍÿ¹ÏËÿvrÿ‡”ÿŠ¥ÿ±ÿ’¼ÿ‘Ãÿ‘Èÿ“Êÿ”Ìÿ•Ìÿ”Ìÿ“Ìÿ‘ÌÿÌÿÌÿÌÿŒÌÿ‡Ìÿ„Éÿ‚ÅÿÀÿ‚·ÿ~¬ÿuœÿiÿÞèéÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿýýýÿÀÀÀÿ---ÿÿÿÿÿ”””ÿõõõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSˆÿ|ˆÿ‚œÿ‡«ÿеÿ‰½ÿˆÄÿ‰ÇÿŒÊÿŒËÿ‹ÌÿŠÌÿ‰ÌÿˆÌÿ‡Ìÿ‡Ìÿ…ËÿƒÉÿ€Æÿ}Àÿy¹ÿz°ÿv¢ÿlÿa‘ÿÿÿÿÿÿÿÿÿÿÿÿRÂÂ…3ÂÂ…ÿÂÂ…ÿ„ÿ¨¨qÿPP4ÿ ÿÿÿ44!ÿ`ÿÀÀƒÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿŸªsÿntÿy‘ÿ¢ÿ€¬ÿ¶ÿ€½ÿÂÿÆÿ‚Çÿ„Éÿ„Êÿ…Ëÿ„Ëÿ„ÊÿƒÈÿÇÿÄÿ|¿ÿx¸ÿs°ÿs¥ÿk•ÿ%hÿ­³yÿÂÂ…ÿÂÂ…ÿÂÂ…Rÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÕÕÿHHHÿÿ%%%ÿ­­­ÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿž»¼ÿl}ÿu”ÿw¢ÿx¬ÿx´ÿyºÿ|¾ÿ~ÁÿÄÿ~Åÿ}Æÿ|Åÿ}Äÿ}Âÿ{Àÿy¼ÿw¶ÿs¯ÿn¥ÿj—ÿcƒÿ¼ÎÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÊÊÊÿ777ÿÿÿ   ÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹®²ÿf~ÿn“ÿpŸÿp©ÿs¯ÿv´ÿx¸ÿx»ÿu¼ÿs½ÿs½ÿs¼ÿr¹ÿq¶ÿq±ÿp«ÿk¢ÿf–ÿ`ƒÿ­ÂËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÛÿaaaÿ ÿ<<<ÿ¹¹¹ÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™µ»ÿb{ÿhÿkšÿl¢ÿo¨ÿq­ÿp°ÿn²ÿm²ÿm²ÿl°ÿj­ÿj©ÿk¤ÿgœÿaÿ*e…ÿ¾ÎÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÐÐÐÿoooÿ¬¬¬ÿùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÛÞÿL}ÿ^€ÿcŽÿe˜ÿfÿf¡ÿe£ÿe¤ÿd£ÿc¡ÿcžÿc˜ÿ`ÿZƒÿm’§ÿéîðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÊÊ”3ÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÉÉ“ÿ¨¨|ÿNN8ÿ‹‹fÿÆÆ‘ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÉÉ”ÿžxÿ\„’ÿ[}ÿZ…ÿ\‹ÿ]Žÿ]ÿ\Žÿ[‹ÿX…ÿ+a†ÿjŠ’ÿ¤­ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”Rÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØØØÿzzzÿ···ÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýüÿòòòÿæååÿáààÿàààÿàààÿàààÿàààÿàààÿàààÿáààÿåäåÿèéêÿ¾ÊÐÿ¢·Äÿªºÿ…¢´ÿŠ¥¶ÿª¼ÉÿÚâçÿýýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿëëëÿùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿàåãÿ¨¤¤ÿvllÿcVVÿaTTÿbTTÿbTTÿbTTÿbTTÿbTTÿ`TTÿhbcÿ““ÿ­¾¾ÿéððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿ›££ÿxnnÿ©ŠŠÿ¸––ÿ¹——ÿ¹——ÿ¸ššÿ·˜˜ÿ¸——ÿ¹——ÿ­ÿyghÿIVVÿH}}ÿÉßßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÿeggÿfYYÿÖ¿¿ÿùßßÿöÝÝÿêÌÌÿÝÈÈÿçÓÓÿøÞÞÿûááÿëÒÒÿ—†‡ÿ9::ÿ!99ÿ»ÅÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\øøøf:99Ô]MMÿÉ««ÿëÉÉÿܾ¾ÿ›„„ÿnccÿžŽŽÿßÀÀÿíÊÊÿÜ»»ÿ‘xxÿF99ÿHBB³ÇÇÇmÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ¤1((üiSSÿ¥ÿ¨„„ÿE99ÿÿ@66ÿž~~ÿ¬‰‰ÿt]]ÿK;;ÿ9--ø;..h&¼û8**ÿ<..ÿÿÿ ÿ3))ÿ9..ÿø ã’6**ÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÿþÿÿÿþÿÿÿÿÿÿGabeditSrc250/icons/Gabedit48.png0000644000175100017510000001016713130664665017043 0ustar alloucheallouche‰PNG  IHDR00Wù‡bKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÕ%=VуIDATxœÍ™{p]WuÆû¼îû^]½®–,ŶdY±‘_‰Áv‚“:”â6)S¦„ÐÂÐ2eÚÒéL L›2¥Ì@‡@!¥˜ å %¤Iœ8~G±Ù’ɲ¤«×}é>Ï9{÷s-YHN aZÖÌ™;÷<öþ¾½Ö·ÖÚç^‡éºÞ …¿lšÁ›‰µ†aŒŽž%—K †hkëÂ4-’ÉKå|>=ã÷ûjlì¸w`à…Ù×3ï2 ¿>xMÓ4ýók×v¸á†ß1n½õlÞ¼‹tzŠRi®®-Ü~ûŸ²}û>"‘˜áó£–èÓuc,™¼xì7EÀPJ5·þ*–Ëåà¾}·ôÕׯÓßýî»io¿Ž|>äé¡··mÛö FÙ¶­'žø O?ý_  ½í¹çž3wíÚ•zØŸBLÕ?ÝÀ7•§ Ã`Ë–^²YA}}„ÆÆ(R†ˆFoÇqn!  ÅÑu¿_‹Z‘£Xœ: åÂ× àNà— ä~Õ§…ìÙsGsôh?gÏŽ!„@×R*”€ PX`ttŒ5kjèîŽÑÒý à÷Ìxµ‹J)æææˆF£X–µ‚À›oÙžþ8ÓÓsH)±ÊH’XÔÏÞ½·ÑÛÛN<Þñ# ª@·+„588ÈÁƒÙ»w/û÷ïG×—kÞ•.…|\nÛ¶uÕiLÃÀ4u&FX˜§›£R* é&u‰Ú»úH´®ChÚµb¿Sá…ЗŽ]qU)Erd„'_z‰Ùxœs±ºñª[Ý”büÌaZ&Ž3sö~UÆÒ@Þê)®‚Š "PG¸çfæÖ½‰†¶®kÞøó;W%ð¢ÏG®³“½üþöí+Âèµldè4?>øqü£ÇpLh ‚)¼I5µD@*p s”~€qê‡Ôíº“·¾÷ãÄâWÿ#¼Š†‡‡¹ï¾ûøÞ÷¾ÇñãljD"Üzë­+Âèjöø#ðÔ÷ÿ‰ZË¡%~–¦ºM²qR+ÁlaŸdêäwùRÿÜñácÓÖ}WgUJ)R©,,,pîÜ9&''qçš<üÐg9ö³Ïц°Aªàu04¯z „¬Î‡F®ð™`à³çùÁþ˜Â=÷±cïÛ¯€‚P(D<GÓ4b±‘Hã4ðÄã_ç蓟#ƒ¨A~À`è _ŽåJ )Á‘`Êê½:Ãágßø(pŒÞ­+k­ðχ-žPÀÜć|þC‡p]—á øØ§?ÍÃ/²®¯í*™b~jñì'h‹@ÔòÀø˜Ê[}!@Ó¼ø›Pá…‘’`HÐ]Ъ"Ç)¾ûÀ‡ùöÛþ…p¬a%¿Û»wñ„”’C‡ñøð0å|Þ;纤††Øa¼çN‚Áàª>ó¯÷AÔ%dAÀ„€î÷)oÕu½ \UWªzMVÁW¸:T 9¢þ›{þâ?çû{V !MÓhll¤©©‰3gÎT‹ÔÕÕ‘H$ðûýU¢6ƒƒß$>…Ï׉Ôz™Nþ‚ëâpËŸ–ªf͆¸¼¼â¨ÓmïSóÐIA* Æ_~”éä‰Îå¸Ò&&&8xð §NDJ‰¦y±9>~‘|¶¶6vìØÊáÃû‰FŸ!‡ùyxüp”Úš ~¿Þ4¼ÁE{ü娆Üq«ñS#Ãó‚!×¶£A@BDJ?õŸÜñ®\€ëºô÷÷óÔS±iÓ,““ÐÔÓÓPWWaxøQž}vÀ1jkŸ¡½ Âa0Nûhðƒ^Ó_Í÷Â ÅæB«*Ù´@7AhP²¡ì@ÅöVJW šëiÁ`–ß#1ÐÿðJWŠxfzŠ7xß *eµH ?æ%'Gdì0û{Á²¼¸Ö AÁÕñ…<ˆ€—m4E‘ &ºeaXš@‰(v8[ª@>Å‚—†ª•Ms<:Þx¦ åì$Ÿüéñ‡ë–\±ëº¤ëÂ… 0v~­[#lMì ›}È[yr9°5Æ!R•¼W”°–*®¦)"øMÝŒk5H²”ƒã,SØY r`ƒÞƒZu!4tËóî»6´²aýΕ"Öu––fúúšhm²dõ<44Àõ××ÒÙÙÂõ׿•Ç{€bqË‚LF‘)y=y}jòà˜ } ðq]`i MÓø„@¬AáÃ|¢@ÆÑ(*e/+U{ o!$rùôÕ505•¤¿š›n’ôôxàææàìÙ>ßRZìÛw˜^¸—™™#ØvŒñÉ ”™£Ô×YPc@P÷uO: c"°è( (2hL"´5z7j^­Ð<½+åyÚ0üË lª÷Gâ5tu×ÑØ(Ðõ¥ö8‡uë£44Õâj†ÕÀ›nþââõód4û3ô0ÌÖ@‡2hÖ*Ž Ñ(¢“Cg I‰"¢ˆòI¢†bVW ƒrAºàj^:µ]ÈT ZÛ¶ˆÙøÎ™3€WÄÎ;Ɖ—.ñ»s )«B2Jq&ûÙö.ü¿TÌÖ®¿…#¿ø9FÜÅFȪÓ8¬U³Ôq‰‰Ä¤ˆX@Dz(QBXÒ­®QÖ$®íéÏ•žW²l=Áÿ$ÓL/x_Ÿç¥8‰‚Áfb±QOHU ‡aÝÚ6n¼žwì܉išËÈ-[xôð·¸XÃ.E¨ñëŒ"®„z J”4E€ A\ 4ÀÄÆÅE¡P„îÇÕ$¶^®@¾ ó6Ì•`Gß]Ü]Å{Ï/k@)E>Ÿgf&O>¯PªZ€€bææJd³yÇYA@Ó4nnºƒƒS?¢*Scèd…í¤„"­C­Q­Bˆ ð!¨¥PF£dD(”]r›T’%K[üåÍ÷,›w!>ŸHćÏ'–yÀ² 6 |«¶Ôår…ï~å"•úõ8V™Eæe7TdA•Hù*ÄpˆA•€"…ÂÄ+V^ÈJ¼cR®ÄHç˜^P\œ‡·|€†xÓJ/&“‹š›#_ªàº,ó€ëB¥â2žJÓŸLb&•)Å@¿ËéÓ’#GŠœ?wmH£Æ9„ùf—¢›eÆ­P‘E2vŽ)_šU$®+j4EH(JáWÀ+ZÒ…” R)ë 󹓳Jr3»÷|`ë2c™Ì"dn²í¢~i®ÌÎùʃ/ó‰Ï afÂôtÅéë³èëOþ”º…È6Ã…nTvm{ˆ…µQ´øÅÚz4MÞW¤h”H ø…ƒA¿r H‰îJ*ŽIVEE.§3;$!6ó¾w~Љ…ü Ϻº Ëf¸PIJ–VÀ4!²ØÑåSŸZ϶m ¥=ò#ŸÌ#Fê ë,äì:Ôã ëÆÐ;6nËâ6—PyŠáºo¡åÐDS•1dIA¶â”LÜœ"“ÔY8µ†¯õ~Úš+À/XZeE¡Pd~¾¸BÄ¥’÷{×]lÛV¿ <€ãÏCk#\2 lÊmÀ™n$;—D?ó<ÁzwCv[zm‚ (}©R¸ÒaÁ‰â–LdÊÅhÁ¸%rL§s×F@A4¡¹9B,¶\Ä¡45‰Ç£+2@4\6 ¯¸hT‡öÄ.Ýv~ŸîW^áØÙMœIÜ á<*ìÇ ×P¶t*nUˆ æjó1°%…µ*®½*øEOŽŒàJɉ3g8ýòo_îlΤ™rÏ\±+Ó…µsÐÖ “Âkâ«%¸¥ôsø€¤ÚC*·-ç¥M‡Åý K»› Pô^e´Ù¼4?EqÄÏjf4G"Þ?¥È··1ÑÓHCÚ¶¼•ذ>FMk+õõ+RélÙÃáC?B%ÖCÈ…Œ÷¬.w~ô6·Ás÷F‘ïÀ•^‹£ª›ú%Ó–~M½yÂóìîÞ„ÐVbôÔ×{p]ÆË6#ƒ)¦¦½½Ë›¹ ç³ô…Št„B„ÃáemØs_xú«\ œƒÚ¢¨á7gèhÿ[o|3£o¾‹ÆÁ0Bx­‰mC¹ Žs%! ]y¸1Åï­O°©qõø_$pÙ¼vº©ÚNŸG×—œ[_½½µtt4­º©7tƒî¸{O>ˆM§yÓ-RW›Ã¶áȈFƒ`¾‡›nòe~`f¼~ÐdæèÇОãOÞøÉ«‚_AÀu].]šäĉIvï–lܸä™xñÅ9t}‚B¡°ÂwᅦþS÷³ó¦~š›—6Cóó08hcär5${›eµ@„u)hE/<Ç;C­lîØüÚ8~|ñD2›¦µ;Bëšåítc#¬ë‰2¦WøöË//~ ¸ÒL;Ͷæ³tuA]GÀ¶½í¨¦ÙŒŒÜÏ3ÏÜÏš()¸¤ Ô2l¬ÀºyÐŽaÌpÛß D^ü2\¶Ëxæ™IB!IM ÌÎzà_x{lؼªw0>.p]…ãxþ˩Ҷáb%€Å¿£4‰È8Xn@)G¢br[ç[¸ë¶ÑÞÒ}MÀW% ë:MMMH™àk_¢|Brzz›à… 04'‘h"¬:X]]áð1?ÿ-tü~/M¦RLúxÏ-_ã-A25Ž.4jõ´7¬§»s†±²º_3Ë_h”” Ÿ8ÁÄø%n“¼qÚh5@w`(”âÇ'N0ÓÞŽé_½2:|ìÀ+ìi>L($)—a`r }Ť½Ö+Îµí¤ ixêä©_ ü¢)¥¶+¥””R>ÿ&ÿW‚ÿ>SÿV~ÿ4Hÿÿ¤¤¤ÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ\ÆÆÿÏÏÿääÿììÿååÿÒÒÿ­­ÿ«ÏÊÿ¬É¸ÿ¸¡ÿ’¹¤ÿ¤Å¶ÿÈÚÔÿúûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿüüüÿ¹¹¹ÿ&@@ÿ‰‰ÿããÿÏÏÿääÿ®®ÿ CCÿŒÿóóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖììÿººÿááÿôôÿüüÿõõÿããÿÄÄÿqÿB“ÿ@™ÿ<›ÿ2˜%ÿ%.ÿ*ŠEÿq«‹ÿØåáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿÒÔÔÿ?~~ÿÓÓÿÿÿÿþþÿÿÿÿïïÿ‰‰ÿ¥¯¯ÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÖÖÿÂÂÿääÿøøÿþþÿööÿääÿÉÉÿ“Žÿª—ÿ©ÿ¡ªÿ‡ªÿk¨ÿO§ÿ3Ÿ&ÿŒ6ÿ{°’ÿòöõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRõõë3õõëÿòòèÿ±±©ÿ#HFÿ¸¸ÿüüÿÿÿÿÿÿÿÚÚÿ ZYÿ…†€ÿééßÿõõëÿõõëÿõõëÿõõëÿõõëÿŸÎÆÿ¹¹ÿÛÛÿííÿôôÿïïÿÞÞÿÂÂÿˆˆÿÅ?ÿÈAÿÉRÿÄvÿ´ˆÿ¦£ÿ…®ÿW­ÿ*› ÿA‘YÿâéàÿõõëÿõõëÿõõëÿõõëÿõõëÿõõëÿõõëÿõõëRÌÌ™3ÌÌ™ÿÌÌ™ÿ©«‚ÿ3rfÿÔÓÿÿÿÿÿÿÿÿÿÿððÿ„~ÿ…nÿˢÿÌÌ™ÿÌÌ™ÿÌÌ™ÿÌÌ™ÿÌÌ™ÿ¼ÇžÿžžÿÇÇÿÚÚÿààÿÛÛÿÊÊÿ­­ÿ5ccÿÌ**ÿÌJFÿÌI>ÿÌC#ÿÌNÿÌeÿÆÿ´°ÿ€²ÿAÿ/*ÿÁÄÿÌÌ™ÿÌÌ™ÿÌÌ™ÿÌÌ™ÿÌÌ™ÿÌÌ™ÿÌÌ™Rÿÿÿ3ÿÿÿÿüüüÿ¹¹¹ÿ&KKÿ¸¸ÿüüÿÿÿÿÿÿÿÚÚÿ [[ÿ‹ŒŒÿóóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøúùÿ-…lÿ¡¡ÿººÿÀÀÿ½½ÿ««ÿ„„ÿžccÿÌhhÿÌÿÌwtÿÌDAÿÌ1&ÿÌ,ÿÌ>ÿÊgÿµŠÿŽ£ÿU™ÿo¤qÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿÒÔÔÿ?}}ÿÔÔÿÿÿÿÿÿÿÿÿÿïïÿ‰‰ÿ¥®®ÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–µ™ÿZ„ÿTc@ÿ {zÿÿˆˆÿÿ ÿ¼ccÿÌuuÿÌxxÿÌffÿÌ<<ÿÌ''ÿÌÿÌÿÌ ÿÆ8ÿ­bÿ‘ˆÿTŠÿÒßÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿüüüÿºººÿ'MMÿ¹¹ÿüüÿÿÿÿÿÿÿÛÛÿ ^^ÿŽŽÿóóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûüûÿG3ÿƒrÿ¸9ÿÁÿ¬#!ÿqAAÿ¶¶ÿÀÀÿc^cÿÌ77ÿÌ88ÿÌ))ÿÌ$$ÿÌÿÌÿÌÿÌÿËÿÂ#ÿ¯Iÿ‚ÿ‰¦nÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRëëÖ3ëëÖÿêêÖÿ¿Á¯ÿ8tnÿÑÑÿÿÿÿÿÿÿÿÿÿîîÿƒ€ÿ–žÿèèÓÿëëÖÿëëÖÿëëÖÿëëÖÿ«À¡ÿ\ƒÿ©iÿ¿'ÿÉÿÌÿÉÿ …ÿœ»ÿ ‚ÿÀ!ÿÌÿÌÿÌÿÌÿÌÿÌÿÌÿÊÿÄÿºÿžKÿru$ÿèéÕÿëëÖÿëëÖÿëëÖÿëëÖÿëëÖRÞÞ½3ÞÞ½ÿÜܺÿ¢£ˆÿ"KDÿ¼¼ÿýýÿÿÿÿÿÿÿÝÝÿ _[ÿ{}hÿÔÔ³ÿÞÞ½ÿÞÞ½ÿÞÞ½ÿÞÞ½ÿo’Sÿ…„ÿ±RÿÂÿÊÿÌÿÌÿ†2ÿŽÿ•ÿl BÿÌÿÌÿÌÿÌÿÌÿÌÿÊÿÈÿÂÿ¹ÿ© ÿ„Tÿ¾ÂšÿÞÞ½ÿÞÞ½ÿÞÞ½ÿÞÞ½ÿÞÞ½Rÿÿÿ3ÿÿÿÿþþþÿÍÎÎÿ:ssÿÎÎÿþþÿÿÿÿÿÿÿëëÿ€€ÿ §§ÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿs‘Pÿ˜rÿ³5ÿÁÿÈÿËÿËÿËÿ&fÿÿ0Yÿ%.ÿ…1.ÿƒ=-ÿI)ÿ‚O"ÿŒLÿ™Bÿ©/ÿ¸ÿ¶ÿ¨ÿ‰7ÿÖÔÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿýýýÿÀÀÀÿ-ZZÿ¿¿ÿýýÿÿÿÿÿÿÿààÿhhÿ’––ÿöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿy…BÿšUÿ²ÿ½ÿÄÿÇÿÈÿ±ÿy#+ÿr75ÿ\6ÿ‚y4ÿ{‹7ÿo•7ÿ\˜6ÿK—4ÿG•1ÿU‘%ÿZ‰"ÿWx ÿqNÿ“$ÿ†%ÿÛ×ÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿþþþÿÉÊÊÿ6llÿÊÊÿþþÿÿÿÿÿÿÿèèÿhhÿq@@ÿâÄÄÿùööÿÿÿÿÿÿÿÿÿÿÿÿÿ„}Fÿ—:ÿ®ÿ·ÿ¾ÿ²ÿ”.ÿ‹N(ÿ}k4ÿu„4ÿjš9ÿY¦;ÿG­>ÿ:¯?ÿ,°Aÿ%¯Fÿ­Jÿ©Jÿ8§@ÿ?Ÿ<ÿ>’9ÿ<{*ÿQKÿèçâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÙÙ³3ÙÙ³ÿØØ²ÿ©©Žÿ,\WÿÄÄÿýýÿÿÿÿÿÿÿããÿ ]]ÿc ÿ¾ÿÊ ÿÛ00ÿá``ÿâÿ[?ÿŽ&ÿ§ÿ±ÿ›,ÿ’_ÿ‡~%ÿf3ÿY¡7ÿI¯:ÿ@¶Dÿ8ºQÿ,¾Zÿ(¿bÿ¿fÿ¾nÿ¼wÿ¹zÿµtÿ:³fÿ9ªdÿ5Wÿ,ŠCÿO‰ZÿÓ×´ÿÙÙ³ÿÙÙ³ÿÙÙ³ÿÙÙ³RèèÑ3èèÑÿççÐÿµ¶¥ÿ/a^ÿÅÅÿýýÿÿÿÿÿÿÿääÿqqÿ‹…ÿââÌÿçæÑÿæÎËÿã¡¡ÿárrÿØ;;ÿÅÿÇÿŠ:ÿ‡zÿy”ÿK£1ÿB¯@ÿ5¶Jÿ%½OÿÃZÿÆkÿÈ{ÿɆÿÉÿÈ—ÿÈ ÿÅ£ÿ¡ÿ1Àÿ7¹Šÿ2¯€ÿ"ŸnÿˆUÿE‚MÿäåÍÿèèÑÿèèÑÿèèÑRÿÿÿ3ÿÿÿÿþþþÿÈÉÉÿ5iiÿÈÈÿþþÿÿÿÿÿÿÿççÿwwÿ›¡¡ÿùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùøøÿy*)ÿk>ÿd}ÿ[—ÿQ¦%ÿ*±Fÿ"»YÿÂgÿÆvÿÉ…ÿÉ“ÿÊ¢ÿÊ­ÿË·ÿ˼ÿËÁÿËÃÿÉ¿ÿ'DZÿ4æÿ,ºŸÿ¬ÿœyÿ„\ÿ©’ÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿýýýÿÁÂÂÿ.\\ÿÁÁÿýýÿÿÿÿÿÿÿááÿkkÿ”˜˜ÿöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–~ÿGw ÿ@—'ÿC¨7ÿ3µIÿ¼eÿÃxÿÆÿÉŸÿË­ÿË»ÿÌÊÿÌÒÿÌÙÿÌÚÿÌÜÿÌÛÿÌØÿ$ÌÉÿ/˽ÿÀ³ÿµ¦ÿ¨•ÿ–~ÿ{[ÿçîêÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿþþþÿÌÍÍÿ9qqÿÌÌÿþþÿÿÿÿÿÿÿêêÿ~~ÿŸ¦¦ÿúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿFw?ÿ(Œ/ÿ5¤Gÿ8´Wÿ/¾jÿ‰ÿÈÿʳÿÌÄÿÌÍÿ!Ì×ÿ%Ìáÿ%Ìãÿ ÌèÿÌåÿÌäÿÌãÿËßÿ"ËÐÿ ÇÅÿÁÀÿ»»ÿ¯¬ÿž–ÿ‹yÿ…¯ŸÿÿÿÿÿÿÿÿRÏÏž3ÏÏžÿÍÍœÿ—˜qÿ J?ÿ½½ÿýýÿÿÿÿÿÿÿÞÞÿ _[ÿsuWÿÅÅ–ÿÏÏžÿÏÏžÿÏÏžÿÏÏžÿ¢±†ÿv0ÿ•Lÿ%¬fÿ0ºtÿ,ÄŒÿÉ«ÿÌ»ÿÌÌÿÌÛÿ$Ìàÿ/Ìåÿ4Ìíÿ;Ìíÿ7Ìðÿ)Ìïÿ!ÌëÿËéÿÈãÿÅÏÿ¾Èÿ¹Åÿ¶Áÿ­·ÿ£¨ÿ“Œÿ/kÿÏÏžÿÏÏžRúúõ3úúõÿúúôÿËÌÈÿ;vuÿÐÐÿÿÿÿÿÿÿÿÿÿííÿƒ‚ÿŸ§¤ÿööñÿúúõÿúúõÿúúõÿúúõÿ`gÿ„Hÿžiÿ®‚ÿ»¢ÿÄÀÿÊÆÿÌÐÿÌÚÿÌçÿ&Ììÿ8ÌðÿGÌóÿUÌñÿYÌïÿ=Ìîÿ,Ëìÿ ÅèÿÂàÿ¼ÌÿµÌÿ²Éÿ¯Äÿ©ºÿ¡®ÿ•šÿ|pÿßæßÿúúõRÿÿÿ3ÿÿÿÿüüüÿ»»»ÿ(OOÿººÿüüÿÿÿÿÿÿÿÜÜÿ __ÿÿôôôÿåññÿg»»ÿ0¦¦ÿ?¡¡ÿ%tKÿ’fÿ¬–ÿ²¸ÿ¼ÈÿÃÒÿÈÐÿËÚÿÌæÿÌêÿ/ÌíÿEÌîÿeÌïÿ…Ìîÿ€ÌíÿLÌìÿ5Êéÿ"¾åÿ¹Òÿ²Ìÿ«ÌÿªÊÿ§Æÿ ½ÿ˜°ÿ‘Ÿÿ‚ÿÂÔÑÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿÒÓÓÿ>||ÿÓÓÿÿÿÿÿÿÿÿÿÿïïÿˆˆÿ¥®®ÿîööÿ°°ÿÇÇÿÍÍÿ¾¾ÿgÿ»žÿÈ¿ÿ³Èÿ¸ÄÿÀÄÿÄÉÿÄÐÿÇáÿÉçÿ*Ëéÿ?ËêÿbËëÿÌëÿ–ÌêÿeÌèÿ?Èäÿ)»Õÿ°Ìÿ©Ìÿ£Ìÿ¡ÊÿžÆÿ˜½ÿ’²ÿŒ ÿ€„ÿºÐÍÿÿÿÿRÿÿÿ3ÿÿÿÿüüüÿ¹¹¹ÿ&LLÿ¸¸ÿùùÿÿÿÿüüÿÚÚÿ \\ÿ‹ÿ…ÊÊÿÐÐÿêêÿîîÿÚÙÿ•vÿ»«ÿ¾¸ÿ³²ÿ³ºÿ¹Æÿ¸Ëÿ¸ÌÿºÎÿ¾Ûÿ(Ããÿ8ÈæÿWÈæÿsÈæÿeÈäÿIÇÝÿ8¿Ñÿ'±Ìÿ¥Ìÿ ÌÿœÌÿ™Ëÿ–Æÿ“½ÿްÿ‡Ÿÿ{ƒÿÊÛÚÿÿÿÿRÂÂ…3ÂÂ…ÿÂÂ…ÿ ¢pÿ0o`ÿÀ¿ÿ¹¹ÿÑÑÿ»»ÿÈÈÿzÿ~ˆ`ÿQ³™ÿÞÞÿøøÿûûÿçæÿ“{ÿª¡ÿŸ¡ÿ©±ÿ«¾ÿ­Æÿ¬Éÿ¬Ëÿ¬Ìÿ°Ìÿ$¶Ïÿ*¼Óÿ3¿ÕÿAÀÔÿ6½Ïÿ0µÌÿ%ªÌÿ¡ÌÿÌÿ›Ìÿ˜Ëÿ”Êÿ‘Äÿ»ÿŠ®ÿœÿs~ÿ¯¶}ÿÂÂ…Rÿÿÿ3ÿÿÿÿüüüÿ¸¸¸ÿ'88ÿ??ÿ&&ÿ>>ÿ((ÿ;;ÿ 00ÿ‹ŒŒÿ”ÑÑÿÔÔÿòòÿööÿããÿ–…ÿžšÿ˜Ÿÿ °ÿ¡»ÿ¢Äÿ¢Éÿ¢Ìÿ¢Ìÿ¤Ìÿ¨Ìÿ"­Ìÿ'°Ìÿ)±Ìÿ$©Ìÿ ¢ÌÿœÌÿšÌÿ—Ìÿ•Ìÿ’ËÿÈÿÁÿˆ¸ÿ„«ÿz—ÿ1{…ÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿåååÿxxxÿÿÿÿÿÿSSSÿÈÈÈÿùüüÿ>ÂÂÿÐÐÿ××ÿÅÅÿ‹ÿ†„ÿœÿ”«ÿ˜¶ÿ˜ÀÿšÇÿšËÿ›ÌÿœÌÿÌÿžÌÿŸÌÿÌÿ™Ìÿ—Ìÿ–Ìÿ”ÌÿÌÿŽËÿŒÉÿ‰Åÿˆ½ÿ„³ÿ|¥ÿsŽÿ~¨¯ÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿÿÖÖÖÿEEEÿÿÿÿ###ÿ«««ÿýýýÿÿÿÿÿúýýÿÖÖÿmÆÆÿŽÍÍÿ¹ÏËÿvrÿ‡”ÿŠ¥ÿ±ÿ’¼ÿ‘Ãÿ‘Èÿ“Êÿ”Ìÿ•Ìÿ”Ìÿ“Ìÿ‘ÌÿÌÿÌÿÌÿŒÌÿ‡Ìÿ„Éÿ‚ÅÿÀÿ‚·ÿ~¬ÿuœÿiÿÞèéÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿýýýÿÀÀÀÿ---ÿÿÿÿÿ”””ÿõõõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSˆÿ|ˆÿ‚œÿ‡«ÿеÿ‰½ÿˆÄÿ‰ÇÿŒÊÿŒËÿ‹ÌÿŠÌÿ‰ÌÿˆÌÿ‡Ìÿ‡Ìÿ…ËÿƒÉÿ€Æÿ}Àÿy¹ÿz°ÿv¢ÿlÿa‘ÿÿÿÿÿÿÿÿÿÿÿÿRÂÂ…3ÂÂ…ÿÂÂ…ÿ„ÿ¨¨qÿPP4ÿ ÿÿÿ44!ÿ`ÿÀÀƒÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿÂÂ…ÿŸªsÿntÿy‘ÿ¢ÿ€¬ÿ¶ÿ€½ÿÂÿÆÿ‚Çÿ„Éÿ„Êÿ…Ëÿ„Ëÿ„ÊÿƒÈÿÇÿÄÿ|¿ÿx¸ÿs°ÿs¥ÿk•ÿ%hÿ­³yÿÂÂ…ÿÂÂ…ÿÂÂ…Rÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÕÕÿHHHÿÿ%%%ÿ­­­ÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿž»¼ÿl}ÿu”ÿw¢ÿx¬ÿx´ÿyºÿ|¾ÿ~ÁÿÄÿ~Åÿ}Æÿ|Åÿ}Äÿ}Âÿ{Àÿy¼ÿw¶ÿs¯ÿn¥ÿj—ÿcƒÿ¼ÎÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÊÊÊÿ777ÿÿÿ   ÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹®²ÿf~ÿn“ÿpŸÿp©ÿs¯ÿv´ÿx¸ÿx»ÿu¼ÿs½ÿs½ÿs¼ÿr¹ÿq¶ÿq±ÿp«ÿk¢ÿf–ÿ`ƒÿ­ÂËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÛÿaaaÿ ÿ<<<ÿ¹¹¹ÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™µ»ÿb{ÿhÿkšÿl¢ÿo¨ÿq­ÿp°ÿn²ÿm²ÿm²ÿl°ÿj­ÿj©ÿk¤ÿgœÿaÿ*e…ÿ¾ÎÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÐÐÐÿoooÿ¬¬¬ÿùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÛÞÿL}ÿ^€ÿcŽÿe˜ÿfÿf¡ÿe£ÿe¤ÿd£ÿc¡ÿcžÿc˜ÿ`ÿZƒÿm’§ÿéîðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÊÊ”3ÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÉÉ“ÿ¨¨|ÿNN8ÿ‹‹fÿÆÆ‘ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÉÉ”ÿžxÿ\„’ÿ[}ÿZ…ÿ\‹ÿ]Žÿ]ÿ\Žÿ[‹ÿX…ÿ+a†ÿjŠ’ÿ¤­ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”ÿÊÊ”Rÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØØØÿzzzÿ···ÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýüÿòòòÿæååÿáààÿàààÿàààÿàààÿàààÿàààÿàààÿáààÿåäåÿèéêÿ¾ÊÐÿ¢·Äÿªºÿ…¢´ÿŠ¥¶ÿª¼ÉÿÚâçÿýýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿëëëÿùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿàåãÿ¨¤¤ÿvllÿcVVÿaTTÿbTTÿbTTÿbTTÿbTTÿbTTÿ`TTÿhbcÿ““ÿ­¾¾ÿéððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿ›££ÿxnnÿ©ŠŠÿ¸––ÿ¹——ÿ¹——ÿ¸ššÿ·˜˜ÿ¸——ÿ¹——ÿ­ÿyghÿIVVÿH}}ÿÉßßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÿeggÿfYYÿÖ¿¿ÿùßßÿöÝÝÿêÌÌÿÝÈÈÿçÓÓÿøÞÞÿûááÿëÒÒÿ—†‡ÿ9::ÿ!99ÿ»ÅÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÿÿÿÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\øøøf:99Ô]MMÿÉ««ÿëÉÉÿܾ¾ÿ›„„ÿnccÿžŽŽÿßÀÀÿíÊÊÿÜ»»ÿ‘xxÿF99ÿHBB³ÇÇÇmÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ\ÿÿÿ¤1((üiSSÿ¥ÿ¨„„ÿE99ÿÿ@66ÿž~~ÿ¬‰‰ÿt]]ÿK;;ÿ9--ø;..h&¼û8**ÿ<..ÿÿÿ ÿ3))ÿ9..ÿø ã’6**GabeditSrc250/icons/Gabedit16.png0000644000175100017510000000160113130664665017027 0ustar alloucheallouche‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÕ&.#Î*ºIDATxœuŒÏke@ß7óÍdg“l6»1…üØí’Ö Ú ¥Y%¥J=¶={QOÞûzób{,X,ä`(JmA°P!¢`šZ•ü 5›æGw»Éîlvwfgæû–9\,òÚÌ ûµG¬ýú%ÁýRØZ·þ¤Z½Gsãgμý)–@®×jT+®~ñ£ù=^€Û…–w¿VBŽ»®x·¹t)äÁƒ‘Ÿ¡º7‚—\ÅÈ œ^Á€•Â6Jtºk<ÙYÁjkT{ümŒj»M+1M0¥@'^!‘ý„­xŠÅnŠª­éÈ.ÂX¡Ç®bfa|§ÐD:–¥mÃ@)P±&8p½Ev–æø.ñë')¤=Žõ<ÀÕ1 \¶;‚Bá &Ч±R(¥P 6˲iͽß"šOfù½’fg²ÌJ¡ŒMo+G®s”¹ÓçI$RÈPÅÄ ¤%xöx’ܸbh: uãŽ,í¡ï¤¹+çð1ÑZ1{6DÚ½„J!3 Ç0Q âHãZ6ƒŽÃù™÷£Ï)¤VyT~‡ÌÃl7!YZãä«9²Ž€,{ûA@ë|_Ðj·¥#eÎ=ÿ-[»—¿Y£5ÒÇ¡B… Çú)ù«^ÿg` A»©ùþcØijJ€ikœƒ Ÿ®H2y¢1»M1s˜£/´{äX:-&²‡opòÙ,#® î¢èżŌió4ä†ç=¶òù¥‡/:Ø6 Ó$Øßÿ—<­õÝ¿ü“N7I‚IEND®B`‚GabeditSrc250/icons/Gabedit32.png0000644000175100017510000000446113130664665017034 0ustar alloucheallouche‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÕ%1…ëtŒ¾IDATxœµ–kl熟ofvfï»^/øNÀ6†uÀ@“’'Bo M”(j$ª6I+¥j¥ÒVj£V­Ò•ªJ½üˆÔ ýÑ&MHÔF¹I )´ÐB‹à066ÆØÞ]Û{ïܾþ¼à$D´UôIs=ï;ï9ïùFp ¡ª ±XòñtºegggOÝùó§yLf=ÑhÂ(yžód4šúññãg®%ç|hRJX $®öeY n¨·÷su7n¡¯ïïœ<ù6½½÷°hQ›rèÐþø¾}/ß·m[ï™cÇ \#vè×€8ð3 ÷ª,5M›6°téRÜvÛf6nÜH(--‹I&+‘__û·s¸_ÜK«¦i¢ë:ªª „àîm[8ð·<õÔo„)AJÇ)³eË]¬Y³þ?À÷CœÎåê€ÝÀf€r©Ä Ï>Ëšõëé^µ !ŽëP)W°,kA×®" “8¹! “C˜…)<×#Õ¸Œ†%‚Í+ ¾EÕ®ªÀ‚ð\˲°m{ÁuMÕˆÇã ®f¦Øûâ/ðÆŽ,\ÀÀc>áÌ ÕäÂÙ´ýëèFè h©Ô‚ Ͻù&ÏìÚÅðɓܜÉÐÖÖö¡Òõy•ýÏÿhq„˜ á$(. ®Çs0í³ûÎr`ü(w<ø:º7,È£¼?ñÜÜ•J…R©„ëºï¿ ÀÈÈ»ì}á{„ìÒaH!‚Xbˆ…!õW2 é(ˆüqöüáÛä&Gä:y²Ø-aóÄø8?ݹ“¡cÇÆb|jÇîä‘Z3äócœÝûKS¤¾w ºê7æüI ÒÛªE òŒÇVÓ²í;Ä‹ýØžÉÔ’‡Bü²ZÅó<°m–ƒlÏdPÁÈÈ«8N•!;GVž#p‚øÒ«ª/=ž¿„HŠ¿< \ÊåS¬"KOf“ßóà…BÝ»Ÿ¦X¦¾<Ïdÿþ—8|ø“Äã¿'ü-Õ*úW=©d€p‚ è ¨ŠUEÇË×C±%‚¸ĤÉ?þŽžßëøs¿O`v†Ó¹>¾ù-“ ¦)»xž7N¼ÆÝ7½E{3”Ë E5B: ( æk J †ë ÜRÙ¡j#\Ð,ÿyÉìqv}‡€¡V‚ÉÉIÎCl¾º»¡R]»$­õËvg©˜`é‚ôu —ÕW!PÑ „X‹$…?F©x+ŸET= TÛ—\s,ÖÆ:Û3—K „@QŠ2Šáp3ß§¿ÿq …i/š¤â×4@7 ® BB ˆ ‚0’$ª"Ђ.¹¸`–ß^lÇŸ3Ú@.ÀÌì,¶* .ƒ!…Éj•‚~m=/ðòècüåü>²Ku:…B«:Š$€ƒN‰ïâ1ˆã†IDÀ¬n ª.ÌÌ(ir94ã’ÅtEAzày—=ê¹ "0Tå’4½«ïáÉ·#¬ 9Ç£â\¤YWq‰P"І‡ÄÄÕ\„¢ài–j1'!ïB<ÝC:Qï+°4™ bÛ…‚çÍo2à:’E¡×%µY0_ƒ3| }ñ ŒÈ Ådž¦ C«îR/J4ˆ2:þL˜3j‚i·À¤Ye¨ã¾;eW;7;ë— TÂ’Þ¥ÍG ª‚üœÉèì,¥qÁ{ý.Ï?o1ðÖD¬ã˜kK°™Ž¹ §©×lšTILHbÒPUGaÆÒ™.E8Ÿ³‰$n'ž¾‘y\-[©ø6¬T¨:΂1Y*Ùüü‰St-ëbMwšîn•3΄Ciäžu¸gf™XUÙv©¶)Æ£E†ƒYtQ"ì™è®CÅŠcV‚dGt'6ñàÝߥ*Tª—pµuMMLiÕt»v˘?ð­'‘—©×ìxeÜØ–a{‡ ‘~‚ërX–dtT#k¦u \œó8Tt-ÖO"°µ£…¥õͼ?´WNŸ 83ôWE7üú«*aA_n çÌÄ¥¸V‘îønX“¥®LFFÞ>ò ‡O} ;3oE :Îö^g`eÛC¼>4üA›ÛÛ˜ÎçIÄAŠšEe]s·´·× ç8U¨R_©”/u©ÉG¹Ø>é2DF „ú‰”øBë|þc³(Ùòpàò(V$Œ Wyî)I¦Ëÿ¹xå%‡/>ìP”Z¨±&¡ë±íCØ68˜¦Bº5Á:žCU,ê…µ‰.¶ÜòUV,éùPà×(äóŒNVðž†hÐߌ&LèûÌâìÙš f½{Q^§kñ³eÙ^ºW|ƒe¶H"F”ºøb†mÁð¥üW%°µ£€\2ÉP*ÅÖiè@IjdÚÚ¸­£cèÀu)†é4ê¸5¼ø#A>’À•'³á0 …èTUeo$BæŠÒ+CU êêVü×À5ýÙ¬$%wìØÁ¡®.²@Ð0¸Õ0¨_¹’|þºZˆ=ƒƒaàQ #¥Ä¶mø]/%Z ðÿÂ~õoþ©cXçaÞIEND®B`‚GabeditSrc250/icons/Gabedit24.png0000644000175100017510000000314513130664665017033 0ustar alloucheallouche‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÕ& ö®k^òIDATxœ••[l\W†¿½ÏžË™sæbO2±Çvœ¸Žsiœ„4Mš‹[U´Aå!BTHñÄ¥/H ^‘úÄ !€§F€R¡¾AKP J*”„¶i¬&!Ûñý{<žñÌ9sÎÌ9góàÄDT­à—öËZ{¯_ÿZÚÿZk˜€ä1DQ$Ž=þ¼æO>·ëÎÉç ´µm &&îçrö._¾ðŸŽh(à à›À–dzBñê«ßÞ=5UÙqò䘚:A.×N"a©wÞys°«+ñ0ñeà7 Ø ¼ ôEQD†(¥BpâÄ3ÔëW¹~ý*QR*•‚&ù¼i;và9à¹Ï ˜.бÕÕSÀ9 oj|œû##<34„N£µÆó=š~€0 X¹ +cxËxÕÄ6ùb?ɾ#XÅRé6@<"ø–j7ÍMÊ+ܸvCƒƒl/6‚©õÚ*w‡ÿÂý¿ý³¾„yÄ4æÆ/Ó~‹ì®gÙ÷ì×èÚy`³¦l7M™ÑQ†ß§Tâñ¸mfoý‰©üœBkŠÎ”GG YèÈBG&¢Àþ½·¹õÇ‘½Í·ê½éiVK%^?wŽåùy~zö,ª¯(ò—©±Rþ%=f•­$¤4èRMHµš¬®~À¯Î~þ¾K:³5ÔÛK|8?~…˜Ñ",/Ðw€ó¸îMfJrv ;I J€0 !BM¼©Ñ-ChºwÙ.³¯÷ê½éiíy ®\»È+¯¬¡u„ãÞä¯×ß`èÐoÉf©úºó’d BJd"Œ¥ ýºî Ý&±$› Ý%†ï½ËJfj¨·WÔj5&MÅéïD‹pþ|“L² §ÖC¥¼N3e`41±8¤•Ë!å)‚È¥îÞ ¾<ô4ª ŠKVÙe Ôªëâø>-a ¨˜€ä^´ùNs„ɵ7QÉEvç R©%5†€ëÒE&=ü6\ˆ|h5 ©¨EUõ}¾O+Šbƒ@JðµÂÌ!Õv’mc%®¬ÿåœÁÓºD‹ˆ<52ÜBàCÌAe Âx„_¨WMììNŒdUL§µ#%)CE 5D!’&¦ßd×Ns÷öòº<¶[>]1‡^é`  .LVˆ³àÖðSGyjÿŠÙœV“• ×¥Öj>üš0Ô¼ýçîOìÀT1~÷û5Ö¯–¹wØb¹¸Äx®Bg¢JŸTàúIÊåÁúV>øë82Ãd¥"TwÄÐZoØ`¤Ù^09r(C{[œ¾5‹ÛAø÷nVÆÛhíe}¯ÃbÏ2†ñz8å<îC­.ÝäÒÈ«…m4®aôMr(3Æ—{NS \ýÁ±®.êõ:#†Å[P-Áø¨àøPžÃÅ"BÊÉårÛÞhG®§‰5ô1ÚŠ1`9ìoÏðÕ=ß`÷¶Ab*¾ÑñpÈË‹4‡{ÓëÌ¿½6|PŠÈ ¬ ––Bàû9jÕ#´ÂI*u¬—øâþ'Ñ öŠÙnZF;ÿ*•?±ÖÔÓÅ¢p‡‰ö-ôß…@Øqvvrè¡(¢w¼A£ñ3”²ŠÛŸ(ôiP%×¥Ùj‘Þ»—wÏœ¡MJ-‹£™ %×Ý”º4l˜Îÿqeffð}Ïó:0¤D]ÝÝÿUüÿÆ ð‹0“Tu­XIEND®B`‚GabeditSrc250/CONFIG0000644000175100017510000000234713130664665014400 0ustar alloucheallouche# unix (Mac OSX, linux, aix, hp, dec ...) config # PKG_CONFIG_PATH = "/usr/local/lib/pkgconfig:/usr/lib/pkgconfig" # GTKLIB = -Wl,--export-dynamic -L/usr/local/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 # GTKCFLAGS = -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include -I/usr/X11R6/include -I/usr/local/include/atk-1.0 -I/usr/local/include/pango-1.0 -I/usr/include/freetype2 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include GTKLIB = `pkg-config gtk+-2.0 --libs` -lpangox-1.0 `pkg-config gtkglext-1.0 --libs` GTKCFLAGS = `pkg-config gtk+-2.0 --cflags` `pkg-config gtkglext-1.0 --cflags` #OGLLIB=-L/usr/X11R6/lib -lGL -L/usr/X11R6/lib -lGLU OGLLIB=-L/usr/lib -lGL -L/usr/lib -lGLU #OGLCFLAGS=-I/usr/X11R6/include OGLCFLAGS=-I/usr/include LIBPTHREAD = -lpthread RM = rm -f RMTMP = rm -f tmp/* MAKE = make MKDIR = mkdir -p WIN32LIB = X11LIB = -lX11 CC = gcc enable_omp = 1 ifeq ($(enable_omp),1) OMPLIB=-L/usr/lib -lgomp OMPCFLAGS=-DENABLE_OMP -fopenmp endif #DRAWGEOMGL= DRAWGEOMGL=-DDRAWGEOMGL COMMONCFLAGS = -Wall -O2 -DENABLE_DEPRECATED $(OMPCFLAGS) $(DRAWGEOMGL) -Wformat-security -Wno-unused-variable GabeditSrc250/Makefile0000644000175100017510000000435413130664665015150 0ustar alloucheallouche include CONFIG COMMON = src/Common/*.o CURVE = src/Spectrum/*.o FILES = src/Files/*.o DEMON = src/DeMon/*.o GAMESS = src/Gamess/*.o GAUSS = src/Gaussian/*.o GEOM = src/Geometry/*.o MODELS = src/MolecularMechanics/*.o MOLCAS = src/Molcas/*.o MOLPRO = src/Molpro/*.o MOPAC = src/Mopac/*.o MPQC = src/MPQC/*.o MULTIGRID = src/MultiGrid/*.o NETWORK = src/NetWork/*.o OPENGL = src/Display/*.o FIREFLY = src/FireFly/*.o NWCHEM = src/NWChem/*.o PSICODE = src/Psicode/*.o ORCA = src/Orca/*.o QCHEM = src/QChem/*.o SEMIEMP = src/SemiEmpirical/*.o UTILS = src/Utils/*.o SYMMETRY = src/Symmetry/*.o VIBCORR = src/VibrationalCorrections/*.o QFF = src/QFF/*.o IDC = src/IsotopeDistribution/*.o OBJECTS = \ $(COMMON) $(CURVE) $(FILES) $(DEMON) $(GAMESS) $(GAUSS) $(GEOM) $(MODELS) \ $(MOLCAS) $(MOLPRO) $(MOPAC) $(MPQC) $(MULTIGRID) $(NETWORK) \ $(OPENGL) $(FIREFLY) $(NWCHEM) $(PSICODE) $(ORCA) $(QCHEM) $(SEMIEMP) $(UTILS) \ $(SYMMETRY) $(VIBCORR) $(QFF) $(IDC) SUBDIRS = \ src/Display src/Common src/Files src/Gaussian \ src/Geometry src/Spectrum src/MolecularMechanics src/Molpro src/Molcas \ src/MPQC src/DeMon src/Gamess src/NWChem src/Psicode src/Orca src/QChem src/Mopac src/NetWork src/Utils \ src/Symmetry src/FireFly src/MultiGrid src/SemiEmpirical \ src/VibrationalCorrections src/IsotopeDistribution src/QFF \ ifneq ($(external_gl2ps),1) GL2PS = gl2ps/*.o OBJECTS += $(GL2PS) SUBDIRS += gl2ps GLTOPS = else GLTOPS = -lgl2ps endif TARGETS = all clean dep .PHONY: $(SUBDIRS) $(TARGETS): $(SUBDIRS) $(SUBDIRS): @$(MAKE) --directory=$@ $(MAKECMDGOALS) all: gabedit gabedit: $(SUBDIRS) $(MKDIR) tmp cp $(OBJECTS) tmp $(CC) $(LDFLAGS) tmp/*.o -o gabedit $(GLTOPS) $(X11LIB) $(GTKLIB) $(OGLLIB) $(JPEGLIB) $(LIBPTHREAD) $(WIN32LIB) $(OMPLIB) -g -lm @$(RMTMP) > ptmp rmdir tmp @$(RM) ptmp clean: @$(RM) gabedit @$(RM) gabedit.exe @$(RM) *.com @$(RM) p @$(RM) pp @$(RM) p.c @$(RM) *.gab @$(RM) *.inp @$(RM) *.mop @$(RM) *.log @$(RM) *.out @$(RM) *.pun @$(RM) *.dat @$(RM) *.arc @$(RM) *.aux @$(RM) *.cmd @$(RM) *.chk @$(RM) *.sh @$(RM) pm6*.* GabeditSrc250/Config.h0000644000175100017510000000027313130665226015054 0ustar alloucheallouche/* Config header file */ #ifndef ENABLE_DEPRECATED #define GTK_DISABLE_DEPRECATED #define GDK_DISABLE_DEPRECATED #define PANGO_DISABLE_DEPRECATED #endif #define GETTEXT_PACKAGE "gabedit" GabeditSrc250/INSTALL0000644000175100017510000000376013130664665014541 0ustar alloucheallouche INSTALL GABEDIT --------------- Installation in unix/Linux system : =================================== The 2.16 version of GTK+ (or higher) is required for this version of Gabedit For install gabedit from src files, execute following commands: gunzip GabeditSrcxyz.tar.gz tar -xvf GabeditSrcxyz.tar cd GabeditSRCxyz cp plaforms/CONFIG.unix CONFIG make ./gabedit you can install (optional) Gabedit in /usr/local/bin directory, for this type : cp ./gabedit /usr/local/bin/. (under root) after installation you can execute gabedit from any directory for this type : gabedit Installation under MAC OS X11 system : =================================== 1- install X11 if this is not already installed on your mac (see http://guide.macports.org/#installing.x11) 2- install macports (http://www.macports.org/) 3- install gtk2 using macports. Under an unix terminal(Applications:Utilities:Terminal), type : sudo port install gtk2 4- install gtkglext using macports. Under an unix terminal, type : sudo port install gtkglext 5- Copy the platforms/CONFIG.MacPorts file at CONFIG in the Gabedit directory and type make (under an unix terminal): cp platforms/CONFIG.MacPorts CONFIG make Installation of binary version of Gabedit in Windows(2000, XP, ...) system : ============================================================================= click to setupGabeditxyz.exe click to Gabedit.exe program Compilation of Gabedit under Windows (2000, XP, ....) system : ============================================================== The 2.16 version of GTK+ (or higher) is required for this version of Gabedit For install gabedit from src files, execute following commands: gunzip GabeditSrcxyz.tar.gz tar -xvf GabeditSrcxyz.tar cd GabeditSrcxyz copy platforms\CONFIG.win32 CONFIG mingw32-make ./gabedit GabeditSrc250/po/0000755000175100017510000000000013130664665014120 5ustar allouchealloucheGabeditSrc250/po/LINGUAS0000644000175100017510000000011013130664665015135 0ustar alloucheallouche# # gedit translations # please keep this list sorted alphabetically fr GabeditSrc250/po/fr.pot0000644000175100017510000120474613130664665015271 0ustar alloucheallouche# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-06-04 09:03+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/Common/Exit.c:111 msgid "Save list of recent projects" msgstr "" #: ../src/Common/Exit.c:112 msgid "Save list of recent host systems" msgstr "" #: ../src/Common/Exit.c:113 msgid "Save the Molecular mechanics parameters" msgstr "" #: ../src/Common/Exit.c:114 msgid "Save the PDB Templates parameters" msgstr "" #: ../src/Common/Exit.c:115 msgid "Save the Personal Fragments" msgstr "" #: ../src/Common/Exit.c:116 msgid "Save the atoms properties" msgstr "" #: ../src/Common/Exit.c:117 msgid "Save the list of Molpro basis" msgstr "" #: ../src/Common/Exit.c:118 msgid "Save the list of Molcas basis" msgstr "" #: ../src/Common/Exit.c:119 msgid "Save the list of MPQC basis" msgstr "" #: ../src/Common/Exit.c:166 msgid "Are you sure you want to exit?" msgstr "" #: ../src/Common/Exit.c:166 ../src/Files/FileChooser.c:454 #: ../src/Files/FileChooser.c:477 ../src/Geometry/GeomXYZ.c:2974 #: ../src/Utils/UtilsInterface.c:468 ../src/Utils/UtilsInterface.c:2283 msgid "Question" msgstr "" #: ../src/Common/Help.c:32 #, c-format msgid "" " * For add a command to the list:\n" " Type the new command and enter. \n" " This command becomes the default command.\n" "\n" " * For change the default command:\n" " Select a command from the list and type enter.\n" "\n" " * For remove a command from the list:\n" " Select the command to be removed and clicks on the\n" " \"Remove from list\" button.\n" "\n" "\n" " * NB:\n" " You can choose as commands the name of any\n" " script which accepts any number of parameters.\n" " However last parameter accepted by script must be the name\n" " of data file(included the extension \n" " .com for Gaussian, Molpro, Molcas and\n" " .inp for Gamess, FireFly and Q-Chem).\n" msgstr "" #: ../src/Common/Help.c:49 ../src/Common/Help.c:69 ../src/Common/Help.c:113 msgid " Info " msgstr "" #: ../src/Common/Help.c:58 #, c-format msgid "" " To be able to use this protocol:\n" "\n" " * the server must support rsh \n" " * on the remot host\n" " - edit .rhosts file and add the line: \n" " yourlocalmachine yourlocallogin\n" " - save file and \n" " - excecute the orders \n" " chmod a-wx .rhosts\n" " chmod u+rw .rhosts\n" msgstr "" #: ../src/Common/Help.c:79 #, c-format msgid "" " To be able to use ssh protocol:\n" "\n" " * the server must support ssh protocol.\n" "\n" " * on the local host,the pscp and plink programs must installed\n" " the 2 programes are livred with Gabedit\n" " but you can download the programs from \n" " http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html\n" msgstr "" #: ../src/Common/Help.c:97 #, c-format msgid "" " To be able to use ssh protocol:\n" "\n" " * the server must support ssh protocol.\n" "\n" " * the local host must support ssh protocol.\n" "\n" " * on the local host, excecute the orders:\n" " ssh-keygen -t rsa (for create id_rsa ans id_rsa.pub files)\n" " ssh-keygen -t dsa (for create id_dsa ans id_dsa.pub files)\n" " for the 2 ordres : you must create the codes without " "passphrase.\n" "\n" " copy id_rsa.pub, id_dsa.pub files at HOME directory at REMOT " "host.\n" " (example scp id_*.pub remotlogin@remotehost:.)\n" "\n" " * on the remot host, excecute the orders:\n" " cat id_rsa.pub >> .ssh/authorized_keys\n" " cat id_dsa.pub >> .ssh/authorized_keys2\n" " chmod go-w .ssh/authorized_keys\n" " chmod go-w .ssh/authorized_keys2\n" msgstr "" #: ../src/Common/Help.c:122 msgid "" " In this frame you have 6 buttons :\n" "\n" "New : For create a new variable\n" "Edit : For modify the selected variable\n" "Delete : For delete the selected variable\n" "<= All : For tansform all variables in constants\n" "<= One : For tansform the selected variable in constant\n" "Help : For view this window\n" msgstr "" #: ../src/Common/Help.c:140 msgid "" " In this frame you have 8 buttons :\n" "\n" "New : For create a new center\n" "Edit : For modify a selected center\n" "Delete Last : For delete the last center\n" "Draw : For draw your geometry\n" "Save in file : For save your geometry in file\n" "All => : For tansform all contants in variables\n" "One => : For tansform the contants of selected center in variables\n" "Help : For view this window\n" msgstr "" #: ../src/Common/Help.c:160 msgid "" "You can create an animated file using gab*.pov files. For this :\n" " You must initially create files gab*.bmp using gab*.pov files. For " "example :\n" " povray +Igab1.pov +Ogab1.bmp +W900 +H900\n" " povray +Igab2.pov +Ogab2.bmp +W900 +H900\n" " \t.........................................\n" " povray +Igabn.pov +Ogabn.bmp +W900 +H900\n" " Then you can create the animated file from gab*.bmp files using convert " "program :\n" " convert -delay 10 -loop 1000 gab*.bmp imageAnim.gif (for a gif " "animated file)\n" " convert -delay 10 -loop 1000 gab*.bmp imageAnim.mng (for a png " "animated file)\n" "\n" " You can also use the xPovAnim shell (from utils/povray of " "Gabedit directory) for create the gif animated file from gab*.pov files.\n" "\n" " povray is a free software. You can download this(for any system) " "from http://www.povray.org\n" " convert is a free software. You can download this(for any " "system) from http://www.imagemagick.org\n" " (in Linux convert is probably installed)\n" "\n" msgstr "" #: ../src/Common/Help.c:180 msgid "" "You can create an animated file using gab*.pov files. For this :\n" " You must initially create files gab*.bmp using gab*.pov files.\n" " run povray\n" " in toolbar select '[320x240, AA 0.3]'\n" " int toolbar add '+W500 +H500' option\n" " click to Queue icon, you abtain a new window.\n" " click to add File and select all gab*.pov files created by " "Gabedit\n" " click to OK\n" " Then you can create the animated file from gab*.bmp files using convert " "program, for this :\n" " copy 'xAnim.bat' from Gabedit directory in directory of gab*pov " "files\n" " click to xAnim.bat\n" "\n" " convert is a free software. You can download this(for any " "system) from http://www.imagemagick.org\n" " povray is a free software. You can download this(for any system) " "from http://www.povray.org\n" "\n" msgstr "" #: ../src/Common/Help.c:207 msgid "" " You can create an animated file using convert software :\n" " convert -delay 10 -loop 1000 gab*.bmp imageAnim.gif (for a gif animated " "file)\n" " or\n" " convert -delay 10 -loop 1000 gab*.bmp imageAnim.mng (for a png animated " "file)\n" "\n" "convert is a free software. You can download this(for any system) from " "http://www.imagemagick.org\n" "(in Linux convert is probably installed)\n" "\n" msgstr "" #: ../src/Common/Help.c:218 msgid "" "You can create an animated file using convert software, for this :\n" " copy 'xAmin.bat' from Gabedit directory in directory of gab*.bmp files\n" " or\n" " click to xAnim.bat\n" "\n" "convert is a free software. You can download this(for any system) from " "http://www.imagemagick.org\n" "\n" msgstr "" #: ../src/Common/Help.c:234 msgid "" " You can create an animated file using convert software :\n" " convert -delay 10 -loop 1000 gab*.ppm imageAnim.gif (for a gif animated " "file)\n" " or\n" " convert -delay 10 -loop 1000 gab*.ppm imageAnim.mng (for a png animated " "file)\n" "\n" "convert is a free software. You can download this(for any system) from " "http://www.imagemagick.org\n" "(in Linux convert is probably installed)\n" "\n" msgstr "" #: ../src/Common/Help.c:245 msgid "" "You can create an animated file using convert software, for this :\n" " copy 'xAminPPM.bat' from Gabedit directory in directory of gab*.ppm " "files\n" " or\n" " click to xAnimPPM.bat\n" "\n" "convert is a free software. You can download this(for any system) from " "http://www.imagemagick.org\n" "\n" msgstr "" #: ../src/Common/Help.c:260 #, c-format msgid "" " You can create an animated file using convert software :\n" " convert -delay 10 -loop 1000 gab*.%s imageAnim.gif (for a gif animated " "file)\n" " or\n" " convert -delay 10 -loop 1000 gab*.%s imageAnim.mng (for a png animated " "file)\n" "\n" "convert is a free software. You can download this(for any system) from " "http://www.imagemagick.org\n" "(in Linux convert is probably installed)\n" "\n" msgstr "" #: ../src/Common/Install.c:389 msgid "" "Please wait while your personal\n" "GABEDIT directory is being created..." msgstr "" #: ../src/Common/Install.c:462 ../src/Common/Printer.c:401 #: ../src/Files/FileChooser.c:483 ../src/Files/ListeFiles.c:868 #: ../src/Files/ListeFiles.c:2446 ../src/FireFly/FireFly.c:198 #: ../src/Gamess/Gamess.c:181 ../src/Gaussian/GInterfaceBasis.c:506 #: ../src/Gaussian/GInterfaceBasis.c:668 ../src/Gaussian/GInterfaceLink.c:106 #: ../src/Gaussian/GInterfaceRoute.c:396 ../src/Gaussian/GInterfaceRoute.c:561 #: ../src/Gaussian/GInterfaceRoute.c:713 ../src/Gaussian/Gaussian.c:1200 #: ../src/Geometry/BuildLinear.c:235 ../src/Geometry/BuildNanoTube.c:268 #: ../src/Geometry/BuildRing.c:246 ../src/Geometry/DrawGeom.c:3050 #: ../src/Geometry/DrawGeom.c:3142 ../src/Geometry/DrawGeom.c:3270 #: ../src/Geometry/DrawGeom.c:3398 ../src/Geometry/DrawGeom.c:3526 #: ../src/Geometry/DrawGeom.c:3660 ../src/Geometry/DrawGeom.c:3759 #: ../src/Geometry/DrawGeom.c:3895 ../src/Geometry/DrawGeom.c:3975 #: ../src/Geometry/GeomXYZ.c:2768 ../src/Geometry/GeomXYZ.c:2933 #: ../src/Geometry/GeomXYZ.c:11313 ../src/Geometry/GeomXYZ.c:11649 #: ../src/Geometry/GeomXYZ.c:11755 ../src/Geometry/GeomZmatrix.c:2419 #: ../src/Geometry/GeomZmatrix.c:3641 ../src/Geometry/GeomZmatrix.c:3840 #: ../src/Geometry/GeomZmatrix.c:6778 ../src/Geometry/GeomZmatrix.c:6885 #: ../src/Geometry/PersonalFragments.c:268 #: ../src/Geometry/PersonalFragments.c:407 #: ../src/Geometry/PersonalFragments.c:676 #: ../src/Geometry/PersonalFragments.c:869 #: ../src/IsotopeDistribution/IsotopeDistributionCalculatorDlg.c:599 #: ../src/MPQC/MPQC.c:192 ../src/MPQC/MPQCBasisLibrary.c:778 #: ../src/MPQC/MPQCBasisLibrary.c:915 ../src/MPQC/MPQCBasisLibrary.c:1034 #: ../src/Molcas/Molcas.c:188 ../src/Molcas/MolcasBasis.c:460 #: ../src/MolecularMechanics/SetPDBTemplate.c:513 #: ../src/Molpro/MInterfaceBasis.c:1077 ../src/Molpro/MInterfaceComm.c:131 #: ../src/Molpro/MInterfaceComm.c:191 ../src/Molpro/MInterfaceComm.c:254 #: ../src/Molpro/MInterfaceComm.c:316 ../src/Molpro/MInterfaceComm.c:374 #: ../src/Molpro/MInterfaceComm.c:499 ../src/Molpro/MInterfaceComm.c:570 #: ../src/Molpro/MInterfaceComm.c:644 ../src/Molpro/MInterfaceComm.c:758 #: ../src/Molpro/Molpro.c:703 ../src/Molpro/Molpro.c:750 #: ../src/Molpro/MolproBasisLibrary.c:824 ../src/Mopac/Mopac.c:175 #: ../src/NetWork/Batch.c:357 ../src/NetWork/Batch.c:671 #: ../src/NetWork/Process.c:484 ../src/NetWork/Process.c:722 #: ../src/OpenGL/AnimationGeomConv.c:4818 ../src/OpenGL/Contours.c:889 #: ../src/OpenGL/GridCube.c:319 ../src/OpenGL/GridCube.c:1510 #: ../src/OpenGL/GridPlans.c:569 ../src/OpenGL/IntegralOrbitals.c:1242 #: ../src/OpenGL/IntegralOrbitals.c:1824 ../src/OpenGL/IntegralOrbitals.c:2305 #: ../src/OpenGL/LabelsGL.c:760 ../src/OpenGL/Orbitals.c:468 #: ../src/OpenGL/Orbitals.c:1050 ../src/OpenGL/OrbitalsMolpro.c:1741 #: ../src/OpenGL/PlanesMapped.c:175 ../src/OpenGL/PlanesMapped.c:281 #: ../src/OpenGL/PreferencesOrb.c:160 ../src/OpenGL/PreferencesOrb.c:572 #: ../src/OpenGL/StatusOrb.c:300 ../src/OpenGL/TriangleDraw.c:488 #: ../src/OpenGL/UtilsOrb.c:1118 ../src/OpenGL/UtilsOrb.c:1333 #: ../src/OpenGL/UtilsOrb.c:2151 ../src/OpenGL/UtilsOrb.c:2289 #: ../src/OpenGL/UtilsOrb.c:2709 ../src/OpenGL/Vibration.c:646 #: ../src/Orca/Orca.c:174 ../src/QChem/QChem.c:181 #: ../src/Spectrum/UVSpectrum.c:705 ../src/Utils/AtomsProp.c:1328 #: ../src/Utils/UtilsInterface.c:545 ../src/Utils/UtilsInterface.c:546 msgid "Cancel" msgstr "" #: ../src/Common/Install.c:470 msgid " Continue " msgstr "" #: ../src/Common/Install.c:496 msgid "Gabedit User Installation" msgstr "" #: ../src/Common/Install.c:634 msgid "Click \"Continue\" to enter the GABEDIT user installation." msgstr "" #: ../src/Common/Install.c:638 msgid "" "Gabedit is a Graphical User Interface to Gamess-US, Gaussian, Molcas, " "Molpro, \n" "Mopac, MPQC ,Orca, FireFly and Q-Chem\n" "computational chemistry packages.\n" "It can display a variety of calculation results including support for most " "major molecular file formats.\n" "The advanced 'Molecule Builder' allows to rapidly sketch in molecules and " "examine them in 3D\n" "Graphics can be exported to various formats, including animations\n" "\n" "Gabedit can creates input file for the 8 computational chemistry packages" "(CCP) cited above.\n" "Gabedit can graphically display a variety of the CPP calculation results, " "including the following\n" " - Molecular orbitals\n" " - Surfaces from the electron density, electrostatic potential, NMR " "shielding density.....\n" " - Contours (colorcoded), Planes colorcoded, Dipole. XYZ axes and the " "principal axes of the molecule.\n" " - Animation of the normal modes corresponding to vibrational frequencies.\n" " - Animation of the rotation of geometry, surfaces, contours, planes " "colorcoded.\n" "Gabedit can display UV-Vis, IR and Raman computed spectra.\n" "Gabedit can generate a povray file for geometry (including hydrogen's " "bond),\n" "surfaces (including colorcoded surfaces), contours, planes colorcoded.\n" "Gabedit can save picture in BMP, JPEG, PNG, PPM and PS format.\n" "Gabedit can generate automatically a series of pictures for animation" "(vibration, geometry convergence, ....).\n" msgstr "" #: ../src/Common/Install.c:665 msgid "" "Copyright (c) 2002-2010 Abdul-Rahman Allouche.\n" "All rights reserved.\n" "\n" "Gabedit is free.\n" msgstr "" #: ../src/Common/Install.c:695 msgid "Personal GABEDIT Directory" msgstr "" #: ../src/Common/Install.c:697 msgid "Click \"Continue\" to create your personal GABEDIT directory." msgstr "" #: ../src/Common/Install.c:733 #, c-format msgid "" "For a proper GABEDIT installation, a subdirectory named\n" "%s needs to be created." msgstr "" #: ../src/Common/Install.c:740 msgid "" "This subdirectory will contain a number of important files.\n" "Click on one of the files or subdirectories in the tree\n" "to get more information about the selected item." msgstr "" #: ../src/Common/Install.c:807 msgid "Creation of Directories" msgstr "" #: ../src/Common/Install.c:812 msgid "GABEDIT Atoms Properties" msgstr "" #: ../src/Common/Install.c:813 ../src/Common/Install.c:824 #: ../src/Common/Install.c:842 ../src/Common/Install.c:859 msgid "Click \"Continue\" to accept the settings above." msgstr "" #: ../src/Common/Install.c:815 msgid "Setting for atoms properties." msgstr "" #: ../src/Common/Install.c:823 msgid "GABEDIT Commands/Network" msgstr "" #: ../src/Common/Install.c:828 msgid "" "To execute Gamess-US, Gaussian, Molcas, Molpro, \n" "Mopac, MPQC, Orca, FireFly and Q-Chem program, GABEDIT needs to know " "commands system.\n" "GABEDIT needs to know network protocols." msgstr "" #: ../src/Common/Install.c:841 msgid "GABEDIT Fonts/Colors setting" msgstr "" #: ../src/Common/Install.c:846 msgid "" "Setting for Text Font and Text Colors, GABEDIT needs to know the defaults " "Fonts/Colors for Data and Result editors." msgstr "" #: ../src/Common/Install.c:858 msgid "GABEDIT Color Surfaces setting" msgstr "" #: ../src/Common/Install.c:862 msgid "" "Setting for color surfaces, GABEDIT needs to know the defaults Color for " "surfaces(density,Orbitals,....)." msgstr "" #: ../src/Common/Install.c:874 msgid "GABEDIT creation of molpro basis list file" msgstr "" #: ../src/Common/Install.c:875 ../src/Common/Install.c:888 #: ../src/Common/Install.c:900 msgid "Click \"Continue\" for next page." msgstr "" #: ../src/Common/Install.c:878 msgid "" "If the libmol program (delivered with molpro) is not installed on your local " "host,\n" "GABEDIT uses this file for get the list of basis(only the names of basis)" "supported by molpro.\n" "Please note that this file contains the list of basis supported by " "molpro2002.6." msgstr "" #: ../src/Common/Install.c:887 msgid "GABEDIT creation of molcas basis list file" msgstr "" #: ../src/Common/Install.c:891 msgid "" "GABEDIT uses this file for get the list of basis(only the names of basis)" "supported by molcas.\n" "Please note that this file contains the list of basis supported by Molcas7." msgstr "" #: ../src/Common/Install.c:899 msgid "GABEDIT creation of mpqc basis list file" msgstr "" #: ../src/Common/Install.c:903 msgid "" "GABEDIT uses this file for get the list of basis(only the names of basis)" "supported by MPQC.\n" "Please note that this file contains the list of basis supported by MPQC2.2.2." msgstr "" #: ../src/Common/Install.c:912 msgid "GABEDIT creation of Molecular Mechanics file" msgstr "" #: ../src/Common/Install.c:913 msgid "Click \"Continue\" to start GABEDIT." msgstr "" #: ../src/Common/Install.c:915 msgid "Gabedit use this file for load molecular mechanics parameters " msgstr "" #: ../src/Common/Install.c:919 msgid "Aborting Installation..." msgstr "" #: ../src/Common/Install.c:1009 ../src/Common/Install.c:1064 msgid "" "Did you notice any error messages in the lines above?\n" "If not, installation was successful!, Otherwise, quit and investigate the " "possible reason..." msgstr "" #: ../src/Common/Install.c:1019 ../src/Common/Install.c:1074 msgid "Click \"Continue\" to complete GABEDIT installation." msgstr "" #: ../src/Common/Install.c:1028 ../src/Common/Install.c:1082 msgid "Installation failed. Contact system administrator." msgstr "" #: ../src/Common/MenuToolBar.c:662 ../src/MPQC/MPQCBasisLibrary.c:279 #: ../src/MolecularMechanics/SetPDBTemplate.c:833 #: ../src/Molpro/MolproBasisLibrary.c:325 #: ../src/OpenGL/AnimationGeomConv.c:5088 ../src/OpenGL/AnimationMD.c:2926 #: ../src/OpenGL/MenuToolBarGL.c:1965 ../src/OpenGL/Vibration.c:4736 #, c-format msgid "building menus failed: %s" msgstr "" #: ../src/Common/Preferences.c:1069 msgid "Font selection" msgstr "" #: ../src/Common/Preferences.c:1074 msgid " Font selction " msgstr "" #: ../src/Common/Preferences.c:1161 msgid "Set Atom Color" msgstr "" #: ../src/Common/Preferences.c:1171 ../src/Utils/UtilsInterface.c:2793 msgid " Set Color " msgstr "" #: ../src/Common/Preferences.c:1248 msgid " Default font " msgstr "" #: ../src/Common/Preferences.c:1266 ../src/Common/Preferences.c:1334 msgid " Foreground color " msgstr "" #: ../src/Common/Preferences.c:1316 msgid " Background color " msgstr "" #: ../src/Common/Preferences.c:1364 ../src/Common/Preferences.c:1395 msgid " Data " msgstr "" #: ../src/Common/Preferences.c:1368 ../src/Common/Preferences.c:1399 msgid " Result " msgstr "" #: ../src/Common/Preferences.c:1536 msgid "Batch Commands" msgstr "" #: ../src/Common/Preferences.c:1548 msgid " Batch Type " msgstr "" #: ../src/Common/Preferences.c:1558 msgid " Command for list of all Job " msgstr "" #: ../src/Common/Preferences.c:1580 msgid " Command for kill a Job " msgstr "" #: ../src/Common/Preferences.c:1591 msgid " Title for Job id " msgstr "" #: ../src/Common/Preferences.c:1634 msgid "File chooser" msgstr "" #: ../src/Common/Preferences.c:1667 msgid "Select Gamess folder" msgstr "" #: ../src/Common/Preferences.c:1701 msgid "Select Orca folder" msgstr "" #: ../src/Common/Preferences.c:1735 msgid "Select FireFly folder" msgstr "" #: ../src/Common/Preferences.c:1769 msgid "Select Mopac folder" msgstr "" #: ../src/Common/Preferences.c:1803 msgid "Select PovRay folder" msgstr "" #: ../src/Common/Preferences.c:1837 msgid "Select Gaussian folder" msgstr "" #: ../src/Common/Preferences.c:1858 msgid "" "Commands for execute Gaussian, Molcas, Molpro, MPQC, FireFly, Q-Chem or Babel" msgstr "" #: ../src/Common/Preferences.c:1870 msgid "Command for execute Gamess : " msgstr "" #: ../src/Common/Preferences.c:1882 ../src/Common/Preferences.c:1912 #: ../src/Common/Preferences.c:1939 ../src/Common/Preferences.c:1967 #: ../src/Common/Preferences.c:1995 ../src/Common/Preferences.c:2020 #: ../src/Common/Preferences.c:2044 ../src/Common/Preferences.c:2068 #: ../src/Common/Preferences.c:2092 ../src/Common/Preferences.c:2116 msgid " Remove from list " msgstr "" #: ../src/Common/Preferences.c:1889 ../src/Common/Preferences.c:1918 #: ../src/Common/Preferences.c:1946 ../src/Common/Preferences.c:1974 #: ../src/Common/Preferences.c:2002 ../src/Common/Preferences.c:2027 #: ../src/Common/Preferences.c:2051 ../src/Common/Preferences.c:2075 #: ../src/Common/Preferences.c:2099 ../src/Common/Preferences.c:2123 #: ../src/Common/Preferences.c:2617 msgid " Help " msgstr "" #: ../src/Common/Preferences.c:1900 msgid "Command for execute Gaussian : " msgstr "" #: ../src/Common/Preferences.c:1928 msgid "Command for execute Molpro : " msgstr "" #: ../src/Common/Preferences.c:1956 msgid "Command for execute Molcas : " msgstr "" #: ../src/Common/Preferences.c:1984 msgid "Command for execute MPQC : " msgstr "" #: ../src/Common/Preferences.c:2011 msgid "Command for execute Orca : " msgstr "" #: ../src/Common/Preferences.c:2035 msgid "Command for execute FireFly : " msgstr "" #: ../src/Common/Preferences.c:2059 msgid "Command for execute Q-Chem : " msgstr "" #: ../src/Common/Preferences.c:2083 msgid "Command for execute Mopac : " msgstr "" #: ../src/Common/Preferences.c:2107 msgid "Command for execute Povray : " msgstr "" #: ../src/Common/Preferences.c:2140 msgid "Command for Open Babel : " msgstr "" #: ../src/Common/Preferences.c:2190 msgid "Gamess directory : " msgstr "" #: ../src/Common/Preferences.c:2234 msgid "Orca directory : " msgstr "" #: ../src/Common/Preferences.c:2278 msgid "FireFly directory : " msgstr "" #: ../src/Common/Preferences.c:2322 msgid "Mopac directory : " msgstr "" #: ../src/Common/Preferences.c:2364 msgid "PovRay directory : " msgstr "" #: ../src/Common/Preferences.c:2406 msgid "Gaussian directory : " msgstr "" #: ../src/Common/Preferences.c:2435 msgid " Surface colors " msgstr "" #: ../src/Common/Preferences.c:2436 msgid " Surface colors " msgstr "" #: ../src/Common/Preferences.c:2462 ../src/Common/Preferences.c:2463 msgid " Fonts/Colors " msgstr "" #: ../src/Common/Preferences.c:2480 ../src/Common/Preferences.c:2481 msgid " Properties of atoms " msgstr "" #: ../src/Common/Preferences.c:2515 msgid "Select pscp & plink folder" msgstr "" #: ../src/Common/Preferences.c:2549 msgid "pscp & plink directory : " msgstr "" #: ../src/Common/Preferences.c:2581 msgid "Default NetWork protocol" msgstr "" #: ../src/Common/Preferences.c:2637 ../src/Common/Preferences.c:2638 msgid " Others " msgstr "" #: ../src/Common/Preferences.c:2667 ../src/Common/Preferences.c:2668 msgid " Commands " msgstr "" #: ../src/Common/Preferences.c:2690 ../src/Common/Preferences.c:2691 msgid " Batch " msgstr "" #: ../src/Common/Preferences.c:2713 ../src/Common/Preferences.c:2714 msgid " NetWork " msgstr "" #: ../src/Common/Preferences.c:2753 msgid "Preferences " msgstr "" #: ../src/Common/Preferences.c:2756 msgid "Preferences" msgstr "" #: ../src/Common/Preferences.c:2782 ../src/Utils/UtilsInterface.c:554 #: ../src/Utils/UtilsInterface.c:555 msgid "Save&Apply&Close" msgstr "" #: ../src/Common/Preferences.c:2791 ../src/Utils/UtilsInterface.c:560 #: ../src/Utils/UtilsInterface.c:561 msgid "Apply&Close" msgstr "" #: ../src/Common/Preferences.c:2799 ../src/OpenGL/LabelsGL.c:754 #: ../src/OpenGL/PreferencesOrb.c:523 ../src/OpenGL/PrincipalAxisGL.c:579 #: ../src/OpenGL/TriangleDraw.c:482 ../src/OpenGL/UtilsOrb.c:2283 #: ../src/OpenGL/UtilsOrb.c:2580 ../src/Spectrum/NMRSpectrum.c:1650 #: ../src/Utils/UtilsInterface.c:569 ../src/Utils/UtilsInterface.c:570 #: ../src/Utils/UtilsInterface.c:2899 msgid "Apply" msgstr "" #: ../src/Common/Printer.c:55 ../src/Common/Printer.c:57 #: ../src/Common/Printer.c:59 ../src/Common/Printer.c:61 #: ../src/Common/Printer.c:107 msgid "landscape" msgstr "" #: ../src/Common/Printer.c:102 ../src/Common/Printer.c:125 #: ../src/Molcas/MolcasVariables.c:57 ../src/Molcas/MolcasVariables.c:71 #: ../src/Molcas/MolcasVariables.c:85 ../src/Molcas/MolcasVariables.c:109 #: ../src/Molcas/MolcasVariables.c:110 ../src/Molcas/MolcasVariables.c:111 #: ../src/Molcas/MolcasVariables.c:113 ../src/Molcas/MolcasVariables.c:152 #: ../src/Molcas/MolcasVariables.c:161 ../src/Molcas/MolcasVariables.c:166 #: ../src/Molcas/MolcasVariables.c:175 ../src/Molcas/MolcasVariables.c:179 #: ../src/Molcas/MolcasVariables.c:187 ../src/Molcas/MolcasVariables.c:195 #: ../src/Molcas/MolcasVariables.c:248 ../src/Molcas/MolcasVariables.c:251 #: ../src/Molcas/MolcasVariables.c:254 ../src/Molcas/MolcasVariables.c:260 #: ../src/Molcas/MolcasVariables.c:326 ../src/Molcas/MolcasVariables.c:353 #: ../src/Molcas/MolcasVariables.c:373 ../src/Molcas/MolcasVariables.c:405 #: ../src/Molcas/MolcasVariables.c:415 ../src/Molcas/MolcasVariables.c:416 #: ../src/Molcas/MolcasVariables.c:417 ../src/Molcas/MolcasVariables.c:419 #, c-format msgid "Default" msgstr "" #: ../src/Common/Printer.c:135 ../src/Common/Printer.c:551 #: ../src/Geometry/BuildPolySaccharide.c:592 ../src/Geometry/DrawGeom.c:7205 #: ../src/Geometry/DrawGeom.c:7247 ../src/Geometry/DrawGeom.c:7375 #: ../src/Geometry/FragmentsSelector.c:105 ../src/Geometry/GeomXYZ.c:2960 #: ../src/Geometry/Povray.c:1103 ../src/Geometry/Povray.c:1111 #: ../src/MPQC/MPQCMole.c:483 #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1514 #: ../src/NetWork/Process.c:597 ../src/OpenGL/AnimationContours.c:507 #: ../src/OpenGL/AnimationGeomConv.c:4328 #: ../src/OpenGL/AnimationGeomConv.c:4908 #: ../src/OpenGL/AnimationIsoSurface.c:304 ../src/OpenGL/AnimationMD.c:2396 #: ../src/OpenGL/AnimationMD.c:2739 ../src/OpenGL/AnimationMD.c:2767 #: ../src/OpenGL/AnimationPlanesMapped.c:351 #: ../src/OpenGL/AnimationRotation.c:201 ../src/OpenGL/GeomOrbXYZ.c:1046 #: ../src/OpenGL/Vibration.c:4094 ../src/SemiEmpirical/SemiEmpiricalDlg.c:3633 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4671 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4672 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4691 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4692 #: ../src/Utils/UtilsInterface.c:477 msgid "Info" msgstr "" #: ../src/Common/Printer.c:152 msgid "File to print" msgstr "" #: ../src/Common/Printer.c:156 msgid "File Name :" msgstr "" #: ../src/Common/Printer.c:181 msgid " Orientation " msgstr "" #: ../src/Common/Printer.c:195 msgid " chars by line " msgstr "" #: ../src/Common/Printer.c:207 msgid " pages by paper " msgstr "" #: ../src/Common/Printer.c:234 msgid "Print in file" msgstr "" #: ../src/Common/Printer.c:238 ../src/Gaussian/GInterfaceBasis.c:87 #: ../src/Gaussian/GInterfaceBasis.c:162 #: ../src/Gaussian/GInterfaceMethodeBase.c:103 #: ../src/Gaussian/GInterfaceMethodeBase.c:444 #: ../src/Gaussian/GInterfaceMethodeBase.c:449 #: ../src/Gaussian/GInterfaceMethodeBase.c:454 #: ../src/Gaussian/GInterfaceRoute.c:606 ../src/Gaussian/GInterfaceRoute.c:613 #: ../src/Gaussian/GInterfaceRoute.c:688 ../src/Gaussian/GInterfaceRoute.c:692 #: ../src/Gaussian/GInterfaceRoute.c:935 ../src/Gaussian/Gaussian.c:417 #: ../src/Geometry/GeomXYZ.c:2121 ../src/Geometry/GeomXYZ.c:2177 #: ../src/Geometry/GeomXYZ.c:2996 ../src/Utils/UtilsInterface.c:548 #: ../src/Utils/UtilsInterface.c:549 ../src/Utils/UtilsInterface.c:785 #: ../src/Utils/UtilsInterface.c:2294 msgid "Yes" msgstr "" #: ../src/Common/Printer.c:247 msgid " File Name :" msgstr "" #: ../src/Common/Printer.c:292 ../src/Common/Printer.c:423 msgid "a2ps options" msgstr "" #: ../src/Common/Printer.c:344 msgid " Printer Name " msgstr "" #: ../src/Common/Printer.c:354 msgid " Number of copies " msgstr "" #: ../src/Common/Printer.c:380 msgid "Gabedit : Print" msgstr "" #: ../src/Common/Printer.c:383 msgid " Print " msgstr "" #: ../src/Common/Printer.c:407 msgid "Display" msgstr "" #: ../src/Common/Printer.c:414 ../src/Utils/UtilsInterface.c:578 #: ../src/Utils/UtilsInterface.c:579 msgid "Print" msgstr "" #: ../src/Common/Printer.c:457 ../src/Common/Printer.c:463 msgid "Error, No text to print\n" msgstr "" #: ../src/Common/Printer.c:457 ../src/Common/Printer.c:463 #: ../src/Common/Run.c:373 ../src/Common/Run.c:851 ../src/Common/Run.c:1027 #: ../src/Common/Run.c:1099 ../src/Common/Run.c:1197 ../src/Common/Run.c:1271 #: ../src/Common/Run.c:1439 ../src/Common/Run.c:1529 ../src/Common/Run.c:1719 #: ../src/Common/Run.c:1782 ../src/Common/Run.c:1838 #: ../src/Files/ListeFiles.c:1312 ../src/FireFly/FireFly.c:181 #: ../src/Gamess/Gamess.c:164 ../src/Gaussian/Gaussian.c:1167 #: ../src/Geometry/BuildPolyNucleicAcid.c:953 #: ../src/Geometry/BuildPolyNucleicAcid.c:964 #: ../src/Geometry/BuildPolyNucleicAcid.c:1029 #: ../src/Geometry/BuildPolyNucleicAcid.c:1040 #: ../src/Geometry/BuildPolyNucleicAcid.c:1105 #: ../src/Geometry/BuildPolyNucleicAcid.c:1115 #: ../src/Geometry/BuildPolyNucleicAcid.c:1415 #: ../src/Geometry/BuildPolyNucleicAcid.c:1476 #: ../src/Geometry/BuildPolyNucleicAcid.c:1485 #: ../src/Geometry/BuildPolyNucleicAcid.c:1526 #: ../src/Geometry/BuildPolyNucleicAcid.c:1538 #: ../src/Geometry/BuildPolyNucleicAcid.c:1550 #: ../src/Geometry/BuildPolyNucleicAcid.c:1561 ../src/Geometry/DrawGeom.c:2092 #: ../src/Geometry/DrawGeom.c:2135 ../src/Geometry/DrawGeom.c:5121 #: ../src/Geometry/DrawGeom.c:5132 ../src/Geometry/EnergiesCurves.c:577 #: ../src/Geometry/EnergiesCurves.c:580 ../src/Geometry/EnergiesCurves.c:583 #: ../src/Geometry/EnergiesCurves.c:586 ../src/Geometry/EnergiesCurves.c:589 #: ../src/Geometry/EnergiesCurves.c:592 ../src/Geometry/EnergiesCurves.c:595 #: ../src/Geometry/EnergiesCurves.c:598 ../src/Geometry/EnergiesCurves.c:731 #: ../src/Geometry/EnergiesCurves.c:734 ../src/Geometry/EnergiesCurves.c:737 #: ../src/Geometry/EnergiesCurves.c:740 ../src/Geometry/EnergiesCurves.c:743 #: ../src/Geometry/EnergiesCurves.c:746 ../src/Geometry/EnergiesCurves.c:749 #: ../src/Geometry/EnergiesCurves.c:752 ../src/Geometry/EnergiesCurves.c:755 #: ../src/Geometry/ExportGeom.c:48 ../src/Geometry/GeomXYZ.c:935 #: ../src/Geometry/GeomXYZ.c:944 ../src/Geometry/GeomXYZ.c:1024 #: ../src/Geometry/GeomXYZ.c:1114 ../src/Geometry/GeomXYZ.c:1152 #: ../src/Geometry/GeomXYZ.c:1185 ../src/Geometry/GeomXYZ.c:1532 #: ../src/Geometry/GeomXYZ.c:1583 ../src/Geometry/GeomXYZ.c:1637 #: ../src/Geometry/GeomXYZ.c:1679 ../src/Geometry/GeomXYZ.c:1760 #: ../src/Geometry/GeomXYZ.c:2085 ../src/Geometry/GeomXYZ.c:2141 #: ../src/Geometry/GeomXYZ.c:2193 ../src/Geometry/GeomXYZ.c:2246 #: ../src/Geometry/GeomXYZ.c:2409 ../src/Geometry/GeomXYZ.c:2417 #: ../src/Geometry/GeomXYZ.c:2503 ../src/Geometry/GeomXYZ.c:2511 #: ../src/Geometry/GeomXYZ.c:2578 ../src/Geometry/GeomXYZ.c:2811 #: ../src/Geometry/GeomXYZ.c:3157 ../src/Geometry/GeomXYZ.c:3167 #: ../src/Geometry/GeomXYZ.c:3288 ../src/Geometry/GeomXYZ.c:3340 #: ../src/Geometry/GeomXYZ.c:3347 ../src/Geometry/GeomXYZ.c:3415 #: ../src/Geometry/GeomXYZ.c:3553 ../src/Geometry/GeomXYZ.c:3641 #: ../src/Geometry/GeomXYZ.c:3745 ../src/Geometry/GeomXYZ.c:4016 #: ../src/Geometry/GeomXYZ.c:4126 ../src/Geometry/GeomXYZ.c:4250 #: ../src/Geometry/GeomXYZ.c:4348 ../src/Geometry/GeomXYZ.c:4613 #: ../src/Geometry/GeomXYZ.c:4750 ../src/Geometry/GeomXYZ.c:4978 #: ../src/Geometry/GeomXYZ.c:5023 ../src/Geometry/GeomXYZ.c:5041 #: ../src/Geometry/GeomXYZ.c:5146 ../src/Geometry/GeomXYZ.c:5161 #: ../src/Geometry/GeomXYZ.c:5189 ../src/Geometry/GeomXYZ.c:5211 #: ../src/Geometry/GeomXYZ.c:5305 ../src/Geometry/GeomXYZ.c:5327 #: ../src/Geometry/GeomXYZ.c:5408 ../src/Geometry/GeomXYZ.c:5423 #: ../src/Geometry/GeomXYZ.c:5451 ../src/Geometry/GeomXYZ.c:5474 #: ../src/Geometry/GeomXYZ.c:5605 ../src/Geometry/GeomXYZ.c:5635 #: ../src/Geometry/GeomXYZ.c:5752 ../src/Geometry/GeomXYZ.c:5772 #: ../src/Geometry/GeomXYZ.c:5865 ../src/Geometry/GeomXYZ.c:5880 #: ../src/Geometry/GeomXYZ.c:5895 ../src/Geometry/GeomXYZ.c:5918 #: ../src/Geometry/GeomXYZ.c:5940 ../src/Geometry/GeomXYZ.c:6033 #: ../src/Geometry/GeomXYZ.c:6097 ../src/Geometry/GeomXYZ.c:6204 #: ../src/Geometry/GeomXYZ.c:6230 ../src/Geometry/GeomXYZ.c:6335 #: ../src/Geometry/GeomXYZ.c:6343 ../src/Geometry/GeomXYZ.c:6388 #: ../src/Geometry/GeomXYZ.c:6497 ../src/Geometry/GeomXYZ.c:6505 #: ../src/Geometry/GeomXYZ.c:6547 ../src/Geometry/GeomXYZ.c:6638 #: ../src/Geometry/GeomXYZ.c:6644 ../src/Geometry/GeomXYZ.c:6651 #: ../src/Geometry/GeomXYZ.c:6658 ../src/Geometry/GeomXYZ.c:6667 #: ../src/Geometry/GeomXYZ.c:6674 ../src/Geometry/GeomXYZ.c:6778 #: ../src/Geometry/GeomXYZ.c:6785 ../src/Geometry/GeomXYZ.c:6806 #: ../src/Geometry/GeomXYZ.c:6895 ../src/Geometry/GeomXYZ.c:6903 #: ../src/Geometry/GeomXYZ.c:6923 ../src/Geometry/GeomXYZ.c:7082 #: ../src/Geometry/GeomXYZ.c:7116 ../src/Geometry/GeomXYZ.c:7311 #: ../src/Geometry/GeomXYZ.c:7346 ../src/Geometry/GeomXYZ.c:7448 #: ../src/Geometry/GeomXYZ.c:7482 ../src/Geometry/GeomXYZ.c:7538 #: ../src/Geometry/GeomXYZ.c:7589 ../src/Geometry/GeomXYZ.c:7621 #: ../src/Geometry/GeomXYZ.c:7707 ../src/Geometry/GeomXYZ.c:7809 #: ../src/Geometry/GeomXYZ.c:7821 ../src/Geometry/GeomXYZ.c:7851 #: ../src/Geometry/GeomXYZ.c:8006 ../src/Geometry/GeomXYZ.c:8040 #: ../src/Geometry/GeomXYZ.c:8117 ../src/Geometry/GeomXYZ.c:8133 #: ../src/Geometry/GeomXYZ.c:8149 ../src/Geometry/GeomXYZ.c:8165 #: ../src/Geometry/GeomXYZ.c:8181 ../src/Geometry/GeomXYZ.c:8197 #: ../src/Geometry/GeomXYZ.c:8213 ../src/Geometry/GeomXYZ.c:8240 #: ../src/Geometry/GeomXYZ.c:8247 ../src/Geometry/GeomXYZ.c:8265 #: ../src/Geometry/GeomXYZ.c:8352 ../src/Geometry/GeomXYZ.c:8360 #: ../src/Geometry/GeomXYZ.c:8376 ../src/Geometry/GeomXYZ.c:8586 #: ../src/Geometry/GeomXYZ.c:8713 ../src/Geometry/GeomXYZ.c:8772 #: ../src/Geometry/GeomXYZ.c:8891 ../src/Geometry/GeomXYZ.c:9067 #: ../src/Geometry/GeomXYZ.c:9119 ../src/Geometry/GeomXYZ.c:9246 #: ../src/Geometry/GeomXYZ.c:9433 ../src/Geometry/GeomXYZ.c:9641 #: ../src/Geometry/GeomXYZ.c:9835 ../src/Geometry/GeomXYZ.c:9864 #: ../src/Geometry/GeomXYZ.c:9879 ../src/Geometry/GeomXYZ.c:10119 #: ../src/Geometry/GeomXYZ.c:10178 ../src/Geometry/GeomXYZ.c:10222 #: ../src/Geometry/GeomXYZ.c:10273 ../src/Geometry/GeomXYZ.c:10336 #: ../src/Geometry/GeomXYZ.c:10596 ../src/Geometry/GeomXYZ.c:10633 #: ../src/Geometry/GeomXYZ.c:10673 ../src/Geometry/GeomXYZ.c:10712 #: ../src/Geometry/GeomXYZ.c:10758 ../src/Geometry/GeomXYZ.c:10773 #: ../src/Geometry/GeomXYZ.c:11224 ../src/Geometry/GeomXYZ.c:11440 #: ../src/Geometry/GeomXYZ.c:11503 ../src/Geometry/GeomXYZ.c:11510 #: ../src/Geometry/GeomXYZ.c:11518 ../src/Geometry/GeomXYZ.c:11544 #: ../src/Geometry/GeomXYZ.c:11552 ../src/Geometry/GeomXYZ.c:11675 #: ../src/Geometry/GeomXYZ.c:11689 ../src/Geometry/GeomXYZ.c:11707 #: ../src/Geometry/GeomZmatrix.c:244 ../src/Geometry/GeomZmatrix.c:253 #: ../src/Geometry/GeomZmatrix.c:1046 ../src/Geometry/GeomZmatrix.c:1137 #: ../src/Geometry/GeomZmatrix.c:1146 ../src/Geometry/GeomZmatrix.c:1153 #: ../src/Geometry/GeomZmatrix.c:1193 ../src/Geometry/GeomZmatrix.c:1201 #: ../src/Geometry/GeomZmatrix.c:1235 ../src/Geometry/GeomZmatrix.c:1261 #: ../src/Geometry/GeomZmatrix.c:1290 ../src/Geometry/GeomZmatrix.c:1440 #: ../src/Geometry/GeomZmatrix.c:1473 ../src/Geometry/GeomZmatrix.c:2012 #: ../src/Geometry/GeomZmatrix.c:2100 ../src/Geometry/GeomZmatrix.c:2234 #: ../src/Geometry/GeomZmatrix.c:2276 ../src/Geometry/GeomZmatrix.c:2350 #: ../src/Geometry/GeomZmatrix.c:4038 ../src/Geometry/GeomZmatrix.c:4060 #: ../src/Geometry/GeomZmatrix.c:4205 ../src/Geometry/GeomZmatrix.c:4478 #: ../src/Geometry/GeomZmatrix.c:4715 ../src/Geometry/GeomZmatrix.c:4766 #: ../src/Geometry/GeomZmatrix.c:4969 ../src/Geometry/GeomZmatrix.c:5212 #: ../src/Geometry/GeomZmatrix.c:5282 ../src/Geometry/GeomZmatrix.c:5300 #: ../src/Geometry/GeomZmatrix.c:5306 ../src/Geometry/GeomZmatrix.c:5355 #: ../src/Geometry/GeomZmatrix.c:5421 ../src/Geometry/GeomZmatrix.c:5458 #: ../src/Geometry/GeomZmatrix.c:5515 ../src/Geometry/GeomZmatrix.c:5553 #: ../src/Geometry/GeomZmatrix.c:5585 ../src/Geometry/GeomZmatrix.c:5592 #: ../src/Geometry/GeomZmatrix.c:5647 ../src/Geometry/GeomZmatrix.c:5725 #: ../src/Geometry/GeomZmatrix.c:5752 ../src/Geometry/GeomZmatrix.c:5782 #: ../src/Geometry/GeomZmatrix.c:5852 ../src/Geometry/GeomZmatrix.c:5960 #: ../src/Geometry/GeomZmatrix.c:5988 ../src/Geometry/GeomZmatrix.c:6018 #: ../src/Geometry/GeomZmatrix.c:6088 ../src/Geometry/GeomZmatrix.c:6270 #: ../src/Geometry/GeomZmatrix.c:6289 ../src/Geometry/GeomZmatrix.c:6295 #: ../src/Geometry/GeomZmatrix.c:6343 ../src/Geometry/ImagesGeom.c:37 #: ../src/Geometry/ImagesGeom.c:58 ../src/Geometry/ImagesGeom.c:81 #: ../src/Geometry/ImagesGeom.c:143 ../src/Geometry/ImagesGeom.c:177 #: ../src/Geometry/ImagesGeom.c:184 ../src/Geometry/ImagesGeom.c:252 #: ../src/Geometry/ImagesGeom.c:260 ../src/Geometry/ImagesGeom.c:403 #: ../src/Geometry/ImagesGeom.c:410 ../src/Geometry/InterfaceGeom.c:688 #: ../src/Geometry/MenuToolBarGeom.c:613 #: ../src/Geometry/PersonalFragments.c:207 #: ../src/Geometry/PersonalFragments.c:374 #: ../src/Geometry/PersonalFragments.c:467 #: ../src/Geometry/PersonalFragments.c:477 #: ../src/Geometry/PersonalFragments.c:489 #: ../src/Geometry/PersonalFragments.c:589 #: ../src/Geometry/PersonalFragments.c:599 #: ../src/Geometry/PersonalFragments.c:802 #: ../src/Geometry/PersonalFragments.c:815 #: ../src/Geometry/PersonalFragments.c:987 #: ../src/Geometry/PersonalFragments.c:1005 ../src/Geometry/Povray.c:1000 #: ../src/Geometry/Povray.c:1073 ../src/Geometry/ResultsAnalise.c:136 #: ../src/Geometry/ResultsAnalise.c:293 ../src/Geometry/ResultsAnalise.c:420 #: ../src/Geometry/ResultsAnalise.c:556 ../src/Geometry/ResultsAnalise.c:725 #: ../src/Geometry/ResultsAnalise.c:837 ../src/Geometry/ResultsAnalise.c:987 #: ../src/Geometry/ResultsAnalise.c:1110 ../src/Geometry/ResultsAnalise.c:1246 #: ../src/Geometry/ResultsAnalise.c:1343 ../src/Geometry/ResultsAnalise.c:1520 #: ../src/Geometry/ResultsAnalise.c:1665 ../src/Geometry/ResultsAnalise.c:1803 #: ../src/Geometry/ResultsAnalise.c:1924 ../src/Geometry/ResultsAnalise.c:2130 #: ../src/Geometry/ResultsAnalise.c:2307 ../src/Geometry/ResultsAnalise.c:2321 #: ../src/Geometry/ResultsAnalise.c:2335 ../src/Geometry/ResultsAnalise.c:2349 #: ../src/Geometry/ResultsAnalise.c:2363 ../src/Geometry/ResultsAnalise.c:2377 #: ../src/Geometry/ResultsAnalise.c:2392 ../src/Geometry/ResultsAnalise.c:2406 #: ../src/Geometry/ResultsAnalise.c:2420 ../src/Geometry/ResultsAnalise.c:2434 #: ../src/Geometry/ResultsAnalise.c:2448 ../src/Geometry/ResultsAnalise.c:2462 #: ../src/Geometry/ResultsAnalise.c:2476 ../src/Geometry/ResultsAnalise.c:2490 #: ../src/Geometry/Symmetry.c:548 ../src/Geometry/p.c:19 #: ../src/Geometry/p.c:25 ../src/Geometry/p.c:34 ../src/Geometry/p.c:43 #: ../src/Geometry/p.c:50 ../src/MPQC/MPQC.c:175 #: ../src/MPQC/MPQCBasisLibrary.c:638 ../src/MPQC/MPQCBasisLibrary.c:828 #: ../src/Molcas/Molcas.c:172 ../src/Molcas/MolcasBasis.c:393 #: ../src/Molcas/MolcasGateWay.c:1536 #: ../src/MolecularMechanics/SetPDBTemplate.c:365 ../src/NetWork/Batch.c:717 #: ../src/NetWork/Batch.c:831 ../src/NetWork/Batch.c:873 #: ../src/NetWork/Batch.c:884 ../src/NetWork/Process.c:627 #: ../src/NetWork/Process.c:1091 ../src/NetWork/Process.c:1145 #: ../src/NetWork/Process.c:1219 ../src/NetWork/Process.c:1230 #: ../src/OpenGL/AnimationContours.c:759 ../src/OpenGL/AnimationContours.c:872 #: ../src/OpenGL/AnimationGeomConv.c:264 ../src/OpenGL/AnimationGeomConv.c:326 #: ../src/OpenGL/AnimationGeomConv.c:481 ../src/OpenGL/AnimationGeomConv.c:500 #: ../src/OpenGL/AnimationGeomConv.c:545 ../src/OpenGL/AnimationGeomConv.c:721 #: ../src/OpenGL/AnimationGeomConv.c:741 ../src/OpenGL/AnimationGeomConv.c:827 #: ../src/OpenGL/AnimationGeomConv.c:834 ../src/OpenGL/AnimationGeomConv.c:859 #: ../src/OpenGL/AnimationGeomConv.c:931 ../src/OpenGL/AnimationGeomConv.c:938 #: ../src/OpenGL/AnimationGeomConv.c:962 #: ../src/OpenGL/AnimationGeomConv.c:1038 #: ../src/OpenGL/AnimationGeomConv.c:1139 #: ../src/OpenGL/AnimationGeomConv.c:1181 #: ../src/OpenGL/AnimationGeomConv.c:1188 #: ../src/OpenGL/AnimationGeomConv.c:1210 #: ../src/OpenGL/AnimationGeomConv.c:1283 #: ../src/OpenGL/AnimationGeomConv.c:1341 #: ../src/OpenGL/AnimationGeomConv.c:1473 #: ../src/OpenGL/AnimationGeomConv.c:1479 #: ../src/OpenGL/AnimationGeomConv.c:1490 #: ../src/OpenGL/AnimationGeomConv.c:1513 #: ../src/OpenGL/AnimationGeomConv.c:1520 #: ../src/OpenGL/AnimationGeomConv.c:1546 #: ../src/OpenGL/AnimationGeomConv.c:1620 #: ../src/OpenGL/AnimationGeomConv.c:1666 #: ../src/OpenGL/AnimationGeomConv.c:1684 #: ../src/OpenGL/AnimationGeomConv.c:1767 #: ../src/OpenGL/AnimationGeomConv.c:1774 #: ../src/OpenGL/AnimationGeomConv.c:1780 #: ../src/OpenGL/AnimationGeomConv.c:1816 #: ../src/OpenGL/AnimationGeomConv.c:1897 #: ../src/OpenGL/AnimationGeomConv.c:1904 #: ../src/OpenGL/AnimationGeomConv.c:1932 #: ../src/OpenGL/AnimationGeomConv.c:2004 #: ../src/OpenGL/AnimationGeomConv.c:2084 #: ../src/OpenGL/AnimationGeomConv.c:2311 #: ../src/OpenGL/AnimationGeomConv.c:2326 #: ../src/OpenGL/AnimationGeomConv.c:2376 #: ../src/OpenGL/AnimationGeomConv.c:2465 #: ../src/OpenGL/AnimationGeomConv.c:2586 #: ../src/OpenGL/AnimationGeomConv.c:2678 #: ../src/OpenGL/AnimationGeomConv.c:2722 #: ../src/OpenGL/AnimationGeomConv.c:2801 #: ../src/OpenGL/AnimationGeomConv.c:2823 #: ../src/OpenGL/AnimationGeomConv.c:2868 #: ../src/OpenGL/AnimationGeomConv.c:2945 #: ../src/OpenGL/AnimationGeomConv.c:2964 #: ../src/OpenGL/AnimationGeomConv.c:3012 #: ../src/OpenGL/AnimationGeomConv.c:3094 #: ../src/OpenGL/AnimationGeomConv.c:3113 #: ../src/OpenGL/AnimationGeomConv.c:3156 #: ../src/OpenGL/AnimationGeomConv.c:3184 #: ../src/OpenGL/AnimationGeomConv.c:3259 #: ../src/OpenGL/AnimationGeomConv.c:3303 #: ../src/OpenGL/AnimationGeomConv.c:3383 #: ../src/OpenGL/AnimationGeomConv.c:3402 #: ../src/OpenGL/AnimationGeomConv.c:3452 #: ../src/OpenGL/AnimationGeomConv.c:3496 #: ../src/OpenGL/AnimationGeomConv.c:3901 #: ../src/OpenGL/AnimationGeomConv.c:4574 #: ../src/OpenGL/AnimationGeomConv.c:4848 #: ../src/OpenGL/AnimationIsoSurface.c:576 ../src/OpenGL/AnimationMD.c:264 #: ../src/OpenGL/AnimationMD.c:294 ../src/OpenGL/AnimationMD.c:391 #: ../src/OpenGL/AnimationMD.c:845 ../src/OpenGL/AnimationMD.c:851 #: ../src/OpenGL/AnimationMD.c:862 ../src/OpenGL/AnimationMD.c:982 #: ../src/OpenGL/AnimationMD.c:1030 ../src/OpenGL/AnimationMD.c:1276 #: ../src/OpenGL/AnimationMD.c:1300 ../src/OpenGL/AnimationMD.c:1550 #: ../src/OpenGL/AnimationMD.c:1571 ../src/OpenGL/AnimationMD.c:1595 #: ../src/OpenGL/AnimationMD.c:1635 ../src/OpenGL/AnimationMD.c:1827 #: ../src/OpenGL/AnimationMD.c:2642 ../src/OpenGL/AnimationPlanesMapped.c:540 #: ../src/OpenGL/AnimationPlanesMapped.c:624 #: ../src/OpenGL/AnimationRotation.c:440 ../src/OpenGL/AnimationRotation.c:511 #: ../src/OpenGL/AtomicOrbitals.c:276 ../src/OpenGL/AtomicOrbitals.c:286 #: ../src/OpenGL/Basis.c:1117 ../src/OpenGL/Basis.c:1124 #: ../src/OpenGL/Basis.c:1132 ../src/OpenGL/Basis.c:1139 #: ../src/OpenGL/Basis.c:1146 ../src/OpenGL/Basis.c:1153 #: ../src/OpenGL/Basis.c:1160 ../src/OpenGL/Basis.c:1176 #: ../src/OpenGL/Basis.c:1184 ../src/OpenGL/Basis.c:1192 #: ../src/OpenGL/Basis.c:1200 ../src/OpenGL/Basis.c:1208 #: ../src/OpenGL/Basis.c:1218 ../src/OpenGL/Basis.c:1227 #: ../src/OpenGL/CaptureOrbitals.c:74 ../src/OpenGL/CaptureOrbitals.c:304 #: ../src/OpenGL/CaptureOrbitals.c:314 ../src/OpenGL/CaptureOrbitals.c:325 #: ../src/OpenGL/CaptureOrbitals.c:350 ../src/OpenGL/CaptureOrbitals.c:365 #: ../src/OpenGL/CaptureOrbitals.c:1047 ../src/OpenGL/CaptureOrbitals.c:1052 #: ../src/OpenGL/CaptureOrbitals.c:1059 ../src/OpenGL/Contours.c:275 #: ../src/OpenGL/Contours.c:620 ../src/OpenGL/Contours.c:682 #: ../src/OpenGL/Contours.c:863 ../src/OpenGL/Dipole.c:233 #: ../src/OpenGL/GeomOrbXYZ.c:278 ../src/OpenGL/GeomOrbXYZ.c:299 #: ../src/OpenGL/GeomOrbXYZ.c:393 ../src/OpenGL/GeomOrbXYZ.c:482 #: ../src/OpenGL/GeomOrbXYZ.c:497 ../src/OpenGL/GeomOrbXYZ.c:715 #: ../src/OpenGL/GeomOrbXYZ.c:724 ../src/OpenGL/GeomOrbXYZ.c:894 #: ../src/OpenGL/GeomOrbXYZ.c:903 ../src/OpenGL/GeomOrbXYZ.c:911 #: ../src/OpenGL/GeomOrbXYZ.c:1051 ../src/OpenGL/GeomOrbXYZ.c:1111 #: ../src/OpenGL/GeomOrbXYZ.c:1121 ../src/OpenGL/GeomOrbXYZ.c:1136 #: ../src/OpenGL/GeomOrbXYZ.c:1272 ../src/OpenGL/GeomOrbXYZ.c:1301 #: ../src/OpenGL/GeomOrbXYZ.c:1382 ../src/OpenGL/GeomOrbXYZ.c:1391 #: ../src/OpenGL/GeomOrbXYZ.c:1421 ../src/OpenGL/GeomOrbXYZ.c:1707 #: ../src/OpenGL/GeomOrbXYZ.c:1722 ../src/OpenGL/GeomOrbXYZ.c:1762 #: ../src/OpenGL/GeomOrbXYZ.c:1958 ../src/OpenGL/GeomOrbXYZ.c:1976 #: ../src/OpenGL/GeomOrbXYZ.c:2055 ../src/OpenGL/GeomOrbXYZ.c:2064 #: ../src/OpenGL/GeomOrbXYZ.c:2096 ../src/OpenGL/GeomOrbXYZ.c:2182 #: ../src/OpenGL/GeomOrbXYZ.c:2192 ../src/OpenGL/GeomOrbXYZ.c:2224 #: ../src/OpenGL/GeomOrbXYZ.c:2442 ../src/OpenGL/GeomOrbXYZ.c:2448 #: ../src/OpenGL/GeomOrbXYZ.c:2461 ../src/OpenGL/GeomOrbXYZ.c:2483 #: ../src/OpenGL/GeomOrbXYZ.c:2490 ../src/OpenGL/GeomOrbXYZ.c:2496 #: ../src/OpenGL/GeomOrbXYZ.c:2502 ../src/OpenGL/GeomOrbXYZ.c:2566 #: ../src/OpenGL/GeomOrbXYZ.c:2685 ../src/OpenGL/GeomOrbXYZ.c:2726 #: ../src/OpenGL/GeomOrbXYZ.c:2820 ../src/OpenGL/GeomOrbXYZ.c:2831 #: ../src/OpenGL/GeomOrbXYZ.c:2874 ../src/OpenGL/GeomOrbXYZ.c:3687 #: ../src/OpenGL/GeomOrbXYZ.c:3697 ../src/OpenGL/Grid.c:2267 #: ../src/OpenGL/Grid.c:2413 ../src/OpenGL/GridAdfDensity.c:107 #: ../src/OpenGL/GridAdfDensity.c:154 ../src/OpenGL/GridAdfDensity.c:164 #: ../src/OpenGL/GridAdfDensity.c:235 ../src/OpenGL/GridAdfDensity.c:688 #: ../src/OpenGL/GridAdfOrbitals.c:108 ../src/OpenGL/GridAdfOrbitals.c:165 #: ../src/OpenGL/GridAdfOrbitals.c:236 ../src/OpenGL/GridAdfOrbitals.c:389 #: ../src/OpenGL/GridAdfOrbitals.c:868 ../src/OpenGL/GridCP.c:1467 #: ../src/OpenGL/GridCP.c:1712 ../src/OpenGL/GridCP.c:1717 #: ../src/OpenGL/GridCP.c:1726 ../src/OpenGL/GridCube.c:256 #: ../src/OpenGL/GridCube.c:283 ../src/OpenGL/GridCube.c:358 #: ../src/OpenGL/GridCube.c:365 ../src/OpenGL/GridCube.c:372 #: ../src/OpenGL/GridCube.c:379 ../src/OpenGL/GridCube.c:386 #: ../src/OpenGL/GridCube.c:396 ../src/OpenGL/GridCube.c:403 #: ../src/OpenGL/GridCube.c:410 ../src/OpenGL/GridCube.c:419 #: ../src/OpenGL/GridCube.c:424 ../src/OpenGL/GridCube.c:431 #: ../src/OpenGL/GridCube.c:438 ../src/OpenGL/GridCube.c:447 #: ../src/OpenGL/GridCube.c:452 ../src/OpenGL/GridCube.c:458 #: ../src/OpenGL/GridCube.c:465 ../src/OpenGL/GridCube.c:474 #: ../src/OpenGL/GridCube.c:479 ../src/OpenGL/GridCube.c:489 #: ../src/OpenGL/GridCube.c:499 ../src/OpenGL/GridCube.c:618 #: ../src/OpenGL/GridCube.c:625 ../src/OpenGL/GridCube.c:632 #: ../src/OpenGL/GridCube.c:639 ../src/OpenGL/GridCube.c:646 #: ../src/OpenGL/GridCube.c:656 ../src/OpenGL/GridCube.c:663 #: ../src/OpenGL/GridCube.c:670 ../src/OpenGL/GridCube.c:679 #: ../src/OpenGL/GridCube.c:684 ../src/OpenGL/GridCube.c:691 #: ../src/OpenGL/GridCube.c:698 ../src/OpenGL/GridCube.c:707 #: ../src/OpenGL/GridCube.c:712 ../src/OpenGL/GridCube.c:718 #: ../src/OpenGL/GridCube.c:725 ../src/OpenGL/GridCube.c:734 #: ../src/OpenGL/GridCube.c:739 ../src/OpenGL/GridCube.c:749 #: ../src/OpenGL/GridCube.c:760 ../src/OpenGL/GridCube.c:897 #: ../src/OpenGL/GridCube.c:936 ../src/OpenGL/GridCube.c:949 #: ../src/OpenGL/GridCube.c:1147 ../src/OpenGL/GridCube.c:1153 #: ../src/OpenGL/GridCube.c:1159 ../src/OpenGL/GridCube.c:1165 #: ../src/OpenGL/GridCube.c:1171 ../src/OpenGL/GridCube.c:1177 #: ../src/OpenGL/GridCube.c:1197 ../src/OpenGL/GridCube.c:1227 #: ../src/OpenGL/GridCube.c:1315 ../src/OpenGL/GridCube.c:1327 #: ../src/OpenGL/GridCube.c:1336 ../src/OpenGL/GridCube.c:1345 #: ../src/OpenGL/GridCube.c:1354 ../src/OpenGL/GridCube.c:1438 #: ../src/OpenGL/GridCube.c:1551 ../src/OpenGL/GridCube.c:1584 #: ../src/OpenGL/GridCube.c:1593 ../src/OpenGL/GridCube.c:1602 #: ../src/OpenGL/GridCube.c:1611 ../src/OpenGL/GridCube.c:1677 #: ../src/OpenGL/GridCube.c:1704 ../src/OpenGL/GridCube.c:1961 #: ../src/OpenGL/GridCube.c:1980 ../src/OpenGL/GridCube.c:2000 #: ../src/OpenGL/GridCube.c:2048 ../src/OpenGL/GridMolcas.c:181 #: ../src/OpenGL/GridMolcas.c:187 ../src/OpenGL/GridMolcas.c:292 #: ../src/OpenGL/GridMolcas.c:344 ../src/OpenGL/GridMolcas.c:493 #: ../src/OpenGL/GridMolcas.c:875 ../src/OpenGL/GridMolcas.c:898 #: ../src/OpenGL/GridMolcas.c:904 ../src/OpenGL/GridMolcas.c:939 #: ../src/OpenGL/GridMolcas.c:965 ../src/OpenGL/GridMolcas.c:971 #: ../src/OpenGL/GridMolcas.c:982 ../src/OpenGL/GridPlans.c:304 #: ../src/OpenGL/GridPlans.c:309 ../src/OpenGL/GridPlans.c:316 #: ../src/OpenGL/GridPlans.c:371 ../src/OpenGL/GridPlans.c:377 #: ../src/OpenGL/GridPlans.c:390 ../src/OpenGL/GridPlans.c:537 #: ../src/OpenGL/GridPlans.c:542 ../src/OpenGL/GridQChem.c:75 #: ../src/OpenGL/GridQChem.c:94 ../src/OpenGL/GridQChem.c:108 #: ../src/OpenGL/GridQChem.c:114 ../src/OpenGL/GridQChem.c:174 #: ../src/OpenGL/GridQChem.c:310 ../src/OpenGL/GridQChem.c:325 #: ../src/OpenGL/GridQChem.c:334 ../src/OpenGL/Images.c:70 #: ../src/OpenGL/Images.c:91 ../src/OpenGL/Images.c:112 #: ../src/OpenGL/Images.c:206 ../src/OpenGL/Images.c:218 #: ../src/OpenGL/Images.c:322 ../src/OpenGL/Images.c:334 #: ../src/OpenGL/Images.c:425 ../src/OpenGL/Images.c:443 #: ../src/OpenGL/Images.c:457 ../src/OpenGL/IntegralOrbitals.c:566 #: ../src/OpenGL/IntegralOrbitals.c:576 ../src/OpenGL/IntegralOrbitals.c:587 #: ../src/OpenGL/IntegralOrbitals.c:612 ../src/OpenGL/IntegralOrbitals.c:627 #: ../src/OpenGL/IntegralOrbitals.c:653 ../src/OpenGL/IntegralOrbitals.c:1136 #: ../src/OpenGL/IntegralOrbitals.c:1141 ../src/OpenGL/IntegralOrbitals.c:1146 #: ../src/OpenGL/IntegralOrbitals.c:1153 ../src/OpenGL/IntegralOrbitals.c:1284 #: ../src/OpenGL/IntegralOrbitals.c:1290 ../src/OpenGL/IntegralOrbitals.c:1296 #: ../src/OpenGL/IntegralOrbitals.c:1494 ../src/OpenGL/IntegralOrbitals.c:1504 #: ../src/OpenGL/IntegralOrbitals.c:1515 ../src/OpenGL/IntegralOrbitals.c:1540 #: ../src/OpenGL/IntegralOrbitals.c:1555 ../src/OpenGL/IntegralOrbitals.c:1581 #: ../src/OpenGL/IntegralOrbitals.c:1735 ../src/OpenGL/IntegralOrbitals.c:1740 #: ../src/OpenGL/IntegralOrbitals.c:1745 ../src/OpenGL/IntegralOrbitals.c:1752 #: ../src/OpenGL/IntegralOrbitals.c:1958 ../src/OpenGL/IntegralOrbitals.c:1968 #: ../src/OpenGL/IntegralOrbitals.c:1979 ../src/OpenGL/IntegralOrbitals.c:2004 #: ../src/OpenGL/IntegralOrbitals.c:2019 ../src/OpenGL/IntegralOrbitals.c:2045 #: ../src/OpenGL/IntegralOrbitals.c:2200 ../src/OpenGL/IntegralOrbitals.c:2205 #: ../src/OpenGL/IntegralOrbitals.c:2210 ../src/OpenGL/IntegralOrbitals.c:2217 #: ../src/OpenGL/MenuToolBarGL.c:235 ../src/OpenGL/MenuToolBarGL.c:305 #: ../src/OpenGL/MenuToolBarGL.c:310 ../src/OpenGL/MenuToolBarGL.c:315 #: ../src/OpenGL/MenuToolBarGL.c:320 ../src/OpenGL/MenuToolBarGL.c:325 #: ../src/OpenGL/MenuToolBarGL.c:330 ../src/OpenGL/MenuToolBarGL.c:335 #: ../src/OpenGL/MenuToolBarGL.c:340 ../src/OpenGL/Orbitals.c:229 #: ../src/OpenGL/Orbitals.c:237 ../src/OpenGL/Orbitals.c:299 #: ../src/OpenGL/Orbitals.c:309 ../src/OpenGL/Orbitals.c:320 #: ../src/OpenGL/Orbitals.c:345 ../src/OpenGL/Orbitals.c:360 #: ../src/OpenGL/Orbitals.c:897 ../src/OpenGL/Orbitals.c:1025 #: ../src/OpenGL/Orbitals.c:1117 ../src/OpenGL/Orbitals.c:1295 #: ../src/OpenGL/Orbitals.c:1337 ../src/OpenGL/Orbitals.c:1347 #: ../src/OpenGL/Orbitals.c:1392 ../src/OpenGL/Orbitals.c:1738 #: ../src/OpenGL/Orbitals.c:1748 ../src/OpenGL/Orbitals.c:1781 #: ../src/OpenGL/Orbitals.c:1910 ../src/OpenGL/Orbitals.c:2002 #: ../src/OpenGL/Orbitals.c:2010 ../src/OpenGL/Orbitals.c:2020 #: ../src/OpenGL/Orbitals.c:2034 ../src/OpenGL/Orbitals.c:2138 #: ../src/OpenGL/Orbitals.c:2201 ../src/OpenGL/Orbitals.c:2300 #: ../src/OpenGL/OrbitalsDalton.c:102 ../src/OpenGL/OrbitalsDalton.c:134 #: ../src/OpenGL/OrbitalsDalton.c:208 ../src/OpenGL/OrbitalsDalton.c:217 #: ../src/OpenGL/OrbitalsDalton.c:235 ../src/OpenGL/OrbitalsDalton.c:260 #: ../src/OpenGL/OrbitalsDalton.c:298 ../src/OpenGL/OrbitalsDalton.c:307 #: ../src/OpenGL/OrbitalsDalton.c:334 ../src/OpenGL/OrbitalsGamess.c:112 #: ../src/OpenGL/OrbitalsGamess.c:121 ../src/OpenGL/OrbitalsGamess.c:161 #: ../src/OpenGL/OrbitalsGamess.c:377 ../src/OpenGL/OrbitalsGamess.c:386 #: ../src/OpenGL/OrbitalsGamess.c:417 ../src/OpenGL/OrbitalsGamess.c:435 #: ../src/OpenGL/OrbitalsGamess.c:765 ../src/OpenGL/OrbitalsGamess.c:775 #: ../src/OpenGL/OrbitalsGamess.c:867 ../src/OpenGL/OrbitalsGamess.c:1127 #: ../src/OpenGL/OrbitalsGamess.c:1187 ../src/OpenGL/OrbitalsGamess.c:1198 #: ../src/OpenGL/OrbitalsMolpro.c:576 ../src/OpenGL/OrbitalsMolpro.c:585 #: ../src/OpenGL/OrbitalsMolpro.c:603 ../src/OpenGL/OrbitalsMolpro.c:624 #: ../src/OpenGL/OrbitalsMolpro.c:864 ../src/OpenGL/OrbitalsMolpro.c:875 #: ../src/OpenGL/OrbitalsMolpro.c:894 ../src/OpenGL/OrbitalsMolpro.c:1174 #: ../src/OpenGL/OrbitalsMolpro.c:1182 ../src/OpenGL/OrbitalsMolpro.c:1524 #: ../src/OpenGL/OrbitalsMolpro.c:1785 ../src/OpenGL/OrbitalsMopac.c:112 #: ../src/OpenGL/OrbitalsMopac.c:121 ../src/OpenGL/OrbitalsMopac.c:153 #: ../src/OpenGL/OrbitalsMopac.c:162 ../src/OpenGL/OrbitalsMopac.c:215 #: ../src/OpenGL/OrbitalsMopac.c:224 ../src/OpenGL/OrbitalsMopac.c:258 #: ../src/OpenGL/OrbitalsMopac.c:267 ../src/OpenGL/OrbitalsMopac.c:293 #: ../src/OpenGL/OrbitalsMopac.c:302 ../src/OpenGL/OrbitalsMopac.c:326 #: ../src/OpenGL/OrbitalsMopac.c:335 ../src/OpenGL/OrbitalsMopac.c:1194 #: ../src/OpenGL/OrbitalsMopac.c:1305 ../src/OpenGL/OrbitalsOrca.c:61 #: ../src/OpenGL/OrbitalsOrca.c:85 ../src/OpenGL/OrbitalsOrca.c:322 #: ../src/OpenGL/OrbitalsOrca.c:331 ../src/OpenGL/OrbitalsOrca.c:361 #: ../src/OpenGL/OrbitalsOrca.c:438 ../src/OpenGL/OrbitalsOrca.c:551 #: ../src/OpenGL/OrbitalsOrca.c:561 ../src/OpenGL/OrbitalsOrca.c:583 #: ../src/OpenGL/OrbitalsOrca.c:692 ../src/OpenGL/OrbitalsQChem.c:112 #: ../src/OpenGL/OrbitalsQChem.c:121 ../src/OpenGL/OrbitalsQChem.c:152 #: ../src/OpenGL/OrbitalsQChem.c:439 ../src/OpenGL/OrbitalsQChem.c:448 #: ../src/OpenGL/OrbitalsQChem.c:469 ../src/OpenGL/OrbitalsQChem.c:486 #: ../src/OpenGL/OrbitalsQChem.c:829 ../src/OpenGL/OrbitalsQChem.c:839 #: ../src/OpenGL/OrbitalsQChem.c:926 ../src/OpenGL/OrbitalsQChem.c:1163 #: ../src/OpenGL/OrbitalsQChem.c:1186 ../src/OpenGL/OrbitalsQChem.c:1222 #: ../src/OpenGL/OrbitalsQChem.c:1233 ../src/OpenGL/PlanesMapped.c:149 #: ../src/OpenGL/PlanesMapped.c:256 ../src/OpenGL/UtilsOrb.c:225 #: ../src/OpenGL/UtilsOrb.c:323 ../src/OpenGL/UtilsOrb.c:348 #: ../src/OpenGL/UtilsOrb.c:392 ../src/OpenGL/UtilsOrb.c:445 #: ../src/OpenGL/UtilsOrb.c:498 ../src/OpenGL/UtilsOrb.c:538 #: ../src/OpenGL/UtilsOrb.c:1077 ../src/OpenGL/UtilsOrb.c:1082 #: ../src/OpenGL/UtilsOrb.c:1088 ../src/OpenGL/UtilsOrb.c:1095 #: ../src/OpenGL/UtilsOrb.c:1182 ../src/OpenGL/UtilsOrb.c:1192 #: ../src/OpenGL/UtilsOrb.c:1203 ../src/OpenGL/UtilsOrb.c:1228 #: ../src/OpenGL/UtilsOrb.c:1243 ../src/OpenGL/UtilsOrb.c:1291 #: ../src/OpenGL/UtilsOrb.c:1296 ../src/OpenGL/UtilsOrb.c:1302 #: ../src/OpenGL/UtilsOrb.c:1309 ../src/OpenGL/UtilsOrb.c:1383 #: ../src/OpenGL/UtilsOrb.c:1392 ../src/OpenGL/UtilsOrb.c:1412 #: ../src/OpenGL/UtilsOrb.c:1418 ../src/OpenGL/UtilsOrb.c:1770 #: ../src/OpenGL/UtilsOrb.c:1780 ../src/OpenGL/UtilsOrb.c:1802 #: ../src/OpenGL/UtilsOrb.c:1813 ../src/OpenGL/UtilsOrb.c:1838 #: ../src/OpenGL/UtilsOrb.c:1853 ../src/OpenGL/UtilsOrb.c:2128 #: ../src/OpenGL/UtilsOrb.c:2625 ../src/OpenGL/Vibration.c:420 #: ../src/OpenGL/Vibration.c:479 ../src/OpenGL/Vibration.c:676 #: ../src/OpenGL/Vibration.c:878 ../src/OpenGL/Vibration.c:1041 #: ../src/OpenGL/Vibration.c:1061 ../src/OpenGL/Vibration.c:1128 #: ../src/OpenGL/Vibration.c:1234 ../src/OpenGL/Vibration.c:1248 #: ../src/OpenGL/Vibration.c:1374 ../src/OpenGL/Vibration.c:1506 #: ../src/OpenGL/Vibration.c:1542 ../src/OpenGL/Vibration.c:1592 #: ../src/OpenGL/Vibration.c:1647 ../src/OpenGL/Vibration.c:1698 #: ../src/OpenGL/Vibration.c:1831 ../src/OpenGL/Vibration.c:1851 #: ../src/OpenGL/Vibration.c:1990 ../src/OpenGL/Vibration.c:2012 #: ../src/OpenGL/Vibration.c:2101 ../src/OpenGL/Vibration.c:2534 #: ../src/OpenGL/Vibration.c:2939 ../src/OpenGL/Vibration.c:2965 #: ../src/OpenGL/Vibration.c:2974 ../src/OpenGL/Vibration.c:2983 #: ../src/OpenGL/Vibration.c:3111 ../src/OpenGL/Vibration.c:3132 #: ../src/OpenGL/Vibration.c:3201 ../src/OpenGL/Vibration.c:3219 #: ../src/OpenGL/Vibration.c:3258 ../src/OpenGL/Vibration.c:3306 #: ../src/OpenGL/Vibration.c:3342 ../src/OpenGL/Vibration.c:3352 #: ../src/OpenGL/Vibration.c:3369 ../src/OpenGL/Vibration.c:3386 #: ../src/OpenGL/Vibration.c:3396 ../src/OpenGL/Vibration.c:3413 #: ../src/OpenGL/Vibration.c:3595 ../src/OpenGL/Vibration.c:3780 #: ../src/OpenGL/Vibration.c:4387 ../src/Orca/Orca.c:157 #: ../src/Spectrum/DOS.c:61 ../src/Spectrum/DOS.c:227 #: ../src/Spectrum/ECDSpectrum.c:127 ../src/Spectrum/IRSpectrum.c:126 #: ../src/Spectrum/IRSpectrum.c:133 ../src/Spectrum/IRSpectrum.c:1145 #: ../src/Spectrum/NMRSpectrum.c:1748 ../src/Spectrum/RamanSpectrum.c:126 #: ../src/Spectrum/RamanSpectrum.c:133 ../src/Spectrum/RamanSpectrum.c:735 #: ../src/Spectrum/UVSpectrum.c:127 #: ../src/Symmetry/MoleculeSymmetryInterface.c:167 #: ../src/Symmetry/MoleculeSymmetryInterface.c:282 #: ../src/Symmetry/MoleculeSymmetryInterface.c:303 #: ../src/Utils/GabeditContoursPlot.c:1555 #: ../src/Utils/GabeditContoursPlot.c:1562 #: ../src/Utils/GabeditContoursPlot.c:1706 #: ../src/Utils/GabeditContoursPlot.c:5136 #: ../src/Utils/GabeditContoursPlot.c:5143 ../src/Utils/Utils.c:618 #: ../src/Utils/UtilsInterface.c:474 ../src/Utils/UtilsInterface.c:1247 #: ../src/Utils/UtilsInterface.c:1463 ../src/Utils/UtilsInterface.c:2220 #: ../src/VibrationalCorrections/GabeditGaussianInput.c:197 #: ../src/VibrationalCorrections/GabeditGaussianInput.c:210 #: ../src/VibrationalCorrections/GabeditGaussianInput.c:945 msgid "Error" msgstr "" #: ../src/Common/Printer.c:532 #, c-format msgid "Printed.%d charaters\n" msgstr "" #: ../src/Common/Printer.c:536 msgid "Could not start document." msgstr "" #: ../src/Common/Printer.c:541 msgid "Could not create device context." msgstr "" #: ../src/Common/Printer.c:546 msgid "Canceled or printer could not be setup." msgstr "" #: ../src/Common/Run.c:369 ../src/Files/ListeFiles.c:1294 #: ../src/Files/ListeFiles.c:1334 #: ../src/IsotopeDistribution/IsotopeDistributionCalculatorDlg.c:613 #: ../src/NetWork/Batch.c:814 ../src/NetWork/Process.c:1071 msgid "Output" msgstr "" #: ../src/Common/Run.c:382 ../src/FireFly/FireFly.c:204 #: ../src/Gamess/Gamess.c:187 ../src/Gaussian/GInterfaceBasis.c:511 #: ../src/Gaussian/GInterfaceBasis.c:673 ../src/Gaussian/GInterfaceLink.c:111 #: ../src/Gaussian/GInterfaceRoute.c:401 ../src/Gaussian/GInterfaceRoute.c:566 #: ../src/Gaussian/GInterfaceRoute.c:718 ../src/Gaussian/Gaussian.c:1206 #: ../src/Geometry/BuildLinear.c:241 ../src/Geometry/BuildNanoTube.c:274 #: ../src/Geometry/BuildRing.c:252 ../src/Geometry/DrawGeom.c:3055 #: ../src/Geometry/DrawGeom.c:3147 ../src/Geometry/DrawGeom.c:3275 #: ../src/Geometry/DrawGeom.c:3403 ../src/Geometry/DrawGeom.c:3531 #: ../src/Geometry/DrawGeom.c:3665 ../src/Geometry/DrawGeom.c:3764 #: ../src/Geometry/DrawGeom.c:3900 ../src/Geometry/DrawGeom.c:3980 #: ../src/Geometry/GeomXYZ.c:2773 ../src/Geometry/GeomXYZ.c:2938 #: ../src/Geometry/GeomXYZ.c:11305 ../src/Geometry/GeomXYZ.c:11654 #: ../src/Geometry/GeomXYZ.c:11760 ../src/Geometry/GeomZmatrix.c:2425 #: ../src/Geometry/GeomZmatrix.c:3646 ../src/Geometry/GeomZmatrix.c:3845 #: ../src/Geometry/GeomZmatrix.c:6783 ../src/Geometry/GeomZmatrix.c:6890 #: ../src/Geometry/PersonalFragments.c:273 #: ../src/Geometry/PersonalFragments.c:412 #: ../src/Geometry/PersonalFragments.c:681 #: ../src/Geometry/PersonalFragments.c:874 ../src/MPQC/MPQCBasisLibrary.c:783 #: ../src/MPQC/MPQCBasisLibrary.c:920 ../src/MPQC/MPQCBasisLibrary.c:1039 #: ../src/MPQC/MPQCFunctionals.c:575 ../src/Molcas/Molcas.c:196 #: ../src/MolecularMechanics/SetPDBTemplate.c:518 #: ../src/Molpro/MInterfaceComm.c:136 ../src/Molpro/MInterfaceComm.c:196 #: ../src/Molpro/MInterfaceComm.c:259 ../src/Molpro/MInterfaceComm.c:321 #: ../src/Molpro/MInterfaceComm.c:379 ../src/Molpro/MInterfaceComm.c:504 #: ../src/Molpro/MInterfaceComm.c:575 ../src/Molpro/MInterfaceComm.c:649 #: ../src/Molpro/MInterfaceComm.c:763 ../src/Molpro/Molpro.c:709 #: ../src/Molpro/MolproBasisLibrary.c:829 #: ../src/Molpro/MolproBasisLibrary.c:963 ../src/Mopac/Mopac.c:181 #: ../src/NetWork/Batch.c:363 ../src/NetWork/Batch.c:677 #: ../src/NetWork/Batch.c:840 ../src/NetWork/Process.c:490 #: ../src/NetWork/Process.c:728 ../src/NetWork/Process.c:1103 #: ../src/OpenGL/AnimationGeomConv.c:4825 ../src/OpenGL/Contours.c:895 #: ../src/OpenGL/GridCube.c:326 ../src/OpenGL/GridCube.c:1516 #: ../src/OpenGL/GridPlans.c:576 ../src/OpenGL/IntegralOrbitals.c:1235 #: ../src/OpenGL/IntegralOrbitals.c:1817 ../src/OpenGL/IntegralOrbitals.c:2298 #: ../src/OpenGL/LabelsGL.c:747 ../src/OpenGL/Orbitals.c:475 #: ../src/OpenGL/Orbitals.c:1057 ../src/OpenGL/Orbitals.c:1185 #: ../src/OpenGL/OrbitalsMolpro.c:1747 ../src/OpenGL/PlanesMapped.c:182 #: ../src/OpenGL/PlanesMapped.c:287 ../src/OpenGL/PreferencesOrb.c:166 #: ../src/OpenGL/PreferencesOrb.c:528 ../src/OpenGL/PreferencesOrb.c:578 #: ../src/OpenGL/PrincipalAxisGL.c:569 ../src/OpenGL/TriangleDraw.c:475 #: ../src/OpenGL/UtilsOrb.c:1125 ../src/OpenGL/UtilsOrb.c:1340 #: ../src/OpenGL/UtilsOrb.c:2158 ../src/OpenGL/UtilsOrb.c:2276 #: ../src/OpenGL/UtilsOrb.c:2585 ../src/OpenGL/UtilsOrb.c:2703 #: ../src/OpenGL/Vibration.c:653 ../src/Orca/Orca.c:180 #: ../src/QChem/QChem.c:187 ../src/Spectrum/UVSpectrum.c:711 #: ../src/Utils/AtomsProp.c:1334 ../src/Utils/UtilsInterface.c:542 #: ../src/Utils/UtilsInterface.c:543 ../src/Utils/UtilsInterface.c:640 #: ../src/Utils/UtilsInterface.c:688 ../src/Utils/UtilsInterface.c:2892 #: ../src/VibrationalCorrections/GabeditGaussianInput.c:260 msgid "OK" msgstr "" #: ../src/Common/Run.c:448 ../src/Common/Run.c:462 ../src/Common/Run.c:486 #: ../src/Common/Run.c:497 ../src/Common/Run.c:506 ../src/Common/Run.c:515 #: ../src/Common/Run.c:529 ../src/Common/Run.c:538 ../src/Common/Run.c:553 #: ../src/Common/Run.c:563 ../src/Common/Run.c:573 ../src/Common/Run.c:582 #: ../src/Common/Run.c:597 #, c-format msgid "" "\n" "Get %s file from remote host :\n" msgstr "" #: ../src/Common/Run.c:851 ../src/Common/Run.c:1027 ../src/Common/Run.c:1099 #: ../src/Common/Run.c:1197 ../src/Common/Run.c:1271 ../src/Common/Run.c:1439 #: ../src/Common/Run.c:1529 ../src/Common/Run.c:1719 ../src/Common/Run.c:1782 #: ../src/Common/Run.c:1838 ../src/Common/Run.c:1976 ../src/Common/Run.c:2564 #: ../src/Common/Run.c:2711 ../src/Common/Run.c:2859 ../src/Common/Run.c:3041 #: ../src/Common/Run.c:3181 ../src/Common/Run.c:3322 msgid "" "\n" "I can not create cmd file\n" msgstr "" #: ../src/Common/Run.c:987 ../src/Common/Run.c:1153 ../src/Common/Run.c:1400 #, c-format msgid "echo Job %s.inp finished.\n" msgstr "" #: ../src/Common/Run.c:1380 #, c-format msgid "echo Running %s.inp ....\n" msgstr "" #: ../src/Common/Run.c:1938 #, c-format msgid "Run Orca at host :%s, Login : %s" msgstr "" #: ../src/Common/Run.c:1953 ../src/Common/Run.c:1954 ../src/Common/Run.c:2100 #: ../src/Common/Run.c:2101 ../src/Common/Run.c:2247 ../src/Common/Run.c:2248 #: ../src/Common/Run.c:2394 ../src/Common/Run.c:2395 ../src/Common/Run.c:2541 #: ../src/Common/Run.c:2542 ../src/Common/Run.c:2688 ../src/Common/Run.c:2689 #: ../src/Common/Run.c:2836 ../src/Common/Run.c:2837 ../src/Common/Run.c:3018 #: ../src/Common/Run.c:3019 ../src/Common/Run.c:3159 ../src/Common/Run.c:3160 #: ../src/Common/Run.c:3300 ../src/Common/Run.c:3301 msgid "" "\n" "Make Working Directory remote host :\n" " " msgstr "" #: ../src/Common/Run.c:1966 ../src/Common/Run.c:1967 ../src/Common/Run.c:2113 #: ../src/Common/Run.c:2114 ../src/Common/Run.c:2260 ../src/Common/Run.c:2261 #: ../src/Common/Run.c:2407 ../src/Common/Run.c:2408 ../src/Common/Run.c:2554 #: ../src/Common/Run.c:2555 ../src/Common/Run.c:2701 ../src/Common/Run.c:2702 #: ../src/Common/Run.c:2849 ../src/Common/Run.c:2850 ../src/Common/Run.c:3031 #: ../src/Common/Run.c:3032 ../src/Common/Run.c:3171 ../src/Common/Run.c:3172 #: ../src/Common/Run.c:3312 ../src/Common/Run.c:3313 msgid "" "\n" "Put Data File at remote host :\n" " " msgstr "" #: ../src/Common/Run.c:1987 ../src/Common/Run.c:1988 ../src/Common/Run.c:2134 #: ../src/Common/Run.c:2135 ../src/Common/Run.c:2281 ../src/Common/Run.c:2282 #: ../src/Common/Run.c:2428 ../src/Common/Run.c:2429 ../src/Common/Run.c:2575 #: ../src/Common/Run.c:2576 ../src/Common/Run.c:2722 ../src/Common/Run.c:2723 #: ../src/Common/Run.c:2869 ../src/Common/Run.c:2870 ../src/Common/Run.c:3052 #: ../src/Common/Run.c:3053 ../src/Common/Run.c:3192 ../src/Common/Run.c:3193 #: ../src/Common/Run.c:3333 ../src/Common/Run.c:3334 msgid "" "\n" "Put CMD File at remote host :\n" " " msgstr "" #: ../src/Common/Run.c:1999 ../src/Common/Run.c:2000 ../src/Common/Run.c:2440 #: ../src/Common/Run.c:2441 ../src/Common/Run.c:2587 ../src/Common/Run.c:2588 #: ../src/Common/Run.c:2734 ../src/Common/Run.c:2735 ../src/Common/Run.c:2881 #: ../src/Common/Run.c:2882 ../src/Common/Run.c:3064 ../src/Common/Run.c:3065 #: ../src/Common/Run.c:3203 ../src/Common/Run.c:3204 ../src/Common/Run.c:3344 #: ../src/Common/Run.c:3345 msgid "" "\n" "chmod for cmd file :\n" msgstr "" #: ../src/Common/Run.c:2009 ../src/Common/Run.c:2010 msgid "" "\n" "Run Orca at remote host :\n" msgstr "" #: ../src/Common/Run.c:2085 #, c-format msgid "Run FireFly at host :%s, Login : %s" msgstr "" #: ../src/Common/Run.c:2123 ../src/Common/Run.c:2270 ../src/Common/Run.c:2417 #: ../src/Geometry/Povray.c:1000 msgid "" "\n" "I can not create cmd file\n" " " msgstr "" #: ../src/Common/Run.c:2146 ../src/Common/Run.c:2147 ../src/Common/Run.c:2293 #: ../src/Common/Run.c:2294 msgid "" "\n" "chmod for cmd file :\n" " " msgstr "" #: ../src/Common/Run.c:2156 ../src/Common/Run.c:2157 msgid "" "\n" "Run FireFly at remote host :\n" " " msgstr "" #: ../src/Common/Run.c:2232 #, c-format msgid "Run Q-Chem at host :%s, Login : %s" msgstr "" #: ../src/Common/Run.c:2303 ../src/Common/Run.c:2304 msgid "" "\n" "Run Q-Chem at remote host :\n" " " msgstr "" #: ../src/Common/Run.c:2379 #, c-format msgid "Run Mopac at host :%s, Login : %s" msgstr "" #: ../src/Common/Run.c:2450 ../src/Common/Run.c:2451 msgid "" "\n" "Run Mopac at remote host :\n" " " msgstr "" #: ../src/Common/Run.c:2526 #, c-format msgid "Run Gamess at host :%s, Login : %s" msgstr "" #: ../src/Common/Run.c:2597 ../src/Common/Run.c:2598 msgid "" "\n" "Run gamess at remote host :\n" " " msgstr "" #: ../src/Common/Run.c:2673 #, c-format msgid "Run Gaussian at host :%s, Login : %s" msgstr "" #: ../src/Common/Run.c:2744 ../src/Common/Run.c:2745 ../src/Common/Run.c:3354 #: ../src/Common/Run.c:3355 msgid "" "\n" "Run gaussian at remote host :\n" " " msgstr "" #: ../src/Common/Run.c:2821 #, c-format msgid "Run molcas at host :%s, Login : %s" msgstr "" #: ../src/Common/Run.c:2892 ../src/Common/Run.c:2893 msgid "" "\n" "Run molcas at remote host :\n" " " msgstr "" #: ../src/Common/Run.c:3003 #, c-format msgid "Run molpro at host :%s, Login : %s" msgstr "" #: ../src/Common/Run.c:3075 ../src/Common/Run.c:3076 msgid "" "\n" "Run molpro at remote host :\n" " " msgstr "" #: ../src/Common/Run.c:3146 #, c-format msgid "Run MPQC at host :%s, Login : %s" msgstr "" #: ../src/Common/Run.c:3213 ../src/Common/Run.c:3214 msgid "" "\n" "Run MPQC at remote host :\n" " " msgstr "" #: ../src/Common/Run.c:3286 #, c-format msgid "Run \"%s %s\" Command at host : %s, Login : %s" msgstr "" #: ../src/Common/Run.c:3442 #, c-format msgid "Run Orca in local : %s" msgstr "" #: ../src/Common/Run.c:3545 #, c-format msgid "Run FireFly in local : %s" msgstr "" #: ../src/Common/Run.c:3649 #, c-format msgid "Run Q-Chem in local : %s" msgstr "" #: ../src/Common/Run.c:3753 #, c-format msgid "Run Mopac in local : %s" msgstr "" #: ../src/Common/Run.c:3856 #, c-format msgid "Run gamess in local : %s" msgstr "" #: ../src/Common/Run.c:3955 #, c-format msgid "Run gaussian in local : %s" msgstr "" #: ../src/Common/Run.c:4058 ../src/Common/Run.c:4194 ../src/Common/Run.c:4299 msgid "" "\n" "Please Wait\n" msgstr "" #: ../src/Common/Run.c:4061 #, c-format msgid "Run molcas in local : %s" msgstr "" #: ../src/Common/Run.c:4196 #, c-format msgid "Run molpro in local : %s" msgstr "" #: ../src/Common/Run.c:4302 #, c-format msgid "Run MPQC in local : %s" msgstr "" #: ../src/Common/Run.c:4406 #, c-format msgid "Run \"%s %s\" command in local host" msgstr "" #: ../src/Common/Run.c:4959 ../src/Files/ListeFiles.c:780 msgid "Host name" msgstr "" #: ../src/Common/Run.c:4960 ../src/Files/ListeFiles.c:781 #: ../src/Files/ListeFiles.c:953 ../src/Files/ListeFiles.c:1075 #: ../src/Files/ListeFiles.c:1223 ../src/Files/ListeFiles.c:1366 msgid "Login" msgstr "" #: ../src/Common/Run.c:4961 ../src/Files/ListeFiles.c:782 msgid "Password" msgstr "" #: ../src/Common/Run.c:4962 ../src/Files/ListeFiles.c:783 msgid "Working Directory" msgstr "" #: ../src/Common/Run.c:4964 ../src/Files/ListeFiles.c:785 #: ../src/NetWork/Batch.c:553 ../src/NetWork/Process.c:367 msgid "Remote host" msgstr "" #: ../src/Common/Run.c:5051 msgid "Run " msgstr "" #: ../src/Common/SplashScreen.c:72 msgid "Load atom properties....." msgstr "" #: ../src/Common/SplashScreen.c:78 msgid "I can not load atom properties from file, define default values....." msgstr "" #: ../src/Common/SplashScreen.c:88 msgid "Load default commands from \"commands\" file....." msgstr "" #: ../src/Common/SplashScreen.c:94 msgid "Load recent fonts styles....." msgstr "" #: ../src/Common/SplashScreen.c:100 msgid "Load recent hosts list....." msgstr "" #: ../src/Common/SplashScreen.c:106 msgid "Load recent surfaces colors....." msgstr "" #: ../src/Common/SplashScreen.c:112 msgid "Load list of recent projects....." msgstr "" #: ../src/Common/SplashScreen.c:117 msgid "Load Molecular mechanics parameters....." msgstr "" #: ../src/Common/SplashScreen.c:123 msgid "Load Personal Fragments....." msgstr "" #: ../src/Common/SplashScreen.c:126 msgid "Load the list of the bases supported by Molpro......" msgstr "" #: ../src/Common/SplashScreen.c:129 msgid "Load the list of the bases supported by Molcas......" msgstr "" #: ../src/Common/SplashScreen.c:132 msgid "Load the list of the bases supported by MPQC......" msgstr "" #: ../src/Common/SplashScreen.c:288 msgid "Graphical" msgstr "" #: ../src/Common/SplashScreen.c:371 msgid " Welcome to :" msgstr "" #: ../src/Common/SplashScreen.c:419 msgid "Abdul-Rahman Allouche presents : " msgstr "" #: ../src/Common/SplashScreen.c:518 msgid "The Graphical User Interface for computational chemistry packages" msgstr "" #: ../src/Common/Status.c:101 msgid " Cancel " msgstr "" #: ../src/Common/TextEdit.c:83 ../src/Common/TextEdit.c:108 #: ../src/Common/TextEdit.c:133 #, c-format msgid " %d strings found and marked in red" msgstr "" #: ../src/Common/TextEdit.c:84 ../src/Common/TextEdit.c:109 #: ../src/Common/TextEdit.c:134 msgid " no strings found" msgstr "" #: ../src/Common/TextEdit.c:189 msgid "FIND" msgstr "" #: ../src/Common/TextEdit.c:199 msgid " String to find :" msgstr "" #: ../src/Common/TextEdit.c:215 msgid "All" msgstr "" #: ../src/Common/TextEdit.c:220 msgid "Forward" msgstr "" #: ../src/Common/TextEdit.c:225 msgid "Backward" msgstr "" #: ../src/Common/TextEdit.c:241 msgid " Find " msgstr "" #: ../src/Common/TextEdit.c:295 ../src/Common/TextEdit.c:315 #: ../src/Common/TextEdit.c:358 msgid "Data" msgstr "" #: ../src/Common/TextEdit.c:364 ../src/OpenGL/IntegralOrbitals.c:893 #: ../src/OpenGL/IntegralOrbitals.c:1693 ../src/OpenGL/IntegralOrbitals.c:2157 msgid "Result" msgstr "" #: ../src/Common/Windows.c:35 msgid "Windows" msgstr "" #: ../src/Files/FileChooser.c:48 ../src/Files/FileChooser.c:343 msgid "Open file" msgstr "" #: ../src/Files/FileChooser.c:49 ../src/Files/FileChooser.c:432 msgid "Save file" msgstr "" #: ../src/Files/FileChooser.c:305 msgid "Open file " msgstr "" #: ../src/Files/FileChooser.c:306 msgid "Save file " msgstr "" #: ../src/Files/FileChooser.c:310 ../src/Files/FileChooser.c:372 msgid " Open file " msgstr "" #: ../src/Files/FileChooser.c:380 msgid "Include file" msgstr "" #: ../src/Files/FileChooser.c:395 msgid " Include file " msgstr "" #: ../src/Files/FileChooser.c:476 #, c-format msgid "\"%s\" has been modified. Do you want to save it ?" msgstr "" #: ../src/Files/FileChooser.c:490 ../src/Gaussian/GInterfaceBasis.c:77 #: ../src/Gaussian/GInterfaceBasis.c:85 ../src/Gaussian/GInterfaceBasis.c:122 #: ../src/Gaussian/GInterfaceBasis.c:149 ../src/Gaussian/GInterfaceBasis.c:161 #: ../src/Gaussian/GInterfaceMethodeBase.c:62 #: ../src/Gaussian/GInterfaceMethodeBase.c:89 #: ../src/Gaussian/GInterfaceMethodeBase.c:102 #: ../src/Gaussian/GInterfaceMethodeBase.c:445 #: ../src/Gaussian/GInterfaceMethodeBase.c:450 #: ../src/Gaussian/GInterfaceMethodeBase.c:455 #: ../src/Gaussian/GInterfaceRoute.c:687 ../src/Gaussian/GInterfaceRoute.c:691 #: ../src/Gaussian/GInterfaceRoute.c:927 ../src/Gaussian/GInterfaceRoute.c:934 #: ../src/Gaussian/Gaussian.c:409 ../src/Gaussian/Gaussian.c:415 #: ../src/Gaussian/Gaussian.c:477 ../src/Gaussian/Gaussian.c:480 #: ../src/Gaussian/Gaussian.c:483 ../src/Gaussian/Gaussian.c:620 #: ../src/Gaussian/Gaussian.c:623 ../src/Geometry/GeomXYZ.c:2115 #: ../src/Geometry/GeomXYZ.c:2171 ../src/Geometry/GeomXYZ.c:2990 #: ../src/Utils/UtilsInterface.c:551 ../src/Utils/UtilsInterface.c:552 #: ../src/Utils/UtilsInterface.c:779 ../src/Utils/UtilsInterface.c:2288 msgid "No" msgstr "" #: ../src/Files/FileChooser.c:525 msgid "File selection" msgstr "" #: ../src/Files/FileChooser.c:529 msgid " File selction " msgstr "" #: ../src/Files/FolderChooser.c:39 msgid "Select a folder" msgstr "" #: ../src/Files/FolderChooser.c:47 msgid "Dir selector" msgstr "" #: ../src/Files/FolderChooser.c:51 msgid " Dir selector " msgstr "" #: ../src/Files/ListeFiles.c:492 msgid "Properties of project" msgstr "" #: ../src/Files/ListeFiles.c:514 ../src/Files/ListeFiles.c:573 msgid " Prop. of project " msgstr "" #: ../src/Files/ListeFiles.c:547 msgid "Set properties of project" msgstr "" #: ../src/Files/ListeFiles.c:595 msgid "Server" msgstr "" #: ../src/Files/ListeFiles.c:607 ../src/Files/ListeFiles.c:628 #: ../src/Files/ListeFiles.c:1082 ../src/Files/ListeFiles.c:1369 msgid "Local" msgstr "" #: ../src/Files/ListeFiles.c:637 msgid "Local Directory " msgstr "" #: ../src/Files/ListeFiles.c:650 msgid "Files " msgstr "" #: ../src/Files/ListeFiles.c:652 msgid "File " msgstr "" #: ../src/Files/ListeFiles.c:719 msgid "NetWork protocols" msgstr "" #: ../src/Files/ListeFiles.c:952 ../src/Files/ListeFiles.c:1074 #: ../src/Files/ListeFiles.c:1222 ../src/Files/ListeFiles.c:1365 msgid "Host" msgstr "" #: ../src/Files/ListeFiles.c:954 ../src/Files/ListeFiles.c:1076 #: ../src/Files/ListeFiles.c:1224 ../src/Files/ListeFiles.c:1367 msgid "Directory" msgstr "" #: ../src/Files/ListeFiles.c:958 ../src/Files/ListeFiles.c:1078 msgid "Files" msgstr "" #: ../src/Files/ListeFiles.c:960 ../src/Files/ListeFiles.c:1080 msgid "File" msgstr "" #: ../src/Files/ListeFiles.c:962 ../src/Files/ListeFiles.c:1226 #: ../src/Geometry/ResultsAnalise.c:2637 msgid "Remote" msgstr "" #: ../src/Files/ListeFiles.c:984 #, c-format msgid "%s [Using rsh/ftp Protocol]" msgstr "" #: ../src/Files/ListeFiles.c:985 #, c-format msgid "%s [Using ssh Protocol]" msgstr "" #: ../src/Files/ListeFiles.c:1433 msgid " Location " msgstr "" #: ../src/Files/ListeFiles.c:1435 msgid " Output " msgstr "" #: ../src/Files/ListeFiles.c:1441 ../src/OpenGL/AnimationMD.c:1255 msgid " Error " msgstr "" #: ../src/Files/ListeFiles.c:1669 #, c-format msgid "" "\n" "Sorry, I can not open file :\n" " %s\n" msgstr "" #: ../src/Files/ListeFiles.c:1733 ../src/Utils/UtilsInterface.c:2310 #: ../src/Utils/UtilsInterface.c:2329 ../src/Utils/UtilsInterface.c:2349 #: ../src/Utils/UtilsInterface.c:2368 ../src/Utils/UtilsInterface.c:2387 #: ../src/Utils/UtilsInterface.c:2406 ../src/Utils/UtilsInterface.c:2425 #: ../src/Utils/UtilsInterface.c:2444 ../src/Utils/UtilsInterface.c:2463 #: ../src/Utils/UtilsInterface.c:2482 ../src/Utils/UtilsInterface.c:2501 #, c-format msgid "" "\n" "The \"%s\" file has been modified.\n" "\n" msgstr "" #: ../src/Files/ListeFiles.c:1734 ../src/Utils/UtilsInterface.c:2311 #: ../src/Utils/UtilsInterface.c:2331 ../src/Utils/UtilsInterface.c:2350 #: ../src/Utils/UtilsInterface.c:2369 ../src/Utils/UtilsInterface.c:2388 #: ../src/Utils/UtilsInterface.c:2407 ../src/Utils/UtilsInterface.c:2426 #: ../src/Utils/UtilsInterface.c:2445 ../src/Utils/UtilsInterface.c:2464 #: ../src/Utils/UtilsInterface.c:2483 ../src/Utils/UtilsInterface.c:2502 #, c-format msgid "" " %sIf you continue, you lose what you have changed.\n" "\n" msgstr "" #: ../src/Files/ListeFiles.c:1735 ../src/Utils/UtilsInterface.c:2312 #: ../src/Utils/UtilsInterface.c:2333 ../src/Utils/UtilsInterface.c:2351 #: ../src/Utils/UtilsInterface.c:2370 ../src/Utils/UtilsInterface.c:2389 #: ../src/Utils/UtilsInterface.c:2408 ../src/Utils/UtilsInterface.c:2427 #: ../src/Utils/UtilsInterface.c:2446 ../src/Utils/UtilsInterface.c:2465 #: ../src/Utils/UtilsInterface.c:2484 ../src/Utils/UtilsInterface.c:2503 #, c-format msgid " %sYou want to continue?\n" msgstr "" #: ../src/Files/ListeFiles.c:2424 msgid " Unselect all" msgstr "" #: ../src/Files/ListeFiles.c:2430 msgid "Select all " msgstr "" #: ../src/Files/ListeFiles.c:2526 msgid "Recent Projects" msgstr "" #: ../src/FireFly/FireFly.c:178 ../src/Gamess/Gamess.c:161 #: ../src/Gaussian/Gaussian.c:1164 ../src/MPQC/MPQC.c:172 #: ../src/Molcas/Molcas.c:169 ../src/Mopac/Mopac.c:155 ../src/Orca/Orca.c:154 #: ../src/QChem/QChem.c:160 msgid "" "You must initially define your geometry.\n" "\n" "From the principal Menu select : Geometry/Draw\n" "and draw (or read) your molecule." msgstr "" #: ../src/FireFly/FireFly.c:190 msgid "FireFly input" msgstr "" #: ../src/FireFly/FireFly.c:193 msgid " FireFly input " msgstr "" #: ../src/FireFly/FireFlyBasis.c:568 ../src/Gamess/GamessBasis.c:580 #: ../src/Gaussian/GInterfaceBasis.c:495 ../src/Gaussian/GInterfaceBasis.c:656 #: ../src/Gaussian/GInterfaceBasis.c:863 ../src/Gaussian/GInterfaceBasis.c:919 #: ../src/MPQC/MPQCBasis.c:157 ../src/MPQC/MPQCBasis.c:175 #: ../src/Molpro/MInterfaceBasis.c:1141 ../src/Molpro/MInterfaceBasis.c:1142 #: ../src/Orca/OrcaBasis.c:1154 ../src/QChem/QChemBasis.c:190 #: ../src/QChem/QChemBasis.c:209 msgid "Basis" msgstr "" #: ../src/FireFly/FireFlyBasis.c:582 ../src/Gamess/GamessBasis.c:594 msgid "Basis set" msgstr "" #: ../src/FireFly/FireFlyBasis.c:594 ../src/Gamess/GamessBasis.c:606 #: ../src/Mopac/MopacMolecule.c:980 ../src/Orca/OrcaBasis.c:1137 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:1921 msgid "Type" msgstr "" #: ../src/FireFly/FireFlyBasis.c:615 ../src/Gamess/GamessBasis.c:627 msgid "#D heavy atom polarization functions" msgstr "" #: ../src/FireFly/FireFlyBasis.c:627 ../src/Gamess/GamessBasis.c:639 msgid "#F heavy atom polarization functions" msgstr "" #: ../src/FireFly/FireFlyBasis.c:639 ../src/Gamess/GamessBasis.c:651 msgid "#light atom polarization functions" msgstr "" #: ../src/FireFly/FireFlyBasis.c:651 ../src/Gamess/GamessBasis.c:663 msgid "Polar" msgstr "" #: ../src/FireFly/FireFlyBasis.c:663 ../src/Gamess/GamessBasis.c:675 msgid "Diffuse L-shell on heavy atoms" msgstr "" #: ../src/FireFly/FireFlyBasis.c:672 ../src/Gamess/GamessBasis.c:684 msgid "Diffuse s-shell on hydrogens " msgstr "" #: ../src/FireFly/FireFlyControl.c:208 ../src/Gamess/GamessControl.c:182 msgid "" "----> Put here the $HESS card.\n" " You can obtain it from your old frequecncies calculation(.pun or .irc " "file)\n" msgstr "" #: ../src/FireFly/FireFlyControl.c:860 ../src/Gamess/GamessControl.c:785 msgid "Control" msgstr "" #: ../src/FireFly/FireFlyControl.c:873 ../src/Gamess/GamessControl.c:798 msgid "Run Type" msgstr "" #: ../src/FireFly/FireFlyControl.c:885 ../src/Gamess/GamessControl.c:810 #: ../src/Orca/OrcaKeywords.c:1117 ../src/QChem/QChemRem.c:646 msgid "SCF Type" msgstr "" #: ../src/FireFly/FireFlyControl.c:898 ../src/Gamess/GamessControl.c:823 #: ../src/QChem/QChemRem.c:659 msgid "Max # SCF iterations" msgstr "" #: ../src/FireFly/FireFlyControl.c:912 ../src/Gamess/GamessControl.c:837 msgid "Correlation Type" msgstr "" #: ../src/FireFly/FireFlyControl.c:925 ../src/Gamess/GamessControl.c:850 #: ../src/QChem/QChemRem.c:686 msgid "Correlation Method" msgstr "" #: ../src/FireFly/FireFlyControl.c:939 ../src/Gamess/GamessControl.c:864 msgid "Localized Type" msgstr "" #: ../src/FireFly/FireFlyControl.c:960 msgid "Exited States" msgstr "" #: ../src/FireFly/FireFlyControl.c:964 msgid "TDHF/TDDFT" msgstr "" #: ../src/FireFly/FireFlyControl.c:981 ../src/Gamess/GamessControl.c:885 msgid "EXE Type" msgstr "" #: ../src/FireFly/FireFlyGuess.c:159 ../src/Gamess/GamessGuess.c:159 #: ../src/Orca/OrcaGuess.c:151 ../src/QChem/QChemGuess.c:181 msgid "Mo Guess" msgstr "" #: ../src/FireFly/FireFlyGuess.c:173 ../src/Gamess/GamessGuess.c:173 #: ../src/Orca/OrcaGuess.c:165 ../src/QChem/QChemGuess.c:195 msgid "Initial Guess" msgstr "" #: ../src/FireFly/FireFlyGuess.c:193 ../src/Gamess/GamessGuess.c:193 msgid "Print the initial Guess" msgstr "" #: ../src/FireFly/FireFlyGuess.c:202 ../src/Gamess/GamessGuess.c:202 msgid "Rotate alpha and beta orbitals" msgstr "" #: ../src/FireFly/FireFlyMolecule.c:1034 ../src/Gamess/GamessMolecule.c:978 #: ../src/MPQC/MPQCMolecule.c:480 msgid "Detected by Gabedit" msgstr "" #: ../src/FireFly/FireFlyMolecule.c:1043 ../src/Gamess/GamessMolecule.c:987 #: ../src/MPQC/MPQCMolecule.c:488 msgid "Tolerance" msgstr "" #: ../src/FireFly/FireFlyMolecule.c:1050 ../src/Gamess/GamessMolecule.c:994 #: ../src/MPQC/MPQCMolecule.c:495 msgid "Fixed Symmetry" msgstr "" #: ../src/FireFly/FireFlyMolecule.c:1070 ../src/Gamess/GamessMolecule.c:1014 msgid "Symmetry not used during calculation" msgstr "" #: ../src/FireFly/FireFlyMolecule.c:1237 ../src/FireFly/FireFlyMolecule.c:1362 #: ../src/Gamess/GamessMolecule.c:1177 ../src/Gamess/GamessMolecule.c:1302 #: ../src/MPQC/MPQCGuessWaveFunction.c:311 ../src/MPQC/MPQCMole.c:401 #: ../src/Mopac/MopacMolecule.c:713 ../src/QChem/QChemMolecule.c:534 #: ../src/QChem/QChemMolecule.c:659 #, c-format msgid "Number of electrons = %d" msgstr "" #: ../src/FireFly/FireFlyMolecule.c:1268 ../src/Gamess/GamessMolecule.c:1208 #: ../src/IsotopeDistribution/IsotopeDistributionCalculatorDlg.c:673 #: ../src/OpenGL/AnimationGeomConv.c:219 ../src/OpenGL/AnimationMD.c:220 #: ../src/OpenGL/Vibration.c:223 ../src/Orca/OrcaMolecule.c:636 #: ../src/QChem/QChemMolecule.c:565 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:1598 msgid "Charge" msgstr "" #: ../src/FireFly/FireFlyMolecule.c:1284 ../src/Gamess/GamessMolecule.c:1224 #: ../src/MPQC/MPQCGuessWaveFunction.c:363 ../src/MPQC/MPQCMole.c:545 #: ../src/Mopac/MopacMolecule.c:635 ../src/OpenGL/AnimationGeomConv.c:235 #: ../src/OpenGL/AnimationMD.c:236 ../src/OpenGL/Vibration.c:239 #: ../src/Orca/OrcaMolecule.c:652 ../src/QChem/QChemMolecule.c:581 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:1615 msgid "Spin multiplicity" msgstr "" #: ../src/FireFly/FireFlyMolecule.c:1329 ../src/Gamess/GamessMolecule.c:1269 #: ../src/Mopac/MopacMolecule.c:680 ../src/Orca/OrcaMolecule.c:697 #: ../src/QChem/QChemMolecule.c:626 msgid "Charge & Multiplicty" msgstr "" #: ../src/FireFly/FireFlySCF.c:89 ../src/Gamess/GamessSCF.c:89 msgid "SCF options" msgstr "" #: ../src/FireFly/FireFlySCF.c:103 ../src/Gamess/GamessSCF.c:103 msgid "Direct SCF" msgstr "" #: ../src/FireFly/FireFlySCF.c:112 ../src/Gamess/GamessSCF.c:112 msgid "Compute only change in Fock matrix" msgstr "" #: ../src/FireFly/FireFlySCF.c:121 ../src/Gamess/GamessSCF.c:121 msgid "Generate UHF Natural Orbitals" msgstr "" #: ../src/Gamess/Gamess.c:173 msgid "Gamess input" msgstr "" #: ../src/Gamess/Gamess.c:176 msgid " Gamess input " msgstr "" #: ../src/Gaussian/GInterfaceBasis.c:108 #: ../src/Gaussian/GInterfaceMethodeBase.c:48 #, c-format msgid "" "%s%sThis basis is present for %s atoms\n" "%s" msgstr "" #: ../src/Gaussian/GInterfaceBasis.c:143 #: ../src/Gaussian/GInterfaceMethodeBase.c:83 msgid " Polarization function :" msgstr "" #: ../src/Gaussian/GInterfaceBasis.c:153 ../src/Gaussian/GInterfaceBasis.c:164 #: ../src/Gaussian/GInterfaceMethodeBase.c:93 #: ../src/Gaussian/GInterfaceMethodeBase.c:105 msgid " Diffuse function :" msgstr "" #: ../src/Gaussian/GInterfaceBasis.c:181 ../src/Gaussian/GInterfaceBasis.c:241 msgid "None(for DUMMY Center)" msgstr "" #: ../src/Gaussian/GInterfaceBasis.c:393 #: ../src/Gaussian/GInterfaceMethodeBase.c:121 #: ../src/Gaussian/GInterfaceMethodeBase.c:179 ../src/Gaussian/Gaussian.c:151 #: ../src/Gaussian/Gaussian.c:157 ../src/Gaussian/Gaussian.c:179 #: ../src/Gaussian/Gaussian.c:185 ../src/Gaussian/Gaussian.c:209 #: ../src/Gaussian/Gaussian.c:215 msgid "None" msgstr "" #: ../src/Gaussian/GInterfaceBasis.c:489 msgid "Please Select your center\n" msgstr "" #: ../src/Gaussian/GInterfaceBasis.c:496 ../src/Gaussian/GInterfaceBasis.c:658 #: ../src/Gaussian/GInterfaceRoute.c:1107 ../src/OpenGL/LabelsGL.c:730 msgid "Title" msgstr "" #: ../src/Gaussian/GInterfaceBasis.c:650 ../src/Geometry/GeomXYZ.c:2813 #: ../src/Geometry/GeomZmatrix.c:3696 msgid "Please Select your center \n" msgstr "" #: ../src/Gaussian/GInterfaceBasis.c:763 ../src/Gaussian/GInterfaceBasis.c:847 msgid "Edit Basis" msgstr "" #: ../src/Gaussian/GInterfaceBasis.c:873 msgid " Define basis by type of center " msgstr "" #: ../src/Gaussian/GInterfaceBasis.c:886 msgid " Define basis center by center (not recommended) " msgstr "" #: ../src/Gaussian/GInterfaceBasis.c:918 msgid "Basis Generated" msgstr "" #: ../src/Gaussian/GInterfaceGeom.c:184 ../src/Gaussian/GInterfaceGeom.c:185 #: ../src/Gaussian/GInterfaceRoute.c:245 msgid "Molecular Specifications" msgstr "" #: ../src/Gaussian/GInterfaceGeom.c:201 msgid "Charge of " msgstr "" #: ../src/Gaussian/GInterfaceGeom.c:202 ../src/Gaussian/GInterfaceGeom.c:204 #: ../src/Gaussian/GInterfaceRoute.c:262 ../src/Gaussian/GInterfaceRoute.c:264 msgid "Real system : " msgstr "" #: ../src/Gaussian/GInterfaceGeom.c:203 ../src/Gaussian/GInterfaceGeom.c:211 #: ../src/Gaussian/GInterfaceRoute.c:263 ../src/Gaussian/GInterfaceRoute.c:271 msgid "2*Spin+1 of " msgstr "" #: ../src/Gaussian/GInterfaceGeom.c:209 ../src/Gaussian/GInterfaceRoute.c:261 #: ../src/Gaussian/GInterfaceRoute.c:269 msgid "Charge of " msgstr "" #: ../src/Gaussian/GInterfaceGeom.c:210 ../src/Gaussian/GInterfaceGeom.c:212 #: ../src/Gaussian/GInterfaceRoute.c:270 ../src/Gaussian/GInterfaceRoute.c:272 msgid "system : " msgstr "" #: ../src/Gaussian/GInterfaceGeom.c:217 ../src/Gaussian/GInterfaceGeom.c:218 #: ../src/Gaussian/GInterfaceRoute.c:277 ../src/Gaussian/GInterfaceRoute.c:278 msgid "Intermediate system : " msgstr "" #: ../src/Gaussian/GInterfaceGeom.c:220 ../src/Gaussian/GInterfaceGeom.c:221 #: ../src/Gaussian/GInterfaceGeom.c:227 ../src/Gaussian/GInterfaceGeom.c:228 #: ../src/Gaussian/GInterfaceRoute.c:280 ../src/Gaussian/GInterfaceRoute.c:281 #: ../src/Gaussian/GInterfaceRoute.c:287 ../src/Gaussian/GInterfaceRoute.c:288 msgid "Model system : " msgstr "" #: ../src/Gaussian/GInterfaceGeom.c:236 ../src/Gaussian/GInterfaceRoute.c:1070 #: ../src/Geometry/InterfaceGeom.c:564 ../src/Molpro/MInterfaceGeom.c:137 msgid "TYPE" msgstr "" #: ../src/Gaussian/GInterfaceGeom.c:240 ../src/Geometry/InterfaceGeom.c:568 #: ../src/Molpro/MInterfaceGeom.c:142 msgid "GEOMETRY" msgstr "" #: ../src/Gaussian/GInterfaceLink.c:116 ../src/Gaussian/GInterfaceLink.c:149 msgid "The checkpoint file" msgstr "" #: ../src/Gaussian/GInterfaceLink.c:132 ../src/Molpro/MInterfaceComm.c:806 #: ../src/Molpro/MInterfaceComm.c:845 ../src/Molpro/MInterfaceComm.c:877 #, c-format msgid "Sorry, the button of \"%s\" is not active" msgstr "" #: ../src/Gaussian/GInterfaceLink.c:140 msgid "Dynamic memory" msgstr "" #: ../src/Gaussian/GInterfaceLink.c:141 msgid "Memory size : " msgstr "" #: ../src/Gaussian/GInterfaceLink.c:143 msgid "Read-Write file" msgstr "" #: ../src/Gaussian/GInterfaceLink.c:144 ../src/Gaussian/GInterfaceLink.c:147 #: ../src/Gaussian/GInterfaceLink.c:150 ../src/Gaussian/GInterfaceLink.c:153 msgid "File Name : " msgstr "" #: ../src/Gaussian/GInterfaceLink.c:146 msgid "2E derivative file" msgstr "" #: ../src/Gaussian/GInterfaceLink.c:152 ../src/Gaussian/GInterfaceLink.c:176 msgid "2E integral file" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:121 #: ../src/Molpro/MInterfaceBasis.c:911 msgid "Please select your basis" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:258 #: ../src/Gaussian/GInterfaceMethodeBase.c:275 #: ../src/Gaussian/GInterfaceMethodeBase.c:307 #: ../src/Gaussian/GInterfaceMethodeBase.c:337 #: ../src/Gaussian/GInterfaceMethodeBase.c:350 #: ../src/Gaussian/GInterfaceMethodeBase.c:369 #: ../src/Gaussian/GInterfaceMethodeBase.c:408 msgid " Select your method :" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:280 #: ../src/Gaussian/GInterfaceMethodeBase.c:312 msgid " correlation :" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:286 msgid " Convergence :" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:292 msgid " Number of cycles :" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:314 #: ../src/Gaussian/GInterfaceMethodeBase.c:416 #: ../src/Gaussian/GInterfaceMethodeBase.c:422 #: ../src/Gaussian/GInterfaceRoute.c:325 ../src/Gaussian/GInterfaceRoute.c:332 #: ../src/Gaussian/GInterfaceRoute.c:379 ../src/Gaussian/GInterfaceRoute.c:386 #: ../src/Gaussian/GInterfaceRoute.c:423 ../src/Gaussian/GInterfaceRoute.c:430 #: ../src/Gaussian/GInterfaceRoute.c:442 ../src/Gaussian/GInterfaceRoute.c:454 #: ../src/Gaussian/GInterfaceRoute.c:466 ../src/Gaussian/GInterfaceRoute.c:520 #: ../src/Gaussian/GInterfaceRoute.c:531 ../src/Gaussian/GInterfaceRoute.c:537 #: ../src/Gaussian/GInterfaceRoute.c:543 ../src/Gaussian/GInterfaceRoute.c:550 #: ../src/Gaussian/GInterfaceRoute.c:625 ../src/Gaussian/GInterfaceRoute.c:637 #: ../src/Gaussian/GInterfaceRoute.c:696 ../src/Gaussian/GInterfaceRoute.c:703 #: ../src/Gaussian/GInterfaceRoute.c:898 ../src/Gaussian/GInterfaceRoute.c:905 #: ../src/Gaussian/GInterfaceRoute.c:912 ../src/Gaussian/GInterfaceRoute.c:920 #: ../src/Gaussian/Gaussian.c:450 ../src/Gaussian/Gaussian.c:461 #: ../src/Gaussian/Gaussian.c:464 ../src/Gaussian/Gaussian.c:486 #: ../src/Gaussian/Gaussian.c:607 ../src/Gaussian/Gaussian.c:611 #: ../src/Gaussian/Gaussian.c:614 ../src/Gaussian/Gaussian.c:617 #: ../src/Molpro/MInterfaceGeom.c:95 ../src/Molpro/Molpro.c:364 #: ../src/Molpro/Molpro.c:460 msgid "default" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:320 msgid " Options :" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:385 msgid " Exchange Functional :" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:395 msgid " Correlation Functionals :" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:414 msgid " Type :" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:420 msgid " NStates :" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:427 msgid " Root :" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:438 msgid " Number of electrons :" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:442 msgid " Number of active orbitals :" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:447 msgid " With MP2 correction ? :" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:452 msgid " With Spin Orbit correction ? :" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:457 msgid " Conical intersections ? :" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:465 msgid " Number of states :" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:481 #: ../src/Gaussian/GInterfaceMethodeBase.c:523 #: ../src/Geometry/BuildPolyPeptide.c:657 #: ../src/Geometry/BuildPolyPeptide.c:727 ../src/MPQC/MPQCFunctionals.c:43 #: ../src/Molcas/MolcasGateWay.c:1390 ../src/Molcas/MolcasGateWay.c:1466 #: ../src/OpenGL/AtomicOrbitals.c:247 ../src/OpenGL/AtomicOrbitals.c:582 #: ../src/OpenGL/GeomOrbXYZ.c:119 ../src/OpenGL/GeomOrbXYZ.c:120 #: ../src/OpenGL/GeomOrbXYZ.c:121 ../src/OpenGL/GeomOrbXYZ.c:280 #: ../src/OpenGL/GeomOrbXYZ.c:301 ../src/OpenGL/GeomOrbXYZ.c:395 #: ../src/OpenGL/GeomOrbXYZ.c:788 ../src/OpenGL/GeomOrbXYZ.c:976 #: ../src/OpenGL/GeomOrbXYZ.c:1211 ../src/OpenGL/GeomOrbXYZ.c:1305 #: ../src/OpenGL/GeomOrbXYZ.c:1306 ../src/OpenGL/GeomOrbXYZ.c:1307 #: ../src/OpenGL/GeomOrbXYZ.c:1425 ../src/OpenGL/GeomOrbXYZ.c:1426 #: ../src/OpenGL/GeomOrbXYZ.c:1427 ../src/OpenGL/GeomOrbXYZ.c:1766 #: ../src/OpenGL/GeomOrbXYZ.c:1767 ../src/OpenGL/GeomOrbXYZ.c:1768 #: ../src/OpenGL/GeomOrbXYZ.c:2100 ../src/OpenGL/GeomOrbXYZ.c:2101 #: ../src/OpenGL/GeomOrbXYZ.c:2102 ../src/OpenGL/GeomOrbXYZ.c:2229 #: ../src/OpenGL/GeomOrbXYZ.c:2230 ../src/OpenGL/GeomOrbXYZ.c:2231 #: ../src/OpenGL/GeomOrbXYZ.c:2357 ../src/OpenGL/GeomOrbXYZ.c:2358 #: ../src/OpenGL/GeomOrbXYZ.c:2359 ../src/OpenGL/GeomOrbXYZ.c:2728 #: ../src/OpenGL/GeomOrbXYZ.c:2729 ../src/OpenGL/GeomOrbXYZ.c:2730 #: ../src/OpenGL/GeomOrbXYZ.c:2876 ../src/OpenGL/GeomOrbXYZ.c:2877 #: ../src/OpenGL/GeomOrbXYZ.c:2878 ../src/OpenGL/GeomOrbXYZ.c:3067 #: ../src/OpenGL/GeomOrbXYZ.c:3068 ../src/OpenGL/GeomOrbXYZ.c:3069 #: ../src/OpenGL/GeomOrbXYZ.c:3242 ../src/OpenGL/GeomOrbXYZ.c:3243 #: ../src/OpenGL/GeomOrbXYZ.c:3244 ../src/OpenGL/Grid.c:650 #: ../src/OpenGL/Grid.c:672 ../src/OpenGL/Grid.c:693 ../src/OpenGL/Grid.c:709 #: ../src/OpenGL/Grid.c:725 ../src/OpenGL/Grid.c:747 #: ../src/OpenGL/GridAdfDensity.c:251 ../src/OpenGL/GridAdfDensity.c:745 #: ../src/OpenGL/GridAdfOrbitals.c:259 ../src/OpenGL/GridAdfOrbitals.c:909 #: ../src/OpenGL/GridCube.c:1136 ../src/OpenGL/GridCube.c:1328 #: ../src/OpenGL/GridCube.c:1329 ../src/OpenGL/GridCube.c:1337 #: ../src/OpenGL/GridCube.c:1338 ../src/OpenGL/GridCube.c:1346 #: ../src/OpenGL/GridCube.c:1347 ../src/OpenGL/GridCube.c:1355 #: ../src/OpenGL/GridCube.c:1356 ../src/OpenGL/GridCube.c:1370 #: ../src/OpenGL/GridCube.c:1371 ../src/OpenGL/GridCube.c:1378 #: ../src/OpenGL/GridCube.c:1379 ../src/OpenGL/GridCube.c:1585 #: ../src/OpenGL/GridCube.c:1586 ../src/OpenGL/GridCube.c:1594 #: ../src/OpenGL/GridCube.c:1595 ../src/OpenGL/GridCube.c:1603 #: ../src/OpenGL/GridCube.c:1604 ../src/OpenGL/GridCube.c:1612 #: ../src/OpenGL/GridCube.c:1613 ../src/OpenGL/GridCube.c:1627 #: ../src/OpenGL/GridCube.c:1628 ../src/OpenGL/GridCube.c:1635 #: ../src/OpenGL/GridCube.c:1636 ../src/OpenGL/GridMolcas.c:306 #: ../src/OpenGL/GridMolcas.c:367 ../src/OpenGL/GridMolcas.c:918 #: ../src/OpenGL/GridMolcas.c:997 ../src/OpenGL/GridQChem.c:431 #: ../src/OpenGL/GridQChem.c:509 ../src/OpenGL/Orbitals.c:212 #: ../src/OpenGL/Orbitals.c:1923 ../src/OpenGL/Orbitals.c:1924 #: ../src/OpenGL/Orbitals.c:1925 ../src/OpenGL/Orbitals.c:1933 #: ../src/OpenGL/Orbitals.c:1934 ../src/OpenGL/Orbitals.c:1935 #: ../src/OpenGL/Orbitals.c:1979 ../src/OpenGL/Orbitals.c:1980 #: ../src/OpenGL/Orbitals.c:1981 ../src/OpenGL/Orbitals.c:2151 #: ../src/OpenGL/Orbitals.c:2152 ../src/OpenGL/Orbitals.c:2153 #: ../src/OpenGL/Orbitals.c:2161 ../src/OpenGL/Orbitals.c:2162 #: ../src/OpenGL/Orbitals.c:2163 ../src/OpenGL/Orbitals.c:2179 #: ../src/OpenGL/Orbitals.c:2180 ../src/OpenGL/Orbitals.c:2181 #: ../src/OpenGL/Orbitals.c:2213 ../src/OpenGL/Orbitals.c:2214 #: ../src/OpenGL/Orbitals.c:2215 ../src/OpenGL/Orbitals.c:2221 #: ../src/OpenGL/Orbitals.c:2222 ../src/OpenGL/Orbitals.c:2223 #: ../src/OpenGL/Orbitals.c:2278 ../src/OpenGL/Orbitals.c:2279 #: ../src/OpenGL/Orbitals.c:2280 ../src/OpenGL/Orbitals.c:2313 #: ../src/OpenGL/Orbitals.c:2314 ../src/OpenGL/Orbitals.c:2315 #: ../src/OpenGL/Orbitals.c:2322 ../src/OpenGL/Orbitals.c:2323 #: ../src/OpenGL/Orbitals.c:2324 ../src/OpenGL/Orbitals.c:2399 #: ../src/OpenGL/Orbitals.c:2400 ../src/OpenGL/Orbitals.c:2401 #: ../src/OpenGL/OrbitalsDalton.c:136 ../src/OpenGL/OrbitalsDalton.c:137 #: ../src/OpenGL/OrbitalsDalton.c:138 ../src/OpenGL/OrbitalsDalton.c:565 #: ../src/OpenGL/OrbitalsGamess.c:165 ../src/OpenGL/OrbitalsGamess.c:166 #: ../src/OpenGL/OrbitalsGamess.c:167 ../src/OpenGL/OrbitalsGamess.c:1160 #: ../src/OpenGL/OrbitalsGamess.c:1161 ../src/OpenGL/OrbitalsGamess.c:1162 #: ../src/OpenGL/OrbitalsGamess.c:1175 ../src/OpenGL/OrbitalsGamess.c:1176 #: ../src/OpenGL/OrbitalsGamess.c:1177 ../src/OpenGL/OrbitalsGamess.c:1188 #: ../src/OpenGL/OrbitalsGamess.c:1189 ../src/OpenGL/OrbitalsGamess.c:1190 #: ../src/OpenGL/OrbitalsGamess.c:1294 ../src/OpenGL/OrbitalsGamess.c:1295 #: ../src/OpenGL/OrbitalsGamess.c:1296 ../src/OpenGL/OrbitalsMolpro.c:1606 #: ../src/OpenGL/OrbitalsMolpro.c:1607 ../src/OpenGL/OrbitalsMolpro.c:1608 #: ../src/OpenGL/OrbitalsMolpro.c:1768 ../src/OpenGL/OrbitalsMopac.c:1211 #: ../src/OpenGL/OrbitalsMopac.c:1212 ../src/OpenGL/OrbitalsMopac.c:1213 #: ../src/OpenGL/OrbitalsMopac.c:1230 ../src/OpenGL/OrbitalsMopac.c:1231 #: ../src/OpenGL/OrbitalsMopac.c:1232 ../src/OpenGL/OrbitalsMopac.c:1301 #: ../src/OpenGL/OrbitalsMopac.c:1302 ../src/OpenGL/OrbitalsMopac.c:1303 #: ../src/OpenGL/OrbitalsOrca.c:705 ../src/OpenGL/OrbitalsOrca.c:706 #: ../src/OpenGL/OrbitalsOrca.c:707 ../src/OpenGL/OrbitalsOrca.c:714 #: ../src/OpenGL/OrbitalsOrca.c:715 ../src/OpenGL/OrbitalsOrca.c:716 #: ../src/OpenGL/OrbitalsOrca.c:759 ../src/OpenGL/OrbitalsOrca.c:760 #: ../src/OpenGL/OrbitalsOrca.c:761 ../src/OpenGL/OrbitalsQChem.c:156 #: ../src/OpenGL/OrbitalsQChem.c:157 ../src/OpenGL/OrbitalsQChem.c:158 #: ../src/OpenGL/OrbitalsQChem.c:1187 ../src/OpenGL/OrbitalsQChem.c:1188 #: ../src/OpenGL/OrbitalsQChem.c:1189 ../src/OpenGL/OrbitalsQChem.c:1196 #: ../src/OpenGL/OrbitalsQChem.c:1197 ../src/OpenGL/OrbitalsQChem.c:1198 #: ../src/OpenGL/OrbitalsQChem.c:1210 ../src/OpenGL/OrbitalsQChem.c:1211 #: ../src/OpenGL/OrbitalsQChem.c:1212 ../src/OpenGL/OrbitalsQChem.c:1223 #: ../src/OpenGL/OrbitalsQChem.c:1224 ../src/OpenGL/OrbitalsQChem.c:1225 #: ../src/OpenGL/OrbitalsQChem.c:1337 ../src/OpenGL/OrbitalsQChem.c:1338 #: ../src/OpenGL/OrbitalsQChem.c:1339 ../src/OpenGL/Vibration.c:1042 #: ../src/OpenGL/Vibration.c:1043 ../src/OpenGL/Vibration.c:1044 #: ../src/OpenGL/Vibration.c:1826 ../src/OpenGL/Vibration.c:1827 #: ../src/OpenGL/Vibration.c:1828 ../src/OpenGL/Vibration.c:2105 #: ../src/OpenGL/Vibration.c:2106 ../src/OpenGL/Vibration.c:2107 #: ../src/OpenGL/Vibration.c:2538 ../src/OpenGL/Vibration.c:2539 #: ../src/OpenGL/Vibration.c:2540 ../src/OpenGL/Vibration.c:3106 #: ../src/OpenGL/Vibration.c:3107 ../src/OpenGL/Vibration.c:3108 msgid "Nothing" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:492 #: ../src/Gaussian/GInterfaceMethodeBase.c:526 ../src/Gaussian/Gaussian.c:354 msgid "Hartree Fock" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:493 #: ../src/Gaussian/GInterfaceMethodeBase.c:530 ../src/Gaussian/Gaussian.c:491 msgid "CI Methods" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:494 #: ../src/Gaussian/GInterfaceMethodeBase.c:532 ../src/Gaussian/Gaussian.c:469 msgid "CASSCF Method" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:495 #: ../src/Gaussian/GInterfaceMethodeBase.c:528 ../src/Gaussian/Gaussian.c:445 msgid "MP Methods" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:496 #: ../src/Gaussian/GInterfaceMethodeBase.c:540 ../src/Gaussian/Gaussian.c:233 #: ../src/Gaussian/Gaussian.c:239 ../src/Gaussian/Gaussian.c:241 #: ../src/Gaussian/Gaussian.c:243 ../src/Gaussian/Gaussian.c:245 #: ../src/Gaussian/Gaussian.c:247 ../src/Gaussian/Gaussian.c:252 #: ../src/Gaussian/Gaussian.c:254 ../src/Gaussian/Gaussian.c:256 #: ../src/Gaussian/Gaussian.c:258 ../src/Gaussian/Gaussian.c:260 #: ../src/Gaussian/Gaussian.c:262 ../src/Gaussian/Gaussian.c:558 #: ../src/Gaussian/Gaussian.c:569 ../src/Gaussian/Gaussian.c:581 msgid "Semi-Empirical Methods" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:497 #: ../src/Gaussian/GInterfaceMethodeBase.c:542 ../src/Gaussian/Gaussian.c:233 #: ../src/Gaussian/Gaussian.c:239 ../src/Gaussian/Gaussian.c:241 #: ../src/Gaussian/Gaussian.c:243 ../src/Gaussian/Gaussian.c:245 #: ../src/Gaussian/Gaussian.c:247 ../src/Gaussian/Gaussian.c:252 #: ../src/Gaussian/Gaussian.c:254 ../src/Gaussian/Gaussian.c:256 #: ../src/Gaussian/Gaussian.c:258 ../src/Gaussian/Gaussian.c:260 #: ../src/Gaussian/Gaussian.c:262 ../src/Gaussian/Gaussian.c:558 #: ../src/Gaussian/Gaussian.c:569 ../src/Gaussian/Gaussian.c:581 msgid "Molecular Mechanics Methods" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:498 #: ../src/Gaussian/GInterfaceMethodeBase.c:536 ../src/Gaussian/Gaussian.c:355 msgid "Hybrid Functional Methods" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:499 #: ../src/Gaussian/GInterfaceMethodeBase.c:534 ../src/Gaussian/Gaussian.c:353 #: ../src/Gaussian/Gaussian.c:439 msgid "Density Functional Methods" msgstr "" #: ../src/Gaussian/GInterfaceMethodeBase.c:500 #: ../src/Gaussian/GInterfaceMethodeBase.c:538 ../src/Gaussian/Gaussian.c:455 msgid "Excited States" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:363 msgid "Options for dipole polarizabilities" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:368 ../src/Gaussian/GInterfaceRoute.c:507 msgid " Dipole polar. " msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:372 msgid "Dipole polarizabilities" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:384 ../src/Gaussian/GInterfaceRoute.c:701 msgid "Type of second derivatives : " msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:391 msgid "Step size in the electric field :" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:502 msgid "Controls of the SCF procedure" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:511 msgid "SCF procedure" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:529 msgid "Algorithm : " msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:535 msgid "Shift orbital energies : " msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:541 msgid "Maximum number of SCF cycles : " msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:548 msgid "Maximum rotation gradient :" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:556 msgid "Convergence criterion :" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:668 ../src/Gaussian/GInterfaceRoute.c:731 #: ../src/Gaussian/GInterfaceRoute.c:790 msgid "Compute frequencies" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:674 msgid " Constants force " msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:678 msgid "Force constants" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:689 msgid "Compute the vibrational circular dichroism ? : " msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:694 msgid "Compute Raman intensities ? : " msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:708 msgid "Step-size for numerical differentiation :" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:733 ../src/Gaussian/GInterfaceRoute.c:816 msgid " Controls the SCF procedure" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:735 ../src/Gaussian/GInterfaceRoute.c:766 msgid "Compute the dipole polarizabilities" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:772 ../src/Gaussian/GInterfaceRoute.c:796 #: ../src/Gaussian/GInterfaceRoute.c:1093 #: ../src/Gaussian/GInterfaceRoute.c:1094 ../src/NetWork/Process.c:648 msgid "Options" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:825 msgid "Go" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:838 msgid "Extra print keys for gabedit" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:844 msgid "Full population analysis" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:851 msgid "Archive" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:856 msgid "Ignore Symmetry" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:862 msgid "Addtional print" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:868 ../src/OpenGL/PreferencesOrb.c:105 msgid "Density" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:874 msgid "Mix HOMO & LUMO in initial guess" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:879 msgid "Read initial Guess from checkpoint" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:884 msgid "Read geometry from checkpoint" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:903 msgid " Coordinate system options :" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:910 msgid " Convergence criteries :" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:918 msgid " MaxCycle :" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:925 msgid " StepSize :" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:932 msgid " Saddle point of order :" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:937 msgid " optimization a transition :" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:962 ../src/Gaussian/GInterfaceRoute.c:985 msgid "Geometry Optimization" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:983 ../src/Gaussian/Gaussian.c:598 #: ../src/Gaussian/Gaussian.c:775 msgid "Single Point" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:1050 #: ../src/Gaussian/GInterfaceRoute.c:1051 msgid "Main" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:1065 msgid "METHOD" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:1073 msgid "GENERAL" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:1104 msgid "LINK OPTIONS" msgstr "" #: ../src/Gaussian/GInterfaceRoute.c:1109 msgid "Input file generated by gabedit..." msgstr "" #: ../src/Gaussian/Gaussian.c:747 ../src/Gaussian/Gaussian.c:913 msgid "Variables :\n" msgstr "" #: ../src/Gaussian/Gaussian.c:1091 ../src/Gaussian/Gaussian.c:1185 msgid "Gaussian input" msgstr "" #: ../src/Gaussian/Gaussian.c:1093 ../src/Gaussian/Gaussian.c:1188 msgid " Gauss input " msgstr "" #: ../src/Geometry/BuildLinear.c:130 ../src/Geometry/BuildRing.c:145 #: ../src/Geometry/BuildRoZPhi.c:201 ../src/Geometry/GeomXYZ.c:2337 #: ../src/Geometry/MenuToolBarGeom.c:115 ../src/MPQC/MPQCBasisLibrary.c:690 #: ../src/Molpro/MInterfaceBasis.c:1027 ../src/Molpro/MolproBasisLibrary.c:736 #: ../src/Utils/AtomsProp.c:1442 ../src/Utils/HydrogenBond.c:237 msgid "Select your atom" msgstr "" #: ../src/Geometry/BuildLinear.c:180 msgid "Build Linear molecule" msgstr "" #: ../src/Geometry/BuildLinear.c:185 ../src/Geometry/BuildNanoTube.c:198 msgid " Build lin. mol. " msgstr "" #: ../src/Geometry/BuildLinear.c:206 ../src/Geometry/BuildRing.c:217 msgid "Atom : " msgstr "" #: ../src/Geometry/BuildLinear.c:210 ../src/Geometry/BuildRing.c:221 #: ../src/Geometry/BuildRoZPhi.c:315 ../src/Geometry/GeomXYZ.c:2667 #: ../src/Geometry/GeomXYZ.c:2844 ../src/MPQC/MPQCBasisLibrary.c:772 #: ../src/Molpro/MolproBasisLibrary.c:818 msgid " Set " msgstr "" #: ../src/Geometry/BuildLinear.c:219 ../src/Geometry/BuildRing.c:230 msgid "Number of atoms : " msgstr "" #: ../src/Geometry/BuildLinear.c:228 ../src/Geometry/BuildRing.c:239 msgid "Distance between atoms(Ang) : " msgstr "" #: ../src/Geometry/BuildNanoTube.c:193 msgid "Build Natotube molecule" msgstr "" #: ../src/Geometry/BuildNanoTube.c:215 msgid "Chirality" msgstr "" #: ../src/Geometry/BuildNanoTube.c:238 msgid " see PRB,47,5485" msgstr "" #: ../src/Geometry/BuildNanoTube.c:242 msgid "C-C bond length" msgstr "" #: ../src/Geometry/BuildNanoTube.c:252 ../src/Utils/AtomsProp.c:1240 #: ../src/Utils/AtomsProp.c:1251 ../src/Utils/AtomsProp.c:1262 msgid "Angstroms" msgstr "" #: ../src/Geometry/BuildNanoTube.c:256 msgid "Number of translational unit cells" msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:951 msgid "" "There are no residues to cap!\n" "You must first create a nucleic acid mono-/polymer." msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:961 msgid "" "There are not enough residues to cap!\n" "There is only one residue in the molecule,yet \"Double Stranded\" has been " "selected." msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:1028 msgid "This residue is already capped(O3T)!" msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:1039 msgid "Unable to cap(first) residue." msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:1104 msgid "This residue is already capped(HT3)!" msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:1114 msgid "Unable to cap residue." msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:1414 #, c-format msgid "" "The value for '%s' must be a number.\n" "%s" msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:1475 msgid "" "The 3' end of the polynucleotide is already capped. You cannot add more " "residues once you have capped the end.\n" "Suggestion: Don't cap the ends of the polynucleotide until you have finished " "building the entire sequence." msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:1484 msgid "" "The 5' end of the polynucleotide is already capped. You cannot add more " "residues once you have capped the end.\n" "Suggestion: Don't cap the ends of the polynucleotide until you have finished " "building the entire sequence." msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:1525 msgid "" "Your choices for tip and roll do not correlate. Roll should equal the " "difference of tip and the previous tip.\n" "This check is performed only when tip and roll are both set to nonzero " "values. Suggestion: make either roll = 0 and control the rotation about " "the y-axis using only tip or make tip = 0 and control the rotation with roll." msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:1537 msgid "" "Your choices for tilt and inclination do not correlate. Tilt should equal " "the difference of inclination and the previous inclination.\n" "This check is performed only when tilt and inclination are both set to " "nonzero values. Suggestion: make either tilt = 0 and control the rotation " "about the x-axis using only inclination or make inclination = 0 and control " "the rotation with tilt." msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:1549 msgid "" "Your choices for dy and slide do not correlate. Slide should equal the " "difference of dy and the previous dy.\n" "This check is performed only when dy and slide are both set to nonzero " "values. Suggestion: make either dy = 0 and control the translation along " "the y-axis using only slide or make slide = 0 and control the translation " "with dy." msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:1560 msgid "" "Your choices for dx and shift do not correlate. Shift should equal the " "difference of dx and the previous dx.\n" "This check is performed only when dx and shift are both set to nonzero " "values. Suggestion: make either dx = 0 and control the translation along " "the x-axis using only shift or make shift = 0 and control the translation " "with dx." msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:2094 msgid "DNA " msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:2106 msgid "Build 3' to 5'" msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:2118 msgid "Single Stranded" msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:2124 msgid "Double Stranded" msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:2133 msgid "Form" msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:2146 msgid "Sugar Pucker" msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:2158 msgid "Add Counter Ion" msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:2262 msgid "Torsion Angles" msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:2314 msgid "Translational Helical Parameters" msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:2349 msgid "Rotational Helical Parameters" msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:2434 msgid "Build PolyNucleicAcid molecule" msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:2438 msgid " Build PolyNuc" msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:2444 msgid "Build" msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:2446 msgid "Parameters" msgstr "" #: ../src/Geometry/BuildPolyNucleicAcid.c:2470 #: ../src/Geometry/BuildPolyPeptide.c:1560 #: ../src/Geometry/BuildPolySaccharide.c:926 ../src/Geometry/BuildRoZPhi.c:343 #: ../src/Geometry/InterfaceGeom.c:572 #: ../src/IsotopeDistribution/IsotopeDistributionCalculatorDlg.c:656 #: ../src/MPQC/MPQCFunctionals.c:583 ../src/OpenGL/Orbitals.c:1159 #: ../src/OpenGL/PreferencesOrb.c:516 ../src/OpenGL/PrincipalAxisGL.c:588 #: ../src/OpenGL/UtilsOrb.c:2574 ../src/Utils/AtomsProp.c:1467 #: ../src/Utils/ConvUtils.c:944 ../src/Utils/UtilsInterface.c:566 #: ../src/Utils/UtilsInterface.c:567 ../src/Utils/UtilsInterface.c:2905 msgid "Close" msgstr "" #: ../src/Geometry/BuildPolyPeptide.c:1517 msgid "Build PolyPeptide molecule" msgstr "" #: ../src/Geometry/BuildPolyPeptide.c:1522 msgid " Build PolyPep. mol. " msgstr "" #: ../src/Geometry/BuildPolyPeptide.c:1554 msgid "Add C-capping" msgstr "" #: ../src/Geometry/BuildPolySaccharide.c:592 msgid "" "The O1-C1 bond acts as a cap to the chain.\n" "Suggestion: Use O1-C1 only for disaccharides or to cap a chain." msgstr "" #: ../src/Geometry/BuildPolySaccharide.c:716 msgid "Connectivity" msgstr "" #: ../src/Geometry/BuildPolySaccharide.c:764 msgid "Isomer" msgstr "" #: ../src/Geometry/BuildPolySaccharide.c:798 msgid "Conformation" msgstr "" #: ../src/Geometry/BuildPolySaccharide.c:888 msgid "Build PolySaccharide molecule" msgstr "" #: ../src/Geometry/BuildPolySaccharide.c:894 msgid " Build PolySacc. mol. " msgstr "" #: ../src/Geometry/BuildRing.c:195 msgid "Build Ring molecule" msgstr "" #: ../src/Geometry/BuildRing.c:200 msgid " Build Ring mol. " msgstr "" #: ../src/Geometry/BuildRoZPhi.c:270 msgid "Build a molecule with an axis symmetry" msgstr "" #: ../src/Geometry/BuildRoZPhi.c:276 msgid " Build sym. mol. " msgstr "" #: ../src/Geometry/BuildRoZPhi.c:331 msgid " Insert " msgstr "" #: ../src/Geometry/DrawGeom.c:753 msgid "" "The type of One (or several) of atoms is not a Amber type.\n" "You can set the types of atoms by : \n" " \"Set/Atom Type&Charge using PDB Template\" \n" " \"Or\" \n" " \"Set/Atom Types using connections types\" \n" msgstr "" #: ../src/Geometry/DrawGeom.c:759 ../src/Geometry/DrawGeom.c:769 #: ../src/Geometry/DrawGeom.c:4969 ../src/Geometry/DrawGeom.c:5089 #: ../src/Geometry/DrawGeom.c:9154 ../src/Geometry/DrawGeom.c:9547 #: ../src/Geometry/GeomConversion.c:900 ../src/Geometry/GeomConversion.c:1653 #: ../src/Geometry/GeomXYZ.c:2813 ../src/Geometry/GeomXYZ.c:11610 #: ../src/Geometry/GeomXYZ.c:11612 ../src/Geometry/GeomZmatrix.c:2650 #: ../src/Geometry/GeomZmatrix.c:2703 ../src/Geometry/GeomZmatrix.c:2805 #: ../src/Geometry/GeomZmatrix.c:2892 ../src/Geometry/GeomZmatrix.c:3120 #: ../src/Geometry/GeomZmatrix.c:3132 ../src/Geometry/GeomZmatrix.c:3152 #: ../src/Geometry/GeomZmatrix.c:3164 ../src/Geometry/GeomZmatrix.c:3184 #: ../src/Geometry/GeomZmatrix.c:3197 ../src/Geometry/GeomZmatrix.c:3324 #: ../src/Geometry/GeomZmatrix.c:3334 ../src/Geometry/GeomZmatrix.c:3359 #: ../src/Geometry/GeomZmatrix.c:3369 ../src/Geometry/GeomZmatrix.c:3394 #: ../src/Geometry/GeomZmatrix.c:3404 ../src/Geometry/GeomZmatrix.c:3436 #: ../src/Geometry/GeomZmatrix.c:3694 ../src/Geometry/GeomZmatrix.c:3696 #: ../src/Geometry/GeomZmatrix.c:5916 ../src/Geometry/GeomZmatrix.c:6410 #: ../src/Geometry/GeomZmatrix.c:6569 ../src/Geometry/GeomZmatrix.c:6632 #: ../src/Geometry/GeomZmatrix.c:6638 ../src/Geometry/GeomZmatrix.c:6646 #: ../src/Geometry/GeomZmatrix.c:6673 ../src/Geometry/GeomZmatrix.c:6681 #: ../src/Geometry/GeomZmatrix.c:6743 ../src/Geometry/GeomZmatrix.c:6745 #: ../src/Geometry/GeomZmatrix.c:6810 ../src/Geometry/GeomZmatrix.c:6818 #: ../src/Geometry/GeomZmatrix.c:6835 ../src/Geometry/InterfaceGeom.c:61 #: ../src/Geometry/InterfaceGeom.c:75 ../src/Geometry/InterfaceGeom.c:89 #: ../src/Geometry/InterfaceGeom.c:104 ../src/Geometry/InterfaceGeom.c:118 #: ../src/Molcas/MolcasGateWay.c:1205 ../src/Molpro/MInterfaceBasis.c:934 #: ../src/Molpro/MInterfaceBasis.c:939 ../src/Molpro/MInterfaceComm.c:807 #: ../src/Molpro/MInterfaceComm.c:846 ../src/Molpro/MInterfaceComm.c:878 #: ../src/OpenGL/GridCube.c:392 ../src/OpenGL/GridCube.c:652 #: ../src/OpenGL/GridCube.c:1648 ../src/OpenGL/GridCube.c:1684 #: ../src/Spectrum/NMRSpectrum.c:195 ../src/Spectrum/NMRSpectrum.c:876 #: ../src/Spectrum/NMRSpectrum.c:916 ../src/Spectrum/NMRSpectrum.c:1101 #: ../src/Spectrum/NMRSpectrum.c:1130 ../src/Utils/AtomsProp.c:900 #: ../src/Utils/AtomsProp.c:909 ../src/Utils/AtomsProp.c:918 #: ../src/Utils/AtomsProp.c:927 ../src/Utils/AtomsProp.c:936 #: ../src/Utils/AtomsProp.c:945 ../src/Utils/AtomsProp.c:986 #: ../src/Utils/HydrogenBond.c:184 ../src/Utils/UtilsInterface.c:471 #: ../src/Utils/UtilsInterface.c:753 ../src/Utils/UtilsInterface.c:1171 #: ../src/Utils/UtilsInterface.c:1190 ../src/Utils/UtilsInterface.c:1203 #: ../src/Utils/UtilsInterface.c:1216 ../src/Utils/UtilsInterface.c:1229 #: ../src/Utils/UtilsInterface.c:1812 ../src/Utils/UtilsInterface.c:2267 msgid "Warning" msgstr "" #: ../src/Geometry/DrawGeom.c:765 msgid "" "The types of the atoms are identical to the symbols of these atoms.\n" "You can set the types of atoms by \n" "\"Set/Atom Types using connections types\" \n" msgstr "" #: ../src/Geometry/DrawGeom.c:2092 ../src/Geometry/DrawGeom.c:2135 msgid "Sorry, the number of atoms is not positive" msgstr "" #: ../src/Geometry/DrawGeom.c:3025 msgid "Select by Residue name" msgstr "" #: ../src/Geometry/DrawGeom.c:3029 ../src/Geometry/DrawGeom.c:3119 #: ../src/Geometry/DrawGeom.c:3249 ../src/Geometry/DrawGeom.c:3377 #: ../src/Geometry/DrawGeom.c:3505 msgid " Sel. Res. " msgstr "" #: ../src/Geometry/DrawGeom.c:3044 msgid " Residue Name : " msgstr "" #: ../src/Geometry/DrawGeom.c:3115 msgid "Select by Residue number" msgstr "" #: ../src/Geometry/DrawGeom.c:3136 msgid " Residue Number : " msgstr "" #: ../src/Geometry/DrawGeom.c:3245 msgid "Select by Type" msgstr "" #: ../src/Geometry/DrawGeom.c:3264 ../src/Geometry/DrawGeom.c:3392 #: ../src/Geometry/DrawGeom.c:3653 ../src/Geometry/DrawGeom.c:3752 msgid " Type Name : " msgstr "" #: ../src/Geometry/DrawGeom.c:3373 msgid "Select by PDB Type" msgstr "" #: ../src/Geometry/DrawGeom.c:3501 msgid "Select by Symbol" msgstr "" #: ../src/Geometry/DrawGeom.c:3520 msgid " Symbol : " msgstr "" #: ../src/Geometry/DrawGeom.c:3634 msgid "Set MM Type of selected atoms" msgstr "" #: ../src/Geometry/DrawGeom.c:3638 ../src/Geometry/DrawGeom.c:3737 msgid " Set Sel. Type." msgstr "" #: ../src/Geometry/DrawGeom.c:3733 msgid "Set PDB Type of selected atoms" msgstr "" #: ../src/Geometry/DrawGeom.c:3869 msgid "Set Charge of selected atoms" msgstr "" #: ../src/Geometry/DrawGeom.c:3873 msgid " Set Sel. Charge." msgstr "" #: ../src/Geometry/DrawGeom.c:3888 msgid " Charge : " msgstr "" #: ../src/Geometry/DrawGeom.c:3950 msgid "Scale charges of selected atoms" msgstr "" #: ../src/Geometry/DrawGeom.c:3954 msgid " Scal. Char. " msgstr "" #: ../src/Geometry/DrawGeom.c:3967 msgid " Factor : " msgstr "" #: ../src/Geometry/DrawGeom.c:4969 msgid "No molecule to delete\n" msgstr "" #: ../src/Geometry/DrawGeom.c:5012 ../src/Geometry/MenuToolBarGeom.c:693 msgid "Save image in jpeg file format" msgstr "" #: ../src/Geometry/DrawGeom.c:5015 ../src/Geometry/MenuToolBarGeom.c:698 #: ../src/OpenGL/MenuToolBarGL.c:669 msgid "Save image in ppm file format" msgstr "" #: ../src/Geometry/DrawGeom.c:5018 ../src/Geometry/MenuToolBarGeom.c:703 #: ../src/OpenGL/MenuToolBarGL.c:674 msgid "Save image in bmp file format" msgstr "" #: ../src/Geometry/DrawGeom.c:5021 ../src/Geometry/MenuToolBarGeom.c:718 #: ../src/OpenGL/MenuToolBarGL.c:694 msgid "Save image in ps file format" msgstr "" #: ../src/Geometry/DrawGeom.c:5050 ../src/Geometry/MenuToolBarGeom.c:414 msgid "Load Geom. Conv. From Dalton Output file" msgstr "" #: ../src/Geometry/DrawGeom.c:5054 ../src/Geometry/MenuToolBarGeom.c:416 msgid "Load Geom. Conv. From Gamess Output file" msgstr "" #: ../src/Geometry/DrawGeom.c:5058 ../src/Geometry/MenuToolBarGeom.c:424 msgid "Load Geom. Conv. From Gaussian Output file" msgstr "" #: ../src/Geometry/DrawGeom.c:5062 ../src/Geometry/MenuToolBarGeom.c:426 msgid "Load Geom. Conv. From Molpro log file" msgstr "" #: ../src/Geometry/DrawGeom.c:5066 ../src/Geometry/MenuToolBarGeom.c:441 msgid "Load Geom. Conv. From Molden file" msgstr "" #: ../src/Geometry/DrawGeom.c:5070 ../src/Geometry/MenuToolBarGeom.c:438 msgid "Load Geom. Conv. From Gabedit file" msgstr "" #: ../src/Geometry/DrawGeom.c:5074 ../src/Geometry/MenuToolBarGeom.c:430 msgid "Load Geom. Conv. From MPQC output file" msgstr "" #: ../src/Geometry/DrawGeom.c:5078 ../src/Geometry/MenuToolBarGeom.c:443 msgid "Load Geom. Conv. From XYZ" msgstr "" #: ../src/Geometry/DrawGeom.c:5089 msgid "Sorry,No molecule to save\n" msgstr "" #: ../src/Geometry/DrawGeom.c:5095 ../src/Geometry/MenuToolBarGeom.c:567 msgid "Save geometry in xyz file" msgstr "" #: ../src/Geometry/DrawGeom.c:5099 ../src/Geometry/MenuToolBarGeom.c:577 msgid "Save geometry in mol2 file" msgstr "" #: ../src/Geometry/DrawGeom.c:5103 ../src/Geometry/MenuToolBarGeom.c:582 msgid "Save geometry in tinker file" msgstr "" #: ../src/Geometry/DrawGeom.c:5107 ../src/Geometry/MenuToolBarGeom.c:587 msgid "Save geometry in pdb file" msgstr "" #: ../src/Geometry/DrawGeom.c:5111 ../src/Geometry/MenuToolBarGeom.c:592 msgid "Save geometry in hyperchem file" msgstr "" #: ../src/Geometry/DrawGeom.c:5115 msgid "Save geometry in gabedit file" msgstr "" #: ../src/Geometry/DrawGeom.c:5121 ../src/Geometry/DrawGeom.c:5132 #: ../src/Geometry/MenuToolBarGeom.c:600 ../src/Geometry/MenuToolBarGeom.c:613 msgid "" "Sorry\n" "Conversion is not possible from XYZ to Zmat" msgstr "" #: ../src/Geometry/DrawGeom.c:5124 ../src/Geometry/MenuToolBarGeom.c:603 msgid "Save geometry in mopac z-matrix file" msgstr "" #: ../src/Geometry/DrawGeom.c:5135 ../src/Geometry/MenuToolBarGeom.c:616 msgid "Save geometry in gaussian z-matrix file" msgstr "" #: ../src/Geometry/DrawGeom.c:5160 ../src/Geometry/InterfaceGeom.c:169 #: ../src/Geometry/InterfaceGeom.c:345 ../src/Geometry/InterfaceGeom.c:437 #: ../src/Geometry/MenuToolBarGeom.c:385 msgid "Read Geometry from a Gaussian input file" msgstr "" #: ../src/Geometry/DrawGeom.c:5164 ../src/Geometry/InterfaceGeom.c:172 #: ../src/Geometry/InterfaceGeom.c:360 ../src/Geometry/InterfaceGeom.c:450 #: ../src/Geometry/MenuToolBarGeom.c:389 msgid "Read Geometry from a Molcas input file" msgstr "" #: ../src/Geometry/DrawGeom.c:5168 ../src/Geometry/InterfaceGeom.c:350 #: ../src/Geometry/InterfaceGeom.c:463 ../src/Geometry/MenuToolBarGeom.c:392 msgid "Read Geometry from a Molpro input file" msgstr "" #: ../src/Geometry/DrawGeom.c:5172 ../src/Geometry/InterfaceGeom.c:178 #: ../src/Geometry/InterfaceGeom.c:355 ../src/Geometry/InterfaceGeom.c:476 #: ../src/Geometry/MenuToolBarGeom.c:403 msgid "Read Geometry from a MPQC input file" msgstr "" #: ../src/Geometry/DrawGeom.c:5722 #, c-format msgid "" "%s[%d] ; Coord (Ang) : %f %f %f ; Move your mouse to cancel the operation " msgstr "" #: ../src/Geometry/DrawGeom.c:5730 msgid "Move your mouse to cancel the operation " msgstr "" #: ../src/Geometry/DrawGeom.c:6934 msgid "" " Press the Left mouse button and move your mouse for a \"Rotate molecule\". " msgstr "" #: ../src/Geometry/DrawGeom.c:6935 msgid "" " Press the Left mouse button and move your mouse for a \"Rotate molecule " "about z axis\". " msgstr "" #: ../src/Geometry/DrawGeom.c:6936 msgid "" " Press the Left mouse button and move your mouse for a \"Translation\". " msgstr "" #: ../src/Geometry/DrawGeom.c:6937 msgid " Press the Left mouse button and move your mouse for a \"Zoom\". " msgstr "" #: ../src/Geometry/DrawGeom.c:6938 msgid " Press the Left mouse button and move your mouse for \"Scale Stick\". " msgstr "" #: ../src/Geometry/DrawGeom.c:6939 msgid " Press the Left mouse button and move your mouse for \"Scale Ball\". " msgstr "" #: ../src/Geometry/DrawGeom.c:6940 msgid " Press the Left mouse button and move your mouse for \"Scale Dipole\". " msgstr "" #: ../src/Geometry/DrawGeom.c:6941 msgid "" "Pick an atom to select a residue, G key + pick an atom to select a group, Or " "F key + move your mouse to select a fragments. Use shift key for more " "selections." msgstr "" #: ../src/Geometry/DrawGeom.c:6942 msgid "" " Press the Left mouse button and move your mouse for \"select a fragments\"." "Use shift key for more selections. " msgstr "" #: ../src/Geometry/DrawGeom.c:6943 msgid "" " Press the Left mouse button for pick an atom, all atoms for residue of " "this atom are selected(or unselected)." msgstr "" #: ../src/Geometry/DrawGeom.c:6944 msgid "" " Press the Left mouse button(for pick an atom or all selected atoms) and " "release for \"Delete selected atom(s)\". " msgstr "" #: ../src/Geometry/DrawGeom.c:6945 msgid "" " Press the Left mouse button and move your mouse for \"Rotatation of " "selected atom(s)[Local Rotation]\". " msgstr "" #: ../src/Geometry/DrawGeom.c:6946 msgid "" " Press the Left mouse button and move your mouse for \"Rotation, about z " "axis, of selected atom(s)[Local Rotation]\". " msgstr "" #: ../src/Geometry/DrawGeom.c:6947 msgid "" " Press the Left mouse button(for pick an atom or all selected atoms) and " "move your mouse for \"Move selected atom(s)\". " msgstr "" #: ../src/Geometry/DrawGeom.c:6948 msgid "" " Press and release the Left mouse button for \"Insert/Change atom(s)/bond\"." "\"Pick an atom for replace it.\"" msgstr "" #: ../src/Geometry/DrawGeom.c:6949 msgid "" " Press and release the Left mouse button for \"Insert atom(s)/bond\".\"Pick " "an atom for replace it.\"" msgstr "" #: ../src/Geometry/DrawGeom.c:6950 msgid "" " Press the Left mouse button(for pick a bond) and release for \"Change " "selected bond\". " msgstr "" #: ../src/Geometry/DrawGeom.c:6951 msgid "" " Press the Left mouse button(for pick a bond) and release for \"Delete " "selected bond\". " msgstr "" #: ../src/Geometry/DrawGeom.c:6952 msgid " Press and release the Left mouse button for \"Select your atoms\". " msgstr "" #: ../src/Geometry/DrawGeom.c:6957 msgid " Press and release the Left mouse button for \"Insert a Fragment\". " msgstr "" #: ../src/Geometry/DrawGeom.c:7188 ../src/Geometry/DrawGeom.c:7230 #, c-format msgid "" "Total Charge = %f\n" "Sum of positive charges = %f\n" "Sum of negative charges = %f\n" "positive/negative = %f\n" "negative/positive = %f\n" msgstr "" #: ../src/Geometry/DrawGeom.c:7199 ../src/Geometry/DrawGeom.c:7241 #, c-format msgid "" "Total Charge = %f\n" "Sum of positive charges = %f\n" "Sum of negative charges = %f\n" msgstr "" #: ../src/Geometry/DrawGeom.c:7337 msgid "Charge by residues" msgstr "" #: ../src/Geometry/DrawGeom.c:7344 #, c-format msgid "%s[%d] Charge = %f\n" msgstr "" #: ../src/Geometry/DrawGeom.c:7374 #, c-format msgid "Dipole (Debye) : X= %f Y= %f Z= %f Tot=%f\n" msgstr "" #: ../src/Geometry/DrawGeom.c:9154 msgid "No hydrogen atoms to remove\n" msgstr "" #: ../src/Geometry/DrawGeom.c:9547 msgid "" "Error in conversion\n" " Zmatix to xyz " msgstr "" #: ../src/Geometry/DrawGeom.c:10993 ../src/Geometry/DrawGeom.c:11462 msgid "Measure" msgstr "" #: ../src/Geometry/DrawGeom.c:11168 msgid "Set Background Color" msgstr "" #: ../src/Geometry/DrawGeom.c:11390 msgid "Gabedit : Draw Geometry " msgstr "" #: ../src/Geometry/DrawGeom.c:11394 msgid " Draw Geom. " msgstr "" #: ../src/Geometry/DrawGeom.c:11487 ../src/Geometry/DrawGeom.c:11515 msgid "Rotation" msgstr "" #: ../src/Geometry/DrawGeom.c:11491 msgid " Press the Midle mouse button and move your mouse for a \"Rotation\". " msgstr "" #: ../src/Geometry/DrawGeom.c:11504 msgid " Press the Right mouse button for display the popup menu. " msgstr "" #: ../src/Geometry/DrawGeom.c:11519 msgid " Press the Left mouse button and move your mouse for a \"Rotation\". " msgstr "" #: ../src/Geometry/EnergiesCurves.c:350 ../src/MPQC/MPQCOptimization.c:196 #: ../src/Molcas/MolcasOptimization.c:160 msgid "Single point" msgstr "" #: ../src/Geometry/EnergiesCurves.c:577 ../src/Geometry/EnergiesCurves.c:731 msgid "" "Sorry\n" " I can not read energies from your gaussian output file\n" msgstr "" #: ../src/Geometry/EnergiesCurves.c:580 ../src/Geometry/EnergiesCurves.c:583 #: ../src/Geometry/EnergiesCurves.c:734 msgid "" "Sorry\n" " I can not read energies from your molpro log file\n" msgstr "" #: ../src/Geometry/EnergiesCurves.c:586 ../src/Geometry/EnergiesCurves.c:740 msgid "" "Sorry\n" " I can not read energies from your molden file\n" msgstr "" #: ../src/Geometry/EnergiesCurves.c:589 ../src/Geometry/EnergiesCurves.c:743 msgid "" "Sorry\n" " I can not read energies from your gabedit file\n" msgstr "" #: ../src/Geometry/EnergiesCurves.c:592 ../src/Geometry/EnergiesCurves.c:746 msgid "" "Sorry\n" " I can not read energies from your MPQC output file\n" msgstr "" #: ../src/Geometry/EnergiesCurves.c:595 msgid "" "Sorry\n" " I can not read your XYZ file\n" msgstr "" #: ../src/Geometry/EnergiesCurves.c:598 ../src/Geometry/EnergiesCurves.c:755 msgid "" "Sorry\n" " I can not read energies\n" msgstr "" #: ../src/Geometry/EnergiesCurves.c:737 msgid "" "Sorry\n" " I can not read energies from your q-chem output file\n" msgstr "" #: ../src/Geometry/EnergiesCurves.c:749 msgid "" "Sorry\n" " I can not read energies from your Mopax aux file\n" msgstr "" #: ../src/Geometry/EnergiesCurves.c:752 msgid "" "Sorry\n" " I can not read your xyz file\n" msgstr "" #: ../src/Geometry/EnergiesCurves.c:770 #, c-format msgid "Geometry convergence from file : %s" msgstr "" #: ../src/Geometry/EnergiesCurves.c:795 ../src/Geometry/ResultsAnalise.c:2625 msgid "Geom. Conv." msgstr "" #: ../src/Geometry/ExportGeom.c:48 ../src/Geometry/GeomXYZ.c:1637 #: ../src/Geometry/GeomXYZ.c:1760 ../src/Geometry/GeomXYZ.c:3641 #: ../src/Geometry/GeomXYZ.c:3745 ../src/Geometry/GeomXYZ.c:4348 #: ../src/Geometry/GeomXYZ.c:10178 ../src/Geometry/GeomZmatrix.c:2100 #: ../src/Geometry/GeomZmatrix.c:2276 ../src/Geometry/ImagesGeom.c:37 #: ../src/Geometry/ImagesGeom.c:177 ../src/Geometry/ImagesGeom.c:252 #: ../src/Geometry/ImagesGeom.c:403 ../src/Geometry/ResultsAnalise.c:2307 #: ../src/Geometry/ResultsAnalise.c:2321 ../src/Geometry/ResultsAnalise.c:2335 #: ../src/Geometry/ResultsAnalise.c:2349 ../src/Geometry/ResultsAnalise.c:2363 #: ../src/Geometry/ResultsAnalise.c:2377 ../src/Geometry/ResultsAnalise.c:2392 #: ../src/Geometry/ResultsAnalise.c:2406 ../src/Geometry/ResultsAnalise.c:2420 #: ../src/Geometry/ResultsAnalise.c:2434 ../src/Geometry/ResultsAnalise.c:2448 #: ../src/Geometry/ResultsAnalise.c:2462 ../src/Geometry/ResultsAnalise.c:2476 #: ../src/Geometry/ResultsAnalise.c:2490 ../src/OpenGL/CaptureOrbitals.c:74 #: ../src/OpenGL/GeomOrbXYZ.c:482 ../src/OpenGL/GeomOrbXYZ.c:715 #: ../src/OpenGL/GeomOrbXYZ.c:894 ../src/OpenGL/GeomOrbXYZ.c:1111 #: ../src/OpenGL/Images.c:70 ../src/OpenGL/Images.c:91 #: ../src/OpenGL/Images.c:112 ../src/OpenGL/Images.c:146 #: ../src/OpenGL/Images.c:206 ../src/OpenGL/Images.c:250 #: ../src/OpenGL/Images.c:322 ../src/OpenGL/Images.c:425 #: ../src/VibrationalCorrections/GabeditGaussianInput.c:197 #, c-format msgid "" "Sorry\n" " No selected file" msgstr "" #: ../src/Geometry/FragmentsSelector.c:80 msgid "" " * In the fragment selector :\n" " Clic to an atom (generally a H atom) connected to only one other " "atom. \n" " This atom is colored in red.\n" " The atom connected to red atom is colored in green.\n" " A third atom is colored in blue.\n" " To change the blue atom : \n" " select the red atom and move the mouse (button always " "pressed).\n" " The angle between red-green-blue atoms cannot be null\n" " Clic to red atom for unselect all.\n" "\n" " * In the Draw geometry window :\n" " Clic to an atom (generally a H atom) connected to only one other " "atom.\n" " This atom is colored in red.\n" " The atom connected to red atom is colored in green.\n" " A third atom is colored in blue.\n" " To change the blue atom : \n" " select the red atom and move the mouse (button always " "pressed).\n" " The angle between red-green-blue atoms cannot be null\n" "\n" " After release of the left mouse button :\n" " The red atom of fragment is placed on the green atom of the old " "molecule\n" " the fragment is rotated so that the red, green atoms are aligned\n" " The red atoms are deleted\n" " The dihedral angle between the blue, green (of molecule), green and " "blue (of fragment) is set to the value given by user\n" "\n" " If all atoms of the fragment are unselected, then all these atoms are " "inserted in the molecule.\n" msgstr "" #: ../src/Geometry/FragmentsSelector.c:142 msgid "Gabedit : Fragment Selector " msgstr "" #: ../src/Geometry/FragmentsSelector.c:148 msgid " Frag. Sel. " msgstr "" #: ../src/Geometry/GeomConversion.c:755 #, c-format msgid "I cannot convert the zmat to xyz\n" msgstr "" #: ../src/Geometry/GeomConversion.c:900 ../src/Geometry/GeomConversion.c:1653 msgid "" "Sorry\n" "Conversion is not possible" msgstr "" #: ../src/Geometry/GeomConversion.c:1306 #, c-format msgid "Sorry I cannot compute the levels of groupes\n" msgstr "" #: ../src/Geometry/GeomXYZ.c:935 ../src/Geometry/GeomXYZ.c:11510 #: ../src/Geometry/GeomXYZ.c:11675 ../src/Geometry/GeomZmatrix.c:244 #: ../src/Geometry/GeomZmatrix.c:6638 ../src/Geometry/GeomZmatrix.c:6810 msgid "Sorry a other variable have any Name !\n" msgstr "" #: ../src/Geometry/GeomXYZ.c:943 ../src/Geometry/GeomXYZ.c:1151 #: ../src/Geometry/GeomXYZ.c:11517 ../src/Geometry/GeomXYZ.c:11705 #: ../src/Geometry/GeomZmatrix.c:252 ../src/Geometry/GeomZmatrix.c:1439 #: ../src/Geometry/GeomZmatrix.c:6645 ../src/Geometry/GeomZmatrix.c:6834 #, c-format msgid "Sorry %s is not a number \n" msgstr "" #: ../src/Geometry/GeomXYZ.c:1023 ../src/Geometry/GeomZmatrix.c:1045 #, c-format msgid "Sorry %s is not a symbol for an atom \n" msgstr "" #: ../src/Geometry/GeomXYZ.c:1113 ../src/Geometry/GeomXYZ.c:2416 #: ../src/Geometry/GeomXYZ.c:2510 ../src/Geometry/GeomZmatrix.c:1136 #: ../src/Geometry/GeomZmatrix.c:3129 ../src/Geometry/GeomZmatrix.c:3161 #: ../src/Geometry/GeomZmatrix.c:3194 ../src/Geometry/GeomZmatrix.c:3332 #: ../src/Geometry/GeomZmatrix.c:3366 ../src/Geometry/GeomZmatrix.c:3401 #, c-format msgid "" "Sorry\n" " %s \n" "is not a number \n" "and is not a variable " msgstr "" #: ../src/Geometry/GeomXYZ.c:1184 ../src/Geometry/GeomZmatrix.c:1472 msgid "Sorry The layer should be High, Medium, Low or one space \n" msgstr "" #: ../src/Geometry/GeomXYZ.c:1531 ../src/Geometry/GeomXYZ.c:1582 #: ../src/Geometry/GeomXYZ.c:1678 ../src/Geometry/GeomXYZ.c:3339 #: ../src/Geometry/GeomXYZ.c:3552 ../src/Geometry/GeomXYZ.c:4249 #: ../src/Geometry/GeomXYZ.c:10118 ../src/Geometry/GeomZmatrix.c:2011 #: ../src/Geometry/GeomZmatrix.c:2233 #, c-format msgid "" "Sorry,\n" " I can not open %s file" msgstr "" #: ../src/Geometry/GeomXYZ.c:2085 ../src/Geometry/GeomXYZ.c:2141 #: ../src/Geometry/GeomXYZ.c:11224 ../src/Geometry/GeomZmatrix.c:2350 #: ../src/Geometry/GeomZmatrix.c:2650 ../src/Geometry/GeomZmatrix.c:2892 msgid " Sorry No Center !" msgstr "" #: ../src/Geometry/GeomXYZ.c:2090 ../src/Geometry/GeomZmatrix.c:2655 msgid "Tansform all constants in Variables" msgstr "" #: ../src/Geometry/GeomXYZ.c:2095 ../src/Geometry/GeomXYZ.c:2099 #: ../src/Geometry/GeomXYZ.c:2151 ../src/Geometry/GeomXYZ.c:2155 #: ../src/Geometry/GeomZmatrix.c:2660 ../src/Geometry/GeomZmatrix.c:2665 #: ../src/Geometry/GeomZmatrix.c:2902 ../src/Geometry/GeomZmatrix.c:2907 #: ../src/Geometry/GeomZmatrix.c:3878 ../src/Geometry/GeomZmatrix.c:3896 msgid " Question " msgstr "" #: ../src/Geometry/GeomXYZ.c:2099 ../src/Geometry/GeomZmatrix.c:2665 msgid "" "\n" "Are you sure to transform\n" " all constants in variables? \n" msgstr "" #: ../src/Geometry/GeomXYZ.c:2155 msgid "" "\n" "Are you sure to transform\n" "all variables in constants? \n" msgstr "" #: ../src/Geometry/GeomXYZ.c:2193 ../src/Geometry/GeomXYZ.c:2578 #: ../src/Geometry/GeomZmatrix.c:2703 ../src/Geometry/GeomZmatrix.c:3436 msgid "Sorry No line selected" msgstr "" #: ../src/Geometry/GeomXYZ.c:2246 msgid "" "Sorry\n" " No variable selected" msgstr "" #: ../src/Geometry/GeomXYZ.c:2409 ../src/Geometry/GeomXYZ.c:11503 #: ../src/Geometry/GeomXYZ.c:11689 ../src/Geometry/GeomZmatrix.c:3120 #: ../src/Geometry/GeomZmatrix.c:3152 ../src/Geometry/GeomZmatrix.c:3184 #: ../src/Geometry/GeomZmatrix.c:3324 ../src/Geometry/GeomZmatrix.c:3359 #: ../src/Geometry/GeomZmatrix.c:3394 ../src/Geometry/GeomZmatrix.c:6632 #: ../src/Geometry/GeomZmatrix.c:6818 msgid "Sorry a Entry text is void !\n" msgstr "" #: ../src/Geometry/GeomXYZ.c:2502 msgid "" "Sorry\n" " a entry is void " msgstr "" #: ../src/Geometry/GeomXYZ.c:2638 msgid "New Center" msgstr "" #: ../src/Geometry/GeomXYZ.c:2642 msgid " New Center " msgstr "" #: ../src/Geometry/GeomXYZ.c:2811 ../src/Geometry/GeomZmatrix.c:3694 msgid "Create center before \n" msgstr "" #: ../src/Geometry/GeomXYZ.c:2818 msgid "Edit Center" msgstr "" #: ../src/Geometry/GeomXYZ.c:2822 ../src/Geometry/GeomZmatrix.c:3712 msgid " Edit Center " msgstr "" #: ../src/Geometry/GeomXYZ.c:2960 msgid " No Center to delete !" msgstr "" #: ../src/Geometry/GeomXYZ.c:2965 ../src/Geometry/GeomZmatrix.c:3873 msgid "Delete Center" msgstr "" #: ../src/Geometry/GeomXYZ.c:2970 msgid " Delete Center " msgstr "" #: ../src/Geometry/GeomXYZ.c:2974 msgid "" "\n" "Are you sure to delete \n" "the last center?\n" msgstr "" #: ../src/Geometry/GeomXYZ.c:3156 ../src/Geometry/GeomXYZ.c:4015 #: ../src/Geometry/GeomXYZ.c:7447 ../src/Geometry/GeomXYZ.c:7588 #: ../src/Geometry/GeomXYZ.c:9834 ../src/Geometry/GeomZmatrix.c:5281 #: ../src/Geometry/GeomZmatrix.c:5420 ../src/Geometry/GeomZmatrix.c:5552 #: ../src/Geometry/GeomZmatrix.c:6269 #, c-format msgid "" "Sorry\n" " I can not open \"%s\" file" msgstr "" #: ../src/Geometry/GeomXYZ.c:3166 ../src/Geometry/GeomXYZ.c:4125 #, c-format msgid "" "Sorry\n" " I can read \"%s\" file" msgstr "" #: ../src/Geometry/GeomXYZ.c:3288 ../src/Geometry/GeomXYZ.c:3415 #: ../src/Geometry/GeomXYZ.c:5146 ../src/Geometry/GeomXYZ.c:5161 #: ../src/Geometry/GeomXYZ.c:5408 ../src/Geometry/GeomXYZ.c:5423 #: ../src/Geometry/GeomXYZ.c:5865 ../src/Geometry/GeomXYZ.c:5880 #: ../src/Geometry/GeomXYZ.c:5895 ../src/Geometry/GeomXYZ.c:6335 #: ../src/Geometry/GeomXYZ.c:6497 ../src/Geometry/GeomXYZ.c:6638 #: ../src/Geometry/GeomXYZ.c:6778 ../src/Geometry/GeomXYZ.c:6895 #: ../src/Geometry/GeomXYZ.c:8117 ../src/Geometry/GeomXYZ.c:8133 #: ../src/Geometry/GeomXYZ.c:8149 ../src/Geometry/GeomXYZ.c:8165 #: ../src/Geometry/GeomXYZ.c:8181 ../src/Geometry/GeomXYZ.c:8197 #: ../src/Geometry/GeomXYZ.c:8213 ../src/Geometry/GeomXYZ.c:8240 #: ../src/Geometry/GeomXYZ.c:8352 ../src/Geometry/GeomXYZ.c:10596 #: ../src/Geometry/GeomXYZ.c:10633 ../src/Geometry/GeomXYZ.c:10673 #: ../src/Geometry/GeomXYZ.c:10712 ../src/Geometry/GeomXYZ.c:10758 #: ../src/Geometry/GeomZmatrix.c:5916 ../src/Geometry/GeomZmatrix.c:6410 #: ../src/Geometry/InterfaceGeom.c:61 ../src/Geometry/InterfaceGeom.c:75 #: ../src/Geometry/InterfaceGeom.c:89 ../src/Geometry/InterfaceGeom.c:104 #: ../src/Geometry/InterfaceGeom.c:118 ../src/Geometry/p.c:19 #: ../src/OpenGL/AnimationGeomConv.c:827 ../src/OpenGL/AnimationGeomConv.c:931 #: ../src/OpenGL/AnimationGeomConv.c:1181 #: ../src/OpenGL/AnimationGeomConv.c:1473 #: ../src/OpenGL/AnimationGeomConv.c:1513 #: ../src/OpenGL/AnimationGeomConv.c:1767 #: ../src/OpenGL/AnimationGeomConv.c:1897 ../src/OpenGL/AnimationMD.c:845 #: ../src/OpenGL/GeomOrbXYZ.c:1382 ../src/OpenGL/GeomOrbXYZ.c:1707 #: ../src/OpenGL/GeomOrbXYZ.c:2055 ../src/OpenGL/GeomOrbXYZ.c:2182 #: ../src/OpenGL/GeomOrbXYZ.c:2442 ../src/OpenGL/OrbitalsGamess.c:112 #: ../src/OpenGL/OrbitalsOrca.c:322 ../src/OpenGL/OrbitalsQChem.c:112 #: ../src/OpenGL/Vibration.c:3342 ../src/OpenGL/Vibration.c:3386 msgid "" "Sorry\n" " No file selected" msgstr "" #: ../src/Geometry/GeomXYZ.c:3346 #, c-format msgid "" "Sorry,\n" " No geometry in %s file" msgstr "" #: ../src/Geometry/GeomXYZ.c:4609 ../src/OpenGL/AnimationGeomConv.c:737 #: ../src/OpenGL/AnimationGeomConv.c:2324 ../src/OpenGL/GeomOrbXYZ.c:295 #, c-format msgid "" "Sorry\n" "Molden file with ZMAT coordinate is not supported by Gabedit" msgstr "" #: ../src/Geometry/GeomXYZ.c:4611 ../src/OpenGL/AnimationGeomConv.c:739 #: ../src/OpenGL/AnimationGeomConv.c:2325 ../src/OpenGL/GeomOrbXYZ.c:297 #, c-format msgid "" "Sorry\n" "Gabedit file with ZMAT coordinate is not supported by Gabedit" msgstr "" #: ../src/Geometry/GeomXYZ.c:4749 ../src/Geometry/GeomXYZ.c:4977 #: ../src/Geometry/GeomXYZ.c:5188 ../src/Geometry/GeomXYZ.c:5210 #: ../src/Geometry/GeomXYZ.c:5304 ../src/Geometry/GeomXYZ.c:5326 #: ../src/Geometry/GeomXYZ.c:5450 ../src/Geometry/GeomXYZ.c:5473 #: ../src/Geometry/GeomXYZ.c:5604 ../src/Geometry/GeomXYZ.c:5634 #: ../src/Geometry/GeomXYZ.c:5751 ../src/Geometry/GeomXYZ.c:5771 #: ../src/Geometry/GeomXYZ.c:5917 ../src/Geometry/GeomXYZ.c:6032 #: ../src/Geometry/GeomXYZ.c:6203 ../src/Geometry/GeomXYZ.c:6229 #: ../src/Geometry/GeomXYZ.c:7081 ../src/Geometry/GeomXYZ.c:7310 #: ../src/Geometry/GeomXYZ.c:7808 ../src/Geometry/GeomXYZ.c:8005 #: ../src/OpenGL/AnimationGeomConv.c:720 ../src/OpenGL/GeomOrbXYZ.c:277 #: ../src/OpenGL/GeomOrbXYZ.c:392 ../src/OpenGL/GeomOrbXYZ.c:2684 #, c-format msgid "" "Sorry\n" "I can not open %s file " msgstr "" #: ../src/Geometry/GeomXYZ.c:5022 ../src/Geometry/GeomXYZ.c:5040 #: ../src/OpenGL/AnimationGeomConv.c:1665 #: ../src/OpenGL/AnimationGeomConv.c:1683 ../src/OpenGL/GeomOrbXYZ.c:1957 #: ../src/OpenGL/GeomOrbXYZ.c:1975 #, c-format msgid "" "Sorry\n" "I can read Geometry from %s file " msgstr "" #: ../src/Geometry/GeomXYZ.c:5939 #, c-format msgid "" "Sorry\n" " I can not read geometry number %d for %s file" msgstr "" #: ../src/Geometry/GeomXYZ.c:6096 #, c-format msgid "" "Sorry\n" "I can not read geometry in %s file " msgstr "" #: ../src/Geometry/GeomXYZ.c:6343 ../src/Geometry/GeomXYZ.c:6505 #: ../src/Geometry/GeomXYZ.c:6644 ../src/Geometry/GeomXYZ.c:6785 #: ../src/Geometry/GeomXYZ.c:6903 ../src/Geometry/GeomXYZ.c:8247 #: ../src/Geometry/GeomXYZ.c:8360 ../src/Geometry/p.c:25 #: ../src/OpenGL/AnimationGeomConv.c:834 ../src/OpenGL/AnimationGeomConv.c:938 #: ../src/OpenGL/AnimationGeomConv.c:1188 #: ../src/OpenGL/AnimationGeomConv.c:1479 #: ../src/OpenGL/AnimationGeomConv.c:1520 #: ../src/OpenGL/AnimationGeomConv.c:1620 #: ../src/OpenGL/AnimationGeomConv.c:1774 #: ../src/OpenGL/AnimationGeomConv.c:1904 ../src/OpenGL/AnimationMD.c:851 #: ../src/OpenGL/Basis.c:1117 ../src/OpenGL/GeomOrbXYZ.c:1121 #: ../src/OpenGL/GeomOrbXYZ.c:1272 ../src/OpenGL/GeomOrbXYZ.c:1391 #: ../src/OpenGL/GeomOrbXYZ.c:1722 ../src/OpenGL/GeomOrbXYZ.c:2064 #: ../src/OpenGL/GeomOrbXYZ.c:2192 ../src/OpenGL/GeomOrbXYZ.c:2448 #: ../src/OpenGL/GeomOrbXYZ.c:2483 ../src/OpenGL/Orbitals.c:2002 #: ../src/OpenGL/OrbitalsDalton.c:102 ../src/OpenGL/OrbitalsGamess.c:121 #: ../src/OpenGL/OrbitalsQChem.c:121 msgid "" "Sorry\n" "I can not open this file" msgstr "" #: ../src/Geometry/GeomXYZ.c:6388 ../src/Geometry/GeomXYZ.c:6547 #: ../src/Geometry/GeomXYZ.c:6806 ../src/Geometry/GeomXYZ.c:6923 #: ../src/Geometry/GeomXYZ.c:8265 ../src/Geometry/GeomXYZ.c:8376 #: ../src/Geometry/p.c:34 ../src/Geometry/p.c:43 ../src/Geometry/p.c:50 msgid "" "Sorry\n" "I can not read this file" msgstr "" #: ../src/Geometry/GeomXYZ.c:6651 msgid "" "Sorry\n" "I can not the multiplicity from this file" msgstr "" #: ../src/Geometry/GeomXYZ.c:6658 ../src/OpenGL/GeomOrbXYZ.c:2490 msgid "" "Sorry\n" "I can not the number of atoms from this file" msgstr "" #: ../src/Geometry/GeomXYZ.c:6667 ../src/OpenGL/GeomOrbXYZ.c:2496 #: ../src/OpenGL/GeomOrbXYZ.c:2566 msgid "" "Sorry\n" "I can not read the atomic numbers from this file" msgstr "" #: ../src/Geometry/GeomXYZ.c:6674 ../src/OpenGL/GeomOrbXYZ.c:2502 msgid "" "Sorry\n" "I can not read the current cartesian coordinates from this file" msgstr "" #: ../src/Geometry/GeomXYZ.c:7115 ../src/Geometry/GeomXYZ.c:7345 #: ../src/Geometry/GeomXYZ.c:7850 ../src/Geometry/GeomXYZ.c:8039 #, c-format msgid "" "Sorry\n" "I can not read geometry in\t%s file " msgstr "" #: ../src/Geometry/GeomXYZ.c:7481 ../src/Geometry/GeomXYZ.c:7620 #: ../src/Geometry/GeomZmatrix.c:5299 ../src/Geometry/GeomZmatrix.c:5457 #: ../src/Geometry/GeomZmatrix.c:5584 #, c-format msgid "" "Sorry\n" " I can not read geometry from \"%s\" file" msgstr "" #: ../src/Geometry/GeomXYZ.c:7538 ../src/Geometry/GeomXYZ.c:7707 #: ../src/Geometry/GeomXYZ.c:9641 msgid "" "Sorry\n" " I can not read geometry in Mopac input file" msgstr "" #: ../src/Geometry/GeomXYZ.c:7820 #, c-format msgid "" "Sorry\n" "I can not read the atom symbols in %s file " msgstr "" #: ../src/Geometry/GeomXYZ.c:8586 msgid "" "Sorry\n" " I can not read geometry from your Gamess input file" msgstr "" #: ../src/Geometry/GeomXYZ.c:8713 msgid "" "Sorry\n" " I can not read geometry from your MPQC input file" msgstr "" #: ../src/Geometry/GeomXYZ.c:8772 msgid "" "Sorry\n" " i can not read XYZ geometry in molpro input file" msgstr "" #: ../src/Geometry/GeomXYZ.c:8891 ../src/Geometry/GeomZmatrix.c:4478 msgid "" "Sorry\n" " I can not read geometry in Molpro input file" msgstr "" #: ../src/Geometry/GeomXYZ.c:9067 ../src/Geometry/GeomZmatrix.c:4715 msgid "" "Sorry\n" " I can not read geometry in Gaussian input file" msgstr "" #: ../src/Geometry/GeomXYZ.c:9119 ../src/Geometry/GeomXYZ.c:9246 #: ../src/Geometry/GeomZmatrix.c:4766 msgid "" "Sorry\n" " I can not read geometry in Orca input file" msgstr "" #: ../src/Geometry/GeomXYZ.c:9433 msgid "" "Sorry\n" " I can not read geometry in QChem input file" msgstr "" #: ../src/Geometry/GeomXYZ.c:9863 #, c-format msgid "" "Sorry\n" " \"%s\" is not at MOL2 format" msgstr "" #: ../src/Geometry/GeomXYZ.c:9878 #, c-format msgid "" "Sorry\n" " \"%s\" is not at Tinker format" msgstr "" #: ../src/Geometry/GeomXYZ.c:10222 msgid "" "Sorry\n" " this is not a mol file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10273 msgid "" "Sorry\n" " I cannot read this file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10336 ../src/Geometry/GeomXYZ.c:10773 #: ../src/OpenGL/GeomOrbXYZ.c:497 msgid "" "Sorry\n" " this is not a XYZ file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10887 msgid "Read XYZ file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10891 msgid "Read Mol file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10895 msgid "Read the first geometry from a dalton output file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10899 msgid "Read the last geometry from a dalton output file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10904 msgid "Read the first geometry from a Gamess output file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10909 msgid "Read the last geometry from a Gamess output file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10913 msgid "Read the last geometry from a Gamess IRC file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10917 msgid "Read the first geometry from a gaussian output file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10921 msgid "Read the last geometry from a gaussian output file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10925 msgid "Read the geometry from a gaussian fchk file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10929 msgid "Read the first geometry from a molcas output file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10933 msgid "Read the last geometry from a molcas output file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10937 msgid "Read the first geometry from a molpro output file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10941 msgid "Read the last geometry from a molpro output file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10945 msgid "Read MOL2 file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10949 ../src/Geometry/InterfaceGeom.c:333 #: ../src/Geometry/InterfaceGeom.c:478 ../src/OpenGL/MenuToolBarGL.c:183 msgid "Read the first geometry from a MPQC output file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10953 ../src/Geometry/InterfaceGeom.c:336 #: ../src/Geometry/InterfaceGeom.c:480 ../src/OpenGL/MenuToolBarGL.c:185 msgid "Read the last geometry from a MPQC output file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10957 msgid "Read the first geometry from a ORCA-Chem output file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10961 msgid "Read the last geometry from a ORCA output file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10965 ../src/OpenGL/MenuToolBarGL.c:196 msgid "Read the first geometry from a Q-Chem output file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10969 ../src/OpenGL/MenuToolBarGL.c:198 msgid "Read the last geometry from a Q-Chem output file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10973 ../src/OpenGL/MenuToolBarGL.c:175 msgid "Read the first geometry from a Mopac output file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10977 ../src/OpenGL/MenuToolBarGL.c:177 msgid "Read the last geometry from a Mopac output file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10981 ../src/OpenGL/MenuToolBarGL.c:181 msgid "Read the last geometry from a Mopac aux file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10985 msgid "Read Tinker file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10989 msgid "Read pdb file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10993 msgid "Read hyperchem file" msgstr "" #: ../src/Geometry/GeomXYZ.c:10997 msgid "Read Gabedit file" msgstr "" #: ../src/Geometry/GeomXYZ.c:11001 msgid "Read geometries from a Mopac scan output" msgstr "" #: ../src/Geometry/GeomXYZ.c:11236 msgid " Save XYZ " msgstr "" #: ../src/Geometry/GeomXYZ.c:11439 ../src/Geometry/GeomXYZ.c:11551 #: ../src/Geometry/GeomZmatrix.c:6568 ../src/Geometry/GeomZmatrix.c:6680 #, c-format msgid "" "Sorry\n" " %s \n" " is used in Geometry" msgstr "" #: ../src/Geometry/GeomXYZ.c:11544 msgid " No Variable to delet !" msgstr "" #: ../src/Geometry/GeomXYZ.c:11610 ../src/Geometry/GeomZmatrix.c:6743 msgid "Create variable before \n" msgstr "" #: ../src/Geometry/GeomXYZ.c:11612 ../src/Geometry/GeomZmatrix.c:6745 msgid "Please Select your variable \n" msgstr "" #: ../src/Geometry/GeomXYZ.c:11616 ../src/Geometry/GeomZmatrix.c:6749 msgid "Edit Variable" msgstr "" #: ../src/Geometry/GeomXYZ.c:11621 msgid " Edit Variable " msgstr "" #: ../src/Geometry/GeomZmatrix.c:1145 msgid "Sorry : The distance can not be negative" msgstr "" #: ../src/Geometry/GeomZmatrix.c:1152 msgid "Sorry : The distance can not be <0.01" msgstr "" #: ../src/Geometry/GeomZmatrix.c:1192 #, c-format msgid "" "Sorry\n" " %s \n" "is not an integer " msgstr "" #: ../src/Geometry/GeomZmatrix.c:1200 #, c-format msgid "" "Sorry\n" " %s \n" "is not an integer between 1 and %d" msgstr "" #: ../src/Geometry/GeomZmatrix.c:1218 ../src/Geometry/GeomZmatrix.c:1273 #, c-format msgid "" "Because a multiple references to a center on the same card\n" "I set NA to %d\n" msgstr "" #: ../src/Geometry/GeomZmatrix.c:1229 #, c-format msgid "" "Because a multiple references to a center on the same card\n" "I set ND to %d\n" msgstr "" #: ../src/Geometry/GeomZmatrix.c:1247 ../src/Geometry/GeomZmatrix.c:1284 #, c-format msgid "" "Because a multiple references to a center on the same card\n" "I set NR to %d\n" msgstr "" #: ../src/Geometry/GeomZmatrix.c:2805 msgid "Sorry No Variable selected" msgstr "" #: ../src/Geometry/GeomZmatrix.c:2897 msgid "Tansform all variables to constants" msgstr "" #: ../src/Geometry/GeomZmatrix.c:2907 msgid "" "\n" " Are you sure to transform\n" " all variables to constants? \n" msgstr "" #: ../src/Geometry/GeomZmatrix.c:3708 msgid " Edit center" msgstr "" #: ../src/Geometry/GeomZmatrix.c:3868 msgid " No Center to delet !" msgstr "" #: ../src/Geometry/GeomZmatrix.c:3868 msgid " Warning " msgstr "" #: ../src/Geometry/GeomZmatrix.c:3896 msgid "" "\n" "Are you sure to delete \n" "the last center? \n" msgstr "" #: ../src/Geometry/GeomZmatrix.c:4037 ../src/Utils/GabeditContoursPlot.c:2434 #: ../src/Utils/GabeditXYPlot.c:3123 ../src/Utils/GabeditXYPlot.c:3436 #, c-format msgid "Sorry, I cannot open %s file" msgstr "" #: ../src/Geometry/GeomZmatrix.c:4059 #, c-format msgid "Sorry, I cannot read the Z-Matrix from the %s file" msgstr "" #: ../src/Geometry/GeomZmatrix.c:4205 msgid "" "Sorry\n" " I can not read geometry from you Molcas input file" msgstr "" #: ../src/Geometry/GeomZmatrix.c:4969 ../src/Geometry/GeomZmatrix.c:5212 msgid "" "Sorry\n" " I can not read geometry in Q-Chem input file" msgstr "" #: ../src/Geometry/GeomZmatrix.c:5306 ../src/Geometry/GeomZmatrix.c:5592 msgid "" "Sorry\n" " I can not read geometry from this file" msgstr "" #: ../src/Geometry/GeomZmatrix.c:5355 ../src/Geometry/GeomZmatrix.c:5515 #: ../src/Geometry/GeomZmatrix.c:5647 ../src/Geometry/GeomZmatrix.c:6295 #: ../src/Geometry/GeomZmatrix.c:6343 msgid "" "Sorry\n" " This is not a Zmatrix mopac file" msgstr "" #: ../src/Geometry/GeomZmatrix.c:5725 ../src/Geometry/GeomZmatrix.c:5752 #: ../src/Geometry/GeomZmatrix.c:5782 ../src/Geometry/GeomZmatrix.c:5852 #: ../src/Geometry/GeomZmatrix.c:5960 ../src/Geometry/GeomZmatrix.c:5988 #: ../src/Geometry/GeomZmatrix.c:6018 ../src/Geometry/GeomZmatrix.c:6088 msgid "" "Sorry\n" " This is not a Zmatrix file" msgstr "" #: ../src/Geometry/GeomZmatrix.c:6288 #, c-format msgid "" "Sorry\n" " I can not read \"%s\" file" msgstr "" #: ../src/Geometry/GeomZmatrix.c:6673 msgid " No Variable to delete !" msgstr "" #: ../src/Geometry/GeomZmatrix.c:6753 msgid " Edit variable " msgstr "" #: ../src/Geometry/ImagesGeom.c:58 msgid "" "Sorry I can not create image file \n" "because Geometry display windows is closed" msgstr "" #: ../src/Geometry/ImagesGeom.c:81 ../src/OpenGL/Images.c:167 #: ../src/OpenGL/Images.c:271 ../src/OpenGL/Images.c:443 #, c-format msgid "Sorry: couldn't allocate memory\n" msgstr "" #: ../src/Geometry/ImagesGeom.c:143 msgid "Unknown visual\n" msgstr "" #: ../src/Geometry/ImagesGeom.c:184 ../src/Geometry/ImagesGeom.c:260 #: ../src/Geometry/ImagesGeom.c:410 ../src/OpenGL/Images.c:457 msgid "Sorry: can't open output file\n" msgstr "" #: ../src/Geometry/InterfaceGeom.c:138 ../src/Geometry/InterfaceGeom.c:175 #: ../src/Geometry/MenuToolBarGeom.c:395 msgid "Read Geometry from a Mopac input file" msgstr "" #: ../src/Geometry/InterfaceGeom.c:212 msgid " XYZ Editor " msgstr "" #: ../src/Geometry/InterfaceGeom.c:223 ../src/Geometry/InterfaceGeom.c:269 msgid " VARIABLES Editor " msgstr "" #: ../src/Geometry/InterfaceGeom.c:257 msgid " Z-MATRIX Editor " msgstr "" #: ../src/Geometry/InterfaceGeom.c:288 ../src/Geometry/InterfaceGeom.c:395 msgid "New Z-Matrix geometry" msgstr "" #: ../src/Geometry/InterfaceGeom.c:291 ../src/Geometry/InterfaceGeom.c:417 msgid "Read Geometry from a Gaussian Z-Matrix file" msgstr "" #: ../src/Geometry/InterfaceGeom.c:294 msgid "Read Geometry from a Mopac Z-Matrix file" msgstr "" #: ../src/Geometry/InterfaceGeom.c:297 ../src/Geometry/InterfaceGeom.c:397 msgid "New XYZ geometry" msgstr "" #: ../src/Geometry/InterfaceGeom.c:300 ../src/Geometry/InterfaceGeom.c:406 msgid "Read Geometry from a XYZ file" msgstr "" #: ../src/Geometry/InterfaceGeom.c:303 ../src/Geometry/InterfaceGeom.c:408 msgid "Read Geometry from a MOL2 file" msgstr "" #: ../src/Geometry/InterfaceGeom.c:306 ../src/Geometry/InterfaceGeom.c:410 msgid "Read Geometry from a Tinker file" msgstr "" #: ../src/Geometry/InterfaceGeom.c:309 ../src/Geometry/InterfaceGeom.c:412 msgid "Read Geometry from a PDB file" msgstr "" #: ../src/Geometry/InterfaceGeom.c:312 ../src/Geometry/InterfaceGeom.c:414 msgid "Read Geometry from a Hyperchem file" msgstr "" #: ../src/Geometry/InterfaceGeom.c:315 ../src/Geometry/InterfaceGeom.c:426 msgid "Read the first geometry from a Dalton output file" msgstr "" #: ../src/Geometry/InterfaceGeom.c:318 ../src/Geometry/InterfaceGeom.c:428 msgid "Read the last geometry from a Dalton output file" msgstr "" #: ../src/Geometry/InterfaceGeom.c:321 ../src/Geometry/InterfaceGeom.c:452 msgid "Read the first geometry from a Molcas output file" msgstr "" #: ../src/Geometry/InterfaceGeom.c:324 ../src/Geometry/InterfaceGeom.c:454 msgid "Read the last geometry from a Molcas output file" msgstr "" #: ../src/Geometry/InterfaceGeom.c:327 ../src/Geometry/InterfaceGeom.c:465 msgid "Read the first geometry from a Molpro output file" msgstr "" #: ../src/Geometry/InterfaceGeom.c:330 ../src/Geometry/InterfaceGeom.c:467 msgid "Read the last geometry from a Molpro output file" msgstr "" #: ../src/Geometry/InterfaceGeom.c:339 ../src/Geometry/InterfaceGeom.c:439 msgid "Read the first geometry from a Gaussian output file" msgstr "" #: ../src/Geometry/InterfaceGeom.c:342 ../src/Geometry/InterfaceGeom.c:441 msgid "Read the last geometry from a Gaussian output file" msgstr "" #: ../src/Geometry/InterfaceGeom.c:393 msgid "Select a option" msgstr "" #: ../src/Geometry/InterfaceGeom.c:495 msgid " Units : " msgstr "" #: ../src/Geometry/InterfaceGeom.c:550 msgid "Geometry Editor" msgstr "" #: ../src/Geometry/InterfaceGeom.c:553 msgid " Geometry Editor " msgstr "" #: ../src/Geometry/InterfaceGeom.c:596 ../src/Geometry/InterfaceGeom.c:620 #: ../src/Geometry/InterfaceGeom.c:629 msgid "Angstrom" msgstr "" #: ../src/Geometry/InterfaceGeom.c:597 ../src/Geometry/InterfaceGeom.c:622 #: ../src/Geometry/InterfaceGeom.c:627 msgid "Bohr" msgstr "" #: ../src/Geometry/InterfaceGeom.c:687 msgid "Sorry, I cannot read this file\n" msgstr "" #: ../src/Geometry/InterfaceGeom.c:695 ../src/OpenGL/AnimationMD.c:1860 msgid "Read geometries" msgstr "" #: ../src/Geometry/Measure.c:743 msgid "Distances (Angstroms)" msgstr "" #: ../src/Geometry/Measure.c:764 msgid "Angles (Degrees)" msgstr "" #: ../src/Geometry/Measure.c:786 msgid "Dihedral (Degrees)" msgstr "" #: ../src/Geometry/Measure.c:806 msgid "Move group" msgstr "" #: ../src/Geometry/Measure.c:817 msgid "Averaged distance (Angstroms)" msgstr "" #: ../src/Geometry/MenuToolBarGeom.c:400 msgid "Read Geomtries From Mopac Scan Output file" msgstr "" #: ../src/Geometry/MenuToolBarGeom.c:402 msgid "Read Geomtries From Mopac IRC Output file" msgstr "" #: ../src/Geometry/MenuToolBarGeom.c:418 msgid "Load Geom. Conv. From FireFly Output file" msgstr "" #: ../src/Geometry/MenuToolBarGeom.c:420 msgid "Load Geom. From Gamess IRC file" msgstr "" #: ../src/Geometry/MenuToolBarGeom.c:422 msgid "Load Geom. From FireFly IRC file" msgstr "" #: ../src/Geometry/MenuToolBarGeom.c:428 msgid "Load Geom. Conv. From Molpac aux file" msgstr "" #: ../src/Geometry/MenuToolBarGeom.c:432 msgid "Load Geom. Conv. From ORCA output file" msgstr "" #: ../src/Geometry/MenuToolBarGeom.c:435 msgid "Load Geom. Conv. From Q-Chem output file" msgstr "" #: ../src/Geometry/MenuToolBarGeom.c:572 msgid "Save geometry in Gabedit file" msgstr "" #: ../src/Geometry/MenuToolBarGeom.c:708 ../src/OpenGL/MenuToolBarGL.c:679 #: ../src/OpenGL/MenuToolBarGL.c:689 msgid "Save image in png file format" msgstr "" #: ../src/Geometry/MenuToolBarGeom.c:713 ../src/OpenGL/MenuToolBarGL.c:684 msgid "Save image in tif file format" msgstr "" #: ../src/Geometry/MenuToolBarGeom.c:1762 #, c-format msgid "Error menu is not a menu\n" msgstr "" #: ../src/Geometry/OpenBabel.c:638 msgid "Input File" msgstr "" #: ../src/Geometry/OpenBabel.c:657 msgid "Convert" msgstr "" #: ../src/Geometry/OpenBabel.c:664 msgid "Center " msgstr "" #: ../src/Geometry/OpenBabel.c:672 msgid "H atoms" msgstr "" #: ../src/Geometry/OpenBabel.c:678 msgid "Add " msgstr "" #: ../src/Geometry/OpenBabel.c:684 msgid "Delete" msgstr "" #: ../src/Geometry/OpenBabel.c:709 msgid "Outpout File" msgstr "" #: ../src/Geometry/OpenBabel.c:845 msgid "Read geometry (using Open Babel)" msgstr "" #: ../src/Geometry/OpenBabel.c:846 msgid "Save geometry (using Open Babel)" msgstr "" #: ../src/Geometry/OpenBabel.c:853 msgid " Read geometry with Open Babel " msgstr "" #: ../src/Geometry/OpenBabel.c:854 msgid " Save geometry using Open Babel " msgstr "" #: ../src/Geometry/PersonalFragments.c:206 #, c-format msgid "" "Sorry, I can not add this group\n" "%s is available." msgstr "" #: ../src/Geometry/PersonalFragments.c:247 msgid "New Group" msgstr "" #: ../src/Geometry/PersonalFragments.c:263 msgid "Group Name : " msgstr "" #: ../src/Geometry/PersonalFragments.c:373 msgid "Sorry, no group to delete." msgstr "" #: ../src/Geometry/PersonalFragments.c:381 msgid "Delete a Group" msgstr "" #: ../src/Geometry/PersonalFragments.c:398 msgid "Group to delete : " msgstr "" #: ../src/Geometry/PersonalFragments.c:466 msgid "Sorry, number of atom to delete can not = number of atom to bond to." msgstr "" #: ../src/Geometry/PersonalFragments.c:476 msgid "" "Sorry, number of atom to delete can not = number of atom used for set angle." msgstr "" #: ../src/Geometry/PersonalFragments.c:488 msgid "" "Sorry, number of atom to bond to can not = number of atom used for set " "angle." msgstr "" #: ../src/Geometry/PersonalFragments.c:588 #: ../src/Geometry/PersonalFragments.c:801 msgid "Sorry, no group available." msgstr "" #: ../src/Geometry/PersonalFragments.c:598 msgid "Sorry, number of atoms = 0." msgstr "" #: ../src/Geometry/PersonalFragments.c:607 msgid "New Fragment" msgstr "" #: ../src/Geometry/PersonalFragments.c:626 msgid " Group Name " msgstr "" #: ../src/Geometry/PersonalFragments.c:634 msgid " Fragment Name " msgstr "" #: ../src/Geometry/PersonalFragments.c:642 msgid " Number of atoms to delete " msgstr "" #: ../src/Geometry/PersonalFragments.c:650 msgid " Number of atoms to bond to " msgstr "" #: ../src/Geometry/PersonalFragments.c:658 msgid " Number of atoms for set angle " msgstr "" #: ../src/Geometry/PersonalFragments.c:814 msgid "Sorry, no fragment available." msgstr "" #: ../src/Geometry/PersonalFragments.c:824 msgid "Remove a Fragment" msgstr "" #: ../src/Geometry/PersonalFragments.c:840 msgid "Group Name : " msgstr "" #: ../src/Geometry/PersonalFragments.c:846 msgid "Fragment to delete : " msgstr "" #: ../src/Geometry/PersonalFragments.c:986 #, c-format msgid "Sorry, I can not create \"%s\" file" msgstr "" #: ../src/Geometry/PersonalFragments.c:1004 #, c-format msgid "Sorry, I can not read \"%s\" file" msgstr "" #: ../src/Geometry/Povray.c:909 msgid "" "\n" "Sorry, The number of atoms should be >0\n" msgstr "" #: ../src/Geometry/Povray.c:938 ../src/Geometry/Povray.c:1110 #, c-format msgid "" "\n" "Sorry, I cannot create the %s file\n" msgstr "" #: ../src/Geometry/Povray.c:1099 #, c-format msgid "" "\n" "2 files was created :\n" " -\"%s\" a povray input file\n" " -\"%s\" a batch file for run povray\n" msgstr "" #: ../src/Geometry/ResultsAnalise.c:105 msgid " Energy(KCal/Mol) " msgstr "" #: ../src/Geometry/ResultsAnalise.c:106 msgid " Gradient " msgstr "" #: ../src/Geometry/ResultsAnalise.c:135 ../src/Geometry/ResultsAnalise.c:292 #: ../src/Geometry/ResultsAnalise.c:419 ../src/Geometry/ResultsAnalise.c:555 #: ../src/Geometry/ResultsAnalise.c:724 ../src/Geometry/ResultsAnalise.c:836 #: ../src/Geometry/ResultsAnalise.c:986 ../src/Geometry/ResultsAnalise.c:1109 #: ../src/Geometry/ResultsAnalise.c:1245 ../src/Geometry/ResultsAnalise.c:1342 #: ../src/Geometry/ResultsAnalise.c:1519 ../src/Geometry/ResultsAnalise.c:1664 #: ../src/Geometry/ResultsAnalise.c:1802 ../src/Geometry/ResultsAnalise.c:1923 #: ../src/Geometry/ResultsAnalise.c:2129 #: ../src/OpenGL/AnimationGeomConv.c:1037 #: ../src/OpenGL/AnimationGeomConv.c:1282 #: ../src/OpenGL/AnimationGeomConv.c:2585 #: ../src/OpenGL/AnimationGeomConv.c:2721 #: ../src/OpenGL/AnimationGeomConv.c:2867 #: ../src/OpenGL/AnimationGeomConv.c:3011 #: ../src/OpenGL/AnimationGeomConv.c:3155 #: ../src/OpenGL/AnimationGeomConv.c:3302 #: ../src/OpenGL/AnimationGeomConv.c:3451 #, c-format msgid " Error : I can not open file %s\n" msgstr "" #: ../src/Geometry/ResultsAnalise.c:518 ../src/Geometry/ResultsAnalise.c:783 #: ../src/Geometry/ResultsAnalise.c:806 ../src/Geometry/ResultsAnalise.c:954 #: ../src/Geometry/ResultsAnalise.c:1218 ../src/Geometry/ResultsAnalise.c:1465 #: ../src/Geometry/ResultsAnalise.c:1487 ../src/Geometry/ResultsAnalise.c:1630 msgid " Energy " msgstr "" #: ../src/Geometry/ResultsAnalise.c:519 msgid " Max Gradient " msgstr "" #: ../src/Geometry/ResultsAnalise.c:520 msgid " Max Displacement " msgstr "" #: ../src/Geometry/ResultsAnalise.c:697 msgid "Geometries for an xyz file" msgstr "" #: ../src/Geometry/ResultsAnalise.c:701 msgid " Geometry number " msgstr "" #: ../src/Geometry/ResultsAnalise.c:784 ../src/Geometry/ResultsAnalise.c:1631 msgid " Force Max " msgstr "" #: ../src/Geometry/ResultsAnalise.c:785 ../src/Geometry/ResultsAnalise.c:1632 msgid " Force RMS " msgstr "" #: ../src/Geometry/ResultsAnalise.c:786 ../src/Geometry/ResultsAnalise.c:1467 #: ../src/Geometry/ResultsAnalise.c:1633 msgid " Dep. Max " msgstr "" #: ../src/Geometry/ResultsAnalise.c:787 ../src/Geometry/ResultsAnalise.c:1634 msgid " Dep. RMS " msgstr "" #: ../src/Geometry/ResultsAnalise.c:807 msgid " Convergence " msgstr "" #: ../src/Geometry/ResultsAnalise.c:955 ../src/Geometry/ResultsAnalise.c:1489 msgid " MAX Gradient " msgstr "" #: ../src/Geometry/ResultsAnalise.c:956 msgid " RMS Gradient " msgstr "" #: ../src/Geometry/ResultsAnalise.c:1466 msgid " Gradient Max " msgstr "" #: ../src/Geometry/ResultsAnalise.c:1488 msgid " RMS Gradient" msgstr "" #: ../src/Geometry/ResultsAnalise.c:2606 msgid "Update" msgstr "" #: ../src/Geometry/ResultsAnalise.c:2613 msgid "Go to end" msgstr "" #: ../src/Geometry/ResultsAnalise.c:2619 msgid "Update/end" msgstr "" #: ../src/Geometry/ResultsAnalise.c:2631 msgid "Dens. Orb." msgstr "" #: ../src/Geometry/ResultsAnalise.c:2647 msgid "Password : " msgstr "" #: ../src/Geometry/ResultsAnalise.c:2668 msgid "Get All files" msgstr "" #: ../src/Geometry/ResultsAnalise.c:2678 msgid "Get log file" msgstr "" #: ../src/Geometry/ResultsAnalise.c:2685 msgid "Get out file" msgstr "" #: ../src/Geometry/ResultsAnalise.c:2693 msgid "Get aux. files" msgstr "" #: ../src/Geometry/Symmetry.c:401 msgid "Inertie Moment/Rotational Constants" msgstr "" #: ../src/Geometry/Symmetry.c:456 msgid "Dipole at principal axis" msgstr "" #: ../src/Geometry/Symmetry.c:548 ../src/Molcas/MolcasGateWay.c:1536 #: ../src/Symmetry/MoleculeSymmetryInterface.c:167 #: ../src/Symmetry/MoleculeSymmetryInterface.c:282 msgid "Sorry Number of atoms is not positive" msgstr "" #: ../src/Geometry/Symmetry.c:555 msgid "Geometry at principal axis" msgstr "" #: ../src/IsotopeDistribution/IsotopeDistributionCalculator.c:261 #: ../src/IsotopeDistribution/IsotopeDistributionCalculator.c:275 #: ../src/IsotopeDistribution/IsotopeDistributionCalculator.c:286 msgid "No enough memory" msgstr "" #: ../src/IsotopeDistribution/IsotopeDistributionCalculator.c:314 #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1306 #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1346 #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1358 #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1375 #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1395 #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1420 #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1648 #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1669 #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:3360 #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:3374 #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:3388 #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:3406 #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:3459 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3537 msgid "Calculation canceled" msgstr "" #: ../src/IsotopeDistribution/IsotopeDistributionCalculator.c:326 msgid "Number of elements can not been <1 !" msgstr "" #: ../src/IsotopeDistribution/IsotopeDistributionCalculator.c:358 #: ../src/IsotopeDistribution/IsotopeDistributionCalculator.c:359 msgid "Formula not valid" msgstr "" #: ../src/IsotopeDistribution/IsotopeDistributionCalculator.c:360 msgid "The first character of your formula is a lower case !" msgstr "" #: ../src/IsotopeDistribution/IsotopeDistributionCalculator.c:361 msgid "The first character of your formula is a digit !" msgstr "" #: ../src/IsotopeDistribution/IsotopeDistributionCalculator.c:438 msgid "Your formula is not valid !" msgstr "" #: ../src/IsotopeDistribution/IsotopeDistributionCalculator.c:446 #, c-format msgid "%s is not a known atom for Gabedit !" msgstr "" #: ../src/IsotopeDistribution/IsotopeDistributionCalculatorDlg.c:464 #, c-format msgid "" "Sum of frac. abund -1 = \n" " %0.8e\n" msgstr "" #: ../src/IsotopeDistribution/IsotopeDistributionCalculatorDlg.c:532 msgid "Isotope distribution calculation" msgstr "" #: ../src/IsotopeDistribution/IsotopeDistributionCalculatorDlg.c:549 msgid "Input" msgstr "" #: ../src/IsotopeDistribution/IsotopeDistributionCalculatorDlg.c:590 msgid "Calculate" msgstr "" #: ../src/IsotopeDistribution/IsotopeDistributionCalculatorDlg.c:646 msgid "Clear" msgstr "" #: ../src/IsotopeDistribution/IsotopeDistributionCalculatorDlg.c:683 msgid "Add peaks" msgstr "" #: ../src/IsotopeDistribution/IsotopeDistributionCalculatorDlg.c:693 msgid "Half-Width" msgstr "" #: ../src/IsotopeDistribution/IsotopeDistributionCalculatorDlg.c:705 msgid "Add convoluted curve" msgstr "" #: ../src/IsotopeDistribution/IsotopeDistributionCalculatorDlg.c:715 #: ../src/Spectrum/SpectrumWin.c:1015 msgid "Lorentzian lineshape" msgstr "" #: ../src/IsotopeDistribution/IsotopeDistributionCalculatorDlg.c:722 #: ../src/Spectrum/SpectrumWin.c:1019 msgid "Gaussian lineshape" msgstr "" #: ../src/MPQC/MPQC.c:184 msgid "MPQC input" msgstr "" #: ../src/MPQC/MPQC.c:187 msgid " MPQC input " msgstr "" #: ../src/MPQC/MPQCBasis.c:85 ../src/QChem/QChemBasis.c:87 #: ../src/QChem/QChemBasis.c:118 msgid "" "Sorry, I can not obtain one type of bases for all atoms of your molecule" msgstr "" #: ../src/MPQC/MPQCBasis.c:197 ../src/Orca/OrcaBasis.c:1170 #: ../src/QChem/QChemBasis.c:230 msgid "Auxiliary basis" msgstr "" #: ../src/MPQC/MPQCBasisLibrary.c:638 ../src/Molpro/MolproBasisLibrary.c:685 msgid "Sorry this atom is available" msgstr "" #: ../src/MPQC/MPQCBasisLibrary.c:750 ../src/Molpro/MolproBasisLibrary.c:796 #, c-format msgid "New Atom" msgstr "" #: ../src/MPQC/MPQCBasisLibrary.c:769 ../src/Molpro/MolproBasisLibrary.c:815 msgid " Atom Symbol : " msgstr "" #: ../src/MPQC/MPQCBasisLibrary.c:828 ../src/Molpro/MolproBasisLibrary.c:873 msgid "Sorry this basis is already available" msgstr "" #: ../src/MPQC/MPQCBasisLibrary.c:885 ../src/Molpro/MolproBasisLibrary.c:933 #, c-format msgid "New Basis for %s atom :" msgstr "" #: ../src/MPQC/MPQCBasisLibrary.c:906 ../src/MPQC/MPQCBasisLibrary.c:1023 msgid " Basis Name " msgstr "" #: ../src/MPQC/MPQCBasisLibrary.c:1002 #, c-format msgid "Edit Basis for %s atom :" msgstr "" #: ../src/MPQC/MPQCBasisLibrary.c:1148 msgid "Atom" msgstr "" #: ../src/MPQC/MPQCBasisLibrary.c:1148 msgid "Basis Name" msgstr "" #: ../src/MPQC/MPQCBasisLibrary.c:1231 ../src/MPQC/MPQCBasisLibrary.c:1255 #: ../src/MPQC/MPQCBasisLibrary.c:1262 ../src/MPQC/MPQCBasisLibrary.c:1278 #: ../src/MPQC/MPQCBasisLibrary.c:1285 #, c-format msgid "" "Sorry the mpqcbasis is corrupted.\n" "Please reinstall gabedit\n" msgstr "" #: ../src/MPQC/MPQCBasisLibrary.c:1308 msgid "Set MPQC Basis" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:47 msgid "Perdew-Burke-Ernzerhof (PBE) correlation functional." msgstr "" #: ../src/MPQC/MPQCFunctionals.c:51 msgid "Perdew-Wang 1991 correlation functional" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:55 ../src/MPQC/MPQCFunctionals.c:59 msgid "Perdew 1986 (P86) correlation functional" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:64 msgid "VWN1 local correlation term (from Vosko, Wilk, and Nusair)" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:68 msgid "VWN1(RPA) local correlation term (from Vosko, Wilk, and Nusair)" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:72 msgid "VWN2 local correlation term (from Vosko, Wilk, and Nusair)" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:76 msgid "VWN3 local correlation term (from Vosko, Wilk, and Nusair)" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:80 msgid "VWN4 local correlation term (from Vosko, Wilk, and Nusair)" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:84 msgid "VWN5 local correlation term (from Vosko, Wilk, and Nusair)" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:88 msgid "PW92 local (LSDA) correlation term" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:92 msgid "PZ81 local (LSDA) correlation functional" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:96 msgid "Lee, Yang, and Parr correlation functional" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:100 msgid "Hartree-Fock Exchange" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:104 msgid "Xalpha exchange functional" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:108 msgid "Slater Exchange term" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:112 msgid "Becke's 1988 exchange functional" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:116 msgid "Perdew-Burke-Ernzerhof (PBE) exchange functional" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:120 msgid "Perdew-Wang 1986 (PW86) Exchange functiona" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:124 msgid "Perdew-Wang 1991 exchange functional" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:128 ../src/MPQC/MPQCFunctionals.c:132 #: ../src/MPQC/MPQCFunctionals.c:136 msgid "modified 1991 Perdew-Wang exchange functional" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:140 msgid "Gill 1996 (G96) exchange functional" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:500 msgid "Exchange" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:501 msgid "Correlation" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:558 msgid "MPQC Sum Density functionals" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:562 msgid " MPQC Sum. Dens. " msgstr "" #: ../src/MPQC/MPQCFunctionals.c:570 msgid "Exchange functionals" msgstr "" #: ../src/MPQC/MPQCFunctionals.c:573 msgid "Correlation functionals" msgstr "" #: ../src/MPQC/MPQCGuessWaveFunction.c:385 ../src/MPQC/MPQCMole.c:568 #: ../src/OpenGL/IntegralOrbitals.c:1184 ../src/OpenGL/IntegralOrbitals.c:1783 #: ../src/OpenGL/IntegralOrbitals.c:2248 ../src/Orca/OrcaKeywords.c:1156 msgid "Method" msgstr "" #: ../src/MPQC/MPQCGuessWaveFunction.c:435 msgid "Parameters for computing the guess wave function" msgstr "" #: ../src/MPQC/MPQCGuessWaveFunction.c:447 msgid "Starting from core Hamiltonian guess." msgstr "" #: ../src/MPQC/MPQCLib.c:52 ../src/MPQC/MPQCLib.c:78 ../src/MPQC/MPQCLib.c:126 #: ../src/MPQC/MPQCLib.c:179 #, c-format msgid "" "Sorry the mpqcBasis is corrupted.\n" "Please reinstall gabedit\n" msgstr "" #: ../src/MPQC/MPQCMole.c:413 ../src/MPQC/MPQCMole.c:430 #: ../src/MPQC/MPQCMole.c:624 msgid "Your functional" msgstr "" #: ../src/MPQC/MPQCMole.c:458 msgid " This is :\n" msgstr "" #: ../src/MPQC/MPQCMole.c:608 msgid "Functional" msgstr "" #: ../src/MPQC/MPQCMole.c:618 msgid "What this ?" msgstr "" #: ../src/MPQC/MPQCMole.c:652 msgid "Parameters for computing the molecule's energy" msgstr "" #: ../src/MPQC/MPQCMolecule.c:454 msgid "Symmetry" msgstr "" #: ../src/MPQC/MPQCMolecule.c:472 msgid "Auto detection by MPQC" msgstr "" #: ../src/MPQC/MPQCOptimization.c:152 msgid " Max iterations" msgstr "" #: ../src/MPQC/MPQCOptimization.c:184 msgid "Type of calcul" msgstr "" #: ../src/MPQC/MPQCOptimization.c:205 msgid "Optimization" msgstr "" #: ../src/MPQC/MPQCOptimization.c:214 msgid "Transition state" msgstr "" #: ../src/MPQC/MPQCProperties.c:80 msgid "Print the natural population analysis " msgstr "" #: ../src/MPQC/MPQCProperties.c:86 msgid "Print the natural atomic orbitals" msgstr "" #: ../src/MPQC/MPQCProperties.c:92 msgid "Calcul Frequencies" msgstr "" #: ../src/Molcas/Molcas.c:181 msgid "Molcas input" msgstr "" #: ../src/Molcas/Molcas.c:183 msgid " Molcas input " msgstr "" #: ../src/Molcas/MolcasBasis.c:192 msgid "List of available basis" msgstr "" #: ../src/Molcas/MolcasBasis.c:343 #, c-format msgid "Atom n %d is selected " msgstr "" #: ../src/Molcas/MolcasBasis.c:393 msgid "You must initially define your geometry." msgstr "" #: ../src/Molcas/MolcasBasis.c:401 msgid "Molcas Basis" msgstr "" #: ../src/Molcas/MolcasBasis.c:403 msgid " Molcas Basis " msgstr "" #: ../src/Molcas/MolcasBasis.c:424 ../src/Molpro/MInterfaceBasis.c:1163 msgid "Please select a atom " msgstr "" #: ../src/Molcas/MolcasGateWay.c:384 msgid "Sorry, No Symmetry" msgstr "" #: ../src/Molcas/MolcasGateWay.c:1204 #, c-format msgid "Sorry, I can not read geometry from %s file" msgstr "" #: ../src/Molcas/MolcasGateWay.c:1444 #, c-format msgid "Group symbol = %s\n" msgstr "" #: ../src/Molcas/MolcasGateWay.c:1447 #: ../src/Symmetry/MoleculeSymmetryInterface.c:60 #, c-format msgid "Tolerance for principal axis classification : %0.5f\n" msgstr "" #: ../src/Molcas/MolcasGateWay.c:1452 #, c-format msgid "" "Precision for atom position : Min distance between atoms\n" "\n" msgstr "" #: ../src/Molcas/MolcasGateWay.c:1454 #: ../src/Symmetry/MoleculeSymmetryInterface.c:63 #, c-format msgid "" "Precision for atom position : %0.5f\n" "\n" msgstr "" #: ../src/Molcas/MolcasGateWay.c:1458 #, c-format msgid "" "Total number of electrons : %d\n" "\n" msgstr "" #: ../src/Molcas/MolcasGateWay.c:1464 #: ../src/Symmetry/MoleculeSymmetryInterface.c:87 #, c-format msgid "Generators : " msgstr "" #: ../src/Molcas/MolcasGateWay.c:1483 #, c-format msgid "Type n %d\n" msgstr "" #: ../src/Molcas/MolcasGateWay.c:1485 #, c-format msgid "Basis = %s\n" msgstr "" #: ../src/Molcas/MolcasGateWay.c:1488 #, c-format msgid "Number of atoms (without reduction ) for %s = %d \n" msgstr "" #: ../src/Molcas/MolcasGateWay.c:1492 #, c-format msgid "Number of atoms (with reduction ) for %s = %d \n" msgstr "" #: ../src/Molcas/MolcasGateWay.c:1541 #: ../src/Symmetry/MoleculeSymmetryInterface.c:308 msgid "" "Point group, abelian point group & Geometry with reduction (using abelian " "group)" msgstr "" #: ../src/Molcas/MolcasGateWay.c:1580 msgid "Find maximum" msgstr "" #: ../src/Molcas/MolcasGateWay.c:1581 msgid "C1 group" msgstr "" #: ../src/Molcas/MolcasGateWay.c:1585 msgid "Geometry& basis" msgstr "" #: ../src/Molcas/MolcasGateWay.c:1597 msgid "Full symmetry" msgstr "" #: ../src/Molcas/MolcasGateWay.c:1606 msgid "Fixed symmetry" msgstr "" #: ../src/Molcas/MolcasGateWay.c:1613 msgid " Tolerance " msgstr "" #: ../src/Molcas/MolcasGateWay.c:1619 msgid "Without symmetry" msgstr "" #: ../src/Molcas/MolcasGateWay.c:1627 msgid " Show result " msgstr "" #: ../src/Molcas/MolcasGateWay.c:1634 msgid " Set Basis " msgstr "" #: ../src/Molcas/MolcasLib.c:71 ../src/Molcas/MolcasLib.c:115 #, c-format msgid "" "Sorry the molcasbasis is corrupted.\n" "Please reinstall gabedit\n" msgstr "" #: ../src/Molcas/MolcasOptimization.c:145 msgid "Number of iterations : " msgstr "" #: ../src/Molcas/MolcasOptimization.c:149 msgid "Type of caclul" msgstr "" #: ../src/Molcas/MolcasOptimization.c:167 msgid "Optimization of geometry" msgstr "" #: ../src/Molcas/MolcasScf.c:326 #, c-format msgid "Number Of Electrons = %d" msgstr "" #: ../src/Molcas/MolcasScf.c:402 msgid "Type : " msgstr "" #: ../src/Molcas/MolcasScf.c:403 msgid "Method : " msgstr "" #: ../src/Molcas/MolcasScf.c:412 #: ../src/MolecularMechanics/SetPDBTemplate.c:497 msgid "Charge : " msgstr "" #: ../src/Molcas/MolcasScf.c:420 msgid "2* Z Spin : " msgstr "" #: ../src/Molcas/MolcasScf.c:427 msgid "SCF Program" msgstr "" #: ../src/Molcas/MolcasVariables.c:60 ../src/Molcas/MolcasVariables.c:152 #: ../src/Molcas/MolcasVariables.c:161 msgid "largest possible" msgstr "" #: ../src/Molcas/MolcasVariables.c:74 ../src/Molcas/MolcasVariables.c:166 #: ../src/Molcas/MolcasVariables.c:175 ../src/Molcas/MolcasVariables.c:251 msgid "Limited to 2 GBytes" msgstr "" #: ../src/Molcas/MolcasVariables.c:248 msgid "The largest possible" msgstr "" #: ../src/Molcas/MolcasVariables.c:265 msgid "Molcas system variables" msgstr "" #: ../src/MolecularMechanics/ConjugateGradient.c:190 #: ../src/MolecularMechanics/ConjugateGradient.c:400 #: ../src/MolecularMechanics/ConjugateGradient.c:497 #, c-format msgid "gradient = %f " msgstr "" #: ../src/MolecularMechanics/ConjugateGradient.c:213 #: ../src/MolecularMechanics/ConjugateGradient.c:314 #: ../src/MolecularMechanics/ConjugateGradient.c:420 #: ../src/MolecularMechanics/ConjugateGradient.c:517 #, c-format msgid "Gradient = %f Energy = %f (Kcal/mol) " msgstr "" #: ../src/MolecularMechanics/MolecularDynamics.c:157 #: ../src/MolecularMechanics/MolecularDynamics.c:373 #: ../src/SemiEmpirical/SemiEmpiricalMD.c:158 #: ../src/SemiEmpirical/SemiEmpiricalMD.c:374 #, c-format msgid "" "MD Heating: %0.2f fs, T = %0.2f K T(t) = %0.2f Kin = %0.4f Pot = %0.4f Tot " "= %0.4f" msgstr "" #: ../src/MolecularMechanics/MolecularDynamics.c:188 #: ../src/MolecularMechanics/MolecularDynamics.c:405 #: ../src/SemiEmpirical/SemiEmpiricalMD.c:189 #: ../src/SemiEmpirical/SemiEmpiricalMD.c:406 #, c-format msgid "" "MD Equilibrium: %0.2f fs, T = %0.2f K T(t) = %0.2f K Kin = %0.4f Pot = %" "0.4f Tot = %0.4f" msgstr "" #: ../src/MolecularMechanics/MolecularDynamics.c:210 #: ../src/MolecularMechanics/MolecularDynamics.c:239 #: ../src/MolecularMechanics/MolecularDynamics.c:251 #: ../src/SemiEmpirical/SemiEmpiricalMD.c:131 #: ../src/SemiEmpirical/SemiEmpiricalMD.c:211 #: ../src/SemiEmpirical/SemiEmpiricalMD.c:240 #: ../src/SemiEmpirical/SemiEmpiricalMD.c:252 #, c-format msgid "Geometry selected Potential energy = %0.4f" msgstr "" #: ../src/MolecularMechanics/MolecularDynamics.c:225 #: ../src/MolecularMechanics/MolecularDynamics.c:437 #: ../src/SemiEmpirical/SemiEmpiricalMD.c:226 #: ../src/SemiEmpirical/SemiEmpiricalMD.c:438 #, c-format msgid "" "MD Running: %0.2f fs, T = %0.2f K T(t) = %0.2f K Kin = %0.4f Pot = %0.4f " "Tot = %0.4f" msgstr "" #: ../src/MolecularMechanics/MolecularDynamics.c:272 #: ../src/MolecularMechanics/MolecularDynamics.c:489 #: ../src/SemiEmpirical/SemiEmpiricalMD.c:273 #: ../src/SemiEmpirical/SemiEmpiricalMD.c:490 #, c-format msgid "" "End of MD Simulation. Gradient = %f Ekin = %f (Kcal/mol) EPot = %0.4f ETot " "= %0.4f T(t) = %0.2f" msgstr "" #: ../src/MolecularMechanics/MolecularDynamics.c:467 #: ../src/SemiEmpirical/SemiEmpiricalMD.c:468 #, c-format msgid "" "MD Cooling: %0.2f fs, T = %0.2f K T(t) = %0.2f K Kin = %0.4f Pot = %0.4f " "Tot = %0.4f" msgstr "" #: ../src/MolecularMechanics/MolecularDynamics.c:1034 #: ../src/SemiEmpirical/SemiEmpiricalMD.c:1150 #, c-format msgid "Rattle first portion : Warning, distance constraints not satisfied\n" msgstr "" #: ../src/MolecularMechanics/MolecularDynamics.c:1145 #: ../src/SemiEmpirical/SemiEmpiricalMD.c:1228 #, c-format msgid "Rattle second portion : Warning, velocity constraints not satisfied\n" msgstr "" #: ../src/MolecularMechanics/MolecularMechanics.c:675 #, c-format msgid "number Of RattleConstraintsTerms = %d\n" msgstr "" #: ../src/MolecularMechanics/MolecularMechanics.c:676 #, c-format msgid "number free degrees = %d\n" msgstr "" #: ../src/MolecularMechanics/MolecularMechanics.c:723 #, c-format msgid "**** couldn't find stretch parameters for %s-%s(%d-%d) " msgstr "" #: ../src/MolecularMechanics/MolecularMechanics.c:755 #, c-format msgid "-> I set force to %f and equilibrium distance to %f\n" msgstr "" #: ../src/MolecularMechanics/MolecularMechanics.c:805 #, c-format msgid "**** couldn't find bend parameters for %s-%s-%s " msgstr "" #: ../src/MolecularMechanics/MolecularMechanics.c:824 #, c-format msgid "-> I set force to %f and equilibrium angle to %f\n" msgstr "" #: ../src/MolecularMechanics/MolecularMechanics.c:1065 #, c-format msgid "**** couldn't find non bonded parameters for %s \n" msgstr "" #: ../src/MolecularMechanics/MolecularMechanics.c:1201 #, c-format msgid "**** couldn't find pair wise parameters for %s-%s\n" msgstr "" #: ../src/MolecularMechanics/MolecularMechanics.c:2544 #: ../src/MolecularMechanics/MolecularMechanics.c:2545 #: ../src/MolecularMechanics/MolecularMechanics.c:2576 #: ../src/MolecularMechanics/MolecularMechanics.c:2577 msgid "Setting of Parameters ..." msgstr "" #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1053 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3605 msgid "" "_*.mop\n" "\tFiles for a post processing by Mopac\n" "\n" msgstr "" #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1061 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3613 msgid "" "_*.com\n" "\tFiles for a post processing by Gaussian\n" "\n" msgstr "" #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1069 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3621 msgid "" "P_*.inp\n" "\tFiles for a post processing by FireFly\n" "\n" msgstr "" #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1437 msgid "" "\n" "\tGeometries selected and optimized using your MM potentials" msgstr "" #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1438 #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1455 #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1477 #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1499 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3556 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3576 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3595 msgid "" "\n" "\tTo read this file : 'Read/Gabedit file'\n" "\n" msgstr "" #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1454 msgid "" "\n" "\tGeometries after minimization by PM6/Mopac" msgstr "" #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1476 msgid "" "\n" "\tGeometries after minimization by AM1/Mopac" msgstr "" #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:1498 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3575 msgid "" "\n" "\tGeometries after minimization by FireFly" msgstr "" #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:3474 #, c-format msgid "Gradient Norm = %f energy = %f(KCal/mol)" msgstr "" #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:3578 #: ../src/MolecularMechanics/MolecularMechanicsDlg.c:3579 msgid "Gradient" msgstr "" #: ../src/MolecularMechanics/Molecule.c:514 #: ../src/MolecularMechanics/Molecule.c:515 #: ../src/SemiEmpirical/MoleculeSE.c:339 ../src/SemiEmpirical/MoleculeSE.c:340 msgid "Establishing connectivity : 2 connections..." msgstr "" #: ../src/MolecularMechanics/Molecule.c:520 #: ../src/MolecularMechanics/Molecule.c:521 #: ../src/SemiEmpirical/MoleculeSE.c:345 ../src/SemiEmpirical/MoleculeSE.c:346 msgid "Establishing connectivity : 3 connections..." msgstr "" #: ../src/MolecularMechanics/Molecule.c:529 #: ../src/MolecularMechanics/Molecule.c:530 msgid "Establishing connectivity : 4 connections..." msgstr "" #: ../src/MolecularMechanics/Molecule.c:538 #: ../src/MolecularMechanics/Molecule.c:539 msgid "Establishing connectivity : non bonded ..." msgstr "" #: ../src/MolecularMechanics/QuasiNewton.c:124 #: ../src/MolecularMechanics/QuasiNewton.c:139 #, c-format msgid "Gradient = %f energy = %f " msgstr "" #: ../src/MolecularMechanics/QuasiNewton.c:425 #, c-format msgid "The search direction is not a descent direction." msgstr "" #: ../src/MolecularMechanics/QuasiNewton.c:766 #, c-format msgid "Improper input parameters (n or m are not positive.)" msgstr "" #: ../src/MolecularMechanics/QuasiNewton.c:773 #, c-format msgid "lbfgs: gtol is less than or equal to 0.0001.It has been reset to 0.9." msgstr "" #: ../src/MolecularMechanics/QuasiNewton.c:792 #: ../src/MolecularMechanics/QuasiNewton.c:858 #, c-format msgid "" "The %d-th diagonal element of the inverse hessian approximation is not " "positive." msgstr "" #: ../src/MolecularMechanics/QuasiNewton.c:928 #, c-format msgid "" "Line search failed. See documentation of routine mcsrch.\n" " Error return of line search: info = %d Possible causes:\n" " function or gradient are incorrect, or incorrect tolerances.\n" msgstr "" #: ../src/MolecularMechanics/SetPDBTemplate.c:335 msgid "The value for 'charge' must be a number." msgstr "" #: ../src/MolecularMechanics/SetPDBTemplate.c:364 #, c-format msgid "" "Sorry, I can not add this pdb type\n" "%s is available." msgstr "" #: ../src/MolecularMechanics/SetPDBTemplate.c:443 msgid "Residue Name : " msgstr "" #: ../src/MolecularMechanics/SetPDBTemplate.c:461 msgid "PDB Type : " msgstr "" #: ../src/MolecularMechanics/SetPDBTemplate.c:476 #: ../src/MolecularMechanics/SetPDBTemplate.c:480 msgid "MM Type :" msgstr "" #: ../src/MolecularMechanics/SetPDBTemplate.c:588 #, c-format msgid "Do you want to really delete \"%s\" residue ?" msgstr "" #: ../src/MolecularMechanics/SetPDBTemplate.c:674 msgid "New Residue" msgstr "" #: ../src/MolecularMechanics/SetPDBTemplate.c:681 msgid "Edit Type" msgstr "" #: ../src/MolecularMechanics/SetPDBTemplate.c:687 msgid "New Type" msgstr "" #: ../src/MolecularMechanics/SetPDBTemplate.c:1037 msgid "Set PDB Template" msgstr "" #: ../src/MolecularMechanics/SteepestDescent.c:159 #, c-format msgid "Gradient = %f " msgstr "" #: ../src/MolecularMechanics/SteepestDescent.c:177 #, c-format msgid "Gradient = %f Energy = %f (Kcal/mol)" msgstr "" #: ../src/Molpro/MInterfaceBasis.c:135 #, c-format msgid " Get Basis using libmol : %.0f%%" msgstr "" #: ../src/Molpro/MInterfaceBasis.c:137 #, c-format msgid " Get Basis from gabedit basis file : %.0f%%" msgstr "" #: ../src/Molpro/MInterfaceBasis.c:528 #, c-format msgid " Basis for %s " msgstr "" #: ../src/Molpro/MInterfaceBasis.c:755 msgid "" " Sorry,\n" "No basis available for this atom,\n" "Or libmol is not installed in your system." msgstr "" #: ../src/Molpro/MInterfaceBasis.c:757 msgid "" " Sorry,\n" "No basis available for this atom,\n" "Or gabedit molpro basis file is corrupted." msgstr "" #: ../src/Molpro/MInterfaceBasis.c:762 #, c-format msgid "Error : %s" msgstr "" #: ../src/Molpro/MInterfaceBasis.c:850 msgid "Please select a atom" msgstr "" #: ../src/Molpro/MInterfaceBasis.c:934 msgid " No Atom to delete !" msgstr "" #: ../src/Molpro/MInterfaceBasis.c:939 msgid " Please Select Your Atom to delete!" msgstr "" #: ../src/Molpro/MInterfaceBasis.c:945 msgid "Delete Atom" msgstr "" #: ../src/Molpro/MInterfaceBasis.c:949 msgid "" "Are you sure to delete \n" "the selected atom? \n" msgstr "" #: ../src/Molpro/MInterfaceBasis.c:1033 msgid " Selec. atom " msgstr "" #: ../src/Molpro/MInterfaceBasis.c:1097 msgid " New Atom " msgstr "" #: ../src/Molpro/MInterfaceBasis.c:1105 msgid " Delete Atom " msgstr "" #: ../src/Molpro/MInterfaceBasis.c:1124 ../src/Mopac/MopacMolecule.c:986 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:1927 msgid "Atoms" msgstr "" #: ../src/Molpro/MInterfaceComm.c:98 ../src/Molpro/MInterfaceComm.c:802 #: ../src/Molpro/MInterfaceComm.c:947 msgid "Restriction of classes of excitations" msgstr "" #: ../src/Molpro/MInterfaceComm.c:159 msgid "Type of orbital to save" msgstr "" #: ../src/Molpro/MInterfaceComm.c:186 msgid " Type of robital :" msgstr "" #: ../src/Molpro/MInterfaceComm.c:219 ../src/Molpro/MInterfaceComm.c:799 #: ../src/Molpro/MInterfaceComm.c:940 msgid "Additional reference symmetries" msgstr "" #: ../src/Molpro/MInterfaceComm.c:249 msgid "Additional reference symmetries :" msgstr "" #: ../src/Molpro/MInterfaceComm.c:282 msgid "Number of states" msgstr "" #: ../src/Molpro/MInterfaceComm.c:311 msgid " Number of states :" msgstr "" #: ../src/Molpro/MInterfaceComm.c:343 ../src/Molpro/MInterfaceComm.c:873 #: ../src/Molpro/MInterfaceComm.c:1043 msgid "Initial orbital guess" msgstr "" #: ../src/Molpro/MInterfaceComm.c:369 msgid " The type of the initial orbital guess :" msgstr "" #: ../src/Molpro/MInterfaceComm.c:532 #, c-format msgid "File number : " msgstr "" #: ../src/Molpro/MInterfaceComm.c:533 #, c-format msgid "Record number: " msgstr "" #: ../src/Molpro/MInterfaceComm.c:607 #, c-format msgid "In symmetry number %d : " msgstr "" #: ../src/Molpro/MInterfaceComm.c:697 msgid "Wave function symmetry" msgstr "" #: ../src/Molpro/MInterfaceComm.c:749 msgid "Number of electrons :" msgstr "" #: ../src/Molpro/MInterfaceComm.c:751 msgid "Number of the irreducible representation :" msgstr "" #: ../src/Molpro/MInterfaceComm.c:753 msgid "2*Spin :" msgstr "" #: ../src/Molpro/MInterfaceComm.c:778 ../src/Molpro/MInterfaceComm.c:817 #: ../src/Molpro/MInterfaceComm.c:895 ../src/Molpro/MInterfaceComm.c:939 #: ../src/Molpro/MInterfaceComm.c:989 msgid "Defining the state symmetry" msgstr "" #: ../src/Molpro/MInterfaceComm.c:781 ../src/Molpro/MInterfaceComm.c:782 #: ../src/Molpro/MInterfaceComm.c:820 ../src/Molpro/MInterfaceComm.c:821 #: ../src/Molpro/MInterfaceComm.c:897 ../src/Molpro/MInterfaceComm.c:937 #: ../src/Molpro/MInterfaceComm.c:987 msgid "Defining the occupied orbitals" msgstr "" #: ../src/Molpro/MInterfaceComm.c:784 ../src/Molpro/MInterfaceComm.c:785 #: ../src/Molpro/MInterfaceComm.c:823 ../src/Molpro/MInterfaceComm.c:824 #: ../src/Molpro/MInterfaceComm.c:894 ../src/Molpro/MInterfaceComm.c:938 #: ../src/Molpro/MInterfaceComm.c:988 msgid "Defining the closed-shell orbitals" msgstr "" #: ../src/Molpro/MInterfaceComm.c:787 ../src/Molpro/MInterfaceComm.c:788 #: ../src/Molpro/MInterfaceComm.c:826 ../src/Molpro/MInterfaceComm.c:827 #: ../src/Molpro/MInterfaceComm.c:898 ../src/Molpro/MInterfaceComm.c:944 #: ../src/Molpro/MInterfaceComm.c:994 msgid "Defining the Frozen-core orbitals" msgstr "" #: ../src/Molpro/MInterfaceComm.c:790 ../src/Molpro/MInterfaceComm.c:948 msgid "Saving the natural orbitals" msgstr "" #: ../src/Molpro/MInterfaceComm.c:791 msgid "Saving the natural orbital" msgstr "" #: ../src/Molpro/MInterfaceComm.c:793 ../src/Molpro/MInterfaceComm.c:835 #: ../src/Molpro/MInterfaceComm.c:946 ../src/Molpro/MInterfaceComm.c:996 msgid "Defining the number of states in the present symmetry" msgstr "" #: ../src/Molpro/MInterfaceComm.c:796 ../src/Molpro/MInterfaceComm.c:797 #: ../src/Molpro/MInterfaceComm.c:893 ../src/Molpro/MInterfaceComm.c:945 msgid "Defining the orbitals" msgstr "" #: ../src/Molpro/MInterfaceComm.c:829 ../src/Molpro/MInterfaceComm.c:998 msgid "Saving the final orbitals" msgstr "" #: ../src/Molpro/MInterfaceComm.c:830 ../src/Molpro/MInterfaceComm.c:864 #: ../src/Molpro/MInterfaceComm.c:865 ../src/Molpro/MInterfaceComm.c:1042 msgid "Saving the final orbital" msgstr "" #: ../src/Molpro/MInterfaceComm.c:832 ../src/Molpro/MInterfaceComm.c:833 #: ../src/Molpro/MInterfaceComm.c:995 msgid "Defining the starting guess" msgstr "" #: ../src/Molpro/MInterfaceComm.c:838 ../src/Molpro/MInterfaceComm.c:997 msgid "Specifying weights in state-averaged calculations" msgstr "" #: ../src/Molpro/MInterfaceComm.c:839 msgid "Specifying weights in state-averaged calculations " msgstr "" #: ../src/Molpro/MInterfaceComm.c:841 ../src/Molpro/MInterfaceComm.c:991 msgid "Type of orbitals to save" msgstr "" #: ../src/Molpro/MInterfaceComm.c:855 ../src/Molpro/MInterfaceComm.c:1037 msgid "Defining the wavefunction" msgstr "" #: ../src/Molpro/MInterfaceComm.c:858 ../src/Molpro/MInterfaceComm.c:859 #: ../src/Molpro/MInterfaceComm.c:1038 msgid "Specifying closed-shell orbitals" msgstr "" #: ../src/Molpro/MInterfaceComm.c:861 ../src/Molpro/MInterfaceComm.c:862 #: ../src/Molpro/MInterfaceComm.c:1041 msgid "Defining the number of occupied orbitals in each symmetry" msgstr "" #: ../src/Molpro/MInterfaceComm.c:867 ../src/Molpro/MInterfaceComm.c:868 #: ../src/Molpro/MInterfaceComm.c:1039 msgid "Starting with previous orbitals" msgstr "" #: ../src/Molpro/MInterfaceComm.c:870 ../src/Molpro/MInterfaceComm.c:871 #: ../src/Molpro/MInterfaceComm.c:1040 msgid "Starting with a previous density matrix" msgstr "" #: ../src/Molpro/MInterfaceComm.c:1093 msgid "HF Options" msgstr "" #: ../src/Molpro/MInterfaceComm.c:1094 msgid "UHF Options" msgstr "" #: ../src/Molpro/MInterfaceComm.c:1095 msgid "Multi Options" msgstr "" #: ../src/Molpro/MInterfaceComm.c:1096 msgid "CI Options" msgstr "" #: ../src/Molpro/MInterfaceComm.c:1097 msgid "FCI Options" msgstr "" #: ../src/Molpro/MInterfaceComm.c:1099 ../src/Molpro/MInterfaceComm.c:1124 msgid "Please select the type of calculation" msgstr "" #: ../src/Molpro/MInterfaceComm.c:1201 ../src/Molpro/MInterfaceComm.c:1202 msgid "Commands" msgstr "" #: ../src/Molpro/MInterfaceComm.c:1215 msgid "View all commands generated by gabedit" msgstr "" #: ../src/Molpro/MInterfaceGene.c:186 msgid "Input file generated by gabedit" msgstr "" #: ../src/Molpro/MInterfaceGene.c:193 msgid "Memory size(in words) : " msgstr "" #: ../src/Molpro/MInterfaceGene.c:206 msgid "Global Thresholds " msgstr "" #: ../src/Molpro/MInterfaceGene.c:255 ../src/Molpro/Molpro.c:153 msgid "Print basis information " msgstr "" #: ../src/Molpro/MInterfaceGene.c:256 ../src/Molpro/Molpro.c:154 msgid "Print CI vector in MCSCF" msgstr "" #: ../src/Molpro/MInterfaceGene.c:257 ../src/Molpro/Molpro.c:155 msgid "Print reference CSFs and their coefficients in CI " msgstr "" #: ../src/Molpro/MInterfaceGene.c:258 ../src/Molpro/Molpro.c:156 msgid "Print detailed I/O information " msgstr "" #: ../src/Molpro/MInterfaceGene.c:259 ../src/Molpro/Molpro.c:157 msgid "Print orbitals in SCF and MCSCF " msgstr "" #: ../src/Molpro/MInterfaceGene.c:260 ../src/Molpro/Molpro.c:158 msgid "Print bond angle information" msgstr "" #: ../src/Molpro/MInterfaceGene.c:261 ../src/Molpro/Molpro.c:159 msgid "Print information for singles in CI, CCSD " msgstr "" #: ../src/Molpro/MInterfaceGene.c:264 ../src/Molpro/Molpro.c:160 msgid "Print bond distances " msgstr "" #: ../src/Molpro/MInterfaceGene.c:265 ../src/Molpro/Molpro.c:161 msgid "Print p-space configurations" msgstr "" #: ../src/Molpro/MInterfaceGene.c:266 ../src/Molpro/Molpro.c:162 msgid "Print variables each time they are set or changed " msgstr "" #: ../src/Molpro/MInterfaceGene.c:267 ../src/Molpro/Molpro.c:163 msgid "Print information for pairs in CI, CCSD " msgstr "" #: ../src/Molpro/MInterfaceGene.c:268 ../src/Molpro/Molpro.c:164 msgid "Print microiterations in MCSCF and CI" msgstr "" #: ../src/Molpro/MInterfaceGene.c:269 ../src/Molpro/Molpro.c:165 msgid "Print detailed CPU information " msgstr "" #: ../src/Molpro/MInterfaceGene.c:270 ../src/Molpro/Molpro.c:166 msgid "Print pair list in CI, CCSD" msgstr "" #: ../src/Molpro/MInterfaceGene.c:280 msgid "Global Print Options" msgstr "" #: ../src/Molpro/MInterfaceGene.c:320 msgid "Overlap " msgstr "" #: ../src/Molpro/MInterfaceGene.c:321 msgid "Kinetic energy" msgstr "" #: ../src/Molpro/MInterfaceGene.c:322 msgid "Potential energy " msgstr "" #: ../src/Molpro/MInterfaceGene.c:323 msgid "Delta function " msgstr "" #: ../src/Molpro/MInterfaceGene.c:324 msgid "Delta4 function " msgstr "" #: ../src/Molpro/MInterfaceGene.c:325 msgid "One-electron Darwin term" msgstr "" #: ../src/Molpro/MInterfaceGene.c:328 msgid "Mass-velocity term " msgstr "" #: ../src/Molpro/MInterfaceGene.c:329 msgid "Total Cowan-Griffin Relativistic correction" msgstr "" #: ../src/Molpro/MInterfaceGene.c:330 msgid "Products of angular momentum operators " msgstr "" #: ../src/Molpro/MInterfaceGene.c:331 msgid "Dipole moments" msgstr "" #: ../src/Molpro/MInterfaceGene.c:332 msgid "Second moment " msgstr "" #: ../src/Molpro/MInterfaceGene.c:333 msgid "Quadrupole moments and R2 " msgstr "" #: ../src/Molpro/MInterfaceGene.c:336 ../src/Utils/ConvUtils.c:908 msgid "Electric field" msgstr "" #: ../src/Molpro/MInterfaceGene.c:337 msgid "Field gradients " msgstr "" #: ../src/Molpro/MInterfaceGene.c:338 msgid "Angular momentum operators" msgstr "" #: ../src/Molpro/MInterfaceGene.c:339 ../src/Utils/ConvUtils.c:876 msgid "Velocity" msgstr "" #: ../src/Molpro/MInterfaceGene.c:340 msgid "Spin-orbit operators" msgstr "" #: ../src/Molpro/MInterfaceGene.c:341 msgid "ECP spin-orbit operators" msgstr "" #: ../src/Molpro/MInterfaceGene.c:350 msgid "One-electron operators and expectation values" msgstr "" #: ../src/Molpro/MInterfaceGene.c:365 ../src/Molpro/MInterfaceGene.c:379 msgid "Compute with origin at " msgstr "" #: ../src/Molpro/MInterfaceGene.c:369 msgid "Center Number : " msgstr "" #: ../src/Molpro/MInterfaceGene.c:450 msgid " Title/Global Thresholds " msgstr "" #: ../src/Molpro/MInterfaceGene.c:451 msgid " Global Print Options " msgstr "" #: ../src/Molpro/MInterfaceGene.c:452 msgid " One-electron operators and expectation values " msgstr "" #: ../src/Molpro/MInterfaceGene.c:471 ../src/Molpro/MInterfaceGene.c:472 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:2039 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:2040 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4715 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4716 msgid "General" msgstr "" #: ../src/Molpro/MInterfaceGeom.c:71 ../src/Molpro/MInterfaceGeom.c:72 #: ../src/OpenGL/GeomOrbXYZ.c:121 ../src/OpenGL/GeomOrbXYZ.c:280 #: ../src/OpenGL/GeomOrbXYZ.c:301 ../src/OpenGL/GeomOrbXYZ.c:361 #: ../src/OpenGL/GeomOrbXYZ.c:395 ../src/OpenGL/GeomOrbXYZ.c:455 #: ../src/OpenGL/GeomOrbXYZ.c:507 ../src/OpenGL/GeomOrbXYZ.c:562 #: ../src/OpenGL/GeomOrbXYZ.c:736 ../src/OpenGL/GeomOrbXYZ.c:788 #: ../src/OpenGL/GeomOrbXYZ.c:800 ../src/OpenGL/GeomOrbXYZ.c:925 #: ../src/OpenGL/GeomOrbXYZ.c:976 ../src/OpenGL/GeomOrbXYZ.c:989 #: ../src/OpenGL/GeomOrbXYZ.c:1151 ../src/OpenGL/GeomOrbXYZ.c:1211 #: ../src/OpenGL/GeomOrbXYZ.c:1222 ../src/OpenGL/GeomOrbXYZ.c:1283 #: ../src/OpenGL/GeomOrbXYZ.c:1307 ../src/OpenGL/GeomOrbXYZ.c:1358 #: ../src/OpenGL/GeomOrbXYZ.c:1405 ../src/OpenGL/GeomOrbXYZ.c:1427 #: ../src/OpenGL/GeomOrbXYZ.c:1484 ../src/OpenGL/GeomOrbXYZ.c:1737 #: ../src/OpenGL/GeomOrbXYZ.c:1768 ../src/OpenGL/GeomOrbXYZ.c:1836 #: ../src/OpenGL/GeomOrbXYZ.c:1923 ../src/OpenGL/GeomOrbXYZ.c:2033 #: ../src/OpenGL/GeomOrbXYZ.c:2079 ../src/OpenGL/GeomOrbXYZ.c:2102 #: ../src/OpenGL/GeomOrbXYZ.c:2157 ../src/OpenGL/GeomOrbXYZ.c:2207 #: ../src/OpenGL/GeomOrbXYZ.c:2231 ../src/OpenGL/GeomOrbXYZ.c:2288 #: ../src/OpenGL/GeomOrbXYZ.c:2327 ../src/OpenGL/GeomOrbXYZ.c:2359 #: ../src/OpenGL/GeomOrbXYZ.c:2427 ../src/OpenGL/GeomOrbXYZ.c:2510 #: ../src/OpenGL/GeomOrbXYZ.c:2584 ../src/OpenGL/GeomOrbXYZ.c:2694 #: ../src/OpenGL/GeomOrbXYZ.c:2730 ../src/OpenGL/GeomOrbXYZ.c:2785 #: ../src/OpenGL/GeomOrbXYZ.c:2846 ../src/OpenGL/GeomOrbXYZ.c:2878 #: ../src/OpenGL/GeomOrbXYZ.c:2946 ../src/OpenGL/GeomOrbXYZ.c:3034 #: ../src/OpenGL/GeomOrbXYZ.c:3069 ../src/OpenGL/GeomOrbXYZ.c:3124 #: ../src/OpenGL/GeomOrbXYZ.c:3219 ../src/OpenGL/GeomOrbXYZ.c:3244 #: ../src/OpenGL/GeomOrbXYZ.c:3301 ../src/OpenGL/GridAdfDensity.c:741 #: ../src/OpenGL/GridAdfOrbitals.c:905 ../src/OpenGL/GridCube.c:794 #: ../src/OpenGL/GridCube.c:805 ../src/OpenGL/GridCube.c:1084 #: ../src/OpenGL/GridCube.c:1131 ../src/OpenGL/GridCube.c:1136 #: ../src/OpenGL/GridMolcas.c:914 ../src/OpenGL/GridMolcas.c:993 #: ../src/OpenGL/GridQChem.c:344 ../src/OpenGL/OrbitalsDalton.c:111 #: ../src/OpenGL/OrbitalsDalton.c:138 ../src/OpenGL/OrbitalsDalton.c:191 #: ../src/OpenGL/OrbitalsGamess.c:136 ../src/OpenGL/OrbitalsGamess.c:167 #: ../src/OpenGL/OrbitalsGamess.c:1216 ../src/OpenGL/OrbitalsMopac.c:1246 #: ../src/OpenGL/OrbitalsQChem.c:136 ../src/OpenGL/OrbitalsQChem.c:158 #: ../src/OpenGL/OrbitalsQChem.c:1255 ../src/OpenGL/StatusOrb.c:245 #: ../src/OpenGL/Vibration.c:1019 ../src/OpenGL/Vibration.c:1044 #: ../src/OpenGL/Vibration.c:1081 ../src/OpenGL/Vibration.c:1782 #: ../src/OpenGL/Vibration.c:1828 ../src/OpenGL/Vibration.c:1870 #: ../src/OpenGL/Vibration.c:2084 ../src/OpenGL/Vibration.c:2107 #: ../src/OpenGL/Vibration.c:2153 ../src/OpenGL/Vibration.c:2518 #: ../src/OpenGL/Vibration.c:2540 ../src/OpenGL/Vibration.c:2585 #: ../src/OpenGL/Vibration.c:3052 ../src/OpenGL/Vibration.c:3108 #: ../src/OpenGL/Vibration.c:3151 msgid "Geometry" msgstr "" #: ../src/Molpro/MInterfaceGeom.c:87 msgid " Symmetry : " msgstr "" #: ../src/Molpro/MInterfaceGeom.c:111 msgid " Options : " msgstr "" #: ../src/Molpro/MInterfaceGeom.c:119 ../src/Molpro/Molpro.c:371 #: ../src/Molpro/Molpro.c:467 msgid "none" msgstr "" #: ../src/Molpro/Molpro.c:99 msgid "Numerical zero" msgstr "" #: ../src/Molpro/Molpro.c:100 msgid "Threshold for one-electron integrals" msgstr "" #: ../src/Molpro/Molpro.c:101 msgid "Threshold for the neglect of two-electron integrals" msgstr "" #: ../src/Molpro/Molpro.c:102 msgid "Threshold for test of prefactor in TWOINT" msgstr "" #: ../src/Molpro/Molpro.c:103 msgid "Threshold for orbital localization" msgstr "" #: ../src/Molpro/Molpro.c:104 msgid "Threshold for reordering of orbital after localization" msgstr "" #: ../src/Molpro/Molpro.c:105 msgid "Convergence threshold for energy" msgstr "" #: ../src/Molpro/Molpro.c:106 msgid "Convergence threshold for orbital gradient in MCSCF" msgstr "" #: ../src/Molpro/Molpro.c:107 msgid "Convergence threshold for step length in MCSCF orbital optimization" msgstr "" #: ../src/Molpro/Molpro.c:108 msgid "Convergence threshold for orbital optimization in the SCF program" msgstr "" #: ../src/Molpro/Molpro.c:109 msgid "" "Convergence threshold for CI coefficients in MCSCF and reference vector in CI" msgstr "" #: ../src/Molpro/Molpro.c:110 msgid "Convergence threshold for coefficients in CI and CCSD" msgstr "" #: ../src/Molpro/Molpro.c:111 msgid "Threshold for printing CI coefficients" msgstr "" #: ../src/Molpro/Molpro.c:112 msgid "Threshold for punching CI coefficients" msgstr "" #: ../src/Molpro/Molpro.c:663 ../src/Molpro/Molpro.c:737 msgid "molpro input" msgstr "" #: ../src/Molpro/Molpro.c:665 ../src/Molpro/Molpro.c:739 msgid " Molpro input " msgstr "" #: ../src/Molpro/MolproBasisLibrary.c:526 #, c-format msgid "Do you want to really delete \"%s\" basis for \"%s\" atom ?" msgstr "" #: ../src/Molpro/MolproBasisLibrary.c:619 #, c-format msgid "Do you want to really delete \"%s\" atom ?" msgstr "" #: ../src/Molpro/MolproBasisLibrary.c:952 msgid " Basis Name : " msgstr "" #: ../src/Molpro/MolproBasisLibrary.c:1212 #: ../src/Molpro/MolproBasisLibrary.c:1236 #: ../src/Molpro/MolproBasisLibrary.c:1243 #: ../src/Molpro/MolproBasisLibrary.c:1258 ../src/Molpro/MolproLib.c:74 #, c-format msgid "" "Sorry the molprobasis is corrupted.\n" "Please reinstall gabedit\n" msgstr "" #: ../src/Molpro/MolproBasisLibrary.c:1291 msgid "Set Molpro Basis" msgstr "" #: ../src/Mopac/Mopac.c:167 msgid "Mopac input" msgstr "" #: ../src/Mopac/Mopac.c:170 msgid " Mopac input " msgstr "" #: ../src/Mopac/MopacMolecule.c:968 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:1909 msgid "Reaction path" msgstr "" #: ../src/Mopac/MopacMolecule.c:992 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:1933 msgid "Nb points" msgstr "" #: ../src/Mopac/MopacMolecule.c:998 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:1939 msgid "Step value" msgstr "" #: ../src/Mopac/MopacMolecule.c:1006 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:1947 msgid "First" msgstr "" #: ../src/Mopac/MopacMolecule.c:1031 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:1972 msgid "Second" msgstr "" #: ../src/Mopac/MopacRem.c:416 ../src/Orca/OrcaKeywords.c:1092 #: ../src/QChem/QChemRem.c:621 msgid "Job Specification:" msgstr "" #: ../src/Mopac/MopacRem.c:429 ../src/Orca/OrcaKeywords.c:1105 #: ../src/QChem/QChemRem.c:634 msgid "Job Type" msgstr "" #: ../src/Mopac/MopacRem.c:442 msgid "Hamiltonian" msgstr "" #: ../src/Mopac/MopacRem.c:454 msgid "Solvent" msgstr "" #: ../src/MultiGrid/PoissonMG.c:212 #, c-format msgid "Set boundaries using ewald sum\n" msgstr "" #: ../src/MultiGrid/PoissonMG.c:336 #, c-format msgid "Set boundaries using multipol approximation\n" msgstr "" #: ../src/MultiGrid/PoissonMG.c:368 #, c-format msgid "Total charge = %f\n" msgstr "" #: ../src/MultiGrid/PoissonMG.c:708 #, c-format msgid "MEP : Poisson by CG, rms = %f" msgstr "" #: ../src/MultiGrid/PoissonMG.c:857 msgid "Solve Poisson equation by MultiGrid method, please wait" msgstr "" #: ../src/MultiGrid/PoissonMG.c:870 #, c-format msgid "MEP : Convergence after %d iterations" msgstr "" #: ../src/MultiGrid/PoissonMG.c:875 #, c-format msgid "MEP : Poisson by MultiGrid, rms = %f" msgstr "" #: ../src/NetWork/Batch.c:252 msgid "Jobs to kill" msgstr "" #: ../src/NetWork/Batch.c:326 msgid "Kill a jobs" msgstr "" #: ../src/NetWork/Batch.c:336 ../src/NetWork/Process.c:694 msgid " Kill " msgstr "" #: ../src/NetWork/Batch.c:563 ../src/NetWork/Process.c:377 msgid "Host name " msgstr "" #: ../src/NetWork/Batch.c:576 ../src/NetWork/Process.c:390 msgid "Login " msgstr "" #: ../src/NetWork/Batch.c:592 ../src/NetWork/Process.c:404 msgid "Password " msgstr "" #: ../src/NetWork/Batch.c:633 msgid "Batch Jobs at remote host " msgstr "" #: ../src/NetWork/Batch.c:645 msgid " Remote Batch Jobs " msgstr "" #: ../src/NetWork/Batch.c:717 ../src/NetWork/Batch.c:873 #: ../src/NetWork/Process.c:1145 ../src/NetWork/Process.c:1219 msgid "Sorry, This option is available for unix system only" msgstr "" #: ../src/NetWork/Batch.c:729 #, c-format msgid "All Jobs in %s host " msgstr "" #: ../src/NetWork/Batch.c:738 msgid "All Jobs in local host " msgstr "" #: ../src/NetWork/Batch.c:797 msgid " List of Jobs " msgstr "" #: ../src/NetWork/Batch.c:884 ../src/NetWork/Process.c:1230 msgid "Sorry, I can not obtain user name" msgstr "" #: ../src/NetWork/Batch.c:919 ../src/NetWork/Process.c:1264 #: ../src/NetWork/Process.c:1271 #, c-format msgid "Process in host : \"%s\" ; for user : \"%s\" " msgstr "" #: ../src/NetWork/Batch.c:931 #, c-format msgid "Jobs in host : \"%s\" ; for user : \"%s\" " msgstr "" #: ../src/NetWork/Ftp.c:146 #, c-format msgid "Get \"%s\" File from \"%s\" host : %%p%%%%" msgstr "" #: ../src/NetWork/Ftp.c:183 #, c-format msgid "Error in get_reply\n" msgstr "" #: ../src/NetWork/Ftp.c:679 #, c-format msgid "Get \"%s\" File from remote host : %%p%%" msgstr "" #: ../src/NetWork/Ftp.c:690 msgid "Connecting...." msgstr "" #: ../src/NetWork/Process.c:447 msgid "Process in remote host " msgstr "" #: ../src/NetWork/Process.c:458 msgid " Remote Process " msgstr "" #: ../src/NetWork/Process.c:514 msgid "Children Process" msgstr "" #: ../src/NetWork/Process.c:544 msgid "Process to kill" msgstr "" #: ../src/NetWork/Process.c:664 msgid "Kill all children process " msgstr "" #: ../src/NetWork/Process.c:685 msgid "Kill a process" msgstr "" #: ../src/NetWork/Process.c:1048 msgid " List of process " msgstr "" #: ../src/NetWork/Process.c:1157 #, c-format msgid "All process in %s host " msgstr "" #: ../src/NetWork/Process.c:1166 msgid "All process in local host " msgstr "" #: ../src/NetWork/Scp.c:103 ../src/NetWork/Scp.c:104 #, c-format msgid "Sorry, I Cannot get file at remot host...\n" msgstr "" #: ../src/NetWork/Scp.c:137 ../src/NetWork/Scp.c:313 ../src/NetWork/Ssh.c:132 #, c-format msgid "Cannot start client thread...\n" msgstr "" #: ../src/NetWork/Scp.c:160 ../src/NetWork/Scp.c:343 #, c-format msgid "Download Stopped\n" msgstr "" #: ../src/NetWork/Scp.c:192 #, c-format msgid "Sorry, I Cannot put file at remot host...\n" msgstr "" #: ../src/NetWork/Scp.c:212 #, c-format msgid "Sorry, I Cannot put %s file at remot host...\n" msgstr "" #: ../src/NetWork/Scp.c:236 ../src/NetWork/Scp.c:412 #, c-format msgid "Get \"%s/%s\" file from \"%s\" host..." msgstr "" #: ../src/NetWork/Scp.c:329 msgid "Sorry I can not stop download" msgstr "" #: ../src/NetWork/Scp.c:376 #, c-format msgid "Put %s/%s file at %s host..." msgstr "" #: ../src/OpenGL/AnimationContours.c:134 ../src/OpenGL/AnimationGeomConv.c:588 #: ../src/OpenGL/AnimationPlanesMapped.c:98 #: ../src/OpenGL/AnimationRotation.c:96 msgid "Set folder" msgstr "" #: ../src/OpenGL/AnimationContours.c:506 #: ../src/OpenGL/AnimationGeomConv.c:4326 #: ../src/OpenGL/AnimationIsoSurface.c:303 ../src/OpenGL/AnimationMD.c:2395 #: ../src/OpenGL/AnimationPlanesMapped.c:350 #: ../src/OpenGL/AnimationRotation.c:200 ../src/OpenGL/Vibration.c:4093 #, c-format msgid "" "\n" "A series of gab*.%s files was created in \"%s\" directeory.\n" "\n" "\n" "%s" msgstr "" #: ../src/OpenGL/AnimationContours.c:593 #: ../src/OpenGL/AnimationIsoSurface.c:392 msgid " Min isovalue " msgstr "" #: ../src/OpenGL/AnimationContours.c:605 #: ../src/OpenGL/AnimationIsoSurface.c:404 msgid " Max isovalue " msgstr "" #: ../src/OpenGL/AnimationContours.c:617 #: ../src/OpenGL/AnimationGeomConv.c:4412 #: ../src/OpenGL/AnimationIsoSurface.c:416 ../src/OpenGL/AnimationMD.c:2480 #: ../src/OpenGL/AnimationPlanesMapped.c:437 #: ../src/OpenGL/AnimationRotation.c:324 ../src/OpenGL/Vibration.c:4202 msgid " Time step(s) " msgstr "" #: ../src/OpenGL/AnimationContours.c:629 msgid " Number of Contours " msgstr "" #: ../src/OpenGL/AnimationContours.c:641 #: ../src/OpenGL/AnimationIsoSurface.c:440 ../src/OpenGL/Contours.c:549 #: ../src/OpenGL/Contours.c:809 ../src/Utils/GabeditContoursPlot.c:1673 msgid "Linear scale" msgstr "" #: ../src/OpenGL/AnimationContours.c:644 #: ../src/OpenGL/AnimationIsoSurface.c:443 ../src/OpenGL/Contours.c:551 #: ../src/OpenGL/Contours.c:811 ../src/Utils/GabeditContoursPlot.c:1675 msgid "logarithmic scale" msgstr "" #: ../src/OpenGL/AnimationContours.c:744 #: ../src/OpenGL/AnimationGeomConv.c:4559 #: ../src/OpenGL/AnimationIsoSurface.c:561 ../src/OpenGL/AnimationMD.c:2627 #: ../src/OpenGL/AnimationPlanesMapped.c:525 #: ../src/OpenGL/AnimationRotation.c:425 #, c-format msgid "The %s%sgab%d.%s file was created" msgstr "" #: ../src/OpenGL/AnimationContours.c:872 #: ../src/OpenGL/AnimationIsoSurface.c:668 #: ../src/OpenGL/AnimationPlanesMapped.c:624 msgid "Sorry, Grid not define " msgstr "" #: ../src/OpenGL/AnimationContours.c:880 msgid "contours animation" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:263 ../src/OpenGL/AnimationGeomConv.c:499 #: ../src/OpenGL/AnimationGeomConv.c:544 ../src/OpenGL/AnimationMD.c:263 #: ../src/OpenGL/Vibration.c:419 #, c-format msgid "" "Sorry\n" " I can not create %s file" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:325 ../src/OpenGL/AnimationMD.c:293 #: ../src/OpenGL/Vibration.c:478 #, c-format msgid "The %s file was created" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:472 #, c-format msgid "" "In %s directory, the gabmg_*, rungabmg.sh and \n" "rungabmg.bat files were created.\n" "\n" "gabmg_* is input files for gaussian. \n" "rungabmg.bat is a batch file for run gaussian with gabmg_* input files\n" "rungabmg.sh is a script for run gaussian with gabmg_* input files" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:859 ../src/OpenGL/AnimationGeomConv.c:962 #: ../src/OpenGL/AnimationGeomConv.c:1210 #: ../src/OpenGL/AnimationGeomConv.c:1490 #: ../src/OpenGL/AnimationGeomConv.c:1546 #: ../src/OpenGL/AnimationGeomConv.c:1932 ../src/OpenGL/AnimationMD.c:862 #: ../src/OpenGL/GeomOrbXYZ.c:1301 ../src/OpenGL/GeomOrbXYZ.c:2096 #: ../src/OpenGL/GeomOrbXYZ.c:2224 ../src/OpenGL/GeomOrbXYZ.c:2461 #: ../src/OpenGL/OrbitalsDalton.c:134 #: ../src/VibrationalCorrections/GabeditGaussianInput.c:945 msgid "" "Sorry\n" "I can not read geometry in this file" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:1030 #: ../src/OpenGL/AnimationGeomConv.c:1275 #: ../src/OpenGL/AnimationGeomConv.c:2301 #: ../src/OpenGL/AnimationGeomConv.c:2456 #: ../src/OpenGL/AnimationGeomConv.c:2578 #: ../src/OpenGL/AnimationGeomConv.c:2714 #: ../src/OpenGL/AnimationGeomConv.c:2860 #: ../src/OpenGL/AnimationGeomConv.c:3004 #: ../src/OpenGL/AnimationGeomConv.c:3148 #: ../src/OpenGL/AnimationGeomConv.c:3295 #: ../src/OpenGL/AnimationGeomConv.c:3444 ../src/OpenGL/AnimationMD.c:1246 #: ../src/OpenGL/AnimationMD.c:1541 ../src/OpenGL/AnimationMD.c:1626 #: ../src/OpenGL/GeomOrbXYZ.c:119 ../src/OpenGL/GeomOrbXYZ.c:268 #: ../src/OpenGL/GeomOrbXYZ.c:384 ../src/OpenGL/GeomOrbXYZ.c:504 #: ../src/OpenGL/GeomOrbXYZ.c:733 ../src/OpenGL/GeomOrbXYZ.c:922 #: ../src/OpenGL/GeomOrbXYZ.c:1145 ../src/OpenGL/GeomOrbXYZ.c:1280 #: ../src/OpenGL/GeomOrbXYZ.c:1305 ../src/OpenGL/GeomOrbXYZ.c:1399 #: ../src/OpenGL/GeomOrbXYZ.c:1425 ../src/OpenGL/GeomOrbXYZ.c:1731 #: ../src/OpenGL/GeomOrbXYZ.c:1766 ../src/OpenGL/GeomOrbXYZ.c:1912 #: ../src/OpenGL/GeomOrbXYZ.c:2073 ../src/OpenGL/GeomOrbXYZ.c:2100 #: ../src/OpenGL/GeomOrbXYZ.c:2201 ../src/OpenGL/GeomOrbXYZ.c:2229 #: ../src/OpenGL/GeomOrbXYZ.c:2318 ../src/OpenGL/GeomOrbXYZ.c:2357 #: ../src/OpenGL/GeomOrbXYZ.c:2507 ../src/OpenGL/GeomOrbXYZ.c:2691 #: ../src/OpenGL/GeomOrbXYZ.c:2728 ../src/OpenGL/GeomOrbXYZ.c:2843 #: ../src/OpenGL/GeomOrbXYZ.c:2876 ../src/OpenGL/GeomOrbXYZ.c:3027 #: ../src/OpenGL/GeomOrbXYZ.c:3067 ../src/OpenGL/GeomOrbXYZ.c:3210 #: ../src/OpenGL/GeomOrbXYZ.c:3242 ../src/OpenGL/GridAdfDensity.c:694 #: ../src/OpenGL/GridAdfOrbitals.c:874 ../src/OpenGL/GridCube.c:1328 #: ../src/OpenGL/GridCube.c:1337 ../src/OpenGL/GridCube.c:1346 #: ../src/OpenGL/GridCube.c:1355 ../src/OpenGL/GridCube.c:1370 #: ../src/OpenGL/GridCube.c:1378 ../src/OpenGL/GridCube.c:1585 #: ../src/OpenGL/GridCube.c:1594 ../src/OpenGL/GridCube.c:1603 #: ../src/OpenGL/GridCube.c:1612 ../src/OpenGL/GridCube.c:1627 #: ../src/OpenGL/GridCube.c:1635 ../src/OpenGL/GridMolcas.c:881 #: ../src/OpenGL/GridMolcas.c:945 ../src/OpenGL/GridQChem.c:316 #: ../src/OpenGL/Orbitals.c:1915 ../src/OpenGL/Orbitals.c:1923 #: ../src/OpenGL/Orbitals.c:1933 ../src/OpenGL/Orbitals.c:1979 #: ../src/OpenGL/Orbitals.c:2143 ../src/OpenGL/Orbitals.c:2151 #: ../src/OpenGL/Orbitals.c:2161 ../src/OpenGL/Orbitals.c:2179 #: ../src/OpenGL/Orbitals.c:2206 ../src/OpenGL/Orbitals.c:2213 #: ../src/OpenGL/Orbitals.c:2221 ../src/OpenGL/Orbitals.c:2278 #: ../src/OpenGL/Orbitals.c:2305 ../src/OpenGL/Orbitals.c:2313 #: ../src/OpenGL/Orbitals.c:2322 ../src/OpenGL/Orbitals.c:2399 #: ../src/OpenGL/OrbitalsDalton.c:108 ../src/OpenGL/OrbitalsDalton.c:136 #: ../src/OpenGL/OrbitalsDalton.c:563 ../src/OpenGL/OrbitalsGamess.c:130 #: ../src/OpenGL/OrbitalsGamess.c:165 ../src/OpenGL/OrbitalsGamess.c:1133 #: ../src/OpenGL/OrbitalsGamess.c:1160 ../src/OpenGL/OrbitalsGamess.c:1175 #: ../src/OpenGL/OrbitalsGamess.c:1188 ../src/OpenGL/OrbitalsGamess.c:1294 #: ../src/OpenGL/OrbitalsMolpro.c:1606 ../src/OpenGL/OrbitalsMolpro.c:1766 #: ../src/OpenGL/OrbitalsMopac.c:1200 ../src/OpenGL/OrbitalsMopac.c:1211 #: ../src/OpenGL/OrbitalsMopac.c:1230 ../src/OpenGL/OrbitalsMopac.c:1301 #: ../src/OpenGL/OrbitalsOrca.c:71 ../src/OpenGL/OrbitalsOrca.c:697 #: ../src/OpenGL/OrbitalsOrca.c:705 ../src/OpenGL/OrbitalsOrca.c:714 #: ../src/OpenGL/OrbitalsOrca.c:759 ../src/OpenGL/OrbitalsQChem.c:130 #: ../src/OpenGL/OrbitalsQChem.c:156 ../src/OpenGL/OrbitalsQChem.c:1169 #: ../src/OpenGL/OrbitalsQChem.c:1187 ../src/OpenGL/OrbitalsQChem.c:1196 #: ../src/OpenGL/OrbitalsQChem.c:1210 ../src/OpenGL/OrbitalsQChem.c:1223 #: ../src/OpenGL/OrbitalsQChem.c:1337 ../src/OpenGL/StatusOrb.c:245 #: ../src/OpenGL/Vibration.c:525 ../src/OpenGL/Vibration.c:1016 #: ../src/OpenGL/Vibration.c:1042 ../src/OpenGL/Vibration.c:1779 #: ../src/OpenGL/Vibration.c:1826 ../src/OpenGL/Vibration.c:2078 #: ../src/OpenGL/Vibration.c:2105 ../src/OpenGL/Vibration.c:2512 #: ../src/OpenGL/Vibration.c:2538 ../src/OpenGL/Vibration.c:3049 #: ../src/OpenGL/Vibration.c:3106 ../src/SemiEmpirical/SemiEmpiricalDlg.c:2144 msgid "File name" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:1032 #: ../src/OpenGL/AnimationGeomConv.c:1277 #: ../src/OpenGL/AnimationGeomConv.c:2303 #: ../src/OpenGL/AnimationGeomConv.c:2304 #: ../src/OpenGL/AnimationGeomConv.c:2458 #: ../src/OpenGL/AnimationGeomConv.c:2580 #: ../src/OpenGL/AnimationGeomConv.c:2716 #: ../src/OpenGL/AnimationGeomConv.c:2862 #: ../src/OpenGL/AnimationGeomConv.c:3006 #: ../src/OpenGL/AnimationGeomConv.c:3150 #: ../src/OpenGL/AnimationGeomConv.c:3297 #: ../src/OpenGL/AnimationGeomConv.c:3446 ../src/OpenGL/AnimationMD.c:1249 #: ../src/OpenGL/AnimationMD.c:1544 ../src/OpenGL/AnimationMD.c:1628 #: ../src/OpenGL/GeomOrbXYZ.c:120 ../src/OpenGL/GeomOrbXYZ.c:270 #: ../src/OpenGL/GeomOrbXYZ.c:271 ../src/OpenGL/GeomOrbXYZ.c:386 #: ../src/OpenGL/GeomOrbXYZ.c:506 ../src/OpenGL/GeomOrbXYZ.c:735 #: ../src/OpenGL/GeomOrbXYZ.c:924 ../src/OpenGL/GeomOrbXYZ.c:1148 #: ../src/OpenGL/GeomOrbXYZ.c:1150 ../src/OpenGL/GeomOrbXYZ.c:1282 #: ../src/OpenGL/GeomOrbXYZ.c:1306 ../src/OpenGL/GeomOrbXYZ.c:1401 #: ../src/OpenGL/GeomOrbXYZ.c:1426 ../src/OpenGL/GeomOrbXYZ.c:1733 #: ../src/OpenGL/GeomOrbXYZ.c:1767 ../src/OpenGL/GeomOrbXYZ.c:1914 #: ../src/OpenGL/GeomOrbXYZ.c:2075 ../src/OpenGL/GeomOrbXYZ.c:2101 #: ../src/OpenGL/GeomOrbXYZ.c:2203 ../src/OpenGL/GeomOrbXYZ.c:2230 #: ../src/OpenGL/GeomOrbXYZ.c:2320 ../src/OpenGL/GeomOrbXYZ.c:2358 #: ../src/OpenGL/GeomOrbXYZ.c:2509 ../src/OpenGL/GeomOrbXYZ.c:2693 #: ../src/OpenGL/GeomOrbXYZ.c:2729 ../src/OpenGL/GeomOrbXYZ.c:2845 #: ../src/OpenGL/GeomOrbXYZ.c:2877 ../src/OpenGL/GeomOrbXYZ.c:3029 #: ../src/OpenGL/GeomOrbXYZ.c:3068 ../src/OpenGL/GeomOrbXYZ.c:3212 #: ../src/OpenGL/GeomOrbXYZ.c:3243 ../src/OpenGL/GridAdfDensity.c:696 #: ../src/OpenGL/GridAdfOrbitals.c:876 ../src/OpenGL/GridCube.c:1323 #: ../src/OpenGL/GridCube.c:1329 ../src/OpenGL/GridCube.c:1338 #: ../src/OpenGL/GridCube.c:1347 ../src/OpenGL/GridCube.c:1356 #: ../src/OpenGL/GridCube.c:1371 ../src/OpenGL/GridCube.c:1379 #: ../src/OpenGL/GridCube.c:1562 ../src/OpenGL/GridCube.c:1570 #: ../src/OpenGL/GridCube.c:1578 ../src/OpenGL/GridCube.c:1586 #: ../src/OpenGL/GridCube.c:1595 ../src/OpenGL/GridCube.c:1604 #: ../src/OpenGL/GridCube.c:1613 ../src/OpenGL/GridCube.c:1628 #: ../src/OpenGL/GridCube.c:1636 ../src/OpenGL/GridMolcas.c:883 #: ../src/OpenGL/GridMolcas.c:947 ../src/OpenGL/GridQChem.c:318 #: ../src/OpenGL/Orbitals.c:1917 ../src/OpenGL/Orbitals.c:1924 #: ../src/OpenGL/Orbitals.c:1934 ../src/OpenGL/Orbitals.c:1980 #: ../src/OpenGL/Orbitals.c:2145 ../src/OpenGL/Orbitals.c:2152 #: ../src/OpenGL/Orbitals.c:2162 ../src/OpenGL/Orbitals.c:2180 #: ../src/OpenGL/Orbitals.c:2208 ../src/OpenGL/Orbitals.c:2214 #: ../src/OpenGL/Orbitals.c:2222 ../src/OpenGL/Orbitals.c:2279 #: ../src/OpenGL/Orbitals.c:2307 ../src/OpenGL/Orbitals.c:2314 #: ../src/OpenGL/Orbitals.c:2323 ../src/OpenGL/Orbitals.c:2400 #: ../src/OpenGL/OrbitalsDalton.c:110 ../src/OpenGL/OrbitalsDalton.c:137 #: ../src/OpenGL/OrbitalsDalton.c:564 ../src/OpenGL/OrbitalsGamess.c:132 #: ../src/OpenGL/OrbitalsGamess.c:166 ../src/OpenGL/OrbitalsGamess.c:1135 #: ../src/OpenGL/OrbitalsGamess.c:1161 ../src/OpenGL/OrbitalsGamess.c:1176 #: ../src/OpenGL/OrbitalsGamess.c:1189 ../src/OpenGL/OrbitalsGamess.c:1295 #: ../src/OpenGL/OrbitalsMolpro.c:1607 ../src/OpenGL/OrbitalsMolpro.c:1767 #: ../src/OpenGL/OrbitalsMopac.c:1202 ../src/OpenGL/OrbitalsMopac.c:1212 #: ../src/OpenGL/OrbitalsMopac.c:1231 ../src/OpenGL/OrbitalsMopac.c:1302 #: ../src/OpenGL/OrbitalsOrca.c:73 ../src/OpenGL/OrbitalsOrca.c:699 #: ../src/OpenGL/OrbitalsOrca.c:706 ../src/OpenGL/OrbitalsOrca.c:715 #: ../src/OpenGL/OrbitalsOrca.c:760 ../src/OpenGL/OrbitalsQChem.c:132 #: ../src/OpenGL/OrbitalsQChem.c:157 ../src/OpenGL/OrbitalsQChem.c:1171 #: ../src/OpenGL/OrbitalsQChem.c:1188 ../src/OpenGL/OrbitalsQChem.c:1197 #: ../src/OpenGL/OrbitalsQChem.c:1211 ../src/OpenGL/OrbitalsQChem.c:1224 #: ../src/OpenGL/OrbitalsQChem.c:1338 ../src/OpenGL/StatusOrb.c:245 #: ../src/OpenGL/Vibration.c:1018 ../src/OpenGL/Vibration.c:1043 #: ../src/OpenGL/Vibration.c:1781 ../src/OpenGL/Vibration.c:1827 #: ../src/OpenGL/Vibration.c:2080 ../src/OpenGL/Vibration.c:2106 #: ../src/OpenGL/Vibration.c:2514 ../src/OpenGL/Vibration.c:2539 #: ../src/OpenGL/Vibration.c:3051 ../src/OpenGL/Vibration.c:3107 msgid "File type" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:1138 #: ../src/OpenGL/AnimationGeomConv.c:2677 #: ../src/OpenGL/AnimationGeomConv.c:2800 #: ../src/OpenGL/AnimationGeomConv.c:2822 #: ../src/OpenGL/AnimationGeomConv.c:2944 #: ../src/OpenGL/AnimationGeomConv.c:2963 #: ../src/OpenGL/AnimationGeomConv.c:3093 #: ../src/OpenGL/AnimationGeomConv.c:3112 #: ../src/OpenGL/AnimationGeomConv.c:3258 #: ../src/OpenGL/AnimationGeomConv.c:3382 #: ../src/OpenGL/AnimationGeomConv.c:3401 #, c-format msgid "" "Sorry\n" "I can not read energy or convergence parameters from %s file " msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:1340 #: ../src/OpenGL/AnimationGeomConv.c:2375 #, c-format msgid "" "Sorry\n" "I can not read energy from %s file " msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:1780 msgid "" "Sorry\n" "I can not read the symbol of atoms from this file" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:1815 ../src/OpenGL/GeomOrbXYZ.c:2725 #: ../src/OpenGL/GeomOrbXYZ.c:2873 #, c-format msgid "" "Sorry\n" "I can not read geometry in %s file " msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:2003 #: ../src/OpenGL/AnimationGeomConv.c:2310 #: ../src/OpenGL/AnimationGeomConv.c:2464 ../src/OpenGL/AnimationMD.c:1634 #: ../src/OpenGL/GeomOrbXYZ.c:2819 #, c-format msgid "" "Sorry\n" "I can not open %s file " msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:2083 ../src/OpenGL/AnimationMD.c:981 #: ../src/OpenGL/AnimationMD.c:1029 ../src/OpenGL/Vibration.c:877 #, c-format msgid "Sorry, I can not create '%s' file\n" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:3183 #, c-format msgid " Error : No Geometry optimization in %s file\n" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:3495 #, c-format msgid "" "Sorry\n" "I can not read geometries from %s file " msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:3900 ../src/OpenGL/AnimationMD.c:1826 #: ../src/OpenGL/Orbitals.c:2586 ../src/OpenGL/Vibration.c:4823 msgid "Sorry, I cannot find the type of your file\n" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:3909 ../src/OpenGL/AnimationMD.c:1835 msgid "Read geometries from a Gabedit file" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:3918 msgid "Read geometries from a Molden file" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:3926 msgid "Read geometries from a Dalton output file" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:3934 msgid "Read geometries from a Gamess output file" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:3942 msgid "Read geometries from a Gamess IRC file" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:3950 ../src/OpenGL/AnimationMD.c:1844 msgid "Read geometries from a Gaussian output file" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:3958 msgid "Read geometries from a Molpro log file" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:3966 msgid "Read geometries from a MPQC output file" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:3974 msgid "Read geometries from a Mopac aux file" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:3982 msgid "Read geometries from a Q-Chem output file" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:3990 msgid "Read geometries from a XYZ file" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:3998 msgid "Read geometries from a multiple hyperchem files" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:4008 msgid "Read geometries from a file" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:4079 msgid "Save geometry convergences in gabedit file format" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:4093 msgid "Save geometries in a mobcal input file" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:4434 #: ../src/OpenGL/AnimationIsoSurface.c:488 ../src/OpenGL/AnimationMD.c:2502 #: ../src/OpenGL/AnimationPlanesMapped.c:456 #: ../src/OpenGL/AnimationRotation.c:355 ../src/OpenGL/Vibration.c:4248 msgid "Create a film" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:4449 #: ../src/OpenGL/AnimationPlanesMapped.c:471 #: ../src/OpenGL/AnimationRotation.c:370 ../src/OpenGL/CaptureOrbitals.c:574 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4257 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4774 msgid "Folder" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:4474 #: ../src/OpenGL/AnimationPlanesMapped.c:495 #: ../src/OpenGL/AnimationRotation.c:394 ../src/Utils/UtilsInterface.c:584 #: ../src/Utils/UtilsInterface.c:585 msgid "Play" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:4481 #: ../src/OpenGL/AnimationPlanesMapped.c:502 #: ../src/OpenGL/AnimationRotation.c:401 ../src/Utils/UtilsInterface.c:581 #: ../src/Utils/UtilsInterface.c:582 msgid "Stop" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:4665 #, c-format msgid "" " You can read more geometries from :\n" " * a Gabedit input file.\n" " * a Dalton output file.\n" " * a Gamess output file.\n" " * a Gamess IRC file.\n" " * a Gaussian output file.\n" " * a Molpro log file.\n" " * a Mopac aux file.\n" " * a MPQC output file.\n" " * a FireFly output file.\n" " * a Q-Chem output file.\n" " * a Molden input file.\n" " * a XYZ file.\n" " * multiple Hyperchem files.\n" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:4734 ../src/OpenGL/AnimationMD.c:2035 msgid " Directory " msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:4770 ../src/OpenGL/AnimationMD.c:2071 msgid " Keywords " msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:4792 ../src/OpenGL/AnimationMD.c:2093 #: ../src/OpenGL/Vibration.c:618 msgid "check file" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:4847 ../src/OpenGL/Vibration.c:675 msgid "" "Sorry\n" " You should read the geometries befor" msgstr "" #: ../src/OpenGL/AnimationGeomConv.c:4890 msgid "" " For create an animated file :\n" " ============================\n" " 1) Read geometries from a Dalton, Gaussian, Molpro, Gabedit, Molden, MPQC " "or from XYZ file.\n" " 2) Select \"create a series of BMP (or PPM or POV) images\" button.\n" " You can select your favorite directory by clicking to \"Directory\" " "button.\n" " 3) Click to Play button.\n" " 4) After on cycle Gabedit create a series of BMP(gab*.bmp) or PPM (gab*." "ppm) or POV(gab*.pov) files.\n" " From these files, you can create a gif or a png animated file using " "convert software.\n" " with \"convert -delay 10 -loop 1000 gab*.bmp imageAnim.gif\" " "command you can create a gif animated file.\n" " with \"convert -delay 10 -loop 1000 gab*.bmp imageAnim.mng\" " "command you can create a png animated file.\n" "\n" " For gab*.pov files :\n" " You must initially create files gab*.bmp using gab*.pov files.\n" " Then you can create the animated file using gab*.bmp file.\n" "\n" " You can use the xPovAnim script (from utils/povray directory) " "for create the gif animated file from gab*.pov files.\n" "\n" " convert is a free software. You can download this(for any " "system) from http://www.imagemagick.org\n" " povray is a free software. You can download this(for any system) " "from http://www.povray.org\n" "\n" msgstr "" #: ../src/OpenGL/AnimationIsoSurface.c:428 msgid " Number of IsoSurface by cycle" msgstr "" #: ../src/OpenGL/AnimationMD.c:383 #, c-format msgid "" "In %s directory, the gabmd_* and rungabmd.sh files were created.\n" "gabmd_* is input files for gaussian. \n" "rungabmd.sh is a script for run gaussian with gabmd_* input files" msgstr "" #: ../src/OpenGL/AnimationMD.c:1254 ../src/OpenGL/AnimationMD.c:1549 #, c-format msgid " Error : I can not read %s file \n" msgstr "" #: ../src/OpenGL/AnimationMD.c:1275 ../src/OpenGL/AnimationMD.c:1570 #, c-format msgid " Error : I can not read the first geometry from %s file\n" msgstr "" #: ../src/OpenGL/AnimationMD.c:1299 ../src/OpenGL/AnimationMD.c:1594 #, c-format msgid " Error : I can not read step number %d from %s file\n" msgstr "" #: ../src/OpenGL/AnimationMD.c:1852 msgid "Read geometries from a Gamess trj file" msgstr "" #: ../src/OpenGL/AnimationMD.c:1940 msgid "Save velocity-velocity autocorrelation function" msgstr "" #: ../src/OpenGL/AnimationMD.c:1966 msgid "Save geometries in gabedit file format" msgstr "" #: ../src/OpenGL/AnimationMD.c:2733 #, c-format msgid "" " You can read more geometries from :\n" " * a Gabedit input file.\n" " * a Gamess/FireFly TRJ file.\n" " * a Gaussian output file.\n" msgstr "" #: ../src/OpenGL/AnimationMD.c:2749 msgid "" " For create an animated file :\n" " ============================\n" " 1) Read geometries from a Gaussian, Gamess TRJ, FireFly TRJ or from " "Gabedit file.\n" " 2) Select \"create a series of BMP (or PPM or POV) images\" button.\n" " You can select your favorite directory by clicking to \"Directory\" " "button.\n" " 3) Click to Play button.\n" " 4) After on cycle Gabedit create a series of BMP(gab*.bmp) or PPM (gab*." "ppm) or POV(gab*.pov) files.\n" " From these files, you can create a gif or a png animated file using " "convert software.\n" " with \"convert -delay 10 -loop 1000 gab*.bmp imageAnim.gif\" " "command you can create a gif animated file.\n" " with \"convert -delay 10 -loop 1000 gab*.bmp imageAnim.mng\" " "command you can create a png animated file.\n" "\n" " For gab*.pov files :\n" " You must initially create files gab*.bmp using gab*.pov files.\n" " Then you can create the animated file using gab*.bmp file.\n" "\n" " You can use the xPovAnim script (from utils/povray directory) " "for create the gif animated file from gab*.pov files.\n" "\n" " convert is a free software. You can download this(for any " "system) from http://www.imagemagick.org\n" " povray is a free software. You can download this(for any system) " "from http://www.povray.org\n" "\n" msgstr "" #: ../src/OpenGL/AnimationPlanesMapped.c:277 msgid "First direction" msgstr "" #: ../src/OpenGL/AnimationPlanesMapped.c:284 ../src/OpenGL/GridPlans.c:450 msgid "Second direction" msgstr "" #: ../src/OpenGL/AnimationPlanesMapped.c:290 msgid "Third direction" msgstr "" #: ../src/OpenGL/AnimationPlanesMapped.c:631 msgid "Planes colorcoed animation" msgstr "" #: ../src/OpenGL/AnimationRotation.c:292 msgid "Rotation about X axis" msgstr "" #: ../src/OpenGL/AnimationRotation.c:299 msgid "Rotation about Y axis " msgstr "" #: ../src/OpenGL/AnimationRotation.c:305 msgid "Rotation about Z axis " msgstr "" #: ../src/OpenGL/AnimationRotation.c:336 msgid " Number of Rotation by cycle" msgstr "" #: ../src/OpenGL/AnimationRotation.c:511 msgid "Sorry, the number of atoms can not <1" msgstr "" #: ../src/OpenGL/AnimationRotation.c:519 msgid "Rotation animation" msgstr "" #: ../src/OpenGL/AtomicOrbitals.c:247 ../src/OpenGL/AtomicOrbitals.c:545 #: ../src/OpenGL/AtomicOrbitals.c:576 ../src/OpenGL/AtomicOrbitals.c:582 #: ../src/OpenGL/StatusOrb.c:246 msgid "At. Orb." msgstr "" #: ../src/OpenGL/AtomicOrbitals.c:276 ../src/OpenGL/Orbitals.c:1337 #: ../src/OpenGL/Orbitals.c:1738 ../src/OpenGL/OrbitalsDalton.c:208 #: ../src/OpenGL/OrbitalsDalton.c:298 ../src/OpenGL/OrbitalsGamess.c:377 #: ../src/OpenGL/OrbitalsGamess.c:765 ../src/OpenGL/OrbitalsMolpro.c:576 #: ../src/OpenGL/OrbitalsMolpro.c:864 ../src/OpenGL/OrbitalsMolpro.c:1174 #: ../src/OpenGL/OrbitalsMopac.c:112 ../src/OpenGL/OrbitalsMopac.c:153 #: ../src/OpenGL/OrbitalsMopac.c:215 ../src/OpenGL/OrbitalsMopac.c:258 #: ../src/OpenGL/OrbitalsMopac.c:293 ../src/OpenGL/OrbitalsMopac.c:326 #: ../src/OpenGL/OrbitalsOrca.c:551 ../src/OpenGL/OrbitalsQChem.c:439 #: ../src/OpenGL/OrbitalsQChem.c:829 msgid "Sorry No file selected\n" msgstr "" #: ../src/OpenGL/AtomicOrbitals.c:285 ../src/OpenGL/Orbitals.c:1346 #: ../src/OpenGL/Orbitals.c:1747 ../src/OpenGL/Orbitals.c:1780 #: ../src/OpenGL/OrbitalsDalton.c:216 ../src/OpenGL/OrbitalsDalton.c:306 #: ../src/OpenGL/OrbitalsGamess.c:385 ../src/OpenGL/OrbitalsGamess.c:774 #: ../src/OpenGL/OrbitalsMolpro.c:584 ../src/OpenGL/OrbitalsMolpro.c:874 #: ../src/OpenGL/OrbitalsMopac.c:120 ../src/OpenGL/OrbitalsMopac.c:161 #: ../src/OpenGL/OrbitalsMopac.c:223 ../src/OpenGL/OrbitalsMopac.c:266 #: ../src/OpenGL/OrbitalsMopac.c:301 ../src/OpenGL/OrbitalsMopac.c:334 #: ../src/OpenGL/OrbitalsOrca.c:330 ../src/OpenGL/OrbitalsOrca.c:560 #: ../src/OpenGL/OrbitalsQChem.c:447 ../src/OpenGL/OrbitalsQChem.c:838 #: ../src/OpenGL/UtilsOrb.c:224 ../src/OpenGL/UtilsOrb.c:347 #: ../src/OpenGL/UtilsOrb.c:391 ../src/OpenGL/UtilsOrb.c:444 #: ../src/OpenGL/UtilsOrb.c:497 ../src/OpenGL/UtilsOrb.c:537 #: ../src/OpenGL/Vibration.c:1646 ../src/OpenGL/Vibration.c:1697 #: ../src/OpenGL/Vibration.c:2011 ../src/OpenGL/Vibration.c:3305 #: ../src/OpenGL/Vibration.c:3351 ../src/OpenGL/Vibration.c:3395 #, c-format msgid "Sorry, I can not open '%s' file\n" msgstr "" #: ../src/OpenGL/AtomicOrbitals.c:545 ../src/OpenGL/GeomOrbXYZ.c:507 #: ../src/OpenGL/GeomOrbXYZ.c:736 ../src/OpenGL/GeomOrbXYZ.c:925 #: ../src/OpenGL/GeomOrbXYZ.c:1151 ../src/OpenGL/GeomOrbXYZ.c:1283 #: ../src/OpenGL/GeomOrbXYZ.c:1405 ../src/OpenGL/GeomOrbXYZ.c:1737 #: ../src/OpenGL/GeomOrbXYZ.c:1923 ../src/OpenGL/GeomOrbXYZ.c:2079 #: ../src/OpenGL/GeomOrbXYZ.c:2207 ../src/OpenGL/GeomOrbXYZ.c:2327 #: ../src/OpenGL/GeomOrbXYZ.c:2510 ../src/OpenGL/GeomOrbXYZ.c:2694 #: ../src/OpenGL/GeomOrbXYZ.c:2846 ../src/OpenGL/GeomOrbXYZ.c:3034 #: ../src/OpenGL/GeomOrbXYZ.c:3219 ../src/OpenGL/GridCube.c:1084 #: ../src/OpenGL/Orbitals.c:1918 ../src/OpenGL/Orbitals.c:1929 #: ../src/OpenGL/Orbitals.c:2146 ../src/OpenGL/Orbitals.c:2157 #: ../src/OpenGL/Orbitals.c:2209 ../src/OpenGL/Orbitals.c:2308 #: ../src/OpenGL/OrbitalsDalton.c:111 ../src/OpenGL/OrbitalsGamess.c:136 #: ../src/OpenGL/OrbitalsGamess.c:1136 ../src/OpenGL/OrbitalsGamess.c:1181 #: ../src/OpenGL/OrbitalsMolpro.c:868 msgid "Reading" msgstr "" #: ../src/OpenGL/AtomicOrbitals.c:576 ../src/OpenGL/GeomOrbXYZ.c:562 #: ../src/OpenGL/GeomOrbXYZ.c:800 ../src/OpenGL/GeomOrbXYZ.c:989 #: ../src/OpenGL/GeomOrbXYZ.c:1222 ../src/OpenGL/GeomOrbXYZ.c:1358 #: ../src/OpenGL/GeomOrbXYZ.c:1484 ../src/OpenGL/GeomOrbXYZ.c:1836 #: ../src/OpenGL/GeomOrbXYZ.c:2033 ../src/OpenGL/GeomOrbXYZ.c:2157 #: ../src/OpenGL/GeomOrbXYZ.c:2288 ../src/OpenGL/GeomOrbXYZ.c:2427 #: ../src/OpenGL/GeomOrbXYZ.c:2584 ../src/OpenGL/GeomOrbXYZ.c:2785 #: ../src/OpenGL/GeomOrbXYZ.c:2946 ../src/OpenGL/GeomOrbXYZ.c:3124 #: ../src/OpenGL/GeomOrbXYZ.c:3301 ../src/OpenGL/Grid.c:648 #: ../src/OpenGL/Grid.c:671 ../src/OpenGL/Grid.c:692 ../src/OpenGL/Grid.c:708 #: ../src/OpenGL/Grid.c:724 ../src/OpenGL/Grid.c:746 #: ../src/OpenGL/GridAdfDensity.c:247 ../src/OpenGL/GridAdfDensity.c:741 #: ../src/OpenGL/GridAdfOrbitals.c:255 ../src/OpenGL/GridAdfOrbitals.c:905 #: ../src/OpenGL/GridCube.c:805 ../src/OpenGL/GridCube.c:831 #: ../src/OpenGL/GridCube.c:1131 ../src/OpenGL/GridMolcas.c:302 #: ../src/OpenGL/GridMolcas.c:363 ../src/OpenGL/GridMolcas.c:914 #: ../src/OpenGL/GridMolcas.c:917 ../src/OpenGL/GridMolcas.c:993 #: ../src/OpenGL/GridMolcas.c:996 ../src/OpenGL/GridQChem.c:344 #: ../src/OpenGL/GridQChem.c:427 ../src/OpenGL/GridQChem.c:505 #: ../src/OpenGL/Orbitals.c:1972 ../src/OpenGL/Orbitals.c:2172 #: ../src/OpenGL/Orbitals.c:2271 ../src/OpenGL/Orbitals.c:2391 #: ../src/OpenGL/OrbitalsDalton.c:191 ../src/OpenGL/OrbitalsGamess.c:1216 #: ../src/OpenGL/OrbitalsGamess.c:1286 ../src/OpenGL/OrbitalsMopac.c:1246 #: ../src/OpenGL/OrbitalsMopac.c:1279 ../src/OpenGL/OrbitalsOrca.c:747 #: ../src/OpenGL/OrbitalsQChem.c:1255 ../src/OpenGL/OrbitalsQChem.c:1329 #: ../src/OpenGL/Vibration.c:1081 ../src/OpenGL/Vibration.c:1870 #: ../src/OpenGL/Vibration.c:2153 ../src/OpenGL/Vibration.c:2585 #: ../src/OpenGL/Vibration.c:3151 msgid "Ok" msgstr "" #: ../src/OpenGL/AxisGL.c:275 msgid "Set the axis parameters" msgstr "" #: ../src/OpenGL/AxisGL.c:329 msgid "Color for the X axis" msgstr "" #: ../src/OpenGL/AxisGL.c:355 msgid "Color for the Y axis" msgstr "" #: ../src/OpenGL/AxisGL.c:385 msgid "Color for the Z axis" msgstr "" #: ../src/OpenGL/AxisGL.c:411 ../src/OpenGL/PrincipalAxisGL.c:557 msgid "Show the negative part of the axes" msgstr "" #: ../src/OpenGL/Basis.c:1124 ../src/OpenGL/Orbitals.c:2010 msgid "" "Sorry\n" "I can not read the number of basis functions" msgstr "" #: ../src/OpenGL/Basis.c:1132 msgid "" "Sorry\n" "I can not the number of contracted shells" msgstr "" #: ../src/OpenGL/Basis.c:1139 msgid "" "Sorry\n" "I can not the number of primitive shells" msgstr "" #: ../src/OpenGL/Basis.c:1146 msgid "" "Sorry\n" "I can not the value of the highest angular momentum" msgstr "" #: ../src/OpenGL/Basis.c:1153 msgid "" "Sorry\n" "I can not the value of the largest degree of contraction" msgstr "" #: ../src/OpenGL/Basis.c:1160 msgid "" "Sorry\n" "I can not read the shell types" msgstr "" #: ../src/OpenGL/Basis.c:1176 msgid "" "Sorry\n" "The number of basis function in fch file is not equal to that computed by " "Gabedit!" msgstr "" #: ../src/OpenGL/Basis.c:1184 msgid "" "Sorry\n" "I can not read the number of primitives per shell" msgstr "" #: ../src/OpenGL/Basis.c:1192 msgid "" "Sorry\n" "I can not read the atoms number for shell" msgstr "" #: ../src/OpenGL/Basis.c:1200 msgid "" "Sorry\n" "I can not read the primitive exponents " msgstr "" #: ../src/OpenGL/Basis.c:1208 msgid "" "Sorry\n" "I can not read the contraction coefficients " msgstr "" #: ../src/OpenGL/Basis.c:1218 msgid "" "Sorry\n" "I can not read the P(S=P) contraction coefficients " msgstr "" #: ../src/OpenGL/Basis.c:1227 msgid "" "Sorry\n" "I can not read the coordinates of each shell " msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:304 ../src/OpenGL/CaptureOrbitals.c:350 #: ../src/OpenGL/Orbitals.c:229 ../src/OpenGL/Orbitals.c:299 #: ../src/OpenGL/Orbitals.c:345 ../src/OpenGL/Orbitals.c:897 #: ../src/OpenGL/UtilsOrb.c:1182 ../src/OpenGL/UtilsOrb.c:1228 #: ../src/OpenGL/UtilsOrb.c:1770 ../src/OpenGL/UtilsOrb.c:1838 msgid "Error : one entry is not a float " msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:314 ../src/OpenGL/IntegralOrbitals.c:576 #: ../src/OpenGL/IntegralOrbitals.c:1504 ../src/OpenGL/IntegralOrbitals.c:1968 #: ../src/OpenGL/Orbitals.c:309 ../src/OpenGL/UtilsOrb.c:1192 #: ../src/OpenGL/UtilsOrb.c:1780 msgid "Error : The number of points should be > 2. " msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:325 ../src/OpenGL/Contours.c:275 #: ../src/OpenGL/Contours.c:682 ../src/OpenGL/IntegralOrbitals.c:587 #: ../src/OpenGL/IntegralOrbitals.c:1515 ../src/OpenGL/IntegralOrbitals.c:1979 #: ../src/OpenGL/Orbitals.c:320 ../src/OpenGL/UtilsOrb.c:1203 #: ../src/OpenGL/UtilsOrb.c:1813 ../src/Utils/GabeditContoursPlot.c:1562 #: ../src/Utils/GabeditContoursPlot.c:5143 msgid "Error : The minimal value should be smaller than the maximal value " msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:365 ../src/OpenGL/IntegralOrbitals.c:627 #: ../src/OpenGL/IntegralOrbitals.c:1555 ../src/OpenGL/IntegralOrbitals.c:2019 #: ../src/OpenGL/Orbitals.c:360 ../src/OpenGL/UtilsOrb.c:1243 #: ../src/OpenGL/UtilsOrb.c:1853 msgid "Error : the norm is equal to 0 " msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:535 msgid "Alpha orbitals" msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:541 ../src/OpenGL/CaptureOrbitals.c:986 #: ../src/OpenGL/IntegralOrbitals.c:1083 msgid "Beta Orbitals" msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:590 ../src/OpenGL/Vibration.c:514 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:2134 msgid "Select your folder" msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:624 msgid "Isovalue" msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:679 msgid "Number" msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:687 ../src/Utils/ConvUtils.c:867 msgid "Energy" msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:695 ../src/Utils/AtomsProp.c:1221 msgid "Symbol" msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:703 msgid "Homo/Lumo number" msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:711 msgid "prefix" msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:772 msgid "Nubmer of slides by row" msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:798 msgid "Slide size/Screen size" msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:932 ../src/OpenGL/IntegralOrbitals.c:1029 msgid "Alpha Orbitals" msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:1047 ../src/OpenGL/GridAdfOrbitals.c:389 #: ../src/OpenGL/GridMolcas.c:493 ../src/OpenGL/GridPlans.c:304 #: ../src/OpenGL/GridPlans.c:537 ../src/OpenGL/IntegralOrbitals.c:1136 #: ../src/OpenGL/IntegralOrbitals.c:1735 ../src/OpenGL/IntegralOrbitals.c:2200 #: ../src/OpenGL/Orbitals.c:1117 ../src/OpenGL/UtilsOrb.c:1077 #: ../src/OpenGL/UtilsOrb.c:1291 ../src/OpenGL/UtilsOrb.c:2128 msgid "Sorry, Please load a file before\n" msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:1052 ../src/OpenGL/GridPlans.c:309 #: ../src/OpenGL/GridPlans.c:542 ../src/OpenGL/IntegralOrbitals.c:1141 #: ../src/OpenGL/IntegralOrbitals.c:1146 ../src/OpenGL/IntegralOrbitals.c:1290 #: ../src/OpenGL/IntegralOrbitals.c:1740 ../src/OpenGL/IntegralOrbitals.c:1745 #: ../src/OpenGL/IntegralOrbitals.c:2205 ../src/OpenGL/IntegralOrbitals.c:2210 #: ../src/OpenGL/UtilsOrb.c:1082 ../src/OpenGL/UtilsOrb.c:1296 msgid "Sorry, Please load the MO before\n" msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:1058 ../src/OpenGL/GridPlans.c:315 #: ../src/OpenGL/IntegralOrbitals.c:1152 ../src/OpenGL/IntegralOrbitals.c:1751 #: ../src/OpenGL/IntegralOrbitals.c:2216 ../src/OpenGL/UtilsOrb.c:1094 #: ../src/OpenGL/UtilsOrb.c:1308 msgid "" "Sorry, No atomic orbitals available.\n" "Please use a gabedit file for load : \n" "Geometry, Molecular and Atomic Orbitals\n" msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:1064 msgid "Slideshow orbital" msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:1074 ../src/OpenGL/UtilsOrb.c:1110 #: ../src/OpenGL/UtilsOrb.c:1324 msgid "Box & Grid" msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:1087 #: ../src/Utils/GabeditContoursPlot.c:2780 ../src/Utils/GabeditXYPlot.c:2313 msgid "Labels" msgstr "" #: ../src/OpenGL/CaptureOrbitals.c:1099 msgid "Slides" msgstr "" #: ../src/OpenGL/Contours.c:271 ../src/OpenGL/Contours.c:677 #: ../src/Utils/GabeditContoursPlot.c:1558 #: ../src/Utils/GabeditContoursPlot.c:5139 msgid "Error : The minimal value should be float." msgstr "" #: ../src/OpenGL/Contours.c:272 ../src/OpenGL/Contours.c:678 #: ../src/Utils/GabeditContoursPlot.c:1559 #: ../src/Utils/GabeditContoursPlot.c:5140 msgid "Error : The maximal value should be float." msgstr "" #: ../src/OpenGL/Contours.c:279 ../src/OpenGL/Contours.c:679 #: ../src/OpenGL/PlanesMapped.c:48 ../src/OpenGL/PlanesMapped.c:199 msgid "Error : The projection value should be float." msgstr "" #: ../src/OpenGL/Contours.c:438 ../src/OpenGL/PlanesMapped.c:77 msgid " Plane number " msgstr "" #: ../src/OpenGL/Contours.c:463 ../src/Utils/GabeditContoursPlot.c:1634 msgid " Numbre of contours " msgstr "" #: ../src/OpenGL/Contours.c:464 ../src/Utils/GabeditContoursPlot.c:1644 #: ../src/Utils/GabeditContoursPlot.c:5333 msgid " Min iso-value " msgstr "" #: ../src/OpenGL/Contours.c:465 ../src/Utils/GabeditContoursPlot.c:1655 #: ../src/Utils/GabeditContoursPlot.c:5344 msgid " Max iso-value " msgstr "" #: ../src/OpenGL/Contours.c:469 msgid " Projection " msgstr "" #: ../src/OpenGL/Contours.c:496 ../src/OpenGL/PlanesMapped.c:234 msgid " left if <0, right if >0. and nothing if 0" msgstr "" #: ../src/OpenGL/Contours.c:620 ../src/OpenGL/Orbitals.c:1025 #: ../src/OpenGL/PlanesMapped.c:149 msgid "Grid not defined " msgstr "" #: ../src/OpenGL/Contours.c:863 ../src/OpenGL/PlanesMapped.c:256 msgid "Grid in plane is not defined " msgstr "" #: ../src/OpenGL/Dipole.c:49 msgid "Nuclear Dipole(Debye)" msgstr "" #: ../src/OpenGL/Dipole.c:50 msgid "Electronic Dipole(Debye)" msgstr "" #: ../src/OpenGL/Dipole.c:51 msgid "Total Dipole(Debye)" msgstr "" #: ../src/OpenGL/Dipole.c:52 msgid "Ne = Number of electrons from grid density" msgstr "" #: ../src/OpenGL/Dipole.c:53 msgid "Nn = Nuclear charge" msgstr "" #: ../src/OpenGL/Dipole.c:90 msgid "Dipole computed from grid density" msgstr "" #: ../src/OpenGL/Dipole.c:120 msgid "Dipole Computed using electronic density at the grid" msgstr "" #: ../src/OpenGL/Dipole.c:233 msgid "Sorry, Grid not defined " msgstr "" #: ../src/OpenGL/GeomOrbXYZ.c:723 ../src/OpenGL/GeomOrbXYZ.c:902 #, c-format msgid "" "Sorry\n" " I can not open %s file" msgstr "" #: ../src/OpenGL/GeomOrbXYZ.c:910 #, c-format msgid "" "Sorry\n" " I can not read grometry from %s file" msgstr "" #: ../src/OpenGL/GeomOrbXYZ.c:1421 ../src/OpenGL/GeomOrbXYZ.c:1762 #: ../src/OpenGL/OrbitalsGamess.c:161 ../src/OpenGL/OrbitalsQChem.c:152 #: ../src/OpenGL/Vibration.c:2101 ../src/OpenGL/Vibration.c:2534 msgid "" "Sorry\n" "I can not read geometry from this file" msgstr "" #: ../src/OpenGL/GeomOrbXYZ.c:2830 #, c-format msgid "" "Sorry\n" "I can not read the atom symbols in %s file " msgstr "" #: ../src/OpenGL/GeomOrbXYZ.c:3684 msgid "" "Sorry, I cannot read this file here\n" "You can read it from the 'Draw Geometry' window, save it in hin and read it " "from this window 'Display window'\n" msgstr "" #: ../src/OpenGL/GeomOrbXYZ.c:3694 msgid "" "Sorry, I cannot find the type of your file\n" " Try to read it using openbabel\n" msgstr "" #: ../src/OpenGL/Grid.c:595 ../src/OpenGL/Grid.c:648 ../src/OpenGL/Grid.c:650 #: ../src/OpenGL/Grid.c:665 ../src/OpenGL/Grid.c:671 ../src/OpenGL/Grid.c:672 #: ../src/OpenGL/Grid.c:684 ../src/OpenGL/Grid.c:692 ../src/OpenGL/Grid.c:693 #: ../src/OpenGL/Grid.c:702 ../src/OpenGL/Grid.c:708 ../src/OpenGL/Grid.c:709 #: ../src/OpenGL/Grid.c:718 ../src/OpenGL/Grid.c:724 ../src/OpenGL/Grid.c:725 #: ../src/OpenGL/Grid.c:736 ../src/OpenGL/Grid.c:746 ../src/OpenGL/Grid.c:747 #: ../src/OpenGL/Grid.c:778 ../src/OpenGL/Grid.c:807 ../src/OpenGL/Grid.c:2389 #: ../src/OpenGL/Grid.c:2504 ../src/OpenGL/Grid.c:2537 #: ../src/OpenGL/Grid.c:2567 ../src/OpenGL/Grid.c:2648 #: ../src/OpenGL/Grid.c:2676 ../src/OpenGL/Grid.c:2740 #: ../src/OpenGL/Grid.c:2768 ../src/OpenGL/Grid.c:2813 #: ../src/OpenGL/Grid.c:2814 ../src/OpenGL/Grid.c:2902 #: ../src/OpenGL/Grid.c:2903 ../src/OpenGL/Grid.c:2914 #: ../src/OpenGL/GridAdfDensity.c:247 ../src/OpenGL/GridAdfDensity.c:251 #: ../src/OpenGL/GridAdfDensity.c:745 ../src/OpenGL/GridAdfOrbitals.c:255 #: ../src/OpenGL/GridAdfOrbitals.c:259 ../src/OpenGL/GridAdfOrbitals.c:909 #: ../src/OpenGL/GridCube.c:810 ../src/OpenGL/GridCube.c:831 #: ../src/OpenGL/GridMolcas.c:302 ../src/OpenGL/GridMolcas.c:306 #: ../src/OpenGL/GridMolcas.c:363 ../src/OpenGL/GridMolcas.c:367 #: ../src/OpenGL/GridMolcas.c:917 ../src/OpenGL/GridMolcas.c:918 #: ../src/OpenGL/GridMolcas.c:996 ../src/OpenGL/GridMolcas.c:997 #: ../src/OpenGL/GridQChem.c:427 ../src/OpenGL/GridQChem.c:431 #: ../src/OpenGL/GridQChem.c:505 ../src/OpenGL/GridQChem.c:509 #: ../src/OpenGL/StatusOrb.c:246 ../src/Utils/GabeditContoursPlot.c:3390 #: ../src/Utils/GabeditXYPlot.c:2923 msgid "Grid" msgstr "" #: ../src/OpenGL/Grid.c:595 msgid "Computing" msgstr "" #: ../src/OpenGL/Grid.c:664 msgid "Computing Grid for electronic density" msgstr "" #: ../src/OpenGL/Grid.c:681 msgid "Computing FED Grid for a electrophilic reaction" msgstr "" #: ../src/OpenGL/Grid.c:682 msgid "Computing FED Grid for a nucleophilic reaction" msgstr "" #: ../src/OpenGL/Grid.c:683 msgid "Computing FED Grid for a radical reaction" msgstr "" #: ../src/OpenGL/Grid.c:701 msgid "Computing Grid for ELF(Becke)" msgstr "" #: ../src/OpenGL/Grid.c:717 msgid "Computing Grid for ELF(Savin)" msgstr "" #: ../src/OpenGL/Grid.c:735 #, c-format msgid "Computing Grid for orb # %d" msgstr "" #: ../src/OpenGL/Grid.c:778 ../src/OpenGL/Grid.c:2537 msgid "Comp. phi_i^2 and phi_j^2" msgstr "" #: ../src/OpenGL/Grid.c:807 ../src/OpenGL/Grid.c:2567 msgid "Computing of Coulomb int." msgstr "" #: ../src/OpenGL/Grid.c:2267 ../src/OpenGL/Grid.c:2413 msgid "" "Sorry\n" " The current grid is not a grid for electronic density" msgstr "" #: ../src/OpenGL/Grid.c:2440 msgid "Compute of the source grid for the Poisson equation" msgstr "" #: ../src/OpenGL/Grid.c:2448 msgid "Set boundary values from multipole " msgstr "" #: ../src/OpenGL/Grid.c:2450 msgid "Solve the Poisson equation" msgstr "" #: ../src/OpenGL/Grid.c:2464 msgid "End the rsolution of the Poisson equation" msgstr "" #: ../src/OpenGL/Grid.c:2648 ../src/OpenGL/Grid.c:2740 msgid "Comp. phi_i*phi_j" msgstr "" #: ../src/OpenGL/Grid.c:2676 ../src/OpenGL/Grid.c:2768 msgid "Computing of ." msgstr "" #: ../src/OpenGL/Grid.c:2813 ../src/OpenGL/Grid.c:2902 msgid "Comp. integ f^2(x,y,z) dv from grid" msgstr "" #: ../src/OpenGL/Grid.c:2814 ../src/OpenGL/Grid.c:2903 msgid "Comp. integ f(,xy,z) dv from grid" msgstr "" #: ../src/OpenGL/Grid.c:2913 #, c-format msgid "" "Computing integrale for isovalue = %f, (IsoMax-IsoMin) = %f, precision = %f" msgstr "" #: ../src/OpenGL/GridAdfDensity.c:107 ../src/OpenGL/GridAdfOrbitals.c:108 msgid "I can not read adf file\n" msgstr "" #: ../src/OpenGL/GridAdfDensity.c:154 ../src/OpenGL/GridAdfDensity.c:164 msgid "Sorry, I can not read density from this file" msgstr "" #: ../src/OpenGL/GridAdfDensity.c:233 ../src/OpenGL/GridAdfOrbitals.c:234 #: ../src/OpenGL/GridMolcas.c:290 #, c-format msgid "Sorry, i can not open \"%s\" file" msgstr "" #: ../src/OpenGL/GridAdfDensity.c:688 ../src/OpenGL/GridAdfOrbitals.c:868 #: ../src/OpenGL/GridCube.c:1315 ../src/OpenGL/GridCube.c:1551 msgid "I can not open file\n" msgstr "" #: ../src/OpenGL/GridAdfDensity.c:696 ../src/OpenGL/GridAdfOrbitals.c:876 msgid "ADF Formatted file(41)" msgstr "" #: ../src/OpenGL/GridAdfOrbitals.c:165 msgid "Sorry, I can not read this orbital" msgstr "" #: ../src/OpenGL/GridAdfOrbitals.c:395 ../src/OpenGL/Orbitals.c:1125 msgid "Orbitals" msgstr "" #: ../src/OpenGL/GridCP.c:113 msgid "Computing of gradient on each point..., Please wait" msgstr "" #: ../src/OpenGL/GridCP.c:246 #, c-format msgid "The Cube of the 2 grids should be equals\n" msgstr "" #: ../src/OpenGL/GridCP.c:806 msgid "Assignation of points to volumes... Please wait" msgstr "" #: ../src/OpenGL/GridCP.c:996 msgid "Assignation of points with f = 0..., Please wait" msgstr "" #: ../src/OpenGL/GridCP.c:1153 msgid "Partial charges of molecule <= AIM charges" msgstr "" #: ../src/OpenGL/GridCP.c:1184 ../src/OpenGL/GridCP.c:1549 msgid "Geometry (Ang)\n" msgstr "" #: ../src/OpenGL/GridCP.c:1208 ../src/OpenGL/GridCP.c:1573 #, c-format msgid "" "Grid point density (Ang^-1) on the first direction(>10 is recommended) = %" "lf\n" "density of the grid(Ang^-1) on the second direction(>10 is recommended) = %" "lf\n" "density of the grid(Ang^-1) on the third direction(>10 is recommended) = %" "lf\n" msgstr "" #: ../src/OpenGL/GridCP.c:1241 ../src/OpenGL/GridCP.c:1606 #, c-format msgid "sum of values on the 6 faces of the cube(should be near to 0) = %lf \n" msgstr "" #: ../src/OpenGL/GridCP.c:1250 ../src/OpenGL/GridCP.c:1615 msgid "Position(Ang)" msgstr "" #: ../src/OpenGL/GridCP.c:1250 ../src/OpenGL/GridCP.c:1615 msgid "Nearest at." msgstr "" #: ../src/OpenGL/GridCP.c:1250 msgid " AIM Charge " msgstr "" #: ../src/OpenGL/GridCP.c:1250 msgid "Old charge (read from CCP output file)" msgstr "" #: ../src/OpenGL/GridCP.c:1292 ../src/OpenGL/GridCP.c:1654 #, c-format msgid "Attracteur number %d\n" msgstr "" #: ../src/OpenGL/GridCP.c:1297 ../src/OpenGL/GridCP.c:1659 #, c-format msgid "Position(Ang) = %lf %lf %lf\n" msgstr "" #: ../src/OpenGL/GridCP.c:1308 ../src/OpenGL/GridCP.c:1670 #, c-format msgid "Nearest atom = %s[%d]\n" msgstr "" #: ../src/OpenGL/GridCP.c:1314 ../src/OpenGL/GridCP.c:1676 #, c-format msgid "Number of electrons in the volume of this attractor = %lf\n" msgstr "" #: ../src/OpenGL/GridCP.c:1317 ../src/OpenGL/GridCP.c:1679 #, c-format msgid "Nuclear charge of the nearest atom = %lf\n" msgstr "" #: ../src/OpenGL/GridCP.c:1320 #, c-format msgid "Charge in the volume of this attractor = %lf\n" msgstr "" #: ../src/OpenGL/GridCP.c:1324 ../src/OpenGL/GridCP.c:1682 #, c-format msgid "# of points in this volume = %d\n" msgstr "" #: ../src/OpenGL/GridCP.c:1329 ../src/OpenGL/GridCP.c:1687 #, c-format msgid "Total number of electrons = %lf\n" msgstr "" #: ../src/OpenGL/GridCP.c:1332 #, c-format msgid "Total nuclear charges = %lf\n" msgstr "" #: ../src/OpenGL/GridCP.c:1335 #, c-format msgid "Total charge = %lf\n" msgstr "" #: ../src/OpenGL/GridCP.c:1342 msgid "AIM charges" msgstr "" #: ../src/OpenGL/GridCP.c:1346 ../src/OpenGL/GridCP.c:1699 msgid "Oups a problem...." msgstr "" #: ../src/OpenGL/GridCP.c:1346 ../src/OpenGL/GridCP.c:1699 msgid "Attractors" msgstr "" #: ../src/OpenGL/GridCP.c:1394 msgid "Computing of charges..., Please wait" msgstr "" #: ../src/OpenGL/GridCP.c:1467 msgid "" "Sorry\n" " The current grid is not a grid for electronic density!!!" msgstr "" #: ../src/OpenGL/GridCP.c:1505 msgid "Computing of the number of electrons at each attractor..., Please wait" msgstr "" #: ../src/OpenGL/GridCP.c:1615 msgid " # electrons" msgstr "" #: ../src/OpenGL/GridCP.c:1693 msgid "ELF analysis" msgstr "" #: ../src/OpenGL/GridCP.c:1712 msgid "" "Sorry\n" " The current grid is not a grid for ELF!!!" msgstr "" #: ../src/OpenGL/GridCP.c:1717 msgid "" "Sorry\n" " The second grid is not a grid for electronic density!!!" msgstr "" #: ../src/OpenGL/GridCP.c:1726 msgid "" "Sorry\n" " The Cubes of the 2 grids should be equals!!!" msgstr "" #: ../src/OpenGL/GridCube.c:256 msgid "Error : your value is not a float " msgstr "" #: ../src/OpenGL/GridCube.c:283 msgid "Sorry, Grid is not defined " msgstr "" #: ../src/OpenGL/GridCube.c:287 ../src/OpenGL/GridCube.c:293 msgid "Scale grid" msgstr "" #: ../src/OpenGL/GridCube.c:305 msgid "Factor" msgstr "" #: ../src/OpenGL/GridCube.c:357 ../src/OpenGL/GridCube.c:617 #, c-format msgid "Sorry, I can not open %s file" msgstr "" #: ../src/OpenGL/GridCube.c:364 ../src/OpenGL/GridCube.c:371 #: ../src/OpenGL/GridCube.c:378 ../src/OpenGL/GridCube.c:385 #: ../src/OpenGL/GridCube.c:402 ../src/OpenGL/GridCube.c:409 #: ../src/OpenGL/GridCube.c:430 ../src/OpenGL/GridCube.c:437 #: ../src/OpenGL/GridCube.c:457 ../src/OpenGL/GridCube.c:464 #: ../src/OpenGL/GridCube.c:488 ../src/OpenGL/GridCube.c:498 #: ../src/OpenGL/GridCube.c:624 ../src/OpenGL/GridCube.c:631 #: ../src/OpenGL/GridCube.c:638 ../src/OpenGL/GridCube.c:645 #: ../src/OpenGL/GridCube.c:662 ../src/OpenGL/GridCube.c:669 #: ../src/OpenGL/GridCube.c:690 ../src/OpenGL/GridCube.c:697 #: ../src/OpenGL/GridCube.c:717 ../src/OpenGL/GridCube.c:724 #: ../src/OpenGL/GridCube.c:748 ../src/OpenGL/GridCube.c:759 #, c-format msgid "Sorry, I can not read cube from %s file" msgstr "" #: ../src/OpenGL/GridCube.c:392 ../src/OpenGL/GridCube.c:652 msgid "The number of atoms in cube file is not equal to default value" msgstr "" #: ../src/OpenGL/GridCube.c:396 ../src/OpenGL/GridCube.c:656 msgid "Sorry, probleme with origin of cube" msgstr "" #: ../src/OpenGL/GridCube.c:419 ../src/OpenGL/GridCube.c:679 msgid "Sorry, problem with number of points at x direction" msgstr "" #: ../src/OpenGL/GridCube.c:424 ../src/OpenGL/GridCube.c:684 msgid "Sorry, problem with X vecteor" msgstr "" #: ../src/OpenGL/GridCube.c:447 ../src/OpenGL/GridCube.c:707 msgid "Sorry, problem with number of points at y direction" msgstr "" #: ../src/OpenGL/GridCube.c:452 ../src/OpenGL/GridCube.c:712 msgid "Sorry, problem with Y vecteor" msgstr "" #: ../src/OpenGL/GridCube.c:474 ../src/OpenGL/GridCube.c:734 msgid "Sorry, problem with number of points at z direction" msgstr "" #: ../src/OpenGL/GridCube.c:479 ../src/OpenGL/GridCube.c:739 msgid "Sorry, problem with Z vecteor" msgstr "" #: ../src/OpenGL/GridCube.c:794 ../src/OpenGL/GridCube.c:810 msgid "Writing..." msgstr "" #: ../src/OpenGL/GridCube.c:897 ../src/OpenGL/GridCube.c:936 #: ../src/OpenGL/GridCube.c:949 ../src/OpenGL/GridCube.c:1147 #: ../src/OpenGL/GridCube.c:1153 ../src/OpenGL/GridCube.c:1159 #: ../src/OpenGL/GridCube.c:1165 ../src/OpenGL/GridCube.c:1171 #: ../src/OpenGL/GridCube.c:1177 ../src/OpenGL/GridCube.c:1197 #: ../src/OpenGL/GridCube.c:1227 ../src/OpenGL/GridCube.c:1327 #: ../src/OpenGL/GridCube.c:1336 ../src/OpenGL/GridCube.c:1345 #: ../src/OpenGL/GridCube.c:1354 ../src/OpenGL/GridCube.c:1584 #: ../src/OpenGL/GridCube.c:1593 ../src/OpenGL/GridCube.c:1602 #: ../src/OpenGL/GridCube.c:1611 msgid "I can not read cube from this file\n" msgstr "" #: ../src/OpenGL/GridCube.c:1256 msgid "Total number of orbitals" msgstr "" #: ../src/OpenGL/GridCube.c:1257 msgid "Orbital number" msgstr "" #: ../src/OpenGL/GridCube.c:1265 msgid "Selection of orbital number" msgstr "" #: ../src/OpenGL/GridCube.c:1321 ../src/OpenGL/GridCube.c:1557 msgid "File Name" msgstr "" #: ../src/OpenGL/GridCube.c:1438 msgid "" "Error detected in gabedit\n" " Please contat the author for this bug" msgstr "" #: ../src/OpenGL/GridCube.c:1465 ../src/OpenGL/OrbitalsMolpro.c:1704 msgid "Orbitals available " msgstr "" #: ../src/OpenGL/GridCube.c:1648 msgid "" "Warning : This file is a orbitals cube file\n" "I read The first orbital\n" msgstr "" #: ../src/OpenGL/GridCube.c:1677 msgid "Sorry this is not a orbitals molpro cube file\n" msgstr "" #: ../src/OpenGL/GridCube.c:1684 msgid "One orbital detected in this file\n" msgstr "" #: ../src/OpenGL/GridCube.c:1704 msgid "Error : This file is not a orbitals cube file\n" msgstr "" #: ../src/OpenGL/GridCube.c:1961 ../src/OpenGL/GridCube.c:1980 #: ../src/OpenGL/GridCube.c:2000 ../src/OpenGL/MenuToolBarGL.c:305 #: ../src/OpenGL/MenuToolBarGL.c:310 ../src/OpenGL/MenuToolBarGL.c:315 #: ../src/OpenGL/MenuToolBarGL.c:320 ../src/OpenGL/MenuToolBarGL.c:325 #: ../src/OpenGL/MenuToolBarGL.c:330 ../src/OpenGL/MenuToolBarGL.c:335 #: ../src/OpenGL/MenuToolBarGL.c:340 msgid "Sorry, you have not a default grid" msgstr "" #: ../src/OpenGL/GridCube.c:2048 ../src/OpenGL/UtilsOrb.c:1088 #: ../src/OpenGL/UtilsOrb.c:1302 msgid "Sorry, All partial charges are null\n" msgstr "" #: ../src/OpenGL/GridMolcas.c:181 ../src/OpenGL/GridMolcas.c:187 #: ../src/OpenGL/GridQChem.c:94 ../src/OpenGL/GridQChem.c:108 #: ../src/OpenGL/GridQChem.c:114 msgid "Sorry, I can not read grid from this file" msgstr "" #: ../src/OpenGL/GridMolcas.c:342 #, c-format msgid "Sorry, I can not open \"%s\" file" msgstr "" #: ../src/OpenGL/GridMolcas.c:874 ../src/OpenGL/GridMolcas.c:938 #, c-format msgid "I can not open %s file" msgstr "" #: ../src/OpenGL/GridMolcas.c:883 ../src/OpenGL/GridMolcas.c:947 msgid "Molcas grid formatted file" msgstr "" #: ../src/OpenGL/GridMolcas.c:898 ../src/OpenGL/GridMolcas.c:965 msgid "Sorry, I can not grid information from thi file\n" msgstr "" #: ../src/OpenGL/GridMolcas.c:904 ../src/OpenGL/GridMolcas.c:971 msgid "Sorry, No grid available in this file\n" msgstr "" #: ../src/OpenGL/GridMolcas.c:982 msgid "Sorry, No density available in this file\n" msgstr "" #: ../src/OpenGL/GridPlans.c:368 msgid "Error : The length of plane should be a float." msgstr "" #: ../src/OpenGL/GridPlans.c:371 ../src/OpenGL/GridPlans.c:377 msgid "Error : The length of plane should be positive. " msgstr "" #: ../src/OpenGL/GridPlans.c:374 msgid " Error : The length of plane should be a float." msgstr "" #: ../src/OpenGL/GridPlans.c:382 ../src/OpenGL/GridPlans.c:386 msgid "Error : A non float value in a float area." msgstr "" #: ../src/OpenGL/GridPlans.c:390 msgid "Error : The length of normal Vector should be > 1e-6. " msgstr "" #: ../src/OpenGL/GridPlans.c:399 msgid "Definition of Maps" msgstr "" #: ../src/OpenGL/GridPlans.c:405 msgid "Definition of contours" msgstr "" #: ../src/OpenGL/GridPlans.c:429 msgid "Center of plan" msgstr "" #: ../src/OpenGL/GridPlans.c:430 msgid "Vector perpendicular to plan" msgstr "" #: ../src/OpenGL/GridPlans.c:449 msgid "First direction" msgstr "" #: ../src/OpenGL/GridPlans.c:452 msgid " Length " msgstr "" #: ../src/OpenGL/GridPlans.c:457 msgid " N points " msgstr "" #: ../src/OpenGL/GridPlans.c:532 ../src/Utils/GabeditContoursPlot.c:1723 msgid "Contours" msgstr "" #: ../src/OpenGL/GridPlans.c:532 msgid "Maps" msgstr "" #: ../src/OpenGL/GridPlans.c:550 msgid "Definition of plane by a Point and a Vector" msgstr "" #: ../src/OpenGL/GridPlans.c:556 msgid "Plane of contours " msgstr "" #: ../src/OpenGL/GridPlans.c:561 msgid "Defintion of plan" msgstr "" #: ../src/OpenGL/GridQChem.c:74 #, c-format msgid "I can not open %s file\n" msgstr "" #: ../src/OpenGL/GridQChem.c:173 #, c-format msgid "" "I can not open %s file\n" ", I read list of grids from this file" msgstr "" #: ../src/OpenGL/GridQChem.c:309 #, c-format msgid "" "I can not open %s file\n" ", I read geometry and grid limits from this file" msgstr "" #: ../src/OpenGL/GridQChem.c:318 msgid "QChem output file" msgstr "" #: ../src/OpenGL/GridQChem.c:324 #, c-format msgid "I can not read geometry from %s file" msgstr "" #: ../src/OpenGL/GridQChem.c:333 #, c-format msgid "I can not read grid limits from %s file" msgstr "" #: ../src/OpenGL/GridQChem.c:361 msgid "Selection your grid" msgstr "" #: ../src/OpenGL/GridQChem.c:370 msgid " Grid Name " msgstr "" #: ../src/OpenGL/GridQChem.c:450 msgid "Grids available" msgstr "" #: ../src/OpenGL/Images.c:154 ../src/OpenGL/Images.c:258 #, c-format msgid "Sorry: can't open %s file\n" msgstr "" #: ../src/OpenGL/IntegralOrbitals.c:95 #, c-format msgid "Computing of <%d %d|delta(ri,rj)| %d %d>.... Please wait" msgstr "" #: ../src/OpenGL/IntegralOrbitals.c:369 msgid "Creation of T1 and T2 tables... Please wait" msgstr "" #: ../src/OpenGL/IntegralOrbitals.c:374 #, c-format msgid "Computing of <%d %d|1/r12| %d %d>.... Please wait" msgstr "" #: ../src/OpenGL/IntegralOrbitals.c:395 msgid "Computing of 2 centers Coulomb integrals... Please wait" msgstr "" #: ../src/OpenGL/IntegralOrbitals.c:442 #, c-format msgid "# of all ERI = %ld, # of computed ERI = %ld" msgstr "" #: ../src/OpenGL/IntegralOrbitals.c:566 ../src/OpenGL/IntegralOrbitals.c:612 #: ../src/OpenGL/IntegralOrbitals.c:1494 ../src/OpenGL/IntegralOrbitals.c:1540 #: ../src/OpenGL/IntegralOrbitals.c:1958 ../src/OpenGL/IntegralOrbitals.c:2004 msgid "Error : an entry is not a float " msgstr "" #: ../src/OpenGL/IntegralOrbitals.c:653 ../src/OpenGL/IntegralOrbitals.c:1581 #: ../src/OpenGL/IntegralOrbitals.c:2045 msgid "Error : You should select at last one orbital" msgstr "" #: ../src/OpenGL/IntegralOrbitals.c:692 ../src/OpenGL/IntegralOrbitals.c:737 #: ../src/OpenGL/IntegralOrbitals.c:798 ../src/OpenGL/IntegralOrbitals.c:859 #: ../src/OpenGL/IntegralOrbitals.c:1412 msgid "Analytic computing of coulomb integral" msgstr "" #: ../src/OpenGL/IntegralOrbitals.c:1194 msgid "Numerical computing of the Coulomb integral (Large box is recommended)" msgstr "" #: ../src/OpenGL/IntegralOrbitals.c:1202 ../src/OpenGL/IntegralOrbitals.c:2266 msgid " Schwarz cutoff : " msgstr "" #: ../src/OpenGL/IntegralOrbitals.c:1284 msgid "Error : You should read orbitals" msgstr "" #: ../src/OpenGL/IntegralOrbitals.c:1296 msgid "Sorry, That does not work with Slater basis set\n" msgstr "" #: ../src/OpenGL/IntegralOrbitals.c:1301 #, c-format msgid "Computing of overlap matrix between orbitals... Please wait" msgstr "" #: ../src/OpenGL/IntegralOrbitals.c:1358 msgid "Preparation of text to show... Please wait" msgstr "" #: ../src/OpenGL/IntegralOrbitals.c:1371 msgid "Overlap matrix" msgstr "" #: ../src/OpenGL/IntegralOrbitals.c:1793 ../src/OpenGL/IntegralOrbitals.c:2258 msgid "Numerical computing (Large box is recommended)" msgstr "" #: ../src/OpenGL/IntegralOrbitals.c:1868 msgid "Analytic computing of spatial overlap integral" msgstr "" #: ../src/OpenGL/LabelsGL.c:713 ../src/OpenGL/LabelsGL.c:721 msgid "Set title" msgstr "" #: ../src/OpenGL/LabelsGL.c:718 msgid "Title " msgstr "" #: ../src/OpenGL/LabelsGL.c:731 msgid "X position(%)" msgstr "" #: ../src/OpenGL/LabelsGL.c:733 msgid "Y position(%)" msgstr "" #: ../src/OpenGL/LabelsGL.c:735 msgid "Font" msgstr "" #: ../src/OpenGL/LabelsGL.c:736 msgid "Color" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:143 msgid "Read geometry" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:145 msgid "Read a xyz file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:147 msgid "Read a pdb file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:149 msgid "Read a hyperchem file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:153 msgid "Read the first geometry in a Dalton output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:155 msgid "Read the last geometry in a Dalton output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:157 msgid "Read the first geometry in a Gamess output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:159 msgid "Read the last geometry in a Gamess output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:161 msgid "Read the first geometry in a Gaussian output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:163 msgid "Read the last geometry in a Gaussian output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:165 msgid "Read the geometry in a Gaussian fchk file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:167 msgid "Read the first geometry in a Molcas output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:169 msgid "Read the last geometry in a Molcas output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:171 msgid "Read the first geometry in a Molpro output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:173 msgid "Read the last geometry in a Molpro output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:179 msgid "Read the first geometry from a Mopac aux file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:187 msgid "Read the first geometry in a Orca output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:189 msgid "Read the last geometry in a Orca output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:191 msgid "Read the first geometry in a FireFly output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:193 msgid "Read the last geometry in a FireFly output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:200 msgid "Read geometry from a gabedit file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:202 msgid "Read geometry from a molden file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:205 msgid "Read Geometry and Orbitals(Auto)" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:211 msgid "Read Geometry and Orbitals from a Gamess output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:213 ../src/OpenGL/MenuToolBarGL.c:215 msgid "Read Geometry and Orbitals from a Orca files" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:217 msgid "Read Geometry and Orbitals from a FireFly output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:219 msgid "Read Geometry and Orbitals from a Q-Chem output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:221 msgid "Read Geometry and Orbitals from a Mopac output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:223 msgid "Read Geometry and Orbitals from a Gaussian output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:225 msgid "Read Geometry and Orbitals from a Gaussian fchk file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:227 msgid "Read Geometry and Orbitals from a Molpro output file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:229 msgid "Read Geometry and Orbitals from a Gabedit file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:231 msgid "Read Geometry and Orbitals from a Molden file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:234 msgid "Save Geometry and Orbitals in a Gabedit file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:235 msgid "" "Sorry, I cannot save this type of orbitals \n" "(probably these are molpro or mopac orbitals)" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:268 msgid "Load Gaussian orbitals cube file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:270 msgid "Load Gaussian density cube file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:272 msgid "Load Gaussian gradient cube file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:274 msgid "Load Gaussian laplacian cube file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:276 msgid "Load Gaussian norm gradient cube file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:278 msgid "Load Gaussian potential cube file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:280 msgid "Load Molpro one orbital cube file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:282 msgid "Load Molpro several orbitals cube file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:284 msgid "Load Molpro density cube file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:286 msgid "Load Molpro gradient cube file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:288 msgid "Load density from Molpro laplacian cube file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:290 msgid "Load Molpro laplacian cube file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:292 msgid "Load orbitals from adf file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:294 msgid "Load density from adf file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:296 msgid "Load Orbitals from molcasgrid file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:298 msgid "Load density from molcasgrid file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:300 msgid "Load Gabedit cube file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:302 msgid "Load Q-Chem Grid file" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:346 msgid "Calculation of molecular electronic density grid" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:351 msgid "Calculation of (molecular - atomic) density grid" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:356 msgid "Calculation of molecular electronic spin density grid" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:361 msgid "Calculation of atomic electronic density grid" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:366 msgid "Calculation of Becke ELF" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:371 msgid "Calculation of Savin ELF" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:381 msgid "Calculation of FED Electrophilic susceptibility" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:386 msgid "Calculation of FED Nucleophilic susceptibility" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:391 msgid "Calculation of FED Radical susceptibility" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:400 ../src/OpenGL/MenuToolBarGL.c:405 msgid "Compute Solvent Accessible Surface" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:411 msgid "Calculation of MEP using Molecular Orbitals" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:417 msgid "" "Calculation of MEP from Molecular Orbitals/Poisson by Congugate Gradient" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:423 msgid "Calculation of MEP from Molecular Orbitals/Poisson by Multigrid" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:429 msgid "Calculation of MEP from partial charges of atoms" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:530 msgid "Contours in a plane perpendicular to first direction" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:532 msgid "Contours in a plane perpendicular to second direction" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:534 msgid "Contours in a plane perpendicular to third direction" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:546 msgid "Plane perpendicular to first direction" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:548 msgid "Plane perpendicular to second direction" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:550 msgid "Plane perpendicular to third direction" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:615 msgid "Set Light Positions" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:616 msgid "Set Surface Colors" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:664 msgid "Save image in jpg file format" msgstr "" #: ../src/OpenGL/MenuToolBarGL.c:2230 #, c-format msgid "Error : I cannot show the menu!\n" msgstr "" #: ../src/OpenGL/Orbitals.c:212 ../src/OpenGL/Orbitals.c:1918 #: ../src/OpenGL/Orbitals.c:1925 ../src/OpenGL/Orbitals.c:1929 #: ../src/OpenGL/Orbitals.c:1935 ../src/OpenGL/Orbitals.c:1972 #: ../src/OpenGL/Orbitals.c:1981 ../src/OpenGL/Orbitals.c:2146 #: ../src/OpenGL/Orbitals.c:2153 ../src/OpenGL/Orbitals.c:2157 #: ../src/OpenGL/Orbitals.c:2163 ../src/OpenGL/Orbitals.c:2172 #: ../src/OpenGL/Orbitals.c:2181 ../src/OpenGL/Orbitals.c:2209 #: ../src/OpenGL/Orbitals.c:2215 ../src/OpenGL/Orbitals.c:2223 #: ../src/OpenGL/Orbitals.c:2271 ../src/OpenGL/Orbitals.c:2280 #: ../src/OpenGL/Orbitals.c:2308 ../src/OpenGL/Orbitals.c:2315 #: ../src/OpenGL/Orbitals.c:2324 ../src/OpenGL/Orbitals.c:2391 #: ../src/OpenGL/Orbitals.c:2401 ../src/OpenGL/OrbitalsDalton.c:565 #: ../src/OpenGL/OrbitalsGamess.c:1136 ../src/OpenGL/OrbitalsGamess.c:1162 #: ../src/OpenGL/OrbitalsGamess.c:1177 ../src/OpenGL/OrbitalsGamess.c:1181 #: ../src/OpenGL/OrbitalsGamess.c:1190 ../src/OpenGL/OrbitalsGamess.c:1286 #: ../src/OpenGL/OrbitalsGamess.c:1296 ../src/OpenGL/OrbitalsMolpro.c:868 #: ../src/OpenGL/OrbitalsMolpro.c:1591 ../src/OpenGL/OrbitalsMolpro.c:1608 #: ../src/OpenGL/OrbitalsMolpro.c:1768 ../src/OpenGL/OrbitalsMopac.c:1203 #: ../src/OpenGL/OrbitalsMopac.c:1213 ../src/OpenGL/OrbitalsMopac.c:1232 #: ../src/OpenGL/OrbitalsMopac.c:1240 ../src/OpenGL/OrbitalsMopac.c:1279 #: ../src/OpenGL/OrbitalsMopac.c:1303 ../src/OpenGL/OrbitalsOrca.c:74 #: ../src/OpenGL/OrbitalsOrca.c:700 ../src/OpenGL/OrbitalsOrca.c:707 #: ../src/OpenGL/OrbitalsOrca.c:716 ../src/OpenGL/OrbitalsOrca.c:747 #: ../src/OpenGL/OrbitalsOrca.c:761 ../src/OpenGL/OrbitalsQChem.c:1172 #: ../src/OpenGL/OrbitalsQChem.c:1189 ../src/OpenGL/OrbitalsQChem.c:1198 #: ../src/OpenGL/OrbitalsQChem.c:1212 ../src/OpenGL/OrbitalsQChem.c:1216 #: ../src/OpenGL/OrbitalsQChem.c:1225 ../src/OpenGL/OrbitalsQChem.c:1329 #: ../src/OpenGL/OrbitalsQChem.c:1339 ../src/OpenGL/StatusOrb.c:245 msgid "Mol. Orb." msgstr "" #: ../src/OpenGL/Orbitals.c:236 #, c-format msgid "Error : The isovalue value should between %lf and %lf" msgstr "" #: ../src/OpenGL/Orbitals.c:434 msgid "Cutoff molecular orbitals coefficients" msgstr "" #: ../src/OpenGL/Orbitals.c:935 msgid " Min " msgstr "" #: ../src/OpenGL/Orbitals.c:936 msgid " Max " msgstr "" #: ../src/OpenGL/Orbitals.c:937 msgid " Value " msgstr "" #: ../src/OpenGL/Orbitals.c:1030 msgid "Calculations of isosurfaces for an orbital" msgstr "" #: ../src/OpenGL/Orbitals.c:1041 msgid "Iso-Value" msgstr "" #: ../src/OpenGL/Orbitals.c:1165 msgid "Cut MO Coef." msgstr "" #: ../src/OpenGL/Orbitals.c:1170 msgid "DOS Alpha" msgstr "" #: ../src/OpenGL/Orbitals.c:1175 msgid "DOS Beta" msgstr "" #: ../src/OpenGL/Orbitals.c:1180 msgid "DOS All" msgstr "" #: ../src/OpenGL/Orbitals.c:1233 ../src/OpenGL/Orbitals.c:1241 #: ../src/OpenGL/Orbitals.c:1244 ../src/OpenGL/Orbitals.c:1832 msgid "Unknown" msgstr "" #: ../src/OpenGL/Orbitals.c:1294 #, c-format msgid "Sorry, I can not create '%s' file\n" msgstr "" #: ../src/OpenGL/Orbitals.c:1391 ../src/OpenGL/OrbitalsGamess.c:866 #: ../src/OpenGL/OrbitalsQChem.c:925 #, c-format msgid "Sorry, I can not read orbitals from '%s' file\n" msgstr "" #: ../src/OpenGL/Orbitals.c:1909 ../src/OpenGL/Orbitals.c:2137 #, c-format msgid "Sorry, I can not read this format in '%s' file\n" msgstr "" #: ../src/OpenGL/Orbitals.c:2020 ../src/OpenGL/Orbitals.c:2034 msgid "" "Sorry\n" "I can not read the alpha MO coefficients" msgstr "" #: ../src/OpenGL/Orbitals.c:2201 msgid "Sorry, This file is not in Gabedit Format\n" msgstr "" #: ../src/OpenGL/Orbitals.c:2300 msgid "Sorry, This file is not in Molden Format\n" msgstr "" #: ../src/OpenGL/OrbitalsDalton.c:235 ../src/OpenGL/OrbitalsDalton.c:260 #: ../src/OpenGL/OrbitalsDalton.c:334 ../src/OpenGL/OrbitalsGamess.c:417 #: ../src/OpenGL/OrbitalsQChem.c:486 msgid "Sorry I can read basis from this file\n" msgstr "" #: ../src/OpenGL/OrbitalsGamess.c:435 ../src/OpenGL/OrbitalsMolpro.c:603 #: ../src/OpenGL/OrbitalsMolpro.c:624 ../src/OpenGL/OrbitalsMolpro.c:894 msgid "Sorry I can read basis in this file\n" msgstr "" #: ../src/OpenGL/OrbitalsGamess.c:1126 ../src/OpenGL/OrbitalsMopac.c:1193 #: ../src/OpenGL/OrbitalsQChem.c:1162 #, c-format msgid "Sorry, I can not read this format from '%s' file\n" msgstr "" #: ../src/OpenGL/OrbitalsGamess.c:1186 ../src/OpenGL/OrbitalsQChem.c:1221 #, c-format msgid "Sorry, I can not read basis from '%s' file\n" msgstr "" #: ../src/OpenGL/OrbitalsGamess.c:1197 ../src/OpenGL/OrbitalsQChem.c:1232 #, c-format msgid "Sorry, I can not read '%s' file, problem with basis set \n" msgstr "" #: ../src/OpenGL/OrbitalsMolpro.c:1181 #, c-format msgid "Sorry I can not open \"%s\" file\n" msgstr "" #: ../src/OpenGL/OrbitalsMolpro.c:1524 msgid "" "Error detected in gabedit\n" "i Please contat the author for this bug" msgstr "" #: ../src/OpenGL/OrbitalsMolpro.c:1643 msgid "Selection of type of orbitals" msgstr "" #: ../src/OpenGL/OrbitalsMolpro.c:1777 #, c-format msgid "" "Sorry,\n" "I can not read atomic basis and/or molecular orbitals from\n" " \"%s\"\n" " file\n" "\n" "For display density and/or molecular orbitals read from molpro output file,\n" "the following keywords are required:\n" "Gprint, basis;\n" "Gprint, orbital;\n" "After a hf or multi calculation : Printorb, 1000;\n" "After a ci calculation : NATORB, 2001.2 , PRINT=1000;\n" "\n" msgstr "" #: ../src/OpenGL/OrbitalsMopac.c:1304 ../src/OpenGL/OrbitalsOrca.c:582 #, c-format msgid "Sorry, I can not read the orbitals from '%s' file\n" msgstr "" #: ../src/OpenGL/OrbitalsOrca.c:60 #, c-format msgid "Sorry, I can not read orbitals from the orca file\n" msgstr "" #: ../src/OpenGL/OrbitalsOrca.c:84 #, c-format msgid "Sorry, I cannot create the molden file using orca_2mkl" msgstr "" #: ../src/OpenGL/OrbitalsOrca.c:360 #, c-format msgid "" "Sorry\n" "I can not read basis from '%s' file\n" msgstr "" #: ../src/OpenGL/OrbitalsOrca.c:437 #, c-format msgid "Sorry, I can not read '%s' file, problem with basis set\n" msgstr "" #: ../src/OpenGL/OrbitalsOrca.c:692 msgid "Sorry, This file is not in Orca output file\n" msgstr "" #: ../src/OpenGL/OrbitalsQChem.c:469 msgid "" "Sorry I can read basis from this file. Add \n" "PRINT_GENERAL_BASIS true\n" "PRINT_ORBITALS true\n" " to your input file" msgstr "" #: ../src/OpenGL/OrbitalsQChem.c:1182 #, c-format msgid "" "Sorry, Gabedit does not support mixed spherical and contaminant cartezian " "basis functions\n" "\n" "Use 'purecart 11111' or 'purecart 22222' in $rem block" msgstr "" #: ../src/OpenGL/PlanesMapped.c:108 ../src/OpenGL/PlanesMapped.c:230 msgid "Projection " msgstr "" #: ../src/OpenGL/PlanesMapped.c:112 msgid " left if <0, right if >0. and nothing if 0 " msgstr "" #: ../src/OpenGL/PreferencesOrb.c:103 msgid "Positive value" msgstr "" #: ../src/OpenGL/PreferencesOrb.c:104 msgid "Negative value" msgstr "" #: ../src/OpenGL/PreferencesOrb.c:407 msgid " Distance from the viewer to the near clipping plane " msgstr "" #: ../src/OpenGL/PreferencesOrb.c:415 msgid " Distance from the viewer to the far clipping plane " msgstr "" #: ../src/OpenGL/PreferencesOrb.c:423 msgid " Zoom factor " msgstr "" #: ../src/OpenGL/PreferencesOrb.c:431 msgid "Get Optimal values" msgstr "" #: ../src/OpenGL/PreferencesOrb.c:441 msgid "Perspective" msgstr "" #: ../src/OpenGL/PreferencesOrb.c:450 msgid "No perspective" msgstr "" #: ../src/OpenGL/PreferencesOrb.c:489 msgid "Camera" msgstr "" #: ../src/OpenGL/PreferencesOrb.c:563 msgid "Ligth positions" msgstr "" #: ../src/OpenGL/PreferencesOrb.c:663 msgid "OpenGL Options" msgstr "" #: ../src/OpenGL/PreferencesOrb.c:676 msgid " Number Of Subdivisions for a Cylinder " msgstr "" #: ../src/OpenGL/PreferencesOrb.c:686 msgid " Number Of Subdivisions for a Sphere " msgstr "" #: ../src/OpenGL/PrincipalAxisGL.c:361 ../src/Utils/UtilsInterface.c:2769 msgid "Set Dipole Color" msgstr "" #: ../src/OpenGL/PrincipalAxisGL.c:419 msgid "Set the principal axis parameters" msgstr "" #: ../src/OpenGL/PrincipalAxisGL.c:473 msgid "Color for the first axis " msgstr "" #: ../src/OpenGL/PrincipalAxisGL.c:501 msgid "Color for the second axis " msgstr "" #: ../src/OpenGL/PrincipalAxisGL.c:529 msgid "Color for the third axis " msgstr "" #: ../src/OpenGL/StatusOrb.c:155 #, c-format msgid " Geometry Reading : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:158 #, c-format msgid " Recording of the geometry : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:161 #, c-format msgid " Computing of an integral : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:165 #, c-format msgid " Computing of the electronic density grid : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:168 #, c-format msgid " Grid computing for an orbital : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:171 #, c-format msgid " Grid computing for the ELF : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:174 #, c-format msgid " Grid computing for the Electro. susceptibility : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:177 #, c-format msgid " Grid computing for the Nucleo. susceptibility : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:180 #, c-format msgid " Grid computing for the Radical. susceptibility : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:182 #, c-format msgid " Grid Computing : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:185 #, c-format msgid " Scale grid : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:188 #, c-format msgid " Substract grid : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:191 #, c-format msgid " Isosurface Computing : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:194 #, c-format msgid " Save Grid : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:197 #, c-format msgid " Grid reading : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:200 #, c-format msgid " Grid mapping : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:203 #, c-format msgid " Computing of the laplacian of the grid : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:206 #, c-format msgid " Computing of the gradient of the grid : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:209 msgid " Scan file for get the total orbitals number ....." msgstr "" #: ../src/OpenGL/StatusOrb.c:212 #, c-format msgid " Computing of the MEP : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:215 #, c-format msgid " Multipole Computing : %.0f%%" msgstr "" #: ../src/OpenGL/StatusOrb.c:246 msgid "IsoSurface" msgstr "" #: ../src/OpenGL/StatusOrb.c:317 msgid " File name : Nothing" msgstr "" #: ../src/OpenGL/StatusOrb.c:317 msgid " File type : Nothing" msgstr "" #: ../src/OpenGL/StatusOrb.c:317 msgid " Geometry : Nothing" msgstr "" #: ../src/OpenGL/StatusOrb.c:317 msgid " Mol. Orb. : Nothing" msgstr "" #: ../src/OpenGL/StatusOrb.c:318 msgid " Atomic orb. : Nothing" msgstr "" #: ../src/OpenGL/StatusOrb.c:318 msgid " Grid : Nothing" msgstr "" #: ../src/OpenGL/StatusOrb.c:318 msgid " Iso Surface : Nothing" msgstr "" #: ../src/OpenGL/StatusOrb.c:318 msgid " Right mouse button for popup menu." msgstr "" #: ../src/OpenGL/TriangleDraw.c:451 msgid "Set opacity" msgstr "" #: ../src/OpenGL/TriangleDraw.c:468 msgid "Opacity coefficient : " msgstr "" #: ../src/OpenGL/UtilsOrb.c:322 #, c-format msgid "Sorry, I can not determine the type of '%s' file\n" msgstr "" #: ../src/OpenGL/UtilsOrb.c:896 ../src/OpenGL/UtilsOrb.c:1922 msgid "Vx" msgstr "" #: ../src/OpenGL/UtilsOrb.c:898 ../src/OpenGL/UtilsOrb.c:1924 msgid "Vy" msgstr "" #: ../src/OpenGL/UtilsOrb.c:900 ../src/OpenGL/UtilsOrb.c:1926 msgid "Vz" msgstr "" #: ../src/OpenGL/UtilsOrb.c:902 ../src/OpenGL/UtilsOrb.c:1928 msgid "Minimum" msgstr "" #: ../src/OpenGL/UtilsOrb.c:904 ../src/OpenGL/UtilsOrb.c:1930 msgid "Maximum" msgstr "" #: ../src/OpenGL/UtilsOrb.c:906 ../src/OpenGL/UtilsOrb.c:1932 msgid "Number of points" msgstr "" #: ../src/OpenGL/UtilsOrb.c:911 ../src/OpenGL/UtilsOrb.c:1937 msgid "First direction " msgstr "" #: ../src/OpenGL/UtilsOrb.c:956 ../src/OpenGL/UtilsOrb.c:1982 msgid "Second direction " msgstr "" #: ../src/OpenGL/UtilsOrb.c:1002 ../src/OpenGL/UtilsOrb.c:2028 msgid "Third direction " msgstr "" #: ../src/OpenGL/UtilsOrb.c:1314 msgid "ELF Attractors" msgstr "" #: ../src/OpenGL/UtilsOrb.c:1383 msgid "Error : The number of points should be integer. " msgstr "" #: ../src/OpenGL/UtilsOrb.c:1392 msgid "Error : The number of points should be positive. " msgstr "" #: ../src/OpenGL/UtilsOrb.c:1802 msgid "Error : The solvent radius should be a float " msgstr "" #: ../src/OpenGL/UtilsOrb.c:2143 msgid "Box & Grid & Solvent radius" msgstr "" #: ../src/OpenGL/UtilsOrb.c:2251 msgid "Scale Ball&Stick" msgstr "" #: ../src/OpenGL/UtilsOrb.c:2268 msgid "Scale Ball" msgstr "" #: ../src/OpenGL/UtilsOrb.c:2270 msgid "Scale Stick" msgstr "" #: ../src/OpenGL/UtilsOrb.c:2485 ../src/Utils/GabeditContoursPlot.c:5216 msgid "Color mapping type" msgstr "" #: ../src/OpenGL/UtilsOrb.c:2498 ../src/Utils/GabeditContoursPlot.c:5229 msgid "Multi color" msgstr "" #: ../src/OpenGL/UtilsOrb.c:2503 ../src/Utils/GabeditContoursPlot.c:5234 msgid "2 colors" msgstr "" #: ../src/OpenGL/UtilsOrb.c:2528 ../src/Utils/GabeditContoursPlot.c:5259 msgid "Unicolor" msgstr "" #: ../src/OpenGL/UtilsOrb.c:2554 ../src/Utils/GabeditContoursPlot.c:5301 #, c-format msgid "Color Mapping options" msgstr "" #: ../src/OpenGL/UtilsOrb.c:2625 msgid "Error : alpha should be a real between 0 and 100 " msgstr "" #: ../src/OpenGL/UtilsOrb.c:2665 msgid "Set alpha for FED calculation" msgstr "" #: ../src/OpenGL/Vibration.c:506 ../src/SemiEmpirical/SemiEmpiricalDlg.c:2124 msgid "Working Folder" msgstr "" #: ../src/OpenGL/Vibration.c:544 msgid "Step" msgstr "" #: ../src/OpenGL/Vibration.c:581 msgid " Energy keywords " msgstr "" #: ../src/OpenGL/Vibration.c:595 msgid " Prop. keywords " msgstr "" #: ../src/OpenGL/Vibration.c:1040 #, c-format msgid "Sorry, I can not read '%s' file\n" msgstr "" #: ../src/OpenGL/Vibration.c:1060 #, c-format msgid "Sorry, I can not read geometry from '%s' file\n" msgstr "" #: ../src/OpenGL/Vibration.c:1127 ../src/OpenGL/Vibration.c:2938 #: ../src/OpenGL/Vibration.c:3594 ../src/OpenGL/Vibration.c:3779 #: ../src/Spectrum/IRSpectrum.c:125 ../src/Spectrum/IRSpectrum.c:132 #: ../src/Spectrum/RamanSpectrum.c:125 ../src/Spectrum/RamanSpectrum.c:132 #, c-format msgid "Sorry, I can not read frequencies from '%s' file\n" msgstr "" #: ../src/OpenGL/Vibration.c:1233 ../src/OpenGL/Vibration.c:1247 #: ../src/OpenGL/Vibration.c:3257 #, c-format msgid "Sorry, I can not read Modes from '%s' file\n" msgstr "" #: ../src/OpenGL/Vibration.c:1373 ../src/OpenGL/Vibration.c:1541 #: ../src/OpenGL/Vibration.c:1989 ../src/OpenGL/Vibration.c:3200 #: ../src/OpenGL/Vibration.c:3218 ../src/OpenGL/Vibration.c:3368 #: ../src/OpenGL/Vibration.c:3412 #, c-format msgid "Sorry, I can not read the frequencies from '%s' file\n" msgstr "" #: ../src/OpenGL/Vibration.c:1501 #, c-format msgid "" "Sorry, I can not read the normal modes from '%s' file\n" " Set debug = 1 in freq object for obtain the normal " "modes from MPQC\n" msgstr "" #: ../src/OpenGL/Vibration.c:1591 #, c-format msgid "Sorry, I can not read the modes of frequencies from '%s' file\n" msgstr "" #: ../src/OpenGL/Vibration.c:1830 ../src/OpenGL/Vibration.c:3110 #, c-format msgid "Sorry, I can not read Geometry from '%s' file\n" msgstr "" #: ../src/OpenGL/Vibration.c:1850 ../src/OpenGL/Vibration.c:3131 #, c-format msgid "Sorry, I can not read geometry from '%s' file\n" msgstr "" #: ../src/OpenGL/Vibration.c:2965 msgid "" "Sorry\n" "No normal modes in this file : Use the Freq(SaveNM) option in your input file" msgstr "" #: ../src/OpenGL/Vibration.c:2974 msgid "" "Sorry\n" "I can not the frequencies from this file" msgstr "" #: ../src/OpenGL/Vibration.c:2983 msgid "" "Sorry\n" "I can not the normal modes from this file" msgstr "" #: ../src/OpenGL/Vibration.c:4178 msgid " Scale factor " msgstr "" #: ../src/OpenGL/Vibration.c:4190 msgid " Threshold(Bohr) " msgstr "" #: ../src/OpenGL/Vibration.c:4214 msgid " Arrow radius " msgstr "" #: ../src/OpenGL/Vibration.c:4226 msgid " Steps by cycle " msgstr "" #: ../src/OpenGL/Vibration.c:4500 #, c-format msgid "" " You can read frequencies and normal modes from :\n" " * a Gabedit input file.\n" " * a Gaussian (g98 and g03) output file.\n" " * a Molpro output file.\n" " * a MPQC output file.\n" " * a ADF output file. Only the 2004 version of ADF is supported\n" " * a Molden input file.\n" msgstr "" #: ../src/OpenGL/Vibration.c:4519 msgid "" " For create an animated file :\n" " ============================\n" " 1) Read frequencies and normal modes from a Gaussian, Molpro, Gabedit, " "Molden, ADF or MPQC output file.\n" " 2) Select \"create a series of BMP (or PPM or POV) images\" button.\n" " You can select your favorite directory by clicking to \"Directory\" " "button.\n" " 3) Click to Play button.\n" " 4) After on cycle Gabedit create a series of BMP(gab*.bmp) or PPM (gab*." "ppm) or POV(gab*.pov) files.\n" " From these files, you can create a gif or a png animated file using " "convert software.\n" " with \"convert -delay 10 -loop 1000 gab*.bmp imageAnim.gif\" " "command you can create a gif animated file.\n" " with \"convert -delay 10 -loop 1000 gab*.bmp imageAnim.mng\" " "command you can create a png animated file.\n" "\n" " For gab*.pov files :\n" " You must initially create files gab*.bmp using gab*.pov files.\n" " Then you can create the animated file using gab*.bmp file.\n" "\n" " You can use the xPovAnim script (from utils/povray directory) " "for create the gif animated file from gab*.pov files.\n" "\n" " convert is a free software. You can download this(for any " "system) from http://www.imagemagick.org\n" " povray is a free software. You can download this(for any system) " "from http://www.povray.org\n" "\n" msgstr "" #: ../src/OpenGL/ViewOrb.c:61 msgid "Gabedit : Orbitals/Density/Vibration" msgstr "" #: ../src/Orca/Orca.c:166 msgid "Orca input" msgstr "" #: ../src/Orca/Orca.c:169 msgid " Orca input " msgstr "" #: ../src/Orca/OrcaKeywords.c:626 msgid "SCF convergence" msgstr "" #: ../src/Orca/OrcaKeywords.c:1130 msgid "SCF Convergence" msgstr "" #: ../src/Orca/OrcaKeywords.c:1143 msgid "Type of method" msgstr "" #: ../src/Orca/OrcaKeywords.c:1170 msgid "Excited states" msgstr "" #: ../src/QChem/QChem.c:173 msgid "QChem input" msgstr "" #: ../src/QChem/QChem.c:176 msgid " QChem input " msgstr "" #: ../src/QChem/QChemBasis.c:94 msgid "Sorry" msgstr "" #: ../src/QChem/QChemGuess.c:220 msgid "Mixed alpha and beta orbitals" msgstr "" #: ../src/QChem/QChemLib.c:52 ../src/QChem/QChemLib.c:78 #: ../src/QChem/QChemLib.c:126 ../src/QChem/QChemLib.c:179 #, c-format msgid "" "Sorry the qchemBasis is corrupted.\n" "Please reinstall gabedit\n" msgstr "" #: ../src/QChem/QChemRem.c:673 msgid "Exchange Type" msgstr "" #: ../src/SemiEmpirical/SemiEmpirical.c:240 #: ../src/SemiEmpirical/SemiEmpirical.c:523 msgid "Problem : I cannot caculate the Gradient... " msgstr "" #: ../src/SemiEmpirical/SemiEmpirical.c:241 #: ../src/SemiEmpirical/SemiEmpirical.c:524 msgid "Calculation Stopped " msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:470 #, c-format msgid "" "Sorry, I cannot read the output file : %s ; Check also the installation of " "Mopac..." msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:708 #, c-format msgid "" "Sorry, I cannot read the output file : %s ; Check also the installation of " "FireFly..." msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:1006 #, c-format msgid "" "Sorry, I cannot read the output file : %s ; Check also the installation of " "Orca..." msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:1638 msgid "Charge & Multiplicity" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:2177 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:2246 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:2314 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4579 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4580 msgid "Model" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:2215 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:2283 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:2352 msgid "Additional keywords" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:2386 #, c-format msgid "Semi-empirical calculation/%s" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3508 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3765 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3786 msgid "Calculation Canceled " msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3555 msgid "" "\n" "\tGeometries after minimization by Mopac" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3594 msgid "" "\n" "\tGeometries selected and optimized using your Semi-emperical potentials" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3811 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3812 msgid "Molecular Dynamics Options" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3826 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4836 msgid "Heating" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3834 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4844 msgid "Equilibrium" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3842 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4852 msgid "Production" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3850 msgid "Cooling" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3858 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4860 msgid "Time (ps)" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3914 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4906 msgid "Temperature (K)" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3972 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4954 msgid "Step size (fs)" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:3998 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4980 msgid "Screen Rafresh after" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4024 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:5006 msgid "steps" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4032 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:5014 msgid "Collide(ps^-1)" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4058 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:5040 msgid "Friction(ps^-1)" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4123 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:5105 msgid "MD Trajectory via Verlet velocity Algorithm" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4133 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:5115 msgid "MD Trajectory via Modified Beeman Algorithm" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4143 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:5125 msgid "Stochastic Dynamics via Verlet velocity Algorithm" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4161 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:5143 msgid "No constraints" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4172 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:5154 msgid "Bond constraints" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4183 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:5165 msgid "Bond & Angle constraints" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4201 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:5183 msgid "Save Trajectory in " msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4229 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:5211 msgid "Save Properties in " msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4296 msgid "" "If \"MD Trajectory via Verlet velocity Algorithm\" is selected :\n" " A molecular dynamic simulation is run using the Verlet velocity " "Algorithm.\n" " During the production step, the user can select the Andersen or " "Berendsen thermostat which is then applied.\n" " The Berendsen thermostat is applied for Heating, Equilibrium and " "Cooling steps.\n" "\n" "If \"MD Trajectory via Modified Beeman Algorithm\" is selected :\n" " A molecular dynamic simulation is run using the Modified Beeman " "Algorithm.\n" " During the production step, the user can select the Andersen or " "Berendsen thermostat which is then applied.\n" " The Berendsen thermostat is applied for Heating, Equilibrium and " "Cooling steps.\n" "\n" "If \"Stochastic Dynamics via Verlet velocity Algorithm\" is selected :\n" " A stochastic dynamic simulation is run using Verlet velocity " "Algorithm.\n" " The velocities are scaled (Berendsen method)during the Heating, " "Equilibrium and Cooling steps.\n" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4331 msgid "" "During the production step, Gabedit selects a number geometries\n" "At the end of the molecular dynamic simulation,\n" "the geometries are sorted by energy and are saved in a file.\n" "Gabedit can also optimize these geometries, interactively.\n" "The very similar molecular strcutures can be removed.\n" "Gabedit can also creates input files for mopac, FireFly or Gaussian for a " "post processing.\n" "\n" "If \"MD Trajectory via Verlet velocity Algorithm\" is selected :\n" " A molecular dynamic simulation is run using the Verlet velocity " "Algorithm.\n" " During the production step, the user can select the Andersen or " "Berendsen thermostat which is then applied.\n" " The Berendsen thermostat is applied for Heating, Equilibrium and " "Cooling steps.\n" "\n" "If \"MD Trajectory via Modified Beeman Algorithm\" is selected :\n" " A molecular dynamic simulation is run using the Modified Beeman " "Algorithm.\n" " During the production step, the user can select the Andersen or " "Berendsen thermostat which is then applied.\n" " The Berendsen thermostat is applied for Heating, Equilibrium and " "Cooling steps.\n" "\n" "If \"Stochastic Dynamics via Verlet velocity Algorithm\" is selected :\n" " A stochastic dynamic simulation is run using Verlet velocity " "Algorithm.\n" " The velocities are scaled (Berendsen method)during the Heating, " "Equilibrium and Cooling steps.\n" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4373 msgid "Post Processing" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4387 msgid "Minimization of selected geometries" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4400 msgid "No minimization of selected geometries" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4420 msgid "Remove identical molecular structures" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4428 msgid "Energy tolerance(KCal/mol)" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4455 msgid "Distance tolerance(Angstrom)" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4490 msgid "Create Mopac files. Keywords " msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4515 msgid "Create Gaussian files. Keywords " msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4541 msgid "Create FireFly files. Keywords " msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4593 msgid "Use Mopac with method" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4623 msgid "Use FireFly with method" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4729 msgid "Number of selected geometries" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4752 msgid "Geometries saved in File" msgstr "" #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4821 #: ../src/SemiEmpirical/SemiEmpiricalDlg.c:4822 msgid "Molecular Dynamics" msgstr "" #: ../src/Spectrum/DOS.c:40 msgid "Density of states" msgstr "" #: ../src/Spectrum/DOS.c:50 ../src/Spectrum/ECDSpectrum.c:119 #: ../src/Spectrum/NMRSpectrum.c:1722 ../src/Spectrum/UVSpectrum.c:119 msgid "Intensity" msgstr "" #: ../src/Spectrum/DOS.c:60 ../src/Spectrum/ECDSpectrum.c:126 #: ../src/Spectrum/NMRSpectrum.c:1747 ../src/Spectrum/UVSpectrum.c:126 #, c-format msgid "Sorry, I can not read energies from '%s' file\n" msgstr "" #: ../src/Spectrum/DOS.c:147 msgid "Read energies from a Gabedit file" msgstr "" #: ../src/Spectrum/DOS.c:207 msgid "Read energies from a sample file(1 column : Energy(eV))" msgstr "" #: ../src/Spectrum/DOS.c:227 msgid "The number of states should be > 0" msgstr "" #: ../src/Spectrum/ECDSpectrum.c:97 msgid "ECD/Visible spectrum" msgstr "" #: ../src/Spectrum/ECDSpectrum.c:213 ../src/Spectrum/UVSpectrum.c:213 msgid "Read energies and intensities from a Gabedit file" msgstr "" #: ../src/Spectrum/ECDSpectrum.c:223 ../src/Spectrum/UVSpectrum.c:223 msgid "Read energies and intensities from a Molden file" msgstr "" #: ../src/Spectrum/ECDSpectrum.c:238 ../src/Spectrum/UVSpectrum.c:238 msgid "Read energies and intensities from a MPQC output file" msgstr "" #: ../src/Spectrum/ECDSpectrum.c:253 ../src/Spectrum/UVSpectrum.c:253 msgid "Read energies and intensities from a Molpro output file" msgstr "" #: ../src/Spectrum/ECDSpectrum.c:282 ../src/Spectrum/UVSpectrum.c:282 msgid "Read energies and intensities from a Dalton output file" msgstr "" #: ../src/Spectrum/ECDSpectrum.c:297 ../src/Spectrum/UVSpectrum.c:362 msgid "Read energies and intensities from a Gamess output file" msgstr "" #: ../src/Spectrum/ECDSpectrum.c:377 ../src/Spectrum/UVSpectrum.c:442 msgid "Read energies and intensities from a FireFly output file" msgstr "" #: ../src/Spectrum/ECDSpectrum.c:491 ../src/Spectrum/UVSpectrum.c:514 msgid "Read energies and intensities from a Gaussian output file" msgstr "" #: ../src/Spectrum/ECDSpectrum.c:630 ../src/Spectrum/UVSpectrum.c:653 msgid "Select the type of calculations" msgstr "" #: ../src/Spectrum/ECDSpectrum.c:655 ../src/Spectrum/UVSpectrum.c:678 msgid "" "More types of excitation energies has been detected\n" "Please select one" msgstr "" #: ../src/Spectrum/ECDSpectrum.c:757 ../src/Spectrum/UVSpectrum.c:780 msgid "Read energies and intensities from a Q-Chem output file" msgstr "" #: ../src/Spectrum/ECDSpectrum.c:840 ../src/Spectrum/UVSpectrum.c:863 msgid "Read energies and intensities from a Orca output file" msgstr "" #: ../src/Spectrum/ECDSpectrum.c:855 ../src/Spectrum/UVSpectrum.c:878 msgid "Read energies and intensities from a ADF output file" msgstr "" #: ../src/Spectrum/ECDSpectrum.c:915 ../src/Spectrum/NMRSpectrum.c:1805 #: ../src/Spectrum/UVSpectrum.c:938 msgid "" "Read energies and intensities from a sample file(2columns : first = Energy" "(eV), second = intensity)" msgstr "" #: ../src/Spectrum/IRSpectrum.c:94 msgid "IR spectrum" msgstr "" #: ../src/Spectrum/IRSpectrum.c:252 ../src/Spectrum/RamanSpectrum.c:253 msgid "Read frequencies and intensities from a Gabedit file" msgstr "" #: ../src/Spectrum/IRSpectrum.c:262 ../src/Spectrum/RamanSpectrum.c:263 msgid "Read frequencies and intensities from a Molden file" msgstr "" #: ../src/Spectrum/IRSpectrum.c:277 ../src/Spectrum/RamanSpectrum.c:278 msgid "Read frequencies and intensities from a MPQC output file" msgstr "" #: ../src/Spectrum/IRSpectrum.c:375 ../src/Spectrum/RamanSpectrum.c:293 msgid "Read frequencies and intensities from a Molpro output file" msgstr "" #: ../src/Spectrum/IRSpectrum.c:500 ../src/Spectrum/RamanSpectrum.c:322 msgid "Read last frequencies and intensities from a Dalton output file" msgstr "" #: ../src/Spectrum/IRSpectrum.c:637 ../src/Spectrum/RamanSpectrum.c:459 msgid "Read last frequencies and intensities from a Gamess output file" msgstr "" #: ../src/Spectrum/IRSpectrum.c:728 ../src/Spectrum/RamanSpectrum.c:550 msgid "Read last frequencies and intensities from a Gaussian output file" msgstr "" #: ../src/Spectrum/IRSpectrum.c:825 msgid "Read last frequencies and intensities from a Q-Chem output file" msgstr "" #: ../src/Spectrum/IRSpectrum.c:974 ../src/Spectrum/RamanSpectrum.c:565 msgid "Read last frequencies and intensities from a ADF output file" msgstr "" #: ../src/Spectrum/IRSpectrum.c:1055 ../src/Spectrum/RamanSpectrum.c:646 msgid "Read last frequencies and intensities from a Orca output file" msgstr "" #: ../src/Spectrum/IRSpectrum.c:1115 ../src/Spectrum/RamanSpectrum.c:706 msgid "" "Read frequencies and intensities from a sample file(2columns : first = Energy" "(cm-1), second = intensity)" msgstr "" #: ../src/Spectrum/IRSpectrum.c:1145 msgid "For draw spectrum,Sorry, Please read a file before" msgstr "" #: ../src/Spectrum/NMRSpectrum.c:194 ../src/Spectrum/NMRSpectrum.c:875 #: ../src/Spectrum/NMRSpectrum.c:1100 #, c-format msgid "" "Sorry\n" "The number of spins is larger than %d.\n" msgstr "" #: ../src/Spectrum/NMRSpectrum.c:915 ../src/Spectrum/NMRSpectrum.c:1129 #, c-format msgid "" "Sorry\n" " Not enough memory : nBasis = %d sizeTrans = %d\n" msgstr "" #: ../src/Spectrum/NMRSpectrum.c:1405 msgid "" "Read NMR Operating frequency, chemical shift and Spin-Spin coupling data" msgstr "" #: ../src/Spectrum/NMRSpectrum.c:1505 msgid "Save NMR data" msgstr "" #: ../src/Spectrum/NMRSpectrum.c:1605 msgid "shift(ppm)" msgstr "" #: ../src/Spectrum/NMRSpectrum.c:1607 msgid "# spins" msgstr "" #: ../src/Spectrum/NMRSpectrum.c:1609 msgid "Coupling Constants(Hz)" msgstr "" #: ../src/Spectrum/NMRSpectrum.c:1632 msgid "Operating Frequency : " msgstr "" #: ../src/Spectrum/NMRSpectrum.c:1639 msgid "Read" msgstr "" #: ../src/Spectrum/NMRSpectrum.c:1644 ../src/Utils/GabeditContoursPlot.c:5057 #: ../src/Utils/GabeditXYPlot.c:4301 ../src/Utils/UtilsInterface.c:563 #: ../src/Utils/UtilsInterface.c:564 #: ../src/VibrationalCorrections/GabeditGaussianInput.c:267 msgid "Save" msgstr "" #: ../src/Spectrum/NMRSpectrum.c:1668 msgid "Chemical shift & Spin-Spin coupling parameters" msgstr "" #: ../src/Spectrum/NMRSpectrum.c:1700 ../src/Spectrum/NMRSpectrum.c:1702 msgid "NMR spectrum" msgstr "" #: ../src/Spectrum/NMRSpectrum.c:1721 msgid "Frequency(ppm)" msgstr "" #: ../src/Spectrum/NMRSpectrum.c:1727 msgid "Set parameters" msgstr "" #: ../src/Spectrum/RamanSpectrum.c:92 msgid "Raman spectrum" msgstr "" #: ../src/Spectrum/RamanSpectrum.c:735 msgid "Sorry, For draw spectrum, Please read a file before" msgstr "" #: ../src/Spectrum/SpectrumWin.c:612 #, c-format msgid "Mouse position: %lf, %lf" msgstr "" #: ../src/Spectrum/SpectrumWin.c:997 msgid "Set data" msgstr "" #: ../src/Spectrum/SpectrumWin.c:1011 msgid "No convolution" msgstr "" #: ../src/Spectrum/SpectrumWin.c:1023 msgid "Show peaks" msgstr "" #: ../src/Spectrum/SpectrumWin.c:1027 msgid "Set ymax=1" msgstr "" #: ../src/Spectrum/SpectrumWin.c:1035 ../src/Utils/GabeditContoursPlot.c:2976 #: ../src/Utils/GabeditXYPlot.c:2509 msgid "X Min: " msgstr "" #: ../src/Spectrum/SpectrumWin.c:1046 ../src/Utils/GabeditContoursPlot.c:2987 #: ../src/Utils/GabeditXYPlot.c:2520 msgid "X Max: " msgstr "" #: ../src/Spectrum/SpectrumWin.c:1057 msgid "Half-Width : " msgstr "" #: ../src/Spectrum/SpectrumWin.c:1067 ../src/Utils/GabeditContoursPlot.c:4975 #: ../src/Utils/GabeditXYPlot.c:4243 ../src/Utils/GabeditXYPlot.c:4490 msgid "Scale X : " msgstr "" #: ../src/Spectrum/SpectrumWin.c:1077 ../src/Utils/GabeditContoursPlot.c:4985 #: ../src/Utils/GabeditXYPlot.c:4253 ../src/Utils/GabeditXYPlot.c:4500 msgid "Scale Y : " msgstr "" #: ../src/Spectrum/SpectrumWin.c:1087 ../src/Utils/GabeditXYPlot.c:4263 #: ../src/Utils/GabeditXYPlot.c:4510 msgid "Shift X : " msgstr "" #: ../src/Spectrum/UVSpectrum.c:97 msgid "UV/Visible spectrum" msgstr "" #: ../src/Spectrum/UVSpectrum.c:690 msgid "Type :" msgstr "" #: ../src/Symmetry/MoleculeSymmetry.c:95 #, c-format msgid "Warning: Two atoms on same position\n" msgstr "" #: ../src/Symmetry/MoleculeSymmetry.c:363 #: ../src/Symmetry/MoleculeSymmetry.c:415 #, c-format msgid "" "Nonlinear molecule with symmetry Cinf! Try smaller precision for atom " "position\n" "Current precision = %0.5f" msgstr "" #: ../src/Symmetry/MoleculeSymmetry.c:452 #, c-format msgid "" "Could not find symmetry axis (see tolerance parameters)\n" "Current precision for position of atoms = %0.5f\n" "Current tolerance for principal axis = %0.5f" msgstr "" #: ../src/Symmetry/MoleculeSymmetry.c:467 #, c-format msgid "Irregular 3-fold axis detected\n" msgstr "" #: ../src/Symmetry/MoleculeSymmetry.c:542 #, c-format msgid "Unknown symmetry - set to C1" msgstr "" #: ../src/Symmetry/MoleculeSymmetry.c:675 #: ../src/Symmetry/MoleculeSymmetry.c:858 #, c-format msgid "Not enough memory for molecule" msgstr "" #: ../src/Symmetry/MoleculeSymmetryInterface.c:66 #, c-format msgid "Group Symmetry : %s\n" msgstr "" #: ../src/Symmetry/MoleculeSymmetryInterface.c:84 #, c-format msgid "" "Abelian Group Name : %s\n" "\n" msgstr "" #: ../src/Symmetry/MoleculeSymmetryInterface.c:97 #, c-format msgid "Elements : " msgstr "" #: ../src/Symmetry/MoleculeSymmetryInterface.c:121 #, c-format msgid "%d is the number of atoms\n" msgstr "" #: ../src/Symmetry/MoleculeSymmetryInterface.c:123 #, c-format msgid " Positions are in Ang\n" msgstr "" #: ../src/Symmetry/MoleculeSymmetryInterface.c:196 msgid "Group symmetry & Geometry with standard orientation" msgstr "" #: ../src/Symmetry/MoleculeSymmetryInterface.c:222 #: ../src/Symmetry/MoleculeSymmetryInterface.c:334 #, c-format msgid "Group & Geometry with reduction of molecule to its basis set of atoms\n" msgstr "" #: ../src/Symmetry/MoleculeSymmetryInterface.c:227 #: ../src/Symmetry/MoleculeSymmetryInterface.c:239 #: ../src/Symmetry/MoleculeSymmetryInterface.c:339 #, c-format msgid "Group & Geometry\n" msgstr "" #: ../src/Symmetry/MoleculeSymmetryInterface.c:237 #, c-format msgid "NO" msgstr "" #: ../src/Symmetry/MoleculeSymmetryInterface.c:468 msgid "Tolerance for principal axis" msgstr "" #: ../src/Symmetry/MoleculeSymmetryInterface.c:526 msgid "Tolerance for atom positions" msgstr "" #: ../src/Symmetry/MoleculeSymmetryInterface.c:586 #, c-format msgid "Tolerance for computing the point group" msgstr "" #: ../src/Utils/AtomsProp.c:256 #, c-format msgid "Warning : Sorry , Your atom %s is not defined\n" msgstr "" #: ../src/Utils/AtomsProp.c:900 ../src/Utils/AtomsProp.c:909 #: ../src/Utils/AtomsProp.c:918 ../src/Utils/AtomsProp.c:927 #: ../src/Utils/AtomsProp.c:936 ../src/Utils/AtomsProp.c:945 msgid "ERROR : the entry text is not a number" msgstr "" #: ../src/Utils/AtomsProp.c:986 msgid "" "Warning : sum of abundances is not equal to 100!\n" " Reset the mass to 0 for remove an isotope " msgstr "" #: ../src/Utils/AtomsProp.c:1216 msgid "Name" msgstr "" #: ../src/Utils/AtomsProp.c:1226 msgid "Atomic Number" msgstr "" #: ../src/Utils/AtomsProp.c:1301 msgid "Atom Color" msgstr "" #: ../src/Utils/AtomsProp.c:1304 msgid "Set Color" msgstr "" #: ../src/Utils/AtomsProp.c:1342 msgid " Set properties " msgstr "" #: ../src/Utils/AtomsProp.c:1475 msgid " Properties " msgstr "" #: ../src/Utils/ConvUtils.c:765 msgid " Source " msgstr "" #: ../src/Utils/ConvUtils.c:784 msgid " Target " msgstr "" #: ../src/Utils/ConvUtils.c:854 msgid "Conversion utility" msgstr "" #: ../src/Utils/ConvUtils.c:870 msgid "Time" msgstr "" #: ../src/Utils/ConvUtils.c:873 msgid "Length" msgstr "" #: ../src/Utils/ConvUtils.c:879 msgid "Acceleration" msgstr "" #: ../src/Utils/ConvUtils.c:882 msgid "Force" msgstr "" #: ../src/Utils/ConvUtils.c:885 msgid "Masse" msgstr "" #: ../src/Utils/ConvUtils.c:888 msgid "Pressure" msgstr "" #: ../src/Utils/ConvUtils.c:891 msgid "Angular momentum(Action)" msgstr "" #: ../src/Utils/ConvUtils.c:899 msgid "Electric current" msgstr "" #: ../src/Utils/ConvUtils.c:902 msgid "Electric charge" msgstr "" #: ../src/Utils/ConvUtils.c:905 msgid "Voltage" msgstr "" #: ../src/Utils/ConvUtils.c:911 msgid "Electric field gradient" msgstr "" #: ../src/Utils/ConvUtils.c:916 msgid "Electric dipole moment" msgstr "" #: ../src/Utils/ConvUtils.c:919 msgid "Electric quadrupole moment" msgstr "" #: ../src/Utils/ConvUtils.c:922 msgid "Electric dipole polarizability" msgstr "" #: ../src/Utils/ConvUtils.c:924 msgid "First electric dipole hyperpolarizability" msgstr "" #: ../src/Utils/ConvUtils.c:927 msgid "Second electric dipole hyperpolarizability" msgstr "" #: ../src/Utils/ConvUtils.c:934 msgid "Magnetic induction" msgstr "" #: ../src/Utils/ConvUtils.c:937 msgid "Magnetic dipole moment" msgstr "" #: ../src/Utils/ConvUtils.c:940 msgid "Magnetizability" msgstr "" #: ../src/Utils/GTF.c:106 #, c-format msgid "Divergence in F, Ionic integrals" msgstr "" #: ../src/Utils/GTF.c:744 #, c-format msgid "A Contacted Gaussian Type function is nul" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:733 ../src/Utils/GabeditXYPlot.c:512 msgid "Are you sure to remove all data ?" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:1555 msgid "Error : The number of points should be a positive integer. " msgstr "" #: ../src/Utils/GabeditContoursPlot.c:1706 msgid "" "No data available :\n" " You should read a file" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:1712 msgid "Create contours" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:1979 #: ../src/Utils/GabeditContoursPlot.c:4851 ../src/Utils/GabeditXYPlot.c:857 msgid "Set label" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:2001 ../src/Utils/GabeditXYPlot.c:879 msgid "Label : " msgstr "" #: ../src/Utils/GabeditContoursPlot.c:2018 ../src/Utils/GabeditXYPlot.c:896 msgid "" "You can use the Pango Text Attribute Markup Language\n" "Example : Blue text is " "cool!\n" "\n" "For insert a special character : control shift u + code UTF8\n" "Examples : \n" " control shift u + 03B1 for alpha (greek)\n" " control shift u + 03B2 for beta (greek)\n" " control shift u + 03A3 for cap Sigma (greek)\n" " See http://www.utf8-chartable.de\n" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:2313 ../src/Utils/GabeditXYPlot.c:1191 msgid "Set line options" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:2335 #: ../src/Utils/GabeditContoursPlot.c:4785 #: ../src/Utils/GabeditContoursPlot.c:6554 ../src/Utils/GabeditXYPlot.c:1213 #: ../src/Utils/GabeditXYPlot.c:4167 ../src/Utils/GabeditXYPlot.c:4414 #: ../src/Utils/GabeditXYPlot.c:5712 msgid "Line width :" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:2347 #: ../src/Utils/GabeditContoursPlot.c:4795 ../src/Utils/GabeditXYPlot.c:1225 #: ../src/Utils/GabeditXYPlot.c:4177 ../src/Utils/GabeditXYPlot.c:4424 msgid "Line type :" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:2363 #: ../src/Utils/GabeditContoursPlot.c:4807 ../src/Utils/GabeditXYPlot.c:1241 #: ../src/Utils/GabeditXYPlot.c:4189 ../src/Utils/GabeditXYPlot.c:4436 msgid "Line color :" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:2372 ../src/Utils/GabeditXYPlot.c:1250 msgid "Arrow size :" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:2465 ../src/Utils/GabeditXYPlot.c:1428 #: ../src/Utils/GabeditXYPlot.c:1529 ../src/Utils/GabeditXYPlot.c:1707 #: ../src/Utils/GabeditXYPlot.c:1776 ../src/Utils/GabeditXYPlot.c:1849 #: ../src/Utils/GabeditXYPlot.c:2000 #, c-format msgid "Error reading file '%s'" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:2500 msgid "" "Read data from an ASCII grid file(xsize, xmin, xmax, ysize, ymin, ymax, " "Zvalues)" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:2547 msgid "" "Save data in an ASCII grid file(xsize, xmin, xmax, ysize, ymin, ymax, " "Zvalues)" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:2584 ../src/Utils/GabeditXYPlot.c:2117 msgid "Are you sure to delete this data ?" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:2611 ../src/Utils/GabeditXYPlot.c:2144 msgid "Font size" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:2637 ../src/Utils/GabeditXYPlot.c:2170 msgid "Set font size" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:2684 ../src/Utils/GabeditXYPlot.c:2217 msgid "Digits" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:2726 ../src/Utils/GabeditXYPlot.c:2259 msgid "Set digits" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:2824 ../src/Utils/GabeditXYPlot.c:2357 msgid "Set labels" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:2968 ../src/Utils/GabeditXYPlot.c:2501 msgid "Ranges" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:2998 ../src/Utils/GabeditXYPlot.c:2531 msgid "Y Min: " msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3009 ../src/Utils/GabeditXYPlot.c:2542 msgid "Y Max: " msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3032 ../src/Utils/GabeditXYPlot.c:2565 msgid "Set ranges" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3109 ../src/Utils/GabeditXYPlot.c:2642 msgid "Ticks" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3121 ../src/Utils/GabeditXYPlot.c:2654 msgid "X Major: " msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3133 ../src/Utils/GabeditXYPlot.c:2666 msgid "Y Major: " msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3145 ../src/Utils/GabeditXYPlot.c:2678 msgid "X Minor: " msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3157 ../src/Utils/GabeditXYPlot.c:2690 msgid "Y Minor: " msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3169 ../src/Utils/GabeditXYPlot.c:2702 msgid "Length: " msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3196 ../src/Utils/GabeditXYPlot.c:2729 msgid "Set ticks" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3242 ../src/Utils/GabeditXYPlot.c:2775 msgid "Axes" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3250 ../src/Utils/GabeditXYPlot.c:2783 msgid "Reflect X" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3254 ../src/Utils/GabeditXYPlot.c:2787 msgid "Reflect Y" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3318 ../src/Utils/GabeditXYPlot.c:2851 msgid "Left" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3322 ../src/Utils/GabeditXYPlot.c:2855 msgid "Right" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3326 ../src/Utils/GabeditXYPlot.c:2859 msgid "Top" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3330 ../src/Utils/GabeditXYPlot.c:2863 msgid "Bottom" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3398 ../src/Utils/GabeditXYPlot.c:2931 msgid "H major" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3402 ../src/Utils/GabeditXYPlot.c:2935 msgid "V major" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3406 ../src/Utils/GabeditXYPlot.c:2939 msgid "H minor" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3410 ../src/Utils/GabeditXYPlot.c:2943 msgid "V minor" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3432 ../src/Utils/GabeditXYPlot.c:2965 msgid "Set" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:3974 ../src/Utils/GabeditXYPlot.c:3450 msgid "This is not a Gabedit file\n" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:4005 msgid "I can not read the ContoursPlot data\n" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:4103 msgid "Save Contours plot" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:4227 msgid "Export Contours plot" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:4777 ../src/Utils/GabeditXYPlot.c:4159 #: ../src/Utils/GabeditXYPlot.c:4406 msgid "Set line type" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:4816 ../src/Utils/GabeditXYPlot.c:4198 #: ../src/Utils/GabeditXYPlot.c:4445 msgid "Set point type" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:4824 ../src/Utils/GabeditXYPlot.c:4206 #: ../src/Utils/GabeditXYPlot.c:4453 msgid "Point size :" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:4834 ../src/Utils/GabeditXYPlot.c:4216 #: ../src/Utils/GabeditXYPlot.c:4463 msgid "Point type :" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:4842 ../src/Utils/GabeditXYPlot.c:4224 #: ../src/Utils/GabeditXYPlot.c:4471 msgid "Point color :" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:4864 msgid " Label " msgstr "" #: ../src/Utils/GabeditContoursPlot.c:4876 #: ../src/Utils/GabeditContoursPlot.c:4887 msgid " X label " msgstr "" #: ../src/Utils/GabeditContoursPlot.c:4951 ../src/Utils/GabeditXYPlot.c:4145 msgid "Set data options" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:4995 msgid "Scale Z : " msgstr "" #: ../src/Utils/GabeditContoursPlot.c:5009 msgid "Shift X : " msgstr "" #: ../src/Utils/GabeditContoursPlot.c:5019 msgid "Shift Y : " msgstr "" #: ../src/Utils/GabeditContoursPlot.c:5030 msgid "Shift Z : " msgstr "" #: ../src/Utils/GabeditContoursPlot.c:5048 ../src/Utils/GabeditXYPlot.c:4292 msgid "Auto ranges" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:5052 ../src/Utils/GabeditXYPlot.c:4296 #: ../src/Utils/GabeditXYPlot.c:4539 msgid "Auto ranges all" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:5061 ../src/Utils/GabeditXYPlot.c:4305 msgid "Remove" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:5136 msgid "Error : The number of labels should be a positive integer. " msgstr "" #: ../src/Utils/GabeditContoursPlot.c:5355 msgid " # of labels " msgstr "" #: ../src/Utils/GabeditContoursPlot.c:5843 #, c-format msgid "building menus of contoursplot failed: %s" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:6532 ../src/Utils/GabeditXYPlot.c:5690 msgid "Set theme" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:6564 ../src/Utils/GabeditXYPlot.c:5722 msgid "Background color :" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:6573 ../src/Utils/GabeditXYPlot.c:5731 msgid "Foreground color :" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:7891 msgid "popup menu of contoursplot failed" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:9825 msgid "" "Mouse buttons and Keys :\n" "\t Right button : popup menu\n" "\t Middle button : zoom\n" "\t Left button + Control key : zoom\n" "\t Left button + Shift key : compute distance between 2 points\n" "\t d key : compute f and its dervivatives, using a bicubic interpolation\n" "\t Left button + t key : insert a text\n" "\t Left button + l key : insert a line (arrow)\n" "\t Left button, double click : select a data to change\n" "\n" "\n" "Popup menu :\n" "\t Set : ticks, ranges, X and Y labels, digits, font size, auto ranges\n" "\t Render : grids, directions, legends, colormap\n" "\t Data : read data from a grid ASCII file (txt)\n" "\t Save all data at a txt file\n" "\t Remove all all\n" "\t Contours : set values or delete contours\n" "\t ColorMap : set colormap\n" "\t Screen capture : BMP, JPEG, PNG, Transparent PNG, TIF\n" "\t Export image : SVG, PS, EPS and PDF (this is a real export, not a " "capture)\n" "\t Help : for obtain this window (You guessed :))\n" "\t Close : very simple :)\n" msgstr "" #: ../src/Utils/GabeditContoursPlot.c:9853 ../src/Utils/GabeditXYPlot.c:8799 msgid "Help" msgstr "" #: ../src/Utils/GabeditXYPlot.c:1451 msgid "Read data from an ASCII X.Y1..Yn file(x, y1, y2,...,yn)" msgstr "" #: ../src/Utils/GabeditXYPlot.c:1551 msgid "Read data from an ASCII XY file(2 columns)" msgstr "" #: ../src/Utils/GabeditXYPlot.c:1889 #, c-format msgid "Error reading file '%s', The type of data in this file is unknown" msgstr "" #: ../src/Utils/GabeditXYPlot.c:1908 msgid "Read data from a jdx file" msgstr "" #: ../src/Utils/GabeditXYPlot.c:2036 msgid "Read data from a jMRUI Text file" msgstr "" #: ../src/Utils/GabeditXYPlot.c:2060 msgid "Save data in an ASCII XY file(2 columns)" msgstr "" #: ../src/Utils/GabeditXYPlot.c:2081 msgid "Save all data in an ASCII XY file(2 columns)" msgstr "" #: ../src/Utils/GabeditXYPlot.c:2229 msgid " X " msgstr "" #: ../src/Utils/GabeditXYPlot.c:2237 msgid " Y " msgstr "" #: ../src/Utils/GabeditXYPlot.c:2321 msgid "X : " msgstr "" #: ../src/Utils/GabeditXYPlot.c:2334 msgid "Y : " msgstr "" #: ../src/Utils/GabeditXYPlot.c:2843 msgid "Legends" msgstr "" #: ../src/Utils/GabeditXYPlot.c:3160 msgid "Save as Gabedit format" msgstr "" #: ../src/Utils/GabeditXYPlot.c:3471 msgid "I can not read the XYPlot data\n" msgstr "" #: ../src/Utils/GabeditXYPlot.c:3495 msgid "Read a Gabedit file" msgstr "" #: ../src/Utils/GabeditXYPlot.c:3569 msgid "Save XY plot" msgstr "" #: ../src/Utils/GabeditXYPlot.c:3700 msgid "Export XY plot" msgstr "" #: ../src/Utils/GabeditXYPlot.c:4273 ../src/Utils/GabeditXYPlot.c:4520 msgid "Shift Y : " msgstr "" #: ../src/Utils/GabeditXYPlot.c:4392 msgid "Set all data" msgstr "" #: ../src/Utils/GabeditXYPlot.c:5017 #, c-format msgid "building menus of xyplot failed: %s" msgstr "" #: ../src/Utils/GabeditXYPlot.c:6732 msgid "popup menu of xyplot failed" msgstr "" #: ../src/Utils/GabeditXYPlot.c:8772 msgid "" "Mouse buttons and Keys :\n" "\t Right button : popup menu\n" "\t Middle button : zoom\n" "\t Left button + Control key : zoom\n" "\t Left button + t key : insert a text\n" "\t Left button + l key : insert a line (arrow)\n" "\t Left button + Shift key : compute distance between 2 points\n" "\t Left button, double click : select a data to change\n" "\n" "\n" "Popup menu :\n" "\t Set : ticks, ranges, X and Y labels, digits, font size, auto ranges\n" "\t Render : grids, directions, legends\n" "\t Data : read data from multiple format(txt 2 or more, JDX, jMRUI)\n" "\t A backspace ligne in a txt file is interpreted as a beginning new " "data\n" "\t Save all data at a txt file\n" "\t Remove all all\n" "\t change data (scale, shift, ...)\n" "\t Screen capture : BMP, JPEG, PNG, Transparent PNG, TIF\n" "\t Export image : SVG, PS, EPS and PDF (this is a real export, not a " "capture)\n" "\t Help : for obtain this window (You guessed :))\n" "\t Close : very simple :)\n" msgstr "" #: ../src/Utils/HydrogenBond.c:184 msgid "Sorry, You can not delete all atoms" msgstr "" #: ../src/Utils/HydrogenBond.c:505 msgid "Set the hydrogen's bonds parameters" msgstr "" #: ../src/Utils/HydrogenBond.c:556 msgid "" " There atoms can do an hydrogen bonds.\n" " Use right button of mouse to modify this list." msgstr "" #: ../src/Utils/PovrayUtils.c:86 msgid "Type of background" msgstr "" #: ../src/Utils/PovrayUtils.c:118 #, c-format msgid "Povray options" msgstr "" #: ../src/Utils/Utils.c:602 #, c-format msgid "Command = %s\n" msgstr "" #: ../src/Utils/Utils.c:617 #, c-format msgid "CreateProcess failed (%d)" msgstr "" #: ../src/Utils/UtilsInterface.c:557 ../src/Utils/UtilsInterface.c:558 msgid "Save&Close" msgstr "" #: ../src/Utils/UtilsInterface.c:587 ../src/Utils/UtilsInterface.c:588 msgid "Next" msgstr "" #: ../src/Utils/UtilsInterface.c:771 msgid "" "Are you sure to \n" "cancel this window ?" msgstr "" #: ../src/Utils/UtilsInterface.c:1171 msgid "" "Sorry\n" "I can not read gemetry in gaussian input file\n" msgstr "" #: ../src/Utils/UtilsInterface.c:1190 msgid "" "Sorry\n" "I can not read gemetry in molpro input file\n" msgstr "" #: ../src/Utils/UtilsInterface.c:1203 ../src/Utils/UtilsInterface.c:1216 msgid "" "Sorry\n" "I can not read gemetry in Q-Chem input file\n" msgstr "" #: ../src/Utils/UtilsInterface.c:1229 msgid "" "Sorry\n" "I can not read gemetry in Mopac input file\n" msgstr "" #: ../src/Utils/UtilsInterface.c:1246 #, c-format msgid "" "Sorry, I can not open\n" " %s\n" " file" msgstr "" #: ../src/Utils/UtilsInterface.c:1463 #: ../src/VibrationalCorrections/GabeditGaussianInput.c:210 msgid "Sorry, I can not save file" msgstr "" #: ../src/Utils/UtilsInterface.c:1784 msgid "Version" msgstr "" #: ../src/Utils/UtilsInterface.c:1811 msgid "Sorry , this option is not active" msgstr "" #: ../src/Utils/UtilsInterface.c:2209 msgid "" "Sorry the name of varibale is not valid !\n" "\n" msgstr "" #: ../src/Utils/UtilsInterface.c:2210 #, c-format msgid "%s The first character can not be one of : \n" msgstr "" #: ../src/Utils/UtilsInterface.c:2214 #, c-format msgid "%s Do not use the following characters :\n" msgstr "" #: ../src/Utils/UtilsInterface.c:2816 msgid "Set Dipole" msgstr "" #: ../src/Utils/UtilsInterface.c:2825 msgid "Set Dipole(Debye)" msgstr "" #: ../src/Utils/UtilsInterface.c:2869 msgid "Color : " msgstr "" #: ../src/VibrationalCorrections/GabeditGaussianInput.c:223 msgid "Save result" msgstr "" #: ../src/VibrationalCorrections/GabeditGaussianInput.c:1369 msgid "Read the Gaussian output file for a input file created by Gabedit" msgstr "" #: ../src/VibrationalCorrections/GabeditGaussianInput.c:1377 msgid "Temperatures (K) from : " msgstr "" #: ../src/VibrationalCorrections/GabeditGaussianInput.c:1378 msgid " Number of values : " msgstr "" #: ../src/VibrationalCorrections/GabeditGaussianInput.c:1379 msgid " with a step(K) : " msgstr "" GabeditSrc250/po/xm0000644000175100017510000000010413130664665014462 0ustar alloucheallouchemsgfmt $1.po -o gabedit.mo mv gabedit.mo ../locale/$1/LC_MESSAGES/. GabeditSrc250/po/xmakepo0000644000175100017510000000004413130664665015505 0ustar alloucheallouchexgettext -k_ ../src/*/*.c -o fr.pot GabeditSrc250/xChangeDate0000744000175100017510000000023513130665213015567 0ustar alloucheallouche#Thank's to Dominik 'Rathann' Mierzejewski for providing this script sed -i \ -e 's/2002-2013 Abdul/2002-2017 Abdul/g' \ `find -name "*.c" -o -name "*.h"` GabeditSrc250/pixmaps/0000755000175100017510000000000013130664771015161 5ustar allouchealloucheGabeditSrc250/pixmaps/RotateLocal.xpm0000644000175100017510000000142613130664665020125 0ustar alloucheallouche/* XPM */ static char * rotate_local_xpm[] = { "24 24 4 1", " c None", ". c #000000", "+ c #FFFFFF", "@ c #FF0000", " ", " ", " ... ", " . . ", " . . ", " . . . . ", " ... . ", " . . ", " ....... ", " ... .. ", " .. @@@@@@ . .. ", " . @@ . . ", " . @@ . . ", " . @@@@@@ . . ", " . @@ . . ", " . .@@ . . ", " .. . . . ", " .... . ", " . . ", " . . ", " . . ", " . . ", " ... ", " "}; GabeditSrc250/pixmaps/Copy.xpm0000644000175100017510000000125213130664665016623 0ustar alloucheallouche/* XPM */ static char * copy_xpm[] = { "22 22 4 1", " c None", ". c #000000", "+ c #0000FF", "@ c #FFFFFF", " ", " ", " ", " ........ + ", " .@@@@@@.. + ", " .@....@... +++++ ", " .@@@@@@@@. + ", " .@......@. + ", " .@@@@@........ ", " .@...@.@@@@@@.. ", " .@@@@@.@....@... ", " .@...@.@@@@@@@@. ", " .@@@@@.@......@. ", " .......@@@@@@@@. ", " .@......@. ", " .@@@@@@@@. ", " .@......@. ", " .@@@@@@@@. ", " .......... ", " ", " ", " "}; GabeditSrc250/pixmaps/Warning.xpm0000644000175100017510000001722413130664665017324 0ustar alloucheallouche/* XPM */ static char* warning_xpm[]={ "48 48 186 2", ".m c #9a1c0f", "az c #cb8914", "aa c #cf8c12", ".x c #b72010", ".N c #ba2010", "a2 c #731711", "aK c #8b1c15", "#8 c #d7a81a", "#3 c #871b12", ".# c #d22411", "aW c #73160e", "aE c #d8a51c", "#x c #ea2915", "ay c #c77e14", "ao c #c87e14", "#V c #8d1b12", ".7 c #191300", "aq c #dfad13", ".L c #901a0f", ".C c #911a0f", "#H c #0a0800", "aw c #b95b13", "#t c #251d03", "#l c #4e3d06", "an c #d82715", "ag c #7b1912", "#W c #bd9312", "#u c #413206", ".t c #db2612", ".G c #de2612", ".D c #c56b12", "aL c #6a130b", "ai c #3c2e05", "#w c #991d13", ".H c #dcae11", "#k c #d08c13", "#0 c #cb8617", "#R c #513f07", ".P c #c39b0f", ".K c #cf8812", "aZ c #861b13", "#s c #1e1702", ".V c #d12412", "aT c #5d110b", "aV c #6e150c", "#X c #675009", "aA c #daaa16", "#o c #dbaa16", "#Q c #382c05", ".Y c #130f00", "aN c #78150c", "#F c #050400", ".X c #070400", "#5 c #cb9e13", "ak c #745a0c", ".c c #a71d0e", "av c #bf2212", "ax c #c16f14", "#r c #d92613", ".3 c #e0b213", "ad c #69520a", "#U c #d8a919", "#f c #dc2613", "aX c #801810", "#K c #981d14", "at c #d7a816", "#m c #403104", ".z c #e1ae12", "#Y c #312604", "aG c #ab4216", ".Z c #020200", ".e c #9b1b0e", "#g c #271e02", ".g c #b31f0f", "a0 c #851b14", "aF c #c57e16", ".n c #ca2310", "#1 c #9a1f15", ".l c #b14010", ".I c #b9930e", "#i c #423305", "#2 c #9d1f15", "#J c #daaa17", "aY c #881a11", ".1 c #e82814", "#q c #891a11", "#L c #130f01", ".9 c #9d1e12", "#d c #a01e12", ".R c #0e0b00", "as c #7c610c", ".r c #a01d0f", "#y c #a21d0f", ".q c #a31d0f", "#a c #000000", "#c c #292003", ".6 c #010000", ".u c #a61d0f", ".a c #a91d0f", "a# c #d22614", "aD c #d8a91a", "#n c #453506", ".b c #d52511", ".S c #403105", ".8 c #dcab15", "#G c #100d01", "#A c #0b0900", "ar c #312605", ".2 c #b21f10", "#7 c #c49813", ".A c #d28814", "#T c #71570a", "af c #991f16", "al c #9c1f16", ".f c #e02712", "#C c #9c1e13", "aM c #6f140b", ".J c #deac13", "#v c #9f1e13", "aP c #8a190f", "#z c #090700", ".B c #9f1d10", ".E c #a11d10", ".i c #8a180c", ".F c #a21d10", "au c #bf6f16", "#M c #524007", "#4 c #b62111", "#Z c #c79a14", "#6 c #241c03", "#p c #cc8614", "#j c #bd2111", ".O c #d18912", "aH c #781812", "ah c #ec2a16", "aU c #60120b", ".w c #dfb112", "ap c #e0ae14", ".j c #ec2913", "#e c #8f1b10", "aQ c #931b10", ".v c #e0ad11", "ae c #c98517", ".o c #bb5b11", "#. c #c82312", "a1 c #801a13", "aR c #981f17", "aJ c #9b1f17", "aC c #d9aa19", "#h c #1d1602", "Qt c None", "#O c #9b1e14", "#D c #861910", "#N c #9e1e14", "aO c #86180d", "aj c #090701", ".U c #9e1d11", "#I c #332704", ".T c #a11d11", "#b c #040300", ".4 c #2c2303", ".d c #a11c0e", ".y c #a31c0e", ".h c #a41c0e", "#B c #cc8615", "aI c #cd2513", ".k c #b9200f", "#E c #d42513", "am c #8c1c14", "aS c #571109", "aB c #dbab17", "#P c #7a1710", "#S c #151001", ".M c #ef2914", ".s c #921a0e", ".Q c #010100", "ac c #020100", ".W c #7a6109", ".5 c #030100", "a3 c #4d100c", "## c #251d02", "ab c #4b3a07", ".0 c #cd8713", ".p c #c26f12", "#9 c #c16916", "a. c #971e15", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.aQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.b.c.d.eQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.f.g.h.h.d.iQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.j.k.h.h.l.h.mQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.n.h.h.o.p.q.r.sQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.t.u.h.h.v.w.q.q.rQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.j.x.h.y.z.w.w.A.q.B.CQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.n.h.h.D.w.w.w.w.E.F.BQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.G.u.h.h.v.H.I.H.J.K.F.B.LQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.M.N.h.h.O.P.Q.R.S.J.J.F.T.UQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.V.h.h.h.w.W.X.Y.Z.J.J.0.T.U.LQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.1.2.h.h.3.w.4.5.6.7.J.J.8.T.T.9QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt#..h.h.A.w.w###a#b#c.J.8.8.0#d.9#eQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt#f.u.h.q.w.w.w#g#a#h#i.8.8.8.8#d#d.9QtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt#j.h.h#k.w.w.J#l#a#m#n.8.8.8#o#p#d.9#qQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt#r.u.h.q.w.w.w.J#s.Q#t#u.8.8#o#o#o#d#v#wQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQt#x.x.h#y.3.w.w.J.J#z.Q#A#t.8#o#o#o#o#B#v#C#DQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQt#E.h.q.A.w.w.J.J.J#F#G#H#I#o#o#o#o#J#J#v#v#KQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQt#x.x.q.q.w.w.J.J.J.J#F#L#b#M#o#o#o#J#J#J#B#N#O#PQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQt#E.q.q#k.w.J.J.J.J.8#Q#R#S#T#o#o#J#J#J#J#U#N#N#VQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQt#x.x.q.q.w.J.J.J.J.8.8#W#X#Y#Z#o#o#J#J#J#U#U#0#N#1QtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQt#E.q.q#k.w.J.J.J.8.8.8.8#o#o#o#o#J#J#J#J#U#U#U#2#1#3QtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQt#x#4.q.q.w.J.J.J.8.8.8.8#5#t#6#7#J#J#J#J#U#U#U#8#9#2a.QtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQta#.q.qaa.J.J.J.J.8.8.8#oabacacad#J#J#J#U#U#U#U#8ae#2afagQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtah#4.q.q.J.J.J.J.8.8.8.8#oai#bajak#J#J#U#U#U#U#8#8#8#2alamQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtan.q.qaoapaq.J.8.8.8.8#o#o#Warasat#J#U#U#U#U#8#8#8#8aualafQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtav.q.F.F.F.F.T.T.TawaxayazaAaBaBaBaCaCaCaCaDaDaDaDaEaFaGafaHQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtaI.q.r.F.F.F.T.T.T.T#d#d#d#d#v#v#v#v#N#N#N#2#2#2#2alalalalaJaKQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtaLaMaNaOaPaQ.U.9#d#d#d#v#v#v#v#N#N#N#2#2#2#2alalalalaJaJaRQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtaSaTaUaVaWaWaWaXaYaYaYaY#3#3#3aZaZaZaZa0a0a1a2a3QtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"}; GabeditSrc250/pixmaps/A0p.xpm0000644000175100017510000001514313130664665016335 0ustar alloucheallouche/* XPM */ static char * a0p_xpm[] = { "42 24 287 2", " c None", ". c #4A4A00", "+ c #5C5C00", "@ c #676700", "# c #6A6900", "$ c #6B6B00", "% c #757400", "& c #858500", "* c #888800", "= c #575700", "- c #666600", "; c #818000", "> c #A7A600", ", c #B8B700", "' c #BBBA00", ") c #BCBB00", "! c #B4B300", "~ c #9A9A00", "{ c #868600", "] c #959400", "^ c #414100", "/ c #706E00", "( c #A2A000", "_ c #BAB700", ": c #CBC800", "< c #DCD900", "[ c #E4E100", "} c #E5E200", "| c #E6E400", "1 c #E0DD00", "2 c #D3D000", "3 c #C3C000", "4 c #BFBC00", "5 c #BEBB00", "6 c #C4C200", "7 c #403F00", "8 c #716F00", "9 c #B0AD00", "0 c #D4D100", "a c #DFDC00", "b c #E2DF00", "c c #E6E300", "d c #E7E400", "e c #E3E000", "f c #DEDB00", "g c #D0CD00", "h c #BFBD00", "i c #C0BE00", "j c #3E3D00", "k c #6E6C00", "l c #ADAA00", "m c #D3CF00", "n c #DEDA00", "o c #E1DD00", "p c #E2DE00", "q c #DCD800", "r c #CECA00", "s c #C3BF00", "t c #686500", "u c #A7A400", "v c #CDC900", "w c #D8D400", "x c #DBD600", "y c #DCD700", "z c #DAD500", "A c #E0DB00", "B c #4D4B00", "C c #938F00", "D c #C6C100", "E c #D4CE00", "F c #D6D000", "G c #D7D100", "H c #DAD300", "I c #E8E100", "J c #EFE800", "K c #F0EA00", "L c #585500", "M c #A59F00", "N c #CAC300", "O c #D0C900", "P c #D1CA00", "Q c #A39D2A", "R c #BAB315", "S c #D2CB00", "T c #DED700", "U c #E4DC00", "V c #E0D900", "W c #3D3A00", "X c #6D6800", "Y c #B0A900", "Z c #C9C100", "` c #CCC400", " . c #B5AE15", ".. c #9F982A", "+. c #444180", "@. c #888240", "#. c #5B576A", "$. c #D2CA00", "%. c #DBD200", "&. c #DDD500", "*. c #D1C900", "=. c #494600", "-. c #888300", ";. c #B9B100", ">. c #C4BC00", ",. c #C6BE00", "'. c #847E40", "). c #1615AA", "!. c #2C2A95", "~. c #0000C0", "{. c #58546A", "]. c #CBC200", "^. c #DDD400", "/. c #E7DE00", "(. c #E1D800", "_. c #504C00", ":. c #938B00", "<. c #BBB100", "[. c #C0B600", "}. c #C1B700", "|. c #2B2895", "1. c #56516A", "2. c #6B6555", "3. c #403D80", "4. c #968E2A", "5. c #C5BB00", "6. c #DDD200", "7. c #EBDF00", "8. c #E6DA00", "9. c #514C00", "0. c #908900", "a. c #B6AC00", "b. c #BAB000", "c. c #3E3B80", "d. c #918A2A", "e. c #686255", "f. c #A69D15", "g. c #292795", "h. c #1514AA", "i. c #7C7640", "j. c #D8CD00", "k. c #E2D600", "l. c #565000", "m. c #8E8400", "n. c #B0A500", "o. c #B5A900", "p. c #B6AA00", "q. c #8E842A", "r. c #3C3880", "s. c #797140", "t. c #B7AB00", "u. c #C0B400", "v. c #DCCD00", "w. c #E7D800", "x. c #E3D400", "y. c #5F5800", "z. c #847B00", "A. c #A69B00", "B. c #AFA300", "C. c #B0A400", "D. c #897F2A", "E. c #756D40", "F. c #3A3680", "G. c #272495", "H. c #B2A600", "I. c #C5B700", "J. c #E2D300", "K. c #E9D900", "L. c #E4D500", "M. c #5E5700", "N. c #6D6500", "O. c #988D00", "P. c #A89C00", "Q. c #AA9D00", "R. c #AB9E00", "S. c #857B2A", "T. c #1311AA", "U. c #262395", "V. c #4C466A", "W. c #726940", "X. c #B0A300", "Y. c #C7B800", "Z. c #E0CF00", "`. c #E3D200", " + c #5B5300", ".+ c #887C00", "++ c #A29400", "@+ c #A49600", "#+ c #A59700", "$+ c #373280", "%+ c #80752A", "&+ c #6E6440", "*+ c #1211AA", "=+ c #49436A", "-+ c #5B5455", ";+ c #A79900", ">+ c #B0A100", ",+ c #CAB900", "'+ c #D8C600", ")+ c #D7C500", "!+ c #635900", "~+ c #817500", "{+ c #9A8C00", "]+ c #9F9000", "^+ c #A09100", "/+ c #353080", "(+ c #8E8115", "_+ c #232095", ":+ c #6A6040", "<+ c #A29300", "[+ c #AA9A00", "}+ c #BEAC00", "|+ c #D4C000", "1+ c #D8C400", "2+ c #D3BF00", "3+ c #7B6F00", "4+ c #8B7C00", "5+ c #968600", "6+ c #998900", "7+ c #9A8A00", "8+ c #665C40", "9+ c #110FAA", "0+ c #221E95", "a+ c #554C55", "b+ c #9C8C00", "c+ c #A49300", "d+ c #B7A400", "e+ c #CCB700", "f+ c #D6BF00", "g+ c #D5BF00", "h+ c #7B6D00", "i+ c #887800", "j+ c #948300", "k+ c #978600", "l+ c #958400", "m+ c #948400", "n+ c #74672A", "o+ c #635840", "p+ c #847515", "q+ c #75672A", "r+ c #988600", "s+ c #998800", "t+ c #A08E00", "u+ c #B29D00", "v+ c #C5AF00", "w+ c #CFB700", "x+ c #776900", "y+ c #8E7D00", "z+ c #9A8800", "A+ c #938200", "B+ c #928100", "C+ c #A08D00", "D+ c #A79300", "E+ c #AF9A00", "F+ c #BEA700", "G+ c #C6AF00", "H+ c #7D6C00", "I+ c #8D7900", "J+ c #9A8500", "K+ c #978200", "L+ c #948000", "M+ c #9E8900", "N+ c #9F8900", "O+ c #A18B00", "P+ c #A79000", "Q+ c #B29900", "R+ c #B59C00", "S+ c #BBA100", "T+ c #BFA500", "U+ c #947F00", "V+ c #8E7A00", "W+ c #8F7B00", "X+ c #9A8400", "Y+ c #A08900", "Z+ c #A28B00", "`+ c #A38B00", " @ c #A89000", ".@ c #AF9600", "+@ c #B09700", "@@ c #AC9300", "#@ c #AE9500", "$@ c #816D00", "%@ c #8F7900", "&@ c #967E00", "*@ c #988000", "=@ c #9D8400", "-@ c #A48A00", " ", " . + @ # # # # # # # # # # # # # # # # # # $ % & * ", " = - ; > , ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ) ! ~ { ] ", " ^ / ( _ : < [ } } } } } } } } } } } } } } } } } } | } 1 2 3 4 5 6 ", " 7 8 9 0 a b } c d d d d d d d d d d d d d d d d d d c c c e b f g h i ", " j k l m n o p p p p p p p p p p p p p p p p p p p p p p p p o o o q r s : ", " t u v w x y y y y y y y y y y y y y y y y y y y y y y y y y y x x x z z A ", " B C D E F G G G G G G G G G G G G G G G G G G G G G G G G G G G G F F H I J K ", " L M N O P P P P P P P P P Q R P P P P P P P P P P P P P P P P P P P O S T U V ", " W X Y Z ` ` ` ` ` ` ` ` ...+.@.@.` ` ` ` ` ` ` ` ` .#.+.+.#. .` ` ` ` ` $.%.&.*.", " =.-.;.>.,.,.,.,.,.,.,.,.'.).).!.~.,.,.,.,.,.,.,.,.,.{.~.{.{.~.!.,.,.,.,.,.].^./.(.", " _.:.<.[.}.}.}.}.}.}.}.}.}.|.1.|.2.}.}.}.3.3.3.4.}.}.3.~.}.}.3.~.}.}.}.}.[.5.6.7.8.", " 9.0.a.b.<.<.<.<.<.<.<.<.<.c.d.e.e.<.f.g.g.c.h.~.f.i.~.i.<.<.i.~.i.<.<.<.<.[.j.8.k.", " l.m.n.o.p.p.p.p.p.p.p.p.p.p.p.p.p.p.q.r.q.p.s.~.s.s.~.s.p.p.s.~.s.p.p.p.t.u.v.w.x.", " y.z.A.B.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.D.E.F.G.~.E.E.~.E.C.C.E.~.E.C.C.C.H.I.J.K.L.", " M.N.O.P.Q.R.R.R.R.R.R.R.R.R.R.R.R.R.S.T.~.U.V.~.W.W.~.W.R.R.W.~.W.R.R.R.X.Y.Z.`. ", " +.+++@+@+#+#+#+#+#+#+#+#+#+#+#+#+$+~.%+#+&+~.&+%+*+=+#+#+-+~.%+#+#+;+>+,+'+)+ ", " !+~+{+]+]+]+^+^+^+^+^+^+^+^+^+^+^+/+~.(+(+_+~.:+^+/+~.(+(+_+~.^+^+<+[+}+|+1+2+ ", " 3+4+5+6+6+6+7+7+7+7+7+7+7+7+7+7+8+9+0+0+0+9+0+7+8+9+0+0+9+a+7+b+c+d+e+f+g+ ", " h+h+i+j+k+k+l+l+m+l+l+l+l+l+l+l+l+n+o+o+p+n+o+l+l+n+o+o+q+r+s+t+u+v+w+w+ ", " x+h+y+z+r+A+B+B+B+B+B+B+B+B+B+B+B+B+B+B+B+B+B+B+B+B+A+r+C+D+E+F+G+G+ ", " H+I+J+K+L+J+M+N+N+N+N+N+N+N+N+N+N+N+N+N+N+N+N+N+N+O+P+Q+R+R+S+T+ ", " U+V+W+X+Y+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+Z+`+ @.@+@@@#@ ", " $@%@&@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@=@-@ "}; GabeditSrc250/pixmaps/RenderStick.xpm0000644000175100017510000000140413130664665020125 0ustar alloucheallouche/* XPM */ static char *render_stick_xpm[]={ "24 24 3 1", ". c None", "# c #000080", "a c #00c000", "........................", "..................###...", ".................####...", "................#####...", "...............#####....", "..............#####.....", ".............#####......", "............#####.......", "...........#####........", "..........#####.........", ".........aaaaa..........", "........aaaaa...........", ".......aaaaa............", "......aaaaa.............", ".....aaaaa..............", "....aaaaa...............", "...aaaaa................", "..aaaaa.................", ".aaaaa..................", ".aaaa...................", ".aaa....................", "........................", "........................", "........................"}; GabeditSrc250/pixmaps/Run.xpm0000644000175100017510000000541513130664665016462 0ustar alloucheallouche/* XPM */ static char* run_xpm[]={ "22 22 108 2", ".# c #5d5d5d", ".u c #d9d9d9", ".O c #3274ff", "#I c #3f1f1f", ".n c #242478", ".C c #888888", ".l c #7777a8", "#v c #c6c6c6", "#n c #6d6d6d", "#. c #faf4fa", "#r c #5a5a5a", ".g c #989898", "#t c #3f3f3f", ".R c #3e9f3e", ".i c #a0a0a0", ".7 c #c387c3", ".Q c #f9f9ff", "#h c #b0b0b0", "#j c #d3d3d3", ".e c #6060a0", ".h c #b8b8b8", ".A c #9f3737", ".z c #841c1c", "#M c #705f5f", "#A c #0e0e0e", ".1 c #9dce9d", "#J c #240606", ".2 c #0ab02b", "#E c #270e0e", ".p c #393939", "#F c #3d3939", "#l c #1e1e1e", ".K c #8c3c3c", ".V c #9a9a9a", "#k c #d8d8d8", "#G c #2e1e1e", ".X c #262626", "#o c #fbfbfb", "## c #50a850", "#y c #2e2e2e", ".y c #660606", ".k c #6c6c6c", ".Z c #5353e4", ".3 c #8094d7", ".r c #363636", "#H c #2b0b0b", ".m c #181888", "#b c #1b1b1b", "Qt c None", ".6 c #979797", "#D c #040000", ".Y c #0037ff", ".a c #7c7c7c", "#m c #bababa", "#K c #120000", ".H c #140000", ".S c #cfe7cf", ".M c #9b0606", ".v c #180000", ".b c #464646", ".j c #848484", ".f c #8080b0", ".P c #9f9fff", ".x c #650b0b", ".W c #717171", ".J c #7d6969", "#z c #181818", "#N c #7e3636", ".9 c #a850a8", "#C c #202020", "#w c #b7b7b7", ".N c #9c9c9c", ".5 c #dadada", ".w c #650000", ".U c #a4a4a4", "#L c #700000", "#g c #898989", ".q c #303030", "#u c None", ".I c #7c0000", ".F c #f4faf4", "#P c #860000", "#O c #8f0000", "#x c #999999", "#B c #d7d7d7", ".L c #9f0000", "#i c #fafafa", ".0 c #f7f7fc", ".4 c #484848", ".o c #2d2d2d", "#f c #6b6b6b", "#p c #505050", "#c c #8e8e8e", ".d c #9696b2", ".s c #cccccc", "#e c #737373", ".G c #f7f7f7", ".t c #dcdcdc", ".8 c #c6abc6", "#s c #c1c1c1", ".D c #ffffff", ".B c #a24040", ".T c #323232", ".c c #707070", ".E c #f4f4ff", "#q c #aeaeae", "#a c #a8d4a8", "#d c #787878", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQt.#.a.a.a.a.a.a.a.a.a.a.a.bQtQtQt", "QtQtQtQtQtQt.c.d.e.e.e.e.e.f.g.h.i.j.kQtQtQt", "QtQtQtQtQtQt.c.l.m.m.m.m.m.n.o.p.q.r.kQtQtQt", "QtQtQtQtQtQt.c.s.t.t.t.t.t.t.t.t.t.u.kQtQtQt", "QtQt.v.w.x.y.z.A.B.C.D.E.D.D.D.F.D.G.kQtQtQt", "QtQt.H.I.J.K.L.L.M.N.D.O.P.Q.D.R.S.G.kQtQtQt", "QtQtQt.T.U.V.j.W.X.D.D.Y.Z.0.1.2.3.G.kQtQtQt", "QtQtQt.4.5.s.6.U.q.D.7.8.9#..1###a.G.kQtQtQt", "QtQtQt#b#c#d#e#f#g.D.D#h#h#i#j#h#k.G.kQtQtQt", "QtQtQtQt#l#m#g#n#o.D.D.G.G.D#o.G#o.G.kQtQtQt", "QtQtQtQt#p#q.N#r#s.t.t.t.t.t.t.t.t.u.kQtQtQt", "QtQtQt#t#u#v#w#x#y#z#z#z#z#z#z#z#z#z#AQtQtQt", "QtQtQt.4#B.c.k.U#CQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQt#D#E#F#G#H#I#JQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQt#K#L#M#N#O#O#PQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"}; GabeditSrc250/pixmaps/FireFlyMini.xpm0000644000175100017510000000066013130664665020070 0ustar alloucheallouche/* XPM */ static char *firefly_mini_xpm[]={ "16 16 4 1", "b c None", ". c None", "# c #585858", "a c #ff0000", "................", ".####..##..#..#.", ".#..#.####.####.", ".#....#..#.#..#.", ".#.##.#..#.#..#.", ".#.aaaaa.#baaa#.", ".##aa.#.a#aa..#.", "...aa...a.aa....", ".##aaaaaa#aa###.", ".#.aa.#...aa....", ".#.aa.#...aa....", ".##aa.####baaa#.", ".#.......#....#.", ".#.......#....#.", ".####.####.####.", "................"}; GabeditSrc250/pixmaps/AtomToInsert.xpm0000644000175100017510000000142313130664665020301 0ustar alloucheallouche/* XPM */ static char *atomtoinsert_xpm[]={ "24 24 4 1", " c None", ". c #000000", "+ c #FFFFFF", "@ c #FF0000", " ", " ", " ... ... ", " .+. .+. ", " .+... .....+. ", " .+++. .+@@++. ", " .+++. .+@@++. ", " .+++............+++++. ", " .++++++++++++++++++++. ", " .++++++++++++++++++++. ", " .++++++++++++++++++++. ", " .++++++++++++++++++++. ", " .++++++++++++++++++++. ", " .++++++++++........... ", " .++++++++++. ", " ............ ", " ", " ................ ", " .++++++++++++++. ", " .++++++++++++++. ", " ................ ", " ", " ", " "}; GabeditSrc250/pixmaps/Gaussian.xpm0000644000175100017510000000062113130664665017462 0ustar alloucheallouche/* XPM */ static char* gaussian_xpm[]={ "16 16 2 1", ". c None", "# c #0000ff", "................", ".....######.....", "...#########....", "..####.....##...", ".####.......#...", ".####...........", ".####..#######..", ".####...........", ".####......#....", ".####.....###...", ".####....#...#..", ".#####...#.#.#..", ".########..#..##", "..######..#.#...", "...#######..####", "................"}; GabeditSrc250/pixmaps/Ortho.xpm0000644000175100017510000000166513130664665017014 0ustar alloucheallouche/* XPM */ static char * ortho_xpm[] = { "24 24 15 1", " c None", ". c #000000", "+ c #F5680A", "@ c #D00000", "# c #A80000", "$ c #806840", "% c #D9D900", "& c #FF0000", "* c #808000", "= c #FFFF00", "- c #600000", "; c #800000", "> c #EAEA00", ", c #FCB803", "' c #4F4F00", " ", " ", " ", " ", " ...................... ", " .+@@@@@@@@@####$$$$$$. ", " .%+&&&&&&&&&&&#$****$. ", " .%=+&&&&&&&&&&#$****$. ", " .%==+&&&&&&&&&#$****-. ", " .%===+&&&&&&&&@$****-. ", " .%====+&&&&&&&@$****-. ", " .%=====+&&&&&&@$***$-. ", " .%======+&&&&&@$***;-. ", " .%>======+&&&&@$***;-. ", " .%>=======+&&&#$**$;-. ", " .%>=======,+&&#$**;;-. ", " .%>>=======,+&#$*$;;-. ", " .%>>>=======,+#$*;;;-. ", " .%>>>>>>=====,#$$;;;-. ", " .%%%%%%%%%%%%%**'----. ", " ...................... ", " ", " ", " "}; GabeditSrc250/pixmaps/Close.xpm0000644000175100017510000000166213130664665016763 0ustar alloucheallouche/* XPM */ static char *close_xpm[]={ "24 24 15 1", ". c None", "b c #000000", "f c #090909", "g c #121212", "d c #1c1c1c", "k c #252525", "# c #2e2e2e", "j c #373737", "h c #535353", "c c #5c5c5c", "e c #777777", "a c #8a8a8a", "l c #939393", "i c #9c9c9c", "m c #b8b8b8", "........................", "........................", "........................", "........................", "........................", "........................", ".......#a....#bc........", ".......#de..#fbgh.......", ".......ijke.bbbji.......", "........cbdabbjl........", "........edbbbki.........", ".........abbbm..........", ".........abbbba.........", "........edbbbbde........", "........cbdabbbke.......", ".......ijke.cgbbda......", ".......#de...hgbf#......", ".......#a.....cb#.......", "........................", "........................", "........................", "........................", "........................", "........................"}; GabeditSrc250/pixmaps/Knot.xpm0000644000175100017510000000134613130664665016630 0ustar alloucheallouche/* XPM */ static char * knot_xpm[] = { "24 23 3 1", " c #FFFFFF", ". c #2E8B57", "+ c #2E8B57", " .. ++++", " ....... +++++", " .......... +++++++", "+ ............. ++++++", "+++ ............. ++ ", "+++ ............. ", "++++ . ....... ", "++++++ ++ ....... .", "+++++++ ++++ ...... ..", " +++++++ +++++ .... ...", " +++++ ++++++ .. ....", ". ++ ++++++ .....", ".. + +++++ + .....", "... +++++ ++++ ......", "... ++++++ +++++ .. ", "... +++++ +++++++ ", ".. ++++++ ++++++++++ ", ".. ++++++ +++++++++++++ ", ".. +++ ++++++++++++", ".... .. +++++++++++", "............ ++++++++", "............... +++++", " ............. ++"}; GabeditSrc250/pixmaps/FireFly.xpm0000644000175100017510000000126613130664665017256 0ustar alloucheallouche/* XPM */ static char *firefly_xpm[]={ "22 22 5 1", "b c None", ". c None", "# c #222222", "a c #303030", "c c #ff0000", "......................", "......#...............", ".######...##...#....#.", ".#....#...###..##..##.", ".#.......#..#..######.", ".#..##...#..#..#.##.#.", ".#....#.#a.ba#.#....#.", ".#.ccccc#..bcccc....#.", ".##ccccc#..ccccc....#.", "..bcc...c..cc.........", "..bcc...c..cc.........", ".#accccc.##cc#..#####.", ".#.ccccc##.cc..##.....", ".#.cc...#..cc..#......", ".##cc##.#..ccccc......", ".#.cc...##aacccc####..", ".#.........b##.....##.", ".#...........#......#.", ".#......#...##.#...##.", ".######.#####..#####..", "......................", "......................"}; GabeditSrc250/pixmaps/RotateY.xpm0000644000175100017510000000141613130664665017302 0ustar alloucheallouche/* XPM */ static char *rotatey_xpm[]={ "24 24 4 1", ". c None", "# c #000000", "b c #ff0000", "a c #ffffff", "........................", "........................", "........................", "........................", "........................", "........................", "........................", "........................", "........#######.........", ".....###........#.......", "...##.....aa.....##.....", "..#.......bb.......#....", ".#.......bbaa.......#...", ".#.......bbaa.......#...", ".#........bb........#...", "..#...#............#....", "...##..#.........##.....", ".....####.....###.......", ".......#................", "......#.................", "........................", "........................", "........................", "........................"}; GabeditSrc250/pixmaps/Help.xpm0000644000175100017510000000164013130664665016602 0ustar alloucheallouche/* XPM */ static char * help_xpm[] = { "22 22 20 1", " c None", ". c #000000", "+ c #A6BFA2", "@ c #F0F4EF", "# c #EBF1EA", "$ c #E1E9E0", "% c #CBDAC9", "& c #F3F6F3", "* c #D2DFD0", "= c #C3D4C1", "- c #ACC3A8", "; c #BCCFB8", "> c #2B2B2B", ", c #E6EDE4", "' c #212E1F", ") c #658B5E", "! c #8CAD86", "~ c #96B491", "{ c #B8CCB5", "] c #8DAD88", " ", " ", " ", " ..... ", " .+@#$%. ", " .%&@$$$*. ", " .=@-...;$-> ", " .,' .$$. ", " %. .$-. ", " .$$). ", " .$$!. ", " .$$!. ", " .~$!. ", " .$~. ", " .... ", " ", " .. ", " .${. ", " .{]. ", " .. ", " ", " "}; GabeditSrc250/pixmaps/DeMonMini.xpm0000644000175100017510000000245213130664665017533 0ustar alloucheallouche/* XPM */ static char * demon_mini_xpm[] = { "16 16 63 1", " c None", ". c #FFFFFF", "+ c #F6A6A6", "@ c #F7AEAE", "# c #F9C9C9", "$ c #FDF8F8", "% c #F28181", "& c #F8BEBE", "* c #F5A0A0", "= c #F17676", "- c #F9C5C5", "; c #F49595", "> c #F7B3B3", ", c #F38787", "' c #F49797", ") c #F17070", "! c #F8C1C1", "~ c #F59B9B", "{ c #F8BABA", "] c #F6A5A5", "^ c #F59A9A", "/ c #F6A8A8", "( c #F27D7D", "_ c #F17474", ": c #F6A9A9", "< c #F38D8D", "[ c #F38A8A", "} c #F28383", "| c #F28282", "1 c #F38888", "2 c #FEFEFE", "3 c #F5A3A3", "4 c #F06C6C", "5 c #F59F9F", "6 c #F59C9C", "7 c #F8BBBB", "8 c #FDF4F4", "9 c #FBDCDC", "0 c #F49393", "a c #F48F8F", "b c #FDF9F9", "c c #FDF5F5", "d c #FEFDFD", "e c #FDF7F7", "f c #E80A0A", "g c #E91C1C", "h c #EA2525", "i c #F17272", "j c #FCEEEE", "k c #F7B4B4", "l c #FCE5E5", "m c #ED4C4C", "n c #FCEBEB", "o c #F6A4A4", "p c #F27979", "q c #F17171", "r c #EA2D2D", "s c #FDF2F2", "t c #F27E7E", "u c #F5A1A1", "v c #EE5555", "w c #FEFCFC", "x c #F59E9E", "................", "................", "..+...@#$%......", "&*=-;>,'@)!~{]^/", ",.(_:<,+[,}.|12<", "^34567,89,^*0a.a", ".b..cd.....e....", ".........f......", "...~gh@..f......", "...ijkg..f......", ".....lm..f.*%...", "....2)n..fop....", "....q{...frs....", "...tu....f7vw...", "...ffffe.f.xi...", "................"}; GabeditSrc250/pixmaps/OpenBabel.xpm0000644000175100017510000000667213130664665017553 0ustar alloucheallouche/* XPM */ static char * open_babel_xpm[] = { "24 24 138 2", " c None", ". c #D7D7D7", "+ c #CBCBCB", "@ c #C8C8C8", "# c #CDCDCD", "$ c #CCCCCC", "% c #C6C6C6", "& c #C9C9C9", "* c #EEEEEE", "= c #FFFFFF", "- c #B7B7B7", "; c #B3B3B3", "> c #B2B2B2", ", c #919191", "' c #B5B5B5", ") c #F3F3F3", "! c #B4B4B4", "~ c #B1B1B1", "{ c #A7A7A7", "] c #9A9A9A", "^ c #C3C3C3", "/ c #5C5C5C", "( c #707070", "_ c #8A8A8A", ": c #565656", "< c #6A6A6A", "[ c #575757", "} c #6E6E6E", "| c #C4C4C4", "1 c #A0A0A0", "2 c #696969", "3 c #6D6D6D", "4 c #737373", "5 c #616161", "6 c #646464", "7 c #EDEDED", "8 c #787878", "9 c #6C6C6C", "0 c #636363", "a c #000000", "b c #444444", "c c #5E5E5E", "d c #555555", "e c #4C4C4C", "f c #C1C1C1", "g c #9D9D9D", "h c #434343", "i c #8F8F8F", "j c #484848", "k c #FDFDFD", "l c #4E4E4E", "m c #757575", "n c #505050", "o c #202020", "p c #F6F6F6", "q c #D4D4D4", "r c #7B7B7B", "s c #999999", "t c #686868", "u c #1D1D1D", "v c #969696", "w c #8B8B8B", "x c #151515", "y c #383838", "z c #C7C7C7", "A c #7A7A7A", "B c #545454", "C c #666666", "D c #F7F7F7", "E c #606060", "F c #4B4B4B", "G c #959595", "H c #878787", "I c #020202", "J c #898989", "K c #A1A1A1", "L c #4A4A4A", "M c #AEAEAE", "N c #E1E1E1", "O c #5F5F5F", "P c #141414", "Q c #3C3C3C", "R c #1C1C1C", "S c #BFBFBF", "T c #9B9B9B", "U c #5A5A5A", "V c #A5A5A5", "W c #727272", "X c #6F6F6F", "Y c #6B6B6B", "Z c #424242", "` c #585858", " . c #3D3D3D", ".. c #C0C0C0", "+. c #4D4D4D", "@. c #9F9F9F", "#. c #595959", "$. c #272727", "%. c #262626", "&. c #282828", "*. c #989898", "=. c #7D7D7D", "-. c #5B5B5B", ";. c #FCFCFC", ">. c #AAAAAA", ",. c #5D5D5D", "'. c #090909", "). c #454545", "!. c #181818", "~. c #DFDFDF", "{. c #E8E8E8", "]. c #D8D8D8", "^. c #7F7F7F", "/. c #464646", "(. c #D1D1D1", "_. c #676767", ":. c #414141", "<. c #838383", "[. c #767676", "}. c #A6A6A6", "|. c #777777", "1. c #7C7C7C", "2. c #929292", "3. c #AFAFAF", "4. c #0B0B0B", "5. c #A9A9A9", "6. c #626262", "7. c #888888", "8. c #292929", "9. c #1F1F1F", "0. c #0C0C0C", "a. c #494949", "b. c #797979", "c. c #191919", "d. c #949494", "e. c #131313", "f. c #161616", "g. c #0A0A0A", " ", " ", " ", " ", ". . . . . . . . . . . . . . . . . . . . ", ". . + @ # @ $ . . . . % & & @ @ @ & & . . . ", ". * = = - ; > , ' . % = ) ! ! ; > ~ { ] . . ", " = = ^ / ( _ : < [ } | = 1 ( 2 2 3 < 4 5 6 . ", "7 = > 8 9 0 a b c 9 d e f = g 0 h a a 3 i < ( j ", "= k l m n a o p q 6 8 r = s t h u | = s < d ", "= v 3 w x y . z = 0 A B = ] C b u D = E 4 F ", "= G H y I J . ^ = K 2 L = M C 2 = = = N O 3 P ", "= K c Q R . . S = T U j = V W 6 m C t X Y Z a ", "= ] ` .R . . ..= v U +.= @.0 #.$.%.&.*.=.} -.", ";.>.0 ,.R . . = = r 0 F = ] 4 h '.).!.~.= #.A ", "{.].^./.n . (.= = _.0 ` = 1 _.:.u . k = 0 <.", " D h 2 _._ = = ;.B 9 [.9 = }.0 : [.D = = 1 |._ ", ". & | 1.2._.3.w Y ( 2 4.} = M 4 < ' ! 5.6.7.w 8.", ". . . 9.6.O ( 9 /.0.I _ a.r r m |.b.H 9 c.a ", ". . . . d.e.a a a a &.7.. . f.a a a a a a g._.", " . . . . . . . . . . . . . . . . . . . . . . ", " ", " ", " "}; GabeditSrc250/pixmaps/MPQCMini.xpm0000644000175100017510000000562313130664665017274 0ustar alloucheallouche/* XPM */ static char *mpqc_mini_xpm[]={ "16 16 146 2", ".f c None", "Qt c None", "#Y c #301313", ".0 c #311313", ".M c #321414", "#Z c #361616", "#X c #362525", "#1 c #372d2d", "#H c #3a2020", ".O c #3b1a1a", ".Z c #3c2c2c", ".N c #401a1a", ".L c #402e2e", "#S c #404040", "#0 c #412323", "#D c #414141", "#e c #431d1d", "#W c #443e3e", "#q c #494949", ".z c #4a1f1f", "#8 c #4a4a4a", "ad c #4b4b4b", "#u c #4c1f1f", "#I c #4e2020", "#2 c #4f4f4f", ".1 c #512121", "ae c #515151", "af c #565656", ".P c #593030", "#b c #5b5b5b", "#E c #5c5c5c", "#T c #5d5d5d", "#3 c #5f5f5f", "#t c #614d4d", ".Y c #616161", "#r c #626262", "#J c #632828", ".2 c #632c2c", "#4 c #646464", ".p c #674a4a", "ak c #676767", ".q c #682929", "#f c #682a2a", ".A c #6a2b2b", "#M c #6b3737", ".b c #6c3636", "#d c #6d6565", "#U c #6e6e6e", "#v c #6f2c2c", "#7 c #6f6f6f", "#K c #702d2d", "#L c #712d2d", "#V c #717171", ".5 c #744040", ".7 c #752f2f", ".c c #753838", ".i c #783d3d", ".y c #786a6a", "#c c #787878", ".h c #795b5b", "#P c #797979", "#N c #7a7676", "#R c #7a7a7a", ".S c #7b4141", ".B c #7d3232", "#a c #7d7d7d", "#G c #807b7b", ".6 c #823c3c", "#w c #833434", "#9 c #838282", "ac c #848484", ".j c #863737", "#g c #883939", ".Q c #884f4f", ".9 c #888888", ".8 c #896565", ".X c #8b8b8b", ".T c #8c3838", "#y c #8c3b3b", "#o c #8c8c8c", "#O c #8d8d8d", ".r c #8e3838", ".4 c #8f4d4d", "aj c #909090", "#z c #917474", ".k c #923c3c", ".U c #924e4e", "#x c #933b3b", ".a c #937b7b", "#C c #939393", "#l c #954b4b", ".G c #963b3b", ".C c #963d3d", "#Q c #9a9a9a", ".l c #9b4949", ".d c #9e7575", "#. c #9e9e9e", "#F c #9f9f9f", ".m c #a16262", ".w c #a25757", ".H c #a26868", "#m c #a29797", ".s c #a34141", "al c #a6a6a6", "#h c #a84b4b", ".R c #a96a6a", "#p c #a9a9a9", "#k c #aa4545", "#B c #aaaaaa", ".D c #ab4c4c", ".V c #aba7a7", "ag c #ababab", "#n c #acacac", "#s c #adacac", "#j c #ae4b4b", ".v c #af4747", "#i c #af4c4c", ".g c #b0a9a9", ".F c #b14c4c", "#A c #b2b2b2", ".t c #b34848", "#6 c #b3b3b3", "#5 c #b4b4b4", ".u c #b74949", ".3 c #b75b5b", ".n c #b89a9a", ".E c #b95858", "a# c #bab7b7", ".W c #bbbbbb", "aa c #bcb8b8", ".o c #c0bbbb", "ah c #c0c0c0", "ab c #c1bebe", ".x c #c2aaaa", "a. c #c4c2c2", "am c #c5c5c5", "## c #c8c8c8", ".K c #cdcdcd", ".e c #d0c6c6", "ao c #d1d1d1", ".# c #d3cfcf", "ap c #d5d5d5", "an c #d7d7d7", ".I c #dbd6d6", "ai c #dbdbdb", ".J c #dfdfdf", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQt.#.a.b.c.d.eQtQtQtQtQt", "QtQt.f.f.g.h.i.j.k.l.m.n.fQtQtQt", "QtQtQt.o.p.q.r.s.t.u.v.w.xQtQtQt", "QtQtQt.y.z.A.B.C.D.E.F.G.H.IQtQt", "Qt.J.K.L.M.N.O.P.Q.R.S.T.U.V.JQt", ".W.X.Y.Z.0.1.2.3.4.5.6.7.8.9#.##", "#a#b#c#d#e#f#g#h#i#j#k#l#m#n#o#p", "#q#r.9#s#t#u#v#w.T#x#y#z#A#B#o#C", "#D#E#a#F#G#H#I#J#K#L#M#N.X#O#P#Q", "#R#S#T#U#V#W#X#Y#Z#0#1#2.Y#3#4#5", "#6#7#8#2#E#9a.a#aaabacadaeafagah", "QtaiajakalamQtQtQtQt.JanaoapQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"}; GabeditSrc250/pixmaps/Camera.xpm0000644000175100017510000001110613130664665017100 0ustar alloucheallouche/* XPM */ static char * camera_xpm[] = { "24 24 211 2", " c None", ". c #484848", "+ c #626262", "@ c #676767", "# c #6E6E6E", "$ c #101010", "% c #0C0C0C", "& c #0D0D0D", "* c #262626", "= c #2C2323", "- c #A5A4A4", "; c #E7E7E7", "> c #A8A8A8", ", c #797979", "' c #505050", ") c #AAAAAA", "! c #444444", "~ c #403A3A", "{ c #684444", "] c #8D4B4B", "^ c #622B2B", "/ c #665856", "( c #9F9E9E", "_ c #525252", ": c #131313", "< c #595959", "[ c #4A4A4A", "} c #201D1D", "| c #4B3232", "1 c #C87475", "2 c #CB585A", "3 c #BB4646", "4 c #512221", "5 c #191414", "6 c #121212", "7 c #171717", "8 c #1E1E1E", "9 c #3B3B3B", "0 c #464646", "a c #151515", "b c #3A3A3A", "c c #322F2F", "d c #120202", "e c #270606", "f c #2A0707", "g c #150A0A", "h c #464544", "i c #414141", "j c #4D4D4D", "k c #515151", "l c #494949", "m c #404040", "n c #242424", "o c #383838", "p c #D1D1D1", "q c #BCBBBB", "r c #928E8E", "s c #5E5A5A", "t c #4E4E4E", "u c #4D4D4E", "v c #424242", "w c #3D3D3D", "x c #3B3B3D", "y c #2E2E2E", "z c #D3D3D3", "A c #CACACA", "B c #A2A2A2", "C c #585858", "D c #4B4B4B", "E c #3E3E3D", "F c #2C2C2C", "G c #1B1B1B", "H c #343432", "I c #5A5A5A", "J c #D4D4D4", "K c #969696", "L c #3F3F3F", "M c #343434", "N c #999999", "O c #E8E8E8", "P c #CBCBCB", "Q c #B4B4B4", "R c #242323", "S c #010000", "T c #161514", "U c #262525", "V c #6C6C6C", "W c #C3C3C3", "X c #8B8B8B", "Y c #393939", "Z c #252525", "` c #373737", " . c #8E8E8E", ".. c #C8C8C8", "+. c #D8D8D8", "@. c #2D2D2C", "#. c #494642", "$. c #797264", "%. c #7E7767", "&. c #696252", "*. c #5A5448", "=. c #35332E", "-. c #282827", ";. c #686868", ">. c #CECECE", ",. c #C1C1C1", "'. c #818181", "). c #4C4C4C", "!. c #363636", "~. c #5A5858", "{. c #828282", "]. c #2A2A29", "^. c #BAB6AE", "/. c #FAF2E2", "(. c #D4CBB9", "_. c #B7AD9B", ":. c #968C79", "<. c #686254", "[. c #282621", "}. c #050505", "|. c #191919", "1. c #6A6A6A", "2. c #B7B7B7", "3. c #7A7A7A", "4. c #313131", "5. c #0B0B0B", "6. c #3C3C3C", "7. c #22211F", "8. c #8F8B85", "9. c #C3C0B8", "0. c #EBE5DA", "a. c #FCF3E6", "b. c #D4D0C9", "c. c #55524D", "d. c #0B0A08", "e. c #000000", "f. c #020000", "g. c #020100", "h. c #050404", "i. c #070707", "j. c #565656", "k. c #303030", "l. c #282828", "m. c #222222", "n. c #2C2824", "o. c #736D63", "p. c #8E8A81", "q. c #AEAAA0", "r. c #B0ACA3", "s. c #20201D", "t. c #16110E", "u. c #4F433E", "v. c #90877F", "w. c #0B0A0A", "x. c #030303", "y. c #1A1A1A", "z. c #060606", "A. c #211E18", "B. c #3D3930", "C. c #58544A", "D. c #75716C", "E. c #1E1E1C", "F. c #141110", "G. c #8B7B71", "H. c #AC9180", "I. c #A69A92", "J. c #828280", "K. c #080607", "L. c #0F0F0F", "M. c #5E5E5E", "N. c #606060", "O. c #12110E", "P. c #201C18", "Q. c #3A3630", "R. c #2C2B29", "S. c #020202", "T. c #12100E", "U. c #B8A79B", "V. c #B39A88", "W. c #BAAFA6", "X. c #959696", "Y. c #727373", "Z. c #202020", "`. c #262625", " + c #0F0E0C", ".+ c #1F1E1C", "++ c #040404", "@+ c #7E716A", "#+ c #B49F91", "$+ c #CDC1B9", "%+ c #949B9F", "&+ c #808385", "*+ c #5C5C5C", "=+ c #272624", "-+ c #080605", ";+ c #A4948C", ">+ c #C6B9B2", ",+ c #8A8E91", "'+ c #7A7E81", ")+ c #212122", "!+ c #5B5B5B", "~+ c #232323", "{+ c #0B0C0A", "]+ c #4C4644", "^+ c #42403F", "/+ c #1F2021", "(+ c #101111", "_+ c #767475", ":+ c #020302", "<+ c #1D1D1D", "[+ c #323232", " ", " ", " . + @ # $ % & * ", " = - ; > , ' . ) ! ", " ~ { ] ^ / ( + _ . : < [ $ ", " } | 1 2 3 4 5 6 7 8 9 . 0 a ", " b c d e f g h i j k [ l m n ", " o p q r s t ! u ' v w . x y * ", " t z A B C D w E 6 F o % 6 G H ", " I J A K ' L M 7 N O P Q R S S T U ", " V p W X l Y Z ` ...+.@.#.$.%.&.*.=.-. ", " ;.>.,.'.).!.n o ~.{.].^./.(._.:.<.[.}.6 * ", " |.1.2.3.m !.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h. ", " i.j.V L k.l.m.g.n.o.p.q.r.s.e.f.t.u.v.w.x. ", " % y.y 6 8 6.z.A.B.C.D.E.e.F.G.H.I.J.}.K. ", " L.M. N.O.P.Q.R.S.T.U.V.W.X.Y.6 Z. ", " `. +.+++h.@+#+$+%+&+Z.w *+ ", " =+L.e.-+;+>+,+'+)+v !+~+ ", " i.z.{+]+^+/+(++ _+` ", " & x.:+z.6 % 6 <+ ", " 0 l.n [+ ", " ", " ", " "}; GabeditSrc250/pixmaps/AddBond.xpm0000644000175100017510000000123413130664665017204 0ustar alloucheallouche/* XPM */ static char *add_bond_xpm[]={ "22 22 3 1", ". c None", "a c #000000", "# c #ff0000", "......................", "......................", "......................", "......................", "......................", "...................##.", "..................##..", ".................##...", ".........###....##....", "........##..#..##.....", "..aaaaaaaaaaaaaaaaaaa.", "..aaaaaaaaaaaaaaaaaaa.", ".....##...#..#........", "....##...#.###........", "...##.....##..........", "..##..................", "..#...................", "......................", "......................", "......................", "......................", "......................"}; GabeditSrc250/pixmaps/ChangeBond.xpm0000644000175100017510000000136413130664665017705 0ustar alloucheallouche/* XPM */ static char *change_bond_xpm[]={ "24 24 2 1", ". c None", "# c #000000", "........................", "........................", "........................", "..###################...", "........................", "........................", "........................", "........................", "........................", "..###################...", "........................", "..###################...", "........................", "........................", "........................", "........................", "........................", "..###################...", "........................", "..###################...", "........................", "..###################...", "........................", "........................"}; GabeditSrc250/pixmaps/Yes.xpm0000644000175100017510000000750013130664665016453 0ustar alloucheallouche/* XPM */ static char* yes_xpm[]={ "20 20 186 2", ".C c #040404", "ab c #829d7a", "am c #427732", "#. c #d1e0cd", "#r c #4b8639", ".8 c #d2e0cd", "#Y c #719166", "ah c #5c8b4e", ".M c #4d803d", "#l c #c0d4b9", "#I c #3f752c", ".s c #58704f", "ae c #5b844f", ".7 c #bed3b6", ".W c #adc8a5", ".p c #598948", "#N c #81a875", ".2 c #3c6e2d", ".v c #abc7a2", "#j c #9bbc91", ".w c #9cbc91", "an c #568249", "#8 c #427c31", "aG c #4b723f", "aY c #030502", ".6 c #9abb8e", ".J c #89b07d", "#Z c #5a7651", "#M c #567b4a", ".X c #87af7a", ".f c #467039", "a3 c #374c2f", "aD c #809a77", "#R c #679958", "#a c #84ae77", ".U c #dfe8db", ".b c #090c07", ".V c #ccdcc7", "ad c #040703", "aR c #4e7142", ".S c #b5cead", "a# c #537f46", ".I c #a6c39c", "#t c #40792e", "#Q c #76a269", ".0 c #4a8239", "ap c #87a07f", "af c #679059", "aI c #4b753e", "#1 c #719964", "aP c #203619", ".1 c #447934", "#c c #4d883b", ".r c #1d3516", "a. c #427831", ".Q c #0e110c", "#g c #386827", "as c #253d1e", ".5 c #3e5736", "aA c #5b854e", ".x c #80a974", ".o c #649455", "ar c #050704", "#u c #396e29", "aH c #4a733e", "#H c #427d30", ".h c #030601", ".a c #030303", "ay c #447734", "#p c #7aa66b", "#W c #417631", "#i c #638657", ".g c #26421d", "ao c #6f9065", "#E c #679a57", "aL c #608554", "#2 c #799f6c", ".j c #405639", ".H c #c0d3b8", ".F c #bcd2b5", "#3 c #739d66", "ai c #588847", "aO c #3b5433", "ak c #477d36", "aE c #2f4429", "au c #59824b", "## c #aac6a1", ".e c #619152", "av c #558148", "a2 c #5e7756", "aq c #76916e", "#5 c #5e904f", "az c #477637", ".A c #487637", ".4 c #020401", "#w c #2f5623", "aV c #819a79", ".y c #69995a", ".# c #000000", ".z c #4e7e3f", ".K c #679857", ".D c #3e5439", "#G c #478235", ".O c #3f7030", "#d c #498235", ".i c #080808", "ac c #3e5336", "#F c #528b40", "aM c #77966d", "#X c #57804b", "aX c #2c4126", "at c #557f48", ".c c #36502d", "#e c #437930", "#n c #b5cdac", "#4 c #6c985d", ".R c #88ad7c", "#9 c #3f782d", ".m c #85ac79", "#J c #427231", "#C c #92b687", "#L c #517746", ".E c #9fc095", "#s c #447f32", ".Z c #518940", ".9 c #e4ede2", "aJ c #4b743d", "ag c #638e55", "aa c #74936a", "#q c #5c924b", "#v c #386829", "al c #427730", "#0 c #334d2a", "#z c #a1bf98", ".k c #85aa79", ".u c #afc9a6", "#B c #a0be95", ".n c #729e65", "#y c #8fb384", ".q c #4a793c", ".l c #8cb281", "aU c #76926d", "#U c #417c2f", ".N c #457736", ".d c #547b48", "#T c #498437", ".Y c #669956", ".T c #cdddc8", ".B c #224019", "#K c #4f7942", "aF c #2f4a27", ".P c #18300f", "aB c #76976c", "Qt c None", "#x c #6f9b62", "#O c #8db081", "aT c #69865f", "aZ c #2c4225", "aS c #587b4e", "#P c #8baf7e", "#o c #95b889", "aw c #4f7e41", "#7 c #4b833a", "aN c #7e9875", ".3 c #346326", "#S c #578c45", "#b c #639653", "aK c #4c763f", "aC c #85a07d", ".G c #c8d9c2", "a1 c #6a8562", "#m c #c5d8bf", "a0 c #4f6a47", "#k c #b6cdae", "aj c #4d823d", "aW c #728d6a", "#A c #a3c19a", "#V c #3e772c", "#h c #1a3411", ".t c #9fbf94", ".L c #558a45", "#6 c #578a45", "ax c #4a7a3b", "#D c #80a972", "#f c #3a6f2a", "aQ c #436538", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQt.#.#.#.#.#QtQtQtQtQtQtQtQt", "QtQtQtQtQt.a.b.c.d.e.f.g.h.#QtQtQtQtQtQt", "QtQtQtQt.i.j.k.l.m.n.o.p.q.r.#QtQtQtQtQt", "QtQtQtQt.s.t.u.v.w.x.y.p.z.A.B.#QtQtQtQt", "QtQt.C.D.E.F.G.H.I.J.K.L.M.N.O.P.#QtQtQt", "QtQt.Q.R.S.T.U.V.W.X.Y.Z.0.1.2.3.4QtQtQt", "Qt.#.5.6.7.8.9#.###a#b#c#d#e#f#g#h.#QtQt", "Qt.##i#j#k#l#m#n#o#p#q#r#s#t#u#v#w.#QtQt", "Qt.##x#y#z#A#B#C#D#E#F#G#H#I#J#K#L.#QtQt", "Qt.##M#N#O#P.x#Q#R#S#T#U#V#W#X#Y#Z.#QtQt", "Qt.##0#1#2#3#4#5#6#7#8#9a.a#aaabac.#QtQt", "QtQtadaeafagahaiajakalamanaoapaqarQtQtQt", "QtQt.#asatauavawaxayazaAaBaCaDaE.#QtQtQt", "QtQtQt.#aFaGaHaIaJaKaLaMapaNaO.#QtQtQtQt", "QtQtQtQt.#aPaQaRaSaTaUaVaWaX.#QtQtQtQtQt", "QtQtQtQtQt.#aYaZa0a1a2a3ar.#QtQtQtQtQtQt", "QtQtQtQtQtQtQt.#.#.#.#.#QtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"}; GabeditSrc250/pixmaps/A0d.xpm0000644000175100017510000001400313130664665016313 0ustar alloucheallouche/* XPM */ static char * a0d_xpm[] = { "40 24 255 2", " c None", ". c #FFFF00", "+ c #F6F500", "@ c #FCF800", "# c #F4F100", "$ c #F2EF00", "% c #FFFC00", "& c #EAE700", "* c #CCCA00", "= c #C5C300", "- c #F8F500", "; c #EEEA00", "> c #EBE800", ", c #E8E500", "' c #E7E400", ") c #E6E300", "! c #E5E200", "~ c #D3D000", "{ c #BFBD00", "] c #F0EC00", "^ c #E5E100", "/ c #E2DE00", "( c #E1DD00", "_ c #DCD800", ": c #CBC800", "< c #B5B200", "[ c #ADAA00", "} c #EAE400", "| c #DFDA00", "1 c #DCD700", "2 c #DBD600", "3 c #D4CF00", "4 c #B1AD00", "5 c #888400", "6 c #E6DF00", "7 c #DAD300", "8 c #D7D100", "9 c #BFBA15", "0 c #8F8B40", "a c #A7A32A", "b c #D6D000", "c c #D2CC00", "d c #B1AC00", "e c #767300", "f c #F3EB00", "g c #D7D000", "h c #D1CA00", "i c #8B8640", "j c #0000C0", "k c #747055", "l c #BAB315", "m c #5D5A6A", "n c #454380", "o c #D0C900", "p c #CEC700", "q c #BAB400", "r c #858100", "s c #736F00", "t c #E4DB00", "u c #CEC600", "v c #CCC400", "w c #888240", "x c #5B576A", "y c #2D2B95", "z c #CBC300", "A c #C1B900", "B c #999300", "C c #6E6900", "D c #A59F00", "E c #FBF100", "F c #EFE500", "G c #D1C900", "H c #C7BF00", "I c #C6BE00", "J c #423F80", "K c #58546A", "L c #9A942A", "M c #C5BD00", "N c #C0B800", "O c #9A9400", "P c #5D5A00", "Q c #898400", "R c #EDE100", "S c #DFD400", "T c #C7BC00", "U c #C1B700", "V c #ABA215", "W c #2B2895", "X c #807A40", "Y c #403D80", "Z c #1514AA", "` c #C0B600", " . c #BCB200", ".. c #958D00", "+. c #534F00", "@. c #7A7400", "#. c #E4D800", "$. c #D6CB00", "%. c #BFB500", "&. c #BAB000", "*. c #BBB100", "=. c #7C7640", "-. c #918A2A", ";. c #3E3B80", ">. c #B5AB00", ",. c #8E8700", "'. c #4E4A00", "). c #736D00", "!. c #D5C700", "~. c #CBBE00", "{. c #BAAE00", "]. c #B6AA00", "^. c #514C6A", "/. c #3C3880", "(. c #8E842A", "_. c #797140", ":. c #282695", "<. c #B4A800", "[. c #AA9F00", "}. c #7D7500", "|. c #433F00", "1. c #6A6300", "2. c #BFB200", "3. c #BDB000", "4. c #B5A900", "5. c #B0A400", "6. c #625B55", "7. c #897F2A", "8. c #1412AA", "9. c #272495", "0. c #4E496A", "a. c #756D40", "b. c #ADA100", "c. c #988D00", "d. c #5E5700", "e. c #353100", "f. c #5F5800", "g. c #B8AA00", "h. c #BAAC00", "i. c #B6A800", "j. c #AC9F00", "k. c #AA9D00", "l. c #AB9E00", "m. c #988C15", "n. c #726940", "o. c #393480", "p. c #857B2A", "q. c #1311AA", "r. c #4C466A", "s. c #5F5755", "t. c #A59900", "u. c #877D00", "v. c #484300", "w. c #322E00", "x. c #B8A800", "y. c #B2A300", "z. c #A79900", "A. c #A49600", "B. c #A59700", "C. c #6E6440", "D. c #373280", "E. c #928615", "F. c #242195", "G. c #A29500", "H. c #988B00", "I. c #716700", "J. c #3B3600", "K. c #3C3700", "L. c #A39400", "M. c #9E9000", "N. c #9F9000", "O. c #A09100", "P. c #232095", "Q. c #353080", "R. c #6A6040", "S. c #1210AA", "T. c #595055", "U. c #9E8F00", "V. c #968800", "W. c #7A6E00", "X. c #4B4400", "Y. c #2D2900", "Z. c #443E00", "`. c #857700", " + c #8C7E00", ".+ c #968600", "++ c #998900", "@+ c #9A8A00", "#+ c #665C40", "$+ c #786B2A", "%+ c #897A15", "&+ c #988800", "*+ c #908100", "=+ c #766A00", "-+ c #4B4300", ";+ c #2A2600", ">+ c #2C2800", ",+ c #7C6E00", "'+ c #7B6D00", ")+ c #867700", "!+ c #8F7F00", "~+ c #928100", "{+ c #938200", "]+ c #948400", "^+ c #958400", "/+ c #948300", "(+ c #908000", "_+ c #897900", ":+ c #716500", "<+ c #494000", "[+ c #292400", "}+ c #766800", "|+ c #736500", "1+ c #736600", "2+ c #7F7000", "3+ c #877700", "4+ c #8A7A00", "5+ c #8B7B00", "6+ c #8A7900", "7+ c #857500", "8+ c #7A6C00", "9+ c #706300", "0+ c #625600", "a+ c #433B00", "b+ c #272300", "c+ c #6A5B00", "d+ c #554900", "e+ c #4D4200", "f+ c #584C00", "g+ c #675900", "h+ c #6B5D00", "i+ c #6B5C00", "j+ c #695B00", "k+ c #5F5200", "l+ c #4A3F00", "m+ c #3A3200", "n+ c #322B00", "o+ c #272100", "p+ c #282300", "q+ c #493E00", "r+ c #473D00", "s+ c #3E3500", "t+ c #393100", "u+ c #383000", "v+ c #372F00", "w+ c #312A00", "x+ c #272200", "y+ c #302900", "z+ c #665600", "A+ c #584A00", "B+ c #504400", "C+ c #4F4300", "D+ c #4E4100", "E+ c #4A3E00", "F+ c #443900", " ", " . . . . . . . . . . . . . . . . . . . . . . . ", " . . . . . . . . . . . . . . . . . . . . . . . . . . + ", " . . . . . @ # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ # @ % & * = ", " . . . - ; > , ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ) ' ' & & ! ~ { { ", " . . . ] ^ / / / / / / / / / / / / / / / / / / / / / / / ( ( ( _ : < [ ", " . . } | 1 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 3 4 5 ", " . . 6 7 8 8 8 8 8 8 8 8 9 0 a 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 b b c d e e ", " . f g h h h h h h h h h i j k h h h h h h h h l m n n m l h h h o p q r s ", " . % t u v v v v v v v v v w j v v v v v v v v v x j x x j y v v v v z A B C D ", " E F G H I I I I I I I I I J K I I I J J J L I I J j I I J j I I I I M N O P Q ", " R S T U U U U U U U U U V W X U V W W Y Z j V X j X U U X j X U U U ` ...+.@.", " #.$.%.&.*.*.*.*.*.*.*.*.=.Z -.*.-.;.-.*.=.j =.=.j =.*.*.=.j =.*.*.*.&.>.,.'.).", " !.~.{.].].].].].].].].].^./.].].].(._./.:.j _._.j _.].]._.j _.].].].<.[.}.|.1.", " 2.3.4.5.5.5.5.5.5.5.5.5.j 6.5.5.7.8.j 9.0.j a.a.j a.5.5.a.j a.5.5.5.b.c.d.e.f.", " g.h.i.j.k.l.l.l.l.l.l.m.j n.l.l.o.j p.l.n.j n.p.q.r.l.l.s.j p.l.l.k.t.u.v.w. ", " x.y.z.A.A.B.B.B.B.B.C.D.B.B.B.D.j E.E.F.j C.B.D.j E.E.F.j B.B.A.G.H.I.J.K. ", " L.M.M.N.N.N.O.O.O.O.P.Q.O.O.O.R.S.P.P.P.S.P.O.R.S.P.P.S.T.O.N.U.V.W.X.Y.Z. ", " `. +.+++++++@+@+@+#+$+@+@+@+@+$+#+#+%+$+#+@+@+$+#+#+$+@+++&+*+=+-+;+>+ ", " ,+'+)+!+~+{+]+]+]+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+]+/+~+(+_+:+<+[+[+ ", " }+|+1+}+2+3+4+5+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+6+7+8+9+0+a+b+b+ ", " c+d+e+f+g+h+i+i+i+i+i+i+i+i+i+i+i+i+i+i+i+i+i+j+k+l+m+n+o+p+ ", " q+q+r+s+t+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+u+v+w+x+o+y+u+ ", " z+A+B+C+C+C+C+C+C+C+C+C+C+C+C+C+C+C+C+D+E+F+ "}; GabeditSrc250/pixmaps/Save.xpm0000644000175100017510000000333013130664665016606 0ustar alloucheallouche/* XPM */ static char *save_xpm[] = { /* width height ncolors chars_per_pixel */ "24 24 64 1", /* colors */ " c #000000", ". c #D0D5D6", "X c #A0BCC1", "o c #F2F6F7", "O c #F0F4F5", "+ c #899293", "@ c #495A5E", "# c #A8C1C5", "$ c #657376", "% c #D5DADA", "& c #A4ABAD", "* c #729096", "= c #779FA8", "- c #CFD8DA", "; c #EBF1F2", ": c #F6F6F6", "> c #F2F2F2", ", c #EAEAEA", "< c #A9B2B4", "1 c #E4E4E4", "2 c #A7B0B2", "3 c #E0E0E0", "4 c #DEDEDE", "5 c #D8D8D8", "6 c #D2D4D5", "7 c #94B2B9", "8 c #E4ECED", "9 c #B4B4B4", "0 c #4B575A", "q c #34464A", "w c #607A7F", "e c #C6CACC", "r c #87AAB2", "t c #3E4D50", "y c #536E75", "u c #BFD1D5", "i c #606364", "p c #E8EFF0", "a c #7EA4AC", "s c #E0E9EB", "d c #F5F8F9", "f c #8BADB5", "g c #486166", "h c #8F9A9B", "j c #FFFFFF", "k c #484848", "l c #F3F3F3", "z c #F1F1F1", "x c #E4ECEE", "c c #E9E9E9", "v c #E7E7E7", "b c #E1E1E1", "n c #DDDDDD", "m c #8C9394", "M c #465E63", "N c #BCC2C3", "B c #3A474A", "V c #AEC4C9", "C c #57696D", "Z c #EEF3F4", "A c #557278", "S c None", "D c #788A8D", "F c #CFDCDF", /* pixels */ "SSSSSSSSSSSSSSSSSSSSSSSS", "SSSSSSSSSSSSSSSSSSSSSSSS", "SSSSSSSSSSSSSSSSSSSSSSSS", "SSSSSSSSSSSSSS SSSSSSSS", "SSSSSSSSSSSS =@ SSSSSSS", "SSSSSSSSSS u#8= SSSSSSS", "SSSSSSSS u#ujZ=@ SSSSSS", "SSSSSS u#ujjjjs= SSSSSS", "SSSS rVujjjjjjdft SSSSS", "SSS 7VFjjjjjjjjjx= SSSSS", "SSS D7;jjjjjjjjjp=@ SSSS", "SSSS #sjjjjjjjos=== SSSS", "SSSS wr;jjjjOs==yy=@ SSS", "SSSSS XsjjOs==M0A=y= SSS", "SSSSS wrps==M&,1i=y=@ SS", "SSSSSS 7==yelzvbBa%39$ SSSS", "SSSSSSS A==.c26+k SSSSSS", "SSSSSSSS g=ynh SSSSSSSS", "SSSSSSSSS SSSSSSSSSS", "SSSSSSSSSSSSSSSSSSSSSSSS", "SSSSSSSSSSSSSSSSSSSSSSSS", "SSSSSSSSSSSSSSSSSSSSSSSS" }; GabeditSrc250/pixmaps/SelectResidue.xpm0000644000175100017510000000141013130664665020445 0ustar alloucheallouche/* XPM */ static char * selectresidue_xpm[] = { "24 24 3 1", " c None", ". c #505050", "+ c #F40E31", "..... ...... ..... .....", "..... ...... ..... .....", "..... ...... ..... .....", "... ...", "... ++++++++ ...", " +++++++++ ", "... ++++++++++ ...", "... +++ +++ ...", "... +++ +++ ...", "... +++ +++ ...", "... +++ +++ ...", "... +++ ++++++ ...", " +++++++++ ", "... ++++++++ ...", "... +++++++ ...", "... +++ +++ ...", "... +++ ++++ ...", "... +++ ++++ ...", " +++ +++ ", "... +++ ++++ ...", "... ...", "..... ...... ..... .....", "..... ...... ..... .....", "..... ...... ..... ....."}; GabeditSrc250/pixmaps/Apply.xpm0000644000175100017510000000143713130664665017003 0ustar alloucheallouche/* XPM */ static char* apply_xpm[]={ "20 20 18 1", "f c #566c43", "p c #4f633e", "h c #789774", "b c #708c58", "c c #859d71", "n c #668050", "e c #97ab86", "# c #000000", "m c #688251", "i c #88ac84", "o c #6d8956", "k c #698566", "d c #627b4d", "a c #b3c2a7", ". c None", "g c #a2bd9e", "j c #5e764a", "l c #6d8855", "....................", "....................", "....................", ".............##.....", "............#ab#....", "............#cd#....", "...........#eb#.....", ".....##....#cf#.....", "....#gh#..#cb#......", "....#ii##.#bf#......", ".....#ih##jb#.......", ".....#iik#lf#.......", "......#iimn#........", ".......#iop#........", ".......#ii#.........", "........#k#.........", ".........#..........", "....................", "....................", "...................."}; GabeditSrc250/pixmaps/H.xpm0000644000175100017510000000212113130664665016074 0ustar alloucheallouche/* XPM */ static char*H[]={ "21 18 41 1", "E c #bebebe", "e c #8e8a8e", "M c #79869e", "s c #9696ae", "b c #cfc7cf", "L c #a6a2a6", "q c #961408", "u c #595128", "l c #cf5528", "h c #b6b2b6", "G c #bebabe", "o c #ff8e08", "d c #bec3cf", "B c #808000", "p c #413841", "D c #717571", "f c #aeaeb6", "I c #b6aeb6", "t c #616161", "# c #cfd3cf", "n c #797979", "z c #202020", "g c #aeb2cf", "j c #ae6161", "A c #ffb610", "K c #666666", "w c #ffff00", "a c None", "r c #690808", "C c #000018", "m c #c4c4c4", "c c #cccccc", "H c #c7bac7", "J c #b9b9b9", "i c #be2020", ". c #dcdcdc", "y c #717986", "F c #202851", "k c #867986", "x c #3d3b3d", "v c #aeb228", ".#a###############aaa", "aaaaaaaaaaaaaaaaaaaba", "caaaaaaaaaaaaaaaaaaba", "caaaaaaaadefgaaahaaba", "caaaaaaadeijgghaaaaca", "caaaaaadkllljgghaaaca", "maaaaagnllloljfgaaama", "maaaagpqliiiiirsaaama", "maaaatuvvwwwvvvxaaama", "maaaayvuzwAwBCvDsaaEa", "maaaasvuFvqBBFvjgaaGa", "HaaaasvxFvlvuFvDgaaGa", "GaaaasvvvvqvwBwDIaaJa", "GaaaasuAABquAAvKIaaJa", "JaaaaLkyyyeMyyysLaaha", "Jaaaaaaaaaaaaaaaaaaha", "Gaaaaaaaaaaaaaaaaaama", "aaaaaaaaaaaaaaaaaaaaa"}; GabeditSrc250/pixmaps/QChemMini.xpm0000644000175100017510000000121213130664665017517 0ustar alloucheallouche/* XPM */ static char * qchem_mini_xpm[] = { "16 16 18 1", "m c #13ebff", "j c #1de2ff", "l c #27d8ff", "k c #31ceff", "f c #343d47", "c c #394b5e", "o c #3bc5ff", "i c #3ca0d1", "g c #3d5875", "a c #42658c", "h c #44bbff", "n c #45bbff", "b c #4672a3", "# c #4b80ba", "p c #4eb1ff", "d c #4f8dd1", "e c #549ae8", ". c #58a8ff", "..........#a....", ".........bcab...", "........bdaedb..", ".......bd.ea.db.", "......dba#b.ae..", ".....b.dac..ae..", "....d.acfbaa....", "...bd.ecddae....", "...g....ae......", "...db...ee......", ".d#adb#a........", "hi#a.d#e........", "j...g...........", "j..bfd..........", "hklm............", ".nop............"}; GabeditSrc250/pixmaps/DeleteAtom.xpm0000644000175100017510000000142213130664665017733 0ustar alloucheallouche/* XPM */ static char* delete_atom_xpm[]={ "24 24 4 1", " c None", ". c #000000", "+ c #FFFFFF", "@ c #808080", " ", " ", " ", " ", " .... ", " .+.++. ", " .+++.++. ", " .+++++.++. ", " .+++++++.++. ", " .+++++++++.++. ", " .+++++++++++..+. ", " .+++++++++++.++. ", " .+++++++++++.++. ", " .+++++++++++.++. ", " .+++++++++++.++. ", " .+++++++++.++. ", " .+++++++.++. ", " .+++++.++. ", " .+@@.@+. ", " .@@@@@ ", " ", " ", " ", " "}; GabeditSrc250/pixmaps/Exit.xpm0000644000175100017510000000560113130664665016624 0ustar alloucheallouche/* XPM */ static char *exit_xpm[]={ "24 24 103 2", "Qt c None", "#I c #5b0e23", "#H c #5e0f25", "#B c #630f26", "#A c #661028", ".8 c #68585c", "#t c #6a1129", "#s c #6e112b", "#j c #6e424e", "#n c #6f112b", "#G c #6f1c33", "#m c #72122c", "#i c #77122e", "#u c #78273d", "#h c #7a132f", "#E c #7b1330", "#r c #7b4251", "#z c #7c3045", "#x c #7d1331", "#b c #7e1431", "#p c #7f1431", "#c c #7f2b43", "#w c #801432", "#o c #821432", "#a c #831433", "#e c #851534", "## c #861534", "#C c #865260", ".6 c #871534", ".7 c #871e3b", "#. c #891535", "#g c #892c46", ".0 c #8a1536", ".G c #8b1636", ".q c #8c1636", ".P c #8d1637", ".W c #8e1637", ".3 c #8e364e", ".1 c #8e6e77", ".x c #8f1637", ".F c #901638", ".p c #911738", ".V c #921739", ".X c #922543", ".w c #931739", ".Z c #96173a", "#v c #982e4b", ".y c #992c4b", "#l c #9a3b55", ".T c #9b183c", ".U c #9c2646", ".M c #9e193d", "#f c #9e6272", ".E c #a12c4c", ".L c #a2193f", ".C c #a61a40", "#F c #a6556b", ".Q c #a74e67", ".B c #aa1a42", "#d c #ab4762", ".O c #ab5c72", ".N c #ab8a93", ".t c #ae1b44", ".K c #ae2e51", ".Y c #af4f69", ".k c #b21c45", "#q c #b3a3a8", ".j c #b61c47", ".r c #b65e76", "#y c #b98c98", ".i c #ba1d48", ".u c #ba4565", ".f c #ba617a", ".D c #bb7689", ".e c #be637c", ".H c #c0909d", ".5 c #c2919f", "#D c #c57d90", ".S c #c5919f", ".A c #c75e7c", ".d c #cd7e93", "#k c #d294a5", ".b c #d46785", ".o c #d492a5", ".z c #d4c4c8", ".a c #d76786", ".2 c #d9d9d9", ".J c #dccacf", ".v c #ddccd0", ".s c #de95a9", ".R c #e0e0e0", "#J c #e1e1e1", ".g c #e2c3cb", ".l c #e2d0d5", ".4 c #e2e2e2", ".9 c #e3d2d6", ".c c #e4adbc", ".m c #e5e5e5", ".# c #e69bb0", ".n c #e7e7e7", ".I c #eaeaea", "#K c #efefef", ".h c #f6e3e9", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQt.#.a.b.cQtQtQtQtQtQt.d.e.f.gQtQtQtQtQtQt", "QtQtQtQt.h.i.j.k.l.m.nQtQt.o.p.q.rQtQtQtQtQtQtQt", "QtQtQtQtQt.s.k.t.uQtQtQt.v.w.x.y.zQtQtQtQtQtQtQt", "QtQtQtQtQtQt.A.B.C.DQtQt.E.F.G.HQtQtQtQtQt.IQtQt", "QtQtQtQtQtQt.J.K.L.M.N.O.p.P.QQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQt.R.S.M.T.U.V.W.XQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQt.Y.Z.V.x.0.1QtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQt.2Qt.V.x.0.3QtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQt.4.5.W.0.6.7.8QtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQt.9.P#.###a#b#cQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQt#d#.#e#f#g#h#i#jQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQt#k.6#a#lQtQt#i#m#nQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQt#e#o#p#qQtQt#r#s#t#uQtQtQtQtQtQtQtQt", "QtQtQtQtQt#v#w#x#yQtQtQtQt#z#A#B#CQtQtQtQtQtQtQt", "QtQtQtQt#D#x#E#FQtQtQtQtQtQt#G#H#IQtQtQtQtQtQtQt", "QtQtQtQtQtQt#JQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQt.RQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQt#KQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"}; GabeditSrc250/pixmaps/Vasp.xpm0000644000175100017510000000714413130664665016630 0ustar alloucheallouche/* XPM */ static char * vasp_xpm[] = { "22 22 161 2", " c None", ". c #444D4E", "+ c #7970A3", "@ c #797FA0", "# c #8670A9", "$ c #8B2A96", "% c #8C2692", "& c #767A94", "* c #6B758D", "= c #8E2692", "- c #5F6E7A", "; c #7F6D95", "> c #9F409C", ", c #434D4D", "' c #8083B1", ") c #9079C9", "! c #8E79D1", "~ c #857AD9", "{ c #65779D", "] c #9151A0", "^ c #9269A7", "/ c #4C5B5E", "( c #8290A1", "_ c #B61685", ": c #6B7683", "< c #444F50", "[ c #8636A1", "} c #8020A2", "| c #8583C1", "1 c #7848D1", "2 c #531DDA", "3 c #4F656E", "4 c #59686C", "5 c #9A1F8E", "6 c #AC2490", "7 c #B62A8B", "8 c #C61A70", "9 c #CF015A", "0 c #8B7F99", "a c #737F90", "b c #72718C", "c c #67868F", "d c #872493", "e c #8074AA", "f c #7886B3", "g c #5F13D4", "h c #546A77", "i c #4C5B61", "j c #7467C9", "k c #8691C6", "l c #7A88A4", "m c #888BBE", "n c #A22A92", "o c #A55DA5", "p c #61727C", "q c #65787E", "r c #CE3F62", "s c #B17B9D", "t c #C12579", "u c #AE2F94", "v c #9C3296", "w c #8758AB", "x c #8487AE", "y c #6A7B8F", "z c #7F31C3", "A c #7E76D1", "B c #3B4040", "C c #4F647C", "D c #6A0BC9", "E c #706CA2", "F c #667989", "G c #8C53A7", "H c #9F49A1", "I c #78748D", "J c #4C5A5A", "K c #CA666A", "L c #C84F6D", "M c #707F87", "N c #536366", "O c #949AC1", "P c #8C369A", "Q c #842C9B", "R c #7F37B1", "S c #7B7BB7", "T c #424A4C", "U c #475A79", "V c #690BC9", "W c #5F6581", "X c #526366", "Y c #8F53A8", "Z c #9B64B1", "` c #9871A6", " . c #7D757B", ".. c #D44451", "+. c #C15876", "@. c #AA5B8A", "#. c #6E7E8A", "$. c #5E6F74", "%. c #8E1B8C", "&. c #83339D", "*. c #596B77", "=. c #50617A", "-. c #6310D0", ";. c #5F6A83", ">. c #627577", ",. c #8D2992", "'. c #7F9AAE", "). c #5F7A7B", "!. c #4D6060", "~. c #648181", "{. c #8D8395", "]. c #BB358B", "^. c #AF0C81", "/. c #9767B1", "(. c #8646A2", "_. c #8763AD", ":. c #54656E", "<. c #601DD5", "[. c #696BA4", "}. c #657888", "|. c #862292", "1. c #58666E", "2. c #64727C", "3. c #64797F", "4. c #495456", "5. c #767B92", "6. c #8E409A", "7. c #8478BE", "8. c #8058B2", "9. c #6850D4", "0. c #7845CF", "a. c #4E5D5E", "b. c #7C5FA7", "c. c #8457AC", "d. c #3B4242", "e. c #755D85", "f. c #8E6BA1", "g. c #4E5E5E", "h. c #516060", "i. c #8658A4", "j. c #8375BB", "k. c #648085", "l. c #5E7297", "m. c #640ECF", "n. c #8049CC", "o. c #8011AC", "p. c #686C89", "q. c #5D6272", "r. c #951688", "s. c #8C3398", "t. c #833097", "u. c #800A8C", "v. c #77759F", "w. c #6B75C4", "x. c #6E13C8", "y. c #8878C4", "z. c #6B7688", "A. c #816EA6", "B. c #836FAE", "C. c #717B9A", "D. c #5A7080", " ", " ", " ", " ", " ", " . + @ ", " # $ % & ", " * = - ; > , ' ) ! ~ { ", " ] ^ / ( _ : < [ } | 1 2 3 ", " 4 5 6 7 8 9 0 a b c d e f g h ", " i j k l m n o p q r s t u v w x y z A B ", " C D E F G H I J K L M N O P Q R S T ", " U V W X Y Z ` ...+.@.#.$.%.&.*. ", " =.-.;. >.,.'.). !.~.{.].^./.(._. ", " :.<.[. }.|.1. 2.3.4.5.6.7.8. ", " 9.0.a.b.c.d. e.f.g.h.i.j.k. ", " l.m.n.o.p. q.r.s.t.u.v. ", " w.x.y. z.A.B.C. ", " D. ", " ", " ", " "}; GabeditSrc250/pixmaps/Molden.xpm0000644000175100017510000000121613130664665017127 0ustar alloucheallouche/* XPM */ static char* molden_xpm[]={ "22 22 2 1", ". c #16535e", "# c #ffffff", "......................", "......................", "######################", "#....................#", "#....................#", "#....................#", "#.#.#.###.#.##.##.#.##", "#.###.#.#.#.#.##..#.##", "#.###.#.#.#.#.##..#.##", "#.#.#.#.#.#.#.##..#.##", "#.#.#.#.#.#.#.###.####", "#.#.#.#.#.#.#.##..####", "#.#.#.#.#.#.#.##..####", "#.#.#.#.#.#.#.##..####", "#.#.#.###..###.##.#.##", "#....................#", "#....................#", "#....................#", "#....................#", "######################", "......................", "......................"}; GabeditSrc250/pixmaps/About.xpm0000644000175100017510000000114313130664665016762 0ustar alloucheallouche/* XPM */ static char * about_xpm[] = { "22 20 2 1", " c None", ". c #00FFFF", " ", " ", " .. ", " .. ", " ... ", " .... ", " ..... ", " ...... ", " . ... ", " .. ... ", " ... ... ", " ......... ", " .. ... ", " . ... ", " .. .... ", " ... ....... ", " ", " ", " ", " "}; GabeditSrc250/pixmaps/Paste.xpm0000644000175100017510000000155213130664665016770 0ustar alloucheallouche/* XPM */ static char * paste_xpm[] = { "24 24 10 1", " c None", ". c #000005", "+ c #86867A", "@ c #CECBBB", "# c #E7E7D1", "$ c #AFAE9F", "% c #454541", "& c #65655F", "* c #2A2A28", "g c #00FFFF", " ", " ", " ", " ... ", " ..@@@. g ", " ..@@@@@. ggggg ", " ..@@+*&+@@. ggggg ", " .@@@&#$+%@@. g ", " .@@@%$&%@@@@. ", " .@@&%$@@@@@. .. ", " .@@@@@@@@@@..@+. ", " .@@@@$@@.*$$@#. ", " .@@@@@@@.#&@@@$. ", " .@@@@@@.#%$###. ", " .@@@@@$.&$@@##$. ", " .@@$@@.$#@####$. ", " .$@$@$.+##@####. ", " .@$$$..#######$. ", " .$$.. .$####$.. ", " .. .##$.. ", " .$.. ", " . ", " ", " "}; GabeditSrc250/pixmaps/ConvertUnit.xpm0000644000175100017510000000131213130664665020166 0ustar alloucheallouche/* XPM */ static char *convert_unit_xpm[]={ "22 22 6 1", "b c None", ". c None", "c c #000080", "d c #0000ff", "a c #800000", "# c #ff0000", "......................", "..................##..", ".................##a#.", "................##a##.", "...............##a##..", "...........a..##a##...", "...........ab##a##....", "...........aa#a##.....", "...........aaa##......", "...........aaaa.......", "...........aaaaaa.....", ".....cccccc...........", ".......cccc...........", "......ddccc...........", ".....ddcdcc...........", "....ddcdd.c...........", "...ddcdd..c...........", "..ddcdd...............", ".ddcdd................", ".dcdd.................", "..dd..................", "......................"}; GabeditSrc250/pixmaps/icon2.xpm0000644000175100017510002745146413130664665016752 0ustar alloucheallouche/* XPM */ static char * icon2_xpm[] = { "1101 1371 96925 3", " c #89827A", ". c #8B847C", "+ c #8C857D", "@ c #8D867E", "# c #8D847F", "$ c #8E8580", "% c #8C837E", "& c #8B847E", "* c #8A857F", "= c #89847E", "- c #8B827D", "; c #8F8681", "> c #908581", ", c #928481", "' c #8E8781", ") c #8D8680", "! c #8C857F", "~ c #8F8882", "{ c #8F8784", "] c #8F8584", "^ c #8E8483", "/ c #8E8485", "( c #8D8384", "_ c #8D8382", ": c #8C8283", "< c #8C8281", "[ c #8F8586", "} c #928984", "| c #918883", "1 c #908782", "2 c #908983", "3 c #918A84", "4 c #938A85", "5 c #8D847D", "6 c #8E857E", "7 c #908780", "8 c #928982", "9 c #938A83", "0 c #948B86", "a c #978A84", "b c #978A82", "c c #948A81", "d c #938A81", "e c #948B82", "f c #938C82", "g c #918D82", "h c #958C85", "i c #968D86", "j c #948B84", "k c #978E87", "l c #968D88", "m c #968C8A", "n c #978E89", "o c #988F88", "p c #968F87", "q c #988D87", "r c #9A8D87", "s c #9B8C87", "t c #9B928B", "u c #9A918A", "v c #989189", "w c #979088", "x c #949087", "y c #959188", "z c #959186", "A c #999186", "B c #999087", "C c #9B928D", "D c #99908B", "E c #988F8A", "F c #998F8D", "G c #999089", "H c #A0938D", "I c #9F928C", "J c #9D908A", "K c #9C8F89", "L c #9E918B", "M c #9B908A", "N c #9C918B", "O c #9C938C", "P c #99928A", "Q c #969289", "R c #9D928C", "S c #9F948E", "T c #9D948D", "U c #9D9391", "V c #9D948F", "W c #9D948B", "X c #9C938A", "Y c #9C9489", "Z c #A09790", "` c #9F968F", " . c #9E958E", ".. c #A19891", "+. c #A39A93", "@. c #A29992", "#. c #A19A92", "$. c #9F9890", "%. c #9D9990", "&. c #A19690", "*. c #A39690", "=. c #A29791", "-. c #9F968D", ";. c #A0988B", ">. c #A09989", ",. c #A0958F", "'. c #A49993", "). c #A39892", "!. c #A29B93", "~. c #9C988F", "{. c #9C9990", "]. c #9D9A91", "^. c #9E9A91", "/. c #A49B94", "(. c #A39A91", "_. c #A1988F", ":. c #A29990", "<. c #A0978E", "[. c #A59C95", "}. c #9C958B", "|. c #9E9A8F", "1. c #9F9B90", "2. c #9C988D", "3. c #9F988E", "4. c #A39C92", "5. c #A59C93", "6. c #A39990", "7. c #A59890", "8. c #A4978F", "9. c #A3968E", "0. c #A1978E", "a. c #A49C91", "b. c #A39B8E", "c. c #A1998C", "d. c #9F978C", "e. c #A0988D", "f. c #A1998E", "g. c #A29A8F", "h. c #A09792", "i. c #A2988F", "j. c #A49A91", "k. c #9E958C", "l. c #A49B92", "m. c #A09A8E", "n. c #A09A8C", "o. c #A2988E", "p. c #A59892", "q. c #A49791", "r. c #A59691", "s. c #A59693", "t. c #A3998F", "u. c #A39C8C", "v. c #A29A8D", "w. c #A29B8B", "x. c #A19A8A", "y. c #A49C8F", "z. c #A49D8D", "A. c #9B9289", "B. c #A09991", "C. c #9E978F", "D. c #A09591", "E. c #A19692", "F. c #A29793", "G. c #A39894", "H. c #A49995", "I. c #8A837B", "J. c #88837D", "K. c #8F8583", "L. c #908583", "M. c #908484", "N. c #8F8482", "O. c #8F8383", "P. c #8E8381", "Q. c #8E8282", "R. c #918684", "S. c #928686", "T. c #928785", "U. c #918585", "V. c #918682", "W. c #918680", "X. c #90857F", "Y. c #8F847E", "Z. c #8F867F", "`. c #918881", " + c #958C87", ".+ c #968983", "++ c #958A84", "@+ c #938C84", "#+ c #918D84", "$+ c #969287", "%+ c #999184", "&+ c #988F86", "*+ c #9A9188", "=+ c #9A938B", "-+ c #98948B", ";+ c #9E938D", ">+ c #9C9290", ",+ c #9C938E", "'+ c #9B9388", ")+ c #A1978D", "!+ c #A1978B", "~+ c #9F9691", "{+ c #A19893", "]+ c #A29994", "^+ c #9E978D", "/+ c #A29B91", "(+ c #A2958D", "_+ c #9F958C", ":+ c #A39B90", "<+ c #A69792", "[+ c #A69794", "}+ c #8A837D", "|+ c #87827C", "1+ c #8F8480", "2+ c #8E837F", "3+ c #938884", "4+ c #938886", "5+ c #928783", "6+ c #928B85", "7+ c #958784", "8+ c #958882", "9+ c #958A86", "0+ c #968B85", "a+ c #938C86", "b+ c #918C86", "c+ c #9A8F89", "d+ c #9B948C", "e+ c #99958C", "f+ c #9B918F", "g+ c #9A9287", "h+ c #A69D96", "i+ c #9E9590", "j+ c #A39A95", "k+ c #9E9791", "l+ c #A09C91", "m+ c #9D968C", "n+ c #A0998F", "o+ c #A1948C", "p+ c #9E948B", "q+ c #A0968D", "r+ c #9F998D", "s+ c #A79895", "t+ c #A69993", "u+ c #978E85", "v+ c #A59A94", "w+ c #8B8680", "x+ c #8C8781", "y+ c #938680", "z+ c #92857F", "A+ c #91847E", "B+ c #918380", "C+ c #948683", "D+ c #968885", "E+ c #8E8983", "F+ c #958786", "G+ c #958A88", "H+ c #968B87", "I+ c #958B89", "J+ c #948A88", "K+ c #938B88", "L+ c #918C88", "M+ c #968C8B", "N+ c #979388", "O+ c #999282", "P+ c #9F908B", "Q+ c #A0918C", "R+ c #9D8E89", "S+ c #9E8F8A", "T+ c #A1928D", "U+ c #9C958D", "V+ c #9A968D", "W+ c #9D968E", "X+ c #A3968D", "Y+ c #9E9492", "Z+ c #9F9593", "`+ c #A09694", " @ c #A19795", ".@ c #A29896", "+@ c #A39997", "@@ c #9B978C", "#@ c #9F998B", "$@ c #A49A90", "%@ c #968D84", "&@ c #86817B", "*@ c #948781", "=@ c #8D8882", "-@ c #8F8A84", ";@ c #968887", ">@ c #968888", ",@ c #958989", "'@ c #948A89", ")@ c #938B89", "!@ c #918C89", "~@ c #97938A", "{@ c #A09993", "]@ c #9E988C", "^@ c #9E988A", "/@ c #A2958F", "(@ c #A2988C", "_@ c #A0968A", ":@ c #A0968C", "<@ c #A3998D", "[@ c #8E877F", "}@ c #888179", "|@ c #85807A", "1@ c #928781", "2@ c #94877F", "3@ c #93867E", "4@ c #92857D", "5@ c #91847C", "6@ c #958880", "7@ c #908B85", "8@ c #938987", "9@ c #978989", "0@ c #97888B", "a@ c #94888A", "b@ c #948888", "c@ c #93898A", "d@ c #938988", "e@ c #948A8B", "f@ c #938A8B", "g@ c #918B8B", "h@ c #989489", "i@ c #989085", "j@ c #998E88", "k@ c #9D958A", "l@ c #9E968B", "m@ c #A19A94", "n@ c #9A968B", "o@ c #A59B91", "p@ c #A2998A", "q@ c #A19889", "r@ c #A09788", "s@ c #A49A8E", "t@ c #A39A8B", "u@ c #878078", "v@ c #867F77", "w@ c #8A817C", "x@ c #92887F", "y@ c #92887E", "z@ c #91877D", "A@ c #90867C", "B@ c #90837B", "C@ c #8F857B", "D@ c #968981", "E@ c #90867D", "F@ c #91877E", "G@ c #8F8880", "H@ c #908684", "I@ c #968A8A", "J@ c #928887", "K@ c #948D87", "L@ c #948D85", "M@ c #978C86", "N@ c #9A9389", "O@ c #9A9087", "P@ c #998F86", "Q@ c #9B9188", "R@ c #9C9289", "S@ c #A1948E", "T@ c #A79E97", "U@ c #A29B95", "V@ c #9D998E", "W@ c #A59B92", "X@ c #9D9789", "Y@ c #A19B8F", "Z@ c #A69991", "`@ c #A49590", " # c #A49592", ".# c #A59C97", "+# c #A49B96", "@# c #9F9589", "## c #857E78", "$# c #867F79", "%# c #88817B", "&# c #89827C", "*# c #8B8881", "=# c #8C837C", "-# c #8F877A", ";# c #91897C", "># c #8F8B82", ",# c #8C8980", "'# c #8C887F", ")# c #8B877E", "!# c #8D8980", "~# c #908981", "{# c #918A82", "]# c #928886", "^# c #918785", "/# c #918986", "(# c #958D8A", "_# c #948C89", ":# c #928A87", "<# c #958E86", "[# c #978D8B", "}# c #9A918C", "|# c #9B8E88", "1# c #A0918E", "2# c #9E8F8C", "3# c #9B8C89", "4# c #988986", "5# c #9B978E", "6# c #A29491", "7# c #A39592", "8# c #A39C94", "9# c #A59A96", "0# c #A59A98", "a# c #A59E96", "b# c #A79A92", "c# c #AA9D95", "d# c #A99F96", "e# c #A79D94", "f# c #9E9B92", "g# c #9F9C93", "h# c #A09C93", "i# c #9F9B92", "j# c #9C998A", "k# c #9D9A89", "l# c #9F9C8B", "m# c #A09D8C", "n# c #A09D8E", "o# c #A19B8D", "p# c #9F958B", "q# c #A2938E", "r# c #A5968F", "s# c #A19A90", "t# c #8A8780", "u# c #8D827E", "v# c #8D827C", "w# c #8F877C", "x# c #90887D", "y# c #90887B", "z# c #8A867D", "A# c #8E8A81", "B# c #8D8A81", "C# c #8B887F", "D# c #8A877E", "E# c #958E88", "F# c #938F86", "G# c #998C86", "H# c #988D89", "I# c #9D8F8C", "J# c #9B908C", "K# c #9C8D8A", "L# c #A08E8C", "M# c #A2908E", "N# c #9E8C8A", "O# c #9C8D88", "P# c #A29493", "Q# c #A39594", "R# c #9D928E", "S# c #A49997", "T# c #A39896", "U# c #A49D93", "V# c #9B9B91", "W# c #9C9C92", "X# c #9D9D93", "Y# c #9D9A8B", "Z# c #9D9C8A", "`# c #9E9D8B", " $ c #9F9C8D", ".$ c #89867F", "+$ c #8E837D", "@$ c #8F867D", "#$ c #928B83", "$$ c #938882", "%$ c #A49695", "&$ c #9F9490", "*$ c #A19694", "=$ c #A29795", "-$ c #9E9B8C", ";$ c #A79893", ">$ c #88857E", ",$ c #8E857C", "'$ c #968F89", ")$ c #978C88", "!$ c #A1928F", "~$ c #9F8D8B", "{$ c #A09D94", "]$ c #9F9492", "^$ c #A09593", "/$ c #A69C93", "($ c #908C83", "_$ c #A29390", ":$ c #A89B93", "<$ c #A29C90", "[$ c #A59794", "}$ c #948983", "|$ c #928E85", "1$ c #988B85", "2$ c #958C83", "3$ c #9F908D", "4$ c #A18F8D", "5$ c #A49693", "6$ c #8B8682", "7$ c #8A8782", "8$ c #8B8883", "9$ c #8C8783", "0$ c #8D8884", "a$ c #8D8582", "b$ c #908685", "c$ c #938582", "d$ c #938B80", "e$ c #948C81", "f$ c #958D82", "g$ c #968E83", "h$ c #978F84", "i$ c #9D8E8B", "j$ c #A49D95", "k$ c #8C8984", "l$ c #8E8985", "m$ c #918786", "n$ c #8E8B82", "o$ c #928980", "p$ c #928A7F", "q$ c #A69F97", "r$ c #A79A94", "s$ c #9A978E", "t$ c #9B988F", "u$ c #A69D94", "v$ c #A89F96", "w$ c #A79E95", "x$ c #8A8683", "y$ c #898582", "z$ c #888481", "A$ c #898481", "B$ c #8A8582", "C$ c #8B8683", "D$ c #8C8482", "E$ c #908687", "F$ c #9B8D8A", "G$ c #9A8F8B", "H$ c #9E908D", "I$ c #AAA19A", "J$ c #A39F96", "K$ c #A29E95", "L$ c #A59E94", "M$ c #A19996", "N$ c #A79891", "O$ c #A69790", "P$ c #8C8784", "Q$ c #9C8E8B", "R$ c #9C918D", "S$ c #A19D94", "T$ c #A09895", "U$ c #8D8885", "V$ c #8B8786", "W$ c #8A8685", "X$ c #8B8585", "Y$ c #8C8686", "Z$ c #8D8787", "`$ c #8C8384", " % c #918587", ".% c #9F918E", "+% c #A69B95", "@% c #A79C96", "#% c #9F9794", "$% c #A09896", "%% c #9E9996", "&% c #9D9894", "*% c #A4958E", "=% c #8E8986", "-% c #8C8887", ";% c #8E8888", ">% c #97908A", ",% c #98918B", "'% c #A0928F", ")% c #A3948F", "!% c #9E9693", "~% c #9D9895", "{% c #8D8381", "]% c #8E8482", "^% c #99928C", "/% c #9E9A8E", "(% c #9D998D", "_% c #A09C90", ":% c #9C988C", "<% c #9F9B8F", "[% c #A19D91", "}% c #A89692", "|% c #9F9795", "1% c #9D9998", "2% c #A39C96", "3% c #A89994", "4% c #9F9A97", "5% c #A09B98", "6% c #9E9A99", "7% c #9E9A97", "8% c #898584", "9% c #8A8484", "0% c #998E8A", "a% c #988E8C", "b% c #9A8C89", "c% c #9B978B", "d% c #A99793", "e% c #AA9894", "f% c #A19C99", "g% c #A19B9B", "h% c #A09C9B", "i% c #9F9B9A", "j% c #9F9B98", "k% c #8E8683", "l% c #888785", "m% c #878684", "n% c #868583", "o% c #888483", "p% c #8D8485", "q% c #8E8586", "r% c #A19D92", "s% c #A89D97", "t% c #A29A97", "u% c #A29D99", "v% c #A29D9A", "w% c #A19D9A", "x% c #A09C99", "y% c #A19C98", "z% c #A79990", "A% c #A9A097", "B% c #88857C", "C% c #89857C", "D% c #858480", "E% c #878883", "F% c #8A8B86", "G% c #898884", "H% c #888783", "I% c #878682", "J% c #8F8785", "K% c #8D8A83", "L% c #908D84", "M% c #928D87", "N% c #918E87", "O% c #998A87", "P% c #978986", "Q% c #9C958F", "R% c #9A958F", "S% c #99948E", "T% c #98938D", "U% c #9A938D", "V% c #989286", "W% c #989187", "X% c #999288", "Y% c #AEA59E", "Z% c #A9A099", "`% c #A99A93", " & c #A89992", ".& c #A69990", "+& c #A7998E", "@& c #A59796", "#& c #A99B98", "$& c #A69B97", "%& c #A69895", "&& c #8F817E", "*& c #90827F", "=& c #868883", "-& c #888984", ";& c #868782", ">& c #8E8E84", ",& c #938E88", "'& c #96918B", ")& c #95928B", "!& c #96938C", "~& c #97928C", "{& c #969286", "]& c #979387", "^& c #9E938F", "/& c #A19392", "(& c #A59D92", "_& c #9F9C95", ":& c #A49696", "<& c #A59797", "[& c #A79998", "}& c #A69897", "|& c #878380", "1& c #8B8A86", "2& c #8E8684", "3& c #998B88", "4& c #9A8B88", "5& c #988A87", "6& c #948F89", "7& c #939089", "8& c #94918A", "9& c #9B948E", "0& c #A09291", "a& c #9F9190", "b& c #A89B95", "c& c #9D9A93", "d& c #9E9B94", "e& c #A69A8E", "f& c #88837F", "g& c #8D8986", "h& c #8B8784", "i& c #8D8583", "j& c #928F88", "k& c #989488", "l& c #9F9892", "m& c #9B9891", "n& c #A29E93", "o& c #8A8581", "p& c #8C8481", "q& c #99968F", "r& c #98958E", "s& c #9B948A", "t& c #A89F98", "u& c #9B9690", "v& c #8A827F", "w& c #908885", "x& c #918382", "y& c #928483", "z& c #938584", "A& c #939087", "B& c #949188", "C& c #9C9791", "D& c #9A9790", "E& c #A39D91", "F& c #908281", "G& c #928282", "H& c #938383", "I& c #948484", "J& c #948582", "K& c #948985", "L& c #919187", "M& c #959289", "N& c #929288", "O& c #909086", "P& c #928F86", "Q& c #999589", "R& c #98958C", "S& c #9D9892", "T& c #A29C8E", "U& c #A39D8F", "V& c #8B817F", "W& c #958383", "X& c #968484", "Y& c #939389", "Z& c #97948D", "`& c #9C8E8D", " * c #A59E98", ".* c #A49D97", "+* c #A29C8C", "@* c #A39D8D", "#* c #A39E8B", "$* c #9E9888", "%* c #928380", "&* c #93817F", "** c #948280", "=* c #958381", "-* c #978382", ";* c #978583", ">* c #94948A", ",* c #9E908F", "'* c #9D8F8E", ")* c #97948B", "!* c #95958B", "~* c #97978D", "{* c #98988E", "]* c #96968C", "^* c #9C9793", "/* c #A4A097", "(* c #A5A198", "_* c #A99C94", ":* c #AB9E96", "<* c #A89E95", "[* c #A69E93", "}* c #9D9588", "|* c #A6A092", "1* c #948E80", "2* c #A6A090", "3* c #96917E", "4* c #A29D89", "5* c #ABA692", "6* c #8F8A76", "7* c #908B78", "8* c #928D7A", "9* c #9A9488", "0* c #9C9688", "a* c #A49E90", "b* c #A9A393", "c* c #9E9986", "d* c #AEA794", "e* c #A29D87", "f* c #88826C", "g* c #817C66", "h* c #8A846E", "i* c #97927E", "j* c #9F9888", "k* c #9C968A", "l* c #A59B99", "m* c #A69D98", "n* c #89867D", "o* c #92837E", "p* c #94827E", "q* c #95837F", "r* c #968480", "s* c #958681", "t* c #998A85", "u* c #988984", "v* c #968782", "w* c #96938A", "x* c #99968D", "y* c #9B9589", "z* c #A3A091", "A* c #A29F90", "B* c #A8A191", "C* c #AEA797", "D* c #A49B8A", "E* c #968F7C", "F* c #989079", "G* c #938D73", "H* c #847D63", "I* c #797359", "J* c #9B937C", "K* c #A39D87", "L* c #908776", "M* c #827A6D", "N* c #9D938A", "O* c #ADA49F", "P* c #A69B99", "Q* c #86837A", "R* c #87847B", "S* c #8B827B", "T* c #93847F", "U* c #978581", "V* c #978883", "W* c #9E9391", "X* c #A19E8F", "Y* c #A4A192", "Z* c #9B9587", "`* c #978B7B", " = c #A39886", ".= c #7F7460", "+= c #42381F", "@= c #655B40", "#= c #9B9176", "$= c #847A5F", "%= c #AEA48B", "&= c #A49985", "*= c #716555", "== c #615549", "-= c #9A8D85", ";= c #BAACA9", ">= c #A89A99", ",= c #948580", "'= c #9A908E", ")= c #A09695", "!= c #9F9594", "~= c #A09494", "{= c #A29494", "]= c #9D9290", "^= c #A49E92", "/= c #A59F93", "(= c #A5A293", "_= c #A6A495", ":= c #A7A193", "<= c #A79B8D", "[= c #9D9080", "}= c #958877", "|= c #655943", "1= c #3E3218", "2= c #7C7155", "3= c #B7AC90", "4= c #9A8F73", "5= c #8D8167", "6= c #847862", "7= c #574A39", "8= c #524437", "9= c #94857E", "0= c #B9AAA7", "a= c #A9999A", "b= c #A19192", "c= c #998783", "d= c #A19796", "e= c #A99A95", "f= c #A6A394", "g= c #A7A596", "h= c #A8A292", "i= c #A89C8E", "j= c #9E8E7E", "k= c #5D4E3B", "l= c #4A3B26", "m= c #9E9076", "n= c #D6C8AB", "o= c #AFA184", "p= c #7E7053", "q= c #594B30", "r= c #594A33", "s= c #4B3B2B", "t= c #5C4C3F", "u= c #94837C", "v= c #B2A09E", "w= c #AF9C9E", "x= c #AE9B9D", "y= c #8D897E", "z= c #8C887D", "A= c #8B877C", "B= c #8D867C", "C= c #8F887E", "D= c #90897F", "E= c #918A80", "F= c #91887F", "G= c #90877E", "H= c #988682", "I= c #9B8985", "J= c #9A8B86", "K= c #99998F", "L= c #9A9A90", "M= c #A29696", "N= c #A2A091", "O= c #918F80", "P= c #807A6A", "Q= c #746659", "R= c #766555", "S= c #4B3A28", "T= c #695942", "U= c #D8C8AE", "V= c #E1D2B5", "W= c #87785B", "X= c #58492C", "Y= c #58482E", "Z= c #46361D", "`= c #433220", " - c #665448", ".- c #98857F", "+- c #B4A09F", "@- c #B5A0A5", "#- c #8C817D", "$- c #928B81", "%- c #938980", "&- c #9E9995", "*- c #9D9A95", "=- c #A99C96", "-- c #A4978E", ";- c #9A9285", ">- c #999383", ",- c #A5A291", "'- c #ADAA99", ")- c #9E9B8A", "!- c #747160", "~- c #4E4936", "{- c #403523", "]- c #645744", "^- c #998D77", "/- c #CFC3AB", "(- c #DED2B8", "_- c #B0A78A", ":- c #81765A", "<- c #796D53", "[- c #7B6F57", "}- c #483C26", "|- c #382B1A", "1- c #625447", "2- c #9C8B83", "3- c #BCAAA6", "4- c #B9A7A7", "5- c #A49292", "6- c #8A817A", "7- c #8E877D", "8- c #958683", "9- c #9C9992", "0- c #9A9A92", "a- c #A79996", "b- c #A79591", "c- c #AB9995", "d- c #AC9D96", "e- c #AA9C93", "f- c #A39789", "g- c #A19585", "h- c #A29785", "i- c #AEA693", "j- c #9A927D", "k- c #A8A08D", "l- c #B7B09D", "m- c #B3AC99", "n- c #837E6A", "o- c #3F3A27", "p- c #302B15", "q- c #484326", "r- c #959072", "s- c #F8F4D7", "t- c #FCF8DB", "u- c #B2B195", "v- c #A0A086", "w- c #ACAA93", "x- c #8F8D78", "y- c #726F5C", "z- c #332D1D", "A- c #272113", "B- c #696154", "C- c #A79D93", "D- c #BAADA5", "E- c #B1A49C", "F- c #A5A196", "G- c #A39F94", "H- c #8A8178", "I- c #A59D90", "J- c #A49A98", "K- c #A7968F", "L- c #A8978F", "M- c #A79A8A", "N- c #A79C8A", "O- c #A99E8A", "P- c #A39882", "Q- c #B3A892", "R- c #B0A891", "S- c #968E77", "T- c #817B65", "U- c #4C4630", "V- c #211A07", "W- c #48432D", "X- c #BCB99A", "Y- c #F0F0CE", "Z- c #FFFFE2", "`- c #CDD0B1", " ; c #9B9D85", ".; c #91957E", "+; c #858875", "@; c #656857", "#; c #393A2C", "$; c #141507", "%; c #2C281C", "&; c #7C786C", "*; c #B4ACA1", "=; c #B6AEA3", "-; c #AC9F96", ";; c #A2958C", ">; c #9F9D91", ",; c #A3A195", "'; c #A19F93", "); c #A09E92", "!; c #AA9B94", "~; c #8B8279", "{; c #A69E91", "]; c #A5978E", "^; c #A6988D", "/; c #A89B8B", "(; c #A99E8C", "_; c #A49C85", ":; c #BDB59E", "<; c #A49C87", "[; c #69614C", "}; c #4F4835", "|; c #231C09", "1; c #171000", "2; c #6F6A54", "3; c #CFCBAE", "4; c #E4E3C4", "5; c #C9CAAB", "6; c #979A7D", "7; c #83856F", "8; c #6A6D58", "9; c #434635", "0; c #2D2F21", "a; c #101103", "b; c #090900", "c; c #403C31", "d; c #BCB3AA", "e; c #AEA69B", "f; c #A2A094", "g; c #9E9C90", "h; c #8C8280", "i; c #A99F95", "j; c #A8A093", "k; c #A5988F", "l; c #A0918A", "m; c #A89790", "n; c #A99B92", "o; c #A5978A", "p; c #A69A8A", "q; c #A89D8B", "r; c #A79C88", "s; c #B7AF98", "t; c #7C745F", "u; c #4B452F", "v; c #37301D", "w; c #332C1A", "x; c #8A8571", "y; c #B8B79B", "z; c #ACAB8D", "A; c #9E9E84", "B; c #93957D", "C; c #777964", "D; c #434633", "E; c #222416", "F; c #242619", "G; c #0F0F03", "H; c #1A1A10", "I; c #5B574E", "J; c #B8AFA8", "K; c #9F928A", "L; c #9D9B8F", "M; c #8C837A", "N; c #A89E94", "O; c #A79F94", "P; c #A1928B", "Q; c #AB9D94", "R; c #A5978C", "S; c #A29688", "T; c #A99D8D", "U; c #B0A593", "V; c #AFA792", "W; c #B6AE97", "X; c #726A53", "Y; c #544E38", "Z; c #403A24", "`; c #27200D", " > c #292410", ".> c #4D4835", "+> c #87826F", "@> c #BAB8A1", "#> c #A19F86", "$> c #A6A590", "%> c #949681", "&> c #484937", "*> c #161908", "=> c #1D1F12", "-> c #24261B", ";> c #16160E", ">> c #2F2F27", ",> c #736E68", "'> c #ADA8A2", ")> c #B3AAA5", "!> c #8D847B", "~> c #918E85", "{> c #A89A8F", "]> c #A09486", "^> c #A49888", "/> c #B3AB96", "(> c #8C846D", "_> c #49432B", ":> c #3F3923", "<> c #36301A", "[> c #1D1804", "}> c #35301D", "|> c #5C5646", "1> c #756F5F", "2> c #908E79", "3> c #96947F", "4> c #ABAA96", "5> c #7B7C6A", "6> c #1A1B0B", "7> c #060800", "8> c #222419", "9> c #15160E", "0> c #13120D", "a> c #403F3A", "b> c #898480", "c> c #B2ADA9", "d> c #B0A6A4", "e> c #A89A97", "f> c #948685", "g> c #8F8F85", "h> c #95908A", "i> c #9D9690", "j> c #A89B92", "k> c #A4988C", "l> c #A4988A", "m> c #B0A494", "n> c #B4AC99", "o> c #A29A85", "p> c #877F6A", "q> c #534D37", "r> c #39331D", "s> c #342D1A", "t> c #231E0A", "u> c #302B18", "v> c #635E4B", "w> c #726F5E", "x> c #6E6B5A", "y> c #696655", "z> c #898675", "A> c #949283", "B> c #5E5F51", "C> c #1D1D11", "D> c #181A0F", "E> c #292A22", "F> c #1F201A", "G> c #1C1B16", "H> c #595854", "I> c #A39E9B", "J> c #B7B2AE", "K> c #A89E9C", "L> c #AB9D9A", "M> c #A4A095", "N> c #A3978B", "O> c #AEA292", "P> c #BCB4A1", "Q> c #B6AE9B", "R> c #88806B", "S> c #2E2812", "T> c #2A2511", "U> c #130E00", "V> c #4F4A37", "W> c #9C9686", "X> c #908D7E", "Y> c #767364", "Z> c #6D6A5B", "`> c #817E6F", " , c #6A685B", "., c #36362A", "+, c #0F1008", "@, c #14150F", "#, c #262721", "$, c #302F2B", "%, c #757470", "&, c #B9B4B1", "*, c #AA9C99", "=, c #918383", "-, c #938787", ";, c #918987", ">, c #908886", ",, c #8D8D83", "', c #AAA096", "), c #A5998D", "!, c #B1A899", "~, c #B5AC9B", "{, c #B7AF9C", "], c #9A927F", "^, c #5C5640", "/, c #4A442E", "(, c #2C2610", "_, c #2D2812", ":, c #181300", "<, c #211C08", "[, c #666350", "}, c #A29F8E", "|, c #8C887C", "1, c #787468", "2, c #3D3B2E", "3, c #1B1B0F", "4, c #1C1C14", "5, c #191A14", "6, c #161711", "7, c #21221D", "8, c #4C4B49", "9, c #9A9997", "0, c #B8B3B0", "a, c #A6A19E", "b, c #A99F9D", "c, c #B0A39D", "d, c #928484", "e, c #A69C92", "f, c #A2968A", "g, c #ADA493", "h, c #9B9380", "i, c #89816E", "j, c #6A644E", "k, c #3C3620", "l, c #38321C", "m, c #35301A", "n, c #2C2711", "o, c #23200D", "p, c #595645", "q, c #B5B2A3", "r, c #DDD9CD", "s, c #C1BDB1", "t, c #918D81", "u, c #6D695D", "v, c #2E2C20", "w, c #101006", "x, c #1A1B15", "y, c #1A1B16", "z, c #32332E", "A, c #676664", "B, c #A6A5A1", "C, c #A69C9A", "D, c #AFA29C", "E, c #928688", "F, c #918788", "G, c #908788", "H, c #918889", "I, c #8F8989", "J, c #8F8C83", "K, c #A59B8F", "L, c #8D8572", "M, c #665F4C", "N, c #47412B", "O, c #27210B", "P, c #302C13", "Q, c #46412B", "R, c #312C16", "S, c #2B2914", "T, c #302D1A", "U, c #5C5948", "V, c #BEBCAD", "W, c #E9E7DA", "X, c #B9B7AB", "Y, c #817D71", "Z, c #625E52", "`, c #242216", " ' c #0A0A00", ".' c #1F1F17", "+' c #20211C", "@' c #4B4C47", "#' c #8C8B87", "$' c #B3B2AE", "%' c #B4AFAC", "&' c #A69F95", "*' c #928889", "=' c #938789", "-' c #8F8687", ";' c #8D8988", ">' c #9A928F", ",' c #9D9592", "'' c #AA9D97", ")' c #AAA192", "!' c #B0A796", "~' c #ABA390", "{' c #7B7461", "]' c #1F1B02", "^' c #2D2910", "/' c #1E1C07", "(' c #201D0A", "_' c #4B4837", ":' c #9D9B8C", "<' c #E8E6D9", "[' c #E0DED2", "}' c #696559", "|' c #585448", "1' c #252317", "2' c #22221A", "3' c #1B1C16", "4' c #2A2B26", "5' c #666762", "6' c #A5A4A0", "7' c #B6B5B0", "8' c #AEA9A5", "9' c #8B8A88", "0' c #9E9694", "a' c #AA9B96", "b' c #A79D91", "c' c #A9A292", "d' c #999280", "e' c #827B68", "f' c #544D3A", "g' c #3A341E", "h' c #29240E", "i' c #181400", "j' c #2B270E", "k' c #3C3A23", "l' c #302E19", "m' c #211E0B", "n' c #656452", "o' c #E2E0D1", "p' c #FBF9EC", "q' c #A9A99D", "r' c #6E6C60", "s' c #464236", "t' c #433F33", "u' c #28261A", "v' c #19190F", "w' c #23231B", "x' c #21221A", "y' c #3F403A", "z' c #80817B", "A' c #ADACA7", "B' c #AEADA8", "C' c #A6A19B", "D' c #A09488", "E' c #8E8A89", "F' c #8C8B89", "G' c #8E8A87", "H' c #AAA094", "I' c #817A67", "J' c #5C5542", "K' c #37311B", "L' c #2A250F", "M' c #241F09", "N' c #3F3B22", "O' c #626049", "P' c #514F3A", "Q' c #282713", "R' c #5B594A", "S' c #CCCABD", "T' c #BFBDB1", "U' c #58584E", "V' c #2F2F23", "W' c #252115", "X' c #2A261A", "Y' c #272519", "Z' c #202014", "`' c #212117", " ) c #31322A", ".) c #61625C", "+) c #979892", "@) c #AAA9A4", "#) c #A3A39B", "$) c #A69A8C", "%) c #908A8A", "&) c #A19997", "*) c #AA9F99", "=) c #AB9E98", "-) c #A99E98", ";) c #A99F93", ">) c #8D8674", ",) c #615A47", "') c #433C29", ")) c #302A14", "!) c #262209", "~) c #28260D", "{) c #57553C", "]) c #6D6B54", "^) c #5B5944", "/) c #302F1B", "() c #3B392A", "_) c #717264", ":) c #67675B", "<) c #323228", "[) c #232317", "}) c #1D190D", "|) c #1D1A0B", "1) c #29271A", "2) c #27271B", "3) c #222218", "4) c #47493E", "5) c #85867E", "6) c #A6A79F", "7) c #A6A69E", "8) c #898079", "9) c #92898A", "0) c #8F8B88", "a) c #ABA09A", "b) c #A79C98", "c) c #A69C90", "d) c #AAA393", "e) c #A59E8E", "f) c #605845", "g) c #3C341F", "h) c #2F2712", "i) c #2D2711", "j) c #211C06", "k) c #27220C", "l) c #5D5B44", "m) c #95937E", "n) c #807D6A", "o) c #585647", "p) c #343527", "q) c #27271D", "r) c #212318", "s) c #1A1A12", "t) c #232017", "u) c #1D190E", "v) c #2D2B1F", "w) c #2F2C23", "x) c #25251B", "y) c #585850", "z) c #9D9D95", "A) c #ADADA5", "B) c #A6A39A", "C) c #98968A", "D) c #9F978A", "E) c #A7A096", "F) c #928A88", "G) c #96918D", "H) c #908C89", "I) c #9A8F8D", "J) c #978C8A", "K) c #A19390", "L) c #9F9A94", "M) c #9D9B8E", "N) c #A19F92", "O) c #A79E99", "P) c #A99999", "Q) c #AC9A9A", "R) c #A99A97", "S) c #A39B86", "T) c #9F9A84", "U) c #A6A18B", "V) c #ABA690", "W) c #96917B", "X) c #79735D", "Y) c #493E28", "Z) c #41351F", "`) c #2D220C", " ! c #2D220E", ".! c #352A16", "+! c #2B2310", "@! c #453E2C", "#! c #857F6F", "$! c #D6D3C4", "%! c #B2AEA2", "&! c #58554C", "*! c #24251F", "=! c #20221D", "-! c #10100E", ";! c #1B1B19", ">! c #26221F", ",! c #221D1A", "'! c #322D2A", ")! c #342F2B", "!! c #36312D", "~! c #726D69", "{! c #B1AAA4", "]! c #B2ABA5", "^! c #A59C8D", "/! c #A79B8B", "(! c #8F8A87", "_! c #8F8C87", ":! c #998B8A", "~ c #B9AFAD", ",~ c #9A9B8D", "'~ c #9A988B", ")~ c #A79A91", "!~ c #A5998B", "~~ c #A59989", "{~ c #A69B87", "]~ c #9D957E", "^~ c #A59D86", "/~ c #B0A98F", "(~ c #A9A288", "_~ c #817962", ":~ c #4E462F", "<~ c #322A13", "[~ c #302813", "}~ c #463928", "|~ c #514433", "1~ c #4E4232", "2~ c #463D2C", "3~ c #403728", "4~ c #433B30", "5~ c #4E473D", "6~ c #3B372E", "7~ c #332E28", "8~ c #191512", "9~ c #100F0D", "0~ c #1E1C1D", "a~ c #1C1C1C", "b~ c #141416", "c~ c #1B1B1D", "d~ c #302C2D", "e~ c #363030", "f~ c #5A5552", "g~ c #99918F", "h~ c #BAB2AF", "i~ c #B1A8A3", "j~ c #A79B8F", "k~ c #968B89", "l~ c #9A988C", "m~ c #A19887", "n~ c #A19986", "o~ c #ACA18B", "p~ c #B2A791", "q~ c #A89D87", "r~ c #817660", "s~ c #4F4430", "t~ c #312612", "u~ c #2F2410", "v~ c #382D1B", "w~ c #3B301E", "x~ c #4D4131", "y~ c #615545", "z~ c #5E5244", "A~ c #473D31", "B~ c #3C3228", "C~ c #3E352C", "D~ c #403931", "E~ c #35302A", "F~ c #2C2723", "G~ c #1E1A17", "H~ c #191816", "I~ c #1D1B1C", "J~ c #19191B", "K~ c #18171C", "L~ c #222023", "M~ c #312B2B", "N~ c #453F3F", "O~ c #7A7572", "P~ c #AEA6A4", "Q~ c #8F8A86", "R~ c #978988", "S~ c #8E8B84", "T~ c #8F8C85", "U~ c #9C9A8E", "V~ c #A09987", "W~ c #BDB29C", "X~ c #A99E88", "Y~ c #544933", "Z~ c #372A17", "`~ c #332615", " { c #352818", ".{ c #443828", "+{ c #4C4032", "@{ c #605448", "#{ c #5D5347", "${ c #43392F", "%{ c #382F26", "&{ c #3E372F", "*{ c #3E3731", "={ c #2F2A26", "-{ c #292421", ";{ c #282423", ">{ c #2C2829", ",{ c #262427", "'{ c #1F1D20", "){ c #222025", "!{ c #2B292C", "~{ c #272324", "{{ c #342F2C", "]{ c #635E5B", "^{ c #9F9A96", "/{ c #B8B0AD", "({ c #ABA3A0", "_{ c #958E84", ":{ c #908D86", "<{ c #909088", "[{ c #8C8C84", "}{ c #8F8F87", "|{ c #8D8D85", "1{ c #A79F92", "2{ c #A39998", "3{ c #A29897", "4{ c #A59B9A", "5{ c #A19B8B", "6{ c #A19C89", "7{ c #A49D8A", "8{ c #ABA38E", "9{ c #AFA790", "0{ c #AA9F89", "a{ c #564A34", "b{ c #3E2F1C", "c{ c #3D2D1D", "d{ c #3E2E1F", "e{ c #413122", "f{ c #504438", "g{ c #493F33", "h{ c #5D5349", "i{ c #675D54", "j{ c #4E443B", "k{ c #3C332C", "l{ c #3A332B", "m{ c #302923", "n{ c #1D1814", "o{ c #1C1714", "p{ c #2C2827", "q{ c #3A3637", "r{ c #302B2F", "s{ c #232124", "t{ c #262429", "u{ c #2C2A2D", "v{ c #2E2A29", "w{ c #494441", "x{ c #B4AFAB", "y{ c #AEA6A3", "z{ c #908D88", "A{ c #908B87", "B{ c #948D83", "C{ c #928C80", "D{ c #919189", "E{ c #8E8E86", "F{ c #ABA29B", "G{ c #A69C9B", "H{ c #A79D9C", "I{ c #A59F91", "J{ c #9F9C89", "K{ c #A7A28C", "L{ c #B1A992", "M{ c #847963", "N{ c #584D37", "O{ c #3C301A", "P{ c #423522", "Q{ c #443425", "R{ c #493729", "S{ c #58483B", "T{ c #4F4239", "U{ c #60564D", "V{ c #7B7269", "W{ c #6C635C", "X{ c #584F48", "Y{ c #4C453F", "Z{ c #38302D", "`{ c #36312E", " ] c #2E2926", ".] c #373332", "+] c #3D393A", "@] c #2A2529", "#] c #1D181C", "$] c #252024", "%] c #2E2A2B", "&] c #403A3A", "*] c #625D59", "=] c #A39E9A", "-] c #958B8A", ";] c #978D8C", ">] c #928D8A", ",] c #938E8B", "'] c #918D8A", ")] c #8C857B", "!] c #918B7F", "~] c #928C7E", "{] c #908A7E", "]] c #938D81", "^] c #928E82", "/] c #908C80", "(] c #8F8B7F", "_] c #92928A", ":] c #A89F9A", "<] c #A8A095", "[] c #A89D99", "}] c #9F9A87", "|] c #9D9B86", "1] c #9F9D86", "2] c #ADA892", "3] c #B6B299", "4] c #ABA38C", "5] c #968F75", "6] c #483E25", "7] c #433721", "8] c #4A3A2A", "9] c #463627", "0] c #48362A", "a] c #55443A", "b] c #40362C", "c] c #655C53", "d] c #645B54", "e] c #403933", "f] c #443C39", "g] c #433E3B", "h] c #2C2626", "i] c #352F2F", "j] c #342E30", "k] c #252122", "l] c #211D1E", "m] c #2B2726", "n] c #443F3C", "o] c #7C7771", "p] c #A8A39D", "q] c #8B8577", "r] c #8E887A", "s] c #969082", "t] c #958F81", "u] c #959185", "v] c #949084", "w] c #938F83", "x] c #A39C8A", "y] c #A49F8B", "z] c #9E9C85", "A] c #9E9983", "B] c #A6A289", "C] c #B4B097", "D] c #AFA98F", "E] c #888167", "F] c #5E573D", "G] c #382E15", "H] c #3E331D", "I] c #625542", "J] c #655847", "K] c #504033", "L] c #5E4D43", "M] c #3C2E25", "N] c #4B4138", "O] c #756C63", "P] c #B9B0A9", "Q] c #BAB1AA", "R] c #6D665E", "S] c #413A32", "T] c #554E48", "U] c #6B6360", "V] c #413C38", "W] c #332E2B", "X] c #292323", "Y] c #2A2426", "Z] c #373131", "`] c #544F4B", " ^ c #827D77", ".^ c #A39E98", "+^ c #8D8A85", "@^ c #948C8A", "#^ c #888177", "$^ c #898375", "%^ c #8C8678", "&^ c #8D8777", "*^ c #928F80", "=^ c #A09D96", "-^ c #A29D97", ";^ c #A29B89", ">^ c #A19B85", ",^ c #A39F86", "'^ c #AAA48C", ")^ c #B0AA90", "!^ c #ABA58B", "~^ c #8D886B", "{^ c #5A5337", "]^ c #2E270B", "^^ c #342A11", "/^ c #3C311B", "(^ c #5D523E", "_^ c #6E6351", ":^ c #65574A", "<^ c #6B5D52", "[^ c #73655A", "}^ c #63564D", "|^ c #51483F", "1^ c #625B51", "2^ c #B2ABA1", "3^ c #5E574F", "4^ c #342D25", "5^ c #6A635D", "6^ c #3D3630", "7^ c #332B28", "8^ c #312926", "9^ c #372F2D", "0^ c #352D2B", "a^ c #2E2624", "b^ c #372E2F", "c^ c #47423F", "d^ c #69645E", "e^ c #88847B", "f^ c #958D8B", "g^ c #888276", "h^ c #989284", "i^ c #918B7B", "j^ c #938D7D", "k^ c #9C9784", "l^ c #9D9885", "m^ c #8D8A7B", "n^ c #8E8A7E", "o^ c #A19C96", "p^ c #A29B88", "q^ c #ADA68A", "r^ c #B9B298", "s^ c #AEA78B", "t^ c #898266", "u^ c #5C5539", "v^ c #3B3418", "w^ c #2C2509", "x^ c #51472E", "y^ c #5D523C", "z^ c #544935", "A^ c #736757", "B^ c #85786F", "C^ c #6A5D54", "D^ c #968C83", "E^ c #3F382E", "F^ c #635C52", "G^ c #7C756B", "H^ c #453E34", "I^ c #2F2820", "J^ c #49423A", "K^ c #463F37", "L^ c #322B25", "M^ c #2D2620", "N^ c #322A27", "O^ c #302825", "P^ c #403835", "Q^ c #574F4C", "R^ c #7A766D", "S^ c #918B7D", "T^ c #989282", "U^ c #958F7F", "V^ c #938E7B", "W^ c #989380", "X^ c #A39491", "Y^ c #9E9B96", "Z^ c #9F9C97", "`^ c #9D9C97", " / c #ABA398", "./ c #A9A194", "+/ c #A49D8B", "@/ c #A59D8A", "#/ c #AFA58C", "$/ c #B2A98C", "%/ c #ADA388", "&/ c #92896C", "*/ c #635A3D", "=/ c #3B3215", "-/ c #352C0F", ";/ c #42381D", ">/ c #564F35", ",/ c #5E563F", "'/ c #4F4732", ")/ c #655C4B", "!/ c #8B8175", "~/ c #685E54", "{/ c #534940", "]/ c #878076", "^/ c #363226", "// c #343024", "(/ c #514D41", "_/ c #383428", ":/ c #363227", "( c #BBB4AC", ",( c #D0CCC1", "'( c #858175", ")( c #464334", "!( c #2A2718", "~( c #302D1E", "{( c #292617", "]( c #2B2819", "^( c #383226", "/( c #322C20", "(( c #292317", "_( c #2C261A", ":( c #3C332A", "<( c #4C4439", "[( c #645B52", "}( c #766F65", "|( c #878378", "1( c #949085", "2( c #AC9F97", "3( c #948F8B", "4( c #938E8A", "5( c #7C7666", "6( c #393421", "7( c #46412D", "8( c #5A5541", "9( c #605B48", "0( c #726F60", "a( c #767467", "b( c #7E7A6E", "c( c #868276", "d( c #9C9794", "e( c #9E9689", "f( c #A59E8C", "g( c #A7A08E", "h( c #AAA390", "i( c #ACA592", "j( c #AFA794", "k( c #837359", "l( c #5E4D2F", "m( c #3C2D0E", "n( c #352607", "o( c #35270A", "p( c #3B3014", "q( c #5B5034", "r( c #7E7459", "s( c #716952", "t( c #524C36", "u( c #37301E", "v( c #3D3727", "w( c #534F43", "x( c #615D52", "y( c #7A766B", "z( c #827E73", "A( c #4D493D", "B( c #2D291D", "C( c #2F2B1F", "D( c #312D21", "E( c #2B2519", "F( c #2E271D", "G( c #2F291D", "H( c #393126", "I( c #453D32", "J( c #584E44", "K( c #6F655B", "L( c #81776D", "M( c #8B8579", "N( c #999387", "O( c #AAA198", "P( c #948E82", "Q( c #ACA698", "R( c #878171", "S( c #6F6959", "T( c #504B38", "U( c #2C2714", "V( c #3C3724", "W( c #5E5B4A", "X( c #605E51", "Y( c #69695D", "Z( c #6C6A5E", "`( c #68665A", " _ c #7C7970", "._ c #968E8B", "+_ c #998F8E", "@_ c #A3918F", "#_ c #A49290", "$_ c #A69492", "%_ c #A79593", "&_ c #A29A98", "*_ c #A09A9A", "=_ c #A2999A", "-_ c #A19899", ";_ c #A09798", ">_ c #A09697", ",_ c #A7A098", "'_ c #AAA097", ")_ c #ACA39C", "!_ c #A9A196", "~_ c #A39B99", "{_ c #A79F9D", "]_ c #AAA29F", "^_ c #A9A29A", "/_ c #A19A88", "(_ c #9C9481", "__ c #ADA592", ":_ c #B0A893", "<_ c #AEA691", "[_ c #B5AD98", "}_ c #9D927E", "|_ c #766A52", "1_ c #554428", "2_ c #5B4627", "3_ c #513E20", "4_ c #4A361B", "5_ c #4C3A22", "6_ c #504029", "7_ c #5F503D", "8_ c #796C5B", "9_ c #635749", "0_ c #554D40", "a_ c #534B3E", "b_ c #575145", "c_ c #4F4B40", "d_ c #464438", "e_ c #565448", "f_ c #716E65", "g_ c #67645B", "h_ c #4F4C45", "i_ c #35322B", "j_ c #2B2821", "k_ c #2C2920", "l_ c #2B281F", "m_ c #29261D", "n_ c #2A261B", "o_ c #322B21", "p_ c #2E251C", "q_ c #362C23", "r_ c #53463D", "s_ c #675950", "t_ c #74665D", "u_ c #83756C", "v_ c #887E74", "w_ c #8E8C80", "x_ c #8F8D81", "y_ c #979181", "z_ c #6E6858", "A_ c #433D2D", "B_ c #3A3522", "C_ c #484330", "D_ c #55503D", "E_ c #5A5746", "F_ c #5F5D50", "G_ c #6D6D61", "H_ c #57574B", "I_ c #4B4B41", "J_ c #5D5D53", "K_ c #7D7A71", "L_ c #9B9390", "M_ c #978F8C", "N_ c #9A8E8E", "O_ c #988E8D", "P_ c #A59391", "Q_ c #A09B97", "R_ c #9F9999", "S_ c #A29899", "T_ c #A19798", "U_ c #A19597", "V_ c #A19595", "W_ c #A69E9C", "X_ c #A59C9D", "Y_ c #A39B98", "Z_ c #A7A08D", "`_ c #A79F8A", " : c #A9A18A", ".: c #AAA28B", "+: c #ADA28C", "@: c #9C917B", "#: c #746953", "$: c #504228", "%: c #3E2B0D", "&: c #695435", "*: c #786348", "=: c #6B573E", "-: c #695741", ";: c #6C5B49", ">: c #635344", ",: c #584A3D", "': c #5D5047", "): c #4F463D", "!: c #555146", "~: c #504D44", "{: c #413F33", "]: c #3D3D31", "^: c #48483E", "/: c #5B5851", "(: c #46433E", "_: c #302D28", ":: c #2A2722", "<: c #2C2922", "[: c #2D2A23", "}: c #2C281F", "|: c #362D26", "1: c #352B22", "2: c #3F352C", "3: c #5D4F46", "4: c #6E6057", "5: c #7B6A62", "6: c #897870", "7: c #897F73", "8: c #8E8679", "9: c #958D80", "0: c #9B9386", "a: c #938D7F", "b: c #A8A294", "c: c #746E5E", "d: c #383222", "e: c #3E3828", "f: c #4D4737", "g: c #4C4734", "h: c #555241", "i: c #5C5A4B", "j: c #747567", "k: c #828276", "l: c #3E3E32", "m: c #333327", "n: c #56534A", "o: c #7F7C73", "p: c #A49F99", "q: c #998D8D", "r: c #9D9996", "s: c #A59C8B", "t: c #A59D88", "u: c #ABA08A", "v: c #ABA188", "w: c #AEA28A", "x: c #9A8E76", "y: c #756951", "z: c #51452F", "A: c #40311A", "B: c #756043", "C: c #836D55", "D: c #725E46", "E: c #6E5C48", "F: c #736252", "G: c #6E5E51", "H: c #66584D", "I: c #62554D", "J: c #4C433C", "K: c #433C34", "L: c #4B473E", "M: c #4C4942", "N: c #3C3C32", "O: c #2F2F25", "P: c #2E2E24", "Q: c #49463F", "R: c #393631", "S: c #292621", "T: c #2E2B24", "U: c #2E2A21", "V: c #2C251D", "W: c #382F28", "X: c #4C4239", "Y: c #685A51", "Z: c #776960", "`: c #806F67", " < c #8B7D74", ".< c #978F82", "+< c #9C9487", "@< c #979183", "#< c #ADA799", "$< c #868070", "%< c #403A2A", "&< c #2D2717", "*< c #4A4532", "=< c #514E3D", "-< c #4F4D3E", ";< c #68695B", ">< c #87877B", ",< c #858579", "'< c #5A5A4E", ")< c #313125", "!< c #343128", "~< c #4E4B42", "{< c #76716B", "]< c #A39A89", "^< c #A19984", "/< c #A29781", "(< c #A99F86", "_< c #B1A58D", ":< c #AFA38B", "<< c #786952", "[< c #584C34", "}< c #52432E", "|< c #574831", "1< c #6A563D", "2< c #725E45", "3< c #6E5A42", "4< c #66543E", "5< c #675443", "6< c #675547", "7< c #726459", "8< c #8C7F76", "9< c #6F645E", "0< c #4F4641", "a< c #37302A", "b< c #37342D", "c< c #413E37", "d< c #3D3D35", "e< c #35352D", "f< c #32322A", "g< c #2E2B26", "h< c #26231E", "i< c #282520", "j< c #2D2822", "k< c #2D2920", "l< c #2A211A", "m< c #3B322B", "n< c #473D34", "o< c #584B43", "p< c #71635A", "q< c #7C6E65", "r< c #83726A", "s< c #8D7F76", "t< c #8E8478", "u< c #928A7D", "v< c #908E82", "w< c #9A9486", "x< c #5A5446", "y< c #1A1404", "z< c #241E0E", "A< c #4A4434", "B< c #4D4A39", "C< c #4A4839", "D< c #525345", "E< c #6C6D5F", "F< c #808173", "G< c #3F3F33", "H< c #232115", "I< c #211F13", "J< c #524E45", "K< c #726E65", "L< c #8B8380", "M< c #A79C86", "N< c #ACA088", "O< c #B6AA92", "P< c #B4A68C", "Q< c #9B8D73", "R< c #716349", "S< c #56462F", "T< c #55462F", "U< c #604F3B", "V< c #64543D", "W< c #6D5B45", "X< c #6F5D47", "Y< c #65533F", "Z< c #604D3C", "`< c #6B5B4E", " [ c #75675E", ".[ c #8C7F79", "+[ c #766B67", "@[ c #534947", "#[ c #2C2924", "$[ c #37342F", "%[ c #3B3A35", "&[ c #383933", "*[ c #363731", "=[ c #2D2C27", "-[ c #262520", ";[ c #25221D", ">[ c #2B2620", ",[ c #2F261F", "'[ c #3F342E", ")[ c #50433B", "![ c #60534B", "~[ c #76685F", "{[ c #7E7067", "][ c #84736B", "^[ c #8E8077", "/[ c #918F83", "([ c #787264", "_[ c #181202", ":[ c #474433", "<[ c #5F5D4E", "[[ c #515244", "}[ c #57584A", "|[ c #4E4E42", "1[ c #312F23", "2[ c #322E25", "3[ c #504C43", "4[ c #766F69", "5[ c #A7A09A", "6[ c #A09B95", "7[ c #A79A87", "8[ c #B0A48C", "9[ c #B8AC92", "0[ c #BBAD93", "a[ c #A19379", "b[ c #73634A", "c[ c #4C3C23", "d[ c #4A3A23", "e[ c #5D4D36", "f[ c #61503C", "g[ c #54432F", "h[ c #6B5945", "i[ c #786753", "j[ c #695846", "k[ c #544333", "l[ c #635346", "m[ c #7E716B", "n[ c #746965", "o[ c #695F5D", "p[ c #4E4644", "q[ c #2D2926", "r[ c #32312C", "s[ c #2E2F29", "t[ c #2C2D27", "u[ c #272621", "v[ c #23221D", "w[ c #2C2721", "x[ c #2D241D", "y[ c #312620", "z[ c #493C36", "A[ c #675851", "B[ c #796B62", "C[ c #7F7168", "D[ c #85746C", "E[ c #908279", "F[ c #93897F", "G[ c #8D8779", "H[ c #4F493B", "I[ c #221C0E", "J[ c #2A2414", "K[ c #413E2D", "L[ c #656354", "M[ c #575848", "N[ c #565749", "O[ c #626355", "P[ c #616254", "Q[ c #4D4E40", "R[ c #3D3B2F", "S[ c #39372B", "T[ c #2A261D", "U[ c #3F3B32", "V[ c #564F47", "W[ c #746D65", "X[ c #ACA39A", "Y[ c #A99D91", "Z[ c #A69989", "`[ c #A89B88", " } c #ACA08A", ".} c #B1A28B", "+} c #B0A288", "@} c #AEA085", "#} c #97876D", "$} c #77674D", "%} c #55432B", "&} c #48361E", "*} c #54422C", "=} c #5E4C36", "-} c #584632", ";} c #4B3925", ">} c #645341", ",} c #6E5E4E", "'} c #615142", ")} c #55473A", "!} c #897C74", "~} c #7B706C", "{} c #635957", "]} c #564C4B", "^} c #473E3F", "/} c #2F2B28", "(} c #2A2925", "_} c #282723", ":} c #252621", "<} c #262722", "[} c #21201B", "}} c #2B2823", "|} c #30251F", "1} c #372A24", "2} c #3E312B", "3} c #554641", "4} c #63544D", "5} c #6E5F58", "6} c #81736A", "7} c #86786F", "8} c #95887F", "9} c #958B81", "0} c #777163", "a} c #322C1E", "b} c #171103", "c} c #3C3928", "d} c #4D4B3C", "e} c #4E4F3F", "f} c #5C5D4F", "g} c #505143", "h} c #3A3B2D", "i} c #323024", "j} c #353327", "k} c #302C23", "l} c #3C352D", "m} c #4A433B", "n} c #7B746E", "o} c #968E8C", "p} c #9B9190", "q} c #ABA299", "r} c #AC9F99", "s} c #ACA092", "t} c #A99C8B", "u} c #A99C89", "v} c #B2A690", "w} c #BDAE97", "x} c #B9AB91", "y} c #A7997E", "z} c #96886D", "A} c #66563C", "B} c #524228", "C} c #4B3921", "D} c #584630", "E} c #604E38", "F} c #574531", "G} c #533E2B", "H} c #53402F", "I} c #504030", "J} c #4E4131", "K} c #544639", "L} c #716559", "M} c #514947", "N} c #494041", "O} c #363231", "P} c #2C2B29", "Q} c #252420", "R} c #22211D", "S} c #2B2C27", "T} c #201F1A", "U} c #2F2822", "V} c #2E2520", "W} c #342721", "X} c #3B2C27", "Y} c #483934", "Z} c #5F4D49", "`} c #6C5B54", " | c #75645D", ".| c #817068", "+| c #8A7C73", "@| c #9A8D84", "#| c #968C82", "$| c #A6A299", "%| c #929084", "&| c #939185", "*| c #9D978B", "=| c #8F897D", "-| c #534D3F", ";| c #231D0F", ">| c #252213", ",| c #393826", "'| c #585947", ")| c #6C6D5D", "!| c #6A6B5B", "~| c #585949", "{| c #3A3B2B", "]| c #2E2C1F", "^| c #39372A", "/| c #423E33", "(| c #413A30", "_| c #7F7870", ":| c #958C8D", "<| c #9A908F", "[| c #AAA297", "}| c #A9A09B", "|| c #9E9381", "1| c #AA9E88", "2| c #A79B85", "3| c #C5B69F", "4| c #AEA086", "5| c #86785D", "6| c #7D6F54", "7| c #4D3D23", "8| c #5B4931", "9| c #5C4A36", "0| c #554231", "a| c #574133", "b| c #503D2F", "c| c #514434", "d| c #4D4133", "e| c #4D4135", "f| c #5E544A", "g| c #827771", "h| c #655B59", "i| c #2E2828", "j| c #332F2E", "k| c #383433", "l| c #343331", "m| c #2C2B27", "n| c #23241F", "o| c #20211B", "p| c #22211C", "q| c #2E2925", "r| c #312823", "s| c #312622", "t| c #392A25", "u| c #44322E", "v| c #54423E", "w| c #63504C", "x| c #73605A", "y| c #7C6B64", "z| c #95877E", "A| c #978A81", "B| c #988E85", "C| c #6B6559", "D| c #1E1B0C", "E| c #262513", "F| c #4F503E", "G| c #767767", "H| c #7B7C6C", "I| c #616252", "J| c #383929", "K| c #262417", "L| c #2D2B1E", "M| c #3D392E", "N| c #474338", "O| c #423B31", "P| c #362F25", "Q| c #3F3830", "R| c #766F67", "S| c #968F85", "T| c #9F9687", "U| c #ADA28E", "V| c #BAAE98", "W| c #B4A890", "X| c #AB9F87", "Y| c #A0947A", "Z| c #7A6C52", "`| c #524429", " 1 c #4D3F24", ".1 c #4A3A21", "+1 c #5B4933", "@1 c #715F4B", "#1 c #453223", "$1 c #473328", "%1 c #544236", "&1 c #4B3F31", "*1 c #4D4636", "=1 c #51493E", "-1 c #574E45", ";1 c #685F58", ">1 c #6F6862", ",1 c #59514F", "'1 c #383330", ")1 c #2F2E2C", "!1 c #32312F", "~1 c #2F2E2A", "{1 c #282924", "]1 c #21221C", "^1 c #1D1E18", "/1 c #1C1D17", "(1 c #22231D", "_1 c #2D2824", ":1 c #2F2621", "<1 c #332522", "[1 c #3F2D29", "}1 c #4B3834", "|1 c #5F4C48", "11 c #6D5A56", "21 c #7A6761", "31 c #826F69", "41 c #87766E", "51 c #94867D", "61 c #A8A296", "71 c #8C867A", "81 c #4C463A", "91 c #161503", "01 c #414230", "a1 c #727361", "b1 c #7C7D6B", "c1 c #5A5B4B", "d1 c #2F3020", "e1 c #211F10", "f1 c #282617", "g1 c #494539", "h1 c #474036", "i1 c #383127", "j1 c #30291F", "k1 c #4E473F", "l1 c #79726A", "m1 c #958C8F", "n1 c #A29988", "o1 c #AEA38F", "p1 c #B5AA94", "q1 c #92886F", "r1 c #776D52", "s1 c #54482E", "t1 c #40341A", "u1 c #493D23", "v1 c #57492F", "w1 c #44351E", "x1 c #594836", "y1 c #776656", "z1 c #5E4C3E", "A1 c #372519", "B1 c #402D26", "C1 c #625147", "D1 c #574D41", "E1 c #554F3F", "F1 c #504A3E", "G1 c #4D463C", "H1 c #524B43", "I1 c #544F49", "J1 c #484340", "K1 c #35312E", "L1 c #2C2825", "M1 c #2B2A26", "N1 c #1E1F19", "O1 c #1D1E16", "P1 c #21241D", "Q1 c #23241E", "R1 c #282722", "S1 c #2F2420", "T1 c #352623", "U1 c #46332F", "V1 c #584340", "W1 c #695451", "X1 c #76615E", "Y1 c #826D68", "Z1 c #87746E", "`1 c #8B7A72", " 2 c #91837A", ".2 c #978980", "+2 c #A9A397", "@2 c #696357", "#2 c #2E2F1D", "$2 c #565745", "%2 c #5F604E", "&2 c #3F4030", "*2 c #212212", "=2 c #2B291A", "-2 c #403C30", ";2 c #4B443A", ">2 c #362F27", ",2 c #534C42", "'2 c #7F796D", ")2 c #969084", "!2 c #8A8379", "~2 c #A19E95", "{2 c #A19E97", "]2 c #ABA491", "^2 c #B2AA95", "/2 c #8D836A", "(2 c #6D664C", "_2 c #564C31", ":2 c #473D22", "<2 c #4C4227", "[2 c #5E523A", "}2 c #4D4129", "|2 c #40311C", "12 c #544434", "22 c #69594A", "32 c #503E34", "42 c #322119", "52 c #4B3832", "62 c #72635C", "72 c #6D6558", "82 c #5B5847", "92 c #4A4738", "02 c #4C483F", "a2 c #4B4841", "b2 c #3A3732", "c2 c #24231F", "d2 c #252620", "e2 c #24251D", "f2 c #22231B", "g2 c #23261F", "h2 c #292823", "i2 c #3A2B28", "j2 c #4F3C38", "k2 c #654D4B", "l2 c #6E5654", "m2 c #7B6361", "n2 c #876F6B", "o2 c #8B7671", "p2 c #907D76", "q2 c #96887F", "r2 c #9C8F86", "s2 c #9C9288", "t2 c #837D71", "u2 c #494637", "v2 c #21200E", "w2 c #1D1F0A", "x2 c #323321", "y2 c #3D3E2C", "z2 c #252614", "A2 c #171806", "B2 c #232112", "C2 c #292718", "D2 c #272317", "E2 c #403A2E", "F2 c #585147", "G2 c #342D23", "H2 c #3B342A", "I2 c #514B3F", "J2 c #797365", "K2 c #958C91", "L2 c #A29F98", "M2 c #A29F9A", "N2 c #9E9785", "O2 c #9D9683", "P2 c #A59F89", "Q2 c #AEA892", "R2 c #ADA791", "S2 c #A6A08A", "T2 c #B0AA92", "U2 c #8F8971", "V2 c #6A6349", "W2 c #4E482E", "X2 c #3D361C", "Y2 c #3C351B", "Z2 c #453E24", "`2 c #4D432A", " 3 c #433822", ".3 c #403320", "+3 c #4C3F2F", "@3 c #4E4035", "#3 c #392821", "$3 c #33241F", "%3 c #554341", "&3 c #71645E", "*3 c #6A6456", "=3 c #585745", "-3 c #474538", ";3 c #48453C", ">3 c #2D2D25", ",3 c #2A2B23", "'3 c #26281D", ")3 c #232518", "!3 c #202416", "~3 c #202318", "{3 c #24271E", "]3 c #2B2A25", "^3 c #322D29", "/3 c #382D29", "(3 c #453331", "_3 c #5A4542", ":3 c #745A59", "<3 c #806665", "[3 c #8B736F", "}3 c #8D7873", "|3 c #927F78", "13 c #9D9087", "23 c #9D9389", "33 c #6C695A", "43 c #363523", "53 c #191B06", "63 c #1F200E", "73 c #2B2C1A", "83 c #1A1B09", "93 c #161705", "03 c #242014", "a3 c #282418", "b3 c #3F392D", "c3 c #564F45", "d3 c #524B41", "e3 c #3D362C", "f3 c #373125", "g3 c #2E281A", "h3 c #565042", "i3 c #827C6E", "j3 c #999385", "k3 c #928D89", "l3 c #A29E9B", "m3 c #A19E99", "n3 c #A49C9A", "o3 c #A49C99", "p3 c #A69A9A", "q3 c #ADA09A", "r3 c #A59E8B", "s3 c #A49E88", "t3 c #B4AE94", "u3 c #9C967E", "v3 c #7A745C", "w3 c #575139", "x3 c #413B21", "y3 c #3A341A", "z3 c #363016", "A3 c #3D371D", "B3 c #3D351E", "C3 c #423723", "D3 c #443927", "E3 c #493D31", "F3 c #3F3128", "G3 c #2F201B", "H3 c #3B2C29", "I3 c #574747", "J3 c #5F5450", "K3 c #565246", "L3 c #504F3D", "M3 c #47483A", "N3 c #39392D", "O3 c #28281E", "P3 c #26261E", "Q3 c #2E2E26", "R3 c #32332D", "S3 c #35362E", "T3 c #36372F", "U3 c #313328", "V3 c #282A1D", "W3 c #202214", "X3 c #1C2011", "Y3 c #1D2113", "Z3 c #25281F", "`3 c #272822", " 4 c #2C2B26", ".4 c #38332F", "+4 c #453734", "@4 c #513F3D", "#4 c #634E4B", "$4 c #755B5A", "%4 c #7F6362", "&4 c #8A6E6D", "*4 c #917874", "=4 c #917C77", "-4 c #888478", ";4 c #595846", ">4 c #282A15", ",4 c #21230E", "'4 c #151604", ")4 c #1E1D0B", "!4 c #221F10", "~4 c #211B0F", "{4 c #2A2418", "]4 c #453F33", "^4 c #433C32", "/4 c #3B3529", "(4 c #2C2618", "_4 c #3B3525", ":4 c #585244", "<4 c #A19D9C", "[4 c #A49A9B", "}4 c #A3999A", "|4 c #A69A9C", "14 c #A79B9B", "24 c #A89E9D", "34 c #AAA09E", "44 c #AFA895", "54 c #AFA993", "64 c #ADA78D", "74 c #A9A487", "84 c #918B71", "94 c #756F55", "04 c #423E25", "a4 c #2A260D", "b4 c #2C280F", "c4 c #37331A", "d4 c #4D472F", "e4 c #423C26", "f4 c #463E2B", "g4 c #443B2A", "h4 c #493F35", "i4 c #473A32", "j4 c #40322F", "k4 c #4C3E3D", "l4 c #594A4D", "m4 c #534846", "n4 c #5B574B", "o4 c #4C4D3B", "p4 c #434434", "q4 c #3E3F31", "r4 c #1E2015", "s4 c #303129", "t4 c #373830", "u4 c #3C3D35", "v4 c #36382D", "w4 c #282C1E", "x4 c #1E2213", "y4 c #1D2112", "z4 c #202415", "A4 c #242A20", "B4 c #252821", "C4 c #3D3834", "D4 c #50423F", "E4 c #5C4A48", "F4 c #6B5351", "G4 c #765C5B", "H4 c #836766", "I4 c #8D7170", "J4 c #947B77", "K4 c #957D79", "L4 c #95827B", "M4 c #9A8C83", "N4 c #9F9289", "O4 c #AEA79F", "P4 c #787667", "Q4 c #3D3C2A", "R4 c #2A2917", "S4 c #282917", "T4 c #111202", "U4 c #141505", "V4 c #282919", "W4 c #1D1B0E", "X4 c #262216", "Y4 c #201C11", "Z4 c #211A10", "`4 c #3A3329", " 5 c #3E372D", ".5 c #3B3326", "+5 c #2F2919", "@5 c #332B1E", "#5 c #514B3D", "$5 c #95908D", "%5 c #998E8C", "&5 c #A59D9B", "*5 c #A89D9B", "=5 c #A59D9A", "-5 c #A89C9C", ";5 c #A99D9D", ">5 c #AAA19C", ",5 c #ACA39E", "'5 c #ABA29D", ")5 c #A8A199", "!5 c #A99E9A", "~5 c #A69D8E", "{5 c #A69E8B", "]5 c #ACA690", "^5 c #ACA48D", "/5 c #A39D83", "(5 c #9D967A", "_5 c #8B8669", ":5 c #665F43", "<5 c #3E391C", "[5 c #2F2911", "}5 c #39331B", "|5 c #433D25", "15 c #48412E", "25 c #3F3826", "35 c #4B4434", "45 c #4B423B", "55 c #554C47", "65 c #554B4A", "75 c #5A5051", "85 c #5C5155", "95 c #514849", "05 c #707064", "a5 c #4F5241", "b5 c #36382A", "c5 c #313326", "d5 c #2E3025", "e5 c #2A2B25", "f5 c #33342C", "g5 c #383A2F", "h5 c #2B2D20", "i5 c #212315", "j5 c #27291B", "k5 c #312D24", "l5 c #443B34", "m5 c #574A44", "n5 c #63524B", "o5 c #6D5853", "p5 c #755D59", "q5 c #7E6561", "r5 c #8A716D", "s5 c #927A76", "t5 c #948079", "u5 c #98857E", "v5 c #9F9188", "w5 c #91897E", "x5 c #99918E", "y5 c #605C51", "z5 c #2F2B20", "A5 c #1A180C", "B5 c #101004", "C5 c #17170B", "D5 c #1E1E14", "E5 c #1D1A11", "F5 c #1E1A11", "G5 c #29221A", "H5 c #352E26", "I5 c #3D342D", "J5 c #372D21", "K5 c #302919", "L5 c #342B1C", "M5 c #413A2A", "N5 c #564F3F", "O5 c #716A5A", "P5 c #948D7D", "Q5 c #B0A89B", "R5 c #978E91", "S5 c #938D91", "T5 c #8E888A", "U5 c #96918E", "V5 c #A7A195", "W5 c #A59B9C", "X5 c #A89E9F", "Y5 c #A79C9A", "Z5 c #A99B9A", "`5 c #AB9E95", " 6 c #A5A195", ".6 c #B5A8A0", "+6 c #A1948B", "@6 c #A9A091", "#6 c #B2A696", "$6 c #B3A896", "%6 c #A29B81", "&6 c #766C51", "*6 c #524B2E", "=6 c #483F22", "-6 c #3A3017", ";6 c #352913", ">6 c #342812", ",6 c #3A2F1B", "'6 c #3F3625", ")6 c #3D3626", "!6 c #3F372C", "~6 c #4E4741", "{6 c #56514E", "]6 c #625C5C", "^6 c #757172", "/6 c #767175", "(6 c #605E63", "_6 c #515153", ":6 c #6B7167", "<6 c #51594A", "[6 c #2A3024", "}6 c #181E14", "|6 c #252A23", "16 c #2C2F28", "26 c #232520", "36 c #22231E", "46 c #292824", "56 c #29261F", "66 c #2A271E", "76 c #2B291D", "86 c #2D291E", "96 c #2C2417", "06 c #372E1F", "a6 c #453C2D", "b6 c #534739", "c6 c #5E5043", "d6 c #685A4D", "e6 c #756558", "f6 c #7D6D60", "g6 c #857369", "h6 c #8C7A70", "i6 c #95847A", "j6 c #9C8B81", "k6 c #A19086", "l6 c #A3958A", "m6 c #A6988F", "n6 c #A29E92", "o6 c #978D81", "p6 c #968C80", "q6 c #958B7F", "r6 c #968E81", "s6 c #ACA59D", "t6 c #77736A", "u6 c #47433A", "v6 c #18180E", "w6 c #191B10", "x6 c #14150D", "y6 c #181810", "z6 c #191911", "A6 c #1F1C15", "B6 c #27221C", "C6 c #332A25", "D6 c #2F241E", "E6 c #3A3026", "F6 c #362F1F", "G6 c #433C2A", "H6 c #605947", "I6 c #7D7666", "J6 c #988F90", "K6 c #9A9194", "L6 c #958F91", "M6 c #948F8C", "N6 c #97928F", "O6 c #98908D", "P6 c #A6A094", "Q6 c #A69C9D", "R6 c #A99FA0", "S6 c #AB9F93", "T6 c #AEA296", "U6 c #A89C8C", "V6 c #AEA391", "W6 c #BCB19D", "X6 c #A49983", "Y6 c #8F856C", "Z6 c #756B52", "`6 c #51472C", " 7 c #40371A", ".7 c #3F351A", "+7 c #41321B", "@7 c #392A15", "#7 c #372815", "$7 c #42392A", "%7 c #3D3329", "&7 c #312A24", "*7 c #605B57", "=7 c #686463", "-7 c #535152", ";7 c #69676A", ">7 c #8C8B90", ",7 c #7B7C81", "'7 c #515556", ")7 c #3E453D", "!7 c #343E33", "~7 c #232A22", "{7 c #1D241C", "]7 c #2B302A", "^7 c #2A2F29", "/7 c #1F211E", "(7 c #1D1D1B", "_7 c #22211F", ":7 c #24201D", "<7 c #26231C", "[7 c #29241E", "}7 c #2F281E", "|7 c #31291E", "17 c #352919", "27 c #403322", "37 c #4D402F", "47 c #594C3B", "57 c #625545", "67 c #6C5F4F", "77 c #766959", "87 c #7E7161", "97 c #847669", "07 c #8B7D70", "a7 c #94867B", "b7 c #9B8D82", "c7 c #A09287", "d7 c #AA9F9B", "e7 c #AA9D94", "f7 c #A99C93", "g7 c #ACA499", "h7 c #A39F93", "i7 c #988B83", "j7 c #93897D", "k7 c #968D7E", "l7 c #B5AEA6", "m7 c #8F8B80", "n7 c #676358", "o7 c #3F3D31", "p7 c #1D1F14", "q7 c #1C1E13", "r7 c #0D1005", "s7 c #1D1D15", "t7 c #291F1D", "u7 c #261D18", "v7 c #31271E", "w7 c #392F25", "x7 c #42382E", "y7 c #43392D", "z7 c #3C3226", "A7 c #3E3526", "B7 c #514839", "C7 c #675E4F", "D7 c #867C70", "E7 c #9A9290", "F7 c #98938F", "G7 c #AAA09F", "H7 c #AEA294", "I7 c #ABA08E", "J7 c #B5AA98", "K7 c #ABA08C", "L7 c #ACA18D", "M7 c #867B65", "N7 c #62583F", "O7 c #332910", "P7 c #32280D", "Q7 c #3B3116", "R7 c #3B3118", "S7 c #443520", "T7 c #3B2B1B", "U7 c #372A19", "V7 c #3F3222", "W7 c #473B2D", "X7 c #443A2E", "Y7 c #3E342A", "Z7 c #65605C", "`7 c #64605D", " 8 c #403F3D", ".8 c #514F50", "+8 c #79797B", "@8 c #6E6E70", "#8 c #434544", "$8 c #1E231C", "%8 c #222A1F", "&8 c #1E251D", "*8 c #20271F", "=8 c #2C312B", "-8 c #272C26", ";8 c #1D1F1C", ">8 c #1B1A18", ",8 c #1D1C18", "'8 c #221E1B", ")8 c #26211B", "!8 c #332C22", "~8 c #362E21", "{8 c #403424", "]8 c #4A3D2C", "^8 c #564938", "/8 c #605342", "(8 c #685B4B", "_8 c #716454", ":8 c #7B6E5E", "<8 c #837666", "[8 c #87796C", "}8 c #8E8073", "|8 c #96887D", "18 c #9D8F84", "28 c #A19388", "38 c #A4968B", "48 c #AC9E9B", "58 c #988B82", "68 c #8F8579", "78 c #8E8576", "88 c #908778", "98 c #928978", "08 c #8F8675", "a8 c #8F8878", "b8 c #8E867B", "c8 c #ADA69C", "d8 c #807E72", "e8 c #515145", "f8 c #1D2015", "g8 c #12150A", "h8 c #0C0F06", "i8 c #11120A", "j8 c #171810", "k8 c #212119", "l8 c #29211E", "m8 c #1D120E", "n8 c #2A1F19", "o8 c #3B3128", "p8 c #453B31", "q8 c #443A30", "r8 c #40362A", "s8 c #433A2B", "t8 c #564C40", "u8 c #786E62", "v8 c #988E84", "w8 c #95908C", "x8 c #ADA49D", "y8 c #A29783", "z8 c #B7AC98", "A8 c #BEB39F", "B8 c #AA9F8B", "C8 c #7C715B", "D8 c #473C26", "E8 c #3D331A", "F8 c #342913", "G8 c #372D14", "H8 c #392E18", "I8 c #3A2D1D", "J8 c #392B1E", "K8 c #3F3325", "L8 c #44382C", "M8 c #41382F", "N8 c #423B33", "O8 c #5D5950", "P8 c #66615B", "Q8 c #55524D", "R8 c #3D3C38", "S8 c #42413F", "T8 c #484846", "U8 c #3F3F3F", "V8 c #343633", "W8 c #20251E", "X8 c #242C21", "Y8 c #1F261E", "Z8 c #292E28", "`8 c #282A25", " 9 c #1F1F1D", ".9 c #222220", "+9 c #1C1B19", "@9 c #211D1A", "#9 c #26211D", "$9 c #2A251F", "%9 c #393327", "&9 c #3D3528", "*9 c #4A3E2E", "=9 c #534635", "-9 c #5D503F", ";9 c #665948", ">9 c #6D6050", ",9 c #756858", "'9 c #7F7262", ")9 c #877A6A", "!9 c #918376", "~9 c #9A8C81", "{9 c #8A8170", "]9 c #877F6C", "^9 c #867E6B", "/9 c #7F7764", "(9 c #817966", "_9 c #837A69", ":9 c #857C6B", "<9 c #877E6F", "[9 c #8C8276", "}9 c #998F85", "|9 c #918F82", "19 c #636456", "29 c #2D2D21", "39 c #1A1C0F", "49 c #161C0E", "59 c #10160A", "69 c #0F1207", "79 c #10130A", "89 c #292420", "99 c #28201D", "09 c #281D1B", "a9 c #2E201F", "b9 c #352724", "c9 c #3F322C", "d9 c #463931", "e9 c #43362D", "f9 c #35291D", "g9 c #281C10", "h9 c #382C1E", "i9 c #55493D", "j9 c #776B5F", "k9 c #8C8278", "l9 c #ACA491", "m9 c #A8A187", "n9 c #B2AA93", "o9 c #BCB49D", "p9 c #A8A089", "q9 c #7F7760", "r9 c #4A422B", "s9 c #3C341D", "t9 c #403821", "u9 c #3A321D", "v9 c #3E3621", "w9 c #3A2E20", "x9 c #382C20", "y9 c #3A2E22", "z9 c #3F3229", "A9 c #42352C", "B9 c #42382F", "C9 c #494037", "D9 c #7F7B72", "E9 c #716C66", "F9 c #54514A", "G9 c #41403B", "H9 c #3E3D38", "I9 c #343730", "J9 c #282D26", "K9 c #2A3026", "L9 c #222720", "M9 c #2D2F2A", "N9 c #2A2C27", "O9 c #20201E", "P9 c #25211E", "Q9 c #2A2521", "R9 c #2E2721", "S9 c #322920", "T9 c #372F24", "U9 c #3D352A", "V9 c #524636", "W9 c #5A4D3C", "X9 c #645747", "Y9 c #6B5E4E", "Z9 c #796C5C", "`9 c #837568", " 0 c #908277", ".0 c #95877C", "+0 c #92897A", "@0 c #8D8475", "#0 c #89806F", "$0 c #857D6A", "%0 c #7F7762", "&0 c #78705B", "*0 c #736B54", "=0 c #6B634C", "-0 c #6D654E", ";0 c #716954", ">0 c #776C5A", ",0 c #7C7060", "'0 c #837767", ")0 c #8C8072", "!0 c #999687", "~0 c #9B998C", "{0 c #77786A", "]0 c #1E2214", "^0 c #1C2012", "/0 c #181E10", "(0 c #171D11", "_0 c #11170B", ":0 c #0D1007", "<0 c #362E2B", "[0 c #2E2222", "}0 c #2D1F1F", "|0 c #2B1D1C", "10 c #30221F", "20 c #493C34", "30 c #473A31", "40 c #3E3226", "50 c #392D1F", "60 c #3B2F21", "70 c #463A2C", "80 c #897D71", "90 c #AD9F96", "00 c #A79F88", "a0 c #A69F82", "b0 c #B2AB8F", "c0 c #BAB397", "d0 c #B5AE92", "e0 c #A49D83", "f0 c #777056", "g0 c #413922", "h0 c #362E17", "i0 c #39311C", "j0 c #3F3724", "k0 c #362E1B", "l0 c #342C19", "m0 c #3C3322", "n0 c #3D3425", "o0 c #382E24", "p0 c #372D24", "q0 c #3C2F27", "r0 c #41372E", "s0 c #453B32", "t0 c #494039", "u0 c #514A42", "v0 c #5A564D", "w0 c #6B675E", "x0 c #6A675E", "y0 c #4F4C43", "z0 c #313129", "A0 c #2C2D25", "B0 c #2D2E26", "C0 c #22251C", "D0 c #262C22", "E0 c #232821", "F0 c #2F312C", "G0 c #1E1D1B", "H0 c #201C19", "I0 c #28231F", "J0 c #2E271F", "K0 c #30271E", "L0 c #40382B", "M0 c #494031", "N0 c #584C3C", "O0 c #695C4C", "P0 c #6F6252", "Q0 c #7D7060", "R0 c #887A6D", "S0 c #908275", "T0 c #998B80", "U0 c #A6A297", "V0 c #887F6E", "W0 c #847C69", "X0 c #817964", "Y0 c #79715A", "Z0 c #6D634A", "`0 c #5A5037", " a c #5D533A", ".a c #625741", "+a c #675B45", "@a c #6D604D", "#a c #756855", "$a c #7F7261", "%a c #847868", "&a c #8C8676", "*a c #908D7C", "=a c #9C9A8B", "-a c #8C8D7D", ";a c #5B5C4C", ">a c #303425", ",a c #212516", "'a c #171F12", ")a c #141C0F", "!a c #0E140A", "~a c #0B0E05", "{a c #0F100A", "]a c #312728", "^a c #34282C", "/a c #322326", "(a c #2B1D1D", "_a c #2E201D", ":a c #3B2E28", "b c #53524D", ",b c #777370", "'b c #635A5D", ")b c #6C5F66", "!b c #665A5E", "~b c #4D4141", "{b c #382A29", "]b c #332620", "^b c #3C2F26", "/b c #42362A", "(b c #3C2E21", "_b c #403323", ":b c #3D3020", "c c #585755", ",c c #504A4E", "'c c #8A7F85", ")c c #A79CA0", "!c c #877D7E", "~c c #504543", "{c c #281D17", "]c c #261C13", "^c c #3A3024", "/c c #493D2D", "(c c #443726", "_c c #392C1B", ":c c #372717", "d c #776F5C", ",d c #7E7764", "'d c #8C8774", ")d c #3F4231", "!d c #2D3120", "~d c #232719", "{d c #1C1F16", "]d c #1A1D14", "^d c #0D1009", "/d c #11140D", "(d c #302F2D", "_d c #373135", ":d c #605A5E", "e c #62533E", ",e c #6B5E4B", "'e c #6F6450", ")e c #7A7360", "!e c #918C78", "~e c #84816E", "{e c #393C2B", "]e c #292B1E", "^e c #1F2018", "/e c #202119", "(e c #13140E", "_e c #0E0F09", ":e c #14130F", "f c #4D3C20", ",f c #513D22", "'f c #533F26", ")f c #57432B", "!f c #5A4A33", "~f c #63543F", "{f c #655845", "]f c #6E634F", "^f c #88836F", "/f c #6B6857", "(f c #474838", "_f c #38392B", ":f c #1F1F15", "g c #543E27", ",g c #543F2A", "'g c #5D4B35", ")g c #655440", "!g c #685C46", "~g c #756A56", "{g c #857E6B", "]g c #7D7767", "^g c #615E4F", "/g c #464437", "(g c #242118", "_g c #202018", ":g c #1B1813", "h c #867B69", ",h c #776B53", "'h c #6D6147", ")h c #635339", "!h c #594A2D", "~h c #554126", "{h c #533F24", "]h c #523C24", "^h c #523A22", "/h c #553D25", "(h c #503A23", "_h c #56412C", ":h c #63513D", "i c #68583E", ",i c #5E4E34", "'i c #584429", ")i c #543E26", "!i c #533B23", "~i c #563E26", "{i c #533A24", "]i c #4F3922", "^i c #5D4833", "/i c #614F3B", "(i c #5C4D3A", "_i c #706352", ":i c #5D5A4B", "j c #8A7E6E", ",j c #7F735D", "'j c #776851", ")j c #6B5B42", "!j c #605036", "~j c #5A462D", "{j c #564227", "]j c #553F27", "^j c #573F27", "/j c #4A341D", "(j c #564029", "_j c #5B4631", ":j c #513F29", "k c #ADA098", ",k c #92887C", "'k c #8F8375", ")k c #7B6C59", "!k c #75654E", "~k c #68583F", "{k c #5F4B32", "]k c #59452C", "^k c #564126", "/k c #523D22", "(k c #564229", "_k c #5F4B33", ":k c #68563E", "l c #2D2017", ",l c #2E2015", "'l c #473626", ")l c #554432", "!l c #574632", "~l c #5F4F38", "{l c #65553E", "]l c #6E5F48", "^l c #796A53", "/l c #7E715E", "(l c #877B6F", "_l c #8B8178", ":l c #978D84", "m c #5A5444", ",m c #2D2A19", "'m c #161407", ")m c #211D14", "!m c #302D26", "~m c #3B3833", "{m c #3D3C37", "]m c #44433E", "^m c #41423D", "/m c #363732", "(m c #2B2D28", "_m c #23241C", ":m c #1B1C14", "n c #866E64", ",n c #876C63", "'n c #937B71", ")n c #BDA69E", "!n c #8E7A71", "~n c #756359", "{n c #57493E", "]n c #211E0F", "^n c #1A160A", "/n c #221E15", "(n c #3F3C37", "_n c #44413C", ":n c #4A4944", "o c #7B6D64", ",o c #31271D", "'o c #181005", ")o c #1F190D", "!o c #312C28", "~o c #2B2622", "{o c #36332E", "]o c #423F3A", "^o c #494843", "/o c #444540", "(o c #2E2F2A", "_o c #343631", ":o c #33362F", "p c #3A3B36", ",p c #242520", "'p c #272823", ")p c #353732", "!p c #363932", "~p c #2A281B", "{p c #363020", "]p c #4A3D2A", "^p c #574835", "/p c #5E4934", "(p c #644F3A", "_p c #6D5845", ":p c #75604D", "

Q c #5E4A3F", ",Q c #5B4537", "'Q c #634A36", ")Q c #684C36", "!Q c #674B35", "~Q c #684E37", "{Q c #6F543F", "]Q c #745948", "^Q c #795F50", "/Q c #8A766B", "(Q c #A4928E", "_Q c #A99795", ":Q c #AD9B99", "R c #C5B7AE", ",R c #C5B6AF", "'R c #C7B8B3", ")R c #CCBDB8", "!R c #D1C3C0", "~R c #CFC4C2", "{R c #D1CDCE", "]R c #D2D2D4", "^R c #CFCFD1", "/R c #CDCED2", "(R c #CBD0D4", "_R c #C5CDD0", ":R c #C7D1D3", "S c #1C1618", ",S c #1F191D", "'S c #160C15", ")S c #180E19", "!S c #2C242F", "~S c #2C2431", "{S c #241C2B", "]S c #4D4455", "^S c #766F7F", "/S c #6D6678", "(S c #534C5E", "_S c #777382", ":S c #9692A1", "T c #B1BFBF", ",T c #ADB9B9", "'T c #B5BFBE", ")T c #AEB7B4", "!T c #909591", "~T c #8D8F8C", "{T c #908F8B", "]T c #887F7A", "^T c #877C78", "/T c #786B63", "(T c #6A5C51", "_T c #5E4E3E", ":T c #5F4E3C", "U c #D4CAC0", ",U c #CEC4BA", "'U c #C8BCB0", ")U c #C9B9AA", "!U c #BEAD9D", "~U c #C6B6A7", "{U c #BBAB9C", "]U c #C3B3A4", "^U c #D5C7BA", "/U c #D6C8BB", "(U c #CCC0B4", "_U c #BDB1A5", ":U c #B0A498", "V c #887B6A", ",V c #857661", "'V c #7E6E55", ")V c #78674B", "!V c #6E5A3F", "~V c #624D30", "{V c #5C4428", "]V c #573F23", "^V c #543E17", "/V c #543C18", "(V c #56391B", "_V c #56381E", ":V c #583823", "W c #CED3D6", ",W c #D4D9DC", "'W c #DCE4E6", ")W c #E1EBEC", "!W c #DEECEC", "~W c #DFEFEE", "{W c #CFE2E0", "]W c #BED2D1", "^W c #B7CDCB", "/W c #BCD2D0", "(W c #BFD8D5", "_W c #BED7D4", ":W c #BAD2D2", "X c #938C9E", ",X c #8C8899", "'X c #8B8899", ")X c #8F8E9C", "!X c #A5A7B4", "~X c #C3C7D2", "{X c #C4CBD3", "]X c #ADB7B9", "^X c #C0CACB", "/X c #B8C0C2", "(X c #AFB8B7", "_X c #BFC5C3", ":X c #C2C8C6", "Y c #725C44", ",Y c #7B6452", "'Y c #857264", ")Y c #8D7A73", "!Y c #917F7B", "~Y c #978787", "{Y c #AEA3A1", "]Y c #B0A2A1", "^Y c #AFA1A0", "/Y c #978B8B", "(Y c #88786B", "_Y c #6B5B44", ":Y c #604F35", "Z c #CEBDB5", ",Z c #D0C1BA", "'Z c #CFC1BE", ")Z c #CBC2C3", "!Z c #D0CED3", "~Z c #CECDD3", "{Z c #C8CAD6", "]Z c #C5C9D2", "^Z c #C4CCCF", "/Z c #C8D2D4", "(Z c #D3DDDF", "_Z c #E2ECEE", ":Z c #EDF7F9", "` c #9E9EA8", ",` c #9C9CA6", "'` c #A4A7B0", ")` c #B4B7BE", "!` c #BAC1C9", "~` c #B3BCC5", "{` c #BEC6C9", "]` c #C0C5C8", "^` c #BFC3C4", "/` c #BABBBD", "(` c #BBBDBA", "_` c #C2C2C0", ":` c #C9CAC5", "<` c #C9C8C3", "[` c #C5C5BD", "}` c #C9C9C1", "|` c #D3D1C5", "1` c #E2DDC9", "2` c #ECE6CE", "3` c #F8F0DB", "4` c #FFF7E2", "5` c #FEF3DF", "6` c #DDD2C0", "7` c #9D907F", "8` c #665646", "9` c #625042", "0` c #928072", "a` c #CAB6AB", "b` c #E1CDC2", "c` c #D9C3B8", "d` c #CEB7AF", "e` c #E3CCC4", "f` c #CCBEB3", "g` c #C4B6AB", "h` c #B0A297", "i` c #897C73", "j` c #8E8178", "k` c #978D83", "l` c #9D9797", "m` c #9C9696", "n` c #9B9796", "o` c #AD9C95", "p` c #AE9D96", "q` c #AFA19E", "r` c #B19D92", "s` c #B19B8E", "t` c #B59F91", "u` c #BAA496", "v` c #BCA796", "w` c #BEAB9C", "x` c #C1AE9F", "y` c #C7B6AC", "z` c #C8BAB1", "A` c #C9BEB8", "B` c #CCC2C0", "C` c #CFC6C7", "D` c #D1CBCD", "E` c #CCCACF", "F` c #C9C8CE", "G` c #C7CAD1", "H` c #C5C9D5", "I` c #C2C8D4", "J` c #C1CAD3", "K` c #CBD4D9", "L` c #D0DBDD", "M` c #DBE6E8", "N` c #E5F0F2", "O` c #E8F3F5", "P` c #E1ECEE", "Q` c #D5E0E2", "R` c #CBD6D8", "S` c #C4CFD1", "T` c #BFCACC", "U` c #BEC9CB", "V` c #C3CED0", "W` c #C5D0D2", "X` c #C2CDCF", "Y` c #BBC9CC", "Z` c #BECDD0", "`` c #C9D7DA", " . c #BDCBCE", ". . c #C0CBCF", "+ . c #C1CCD0", "@ . c #BCC5CA", "# . c #BAC1C7", "$ . c #B3BAC0", "% . c #B6BFC4", "& . c #ACBABB", "* . c #A9B9B8", "= . c #A7B5B5", "- . c #A2AEAC", "; . c #9CA7A3", "> . c #969F9A", ", . c #949993", "' . c #9E9E96", ") . c #959387", "! . c #8D877B", "~ . c #888171", "{ . c #706551", "] . c #614E2E", "^ . c #5D4926", "/ . c #5B4726", "( . c #5D4829", "_ . c #604B2E", ": . c #614C31", "< . c #665039", "[ . c #6C5744", "} . c #725F4E", "| . c #7D6B5D", "1 . c #87766C", "2 . c #8E7F78", "3 . c #90837D", "4 . c #8D7E77", "5 . c #837363", "6 . c #796A55", "7 . c #6C5E44", "8 . c #5F5134", "9 . c #564728", "0 . c #514120", "a . c #503D1D", "b . c #523F1F", "c . c #543F22", "d . c #583A20", "e . c #4F3F28", "f . c #4C3D28", "g . c #4C3F2E", "h . c #4D4030", "i . c #483C2E", "j . c #3E3428", "k . c #362C22", "l . c #292522", "m . c #272125", "n . c #2D2230", "o . c #312435", "p . c #493C4D", "q . c #655A6A", "r . c #786D7D", "s . c #898190", "t . c #9991A0", "u . c #9B95A3", "v . c #8B8893", "w . c #9F9DA8", "x . c #AEACB7", "y . c #A8A8B2", "z . c #9FA2AB", "A . c #C1C8D0", "B . c #AEB5BD", "C . c #AEB5BB", "D . c #B7BEC4", "E . c #BAC0C0", "F . c #B9BDBE", "G . c #B9BEBA", "H . c #C0C2BF", "I . c #C8CAC5", "J . c #CDCEC8", "K . c #CACBC5", "L . c #CBC9BD", "M . c #DAD4C4", "N . c #DFD8C5", "O . c #E4DCC9", "P . c #EAE2CF", "Q . c #F7ECDA", "R . c #F5E9D9", "S . c #DACDBD", "T . c #9E8C7E", "U . c #978577", "V . c #9F8C7E", "W . c #BBA89A", "X . c #D4BEB1", "Y . c #D7BFB5", "Z . c #CFB7AD", "` . c #C8B2A7", " .. c #DDCCC2", "... c #D1C3B8", "+.. c #A59999", "@.. c #B69E92", "#.. c #BBA397", "$.. c #BEA69A", "%.. c #BFA99C", "&.. c #C1AB9D", "*.. c #C2AFA1", "=.. c #C5B2A4", "-.. c #C2B0A6", ";.. c #C8B7AF", ">.. c #C8BBB5", ",.. c #C7BCB8", "'.. c #CEC4C2", ").. c #D3CDCD", "!.. c #CFCDD2", "~.. c #B8BCC7", "{.. c #C6CDD7", "].. c #DBE4ED", "^.. c #E3ECF1", "/.. c #E2EDEF", "(.. c #DFEAEC", "_.. c #D9E4E6", ":.. c #C7D2D4", "<.. c #C1CCCE", "[.. c #BDC8CA", "}.. c #C1CFD2", "|.. c #B3C1C4", "1.. c #CCDADD", "2.. c #D6E4E7", "3.. c #B4BFC3", "4.. c #ACB7BB", "5.. c #BCC7CB", "6.. c #9DA6AB", "7.. c #B1BABF", "8.. c #B5BCC2", "9.. c #B4BBC1", "0.. c #B0B5BB", "a.. c #B2B9BF", "b.. c #ACB7B9", "c.. c #A6B4B4", "d.. c #A3AFAF", "e.. c #9CA8A6", "f.. c #97A09D", "g.. c #949A96", "h.. c #939590", "i.. c #91928C", "j.. c #888073", "k.. c #786B58", "l.. c #665A44", "m.. c #5A4B34", "n.. c #55452B", "o.. c #5A4526", "p.. c #654F37", "q.. c #6C5840", "r.. c #745F4C", "s.. c #776455", "t.. c #827062", "u.. c #8B7A70", "v.. c #93847D", "w.. c #90817A", "x.. c #81725D", "y.. c #74664C", "z.. c #66583D", "A.. c #5B4C2D", "B.. c #534423", "C.. c #514022", "D.. c #534022", "E.. c #57391F", "F.. c #4E3F2C", "G.. c #50412E", "H.. c #514131", "I.. c #302B25", "J.. c #312732", "K.. c #312636", "L.. c #4C4151", "M.. c #625A69", "N.. c #6B6372", "O.. c #888290", "P.. c #A6A0AE", "Q.. c #A4A0AE", "R.. c #9997A2", "S.. c #A1A1AB", "T.. c #A6A9B2", "U.. c #A7AAB3", "V.. c #ABAFB8", "W.. c #B0B4BD", "X.. c #B1B8C0", "Y.. c #BCC4C7", "Z.. c #BDC2C5", "`.. c #BBC0C3", " +. c #C4C8C9", ".+. c #C2C6C5", "++. c #C3C5C2", "@+. c #C4C6C1", "#+. c #C7C8C3", "$+. c #CECFC9", "%+. c #D5D2C9", "&+. c #DDD7CB", "*+. c #D2CBBB", "=+. c #D4CBBC", "-+. c #E1D8C9", ";+. c #E5D9CB", ">+. c #E3D7C9", ",+. c #F5E7DA", "'+. c #FFFCED", ")+. c #FFF1E3", "!+. c #C1AFA1", "~+. c #8D7A6C", "{+. c #968375", "]+. c #C0AA9D", "^+. c #D4BCB0", "/+. c #CBB3A7", "(+. c #BEA89D", "_+. c #C2B1A7", ":+. c #C1B3AA", "<+. c #B0A299", "[+. c #B0A39B", "}+. c #AFA29A", "|+. c #AEA199", "1+. c #A9A08F", "2+. c #AB9F8F", "3+. c #AE9E8E", "4+. c #B39D90", "5+. c #BDA599", "6+. c #BFABA0", "7+. c #C7B6AF", "8+. c #CEBFBA", "9+. c #CDC0BA", "0+. c #CBC1BF", "a+. c #D7D1D1", "b+. c #CACACC", "c+. c #C2C3C7", "d+. c #C4C7CC", "e+. c #C7CCD2", "f+. c #CAD1D7", "g+. c #DDE4EC", "h+. c #F4FDFF", "i+. c #F7FFFF", "j+. c #EDF8FA", "k+. c #CDD8DA", "l+. c #C6D1D3", "m+. c #C0CBCD", "n+. c #C0CED1", "o+. c #AFBDC0", "p+. c #A9B4B8", "q+. c #97A2A6", "r+. c #9CA7AB", "s+. c #9DA8AC", "t+. c #90999E", "u+. c #A9B2B7", "v+. c #B6BDC3", "w+. c #ADB2B8", "x+. c #AFB6BC", "y+. c #A7B2B4", "z+. c #A2ADAF", "A+. c #9CA7A9", "B+. c #97A1A2", "C+. c #969C9A", "D+. c #949995", "E+. c #94958F", "F+. c #938F84", "G+. c #8B8376", "H+. c #817565", "I+. c #796A57", "J+. c #6C5B47", "K+. c #5F4D37", "L+. c #58462E", "M+. c #614C2F", "N+. c #5C4728", "O+. c #5F4A2D", "P+. c #655035", "Q+. c #735E49", "R+. c #7A6854", "S+. c #87776A", "T+. c #918076", "U+. c #92837C", "V+. c #918378", "W+. c #857865", "X+. c #7B6C55", "Y+. c #6D5F44", "Z+. c #605235", "`+. c #594A2B", " @. c #544327", ".@. c #534226", "+@. c #523E23", "@@. c #4E3E27", "#@. c #4F3E2A", "$@. c #4F3F2F", "%@. c #493C2C", "&@. c #312C26", "*@. c #2A2522", "=@. c #322A35", "-@. c #332B38", ";@. c #4B4350", ">@. c #5D5763", ",@. c #66606C", "'@. c #A19EA9", ")@. c #9A98A3", "!@. c #9F9FA9", "~@. c #A2A5AE", "{@. c #A5A8B1", "]@. c #A8AFB7", "^@. c #B3BAC2", "/@. c #B9C1C4", "(@. c #BCC1C4", "_@. c #BCC0C1", ":@. c #BEC2C1", "<@. c #BDC2BE", "[@. c #B9BEB8", "}@. c #B8BAB5", "|@. c #BDBFBA", "1@. c #C6C8C3", "2@. c #CECDC8", "3@. c #D6CFC7", "4@. c #C9C0B7", "5@. c #CFC5BC", "6@. c #E8DED5", "7@. c #F8EBE2", "8@. c #F2E5DC", "9@. c #F1E3D8", "0@. c #FCECDF", "a@. c #FFEFE3", "b@. c #AD9A8C", "c@. c #A79486", "d@. c #B29C8E", "e@. c #C6AFA1", "f@. c #D3BDB0", "g@. c #CEBAAF", "h@. c #A39288", "i@. c #C3B2AA", "j@. c #A89A9A", "k@. c #AEA49B", "l@. c #AB9F89", "m@. c #B7A092", "n@. c #C1A99D", "o@. c #BFA99E", "p@. c #C1ADA4", "q@. c #C8B4AB", "r@. c #C9BEBC", "s@. c #CAC0BE", "t@. c #D3CACB", "u@. c #D5CFCF", "v@. c #D6D2D3", "w@. c #BDBDBF", "x@. c #B7B8BA", "y@. c #CCD0D3", "z@. c #EAEFF2", "A@. c #F9FFFF", "B@. c #F8FFFF", "C@. c #F4FFFF", "D@. c #C8D3D5", "E@. c #B8C6C9", "F@. c #AEB9BD", "G@. c #B2BDC1", "H@. c #B7C2C6", "I@. c #788186", "J@. c #7C858A", "K@. c #99A0A6", "L@. c #B9C0C6", "M@. c #B3B8BE", "N@. c #AAAFB5", "O@. c #ABB2B8", "P@. c #A2ABB0", "Q@. c #97A1A3", "R@. c #949C9E", "S@. c #969A99", "T@. c #969893", "U@. c #96968E", "V@. c #6C5A46", "W@. c #5B452D", "X@. c #5C442C", "Y@. c #61492F", "Z@. c #624A2E", "`@. c #5E462A", " #. c #634E33", ".#. c #69553C", "+#. c #705C44", "@#. c #786652", "##. c #806F5D", "$#. c #867466", "%#. c #97867C", "&#. c #9C9090", "*#. c #95867F", "=#. c #8B7E6B", "-#. c #82735E", ";#. c #67593E", ">#. c #57472D", ",#. c #514024", "'#. c #503C24", ")#. c #4E3D2B", "!#. c #453828", "~#. c #413527", "{#. c #2B2525", "]#. c #342D35", "^#. c #403A44", "/#. c #534D59", "(#. c #5B5861", "_#. c #686570", ":#. c #82808B", "<#. c #918F9A", "[#. c #868690", "}#. c #A2A6AF", "|#. c #ACB0B9", "1#. c #A4ABB3", "2#. c #A5AEB5", "3#. c #AAB3BA", "4#. c #ADB6BD", "5#. c #B6BEC1", "6#. c #BBC0C4", "7#. c #BEC3C6", "8#. c #B5B9BC", "9#. c #BDC1C2", "0#. c #BBC0BC", "a#. c #BDC2BC", "b#. c #C2C4C1", "c#. c #C5C6C1", "d#. c #CAC5C1", "e#. c #D2C7C3", "f#. c #E0D5CF", "g#. c #F5E8E0", "h#. c #FBEEE5", "i#. c #F5E7DC", "j#. c #E3D2C8", "k#. c #DFCDC1", "l#. c #DAC8BA", "m#. c #D3C0B2", "n#. c #C2AC9E", "o#. c #AF9A89", "p#. c #AE9988", "q#. c #B9A395", "r#. c #CDB9AE", "s#. c #BBA99F", "t#. c #928179", "u#. c #9D8C84", "v#. c #AE9D95", "w#. c #B8A79F", "x#. c #C2B1AA", "y#. c #B4A59E", "z#. c #ACA394", "A#. c #ACA086", "B#. c #AB9F85", "C#. c #AD9E87", "D#. c #B19F89", "E#. c #B5A08D", "F#. c #B9A292", "G#. c #BBA496", "H#. c #C0A89E", "I#. c #C0AA9F", "J#. c #BEAAA1", "K#. c #CFBCB6", "L#. c #CDC1C1", "M#. c #CBC1C2", "N#. c #CAC0C1", "O#. c #CCC3C4", "P#. c #D4CED0", "Q#. c #D2D0D1", "R#. c #AEAEB0", "S#. c #BFC0C2", "T#. c #D7DBDC", "U#. c #ECF2F2", "V#. c #D3DEE0", "W#. c #CAD5D7", "X#. c #BBC6C8", "Y#. c #BCC7C9", "Z#. c #CED9DD", "`#. c #7B8489", " $. c #BFC6CC", ".$. c #C2C9CF", "+$. c #B9BEC4", "@$. c #AFB4BA", "#$. c #A5AAB0", "$$. c #A7ACB2", "%$. c #939B9E", "&$. c #93989B", "*$. c #969897", "=$. c #979691", "-$. c #8E8274", ";$. c #7F6F5F", ">$. c #6D5B47", ",$. c #644E39", "'$. c #5F472F", ")$. c #5D4129", "!$. c #62442C", "~$. c #664B30", "{$. c #644A31", "]$. c #60482E", "^$. c #6A543C", "/$. c #715D45", "($. c #76644E", "_$. c #7E6D5B", ":$. c #8D7D70", "<$. c #9E9189", "[$. c #8F8271", "}$. c #796D55", "|$. c #6F6147", "1$. c #685A3F", "2$. c #5A4C32", "3$. c #56462C", "4$. c #514127", "5$. c #4E3A22", "6$. c #4D3B23", "7$. c #4D3C2A", "8$. c #4C3C2C", "9$. c #4C3C2D", "0$. c #322924", "a$. c #352E35", "b$. c #4F4A51", "c$. c #58525C", "d$. c #545158", "e$. c #65626B", "f$. c #7B7A82", "g$. c #83838B", "h$. c #82858C", "i$. c #A1A6AC", "j$. c #A7AEB6", "k$. c #A1AAB1", "l$. c #A3AEB4", "m$. c #A9B4BA", "n$. c #AEB7BE", "o$. c #ABB2BA", "p$. c #BABFC3", "q$. c #B7BCBF", "r$. c #BEC4C4", "s$. c #C2C8C8", "t$. c #C0C6C4", "u$. c #C4CAC6", "v$. c #C3C7C6", "w$. c #BFC1BE", "x$. c #C9C3C5", "y$. c #C1B7B6", "z$. c #BEB4B2", "A$. c #D4C9C5", "B$. c #F2E5DF", "C$. c #FFF5EE", "D$. c #F0E2D9", "E$. c #F5E4DA", "F$. c #F6E4D8", "G$. c #EAD8CA", "H$. c #D5C2B3", "I$. c #BDAA99", "J$. c #AB9887", "K$. c #A3907F", "L$. c #B5A397", "M$. c #C0AEA4", "N$. c #AF9D93", "O$. c #A4918A", "P$. c #A7948D", "Q$. c #A9968F", "R$. c #A6938C", "S$. c #BFACA6", "T$. c #B9A8A1", "U$. c #B6A4A0", "V$. c #B2A39E", "W$. c #A89899", "X$. c #ACA296", "Y$. c #AD9F84", "Z$. c #AF9F86", "`$. c #B2A08A", " %. c #B8A390", ".%. c #BDA696", "+%. c #BFA89A", "@%. c #C2AAA0", "#%. c #C5AEA6", "$%. c #D1BFBB", "%%. c #D2C4C3", "&%. c #CEC3C7", "*%. c #CDC7CB", "=%. c #CFC9CD", "-%. c #CFCACE", ";%. c #CDCBCE", ">%. c #CECCCF", ",%. c #B4B5B7", "'%. c #F7FDFB", ")%. c #EFF8F5", "!%. c #E7F2EE", "~%. c #E0EAE9", "{%. c #D8E4E2", "]%. c #BDC9C9", "^%. c #B8C3C5", "/%. c #B7C2C4", "(%. c #BAC5C7", "_%. c #B9C4C6", ":%. c #BAC4C6", "<%. c #A2ACAE", "[%. c #959FA1", "}%. c #C1C9CC", "|%. c #BEC3C7", "1%. c #B2B7BB", "2%. c #B0B5B9", "3%. c #A9AEB2", "4%. c #A0A3A8", "5%. c #9DA2A8", "6%. c #989DA3", "7%. c #93969B", "8%. c #949597", "9%. c #969593", "0%. c #8D8377", "a%. c #887868", "b%. c #68523D", "c%. c #64462E", "d%. c #64442B", "e%. c #68462D", "f%. c #694930", "g%. c #674D34", "h%. c #654D35", "i%. c #68523A", "j%. c #735D46", "k%. c #7B6651", "l%. c #7F6D59", "m%. c #847562", "n%. c #8A7D6C", "o%. c #9B8E85", "p%. c #897C69", "q%. c #7D715B", "r%. c #75664F", "s%. c #5C4D36", "t%. c #514329", "u%. c #4F3F25", "v%. c #533F27", "w%. c #563C25", "x%. c #553923", "y%. c #4E3820", "z%. c #4E3C28", "A%. c #4F3E2C", "B%. c #413529", "C%. c #372A21", "D%. c #362D28", "E%. c #342B26", "F%. c #363034", "G%. c #47444B", "H%. c #5A595F", "I%. c #737479", "J%. c #808088", "K%. c #999EA4", "L%. c #9FA8AF", "M%. c #ABB6BC", "N%. c #A6B1B7", "O%. c #ACB3B9", "P%. c #B9BEC2", "Q%. c #B8BDC1", "R%. c #B8BDC0", "S%. c #B5BABD", "T%. c #B1B7B7", "U%. c #B7BDBD", "V%. c #BDC6C3", "W%. c #BCC2C2", "X%. c #B3B7B8", "Y%. c #CBC6CA", "Z%. c #C5BFC3", "`%. c #CAC4C8", " &. c #D6D0D2", ".&. c #D0C7C8", "+&. c #C0B6B5", "@&. c #DACFC9", "#&. c #FAEDE5", "$&. c #FFF5EC", "%&. c #FFF2E5", "&&. c #EDDDCE", "*&. c #D7C6B6", "=&. c #CCBBA9", "-&. c #CBBAA8", ";&. c #AD9B91", ">&. c #AA988E", ",&. c #B6A39C", "'&. c #C5B2AB", ")&. c #C2AFA8", "!&. c #A3908A", "~&. c #BAA8A4", "{&. c #C4B2AE", "]&. c #BFADA9", "^&. c #A5948D", "/&. c #AEA699", "(&. c #AFA490", "_&. c #AD9F82", ":&. c #AE9E84", "<&. c #B09F85", "[&. c #B5A08B", "}&. c #BAA592", "|&. c #C2AB9D", "1&. c #CEBCB8", "2&. c #CCBEBD", "3&. c #CBC5C9", "4&. c #D0CBD1", "5&. c #D6D1D8", "6&. c #D2D0D5", "7&. c #C7C7C9", "8&. c #CCCDCF", "9&. c #E8ECED", "0&. c #EEF4F4", "a&. c #EBF4F1", "b&. c #E5F0EC", "c&. c #ECF7F3", "d&. c #ECF8F4", "e&. c #CBD7D3", "f&. c #A1ADAB", "g&. c #BBC7C7", "h&. c #B5C0C2", "i&. c #B1BCBE", "j&. c #AEB9BB", "k&. c #ACB6B8", "l&. c #B8C2C4", "m&. c #B5BFC1", "n&. c #B2BABD", "o&. c #B1B6BA", "p&. c #A5AAAE", "q&. c #A7ACB0", "r&. c #A4A9AD", "s&. c #9DA0A7", "t&. c #989BA2", "u&. c #939393", "v&. c #83725E", "w&. c #674D36", "x&. c #644830", "y&. c #6B472F", "z&. c #6B462C", "A&. c #69472E", "B&. c #6B4F39", "C&. c #69503A", "D&. c #6E5843", "E&. c #79644F", "F&. c #806E5A", "G&. c #877A69", "H&. c #8D8171", "I&. c #8F8472", "J&. c #887D69", "K&. c #70644C", "L&. c #5F533B", "M&. c #564730", "N&. c #503B26", "O&. c #553A25", "P&. c #513D25", "Q&. c #4D3B27", "R&. c #483A2D", "S&. c #392E28", "T&. c #423836", "U&. c #383234", "V&. c #4D484C", "W&. c #545257", "X&. c #58565B", "Y&. c #6A696E", "Z&. c #7B7C80", "`&. c #87888D", " *. c #919499", ".*. c #94999F", "+*. c #9EA5AD", "@*. c #A3ACB3", "#*. c #A5AEB7", "$*. c #A5AFB8", "%*. c #A7B1BA", "&*. c #ACB3BB", "**. c #ADB4BA", "=*. c #B0B7BD", "-*. c #BAC2C5", ";*. c #B4BCBF", ">*. c #B5BDBF", ",*. c #B6BEC0", "'*. c #B6C0BF", ")*. c #BBC3C5", "!*. c #C4C3C9", "~*. c #C8C3CA", "{*. c #C9C4CB", "]*. c #C9C4CA", "^*. c #C8C2C6", "/*. c #C5BFBF", "(*. c #C3BBB9", "_*. c #C2B8B6", ":*. c #DBD0CA", "<*. c #F1E7DE", "[*. c #FCF0E4", "}*. c #FEF0E3", "|*. c #FFF3E3", "1*. c #F4E5D2", "2*. c #D7C8B5", "3*. c #C6B6A6", "4*. c #AD9D90", "5*. c #B4A399", "6*. c #B3A298", "7*. c #A5948C", "8*. c #A19088", "9*. c #AD9A93", "0*. c #BBA8A1", "a*. c #B7A49E", "b*. c #AB9892", "c*. c #B4A19D", "d*. c #C1AEAA", "e*. c #BFACA8", "f*. c #B29E9D", "g*. c #B2A7A1", "h*. c #AEA59C", "i*. c #ADA598", "j*. c #ABA79B", "k*. c #AAA69A", "l*. c #ABA597", "m*. c #AA9F8D", "n*. c #AC9F8E", "o*. c #ADA18B", "p*. c #AFA186", "q*. c #B2A386", "r*. c #B5A48A", "s*. c #B7A68C", "t*. c #B9A48F", "u*. c #BBA695", "v*. c #BCA699", "w*. c #CABBB8", "x*. c #C6B8B7", "y*. c #C8BDBB", "z*. c #D1C8CB", "A*. c #CDC8CE", "B*. c #D2D1D7", "C*. c #D5D4DC", "D*. c #C7C8CD", "E*. c #B8B9BE", "F*. c #B6BABD", "G*. c #DFE4E7", "H*. c #EDF3F3", "I*. c #E9F2F1", "J*. c #E7F0ED", "K*. c #DFEAE6", "L*. c #D2DDD9", "M*. c #C3CFCB", "N*. c #C0CDC6", "O*. c #C3D2CD", "P*. c #C8D4D4", "Q*. c #C9D4D6", "R*. c #B4BFC1", "S*. c #B7C1C2", "T*. c #B9C3C4", "U*. c #BBC5C6", "V*. c #BAC2C4", "W*. c #B7BFC1", "X*. c #B4BCBE", "Y*. c #B2BABC", "Z*. c #B2B7BA", "`*. c #ACB0B3", " =. c #A8ACAF", ".=. c #A5A9AC", "+=. c #A1A5A8", "@=. c #9B9CA0", "#=. c #94959A", "$=. c #939499", "%=. c #929197", "&=. c #939194", "*=. c #999592", "==. c #837461", "-=. c #684C34", ";=. c #6A4C32", ">=. c #6C4A31", ",=. c #69452B", "'=. c #69442A", ")=. c #6A462E", "!=. c #725945", "~=. c #7A6351", "{=. c #806B5A", "]=. c #9A9084", "^=. c #928676", "/=. c #8C816F", "(=. c #756A54", "_=. c #6D624E", ":=. c #645943", "<=. c #584C36", "[=. c #51422B", "}=. c #523D28", "|=. c #553C28", "1=. c #563B26", "2=. c #4F3F30", "3=. c #382B22", "4=. c #453C37", "5=. c #585357", "6=. c #5A585B", "7=. c #6F6D72", "8=. c #7E7D82", "9=. c #85868B", "0=. c #8D9095", "a=. c #95989F", "b=. c #A1A8B0", "c=. c #A2ABB4", "d=. c #A3ADB6", "e=. c #A6B0B9", "f=. c #A9B2B9", "g=. c #B3BBBE", "h=. c #B7BFC2", "i=. c #B5BFC0", "j=. c #B4BEBF", "k=. c #B6C0C1", "l=. c #BDC5C8", "m=. c #C0C0C8", "n=. c #C2C1C9", "o=. c #C4C3CB", "p=. c #C5C4CA", "q=. c #C7C5CA", "r=. c #C6C4C7", "s=. c #C8C2C2", "t=. c #C7C2BF", "u=. c #C1BAB4", "v=. c #D1CAC2", "w=. c #EEE4D8", "x=. c #FFFCEC", "y=. c #FFF9E7", "z=. c #E5DAC8", "A=. c #CEC2B2", "B=. c #D9CBBE", "C=. c #C1B3A8", "D=. c #B7A69C", "E=. c #B9ABA0", "F=. c #8F7E76", "G=. c #B8A59F", "H=. c #BBA8A4", "I=. c #BCA9A5", "J=. c #B7A4A0", "K=. c #BBA7A6", "L=. c #C5B2AE", "M=. c #A39797", "N=. c #AAA496", "O=. c #AFA492", "P=. c #AFA28F", "Q=. c #AFA08D", "R=. c #AE9F8A", "S=. c #AFA08B", "T=. c #B1A188", "U=. c #B2A288", "V=. c #B5A38B", "W=. c #B7A58D", "X=. c #B9A793", "Y=. c #C4AEA0", "Z=. c #C6B2A7", "`=. c #C8B5AE", " -. c #CBBCB9", ".-. c #C8BEBD", "+-. c #CEC5C6", "@-. c #D1CBCB", "#-. c #D0CBCF", "$-. c #D3D2D8", "%-. c #D2D2DA", "&-. c #CCCFD6", "*-. c #C6C9D0", "=-. c #E0E5E8", "--. c #EEF6F8", ";-. c #EAF2F4", ">-. c #DFE9E8", ",-. c #D6E0DF", "'-. c #D0DCD8", ")-. c #CAD6D2", "!-. c #C2D1CC", "~-. c #C6D5D0", "{-. c #C1CDCD", "]-. c #B2BDBF", "^-. c #BCC6C7", "/-. c #BAC4C5", "(-. c #B3BBBD", "_-. c #B4B9BC", ":-. c #ADB2B5", "<-. c #A6AAAD", "[-. c #A0A4A7", "}-. c #9DA1A4", "|-. c #9A9B9F", "1-. c #96979B", "2-. c #959398", "3-. c #929093", "4-. c #938F8E", "5-. c #918577", "6-. c #807360", "7-. c #645037", "8-. c #634B31", "9-. c #64492E", "0-. c #694B31", "a-. c #6C4A2F", "b-. c #6C482E", "c-. c #704A33", "d-. c #75513B", "e-. c #735442", "f-. c #785C4E", "g-. c #816758", "h-. c #867062", "i-. c #897868", "j-. c #938A7B", "k-. c #887D6B", "l-. c #7D725E", "m-. c #736B58", "n-. c #6A624D", "o-. c #5F5440", "p-. c #554933", "q-. c #52412D", "r-. c #543E29", "s-. c #573C27", "t-. c #553D23", "u-. c #4E3924", "v-. c #4C3B2B", "w-. c #514132", "x-. c #493B30", "y-. c #362920", "z-. c #433834", "A-. c #564E4C", "B-. c #5D595A", "C-. c #5C5A5B", "D-. c #716F72", "E-. c #7F7F81", "F-. c #848388", "G-. c #8B8C90", "H-. c #9B9FA8", "I-. c #9FA6B0", "J-. c #A1AAB3", "K-. c #A6AFB8", "L-. c #B1B6BC", "M-. c #B4BDC2", "N-. c #BBC5C7", "O-. c #BEC3C9", "P-. c #BFC2C9", "Q-. c #C0C3CA", "R-. c #C5C6CA", "S-. c #C6C7C9", "T-. c #C9C7C8", "U-. c #C9C8C6", "V-. c #C0BDB8", "W-. c #C5C2BB", "X-. c #C2BBB1", "Y-. c #C8C2B6", "Z-. c #E3DBCE", "`-. c #F2EBDB", " ;. c #F0E9D9", ".;. c #F1E8D9", "+;. c #DBCFC3", "@;. c #C3B7AB", "#;. c #B5A79C", "$;. c #B6AA9E", "%;. c #82746B", "&;. c #9E8D86", "*;. c #C3B1AD", "=;. c #B9A6A2", "-;. c #BDA9A8", ";;. c #C7B4B0", ">;. c #A9988E", ",;. c #A49898", "';. c #ABA293", ");. c #B2A390", "!;. c #B2A38E", "~;. c #B1A08C", "{;. c #B0A089", "];. c #B2A28B", "^;. c #B4A48D", "/;. c #B3A48D", "(;. c #B6A591", "_;. c #B8A793", ":;. c #BBAA9A", "<;. c #C2B0A2", "[;. c #CCBFB9", "};. c #D3CFD0", "|;. c #D3D1D2", "1;. c #CDCED0", "2;. c #C3C6CB", "3;. c #BDC2C6", "4;. c #CDD5D8", "5;. c #DAE2E5", "6;. c #E1E9EC", "7;. c #E3EDEE", "8;. c #DDE7E8", "9;. c #D0DCDC", "0;. c #C6D5D2", "a;. c #C8D7D4", "b;. c #C5D4D1", "c;. c #C3D2CF", "d;. c #B3BEC0", "e;. c #BFC9CA", "f;. c #BBC5C4", "g;. c #B8C1C0", "h;. c #B7C0BF", "i;. c #B5BBBB", "j;. c #B2B8B8", "k;. c #AFB3B4", "l;. c #A8ACAD", "m;. c #9FA3A4", "n;. c #9A9E9F", "o;. c #9C9D9F", "p;. c #999A9C", "q;. c #98989A", "r;. c #979394", "s;. c #70614A", "t;. c #65543A", "u;. c #5D492E", "v;. c #5F472B", "w;. c #62492B", "x;. c #694B2F", "y;. c #6B4930", "z;. c #724F39", "A;. c #7B5845", "B;. c #7C5C4D", "C;. c #806458", "D;. c #886E61", "E;. c #8D776A", "F;. c #AEA39F", "G;. c #9A9086", "H;. c #9A8E82", "I;. c #79725F", "J;. c #716A57", "K;. c #655D4A", "L;. c #5A4F3B", "M;. c #554633", "N;. c #573B25", "O;. c #573D24", "P;. c #4E3821", "Q;. c #483524", "R;. c #4F3E2E", "S;. c #4E3E31", "T;. c #413026", "U;. c #36281F", "V;. c #362720", "W;. c #382D27", "X;. c #595353", "Y;. c #5D5757", "Z;. c #625E5F", "`;. c #7C7A7D", " >. c #807E83", ".>. c #8A898E", "+>. c #96979C", "@>. c #979A9F", "#>. c #9B9EA7", "$>. c #9CA0A9", "%>. c #9FA3AE", "&>. c #A0A7B1", "*>. c #A6ADB7", "=>. c #AAB1BB", "->. c #ABB0B6", ";>. c #AEB3B9", ">>. c #AAB3B8", ",>. c #B6C1C5", "'>. c #B5C0C4", ")>. c #B2C0C1", "!>. c #B4C2C5", "~>. c #BEC5CD", "{>. c #BDC4CA", "]>. c #BFC4C8", "^>. c #C4C5C7", "/>. c #CCCDC7", "(>. c #C4C1B8", "_>. c #B7B5A9", ":>. c #BDB9AD", "<>. c #CAC6BA", "[>. c #DFDCCD", "}>. c #FBF5E7", "|>. c #F8F0E3", "1>. c #FBF1E5", "2>. c #EBE1D5", "3>. c #CFC5B9", "4>. c #C6BCB2", "5>. c #CEC1B8", "6>. c #C3B6AD", "7>. c #AEA097", "8>. c #978881", "9>. c #97867F", "0>. c #9E8C88", "a>. c #C4B1AD", "b>. c #C1ADAC", "c>. c #B8A79D", "d>. c #B1A39A", "e>. c #968780", "f>. c #ADA696", "g>. c #AEA190", "h>. c #B2A18D", "i>. c #B3A18B", "j>. c #B49F8A", "k>. c #B4A088", "l>. c #B5A189", "m>. c #B3A28E", "n>. c #B6A794", "o>. c #BBAB9B", "p>. c #BEAE9E", "q>. c #C5B5A8", "r>. c #D2C3BC", "s>. c #CCC3BE", "t>. c #CCC8C7", "u>. c #CED2D3", "v>. c #C3CDCF", "w>. c #CFD7DA", "x>. c #DEE8EA", "y>. c #EEF9FB", "z>. c #E5EFF1", "A>. c #CBD7D7", "B>. c #C4D2D2", "C>. c #C5D3D3", "D>. c #CBD9D9", "E>. c #CEDCDC", "F>. c #C7D7D6", "G>. c #BFCFCE", "H>. c #BCCCCB", "I>. c #BECCCD", "J>. c #BAC6C6", "K>. c #B7C1C0", "L>. c #B5BEBD", "M>. c #B6BFBE", "N>. c #B4BDBC", "O>. c #AFB5B5", "P>. c #A9AFAF", "Q>. c #A7ABAC", "R>. c #A1A5A6", "S>. c #9B9FA0", "T>. c #989C9D", "U>. c #9B9C9E", "V>. c #969495", "W>. c #71624D", "X>. c #64543A", "Y>. c #5E4B2B", "Z>. c #604B2C", "`>. c #664D2F", " ,. c #684D30", ".,. c #67492F", "+,. c #664830", "@,. c #70503B", "#,. c #7B5C4A", "$,. c #856558", "%,. c #886C61", "&,. c #90756A", "*,. c #947E73", "=,. c #968679", "-,. c #9B8F83", ";,. c #AD9F9E", ">,. c #988F80", ",,. c #938777", "',. c #7D7865", "),. c #6D6552", "!,. c #625743", "~,. c #583C26", "{,. c #593B23", "],. c #573D22", "^,. c #4A3726", "/,. c #4D3C2C", "(,. c #4D3D30", "_,. c #47362C", ":,. c #3C2E23", "<,. c #32251D", "[,. c #443A38", "},. c #574F4D", "|,. c #645C5A", "1,. c #6C6666", "2,. c #787274", "3,. c #777374", "4,. c #7B767A", "5,. c #88868B", "6,. c #96959B", "7,. c #98999E", "8,. c #9B9BA5", "9,. c #9C9FA8", "0,. c #9EA0AC", "a,. c #A1A5B0", "b,. c #A7ABB7", "c,. c #ABAFBA", "d,. c #A8ADB3", "e,. c #ACB1B5", "f,. c #B0B9BE", "g,. c #B4BFC5", "h,. c #B0BFC2", "i,. c #B8C3C9", "j,. c #B9C3C5", "k,. c #C8CDC7", "l,. c #C6C7BF", "m,. c #C5C5BB", "n,. c #BFBFB5", "o,. c #C1C1B5", "p,. c #D3D1C4", "q,. c #F9F3E7", "r,. c #FFFEF1", "s,. c #DDD5C8", "t,. c #C4BCB1", "u,. c #C4BAB0", "v,. c #C2B8AE", "w,. c #B9ACA3", "x,. c #BDB0A8", "y,. c #BEACA8", "z,. c #CCBAB0", "A,. c #B1A191", "B,. c #AC9B89", "C,. c #AF9D89", "D,. c #B49E87", "E,. c #B59F87", "F,. c #B9A189", "G,. c #B9A38C", "H,. c #B4A393", "I,. c #B8AA9D", "J,. c #C1B3A6", "K,. c #C5B7AA", "L,. c #C7B6AE", "M,. c #C6B8AF", "N,. c #CBBCB7", "O,. c #D0D0D0", "P,. c #CACECD", "Q,. c #CAD0D0", "R,. c #C8D0D2", "S,. c #C6D0D1", "T,. c #C9D3D4", "U,. c #D1DDDD", "V,. c #E0EAEB", "W,. c #EDF9F9", "X,. c #F2FEFE", "Y,. c #E8F6F6", "Z,. c #DAE5E7", "`,. c #CBD9DA", " '. c #C5D3D4", ".'. c #C3D3D3", "+'. c #C6D6D6", "@'. c #CCDCDC", "#'. c #CBDBDB", "$'. c #C4D4D4", "%'. c #C2D0D1", "&'. c #B0BBBD", "*'. c #B9C5C5", "='. c #AAB0B0", "-'. c #A3A9A9", ";'. c #9DA1A2", ">'. c #9D9EA0", ",'. c #969698", "''. c #766A54", ")'. c #64563C", "!'. c #5E4F30", "~'. c #615130", "{'. c #604D2C", "]'. c #614D2C", "^'. c #644F30", "/'. c #685034", "('. c #725543", "_'. c #7E6151", ":'. c #8A6C61", "<'. c #90736B", "['. c #967B72", "}'. c #99827A", "|'. c #99887E", "1'. c #AE9E9F", "2'. c #AF9F9F", "3'. c #8C8372", "4'. c #766F5D", "5'. c #57422F", "6'. c #583F2B", "7'. c #583D28", "8'. c #593D27", "9'. c #5A3C24", "0'. c #563B1E", "a'. c #533920", "b'. c #513921", "c'. c #523D2A", "d'. c #352820", "e'. c #403533", "f'. c #685E5D", "g'. c #746C6A", "h'. c #7B7273", "i'. c #756F73", "j'. c #868185", "k'. c #939097", "l'. c #95949A", "m'. c #9F9FAB", "n'. c #A0A2AE", "o'. c #A4A6B3", "p'. c #A7ABB6", "q'. c #A4A9AF", "r'. c #A8ADB1", "s'. c #ABB4B9", "t'. c #ABB6BA", "u'. c #B0BDC3", "v'. c #AEBDC2", "w'. c #B5C3C4", "x'. c #BDC6C5", "y'. c #BAC3C0", "z'. c #BFC5C1", "A'. c #BEC3BD", "B'. c #C5CAC3", "C'. c #D3D6CF", "D'. c #C9CCC3", "E'. c #B9BCB3", "F'. c #BABCB1", "G'. c #D4D0C4", "H'. c #E3DDCF", "I'. c #FDF7E9", "J'. c #FFFFF1", "K'. c #FFFAEE", "L'. c #DDD5CA", "M'. c #C9C1B6", "N'. c #CCC2B8", "O'. c #D9CCC4", "P'. c #CCBFB7", "Q'. c #BFB0AB", "R'. c #B7A8A3", "S'. c #B7A5A1", "T'. c #C5B3B1", "U'. c #D4C2B8", "V'. c #D2C0B4", "W'. c #BDAFA6", "X'. c #AEA191", "Y'. c #AD9B87", "Z'. c #B19C87", "`'. c #B59F88", " ). c #B89F89", ".). c #B8A088", "+). c #B99F86", "@). c #BCA289", "#). c #BDA48E", "$). c #B9A799", "%). c #BFB1A8", "&). c #C9BBB2", "*). c #CABBB4", "=). c #CBBDBA", "-). c #C6BEBC", ";). c #CECAC9", ">). c #D4D2D3", ",). c #CDD1D0", "'). c #C8CECE", ")). c #C5CFCE", "!). c #C8D6D6", "~). c #D2E0E0", "{). c #D7E5E5", "]). c #E0ECEC", "^). c #DFEDED", "/). c #DAE8E8", "(). c #D1DFDF", "_). c #C8D6D7", ":). c #CADADA", "<). c #C5D5D5", "[). c #C2D2D2", "}). c #C1D0D3", "|). c #BFCED1", "1). c #C0D2D4", "2). c #C9D8DB", "3). c #B6C2C2", "4). c #B3B9B9", "5). c #ACB2B2", "6). c #A6ACAC", "7). c #A2A8A8", "8). c #9EA2A3", "9). c #9CA0A1", "0). c #929294", "a). c #9C8E83", "b). c #968677", "c). c #6B5C45", "d). c #5F4F2E", "e). c #645430", "f). c #5F4D29", "g). c #5E4C28", "h). c #614E2D", "i). c #675235", "j). c #705741", "k). c #7B6150", "l). c #886C5E", "m). c #907268", "n). c #967971", "o). c #9D827B", "p). c #9D8980", "q). c #9E8D85", "r). c #A4A49A", "s). c #A3A399", "t). c #97928E", "u). c #9D9387", "v). c #847E6E", "w). c #837E6B", "x). c #7F7866", "y). c #6A5D4C", "z). c #5B4633", "A). c #5B422E", "B). c #593E29", "C). c #5A3E28", "D). c #5B3D25", "E). c #53381A", "F). c #46352B", "G). c #3D2F2C", "H). c #4E4341", "I). c #5F5353", "J). c #6E6463", "K). c #797071", "L). c #736D6F", "M). c #746E72", "N). c #8F8A91", "O). c #918E95", "P). c #96949F", "Q). c #9C9CA8", "R). c #9C9EAA", "S). c #9FA1AE", "T). c #A2A4B0", "U). c #AAAFB3", "V). c #ACB5BA", "W). c #AEB7BC", "X). c #AAB5BB", "Y). c #ACB9BF", "Z). c #AEBFC6", "`). c #B0C2C6", " !. c #AABCC0", ".!. c #ACBEC0", "+!. c #AFC1C3", "@!. c #B5C5C5", "#!. c #B6C4C4", "$!. c #B7C3C1", "%!. c #C3CECA", "&!. c #BEC7C2", "*!. c #BAC1BA", "=!. c #CACFC9", "-!. c #C7CCC5", ";!. c #BEC3BC", ">!. c #C5C8BD", ",!. c #A9A79A", "'!. c #A9A697", ")!. c #C4C1B2", "!!. c #F2EFE0", "~!. c #FFFEF2", "{!. c #ECE6DA", "]!. c #D7CFC4", "^!. c #D5CDC2", "/!. c #DAD0C7", "(!. c #D7CDC4", "_!. c #D7CAC4", ":!. c #D3C6C0", "~. c #593D25", ",~. c #583D22", "'~. c #52371A", ")~. c #563D27", "!~. c #523B29", "~~. c #523D2C", "{~. c #513E2F", "]~. c #4A362D", "^~. c #46332C", "/~. c #362722", "(~. c #433532", "_~. c #524441", ":~. c #665855", "<~. c #786D6B", "[~. c #776D6C", "}~. c #786F70", "|~. c #868082", "1~. c #8A8589", "2~. c #8E8C91", "3~. c #94939B", "4~. c #9898A2", "5~. c #9A9AA6", "6~. c #999BA7", "7~. c #9A9EAA", "8~. c #9CA0AC", "9~. c #9FA3AC", "0~. c #A3A8AE", "a~. c #ACB1B7", "b~. c #A4ADB4", "c~. c #A7B2B8", "d~. c #ACB7BD", "e~. c #AEBBC1", "f~. c #B0BFC4", "g~. c #AEC0C2", "h~. c #B0C2C4", "i~. c #B2C4C6", "j~. c #B6C5C8", "k~. c #B3C3C3", "l~. c #AFBDBD", "m~. c #BCC8C6", "n~. c #C1CBCA", "o~. c #BEC9C5", "p~. c #C2CBC8", "q~. c #B9C2BD", "r~. c #BAC0BC", "s~. c #CCD1CB", "t~. c #D8DACF", "u~. c #BFBFB3", "v~. c #AEACA0", "w~. c #BCBAAE", "x~. c #DEDCD0", "y~. c #F8F6EA", "z~. c #FBF7EE", "A~. c #F4EDE5", "B~. c #DED7CF", "C~. c #D2C9C2", "D~. c #C6BDB6", "E~. c #C5BCB5", "F~. c #C8BDB9", "G~. c #CFC1B8", "H~. c #D4C6BD", "I~. c #CABCB3", "J~. c #BAACA3", "K~. c #B9ABA2", "L~. c #B4A69D", "M~. c #AFA198", "N~. c #9C9994", "O~. c #9C9895", "P~. c #ADA397", "Q~. c #ADA090", "R~. c #AC9B8B", "S~. c #AE988A", "T~. c #AE9787", "U~. c #B49D8B", "V~. c #B99F8E", "W~. c #BCA291", "X~. c #BDA490", "Y~. c #BFA690", "Z~. c #C2A993", "`~. c #C1AC99", " {. c #C5B4AC", ".{. c #CFC1C0", "+{. c #CABFBD", "@{. c #D6D0D0", "#{. c #BCC4C6", "${. c #CDDBDC", "%{. c #D5E7E7", "&{. c #DAEAE9", "*{. c #D9E9E6", "={. c #CFDFDE", "-{. c #C2D2D1", ";{. c #C3D1D4", ">{. c #B7C6C9", ",{. c #B2C1C4", "'{. c #BAC9CC", "){. c #BECDD2", "!{. c #AFB9BA", "~{. c #B0BAB9", "{{. c #ADB6B5", "]{. c #A3ACAB", "^{. c #999EA1", "/{. c #94999C", "({. c #9B9FA2", "_{. c #A4A5A9", ":{. c #A5A6A8", "<{. c #A0A0A2", "[{. c #999999", "}{. c #979596", "|{. c #959492", "1{. c #948777", "2{. c #84725C", "3{. c #6A5840", "4{. c #5B4A2E", "5{. c #5A4A29", "6{. c #5F4C2B", "7{. c #604E2A", "8{. c #5F4B28", "9{. c #66522F", "0{. c #614C2D", "a{. c #6A553A", "b{. c #745E49", "c{. c #937871", "d{. c #9A817C", "e{. c #A58E88", "f{. c #A99690", "g{. c #A8A59C", "h{. c #827A6F", "i{. c #7A7064", "j{. c #726658", "k{. c #675747", "l{. c #5B4A38", "m{. c #604B36", "n{. c #58422B", "o{. c #584024", "p{. c #5D4426", "q{. c #5A4122", "r{. c #563D1E", "s{. c #583924", "t{. c #5A3A23", "u{. c #523726", "v{. c #513728", "w{. c #50352A", "x{. c #50352C", "y{. c #4D342D", "z{. c #463229", "A{. c #48352E", "B{. c #534039", "C{. c #63524A", "D{. c #6F6059", "E{. c #746A61", "F{. c #797069", "G{. c #7E7771", "H{. c #85817E", "I{. c #898788", "J{. c #8F9094", "K{. c #93969D", "L{. c #949AA6", "M{. c #959DAA", "N{. c #989EAC", "O{. c #9B9FAA", "P{. c #A0A3AC", "Q{. c #A8ACB5", "R{. c #AAB1B9", "S{. c #ADB6BB", "T{. c #AEBCBF", "U{. c #B1BFC2", "V{. c #B2C0C3", "W{. c #B0BEC1", "X{. c #AFBEC1", "Y{. c #B4C2C3", "Z{. c #ADB8BA", "`{. c #B8C4C4", " ]. c #ABB7B7", ".]. c #C2CCCB", "+]. c #CFD5D1", "@]. c #BEC0BB", "#]. c #C1C3BE", "$]. c #D0D1CB", "%]. c #E3E4DF", "&]. c #F1F0EB", "*]. c #E8E7E2", "=]. c #E8E5E0", "-]. c #CDCAC3", ";]. c #C1BCB8", ">]. c #BFBAB4", ",]. c #C0BBB5", "']. c #BDB4AD", ")]. c #C6BBB5", "!]. c #CABFB9", "~]. c #C5B8B0", "{]. c #C2B5AD", "]]. c #C6B9B0", "^]. c #CDBFB6", "/]. c #CDBFB4", "(]. c #C6B5AB", "_]. c #A9978B", ":]. c #AA988C", "<]. c #9E989A", "[]. c #ADA3A1", "}]. c #A7A495", "|]. c #A9A395", "1]. c #AAA592", "2]. c #A9A38B", "3]. c #AEA68F", "4]. c #B1A491", "5]. c #B29D8C", "6]. c #B89E91", "7]. c #BCA094", "8]. c #B89C90", "9]. c #B4988C", "0]. c #B49A8D", "a]. c #B8A094", "b]. c #BCAA9C", "c]. c #BFAFA0", "d]. c #C3B5AA", "e]. c #C5B8B2", "f]. c #B9AEAC", "g]. c #D7CDCE", "h]. c #C6C0C0", "i]. c #D2CECF", "j]. c #B3B8BC", "k]. c #A8B1B6", "l]. c #D4E3E8", "m]. c #D4E5EC", "n]. c #D0E3E9", "o]. c #D3E6EA", "p]. c #CFDDE0", "q]. c #D0DEDE", "r]. c #D2DDDF", "s]. c #C6D4D5", "t]. c #C7D5D6", "u]. c #C6D4D7", "v]. c #BBC9CA", "w]. c #B9C7C8", "x]. c #B8C6C7", "y]. c #BAC8C9", "z]. c #BCC6C8", "A]. c #B7C1C3", "B]. c #A8B4B2", "C]. c #A5AFB0", "D]. c #A4AEAF", "E]. c #A2AAAD", "F]. c #9EA3A7", "G]. c #9A9DA2", "H]. c #9A9BA0", "I]. c #A19FA4", "J]. c #A19D9E", "K]. c #8A7F6D", "L]. c #847556", "M]. c #75633F", "N]. c #614F29", "O]. c #5B4722", "P]. c #604C27", "Q]. c #67512C", "R]. c #654D2B", "S]. c #614726", "T]. c #674C2F", "U]. c #6A4F34", "V]. c #70543E", "W]. c #755A47", "X]. c #7D6153", "Y]. c #866B60", "Z]. c #92776E", "`]. c #967F77", " ^. c #9E8F88", ".^. c #867D74", "+^. c #80766C", "@^. c #786F60", "#^. c #6E6151", "$^. c #645542", "%^. c #5E4D39", "&^. c #56442C", "*^. c #594223", "=^. c #563722", "-^. c #533624", ";^. c #533626", ">^. c #523429", ",^. c #52342A", "'^. c #51342C", ")^. c #4E362C", "!^. c #4E382D", "~^. c #554136", "{^. c #635145", "]^. c #6E5D53", "^^. c #72665A", "/^. c #776D63", "(^. c #817E77", "_^. c #848580", ":^. c #8B8D8C", "<^. c #8F9297", "[^. c #91959E", "}^. c #9199A6", "|^. c #939BA8", "1^. c #9CA0AB", "2^. c #A1A3AF", "3^. c #A9ADB6", "4^. c #AFBABC", "5^. c #C5D3D6", "6^. c #B7C5C8", "7^. c #AAB8BB", "8^. c #B6C4C7", "9^. c #ACBABD", "0^. c #A3B1B4", "a^. c #C9D2D1", "b^. c #C1C7C7", "c^. c #C5C9C8", "d^. c #C9CECA", "e^. c #CBD0CC", "f^. c #CED0CD", "g^. c #DBDDDA", "h^. c #E1E2DD", "i^. c #D7D8D2", "j^. c #C0BFBA", "k^. c #BABAB2", "l^. c #C3BEB8", "m^. c #C6BFB9", "n^. c #C9C0BB", "o^. c #C8BFBA", "p^. c #C8BDB7", "q^. c #C7BCB6", "r^. c #CABDB5", "s^. c #D0C2B7", "t^. c #C7B5A9", "u^. c #C8B6A8", "v^. c #BBA899", "w^. c #B6A092", "x^. c #B4A192", "y^. c #A9998C", "z^. c #9E989C", "A^. c #A49B9C", "B^. c #A7A493", "C^. c #ADA38A", "D^. c #B4A28E", "E^. c #B8A191", "F^. c #BA9E92", "G^. c #BA9C91", "H^. c #BB9D93", "I^. c #B79B90", "J^. c #B99E95", "K^. c #BEA79F", "L^. c #C0ADA6", "M^. c #C0B6AC", "N^. c #C4BBB2", "O^. c #BDB2AE", "P^. c #C7BBBB", "Q^. c #D3C9CA", "R^. c #CAC4C6", "S^. c #C9C5C6", "T^. c #E0E0E2", "U^. c #DFEEF5", "V^. c #D8E9F1", "W^. c #CFE1EB", "X^. c #CEDFE7", "Y^. c #CDDBDE", "Z^. c #BACACA", "`^. c #B4BEC0", " /. c #B6C0C2", "./. c #B1BBBD", "+/. c #A2B0B0", "@/. c #9AA6A6", "#/. c #99A3A5", "$/. c #9FA4AA", "%/. c #A2A2AA", "&/. c #A2A1A7", "*/. c #A39EA2", "=/. c #928574", "-/. c #7B6D53", ";/. c #6B5B37", ">/. c #675429", ",/. c #604D23", "'/. c #5F4920", ")/. c #624B22", "!/. c #664C27", "~/. c #694C2C", "{/. c #694C2E", "]/. c #6F503B", "^/. c #775846", "//. c #7E6153", "(/. c #85695E", "_/. c #8C7168", ":/. c #957A73", "(. c #A7B1B3", ",(. c #9FAAAC", "'(. c #9BA2A8", ")(. c #A0A5AB", "!(. c #A1A2A7", "~(. c #9D999A", "{(. c #908478", "](. c #66563D", "^(. c #584622", "/(. c #604A21", "((. c #654F28", "_(. c #664E28", ":(. c #634B27", "<(. c #634928", "[(. c #6D4F35", "}(. c #6C4D38", "|(. c #715540", "1(. c #7C5F4F", "2(. c #866A5E", "3(. c #8B7369", "4(. c #8A8074", "5(. c #837769", "6(. c #5B472C", "7(. c #573E20", "8(. c #5A3C22", "9(. c #513529", "0(. c #5D4A3C", "a(. c #635143", "b(. c #67594C", "c(. c #797166", "d(. c #78746B", "e(. c #7D7A73", "f(. c #828280", "g(. c #87888A", "h(. c #888B90", "i(. c #898D96", "j(. c #8B8F9A", "k(. c #8C909B", "l(. c #9A9EA7", "m(. c #A2A9B1", "n(. c #A3AAB2", "o(. c #A7AEB4", "p(. c #ABB9BC", "q(. c #B5C3C6", "r(. c #BAC5C9", "s(. c #C0CACC", "t(. c #BFC7C9", "u(. c #C5CECD", "v(. c #C6CFCE", "w(. c #C7CDCD", "x(. c #BFC5C5", "y(. c #C7CBCA", "z(. c #C6CBC7", "A(. c #D0D5D1", "B(. c #D6D8D5", "C(. c #D6D7D2", "D(. c #CBC7C4", "E(. c #CBC3C0", "F(. c #C6BEBB", "G(. c #C4BDB7", "H(. c #C5BCB7", "I(. c #C4B9B3", "J(. c #C7B9AE", "K(. c #C9B8AE", "L(. c #CCBAAE", "M(. c #C9B6A8", "N(. c #C3B0A2", "O(. c #B5A598", "P(. c #B2A295", "Q(. c #AE9D89", "R(. c #B39E8D", "S(. c #B7A090", "T(. c #BC9E93", "U(. c #C6A8A0", "V(. c #C4A9A2", "W(. c #CBBDB4", "X(. c #C5BCB3", "Y(. c #C6BFB5", "Z(. c #C9C5BC", "`(. c #CDC8C4", " _. c #D4CFCC", "._. c #C9C5C4", "+_. c #D0CCCB", "@_. c #D8D6D7", "#_. c #C0C0C0", "$_. c #B0B4B7", "%_. c #C2C7CB", "&_. c #D2DADD", "*_. c #DDE6ED", "=_. c #D8E3E9", "-_. c #D2DCE5", ";_. c #D2DFE7", ">_. c #D2DFE8", ",_. c #CFDCE4", "'_. c #C8D3D7", ")_. c #BCCACB", "!_. c #BEC8CA", "~_. c #B0B8BB", "{_. c #ACB4B7", "]_. c #9DA5A8", "^_. c #9DA7A9", "/_. c #A0AAAC", "(_. c #A1ABAD", "__. c #A0A8AB", ":_. c #9C9BA0", "<_. c #959396", "[_. c #59482E", "}_. c #644C28", "|_. c #6A522E", "1_. c #6B5130", "2_. c #654A2C", "3_. c #62472A", "4_. c #6B4C37", "5_. c #775C4B", "6_. c #806659", "7_. c #887064", "8_. c #907971", "9_. c #9B8881", "0_. c #897D6F", "a_. c #807363", "b_. c #5C472C", "c_. c #53371F", "d_. c #583D20", "e_. c #523628", "f_. c #553B2E", "g_. c #513B2D", "h_. c #584536", "i_. c #5C4B3B", "j_. c #756B5F", "k_. c #736C62", "l_. c #7E7D79", "m_. c #848484", "n_. c #87888C", "o_. c #878A8F", "p_. c #8A8F95", "q_. c #959AA0", "r_. c #969EA1", "s_. c #9EA5AB", "t_. c #9FA6AC", "u_. c #A0A9AE", "v_. c #A3ACB1", "w_. c #A6AFB4", "x_. c #ADBBBE", "y_. c #AFBABE", "z_. c #B0BBBF", "A_. c #B1BCC0", "B_. c #B3BEC2", "C_. c #B9C4C8", "D_. c #BBC6CA", "E_. c #C2CCCD", "F_. c #CAD4D5", "G_. c #C3CBCD", "H_. c #C4CACA", "I_. c #C3C9C7", "J_. c #CAD0CE", "K_. c #D0D4D3", "L_. c #D1D3D0", "M_. c #CAC9C5", "N_. c #CCC7C3", "O_. c #C8C3BD", "P_. c #C3BAB3", "Q_. c #C2B9B2", "R_. c #C5BBB2", "S_. c #C8BAAF", "T_. c #CBBBAE", "U_. c #CCBAAC", "V_. c #BEAEA1", "W_. c #B9AB9E", "X_. c #B3A59A", "Y_. c #AD9F94", "Z_. c #ACA392", "`_. c #B5A08F", " :. c #B59E90", ".:. c #B69C8F", "+:. c #B99D92", "@:. c #BEA096", "#:. c #C2A49C", "$:. c #CAADA7", "%:. c #CDBEB7", "&:. c #CAC0B7", "*:. c #C4BDB5", "=:. c #C6C6BE", "-:. c #C5C4C0", ";:. c #DBDAD8", ">:. c #CCCCCA", ",:. c #D5D5D3", "':. c #EEEEEE", "):. c #AEB0AF", "!:. c #7F8084", "~:. c #BCC0C3", "{:. c #D8DDE1", "]:. c #E1E6EA", "^:. c #DEE5ED", "/:. c #CED7DE", "(:. c #C8D1DA", "_:. c #CDD6DF", "::. c #CED7E0", "<:. c #C6D1D5", "[:. c #BCCACA", "}:. c #BAC8C8", "|:. c #BDC5C7", "1:. c #B0B5B8", "2:. c #ACB1B4", "3:. c #A5AAAD", "4:. c #9BA3A6", "5:. c #969FA4", "6:. c #A1AAAF", "7:. c #9E9FA4", "8:. c #9C9C9E", "9:. c #877B6B", "0:. c #71654F", "a:. c #685A40", "b:. c #674E2F", "c:. c #684E2D", "d:. c #684D2F", "e:. c #674931", "f:. c #694A35", "g:. c #6B4C3A", "h:. c #7B5E4E", "i:. c #7E6457", "j:. c #89756C", "k:. c #8F7C75", "l:. c #9A9591", "m:. c #786755", "n:. c #604A32", "o:. c #563C23", "p:. c #563B1D", "q:. c #53392A", "r:. c #503929", "s:. c #523B2D", "t:. c #55402F", "u:. c #554233", "v:. c #594838", "w:. c #615444", "x:. c #6D6153", "y:. c #6D655A", "z:. c #726B61", "A:. c #79766F", "B:. c #7F7E7A", "C:. c #838383", "D:. c #868789", "E:. c #898A8F", "F:. c #898C91", "G:. c #8D9296", "H:. c #8F979A", "I:. c #959DA0", "J:. c #98A0A3", "K:. c #9AA4A6", "L:. c #9CA5AA", "M:. c #A6B1B5", "N:. c #A7B2B6", "O:. c #ABBABD", "P:. c #BAC8CB", "Q:. c #C4CED0", "R:. c #CBD5D7", "S:. c #CDD7D8", "T:. c #CCD6D7", "U:. c #C8D1D0", "V:. c #C7CFD1", "W:. c #C7D0CF", "X:. c #C3C9C9", "Y:. c #BCC0BF", "Z:. c #C9C9C7", "`:. c #CFCBC8", " <. c #D1CDCA", ".<. c #CECBC6", "+<. c #C9C2BC", "@<. c #CBC2BB", "#<. c #C8BEB5", "$<. c #CABDB4", "%<. c #CABCB1", "&<. c #CCBCAF", "*<. c #C6B6A9", "=<. c #C3B5A8", "-<. c #BFB1A4", ";<. c #BAACA1", "><. c #AFA695", ",<. c #AEA594", "'<. c #A89C90", ")<. c #AA998F", "!<. c #AE9B8D", "~<. c #B8A193", "{<. c #BA9F94", "]<. c #BB9E96", "^<. c #C8ABA5", "/<. c #CDB1AD", "(<. c #C2BFB8", "_<. c #C2C3BB", ":<. c #C8CBC4", "<<. c #C4C6C3", "[<. c #DADCD9", "}<. c #D1D6D2", "|<. c #D3D8D4", "1<. c #DBDFDE", "2<. c #808485", "3<. c #44484B", "4<. c #9FA4A7", "5<. c #DFE4E8", "6<. c #DAE1E7", "7<. c #CFD6DE", "8<. c #CAD1DB", "9<. c #CBD2DC", "0<. c #C5CCD6", "a<. c #BAC3CA", "b<. c #C4CFD3", "c<. c #BBC9C9", "d<. c #B9C7C7", "e<. c #AFB7B9", "f<. c #A9AEB1", "g<. c #A3A8AC", "h<. c #9AA1A7", "i<. c #999CA3", "j<. c #9D9CA1", "k<. c #A4A2A3", "l<. c #65573D", "m<. c #5B4C2F", "n<. c #5D4C2E", "o<. c #66482C", "p<. c #63452B", "q<. c #664732", "r<. c #6C4D3B", "s<. c #705041", "t<. c #715446", "u<. c #83675C", "v<. c #846C62", "w<. c #88746B", "x<. c #8D7C74", "y<. c #91827B", "z<. c #B0A7A0", "A<. c #837260", "B<. c #7B6955", "C<. c #6A543D", "D<. c #5D472F", "E<. c #594129", "F<. c #5A4228", "G<. c #503719", "H<. c #513819", "I<. c #52391A", "J<. c #563C1B", "K<. c #553A29", "L<. c #513A28", "M<. c #523B2B", "N<. c #615443", "O<. c #655C4D", "P<. c #6C6459", "Q<. c #756E64", "R<. c #827E7B", "S<. c #848381", "T<. c #888689", "U<. c #898A8C", "V<. c #868B8E", "W<. c #889092", "X<. c #8E9698", "Y<. c #939B9D", "Z<. c #969EA0", "`<. c #9AA2A5", " [. c #A1ACAE", ".[. c #A6B4B7", "+[. c #B2BBC0", "@[. c #B8C1C6", "#[. c #B5C4CB", "$[. c #C5D0D4", "%[. c #C5C7C4", "&[. c #C8C7C5", "*[. c #CAC9C7", "=[. c #CECDC9", "-[. c #D2CFCA", ";[. c #CFCAC4", ">[. c #CEC7BF", ",[. c #C9C2BA", "'[. c #CCC3BA", ")[. c #C9BFB5", "![. c #C6BAAE", "~[. c #CBBDB2", "{[. c #C4B6A9", "][. c #C2B4A7", "^[. c #BEB0A3", "/[. c #B4A89C", "([. c #A5A59B", "_[. c #A99C8C", ":[. c #A89A8D", "<[. c #A99B8E", "[[. c #B99E93", "}[. c #BDA098", "|[. c #C0A39B", "1[. c #C4A7A1", "2[. c #CAB2AE", "3[. c #C9BCB6", "4[. c #CBC2BD", "5[. c #C6C3BC", "6[. c #C1C2BC", "7[. c #C7CAC3", "8[. c #CED3CD", "9[. c #B6BCBA", "0[. c #BEC4C2", "a[. c #CED4D2", "b[. c #D2D8D8", "c[. c #909696", "d[. c #5C6164", "e[. c #9A9FA2", "f[. c #DCE1E5", "g[. c #DADFE3", "h[. c #D6DBE1", "i[. c #D2D7DD", "j[. c #CCD0D9", "k[. c #C3CCD1", "l[. c #BFCBCB", "m[. c #ABB0B3", "n[. c #AAAFB2", "o[. c #ABAFB2", "p[. c #A6ABAF", "q[. c #9C9FA6", "r[. c #959499", "s[. c #A19FA0", "t[. c #5E4D31", "u[. c #624B2B", "v[. c #654A2F", "w[. c #674730", "x[. c #654530", "y[. c #664532", "z[. c #6A4938", "A[. c #725245", "B[. c #7A5A4F", "C[. c #7E6056", "D[. c #876C65", "E[. c #8A736D", "F[. c #93908B", "G[. c #9B9187", "H[. c #968A7E", "I[. c #8C7C6C", "J[. c #857462", "K[. c #7D6B57", "L[. c #725D48", "M[. c #644E37", "N[. c #5F4630", "O[. c #604830", "P[. c #584028", "Q[. c #50381C", "R[. c #4E3718", "S[. c #503718", "T[. c #513917", "U[. c #563B28", "V[. c #543A29", "W[. c #4D3825", "X[. c #493723", "Y[. c #625745", "Z[. c #685F50", "`[. c #726A5D", " }. c #7A7369", ".}. c #7F7A74", "+}. c #85807C", "@}. c #828687", "#}. c #848D8C", "$}. c #8C9194", "%}. c #90989A", "&}. c #98A0A2", "*}. c #9EA9AB", "=}. c #A2ADB1", "-}. c #A8B6B9", ";}. c #AAB5B9", ">}. c #B9C2C7", ",}. c #BEC7CC", "'}. c #BFCED5", ")}. c #B7C8CF", "!}. c #B2C3CA", "~}. c #B3C4CB", "{}. c #B3C0C6", "]}. c #BFCACE", "^}. c #CFD9DB", "/}. c #CED8DA", "(}. c #C9D1D3", "_}. c #BFC3C2", ":}. c #C1C1BF", "<}. c #D3D3D1", "[}. c #D7D6D2", "}}. c #CBC6C0", "|}. c #CBC4BC", "1}. c #C7BEB5", "2}. c #C7BDB1", "3}. c #C9BDB1", "4}. c #C2B6A8", "5}. c #BDAFA2", "6}. c #B8ACA0", "7}. c #B1A8A1", "8}. c #B2A9A2", "9}. c #ADA08F", "0}. c #A7998C", "a}. c #B5A196", "b}. c #BBA399", "c}. c #B99C94", "d}. c #BDA09A", "e}. c #C5AAA3", "f}. c #CCB0AC", "g}. c #CCB4B0", "h}. c #C6B3AF", "i}. c #C6BDB8", "j}. c #C8C3BF", "k}. c #C4C5BF", "l}. c #C1C6C0", "m}. c #C9D0C9", "n}. c #D2DBD6", "o}. c #B2BBB8", "p}. c #818C88", "q}. c #9CA5A2", "r}. c #CDD6D3", "s}. c #DFE8E7", "t}. c #CDD5D7", "u}. c #DBE0E4", "v}. c #D5DADE", "w}. c #D0D5DB", "x}. c #CFD2DB", "y}. c #CACDD6", "z}. c #C7CAD3", "A}. c #C5CAD0", "B}. c #C2CCCE", "C}. c #C2CECE", "D}. c #B8C2C3", "E}. c #B1BBBC", "F}. c #A8ADB0", "G}. c #A4A9AC", "H}. c #A6ABAE", "I}. c #A7ABAE", "J}. c #A4A8AB", "K}. c #A3A6AD", "L}. c #9C9CA4", "M}. c #9C9A9D", "N}. c #A7A3A2", "O}. c #8A7E70", "P}. c #6C5D46", "Q}. c #5D4A2C", "R}. c #604C2B", "S}. c #685431", "T}. c #684F30", "U}. c #684A30", "V}. c #6A4A35", "W}. c #6C4B38", "X}. c #6D4C3D", "Y}. c #6F4D41", "Z}. c #76554C", "`}. c #7F6159", " |. c #866965", ".|. c #886F6B", "+|. c #8A7969", "@|. c #786350", "#|. c #695240", "$|. c #5B4530", "%|. c #59432B", "&|. c #503B1C", "*|. c #4D3616", "=|. c #4E3715", "-|. c #543D1B", ";|. c #573F1D", ">|. c #593E20", ",|. c #55371D", "'|. c #53351B", ")|. c #553A27", "!|. c #543B27", "~|. c #513C27", "{|. c #584934", "]|. c #635645", "^|. c #6D6151", "/|. c #70665A", "(|. c #786F66", "_|. c #857C75", ":|. c #878988", "<|. c #868C8A", "[|. c #898D8E", "}|. c #8B9191", "||. c #8F9595", "1|. c #939C9B", "2|. c #99A1A3", "3|. c #9DA5A7", "4|. c #9EA6A9", "5|. c #A0ABAF", "6|. c #9FAAAE", "7|. c #A8B3B9", "8|. c #ADB8BE", "9|. c #ABBCC3", "0|. c #B1C4CB", "a|. c #BACBD3", "b|. c #BBCCD3", "c|. c #B4C5CC", "d|. c #BFCDD0", "e|. c #C2CDD1", "f|. c #B4B8B7", "g|. c #B0B2B1", "h|. c #A2A4A1", "i|. c #EBECE7", "j|. c #DBDAD6", "k|. c #D7D4CF", "l|. c #D0CDC6", "m|. c #B5B1A8", "n|. c #BEB7AF", "o|. c #CDC4BB", "p|. c #C0B7AE", "q|. c #C1B9AE", "r|. c #C8BEB4", "s|. c #B6ACA0", "t|. c #C7BBAD", "u|. c #C3B7A7", "v|. c #BFB3A5", "w|. c #BDB1A3", "x|. c #BCAEA1", "y|. c #B4A69B", "z|. c #AAA79E", "A|. c #A9A69D", "B|. c #B0A39A", "C|. c #AFA395", "D|. c #B0A18E", "E|. c #B5A395", "F|. c #BCA19A", "G|. c #C0A59E", "H|. c #C6AAA6", "I|. c #CDB8B3", "J|. c #CDBBB7", "K|. c #CABCB9", "L|. c #C8BEBC", "M|. c #C3BEBA", "N|. c #BFBEBA", "O|. c #C3C5C0", "P|. c #C9CFCB", "Q|. c #CBD4CF", "R|. c #C8D3CF", "S|. c #B2BDB9", "T|. c #939F9D", "U|. c #D9E3E2", "V|. c #C7D1D2", "W|. c #D5DFE0", "X|. c #EAF4F5", "Y|. c #D3DBDE", "Z|. c #CCD4D7", "`|. c #C5C8CF", " 1. c #C4C7CE", ".1. c #C8CDD3", "+1. c #BDC7C9", "@1. c #BAC4C3", "#1. c #B2BBBA", "$1. c #B0B6B6", "%1. c #ABAFB0", "&1. c #A6AAAB", "*1. c #A4A8A9", "=1. c #A2A6A7", "-1. c #A1A2A4", ";1. c #9FA0A4", ">1. c #9D9DA5", ",1. c #9C9BA3", "'1. c #9B9A9F", ")1. c #9D9B9E", "!1. c #9B9692", "~1. c #68573D", "{1. c #665231", "]1. c #644D2B", "^1. c #624C27", "/1. c #684738", "(1. c #6A483C", "_1. c #6F4E45", ":1. c #7A5954", "<1. c #856663", "[1. c #8B6F6E", "}1. c #8C7474", "|1. c #94807F", "11. c #9A8A8A", "21. c #9F9E99", "31. c #A0A199", "41. c #9E9F97", "51. c #AFA59C", "61. c #AFA69D", "71. c #8E7C6E", "81. c #877465", "91. c #725B4B", "01. c #65503D", "a1. c #614D35", "b1. c #58442B", "c1. c #513A1A", "d1. c #523B19", "e1. c #563E1C", "f1. c #583D1F", "g1. c #55371F", "h1. c #563A25", "i1. c #543B25", "j1. c #594A35", "k1. c #695D4D", "l1. c #73675B", "m1. c #7F756B", "n1. c #877C76", "o1. c #84837F", "p1. c #848683", "q1. c #878B8A", "r1. c #8C908F", "s1. c #919797", "t1. c #989E9E", "u1. c #9DA2A5", "v1. c #9BA0A4", "w1. c #9CA4A7", "x1. c #9FA8AD", "y1. c #B2C1C8", "z1. c #B5C8CF", "A1. c #BBCCD4", "B1. c #B5C6CD", "C1. c #B8C7CE", "D1. c #C3CED2", "E1. c #C5CFD1", "F1. c #B8BEBE", "G1. c #959998", "H1. c #868A89", "I1. c #9D9F9C", "J1. c #BBBBB9", "K1. c #DEDDD9", "L1. c #E0DFDA", "M1. c #E5E2DB", "N1. c #DED9D3", "O1. c #BBB4AA", "P1. c #B9B2A8", "Q1. c #C5BDB2", "R1. c #C7BEAF", "S1. c #C5B9A9", "T1. c #C0B4A6", "U1. c #C0B2A5", "V1. c #B4A699", "W1. c #B3A598", "X1. c #A8978D", "Y1. c #ADA3A2", "Z1. c #AC9F8C", "`1. c #AE9F8C", " 2. c #B1A28F", ".2. c #B3A193", "+2. c #B39F94", "@2. c #BBA49C", "#2. c #BFA6A1", "$2. c #C3AAA5", "%2. c #C7AFAB", "&2. c #CAB5B0", "*2. c #CCB9B5", "=2. c #C6BCBA", "-2. c #C5C0BD", ";2. c #CBCDCA", ">2. c #C1C7C3", ",2. c #B8C1BE", "'2. c #C2CECA", ")2. c #D5E1DF", "!2. c #D2DEDC", "~2. c #C6D2D0", "{2. c #CDD9D7", "]2. c #DBE7E5", "^2. c #DAE4E5", "/2. c #DBE5E6", "(2. c #DCE6E7", "_2. c #C6CED1", ":2. c #C7CCD0", "<2. c #CACFD3", "[2. c #C9CED4", "}2. c #C3C6CD", "|2. c #B8C2C1", "12. c #B9C3C2", "22. c #BBC4C3", "32. c #B9C2C1", "42. c #ADB3B3", "52. c #AAAEAF", "62. c #A3A4A6", "72. c #A0A1A3", "82. c #9D9BA0", "92. c #6E5F4A", "02. c #624F31", "a2. c #624D2E", "b2. c #624A26", "c2. c #614925", "d2. c #644A29", "e2. c #694A38", "f2. c #6E4C40", "g2. c #715146", "h2. c #77564F", "i2. c #7F605D", "j2. c #8A6C6C", "k2. c #907375", "l2. c #91787B", "m2. c #978486", "n2. c #9FA098", "o2. c #A0A39A", "p2. c #9EA095", "q2. c #988E8F", "r2. c #9B908E", "s2. c #988A7F", "t2. c #958377", "u2. c #917E70", "v2. c #897667", "w2. c #7E685A", "x2. c #745F4E", "y2. c #544123", "z2. c #513C1D", "A2. c #523B1B", "B2. c #553C1D", "C2. c #573720", "D2. c #46351B", "E2. c #615141", "F2. c #6C5C4D", "G2. c #827970", "H2. c #817E79", "I2. c #80817C", "J2. c #838381", "K2. c #858784", "L2. c #888A87", "M2. c #8E908F", "N2. c #969799", "O2. c #979B9E", "P2. c #989DA0", "Q2. c #9CA1A5", "R2. c #B6C5CC", "S2. c #B8C9D0", "T2. c #BACBD2", "U2. c #C6CED0", "V2. c #A7ADAD", "W2. c #777D7D", "X2. c #636766", "Y2. c #8C918D", "Z2. c #B4B6B1", "`2. c #BFC0BB", " 3. c #DAD9D4", ".3. c #CFCFC7", "+3. c #C6C3BA", "@3. c #D8D4CB", "#3. c #CECAC1", "$3. c #BCB8AF", "%3. c #CFC9BD", "&3. c #C7BBAB", "*3. c #C4B8A8", "=3. c #C3B6A6", "-3. c #C2B5A5", ";3. c #BFB2A2", ">3. c #BDB0A0", ",3. c #BDAD9E", "'3. c #B0A093", ")3. c #A6988B", "!3. c #AEA4A3", "~3. c #B3A290", "{3. c #B3A091", "]3. c #B9A698", "^3. c #BBA79C", "/3. c #B9A59C", "(3. c #C2ADA8", "_3. c #C6B3AD", ":3. c #CAB7B3", "<3. c #C9BEBA", "[3. c #BEBAB7", "}3. c #BCBCBA", "|3. c #ABB4B1", "13. c #9AA6A4", "23. c #B0BFBC", "33. c #D8E6E6", "43. c #DAE6E6", "53. c #DDE9E9", "63. c #CCD8D8", "73. c #C7D3D3", "83. c #D4E0E0", "93. c #CAD6D6", "03. c #BDC7C8", "a3. c #C8D2D3", "b3. c #C0C8CB", "c3. c #C1C6CA", "d3. c #C2CACD", "e3. c #BFC9CB", "f3. c #BECACA", "g3. c #B6C1BD", "h3. c #B9C2BF", "i3. c #B7C0BD", "j3. c #B2B8B6", "k3. c #ADB1B0", "l3. c #ABAFAE", "m3. c #A8ACAB", "n3. c #A9ABAA", "o3. c #A7A9A8", "p3. c #A3A5A4", "q3. c #A1A1A1", "r3. c #A09EA1", "s3. c #A29E9D", "t3. c #807464", "u3. c #726650", "v3. c #625239", "w3. c #5D4C30", "x3. c #614A2A", "y3. c #634B29", "z3. c #624825", "A3. c #6E513F", "B3. c #765649", "C3. c #7A5C52", "D3. c #81625D", "E3. c #896B69", "F3. c #917476", "G3. c #967B80", "H3. c #978184", "I3. c #9E8B8D", "J3. c #A1A29A", "K3. c #A1A499", "L3. c #A0A297", "M3. c #9D8F86", "N3. c #9B8A80", "O3. c #9A887C", "P3. c #988479", "Q3. c #927F71", "R3. c #7D6A5B", "S3. c #746351", "T3. c #523D1E", "U3. c #543B1D", "V3. c #594834", "W3. c #635242", "X3. c #6F5F50", "Y3. c #82756C", "Z3. c #827B75", "`3. c #807F7B", " 4. c #8A8A88", ".4. c #929292", "+4. c #97989A", "@4. c #95969A", "#4. c #97989C", "$4. c #9C9FA4", "%4. c #A3A6AF", "&4. c #B6C7CE", "*4. c #C3CDCE", "=4. c #D7E1E2", "-4. c #CED8D9", ";4. c #D2DADC", ">4. c #ADB5B7", ",4. c #797F7F", "'4. c #7A807E", ")4. c #747975", "!4. c #818380", "~4. c #A8A9A4", "{4. c #BCBDB7", "]4. c #D9D6CF", "^4. c #D6D3CA", "/4. c #D1CAC0", "(4. c #C9C0B1", "_4. c #C9BDAD", ":4. c #C1B4A4", "<4. c #BEAC9E", "[4. c #B8A698", "}4. c #AD9B8D", "|4. c #AA988A", "14. c #A99789", "24. c #A89889", "34. c #ACA2A1", "44. c #B4A38F", "54. c #B7A493", "64. c #B6A392", "74. c #BAA798", "84. c #C6B0A3", "94. c #C3B0AA", "04. c #C3B4AF", "a4. c #C9BFBD", "b4. c #C5C0BC", "c4. c #C3BFBC", "d4. c #BBC1BF", "e4. c #AFB9B8", "f4. c #9DA9A7", "g4. c #99A7A7", "h4. c #B6C6C5", "i4. c #D9E9E8", "j4. c #CEDADA", "k4. c #C1CBCC", "l4. c #C1CBCD", "m4. c #B7C3C3", "n4. c #B8C3BF", "o4. c #B5BEBB", "p4. c #B3B9B7", "q4. c #AFB5B3", "r4. c #A9ADAC", "s4. c #A7ABAA", "t4. c #A6A8A7", "u4. c #A1A3A2", "v4. c #9E9E9E", "w4. c #A5A09D", "x4. c #7F7665", "y4. c #6E624C", "z4. c #5F4828", "A4. c #674D2C", "B4. c #674A28", "C4. c #684B29", "D4. c #6C4F31", "E4. c #6F533D", "F4. c #735847", "G4. c #7C6052", "H4. c #84685D", "I4. c #8B6E6A", "J4. c #927675", "K4. c #987E81", "L4. c #9C8387", "M4. c #A0898F", "N4. c #A69397", "O4. c #A3A59A", "P4. c #A3A799", "Q4. c #A1A396", "R4. c #93948F", "S4. c #9F8E86", "T4. c #9E8C82", "U4. c #968277", "V4. c #7B695B", "W4. c #706050", "X4. c #675644", "Y4. c #513F27", "Z4. c #7F766F", "`4. c #817C78", " 5. c #87827E", ".5. c #888580", "+5. c #949295", "@5. c #949297", "#5. c #98979D", "$5. c #9C9BA1", "%5. c #A0A0AA", "&5. c #B5BAC0", "*5. c #B7BCC2", "=5. c #B6BBC1", "-5. c #B8BDC3", ";5. c #BEC9CD", ">5. c #999F9D", ",5. c #787D79", "'5. c #676C68", ")5. c #81837E", "!5. c #B1B2AC", "~5. c #C7C8C0", "{5. c #BEBEB6", "]5. c #C3C3BB", "^5. c #D0D0C8", "/5. c #CDC9BE", "(5. c #CCC5B5", "_5. c #CCC3B2", ":5. c #CCC0B0", "<5. c #C8BCAC", "[5. c #C5B8A8", "}5. c #C2B2A2", "|5. c #C1B1A1", "15. c #BFAE9E", "25. c #C0AD9E", "35. c #B5A293", "45. c #B19E8F", "55. c #AC998A", "65. c #AB988A", "75. c #B2A59F", "85. c #B19F93", "95. c #B2A18F", "05. c #B5A38F", "a5. c #BEA89A", "b5. c #C5AFA1", "c5. c #C9B1A5", "d5. c #C4B5AE", "e5. c #C3B8B4", "f5. c #C7C2BE", "g5. c #C5C1BE", "h5. c #C1C2BD", "i5. c #C4CAC8", "j5. c #BFC9C8", "k5. c #B2BEBE", "l5. c #D5E5E5", "m5. c #DCECEC", "n5. c #D0DADC", "o5. c #CDD7D9", "p5. c #C0CCCC", "q5. c #B5C1C1", "r5. c #BDC7C6", "s5. c #BBC4C1", "t5. c #ACB2B0", "u5. c #AAAEAD", "v5. c #A8AAA9", "w5. c #A2A4A3", "x5. c #9A9A98", "y5. c #817867", "z5. c #5F5137", "A5. c #614E30", "B5. c #5F4B2A", "C5. c #674F2D", "D5. c #6B4E2E", "E5. c #6A4B2C", "F5. c #6C4D2E", "G5. c #705236", "H5. c #745A43", "I5. c #79604C", "J5. c #83695A", "K5. c #8C7166", "L5. c #937773", "M5. c #987E7D", "N5. c #9F8489", "O5. c #A59097", "P5. c #A9999C", "Q5. c #AB9F9F", "R5. c #A4A699", "S5. c #A4A899", "T5. c #A2A496", "U5. c #959490", "V5. c #949590", "W5. c #A08F87", "X5. c #9A867D", "Y5. c #947D75", "Z5. c #8C786D", "`5. c #857367", " 6. c #7C6C5D", ".6. c #746353", "+6. c #6A5947", "@6. c #534129", "#6. c #563621", "$6. c #4E391E", "%6. c #54422E", "&6. c #6C5A4C", "*6. c #756B62", "=6. c #7C756F", "-6. c #867E7B", ";6. c #8A8280", ">6. c #888380", ",6. c #8D8789", "'6. c #928D93", ")6. c #918F94", "!6. c #969198", "~6. c #99969D", "{6. c #9D9AA5", "]6. c #9D9BA6", "^6. c #9C99A4", "/6. c #B4B9BF", "(6. c #C2CACC", "_6. c #C2CBCA", ":6. c #CED9DB", "<6. c #BAC0BE", "[6. c #606561", "}6. c #787A75", "|6. c #989993", "16. c #B9B9B1", "26. c #C2C0B4", "36. c #CDC5B8", "46. c #CFC6B5", "56. c #D0C4B4", "66. c #C4B7A7", "76. c #C5B5A5", "86. c #C4B3A3", "96. c #BFAC9D", "06. c #BDAA9B", "a6. c #C0AA9C", "b6. c #B39D8F", "c6. c #AD998E", "d6. c #B1A29D", "e6. c #B3A292", "f6. c #B5A492", "g6. c #B6A593", "h6. c #BBA995", "i6. c #BEAC98", "j6. c #C0AB9A", "k6. c #BDA897", "l6. c #BFA99B", "m6. c #C7AFA3", "n6. c #C5BAB4", "o6. c #C4C1BC", "p6. c #C3C2BE", "q6. c #BECAC8", "r6. c #B5C5C4", "s6. c #DDEDED", "t6. c #DDEFF1", "u6. c #CEDDE0", "v6. c #D6E1E5", "w6. c #CAD4D6", "x6. c #BCC5C4", "y6. c #B3BCB9", "z6. c #B1B7B5", "A6. c #ADB3B1", "B6. c #AAB0AE", "C6. c #A6AAA9", "D6. c #A5A7A6", "E6. c #9FA1A0", "F6. c #9B9B9B", "G6. c #999896", "H6. c #6A4D2D", "I6. c #704E32", "J6. c #74563A", "K6. c #7B634B", "L6. c #7E6954", "M6. c #887362", "N6. c #907A6D", "O6. c #987F7A", "P6. c #9E8684", "Q6. c #A48B8F", "R6. c #A68F95", "S6. c #A8939A", "T6. c #AC9C9F", "U6. c #ADA1A1", "V6. c #A5A698", "W6. c #A5A897", "X6. c #A4A595", "Y6. c #989793", "Z6. c #A28F88", "`6. c #938175", " 7. c #918174", ".7. c #847767", "+7. c #7B6B5C", "@7. c #726252", "#7. c #573623", "$7. c #54341F", "%7. c #573E1F", "&7. c #55402D", "*7. c #5C4A3C", "=7. c #665951", "-7. c #706762", ";7. c #7F7671", ">7. c #8B8285", ",7. c #8E878E", "'7. c #8E898F", ")7. c #938C94", "!7. c #9E98A4", "~7. c #9C96A4", "{7. c #BEC6C8", "]7. c #D0DADB", "^7. c #D3DCDB", "/7. c #DEE4E2", "(7. c #AAAFAB", "_7. c #838884", ":7. c #6F716C", "<7. c #787B74", "[7. c #898A84", "}7. c #999A94", "|7. c #AFAFA7", "17. c #C7BFB2", "27. c #C9C0AF", "37. c #C6B9A8", "47. c #C3B6A5", "57. c #C7B6A4", "67. c #BFAC9B", "77. c #C1AC9B", "87. c #C3AE9D", "97. c #C4AD9D", "07. c #C3AC9C", "a7. c #BBA494", "b7. c #BAA393", "c7. c #AC9A90", "d7. c #AEA4A2", "e7. c #B09D96", "f7. c #BAA796", "g7. c #BFAA97", "h7. c #C3AE9B", "i7. c #C4AF9C", "j7. c #CCB5A7", "k7. c #CFB7AB", "l7. c #C2C1BC", "m7. c #C0C5C1", "n7. c #C0CBC7", "o7. c #B9C5C3", "p7. c #B9C8C5", "q7. c #B8C6C6", "r7. c #C6D5D8", "s7. c #D2E4E6", "t7. c #C3D2D5", "u7. c #D7E0E5", "v7. c #DEE5EB", "w7. c #D1D8DE", "x7. c #C5CCD2", "y7. c #BCC8C8", "z7. c #B4C2C2", "A7. c #B4C3C0", "B7. c #BBCBC8", "C7. c #BFCECB", "D7. c #B2B8B4", "E7. c #B0B6B2", "F7. c #AFB5B1", "G7. c #AEB4B0", "H7. c #ADB2AE", "I7. c #A8AAA7", "J7. c #A4A6A3", "K7. c #A0A29F", "L7. c #9EA09D", "M7. c #9F9F9D", "N7. c #9E9E9C", "O7. c #9B9B99", "P7. c #9A9995", "Q7. c #979185", "R7. c #898174", "S7. c #5E533D", "T7. c #53472D", "U7. c #56482B", "V7. c #5E4E2D", "W7. c #624B29", "X7. c #644C2A", "Y7. c #6B4E30", "Z7. c #6D4E31", "`7. c #765439", " 8. c #7D5F45", ".8. c #826C54", "+8. c #8D7A69", "@8. c #948173", "#8. c #A18C89", "$8. c #A89295", "%8. c #AC959B", "&8. c #A9949B", "*8. c #A5A895", "=8. c #ABA79C", "-8. c #8A7C6F", ";8. c #7C6E61", ">8. c #564028", ",8. c #52341C", "'8. c #5B3D23", ")8. c #5B3D21", "!8. c #593E21", "~8. c #583F21", "{8. c #55432F", "]8. c #5D4B41", "^8. c #695A53", "/8. c #7B6C65", "(8. c #857872", "_8. c #887A77", ":8. c #877C7A", "<8. c #8A807F", "[8. c #8B8589", "}8. c #8F888F", "|8. c #9B98A1", "18. c #90939A", "28. c #A2A5AC", "38. c #ABAEB5", "48. c #A7AAB1", "58. c #B5BABE", "68. c #B4B9BD", "78. c #B6BBBF", "88. c #C1C6C9", "98. c #C3C8CB", "08. c #D1DCDE", "a8. c #D3DDDE", "b8. c #CED7D6", "c8. c #E1E7E7", "d8. c #DDE3E1", "e8. c #929793", "f8. c #5E605D", "g8. c #C3C4BE", "h8. c #BAB6AB", "i8. c #BFB9AD", "j8. c #C2BAAF", "k8. c #BEB4A8", "l8. c #BFB3A7", "m8. c #C1B5A7", "n8. c #C7B7A8", "o8. c #C6B5A5", "p8. c #C8B5A6", "q8. c #C7B2A1", "r8. c #C1AA9A", "s8. c #C0A999", "t8. c #BDA698", "u8. c #B6A093", "v8. c #AC9B91", "w8. c #AEA7A1", "x8. c #AFA7A4", "y8. c #B1A29F", "z8. c #B2A3A0", "A8. c #B0A19E", "B8. c #AE9F9C", "C8. c #B3A092", "D8. c #BCA998", "E8. c #BEAB9A", "F8. c #C1AE9D", "G8. c #C5B2A3", "H8. c #CBB8AA", "I8. c #D4C1B3", "J8. c #D9C5BA", "K8. c #C9C4BE", "L8. c #BEC4C0", "M8. c #BFC8C3", "N8. c #C1CCC8", "O8. c #C1CFCF", "P8. c #C3D3D2", "Q8. c #C7D7D7", "R8. c #C8D8D8", "S8. c #DCE3E9", "T8. c #9BA5A7", "U8. c #B0BEBE", "V8. c #B2C0C0", "W8. c #BCCBC8", "X8. c #BFCDCD", "Y8. c #B0B9B6", "Z8. c #ADB6B3", "`8. c #AEB2B1", " 9. c #ACB0AF", ".9. c #ADAFAE", "+9. c #A5A5A5", "@9. c #A2A2A0", "#9. c #9F9E9C", "$9. c #9D9C98", "%9. c #938876", "&9. c #7D705F", "*9. c #685944", "=9. c #5A4A31", "-9. c #58472D", ";9. c #634E2F", ">9. c #654E2F", ",9. c #6A4F32", "'9. c #6E5036", ")9. c #705238", "!9. c #7B5B44", "~9. c #836751", "{9. c #87725D", "]9. c #897866", "^9. c #9E8A83", "/9. c #AB9597", "(9. c #AF9B9D", "_9. c #A89599", ":9. c #A5A394", "<9. c #ACA89D", "[9. c #9D9191", "}9. c #999490", "|9. c #84776E", "19. c #7C7064", "29. c #6F6251", "39. c #635441", "49. c #594127", "59. c #51381A", "69. c #553B1A", "79. c #573D26", "89. c #584026", "99. c #554021", "09. c #5E4437", "a9. c #6C5448", "b9. c #796358", "c9. c #806C63", "d9. c #827169", "e9. c #83746F", "f9. c #817672", "g9. c #8E898D", "h9. c #8D8E93", "i9. c #93939B", "j9. c #A8A9AE", "k9. c #ABACB1", "l9. c #A8ABB0", "m9. c #AAADB2", "n9. c #AFB3B6", "o9. c #AFB4B7", "p9. c #B1B6B9", "q9. c #B0B8BA", "r9. c #C3CBCE", "s9. c #C7D2D6", "t9. c #DDE7E9", "u9. c #9EA8A9", "v9. c #868E90", "w9. c #7F8789", "x9. c #818787", "y9. c #B5B3B4", "z9. c #B4B0AF", "A9. c #B9B5B4", "B9. c #BDB8B5", "C9. c #BDB5B2", "D9. c #BFB6B1", "E9. c #BEB1A9", "F9. c #C0B2A9", "G9. c #BFAEA4", "H9. c #C0AD9F", "I9. c #C6B3A5", "J9. c #C8B2A4", "K9. c #C4AF9E", "L9. c #BCAB99", "M9. c #B8A797", "N9. c #AB9D90", "O9. c #AAA2A0", "P9. c #A9A49E", "Q9. c #B1A3A2", "R9. c #AEA498", "S9. c #B0A19A", "T9. c #B09C91", "U9. c #B69F91", "V9. c #BBA597", "W9. c #C4B2A4", "X9. c #B9A99A", "Y9. c #BDADA0", "Z9. c #C7BBAF", "`9. c #CABEB2", " 0. c #C7BDB3", ".0. c #B9BBB6", "+0. c #C5CEC9", "@0. c #BFCAC4", "#0. c #BAC5C1", "$0. c #C1CDC9", "%0. c #C6D2CE", "&0. c #C5D1CD", "*0. c #CBD7D5", "=0. c #D0DFDC", "-0. c #D4E3E0", ";0. c #D1E0DD", ">0. c #CAD9D6", ",0. c #9AA5A7", "'0. c #BCC1C5", ")0. c #ABB5B4", "!0. c #A7B0AF", "~0. c #B0B3B8", "{0. c #B0AFB5", "]0. c #ADABB0", "^0. c #ADA8AC", "/0. c #A29C9E", "(0. c #A39384", "_0. c #9A8872", ":0. c #877159", "<0. c #715B43", "[0. c #695139", "}0. c #674B33", "|0. c #65472F", "10. c #674834", "20. c #6A4E39", "30. c #765B48", "40. c #826756", "50. c #8C7263", "60. c #8E7B74", "70. c #A08D87", "80. c #B09E9C", "90. c #9C8F87", "00. c #A09292", "a0. c #9F9191", "b0. c #7E7266", "c0. c #75695B", "d0. c #5E4F3C", "e0. c #4F3A1D", "f0. c #553B18", "g0. c #523724", "h0. c #523923", "i0. c #553E1F", "j0. c #5D4030", "k0. c #674A3C", "l0. c #705649", "m0. c #775F53", "n0. c #7D695E", "o0. c #867973", "p0. c #827974", "q0. c #87827F", "r0. c #8A8889", "s0. c #8B8C8E", "t0. c #92979B", "u0. c #939AA0", "v0. c #91989E", "w0. c #9B9CA1", "x0. c #A2A3A8", "y0. c #A5A6AB", "z0. c #A3A6AB", "A0. c #B0B9B8", "B0. c #B2BCBB", "C0. c #BEC5CB", "D0. c #C0C7CD", "E0. c #C1C8CE", "F0. c #BFC8CD", "G0. c #CFDADE", "H0. c #D4DFE3", "I0. c #9EA9AD", "J0. c #7F888D", "K0. c #999A9F", "L0. c #A6A5AA", "M0. c #BAB8BB", "N0. c #C4C0C1", "O0. c #C5BDBB", "P0. c #CBC0BC", "Q0. c #CEC1BB", "R0. c #BAA997", "S0. c #B8A795", "T0. c #B9A898", "U0. c #B8A898", "V0. c #B7A797", "W0. c #B1A494", "X0. c #B0A5A3", "Y0. c #B2A19A", "Z0. c #B2A199", "`0. c #AE9D93", " a. c #BFA596", ".a. c #C3B0A1", "+a. c #C5B3A5", "@a. c #BDB0A7", "#a. c #C6BDB4", "$a. c #C4BDB3", "%a. c #C0BCB3", "&a. c #C3BFB6", "*a. c #BCC5C0", "=a. c #BFCBC7", "-a. c #C0CCC8", ";a. c #BDC9C5", ">a. c #BECAC6", ",a. c #C9D5D1", "'a. c #CEDAD6", ")a. c #D3DFDB", "!a. c #D2DEDA", "~a. c #B3C2BF", "{a. c #A0B0B0", "]a. c #ABBBBB", "^a. c #B6C4C5", "/a. c #AFBDBE", "(a. c #AAB8B9", "_a. c #B7BCC0", ":a. c #B8BBC0", "b. c #ACA696", ",b. c #B1A49E", "'b. c #B3A49D", ")b. c #C3A998", "!b. c #C7AD9E", "~b. c #C9B2A2", "{b. c #CAB4A6", "]b. c #C7B4A5", "^b. c #C3B1A3", "/b. c #BAAEA2", "(b. c #C3B9AF", "_b. c #CCC5BD", ":b. c #C4BFB9", "c. c #9D9EA3", ",c. c #AFAEB3", "'c. c #BDBBBE", ")c. c #C6C2C3", "!c. c #BFB7B4", "~c. c #BBB0AA", "{c. c #C0B1AA", "]c. c #C6B8AB", "^c. c #C2B2A3", "/c. c #B4A495", "(c. c #AC9C8C", "_c. c #AB9E8E", ":c. c #A89F90", "d. c #97A1A0", ",d. c #98A2A1", "'d. c #96A09F", ")d. c #9AA3A2", "!d. c #A0A9A8", "~d. c #9CA5A4", "{d. c #A6AFAE", "]d. c #B3B8BB", "^d. c #CBD6DA", "/d. c #CDD8DC", "(d. c #D1DCE2", "_d. c #E1EAF3", ":d. c #D8E1EA", "e. c #CCD7DB", ",e. c #DDE7F1", "'e. c #E5EFF9", ")e. c #A1A4A9", "!e. c #989C9F", "~e. c #B4B4B6", "{e. c #BCBCBC", "]e. c #C7C3C2", "^e. c #CBC7C6", "/e. c #CDC8C5", "(e. c #CBC3C1", "_e. c #BEB6B3", ":e. c #BFB6AF", "f. c #A1AAA9", ",f. c #A8AEAE", "'f. c #C0CDD6", ")f. c #CFDBE7", "!f. c #DCE8F4", "~f. c #D4DEE8", "{f. c #CAD3DC", "]f. c #A4A7AC", "^f. c #AAAEB1", "/f. c #BABABC", "(f. c #C4C2C3", "_f. c #CCCBC9", ":f. c #C9C5C2", "g. c #828C84", ",g. c #809086", "'g. c #88958E", ")g. c #909D96", "!g. c #919E97", "~g. c #8F9B97", "{g. c #AAB1B7", "]g. c #C6D4DD", "^g. c #C7D5E0", "/g. c #C6D4DF", "(g. c #C6D2DE", "_g. c #CFDCE5", ":g. c #DCE6F0", "h. c #593E2B", ",h. c #5B3F2A", "'h. c #5A3E29", ")h. c #5C3A21", "!h. c #5B3B26", "~h. c #5A3B26", "{h. c #5A3B27", "]h. c #573A28", "^h. c #553B2A", "/h. c #4F3D2F", "(h. c #584C40", "_h. c #5F554B", ":h. c #685F56", "i. c #A09194", ",i. c #A4989C", "'i. c #A4989A", ")i. c #AFA5A3", "!i. c #95877A", "~i. c #867667", "{i. c #7F6D5F", "]i. c #746254", "^i. c #5F4C3D", "/i. c #5B4434", "(i. c #594232", "_i. c #593F30", ":i. c #593F2E", "j. c #635332", ",j. c #64522E", "'j. c #614A28", ")j. c #6A5133", "!j. c #6C5239", "~j. c #725742", "{j. c #83695C", "]j. c #937C76", "^j. c #A29698", "/j. c #A59A9E", "(j. c #999594", "_j. c #9A9695", ":j. c #9B9595", "k. c #745B45", ",k. c #7D6450", "'k. c #856B5C", ")k. c #97827D", "!k. c #9F8F8F", "~k. c #A49EA0", "{k. c #9D9193", "]k. c #99877D", "^k. c #917F75", "/k. c #7C6A5E", "(k. c #6A584E", "_k. c #645246", ":k. c #5E4B3D", "l. c #5B3B24", ",l. c #553C26", "'l. c #52402C", ")l. c #504332", "!l. c #554837", "~l. c #645C51", "{l. c #70695F", "]l. c #817A72", "^l. c #8F8E89", "/l. c #91928D", "(l. c #929491", "_l. c #949897", ":l. c #96A0A1", "m. c #949E9F", ",m. c #94A0A0", "'m. c #96A1A3", ")m. c #97A2A4", "!m. c #BECDD4", "~m. c #C1CED6", "{m. c #D9E2E7", "]m. c #E0E9EE", "^m. c #D8E1E6", "/m. c #DFE3EC", "(m. c #D6DAE3", "_m. c #CFD2D9", ":m. c #D0D3DA", "n. c #BAB2B0", ",n. c #CCB8B9", "'n. c #CFB7B7", ")n. c #CFB7B5", "!n. c #CCB7B4", "~n. c #C7B4AD", "{n. c #AA9D8C", "]n. c #ACA0A0", "^n. c #B0A18C", "/n. c #BCA498", "(n. c #C3ABA1", "_n. c #CCC1BD", ":n. c #D0C6C4", "o. c #BFA79D", ",o. c #C2A9A2", "'o. c #C4ADA5", ")o. c #C6B2AB", "!o. c #CAC4C4", "~o. c #C2C0C3", "{o. c #BFC0C5", "]o. c #B9C2CB", "^o. c #C0CCD8", "/o. c #C5D1DD", "(o. c #C3CFDB", "_o. c #C3D0D9", ":o. c #D1DBDD", "p. c #B1A99E", ",p. c #B1A398", "'p. c #AD9C88", ")p. c #BBA993", "!p. c #C0AE9A", "~p. c #C3ABA7", "{p. c #C8B8B8", "]p. c #BFB1B0", "^p. c #D6CCCD", "/p. c #BCB3B4", "(p. c #C7C2C6", "_p. c #BEBCC1", ":p. c #B1B0B6", "q. c #AF9E8A", ",q. c #BDAB95", "'q. c #C6B1AC", ")q. c #CAB8B6", "!q. c #C9B9B9", "~q. c #C8BABA", "{q. c #BBB5B9", "]q. c #C7C2C8", "^q. c #BBB9BE", "/q. c #B5B4BA", "(q. c #BEBEC6", "_q. c #B1B1B9", ":q. c #CFDEE1", "r. c #A79788", ",r. c #A49383", "'r. c #B9A896", ")r. c #BEAD9B", "!r. c #CEBAB9", "~r. c #CBBBBB", "{r. c #CABEBE", "]r. c #C7C1C3", "^r. c #BEB9BD", "/r. c #C0BEC3", "(r. c #B3B2B7", "_r. c #B1B2B7", ":r. c #BCBFC4", "s. c #BABDC2", ",s. c #C4C9CF", "'s. c #CCDBDE", ")s. c #CCD5DA", "!s. c #B9BCC3", "~s. c #B6B9C0", "{s. c #B0B3BA", "]s. c #A8B2B3", "^s. c #A2ACAD", "/s. c #A1A9AB", "(s. c #A2A19D", "_s. c #9C9680", ":s. c #948D73", "t. c #9EA7AC", ",t. c #B3B6BD", "'t. c #AAADB4", ")t. c #A4ACAF", "!t. c #9FA7AA", "~t. c #A2A6A9", "{t. c #A09F9B", "]t. c #938C72", "^t. c #867D60", "/t. c #6E6546", "(t. c #5C522F", "_t. c #5A4A26", ":t. c #5D4924", "u. c #D7E1E3", ",u. c #CEDCDF", "'u. c #D0DEE1", ")u. c #C0C5CB", "!u. c #A6A9B0", "~u. c #A1A6AA", "{u. c #9EA2A5", "]u. c #9A9380", "^u. c #8C8366", "/u. c #786D4D", "(u. c #5F5532", "_u. c #50441E", ":u. c #5A4820", "v. c #AB9A90", ",v. c #B0A7A2", "'v. c #AA9D8A", ")v. c #AFA38D", "!v. c #B3A797", "~v. c #B4A89A", "{v. c #B8ABA3", "]v. c #BAADA7", "^v. c #BCB1AD", "/v. c #C4B6B5", "(v. c #CABCBC", "_v. c #C6BCBB", ":v. c #CCC7C4", "w. c #CECECC", ",w. c #CDCAC5", "'w. c #CBBEAD", ")w. c #CBBBAC", "!w. c #C4B4A5", "~w. c #B0A798", "{w. c #AA9E86", "]w. c #B7AB9D", "^w. c #B9ACA4", "/w. c #B6ABA5", "(w. c #B8ADA9", "_w. c #C7BDBC", ":w. c #CCC2C3", "x. c #ACB6B7", ",x. c #AAB4B6", "'x. c #D2DCDE", ")x. c #D1D5D4", "!x. c #D7D9D8", "~x. c #D6D6D4", "{x. c #C9C8C4", "]x. c #CCC9C2", "^x. c #CDC3B7", "/x. c #CABCAF", "(x. c #B8A89B", "_x. c #A29082", ":x. c #A69486", "y. c #322515", ",y. c #493D2F", "'y. c #675B4F", ")y. c #9E9598", "!y. c #9A8884", "~y. c #7F6C66", "{y. c #78655E", "]y. c #6A584C", "^y. c #635041", "/y. c #544130", "(y. c #57412C", "_y. c #5A3D1F", ":y. c #533C2A", "z. c #594F45", ",z. c #81776E", "'z. c #8C7A76", ")z. c #78685B", "!z. c #6F5D4F", "~z. c #5A4939", "{z. c #573C1E", "]z. c #573D1C", "^z. c #593C1C", "/z. c #5B3C1F", "(z. c #4E351F", "_z. c #55402B", ":z. c #6B5B4B", "A. c #908D7A", ",A. c #9C9A83", "'A. c #A5A186", ")A. c #9A9778", "!A. c #756E51", "~A. c #3E3818", "{A. c #292000", "]A. c #3A2B0A", "^A. c #4F3417", "/A. c #4A2A11", "(A. c #765840", "_A. c #745842", ":A. c #4A311D", "B. c #776C50", ",B. c #635636", "'B. c #615330", ")B. c #60502C", "!B. c #62502A", "~B. c #68522B", "{B. c #665029", "]B. c #6D4E32", "^B. c #705039", "/B. c #70513C", "(B. c #795E4D", "_B. c #8A7268", ":B. c #937C74", "C. c #D7DAE1", ",C. c #D2D9DF", "'C. c #C6D6D5", ")C. c #BFCFCC", "!C. c #C3D3D0", "~C. c #BEC8C7", "{C. c #9CA2A2", "]C. c #999F9F", "^C. c #9B9D9C", "/C. c #928A77", "(C. c #877C66", "_C. c #645737", ":C. c #5F512E", "D. c #D7D7D5", ",D. c #CFCEC9", "'D. c #D6D3CE", ")D. c #D3CECA", "!D. c #CDC6C0", "~D. c #BEB5B0", "{D. c #C0B5AF", "]D. c #C1B4AE", "^D. c #B3A6A0", "/D. c #AFA7A5", "(D. c #ACA7A3", "_D. c #AC9D8A", ":D. c #B9A493", "E. c #583E1D", ",E. c #503D1F", "'E. c #5B432B", ")E. c #5D4430", "!E. c #5C4535", "~E. c #654F42", "{E. c #78645B", "]E. c #8A7874", "^E. c #918285", "/E. c #92868A", "(E. c #938991", "_E. c #938C93", ":E. c #948F96", "F. c #5A4824", ",F. c #6B5732", "'F. c #624E29", ")F. c #4F3C1B", "!F. c #392B10", "~F. c #7A6E56", "{F. c #B2AA97", "]F. c #B0AB95", "^F. c #99957C", "/F. c #5B553D", "(F. c #282107", "_F. c #2A2007", ":F. c #372B13", "G. c #8A8F8B", ",G. c #868781", "'G. c #766E5B", ")G. c #675C46", "!G. c #5D5137", "~G. c #665332", "{G. c #664F2D", "]G. c #614829", "^G. c #634C2D", "/G. c #6C513C", "(G. c #7D5C57", "_G. c #886966", ":G. c #8E706E", "H. c #A6A2A1", ",H. c #A2A2A2", "'H. c #A4AEB0", ")H. c #A8B3B7", "!H. c #D9E3EC", "~H. c #DEE9EF", "{H. c #E3EEF4", "]H. c #E8F3F7", "^H. c #EFFAFE", "/H. c #EEF7FC", "(H. c #E9F2F7", "_H. c #D5DDDF", ":H. c #D2D7DB", "I. c #211602", ",I. c #564B35", "'I. c #CCC4AD", ")I. c #A19A87", "!I. c #A59F8F", "~I. c #AAA5A1", "{I. c #9D8D8E", "]I. c #9A957F", "^I. c #A6A088", "/I. c #A29C82", "(I. c #867F63", "_I. c #554B32", ":I. c #2C1F0C", "J. c #A39DA1", ",J. c #A59CA1", "'J. c #A69DA0", ")J. c #B0A69D", "!J. c #AEA596", "~J. c #B0A58F", "{J. c #B7A599", "]J. c #B7A398", "^J. c #BDA9A0", "/J. c #BBBBBD", "(J. c #BCBCBE", "_J. c #BCBDBF", ":J. c #C5C6C8", "K. c #352A26", ",K. c #5A4F4B", "'K. c #9D9799", ")K. c #9C969A", "!K. c #9B9599", "~K. c #9D9499", "{K. c #9E959A", "]K. c #9F969B", "^K. c #A0959B", "/K. c #9E9296", "(K. c #9F9395", "_K. c #857568", ":K. c #796959", "L. c #9E8E91", ",L. c #A69697", "'L. c #AD9E9B", ")L. c #AFA4A0", "!L. c #B4A88E", "~L. c #B7AB91", "{L. c #B3A88C", "]L. c #CEC0A5", "^L. c #CABCA1", "/L. c #B5A68F", "(L. c #8C7D68", "_L. c #38281B", ":L. c #312316", "M. c #D8D8D8", ",M. c #D3CFCC", "'M. c #D0C8C5", ")M. c #BAB4A8", "!M. c #B0AA9C", "~M. c #B6A790", "{M. c #B9AA95", "]M. c #B6AA94", "^M. c #B8AB98", "/M. c #BCAF9C", "(M. c #BBACA5", "_M. c #BDAEA9", ":M. c #C0B1AC", "N. c #42251F", ",N. c #3F231F", "'N. c #402420", ")N. c #3E2520", "!N. c #412925", "~N. c #3F2A25", "{N. c #3C2925", "]N. c #372521", "^N. c #342520", "/N. c #372523", "(N. c #342623", "_N. c #39302B", ":N. c #2E231F", "O. c #908080", ",O. c #A3A192", "'O. c #A9A695", ")O. c #B9AE98", "!O. c #BFB59C", "~O. c #ABA186", "{O. c #8D8368", "]O. c #4F4329", "^O. c #3A2B14", "/O. c #30210C", "(O. c #3A2917", "_O. c #463525", ":O. c #433123", "P. c #DBE2E8", ",P. c #E0E5E9", "'P. c #DCE0E3", ")P. c #D6DADD", "!P. c #D9D9D9", "~P. c #D1D1CF", "{P. c #D9D6D1", "]P. c #C9C6BF", "^P. c #C9C9BD", "/P. c #CBCCBE", "(P. c #CBC9BC", "_P. c #C1BEAF", ":P. c #B4AC9F", "Q. c #37271A", ",Q. c #3A261F", "'Q. c #432B27", ")Q. c #472D2C", "!Q. c #4B2C29", "~Q. c #4A2B26", "{Q. c #482B25", "]Q. c #3D2823", "^Q. c #3E2B25", "/Q. c #3E2C28", "(Q. c #372823", "_Q. c #352822", ":Q. c #3B2D2A", "R. c #635025", ",R. c #665027", "'R. c #654E25", ")R. c #6F4F3A", "!R. c #765544", "~R. c #7F5F52", "{R. c #896E67", "]R. c #8F7872", "^R. c #98837E", "/R. c #B1A1A1", "(R. c #B19EA0", "_R. c #A8A592", ":R. c #A7A78F", "S. c #98A2AB", ",S. c #9BA6AC", "'S. c #B5BFC9", ")S. c #D4DFE1", "!S. c #E3EEF0", "~S. c #E8F2F4", "{S. c #E8F0F3", "]S. c #DEE6E9", "^S. c #DBE0E3", "/S. c #D9DEE1", "(S. c #DBE1E1", "_S. c #DFE3E4", ":S. c #D9DDDE", "T. c #3A1E1D", ",T. c #361C1D", "'T. c #341B1E", ")T. c #341E21", "!T. c #342022", "~T. c #322020", "{T. c #302020", "]T. c #2F201D", "^T. c #30231D", "/T. c #32251F", "(T. c #35281F", "_T. c #32261A", ":T. c #261A0C", "U. c #BFB09D", ",U. c #C0B3A3", "'U. c #B5AEA4", ")U. c #C3C0BB", "!U. c #C0BFBB", "~U. c #B7B7B7", "{U. c #B7BBBC", "]U. c #C5C9CA", "^U. c #BBBFC0", "/U. c #CBD0D3", "(U. c #CBD3D5", "_U. c #A5B0B4", ":U. c #B2C2C2", "V. c #4D2C27", ",V. c #4E2F2C", "'V. c #4C2F2B", ")V. c #3B2621", "!V. c #392C26", "~V. c #362B25", "{V. c #392B28", "]V. c #372322", "^V. c #3E2928", "/V. c #4D3535", "(V. c #654D4D", "_V. c #69514F", ":V. c #604B46", "W. c #B6B09A", ",W. c #AEA890", "'W. c #948E76", ")W. c #524731", "!W. c #372B15", "~W. c #251601", "{W. c #281703", "]W. c #372211", "^W. c #3C2213", "/W. c #422618", "(W. c #3E2015", "_W. c #401E12", ":W. c #421E12", "X. c #7E7673", ",X. c #84807D", "'X. c #87868B", ")X. c #8A8B90", "!X. c #868E91", "~X. c #586063", "{X. c #6E7679", "]X. c #ABB4BB", "^X. c #B6C1C7", "/X. c #BDC7D1", "(X. c #BAC4CD", "_X. c #BCC6CF", ":X. c #EBF5F6", "Y. c #A1A38E", ",Y. c #A0A28A", "'Y. c #ACAE96", ")Y. c #75775F", "!Y. c #191B05", "~Y. c #121100", "{Y. c #322F1C", "]Y. c #3A291F", "^Y. c #412A24", "/Y. c #4A2827", "(Y. c #4D2929", "_Y. c #512A2D", ":Y. c #542C2D", "Z. c #8B746C", ",Z. c #978281", "'Z. c #A08C8D", ")Z. c #A69395", "!Z. c #AC999B", "~Z. c #AE9EA1", "{Z. c #B2A2A5", "]Z. c #B3A5A4", "^Z. c #B4AAA0", "/Z. c #968978", "(Z. c #706051", "_Z. c #332313", ":Z. c #2A1907", "`. c #715A48", ",`. c #5F452E", "'`. c #5E3B27", ")`. c #5F3A28", "!`. c #5F3A27", "~`. c #5E3B25", "{`. c #5C3D20", "]`. c #5C3D1E", "^`. c #625141", "/`. c #7B6E65", "(`. c #7E736D", "_`. c #877F7C", ":`. c #878181", "<`. c #868283", "[`. c #878286", "}`. c #878588", "|`. c #969A9D", "1`. c #979CA0", "2`. c #8B9094", "3`. c #8C9195", "4`. c #797E82", "5`. c #61666A", "6`. c #707579", "7`. c #8D949C", "8`. c #99A0A8", "9`. c #DEE8E9", "0`. c #E8F2F3", "a`. c #ECF6F7", "b`. c #E9F4F6", "c`. c #E7F2F4", "d`. c #D0D5D9", "e`. c #D5D5D7", "f`. c #D9D5D6", "g`. c #DBD2D3", "h`. c #DBD1D0", "i`. c #DCD1CF", "j`. c #D8CAC7", "k`. c #AA9E90", "l`. c #AAA5A2", "m`. c #B0A4A4", "n`. c #B0A2A2", "o`. c #AFA1A1", "p`. c #BCAC9F", "q`. c #C3B3A3", "r`. c #C0B7B0", "s`. c #C1BAB2", "t`. c #BEBAB1", "u`. c #BEB9B3", "v`. c #C0C0BE", "w`. c #C3C5C4", "x`. c #C1C5C6", "y`. c #B9CCC8", "z`. c #B1C0C3", "A`. c #A6B5B2", "B`. c #A3B2AF", "C`. c #A3AFAD", "D`. c #918C79", "E`. c #8B8471", "F`. c #786C56", "G`. c #684A2E", "H`. c #735233", "I`. c #6E4A28", "J`. c #6F4C2C", "K`. c #684B2B", "L`. c #684F31", "M`. c #715842", "N`. c #765F4D", "O`. c #7F695C", "P`. c #907D79", "Q`. c #9A8789", "R`. c #9F8F92", "S`. c #A8999C", "T`. c #AB9C9F", "U`. c #AE9FA2", "V`. c #C8BAAD", "W`. c #4D3B2F", "X`. c #372517", "Y`. c #362110", "Z`. c #381D0A", "``. c #391D08", " + c #3E1F0D", ". + c #462015", "+ + c #461E16", "@ + c #4C1F1A", "# + c #542221", "$ + c #562020", "% + c #5C2221", "& + c #622524", "* + c #682725", "= + c #6A2623", "- + c #6A2520", "; + c #6A231D", "> + c #69231B", ", + c #6C261E", "' + c #6A261D", ") + c #68251D", "! + c #64231D", "~ + c #5F221F", "{ + c #5A201E", "] + c #551D1E", "^ + c #4F1D1E", "/ + c #4D1F21", "( + c #482122", "_ + c #442220", ": + c #412220", "< + c #3E211D", "[ + c #3B1F1B", "} + c #37201A", "| + c #33221A", "1 + c #2E2216", "2 + c #2B2213", "3 + c #231A09", "4 + c #312A17", "5 + c #938C79", "6 + c #C8C1AE", "7 + c #C8C3B0", "8 + c #AAA798", "9 + c #ADA99E", "0 + c #A6A68E", "a + c #B3B397", "b + c #6D6D53", "c + c #242209", "d + c #161400", "e + c #201B08", "f + c #312519", "g + c #3C2B23", "h + c #442D27", "i + c #4A2E2B", "j + c #4E2C2B", "k + c #4E272A", "l + c #50262A", "m + c #56272D", "n + c #5C2B2F", "o + c #633134", "p + c #5E2C2D", "q + c #572727", "r + c #572B2C", "s + c #572D2E", "t + c #492A28", "u + c #462A27", "v + c #422827", "w + c #3E2926", "x + c #3B2927", "y + c #382A27", "z + c #3F2B2A", "A + c #4A3232", "B + c #4A3031", "C + c #492B2D", "D + c #462629", "E + c #482829", "F + c #795E55", "G + c #5C443A", "H + c #513831", "I + c #503C35", "J + c #87746D", "K + c #8E7D75", "L + c #A69696", "M + c #AF9C95", "N + c #9B877C", "O + c #877163", "P + c #7B6454", "Q + c #6E5340", "R + c #664B36", "S + c #603B28", "T + c #603B29", "U + c #603C26", "V + c #5F3D24", "W + c #5F3D21", "X + c #5D3E21", "Y + c #5D3E1F", "Z + c #5D452D", "` + c #5A4532", " .+ c #5D4C3C", "..+ c #706257", "+.+ c #72655C", "@.+ c #786D67", "#.+ c #8B8381", "$.+ c #878384", "%.+ c #8C8D91", "&.+ c #888D91", "*.+ c #9A9FA3", "=.+ c #7C8185", "-.+ c #989FA7", ";.+ c #97A0A7", ">.+ c #B4C3C8", ",.+ c #AFB9C3", "'.+ c #B2BCC6", ").+ c #B6C0CA", "!.+ c #D1D6DC", "~.+ c #D1D4D9", "{.+ c #D4D3D9", "].+ c #D5D3D8", "^.+ c #D9D3D5", "/.+ c #D8CECD", "(.+ c #D7CDCB", "_.+ c #D4C9C3", ":.+ c #C3BBB0", "<.+ c #B6AEA1", "[.+ c #B5A494", "}.+ c #B8A597", "|.+ c #BCB3AC", "1.+ c #BDB8B4", "2.+ c #BFBAB6", "3.+ c #C2BEBB", "4.+ c #C8C8C6", "5.+ c #BABEBF", "6.+ c #CBD4D3", "7.+ c #BBCECC", "8.+ c #BBC7C5", "9.+ c #9FAEAB", "0.+ c #9CABA8", "a.+ c #989A95", "b.+ c #928B78", "c.+ c #8A826D", "d.+ c #837B66", "e.+ c #7B6F59", "f.+ c #66543C", "g.+ c #655138", "h.+ c #664E34", "i.+ c #704D2F", "j.+ c #6C4828", "k.+ c #6E4B2B", "l.+ c #6C4E32", "m.+ c #6E543B", "n.+ c #735A44", "o.+ c #796250", "p.+ c #8F7C78", "q.+ c #99898A", "r.+ c #9C8D90", "s.+ c #A29398", "t.+ c #A69A9E", "u.+ c #A79B9F", "v.+ c #AA9EA0", "w.+ c #AFAC99", "x.+ c #B8AFA0", "y.+ c #6E5C50", "z.+ c #423024", "A.+ c #2E1A0F", "B.+ c #362015", "C.+ c #3C241A", "D.+ c #402619", "E.+ c #40210F", "F.+ c #3E1E09", "G.+ c #3E1A0A", "H.+ c #431B0F", "I.+ c #4A1F16", "J.+ c #53241E", "K.+ c #582524", "L.+ c #5C2425", "M.+ c #5D2123", "N.+ c #632324", "O.+ c #692427", "P.+ c #6C2425", "Q.+ c #6E2222", "R.+ c #6F211D", "S.+ c #70211D", "T.+ c #71221D", "U.+ c #752820", "V.+ c #71281F", "W.+ c #702720", "X.+ c #6A251E", "Y.+ c #66221F", "Z.+ c #60201E", "`.+ c #591D1D", " ++ c #541E1E", ".++ c #501E1F", "+++ c #482221", "@++ c #452220", "#++ c #40211C", "$++ c #3B221B", "%++ c #34231C", "&++ c #31241B", "*++ c #281F0E", "=++ c #241D0B", "-++ c #221B08", ";++ c #CBC6B3", ">++ c #A6A392", ",++ c #A09E91", "'++ c #AFAD96", ")++ c #969577", "!++ c #444327", "~++ c #201C03", "{++ c #251E0C", "]++ c #392B20", "^++ c #472E2A", "/++ c #4D2F2F", "(++ c #502C2E", "_++ c #50272B", ":++ c #52252A", "<++ c #58272D", "[++ c #5E2B30", "}++ c #663236", "|++ c #602C2E", "1++ c #592728", "2++ c #582A2C", "3++ c #552D2D", "4++ c #522C2B", "5++ c #462A29", "6++ c #3C2A26", "7++ c #3F2D2B", "8++ c #402C2B", "9++ c #4F3133", "0++ c #4D2F31", "a++ c #4D2D30", "b++ c #4C2F29", "c++ c #5B4037", "d++ c #684D44", "e++ c #654D43", "f++ c #573F35", "g++ c #463025", "h++ c #4E3A31", "i++ c #68564C", "j++ c #6C5B53", "k++ c #6B5D54", "l++ c #80716A", "m++ c #A69898", "n++ c #A79999", "o++ c #A9978D", "p++ c #9D897E", "q++ c #9C867B", "r++ c #957F72", "s++ c #7F6858", "t++ c #7B604F", "u++ c #654934", "v++ c #5E422C", "w++ c #5E3F2A", "x++ c #603928", "y++ c #5F3B25", "z++ c #5E3C20", "A++ c #5A3D1B", "B++ c #5B3D1B", "C++ c #5B3C1D", "D++ c #5D3C1D", "E++ c #5D3B1F", "F++ c #5E4429", "G++ c #5E462C", "H++ c #625245", "I++ c #64564B", "J++ c #776C68", "K++ c #847977", "L++ c #8B8180", "M++ c #888284", "N++ c #808185", "O++ c #81868A", "P++ c #959A9E", "Q++ c #9FA6AE", "R++ c #969FA6", "S++ c #B1BBC5", "T++ c #B8C2CB", "U++ c #C4CECF", "V++ c #CFD9DA", "W++ c #D8E4E4", "X++ c #DBE7E7", "Y++ c #E3F1F2", "Z++ c #E0EEF1", "`++ c #E1EFF2", " @+ c #D9E7EA", ".@+ c #D3DCE5", "+@+ c #D4D8E3", "@@+ c #D3D6DF", "#@+ c #D4D4DC", "$@+ c #D6D3DA", "%@+ c #D9D4D8", "&@+ c #DBD5D7", "*@+ c #D3CBC8", "=@+ c #D8CFCA", "-@+ c #DDD6CE", ";@+ c #DBD4CA", ">@+ c #B0ACA0", ",@+ c #BDA694", "'@+ c #B1A5A5", ")@+ c #BDACA2", "!@+ c #C3B3A6", "~@+ c #C8B8AB", "{@+ c #C3B7A9", "]@+ c #BEB7B1", "^@+ c #BFBBB8", "/@+ c #BEBDB9", "(@+ c #C5C4C2", "_@+ c #C8D2D1", ":@+ c #BACDCB", "<@+ c #B6C9C5", "[@+ c #B8CBC7", "}@+ c #B8C8C5", "|@+ c #9FABAB", "1@+ c #A2B1AE", "2@+ c #A4B3B0", "3@+ c #989B94", "4@+ c #827761", "5@+ c #615036", "6@+ c #675338", "7@+ c #695135", "8@+ c #67492D", "9@+ c #6B4C2F", "0@+ c #6D4A2C", "a@+ c #6A4727", "b@+ c #6D4929", "c@+ c #72543A", "d@+ c #846D5D", "e@+ c #907C75", "f@+ c #A3979B", "g@+ c #A79AA1", "h@+ c #A89DA3", "i@+ c #A99EA2", "j@+ c #AAA494", "k@+ c #B1AE9D", "l@+ c #B2B19C", "m@+ c #AFAE9A", "n@+ c #BAB5A2", "o@+ c #C1BAA8", "p@+ c #B2A998", "q@+ c #726255", "r@+ c #554337", "s@+ c #39251C", "t@+ c #331C14", "u@+ c #3A211A", "v@+ c #3D241D", "w@+ c #3F241D", "x@+ c #402419", "y@+ c #502F1E", "z@+ c #512C19", "A@+ c #4F2819", "B@+ c #50261A", "C@+ c #56271F", "D@+ c #5B2824", "E@+ c #5D2526", "F@+ c #5C2022", "G@+ c #642226", "H@+ c #692226", "I@+ c #6E2328", "J@+ c #6F2325", "K@+ c #702021", "L@+ c #701F1C", "M@+ c #74201E", "N@+ c #76231D", "O@+ c #7A2A21", "P@+ c #772A20", "Q@+ c #6F261F", "R@+ c #69241F", "S@+ c #62211D", "T@+ c #5C1F1E", "U@+ c #581D1F", "V@+ c #521B1E", "W@+ c #4F1F1F", "X@+ c #4D2120", "Y@+ c #4A2220", "Z@+ c #492320", "`@+ c #46231F", " #+ c #44231E", ".#+ c #35241D", "+#+ c #2A2014", "@#+ c #181100", "##+ c #C9C4B1", "$#+ c #BBB6A3", "%#+ c #A8A594", "&#+ c #ACA99A", "*#+ c #A4A293", "=#+ c #A2A48E", "-#+ c #64674C", ";#+ c #1A1800", ">#+ c #191400", ",#+ c #1D1603", "'#+ c #1B0F00", ")#+ c #3A2A1D", "!#+ c #3A261D", "~#+ c #432A25", "{#+ c #532F2F", "]#+ c #532629", "^#+ c #552428", "/#+ c #5A272C", "(#+ c #5F2A30", "_#+ c #6A3235", ":#+ c #642C2D", "<#+ c #5C2528", "[#+ c #592527", "}#+ c #5B292A", "|#+ c #5C2B2E", "1#+ c #5A2C2E", "2#+ c #4F2B2B", "3#+ c #462828", "4#+ c #342C29", "5#+ c #432F2E", "6#+ c #45302F", "7#+ c #4E3231", "8#+ c #513333", "9#+ c #513132", "0#+ c #523031", "a#+ c #502E2D", "b#+ c #53322D", "c#+ c #4A2C24", "d#+ c #52352D", "e#+ c #52372E", "f#+ c #6C544A", "g#+ c #735C54", "h#+ c #503F37", "i#+ c #4B3D34", "j#+ c #665950", "k#+ c #B8AEA5", "l#+ c #A18E87", "m#+ c #A38F86", "n#+ c #9F8B80", "o#+ c #978174", "p#+ c #8D7769", "q#+ c #6D523F", "r#+ c #63442F", "s#+ c #5F402B", "t#+ c #5D3D28", "u#+ c #5D3A26", "v#+ c #5C3E1C", "w#+ c #5E3D1E", "x#+ c #5F3C1E", "y#+ c #5E3B1F", "z#+ c #593E23", "A#+ c #63554C", "B#+ c #6E615B", "C#+ c #867B79", "D#+ c #7A7A7C", "E#+ c #787C7F", "F#+ c #8D9194", "G#+ c #999CA1", "H#+ c #A1A4AB", "I#+ c #B2B5BC", "J#+ c #A0A3AA", "K#+ c #9A9DA4", "L#+ c #9BA2AA", "M#+ c #B6C0C9", "N#+ c #B5BFC8", "O#+ c #DBE9EC", "P#+ c #DEECEF", "Q#+ c #E0EFF2", "R#+ c #DCE9EF", "S#+ c #D7D6DB", "T#+ c #DEDAD9", "U#+ c #D6D1CE", "V#+ c #CFCAC7", "W#+ c #D8D3CD", "X#+ c #D4D1CA", "Y#+ c #C5C2B9", "Z#+ c #BDA799", "`#+ c #B4A79E", " $+ c #BEB1A8", ".$+ c #B4AAA1", "+$+ c #B1A6A4", "@$+ c #B0A9A1", "#$+ c #C9BBAE", "$$+ c #BDBFBE", "%$+ c #CAD3D2", "&$+ c #B8C9C3", "*$+ c #B7C7C4", "=$+ c #B7C8C2", "-$+ c #AEBDB8", ";$+ c #B2BEBA", ">$+ c #BCC7C3", ",$+ c #BDC3C3", "'$+ c #B9C8CB", ")$+ c #A0ACAA", "!$+ c #A8B4B0", "~$+ c #989A97", "{$+ c #999B98", "]$+ c #8A7E64", "^$+ c #64543B", "/$+ c #5A492F", "($+ c #6E563C", "_$+ c #6D5338", ":$+ c #694E33", "<$+ c #6C4A2E", "[$+ c #6A482C", "}$+ c #6E4D2E", "|$+ c #745944", "1$+ c #816B5D", "2$+ c #95827E", "3$+ c #9B8B8C", "4$+ c #A99A9D", "5$+ c #AA9EA2", "6$+ c #ADA1A5", "7$+ c #AEA2A4", "8$+ c #ADA1A3", "9$+ c #AEA2A2", "0$+ c #A6A68C", "a$+ c #BDB8A2", "b$+ c #B9B19C", "c$+ c #918674", "d$+ c #655545", "e$+ c #2F1C0D", "f$+ c #2F190C", "g$+ c #361B10", "h$+ c #3E2217", "i$+ c #3F2117", "j$+ c #3D1C13", "k$+ c #422017", "l$+ c #4E2920", "m$+ c #481E0E", "n$+ c #4F2111", "o$+ c #542416", "p$+ c #58261B", "q$+ c #5F2821", "r$+ c #662B27", "s$+ c #692929", "t$+ c #682425", "u$+ c #6A2225", "v$+ c #6F2327", "w$+ c #742427", "x$+ c #732123", "y$+ c #731D1E", "z$+ c #751D1C", "A$+ c #791F1E", "B$+ c #7C231F", "C$+ c #7E2922", "D$+ c #7C2921", "E$+ c #792920", "F$+ c #74271F", "G$+ c #6E231E", "H$+ c #66211C", "I$+ c #611D1C", "J$+ c #5A1D1C", "K$+ c #551B1A", "L$+ c #501D1C", "M$+ c #4F1F1D", "N$+ c #4C231F", "O$+ c #4A231E", "P$+ c #49241E", "Q$+ c #38231E", "R$+ c #33221B", "S$+ c #35261F", "T$+ c #34261B", "U$+ c #29200F", "V$+ c #251E0B", "W$+ c #120D00", "X$+ c #423D29", "Y$+ c #C7C2AF", "Z$+ c #B2AC9E", "`$+ c #99998D", " %+ c #8D8E80", ".%+ c #919284", "+%+ c #969787", "@%+ c #919282", "#%+ c #999A88", "$%+ c #ABAA98", "%%+ c #ABAC9A", "&%+ c #828A73", "*%+ c #3E462F", "=%+ c #141702", "-%+ c #1A1706", ";%+ c #251C0D", ">%+ c #302013", ",%+ c #412821", "'%+ c #4C2D28", ")%+ c #552F2C", "!%+ c #592F30", "~%+ c #5D2F31", "{%+ c #5D2C2F", "]%+ c #5C2A2D", "^%+ c #5C282C", "/%+ c #5D292D", "(%+ c #61292C", "_%+ c #65292B", ":%+ c #662A2A", "<%+ c #662A2C", "[%+ c #652A2C", "}%+ c #622A2D", "|%+ c #612A2D", "1%+ c #5D2B2C", "2%+ c #592B2D", "3%+ c #552B2D", "4%+ c #542D2E", "5%+ c #503031", "6%+ c #412D2E", "7%+ c #3A2E2E", "8%+ c #392D2D", "9%+ c #382C2C", "0%+ c #362A2A", "a%+ c #362827", "b%+ c #45302D", "c%+ c #4C3231", "d%+ c #503431", "e%+ c #513230", "f%+ c #533130", "g%+ c #553131", "h%+ c #593332", "i%+ c #582F2B", "j%+ c #562D27", "k%+ c #532C25", "l%+ c #4F2D24", "m%+ c #502F26", "n%+ c #533B31", "o%+ c #544339", "p%+ c #524439", "q%+ c #61574B", "r%+ c #7E766B", "s%+ c #8D897D", "t%+ c #98867C", "u%+ c #8E786B", "v%+ c #836D5F", "w%+ c #705645", "x%+ c #6F5443", "y%+ c #6B4E3C", "z%+ c #624533", "A%+ c #5D4227", "B%+ c #5E4328", "C%+ c #5F4125", "D%+ c #5D3F23", "E%+ c #5C3E22", "F%+ c #5F3C20", "G%+ c #603B20", "H%+ c #5C3E24", "I%+ c #5D422D", "J%+ c #594335", "K%+ c #5F4D43", "L%+ c #615048", "M%+ c #66554E", "N%+ c #6E5F5A", "O%+ c #7E6F6C", "P%+ c #867C7A", "Q%+ c #7C7B77", "R%+ c #7E807D", "S%+ c #848685", "T%+ c #8C8E8D", "U%+ c #A4A5A7", "V%+ c #8F8E94", "W%+ c #A3A2AA", "X%+ c #A8A6B1", "Y%+ c #A7A5B0", "Z%+ c #AAA6B4", "`%+ c #ACAAB7", " &+ c #BAC3CC", ".&+ c #D2E0E3", "+&+ c #D7E5E8", "@&+ c #DBE8EE", "#&+ c #D9E6EC", "$&+ c #D3E1E4", "%&+ c #D7E5E6", "&&+ c #D3E1E1", "*&+ c #DFE1E0", "=&+ c #CDC9C8", "-&+ c #AE9A93", ";&+ c #B4A19A", ">&+ c #B7A99C", ",&+ c #ACA7A1", "'&+ c #BFB8AE", ")&+ c #B8B1A7", "!&+ c #C9C6C1", "~&+ c #BAC9C2", "{&+ c #B9C5C1", "]&+ c #B7C4BD", "^&+ c #B7C3BF", "/&+ c #B8C5BE", "(&+ c #BBC6C2", "_&+ c #BDC8C2", ":&+ c #BBC4BF", "<&+ c #BDC3C1", "[&+ c #BEC3BF", "}&+ c #C0C4C3", "|&+ c #B0BBC1", "1&+ c #B4BEC7", "2&+ c #B7C1CA", "3&+ c #AEB8C1", "4&+ c #B1BCB8", "5&+ c #AEB9B3", "6&+ c #ABB6B2", "7&+ c #A8A8AA", "8&+ c #A7A5A6", "9&+ c #B3B0A9", "0&+ c #B9B5AC", "a&+ c #988D77", "b&+ c #8D7F64", "c&+ c #796950", "d&+ c #5E4A31", "e&+ c #5E4830", "f&+ c #694F36", "g&+ c #765C43", "h&+ c #766354", "i&+ c #7E6C60", "j&+ c #93817D", "k&+ c #998785", "l&+ c #AB9B9C", "m&+ c #AB9D9D", "n&+ c #B5ABA1", "o&+ c #ADAE8E", "p&+ c #BCBB9D", "q&+ c #C6C2A5", "r&+ c #7A7055", "s&+ c #3D2813", "t&+ c #3A210D", "u&+ c #3C1F0F", "v&+ c #401F10", "w&+ c #441E11", "x&+ c #471F13", "y&+ c #4C2216", "z&+ c #4F2318", "A&+ c #532317", "B&+ c #571F12", "C&+ c #5D1F12", "D&+ c #602217", "E&+ c #65251B", "F&+ c #6A271E", "G&+ c #6F2822", "H&+ c #732A24", "I&+ c #762824", "J&+ c #792A26", "K&+ c #7B2725", "L&+ c #7B2524", "M&+ c #7E2423", "N&+ c #802524", "O&+ c #842626", "P&+ c #862826", "Q&+ c #882A28", "R&+ c #852A25", "S&+ c #822923", "T&+ c #7D261F", "U&+ c #77241E", "V&+ c #71211A", "W&+ c #6B201A", "X&+ c #691F1C", "Y&+ c #64201D", "Z&+ c #5D1E19", "`&+ c #5A201C", " *+ c #56211D", ".*+ c #51201B", "+*+ c #4E1E1A", "@*+ c #4B201A", "#*+ c #4C231D", "$*+ c #4C2721", "%*+ c #432523", "&*+ c #3E2622", "**+ c #332117", "=*+ c #302215", "-*+ c #2D2413", ";*+ c #241F0B", ">*+ c #191700", ",*+ c #2B2912", "'*+ c #64624D", ")*+ c #B7B4A1", "!*+ c #C2BCAC", "~*+ c #A08F95", "{*+ c #9E8D93", "]*+ c #8C8F7E", "^*+ c #949786", "/*+ c #989B88", "(*+ c #90927D", "_*+ c #9D9F89", ":*+ c #ADAC97", "<*+ c #9EA08B", "[*+ c #616652", "}*+ c #29301E", "|*+ c #101101", "1*+ c #201A0C", "2*+ c #3A231B", "3*+ c #4B2A25", "4*+ c #562E2C", "5*+ c #5E2E2E", "6*+ c #612D2F", "7*+ c #642D30", "8*+ c #642C2F", "9*+ c #64292D", "0*+ c #63282C", "a*+ c #6A2C2F", "b*+ c #6C2C2D", "c*+ c #6A2C2D", "d*+ c #692B2C", "e*+ c #672B2D", "f*+ c #632C2F", "g*+ c #5E2C2F", "h*+ c #5D2C30", "i*+ c #5B2D30", "j*+ c #562F32", "k*+ c #492F32", "l*+ c #432F31", "m*+ c #422D32", "n*+ c #3F2C2E", "o*+ c #3D2A2C", "p*+ c #3B2929", "q*+ c #422D2A", "r*+ c #472F2B", "s*+ c #4E322F", "t*+ c #51322F", "u*+ c #52302E", "v*+ c #552F2E", "w*+ c #572F2F", "x*+ c #59302E", "y*+ c #5B302A", "z*+ c #5A2F28", "A*+ c #582D27", "B*+ c #502E25", "C*+ c #4F3127", "D*+ c #4D352B", "E*+ c #4B372C", "F*+ c #433228", "G*+ c #41372B", "H*+ c #524A3D", "I*+ c #5A5448", "J*+ c #605C50", "K*+ c #7C7A6D", "L*+ c #B1AEA5", "M*+ c #98867A", "N*+ c #8E7B6D", "O*+ c #826C5E", "P*+ c #7A6353", "Q*+ c #765C4D", "R*+ c #6F5544", "S*+ c #644938", "T*+ c #59402A", "U*+ c #5D4225", "V*+ c #5C4124", "W*+ c #623A20", "X*+ c #5B391E", "Y*+ c #5C4028", "Z*+ c #5B412A", "`*+ c #5B402D", " =+ c #59453A", ".=+ c #5A483E", "+=+ c #5E4B44", "@=+ c #74635C", "#=+ c #796E68", "$=+ c #77746F", "%=+ c #797A75", "&=+ c #9B999E", "*=+ c #9D9AA3", "==+ c #A4A1AA", "-=+ c #A6A3AE", ";=+ c #A5A1AF", ">=+ c #A9A5B4", ",=+ c #ADA9B7", "'=+ c #A9A9B3", ")=+ c #DAE7ED", "!=+ c #D2E2DF", "~=+ c #D2E1DE", "{=+ c #D1DDDB", "]=+ c #D2DBDA", "^=+ c #DBDFE0", "/=+ c #D3D1D4", "(=+ c #CFCDD0", "_=+ c #D2C9CC", ":=+ c #DBC9C7", "<=+ c #C9B7B3", "[=+ c #C1AFAB", "}=+ c #BAA7A1", "|=+ c #C5B3A9", "1=+ c #C3B1A5", "2=+ c #C0AEA0", "3=+ c #BBAA98", "4=+ c #A49E9E", "5=+ c #ABA8A3", "6=+ c #AFA89E", "7=+ c #C2B8AC", "8=+ c #C1BAB0", "9=+ c #C7C0B8", "0=+ c #C8C4BB", "a=+ c #C0BDB6", "b=+ c #B9B6AF", "c=+ c #BDBAB5", "d=+ c #C4C4C2", "e=+ c #BFCCC5", "f=+ c #BEC9C3", "g=+ c #BCC7C1", "h=+ c #C0C9C4", "i=+ c #BCC2BE", "j=+ c #C4C9C5", "k=+ c #B9C3CC", "l=+ c #B3BDC6", "m=+ c #AEB9B5", "n=+ c #ADB6B1", "o=+ c #ACB5B2", "p=+ c #B2B6B9", "q=+ c #AEAFB3", "r=+ c #A9A7AC", "s=+ c #A9A7AA", "t=+ c #ABA5A5", "u=+ c #B0AA9E", "v=+ c #8E8268", "w=+ c #827258", "x=+ c #6F5E44", "y=+ c #684A32", "z=+ c #694B33", "A=+ c #6A4E36", "B=+ c #684E35", "C=+ c #6F553C", "D=+ c #77614A", "E=+ c #7E6C5E", "F=+ c #B2ACA0", "G=+ c #B3AE91", "H=+ c #B3B391", "I=+ c #A9A685", "J=+ c #878161", "K=+ c #5D5437", "L=+ c #3E3015", "M=+ c #321E05", "N=+ c #311901", "O=+ c #3F200C", "P=+ c #43200D", "Q=+ c #451E0D", "R=+ c #4A1F0F", "S=+ c #4E1E10", "T=+ c #531F12", "U=+ c #552116", "V=+ c #5A2015", "W=+ c #621F16", "X=+ c #662016", "Y=+ c #6B2219", "Z=+ c #6E251C", "`=+ c #72281F", " -+ c #762921", ".-+ c #792922", "+-+ c #7C2923", "@-+ c #7C2722", "#-+ c #7E2622", "$-+ c #802522", "%-+ c #822422", "&-+ c #842523", "*-+ c #882625", "=-+ c #892726", "--+ c #8A2827", ";-+ c #882925", ">-+ c #832823", ",-+ c #802520", "'-+ c #7B241D", ")-+ c #74211B", "!-+ c #6E1F18", "~-+ c #691E19", "{-+ c #641D17", "]-+ c #611E18", "^-+ c #5D2119", "/-+ c #5B211D", "(-+ c #54221B", "_-+ c #501F1A", ":-+ c #4F201A", "<-+ c #4F221C", "[-+ c #4E2720", "}-+ c #452321", "|-+ c #3B221D", "1-+ c #342017", "2-+ c #332316", "3-+ c #26210D", "4-+ c #1E1E06", "5-+ c #4F4F37", "6-+ c #CCC6B6", "7-+ c #B3AB9E", "8-+ c #9D8C92", "9-+ c #8D8E7E", "0-+ c #9A9B8B", "a-+ c #9B9C8A", "b-+ c #8F8E7A", "c-+ c #A4A38E", "d-+ c #AFAD98", "e-+ c #8B8A75", "f-+ c #191607", "g-+ c #170D01", "h-+ c #462520", "i-+ c #532A28", "j-+ c #662E31", "k-+ c #6B2E33", "l-+ c #6D2F34", "m-+ c #6B2D32", "n-+ c #6B2A30", "o-+ c #6A292F", "p-+ c #6C2B2F", "q-+ c #6F2E32", "r-+ c #6F2F30", "s-+ c #6E2E2F", "t-+ c #6B2D2E", "u-+ c #682C2E", "v-+ c #632B2C", "w-+ c #673033", "x-+ c #653133", "y-+ c #613033", "z-+ c #5E3032", "A-+ c #5E3033", "B-+ c #5B3135", "C-+ c #543137", "D-+ c #4E3135", "E-+ c #4B2E33", "F-+ c #482B2F", "G-+ c #442A2D", "H-+ c #43292A", "I-+ c #442A29", "J-+ c #492D2C", "K-+ c #4C2E2C", "L-+ c #50312F", "M-+ c #53302E", "N-+ c #552C2A", "O-+ c #582C2B", "P-+ c #5A2E2D", "Q-+ c #5E312C", "R-+ c #5C312B", "S-+ c #5A2F29", "T-+ c #562F28", "U-+ c #502D27", "V-+ c #4C2E26", "W-+ c #482D24", "X-+ c #452F24", "Y-+ c #412F25", "Z-+ c #69675B", "`-+ c #A08F85", " ;+ c #A29086", ".;+ c #9A867B", "+;+ c #826B5D", "@;+ c #6D5344", "#;+ c #614931", "$;+ c #5D4529", "%;+ c #5F3B21", "&;+ c #5B391D", "*;+ c #5A3B1E", "=;+ c #5A3E26", "-;+ c #543E30", ";;+ c #544133", ">;+ c #554339", ",;+ c #5B4A42", "';+ c #65544C", ");+ c #6B5E56", "!;+ c #73706B", "~;+ c #787570", "{;+ c #7A7673", "];+ c #817D7C", "^;+ c #9F9CA3", "/;+ c #A3A0AB", "(;+ c #A19FAC", "_;+ c #A2A0AD", ":;+ c #A7A5B2", "<;+ c #DEEBF1", "[;+ c #DFEDF0", "};+ c #D3E2DF", "|;+ c #D4E0DE", "1;+ c #D3DFDD", "2;+ c #D8D9DB", "3;+ c #D0CACC", "4;+ c #D6CBC9", "5;+ c #E0D1CE", "6;+ c #D6C7C4", "7;+ c #BAA9A2", "8;+ c #A7968C", "9;+ c #A19386", "0;+ c #B5A596", "a;+ c #C4B8AC", "b;+ c #C5BEB6", "c;+ c #C7C0BA", "d;+ c #B9B6B1", "e;+ c #C5C5C3", "f;+ c #BEC8C9", "g;+ c #BFCAC6", "h;+ c #BDC8C4", "i;+ c #BEC7C4", "j;+ c #B1B5B8", "k;+ c #B0B1B5", "l;+ c #ADAEB2", "m;+ c #A7A5A8", "n;+ c #7C6E53", "o;+ c #726145", "p;+ c #665237", "q;+ c #624D32", "r;+ c #695137", "s;+ c #6A4E38", "t;+ c #664A34", "u;+ c #694D37", "v;+ c #6C523B", "w;+ c #6C543C", "x;+ c #6C563E", "y;+ c #755F47", "z;+ c #806B56", "A;+ c #998A83", "B;+ c #AFA3A3", "C;+ c #B8A596", "D;+ c #B4A590", "E;+ c #CAC3A6", "F;+ c #BDB898", "G;+ c #968F72", "H;+ c #3A2C11", "I;+ c #36250B", "J;+ c #402810", "K;+ c #41250F", "L;+ c #43200C", "M;+ c #46200D", "N;+ c #4C1E0F", "O;+ c #501F11", "P;+ c #551F13", "Q;+ c #592015", "R;+ c #5B2116", "S;+ c #5F2017", "T;+ c #6A241C", "U;+ c #6D241B", "V;+ c #70261D", "W;+ c #782922", "X;+ c #7A2A23", "Y;+ c #7D2823", "Z;+ c #7D2521", "`;+ c #7F2622", " >+ c #832523", ".>+ c #852624", "+>+ c #8A2626", "@>+ c #872824", "#>+ c #812621", "$>+ c #7C251E", "%>+ c #76211C", "&>+ c #6F1F18", "*>+ c #691B17", "=>+ c #621B15", "->+ c #621F19", ";>+ c #5E221A", ">>+ c #521F1B", ",>+ c #50211B", "'>+ c #50231D", ")>+ c #4F2620", "!>+ c #462321", "~>+ c #412321", "{>+ c #3D211D", "]>+ c #332816", "^>+ c #1E1C05", "/>+ c #171700", "(>+ c #36361E", "_>+ c #9C9986", ":>+ c #CDC7B7", "<>+ c #B8B0A3", "[>+ c #9C8D92", "}>+ c #9C8C8F", "|>+ c #98998B", "1>+ c #9A9B89", "2>+ c #999B86", "3>+ c #8E8D78", "4>+ c #A8A792", "5>+ c #7A7561", "6>+ c #231A0B", "7>+ c #170900", "8>+ c #241208", "9>+ c #4D2422", "0>+ c #5A2829", "a>+ c #61262A", "b>+ c #6F2E34", "c>+ c #722F36", "d>+ c #762F37", "e>+ c #752E36", "f>+ c #732A33", "g>+ c #712A32", "h>+ c #722B33", "i>+ c #732E33", "j>+ c #702E30", "k>+ c #6D2D2E", "l>+ c #692B2E", "m>+ c #672C2E", "n>+ c #6B3336", "o>+ c #6A3336", "p>+ c #683438", "q>+ c #673538", "r>+ c #663437", "s>+ c #643336", "t>+ c #633236", "u>+ c #603235", "v>+ c #5E333A", "w>+ c #5A3338", "x>+ c #562F34", "y>+ c #512D31", "z>+ c #4D2A2E", "A>+ c #4D2B2C", "B>+ c #4B2B2C", "C>+ c #512F2D", "D>+ c #54312F", "E>+ c #562D2B", "F>+ c #572B2A", "G>+ c #592B2B", "H>+ c #5B2E2B", "I>+ c #5E312E", "J>+ c #5D322C", "K>+ c #5A312B", "L>+ c #58312A", "M>+ c #472C23", "N>+ c #422C21", "O>+ c #453128", "P>+ c #3F2E24", "Q>+ c #3B2E25", "R>+ c #4B473C", "S>+ c #B5B2AB", "T>+ c #A3928A", "U>+ c #9D8C82", "V>+ c #786254", "W>+ c #6F5846", "X>+ c #5A4027", "Y>+ c #5C4227", "Z>+ c #5D3E22", "`>+ c #5F3D22", " ,+ c #603C22", ".,+ c #613C21", "+,+ c #603D21", "@,+ c #534032", "#,+ c #605249", "$,+ c #665C53", "%,+ c #6E675F", "&,+ c #77706A", "*,+ c #79716E", "=,+ c #847E7E", "-,+ c #999498", ";,+ c #A09EA9", ">,+ c #A1A1AD", ",,+ c #A6A4B1", "',+ c #ACAFB6", "),+ c #E5F2F8", "!,+ c #E9F7FA", "~,+ c #D8E8E7", "{,+ c #D8E8E5", "],+ c #D7E6E3", "^,+ c #D7E3E1", "/,+ c #D2D0D3", "(,+ c #D6CBC7", "_,+ c #CDBFBC", ":,+ c #B7A9A0", "<,+ c #C1AEA0", "[,+ c #BCA99B", "},+ c #B2A89E", "|,+ c #B4A797", "1,+ c #BCAF9F", "2,+ c #C5B9AB", "3,+ c #BCB9B4", "4,+ c #B6B3AE", "5,+ c #B4B3AF", "6,+ c #BDBCB8", "7,+ c #AEB8B9", "8,+ c #C9D3D2", "9,+ c #BAC6C2", "0,+ c #ACB4B6", "a,+ c #A6A7A9", "b,+ c #A8A8A8", "c,+ c #8D8673", "d,+ c #72684F", "e,+ c #695A3D", "f,+ c #6C5038", "g,+ c #684C37", "h,+ c #735D48", "i,+ c #76614C", "j,+ c #7F6D57", "k,+ c #8A7967", "l,+ c #8F7F72", "m,+ c #B3AC9C", "n,+ c #B6AD9C", "o,+ c #C2B29B", "p,+ c #72694A", "q,+ c #453A1E", "r,+ c #261800", "s,+ c #281400", "t,+ c #361E06", "u,+ c #361A04", "v,+ c #2E0B00", "w,+ c #451F0C", "x,+ c #4C1E0E", "y,+ c #521E11", "z,+ c #581F14", "A,+ c #5D2117", "B,+ c #622419", "C,+ c #64241B", "D,+ c #68241B", "E,+ c #71271E", "F,+ c #762720", "G,+ c #7F2723", "H,+ c #7E2320", "I,+ c #8B2727", "J,+ c #8D2627", "K,+ c #8C2526", "L,+ c #892523", "M,+ c #862924", "N,+ c #822722", "O,+ c #77221D", "P,+ c #691C16", "Q,+ c #631A14", "R,+ c #621D18", "S,+ c #60211A", "T,+ c #5D221C", "U,+ c #58211C", "V,+ c #4F241E", "W,+ c #361F17", "X,+ c #352317", "Y,+ c #2D2613", "Z,+ c #222009", "`,+ c #1B1B03", " '+ c #24230E", ".'+ c #827F6C", "+'+ c #BEBBAA", "@'+ c #B5AFA1", "#'+ c #97988A", "$'+ c #909181", "%'+ c #999886", "&'+ c #969581", "*'+ c #93917C", "='+ c #675F4C", "-'+ c #1D0B00", ";'+ c #1F0700", ">'+ c #34170F", ",'+ c #4B2822", "''+ c #512522", ")'+ c #6C2A2E", "!'+ c #772E35", "~'+ c #7B3037", "{'+ c #7F2F38", "]'+ c #7E2E37", "^'+ c #7B2B34", "/'+ c #7A2A33", "('+ c #7A2F36", "_'+ c #702B2E", ":'+ c #6D2B2C", "<'+ c #6B2B2B", "['+ c #6A2A2A", "}'+ c #682A2B", "|'+ c #682C2C", "1'+ c #6A2E30", "2'+ c #692E30", "3'+ c #6E3335", "4'+ c #6D3536", "5'+ c #6D3639", "6'+ c #6B3739", "7'+ c #6A363A", "8'+ c #683639", "9'+ c #653237", "0'+ c #66333A", "a'+ c #633238", "b'+ c #5E2F35", "c'+ c #5A2D32", "d'+ c #552B2F", "e'+ c #542A2C", "f'+ c #532B2C", "g'+ c #542E2B", "h'+ c #542B29", "i'+ c #562A27", "j'+ c #592C29", "k'+ c #5B2F2C", "l'+ c #5C302D", "m'+ c #5B322E", "n'+ c #5A332E", "o'+ c #58322F", "p'+ c #472E27", "q'+ c #452E28", "r'+ c #372821", "s'+ c #362921", "t'+ c #251E14", "u'+ c #817C76", "v'+ c #938177", "w'+ c #816D62", "x'+ c #6B553D", "y'+ c #58422A", "z'+ c #5C4229", "A'+ c #5C3B1C", "B'+ c #523F2E", "C'+ c #5F5148", "D'+ c #7A6F69", "E'+ c #837977", "F'+ c #8F8B8C", "G'+ c #98959C", "H'+ c #9D9CA4", "I'+ c #A5A5AF", "J'+ c #A5A8AF", "K'+ c #AEB3B6", "L'+ c #B0BABB", "M'+ c #EDFBFE", "N'+ c #E5F5F4", "O'+ c #DEEDEA", "P'+ c #D5E4E1", "Q'+ c #D4DEDD", "R'+ c #D6DCDC", "S'+ c #D8D8DA", "T'+ c #D7D5D6", "U'+ c #D6D2CF", "V'+ c #CEC9C5", "W'+ c #D4CBC4", "X'+ c #C8B5A7", "Y'+ c #CCB6A9", "Z'+ c #B8A69A", "`'+ c #B1A79D", " )+ c #A39588", ".)+ c #CAC0B4", "+)+ c #C7BFB4", "@)+ c #C2BFBA", "#)+ c #BABAB8", "$)+ c #BFBFBD", "%)+ c #C5D0CC", "&)+ c #B9C4C0", "*)+ c #BABEBD", "=)+ c #B4B5B0", "-)+ c #A19E8D", ";)+ c #98937F", ">)+ c #908A72", ",)+ c #807A60", "')+ c #6A6144", "))+ c #5F4C2E", "!)+ c #674E30", "~)+ c #674C31", "{)+ c #684B39", "])+ c #6A4F3E", "^)+ c #705647", "/)+ c #786556", "()+ c #7C6B5B", "_)+ c #928273", ":)+ c #B0A0A1", "<)+ c #B29FA1", "[)+ c #BBAC97", "})+ c #C8B8A1", "|)+ c #BAA892", "1)+ c #A09077", "2)+ c #6B5D42", "3)+ c #483A1F", "4)+ c #2E1D03", "5)+ c #342007", "6)+ c #4C321B", "7)+ c #512E1A", "8)+ c #4C2311", "9)+ c #4D1E0E", "0)+ c #521E10", "a)+ c #5A2014", "b)+ c #612318", "c)+ c #68251C", "d)+ c #6D271D", "e)+ c #75261F", "f)+ c #77271E", "g)+ c #7A271F", "h)+ c #7B2820", "i)+ c #7E2720", "j)+ c #7F241F", "k)+ c #81221E", "l)+ c #852320", "m)+ c #8D2725", "n)+ c #8E2826", "o)+ c #8E2625", "p)+ c #8D2524", "q)+ c #8B2523", "r)+ c #892724", "s)+ c #852821", "t)+ c #7D241E", "u)+ c #78201C", "v)+ c #711E18", "w)+ c #6A1B16", "x)+ c #651C16", "y)+ c #601F19", "z)+ c #5E211C", "A)+ c #5B221B", "B)+ c #541F19", "C)+ c #511F18", "D)+ c #4E211C", "E)+ c #4A2421", "F)+ c #462422", "G)+ c #3F221E", "H)+ c #381F18", "I)+ c #25230E", "J)+ c #1D1C07", "K)+ c #191803", "L)+ c #676652", "M)+ c #ABA897", "N)+ c #B8B2A4", "O)+ c #B9B1A4", "P)+ c #949587", "Q)+ c #959684", "R)+ c #969583", "S)+ c #9E9C87", "T)+ c #A8A38D", "U)+ c #847F69", "V)+ c #504531", "W)+ c #1E0600", "X)+ c #280A02", "Y)+ c #431E18", "Z)+ c #582625", "`)+ c #64292B", " !+ c #763438", ".!+ c #7A3138", "+!+ c #7C2F37", "@!+ c #813039", "#!+ c #83303A", "$!+ c #822F39", "%!+ c #7F2C36", "&!+ c #7E2B35", "*!+ c #7D3036", "=!+ c #722C2E", "-!+ c #6E2C2D", ";!+ c #6C2A2B", ">!+ c #6A2A2B", ",!+ c #6B2D30", "'!+ c #6B2F31", ")!+ c #6E3234", "!!+ c #6E3639", "~!+ c #6E373A", "{!+ c #6E373C", "]!+ c #6D363B", "^!+ c #6B3439", "/!+ c #6A3338", "(!+ c #6A3138", "_!+ c #683137", ":!+ c #662F35", "~+ c #7B685A", ",~+ c #806E62", "'~+ c #817366", ")~+ c #8B7D72", "!~+ c #B29DA2", "~~+ c #D0C0A9", "{~+ c #402C13", "]~+ c #2F1901", "^~+ c #2C1400", "/~+ c #3C200A", "(~+ c #482813", "_~+ c #482310", ":~+ c #4E2312", "<~+ c #592A1A", "[~+ c #572214", "}~+ c #5D2116", "|~+ c #66231A", "1~+ c #6C261C", "2~+ c #772821", "3~+ c #782821", "4~+ c #7A2721", "5~+ c #79241D", "6~+ c #7A251E", "7~+ c #81241F", "8~+ c #82231F", "9~+ c #872321", "0~+ c #8A2422", "a~+ c #8F2525", "b~+ c #912525", "c~+ c #8B2823", "d~+ c #862721", "e~+ c #7C211C", "f~+ c #771F1B", "g~+ c #6E1D19", "h~+ c #691E18", "i~+ c #63201A", "j~+ c #62231E", "k~+ c #591F1B", "l~+ c #531E18", "m~+ c #511E1A", "n~+ c #50201C", "o~+ c #4E2523", "p~+ c #492624", "q~+ c #3B2019", "r~+ c #382419", "s~+ c #382B1B", "t~+ c #1B1805", "u~+ c #151400", "v~+ c #4F4E3A", "w~+ c #939280", "x~+ c #BDBAAB", "y~+ c #C4BEB0", "z~+ c #939184", "A~+ c #969382", "B~+ c #969380", "C~+ c #B0AB97", "D~+ c #655F49", "E~+ c #250900", "F~+ c #351008", "G~+ c #4E251F", "H~+ c #5E2E2A", "I~+ c #5E2826", "J~+ c #7D383B", "K~+ c #7F3439", "L~+ c #7F3036", "M~+ c #833038", "N~+ c #843139", "O~+ c #852F38", "P~+ c #822C35", "Q~+ c #7F2C34", "R~+ c #802D35", "S~+ c #803137", "T~+ c #793134", "U~+ c #753130", "V~+ c #722E2F", "W~+ c #6B292A", "X~+ c #6B2B2C", "Y~+ c #6C2E31", "Z~+ c #6D3133", "`~+ c #6F3335", " {+ c #713638", ".{+ c #72373B", "+{+ c #6F373A", "@{+ c #6D3538", "#{+ c #6E3337", "${+ c #6B2E35", "%{+ c #6A2F35", "&{+ c #652E31", "*{+ c #5F2D30", "={+ c #5A2A2A", "-{+ c #532726", ";{+ c #4F2624", ">{+ c #4B2620", ",{+ c #4B241F", "'{+ c #4D2621", "){+ c #502924", "!{+ c #572E2C", "~{+ c #582E2F", "{{+ c #56302F", "]{+ c #53312F", "^{+ c #533734", "/{+ c #472F2D", "({+ c #1D1812", "_{+ c #57524C", ":{+ c #B3AEA8", "<{+ c #8B7A6A", "[{+ c #84725E", "}{+ c #796753", "|{+ c #644F3C", "1{+ c #5C4631", "2{+ c #5D442E", "3{+ c #5E3F23", "4{+ c #5C3F1D", "5{+ c #5B3F1A", "6{+ c #553F32", "7{+ c #604A3F", "8{+ c #6B544C", "9{+ c #6F5B52", "0{+ c #75625B", "a{+ c #7E6F68", "b{+ c #868281", "c{+ c #89878A", "d{+ c #8D8E92", "e{+ c #A8A9AB", "f{+ c #B0B4B5", "g{+ c #B0B6B4", "h{+ c #B4BFBB", "i{+ c #DAE8E9", "j{+ c #E0EEEE", "k{+ c #DCE8E8", "l{+ c #E1EDED", "m{+ c #DBDFE2", "n{+ c #CDC9C6", "o{+ c #C0B9B3", "p{+ c #CFC4C0", "q{+ c #CEBCB0", "r{+ c #B6A89B", "s{+ c #C7B9AC", "t{+ c #CAC0B6", "u{+ c #CFC8BE", "v{+ c #D0C9BF", "w{+ c #C2BEB5", "x{+ c #BAB5AF", "y{+ c #BBB8B3", "z{+ c #ACABA6", "A{+ c #B7B8B3", "B{+ c #C7C9C8", "C{+ c #C8CCCB", "D{+ c #C4CDCA", "E{+ c #CAD5D1", "F{+ c #C9D4D0", "G{+ c #C7D2CE", "H{+ c #B8BCBD", "I{+ c #A7B1B2", "J{+ c #A8AEAC", "K{+ c #AFB4AE", "L{+ c #B6B9B0", "M{+ c #ADAEA0", "N{+ c #989681", "O{+ c #969277", "P{+ c #817C5E", "Q{+ c #6E6848", "R{+ c #635D3B", "S{+ c #5E512F", "T{+ c #6A4B2F", "U{+ c #694932", "V{+ c #6B4F41", "W{+ c #6E5749", "X{+ c #B49DA3", "Y{+ c #B2A0A0", "Z{+ c #B6A998", "`{+ c #C2B39E", " ]+ c #CEBEA7", ".]+ c #98846B", "+]+ c #362008", "@]+ c #371D06", "#]+ c #3E1F0A", "$]+ c #452510", "%]+ c #492612", "&]+ c #492310", "*]+ c #4D1F0F", "=]+ c #592615", "-]+ c #652D1E", ";]+ c #66281B", ">]+ c #6B271C", ",]+ c #782A20", "']+ c #7E251F", ")]+ c #7C231D", "!]+ c #7E231E", "~]+ c #842521", "{]+ c #862421", "]]+ c #8B2322", "^]+ c #8C2222", "/]+ c #8F2323", "(]+ c #932526", "_]+ c #932727", ":]+ c #85271F", "<]+ c #7F221B", "[]+ c #791F17", "}]+ c #761D17", "|]+ c #721D16", "1]+ c #721F19", "2]+ c #6F221C", "3]+ c #681F19", "4]+ c #68231C", "5]+ c #66251F", "6]+ c #62261E", "7]+ c #592019", "8]+ c #561F1A", "9]+ c #532724", "0]+ c #4D2724", "a]+ c #3C1F19", "b]+ c #3A2419", "c]+ c #201D0C", "d]+ c #1A1907", "e]+ c #737260", "f]+ c #BAB7A8", "g]+ c #CAC4B6", "h]+ c #929083", "i]+ c #908E7F", "j]+ c #A3A08F", "k]+ c #9C9783", "l]+ c #4F4730", "m]+ c #271604", "n]+ c #2D0F04", "o]+ c #3E1710", "p]+ c #572C26", "q]+ c #63322E", "r]+ c #612928", "s]+ c #7C3539", "t]+ c #7B2E34", "u]+ c #802F36", "v]+ c #7F2E35", "w]+ c #7E3236", "x]+ c #7F373A", "y]+ c #7B3736", "z]+ c #763233", "A]+ c #712D2E", "B]+ c #6E2A2B", "C]+ c #6B292B", "D]+ c #6F3134", "E]+ c #723437", "F]+ c #72353A", "G]+ c #713439", "H]+ c #703338", "I]+ c #6A2C31", "J]+ c #6A2D32", "K]+ c #6A2F33", "L]+ c #672F32", "M]+ c #522625", "N]+ c #4B2321", "O]+ c #45201A", "P]+ c #44211B", "Q]+ c #44231C", "R]+ c #46251E", "S]+ c #4E2B27", "T]+ c #552D2B", "U]+ c #562C2D", "V]+ c #552D2E", "W]+ c #522E2E", "X]+ c #52302F", "Y]+ c #49292A", "Z]+ c #422625", "`]+ c #322320", " ^+ c #2D1F1C", ".^+ c #271E19", "+^+ c #241D17", "@^+ c #1C1711", "#^+ c #49443E", "$^+ c #807B75", "%^+ c #827161", "&^+ c #5F4D39", "*^+ c #5E4936", "=^+ c #5F4934", "-^+ c #5B4025", ";^+ c #5D4020", ">^+ c #5C401B", ",^+ c #593C1A", "'^+ c #5B4134", ")^+ c #63483D", "!^+ c #6F594E", "~^+ c #7B6861", "{^+ c #82736C", "]^+ c #897F7D", "^^+ c #86817E", "/^+ c #848283", "(^+ c #88888A", "_^+ c #8F9092", ":^+ c #A4A6A5", "<^+ c #B0B4B3", "[^+ c #B2B6B5", "}^+ c #B3BEBA", "|^+ c #D6E4E4", "1^+ c #E2EEEE", "2^+ c #D1D6D9", "3^+ c #CFD4D7", "4^+ c #DEE4E4", "5^+ c #CCD5D2", "6^+ c #DCE0DF", "7^+ c #D2D4D3", "8^+ c #D8D8D6", "9^+ c #DFDEDA", "0^+ c #D9CCC6", "a^+ c #D6C7C0", "b^+ c #B5A99D", "c^+ c #BEB2A4", "d^+ c #CCC0B2", "e^+ c #C8BFB6", "f^+ c #BFB8B0", "g^+ c #BEBBB4", "h^+ c #B4B1AC", "i^+ c #BBBCB7", "j^+ c #C1C3C0", "k^+ c #BEC2C3", "l^+ c #C4C9CC", "m^+ c #C6CBCE", "n^+ c #B6BABB", "o^+ c #BFC3C6", "p^+ c #9FA8A5", "q^+ c #A1A8A1", "r^+ c #AAADA4", "s^+ c #B1B3A6", "t^+ c #989785", "u^+ c #888671", "v^+ c #89856A", "w^+ c #756F4D", "x^+ c #635B37", "y^+ c #5D532F", "z^+ c #5A4C27", "A^+ c #654629", "B^+ c #67482C", "C^+ c #6E4E39", "D^+ c #684B3B", "E^+ c #715549", "F^+ c #755D53", "G^+ c #816D66", "H^+ c #8E7D76", "I^+ c #B5A1A2", "J^+ c #B6A0A3", "K^+ c #B4A39C", "L^+ c #B9AA97", "M^+ c #A39179", "N^+ c #6E5A41", "O^+ c #3A250A", "P^+ c #381C04", "Q^+ c #401D09", "R^+ c #4F2916", "S^+ c #562D1B", "T^+ c #502514", "U^+ c #532414", "V^+ c #612C1E", "W^+ c #682E20", "X^+ c #66261A", "Y^+ c #722C22", "Z^+ c #762C21", "`^+ c #7C2C23", " /+ c #7F2A23", "./+ c #812822", "+/+ c #82251E", "@/+ c #80211D", "#/+ c #7E1F1B", "$/+ c #832420", "%/+ c #852622", "&/+ c #882623", "*/+ c #8D2323", "=/+ c #8E2222", "-/+ c #8D2121", ";/+ c #8F2122", ">/+ c #912324", ",/+ c #962527", "'/+ c #952927", ")/+ c #8D2722", "!/+ c #87261F", "~/+ c #7F201A", "{/+ c #791C15", "]/+ c #751A15", "^/+ c #741D16", "//+ c #73241D", "(/+ c #6E211B", "_/+ c #6D241E", ":/+ c #6C2722", "(+ c #5A401F", ",(+ c #5A3F21", "'(+ c #5B422C", ")(+ c #593C2A", "!(+ c #5A3D2B", "~(+ c #5C4537", "{(+ c #665247", "](+ c #78675D", "^(+ c #87807A", "/(+ c #86827F", "((+ c #858482", "_(+ c #969B9E", ":(+ c #A3A3A3", "<(+ c #ACAEAD", "[(+ c #A4A8A7", "}(+ c #B4BDBA", "|(+ c #E6F1F3", "1(+ c #D6DEE1", "2(+ c #CED8D7", "3(+ c #D0D9D8", "4(+ c #D5D7D4", "5(+ c #DAD9D5", "6(+ c #CCBBB1", "7(+ c #D3C2B8", "8(+ c #BEACA2", "9(+ c #B3A195", "0(+ c #B2A094", "a(+ c #B3A8A4", "b(+ c #B2A89C", "c(+ c #BCB2A6", "d(+ c #C6BCB0", "e(+ c #C3BCB4", "f(+ c #C5C0BA", "g(+ c #C6C1BB", "h(+ c #C3C0B9", "i(+ c #BEBBB6", "j(+ c #B9B8B4", "k(+ c #BBBAB6", "l(+ c #BDC1C4", "m(+ c #BABEC1", "n(+ c #AFB4B8", "o(+ c #A3AEB2", "p(+ c #B1B6AF", "q(+ c #A9AB9E", "r(+ c #9C9D8D", "s(+ c #979580", "t(+ c #918D72", "u(+ c #878063", "v(+ c #7A7150", "w(+ c #695F3B", "x(+ c #5D512B", "y(+ c #5D4F28", "z(+ c #66542E", "A(+ c #6B4C30", "B(+ c #755546", "C(+ c #795D4F", "D(+ c #7F6860", "E(+ c #84716B", "F(+ c #8D7E7B", "G(+ c #B19C9B", "H(+ c #B19D9C", "I(+ c #D2C1B1", "J(+ c #9F8A75", "K(+ c #6C563F", "L(+ c #412911", "M(+ c #301600", "N(+ c #3C2008", "O(+ c #512E18", "P(+ c #572618", "Q(+ c #5A291A", "R(+ c #5E291B", "S(+ c #62281C", "T(+ c #66281D", "U(+ c #6C2A1E", "V(+ c #712B21", "W(+ c #792C22", "X(+ c #7B2B22", "Y(+ c #7F2821", "Z(+ c #81271F", "`(+ c #83241E", " _+ c #84231C", "._+ c #85221D", "+_+ c #81201A", "@_+ c #83221C", "#_+ c #87241F", "$_+ c #8A2722", "%_+ c #8D2723", "&_+ c #8C2622", "*_+ c #8B2320", "=_+ c #8B221F", "-_+ c #8E2220", ";_+ c #8F2120", ">_+ c #922221", ",_+ c #942222", "'_+ c #912322", ")_+ c #8B241F", "!_+ c #85241D", "~_+ c #82211A", "{_+ c #7C1E16", "]_+ c #781E16", "^_+ c #771E18", "/_+ c #75201B", "(_+ c #73231C", "__+ c #6D221D", ":_+ c #6A231F", "<_+ c #68231E", "[_+ c #63221E", "}_+ c #61221D", "|_+ c #5D231F", "1_+ c #552420", "2_+ c #4F2320", "3_+ c #421F19", "4_+ c #302217", "5_+ c #181909", "6_+ c #C8C5B4", "7_+ c #BAB7A6", "8_+ c #928F7E", "9_+ c #9A9582", "0_+ c #81755F", "a_+ c #2A1E06", "b_+ c #1F0D00", "c_+ c #39170D", "d_+ c #4B221C", "e_+ c #5D2D29", "f_+ c #622F2C", "g_+ c #682E2D", "h_+ c #703031", "i_+ c #7A3337", "j_+ c #7E3338", "k_+ c #82353B", "l_+ c #81343A", "m_+ c #7D3539", "n_+ c #7C3638", "o_+ c #7D3737", "p_+ c #7B3535", "q_+ c #773131", "r_+ c #712B2D", "s_+ c #732E31", "t_+ c #773235", "u_+ c #783338", "v_+ c #753035", "w_+ c #763136", "x_+ c #793439", "y_+ c #76333A", "z_+ c #713036", "A_+ c #652F2F", "B_+ c #5F2D2C", "C_+ c #572A27", "D_+ c #4F2823", "E_+ c #492620", "F_+ c #4C2828", "G_+ c #552C30", "H_+ c #562C30", "I_+ c #542B31", "J_+ c #522B30", "K_+ c #4D2A30", "L_+ c #46272C", "M_+ c #3F2528", "N_+ c #382425", "O_+ c #332324", "P_+ c #312323", "Q_+ c #2F2323", "R_+ c #2A201E", "S_+ c #68615B", "T_+ c #B7B0AA", "U_+ c #998D81", "V_+ c #92867A", "W_+ c #786859", "X_+ c #5E3F2B", "Y_+ c #614B3D", "Z_+ c #6F5C4E", "`_+ c #79685E", " :+ c #7B6E66", ".:+ c #7E7975", "+:+ c #898B8A", "@:+ c #A9A9AB", "#:+ c #9D9F9E", "$:+ c #ACB0B1", "%:+ c #AEB4B2", "&:+ c #B4BABA", "*:+ c #D8E2E4", "=:+ c #D0D8DB", "-:+ c #CDC2BE", ";:+ c #C6BBB7", ">:+ c #C3B5B2", ",:+ c #C4B2A8", "':+ c #A4A09D", "):+ c #B2A7A3", "!:+ c #B9AFA5", "~:+ c #CDC8C2", "{:+ c #C6C5C1", "]:+ c #B3B7BA", "^:+ c #B4B8BB", "/:+ c #A9AFAD", "(:+ c #ACB1AA", "_:+ c #ACAFA4", "::+ c #A3A494", "<:+ c #999782", "[:+ c #7C7352", "}:+ c #736643", "|:+ c #665833", "1:+ c #5D4E25", "2:+ c #5E4C24", "3:+ c #63482A", "4:+ c #6B4B32", "5:+ c #6B4B36", "6:+ c #6F503E", "7:+ c #89726C", "8:+ c #968686", "9:+ c #B3A09C", "0:+ c #BEABA5", "a:+ c #B3A09A", "b:+ c #8D7865", "c:+ c #3F240F", "d:+ c #381904", "e:+ c #3C1C05", "f:+ c #411E08", "g:+ c #441B07", "h:+ c #5A2517", "i:+ c #60261B", "j:+ c #63271C", "k:+ c #69261D", "l:+ c #77291F", "m:+ c #7D2A22", "n:+ c #802920", "o:+ c #84261E", "p:+ c #86241B", "q:+ c #87211C", "r:+ c #86201B", "s:+ c #88221E", "t:+ c #8B2521", "u:+ c #8E2623", "v:+ c #8D2522", "w:+ c #8C2320", "x:+ c #8D211F", "y:+ c #8E201F", "z:+ c #912120", "A:+ c #922020", "B:+ c #8F221F", "C:+ c #8A231E", "D:+ c #85221C", "E:+ c #821F19", "F:+ c #7E1D16", "G:+ c #772019", "H:+ c #71201C", "I:+ c #6C211C", "J:+ c #68211D", "K:+ c #66201E", "L:+ c #65211E", "M:+ c #582220", "N:+ c #522220", "O:+ c #4C201D", "P:+ c #372018", "Q:+ c #332218", "R:+ c #262012", "S:+ c #262415", "T:+ c #171808", "U:+ c #303121", "V:+ c #848371", "W:+ c #BEBDAB", "X:+ c #BCBBA9", "Y:+ c #ACA998", "Z:+ c #A69F8C", "`:+ c #1C0D00", " <+ c #271200", ".<+ c #431F13", "+<+ c #51261F", "@<+ c #5E2D28", "#<+ c #642F2B", "$<+ c #6B312F", "%<+ c #753535", "&<+ c #7B3537", "*<+ c #7D3236", "=<+ c #83373B", "-<+ c #85363B", ";<+ c #82363A", "><+ c #81363A", ",<+ c #7E3639", "'<+ c #7D3739", ")<+ c #7E3735", "!<+ c #7D3634", "~<+ c #7A3331", "{<+ c #762E2F", "]<+ c #732D2D", "^<+ c #752D30", "/<+ c #763032", "(<+ c #752F31", "_<+ c #793335", ":<+ c #762F33", "<<+ c #762F35", "[<+ c #793238", "}<+ c #783137", "|<+ c #722D32", "1<+ c #682D2F", "2<+ c #632D2D", "3<+ c #572929", "4<+ c #4D2A26", "5<+ c #4E2C2A", "6<+ c #4B2E2A", "7<+ c #4B2F2B", "8<+ c #482F2B", "9<+ c #462D29", "0<+ c #482A28", "a<+ c #4D292B", "b<+ c #50292C", "c<+ c #52292D", "d<+ c #562B32", "e<+ c #582B32", "f<+ c #562B34", "g<+ c #542B33", "h<+ c #4F2A32", "i<+ c #49282F", "j<+ c #44272C", "k<+ c #3C2629", "l<+ c #382529", "m<+ c #352528", "n<+ c #322626", "o<+ c #2A211C", "p<+ c #29201B", "q<+ c #1E1510", "r<+ c #120904", "s<+ c #6F6661", "t<+ c #5F4127", "u<+ c #624C3E", "v<+ c #675549", "w<+ c #71675E", "x<+ c #7D7874", "y<+ c #838182", "z<+ c #89898B", "A<+ c #989699", "B<+ c #A4A3A8", "C<+ c #D1DFE2", "D<+ c #CCD4D6", "E<+ c #D0D5D8", "F<+ c #DADAD8", "G<+ c #D9D8D6", "H<+ c #D7D3D0", "I<+ c #D4CCCA", "J<+ c #CFC7C4", "K<+ c #C3B6B0", "L<+ c #CEC0B7", "M<+ c #B9B0A7", "N<+ c #C5BEB4", "O<+ c #CAC3B9", "P<+ c #CDC6BC", "Q<+ c #C5C2BD", "R<+ c #A8ADA7", "S<+ c #A6A89D", "T<+ c #A1A294", "U<+ c #999683", "V<+ c #8F8B72", "W<+ c #7C7151", "X<+ c #706341", "Y<+ c #695935", "Z<+ c #604D25", "`<+ c #725341", " [+ c #7F6156", ".[+ c #856A5F", "+[+ c #907772", "@[+ c #A6A0A0", "#[+ c #A89586", "$[+ c #3A1D0B", "%[+ c #311000", "&[+ c #431E0C", "*[+ c #532D1A", "=[+ c #552A19", "-[+ c #501F10", ";[+ c #64251C", ">[+ c #6B261F", ",[+ c #6E2721", "'[+ c #6E2820", ")[+ c #70251F", "![+ c #72251D", "~[+ c #76261F", "{[+ c #802922", "][+ c #822820", "^[+ c #83261E", "/[+ c #86251C", "([+ c #87251C", "_[+ c #882319", ":[+ c #89221B", "<[+ c #89221D", "[[+ c #8D2621", "}[+ c #8F2823", "|[+ c #902723", "1[+ c #8F2622", "2[+ c #8F2320", "3[+ c #8D211E", "4[+ c #8D201D", "5[+ c #8F1F1D", "6[+ c #8E1E1C", "7[+ c #8C1F1C", "8[+ c #88211C", "9[+ c #842219", "0[+ c #811F16", "a[+ c #7E1D14", "b[+ c #7A1C14", "c[+ c #73201A", "d[+ c #70211C", "e[+ c #6E201C", "f[+ c #6B201B", "g[+ c #661F1B", "h[+ c #65201B", "i[+ c #60211C", "j[+ c #5B211F", "k[+ c #54211E", "l[+ c #47201B", "m[+ c #3F201B", "n[+ c #392019", "o[+ c #1C1D0D", "p[+ c #626351", "q[+ c #ADAF9A", "r[+ c #BDBFAA", "s[+ c #A8A596", "t[+ c #969384", "u[+ c #958671", "v[+ c #120200", "w[+ c #321905", "x[+ c #4C261B", "y[+ c #592823", "z[+ c #622D29", "A[+ c #682E2C", "B[+ c #703332", "C[+ c #7C3839", "D[+ c #7C3034", "E[+ c #84353A", "F[+ c #85343A", "G[+ c #7E383A", "H[+ c #7F3836", "I[+ c #7C3533", "J[+ c #783031", "K[+ c #762E31", "L[+ c #772F32", "M[+ c #742C2F", "N[+ c #783033", "O[+ c #793135", "P[+ c #772F33", "Q[+ c #792E35", "R[+ c #752E34", "S[+ c #733135", "T[+ c #6D2F32", "U[+ c #622A2B", "V[+ c #5D292B", "W[+ c #553332", "X[+ c #553634", "Y[+ c #543636", "Z[+ c #523434", "`[+ c #503232", " }+ c #4E3030", ".}+ c #4F2F30", "+}+ c #52292F", "@}+ c #552A31", "#}+ c #592C33", "$}+ c #5B2C34", "%}+ c #5B2C36", "&}+ c #5A2B35", "*}+ c #562B35", "=}+ c #542A34", "-}+ c #4E2931", ";}+ c #48292F", ">}+ c #41282E", ",}+ c #3C272C", "'}+ c #38282B", ")}+ c #362828", "!}+ c #352A28", "~}+ c #1C130E", "{}+ c #1B120D", "]}+ c #6C635E", "^}+ c #82766A", "/}+ c #746454", "(}+ c #685745", "_}+ c #5A4832", ":}+ c #5B4023", "<}+ c #5F4024", "[}+ c #5E4026", "}}+ c #594431", "|}+ c #5B4839", "1}+ c #68584B", "2}+ c #6C5E55", "3}+ c #7A736D", "4}+ c #7E7976", "5}+ c #7F7B7A", "6}+ c #7F7B7C", "7}+ c #939196", "8}+ c #969499", "9}+ c #9E9DA2", "0}+ c #A9A8AD", "a}+ c #AAA9AE", "b}+ c #A3A2A7", "c}+ c #D7D7D7", "d}+ c #D5D4D2", "e}+ c #CDC4BF", "f}+ c #C8BBB3", "g}+ c #D0C3BB", "h}+ c #D4C3B9", "i}+ c #C5B4AA", "j}+ c #9F9E9A", "k}+ c #AEA4A5", "l}+ c #BCB5AD", "m}+ c #B5B5B3", "n}+ c #B7B9B6", "o}+ c #BDCAD2", "p}+ c #BAC7CF", "q}+ c #B9BDC0", "r}+ c #ADB1B4", "s}+ c #AFB3B2", "t}+ c #ABB0AC", "u}+ c #9B9B8F", "v}+ c #8D8872", "w}+ c #857E62", "x}+ c #827759", "y}+ c #756645", "z}+ c #675733", "A}+ c #654D27", "B}+ c #745843", "C}+ c #785B49", "D}+ c #826658", "E}+ c #8B6F64", "F}+ c #99807B", "G}+ c #AD9F9F", "H}+ c #A6A0A4", "I}+ c #A9A3A3", "J}+ c #CFBFAF", "K}+ c #A79686", "L}+ c #6C5746", "M}+ c #3D2312", "N}+ c #381B0B", "O}+ c #341302", "P}+ c #371202", "Q}+ c #42180A", "R}+ c #4E2011", "S}+ c #552416", "T}+ c #5C2217", "U}+ c #752723", "V}+ c #772824", "W}+ c #772823", "X}+ c #762521", "Y}+ c #78251F", "Z}+ c #7B261F", "`}+ c #802721", " |+ c #84271F", ".|+ c #84261C", "+|+ c #86261A", "@|+ c #87251A", "#|+ c #89241A", "$|+ c #8A231A", "%|+ c #8B241D", "&|+ c #8C2520", "*|+ c #902924", "=|+ c #912824", "-|+ c #8E221F", ";|+ c #8B1E1B", ">|+ c #8D1D1B", ",|+ c #8C1C1A", "'|+ c #8A1D1A", ")|+ c #872019", "!|+ c #852018", "~|+ c #831E16", "{|+ c #7F1D14", "]|+ c #7D1C15", "^|+ c #7A1D15", "/|+ c #761F18", "(|+ c #741F1A", "_|+ c #6F201B", ":|+ c #6D1F1B", "<|+ c #6A1F1C", "[|+ c #681E1B", "}|+ c #631F1C", "||+ c #57221E", "1|+ c #52211D", "2|+ c #4A211D", "3|+ c #43201C", "4|+ c #3C211A", "5|+ c #35221B", "6|+ c #272115", "7|+ c #1A1B0D", "8|+ c #474836", "9|+ c #9B9D88", "0|+ c #BEC0AA", "a|+ c #B3B5A0", "b|+ c #9A9383", "c|+ c #99927F", "d|+ c #34240D", "e|+ c #130100", "f|+ c #3D220F", "g|+ c #562A21", "h|+ c #622B26", "i|+ c #682D29", "j|+ c #6D2D2B", "k|+ c #763231", "l|+ c #813738", "m|+ c #833437", "n|+ c #7E2E31", "o|+ c #853337", "p|+ c #873237", "q|+ c #843437", "r|+ c #843538", "s|+ c #823638", "t|+ c #7F3738", "u|+ c #833938", "v|+ c #843A37", "w|+ c #803635", "x|+ c #7C3231", "y|+ c #782E2D", "z|+ c #772D2E", "A|+ c #782E2F", "B|+ c #72272B", "C|+ c #772C30", "D|+ c #792E32", "E|+ c #7A2D33", "F|+ c #7D3237", "G|+ c #773036", "H|+ c #712E35", "I|+ c #6C2B31", "J|+ c #67292E", "K|+ c #61282E", "L|+ c #602C30", "M|+ c #602F32", "N|+ c #5F3235", "O|+ c #5F3537", "P|+ c #60393C", "Q|+ c #633C3F", "R|+ c #613D41", "S|+ c #5E3A3E", "T|+ c #5B373B", "U|+ c #5C383C", "V|+ c #573337", "W|+ c #573035", "X|+ c #562D35", "Y|+ c #582D36", "Z|+ c #5D2F39", "`|+ c #60313B", " 1+ c #612F3B", ".1+ c #5F2D39", "+1+ c #5C2C3A", "@1+ c #582C39", "#1+ c #542C37", "$1+ c #4D2C35", "%1+ c #462B34", "&1+ c #402931", "*1+ c #3C292F", "=1+ c #38292C", "-1+ c #382D2B", ";1+ c #201712", ">1+ c #170E09", ",1+ c #5F5651", "'1+ c #817464", ")1+ c #756555", "!1+ c #5E3F20", "~1+ c #5D4022", "{1+ c #65544A", "]1+ c #7C7270", "^1+ c #807876", "/1+ c #817879", "(1+ c #7F797B", "_1+ c #8F8C93", ":1+ c #A5A2A9", "<1+ c #A9A8AE", "[1+ c #A6A5AB", "}1+ c #A3A2A8", "|1+ c #A0A1A6", "11+ c #D0DAE3", "21+ c #D1D7D7", "31+ c #D4D9D5", "41+ c #D9D4D0", "51+ c #D0C5BF", "61+ c #CDC0B8", "71+ c #D7CAC2", "81+ c #D3C5BC", "91+ c #A09E9F", "01+ c #AFA3A5", "a1+ c #BAB7B0", "b1+ c #C8C7C3", "c1+ c #C4C3BF", "d1+ c #BDBDBB", "e1+ c #BCBEBD", "f1+ c #B9C6CE", "g1+ c #B5C2CA", "h1+ c #B7C5CE", "i1+ c #BAC8D1", "j1+ c #BBCAD1", "k1+ c #ABADAA", "l1+ c #A7A8A2", "m1+ c #908B77", "n1+ c #878066", "o1+ c #7B6C4D", "p1+ c #6E5B3A", "q1+ c #614D28", "r1+ c #614923", "s1+ c #644A25", "t1+ c #674B26", "u1+ c #684A26", "v1+ c #694A2B", "w1+ c #6E5541", "x1+ c #8C7065", "y1+ c #957870", "z1+ c #9C817A", "A1+ c #9F8682", "B1+ c #A6918E", "C1+ c #B09C9B", "D1+ c #B2A2A3", "E1+ c #A69B85", "F1+ c #AEA38D", "G1+ c #C1B6A0", "H1+ c #BEB19E", "I1+ c #9D8E7B", "J1+ c #311C09", "K1+ c #280E00", "L1+ c #351506", "M1+ c #411B0E", "N1+ c #471D11", "O1+ c #4A1A10", "P1+ c #501C11", "Q1+ c #5D241B", "R1+ c #6B2A24", "S1+ c #762723", "T1+ c #7C2625", "U1+ c #7E2827", "V1+ c #7F2725", "W1+ c #7D2523", "X1+ c #7D2420", "Y1+ c #83261F", "Z1+ c #87261D", "`1+ c #87271B", " 2+ c #88261B", ".2+ c #882619", "+2+ c #8A2519", "@2+ c #8C251E", "#2+ c #8E2521", "$2+ c #8B1F1C", "%2+ c #891D1A", "&2+ c #871E18", "*2+ c #841F15", "=2+ c #801E15", "-2+ c #7B1E17", ";2+ c #781F19", ">2+ c #6A1F1A", ",2+ c #651F1D", "'2+ c #5D201D", ")2+ c #47211E", "!2+ c #36211C", "~2+ c #1D1E10", "{2+ c #0F1201", "]2+ c #323522", "^2+ c #828570", "/2+ c #B7BBA4", "(2+ c #BBBDA7", "_2+ c #9A9484", ":2+ c #9A9381", "<2+ c #9A8E78", "[2+ c #281801", "}2+ c #1D0900", "|2+ c #472816", "12+ c #5E2C23", "22+ c #692C29", "32+ c #6F2E2C", "42+ c #7A3031", "52+ c #823336", "62+ c #863136", "72+ c #822B31", "82+ c #882F35", "92+ c #893036", "02+ c #873036", "a2+ c #813535", "b2+ c #843A39", "c2+ c #813736", "d2+ c #702529", "e2+ c #752A2E", "f2+ c #782C30", "g2+ c #803339", "h2+ c #7D3038", "i2+ c #792D37", "j2+ c #752C35", "k2+ c #6C2930", "l2+ c #692A32", "m2+ c #682F35", "n2+ c #6A3339", "o2+ c #69363D", "p2+ c #693A40", "q2+ c #6C3F46", "r2+ c #6F4249", "s2+ c #6E404A", "t2+ c #6B3D47", "u2+ c #693B45", "v2+ c #6B3D48", "w2+ c #6C414A", "x2+ c #663E46", "y2+ c #603C40", "z2+ c #5E363E", "A2+ c #61363F", "B2+ c #663842", "C2+ c #6B3944", "D2+ c #693542", "E2+ c #66323F", "F2+ c #643140", "G2+ c #613340", "H2+ c #5C323E", "I2+ c #55313B", "J2+ c #4E303A", "K2+ c #452E36", "L2+ c #402D33", "M2+ c #3B2C2F", "N2+ c #413833", "O2+ c #2B221D", "P2+ c #221914", "Q2+ c #8F8174", "R2+ c #827564", "S2+ c #776855", "T2+ c #6B5943", "U2+ c #5F452C", "V2+ c #5D3E29", "W2+ c #5C3F1F", "X2+ c #584537", "Y2+ c #5E5047", "Z2+ c #685B53", "`2+ c #736864", " 3+ c #7D7371", ".3+ c #837978", "+3+ c #847B7E", "@3+ c #868187", "#3+ c #86838A", "$3+ c #908D96", "%3+ c #9D9AA1", "&3+ c #A2A1A9", "*3+ c #A4A3AB", "=3+ c #A8A7AD", "-3+ c #A3A3AB", ";3+ c #D1DBE4", ">3+ c #D3DDE6", ",3+ c #CED6D9", "'3+ c #D6DCDA", ")3+ c #D7DDDB", "!3+ c #D8DEDA", "~3+ c #DCD8D5", "{3+ c #D5CDCA", "]3+ c #D5CDCB", "^3+ c #D2CAC7", "/3+ c #D9C8C0", "(3+ c #D6C5BB", "_3+ c #BEADA3", ":3+ c #B4A296", "<3+ c #9F9F9F", "[3+ c #A1A09E", "}3+ c #AEA3A7", "|3+ c #AFA898", "13+ c #B1AAA2", "23+ c #B8B3AD", "33+ c #C1C1C1", "43+ c #C0C2C1", "53+ c #B4C2CB", "63+ c #B4C5CD", "73+ c #B8C9D1", "83+ c #BCC5CE", "93+ c #BFC8D1", "03+ c #BBC4CD", "a3+ c #B0B9C2", "b3+ c #B4B8B9", "c3+ c #A6A8A5", "d3+ c #A6A7A1", "e3+ c #979588", "f3+ c #8D8771", "g3+ c #85795F", "h3+ c #7C6F4F", "i3+ c #6F5C3C", "j3+ c #634F2C", "k3+ c #5C4420", "l3+ c #5E441F", "m3+ c #654723", "n3+ c #684724", "o3+ c #6B492D", "p3+ c #6F5848", "q3+ c #7C6253", "r3+ c #8B7065", "s3+ c #9B8079", "t3+ c #A08782", "u3+ c #A68C8B", "v3+ c #AA9594", "w3+ c #B29E9F", "x3+ c #B3A3A3", "y3+ c #B1A2A5", "z3+ c #ADA2A6", "A3+ c #B4AD91", "B3+ c #C5BEA2", "C3+ c #C0B99F", "D3+ c #544530", "E3+ c #362511", "F3+ c #2E1705", "G3+ c #3F2413", "H3+ c #4E1F15", "I3+ c #562119", "J3+ c #612620", "K3+ c #752F2D", "L3+ c #7B2526", "M3+ c #812526", "N3+ c #822627", "O3+ c #822726", "P3+ c #822424", "Q3+ c #832621", "R3+ c #84251F", "S3+ c #872719", "T3+ c #88281A", "U3+ c #892818", "V3+ c #89271A", "W3+ c #8D2420", "X3+ c #881C19", "Y3+ c #891C19", "Z3+ c #8B201A", "`3+ c #871F16", " 4+ c #861F16", ".4+ c #841F17", "+4+ c #822017", "@4+ c #811E18", "#4+ c #7E2018", "$4+ c #7C1F18", "%4+ c #792018", "&4+ c #79211D", "*4+ c #75221E", "=4+ c #72211D", "-4+ c #6D1F1D", ";4+ c #57211F", ">4+ c #502320", ",4+ c #40231F", "'4+ c #37221D", ")4+ c #31241C", "!4+ c #271E15", "~4+ c #222014", "{4+ c #202113", "]4+ c #171A09", "^4+ c #242714", "/4+ c #636750", "(4+ c #A7AB94", "_4+ c #C2C4AE", ":4+ c #ACAA9B", "<4+ c #ACA89C", "[4+ c #98917F", "}4+ c #B2A793", "|4+ c #827660", "14+ c #3E2F18", "24+ c #231300", "34+ c #4A2B19", "44+ c #622B24", "54+ c #712D2C", "64+ c #782C2E", "74+ c #7C2C2F", "84+ c #832E33", "94+ c #882D34", "04+ c #872A32", "a4+ c #892C34", "b4+ c #862F35", "c4+ c #843236", "d4+ c #823434", "e4+ c #803434", "f4+ c #813734", "g4+ c #833936", "h4+ c #7E3232", "i4+ c #7A2E2E", "j4+ c #792D2F", "k4+ c #722628", "l4+ c #772B2D", "m4+ c #7B2C31", "n4+ c #7A2B30", "o4+ c #7B2C32", "p4+ c #7D2D36", "q4+ c #7B2B36", "r4+ c #782A37", "s4+ c #752935", "t4+ c #732A35", "u4+ c #722C37", "v4+ c #71323B", "w4+ c #733540", "x4+ c #733A43", "y4+ c #753D48", "z4+ c #77414E", "A4+ c #794551", "B4+ c #774350", "C4+ c #74404D", "D4+ c #733F4C", "E4+ c #784353", "F4+ c #7A4A56", "G4+ c #754D55", "H4+ c #6D484F", "I4+ c #6A424A", "J4+ c #6B4049", "K4+ c #71414D", "L4+ c #75434F", "M4+ c #6F3B48", "N4+ c #6C3948", "O4+ c #693B48", "P4+ c #643A48", "Q4+ c #5D3945", "R4+ c #553741", "S4+ c #4D333C", "T4+ c #45313A", "U4+ c #302521", "V4+ c #160B07", "W4+ c #211612", "X4+ c #594E4A", "Y4+ c #80715C", "Z4+ c #7A6A53", "`4+ c #624E35", " 5+ c #60442C", ".5+ c #5E3D2A", "+5+ c #5B3A27", "@5+ c #5D3D26", "#5+ c #5B3E1E", "$5+ c #524034", "%5+ c #665754", "&5+ c #7E7070", "*5+ c #807579", "=5+ c #7E7980", "-5+ c #7F7C85", ";5+ c #87848F", ">5+ c #918E97", ",5+ c #A9A8B0", "'5+ c #A7A7AF", ")5+ c #A8ABB4", "!5+ c #D3DBE6", "~5+ c #D5DEE7", "{5+ c #DAE3EC", "]5+ c #DCE5EC", "^5+ c #D2DCDB", "/5+ c #D5DEDB", "(5+ c #D4DDD8", "_5+ c #D6DCD8", ":5+ c #D1C4BB", "<5+ c #D7C9C0", "[5+ c #D8CAC1", "}5+ c #D2C4BB", "|5+ c #A2A19F", "15+ c #ACA9A0", "25+ c #A8A89E", "35+ c #B1ADA4", "45+ c #BAB9B4", "55+ c #C2C3C5", "65+ c #C0C4C5", "75+ c #B9C7D2", "85+ c #BACBD5", "95+ c #BBCCD6", "05+ c #C3CCD5", "a5+ c #BBC3CE", "b5+ c #BEC7D0", "c5+ c #BDC5D0", "d5+ c #B8C1CA", "e5+ c #B6BEC9", "f5+ c #BDC6CF", "g5+ c #B7BFCA", "h5+ c #BAC2CD", "i5+ c #B7C0C9", "j5+ c #B4BCC7", "k5+ c #A7A8AA", "l5+ c #A0A19C", "m5+ c #867F65", "n5+ c #7E7055", "o5+ c #716241", "p5+ c #64502F", "q5+ c #5E4823", "r5+ c #5B411C", "s5+ c #624420", "t5+ c #6D4927", "u5+ c #704C2C", "v5+ c #725034", "w5+ c #705542", "x5+ c #755F51", "y5+ c #8C7468", "z5+ c #927A6E", "A5+ c #9C8178", "B5+ c #A48982", "C5+ c #A9908B", "D5+ c #B09695", "E5+ c #B09B9A", "F5+ c #B3A3A6", "G5+ c #BFB9A1", "H5+ c #B9B496", "I5+ c #B1AC8E", "J5+ c #8D866A", "K5+ c #50462B", "L5+ c #2C2008", "M5+ c #311F09", "N5+ c #3B2510", "O5+ c #3E2111", "P5+ c #401C0E", "Q5+ c #43170E", "R5+ c #491710", "S5+ c #551B17", "T5+ c #642223", "U5+ c #6B2122", "V5+ c #7D2325", "W5+ c #832327", "X5+ c #852527", "Y5+ c #852526", "Z5+ c #842425", "`5+ c #8A2923", " 6+ c #86251F", ".6+ c #85271D", "+6+ c #85271B", "@6+ c #86291A", "#6+ c #862918", "$6+ c #892919", "%6+ c #8A281B", "&6+ c #8C251C", "*6+ c #8E251F", "=6+ c #902721", "-6+ c #8B221C", ";6+ c #881F19", ">6+ c #851C16", ",6+ c #861B15", "'6+ c #871C16", ")6+ c #881D17", "!6+ c #891E18", "~6+ c #8A1F19", "{6+ c #8C211B", "]6+ c #8D221C", "^6+ c #862119", "/6+ c #83201A", "(6+ c #7F2119", "_6+ c #7E211A", ":6+ c #7B2119", "<6+ c #78231E", "[6+ c #76231F", "}6+ c #74231F", "|6+ c #72231F", "16+ c #70221E", "26+ c #6F211F", "36+ c #6C221F", "46+ c #61201E", "56+ c #532321", "66+ c #31241E", "76+ c #1D1B0F", "86+ c #1F2211", "96+ c #171C08", "06+ c #424730", "a6+ c #929780", "b6+ c #C6CAB3", "c6+ c #AEAC9D", "d6+ c #AEAA9E", "e6+ c #9B9889", "f6+ c #9B9885", "g6+ c #95907C", "h6+ c #74654E", "i6+ c #2E1C06", "j6+ c #240F00", "k6+ c #331A04", "l6+ c #4F2A1A", "m6+ c #662924", "n6+ c #762C2B", "o6+ c #7B2F31", "p6+ c #7C2C2D", "q6+ c #7E292E", "r6+ c #842B2F", "s6+ c #872C33", "t6+ c #872B30", "u6+ c #892A32", "v6+ c #8A2B31", "w6+ c #882B33", "x6+ c #892D32", "y6+ c #882F33", "z6+ c #863134", "A6+ c #7F3131", "B6+ c #7F3333", "C6+ c #823636", "D6+ c #803232", "E6+ c #7E2F32", "F6+ c #7D2E31", "G6+ c #76272A", "H6+ c #7B2C2F", "I6+ c #7C2D32", "J6+ c #7C2B32", "K6+ c #7E2F35", "L6+ c #7B2A31", "M6+ c #7B2A33", "N6+ c #7A2834", "O6+ c #792934", "P6+ c #782B35", "Q6+ c #772E39", "R6+ c #79333D", "S6+ c #7B3742", "T6+ c #7A3B46", "U6+ c #7C3E4B", "V6+ c #7F4251", "W6+ c #804654", "X6+ c #7E4453", "Y6+ c #7B4150", "Z6+ c #7B4052", "`6+ c #814658", " 7+ c #854F5F", ".7+ c #815562", "+7+ c #794F59", "@7+ c #744855", "#7+ c #754754", "$7+ c #794957", "%7+ c #7C4958", "&7+ c #794454", "*7+ c #744150", "=7+ c #723F50", "-7+ c #6F4050", ";7+ c #6A404E", ">7+ c #633D4A", ",7+ c #5B3B46", "'7+ c #523740", ")7+ c #4A333D", "!7+ c #463138", "~7+ c #433334", "{7+ c #413330", "]7+ c #3B2D2C", "^7+ c #443633", "/7+ c #1F1410", "(7+ c #524743", "_7+ c #6C5D4A", ":7+ c #604731", "<7+ c #5B402B", "[7+ c #5E422D", "}7+ c #5F3C29", "|7+ c #5E3B28", "17+ c #5F3C26", "27+ c #5C3F21", "37+ c #5A4333", "47+ c #513F35", "57+ c #5B4A43", "67+ c #675853", "77+ c #736461", "87+ c #7C7378", "97+ c #7C777D", "07+ c #837E85", "a7+ c #8B868D", "b7+ c #8F8993", "c7+ c #A4A2AD", "d7+ c #A4A4AE", "e7+ c #A4A6B2", "f7+ c #A5A9B2", "g7+ c #98A1A8", "h7+ c #99A2A9", "i7+ c #D4DDE6", "j7+ c #D0DAD9", "k7+ c #CED9D5", "l7+ c #CED7D4", "m7+ c #C8C6C7", "n7+ c #CCCACB", "o7+ c #CAC6C5", "p7+ c #CEC4BB", "q7+ c #D3C5BA", "r7+ c #DCCCBF", "s7+ c #D2C2B3", "t7+ c #C4B4A7", "u7+ c #B2A499", "v7+ c #A2A0A1", "w7+ c #A3A2A0", "x7+ c #C2BDB7", "y7+ c #C9CBCA", "z7+ c #C6CAC9", "A7+ c #C3C7C8", "B7+ c #C0C8CA", "C7+ c #C2D0D9", "D7+ c #BFD0D8", "E7+ c #BBC9D2", "F7+ c #B8C0CB", "G7+ c #C0C8D3", "H7+ c #BCC4CF", "I7+ c #B0B8C3", "J7+ c #B3BBC6", "K7+ c #A1A6A9", "L7+ c #B2B6B7", "M7+ c #B1B5B6", "N7+ c #A0A2A1", "O7+ c #919390", "P7+ c #949488", "Q7+ c #8C897A", "R7+ c #85806D", "S7+ c #857A64", "T7+ c #84765C", "U7+ c #776648", "V7+ c #6A5635", "W7+ c #624A28", "X7+ c #5E4421", "Y7+ c #604220", "Z7+ c #714E32", "`7+ c #755137", " 8+ c #785843", ".8+ c #745D4D", "+8+ c #7A665B", "@8+ c #877368", "#8+ c #9A837B", "$8+ c #A28B83", "%8+ c #AA938D", "&8+ c #B09894", "*8+ c #B49F9C", "=8+ c #B49F9E", "-8+ c #B39F9E", ";8+ c #B4A4A5", ">8+ c #B2A4A4", ",8+ c #B4ABA2", "'8+ c #BDB4A5", ")8+ c #C9C3A9", "!8+ c #A6A181", "~8+ c #777053", "{8+ c #433A1D", "]8+ c #231500", "^8+ c #281600", "/8+ c #39200A", "(8+ c #371804", "_8+ c #421B0C", ":8+ c #4E2013", "<8+ c #642820", "[8+ c #672622", "}8+ c #6B2422", "|8+ c #6E2423", "18+ c #762524", "28+ c #7D2122", "38+ c #842124", "48+ c #872526", "58+ c #872323", "68+ c #87241E", "78+ c #88261D", "88+ c #89271C", "98+ c #89291B", "08+ c #8A281D", "a8+ c #8D261F", "b8+ c #8E2720", "c8+ c #8A211B", "d8+ c #861D17", "e8+ c #841B15", "f8+ c #851A14", "g8+ c #8F221D", "h8+ c #8F241E", "i8+ c #882017", "j8+ c #872017", "k8+ c #872218", "l8+ c #87221A", "m8+ c #83221B", "n8+ c #80221A", "o8+ c #7B231F", "p8+ c #73221E", "q8+ c #72211E", "r8+ c #641F1A", "s8+ c #56231F", "t8+ c #4E221F", "u8+ c #45221E", "v8+ c #35221C", "w8+ c #1D160C", "x8+ c #222013", "y8+ c #242716", "z8+ c #101501", "A8+ c #2D321C", "B8+ c #C7CCB6", "C8+ c #B0AE9F", "D8+ c #AFAB9F", "E8+ c #ADA99D", "F8+ c #959482", "G8+ c #959782", "H8+ c #9A9A82", "I8+ c #A2A087", "J8+ c #9A947A", "K8+ c #706047", "L8+ c #200700", "M8+ c #210500", "N8+ c #4E2D1A", "O8+ c #552718", "P8+ c #74312B", "Q8+ c #7C2E2C", "R8+ c #7E2E2F", "S8+ c #802F2E", "T8+ c #832E31", "U8+ c #842E2F", "V8+ c #852C30", "W8+ c #852C2E", "X8+ c #872C31", "Y8+ c #882C2F", "Z8+ c #882C31", "`8+ c #892D30", " 9+ c #8A2E31", ".9+ c #8A2E33", "+9+ c #892E33", "@9+ c #853035", "#9+ c #833336", "$9+ c #823235", "%9+ c #802F35", "&9+ c #7E2D33", "*9+ c #7C2B31", "=9+ c #7A292F", "-9+ c #79282E", ";9+ c #7B292F", ">9+ c #7B2A30", ",9+ c #7D2B31", "'9+ c #7E2C32", ")9+ c #812F35", "!9+ c #7F2E34", "~9+ c #7C2D33", "{9+ c #7A2D35", "]9+ c #7E333A", "^9+ c #823942", "/9+ c #873F4A", "(9+ c #833F4A", "_9+ c #884652", ":9+ c #8C4C5A", "<9+ c #894B5A", "[9+ c #834455", "}9+ c #824354", "|9+ c #884B5D", "19+ c #8E5367", "29+ c #844F63", "39+ c #865366", "49+ c #89556B", "59+ c #865268", "69+ c #804C62", "79+ c #7B475D", "89+ c #7A495C", "99+ c #7B4C5E", "09+ c #78495B", "a9+ c #714657", "b9+ c #734859", "c9+ c #754F5E", "d9+ c #714D5B", "e9+ c #644250", "f9+ c #5B3B48", "g9+ c #593B45", "h9+ c #533A3E", "i9+ c #4D393A", "j9+ c #483436", "k9+ c #402E2E", "l9+ c #3B2B2B", "m9+ c #2D221E", "n9+ c #231812", "o9+ c #1F140E", "p9+ c #564943", "q9+ c #B7AEA9", "r9+ c #887F76", "s9+ c #73695F", "t9+ c #6B6155", "u9+ c #675A4A", "v9+ c #5A442F", "w9+ c #5C412E", "x9+ c #603D29", "y9+ c #633E2B", "z9+ c #623C27", "A9+ c #603725", "B9+ c #5A3620", "C9+ c #573C29", "D9+ c #543D2D", "E9+ c #5B493F", "F9+ c #69574D", "G9+ c #7F7573", "H9+ c #847A79", "I9+ c #857B83", "J9+ c #928B93", "K9+ c #9D95A0", "L9+ c #9F99A5", "M9+ c #A4A2AF", "N9+ c #A2A2AE", "O9+ c #A3A7B0", "P9+ c #A9B3BC", "Q9+ c #A2ACB5", "R9+ c #A1ABB4", "S9+ c #ADB7C0", "T9+ c #ACB6BF", "U9+ c #B8C7CA", "V9+ c #DFEAEE", "W9+ c #EDF8FC", "X9+ c #F1FCFF", "Y9+ c #EAF5F9", "Z9+ c #CFCFCF", "`9+ c #CBCAC8", " 0+ c #CFC8C0", ".0+ c #D6C9B9", "+0+ c #D2C2B2", "@0+ c #CDBDAE", "#0+ c #A8A4A1", "$0+ c #AAA6A5", "%0+ c #A0A09E", "&0+ c #ADA4A5", "*0+ c #B5ABA2", "=0+ c #BAB0A6", "-0+ c #C5BBB9", ";0+ c #CAC2BF", ">0+ c #B6B2AF", ",0+ c #B7B3B0", "'0+ c #BBBAB8", ")0+ c #BECCCC", "!0+ c #C0C9D2", "~0+ c #B6BFC8", "{0+ c #AAB3B0", "]0+ c #A7ACA6", "^0+ c #A5A8A1", "/0+ c #9B9D92", "(0+ c #8D8F81", "_0+ c #8B8C7A", ":0+ c #857D66", "<0+ c #807258", "[0+ c #776446", "}0+ c #6E5537", "|0+ c #6B492E", "10+ c #6E4F3D", "20+ c #775D50", "30+ c #7B675E", "40+ c #85746D", "50+ c #907F78", "60+ c #AA9992", "70+ c #B3A4A1", "80+ c #B1AAA0", "90+ c #B2A9A0", "00+ c #AEA89A", "a0+ c #C1B4A1", "b0+ c #B2A88D", "c0+ c #787154", "d0+ c #45371C", "e0+ c #342309", "f0+ c #3D250D", "g0+ c #42230E", "h0+ c #4C1D0D", "i0+ c #592112", "j0+ c #651F15", "k0+ c #6D2018", "l0+ c #74241D", "m0+ c #79241F", "n0+ c #7C2420", "o0+ c #80231E", "p0+ c #872522", "q0+ c #8C2624", "r0+ c #8C2421", "s0+ c #8C231F", "t0+ c #8B2520", "u0+ c #8D2820", "v0+ c #8C271F", "w0+ c #8A251D", "x0+ c #88211A", "y0+ c #861F18", "z0+ c #891C17", "A0+ c #8B1E19", "B0+ c #8C1F1A", "C0+ c #8D201B", "D0+ c #90201C", "E0+ c #8E211A", "F0+ c #861E13", "G0+ c #862014", "H0+ c #852014", "I0+ c #852016", "J0+ c #862117", "K0+ c #84231A", "L0+ c #82241C", "M0+ c #7B1E16", "N0+ c #7A1F1A", "O0+ c #79201A", "P0+ c #781F1B", "Q0+ c #761E1A", "R0+ c #751D19", "S0+ c #6D201A", "T0+ c #67201A", "U0+ c #64211B", "V0+ c #5F221D", "W0+ c #50251F", "X0+ c #36241A", "Y0+ c #282214", "Z0+ c #151805", "`0+ c #20250F", " a+ c #5C644D", ".a+ c #AAB29B", "+a+ c #B9BAAA", "@a+ c #B4B2A3", "#a+ c #B7ADA4", "$a+ c #969485", "%a+ c #969A83", "&a+ c #999C81", "*a+ c #A2A286", "=a+ c #9C977A", "-a+ c #91856B", ";a+ c #220600", ">a+ c #542D1C", ",a+ c #5E2A1D", "'a+ c #762F2B", ")a+ c #7D2D2C", "!a+ c #7F2E2D", "~a+ c #832F2F", "{a+ c #822E2E", "]a+ c #832D2E", "^a+ c #872D2F", "/a+ c #8B2C30", "(a+ c #8D2D31", "_a+ c #852E34", ":a+ c #833135", "b+ c #D1CCC6", ",b+ c #CEC7C1", "'b+ c #CEC5BE", ")b+ c #D1C9BE", "!b+ c #D1C4B4", "~b+ c #D0C2B5", "{b+ c #A1A09B", "]b+ c #A99D9F", "^b+ c #B1A9A7", "/b+ c #BDB3B2", "(b+ c #C0B8B6", "_b+ c #BEB8B8", ":b+ c #BDB9B8", "c+ c #652F23", ",c+ c #822C2D", "'c+ c #862C2E", ")c+ c #8C2C30", "!c+ c #832D30", "~c+ c #842F34", "{c+ c #842F32", "]c+ c #822D32", "^c+ c #812C2F", "/c+ c #7F2A2F", "(c+ c #7F2A2D", "_c+ c #7E292C", ":c+ c #802B30", "d+ c #807E69", ",d+ c #78725A", "'d+ c #6E5D41", ")d+ c #6D5637", "!d+ c #6A4F31", "~d+ c #715240", "{d+ c #7B6055", "]d+ c #86726B", "^d+ c #8C7B74", "/d+ c #B6AF9D", "(d+ c #BCB19F", "_d+ c #C8B7A3", ":d+ c #A18F7B", "e+ c #986279", ",e+ c #946076", "'e+ c #936277", ")e+ c #926579", "!e+ c #8F6374", "~e+ c #9A7181", "{e+ c #9B7282", "]e+ c #8B6574", "^e+ c #835F6D", "/e+ c #846270", "(e+ c #7E5C6A", "_e+ c #6F4E59", ":e+ c #684750", "f+ c #821B14", ",f+ c #821D13", "'f+ c #801E11", ")f+ c #801E13", "!f+ c #811F14", "~f+ c #802014", "{f+ c #812017", "]f+ c #7F2117", "^f+ c #7D2018", "/f+ c #78211A", "(f+ c #75221C", "_f+ c #70231B", ":f+ c #6B221C", "g+ c #56371B", ",g+ c #5E462E", "'g+ c #503E2A", ")g+ c #554434", "!g+ c #7B726B", "~g+ c #7D7777", "{g+ c #827C7E", "]g+ c #868489", "^g+ c #88858C", "/g+ c #909098", "(g+ c #CCD5D4", "_g+ c #D5DBD9", ":g+ c #D8DEDC", "h+ c #9B9A85", ",h+ c #A09E85", "'h+ c #A49E84", ")h+ c #83775D", "!h+ c #412D15", "~h+ c #441D0C", "{h+ c #5F3122", "]h+ c #622E21", "^h+ c #6C3026", "/h+ c #762C29", "(h+ c #7B2B2A", "_h+ c #7D2C2B", ":h+ c #862A2D", "i+ c #C9B6B0", ",i+ c #BCA9A3", "'i+ c #BAA5A0", ")i+ c #A89FA0", "!i+ c #A1969A", "~i+ c #A59C9F", "{i+ c #B7ACB2", "]i+ c #B9B3B7", "^i+ c #BFCCD4", "/i+ c #827B71", "(i+ c #67573D", "_i+ c #614D32", ":i+ c #6C5136", "j+ c #9F7686", ",j+ c #A17B8A", "'j+ c #9F7B89", ")j+ c #987684", "!j+ c #947481", "~j+ c #957584", "{j+ c #99717C", "]j+ c #8C626C", "^j+ c #7B515B", "/j+ c #704650", "(j+ c #6C434B", "_j+ c #6A4149", ":j+ c #633B43", "k+ c #801F19", ",k+ c #7A2119", "'k+ c #782118", ")k+ c #771E16", "!k+ c #761D15", "~k+ c #751C14", "{k+ c #731A12", "]k+ c #711810", "^k+ c #71170E", "/k+ c #761C13", "(k+ c #781B13", "_k+ c #7A1D16", ":k+ c #771D15", "l+ c #624C35", ",l+ c #5B4327", "'l+ c #5D4224", ")l+ c #604323", "!l+ c #5F4426", "~l+ c #53442F", "{l+ c #4E4331", "]l+ c #5B5241", "^l+ c #7F7E79", "/l+ c #858786", "(l+ c #949899", "_l+ c #CCDADB", ":l+ c #CDDDDD", "m+ c #672823", ",m+ c #5F2823", "'m+ c #552521", ")m+ c #4A251D", "!m+ c #442D25", "~m+ c #241C0F", "{m+ c #272111", "]m+ c #252412", "^m+ c #1A1905", "/m+ c #121400", "(m+ c #50513F", "_m+ c #A9AA98", ":m+ c #BDBCAA", "n+ c #858583", ",n+ c #858688", "'n+ c #8A8E8F", ")n+ c #A2A7AB", "!n+ c #CEDCDD", "~n+ c #D3E3E3", "{n+ c #F3FFFF", "]n+ c #D8E3DF", "^n+ c #DEE9E5", "/n+ c #E5EDF0", "(n+ c #CFD2D7", "_n+ c #D8CECC", ":n+ c #D5C6C1", "o+ c #C3C0AF", ",o+ c #A19680", "'o+ c #72624B", ")o+ c #412812", "!o+ c #320F00", "~o+ c #4C2111", "{o+ c #642B20", "]o+ c #6A2A21", "^o+ c #742D27", "/o+ c #7D322D", "(o+ c #84282B", "_o+ c #8A2A2E", ":o+ c #7F1F20", "p+ c #98907B", ",p+ c #9B937E", "'p+ c #9D9580", ")p+ c #9F9782", "!p+ c #A09883", "~p+ c #A39B88", "{p+ c #A5A08D", "]p+ c #AFAA97", "^p+ c #B3AD9D", "/p+ c #B5B09D", "(p+ c #B7B29F", "_p+ c #ADA693", ":p+ c #A5A0A6", "q+ c #854150", ",q+ c #884654", "'q+ c #844452", ")q+ c #874956", "!q+ c #8B4F5B", "~q+ c #8D535F", "{q+ c #8E5663", "]q+ c #8F5966", "^q+ c #915F6B", "/q+ c #966C7A", "(q+ c #9D7784", "_q+ c #9B7785", ":q+ c #967683", "r+ c #A7A1A1", ",r+ c #ABA7A8", "'r+ c #B5B0B6", ")r+ c #C8C5CE", "!r+ c #C6C4D1", "~r+ c #BFC2CB", "{r+ c #C2CCD8", "]r+ c #C4CED8", "^r+ c #B5B8BD", "/r+ c #B1B4B9", "(r+ c #A0A4A3", "_r+ c #9D9D9B", ":r+ c #634D38", "s+ c #7A313C", ",s+ c #7D3540", "'s+ c #7F3944", ")s+ c #86424F", "!s+ c #83414D", "~s+ c #844550", "{s+ c #8A4E5A", "]s+ c #8A505E", "^s+ c #8B5562", "/s+ c #8D5B67", "(s+ c #8E606B", "_s+ c #926874", ":s+ c #9B7582", "t+ c #635C49", ",t+ c #625B48", "'t+ c #605B47", ")t+ c #66614D", "!t+ c #63614C", "~t+ c #62604B", "{t+ c #615F4A", "]t+ c #635E4A", "^t+ c #645F4B", "/t+ c #645C49", "(t+ c #635B48", "_t+ c #665B49", ":t+ c #685D4B", "u+ c #7F2B29", ",u+ c #7C2826", "'u+ c #843030", ")u+ c #83272C", "!u+ c #812528", "~u+ c #802429", "{u+ c #7F2326", "]u+ c #7F2328", "^u+ c #7E2227", "/u+ c #802427", "(u+ c #81252A", "_u+ c #7F2726", ":u+ c #7B2727", "v+ c #828163", ",v+ c #817D60", "'v+ c #807C5F", ")v+ c #817C5F", "!v+ c #746F52", "~v+ c #757053", "{v+ c #777054", "]v+ c #786E53", "^v+ c #756B50", "/v+ c #73694E", "(v+ c #767056", "_v+ c #756F57", ":v+ c #746E54", "w+ c #6D1813", ",w+ c #6A1711", "'w+ c #671710", ")w+ c #6B1B14", "!w+ c #6A1A13", "~w+ c #681912", "{w+ c #661710", "]w+ c #64170F", "^w+ c #62180F", "/w+ c #6C1E1A", "(w+ c #6D1E1A", "_w+ c #6C1D19", ":w+ c #6C1D18", "x+ c #5E4326", ",x+ c #5E4527", "'x+ c #52402A", ")x+ c #6A5A4D", "!x+ c #7D6E67", "~x+ c #8D7F7E", "{x+ c #918589", "]x+ c #8F8289", "^x+ c #887E86", "/x+ c #7F7E83", "(x+ c #83878A", "_x+ c #909497", ":x+ c #BFCFCF", "y+ c #C3CAD2", ",y+ c #C4C8D3", "'y+ c #AAB0AC", ")y+ c #A6ACA8", "!y+ c #A3A8A4", "~y+ c #96978F", "{y+ c #938A79", "]y+ c #877A67", "^y+ c #5F472D", "/y+ c #634E3D", "(y+ c #675446", "_y+ c #705D4F", ":y+ c #928177", "z+ c #A59294", ",z+ c #917176", "'z+ c #8B636B", ")z+ c #84505C", "!z+ c #7F4752", "~z+ c #763C48", "{z+ c #6F363F", "]z+ c #703841", "^z+ c #703B43", "/z+ c #6E3B42", "(z+ c #6B3A3E", "_z+ c #693B3E", ":z+ c #6A3F46", "A+ c #545037", ",A+ c #535138", "'A+ c #545239", ")A+ c #55533A", "!A+ c #57533A", "~A+ c #58523A", "{A+ c #625A43", "]A+ c #635B44", "^A+ c #655A44", "/A+ c #635842", "(A+ c #635844", "_A+ c #58503D", ":A+ c #5C5342", "B+ c #671915", ",B+ c #691A15", "'B+ c #761F15", ")B+ c #781D1A", "!B+ c #761E1D", "~B+ c #722120", "{B+ c #642422", "]B+ c #592120", "^B+ c #441E1B", "/B+ c #3D201A", "(B+ c #382119", "_B+ c #302718", ":B+ c #2C2513", "C+ c #878382", ",C+ c #B1B0AE", "'C+ c #A6A5A3", ")C+ c #86756E", "!C+ c #7E6C62", "~C+ c #735F56", "{C+ c #6B584A", "]C+ c #695244", "^C+ c #664C3B", "/C+ c #5E4330", "(C+ c #614226", "_C+ c #593A1B", ":C+ c #5B493D", "D+ c #7C7562", ",D+ c #8F8875", "'D+ c #97907D", ")D+ c #B3A9A7", "!D+ c #B9B1AF", "~D+ c #CFCBCA", "{D+ c #C1C9CB", "]D+ c #C6CBD1", "^D+ c #C2C6CF", "/D+ c #AEB7C0", "(D+ c #B1BAC3", "_D+ c #ACB3AC", ":D+ c #A4ABA4", "E+ c #852E36", ",E+ c #862F38", "'E+ c #852E37", ")E+ c #802932", "!E+ c #7C2430", "~E+ c #7F2737", "{E+ c #7F2936", "]E+ c #812B38", "^E+ c #85323C", "/E+ c #86353C", "(E+ c #88363C", "_E+ c #843238", ":E+ c #842E31", "F+ c #8D8A77", ",F+ c #8C8A75", "'F+ c #898673", ")F+ c #898470", "!F+ c #7F7963", "~F+ c #827A63", "{F+ c #837B64", "]F+ c #807861", "^F+ c #7C745D", "/F+ c #706851", "(F+ c #675F48", "_F+ c #666247", ":F+ c #646045", "G+ c #742721", ",G+ c #782521", "'G+ c #7F2423", ")G+ c #812625", "!G+ c #7E2020", "~G+ c #7D1F1F", "{G+ c #7D1F1D", "]G+ c #7B201D", "^G+ c #791B19", "/G+ c #7B1D1B", "(G+ c #7E1F1D", "_G+ c #7D1B1A", ":G+ c #7C1A19", "H+ c #987E87", ",H+ c #A2888B", "'H+ c #9B8182", ")H+ c #94777B", "!H+ c #907176", "~H+ c #8F6E75", "{H+ c #906B73", "]H+ c #8C5E6B", "^H+ c #83515D", "/H+ c #7A4451", "(H+ c #743A48", "_H+ c #773B45", ":H+ c #7A3C47", "I+ c #52453C", ",I+ c #55473C", "'I+ c #56483B", ")I+ c #57493C", "!I+ c #574F38", "~I+ c #544C35", "{I+ c #69614A", "]I+ c #6A624B", "^I+ c #7A725B", "/I+ c #6E664F", "(I+ c #8B836C", "_I+ c #99917C", ":I+ c #A7A28E", "J+ c #842D40", ",J+ c #843040", "'J+ c #853341", ")J+ c #873742", "!J+ c #883B45", "~J+ c #883D44", "{J+ c #8C3F45", "]J+ c #883C40", "^J+ c #853639", "/J+ c #813132", "(J+ c #7A272F", "_J+ c #77262D", ":J+ c #7A2930", "K+ c #514B33", ",K+ c #514D34", "'K+ c #504C33", ")K+ c #4E4A31", "!K+ c #4D492E", "~K+ c #4D4930", "{K+ c #4B472C", "]K+ c #4A462D", "^K+ c #484429", "/K+ c #47432A", "(K+ c #474328", "_K+ c #47422C", ":K+ c #453E2E", "L+ c #BFB8A8", ",L+ c #978D95", "'L+ c #9B9680", ")L+ c #96907A", "!L+ c #93826E", "~L+ c #422213", "{L+ c #401608", "]L+ c #5E2C21", "^L+ c #73342D", "/L+ c #8D2D2F", "(L+ c #893238", "_L+ c #89323B", ":L+ c #88323B", "M+ c #C9C0B9", ",M+ c #B8B0A5", "'M+ c #7C7062", ")M+ c #827666", "!M+ c #7D7463", "~M+ c #7E7564", "{M+ c #857E6C", "]M+ c #797260", "^M+ c #77705E", "/M+ c #736E5B", "(M+ c #716C59", "_M+ c #6F6C59", ":M+ c #6C6956", "N+ c #38251F", ",N+ c #32231C", "'N+ c #231C0C", ")N+ c #C0B9A9", "!N+ c #B2AA9D", "~N+ c #978E93", "{N+ c #959480", "]N+ c #94947C", "^N+ c #877662", "/N+ c #462F1D", "(N+ c #371806", "_N+ c #451B0D", ":N+ c #612F24", "O+ c #84757C", ",O+ c #8C7F88", "'O+ c #958995", ")O+ c #99919C", "!O+ c #9B99A4", "~O+ c #9A9DA6", "{O+ c #E7F4FA", "]O+ c #D1D0CE", "^O+ c #DDD8D5", "/O+ c #DAD5D1", "(O+ c #C2B9B0", "_O+ c #867F6F", ":O+ c #837C6C", "P+ c #6B271E", ",P+ c #822223", "'P+ c #812122", ")P+ c #7D2221", "!P+ c #7B201F", "~P+ c #781D1C", "{P+ c #79191A", "]P+ c #781819", "^P+ c #7D1B1C", "/P+ c #771919", "(P+ c #731B19", "_P+ c #5D1C18", ":P+ c #611A14", "Q+ c #512D2D", ",Q+ c #351B1A", "'Q+ c #2D1513", ")Q+ c #2C1915", "!Q+ c #53413F", "~Q+ c #BFB1AE", "{Q+ c #8A7D6D", "]Q+ c #5D4D34", "^Q+ c #614223", "/Q+ c #56423B", "(Q+ c #604C4B", "_Q+ c #6D595A", ":Q+ c #756264", "R+ c #7C6553", ",R+ c #866F5F", "'R+ c #8F796B", ")R+ c #C5BCAB", "!R+ c #391E0D", "~R+ c #482414", "{R+ c #502515", "]R+ c #582416", "^R+ c #61291C", "/R+ c #6C2E23", "(R+ c #722F26", "_R+ c #752C25", ":R+ c #822021", "S+ c #614E4A", ",S+ c #B5A7A4", "'S+ c #756953", ")S+ c #685942", "!S+ c #524127", "~S+ c #604325", "{S+ c #5E4024", "]S+ c #5A4540", "^S+ c #65504D", "/S+ c #6E5A59", "(S+ c #766365", "_S+ c #7F6F72", ":S+ c #8F848C", "T+ c #230C00", ",T+ c #422515", "'T+ c #4F301E", ")T+ c #4B2A19", "!T+ c #593223", "~T+ c #59281A", "{T+ c #602419", "]T+ c #6F2B22", "^T+ c #762D26", "/T+ c #792A25", "(T+ c #771D1C", "_T+ c #761D19", ":T+ c #832120", "U+ c #5E272A", ",U+ c #603232", "'U+ c #5F3332", ")U+ c #502A29", "!U+ c #3D1E1C", "~U+ c #2A100F", "{U+ c #240F0C", "]U+ c #564241", "^U+ c #958C7B", "/U+ c #908573", "(U+ c #827763", "_U+ c #594B31", ":U+ c #55472D", "V+ c #522B1C", ",V+ c #4A1C0D", "'V+ c #632B1E", ")V+ c #67291E", "!V+ c #6D271F", "~V+ c #73241F", "{V+ c #772420", "]V+ c #7F1D1E", "^V+ c #7F201E", "/V+ c #852322", "(V+ c #832422", "_V+ c #7C1D1B", ":V+ c #771C19", "W+ c #503E3A", ",W+ c #B8ADA7", "'W+ c #B5ADAB", ")W+ c #A09F9A", "!W+ c #A0A098", "~W+ c #918877", "{W+ c #7C715D", "]W+ c #746754", "^W+ c #5E523C", "/W+ c #584932", "(W+ c #5F4E34", "_W+ c #543E31", ":W+ c #584237", "X+ c #B5B9B8", ",X+ c #A7ACA8", "'X+ c #A0A59F", ")X+ c #91948B", "!X+ c #8E8E82", "~X+ c #807466", "{X+ c #625242", "]X+ c #837062", "^X+ c #937F74", "/X+ c #C2BAAD", "(X+ c #CAC1B0", "_X+ c #372413", ":X+ c #351E0C", "Y+ c #8E6062", ",Y+ c #86585A", "'Y+ c #7F4D4E", ")Y+ c #824749", "!Y+ c #824447", "~Y+ c #814044", "{Y+ c #813F43", "]Y+ c #803E42", "^Y+ c #7E3C40", "/Y+ c #7C3A3C", "(Y+ c #793739", "_Y+ c #753536", ":Y+ c #6F3132", "Z+ c #B9C0CA", ",Z+ c #BEC1CA", "'Z+ c #B3B7B6", ")Z+ c #8A887B", "!Z+ c #7F7C6D", "~Z+ c #605343", "{Z+ c #645142", "]Z+ c #A49B8C", "^Z+ c #C3BAA9", "/Z+ c #D3C7B7", "(Z+ c #2E1B0A", "_Z+ c #37200E", ":Z+ c #391C0A", "`+ c #662C28", ",`+ c #5F2A26", "'`+ c #552928", ")`+ c #4B2524", "!`+ c #311512", "~`+ c #29110D", "{`+ c #33201C", "]`+ c #43342F", "^`+ c #6B605C", "/`+ c #665744", "(`+ c #5D432A", "_`+ c #583E2D", ":`+ c #5C4233", "<`+ c #5B4337", "[`+ c #5B473E", "}`+ c #63504A", "|`+ c #715F5D", "1`+ c #7B6B6B", "2`+ c #84787A", "3`+ c #857A7E", "4`+ c #7F797D", "5`+ c #939395", "6`+ c #A6B5BA", "7`+ c #A4B3B8", "8`+ c #A8B7BC", "9`+ c #ABB8BE", "0`+ c #AAB7BD", "a`+ c #D8DBE0", "b`+ c #CFCDCE", "c`+ c #DCD8D9", "d`+ c #EBE7E6", "e`+ c #D9D3D3", "f`+ c #DCD4D1", "g`+ c #887B73", "h`+ c #9A9180", "i`+ c #8B8370", "j`+ c #7C7461", "k`+ c #79715E", "l`+ c #706853", "m`+ c #5E5842", "n`+ c #59523F", "o`+ c #5D5143", "p`+ c #5B4F43", "q`+ c #53493D", "r`+ c #4F473A", "s`+ c #3F392B", "t`+ c #3D3729", "u`+ c #393627", "v`+ c #363324", "w`+ c #333122", "x`+ c #313224", "y`+ c #323426", "z`+ c #333527", "A`+ c #313325", "B`+ c #2E3022", "C`+ c #38332D", "D`+ c #39312E", "E`+ c #372F2C", "F`+ c #2C2421", "G`+ c #2B2320", "H`+ c #392C24", "I`+ c #3A2D25", "J`+ c #392F26", "K`+ c #3A3027", "L`+ c #3D3028", "M`+ c #3A3225", "N`+ c #514632", "O`+ c #605543", "P`+ c #615644", "Q`+ c #6C6050", "R`+ c #6B5F4F", "S`+ c #665A4A", "T`+ c #635747", "U`+ c #6A5E4E", "V`+ c #716859", "W`+ c #867C73", "X`+ c #B2AEAB", "Y`+ c #B9B9B7", "Z`+ c #B4B6B5", "``+ c #C0C1C3", " @ c #BCC3CD", ". @ c #B8BCC5", "+ @ c #BBBFC8", "@ @ c #BCBFC8", "# @ c #B4B7C0", "$ @ c #B5B9C2", "% @ c #C2C5CE", "& @ c #B2B7B3", "* @ c #A3A8A2", "= @ c #9C9F98", "- @ c #929385", "; @ c #848275", "> @ c #7F796B", ", @ c #736052", "' @ c #917D74", ") @ c #A89591", "! @ c #C2B6A6", "~ @ c #401C0C", "{ @ c #491F0F", "] @ c #5B2719", "^ @ c #61291A", "/ @ c #652A1C", "( @ c #6B291D", "_ @ c #7A2723", ": @ c #85241E", "< @ c #631A13", "[ @ c #5E1B13", "} @ c #5C1911", "| @ c #5B1812", "1 @ c #611A18", "2 @ c #621B17", "3 @ c #671C17", "4 @ c #691A16", "5 @ c #69241D", "6 @ c #58231D", "7 @ c #43201A", "8 @ c #161302", "9 @ c #272413", "0 @ c #8B8877", "a @ c #CCC9B8", "b @ c #B2AFA0", "c @ c #9B9B81", "d @ c #9D977D", "e @ c #82745A", "f @ c #2F1000", "g @ c #3F1604", "h @ c #7A231C", "i @ c #87363C", "j @ c #8E3D43", "k @ c #924348", "l @ c #914549", "m @ c #8D4246", "n @ c #893E42", "o @ c #843C3F", "p @ c #80383B", "q @ c #7C3136", "r @ c #7C2931", "s @ c #732229", "t @ c #7D303A", "u @ c #7F323C", "v @ c #833542", "w @ c #863A46", "x @ c #894957", "y @ c #894C5B", "z @ c #8B5360", "A @ c #8F5967", "B @ c #94606C", "C @ c #8F5D66", "D @ c #8A5B63", "E @ c #8C5D67", "F @ c #8B5B67", "G @ c #895965", "H @ c #8C5C6A", "I @ c #91616F", "J @ c #9D6B77", "K @ c #9F707A", "L @ c #9D6E74", "M @ c #9C6D73", "N @ c #9B6D6F", "O @ c #926466", "P @ c #8B595A", "Q @ c #844244", "R @ c #843F42", "S @ c #813B3D", "T @ c #783433", "U @ c #743331", "V @ c #723230", "W @ c #6E312C", "X @ c #6A2D28", "Y @ c #632C27", "Z @ c #592927", "` @ c #4A2223", " .@ c #3A1B19", "..@ c #2C130F", "+.@ c #27120F", "@.@ c #2A1814", "#.@ c #675E59", "$.@ c #B3AEAA", "%.@ c #AFAAA6", "&.@ c #9D9185", "*.@ c #988C7E", "=.@ c #7A6D5D", "-.@ c #5D4231", ";.@ c #553F34", ">.@ c #59453E", ",.@ c #726360", "'.@ c #807272", ").@ c #867C7D", "!.@ c #867D80", "~.@ c #898387", "{.@ c #918F92", "].@ c #98999D", "^.@ c #949C9F", "/.@ c #A7B6BB", "(.@ c #A9B6BC", "_.@ c #E3E8EC", ":.@ c #EBF0F4", "<.@ c #DEE3E7", "[.@ c #CDCCD1", "}.@ c #E5E5E7", "|.@ c #F7F5F8", "1.@ c #BBB9BA", "2.@ c #7D7978", "3.@ c #D9D1CE", "4.@ c #EBE2DD", "5.@ c #8C817B", "6.@ c #A7A18B", "7.@ c #A89F8E", "8.@ c #9E9586", "9.@ c #7C7362", "0.@ c #78705D", "a.@ c #5F5943", "b.@ c #584C3E", "c.@ c #3E3629", "d.@ c #3A3426", "e.@ c #333021", "f.@ c #2F2D1E", "g.@ c #2A2C1E", "h.@ c #2B2C1E", "i.@ c #2C2E20", "j.@ c #2B2D1F", "k.@ c #2A221F", "l.@ c #332920", "m.@ c #342A21", "n.@ c #342B22", "o.@ c #373123", "p.@ c #352F21", "q.@ c #342E20", "r.@ c #514539", "s.@ c #54483C", "t.@ c #5E5246", "u.@ c #B8B4B1", "v.@ c #BDB9B6", "w.@ c #BBBDBC", "x.@ c #C1C5CE", "y.@ c #B1B6B2", "z.@ c #ACB1AD", "A.@ c #A8ADA9", "B.@ c #999C95", "C.@ c #949689", "D.@ c #8D8B7C", "E.@ c #5C5040", "F.@ c #716152", "G.@ c #806E60", "H.@ c #99867F", "I.@ c #D7C7B8", "J.@ c #301B0A", "K.@ c #321B09", "L.@ c #301301", "M.@ c #3F1B0B", "N.@ c #5D2818", "O.@ c #612719", "P.@ c #642619", "Q.@ c #792824", "R.@ c #732116", "S.@ c #6B1C15", "T.@ c #691C14", "U.@ c #5B1810", "V.@ c #601917", "W.@ c #641A19", "X.@ c #661C19", "Y.@ c #6B1D19", "Z.@ c #6B1A17", "`.@ c #672620", " +@ c #5A231C", ".+@ c #46211B", "++@ c #41261F", "@+@ c #3D2A24", "#+@ c #302A1C", "$+@ c #262312", "%+@ c #151201", "&+@ c #1F1C0B", "*+@ c #7A7766", "=+@ c #C4C1B0", "-+@ c #B8B5A6", ";+@ c #9B9683", ">+@ c #A4A289", ",+@ c #9E9A7D", "'+@ c #9A9075", ")+@ c #432A14", "!+@ c #331000", "~+@ c #4B1D0D", "{+@ c #5F271A", "]+@ c #6A281C", "^+@ c #6F251C", "/+@ c #7D1C16", "(+@ c #7E1D17", "_+@ c #84292E", ":+@ c #852A31", "<+@ c #8B393D", "[+@ c #8F3F42", "}+@ c #914245", "|+@ c #8F4345", "1+@ c #8B4142", "2+@ c #883E3F", "3+@ c #803637", "4+@ c #7C3233", "5+@ c #7A2E32", "6+@ c #74232A", "7+@ c #75282E", "8+@ c #883E4B", "9+@ c #88404E", "0+@ c #874352", "a+@ c #874958", "b+@ c #8A4D5C", "c+@ c #8E5462", "d+@ c #915966", "e+@ c #8B5660", "f+@ c #8A555F", "g+@ c #8F5B67", "h+@ c #8D5966", "i+@ c #8A5663", "j+@ c #8D5868", "k+@ c #996572", "l+@ c #9D6B76", "m+@ c #A06E79", "n+@ c #A06F75", "o+@ c #9F6E74", "p+@ c #9E6D70", "q+@ c #966568", "r+@ c #8E5C5D", "s+@ c #814547", "t+@ c #804243", "u+@ c #824243", "v+@ c #854043", "w+@ c #833D3F", "x+@ c #803A3C", "y+@ c #803839", "z+@ c #793333", "A+@ c #76322F", "B+@ c #75312E", "C+@ c #71302A", "D+@ c #6E2D27", "E+@ c #672C26", "F+@ c #5C2928", "G+@ c #532728", "H+@ c #4E2425", "I+@ c #4C2625", "J+@ c #462423", "K+@ c #3A1E1B", "L+@ c #301814", "M+@ c #251812", "N+@ c #625B55", "O+@ c #614329", "P+@ c #523A2E", "Q+@ c #553E36", "R+@ c #5F4C46", "S+@ c #6A5856", "T+@ c #6D5D5E", "U+@ c #7F7375", "V+@ c #8A7F83", "W+@ c #8B8587", "X+@ c #928E8F", "Y+@ c #8E8C8D", "Z+@ c #8D8B8C", "`+@ c #959698", " @@ c #A7B4BA", ".@@ c #E8EBF0", "+@@ c #DCDFE6", "@@@ c #DEE1E6", "#@@ c #D2D3D8", "$@@ c #939297", "%@@ c #8C8A8D", "&@@ c #E4DCDA", "*@@ c #CDC3C1", "=@@ c #8A7F7B", "-@@ c #A9A389", ";@@ c #A59F87", ">@@ c #706454", ",@@ c #706553", "'@@ c #716654", ")@@ c #716652", "!@@ c #766B55", "~@@ c #5F5845", "{@@ c #5D5643", "]@@ c #605946", "^@@ c #5B5441", "/@@ c #57503D", "(@@ c #524B38", "_@@ c #373327", ":@@ c #302E22", "<@@ c #2C2C20", "[@@ c #2A281C", "}@@ c #29271B", "|@@ c #353125", "1@@ c #3E342B", "2@@ c #433930", "3@@ c #473A34", "4@@ c #4A3B38", "5@@ c #453633", "6@@ c #4E3F3A", "7@@ c #4B3C39", "8@@ c #4A3B36", "9@@ c #5D4E49", "0@@ c #B0ABA7", "a@@ c #BDBDBD", "b@@ c #B3B8B4", "c@@ c #B0B5B1", "d@@ c #A5AAA4", "e@@ c #979A93", "f@@ c #909084", "g@@ c #868374", "h@@ c #7F7969", "i@@ c #665D4C", "j@@ c #807061", "k@@ c #907E72", "l@@ c #A79392", "m@@ c #D2C4B7", "n@@ c #C2B1A1", "o@@ c #291305", "p@@ c #2A1303", "q@@ c #452818", "r@@ c #462514", "s@@ c #652B1D", "t@@ c #67271B", "u@@ c #682417", "v@@ c #6E2419", "w@@ c #74251E", "x@@ c #822827", "y@@ c #75201D", "z@@ c #731E1B", "A@@ c #6C1D16", "B@@ c #6A1D15", "C@@ c #671D14", "D@@ c #5A170F", "E@@ c #5D1813", "F@@ c #631918", "G@@ c #661A1A", "H@@ c #671C19", "I@@ c #6A1C1A", "J@@ c #6E1D1A", "K@@ c #6C1B18", "L@@ c #6E1A18", "M@@ c #6C231C", "N@@ c #6A271F", "O@@ c #4F2018", "P@@ c #462119", "Q@@ c #242311", "R@@ c #151402", "S@@ c #171604", "T@@ c #6A6957", "U@@ c #B3B1A2", "V@@ c #9B9679", "W@@ c #968A70", "X@@ c #371200", "Y@@ c #572617", "Z@@ c #61251A", "`@@ c #873235", " #@ c #8B3A39", ".#@ c #8F3F40", "+#@ c #904242", "@#@ c #8D4141", "##@ c #8A403F", "$#@ c #7C3032", "%#@ c #7C2D30", "&#@ c #7C272C", "*#@ c #823036", "=#@ c #82323B", "-#@ c #833640", ";#@ c #863845", ">#@ c #8B3F4C", ",#@ c #88404C", "'#@ c #864656", ")#@ c #8C4F5E", "!#@ c #8C5260", "~#@ c #8A505C", "{#@ c #8A525D", "]#@ c #8F5665", "^#@ c #885260", "/#@ c #8B5565", "(#@ c #905B6B", "_#@ c #986470", ":#@ c #9D6975", "<#@ c #9B6A70", "[#@ c #9B6A6D", "}#@ c #956467", "|#@ c #8F5D5E", "1#@ c #834B4C", "2#@ c #834749", "3#@ c #7F4142", "4#@ c #814142", "5#@ c #813F40", "6#@ c #813B3B", "7#@ c #7E3637", "8#@ c #77312F", "9#@ c #76312C", "0#@ c #75302B", "a#@ c #733028", "b#@ c #702D25", "c#@ c #682B26", "d#@ c #612B2B", "e#@ c #59282B", "f#@ c #4F2727", "g#@ c #38201C", "h#@ c #301D17", "i#@ c #1D120C", "j#@ c #55504A", "k#@ c #B7B4AF", "l#@ c #9E9D99", "m#@ c #72614D", "n#@ c #62442A", "o#@ c #564646", "p#@ c #6E6262", "q#@ c #7F7576", "r#@ c #837D7F", "s#@ c #8E8A8B", "t#@ c #8C8A8B", "u#@ c #DCDFE4", "v#@ c #707378", "w#@ c #E5ECF4", "x#@ c #CED2DB", "y#@ c #CFD4DA", "z#@ c #A9AAAF", "A#@ c #D3D4D8", "B#@ c #B7AFAD", "C#@ c #9C967C", "D#@ c #938E71", "E#@ c #8A8568", "F#@ c #837D63", "G#@ c #7B6F5F", "H#@ c #796D5D", "I#@ c #7B705E", "J#@ c #665B45", "K#@ c #695F46", "L#@ c #5E5744", "M#@ c #494230", "N#@ c #2F2D21", "O#@ c #2A231D", "P#@ c #26231A", "Q#@ c #2F2D20", "R#@ c #302E21", "S#@ c #3B3221", "T#@ c #3D3423", "U#@ c #443933", "V#@ c #40352F", "W#@ c #4D3D3E", "X#@ c #463639", "Y#@ c #443437", "Z#@ c #48383B", "`#@ c #413134", " $@ c #524243", ".$@ c #665657", "+$@ c #554546", "@$@ c #423233", "#$@ c #403031", "$$@ c #5C4C4D", "%$@ c #867677", "&$@ c #B5A7A6", "*$@ c #B6AEAB", "=$@ c #BBB7B6", "-$@ c #BCBBB9", ";$@ c #B4B9B5", ">$@ c #AFB4B0", ",$@ c #9DA29C", "'$@ c #979A91", ")$@ c #83806F", "!$@ c #7A7363", "~$@ c #A99692", "{$@ c #B1A1A4", "]$@ c #B5ACA7", "^$@ c #9A8778", "/$@ c #341D0D", "($@ c #3D2211", "_$@ c #573222", ":$@ c #6A2C1F", "<$@ c #6C261A", "[$@ c #72241A", "}$@ c #77241C", "|$@ c #77221F", "1$@ c #781B14", "2$@ c #781913", "3$@ c #702017", "4$@ c #681E15", "5$@ c #5F1A15", "6$@ c #651919", "7$@ c #681A1A", "8$@ c #691B19", "9$@ c #6A1A19", "0$@ c #6F1B19", "a$@ c #701A19", "b$@ c #771E1A", "c$@ c #6D231A", "d$@ c #5D221A", "e$@ c #501F18", "f$@ c #461F18", "g$@ c #141301", "h$@ c #5E5D4B", "i$@ c #B7B6A4", "j$@ c #C1BFB0", "k$@ c #B5B3A4", "l$@ c #979074", "m$@ c #94886E", "n$@ c #361702", "o$@ c #391000", "p$@ c #5E2B1A", "q$@ c #72231C", "r$@ c #80252C", "s$@ c #7F262A", "t$@ c #802C2A", "u$@ c #843330", "v$@ c #8A3A39", "w$@ c #8E403E", "x$@ c #8F413F", "y$@ c #8C413E", "z$@ c #843634", "A$@ c #7C2E2E", "B$@ c #7B2629", "C$@ c #7D272A", "D$@ c #812C31", "E$@ c #802E34", "F$@ c #7B2F33", "G$@ c #853744", "H$@ c #893D4A", "I$@ c #873D4A", "J$@ c #873F4D", "K$@ c #85414E", "L$@ c #874A59", "M$@ c #884B5A", "N$@ c #884C58", "O$@ c #884E5A", "P$@ c #8D5361", "Q$@ c #915765", "R$@ c #8E5463", "S$@ c #874E5D", "T$@ c #895061", "U$@ c #8E5868", "V$@ c #8C5664", "W$@ c #925E6A", "X$@ c #96626E", "Y$@ c #956269", "Z$@ c #966467", "`$@ c #926164", " %@ c #8A5253", ".%@ c #874C4E", "+%@ c #814545", "@%@ c #7E4041", "#%@ c #7E3E3E", "$%@ c #7E3C3D", "%%@ c #7F3939", "&%@ c #7C3435", "*%@ c #793230", "=%@ c #762F2D", "-%@ c #742F2A", ";%@ c #712E26", ">%@ c #6E2B23", ",%@ c #682922", "'%@ c #512929", ")%@ c #4D2A28", "!%@ c #34211B", "~%@ c #2D1E19", "{%@ c #4C4741", "]%@ c #AEABA4", "^%@ c #A49389", "/%@ c #9C8A80", "(%@ c #948276", "_%@ c #73614B", ":%@ c #6D5941", "<%@ c #563C2D", "[%@ c #57433C", "}%@ c #5A4844", "|%@ c #524242", "1%@ c #655959", "2%@ c #706667", "3%@ c #756F6F", "4%@ c #8E8F91", "5%@ c #E9F2FB", "6%@ c #D5DCE6", "7%@ c #C4CBD5", "8%@ c #D3D7E0", "9%@ c #CDD0D7", "0%@ c #CDCED3", "a%@ c #E4E3E8", "b%@ c #B9B1A6", "c%@ c #B3AD97", "d%@ c #9B957B", "e%@ c #7F7A5C", "f%@ c #757052", "g%@ c #6C6749", "h%@ c #676245", "i%@ c #756A58", "j%@ c #796E5C", "k%@ c #5F5846", "l%@ c #5C5543", "m%@ c #5B5442", "n%@ c #5A5341", "o%@ c #595240", "p%@ c #564F3D", "q%@ c #544D3B", "r%@ c #554E3C", "s%@ c #514A38", "t%@ c #48412F", "u%@ c #47402E", "v%@ c #463F2D", "w%@ c #443D2B", "x%@ c #3D3027", "y%@ c #392C23", "z%@ c #332B20", "A%@ c #28211B", "B%@ c #29251A", "C%@ c #252116", "D%@ c #272318", "E%@ c #292A1C", "F%@ c #312A20", "G%@ c #423731", "H%@ c #403531", "I%@ c #413632", "J%@ c #423733", "K%@ c #423735", "L%@ c #47363C", "M%@ c #3A2933", "N%@ c #4D3C46", "O%@ c #63525C", "P%@ c #726169", "Q%@ c #83727A", "R%@ c #93828A", "S%@ c #A6959D", "T%@ c #8B7A82", "U%@ c #635258", "V%@ c #514046", "W%@ c #6F5E64", "X%@ c #9F8E94", "Y%@ c #B4A3A9", "Z%@ c #AD9EA1", "`%@ c #BEB9B5", " &@ c #BEBAB9", ".&@ c #BEBCBD", "+&@ c #C0C1C5", "@&@ c #B8BCBB", "#&@ c #B6BAB9", "$&@ c #B6BBB7", "%&@ c #AEB3AD", "&&@ c #9CA19A", "*&@ c #8E8C7F", "=&@ c #7D7A69", "-&@ c #6F6856", ";&@ c #9F8D83", ">&@ c #A7948E", ",&@ c #B09D99", "'&@ c #BEB5AE", ")&@ c #B6A9A0", "!&@ c #412C1B", "~&@ c #2F1808", "{&@ c #5B3425", "]&@ c #5B2D1E", "^&@ c #602C1E", "/&@ c #672C1E", "(&@ c #75271D", "_&@ c #79271C", ":&@ c #6F1A17", "<&@ c #6E1916", "[&@ c #6C1C11", "}&@ c #741A12", "|&@ c #751811", "1&@ c #751610", "2&@ c #7B1A14", "3&@ c #7C1B15", "4&@ c #712118", "5&@ c #611C17", "6&@ c #671919", "7&@ c #681819", "8&@ c #691918", "9&@ c #6A1918", "0&@ c #6A1916", "a&@ c #6C1816", "b&@ c #711B1A", "c&@ c #731B1A", "d&@ c #6F221A", "e&@ c #5D2318", "f&@ c #4F1E17", "g&@ c #451E17", "h&@ c #40231D", "i&@ c #2E251E", "j&@ c #2F2C1D", "k&@ c #1B1A08", "l&@ c #B5B4A2", "m&@ c #C5C3B4", "n&@ c #9E977D", "o&@ c #968B6F", "p&@ c #725A42", "q&@ c #341100", "r&@ c #390C00", "s&@ c #642C1D", "t&@ c #791C17", "u&@ c #7A1B17", "v&@ c #7E1C19", "w&@ c #872729", "x&@ c #852728", "y&@ c #85262A", "z&@ c #80252A", "A&@ c #7F2429", "B&@ c #7D2428", "C&@ c #7D2929", "D&@ c #873635", "E&@ c #8C3C3B", "F&@ c #8F3F3E", "G&@ c #863635", "H&@ c #83343A", "I&@ c #85353E", "J&@ c #843741", "K&@ c #883A47", "L&@ c #873B47", "M&@ c #863C49", "N&@ c #86404B", "O&@ c #87434E", "P&@ c #854651", "Q&@ c #864951", "R&@ c #884C54", "S&@ c #8E525C", "T&@ c #925660", "U&@ c #8E525E", "V&@ c #874D5B", "W&@ c #89515E", "X&@ c #8E5963", "Y&@ c #935E66", "Z&@ c #925D63", "`&@ c #925E62", " *@ c #935F61", ".*@ c #915F5E", "+*@ c #8D5A57", "@*@ c #925857", "#*@ c #8D504F", "$*@ c #844746", "%*@ c #7F3F3F", "&*@ c #7F3B3A", "**@ c #7B302D", "=*@ c #782D2A", "-*@ c #762B28", ";*@ c #742B25", ">*@ c #712821", ",*@ c #6A2721", "'*@ c #652928", ")*@ c #622C2A", "!*@ c #5E2C2B", "~*@ c #2B1C15", "{*@ c #2B201A", "]*@ c #211A12", "^*@ c #120D07", "/*@ c #3A3730", "(*@ c #7B6859", "_*@ c #6C5543", ":*@ c #614832", "<*@ c #594137", "[*@ c #6B5957", "}*@ c #6B5D5D", "|*@ c #6E6264", "1*@ c #918B8D", "2*@ c #8C8A8F", "3*@ c #AFB0B4", "4*@ c #E3ECF5", "5*@ c #CFD8E1", "6*@ c #EBF2FA", "7*@ c #686B70", "8*@ c #BDBEC2", "9*@ c #E0E0E0", "0*@ c #E0DCDB", "a*@ c #A7A189", "b*@ c #878167", "c*@ c #7A7558", "d*@ c #6F6A4A", "e*@ c #716C4C", "f*@ c #746F4F", "g*@ c #6C614F", "h*@ c #6B604E", "i*@ c #665B47", "j*@ c #675C48", "k*@ c #615640", "l*@ c #58513F", "m*@ c #534E3B", "n*@ c #47422F", "o*@ c #423B29", "p*@ c #3E3926", "q*@ c #3E3725", "r*@ c #3D3825", "s*@ c #2C281D", "t*@ c #201D14", "u*@ c #221F16", "v*@ c #222216", "w*@ c #212115", "x*@ c #2B2B1F", "y*@ c #322721", "z*@ c #403426", "A*@ c #453C35", "B*@ c #463B37", "C*@ c #443935", "D*@ c #463B39", "E*@ c #443937", "F*@ c #403635", "G*@ c #403434", "H*@ c #3B2C31", "I*@ c #2C1B23", "J*@ c #301F27", "K*@ c #88777F", "L*@ c #AF9EA6", "M*@ c #CDBCC2", "N*@ c #E2D1D7", "O*@ c #F1E0E6", "P*@ c #DBCAD0", "Q*@ c #867679", "R*@ c #908083", "S*@ c #B8A8AB", "T*@ c #C9B9BC", "U*@ c #BAB5B1", "V*@ c #C0BFBD", "W*@ c #B5B6BA", "X*@ c #D2D9E1", "Y*@ c #C5CED7", "Z*@ c #B7BBBA", "`*@ c #B7BCB8", " =@ c #B9BBB8", ".=@ c #B7B9B4", "+=@ c #AFB1AC", "@=@ c #A4A7A0", "#=@ c #7B7464", "$=@ c #665D4E", "%=@ c #5B4F41", "&=@ c #736558", "*=@ c #8A796F", "==@ c #B4A2A0", "-=@ c #BAA8A8", ";=@ c #B8A8A9", ">=@ c #B4A4A7", ",=@ c #B7AAA1", "'=@ c #A6958B", ")=@ c #210700", "!=@ c #35190B", "~=@ c #442717", "{=@ c #3C1B0C", "]=@ c #532E1E", "^=@ c #5E3225", "/=@ c #532315", "(=@ c #622D1F", "_=@ c #67291C", ":=@ c #70261B", "<=@ c #7C2720", "[=@ c #74211D", "}=@ c #6B1A16", "|=@ c #6A1915", "1=@ c #6A1C12", "2=@ c #711611", "3=@ c #721510", "4=@ c #751813", "5=@ c #771814", "6=@ c #641B14", "7=@ c #5F1A13", "8=@ c #5D1811", "9=@ c #681817", "0=@ c #691815", "a=@ c #681714", "b=@ c #6A1614", "c=@ c #5C2119", "d=@ c #4E1D16", "e=@ c #3F221C", "f=@ c #2E231D", "g=@ c #272415", "h=@ c #151203", "i=@ c #555243", "j=@ c #B6B3A4", "k=@ c #C9C6B7", "l=@ c #A09170", "m=@ c #897253", "n=@ c #3D1300", "o=@ c #54200B", "p=@ c #6E2F1E", "q=@ c #6C2217", "r=@ c #78251D", "s=@ c #7A1D18", "t=@ c #761713", "u=@ c #761816", "v=@ c #771A15", "w=@ c #862423", "x=@ c #862425", "y=@ c #7E2527", "z=@ c #7C2325", "A=@ c #7A2425", "B=@ c #772625", "C=@ c #893739", "D=@ c #8D3B3D", "E=@ c #8B393B", "F=@ c #873537", "G=@ c #853335", "H=@ c #72262A", "I=@ c #73272B", "J=@ c #7A2E38", "K=@ c #80333B", "L=@ c #863941", "M=@ c #863B42", "N=@ c #873C43", "O=@ c #883F48", "P=@ c #8A414A", "Q=@ c #884348", "R=@ c #864849", "S=@ c #884C4B", "T=@ c #8A4E4E", "U=@ c #8A4E50", "V=@ c #884B50", "W=@ c #874C50", "X=@ c #8A4F55", "Y=@ c #8B5259", "Z=@ c #8E555C", "`=@ c #8D545A", " -@ c #8C5457", ".-@ c #8E5858", "+-@ c #925C5A", "@-@ c #945F5B", "#-@ c #925D59", "$-@ c #925854", "%-@ c #92534E", "&-@ c #8F4C46", "*-@ c #88453F", "=-@ c #843F3A", "--@ c #823B37", ";-@ c #823835", ">-@ c #803532", ",-@ c #803230", "'-@ c #853534", ")-@ c #82312E", "!-@ c #792523", "~-@ c #7A2624", "{-@ c #782A26", "]-@ c #722F29", "^-@ c #692E26", "/-@ c #652C25", "(-@ c #602B23", "_-@ c #5D2C25", ":-@ c #572C25", "<-@ c #502B23", "[-@ c #482A22", "}-@ c #2F2019", "|-@ c #1F1812", "1-@ c #696460", "2-@ c #BAABA6", "3-@ c #B8A9A4", "4-@ c #8E7771", "5-@ c #846D65", "6-@ c #7B6359", "7-@ c #5F4536", "8-@ c #543928", "9-@ c #63452D", "0-@ c #5D3C2B", "a-@ c #5D3B2F", "b-@ c #65443D", "c-@ c #654844", "d-@ c #694F50", "e-@ c #6F5B5D", "f-@ c #82757C", "g-@ c #8A7F87", "h-@ c #8B848C", "i-@ c #8D8A91", "j-@ c #9999A1", "k-@ c #97979F", "l-@ c #9A9CA8", "m-@ c #9D9FAB", "n-@ c #798184", "o-@ c #D6DAD9", "p-@ c #DCDCDA", "q-@ c #CAC9C4", "r-@ c #B3B0AB", "s-@ c #867D76", "t-@ c #C5BBAF", "u-@ c #C0B7A8", "v-@ c #ADA689", "w-@ c #B2AB8E", "x-@ c #AEA98C", "y-@ c #A39E81", "z-@ c #969275", "A-@ c #8E8A6D", "B-@ c #7D795C", "C-@ c #767354", "D-@ c #6E694B", "E-@ c #6C6747", "F-@ c #706A4A", "G-@ c #716B49", "H-@ c #686147", "I-@ c #5D5443", "J-@ c #57523F", "K-@ c #514E3B", "L-@ c #4B4633", "M-@ c #45402D", "N-@ c #3B3825", "O-@ c #36311E", "P-@ c #312E1D", "Q-@ c #2F2C25", "R-@ c #27271F", "S-@ c #1F1E19", "T-@ c #23221E", "U-@ c #21201C", "V-@ c #1F1E1A", "W-@ c #1F1B18", "X-@ c #25241F", "Y-@ c #20261A", "Z-@ c #21271B", "`-@ c #1F2519", " ;@ c #1F2217", ".;@ c #232319", "+;@ c #362C20", "@;@ c #32281C", "#;@ c #3B2F23", "$;@ c #413326", "%;@ c #403227", "&;@ c #473E35", "*;@ c #473E37", "=;@ c #453D3A", "-;@ c #473F3C", ";;@ c #463E3B", ">;@ c #483D39", ",;@ c #4C3F39", "';@ c #473936", ");@ c #463835", "!;@ c #4A3E3E", "~;@ c #4A4041", "{;@ c #32292C", "];@ c #413333", "^;@ c #433431", "/;@ c #655653", "(;@ c #DDCECB", "_;@ c #FEEFEC", ":;@ c #D7C8C5", "<;@ c #BFB0AD", "[;@ c #C8B9B6", "};@ c #ABABA3", "|;@ c #B9B8B3", "1;@ c #C0C1BC", "2;@ c #B4B6B3", "3;@ c #BBBFBE", "4;@ c #B6B8B3", "5;@ c #B0B1AC", "6;@ c #ABACA6", "7;@ c #A8A8A0", "8;@ c #7A6C61", "9;@ c #65574C", "0;@ c #7D6C64", "a;@ c #86756D", "b;@ c #B4A6A6", "c;@ c #B3A8A6", "d;@ c #2E1204", "e;@ c #3B1B0C", "f;@ c #4A2618", "g;@ c #562F20", "h;@ c #5F3124", "i;@ c #632F24", "j;@ c #652B20", "k;@ c #712B23", "l;@ c #812220", "m;@ c #6C1F19", "n;@ c #6C2219", "o;@ c #721915", "p;@ c #741916", "q;@ c #7C1E1C", "r;@ c #641612", "s;@ c #621712", "t;@ c #611611", "u;@ c #5F1610", "v;@ c #5E1711", "w;@ c #631916", "x;@ c #651A17", "y;@ c #741E1D", "z;@ c #6A2923", "A;@ c #602720", "B;@ c #431C17", "C;@ c #382622", "D;@ c #150E04", "E;@ c #100900", "F;@ c #565044", "G;@ c #D0CABC", "H;@ c #999894", "I;@ c #A69B7D", "J;@ c #A08E6A", "K;@ c #83684A", "L;@ c #553216", "M;@ c #411300", "N;@ c #59200C", "O;@ c #732E1F", "P;@ c #702216", "Q;@ c #791A18", "R;@ c #882424", "S;@ c #852324", "T;@ c #832324", "U;@ c #7F2525", "V;@ c #792525", "W;@ c #8A3538", "X;@ c #853033", "Y;@ c #7E282B", "Z;@ c #77282B", "`;@ c #712728", " >@ c #782D31", ".>@ c #7D3135", "+>@ c #80333D", "@>@ c #84373D", "#>@ c #85383E", "$>@ c #86393F", "%>@ c #873A40", "&>@ c #893C42", "*>@ c #8A3D43", "=>@ c #8B3E44", "->@ c #894144", ";>@ c #844442", ">>@ c #844943", ",>@ c #874A47", "'>@ c #864B47", ")>@ c #854949", "!>@ c #874B4D", "~>@ c #894E52", "{>@ c #8F5257", "]>@ c #8D5254", "^>@ c #8E5453", "/>@ c #905654", "(>@ c #935957", "_>@ c #935955", ":>@ c #905750", "<>@ c #8E524A", "[>@ c #934E49", "}>@ c #914842", "|>@ c #8A413B", "1>@ c #853C36", "2>@ c #843934", "3>@ c #843632", "4>@ c #82332F", "5>@ c #80312D", "6>@ c #83322F", "7>@ c #832F2D", "8>@ c #812B2A", "9>@ c #7D2726", "0>@ c #7E2625", "a>@ c #742E26", "b>@ c #6E2E24", "c>@ c #632A1F", "d>@ c #612A23", "e>@ c #5B2B21", "f>@ c #532821", "g>@ c #4D2820", "h>@ c #45271F", "i>@ c #3A211C", "j>@ c #321F19", "k>@ c #2E1F1A", "l>@ c #251A16", "m>@ c #1F1714", "n>@ c #92807C", "o>@ c #B5A49D", "p>@ c #A59190", "q>@ c #9F8A89", "r>@ c #95807D", "s>@ c #8E7672", "t>@ c #856E68", "u>@ c #796157", "v>@ c #685044", "w>@ c #5E4435", "x>@ c #614635", "y>@ c #614530", "z>@ c #5F432B", "A>@ c #5E3F22", "B>@ c #613B28", "C>@ c #603B2B", "D>@ c #623D34", "E>@ c #63403A", "F>@ c #654745", "G>@ c #6D5356", "H>@ c #776269", "I>@ c #827179", "J>@ c #8A7D87", "K>@ c #8E848F", "L>@ c #8C878E", "M>@ c #96959D", "N>@ c #9D9CAA", "O>@ c #9FA1AD", "P>@ c #A2A7AD", "Q>@ c #BBBFCA", "R>@ c #B8BFC9", "S>@ c #C3C7D0", "T>@ c #C5C8D1", "U>@ c #BCC8C4", "V>@ c #DEE0DD", "W>@ c #DCDDD8", "X>@ c #554C45", "Y>@ c #B6AB99", "Z>@ c #BFB4A0", "`>@ c #B8AF90", " ,@ c #AFA987", ".,@ c #A29C7A", "+,@ c #928D6D", "@,@ c #837E5E", "#,@ c #777254", "$,@ c #6E6B4C", "%,@ c #6A6748", "&,@ c #7A7758", "*,@ c #737051", "=,@ c #6F6949", "-,@ c #696343", ";,@ c #494633", ">,@ c #454231", ",,@ c #44412E", "',@ c #444130", "),@ c #423F2C", "!,@ c #3C3926", "~,@ c #3A3726", "{,@ c #363320", "],@ c #312E1B", "^,@ c #302D1C", "/,@ c #1F201B", "(,@ c #1E1F1A", "_,@ c #1C1D18", ":,@ c #1A1915", "<,@ c #191814", "[,@ c #1E2619", "},@ c #1F271A", "|,@ c #1D2518", "1,@ c #1C2216", "2,@ c #1B2115", "3,@ c #1D2317", "4,@ c #382F20", "5,@ c #352C1D", "6,@ c #3D3123", "7,@ c #443D35", "8,@ c #423D39", "9,@ c #47403A", "0,@ c #433C36", "a,@ c #453A34", "b,@ c #493F36", "c,@ c #483B33", "d,@ c #43362E", "e,@ c #4D403A", "f,@ c #574946", "g,@ c #564B49", "h,@ c #514748", "i,@ c #666064", "j,@ c #7C7374", "k,@ c #D9CAC3", "l,@ c #D5C6BF", "m,@ c #DFD0C9", "n,@ c #BCAFA9", "o,@ c #B7BAB3", "p,@ c #BAC3BE", "q,@ c #B1B0AB", "r,@ c #AEAEA6", "s,@ c #8C7B73", "t,@ c #74615A", "u,@ c #65524B", "v,@ c #705D56", "w,@ c #82716A", "x,@ c #B2A4A3", "y,@ c #CEBBAA", "z,@ c #E1CCB9", "A,@ c #A58E7C", "B,@ c #381708", "C,@ c #512719", "D,@ c #5C2E21", "E,@ c #682C22", "F,@ c #832122", "G,@ c #842223", "H,@ c #692019", "I,@ c #642017", "J,@ c #672119", "K,@ c #721A18", "L,@ c #771D1D", "M,@ c #792120", "N,@ c #782221", "O,@ c #701C1A", "P,@ c #6D1917", "Q,@ c #661713", "R,@ c #651713", "S,@ c #601711", "T,@ c #601913", "U,@ c #6B241E", "V,@ c #692822", "W,@ c #52211C", "X,@ c #441D18", "Y,@ c #1B120B", "Z,@ c #140B02", "`,@ c #544B42", " '@ c #D1C9BC", ".'@ c #AA9C7F", "+'@ c #9B8965", "@'@ c #74593B", "#'@ c #4B280C", "$'@ c #431500", "%'@ c #5D2410", "&'@ c #722D1E", "*'@ c #732519", "='@ c #7F1D1A", "-'@ c #7E201E", ";'@ c #842221", ">'@ c #7E2223", ",'@ c #7E2424", "''@ c #782326", ")'@ c #822D30", "!'@ c #7C2629", "~'@ c #79292A", "{'@ c #732727", "]'@ c #7A2E30", "^'@ c #7F3033", "/'@ c #823338", "('@ c #81313A", "_'@ c #83333C", ":'@ c #82353D", "<'@ c #84383C", "['@ c #873B3F", "}'@ c #893D41", "|'@ c #863E41", "1'@ c #81403E", "2'@ c #80433E", "3'@ c #824542", "4'@ c #834344", "5'@ c #814344", "6'@ c #84484A", "7'@ c #8B4D50", "8'@ c #8B4F51", "9'@ c #8C5050", "0'@ c #8F5352", "a'@ c #905453", "b'@ c #8E534F", "c'@ c #894E48", "d'@ c #884942", "e'@ c #904945", "f'@ c #8E433E", "g'@ c #883D38", "h'@ c #863834", "i'@ c #833430", "j'@ c #7F302C", "k'@ c #7F2928", "l'@ c #7A2926", "m'@ c #772E27", "n'@ c #642A1F", "o'@ c #622922", "p'@ c #5B2920", "q'@ c #562721", "r'@ c #4C2923", "s'@ c #361E1A", "t'@ c #35231F", "u'@ c #1C1210", "v'@ c #211715", "w'@ c #2F211E", "x'@ c #594A45", "y'@ c #B6A9A3", "z'@ c #9A8580", "A'@ c #927E77", "B'@ c #877068", "C'@ c #776156", "D'@ c #684E3D", "E'@ c #644934", "F'@ c #5D432C", "G'@ c #5C382C", "H'@ c #5C3933", "I'@ c #5D3F3D", "J'@ c #6D585D", "K'@ c #7B6A72", "L'@ c #887883", "M'@ c #8E828C", "N'@ c #8A858C", "O'@ c #97949D", "P'@ c #94919A", "Q'@ c #9C9AA5", "R'@ c #A09EAB", "S'@ c #A4A3B1", "T'@ c #A0A8AA", "U'@ c #C7CBD4", "V'@ c #C9CDD6", "W'@ c #C8CBD4", "X'@ c #9CA4A6", "Y'@ c #545047", "Z'@ c #4E4737", "`'@ c #BBB59F", " )@ c #BBB39E", ".)@ c #A8A288", "+)@ c #9F987B", "@)@ c #969171", "#)@ c #888363", "$)@ c #706B4D", "%)@ c #6A6649", "&)@ c #6B674A", "*)@ c #706C4F", "=)@ c #6C684B", "-)@ c #696548", ";)@ c #696647", ">)@ c #6D6848", ",)@ c #676043", "')@ c #726B51", "))@ c #494232", "!)@ c #3D3A29", "~)@ c #3B3829", "{)@ c #3B3827", "])@ c #383526", "^)@ c #363322", "/)@ c #2E2B1A", "()@ c #272518", "_)@ c #282820", ":)@ c #181713", "<)@ c #1B2117", "[)@ c #1C2419", "})@ c #1E241A", "|)@ c #191F15", "1)@ c #332F26", "2)@ c #3D2F22", "3)@ c #3E3023", "4)@ c #45382F", "5)@ c #483F36", "6)@ c #474038", "7)@ c #423E35", "8)@ c #464239", "9)@ c #494238", "0)@ c #655B52", "a)@ c #695E58", "b)@ c #79706B", "c)@ c #DECDC5", "d)@ c #D7C6BE", "e)@ c #E4D3CB", "f)@ c #DAC9C1", "g)@ c #C3B4AD", "h)@ c #B9AEAA", "i)@ c #ADAFAA", "j)@ c #B4B9B3", "k)@ c #BEC6D1", "l)@ c #ABB8C0", "m)@ c #ABB5BE", "n)@ c #B5BAB6", "o)@ c #B2B1AC", "p)@ c #B0B0A8", "q)@ c #B1AEA7", "r)@ c #AFACA3", "s)@ c #877E75", "t)@ c #7E6D65", "u)@ c #6E5B54", "v)@ c #66554D", "w)@ c #887770", "x)@ c #B69C8B", "y)@ c #694E3D", "z)@ c #412011", "A)@ c #461F10", "B)@ c #4F2316", "C)@ c #582A1D", "D)@ c #5F2D22", "E)@ c #672D22", "F)@ c #7B2621", "G)@ c #7D2322", "H)@ c #621E15", "I)@ c #5E1810", "J)@ c #5D170F", "K)@ c #681914", "L)@ c #6D1A16", "M)@ c #781E1E", "N)@ c #751F1E", "O)@ c #681915", "P)@ c #661814", "Q)@ c #631813", "R)@ c #641A17", "S)@ c #53221D", "T)@ c #451E19", "U)@ c #41221F", "V)@ c #170E05", "W)@ c #BEB7A7", "X)@ c #979694", "Y)@ c #A99C7C", "Z)@ c #94805D", "`)@ c #66492B", " !@ c #411C01", ".!@ c #491902", "+!@ c #632915", "@!@ c #732B1D", "#!@ c #76261B", "$!@ c #852121", "%!@ c #7F1F21", "&!@ c #7C2627", "*!@ c #792928", "=!@ c #752725", "-!@ c #762625", ";!@ c #7A2C2C", ">!@ c #7B2D2D", ",!@ c #7F2F30", "'!@ c #833238", ")!@ c #843339", "!!@ c #803136", "~!@ c #7F3337", "{!@ c #813539", "]!@ c #863A3E", "^!@ c #853B3C", "/!@ c #803C39", "(!@ c #7F3E3A", "_!@ c #803F3D", ":!@ c #813F41", "~@ c #939391", ",~@ c #B5BDC8", "'~@ c #AAB7BF", ")~@ c #B3B5B2", "!~@ c #B3B5B0", "~~@ c #B3B2AD", "{~@ c #715E57", "]~@ c #705F57", "^~@ c #C6B9A9", "/~@ c #D4BFAE", "(~@ c #A78B7D", "_~@ c #4B2B1C", ":~@ c #290800", "<~@ c #431F11", "[~@ c #4D2519", "}~@ c #55271A", "|~@ c #5B291E", "1~@ c #612D22", "2~@ c #662D24", "3~@ c #732822", "4~@ c #782924", "5~@ c #7B2822", "6~@ c #611D14", "7~@ c #601C13", "8~@ c #5F1B12", "9~@ c #5A160D", "0~@ c #661913", "a~@ c #771F1E", "b~@ c #711D1B", "c~@ c #6C231D", "d~@ c #692620", "e~@ c #612622", "f~@ c #55221E", "g~@ c #481F1B", "h~@ c #442B27", "i~@ c #160D04", "j~@ c #D0C8BB", "k~@ c #98907D", "l~@ c #A49576", "m~@ c #8E7755", "n~@ c #3A1500", "o~@ c #522009", "p~@ c #692C19", "q~@ c #70281A", "r~@ c #78281D", "s~@ c #7B221C", "t~@ c #842020", "u~@ c #862222", "v~@ c #831F21", "w~@ c #772323", "x~@ c #792825", "y~@ c #752622", "z~@ c #762522", "A~@ c #7A2A29", "B~@ c #833133", "C~@ c #853339", "D~@ c #803134", "E~@ c #803A38", "F~@ c #7E3A37", "G~@ c #803C3B", "H~@ c #813C3F", "I~@ c #833E43", "J~@ c #7E393E", "K~@ c #823D42", "L~@ c #884346", "M~@ c #8B4748", "N~@ c #8C4849", "O~@ c #8A4645", "P~@ c #87413F", "Q~@ c #883E3B", "R~@ c #8C3D39", "S~@ c #8C3836", "T~@ c #883432", "U~@ c #863230", "V~@ c #822E2C", "W~@ c #7B2A27", "X~@ c #802F2C", "Y~@ c #782D27", "Z~@ c #732D25", "`~@ c #692A25", " {@ c #5D2824", ".{@ c #572622", "+{@ c #472523", "@{@ c #311C19", "#{@ c #2C1A18", "${@ c #231411", "%{@ c #7D746F", "&{@ c #705B48", "*{@ c #5D452B", "={@ c #5E3A2C", "-{@ c #5C3A31", ";{@ c #5A3B36", ">{@ c #593F3E", ",{@ c #5E484A", "'{@ c #6A5759", "){@ c #8B8287", "!{@ c #989399", "~{@ c #9A959C", "{{@ c #959299", "]{@ c #9C9AA7", "^{@ c #A3A3AF", "/{@ c #C2C5CC", "({@ c #B1B4AD", "_{@ c #B0B3AA", ":{@ c #86887D", "<{@ c #2B2A18", "[{@ c #3C3A25", "}{@ c #57553E", "|{@ c #6D6B52", "1{@ c #717054", "2{@ c #6F6B52", "3{@ c #6C6A51", "4{@ c #6E6A51", "5{@ c #6B6950", "6{@ c #69674E", "7{@ c #67664A", "8{@ c #65634A", "9{@ c #646347", "0{@ c #6B6A4E", "a{@ c #69654C", "b{@ c #666249", "c{@ c #57503E", "d{@ c #534C3A", "e{@ c #161712", "f{@ c #2A2118", "g{@ c #362A1E", "h{@ c #3C3022", "i{@ c #40372E", "j{@ c #433A31", "k{@ c #443D33", "l{@ c #433F34", "m{@ c #454336", "n{@ c #484735", "o{@ c #4A3E28", "p{@ c #463A22", "q{@ c #463722", "r{@ c #5B4C37", "s{@ c #887B68", "t{@ c #988D7B", "u{@ c #B2AEAD", "v{@ c #C3C1C2", "w{@ c #ABABAB", "x{@ c #B2BAC5", "y{@ c #B3BDC9", "z{@ c #BAC4D0", "A{@ c #C2CCD6", "B{@ c #B0BDC5", "C{@ c #B0B2AF", "D{@ c #867F75", "E{@ c #7D746B", "F{@ c #76655D", "G{@ c #7C6B63", "H{@ c #D5C3B5", "I{@ c #AF9385", "J{@ c #714F43", "K{@ c #2A0400", "L{@ c #2F0500", "M{@ c #562A1D", "N{@ c #5A2A1E", "O{@ c #622C22", "P{@ c #672C24", "Q{@ c #6A2E24", "R{@ c #6D2D24", "S{@ c #722722", "T{@ c #79211F", "U{@ c #5C1910", "V{@ c #58150C", "W{@ c #631812", "X{@ c #721E1C", "Y{@ c #49201C", "Z{@ c #432A26", "`{@ c #4D443B", " ]@ c #94938F", ".]@ c #9A8F7B", "+]@ c #9C8B6D", "@]@ c #866E4C", "#]@ c #4E2F12", "$]@ c #381000", "%]@ c #5A2610", "&]@ c #6D2E1C", "*]@ c #6D2316", "=]@ c #7A281D", "-]@ c #7F1D1C", ";]@ c #862224", ">]@ c #821F22", ",]@ c #7D2323", "']@ c #762220", ")]@ c #843234", "!]@ c #813134", "~]@ c #7E3733", "{]@ c #823A3D", "]]@ c #833B3F", "^]@ c #7C333A", "/]@ c #853D41", "(]@ c #884043", "_]@ c #884041", ":]@ c #893F3E", "<]@ c #8A3C3A", "[]@ c #8C3433", "}]@ c #8A3231", "|]@ c #873130", "1]@ c #86302F", "2]@ c #7C2E2A", "3]@ c #7A2C28", "4]@ c #792B27", "5]@ c #6E2A27", "6]@ c #6B2C27", "7]@ c #642A26", "8]@ c #582C29", "9]@ c #482523", "0]@ c #3F201E", "a]@ c #381C1B", "b]@ c #361C1B", "c]@ c #341F1C", "d]@ c #241210", "e]@ c #211310", "f]@ c #231814", "g]@ c #463D38", "h]@ c #B1ACA6", "i]@ c #857464", "j]@ c #7B6A58", "k]@ c #625038", "l]@ c #603C2E", "m]@ c #5E3C32", "n]@ c #5B3D35", "o]@ c #593D39", "p]@ c #614F4F", "q]@ c #6F5F60", "r]@ c #786C6E", "s]@ c #958F93", "t]@ c #979299", "u]@ c #9C99A2", "v]@ c #A3A1AE", "w]@ c #A4A4B0", "x]@ c #A1ABAC", "y]@ c #A7B3B3", "z]@ c #BBBEC7", "A]@ c #9BA6A2", "B]@ c #A0AAA2", "C]@ c #A0A79F", "D]@ c #92988C", "E]@ c #656C5C", "F]@ c #3F4430", "G]@ c #2B2E19", "H]@ c #252711", "I]@ c #34361E", "J]@ c #4B4B31", "K]@ c #505036", "L]@ c #62624A", "M]@ c #65634C", "N]@ c #68664F", "O]@ c #716F58", "P]@ c #747259", "Q]@ c #6F6D56", "R]@ c #6E6C55", "S]@ c #6B6952", "T]@ c #676550", "U]@ c #5E5C47", "V]@ c #57523E", "W]@ c #564F3C", "X]@ c #2A2720", "Y]@ c #2C2219", "Z]@ c #434132", "`]@ c #434432", " ^@ c #433D27", ".^@ c #4D422C", "+^@ c #52462E", "@^@ c #53452B", "#^@ c #43331A", "$^@ c #766750", "%^@ c #786954", "&^@ c #A49582", "*^@ c #D3C2B2", "=^@ c #B5B4B2", "-^@ c #AFADAE", ";^@ c #C4C4C6", ">^@ c #C6C7CB", ",^@ c #AAABAF", "'^@ c #AFB8C1", ")^@ c #B9C1CC", "!^@ c #B8C2CE", "~^@ c #B5BFCB", "{^@ c #B7C1CD", "]^@ c #B2BFC7", "^^@ c #AEB0AD", "/^@ c #A9A9A1", "(^@ c #928E83", "_^@ c #7F786E", ":^@ c #776E65", "<^@ c #72645B", "[^@ c #9F8375", "}^@ c #4F2D21", "|^@ c #2F0700", "1^@ c #582419", "2^@ c #733A31", "3^@ c #6C2D26", "4^@ c #732E27", "5^@ c #752C26", "6^@ c #802723", "7^@ c #5E1B12", "8^@ c #5A1A10", "9^@ c #56160C", "0^@ c #57170D", "a^@ c #5F1C13", "b^@ c #631F16", "c^@ c #621711", "d^@ c #731D1C", "e^@ c #6D1C19", "f^@ c #681D18", "g^@ c #592420", "h^@ c #1A110A", "i^@ c #120900", "j^@ c #4A4138", "k^@ c #CAC2B5", "l^@ c #978C78", "m^@ c #958264", "n^@ c #806645", "o^@ c #4A270B", "p^@ c #3B0F00", "q^@ c #632C17", "r^@ c #71301E", "s^@ c #6A1E11", "t^@ c #7B271D", "u^@ c #882122", "v^@ c #892223", "w^@ c #892527", "x^@ c #822A29", "y^@ c #772321", "z^@ c #803031", "A^@ c #7B2B2C", "B^@ c #7D3330", "C^@ c #7E3435", "D^@ c #83363C", "E^@ c #85363C", "F^@ c #8A3B40", "G^@ c #88393C", "H^@ c #873738", "I^@ c #883837", "J^@ c #8A3938", "K^@ c #8C3031", "L^@ c #8A3030", "M^@ c #893130", "N^@ c #842E2D", "O^@ c #7D2F2B", "P^@ c #792E29", "Q^@ c #782D28", "R^@ c #712A24", "S^@ c #722C2A", "T^@ c #6F2E2A", "U^@ c #6A2D2A", "V^@ c #662C2A", "W^@ c #632D2B", "X^@ c #602E2D", "Y^@ c #5B2D2D", "Z^@ c #542A2B", "`^@ c #492525", " /@ c #2B1814", "./@ c #281B15", "+/@ c #1E130D", "@/@ c #A49494", "#/@ c #A89597", "$/@ c #AA9898", "%/@ c #887966", "&/@ c #7C6B57", "*/@ c #6D5D46", "=/@ c #5B4A30", "-/@ c #5E3A2A", ";/@ c #5A3C32", ">/@ c #573C35", ",/@ c #553D39", "'/@ c #5B4844", ")/@ c #695755", "!/@ c #726464", "~/@ c #7A7071", "{/@ c #8F8689", "]/@ c #968F96", "^/@ c #9D969E", "//@ c #9E98A2", "(/@ c #A3A1AC", "_/@ c #A1ADAD", ":/@ c #A0AEAE", "(@ c #63271F", ",(@ c #5A251F", "'(@ c #451F1C", ")(@ c #432622", "!(@ c #1D140D", "~(@ c #130A01", "{(@ c #C5BDB0", "](@ c #C4BDAD", "^(@ c #948872", "/(@ c #907B5E", "((@ c #7E6141", "_(@ c #492409", ":(@ c #3D0F00", "<(@ c #682F1B", "[(@ c #722F1E", "}(@ c #691B0F", "|(@ c #7D261D", "1(@ c #84201E", "2(@ c #8A2324", "3(@ c #8D2629", "4(@ c #852225", "5(@ c #7F2527", "6(@ c #802626", "7(@ c #782422", "8(@ c #812F31", "9(@ c #7A2A2B", "0(@ c #7E2E2D", "a(@ c #7C312E", "b(@ c #7E3030", "c(@ c #85323A", "d(@ c #8B393F", "e(@ c #8A383C", "f(@ c #893437", "g(@ c #873333", "h(@ c #883434", "i(@ c #8B3536", "j(@ c #8D3132", "k(@ c #8E3031", "l(@ c #8C2E2F", "m(@ c #8B2F30", "n(@ c #872F2E", "o(@ c #822C2B", "p(@ c #772E28", "q(@ c #752A27", "r(@ c #742D2B", "s(@ c #742E2C", "t(@ c #702F2D", "u(@ c #6B2E2B", "v(@ c #642E2C", "w(@ c #613131", "x(@ c #603433", "y(@ c #5B3132", "z(@ c #401E1D", "A(@ c #3B231F", "B(@ c #2D1B17", "C(@ c #271813", "D(@ c #271A14", "E(@ c #231610", "F(@ c #271C18", "G(@ c #483F3A", "H(@ c #A99597", "I(@ c #9E9488", "J(@ c #968A7A", "K(@ c #908372", "L(@ c #837663", "M(@ c #756651", "N(@ c #5C4C33", "O(@ c #5B3A29", "P(@ c #593C2E", "Q(@ c #553A2F", "R(@ c #523B33", "S(@ c #58453E", "T(@ c #65534F", "U(@ c #6E5F5C", "V(@ c #726666", "W(@ c #897F80", "X(@ c #94898D", "Y(@ c #968D92", "Z(@ c #9F959D", "`(@ c #9E979F", " _@ c #9D97A1", "._@ c #A4A1AC", "+_@ c #9EACAC", "@_@ c #9FADAD", "#_@ c #B1BEC6", "$_@ c #B2B9C1", "%_@ c #9DA8AE", "&_@ c #949FA5", "*_@ c #8E999F", "=_@ c #B1B5BE", "-_@ c #C8D5DE", ";_@ c #CCD9E1", ">_@ c #91A1A1", ",_@ c #859894", "'_@ c #74857F", ")_@ c #516258", "!_@ c #435346", "~_@ c #435140", "{_@ c #434E3D", "]_@ c #323B26", "^_@ c #202810", "/_@ c #292F15", "(_@ c #34381F", "__@ c #2C3019", ":_@ c #353626", "<_@ c #393A2A", "[_@ c #413F30", "}_@ c #454432", "|_@ c #494431", "1_@ c #4E4935", "2_@ c #494635", "3_@ c #464533", "4_@ c #424333", "5_@ c #3F3C29", "6_@ c #393625", "7_@ c #373425", "8_@ c #272320", "9_@ c #2A2220", "0_@ c #261F15", "a_@ c #262014", "b_@ c #34261D", "c_@ c #382B23", "d_@ c #372A22", "e_@ c #2C231C", "f_@ c #34271E", "g_@ c #403020", "h_@ c #3F2F1F", "i_@ c #3C3020", "j_@ c #3B372B", "k_@ c #685946", "l_@ c #746150", "m_@ c #6C5948", "n_@ c #978676", "o_@ c #968476", "p_@ c #BAC1CB", "q_@ c #B0BAC6", "r_@ c #ADB9C5", "s_@ c #B2BFC8", "t_@ c #ADBAC2", "u_@ c #B7BDB9", "v_@ c #ABAAA5", "w_@ c #7B776C", "x_@ c #6F685E", "y_@ c #665D54", "z_@ c #887A71", "A_@ c #B5ABA9", "B_@ c #C3BAAB", "C_@ c #978173", "D_@ c #45281A", "E_@ c #2F0B00", "F_@ c #42160B", "G_@ c #5E2A1F", "H_@ c #591E16", "I_@ c #63241D", "J_@ c #78332C", "K_@ c #712822", "L_@ c #802D29", "M_@ c #802B28", "N_@ c #5C1E13", "O_@ c #561A0F", "P_@ c #591B10", "Q_@ c #5E2015", "R_@ c #612117", "S_@ c #5C180F", "T_@ c #621912", "U_@ c #791E1B", "V_@ c #68221A", "W_@ c #65261F", "X_@ c #5B241F", "Y_@ c #441F19", "Z_@ c #412824", "`_@ c #150C03", " :@ c #C1B9AC", ".:@ c #C7C0B0", "+:@ c #91826B", "@:@ c #907759", "#:@ c #431B01", "$:@ c #4B1B04", "%:@ c #6B311D", "&:@ c #702B1B", "*:@ c #6C1E12", "=:@ c #792219", "-:@ c #862220", ";:@ c #8A2223", ">:@ c #882124", ",:@ c #852123", "':@ c #7B2123", "):@ c #7A221E", "!:@ c #7B2D29", "~:@ c #7D2D30", "{:@ c #832E35", "]:@ c #8B3234", "^:@ c #8C3335", "/:@ c #8E3434", "(:@ c #8F3132", "_:@ c #8E2E30", "::@ c #882C2D", "<:@ c #772726", "[:@ c #762826", "}:@ c #742828", "|:@ c #712A28", "1:@ c #702A2A", "2:@ c #6D2C2A", "3:@ c #6A2D2C", "4:@ c #672F2E", "5:@ c #592929", "6:@ c #542424", "7:@ c #4B2323", "8:@ c #291811", "9:@ c #BAACAB", "0:@ c #AF9FA0", "a:@ c #A8A5A0", "b:@ c #958979", "c:@ c #897C6B", "d:@ c #62513D", "e:@ c #623E28", "f:@ c #5A3A2B", "g:@ c #5F4337", "h:@ c #5C4438", "i:@ c #70625F", "j:@ c #7F7373", "k:@ c #9A8F93", "l:@ c #958E96", "m:@ c #A09DA6", "n:@ c #AAA8B3", "o:@ c #A5B3B3", "p:@ c #ACB9C1", "q:@ c #B5B9C4", "r:@ c #B3B7C2", "s:@ c #AEB5BF", "t:@ c #8F9CA2", "u:@ c #CCDBE2", "v:@ c #A0B4B5", "w:@ c #99ADAB", "x:@ c #506560", "y:@ c #1E332A", "z:@ c #2B3F33", "A:@ c #304232", "B:@ c #2A3827", "C:@ c #24311D", "D:@ c #29321D", "E:@ c #212912", "F:@ c #1C210B", "G:@ c #242712", "H:@ c #1E2012", "I:@ c #363425", "J:@ c #413A27", "K:@ c #443D2A", "L:@ c #3D3B2C", "M:@ c #3B392C", "N:@ c #333426", "O:@ c #383627", "P:@ c #353422", "Q:@ c #302E1F", "R:@ c #2B291C", "S:@ c #1F1E1C", "T:@ c #201F1D", "U:@ c #21201E", "V:@ c #1D1C1A", "W:@ c #191917", "X:@ c #161614", "Y:@ c #1A1A18", "Z:@ c #171614", "`:@ c #151412", " <@ c #1A1917", ".<@ c #181715", "+<@ c #161513", "@<@ c #2F2523", "#<@ c #35271C", "$<@ c #3A2C21", "%<@ c #3D2C22", "&<@ c #3B2D22", "*<@ c #3B2D24", "=<@ c #35271E", "-<@ c #3A2C23", ";<@ c #372920", "><@ c #382A21", ",<@ c #3E3027", "'<@ c #2B2318", ")<@ c #2F251B", "!<@ c #322215", "~<@ c #342417", "{<@ c #39291A", "]<@ c #3C2B19", "^<@ c #41301C", "/<@ c #443321", "(<@ c #41321F", "_<@ c #483926", ":<@ c #473A2A", "<<@ c #3E3222", "[<@ c #6F5B50", "}<@ c #625046", "|<@ c #736155", "1<@ c #807063", "2<@ c #B2A89F", "3<@ c #BCB7B3", "4<@ c #BAC7D0", "5<@ c #B7C4CD", "6<@ c #AEBBC4", "7<@ c #A8B5BB", "8<@ c #A9B6BE", "9<@ c #AFB1AE", "0<@ c #BBBDB8", "a<@ c #A9A8A3", "b<@ c #817D72", "c<@ c #6A665B", "d<@ c #6A6359", "e<@ c #C8C0B3", "f<@ c #D8CCBE", "g<@ c #5F4538", "h<@ c #2E0C00", "i<@ c #3E130A", "j<@ c #511F16", "k<@ c #622920", "l<@ c #772C27", "m<@ c #7A2B27", "n<@ c #812925", "o<@ c #832A26", "p<@ c #5B1F14", "q<@ c #5D1D13", "r<@ c #601A12", "s<@ c #741C1B", "t<@ c #671814", "u<@ c #612821", "v<@ c #54251F", "w<@ c #3F201D", "x<@ c #402421", "y<@ c #3F2A27", "z<@ c #1C130C", "A<@ c #0E0500", "B<@ c #998E7A", "C<@ c #93836A", "D<@ c #896E51", "E<@ c #644123", "F<@ c #421800", "G<@ c #4E1C05", "H<@ c #6C2F1C", "I<@ c #732B1C", "J<@ c #87211F", "K<@ c #892122", "L<@ c #882021", "M<@ c #892024", "N<@ c #862125", "O<@ c #7C2023", "P<@ c #7B2C28", "Q<@ c #782827", "R<@ c #782925", "S<@ c #802B32", "T<@ c #812A32", "U<@ c #842A33", "V<@ c #882E30", "W<@ c #8F2F31", "X<@ c #8F2C2F", "Y<@ c #752727", "Z<@ c #722827", "`<@ c #71292A", " [@ c #6F2B2A", ".[@ c #6A2829", "+[@ c #682B2A", "@[@ c #652D2C", "#[@ c #5F2929", "$[@ c #5A2726", "%[@ c #542626", "&[@ c #472420", "*[@ c #40251E", "=[@ c #331C16", "-[@ c #2D1912", ";[@ c #2F1C16", ">[@ c #5F514E", ",[@ c #877976", "'[@ c #C2B2B3", ")[@ c #B09D9F", "![@ c #9D898B", "~[@ c #A28F91", "{[@ c #857867", "][@ c #594234", "^[@ c #513E30", "/[@ c #6C5D58", "([@ c #7C6E6D", "_[@ c #908282", ":[@ c #968C94", "<[@ c #99929A", "[[@ c #A2AEAE", "}[@ c #A4B2B2", "|[@ c #A3B1B2", "1[@ c #B6BAC5", "2[@ c #AFB6C0", "3[@ c #A5B2B8", "4[@ c #D1E2E9", "5[@ c #9EB4B1", "6[@ c #485F59", "7[@ c #0D241C", "8[@ c #22382C", "9[@ c #2C4034", "0[@ c #2F4030", "a[@ c #2B3A27", "b[@ c #25301F", "c[@ c #19200E", "d[@ c #141905", "e[@ c #1D200F", "f[@ c #202016", "g[@ c #1F1B0F", "h[@ c #302917", "i[@ c #302815", "j[@ c #352A18", "k[@ c #3E3321", "l[@ c #3E3623", "m[@ c #3C3523", "n[@ c #2E2F1F", "o[@ c #2D2B1C", "p[@ c #2B2C1C", "q[@ c #27281A", "r[@ c #151513", "s[@ c #141311", "t[@ c #2B211F", "u[@ c #322618", "v[@ c #35271A", "w[@ c #382A1D", "x[@ c #3D2D20", "y[@ c #3E2D23", "z[@ c #3D2F24", "A[@ c #3E3025", "B[@ c #39281E", "C[@ c #3F3126", "D[@ c #3C2B21", "E[@ c #3C2A1E", "F[@ c #3E2C20", "G[@ c #382618", "H[@ c #3A2719", "I[@ c #402D1E", "J[@ c #46311C", "K[@ c #4D3B25", "L[@ c #564734", "M[@ c #4D3E2B", "N[@ c #402F25", "O[@ c #3B281A", "P[@ c #3E281B", "Q[@ c #4B3528", "R[@ c #665249", "S[@ c #5F4C45", "T[@ c #75675C", "U[@ c #BBC8D1", "V[@ c #B1B3AE", "W[@ c #777368", "X[@ c #797067", "Y[@ c #C3BDAF", "Z[@ c #372012", "`[@ c #381207", " }@ c #48190F", ".}@ c #5A241A", "+}@ c #692D23", "@}@ c #742F28", "#}@ c #832825", "$}@ c #842926", "%}@ c #872325", "&}@ c #882627", "*}@ c #5A1E13", "=}@ c #591F13", "-}@ c #5B1D12", ";}@ c #5C1C12", ">}@ c #5E1A11", ",}@ c #5F1911", "'}@ c #6E231D", ")}@ c #622721", "!}@ c #54231E", "~}@ c #471E1A", "{}@ c #100700", "]}@ c #CAC3B3", "^}@ c #9A8F79", "/}@ c #95836B", "(}@ c #806246", "_}@ c #5D3619", ":}@ c #541D08", "<}@ c #6C2D1B", "[}@ c #732A1B", "}}@ c #742217", "|}@ c #851F1D", "1}@ c #821E1E", "2}@ c #892321", "3}@ c #891F21", "4}@ c #8B2226", "5}@ c #892225", "6}@ c #7D2124", "7}@ c #77221B", "8}@ c #7A2925", "9}@ c #772623", "0}@ c #772622", "a}@ c #7B2A29", "b}@ c #7D282D", "c}@ c #7F2830", "d}@ c #80262F", "e}@ c #8C2C2D", "f}@ c #902D30", "g}@ c #8E2B2E", "h}@ c #892D2E", "i}@ c #752A25", "j}@ c #742322", "k}@ c #742423", "l}@ c #742626", "m}@ c #702927", "n}@ c #6F2927", "o}@ c #692524", "p}@ c #692826", "q}@ c #672B2A", "r}@ c #652B2A", "s}@ c #5D2A29", "t}@ c #371C15", "u}@ c #321914", "v}@ c #301C15", "w}@ c #2D1C15", "x}@ c #534441", "y}@ c #8B7C79", "z}@ c #BBABAB", "A}@ c #BAAAAA", "B}@ c #AA9B9E", "C}@ c #988A7D", "D}@ c #5F3B23", "E}@ c #5D4D40", "F}@ c #65544D", "G}@ c #746562", "H}@ c #887A79", "I}@ c #958A8E", "J}@ c #968F97", "K}@ c #A3AEB0", "L}@ c #A6B2B2", "M}@ c #B6BAC6", "N}@ c #B2B9C3", "O}@ c #B1C0C7", "P}@ c #AEBDC4", "Q}@ c #AEBBC3", "R}@ c #B6BDC7", "S}@ c #B4BBC5", "T}@ c #B0B7C1", "U}@ c #AAB3BC", "V}@ c #A9B0BA", "W}@ c #ACB5BE", "X}@ c #ABB2BC", "Y}@ c #D0E2E6", "Z}@ c #C9DDDE", "`}@ c #AAC0BE", " |@ c #819A96", ".|@ c #445D57", "+|@ c #1D372E", "@|@ c #1A3429", "#|@ c #273D31", "$|@ c #34463A", "%|@ c #354334", "&|@ c #263123", "*|@ c #13190B", "=|@ c #101405", "-|@ c #181A0D", ";|@ c #18160A", ">|@ c #292212", ",|@ c #2C1F0E", "'|@ c #2D200D", ")|@ c #312411", "!|@ c #2F2818", "~|@ c #262719", "{|@ c #212316", "]|@ c #1C1C1A", "^|@ c #181818", "/|@ c #171717", "(|@ c #161616", "_|@ c #151515", ":|@ c #141414", "<|@ c #121212", "[|@ c #131313", "}|@ c #151314", "||@ c #141213", "1|@ c #161415", "2|@ c #171516", "3|@ c #181617", "4|@ c #191718", "5|@ c #362A1C", "6|@ c #372B1B", "7|@ c #37291C", "8|@ c #3A2A1B", "9|@ c #3B2B1E", "0|@ c #402E20", "a|@ c #412F23", "b|@ c #433125", "c|@ c #463428", "d|@ c #433326", "e|@ c #3F2D21", "f|@ c #403023", "g|@ c #443226", "h|@ c #3C2C1F", "i|@ c #3E2E21", "j|@ c #36281B", "k|@ c #3D2B1F", "l|@ c #422F21", "m|@ c #452F21", "n|@ c #432D1F", "o|@ c #5C462E", "p|@ c #68543C", "q|@ c #74624C", "r|@ c #483723", "s|@ c #463521", "t|@ c #33251C", "u|@ c #37261E", "v|@ c #402E24", "w|@ c #422C1F", "x|@ c #422A1E", "y|@ c #4D3529", "z|@ c #462E24", "A|@ c #402921", "B|@ c #57403A", "C|@ c #7E6964", "D|@ c #8C7975", "E|@ c #877573", "F|@ c #877873", "G|@ c #B8B1AB", "H|@ c #C5C7C6", "I|@ c #BBC8D0", "J|@ c #BCCBD2", "K|@ c #B7C4CC", "L|@ c #BABCB9", "M|@ c #A9ABA8", "N|@ c #A4A6A1", "O|@ c #6D695E", "P|@ c #666257", "Q|@ c #787167", "R|@ c #847B72", "S|@ c #B4A9A3", "T|@ c #D0C7B8", "U|@ c #9D8B7F", "V|@ c #5F493C", "W|@ c #2F1307", "X|@ c #452317", "Y|@ c #441C12", "Z|@ c #522218", "`|@ c #642B22", " 1@ c #723229", ".1@ c #7B322C", "+1@ c #7D302A", "@1@ c #842924", "#1@ c #872427", "$1@ c #5B1B11", "%1@ c #5D1A11", "&1@ c #6B2820", "*1@ c #53221B", "=1@ c #471E18", "-1@ c #422521", ";1@ c #211811", ">1@ c #CBC4B4", ",1@ c #99978B", "'1@ c #A0957F", ")1@ c #998D75", "!1@ c #938268", "~1@ c #77583C", "{1@ c #552C10", "]1@ c #451500", "^1@ c #5A210D", "/1@ c #6C2B19", "(1@ c #722618", "_1@ c #801C1A", ":1@ c #831D1B", "<1@ c #841E1C", "[1@ c #831F1F", "}1@ c #882220", "|1@ c #8B2324", "11@ c #8B2123", "21@ c #8C2327", "31@ c #8A2326", "41@ c #892226", "51@ c #752420", "61@ c #782724", "71@ c #7D262C", "81@ c #7D262E", "91@ c #7F242D", "01@ c #8A2A2B", "a1@ c #8B2B2C", "b1@ c #8C2C2E", "c1@ c #89292B", "d1@ c #742622", "e1@ c #712120", "f1@ c #722221", "g1@ c #722422", "h1@ c #712525", "i1@ c #722626", "j1@ c #712726", "k1@ c #6B2525", "l1@ c #6B2726", "m1@ c #662A29", "n1@ c #622B28", "o1@ c #5B2C26", "p1@ c #562B24", "q1@ c #512822", "r1@ c #381B13", "s1@ c #311811", "t1@ c #2E1711", "u1@ c #2C1912", "v1@ c #544542", "w1@ c #897A77", "x1@ c #B5A5A5", "y1@ c #A6979A", "z1@ c #9B8D80", "A1@ c #6F5E4C", "B1@ c #4E3926", "C1@ c #5B4841", "D1@ c #6A5854", "E1@ c #968B8F", "F1@ c #9699A0", "G1@ c #B8BBC4", "H1@ c #B7BBC6", "I1@ c #B9BDC8", "J1@ c #B8BCC8", "K1@ c #B5BBC7", "L1@ c #D3E2E5", "M1@ c #BFD3D2", "N1@ c #879D9B", "O1@ c #647D79", "P1@ c #5E7972", "Q1@ c #1C362D", "R1@ c #20372D", "S1@ c #304439", "T1@ c #36463B", "U1@ c #263025", "V1@ c #14160B", "W1@ c #17170D", "X1@ c #17140B", "Y1@ c #1F1B10", "Z1@ c #2E2110", "`1@ c #30210E", " 2@ c #301F0B", ".2@ c #2B1A08", "+2@ c #2F2211", "@2@ c #202215", "#2@ c #202217", "$2@ c #1F2116", "%2@ c #131112", "&2@ c #211D12", "*2@ c #221E13", "=2@ c #382C1C", "-2@ c #372A1A", ";2@ c #412F21", ">2@ c #423022", ",2@ c #443224", "'2@ c #443323", ")2@ c #433222", "!2@ c #423121", "~2@ c #443122", "{2@ c #433021", "]2@ c #412E1F", "^2@ c #463324", "/2@ c #422F20", "(2@ c #3F2D1F", "_2@ c #3E2C1E", ":2@ c #3C2A1C", "<2@ c #422E23", "[2@ c #442E21", "}2@ c #442E20", "|2@ c #483224", "12@ c #4B3426", "22@ c #4E3727", "32@ c #4F3526", "42@ c #4B3120", "52@ c #4D3322", "62@ c #523925", "72@ c #5F452A", "82@ c #6F573D", "92@ c #745F44", "02@ c #7A644C", "a2@ c #2F1E0E", "b2@ c #463325", "c2@ c #452F22", "d2@ c #3D2719", "e2@ c #3D2618", "f2@ c #462F21", "g2@ c #4F382A", "h2@ c #452D21", "i2@ c #3A2218", "j2@ c #2A130B", "k2@ c #4E3A33", "l2@ c #B29F99", "m2@ c #FBE9E5", "n2@ c #EEDFDC", "o2@ c #B8B5B0", "p2@ c #BAB9B5", "q2@ c #BCBEBB", "r2@ c #BABFBB", "s2@ c #9EA09B", "t2@ c #7E7B72", "u2@ c #69655A", "v2@ c #6C685D", "w2@ c #9D8B7D", "x2@ c #220800", "y2@ c #301003", "z2@ c #3A160A", "A2@ c #502419", "B2@ c #5D291E", "C2@ c #77342C", "D2@ c #7E332D", "E2@ c #802F2B", "F2@ c #812C29", "G2@ c #822A26", "H2@ c #832A24", "I2@ c #882426", "J2@ c #892629", "K2@ c #88282A", "L2@ c #591D12", "M2@ c #651812", "N2@ c #82201D", "O2@ c #76231B", "P2@ c #73261E", "Q2@ c #6C2720", "R2@ c #481D17", "S2@ c #411E18", "T2@ c #442520", "U2@ c #442C28", "V2@ c #251C15", "W2@ c #8A8275", "X2@ c #CCC4B7", "Y2@ c #9E937D", "Z2@ c #958971", "`2@ c #907C63", " 3@ c #4C2307", ".3@ c #481801", "+3@ c #602713", "@3@ c #6B2817", "#3@ c #702215", "$3@ c #821C1A", "%3@ c #831B1A", "&3@ c #86201E", "*3@ c #8C2425", "=3@ c #8E2426", "-3@ c #7B1F22", ";3@ c #772225", ">3@ c #75251E", ",3@ c #7B242A", "'3@ c #7F242B", ")3@ c #88282C", "!3@ c #8C2A2B", "~3@ c #87292A", "{3@ c #752421", "]3@ c #702522", "^3@ c #712623", "/3@ c #702625", "(3@ c #6C2825", "_3@ c #6A2927", ":3@ c #692927", "<3@ c #682826", "[3@ c #652825", "}3@ c #642724", "|3@ c #602924", "13@ c #5C2A23", "23@ c #5A2922", "33@ c #552920", "43@ c #4E261E", "53@ c #432118", "63@ c #3A1C14", "73@ c #33180F", "83@ c #32201C", "93@ c #4F403B", "03@ c #786966", "a3@ c #B4A6A5", "b3@ c #A79B9D", "c3@ c #5D4328", "d3@ c #613F24", "e3@ c #623E24", "f3@ c #534137", "g3@ c #604E4A", "h3@ c #73615F", "i3@ c #837373", "j3@ c #8D8183", "k3@ c #9C979E", "l3@ c #919199", "m3@ c #8F969C", "n3@ c #B3B6BF", "o3@ c #B2B4C0", "p3@ c #B3B5C1", "q3@ c #B5B7C3", "r3@ c #B6B8C4", "s3@ c #B6B8C5", "t3@ c #B5B7C4", "u3@ c #B2B8C4", "v3@ c #ACB9C2", "w3@ c #AABBC3", "x3@ c #AFBDC6", "y3@ c #B3C1CA", "z3@ c #AAB7C0", "A3@ c #ACB6C0", "B3@ c #ABB5BF", "C3@ c #B1B9C4", "D3@ c #B1BEC7", "E3@ c #B5C2CB", "F3@ c #B4C1CA", "G3@ c #B3C0C9", "H3@ c #B0BDC6", "I3@ c #B6C3CC", "J3@ c #B8C5CE", "K3@ c #B9C6CF", "L3@ c #BFD3D1", "M3@ c #849A97", "N3@ c #718A86", "O3@ c #8AA59E", "P3@ c #8CA7A0", "Q3@ c #223C33", "R3@ c #162D25", "S3@ c #21352C", "T3@ c #2E3D36", "U3@ c #222C24", "V3@ c #0F0C03", "W3@ c #1F180E", "X3@ c #251808", "Y3@ c #2D1C0C", "Z3@ c #432E19", "`3@ c #442F1C", " 4@ c #3A2814", ".4@ c #342313", "+4@ c #1F2315", "@4@ c #212419", "#4@ c #1B1E13", "$4@ c #111111", "%4@ c #231D11", "&4@ c #261E13", "*4@ c #282015", "=4@ c #362918", "-4@ c #342716", ";4@ c #352817", ">4@ c #3B2E1D", ",4@ c #402F1F", "'4@ c #413020", ")4@ c #473425", "!4@ c #483526", "~4@ c #4B3827", "{4@ c #463322", "]4@ c #4A3524", "^4@ c #4B3625", "/4@ c #473221", "(4@ c #463120", "_4@ c #483322", ":4@ c #453224", "<4@ c #443123", "[4@ c #412E20", "}4@ c #402D1F", "|4@ c #483225", "14@ c #493222", "24@ c #4E3425", "34@ c #4E3423", "44@ c #513623", "54@ c #765D3F", "64@ c #7A6143", "74@ c #664F30", "84@ c #61492D", "94@ c #4B351D", "04@ c #3B250E", "a4@ c #4A341F", "b4@ c #513824", "c4@ c #4D341E", "d4@ c #452E1C", "e4@ c #361F11", "f4@ c #200A00", "g4@ c #3A281E", "h4@ c #E0D2CF", "i4@ c #A5A49F", "j4@ c #A9A8A4", "k4@ c #B7B6B2", "l4@ c #B9CBCB", "m4@ c #B8C5CD", "n4@ c #A5A7A4", "o4@ c #9FA19C", "p4@ c #79766D", "q4@ c #767267", "r4@ c #B7AEA5", "s4@ c #DECDC3", "t4@ c #705A4D", "u4@ c #321A0E", "v4@ c #280C00", "w4@ c #48261A", "x4@ c #50281E", "y4@ c #57271D", "z4@ c #7A352E", "A4@ c #80332D", "B4@ c #822F2B", "C4@ c #812A23", "D4@ c #892525", "E4@ c #8A2628", "F4@ c #8B262A", "G4@ c #8A272A", "H4@ c #6D2920", "I4@ c #4B1E18", "J4@ c #271E17", "K4@ c #180F06", "L4@ c #847C6F", "M4@ c #9B9178", "N4@ c #92846A", "O4@ c #887459", "P4@ c #674529", "Q4@ c #461A00", "R4@ c #4C1A03", "S4@ c #682E1A", "T4@ c #6B2616", "U4@ c #6F2114", "V4@ c #771A13", "W4@ c #821A19", "X4@ c #861F20", "Y4@ c #8A2125", "Z4@ c #882125", "`4@ c #852024", " 5@ c #7C1D21", ".5@ c #7B1D1E", "+5@ c #75211F", "@5@ c #782424", "#5@ c #782328", "$5@ c #742520", "%5@ c #772527", "&5@ c #84252B", "*5@ c #6F2524", "=5@ c #6F2826", "-5@ c #6E2826", ";5@ c #6C2827", ">5@ c #672624", ",5@ c #61281F", "'5@ c #602922", ")5@ c #5D2B22", "!5@ c #582C23", "~5@ c #502820", "{5@ c #442218", "]5@ c #3B1F14", "^5@ c #301C13", "/5@ c #28150E", "(5@ c #2E1D16", "_5@ c #5A4C49", ":5@ c #B5A7A7", "<5@ c #B8A9AC", "[5@ c #B2A3A6", "}5@ c #A5928B", "|5@ c #67573E", "15@ c #5B462B", "25@ c #624025", "35@ c #5F3F26", "45@ c #523E35", "55@ c #594640", "65@ c #675551", "75@ c #766666", "85@ c #857777", "95@ c #908589", "05@ c #9B969C", "a5@ c #939099", "b5@ c #8F9299", "c5@ c #8B9298", "d5@ c #8B9499", "e5@ c #909B9F", "f5@ c #95A3A4", "g5@ c #9DA8AA", "h5@ c #B0B3BC", "i5@ c #ACAEBA", "j5@ c #AFB1BD", "k5@ c #B1B3C0", "l5@ c #AFB1BE", "m5@ c #ACB2BE", "n5@ c #A9B6BF", "o5@ c #A7B8C0", "p5@ c #ACBAC3", "q5@ c #B1BFC8", "r5@ c #AFBCC5", "s5@ c #ADB7C1", "t5@ c #B6C4CD", "u5@ c #B9C7D0", "v5@ c #C9D9D8", "w5@ c #BED2D0", "x5@ c #95ABA8", "y5@ c #92ADA8", "z5@ c #A4BFB8", "A5@ c #78968E", "B5@ c #263F39", "C5@ c #0C231B", "D5@ c #142723", "E5@ c #283430", "F5@ c #1D2321", "G5@ c #191B1A", "H5@ c #1F1D1E", "I5@ c #161211", "J5@ c #161209", "K5@ c #211102", "L5@ c #412E1D", "M5@ c #755F48", "N5@ c #735A46", "O5@ c #2D1D0E", "P5@ c #221910", "Q5@ c #222618", "R5@ c #110F10", "S5@ c #251F11", "T5@ c #2A2215", "U5@ c #3C2F1E", "V5@ c #423222", "W5@ c #493627", "X5@ c #4A3728", "Y5@ c #4A3822", "Z5@ c #4B3923", "`5@ c #483620", " 6@ c #473521", ".6@ c #47351F", "+6@ c #483622", "@6@ c #4B3621", "#6@ c #4D3624", "$6@ c #4F3622", "%6@ c #4F3524", "&6@ c #4E3521", "*6@ c #4D3420", "=6@ c #4C3525", "-6@ c #473022", ";6@ c #4D3628", ">6@ c #4E3928", ",6@ c #483123", "'6@ c #473020", ")6@ c #4B3424", "!6@ c #4D3326", "~6@ c #4D3324", "{6@ c #4E3322", "]6@ c #513625", "^6@ c #523523", "/6@ c #624324", "(6@ c #694B27", "_6@ c #6A4C2A", ":6@ c #634523", "<6@ c #654828", "[6@ c #6E5131", "}6@ c #715736", "|6@ c #775D3C", "16@ c #5F4628", "26@ c #624B2C", "36@ c #462C11", "46@ c #42280D", "56@ c #4C3217", "66@ c #694F34", "76@ c #866B4E", "86@ c #967C61", "96@ c #856B50", "06@ c #48311F", "a6@ c #311E0D", "b6@ c #47392E", "c6@ c #4F453C", "d6@ c #B7CAC8", "e6@ c #BABCBB", "f6@ c #B8BDB9", "g6@ c #A7A9A6", "h6@ c #8B8B83", "i6@ c #757166", "j6@ c #846E63", "k6@ c #3D271A", "l6@ c #240C00", "m6@ c #381C10", "n6@ c #3E1E13", "o6@ c #401C10", "p6@ c #542A1E", "q6@ c #652C23", "r6@ c #7B342E", "s6@ c #81322D", "t6@ c #832B27", "u6@ c #822B24", "v6@ c #802B24", "w6@ c #802C22", "x6@ c #7F2620", "y6@ c #8D2929", "z6@ c #8D292B", "A6@ c #8D282C", "B6@ c #8B282D", "C6@ c #87272B", "D6@ c #86262A", "E6@ c #842529", "F6@ c #5D1F14", "G6@ c #721A19", "H6@ c #6F1918", "I6@ c #741B15", "J6@ c #672821", "K6@ c #4D201A", "L6@ c #461F1A", "M6@ c #1A1108", "N6@ c #231A11", "O6@ c #7E7669", "P6@ c #9F9989", "Q6@ c #9F9885", "R6@ c #8C7E64", "S6@ c #816C51", "T6@ c #401200", "U6@ c #4D1B04", "V6@ c #6D331F", "W6@ c #6C2717", "X6@ c #722316", "Y6@ c #812820", "Z6@ c #85211F", "`6@ c #8A2022", " 7@ c #8B2125", ".7@ c #872024", "+7@ c #831E22", "@7@ c #801D20", "#7@ c #7A1B1F", "$7@ c #791B1C", "%7@ c #811D1F", "&7@ c #73221F", "*7@ c #742320", "=7@ c #732221", "-7@ c #71201F", ";7@ c #701F1E", ">7@ c #762426", ",7@ c #752327", "'7@ c #742226", ")7@ c #76242A", "!7@ c #79261E", "~7@ c #75251C", "{7@ c #7E232A", "]7@ c #83242A", "^7@ c #8B292A", "/7@ c #7B2322", "(7@ c #742624", "_7@ c #6C2523", ":7@ c #6C2624", "<7@ c #692522", "[7@ c #652420", "}7@ c #652422", "|7@ c #632D23", "17@ c #603026", "27@ c #592E25", "37@ c #4D281F", "47@ c #42241A", "57@ c #3A1F16", "67@ c #311A12", "77@ c #2C1A10", "87@ c #35241C", "97@ c #23160E", "07@ c #5D4F4C", "a7@ c #938585", "b7@ c #C0B1B4", "c7@ c #B9AAAD", "d7@ c #AA9790", "e7@ c #A39187", "f7@ c #98847B", "g7@ c #8D7B6D", "h7@ c #635238", "i7@ c #624024", "j7@ c #613F23", "k7@ c #513F2B", "l7@ c #56433D", "m7@ c #786A6A", "n7@ c #877B7F", "o7@ c #93888E", "p7@ c #8E959B", "q7@ c #8E979C", "r7@ c #919CA0", "s7@ c #AEB2BB", "t7@ c #AFB3BC", "u7@ c #B0B4BF", "v7@ c #ADAFBB", "w7@ c #B1B3BF", "x7@ c #B2B4C1", "y7@ c #B0B2BF", "z7@ c #AFB1C0", "A7@ c #ADB3C1", "B7@ c #A9BAC2", "C7@ c #ADBEC6", "D7@ c #B2C0C9", "E7@ c #B2C3CB", "F7@ c #B0C1C9", "G7@ c #B5C6CE", "H7@ c #B6C7CF", "I7@ c #B3C4CC", "J7@ c #B7C8D0", "K7@ c #AFC0C8", "L7@ c #C0D3CF", "M7@ c #A1B8B2", "N7@ c #AFCAC3", "O7@ c #BBD6CF", "P7@ c #6B8981", "Q7@ c #2C453F", "R7@ c #0A211B", "S7@ c #152524", "T7@ c #2A3634", "U7@ c #1C2222", "V7@ c #1A1B1D", "W7@ c #191315", "X7@ c #1F1810", "Y7@ c #685340", "Z7@ c #A58C76", "`7@ c #A78F77", " 8@ c #907560", ".8@ c #674E38", "+8@ c #3B2613", "@8@ c #2A1909", "#8@ c #26180D", "$8@ c #231910", "%8@ c #292B20", "&8@ c #24281A", "*8@ c #151714", "=8@ c #161618", "-8@ c #151517", ";8@ c #171719", ">8@ c #121214", ",8@ c #18181A", "'8@ c #131315", ")8@ c #131114", "!8@ c #141215", "~8@ c #161417", "{8@ c #171518", "]8@ c #181619", "^8@ c #2B2414", "/8@ c #423525", "(8@ c #433323", "_8@ c #473727", ":8@ c #493828", "<8@ c #4A3929", "[8@ c #4C3628", "}8@ c #4D3729", "|8@ c #4E382A", "18@ c #4A3820", "28@ c #493721", "38@ c #45331D", "48@ c #433119", "58@ c #46341C", "68@ c #4B371F", "78@ c #503723", "88@ c #503520", "98@ c #4F3421", "08@ c #4E331E", "a8@ c #4E3320", "b8@ c #513621", "c8@ c #503625", "d8@ c #4A3021", "e8@ c #4E3725", "f8@ c #4C3223", "g8@ c #4C3221", "h8@ c #4F3325", "i8@ c #4F3423", "j8@ c #503321", "k8@ c #53331E", "l8@ c #59371E", "m8@ c #61401F", "n8@ c #65451F", "o8@ c #654421", "p8@ c #603F1C", "q8@ c #6C4F2D", "r8@ c #452A0C", "s8@ c #482E0D", "t8@ c #513714", "u8@ c #5D4320", "v8@ c #775D3A", "w8@ c #A58866", "x8@ c #BFA582", "y8@ c #A88E6D", "z8@ c #7D6445", "A8@ c #634B2F", "B8@ c #42301A", "C8@ c #251B0F", "D8@ c #4E463B", "E8@ c #B9CCC6", "F8@ c #B6B8B5", "G8@ c #A9AEAA", "H8@ c #AAACA9", "I8@ c #7F7F77", "J8@ c #75726B", "K8@ c #7B786F", "L8@ c #AEABA6", "M8@ c #B0ABA5", "N8@ c #C0B8AD", "O8@ c #392115", "P8@ c #34190E", "Q8@ c #4A2C21", "R8@ c #4D2B21", "S8@ c #472116", "T8@ c #52261B", "U8@ c #842F2C", "V8@ c #852D29", "W8@ c #852E27", "X8@ c #7F2B21", "Y8@ c #7E251D", "Z8@ c #8B2928", "`8@ c #8F2D2C", " 9@ c #902C2E", ".9@ c #8F2A2E", "+9@ c #8E292F", "@9@ c #85242B", "#9@ c #6D1815", "$9@ c #602016", "%9@ c #5F1F15", "&9@ c #611E15", "*9@ c #6E1817", "=9@ c #6B1715", "-9@ c #721B14", ";9@ c #5D2621", ">9@ c #48211C", ",9@ c #1B1209", "'9@ c #1C130A", ")9@ c #787063", "!9@ c #867B5F", "~9@ c #7B674C", "{9@ c #58341A", "]9@ c #3A0C00", "^9@ c #4D1904", "/9@ c #723523", "(9@ c #6E2618", "_9@ c #732318", ":9@ c #852C26", "<9@ c #7F1B1B", "[9@ c #882422", "}9@ c #881E20", "|9@ c #871D1F", "19@ c #871E22", "29@ c #821E20", "39@ c #7F1C1F", "49@ c #7B1B1D", "59@ c #781A1B", "69@ c #7B1C1A", "79@ c #782726", "89@ c #752325", "99@ c #742224", "09@ c #762428", "a9@ c #772720", "b9@ c #76261D", "c9@ c #7B2528", "d9@ c #7D2227", "e9@ c #7E2328", "f9@ c #832428", "g9@ c #8A2829", "h9@ c #6E2421", "i9@ c #6A2422", "j9@ c #672320", "k9@ c #642520", "l9@ c #652621", "m9@ c #67271E", "n9@ c #682E23", "o9@ c #673127", "p9@ c #552A21", "q9@ c #4B261D", "r9@ c #3A1C12", "s9@ c #442920", "t9@ c #37261C", "u9@ c #332524", "v9@ c #6D5F5F", "w9@ c #796D57", "x9@ c #62462E", "y9@ c #604226", "z9@ c #62514A", "A9@ c #716161", "B9@ c #8D8286", "C9@ c #928C90", "D9@ c #908D94", "E9@ c #9AA4A5", "F9@ c #9DA7A8", "G9@ c #B2B6C1", "H9@ c #BABECA", "I9@ c #B7BBC7", "J9@ c #B3B7C3", "K9@ c #B3B6C5", "L9@ c #BECBD4", "M9@ c #BCC9D2", "N9@ c #B4C5CF", "O9@ c #B2C3CD", "P9@ c #B6C7D1", "Q9@ c #B7C8D2", "R9@ c #B3C4CE", "S9@ c #B1C2CC", "T9@ c #B1C2CA", "U9@ c #A7B9BD", "V9@ c #A1B1B0", "W9@ c #C7D8D2", "X9@ c #CADFDA", "Y9@ c #A9C0BA", "Z9@ c #C4DDD7", "`9@ c #DDF6F0", " 0@ c #88A19B", ".0@ c #334A44", "+0@ c #10231F", "@0@ c #1C2A2A", "#0@ c #323C3B", "$0@ c #1F2427", "%0@ c #1B1C1E", "&0@ c #292428", "*0@ c #1C1819", "=0@ c #1A1511", "-0@ c #141007", ";0@ c #2B1D12", ">0@ c #352414", ",0@ c #7D6855", "'0@ c #B49C84", ")0@ c #947A63", "!0@ c #2C1B0B", "~0@ c #281F16", "{0@ c #2B2D22", "]0@ c #24271C", "^0@ c #141611", "/0@ c #111113", "(0@ c #100E0F", "_0@ c #3B2E1E", ":0@ c #463523", "<0@ c #4A3522", "[0@ c #4A391F", "}0@ c #4C381F", "|0@ c #49381E", "10@ c #47361C", "20@ c #433218", "30@ c #412F17", "40@ c #47351D", "50@ c #49351D", "60@ c #48341C", "70@ c #47331B", "80@ c #47311A", "90@ c #48321B", "00@ c #53341F", "a0@ c #51321D", "b0@ c #4F301B", "c0@ c #50311C", "d0@ c #52331E", "e0@ c #4B301D", "f0@ c #4F341F", "g0@ c #51301F", "h0@ c #553520", "i0@ c #614628", "j0@ c #4E3316", "k0@ c #492B0F", "l0@ c #4D2F13", "m0@ c #523418", "n0@ c #4B2C0F", "o0@ c #5A3C18", "p0@ c #644620", "q0@ c #6A4C26", "r0@ c #73552F", "s0@ c #8E704A", "t0@ c #A0845D", "u0@ c #8A704D", "v0@ c #5F4829", "w0@ c #3A2A11", "x0@ c #2F240E", "y0@ c #2B2411", "z0@ c #56584D", "A0@ c #818783", "B0@ c #BECFC9", "C0@ c #B5B6B8", "D0@ c #ACAEA9", "E0@ c #77776F", "F0@ c #706D64", "G0@ c #7D7B6F", "H0@ c #B7ADAB", "I0@ c #B4AA9E", "J0@ c #BCB0A2", "K0@ c #170000", "L0@ c #2D1105", "M0@ c #331105", "N0@ c #3F190E", "O0@ c #61352C", "P0@ c #56241B", "Q0@ c #60271E", "R0@ c #692A23", "S0@ c #753029", "T0@ c #7E332E", "U0@ c #86312E", "V0@ c #882E2D", "W0@ c #882F2B", "X0@ c #912E31", "Y0@ c #902D32", "Z0@ c #902B31", "`0@ c #8E2A32", " a@ c #8B272F", ".a@ c #88242C", "+a@ c #84232A", "@a@ c #812226", "#a@ c #671A14", "$a@ c #801F18", "%a@ c #51241E", "&a@ c #48231B", "*a@ c #191007", "=a@ c #756D60", "-a@ c #949790", ";a@ c #929489", ">a@ c #929486", ",a@ c #9E9985", "'a@ c #979179", ")a@ c #887D61", "!a@ c #6F5B40", "~a@ c #4A2711", "{a@ c #491C09", "]a@ c #561E0F", "^a@ c #812824", "/a@ c #841D1E", "(a@ c #872021", "_a@ c #8E2124", ":a@ c #861E1F", "b@ c #141412", ",b@ c #292116", "'b@ c #3C2C1C", ")b@ c #402F1D", "!b@ c #412F1B", "~b@ c #4A2F1E", "{b@ c #4B301F", "]b@ c #4D3123", "^b@ c #503524", "/b@ c #4F3620", "(b@ c #50381E", "_b@ c #4D3A1C", ":b@ c #4C371A", "c@ c #702D27", ",c@ c #872D2D", "'c@ c #872927", ")c@ c #8C2B32", "!c@ c #8C2B34", "~c@ c #8F2E37", "{c@ c #902F38", "]c@ c #922E38", "^c@ c #8D2C35", "/c@ c #892831", "(c@ c #86252C", "_c@ c #6B1611", ":c@ c #701814", "d@ c #404443", ",d@ c #353535", "'d@ c #303030", ")d@ c #31302E", "!d@ c #211E15", "~d@ c #221B11", "{d@ c #77634B", "]d@ c #614B34", "^d@ c #3E2D1B", "/d@ c #1E1E1C", "(d@ c #1E201D", "_d@ c #231C14", ":d@ c #3D2A19", "e@ c #B9AFA6", ",e@ c #D0BEAA", "'e@ c #D0BEA8", ")e@ c #92806A", "!e@ c #220E00", "~e@ c #2F1602", "{e@ c #442312", "]e@ c #4D2617", "^e@ c #532518", "/e@ c #5A261B", "(e@ c #6F2C26", "_e@ c #742A27", ":e@ c #792B29", "f@ c #4B645E", ",f@ c #1C332D", "'f@ c #213832", ")f@ c #607570", "!f@ c #6B7E7A", "~f@ c #51615E", "{f@ c #556461", "]f@ c #3F4A46", "^f@ c #2C3532", "/f@ c #3A403E", "(f@ c #474B4A", "_f@ c #383838", ":f@ c #313131", "g@ c #79756A", ",g@ c #858176", "'g@ c #B2AAA7", ")g@ c #AFABA2", "!g@ c #BFAE9C", "~g@ c #CAB7A6", "{g@ c #A08B76", "]g@ c #5C4732", "^g@ c #2D1901", "/g@ c #2E1801", "(g@ c #412210", "_g@ c #4B2717", ":g@ c #512A1B", "h@ c #382819", ",h@ c #472E18", "'h@ c #4A3019", ")h@ c #4D311B", "!h@ c #53351D", "~h@ c #613C29", "{h@ c #64412D", "]h@ c #65402D", "^h@ c #63402A", "/h@ c #613E28", "(h@ c #513618", "_h@ c #55381A", ":h@ c #5A4324", "i@ c #8D2B38", ",i@ c #8F2E39", "'i@ c #8A2932", ")i@ c #882730", "!i@ c #89282F", "~i@ c #701912", "{i@ c #6F2E28", "]i@ c #642D28", "^i@ c #522720", "/i@ c #45221C", "(i@ c #120B01", "_i@ c #615B4D", ":i@ c #B9B3A5", "j@ c #69432C", ",j@ c #674329", "'j@ c #644026", ")j@ c #56371A", "!j@ c #58391A", "~j@ c #563919", "{j@ c #5F4222", "]j@ c #594222", "^j@ c #4B3617", "/j@ c #493417", "(j@ c #4C3418", "_j@ c #4A3218", ":j@ c #50361D", "k@ c #8D2D38", ",k@ c #8C2C38", "'k@ c #8D2D39", ")k@ c #8E2E3A", "!k@ c #8A2B33", "~k@ c #8A2E2F", "{k@ c #6C1915", "]k@ c #6B2C25", "^k@ c #5F2A24", "/k@ c #332822", "(k@ c #110A00", "_k@ c #D8D2C2", ":k@ c #93948E", "l@ c #644125", ",l@ c #5E3B1D", "'l@ c #5B381A", ")l@ c #593B19", "!l@ c #5F3E1D", "~l@ c #4B3317", "{l@ c #4E3419", "]l@ c #50351A", "^l@ c #56361F", "/l@ c #5C3923", "(l@ c #663D29", "_l@ c #693E2B", ":l@ c #693F29", "m@ c #6D3129", ",m@ c #76332D", "'m@ c #7C322F", ")m@ c #7E302E", "!m@ c #8C2D33", "~m@ c #8E2F37", "{m@ c #8B2B37", "]m@ c #8B2B36", "^m@ c #8B2C34", "/m@ c #8D2E32", "(m@ c #61241F", "_m@ c #0F0800", ":m@ c #544E40", "n@ c #663C23", ",n@ c #6E442B", "'n@ c #72492D", ")n@ c #734A2E", "!n@ c #714A2D", "~n@ c #6E472A", "{n@ c #6A4626", "]n@ c #623E1E", "^n@ c #5F3B1B", "/n@ c #603D1D", "(n@ c #5D3C1B", "_n@ c #644322", ":n@ c #4F3618", "o@ c #AAA89B", ",o@ c #C6BDAE", "'o@ c #B9AD9D", ")o@ c #3B2517", "!o@ c #301607", "~o@ c #2F1305", "{o@ c #402313", "]o@ c #4C2B1C", "^o@ c #5B3123", "/o@ c #5E3023", "(o@ c #6D322A", "_o@ c #76352F", ":o@ c #7D3632", "p@ c #3F2C1D", ",p@ c #432E1D", "'p@ c #3F2816", ")p@ c #462D17", "!p@ c #634020", "~p@ c #684424", "{p@ c #6B4425", "]p@ c #6B4224", "^p@ c #693D22", "/p@ c #6D4124", "(p@ c #72462B", "_p@ c #764A2D", ":p@ c #764D2F", "q@ c #758899", ",q@ c #7B8E9D", "'q@ c #8699AA", ")q@ c #90A3B2", "!q@ c #9CADBF", "~q@ c #A7B8C8", "{q@ c #A0AFC2", "]q@ c #A2B2C2", "^q@ c #A5B4C7", "/q@ c #A8B8C8", "(q@ c #ACB9CC", "_q@ c #ACB9CA", ":q@ c #ABB8CB", "r@ c #586659", ",r@ c #2B372D", "'r@ c #1D291F", ")r@ c #0D190F", "!r@ c #252F26", "~r@ c #4A514A", "{r@ c #484D47", "]r@ c #4F5450", "^r@ c #414340", "/r@ c #353336", "(r@ c #302E31", "_r@ c #272528", ":r@ c #212123", "s@ c #2E282C", ",s@ c #2C2930", "'s@ c #2A2A34", ")s@ c #292B38", "!s@ c #292D39", "~s@ c #1E222D", "{s@ c #262D35", "]s@ c #4E555D", "^s@ c #8C959C", "/s@ c #8C959E", "(s@ c #343E47", "_s@ c #020F18", ":s@ c #26333C", "t@ c #44231A", ",t@ c #412319", "'t@ c #3F2318", ")t@ c #39201B", "!t@ c #2D1E17", "~t@ c #201913", "{t@ c #8A7E72", "]t@ c #6D5F5C", "^t@ c #7D7477", "/t@ c #827B82", "(t@ c #89848B", "_t@ c #959597", ":t@ c #9E9EA0", "u@ c #8E6338", ",u@ c #91643A", "'u@ c #92673C", ")u@ c #8B6035", "!u@ c #895E33", "~u@ c #85582E", "{u@ c #794C25", "]u@ c #70421E", "^u@ c #6D411E", "/u@ c #653F1B", "(u@ c #5A3918", "_u@ c #352D1A", ":u@ c #2A2416", "v@ c #7C2327", ",v@ c #7A2329", "'v@ c #702520", ")v@ c #6F2526", "!v@ c #6F2428", "~v@ c #6E2327", "{v@ c #6C2427", "]v@ c #6B2326", "^v@ c #692325", "/v@ c #672324", "(v@ c #642424", "_v@ c #5D2623", ":v@ c #592622", "w@ c #996A40", ",w@ c #97683E", "'w@ c #926337", ")w@ c #8F6036", "!w@ c #8E5F33", "~w@ c #895A2E", "{w@ c #8A5E31", "]w@ c #8D6134", "^w@ c #95663A", "/w@ c #996D40", "(w@ c #9A6B3F", "_w@ c #926639", ":w@ c #97683C", "x@ c #8B3035", ",x@ c #8D3239", "'x@ c #8F343D", ")x@ c #8F333E", "!x@ c #8D313E", "~x@ c #8A2E3D", "{x@ c #8E3143", "]x@ c #8E3241", "^x@ c #8C303D", "/x@ c #8B2F3A", "(x@ c #892E37", "_x@ c #6D1811", ":x@ c #711917", "y@ c #603F20", ",y@ c #5F411D", "'y@ c #63421F", ")y@ c #5D3B18", "!y@ c #5F3817", "~y@ c #6A421F", "{y@ c #825433", "]y@ c #8A5939", "^y@ c #905F3E", "/y@ c #90603C", "(y@ c #93633D", "_y@ c #8C5C36", ":y@ c #82522C", "z@ c #612B29", ",z@ c #6B2F2F", "'z@ c #743435", ")z@ c #773330", "!z@ c #79342F", "~z@ c #7D322F", "{z@ c #913538", "]z@ c #8D3237", "^z@ c #8F343B", "/z@ c #91363F", "(z@ c #913540", "_z@ c #8C2F41", ":z@ c #8C303F", "A@ c #724B2C", ",A@ c #714A2B", "'A@ c #754E31", ")A@ c #775235", "!A@ c #634024", "~A@ c #633F25", "{A@ c #613E20", "]A@ c #614021", "^A@ c #634221", "/A@ c #664524", "(A@ c #674522", "_A@ c #63411C", ":A@ c #66401C", "B@ c #B4C0D0", ",B@ c #B7C3CF", "'B@ c #B6C2CE", ")B@ c #B4C0CC", "!B@ c #6F6B68", "~B@ c #7C7773", "{B@ c #B0AD9E", "]B@ c #B5A897", "^B@ c #7E7361", "/B@ c #261909", "(B@ c #2D1A0C", "_B@ c #3C2116", ":B@ c #522923", "C@ c #5A6350", ",C@ c #6B735E", "'C@ c #5B634C", ")C@ c #383D26", "!C@ c #343923", "~C@ c #262918", "{C@ c #393B2D", "]C@ c #222021", "^C@ c #231E22", "/C@ c #201B21", "(C@ c #241F23", "_C@ c #242321", ":C@ c #131512", "D@ c #C5E1E4", ",D@ c #ABC5D2", "'D@ c #AAC3D7", ")D@ c #ACC2D7", "!D@ c #A7BDD2", "~D@ c #BED4E9", "{D@ c #C7DCF1", "]D@ c #B6CBE0", "^D@ c #95A7BD", "/D@ c #8698AE", "(D@ c #7C8EA4", "_D@ c #7F91A7", ":D@ c #90A0B7", "E@ c #A6BBC0", ",E@ c #A2B6B7", "'E@ c #889898", ")E@ c #8D9D9A", "!E@ c #8E9E94", "~E@ c #A6B2A6", "{E@ c #94A190", "]E@ c #6C7564", "^E@ c #5E6754", "/E@ c #676F58", "(E@ c #454A33", "_E@ c #1A1F08", ":E@ c #1E230C", "F@ c #ADC7D8", ",F@ c #A8C2D3", "'F@ c #A2B9CB", ")F@ c #ABC2D4", "!F@ c #B8CDE0", "~F@ c #B4C9DC", "{F@ c #AFC4D7", "]F@ c #A0B5C8", "^F@ c #95A7BB", "/F@ c #8FA1B5", "(F@ c #8899AD", "_F@ c #8596AA", ":F@ c #94A5B9", "G@ c #9BAEB2", ",G@ c #A7BABE", "'G@ c #ABBEC2", ")G@ c #A8BDC0", "!G@ c #B1C6C9", "~G@ c #BED3D6", "{G@ c #9BAFB0", "]G@ c #8C9E9E", "^G@ c #829591", "/G@ c #80918B", "(G@ c #A8B8AE", "_G@ c #B9C9BE", ":G@ c #94A293", "H@ c #B6D0CD", ",H@ c #E2FCFD", "'H@ c #DAF2FC", ")H@ c #BDD4E2", "!H@ c #B2C9D7", "~H@ c #B7CEDC", "{H@ c #B2C8D6", "]H@ c #AEC4D2", "^H@ c #B2C5D6", "/H@ c #B1C4D5", "(H@ c #C6D9EA", "_H@ c #B4C7D8", ":H@ c #A6B8CC", "I@ c #361D18", ",I@ c #311D16", "'I@ c #BCB2B1", ")I@ c #A89CA0", "!I@ c #A39499", "~I@ c #B7A8AB", "{I@ c #5C4130", "]I@ c #5C4235", "^I@ c #59423A", "/I@ c #695554", "(I@ c #857F83", "_I@ c #8C8688", ":I@ c #908E8F", "J@ c #D4A067", ",J@ c #CA965D", "'J@ c #C08B55", ")J@ c #C6915B", "!J@ c #B27A47", "~J@ c #C8905D", "{J@ c #C28A59", "]J@ c #B8804F", "^J@ c #C58D5E", "/J@ c #C1895A", "(J@ c #B47C4D", "_J@ c #B78354", ":J@ c #A77948", "K@ c #601915", ",K@ c #5E1713", "'K@ c #611716", ")K@ c #5F1814", "!K@ c #621815", "~K@ c #621B19", "{K@ c #641D1B", "]K@ c #611714", "^K@ c #681A18", "/K@ c #67221B", "(K@ c #62231C", "_K@ c #54251D", ":K@ c #4C241C", "L@ c #443319", ",L@ c #5E4A25", "'L@ c #62502C", ")L@ c #5B4923", "!L@ c #5C461F", "~L@ c #5C451B", "{L@ c #5C431B", "]L@ c #5E451C", "^L@ c #5F431B", "/L@ c #5B3D17", "(L@ c #583811", "_L@ c #6D4B26", ":L@ c #754F2B", "M@ c #99A8BD", ",M@ c #8392A7", "'M@ c #8B9AAF", ")M@ c #A4B4C4", "!M@ c #A7B7C6", "~M@ c #A5B5C4", "{M@ c #A0B0BF", "]M@ c #A1B1C0", "^M@ c #AABAC7", "/M@ c #C9DBDD", "(M@ c #C9DBDB", "_M@ c #C7D9D9", ":M@ c #C7D4DC", "N@ c #5B4039", ",N@ c #644B47", "'N@ c #6F5A59", ")N@ c #7E7576", "!N@ c #8B8283", "~N@ c #949091", "{N@ c #999B9A", "]N@ c #CAD2DD", "^N@ c #B1C3C3", "/N@ c #ADC1BF", "(N@ c #97ABA9", "_N@ c #8DA49E", ":N@ c #8DA3A0", "O@ c #343226", ",O@ c #1B2019", "'O@ c #222922", ")O@ c #1D271F", "!O@ c #45504A", "~O@ c #3D4945", "{O@ c #5A6A67", "]O@ c #435652", "^O@ c #3A4D49", "/O@ c #768987", "(O@ c #E4F6F6", "_O@ c #ECFCFC", ":O@ c #ECFBFE", "P@ c #756C6D", ",P@ c #867D7E", "'P@ c #CBD3DE", ")P@ c #B1C4C2", "!P@ c #A7BAB8", "~P@ c #99ACAA", "{P@ c #8FA29E", "]P@ c #5C6F6B", "^P@ c #687D76", "/P@ c #768B84", "(P@ c #7C918A", "_P@ c #7B928A", ":P@ c #7C9389", "Q@ c #FAC591", ",Q@ c #F3BE8A", "'Q@ c #FBC692", ")Q@ c #E2AD77", "!Q@ c #C48F59", "~Q@ c #8C5924", "{Q@ c #6D3B0A", "]Q@ c #7A4B1D", "^Q@ c #896034", "/Q@ c #835D36", "(Q@ c #795835", "_Q@ c #76593B", ":Q@ c #422E16", "R@ c #8D2B2A", ",R@ c #732C28", "'R@ c #722D28", ")R@ c #732F2C", "!R@ c #71302C", "~R@ c #6D2C28", "{R@ c #5A2B25", "]R@ c #532A24", "^R@ c #472921", "/R@ c #36251D", "(R@ c #20150F", "_R@ c #1A0F0B", ":R@ c #493E3C", "S@ c #BA7D51", ",S@ c #AE7645", "'S@ c #B7824C", ")S@ c #BE8953", "!S@ c #C28D57", "~S@ c #D7A26E", "{S@ c #DEAB76", "]S@ c #CB9964", "^S@ c #E7B884", "/S@ c #D9AA76", "(S@ c #C89965", "_S@ c #C49662", ":S@ c #D0A26E", "T@ c #661D17", ",T@ c #631815", "'T@ c #69201A", ")T@ c #392725", "!T@ c #372B2B", "~T@ c #CECBBA", "{T@ c #BFB9AB", "]T@ c #7C6A54", "^T@ c #735942", "/T@ c #331100", "(T@ c #401800", "_T@ c #53200D", ":T@ c #612618", "U@ c #714C32", ",U@ c #6C472D", "'U@ c #623A21", ")U@ c #653B23", "!U@ c #70462E", "~U@ c #683E26", "{U@ c #5B2E17", "]U@ c #582E15", "^U@ c #61381A", "/U@ c #613818", "(U@ c #633B18", "_U@ c #653D1A", ":U@ c #66401B", "V@ c #200F00", ",V@ c #2B1809", "'V@ c #271103", ")V@ c #341D0F", "!V@ c #502423", "~V@ c #653336", "{V@ c #7A4346", "]V@ c #814449", "^V@ c #864448", "/V@ c #8A4246", "(V@ c #8B3F43", "_V@ c #8C373A", ":V@ c #933A3C", "W@ c #4C392B", ",W@ c #4E321A", "'W@ c #51331B", ")W@ c #4F331B", "!W@ c #49301A", "~W@ c #422A12", "{W@ c #58361D", "]W@ c #5E3A22", "^W@ c #69452D", "/W@ c #522C15", "(W@ c #553016", "_W@ c #5C3818", ":W@ c #5F3915", "X@ c #C9D7E2", ",X@ c #A5A5A3", "'X@ c #8D8C88", ")X@ c #6A6762", "!X@ c #797671", "~X@ c #AFABA0", "{X@ c #978A7A", "]X@ c #5E4E3F", "^X@ c #2E1B0C", "/X@ c #2D1A0B", "(X@ c #3D1F14", "_X@ c #3F1F14", ":X@ c #4D261F", "Y@ c #363D2B", ",Y@ c #383B30", "'Y@ c #333132", ")Y@ c #232126", "!Y@ c #16131A", "~Y@ c #38353C", "{Y@ c #272727", "]Y@ c #121315", "^Y@ c #0F1110", "/Y@ c #151618", "(Y@ c #141517", "_Y@ c #231F14", ":Y@ c #4C3219", "Z@ c #C3D0E0", ",Z@ c #C5D2E3", "'Z@ c #B9C6D7", ")Z@ c #B7C4D5", "!Z@ c #BAC7D8", "~Z@ c #CAD8E3", "{Z@ c #CBD9E2", "]Z@ c #A6A7A2", "^Z@ c #83827E", "/Z@ c #6F6C67", "(Z@ c #67645F", "_Z@ c #B3AFA3", ":Z@ c #C1BBAD", "`@ c #6B6F61", ",`@ c #5A5E4F", "'`@ c #4A4C3E", ")`@ c #47493B", "!`@ c #4B4C3E", "~`@ c #494B3D", "{`@ c #484F3F", "]`@ c #3F4837", "^`@ c #373E2E", "/`@ c #333A2A", "(`@ c #343B2B", "_`@ c #323929", ":`@ c #2F3324", "<`@ c #2A2E20", "[`@ c #272725", "}`@ c #26252A", "|`@ c #25242A", "1`@ c #242329", "2`@ c #0D1311", "3`@ c #0C120E", "4`@ c #0B110F", "5`@ c #0E1412", "6`@ c #131917", "7`@ c #121615", "8`@ c #242618", "9`@ c #3F3323", "0`@ c #473622", "a`@ c #55432D", "b`@ c #483016", "c`@ c #473217", "d`@ c #412F19", "e`@ c #3B2913", "f`@ c #44321A", "g`@ c #45341A", "h`@ c #48371D", "i`@ c #49351C", "j`@ c #4D371F", "k`@ c #50361B", "l`@ c #503615", "m`@ c #523813", "n`@ c #543B13", "o`@ c #553C14", "p`@ c #573E15", "q`@ c #5A4118", "r`@ c #5F471B", "s`@ c #654A1D", "t`@ c #6F5022", "u`@ c #704F22", "v`@ c #704B1E", "w`@ c #7A5425", "x`@ c #906538", "y`@ c #946539", "z`@ c #8F5F31", "A`@ c #996535", "B`@ c #AA6C3B", "C`@ c #AF703B", "D`@ c #B67742", "E`@ c #CA8D57", "F`@ c #DDA16B", "G`@ c #D8A169", "H`@ c #D9A46E", "I`@ c #E8B981", "J`@ c #E2B780", "K`@ c #E9C088", "L`@ c #EEC790", "M`@ c #F2CD96", "N`@ c #FFE2AA", "O`@ c #FFEEB6", "P`@ c #FFE5A7", "Q`@ c #DAAE67", "R`@ c #CF9F53", "S`@ c #C8984C", "T`@ c #D7A95C", "U`@ c #E3B46C", "V`@ c #FBCF88", "W`@ c #E6BA73", "X`@ c #FDD28D", "Y`@ c #F4C985", "Z`@ c #F7CE8C", "``@ c #F0C785", " # c #EDC484", ". # c #FFEEAE", "+ # c #FFF2B2", "@ # c #E2B574", "# # c #C48D4C", "$ # c #CD9152", "% # c #E2A869", "& # c #EDB77B", "* # c #CD9A61", "= # c #784E1E", "- # c #7A5529", "; # c #4B371E", "> # c #453F31", ", # c #3D392D", "' # c #253127", ") # c #283229", "! # c #29352B", "~ # c #2D372E", "{ # c #2E3931", "] # c #303A32", "^ # c #303B35", "/ # c #49524D", "( # c #7C8781", "_ # c #F6FFFC", ": # c #E0EBE7", "< # c #D8E1DE", "[ # c #CBD8E1", "} # c #CDDAE3", "| # c #D1DDE9", "1 # c #D3DFEB", "2 # c #D3DFED", "3 # c #D2DEEC", "4 # c #C6D2E2", "5 # c #C9D5E5", "6 # c #CFDBEB", "7 # c #CBD6E8", "8 # c #C9D4E6", "9 # c #C7D2E6", "0 # c #BBC6D8", "a # c #C1CFDA", "b # c #9C9D98", "c # c #7E7B74", "d # c #B5B0AA", "e # c #B8B2A6", "f # c #C2BCAE", "g # c #C4BEAE", "h # c #776B5D", "i # c #291608", "j # c #391D12", "k # c #3B1D13", "l # c #451D15", "m # c #5C2F29", "n # c #723A39", "o # c #88474B", "p # c #894449", "q # c #8C4044", "r # c #8E3E41", "s # c #903B3E", "t # c #923C3D", "u # c #943C3B", "v # c #953D3C", "w # c #983E40", "x # c #8F3439", "y # c #8A2F34", "z # c #96424F", "A # c #944250", "B # c #8F3E4D", "C # c #924150", "D # c #8D3F4D", "E # c #893B49", "F # c #893946", "G # c #8C3C49", "H # c #903C49", "I # c #81262B", "J # c #5C1712", "K # c #5B1611", "L # c #151307", "M # c #757263", "N # c #CFCCBD", "O # c #9E9F8D", "P # c #93917A", "Q # c #84755E", "R # c #736149", "S # c #462712", "T # c #411804", "U # c #89302C", "V # c #8F302E", "W # c #4D271E", "X # c #341F1A", "Y # c #301D19", "Z # c #301E1A", "` # c #2E2321", " .# c #BDAFAF", "..# c #948D7B", "+.# c #685739", "@.# c #624E45", "#.# c #6D5A54", "$.# c #746260", "%.# c #7D6D6E", "&.# c #8E8286", "*.# c #A1969E", "=.# c #9C949F", "-.# c #D9E5E1", ";.# c #B3C0B9", ">.# c #6F7B77", ",.# c #73827B", "'.# c #4F6155", ").# c #516657", "!.# c #556759", "~.# c #546658", "{.# c #546457", "].# c #5D695B", "^.# c #606B5D", "/.# c #586051", "(.# c #5F6557", "_.# c #5C5E50", ":.# c #4A4B3D", "<.# c #414234", "[.# c #49473A", "}.# c #504E41", "|.# c #4E4F41", "1.# c #464A3B", "2.# c #3B4133", "3.# c #323628", "4.# c #2A3022", "5.# c #2B2F21", "6.# c #272A1F", "7.# c #252722", "8.# c #282828", "9.# c #28282A", "0.# c #27262B", "a.# c #26252B", "b.# c #282826", "c.# c #101012", "d.# c #0E0E10", "e.# c #0E150E", "f.# c #0D140D", "g.# c #0C130C", "h.# c #0F160F", "i.# c #101710", "j.# c #131A13", "k.# c #141B14", "l.# c #1B1D18", "m.# c #232615", "n.# c #242213", "o.# c #2F2615", "p.# c #463116", "q.# c #3B2B14", "r.# c #423018", "s.# c #433319", "t.# c #4B3412", "u.# c #4E3610", "v.# c #503812", "w.# c #513A11", "x.# c #523B12", "y.# c #553E14", "z.# c #594218", "A.# c #5E461A", "B.# c #6E5326", "C.# c #6D5122", "D.# c #69481B", "E.# c #734E21", "F.# c #875E32", "G.# c #875C2F", "H.# c #7F5326", "I.# c #885526", "J.# c #AD713F", "K.# c #B1723D", "L.# c #B57842", "M.# c #D39761", "N.# c #E7B078", "O.# c #E9B57C", "P.# c #E9B87E", "Q.# c #FFF0B5", "R.# c #FFDA9E", "S.# c #EAC287", "T.# c #D9B277", "U.# c #D9B579", "V.# c #F2D091", "W.# c #FFE3A6", "X.# c #FFDE9D", "Y.# c #E1B56C", "Z.# c #DDAC60", "`.# c #CA994D", " +# c #C7974B", ".+# c #CE9E54", "++# c #EBBC74", "@+# c #FFD28C", "#+# c #BF924E", "$+# c #A67B37", "%+# c #B18544", "&+# c #C59C5A", "*+# c #CBA262", "=+# c #E2B979", "-+# c #E9C281", ";+# c #CB9F5E", ">+# c #C89252", ",+# c #C79050", "'+# c #CD9558", ")+# c #CC985E", "!+# c #B3824A", "~+# c #8C5E2A", "{+# c #794F1F", "]+# c #7B562A", "^+# c #65451E", "/+# c #41311A", "(+# c #413B2F", "_+# c #312E25", ":+# c #242B23", "<+# c #232D24", "[+# c #242E25", "}+# c #263027", "|+# c #29332A", "1+# c #2B352D", "2+# c #050F07", "3+# c #58625A", "4+# c #E3ECE7", "5+# c #F9FFFB", "6+# c #E8F1EC", "7+# c #D3E0E8", "8+# c #D9E5F1", "9+# c #D0DCEA", "0+# c #D4E0EE", "a+# c #D2DEEE", "b+# c #D0DBED", "c+# c #9A9C99", "d+# c #85847F", "e+# c #737069", "f+# c #B2AEA5", "g+# c #BCB4A7", "h+# c #BFBCAB", "i+# c #72695A", "j+# c #231103", "k+# c #2A1407", "l+# c #371B10", "m+# c #33150B", "n+# c #341209", "o+# c #401A11", "p+# c #65302C", "q+# c #6A3231", "r+# c #793D3D", "s+# c #894145", "t+# c #8B4044", "u+# c #8E3F44", "v+# c #903E40", "w+# c #933D3E", "x+# c #933D3C", "y+# c #943C3A", "z+# c #953B3D", "A+# c #8C3136", "B+# c #964452", "C+# c #934251", "D+# c #8E404E", "E+# c #904252", "F+# c #8E4151", "G+# c #8B3D4D", "H+# c #883A48", "I+# c #974754", "J+# c #944451", "K+# c #8C3845", "L+# c #83282D", "M+# c #5A1913", "N+# c #591D15", "O+# c #53241C", "P+# c #2F2B2A", "Q+# c #16130A", "R+# c #C3C0B1", "S+# c #999A8A", "T+# c #9D9F8A", "U+# c #918F76", "V+# c #817359", "W+# c #624831", "X+# c #442510", "Y+# c #401705", "Z+# c #8A312D", "`+# c #781B16", " @# c #841E1A", ".@# c #69221C", "+@# c #65221C", "@@# c #5B241D", "#@# c #52211A", "$@# c #40251C", "%@# c #3C261B", "&@# c #3B251A", "*@# c #36221B", "=@# c #351D19", "-@# c #301B16", ";@# c #1D1311", ">@# c #473D3B", ",@# c #7A6B54", "'@# c #6D5E41", ")@# c #513726", "!@# c #563F31", "~@# c #61493F", "{@# c #68514B", "]@# c #695652", "^@# c #736062", "/@# c #87787D", "(@# c #9C8F98", "_@# c #9C929D", ":@# c #9B95A1", "<@# c #E4F1EA", "[@# c #AEBBB2", "}@# c #56635C", "|@# c #6E7B72", "1@# c #67776C", "2@# c #637567", "3@# c #607063", "4@# c #5F6D60", "5@# c #5D6B5C", "6@# c #5D685A", "7@# c #5F675A", "8@# c #53594B", "9@# c #3D3E30", "0@# c #4C483C", "a@# c #514E3F", "b@# c #4C4A3D", "c@# c #424437", "d@# c #373A2F", "e@# c #2C2E23", "f@# c #29292B", "g@# c #29282D", "h@# c #292929", "i@# c #2A2A28", "j@# c #10120D", "k@# c #10150E", "l@# c #131811", "m@# c #151A13", "n@# c #161B14", "o@# c #242513", "p@# c #3C2C15", "q@# c #4F371D", "r@# c #493115", "s@# c #412C19", "t@# c #3D2B15", "u@# c #423117", "v@# c #463219", "w@# c #453118", "x@# c #432F16", "y@# c #4B3414", "z@# c #4E3612", "A@# c #4F3914", "B@# c #4F3912", "C@# c #503A13", "D@# c #513B12", "E@# c #563F16", "F@# c #6C5126", "G@# c #6B4E22", "H@# c #66451A", "I@# c #6D4B1E", "J@# c #7F582D", "K@# c #7F5429", "L@# c #774A20", "M@# c #804D20", "N@# c #A76B39", "O@# c #B87944", "P@# c #A86B35", "Q@# c #CF935D", "R@# c #F7C088", "S@# c #F3BF86", "T@# c #DCAB70", "U@# c #FFD99D", "V@# c #FFE0A2", "W@# c #FFE5A4", "X@# c #FFE9A8", "Y@# c #FFF2B0", "Z@# c #FFF4AF", "`@# c #FFE19E", " ## c #EAC57F", ".## c #D9A961", "+## c #ECB86D", "@## c #DDA960", "### c #CA984F", "$## c #CD9B54", "%## c #EFBF77", "&## c #FFD590", "*## c #DDAE68", "=## c #BB8E4A", "-## c #A87D39", ";## c #B68A49", ">## c #CCA05F", ",## c #CFA666", "'## c #DBB272", ")## c #D9B173", "!## c #C09455", "~## c #BC8A4B", "{## c #B78347", "]## c #B37F45", "^## c #AB7A40", "/## c #9D6E38", "(## c #8A5E2D", "_## c #7D5426", ":## c #755228", "<## c #664620", "[## c #453116", "}## c #402E16", "|## c #261D16", "1## c #483829", "2## c #433D31", "3## c #3E3C30", "4## c #2B2C24", "5## c #252C24", "6## c #262D25", "7## c #272E26", "8## c #2C332B", "9## c #545B53", "0## c #E9F0E8", "a## c #F8FFF8", "b## c #D8E3DD", "c## c #D4E0DC", "d## c #D0DCDA", "e## c #D7E1ED", "f## c #D8E1F0", "g## c #DAE3F2", "h## c #D7E0F1", "i## c #D5DDE0", "j## c #868580", "k## c #B6B2A7", "l## c #C6C1AE", "m## c #342B1A", "n## c #241707", "o## c #231002", "p## c #351D11", "q## c #402218", "r## c #3B1910", "s## c #4D221B", "t## c #58261F", "u## c #6A302C", "v## c #6E3432", "w## c #753939", "x## c #804041", "y## c #854345", "z## c #874044", "A## c #8F3E44", "B## c #924042", "C## c #953F40", "D## c #963E3D", "E## c #953B3A", "F## c #943A39", "G## c #95424C", "H## c #974553", "I## c #944352", "J## c #8E4050", "K## c #8E4153", "L## c #8F4556", "M## c #8D4052", "N## c #893C4C", "O## c #934656", "P## c #A15363", "Q## c #994B5B", "R## c #883644", "S## c #661712", "T## c #671813", "U## c #52231B", "V## c #472019", "W## c #312D2C", "X## c #7B776B", "Y## c #989989", "Z## c #93937B", "`## c #8F8D74", " $# c #421907", ".$# c #632018", "+$# c #5C231C", "@$# c #462820", "#$# c #3D251B", "$$# c #39221C", "%$# c #321A16", "&$# c #311915", "*$# c #342522", "=$# c #261C1A", "-$# c #3E3432", ";$# c #756767", ">$# c #C9BBBB", ",$# c #76664D", "'$# c #6B573C", ")$# c #5B4321", "!$# c #533825", "~$# c #5B4035", "{$# c #604740", "]$# c #806F77", "^$# c #92858F", "/$# c #9B919C", "($# c #C8D4D0", "_$# c #C6D3CC", ":$# c #BDCAC1", "<$# c #C5D2C9", "[$# c #8E9B92", "}$# c #4B584F", "|$# c #667369", "1$# c #849187", "2$# c #7A887B", "3$# c #748074", "4$# c #737F73", "5$# c #727C71", "6$# c #667163", "7$# c #575F52", "8$# c #4C5246", "9$# c #3C3F34", "0$# c #404235", "a$# c #404034", "b$# c #403E31", "c$# c #444235", "d$# c #4A463A", "e$# c #3C3A2D", "f$# c #3A3A30", "g$# c #32332B", "h$# c #2B2B2B", "i$# c #2C2C2E", "j$# c #2C2C2A", "k$# c #141011", "l$# c #181413", "m$# c #171314", "n$# c #161213", "o$# c #111109", "p$# c #111107", "q$# c #121208", "r$# c #131309", "s$# c #271D14", "t$# c #281E15", "u$# c #2A2512", "v$# c #2D2614", "w$# c #3E2C16", "x$# c #422D18", "y$# c #412B14", "z$# c #462C15", "A$# c #4D3119", "B$# c #503218", "C$# c #4B2D13", "D$# c #4E3016", "E$# c #4F3117", "F$# c #4F3119", "G$# c #4C301B", "H$# c #492E1B", "I$# c #472C19", "J$# c #452C18", "K$# c #452C16", "L$# c #462E16", "M$# c #472F17", "N$# c #543A19", "O$# c #533B17", "P$# c #533916", "Q$# c #543A15", "R$# c #573D18", "S$# c #5B3F18", "T$# c #63461E", "U$# c #694920", "V$# c #69461E", "W$# c #704B21", "X$# c #7E522B", "Y$# c #7B4E25", "Z$# c #7A4A22", "`$# c #875429", " %# c #995D2B", ".%# c #AE713B", "+%# c #AC6F39", "@%# c #AC703A", "#%# c #D29962", "$%# c #F6BF86", "%%# c #E8B47A", "&%# c #CA9A5C", "*%# c #EDC07F", "=%# c #FFD594", "-%# c #FFE09B", ";%# c #FFDF98", ">%# c #FFE39C", ",%# c #FFE197", "'%# c #EECC82", ")%# c #DFB970", "!%# c #C08E45", "~%# c #EAB46C", "{%# c #ECB66E", "]%# c #DBA75E", "^%# c #D19C56", "/%# c #E1AF6A", "(%# c #FBC984", "_%# c #E8B774", ":%# c #DFAF6D", "<%# c #D6A968", "[%# c #CFA261", "}%# c #BE9253", "|%# c #B88C4D", "1%# c #CBA264", "2%# c #CAA163", "3%# c #A98042", "4%# c #A7793D", "5%# c #A7763C", "6%# c #A1723A", "7%# c #9B6E37", "8%# c #976C39", "9%# c #906837", "0%# c #7F5A2D", "a%# c #6D4C23", "b%# c #62441E", "c%# c #4A3518", "d%# c #423219", "e%# c #403019", "f%# c #3E2F1A", "g%# c #433324", "h%# c #463929", "i%# c #423C30", "j%# c #403D34", "k%# c #3E3E34", "l%# c #393A32", "m%# c #31342B", "n%# c #2A3129", "o%# c #323931", "p%# c #1A2119", "q%# c #5B625A", "r%# c #F7FFF8", "s%# c #EEFAEE", "t%# c #E6F4E7", "u%# c #DDEAE0", "v%# c #D8E5DC", "w%# c #D8E5DE", "x%# c #DBE7E3", "y%# c #DEEAE8", "z%# c #DFEBEB", "A%# c #D6E0EA", "B%# c #D8E2EC", "C%# c #D4DEEA", "D%# c #D4DCDF", "E%# c #76736C", "F%# c #716D64", "G%# c #89857A", "H%# c #BAB3A1", "I%# c #CDC8B5", "J%# c #7F7A67", "K%# c #2A1709", "L%# c #421D15", "M%# c #5D2E28", "N%# c #6F322F", "O%# c #763936", "P%# c #863F43", "Q%# c #843C40", "R%# c #8C3D42", "S%# c #913F43", "T%# c #954043", "U%# c #964041", "V%# c #963E3C", "W%# c #933938", "X%# c #974350", "Y%# c #984855", "Z%# c #934555", "`%# c #8F4254", " &# c #8B4152", ".&# c #904657", "+&# c #8E4357", "@&# c #9A5061", "#&# c #AB5E70", "$&# c #9D5062", "%&# c #843342", "&&# c #5C1614", "*&# c #5D1614", "=&# c #7F7B6F", "-&# c #C6C2B6", ";&# c #CECBBC", ">&# c #9C9E88", ",&# c #939379", "'&# c #8F8E72", ")&# c #7F7157", "!&# c #6E5D43", "~&# c #442511", "{&# c #361300", "]&# c #441B09", "^&# c #552211", "/&# c #662B1D", "(&# c #6E281E", "_&# c #8C332F", ":&# c #90312F", "<&# c #7A2218", "[&# c #50251E", "}&# c #4E281F", "|&# c #48271E", "1&# c #44261E", "2&# c #42251D", "3&# c #3E221E", "4&# c #371E19", "5&# c #331B17", "6&# c #321D18", "7&# c #3D2E29", "8&# c #7B6D6D", "9&# c #B3A5A5", "0&# c #BFB1B1", "a&# c #736248", "b&# c #6E593C", "c&# c #624A46", "d&# c #6C5658", "e&# c #7B6770", "f&# c #867681", "g&# c #9E96A3", "h&# c #9F9CA7", "i&# c #C4D1CA", "j&# c #ADBAB1", "k&# c #7F8C83", "l&# c #626F65", "m&# c #5A675D", "n&# c #707D73", "o&# c #939D94", "p&# c #7E887F", "q&# c #6D776E", "r&# c #6C766B", "s&# c #6E766B", "t&# c #60665C", "u&# c #484E44", "v&# c #3A3D32", "w&# c #303328", "x&# c #383A2D", "y&# c #282725", "z&# c #272624", "A&# c #262523", "B&# c #2D2D2D", "C&# c #2D2D2B", "D&# c #140E0E", "E&# c #1A1512", "F&# c #181212", "G&# c #1A120F", "H&# c #180F08", "I&# c #190F06", "J&# c #1D130A", "K&# c #1F150C", "L&# c #20160D", "M&# c #22180F", "N&# c #271811", "O&# c #2B1A12", "P&# c #2C1B13", "Q&# c #2D1A13", "R&# c #2F1B12", "S&# c #331F14", "T&# c #332012", "U&# c #332113", "V&# c #392618", "W&# c #392617", "X&# c #362012", "Y&# c #382215", "Z&# c #3A2416", "`&# c #3D2519", " *# c #3E2719", ".*# c #3E261A", "+*# c #3E2717", "@*# c #402512", "#*# c #452913", "$*# c #4C2A11", "%*# c #502C12", "&*# c #522D13", "**# c #512910", "=*# c #583017", "-*# c #582F19", ";*# c #552F1A", ">*# c #552F1C", ",*# c #522D1B", "'*# c #512C1C", ")*# c #502C1C", "!*# c #4D2C19", "~*# c #4D2D18", "{*# c #4E2E19", "]*# c #4C2C17", "^*# c #4B2C17", "/*# c #4D2E19", "(*# c #52321B", "_*# c #523317", ":*# c #563418", "<*# c #57381B", "[*# c #58361A", "}*# c #593819", "|*# c #5C3B18", "1*# c #5E3A18", "2*# c #6B4521", "3*# c #754924", "4*# c #7C4A27", "5*# c #77431E", "6*# c #7A4420", "7*# c #8D562F", "8*# c #925526", "9*# c #A06430", "0*# c #A36731", "a*# c #AB723B", "b*# c #CC945B", "c*# c #DDA66D", "d*# c #D09C60", "e*# c #C19151", "f*# c #DAAD6A", "g*# c #F4C984", "h*# c #EEC67E", "i*# c #D4AE63", "j*# c #CEA95B", "k*# c #C9A655", "l*# c #C19E4D", "m*# c #C49D4E", "n*# c #BC883F", "o*# c #D89F5A", "p*# c #D29954", "q*# c #CD944F", "r*# c #C88F4C", "s*# c #C48D4A", "t*# c #D7A260", "u*# c #D7A463", "v*# c #F3C280", "w*# c #E7B777", "x*# c #D0A264", "y*# c #B68A4D", "z*# c #B08447", "A*# c #C1975B", "B*# c #C89E62", "C*# c #BB9155", "D*# c #A0763C", "E*# c #9E733C", "F*# c #996E39", "G*# c #936A36", "H*# c #936B3A", "I*# c #8F6B3B", "J*# c #7D5B2E", "K*# c #67471E", "L*# c #593F1C", "M*# c #463629", "N*# c #3E3A2F", "O*# c #3F3C33", "P*# c #3F3F37", "Q*# c #3D3E38", "R*# c #383B34", "S*# c #272C25", "T*# c #333831", "U*# c #323730", "V*# c #1D221B", "W*# c #5E635C", "X*# c #D3DBD0", "Y*# c #F8FFF4", "Z*# c #F1FFED", "`*# c #EAF8E7", " =# c #E4F2E1", ".=# c #E0EEDF", "+=# c #DCEADD", "@=# c #D7E4DB", "#=# c #D4E1DA", "$=# c #D1DEE6", "%=# c #D1DEE7", "&=# c #8E908D", "*=# c #858681", "==# c #85857D", "-=# c #757168", ";=# c #747065", ">=# c #C2BBA8", ",=# c #D5D0BC", "'=# c #28210E", ")=# c #381D12", "!=# c #401E15", "~=# c #431C15", "{=# c #672C28", "]=# c #6C2D28", "^=# c #7E3D3B", "/=# c #864243", "(=# c #874143", "_=# c #883D42", ":=# c #924044", "<=# c #953D3B", "[=# c #8A2F36", "}=# c #933D46", "|=# c #944656", "1=# c #914456", "2=# c #8C4155", "3=# c #8F4659", "4=# c #90475B", "5=# c #934A5D", "6=# c #A35A6D", "7=# c #AE6377", "8=# c #9D5266", "9=# c #853445", "0=# c #862E3A", "a=# c #581D15", "b=# c #67241C", "c=# c #342828", "d=# c #302A2A", "e=# c #837F73", "f=# c #C7C3B7", "g=# c #CCC9BA", "h=# c #8E8D71", "i=# c #6C5B41", "j=# c #371401", "k=# c #451B0B", "l=# c #552113", "m=# c #8D3430", "n=# c #792218", "o=# c #61221B", "p=# c #57201B", "q=# c #4F2821", "r=# c #48251F", "s=# c #381F1A", "t=# c #746666", "u=# c #C5B9B9", "v=# c #7E6C54", "w=# c #786547", "x=# c #60442E", "y=# c #614844", "z=# c #695355", "A=# c #735F68", "B=# c #7A6A75", "C=# c #908490", "D=# c #9A929F", "E=# c #9E9BA6", "F=# c #9999A3", "G=# c #DAE6E4", "H=# c #B6C3BC", "I=# c #9AA79E", "J=# c #4B584E", "K=# c #546157", "L=# c #829083", "M=# c #939F93", "N=# c #B5BCB4", "O=# c #949992", "P=# c #727770", "Q=# c #626760", "R=# c #575C55", "S=# c #474A41", "T=# c #35382F", "U=# c #3E4035", "V=# c #414137", "W=# c #272526", "X=# c #282627", "Y=# c #2E2E2C", "Z=# c #2F2F2D", "`=# c #170F0C", " -# c #170F0D", ".-# c #19110E", "+-# c #1A1210", "@-# c #1B1310", "#-# c #1C1412", "$-# c #1C1411", "%-# c #1B1311", "&-# c #23120B", "*-# c #251309", "=-# c #27140D", "--# c #29170D", ";-# c #2B1811", ">-# c #2D1B11", ",-# c #301D16", "'-# c #322016", ")-# c #311E17", "!-# c #2D1610", "~-# c #2E1511", "{-# c #2E1510", "]-# c #2F1611", "^-# c #301710", "/-# c #341912", "(-# c #351A13", "_-# c #361913", ":-# c #371A12", "<-# c #381C11", "[-# c #391B11", "}-# c #381A10", "|-# c #361A0E", "1-# c #381E11", "2-# c #3B2114", "3-# c #3D2314", "4-# c #3F2317", "5-# c #3E2214", "6-# c #3C1F11", "7-# c #402315", "8-# c #432318", "9-# c #442419", "0-# c #452415", "a-# c #492613", "b-# c #4B2711", "c-# c #4E2813", "d-# c #512812", "e-# c #562912", "f-# c #582A12", "g-# c #592912", "h-# c #582811", "i-# c #623019", "j-# c #622F1A", "k-# c #5F2F19", "l-# c #5F2F1B", "m-# c #5D2E1C", "n-# c #5D2E1E", "o-# c #582D1C", "p-# c #572E1C", "q-# c #552C1A", "r-# c #522C19", "s-# c #57311E", "t-# c #542E19", "u-# c #552C16", "v-# c #572F16", "w-# c #5B331A", "x-# c #5B3319", "y-# c #5C3518", "z-# c #5E3718", "A-# c #613518", "B-# c #754424", "C-# c #754322", "D-# c #783F21", "E-# c #713616", "F-# c #743718", "G-# c #874B27", "H-# c #915427", "I-# c #955C27", "J-# c #945B26", "K-# c #9C652D", "L-# c #B37C43", "M-# c #BA864A", "N-# c #B98748", "O-# c #C0904E", "P-# c #CA9E57", "Q-# c #F1C77B", "R-# c #DBB564", "S-# c #E1BB6A", "T-# c #DFBB67", "U-# c #D3AF59", "V-# c #D9B05E", "W-# c #D19B53", "X-# c #C88D49", "Y-# c #A36623", "Z-# c #A36824", "`-# c #B17634", " ;# c #A76D2D", ".;# c #AB7434", "+;# c #AF7939", "@;# c #A16E2F", "#;# c #976528", "$;# c #9C6B30", "%;# c #AE8044", "&;# c #B4864B", "*;# c #A3763B", "=;# c #9B6E33", "-;# c #A1773D", ";;# c #A17842", ">;# c #9B733F", ",;# c #906B37", "';# c #896332", ");# c #866232", "!;# c #815F32", "~;# c #735428", "{;# c #64471F", "];# c #58401C", "^;# c #3C2B17", "/;# c #40392F", "(;# c #3E3A31", "_;# c #3B3B33", ":;# c #3C3B36", "<;# c #3C3E39", "[;# c #353A34", "};# c #232822", "|;# c #242923", "1;# c #252A24", "2;# c #292E27", "3;# c #2C312A", "4;# c #31362F", "5;# c #0D120B", "6;# c #737B6E", "7;# c #C5D2BE", "8;# c #C9D9BF", "9;# c #D2E1CA", "0;# c #DEEDD6", "a;# c #E8F7E4", "b;# c #EEFCEB", "c;# c #EEFCED", "d;# c #EDFAF0", "e;# c #D1DED5", "f;# c #E5F1ED", "g;# c #CDDAE2", "h;# c #AAACAB", "i;# c #898B88", "j;# c #807D74", "k;# c #726E63", "l;# c #B7AFA2", "m;# c #C7BCAA", "n;# c #CBC0AE", "o;# c #C7C0AD", "p;# c #140F00", "q;# c #2A2310", "r;# c #2E1E0F", "s;# c #362013", "t;# c #722E2B", "u;# c #7A3635", "v;# c #853F3F", "w;# c #894345", "x;# c #8D3E44", "y;# c #903F45", "z;# c #954045", "A;# c #933B39", "B;# c #923935", "C;# c #913741", "D;# c #964554", "E;# c #8F465A", "F;# c #944B5F", "G;# c #A0576B", "H;# c #AE6579", "I;# c #B0677A", "J;# c #9C5165", "K;# c #873949", "L;# c #592A22", "M;# c #362422", "N;# c #332727", "O;# c #2B2728", "P;# c #9EA08A", "Q;# c #94947A", "R;# c #8B8A6E", "S;# c #888366", "T;# c #7A6C51", "U;# c #42230F", "V;# c #361202", "W;# c #441A0A", "X;# c #562214", "Y;# c #772318", "Z;# c #7B241A", "`;# c #7A261B", " ># c #7A261C", ".># c #79251B", "+># c #6C251F", "@># c #5E231B", "#># c #5A231E", "$># c #562520", "%># c #4C2520", "&># c #35201B", "*># c #281612", "=># c #291B1B", "-># c #3D2F2F", ";># c #B7ABAB", ">># c #A69BA1", ",># c #86745C", "'># c #806C51", ")># c #6D5539", "!># c #563B2A", "~># c #593E33", "{># c #5C433F", "]># c #604A4C", "^># c #6A565F", "/># c #73636E", "(># c #837785", "_># c #918998", ":># c #9995A3", "<># c #9696A0", "[># c #979AA1", "}># c #A4AAA8", "|># c #B0BDB6", "1># c #7D8A81", "2># c #364339", "3># c #92A093", "4># c #ACB3AB", "5># c #6B6D68", "6># c #555851", "7># c #444740", "8># c #383931", "9># c #404139", "0># c #4F4F47", "a># c #47473D", "b># c #282425", "c># c #282327", "d># c #28262B", "e># c #2A2A2C", "f># c #2E302B", "g># c #1B110F", "h># c #211813", "i># c #391C14", "j># c #3A1D15", "k># c #3A1D17", "l># c #40231B", "m># c #3B1C17", "n># c #3D1A18", "o># c #3D1A16", "p># c #3E1B17", "q># c #401D17", "r># c #472118", "s># c #431B13", "t># c #411B10", "u># c #462216", "v># c #422014", "w># c #442314", "x># c #482418", "y># c #492517", "z># c #482217", "A># c #462013", "B># c #482215", "C># c #4B2319", "D># c #4C2418", "E># c #4F241B", "F># c #4F2519", "G># c #4E231A", "H># c #4E2416", "I># c #572A17", "J># c #5A2B17", "K># c #5E2E18", "L># c #632F1A", "M># c #642D18", "N># c #662D19", "O># c #682E18", "P># c #6A301A", "Q># c #692F1B", "R># c #692E1C", "S># c #672E1D", "T># c #652D20", "U># c #632F21", "V># c #63301F", "W># c #602F1E", "X># c #5F2E1D", "Y># c #5E2D1C", "Z># c #5C2D1B", "`># c #5A2B19", " ,# c #592A18", ".,# c #5B2E1B", "+,# c #5D301D", "@,# c #5A2D1A", "#,# c #582917", "$,# c #5B2C18", "%,# c #5F301C", "&,# c #60331C", "*,# c #60321B", "=,# c #60321A", "-,# c #61331B", ";,# c #64351B", ">,# c #69371C", ",,# c #723F22", "',# c #743C21", "),# c #743B1E", "!,# c #7C3C21", "~,# c #743317", "{,# c #733015", "],# c #7F3F1C", "^,# c #894C1F", "/,# c #8C551F", "(,# c #87501A", "_,# c #885119", ":,# c #9B642B", "<,# c #A67236", "[,# c #AC7B39", "},# c #B68743", "|,# c #D7AB62", "1,# c #F1C57A", "2,# c #DCB363", "3,# c #C7A14C", "4,# c #E6C06B", "5,# c #FCD880", "6,# c #F8D57B", "7,# c #FFD884", "8,# c #E2A962", "9,# c #CD904F", "0,# c #975717", "a,# c #915413", "b,# c #A5692A", "c,# c #995F1F", "d,# c #925B1B", "e,# c #925C1E", "f,# c #834F13", "g,# c #89571A", "h,# c #A06F34", "i,# c #C19358", "j,# c #CC9D65", "k,# c #AC7F46", "l,# c #94672E", "m,# c #986D36", "n,# c #916C38", "o,# c #8A6634", "p,# c #836131", "q,# c #815F31", "r,# c #7B5A2D", "s,# c #705125", "t,# c #66491F", "u,# c #60441C", "v,# c #5A401B", "w,# c #573F1B", "x,# c #3F2F18", "y,# c #3C2D18", "z,# c #392A17", "A,# c #483A2F", "B,# c #3A3A32", "C,# c #393833", "D,# c #3B3C37", "E,# c #3D3F3C", "F,# c #373C38", "G,# c #2C312D", "H,# c #222723", "I,# c #262825", "J,# c #282A27", "K,# c #292B26", "L,# c #40423D", "M,# c #363833", "N,# c #2F322B", "O,# c #292C25", "P,# c #3A4034", "Q,# c #707E65", "R,# c #768669", "S,# c #85957A", "T,# c #9CAC91", "U,# c #B7C6AF", "V,# c #D1E0CB", "W,# c #E3F2DF", "X,# c #EDFBEC", "Y,# c #D3E1D4", "Z,# c #EEFBF2", "`,# c #E1EEE7", " '# c #D1DDD9", ".'# c #D0DDE5", "+'# c #CCDAE3", "@'# c #CEDCE5", "#'# c #939594", "$'# c #69665D", "%'# c #716D62", "&'# c #6F6B60", "*'# c #6F6B5F", "='# c #736F63", "-'# c #6E685C", ";'# c #797367", ">'# c #C3B8A4", ",'# c #D3C8B4", "''# c #B7B19B", ")'# c #706956", "!'# c #1B1602", "~'# c #45291E", "{'# c #6F302B", "]'# c #76302E", "^'# c #803A3A", "/'# c #8B4344", "('# c #8C4447", "_'# c #94454B", ":'# c #95444A", "<'# c #954347", "['# c #943E3F", "}'# c #913834", "|'# c #943940", "1'# c #8E353B", "2'# c #933943", "3'# c #94424E", "4'# c #934553", "5'# c #924859", "6'# c #954C60", "7'# c #91495D", "8'# c #995167", "9'# c #AD6579", "0'# c #B97185", "a'# c #AF677B", "b'# c #9B5266", "c'# c #8F4053", "d'# c #8B333F", "e'# c #5D1E17", "f'# c #352321", "g'# c #2F2929", "h'# c #2D292A", "i'# c #2A2625", "j'# c #353128", "k'# c #C7C4B5", "l'# c #A1A08B", "m'# c #95957B", "n'# c #8B876C", "o'# c #786A4F", "p'# c #40210D", "q'# c #341000", "r'# c #441909", "s'# c #7A2B24", "t'# c #8D3531", "u'# c #8F312F", "v'# c #7A2319", "w'# c #7C251C", "x'# c #6B2621", "y'# c #5F2420", "z'# c #542420", "A'# c #51241F", "B'# c #4D2420", "C'# c #41231B", "D'# c #3E251E", "E'# c #312019", "F'# c #2F1F1F", "G'# c #322423", "H'# c #6E605F", "I'# c #C1B6B4", "J'# c #A4999D", "K'# c #938675", "L'# c #887964", "M'# c #644F32", "N'# c #5B3F31", "O'# c #5A3F38", "P'# c #5B4341", "Q'# c #655153", "R'# c #706166", "S'# c #786C76", "T'# c #89818C", "U'# c #A5ABA9", "V'# c #8D9890", "W'# c #58655B", "X'# c #293529", "Y'# c #526051", "Z'# c #7F8B7D", "`'# c #848E83", " )# c #686D66", ".)# c #575A53", "+)# c #464942", "@)# c #40413B", "#)# c #3A3B35", "$)# c #3B3C36", "%)# c #505149", "&)# c #6A6B63", "*)# c #46463E", "=)# c #39362F", "-)# c #2A2829", ";)# c #2A2627", ">)# c #252326", ",)# c #2A282B", "')# c #1F1F1F", "))# c #232323", "!)# c #222222", "~)# c #232220", "{)# c #191410", "])# c #1D1512", "^)# c #1E1613", "/)# c #21140E", "()# c #21120B", "_)# c #22130C", ":)# c #24150E", "<)# c #3B1A11", "[)# c #441E15", "})# c #461D17", "|)# c #451C16", "1)# c #471C15", "2)# c #4A1F18", "3)# c #4A1D18", "4)# c #4C1F19", "5)# c #50231E", "6)# c #52221E", "7)# c #53221E", "8)# c #59241E", "9)# c #58231B", "0)# c #541E14", "a)# c #511D12", "b)# c #5B2519", "c)# c #572115", "d)# c #551C11", "e)# c #5C2318", "f)# c #5F251A", "g)# c #60241A", "h)# c #682D1D", "i)# c #692C1A", "j)# c #73321E", "k)# c #773320", "l)# c #78311F", "m)# c #78311D", "n)# c #7B321F", "o)# c #752C19", "p)# c #732C1A", "q)# c #722A1B", "r)# c #702B1C", "s)# c #6F2C1C", "t)# c #6F2D1F", "u)# c #6E2F20", "v)# c #6D301E", "w)# c #6B2D1E", "x)# c #6A2D1B", "y)# c #6A2C1D", "z)# c #632818", "A)# c #622715", "B)# c #612616", "C)# c #642B1A", "D)# c #662D1A", "E)# c #652C1B", "F)# c #612817", "G)# c #69301F", "H)# c #6A3221", "I)# c #6A331F", "J)# c #6A331E", "K)# c #6C331F", "L)# c #6E361F", "M)# c #723820", "N)# c #743B20", "O)# c #72341B", "P)# c #77371C", "Q)# c #813F25", "R)# c #7C391E", "S)# c #773117", "T)# c #7E3C1A", "U)# c #7D3E15", "V)# c #894C1D", "W)# c #854819", "X)# c #7E4412", "Y)# c #915823", "Z)# c #A36C33", "`)# c #AA7736", " !# c #C79653", ".!# c #BC8E41", "+!# c #AD7F31", "@!# c #D8AB5A", "#!# c #EBC16D", "$!# c #D3A955", "%!# c #CB9C4C", "&!# c #E2A964", "*!# c #DB9E5F", "=!# c #A76A2B", "-!# c #9A5E1F", ";!# c #A76D2E", ">!# c #965F1F", ",!# c #8F591D", "'!# c #8D591D", ")!# c #915F24", "!!# c #A17036", "~!# c #A4753D", "{!# c #A2753E", "]!# c #A77945", "^!# c #9D723D", "/!# c #8E632E", "(!# c #8A612D", "_!# c #765426", ":!# c #805F32", "~# c #AE697C", ",~# c #9A5266", "'~# c #944757", ")~# c #6D1716", "!~# c #3C1D18", "~~# c #1C1815", "{~# c #87837A", "]~# c #C5C2B3", "^~# c #A09E89", "/~# c #99977E", "(~# c #8C866C", "_~# c #80765B", ":~# c #42210E", "<~# c #3B1604", "[~# c #441607", "}~# c #652519", "|~# c #7D3028", "1~# c #86332D", "2~# c #89312D", "3~# c #751F20", "4~# c #741E1F", "5~# c #721C1D", "6~# c #701A1B", "7~# c #702220", "8~# c #622220", "9~# c #602322", "0~# c #5E2222", "a~# c #49241B", "b~# c #3E231A", "c~# c #301F17", "d~# c #3A2723", "e~# c #2E1B15", "f~# c #6C5F59", "g~# c #AAA1A2", "h~# c #8E8673", "i~# c #887D67", "j~# c #7D7159", "k~# c #603D27", "l~# c #5F4B44", "m~# c #655651", "n~# c #685C5C", "o~# c #7D7475", "p~# c #8C878B", "q~# c #8D8C91", "r~# c #919296", "s~# c #C4C4CC", "t~# c #BDC6C1", "u~# c #88938B", "v~# c #828C83", "w~# c #5A665A", "x~# c #283325", "y~# c #445140", "z~# c #6F7A6A", "A~# c #758070", "B~# c #6A7064", "C~# c #4E544A", "D~# c #4C4F46", "E~# c #464940", "F~# c #565950", "G~# c #66675F", "H~# c #5A5B53", "I~# c #42433D", "J~# c #3E3F39", "K~# c #383732", "L~# c #31302B", "M~# c #2D2A25", "N~# c #333331", "O~# c #343432", "P~# c #31312F", "Q~# c #252324", "R~# c #202022", "S~# c #222224", "T~# c #191514", "U~# c #121912", "V~# c #10150F", "W~# c #161817", "X~# c #151716", "Y~# c #171310", "Z~# c #1A1112", "`~# c #1C1314", " {# c #1D1415", ".{# c #1E1412", "+{# c #1D100A", "@{# c #1E1109", "#{# c #23140D", "${# c #25140D", "%{# c #25120C", "&{# c #28150F", "*{# c #2D1813", "={# c #341C18", "-{# c #351C18", ";{# c #341B17", ">{# c #351D13", ",{# c #341C12", "'{# c #331B0F", "){# c #341C10", "!{# c #371C11", "~{# c #3A1E10", "{{# c #3E1D0E", "]{# c #491D12", "^{# c #4F1D12", "/{# c #531E16", "({# c #542015", "_{# c #541D16", ":{# c #571E15", "<{# c #5A1F19", "[{# c #591A15", "}{# c #601C19", "|{# c #661F1D", "1{# c #712A26", "2{# c #70281C", "3{# c #722219", "4{# c #7B2818", "5{# c #7D2716", "6{# c #7E2817", "7{# c #802916", "8{# c #822917", "9{# c #852A18", "0{# c #862B19", "a{# c #832A18", "b{# c #822B1A", "c{# c #812B1A", "d{# c #7F2C1A", "e{# c #7E2D1A", "f{# c #7C2D1C", "g{# c #7E311F", "h{# c #7C311E", "i{# c #7B2F1F", "j{# c #7B301D", "k{# c #7D3121", "l{# c #792D1D", "m{# c #772C19", "n{# c #792E1B", "o{# c #772B1B", "p{# c #782D1A", "q{# c #782C1C", "r{# c #722918", "s{# c #6E2417", "t{# c #722A1E", "u{# c #752D21", "v{# c #722C20", "w{# c #6E291A", "x{# c #6E2919", "y{# c #722F1C", "z{# c #783620", "A{# c #78361E", "B{# c #79371D", "C{# c #79381C", "D{# c #7B3A1C", "E{# c #7C3B1D", "F{# c #7D3C1C", "G{# c #7F3D1D", "H{# c #7F3D1B", "I{# c #8A4623", "J{# c #894520", "K{# c #8C4823", "L{# c #915028", "M{# c #95542A", "N{# c #98582A", "O{# c #9F6130", "P{# c #A96C36", "Q{# c #D2975F", "R{# c #D1965A", "S{# c #C98F50", "T{# c #BA8342", "U{# c #B47D3A", "V{# c #B9833D", "W{# c #C18B45", "X{# c #C48E48", "Y{# c #E0A968", "Z{# c #CB9454", "`{# c #AF7838", " ]# c #9A6426", ".]# c #925C20", "+]# c #8F5B1F", "@]# c #8B581F", "#]# c #88571F", "$]# c #92632D", "%]# c #926430", "&]# c #916534", "*]# c #906636", "=]# c #8E6336", "-]# c #8A6133", ";]# c #825C2F", ">]# c #7A532A", ",]# c #7F5831", "']# c #74502C", ")]# c #72502B", "!]# c #4F351A", "~]# c #4E361C", "{]# c #4C3820", "]]# c #4A361E", "^]# c #42321B", "/]# c #3B2C15", "(]# c #322D1A", "_]# c #292615", ":]# c #3C3930", "<]# c #383830", "[]# c #2F302A", "}]# c #2B3127", "|]# c #2C3226", "1]# c #2A3320", "2]# c #2A361E", "3]# c #2C3820", "4]# c #2F3B23", "5]# c #37432D", "6]# c #4A5640", "7]# c #626E5A", "8]# c #737E6D", "9]# c #B2BDAC", "0]# c #D8E3D3", "a]# c #F9FFF4", "b]# c #F4FFF1", "c]# c #D8E2D7", "d]# c #DCE6DB", "e]# c #ECF6EB", "f]# c #EBF5EC", "g]# c #E5F0EA", "h]# c #E2EDE7", "i]# c #D6E1DD", "j]# c #CFDAD6", "k]# c #AEAFB1", "l]# c #B0B0AE", "m]# c #4F483E", "n]# c #4F493D", "o]# c #756F63", "p]# c #7E786C", "q]# c #767064", "r]# c #787266", "s]# c #736D61", "t]# c #7A7468", "u]# c #B4AFA9", "v]# c #B2ADA7", "w]# c #BAB3A9", "x]# c #BCB6AA", "y]# c #CEC8B0", "z]# c #CBC4AA", "A]# c #1D1604", "B]# c #22190A", "C]# c #241309", "D]# c #2F1B14", "E]# c #5A2422", "F]# c #652B29", "G]# c #70302E", "H]# c #783431", "I]# c #89423E", "J]# c #954B48", "K]# c #934948", "L]# c #8E4242", "M]# c #944445", "N]# c #964446", "O]# c #9A4447", "P]# c #9C4347", "Q]# c #9B4143", "R]# c #993D40", "S]# c #97383C", "T]# c #923435", "U]# c #8B3236", "V]# c #943B41", "W]# c #973E44", "X]# c #9C424B", "Y]# c #C46D75", "Z]# c #A9525A", "`]# c #721B23", " ^# c #761F28", ".^# c #933E45", "+^# c #903D45", "@^# c #914049", "#^# c #90434D", "$^# c #8F4651", "%^# c #914954", "&^# c #8F4B56", "*^# c #914F5B", "=^# c #965460", "-^# c #A76573", ";^# c #BD7B89", ">^# c #C68492", ",^# c #B77485", "'^# c #9E596B", ")^# c #904655", "!^# c #852529", "~^# c #581711", "{^# c #5A1B14", "]^# c #5B1513", "^^# c #671D1A", "/^# c #6F1517", "(^# c #701618", "_^# c #6E1819", ":^# c #6E1A1A", "<^# c #6B1D1B", "[^# c #3D2018", "}^# c #332927", "|^# c #312C29", "1^# c #2E2A27", "2^# c #39342E", "3^# c #C6C2B7", "4^# c #CFCBBF", "5^# c #B7ADA1", "6^# c #8A846A", "7^# c #441606", "8^# c #69271B", "9^# c #732D23", "0^# c #7A3027", "a^# c #81312A", "b^# c #85302B", "c^# c #6E251F", "d^# c #702222", "e^# c #6E2224", "f^# c #6D2324", "g^# c #6A2424", "h^# c #622223", "i^# c #5F2122", "j^# c #5E2021", "k^# c #5C2020", "l^# c #4D251B", "m^# c #3F2419", "n^# c #34211D", "o^# c #37221F", "p^# c #3E2624", "q^# c #695C56", "r^# c #5B4D32", "s^# c #563927", "t^# c #655852", "u^# c #756D6A", "v^# c #888687", "w^# c #909092", "x^# c #9FA0A5", "y^# c #C1CAC5", "z^# c #C2CCC4", "A^# c #889289", "B^# c #747E73", "C^# c #485345", "D^# c #202B1B", "E^# c #45503F", "F^# c #65705F", "G^# c #5F6A59", "H^# c #484E40", "I^# c #393F33", "J^# c #3E4438", "K^# c #43493D", "L^# c #43463D", "M^# c #4C4D45", "N^# c #3F4038", "O^# c #353430", "P^# c #262223", "Q^# c #201E21", "R^# c #222126", "S^# c #1F1F21", "T^# c #0F140E", "U^# c #0E130D", "V^# c #11130E", "W^# c #12140F", "X^# c #1A100E", "Y^# c #201614", "Z^# c #211614", "`^# c #221715", " /# c #241615", "./# c #231514", "+/# c #241512", "@/# c #2A1409", "#/# c #2B140C", "$/# c #2C160B", "%/# c #2E150E", "&/# c #2E160C", "*/# c #31160F", "=/# c #33160E", "-/# c #371A14", ";/# c #3B1D15", ">/# c #41201B", ",/# c #411E1A", "'/# c #431D1A", ")/# c #441F16", "!/# c #421D14", "~/# c #421C0F", "{/# c #451D11", "]/# c #451E0F", "^/# c #471D0F", "//# c #471D0D", "(/# c #541E12", "_/# c #5C2016", ":/# c #5E1E15", "(# c #433B26", ",(# c #2D2815", "'(# c #292613", ")(# c #232414", "!(# c #473529", "~(# c #3B382F", "{(# c #35352B", "](# c #34342C", "^(# c #302C29", "/(# c #2B3423", "((# c #2C3520", "_(# c #2D3623", ":(# c #2E3722", "<(# c #343D2A", "[(# c #424B38", "}(# c #555E4B", "|(# c #646D5A", "1(# c #6A7362", "2(# c #848D7C", "3(# c #A5AE9D", "4(# c #AEB7A6", "5(# c #AFB7A8", "6(# c #C6CEBF", "7(# c #D9E1D2", "8(# c #D2DACB", "9(# c #E1EBE0", "0(# c #E3EDE4", "a(# c #E5EFE6", "b(# c #D4DFD9", "c(# c #D7E2DE", "d(# c #CDD7D6", "e(# c #D5E2EA", "f(# c #D3E2E9", "g(# c #D3D8DE", "h(# c #D2D5DA", "i(# c #AFAFB1", "j(# c #A9A9A9", "k(# c #464034", "l(# c #474135", "m(# c #6D675B", "n(# c #726C60", "o(# c #716B5F", "p(# c #807A6E", "q(# c #B2AFA8", "r(# c #B3AD9F", "s(# c #BBB6A2", "t(# c #DBD7BE", "u(# c #AAA48A", "v(# c #6D674F", "w(# c #170E00", "x(# c #1C1002", "y(# c #532623", "z(# c #5C2624", "A(# c #7D3833", "B(# c #8A433F", "C(# c #964C49", "D(# c #944A47", "E(# c #914341", "F(# c #964544", "G(# c #994545", "H(# c #994344", "I(# c #9B4244", "J(# c #9B3F42", "K(# c #97373B", "L(# c #923236", "M(# c #8F2C31", "N(# c #92393D", "O(# c #92393F", "P(# c #8B343A", "Q(# c #B45D65", "R(# c #D47D85", "S(# c #B7616A", "T(# c #832D36", "U(# c #7F2932", "V(# c #86333B", "W(# c #913E46", "X(# c #93424B", "Y(# c #8F434D", "Z(# c #8D464E", "`(# c #8F4953", " _# c #904D56", "._# c #92505A", "+_# c #9B5963", "@_# c #AE6C78", "#_# c #C17F8B", "$_# c #C4828E", "%_# c #B3717F", "&_# c #9D5968", "*_# c #924855", "=_# c #8A353C", "-_# c #701817", ";_# c #711518", ">_# c #71151A", ",_# c #711719", "'_# c #6D1D1C", ")_# c #6B211E", "!_# c #5A2924", "~_# c #302B28", "{_# c #3A352F", "]_# c #C4C0B5", "^_# c #CBC7BC", "/_# c #888268", "(_# c #7C7257", "__# c #655139", ":_# c #401F0C", "<_# c #3A1503", "[_# c #431505", "}_# c #5C2216", "|_# c #752F25", "1_# c #7F2F28", "2_# c #822D28", "3_# c #662425", "4_# c #632323", "5_# c #602223", "6_# c #5D2322", "7_# c #572420", "8_# c #47271C", "9_# c #43271C", "0_# c #3F271D", "a_# c #2C1B14", "b_# c #2E1B17", "c_# c #38271F", "d_# c #20130B", "e_# c #574C46", "f_# c #786C54", "g_# c #695B41", "h_# c #5A4436", "i_# c #5D4C42", "j_# c #77726F", "k_# c #817D7E", "l_# c #8F8F91", "m_# c #D7E0DD", "n_# c #B0BAB2", "o_# c #818B82", "p_# c #6E786D", "q_# c #404B3D", "r_# c #212C1C", "s_# c #495443", "t_# c #616C5B", "u_# c #525D4C", "v_# c #42483A", "w_# c #3B4135", "x_# c #41473D", "y_# c #393C33", "z_# c #353630", "A_# c #353631", "B_# c #202020", "C_# c #1E1F21", "D_# c #1C110F", "E_# c #211312", "F_# c #231313", "G_# c #261412", "H_# c #271312", "I_# c #281413", "J_# c #2B1716", "K_# c #2D1918", "L_# c #311D1C", "M_# c #301C1B", "N_# c #2F1B1A", "O_# c #341B14", "P_# c #361A0F", "Q_# c #351810", "R_# c #35190E", "S_# c #371911", "T_# c #3D1C15", "U_# c #3F1D14", "V_# c #4A1E1B", "W_# c #4D201B", "X_# c #4D1E16", "Y_# c #4C1D13", "Z_# c #4B1C14", "`_# c #491A10", " :# c #4B1910", ".:# c #4C1A0F", "+:# c #511F14", "@:# c #512012", "#:# c #561E11", "$:# c #5F2116", "%:# c #622216", "&:# c #652317", "*:# c #641E14", "=:# c #6A2017", "-:# c #711814", ";:# c #862723", ">:# c #89241C", ",:# c #8A231C", "':# c #8C231D", "):# c #8D241E", "!:# c #90231E", "~:# c #90231C", "{:# c #8E2216", "]:# c #8E2416", "^:# c #8F2316", "/:# c #922417", "(:# c #942418", "_:# c #952519", "::# c #96261A", "<:# c #9A2A1E", "[:# c #992B1E", "}:# c #962C1E", "|:# c #942D1E", "1:# c #932D1E", "2:# c #902F1E", "3:# c #8E2E1E", "4:# c #8B2E1D", "5:# c #8C2F1E", "6:# c #8E3120", "7:# c #8F3221", "8:# c #8D301F", "9:# c #882C1D", "0:# c #80281C", "a:# c #822B21", "b:# c #822E24", "c:# c #812D22", "d:# c #7E2A1F", "e:# c #7D2B1D", "f:# c #81301F", "g:# c #843622", "h:# c #80321C", "i:# c #80341C", "j:# c #81351B", "k:# c #81371A", "l:# c #83391C", "m:# c #843B1B", "n:# c #853C1C", "o:# c #863D1C", "p:# c #914626", "q:# c #914724", "r:# c #974D2A", "s:# c #9E5630", "t:# c #A25833", "u:# c #A25B31", "v:# c #A86135", "w:# c #AD693A", "x:# c #A76332", "y:# c #A1602A", "z:# c #99561F", "A:# c #935218", "B:# c #9A5A1D", "C:# c #B37335", "D:# c #B27437", "E:# c #B87C40", "F:# c #AC7137", "G:# c #9F642A", "H:# c #995E26", "I:# c #975E27", "J:# c #97602A", "K:# c #925D29", "L:# c #8D5927", "M:# c #8B5728", "N:# c #87562B", "O:# c #81542B", "P:# c #7E512A", "Q:# c #794D28", "R:# c #744926", "S:# c #6F4422", "T:# c #673F1C", "U:# c #604124", "V:# c #473720", "W:# c #43311D", "X:# c #43311B", "Y:# c #42311D", "Z:# c #3F301D", "`:# c #39392F", " <# c #393931", ".<# c #34312C", "+<# c #2C2E29", "@<# c #282D27", "#<# c #2B3324", "$<# c #2C3522", "%<# c #2D3625", "&<# c #353E2D", "*<# c #414A39", "=<# c #4A5342", "-<# c #646D5C", ";<# c #6F7867", "><# c #858E7D", ",<# c #949D8C", "'<# c #A2AB9A", ")<# c #B8C1B0", "!<# c #BBC4B3", "~<# c #A5AD9E", "{<# c #9AA297", "]<# c #B7BFB4", "^<# c #E7F1E6", "/<# c #F9FFFA", "(<# c #D7E1D9", "_<# c #D4DFDB", ":<# c #D9E6EE", "<<# c #D0D7DF", "[<# c #D3D6DD", "}<# c #D2D5DC", "|<# c #B1B0B5", "1<# c #AFAEAA", "2<# c #878175", "3<# c #655F53", "4<# c #605A4E", "5<# c #686256", "6<# c #6C665A", "7<# c #7B7569", "8<# c #BCAFA6", "9<# c #ADA895", "0<# c #D2CDB9", "a<# c #D4D0B7", "b<# c #78745B", "c<# c #2E2913", "d<# c #1E1704", "e<# c #291810", "f<# c #42201E", "g<# c #4C2321", "h<# c #642A28", "i<# c #6C2F2C", "j<# c #753432", "k<# c #7B3533", "l<# c #833C38", "m<# c #8E4743", "n<# c #974D4A", "o<# c #934543", "p<# c #944644", "q<# c #984746", "r<# c #9A4646", "s<# c #984243", "t<# c #9A4143", "u<# c #983C3F", "v<# c #953539", "w<# c #8F2F33", "x<# c #933A3E", "y<# c #9B4246", "z<# c #923C3F", "A<# c #9A4349", "B<# c #B05B60", "C<# c #9E4950", "D<# c #8B3840", "E<# c #8F3C44", "F<# c #95424A", "G<# c #98474E", "H<# c #96474D", "I<# c #8F444B", "J<# c #8C434A", "K<# c #8F4850", "L<# c #924F56", "M<# c #95525B", "N<# c #9E5B64", "O<# c #AF6B76", "P<# c #BE7A85", "Q<# c #BD7782", "R<# c #AB6472", "S<# c #99515F", "T<# c #924652", "U<# c #591610", "V<# c #72161B", "W<# c #72181A", "X<# c #711B1C", "Y<# c #5B2A25", "Z<# c #40221A", "`<# c #322A28", " [# c #C0BCB1", ".[# c #9F9D88", "+[# c #969279", "@[# c #634F37", "#[# c #533722", "$[# c #3F1E0B", "%[# c #5E2418", "&[# c #6D2B1F", "*[# c #763026", "=[# c #7D2D26", "-[# c #6B2527", ";[# c #692526", ">[# c #612524", ",[# c #592821", "'[# c #52271E", ")[# c #49291E", "![# c #41291F", "~[# c #352319", "{[# c #37241E", "][# c #5D544D", "^[# c #75674D", "/[# c #66553B", "([# c #613E22", "_[# c #635852", ":[# c #6E6664", "<[# c #7C7676", "[[# c #8F8D8E", "}[# c #A1A1A3", "|[# c #A5A4AA", "1[# c #999A9E", "2[# c #BFBFC9", "3[# c #A8B1AE", "4[# c #CAD3CE", "5[# c #9CA69E", "6[# c #788279", "7[# c #6F796E", "8[# c #758072", "9[# c #485343", "0[# c #1F2A19", "a[# c #3C4736", "b[# c #4F5B47", "c[# c #475241", "d[# c #4F5547", "e[# c #464C40", "f[# c #3F453B", "g[# c #393F35", "h[# c #34372E", "i[# c #2D2E29", "j[# c #1F2022", "k[# c #212320", "l[# c #1F211C", "m[# c #1E201B", "n[# c #140F0B", "o[# c #140F09", "p[# c #17100A", "q[# c #1A110C", "r[# c #25120E", "s[# c #26130D", "t[# c #2A1510", "u[# c #2E1612", "v[# c #341815", "w[# c #391A18", "x[# c #3B1917", "y[# c #3B1918", "z[# c #3C1A18", "A[# c #3B1C19", "B[# c #3C1D1B", "C[# c #3B1E1A", "D[# c #3D201C", "E[# c #3C1E1C", "F[# c #391C18", "G[# c #3A1B16", "H[# c #401B12", "I[# c #411B12", "J[# c #482018", "K[# c #501D19", "L[# c #4E1B17", "M[# c #4F1C18", "N[# c #521D17", "O[# c #521711", "P[# c #52170F", "Q[# c #53170F", "R[# c #561710", "S[# c #571811", "T[# c #581910", "U[# c #622014", "V[# c #631F14", "W[# c #662217", "X[# c #692317", "Y[# c #6C2418", "Z[# c #6A2216", "`[# c #681E13", " }# c #6C1E14", ".}# c #7D1B18", "+}# c #811B19", "@}# c #841A1A", "#}# c #851D1C", "$}# c #881E1E", "%}# c #8E261D", "&}# c #93241D", "*}# c #92231C", "=}# c #93221C", "-}# c #94231D", ";}# c #94211C", ">}# c #96201C", ",}# c #94211A", "'}# c #942218", ")}# c #942217", "!}# c #972218", "~}# c #982319", "{}# c #9A241A", "]}# c #9C231A", "^}# c #9D241B", "/}# c #A1281F", "(}# c #9F291F", "_}# c #9E291F", ":}# c #9C2A1F", "<}# c #9A2C1F", "[}# c #982C1F", "}}# c #972D1F", "|}# c #952E1F", "1}# c #932D1F", "2}# c #952F20", "3}# c #973123", "4}# c #983223", "5}# c #942E1F", "6}# c #963022", "7}# c #963021", "8}# c #973122", "9}# c #942E20", "0}# c #922E1F", "a}# c #892B21", "b}# c #882E23", "c}# c #892F24", "d}# c #862C21", "e}# c #852D1F", "f}# c #883120", "g}# c #8B3622", "h}# c #87321D", "i}# c #86341C", "j}# c #87361B", "k}# c #89381B", "l}# c #8A3B1D", "m}# c #8B3C1D", "n}# c #8D3E1F", "o}# c #8D3E1D", "p}# c #954625", "q}# c #964824", "r}# c #9A4E2A", "s}# c #A35831", "t}# c #A75C35", "u}# c #A75C34", "v}# c #AB6235", "w}# c #B26A3A", "x}# c #AF6936", "y}# c #AC6632", "z}# c #A8632C", "A}# c #AA652A", "B}# c #B47236", "C}# c #C17F42", "D}# c #C38144", "E}# c #BD7B3F", "F}# c #AB6A32", "G}# c #A3642E", "H}# c #9E5C28", "I}# c #9A5B26", "J}# c #9B5D2A", "K}# c #955829", "L}# c #8E5426", "M}# c #895025", "N}# c #864F26", "O}# c #834E26", "P}# c #804C25", "Q}# c #7D4924", "R}# c #7B4624", "S}# c #784623", "T}# c #764622", "U}# c #7C4B2A", "V}# c #764826", "W}# c #704322", "X}# c #673E20", "Y}# c #44331F", "Z}# c #44362B", "`}# c #3B3B31", " |# c #3B3831", ".|# c #38352E", "+|# c #333029", "@|# c #30312C", "#|# c #2A2F2B", "$|# c #292E2A", "%|# c #2A3225", "&|# c #2C3425", "*|# c #2A3223", "=|# c #293122", "-|# c #323A2B", ";|# c #363F2E", ">|# c #495241", ",|# c #515A49", "'|# c #636C5B", ")|# c #727B6A", "!|# c #7B8473", "~|# c #87907D", "{|# c #808978", "]|# c #656E5D", "^|# c #424A3D", "/|# c #2E362B", "(|# c #4B554A", "_|# c #9CA69B", ":|# c #F4FFF7", "<|# c #D5E0DA", "[|# c #DDE8E4", "}|# c #D4D8E1", "||# c #D5D8DF", "1|# c #D4D7E0", "2|# c #B4B3B9", "3|# c #AEADB2", "4|# c #B3B1B2", "5|# c #827C70", "6|# c #5D574B", "7|# c #524C40", "8|# c #625C50", "9|# c #6A6458", "0|# c #71695E", "a|# c #82786E", "b|# c #D0CBB7", "c|# c #47452E", "d|# c #110C00", "e|# c #1B1603", "f|# c #2A2112", "g|# c #271B0F", "h|# c #311A14", "i|# c #46201D", "j|# c #4F221F", "k|# c #5D2725", "l|# c #753430", "m|# c #7C3634", "n|# c #7F3834", "o|# c #914A46", "p|# c #954A47", "q|# c #954745", "r|# c #974947", "s|# c #9A4948", "t|# c #9B4747", "u|# c #974142", "v|# c #994042", "w|# c #963A3D", "x|# c #88252A", "y|# c #822226", "z|# c #882F31", "A|# c #973E42", "B|# c #A0474B", "C|# c #964043", "D|# c #893336", "E|# c #8B363B", "F|# c #7C272E", "G|# c #923F47", "H|# c #96454C", "I|# c #9B4C52", "J|# c #974A50", "K|# c #8F4449", "L|# c #8A4148", "M|# c #8E474D", "N|# c #944E56", "O|# c #99535B", "P|# c #9C5660", "Q|# c #A55D68", "R|# c #AF6671", "S|# c #AD646F", "T|# c #A05461", "U|# c #914552", "V|# c #8D3D48", "W|# c #58150F", "X|# c #72171C", "Y|# c #72191B", "Z|# c #5D2A26", "`|# c #502721", " 1# c #312927", ".1# c #BEBAAF", "+1# c #C3BFB4", "@1# c #6C5C43", "#1# c #3E1D0A", "$1# c #5F2519", "%1# c #7E2E27", "&1# c #842F2A", "*1# c #872C29", "=1# c #6A2625", "-1# c #662626", ";1# c #462921", ">1# c #34211A", ",1# c #3A2921", "'1# c #625952", ")1# c #BCAEAD", "!1# c #938B78", "~1# c #6D5C42", "{1# c #675D5B", "]1# c #79716F", "^1# c #A7A4AB", "/1# c #AFB3BE", "(1# c #BBBDC9", "_1# c #DEE8E7", ":1# c #D9E4E0", "<1# c #D0D9D6", "[1# c #C9D2CF", "}1# c #B0B9B4", "|1# c #B9C3BB", "11# c #B8C2BA", "21# c #707A6F", "31# c #4E594B", "41# c #8D9888", "51# c #5D6857", "61# c #1E2918", "71# c #212D19", "81# c #2E3A26", "91# c #35402F", "01# c #444A3E", "a1# c #3B4137", "b1# c #2C3228", "c1# c #292728", "d1# c #212322", "e1# c #202221", "f1# c #1F2120", "g1# c #1F2420", "h1# c #1E2420", "i1# c #1D231F", "j1# c #1B211D", "k1# c #1B201C", "l1# c #191E1A", "m1# c #180F0A", "n1# c #190E08", "o1# c #1B0D0A", "p1# c #1B0E08", "q1# c #1C0D08", "r1# c #1F0D09", "s1# c #230E09", "t1# c #250D09", "u1# c #2B120D", "v1# c #2F140D", "w1# c #341510", "x1# c #50201E", "y1# c #51201C", "z1# c #511F1E", "A1# c #4B1E1B", "B1# c #441D16", "C1# c #4C2017", "D1# c #4D1E14", "E1# c #4B1B11", "F1# c #4C1C12", "G1# c #501E15", "H1# c #561F18", "I1# c #5A211A", "J1# c #5B201A", "K1# c #591E18", "L1# c #581B16", "M1# c #561914", "N1# c #571A15", "O1# c #5B140E", "P1# c #5D140E", "Q1# c #5F140F", "R1# c #601510", "S1# c #6E2016", "T1# c #6E2014", "U1# c #6E2215", "V1# c #6D1B10", "W1# c #7E1B16", "X1# c #861E1B", "Y1# c #8A1A19", "Z1# c #8C1A1A", "`1# c #8E1A1B", " 2# c #8E1C1C", ".2# c #8F1B1C", "+2# c #8F1D1C", "@2# c #921E1E", "#2# c #92211D", "$2# c #95221F", "%2# c #93221E", "&2# c #93201D", "*2# c #91201A", "=2# c #921F1A", "-2# c #92211B", ";2# c #95221B", ">2# c #952019", ",2# c #96211A", "'2# c #961F19", ")2# c #981E19", "!2# c #991E19", "~2# c #991E17", "{2# c #9A1F17", "]2# c #9A2118", "^2# c #9B2018", "/2# c #9D2119", "(2# c #A0211A", "_2# c #A1221B", ":2# c #A2231C", "<2# c #A4251E", "[2# c #A1261E", "}2# c #A0271E", "|2# c #9E281E", "12# c #9D281E", "22# c #9B291E", "32# c #9B2D20", "42# c #9A2C1D", "52# c #9C2E1F", "62# c #9F3124", "72# c #A03223", "82# c #9E3023", "92# c #9C2E21", "02# c #9D2F20", "a2# c #9E3021", "b2# c #9B2D1E", "c2# c #912C22", "d2# c #8F2F23", "e2# c #8F2F21", "f2# c #8E2E20", "g2# c #903321", "h2# c #8F331E", "i2# c #8E341C", "j2# c #90361E", "k2# c #90391E", "l2# c #923B20", "m2# c #943D21", "n2# c #943F22", "o2# c #954021", "p2# c #974424", "q2# c #974724", "r2# c #9E4E2B", "s2# c #A75732", "t2# c #AB5C35", "u2# c #AC5D34", "v2# c #B06337", "w2# c #B76A3C", "x2# c #B36938", "y2# c #B46B38", "z2# c #B56E38", "A2# c #BB753A", "B2# c #C78146", "C2# c #CD874B", "D2# c #C47E42", "E2# c #B77136", "F2# c #A9622E", "G2# c #A55F2C", "H2# c #A35B2B", "I2# c #A15A2C", "J2# c #A15A2E", "K2# c #9C572D", "L2# c #955228", "M2# c #8E4D25", "N2# c #8C4B25", "O2# c #894925", "P2# c #854623", "Q2# c #804422", "R2# c #7D4021", "S2# c #7B4022", "T2# c #794022", "U2# c #7A4526", "V2# c #744122", "W2# c #703F21", "X2# c #6D3E20", "Y2# c #6A3E21", "Z2# c #653C20", "`2# c #453621", " 3# c #433623", ".3# c #413121", "+3# c #3F2F20", "@3# c #3D2C24", "#3# c #3D3930", "$3# c #353229", "%3# c #30322F", "&3# c #2F312E", "*3# c #2D322E", "=3# c #2C302F", "-3# c #2B2F2E", ";3# c #2B302C", ">3# c #2E3426", ",3# c #383F2F", "'3# c #434A3A", ")3# c #5B6250", "!3# c #6C7361", "~3# c #767D6B", "{3# c #89917C", "]3# c #949B89", "^3# c #8A917F", "/3# c #646C5D", "(3# c #373F32", "_3# c #8E988D", ":3# c #C4CEC5", "<3# c #EDF7EE", "[3# c #F8FFFB", "}3# c #EAF5ED", "|3# c #DFEAE4", "13# c #D2E0E1", "23# c #D1DAE3", "33# c #D1D8E2", "43# c #D2D9E3", "53# c #D5D9E4", "63# c #AEB1BA", "73# c #B7B6BE", "83# c #B4B2B5", "93# c #ADABAC", "03# c #4E483C", "a3# c #5C564A", "b3# c #686055", "c3# c #6D6359", "d3# c #D6D1BE", "e3# c #0F0C00", "f3# c #211B0D", "g3# c #311813", "h3# c #54231F", "i3# c #7B3631", "j3# c #853A37", "k3# c #914744", "l3# c #984D4A", "m3# c #944946", "n3# c #994B49", "o3# c #9B4A49", "p3# c #983F41", "q3# c #973B3E", "r3# c #93373A", "s3# c #88302F", "t3# c #903A3D", "u3# c #923D40", "v3# c #913C3F", "w3# c #89373B", "x3# c #88363A", "y3# c #8A383E", "z3# c #86343A", "A3# c #8B3A40", "B3# c #96474C", "C3# c #9D4E53", "D3# c #994D51", "E3# c #904549", "F3# c #8D4247", "G3# c #8F474B", "H3# c #954C53", "I3# c #A0575E", "J3# c #984F58", "K3# c #9C4F59", "L3# c #A1515C", "M3# c #9A4856", "N3# c #8F3B4A", "O3# c #802022", "P3# c #71181A", "Q3# c #652823", "R3# c #532822", "S3# c #3C382F", "T3# c #BDB9AE", "U3# c #C2BEB3", "V3# c #9B9984", "W3# c #471909", "X3# c #782E25", "Y3# c #82322B", "Z3# c #89342F", "`3# c #8A2F2C", " 4# c #6A2627", ".4# c #4B2A21", "+4# c #38251E", "@4# c #B7A9A8", "#4# c #897A63", "$4# c #665239", "%4# c #523C2E", "&4# c #5D4C44", "*4# c #645751", "=4# c #746A69", "-4# c #8A8184", ";4# c #9A9599", ">4# c #A29DA3", ",4# c #A29FA6", "'4# c #929A9D", ")4# c #949EA0", "!4# c #99A4A8", "~4# c #ACB3BD", "{4# c #B1B5C0", "]4# c #B8BAC6", "^4# c #BCC0CB", "/4# c #C4CFC9", "(4# c #AAB5AF", "_4# c #8A948C", ":4# c #A9B3AB", "<4# c #7A847B", "[4# c #BCC6BB", "}4# c #98A297", "|4# c #3A4439", "14# c #6A7565", "24# c #8B9685", "34# c #AAB5A4", "44# c #747F6E", "54# c #2D3925", "64# c #1C2814", "74# c #202C18", "84# c #313A29", "94# c #30362A", "04# c #30362C", "a4# c #252B21", "b4# c #232522", "c4# c #1F2521", "d4# c #1C2520", "e4# c #1B241F", "f4# c #1A231E", "g4# c #191F1B", "h4# c #181E1A", "i4# c #16110D", "j4# c #1E0F0C", "k4# c #220D08", "l4# c #240C08", "m4# c #270E09", "n4# c #2A0E0A", "o4# c #2E0F0A", "p4# c #320F09", "q4# c #3E1911", "r4# c #421A12", "s4# c #55251B", "t4# c #57251C", "u4# c #60231E", "v4# c #5C1F1A", "w4# c #5A1F1B", "x4# c #571E17", "y4# c #561C18", "z4# c #531C15", "A4# c #501B15", "B4# c #4F1A12", "C4# c #4D1B14", "D4# c #4E1E14", "E4# c #551F15", "F4# c #571D12", "G4# c #561C11", "H4# c #581C12", "I4# c #5A1E14", "J4# c #5E1F16", "K4# c #612118", "L4# c #66211A", "M4# c #781E15", "N4# c #732012", "O4# c #762013", "P4# c #741E11", "Q4# c #731B0F", "R4# c #71190D", "S4# c #73190E", "T4# c #771B10", "U4# c #7C1B12", "V4# c #821D15", "W4# c #831C15", "X4# c #911B1B", "Y4# c #961B1D", "Z4# c #981D1F", "`4# c #981E1D", " 5# c #971C1E", ".5# c #961C1B", "+5# c #9A201D", "@5# c #991F1A", "#5# c #971D1A", "$5# c #961C17", "%5# c #971E16", "&5# c #9A2119", "*5# c #961F17", "=5# c #941E14", "-5# c #951C14", ";5# c #961D14", ">5# c #981F16", ",5# c #981D16", "'5# c #961B13", ")5# c #991C16", "!5# c #991D15", "~5# c #9B1C16", "{5# c #9B1C15", "]5# c #9D1E17", "^5# c #9B1F17", "/5# c #9E1F18", "(5# c #A01F19", "_5# c #A31F1A", ":5# c #A4201B", "<5# c #A5211C", "[5# c #A3221C", "}5# c #A0241C", "|5# c #9F241C", "15# c #9E251C", "25# c #9C261C", "35# c #9B261C", "45# c #A02C1F", "55# c #9D2C1E", "65# c #9E2D1F", "75# c #A13022", "85# c #9F2E20", "95# c #A02F21", "05# c #9C2B1D", "a5# c #9C2C20", "b5# c #972D20", "c5# c #942E22", "d5# c #942C21", "e5# c #922C1E", "f5# c #922E1E", "g5# c #94311E", "h5# c #94311C", "i5# c #95321B", "j5# c #95351D", "k5# c #97371F", "l5# c #993920", "m5# c #9B3B22", "n5# c #9C3E22", "o5# c #9B4023", "p5# c #984221", "q5# c #984420", "r5# c #9E4A26", "s5# c #A8542F", "t5# c #AD5A32", "u5# c #AF5C32", "v5# c #B56439", "w5# c #BD6C3D", "x5# c #C06F40", "y5# c #C07241", "z5# c #C27541", "A5# c #C57A43", "B5# c #CC8148", "C5# c #CD8248", "D5# c #C0753B", "E5# c #B1662F", "F5# c #AE6030", "G5# c #AB5C31", "H5# c #A95A31", "I5# c #A75A30", "J5# c #A65831", "K5# c #A1562F", "L5# c #9A502B", "M5# c #964C29", "N5# c #944B2A", "O5# c #914828", "P5# c #8B4426", "Q5# c #854023", "R5# c #833D23", "S5# c #803D22", "T5# c #803F23", "U5# c #75391D", "V5# c #6E3719", "W5# c #6D371B", "X5# c #6F3C1F", "Y5# c #6C3D23", "Z5# c #65391E", "`5# c #5D351C", " 6# c #55351E", ".6# c #50341C", "+6# c #4B321C", "@6# c #362420", "#6# c #311F1D", "$6# c #331F21", "%6# c #2F1F20", "&6# c #40362D", "*6# c #3B392D", "=6# c #363428", "-6# c #333027", ";6# c #2F3130", ">6# c #2E3231", ",6# c #2D3132", "'6# c #2C3031", ")6# c #202618", "!6# c #272E1E", "~6# c #383F2D", "{6# c #424937", "]6# c #48503B", "^6# c #626A55", "/6# c #7F8772", "(6# c #878F7A", "_6# c #6E7766", ":6# c #687061", "<6# c #5F6758", "[6# c #3C4437", "}6# c #091406", "|6# c #151F14", "16# c #6B756A", "26# c #BAC4BB", "36# c #F4FFF6", "46# c #EFFAF2", "56# c #E5F2EB", "66# c #D9E6DF", "76# c #CFDBD7", "86# c #CBDAD5", "96# c #CEDDDA", "06# c #D2DBE4", "a6# c #D3DAE4", "b6# c #AFB2BB", "c6# c #B6B4BF", "d6# c #B3B1B6", "e6# c #AAA8A9", "f6# c #797268", "g6# c #615B4F", "h6# c #73665D", "i6# c #BDB5AA", "j6# c #D3CEBB", "k6# c #7A7764", "l6# c #32311F", "m6# c #1C1A0B", "n6# c #38211B", "o6# c #7F3630", "p6# c #873935", "q6# c #8B3D39", "r6# c #974C49", "s6# c #964B48", "t6# c #924744", "u6# c #964846", "v6# c #9B4B4A", "w6# c #9C4B4A", "x6# c #973E40", "y6# c #943A3C", "z6# c #863031", "A6# c #8C3A40", "B6# c #8C3B41", "C6# c #8D3C42", "D6# c #93474B", "E6# c #984C50", "F6# c #92474B", "G6# c #8F4448", "H6# c #954A4F", "I6# c #A2575C", "J6# c #96494F", "K6# c #8F3F48", "L6# c #92414A", "M6# c #9A444F", "N6# c #973F4B", "O6# c #903642", "P6# c #571610", "Q6# c #701719", "R6# c #70171B", "S6# c #6F191A", "T6# c #552823", "U6# c #BFBBB0", "V6# c #3D1806", "W6# c #481A0A", "X6# c #68261A", "Y6# c #86362F", "Z6# c #8F3A35", "`6# c #8D322F", " 7# c #6F2421", ".7# c #542722", "+7# c #3F2621", "@7# c #3B2A23", "#7# c #3D342F", "$7# c #645B56", "%7# c #B9ABAA", "&7# c #827259", "*7# c #735F46", "=7# c #584235", "-7# c #57453B", ";7# c #5E4F48", ">7# c #807677", ",7# c #90878C", "'7# c #9D989E", ")7# c #B5B9C5", "!7# c #9CA7A1", "~7# c #A0ABA3", "{7# c #A7B2AC", "]7# c #939B8E", "^7# c #8A9285", "/7# c #8B9386", "(7# c #B3BBAE", "_7# c #889081", ":7# c #404839", "<7# c #707869", "[7# c #A3AC9B", "}7# c #9EA796", "|7# c #666F5C", "17# c #333C29", "27# c #262F1C", "37# c #212A17", "47# c #252B1F", "57# c #2F352B", "67# c #3B3E37", "77# c #292526", "87# c #1E2221", "97# c #202423", "07# c #212524", "a7# c #20221F", "b7# c #1C2723", "c7# c #1C2522", "d7# c #1A2320", "e7# c #1A1613", "f7# c #29110F", "g7# c #2E0F0C", "h7# c #30110E", "i7# c #34130E", "j7# c #3B1610", "k7# c #3F1813", "l7# c #481B15", "m7# c #64241A", "n7# c #67231A", "o7# c #5C1C13", "p7# c #7D1C13", "q7# c #7E1C13", "r7# c #771B0E", "s7# c #771E10", "t7# c #7A1E11", "u7# c #791D10", "v7# c #781A0E", "w7# c #79190D", "x7# c #7B190E", "y7# c #7F1A10", "z7# c #811A11", "A7# c #841C13", "B7# c #851D14", "C7# c #871C14", "D7# c #871A13", "E7# c #8C1D16", "F7# c #901F19", "G7# c #941A19", "H7# c #971B1B", "I7# c #991D1D", "J7# c #991D1B", "K7# c #961A18", "L7# c #981C1A", "M7# c #9A1F1A", "N7# c #9C211C", "O7# c #9B2019", "P7# c #971C15", "Q7# c #991E16", "R7# c #9C2119", "S7# c #951C11", "T7# c #941B12", "U7# c #981D15", "V7# c #991F14", "W7# c #981C14", "X7# c #961A10", "Y7# c #9A1E16", "Z7# c #9A1E14", "`7# c #9C1D16", " 8# c #9C1D14", ".8# c #9D1C16", "+8# c #9D1D14", "@8# c #9E1D17", "#8# c #9F1E18", "$8# c #A21E19", "%8# c #A5201B", "&8# c #A2211B", "*8# c #9F231B", "=8# c #9E231B", "-8# c #9B251B", ";8# c #9A251B", ">8# c #9F2B1C", ",8# c #9E2A1B", "'8# c #A12D1E", ")8# c #9C2819", "!8# c #A32F20", "~8# c #A22E1F", "{8# c #9D291A", "]8# c #972B1F", "^8# c #98291E", "/8# c #95291C", "(8# c #962A1D", "_8# c #962C1C", ":8# c #972C1C", "<8# c #962D1A", "[8# c #972E1B", "}8# c #972E19", "|8# c #99301B", "18# c #9C331D", "28# c #9E351F", "38# c #A03721", "48# c #A03A21", "58# c #A03C22", "68# c #9B3E1F", "78# c #993F1D", "88# c #9F4523", "98# c #A84E2B", "08# c #AD552F", "a8# c #B15931", "b8# c #BA623A", "c8# c #C26E40", "d8# c #CD794B", "e8# c #CB7949", "f8# c #C77543", "g8# c #C4733E", "h8# c #C5743D", "i8# c #BC6D35", "j8# c #B2602E", "k8# c #B25E32", "l8# c #B15C35", "m8# c #AE5934", "n8# c #AC5834", "o8# c #AA5634", "p8# c #A65333", "q8# c #A45133", "r8# c #9E4D30", "s8# c #9A492E", "t8# c #944429", "u8# c #8C3F25", "v8# c #893B24", "w8# c #893B25", "x8# c #8A3C26", "y8# c #8A3F28", "z8# c #7D3A20", "A8# c #75351A", "B8# c #713B23", "C8# c #67351C", "D8# c #5F311A", "E8# c #5C321A", "F8# c #56321C", "G8# c #51311A", "H8# c #4A2F1A", "I8# c #44321E", "J8# c #39301F", "K8# c #332421", "L8# c #302021", "M8# c #311E22", "N8# c #373528", "O8# c #2C2E2D", "P8# c #2D2E30", "Q8# c #2C3033", "R8# c #2B2F32", "S8# c #2A2E2F", "T8# c #2A2E2D", "U8# c #2C3224", "V8# c #282F1F", "W8# c #2D3422", "X8# c #2E3523", "Y8# c #2C341F", "Z8# c #3F4732", "`8# c #5B634E", " 9# c #5E6555", ".9# c #585F4F", "+9# c #596251", "@9# c #4C5445", "#9# c #2F3728", "$9# c #2E3629", "%9# c #636D62", "&9# c #C8D4C8", "*9# c #DDE9DF", "=9# c #ECF9F2", "-9# c #CCD9D2", ";9# c #D5DFE8", ">9# c #D4DEE7", ",9# c #D1D9E4", "'9# c #D2DAE5", ")9# c #B4B8C3", "!9# c #B3B1BC", "~9# c #AFAEB6", "{9# c #B0ADB4", "]9# c #A6A4A7", "^9# c #7B746A", "/9# c #494337", "(9# c #443E32", "_9# c #534D41", ":9# c #5F594D", "<9# c #746C61", "[9# c #71675D", "}9# c #7E7168", "|9# c #9A9581", "19# c #22150C", "29# c #78312D", "39# c #823430", "49# c #8C3B38", "59# c #92413E", "69# c #9C4E4C", "79# c #994D4D", "89# c #974949", "99# c #934545", "09# c #964647", "a9# c #9B4B4C", "b9# c #9C4A4C", "c9# c #984346", "d9# c #994346", "e9# c #92373C", "f9# c #8F3A3D", "g9# c #7C2A2C", "h9# c #96454B", "i9# c #8E3F42", "j9# c #904446", "k9# c #95494B", "l9# c #954B4C", "m9# c #93484C", "n9# c #91464A", "o9# c #914247", "p9# c #8D3A42", "q9# c #953B45", "r9# c #8B2E39", "s9# c #7C1E1F", "t9# c #791D1E", "u9# c #5A1412", "v9# c #6D1718", "w9# c #6D171A", "x9# c #6F1B1B", "y9# c #6C211E", "z9# c #582824", "A9# c #2F2524", "B9# c #C8C4B9", "C9# c #89856C", "D9# c #3E1907", "E9# c #4A1C0C", "F9# c #672519", "G9# c #893932", "H9# c #933E39", "I9# c #8F3431", "J9# c #6F2323", "K9# c #482720", "L9# c #3E2721", "M9# c #2C1811", "N9# c #3D2C25", "O9# c #413630", "P9# c #625453", "Q9# c #B7A7A7", "R9# c #958973", "S9# c #8C7C65", "T9# c #7C6A52", "U9# c #6D573F", "V9# c #543926", "W9# c #564035", "X9# c #877C80", "Y9# c #989198", "Z9# c #9D9CA2", "`9# c #A2ADB3", " 0# c #B1B8C2", ".0# c #C2CDC7", "+0# c #616C64", "@0# c #849086", "#0# c #B6C2B8", "$0# c #B0BAAF", "%0# c #8D9586", "&0# c #626B5A", "*0# c #87907F", "=0# c #99A291", "-0# c #788170", ";0# c #5F6857", ">0# c #7A8372", ",0# c #6F7865", "'0# c #3A4330", ")0# c #222B18", "!0# c #18210E", "~0# c #1F2817", "{0# c #1E2418", "]0# c #1D2120", "^0# c #1F2322", "/0# c #292A25", "(0# c #202521", "_0# c #1E2422", ":0# c #1D221E", "<0# c #361412", "[0# c #3D1412", "}0# c #3F1612", "|0# c #4D1D19", "10# c #5E281E", "20# c #61251D", "30# c #6A261B", "40# c #6D2519", "50# c #6D2114", "60# c #731813", "70# c #6C1F15", "80# c #681B11", "90# c #621A0E", "00# c #60180C", "a0# c #5D170B", "b0# c #5D190C", "c0# c #5F190D", "d0# c #651B10", "e0# c #731A14", "f0# c #721712", "g0# c #7C1B14", "h0# c #7E1B15", "i0# c #801B13", "j0# c #801B11", "k0# c #801B0F", "l0# c #7C1A0D", "m0# c #7C1C0E", "n0# c #7F1D10", "o0# c #7E1C0F", "p0# c #7E190D", "q0# c #7F190D", "r0# c #81190E", "s0# c #831B10", "t0# c #861B11", "u0# c #881C12", "v0# c #8B1C13", "w0# c #8A1B12", "x0# c #891810", "y0# c #8D1A13", "z0# c #921D16", "A0# c #911714", "B0# c #951919", "C0# c #981B19", "D0# c #941715", "E0# c #921712", "F0# c #951814", "G0# c #971C17", "H0# c #9F221C", "I0# c #9C211A", "J0# c #9B1E18", "K0# c #981F14", "L0# c #941E12", "M0# c #911B0F", "N0# c #931D11", "O0# c #992015", "P0# c #981E13", "Q0# c #951B10", "R0# c #9A2015", "S0# c #9B1F15", "T0# c #9D1E15", "U0# c #9B271A", "V0# c #9D2C1C", "W0# c #9C2B1B", "X0# c #9E2D1D", "Y0# c #9B2A1A", "Z0# c #982717", "`0# c #A02F1F", " a# c #A23121", ".a# c #A13020", "+a# c #9F2E1E", "@a# c #9A281D", "#a# c #99271C", "$a# c #982719", "%a# c #98281A", "&a# c #99291B", "*a# c #992A19", "=a# c #982918", "-a# c #992A17", ";a# c #9A2B18", ">a# c #9B2C18", ",a# c #9E2F1B", "'a# c #A0311D", ")a# c #A33420", "!a# c #A53622", "~a# c #A33921", "{a# c #9D3A1D", "]a# c #9A3B1B", "^a# c #9F411F", "/a# c #A84A28", "(a# c #AF512D", "_a# c #B45833", ":a# c #BE623B", "b# c #B7B1A5", ",b# c #B4AF9C", "'b# c #B7B29E", ")b# c #6C6753", "!b# c #2F1812", "~b# c #47221C", "{b# c #6E312E", "]b# c #783230", "^b# c #903C3A", "/b# c #974341", "(b# c #9F4F50", "_b# c #9A4E4E", ":b# c #964848", "c# c #4A513F", ",c# c #828977", "'c# c #979E8E", ")c# c #646B5B", "!c# c #252C1C", "~c# c #242B1B", "{c# c #212818", "]c# c #212719", "^c# c #20261C", "/c# c #21261F", "(c# c #212620", "_c# c #222721", ":c# c #272924", "d# c #B34F2F", ",d# c #BA5835", "'d# c #BE5C37", ")d# c #BF5F37", "!d# c #CC6C44", "~d# c #C9693F", "{d# c #C36339", "]d# c #BB5E32", "^d# c #B75A2E", "/d# c #B45829", "(d# c #B35728", "_d# c #B3562B", ":d# c #B65534", "e# c #984241", ",e# c #9A4644", "'e# c #974748", ")e# c #97484B", "!e# c #97474A", "~e# c #944447", "{e# c #9E4C50", "]e# c #A14C51", "^e# c #9C474C", "/e# c #943D43", "(e# c #8E393C", "_e# c #943F42", ":e# c #943F44", "f# c #231917", ",f# c #21120F", "'f# c #230F0E", ")f# c #2E1413", "!f# c #351916", "~f# c #3D1E1B", "{f# c #411F1D", "]f# c #4B2220", "^f# c #5B201C", "/f# c #6D1F15", "(f# c #721E13", "_f# c #751F12", ":f# c #771D12", "g# c #A72D20", ",g# c #A82E1F", "'g# c #A92F20", ")g# c #A73220", "!g# c #A2341B", "~g# c #A13519", "{g# c #A2391C", "]g# c #A83F21", "^g# c #B1482B", "/g# c #B84F31", "(g# c #BC5333", "_g# c #BD5633", ":g# c #C45D3A", "h# c #923B41", ",h# c #842D33", "'h# c #8E393E", ")h# c #933E43", "!h# c #913F45", "~h# c #8F3D43", "{h# c #8C3B42", "]h# c #8D3C45", "^h# c #8E3E47", "/h# c #8D3D46", "(h# c #8A3A43", "_h# c #883841", ":h# c #873A42", "i# c #51211F", ",i# c #70211A", "'i# c #791D12", ")i# c #7C1E14", "!i# c #7F1F13", "~i# c #831E14", "{i# c #7E1511", "]i# c #7A1711", "^i# c #761911", "/i# c #731910", "(i# c #741A11", "_i# c #7B1812", ":i# c #801A15", "j# c #AE412D", ",j# c #AD3F2E", "'j# c #A83D2B", ")j# c #A63829", "!j# c #A33828", "~j# c #A7392A", "{j# c #A73C2C", "]j# c #A9422F", "^j# c #A23D29", "/j# c #9A3722", "(j# c #963522", "_j# c #933722", ":j# c #8F3723", "k# c #913C43", ",k# c #90363F", "'k# c #892934", ")k# c #8B2A35", "!k# c #5A1915", "~k# c #641B12", "{k# c #621910", "]k# c #671718", "^k# c #6E2020", "/k# c #492322", "(k# c #171506", "_k# c #413D31", ":k# c #CCC8BC", "l# c #811512", ",l# c #801914", "'l# c #831C13", ")l# c #831D11", "!l# c #841C11", "~l# c #86160B", "{l# c #8F1A11", "]l# c #8F1A13", "^l# c #901A18", "/l# c #921A19", "(l# c #941E1A", "_l# c #951E1A", ":l# c #941D17", "m# c #391F12", ",m# c #35302C", "'m# c #222421", ")m# c #222625", "!m# c #232726", "~m# c #232728", "{m# c #2D2D2F", "]m# c #2F2F31", "^m# c #33362B", "/m# c #292F23", "(m# c #2D3329", "_m# c #32382C", ":m# c #333B30", "n# c #241B16", ",n# c #281818", "'n# c #180808", ")n# c #1D0F0F", "!n# c #6A5C5C", "~n# c #B8AAAA", "{n# c #A19FA2", "]n# c #A3A1A4", "^n# c #A2A39E", "/n# c #A09382", "(n# c #988672", "_n# c #8C7764", ":n# c #79634C", "o# c #97271C", ",o# c #98281D", "'o# c #98281C", ")o# c #99291E", "!o# c #99291D", "~o# c #9A2A1F", "{o# c #9B2B1F", "]o# c #9B2B20", "^o# c #9F2A20", "/o# c #A02A20", "(o# c #9D271D", "_o# c #9D241C", ":o# c #9D221A", "p# c #B2B1B7", ",p# c #B0AFB4", "'p# c #B6B4B5", ")p# c #ADACAA", "!p# c #484236", "~p# c #595146", "{p# c #645A50", "]p# c #6C5F56", "^p# c #796F65", "/p# c #635B50", "(p# c #D1CBBB", "_p# c #9D9884", ":p# c #26210B", "q# c #9FACB5", ",q# c #A7B3BF", "'q# c #AAB6C2", ")q# c #A3AFBB", "!q# c #A3ACBB", "~q# c #A8B2BC", "{q# c #A4AFA9", "]q# c #879389", "^q# c #8C988C", "/q# c #768372", "(q# c #5D6A58", "_q# c #3E4C35", ":q# c #66745B", "r# c #A7341F", ",r# c #A33119", "'r# c #A6341C", ")r# c #AA3722", "!r# c #AB3823", "~r# c #A93621", "{r# c #AB3622", "]r# c #A93422", "^r# c #AB3322", "/r# c #AA3222", "(r# c #AE311D", "_r# c #AE2F1C", ":r# c #AC2D1A", "s# c #8A394C", ",s# c #883748", "'s# c #843646", ")s# c #843845", "!s# c #863A47", "~s# c #8B3F4B", "{s# c #92454F", "]s# c #903A45", "^s# c #8E343E", "/s# c #581713", "(s# c #611B11", "_s# c #5F190F", ":s# c #631610", "t# c #2A1818", ",t# c #36231F", "'t# c #402720", ")t# c #5D2629", "!t# c #5D2226", "~t# c #5D1F22", "{t# c #611F21", "]t# c #662022", "^t# c #6A2021", "/t# c #6B1B1C", "(t# c #741918", "_t# c #751516", ":t# c #781615", "u# c #AD2C19", ",u# c #AA2916", "'u# c #A62716", ")u# c #A32517", "!u# c #A02619", "~u# c #A42B20", "{u# c #A02B21", "]u# c #9E2C22", "^u# c #9C2B23", "/u# c #9C2B25", "(u# c #9A2B24", "_u# c #982B24", ":u# c #9A3023", "v# c #883B4B", ",v# c #904653", "'v# c #934A55", ")v# c #944852", "!v# c #913B46", "~v# c #8A353A", "{v# c #852F32", "]v# c #571813", "^v# c #611610", "/v# c #732525", "(v# c #502627", "_v# c #1C1B09", ":v# c #4C493A", "w# c #871610", ",w# c #881510", "'w# c #841710", ")w# c #851A12", "!w# c #861B13", "~w# c #851811", "{w# c #881912", "]w# c #891611", "^w# c #921618", "/w# c #961519", "(w# c #99191A", "_w# c #9B1917", ":w# c #A01B16", "x# c #3E3A2E", ",x# c #5C5248", "'x# c #665C52", ")x# c #696156", "!x# c #746C5F", "~x# c #736B5E", "{x# c #6E6659", "]x# c #696355", "^x# c #B6ABA7", "/x# c #C1BBAB", "(x# c #514C38", "_x# c #241E08", ":x# c #211904", "y# c #69432E", ",y# c #5E3927", "'y# c #583428", ")y# c #5A3932", "!y# c #604240", "~y# c #644A4D", "{y# c #664F55", "]y# c #69555E", "^y# c #7B6B78", "/y# c #8C808E", "(y# c #9B90A0", "_y# c #9892A0", ":y# c #8F8D9B", "z# c #961B14", ",z# c #A0251E", "'z# c #9E231C", ")z# c #9F241D", "!z# c #9F2520", "~z# c #A02623", "{z# c #A32823", "]z# c #9E1F19", "^z# c #991A14", "/z# c #A4231D", "(z# c #A1201A", "_z# c #A22219", ":z# c #A3231A", "A# c #261B09", ",A# c #281B0B", "'A# c #2C1C0F", ")A# c #2D170C", "!A# c #391D11", "~A# c #422112", "{A# c #4E261A", "]A# c #592B1E", "^A# c #622C20", "/A# c #843332", "(A# c #90393F", "_A# c #943C48", ":A# c #953D4D", "B# c #59372D", ",B# c #583730", "'B# c #573937", ")B# c #593F40", "!B# c #634D50", "~B# c #6E5A63", "{B# c #786873", "]B# c #857987", "^B# c #948798", "/B# c #958D9C", "(B# c #938F9E", "_B# c #9695A5", ":B# c #9A9CAB", "C# c #AC2F19", ",C# c #AA3021", "'C# c #A52D1F", ")C# c #A22A1C", "!C# c #9E2618", "~C# c #9D2515", "{C# c #9C2716", "]C# c #9B2718", "^C# c #9A2619", "/C# c #922217", "(C# c #902118", "_C# c #8E231D", ":C# c #88201F", "D# c #843F52", ",D# c #854458", "'D# c #8C4E65", ")D# c #894E64", "!D# c #9A6078", "~D# c #996279", "{D# c #976077", "]D# c #935C73", "^D# c #955B73", "/D# c #975D73", "(D# c #905269", "_D# c #864661", ":D# c #8F4A67", "E# c #7C170D", ",E# c #7E150F", "'E# c #811812", ")E# c #881B16", "!E# c #921614", "~E# c #951917", "{E# c #9A1B15", "]E# c #981913", "^E# c #9C1F19", "/E# c #A5241E", "(E# c #A21F17", "_E# c #A22217", ":E# c #AC2D24", "F# c #9A4D5F", ",F# c #90475A", "'F# c #8A465B", ")F# c #915267", "!F# c #985D73", "~F# c #99637B", "{F# c #935F76", "]F# c #98647A", "^F# c #9B657C", "/F# c #956074", "(F# c #8E576C", "_F# c #8D5369", ":F# c #945570", "G# c #A12118", ",G# c #A7271A", "'G# c #A9291C", ")G# c #AB2D21", "!G# c #AB2C23", "~G# c #AC2E22", "{G# c #AD2F21", "]G# c #AE3022", "^G# c #AE3021", "/G# c #AC2E1F", "(G# c #AE311F", "_G# c #AB2E1A", ":G# c #A82B17", "H# c #BA8DA2", ",H# c #BC8CA2", "'H# c #AD7C91", ")H# c #A27186", "!H# c #A36F85", "~H# c #9F657D", "{H# c #9F637C", "]H# c #9D5F76", "^H# c #9A5B70", "/H# c #99596A", "(H# c #9B5766", "_H# c #9B535F", ":H# c #995059", "I# c #AC2E20", ",I# c #A92B1C", "'I# c #AC2F1D", ")I# c #AD301E", "!I# c #A92C1A", "~I# c #A52816", "{I# c #A12616", "]I# c #A32A1F", "^I# c #A62D22", "/I# c #A52C21", "(I# c #9C2318", "_I# c #A1271C", ":I# c #9D201A", "J# c #A67990", ",J# c #A57B91", "'J# c #A37C91", ")J# c #AB8499", "!J# c #B48DA0", "~J# c #AE8498", "{J# c #9D7486", "]J# c #966B7E", "^J# c #9B6E82", "/J# c #A9758B", "(J# c #A46F83", "_J# c #9E677A", ":J# c #9C6173", "K# c #A92B1F", ",K# c #A62819", "'K# c #A7291A", ")K# c #A82A1B", "!K# c #A72A18", "~K# c #A52718", "{K# c #A42A1D", "]K# c #A12120", "^K# c #9F1F1E", "/K# c #961F1B", "(K# c #951F1B", "_K# c #932019", ":K# c #94231B", "L# c #9E6876", ",L# c #9D636F", "'L# c #985A65", ")L# c #964F55", "!L# c #8C4448", "~L# c #8D4046", "{L# c #8E3F45", "]L# c #813036", "^L# c #80292F", "/L# c #6B2A26", "(L# c #8B856D", "_L# c #7A7359", ":L# c #442914", "M# c #9F1F20", ",M# c #9E1E1F", "'M# c #9B1F1D", ")M# c #9A1D19", "!M# c #89231E", "~M# c #63231A", "{M# c #4A1B13", "]M# c #461B12", "^M# c #492119", "/M# c #49231A", "(M# c #46241A", "_M# c #422217", ":M# c #3C1E14", "N# c #93575F", ",N# c #904F55", "'N# c #914C51", ")N# c #8B3C41", "!N# c #8B3A41", "~N# c #883740", "{N# c #832A30", "]N# c #581912", "^N# c #561A12", "/N# c #585246", "(N# c #9F9A86", "_N# c #787157", ":N# c #6A6045", "O# c #A82628", ",O# c #A62328", "'O# c #A32025", ")O# c #A11E23", "!O# c #9E1D21", "~O# c #9D1D1E", "{O# c #9E1E1D", "]O# c #A01C17", "^O# c #A11D18", "/O# c #911C15", "(O# c #901F17", "_O# c #8D2019", ":O# c #8C2119", "P# c #945F67", ",P# c #8C5359", "'P# c #8A494F", ")P# c #8C474A", "!P# c #86333D", "~P# c #781E20", "{P# c #5A2A26", "]P# c #D3CBC0", "^P# c #7F785E", "/P# c #70664B", "(P# c #361703", "_P# c #4A2014", ":P# c #6A382D", "Q# c #5E2423", ",Q# c #5A2223", "'Q# c #4E1E1E", ")Q# c #471B1A", "!Q# c #411B1A", "~Q# c #3A1B18", "{Q# c #361D19", "]Q# c #161A19", "^Q# c #1A1E1F", "/Q# c #1C2023", "(Q# c #1D2225", "_Q# c #202425", ":Q# c #231E24", "R# c #432D16", ",R# c #311802", "'R# c #351602", ")R# c #6F3D32", "!R# c #884D45", "~R# c #833F36", "{R# c #842722", "]R# c #77251A", "^R# c #652120", "/R# c #622021", "(R# c #551E19", "_R# c #33211F", ":R# c #261B19", "S# c #CDD3D1", ",S# c #B2B3AE", "'S# c #706E62", ")S# c #5C584C", "!S# c #37372B", "~S# c #3A3A2E", "{S# c #5C4E43", "]S# c #5B4B3E", "^S# c #5F4F42", "/S# c #6B5D50", "(S# c #74685C", "_S# c #CFC9B9", ":S# c #291D0F", "T# c #000600", ",T# c #24321B", "'T# c #97A490", ")T# c #8A9682", "!T# c #505B4A", "~T# c #101809", "{T# c #141710", "]T# c #424240", "^T# c #3E3E3C", "/T# c #2F2120", "(T# c #311514", "_T# c #441C1C", ":T# c #702015", "U# c #251307", ",U# c #261005", "'U# c #38130D", ")U# c #431611", "!U# c #521D19", "~U# c #89312F", "{U# c #913C39", "]U# c #944040", "^U# c #99474B", "/U# c #9A4C5A", "(U# c #9C4E5B", "_U# c #964C4D", ":U# c #984C4E", "V# c #838C7B", ",V# c #3A4131", "'V# c #091501", ")V# c #3F4C38", "!V# c #85927E", "~V# c #94A18F", "{V# c #828D7C", "]V# c #565E4F", "^V# c #12180E", "/V# c #151610", "(V# c #201C1D", "_V# c #321915", ":V# c #361816", "W# c #994447", ",W# c #9B494D", "'W# c #9B4955", ")W# c #9D4A5A", "!W# c #9E4E59", "~W# c #964A4E", "{W# c #994A4F", "]W# c #98474D", "^W# c #9C4A56", "/W# c #9B4B56", "(W# c #8E424E", "_W# c #924C57", ":W# c #995260", "X# c #8D1C18", ",X# c #8E1D19", "'X# c #8D1B1A", ")X# c #8E1A1A", "!X# c #8E1B18", "~X# c #941C1B", "{X# c #991F1E", "]X# c #9B2120", "^X# c #9A201F", "/X# c #991F1C", "(X# c #9B1D1E", "_X# c #9D201E", ":X# c #981E1B", "Y# c #E5E4E9", ",Y# c #D3CDD1", "'Y# c #D8CCD0", ")Y# c #EAD7D9", "!Y# c #D6BDC0", "~Y# c #B19395", "{Y# c #A48082", "]Y# c #95666C", "^Y# c #8E595F", "/Y# c #8F585E", "(Y# c #8D5258", "_Y# c #834248", ":Y# c #893439", "Z# c #6A201F", ",Z# c #541D1A", "'Z# c #431A16", ")Z# c #3E1913", "!Z# c #3A1914", "~Z# c #361915", "{Z# c #1E1916", "]Z# c #151419", "^Z# c #131217", "/Z# c #19161D", "(Z# c #1A2111", "_Z# c #091000", ":Z# c #0A1101", "`# c #6C674A", ",`# c #4E4026", "'`# c #55452C", ")`# c #2F1902", "!`# c #381406", "~`# c #491B0E", "{`# c #8A2024", "]`# c #761D1F", "^`# c #6F1D1F", "/`# c #6D1D20", "(`# c #6A1E20", "_`# c #691D21", ":`# c #681E1F", "<`# c #652118", "[`# c #3C201D", "}`# c #331F20", "|`# c #382A2A", "1`# c #372428", "2`# c #3B282C", "3`# c #3D282D", "4`# c #1F080E", "5`# c #271016", "6`# c #645052", "7`# c #8E807F", "8`# c #BCB3AE", "9`# c #A8A795", "0`# c #B4B39F", "a`# c #B1B199", "b`# c #959579", "c`# c #686B4C", "d`# c #4A4B2B", "e`# c #3E3F1D", "f`# c #4E4D2E", "g`# c #5E5A3F", "h`# c #615D44", "i`# c #5F5848", "j`# c #594C44", "k`# c #514039", "l`# c #5A4942", "m`# c #676862", "n`# c #60665A", "o`# c #999F91", "p`# c #9CA393", "q`# c #727967", "r`# c #17200B", "s`# c #101B0B", "t`# c #3C4739", "u`# c #576156", "v`# c #41493E", "w`# c #2B3328", "x`# c #181411", "y`# c #252328", "z`# c #402416", "A`# c #4C2619", "B`# c #562A1F", "C`# c #77191A", "D`# c #78181A", "E`# c #761C11", "F`# c #741A0F", "G`# c #771F13", "H`# c #721810", "I`# c #881B14", "J`# c #931B1A", "K`# c #901D1A", "L`# c #8E1C1B", "M`# c #921C1A", "N`# c #981819", "O`# c #981A1B", "P`# c #9B1F1F", "Q`# c #9C2020", "R`# c #9A1E1C", "S`# c #A42417", "T`# c #A32316", "U`# c #A12314", "V`# c #A22416", "W`# c #A22418", "X`# c #A12219", "Y`# c #9B1E1A", "Z`# c #9C1C1B", "``# c #971B1D", " $ c #971A1E", ". $ c #9D1F22", "+ $ c #941E1E", "@ $ c #931F22", "# $ c #901F21", "$ $ c #8C1E1F", "% $ c #8A1C1F", "& $ c #891C21", "* $ c #881D23", "= $ c #871E23", "- $ c #851C21", "; $ c #651F1F", "> $ c #53201D", ", $ c #49211F", "' $ c #34201F", ") $ c #291D1D", "! $ c #141913", "~ $ c #111015", "{ $ c #121117", "] $ c #111016", "^ $ c #16151D", "/ $ c #0E1503", "( $ c #171E0C", "_ $ c #222917", ": $ c #18200B", "< $ c #646C57", "[ $ c #7B836E", "} $ c #A4AC95", "| $ c #B9C1AA", "1 $ c #C1C9B2", "2 $ c #D1DAC5", "3 $ c #DFEADA", "4 $ c #D8E4D8", "5 $ c #CDD7CC", "6 $ c #C3CDC2", "7 $ c #C6CEC3", "8 $ c #CFD7CA", "9 $ c #D6DCD2", "0 $ c #B8BAAF", "a $ c #B5B7AC", "b $ c #AEAEA2", "c $ c #626054", "d $ c #695D51", "e $ c #786E64", "f $ c #736A61", "g $ c #524E35", "h $ c #1A1600", "i $ c #170F00", "j $ c #301A0F", "k $ c #652325", "l $ c #752121", "m $ c #9E474D", "n $ c #9E4750", "o $ c #9B4351", "p $ c #9E4355", "q $ c #964A4C", "r $ c #964856", "s $ c #8D4350", "t $ c #8B4351", "u $ c #924B5B", "v $ c #985463", "w $ c #965968", "x $ c #976976", "y $ c #A17D89", "z $ c #CAB5BE", "A $ c #FAEDF6", "B $ c #FCF7FD", "C $ c #EEEDF2", "D $ c #EEF2F5", "E $ c #D7D7D9", "F $ c #DAD4D4", "G $ c #E8DADA", "H $ c #D8C3C2", "I $ c #BB9D9D", "J $ c #A37F81", "K $ c #96696C", "L $ c #996268", "M $ c #8C4F57", "N $ c #86474F", "O $ c #844349", "P $ c #7F3A3F", "Q $ c #913743", "R $ c #8F3443", "S $ c #8E2D36", "T $ c #8C2832", "U $ c #89252F", "V $ c #811D25", "W $ c #7C1B22", "X $ c #68312E", "Y $ c #3E3B2C", "Z $ c #D4CEC2", "` $ c #91907B", " .$ c #898971", "..$ c #817D62", "+.$ c #50492D", "@.$ c #4D4127", "#.$ c #45351C", "$.$ c #2F1B03", "%.$ c #2E1501", "&.$ c #351103", "*.$ c #44180D", "=.$ c #562016", "-.$ c #6C211B", ";.$ c #83251B", ">.$ c #83251D", ",.$ c #871F1E", "'.$ c #871D1D", ").$ c #6A1A1B", "!.$ c #59241C", "~.$ c #391F1E", "{.$ c #331D1F", "].$ c #352726", "^.$ c #29191A", "/.$ c #2F1C1E", "(.$ c #3C282A", "_.$ c #220C0F", ":.$ c #190306", "<.$ c #453132", "[.$ c #766764", "}.$ c #B1B09B", "|.$ c #A1A187", "1.$ c #75785B", "2.$ c #4B4E2F", "3.$ c #3B3F1E", "4.$ c #424323", "5.$ c #494A2A", "6.$ c #555436", "7.$ c #605C41", "8.$ c #4C3F37", "9.$ c #433630", "0.$ c #26291E", "a.$ c #4F5345", "b.$ c #606456", "c.$ c #404435", "d.$ c #141B0B", "e.$ c #0E190B", "f.$ c #1B251A", "g.$ c #162015", "h.$ c #151D12", "i.$ c #080D06", "j.$ c #12130D", "k.$ c #412517", "l.$ c #502A1D", "m.$ c #632D21", "n.$ c #682C21", "o.$ c #6E2A21", "p.$ c #7A171A", "q.$ c #782014", "r.$ c #741710", "s.$ c #73160F", "t.$ c #7E1512", "u.$ c #841815", "v.$ c #8A1B14", "w.$ c #8B1A14", "x.$ c #971718", "y.$ c #97191A", "z.$ c #9F2220", "A.$ c #A62520", "B.$ c #A12114", "C.$ c #A02214", "D.$ c #A12317", "E.$ c #A02118", "F.$ c #981A1D", "G.$ c #9E2023", "H.$ c #9C1E21", "I.$ c #931C1E", "J.$ c #941D21", "K.$ c #90191D", "L.$ c #8E1A1D", "M.$ c #8F1A20", "N.$ c #8D181E", "O.$ c #82191E", "P.$ c #652122", "Q.$ c #5F2323", "R.$ c #5C2626", "S.$ c #512526", "T.$ c #472524", "U.$ c #402423", "V.$ c #100F14", "W.$ c #121116", "X.$ c #100F15", "Y.$ c #0F0E14", "Z.$ c #141A0C", "`.$ c #1B2113", " +$ c #131A0A", ".+$ c #1D2414", "++$ c #222A15", "@+$ c #141C07", "#+$ c #101803", "$+$ c #2E361F", "%+$ c #404831", "&+$ c #474F38", "*+$ c #5A624D", "=+$ c #6D7665", "-+$ c #656D5E", ";+$ c #4B5344", ">+$ c #6C7264", ",+$ c #888C7E", "'+$ c #979B8D", ")+$ c #828477", "!+$ c #7C7E71", "~+$ c #7F8072", "{+$ c #A2A395", "]+$ c #0A0800", "^+$ c #33322D", "/+$ c #493B32", "(+$ c #685E52", "_+$ c #72685C", ":+$ c #726A5F", "<+$ c #DBD1C5", "[+$ c #877E6D", "}+$ c #1F1903", "|+$ c #231B06", "1+$ c #271A09", "2+$ c #42261B", "3+$ c #4E2921", "4+$ c #682023", "5+$ c #6F1F22", "6+$ c #973F3E", "7+$ c #9B4548", "8+$ c #9D464C", "9+$ c #9D434F", "0+$ c #9C4150", "a+$ c #9D4251", "b+$ c #98494C", "c+$ c #9A4C4C", "d+$ c #9A4A4D", "e+$ c #98484B", "f+$ c #94444D", "g+$ c #994B58", "h+$ c #984E5B", "i+$ c #935363", "j+$ c #9A6472", "k+$ c #A57B87", "l+$ c #9F7E89", "m+$ c #BEA2AE", "n+$ c #EEDAE3", "o+$ c #FCF1F9", "p+$ c #F2EDF3", "q+$ c #F1F0F5", "r+$ c #FBFCFF", "s+$ c #E7DDDE", "t+$ c #F8E6E6", "u+$ c #C7ADAE", "v+$ c #B59392", "w+$ c #B08889", "x+$ c #88575A", "y+$ c #9D6268", "z+$ c #8E4D55", "A+$ c #854249", "B+$ c #923842", "C+$ c #923844", "D+$ c #8D2E36", "E+$ c #651715", "F+$ c #66312D", "G+$ c #403D2E", "H+$ c #D5CFC3", "I+$ c #8F908A", "J+$ c #9B9A86", "K+$ c #888870", "L+$ c #706C51", "M+$ c #575137", "N+$ c #4A4329", "O+$ c #4F452C", "P+$ c #443820", "Q+$ c #2D2109", "R+$ c #2A1502", "S+$ c #311106", "T+$ c #41160F", "U+$ c #5F241C", "V+$ c #862419", "W+$ c #861D1A", "X+$ c #721911", "Y+$ c #701713", "Z+$ c #501E1D", "`+$ c #42201F", " @$ c #3D1F1D", ".@$ c #381E1D", "+@$ c #23100C", "@@$ c #473833", "#@$ c #A29F8C", "$@$ c #AAAA92", "%@$ c #AEB196", "&@$ c #A7AA8F", "*@$ c #86896C", "=@$ c #5B5B3F", "-@$ c #3F3F23", ";@$ c #4B4A2E", ">@$ c #413D32", ",@$ c #3B372C", "'@$ c #0D170C", ")@$ c #0F1B11", "!@$ c #101A11", "~@$ c #110B0D", "{@$ c #140E10", "]@$ c #20171A", "^@$ c #47271A", "/@$ c #552B1F", "(@$ c #7E1814", "_@$ c #781510", ":@$ c #871B19", "<@$ c #821613", "[@$ c #831611", "}@$ c #861710", "|@$ c #8D1E17", "1@$ c #8C1D14", "2@$ c #8B1A12", "3@$ c #8A1A0E", "4@$ c #8D1B10", "5@$ c #911918", "6@$ c #991918", "7@$ c #981817", "8@$ c #A72821", "9@$ c #A4251C", "0@$ c #9F2017", "a@$ c #9E1F16", "b@$ c #9C1E1F", "c@$ c #9D1F20", "d@$ c #9A1C1F", "e@$ c #991D1F", "f@$ c #982021", "g@$ c #962020", "h@$ c #931B1D", "i@$ c #8F1718", "j@$ c #941818", "k@$ c #951718", "l@$ c #931918", "m@$ c #901A1A", "n@$ c #8C1B1D", "o@$ c #811C22", "p@$ c #7B1E26", "q@$ c #791E25", "r@$ c #751E24", "s@$ c #711F25", "t@$ c #6F2025", "u@$ c #6C2126", "v@$ c #6E2D31", "w@$ c #60292C", "x@$ c #582627", "y@$ c #522124", "z@$ c #4B1F20", "A@$ c #471D1E", "B@$ c #411F1E", "C@$ c #191A1C", "D@$ c #101413", "E@$ c #1C2214", "F@$ c #1E2416", "G@$ c #202717", "H@$ c #252C1A", "I@$ c #272F1A", "J@$ c #303322", "K@$ c #464938", "L@$ c #4D503F", "M@$ c #5F6050", "N@$ c #888979", "O@$ c #2E2D28", "P@$ c #35342F", "Q@$ c #34332F", "R@$ c #585242", "S@$ c #665F4F", "T@$ c #6B6454", "U@$ c #706959", "V@$ c #746D5B", "W@$ c #79705F", "X@$ c #B3AEAB", "Y@$ c #B3ABA9", "Z@$ c #D7C7BA", "`@$ c #5D4F42", " #$ c #160F00", ".#$ c #1C1704", "+#$ c #261A0A", "@#$ c #621E1B", "##$ c #722022", "$#$ c #8F2E35", "%#$ c #933438", "&#$ c #98393D", "*#$ c #963C3E", "=#$ c #963D41", "-#$ c #A0474D", ";#$ c #A0464F", ">#$ c #9C454E", ",#$ c #9A434C", "'#$ c #99424A", ")#$ c #994749", "!#$ c #9C4848", "~#$ c #974247", "{#$ c #944149", "]#$ c #9D4D56", "^#$ c #8D4D5B", "/#$ c #864E5B", "(#$ c #875360", "_#$ c #996977", ":#$ c #AE828F", "<#$ c #BA96A0", "[#$ c #94767E", "}#$ c #FFF0F8", "|#$ c #F0EBF1", "1#$ c #F6F5FB", "2#$ c #EBEAEF", "3#$ c #C4BBBE", "4#$ c #DFCFD2", "5#$ c #E9D0D3", "6#$ c #C3A1A2", "7#$ c #AD8385", "8#$ c #A87878", "9#$ c #955D60", "0#$ c #9E5C60", "a#$ c #984F56", "b#$ c #863641", "c#$ c #863440", "d#$ c #87313E", "e#$ c #8C3643", "f#$ c #903844", "g#$ c #943A46", "h#$ c #963C46", "i#$ c #943942", "j#$ c #66171A", "k#$ c #661816", "l#$ c #5B1B12", "m#$ c #5D1610", "n#$ c #6C1A1C", "o#$ c #6A332C", "p#$ c #62332D", "q#$ c #55302A", "r#$ c #472B27", "s#$ c #CFCBC0", "t#$ c #B9B5AA", "u#$ c #8F928B", "v#$ c #8A8871", "w#$ c #7C7761", "x#$ c #706C53", "y#$ c #494329", "z#$ c #4D462C", "A#$ c #413A20", "B#$ c #2E0E03", "C#$ c #3C140C", "D#$ c #4E1D18", "E#$ c #892219", "F#$ c #852519", "G#$ c #842418", "H#$ c #87201B", "I#$ c #8A1E1C", "J#$ c #79251A", "K#$ c #551D1C", "L#$ c #4B1F1E", "M#$ c #43201E", "N#$ c #3E1F1D", "O#$ c #291610", "P#$ c #72655D", "Q#$ c #A4A28D", "R#$ c #B5B59B", "S#$ c #A7AA8D", "T#$ c #8E9174", "U#$ c #6C6F52", "V#$ c #505034", "W#$ c #424226", "X#$ c #45432A", "Y#$ c #4D4B32", "Z#$ c #5E5943", "`#$ c #5A523F", " $$ c #483D2B", ".$$ c #403927", "+$$ c #15150D", "@$$ c #0B150C", "#$$ c #0B170D", "$$$ c #0F1910", "%$$ c #0F1911", "&$$ c #111610", "*$$ c #241B20", "=$$ c #21180F", "-$$ c #45251A", ";$$ c #51271B", ">$$ c #7D1713", ",$$ c #7D1715", "'$$ c #8B1C15", ")$$ c #8C1B13", "!$$ c #8B190E", "~$$ c #8C1A0F", "{$$ c #8D1C0E", "]$$ c #8E1C11", "^$$ c #8E1B16", "/$$ c #971F20", "($$ c #931B1C", "_$$ c #921719", ":$$ c #941617", "<$$ c #8D1B1B", "[$$ c #861B21", "}$$ c #801B23", "|$$ c #7E1A24", "1$$ c #7A1922", "2$$ c #771A22", "3$$ c #751B24", "4$$ c #731E25", "5$$ c #712026", "6$$ c #762A2E", "7$$ c #70292D", "8$$ c #642629", "9$$ c #602426", "0$$ c #561E1F", "a$$ c #141519", "b$$ c #121619", "c$$ c #13171A", "d$$ c #141819", "e$$ c #161C12", "f$$ c #1C1F0E", "g$$ c #161707", "h$$ c #141503", "i$$ c #151606", "j$$ c #191A08", "k$$ c #222311", "l$$ c #212210", "m$$ c #4B4C3C", "n$$ c #1B1C0C", "o$$ c #242517", "p$$ c #33322E", "q$$ c #342F29", "r$$ c #3F3D2E", "s$$ c #5D5845", "t$$ c #615C49", "u$$ c #6D6654", "v$$ c #827765", "w$$ c #7D7260", "x$$ c #BCB4A9", "y$$ c #B5ADAA", "z$$ c #B1ABAB", "A$$ c #D6C6B9", "B$$ c #725C51", "C$$ c #332115", "D$$ c #190F03", "E$$ c #20180B", "F$$ c #92313A", "G$$ c #923339", "H$$ c #96373B", "I$$ c #9A3B3F", "J$$ c #9B3C40", "K$$ c #993E43", "L$$ c #9A3F44", "M$$ c #A1464D", "N$$ c #9F454E", "O$$ c #9C454D", "P$$ c #9B444C", "Q$$ c #984147", "R$$ c #9C474A", "S$$ c #9D4949", "T$$ c #9E4849", "U$$ c #9C4649", "V$$ c #994248", "W$$ c #97464D", "X$$ c #964E5A", "Y$$ c #8E4C58", "Z$$ c #844A58", "`$$ c #814E5D", " %$ c #885C6B", ".%$ c #9E7585", "+%$ c #AF8B99", "@%$ c #B0909B", "#%$ c #A58C92", "$%$ c #B9A4AB", "%%$ c #F1E2E9", "&%$ c #FEF3FB", "*%$ c #F1EAF1", "=%$ c #EFECF3", "-%$ c #D7D4DB", ";%$ c #C0B9C0", ">%$ c #DED2D6", ",%$ c #D7C2C7", "'%$ c #C5A8AC", ")%$ c #C29B9E", "!%$ c #A5777A", "~%$ c #8E5A5C", "{%$ c #A36769", "]%$ c #9C5559", "^%$ c #8B3E46", "/%$ c #863643", "(%$ c #873744", "_%$ c #883545", ":%$ c #873444", "<%$ c #873040", "[%$ c #8D3646", "}%$ c #913947", "|%$ c #953B44", "1%$ c #8D3136", "2%$ c #67181B", "3%$ c #691C12", "4%$ c #5D1D14", "5%$ c #5F1F16", "6%$ c #5C1D14", "7%$ c #6B1619", "8%$ c #6E181B", "9%$ c #701A1D", "0%$ c #5D322B", "a%$ c #452C27", "b%$ c #514F42", "c%$ c #CECABF", "d%$ c #B7B3AA", "e%$ c #8C8A73", "f%$ c #7D7862", "g%$ c #494228", "h%$ c #4E442B", "i%$ c #433920", "j%$ c #281705", "k%$ c #3D150D", "l%$ c #882118", "m%$ c #89201D", "n%$ c #601F1D", "o%$ c #44211F", "p%$ c #39201C", "q%$ c #190A03", "r%$ c #7B6E68", "s%$ c #C7BAB4", "t%$ c #A49E8E", "u%$ c #B8B89E", "v%$ c #96997C", "w%$ c #6D6D51", "x%$ c #4D4D31", "y%$ c #434329", "z%$ c #47472D", "A%$ c #4E4C35", "B%$ c #514F38", "C%$ c #5A553F", "D%$ c #403726", "E%$ c #383629", "F%$ c #13130B", "G%$ c #12120A", "H%$ c #0C0B07", "I%$ c #0B120A", "J%$ c #0A140B", "K%$ c #0D170E", "L%$ c #1E1518", "M%$ c #231A1D", "N%$ c #291E24", "O%$ c #25140C", "P%$ c #321B13", "Q%$ c #59291F", "R%$ c #702218", "S%$ c #801A18", "T%$ c #8E1F18", "U%$ c #8F2019", "V%$ c #88170F", "W%$ c #8D1B11", "X%$ c #8F1C17", "Y%$ c #931717", "Z%$ c #8D1D1C", "`%$ c #801B21", " &$ c #7C1820", ".&$ c #78171E", "+&$ c #77181E", "@&$ c #751A21", "#&$ c #741D23", "$&$ c #732125", "%&$ c #73282C", "&&$ c #702A2C", "*&$ c #6D2B2D", "=&$ c #652728", "-&$ c #592623", ";&$ c #0D1313", ">&$ c #0F1314", ",&$ c #15180D", "'&$ c #15190B", ")&$ c #141809", "!&$ c #121607", "~&$ c #111506", "{&$ c #181A0C", "]&$ c #191A0C", "^&$ c #121305", "/&$ c #191A0A", "(&$ c #212214", "_&$ c #232416", ":&$ c #32312D", "<&$ c #434031", "[&$ c #56513E", "}&$ c #625B49", "|&$ c #696250", "1&$ c #6F6855", "2&$ c #AFAAA7", "3&$ c #B4ACAA", "4&$ c #E8D8CB", "5&$ c #A49286", "6&$ c #1E0C00", "7&$ c #211308", "8&$ c #512218", "9&$ c #932F39", "0&$ c #95343D", "a&$ c #97383E", "b&$ c #9C3D41", "c&$ c #9D3E42", "d&$ c #9A3E41", "e&$ c #9C4146", "f&$ c #9E4348", "g&$ c #9F444B", "h&$ c #9E444D", "i&$ c #9A434B", "j&$ c #984149", "k&$ c #974046", "l&$ c #9D474A", "m&$ c #9C4C57", "n&$ c #A35764", "o&$ c #9F5866", "p&$ c #945665", "q&$ c #895363", "r&$ c #8A5A6A", "s&$ c #976C7F", "t&$ c #A57E91", "u&$ c #AC8A9A", "v&$ c #AA8C98", "w&$ c #BCA5AD", "x&$ c #C7B3BC", "y&$ c #E2D3DA", "z&$ c #F1E6EE", "A&$ c #ECE5ED", "B&$ c #E2DDE4", "C&$ c #C0BBC2", "D&$ c #BCB2BA", "E&$ c #E0D1D8", "F&$ c #D5BEC6", "G&$ c #B8979E", "H&$ c #B0858C", "I&$ c #9B686D", "J&$ c #895056", "K&$ c #9B5D62", "L&$ c #883B43", "M&$ c #8A3747", "N&$ c #8B2F34", "O&$ c #68191C", "P&$ c #6F191C", "Q&$ c #721C1F", "R&$ c #632E26", "S&$ c #5B3029", "T&$ c #512E28", "U&$ c #5C5A4D", "V&$ c #B6B2A9", "W&$ c #8E8C75", "X&$ c #7E7963", "Y&$ c #585137", "Z&$ c #2E230D", "`&$ c #291806", " *$ c #311308", ".*$ c #3F1811", "+*$ c #832118", "@*$ c #852318", "#*$ c #832317", "$*$ c #5B1E1B", "%*$ c #581E1C", "&*$ c #A79DA5", "**$ c #A7A78D", "=*$ c #7F8265", "-*$ c #535337", ";*$ c #3B3B1F", ">*$ c #3F3F25", ",*$ c #4D4D33", "'*$ c #55533C", ")*$ c #59543E", "!*$ c #47402D", "~*$ c #3E3524", "{*$ c #14140A", "]*$ c #0B0A05", "^*$ c #0A0904", "/*$ c #0C130B", "(*$ c #0D140C", "_*$ c #292023", ":*$ c #2A1F25", "<*$ c #13160F", "[*$ c #7F1917", "}*$ c #86150D", "|*$ c #8F1D12", "1*$ c #961615", "2*$ c #961B16", "3*$ c #961819", "4*$ c #921A1B", "5*$ c #911E1B", "6*$ c #851C20", "7*$ c #801B1F", "8*$ c #7C191C", "9*$ c #77181C", "0*$ c #771E22", "a*$ c #742425", "b*$ c #742A2B", "c*$ c #732B2C", "d*$ c #632927", "e*$ c #4C271E", "f*$ c #48261D", "g*$ c #261E1C", "h*$ c #201A1A", "i*$ c #0C1210", "j*$ c #0C1212", "k*$ c #141608", "l*$ c #121406", "m*$ c #151509", "n*$ c #16160A", "o*$ c #18180C", "p*$ c #1A1A0E", "q*$ c #19190D", "r*$ c #1F1F13", "s*$ c #3C392A", "t*$ c #464332", "u*$ c #4A4736", "v*$ c #514B3B", "w*$ c #ADA8A5", "x*$ c #B2ADAA", "y*$ c #B1ACA8", "z*$ c #BFB6A7", "A*$ c #D5C5B8", "B*$ c #7D6B5F", "C*$ c #281207", "D*$ c #261207", "E*$ c #27160C", "F*$ c #311F13", "G*$ c #402015", "H*$ c #8C2830", "I*$ c #902C34", "J*$ c #96303B", "K*$ c #99353D", "L*$ c #9D3C43", "M*$ c #9E3F43", "N*$ c #9C4043", "O*$ c #A1464B", "P*$ c #9D4249", "Q*$ c #963F47", "R*$ c #953E44", "S*$ c #9C4647", "T*$ c #9E525F", "U*$ c #975767", "V*$ c #915668", "W*$ c #895669", "X*$ c #8A5F73", "Y*$ c #966F84", "Z*$ c #9C798F", "`*$ c #997A8C", " =$ c #AB919E", ".=$ c #C9B4BD", "+=$ c #CCBBC3", "@=$ c #DCCCD6", "#=$ c #EBDFE9", "$=$ c #E2D8E1", "%=$ c #D1CAD2", "&=$ c #B7ADB6", "*=$ c #C3B6BF", "==$ c #CAB6BF", "-=$ c #DBC0C9", ";=$ c #C7A2AA", ">=$ c #96676F", ",=$ c #915C64", "'=$ c #9C5F67", ")=$ c #85444C", "!=$ c #944B52", "~=$ c #883141", "{=$ c #933B49", "]=$ c #8F353F", "^=$ c #691A1D", "/=$ c #72191D", "(=$ c #592C26", "_=$ c #4F2C26", ":=$ c #8F8D76", "<=$ c #807B65", "[=$ c #443A21", "}=$ c #2F230D", "|=$ c #2F1308", "1=$ c #841C19", "2=$ c #4E2020", "3=$ c #20190F", "4=$ c #1C180D", "5=$ c #392A23", "6=$ c #3C2B24", "7=$ c #26150E", "8=$ c #6B5C57", "9=$ c #83836B", "0=$ c #67674D", "a=$ c #3B3B21", "b=$ c #45432C", "c=$ c #53513A", "d=$ c #595742", "e=$ c #585641", "f=$ c #58533F", "g=$ c #55503C", "h=$ c #271E21", "i=$ c #2C2125", "j=$ c #2B2024", "k=$ c #271A21", "l=$ c #22171B", "m=$ c #0E150D", "n=$ c #0F160E", "o=$ c #291612", "p=$ c #741914", "q=$ c #7E1816", "r=$ c #8F1D13", "s=$ c #8D1A15", "t=$ c #772728", "u=$ c #782A2A", "v=$ c #762A2C", "w=$ c #57261F", "x=$ c #48231D", "y=$ c #2B1C19", "z=$ c #271B1B", "A=$ c #201718", "B=$ c #0B1111", "C=$ c #091211", "D=$ c #0A1214", "E=$ c #0C1114", "F=$ c #0D1215", "G=$ c #0E1215", "H=$ c #0F1316", "I=$ c #1C1C10", "J=$ c #504A3A", "K=$ c #5D5644", "L=$ c #6B6452", "M=$ c #716956", "N=$ c #7F7569", "O=$ c #CCC3B4", "P=$ c #CFC1B4", "Q=$ c #97877A", "R=$ c #49372B", "S=$ c #250F04", "T=$ c #392117", "U=$ c #4E1F17", "V=$ c #8E2931", "W=$ c #912C34", "X=$ c #98303B", "Y=$ c #9A353D", "Z=$ c #9E3D44", "`=$ c #9F4044", " -$ c #A04145", ".-$ c #9D4144", "+-$ c #9B4047", "@-$ c #9B414A", "#-$ c #9A4049", "$-$ c #974048", "%-$ c #933C42", "&-$ c #994044", "*-$ c #9B4248", "=-$ c #943E47", "--$ c #95434F", ";-$ c #9A4E5B", ">-$ c #A05768", ",-$ c #A25F71", "'-$ c #9B6074", ")-$ c #955F76", "!-$ c #8F6277", "~-$ c #956D85", "{-$ c #A28098", "]-$ c #AC8CA4", "^-$ c #AB8FA5", "/-$ c #B49EAB", "(-$ c #C5B4BE", "_-$ c #C8B8C2", ":-$ c #E1D4DE", "<-$ c #EADEE8", "[-$ c #D0C6D1", "}-$ c #C3B9C4", "|-$ c #BBAEB8", "1-$ c #C7B6C0", "2-$ c #C7ADB8", "3-$ c #D0AFBA", "4-$ c #B88E98", "5-$ c #8B5763", "6-$ c #8C525E", "7-$ c #843E49", "8-$ c #924952", "9-$ c #8E434A", "0-$ c #8A3A47", "a-$ c #893646", "b-$ c #863343", "c-$ c #8A3343", "d-$ c #913A4A", "e-$ c #963E4C", "f-$ c #913945", "g-$ c #862628", "h-$ c #842426", "i-$ c #741A1C", "j-$ c #702A28", "k-$ c #582B26", "l-$ c #4E2B25", "m-$ c #7B796C", "n-$ c #969487", "o-$ c #9B9A88", "p-$ c #918C76", "q-$ c #30240E", "r-$ c #2C1B09", "s-$ c #2B1005", "t-$ c #37150C", "u-$ c #461B14", "v-$ c #812319", "w-$ c #631F1E", "x-$ c #3C2D26", "y-$ c #402F28", "z-$ c #24130C", "A-$ c #1E0C08", "B-$ c #493733", "C-$ c #8B7C77", "D-$ c #A79DA6", "E-$ c #615F48", "F-$ c #525238", "G-$ c #44442C", "H-$ c #4C4A33", "I-$ c #55533E", "J-$ c #544F3B", "K-$ c #3F3828", "L-$ c #1D1717", "M-$ c #291E22", "N-$ c #251A1E", "O-$ c #21141B", "P-$ c #1C1115", "Q-$ c #19110F", "R-$ c #15100C", "S-$ c #120F0A", "T-$ c #361A17", "U-$ c #46201F", "V-$ c #532323", "W-$ c #73231A", "X-$ c #712116", "Y-$ c #7B1513", "Z-$ c #7C1614", "`-$ c #851E19", " ;$ c #841B17", ".;$ c #992122", "+;$ c #921F1C", "@;$ c #901F1B", "#;$ c #8E1E1A", "$;$ c #8F1E1A", "%;$ c #4D2822", "&;$ c #0A1312", "*;$ c #0B1315", "=;$ c #0E1316", "-;$ c #4B4537", ";;$ c #4C4636", ">;$ c #4F4838", ",;$ c #7B7165", "';$ c #B6B1AB", ");$ c #B1AFA3", "!;$ c #BBB3A6", "~;$ c #D9D0C1", "{;$ c #604E42", "];$ c #2B170C", "^;$ c #2F190E", "/;$ c #270F05", "(;$ c #912930", "_;$ c #942C35", ":;$ c #99313C", "<;$ c #9D3D41", "[;$ c #9D4247", "};$ c #9F4449", "|;$ c #9A3F46", "1;$ c #993F48", "2;$ c #983E47", "3;$ c #953E46", "4;$ c #933C44", "5;$ c #963B42", "6;$ c #9C4349", "7;$ c #97414A", "8;$ c #9A5162", "9;$ c #A05D6F", "0;$ c #A7697E", "a;$ c #99637A", "b;$ c #8E6178", "c;$ c #916983", "d;$ c #9C7A93", "e;$ c #AB8DA7", "f;$ c #BFA2BE", "g;$ c #CCB4CA", "h;$ c #BFADBD", "i;$ c #BBABB6", "j;$ c #C1B4BE", "k;$ c #E8DCE6", "l;$ c #E6DAE6", "m;$ c #BFB3BF", "n;$ c #BCAEBB", "o;$ c #C2B0BC", "p;$ c #C5ADBA", "q;$ c #D5B7C3", "r;$ c #B58C9A", "s;$ c #8E5E6C", "t;$ c #905766", "u;$ c #823E4D", "v;$ c #904750", "w;$ c #873A44", "x;$ c #8B3B48", "y;$ c #8C3545", "z;$ c #8B282B", "A;$ c #8C272B", "B;$ c #612C28", "C;$ c #241A18", "D;$ c #1B190C", "E;$ c #8B897C", "F;$ c #959386", "G;$ c #908B75", "H;$ c #4B4128", "I;$ c #4F432B", "J;$ c #453921", "K;$ c #31250F", "L;$ c #290E03", "M;$ c #34130A", "N;$ c #581D17", "O;$ c #85241B", "P;$ c #584642", "Q;$ c #C0B1AE", "R;$ c #797461", "S;$ c #4D4B36", "T;$ c #42402B", "U;$ c #46442F", "V;$ c #4E4C37", "W;$ c #54523D", "X;$ c #524D3A", "Y;$ c #0D0C0A", "Z;$ c #0E0D0B", "`;$ c #211B1B", " >$ c #261D1E", ".>$ c #261B1F", "+>$ c #211519", "@>$ c #1C1014", "#>$ c #1B0E15", "$>$ c #1B1014", "%>$ c #180F10", "&>$ c #271A12", "*>$ c #641E20", "=>$ c #6A1B1E", "->$ c #731D20", ";>$ c #801817", ">>$ c #891C15", ",>$ c #891A13", "'>$ c #8A1911", ")>$ c #8B1811", "!>$ c #8C1912", "~>$ c #8B1815", "{>$ c #9C2425", "]>$ c #94211E", "^>$ c #8D1D19", "/>$ c #89201A", "(>$ c #371F1D", "_>$ c #261818", ":>$ c #201615", "<>$ c #0C1416", "[>$ c #0D1518", "}>$ c #101417", "|>$ c #151209", "1>$ c #3A362A", "2>$ c #484234", "3>$ c #484131", "4>$ c #524B3B", "5>$ c #685F4E", "6>$ c #6E6554", "7>$ c #6F6355", "8>$ c #756C5D", "9>$ c #7B7366", "0>$ c #AFADA1", "a>$ c #B0AEA2", "b>$ c #AEAC9F", "c>$ c #D4C8BA", "d>$ c #230F04", "e>$ c #31160D", "f>$ c #67221D", "g>$ c #912A2E", "h>$ c #922A31", "i>$ c #962D34", "j>$ c #9A323B", "k>$ c #9C373F", "l>$ c #9A3A3E", "m>$ c #9B4045", "n>$ c #983D44", "o>$ c #973D46", "p>$ c #944653", "q>$ c #944C5A", "r>$ c #9B586A", "s>$ c #A16378", "t>$ c #98627A", "u>$ c #875973", "v>$ c #865E79", "w>$ c #95738E", "x>$ c #A1839F", "y>$ c #A98FAC", "z>$ c #BEA5C2", "A>$ c #D4C0D9", "B>$ c #C7B6C6", "C>$ c #B1A3B0", "D>$ c #BEB2BE", "E>$ c #EDE1ED", "F>$ c #DCD0DC", "G>$ c #B3A5B2", "H>$ c #BEACB8", "I>$ c #C3ADBA", "J>$ c #CDAEBD", "K>$ c #CBA7B5", "L>$ c #A27383", "M>$ c #844E5E", "N>$ c #905162", "O>$ c #8B4658", "P>$ c #833A4D", "Q>$ c #974D5C", "R>$ c #8F434F", "S>$ c #8A3E48", "T>$ c #8E3B4B", "U>$ c #8D2A2D", "V>$ c #8F282C", "W>$ c #8D262A", "X>$ c #892428", "Y>$ c #721617", "Z>$ c #612E2A", "`>$ c #2C1D1A", " ,$ c #1C1A0D", ".,$ c #4A483B", "+,$ c #949285", "@,$ c #999685", "#,$ c #5B5138", "$,$ c #4E422A", "%,$ c #2D1C0A", "&,$ c #34160E", "*,$ c #581F18", "=,$ c #741415", "-,$ c #621E1D", ";,$ c #2B1A13", ">,$ c #190703", ",,$ c #24120E", "',$ c #B8A9A6", "),$ c #595441", "!,$ c #403E29", "~,$ c #45432E", "{,$ c #4B4535", "],$ c #0C0B09", "^,$ c #0B0A08", "/,$ c #2B2223", "(,$ c #2A1F23", "_,$ c #190D11", ":,$ c #15090D", "<,$ c #180B12", "[,$ c #120E0B", "},$ c #21140C", "|,$ c #5B2324", "1,$ c #5E1C1E", "2,$ c #751517", "3,$ c #731515", "4,$ c #791611", "5,$ c #7E1613", "6,$ c #7D1512", "7,$ c #7B120E", "8,$ c #8B1E17", "9,$ c #8E1D15", "0,$ c #8D1C14", "a,$ c #8A1710", "b,$ c #8A1714", "c,$ c #9E2627", "d,$ c #9B2324", "e,$ c #5C2721", "f,$ c #5B2922", "g,$ c #592A24", "h,$ c #341C1C", "i,$ c #271717", "j,$ c #0D1517", "k,$ c #0F1418", "l,$ c #120F08", "m,$ c #433C2C", "n,$ c #645B4A", "o,$ c #6B6251", "p,$ c #736759", "q,$ c #797061", "r,$ c #706758", "s,$ c #120000", "t,$ c #1D0700", "u,$ c #5A2723", "v,$ c #601F1B", "w,$ c #932C30", "x,$ c #952C33", "y,$ c #982F36", "z,$ c #9B333C", "A,$ c #9D3840", "B,$ c #98383C", "C,$ c #983D42", "D,$ c #973C43", "E,$ c #963C45", "F,$ c #953A43", "G,$ c #944A59", "H,$ c #944F61", "I,$ c #9A5C71", "J,$ c #9E687F", "K,$ c #A57791", "L,$ c #99718C", "M,$ c #A17E9C", "N,$ c #BC9FBD", "O,$ c #C7AECC", "P,$ c #C5AECB", "Q,$ c #D1BDD9", "R,$ c #EAD8F0", "S,$ c #C7BACB", "T,$ c #ADA1AD", "U,$ c #EEE0ED", "V,$ c #D5C5D2", "W,$ c #B09EAA", "X,$ c #DAB6C4", "Y,$ c #AE8492", "Z,$ c #A06D7E", "`,$ c #9B6072", " '$ c #884557", ".'$ c #8E4559", "+'$ c #9A4D61", "@'$ c #873A4C", "#'$ c #873946", "$'$ c #923F4F", "%'$ c #903949", "&'$ c #9D4551", "*'$ c #8E292D", "='$ c #90292D", "-'$ c #8E272B", ";'$ c #811E21", ">'$ c #79191B", ",'$ c #6C1615", "''$ c #6B2A28", ")'$ c #672D2B", "!'$ c #562F2A", "~'$ c #C7C3B8", "{'$ c #B4B0A7", "]'$ c #50442C", "^'$ c #7D1E22", "/'$ c #621C1C", "('$ c #5D201F", "_'$ c #5A2221", ":'$ c #4A211F", "<'$ c #211009", "['$ c #23140F", "}'$ c #ABA0A4", "|'$ c #A89FA4", "1'$ c #A9A0A5", "2'$ c #8A8572", "3'$ c #544F3C", "4'$ c #4E483A", "5'$ c #0E0C0D", "6'$ c #0F0C07", "7'$ c #0D0A05", "8'$ c #211819", "9'$ c #1F1619", "0'$ c #1D1417", "a'$ c #190E12", "b'$ c #170C12", "c'$ c #160B0F", "d'$ c #160D0E", "e'$ c #1C180F", "f'$ c #5E2120", "g'$ c #6B191D", "h'$ c #70151A", "i'$ c #741416", "j'$ c #771516", "k'$ c #811918", "l'$ c #811717", "m'$ c #801714", "n'$ c #7F1613", "o'$ c #891E14", "p'$ c #881D13", "q'$ c #8D1C16", "r'$ c #9E211B", "s'$ c #951610", "t'$ c #971812", "u'$ c #A12122", "v'$ c #9B1A1E", "w'$ c #8F1F1B", "x'$ c #5E2722", "y'$ c #4A2626", "z'$ c #402021", "A'$ c #1F1110", "B'$ c #121617", "C'$ c #131919", "D'$ c #110E07", "E'$ c #0F0D0E", "F'$ c #0D0B0E", "G'$ c #0C0A0B", "H'$ c #363229", "I'$ c #5B5243", "J'$ c #6B5F51", "K'$ c #7A7265", "L'$ c #B4B0A5", "M'$ c #B6B0A4", "N'$ c #D7CFC2", "O'$ c #453327", "P'$ c #32170E", "Q'$ c #521C1A", "R'$ c #902E2F", "S'$ c #932C2D", "T'$ c #932C2F", "U'$ c #952C30", "V'$ c #982F34", "W'$ c #9B3237", "X'$ c #9E363D", "Y'$ c #9E393F", "Z'$ c #A14246", "`'$ c #A24347", " )$ c #943D46", ".)$ c #9E4A57", "+)$ c #914351", "@)$ c #914A5C", "#)$ c #A26376", "$)$ c #9C657C", "%)$ c #9B6B83", "&)$ c #976F8A", "*)$ c #A3829F", "=)$ c #C2A5C3", "-)$ c #D3BAD8", ";)$ c #CCB8D4", ">)$ c #CBB8D4", ",)$ c #D0BDD9", "')$ c #C9BAD1", "))$ c #C3B6C7", "!)$ c #B7ABB9", "~)$ c #CBBBC8", "{)$ c #BDABB7", "])$ c #B29CA9", "^)$ c #B89CAA", "/)$ c #BE9CAA", "()$ c #CEA4B2", "_)$ c #B1818F", ":)$ c #9E6576", "<)$ c #945566", "[)$ c #8C4458", "})$ c #8D4257", "|)$ c #93445A", "1)$ c #8D3E51", "2)$ c #8C3E4C", "3)$ c #944151", "4)$ c #963F4F", "5)$ c #9B4552", "6)$ c #8C2529", "7)$ c #8B2428", "8)$ c #832023", "9)$ c #751718", "0)$ c #512B28", "a)$ c #19170A", "b)$ c #5A584B", "c)$ c #B3B1A4", "d)$ c #776C56", "e)$ c #665A42", "f)$ c #51452D", "g)$ c #473821", "h)$ c #29150A", "i)$ c #541F17", "j)$ c #681E1D", "k)$ c #592321", "l)$ c #65604C", "m)$ c #504A3C", "n)$ c #1C1616", "o)$ c #1C1316", "p)$ c #1A1114", "q)$ c #180F12", "r)$ c #160D10", "s)$ c #150C11", "t)$ c #140B0E", "u)$ c #130D0D", "v)$ c #2E1A13", "w)$ c #671D1C", "x)$ c #6D181B", "y)$ c #751614", "z)$ c #712215", "A)$ c #8A1E14", "B)$ c #851F1A", "C)$ c #6B2822", "D)$ c #5F2C29", "E)$ c #4D2324", "F)$ c #301713", "G)$ c #190F0D", "H)$ c #100E11", "I)$ c #6E6254", "J)$ c #6B6253", "K)$ c #7C7467", "L)$ c #D8CEC2", "M)$ c #2E130A", "N)$ c #591D1C", "O)$ c #8C2D2B", "P)$ c #912D2D", "Q)$ c #942B2F", "R)$ c #962D31", "S)$ c #9B3438", "T)$ c #AA5A67", "U)$ c #964C5B", "V)$ c #7D3D4E", "W)$ c #985E74", "X)$ c #A5758D", "Y)$ c #A07892", "Z)$ c #91708B", "`)$ c #BEA4C1", " !$ c #F5DEFA", ".!$ c #F9E5FF", "+!$ c #D7C4E0", "@!$ c #C9B7D1", "#!$ c #D1C1DB", "$!$ c #D5C6DD", "%!$ c #CBBECF", "&!$ c #BCB0BC", "*!$ c #C1B3C0", "=!$ c #C8B6C2", "-!$ c #BBA5B2", ";!$ c #B296A4", ">!$ c #B694A2", ",!$ c #BB92A0", "'!$ c #C292A0", ")!$ c #A87280", "!!$ c #995C6C", "~!$ c #935061", "{!$ c #8C4357", "]!$ c #8F4157", "^!$ c #94455B", "/!$ c #904353", "(!$ c #8E424F", "_!$ c #944354", ":!$ c #954252", "~$ c #BEAFC6", ",~$ c #CCBAD0", "'~$ c #CCBDD0", ")~$ c #D1C5D3", "!~$ c #C2B6C2", "~~$ c #C4B4C1", "{~$ c #C7B3BF", "]~$ c #B99FAA", "^~$ c #AF8F9A", "/~$ c #B38B96", "(~$ c #B48691", "_~$ c #AE7A86", ":~$ c #9A606E", "<~$ c #915161", "[~$ c #904C5B", "}~$ c #8A4154", "|~$ c #8F4256", "1~$ c #924358", "2~$ c #954858", "3~$ c #924454", "4~$ c #964556", "5~$ c #954254", "6~$ c #923B4B", "7~$ c #662E2D", "8~$ c #623230", "9~$ c #5F3936", "0~$ c #4F322E", "a~$ c #6B695C", "b~$ c #BDBBAE", "c~$ c #928A75", "d~$ c #483922", "e~$ c #453420", "f~$ c #2F1E0C", "g~$ c #27150B", "h~$ c #2A160D", "i~$ c #5B2219", "j~$ c #712122", "k~$ c #5C2123", "l~$ c #532122", "m~$ c #522222", "n~$ c #472021", "o~$ c #331E19", "p~$ c #191009", "q~$ c #150C07", "r~$ c #78706D", "s~$ c #48442B", "t~$ c #50483B", "u~$ c #0F0D10", "v~$ c #100C09", "w~$ c #120E0F", "x~$ c #120D11", "y~$ c #1D1610", "z~$ c #28130E", "A~$ c #2C130E", "B~$ c #33140F", "C~$ c #3B1814", "D~$ c #572019", "E~$ c #8C1B15", "F~$ c #891D11", "G~$ c #871D10", "H~$ c #931916", "I~$ c #921815", "J~$ c #A01F24", "K~$ c #582522", "L~$ c #411B18", "M~$ c #351814", "N~$ c #2D1511", "O~$ c #1C1211", "P~$ c #594D3F", "Q~$ c #908A7A", "R~$ c #B3AFA6", "S~$ c #D2C5BC", "T~$ c #756158", "U~$ c #3E1712", "V~$ c #601A1C", "W~$ c #671D1E", "X~$ c #922E2C", "Y~$ c #952F2D", "Z~$ c #962F30", "`~$ c #983132", " {$ c #983436", ".{$ c #993738", "+{$ c #9B383B", "@{$ c #9D4B57", "#{$ c #904959", "${$ c #976276", "%{$ c #A1758C", "&{$ c #96748C", "*{$ c #A389A2", "={$ c #D1BDD6", "-{$ c #F1E1FB", ";{$ c #EEE0F7", ">{$ c #CFC0D5", ",{$ c #D6C7DA", "'{$ c #DFCEE0", "){$ c #CFBECE", "!{$ c #CFC1CE", "~{$ c #C3B6C0", "{{$ c #C7B5C1", "]{$ c #C8B2BE", "^{$ c #B99BA5", "/{$ c #AD8A91", "({$ c #AC818A", "_{$ c #A97780", ":{$ c #9F666F", "<{$ c #90525D", "[{$ c #8D4B57", "}{$ c #8D4354", "|{$ c #96495B", "1{$ c #934658", "2{$ c #994C5C", "3{$ c #974A5A", "4{$ c #964858", "5{$ c #994859", "6{$ c #984758", "7{$ c #964355", "8{$ c #953E4E", "9{$ c #872D2C", "0{$ c #852A27", "a{$ c #862326", "b{$ c #692C2B", "c{$ c #64312E", "d{$ c #5A3836", "e{$ c #4A312C", "f{$ c #777568", "g{$ c #C2C0B3", "h{$ c #938B76", "i{$ c #6A5E46", "j{$ c #4C3C25", "k{$ c #3C1A11", "l{$ c #852823", "m{$ c #7D1E24", "n{$ c #7C1D23", "o{$ c #802024", "p{$ c #812125", "q{$ c #712225", "r{$ c #672225", "s{$ c #5E2023", "t{$ c #5A1F21", "u{$ c #582023", "v{$ c #562224", "w{$ c #532226", "x{$ c #4F2225", "y{$ c #482021", "z{$ c #827F7A", "A{$ c #A7A3A0", "B{$ c #A6A29F", "C{$ c #9D9882", "D{$ c #7B775E", "E{$ c #423E21", "F{$ c #433F22", "G{$ c #454128", "H{$ c #51473D", "I{$ c #4D453A", "J{$ c #381614", "K{$ c #411917", "L{$ c #491D1C", "M{$ c #572121", "N{$ c #722014", "O{$ c #841818", "P{$ c #8D1E15", "Q{$ c #871D0F", "R{$ c #881C0F", "S{$ c #891D10", "T{$ c #A12025", "U{$ c #331A15", "V{$ c #25130F", "W{$ c #1C1010", "X{$ c #18100E", "Y{$ c #0C0F08", "Z{$ c #0D0E08", "`{$ c #5A4E40", " ]$ c #726B5B", ".]$ c #6C6555", "+]$ c #6A6353", "@]$ c #787360", "#]$ c #B0AD9C", "$]$ c #AEABA2", "%]$ c #B0ADA4", "&]$ c #BCAFA7", "*]$ c #BAB0A7", "=]$ c #DBCAC2", "-]$ c #452E26", ";]$ c #220500", ">]$ c #37160F", ",]$ c #421915", "']$ c #4B1F1C", ")]$ c #4E1B18", "!]$ c #5A1A1B", "~]$ c #5E1619", "{]$ c #671B1D", "]]$ c #7E2A2A", "^]$ c #933130", "/]$ c #932F2D", "(]$ c #96302E", "_]$ c #983434", ":]$ c #983637", "<]$ c #983839", "[]$ c #983A3B", "}]$ c #934048", "|]$ c #964E5C", "1]$ c #894657", "2]$ c #8B5064", "3]$ c #B18296", "4]$ c #9D778E", "5]$ c #7F637A", "6]$ c #BBA7C0", "7]$ c #F9E9FF", "8]$ c #FFF3FF", "9]$ c #F9EDFF", "0]$ c #DDD1E5", "a]$ c #D2C5D7", "b]$ c #EAD9E9", "c]$ c #EBD9E7", "d]$ c #CAB8C4", "e]$ c #BFAFBA", "f]$ c #C9B5C0", "g]$ c #CAB0BB", "h]$ c #B7969F", "i]$ c #AB828A", "j]$ c #A5767E", "k]$ c #9E696F", "l]$ c #975A61", "m]$ c #8D4C54", "n]$ c #904A55", "o]$ c #8E4453", "p]$ c #954B5A", "q]$ c #9C4F5F", "r]$ c #9A4D5D", "s]$ c #9A4B5E", "t]$ c #9C4B5E", "u]$ c #9A495C", "v]$ c #974456", "w]$ c #9A4353", "x]$ c #6A1D13", "y]$ c #5C3432", "z]$ c #513430", "A]$ c #828073", "B]$ c #C7C5B8", "C]$ c #4B3B24", "D]$ c #39180F", "E]$ c #7F2026", "F]$ c #7E1F25", "G]$ c #722223", "H]$ c #632123", "I]$ c #5D2025", "J]$ c #5B2326", "K]$ c #572327", "L]$ c #542327", "M]$ c #502225", "N]$ c #4A2022", "O]$ c #451E1F", "P]$ c #0B0801", "Q]$ c #52514C", "R]$ c #A5A6A1", "S]$ c #444023", "T]$ c #444122", "U]$ c #423F20", "V]$ c #423C22", "W]$ c #50463C", "X]$ c #241915", "Y]$ c #381916", "Z]$ c #4C1F1C", "`]$ c #571F1E", " ^$ c #5D1D1D", ".^$ c #642015", "+^$ c #651F13", "@^$ c #671F13", "#^$ c #671D10", "$^$ c #6A1C10", "%^$ c #6D1E11", "&^$ c #8A1913", "*^$ c #811E23", "=^$ c #0D0F0A", "-^$ c #595041", ";^$ c #696051", ">^$ c #6D6656", ",^$ c #B7AAA2", "'^$ c #C8B9B2", ")^$ c #DCCBC3", "!^$ c #C9B6AF", "~^$ c #654E46", "{^$ c #270C05", "]^$ c #2C0E06", "^^$ c #3F1310", "/^$ c #4B1513", "(^$ c #5C1A1C", "_^$ c #621819", ":^$ c #6B1C1F", "<^$ c #8D2E2C", "[^$ c #943231", "}^$ c #97312F", "|^$ c #973333", "1^$ c #983635", "2^$ c #983A3A", "3^$ c #963A3B", "4^$ c #973C41", "5^$ c #995A6B", "6^$ c #945F71", "7^$ c #AF8498", "8^$ c #927186", "9^$ c #856D85", "0^$ c #E4D5EC", "a^$ c #F8F0FF", "b^$ c #F2E9FC", "c^$ c #E0D5E6", "d^$ c #DCD0DE", "e^$ c #F0E0EB", "f^$ c #E5D4DE", "g^$ c #BDA9B2", "h^$ c #B5A4AE", "i^$ c #B8A7B1", "j^$ c #C7B0BA", "k^$ c #C6ABB2", "l^$ c #B08B93", "m^$ c #A0757C", "n^$ c #9C696E", "o^$ c #945B61", "p^$ c #93555A", "q^$ c #8B484F", "r^$ c #924B53", "s^$ c #964E59", "t^$ c #8E4550", "u^$ c #9D5060", "v^$ c #9E4D60", "w^$ c #9B4A5D", "x^$ c #984557", "y^$ c #9C4555", "z^$ c #862E2C", "A^$ c #5D302D", "B^$ c #573432", "C^$ c #4F3330", "D^$ c #232114", "E^$ c #151306", "F^$ c #8C8A7D", "G^$ c #969497", "H^$ c #7E725C", "I^$ c #2D140D", "J^$ c #37160D", "K^$ c #471A14", "L^$ c #7F2028", "M^$ c #642224", "N^$ c #642327", "O^$ c #63262B", "P^$ c #5B2228", "Q^$ c #572228", "R^$ c #421E1E", "S^$ c #371E1A", "T^$ c #5D5E58", "U^$ c #B6B7B2", "V^$ c #9D9E99", "W^$ c #726E55", "X^$ c #484526", "Y^$ c #4A4728", "Z^$ c #454221", "`^$ c #43401F", " /$ c #34332E", "./$ c #2F2E29", "+/$ c #201815", "@/$ c #4A1E1D", "#/$ c #5A1C1D", "$/$ c #601B1E", "%/$ c #601A1A", "&/$ c #612316", "*/$ c #622314", "=/$ c #641F10", "-/$ c #6C1D10", ";/$ c #831717", ">/$ c #861817", ",/$ c #891814", "'/$ c #871B0E", ")/$ c #871D0D", "!/$ c #8A1E11", "~/$ c #8A1E12", "{/$ c #9B211E", "]/$ c #9C221F", "^/$ c #A22125", "//$ c #8B1D1C", "(/$ c #8C201E", "_/$ c #7E1E22", ":/$ c #7F1F23", "($ c #822128", ",($ c #69292A", "'($ c #5E2325", ")($ c #582426", "!($ c #552324", "~($ c #4F2121", "{($ c #441E1D", "]($ c #2C1F19", "^($ c #18150C", "/($ c #37342B", "(($ c #787772", "_($ c #AEADA9", ":($ c #B4AF99", "<($ c #575338", "[($ c #3F3B1E", "}($ c #464324", "|($ c #3C391A", "1($ c #3C3918", "2($ c #434142", "3($ c #4C4A4B", "4($ c #581B1A", "5($ c #5C1B19", "6($ c #602215", "7($ c #641E12", "8($ c #661C11", "9($ c #891812", "0($ c #901D18", "a($ c #A32226", "b($ c #991A13", "c($ c #9C2221", "d($ c #9A2221", "e($ c #9A2223", "f($ c #8B1B1A", "g($ c #8B1F1D", "h($ c #8A2020", "i($ c #361A16", "j($ c #0E1108", "k($ c #0A1109", "l($ c #091008", "m($ c #091009", "n($ c #080F08", "o($ c #090E0A", "p($ c #5A5245", "q($ c #75705D", "r($ c #6E6956", "s($ c #B9AAA3", "t($ c #BEADA6", "u($ c #DCC8C1", "v($ c #B39C94", "w($ c #503730", "x($ c #270A02", "y($ c #2F0E05", "z($ c #38110A", "A($ c #572621", "B($ c #5B2622", "C($ c #6D2526", "D($ c #8C2E2C", "E($ c #963433", "F($ c #983937", "G($ c #9A3A3B", "H($ c #993B3B", "I($ c #99383F", "J($ c #993A40", "K($ c #95393E", "L($ c #94373F", "M($ c #95586A", "N($ c #A87184", "O($ c #836172", "P($ c #A990A3", "Q($ c #DBCDDE", "R($ c #FCF8FF", "S($ c #E8E6F4", "T($ c #DFDBE9", "U($ c #EAE2EF", "V($ c #FFF4FE", "W($ c #DECBD1", "X($ c #9C878C", "Y($ c #A99096", "Z($ c #B5989D", "`($ c #C4A5AA", " _$ c #BA969A", "._$ c #986E72", "+_$ c #8A5356", "@_$ c #884C4E", "#_$ c #8E4D51", "$_$ c #8A454A", "%_$ c #914A50", "&_$ c #964F57", "*_$ c #99515D", "=_$ c #9C5460", "-_$ c #994F60", ";_$ c #9D4F5F", ">_$ c #9D4C5D", ",_$ c #621616", "'_$ c #621618", ")_$ c #64181A", "!_$ c #661A1C", "~_$ c #552E29", "{_$ c #55403B", "]_$ c #1D1F11", "^_$ c #1C1E10", "/_$ c #17180A", "(_$ c #CECCBF", "__$ c #968E79", ":_$ c #7F755A", "<_$ c #594D33", "[_$ c #483A20", "}_$ c #230F08", "|_$ c #2C1108", "1_$ c #3B160D", "2_$ c #461A0F", "3_$ c #802729", "4_$ c #7D1D21", "5_$ c #821F24", "6_$ c #841F25", "7_$ c #871F26", "8_$ c #862127", "9_$ c #251D1B", "0_$ c #231B18", "a_$ c #423A37", "b_$ c #BFB6B7", "c_$ c #B8AFB2", "d_$ c #AFAA94", "e_$ c #B6B19B", "f_$ c #BAB59F", "g_$ c #A5A08A", "h_$ c #928E75", "i_$ c #444025", "j_$ c #433F24", "k_$ c #423E23", "l_$ c #413D22", "m_$ c #403C23", "n_$ c #403E2F", "o_$ c #323023", "p_$ c #3D3D33", "q_$ c #060702", "r_$ c #0C0D08", "s_$ c #464644", "t_$ c #474745", "u_$ c #373735", "v_$ c #0D120C", "w_$ c #13140C", "x_$ c #5B2018", "y_$ c #5F2019", "z_$ c #7B1511", "A_$ c #7C1411", "B_$ c #811815", "C_$ c #821916", "D_$ c #841B18", "E_$ c #8A1D16", "F_$ c #891E16", "G_$ c #911A14", "H_$ c #921B15", "I_$ c #951B16", "J_$ c #991916", "K_$ c #9F1D1D", "L_$ c #A01E20", "M_$ c #A11F21", "N_$ c #A32123", "O_$ c #A01D22", "P_$ c #A01E1E", "Q_$ c #981815", "R_$ c #971714", "S_$ c #941C1E", "T_$ c #961E20", "U_$ c #982022", "V_$ c #992123", "W_$ c #911D1D", "X_$ c #942020", "Y_$ c #952121", "Z_$ c #901C1C", "`_$ c #8B1717", " :$ c #8F1D1D", ".:$ c #841F23", "+:$ c #691E1B", "@:$ c #2B150A", "#:$ c #1B1105", "$:$ c #171105", "%:$ c #141206", "&:$ c #111306", "*:$ c #081207", "=:$ c #061208", "-:$ c #07120A", ";:$ c #08110C", ">:$ c #696252", ",:$ c #68614E", "':$ c #B5AAA8", "):$ c #B8A8A8", "!:$ c #BCA7A2", "~:$ c #C4ADA7", "{:$ c #C0A9A3", "]:$ c #DFC6BF", "^:$ c #61463B", "/:$ c #2A0500", "(:$ c #3C1108", "_:$ c #502016", "::$ c #923434", "<:$ c #943636", "[:$ c #953536", "}:$ c #953537", "|:$ c #99393B", "1:$ c #9C3C40", "2:$ c #9C3842", "3:$ c #9C3844", "4:$ c #9B3540", "5:$ c #98323D", "6:$ c #953038", "7:$ c #973238", "8:$ c #91343E", "9:$ c #9D586A", "0:$ c #9E6375", "a:$ c #9B6678", "b:$ c #906173", "c:$ c #876170", "d:$ c #9E8290", "e:$ c #F9EFF8", "f:$ c #FFFDFF", "g:$ c #E4E4EE", "h:$ c #D9D9E1", "i:$ c #E5E2EB", "j:$ c #FCF6FF", "k:$ c #F2E5EF", "l:$ c #C1AFBB", "m:$ c #8E747D", "n:$ c #BA9698", "o:$ c #C29899", "p:$ c #C69A99", "q:$ c #AF8181", "r:$ c #855153", "s:$ c #8E5657", "t:$ c #8D5153", "u:$ c #8D4A51", "v:$ c #8C464E", "w:$ c #8E474F", "x:$ c #9D545F", "y:$ c #9F5763", "z:$ c #9D5966", "A:$ c #9A5361", "B:$ c #9A5260", "C:$ c #9D515E", "D:$ c #9B4D5A", "E:$ c #9B4756", "F:$ c #9A4451", "G:$ c #9E4352", "H:$ c #923643", "I:$ c #842731", "J:$ c #7E2129", "K:$ c #822329", "L:$ c #87282E", "M:$ c #6C231A", "N:$ c #692017", "O:$ c #70170F", "P:$ c #4D2A24", "Q:$ c #533733", "R:$ c #47362F", "S:$ c #575548", "T:$ c #D0CEC1", "U:$ c #584D31", "V:$ c #47391F", "W:$ c #4C3E24", "X:$ c #291713", "Y:$ c #240F0A", "Z:$ c #2D120B", "`:$ c #39190E", " <$ c #532213", ".<$ c #5F2517", "+<$ c #672316", "@<$ c #80281E", "#<$ c #762217", "$<$ c #762627", "%<$ c #752526", "&<$ c #832025", "*<$ c #852026", "=<$ c #882027", "-<$ c #872228", ";<$ c #6F261D", "><$ c #5D291C", ",<$ c #57271B", "'<$ c #241913", ")<$ c #271A11", "!<$ c #291C13", "~<$ c #291F13", "{<$ c #2B2316", "]<$ c #504444", "^<$ c #C2B5BC", "/<$ c #A9A58C", "(<$ c #A19D84", "_<$ c #9F9B82", ":<$ c #AFAB92", "<<$ c #ABA78E", "[<$ c #6C684F", "}<$ c #49452C", "|<$ c #413D24", "1<$ c #3F3A24", "2<$ c #3F3F35", "3<$ c #101308", "4<$ c #121407", "5<$ c #1B170B", "6<$ c #291A15", "7<$ c #901911", "8<$ c #911A12", "9<$ c #931C14", "0<$ c #961B1E", "a<$ c #A22221", "b<$ c #962320", "c<$ c #972022", "d<$ c #931F1F", "e<$ c #962222", "f<$ c #901E1E", "g<$ c #4D2118", "h<$ c #30180E", "i<$ c #1D0F02", "j<$ c #170F02", "k<$ c #131104", "l<$ c #0E1204", "m<$ c #0A1205", "n<$ c #051107", "o<$ c #061109", "p<$ c #07100B", "q<$ c #0F0F11", "r<$ c #0F0D12", "s<$ c #2D2523", "t<$ c #585043", "u<$ c #68614F", "v<$ c #6D6653", "w<$ c #8C8573", "x<$ c #C0B9A7", "y<$ c #B6AF9C", "z<$ c #B4AAAB", "A<$ c #AFACA7", "B<$ c #B7A7A8", "C<$ c #B9A6A8", "D<$ c #BAA6A5", "E<$ c #B29D98", "F<$ c #BBA49E", "G<$ c #C0A9A1", "H<$ c #D3BAB3", "I<$ c #D4BCB2", "J<$ c #957A6F", "K<$ c #422419", "L<$ c #210000", "M<$ c #300800", "N<$ c #411306", "O<$ c #963638", "P<$ c #983538", "Q<$ c #9E3B40", "R<$ c #9C3641", "S<$ c #9C3643", "T<$ c #9D3442", "U<$ c #972D37", "V<$ c #993138", "W<$ c #9A353B", "X<$ c #923A46", "Y<$ c #903E4C", "Z<$ c #985567", "`<$ c #9B5E70", " [$ c #A67183", ".[$ c #966779", "+[$ c #855C6C", "@[$ c #896976", "#[$ c #B49DA7", "$[$ c #E8D9E0", "%[$ c #FDF6FD", "&[$ c #F7F6FB", "*[$ c #EFF0F4", "=[$ c #DFDCE3", "-[$ c #F6EFF7", ";[$ c #FAEEF8", ">[$ c #E6D6E1", ",[$ c #BEAAB6", "'[$ c #997E87", ")[$ c #BE9496", "![$ c #C2918D", "~[$ c #BD8B8A", "{[$ c #A67372", "][$ c #875151", "^[$ c #804849", "/[$ c #83464B", "([$ c #8C4E53", "_[$ c #8F4E54", ":[$ c #914E55", "<[$ c #9A515A", "[[$ c #9F5661", "}[$ c #A25A66", "|[$ c #A05E6A", "1[$ c #9B5C67", "2[$ c #9A5663", "3[$ c #9A545F", "4[$ c #9A515C", "5[$ c #993F4B", "6[$ c #852530", "7[$ c #80202B", "8[$ c #84232C", "9[$ c #682218", "0[$ c #672117", "a[$ c #523932", "b[$ c #43322B", "c[$ c #191C11", "d[$ c #1A1E10", "e[$ c #B6B4A7", "f[$ c #D1CFC2", "g[$ c #BBB7AC", "h[$ c #99937B", "i[$ c #46381E", "j[$ c #4A3C22", "k[$ c #25100B", "l[$ c #602819", "m[$ c #662416", "n[$ c #6F2518", "o[$ c #822921", "p[$ c #862328", "q[$ c #68281E", "r[$ c #60271C", "s[$ c #4C211A", "t[$ c #281A11", "u[$ c #180E0D", "v[$ c #605657", "w[$ c #B3A8AE", "x[$ c #B7ACB0", "y[$ c #A39E88", "z[$ c #A7A388", "A[$ c #A6A287", "B[$ c #B0AC91", "C[$ c #A19D82", "D[$ c #767259", "E[$ c #3E3923", "F[$ c #3B3620", "G[$ c #39341E", "H[$ c #3D3824", "I[$ c #3C3C34", "J[$ c #3E3F3A", "K[$ c #1D170B", "L[$ c #1F170C", "M[$ c #2F1D1B", "N[$ c #581F16", "O[$ c #611D12", "P[$ c #611F13", "Q[$ c #921B13", "R[$ c #A32322", "S[$ c #972121", "T[$ c #972323", "U[$ c #8F1E20", "V[$ c #8A1E1E", "W[$ c #5F261F", "X[$ c #3E2016", "Y[$ c #251106", "Z[$ c #1C1004", "`[$ c #161004", " }$ c #0C0F04", ".}$ c #080F07", "+}$ c #061008", "@}$ c #080E0A", "#}$ c #090F0D", "$}$ c #494134", "%}$ c #6B6350", "&}$ c #C0B9A6", "*}$ c #B6A6A6", "=}$ c #B8A6A4", "-}$ c #CCB8AF", ";}$ c #DFC8C0", ">}$ c #C7AFA5", ",}$ c #765B50", "'}$ c #301207", ")}$ c #230100", "!}$ c #370F05", "~}$ c #45170A", "{}$ c #5E2218", "]}$ c #933536", "^}$ c #973739", "/}$ c #993639", "(}$ c #9C373B", "_}$ c #9F3A40", ":}$ c #99353F", "<}$ c #9C343F", "[}$ c #99313A", "}}$ c #972E35", "|}$ c #983037", "1}$ c #99343A", "2}$ c #934E60", "3}$ c #9A5A6B", "4}$ c #A07080", "5}$ c #996E7F", "6}$ c #987482", "7}$ c #AF919D", "8}$ c #DAC5CE", "9}$ c #FDF0F7", "0}$ c #FFF9FD", "a}$ c #EEECEF", "b}$ c #F3F3F5", "c}$ c #DFDFE1", "d}$ c #E2DDE3", "e}$ c #EEE4EC", "f}$ c #E5D8E1", "g}$ c #D1C0CA", "h}$ c #BAA4B0", "i}$ c #A98A92", "j}$ c #BC8F92", "k}$ c #B68382", "l}$ c #AB7779", "m}$ c #996265", "n}$ c #7E4649", "o}$ c #854A4E", "p}$ c #80434A", "q}$ c #8B4C54", "r}$ c #925159", "s}$ c #99565F", "t}$ c #9D5761", "u}$ c #9E5661", "v}$ c #A15965", "w}$ c #A35D68", "x}$ c #A2606C", "y}$ c #9D5E69", "z}$ c #9B5762", "A}$ c #9A4E5A", "B}$ c #933F4C", "C}$ c #84242F", "D}$ c #81212C", "E}$ c #85242D", "F}$ c #671E15", "G}$ c #572A24", "H}$ c #533A33", "I}$ c #17190E", "J}$ c #1C1E11", "K}$ c #6E6C5F", "L}$ c #BCB8AD", "M}$ c #9A947C", "N}$ c #71654B", "O}$ c #594E32", "P}$ c #25110A", "Q}$ c #2C110A", "R}$ c #36160B", "S}$ c #421A0E", "T}$ c #5E2619", "U}$ c #6E261A", "V}$ c #812A21", "W}$ c #823231", "X}$ c #863534", "Y}$ c #853433", "Z}$ c #872429", "`}$ c #2B1A10", " |$ c #2C1B11", ".|$ c #2A1C0F", "+|$ c #2C2012", "@|$ c #2C2314", "#|$ c #271F14", "$|$ c #120807", "%|$ c #362C2D", "&|$ c #7F7478", "*|$ c #C3BDBD", "=|$ c #B0ABA8", "-|$ c #9D9980", ";|$ c #ACA88B", ">|$ c #ADA98E", ",|$ c #A39F84", "'|$ c #8A866B", ")|$ c #646047", "!|$ c #38331D", "~|$ c #35301C", "{|$ c #3A3424", "]|$ c #38382C", "^|$ c #545550", "/|$ c #52534E", "(|$ c #171509", "_|$ c #1E160B", ":|$ c #25180F", "<|$ c #412524", "[|$ c #591D13", "}|$ c #601E12", "||$ c #901E13", "1|$ c #A52524", "2|$ c #9E1C1E", "3|$ c #992323", "4|$ c #982424", "5|$ c #8B1919", "6|$ c #8F1F1E", "7|$ c #891D1D", "8|$ c #29150C", "9|$ c #1E1206", "0|$ c #0C0D05", "a|$ c #090E07", "b|$ c #0D0D0F", "c|$ c #514A3A", "d|$ c #615A48", "e|$ c #6C6451", "f|$ c #7E7767", "g|$ c #BEB7A4", "h|$ c #B9B29F", "i|$ c #B3A9AA", "j|$ c #BAA9A1", "k|$ c #DBC7BC", "l|$ c #A89285", "m|$ c #53392C", "n|$ c #2B0D02", "o|$ c #3C180C", "p|$ c #3F1509", "q|$ c #4B1B0F", "r|$ c #602118", "s|$ c #933335", "t|$ c #9A373A", "u|$ c #9B363A", "v|$ c #9A3539", "w|$ c #98343C", "x|$ c #99343C", "y|$ c #972F36", "z|$ c #962E35", "A|$ c #94353D", "B|$ c #965462", "C|$ c #9E6170", "D|$ c #A36D7D", "E|$ c #8D6170", "F|$ c #A27E8C", "G|$ c #C6A6B3", "H|$ c #E6CCD7", "I|$ c #FAE9F1", "J|$ c #FFF5FB", "K|$ c #F8F2F6", "L|$ c #ECEAED", "M|$ c #EBE9EA", "N|$ c #EEEAEB", "O|$ c #F5EFF1", "P|$ c #EBE0E4", "Q|$ c #CEBDC3", "R|$ c #BDA8AF", "S|$ c #B89EA7", "T|$ c #B28F96", "U|$ c #B6878D", "V|$ c #A97277", "W|$ c #9B6469", "X|$ c #8E555B", "Y|$ c #81484E", "Z|$ c #874C52", "`|$ c #8E5158", " 1$ c #894A52", ".1$ c #8E4C56", "+1$ c #94535B", "@1$ c #9C5863", "#1$ c #A25F68", "$1$ c #A8626D", "%1$ c #A9616D", "&1$ c #A75F6B", "*1$ c #A45E69", "=1$ c #A15F69", "-1$ c #9E5C66", ";1$ c #9C5661", ">1$ c #99515C", ",1$ c #862933", "'1$ c #83232E", ")1$ c #82232B", "!1$ c #5B2E28", "~1$ c #59342E", "{1$ c #563A36", "]1$ c #7D7B6E", "^1$ c #CAC8BB", "/1$ c #99937D", "(1$ c #918670", "_1$ c #81775C", ":1$ c #5C5036", "<1$ c #290E05", "[1$ c #331209", "}1$ c #3D170C", "|1$ c #4C1E11", "11$ c #592416", "21$ c #622417", "31$ c #6B2519", "41$ c #8E3E3D", "51$ c #914140", "61$ c #853131", "71$ c #7E2426", "81$ c #2E1C10", "91$ c #2E1E11", "01$ c #2F1F10", "a1$ c #3D3437", "b1$ c #817B7D", "c1$ c #B7B1B3", "d1$ c #9B977C", "e1$ c #AEAB8C", "f1$ c #AEAA8D", "g1$ c #9A9679", "h1$ c #464229", "i1$ c #342E1E", "j1$ c #25170E", "k1$ c #4D2525", "l1$ c #901E14", "m1$ c #911F15", "n1$ c #9A231F", "o1$ c #A42421", "p1$ c #A32320", "q1$ c #992525", "r1$ c #2B170E", "s1$ c #140B04", "t1$ c #130E08", "u1$ c #0C0C0C", "v1$ c #494333", "w1$ c #504939", "x1$ c #6A624F", "y1$ c #756E5C", "z1$ c #B2A8A9", "A1$ c #B5A6A3", "B1$ c #B7A5A3", "C1$ c #D3C3B6", "D1$ c #2E1407", "E1$ c #220400", "F1$ c #501E13", "G1$ c #953235", "H1$ c #963336", "I1$ c #9D363A", "J1$ c #9C3539", "K1$ c #9E373B", "L1$ c #983339", "M1$ c #98353A", "N1$ c #983337", "O1$ c #963135", "P1$ c #953034", "Q1$ c #96353C", "R1$ c #963941", "S1$ c #944B56", "T1$ c #924E59", "U1$ c #965865", "V1$ c #A36977", "W1$ c #AA7884", "X1$ c #8F6978", "Y1$ c #AF909F", "Z1$ c #E0C6D3", "`1$ c #FFECF8", " 2$ c #FAEFF5", ".2$ c #EFE9EB", "+2$ c #ECE8E9", "@2$ c #E8E4E3", "#2$ c #FFFBFB", "$2$ c #FFFCFB", "%2$ c #EBDDDD", "&2$ c #BAA6A7", "*2$ c #AE9497", "=2$ c #B39499", "-2$ c #AF888D", ";2$ c #B27F86", ">2$ c #9D646B", ",2$ c #8D545B", "'2$ c #894D55", ")2$ c #844850", "!2$ c #93565E", "~2$ c #8C4D56", "{2$ c #92505C", "]2$ c #95535D", "^2$ c #A7636E", "/2$ c #B06977", "(2$ c #A96270", "_2$ c #A25C67", ":2$ c #9D5964", "<2$ c #9A5760", "[2$ c #903640", "}2$ c #872A35", "|2$ c #862631", "12$ c #5A3431", "22$ c #543834", "32$ c #44312B", "42$ c #131105", "52$ c #C5C3B6", "62$ c #928771", "72$ c #766A50", "82$ c #60543A", "92$ c #46381D", "02$ c #423419", "a2$ c #423225", "b2$ c #261209", "c2$ c #260E04", "d2$ c #2E1006", "e2$ c #391509", "f2$ c #542013", "g2$ c #672318", "h2$ c #833332", "i2$ c #833231", "j2$ c #381D16", "k2$ c #331B11", "l2$ c #342113", "m2$ c #352315", "n2$ c #5F595B", "o2$ c #A39D9F", "p2$ c #B4AEB0", "q2$ c #A3A08D", "r2$ c #A3A18C", "s2$ c #A4A28B", "t2$ c #B6B394", "u2$ c #AAA689", "v2$ c #36311B", "w2$ c #3C3723", "x2$ c #352F1F", "y2$ c #1C150D", "z2$ c #27160E", "A2$ c #522424", "B2$ c #5A1E16", "C2$ c #5F1F13", "D2$ c #9C1F1B", "E2$ c #A11F1F", "F2$ c #901E1D", "G2$ c #8C1C1B", "H2$ c #90201F", "I2$ c #8D1F20", "J2$ c #2C150F", "K2$ c #1B100A", "L2$ c #15100A", "M2$ c #4A4235", "N2$ c #544D3D", "O2$ c #5E483A", "P2$ c #240A00", "Q2$ c #2A0A00", "R2$ c #8C292C", "S2$ c #922F32", "T2$ c #973236", "U2$ c #983135", "V2$ c #9A3337", "W2$ c #96373D", "X2$ c #983D46", "Y2$ c #97444C", "Z2$ c #924C56", "`2$ c #8E4F5A", " 3$ c #955B67", ".3$ c #A56F7C", "+3$ c #AE838D", "@3$ c #A88895", "#3$ c #B9A1AE", "$3$ c #DFC9D5", "%3$ c #FDECF6", "&3$ c #FFF3FA", "*3$ c #F2E9EE", "=3$ c #EAE4E6", "-3$ c #EDE7E7", ";3$ c #EEE9E6", ">3$ c #FFF8F6", ",3$ c #FFF8F7", "'3$ c #DECAC9", ")3$ c #AC9293", "!3$ c #A28484", "~3$ c #A88687", "{3$ c #A47A7E", "]3$ c #AC747D", "^3$ c #935761", "/3$ c #864855", "(3$ c #854754", "_3$ c #8C4E59", ":3$ c #92535E", "<3$ c #8A4B56", "[3$ c #975561", "}3$ c #9B5965", "|3$ c #A4606D", "13$ c #AC6875", "23$ c #B26B79", "33$ c #AF6876", "43$ c #A65F6D", "53$ c #9F5964", "63$ c #9A545E", "73$ c #97515B", "83$ c #954953", "93$ c #964450", "03$ c #882833", "a3$ c #86272F", "b3$ c #583531", "c3$ c #513532", "d3$ c #442F2C", "e3$ c #0E0A00", "f3$ c #BBB9AC", "g3$ c #938874", "h3$ c #63573D", "i3$ c #403217", "j3$ c #2C1005", "k3$ c #351307", "l3$ c #441A0E", "m3$ c #8D3F3D", "n3$ c #843433", "o3$ c #392214", "p3$ c #392316", "q3$ c #382517", "r3$ c #423E3D", "s3$ c #5C565A", "t3$ c #B3ADAF", "u3$ c #B1ACA9", "v3$ c #A2A08B", "w3$ c #A6A48D", "x3$ c #A7A58C", "y3$ c #A9A88A", "z3$ c #A4A384", "A3$ c #89886A", "B3$ c #6C6B4D", "C3$ c #57563A", "D3$ c #403E25", "E3$ c #502222", "F3$ c #572526", "G3$ c #572325", "H3$ c #552221", "I3$ c #551F1D", "J3$ c #591E1A", "K3$ c #602014", "L3$ c #A22020", "M3$ c #982222", "N3$ c #6D2121", "O3$ c #423C2C", "P3$ c #5E5848", "Q3$ c #615A4A", "R3$ c #686151", "S3$ c #665F4D", "T3$ c #B1A7A8", "U3$ c #C4B8AA", "V3$ c #CEC3B1", "W3$ c #CEC1B0", "X3$ c #412B1D", "Y3$ c #270B00", "Z3$ c #3D190D", "`3$ c #461C10", " 4$ c #993236", ".4$ c #9A3136", "+4$ c #9D3439", "@4$ c #993035", "#4$ c #9A2F35", "$4$ c #973536", "%4$ c #973738", "&4$ c #9B393A", "*4$ c #944B54", "=4$ c #895059", "-4$ c #915E67", ";4$ c #A57680", ">4$ c #B18C94", ",4$ c #B79DA8", "'4$ c #C3B1BD", ")4$ c #E2D2DC", "!4$ c #FBEEF7", "~4$ c #F7EEF3", "{4$ c #E6E0E4", "]4$ c #E8E2E4", "^4$ c #F7F1F1", "/4$ c #F3E9E8", "(4$ c #E1D3D2", "_4$ c #D0BEBC", ":4$ c #BBA3A1", "<4$ c #A08280", "[4$ c #997575", "}4$ c #9F7777", "|4$ c #9F7174", "14$ c #A16773", "24$ c #8A4C59", "34$ c #814151", "44$ c #874755", "54$ c #91515F", "64$ c #975563", "74$ c #904E5C", "84$ c #9A5866", "94$ c #A46270", "04$ c #B06C79", "a4$ c #B26E7B", "b4$ c #A25E6B", "c4$ c #9D5762", "d4$ c #94414B", "e4$ c #8B3039", "f4$ c #5D312E", "g4$ c #4D312E", "h4$ c #665A40", "i4$ c #493B20", "j4$ c #3E3013", "k4$ c #493A1D", "l4$ c #2E180D", "m4$ c #281004", "n4$ c #2D1106", "o4$ c #41190F", "p4$ c #863232", "q4$ c #411C14", "r4$ c #3F1A12", "s4$ c #3E1910", "t4$ c #3C1A10", "u4$ c #3F281A", "v4$ c #3E2C22", "w4$ c #332D31", "x4$ c #5F595D", "y4$ c #908A8C", "z4$ c #ADA7A7", "A4$ c #A3A18A", "B4$ c #A6A48B", "C4$ c #A9A78E", "D4$ c #AAA98D", "E4$ c #8F8E70", "F4$ c #7C7B5D", "G4$ c #59583A", "H4$ c #454428", "I4$ c #434128", "J4$ c #2A2714", "K4$ c #101914", "L4$ c #111713", "M4$ c #17130A", "N4$ c #3C1B16", "O4$ c #512323", "P4$ c #552123", "Q4$ c #592122", "R4$ c #5A2225", "S4$ c #581E1D", "T4$ c #571D1B", "U4$ c #5B1E19", "V4$ c #612115", "W4$ c #8E1D17", "X4$ c #8C1614", "Y4$ c #9D2322", "Z4$ c #A32121", "`4$ c #A42220", " 5$ c #902221", ".5$ c #7E2529", "+5$ c #752023", "@5$ c #29150E", "#5$ c #150E08", "$5$ c #100D08", "%5$ c #60584B", "&5$ c #B2AFA6", "*5$ c #C8BDA9", "=5$ c #230300", "-5$ c #45160C", ";5$ c #9C3338", ">5$ c #972E33", ",5$ c #992E34", "'5$ c #993034", ")5$ c #9C3A3B", "!5$ c #96434B", "~5$ c #964951", "{5$ c #894C54", "]5$ c #844F59", "^5$ c #8D5F69", "/5$ c #A37A82", "(5$ c #B2919A", "_5$ c #C9BCC6", ":5$ c #F3EDF1", "<5$ c #DCD6D8", "[5$ c #E7E1E3", "}5$ c #FFFDFB", "|5$ c #F1E5E5", "15$ c #BAABA8", "25$ c #998483", "35$ c #9C807D", "45$ c #997776", "55$ c #946C6C", "65$ c #996D6C", "75$ c #A16F72", "85$ c #995D69", "95$ c #834353", "05$ c #7E3E4E", "a5$ c #894959", "b5$ c #905060", "c5$ c #985868", "d5$ c #9F5D6B", "e5$ c #9B5967", "f5$ c #AB6977", "g5$ c #BA7683", "h5$ c #B77380", "i5$ c #A76370", "j5$ c #98515F", "k5$ c #9D5561", "l5$ c #93444A", "m5$ c #671716", "n5$ c #5B2A26", "o5$ c #5B3230", "p5$ c #49302C", "q5$ c #5E5A4E", "r5$ c #BAB8AB", "s5$ c #D6D4C7", "t5$ c #B5B3A6", "u5$ c #4C3E23", "v5$ c #413316", "w5$ c #47381B", "x5$ c #47371D", "y5$ c #2A0F04", "z5$ c #461A11", "A5$ c #7A2015", "B5$ c #791F14", "C5$ c #872524", "D5$ c #8D383B", "E5$ c #904240", "F5$ c #833533", "G5$ c #893837", "H5$ c #60251D", "I5$ c #471C13", "J5$ c #482016", "K5$ c #482D22", "L5$ c #49322A", "M5$ c #3B3734", "N5$ c #2E282A", "O5$ c #393337", "P5$ c #595355", "Q5$ c #857F7F", "R5$ c #BCBAA3", "S5$ c #B8B69D", "T5$ c #A5A38A", "U5$ c #919074", "V5$ c #656549", "W5$ c #5F5F43", "X5$ c #545438", "Y5$ c #45452B", "Z5$ c #37371F", "`5$ c #2D2C17", " 6$ c #252314", ".6$ c #2B1812", "+6$ c #561B1D", "@6$ c #581C1C", "#6$ c #5A1E20", "$6$ c #5D1F20", "%6$ c #5B1E1D", "&6$ c #5A1D1A", "*6$ c #5C1D18", "=6$ c #70160E", "-6$ c #881C1A", ";6$ c #871918", ">6$ c #9B2322", ",6$ c #9A2422", "'6$ c #971A16", ")6$ c #9F1D1B", "!6$ c #A11F1D", "~6$ c #A3211F", "{6$ c #A52321", "]6$ c #A2201E", "^6$ c #A01E1C", "/6$ c #8C1E1D", "(6$ c #741E21", "_6$ c #711C1F", ":6$ c #6D1F1F", "<6$ c #5F2322", "[6$ c #562320", "}6$ c #371B17", "|6$ c #2B1611", "16$ c #1E0F0A", "26$ c #170C08", "36$ c #150D0A", "46$ c #5C5648", "56$ c #CBC4B1", "66$ c #B9AFB0", "76$ c #D9CCBB", "86$ c #C1B59F", "96$ c #877664", "06$ c #402B18", "a6$ c #200300", "b6$ c #300C00", "c6$ c #51150D", "d6$ c #92292E", "e6$ c #942B30", "f6$ c #982D33", "g6$ c #9C3137", "h6$ c #9B3036", "i6$ c #9E3339", "j6$ c #9B3437", "k6$ c #973836", "l6$ c #96363A", "m6$ c #98393F", "n6$ c #993E47", "o6$ c #984F5A", "p6$ c #904E5A", "q6$ c #794A54", "r6$ c #8D6870", "s6$ c #B1969D", "t6$ c #AD9DA7", "u6$ c #F2EBF2", "v6$ c #FEF7FE", "w6$ c #F9F4F8", "x6$ c #DDD7D9", "y6$ c #E1DBDD", "z6$ c #F7EDEC", "A6$ c #F3E5E5", "B6$ c #BEAAA9", "C6$ c #B09697", "D6$ c #B0918F", "E6$ c #956E6F", "F6$ c #8E6465", "G6$ c #9D6F6F", "H6$ c #966167", "I6$ c #773849", "J6$ c #6B2B3C", "K6$ c #AB6B7B", "L6$ c #9E5E6E", "M6$ c #924F60", "N6$ c #A66374", "O6$ c #BC7887", "P6$ c #CA8391", "Q6$ c #B16A78", "R6$ c #98525D", "S6$ c #98505C", "T6$ c #93434C", "U6$ c #8E2B30", "V6$ c #8A252B", "W6$ c #6B191B", "X6$ c #6C1818", "Y6$ c #6F2B28", "Z6$ c #5F2F2D", "`6$ c #643C3A", " 7$ c #5B3C3A", ".7$ c #48302E", "+7$ c #140A01", "@7$ c #7A6E58", "#7$ c #4E4025", "$7$ c #463718", "%7$ c #46361C", "&7$ c #2D1509", "*7$ c #3F170F", "=7$ c #4D1C17", "-7$ c #8B3538", ";7$ c #8C3E3C", ">7$ c #883A38", ",7$ c #5F231B", "'7$ c #4F1A14", ")7$ c #511C14", "!7$ c #512117", "~7$ c #4D2116", "{7$ c #4C2C21", "]7$ c #393335", "^7$ c #575151", "/7$ c #746F6C", "(7$ c #929079", "_7$ c #817F66", ":7$ c #5C5B3F", "<7$ c #58583E", "[7$ c #47472F", "}7$ c #4D1D1B", "|7$ c #511E1D", "17$ c #561A1A", "27$ c #5E1E1E", "37$ c #5D1D1B", "47$ c #5C1C1A", "57$ c #881A19", "67$ c #992321", "77$ c #931D19", "87$ c #4B221E", "97$ c #23100A", "07$ c #1A0D07", "a7$ c #514A37", "b7$ c #736C59", "c7$ c #C3BCAC", "d7$ c #B5ABAC", "e7$ c #DCCDBA", "f7$ c #9A8A73", "g7$ c #2B1000", "h7$ c #321102", "i7$ c #481E10", "j7$ c #552318", "k7$ c #5A1F17", "l7$ c #942D31", "m7$ c #952A30", "n7$ c #962B31", "o7$ c #9D3238", "p7$ c #963637", "q7$ c #953738", "r7$ c #983B43", "s7$ c #993F49", "t7$ c #90424F", "u7$ c #944D5B", "v7$ c #8D4F5C", "w7$ c #885460", "x7$ c #835862", "y7$ c #A4808A", "z7$ c #A78890", "A7$ c #C9B2BA", "B7$ c #B1A6AE", "C7$ c #E5E0E7", "D7$ c #F7F2F8", "E7$ c #FEF9FF", "F7$ c #F8F3F7", "G7$ c #DBD5D9", "H7$ c #D9D0D3", "I7$ c #DFD3D5", "J7$ c #D2C2C3", "K7$ c #B49EA0", "L7$ c #AE9193", "M7$ c #A58384", "N7$ c #8C6465", "O7$ c #936669", "P7$ c #A06F72", "Q7$ c #814755", "R7$ c #6F3043", "S7$ c #844556", "T7$ c #AE6E7F", "U7$ c #B17181", "V7$ c #A06070", "W7$ c #A05D6E", "X7$ c #A3616F", "Y7$ c #9E5A69", "Z7$ c #BA7381", "`7$ c #C27B89", " 8$ c #AB636F", ".8$ c #954B58", "+8$ c #994D59", "@8$ c #934249", "#8$ c #8D2C33", "$8$ c #5D2A27", "%8$ c #5C302F", "&8$ c #5F3C3A", "*8$ c #573B38", "=8$ c #46312E", "-8$ c #170D04", ";8$ c #6C6048", ">8$ c #504227", ",8$ c #423515", "'8$ c #453615", ")8$ c #443518", "!8$ c #2D1207", "~8$ c #31140C", "{8$ c #3A130C", "]8$ c #471A15", "^8$ c #692220", "/8$ c #883235", "(8$ c #652019", "_8$ c #5B1B19", ":8$ c #5A1D18", "<8$ c #502A21", "[8$ c #382016", "}8$ c #443F3B", "|8$ c #827F6E", "18$ c #83806D", "28$ c #7D7B66", "38$ c #636148", "48$ c #58563D", "58$ c #494931", "68$ c #40422C", "78$ c #373924", "88$ c #48201E", "98$ c #4E1C1B", "08$ c #571D1C", "a8$ c #561918", "b8$ c #591917", "c8$ c #5A1A1A", "d8$ c #5D1C1A", "e8$ c #871B1B", "f8$ c #891B1A", "g8$ c #891D1B", "h8$ c #861E1D", "i8$ c #751F22", "j8$ c #381B15", "k8$ c #270F0B", "l8$ c #1C110B", "m8$ c #4D4538", "n8$ c #BDB6A6", "o8$ c #B0A6A7", "p8$ c #240700", "q8$ c #270600", "r8$ c #5A2A1C", "s8$ c #5E251A", "t8$ c #932E32", "u8$ c #9B2E34", "v8$ c #9E353A", "w8$ c #9A3638", "x8$ c #963836", "y8$ c #963838", "z8$ c #993A42", "A8$ c #993D48", "B8$ c #99414F", "C8$ c #984454", "D8$ c #8E4B5C", "E8$ c #864C5B", "F8$ c #825260", "G8$ c #825967", "H8$ c #A78792", "I8$ c #AC919A", "J8$ c #D0BCC5", "K8$ c #C4BAC2", "L8$ c #DFD9DD", "M8$ c #DBD0D4", "N8$ c #D0C1C4", "O8$ c #A58C8F", "P8$ c #A28388", "Q8$ c #947074", "R8$ c #865B62", "S8$ c #98696F", "T8$ c #9D6A71", "U8$ c #7B4650", "V8$ c #713745", "W8$ c #773A4A", "X8$ c #B07383", "Y8$ c #D495A6", "Z8$ c #B27483", "`8$ c #A96775", " 9$ c #9F5B68", ".9$ c #B56D79", "+9$ c #B56B78", "@9$ c #A15561", "#9$ c #914350", "$9$ c #8D3038", "%9$ c #8E2D34", "&9$ c #652F2D", "*9$ c #5C2F2C", "=9$ c #5B3331", "-9$ c #43302C", ";9$ c #D2D0C3", ">9$ c #BEBCAF", ",9$ c #6E624A", "'9$ c #53452A", ")9$ c #443717", "!9$ c #463716", "~9$ c #453416", "{9$ c #4C3722", "]9$ c #35140D", "^9$ c #431714", "/9$ c #4C1916", "(9$ c #712323", "_9$ c #842A22", ":9$ c #761D0F", "<9$ c #873736", "[9$ c #5C271F", "}9$ c #472219", "|9$ c #2E1A11", "19$ c #3F3B30", "29$ c #43412C", "39$ c #3F3D26", "49$ c #3E3C25", "59$ c #3E3D28", "69$ c #3F3E2A", "79$ c #373826", "89$ c #4E1E1C", "99$ c #4F1C1B", "09$ c #571B1A", "a9$ c #561916", "b9$ c #581816", "c9$ c #5A1A18", "d9$ c #5B1A18", "e9$ c #861A1A", "f9$ c #8A1C1B", "g9$ c #731E21", "h9$ c #280F0A", "i9$ c #210E08", "j9$ c #201710", "k9$ c #19140E", "l9$ c #3F3825", "m9$ c #6A6350", "n9$ c #ADAAA1", "o9$ c #CFC2B2", "p9$ c #D8C8B9", "q9$ c #684F3B", "r9$ c #2A0700", "s9$ c #973034", "t9$ c #9C2F35", "u9$ c #A0373C", "v9$ c #9A3839", "w9$ c #973937", "x9$ c #97393A", "y9$ c #993C46", "z9$ c #9B3F4C", "A9$ c #9B4254", "B9$ c #974659", "C9$ c #994E63", "D9$ c #935266", "E9$ c #885166", "F9$ c #875B6C", "G9$ c #825D6E", "H9$ c #9C808E", "I9$ c #A28C98", "J9$ c #D1C1CB", "K9$ c #DED7DE", "L9$ c #F6F4F9", "M9$ c #EFEAF0", "N9$ c #EAE5EB", "O9$ c #ECE6EA", "P9$ c #EBE2E7", "Q9$ c #E7DBDF", "R9$ c #CBBAC0", "S9$ c #A69196", "T9$ c #957A81", "U9$ c #8C6B72", "V9$ c #8A626B", "W9$ c #9C6A75", "X9$ c #915D69", "Y9$ c #6B3542", "Z9$ c #662D3C", "`9$ c #A26978", " 0$ c #DFA5B4", ".0$ c #DC9FAE", "+0$ c #AE7180", "@0$ c #9B5D6A", "#0$ c #A0616C", "$0$ c #9E5A65", "%0$ c #AE6873", "&0$ c #AE6570", "*0$ c #A35763", "=0$ c #934650", "-0$ c #8F323A", ";0$ c #6C1617", ">0$ c #6F1618", ",0$ c #5A312F", "'0$ c #5E3B39", ")0$ c #5D413E", "!0$ c #4C3734", "~0$ c #B8B6A9", "{0$ c #877B6D", "]0$ c #55472A", "^0$ c #463917", "/0$ c #483A17", "(0$ c #463615", "_0$ c #321A10", ":0$ c #361712", "<0$ c #3F1614", "[0$ c #481615", "}0$ c #541A19", "|0$ c #631F20", "10$ c #781F11", "20$ c #6F2121", "30$ c #454233", "40$ c #413E2B", "50$ c #3E3C27", "60$ c #3A3823", "70$ c #373622", "80$ c #511B19", "90$ c #581C1B", "00$ c #5A1B16", "a0$ c #892822", "b0$ c #891B1C", "c0$ c #8A1C1D", "d0$ c #891918", "e0$ c #991E20", "f0$ c #3B1812", "g0$ c #2B0F0B", "h0$ c #241009", "i0$ c #0B0B09", "j0$ c #3E3724", "k0$ c #736C5C", "l0$ c #DAD2C7", "m0$ c #D9CCBC", "n0$ c #786554", "o0$ c #2D1000", "p0$ c #8A2529", "q0$ c #962F33", "r0$ c #973939", "s0$ c #9A3B43", "t0$ c #9A3D48", "u0$ c #9A3F50", "v0$ c #994157", "w0$ c #9F556E", "x0$ c #905C73", "y0$ c #946A7E", "z0$ c #A28A98", "A0$ c #AD9BA7", "B0$ c #E6DAE4", "C0$ c #F0E9F0", "D0$ c #F6F4F7", "E0$ c #E9E4E8", "F0$ c #E8E3E7", "G0$ c #EDE7EB", "H0$ c #F1E6EC", "I0$ c #BCA8B1", "J0$ c #AF98A0", "K0$ c #8E707A", "L0$ c #7B5A65", "M0$ c #8B6270", "N0$ c #9B6C7C", "O0$ c #7F4A5C", "P0$ c #653040", "Q0$ c #703C49", "R0$ c #DDA9B5", "S0$ c #FEC8D5", "T0$ c #CB93A0", "U0$ c #AA6E7A", "V0$ c #9A5C67", "W0$ c #A25E69", "X0$ c #B26A75", "Y0$ c #A45862", "Z0$ c #91444C", "`0$ c #8C2528", " a$ c #5B2B29", ".a$ c #61423F", "+a$ c #5E4642", "@a$ c #483632", "#a$ c #C0BCB0", "$a$ c #817461", "%a$ c #73674F", "&a$ c #594B2E", "*a$ c #4A3C19", "=a$ c #483817", "-a$ c #431B19", ";a$ c #4A1A1A", ">a$ c #53181A", ",a$ c #792827", "'a$ c #872C27", ")a$ c #872D25", "!a$ c #862C24", "~a$ c #7A2113", "{a$ c #822D2A", "]a$ c #2D2A1B", "^a$ c #2F2C19", "/a$ c #4D1C18", "(a$ c #501A18", "_a$ c #561B17", ":a$ c #6C1E1E", "b$ c #541A18", ",b$ c #571C16", "'b$ c #731611", ")b$ c #881A1B", "!b$ c #87191A", "~b$ c #8F1716", "{b$ c #991E21", "]b$ c #9D2121", "^b$ c #911E19", "/b$ c #8A1616", "(b$ c #38311E", "_b$ c #6B6356", ":b$ c #B6ACAD", "c$ c #881C1C", ",c$ c #861819", "'c$ c #951C13", ")c$ c #891716", "!c$ c #881615", "~c$ c #2E1D13", "{c$ c #130E0B", "]c$ c #342F1C", "^c$ c #4E4735", "/c$ c #5E5945", "(c$ c #C2B9B4", "_c$ c #B6ACAB", ":c$ c #B2B0A1", "d$ c #7F2115", ",d$ c #7E2016", "'d$ c #791B11", ")d$ c #802D25", "!d$ c #812E28", "~d$ c #803029", "{d$ c #822F29", "]d$ c #862E2A", "^d$ c #751E14", "/d$ c #441B15", "(d$ c #37120C", "_d$ c #2A0C04", ":d$ c #281507", "e$ c #EDE2EA", ",e$ c #A48E9B", "'e$ c #8E7183", ")e$ c #B592A6", "!e$ c #CBA1B5", "~e$ c #B5849A", "{e$ c #A16A81", "]e$ c #7E425B", "^e$ c #6D2F46", "/e$ c #A06579", "(e$ c #BE8A96", "_e$ c #C5939C", ":e$ c #B7828C", "f$ c #171115", ",f$ c #1A1116", "'f$ c #191013", ")f$ c #423F2E", "!f$ c #6F6C5D", "~f$ c #C0B9B1", "{f$ c #B2B49F", "]f$ c #BCBFAA", "^f$ c #C1C3AD", "/f$ c #1B0800", "(f$ c #290D00", "_f$ c #562014", ":f$ c #632319", "g$ c #1D140F", ",g$ c #2C1E11", "'g$ c #411C13", ")g$ c #521B16", "!g$ c #541B14", "~g$ c #5C1710", "{g$ c #A31D1E", "]g$ c #A31E1F", "^g$ c #99231F", "/g$ c #901D20", "(g$ c #8F1C1F", "_g$ c #401E1C", ":g$ c #361818", "h$ c #503E3E", ",h$ c #404036", "'h$ c #D0D0C4", ")h$ c #938E7A", "!h$ c #766F53", "~h$ c #625C3C", "{h$ c #544929", "]h$ c #4D3F22", "^h$ c #3C2418", "/h$ c #4D2C23", "(h$ c #5F302A", "_h$ c #83302C", ":h$ c #371209", "i$ c #903439", ",i$ c #8C2828", "'i$ c #8F2927", ")i$ c #8A2624", "!i$ c #81231B", "~i$ c #69282C", "{i$ c #5F2229", "]i$ c #552229", "^i$ c #533036", "/i$ c #6D5257", "(i$ c #7B6266", "_i$ c #644E51", ":i$ c #483636", "j$ c #F1EAF2", ",j$ c #EBE8EF", "'j$ c #F7F8FC", ")j$ c #FAFAFC", "!j$ c #FAF8FB", "~j$ c #EEE9EF", "{j$ c #C2B8C0", "]j$ c #A696A0", "^j$ c #B59FAB", "/j$ c #CBAFBD", "(j$ c #B896A6", "_j$ c #B18795", ":j$ c #854351", "k$ c #982B2E", ",k$ c #992C2F", "'k$ c #92302D", ")k$ c #983633", "!k$ c #9A3636", "~k$ c #9C3A47", "{k$ c #9D3D4B", "]k$ c #9A4354", "^k$ c #944759", "/k$ c #8F4A5C", "(k$ c #925769", "_k$ c #784858", ":k$ c #7B5667", "l$ c #921D23", ",l$ c #931E24", "'l$ c #982427", ")l$ c #9A2629", "!l$ c #5A1917", "~l$ c #591816", "{l$ c #4F1D1C", "]l$ c #341B16", "^l$ c #29160F", "/l$ c #211008", "(l$ c #190C04", "_l$ c #0E1810", ":l$ c #111B13", "m$ c #783D39", ",m$ c #8D2B2C", "'m$ c #552C26", ")m$ c #281914", "!m$ c #2E1C18", "~m$ c #491915", "{m$ c #4E1915", "]m$ c #511A17", "^m$ c #541915", "/m$ c #55190F", "(m$ c #551B10", "_m$ c #561A10", ":m$ c #54180E", "n$ c #925D65", ",n$ c #874A52", "'n$ c #8A474E", ")n$ c #894248", "!n$ c #953F48", "~n$ c #8B2532", "{n$ c #922633", "]n$ c #952A34", "^n$ c #942933", "/n$ c #8F242E", "(n$ c #8F242C", "_n$ c #932830", ":n$ c #90252B", "o$ c #95282D", ",o$ c #972A30", "'o$ c #992C32", ")o$ c #972E32", "!o$ c #9D3639", "~o$ c #973335", "{o$ c #943032", "]o$ c #9B363C", "^o$ c #983844", "/o$ c #9A3C4A", "(o$ c #9B404F", "_o$ c #974655", ":o$ c #954D5B", "p$ c #601615", ",p$ c #581B18", "'p$ c #581E1A", ")p$ c #1D0F06", "!p$ c #101008", "~p$ c #1E1B24", "{p$ c #201B22", "]p$ c #2E2613", "^p$ c #1F1300", "/p$ c #201100", "(p$ c #302208", "_p$ c #413118", ":p$ c #35250C", "q$ c #8D2428", ",q$ c #30150E", "'q$ c #27130C", ")q$ c #190E0A", "!q$ c #311917", "~q$ c #331A16", "{q$ c #381917", "]q$ c #411A15", "^q$ c #4E1816", "/q$ c #A12324", "(q$ c #A22425", "_q$ c #9F2323", ":q$ c #9E2B28", "r$ c #932129", ",r$ c #94222A", "'r$ c #95232B", ")r$ c #8E2329", "!r$ c #6D4B4C", "~r$ c #886B6D", "{r$ c #7B6769", "]r$ c #4E4040", "^r$ c #2D2322", "/r$ c #CECBC2", "(r$ c #99907F", "_r$ c #625437", ":r$ c #514424", "s$ c #EBE9EC", ",s$ c #ECEAEF", "'s$ c #F6EFF6", ")s$ c #FBF0F8", "!s$ c #F3E3ED", "~s$ c #EDD9E2", "{s$ c #D6BCC5", "]s$ c #A8878E", "^s$ c #93686F", "/s$ c #824F54", "(s$ c #7F4247", "_s$ c #854142", ":s$ c #9A4542", "t$ c #92282A", ",t$ c #94292F", "'t$ c #972C32", ")t$ c #9D2F38", "!t$ c #9E303B", "~t$ c #983039", "{t$ c #962E37", "]t$ c #94303C", "^t$ c #9A3543", "/t$ c #9C5364", "(t$ c #995466", "_t$ c #975768", ":t$ c #945A69", "u$ c #1C0F09", ",u$ c #120F06", "'u$ c #1B1308", ")u$ c #201708", "!u$ c #110500", "~u$ c #1D0D00", "{u$ c #5D4C3A", "]u$ c #EBD8C7", "^u$ c #FBE6D5", "/u$ c #B09B8A", "(u$ c #271000", "_u$ c #250E00", ":u$ c #32160A", "v$ c #361A19", ",v$ c #3B1B1C", "'v$ c #3E1718", ")v$ c #471516", "!v$ c #461616", "~v$ c #411814", "{v$ c #421B16", "]v$ c #471C16", "^v$ c #4A1714", "/v$ c #4D1814", "(v$ c #511B11", "_v$ c #731D0E", ":v$ c #741C10", "w$ c #78786E", ",w$ c #B8B5AC", "'w$ c #C7C4BB", ")w$ c #939290", "!w$ c #726545", "~w$ c #453C1D", "{w$ c #423B1F", "]w$ c #3E361F", "^w$ c #4B402E", "/w$ c #291308", "(w$ c #752528", "_w$ c #8A2920", ":w$ c #862618", "x$ c #9D3C35", ",x$ c #99332E", "'x$ c #942C2B", ")x$ c #8E2627", "!x$ c #902127", "~x$ c #902128", "{x$ c #8C2127", "]x$ c #80322E", "^x$ c #5C2C2A", "/x$ c #5C3838", "(x$ c #7E6465", "_x$ c #836F70", ":x$ c #C5C1B8", "y$ c #952E32", ",y$ c #963435", "'y$ c #912D35", ")y$ c #A24454", "!y$ c #A64B5D", "~y$ c #9A4258", "{y$ c #A8566C", "]y$ c #984D62", "^y$ c #9A5769", "/y$ c #7D4757", "(y$ c #8B5867", "_y$ c #6A4453", ":y$ c #5E4958", "z$ c #0C1204", ",z$ c #0C1301", "'z$ c #0F1304", ")z$ c #111403", "!z$ c #131404", "~z$ c #171403", "{z$ c #1A1303", "]z$ c #71574A", "^z$ c #65493D", "/z$ c #4C2E23", "(z$ c #38180D", "_z$ c #270F03", ":z$ c #92221E", "A$ c #472C21", ",A$ c #250D03", "'A$ c #952521", ")A$ c #952825", "!A$ c #972A27", "~A$ c #982C2A", "{A$ c #953A39", "]A$ c #963A3F", "^A$ c #9A3E49", "/A$ c #9F4453", "(A$ c #A44B5D", "_A$ c #A55065", ":A$ c #97485E", "B$ c #4F3B30", ",B$ c #372116", "'B$ c #942420", ")B$ c #992D2B", "!B$ c #992F2F", "~B$ c #993132", "{B$ c #983031", "]B$ c #973437", "^B$ c #9A373C", "/B$ c #9B383D", "(B$ c #95393A", "_B$ c #A14A5A", ":B$ c #A35469", "C$ c #422231", ",C$ c #634756", "'C$ c #FFE9F5", ")C$ c #EFE6E9", "!C$ c #EFE5E6", "~C$ c #FDEFEF", "{C$ c #F2E0E0", "]C$ c #D9C6C2", "^C$ c #917975", "/C$ c #886D66", "(C$ c #866963", "_C$ c #9A7C74", ":C$ c #A98883", "D$ c #A17876", ",D$ c #956968", "'D$ c #AD8482", ")D$ c #966C6D", "!D$ c #93696A", "~D$ c #906262", "{D$ c #916161", "]D$ c #9C6968", "^D$ c #A56A6C", "/D$ c #9F5F60", "(D$ c #975153", "_D$ c #932B32", ":D$ c #92272F", "E$ c #902A35", ",E$ c #942A34", "'E$ c #932832", ")E$ c #93252E", "!E$ c #8D1F22", "~E$ c #77272A", "{E$ c #66282B", "]E$ c #623033", "^E$ c #683F43", "/E$ c #74555A", "(E$ c #725E60", "_E$ c #161A1B", ":E$ c #908871", "F$ c #161A1D", ",F$ c #98947B", "'F$ c #837C62", ")F$ c #71654D", "!F$ c #453422", "~F$ c #483628", "{F$ c #2D140F", "]F$ c #30130F", "^F$ c #502421", "/F$ c #682220", "(F$ c #852C24", "_F$ c #822A20", ":F$ c #832B21", "G$ c #8D1C20", ",G$ c #602E2F", "'G$ c #593132", ")G$ c #8B6D6F", "!G$ c #564A4C", "~G$ c #413B3D", "{G$ c #101115", "]G$ c #5C5751", "^G$ c #97957E", "/G$ c #746850", "(G$ c #5F5039", "_G$ c #2B120E", ":G$ c #321511", "H$ c #4D1613", ",H$ c #551817", "'H$ c #531615", ")H$ c #5B191A", "!H$ c #5C1A1B", "~H$ c #9F1A1B", "{H$ c #9F2124", "]H$ c #9F2125", "^H$ c #861E15", "/H$ c #5F1919", "(H$ c #5F191B", "_H$ c #5E181A", ":H$ c #5D1719", "I$ c #8E1615", ",I$ c #A72822", "'I$ c #5B160F", ")I$ c #5E1818", "!I$ c #5A1819", "~I$ c #501E17", "{I$ c #1A0C0C", "]I$ c #4D1C1F", "^I$ c #792A2F", "/I$ c #932D2B", "(I$ c #973A42", "_I$ c #973A44", ":I$ c #973B46", "J$ c #5F1B1C", ",J$ c #A82923", "'J$ c #9E2224", ")J$ c #9E2125", "!J$ c #5A150E", "~J$ c #5D1717", "{J$ c #5D191A", "]J$ c #3F1C1A", "^J$ c #321414", "/J$ c #1D0A0C", "(J$ c #161010", "_J$ c #1F1715", ":J$ c #331B19", "K$ c #703235", ",K$ c #842126", "'K$ c #80191D", ")K$ c #973031", "!K$ c #933640", "~K$ c #9B414D", "{K$ c #A04F62", "]K$ c #A45366", "^K$ c #A65568", "/K$ c #A15464", "(K$ c #A35B67", "_K$ c #98555E", ":K$ c #A4626C", "L$ c #60181B", ",L$ c #581D19", "'L$ c #3D191B", ")L$ c #301116", "!L$ c #250A0F", "~L$ c #1A0A0D", "{L$ c #1E1614", "]L$ c #271916", "^L$ c #32201E", "/L$ c #77393E", "(L$ c #760F13", "_L$ c #932F2F", ":L$ c #953332", "M$ c #611D1E", ",M$ c #551515", "'M$ c #571D19", ")M$ c #421A1A", "!M$ c #341213", "~M$ c #280B0D", "{M$ c #1E0A0B", "]M$ c #211916", "^M$ c #412323", "/M$ c #4B2324", "(M$ c #602E31", "_M$ c #74131A", ":M$ c #6D0A0D", "N$ c #501612", ",N$ c #6D1513", "'N$ c #A42922", ")N$ c #A22720", "!N$ c #A72621", "~N$ c #A92521", "{N$ c #A12722", "]N$ c #9E222A", "^N$ c #9F232B", "/N$ c #9F2228", "(N$ c #9C2126", "_N$ c #9A1F22", ":N$ c #9C2626", "O$ c #932027", ",O$ c #901F25", "'O$ c #8F1E24", ")O$ c #8D1E24", "!O$ c #8B1C22", "~O$ c #881B20", "{O$ c #871A1F", "]O$ c #83191D", "^O$ c #82181C", "/O$ c #5E2D26", "(O$ c #613630", "_O$ c #633D3A", ":O$ c #5F403E", "P$ c #AE8A8E", ",P$ c #D0AEAF", "'P$ c #C9A5A7", ")P$ c #C89FA3", "!P$ c #BF9295", "~P$ c #CF9EA2", "{P$ c #D19CA2", "]P$ c #A36A70", "^P$ c #A25662", "/P$ c #A3515F", "(P$ c #9E4A59", "_P$ c #9E4654", ":P$ c #A34955", "Q$ c #943E41", ",Q$ c #9B4049", "'Q$ c #9F4D59", ")Q$ c #A0505D", "!Q$ c #A25160", "~Q$ c #A15361", "{Q$ c #A05365", "]Q$ c #9E5367", "^Q$ c #9B5064", "/Q$ c #9A4F64", "(Q$ c #9D5267", "_Q$ c #974F63", ":Q$ c #9E6574", "R$ c #94403E", ",R$ c #9E434C", "'R$ c #9B444D", ")R$ c #9C4B54", "!R$ c #9F4F5A", "~R$ c #9F515E", "{R$ c #A05260", "]R$ c #9F5262", "^R$ c #9E5463", "/R$ c #9A5165", "(R$ c #965164", "_R$ c #955B6A", ":R$ c #A5717E", "S$ c #9E5769", ",S$ c #9D5668", "'S$ c #A87886", ")S$ c #AA7C87", "!S$ c #A0757F", "~S$ c #B18791", "{S$ c #CFA7AF", "]S$ c #E2BDC4", "^S$ c #EFCAD1", "/S$ c #ECC5CA", "(S$ c #BF949B", "_S$ c #BB8C94", ":S$ c #B17E85", "T$ c #945661", ",T$ c #A96773", "'T$ c #A35F6C", ")T$ c #99565D", "!T$ c #985159", "~T$ c #9C5158", "{T$ c #9A4A53", "]T$ c #A84B55", "^T$ c #A33E46", "/T$ c #A33B42", "(T$ c #A23940", "_T$ c #9F363B", ":T$ c #9C3337", "U$ c #9F525A", ",U$ c #A74A54", "'U$ c #A33F49", ")U$ c #A43B42", "!U$ c #A33840", "~U$ c #A2353B", "{U$ c #A03339", "]U$ c #9E3136", "^U$ c #9D3035", "/U$ c #962328", "(U$ c #5D4140", "_U$ c #837376", ":U$ c #8A7E82", "V$ c #AD6267", ",V$ c #A1444C", "'V$ c #A23E46", ")V$ c #A43C43", "!V$ c #A33A41", "~V$ c #A4373D", "{V$ c #A3343B", "]V$ c #A13238", "^V$ c #9F3036", "/V$ c #992F33", "(V$ c #94252B", "_V$ c #93242A", ":V$ c #912228", "W$ c #94343F", ",W$ c #962D3B", "'W$ c #A53742", ")W$ c #A1383F", "!W$ c #943B3F", "~W$ c #9A4A4B", "{W$ c #9B494B", "]W$ c #A35157", "^W$ c #A24F57", "/W$ c #9F4E57", "(W$ c #9B4E58", "_W$ c #95565F", ":W$ c #94575F", "X$ c #891515", ",X$ c #341210", "'X$ c #270B08", ")X$ c #461C1E", "!X$ c #642D32", "~X$ c #952C3A", "{X$ c #A13640", "]X$ c #9F363D", "^X$ c #963B40", "/X$ c #9A3D45", "(X$ c #984648", "_X$ c #A04B50", ":X$ c #A34C52", "Y$ c #200806", ",Y$ c #1B0907", "'Y$ c #0B100C", ")Y$ c #7A393F", "!Y$ c #842E39", "~Y$ c #8E2835", "{Y$ c #962C36", "]Y$ c #9D323C", "^Y$ c #9E353C", "/Y$ c #9C4045", "(Y$ c #974343", "_Y$ c #9F464A", ":Y$ c #A1484E", "Z$ c #9D2E37", ",Z$ c #A1333E", "'Z$ c #A43B3F", ")Z$ c #A84142", "!Z$ c #AA4243", "~Z$ c #A63E3F", "{Z$ c #A23838", "]Z$ c #A13535", "^Z$ c #992D2D", "/Z$ c #791515", "(Z$ c #691F20", "_Z$ c #691D1F", ":Z$ c #67181E", "`$ c #A42C2B", ",`$ c #A52B2A", "'`$ c #A32926", ")`$ c #A12326", "!`$ c #A12327", "~`$ c #9D2C28", "{`$ c #962827", "]`$ c #9F343E", "^`$ c #A23B3F", "/`$ c #A54143", "(`$ c #A94243", "_`$ c #A63F40", ":`$ c #A43C3D", "<`$ c #A23A39", "[`$ c #9D3333", "}`$ c #68181B", "|`$ c #69161E", "1`$ c #65181E", "2`$ c #37110E", "3`$ c #280C09", "4`$ c #1D0A06", "5`$ c #171E17", "6`$ c #5A3031", "7`$ c #71393C", "8`$ c #844246", "9`$ c #6C171E", "0`$ c #7B1B26", "a`$ c #A03B41", "b`$ c #94383D", "c`$ c #9A3942", "d`$ c #9C3D43", "e`$ c #9B4141", "f`$ c #98403E", "g`$ c #9A3E3F", "h`$ c #A3444A", "i`$ c #A0434B", "j`$ c #A24750", "k`$ c #9C5156", "l`$ c #9C5A5E", "m`$ c #A26467", "n`$ c #A96E72", "o`$ c #AB7477", "p`$ c #B17A7D", "q`$ c #B77F82", "r`$ c #B3787C", "s`$ c #A06267", "t`$ c #955458", "u`$ c #9C575C", "v`$ c #A0595D", "w`$ c #985054", "x`$ c #9C5054", "y`$ c #A05156", "z`$ c #A7565C", "A`$ c #AF5D63", "B`$ c #B8636A", "C`$ c #BC676E", "D`$ c #B96A6F", "E`$ c #B46F72", "F`$ c #C18182", "G`$ c #C88485", "H`$ c #AF676A", "I`$ c #904448", "J`$ c #8D3B3F", "K`$ c #9E4247", "L`$ c #9F3F43", "M`$ c #9D383C", "N`$ c #9A3034", "O`$ c #9A3032", "P`$ c #9C3030", "Q`$ c #9B2E31", "R`$ c #972D31", "S`$ c #932322", "T`$ c #6E1C1E", "U`$ c #53201C", "V`$ c #562D29", "W`$ c #603E3C", "X`$ c #5D4342", "Y`$ c #C2B8B9", "Z`$ c #5C525A", "``$ c #1E181C", " % c #4A4037", ". % c #584A41", "+ % c #67544E", "@ % c #807269", "# % c #918473", "$ % c #4A391B", "% % c #463312", "& % c #433216", "* % c #41301E", "= % c #47362E", "- % c #291111", "; % c #2F1216", "> % c #38151B", ", % c #43181F", "' % c #501D24", ") % c #5E222A", "! % c #6B252F", "~ % c #742731", "{ % c #832E29", "] % c #862F25", "^ % c #8A2219", "/ % c #53211A", "( % c #180E0F", "_ % c #1B0C0F", ": % c #221215", "< % c #2A1618", "[ % c #341512", "} % c #381519", "| % c #6B1D13", "1 % c #A22A29", "2 % c #A52A23", "3 % c #AA2622", "4 % c #962926", "5 % c #982A29", "6 % c #9B2D2E", "7 % c #9A2C37", "8 % c #A24041", "9 % c #A34140", "0 % c #A23E3E", "a % c #A13D3D", "b % c #A43D3E", "c % c #932524", "d % c #92201F", "e % c #8B1515", "f % c #8A1414", "g % c #69171B", "h % c #6B161B", "i % c #6B151E", "j % c #561F1C", "k % c #4C1C18", "l % c #2E110D", "m % c #200D09", "n % c #673335", "o % c #85474A", "p % c #641218", "q % c #771C25", "r % c #A13C42", "s % c #933738", "t % c #93373C", "u % c #9B3741", "v % c #9C4041", "w % c #993F3E", "x % c #983C3D", "y % c #9B3D3E", "z % c #A44146", "A % c #A6424A", "B % c #A4474F", "C % c #A44A53", "D % c #9F4C54", "E % c #9B5055", "F % c #9F5A5F", "G % c #A5676A", "H % c #AA6F73", "I % c #A87071", "J % c #AE7375", "K % c #AC7173", "L % c #A86A6D", "M % c #A36364", "N % c #9D5B5F", "O % c #995457", "P % c #974F53", "Q % c #994E52", "R % c #9D4E51", "S % c #A55558", "T % c #AE5C60", "U % c #B66166", "V % c #BA6568", "W % c #BB666B", "X % c #B8686B", "Y % c #AD6769", "Z % c #B97779", "` % c #B67072", " .% c #9C5457", "..% c #934447", "+.% c #A1484C", "@.% c #9E3E40", "#.% c #9B3133", "$.% c #9A3030", "%.% c #942325", "&.% c #943030", "*.% c #9B3737", "=.% c #583B37", "-.% c #BAB1B2", ";.% c #776E73", ">.% c #3A333A", ",.% c #161014", "'.% c #715D56", ").% c #816E67", "!.% c #A29686", "~.% c #9A8D7D", "{.% c #4A3716", "].% c #433312", "^.% c #463517", "/.% c #463426", "(.% c #453329", "_.% c #49362F", ":.% c #46322B", "<.% c #3B2720", "[.% c #291315", "}.% c #2B1216", "|.% c #301117", "1.% c #3A121A", "2.% c #46171F", "3.% c #551C25", "4.% c #631F2A", "5.% c #6A212C", "6.% c #792831", "7.% c #8F363C", "8.% c #873026", "9.% c #1C0D10", "0.% c #241417", "a.% c #2C181A", "b.% c #331411", "c.% c #35140F", "d.% c #3D160F", "e.% c #3F1610", "f.% c #3B1717", "g.% c #3A171B", "h.% c #3A1819", "i.% c #9D2117", "j.% c #A32D2B", "k.% c #A32D29", "l.% c #A32924", "m.% c #A62B24", "n.% c #A72A24", "o.% c #AB2723", "p.% c #A92823", "q.% c #A12B2B", "r.% c #9E2D27", "s.% c #9E2D25", "t.% c #9D2E27", "u.% c #9A2D2A", "v.% c #9D2F2E", "w.% c #9F3132", "x.% c #9C323E", "y.% c #9C3C3D", "z.% c #9D3D3E", "A.% c #9D3B3C", "B.% c #9E3C3B", "C.% c #A33F3F", "D.% c #A53F3D", "E.% c #9F3535", "F.% c #9A2E2E", "G.% c #61130F", "H.% c #5C1415", "I.% c #611718", "J.% c #6B1B1E", "K.% c #6C1C1F", "L.% c #6C151E", "M.% c #68171E", "N.% c #0D1611", "O.% c #101A12", "P.% c #482624", "Q.% c #631419", "R.% c #7B212A", "S.% c #9D3A3F", "T.% c #923637", "U.% c #9D3941", "V.% c #9D3F40", "W.% c #993E3D", "X.% c #9F3C3F", "Y.% c #A43F45", "Z.% c #A54048", "`.% c #A54149", " +% c #A3444C", ".+% c #9C555B", "++% c #A16668", "@+% c #A26668", "#+% c #A36566", "$+% c #9A5357", "%+% c #995154", "&+% c #94484C", "*+% c #96474A", "=+% c #9F4D4F", "-+% c #A55355", ";+% c #AC575A", ">+% c #AF5A5D", ",+% c #B15B5C", "'+% c #B15B5E", ")+% c #AD5D5E", "!+% c #A35B5E", "~+% c #A25C5E", "{+% c #9C5155", "]+% c #9F4F52", "^+% c #9E4245", "/+% c #9C3538", "(+% c #9B3435", "_+% c #9C3435", ":+% c #9B3332", "<+% c #993130", "[+% c #972F2E", "}+% c #993233", "|+% c #9D3939", "1+% c #A54141", "2+% c #A03C3C", "3+% c #66312B", "4+% c #5A3E3B", "5+% c #897E7C", "6+% c #4C4348", "7+% c #251E25", "8+% c #191317", "9+% c #181B10", "0+% c #1F2114", "a+% c #6B594F", "b+% c #776058", "c+% c #93857C", "d+% c #4B3B1A", "e+% c #48342B", "f+% c #49352C", "g+% c #432F28", "h+% c #2A1617", "i+% c #281416", "j+% c #2A1114", "k+% c #3C151A", "l+% c #48191F", "m+% c #551E24", "n+% c #5E1F27", "o+% c #6B242C", "p+% c #762B32", "q+% c #87363D", "r+% c #853029", "s+% c #863228", "t+% c #832C23", "u+% c #84281D", "v+% c #1E0E0F", "w+% c #271416", "x+% c #2E181A", "y+% c #3B1719", "z+% c #3A1817", "A+% c #491813", "B+% c #4D1611", "C+% c #701510", "D+% c #8B1813", "E+% c #A92A24", "F+% c #A42425", "G+% c #A02528", "H+% c #9E2D29", "I+% c #9D2D29", "J+% c #9E312C", "K+% c #A03330", "L+% c #A23433", "M+% c #A23437", "N+% c #9F3237", "O+% c #9D3036", "P+% c #9E3039", "Q+% c #9D323A", "R+% c #9A3B39", "S+% c #9D3B3A", "T+% c #9C3A39", "U+% c #A33F3D", "V+% c #A5413F", "W+% c #A53D3C", "X+% c #9E3434", "Y+% c #851513", "Z+% c #8B1513", "`+% c #5E130E", " @% c #5F1512", ".@% c #5E1617", "+@% c #621A1B", "@@% c #631719", "#@% c #601617", "$@% c #591514", "%@% c #6B161D", "&@% c #0C1510", "*@% c #7A383A", "=@% c #63181C", "-@% c #953237", ";@% c #97333B", ">@% c #9B363E", ",@% c #9E3941", "'@% c #9C393C", ")@% c #A63E47", "!@% c #A43F47", "~@% c #9F3E47", "{@% c #9E4149", "]@% c #934248", "^@% c #994C52", "/@% c #A35C60", "(@% c #A36163", "_@% c #9E5C5E", ":@% c #9A5558", "<@% c #9E585A", "[@% c #974C50", "}@% c #924648", "|@% c #9C4D52", "1@% c #9D4D50", "2@% c #9E484B", "3@% c #A34A4C", "4@% c #A64D51", "5@% c #A95052", "6@% c #A95150", "7@% c #A65252", "8@% c #A05252", "9@% c #974D4C", "0@% c #9D4D4E", "a@% c #A34E51", "b@% c #A24445", "c@% c #9E3A3C", "d@% c #9D3637", "e@% c #9E3637", "f@% c #942D30", "g@% c #811312", "h@% c #811513", "i@% c #9F3937", "j@% c #9C3836", "k@% c #A03C3A", "l@% c #6A181A", "m@% c #65160F", "n@% c #502828", "o@% c #4E2F2D", "p@% c #8E7E7F", "q@% c #555354", "r@% c #645248", "s@% c #79605B", "t@% c #8A8371", "u@% c #48362C", "v@% c #44312A", "w@% c #3A2720", "x@% c #210E0A", "y@% c #26110E", "z@% c #491F20", "A@% c #5A282B", "B@% c #682D31", "C@% c #773539", "D@% c #A04952", "E@% c #9E424D", "F@% c #84302E", "G@% c #892D22", "H@% c #862A1D", "I@% c #4E1712", "J@% c #140905", "K@% c #160805", "L@% c #2A1512", "M@% c #3F1918", "N@% c #4B1B17", "O@% c #4B1912", "P@% c #4D1812", "Q@% c #4B140F", "R@% c #4C1510", "S@% c #521713", "T@% c #8E211C", "U@% c #A52927", "V@% c #A42A27", "W@% c #A52D2C", "X@% c #A62E2D", "Y@% c #A8302F", "Z@% c #A93130", "`@% c #A52E2A", " #% c #A93028", ".#% c #A93027", "+#% c #A82F26", "@#% c #A72E25", "##% c #A82D25", "$#% c #A72C24", "%#% c #A92E27", "&#% c #A32324", "*#% c #9E2729", "=#% c #9F282C", "-#% c #A0292D", ";#% c #9D2B2A", ">#% c #9B2B27", ",#% c #9A2D28", "'#% c #9C2F2A", ")#% c #9F322F", "!#% c #9E302F", "~#% c #A03231", "{#% c #9E3635", "]#% c #9E3836", "^#% c #9E3A38", "/#% c #9D3937", "(#% c #9F3C37", "_#% c #A4413C", ":#% c #A7443F", "<#% c #A53F3B", "[#% c #9E3633", "}#% c #932A27", "|#% c #611613", "1#% c #611515", "2#% c #5B1718", "3#% c #551516", "4#% c #541415", "5#% c #511314", "6#% c #531313", "7#% c #6B1F21", "8#% c #69191A", "9#% c #261110", "0#% c #0D1810", "a#% c #723C3A", "b#% c #773A39", "c#% c #773133", "d#% c #9A303A", "e#% c #A0373E", "f#% c #A0353D", "g#% c #A1363E", "h#% c #A23842", "i#% c #A23A43", "j#% c #A24B51", "k#% c #A65156", "l#% c #A35155", "m#% c #9D4146", "n#% c #A4454B", "o#% c #AA4A4E", "p#% c #A8484C", "q#% c #A94649", "r#% c #A9464B", "s#% c #A54547", "t#% c #A44446", "u#% c #A24444", "v#% c #A14344", "w#% c #9F4443", "x#% c #9C4443", "y#% c #9B4342", "z#% c #9B4140", "A#% c #9A3F3E", "B#% c #9A3C3C", "C#% c #9F383B", "D#% c #9C2F32", "E#% c #9A2D30", "F#% c #9E3438", "G#% c #932A26", "H#% c #942825", "I#% c #922623", "J#% c #912421", "K#% c #962F2A", "L#% c #942E2A", "M#% c #95322D", "N#% c #902F29", "O#% c #561C1B", "P#% c #582124", "Q#% c #5B2A2D", "R#% c #52282C", "S#% c #472229", "T#% c #503137", "U#% c #5D464C", "V#% c #646567", "W#% c #3B3F40", "X#% c #171B1E", "Y#% c #15191A", "Z#% c #1A1708", "`#% c #201907", " $% c #291E0C", ".$% c #614B3E", "+$% c #685046", "@$% c #765A56", "#$% c #8C706D", "$$% c #9B827E", "%$% c #A18F8B", "&$% c #8E8878", "*$% c #70644E", "=$% c #3F3116", "-$% c #46342A", ";$% c #36251E", ">$% c #2A1711", ",$% c #6D3236", "'$% c #7B383F", ")$% c #8C3F49", "!$% c #8F3A3F", "~$% c #86312C", "{$% c #8A2E23", "]$% c #872B1E", "^$% c #84261A", "/$% c #932120", "($% c #180904", "_$% c #451511", ":$% c #4A1912", "<$% c #A12724", "[$% c #A72D2C", "}$% c #A82E2D", "|$% c #A92F2E", "1$% c #AA302F", "2$% c #A72D2A", "3$% c #A82F27", "4$% c #A62D24", "5$% c #A52C23", "6$% c #A42B22", "7$% c #A72E26", "8$% c #A52C24", "9$% c #A22921", "0$% c #A32A22", "a$% c #A12820", "b$% c #9D2628", "c$% c #9C282B", "d$% c #9D2B2B", "e$% c #9C2C2A", "f$% c #9B2E29", "g$% c #9F322D", "h$% c #A0332E", "i$% c #A13532", "j$% c #9E3532", "k$% c #9F3734", "l$% c #9F3935", "m$% c #9C3934", "n$% c #9E3B36", "o$% c #A1403A", "p$% c #A4433D", "q$% c #A23F3A", "r$% c #631513", "s$% c #5C1618", "t$% c #521415", "u$% c #511413", "v$% c #2A1011", "w$% c #723D39", "x$% c #773B3A", "y$% c #9E2F38", "z$% c #9F2D37", "A$% c #A1363C", "B$% c #A1333C", "C$% c #A3333F", "D$% c #A2343F", "E$% c #A33540", "F$% c #A23741", "G$% c #A33943", "H$% c #9F4046", "I$% c #A5494E", "J$% c #A94D52", "K$% c #A74C51", "L$% c #A4494E", "M$% c #A04449", "N$% c #9E3F45", "O$% c #A03C44", "P$% c #A84047", "Q$% c #AC444B", "R$% c #AB4448", "S$% c #AA4347", "T$% c #A94246", "U$% c #A64244", "V$% c #A44243", "W$% c #A34142", "X$% c #A14142", "Y$% c #A04240", "Z$% c #9F413F", "`$% c #9D3F3D", " %% c #9D3E3C", ".%% c #9E3A3A", "+%% c #9F3839", "@%% c #A1393A", "#%% c #9F3537", "$%% c #9E3134", "%%% c #A13034", "&%% c #912A25", "*%% c #932C25", "=%% c #922C27", "-%% c #8E2B25", ";%% c #5A2326", ">%% c #562529", ",%% c #50252C", "'%% c #452028", ")%% c #3C1D25", "!%% c #533942", "~%% c #7F6B74", "{%% c #C0BBC1", "]%% c #3A3E41", "^%% c #151A1D", "/%% c #11191B", "(%% c #111A19", "_%% c #221B0B", ":%% c #2A1F0B", "<%% c #362712", "[%% c #5F4838", "}%% c #694F42", "|%% c #71564D", "1%% c #927673", "2%% c #A08685", "3%% c #3D3216", "4%% c #22140B", "5%% c #21130A", "6%% c #2A1710", "7%% c #431D1C", "8%% c #522426", "9%% c #723137", "0%% c #8B2F24", "a%% c #882C21", "b%% c #86281E", "c%% c #901C1D", "d%% c #3A1D19", "e%% c #150A04", "f%% c #190A05", "g%% c #200E0A", "h%% c #281310", "i%% c #4A1914", "j%% c #4F1813", "k%% c #A62C29", "l%% c #A42B23", "m%% c #9C2527", "n%% c #9C2A2A", "o%% c #9D2D2B", "p%% c #9B2E2B", "q%% c #9C2F2C", "r%% c #9D302D", "s%% c #A13431", "t%% c #9E312E", "u%% c #9D3431", "v%% c #9D3532", "w%% c #9E3834", "x%% c #9B3833", "y%% c #9E3D37", "z%% c #A03D38", "A%% c #641614", "B%% c #4F1F1B", "C%% c #2F1312", "D%% c #0D170F", "E%% c #5F2E29", "F%% c #763C38", "G%% c #7C3C3A", "H%% c #7D3536", "I%% c #87373A", "J%% c #8C3337", "K%% c #A02E38", "L%% c #9E3137", "M%% c #9D3337", "N%% c #9D3438", "O%% c #A2333C", "P%% c #A2343D", "Q%% c #A3353E", "R%% c #A2373F", "S%% c #A23D43", "T%% c #A3474A", "U%% c #A74B4E", "V%% c #A54B4D", "W%% c #A3494B", "X%% c #A94045", "Y%% c #A74043", "Z%% c #A63F42", "`%% c #A44042", " &% c #A13F3E", ".&% c #9F403E", "+&% c #9E3F3D", "@&% c #9C3D3B", "#&% c #A0393A", "$&% c #A23A3B", "%&% c #A13739", "&&% c #A13437", "*&% c #9F3134", "=&% c #A23135", "-&% c #A33035", ";&% c #A03338", ">&% c #93292B", ",&% c #902825", "'&% c #922522", ")&% c #532528", "!&% c #481D24", "~&% c #3E1921", "{&% c #4A2B33", "]&% c #786169", "^&% c #B2A1A9", "/&% c #CEC3C9", "(&% c #ABA6AA", "_&% c #565658", ":&% c #131718", "<&% c #261F0F", "[&% c #322715", "}&% c #554430", "|&% c #6E564A", "1&% c #786056", "2&% c #886F6A", "3&% c #9A817D", "4&% c #A5908D", "5&% c #B9ABA8", "6&% c #8F846E", "7&% c #52462C", "8&% c #403519", "9&% c #3C3115", "0&% c #341814", "a&% c #5B2729", "b&% c #672A2F", "c&% c #763038", "d&% c #944248", "e&% c #8A3634", "f&% c #8C3229", "g&% c #8D3028", "h&% c #8B261E", "i&% c #752A24", "j&% c #160B05", "k&% c #1A0B06", "l&% c #3A1616", "m&% c #3C1516", "n&% c #3C1615", "o&% c #561712", "p&% c #851D12", "q&% c #A52B28", "r&% c #A62D25", "s&% c #9E2E2D", "t&% c #9E3230", "u&% c #9D3733", "v&% c #9A3732", "w&% c #9D3C36", "x&% c #9D3A35", "y&% c #A03A36", "z&% c #9C3431", "A&% c #210D0C", "B&% c #783B36", "C&% c #8F2A30", "D&% c #9F3039", "E&% c #A12F37", "F&% c #A1343A", "G&% c #A1383D", "H&% c #9F3A3E", "I&% c #9E3B3E", "J&% c #9E4041", "K&% c #A34748", "L&% c #A14749", "M&% c #9D383E", "N&% c #A23A41", "O&% c #A63F43", "P&% c #A63D42", "Q&% c #A53C40", "R&% c #A43D40", "S&% c #A33C3F", "T&% c #A13D3F", "U&% c #9F3D3C", "V&% c #9F3B3B", "W&% c #9F3738", "X&% c #A2383A", "Y&% c #A3393B", "Z&% c #A23538", "`&% c #A13336", " *% c #922926", ".*% c #922925", "+*% c #972725", "@*% c #962423", "#*% c #5E231D", "$*% c #4C1F22", "%*% c #411A1F", "&*% c #452229", "**% c #64464E", "=*% c #B099A1", "-*% c #E1D0D8", ";*% c #C0B5BB", ">*% c #614E3D", ",*% c #7C685F", "'*% c #8E7A73", ")*% c #B4A5A2", "!*% c #B8AAA7", "~*% c #989397", "{*% c #6C6247", "]*% c #5D5338", "^*% c #473E21", "/*% c #44391B", "(*% c #413618", "_*% c #3F2F16", ":*% c #4A3729", "<*% c #4A382C", "[*% c #4A3C31", "}*% c #261A0E", "|*% c #692B30", "1*% c #914047", "2*% c #8B3534", "3*% c #872F2B", "4*% c #882F29", "5*% c #8D332A", "6*% c #8C2E26", "7*% c #8B2A23", "8*% c #8B2822", "9*% c #9F2F2E", "0*% c #A23532", "a*% c #A03431", "b*% c #9D312F", "c*% c #9B3531", "d*% c #983530", "e*% c #9A322F", "f*% c #431F1F", "g*% c #7D3A34", "h*% c #8F3638", "i*% c #923234", "j*% c #A02E36", "k*% c #A12E35", "l*% c #9C3234", "m*% c #A0363A", "n*% c #A1383C", "o*% c #A13A3E", "p*% c #9F3B3D", "q*% c #9B3B3D", "r*% c #9D3F3F", "s*% c #A04243", "t*% c #A04544", "u*% c #A04445", "v*% c #9F4344", "w*% c #A4393F", "x*% c #A33A3E", "y*% c #A23B3E", "z*% c #A13A3B", "A*% c #A03A38", "B*% c #A03837", "C*% c #9F3736", "D*% c #9D3534", "E*% c #A33536", "F*% c #A43637", "G*% c #A43335", "H*% c #A22F32", "I*% c #A43033", "J*% c #A83135", "K*% c #A73034", "L*% c #A42F35", "M*% c #9B2E33", "N*% c #982B30", "O*% c #972A2F", "P*% c #952C28", "Q*% c #972B28", "R*% c #962A27", "S*% c #952322", "T*% c #522627", "U*% c #42191D", "V*% c #421E22", "W*% c #5A3B41", "X*% c #876E74", "Y*% c #D4BFC6", "Z*% c #E0D1D6", "`*% c #8E8387", " =% c #3C3638", ".=% c #655444", "+=% c #715F51", "@=% c #806F65", "#=% c #857E64", "$=% c #7B7158", "%=% c #6D6348", "&=% c #534A2D", "*=% c #463D20", "==% c #463B1D", "-=% c #423417", ";=% c #3F2F15", ">=% c #24180C", ",=% c #231208", "'=% c #2E130C", ")=% c #451C1A", "!=% c #5E2629", "~=% c #713338", "{=% c #823C44", "]=% c #8A3F46", "^=% c #8B3735", "/=% c #85302D", "(=% c #8B3129", "_=% c #8C2F28", ":=% c #8C2923", "<=% c #932321", "[=% c #1D0E09", "}=% c #26130F", "|=% c #A33633", "1=% c #A03734", "2=% c #9A3430", "3=% c #99332F", "4=% c #9A312E", "5=% c #1F0D0B", "6=% c #3B1D1B", "7=% c #863836", "8=% c #933132", "9=% c #9E2B32", "0=% c #9F2C31", "a=% c #9C3232", "b=% c #9A3432", "c=% c #983432", "d=% c #9E3436", "e=% c #9F3539", "f=% c #9F363A", "g=% c #A0373B", "h=% c #A0393C", "i=% c #9D393B", "j=% c #9E3E3F", "k=% c #9E4040", "l=% c #9F4141", "m=% c #9D4241", "n=% c #A33A3F", "o=% c #A73C42", "p=% c #A3393D", "q=% c #A2393D", "r=% c #A03636", "s=% c #A23636", "t=% c #A23133", "u=% c #A32F32", "v=% c #A12D30", "w=% c #A22B2F", "x=% c #A52E32", "y=% c #A82F34", "z=% c #A62F33", "A=% c #A53438", "B=% c #9C2F34", "C=% c #992A30", "D=% c #9C2D33", "E=% c #9A2B31", "F=% c #97282E", "G=% c #95282B", "H=% c #962D29", "I=% c #982C29", "J=% c #982B28", "K=% c #992726", "L=% c #5B2B27", "M=% c #502829", "N=% c #431F21", "O=% c #4B2B30", "P=% c #74595E", "Q=% c #B9A2A8", "R=% c #CEBBC1", "S=% c #9F9095", "T=% c #43383C", "U=% c #1A100F", "V=% c #604F3F", "W=% c #898268", "X=% c #7D765A", "Y=% c #5F583B", "Z=% c #4B4427", "`=% c #463D1E", " -% c #3F3416", ".-% c #403215", "+-% c #3E2E15", "@-% c #3E2C14", "#-% c #261609", "$-% c #421917", "%-% c #532124", "&-% c #662D33", "*-% c #72333B", "=-% c #78323A", "--% c #83363E", ";-% c #8F3D3F", ">-% c #8B2E27", ",-% c #8B2C26", "'-% c #8C2B25", ")-% c #8D2A25", "!-% c #912928", "~-% c #902827", "{-% c #952523", "]-% c #120D09", "^-% c #A82E2B", "/-% c #A52B26", "(-% c #A72D28", "_-% c #A82E29", ":-% c #A0302F", "<-% c #9F3130", "[-% c #A13332", "}-% c #A33534", "|-% c #A43635", "1-% c #9F3331", "2-% c #9F3633", "3-% c #A13835", "4-% c #A03835", "5-% c #99302D", "6-% c #942423", "7-% c #8A1712", "8-% c #661E1F", "9-% c #541712", "0-% c #311919", "a-% c #803731", "b-% c #922E30", "c-% c #9C292E", "d-% c #9D2A2D", "e-% c #9F2E30", "f-% c #9C3838", "g-% c #9B3D3B", "h-% c #9C3E3C", "i-% c #9E3E42", "j-% c #9F383C", "k-% c #A3383E", "l-% c #A4373A", "m-% c #A13938", "n-% c #A53436", "o-% c #A63537", "p-% c #A53235", "q-% c #A32C30", "r-% c #A12A2E", "s-% c #A2292E", "t-% c #A52C31", "u-% c #A92E33", "v-% c #A72E33", "w-% c #9D2C30", "x-% c #9C2B2F", "y-% c #9F2E32", "z-% c #9E2D31", "A-% c #9A292D", "B-% c #97292A", "C-% c #982826", "D-% c #982625", "E-% c #4A2222", "F-% c #573333", "G-% c #4D2D2E", "H-% c #573D40", "I-% c #897376", "J-% c #C1AEB2", "K-% c #98888B", "L-% c #4E4244", "M-% c #1B1112", "N-% c #191011", "O-% c #201513", "P-% c #4C3B33", "Q-% c #57473A", "R-% c #5A4A3A", "S-% c #928C74", "T-% c #686346", "U-% c #50492C", "V-% c #3D3415", "W-% c #3E3315", "X-% c #3F3114", "Y-% c #3F3013", "Z-% c #3D2D13", "`-% c #3D2B13", " ;% c #3C2A12", ".;% c #3E2D19", "+;% c #281A0D", "@;% c #2C130C", "#;% c #32130E", "$;% c #662F34", "%;% c #7B3239", "&;% c #911F1E", "*;% c #2D110D", "=;% c #110C08", "-;% c #210F0B", ";;% c #511612", ">;% c #691612", ",;% c #A62C27", "';% c #A42A25", ");% c #A22A2B", "!;% c #A0292B", "~;% c #A02C2F", "{;% c #A23634", "];% c #A23936", "^;% c #952F2B", "/;% c #99312E", "(;% c #592323", "_;% c #813631", ":;% c #9E3031", "<;% c #9D3536", "[;% c #9E3738", "};% c #9B3C3A", "|;% c #9C3C3E", "1;% c #9F343A", "2;% c #A3363C", "3;% c #A6393E", "4;% c #A33939", "5;% c #A83437", "6;% c #A93538", "7;% c #A73336", "8;% c #9E272B", "9;% c #A62B30", "0;% c #A82D32", "a;% c #AA2D33", "b;% c #A73238", "c;% c #99282A", "d;% c #992B2A", "e;% c #5E1E1C", "f;% c #5E3E3F", "g;% c #583B3D", "h;% c #948183", "i;% c #97878A", "j;% c #5B4C4F", "k;% c #241A1B", "l;% c #362E2C", "m;% c #110906", "n;% c #59473D", "o;% c #5E4C42", "p;% c #534133", "q;% c #7A745A", "r;% c #595235", "s;% c #3D2C12", "t;% c #433421", "u;% c #3F3422", "v;% c #3D1515", "w;% c #4A1E1F", "x;% c #5F262C", "y;% c #6D2A31", "z;% c #83383D", "A;% c #912A2B", "B;% c #4B1A13", "C;% c #4E1911", "D;% c #801616", "E;% c #901819", "F;% c #A13032", "G;% c #A03233", "H;% c #A23435", "I;% c #A53738", "J;% c #A63839", "K;% c #972F2C", "L;% c #962D2A", "M;% c #851410", "N;% c #851511", "O;% c #200D07", "P;% c #130B08", "Q;% c #321819", "R;% c #98272B", "S;% c #A03E3D", "T;% c #A03E3F", "U;% c #A43838", "V;% c #A43A3A", "W;% c #A73B39", "X;% c #A53333", "Y;% c #A73334", "Z;% c #A93234", "`;% c #A83133", " >% c #A73032", ".>% c #A52D2F", "+>% c #9F2427", "@>% c #A92C30", "#>% c #A72C2F", "$>% c #A43134", "%>% c #912522", "&>% c #573D3E", "*>% c #705A5C", "=>% c #675959", "->% c #392F30", ";>% c #422F28", ">>% c #604C43", ",>% c #5E4A41", "'>% c #5A463B", ")>% c #A9A99F", "!>% c #ACACA4", "~>% c #85806A", "{>% c #635E41", "]>% c #4D4629", "^>% c #423719", "/>% c #423316", "(>% c #403114", "_>% c #413016", ":>% c #371412", "<>% c #431B1B", "[>% c #502425", "}>% c #602129", "|>% c #6F2931", "1>% c #7B3336", "2>% c #7F3536", "3>% c #863838", "4>% c #873834", "5>% c #8F2B2B", "6>% c #321817", "7>% c #A13533", "8>% c #9B3330", "9>% c #98322E", "0>% c #982F2C", "a>% c #942021", "b>% c #5F1E1C", "c>% c #9C2B2D", "d>% c #A0393D", "e>% c #A33236", "f>% c #A53132", "g>% c #A62E30", "h>% c #A42C2E", "i>% c #A72A2E", "j>% c #AA2D31", "k>% c #AB2E32", "l>% c #A92E31", "m>% c #9B282B", "n>% c #601E1F", "o>% c #472826", "p>% c #4F3536", "q>% c #5D4749", "r>% c #695757", "s>% c #605252", "t>% c #5F4B42", "u>% c #5A463D", "v>% c #5B473C", "w>% c #ADADA3", "x>% c #ACACA2", "y>% c #93907D", "z>% c #4D4427", "A>% c #44341A", "B>% c #2A110A", "C>% c #581D23", "D>% c #65242A", "E>% c #6D2B2F", "F>% c #722D30", "G>% c #85322E", "H>% c #8D2D2E", "I>% c #8F2925", "J>% c #9A1D21", "K>% c #911A1C", "L>% c #4C1A13", "M>% c #83191B", "N>% c #82181A", "O>% c #A92F2C", "P>% c #A12A24", "Q>% c #A12A22", "R>% c #9C251D", "S>% c #A33234", "T>% c #9B322F", "U>% c #972928", "V>% c #861615", "W>% c #841615", "X>% c #5C1511", "Y>% c #29120A", "Z>% c #1D0C05", "`>% c #9C2930", " ,% c #993331", ".,% c #A03C3E", "+,% c #A2353A", "@,% c #A43136", "#,% c #A8353A", "$,% c #A73437", "%,% c #A63336", "&,% c #A32F2F", "*,% c #A62E2F", "=,% c #A62B2D", "-,% c #A4292B", ";,% c #A3282A", ">,% c #A02527", ",,% c #A72C2E", "',% c #AA2F31", "),% c #AB3032", "!,% c #A83031", "~,% c #A63233", "{,% c #A12D2E", "],% c #A43031", "^,% c #5B2827", "/,% c #592726", "(,% c #452322", "_,% c #594546", ":,% c #605050", "<,% c #574B4B", "[,% c #423839", "},% c #24170F", "|,% c #5D4940", "1,% c #645045", "2,% c #584439", "3,% c #6D5B51", "4,% c #89776D", "5,% c #9D969D", "6,% c #999991", "7,% c #86816B", "8,% c #53482C", "9,% c #2C100C", "0,% c #31120F", "a,% c #491C1F", "b,% c #572025", "c,% c #62252C", "d,% c #913133", "e,% c #922F34", "f,% c #8F2C27", "g,% c #94191C", "h,% c #8F181A", "i,% c #36130D", "j,% c #28110B", "k,% c #4C170F", "l,% c #A02923", "m,% c #A22B23", "n,% c #A12A2C", "o,% c #A33735", "p,% c #9B2F2D", "q,% c #851514", "r,% c #831514", "s,% c #53241A", "t,% c #261714", "u,% c #9B2931", "v,% c #9A3231", "w,% c #993535", "x,% c #A03B3F", "y,% c #A13C40", "z,% c #A33238", "A,% c #A13130", "B,% c #A52F2F", "C,% c #A52D2E", "D,% c #A52A2C", "E,% c #A32B2C", "F,% c #A82D2F", "G,% c #A92E30", "H,% c #8D1516", "I,% c #482A2A", "J,% c #463130", "K,% c #513D3E", "L,% c #564A4A", "M,% c #413937", "N,% c #614D42", "O,% c #634F44", "P,% c #6D5950", "Q,% c #94817A", "R,% c #ABABA1", "S,% c #969792", "T,% c #62563C", "U,% c #45301B", "V,% c #351312", "W,% c #521F24", "X,% c #612527", "Y,% c #793331", "Z,% c #93343A", "`,% c #90312D", " '% c #8F2E28", ".'% c #8A1818", "+'% c #4A1811", "@'% c #AB3130", "#'% c #A02925", "$'% c #A32C2E", "%'% c #A63235", "&'% c #A63539", "*'% c #A33538", "='% c #A53534", "-'% c #9C3330", ";'% c #631515", ">'% c #601512", ",'% c #522216", "''% c #55201C", ")'% c #992A33", "!'% c #9C2A32", "~'% c #A53134", "{'% c #A33131", "]'% c #A0302E", "^'% c #A63030", "/'% c #A42C2D", "('% c #A62F31", "_'% c #4C3233", ":'% c #534042", "<'% c #514343", "['% c #2A1C11", "}'% c #5D4B3D", "|'% c #5A4A3B", "1'% c #5B493B", "2'% c #5F4D3F", "3'% c #6D594E", "4'% c #9E8B85", "5'% c #AAAA9E", "6'% c #ABACA4", "7'% c #9B949C", "8'% c #9A9A9A", "9'% c #60513A", "0'% c #40341E", "a'% c #403521", "b'% c #423127", "c'% c #321311", "d'% c #3A1314", "e'% c #46181B", "f'% c #511C22", "g'% c #582021", "h'% c #7B312E", "i'% c #8E2F29", "j'% c #8A2B25", "k'% c #991B1F", "l'% c #95181C", "m'% c #90181A", "n'% c #170D0B", "o'% c #4B160E", "p'% c #841A1E", "q'% c #AC3231", "r'% c #A43639", "s'% c #A43433", "t'% c #972726", "u'% c #5D1910", "v'% c #502618", "w'% c #472519", "x'% c #190F0E", "y'% c #0C160E", "z'% c #7B3334", "A'% c #8A262E", "B'% c #942B32", "C'% c #9B2933", "D'% c #9C2A34", "E'% c #9C2D34", "F'% c #A23231", "G'% c #A23230", "H'% c #A33130", "I'% c #A93132", "J'% c #9B2426", "K'% c #962223", "L'% c #4D3B3B", "M'% c #604D3F", "N'% c #705C51", "O'% c #7F6B60", "P'% c #917D76", "Q'% c #9A939B", "R'% c #867A64", "S'% c #463019", "T'% c #443018", "U'% c #3F3420", "V'% c #432F26", "W'% c #3C0F14", "X'% c #48151A", "Y'% c #4D1B1E", "Z'% c #4F1B1D", "`'% c #6F2F2D", " )% c #8D3029", ".)% c #9A1C20", "+)% c #96191D", "@)% c #91191B", "#)% c #2B1915", "$)% c #491811", "%)% c #AA3129", "&)% c #AA3128", "*)% c #A22D24", "=)% c #A02B22", "-)% c #9F2A23", ";)% c #A02B24", ">)% c #A52E30", ",)% c #AC383B", "')% c #AA3639", "))% c #A5373A", "!)% c #871313", "~)% c #891516", "{)% c #8A1617", "])% c #8B1718", "^)% c #641413", "/)% c #5B170E", "()% c #522619", "_)% c #4B271B", ":)% c #391B10", "<)% c #902831", "[)% c #982A35", "})% c #9C2D36", "|)% c #9C3840", "1)% c #9F3A42", "2)% c #A03841", "3)% c #9F3740", "4)% c #9E363F", "5)% c #A03638", "6)% c #A2302F", "7)% c #A42E2C", "8)% c #A22F2C", "9)% c #A72F31", "0)% c #A22A2C", "a)% c #463233", "b)% c #463637", "c)% c #3C3032", "d)% c #1D1719", "e)% c #645143", "f)% c #574A37", "g)% c #6A5B46", "h)% c #564732", "i)% c #472C17", "j)% c #472D16", "k)% c #433626", "l)% c #360F10", "m)% c #3F1517", "n)% c #461A1B", "o)% c #481A1A", "p)% c #762A2A", "q)% c #8D373A", "r)% c #8E3332", "s)% c #9A1F21", "t)% c #22130E", "u)% c #481710", "v)% c #661511", "w)% c #82191D", "x)% c #A12A26", "y)% c #AD3332", "z)% c #AB312C", "A)% c #AB322A", "B)% c #AB3229", "C)% c #A32C26", "D)% c #A22D26", "E)% c #A22B25", "F)% c #A02A26", "G)% c #A42924", "H)% c #AD393C", "I)% c #AB373A", "J)% c #A73638", "K)% c #A03137", "L)% c #9C302E", "M)% c #A03432", "N)% c #992224", "O)% c #861212", "P)% c #881415", "Q)% c #821616", "R)% c #63120F", "S)% c #631312", "T)% c #621412", "U)% c #552519", "V)% c #3D1B11", "W)% c #291107", "X)% c #200F08", "Y)% c #622827", "Z)% c #753335", "`)% c #85262E", " !% c #8C272F", ".!% c #A1373B", "+!% c #A32F30", "@!% c #AA3335", "#!% c #A53131", "$!% c #A4312E", "%!% c #A3302D", "&!% c #701C11", "*!% c #4D3837", "=!% c #3C3334", "-!% c #635042", ";!% c #544737", ">!% c #8B8273", ",!% c #7E7663", "'!% c #574C36", ")!% c #45342C", "!!% c #402F27", "~!% c #30130D", "{!% c #2F100B", "]!% c #883338", "^!% c #95241E", "/!% c #97241F", "(!% c #722F27", "_!% c #3D1611", ":!% c #9E2824", "~% c #911314", ",~% c #881713", "'~% c #661617", ")~% c #6A1616", "!~% c #230F06", "~~% c #1B0E06", "{~% c #3F2121", "]~% c #5B272B", "^~% c #76353B", "/~% c #86373D", "(~% c #8F2D2E", "_~% c #9E373A", ":~% c #A2383C", "<~% c #A3343A", "[~% c #A53533", "}~% c #A43432", "|~% c #A33331", "1~% c #A1312F", "2~% c #A52F2B", "3~% c #9A2420", "4~% c #402828", "5~% c #4A3C3B", "6~% c #483D3B", "7~% c #212725", "8~% c #1B2524", "9~% c #221A0F", "0~% c #27190C", "a~% c #655C55", "b~% c #766D66", "c~% c #887F78", "d~% c #574B33", "e~% c #372318", "f~% c #67292A", "g~% c #732C30", "h~% c #893032", "i~% c #92231A", "j~% c #6F2F26", "k~% c #A02F29", "l~% c #9F2E28", "m~% c #A22F2A", "n~% c #A3302B", "o~% c #A4312C", "p~% c #A6302C", "q~% c #A7312D", "r~% c #AC312C", "s~% c #AB302B", "t~% c #AA2F28", "u~% c #A92E26", "v~% c #A92F24", "w~% c #A7302A", "x~% c #A8312B", "y~% c #A63434", "z~% c #A4353B", "A~% c #9D3335", "B~% c #9B262C", "C~% c #451A13", "D~% c #35140B", "E~% c #241007", "F~% c #491F21", "G~% c #912F2E", "H~% c #9E3539", "I~% c #8C1F18", "J~% c #422223", "K~% c #483435", "L~% c #4D3D3D", "M~% c #4C4040", "N~% c #453B3A", "O~% c #2B1F11", "P~% c #615040", "Q~% c #695647", "R~% c #5A4738", "S~% c #554234", "T~% c #615144", "U~% c #736A63", "V~% c #42301C", "W~% c #443727", "X~% c #30150C", "Y~% c #33150D", "Z~% c #6A292D", "`~% c #863639", " {% c #893535", ".{% c #321912", "+{% c #36150E", "@{% c #9F2426", "#{% c #A3322C", "${% c #A2312B", "%{% c #A5322D", "&{% c #A6332E", "*{% c #A8322E", "={% c #AD3330", "-{% c #A92E29", ";{% c #A82D26", ">{% c #AB3029", ",{% c #AB3126", "'{% c #AA3025", "){% c #A73028", "!{% c #A6373D", "~{% c #A03138", "{{% c #9E2931", "]{% c #9E272D", "^{% c #9F232D", "/{% c #901414", "({% c #91322E", "_{% c #9F2F2D", ":{% c #A9332F", "<{% c #4B3B3B", "[{% c #4B3F3F", "}{% c #443A39", "|{% c #614E40", "1{% c #665344", "2{% c #756860", "3{% c #776D54", "4{% c #3F2D15", "5{% c #3C2A20", "6{% c #772A22", "7{% c #3B140F", "8{% c #1A0E0E", "9{% c #A2312D", "0{% c #A3322E", "a{% c #A4332F", "b{% c #A53430", "c{% c #A63330", "d{% c #A73431", "e{% c #AB312E", "f{% c #AA302B", "g{% c #AA3126", "h{% c #A8312D", "i{% c #9F2D2D", "j{% c #9C3236", "k{% c #9F2C33", "l{% c #9F2A33", "m{% c #9F2730", "n{% c #A0242F", "o{% c #921415", "p{% c #771514", "q{% c #1F1009", "r{% c #592529", "s{% c #912F30", "t{% c #492121", "u{% c #492726", "v{% c #472D2E", "w{% c #483E3D", "x{% c #503E32", "y{% c #685244", "z{% c #675146", "A{% c #82756D", "B{% c #8C816B", "C{% c #83745D", "D{% c #6D5D44", "E{% c #3D2E1B", "F{% c #3B2F19", "G{% c #453528", "H{% c #431A18", "I{% c #672C32", "J{% c #8D2B28", "K{% c #3A130E", "L{% c #A1302C", "M{% c #A5322F", "N{% c #A93331", "O{% c #A83230", "P{% c #A92F2A", "Q{% c #9C2E2D", "R{% c #A7393C", "S{% c #9F2B34", "T{% c #9E2932", "U{% c #9F2731", "V{% c #A12530", "W{% c #A1252D", "X{% c #761413", "Y{% c #721412", "Z{% c #601414", "`{% c #5E1411", " ]% c #753337", ".]% c #94322F", "+]% c #462725", "@]% c #493536", "#]% c #3E3838", "$]% c #4B392D", "%]% c #5C493B", "&]% c #745E53", "*]% c #82735C", "=]% c #42331C", "-]% c #3F3019", ";]% c #421819", ">]% c #4B1D1F", ",]% c #722C2C", "']% c #8C2D29", ")]% c #8C2A27", "!]% c #8C2924", "~]% c #39120D", "{]% c #651611", "]]% c #A32528", "^]% c #A42629", "/]% c #AA332D", "(]% c #A9322C", "_]% c #A62F27", ":]% c #A42D25", "<]% c #A93329", "[]% c #A9322A", "}]% c #982522", "|]% c #9C2C2B", "1]% c #A9383C", "2]% c #AA393D", "3]% c #A8373B", "4]% c #A7363C", "5]% c #9F3238", "6]% c #9E2A33", "7]% c #9D2831", "8]% c #A22631", "9]% c #A3272F", "0]% c #731412", "a]% c #711311", "b]% c #6C1410", "c]% c #461C1D", "d]% c #773537", "e]% c #88373D", "f]% c #992F31", "g]% c #A03336", "h]% c #9F3235", "i]% c #9B2F2F", "j]% c #9E2A2A", "k]% c #442523", "l]% c #493537", "m]% c #4B3C3F", "n]% c #463C3D", "o]% c #3B3537", "p]% c #5D4638", "q]% c #5E4739", "r]% c #5D4539", "s]% c #6E584D", "t]% c #786159", "u]% c #96837C", "v]% c #918672", "w]% c #3B2B12", "x]% c #311410", "y]% c #411A1B", "z]% c #512427", "A]% c #6B2B29", "B]% c #782E2B", "C]% c #8B2C28", "D]% c #4F1D14", "E]% c #A5272A", "F]% c #A6282B", "G]% c #9D2727", "H]% c #A83232", "I]% c #A93333", "J]% c #AA3233", "K]% c #AB3430", "L]% c #AA342A", "M]% c #9E2E2C", "N]% c #A8373D", "O]% c #A5383E", "P]% c #A53C41", "Q]% c #A2393E", "R]% c #9D2932", "S]% c #9C2730", "T]% c #9E2630", "U]% c #961617", "V]% c #701210", "W]% c #6A120E", "X]% c #69140F", "Y]% c #5F1313", "Z]% c #661514", "`]% c #651411", " ^% c #7A3538", ".^% c #94312C", "+^% c #432F30", "@^% c #48393C", "#^% c #373133", "$^% c #5C4639", "%^% c #61473A", "&^% c #563E32", "*^% c #5A4238", "=^% c #6E574F", "-^% c #917A74", ";^% c #A8958F", ">^% c #978E7D", ",^% c #928775", "'^% c #564936", ")^% c #362A14", "!^% c #3C2B11", "~^% c #2A110C", "{^% c #913331", "]^% c #8D2E2A", "^^% c #792C24", "/^% c #4D1B12", "(^% c #3C130F", "_^% c #3E120F", ":^% c #3E150F", "<^% c #421913", "[^% c #65150E", "}^% c #68150F", "|^% c #A63433", "1^% c #AD3536", "2^% c #AC3435", "3^% c #AA332B", "4^% c #992621", "5^% c #9A2722", "6^% c #9C2B27", "7^% c #A02E2E", "8^% c #A93639", "9^% c #AE3B3E", "0^% c #AD3A3D", "a^% c #A83F43", "b^% c #AD4347", "c^% c #9D252E", "d^% c #A0242E", "e^% c #58130E", "f^% c #5E1415", "g^% c #611517", "h^% c #5F2728", "i^% c #93302B", "j^% c #94312B", "k^% c #9A2E2C", "l^% c #9D2F30", "m^% c #4C3A3A", "n^% c #534545", "o^% c #403A3C", "p^% c #665042", "q^% c #4B3124", "r^% c #624A3E", "s^% c #6D554B", "t^% c #7A635B", "u^% c #9B9585", "v^% c #887F70", "w^% c #675C4A", "x^% c #534834", "y^% c #39291C", "z^% c #342218", "A^% c #6C2F2A", "B^% c #892B29", "C^% c #39140E", "D^% c #66160F", "E^% c #691610", "F^% c #AB3334", "G^% c #A83129", "H^% c #9E2C2C", "I^% c #AC393E", "J^% c #A33639", "K^% c #A03839", "L^% c #A94142", "M^% c #AB4145", "N^% c #972429", "O^% c #9C252B", "P^% c #5D1516", "Q^% c #3D2A26", "R^% c #4B2928", "S^% c #9A2C2B", "T^% c #423030", "U^% c #483A3A", "V^% c #4A3E40", "W^% c #3F3639", "X^% c #594638", "Y^% c #593F32", "Z^% c #5B4E3D", "`^% c #453015", " /% c #47321D", "./% c #572822", "+/% c #622D27", "@/% c #692E2A", "#/% c #8F2B29", "$/% c #902D28", "%/% c #952420", "&/% c #7A2D25", "*/% c #4C1A11", "=/% c #A43232", "-/% c #A6312A", ";/% c #A53029", ">/% c #A42F28", ",/% c #A72F30", "'/% c #9B2821", ")/% c #AF3C3F", "!/% c #AD3C3E", "~/% c #A63A3A", "{/% c #A13737", "]/% c #A33B3A", "^/% c #A94140", "//% c #982A2D", "(/% c #9A2327", "_/% c #57140E", ":/% c #5A1617", "(% c #A33C37", ",(% c #A7403B", "'(% c #A63D3A", ")(% c #9F3330", "!(% c #6C1C1D", "~(% c #56150F", "{(% c #2E120F", "](% c #190909", "^(% c #402D29", "/(% c #98312C", "((% c #963129", "_(% c #952E27", ":(% c #952C26", "<(% c #9B2B29", "[(% c #6F2117", "}(% c #401A17", "|(% c #411E1C", "1(% c #462826", "2(% c #533E3D", "3(% c #403929", "4(% c #594733", "5(% c #847162", "6(% c #8E847A", "7(% c #48321D", "8(% c #462E14", "9(% c #442C12", "0(% c #412C11", "a(% c #412D14", "b(% c #403017", "c(% c #793132", "d(% c #8E2F2B", "e(% c #8D2C26", "f(% c #7C2F27", "g(% c #48180E", "h(% c #281511", "i(% c #361510", "j(% c #911E17", "k(% c #9E2D2F", "l(% c #A83532", "m(% c #A5322B", "n(% c #A22529", "o(% c #9A2720", "p(% c #99261F", "q(% c #A83636", "r(% c #A73B38", "s(% c #A9403A", "t(% c #AC433F", "u(% c #AA413B", "v(% c #A03932", "w(% c #A13A35", "x(% c #A33C35", "y(% c #9E332D", "z(% c #63171B", "A(% c #230E0B", "B(% c #160B09", "C(% c #401D19", "D(% c #932B28", "E(% c #97302B", "F(% c #942F27", "G(% c #962D27", "H(% c #972C26", "I(% c #752318", "J(% c #533736", "K(% c #634E4D", "L(% c #514142", "M(% c #3A2C2C", "N(% c #271B1D", "O(% c #221819", "P(% c #5C4F3E", "Q(% c #634E39", "R(% c #7E6B5A", "S(% c #938272", "T(% c #857566", "U(% c #452B14", "V(% c #4A3015", "W(% c #482E13", "X(% c #452D11", "Y(% c #551F1F", "Z(% c #8F393C", "`(% c #933430", " _% c #902A25", "._% c #A31F1D", "+_% c #47170D", "@_% c #35100A", "#_% c #A1242A", "$_% c #A33832", "%_% c #AA4239", "&_% c #B14842", "*_% c #AE463D", "=_% c #9B342B", "-_% c #9C352E", ";_% c #A03930", ">_% c #A53C36", ",_% c #9E332B", "'_% c #661A1E", ")_% c #64181C", "!_% c #62171B", "~_% c #25100D", "{_% c #713736", "]_% c #843E3E", "^_% c #8C3637", "/_% c #952D2A", "(_% c #69251A", "__% c #462724", ":_% c #533533", "<_% c #5F4544", "[_% c #4F3D3D", "}_% c #1F1514", "|_% c #5B4C39", "1_% c #53432C", "2_% c #57472E", "3_% c #8E7B6A", "4_% c #483316", "5_% c #432F14", "6_% c #402F13", "7_% c #501A1A", "8_% c #934449", "9_% c #91342F", "0_% c #871F14", "a_% c #841E10", "b_% c #831D0F", "c_% c #7B3128", "d_% c #47160F", "e_% c #33100A", "f_% c #9A2A26", "g_% c #972723", "h_% c #A43231", "i_% c #A0252A", "j_% c #9A251E", "k_% c #9A2627", "l_% c #A13630", "m_% c #AB423C", "n_% c #B54C46", "o_% c #A23B34", "p_% c #98312A", "q_% c #99302A", "r_% c #9E352F", "s_% c #A73C36", "t_% c #962622", "u_% c #5E1D19", "v_% c #671B1F", "w_% c #5B1517", "x_% c #5F201B", "y_% c #190B0A", "z_% c #120D0A", "A_% c #763A39", "B_% c #8A4041", "C_% c #942D26", "D_% c #982D27", "E_% c #9A2E2B", "F_% c #892116", "G_% c #74281B", "H_% c #63271D", "I_% c #572117", "J_% c #4C1D15", "K_% c #5A403F", "L_% c #644F4E", "M_% c #554545", "N_% c #564636", "O_% c #907F6B", "P_% c #9D8D7D", "Q_% c #61544B", "R_% c #3E2B1A", "S_% c #442F1E", "T_% c #3F1717", "U_% c #6B3034", "V_% c #76383D", "W_% c #7F3C43", "X_% c #884149", "Y_% c #8E4348", "Z_% c #8D3835", "`_% c #8B322E", " :% c #821E0F", ".:% c #801F0E", "+:% c #7F200E", "@:% c #7E220D", "#:% c #7E210F", "$:% c #91261E", "%:% c #8D221A", "&:% c #8E2319", "*:% c #A01C1A", "=:% c #A1191D", "-:% c #9E161A", ";:% c #853127", ">:% c #41150C", ",:% c #2D0C05", "':% c #1C0C0C", "):% c #3C1510", "!:% c #3B120E", "~:% c #45140D", "{:% c #9A2923", "]:% c #A83032", "^:% c #9D2429", "/:% c #9D2527", "(:% c #9A312D", "_:% c #AC4540", "::% c #AA433E", "<:% c #A23935", "[:% c #9B322E", "}:% c #9E322F", "|:% c #A43734", "1:% c #94191B", "2:% c #541510", "3:% c #55160F", "4:% c #651A1E", "5:% c #64191D", "6:% c #1D0908", "7:% c #170B0B", "8:% c #201011", "9:% c #3C1414", "0:% c #763636", "a:% c #873939", "b:% c #9B2A2C", "c:% c #992E26", "d:% c #992C27", "e:% c #9C2C28", "f:% c #9E2E2A", "g:% c #A0302C", "h:% c #A1312D", "i:% c #901B12", "j:% c #921D14", "k:% c #782215", "l:% c #852F20", "m:% c #772517", "n:% c #6B1F11", "o:% c #732F22", "p:% c #594443", "q:% c #523C3E", "r:% c #473335", "s:% c #342C2A", "t:% c #574435", "u:% c #574433", "v:% c #5E4833", "w:% c #8D806F", "x:% c #968B79", "y:% c #847D75", "z:% c #3F381C", "A:% c #3D361A", "B:% c #422B19", "C:% c #442D1B", "D:% c #29140F", "E:% c #341513", "F:% c #4E2223", "G:% c #683136", "H:% c #753A40", "I:% c #8D4344", "J:% c #8D3C3B", "K:% c #842215", "L:% c #812111", "M:% c #7D220D", "N:% c #7B230D", "O:% c #7C2410", "P:% c #90251D", "Q:% c #8F241A", "R:% c #90251B", "S:% c #91261C", "T:% c #8F221B", "U:% c #8B1F13", "V:% c #8D2115", "W:% c #8F2015", "X:% c #8D1E13", "Y:% c #8F1F14", "Z:% c #A11B1A", "`:% c #A61B20", " <% c #A0181C", ".<% c #823025", "+<% c #3F140B", "@<% c #290B03", "#<% c #982125", "$<% c #982127", "%<% c #9B2428", "&<% c #9C2529", "*<% c #9D2A23", "=<% c #A1342F", "-<% c #A3332F", ";<% c #A62D32", "><% c #9C2328", ",<% c #A73F3C", "'<% c #A63E3B", ")<% c #5C150F", "!<% c #551611", "~<% c #54150E", "{<% c #621A1D", "]<% c #2D1410", "^<% c #200B08", "/<% c #1A0C09", "(<% c #170D0E", "_<% c #783637", ":<% c #883839", "<<% c #9A2D26", "[<% c #9F2F2B", "}<% c #6D1A0C", "|<% c #7A2715", "1<% c #6D1E0F", "2<% c #61190B", "3<% c #5B4949", "4<% c #5D4A4C", "5<% c #4A3A3B", "6<% c #37272A", "7<% c #2D2123", "8<% c #412D22", "9<% c #5C4734", "0<% c #433D23", "a<% c #3A3319", "b<% c #3E341B", "c<% c #422D1A", "d<% c #452E1E", "e<% c #2D100C", "f<% c #351311", "g<% c #582629", "h<% c #673035", "i<% c #773C40", "j<% c #814346", "k<% c #8F4141", "l<% c #822516", "m<% c #802312", "n<% c #7E2310", "o<% c #7C2311", "p<% c #93261F", "q<% c #92251E", "r<% c #91241D", "s<% c #91251B", "t<% c #92261C", "u<% c #93271D", "v<% c #8E1F14", "w<% c #902116", "x<% c #902015", "y<% c #A91E21", "z<% c #A21A1C", "A<% c #812F24", "B<% c #511B0F", "C<% c #3A1208", "D<% c #791513", "E<% c #160C0A", "F<% c #190F10", "G<% c #211114", "H<% c #793738", "I<% c #89393A", "J<% c #992C25", "K<% c #982B26", "L<% c #671509", "M<% c #742214", "N<% c #5E180C", "O<% c #4B3633", "P<% c #5E4C4C", "Q<% c #524346", "R<% c #3C2D30", "S<% c #291A1D", "T<% c #614A38", "U<% c #644D3D", "V<% c #6B5645", "W<% c #8F7F6F", "X<% c #565036", "Y<% c #463E27", "Z<% c #34110F", "`<% c #3B1313", " [% c #663234", ".[% c #753A3C", "+[% c #8E4445", "@[% c #8B3D3D", "#[% c #84281B", "$[% c #802719", "%[% c #7E2515", "&[% c #7B2411", "*[% c #7A2312", "=[% c #942720", "-[% c #94281E", ";[% c #9F1916", ">[% c #A11B18", ",[% c #A61E1E", "'[% c #A01A1B", ")[% c #803025", "![% c #4C180B", "~[% c #371104", "{[% c #1E0D05", "][% c #962E2B", "^[% c #7A1412", "/[% c #781412", "([% c #781613", "_[% c #512421", ":[% c #1A1011", "<[% c #1A0E10", "[[% c #291013", "}[% c #783838", "|[% c #883A3A", "1[% c #9B2C25", "2[% c #8D1612", "3[% c #911C13", "4[% c #4F1E19", "5[% c #503635", "6[% c #5A4645", "7[% c #5B4D4D", "8[% c #281E1F", "9[% c #211718", "0[% c #443228", "a[% c #49352A", "b[% c #5E483B", "c[% c #766052", "d[% c #7F6C5E", "e[% c #A19184", "f[% c #453F27", "g[% c #3F3722", "h[% c #3F321F", "i[% c #512524", "j[% c #803B3E", "k[% c #8B4448", "l[% c #8E4649", "m[% c #8A3433", "n[% c #89322B", "o[% c #7E261A", "p[% c #7B2518", "q[% c #90241A", "r[% c #8E2218", "s[% c #912116", "t[% c #A41E1B", "u[% c #9C1816", "v[% c #803427", "w[% c #67291A", "x[% c #471709", "y[% c #200E0E", "z[% c #9A2325", "A[% c #1D0E0B", "B[% c #270E11", "C[% c #853939", "D[% c #9F2E2A", "E[% c #8E1713", "F[% c #931A12", "G[% c #921911", "H[% c #7A1C10", "I[% c #791C0D", "J[% c #781B0C", "K[% c #781C0F", "L[% c #751C0E", "M[% c #593632", "N[% c #5B4645", "O[% c #473B3B", "P[% c #241C11", "Q[% c #60483C", "R[% c #5E4433", "S[% c #776153", "T[% c #8B7568", "U[% c #958176", "V[% c #9D8D80", "W[% c #43301F", "X[% c #8A484A", "Y[% c #904A4C", "Z[% c #924A4B", "`[% c #924646", " }% c #90403F", ".}% c #8C3935", "+}% c #88332E", "@}% c #80261B", "#}% c #812518", "$}% c #932318", "%}% c #A31D1A", "&}% c #8A251B", "*}% c #893125", "=}% c #7F3627", "-}% c #662B1B", ";}% c #461809", ">}% c #341304", ",}% c #261003", "'}% c #1F1106", ")}% c #A83435", "!}% c #942B28", "~}% c #551E1B", "{}% c #270F0D", "]}% c #230D0F", "^}% c #723534", "/}% c #833737", "(}% c #992925", "_}% c #941912", ":}% c #931811", "<}% c #7A1D0E", "[}% c #741B0D", "}}% c #653D3B", "|}% c #785957", "1}% c #6C5452", "2}% c #4C3A2E", "3}% c #664F41", "4}% c #6C5742", "5}% c #796453", "6}% c #ABA3A1", "7}% c #847D6B", "8}% c #615847", "9}% c #481818", "0}% c #6C3437", "a}% c #884648", "b}% c #8F4B4C", "c}% c #8E4244", "d}% c #82281D", "e}% c #822418", "f}% c #8D1E25", "g}% c #962720", "h}% c #96271E", "i}% c #95261D", "j}% c #94251C", "k}% c #93221A", "l}% c #941A15", "m}% c #912217", "n}% c #853224", "o}% c #7B3627", "p}% c #331606", "q}% c #261305", "r}% c #201408", "s}% c #0F0F07", "t}% c #571612", "u}% c #A12C32", "v}% c #522522", "w}% c #250D0B", "x}% c #200A0C", "y}% c #32100E", "z}% c #6E3231", "A}% c #941713", "B}% c #921813", "C}% c #931914", "D}% c #781C0D", "E}% c #4B1817", "F}% c #633F3F", "G}% c #725655", "H}% c #5A4647", "I}% c #3B2D2D", "J}% c #271E1F", "K}% c #5C4034", "L}% c #5C4032", "M}% c #644A3B", "N}% c #685141", "O}% c #7F6A57", "P}% c #8C7968", "Q}% c #AB9891", "R}% c #B7ACA6", "S}% c #AEA5A6", "T}% c #9A9899", "U}% c #5F5645", "V}% c #3D2A1B", "W}% c #392919", "X}% c #27130A", "Y}% c #3A1212", "Z}% c #59272A", "`}% c #5F2B2D", " |% c #693235", ".|% c #793E40", "+|% c #864A4C", "@|% c #8F4F50", "#|% c #904849", "$|% c #904645", "%|% c #8D423F", "&|% c #8B3B3A", "*|% c #812E2A", "=|% c #822A1E", "-|% c #811B0D", ";|% c #831F10", ">|% c #8F2518", ",|% c #813223", "'|% c #773525", ")|% c #421D0D", "!|% c #34180A", "~|% c #271507", "{|% c #181409", "]|% c #0B0C04", "^|% c #7E1615", "/|% c #A73535", "(|% c #A9363B", "_|% c #A9363D", ":|% c #A73736", "<|% c #A63634", "[|% c #9A2828", "}|% c #2F110F", "||% c #240A09", "1|% c #2D0E0B", "2|% c #911810", "3|% c #90170F", "4|% c #901913", "5|% c #8D1811", "6|% c #771B0C", "7|% c #5E1E1F", "8|% c #54191B", "9|% c #553737", "0|% c #2B1B1C", "a|% c #2D2324", "b|% c #4B392B", "c|% c #5B4132", "d|% c #8B7867", "e|% c #9B897B", "f|% c #908A7C", "g|% c #8C8477", "h|% c #7F7868", "i|% c #514535", "j|% c #3F2E1E", "k|% c #402B1A", "l|% c #3B1314", "m|% c #42181A", "n|% c #633132", "o|% c #844C4D", "p|% c #8E5051", "q|% c #935152", "r|% c #9C5859", "s|% c #995152", "t|% c #7C2217", "u|% c #862012", "v|% c #872113", "w|% c #851F11", "x|% c #8A1B21", "y|% c #982721", "z|% c #98271F", "A|% c #92261A", "B|% c #912519", "C|% c #902418", "D|% c #8F2317", "E|% c #8C2014", "F|% c #8E2619", "G|% c #882F21", "H|% c #7E3224", "I|% c #6F3122", "J|% c #603022", "K|% c #3D190B", "L|% c #2C1507", "M|% c #231306", "N|% c #62150F", "O|% c #61140E", "P|% c #62150D", "Q|% c #A22D33", "R|% c #A32E34", "S|% c #A32E36", "T|% c #A63635", "U|% c #A83837", "V|% c #AB3A3C", "W|% c #AD3C40", "X|% c #AC3B3F", "Y|% c #AB3A40", "Z|% c #A9383E", "`|% c #A33737", " 1% c #A43836", ".1% c #2D1312", "+1% c #7D3735", "@1% c #8E2C2D", "#1% c #952929", "$1% c #982824", "%1% c #8C150F", "&1% c #8C1612", "*1% c #8B1511", "=1% c #8A1410", "-1% c #551A1E", ";1% c #582A2D", ">1% c #4A2125", ",1% c #311E20", "'1% c #281C1E", ")1% c #563A2E", "!1% c #5E4338", "~1% c #6F584A", "{1% c #897769", "]1% c #B1A8A9", "^1% c #372F1C", "/1% c #2F2114", "(1% c #310F0E", "_1% c #6E3E3E", ":1% c #7D4747", "<1% c #874D4C", "[1% c #9C5C5D", "}1% c #A56162", "|1% c #994D4F", "11% c #83302A", "21% c #96251F", "31% c #97261E", "41% c #94251A", "51% c #91221B", "61% c #8C261A", "71% c #852D21", "81% c #793123", "91% c #692F23", "01% c #592D20", "a1% c #2B1508", "b1% c #18140B", "c1% c #63160E", "d1% c #A22D35", "e1% c #A63837", "f1% c #AB3A3E", "g1% c #A93A40", "h1% c #AA393F", "i1% c #A9373F", "j1% c #A93741", "k1% c #67140E", "l1% c #7B3734", "m1% c #582E32", "n1% c #542D32", "o1% c #422225", "p1% c #33191C", "q1% c #2B1719", "r1% c #251619", "s1% c #1E1516", "t1% c #55392D", "u1% c #5D4237", "v1% c #5E463C", "w1% c #6B5349", "x1% c #98887B", "y1% c #98969B", "z1% c #3B301A", "A1% c #2C100D", "B1% c #663634", "C1% c #723F3E", "D1% c #915658", "E1% c #A76768", "F1% c #A96467", "G1% c #A86063", "H1% c #9F5258", "I1% c #863532", "J1% c #85322C", "K1% c #95261B", "L1% c #922619", "M1% c #8E2215", "N1% c #8D2114", "O1% c #802C21", "P1% c #732D21", "Q1% c #36180E", "R1% c #1F120A", "S1% c #A02B31", "T1% c #A02B33", "U1% c #A02D34", "V1% c #A83A3D", "W1% c #A83B3E", "X1% c #A8393F", "Y1% c #A73A3F", "Z1% c #A73942", "`1% c #A93A43", " 2% c #A83A43", ".2% c #A93945", "+2% c #A93B44", "@2% c #55140E", "#2% c #763531", "$2% c #992C29", "%2% c #952821", "&2% c #542A2E", "*2% c #492A2F", "=2% c #381D22", "-2% c #1C1213", ";2% c #624D3C", ">2% c #5A4033", ",2% c #573C31", "'2% c #60453C", ")2% c #6F564F", "!2% c #7F6B62", "~2% c #8C8074", "{2% c #402F15", "]2% c #3B2F17", "^2% c #352D16", "/2% c #342C17", "(2% c #774443", "_2% c #935759", ":2% c #9F5D5F", "<2% c #AB6468", "[2% c #AB6065", "}2% c #8C3B37", "|2% c #96261B", "12% c #96271C", "22% c #7D2B20", "32% c #9F2A32", "42% c #9F2E34", "52% c #9E2F35", "62% c #A23633", "72% c #A73A3D", "82% c #A5383D", "92% c #A6393F", "02% c #AA3C47", "a2% c #AB3D48", "b2% c #A93E48", "c2% c #A43B40", "d2% c #A5383B", "e2% c #54130D", "f2% c #471E1C", "g2% c #301413", "h2% c #260D08", "i2% c #73322E", "j2% c #962922", "k2% c #972A23", "l2% c #5E2A2C", "m2% c #623538", "n2% c #462327", "o2% c #371E22", "p2% c #1B1213", "q2% c #644A3D", "r2% c #5F4439", "s2% c #5D4239", "t2% c #674E47", "u2% c #745B54", "v2% c #7F6B64", "w2% c #93807A", "x2% c #ADAAA5", "y2% c #524232", "z2% c #413014", "A2% c #3D2F14", "B2% c #392D13", "C2% c #362B15", "D2% c #362B17", "E2% c #392E1A", "F2% c #3F2D23", "G2% c #733B3C", "H2% c #844647", "I2% c #9F5A5D", "J2% c #AE666A", "K2% c #A85D61", "L2% c #924140", "M2% c #8B3737", "N2% c #97281D", "O2% c #8C2013", "P2% c #A12C34", "Q2% c #A13834", "R2% c #A43A3C", "S2% c #A53B3D", "T2% c #A63B43", "U2% c #A83D47", "V2% c #A93D4A", "W2% c #AA3E4B", "X2% c #A53C43", "Y2% c #A33C40", "Z2% c #7C150E", "`2% c #7B1510", " 3% c #6A1510", ".3% c #5B1F1E", "+3% c #220E0D", "@3% c #250C07", "#3% c #5F3133", "$3% c #2E1A1C", "%3% c #271418", "&3% c #1F1013", "*3% c #544331", "=3% c #624942", "-3% c #765F59", ";3% c #816C67", ">3% c #584838", ",3% c #443315", "'3% c #3D2F12", ")3% c #3C2E13", "!3% c #392E12", "~3% c #402E22", "{3% c #29180E", "]3% c #6A2E2E", "^3% c #894749", "/3% c #A45D61", "(3% c #A75C60", "_3% c #924243", ":3% c #982A1D", "<3% c #8B1F12", "[3% c #3E1B19", "}3% c #9F282E", "|3% c #A12C35", "13% c #A22F36", "23% c #A13036", "33% c #A23137", "43% c #A53A40", "53% c #AA3F49", "63% c #AB3F4C", "73% c #AA3E4D", "83% c #A83E4A", "93% c #A63E45", "03% c #A53E42", "a3% c #A6393C", "b3% c #6A1512", "c3% c #301212", "d3% c #250E08", "e3% c #6D2E29", "f3% c #922A29", "g3% c #952926", "h3% c #5A2827", "i3% c #6B3F40", "j3% c #724A4B", "k3% c #3A1C1E", "l3% c #241616", "m3% c #1E0F12", "n3% c #5E4531", "o3% c #5E473F", "p3% c #6E5751", "q3% c #8A7570", "r3% c #A8A4A3", "s3% c #433415", "t3% c #3E3111", "u3% c #3C2E11", "v3% c #3A2F13", "w3% c #3A3015", "x3% c #3C3219", "y3% c #3F291C", "z3% c #402C21", "A3% c #4D1B1A", "B3% c #90484C", "C3% c #8C3C3F", "D3% c #8C2111", "E3% c #932818", "F3% c #922717", "G3% c #902515", "H3% c #8F2414", "I3% c #8D2212", "J3% c #8B2010", "K3% c #8A1F0F", "L3% c #881D0D", "M3% c #932419", "N3% c #1B1110", "O3% c #921A1C", "P3% c #9D262A", "Q3% c #9D262C", "R3% c #A12A30", "S3% c #A32E37", "T3% c #A42F38", "U3% c #A33A36", "V3% c #A33B3C", "W3% c #A83E48", "X3% c #AA404A", "Y3% c #AB414D", "Z3% c #AA404E", "`3% c #A93F4D", " 4% c #A73D49", ".4% c #A73F46", "+4% c #A43D41", "@4% c #260F09", "#4% c #932724", "$4% c #A52728", "%4% c #562828", "&4% c #61393A", "*4% c #634142", "=4% c #48292E", "-4% c #240B0F", ";4% c #281819", ">4% c #5E4737", ",4% c #5B3E2C", "'4% c #6C564B", ")4% c #A18C87", "!4% c #A38F8E", "~4% c #ABA5A7", "{4% c #A9A7A8", "]4% c #AEAEA4", "^4% c #ACACA0", "/4% c #AAAAA2", "(4% c #ABA8A1", "_4% c #4E3F28", ":4% c #4A3C21", "<4% c #3D3318", "[4% c #3F2A19", "}4% c #3E281A", "|4% c #40291B", "14% c #2A1A0D", "24% c #2F1109", "34% c #491615", "44% c #713537", "54% c #733334", "64% c #7D363A", "74% c #8D1F12", "84% c #83170B", "94% c #952718", "04% c #8C2212", "a4% c #8A2012", "b4% c #881E0E", "c4% c #861C0E", "d4% c #922318", "e4% c #7F2A25", "f4% c #4E1913", "g4% c #A22B31", "h4% c #A32F38", "i4% c #A43039", "j4% c #A5313A", "k4% c #A43339", "l4% c #A23A37", "m4% c #A23B36", "n4% c #A13936", "o4% c #A53D44", "p4% c #A84049", "q4% c #AA424B", "r4% c #AA424D", "s4% c #A9404E", "t4% c #A73E4C", "u4% c #A63E49", "v4% c #A64149", "w4% c #A54046", "x4% c #A33E44", "y4% c #811610", "z4% c #371919", "A4% c #24110A", "B4% c #8F2623", "C4% c #962924", "D4% c #A62A28", "E4% c #951A13", "F4% c #921710", "G4% c #5C2926", "H4% c #592D2C", "I4% c #3D2324", "J4% c #1F0F10", "K4% c #5B4635", "L4% c #836F66", "M4% c #8C7972", "N4% c #BCB0B0", "O4% c #B4ABAC", "P4% c #ACA6A8", "Q4% c #AFADB0", "R4% c #B0ACAD", "S4% c #332B16", "T4% c #40351F", "U4% c #3E2914", "V4% c #3E2811", "W4% c #382B18", "X4% c #332C19", "Y4% c #29190A", "Z4% c #5C2A2B", "`4% c #692E32", " 5% c #6F3136", ".5% c #78373D", "+5% c #85160D", "@5% c #992822", "#5% c #992820", "$5% c #A32E25", "%5% c #9C271D", "&5% c #912316", "*5% c #8D2315", "=5% c #892213", "-5% c #0E0808", ";5% c #9C272D", ">5% c #9D282E", ",5% c #A4323A", "'5% c #A7383E", ")5% c #A13B39", "!5% c #A23C3A", "~5% c #A43F43", "{5% c #A33F47", "]5% c #A44048", "^5% c #A6424C", "/5% c #A8444E", "(5% c #AA4650", "_5% c #AB4751", ":5% c #A4434C", "<5% c #A24246", "[5% c #A23F44", "}5% c #972628", "|5% c #7D1514", "15% c #6F1612", "25% c #5A201F", "35% c #512121", "45% c #3C1E1E", "55% c #161207", "65% c #9B2D2C", "75% c #952823", "85% c #A72C25", "95% c #961A12", "05% c #93170F", "a5% c #91160F", "b5% c #8C120D", "c5% c #8A130D", "d5% c #8B1410", "e5% c #8C1511", "f5% c #4A2826", "g5% c #111B1A", "h5% c #191F1D", "i5% c #594425", "j5% c #584525", "k5% c #6A5C53", "l5% c #84766D", "m5% c #B3A8AC", "n5% c #B1A8AB", "o5% c #817B6F", "p5% c #716B5B", "q5% c #3F2B12", "r5% c #3F2911", "s5% c #3F2A0F", "t5% c #3E2A11", "u5% c #2B1F0F", "v5% c #5F282D", "w5% c #672E34", "x5% c #74373E", "y5% c #924D52", "z5% c #A0555A", "A5% c #A95A5F", "B5% c #A55055", "C5% c #892728", "D5% c #9A2921", "E5% c #A22D23", "F5% c #A12C22", "G5% c #9D271B", "H5% c #8D2316", "I5% c #892315", "J5% c #862213", "K5% c #A2333A", "L5% c #A4353C", "M5% c #A6373E", "N5% c #A34045", "O5% c #A24148", "P5% c #A3424B", "Q5% c #A6454E", "R5% c #A5464E", "S5% c #A24349", "T5% c #A04147", "U5% c #9F2226", "V5% c #7F1718", "W5% c #7D1516", "X5% c #7C1415", "Y5% c #7D1617", "Z5% c #5A1E1E", "`5% c #1C1409", " 6% c #161206", ".6% c #110E05", "+6% c #773332", "@6% c #942C29", "#6% c #952A24", "$6% c #972A25", "%6% c #A62A22", "&6% c #A82C24", "*6% c #A72B23", "=6% c #981912", "-6% c #95160F", ";6% c #92160E", ">6% c #8D130E", ",6% c #8B140E", "'6% c #5E3533", ")6% c #5C3D3B", "!6% c #121D19", "~6% c #101F1A", "{6% c #172119", "]6% c #483828", "^6% c #574726", "/6% c #5B4D2A", "(6% c #615336", "_6% c #786E65", ":6% c #B2A6A8", "<6% c #777161", "[6% c #422E15", "}6% c #4A1C1E", "|6% c #4E1B20", "16% c #552026", "26% c #612A2F", "36% c #89484E", "46% c #9D565C", "56% c #AA5F64", "66% c #AF5E64", "76% c #AE595E", "86% c #A95054", "96% c #9F4547", "06% c #90251F", "a6% c #9E2C21", "b6% c #8A2416", "c6% c #8B2517", "d6% c #8F2620", "e6% c #100A0A", "f6% c #9E292F", "g6% c #9D2A2F", "h6% c #9F3037", "i6% c #A2414A", "j6% c #A54550", "k6% c #A4444F", "l6% c #A3434E", "m6% c #A3484F", "n6% c #A4484D", "o6% c #A3474C", "p6% c #A14248", "q6% c #A14145", "r6% c #982729", "s6% c #6D1511", "t6% c #28160C", "u6% c #793534", "v6% c #A52921", "w6% c #961710", "x6% c #8F1510", "y6% c #712317", "z6% c #5C3935", "A6% c #1A241B", "B6% c #5B482A", "C6% c #5A492B", "D6% c #605134", "E6% c #65593F", "F6% c #8E8B7A", "G6% c #42341A", "H6% c #310F0D", "I6% c #3D1516", "J6% c #401316", "K6% c #4E1D21", "L6% c #72373D", "M6% c #85444A", "N6% c #AF5D61", "O6% c #B55F62", "P6% c #B3585D", "Q6% c #9C2C21", "R6% c #9D2B21", "S6% c #9D2B20", "T6% c #882013", "U6% c #8C2618", "V6% c #892516", "W6% c #922721", "X6% c #2B1917", "Y6% c #9F2A30", "Z6% c #A0313A", "`6% c #A1323B", " 7% c #A43440", ".7% c #A5363F", "+7% c #A13A3D", "@7% c #97323A", "#7% c #9F3B45", "$7% c #A1404B", "%7% c #A5444F", "&7% c #A74753", "*7% c #A84854", "=7% c #A64652", "-7% c #A44952", ";7% c #A44950", ">7% c #A5464C", ",7% c #1D1309", "'7% c #171307", ")7% c #8C3B3A", "!7% c #922A27", "~7% c #971811", "{7% c #941810", "]7% c #6F2115", "^7% c #532B29", "/7% c #504330", "(7% c #5A4834", "_7% c #63553B", ":7% c #918E7D", "<7% c #807D6C", "[7% c #403823", "}7% c #3D2D14", "|7% c #351113", "17% c #3A1316", "27% c #4D1F22", "37% c #5B292C", "47% c #693036", "57% c #834047", "67% c #A05359", "77% c #B6646A", "87% c #C26B73", "97% c #BA6167", "07% c #97281F", "a7% c #872314", "b7% c #932822", "c7% c #3B1A15", "d7% c #9D2E34", "e7% c #A1313D", "f7% c #A2323E", "g7% c #A43442", "h7% c #A0323B", "i7% c #9E3A44", "j7% c #9A3640", "k7% c #97333D", "l7% c #96353E", "m7% c #9E3E49", "n7% c #A0404C", "o7% c #A64856", "p7% c #A84A58", "q7% c #A74B58", "r7% c #A74957", "s7% c #A54956", "t7% c #A54A53", "u7% c #A54A51", "v7% c #A34249", "w7% c #6F1411", "x7% c #6E1511", "y7% c #4E1B1A", "z7% c #1E140A", "A7% c #971B13", "B7% c #951911", "C7% c #371D1C", "D7% c #363521", "E7% c #47422E", "F7% c #4F432D", "G7% c #6D604F", "H7% c #A2A093", "I7% c #858271", "J7% c #736D5D", "K7% c #382C14", "L7% c #372811", "M7% c #2C1211", "N7% c #301214", "O7% c #331316", "P7% c #421B1E", "Q7% c #57262A", "R7% c #6C2F36", "S7% c #733238", "T7% c #843D43", "U7% c #9D5056", "V7% c #B36269", "W7% c #BB656E", "X7% c #B25B64", "Y7% c #A75056", "Z7% c #994342", "`7% c #8B3633", " 8% c #942923", ".8% c #A33341", "+8% c #A23240", "@8% c #9E3C49", "#8% c #9F3D4A", "$8% c #A04250", "%8% c #A24452", "&8% c #A54755", "*8% c #A74B5A", "=8% c #A94D5C", "-8% c #A84D5C", ";8% c #A84C59", ">8% c #A64B54", ",8% c #A64B52", "'8% c #671615", ")8% c #421615", "!8% c #351210", "~8% c #181408", "{8% c #702C2B", "]8% c #8E2A2A", "^8% c #542920", "/8% c #552D25", "(8% c #532E26", "_8% c #241414", ":8% c #564C33", "<8% c #6D5D50", "[8% c #827C6C", "}8% c #5E5745", "|8% c #412A1A", "18% c #402919", "28% c #3E2918", "38% c #3C291A", "48% c #2C1618", "58% c #2D1417", "68% c #301315", "78% c #351719", "88% c #3D1B1C", "98% c #471E22", "08% c #59242A", "a8% c #6C2D35", "b8% c #7D373F", "c8% c #A1515A", "d8% c #AD5A64", "e8% c #B05F66", "f8% c #B96B6B", "g8% c #A75957", "h8% c #90423E", "i8% c #821D11", "j8% c #A0303C", "k8% c #A43444", "l8% c #A23242", "m8% c #A13141", "n8% c #A0303E", "o8% c #A43941", "p8% c #A53740", "q8% c #A4363F", "r8% c #A43A44", "s8% c #A13C44", "t8% c #A13F4C", "u8% c #A0404E", "v8% c #A44452", "w8% c #AB4B59", "x8% c #B25260", "y8% c #B15361", "z8% c #AD4F5F", "A8% c #A64A59", "B8% c #A84C5B", "C8% c #A74C5D", "D8% c #A64E5E", "E8% c #A84D5E", "F8% c #A44A54", "G8% c #A2434B", "H8% c #99282C", "I8% c #551410", "J8% c #511B1B", "K8% c #371410", "L8% c #2B120B", "M8% c #21140B", "N8% c #1A1408", "O8% c #881512", "P8% c #6E241B", "Q8% c #4E261C", "R8% c #4A2C22", "S8% c #4B2E26", "T8% c #452A23", "U8% c #493D25", "V8% c #5C4B2F", "W8% c #3D3623", "X8% c #422819", "Y8% c #3E2B1D", "Z8% c #2C1A1A", "`8% c #281616", " 9% c #381819", ".9% c #3F1B1D", "+9% c #562328", "@9% c #60272E", "#9% c #752F39", "$9% c #833A43", "%9% c #984A57", "&9% c #A65961", "*9% c #D58F91", "=9% c #C27C7C", "-9% c #A7605E", ";9% c #8D4342", ">9% c #150A08", ",9% c #1B0C09", "'9% c #9F2F3B", ")9% c #A53543", "!9% c #A03040", "~9% c #A0353F", "{9% c #A53A42", "]9% c #A03D40", "^9% c #A43943", "/9% c #A33B44", "(9% c #9F3E49", "_9% c #A74755", ":9% c #A6485A", "<9% c #AB4D5F", "[9% c #B6596B", "}9% c #C26476", "|9% c #C46779", "19% c #BC5F71", "29% c #B35869", "39% c #AD5263", "49% c #AA5262", "59% c #AA4F60", "69% c #A54D5D", "79% c #A34C5C", "89% c #A44C5C", "99% c #A54D5B", "09% c #A24B54", "a9% c #A3464E", "b9% c #A1424A", "c9% c #53120E", "d9% c #160F07", "e9% c #7F170E", "f9% c #482A20", "g9% c #1F1513", "h9% c #43342D", "i9% c #5D4A2A", "j9% c #685547", "k9% c #857671", "l9% c #848172", "m9% c #5A5744", "n9% c #43291A", "o9% c #432C1C", "p9% c #483121", "q9% c #401C1E", "r9% c #522125", "s9% c #5E272D", "t9% c #672831", "u9% c #6D2A33", "v9% c #79313D", "w9% c #A16064", "x9% c #DFA1A2", "y9% c #EFAFAF", "z9% c #AB696A", "A9% c #763030", "B9% c #833535", "C9% c #A53545", "D9% c #A43643", "E9% c #A03640", "F9% c #A13741", "G9% c #A53B45", "H9% c #A73C44", "I9% c #A83D45", "J9% c #A63B45", "K9% c #A63A47", "L9% c #A53B47", "M9% c #A43C47", "N9% c #A23C47", "O9% c #A13D49", "P9% c #A24456", "Q9% c #AA4D60", "R9% c #B15467", "S9% c #B65B6D", "T9% c #C96C7F", "U9% c #D87D8F", "V9% c #D3788A", "W9% c #C1687A", "X9% c #B96072", "Y9% c #B0596A", "Z9% c #A84F61", "`9% c #A34C5D", " 0% c #A54E5F", ".0% c #A55161", "+0% c #A44D5E", "@0% c #A8505C", "#0% c #A75059", "$0% c #A84E57", "%0% c #A64C55", "&0% c #A1464F", "*0% c #9F424A", "=0% c #A04149", "-0% c #9F3E45", ";0% c #992E36", ">0% c #97262A", ",0% c #1F1108", "'0% c #942D2E", ")0% c #8C1415", "!0% c #8E1617", "~0% c #7B160E", "{0% c #5B2217", "]0% c #3D261E", "^0% c #645035", "/0% c #5E4728", "(0% c #756357", "_0% c #8B8879", ":0% c #797665", "<0% c #3F2818", "[0% c #441A1C", "}0% c #652830", "|0% c #6B2933", "10% c #702F37", "20% c #B0787B", "30% c #E5A9AB", "40% c #E3A5A8", "50% c #B87879", "60% c #A53541", "70% c #A33542", "80% c #A73D47", "90% c #A73F4A", "00% c #A6404D", "a0% c #A5414D", "b0% c #A6424E", "c0% c #A44251", "d0% c #A34659", "e0% c #AA4E63", "f0% c #AF5368", "g0% c #B35A6E", "h0% c #C4687D", "i0% c #D1788C", "j0% c #CD7486", "k0% c #BE6778", "l0% c #B76071", "m0% c #AE5A6A", "n0% c #A75363", "o0% c #A65262", "p0% c #A65363", "q0% c #A34F5F", "r0% c #9F4B5A", "s0% c #A7515C", "t0% c #A94F59", "u0% c #A34851", "v0% c #A2454F", "w0% c #9F4048", "x0% c #9C1F23", "y0% c #661619", "z0% c #221107", "A0% c #501F1B", "B0% c #5A4437", "C0% c #624C37", "D0% c #8F7E74", "E0% c #3A2514", "F0% c #472F23", "G0% c #361413", "H0% c #461E1F", "I0% c #5C252B", "J0% c #5D2129", "K0% c #5B242A", "L0% c #824D53", "M0% c #C1888E", "N0% c #EAAFB5", "O0% c #E1A4A9", "P0% c #BA797D", "Q0% c #9E575B", "R0% c #A13340", "S0% c #A13942", "T0% c #9D3A3D", "U0% c #9E3C3D", "V0% c #A63C46", "W0% c #A93F4B", "X0% c #AA404C", "Y0% c #AB414F", "Z0% c #AB4250", "`0% c #AA4452", " a% c #AB4654", ".a% c #AC4755", "+a% c #A94859", "@a% c #AA5167", "#a% c #AD546A", "$a% c #AF576D", "%a% c #BC6377", "&a% c #C77083", "*a% c #C56E81", "=a% c #B86376", "-a% c #B46070", ";a% c #AF5C6C", ">a% c #AA5866", ",a% c #A95765", "'a% c #A85865", ")a% c #A45260", "!a% c #A04E5C", "~a% c #A8515A", "{a% c #A64F58", "]a% c #A74D57", "^a% c #A54852", "/a% c #9E343E", "(a% c #9D343B", "_a% c #9C333A", ":a% c #65161B", "b% c #AB4251", ",b% c #AD4657", "'b% c #AE495B", ")b% c #AE4B5D", "!b% c #AC4E60", "~b% c #AA5165", "{b% c #AA556A", "]b% c #AB566B", "^b% c #AC576C", "/b% c #AF5A6D", "(b% c #B25F71", "_b% c #B36070", ":b% c #AF5E6D", "c% c #3C281D", ",c% c #3A281C", "'c% c #300D0B", ")c% c #350D0D", "!c% c #3B1115", "~c% c #42141F", "{c% c #481826", "]c% c #582534", "^c% c #632D3A", "/c% c #632B36", "(c% c #7E4149", "_c% c #9F6068", ":c% c #C68088", "d% c #A74250", ",d% c #A84353", "'d% c #A74657", ")d% c #A8475A", "!d% c #A7495B", "~d% c #A74A5D", "{d% c #A74C5E", "]d% c #A75265", "^d% c #B05F70", "/d% c #AC5B6C", "(d% c #A45664", "_d% c #A45663", ":d% c #A85A67", "e% c #741213", ",e% c #6E191C", "'e% c #5D181B", ")e% c #291009", "!e% c #6A302F", "~e% c #833739", "{e% c #922B2F", "]e% c #9A2416", "^e% c #9A1913", "/e% c #9C1E12", "(e% c #9A1B12", "_e% c #991A11", ":e% c #961E10", "f% c #221213", ",f% c #221618", "'f% c #493628", ")f% c #695345", "!f% c #705E54", "~f% c #ADA4A7", "{f% c #AEA5A8", "]f% c #B0A7AC", "^f% c #B0A7AA", "/f% c #80786D", "(f% c #33220E", "_f% c #362916", ":f% c #351518", "g% c #4F1E22", ",g% c #60292F", "'g% c #71343B", ")g% c #8C454D", "!g% c #AC6168", "~g% c #C37B7F", "{g% c #C27C7A", "]g% c #AB6661", "^g% c #891F12", "/g% c #96292C", "(g% c #4F2C28", "_g% c #120B12", ":g% c #321D1C", "h% c #9E3D48", ",h% c #A03F4A", "'h% c #A24B53", ")h% c #A05059", "!h% c #A85F6A", "~h% c #AF6773", "{h% c #B36C7A", "]h% c #B57180", "^h% c #BB7987", "/h% c #C2808E", "(h% c #C07C8B", "_h% c #BF7B8A", ":h% c #B87483", "i% c #B47882", ",i% c #BB7F89", "'i% c #BA7E88", ")i% c #B3777F", "!i% c #AF7079", "~i% c #AE6C76", "{i% c #AB6871", "]i% c #A75561", "^i% c #A7565F", "/i% c #A6555E", "(i% c #A5545D", "_i% c #A14A52", ":i% c #A34952", "j% c #932B22", ",j% c #912822", "'j% c #621414", ")j% c #631417", "!j% c #67181D", "~j% c #2D110E", "{j% c #25100F", "]j% c #220F01", "^j% c #7C3B37", "/j% c #8F2A22", "(j% c #8F2821", "_j% c #971517", ":j% c #981618", "k% c #9B161B", ",k% c #9C171C", "'k% c #9A171C", ")k% c #941415", "!k% c #901213", "~k% c #811F12", "{k% c #812010", "]k% c #7F1E0E", "^k% c #644A33", "/k% c #5F3E2D", "(k% c #5C3B2C", "_k% c #5B392D", ":k% c #5E3E33", "l% c #941411", ",l% c #98151A", "'l% c #98151B", ")l% c #97141A", "!l% c #961318", "~l% c #941116", "{l% c #931015", "]l% c #911112", "^l% c #8E1212", "/l% c #7E1E10", "(l% c #74261A", "_l% c #301615", ":l% c #4C3928", "m% c #762418", ",m% c #6B2114", "'m% c #582218", ")m% c #51402E", "!m% c #5B3D32", "~m% c #6A4C42", "{m% c #80635D", "]m% c #907471", "^m% c #A28A8A", "/m% c #A89495", "(m% c #B1A5A7", "_m% c #A8A2A4", ":m% c #A8A6A9", "n% c #663636", ",n% c #783839", "'n% c #7B3132", ")n% c #9B1D20", "!n% c #95171A", "~n% c #941619", "{n% c #7A2C20", "]n% c #652116", "^n% c #5F2114", "/n% c #3F1E17", "(n% c #251717", "_n% c #645038", ":n% c #604436", "o% c #54251B", ",o% c #401E14", "'o% c #524535", ")o% c #9B827D", "!o% c #B19997", "~o% c #BDA8A7", "{o% c #B6A6A9", "]o% c #B1A5A9", "^o% c #AFA4A8", "/o% c #847A71", "(o% c #3B2C17", "_o% c #362710", ":o% c #382912", "p% c #A24A56", ",p% c #9A262F", "'p% c #731410", ")p% c #45130C", "!p% c #3B1009", "~p% c #220D0A", "{p% c #813D3C", "]p% c #8D252C", "^p% c #9C1C13", "/p% c #662A22", "(p% c #4D2219", "_p% c #44332B", ":p% c #4D3F34", "q% c #4D3930", ",q% c #524036", "'q% c #504031", ")q% c #695A43", "!q% c #897C6C", "~q% c #B3A7AB", "{q% c #AAABA6", "]q% c #AAACA7", "^q% c #9E9A9B", "/q% c #3B3012", "(q% c #392E0E", "_q% c #3C2714", ":q% c #372415", "r% c #151E19", ",r% c #312624", "'r% c #4F2322", ")r% c #62322E", "!r% c #65322E", "~r% c #731E23", "{r% c #861D22", "]r% c #81181D", "^r% c #991B0F", "/r% c #2F120A", "(r% c #503429", "_r% c #553A31", ":r% c #564325", "s% c #BA959D", ",s% c #C59CA4", "'s% c #C89DA6", ")s% c #C1939D", "!s% c #B98792", "~s% c #B17E87", "{s% c #AF7782", "]s% c #B77883", "^s% c #AA6371", "/s% c #A55D69", "(s% c #A85E6B", "_s% c #AD616D", ":s% c #AD606A", "t% c #B06470", ",t% c #AA626E", "'t% c #AA6673", ")t% c #A86876", "!t% c #A56774", "~t% c #A76B77", "{t% c #A97380", "]t% c #AA7683", "^t% c #A87A85", "/t% c #B28A92", "(t% c #B28F95", "_t% c #B59097", ":t% c #B78F97", "u% c #9D5064", ",u% c #A85A70", "'u% c #A2596D", ")u% c #A86173", "!u% c #B87385", "~u% c #AC697A", "{u% c #8F4F5F", "]u% c #8B4752", "^u% c #843A3B", "/u% c #903031", "(u% c #A53B3B", "_u% c #922D31", ":u% c #912C30", "v% c #9C3546", ",v% c #9D3445", "'v% c #9D3443", ")v% c #A0272E", "!v% c #A2272C", "~v% c #8F2E27", "{v% c #772B2B", "]v% c #762C2D", "^v% c #71292C", "/v% c #73282F", "(v% c #752830", "_v% c #742832", ":v% c #742930", "w% c #A85565", ",w% c #AB586A", "'w% c #AA5769", ")w% c #A95668", "!w% c #A75667", "~w% c #A65868", "{w% c #A65969", "]w% c #A35968", "^w% c #A45D6B", "/w% c #A6626F", "(w% c #AC646F", "_w% c #AD6571", ":w% c #A4606B", "x% c #160606", ",x% c #160807", "'x% c #130806", ")x% c #100503", "!x% c #0C0200", "~x% c #0F0704", "{x% c #0E0905", "]x% c #090A04", "^x% c #0C0904", "/x% c #0D0804", "(x% c #080B04", "_x% c #090C05", ":x% c #0C0C04", "y% c #382828", ",y% c #3E2C2C", "'y% c #52331F", ")y% c #513422", "!y% c #6C5A50", "~y% c #796860", "{y% c #B6AEAC", "]y% c #827968", "^y% c #3D3522", "/y% c #312916", "(y% c #413028", "_y% c #451E21", ":y% c #64353D", "z% c #5D3126", ",z% c #572D21", "'z% c #151D10", ")z% c #131B0E", "!z% c #121D0F", "~z% c #0B1709", "{z% c #0C180A", "]z% c #0C1A0B", "^z% c #0E1609", "/z% c #180E05", "(z% c #1A0D05", "_z% c #1D0E07", ":z% c #61161B", "A% c #AC5D63", ",A% c #A5545B", "'A% c #AA4D58", ")A% c #A94955", "!A% c #9F3F4B", "~A% c #A23D4B", "{A% c #A7414F", "]A% c #AE4856", "^A% c #AF4957", "/A% c #A9404F", "(A% c #753132", "_A% c #703233", ":A% c #6C3231", "B% c #A0434E", ",B% c #A44A56", "'B% c #A54B57", ")B% c #A75360", "!B% c #AA5A63", "~B% c #AD5D66", "{B% c #AC5F67", "]B% c #AA5E68", "^B% c #A75E65", "/B% c #A86167", "(B% c #A8626A", "_B% c #A8666A", ":B% c #AA676E", "C% c #803039", ",C% c #8B3842", "'C% c #AC505B", ")C% c #A64A4D", "!C% c #A5494C", "~C% c #A04648", "{C% c #9E4446", "]C% c #9C4244", "^C% c #A04041", "/C% c #9B3F40", "(C% c #964240", "_C% c #853B38", ":C% c #76413D", "D% c #572A25", ",D% c #4B110D", "'D% c #7D2F2D", ")D% c #89130F", "!D% c #96170E", "~D% c #92160C", "{D% c #8F160D", "]D% c #7C362E", "^D% c #1F1919", "/D% c #45302B", "(D% c #4C352F", "_D% c #604438", ":D% c #62422D", "E% c #B37487", ",E% c #BC7A86", "'E% c #BB7782", ")E% c #A7646D", "!E% c #A9636B", "~E% c #AA5D63", "{E% c #A24C55", "]E% c #AC4A57", "^E% c #A6404B", "/E% c #A43C45", "(E% c #903739", "_E% c #723232", ":E% c #3F1F20", "F% c #A76A6F", ",F% c #A46C75", "'F% c #A8707B", ")F% c #AE7681", "!F% c #B17B88", "~F% c #C28C99", "{F% c #BC8694", "]F% c #B78191", "^F% c #B98393", "/F% c #C28B9E", "(F% c #C28BA2", "_F% c #BE879E", ":F% c #B78097", "G% c #824240", ",G% c #6A3432", "'G% c #2F100D", ")G% c #291516", "!G% c #241415", "~G% c #11080D", "{G% c #10070C", "]G% c #080C0B", "^G% c #0A0C0B", "/G% c #1D0B07", "(G% c #250906", "_G% c #310E0A", ":G% c #38110C", "H% c #AFA9A9", ",H% c #48372F", "'H% c #68312C", ")H% c #732C32", "!H% c #AB5E66", "~H% c #C27379", "{H% c #C9787F", "]H% c #C8767C", "^H% c #AE5C62", "/H% c #944246", "(H% c #A23E40", "_H% c #8E4340", ":H% c #854442", "I% c #7C362C", ",I% c #73352A", "'I% c #6D372D", ")I% c #5A2B21", "!I% c #3F2B22", "~I% c #483227", "{I% c #5D4038", "]I% c #654038", "^I% c #624037", "/I% c #5F3D33", "(I% c #5E3C30", "_I% c #5D3D30", ":I% c #705752", "J% c #0C1814", ",J% c #0A1612", "'J% c #07130F", ")J% c #06120E", "!J% c #05100C", "~J% c #090708", "{J% c #040A06", "]J% c #030C07", "^J% c #2E1211", "/J% c #581C1E", "(J% c #511A1D", "_J% c #743E3E", ":J% c #7A3235", "K% c #C79EAE", ",K% c #BA8E9D", "'K% c #A77785", ")K% c #B07C88", "!K% c #B57D88", "~K% c #B4777F", "{K% c #AF6E76", "]K% c #A66667", "^K% c #A26062", "/K% c #9C3C48", "(K% c #6E3C3F", "_K% c #663539", ":K% c #593235", "L% c #9D434C", ",L% c #A95C6E", "'L% c #A75D6E", ")L% c #AA6071", "!L% c #AE6475", "~L% c #AE6576", "{L% c #AA6373", "]L% c #A76070", "^L% c #A4606F", "/L% c #A76775", "(L% c #AE707D", "_L% c #B37783", ":L% c #B77D8B", "M% c #66412F", ",M% c #5F3525", "'M% c #63372C", ")M% c #5E3227", "!M% c #5D3327", "~M% c #60392A", "{M% c #69554A", "]M% c #AA9FA5", "^M% c #B3A9B1", "/M% c #ABA5A9", "(M% c #AAA4A6", "_M% c #9A999E", ":M% c #796F66", "N% c #643136", ",N% c #5B2E33", "'N% c #573033", ")N% c #563639", "!N% c #4F3737", "~N% c #453536", "{N% c #2F2E33", "]N% c #2C2B30", "^N% c #1D2323", "/N% c #212B2A", "(N% c #17221E", "_N% c #141A18", ":N% c #120809", "O% c #A86674", ",O% c #AE6C7A", "'O% c #B17182", ")O% c #AD6D7E", "!O% c #B6798B", "~O% c #9C6777", "{O% c #B28292", "]O% c #BD8E9E", "^O% c #B88D9E", "/O% c #B891A3", "(O% c #B899A9", "_O% c #C3A8B9", ":O% c #D0B8C8", "P% c #602827", ",P% c #6D302F", "'P% c #6F2929", ")P% c #924B49", "!P% c #914746", "~P% c #9A4A49", "{P% c #A74D4C", "]P% c #B65657", "^P% c #BD5A5D", "/P% c #B55257", "(P% c #A8444C", "_P% c #9A3441", ":P% c #98323F", "Q% c #9F545B", ",Q% c #9C4945", "'Q% c #9C4744", ")Q% c #9E4443", "!Q% c #A63D4B", "~Q% c #8A4349", "{Q% c #82474B", "]Q% c #7F4D50", "^Q% c #754B4D", "/Q% c #694547", "(Q% c #5B3E40", "_Q% c #513B3D", ":Q% c #463636", "R% c #B6778C", ",R% c #B77C90", "'R% c #B88393", ")R% c #AC7E8B", "!R% c #AA7E8D", "~R% c #C096A4", "{R% c #CEA7B9", "]R% c #BE9EAD", "^R% c #BA9DAF", "/R% c #D2BBCB", "(R% c #FFF1FD", "_R% c #E6D5DD", ":R% c #C5B4BC", "S% c #B5B0AD", ",S% c #322213", "'S% c #46352D", ")S% c #483932", "!S% c #42332E", "~S% c #8B514F", "{S% c #894949", "]S% c #8E4A47", "^S% c #904741", "/S% c #924742", "(S% c #9F514D", "_S% c #9C424C", ":S% c #AC525B", "T% c #242A2A", ",T% c #232929", "'T% c #202926", ")T% c #1D2824", "!T% c #0F1106", "~T% c #452623", "{T% c #5F150C", "]T% c #964C43", "^T% c #AA6057", "/T% c #8B4138", "(T% c #150B13", "_T% c #100911", ":T% c #151016", "U% c #C49AA8", ",U% c #B68797", "'U% c #AF7F8F", ")U% c #B38091", "!U% c #B68193", "~U% c #B37C8F", "{U% c #AD7787", "]U% c #AC757B", "^U% c #A66D74", "/U% c #A56870", "(U% c #A84750", "_U% c #AA464E", ":U% c #A9454D", "V% c #9E3C39", ",V% c #9B3C38", "'V% c #993E3B", ")V% c #974945", "!V% c #8B4641", "~V% c #161117", "{V% c #170E13", "]V% c #070705", "^V% c #1E0B07", "/V% c #210907", "(V% c #280C0B", "_V% c #2E1010", ":V% c #7B181B", "W% c #633422", ",W% c #50291A", "'W% c #594635", ")W% c #4F3429", "!W% c #4B322B", "~W% c #4F3733", "{W% c #5B4643", "]W% c #7C6867", "^W% c #917E7A", "/W% c #ABABA9", "(W% c #AAA9A7", "_W% c #ACA7AB", ":W% c #A6A2A3", "X% c #934350", ",X% c #84424E", "'X% c #7C404A", ")X% c #734049", "!X% c #6D4047", "~X% c #693E45", "{X% c #614146", "]X% c #5F4B4C", "^X% c #524745", "/X% c #393532", "(X% c #3D3D3B", "_X% c #3C413D", ":X% c #383E3C", "Y% c #AA6B73", ",Y% c #AB6C75", "'Y% c #A76974", ")Y% c #A96C7B", "!Y% c #AC6F7F", "~Y% c #AE7385", "{Y% c #AA6F83", "]Y% c #AB7285", "^Y% c #B4798F", "/Y% c #BB8197", "(Y% c #BB8698", "_Y% c #C693A2", ":Y% c #C494A4", "Z% c #B1A0A8", ",Z% c #BCADB0", "'Z% c #A6A6A4", ")Z% c #A4A4A2", "!Z% c #ADAEB0", "~Z% c #AAABAD", "{Z% c #AAA8AD", "]Z% c #ACAAAF", "^Z% c #5B503A", "/Z% c #3F331B", "(Z% c #3F2822", "_Z% c #3D4132", ":Z% c #333E2D", "`% c #AF7C83", ",`% c #B1727D", "'`% c #994F5C", ")`% c #A35563", "!`% c #A44D5D", "~`% c #A24A58", "{`% c #A04856", "]`% c #9E4855", "^`% c #9A4A57", "/`% c #954956", "(`% c #8E4654", "_`% c #874551", ":`% c #7A3E4A", "<`% c #6E3A46", "[`% c #693B46", "}`% c #67424A", "|`% c #61424A", "1`% c #554045", "2`% c #58484B", "3`% c #3F3B3C", "4`% c #383637", "5`% c #343434", "6`% c #2F3032", "7`% c #2E3233", "8`% c #303636", "9`% c #3F4447", "0`% c #373C3F", "a`% c #2E3235", "b`% c #292D30", "c`% c #2A2B30", "d`% c #2A292F", "e`% c #1F1E23", "f`% c #060606", "g`% c #070707", "h`% c #170C10", "i`% c #1A0A0B", "j`% c #311718", "k`% c #5F1D1E", "l`% c #611F20", "m`% c #601E20", "n`% c #47322F", "o`% c #7D5556", "p`% c #8B595C", "q`% c #7B363B", "r`% c #7E272F", "s`% c #851D24", "t`% c #8F212A", "u`% c #97232E", "v`% c #96212A", "w`% c #95212A", "x`% c #97392F", "y`% c #8D3126", "z`% c #842A1F", "A`% c #872F23", "B`% c #823120", "C`% c #8E4731", "D`% c #8E5037", "E`% c #824832", "F`% c #64301A", "G`% c #4B1E09", "H`% c #3E1906", "I`% c #241407", "J`% c #242527", "K`% c #463C33", "L`% c #73605C", "M`% c #877575", "N`% c #968387", "O`% c #A08F97", "P`% c #AB99A5", "Q`% c #B3A2AC", "R`% c #ABA2A3", "S`% c #ADADAD", "T`% c #A9AAAC", "U`% c #AAA8AB", "V`% c #929695", "W`% c #93928E", "X`% c #3E321C", "Y`% c #362217", "Z`% c #35392A", "``% c #394231", " & c #333E2E", ". & c #2D3325", "+ & c #5D3830", "@ & c #6A423A", "# & c #683D36", "$ & c #643732", "% & c #643434", "& & c #552326", "* & c #5A252B", "= & c #7D464C", "- & c #B0717C", "; & c #BC7A84", "> & c #D995A0", ", & c #B36C72", "' & c #AD6568", ") & c #9B4D4D", "! & c #A64D4F", "~ & c #A34043", "{ & c #A04F4E", "] & c #1C0903", "^ & c #682125", "/ & c #A04451", "( & c #A66772", "_ & c #A56573", ": & c #A46472", "< & c #AB6F79", "[ & c #A86E7A", "} & c #AB717F", "| & c #AD7382", "1 & c #B37A8B", "2 & c #B77E91", "3 & c #B67F92", "4 & c #B47D92", "5 & c #B17A8F", "6 & c #B07990", "7 & c #B68394", "8 & c #BE8F9F", "9 & c #B48A98", "0 & c #BB92A4", "a & c #BA98A8", "b & c #B695A8", "c & c #B598AA", "d & c #B29AAA", "e & c #AF99A6", "f & c #C6B2BE", "g & c #DBCAD2", "h & c #DAC6CF", "i & c #E4D1D5", "j & c #E1CCD1", "k & c #C5A5B0", "l & c #C4A4AF", "m & c #C2A1AC", "n & c #B897A2", "o & c #AF8B97", "p & c #A88490", "q & c #C6A0AD", "r & c #C69CAA", "s & c #CAA0AE", "t & c #C99DAC", "u & c #D4A8B5", "v & c #AC8389", "w & c #A97C83", "x & c #B17982", "y & c #9D5563", "z & c #A1505F", "A & c #A14F5D", "B & c #9B4B58", "C & c #924A56", "D & c #904957", "E & c #884954", "F & c #814551", "G & c #78424F", "H & c #734550", "I & c #653D46", "J & c #5B3A43", "K & c #5B4049", "L & c #58434A", "M & c #504148", "N & c #4C4147", "O & c #534A4D", "P & c #474143", "Q & c #3C3839", "R & c #393536", "S & c #343235", "T & c #2F3334", "U & c #3B3C40", "V & c #333438", "W & c #2A282D", "X & c #29222A", "Y & c #1C0C0F", "Z & c #35181A", "` & c #3E1C1D", " .& c #622022", "..& c #621E1F", "+.& c #786060", "@.& c #7E5E5F", "#.& c #7E5657", "$.& c #71363C", "%.& c #69262D", "&.& c #72272E", "*.& c #812730", "=.& c #8C2631", "-.& c #932530", ";.& c #8E352D", ">.& c #943D34", ",.& c #853126", "'.& c #823024", ").& c #904134", "!.& c #944C3D", "~.& c #7C3F2C", "{.& c #703C26", "].& c #4A1F0C", "^.& c #341707", "/.& c #2C1608", "(.& c #4C3E35", "_.& c #4D321F", ":.& c #BCABB1", "<.& c #BEADB5", "[.& c #C0AEBA", "}.& c #C0B0BA", "|.& c #A9A5A4", "1.& c #969895", "2.& c #363A29", "3.& c #3E4231", "4.& c #3F4334", "5.& c #383A2C", "6.& c #5C362D", "7.& c #5F3630", "8.& c #5A312D", "9.& c #431517", "0.& c #632E36", "a.& c #743A46", "b.& c #A26670", "c.& c #C17F89", "d.& c #DA96A1", "e.& c #D4919A", "f.& c #B8727C", "g.& c #AE676D", "h.& c #B46C6F", "i.& c #A95F60", "j.& c #9B4F51", "k.& c #A44E51", "l.& c #993D42", "m.& c #A04447", "n.& c #983D3C", "o.& c #A34F4F", "p.& c #984E4D", "q.& c #753533", "r.& c #1C0702", "s.& c #3C2015", "t.& c #401E1F", "u.& c #6E2627", "v.& c #97313C", "w.& c #A04453", "x.& c #A04858", "y.& c #A25462", "z.& c #A15764", "A.& c #A46874", "B.& c #A66877", "C.& c #A46872", "D.& c #A76B75", "E.& c #AA717A", "F.& c #AB717D", "G.& c #B07684", "H.& c #B27988", "I.& c #B37D8D", "J.& c #B88194", "K.& c #BA8398", "L.& c #B98299", "M.& c #B17B92", "N.& c #AD7D8D", "O.& c #B88A97", "P.& c #B18896", "Q.& c #B992A4", "R.& c #B898A7", "S.& c #B697A9", "T.& c #B99EAF", "U.& c #B29EAA", "V.& c #BAA8B4", "W.& c #CCBDC4", "X.& c #E4D5DA", "Y.& c #E1D1D4", "Z.& c #E6D3D7", "`.& c #DCC2CB", " +& c #C7A9B3", ".+& c #C4A6B0", "++& c #C2A2AD", "@+& c #BB9AA5", "#+& c #B28E9A", "$+& c #C49EAB", "%+& c #D8B2BF", "&+& c #D6ADBB", "*+& c #C498A7", "=+& c #C798A8", "-+& c #CEA2AF", ";+& c #B98F99", ">+& c #AE8188", ",+& c #AE7C85", "'+& c #B17984", ")+& c #A15562", "!+& c #98505B", "~+& c #944E58", "{+& c #914F59", "]+& c #8C4D58", "^+& c #884A55", "/+& c #834A53", "(+& c #804853", "_+& c #784651", ":+& c #70424D", "<+& c #684049", "[+& c #6B4A53", "}+& c #5C414A", "|+& c #503B42", "1+& c #4E3D45", "2+& c #4E434B", "3+& c #423D43", "4+& c #403B41", "5+& c #494347", "6+& c #403A3E", "7+& c #383337", "8+& c #373236", "9+& c #333134", "0+& c #2E2E30", "a+& c #333335", "b+& c #2C2328", "c+& c #2B2028", "d+& c #271E23", "e+& c #240E10", "f+& c #2B1112", "g+& c #361617", "h+& c #3F1B1B", "i+& c #4B2122", "j+& c #5F1418", "k+& c #632125", "l+& c #572023", "m+& c #552525", "n+& c #5D5151", "o+& c #826F71", "p+& c #755C5F", "q+& c #694B4D", "r+& c #583134", "s+& c #561F25", "t+& c #5D1E26", "u+& c #6D272F", "v+& c #792C36", "w+& c #893841", "x+& c #882C37", "y+& c #922930", "z+& c #92433C", "A+& c #92483F", "B+& c #7F362D", "C+& c #7A342A", "D+& c #8C483B", "E+& c #945647", "F+& c #673423", "G+& c #3A1302", "H+& c #301406", "I+& c #534238", "J+& c #533827", "K+& c #574030", "L+& c #B6A8A7", "M+& c #B6A7AA", "N+& c #B3A4AB", "O+& c #B1A0AA", "P+& c #B0A0AA", "Q+& c #AAAAAA", "R+& c #AFA9AB", "S+& c #949693", "T+& c #918E7F", "U+& c #392719", "V+& c #3D0E14", "W+& c #4B1A20", "X+& c #612C36", "Y+& c #925A65", "Z+& c #CB8C97", "`+& c #D7959F", " @& c #CA8892", ".@& c #C27F86", "+@& c #AE6667", "@@& c #A45A5B", "#@& c #7D3C3A", "$@& c #1F0802", "%@& c #1A0B04", "&@& c #120E05", "*@& c #3A1F14", "=@& c #3E2221", "-@& c #6D2928", ";@& c #95313D", ">@& c #983742", ",@& c #9F4352", "'@& c #A36771", ")@& c #A36773", "!@& c #A26874", "~@& c #A46A76", "{@& c #A76A79", "]@& c #AE7683", "^@& c #B37D8B", "/@& c #B68090", "(@& c #BD869B", "_@& c #BC879B", ":@& c #BA849B", "<@& c #B78198", "[@& c #B57F96", "}@& c #B48194", "|@& c #A57686", "1@& c #B18592", "2@& c #B68C9A", "3@& c #B7919E", "4@& c #BD9BAB", "5@& c #BD9EAD", "6@& c #C0A5B6", "7@& c #CDB6C6", "8@& c #E4CFDE", "9@& c #EBD9E5", "0@& c #D7C7D2", "a@& c #E2D5DC", "b@& c #DCD0D4", "c@& c #CEC2C4", "d@& c #F1DAE2", "e@& c #E3C8D1", "f@& c #C8AAB4", "g@& c #C1A0AB", "h@& c #C5A1AD", "i@& c #DDB4C2", "j@& c #DAB0BE", "k@& c #CA9EAD", "l@& c #C195A4", "m@& c #C192A2", "n@& c #C0929F", "o@& c #C49AA4", "p@& c #BE959D", "q@& c #B68B92", "r@& c #B3848C", "s@& c #B37E88", "t@& c #AF707B", "u@& c #A05864", "v@& c #97565E", "w@& c #915058", "x@& c #89545C", "y@& c #825059", "z@& c #794A52", "A@& c #6D454D", "B@& c #68454C", "C@& c #62434B", "D@& c #5C424B", "E@& c #614C53", "F@& c #56474E", "G@& c #4B4046", "H@& c #463F46", "I@& c #423F46", "J@& c #3F3E44", "K@& c #3B3B43", "L@& c #3A393F", "M@& c #413C40", "N@& c #3B3539", "O@& c #353034", "P@& c #281D23", "Q@& c #241B1E", "R@& c #261012", "S@& c #2C1213", "T@& c #311313", "U@& c #5F1D1F", "V@& c #4C2422", "W@& c #6B6265", "X@& c #594547", "Y@& c #462C2F", "Z@& c #421F25", "`@& c #3F141B", " #& c #48151C", ".#& c #592029", "+#& c #6F2D37", "@#& c #89434E", "##& c #904752", "$#& c #7B3430", "%#& c #914C45", "&#& c #925249", "*#& c #7C3D34", "=#& c #73392E", "-#& c #703C2F", ";#& c #53291D", ">#& c #39170B", ",#& c #280A00", "'#& c #4B4137", ")#& c #523829", "!#& c #573D30", "~#& c #533D30", "{#& c #AC9DA2", "]#& c #B1A2A7", "^#& c #989994", "/#& c #9A9B96", "(#& c #423725", "_#& c #443329", ":#& c #360B12", "<#& c #40111B", "[#& c #75434C", "}#& c #9E6973", "|#& c #AA727B", "1#& c #BA7D85", "2#& c #B07277", "3#& c #B87073", "4#& c #B4696D", "5#& c #A5595D", "6#& c #9B464D", "7#& c #9C414A", "8#& c #993F41", "9#& c #99494A", "0#& c #321F18", "a#& c #35201F", "b#& c #3B2323", "c#& c #3F2224", "d#& c #3C2223", "e#& c #973641", "f#& c #A45161", "g#& c #A55B68", "h#& c #A46A78", "i#& c #A56D7A", "j#& c #A76D7B", "k#& c #A76D79", "l#& c #A9717A", "m#& c #AC747F", "n#& c #B17887", "o#& c #B27C8A", "p#& c #BC8696", "q#& c #BC8799", "r#& c #B88598", "s#& c #B48096", "t#& c #B58198", "u#& c #B58499", "v#& c #A47887", "w#& c #B38995", "x#& c #BB95A2", "y#& c #C3A3B2", "z#& c #BCA0AE", "A#& c #C4ACBC", "B#& c #DEC9D8", "C#& c #F1DFED", "D#& c #FFF2FC", "E#& c #E7DAE4", "F#& c #D4C9CF", "G#& c #E6DBE1", "H#& c #DFD4D8", "I#& c #EEDFE2", "J#& c #FEE9F0", "K#& c #D9BFC8", "L#& c #C2A4AE", "M#& c #B999A4", "N#& c #B695A0", "O#& c #B995A1", "P#& c #BE95A3", "Q#& c #C596A6", "R#& c #D0A0B0", "S#& c #D2A2B2", "T#& c #C698A5", "U#& c #CAA0AA", "V#& c #C49CA4", "W#& c #B5808A", "X#& c #B17783", "Y#& c #A96572", "Z#& c #9B5C65", "`#& c #945B62", " $& c #815054", ".$& c #7C555A", "+$& c #715156", "@$& c #67484D", "#$& c #604348", "$$& c #594449", "%$& c #57464C", "&$& c #54474E", "*$& c #52494E", "=$& c #514A51", "-$& c #4B484F", ";$& c #414149", ">$& c #383B42", ",$& c #353A40", "'$& c #373B44", ")$& c #3B3E43", "!$& c #3B393C", "~$& c #373334", "{$& c #0A090E", "]$& c #08070C", "^$& c #07060B", "/$& c #0B0A0F", "($& c #5B191B", "_$& c #5F1D21", ":$& c #611F23", "<$& c #622024", "[$& c #651F21", "}$& c #5A1F23", "|$& c #101415", "1$& c #0B060C", "2$& c #1C171D", "3$& c #89848A", "4$& c #DAD4D8", "5$& c #5F5357", "6$& c #2E171D", "7$& c #311218", "8$& c #3B161D", "9$& c #4A1C26", "0$& c #622D37", "a$& c #864A56", "b$& c #925260", "c$& c #903B40", "d$& c #773A35", "e$& c #854A46", "f$& c #824B46", "g$& c #524235", "h$& c #574136", "i$& c #62544B", "j$& c #A7A8A3", "k$& c #898373", "l$& c #2F2710", "m$& c #302511", "n$& c #2E230F", "o$& c #312111", "p$& c #45322B", "q$& c #342015", "r$& c #38181B", "s$& c #2B070B", "t$& c #340B13", "u$& c #633841", "v$& c #AB7982", "w$& c #AD7A83", "x$& c #995E64", "y$& c #AC6A6E", "z$& c #BC7678", "A$& c #BE7679", "B$& c #A34351", "C$& c #A14353", "D$& c #9D444A", "E$& c #A94448", "F$& c #A84347", "G$& c #994847", "H$& c #894343", "I$& c #623530", "J$& c #3B2015", "K$& c #392423", "L$& c #392121", "M$& c #9B3B46", "N$& c #A36B76", "O$& c #A66E7B", "P$& c #AC7683", "Q$& c #AF7987", "R$& c #B17B8B", "S$& c #B37F95", "T$& c #B7839A", "U$& c #B8879C", "V$& c #AF8392", "W$& c #B9919C", "X$& c #C09CA8", "Y$& c #C4A5B4", "Z$& c #B69CA9", "`$& c #BCA5B5", " %& c #D9C7D5", ".%& c #D9C9D6", "+%& c #F8ECF6", "@%& c #F6EAF4", "#%& c #E9E0E5", "$%& c #ECE3E8", "%%& c #CDC4C7", "&%& c #D2BFC5", "*%& c #CCB5BD", "=%& c #C5AEB6", "-%& c #C5ABB4", ";%& c #C1A6AF", ">%& c #BA9CA6", ",%& c #B6929E", "'%& c #B18B98", ")%& c #B28896", "!%& c #BB8F9E", "~%& c #C091A1", "{%& c #C292A2", "]%& c #D29FB0", "^%& c #D5A2B3", "/%& c #C0909E", "(%& c #C69CA6", "_%& c #C39BA3", ":%& c #C1969F", "<%& c #BC8D97", "[%& c #AA6A78", "}%& c #995D65", "|%& c #986167", "1%& c #8A595C", "2%& c #7C5455", "3%& c #694C50", "4%& c #5E4A4C", "5%& c #504144", "6%& c #4D474B", "7%& c #4B494C", "8%& c #454449", "9%& c #4A4B50", "0%& c #464B51", "a%& c #394046", "b%& c #30373F", "c%& c #2F383F", "d%& c #353E45", "e%& c #3A4147", "f%& c #38383A", "g%& c #272B2A", "h%& c #242A28", "i%& c #252B27", "j%& c #232925", "k%& c #0A130E", "l%& c #211112", "m%& c #5E1C20", "n%& c #621D20", "o%& c #621C1E", "p%& c #591E22", "q%& c #111516", "r%& c #161419", "s%& c #0A070E", "t%& c #1A1921", "u%& c #9A999F", "v%& c #D6D4D9", "w%& c #645F65", "x%& c #27181D", "y%& c #301B20", "z%& c #3D1F27", "A%& c #442128", "B%& c #7D4B57", "C%& c #864752", "D%& c #6E3935", "E%& c #6C3B37", "F%& c #633631", "G%& c #2F0E07", "H%& c #2C1E1E", "I%& c #534230", "J%& c #5C4841", "K%& c #766762", "L%& c #706855", "M%& c #5C513F", "N%& c #4B3E2D", "O%& c #322C14", "P%& c #2C240D", "Q%& c #3A2313", "R%& c #3E271F", "S%& c #412D24", "T%& c #3E2D25", "U%& c #2C0D12", "V%& c #2C0910", "W%& c #431E25", "X%& c #83585F", "Y%& c #8E5F67", "Z%& c #A17076", "`%& c #9F686D", " && c #9E5D61", ".&& c #BD7579", "+&& c #B4676F", "@&& c #A95962", "#&& c #AA495A", "$&& c #A64858", "%&& c #A44658", "&&& c #9F484E", "*&& c #A84548", "=&& c #AA4549", "-&& c #9E4A4A", ";&& c #6B3B37", ">&& c #100D06", ",&& c #1F0E04", "'&& c #A04355", ")&& c #A04759", "!&& c #A35060", "~&& c #A25565", "{&& c #A25A68", "]&& c #A36B78", "^&& c #A26C79", "/&& c #A36D7A", "(&& c #A46E7C", "_&& c #AA727D", ":&& c #B17C8C", "<&& c #B58092", "[&& c #B78294", "}&& c #B8849A", "|&& c #B6859B", "1&& c #B8879D", "2&& c #BC8BA1", "3&& c #BD93A1", "4&& c #BC96A1", "5&& c #BE9AA6", "6&& c #C4A8B6", "7&& c #B29AA7", "8&& c #B29DAC", "9&& c #EADCE9", "0&& c #FAF4F8", "a&& c #EAE4E8", "b&& c #BDB7B9", "c&& c #7B7172", "d&& c #B1A0A6", "e&& c #B29DA4", "f&& c #B69FA7", "g&& c #BFA5AE", "h&& c #C2A7B0", "i&& c #BA94A1", "j&& c #B88E9C", "k&& c #B98999", "l&& c #C794A5", "m&& c #D09BAD", "n&& c #BB8897", "o&& c #BE949E", "p&& c #C299A1", "q&& c #BF919B", "r&& c #B07885", "s&& c #AC707C", "t&& c #AB6B79", "u&& c #9B5F69", "v&& c #965E67", "w&& c #946166", "x&& c #8C5E61", "y&& c #7E5456", "z&& c #704E4F", "A&& c #444547", "B&& c #404447", "C&& c #3D4246", "D&& c #3F494B", "E&& c #3C454A", "F&& c #313C42", "G&& c #2B353E", "H&& c #303A43", "I&& c #353F48", "J&& c #363F44", "K&& c #333738", "L&& c #202924", "M&& c #1D2822", "N&& c #202B25", "O&& c #1C2721", "P&& c #1B261E", "Q&& c #1D241D", "R&& c #1A211A", "S&& c #0F0E13", "T&& c #09140E", "U&& c #1F1516", "V&& c #201617", "W&& c #301B1A", "X&& c #5A181A", "Y&& c #5A181C", "Z&& c #5C1A1E", "`&& c #591C21", " *& c #100F17", ".*& c #15151F", "+*& c #787880", "@*& c #CED1D8", "#*& c #A4A5AA", "$*& c #4D4C52", "%*& c #33262D", "&*& c #422D36", "**& c #40222C", "=*& c #482430", "-*& c #6E4450", ";*& c #875765", ">*& c #824854", ",*& c #8B3D3B", "'*& c #6C2626", ")*& c #6C2F2E", "!*& c #1D2124", "~*& c #1A1E21", "{*& c #513A2A", "]*& c #705446", "^*& c #74615D", "/*& c #897B7B", "(*& c #A4A597", "_*& c #A7A898", ":*& c #A9AA9A", "<*& c #AAA7A2", "[*& c #312B13", "}*& c #302811", "|*& c #412C2B", "1*& c #422328", "2*& c #39191E", "3*& c #3E1A1E", "4*& c #461F24", "5*& c #4B2125", "6*& c #5E3136", "7*& c #73444A", "8*& c #7A484B", "9*& c #A46465", "0*& c #B36E73", "a*& c #B0696F", "b*& c #B0656C", "c*& c #B5656E", "d*& c #B4616B", "e*& c #AC5661", "f*& c #AC4E5E", "g*& c #AA4C5C", "h*& c #A14A50", "i*& c #A7474B", "j*& c #A24647", "k*& c #A14D4D", "l*& c #8F4441", "m*& c #7B3C37", "n*& c #6F3D36", "o*& c #583028", "p*& c #210D02", "q*& c #241206", "r*& c #40180E", "s*& c #A96F7B", "t*& c #AC727E", "u*& c #B07C89", "v*& c #B37E8E", "w*& c #BC8D9F", "x*& c #BE91A5", "y*& c #C194A8", "z*& c #C398AB", "A*& c #C59CAC", "B*& c #BC98A6", "C*& c #B795A3", "D*& c #C2A3B2", "E*& c #C8ACBA", "F*& c #AE9CAA", "G*& c #C2B4C1", "H*& c #EBDFEB", "I*& c #FBF1FA", "J*& c #F7F0F8", "K*& c #EFEAEE", "L*& c #E9E5E6", "M*& c #C7B8BD", "N*& c #C4AFB4", "O*& c #C0A9B1", "P*& c #C1A8AE", "Q*& c #BDA2AB", "R*& c #B799A1", "S*& c #B7939D", "T*& c #B08692", "U*& c #BF93A2", "V*& c #C294A1", "W*& c #DCA9BA", "X*& c #CC9CAA", "Y*& c #BB919D", "Z*& c #C59AA4", "`*& c #C595A1", " =& c #BE8A97", ".=& c #B57C8B", "+=& c #AD707F", "@=& c #A56B79", "#=& c #886166", "$=& c #7D5A5E", "%=& c #6B4E50", "&=& c #3B3235", "*=& c #39373A", "==& c #3D3D3F", "-=& c #434446", ";=& c #45494A", ">=& c #434949", ",=& c #3E4346", "'=& c #373F41", ")=& c #384244", "!=& c #3A4446", "~=& c #343F43", "{=& c #2B363A", "]=& c #343D42", "^=& c #333B3E", "/=& c #323637", "(=& c #222824", "_=& c #18211C", ":=& c #18221A", "<=& c #281517", "[=& c #2A1719", "}=& c #2D1719", "|=& c #422321", "1=& c #59191A", "2=& c #571718", "3=& c #59181C", "4=& c #591B1E", "5=& c #17161B", "6=& c #444549", "7=& c #747577", "8=& c #4E4F51", "9=& c #343031", "0=& c #483137", "a=& c #3F2026", "b=& c #401B23", "c=& c #673943", "d=& c #82505B", "e=& c #703936", "f=& c #2A0E0B", "g=& c #281A1A", "h=& c #664A3C", "i=& c #8E7C7A", "j=& c #ABAB9F", "k=& c #ADADA1", "l=& c #9C9A9B", "m=& c #4D493E", "n=& c #311F11", "o=& c #3D1315", "p=& c #734140", "q=& c #804A48", "r=& c #9F6766", "s=& c #9E6262", "t=& c #DC9498", "u=& c #D5888E", "v=& c #C27178", "w=& c #BA646D", "x=& c #AA525E", "y=& c #AA4C5A", "z=& c #A34553", "A=& c #A64B5A", "B=& c #A24C4F", "C=& c #9C4345", "D=& c #A34B4A", "E=& c #A14947", "F=& c #964943", "G=& c #924E45", "H=& c #793F34", "I=& c #462111", "J=& c #1B0A02", "K=& c #331F16", "L=& c #431C1D", "M=& c #441D1E", "N=& c #090803", "O=& c #0A0603", "P=& c #211006", "Q=& c #36140B", "R=& c #6F282E", "S=& c #73232C", "T=& c #721F27", "U=& c #811922", "V=& c #8B1A1E", "W=& c #831C20", "X=& c #841D21", "Y=& c #891C22", "Z=& c #8B1C23", "`=& c #8C1A22", " -& c #8B1921", ".-& c #881920", "+-& c #891A21", "@-& c #8C1F25", "#-& c #8E2127", "$-& c #943038", "%-& c #963540", "&-& c #A26C7A", "*-& c #A26E7B", "=-& c #A36E7E", "--& c #A36D7B", ";-& c #B27A87", ">-& c #B78591", ",-& c #C1919D", "'-& c #B78B98", ")-& c #AF8591", "!-& c #AF8694", "~-& c #B892A1", "{-& c #C39DAC", "]-& c #C39FAD", "^-& c #BE99AA", "/-& c #AF8A9C", "(-& c #C59FB4", "_-& c #B998AB", ":-& c #CCB1C2", "<-& c #B9A4B3", "[-& c #A797A4", "}-& c #A195A1", "|-& c #BFB5BE", "1-& c #F5F2F9", "2-& c #E3E1E6", "3-& c #DAD9DE", "4-& c #ECECEE", "5-& c #F2F2F4", "6-& c #C9B5B7", "7-& c #AD969C", "8-& c #BEA5A9", "9-& c #CEB0B8", "0-& c #C3A4AA", "a-& c #B9959F", "b-& c #B68E99", "c-& c #BD919E", "d-& c #C498A5", "e-& c #BF93A0", "f-& c #B78D99", "g-& c #BE909D", "h-& c #C491A0", "i-& c #B87F90", "j-& c #B1768A", "k-& c #B07589", "l-& c #A56E81", "m-& c #9A6A7A", "n-& c #936A78", "o-& c #82626D", "p-& c #68535A", "q-& c #5E5256", "r-& c #585256", "s-& c #47464B", "t-& c #494E52", "u-& c #2C353A", "v-& c #4C555A", "w-& c #394247", "x-& c #3B4547", "y-& c #465052", "z-& c #353D40", "A-& c #333B3D", "B-& c #343C3E", "C-& c #353A3D", "D-& c #333939", "E-& c #2F3535", "F-& c #303435", "G-& c #343537", "H-& c #0B0708", "I-& c #040902", "J-& c #050A03", "K-& c #000903", "L-& c #000C08", "M-& c #0C180E", "N-& c #0E1A10", "O-& c #36191B", "P-& c #3E1E21", "Q-& c #402023", "R-& c #69695F", "S-& c #625F56", "T-& c #3F2E27", "U-& c #643235", "V-& c #75373A", "W-& c #612F28", "X-& c #602F2A", "Y-& c #61342E", "Z-& c #59302A", "`-& c #4B382A", " ;& c #5F432E", ".;& c #503426", "+;& c #4E3427", "@;& c #7C645A", "#;& c #947B74", "$;& c #9E9C9D", "%;& c #787870", "&;& c #6A685C", "*;& c #3F1516", "=;& c #5A2D28", "-;& c #7C4A49", ";;& c #824F4C", ">;& c #7F4544", ",;& c #AE7071", "';& c #E6A4A6", ");& c #E9A2A6", "!;& c #CC7F85", "~;& c #D28188", "{;& c #D07A83", "];& c #C06972", "^;& c #B45A64", "/;& c #B35861", "(;& c #B85B66", "_;& c #BB5E69", ":;& c #A74A5C", "<;& c #AC5162", "[;& c #A8565C", "};& c #A34E4B", "|;& c #A14945", "1;& c #98433E", "2;& c #9B4B44", "3;& c #984F46", "4;& c #814336", "5;& c #4D2412", "6;& c #301001", "7;& c #1E0A01", "8;& c #401C1C", "9;& c #090A02", "0;& c #0A0A02", "a;& c #64272F", "b;& c #6B232F", "c;& c #6F212E", "d;& c #73202A", "e;& c #791C27", "f;& c #7F1924", "g;& c #84161F", "h;& c #87161C", "i;& c #8B181F", "j;& c #8A191D", "k;& c #851C23", "l;& c #891B24", "m;& c #8D1B25", "n;& c #8E1A25", "o;& c #8D1924", "p;& c #8B1923", "q;& c #8A1B24", "r;& c #8C1D26", "s;& c #8D1F28", "t;& c #952D34", "u;& c #953139", "v;& c #963641", "w;& c #AD6772", "x;& c #A16B79", "y;& c #A26F7E", "z;& c #A16D7A", "A;& c #B47E8B", "B;& c #B78390", "C;& c #B88894", "D;& c #BA8C97", "E;& c #B48A94", "F;& c #B08893", "G;& c #AC8892", "H;& c #BC9CA7", "I;& c #BD9DAA", "J;& c #C8A5BB", "K;& c #B390A8", "L;& c #C4A3B8", "M;& c #CEB1C5", "N;& c #BCA3B6", "O;& c #BDA8B9", "P;& c #BBADBA", "Q;& c #A99FAA", "R;& c #BEB7BF", "S;& c #DCD9E0", "T;& c #EEEDF3", "U;& c #E7E6EC", "V;& c #EEEFF3", "W;& c #E2E0E3", "X;& c #DBC8CA", "Y;& c #CEB8BB", "Z;& c #C4ABAF", "`;& c #C2A5AA", " >& c #C2A3A9", ".>& c #BF9CA3", "+>& c #B9949C", "@>& c #B18992", "#>& c #BC919B", "$>& c #B98E98", "%>& c #BC929C", "&>& c #BF959F", "*>& c #BF95A1", "=>& c #C195A2", "->& c #C18E9F", ";>& c #C28D9F", ">>& c #BC8598", ",>& c #A27385", "'>& c #906779", ")>& c #826271", "!>& c #735D69", "~>& c #685C66", "{>& c #76737A", "]>& c #86898E", "^>& c #838C91", "/>& c #4F5C62", "(>& c #24333A", "_>& c #2C3941", ":>& c #47545C", "<>& c #3F4A50", "[>& c #394448", "}>& c #3D464B", "|>& c #2E383A", "1>& c #34393C", "2>& c #353B3B", "3>& c #363A3B", "4>& c #343837", "5>& c #080607", "6>& c #0A0607", "7>& c #060B04", "8>& c #060D05", "9>& c #010C04", "0>& c #11190E", "a>& c #1E110B", "b>& c #3C1A1B", "c>& c #411A1D", "d>& c #441D20", "e>& c #4A2024", "f>& c #4C2226", "g>& c #601C1D", "h>& c #141004", "i>& c #605A4C", "j>& c #4C342A", "k>& c #4F2E27", "l>& c #6D2F30", "m>& c #522A22", "n>& c #512B22", "o>& c #4F2A22", "p>& c #523F31", "q>& c #624B3B", "r>& c #644330", "s>& c #674431", "t>& c #634231", "u>& c #603F2E", "v>& c #5E433A", "w>& c #6A514A", "x>& c #7A635D", "y>& c #8C756F", "z>& c #AD9893", "A>& c #B5A39F", "B>& c #45312A", "C>& c #482C28", "D>& c #3A1011", "E>& c #3E1513", "F>& c #5A2C2C", "G>& c #B47677", "H>& c #BE7C7E", "I>& c #BB7377", "J>& c #C87B81", "K>& c #D07F85", "L>& c #CD787F", "M>& c #C56B74", "N>& c #BD646A", "O>& c #B75C65", "P>& c #B0555E", "Q>& c #B25665", "R>& c #AF5561", "S>& c #AB555E", "T>& c #B15C61", "U>& c #AB5659", "V>& c #A44C4B", "W>& c #A94F4E", "X>& c #A54A47", "Y>& c #9E453F", "Z>& c #A14C45", "`>& c #9E5147", " ,& c #864738", ".,& c #703B29", "+,& c #562B18", "@,& c #200C03", "#,& c #1B0E05", "$,& c #200E04", "%,& c #281006", "&,& c #5F2029", "*,& c #69232D", "=,& c #72252D", "-,& c #79222A", ";,& c #7D151C", ">,& c #7E1116", ",,& c #86171D", "',& c #87191C", "),& c #821D21", "!,& c #8E1A23", "~,& c #8D1B23", "{,& c #8C1D24", "],& c #993944", "^,& c #A16E7D", "/,& c #A06C79", "(,& c #AA6D7C", "_,& c #B17986", ":,& c #B88692", "<,& c #BB8F9C", "[,& c #BA909C", "},& c #B8909B", "|,& c #B28E98", "1,& c #B08C98", "2,& c #B1909B", "3,& c #B797A2", "4,& c #BE9EAB", "5,& c #CCA9BF", "6,& c #AD8BA3", "7,& c #C1A1B6", "8,& c #BFA4B7", "9,& c #B8A1B3", "0,& c #BAA8B8", "a,& c #A99BA8", "b,& c #B6ACB7", "c,& c #D8D3DA", "d,& c #E3E0E7", "e,& c #EDEEF2", "f,& c #F2F3F7", "g,& c #E7E5E8", "h,& c #E1D6DA", "i,& c #E2D2D5", "j,& c #D9C6CA", "k,& c #CDB6BC", "l,& c #C5AAB1", "m,& c #C1A3AB", "n,& c #BB9AA3", "o,& c #B08891", "p,& c #BB919B", "q,& c #C196A0", "r,& c #B68B94", "s,& c #BF919E", "t,& c #AE7E8C", "u,& c #B0808E", "v,& c #B48192", "w,& c #A67588", "x,& c #9F7384", "y,& c #936C7E", "z,& c #7F5F6E", "A,& c #705866", "B,& c #685863", "C,& c #6D636E", "D,& c #898890", "E,& c #5A676F", "F,& c #25343B", "G,& c #243139", "H,& c #45525A", "I,& c #485359", "J,& c #3C474B", "K,& c #293335", "L,& c #313639", "M,& c #35393A", "N,& c #333736", "O,& c #1E1A0F", "P,& c #4C1E21", "Q,& c #512024", "R,& c #542126", "S,& c #553A33", "T,& c #57362F", "U,& c #58312C", "V,& c #5D2B2A", "W,& c #652929", "X,& c #4E3224", "Y,& c #54382C", "Z,& c #5A3F36", "`,& c #7D665E", " '& c #A38E89", ".'& c #AD9A96", "+'& c #92918D", "@'& c #271D11", "#'& c #4A3931", "$'& c #4B3730", "%'& c #462F29", "&'& c #462D28", "*'& c #482B27", "='& c #3B1514", "-'& c #370707", ";'& c #834546", ">'& c #A86668", ",'& c #BB6C71", "''& c #CC7A7E", ")'& c #DD888D", "!'& c #DC8387", "~'& c #C0676B", "{'& c #A2474E", "]'& c #B65866", "^'& c #B95F69", "/'& c #B86167", "('& c #BE686B", "_'& c #BA6261", ":'& c #AE5453", "<'& c #AF5451", "['& c #AE4F4B", "}'& c #A64942", "|'& c #A44D46", "1'& c #9D4F43", "2'& c #894538", "3'& c #773F2E", "4'& c #61341F", "5'& c #210D04", "6'& c #422422", "7'& c #050A06", "8'& c #070906", "9'& c #121409", "0'& c #1F0C05", "a'& c #521B20", "b'& c #60232A", "c'& c #6D282D", "d'& c #75292D", "e'& c #7A1316", "f'& c #8A1B22", "g'& c #8E1C24", "h'& c #9C424E", "i'& c #A75563", "j'& c #AF6974", "k'& c #AA6876", "l'& c #AB6E7D", "m'& c #A4707D", "n'& c #B27E8A", "o'& c #BB8D98", "p'& c #C69AA7", "q'& c #C29AA5", "r'& c #BF99A4", "s'& c #BC98A2", "t'& c #B2929D", "u'& c #B698A2", "v'& c #C09FB4", "w'& c #C2A0B8", "x'& c #AB90A3", "y'& c #D0B9CB", "z'& c #C2B0C0", "A'& c #CBC1CC", "B'& c #F3F0F7", "C'& c #F4F5F9", "D'& c #F1F2F6", "E'& c #F1EFF4", "F'& c #CCBBC1", "G'& c #D5C2C8", "H'& c #C1A6AD", "I'& c #B2939B", "J'& c #B4909A", "K'& c #C499A3", "L'& c #B98E97", "M'& c #BA8A96", "N'& c #B28290", "O'& c #AB7B89", "P'& c #A97B88", "Q'& c #9B717F", "R'& c #916B7A", "S'& c #8C6A7A", "T'& c #7B5F6D", "U'& c #6D5764", "V'& c #685865", "W'& c #665B69", "X'& c #7F7F89", "Y'& c #8F939E", "Z'& c #8A939C", "`'& c #59666E", " )& c #334249", ".)& c #2F3C44", "+)& c #46535B", "@)& c #4E595F", "#)& c #485357", "$)& c #2A3436", "%)& c #2B3033", "&)& c #2E3434", "*)& c #313534", "=)& c #0D0709", "-)& c #0C0608", ";)& c #080703", ">)& c #4C2021", ",)& c #532225", "')& c #531C21", "))& c #551C22", "!)& c #561E21", "~)& c #542223", "{)& c #513833", "])& c #533632", "^)& c #572B28", "/)& c #3C1F17", "()& c #4D3020", "_)& c #4D3022", ":)& c #4A2D1F", "<)& c #462A1E", "[)& c #4C3225", "})& c #634B41", "|)& c #AE9B95", "1)& c #857A74", "2)& c #6E635D", "3)& c #584E45", "4)& c #381414", "5)& c #360C0D", "6)& c #62302F", "7)& c #733B3A", "8)& c #8C4A4B", "9)& c #954D4E", "0)& c #C97877", "a)& c #D07C7C", "b)& c #B66061", "c)& c #B95C66", "d)& c #C46970", "e)& c #C66D71", "f)& c #CD7476", "g)& c #C86E6D", "h)& c #BD5F5D", "i)& c #BA5B55", "j)& c #B6534E", "k)& c #AD4C45", "l)& c #A84B44", "m)& c #9C483D", "n)& c #894133", "o)& c #7C412F", "p)& c #693923", "q)& c #472411", "r)& c #452624", "s)& c #442825", "t)& c #060C08", "u)& c #050B07", "v)& c #060805", "w)& c #341211", "x)& c #851E22", "y)& c #881B21", "z)& c #8F1D25", "A)& c #8E1F26", "B)& c #9A404C", "C)& c #A14B58", "D)& c #AE6672", "E)& c #AB6776", "F)& c #AB6D7C", "G)& c #A66D7C", "H)& c #A77380", "I)& c #A57281", "J)& c #AC7481", "K)& c #AD7785", "L)& c #B68694", "M)& c #B98D9A", "N)& c #C89EAA", "O)& c #C09AA7", "P)& c #C39FAB", "Q)& c #C0A0AD", "R)& c #BA9CA8", "S)& c #BC9EAA", "T)& c #C1A2B1", "U)& c #C6A5BA", "V)& c #C9A9C0", "W)& c #CBAEC2", "X)& c #B79EB1", "Y)& c #DCC7D8", "Z)& c #CDBCCC", "`)& c #D2CAD5", " !& c #F2EFF6", ".!& c #E8E7ED", "+!& c #EFEEF4", "@!& c #F3F4F8", "#!& c #F0EFF4", "$!& c #F7F0F7", "%!& c #DED3D9", "&!& c #D5C4CC", "*!& c #D5C0C9", "=!& c #C3A9B2", "-!& c #B5949D", ";!& c #BB9097", ">!& c #BA8F96", ",!& c #BA8C96", "'!& c #BD8B97", ")!& c #BA8894", "!!& c #B58591", "~!& c #AD818E", "{!& c #9C7683", "]!& c #8A6A75", "^!& c #816571", "/!& c #7F6975", "(!& c #6C5C67", "_!& c #655B66", ":!& c #68626E", "~& c #B3818D", ",~& c #B78795", "'~& c #BE94A0", ")~& c #B8929D", "!~& c #BC98A4", "~~& c #C6A8B4", "{~& c #C5A9B7", "]~& c #B292A9", "^~& c #C9AEC1", "/~& c #CBB2C5", "(~& c #C3AEBF", "_~& c #C6B5C5", ":~& c #B8ACB8", "<~& c #C7BFCA", "[~& c #ECE7EE", "}~& c #E2DFE6", "|~& c #E2E1E7", "1~& c #F0EFF5", "2~& c #EAE9EE", "3~& c #E0DBE1", "4~& c #E6DBE3", "5~& c #D2C5CE", "6~& c #C8B1BB", "7~& c #C3A8B1", "8~& c #B6909B", "9~& c #BD959E", "0~& c #BF969E", "a~& c #B88D94", "b~& c #B4878E", "c~& c #B4808C", "d~& c #B2808C", "e~& c #A17984", "f~& c #896974", "g~& c #725B65", "h~& c #685862", "i~& c #665F67", "j~& c #68656E", "k~& c #646770", "l~& c #6B6F7A", "m~& c #6A707C", "n~& c #646A78", "o~& c #666978", "p~& c #575D6B", "q~& c #435059", "r~& c #54636A", "s~& c #505D65", "t~& c #525D63", "u~& c #576266", "v~& c #4A5358", "w~& c #333D3F", "x~& c #24292C", "y~& c #272D2D", "z~& c #0F050D", "A~& c #0B0509", "B~& c #4F312F", "C~& c #4C2224", "D~& c #4B191A", "E~& c #220E03", "F~& c #321E1F", "G~& c #301E1E", "H~& c #311D1F", "I~& c #4C3527", "J~& c #472F25", "K~& c #7E6A63", "L~& c #95827C", "M~& c #A4918B", "N~& c #786F6A", "O~& c #665B55", "P~& c #4F453B", "Q~& c #4C382F", "R~& c #432C24", "S~& c #422B23", "T~& c #422E27", "U~& c #260704", "V~& c #2B0502", "W~& c #6F3A34", "X~& c #863B35", "Y~& c #93443F", "Z~& c #9B4844", "`~& c #B15256", " {& c #BA5E5F", ".{& c #B85D5C", "+{& c #BF6461", "@{& c #C2635D", "#{& c #BC5953", "${& c #BB544D", "%{& c #B64D47", "&{& c #B0483F", "*{& c #AA483F", "={& c #9D4338", "-{& c #8B3E2E", ";{& c #83422E", ">{& c #6B3721", ",{& c #411B08", "'{& c #220C01", "){& c #050B0B", "!{& c #030C09", "~{& c #010E07", "{{& c #140D15", "]{& c #0A1310", "^{& c #88191F", "/{& c #89181E", "({& c #8B1A20", "_{& c #942C33", ":{& c #932E34", "<{& c #942F35", "[{& c #93333E", "}{& c #A55160", "|{& c #AC6575", "1{& c #AC7382", "2{& c #B07A88", "3{& c #AF7A8A", "4{& c #AA7585", "5{& c #AA7180", "6{& c #AF7685", "7{& c #B17B89", "8{& c #B58593", "9{& c #B68D9B", "0{& c #C19FAD", "a{& c #CDADBA", "b{& c #C9ABB7", "c{& c #BCA0AC", "d{& c #BDA1AF", "e{& c #C8ACBB", "f{& c #C9ACC0", "g{& c #B396AC", "h{& c #C0A7BA", "i{& c #C8B1C3", "j{& c #B8A6B6", "k{& c #C3B5C4", "l{& c #D7CDD8", "m{& c #D4CCD7", "n{& c #DFDAE1", "o{& c #DEDBE2", "p{& c #F1F0F6", "q{& c #F6F5FA", "r{& c #F2F1F6", "s{& c #E8E7EC", "t{& c #D9D6DD", "u{& c #E4DDE5", "v{& c #D6CBD3", "w{& c #D0C0CA", "x{& c #D4BFC8", "y{& c #CBB1BA", "z{& c #BC9EA8", "A{& c #B6929C", "B{& c #C09BA3", "C{& c #C69EA6", "D{& c #B88F95", "E{& c #B58C92", "F{& c #B58C90", "G{& c #B58A91", "H{& c #B17F8A", "I{& c #AA7A86", "J{& c #9E7480", "K{& c #8F6E77", "L{& c #62555C", "M{& c #57555A", "N{& c #555A5E", "O{& c #636C71", "P{& c #626F75", "Q{& c #6A7881", "R{& c #687681", "S{& c #5D6773", "T{& c #5D6474", "U{& c #606676", "V{& c #555C6C", "W{& c #404D56", "X{& c #5B6870", "Y{& c #55626A", "Z{& c #576268", "`{& c #505B5F", " ]& c #3E474C", ".]& c #323C3E", "+]& c #282E2E", "@]& c #0C070D", "#]& c #0D060D", "$]& c #0D060E", "%]& c #0A050B", "&]& c #291717", "*]& c #473430", "=]& c #4D3130", "-]& c #41171B", ";]& c #3A0C0F", ">]& c #3D0C10", ",]& c #3C0E10", "']& c #3B0F10", ")]& c #371110", "!]& c #28170D", "~]& c #1E1005", "{]& c #5D4A43", "]]& c #4F3B32", "^]& c #432F24", "/]& c #4A3427", "(]& c #493224", "_]& c #4B3327", ":]& c #483129", "<]& c #544039", "[]& c #67534C", "}]& c #77645D", "|]& c #86736D", "1]& c #BDAFAC", "2]& c #BBB0AE", "3]& c #B5ACAD", "4]& c #A29CA0", "5]& c #A39A9F", "6]& c #6A6054", "7]& c #443027", "8]& c #4B392F", "9]& c #4E2C23", "0]& c #773129", "a]& c #A54A49", "b]& c #A64B48", "c]& c #AB5149", "d]& c #B1534B", "e]& c #B14C44", "f]& c #B24A41", "g]& c #B34840", "h]& c #B0453D", "i]& c #AD483E", "j]& c #A14538", "k]& c #8D4030", "l]& c #84432F", "m]& c #492725", "n]& c #211517", "o]& c #231417", "p]& c #201114", "q]& c #1E1214", "r]& c #1D0E11", "s]& c #1D1113", "t]& c #020B0A", "u]& c #000B07", "v]& c #000D06", "w]& c #090504", "x]& c #070604", "y]& c #0D1613", "z]& c #111715", "A]& c #88171D", "B]& c #912C32", "C]& c #96323A", "D]& c #97363F", "E]& c #A65866", "F]& c #AB6474", "G]& c #AF7584", "H]& c #A56F7D", "I]& c #AA7482", "J]& c #B4808D", "K]& c #B68392", "L]& c #BC929E", "M]& c #B58F9C", "N]& c #CBABB8", "O]& c #C9ADB9", "P]& c #B69CA7", "Q]& c #B89EAB", "R]& c #C7ACBB", "S]& c #CCB1C4", "T]& c #DBBFD5", "U]& c #C3ACBE", "V]& c #BFAABB", "W]& c #D0BFCF", "X]& c #D5C7D6", "Y]& c #E8DEE9", "Z]& c #FAF4FE", "`]& c #E4E1E8", " ^& c #E9E6ED", ".^& c #EDECF2", "+^& c #D4D3DB", "@^& c #CFCAD1", "#^& c #DED4DD", "$^& c #E8DBE4", "%^& c #DECAD5", "&^& c #BCA1AA", "*^& c #C6A2AC", "=^& c #CEA9B1", "-^& c #C5A0A7", ";^& c #B99199", ">^& c #B79095", ",^& c #BC9399", "'^& c #BE909B", ")^& c #9E7A86", "!^& c #8F747D", "~^& c #7C6D74", "{^& c #6A656B", "]^& c #5E6367", "^^& c #5A686B", "/^& c #596C70", "(^& c #5D7277", "_^& c #687C85", ":^& c #657781", "<^& c #536370", "[^& c #515D6B", "}^& c #555C6E", "|^& c #4C5363", "1^& c #414E57", "2^& c #4E5D64", "3^& c #58656D", "4^& c #5A656B", "5^& c #465155", "6^& c #313A3F", "7^& c #2A2F32", "8^& c #2A3030", "9^& c #09080E", "0^& c #08070D", "a^& c #2B1215", "b^& c #412122", "c^& c #371013", "d^& c #2D0307", "e^& c #2C0206", "f^& c #2B0405", "g^& c #290706", "h^& c #260A06", "i^& c #210E07", "j^& c #1F1209", "k^& c #1D1508", "l^& c #241A10", "m^& c #372123", "n^& c #362022", "o^& c #6C5952", "p^& c #69564F", "q^& c #544037", "r^& c #503A2F", "s^& c #543E33", "t^& c #543D2F", "u^& c #715F5B", "v^& c #8F7D79", "w^& c #BCB1AF", "x^& c #9E979E", "y^& c #3F3130", "z^& c #4C2A21", "A^& c #713127", "B^& c #712D22", "C^& c #923A36", "D^& c #9F4841", "E^& c #AA5048", "F^& c #B0524A", "G^& c #AF473E", "H^& c #AC3F38", "I^& c #B3483E", "J^& c #BA554B", "K^& c #AC5043", "L^& c #7B3A28", "M^& c #5F2B16", "N^& c #492A25", "O^& c #321E20", "P^& c #331D20", "Q^& c #351C20", "R^& c #331A1E", "S^& c #2F191C", "T^& c #2F161A", "U^& c #2D171A", "V^& c #30171B", "W^& c #2E181B", "X^& c #2A1417", "Y^& c #2D1A1C", "Z^& c #251214", "`^& c #090A0E", " /& c #040A0A", "./& c #010A07", "+/& c #000B05", "@/& c #010C06", "#/& c #0E090F", "$/& c #0F0A11", "%/& c #0F0C13", "&/& c #1D1007", "*/& c #32140A", "=/& c #A55361", "-/& c #A55765", ";/& c #B16A7A", ">/& c #A46474", ",/& c #B77E8D", "'/& c #B27C8C", ")/& c #A7717F", "!/& c #AE7989", "~/& c #B07D8C", "{/& c #B9909E", "]/& c #C1A1AE", "^/& c #BCA2AF", "//& c #BCA4B1", "(/& c #C5ADBB", "_/& c #E8CFE4", ":/& c #C7B0C2", "(& c #A84C41", ",(& c #A84138", "'(& c #A4382E", ")(& c #B84D43", "!(& c #C76258", "~(& c #B3594E", "{(& c #8C3E31", "](& c #55220D", "^(& c #391C20", "/(& c #3A1B20", "((& c #3B1B20", "_(& c #38191E", ":(& c #37171C", "<(& c #34151A", "[(& c #331B1B", "}(& c #2D1515", "|(& c #110708", "1(& c #0C0A0F", "2(& c #1E1108", "3(& c #A24B5B", "4(& c #AD6676", "5(& c #A76777", "6(& c #B47B8A", "7(& c #B2798A", "8(& c #AD7F8C", "9(& c #C09CAA", "0(& c #BA9AA7", "a(& c #BFA5B2", "b(& c #BFA9B5", "c(& c #C7B1BE", "d(& c #CAB3C5", "e(& c #CCB5C9", "f(& c #AC97A8", "g(& c #AB99A9", "h(& c #D3C5D4", "i(& c #D5CAD8", "j(& c #CDC5D0", "k(& c #EBE8F1", "l(& c #EAE8ED", "m(& c #E9E8ED", "n(& c #DDDAE1", "o(& c #D8D1D8", "p(& c #D7C7D1", "q(& c #C9B2BC", "r(& c #C7ACB5", "s(& c #CFAFBA", "t(& c #C3A4AC", "u(& c #B08F98", "v(& c #C3A2A9", "w(& c #A98795", "x(& c #8D6E7D", "y(& c #7F6976", "z(& c #8C7F89", "A(& c #8C8992", "B(& c #747D82", "C(& c #627579", "D(& c #637C80", "E(& c #638084", "F(& c #547376", "G(& c #57747A", "H(& c #5B767F", "I(& c #4E616F", "J(& c #425261", "K(& c #475363", "L(& c #4B5463", "M(& c #4F5C65", "N(& c #4C5B62", "O(& c #525F67", "P(& c #556066", "Q(& c #323B40", "R(& c #1E282A", "S(& c #23282B", "T(& c #222828", "U(& c #04090C", "V(& c #040C0F", "W(& c #060E11", "X(& c #050D0F", "Y(& c #451D1E", "Z(& c #1B221B", "`(& c #1B0605", " _& c #1C0706", "._& c #0F1A0A", "+_& c #101E0D", "@_& c #12200F", "#_& c #191D0F", "$_& c #493534", "%_& c #635049", "&_& c #6D5A53", "*_& c #513D36", "=_& c #513D34", "-_& c #533F36", ";_& c #554138", ">_& c #5D463E", ",_& c #BBADAC", "'_& c #9A97A0", ")_& c #9B969A", "!_& c #726B59", "~_& c #45362F", "{_& c #3A2216", "]_& c #3E2113", "^_& c #542315", "/_& c #5C261A", "(_& c #6E2B22", "__& c #9C4438", ":_& c #A5443B", "<_& c #A54036", "[_& c #A43931", "}_& c #B54D44", "|_& c #BF5D54", "1_& c #B1594D", "2_& c #934A3B", "3_& c #743725", "4_& c #4F1F0B", "5_& c #2E0A00", "6_& c #4B2A23", "7_& c #3F1B1F", "8_& c #441D22", "9_& c #401C20", "0_& c #431C21", "a_& c #411D21", "b_& c #421B20", "c_& c #3E1A1C", "d_& c #391B1B", "e_& c #200C0D", "f_& c #180809", "g_& c #16070A", "h_& c #12070B", "i_& c #11080B", "j_& c #6B2E29", "k_& c #771E24", "l_& c #932F37", "m_& c #9F4D5B", "n_& c #A35261", "o_& c #A85F70", "p_& c #A96574", "q_& c #AE6B7C", "r_& c #B27585", "s_& c #B07786", "t_& c #AF7687", "u_& c #A57080", "v_& c #AF7C8B", "w_& c #B28999", "x_& c #B58F9E", "y_& c #B898A5", "z_& c #B397A5", "A_& c #BCA4B2", "B_& c #BEA8B5", "C_& c #C0AAB7", "D_& c #C3AEBD", "E_& c #C0ABBC", "F_& c #BAA5B8", "G_& c #A795A5", "H_& c #AD9CAC", "I_& c #CFC3D1", "J_& c #E1D9E6", "K_& c #E4DEE8", "L_& c #EDEBF0", "M_& c #E9E9EB", "N_& c #DCDADF", "O_& c #DDD7DB", "P_& c #E7DCE2", "Q_& c #DCCDD4", "R_& c #C8B4BD", "S_& c #C3AEB7", "T_& c #CDB6C0", "U_& c #BEA4AF", "V_& c #CFB3BF", "W_& c #CAAFB8", "X_& c #A78C95", "Y_& c #B69BA4", "Z_& c #C4A9B2", "`_& c #997F8A", " :& c #7C6474", ".:& c #7C6778", "+:& c #837584", "@:& c #8A8490", "#:& c #83868F", "$:& c #717E86", "%:& c #697E83", "&:& c #6A868A", "*:& c #607D81", "=:& c #537275", "-:& c #58737A", ";:& c #475D68", ">:& c #40525E", ",:& c #4A5865", "':& c #505C6A", "):& c #55636C", "!:& c #4D5C63", "~:& c #4F5C64", "{:& c #495458", "]:& c #2D363B", "^:& c #141E20", "/:& c #202528", "(:& c #040C0E", "_:& c #050F10", "::& c #061011", "<:& c #060E10", "[:& c #060B0E", "}:& c #060604", "|:& c #140907", "1:& c #101E0F", "2:& c #102212", "3:& c #122313", "4:& c #1A2014", "5:& c #483634", "6:& c #5E4A49", "7:& c #6A5751", "8:& c #65524C", "9:& c #53403A", "0:& c #4C3932", "a:& c #4F3C35", "b:& c #68544D", "c:& c #7C6962", "d:& c #B9ABAB", "e:& c #BBADAD", "f:& c #9C99A0", "g:& c #9A989D", "h:& c #493830", "i:& c #4B3A33", "j:& c #4B3C35", "k:& c #4A3B34", "l:& c #481A0D", "m:& c #661E12", "n:& c #7D2D22", "o:& c #90392F", "p:& c #9F4338", "q:& c #A8463B", "r:& c #AC453C", "s:& c #AC453E", "t:& c #A34239", "u:& c #A0493F", "v:& c #A1594B", "w:& c #874E3D", "x:& c #512411", "y:& c #210200", "z:& c #1E0C02", "A:& c #4E2521", "B:& c #492821", "C:& c #3B1F1C", "D:& c #210D0F", "E:& c #18080B", "F:& c #16070C", "G:& c #14080C", "H:& c #6B2E2D", "I:& c #6E282A", "J:& c #6E2226", "K:& c #712027", "L:& c #772026", "M:& c #9E4251", "N:& c #A45B6C", "O:& c #B37081", "P:& c #B57786", "Q:& c #AF7989", "R:& c #A77282", "S:& c #AD7D8B", "T:& c #B08493", "U:& c #B38997", "V:& c #B88F9F", "W:& c #BA96A4", "X:& c #B08E9C", "Y:& c #B1939F", "Z:& c #B599A7", "`:& c #BAA2AF", " <& c #BEA9B8", ".<& c #C6B1C2", "+<& c #C3B0C3", "@<& c #CCBECD", "#<& c #DACEDC", "$<& c #ECE4F1", "%<& c #F4EEF8", "&<& c #EAE9F1", "*<& c #F4F3F9", "=<& c #F5F6FB", "-<& c #F5F4F9", ";<& c #EFEDF2", "><& c #EDEBEE", ",<& c #E3DDDF", "'<& c #EDE2E6", ")<& c #CDBEC5", "!<& c #B8A7AF", "~<& c #CBB6BF", "{<& c #BAA3AD", "]<& c #C8B0BD", "^<& c #AE96A3", "/<& c #A7919D", "(<& c #816D79", "_<& c #6B5D6E", ":<& c #7A6F80", "<<& c #858190", "[<& c #848693", "}<& c #7C848F", "|<& c #76848D", "1<& c #74888F", "2<& c #748D92", "3<& c #637F83", "4<& c #557276", "5<& c #567178", "6<& c #577077", "7<& c #485F67", "8<& c #465862", "9<& c #505E69", "0<& c #52606B", "a<& c #526069", "b<& c #49585F", "c<& c #424F57", "d<& c #465157", "e<& c #3D484C", "f<& c #283136", "g<& c #162022", "h<& c #010A09", "i<& c #030B0D", "j<& c #49170E", "k<& c #4A1D17", "l<& c #141A10", "m<& c #141E13", "n<& c #142215", "o<& c #142417", "p<& c #172516", "q<& c #1B2318", "r<& c #564744", "s<& c #61524F", "t<& c #665452", "u<& c #695753", "v<& c #624F49", "w<& c #584740", "x<& c #6A5753", "y<& c #594743", "z<& c #6C5A56", "A<& c #7E6C68", "B<& c #C6B4B2", "C<& c #A9AAA5", "D<& c #A7A9A4", "E<& c #4A3730", "F<& c #3E1C10", "G<& c #40150C", "H<& c #44150B", "I<& c #632317", "J<& c #642214", "K<& c #662112", "L<& c #7D2E21", "M<& c #943A2F", "N<& c #A6453C", "O<& c #AF4A42", "P<& c #A7443E", "Q<& c #92352D", "R<& c #903E33", "S<& c #9F5B4E", "T<& c #875242", "U<& c #1D0C02", "V<& c #321517", "W<& c #2E1417", "X<& c #291014", "Y<& c #230D10", "Z<& c #1F0A0F", "`<& c #1D0A0E", " [& c #1C090D", ".[& c #111518", "+[& c #632528", "@[& c #682328", "#[& c #6E232A", "$[& c #75242A", "%[& c #8F2B33", "&[& c #9E404E", "*[& c #9D4555", "=[& c #A25869", "-[& c #B67384", ";[& c #B47787", ">[& c #AE7B8C", ",[& c #AE7E8E", "'[& c #B38798", ")[& c #B896A4", "![& c #AB8B9A", "~[& c #B195A3", "{[& c #BA9FAE", "][& c #BDA5B3", "^[& c #BDA7B4", "/[& c #BFABB7", "([& c #C5B3C1", "_[& c #CCBACA", ":[& c #CFBED0", "<[& c #DECDDD", "[[& c #DED2E0", "}[& c #D6CBD9", "|[& c #DED8E4", "1[& c #E5E4EC", "2[& c #F3F2F7", "3[& c #E6E2E1", "4[& c #E3DADB", "5[& c #E4DADB", "6[& c #B9A8B0", "7[& c #CFBBC4", "8[& c #C3AFBA", "9[& c #BDA9B4", "0[& c #BDA9B5", "a[& c #B3A1AF", "b[& c #92808E", "c[& c #766474", "d[& c #716475", "e[& c #747081", "f[& c #7D7E90", "g[& c #838697", "h[& c #7B8292", "i[& c #76828E", "j[& c #788993", "k[& c #7A8E97", "l[& c #758C94", "m[& c #667F86", "n[& c #566F76", "o[& c #526B70", "p[& c #52696F", "q[& c #4B5F66", "r[& c #4B5E65", "s[& c #4E5F67", "t[& c #495760", "u[& c #4B5A61", "v[& c #435259", "w[& c #3A474F", "x[& c #334048", "y[& c #323D43", "z[& c #2E393D", "A[& c #293237", "B[& c #242E30", "C[& c #010506", "D[& c #030708", "E[& c #0C0606", "F[& c #571B10", "G[& c #46170F", "H[& c #141A0E", "I[& c #131B10", "J[& c #131A12", "K[& c #1D251A", "L[& c #3E3530", "M[& c #635552", "N[& c #655754", "O[& c #5A4846", "P[& c #60514C", "Q[& c #695A55", "R[& c #574543", "S[& c #50413C", "T[& c #A8A9A3", "U[& c #A8A7A2", "V[& c #9B9B93", "W[& c #9C9A9F", "X[& c #341E11", "Y[& c #43291C", "Z[& c #41160D", "`[& c #5C2214", " }& c #5F2011", ".}& c #601B0C", "+}& c #6C2012", "@}& c #963A2F", "#}& c #9E3D36", "$}& c #A74640", "%}& c #943A32", "&}& c #893B31", "*}& c #8D4D41", "=}& c #6D3C2D", "-}& c #240D00", ";}& c #1A0C03", ">}& c #4A2721", ",}& c #35181C", "'}& c #2F1419", ")}& c #260F15", "!}& c #240D13", "~}& c #230E13", "{}& c #101116", "]}& c #0E1118", "^}& c #0E1116", "/}& c #561F24", "(}& c #68252E", "_}& c #9D4958", ":}& c #A14E5E", "<}& c #B47182", "[}& c #B47586", "}}& c #B47E8E", "|}& c #B38494", "1}& c #B18594", "2}& c #B28798", "3}& c #B6909F", "4}& c #B593A1", "5}& c #B696A5", "6}& c #BFA4B3", "7}& c #B9A3B0", "8}& c #B7A3AF", "9}& c #C9B7C5", "0}& c #D1BFCD", "a}& c #C7B6C8", "b}& c #C8B7C9", "c}& c #D1C3D2", "d}& c #D3C7D5", "e}& c #C9BECC", "f}& c #CDC7D3", "g}& c #DDDAE3", "h}& c #E3E2EA", "i}& c #F0F1F6", "j}& c #F1F2F7", "k}& c #EAE5E9", "l}& c #E4DFDC", "m}& c #F7F2EE", "n}& c #F1E9E6", "o}& c #D1C5C5", "p}& c #CFC0C3", "q}& c #C9B8BE", "r}& c #C8B7BF", "s}& c #C1ADB8", "t}& c #B4A2B0", "u}& c #A998A8", "v}& c #837586", "w}& c #685B6D", "x}& c #746D7F", "y}& c #828598", "z}& c #81899C", "A}& c #7C8799", "B}& c #748191", "C}& c #748493", "D}& c #7B8B9A", "E}& c #798B97", "F}& c #70848F", "G}& c #647881", "H}& c #556972", "I}& c #50646B", "J}& c #50656A", "K}& c #4A5D63", "L}& c #495C62", "M}& c #46595F", "N}& c #394A51", "O}& c #404F56", "P}& c #3D4C53", "Q}& c #37444C", "R}& c #2D3A42", "S}& c #283339", "T}& c #273236", "U}& c #313B3D", "V}& c #2F3437", "W}& c #060608", "X}& c #561C10", "Y}& c #481911", "Z}& c #4C1A19", "`}& c #4B1918", " |& c #151B0F", ".|& c #141C11", "+|& c #413C36", "@|& c #453E38", "#|& c #59504B", "$|& c #655A56", "%|& c #645552", "&|& c #5E4F4C", "*|& c #5D4E4B", "=|& c #635451", "-|& c #BAACAC", ";|& c #928D79", ">|& c #382214", ",|& c #351F11", "'|& c #331D10", ")|& c #3C291B", "!|& c #562111", "~|& c #5B2113", "{|& c #591E0E", "]|& c #5A1808", "^|& c #62190A", "/|& c #81271E", "(|& c #9D3E38", "_|& c #903932", ":|& c #83362E", "<|& c #814338", "[|& c #2C0B00", "}|& c #271201", "||& c #180B02", "1|& c #412017", "2|& c #3B1C21", "3|& c #371A1F", "4|& c #33181D", "5|& c #30151A", "6|& c #2C1619", "7|& c #220F13", "8|& c #13121A", "9|& c #0F121B", "0|& c #0D1017", "a|& c #0D1114", "b|& c #4A191D", "c|& c #581F26", "d|& c #62232C", "e|& c #6B2229", "f|& c #8F272E", "g|& c #93323D", "h|& c #983A48", "i|& c #9E4B5B", "j|& c #9E505E", "k|& c #9D5364", "l|& c #AF6A7C", "m|& c #B27282", "n|& c #B17283", "o|& c #AF8090", "p|& c #B48E9D", "q|& c #B792A3", "r|& c #B797A6", "s|& c #C1A5B3", "t|& c #C0A5B4", "u|& c #B7A1AE", "v|& c #B7A2B1", "w|& c #BFADBB", "x|& c #C8B6C4", "y|& c #C9B9C6", "z|& c #BAA9BB", "A|& c #B6A5B7", "B|& c #B9ABBA", "C|& c #C8BDCB", "D|& c #D4CCD9", "E|& c #D9D3DF", "F|& c #E0DDE6", "G|& c #EDE8EE", "H|& c #EBE7E8", "I|& c #E7E2DE", "J|& c #FFFAF4", "K|& c #F4EBE6", "L|& c #C0B4B4", "M|& c #C9BABD", "N|& c #C8B7BD", "O|& c #C2B1B9", "P|& c #C6B5BF", "Q|& c #C6B4C0", "R|& c #BCABBB", "S|& c #A193A4", "T|& c #86798B", "U|& c #817687", "V|& c #867D90", "W|& c #848194", "X|& c #8691A5", "Y|& c #7F90A4", "Z|& c #7A8B9D", "`|& c #798A9C", " 1& c #7E8DA0", ".1& c #8090A0", "+1& c #778796", "@1& c #6C7C89", "#1& c #60717B", "$1& c #576872", "%1& c #566970", "&1& c #54676D", "*1& c #45585C", "=1& c #405357", "-1& c #304347", ";1& c #314249", ">1& c #34434A", ",1& c #263135", "'1& c #2A3338", ")1& c #2F1619", "!1& c #4E1A1C", "~1& c #4D191B", "{1& c #4C181A", "]1& c #4B1719", "^1& c #4A1819", "/1& c #4C1C1C", "(1& c #4E1C1D", "_1& c #121C11", ":1& c #121C13", "<1& c #2B1F23", "[1& c #291820", "}1& c #1D1216", "|1& c #1A1F19", "11& c #484540", "21& c #4A4541", "31& c #46413B", "41& c #48413B", "51& c #564F49", "61& c #67605A", "71& c #5E504F", "81& c #5A4A4A", "91& c #584A49", "01& c #6B5D5C", "a1& c #746665", "b1& c #8C7E7D", "c1& c #A8A9A1", "d1& c #342112", "e1& c #4C3428", "f1& c #492D22", "g1& c #4F2016", "h1& c #522113", "i1& c #591B0E", "j1& c #5E1A0D", "k1& c #8A3530", "l1& c #7C2F29", "m1& c #743128", "n1& c #7B453B", "o1& c #260900", "p1& c #220F00", "q1& c #3B2623", "r1& c #522B26", "s1& c #432A23", "t1& c #442022", "u1& c #421F23", "v1& c #3F1C20", "w1& c #3B1B1E", "x1& c #381A1C", "y1& c #261214", "z1& c #220F11", "A1& c #12121A", "B1& c #0D1015", "C1& c #0C1013", "D1& c #2C0C0D", "E1& c #3E1519", "F1& c #4E1F25", "G1& c #612328", "H1& c #953843", "I1& c #993B49", "J1& c #9A4655", "K1& c #AA7788", "L1& c #A97989", "M1& c #C097A7", "N1& c #C09BAC", "O1& c #BC9CAB", "P1& c #C0A1B0", "Q1& c #C0A4B3", "R1& c #BCA1B0", "S1& c #B7A5B3", "T1& c #B19FAF", "U1& c #AF9EAE", "V1& c #CFC3CF", "W1& c #F3E8F6", "X1& c #EFECF5", "Y1& c #F6F7FC", "Z1& c #F7F8FD", "`1& c #F3F1F6", " 2& c #EFEBEC", ".2& c #EBE4DE", "+2& c #F0E9E1", "@2& c #DED5CE", "#2& c #B5A8AF", "$2& c #BEB1BB", "%2& c #CCBECB", "&2& c #C4B6C5", "*2& c #C3B6C8", "=2& c #9A8EA2", "-2& c #675E73", ";2& c #837B90", ">2& c #AAA5BB", ",2& c #9192A6", "'2& c #8895A8", ")2& c #7F91A5", "!2& c #7E91A2", "~2& c #8495A7", "{2& c #899AAA", "]2& c #8496A4", "^2& c #6B7B88", "/2& c #5D6E78", "(2& c #5A6B73", "_2& c #617077", ":2& c #5B6D71", "<2& c #4D5C61", "[2& c #445658", "}2& c #3F5153", "|2& c #324144", "12& c #2A373D", "22& c #2F3A40", "32& c #313A41", "42& c #262E31", "52& c #252D2F", "62& c #252A2D", "72& c #2A1416", "82& c #3A1A1B", "92& c #5B1F21", "02& c #4F181B", "a2& c #4E171A", "b2& c #4E1818", "c2& c #4D1619", "d2& c #4D1717", "e2& c #4A1618", "f2& c #4A1716", "g2& c #28191E", "h2& c #43423D", "i2& c #484742", "j2& c #514E49", "k2& c #45423B", "l2& c #4F4A44", "m2& c #65605A", "n2& c #67625C", "o2& c #5C554F", "p2& c #635854", "q2& c #564B47", "r2& c #5D524E", "s2& c #6F6462", "t2& c #7C716F", "u2& c #A0979C", "v2& c #30250F", "w2& c #2E1D0B", "x2& c #5C4136", "y2& c #50332B", "z2& c #6B372C", "A2& c #794E45", "B2& c #26150B", "C2& c #522D27", "D2& c #44271F", "E2& c #43281F", "F2& c #391D1A", "G2& c #050B09", "H2& c #2A0D0F", "I2& c #371418", "J2& c #4B2228", "K2& c #8C282A", "L2& c #8A2126", "M2& c #903139", "N2& c #91323A", "O2& c #93363E", "P2& c #99505B", "Q2& c #A1626D", "R2& c #AF7986", "S2& c #B27789", "T2& c #BD92A3", "U2& c #CAA4B3", "V2& c #C7A3B1", "W2& c #CBABBA", "X2& c #CAABBA", "Y2& c #B89DAC", "Z2& c #B79FAD", "`2& c #AC94A2", " 3& c #BBA3B3", ".3& c #B69EAE", "+3& c #CAB5C4", "@3& c #E8D6E2", "#3& c #EEE2EE", "$3& c #EBE4EC", "%3& c #F9FDFF", "&3& c #FBFCFE", "*3& c #F8F8FA", "=3& c #F1EDEC", "-3& c #F9F2EA", ";3& c #C0B7BC", ">3& c #C7BDC6", ",3& c #D6CEDB", "'3& c #E3DAEB", ")3& c #D1CADC", "!3& c #B3AEC2", "~3& c #878499", "{3& c #77738A", "]3& c #9A98AE", "^3& c #B0AEC4", "/3& c #9297AB", "(3& c #7D8A9B", "_3& c #8294A2", ":3& c #8A9CAA", "<3& c #788A96", "[3& c #7D919A", "}3& c #778993", "|3& c #5B6E75", "13& c #63767C", "23& c #5E7074", "33& c #58676A", "43& c #526061", "53& c #4C5759", "63& c #444E50", "73& c #394345", "83& c #2C3135", "93& c #2D3236", "03& c #303338", "a3& c #313538", "b3& c #2D3134", "c3& c #1E2223", "d3& c #0B0603", "e3& c #0B0300", "f3& c #120806", "g3& c #120703", "h3& c #150802", "i3& c #1C0B04", "j3& c #57191A", "k3& c #5C1E1F", "l3& c #4A1E11", "m3& c #521C1C", "n3& c #393834", "o3& c #44443C", "p3& c #505048", "q3& c #656259", "r3& c #5E5A51", "s3& c #635C54", "t3& c #574E47", "u3& c #595049", "v3& c #5D544F", "w3& c #BBB1AF", "x3& c #A09A9C", "y3& c #514C39", "z3& c #413A28", "A3& c #39321F", "B3& c #342C15", "C3& c #593E35", "D3& c #543731", "E3& c #4E2E31", "F3& c #663B32", "G3& c #755047", "H3& c #4C3025", "I3& c #0F1815", "J3& c #0F1813", "K3& c #3D1D22", "L3& c #4D2428", "M3& c #8B2227", "N3& c #953840", "O3& c #9A444D", "P3& c #96505A", "Q3& c #9C5B63", "R3& c #A0626D", "S3& c #A9747E", "T3& c #AE7181", "U3& c #B6778A", "V3& c #B87B8D", "W3& c #BB8092", "X3& c #AB7688", "Y3& c #A97687", "Z3& c #BB8C9C", "`3& c #C89DAE", " 4& c #D6B1C2", ".4& c #D2B0C0", "+4& c #C0A0AF", "@4& c #C4A8B7", "#4& c #C2A7B6", "$4& c #B89CAB", "%4& c #AA8F9E", "&4& c #CDB9C5", "*4& c #E3D6E0", "=4& c #E4DAE3", "-4& c #F5F9FA", ";4& c #F9FDFE", ">4& c #EAE9E7", ",4& c #E8E1D9", "'4& c #E9E1D6", ")4& c #ECE3DC", "!4& c #CCC6CA", "~4& c #D1CBD5", "{4& c #C7C3D1", "]4& c #DAD6E7", "^4& c #C3C0D3", "/4& c #8B899E", "(4& c #817F95", "_4& c #A6A7BC", ":4& c #A2A4B9", "<4& c #CBD2E4", "[4& c #A3B1BE", "}4& c #9CAEB8", "|4& c #99ABB5", "14& c #899BA5", "24& c #71858C", "34& c #6C8087", "44& c #6D8287", "54& c #64797C", "64& c #65787C", "74& c #5D6F71", "84& c #526262", "94& c #4A5557", "04& c #444E4F", "a4& c #3F4749", "b4& c #3C4043", "c4& c #393D40", "d4& c #2F3034", "e4& c #2E2F33", "f4& c #110604", "g4& c #120401", "h4& c #160702", "i4& c #190801", "j4& c #1E0A03", "k4& c #240D05", "l4& c #371C13", "m4& c #591D1F", "n4& c #571B1D", "o4& c #561A1C", "p4& c #4F1716", "q4& c #36322F", "r4& c #46463C", "s4& c #54544A", "t4& c #646458", "u4& c #5D5B4F", "v4& c #5F5B50", "w4& c #5C554D", "x4& c #59524A", "y4& c #BCB5AF", "z4& c #847E70", "A4& c #3B3422", "B4& c #2A220D", "C4& c #2F2412", "D4& c #31200E", "E4& c #51362D", "F4& c #51362F", "G4& c #523531", "H4& c #523432", "I4& c #4F2D2E", "J4& c #643C34", "K4& c #6F4D44", "L4& c #4A2F26", "M4& c #492823", "N4& c #542F29", "O4& c #902F36", "P4& c #91343C", "Q4& c #9A4E58", "R4& c #9E626C", "S4& c #9F6571", "T4& c #A26D77", "U4& c #A5727B", "V4& c #A6707D", "W4& c #A96C7C", "X4& c #A67080", "Y4& c #A37081", "Z4& c #B58696", "`4& c #BB8FA0", " 5& c #C49BAB", ".5& c #D5AFBE", "+5& c #D1AFBD", "@5& c #BA9AA9", "#5& c #B596A5", "$5& c #C3A7B5", "%5& c #CCB0BE", "&5& c #B99FAC", "*5& c #AA929F", "=5& c #E5D5DF", "-5& c #E1D7DF", ";5& c #DBD6DC", ">5& c #EDEEF0", ",5& c #ECF0F1", "'5& c #F0F4F5", ")5& c #F8FCFD", "!5& c #EFF0F2", "~5& c #E6E5E3", "{5& c #E4DDD7", "]5& c #FBF4EE", "^5& c #BBB5B7", "/5& c #DFD8DF", "(5& c #D0CCDA", "_5& c #B2AEBD", ":5& c #9390A3", "<5& c #686779", "[5& c #7C7A8F", "}5& c #B2B3C7", "|5& c #ABAEC1", "15& c #A8ABBE", "25& c #DAE1F1", "35& c #A5B8BE", "45& c #8A9DA3", "55& c #63787D", "65& c #54696C", "75& c #5A6F72", "85& c #5D7273", "95& c #5F7374", "05& c #57696B", "a5& c #4A5A5A", "b5& c #414C4E", "c5& c #384043", "d5& c #303135", "e5& c #27282C", "f5& c #262729", "g5& c #110706", "h5& c #130707", "i5& c #1C0A08", "j5& c #531C1F", "k5& c #51191A", "l5& c #501819", "m5& c #4D1D11", "n5& c #1D1314", "o5& c #3E3A37", "p5& c #494941", "q5& c #59594F", "r5& c #6B6B61", "s5& c #5C5A4E", "t5& c #5D594E", "u5& c #5A5349", "v5& c #615A52", "w5& c #BFB8B2", "x5& c #301D0C", "y5& c #492E27", "z5& c #503230", "A5& c #4E2E2F", "B5& c #502D29", "C5& c #5B342D", "D5& c #60423A", "E5& c #8E252A", "F5& c #8D282E", "G5& c #974F5A", "H5& c #9B616D", "I5& c #A06873", "J5& c #B5788A", "K5& c #B4798B", "L5& c #B18292", "M5& c #AE8293", "N5& c #B68B9C", "O5& c #C8A2B1", "P5& c #CAA6B4", "Q5& c #B391A1", "R5& c #AC8C9B", "S5& c #B899A8", "T5& c #BFA3B1", "U5& c #BEA4B1", "V5& c #B19DA8", "W5& c #C9B9C3", "X5& c #BDB2BA", "Y5& c #BDB6BD", "Z5& c #EBEFF0", "`5& c #EFF3F4", " 6& c #F7FBFC", ".6& c #E9E9E9", "+6& c #F0EBE7", "@6& c #E5DED8", "#6& c #F0E8E6", "$6& c #F8F5FE", "%6& c #DFDDEA", "&6& c #8E8C9A", "*6& c #7C7B8B", "=6& c #8A8999", "-6& c #A7A9B8", ";6& c #B8BBCA", ">6& c #CED1E0", ",6& c #DFE2F1", "'6& c #D5DDE8", ")6& c #E2F1F6", "!6& c #D6E8EA", "~6& c #C6DADB", "{6& c #A5B9BA", "]6& c #7A8F90", "^6& c #6A7F80", "/6& c #677D7B", "(6& c #5F7372", "_6& c #506262", ":6& c #4C5C5C", "<6& c #455354", "[6& c #3E494B", "}6& c #394144", "|6& c #373C40", "16& c #363A3D", "26& c #35393C", "36& c #25262A", "46& c #202125", "56& c #100607", "66& c #130505", "76& c #150505", "86& c #190707", "96& c #4D1715", "06& c #442522", "a6& c #1F1313", "b6& c #37322F", "c6& c #4A4A42", "d6& c #5E5E54", "e6& c #6E6E64", "f6& c #5D564C", "g6& c #655E56", "h6& c #5D564E", "i6& c #564E41", "j6& c #492D2A", "k6& c #532B2B", "l6& c #4D302A", "m6& c #4D1B1C", "n6& c #270F0F", "o6& c #994954", "p6& c #984C56", "q6& c #954D58", "r6& c #9B5D68", "s6& c #9C606C", "t6& c #A06672", "u6& c #AB6E7E", "v6& c #AA6D7D", "w6& c #A86E7D", "x6& c #B17688", "y6& c #B08694", "z6& c #BF96A6", "A6& c #AF8F9C", "B6& c #B293A2", "C6& c #C7ABB7", "D6& c #D9BFCA", "E6& c #D0B9C3", "F6& c #C8B3BC", "G6& c #B7AAB1", "H6& c #C5BCC1", "I6& c #FFFAFE", "J6& c #EEEEF0", "K6& c #F6FAFB", "L6& c #F2F2F2", "M6& c #F5F1F0", "N6& c #E8E3E0", "O6& c #E9E3E5", "P6& c #D4CED2", "Q6& c #DDD6DD", "R6& c #514F5C", "S6& c #6B6A78", "T6& c #E2F2F1", "U6& c #DCEFEB", "V6& c #D0E5E0", "W6& c #B0C5C0", "X6& c #8DA19F", "Y6& c #809492", "Z6& c #6E8280", "`6& c #4F6361", " 7& c #3D504E", ".7& c #40504F", "+7& c #414F4F", "@7& c #404C4C", "#7& c #3C4447", "$7& c #313439", "%7& c #2F3035", "&7& c #1B1C20", "*7& c #0E0508", "=7& c #0F0408", "-7& c #100406", ";7& c #180606", ">7& c #1F0705", ",7& c #3B3633", "'7& c #3D3835", ")7& c #3C3835", "!7& c #42413C", "~7& c #4A4A40", "{7& c #626258", "]7& c #6D6D63", "^7& c #636357", "/7& c #59554A", "(7& c #676058", "_7& c #554B42", ":7& c #4C2B24", "<7& c #4B1B1B", "[7& c #511D1F", "}7& c #8F2A32", "|7& c #90333D", "17& c #9C5E6B", "27& c #A16571", "37& c #A66778", "47& c #A46777", "57& c #AC7787", "67& c #B3808F", "77& c #BA8FA0", "87& c #C9A0B0", "97& c #BB99A7", "07& c #B997A7", "a7& c #B1919E", "b7& c #AB8D99", "c7& c #C5AAB3", "d7& c #CBB1BC", "e7& c #BEA7B1", "f7& c #B39FA8", "g7& c #A7989F", "h7& c #B8ADB3", "i7& c #E4DEE2", "j7& c #E6E1E5", "k7& c #E7E7E9", "l7& c #F3F7F8", "m7& c #F7F8FA", "n7& c #EDE9EA", "o7& c #F8F2F4", "p7& c #F6F0F4", "q7& c #D6D1D7", "r7& c #BEBCC7", "s7& c #888892", "t7& c #5A5A66", "u7& c #F6FDFF", "v7& c #D2E3DD", "w7& c #C5D9D0", "x7& c #B6CAC1", "y7& c #9DB2A9", "z7& c #829790", "A7& c #728780", "B7& c #5B7069", "C7& c #394E49", "D7& c #344743", "E7& c #3B4B4A", "F7& c #424E4E", "G7& c #424C4D", "H7& c #3E4347", "I7& c #35383D", "J7& c #232428", "K7& c #1D1E22", "L7& c #191A1E", "M7& c #020C0B", "N7& c #06100F", "O7& c #11060A", "P7& c #12060A", "Q7& c #15060B", "R7& c #1B0709", "S7& c #290B09", "T7& c #3E261C", "U7& c #3E3936", "V7& c #4E4E46", "W7& c #64645A", "X7& c #616155", "Y7& c #665F57", "Z7& c #C3BCB6", "`7& c #9F9A9E", " 8& c #9E999D", ".8& c #887D79", "+8& c #776C66", "@8& c #635950", "#8& c #513534", "$8& c #5A3D3F", "%8& c #593B3D", "&8& c #583637", "*8& c #573031", "=8& c #4B2D25", "-8& c #492C24", ";8& c #482B23", ">8& c #4A191C", ",8& c #4C1A1D", "'8& c #521E22", ")8& c #511D21", "!8& c #1B1215", "~8& c #702829", "{8& c #8E1B22", "]8& c #8E313B", "^8& c #994753", "/8& c #964A56", "(8& c #9A525D", "_8& c #9C5865", ":8& c #9A5A68", "<8& c #A26471", "[8& c #A56776", "}8& c #A96A7B", "|8& c #A66979", "18& c #BA8A9A", "28& c #A77888", "38& c #BD97A6", "48& c #B692A0", "58& c #B1919C", "68& c #C3A5AD", "78& c #C3B0B6", "88& c #CABBC0", "98& c #D0C5C9", "08& c #E4E4E6", "a8& c #F6F7F9", "b8& c #F8F9FD", "c8& c #F9F4FA", "d8& c #ABA9B4", "e8& c #676570", "f8& c #646470", "g8& c #D9E1E3", "h8& c #E9F3F2", "i8& c #D3DEDA", "j8& c #DEEFE5", "k8& c #B6CABE", "l8& c #9CB0A4", "m8& c #8EA296", "n8& c #485D54", "o8& c #3E534C", "p8& c #394C46", "q8& c #3E4E4B", "r8& c #414D4B", "s8& c #3E4847", "t8& c #383D40", "u8& c #303437", "v8& c #2B2C31", "w8& c #242529", "x8& c #000C0A", "y8& c #091312", "z8& c #17070A", "A8& c #1B080C", "B8& c #200B10", "C8& c #290F12", "D8& c #3B1311", "E8& c #3A3633", "F8& c #44413A", "G8& c #66635A", "H8& c #605E52", "I8& c #645D55", "J8& c #5B544C", "K8& c #9F9AA0", "L8& c #482E2D", "M8& c #61474A", "N8& c #5F4246", "O8& c #5A3C3E", "P8& c #573536", "Q8& c #543030", "R8& c #542C2A", "S8& c #4A2D25", "T8& c #451B1D", "U8& c #4D1C20", "V8& c #4F1E21", "W8& c #4F1C21", "X8& c #2F1A19", "Y8& c #9E5765", "Z8& c #9D5D6B", "`8& c #9E5E6C", " 9& c #A16171", ".9& c #AF6F7F", "+9& c #AF7081", "@9& c #AC7281", "#9& c #AB7283", "$9& c #AF7C8D", "%9& c #986878", "&9& c #9A6B7B", "*9& c #AC808F", "=9& c #B38899", "-9& c #B990A0", ";9& c #BFA0A8", ">9& c #BEA0A8", ",9& c #CFB8C0", "'9& c #CBB8BE", ")9& c #AFA0A5", "!9& c #BEB3B9", "~9& c #DFDADE", "{9& c #F7F4FB", "]9& c #ECE9F2", "^9& c #DCDAE5", "/9& c #65656F", "(9& c #1F1F2B", "_9& c #63666F", ":9& c #E6F1ED", "<9& c #F7FFFD", "[9& c #F7FFFB", "}9& c #E2F2E7", "|9& c #E2F2E5", "19& c #A1B3A5", "29& c #7C8E80", "39& c #738879", "49& c #54685C", "59& c #2D4336", "69& c #2A4034", "79& c #3D5148", "89& c #44554F", "99& c #3A4342", "09& c #2A2E31", "a9& c #1E1F23", "b9& c #1A1B1F", "c9& c #0C1713", "d9& c #04100E", "e9& c #010B0A", "f9& c #190608", "g9& c #1D070A", "h9& c #230A0E", "i9& c #2A0F14", "j9& c #321318", "k9& c #691515", "l9& c #681414", "m9& c #491814", "n9& c #4E4B44", "o9& c #524F46", "p9& c #57544B", "q9& c #5F5D51", "r9& c #625E53", "s9& c #5B544A", "t9& c #5C554B", "u9& c #625B53", "v9& c #5A534B", "w9& c #9E999F", "x9& c #594043", "y9& c #6E5457", "z9& c #745759", "A9& c #5E4040", "B9& c #4B2927", "C9& c #49302B", "D9& c #4A2D29", "E9& c #4D2B29", "F9& c #452820", "G9& c #491C21", "H9& c #3E2123", "I9& c #030E0A", "J9& c #180F14", "K9& c #190E14", "L9& c #801D22", "M9& c #8D2931", "N9& c #9F4B58", "O9& c #994F5E", "P9& c #995765", "Q9& c #945462", "R9& c #A26270", "S9& c #AA7C89", "T9& c #B98F9D", "U9& c #BB919F", "V9& c #B38B94", "W9& c #A78289", "X9& c #B9989F", "Y9& c #D4B5BB", "Z9& c #DCBEC6", "`9& c #C6ADB3", " 0& c #AC979C", ".0& c #BDACB2", "+0& c #E5D9DD", "@0& c #E4E2E7", "#0& c #ECEBF0", "$0& c #E7E8EC", "%0& c #E1DEE7", "&0& c #E6E3EE", "*0& c #E3E1EC", "=0& c #C2C0CD", "-0& c #686874", ";0& c #2D2D37", ">0& c #8F929B", ",0& c #DFE7EA", "'0& c #F6FFFD", ")0& c #EEF9F1", "!0& c #F1FEF4", "~0& c #EBF9EC", "{0& c #F5FFF8", "]0& c #D1E2D2", "^0& c #92A494", "/0& c #899B8D", "(0& c #718677", "_0& c #293D31", ":0& c #506459", "<0& c #3F5348", "[0& c #45564E", "}0& c #374641", "|0& c #2D3937", "10& c #2D3635", "20& c #2C3134", "30& c #24282B", "40& c #1F2024", "50& c #17181C", "60& c #110505", "70& c #1D090A", "80& c #230A0D", "90& c #290C10", "00& c #301013", "a0& c #39161A", "b0& c #451E23", "c0& c #251F1F", "d0& c #373330", "e0& c #3C3733", "f0& c #534E48", "g0& c #67635A", "h0& c #60594F", "i0& c #676056", "j0& c #9F999D", "k0& c #6E665B", "l0& c #5E4646", "m0& c #6E5558", "n0& c #6E5656", "o0& c #523633", "p0& c #553735", "q0& c #3D1F1F", "r0& c #3D1D1E", "s0& c #5F2124", "t0& c #861E25", "u0& c #A05969", "v0& c #9C5867", "w0& c #A0606E", "x0& c #AA707F", "y0& c #B07A8A", "z0& c #A97987", "A0& c #B08191", "B0& c #AF8390", "C0& c #B78C95", "D0& c #AC838B", "E0& c #A67D85", "F0& c #BE99A1", "G0& c #CAA7AE", "H0& c #C9AAB2", "I0& c #D6BFC7", "J0& c #D5C8CF", "K0& c #DFD6DB", "L0& c #BCB5BC", "M0& c #E5E3E8", "N0& c #DEDDE3", "O0& c #EDEBF6", "P0& c #CCCCD6", "Q0& c #4E4E5A", "R0& c #50525E", "S0& c #7C7F88", "T0& c #D9DEE4", "U0& c #E1E8EE", "V0& c #F6FFFA", "W0& c #EDFEEE", "X0& c #D8E9D9", "Y0& c #839386", "Z0& c #57675A", "`0& c #3E5042", " a& c #324438", ".a& c #213327", "+a& c #42564B", "@a& c #43544A", "#a& c #3F4E47", "$a& c #34403C", "%a& c #2B3632", "&a& c #2B3433", "*a& c #1E1D22", "=a& c #18191D", "-a& c #220A0A", ";a& c #290C0E", ">a& c #381416", ",a& c #4A1D20", "'a& c #232227", ")a& c #242328", "!a& c #45403A", "~a& c #615D54", "{a& c #69655C", "]a& c #575048", "^a& c #A1989D", "/a& c #A1969C", "(a& c #A19599", "_a& c #675D51", ":a& c #493632", "b& c #6C655B", ",b& c #645D53", "'b& c #6C655D", ")b& c #A2969A", "!b& c #675352", "~b& c #6F5B5A", "{b& c #604D47", "]b& c #4E2624", "^b& c #4C2927", "/b& c #382020", "(b& c #882029", "_b& c #871D27", ":b& c #9E5060", "c& c #881F26", ",c& c #9F5264", "'c& c #A65D6E", ")c& c #AE7888", "!c& c #AE7A87", "~c& c #A97278", "{c& c #AE767F", "]c& c #AC7781", "^c& c #AA7780", "/c& c #A87681", "(c& c #A57782", "_c& c #AC828E", ":c& c #C0A2AE", "d& c #9E4D5E", ",d& c #A15D6A", "'d& c #9E5F6A", ")d& c #A66C7B", "!d& c #AE7584", "~d& c #A77181", "{d& c #A86F78", "]d& c #A86C74", "^d& c #A56D78", "/d& c #A06A77", "(d& c #936572", "_d& c #764E59", ":d& c #A48290", "e& c #9D6371", ",e& c #A76E7D", "'e& c #A46B7A", ")e& c #9F6979", "!e& c #A3666D", "~e& c #A1646C", "{e& c #A2656D", "]e& c #96606D", "^e& c #9A6776", "/e& c #784E5A", "(e& c #9C7886", "_e& c #F4D6E2", ":e& c #F7DFEC", "f& c #2E191E", ",f& c #732729", "'f& c #8D2A2F", ")f& c #9F4C5C", "!f& c #9B4A5B", "~f& c #A15265", "{f& c #A45A6B", "]f& c #995967", "^f& c #955764", "/f& c #925662", "(f& c #985C68", "_f& c #A26876", ":f& c #A26A77", "g& c #372324", ",g& c #451B1F", "'g& c #471A21", ")g& c #481B20", "!g& c #471D21", "~g& c #471E24", "{g& c #482126", "]g& c #482124", "^g& c #452123", "/g& c #0E070E", "(g& c #963F48", "_g& c #9D4F5C", ":g& c #9C505D", "h& c #501C0F", ",h& c #5F5852", "'h& c #645D57", ")h& c #534C46", "!h& c #706963", "~h& c #B6B1AE", "{h& c #B7B2AF", "]h& c #564C43", "^h& c #331517", "/h& c #341618", "(h& c #27302F", "_h& c #1A2626", ":h& c #431A22", "i& c #3F3C35", ",i& c #524D47", "'i& c #615A54", ")i& c #655E58", "!i& c #685E55", "~i& c #5E544B", "{i& c #4C433A", "]i& c #3A2124", "^i& c #2D2121", "/i& c #222627", "(i& c #1E2326", "_i& c #1C2426", ":i& c #1D2528", "j& c #89262B", ",j& c #94353B", "'j& c #9C5462", ")j& c #A15A68", "!j& c #9E5A67", "~j& c #995667", "{j& c #975362", "]j& c #964D5E", "^j& c #8F484E", "/j& c #84474E", "(j& c #815056", "_j& c #805B62", ":j& c #735C64", "k& c #231D21", ",k& c #100B12", "'k& c #18151E", ")k& c #191820", "!k& c #1D1F2C", "~k& c #060A16", "{k& c #000311", "]k& c #060D1D", "^k& c #070E1E", "/k& c #030A1A", "(k& c #192032", "_k& c #3A4352", ":k& c #57616B", "l& c #0B0E1D", ",l& c #010717", "'l& c #37404F", ")l& c #5A6374", "!l& c #788192", "~l& c #AAB3C4", "{l& c #DDE6F5", "]l& c #F0FAFF", "^l& c #E4EEF7", "/l& c #E2ECF5", "(l& c #A8B5BD", "_l& c #A2AFB7", ":l& c #A0AAB3", "m& c #DDE7F3", ",m& c #D2DCE8", "'m& c #D0DAE6", ")m& c #9BA8AE", "!m& c #A3B0B6", "~m& c #9AA5AB", "{m& c #A5ACB6", "]m& c #C8CAC9", "^m& c #0F0400", "/m& c #383530", "(m& c #46413D", "_m& c #5E5955", ":m& c #6E6663", "n& c #C3CCDD", ",n& c #C0C9D8", "'n& c #CED7E6", ")n& c #94A1A7", "!n& c #919EA4", "~n& c #A6B3B9", "{n& c #9DAAB0", "]n& c #DBDCD7", "^n& c #531311", "/n& c #551412", "(n& c #6F6764", "_n& c #69615E", ":n& c #625A57", "o& c #C4CCDF", ",o& c #C5CEDF", "'o& c #C3CCDB", ")o& c #BDC6D5", "!o& c #A4AFB5", "~o& c #A0ABB1", "{o& c #D5D6D1", "]o& c #BBBAB5", "^o& c #4D4845", "/o& c #625D5A", "(o& c #69615F", "_o& c #675F5D", ":o& c #6B645E", "p& c #4E4C40", ",p& c #3F363B", "'p& c #6A6068", ")p& c #7B7179", "!p& c #7E777F", "~p& c #827A85", "{p& c #8F8792", "]p& c #938B98", "^p& c #908895", "/p& c #9397A3", "(p& c #A1A9B4", "_p& c #A0ABA7", ":p& c #ACB7AF", "q& c #908893", ",q& c #918E99", "'q& c #9195A0", ")q& c #98A1AA", "!q& c #9EA9A3", "~q& c #AAB4AC", "{q& c #AEBAB0", "]q& c #A8B2A7", "^q& c #A6B2A4", "/q& c #B7C2B4", "(q& c #C5D0C2", "_q& c #C5CFC4", ":q& c #D6E0D5", "r& c #2D3029", ",r& c #0C050C", "'r& c #0B060A", ")r& c #622C2C", "!r& c #89242A", "~r& c #902A37", "{r& c #922C3A", "]r& c #923540", "^r& c #954453", "/r& c #975D6B", "(r& c #724A53", "_r& c #513A42", ":r& c #574E53", "s& c #364041", ",s& c #34373C", "'s& c #2C2D32", ")s& c #232228", "!s& c #222328", "~s& c #13131B", "{s& c #14141C", "]s& c #0F1221", "^s& c #0D101F", "/s& c #090F1F", "(s& c #414757", "_s& c #ABB0C3", ":s& c #EAEFFF", "t& c #36353A", ",t& c #343338", "'t& c #302F34", ")t& c #542022", "!t& c #5D181D", "~t& c #11141D", "{t& c #121420", "]t& c #131521", "^t& c #141623", "/t& c #121524", "(t& c #000110", "_t& c #141728", ":t& c #3A3D4E", "u& c #282B30", ",u& c #2D2E33", "'u& c #323338", ")u& c #343539", "!u& c #333237", "~u& c #502326", "{u& c #562427", "]u& c #5A191D", "^u& c #2A303E", "/u& c #A2A8B6", "(u& c #F0F6FF", "_u& c #F7FDFF", ":u& c #F1F7FF", "v& c #4D3D48", ",v& c #524A57", "'v& c #51515D", ")v& c #515560", "!v& c #4D515C", "~v& c #444851", "{v& c #43434B", "]v& c #424146", "^v& c #252C32", "/v& c #2E353B", "(v& c #2F3438", "_v& c #2C2F34", ":v& c #2D2C31", "w& c #995459", ",w& c #915557", "'w& c #875258", ")w& c #794E55", "!w& c #63434E", "~w& c #513D48", "{w& c #4A424F", "]w& c #4D4D59", "^w& c #494F5D", "/w& c #505865", "(w& c #535965", "_w& c #47464E", ":w& c #3B3237", "x& c #09111C", ",x& c #121C28", "'x& c #111828", ")x& c #070916", "!x& c #191722", "~x& c #2F2933", "{x& c #736972", "]x& c #B2A5AE", "^x& c #B3A8B0", "/x& c #89878C", "(x& c #525358", "_x& c #0E0F14", ":x& c #10131A", "y& c #B0B5AF", ",y& c #C0C5BE", "'y& c #C7CDC3", ")y& c #767C72", "!y& c #11161A", "~y& c #091219", "{y& c #0D1721", "]y& c #091724", "^y& c #061626", "/y& c #0D1D2D", "(y& c #020F22", "_y& c #121D2F", ":y& c #090C1B", "z& c #4A2D27", ",z& c #4F393B", "'z& c #6B5B5E", ")z& c #746568", "!z& c #7F7377", "~z& c #8C8D92", "{z& c #B2B4AF", "]z& c #BFC2BB", "^z& c #D3D6CD", "/z& c #060F16", "(z& c #14202C", "_z& c #14202E", ":z& c #0A1A29", "A& c #696461", ",A& c #6D6562", "'A& c #827B73", ")A& c #B8B2B2", "!A& c #76715B", "~A& c #544A3E", "{A& c #482F28", "]A& c #602021", "^A& c #5E2224", "/A& c #5D2224", "(A& c #574143", "_A& c #624E50", ":A& c #685559", "B& c #041E2F", ",B& c #061822", "'B& c #121D1F", ")B& c #020806", "!B& c #989BA0", "~B& c #6E1C20", "{B& c #6F1D21", "]B& c #928F7C", "^B& c #79745E", "/B& c #4B3029", "(B& c #612122", "_B& c #422527", ":B& c #5C4346", "C& c #12233D", ",C& c #000F35", "'C& c #092652", ")C& c #1E4070", "!C& c #2B5386", "~C& c #356299", "{C& c #3D70A9", "]C& c #437AB3", "^C& c #457CB4", "/C& c #467BAD", "(C& c #41729D", "_C& c #2E597B", ":C& c #133550", "D& c #220F09", ",D& c #19121A", "'D& c #120F1A", ")D& c #151321", "!D& c #171628", "~D& c #0E0F23", "{D& c #14152A", "]D& c #1B1C31", "^D& c #08091E", "/D& c #0E0E26", "(D& c #3A3C51", "_D& c #D8E2EB", ":D& c #E0EBF1", "E& c #232E2A", ",E& c #4B2425", "'E& c #6E292C", ")E& c #8D2933", "!E& c #8E2A34", "~E& c #8E2D38", "{E& c #902C36", "]E& c #91353A", "^E& c #963C48", "/E& c #89434D", "(E& c #88474F", "_E& c #8B4953", ":E& c #704B52", "F& c #435D7E", ",F& c #4F78A4", "'F& c #346495", ")F& c #24588A", "!F& c #0E4679", "~F& c #002F65", "{F& c #00336A", "]F& c #003C72", "^F& c #00396E", "/F& c #002B5F", "(F& c #024272", "_F& c #25628F", ":F& c #39749C", "G& c #031624", ",G& c #0D1A22", "'G& c #121C1E", ")G& c #1B2527", "!G& c #131D1F", "~G& c #030B0E", "{G& c #222A2D", "]G& c #7B8084", "^G& c #97989D", "/G& c #99989E", "(G& c #9E9CA1", "_G& c #0D0200", ":G& c #761D23", "H& c #A6ABBF", ",H& c #E9EFFF", "'H& c #E2EAF5", ")H& c #FBFFFB", "!H& c #DAE0D6", "~H& c #52554C", "{H& c #020500", "]H& c #0A1322", "^H& c #03132A", "/H& c #05254B", "(H& c #28517D", "_H& c #4D7DAD", ":H& c #4E83B7", "I& c #953340", ",I& c #95444B", "'I& c #8F4752", ")I& c #8E525A", "!I& c #5E373C", "~I& c #2D161E", "{I& c #3C2D34", "]I& c #473C42", "^I& c #5D5459", "/I& c #3D3E40", "(I& c #4D5756", "_I& c #8F9998", ":I& c #687271", "J& c #16588C", ",J& c #15588F", "'J& c #125893", ")J& c #1963A0", "!J& c #1C6AAA", "~J& c #1768A9", "{J& c #1669AB", "]J& c #1B6EB0", "^J& c #2074B4", "/J& c #2879B8", "(J& c #2171AE", "_J& c #16629C", ":J& c #1E69A0", "K& c #1B6CAD", ",K& c #3585C4", "'K& c #2672AE", ")K& c #246CA6", "!K& c #2A6DA4", "~K& c #3674A7", "{K& c #306899", "]K& c #467AA9", "^K& c #5283AE", "/K& c #1A4265", "(K& c #071C31", "_K& c #101C2A", ":K& c #101823", "L& c #404646", ",L& c #4A504E", "'L& c #3B413F", ")L& c #232C29", "!L& c #641C20", "~L& c #631E23", "{L& c #5E2025", "]L& c #252026", "^L& c #1B1B27", "/L& c #202231", "(L& c #06091C", "_L& c #121830", ":L& c #2E354F", "M& c #126BAF", ",M& c #1269AC", "'M& c #1A6BAA", ")M& c #1767A4", "!M& c #226BA0", "~M& c #37759C", "{M& c #427796", "]M& c #2B5A78", "^M& c #00223B", "/M& c #001A2E", "(M& c #041F30", "_M& c #011422", ":M& c #202C38", "N& c #256298", ",N& c #3471A7", "'N& c #4885BB", ")N& c #2F5F8D", "!N& c #1F3655", "~N& c #0F1C2F", "{N& c #0E192D", "]N& c #151D30", "^N& c #020919", "/N& c #08101D", "(N& c #565C68", "_N& c #592026", ":N& c #5F2028", "O& c #86585B", ",O& c #2E1115", "'O& c #36272E", ")O& c #423841", "!O& c #635C63", "~O& c #848287", "{O& c #737375", "]O& c #525655", "^O& c #5E6261", "/O& c #5B2024", "(O& c #5C1F24", "_O& c #641D23", ":O& c #661E22", "P& c #254A76", ",P& c #265583", "'P& c #2B6392", ")P& c #1E5C8B", "!P& c #205D8C", "~P& c #2A6796", "{P& c #3D77A7", "]P& c #568EC1", "^P& c #6598CF", "/P& c #5C8DC7", "(P& c #3E6FAA", "_P& c #2B5D9A", ":P& c #245C99", "Q& c #267BBE", ",Q& c #1B6BA6", "'Q& c #226B98", ")Q& c #1F6086", "!Q& c #6098B9", "~Q& c #5D92B1", "{Q& c #72A5C2", "]Q& c #86B9D8", "^Q& c #5B90B0", "/Q& c #4F87AC", "(Q& c #346F97", "_Q& c #1D5884", ":Q& c #2C6793", "R& c #6D6B78", ",R& c #D1CDDB", "'R& c #E2E0ED", ")R& c #CDD3E1", "!R& c #BAC8D5", "~R& c #A6BECA", "{R& c #A9C1CD", "]R& c #A0AEB9", "^R& c #74817A", "/R& c #0E1B12", "(R& c #000D04", "_R& c #152218", ":R& c #0E180F", "S& c #051121", ",S& c #2A303C", "'S& c #858793", ")S& c #A69FA6", "!S& c #91868A", "~S& c #87787B", "{S& c #836E6D", "]S& c #7A6260", "^S& c #691E23", "/S& c #681C20", "(S& c #821B1F", "_S& c #811A1E", ":S& c #841B20", "T& c #682024", ",T& c #6F3939", "'T& c #141720", ")T& c #131522", "!T& c #333649", "~T& c #A2A5B6", "{T& c #F2F8FF", "]T& c #DDE3EF", "^T& c #E2E9F3", "/T& c #CDDED8", "(T& c #DCE7E3", "_T& c #D8E3DB", ":T& c #656F66", "U& c #0F6598", ",U& c #2779AB", "'U& c #3B89B7", ")U& c #3983AA", "!U& c #4786A7", "~U& c #073A55", "{U& c #001228", "]U& c #041B2D", "^U& c #020A1D", "/U& c #E8E7F7", "(U& c #B7C4D4", "_U& c #A7BDCB", ":U& c #ACC2CF", "V& c #75705C", ",V& c #5B1619", "'V& c #5A1518", ")V& c #5B141A", "!V& c #5C1519", "~V& c #3D1314", "{V& c #380F0D", "]V& c #5D3631", "^V& c #76514B", "/V& c #74534C", "(V& c #644743", "_V& c #2F1F22", ":V& c #1A131B", "W& c #6892AB", ",W& c #497896", "'W& c #265777", ")W& c #1E4F6F", "!W& c #305F7D", "~W& c #44708B", "{W& c #395D73", "]W& c #203344", "^W& c #0E1A26", "/W& c #000B17", "(W& c #08121C", "_W& c #383C47", ":W& c #868992", "X& c #0B1821", ",X& c #13242E", "'X& c #8997A2", ")X& c #EEF5FF", "!X& c #F3F9FF", "~X& c #D5DBE7", "{X& c #CFDEDB", "]X& c #DCE6E5", "^X& c #F1FCF8", "/X& c #B5C0BA", "(X& c #2A342C", "_X& c #021013", ":X& c #01131D", "Y& c #B9C5D1", ",Y& c #2F3A36", "'Y& c #5A2424", ")Y& c #6C2A2C", "!Y& c #9A474F", "~Y& c #9E555E", "{Y& c #9B545C", "]Y& c #A66A76", "^Y& c #A1727A", "/Y& c #A37C81", "(Y& c #87696B", "_Y& c #041117", ":Y& c #01121A", "Z& c #236FAD", ",Z& c #1364A3", "'Z& c #1F70A8", ")Z& c #2270A1", "!Z& c #4289B5", "~Z& c #417FA4", "{Z& c #00213E", "]Z& c #021A36", "^Z& c #0B1731", "/Z& c #51536A", "(Z& c #C6CBE1", "_Z& c #E5EBFF", ":Z& c #E5F1FF", "`& c #354856", ",`& c #172A30", "'`& c #0B1D1D", ")`& c #0C1816", "!`& c #13181C", "~`& c #00020C", "{`& c #060E25", "]`& c #071738", "^`& c #001944", "/`& c #2E5387", "(`& c #5283BD", "_`& c #316DAB", ":`& c #226CAD", "<`& c #1D6EAD", "[`& c #1A6AA5", "}`& c #2774A8", "|`& c #2E78A5", "1`& c #4182AA", "2`& c #447A9E", "3`& c #113A58", "4`& c #001633", "5`& c #000D27", "6`& c #00031D", "7`& c #373B54", "8`& c #A5AAC0", "9`& c #E0E6FC", "0`& c #D7E2F6", "a`& c #CBD7E7", "b`& c #000904", "c`& c #A04B52", "d`& c #A04E54", "e`& c #9D545B", "f`& c #9D565E", "g`& c #A15B65", "h`& c #9D747C", "i`& c #72595D", "j`& c #4F4B4A", "k`& c #444442", "l`& c #424242", "m`& c #353736", "n`& c #692124", "o`& c #1D242A", "p`& c #000911", "q`& c #00040C", "r`& c #293D46", "s`& c #8CA0AB", "t`& c #D6ECF7", "u`& c #DCEEF8", "v`& c #C8DBD9", "w`& c #303934", "x`& c #010F0F", "y`& c #08171A", "z`& c #051419", "A`& c #00121D", "B`& c #022334", "C`& c #2C566F", "D`& c #5F91B2", "E`& c #4A84AC", "F`& c #3C79A5", "G`& c #316C98", "H`& c #0B4269", "I`& c #002D4F", "J`& c #0D324D", "K`& c #09253B", "L`& c #102236", "M`& c #10182F", "N`& c #21233A", "O`& c #080A1F", "P`& c #090C1F", "Q`& c #33384C", "R`& c #8893A7", "S`& c #C3D4EE", "T`& c #93AECC", "U`& c #466C90", "V`& c #0E3B62", "W`& c #11456D", "X`& c #2C6189", "Y`& c #2A5E83", "Z`& c #3E6F90", "``& c #3D6986", " * c #0A2A3F", ". * c #746B6E", "+ * c #7B6F71", "@ * c #827273", "# * c #755F61", "$ * c #684E4F", "% * c #662124", "& * c #741F26", "* * c #86191E", "= * c #8E1C26", "- * c #612B21", "; * c #3D3936", "> * c #716C56", ", * c #534D35", "' * c #5C453F", ") * c #503E3C", "! * c #30272C", "~ * c #4A516E", "{ * c #576484", "] * c #596982", "^ * c #405163", "/ * c #22333D", "( * c #122128", "_ * c #0C171B", ": * c #071017", "< * c #08112E", "[ * c #000930", "} * c #001646", "| * c #325990", "1 * c #5687C2", "2 * c #3874B3", "3 * c #196BA5", "4 * c #2575AA", "5 * c #2D7AA8", "6 * c #4388B1", "7 * c #4C86AB", "8 * c #1E4B6C", "9 * c #001936", "0 * c #00021D", "a * c #2B2F48", "b * c #969BB1", "c * c #DDE2F8", "d * c #DAE2F5", "e * c #616C68", "f * c #000300", "g * c #672A29", "h * c #B06A75", "i * c #B6727F", "j * c #B57681", "k * c #AF717E", "l * c #9A727A", "m * c #8A6B71", "n * c #6F595C", "o * c #5D4E51", "p * c #52514F", "q * c #494B4A", "r * c #444645", "s * c #414342", "t * c #632526", "u * c #171C22", "v * c #000710", "w * c #021019", "x * c #3E505A", "y * c #A7BBC4", "z * c #D5E9F2", "A * c #C7DAE1", "B * c #E5EFEE", "C * c #8C9793", "D * c #071516", "E * c #08171C", "F * c #05161D", "G * c #02161F", "H * c #001724", "I * c #002336", "J * c #295570", "K * c #5D92B4", "L * c #4B86AE", "M * c #3776A2", "N * c #286591", "O * c #063D66", "P * c #002B4D", "Q * c #092E4B", "R * c #001931", "S * c #000F27", "T * c #000825", "U * c #4C5574", "V * c #6A748F", "W * c #8791AC", "X * c #B1BDD7", "Y * c #BFCEEB", "Z * c #ADC4E4", "` * c #7898BE", " .* c #234D75", "..* c #16456F", "+.* c #164976", "@.* c #2E618C", "#.* c #47779D", "$.* c #426E91", "%.* c #000F24", "&.* c #080C15", "*.* c #453F41", "=.* c #7E7578", "-.* c #897E82", ";.* c #7D6E71", ">.* c #7F6C6E", ",.* c #7F696B", "'.* c #715758", ").* c #6D2125", "!.* c #701F25", "~.* c #781F25", "{.* c #911D28", "].* c #602A20", "^.* c #49281F", "/.* c #6B6652", "(.* c #524C34", "_.* c #473531", ":.* c #403738", "<.* c #3A3F5C", "[.* c #4A5372", "}.* c #505B77", "|.* c #3F4E63", "1.* c #293949", "2.* c #1D2B38", "3.* c #15212F", "4.* c #0D1329", "5.* c #060D29", "6.* c #031033", "7.* c #0F224D", "8.* c #28467A", "9.* c #426BA3", "0.* c #4173AE", "a.* c #2A67A6", "b.* c #216CAD", "c.* c #1A6BAC", "d.* c #1567A3", "e.* c #2071A8", "f.* c #2876A6", "g.* c #4188B2", "h.* c #518FB4", "i.* c #2B5C7D", "j.* c #00213F", "k.* c #011633", "l.* c #00041E", "m.* c #1D233B", "n.* c #84899F", "o.* c #D9DEF2", "p.* c #E2E9FB", "q.* c #CDD9D5", "r.* c #6A7571", "s.* c #100903", "t.* c #582826", "u.* c #6C2C2A", "v.* c #752929", "w.* c #A14F55", "x.* c #A05863", "y.* c #B7717C", "z.* c #9D6D79", "A.* c #976F78", "B.* c #85666E", "C.* c #575958", "D.* c #4E5251", "E.* c #474948", "F.* c #454746", "G.* c #682224", "H.* c #060D15", "I.* c #04111A", "J.* c #374550", "K.* c #8C9EA8", "L.* c #D8EAF4", "M.* c #D7EAF1", "N.* c #DAE9EE", "O.* c #CADCDC", "P.* c #E8F1F6", "Q.* c #737E7A", "R.* c #0D181A", "S.* c #08151B", "T.* c #051922", "U.* c #001A29", "V.* c #06293D", "W.* c #2A5774", "X.* c #5389AD", "Y.* c #427FAB", "Z.* c #3676A4", "`.* c #2C6A99", " +* c #05406C", ".+* c #00244C", "++* c #002546", "@+* c #001D39", "#+* c #0B233F", "$+* c #2D4466", "%+* c #8EA2C7", "&+* c #ABBDE1", "*+* c #B4C7E8", "=+* c #C2D5F6", "-+* c #91A8CA", ";+* c #536F96", ">+* c #345781", ",+* c #194471", "'+* c #235280", ")+* c #1C4C7A", "!+* c #34638D", "~+* c #5781A7", "{+* c #2B4F71", "]+* c #00132F", "^+* c #06182C", "/+* c #77686B", "(+* c #938487", "_+* c #887879", ":+* c #826A6A", "<+* c #725557", "[+* c #604041", "}+* c #421416", "|+* c #672527", "1+* c #7F1A1E", "2+* c #7F181C", "3+* c #7E171B", "4+* c #7B161A", "5+* c #921E29", "6+* c #4A281F", "7+* c #6E655E", "8+* c #67624E", "9+* c #6B6650", "0+* c #6F2728", "a+* c #5D2C28", "b+* c #413C39", "c+* c #20202A", "d+* c #252A40", "e+* c #343B58", "f+* c #404A65", "g+* c #3F4B63", "h+* c #39485D", "i+* c #39485B", "j+* c #3C485E", "k+* c #3C465F", "l+* c #1B2443", "m+* c #0D173B", "n+* c #1C2B54", "o+* c #5E76A4", "p+* c #8DB1E3", "q+* c #6D9AD1", "r+* c #3871A8", "s+* c #206BAC", "t+* c #1869AA", "u+* c #1064A0", "v+* c #1B6EA4", "w+* c #1E709F", "x+* c #3883AB", "y+* c #5090B4", "z+* c #306585", "A+* c #072C49", "B+* c #06203B", "C+* c #000822", "D+* c #131931", "E+* c #74798D", "F+* c #DADDF0", "G+* c #ECF2FF", "H+* c #F1FDF9", "I+* c #8A9591", "J+* c #2E3734", "K+* c #3E332F", "L+* c #692F2D", "M+* c #A6545A", "N+* c #AB5A61", "O+* c #AC6E7D", "P+* c #A0707C", "Q+* c #956D76", "R+* c #80626A", "S+* c #6D585F", "T+* c #64595D", "U+* c #615F62", "V+* c #595D5E", "W+* c #4E5454", "X+* c #484C4B", "Y+* c #343635", "Z+* c #313332", "`+* c #00040D", " @* c #010A13", ".@* c #15212D", "+@* c #818F9A", "@@* c #DFF0FA", "#@* c #EAFBFF", "$@* c #D0DEE7", "%@* c #DBE4E9", "&@* c #5D6766", "*@* c #0C151A", "=@* c #09141A", "-@* c #00111D", ";@* c #001827", ">@* c #16394F", ",@* c #366382", "'@* c #427A9F", ")@* c #31719D", "!@* c #3478A9", "~@* c #397BAD", "{@* c #104E7F", "]@* c #002552", "^@* c #00274F", "/@* c #173859", "(@* c #3F5C7E", "_@* c #88A5CD", ":@* c #B2CDF8", "<@* c #ACC5EE", "[@* c #91A8D1", "}@* c #7B93B9", "|@* c #4B648C", "1@* c #204069", "2@* c #1A3F6B", "3@* c #1C4774", "4@* c #295584", "5@* c #315D8A", "6@* c #4D77A1", "7@* c #4F7196", "8@* c #082341", "9@* c #00031B", "0@* c #363D4D", "a@* c #746B70", "b@* c #927E7F", "c@* c #887475", "d@* c #83696A", "e@* c #7A5C5C", "f@* c #593738", "g@* c #441414", "h@* c #622427", "i@* c #6B2428", "j@* c #732429", "k@* c #7B1F24", "l@* c #7D181C", "m@* c #7D161A", "n@* c #791619", "o@* c #7E191D", "p@* c #911F27", "q@* c #93212B", "r@* c #6C6751", "s@* c #504A32", "t@* c #47342D", "u@* c #48312B", "v@* c #422A20", "w@* c #212227", "x@* c #212737", "y@* c #2C3449", "z@* c #39445A", "A@* c #404F64", "B@* c #495970", "C@* c #55657E", "D@* c #60708A", "E@* c #667393", "F@* c #657295", "G@* c #66739D", "H@* c #778CB9", "I@* c #AAC9F7", "J@* c #BBE5FF", "K@* c #6DA3D2", "L@* c #216191", "M@* c #1C6399", "N@* c #1E6CAA", "O@* c #1869A8", "P@* c #1267A0", "Q@* c #1B71A4", "R@* c #1B6F9D", "S@* c #2E7DA4", "T@* c #498DB0", "U@* c #316887", "V@* c #0B324F", "W@* c #07223D", "X@* c #000922", "Y@* c #0C1429", "Z@* c #696C7F", "`@* c #D7DAEB", " #* c #F3F7FF", ".#* c #C9D0DA", "+#* c #A9B7B7", "@#* c #646F6B", "##* c #19221F", "$#* c #602D29", "%#* c #6E2E2C", "&#* c #992D3A", "*#* c #AA5059", "=#* c #A7555B", "-#* c #8C3F47", ";#* c #A65E6C", ">#* c #A3717D", ",#* c #7B5D67", "'#* c #6E5960", ")#* c #6B6066", "!#* c #666469", "~#* c #585C5F", "{#* c #4A5050", "]#* c #3D3F3E", "^#* c #661E21", "/#* c #682628", "(#* c #0B0C11", "_#* c #000711", ":#* c #3A4450", "<#* c #717D89", "[#* c #CCDAE5", "}#* c #C6DAD9", "|#* c #CAD7E0", "1#* c #DEE7EC", "2#* c #F1FBFD", "3#* c #495352", "4#* c #0E1319", "5#* c #0E151D", "6#* c #0B151F", "7#* c #000A17", "8#* c #001728", "9#* c #2B4D66", "0#* c #477596", "a#* c #346E96", "b#* c #2B72A6", "c#* c #387FB5", "d#* c #1D5E94", "e#* c #083D6F", "f#* c #15416E", "g#* c #56789E", "h#* c #7D9FCC", "i#* c #7294C2", "j#* c #7190BC", "k#* c #607DA7", "l#* c #456189", "m#* c #36537D", "n#* c #2B4C77", "o#* c #1A406F", "p#* c #315784", "q#* c #5476A3", "r#* c #59779D", "s#* c #2B4262", "t#* c #010F29", "u#* c #1D2235", "v#* c #5D5A65", "w#* c #938386", "x#* c #957D7D", "y#* c #806667", "z#* c #785C5B", "A#* c #7C5C5D", "B#* c #3F1718", "C#* c #3D1112", "D#* c #67262A", "E#* c #712A2E", "F#* c #7A252A", "G#* c #7A1519", "H#* c #8F2027", "I#* c #90212A", "J#* c #7D746D", "K#* c #4F4931", "L#* c #6E2E2E", "M#* c #0A0300", "N#* c #1D242E", "O#* c #202938", "P#* c #273343", "Q#* c #303F52", "R#* c #3B4D63", "S#* c #4A5B75", "T#* c #576788", "U#* c #5E6E92", "V#* c #7A89B2", "W#* c #97AAD5", "X#* c #A2BAE8", "Y#* c #9CBEEC", "Z#* c #81B1DF", "`#* c #4481AD", " $* c #125983", ".$* c #105C8D", "+$* c #1767A2", "@$* c #1468A6", "#$* c #156AA3", "$$* c #2078AA", "%$* c #1C73A0", "&$* c #2B7DA3", "*$* c #478DAF", "=$* c #306B89", "-$* c #0B3450", ";$* c #011D35", ">$* c #00061D", ",$* c #0A1227", "'$* c #626578", ")$* c #D3D5E4", "!$* c #F2F6FF", "~$* c #ADBDBA", "{$* c #E4F0EC", "]$* c #7B8682", "^$* c #992935", "/$* c #A96677", "($* c #9E6B7A", "_$* c #8A606C", ":$* c #765661", "<$* c #72676F", "[$* c #575B5E", "}$* c #44494C", "|$* c #414546", "1$* c #662627", "2$* c #622626", "3$* c #0E0D13", "4$* c #000009", "5$* c #19212C", "6$* c #9BA4B3", "7$* c #E8F4FF", "8$* c #E5F1FD", "9$* c #F2FBFF", "0$* c #000302", "a$* c #111A23", "b$* c #000E1B", "c$* c #001628", "d$* c #325670", "e$* c #5081A2", "f$* c #346F99", "g$* c #266C9F", "h$* c #1C67A0", "i$* c #2671AB", "j$* c #1F649F", "k$* c #225E94", "l$* c #306293", "m$* c #345A89", "n$* c #406591", "o$* c #426A9B", "p$* c #264E7F", "q$* c #375987", "r$* c #325380", "s$* c #22416D", "t$* c #2B4B74", "u$* c #264875", "v$* c #2C4E7C", "w$* c #426390", "x$* c #557199", "y$* c #2F4366", "z$* c #665E6B", "A$* c #817279", "B$* c #8F7679", "C$* c #836565", "D$* c #805E5D", "E$* c #6C4848", "F$* c #380C0D", "G$* c #78363A", "H$* c #753033", "I$* c #76272C", "J$* c #7D1A1D", "K$* c #8E1F28", "L$* c #552822", "M$* c #61574E", "N$* c #726D57", "O$* c #79755C", "P$* c #4E4830", "Q$* c #4A332D", "R$* c #702E2F", "S$* c #5D2F2F", "T$* c #2D100A", "U$* c #1C0500", "V$* c #0F0000", "W$* c #1C0F06", "X$* c #0A0600", "Y$* c #141B21", "Z$* c #13212C", "`$* c #1A2C3A", " %* c #24394E", ".%* c #30445F", "+%* c #394C6D", "@%* c #3F5177", "#%* c #3B4E79", "$%* c #546A99", "%%* c #5D79A8", "&%* c #5177A4", "*%* c #4176A0", "=%* c #307197", "-%* c #267294", ";%* c #297BA3", ">%* c #085991", ",%* c #095D99", "'%* c #11669F", ")%* c #227AAC", "!%* c #1F76A3", "~%* c #458EAF", "{%* c #316E8B", "]%* c #0A3651", "^%* c #00061C", "/%* c #0F172A", "(%* c #636677", "_%* c #D1D3E0", ":%* c #F4F6FF", "<%* c #E2EEEA", "[%* c #454E4B", "}%* c #35130A", "|%* c #97232C", "1%* c #97252F", "2%* c #982532", "3%* c #962632", "4%* c #9C474E", "5%* c #956070", "6%* c #805662", "7%* c #70505B", "8%* c #715D66", "9%* c #796E76", "0%* c #6F6E73", "a%* c #56595E", "b%* c #393D3E", "c%* c #5A2A28", "d%* c #05050D", "e%* c #010510", "f%* c #373F4C", "g%* c #D6DFF0", "h%* c #C7DAD8", "i%* c #C7DBDA", "j%* c #C5D2DB", "k%* c #ECF5FC", "l%* c #36403F", "m%* c #16171C", "n%* c #0C0F18", "o%* c #121923", "p%* c #0A1825", "q%* c #001328", "r%* c #234761", "s%* c #487A9D", "t%* c #3A77A4", "u%* c #2A71A7", "v%* c #14609C", "w%* c #1763A1", "x%* c #175E9C", "y%* c #26649F", "z%* c #366BA1", "A%* c #2C5589", "B%* c #2D5586", "C%* c #386294", "D%* c #2B5587", "E%* c #305484", "F%* c #1D3F6C", "G%* c #1C3B67", "H%* c #274770", "I%* c #34537F", "J%* c #466591", "K%* c #425E86", "L%* c #2F456A", "M%* c #0E1C39", "N%* c #16172C", "O%* c #5C5161", "P%* c #938086", "Q%* c #947A7D", "R%* c #7E5F5D", "S%* c #7A5857", "T%* c #6F4B4B", "U%* c #411516", "V%* c #5F272A", "W%* c #703436", "X%* c #7E373B", "Y%* c #772B2F", "Z%* c #8B2028", "`%* c #8A1F27", " &* c #891E26", ".&* c #871E25", "+&* c #841C23", "@&* c #7F1C21", "#&* c #8A1C25", "$&* c #746F59", "%&* c #4C332C", "&&* c #732F30", "*&* c #76403E", "=&* c #825653", "-&* c #8C635F", ";&* c #7B5552", ">&* c #51322D", ",&* c #1E0B04", "'&* c #1E1007", ")&* c #191D20", "!&* c #141E28", "~&* c #1C2A37", "{&* c #263749", "]&* c #2F4159", "^&* c #334666", "/&* c #364A6F", "(&* c #3B4E78", "_&* c #2D4571", ":&* c #284775", "<&* c #30638E", "[&* c #256088", "}&* c #1A6084", "|&* c #1D6892", "1&* c #00487E", "2&* c #01508B", "3&* c #0E5F96", "4&* c #2577A9", "5&* c #2275A1", "6&* c #2D7BA1", "7&* c #468BAC", "8&* c #346D8B", "9&* c #103955", "0&* c #001830", "a&* c #00071E", "b&* c #161E31", "c&* c #676A79", "d&* c #D3D5E1", "e&* c #F6F8FF", "f&* c #A5B0AC", "g&* c #363F3C", "h&* c #96222B", "i&* c #98222E", "j&* c #98242F", "k&* c #993841", "l&* c #9D4D5A", "m&* c #9A4C59", "n&* c #974F5D", "o&* c #8E5A67", "p&* c #6B4B56", "q&* c #7D727A", "r&* c #737176", "s&* c #3D4245", "t&* c #363A39", "u&* c #323635", "v&* c #141B25", "w&* c #464E5B", "x&* c #DDE4F4", "y&* c #ECF5FF", "z&* c #DFE9F5", "A&* c #D4DCE9", "B&* c #E3E7E8", "C&* c #CDDCDF", "D&* c #CDDCE1", "E&* c #545E5D", "F&* c #0C1512", "G&* c #010609", "H&* c #0E171C", "I&* c #111F28", "J&* c #001121", "K&* c #406B8B", "L&* c #467BA3", "M&* c #3270A1", "N&* c #1C5F94", "O&* c #1C5F96", "P&* c #14558B", "Q&* c #1D568B", "R&* c #2B5F8F", "S&* c #285481", "T&* c #335C88", "U&* c #2C5583", "V&* c #3A608F", "W&* c #345683", "X&* c #11305C", "Y&* c #213E66", "Z&* c #29426A", "`&* c #162E54", " ** c #475D84", ".** c #51658A", "+** c #354567", "@** c #141F3D", "#** c #23253C", "$** c #615869", "%** c #907F89", "&** c #937A7E", "*** c #876969", "=** c #936F6F", "-** c #795253", ";** c #684041", ">** c #3F1113", ",** c #871C24", "'** c #831B22", ")** c #7D1A1F", "!** c #706760", "~** c #695F56", "{** c #B1AEA9", "]** c #53362E", "^** c #4F3129", "/** c #502F28", "(** c #874141", "_** c #905B57", ":** c #8C5F5A", "<** c #A37C75", "[** c #9B7872", "}** c #5D403A", "|** c #0D0900", "1** c #070900", "2** c #090B00", "3** c #181F31", "4** c #1E293F", "5** c #2A3853", "6** c #344465", "7** c #3B4F74", "8** c #2D466E", "9** c #325784", "0** c #2B5384", "a** c #4775A6", "b** c #497BAC", "c** c #11497C", "d** c #00346A", "e** c #00447B", "f** c #095084", "g** c #367EAE", "h** c #2B749D", "i** c #286C91", "j** c #5893B5", "k** c #386687", "l** c #00223E", "m** c #031732", "n** c #00061F", "o** c #1A1F33", "p** c #7D808F", "q** c #E0E2EE", "r** c #EAEEF9", "s** c #959E9B", "t** c #020605", "u** c #000403", "v** c #110F03", "w** c #96222D", "x** c #962330", "y** c #972431", "z** c #972934", "A** c #962B35", "B** c #9A4D57", "C** c #935562", "D** c #854F5D", "E** c #794D5A", "F** c #6C4B56", "G** c #715C65", "H** c #7A6F77", "I** c #68656C", "J** c #4E5158", "K** c #4A4F52", "L** c #3F4543", "M** c #383E3A", "N** c #303632", "O** c #2F3533", "P** c #502F2A", "Q** c #2D3238", "R** c #F5FCFF", "S** c #EDF3FF", "T** c #CFD5E1", "U** c #C6CCD8", "V** c #D0D4E0", "W** c #D0D4DF", "X** c #D1D5E0", "Y** c #D8DAE6", "Z** c #CBDBD8", "`** c #E4EFEB", " =* c #E6EFEC", ".=* c #727B76", "+=* c #050F06", "@=* c #071309", "#=* c #071919", "$=* c #051920", "%=* c #072130", "&=* c #26455A", "*=* c #507590", "==* c #376284", "-=* c #376589", ";=* c #35658B", ">=* c #316386", ",=* c #2D5E7F", "'=* c #2A5B7B", ")=* c #2B5A76", "!=* c #2D5878", "~=* c #375881", "{=* c #28456F", "]=* c #17335B", "^=* c #0C234C", "/=* c #11254A", "(=* c #324264", "_=* c #4B5878", ":=* c #49526F", "<=* c #3F455F", "[=* c #191428", "}=* c #645969", "|=* c #877279", "1=* c #755C60", "2=* c #816365", "3=* c #673B3C", "4=* c #602A2A", "5=* c #713132", "6=* c #793536", "7=* c #8B3542", "8=* c #872F3B", "9=* c #80232D", "0=* c #8C1B21", "a=* c #716861", "b=* c #726761", "c=* c #4D291D", "d=* c #4E2A1E", "e=* c #502A1F", "f=* c #AE6868", "g=* c #A7706B", "h=* c #976A64", "i=* c #9F7970", "j=* c #96756C", "k=* c #644942", "l=* c #120B03", "m=* c #080901", "n=* c #070800", "o=* c #060900", "p=* c #12101B", "q=* c #12121E", "r=* c #171E31", "s=* c #212B44", "t=* c #273751", "u=* c #324565", "v=* c #294165", "w=* c #345179", "x=* c #33547F", "y=* c #2C4E7E", "z=* c #436799", "A=* c #43689C", "B=* c #0E396E", "C=* c #00265C", "D=* c #0D4B7E", "E=* c #1E5E8E", "F=* c #3D7DAB", "G=* c #32739B", "H=* c #387499", "I=* c #5C8EB1", "J=* c #2A5373", "K=* c #05203D", "L=* c #03132D", "M=* c #26283D", "N=* c #8E909F", "O=* c #E1E3F0", "P=* c #E3E7F2", "Q=* c #AFBEC5", "R=* c #E0E9E6", "S=* c #9AA09E", "T=* c #616564", "U=* c #150F03", "V=* c #0D0D03", "W=* c #110A12", "X=* c #140A15", "Y=* c #251C1D", "Z=* c #941B20", "`=* c #951C23", " -* c #99212D", ".-* c #97212F", "+-* c #972330", "@-* c #992633", "#-* c #992B36", "$-* c #96505B", "%-* c #7C515B", "&-* c #694853", "*-* c #644D57", "=-* c #665962", "--* c #565158", ";-* c #45454D", ">-* c #474C4F", ",-* c #3A403C", "'-* c #2D3631", ")-* c #2A332E", "!-* c #532D2A", "~-* c #161B1F", "{-* c #000105", "]-* c #5E6369", "^-* c #E5E9F2", "/-* c #CED2DD", "(-* c #D2D6E2", "_-* c #D1D5E1", ":-* c #D4D8E4", "<-* c #C7D4DD", "[-* c #EAF3EE", "}-* c #848E86", "|-* c #141E16", "1-* c #020C01", "2-* c #0D1A09", "3-* c #142213", "4-* c #0E1E13", "5-* c #091A14", "6-* c #071923", "7-* c #162B3C", "8-* c #324B61", "9-* c #36526A", "0-* c #395972", "a-* c #3D5F7A", "b-* c #3C6279", "c-* c #355E74", "d-* c #2C576A", "e-* c #225060", "f-* c #214A5E", "g-* c #234060", "h-* c #172D52", "i-* c #14284B", "j-* c #162949", "k-* c #1C2B48", "l-* c #2A3650", "m-* c #2D334B", "n-* c #1E2035", "o-* c #110E1F", "p-* c #443C4B", "q-* c #7B6F79", "r-* c #908188", "s-* c #847175", "t-* c #715D5F", "u-* c #76585A", "v-* c #421011", "w-* c #813D3E", "x-* c #893B3B", "y-* c #883845", "z-* c #8D3C4B", "A-* c #84303F", "B-* c #812937", "C-* c #812530", "D-* c #423F36", "E-* c #6D645F", "F-* c #78716B", "G-* c #51362B", "H-* c #503228", "I-* c #4F2E25", "J-* c #4E281D", "K-* c #A85C5E", "L-* c #C27E7D", "M-* c #B8837D", "N-* c #9F736A", "O-* c #977168", "P-* c #906F66", "Q-* c #6F544D", "R-* c #0C0B13", "S-* c #090C15", "T-* c #0C1325", "U-* c #131E32", "V-* c #18273E", "W-* c #233450", "X-* c #203757", "Y-* c #304A6D", "Z-* c #314F75", "`-* c #284773", " ;* c #375885", ".;* c #345684", "+;* c #07305E", "@;* c #002556", "#;* c #1C5485", "$;* c #2C6694", "%;* c #3A759F", "&;* c #336F94", "*;* c #42789C", "=;* c #5583A4", "-;* c #183D5A", ";;* c #041D3B", ">;* c #000B26", ",;* c #36374C", "';* c #A7A6B8", ");* c #E0E2EF", "!;* c #D7DBE6", "~;* c #C3C9C5", "{;* c #C3C8C4", "];* c #8F9392", "^;* c #1D1307", "/;* c #110914", "(;* c #110C13", "_;* c #772D2C", ":;* c #96202C", "<;* c #96202E", "[;* c #96222F", "};* c #8E383B", "|;* c #7E505B", "1;* c #6A4650", "2;* c #5F4850", "3;* c #5B4E57", "4;* c #474248", "5;* c #37383D", "6;* c #3D4144", "7;* c #353A36", "8;* c #323932", "9;* c #2E3430", "0;* c #2A302C", "a;* c #543231", "b;* c #010409", "c;* c #050C12", "d;* c #50575D", "e;* c #EEF5FD", "f;* c #D0D7E1", "g;* c #C7D6D3", "h;* c #9DA79F", "i;* c #2A312A", "j;* c #141C0D", "k;* c #182011", "l;* c #09161E", "m;* c #081623", "n;* c #132436", "o;* c #1B2D43", "p;* c #1E344B", "q;* c #233C52", "r;* c #254053", "s;* c #213E50", "t;* c #183847", "u;* c #10323E", "v;* c #0F2C3C", "w;* c #051B32", "x;* c #00102A", "y;* c #081831", "z;* c #132239", "A;* c #152034", "B;* c #1B2234", "C;* c #232937", "D;* c #252531", "E;* c #3C3942", "F;* c #756B73", "G;* c #8D7D7E", "H;* c #614C47", "I;* c #89343B", "J;* c #87363F", "K;* c #85313E", "L;* c #4E2D24", "M;* c #902E2B", "N;* c #8D3533", "O;* c #9C5253", "P;* c #A96866", "Q;* c #AE7971", "R;* c #996D62", "S;* c #906A5F", "T;* c #8C6C61", "U;* c #775C53", "V;* c #503D36", "W;* c #0D0A03", "X;* c #070802", "Y;* c #090901", "Z;* c #050914", "`;* c #070D1B", " >* c #0E1B2E", ".>* c #13233A", "+>* c #172B44", "@>* c #283D5C", "#>* c #2B4365", "$>* c #264063", "%>* c #2F4B70", "&>* c #2E4C72", "*>* c #12335C", "=>* c #0E3964", "->* c #295A85", ";>* c #30648C", ">>* c #396D94", ",>* c #386D8F", "'>* c #437494", ")>* c #446D8B", "!>* c #031835", "~>* c #49475D", "{>* c #B9B8CA", "]>* c #DEE0EF", "^>* c #CCD0DC", "/>* c #B3B9B5", "(>* c #C5CBC7", "_>* c #F2F7F3", ":>* c #747673", "<>* c #25170C", "[>* c #100A00", "}>* c #0D0A13", "|>* c #6C3230", "1>* c #941E2A", "2>* c #94202D", "3>* c #95212E", "4>* c #95222F", "5>* c #913A40", "6>* c #8D4B55", "7>* c #784953", "8>* c #67444B", "9>* c #654C52", "0>* c #64555C", "a>* c #4B4549", "b>* c #323733", "c>* c #313630", "d>* c #2F3430", "e>* c #1C2021", "f>* c #52282A", "g>* c #4B2D2F", "h>* c #281C20", "i>* c #221C20", "j>* c #01050E", "k>* c #414A53", "l>* c #8A919B", "m>* c #D7E0E9", "n>* c #F1FAFF", "o>* c #3C433C", "p>* c #121608", "q>* c #1B1D0F", "r>* c #080E1A", "s>* c #0C1524", "t>* c #061123", "u>* c #081526", "v>* c #081828", "w>* c #091928", "x>* c #071927", "y>* c #061A23", "z>* c #071B24", "A>* c #091D26", "B>* c #020E1E", "C>* c #081422", "D>* c #0B1521", "E>* c #0E121B", "F>* c #38393E", "G>* c #58575C", "H>* c #70615C", "I>* c #6B5A52", "J>* c #5C4A40", "K>* c #6F3D3C", "L>* c #783A3B", "M>* c #914144", "N>* c #9D4142", "O>* c #8A3844", "P>* c #8A3846", "Q>* c #893542", "R>* c #726962", "S>* c #6E6560", "T>* c #4F2B1F", "U>* c #8F3A37", "V>* c #8D4E49", "W>* c #925E53", "X>* c #8D6252", "Y>* c #8C6659", "Z>* c #8C6C5F", "`>* c #7A5F54", " ,* c #4D3B31", ".,* c #070803", "+,* c #03080E", "@,* c #030A14", "#,* c #050D18", "$,* c #07101F", "%,* c #101F34", "&,* c #1C2C43", "*,* c #22334D", "=,* c #233752", "-,* c #2D425F", ";,* c #304766", ">,* c #264061", ",,* c #2A4C71", "',* c #30567D", "),* c #335E81", "!,* c #447192", "~,* c #4A7796", "{,* c #416A88", "],* c #2A4D69", "^,* c #021D38", "/,* c #00031F", "(,* c #11112B", "_,* c #66647A", ":,* c #C3C1D6", "<,* c #D8D9EB", "[,* c #C5C8D9", "},* c #C2CAD7", "|,* c #BFC6BF", "1,* c #E6EBE5", "2,* c #C7C9C4", "3,* c #030301", "4,* c #0B0A10", "5,* c #0D0C12", "6,* c #723031", "7,* c #931F2A", "8,* c #8E4850", "9,* c #6F3E44", "0,* c #5D383F", "a,* c #68585B", "b,* c #52494C", "c,* c #333532", "d,* c #57282E", "e,* c #502830", "f,* c #3B2027", "g,* c #2D1922", "h,* c #281E27", "i,* c #01030F", "j,* c #818B97", "k,* c #DBE3EE", "l,* c #E0E8F3", "m,* c #EEF4F0", "n,* c #BBC1BD", "o,* c #474D49", "p,* c #0E0E02", "q,* c #0D0D17", "r,* c #141321", "s,* c #0F1120", "t,* c #0E121E", "u,* c #0D111C", "v,* c #0A111B", "w,* c #0B1218", "x,* c #121A1D", "y,* c #1B2326", "z,* c #0E1317", "A,* c #5B5A56", "B,* c #837970", "C,* c #6E3C3B", "D,* c #A0454A", "E,* c #A44549", "F,* c #A64849", "G,* c #8E3934", "H,* c #8F3733", "I,* c #8F383E", "J,* c #8C3941", "K,* c #893743", "L,* c #8E3A47", "M,* c #444037", "N,* c #49453C", "O,* c #635D4D", "P,* c #706B58", "Q,* c #595345", "R,* c #8B3834", "S,* c #8C4541", "T,* c #8B4746", "U,* c #884B46", "V,* c #7E4D3F", "W,* c #8A5F4E", "X,* c #8F6A5A", "Y,* c #8D6D60", "Z,* c #795E53", "`,* c #050608", " '* c #05060A", ".'* c #02050A", "+'* c #02070D", "@'* c #010810", "#'* c #06101C", "$'* c #0B1423", "%'* c #162334", "&'* c #1F2E41", "*'* c #29384D", "='* c #314256", "-'* c #33475F", ";'* c #354E6D", ">'* c #314E6E", ",'* c #395A79", "''* c #50738F", ")'* c #567A94", "!'* c #385A73", "~'* c #102E46", "{'* c #001028", "]'* c #0E122D", "^'* c #47455D", "/'* c #9692A9", "('* c #C9C5DC", "_'* c #CFD0E4", ":'* c #C4C7DA", "<'* c #B8BFCF", "['* c #B4BDB8", "}'* c #B6BDB6", "|'* c #B2B7B0", "1'* c #E5E8E1", "2'* c #CFD2C9", "3'* c #62635D", "4'* c #180E04", "5'* c #5C2A29", "6'* c #901E28", "7'* c #911F29", "8'* c #8F2029", "9'* c #6A373C", "0'* c #512A2F", "a'* c #523539", "b'* c #5E4B4D", "c'* c #4F4546", "d'* c #32342F", "e'* c #62272D", "f'* c #59242C", "g'* c #5E333C", "h'* c #4A2630", "i'* c #2E1721", "j'* c #2A1A27", "k'* c #1E1826", "l'* c #0C0B1B", "m'* c #050B1B", "n'* c #293040", "o'* c #B0B9C8", "p'* c #DBE5F1", "q'* c #CCD6E2", "r'* c #CCD6E0", "s'* c #CAD3D0", "t'* c #E4EAE8", "u'* c #4D534F", "v'* c #0F0913", "w'* c #17111D", "x'* c #120C1A", "y'* c #150F1B", "z'* c #16131E", "A'* c #040300", "B'* c #57544D", "C'* c #79746E", "D'* c #241405", "E'* c #6E4C43", "F'* c #734842", "G'* c #784743", "H'* c #834947", "I'* c #904C4D", "J'* c #A14B4E", "K'* c #A9494D", "L'* c #AB484B", "M'* c #AB4B4D", "N'* c #AB4D4D", "O'* c #A14844", "P'* c #913E38", "Q'* c #923734", "R'* c #8E373D", "S'* c #893640", "T'* c #6C6754", "U'* c #67624F", "V'* c #5B5547", "W'* c #512F26", "X'* c #542F26", "Y'* c #532F23", "Z'* c #4F291E", "`'* c #8C2F2A", " )* c #8A403D", ".)* c #8D4C4A", "+)* c #8F544E", "@)* c #845344", "#)* c #956A59", "$)* c #977262", "%)* c #8D6D5E", "&)* c #070508", "*)* c #080F17", "=)* c #070E18", "-)* c #1D2530", ";)* c #2B3541", ">)* c #364252", ",)* c #31415A", "')* c #30445D", "))* c #395169", "!)* c #445E75", "~)* c #425E73", "{)* c #254055", "])* c #01172C", "^)* c #000D24", "/)* c #00051D", "()* c #2C2C44", "_)* c #8D89A2", ":)* c #D1CCE3", "<)* c #CFCBE2", "[)* c #C8C6DB", "})* c #C3C8DB", "|)* c #AFB6C6", "1)* c #B2BECA", "2)* c #BBC5BD", "3)* c #BEC4BA", "4)* c #FEFFF8", "5)* c #E6E9DE", "6)* c #73746C", "7)* c #0B0F12", "8)* c #632928", "9)* c #824449", "0)* c #6B373B", "a)* c #554343", "b)* c #202626", "c)* c #63252A", "d)* c #622930", "e)* c #57252E", "f)* c #5C343F", "g)* c #3E1E2B", "h)* c #271221", "i)* c #2B1E30", "j)* c #0D0A1D", "k)* c #000217", "l)* c #262D40", "m)* c #646C7F", "n)* c #BAC5D7", "o)* c #CAD5E7", "p)* c #BECADA", "q)* c #C9D5E3", "r)* c #CAD6E2", "s)* c #C8D7D0", "t)* c #C9CFCD", "u)* c #505453", "v)* c #040603", "w)* c #120C16", "x)* c #160E1B", "y)* c #120A17", "z)* c #140C19", "A)* c #170D16", "B)* c #898077", "C)* c #847A70", "D)* c #665A4E", "E)* c #1A0C00", "F)* c #6F5147", "G)* c #6C433D", "H)* c #6E3E3A", "I)* c #7E4442", "J)* c #9D4448", "K)* c #A8494F", "L)* c #B04D52", "M)* c #AC474B", "N)* c #AD4F4F", "O)* c #A9504C", "P)* c #9B4842", "Q)* c #924239", "R)* c #93403A", "S)* c #943B37", "T)* c #6A6552", "U)* c #5D5749", "V)* c #523027", "W)* c #553027", "X)* c #543024", "Y)* c #522E22", "Z)* c #502C20", "`)* c #8E2C29", " !* c #8C3D38", ".!* c #8C423F", "+!* c #894640", "@!* c #8F564F", "#!* c #926152", "$!* c #A27766", "%!* c #9D7866", "&!* c #8C6C5D", "*!* c #73594C", "=!* c #06050A", "-!* c #07050A", ";!* c #04070C", ">!* c #20252B", ",!* c #24292F", "'!* c #313842", ")!* c #2E3547", "!!* c #333E52", "~!* c #374659", "{!* c #2E4152", "]!* c #253A4B", "^!* c #122836", "/!* c #000C1E", "(!* c #444057", "_!* c #C2BAD2", ":!* c #FBF3FF", "~* c #896452", ",~* c #775748", "'~* c #030305", ")~* c #09070C", "!~* c #242632", "~~* c #242736", "{~* c #212936", "]~* c #1C2834", "^~* c #14252F", "/~* c #0D1E28", "(~* c #0A1624", "_~* c #091020", ":~* c #6C677B", "<~* c #C2B9CE", "[~* c #CBC2D7", "}~* c #BFBAD0", "|~* c #BDBCCE", "1~* c #B8BBCC", "2~* c #B1B8C8", "3~* c #A8B0BD", "4~* c #AAB4C0", "5~* c #C4CBC3", "6~* c #E8EEE4", "7~* c #F4F7EC", "8~* c #D3D5CA", "9~* c #7B7D70", "0~* c #160C02", "a~* c #581B20", "b~* c #62292F", "c~* c #5E2B32", "d~* c #512731", "e~* c #4C2C39", "f~* c #311929", "g~* c #0D0011", "h~* c #171228", "i~* c #03051C", "j~* c #000620", "k~* c #6C768F", "l~* c #BCC7DD", "m~* c #B7C2D6", "n~* c #C1CDDD", "o~* c #CBD7E3", "p~* c #C4D3CC", "q~* c #C6D6CC", "r~* c #C5D5CB", "s~* c #939496", "t~* c #43474A", "u~* c #131220", "v~* c #12111F", "w~* c #13111F", "x~* c #14101F", "y~* c #100919", "z~* c #1B1523", "A~* c #221A27", "B~* c #231924", "C~* c #2D212B", "D~* c #473C44", "E~* c #63585E", "F~* c #736769", "G~* c #877A74", "H~* c #7A6D67", "I~* c #5B4E48", "J~* c #1E0000", "K~* c #3B140D", "L~* c #663530", "M~* c #B45B5F", "N~* c #B25357", "O~* c #AE4E50", "P~* c #AC4C4E", "Q~* c #AD5251", "R~* c #AB5351", "S~* c #994942", "T~* c #9A4741", "U~* c #5F2E27", "V~* c #4D4940", "W~* c #746B64", "X~* c #655C57", "Y~* c #817775", "Z~* c #B9AFAE", "`~* c #645F4C", " {* c #863732", ".{* c #873D3A", "+{* c #8C4C4A", "@{* c #925751", "#{* c #A27065", "${* c #916656", "%{* c #7F5A4A", "&{* c #1A171E", "*{* c #1C1F28", "={* c #171E26", "-{* c #0E1821", ";{* c #061019", ">{* c #020B14", ",{* c #020611", "'{* c #6D6676", "){* c #A397AB", "!{* c #A498AC", "~{* c #A19AAC", "{{* c #A4A6B5", "]{* c #A8B0BB", "^{* c #DBE2DA", "/{* c #E5EBE1", "({* c #D4D7CC", "_{* c #84877C", ":{* c #191B0E", "<{* c #0C0900", "[{* c #5F2D2E", "}{* c #8D232D", "|{* c #6B3437", "1{* c #53292B", "2{* c #5D1C20", "3{* c #56181B", "4{* c #56191E", "5{* c #571A21", "6{* c #591B20", "7{* c #5A2B33", "8{* c #4C2631", "9{* c #2F111D", "0{* c #261122", "a{* c #100516", "b{* c #09061B", "c{* c #1A1F35", "d{* c #4E556F", "e{* c #AAB6CE", "f{* c #BAC5DB", "g{* c #9CA7BB", "h{* c #A0ABBF", "i{* c #D0DCEC", "j{* c #CEDAE6", "k{* c #C7D6D1", "l{* c #CAD9D2", "m{* c #CADAD0", "n{* c #C8D8CE", "o{* c #C7D4CB", "p{* c #787B80", "q{* c #414852", "r{* c #3B4350", "s{* c #323A47", "t{* c #292C3B", "u{* c #2C2E3D", "v{* c #343343", "w{* c #3A3846", "x{* c #4B4957", "y{* c #5B5765", "z{* c #6B6571", "A{* c #90868F", "B{* c #9E949C", "C{* c #7B6D6A", "D{* c #4F4140", "E{* c #200C05", "F{* c #1D0000", "G{* c #714640", "H{* c #824C4A", "I{* c #8C4C4C", "J{* c #A95356", "K{* c #A2484A", "L{* c #A74D4D", "M{* c #A8504F", "N{* c #A3504C", "O{* c #A04D49", "P{* c #512921", "Q{* c #827876", "R{* c #575141", "S{* c #615B4B", "T{* c #523128", "U{* c #533128", "V{* c #4C241A", "W{* c #843530", "X{* c #86413C", "Y{* c #8C4B49", "Z{* c #915652", "`{* c #A5736A", " ]* c #8B5F54", ".]* c #744E43", "+]* c #644439", "@]* c #5E4B45", "#]* c #080609", "$]* c #070602", "%]* c #182023", "&]* c #1E2629", "*]* c #2C3137", "=]* c #383840", "-]* c #605A66", ";]* c #827785", ">]* c #908293", ",]* c #8A7D8E", "']* c #8F8697", ")]* c #9998A6", "!]* c #9DA1AD", "~]* c #9B9FAB", "{]* c #A8ACB7", "]]* c #C8D3CD", "^]* c #CFD9D1", "/]* c #D7E1D8", "(]* c #D2DACF", "_]* c #BDC3B7", ":]* c #7A7D72", "<]* c #34382A", "[]* c #040600", "}]* c #4D3833", "|]* c #503733", "1]* c #712C31", "2]* c #8E262F", "3]* c #632729", "4]* c #602F33", "5]* c #542930", "6]* c #47232D", "7]* c #1E040F", "8]* c #221020", "9]* c #0E0516", "0]* c #030116", "a]* c #54596F", "b]* c #B1B8D2", "c]* c #D7E1FA", "d]* c #C0C8DF", "e]* c #A8B0C5", "f]* c #B1B9CE", "g]* c #D1D9EC", "h]* c #CDDAD3", "i]* c #CCD9D0", "j]* c #C3D0C9", "k]* c #8C949F", "l]* c #838C9B", "m]* c #767F8E", "n]* c #6D7484", "o]* c #69717E", "p]* c #6D7381", "q]* c #757985", "r]* c #7B7D8A", "s]* c #858492", "t]* c #8E8C99", "u]* c #97949F", "v]* c #8E858A", "w]* c #7C7072", "x]* c #7E7371", "y]* c #544848", "z]* c #0E0202", "A]* c #160500", "B]* c #1A0300", "C]* c #6A4741", "D]* c #855956", "E]* c #935D5B", "F]* c #915354", "G]* c #974B4D", "H]* c #AB5556", "I]* c #A85251", "J]* c #A34D4C", "K]* c #A24A49", "L]* c #665D58", "M]* c #BBB2B3", "N]* c #544E3E", "O]* c #5F5A47", "P]* c #863F3B", "Q]* c #925552", "R]* c #9D6B64", "S]* c #84584F", "T]* c #734D44", "U]* c #62413A", "V]* c #49413F", "W]* c #060501", "X]* c #060503", "Y]* c #606467", "Z]* c #7D7C81", "`]* c #847D85", " ^* c #8D818B", ".^* c #8A7A87", "+^* c #857784", "@^* c #8F8492", "#^* c #938D99", "$^* c #92909D", "%^* c #B2BDB7", "&^* c #C5D0C8", "*^* c #D9E5DB", "=^* c #D3DDD4", "-^* c #B4BCB1", ";^* c #797F73", ">^* c #3E4436", ",^* c #17190C", "'^* c #583A38", ")^* c #572629", "!^* c #6E2830", "~^* c #872732", "{^* c #8F2730", "]^* c #6A383B", "^^* c #57191E", "/^* c #571820", "(^* c #571821", "_^* c #581921", ":^* c #652D2E", "<^* c #4E272C", "[^* c #3A1B21", "}^* c #210A14", "|^* c #231320", "1^* c #170E1F", "2^* c #2F2E40", "3^* c #A3A8BC", "4^* c #EFF7FF", "5^* c #D4DCF3", "6^* c #A9B1C6", "7^* c #B3BBCE", "8^* c #CAD1E4", "9^* c #D2DBEC", "0^* c #CAD1E1", "a^* c #C0CBC5", "b^* c #A0A1A5", "c^* c #A0AAB6", "d^* c #9DA7B3", "e^* c #A0A4AF", "f^* c #9F9CA5", "g^* c #7C757C", "h^* c #6E686C", "i^* c #5A504F", "j^* c #393031", "k^* c #0B0507", "l^* c #090506", "m^* c #080204", "n^* c #060000", "o^* c #100300", "p^* c #160300", "q^* c #472C25", "r^* c #674641", "s^* c #835A56", "t^* c #8F5756", "u^* c #884848", "v^* c #8B4545", "w^* c #A75758", "x^* c #B15C5F", "y^* c #AE5557", "z^* c #691411", "A^* c #65120E", "B^* c #615650", "C^* c #69605B", "D^* c #863C39", "E^* c #8D4546", "F^* c #925250", "G^* c #915C58", "H^* c #80534E", "I^* c #7C5550", "J^* c #684742", "K^* c #5C4945", "L^* c #060701", "M^* c #0A0102", "N^* c #545557", "O^* c #706E71", "P^* c #6E676E", "Q^* c #776C74", "R^* c #82727D", "S^* c #8F838F", "T^* c #8C848F", "U^* c #AFB0B5", "V^* c #CCD8CE", "W^* c #D7E1D6", "X^* c #CBD6C8", "Y^* c #9FA79A", "Z^* c #6A7263", "`^* c #3D4335", " /* c #1A2012", "./* c #080C00", "+/* c #16180B", "@/* c #0A0200", "#/* c #593735", "$/* c #6D2731", "%/* c #7D2732", "&/* c #892734", "*/* c #8D212E", "=/* c #8E222F", "-/* c #8E2631", ";/* c #8F2732", ">/* c #902634", ",/* c #804348", "'/* c #673639", ")/* c #1E0904", "!/* c #58171B", "~/* c #673131", "{/* c #653535", "]/* c #2C0F13", "^/* c #1B060D", "//* c #1B0E18", "(/* c #908F9F", "_/* c #E5E8FB", ":/* c #CCD4E9", "(* c #110001", ",(* c #23161F", "'(* c #8B8591", ")(* c #E5E3F1", "!(* c #F2F5FF", "~(* c #E7EEFF", "{(* c #D4DBEE", "](* c #A3A8BB", "^(* c #808696", "/(* c #7F8595", "((* c #A0A6B4", "_(* c #B2B8C6", ":(* c #878D8D", "<(* c #8B8F90", "[(* c #8B8F8E", "}(* c #868684", "|(* c #7E7D7B", "1(* c #767271", "2(* c #3A3132", "3(* c #040500", "4(* c #020100", "5(* c #130802", "6(* c #110600", "7(* c #896A65", "8(* c #936A68", "9(* c #8E5B5A", "0(* c #8D4F50", "a(* c #9A4F53", "b(* c #AA4D55", "c(* c #615851", "d(* c #C1B8B9", "e(* c #4E3328", "f(* c #53352B", "g(* c #863A3C", "h(* c #8A4647", "i(* c #895353", "j(* c #855759", "k(* c #926A6A", "l(* c #755352", "m(* c #634F50", "n(* c #8B7D7D", "o(* c #736A6B", "p(* c #414141", "q(* c #080702", "r(* c #06070B", "s(* c #0F0607", "t(* c #3A2E32", "u(* c #48373D", "v(* c #56454D", "w(* c #685B62", "x(* c #72696E", "y(* c #757074", "z(* c #807E81", "A(* c #99949A", "B(* c #A5A3A6", "C(* c #B1ACB0", "D(* c #BBB7B8", "E(* c #929A8B", "F(* c #5C6756", "G(* c #2C3726", "H(* c #14200C", "I(* c #0D1603", "J(* c #161F0C", "K(* c #242B19", "L(* c #0B0D02", "M(* c #0B0B03", "N(* c #37191B", "O(* c #6F2732", "P(* c #802836", "Q(* c #8B2636", "R(* c #912735", "S(* c #90222F", "T(* c #8C2230", "U(* c #8C2030", "V(* c #8C202D", "W(* c #813C41", "X(* c #4B282C", "Y(* c #3C2628", "Z(* c #591A22", "`(* c #5A1822", " _* c #5A1623", "._* c #53161B", "+_* c #643233", "@_* c #200607", "#_* c #200D11", "$_* c #564950", "%_* c #C7C1CB", "&_* c #ECEAF7", "*_* c #CDD3E3", "=_* c #C6CDDD", "-_* c #BFC5D5", ";_* c #9FA2B1", ">_* c #9B9EAD", ",_* c #B1B4C3", "'_* c #A9ADB9", ")_* c #919098", "!_* c #919294", "~_* c #898987", "{_* c #898A85", "]_* c #82817C", "^_* c #75706A", "/_* c #020800", "(_* c #050800", "__* c #070A01", ":_* c #010400", "<_* c #040700", "[_* c #060100", "}_* c #715A54", "|_* c #95746F", "1_* c #8E625F", "2_* c #8F5456", "3_* c #AA545D", "4_* c #AE4E59", "5_* c #AD4452", "6_* c #A8404B", "7_* c #882D2A", "8_* c #613029", "9_* c #625751", "0_* c #C5BCBD", "a_* c #54362C", "b_* c #986B6E", "c_* c #7A5356", "d_* c #4B2C31", "e_* c #705A5D", "f_* c #706C6D", "g_* c #5A5859", "h_* c #41413F", "i_* c #040308", "j_* c #040205", "k_* c #050400", "l_* c #0A0404", "m_* c #22161A", "n_* c #3D3236", "o_* c #575354", "p_* c #626061", "q_* c #676566", "r_* c #716F70", "s_* c #7B7778", "t_* c #7B797A", "u_* c #8B898A", "v_* c #5B5754", "w_* c #0D1402", "x_* c #131A08", "y_* c #0F1604", "z_* c #111806", "A_* c #37171A", "B_* c #6D2934", "C_* c #7E2A37", "D_* c #882836", "E_* c #8F2634", "F_* c #8F2330", "G_* c #8B212F", "H_* c #8A202C", "I_* c #823F46", "J_* c #592C31", "K_* c #3F292C", "L_* c #591721", "M_* c #57161E", "N_* c #693132", "O_* c #683436", "P_* c #2F1214", "Q_* c #1F090B", "R_* c #3E2E31", "S_* c #8F848A", "T_* c #C7C7D1", "U_* c #A2A6B2", "V_* c #B9C1CE", "W_* c #A7AFBC", "X_* c #B1B7C5", "Y_* c #BCC0CC", "Z_* c #CED2DE", "`_* c #CDD1DD", " :* c #A3A7A6", ".:* c #989C9B", "+:* c #979D9B", "@:* c #929896", "#:* c #7F807B", "$:* c #7E7F79", "%:* c #82827A", "&:* c #6F6F65", "*:* c #615E55", "=:* c #4A473E", "-:* c #050C04", ";:* c #030A02", ">:* c #090502", ",:* c #0F0802", "':* c #0B0100", "):* c #8F6E67", "!:* c #8E615C", "~:* c #955B5A", "{:* c #B36167", "]:* c #B1545C", "^:* c #39352C", "/:* c #403C33", "(:* c #786F68", "_:* c #645953", "::* c #C8BFC0", "<:* c #B9B0B1", "[:* c #58473D", "}:* c #544238", "|:* c #4F322A", "1:* c #59372E", "2:* c #58362D", "3:* c #57322A", "4:* c #621C12", "5:* c #915A5F", "6:* c #966368", "7:* c #5D3A41", "8:* c #6E535C", "9:* c #7E777E", "0:* c #6D6B6E", "a:* c #5B5A58", "b:* c #4D4E49", "c:* c #52514D", "d:* c #555651", "e:* c #5F605B", "f:* c #63625E", "g:* c #646560", "h:* c #6E6D69", "i:* c #686963", "j:* c #5F5E59", "k:* c #50514B", "l:* c #111507", "m:* c #231719", "n:* c #2A171B", "o:* c #2E151B", "p:* c #3D1A20", "q:* c #55262E", "r:* c #6B2E36", "s:* c #822C37", "t:* c #8B2530", "u:* c #892128", "v:* c #943233", "w:* c #89393C", "x:* c #79383C", "y:* c #56292E", "z:* c #452226", "A:* c #3D2428", "B:* c #2B2225", "C:* c #1C0A06", "D:* c #230A06", "E:* c #300F0A", "F:* c #54181A", "G:* c #652D30", "H:* c #693537", "I:* c #270E12", "J:* c #51444B", "K:* c #8A838B", "L:* c #C0C4CF", "M:* c #B5B7B6", "N:* c #B2B2B2", "O:* c #8B908C", "P:* c #828781", "Q:* c #7F847E", "R:* c #818881", "S:* c #8D948D", "T:* c #8F968F", "U:* c #8C8E8B", "V:* c #878986", "W:* c #7F8180", "X:* c #7E807B", "Y:* c #7A7B73", "Z:* c #7C7E73", "`:* c #7E8075", " <* c #76786D", ".<* c #67695E", "+<* c #55564E", "@<* c #040903", "#<* c #010602", "$<* c #070304", "%<* c #5B362E", "&<* c #92655F", "*<* c #945D58", "=<* c #A0615C", "-<* c #AA605D", ";<* c #A35352", "><* c #A24C4B", ",<* c #564D46", "'<* c #5B524B", ")<* c #B7ADAE", "!<* c #9E9E92", "~<* c #9F9F93", "{<* c #9F9F95", "]<* c #685648", "^<* c #543B34", "/<* c #57352C", "(<* c #563129", "_<* c #4D2B1F", ":<* c #4A281C", "<<* c #631D13", "[<* c #651D11", "}<* c #8C5155", "|<* c #965F65", "1<* c #83545C", "2<* c #6B434E", "3<* c #755761", "4<* c #98828E", "5<* c #AB9EA8", "6<* c #6E6D6B", "7<* c #4D4D43", "8<* c #2A2819", "9<* c #171308", "0<* c #290D0C", "a<* c #38120F", "b<* c #64322B", "c<* c #602E27", "d<* c #2B141A", "e<* c #32131B", "f<* c #421A22", "g<* c #5A2831", "h<* c #6E3139", "i<* c #773038", "j<* c #8F2B35", "k<* c #74383A", "l<* c #412126", "m<* c #3B2226", "n<* c #362629", "o<* c #141E1F", "p<* c #2D0C07", "q<* c #5F2325", "r<* c #27141A", "s<* c #392E34", "t<* c #474249", "u<* c #515058", "v<* c #5D6069", "w<* c #6A7179", "x<* c #88919A", "y<* c #A9B2AF", "z<* c #908F8D", "A<* c #8D8C8A", "B<* c #83847F", "C<* c #858782", "D<* c #868982", "E<* c #838881", "F<* c #80857E", "G<* c #7E837C", "H<* c #7D827B", "I<* c #848681", "J<* c #838580", "K<* c #82847F", "L<* c #7F817C", "M<* c #7C7E79", "N<* c #71736E", "O<* c #6A6C67", "P<* c #666962", "Q<* c #797B70", "R<* c #6E7063", "S<* c #4B4D42", "T<* c #040601", "U<* c #020701", "V<* c #030804", "W<* c #030706", "X<* c #050409", "Y<* c #160000", "Z<* c #270400", "`<* c #5F342D", " [* c #8F5D56", ".[* c #975C54", "+[* c #AB6860", "@[* c #B46964", "#[* c #A75853", "$[* c #9F4C48", "%[* c #8E3632", "&[* c #71170F", "*[* c #403730", "=[* c #433A33", "-[* c #514841", ";[* c #665649", ">[* c #6B594B", ",[* c #56443A", "'[* c #53382F", ")[* c #52342C", "![* c #533229", "~[* c #542F27", "{[* c #481512", "][* c #621E13", "^[* c #631D11", "/[* c #76252B", "([* c #793437", "_[* c #764E57", ":[* c #755560", "<[* c #927C88", "[[* c #B1A4AD", "}[* c #9B919A", "|[* c #908B91", "1[* c #777873", "2[* c #696A62", "3[* c #56564A", "4[* c #130A0F", "5[* c #2F100E", "6[* c #623029", "7[* c #5F2D26", "8[* c #461E14", "9[* c #130804", "0[* c #26171A", "a[* c #2C1319", "b[* c #863C3D", "c[* c #7D3B3D", "d[* c #5F3134", "e[* c #362224", "f[* c #302426", "g[* c #131D1E", "h[* c #3C191D", "i[* c #270D10", "j[* c #241518", "k[* c #1E151A", "l[* c #30333A", "m[* c #434750", "n[* c #5F636C", "o[* c #AEADB5", "p[* c #C9C9D1", "q[* c #9D9E98", "r[* c #8C8F88", "s[* c #8A8D86", "t[* c #8B8E87", "u[* c #8D9089", "v[* c #8E8F89", "w[* c #84857F", "x[* c #83847E", "y[* c #7D7E78", "z[* c #757670", "A[* c #70716B", "B[* c #6C6D67", "C[* c #60615B", "D[* c #5A5B55", "E[* c #4F5146", "F[* c #44463B", "G[* c #34362B", "H[* c #0A0B03", "I[* c #030502", "J[* c #050704", "K[* c #000201", "L[* c #030504", "M[* c #040605", "N[* c #010302", "O[* c #040406", "P[* c #080000", "Q[* c #1E0200", "R[* c #280300", "S[* c #6D403A", "T[* c #9C675F", "U[* c #A3675F", "V[* c #B46F68", "W[* c #B66B66", "X[* c #A4534F", "Y[* c #842D26", "Z[* c #5A514A", "`[* c #6B5B4C", " }* c #583F38", ".}* c #553028", "+}* c #512C23", "@}* c #502E22", "#}* c #4E2C20", "$}* c #621C10", "%}* c #7D3F40", "&}* c #8B5258", "*}* c #8F5E64", "=}* c #80575F", "-}* c #6E4F57", ";}* c #806973", ">}* c #A898A2", ",}* c #A0969F", "'}* c #858585", ")}* c #7B7D78", "!}* c #6C6F68", "~}* c #56594E", "{}* c #44453D", "]}* c #6D3631", "^}* c #65302A", "/}* c #451D13", "(}* c #170805", "_}* c #110705", ":}* c #32151A", "<}* c #3D161B", "[}* c #502127", "}}* c #8A242F", "|}* c #1A0703", "1}* c #693333", "2}* c #653334", "3}* c #28080B", "4}* c #21080B", "5}* c #121318", "6}* c #29262D", "7}* c #3D383F", "8}* c #5C5960", "9}* c #828186", "0}* c #858680", "a}* c #83847C", "b}* c #7D7E76", "c}* c #797873", "d}* c #707169", "e}* c #6A6964", "f}* c #65665E", "g}* c #64635E", "h}* c #56574F", "i}* c #474641", "j}* c #0A0C01", "k}* c #050600", "l}* c #050601", "m}* c #040404", "n}* c #010101", "o}* c #080202", "p}* c #250804", "q}* c #8D5E58", "r}* c #B67F78", "s}* c #B4756E", "t}* c #B66F69", "u}* c #B0625E", "v}* c #6F140F", "w}* c #552E27", "x}* c #B4B1AA", "y}* c #A3A49F", "z}* c #563B32", "A}* c #53352D", "B}* c #512F23", "C}* c #611D10", "D}* c #773737", "E}* c #84474C", "F}* c #905B61", "G}* c #8D6067", "H}* c #714E55", "I}* c #735962", "J}* c #998892", "K}* c #838786", "L}* c #7D827E", "M}* c #6E736D", "N}* c #60625D", "O}* c #4E4E4C", "P}* c #434240", "Q}* c #6F3531", "R}* c #67302B", "S}* c #2E1B1F", "T}* c #6C2F34", "U}* c #89242C", "V}* c #89232E", "W}* c #522B2E", "X}* c #332022", "Y}* c #182223", "Z}* c #101A19", "`}* c #210905", " |* c #602D2A", ".|* c #3A110F", "+|* c #280404", "@|* c #1C121A", "#|* c #221B22", "$|* c #3B363A", "%|* c #7E7E80", "&|* c #C7C3C0", "*|* c #B6B7B1", "=|* c #79796F", "-|* c #67645D", ";|* c #5A5A50", ">|* c #535049", ",|* c #4C4C42", "'|* c #000000", ")|* c #7B544D", "!|* c #AB7A73", "~|* c #C38882", "{|* c #B8756F", "]|* c #B36863", "^|* c #AB5A57", "/|* c #534A43", "(|* c #544B44", "_|* c #B3AFAE", ":|* c #9EA093", "<|* c #A2A497", "[|* c #838071", "}|* c #601C0F", "||* c #793B3C", "1|* c #8C5558", "2|* c #7A555C", "3|* c #6D5259", "4|* c #8B7780", "5|* c #9D919B", "6|* c #8C8F94", "7|* c #888D90", "8|* c #8A9090", "9|* c #858B8B", "0|* c #7B7F7E", "a|* c #666664", "b|* c #5C5B59", "c|* c #4B4A48", "d|* c #393836", "e|* c #040402", "f|* c #280E0D", "g|* c #492225", "h|* c #88222D", "i|* c #8A2630", "j|* c #823137", "k|* c #592C2F", "l|* c #3C2326", "m|* c #151F20", "n|* c #16201F", "o|* c #421210", "p|* c #310806", "q|* c #2E0B09", "r|* c #230908", "s|* c #4B4B49", "t|* c #51524D", "u|* c #5E5D59", "v|* c #6F6E6A", "w|* c #8E8D88", "x|* c #898883", "y|* c #86837E", "z|* c #716966", "A|* c #706865", "B|* c #524A47", "C|* c #3F3A34", "D|* c #050505", "E|* c #060405", "F|* c #050304", "G|* c #010000", "H|* c #A27973", "I|* c #B7857E", "J|* c #B57873", "K|* c #AA5C58", "L|* c #A95553", "M|* c #9E4644", "N|* c #5C534C", "O|* c #807770", "P|* c #9C9F96", "Q|* c #9B9E93", "R|* c #9B9F91", "S|* c #A6AA9C", "T|* c #B0B1A1", "U|* c #807E6F", "V|* c #573E37", "W|* c #543930", "X|* c #6F2F2F", "Y|* c #9D6C70", "Z|* c #835A60", "`|* c #67484E", " 1* c #998993", ".1* c #9B9AA2", "+1* c #8B9093", "@1* c #808281", "#1* c #777775", "$1* c #686866", "%1* c #575755", "&1* c #3D1A1E", "*1* c #2B1C1F", "=1* c #56292C", "-1* c #662829", ";1* c #86222C", ">1* c #812C33", ",1* c #783B40", "'1* c #192221", ")1* c #131D1C", "!1* c #3B0F0C", "~1* c #45423D", "{1* c #4B4642", "]1* c #5E5B54", "^1* c #5C5952", "/1* c #5A554F", "(1* c #4C4743", "_1* c #4B4340", ":1* c #48403D", "<1* c #493F3D", "[1* c #473D3C", "}1* c #3F3534", "|1* c #040400", "11* c #020300", "21* c #050507", "31* c #08060B", "41* c #7A5751", "51* c #B48781", "61* c #B47D78", "71* c #AB6A66", "81* c #A35956", "91* c #A3524F", "01* c #A04A49", "a1* c #751A1F", "b1* c #602F28", "c1* c #837A73", "d1* c #9E9F99", "e1* c #999F95", "f1* c #989E90", "g1* c #A9AD9F", "h1* c #A1A596", "i1* c #ADB09F", "j1* c #7C7D6D", "k1* c #5F5C4B", "l1* c #5F1B0E", "m1* c #591210", "n1* c #7D4141", "o1* c #9D696B", "p1* c #85585D", "q1* c #5F3C42", "r1* c #674C53", "s1* c #9E99A0", "t1* c #8D9598", "u1* c #70706E", "v1* c #5E5E5C", "w1* c #5F2523", "x1* c #53181C", "y1* c #52171B", "z1* c #522427", "A1* c #4B2226", "B1* c #612D31", "C1* c #87212C", "D1* c #84202A", "E1* c #812A33", "F1* c #773A3F", "G1* c #72312F", "H1* c #743530", "I1* c #763634", "J1* c #260D06", "K1* c #0B0400", "L1* c #0D0600", "M1* c #0D0802", "N1* c #413F42", "O1* c #4E4C4F", "P1* c #4A4849", "Q1* c #444243", "R1* c #403E3F", "S1* c #170600", "T1* c #A17A75", "U1* c #B98883", "V1* c #AF746E", "W1* c #AE6964", "X1* c #A35855", "Y1* c #A04C4A", "Z1* c #6C1619", "`1* c #761B20", " 2* c #74191E", ".2* c #5A2F26", "+2* c #9AA096", "@2* c #969E8F", "#2* c #9FA597", "$2* c #A8AB9A", "%2* c #777868", "&2* c #535240", "*2* c #625F4E", "=2* c #513027", "-2* c #601A0E", ";2* c #5D190E", ">2* c #6F3231", ",2* c #7C4445", "'2* c #7F4E52", ")2* c #764F54", "!2* c #6A4B51", "~2* c #957E86", "{2* c #A899A0", "]2* c #ACA2AB", "^2* c #888890", "/2* c #8D9298", "(2* c #8A8F93", "_2* c #7C7C7A", ":2* c #1A0406", "<2* c #240B0E", "[2* c #652A2E", "}2* c #8C232A", "|2* c #87232D", "12* c #783139", "22* c #833F3C", "32* c #813D3A", "42* c #7C3835", "52* c #7D3936", "62* c #81403C", "72* c #713534", "82* c #2D1008", "92* c #0E0701", "02* c #0C0701", "a2* c #08050C", "b2* c #120F18", "c2* c #37353A", "d2* c #5E5C5F", "e2* c #787677", "f2* c #6D6B6C", "g2* c #62615F", "h2* c #0E0100", "i2* c #80625A", "j2* c #B0857F", "k2* c #B37E78", "l2* c #B0716C", "m2* c #AA635F", "n2* c #A35450", "o2* c #711C21", "p2* c #701B20", "q2* c #6F1A1F", "r2* c #70191F", "s2* c #72191F", "t2* c #72171E", "u2* c #74171F", "v2* c #761921", "w2* c #791D22", "x2* c #5B3027", "y2* c #3B3330", "z2* c #3F362F", "A2* c #847B74", "B2* c #9FA09A", "C2* c #9CA298", "D2* c #98A093", "E2* c #979F90", "F2* c #9EA496", "G2* c #A9AC9B", "H2* c #797A6A", "I2* c #545341", "J2* c #615E4D", "K2* c #631B0F", "L2* c #6F3534", "M2* c #72484A", "N2* c #7D6267", "O2* c #937E85", "P2* c #7F7F7D", "Q2* c #6E6E6C", "R2* c #5D5D5B", "S2* c #40403E", "T2* c #270D0C", "U2* c #240807", "V2* c #240608", "W2* c #2E0E11", "X2* c #57292C", "Y2* c #8A222B", "Z2* c #892C36", "`2* c #884443", " 3* c #8D4745", ".3* c #8B4543", "+3* c #813A38", "@3* c #823B39", "#3* c #783232", "$3* c #0E0603", "%3* c #0D0502", "&3* c #000002", "*3* c #030207", "=3* c #040309", "-3* c #323139", ";3* c #413E47", ">3* c #4E4D53", ",3* c #636067", "'3* c #747378", ")3* c #565553", "!3* c #130200", "~3* c #906B65", "{3* c #B3847E", "]3* c #AE7470", "^3* c #A5625C", "/3* c #862E2D", "(3* c #731A20", "_3* c #73181F", ":3* c #751820", "<3* c #791C24", "[3* c #602E25", "}3* c #4B2D23", "|3* c #B7ACAA", "13* c #9AA094", "23* c #9FA395", "33* c #ABAE9D", "43* c #565543", "53* c #553C35", "63* c #55342B", "73* c #641C10", "83* c #734B4C", "93* c #735356", "03* c #896E73", "a3* c #988589", "b3* c #94888C", "c3* c #938A8F", "d3* c #868885", "e3* c #6C6E6B", "f3* c #5D5F5C", "g3* c #474946", "h3* c #2E0C0B", "i3* c #2C0808", "j3* c #31090A", "k3* c #6E272B", "l3* c #871F28", "m3* c #67292C", "n3* c #874344", "o3* c #84383A", "p3* c #7B2F2F", "q3* c #702F2B", "r3* c #6C3028", "s3* c #683429", "t3* c #5A3024", "u3* c #332729", "v3* c #0C0704", "w3* c #0B0803", "x3* c #0A0702", "y3* c #28272F", "z3* c #2C2C36", "A3* c #3B3944", "B3* c #4F4F57", "C3* c #64636B", "D3* c #727378", "E3* c #7F7E84", "F3* c #8A8C8B", "G3* c #7D7D7B", "H3* c #6E706D", "I3* c #130400", "J3* c #190200", "K3* c #966D67", "L3* c #B07E77", "M3* c #A66964", "N3* c #9B5450", "O3* c #8F413D", "P3* c #741B1F", "Q3* c #761A1F", "R3* c #791A20", "S3* c #5C3027", "T3* c #552F26", "U3* c #3F3832", "V3* c #9EA198", "W3* c #9BA195", "X3* c #9BA193", "Y3* c #A6A89A", "Z3* c #ADAE9E", "`3* c #7F7D6E", " 4* c #585544", ".4* c #563830", "+4* c #57362D", "@4* c #671D12", "#4* c #6F3C3B", "$4* c #754948", "%4* c #7E5758", "&4* c #8F6F70", "*4* c #A0878A", "=4* c #8F918E", "-4* c #80827F", ";4* c #626461", ">4* c #50524F", ",4* c #3A2315", "'4* c #360D0B", ")4* c #370909", "!4* c #400E0F", "~4* c #72252B", "{4* c #862129", "]4* c #36130F", "^4* c #7A383C", "/4* c #853D40", "(4* c #74332D", "_4* c #72382D", ":4* c #71382D", "<4* c #6B392E", "[4* c #643731", "}4* c #3D3230", "|4* c #2D2C34", "14* c #3C3A45", "24* c #555561", "34* c #5F616D", "44* c #737581", "54* c #878A93", "64* c #9497A0", "74* c #868B87", "84* c #54534E", "94* c #483B35", "04* c #240701", "a4* c #5C3731", "b4* c #946460", "c4* c #A96F6B", "d4* c #A35F5C", "e4* c #974C47", "f4* c #771B20", "g4* c #7B1C22", "h4* c #622E23", "i4* c #5C3025", "j4* c #563025", "k4* c #4F2F24", "l4* c #462B20", "m4* c #3E352E", "n4* c #9DA095", "o4* c #9DA193", "p4* c #9FA194", "q4* c #A5A799", "r4* c #59483E", "s4* c #6F3E3A", "t4* c #7A4E4D", "u4* c #866361", "v4* c #9A7C7C", "w4* c #A89090", "x4* c #AC9899", "y4* c #919692", "z4* c #8F9490", "A4* c #8D928E", "B4* c #898E8A", "C4* c #828783", "D4* c #777C78", "E4* c #6A6F6B", "F4* c #5C615D", "G4* c #4B504C", "H4* c #3D2115", "I4* c #42110D", "J4* c #440E0C", "K4* c #4D1214", "L4* c #742329", "M4* c #78232A", "N4* c #7A393D", "O4* c #873C41", "P4* c #7D342E", "Q4* c #79392F", "R4* c #7A3C31", "S4* c #773C34", "T4* c #713735", "U4* c #6C3433", "V4* c #63302D", "W4* c #492B23", "X4* c #070506", "Y4* c #030303", "Z4* c #0A090F", "`4* c #08070F", " 5* c #111018", ".5* c #222129", "+5* c #2A2833", "@5* c #383641", "#5* c #4E4C57", "$5* c #5D5D67", "%5* c #676975", "&5* c #747884", "*5* c #848894", "=5* c #8B8F98", "-5* c #949A98", ";5* c #929894", ">5* c #8E9490", ",5* c #7E857E", "'5* c #72716C", ")5* c #615049", "!5* c #6A413B", "~5* c #905D59", "{5* c #5E2F25", "]5* c #503025", "^5* c #3E281D", "/5* c #A6A799", "(5* c #5B4A40", "_5* c #61312D", ":5* c #67403B", "<5* c #7B5856", "[5* c #917371", "}5* c #9E8686", "|5* c #A18D8C", "15* c #979C98", "25* c #8E938F", "35* c #7F8480", "45* c #757A76", "55* c #646965", "65* c #515652", "75* c #434844", "85* c #383836", "95* c #3C2014", "05* c #691E22", "a5* c #772028", "b5* c #91212D", "c5* c #88242E", "d5* c #592227", "e5* c #8A3D45", "f5* c #8E3A3A", "g5* c #823731", "h5* c #813B33", "i5* c #834038", "j5* c #712F30", "k5* c #592228", "l5* c #5A2329", "m5* c #492B21", "n5* c #442B24", "o5* c #18171F", "p5* c #34333B", "q5* c #44434B", "r5* c #53515C", "s5* c #64626D", "t5* c #777580", "u5* c #848490", "v5* c #8E929E", "w5* c #969CA8", "x5* c #8E959F", "y5* c #9198A0", "z5* c #8C9497", "A5* c #8D9695", "B5* c #8B9493", "C5* c #8A9390", "D5* c #8C9590", "E5* c #8B948F", "F5* c #787971", "G5* c #725F59", "H5* c #53342F", "I5* c #7F524D", "J5* c #8F5855", "K5* c #965551", "L5* c #583026", "M5* c #513126", "N5* c #4A2E23", "O5* c #9D9F94", "P5* c #ADAB9C", "Q5* c #7D7A6B", "R5* c #5C4B41", "S5* c #5A433B", "T5* c #6C1413", "U5* c #6B1311", "V5* c #7E625F", "W5* c #88706E", "X5* c #937E7D", "Y5* c #8F8E8A", "Z5* c #7C817D", "`5* c #6F7470", " 6* c #656A66", ".6* c #545452", "+6* c #454543", "@6* c #3B2112", "#6* c #55190E", "$6* c #53190E", "%6* c #521E13", "&6* c #6F1D23", "*6* c #751E26", "=6* c #781E27", "-6* c #91232E", ";6* c #922431", ">6* c #92242F", ",6* c #632727", "'6* c #7B3A3E", ")6* c #824044", "!6* c #883F46", "~6* c #893C44", "{6* c #853832", "]6* c #833A33", "^6* c #844035", "/6* c #88423A", "(6* c #823034", "_6* c #69272B", ":6* c #64262B", "<6* c #66252D", "[6* c #67252F", "}6* c #64292F", "|6* c #5E3C33", "16* c #5A3930", "26* c #150706", "36* c #090100", "46* c #040507", "56* c #060709", "66* c #2E2D35", "76* c #3A3941", "86* c #4D4B56", "96* c #605E69", "06* c #706E79", "a6* c #7E7C87", "b6* c #898794", "c6* c #8B919D", "d6* c #9098A5", "e6* c #8F97A2", "f6* c #828B94", "g6* c #889198", "h6* c #8E9897", "i6* c #8F9A96", "j6* c #949F99", "k6* c #97A29C", "l6* c #86716C", "m6* c #6F4C48", "n6* c #784F4B", "o6* c #8A5954", "p6* c #593127", "q6* c #523227", "r6* c #9D9F92", "s6* c #585141", "t6* c #635A49", "u6* c #5E4C40", "v6* c #563E34", "w6* c #54382D", "x6* c #501615", "y6* c #691312", "z6* c #671311", "A6* c #68433D", "B6* c #73504C", "C6* c #83625D", "D6* c #919594", "E6* c #8D9190", "F6* c #898F8B", "G6* c #8B918D", "H6* c #8C928E", "I6* c #868D86", "J6* c #767873", "K6* c #686964", "L6* c #3B3D38", "M6* c #080800", "N6* c #781D24", "O6* c #7C2025", "P6* c #90252F", "Q6* c #8C222C", "R6* c #932933", "S6* c #7B3432", "T6* c #6D2226", "U6* c #5E130D", "V6* c #7D3D3E", "W6* c #854347", "X6* c #853830", "Y6* c #8D4038", "Z6* c #883231", "`6* c #853538", " 7* c #71292D", ".7* c #5D3430", "+7* c #67463D", "@7* c #71534B", "#7* c #674A42", "$7* c #4C312A", "%7* c #110602", "&7* c #050402", "*7* c #0A0B0F", "=7* c #33323A", "-7* c #3F3E46", ";7* c #57565E", ">7* c #626169", ",7* c #73727A", "'7* c #85858D", ")7* c #93919C", "!7* c #9094A0", "~7* c #949CA7", "{7* c #959DA8", "]7* c #919AA3", "^7* c #969FA8", "/7* c #949DA4", "(7* c #939999", "_7* c #909694", ":7* c #9F807B", "<7* c #895C57", "[7* c #8B544F", "}7* c #783934", "|7* c #685D57", "17* c #B8B3AF", "27* c #583A2F", "37* c #56362B", "47* c #552F24", "57* c #573128", "67* c #542E23", "77* c #7B443D", "87* c #88514A", "97* c #8E5951", "07* c #905B53", "a7* c #8A5D58", "b7* c #8E6F6D", "c7* c #AB9695", "d7* c #C0ACAD", "e7* c #878B8E", "f7* c #898F8F", "g7* c #8E9794", "h7* c #949D98", "i7* c #929B96", "j7* c #8B958D", "k7* c #878F84", "l7* c #83867F", "m7* c #72756E", "n7* c #5F625B", "o7* c #4C514A", "p7* c #222D25", "q7* c #18251C", "r7* c #111E15", "s7* c #08150E", "t7* c #040A08", "u7* c #020204", "v7* c #080500", "w7* c #090600", "x7* c #932935", "y7* c #932532", "z7* c #942633", "A7* c #8D1F2C", "B7* c #912532", "C7* c #952936", "D7* c #99282E", "E7* c #733736", "F7* c #7E4140", "G7* c #864646", "H7* c #904043", "I7* c #9F4948", "J7* c #923D3A", "K7* c #88352F", "L7* c #8C3C33", "M7* c #8F3F36", "N7* c #8D3D34", "O7* c #752E32", "P7* c #73363B", "Q7* c #73504E", "R7* c #816561", "S7* c #7C635E", "T7* c #130600", "U7* c #0A0700", "V7* c #000501", "W7* c #0E0D15", "X7* c #14121D", "Y7* c #201E29", "Z7* c #282631", "`7* c #393840", " 8* c #4F4F59", ".8* c #616169", "+8* c #797981", "@8* c #898991", "#8* c #909398", "$8* c #92969F", "%8* c #90979F", "&8* c #9299A3", "*8* c #939AA4", "=8* c #939AA2", "-8* c #AA8F84", ";8* c #93615A", ">8* c #945550", ",8* c #8C4D46", "'8* c #88433E", ")8* c #863D37", "!8* c #7E302C", "~8* c #652A22", "{8* c #5E332C", "]8* c #554A44", "^8* c #5D524C", "/8* c #837C74", "(8* c #614C3B", "_8* c #5F4A39", ":8* c #563226", "<8* c #75352C", "[8* c #7C3C33", "}8* c #7F3F36", "|8* c #783F38", "18* c #724645", "28* c #896567", "38* c #A18184", "48* c #A78D90", "58* c #A79096", "68* c #A6979C", "78* c #A3A4A8", "88* c #89928D", "98* c #969E93", "08* c #7A7D76", "a8* c #6F766F", "b8* c #656F67", "c8* c #546158", "d8* c #44544A", "e8* c #2B3A33", "f8* c #213029", "g8* c #15241D", "h8* c #0D1C17", "i8* c #111216", "j8* c #0A0500", "k8* c #912E33", "l8* c #952B39", "m8* c #962A39", "n8* c #972838", "o8* c #972737", "p8* c #932333", "q8* c #902030", "r8* c #912232", "s8* c #912534", "t8* c #763938", "u8* c #854545", "v8* c #8C4042", "w8* c #904041", "x8* c #8E3C3E", "y8* c #944342", "z8* c #9C4B48", "A8* c #974643", "B8* c #94433F", "C8* c #93423E", "D8* c #8C3933", "E8* c #8E3B33", "F8* c #934038", "G8* c #934136", "H8* c #8F3C34", "I8* c #6C3636", "J8* c #6C3E3E", "K8* c #6B4C49", "L8* c #5F4743", "M8* c #45322C", "N8* c #170A02", "O8* c #050700", "P8* c #020C03", "Q8* c #040B04", "R8* c #1C1A25", "S8* c #282633", "T8* c #373542", "U8* c #44424F", "V8* c #504E59", "W8* c #5F5F69", "X8* c #73737D", "Y8* c #82828C", "Z8* c #8C8C94", "`8* c #92979D", " 9* c #9299A1", ".9* c #9498A1", "+9* c #A89287", "@9* c #8E7467", "#9* c #7F594E", "$9* c #975B53", "%9* c #97504A", "&9* c #8E4741", "*9* c #87403A", "=9* c #833A34", "-9* c #721415", ";9* c #662D26", ">9* c #5E312B", ",9* c #493E38", "'9* c #564B45", ")9* c #5F524C", "!9* c #60534D", "~9* c #B2B0A4", "{9* c #B6B4A8", "]9* c #B5B3A7", "^9* c #B4B2A6", "/9* c #807766", "(9* c #665543", "_9* c #604B3A", ":9* c #5A3D2F", "<9* c #573126", "[9* c #562E24", "}9* c #522A20", "|9* c #5E3233", "19* c #72494D", "29* c #8B686C", "39* c #A28389", "49* c #A99298", "59* c #9B9096", "69* c #8D938F", "79* c #8F968E", "89* c #8F948D", "99* c #858A86", "09* c #828884", "a9* c #626D67", "b9* c #4F5A56", "c9* c #424E4A", "d9* c #343F3B", "e9* c #273130", "f9* c #1F2827", "g9* c #090601", "h9* c #0D0400", "i9* c #180906", "j9* c #4F2928", "k9* c #972E3C", "l9* c #992F3D", "m9* c #9B2F3E", "n9* c #9C303F", "o9* c #992A3A", "p9* c #942837", "q9* c #8E2432", "r9* c #8E2333", "s9* c #8C2331", "t9* c #8A2130", "u9* c #6D3130", "v9* c #834142", "w9* c #874342", "x9* c #8D4143", "y9* c #8E4040", "z9* c #8E3E3F", "A9* c #914142", "B9* c #A1524E", "C9* c #984945", "D9* c #91403C", "E9* c #923F37", "F9* c #944139", "G9* c #913C35", "H9* c #8A352E", "I9* c #8D3833", "J9* c #6E3232", "K9* c #6D3737", "L9* c #6D3B3A", "M9* c #6C3F3C", "N9* c #68423F", "O9* c #4D312D", "P9* c #0A0000", "Q9* c #010200", "R9* c #040B03", "S9* c #040509", "T9* c #0F1015", "U9* c #1D1E23", "V9* c #22222A", "W9* c #292933", "X9* c #393945", "Y9* c #4F4F5B", "Z9* c #61616D", "`9* c #6D6D77", " 0* c #797983", ".0* c #8D9099", "+0* c #9099A0", "@0* c #9397A0", "#0* c #A09B9F", "$0* c #AD9A94", "%0* c #A68D86", "&0* c #93776C", "*0* c #826255", "=0* c #81554A", "-0* c #90514A", ";0* c #904943", ">0* c #7D3630", ",0* c #731516", "'0* c #61544E", ")0* c #6B5E58", "!0* c #7B706A", "~0* c #B5B2A9", "{0* c #B4B1A8", "]0* c #7B7261", "^0* c #695645", "/0* c #5C3C2F", "(0* c #583227", "_0* c #4F271D", ":0* c #6D4043", "<0* c #865D63", "[0* c #96767B", "}0* c #A68B92", "|0* c #B19EA4", "10* c #9B9D98", "20* c #8E9494", "30* c #818A89", "40* c #707978", "50* c #666F6E", "60* c #57605F", "70* c #3C4242", "80* c #0B0600", "90* c #A03644", "00* c #A13745", "a0* c #992E3E", "b0* c #962D3C", "c0* c #8F2839", "d0* c #882333", "e0* c #86212F", "f0* c #8B232E", "g0* c #7C3C3C", "h0* c #803E3F", "i0* c #8F4343", "j0* c #A45453", "k0* c #9B4C48", "l0* c #994642", "m0* c #903D35", "n0* c #83393A", "o0* c #84514E", "p0* c #885B58", "q0* c #79524D", "r0* c #603D37", "s0* c #131419", "t0* c #1C1C24", "u0* c #3A3A42", "v0* c #46464E", "w0* c #696B77", "x0* c #7E7E8A", "y0* c #8A8C98", "z0* c #94949E", "A0* c #929BA0", "B0* c #919AA1", "C0* c #96969E", "D0* c #C0ABA8", "E0* c #AD918D", "F0* c #8F6E65", "G0* c #825E52", "H0* c #865E52", "I0* c #936156", "J0* c #84443B", "K0* c #843D37", "L0* c #3E3B34", "M0* c #584D47", "N0* c #635650", "O0* c #7D726C", "P0* c #655241", "Q0* c #582D24", "R0* c #532B21", "S0* c #6C373D", "T0* c #7A4D52", "U0* c #977279", "V0* c #B4959B", "W0* c #959096", "X0* c #9B969D", "Y0* c #919699", "Z0* c #8D9295", "`0* c #818689", " a* c #767B7E", ".a* c #6A6E71", "+a* c #5D5E62", "@a* c #4A4B4F", "#a* c #353537", "$a* c #090400", "%a* c #513736", "&a* c #5C3937", "*a* c #A33A49", "=a* c #9C3747", "-a* c #983645", ";a* c #943344", ">a* c #892D3C", ",a* c #872733", "'a* c #852832", ")a* c #743434", "!a* c #803C3D", "~a* c #9B4F4F", "{a* c #994E4B", "]a* c #9D4F4D", "^a* c #9E504E", "/a* c #9C4E4A", "(a* c #A0514D", "_a* c #9F504B", ":a* c #92413D", "b* c #090000", ",b* c #070400", "'b* c #18191E", ")b* c #23232B", "!b* c #313139", "~b* c #43434D", "{b* c #52525C", "]b* c #5E5E68", "^b* c #787882", "/b* c #80828E", "(b* c #9397A2", "_b* c #959CA4", ":b* c #9BA0A6", "c* c #7F818D", ",c* c #838591", "'c* c #969C9C", ")c* c #BEA09E", "!c* c #A57F7C", "~c* c #855551", "{c* c #743F39", "]c* c #7A3E36", "^c* c #834339", "/c* c #7F392F", "(c* c #752C23", "_c* c #6B2F25", ":c* c #693029", "d* c #763A32", ",d* c #803C33", "'d* c #3D3A33", ")d* c #50453F", "!d* c #534640", "~d* c #756862", "{d* c #6F6655", "]d* c #634C3C", "^d* c #592D24", "/d* c #6A2327", "(d* c #673D41", "_d* c #8B686E", ":d* c #A18288", "e* c #939498", ",e* c #8A9493", "'e* c #929C9B", ")e* c #909A9B", "!e* c #8F9897", "~e* c #929898", "{e* c #97969B", "]e* c #828284", "^e* c #727274", "/e* c #636363", "(e* c #5A5A5A", "_e* c #100404", ":e* c #170708", "f* c #E7B0C3", ",f* c #D9A8BB", "'f* c #B78DA1", ")f* c #BF98AA", "!f* c #C09AA9", "~f* c #C299A7", "{f* c #EEC3CD", "]f* c #FFE7EE", "^f* c #FBC0C4", "/f* c #B47274", "(f* c #8E4443", "_f* c #652525", ":f* c #853F41", "g* c #B06260", ",g* c #9E5453", "'g* c #A66060", ")g* c #A86463", "!g* c #9D5C5A", "~g* c #975A59", "{g* c #9E6261", "]g* c #965A59", "^g* c #714846", "/g* c #563432", "(g* c #060500", "_g* c #10151B", ":g* c #151C22", "h* c #7D7C8A", ",h* c #858391", "'h* c #8E8B9C", ")h* c #A6A1A7", "!h* c #8F999B", "~h* c #9C8C8D", "{h* c #CBB1B0", "]h* c #B1928F", "^h* c #9E7875", "/h* c #8D645E", "(h* c #784943", "_h* c #6F3A32", ":h* c #753931", "i* c #5A382C", ",i* c #693632", "'i* c #734641", ")i* c #876563", "!i* c #937575", "~i* c #A58C90", "{i* c #AB9296", "]i* c #AB9AA0", "^i* c #8D8E89", "/i* c #696A65", "(i* c #555754", "_i* c #0E0405", ":i* c #493737", "j* c #A74B4C", ",j* c #AD5758", "'j* c #B46A6B", ")j* c #AE6A6B", "!j* c #B77A79", "~j* c #B67C7B", "{j* c #794341", "]j* c #250000", "^j* c #2F0C06", "/j* c #000602", "(j* c #3E3940", "_j* c #4D4751", ":j* c #59535D", "k* c #7D7A81", ",k* c #8B888F", "'k* c #8D8C92", ")k* c #9598A1", "!k* c #969AA3", "~k* c #999DA6", "{k* c #9298A4", "]k* c #8F96A0", "^k* c #99A39B", "/k* c #95A197", "(k* c #969B94", "_k* c #BFAAA5", ":k* c #B29995", "l* c #8B6E68", ",l* c #0D0000", "'l* c #1F262E", ")l* c #2D343C", "!l* c #484D53", "~l* c #575C62", "{l* c #64696F", "]l* c #787B82", "^l* c #85848A", "/l* c #8E9399", "(l* c #8C9399", "_l* c #8D949A", ":l* c #8C959A", "m* c #514640", ",m* c #7D7270", "'m* c #AEAFAA", ")m* c #B8AEAF", "!m* c #62463A", "~m* c #593129", "{m* c #703E3D", "]m* c #7B4D4D", "^m* c #805453", "/m* c #A07878", "(m* c #86605F", "_m* c #6B4947", ":m* c #664945", "n* c #A5342C", ",n* c #A1352B", "'n* c #9D362D", ")n* c #9C3A31", "!n* c #9A3D35", "~n* c #98453D", "{n* c #8F4039", "]n* c #964B45", "^n* c #A76159", "/n* c #BD7A72", "(n* c #C4837D", "_n* c #9F5E58", ":n* c #92514F", "o* c #99524C", ",o* c #945149", "'o* c #93574C", ")o* c #9D675B", "!o* c #A57166", "~o* c #9C6D65", "{o* c #7C534F", "]o* c #502D2B", "^o* c #675153", "/o* c #6E5F62", "(o* c #8D888E", "_o* c #A39393", ":o* c #B4A19B", "p* c #712C25", ",p* c #54332E", "'p* c #4A2F28", ")p* c #4B4239", "!p* c #544838", "~p* c #6C1921", "{p* c #6D1B0F", "]p* c #6E1F10", "^p* c #732113", "/p* c #69110F", "(p* c #7B3130", "_p* c #84514D", ":p* c #855852", "q* c #992A31", ",q* c #973C37", "'q* c #A0473F", ")q* c #A45045", "!q* c #A35445", "~q* c #A6584C", "{q* c #A55B52", "]q* c #9F5852", "^q* c #955450", "/q* c #7F4B4D", "(q* c #936567", "_q* c #A47D80", ":q* c #B49698", "r* c #772615", ",r* c #722314", "'r* c #623532", ")r* c #4F423A", "!r* c #6B6863", "~r* c #857F71", "{r* c #654B3E", "]r* c #5F4136", "^r* c #58382D", "/r* c #9D2419", "(r* c #982415", "_r* c #A1262B", ":r* c #93372C", "s* c #A33327", ",s* c #A6362A", "'s* c #A8362B", ")s* c #A9342A", "!s* c #A73229", "~s* c #8E2D27", "{s* c #974746", "]s* c #944F48", "^s* c #8F4C43", "/s* c #86463C", "(s* c #945148", "_s* c #8D4841", ":s* c #7E3830", "t* c #6B302C", ",t* c #613532", "'t* c #5D3734", ")t* c #563732", "!t* c #523632", "~t* c #4E3731", "{t* c #554E46", "]t* c #5F5F57", "^t* c #6D6E68", "/t* c #B7A8A5", "(t* c #58362C", "_t* c #5B362D", ":t* c #A32819", "u* c #AE3E2A", ",u* c #AB472F", "'u* c #B35438", ")u* c #C55D42", "!u* c #D36449", "~u* c #DB674E", "{u* c #D0583F", "]u* c #BE422A", "^u* c #BE402A", "/u* c #B53721", "(u* c #A92E1E", "_u* c #931D13", ":u* c #6C322E", "v* c #89181C", ",v* c #693834", "'v* c #623D37", ")v* c #593B33", "!v* c #523730", "~v* c #544741", "{v* c #AEAFA9", "]v* c #A7201C", "^v* c #AA231D", "/v* c #A9241B", "(v* c #A62C1D", "_v* c #AC3926", ":v* c #C64F3B", "w* c #A01913", ",w* c #9F1C12", "'w* c #9B2112", ")w* c #921E0F", "!w* c #901C0F", "~w* c #8F1A10", "{w* c #741513", "]w* c #6D322E", "^w* c #6C3936", "/w* c #683C39", "(w* c #583732", "_w* c #5D4A44", ":w* c #594841", "x* c #AC4325", ",x* c #A83C1F", "'x* c #A4351A", ")x* c #A32F16", "!x* c #A12A16", "~x* c #A02716", "{x* c #962110", "]x* c #93230F", "^x* c #703632", "/x* c #693633", "(x* c #683836", "_x* c #633A36", ":x* c #5E3634", "y* c #F6B88F", ",y* c #CE8660", "'y* c #A14020", ")y* c #A5381B", "!y* c #AA341A", "~y* c #A82B15", "{y* c #A82712", "]y* c #A52313", "^y* c #A22314", "/y* c #962515", "(y* c #952511", "_y* c #94240E", ":y* c #93200D", "z* c #582C1F", ",z* c #4E1615", "'z* c #4F1F13", ")z* c #682014", "!z* c #93190E", "~z* c #991F12", "{z* c #9C2112", "]z* c #A42516", "^z* c #A82616", "/z* c #A92A17", "(z* c #A62C17", "_z* c #AC381F", ":z* c #B44B2E", "A* c #FFC194", ",A* c #FFE4B0", "'A* c #B9814E", ")A* c #9F582A", "!A* c #9C4319", "~A* c #AB431E", "{A* c #A43112", "]A* c #A0270A", "^A* c #A1280D", "/A* c #A0260F", "(A* c #9D2411", "_A* c #992111", ":A* c #8E1E10", "B* c #E4926A", ",B* c #FEB58A", "'B* c #FFCF9F", ")B* c #FAB888", "!B* c #B06136", "~B* c #AA4E27", "{B* c #AC411F", "]B* c #AF391B", "^B* c #A3250C", "/B* c #A5240E", "(B* c #A2240E", "_B* c #9C2111", ":B* c #723834", "C* c #9A3F3C", ",C* c #733633", "'C* c #614039", ")C* c #6B5A50", "!C* c #613F35", "~C* c #921C12", "{C* c #9D2213", "]C* c #AA2B1A", "^C* c #B0311E", "/C* c #AC341C", "(C* c #C05F3E", "_C* c #CE7A55", ":C* c #EDA479", "D* c #9D270B", ",D* c #A42711", "'D* c #A92A19", ")D* c #9B2313", "!D* c #9F1F12", "~D* c #8C1710", "{D* c #922731", "]D* c #6F3C38", "^D* c #66443B", "/D* c #61463D", "(D* c #6B5E55", "_D* c #65453A", ":D* c #6F251A", "E* c #9C370D", ",E* c #9F330F", "'E* c #A42C14", ")E* c #94252E", "!E* c #71342F", "~E* c #6E3732", "{E* c #723F3B", "]E* c #703F3A", "^E* c #6D403B", "/E* c #654840", "(E* c #C0B7B8", "_E* c #654D41", ":E* c #63453B", "F* c #5F423A", ",F* c #603F36", "'F* c #5D2D23", ")F* c #6D291E", "!F* c #79180F", "~F* c #AA2111", "{F* c #B42215", "]F* c #B8291B", "^F* c #B23324", "/F* c #9F5031", "(F* c #AC6B43", "_F* c #D18E63", ":F* c #F3A776", "G* c #6E4740", ",G* c #704944", "'G* c #705248", ")G* c #695145", "!G* c #5F3E35", "~G* c #58372E", "{G* c #942713", "]G* c #95270E", "^G* c #952309", "/G* c #9E2A13", "(G* c #9B351E", "_G* c #A75337", ":G* c #A76744", "H* c #B5B5AD", ",H* c #B0B0A6", "'H* c #B2B2A8", ")H* c #6D271B", "!H* c #8E250F", "~H* c #902709", "{H* c #94280C", "]H* c #BF7858", "^H* c #FFE4C0", "/H* c #FFD8AF", "(H* c #F3B58C", "_H* c #B5633B", ":H* c #962805", "I* c #C38258", ",I* c #8F3510", "'I* c #912904", ")I* c #9D2F0E", "!I* c #A33011", "~I* c #A42C13", "{I* c #9E2311", "]I* c #6F342E", "^I* c #6F3833", "/I* c #6D3B34", "(I* c #71403B", "_I* c #6C3F3A", ":I* c #714A45", "J* c #A9250E", ",J* c #B02311", "'J* c #AC2512", ")J* c #931E0D", "!J* c #983C25", "~J* c #B8795A", "{J* c #FFDBB4", "]J* c #FFDAAF", "^J* c #FCCC9E", "/J* c #833F12", "(J* c #7B2400", "_J* c #942A03", ":J* c #9D2B07", "K* c #9D2C0E", ",K* c #A1240E", "'K* c #A02311", ")K* c #951B0E", "!K* c #931B0D", "~K* c #87160E", "{K* c #9B2835", "]K* c #9E2C36", "^K* c #A12F39", "/K* c #6D2C26", "(K* c #6C372F", "_K* c #73413A", ":K* c #74423B", "L* c #AF2D20", ",L* c #C37E57", "'L* c #FFE0B4", ")L* c #FCB58B", "!L* c #B2603A", "~L* c #731500", "{L* c #8A1E01", "]L* c #A12B11", "^L* c #A52911", "/L* c #941A0B", "(L* c #90180A", "_L* c #91180D", ":L* c #8E180E", "M* c #68332B", ",M* c #713F36", "'M* c #714F46", ")M* c #B1B1A5", "!M* c #5C4C3C", "~M* c #694E43", "{M* c #64473F", "]M* c #61433B", "^M* c #56352E", "/M* c #54312B", "(M* c #AF3526", "_M* c #B1422E", ":M* c #B45038", "N* c #F5A780", ",N* c #DD8861", "'N* c #BD613A", ")N* c #AF4724", "!N* c #B2411F", "~N* c #B53E1E", "{N* c #B3371D", "]N* c #A42715", "^N* c #A02213", "/N* c #941A0F", "(N* c #8D1610", "_N* c #734138", ":N* c #725047", "O* c #583D2C", ",O* c #5B3729", "'O* c #583323", ")O* c #542C20", "!O* c #A9271A", "~O* c #A63C22", "{O* c #A33E22", "]O* c #A54022", "^O* c #AB4425", "/O* c #C55436", "(O* c #C44E30", "_O* c #AC3314", ":O* c #AD3616", "P* c #C1613B", ",P* c #DC7C54", "'P* c #F3916A", ")P* c #F58D68", "!P* c #D36542", "~P* c #B23F20", "{P* c #A63314", "]P* c #A53318", "^P* c #A03115", "/P* c #9C3016", "(P* c #A0321B", "_P* c #982F3D", ":P* c #9D3745", "Q* c #774C46", ",Q* c #77504B", "'Q* c #795650", ")Q* c #6B5750", "!Q* c #ADABAE", "~Q* c #6A4C41", "{Q* c #603830", "]Q* c #46181A", "^Q* c #4C1B1F", "/Q* c #A52C17", "(Q* c #BB3625", "_Q* c #B3301C", ":Q* c #B53E26", "R* c #8C7D76", ",R* c #6A5949", "'R* c #69473D", ")R* c #664138", "!R* c #633630", "~R* c #411816", "{R* c #82180B", "]R* c #861A0D", "^R* c #9A210C", "/R* c #A32C14", "(R* c #B23821", "_R* c #B73422", ":R* c #C84A34", "S* c #983240", ",S* c #A13F4E", "'S* c #A7464D", ")S* c #744742", "!S* c #754A44", "~S* c #78554F", "{S* c #A4A4A6", "]S* c #705F4F", "^S* c #501D22", "/S* c #87190C", "(S* c #8C1B0D", "_S* c #A83218", ":S* c #B13E23", "T* c #56382D", ",T* c #742015", "'T* c #8B1B0D", ")T* c #AE4124", "!T* c #B35232", "~T* c #B9603E", "{T* c #D17D59", "]T* c #F4A57C", "^T* c #FFC298", "/T* c #FFBD91", "(T* c #E59467", "_T* c #C26B40", ":T* c #9E3B14", "U* c #902211", ",U* c #932411", "'U* c #982311", ")U* c #A1220F", "!U* c #9F250E", "~U* c #A43017", "{U* c #AC3F22", "]U* c #AD4927", "^U* c #BD6438", "/U* c #DC8C5B", "(U* c #E9A06D", "_U* c #FBB581", ":U* c #FFCE97", "V* c #7F675D", ",V* c #6A564F", "'V* c #7E6B65", ")V* c #7D2519", "!V* c #8C2214", "~V* c #932413", "{V* c #972412", "]V* c #A41F10", "^V* c #A82010", "/V* c #AA2514", "(V* c #A92F18", "_V* c #B54227", ":V* c #C25737", "W* c #999D8F", ",W* c #674138", "'W* c #60312B", ")W* c #5D2C27", "!W* c #491718", "~W* c #401618", "{W* c #7D170B", "]W* c #7E1609", "^W* c #B02818", "/W* c #AC2B16", "(W* c #CA6141", "_W* c #F18D69", ":W* c #EE8C65", "X* c #DC845C", ",X* c #E17F5A", "'X* c #D46746", ")X* c #A92C0E", "!X* c #B02C13", "~X* c #AD2910", "{X* c #A8260E", "]X* c #A23C49", "^X* c #6E3836", "/X* c #74483F", "(X* c #744C42", "_X* c #765246", ":X* c #6F5C55", "Y* c #6A3330", ",Y* c #67312F", "'Y* c #6D3735", ")Y* c #744942", "!Y* c #78534A", "~Y* c #7D6156", "{Y* c #716059", "]Y* c #A12617", "^Y* c #9B2710", "/Y* c #9B3117", "(Y* c #741A00", "_Y* c #934821", ":Y* c #FFC89C", "Z* c #B2361A", ",Z* c #AB3A1A", "'Z* c #8D2C09", ")Z* c #A04E26", "!Z* c #EAAA7E", "~Z* c #FFD3A4", "{Z* c #FFB383", "]Z* c #C66E40", "^Z* c #9F3D16", "/Z* c #A03511", "(Z* c #A02A0E", "_Z* c #9A1E04", ":Z* c #9D1F09", "`* c #77635A", ",`* c #6E5D55", "'`* c #941C0C", ")`* c #921D0B", "!`* c #99250E", "~`* c #A22B13", "{`* c #A73117", "]`* c #B24123", "^`* c #AE4D2A", "/`* c #A34F2A", "(`* c #9D562C", "_`* c #B5784B", ":`* c #BF8152", "<`* c #B76637", "[`* c #AB4E22", "}`* c #A8401B", "|`* c #AA3917", "1`* c #AB2814", "2`* c #9B1A07", "3`* c #9E2415", "4`* c #6C3D37", "5`* c #6D4239", "6`* c #785249", "7`* c #79574E", "8`* c #7A5C54", "9`* c #7B6057", "0`* c #7B625B", "a`* c #70635B", "b`* c #A7A3A4", "c`* c #BAB6AD", "d`* c #9D2612", "e`* c #A42B16", "f`* c #A43116", "g`* c #AA3D20", "h`* c #A94525", "i`* c #A94C2A", "j`* c #984922", "k`* c #AB663C", "l`* c #D89D71", "m`* c #DC9C6E", "n`* c #B96738", "o`* c #9E3F13", "p`* c #9B300C", "q`* c #AF3D1B", "r`* c #B4381E", "s`* c #AD2D14", "t`* c #AA2713", "u`* c #78574E", "v`* c #7B5D55", "w`* c #674B3F", "x`* c #9D2E12", "y`* c #9F3618", "z`* c #9B4621", "A`* c #8F441C", "B`* c #C08054", "C`* c #FFDBAF", "D`* c #DC885C", "E`* c #99380D", "F`* c #7E1200", "G`* c #A02E0C", "H`* c #B73920", "I`* c #AC2A12", "J`* c #A6210E", "K`* c #AA2715", "L`* c #961711", "M`* c #581415", "N`* c #6B3E38", "O`* c #6C5B4B", "P`* c #6A5043", "Q`* c #A83119", "R`* c #A03316", "S`* c #A54222", "T`* c #832B07", "U`* c #9B4C25", "V`* c #864118", "W`* c #FDC499", "X`* c #FFE8BC", "Y`* c #B96539", "Z`* c #821F00", "``* c #831500", " = c #AB2710", ". = c #AF2A17", "+ = c #A11E0C", "@ = c #661210", "# = c #70453E", "$ = c #734C45", "% = c #77635C", "& = c #ABA9AA", "* = c #6B5144", "= = c #684C40", "- = c #A62416", "; = c #A82B19", "> = c #A8311B", ", = c #AB3F23", "' = c #993B19", ") = c #96441E", "! = c #934A21", "~ = c #C6855B", "{ = c #A14A1F", "] = c #7E1900", "^ = c #881A00", "/ = c #AA3313", "( = c #B22B18", "_ = c #A5200F", ": = c #6B3938", "< = c #6D453D", "[ = c #714A43", "} = c #75524C", "| = c #775E59", "1 = c #745F5A", "2 = c #6D5E59", "3 = c #6D5346", "4 = c #A52017", "5 = c #AF472A", "6 = c #8D3311", "7 = c #A75933", "8 = c #904D23", "9 = c #FFCBA1", "0 = c #FFDEB2", "a = c #FFEAC0", "b = c #DD9E73", "c = c #8E370C", "d = c #841D00", "e = c #972604", "f = c #AD3415", "g = c #B42B19", "h = c #A62110", "i = c #795B53", "j = c #7A5F58", "k = c #735E59", "l = c #6F5347", "m = c #501511", "n = c #AA2119", "o = c #AA2419", "p = c #AC2A1C", "q = c #A94428", "r = c #8E3815", "s = c #A96139", "t = c #A3663A", "u = c #FFE4B8", "v = c #FFD6A9", "w = c #FFD2A7", "x = c #AB6C41", "y = c #92390F", "z = c #982E06", "A = c #A73513", "B = c #AF2812", "C = c #A61E0E", "D = c #6B443D", "E = c #7A5E5A", "F = c #726461", "G = c #564939", "H = c #715B4D", "I = c #6C4C41", "J = c #A8231E", "K = c #AC211C", "L = c #AE241A", "M = c #A23F22", "N = c #A24F2D", "O = c #B06C45", "P = c #D39A6F", "Q = c #FFDEB1", "R = c #FFDDAF", "S = c #E4B186", "T = c #9C5D32", "U = c #9A4117", "V = c #A73B14", "W = c #AD3817", "X = c #AA2F10", "Y = c #B32B15", "Z = c #73524D", "` = c #785B55", " .= c #74615B", "..= c #BBB6B2", "+.= c #554838", "@.= c #6E5246", "#.= c #6B4B40", "$.= c #A9241F", "%.= c #B0221E", "&.= c #AF251B", "*.= c #A13F22", "=.= c #B86845", "-.= c #CC8D64", ";.= c #FFCFA3", ">.= c #FFE6B8", ",.= c #CC9B70", "'.= c #A96A3F", ").= c #9C4017", "!.= c #AA3E17", "~.= c #A93413", "{.= c #A5280A", "].= c #B22A14", "^.= c #B12816", "/.= c #6A3A38", "(.= c #6D463F", "_.= c #75544F", ":.= c #7B5F5B", "<.= c #765E5A", "[.= c #705D59", "}.= c #6F5E4E", "|.= c #6D5145", "1.= c #6A4A3F", "2.= c #633D34", "3.= c #AB2621", "4.= c #B1231F", "5.= c #B2251C", "6.= c #AF2B1E", "7.= c #A34124", "8.= c #BE704C", "9.= c #F1B38A", "0.= c #FFE5B8", "a.= c #FFD9AD", "b.= c #B8875C", "c.= c #9A3E15", "d.= c #AC3F18", "e.= c #AB3615", "f.= c #A72A0C", "g.= c #AE2711", "h.= c #B02510", "i.= c #AD2110", "j.= c #941D23", "k.= c #6B3F3C", "l.= c #6E4742", "m.= c #724F49", "n.= c #765550", "o.= c #7B5E58", "p.= c #7B625D", "q.= c #76615C", "r.= c #7C716D", "s.= c #6C5245", "t.= c #6F271B", "u.= c #912115", "v.= c #AC261D", "w.= c #B0261C", "x.= c #B0281C", "y.= c #A3351C", "z.= c #9D4424", "A.= c #B26D46", "B.= c #FFE2B4", "C.= c #FFDAAC", "D.= c #F7C394", "E.= c #AC7244", "F.= c #A65D30", "G.= c #A03F15", "H.= c #B3431E", "I.= c #B23B1B", "J.= c #AE3115", "K.= c #AF2B14", "L.= c #A9200D", "M.= c #A61D0B", "N.= c #AF2719", "O.= c #A42013", "P.= c #704840", "Q.= c #755048", "R.= c #7C5F57", "S.= c #614E48", "T.= c #ACAAAD", "U.= c #797262", "V.= c #6B5446", "W.= c #5F2825", "X.= c #722418", "Y.= c #752619", "Z.= c #79271B", "`.= c #7F2618", " += c #931D0F", ".+= c #A6371C", "++= c #9D401F", "@+= c #8F4623", "#+= c #BD865D", "$+= c #FFE1B4", "%+= c #FFDCAB", "&+= c #FFE5B3", "*+= c #EFAD79", "=+= c #BA6D37", "-+= c #AB3E17", ";+= c #B43D1D", ">+= c #B33A1D", ",+= c #AB2816", "'+= c #AC2718", ")+= c #AA2418", "!+= c #A52115", "~+= c #9C1C11", "{+= c #75191E", "]+= c #73181D", "^+= c #6F3A36", "/+= c #6E3F35", "(+= c #764A3D", "_+= c #784E40", ":+= c #724C3F", "<+= c #735145", "[+= c #7E6055", "}+= c #806961", "|+= c #61524B", "1+= c #847673", "2+= c #AAA5A9", "3+= c #BAAFAD", "4+= c #B3B3A9", "5+= c #B6B3AA", "6+= c #6F2316", "7+= c #732417", "8+= c #852316", "9+= c #8C1E11", "0+= c #A12B1D", "a+= c #AC2813", "b+= c #A2391B", "c+= c #97431F", "d+= c #8B4D26", "e+= c #BC8D63", "f+= c #FFE1B2", "g+= c #FFDEAC", "h+= c #FFDCA9", "i+= c #E69F69", "j+= c #B9632A", "k+= c #BF5A26", "l+= c #AB3914", "m+= c #B2361C", "n+= c #AA2E16", "o+= c #A62118", "p+= c #9E1E11", "q+= c #832114", "r+= c #784A3A", "s+= c #794E3E", "t+= c #7D675C", "u+= c #6B5851", "v+= c #665750", "w+= c #702417", "x+= c #742518", "y+= c #76271A", "z+= c #8A1C0F", "A+= c #AE2B17", "B+= c #AE2C16", "C+= c #A93015", "D+= c #A1381A", "E+= c #964220", "F+= c #9A5F37", "G+= c #C99C72", "H+= c #FFE5B5", "I+= c #FFE5B2", "J+= c #FFD7A2", "K+= c #D6935C", "L+= c #B05B24", "M+= c #BD5927", "N+= c #A73510", "O+= c #AF3617", "P+= c #AF3319", "Q+= c #A41F16", "R+= c #704032", "S+= c #774939", "T+= c #81665B", "U+= c #776358", "V+= c #6C5D56", "W+= c #B1A6AA", "X+= c #722619", "Y+= c #78261A", "Z+= c #952318", "`+= c #B02E18", " @= c #9D3518", ".@= c #923F1D", "+@= c #B57B53", "@@= c #E0B78B", "#@= c #FFEABC", "$@= c #FFD49F", "%@= c #CE8D57", "&@= c #A9571F", "*@= c #B95523", "=@= c #A5330E", "-@= c #AE3218", ";@= c #9F1F14", ">@= c #714133", ",@= c #77493A", "'@= c #784C3F", ")@= c #754E3F", "!@= c #78564A", "~@= c #816358", "{@= c #7D6559", "]@= c #715D54", "^@= c #6A5750", "/@= c #72635E", "(@= c #ADA7AB", "_@= c #72281D", ":@= c #73291E", "<@= c #73271A", "[@= c #832519", "}@= c #892418", "|@= c #892317", "1@= c #A2281B", "2@= c #B12C19", "3@= c #973214", "4@= c #8C3C19", "5@= c #C8916A", "6@= c #F5CFA2", "7@= c #FFEDBE", "8@= c #FFF2BF", "9@= c #FCCD99", "0@= c #C68752", "a@= c #A2511A", "b@= c #AC4A19", "c@= c #A4320D", "d@= c #A82C14", "e@= c #754A3A", "f@= c #774D3F", "g@= c #755040", "h@= c #7B594D", "i@= c #826459", "j@= c #847464", "k@= c #742A1F", "l@= c #75291C", "m@= c #7E2419", "n@= c #82261B", "o@= c #A62C1F", "p@= c #B22D1A", "q@= c #B3311B", "r@= c #933011", "s@= c #863A16", "t@= c #C7926A", "u@= c #FFDCB0", "v@= c #FFEEBF", "w@= c #EABC8A", "x@= c #B87B45", "y@= c #994914", "z@= c #9E3E0E", "A@= c #A3330E", "B@= c #A92D15", "C@= c #952029", "D@= c #724437", "E@= c #764C3E", "F@= c #765043", "G@= c #7D5B4F", "H@= c #82665A", "I@= c #775F55", "J@= c #ACA3A6", "K@= c #AEA8AC", "L@= c #77291D", "M@= c #75271B", "N@= c #A72B1F", "O@= c #A92D21", "P@= c #B5301D", "Q@= c #B6341E", "R@= c #A52F13", "S@= c #913010", "T@= c #853B16", "U@= c #B7835C", "V@= c #FFE1B7", "W@= c #FFEFC2", "X@= c #FFE9BA", "Y@= c #D6A876", "Z@= c #AA6C39", "`@= c #934310", " #= c #983808", ".#= c #A1310C", "+#= c #AB3213", "@#= c #A21D14", "##= c #734538", "$#= c #75493C", "%#= c #764C40", "&#= c #7E5E51", "*#= c #765E54", "=#= c #60514A", "-#= c #7F726C", ";#= c #AAA4A8", ">#= c #782A1E", ",#= c #8D180E", "'#= c #AB2617", ")#= c #B7321F", "!#= c #B93721", "~#= c #923111", "{#= c #A8774F", "]#= c #FFE4B9", "^#= c #FFF3C6", "/#= c #FFE7B9", "(#= c #CA9C6B", "_#= c #A26433", ":#= c #99380B", "<#= c #A02E0A", "[#= c #AA3112", "}#= c #AD3117", "|#= c #A21E12", "1#= c #A11C13", "2#= c #A02013", "3#= c #941F28", "4#= c #5B110E", "5#= c #73443A", "6#= c #744C40", "7#= c #7F5F54", "8#= c #AEA9AD", "9#= c #6E584A", "0#= c #5E180E", "a#= c #5D170D", "b#= c #61302B", "c#= c #772519", "d#= c #AC2716", "e#= c #BC3B25", "f#= c #AE3B20", "g#= c #8C2D0D", "h#= c #732A07", "i#= c #B88661", "j#= c #FFF1C8", "k#= c #FFEEC3", "l#= c #FFEDC0", "m#= c #D6A678", "n#= c #8C4C1E", "o#= c #853102", "p#= c #A03B0F", "q#= c #AE3C18", "r#= c #AE3516", "s#= c #A92D13", "t#= c #A01B12", "u#= c #8C2419", "v#= c #911D26", "w#= c #931E27", "x#= c #734339", "y#= c #74453B", "z#= c #71493D", "A#= c #724E42", "B#= c #5E4D45", "C#= c #BFB5B6", "D#= c #A9A2A9", "E#= c #B0AEAF", "F#= c #B1AFB0", "G#= c #AA2B1C", "H#= c #AE2918", "I#= c #B32F1A", "J#= c #AA371C", "K#= c #882909", "L#= c #712805", "M#= c #DCAA85", "N#= c #FFF9D1", "O#= c #FFEBC1", "P#= c #FFECC2", "Q#= c #DBA87D", "R#= c #823D13", "S#= c #701500", "T#= c #952B03", "U#= c #AF3A17", "V#= c #774D41", "W#= c #71493F", "X#= c #744F46", "Y#= c #7F6157", "Z#= c #5C4B44", "`#= c #AEACAD", " $= c #7C2A1F", ".$= c #80291F", "+$= c #8D251A", "@$= c #A52218", "#$= c #AC2D1E", "$$= c #B12C1B", "%$= c #B5311C", "&$= c #BA3923", "*$= c #A53217", "=$= c #822303", "-$= c #6F2603", ";$= c #E3B18C", ">$= c #F5D5AE", ",$= c #FFDFB8", "'$= c #D29872", ")$= c #80350E", "!$= c #771500", "~$= c #A33510", "{$= c #A82C12", "]$= c #871A20", "^$= c #72463B", "/$= c #714B40", "($= c #82645A", "_$= c #614D44", ":$= c #A9A3A7", "<$= c #ADA6AD", "[$= c #4A180F", "}$= c #74271D", "|$= c #9F261D", "1$= c #B22D1C", "2$= c #B6351F", "3$= c #9F2C11", "4$= c #812202", "5$= c #752A0A", "6$= c #FFDAB8", "7$= c #FFEECA", "8$= c #FFEAC6", "9$= c #FFE4C1", "0$= c #B37350", "a$= c #792503", "b$= c #892100", "c$= c #A32E0D", "d$= c #AB3414", "e$= c #A93011", "f$= c #A62A10", "g$= c #724C41", "h$= c #79574D", "i$= c #84665C", "j$= c #736562", "k$= c #B6B0B2", "l$= c #ADA8AE", "m$= c #AF2C1A", "n$= c #B2301A", "o$= c #B4331D", "p$= c #9D2A0F", "q$= c #8A280B", "r$= c #843919", "s$= c #FFDCBA", "t$= c #FFDFBD", "u$= c #FFEDCD", "v$= c #FFCEAD", "w$= c #7D3817", "x$= c #6D1200", "y$= c #9E2D0F", "z$= c #9C2102", "A$= c #A62D0E", "B$= c #724A40", "C$= c #714B42", "D$= c #7A584E", "E$= c #55463F", "F$= c #B2ACAE", "G$= c #AAA5AC", "H$= c #562217", "I$= c #AE2B19", "J$= c #B3321C", "K$= c #A22F14", "L$= c #99371A", "M$= c #A05434", "N$= c #FDC4A6", "O$= c #FACDAC", "P$= c #FFDDBD", "Q$= c #E0AB8C", "R$= c #6B2003", "S$= c #7D1B00", "T$= c #B33B22", "U$= c #AA2A0F", "V$= c #A82D0E", "W$= c #A42B0C", "X$= c #A4280E", "Y$= c #A11D11", "Z$= c #6F493E", "`$= c #6E4940", " %= c #7B594F", ".%= c #866961", "+%= c #584944", "@%= c #AEA9AF", "#%= c #6B5547", "$%= c #541414", "%%= c #A21F15", "&%= c #AC4A2D", "*%= c #BF7051", "=%= c #FFC7A9", "-%= c #FFE0BF", ";%= c #FBCCAE", ">%= c #C78E71", ",%= c #87371C", "'%= c #9A341B", ")%= c #AB2F17", "!%= c #B7331A", "~%= c #A2290A", "{%= c #A3270D", "]%= c #6E483D", "^%= c #6C473E", "/%= c #79594E", "(%= c #5B4C47", "_%= c #A6A1A8", ":%= c #999B90", "<%= c #786858", "[%= c #B53921", "}%= c #B03E23", "|%= c #BB5839", "1%= c #D68162", "2%= c #D08969", "3%= c #F2B394", "4%= c #C98A6B", "5%= c #9C5237", "6%= c #AA3D26", "7%= c #9A1C06", "8%= c #C13D26", "9%= c #A3270B", "0%= c #A01E11", "a%= c #9F1D10", "b%= c #9F251A", "c%= c #8C241B", "d%= c #84171A", "e%= c #6D473C", "f%= c #856860", "g%= c #7D726E", "h%= c #BFB9B9", "i%= c #A4A79C", "j%= c #9D9F91", "k%= c #B0B1A3", "l%= c #898876", "m%= c #583C31", "n%= c #63312A", "o%= c #9E2514", "p%= c #B13A24", "q%= c #B34127", "r%= c #C25B3C", "s%= c #DA7958", "t%= c #F39675", "u%= c #D47758", "v%= c #B6573B", "w%= c #AE482F", "x%= c #AF412A", "y%= c #A82918", "z%= c #A72613", "A%= c #A52411", "B%= c #A32111", "C%= c #8B2920", "D%= c #7C2619", "E%= c #7B181D", "F%= c #693430", "G%= c #754843", "H%= c #6F4940", "I%= c #64534B", "J%= c #867D78", "K%= c #A0A398", "L%= c #9CA091", "M%= c #B1B2A4", "N%= c #8C8B79", "O%= c #5D5040", "P%= c #56382E", "Q%= c #573029", "R%= c #632E28", "S%= c #9E2615", "T%= c #AC3A22", "U%= c #AF4326", "V%= c #C65D3F", "W%= c #E47D5C", "X%= c #FB9272", "Y%= c #E17656", "Z%= c #C6573C", "`%= c #BA462D", " &= c #B33A27", ".&= c #AC2A1A", "+&= c #7A2417", "@&= c #782517", "#&= c #7C171D", "$&= c #754946", "%&= c #6C4A40", "&&= c #77594F", "*&= c #62534C", "=&= c #5A5047", "-&= c #BDBAB3", ";&= c #A0A6A2", ">&= c #9DA192", ",&= c #B2B3A5", "'&= c #8F8E7C", ")&= c #5F5242", "!&= c #55372D", "~&= c #4F271F", "{&= c #A42D19", "]&= c #A9371F", "^&= c #A93921", "/&= c #AE4225", "(&= c #CB6244", "_&= c #EE8565", ":&= c #FC9373", "<&= c #E47959", "[&= c #C95A3F", "}&= c #AF3623", "|&= c #A62718", "1&= c #AE2C1E", "2&= c #762315", "3&= c #774B48", "4&= c #724B44", "5&= c #6B493F", "6&= c #C4C1BA", "7&= c #9FA394", "8&= c #8E8D7B", "9&= c #A62B1B", "0&= c #A62F1B", "a&= c #A7351D", "b&= c #A6361E", "c&= c #D26649", "d&= c #F68D6D", "e&= c #FE9575", "f&= c #E27757", "g&= c #C4553A", "h&= c #AE3522", "i&= c #83181E", "j&= c #794D4A", "k&= c #744D46", "l&= c #6A483E", "m&= c #6B574E", "n&= c #C7C4BD", "o&= c #A7A7A7", "p&= c #ADAFAC", "q&= c #9EA196", "r&= c #A3A798", "s&= c #69614E", "t&= c #A52C1B", "u&= c #B24629", "v&= c #D66A4D", "w&= c #F88F6F", "x&= c #FE9373", "y&= c #DC6F50", "z&= c #AF3B22", "A&= c #B03523", "B&= c #AA281A", "C&= c #AA2619", "D&= c #A82418", "E&= c #84191F", "F&= c #7A4E4B", "G&= c #6C453E", "H&= c #69554C", "I&= c #BCB8B5", "J&= c #A6AA9B", "K&= c #AFB0A2", "L&= c #8B8A78", "M&= c #992319", "N&= c #B84B2E", "O&= c #D86C4F", "P&= c #F58C6C", "Q&= c #F48969", "R&= c #D06344", "S&= c #B03120", "T&= c #AB291B", "U&= c #AA261A", "V&= c #A92519", "W&= c #A62216", "X&= c #8B2A24", "Y&= c #7B4F4C", "Z&= c #7D5F55", "`&= c #67534A", " *= c #64554E", ".*= c #A7AB9C", "+*= c #5A3F34", "@*= c #A72817", "#*= c #AA361F", "$*= c #BD5033", "%*= c #D96D50", "&*= c #F28767", "**= c #E6795A", "=*= c #C6593A", "-*= c #A9321A", ";*= c #AE2F1E", ">*= c #AD291C", ",*= c #AB271B", "'*= c #AA251C", ")*= c #9B362E", "!*= c #922D25", "~*= c #8E2B26", "{*= c #735148", "]*= c #BEB6B4", "^*= c #91907E", "/*= c #A32413", "(*= c #AC3821", "_*= c #B34129", ":*= c #C25337", "<*= c #DA6D50", "[*= c #ED8262", "}*= c #DA6D4E", "|*= c #C05133", "1*= c #AB391F", "2*= c #AB2C1B", "3*= c #B12D20", "4*= c #A13F36", "5*= c #97352C", "6*= c #794E48", "7*= c #A0A495", "8*= c #575443", "9*= c #4F120F", "0*= c #A62D1A", "a*= c #AA331D", "b*= c #B9452E", "c*= c #CD5E42", "d*= c #DC6F52", "e*= c #E17455", "f*= c #C15234", "g*= c #AF371F", "h*= c #AC2D1C", "i*= c #B02A1E", "j*= c #A72219", "k*= c #932E26", "l*= c #A7453C", "m*= c #A9473E", "n*= c #933229", "o*= c #76180E", "p*= c #74180D", "q*= c #673632", "r*= c #71413D", "s*= c #806760", "t*= c #5A4B44", "u*= c #9F9FA1", "v*= c #A2A697", "w*= c #6A5D4D", "x*= c #AB341E", "y*= c #B44029", "z*= c #CF6243", "A*= c #C45738", "B*= c #BD4E30", "C*= c #B54128", "D*= c #9D3C33", "E*= c #AA4940", "F*= c #9B3D33", "G*= c #71150A", "H*= c #68544B", "I*= c #B03122", "J*= c #AC331E", "K*= c #B13D26", "L*= c #BA4B2F", "M*= c #C05135", "N*= c #BE5132", "O*= c #BF5032", "P*= c #BA492B", "Q*= c #B43D25", "R*= c #AF351E", "S*= c #AF301F", "T*= c #AD271B", "U*= c #A62417", "V*= c #A4463C", "W*= c #A2463B", "X*= c #75170D", "Y*= c #77554B", "Z*= c #7E655E", "`*= c #6A5B54", " == c #B9B3B3", ".== c #BAB4B4", "+== c #A62714", "@== c #B23E27", "#== c #BC4A2F", "$== c #BE4F33", "%== c #BB4E2F", "&== c #B8492B", "*== c #B54426", "=== c #B23B23", "-== c #AB2519", ";== c #AC261A", ">== c #993D32", ",== c #A5493E", "'== c #973B30", ")== c #7E5C53", "!== c #A72815", "~== c #AE3520", "{== c #B63F29", "]== c #BE4C31", "^== c #B74628", "/== c #B34023", "(== c #B03921", "_== c #AE341D", ":== c #91352A", "<== c #A2483D", "[== c #9A3E33", "}== c #90191B", "|== c #704441", "1== c #653E37", "2== c #826057", "3== c #715851", "4== c #A09F8D", "5== c #A82916", "6== c #AE2F20", "7== c #AF3621", "8== c #BF4D32", "9== c #BA4B2D", "0== c #AF3820", "a== c #AD331C", "b== c #AD2E1D", "c== c #AF271B", "d== c #AC2418", "e== c #9B4136", "f== c #6F3937", "g== c #6E423F", "h== c #643D36", "i== c #806258", "j== c #6C534C", "k== c #A3A69B", "l== c #63604F", "m== c #563B30", "n== c #972211", "o== c #A42713", "p== c #A72913", "q== c #B02E1E", "r== c #B13223", "s== c #B13422", "t== c #B53E28", "u== c #BA482D", "v== c #BD4B30", "w== c #B84729", "x== c #B44124", "y== c #AD291A", "z== c #AD2517", "A== c #A72412", "B== c #A22312", "C== c #981D0E", "D== c #8C3227", "E== c #78170E", "F== c #703A38", "G== c #89675E", "H== c #695049", "I== c #A2A59A", "J== c #625F4C", "K== c #554E3B", "L== c #665647", "M== c #BB472E", "N== c #BE4B30", "O== c #BB482B", "P== c #BB482D", "Q== c #B74127", "R== c #B03820", "S== c #AD2819", "T== c #621211", "U== c #6F3C39", "V== c #6B423E", "W== c #633C37", "X== c #87695F", "Y== c #83665E", "Z== c #6C5953", "`== c #8D807A", " -= c #B7B8AA", ".-= c #8B1D0E", "+-= c #9E210F", "@-= c #AC321D", "#-= c #B03621", "$-= c #B0361F", "%-= c #B53D25", "&-= c #BC442C", "*-= c #BE462E", "=-= c #BB4129", "--= c #BB412A", ";-= c #B93C26", ">-= c #B33620", ",-= c #B1331D", "'-= c #B02F1A", ")-= c #8F190D", "!-= c #662B23", "~-= c #682F26", "{-= c #6D423C", "]-= c #623F39", "^-= c #77605A", "/-= c #705D57", "(-= c #B7B3B2", "_-= c #B7B7AB", ":-= c #696653", "<-= c #675748", "[-= c #7E2B25", "}-= c #8A1F0D", "|-= c #952414", "1-= c #992614", "2-= c #A92F1A", "3-= c #AE361E", "4-= c #B13720", "5-= c #B63C25", "6-= c #C1442E", "7-= c #BD402A", "8-= c #BC3E28", "9-= c #B83A24", "0-= c #AF311B", "a-= c #AD2C17", "b-= c #63190E", "c-= c #6E1C22", "d-= c #69443C", "e-= c #725D58", "f-= c #6E5C58", "g-= c #766867", "h-= c #B6B1B5", "i-= c #B5B5A9", "j-= c #64493E", "k-= c #7F2C26", "l-= c #8C210F", "m-= c #9E2616", "n-= c #B83B25", "o-= c #BF422C", "p-= c #C0432D", "q-= c #BC3F29", "r-= c #B93B25", "s-= c #B3321D", "t-= c #AE2D18", "u-= c #62180D", "v-= c #6B4D45", "w-= c #6E5954", "x-= c #7B6D6C", "y-= c #B3AEB2", "z-= c #9FA297", "A-= c #777461", "B-= c #654A3F", "C-= c #51140F", "D-= c #891F0F", "E-= c #8D2210", "F-= c #942514", "G-= c #9F2717", "H-= c #B73A24", "I-= c #BE412B", "J-= c #BB3E28", "K-= c #B63822", "L-= c #AB2A15", "M-= c #A92612", "N-= c #731C22", "O-= c #71403C", "P-= c #694B43", "Q-= c #72574E", "R-= c #745B56", "S-= c #6A5550", "T-= c #817372", "U-= c #B0ABAF", "V-= c #7F7C69", "W-= c #50130E", "X-= c #8A2010", "Y-= c #B13420", "Z-= c #B63925", "`-= c #BD402C", " ;= c #BE3F2C", ".;= c #BA3B28", "+;= c #B63522", "@;= c #B3321F", "#;= c #AF2E1B", "$;= c #AC2917", "%;= c #6A453F", "&;= c #664840", "*;= c #73584F", "=;= c #68534E", "-;= c #877978", ";;= c #312B15", ">;= c #A52B16", ",;= c #AD331E", "';= c #BA3D29", ");= c #BB3C29", "!;= c #B73825", "~;= c #B1301D", "{;= c #9A1A0F", "];= c #991D25", "^;= c #64463E", "/;= c #745950", "(;= c #67524D", "_;= c #969696", ":;= c #722E25", "<;= c #722920", "[;= c #B23322", "};= c #B93A29", "|;= c #B53625", "1;= c #B43222", "2;= c #B12F1F", "3;= c #AA2516", "4;= c #9B1B10", "5;= c #99190E", "6;= c #9A1D25", "7;= c #9B1C25", "8;= c #9A1B24", "9;= c #991C24", "0;= c #971B23", "a;= c #6B3028", "b;= c #6D342B", "c;= c #6B3E39", "d;= c #6D4842", "e;= c #62443C", "f;= c #755A51", "g;= c #785F5A", "h;= c #B5AFB1", "i;= c #583A30", "j;= c #712E25", "k;= c #742B22", "l;= c #732A21", "m;= c #792B21", "n;= c #B13221", "o;= c #B73827", "p;= c #B33423", "q;= c #99160C", "r;= c #8C191E", "s;= c #9C1A24", "t;= c #981B23", "u;= c #941B22", "v;= c #753A32", "w;= c #7A4138", "x;= c #763F3C", "y;= c #765B52", "z;= c #8B8875", "A;= c #644E41", "B;= c #773127", "C;= c #772E25", "D;= c #752B20", "E;= c #8B200E", "F;= c #B23020", "G;= c #B33121", "H;= c #B63223", "I;= c #B32F20", "J;= c #AF2A1B", "K;= c #A92415", "L;= c #AE2618", "M;= c #9E1910", "N;= c #9C170E", "O;= c #9B1810", "P;= c #4F1410", "Q;= c #971A22", "R;= c #9A1822", "S;= c #981922", "T;= c #961A22", "U;= c #743931", "V;= c #81483F", "W;= c #6B5651", "X;= c #63514D", "Y;= c #AAA899", "Z;= c #614F41", "`;= c #5A332C", " >= c #702C23", ".>= c #772D22", "+>= c #A42A15", "@>= c #9B1B0E", "#>= c #9D180F", "$>= c #9C1911", "%>= c #991A23", "&>= c #6F342C", "*>= c #7F443C", "=>= c #794037", "->= c #5F3E37", ";>= c #7D645F", ">>= c #ABA99A", ",>= c #332D17", "'>= c #7A281C", ")>= c #AD2E1F", "!>= c #AF2D1F", "~>= c #B02C1F", "{>= c #9A1A0D", "]>= c #9D1A10", "^>= c #9D1A12", "/>= c #981C24", "(>= c #72372F", "_>= c #6D4F47", ":>= c #7E6560", "<>= c #69544F", "[>= c #67624C", "}>= c #4C442F", "|>= c #7B2D21", "1>= c #B1291D", "2>= c #AE261A", "3>= c #A31F12", "4>= c #7C130D", "5>= c #6A2F27", "6>= c #79544C", "7>= c #70524A", "8>= c #7A2C22", "9>= c #802E23", "0>= c #AA281B", "a>= c #AB291C", "b>= c #AD291D", "c>= c #AE2A1E", "d>= c #AF2B1F", "e>= c #A92318", "f>= c #AF261C", "g>= c #B1281E", "h>= c #B0271D", "i>= c #AD241A", "j>= c #9F1B0E", "k>= c #9C1A0C", "l>= c #9E1C0E", "m>= c #7D140E", "n>= c #8F181E", "o>= c #711A20", "p>= c #672E25", "q>= c #774E48", "r>= c #77524A", "s>= c #73554D", "t>= c #866B62", "u>= c #73615D", "v>= c #A6A390", "w>= c #A92A1B", "x>= c #AC2A1D", "y>= c #9E1A0D", "z>= c #90191F", "A>= c #721B21", "B>= c #693027", "C>= c #69443E", "D>= c #7C6A66", "E>= c #A8A697", "F>= c #665446", "G>= c #782E23", "H>= c #B23023", "I>= c #B22E22", "J>= c #B12D21", "K>= c #AF291E", "L>= c #AE281D", "M>= c #AE251B", "N>= c #A21E11", "O>= c #9F1D0F", "P>= c #981A0E", "Q>= c #6F181E", "R>= c #6E191E", "S>= c #581413", "T>= c #735A55", "U>= c #877571", "V>= c #BEB4B3", "W>= c #6C5F4E", "X>= c #52362B", "Y>= c #A52A1B", "Z>= c #A42919", "`>= c #AA2F1D", " ,= c #A92E1C", ".,= c #B53A2A", "+,= c #B6382A", "@,= c #B43628", "#,= c #B23225", "$,= c #AF2F22", "%,= c #AC281C", "&,= c #AD271C", "*,= c #AD241C", "=,= c #AB251C", "-,= c #961A0E", ";,= c #4F160F", ">,= c #571312", ",,= c #673631", "',= c #764F48", "),= c #6C4A41", "!,= c #68473E", "~,= c #6F5852", "{,= c #C3B9B8", "],= c #3C3421", "^,= c #5A4236", "/,= c #8B2113", "(,= c #932315", "_,= c #A42C1B", ":,= c #A72F1E", "<,= c #A63321", "[,= c #B54230", "},= c #B5402F", "|,= c #B33B2A", "1,= c #B03726", "2,= c #A52019", "3,= c #A7221B", "4,= c #AE3335", "5,= c #971B25", "6,= c #961A24", "7,= c #961823", "8,= c #63342C", "9,= c #683D34", "0,= c #684036", "a,= c #755349", "b,= c #66534D", "c,= c #C1B9B7", "d,= c #3A321F", "e,= c #8C2417", "f,= c #8F2517", "g,= c #A22E21", "h,= c #B33E2C", "i,= c #B64935", "j,= c #B84D39", "k,= c #B94C38", "l,= c #B24330", "m,= c #AA3A26", "n,= c #AA2621", "o,= c #55160D", "p,= c #59160D", "q,= c #722012", "r,= c #A82C2C", "s,= c #AA2E2E", "t,= c #951C25", "u,= c #63372E", "v,= c #653D33", "w,= c #643E33", "x,= c #664438", "y,= c #C4B9B7", "z,= c #AFB0A8", "A,= c #B0B1A9", "B,= c #B1B2AA", "C,= c #90281B", "D,= c #A43428", "E,= c #AC3B2D", "F,= c #AB372A", "G,= c #BD4836", "H,= c #CD5D49", "I,= c #D96C57", "J,= c #D66C56", "K,= c #CE644E", "L,= c #C0533E", "M,= c #B54531", "N,= c #B13E2B", "O,= c #AE3928", "P,= c #AB3323", "Q,= c #AB2A24", "R,= c #AB2A25", "S,= c #AE2A26", "T,= c #AC2B26", "U,= c #7B281A", "V,= c #AC2E2F", "W,= c #941C25", "X,= c #64382F", "Y,= c #613B30", "Z,= c #613F33", "`,= c #6C4A3E", " '= c #684B3D", ".'= c #73574B", "+'= c #7B6357", "@'= c #695851", "#'= c #A03225", "$'= c #A9392D", "%'= c #AD3B30", "&'= c #AA3629", "*'= c #A42F1E", "='= c #B64330", "-'= c #C35440", ";'= c #DF755F", ">'= c #DD745E", ",'= c #D46B55", "''= c #C65C46", ")'= c #BC4D39", "!'= c #B84834", "~'= c #B74432", "{'= c #B43E30", "]'= c #A93123", "^'= c #A72D22", "/'= c #AB2927", "('= c #AD2B29", "_'= c #962A20", ":'= c #852F22", "<'= c #872E20", "['= c #8C2E22", "}'= c #A82A2B", "|'= c #B03031", "1'= c #A72728", "2'= c #6E3F37", "3'= c #663A31", "4'= c #673F35", "5'= c #623C31", "6'= c #624034", "7'= c #6B493D", "8'= c #69493C", "9'= c #694C3E", "0'= c #765A4E", "a'= c #66534C", "b'= c #C0B6B4", "c'= c #6E5C4E", "d'= c #5C4035", "e'= c #A23328", "f'= c #A43227", "g'= c #A53220", "h'= c #AB3826", "i'= c #B0412D", "j'= c #C25A41", "k'= c #C45E45", "l'= c #C0583F", "m'= c #BC523C", "n'= c #BE513C", "o'= c #BD4E3B", "p'= c #BB4A3A", "q'= c #B44033", "r'= c #AE382E", "s'= c #A52824", "t'= c #AB2B2A", "u'= c #AE2E2D", "v'= c #AF2F2E", "w'= c #972B21", "x'= c #813126", "y'= c #8E372D", "z'= c #8F352A", "A'= c #953328", "B'= c #9A312B", "C'= c #AB2B2C", "D'= c #B02E30", "E'= c #AB292B", "F'= c #A72527", "G'= c #673B32", "H'= c #6A4238", "I'= c #674136", "J'= c #654337", "K'= c #6D4B3F", "L'= c #68483B", "M'= c #74584C", "N'= c #746055", "O'= c #68554E", "P'= c #766760", "Q'= c #9E2F24", "R'= c #A53122", "S'= c #A43321", "T'= c #A63523", "U'= c #A93C27", "V'= c #AF4930", "W'= c #B85538", "X'= c #C15D43", "Y'= c #C55F46", "Z'= c #CA614B", "`'= c #CE6550", " )= c #CF6452", ".)= c #CE6051", "+)= c #BB4B3F", "@)= c #B34137", "#)= c #AA352E", "$)= c #A82C2A", "%)= c #AD2F30", "&)= c #AD302E", "*)= c #95291F", "=)= c #944237", "-)= c #9B4339", ";)= c #98382C", ">)= c #9D382C", ",)= c #A92D2D", "')= c #B02B2E", "))= c #AF2A2D", "!)= c #AC272A", "~)= c #A62426", "{)= c #683C33", "])= c #6C443A", "^)= c #6A4439", "/)= c #69473B", "()= c #6A5447", "_)= c #A43323", ":)= c #A33423", "<)= c #A83928", "[)= c #AE432F", "})= c #B35033", "|)= c #BD5B3E", "1)= c #C8664B", "2)= c #CC6A51", "3)= c #D06C55", "4)= c #D36E5A", "5)= c #D36C5D", "6)= c #D1675A", "7)= c #B64A40", "8)= c #B0413A", "9)= c #A73632", "0)= c #AA2E30", "a)= c #A82B29", "b)= c #A62A20", "c)= c #A64F46", "d)= c #A64C43", "e)= c #9D3F33", "f)= c #9C3A2F", "g)= c #A33B30", "h)= c #9F322B", "i)= c #AC2F2D", "j)= c #AC2C2B", "k)= c #AC2728", "l)= c #AE2829", "m)= c #B02A2B", "n)= c #AD2728", "o)= c #A92425", "p)= c #A62424", "q)= c #7C191E", "r)= c #77171B", "s)= c #7A1D25", "t)= c #693D34", "u)= c #6D453B", "v)= c #6B453A", "w)= c #68463A", "x)= c #67473A", "y)= c #75594D", "z)= c #726054", "A)= c #877A72", "B)= c #524B39", "C)= c #463B29", "D)= c #A12D20", "E)= c #A73326", "F)= c #A83729", "G)= c #A23322", "H)= c #AA3C2B", "I)= c #B54C37", "J)= c #B45235", "K)= c #BB5E3F", "L)= c #C26448", "M)= c #C2644A", "N)= c #C1614B", "O)= c #C1604D", "P)= c #BD5C4C", "Q)= c #B95448", "R)= c #A94239", "S)= c #A63B35", "T)= c #A63232", "U)= c #7B2C25", "V)= c #9C4941", "W)= c #B0574F", "X)= c #AD5048", "Y)= c #A14135", "Z)= c #9F3A2E", "`)= c #A53D32", " != c #A1322B", ".!= c #AE312F", "+!= c #AD2B2B", "@!= c #AC2627", "#!= c #B1292B", "$!= c #AE2628", "%!= c #AA2425", "&!= c #741418", "*!= c #79191D", "=!= c #7C1F27", "-!= c #673830", ";!= c #6A3E35", ">!= c #786557", ",!= c #8D8078", "'!= c #BBB8B1", ")!= c #A2A59C", "!!= c #6C5649", "~!= c #695346", "{!= c #A43023", "]!= c #A33224", "^!= c #A13123", "/!= c #B24435", "(!= c #BD5240", "_!= c #B24C36", ":!= c #B45539", "~= c #6A5749", ",~= c #614339", "'~= c #A53529", ")~= c #A5372A", "!~= c #A43929", "~~= c #B84E3E", "{~= c #C55E4D", "]~= c #BB5843", "^~= c #B2563D", "/~= c #A14A2F", "(~= c #943E27", "_~= c #923D28", ":~= c #984533", "<~= c #A04D3F", "[~= c #9F4B40", "}~= c #98413A", "|~= c #9D443E", "1~= c #9F3934", "2~= c #A43933", "3~= c #A0332C", "4~= c #A02F27", "5~= c #A42F26", "6~= c #A82C20", "7~= c #65120C", "8~= c #82352F", "9~= c #9F4F46", "0~= c #BE6A60", "a~= c #C87064", "b~= c #BF5F53", "c~= c #B04B3F", "d~= c #AB4537", "e~= c #B04638", "f~= c #B14237", "g~= c #AD3B31", "h~= c #A9342B", "i~= c #AF322C", "j~= c #B3322D", "k~= c #B32D2A", "l~= c #B02A27", "m~= c #AC2522", "n~= c #AA2421", "o~= c #8C181B", "p~= c #561519", "q~= c #6C4C3F", "r~= c #725547", "s~= c #9FA299", "t~= c #7E3129", "u~= c #A13326", "v~= c #A03427", "w~= c #A3392B", "x~= c #B64F3E", "y~= c #C45F4D", "z~= c #B95845", "A~= c #B45A42", "B~= c #AB553E", "C~= c #96412C", "D~= c #8E3B29", "E~= c #A04E40", "F~= c #AA5A4F", "G~= c #A4544B", "H~= c #9E4E47", "I~= c #9B4641", "J~= c #93362F", "K~= c #993831", "L~= c #9F382F", "M~= c #9A2B20", "N~= c #9A291B", "O~= c #AA2E22", "P~= c #63130C", "Q~= c #64140D", "R~= c #80352F", "S~= c #92453D", "T~= c #A6564D", "U~= c #C76F63", "V~= c #C26458", "W~= c #BA5647", "X~= c #B34D3F", "Y~= c #B44A3C", "Z~= c #B5463B", "`~= c #B04035", " {= c #AC372E", ".{= c #AC332B", "+{= c #B2332D", "@{= c #B22E2A", "#{= c #AD2623", "${= c #AB2522", "%{= c #441410", "&{= c #3F0F0F", "*{= c #3F0E11", "={= c #400F12", "-{= c #411013", ";{= c #8A2D28", ">{= c #674539", ",{= c #705E50", "'{= c #1A160B", "){= c #7A2A1F", "!{= c #A13227", "~{= c #A13528", "{{= c #A43A2C", "]{= c #B85142", "^{= c #C55F50", "/{= c #B85746", "({= c #B25A46", "_{= c #B25D49", ":{= c #9C4937", "<{= c #8A382A", "[{= c #934539", "}{= c #A5564F", "|{= c #A95C56", "1{= c #AA5D57", "2{= c #9F4E4A", "3{= c #97443E", "4{= c #953C34", "5{= c #9C4035", "6{= c #A34134", "7{= c #AA2F20", "8{= c #64140B", "9{= c #7A312A", "0{= c #883D37", "a{= c #A0534B", "b{= c #A7594F", "c{= c #B66258", "d{= c #C1695D", "e{= c #C86A5E", "f{= c #C56454", "g{= c #BD5749", "h{= c #B84E40", "i{= c #B5493D", "j{= c #B04136", "k{= c #AA382E", "l{= c #B1322C", "m{= c #B12D29", "n{= c #AC2623", "o{= c #75292B", "p{= c #471717", "q{= c #411514", "r{= c #3B1210", "s{= c #8F2C26", "t{= c #922B26", "u{= c #9A1B22", "v{= c #653930", "w{= c #684237", "x{= c #715144", "y{= c #A29D8A", "z{= c #AD3A35", "A{= c #A02E24", "B{= c #9E2E23", "C{= c #A33429", "D{= c #A3392C", "E{= c #A63F30", "F{= c #BA5445", "G{= c #C46050", "H{= c #B55644", "I{= c #963D2B", "J{= c #A3503E", "K{= c #A75547", "L{= c #98483D", "M{= c #9F544E", "N{= c #A85D58", "O{= c #A15651", "P{= c #A0524E", "Q{= c #8D392F", "R{= c #9D3D2D", "S{= c #942511", "T{= c #63140D", "U{= c #64160C", "V{= c #823932", "W{= c #944B42", "X{= c #A75D54", "Y{= c #B05C51", "Z{= c #BD6559", "`{= c #CB6D61", " ]= c #CE6D5D", ".]= c #C66051", "+]= c #BC5546", "@]= c #B54B3E", "#]= c #AF4337", "$]= c #A9392E", "%]= c #AC312A", "&]= c #AE312B", "*]= c #AF2E29", "=]= c #AF2B27", "-]= c #8E2D24", ";]= c #9C1D24", ">]= c #981920", ",]= c #97191D", "']= c #735346", ")]= c #512C24", "!]= c #151C14", "~]= c #0E1A16", "{]= c #0E1A18", "]]= c #82332C", "^]= c #7D2F25", "/]= c #AA3935", "(]= c #AF3C37", "_]= c #A43A2D", ":]= c #A74031", "<]= c #B95344", "[]= c #C05C4C", "}]= c #AD503F", "|]= c #8D3625", "1]= c #9C493B", "2]= c #B15F54", "3]= c #A5574D", "4]= c #924741", "5]= c #AC635D", "6]= c #C67C79", "7]= c #BB716E", "8]= c #B26762", "9]= c #913D33", "0]= c #91382A", "a]= c #993A28", "b]= c #983520", "c]= c #922913", "d]= c #90220B", "e]= c #A12918", "f]= c #AC3122", "g]= c #7B352D", "h]= c #8C463E", "i]= c #A45B52", "j]= c #AB6158", "k]= c #AB5F52", "l]= c #B05E52", "m]= c #BC6657", "n]= c #CA6E5F", "o]= c #CF6F5F", "p]= c #CA6656", "q]= c #C35C4D", "r]= c #B64C3F", "s]= c #AA3A2F", "t]= c #A6342A", "u]= c #B1302B", "v]= c #AC2824", "w]= c #A82B25", "x]= c #612628", "y]= c #3E130C", "z]= c #491A0A", "A]= c #4B1A0B", "B]= c #4F1A0A", "C]= c #53190B", "D]= c #591B0C", "E]= c #792618", "F]= c #8A2E21", "G]= c #8F2D22", "H]= c #9D1F23", "I]= c #9C1E22", "J]= c #9D1B23", "K]= c #9C1A22", "L]= c #9A1820", "M]= c #99181D", "N]= c #683931", "O]= c #694137", "P]= c #6C463B", "Q]= c #665949", "R]= c #53372C", "S]= c #512325", "T]= c #0F1A16", "U]= c #84342D", "V]= c #7E2E25", "W]= c #9E312A", "X]= c #AC3B35", "Y]= c #A13729", "Z]= c #A33D2E", "`]= c #B2513E", " ^= c #B75844", ".^= c #A44936", "+^= c #AB5443", "@^= c #A95648", "#^= c #AF5F54", "$^= c #994C42", "%^= c #B6716A", "&^= c #F4B1AB", "*^= c #F6B3AB", "=^= c #D28E85", "-^= c #BB7367", ";^= c #A35548", ">^= c #9C4A35", ",^= c #A0462E", "'^= c #9A3517", ")^= c #982C10", "!^= c #A32B1A", "~^= c #AF3327", "{^= c #AD3125", "]^= c #64150E", "^^= c #813630", "/^= c #843B34", "(^= c #B0675E", "_^= c #AD6358", ":^= c #B56355", "<^= c #BE6859", "[^= c #C76E5C", "}^= c #CB6E5C", "|^= c #CA6956", "1^= c #C86351", "2^= c #B74D3F", "3^= c #B24437", "4^= c #AA3A2E", "5^= c #AD342C", "6^= c #B1342E", "7^= c #AA2924", "8^= c #AB2C26", "9^= c #AB2E28", "0^= c #34160C", "a^= c #311509", "b^= c #341709", "c^= c #391306", "d^= c #391203", "e^= c #3D1104", "f^= c #421204", "g^= c #4C1709", "h^= c #511709", "i^= c #802E22", "j^= c #8E2C23", "k^= c #9C1B1F", "l^= c #753A36", "m^= c #6D423B", "n^= c #6D473E", "o^= c #6A453C", "p^= c #725449", "q^= c #725A4E", "r^= c #706053", "s^= c #BBB7AB", "t^= c #706353", "u^= c #5E463A", "v^= c #4B291F", "w^= c #522214", "x^= c #512115", "y^= c #3F2524", "z^= c #192019", "A^= c #19231B", "B^= c #662426", "C^= c #752214", "D^= c #771304", "E^= c #A1392C", "F^= c #AE4437", "G^= c #A8392E", "H^= c #A03B29", "I^= c #A84832", "J^= c #AF553B", "K^= c #BF684D", "L^= c #AC563D", "M^= c #AF5845", "N^= c #B05D4D", "O^= c #AE5F50", "P^= c #9A5142", "Q^= c #8D4B3D", "R^= c #B07567", "S^= c #EAB0A4", "T^= c #FFCFC0", "U^= c #E4AB98", "V^= c #D39681", "W^= c #BB785E", "X^= c #A3593C", "Y^= c #964625", "Z^= c #943C18", "`^= c #973A11", " /= c #9F3616", "./= c #A62C21", "+/= c #A2281D", "@/= c #8B3C37", "#/= c #9C4F47", "$/= c #A95C52", "%/= c #AC6053", "&/= c #AF6154", "*/= c #B56657", "=/= c #B96857", "-/= c #BD6756", ";/= c #C86F5D", ">/= c #D47966", ",/= c #D47863", "'/= c #D16E5B", ")/= c #C95E4C", "!/= c #BC4B3B", "~/= c #AC382B", "{/= c #A73127", "]/= c #B0352E", "^/= c #B0332F", "//= c #B1312E", "(/= c #A92928", "_/= c #A82B27", ":/= c #AA2D29", "(= c #993621", ",(= c #AA4E37", "'(= c #C66F53", ")(= c #DB8669", "!(= c #C47054", "~(= c #963F2B", "{(= c #994332", "](= c #A25344", "^(= c #A55C4D", "/(= c #9F5D4D", "((= c #A86D5B", "_(= c #B67E6D", ":(= c #B37F6A", "<(= c #E7B39D", "[(= c #F6BEA3", "}(= c #FFC2A6", "|(= c #E49E7C", "1(= c #AA5A35", "2(= c #873209", "3(= c #8C3105", "4(= c #9A3310", "5(= c #A85A50", "6(= c #B1645A", "7(= c #B36558", "8(= c #B36457", "9(= c #BA6B5A", "0(= c #C16E5E", "a(= c #C5705C", "b(= c #C9725F", "c(= c #D07864", "d(= c #D77B66", "e(= c #D97963", "f(= c #CF6150", "g(= c #AF3230", "h(= c #B13432", "i(= c #AD332E", "j(= c #A83329", "k(= c #A12F24", "l(= c #9F2D23", "m(= c #A22920", "n(= c #43170C", "o(= c #3B150A", "p(= c #32170C", "q(= c #4D140B", "r(= c #531518", "s(= c #54191D", "t(= c #734E48", "u(= c #6D4E49", "v(= c #71544E", "w(= c #746059", "x(= c #2A2311", "y(= c #593D32", "z(= c #512616", "A(= c #4D2114", "B(= c #81200F", "C(= c #801F0C", "D(= c #852111", "E(= c #A03428", "F(= c #8E2718", "G(= c #983522", "H(= c #B0543D", "I(= c #BB6449", "J(= c #BE694C", "K(= c #AA5439", "L(= c #9A422E", "M(= c #943D2C", "N(= c #9E4D3C", "O(= c #AC6050", "P(= c #B16C5C", "Q(= c #BA7D6B", "R(= c #C18875", "S(= c #BC8571", "T(= c #CD957E", "U(= c #E3AA8F", "V(= c #FFC5A9", "W(= c #FBB292", "X(= c #BE6E4B", "Y(= c #99411B", "Z(= c #983110", "`(= c #681310", " _= c #8F403B", "._= c #9E4F4A", "+_= c #B4675D", "@_= c #B4685A", "#_= c #B6675A", "$_= c #BE6F5E", "%_= c #CA7767", "&_= c #CF7A66", "*_= c #CF7865", "=_= c #CF7763", "-_= c #D37762", ";_= c #D77663", ">_= c #BA4939", ",_= c #A83427", "'_= c #B23533", ")_= c #AF342F", "!_= c #AB352B", "~_= c #A23123", "{_= c #A23025", "]_= c #A32F22", "^_= c #A32D21", "/_= c #3C160B", "(_= c #2E1207", "__= c #3E0F07", ":_= c #480F08", "<_= c #7A302D", "[_= c #85291E", "}_= c #340E0D", "|_= c #330F0F", "1_= c #7A514D", "2_= c #70554E", "3_= c #7A7768", "4_= c #502417", "5_= c #4E2217", "6_= c #802010", "7_= c #7F1E0D", "8_= c #A03128", "9_= c #851E0F", "0_= c #A3402D", "a_= c #C66751", "b_= c #B95F45", "c_= c #A85135", "d_= c #9B452A", "e_= c #983D2A", "f_= c #8D3424", "g_= c #9A4435", "h_= c #B16454", "i_= c #BD7566", "j_= c #C68573", "k_= c #CB8E7B", "l_= c #C48B77", "m_= c #C08670", "n_= c #E1A38A", "o_= c #FFD2B7", "p_= c #FFC2A3", "q_= c #BE6B4B", "r_= c #8E3612", "s_= c #8C2E08", "t_= c #8A2304", "u_= c #9E2B19", "v_= c #954641", "w_= c #A45550", "x_= c #B06359", "y_= c #B5685E", "z_= c #B36759", "A_= c #BA6B5E", "B_= c #C27362", "C_= c #D07D6D", "D_= c #D7826E", "E_= c #D57E6B", "F_= c #CE7662", "G_= c #CB6F5A", "H_= c #CD6C59", "I_= c #CC5E4D", "J_= c #B64535", "K_= c #AA2F2A", "L_= c #B13631", "M_= c #A93528", "N_= c #A53424", "O_= c #A33222", "P_= c #A63525", "Q_= c #A63223", "R_= c #A43021", "S_= c #9B2C21", "T_= c #962B21", "U_= c #21190E", "V_= c #23261D", "W_= c #3A0F09", "X_= c #41110D", "Y_= c #361212", "Z_= c #270907", "`_= c #2A0E0D", " := c #7A534E", ".:= c #6F504B", "+:= c #78645D", "@:= c #832212", "#:= c #8B2718", "$:= c #A43730", "%:= c #9C3127", "&:= c #AE4A3A", "*:= c #D97A66", "=:= c #C1654E", "-:= c #A75035", ";:= c #A44D32", ">:= c #923523", ",:= c #872C1A", "':= c #984130", "):= c #B76655", "!:= c #C27666", "~:= c #C17C6C", "{:= c #C18270", "]:= c #BF826D", "^:= c #B1735C", "/:= c #D6967D", "(:= c #FFCFB5", "_:= c #FFBDA1", "::= c #AF5C3E", "<:= c #832A0A", "[:= c #943614", "}:= c #9C3417", "|:= c #8F403C", "1:= c #9D4E49", "2:= c #B6695F", "3:= c #B46659", "4:= c #BE6F62", "5:= c #C37261", "6:= c #CD7A6A", "7:= c #D6816D", "8:= c #D57C6A", "9:= c #CB705D", "0:= c #C36752", "a:= c #C66350", "b:= c #C55A48", "c:= c #B03F2F", "d:= c #A82D28", "e:= c #B03530", "f:= c #AB3A2A", "g:= c #A83824", "h:= c #A73723", "i:= c #A53422", "j:= c #9F3120", "k:= c #972F22", "l:= c #8E3129", "m:= c #27190E", "n:= c #622625", "o:= c #270D0E", "p:= c #6E3B38", "q:= c #70514C", "r:= c #5C3B32", "s:= c #30171A", "t:= c #7B1B0F", "u:= c #80210F", "v:= c #9A2F27", "w:= c #A63E33", "x:= c #A84434", "y:= c #D0715D", "z:= c #BB5F48", "A:= c #A64C32", "B:= c #9D3E2A", "C:= c #9E4533", "D:= c #C17261", "E:= c #BD7463", "F:= c #C17D6A", "G:= c #C5826F", "H:= c #BC7A64", "I:= c #C9866C", "J:= c #F8AE95", "K:= c #EE9E83", "L:= c #9F4A2D", "M:= c #882D10", "N:= c #A74528", "O:= c #8B160F", "P:= c #954743", "Q:= c #A35650", "R:= c #B0635D", "S:= c #B96C62", "T:= c #B96B61", "U:= c #BF7063", "V:= c #BE6D5C", "W:= c #C56F60", "X:= c #CE7764", "Y:= c #D07563", "Z:= c #C76A58", "`:= c #C0614D", " <= c #C15E4B", ".<= c #BE5341", "+<= c #9B2A1C", "@<= c #A32C24", "#<= c #B0372F", "$<= c #AE352D", "%<= c #AC332A", "&<= c #AC362A", "*<= c #AF3B2C", "=<= c #B1402E", "-<= c #B34230", ";<= c #B34430", "><= c #AB3D26", ",<= c #AA3C25", "'<= c #A83A23", ")<= c #A63821", "!<= c #A23520", "~<= c #9D341F", "{<= c #983321", "]<= c #933422", "^<= c #92392B", "/<= c #8A382C", "(<= c #221C10", "_<= c #3C1412", ":<= c #3D1110", "<<= c #3E1010", "[<= c #481416", "}<= c #591E20", "|<= c #715049", "1<= c #70534D", "2<= c #83746D", "3<= c #371516", "4<= c #7A1A0E", "5<= c #7F2211", "6<= c #9C332D", "7<= c #A13930", "8<= c #B04940", "9<= c #973625", "0<= c #BA5946", "a<= c #AC4D37", "b<= c #9B3F26", "c<= c #9D412A", "d<= c #B04F3C", "e<= c #9F3E2D", "f<= c #A94C3B", "g<= c #C16A57", "h<= c #C3705E", "i<= c #BF7260", "j<= c #CB826F", "k<= c #D8917D", "l<= c #EBA48E", "m<= c #D38B73", "n<= c #E1937C", "o<= c #D07E66", "p<= c #933C21", "q<= c #A13F24", "r<= c #89160F", "s<= c #A85B55", "t<= c #B56661", "u<= c #BD6F65", "v<= c #BB6D63", "w<= c #C16F63", "x<= c #BB6858", "y<= c #BD6557", "z<= c #C66D5B", "A<= c #CA6D5C", "B<= c #C46553", "C<= c #BE5D4A", "D<= c #C15C4A", "E<= c #BA4F3D", "F<= c #A43524", "G<= c #AA352C", "H<= c #B13830", "I<= c #AF362D", "J<= c #AD392A", "K<= c #B03F2D", "L<= c #B54632", "M<= c #B84935", "N<= c #B94B34", "O<= c #AC3E25", "P<= c #A83C22", "Q<= c #A43A20", "R<= c #A0381F", "S<= c #9A361F", "T<= c #94351F", "U<= c #8E3622", "V<= c #8F3E2D", "W<= c #853B2E", "X<= c #78352C", "Y<= c #3D1418", "Z<= c #40161A", "`<= c #42151A", " [= c #3F170D", ".[= c #42170E", "+[= c #44180F", "@[= c #704F48", "#[= c #81746C", "$[= c #221B09", "%[= c #4F2D23", "&[= c #7E160D", "*[= c #7B1F10", "=[= c #822514", "-[= c #7F2213", ";[= c #A8413A", ">[= c #A94438", ",[= c #A94837", "'[= c #B3523F", ")[= c #AD4E38", "![= c #A2442B", "~[= c #A4452F", "{[= c #B4513E", "][= c #BC5946", "^[= c #BC5B4A", "/[= c #B15644", "([= c #BD6C59", "_[= c #CF816D", ":[= c #D98C78", "<[= c #C67B66", "[[= c #B56952", "}[= c #C07059", "|[= c #B55F48", "1[= c #872C17", "2[= c #852610", "3[= c #9E3B24", "4[= c #9B321F", "5[= c #610E0A", "6[= c #AF605B", "7[= c #B3625E", "8[= c #B26259", "9[= c #B5655C", "0[= c #BC6A5E", "a[= c #C16D62", "b[= c #BF695A", "c[= c #BF6658", "d[= c #C56857", "e[= c #CB6A5A", "f[= c #C86454", "g[= c #BD5846", "h[= c #B54B3B", "i[= c #A53A2A", "j[= c #A53728", "k[= c #A33126", "l[= c #A63128", "m[= c #AF362E", "n[= c #B33A32", "o[= c #B73E35", "p[= c #B33D31", "q[= c #AC3C28", "r[= c #B54730", "s[= c #B64A30", "t[= c #B04428", "u[= c #B14529", "v[= c #AC4326", "w[= c #A63E23", "x[= c #A23E24", "y[= c #9F4127", "z[= c #963E26", "A[= c #8B3923", "B[= c #853A27", "C[= c #753222", "D[= c #2F1B1C", "E[= c #31171A", "F[= c #321519", "G[= c #311217", "H[= c #2D170A", "I[= c #2E160A", "J[= c #2E1308", "K[= c #401810", "L[= c #734A44", "M[= c #867971", "N[= c #21141D", "O[= c #22151E", "P[= c #21161E", "Q[= c #22171D", "R[= c #21181D", "S[= c #6A2015", "T[= c #791D0E", "U[= c #7F2412", "V[= c #7E2112", "W[= c #A13C34", "X[= c #AA453D", "Y[= c #B04B41", "Z[= c #B25141", "`[= c #B45342", " }= c #A34430", ".}= c #9B3C26", "+}= c #A7402D", "@}= c #AE4736", "#}= c #AC4637", "$}= c #963E2A", "%}= c #9F4A36", "&}= c #AC5A45", "*}= c #B3624D", "=}= c #AC5E48", "-}= c #9B4A35", ";}= c #A5503B", ">}= c #A14935", ",}= c #822513", "'}= c #963320", ")}= c #8D2313", "!}= c #A22C22", "~}= c #63120E", "{}= c #600D09", "]}= c #AC5856", "^}= c #B05F5B", "/}= c #B25F5B", "(}= c #B5625A", "_}= c #BB6860", ":}= c #BF6B60", "<}= c #C26B61", "[}= c #C2695B", "}}= c #C5675B", "|}= c #C96858", "1}= c #C96556", "2}= c #B74D3D", "3}= c #AE4333", "4}= c #B43B32", "5}= c #B74135", "6}= c #B64233", "7}= c #B94B32", "8}= c #BA4E34", "9}= c #B74B2F", "0}= c #B04729", "a}= c #A44124", "b}= c #A04125", "c}= c #9D4328", "d}= c #954127", "e}= c #883C24", "f}= c #7A3621", "g}= c #6C2F1D", "h}= c #2A1E22", "i}= c #27181B", "j}= c #2B181C", "k}= c #2C171C", "l}= c #67352E", "m}= c #70403C", "n}= c #72514A", "o}= c #75645C", "p}= c #292210", "q}= c #726253", "r}= c #22171F", "s}= c #251520", "t}= c #25151F", "u}= c #22151C", "v}= c #251518", "w}= c #461214", "x}= c #701E12", "y}= c #9F3C36", "z}= c #B65449", "A}= c #BB594C", "B}= c #BA5949", "C}= c #B04F3E", "D}= c #9A3926", "E}= c #95351F", "F}= c #AB4833", "G}= c #AA412E", "H}= c #AF4633", "I}= c #AB4433", "J}= c #A03D2A", "K}= c #953924", "L}= c #9D4632", "M}= c #A24D39", "N}= c #A4523D", "O}= c #933E2A", "P}= c #98412E", "Q}= c #9D4230", "R}= c #923120", "S}= c #9A3626", "T}= c #A32E24", "U}= c #60110C", "V}= c #5E0D09", "W}= c #A55151", "X}= c #B76160", "Y}= c #B05D59", "Z}= c #AE5956", "`}= c #B8635C", " |= c #C36C65", ".|= c #C56D63", "+|= c #C0665D", "@|= c #C6685C", "#|= c #CB695E", "$|= c #CC6658", "%|= c #C85E51", "&|= c #BC5043", "*|= c #B04233", "=|= c #A8382A", "-|= c #AC352D", ";|= c #B43E34", ">|= c #B94337", ",|= c #BB4738", "'|= c #BA4A34", ")|= c #BD4F36", "!|= c #B1492C", "~|= c #AB482B", "{|= c #A54326", "]|= c #9E4326", "^|= c #9A4429", "/|= c #8F4226", "(|= c #6E3019", "_|= c #612A16", ":|= c #562516", "<|= c #21161A", "[|= c #25191D", "}|= c #2A1B20", "||= c #201A0E", "1|= c #20180D", "2|= c #683730", "3|= c #72413D", "4|= c #714E48", "5|= c #6F5149", "6|= c #241921", "7|= c #251821", "8|= c #241720", "9|= c #2B0F0E", "0|= c #7C2013", "a|= c #9A3932", "b|= c #A6453E", "c|= c #C36158", "d|= c #CA685D", "e|= c #B85649", "f|= c #A54434", "g|= c #A8432F", "h|= c #AF4432", "i|= c #B44635", "j|= c #B14835", "k|= c #A94432", "l|= c #A03F2C", "m|= c #9D412C", "n|= c #A14633", "o|= c #A34C38", "p|= c #AA5340", "q|= c #9A4330", "r|= c #9B4230", "s|= c #9E4331", "t|= c #983828", "u|= c #A53026", "v|= c #A42F25", "w|= c #5E0F0A", "x|= c #61100C", "y|= c #B45B5D", "z|= c #C06867", "A|= c #B15957", "B|= c #AA5250", "C|= c #B9625B", "D|= c #C76E68", "E|= c #C66C63", "F|= c #BF6159", "G|= c #C8665B", "H|= c #CF685F", "I|= c #CF6558", "J|= c #C6574C", "K|= c #B8463B", "L|= c #AD392C", "M|= c #A53426", "N|= c #A23425", "O|= c #A13626", "P|= c #A7372B", "Q|= c #A9372D", "R|= c #AB362D", "S|= c #B43E32", "T|= c #B84435", "U|= c #BD4A38", "V|= c #BF4F3B", "W|= c #C05239", "X|= c #BF5337", "Y|= c #BA5133", "Z|= c #B74E30", "`|= c #B44C2F", " 1= c #B24D31", ".1= c #A24428", "+1= c #9C4227", "@1= c #954427", "#1= c #8A4023", "$1= c #7C3B1F", "%1= c #662C14", "&1= c #5B2711", "*1= c #522512", "=1= c #68362F", "-1= c #6C514A", ";1= c #563A2F", ">1= c #802415", ",1= c #9F4139", "'1= c #CA6960", ")1= c #D06E63", "!1= c #AF4D40", "~1= c #9E3A2B", "{1= c #9E3A2A", "]1= c #9E3B28", "^1= c #A13A27", "/1= c #A63827", "(1= c #A93A27", "_1= c #A73C28", ":1= c #A33C29", "<1= c #9D3A25", "[1= c #983923", "}1= c #983C27", "|1= c #9C412C", "11= c #A54A37", "21= c #9A3F2D", "31= c #993C2D", "41= c #973528", "51= c #99342A", "61= c #9A332A", "71= c #BC6264", "81= c #C26868", "91= c #AF5554", "01= c #B75C57", "a1= c #C66964", "b1= c #C66860", "c1= c #CF645C", "d1= c #CD5E53", "e1= c #C25046", "f1= c #B74137", "g1= c #B0372C", "h1= c #AA3428", "i1= c #A33325", "j1= c #A8382C", "k1= c #AC372D", "l1= c #B33F32", "m1= c #B74334", "n1= c #BE4B38", "o1= c #C3533D", "p1= c #C4563B", "q1= c #BF5336", "r1= c #B95030", "s1= c #B54E2D", "t1= c #B34F35", "u1= c #AB4C30", "v1= c #A0452A", "w1= c #974225", "x1= c #914224", "y1= c #843D1F", "z1= c #77371B", "A1= c #662E15", "B1= c #5C2A13", "C1= c #542916", "D1= c #522D1D", "E1= c #7D6F66", "F1= c #8E312A", "G1= c #9A3C34", "H1= c #C16359", "I1= c #C8675E", "J1= c #AB493C", "K1= c #A13D2E", "L1= c #A54131", "M1= c #9A311E", "N1= c #A33220", "O1= c #A23521", "P1= c #A13823", "Q1= c #9D3623", "R1= c #97341F", "S1= c #953622", "T1= c #A34634", "U1= c #A04334", "V1= c #9F3F31", "W1= c #A03E33", "X1= c #A03B33", "Y1= c #A13832", "Z1= c #A33830", "`1= c #9D2D22", " 2= c #AD5355", ".2= c #BC6063", "+2= c #BF6162", "@2= c #A84A4A", "#2= c #B35651", "$2= c #BF605C", "%2= c #C16059", "&2= c #C15B56", "*2= c #C65E55", "=2= c #C85B54", "-2= c #C6544A", ";2= c #BE473F", ">2= c #B63D34", ",2= c #B2362C", "'2= c #AE352A", ")2= c #A43426", "!2= c #A23727", "~2= c #A43629", "{2= c #A6382B", "]2= c #AD382E", "^2= c #AE392F", "/2= c #BC4C38", "(2= c #C5573E", "_2= c #C7593E", ":2= c #C05535", "<2= c #B84F2F", "[2= c #B7502F", "}2= c #B55034", "|2= c #AB4D33", "12= c #A0462B", "22= c #984428", "32= c #904327", "42= c #76391C", "52= c #6F371E", "62= c #63331C", "72= c #5D321F", "82= c #5B3624", "92= c #4D2F24", "02= c #261A1A", "a2= c #6E5A51", "b2= c #7B695F", "c2= c #BFB7B5", "d2= c #372416", "e2= c #0B1811", "f2= c #0B1A13", "g2= c #0F1A14", "h2= c #8C322A", "i2= c #973A32", "j2= c #AF5147", "k2= c #B7564D", "l2= c #B14F42", "m2= c #B24E3F", "n2= c #A94535", "o2= c #993422", "p2= c #952C19", "q2= c #A2311F", "r2= c #A33421", "s2= c #A53A26", "t2= c #A43B26", "u2= c #9E3A23", "v2= c #9D3D27", "w2= c #A84937", "x2= c #AC4D3B", "y2= c #A8483A", "z2= c #A84639", "A2= c #AC473F", "B2= c #83180E", "C2= c #8A1B10", "D2= c #5E110B", "E2= c #61120D", "F2= c #62130E", "G2= c #9D4A46", "H2= c #B5595C", "I2= c #BA5B5F", "J2= c #B75759", "K2= c #AD4E4A", "L2= c #B65451", "M2= c #BB5852", "N2= c #C55E59", "O2= c #C55A52", "P2= c #C2534C", "Q2= c #BE4940", "R2= c #B83F37", "S2= c #B43830", "T2= c #B2332A", "U2= c #AE3429", "V2= c #A23629", "W2= c #A8362C", "X2= c #AF3A30", "Y2= c #B13C32", "Z2= c #B74336", "`2= c #BD4D39", " 3= c #C75940", ".3= c #C95B40", "+3= c #B95233", "@3= c #B24E34", "#3= c #B05038", "$3= c #A94D34", "%3= c #A0492E", "&3= c #99482D", "*3= c #954A2D", "=3= c #894629", "-3= c #7D4125", ";3= c #784226", ">3= c #6E3F25", ",3= c #683E28", "'3= c #66412E", ")3= c #61402F", "!3= c #55382A", "~3= c #4D3126", "{3= c #28191C", "]3= c #120E03", "^3= c #6F443E", "/3= c #6E5149", "(3= c #6B524B", "_3= c #806E64", ":3= c #593B31", "<3= c #4E2E23", "[3= c #2D1F14", "}3= c #091A12", "|3= c #0E1B14", "13= c #711E10", "23= c #8F322B", "33= c #983A32", "43= c #A14037", "53= c #BB564C", "63= c #C35D51", "73= c #AC4437", "83= c #942A1C", "93= c #9D2C1A", "03= c #A43723", "a3= c #A53A28", "b3= c #A23926", "c3= c #A43D2A", "d3= c #AC4735", "e3= c #A74333", "f3= c #AA4637", "g3= c #A54132", "h3= c #A64135", "i3= c #A9443C", "j3= c #98322D", "k3= c #5A0F0A", "l3= c #5D120D", "m3= c #A45350", "n3= c #B85E60", "o3= c #B7575B", "p3= c #B15153", "q3= c #AD4B4C", "r3= c #AA4849", "s3= c #AC4846", "t3= c #B44C4B", "u3= c #BA514D", "v3= c #CB5E59", "w3= c #C85751", "x3= c #C14C45", "y3= c #B84139", "z3= c #B33830", "A3= c #B0342A", "B3= c #B03128", "C3= c #AA352B", "D3= c #A7352A", "E3= c #B03B31", "F3= c #B03F31", "G3= c #B64734", "H3= c #BD4F38", "I3= c #C75B41", "J3= c #C75E41", "K3= c #BE5738", "L3= c #BA5332", "M3= c #B95636", "N3= c #AB5033", "O3= c #A95236", "P3= c #A45034", "Q3= c #9D4E30", "R3= c #994E2F", "S3= c #965130", "T3= c #8E4F2E", "U3= c #824A29", "V3= c #7E4B2C", "W3= c #75482B", "X3= c #6D4931", "Y3= c #674732", "Z3= c #252618", "`3= c #23291B", " 4= c #22281C", ".4= c #592317", "+4= c #5A2418", "@4= c #715F53", "#4= c #9B9F9E", "$4= c #949180", "%4= c #27200E", "&4= c #562215", "*4= c #78210E", "=4= c #782110", "-4= c #922B24", ";4= c #A33A34", ">4= c #BF544C", ",4= c #C85C52", "'4= c #B94A3F", ")4= c #AC3C2E", "!4= c #AF4132", "~4= c #B14336", "{4= c #B14538", "]4= c #A93F32", "^4= c #A84033", "/4= c #B54F43", "(4= c #BC5A4D", "_4= c #B15145", ":4= c #9B3B2F", "<4= c #8D281C", "[4= c #7C2617", "}4= c #964645", "|4= c #AF5658", "14= c #AE4F53", "24= c #B24E50", "34= c #B1484C", "44= c #AE4242", "54= c #B54446", "64= c #C04C4C", "74= c #C64E4D", "84= c #C64C49", "94= c #C24742", "04= c #BB3E38", "a4= c #B3372F", "b4= c #AE3228", "c4= c #AD322A", "d4= c #AF362B", "e4= c #B2392E", "f4= c #B54132", "g4= c #B44532", "h4= c #BD503B", "i4= c #B64C34", "j4= c #BD553C", "k4= c #C15C40", "l4= c #BA5939", "m4= c #BB5D3B", "n4= c #BF613F", "o4= c #B25A36", "p4= c #9D512F", "q4= c #87411D", "r4= c #7A3613", "s4= c #803F19", "t4= c #8E5029", "u4= c #935931", "v4= c #8F5831", "w4= c #88572F", "x4= c #90603A", "y4= c #875B36", "z4= c #78502D", "A4= c #634223", "B4= c #50341E", "C4= c #482E1D", "D4= c #4A2419", "E4= c #68332F", "F4= c #735147", "G4= c #6C4E44", "H4= c #C2B0AE", "I4= c #2B2412", "J4= c #4B2D22", "K4= c #4B2B20", "L4= c #56281B", "M4= c #6A2528", "N4= c #6B2116", "O4= c #751D0F", "P4= c #761E10", "Q4= c #771E0E", "R4= c #77200D", "S4= c #76210C", "T4= c #792010", "U4= c #B2453E", "V4= c #C6554D", "W4= c #BE4E43", "X4= c #AF3D33", "Y4= c #9D2D1F", "Z4= c #A43325", "`4= c #A73628", " 5= c #A9372C", ".5= c #AA382D", "+5= c #A8382D", "@5= c #AB4539", "#5= c #AF4A3E", "$5= c #A24234", "%5= c #8F3223", "&5= c #82291B", "*5= c #7F2616", "=5= c #7E2716", "-5= c #732415", ";5= c #6C2013", ">5= c #56120F", ",5= c #B15556", "'5= c #B25254", ")5= c #B55153", "!5= c #B3494B", "~5= c #B04243", "{5= c #B64243", "]5= c #C04849", "^5= c #C74D4A", "/5= c #C64B46", "(5= c #C2453F", "_5= c #BB3F37", ":5= c #B2382D", "<5= c #AF3528", "[5= c #AE3628", "}5= c #B03629", "|5= c #AF3329", "15= c #B1352D", "25= c #B3372D", "35= c #B53B30", "45= c #B73F31", "55= c #B54432", "65= c #B44732", "75= c #B85037", "85= c #B34D34", "95= c #BC5A3D", "05= c #C16244", "a5= c #BB5E3D", "b5= c #BA623E", "c5= c #A7633C", "d5= c #8C5129", "e5= c #7E431B", "f5= c #854B23", "g5= c #955F33", "h5= c #9A6539", "i5= c #936035", "j5= c #87582C", "k5= c #7A532C", "l5= c #6F4B27", "m5= c #644226", "n5= c #372511", "o5= c #1E1415", "p5= c #683732", "q5= c #725247", "r5= c #C1AFAD", "s5= c #C2AEAD", "t5= c #4D2D22", "u5= c #49271D", "v5= c #2B1307", "w5= c #3A180C", "x5= c #761F0C", "y5= c #761F0B", "z5= c #781F0F", "A5= c #B8473F", "B5= c #BA4A3F", "C5= c #B24036", "D5= c #A12C23", "E5= c #9E3228", "F5= c #A23A31", "G5= c #923025", "H5= c #7E2517", "I5= c #752617", "J5= c #55120C", "K5= c #53100A", "L5= c #B45E5D", "M5= c #B35958", "N5= c #B35555", "O5= c #B35150", "P5= c #B0494A", "Q5= c #AD4141", "R5= c #B0403E", "S5= c #B74441", "T5= c #BD4743", "U5= c #BD4640", "V5= c #BB4239", "W5= c #B43B30", "X5= c #AC3628", "Y5= c #A93423", "Z5= c #AE3626", "`5= c #B1372C", " 6= c #B5392F", ".6= c #B63D32", "+6= c #B74133", "@6= c #B54B35", "#6= c #B75138", "$6= c #B25035", "%6= c #BA5D3E", "&6= c #BF6646", "*6= c #B8623F", "=6= c #BA6641", "-6= c #BC6A44", ";6= c #AF643D", ">6= c #B2714B", ",6= c #985C37", "'6= c #874C24", ")6= c #8D532B", "!6= c #9B6539", "~6= c #9F6A3E", "{6= c #946136", "]6= c #86572B", "^6= c #7F5228", "/6= c #7E542A", "(6= c #7B542D", "_6= c #75512D", ":6= c #765431", "<6= c #755433", "[6= c #6E4C30", "}6= c #614128", "|6= c #462C1B", "16= c #3A2812", "26= c #392912", "36= c #71443E", "46= c #6F473F", "56= c #725148", "66= c #BEB0AD", "76= c #BFADAB", "86= c #9DA29E", "96= c #751E0B", "06= c #751E0A", "a6= c #A3342B", "b6= c #9D261E", "c6= c #9F3029", "d6= c #972E28", "e6= c #8C271D", "f6= c #7C2416", "g6= c #7D2718", "h6= c #7B291B", "i6= c #75271A", "j6= c #531008", "k6= c #520D06", "l6= c #7A2F29", "m6= c #964740", "n6= c #A6564F", "o6= c #B25D58", "p6= c #B25955", "q6= c #AA423F", "r6= c #AB403A", "s6= c #AF4039", "t6= c #B03F37", "u6= c #B03E34", "v6= c #AF3B2E", "w6= c #AA3627", "x6= c #A43420", "y6= c #B1382D", "z6= c #B53F33", "A6= c #B84938", "B6= c #B7513A", "C6= c #B5563A", "D6= c #B05538", "E6= c #B86241", "F6= c #BE6B49", "G6= c #B86843", "H6= c #B96E46", "I6= c #BF764D", "J6= c #B67148", "K6= c #B0704A", "L6= c #9A603A", "M6= c #8B5129", "N6= c #8B542B", "O6= c #945F33", "P6= c #946134", "Q6= c #8B5A2F", "R6= c #845529", "S6= c #74471D", "T6= c #774D23", "U6= c #7B5530", "V6= c #7F5C3C", "W6= c #714941", "X6= c #6B5045", "Y6= c #8D8173", "Z6= c #655244", "`6= c #761D0B", " 7= c #761E0A", ".7= c #7A2B1E", "+7= c #762A1D", "@7= c #5A170E", "#7= c #541007", "$7= c #520C02", "%7= c #81342A", "&7= c #9B4B40", "*7= c #A7554A", "=7= c #B05B54", "-7= c #B15852", ";7= c #AF544F", ">7= c #AC4F48", ",7= c #AC4B44", "'7= c #AD4840", ")7= c #AD453C", "!7= c #AC4137", "~7= c #A73B2F", "{7= c #A83A2D", "]7= c #A73729", "^7= c #A1321F", "/7= c #A33621", "(7= c #AF392D", "_7= c #B1382F", ":7= c #B13B2F", "<7= c #B44534", "[7= c #B64B39", "}7= c #B6523B", "|7= c #B5553C", "17= c #AF5638", "27= c #AF5A3B", "37= c #C57B56", "47= c #BB764D", "57= c #B7744A", "67= c #B47448", "77= c #A86B3F", "87= c #A1663E", "97= c #955B35", "07= c #8A532A", "a7= c #8A5529", "b7= c #885528", "c7= c #865628", "d7= c #88592D", "e7= c #704319", "f7= c #744A20", "g7= c #785128", "h7= c #7D5730", "i7= c #835F3D", "j7= c #51351D", "k7= c #4D351B", "l7= c #4B331B", "m7= c #71423A", "n7= c #6B5047", "o7= c #75645A", "p7= c #B9B0B3", "q7= c #B7AEB1", "r7= c #BBB2B5", "s7= c #352C2D", "t7= c #771E0C", "u7= c #771F0B", "v7= c #7A1E0F", "w7= c #541005", "x7= c #550D01", "y7= c #883A2D", "z7= c #9E4F42", "A7= c #B15A51", "B7= c #B25951", "C7= c #B0564E", "D7= c #AE4D44", "E7= c #B04E43", "F7= c #AB4338", "G7= c #A23725", "H7= c #A13624", "I7= c #A23723", "J7= c #A63B27", "K7= c #AC3F2B", "L7= c #AD3C2E", "M7= c #AE3C31", "N7= c #AE4031", "O7= c #AE4434", "P7= c #AF4A36", "Q7= c #AF503A", "R7= c #AD563B", "S7= c #A65335", "T7= c #AB5F3D", "U7= c #C07A56", "V7= c #CA8961", "W7= c #BC7E55", "X7= c #AC7346", "Y7= c #9E683A", "Z7= c #8D5729", "`7= c #8E572E", " 8= c #8C552E", ".8= c #8C552C", "+8= c #8D582E", "@8= c #8A572A", "#8= c #855527", "$8= c #87582A", "%8= c #8D5E30", "&8= c #7A4E21", "*8= c #80562C", "=8= c #815A31", "-8= c #855D39", ";8= c #845E3A", ">8= c #6D492F", ",8= c #4E2C13", "'8= c #4F3014", ")8= c #533519", "!8= c #6D564E", "~8= c #76655B", "{8= c #797663", "]8= c #665345", "^8= c #4D2726", "/8= c #422A26", "(8= c #65271C", "_8= c #7A1F0D", ":8= c #7A1F0C", "<8= c #7C1F10", "[8= c #9F2E26", "}8= c #55150B", "|8= c #560E02", "18= c #8E4033", "28= c #A65345", "38= c #AF564E", "48= c #B45750", "58= c #B0534C", "68= c #AA4C44", "78= c #AB4A41", "88= c #AE4C41", "98= c #AC473D", "08= c #A43E32", "a8= c #9F392B", "b8= c #A0392A", "c8= c #A23828", "d8= c #A13825", "e8= c #A33A25", "f8= c #A83F2A", "g8= c #AC4330", "h8= c #AE4235", "i8= c #AD4135", "j8= c #A84132", "k8= c #A44833", "l8= c #A34D34", "m8= c #A05133", "n8= c #A05536", "o8= c #A25E3B", "p8= c #B3754E", "q8= c #B98055", "r8= c #A87347", "s8= c #835426", "t8= c #7D4A1F", "u8= c #804B23", "v8= c #925F34", "w8= c #956235", "x8= c #8B5C2E", "y8= c #8F6439", "z8= c #8C6238", "A8= c #885D3A", "B8= c #835B38", "C8= c #5A351A", "D8= c #533012", "E8= c #5F3E1F", "F8= c #614426", "G8= c #100B11", "H8= c #B3B4AC", "I8= c #504D3A", "J8= c #211C09", "K8= c #7D6D5E", "L8= c #362D2E", "M8= c #672B20", "N8= c #7B200E", "O8= c #7B200D", "P8= c #A93133", "Q8= c #B23B3D", "R8= c #B13D3E", "S8= c #A93736", "T8= c #7A2D23", "U8= c #501108", "V8= c #531309", "W8= c #530F04", "X8= c #550F03", "Y8= c #914537", "Z8= c #A55647", "`8= c #A75446", " 9= c #AC524A", ".9= c #AD4E48", "+9= c #A5473F", "@9= c #A4463E", "#9= c #A8473E", "$9= c #A24236", "%9= c #99372A", "&9= c #9A3529", "*9= c #9B3728", "=9= c #9B3727", "-9= c #9C3627", ";9= c #9C3725", ">9= c #9F3A28", ",9= c #A43F2B", "'9= c #A84331", ")9= c #AD493A", "!9= c #A9473A", "~9= c #A64437", "{9= c #A04332", "]9= c #9C4331", "^9= c #9B4631", "/9= c #974A30", "(9= c #944D2F", "_9= c #9C5A3A", ":9= c #985C38", "<9= c #A06942", "[9= c #9E6D42", "}9= c #906135", "|9= c #8B6033", "19= c #8F6638", "29= c #8B6234", "39= c #6F4016", "49= c #74431A", "59= c #834F27", "69= c #966739", "79= c #9E7245", "89= c #976C41", "99= c #8E643A", "09= c #8A5E39", "a9= c #845936", "b9= c #794E2B", "c9= c #603717", "d9= c #5A3113", "e9= c #5B3212", "f9= c #674424", "g9= c #65462A", "h9= c #492D21", "i9= c #483024", "j9= c #6C4037", "k9= c #6F524C", "l9= c #6A514C", "m9= c #77665F", "n9= c #83766E", "o9= c #B6ADB0", "p9= c #B5ACAF", "q9= c #B2B3AB", "r9= c #B7B5A6", "s9= c #A3A290", "t9= c #82816D", "u9= c #5B3930", "v9= c #442F2A", "w9= c #433937", "x9= c #403634", "y9= c #682E22", "z9= c #782012", "A9= c #7B1E0C", "B9= c #A62627", "C9= c #A4272B", "D9= c #B33C3E", "E9= c #C24E4F", "F9= c #BF4B4E", "G9= c #AE3C3B", "H9= c #4B0F04", "I9= c #4B0B00", "J9= c #521002", "K9= c #6C2718", "L9= c #9A5243", "M9= c #B36757", "N9= c #AA584C", "O9= c #AB524C", "P9= c #AB4E49", "Q9= c #A54843", "R9= c #A0433C", "S9= c #9C3F38", "T9= c #993C34", "U9= c #95372B", "V9= c #943728", "W9= c #953527", "X9= c #953525", "Y9= c #9A3A2A", "Z9= c #A24130", "`9= c #A64636", " 0= c #963D2D", ".0= c #9F493A", "+0= c #974635", "@0= c #8B3C2B", "#0= c #833823", "$0= c #813E24", "%0= c #854529", "&0= c #925739", "*0= c #A6704E", "=0= c #A16F4A", "-0= c #835E31", ";0= c #836133", ">0= c #734D20", ",0= c #4A1D00", "'0= c #916037", ")0= c #9F7044", "!0= c #A27345", "~0= c #825325", "{0= c #7C4E1D", "]0= c #A87C4B", "^0= c #BB8F60", "/0= c #966A3D", "(0= c #9A6F45", "_0= c #9E714A", ":0= c #7E522D", "<0= c #683C17", "[0= c #6B3F1C", "}0= c #5E320F", "|0= c #643916", "10= c #6F4421", "20= c #79512D", "30= c #805834", "40= c #815935", "50= c #72502D", "60= c #6F4C2E", "70= c #604027", "80= c #533420", "90= c #703932", "00= c #6E4239", "a0= c #6D4C47", "b0= c #684B47", "c0= c #6E5551", "d0= c #897E78", "e0= c #B1B4AB", "f0= c #858470", "g0= c #53523E", "h0= c #1F1A07", "i0= c #3F3533", "j0= c #7B1E0D", "k0= c #A52526", "l0= c #A92B2E", "m0= c #B03538", "n0= c #D45C5E", "o0= c #E66F71", "p0= c #C95556", "q0= c #4E150C", "r0= c #4A0E04", "s0= c #501207", "t0= c #662418", "u0= c #8E4A3D", "v0= c #A75F51", "w0= c #A15548", "x0= c #A24D48", "y0= c #A84E4D", "z0= c #AA514D", "A0= c #A44B47", "B0= c #8C352E", "C0= c #8A362C", "D0= c #913B2E", "E0= c #923A2E", "F0= c #933B2D", "G0= c #984233", "H0= c #924535", "I0= c #92493A", "J0= c #91493A", "K0= c #894434", "L0= c #7E3B28", "M0= c #753720", "N0= c #753921", "O0= c #763E23", "P0= c #764324", "Q0= c #825432", "R0= c #7D512E", "S0= c #623B14", "T0= c #583309", "U0= c #623F15", "V0= c #624116", "W0= c #573208", "X0= c #60350B", "Y0= c #693C13", "Z0= c #93643A", "`0= c #926637", " a= c #BC905F", ".a= c #C89C6B", "+a= c #A47849", "@a= c #A27647", "#a= c #A17548", "$a= c #9C6F45", "%a= c #895C33", "&a= c #73461F", "*a= c #6C3C16", "=a= c #6E401C", "-a= c #673A13", ";a= c #6C4019", ">a= c #764A23", ",a= c #81572F", "'a= c #8B6139", ")a= c #865F36", "!a= c #825C35", "~a= c #845E39", "{a= c #795535", "]a= c #6E433C", "^a= c #6E463E", "/a= c #6D4B49", "(a= c #6F5C58", "_a= c #71625D", ":a= c #8A8C77", "b= c #3F3637", ",b= c #582417", "'b= c #792113", ")b= c #7E1F0D", "!b= c #AE3637", "~b= c #B03A38", "{b= c #94281C", "]b= c #45120F", "^b= c #3C0B06", "/b= c #44110D", "(b= c #834A43", "_b= c #935850", ":b= c #8D5149", "c= c #6F482B", ",c= c #7C5534", "'c= c #744D26", ")c= c #7C552A", "!c= c #7A5125", "~c= c #91683A", "{c= c #B99062", "]c= c #AE8454", "^c= c #946837", "/c= c #A07542", "(c= c #CC9E6C", "_c= c #BB8D5B", ":c= c #A27242", "d= c #794F27", ",d= c #6B401E", "'d= c #5E3716", ")d= c #51310B", "!d= c #62461F", "~d= c #745A37", "{d= c #3D2A0C", "]d= c #2F1F06", "^d= c #6E4438", "/d= c #704D4B", "(d= c #6A4B49", "_d= c #664A49", ":d= c #6B5655", "e= c #483A37", ",e= c #463E3C", "'e= c #413D3A", ")e= c #403D38", "!e= c #512E2A", "~e= c #6E1F12", "{e= c #6E170D", "]e= c #6A150E", "^e= c #360E0C", "/e= c #6B494A", "(e= c #5C3C3D", "_e= c #462627", ":e= c #61422E", "f= c #F2B888", ",f= c #F0B384", "'f= c #C08855", ")f= c #9F6E36", "!f= c #90632A", "~f= c #895C23", "{f= c #8D6027", "]f= c #8F6028", "^f= c #885921", "/f= c #855620", "(f= c #875822", "_f= c #8E5F2B", ":f= c #855524", "g= c #6E4519", ",g= c #61370F", "'g= c #5C3411", ")g= c #553421", "!g= c #141205", "~g= c #1A0E02", "{g= c #220E05", "]g= c #6B3B31", "^g= c #673B30", "/g= c #694A47", "(g= c #69504B", "_g= c #BCADAA", ":g= c #2A220F", "h= c #F1C086", ",h= c #CA995F", "'h= c #A8753E", ")h= c #9B6831", "!h= c #A06D36", "~h= c #8B5821", "{h= c #C28F58", "]h= c #EBB680", "^h= c #C7925C", "/h= c #D39E68", "(h= c #E8B580", "_h= c #B58650", ":h= c #92652E", "i= c #FCC88E", ",i= c #F0B980", "'i= c #D7A067", ")i= c #DCA56C", "!i= c #E8B276", "~i= c #DEA66D", "{i= c #CD965D", "]i= c #98662B", "^i= c #804F15", "/i= c #895820", "(i= c #96642F", "_i= c #885623", ":i= c #7B4E27", "j= c #A16D33", ",j= c #A57138", "'j= c #CB9765", ")j= c #AA7748", "!j= c #704117", "~j= c #6B3F18", "{j= c #523620", "]j= c #39312F", "^j= c #3C3030", "/j= c #6C4138", "(j= c #6E514B", "_j= c #6C534E", ":j= c #63544F", "k= c #B78145", ",k= c #D6A064", "'k= c #814E17", ")k= c #7F4D1A", "!k= c #865729", "~k= c #865B31", "{k= c #6B4423", "]k= c #3F3333", "^k= c #6B524D", "/k= c #7F716E", "(k= c #B7B7AF", "_k= c #A7AA9F", ":k= c #ACAD9F", "l= c #BBB8AF", ",l= c #BAB7AE", "'l= c #AFB1A4", ")l= c #8E8F81", "!l= c #535041", "~l= c #3B3D3C", "{l= c #4E4D4B", "]l= c #534F4C", "^l= c #584F4A", "/l= c #420F0C", "(l= c #60352F", "_l= c #3F3939", ":l= c #704C32", "m= c #B58243", ",m= c #D5A364", "'m= c #E3B174", ")m= c #C9985D", "!m= c #B68751", "~m= c #9B6D3C", "{m= c #6D482D", "]m= c #694A45", "^m= c #737164", "/m= c #55473E", "(m= c #4D3E37", "_m= c #494544", ":m= c #5C5250", "n= c #5E2327", ",n= c #5A1F25", "'n= c #541D23", ")n= c #4F1C23", "!n= c #401117", "~n= c #5B3437", "{n= c #69494C", "]n= c #5B4142", "^n= c #74522C", "/n= c #845F33", "(n= c #8C6335", "_n= c #946C3B", ":n= c #9C7242", "o= c #5F3C1C", ",o= c #805532", "'o= c #885E38", ")o= c #784C25", "!o= c #774D27", "~o= c #764C26", "{o= c #744C28", "]o= c #724C27", "^o= c #6D4925", "/o= c #37321F", "(o= c #494440", "_o= c #693D3A", ":o= c #683F3B", "p= c #A5A79A", ",p= c #929081", "'p= c #635D4F", ")p= c #271E0D", "!p= c #655349", "~p= c #533F38", "{p= c #4D372C", "]p= c #494844", "^p= c #40413C", "/p= c #474843", "(p= c #3F3F3D", "_p= c #632518", ":p= c #573835", "q= c #3E393F", ",q= c #322B19", "'q= c #332F16", ")q= c #373316", "!q= c #3C371A", "~q= c #40391C", "{q= c #4B2A1B", "]q= c #4D2C1B", "^q= c #4B3D3A", "/q= c #6F534F", "(q= c #ABA5AF", "_q= c #221908", ":q= c #3E2B2D", "r= c #7C7E69", ",r= c #3A3925", "'r= c #64584A", ")r= c #746359", "!r= c #573B37", "~r= c #593330", "{r= c #462B22", "]r= c #432D22", "^r= c #30272A", "/r= c #42413D", "(r= c #353C35", "_r= c #2D3830", ":r= c #27342A", "s= c #B8B4B5", ",s= c #A2A499", "'s= c #A1A493", ")s= c #AEB1A0", "!s= c #7F7E6A", "~s= c #130C00", "{s= c #5E4741", "]s= c #5D423B", "^s= c #372B2D", "/s= c #42393A", "(s= c #484244", "_s= c #3F3D40", ":s= c #323431", "t= c #231303", ",t= c #573A32", "'t= c #303133", ")t= c #313536", "!t= c #343A3A", "~t= c #363C3C", "{t= c #343D3C", "]t= c #394241", "^t= c #653A33", "/t= c #654641", "(t= c #654946", "_t= c #594441", ":t= c #5B4746", "u= c #663D37", ",u= c #63403C", "'u= c #624340", ")u= c #564442", "!u= c #4D3F3F", "~u= c #514746", "{u= c #5B5253", "]u= c #B9B7B8", "^u= c #B4B4B2", "/u= c #9EA092", "(u= c #A0A18F", "_u= c #B3B29E", ":u= c #251402", "v= c #3E3F44", ",v= c #3D4047", "'v= c #41454E", ")v= c #434A52", "!v= c #363F48", "~v= c #313B45", "{v= c #414B55", "]v= c #45515D", "^v= c #53616C", "/v= c #505C68", "(v= c #495561", "_v= c #58656E", ":v= c #69737C", "w= c #697686", ",w= c #667481", "'w= c #6E7A88", ")w= c #707C88", "!w= c #6B757F", "~w= c #6A747D", "{w= c #737E80", "]w= c #576361", "^w= c #566260", "/w= c #4F5B57", "(w= c #3C4540", "_w= c #391A1F", ":w= c #642F27", "x= c #55605C", ",x= c #58615E", "'x= c #525753", ")x= c #4B2F2C", "!x= c #272E27", "~x= c #342123", "{x= c #663129", "]x= c #66342B", "^x= c #66362C", "/x= c #66403D", "(x= c #5C403F", "_x= c #553D3B", ":x= c #513C39", "y= c #533B3B", ",y= c #4C4240", "'y= c #AEAD99", ")y= c #B1AF98", "!y= c #4D482B", "~y= c #342D13", "{y= c #3B4044", "]y= c #4A5157", "^y= c #474E54", "/y= c #42494F", "(y= c #3F464C", "_y= c #464E51", ":y= c #4B5557", "z= c #6E808E", ",z= c #738392", "'z= c #677381", ")z= c #7A8490", "!z= c #9EA8B1", "~z= c #909AA3", "{z= c #8C999F", "]z= c #7A878D", "^z= c #768487", "/z= c #758386", "(z= c #687375", "_z= c #7E8889", ":z= c #737C7B", "A= c #768686", ",A= c #6D7B7B", "'A= c #6C7675", ")A= c #6F7877", "!A= c #3C4240", "~A= c #4F342D", "{A= c #992D2A", "]A= c #9C302D", "^A= c #711B0E", "/A= c #6C1A0C", "(A= c #483E3C", "_A= c #4C4845", ":A= c #565853", "B= c #617B7C", ",B= c #6D8585", "'B= c #7F9495", ")B= c #819594", "!B= c #ACBFBD", "~B= c #434D4C", "{B= c #BB4F4C", "]B= c #BD514E", "^B= c #A43835", "/B= c #6E1C10", "(B= c #4E4E4E", "_B= c #553230", ":B= c #453B39", "C= c #677784", ",C= c #9AA8B5", "'C= c #CED8E4", ")C= c #D4E3EA", "!C= c #6D8086", "~C= c #64797E", "{C= c #869AA1", "]C= c #8FA6AC", "^C= c #7C9399", "/C= c #6F888D", "(C= c #5D7579", "_C= c #9AB2B4", ":C= c #CCE1E2", "D= c #A5A696", ",D= c #B3B6A3", "'D= c #8B8E79", ")D= c #4F513C", "!D= c #272914", "~D= c #5C5042", "{D= c #30333C", "]D= c #31364A", "^D= c #2E344C", "/D= c #383E56", "(D= c #454B61", "_D= c #485063", ":D= c #4C5566", "E= c #F6F9FE", ",E= c #F3F7F6", "'E= c #666C6A", ")E= c #7C8486", "!E= c #707980", "~E= c #7F8C9C", "{E= c #6C7989", "]E= c #84929F", "^E= c #CDDBE6", "/E= c #F0FDFF", "(E= c #BCCCC2", "_E= c #667868", ":E= c #293C28", "F= c #212741", ",F= c #4C526A", "'F= c #BEC4DA", ")F= c #E7F0FF", "!F= c #ABB4C3", "~F= c #707A86", "{F= c #7B8891", "]F= c #85929A", "^F= c #A1AEB4", "/F= c #D7E6E9", "(F= c #DEEEED", "_F= c #909E9E", ":F= c #8E9C9D", "G= c #3F413C", ",G= c #4E514A", "'G= c #52544F", ")G= c #7D7F7C", "!G= c #AFB0AB", "~G= c #A8A99B", "{G= c #5F5E4C", "]G= c #171200", "^G= c #5D362F", "/G= c #5E332D", "(G= c #2A2A42", "_G= c #282947", ":G= c #232744", "H= c #A6B6B5", ",H= c #8B9D9D", "'H= c #788C8D", ")H= c #3F575B", "!H= c #031A20", "~H= c #6A838A", "{H= c #C8E0EA", "]H= c #A3BBC7", "^H= c #79919B", "/H= c #93ABB5", "(H= c #DFF6FE", "_H= c #82979A", ":H= c #85A09B", "I= c #161729", ",I= c #1D1F36", "'I= c #2D2F48", ")I= c #A1A5BE", "!I= c #D9DDF6", "~I= c #CFD6E9", "{I= c #979FAC", "]I= c #68727B", "^I= c #919D9D", "/I= c #31403B", "(I= c #364542", "_I= c #4D585C", ":I= c #6C767F", "J= c #6E8082", ",J= c #374545", "'J= c #91423D", ")J= c #934A44", "!J= c #8D4843", "~J= c #8C4943", "{J= c #7E3D37", "]J= c #8B453D", "^J= c #93493E", "/J= c #944035", "(J= c #2B2E33", "_J= c #595C63", ":J= c #D9DCE5", "K= c #98A5B5", ",K= c #9DAABA", "'K= c #9EAEBE", ")K= c #8797A6", "!K= c #A4ABB5", "~K= c #ECEFF6", "{K= c #A1B3B5", "]K= c #7C9091", "^K= c #54696E", "/K= c #6E858B", "(K= c #5A7179", "_K= c #768C97", ":K= c #7C929F", "L= c #8C4742", ",L= c #8C554E", "'L= c #955F55", ")L= c #9E655A", "!L= c #A1655B", "~L= c #A26256", "{L= c #AA6158", "]L= c #B26458", "^L= c #AD5B50", "/L= c #A34B41", "(L= c #96352F", "_L= c #1B1F22", ":L= c #21242B", "M= c #624847", ",M= c #5F4642", "'M= c #503931", ")M= c #4E332C", "!M= c #4E2F2A", "~M= c #10101A", "{M= c #11101E", "]M= c #202239", "^M= c #1A1A34", "/M= c #33354C", "(M= c #3D3F56", "_M= c #5B5D72", ":M= c #55586B", "N= c #E8F5FD", ",N= c #7E8B93", "'N= c #78858E", ")N= c #72808B", "!N= c #6A7885", "~N= c #5A6875", "{N= c #4D5A6A", "]N= c #4E5B6C", "^N= c #5E6B7C", "/N= c #5F6879", "(N= c #586170", "_N= c #596573", ":N= c #5F6B77", "O= c #738390", ",O= c #5F717B", "'O= c #586A74", ")O= c #394A54", "!O= c #42535D", "~O= c #5E6C77", "{O= c #94A2AD", "]O= c #9CA6B2", "^O= c #767E8B", "/O= c #999FAB", "(O= c #CDD5E2", "_O= c #929AA7", ":O= c #65727B", "P= c #687683", ",P= c #525E6C", "'P= c #495563", ")P= c #57606F", "!P= c #6B7483", "~P= c #606779", "{P= c #5E6376", "]P= c #636A7C", "^P= c #717888", "/P= c #767D8D", "(P= c #6F7686", "_P= c #646E7A", ":P= c #4D5A63", "Q= c #51566A", ",Q= c #6F748A", "'Q= c #787D93", ")Q= c #797F95", "!Q= c #6D7487", "~Q= c #5C6376", "{Q= c #4F5668", "]Q= c #485160", "^Q= c #454F5B", "/Q= c #3A4750", "(Q= c #3C494F", "_Q= c #3F4D50", ":Q= c #415151", "R= c #5B6076", ",R= c #5B5F78", "'R= c #585E74", ")R= c #565C72", "!R= c #5B6274", "~R= c #4C5662", "{R= c #4C5962", "]R= c #4D5A60", "^R= c #48555B", "/R= c #3D4B4E", "(R= c #374747", "_R= c #3B4B4B", ":R= c #69747A", "S= c #5C6375", ",S= c #61687A", "'S= c #666D7D", ")S= c #636C7B", "!S= c #4D5A62", "~S= c #424F55", "{S= c #39484D", "]S= c #364548", "^S= c #344346", "/S= c #242F35", "(S= c #252E35", "_S= c #2B363C", ":S= c #333E42", "T= c #364242", ",T= c #313737", "'T= c #0B0505", ")T= c #22090C", "!T= c #180205", "~T= c #160704", "{T= c #100200", "]T= c #120606", "^T= c #13080C", "/T= c #411D1F", "(T= c #51514F", "_T= c #4A4F49", ":T= c #61635E", "U= c #190E16", ",U= c #08120A", "'U= c #403C3B", ")U= c #525751", "!U= c #888A85", "~U= c #BABDB6", "{U= c #A6A9A2", "]U= c #9FA4A0", "^U= c #9EA39F", "/U= c #A5A79C", "(U= c #A2A391", "_U= c #A9A893", ":U= c #82806B", "V= c #7D856E", ",V= c #383D29", "'V= c #434537", ")V= c #574940", "!V= c #56392B", "~V= c #4F3327", "{V= c #4E3227", "]V= c #282D31", "^V= c #2C3437", "/V= c #555861", "(V= c #575A63", "_V= c #424450", ":V= c #3A4149", "W= c #32373D", ",W= c #3B3E47", "'W= c #40404A", ")W= c #3F3D48", "!W= c #36363E", "~W= c #2D2D35", "{W= c #292E31", "]W= c #272C2F", "^W= c #1C2524", "/W= c #683C3D", "(W= c #834948", "_W= c #8B4E4B", ":W= c #975853", "X= c #7E4F49", ",X= c #82514C", "'X= c #83514A", ")X= c #834E46", "!X= c #824B44", "~X= c #804942", "{X= c #844D46", "]X= c #87504B", "^X= c #88534D", "/X= c #915A57", "(X= c #985E5A", "_X= c #915753", ":X= c #975D59", "Y= c #2C1F29", ",Y= c #291D27", "'Y= c #261C25", ")Y= c #231C23", "!Y= c #1B1821", "~Y= c #19131D", "{Y= c #140E18", "]Y= c #5F423E", "^Y= c #63443F", "/Y= c #5D3C37", "(Y= c #815E5A", "_Y= c #A78480", ":Y= c #AA8785", "Z= c #2E1922", ",Z= c #341F26", "'Z= c #2B161B", ")Z= c #170505", "!Z= c #200703", "~Z= c #1F0703", "{Z= c #7C7469", "]Z= c #847D6D", "^Z= c #7B755F", "/Z= c #7B755D", "(Z= c #141203", "_Z= c #121003", ":Z= c #443740", "`= c #897B78", ",`= c #897668", "'`= c #897665", ")`= c #8B7B64", "!`= c #1C1407", "~`= c #0E0A01", "{`= c #10050D", "]`= c #180B14", "^`= c #2D1D27", "/`= c #473640", "(`= c #5A4651", "_`= c #644E5A", ":`= c #5A424F", "<`= c #4D3542", "[`= c #371D28", "}`= c #2F1820", "|`= c #271018", "1`= c #220D14", "2`= c #200D13", "3`= c #1C0B11", "4`= c #4B4748", "5`= c #504C4D", "6`= c #646665", "7`= c #B5B7A9", "8`= c #181504", "9`= c #695B52", "0`= c #57423F", "a`= c #604844", "b`= c #584036", "c`= c #4E2919", "d`= c #220E17", "e`= c #2A121F", "f`= c #361A28", "g`= c #43212F", "h`= c #502737", "i`= c #5A2E3D", "j`= c #653545", "k`= c #6D3848", "l`= c #632D3B", "m`= c #602A37", "n`= c #5A2632", "o`= c #55232C", "p`= c #4D2027", "q`= c #391215", "r`= c #1A090F", "s`= c #5F5A57", "t`= c #927B75", "u`= c #9D847D", "v`= c #94796E", "w`= c #937C6C", "x`= c #907969", "y`= c #86715C", "z`= c #8F7D67", "A`= c #94836F", "B`= c #090A0F", "C`= c #09020A", "D`= c #0A0009", "E`= c #0E010B", "F`= c #190914", "G`= c #24121E", "H`= c #311D29", "I`= c #422C39", "J`= c #58404E", "K`= c #674C5B", "L`= c #6C505E", "M`= c #654753", "N`= c #563641", "O`= c #42222D", "P`= c #32141E", "Q`= c #290F18", "R`= c #260F17", "S`= c #231016", "T`= c #3A3434", "U`= c #4E4A4B", "V`= c #747675", "W`= c #B4B5AD", "X`= c #B5B6AE", "Y`= c #ACAEA0", "Z`= c #959885", "``= c #5D4C45", " - c #594642", ". - c #0A1415", "+ - c #3A1E2A", "@ - c #4A2836", "# - c #552F3C", "$ - c #5E2F3F", "% - c #602B3B", "& - c #612839", "* - c #622535", "= - c #5E202F", "- - c #5E202D", "; - c #5D212D", "> - c #5B222B", ", - c #552028", "' - c #401215", ") - c #340C0C", "! - c #1F0E14", "~ - c #231014", "{ - c #271217", "] - c #58504D", "^ - c #88807D", "/ - c #9F8D89", "( - c #A58C87", "_ - c #A1867F", ": - c #9F827C", "< - c #97796F", "[ - c #93756B", "} - c #93756A", "| - c #8C7062", "1 - c #7F6554", "2 - c #928068", "3 - c #8D7D66", "4 - c #806F5B", "5 - c #6D5E49", "6 - c #1E1202", "7 - c #030907", "8 - c #090E11", "9 - c #02070B", "0 - c #000308", "a - c #010207", "b - c #0B060D", "c - c #0E070F", "d - c #11050F", "e - c #150812", "f - c #180813", "g - c #1C0814", "h - c #27111E", "i - c #38202E", "j - c #462B3A", "k - c #4D2E3D", "l - c #65414F", "m - c #613B48", "n - c #5A3642", "o - c #54333E", "p - c #40252E", "q - c #2C151D", "r - c #1B0A10", "s - c #061210", "t - c #393333", "u - c #3C3636", "v - c #868887", "w - c #BBBBB3", "x - c #B3B6A5", "y - c #757460", "z - c #1A1406", "A - c #5C463B", "B - c #592E28", "C - c #582216", "D - c #522717", "E - c #4E281B", "F - c #091513", "G - c #0B1514", "H - c #0B1411", "I - c #492B35", "J - c #522E3A", "K - c #572D3B", "L - c #5A2738", "M - c #5A2132", "N - c #5B1B2C", "O - c #5D182A", "P - c #6E2739", "Q - c #712A3A", "R - c #74303D", "S - c #763740", "T - c #743840", "U - c #6C3339", "V - c #5E2A2E", "W - c #1E0F16", "X - c #1C0D14", "Y - c #1E0B0F", "Z - c #220D12", "` - c #250F11", " .- c #260D10", "..- c #554744", "+.- c #695E5A", "@.- c #A8908C", "#.- c #A58985", "$.- c #9A7B76", "%.- c #94736E", "&.- c #9A786F", "*.- c #A07E75", "=.- c #9E7C72", "-.- c #917164", ";.- c #866657", ">.- c #806353", ",.- c #816653", "'.- c #8C735D", ").- c #99836B", "!.- c #958169", "~.- c #392E1C", "{.- c #020A0D", "].- c #00070A", "^.- c #000408", "/.- c #020308", "(.- c #05040A", "_.- c #0D010B", ":.- c #130610", "<.- c #1A0612", "[.- c #1D0714", "}.- c #230B19", "|.- c #250A19", "1.- c #240514", "2.- c #3F1626", "3.- c #481E2C", "4.- c #552C3A", "5.- c #664550", "6.- c #3E242D", "7.- c #061512", "8.- c #061414", "9.- c #031312", "0.- c #030F0F", "a.- c #170C14", "b.- c #4C4849", "c.- c #545051", "d.- c #585455", "e.- c #696B6A", "f.- c #B7B8B0", "g.- c #B3B6AD", "h.- c #B6B7AF", "i.- c #BDBDB5", "j.- c #989991", "k.- c #90917F", "l.- c #411C23", "m.- c #461B24", "n.- c #4A1B25", "o.- c #4F1B27", "p.- c #581E2A", "q.- c #652631", "r.- c #76303B", "s.- c #934A51", "t.- c #9B5659", "u.- c #77403D", "v.- c #4B291D", "w.- c #260C0F", "x.- c #584541", "y.- c #A28984", "z.- c #957872", "A.- c #805F5A", "B.- c #8F6A64", "C.- c #A58078", "D.- c #BA938C", "E.- c #BA948B", "F.- c #AA847B", "G.- c #9A766A", "H.- c #926E62", "I.- c #8D6C5D", "J.- c #866752", "K.- c #91755D", "L.- c #8B715A", "M.- c #937B63", "N.- c #A9947F", "O.- c #9B8A76", "P.- c #000405", "Q.- c #02070A", "R.- c #070208", "S.- c #0D0009", "T.- c #0A0004", "U.- c #0D0006", "V.- c #17030E", "W.- c #1F0915", "X.- c #230916", "Y.- c #240411", "Z.- c #280712", "`.- c #31111C", " +- c #43252F", ".+- c #59424A", "++- c #534044", "@+- c #4A3A3D", "#+- c #4B2427", "$+- c #050F0E", "%+- c #081412", "&+- c #081414", "*+- c #031111", "=+- c #030D0E", "-+- c #595556", ";+- c #565455", ">+- c #595959", ",+- c #7B7D7C", "'+- c #A4A69B", ")+- c #A7A99C", "!+- c #AAAC9E", "~+- c #767769", "{+- c #2B0B0C", "]+- c #300C0E", "^+- c #330C0F", "/+- c #370C13", "(+- c #3E1118", "_+- c #44171E", ":+- c #4D1A21", "<+- c #54191F", "[+- c #894246", "}+- c #8C4243", "|+- c #9C4D49", "1+- c #9A4B46", "2+- c #9E4F48", "3+- c #A6584E", "4+- c #AB5D53", "5+- c #AA5C50", "6+- c #A15B4F", "7+- c #8A5243", "8+- c #754636", "9+- c #603222", "0+- c #522415", "a+- c #491E0E", "b+- c #441A0C", "c+- c #3E1408", "d+- c #3A120A", "e+- c #391109", "f+- c #3A110B", "g+- c #380F09", "h+- c #3B130B", "i+- c #371106", "j+- c #3E1A0C", "k+- c #3A1A0D", "l+- c #36180D", "m+- c #4D3932", "n+- c #7E6B67", "o+- c #836F6E", "p+- c #83716F", "q+- c #8D7B7B", "r+- c #9D8A8C", "s+- c #8D7269", "t+- c #8B6D65", "u+- c #906B63", "v+- c #AE857F", "w+- c #AB807A", "x+- c #9F746E", "y+- c #9A6D67", "z+- c #9C6F69", "A+- c #9D7269", "B+- c #8D6655", "C+- c #916E58", "D+- c #987863", "E+- c #9D816B", "F+- c #9F8672", "G+- c #908370", "H+- c #747162", "I+- c #040203", "J+- c #0A0406", "K+- c #090003", "L+- c #0B0004", "M+- c #0F0307", "N+- c #110509", "O+- c #100408", "P+- c #0E0910", "Q+- c #030F05", "R+- c #071313", "S+- c #0D1A11", "T+- c #372D2E", "U+- c #443A3B", "V+- c #473D3E", "W+- c #5B5B5B", "X+- c #9FA49E", "Y+- c #B4B6A9", "Z+- c #898B7D", "`+- c #232210", " @- c #412114", ".@- c #341010", "+@- c #3C0F12", "@@- c #411315", "#@- c #4A151B", "$@- c #511A20", "%@- c #591D25", "&@- c #60232B", "*@- c #672A32", "=@- c #7B3337", "-@- c #9E5050", ";@- c #A5554E", ">@- c #A15148", ",@- c #A04E43", "'@- c #A25044", ")@- c #AD5A4C", "!@- c #AF594A", "~@- c #A65949", "{@- c #995A49", "]@- c #8F5645", "^@- c #864C3E", "/@- c #7D4335", "(@- c #743C2D", "_@- c #6E3627", ":@- c #673224", "<@- c #4D190E", "[@- c #582E1E", "}@- c #563121", "|@- c #694D42", "1@- c #6A5248", "2@- c #A5908B", "3@- c #AC9794", "4@- c #A99395", "5@- c #A18A82", "6@- c #9E867A", "7@- c #937B6F", "8@- c #91756A", "9@- c #917067", "0@- c #8C6A61", "a@- c #8C655E", "b@- c #99706A", "c@- c #A47973", "d@- c #A37671", "e@- c #9F6F6B", "f@- c #9F6E6A", "g@- c #9E6D69", "h@- c #9D6C65", "i@- c #976C5C", "j@- c #8B6552", "k@- c #8B6653", "l@- c #9A7966", "m@- c #AF9481", "n@- c #B29D8A", "o@- c #9E8F7C", "p@- c #7D796D", "q@- c #080300", "r@- c #2F242A", "s@- c #180E17", "t@- c #160C17", "u@- c #160A16", "v@- c #081305", "w@- c #0E160B", "x@- c #0B1919", "y@- c #0F1B1B", "z@- c #0B180F", "A@- c #0B1B10", "B@- c #0C1910", "C@- c #453B3C", "D@- c #575556", "E@- c #585657", "F@- c #737373", "G@- c #9C9E90", "H@- c #5B5A48", "I@- c #574338", "J@- c #511A1F", "K@- c #6C2B33", "L@- c #A85A5A", "M@- c #A85859", "N@- c #A95854", "O@- c #AB5A56", "P@- c #A8554F", "Q@- c #A3504A", "R@- c #A35048", "S@- c #A8544A", "T@- c #AB574D", "U@- c #AB574C", "V@- c #A7574C", "W@- c #A15B53", "X@- c #A06057", "Y@- c #A26259", "Z@- c #9F5F56", "`@- c #98584F", " #- c #915148", ".#- c #8C4D44", "+#- c #8A4B44", "@#- c #844840", "##- c #7B3F37", "$#- c #7E433B", "%#- c #844941", "&#- c #834840", "*#- c #7F443E", "=#- c #7B4239", "-#- c #734136", ";#- c #764839", ">#- c #7A4E41", ",#- c #7C5546", "'#- c #856155", ")#- c #8E6E61", "!#- c #917369", "~#- c #897069", "{#- c #AC9490", "]#- c #B29A98", "^#- c #AE9694", "/#- c #9D8583", "(#- c #9B827B", "_#- c #9D8579", ":#- c #9D8277", "<#- c #977B70", "[#- c #95776D", "}#- c #937168", "|#- c #8C635D", "1#- c #956A64", "2#- c #9A6D68", "3#- c #9B6B67", "4#- c #9D6C68", "5#- c #A16E6B", "6#- c #9E6B67", "7#- c #A07265", "8#- c #916757", "9#- c #8C6554", "0#- c #997865", "a#- c #B09381", "b#- c #B39C8A", "c#- c #9D8C7A", "d#- c #0B0301", "e#- c #010204", "f#- c #291D21", "g#- c #322328", "h#- c #32232A", "i#- c #2C1F26", "j#- c #1C0F18", "k#- c #1A0D16", "l#- c #190C15", "m#- c #170A14", "n#- c #47332A", "o#- c #4A4142", "p#- c #606060", "q#- c #B2B4A7", "r#- c #5D5E4E", "s#- c #656251", "t#- c #56453B", "u#- c #86353E", "v#- c #91403F", "w#- c #A25150", "x#- c #A85452", "y#- c #B25E5C", "z#- c #A75450", "A#- c #A5524E", "B#- c #A85350", "C#- c #A9544F", "D#- c #AA5550", "E#- c #A65551", "F#- c #A05454", "G#- c #A25859", "H#- c #9A5351", "I#- c #97504E", "J#- c #A25C5A", "K#- c #9D5755", "L#- c #9D5956", "M#- c #A4615B", "N#- c #A8655F", "O#- c #9D5E57", "P#- c #885248", "Q#- c #8B5A4C", "R#- c #926256", "S#- c #996D60", "T#- c #A37B6F", "U#- c #A98579", "V#- c #A38177", "W#- c #99786F", "X#- c #A0837B", "Y#- c #A78B87", "Z#- c #A58986", "`#- c #A48885", " $- c #A28685", ".$- c #A18381", "+$- c #9C7F77", "@$- c #9D8176", "#$- c #9E8076", "$$- c #9B7D73", "%$- c #97756C", "&$- c #956E67", "*$- c #926963", "=$- c #946963", "-$- c #986B66", ";$- c #996965", ">$- c #956460", ",$- c #966360", "'$- c #9F6967", ")$- c #A66E6D", "!$- c #A6716D", "~$- c #A8786E", "{$- c #A27669", "]$- c #9D7667", "^$- c #9D7969", "/$- c #9D7D6E", "($- c #967C6D", "_$- c #0E0402", ":$- c #0A0501", "<$- c #2B181E", "[$- c #261319", "}$- c #25111A", "|$- c #241019", "1$- c #230F18", "2$- c #211016", "3$- c #474141", "4$- c #5D5B5C", "5$- c #666666", "6$- c #A8AA9D", "7$- c #828373", "8$- c #6F695B", "9$- c #5C5447", "0$- c #4D392E", "a$- c #4F3126", "b$- c #541D22", "c$- c #561D23", "d$- c #5C1F26", "e$- c #601F25", "f$- c #631D25", "g$- c #702127", "h$- c #8F3338", "i$- c #A65051", "j$- c #AA5455", "k$- c #B05A5B", "l$- c #B35D5E", "m$- c #AF595A", "n$- c #AB5558", "o$- c #A85255", "p$- c #A75255", "q$- c #A85454", "r$- c #A95660", "s$- c #A8555D", "t$- c #A25356", "u$- c #A65A5C", "v$- c #A95D5D", "w$- c #986258", "x$- c #9A665B", "y$- c #9E6C61", "z$- c #A97A70", "A$- c #B1867D", "B$- c #AE867E", "C$- c #A37E76", "D$- c #AB8980", "E$- c #A5847D", "F$- c #A18079", "G$- c #9F7E79", "H$- c #9D7B79", "I$- c #9C7A78", "J$- c #9C7A79", "K$- c #9B7A73", "L$- c #9B7A71", "M$- c #9E7C73", "N$- c #9F7D74", "O$- c #9B706A", "P$- c #9C6C68", "Q$- c #A06F6B", "R$- c #9D6A67", "S$- c #8E5655", "T$- c #965E5D", "U$- c #A56B6A", "V$- c #AB7471", "W$- c #AE7C75", "X$- c #AA7B71", "Y$- c #A1776B", "Z$- c #977166", "`$- c #8D6B5F", " %- c #87695E", ".%- c #846D5F", "+%- c #847163", "@%- c #150D02", "#%- c #100501", "$%- c #281318", "%%- c #2F161C", "&%- c #2F151E", "*%- c #2C0F09", "=%- c #4E302E", "-%- c #1D0805", ";%- c #180604", ">%- c #626053", ",%- c #121001", "'%- c #6A6758", ")%- c #5E5B4C", "!%- c #4C4437", "~%- c #5C1E23", "{%- c #5D1C22", "]%- c #5E1B22", "^%- c #5D1A21", "/%- c #5C1B23", "(%- c #5D1C24", "_%- c #5E1B24", ":%- c #611B23", "<%- c #641B22", "[%- c #6A151C", "}%- c #7C2128", "|%- c #AB5151", "1%- c #AF5557", "2%- c #B0555A", "3%- c #B35A5E", "4%- c #B1585E", "5%- c #AE575F", "6%- c #AC555D", "7%- c #AA535C", "8%- c #B05769", "9%- c #A64A5F", "0%- c #AD5264", "a%- c #AD5565", "b%- c #A85060", "c%- c #AB595F", "d%- c #AE5E61", "e%- c #AA585C", "f%- c #A75557", "g%- c #AA6761", "h%- c #A1655D", "i%- c #995E56", "j%- c #965F58", "k%- c #A06E65", "l%- c #B18079", "m%- c #B88C83", "n%- c #B88D86", "o%- c #AD847E", "p%- c #A78079", "q%- c #A47D76", "r%- c #99716F", "s%- c #966E6C", "t%- c #97706B", "u%- c #99726B", "v%- c #A17872", "w%- c #A17670", "x%- c #A2726E", "y%- c #A47470", "z%- c #A3706D", "A%- c #915958", "B%- c #8B5150", "C%- c #925656", "D%- c #9F6363", "E%- c #A76D6C", "F%- c #AE7975", "G%- c #9E6D66", "H%- c #8D605A", "I%- c #8A5F58", "J%- c #8F6960", "K%- c #947268", "L%- c #8A7769", "M%- c #0F0B00", "N%- c #060600", "O%- c #0C0800", "P%- c #280F13", "Q%- c #280E0F", "R%- c #250B0C", "S%- c #26090B", "T%- c #270A0C", "U%- c #28090E", "V%- c #290A0F", "W%- c #2A0A0F", "X%- c #2A0910", "Y%- c #2B0A11", "Z%- c #2C0B14", "`%- c #2C0C11", " &- c #2E0E0F", ".&- c #321215", "+&- c #331318", "@&- c #34131A", "#&- c #35141B", "$&- c #37161D", "%&- c #2B1309", "&&- c #260E02", "*&- c #2B0F04", "=&- c #642C2B", "-&- c #4D2B2A", ";&- c #583434", ">&- c #5D3736", ",&- c #5B3333", "'&- c #32110A", ")&- c #280B03", "!&- c #2B0E06", "~&- c #140603", "{&- c #5B595A", "]&- c #BBBBBB", "^&- c #B8B8AC", "/&- c #565445", "(&- c #0D0B00", "_&- c #555644", ":&- c #5C5D4B", "<&- c #4F4C3B", "[&- c #601B20", "}&- c #60171E", "|&- c #5F161D", "1&- c #611A22", "2&- c #621B23", "3&- c #631A23", "4&- c #661923", "5&- c #681821", "6&- c #6A171F", "7&- c #6C1319", "8&- c #A44647", "9&- c #A94A4E", "0&- c #B6575D", "a&- c #B1555A", "b&- c #B0535B", "c&- c #AB515B", "d&- c #AC525E", "e&- c #AC5462", "f&- c #AC5464", "g&- c #AA5364", "h&- c #A85162", "i&- c #A55063", "j&- c #A64E64", "k&- c #AF526F", "l&- c #AC4F6E", "m&- c #A94A68", "n&- c #A74A67", "o&- c #AA4C67", "p&- c #AA4E67", "q&- c #A74B60", "r&- c #AF5964", "s&- c #B15E66", "t&- c #B15C63", "u&- c #AB595D", "v&- c #AF5A5F", "w&- c #B26263", "x&- c #AD6664", "y&- c #A86461", "z&- c #9E5F5A", "A&- c #9A5D5A", "B&- c #A26864", "C&- c #B37C77", "D&- c #BD8B84", "E&- c #BE8F87", "F&- c #B58882", "G&- c #AE837C", "H&- c #AD827B", "I&- c #AE837D", "J&- c #A97E78", "K&- c #A17471", "L&- c #9E716E", "M&- c #A07471", "N&- c #976C66", "O&- c #A0736E", "P&- c #A0706C", "Q&- c #A26F6C", "R&- c #A77471", "S&- c #A56F6D", "T&- c #A16766", "U&- c #975B5B", "V&- c #9F6162", "W&- c #A06464", "X&- c #A16968", "Y&- c #81504C", "Z&- c #8E635D", "`&- c #98766D", " *- c #92746A", ".*- c #8E7368", "+*- c #9C897B", "@*- c #0F0900", "#*- c #0E0C00", "$*- c #0F1002", "%*- c #0B0B00", "&*- c #655555", "**- c #5E4E4E", "=*- c #544444", "-*- c #180400", ";*- c #1A0200", ">*- c #331314", ",*- c #330F11", "'*- c #3A1318", ")*- c #391119", "!*- c #3A1119", "~*- c #3A101A", "{*- c #30060A", "]*- c #310709", "^*- c #33090D", "/*- c #350B0F", "(*- c #390E15", "_*- c #3A0F18", ":*- c #3B1019", "<*- c #3E131C", "[*- c #3D121B", "}*- c #3C1118", "|*- c #3A1012", "1*- c #390F10", "2*- c #370E0A", "3*- c #361109", "4*- c #310C03", "5*- c #3E180D", "6*- c #6C3A3B", "7*- c #6C3A39", "8*- c #380D07", "9*- c #3C130D", "0*- c #454744", "a*- c #5E5A5B", "b*- c #4D4B4C", "c*- c #767676", "d*- c #B4B4A8", "e*- c #7A786B", "f*- c #5A5D4A", "g*- c #636452", "h*- c #61161D", "i*- c #60151C", "j*- c #651A21", "k*- c #671720", "l*- c #6C151B", "m*- c #B04F56", "n*- c #B3545C", "o*- c #B0505B", "p*- c #AA4E5D", "q*- c #A84B5D", "r*- c #AA4F61", "s*- c #AB5266", "t*- c #AB536C", "u*- c #A9516A", "v*- c #A54F6A", "w*- c #A64D6B", "x*- c #A5476B", "y*- c #A6486D", "z*- c #A8486E", "A*- c #A14365", "B*- c #A04362", "C*- c #A0435E", "D*- c #9F455E", "E*- c #A95064", "F*- c #AC5963", "G*- c #AA575F", "H*- c #AA585E", "I*- c #AC5B61", "J*- c #AB5F61", "K*- c #AA6263", "L*- c #A86262", "M*- c #AB6B6B", "N*- c #B57A76", "O*- c #B9827F", "P*- c #B8837F", "Q*- c #A87571", "R*- c #9F6E69", "S*- c #9B6A65", "T*- c #9A6B65", "U*- c #976661", "V*- c #92615C", "W*- c #976763", "X*- c #996864", "Y*- c #9C6966", "Z*- c #9E6866", "`*- c #A56D6C", " =- c #A97170", ".=- c #A36767", "+=- c #9D5F60", "@=- c #A26465", "#=- c #9C5E5F", "$=- c #945A59", "%=- c #8B5553", "&=- c #82514D", "*=- c #875753", "==- c #936C65", "-=- c #95736A", ";=- c #96786E", ">=- c #92776C", ",=- c #897165", "'=- c #A18F81", ")=- c #211507", "!=- c #4D4B3E", "~=- c #8D7A74", "{=- c #8C7877", "]=- c #857170", "^=- c #7A6665", "/=- c #4C3732", "(=- c #250C05", "_=- c #583937", ":=- c #4A272B", "<=- c #4A262A", "[=- c #512A2B", "}=- c #5C2F34", "|=- c #603338", "1=- c #613439", "2=- c #61323A", "3=- c #603139", "4=- c #602E39", "5=- c #5F2D38", "6=- c #5E2C37", "7=- c #5E2931", "8=- c #5F2A32", "9=- c #612C34", "0=- c #632E38", "a=- c #67313E", "b=- c #693340", "c=- c #6A3441", "d=- c #713B48", "e=- c #6F3946", "f=- c #6D3842", "g=- c #6B363C", "h=- c #6A3638", "i=- c #623228", "j=- c #612B1F", "k=- c #663024", "l=- c #6C2E2F", "m=- c #6E3031", "n=- c #45100A", "o=- c #46110D", "p=- c #5A5657", "q=- c #5F5B5C", "r=- c #ACAEA3", "s=- c #222512", "t=- c #676A57", "u=- c #595A48", "v=- c #4C4B39", "w=- c #51302B", "x=- c #651A1F", "y=- c #621920", "z=- c #671A20", "A=- c #691A1F", "B=- c #6B1A20", "C=- c #6C1A1E", "D=- c #6A1417", "E=- c #AA4952", "F=- c #B3525D", "G=- c #B2515C", "H=- c #AF4F5B", "I=- c #B0505E", "J=- c #AF5163", "K=- c #AD5065", "L=- c #AB4D65", "M=- c #AB4E69", "N=- c #AE5470", "O=- c #B65B7A", "P=- c #BC6285", "Q=- c #BB6184", "R=- c #B15A7D", "S=- c #AB5177", "T=- c #A64975", "U=- c #A24571", "V=- c #A2436F", "W=- c #A34770", "X=- c #A74B72", "Y=- c #A74D71", "Z=- c #A14868", "`=- c #9C4361", " -- c #A44C65", ".-- c #A55067", "+-- c #AC5969", "@-- c #AE5C6A", "#-- c #AD5B67", "$-- c #AA5962", "%-- c #A95861", "&-- c #AE6167", "*-- c #A65E61", "=-- c #A76265", "--- c #AF6F6F", ";-- c #B57778", ">-- c #B47A78", ",-- c #9B6461", "'-- c #9A6561", ")-- c #996460", "!-- c #9D6663", "~-- c #9D6864", "{-- c #9C6664", "]-- c #A06867", "^-- c #A36968", "/-- c #A06665", "(-- c #A16565", "_-- c #A86869", ":-- c #9D5D5E", "<-- c #925A59", "[-- c #955F5D", "}-- c #95625F", "|-- c #966662", "1-- c #966964", "2-- c #946B65", "3-- c #87625A", "4-- c #927168", "5-- c #8A7467", "6-- c #261C10", "7-- c #5B5849", "8-- c #6B6859", "9-- c #565344", "0-- c #837167", "a-- c #7E6761", "b-- c #816766", "c-- c #7B6160", "d-- c #785E5D", "e-- c #785F5B", "f-- c #714E4A", "g-- c #7A5453", "h-- c #7F5758", "i-- c #7D5458", "j-- c #653B3F", "k-- c #704346", "l-- c #714346", "m-- c #6E4043", "n-- c #6D3C42", "o-- c #7A474E", "p-- c #89545E", "q-- c #87515E", "r-- c #834D5A", "s-- c #844C59", "t-- c #834A59", "u-- c #7F4553", "v-- c #80424F", "w-- c #864654", "x-- c #8E4E5F", "y-- c #905061", "z-- c #925262", "A-- c #8E5055", "B-- c #894B50", "C-- c #A56563", "D-- c #9A5B54", "E-- c #803F39", "F-- c #8A4A41", "G-- c #99564E", "H-- c #A25F57", "I-- c #97534A", "J-- c #8D473D", "K-- c #874137", "L-- c #894037", "M-- c #883F36", "N-- c #843C30", "O-- c #792A2D", "P-- c #73292A", "Q-- c #3C3E3B", "R-- c #525250", "S-- c #5C5859", "T-- c #A7A8A0", "U-- c #C7C5B9", "V-- c #646255", "W-- c #101302", "X-- c #363B27", "Y-- c #595C49", "Z-- c #782C2C", "`-- c #7B2D2B", " ;- c #AD4D5B", ".;- c #A9485B", "+;- c #A7485C", "@;- c #A74860", "#;- c #A54762", "$;- c #AA4D6C", "%;- c #AD4F71", "&;- c #B1557A", "*;- c #B85C83", "=;- c #BB6089", "-;- c #B95E89", ";;- c #B15884", ">;- c #AE5281", ",;- c #A94D7E", "';- c #A6487A", ");- c #A34675", "!;- c #A34874", "~;- c #A64B77", "{;- c #A54A73", "];- c #9D456B", "^;- c #974062", "/;- c #A04969", "(;- c #A14D67", "_;- c #A45068", ":;- c #A7536A", "<;- c #A75665", "[;- c #A65564", "};- c #AC5A66", "|;- c #AD646B", "1;- c #B06B70", "2;- c #AD6B6F", "3;- c #9C6060", "4;- c #985E5C", "5;- c #9A5F5B", "6;- c #9A605C", "7;- c #9A6462", "8;- c #9B6362", "9;- c #9C6463", "0;- c #9E6665", "a;- c #A56566", "b;- c #9E5E5F", "c;- c #995B5C", "d;- c #975D5B", "e;- c #995F5E", "f;- c #9A6261", "g;- c #9B6563", "h;- c #946762", "i;- c #956C66", "j;- c #A08A7D", "k;- c #776F62", "l;- c #7D7568", "m;- c #867E71", "n;- c #887E72", "o;- c #A0857E", "p;- c #947773", "q;- c #8C6E6C", "r;- c #8F716F", "s;- c #8D706C", "t;- c #846560", "u;- c #825D55", "v;- c #8B645D", "w;- c #936A66", "x;- c #976E6C", "y;- c #9D7172", "z;- c #9D7073", "A;- c #95686B", "B;- c #8B5C62", "C;- c #814E55", "D;- c #824D55", "E;- c #7E4951", "F;- c #77424A", "G;- c #733B46", "H;- c #743C47", "I;- c #7E4450", "J;- c #864C58", "K;- c #8B4E5E", "L;- c #874A5A", "M;- c #88495A", "N;- c #894A5D", "O;- c #864657", "P;- c #924D60", "Q;- c #964E62", "R;- c #995064", "S;- c #9D536C", "T;- c #9F576F", "U;- c #A25871", "V;- c #A15971", "W;- c #A0566D", "X;- c #985064", "Y;- c #9B5265", "Z;- c #A35C6C", "`;- c #B76D6E", " >- c #B26764", ".>- c #A95A56", "+>- c #A05049", "@>- c #903B34", "#>- c #8F3B31", "$>- c #8B372D", "%>- c #061113", "&>- c #3E403D", "*>- c #797979", "=>- c #B9B9B9", "->- c #58594B", ";>- c #090C00", ">>- c #1F2410", ",>- c #444734", "'>- c #5D604D", ")>- c #5B5C4A", "!>- c #963848", "~>- c #A04155", "{>- c #A8495D", "]>- c #A74A5F", "^>- c #A64862", "/>- c #A84A65", "(>- c #A94A6A", "_>- c #A7496B", ":>- c #AD4F74", "<>- c #B0547D", "[>- c #B75A87", "}>- c #BB5E8D", "|>- c #B95D8E", "1>- c #B65A8D", "2>- c #B3568B", "3>- c #B2558A", "4>- c #AD5085", "5>- c #A94C81", "6>- c #A5497C", "7>- c #A44879", "8>- c #A5497A", "9>- c #A14874", "0>- c #9B436D", "a>- c #963E64", "b>- c #9C4669", "c>- c #9D4869", "d>- c #9E4968", "e>- c #9E4B65", "f>- c #9F4D64", "g>- c #A14F65", "h>- c #9F5065", "i>- c #A25164", "j>- c #A34E61", "k>- c #AC5566", "l>- c #AF5B6A", "m>- c #AA636B", "n>- c #A66068", "o>- c #9D5C60", "p>- c #9A5C5D", "q>- c #985B5A", "r>- c #945857", "s>- c #935854", "t>- c #925753", "u>- c #9B6160", "v>- c #9D6362", "w>- c #A16364", "x>- c #A16162", "y>- c #A26263", "z>- c #A06061", "A>- c #9F5F5F", "B>- c #9C5F5C", "C>- c #9C5F5E", "D>- c #9F6362", "E>- c #A26866", "F>- c #A26B68", "G>- c #986562", "H>- c #8D5D59", "I>- c #855E59", "J>- c #9E7B75", "K>- c #A88B83", "L>- c #A29187", "M>- c #726159", "N>- c #836F68", "O>- c #957C77", "P>- c #8A6D69", "Q>- c #8B6C69", "R>- c #997775", "S>- c #957270", "T>- c #876462", "U>- c #94716F", "V>- c #987571", "W>- c #8D6A64", "X>- c #85605A", "Y>- c #8B655C", "Z>- c #8C645A", "`>- c #825750", " ,- c #885D56", ".,- c #926260", "+,- c #986667", "@,- c #936164", "#,- c #8B565C", "$,- c #824554", "%,- c #7D3F4E", "&,- c #7C3E4D", "*,- c #824253", "=,- c #864559", "-,- c #8B4A5E", ";,- c #8D495E", ">,- c #8B475C", ",,- c #8C465E", "',- c #904A62", "),- c #914B63", "!,- c #904860", "~,- c #954963", "{,- c #944562", "],- c #954562", "^,- c #984966", "/,- c #A04F6F", "(,- c #A35473", "_,- c #A45373", ":,- c #A15271", "<,- c #A35370", "[,- c #9C4E68", "},- c #9E4E67", "|,- c #A5586C", "1,- c #A7586B", "2,- c #B06063", "3,- c #AF5D5F", "4,- c #AE5A5A", "5,- c #AC5655", "6,- c #A44C4A", "7,- c #963934", "8,- c #953833", "9,- c #953630", "0,- c #89252D", "a,- c #071113", "b,- c #091515", "c,- c #6A6869", "d,- c #727365", "e,- c #212413", "f,- c #171A07", "g,- c #2C2F1C", "h,- c #6A6B59", "i,- c #545543", "j,- c #484637", "k,- c #4F4C3D", "l,- c #722127", "m,- c #711C23", "n,- c #832932", "o,- c #963A4F", "p,- c #A0445D", "q,- c #A94C67", "r,- c #AC4F6C", "s,- c #AE5372", "t,- c #B4597A", "u,- c #B85C81", "v,- c #B75B84", "w,- c #B25582", "x,- c #B95C8B", "y,- c #C06296", "z,- c #C06297", "A,- c #B95C93", "B,- c #B3568F", "C,- c #B25490", "D,- c #B45692", "E,- c #B0518B", "F,- c #AC4D85", "G,- c #A84981", "H,- c #A7497E", "I,- c #A34778", "J,- c #9F4372", "K,- c #9B406B", "L,- c #9A4268", "M,- c #984265", "N,- c #984364", "O,- c #994463", "P,- c #9B4663", "Q,- c #9C4965", "R,- c #9E4A64", "S,- c #A64E66", "T,- c #9C5960", "U,- c #9A595D", "V,- c #975758", "W,- c #925554", "X,- c #8F5251", "Y,- c #8D504D", "Z,- c #8E4E4C", "`,- c #8C4F4E", " '- c #905655", ".'- c #915756", "+'- c #935958", "@'- c #975D5C", "#'- c #9B5F5F", "$'- c #9A5A5A", "%'- c #995957", "&'- c #995A55", "*'- c #9F5F5D", "='- c #A46764", "-'- c #A66A69", ";'- c #A36766", ">'- c #895957", ",'- c #8D615E", "''- c #A27C79", ")'- c #AB8A85", "!'- c #A38682", "~'- c #A88C88", "{'- c #8C7E75", "]'- c #866F69", "^'- c #917873", "/'- c #9A7D79", "('- c #7B5554", "_'- c #7C5454", ":'- c #795151", "<'- c #835B5B", "['- c #936B69", "}'- c #946D68", "|'- c #835C55", "1'- c #7B524C", "2'- c #8C6057", "3'- c #875B52", "4'- c #82534B", "5'- c #885951", "6'- c #8E5D58", "7'- c #905D5A", "8'- c #945E5C", "9'- c #955F5F", "0'- c #90595C", "a'- c #8A5158", "b'- c #854756", "c'- c #824155", "d'- c #803C51", "e'- c #844057", "f'- c #89435B", "g'- c #86405A", "h'- c #8B455F", "i'- c #8F4661", "j'- c #8D445F", "k'- c #8E4562", "l'- c #944967", "m'- c #974C6A", "n'- c #974B69", "o'- c #934263", "p'- c #8E3A5C", "q'- c #8D375A", "r'- c #944064", "s'- c #A04A6F", "t'- c #A24E72", "u'- c #A14B70", "v'- c #9D496D", "w'- c #A34D72", "x'- c #9D496A", "y'- c #A3506A", "z'- c #A6526A", "A'- c #A75468", "B'- c #AD5B69", "C'- c #A0494F", "D'- c #A44B4F", "E'- c #A84F53", "F'- c #A94F51", "G'- c #96332E", "H'- c #932D29", "I'- c #1E0908", "J'- c #1C0809", "K'- c #070F12", "L'- c #091314", "M'- c #757374", "N'- c #494A38", "O'- c #6D6E5C", "P'- c #701F26", "Q'- c #701A25", "R'- c #731D28", "S'- c #7D2533", "T'- c #7A2230", "U'- c #7C2130", "V'- c #893042", "W'- c #9D455E", "X'- c #A44D6D", "Y'- c #AC5577", "Z'- c #B0597C", "`'- c #B75D83", " )- c #C0658E", ".)- c #C36894", "+)- c #C26695", "@)- c #BA5E91", "#)- c #C06398", "$)- c #C5689F", "%)- c #C2659E", "&)- c #BA5A99", "*)- c #B35393", "=)- c #B55595", "-)- c #B04E8B", ";)- c #AF4B87", ">)- c #AC4884", ",)- c #AA4780", "')- c #A9467D", "))- c #A54479", "!)- c #A44474", "~)- c #9E4170", "{)- c #9D406C", "])- c #993E67", "^)- c #983E64", "/)- c #973D63", "()- c #983E62", "_)- c #9A4064", ":)- c #9C4363", "<)- c #A04662", "[)- c #A34963", "})- c #A34B63", "|)- c #9E4960", "1)- c #99585E", "2)- c #965559", "3)- c #925253", "4)- c #8F4F4F", "5)- c #8D4D4D", "6)- c #8D4B4C", "7)- c #8B4B4B", "8)- c #8A504F", "9)- c #945858", "0)- c #955959", "a)- c #965A5A", "b)- c #A06263", "c)- c #975757", "d)- c #95544E", "e)- c #985751", "f)- c #9D5C56", "g)- c #A3625E", "h)- c #A46462", "i)- c #A16161", "j)- c #9A5E5E", "k)- c #9B6867", "l)- c #9B6D6D", "m)- c #A07677", "n)- c #A48080", "o)- c #AA8B89", "p)- c #B39794", "q)- c #AA9590", "r)- c #9C8983", "s)- c #988780", "t)- c #94817B", "u)- c #907B76", "v)- c #977F7B", "w)- c #947875", "x)- c #9A7B79", "y)- c #9E7A7A", "z)- c #8D6667", "A)- c #7F5255", "B)- c #835758", "C)- c #926665", "D)- c #9A716D", "E)- c #8B605A", "F)- c #885B55", "G)- c #90645B", "H)- c #916059", "I)- c #84544A", "J)- c #86544B", "K)- c #8E5C55", "L)- c #97625C", "M)- c #99625F", "N)- c #9A605F", "O)- c #985D5F", "P)- c #925759", "Q)- c #814152", "R)- c #833F58", "S)- c #823E57", "T)- c #813D56", "U)- c #803A54", "V)- c #813B55", "W)- c #853F5B", "X)- c #89405D", "Y)- c #863D5B", "Z)- c #8D4462", "`)- c #904566", " !- c #8D4263", ".!- c #944769", "+!- c #994C6E", "@!- c #9C4C6F", "#!- c #9E4970", "$!- c #943D67", "%!- c #923A64", "&!- c #9C4570", "*!- c #A9507C", "=!- c #AA537E", "-!- c #A74E7A", ";!- c #A54E78", ">!- c #A34B75", ",!- c #9F4970", "'!- c #9F486B", ")!- c #9F4A69", "!!- c #A14B68", "~!- c #A04C64", "{!- c #A44E67", "]!- c #A85366", "^!- c #AC555B", "/!- c #B35A60", "(!- c #AE5456", "_!- c #912B27", ":!- c #454442", "~- c #8F5E62", ",~- c #9F6E71", "'~- c #986A6A", ")~- c #91625C", "!~- c #93645C", "~~- c #98685E", "{~- c #915F56", "]~- c #865149", "^~- c #855048", "/~- c #8F5851", "(~- c #955E59", "_~- c #965C58", ":~- c #87405E", "<~- c #853E5C", "[~- c #843B59", "}~- c #833A58", "|~- c #863C5D", "1~- c #893E5F", "2~- c #883C60", "3~- c #904367", "4~- c #92446B", "5~- c #8E4067", "6~- c #8D3F66", "7~- c #94446B", "8~- c #9A4A71", "9~- c #9D4B73", "0~- c #A14A75", "a~- c #963D6B", "b~- c #933A6A", "c~- c #9F4676", "d~- c #AA5083", "e~- c #A94F82", "f~- c #A64D7D", "g~- c #A74E7E", "h~- c #A64D7B", "i~- c #A44B77", "j~- c #A34B73", "k~- c #A24B6E", "l~- c #A14A6C", "m~- c #A24C69", "n~- c #A34D68", "o~- c #A44F66", "p~- c #A9565E", "q~- c #B9646B", "r~- c #B45D63", "s~- c #993D3E", "t~- c #973534", "u~- c #070C10", "v~- c #51504E", "w~- c #555452", "x~- c #656162", "y~- c #686465", "z~- c #686667", "A~- c #929091", "B~- c #BAB8AC", "C~- c #636250", "D~- c #454539", "E~- c #702C29", "F~- c #6B1822", "G~- c #721C29", "H~- c #721A2A", "I~- c #751A2C", "J~- c #771B30", "K~- c #73162B", "L~- c #80223A", "M~- c #9E415E", "N~- c #B45E81", "O~- c #B5638B", "P~- c #B6638D", "Q~- c #B4618B", "R~- c #B76190", "S~- c #BA6495", "T~- c #B96295", "U~- c #B55C92", "V~- c #B85D98", "W~- c #BA5F9C", "X~- c #BE5F9F", "Y~- c #BC5D9F", "Z~- c #B8579C", "`~- c #B4539A", " {- c #B7539B", ".{- c #B9549A", "+{- c #B64C8E", "@{- c #B8498B", "#{- c #B64789", "${- c #B34584", "%{- c #B14382", "&{- c #B04480", "*{- c #AF467F", "={- c #AA4179", "-{- c #A84176", ";{- c #A53E73", ">{- c #A23C6E", ",{- c #9F396B", "'{- c #9C3666", "){- c #9B3565", "!{- c #983563", "~{- c #923258", "{{- c #97395B", "]{- c #9A3F60", "^{- c #97415E", "/{- c #99455F", "({- c #9B4C62", "_{- c #8F4D4F", ":{- c #8E4C4E", "<{- c #8E4C4D", "[{- c #854B4A", "}{- c #915555", "|{- c #A15E55", "1{- c #A9655C", "2{- c #AA655E", "3{- c #A7625D", "4{- c #A25E5B", "5{- c #A06060", "6{- c #9D5F62", "7{- c #9D6568", "8{- c #986669", "9{- c #8F6265", "0{- c #8F666A", "a{- c #957175", "b{- c #967679", "c{- c #A28887", "d{- c #917977", "e{- c #8D7573", "f{- c #927A78", "g{- c #947A79", "h{- c #957978", "i{- c #9C7C7D", "j{- c #946D70", "k{- c #8E6166", "l{- c #87565C", "m{- c #9C676D", "n{- c #976564", "o{- c #92625E", "p{- c #8E5E5A", "q{- c #905F5A", "r{- c #93625B", "s{- c #936158", "t{- c #915B51", "u{- c #9A6158", "v{- c #9F645E", "w{- c #9B5E5B", "x{- c #955857", "y{- c #935655", "z{- c #915152", "A{- c #8C4A54", "B{- c #8D4761", "C{- c #8C4263", "D{- c #873D5E", "E{- c #853A5B", "F{- c #873C5D", "G{- c #893D61", "H{- c #8C3F63", "I{- c #8B3D64", "J{- c #96456E", "K{- c #914069", "L{- c #8E3D66", "M{- c #93406A", "N{- c #9A4771", "O{- c #9E4875", "P{- c #A14878", "Q{- c #973B6E", "R{- c #95386D", "S{- c #A2457A", "T{- c #A6497E", "U{- c #A4477C", "V{- c #AE5285", "W{- c #AD527D", "X{- c #AA5074", "Y{- c #AB5174", "Z{- c #AB5272", "`{- c #A8526B", " ]- c #A55359", ".]- c #9A454A", "+]- c #933835", "@]- c #4A4645", "#]- c #524E4D", "$]- c #54504F", "%]- c #565251", "&]- c #615D5E", "*]- c #6E6A6B", "=]- c #797778", "-]- c #C6C6C6", ";]- c #737560", ">]- c #1B1C0A", ",]- c #626353", "']- c #4F5042", ")]- c #48493B", "!]- c #6D1B21", "~]- c #6B1520", "{]- c #721A28", "]]- c #74192B", "^]- c #781C35", "/]- c #791B36", "(]- c #8F304E", "_]- c #B3587B", ":]- c #B8638C", "<]- c #B86694", "[]- c #B76595", "}]- c #B46292", "|]- c #B66296", "1]- c #B96599", "2]- c #B8609A", "3]- c #B35B97", "4]- c #B35796", "5]- c #B45899", "6]- c #B8599B", "7]- c #B7589C", "8]- c #B6559C", "9]- c #B5549B", "0]- c #B8549C", "a]- c #BA559B", "b]- c #B84D91", "c]- c #B94C8D", "d]- c #B6498C", "e]- c #B34687", "f]- c #B04384", "g]- c #AF4283", "h]- c #B04482", "i]- c #B14583", "j]- c #AE427E", "k]- c #AB427B", "l]- c #A94079", "m]- c #A53C75", "n]- c #A13870", "o]- c #9E356D", "p]- c #9B326A", "q]- c #993164", "r]- c #9B3564", "s]- c #993861", "t]- c #95375C", "u]- c #8E3356", "v]- c #8E3759", "w]- c #964160", "x]- c #9B4864", "y]- c #994B61", "z]- c #964B5F", "A]- c #944B5C", "B]- c #924B59", "C]- c #904A54", "D]- c #904A52", "E]- c #8E4B52", "F]- c #8B4A52", "G]- c #884951", "H]- c #874A51", "I]- c #8A4C51", "J]- c #8C4E51", "K]- c #95575A", "L]- c #995D5C", "M]- c #9F6261", "N]- c #A46057", "O]- c #AF6862", "P]- c #B16A64", "Q]- c #AD6662", "R]- c #AB6565", "S]- c #AC6A6B", "T]- c #A9696A", "U]- c #976469", "V]- c #94656B", "W]- c #90666A", "X]- c #8D666B", "Y]- c #8B6769", "Z]- c #937170", "`]- c #8C6D6A", " ^- c #886A68", ".^- c #896C68", "+^- c #8E6F6C", "@^- c #91726F", "#^- c #916F6D", "$^- c #896664", "%^- c #8B6363", "&^- c #865C5D", "*^- c #8C5E60", "=^- c #946366", "-^- c #8E5A5E", ";^- c #8F585D", ">^- c #9F686B", ",^- c #9D6765", "'^- c #94615D", ")^- c #935C55", "!^- c #915851", "~^- c #9B605C", "{^- c #945756", "]^- c #8E4D53", "^^- c #8D4C52", "/^- c #8A4856", "(^- c #8B4462", "_^- c #893F64", ":^- c #85395F", "<^- c #83375D", "[^- c #84385E", "}^- c #883C62", "|^- c #8D3F67", "1^- c #8F4169", "2^- c #8F3E69", "3^- c #95446F", "4^- c #974573", "5^- c #913F6D", "6^- c #8E3B69", "7^- c #923F6D", "8^- c #984573", "9^- c #9D4778", "0^- c #A95184", "a^- c #9F4579", "b^- c #9E447A", "c^- c #AA5086", "d^- c #B0568C", "e^- c #AC4F88", "f^- c #AB4E87", "g^- c #B2558C", "h^- c #B4588B", "i^- c #B45889", "j^- c #B25783", "k^- c #B15681", "l^- c #B25780", "m^- c #B2587E", "n^- c #AC5776", "o^- c #B05F72", "p^- c #762126", "q^- c #100604", "r^- c #534F4E", "s^- c #636162", "t^- c #6F6D6E", "u^- c #868485", "v^- c #AEAFA1", "w^- c #999C89", "x^- c #52543F", "y^- c #181B06", "z^- c #474A35", "A^- c #666954", "B^- c #575A47", "C^- c #3D402F", "D^- c #3F4133", "E^- c #46483B", "F^- c #541011", "G^- c #571113", "H^- c #74292D", "I^- c #6B2024", "J^- c #701A23", "K^- c #6C1422", "L^- c #802537", "M^- c #731730", "N^- c #680B2A", "O^- c #812649", "P^- c #9E4269", "Q^- c #B65E88", "R^- c #B45E8F", "S^- c #B36096", "T^- c #B25F97", "U^- c #AF5C94", "V^- c #B25C99", "W^- c #B7619E", "X^- c #B960A2", "Y^- c #B55C9E", "Z^- c #B75AA0", "`^- c #B85BA1", " /- c #BB5BA2", "./- c #BC5BA2", "+/- c #BB5AA1", "@/- c #BA59A0", "#/- c #BB579D", "$/- c #B85395", "%/- c #BB5596", "&/- c #BA5496", "*/- c #B54F90", "=/- c #AE4889", "-/- c #AC4385", ";/- c #AD4486", ">/- c #AF4688", ",/- c #B04789", "'/- c #AF4585", ")/- c #AB4181", "!/- c #A93C7D", "~/- c #A53879", "{/- c #A23576", "]/- c #A13475", "^/- c #A03470", "//- c #9D3568", "(/- c #983262", "_/- c #953260", ":/- c #963562", "(- c #B45B8B", ",(- c #B25989", "'(- c #AF5882", ")(- c #AE5B77", "!(- c #9B495F", "~(- c #9F4C60", "{(- c #A44F62", "](- c #6E6E6E", "^(- c #B8BAB9", "/(- c #B9BAB4", "((- c #B8B9B1", "_(- c #BEC0B2", ":(- c #A3A693", "<(- c #7A7D6A", "[(- c #454833", "}(- c #1B1E09", "|(- c #373B24", "1(- c #6A6E57", "2(- c #696D56", "3(- c #5C5F4A", "4(- c #424532", "5(- c #404332", "6(- c #454739", "7(- c #37392E", "8(- c #33352A", "9(- c #2E3023", "0(- c #711A22", "a(- c #6D1521", "b(- c #802439", "c(- c #721530", "d(- c #660B2C", "e(- c #7D2148", "f(- c #943964", "g(- c #AE5585", "h(- c #B15A8F", "i(- c #B15E96", "j(- c #B15D98", "k(- c #AF5B97", "l(- c #B35D9C", "m(- c #B862A3", "n(- c #BB61A7", "o(- c #B95EA4", "p(- c #B759A3", "q(- c #B858A0", "r(- c #B8579E", "s(- c #B8579A", "t(- c #B85596", "u(- c #B95697", "v(- c #B45192", "w(- c #B04B8D", "x(- c #AC4789", "y(- c #AD4789", "z(- c #AE488A", "A(- c #B2498C", "B(- c #B1468A", "C(- c #B04387", "D(- c #AC3F83", "E(- c #A83B7F", "F(- c #A5387C", "G(- c #A33479", "H(- c #A13276", "I(- c #A23672", "J(- c #A0356D", "K(- c #9A3267", "L(- c #9B3567", "M(- c #9B3867", "N(- c #9B3968", "O(- c #973A66", "P(- c #953B61", "Q(- c #943D60", "R(- c #953F62", "S(- c #954162", "T(- c #934360", "U(- c #91435D", "V(- c #8F415B", "W(- c #8C405C", "X(- c #883B5B", "Y(- c #883D5C", "Z(- c #8B405E", "`(- c #8F455E", " _- c #8F475B", "._- c #8D4656", "+_- c #8E4755", "@_- c #8E4B54", "#_- c #904E52", "$_- c #914F50", "%_- c #90504E", "&_- c #955651", "*_- c #9C5855", "=_- c #A75D5C", "-_- c #A75959", ";_- c #A75B5D", ">_- c #A66164", ",_- c #A46264", "'_- c #A36266", ")_- c #9C6467", "!_- c #96635F", "~_- c #925F5C", "{_- c #925F5B", "]_- c #99645E", "^_- c #9A635E", "/_- c #965F5A", "(_- c #955E57", "__- c #955C53", ":_- c #935A51", "<_- c #945B52", "[_- c #985D55", "}_- c #9B6058", "|_- c #9D5D5B", "1_- c #9B5B59", "2_- c #985B58", "3_- c #99585C", "4_- c #95575C", "5_- c #96545E", "6_- c #945560", "7_- c #914E5F", "8_- c #87465A", "9_- c #8B4662", "0_- c #8D4269", "a_- c #8C416C", "b_- c #8B3E6A", "c_- c #893C68", "d_- c #893C6A", "e_- c #8B3E6C", "f_- c #904170", "g_- c #934473", "h_- c #924071", "i_- c #903E6F", "j_- c #8F3C70", "k_- c #913E72", "l_- c #974377", "m_- c #9B477B", "n_- c #9C477E", "o_- c #9F4C80", "p_- c #9E4F7F", "q_- c #A14E82", "r_- c #A34F83", "s_- c #A74F89", "t_- c #A9508A", "u_- c #AE508E", "v_- c #B0508F", "w_- c #B25291", "x_- c #B55793", "y_- c #B85B94", "z_- c #B75C95", "A_- c #B75D93", "B_- c #B45C8F", "C_- c #B35C89", "D_- c #B35F80", "E_- c #A24F69", "F_- c #A54F68", "G_- c #9C4153", "H_- c #535355", "I_- c #606261", "J_- c #B7B9AC", "K_- c #9FA28F", "L_- c #6E715C", "M_- c #52563F", "N_- c #60644D", "O_- c #656853", "P_- c #4D503D", "Q_- c #393B30", "R_- c #701921", "S_- c #6E1622", "T_- c #7D2136", "U_- c #70132E", "V_- c #690E2F", "W_- c #7D2146", "X_- c #92365F", "Y_- c #AF5684", "Z_- c #AE578C", "`_- c #B15C95", " :- c #B25D98", ".:- c #B15B98", "+:- c #B55C9C", "@:- c #BB62A4", "#:- c #BE63A9", "$:- c #BB60A6", "%:- c #B658A2", "&:- c #B456A0", "*:- c #B5559D", "=:- c #B3539B", "-:- c #B35299", ";:- c #B55499", ">:- c #B65598", ",:- c #BA5597", "':- c #B44E90", "):- c #B14B8D", "!:- c #B3488C", "~:- c #B4478B", "{:- c #B14488", "]:- c #AE4185", "^:- c #A93C80", "/:- c #A6377C", "(:- c #A33478", "_:- c #A33773", "::- c #A1356F", "<:- c #9F336D", "[:- c #9F386D", "}:- c #9E3A6C", "|:- c #9B396A", "1:- c #963966", "2:- c #943C64", "3:- c #943E63", "4:- c #944062", "5:- c #914061", "6:- c #8E3F5E", "7:- c #8A3B5A", "8:- c #883958", "9:- c #7B2E50", "0:- c #7E3155", "a:- c #843759", "b:- c #8C3F5F", "c:- c #924765", "d:- c #954B64", "e:- c #8F485A", "f:- c #904D54", "g:- c #905050", "h:- c #9E5455", "i:- c #A15255", "j:- c #A2565A", "k:- c #A95E62", "l:- c #A86064", "m:- c #9F6164", "n:- c #9B6064", "o:- c #976161", "p:- c #945E5E", "q:- c #96605E", "r:- c #98615E", "s:- c #97605D", "t:- c #975C56", "u:- c #945953", "v:- c #935852", "w:- c #965954", "x:- c #995C57", "y:- c #9E5E5E", "z:- c #9D5D5D", "A:- c #9E5C5D", "B:- c #9C5C5C", "C:- c #9C5A5B", "D:- c #9B595A", "E:- c #9A5A5B", "F:- c #975559", "G:- c #935258", "H:- c #934F5A", "I:- c #92505E", "J:- c #8E495C", "K:- c #874358", "L:- c #8E4765", "M:- c #8E436A", "N:- c #8E416D", "O:- c #8D406C", "P:- c #8F406F", "Q:- c #914271", "R:- c #924372", "S:- c #913D71", "T:- c #944074", "U:- c #984478", "V:- c #9F487F", "W:- c #A35084", "X:- c #A15282", "Y:- c #A24F83", "Z:- c #A64E88", "`:- c #AA518B", " <- c #AF518F", ".<- c #B15292", "+<- c #AF4F8F", "@<- c #B15190", "#<- c #B45491", "$<- c #B65992", "%<- c #B55A93", "&<- c #B65C92", "*<- c #B05C7E", "=<- c #A5526E", "-<- c #943B4F", ";<- c #943749", "><- c #993947", ",<- c #393A34", "'<- c #575759", ")<- c #616163", "!<- c #B4B7AE", "~<- c #8A8D7A", "{<- c #343724", "]<- c #2F321D", "^<- c #6F725D", "/<- c #494C3B", "(<- c #3E4032", "_<- c #3A3C31", ":<- c #3C3E33", "<<- c #4C2223", "[<- c #6D161E", "}<- c #781D2F", "|<- c #6D112A", "1<- c #6E1332", "2<- c #82264B", "3<- c #963A63", "4<- c #BD6190", "5<- c #AE558B", "6<- c #B65E9A", "7<- c #B45C99", "8<- c #B45B9B", "9<- c #BA5FA2", "0<- c #BC61A6", "a<- c #BA5FA5", "b<- c #B557A1", "c<- c #B3569D", "d<- c #B2529A", "e<- c #AF4F96", "f<- c #AF4E95", "g<- c #B04F94", "h<- c #B25194", "i<- c #B45396", "j<- c #BB5698", "k<- c #B95395", "l<- c #B65092", "m<- c #B54C8F", "n<- c #B34A8D", "o<- c #B2478B", "p<- c #B5488C", "q<- c #B24589", "r<- c #AF4286", "s<- c #AB3C81", "t<- c #A93A7E", "u<- c #A43876", "v<- c #A23972", "w<- c #A33A72", "x<- c #A03C70", "y<- c #9C3A6D", "z<- c #993969", "A<- c #973A67", "B<- c #973C67", "C<- c #964067", "D<- c #954067", "E<- c #8E3C60", "F<- c #8A395A", "G<- c #87375A", "H<- c #7A2A51", "I<- c #7C2E55", "J<- c #83365A", "K<- c #8E4163", "L<- c #984B6D", "M<- c #9C516F", "N<- c #9D536E", "O<- c #9C5269", "P<- c #974E62", "Q<- c #935059", "R<- c #8F4D51", "S<- c #914F53", "T<- c #955053", "U<- c #A76064", "V<- c #A26064", "W<- c #A05F63", "X<- c #9F5E62", "Y<- c #9C5E61", "Z<- c #9B5D60", "`<- c #93585C", " [- c #91595C", ".[- c #94595D", "+[- c #975C5E", "@[- c #9A5F61", "#[- c #9C6163", "$[- c #995D5D", "%[- c #9B5E5D", "&[- c #995C5B", "*[- c #985856", "=[- c #9A5A58", "-[- c #9C5C5A", ";[- c #A05E60", ">[- c #A15C5F", ",[- c #9D585B", "'[- c #9C575A", ")[- c #9A555A", "![- c #8D455B", "~[- c #894159", "{[- c #8B425D", "][- c #914768", "^[- c #8F436A", "/[- c #8F426E", "([- c #8E3F6E", "_[- c #934172", ":[- c #923E72", "<[- c #954175", "[[- c #9A467A", "}[- c #9D497D", "|[- c #9D487F", "1[- c #A45185", "2[- c #A35182", "3[- c #A24E82", "4[- c #A34C83", "5[- c #A54C86", "6[- c #A94E8B", "7[- c #AE4F8F", "8[- c #B25292", "9[- c #B2528F", "0[- c #B1548D", "a[- c #AF5787", "b[- c #A85277", "c[- c #A34E6D", "d[- c #9F4760", "e[- c #91384E", "f[- c #8A2F40", "g[- c #92323E", "h[- c #8E2E39", "i[- c #140700", "j[- c #100500", "k[- c #666668", "l[- c #636564", "m[- c #787A79", "n[- c #B4B5AF", "o[- c #B0B3A2", "p[- c #C1C4B3", "q[- c #6D705D", "r[- c #323520", "s[- c #161904", "t[- c #4B4E39", "u[- c #717461", "v[- c #6A6D5A", "w[- c #545746", "x[- c #3D3F34", "y[- c #73182A", "z[- c #670B24", "A[- c #721534", "B[- c #832549", "C[- c #92335B", "D[- c #BF628F", "E[- c #AF5589", "F[- c #B45C96", "G[- c #B85E9B", "H[- c #B55B99", "I[- c #B45A9A", "J[- c #B75B9E", "K[- c #B95CA2", "L[- c #B6569E", "M[- c #B4549C", "N[- c #B14F98", "O[- c #AE4D94", "P[- c #AE4D92", "Q[- c #B04F92", "R[- c #B35093", "S[- c #BC5698", "T[- c #BD5799", "U[- c #BF5699", "V[- c #BC5396", "W[- c #B84F92", "X[- c #AD4286", "Y[- c #AF4488", "Z[- c #B3468A", "`[- c #AE4184", " }- c #A93A7C", ".}- c #A73978", "+}- c #A53977", "@}- c #A43B76", "#}- c #A63D78", "$}- c #A23D75", "%}- c #9E3B72", "&}- c #9B3A6F", "*}- c #9A3C6E", "=}- c #9A3E6D", "-}- c #99406C", ";}- c #99426D", ">}- c #96416A", ",}- c #933E67", "'}- c #903B64", ")}- c #8C3A62", "!}- c #863560", "~}- c #873661", "{}- c #8A3962", "]}- c #96486F", "^}- c #9C4F71", "/}- c #9F5272", "(}- c #9E546F", "_}- c #994F68", ":}- c #985163", "<}- c #964F5F", "[}- c #8F4C55", "}}- c #9F585E", "|}- c #985A5D", "1}- c #93565D", "2}- c #94575E", "3}- c #985B62", "4}- c #9C5D65", "5}- c #9C5E63", "6}- c #9A5C61", "7}- c #9D5B5D", "8}- c #9C5A5C", "9}- c #A15D5E", "0}- c #A45F62", "a}- c #A35C62", "b}- c #904856", "c}- c #8C425B", "d}- c #893E5C", "e}- c #8B405F", "f}- c #914569", "g}- c #8F416B", "h}- c #8E3F6C", "i}- c #8D3E6D", "j}- c #934171", "k}- c #8D3B6C", "l}- c #933F73", "m}- c #963F74", "n}- c #994277", "o}- c #9D467D", "p}- c #A04980", "q}- c #A14880", "r}- c #A04D81", "s}- c #9F4A81", "t}- c #A14A81", "u}- c #A34A84", "v}- c #A74C89", "w}- c #AD4D8D", "x}- c #B24F90", "y}- c #B35091", "z}- c #B24F8F", "A}- c #AF4F8C", "B}- c #AE518A", "C}- c #AC5288", "D}- c #AD5389", "E}- c #AC5484", "F}- c #A85279", "G}- c #A95475", "H}- c #A85171", "I}- c #A44B67", "J}- c #983E57", "K}- c #892E40", "L}- c #86293B", "M}- c #903240", "N}- c #92393B", "O}- c #91383A", "P}- c #873539", "Q}- c #68686A", "R}- c #B2B5AC", "S}- c #BABCAE", "T}- c #959887", "U}- c #545744", "V}- c #070A00", "W}- c #636653", "X}- c #707360", "Y}- c #616355", "Z}- c #424439", "`}- c #6D161C", " |- c #701922", ".|- c #711627", "+|- c #650920", "@|- c #721532", "#|- c #7A1C3E", "$|- c #802247", "%|- c #AF527E", "&|- c #AC5286", "*|- c #B35A92", "=|- c #B95E99", "-|- c #B65B98", ";|- c #B25695", ">|- c #B6569D", ",|- c #B25198", "'|- c #B04F96", ")|- c #AF4E93", "!|- c #AF4E91", "~|- c #B24F92", "{|- c #B75193", "]|- c #B85294", "^|- c #BD5497", "/|- c #C0579A", "(|- c #C2599C", "_|- c #B95093", ":|- c #AE4387", "<|- c #AD3E82", "[|- c #AA3B7D", "}|- c #A73A7B", "||- c #A73B79", "1|- c #A63C7A", "2|- c #A53D78", "3|- c #A13C76", "4|- c #9E3D72", "5|- c #9D3F73", "6|- c #9C4071", "7|- c #9B4272", "8|- c #99426F", "9|- c #98416E", "0|- c #96406D", "a|- c #984475", "b|- c #944272", "c|- c #91406B", "d|- c #94436E", "e|- c #95476E", "f|- c #974A6E", "g|- c #974A6A", "h|- c #964A68", "i|- c #954B66", "j|- c #924A60", "k|- c #8E4757", "l|- c #9D515D", "m|- c #9C535C", "n|- c #9E595E", "o|- c #9D585D", "p|- c #9A585A", "q|- c #985859", "r|- c #97565A", "s|- c #985660", "t|- c #985662", "u|- c #995560", "v|- c #96525D", "w|- c #A55C63", "x|- c #A05460", "y|- c #914458", "z|- c #914359", "A|- c #92445E", "B|- c #904160", "C|- c #8B3C5C", "D|- c #8D3D60", "E|- c #924269", "F|- c #90426C", "G|- c #8D3E6B", "H|- c #8B3C6B", "I|- c #8E3C6C", "J|- c #913F6F", "K|- c #8E3C6D", "L|- c #8B3769", "M|- c #974075", "N|- c #9A4378", "O|- c #A24981", "P|- c #A0477F", "Q|- c #9E477E", "R|- c #A04781", "S|- c #A34885", "T|- c #A84A88", "U|- c #AE4B8C", "V|- c #B04D8E", "W|- c #B65394", "X|- c #B55293", "Y|- c #B14E8E", "Z|- c #AF528B", "`|- c #B1548B", " 1- c #B05689", ".1- c #B15A84", "+1- c #B76184", "@1- c #B55E80", "#1- c #AF5976", "$1- c #A74F68", "%1- c #8D344A", "&1- c #812638", "*1- c #8B3639", "=1- c #43443E", "-1- c #454640", ";1- c #595B5A", ">1- c #676968", ",1- c #B2B3AD", "'1- c #96988B", ")1- c #ADAFA2", "!1- c #A7AA99", "~1- c #757865", "{1- c #191C09", "]1- c #4B4E3B", "^1- c #6E715E", "/1- c #6D6F61", "(1- c #545648", "_1- c #4C4E43", ":1- c #43453A", "<1- c #2E332C", "[1- c #293029", "}1- c #751B25", "|1- c #761A29", "11- c #6B0E23", "21- c #7A1C37", "31- c #771838", "41- c #711136", "51- c #A1426C", "61- c #A94D80", "71- c #B0558E", "81- c #B95B97", "91- c #B65896", "01- c #B35494", "a1- c #B45597", "b1- c #B7569B", "c1- c #B7569D", "d1- c #B45096", "e1- c #B14E91", "f1- c #B24D8F", "g1- c #B74E91", "h1- c #BD5296", "i1- c #C1569A", "j1- c #C4599D", "k1- c #C2579B", "l1- c #BB5094", "m1- c #B64B8F", "n1- c #B14287", "o1- c #A93C7F", "p1- c #A73A7D", "q1- c #A63C7E", "r1- c #A63E7D", "s1- c #A43E7D", "t1- c #A13D79", "u1- c #A03D76", "v1- c #9F3D76", "w1- c #9C3E73", "x1- c #9C3F74", "y1- c #9D4075", "z1- c #9D4377", "A1- c #9F4578", "B1- c #9F4779", "C1- c #984476", "D1- c #964273", "E1- c #95446D", "F1- c #924569", "G1- c #934666", "H1- c #934765", "I1- c #914762", "J1- c #8F455C", "K1- c #934A5E", "L1- c #994C60", "M1- c #98495E", "N1- c #98495C", "O1- c #9A505D", "P1- c #97545B", "Q1- c #955062", "R1- c #954E60", "S1- c #964F61", "T1- c #975062", "U1- c #9B4D5D", "V1- c #914258", "W1- c #954464", "X1- c #924162", "Y1- c #8C3A60", "Z1- c #913E68", "`1- c #944270", " 2- c #8F3D6D", ".2- c #8C3A6B", "+2- c #8E3A6C", "@2- c #923E70", "#2- c #933F71", "$2- c #903C70", "%2- c #8D366B", "&2- c #963F76", "*2- c #973E76", "=2- c #994078", "-2- c #9D447C", ";2- c #A14882", ">2- c #A44984", ",2- c #A34883", "'2- c #9B4479", ")2- c #A74987", "!2- c #AA4A8A", "~2- c #AE4B8E", "{2- c #B04B8F", "]2- c #B44F93", "^2- c #AF4C8C", "/2- c #B4558D", "(2- c #B5598C", "_2- c #B45B87", ":2- c #BE688F", "<2- c #BC648A", "[2- c #B96284", "}2- c #B65D7B", "|2- c #973D56", "12- c #80273B", "22- c #933945", "32- c #9E454B", "42- c #626264", "52- c #B2B5AE", "62- c #B5B6B0", "72- c #8A8C81", "82- c #BABCAF", "92- c #1D200D", "02- c #373A27", "a2- c #696C5B", "b2- c #747668", "c2- c #5D5F51", "d2- c #54564B", "e2- c #442626", "f2- c #691316", "g2- c #771D26", "h2- c #7A1E2D", "i2- c #721528", "j2- c #83253F", "k2- c #7A1B39", "l2- c #6C0C31", "m2- c #9B3A65", "n2- c #A5477B", "o2- c #B05189", "p2- c #B75892", "q2- c #B65693", "r2- c #B35392", "s2- c #B55497", "t2- c #BA569C", "u2- c #B65396", "v2- c #B45194", "w2- c #B14C8E", "x2- c #B64D90", "y2- c #BE5195", "z2- c #C55A9E", "A2- c #C3589C", "B2- c #BC5195", "C2- c #B54A8E", "D2- c #AD4084", "E2- c #B34489", "F2- c #AF4085", "G2- c #A73A7E", "H2- c #A73D7F", "I2- c #A73E80", "J2- c #A13B7A", "K2- c #9F3B77", "L2- c #9D3B76", "M2- c #9B3C76", "N2- c #9D3E78", "O2- c #A0437C", "P2- c #A4477E", "Q2- c #A54B81", "R2- c #A64D85", "S2- c #A24B82", "T2- c #9B4779", "U2- c #9B4778", "V2- c #9A4775", "W2- c #974671", "X2- c #93426B", "Y2- c #93456C", "Z2- c #94476B", "`2- c #934668", " 3- c #914464", ".3- c #914664", "+3- c #934866", "@3- c #974B67", "#3- c #984A64", "$3- c #984861", "%3- c #994A60", "&3- c #9C4E64", "*3- c #98525A", "=3- c #924B5D", "-3- c #92485F", ";3- c #90465D", ">3- c #954A61", ",3- c #974C63", "'3- c #964B60", ")3- c #97495F", "!3- c #96495D", "~3- c #9A4B60", "{3- c #9D4E63", "]3- c #9F5063", "^3- c #A05164", "/3- c #A75669", "(3- c #9E4C62", "_3- c #9F4B62", ":3- c #95415B", "<3- c #974263", "[3- c #984468", "}3- c #8E3962", "|3- c #8E3764", "13- c #913B6A", "23- c #974374", "33- c #923E6F", "43- c #8D396B", "53- c #913D6F", "63- c #963F72", "73- c #933C71", "83- c #8F386D", "93- c #9E437C", "03- c #A54A85", "a3- c #A14681", "b3- c #9B427A", "c3- c #9E457F", "d3- c #A94989", "e3- c #B14C90", "f3- c #AE478C", "g3- c #AD468B", "h3- c #AC4688", "i3- c #AB4787", "j3- c #AE4A8A", "k3- c #B14F8C", "l3- c #B6548F", "m3- c #BB648E", "n3- c #BB638B", "o3- c #BD6689", "p3- c #BF6686", "q3- c #9C435F", "r3- c #812941", "s3- c #903749", "t3- c #933B4B", "u3- c #621B21", "v3- c #5B1D22", "w3- c #060C02", "x3- c #4A4B45", "y3- c #636365", "z3- c #AEB0A5", "A3- c #ABAD9F", "B3- c #777A69", "C3- c #2E3120", "D3- c #505342", "E3- c #757769", "F3- c #686A5C", "G3- c #303730", "H3- c #731724", "I3- c #791A2E", "J3- c #7E1F37", "K3- c #73132F", "L3- c #751437", "M3- c #8A2952", "N3- c #A54376", "O3- c #B95790", "P3- c #B14F8A", "Q3- c #B65491", "R3- c #BB5898", "S3- c #B8549A", "T3- c #B75399", "U3- c #B65298", "V3- c #AF4C8D", "W3- c #AF4B8B", "X3- c #B74A8E", "Y3- c #B94A8F", "Z3- c #B94C90", "`3- c #C3569A", " 4- c #C15498", ".4- c #BA4D91", "+4- c #B6498D", "@4- c #AF3F87", "#4- c #AD3D85", "$4- c #AC3C84", "%4- c #AB3D84", "&4- c #AC3E85", "*4- c #AA3F83", "=4- c #A94082", "-4- c #A53F80", ";4- c #A44080", ">4- c #A3417E", ",4- c #A1417E", "'4- c #A0427E", ")4- c #9D427F", "!4- c #9D4380", "~4- c #9C447E", "{4- c #9C457C", "]4- c #9C457A", "^4- c #9B4477", "/4- c #964371", "(4- c #97476E", "_4- c #98486D", ":4- c #974A6C", "<4- c #984B6B", "[4- c #9E4F6E", "}4- c #994966", "|4- c #944461", "14- c #954560", "24- c #994B65", "34- c #9D4F67", "44- c #9B4D63", "54- c #954A5F", "64- c #944A5B", "74- c #954967", "84- c #974865", "94- c #974963", "04- c #984863", "a4- c #994964", "b4- c #9C4963", "c4- c #A04D67", "d4- c #A25067", "e4- c #A24E66", "f4- c #A24C65", "g4- c #A04A63", "h4- c #9E4A62", "i4- c #9D4762", "j4- c #9B4761", "k4- c #994262", "l4- c #984164", "m4- c #953C68", "n4- c #933C69", "o4- c #93396C", "p4- c #923A6C", "q4- c #984174", "r4- c #933C6F", "s4- c #913A6D", "t4- c #913A6F", "u4- c #933A70", "v4- c #953C72", "w4- c #973E74", "x4- c #9F447D", "y4- c #A04580", "z4- c #A44682", "A4- c #A34581", "B4- c #A24482", "C4- c #A1437F", "D4- c #9E457D", "E4- c #A84888", "F4- c #AC498A", "G4- c #AF4A8E", "H4- c #B14A91", "I4- c #AD438B", "J4- c #AE458A", "K4- c #B0478A", "L4- c #AF498A", "M4- c #B3518E", "N4- c #B95792", "O4- c #BC5D95", "P4- c #BB5F92", "Q4- c #B45B89", "R4- c #B85F8B", "S4- c #C16991", "T4- c #B96285", "U4- c #953E51", "V4- c #6B2025", "W4- c #682127", "X4- c #070E06", "Y4- c #4C4D47", "Z4- c #4C4D48", "`4- c #686868", " 5- c #646466", ".5- c #5E5E60", "+5- c #B8B9B4", "@5- c #909284", "#5- c #585B4A", "$5- c #6A6C5E", "%5- c #6E7062", "&5- c #525449", "*5- c #373C35", "=5- c #313831", "-5- c #0B1308", ";5- c #741B21", ">5- c #741722", ",5- c #791B2D", "'5- c #7D1E34", ")5- c #73132E", "!5- c #741334", "~5- c #89274E", "{5- c #9B376B", "]5- c #B5508A", "^5- c #B14C88", "/5- c #B75391", "(5- c #BE5899", "_5- c #B44F91", ":5- c #BA5599", "<5- c #B9539C", "[5- c #B75497", "}5- c #B55295", "|5- c #B34D8E", "15- c #B7488D", "25- c #B8498E", "35- c #BE4F94", "45- c #BD5094", "55- c #B84B8F", "65- c #B04088", "75- c #AE3E86", "85- c #A73E81", "95- c #A53F81", "05- c #A43F81", "a5- c #A14181", "b5- c #A14282", "c5- c #9F4583", "d5- c #A04684", "e5- c #A14784", "f5- c #9E477C", "g5- c #9D4679", "h5- c #9E4879", "i5- c #9C4977", "j5- c #9D4A78", "k5- c #9C4B76", "l5- c #9C4B74", "m5- c #9D4C75", "n5- c #9D4D74", "o5- c #9D4D72", "p5- c #9E4E71", "q5- c #994869", "r5- c #954465", "s5- c #964566", "t5- c #994A69", "u5- c #9B4C6B", "v5- c #994A67", "w5- c #964862", "x5- c #944960", "y5- c #94495E", "z5- c #974867", "A5- c #97476A", "B5- c #974868", "C5- c #984767", "D5- c #9A4667", "E5- c #9B4768", "F5- c #A04B6A", "G5- c #A14C69", "H5- c #A04B68", "I5- c #A14A6A", "J5- c #A04A67", "K5- c #9E4865", "L5- c #9C4565", "M5- c #9B4464", "N5- c #994264", "O5- c #984066", "P5- c #984068", "Q5- c #973E6A", "R5- c #963D6D", "S5- c #963C6F", "T5- c #953B6F", "U5- c #953B71", "V5- c #973F72", "W5- c #953E71", "X5- c #933B6E", "Y5- c #943B71", "Z5- c #963D73", "`5- c #993F75", " 6- c #A1447D", ".6- c #A24480", "+6- c #A34380", "@6- c #A14180", "#6- c #A0407F", "$6- c #9E437E", "%6- c #A64685", "&6- c #A94687", "*6- c #AC478B", "=6- c #AD468D", "-6- c #B0468E", ";6- c #AF458D", ">6- c #B0478C", ",6- c #B1488B", "'6- c #B4508E", ")6- c #BA5694", "!6- c #BD5B96", "~6- c #BD6095", "{6- c #B3598C", "]6- c #BC648E", "^6- c #B86086", "/6- c #A65170", "(6- c #9F4A5F", "_6- c #A14C5F", ":6- c #672026", "<6- c #632027", "[6- c #541F25", "}6- c #041010", "|6- c #4D4E48", "16- c #656567", "26- c #818382", "36- c #A7A99B", "46- c #838577", "56- c #6F7163", "66- c #626457", "76- c #595B4E", "86- c #3B3C34", "96- c #343932", "06- c #751822", "a6- c #781A2A", "b6- c #7F1E32", "c6- c #76142D", "d6- c #751231", "e6- c #862248", "f6- c #8D2759", "g6- c #B85291", "h6- c #C2599B", "i6- c #BD569B", "j6- c #BB5499", "k6- c #B95299", "l6- c #B95498", "m6- c #B75495", "n6- c #B55292", "o6- c #B75192", "p6- c #B4458A", "q6- c #B9478D", "r6- c #B8468C", "s6- c #BD4B91", "t6- c #C35499", "u6- c #C4559A", "v6- c #C15297", "w6- c #B3438B", "x6- c #B2428A", "y6- c #B14189", "z6- c #A93E84", "A6- c #A83D83", "B6- c #A73E83", "C6- c #A53E83", "D6- c #A34083", "E6- c #A44386", "F6- c #A34786", "G6- c #A54988", "H6- c #A0497E", "I6- c #A24B80", "J6- c #A24B7E", "K6- c #A24C7D", "L6- c #9F4C7A", "M6- c #9F4C78", "N6- c #9E4B77", "O6- c #9E4E75", "P6- c #99496E", "Q6- c #95456A", "R6- c #98486B", "S6- c #9A4A6D", "T6- c #944565", "U6- c #954666", "V6- c #954665", "W6- c #964766", "X6- c #964764", "Y6- c #954663", "Z6- c #934463", "`6- c #95456C", " 7- c #96446C", ".7- c #96446A", "+7- c #98436A", "@7- c #9A4469", "#7- c #9B456A", "$7- c #9D476A", "%7- c #9E486B", "&7- c #A0496C", "*7- c #A0496B", "=7- c #9F486A", "-7- c #9E4767", ";7- c #9D4666", ">7- c #9B4466", ",7- c #9B4467", "'7- c #98406A", ")7- c #983F6B", "!7- c #983F6F", "~7- c #983E71", "{7- c #983E74", "]7- c #973C75", "^7- c #943A70", "/7- c #953A73", "(7- c #993E77", "_7- c #9D4079", ":7- c #A34382", "<7- c #A24281", "[7- c #A34080", "}7- c #A13E7F", "|7- c #9E3E7D", "17- c #9F417D", "27- c #A34583", "37- c #AA4587", "47- c #AB4489", "57- c #AC428A", "67- c #AC4189", "77- c #AF448C", "87- c #B1468E", "97- c #B3488E", "07- c #B44B8D", "a7- c #B54F8E", "b7- c #BB5594", "c7- c #BE5A96", "d7- c #BF609A", "e7- c #B5588D", "f7- c #B1578A", "g7- c #B85F8D", "h7- c #B8618B", "i7- c #AF5B7D", "j7- c #AA5572", "k7- c #AC586F", "l7- c #A45060", "m7- c #040E0F", "n7- c #030E10", "o7- c #4E4F49", "p7- c #565654", "q7- c #646464", "r7- c #6B6B6B", "s7- c #626262", "t7- c #747476", "u7- c #46483A", "v7- c #636557", "w7- c #6C6E61", "x7- c #5F6154", "y7- c #781D22", "z7- c #761923", "A7- c #771927", "B7- c #7E1D31", "C7- c #74112E", "D7- c #831D44", "E7- c #7E1649", "F7- c #AF4681", "G7- c #BA528F", "H7- c #C25A99", "I7- c #BB5294", "J7- c #B95696", "K7- c #B85595", "L7- c #B95394", "M7- c #BC488F", "N7- c #BA488E", "O7- c #C14F95", "P7- c #C45298", "Q7- c #C05196", "R7- c #BA4B90", "S7- c #B4498D", "T7- c #B4448C", "U7- c #B5458D", "V7- c #A83F84", "W7- c #A54084", "X7- c #A54688", "Y7- c #A94A8A", "Z7- c #A94D8C", "`7- c #A84D8A", " 8- c #A34A82", ".8- c #A14A7F", "+8- c #A14A7D", "@8- c #A04A7B", "#8- c #9F497A", "$8- c #9B4876", "%8- c #97466F", "&8- c #98486F", "*8- c #96466D", "=8- c #93436A", "-8- c #96466B", ";8- c #934368", ">8- c #904065", ",8- c #8F3F66", "'8- c #96436F", ")8- c #96436D", "!8- c #98436D", "~8- c #98436C", "{8- c #9A436D", "]8- c #9A446B", "^8- c #9B456C", "/8- c #9C466D", "(8- c #9D456D", "_8- c #9E466E", ":8- c #9E466C", "<8- c #9E476A", "[8- c #9D4669", "}8- c #9C4568", "|8- c #9B4369", "18- c #993E7B", "28- c #933A72", "38- c #963B74", "48- c #9E417A", "58- c #A2427F", "68- c #A23F7F", "78- c #A03D7D", "88- c #9F3C7D", "98- c #9F3C7C", "08- c #9F3F7E", "a8- c #A74485", "b8- c #AA4388", "c8- c #AB4287", "d8- c #AB4088", "e8- c #AA3F87", "f8- c #B2448D", "g8- c #B4468F", "h8- c #B64891", "i8- c #B54A90", "j8- c #B84F91", "k8- c #BD5594", "l8- c #BE5A98", "m8- c #C0609D", "n8- c #B75A93", "o8- c #B3598D", "p8- c #B96191", "q8- c #BD6691", "r8- c #B86488", "s8- c #B3607E", "t8- c #B36178", "u8- c #AC5B6E", "v8- c #45181D", "w8- c #040E10", "x8- c #494A44", "y8- c #8A8A8C", "z8- c #ADAFA4", "A8- c #7D7F71", "B8- c #505244", "C8- c #76786B", "D8- c #686A5D", "E8- c #55574C", "F8- c #4D4F44", "G8- c #781824", "H8- c #7F1C30", "I8- c #79152D", "J8- c #75112D", "K8- c #7F193E", "L8- c #770D3E", "M8- c #A43872", "N8- c #B14581", "O8- c #BA508E", "P8- c #C05696", "Q8- c #B95092", "R8- c #BC5398", "S8- c #B85196", "T8- c #B85397", "U8- c #BA5696", "V8- c #BA5495", "W8- c #BC4A90", "X8- c #C14C93", "Y8- c #C04B92", "Z8- c #BA468D", "`8- c #B9458C", " 9- c #BF4D93", ".9- c #BB4C91", "+9- c #B5468B", "@9- c #B04186", "#9- c #AC3D82", "$9- c #AB3E82", "%9- c #A63F84", "&9- c #A54283", "*9- c #A44585", "=9- c #A74888", "-9- c #AA4C8A", ";9- c #A34A80", ">9- c #A2497F", ",9- c #A0497C", "'9- c #9E477A", ")9- c #9C4677", "!9- c #9D4C77", "~9- c #9B4A73", "{9- c #9A4974", "]9- c #994873", "^9- c #974470", "/9- c #93406E", "(9- c #913E6C", "_9- c #8F3C6A", ":9- c #954371", "<9- c #98426F", "[9- c #994370", "}9- c #99446E", "|9- c #9A436E", "19- c #9C446E", "29- c #9D456F", "39- c #9C466B", "49- c #99426C", "59- c #97406B", "69- c #97406D", "79- c #973F71", "89- c #983F79", "99- c #983E7B", "09- c #983E7C", "a9- c #943972", "b9- c #973A73", "c9- c #983B74", "d9- c #9A3D76", "e9- c #9C3F78", "f9- c #9F3F7C", "g9- c #A0407D", "h9- c #A44181", "i9- c #A13E7E", "j9- c #A13C7E", "k9- c #A03B7D", "l9- c #9F3A7C", "m9- c #9E3B7B", "n9- c #A64384", "o9- c #A94287", "p9- c #AA4088", "q9- c #AB3F8A", "r9- c #AC3D89", "s9- c #B3438F", "t9- c #B54790", "u9- c #B84A93", "v9- c #B74C92", "w9- c #BE5897", "x9- c #BE5E9D", "y9- c #BB5D99", "z9- c #BA6096", "A9- c #BF6799", "B9- c #C26B98", "C9- c #BE6990", "D9- c #B76686", "E9- c #B4647D", "F9- c #B16277", "G9- c #070A0F", "H9- c #656565", "I9- c #757577", "J9- c #A7A99E", "K9- c #989A8C", "L9- c #0B0D00", "M9- c #727467", "N9- c #761622", "O9- c #7B172F", "P9- c #76122C", "Q9- c #7E1639", "R9- c #780C3E", "S9- c #A83B74", "T9- c #B44683", "U9- c #BA4E8A", "V9- c #BD5091", "W9- c #BE5397", "X9- c #BA5196", "Y9- c #B84F94", "Z9- c #B75095", "`9- c #B85494", " 0- c #B75393", ".0- c #B75190", "+0- c #C34E95", "@0- c #BD488F", "#0- c #BB478E", "$0- c #BB498F", "%0- c #B7458B", "&0- c #B6478C", "*0- c #A44484", "=0- c #A54686", "-0- c #A64886", ";0- c #A74C85", ">0- c #A54C82", ",0- c #A44B81", "'0- c #9E4A7B", ")0- c #9B4977", "!0- c #9A4876", "~0- c #9A4677", "{0- c #974375", "]0- c #964276", "^0- c #953E73", "/0- c #954373", "(0- c #954374", "_0- c #984273", ":0- c #984271", "<0- c #9A4473", "[0- c #9A4471", "}0- c #9A4370", "|0- c #9B4270", "10- c #9B426E", "20- c #9C436F", "30- c #9B446F", "40- c #9B446E", "50- c #9C456F", "60- c #973F6F", "70- c #973D7A", "80- c #973D7B", "90- c #963C7C", "00- c #963C7A", "a0- c #993C75", "b0- c #9B3E77", "c0- c #9E3E7B", "d0- c #A34081", "e0- c #A54082", "f0- c #A74087", "g0- c #AB4189", "h0- c #AF408C", "i0- c #B44490", "j0- c #B74793", "k0- c #B94B94", "l0- c #BB4D94", "m0- c #B94E94", "n0- c #BD5496", "o0- c #BC5C9C", "p0- c #BE609E", "q0- c #C1669F", "r0- c #C56DA0", "s0- c #C46E9D", "t0- c #BE6C94", "u0- c #B96A8A", "v0- c #B66882", "w0- c #BC6D83", "x0- c #AE6070", "y0- c #A55262", "z0- c #656563", "A0- c #696969", "B0- c #868688", "C0- c #6C6E60", "D0- c #232517", "E0- c #252719", "F0- c #65675A", "G0- c #77796C", "H0- c #5D5F54", "I0- c #0E1712", "J0- c #0B1610", "K0- c #0A150F", "L0- c #751521", "M0- c #7F1C2E", "N0- c #7D1A2F", "O0- c #77132D", "P0- c #7D1538", "Q0- c #7C1042", "R0- c #AD4079", "S0- c #B84A87", "T0- c #B84C88", "U0- c #B74A8B", "V0- c #B14789", "W0- c #B74E93", "X0- c #B54E93", "Y0- c #B55191", "Z0- c #B45090", "`0- c #B2508D", " a- c #B44E8D", ".a- c #C44C94", "+a- c #BF4A91", "@a- c #B04589", "#a- c #AE3F83", "$a- c #B54388", "%a- c #B9478C", "&a- c #B8468B", "*a- c #AF4084", "=a- c #AB3C80", "-a- c #AA3B80", ";a- c #AD3E83", ">a- c #A94085", ",a- c #A34383", "'a- c #A54785", ")a- c #A74985", "!a- c #A64B86", "~a- c #A94E87", "{a- c #A84D86", "]a- c #A74E84", "^a- c #A64D83", "/a- c #A54D80", "(a- c #A34C7F", "_a- c #A14D7E", ":a- c #9C4A78", "b- c #B34A8C", ",b- c #B6448A", "'b- c #BE4A91", ")b- c #C24E97", "!b- c #BF4B92", "~b- c #AC3D81", "{b- c #B44287", "]b- c #B7458A", "^b- c #B13F84", "/b- c #AC3A7F", "(b- c #AF3D82", "_b- c #AF3D83", ":b- c #A94083", "c- c #791B29", ",c- c #731225", "'c- c #720E26", ")c- c #801B3B", "!c- c #881E4C", "~c- c #A93E74", "{c- c #B74B85", "]c- c #B4478A", "^c- c #B84995", "/c- c #B84996", "(c- c #B74B97", "_c- c #B84C97", ":c- c #BA4F93", "d- c #B1478F", ",d- c #B64F94", "'d- c #9D3D7A", ")d- c #B45A90", "!d- c #B55D9A", "~d- c #BC66A3", "{d- c #C471A9", "]d- c #C474A7", "^d- c #C0719E", "/d- c #BC7096", "(d- c #BB7290", "_d- c #BE768E", ":d- c #C2798C", "e- c #9D3975", ",e- c #9D3B74", "'e- c #9A3C71", ")e- c #993D70", "!e- c #9A3E71", "~e- c #993B70", "{e- c #983A6F", "]e- c #9E3C75", "^e- c #A03C78", "/e- c #A83F81", "(e- c #A93E82", "_e- c #AA3F85", ":e- c #AE4389", "f- c #983F77", ",f- c #9D427B", "'f- c #9E3F79", ")f- c #993770", "!f- c #A93F81", "~f- c #B04289", "{f- c #B3458E", "]f- c #B2478F", "^f- c #AF468B", "/f- c #AB4B88", "(f- c #AB5089", "_f- c #B65F94", ":f- c #BF689B", "g- c #AB3E81", ",g- c #B1468C", "'g- c #B55092", ")g- c #B1518E", "!g- c #B35891", "~g- c #BC6399", "{g- c #C26B9E", "]g- c #BE6B9F", "^g- c #C97AB1", "/g- c #C376AE", "(g- c #BD70A4", "_g- c #B76E9B", ":g- c #B66E96", "h- c #5C5F4C", ",h- c #767966", "'h- c #5F6251", ")h- c #525544", "!h- c #68161A", "~h- c #711720", "{h- c #791329", "]h- c #841D3A", "^h- c #902750", "/h- c #AF4575", "(h- c #B94E84", "_h- c #AF437D", ":h- c #BB4E92", "i- c #871E46", ",i- c #A93F6D", "'i- c #B74C80", ")i- c #B1467E", "!i- c #B34783", "~i- c #B54693", "{i- c #BA4D90", "]i- c #BE5399", "^i- c #BC5199", "/i- c #BC498E", "(i- c #B94689", "_i- c #B74487", ":i- c #B03B7F", "j- c #B2477D", ",j- c #B54983", "'j- c #B54692", ")j- c #C358A0", "!j- c #BF5198", "~j- c #C25398", "{j- c #C04E93", "]j- c #BE4C91", "^j- c #BD4A8F", "/j- c #BB488B", "(j- c #AF367B", "_j- c #B1387D", ":j- c #B74286", "k- c #AF4A8C", ",k- c #AD4989", "'k- c #AD4788", ")k- c #AC4888", "!k- c #A94585", "~k- c #A54181", "{k- c #A14083", "]k- c #A24184", "^k- c #A34285", "/k- c #A54585", "(k- c #A3447E", "_k- c #A4457F", ":k- c #A3467F", "l- c #9E3673", ",l- c #9F3573", "'l- c #A13777", ")l- c #B34187", "!l- c #B9448A", "~l- c #BC478E", "{l- c #BE4892", "]l- c #BF4B94", "^l- c #BF4C97", "/l- c #BD4D97", "(l- c #BB5899", "_l- c #B75C97", ":l- c #BB649B", "m- c #BF6FA2", ",m- c #C173A3", "'m- c #BB74A0", ")m- c #C486AB", "!m- c #C489A9", "~m- c #C386A5", "{m- c #BE7E99", "]m- c #B47089", "^m- c #A96175", "/m- c #A15768", "(m- c #702B30", "_m- c #421319", ":m- c #391519", "n- c #BB4488", ",n- c #BD4489", "'n- c #BD4187", ")n- c #B93B82", "!n- c #B73980", "~n- c #B13C80", "{n- c #B24483", "]n- c #B14380", "^n- c #B0437D", "/n- c #B04887", "(n- c #AE4685", "_n- c #AA4485", ":n- c #9E377C", "o- c #B53F89", ",o- c #B5418A", "'o- c #B44589", ")o- c #B54B93", "!o- c #B24D93", "~o- c #BA5E9D", "{o- c #C36BA8", "]o- c #C271A9", "^o- c #C275A9", "/o- c #C47CAC", "(o- c #C481AD", "_o- c #C281A9", ":o- c #C589A3", "p- c #972C62", ",p- c #B04386", "'p- c #BB5297", ")p- c #BF5498", "!p- c #C4579A", "~p- c #C75A9D", "{p- c #C5569A", "]p- c #BE4F93", "^p- c #BE4D8F", "/p- c #BD4A8D", "(p- c #BD488C", "_p- c #BC478B", ":p- c #BC4388", "q- c #AF4583", ",q- c #AE4486", "'q- c #A73C80", ")q- c #A63C7C", "!q- c #9F3577", "~q- c #9B3074", "{q- c #A13779", "]q- c #B2488A", "^q- c #B14787", "/q- c #AD3F7C", "(q- c #AB3D7A", "_q- c #AA3977", ":q- c #AA3876", "r- c #BC3D82", ",r- c #BB3C81", "'r- c #B7387D", ")r- c #B23579", "!r- c #B4397C", "~r- c #B43D7F", "{r- c #AF417E", "]r- c #AC437E", "^r- c #B24088", "/r- c #A83B7E", "(r- c #A33679", "_r- c #9F3275", ":r- c #B34689", "s- c #A23578", ",s- c #AC3E7B", "'s- c #A93B78", ")s- c #A83674", "!s- c #A83473", "~s- c #B13979", "{s- c #B23A7A", "]s- c #B43B7E", "^s- c #B43F86", "/s- c #B5428D", "(s- c #B74491", "_s- c #B64692", ":s- c #B34C93", "t- c #B94693", ",t- c #B84795", "'t- c #B44894", ")t- c #AC458C", "!t- c #AD498F", "~t- c #B05195", "{t- c #B3589B", "]t- c #B05B9C", "^t- c #AE5E9B", "/t- c #AC639B", "(t- c #B06BA1", "_t- c #BB79A9", ":t- c #C283AE", "u- c #A84D92", ",u- c #AE579B", "'u- c #B15FA1", ")u- c #AE5E9D", "!u- c #AB609B", "~u- c #AC659D", "{u- c #B875A8", "]u- c #C485B2", "^u- c #CD8FB8", "/u- c #CB8FB3", "(u- c #CC91B1", "_u- c #CE93AF", ":u- c #C68AA4", "v- c #C485A2", ",v- c #C88AA3", "'v- c #C6889F", ")v- c #C17C91", "!v- c #AF5B72", "~v- c #A2495D", "{v- c #983F51", "]v- c #8E3644", "^v- c #802834", "/v- c #802E32", "(v- c #1F1317", "_v- c #100509", ":v- c #676765", "w- c #D693B4", ",w- c #C8839F", "'w- c #C58198", ")w- c #BF7B90", "!w- c #B86D81", "~w- c #A1495F", "{w- c #94374C", "]w- c #8B3042", "^w- c #842C3A", "/w- c #7B2530", "(w- c #7C7C7C", "_w- c #505340", ":w- c #590D11", "x- c #7F1635", ",x- c #6C0026", "'x- c #861646", ")x- c #A02F65", "!x- c #AF3F7A", "~x- c #BF4E90", "{x- c #C15B9C", "]x- c #C4629F", "^x- c #C868A5", "/x- c #CA6CA8", "(x- c #C970AA", "_x- c #CC74AE", ":x- c #D07DB5", "y- c #D075B0", ",y- c #D179B3", "'y- c #D27DB6", ")y- c #D281B9", "!y- c #D083B9", "~y- c #CC82B7", "{y- c #C57BAE", "]y- c #BF75A8", "^y- c #BE74A7", "/y- c #C379AC", "(y- c #C97CB0", "_y- c #C87EB1", ":y- c #DE98CA", "z- c #BB73A3", ",z- c #C37BAB", "'z- c #B974A3", ")z- c #B16F9F", "!z- c #B674A4", "~z- c #BC76A8", "{z- c #BD6FA3", "]z- c #BA679D", "^z- c #BA6199", "/z- c #C25A97", "(z- c #C55D9A", "_z- c #C35B98", ":z- c #BB518F", "A- c #BE4787", ",A- c #BD4585", "'A- c #BA3E84", ")A- c #BD3E8B", "!A- c #BC3F8B", "~A- c #BC4587", "{A- c #BA4687", "]A- c #C24990", "^A- c #C0478E", "/A- c #BF468D", "(A- c #BF468B", "_A- c #BD468A", ":A- c #BC498C", "B- c #B96098", ",B- c #B86198", "'B- c #B45F96", ")B- c #B35F91", "!B- c #B26088", "~B- c #B16081", "{B- c #AA5678", "]B- c #9F496C", "^B- c #9F4569", "/B- c #95395E", "(B- c #87294B", "_B- c #812443", ":B- c #802640", "C- c #BC7EAD", ",C- c #C083AF", "'C- c #C78CB8", ")C- c #D295BF", "!C- c #D399C2", "~C- c #D598C2", "{C- c #BE7FAE", "]C- c #BA78A8", "^C- c #B771A3", "/C- c #BB73A5", "(C- c #C278AB", "_C- c #C779AD", ":C- c #C06BA2", "D- c #B96FA2", ",D- c #BF6FA4", "'D- c #BE6BA1", ")D- c #B9669C", "!D- c #BB689E", "~D- c #B7649A", "{D- c #BC679E", "]D- c #BE649A", "^D- c #C1629A", "/D- c #C5639C", "(D- c #C6629E", "_D- c #C5609C", ":D- c #BD4F8E", "E- c #BE5F97", ",E- c #C05E97", "'E- c #BC5791", ")E- c #BD5590", "!E- c #BA518A", "~E- c #BB4F89", "{E- c #C1548E", "]E- c #BF528C", "^E- c #B94B88", "/E- c #BC4B8B", "(E- c #BB4D8C", "_E- c #BA4788", ":E- c #BB4889", "F- c #BF6196", ",F- c #BF5C93", "'F- c #BA578D", ")F- c #BA568C", "!F- c #BC588E", "~F- c #BC558C", "{F- c #B64F87", "]F- c #B54D88", "^F- c #B04883", "/F- c #AB437E", "(F- c #A9417C", "_F- c #AE4681", ":F- c #B54985", "G- c #C26DA4", ",G- c #C36CA1", "'G- c #C3699F", ")G- c #C76DA3", "!G- c #CA6BA3", "~G- c #C3659A", "{G- c #C05F95", "]G- c #BF5E94", "^G- c #BD5A91", "/G- c #B9568D", "(G- c #BA5891", "_G- c #B5538C", ":G- c #AF4D86", "H- c #C26FA7", ",H- c #C471A7", "'H- c #C671A8", ")H- c #CE77AC", "!H- c #D077AF", "~H- c #CA70A6", "{H- c #C4679C", "]H- c #C2659C", "^H- c #C0669C", "/H- c #C2689E", "(H- c #BD5E96", "_H- c #BB5C94", ":H- c #B6548D", "I- c #CD7AB0", ",I- c #C069A0", "'I- c #B65D95", ")I- c #B85E94", "!I- c #BA518C", "~I- c #C04D90", "{I- c #B94A8E", "]I- c #923D76", "^I- c #A55089", "/I- c #D47FB8", "(I- c #E28DC6", "_I- c #B5629A", ":I- c #B6659D", "J- c #D58BBE", ",J- c #D98FC2", "'J- c #D78DC0", ")J- c #D184B8", "!J- c #C578AC", "~J- c #BC6EA2", "{J- c #BD6DA2", "]J- c #BA6A9F", "^J- c #B6669B", "/J- c #B46499", "(J- c #B95F95", "_J- c #BF6098", ":J- c #B4518A", "K- c #C57CB1", ",K- c #CD83B8", "'K- c #D086BB", ")K- c #CE84B9", "!K- c #D18BBD", "~K- c #D490C1", "{K- c #D894C5", "]K- c #D18DBE", "^K- c #CC86B8", "/K- c #C983B5", "(K- c #C882B4", "_K- c #BD73A6", ":K- c #BB71A4", "L- c #BF7CB1", ",L- c #BD78AE", "'L- c #C27EB1", ")L- c #CB87BA", "!L- c #CF89BD", "~L- c #CA8BBA", "{L- c #C98BBA", "]L- c #C688B7", "^L- c #C082B1", "/L- c #BB7CAB", "(L- c #B778A7", "_L- c #B97AA9", ":L- c #BC7DAC", "M- c #C382B8", ",M- c #BB7AB0", "'M- c #B978AE", ")M- c #BB7BAF", "!M- c #C07DB2", "~M- c #BF7CAF", "{M- c #BC79AC", "]M- c #C484B6", "^M- c #C082B3", "/M- c #C287B7", "(M- c #BB80B0", "_M- c #B87AAB", ":M- c #B97BAC", "N- c #A25C9A", ",N- c #A15B99", "'N- c #A862A1", ")N- c #B06BAA", "!N- c #A96AA3", "~N- c #A669A2", "{N- c #A96DA3", "]N- c #AF73A9", "^N- c #B276AA", "/N- c #B475AA", "(N- c #B374A9", "_N- c #B97AAF", ":N- c #B779AC", "O- c #934B7B", ",O- c #944E82", "'O- c #9B5589", ")O- c #9E5990", "!O- c #9A558E", "~O- c #9B5591", "{O- c #A45E9C", "]O- c #AC68A3", "^O- c #A3649D", "/O- c #A4659C", "(O- c #A6679E", "_O- c #AB6CA1", ":O- c #B071A6", "P- c #8E4B76", ",P- c #914E7A", "'P- c #955180", ")P- c #985487", "!P- c #965285", "~P- c #924D84", "{P- c #914C83", "]P- c #96518A", "^P- c #9B5790", "/P- c #995890", "(P- c #A26197", "_P- c #A9699D", ":P- c #AF6EA4", "Q- c #A76499", ",Q- c #AA679A", "'Q- c #AC699C", ")Q- c #AD6B9B", "!Q- c #AF6D9D", "~Q- c #AB6C99", "{Q- c #AE6C9C", "]Q- c #AF709D", "^Q- c #B06E9C", "/Q- c #AE6D98", "(Q- c #B775A3", "_Q- c #BB7BAD", ":Q- c #BE7EB2", "R- c #BC76AC", ",R- c #BB75AB", "'R- c #BF79AF", ")R- c #B86FA6", "!R- c #B96EA6", "~R- c #B86DA5", "{R- c #B368A0", "]R- c #B3669E", "^R- c #B2659D", "/R- c #B1649C", "(R- c #AF649C", "_R- c #AE659D", ":R- c #AD649C", "S- c #AD5994", ",S- c #AF5A93", "'S- c #AD598D", ")S- c #AD598B", "!S- c #AE5C8D", "~S- c #A95A8A", "{S- c #A35483", "]S- c #A1507B", "^S- c #95426C", "/S- c #923F69", "(S- c #8B3B62", "_S- c #7D2D54", ":S- c #7A2A4F", "T- c #853455", ",T- c #7F3050", "'T- c #7D314F", ")T- c #722944", "!T- c #6B253D", "~T- c #652138", "{T- c #66273A", "]T- c #6D3040", "^T- c #652B3A", "/T- c #521827", "(T- c #48101D", "_T- c #431822", ":T- c #230E15", "U- c #3A0E29", ",U- c #3F112D", "'U- c #431532", ")U- c #451733", "!U- c #451734", "~U- c #481734", "{U- c #4A1937", "]U- c #4E1C39", "^U- c #4D1A39", "/U- c #521C3C", "(U- c #541F3D", "_U- c #562040", ":U- c #582341", "V- c #7F3C67", ",V- c #7E3465", "'V- c #79305E", ")V- c #782F5D", "!V- c #7B325F", "~V- c #7D345F", "{V- c #7D355D", "]V- c #7B3359", "^V- c #853D63", "/V- c #884065", "(V- c #8C4567", "_V- c #8B4464", ":V- c #863F5F", "W- c #210A1C", ",W- c #260D20", "'W- c #230A1D", ")W- c #260B1E", "!W- c #290E21", "~W- c #2A0F22", "{W- c #2A0D21", "]W- c #301025", "^W- c #2D0D22", "/W- c #27071C", "(W- c #300F24", "_W- c #39162E", ":W- c #461A35", "X- c #0B0109", ",X- c #6C716D", "'X- c #8F9281", ")X- c #606255", "!X- c #4E4F47", "~X- c #080309", "{X- c #080307", "]X- c #080405", "^X- c #767B77", "/X- c #B2B3B5", "(X- c #51524A", "_X- c #4F5048", ":X- c #484745", "Y- c #5C5954", ",Y- c #6D6C68", "'Y- c #737568", ")Y- c #5E5F57", "!Y- c #0C1711", "~Y- c #051812", "{Y- c #031811", "]Y- c #021710", "^Y- c #061913", "/Y- c #0B1E18", "(Y- c #11221C", "_Y- c #13221D", ":Y- c #14201C", "Z- c #2C4541", ",Z- c #3E5754", "'Z- c #6D8283", ")Z- c #758A8B", "!Z- c #72878A", "~Z- c #5D7172", "{Z- c #475A5E", "]Z- c #3E5253", "^Z- c #3C4E52", "/Z- c #3B4A4D", "(Z- c #2E3D42", "_Z- c #263339", ":Z- c #263437", "`- c #BDD7D8", ",`- c #B7D1D2", "'`- c #92A7AA", ")`- c #6F8286", "!`- c #55686C", "~`- c #576A6E", "{`- c #46585C", "]`- c #394B4F", "^`- c #3A4C50", "/`- c #354449", "(`- c #37444A", "_`- c #3B484E", ":`- c #3C474D", "<`- c #3A474D", "[`- c #3D484E", "}`- c #343D44", "|`- c #393D46", "1`- c #363942", "2`- c #353841", "3`- c #373741", "4`- c #37373F", "5`- c #63665F", "6`- c #81847D", "7`- c #C0C2B4", "8`- c #A8AC9D", "9`- c #525647", "0`- c #3E4535", "a`- c #4D5143", "b`- c #616557", "c`- c #5C6052", "d`- c #626459", "e`- c #181E1E", "f`- c #10180D", "g`- c #0E180D", "h`- c #0F190E", "i`- c #0E1A0E", "j`- c #14211A", "k`- c #222F28", "l`- c #212C26", "m`- c #25322B", "n`- c #2D3832", "o`- c #12211C", "p`- c #5C6B68", "q`- c #7F8F8C", "r`- c #DFF1F1", "s`- c #E5F9FA", "t`- c #DDF2F3", "u`- c #B9CED1", "v`- c #778F91", "w`- c #647C7E", "x`- c #4B6063", "y`- c #4A5D61", "z`- c #415458", "A`- c #3F5256", "B`- c #44575B", "C`- c #405256", "D`- c #324448", "E`- c #314347", "F`- c #344348", "G`- c #394048", "H`- c #383C45", "I`- c #62655E", "J`- c #B1B5A6", "K`- c #7E8273", "L`- c #434A38", "M`- c #394030", "N`- c #596050", "O`- c #616556", "P`- c #5F6355", "Q`- c #5E6254", "R`- c #47473F", "S`- c #43433B", "T`- c #202A29", "U`- c #1C2625", "V`- c #1B2423", "W`- c #182221", "X`- c #172120", "Y`- c #192322", "Z`- c #182219", "``- c #1B251D", " ; c #1D271E", ". ; c #1F2921", "+ ; c #1A241C", "@ ; c #151F17", "# ; c #1E281F", "$ ; c #131E10", "% ; c #172214", "& ; c #101B0D", "* ; c #152012", "= ; c #142012", "- ; c #131F11", "; ; c #111F10", "> ; c #0F1D0E", ", ; c #0F1D10", "' ; c #1B2B21", ") ; c #243128", "! ; c #19291F", "~ ; c #16231A", "{ ; c #16261C", "] ; c #132017", "^ ; c #06160C", "/ ; c #112117", "( ; c #000F05", "_ ; c #041108", ": ; c #17271D", "< ; c #354239", "[ ; c #495851", "} ; c #EEFCFF", "| ; c #E2F1F4", "1 ; c #96A8AC", "2 ; c #697A81", "3 ; c #4C5F65", "4 ; c #506369", "5 ; c #607379", "6 ; c #52656B", "7 ; c #45575B", "8 ; c #4C5E62", "9 ; c #2F3E43", "0 ; c #314045", "a ; c #334046", "b ; c #394249", "c ; c #3B444B", "d ; c #3C454C", "e ; c #3A3E47", "f ; c #33363F", "g ; c #ADACB1", "h ; c #A2A997", "i ; c #59604E", "j ; c #333A28", "k ; c #5E6253", "l ; c #595D4E", "m ; c #414139", "n ; c #37372F", "o ; c #2A3332", "p ; c #283231", "q ; c #26302F", "r ; c #1F2928", "s ; c #1E2827", "t ; c #232D2C", "u ; c #27342B", "v ; c #2B362E", "w ; c #2B382F", "x ; c #253229", "y ; c #263129", "z ; c #344138", "A ; c #242F27", "B ; c #202B23", "C ; c #2E3A30", "D ; c #4E584D", "E ; c #2E392B", "F ; c #2D382A", "G ; c #343F31", "H ; c #273224", "I ; c #283426", "J ; c #313D2F", "K ; c #253324", "L ; c #2C3A2B", "M ; c #283929", "N ; c #273828", "O ; c #253727", "P ; c #243626", "Q ; c #233527", "R ; c #23342A", "S ; c #3F5048", "T ; c #35443D", "U ; c #3B4C44", "V ; c #4B5A53", "W ; c #53645C", "X ; c #606F68", "Y ; c #85968E", "Z ; c #A4B3AC", "` ; c #B8C9C1", " .; c #D7E6DF", "..; c #E9FAF2", "+.; c #F1FFF9", "@.; c #F0FBFD", "#.; c #8D989E", "$.; c #687379", "%.; c #35424A", "&.; c #1E2B33", "*.; c #526168", "=.; c #57666D", "-.; c #58666F", ";.; c #536569", ">.; c #506266", ",.; c #435559", "'.; c #334247", ").; c #323F45", "!.; c #384148", "~.; c #31343D", "{.; c #B9C0AE", "].; c #7A836E", "^.; c #3C442F", "/.; c #575B4A", "(.; c #434339", "_.; c #2C3635", ":.; c #2B3737", "<.; c #283434", "[.; c #263232", "}.; c #253131", "|.; c #243030", "1.; c #2E3A3A", "2.; c #323E3E", "3.; c #3A4944", "4.; c #404C48", "5.; c #3D4C47", "6.; c #3B4743", "7.; c #394843", "8.; c #434F4B", "9.; c #485752", "0.; c #3C4844", "a.; c #42514C", "b.; c #2C3B36", "c.; c #303C38", "d.; c #5F6C65", "e.; c #758278", "f.; c #434F43", "g.; c #323E32", "h.; c #303E31", "i.; c #1D2B1E", "j.; c #223023", "k.; c #313F32", "l.; c #233326", "m.; c #203023", "n.; c #203224", "o.; c #223426", "p.; c #253729", "q.; c #283A2C", "r.; c #283D2E", "s.; c #2A3F30", "t.; c #2C4035", "u.; c #40534D", "v.; c #354846", "w.; c #374746", "x.; c #455856", "y.; c #596968", "z.; c #697C7A", "A.; c #889897", "B.; c #A1B4B2", "C.; c #EAFAF9", "D.; c #DCEFED", "E.; c #EEFEFD", "F.; c #E6F6F5", "G.; c #E4F4F4", "H.; c #F5FEFF", "I.; c #737C83", "J.; c #49505A", "K.; c #39424B", "L.; c #323C45", "M.; c #48525C", "N.; c #4E5862", "O.; c #56606A", "P.; c #58626C", "Q.; c #59636D", "R.; c #3F4E51", "S.; c #3B494C", "T.; c #384146", "U.; c #333A40", "V.; c #363D43", "W.; c #373C42", "X.; c #393E44", "Y.; c #3A3F45", "Z.; c #3B4046", "`.; c #383D43", " +; c #34373E", ".+; c #AFB2AB", "++; c #C0C3BC", "@+; c #C2C9B7", "#+; c #969F8A", "$+; c #363E29", "%+; c #535A48", "&+; c #616856", "*+; c #5A5E4D", "=+; c #5D6150", "-+; c #2D3738", ";+; c #425051", ">+; c #4D5B5C", ",+; c #4C5A5B", "'+; c #505E5F", ")+; c #5F6D6E", "!+; c #6D7B7C", "~+; c #6E7C7D", "{+; c #667475", "]+; c #758384", "^+; c #7E8C8D", "/+; c #5B696A", "(+; c #F0FCF8", "_+; c #93A099", ":+; c #899891", "<+; c #72817A", "[+; c #8C9B94", "}+; c #7F9088", "|+; c #6D7E76", "1+; c #7C9087", "2+; c #84988F", "3+; c #8BA097", "4+; c #91A69D", "5+; c #94A9A4", "6+; c #869898", "7+; c #586A6E", "8+; c #516367", "9+; c #8B9DA1", "0+; c #D8EAEE", "a+; c #E4F6FA", "b+; c #E5F7FB", "c+; c #E6F8FC", "d+; c #A0B2B6", "e+; c #8A9CA0", "f+; c #5D6F73", "g+; c #48575C", "h+; c #333C45", "i+; c #1A212B", "j+; c #282E3A", "k+; c #474D59", "l+; c #4A505C", "m+; c #4E5460", "n+; c #4E5661", "o+; c #5D6570", "p+; c #5B616D", "q+; c #515964", "r+; c #595F6B", "s+; c #5E6671", "t+; c #585E6C", "u+; c #445255", "v+; c #2D383C", "w+; c #293438", "x+; c #354044", "y+; c #2B3238", "z+; c #393C43", "A+; c #AAAEA0", "B+; c #BCC5B2", "C+; c #A8B49E", "D+; c #747D68", "E+; c #37402B", "F+; c #5B6451", "G+; c #636A58", "H+; c #565A4B", "I+; c #5F6354", "J+; c #54584A", "K+; c #313C3E", "L+; c #303B3D", "M+; c #343F41", "N+; c #2B3638", "O+; c #293436", "P+; c #2D383A", "Q+; c #364143", "R+; c #3B4648", "S+; c #616F78", "T+; c #6C7A83", "U+; c #5E6C75", "V+; c #73818A", "W+; c #6B7982", "X+; c #A0AEB7", "Y+; c #86949D", "Z+; c #EAF8FB", "`+; c #A1B0B3", " @; c #A3B5B7", ".@; c #8FA3A4", "+@; c #ACC0C1", "@@; c #B4C8C9", "#@; c #D8EDEE", "$@; c #D0E3E7", "%@; c #96A7B1", "&@; c #EDFEFF", "*@; c #DBECF6", "=@; c #B8C9D3", "-@; c #899AA4", ";@; c #677882", ">@; c #485963", ",@; c #2A3B45", "'@; c #1C2D37", ")@; c #24353F", "!@; c #3B4954", "~@; c #4B5360", "{@; c #4C525E", "]@; c #535967", "^@; c #5C6270", "/@; c #606674", "(@; c #5B616F", "_@; c #5B5E6D", ":@; c #5C606C", "<@; c #646874", "[@; c #5C626E", "}@; c #585C68", "|@; c #545B65", "1@; c #465153", "2@; c #3C4749", "3@; c #364042", "4@; c #36393E", "5@; c #BAC3B0", "6@; c #A7B39D", "7@; c #565F4A", "8@; c #313A27", "9@; c #505946", "0@; c #606755", "a@; c #575B4C", "b@; c #55594B", "c@; c #2E393B", "d@; c #404B51", "e@; c #404C58", "f@; c #435060", "g@; c #4B5868", "h@; c #515E6E", "i@; c #525F6F", "j@; c #546171", "k@; c #5F6C7C", "l@; c #8491A1", "m@; c #8592A2", "n@; c #727F8F", "o@; c #7D8A9A", "p@; c #A5B2C2", "q@; c #A1AEBE", "r@; c #909DAD", "s@; c #A1ADB9", "t@; c #E6F3FC", "u@; c #F0FEFF", "v@; c #D9EAF4", "w@; c #D3E4EC", "x@; c #B4C6D0", "y@; c #85989F", "z@; c #758791", "A@; c #E1F5FE", "B@; c #BFD1DB", "C@; c #D0E0EF", "D@; c #DBEBFA", "E@; c #E3F0FF", "F@; c #BFCFDE", "G@; c #8E9BAC", "H@; c #677485", "I@; c #374756", "J@; c #1F2C3D", "K@; c #1D2D3C", "L@; c #2D3A4B", "M@; c #40505F", "N@; c #4D5D6C", "O@; c #556273", "P@; c #585F6F", "Q@; c #5A606E", "R@; c #5E6472", "S@; c #616775", "T@; c #5D6371", "U@; c #565C6A", "V@; c #595C6B", "W@; c #5F6271", "X@; c #555965", "Y@; c #5B5F6B", "Z@; c #5D616D", "`@; c #5A5E6A", " #; c #575B67", ".#; c #585C67", "+#; c #4E575C", "@#; c #4F5A5C", "##; c #404A4C", "$#; c #373F42", "%#; c #33383C", "&#; c #393E42", "*#; c #7A7B76", "=#; c #BDC0B9", "-#; c #A6A99E", ";#; c #B0B9A8", ">#; c #A3AF9B", ",#; c #B8C4B0", "'#; c #7D8975", ")#; c #454E3D", "!#; c #697261", "~#; c #5C6254", "{#; c #5E6156", "]#; c #4F5247", "^#; c #494C43", "/#; c #2B3439", "(#; c #3B4449", "_#; c #3F4952", ":#; c #404C5C", "<#; c #414C60", "[#; c #455064", "}#; c #4A5569", "|#; c #4B566A", "1#; c #505B6F", "2#; c #5E697D", "3#; c #6C778B", "4#; c #8994A8", "5#; c #677286", "6#; c #646F83", "7#; c #798498", "8#; c #8590A4", "9#; c #909BAF", "0#; c #919CB0", "a#; c #808B9F", "b#; c #8792A4", "c#; c #C8D4E4", "d#; c #DFECFD", "e#; c #DAE7F7", "f#; c #E7F4FF", "g#; c #D4E1F1", "h#; c #9BABBB", "i#; c #7D8D9C", "j#; c #9DAEBE", "k#; c #768896", "l#; c #556676", "m#; c #8EA0AE", "n#; c #A5B8C7", "o#; c #8EA1AF", "p#; c #97AAB9", "q#; c #8192A2", "r#; c #909DAE", "s#; c #BBC8D9", "t#; c #AEB9CD", "u#; c #798697", "v#; c #626D81", "w#; c #495667", "x#; c #354253", "y#; c #434E62", "z#; c #485566", "A#; c #4F5A6E", "B#; c #445162", "C#; c #404B5D", "D#; c #5A6171", "E#; c #5C6373", "F#; c #595F6D", "G#; c #545A68", "H#; c #575D69", "I#; c #5E6470", "J#; c #535763", "K#; c #4E525E", "L#; c #535561", "M#; c #565864", "N#; c #545E60", "O#; c #4F595B", "P#; c #3D4548", "Q#; c #3B4346", "R#; c #36373C", "S#; c #34353A", "T#; c #343339", "U#; c #303538", "V#; c #C2C5BE", "W#; c #A0AC98", "X#; c #C4CFBE", "Y#; c #99A493", "Z#; c #444C3D", "`#; c #5E6657", " $; c #5C6256", ".$; c #54574E", "+$; c #4E5148", "@$; c #373E44", "#$; c #3B4248", "$$; c #3D464F", "%$; c #3F4859", "&$; c #3D485C", "*$; c #414C62", "=$; c #465165", "-$; c #485369", ";$; c #4D586C", ">$; c #59647A", ",$; c #667185", "'$; c #6D788E", ")$; c #556074", "!$; c #5B667C", "~$; c #5D687E", "{$; c #636E82", "]$; c #6F7A90", "^$; c #737E92", "/$; c #687387", "($; c #8693A6", "_$; c #9FACBF", ":$; c #8B98AB", "<$; c #7C899C", "[$; c #6E7B8E", "}$; c #4C5B6E", "|$; c #8392A5", "1$; c #6F8092", "2$; c #67788A", "3$; c #526576", "4$; c #5E7182", "5$; c #647587", "6$; c #546172", "7$; c #5E697B", "8$; c #444C5F", "9$; c #323D4F", "0$; c #41495C", "a$; c #2E394B", "b$; c #242C3F", "c$; c #3E4659", "d$; c #475264", "e$; c #4D5568", "f$; c #455062", "g$; c #464E61", "h$; c #4D586A", "i$; c #555D70", "j$; c #545D6E", "k$; c #444B5B", "l$; c #474E5E", "m$; c #545C69", "n$; c #4B4F5B", "o$; c #464A55", "p$; c #484A56", "q$; c #4E515A", "r$; c #52555E", "s$; c #54545E", "t$; c #55585F", "u$; c #51595C", "v$; c #535D5F", "w$; c #50585B", "x$; c #3F474A", "y$; c #333238", "z$; c #323137", "A$; c #302F35", "B$; c #3F4247", "C$; c #9BA696", "D$; c #A3B09E", "E$; c #BBC6B6", "F$; c #A4AF9F", "G$; c #737E6E", "H$; c #5F655B", "I$; c #5C6258", "J$; c #595F55", "K$; c #595E57", "L$; c #5A5D56", "M$; c #4A4C47", "N$; c #343B41", "O$; c #3B424C", "P$; c #3A4354", "Q$; c #3C4457", "R$; c #41495E", "S$; c #495164", "T$; c #4B5368", "U$; c #5E6679", "V$; c #60687D", "W$; c #626A7D", "X$; c #61697E", "Y$; c #626A7F", "Z$; c #6B7388", "`$; c #7D889C", " %; c #6A7589", ".%; c #687588", "+%; c #768396", "@%; c #6C7B8E", "#%; c #69788B", "$%; c #526174", "%%; c #6B7C8E", "&%; c #697A8C", "*%; c #6C7D8F", "=%; c #5D6E80", "-%; c #607080", ";%; c #3F4754", ">%; c #3F4955", ",%; c #48505D", "'%; c #434D59", ")%; c #404855", "!%; c #47515D", "~%; c #3C4451", "{%; c #4B5561", "]%; c #49515E", "^%; c #48525E", "/%; c #424A57", "(%; c #343E4A", "_%; c #3B4551", ":%; c #3D4753", "<%; c #737B88", "[%; c #636975", "}%; c #505761", "|%; c #444853", "1%; c #444750", "2%; c #4C4F56", "3%; c #50535A", "4%; c #4E5156", "5%; c #4D5557", "6%; c #4E5356", "7%; c #3D3E42", "8%; c #323035", "9%; c #343237", "0%; c #2C3436", "a%; c #ADB0A9", "b%; c #A6A9A0", "c%; c #9FAA9C", "d%; c #A7B4A3", "e%; c #AEB9A9", "f%; c #A8B3A5", "g%; c #9DA89A", "h%; c #5F6A5C", "i%; c #31392E", "j%; c #5F675C", "k%; c #63695F", "l%; c #5B6059", "m%; c #585D56", "n%; c #5C615A", "o%; c #5F615C", "p%; c #484B44", "q%; c #35383F", "r%; c #383F4F", "s%; c #394253", "t%; c #485162", "u%; c #4B5465", "v%; c #4A5364", "w%; c #4D5667", "x%; c #535C6D", "y%; c #5B6475", "z%; c #576071", "A%; c #6F7889", "B%; c #747F91", "C%; c #616C80", "D%; c #4E596D", "E%; c #495466", "F%; c #3B485B", "G%; c #536073", "H%; c #3E4E5E", "I%; c #5A697C", "J%; c #506171", "K%; c #506173", "L%; c #647585", "M%; c #4A5B6D", "N%; c #475766", "O%; c #3D4751", "P%; c #475059", "Q%; c #404950", "R%; c #475057", "S%; c #353E47", "T%; c #4C555E", "U%; c #565F68", "V%; c #5E6770", "W%; c #536069", "X%; c #46525E", "Y%; c #49535F", "Z%; c #626C76", "`%; c #7C858E", " &; c #4B525A", ".&; c #40444D", "+&; c #3D4248", "@&; c #40434A", "#&; c #484B50", "$&; c #4B4E53", "%&; c #47484D", "&&; c #46494E", "*&; c #454A4D", "=&; c #494E51", "-&; c #332E34", ";&; c #363137", ">&; c #383339", ",&; c #333136", "'&; c #A1ABA0", ")&; c #A1AD9F", "!&; c #ABB7AB", "~&; c #788277", "{&; c #39433A", "]&; c #505A51", "^&; c #646B63", "/&; c #5A615A", "(&; c #575C56", "_&; c #5D625C", ":&; c #373A41", "<&; c #2F2F37", "[&; c #2A2D34", "}&; c #383E4A", "|&; c #38404D", "1&; c #3D4552", "2&; c #454D5A", "3&; c #474F5C", "4&; c #565E6B", "5&; c #58606D", "6&; c #676F7C", "7&; c #6D7582", "8&; c #68707D", "9&; c #666F7E", "0&; c #636C7D", "a&; c #7B8495", "b&; c #6E7689", "c&; c #626D7F", "d&; c #576373", "e&; c #485365", "f&; c #566373", "g&; c #4A5A69", "h&; c #586878", "i&; c #526271", "j&; c #445464", "k&; c #455564", "l&; c #415262", "m&; c #3B4C56", "n&; c #586062", "o&; c #5A6265", "p&; c #4F5759", "q&; c #4D5558", "r&; c #51595B", "s&; c #61696C", "t&; c #535B5E", "u&; c #50585A", "v&; c #545C5F", "w&; c #5D6568", "x&; c #5B6469", "y&; c #67717B", "z&; c #606A73", "A&; c #505962", "B&; c #444D54", "C&; c #3E454D", "D&; c #3D3C41", "E&; c #342F35", "F&; c #8E8F8A", "G&; c #AEB1AA", "H&; c #A0A89D", "I&; c #A6B0A5", "J&; c #B3BDB2", "K&; c #8B958A", "L&; c #50584D", "M&; c #4B5348", "N&; c #666E63", "O&; c #5A6257", "P&; c #565C52", "Q&; c #636861", "R&; c #3B3F4A", "S&; c #404952", "T&; c #434A54", "U&; c #434B56", "V&; c #4D5560", "W&; c #5F6772", "X&; c #666E79", "Y&; c #58606B", "Z&; c #6C747F", "`&; c #727B8A", " *; c #4F5867", ".*; c #6F7887", "+*; c #404C5A", "@*; c #4B5765", "#*; c #4C5866", "$*; c #414D5B", "%*; c #434F5D", "&*; c #34424F", "**; c #475562", "=*; c #3B4956", "-*; c #4F5D6A", ";*; c #475153", ">*; c #4A5352", ",*; c #3B4141", "'*; c #565F5E", ")*; c #485150", "!*; c #3D4645", "~*; c #4D5655", "{*; c #505958", "]*; c #4B5453", "^*; c #515B64", "/*; c #525C65", "(*; c #4A535A", "_*; c #3F484F", ":*; c #3E454B", "<*; c #40474D", "[*; c #494D50", "}*; c #414246", "|*; c #3E3F43", "1*; c #3F4044", "2*; c #403F44", "3*; c #353439", "4*; c #353036", "5*; c #39343A", "6*; c #33383B", "7*; c #A4A2A7", "8*; c #A5A3A8", "9*; c #A6A4A9", "0*; c #9EA69B", "a*; c #A5ADA2", "b*; c #ABB3A6", "c*; c #7B8175", "d*; c #666D5D", "e*; c #606757", "f*; c #575E4E", "g*; c #4D5442", "h*; c #585C4B", "i*; c #3C434B", "j*; c #444B55", "k*; c #4C535D", "l*; c #525B64", "m*; c #545D66", "n*; c #575F6A", "o*; c #606A74", "p*; c #5E6874", "q*; c #5A6770", "r*; c #434D57", "s*; c #404A54", "t*; c #3E4852", "u*; c #3C444F", "v*; c #3B434E", "w*; c #3D4550", "x*; c #4D5152", "y*; c #5C6262", "z*; c #424848", "A*; c #474D4D", "B*; c #5B6161", "C*; c #4E5756", "D*; c #454F4E", "E*; c #424C4B", "F*; c #3F4948", "G*; c #3C4647", "H*; c #454C52", "I*; c #434A50", "J*; c #4A5255", "K*; c #444C4F", "L*; c #373D3B", "M*; c #3A4040", "N*; c #3E4243", "O*; c #434449", "P*; c #424348", "Q*; c #3D3E43", "R*; c #3E3D42", "S*; c #424244", "T*; c #2F2E34", "U*; c #3C3D3F", "V*; c #404143", "W*; c #4B4E47", "X*; c #575956", "Y*; c #C1BCB9", "Z*; c #C0BBB7", "`*; c #A6A3AA", " =; c #A3A8A1", ".=; c #A3A99F", "+=; c #ACB2A8", "@=; c #AFB5A9", "#=; c #5A6052", "$=; c #3C4333", "%=; c #666E59", "&=; c #606853", "*=; c #59614A", "==; c #565E46", "-=; c #3A3D44", ";=; c #454C54", ">=; c #535B66", ",=; c #565E69", "'=; c #555F6B", ")=; c #535D67", "!=; c #505F66", "~=; c #4B5860", "{=; c #434D56", "]=; c #3F4851", "^=; c #3C454E", "/=; c #474B4C", "(=; c #3F4344", "_=; c #3C4041", ":=; c #444A4A", "<=; c #3B4443", "[=; c #444D4C", "}=; c #485251", "|=; c #515B5A", "1=; c #606C6A", "2=; c #6C7677", "3=; c #4F545A", "4=; c #51565A", "5=; c #4B5053", "6=; c #3B4043", "7=; c #44454A", "8=; c #45444A", "9=; c #3F4045", "0=; c #3F4042", "a=; c #424345", "b=; c #474944", "c=; c #7A7C7B", "d=; c #A6ABA4", "e=; c #B6BCB0", "f=; c #A7AD9F", "g=; c #83897B", "h=; c #4B5240", "i=; c #68705B", "j=; c #5A624B", "k=; c #5D654E", "l=; c #575F4A", "m=; c #3D3F31", "n=; c #3F444A", "o=; c #4B555F", "p=; c #49535D", "q=; c #455258", "r=; c #424D53", "s=; c #343B43", "t=; c #4C5053", "u=; c #515659", "v=; c #393E41", "w=; c #495354", "x=; c #485253", "y=; c #4A5455", "z=; c #545E5F", "A=; c #626C6D", "B=; c #555D60", "C=; c #3E4746", "D=; c #3B4441", "E=; c #3F4545", "F=; c #43464B", "G=; c #404145", "H=; c #424347", "I=; c #454742", "J=; c #43463F", "K=; c #6B6D6C", "L=; c #A8AEA4", "M=; c #B6BCB2", "N=; c #B5BBAF", "O=; c #495040", "P=; c #424939", "Q=; c #6E7661", "R=; c #575C48", "S=; c #444B53", "T=; c #4E555F", "U=; c #49525B", "V=; c #444D56", "W=; c #424B54", "X=; c #3C4951", "Y=; c #3D4A50", "Z=; c #373E46", "`=; c #494C51", " -; c #485355", ".-; c #3A4547", "+-; c #475055", "@-; c #555F61", "#-; c #404A49", "$-; c #3D4746", "%-; c #404946", "&-; c #444641", "*-; c #A7AAA1", "=-; c #B7BAAF", "--; c #A8AC9E", ";-; c #787C6D", ">-; c #444837", ",-; c #676C58", "'-; c #6B705C", ")-; c #5F644E", "!-; c #5C614D", "~-; c #595C4B", "{-; c #4A5159", "]-; c #3B444D", "^-; c #37414A", "/-; c #3D464D", "(-; c #3B3F48", "_-; c #292E34", ":-; c #41464C", "<-; c #44494F", "[-; c #414A4F", "}-; c #4C575B", "|-; c #444F55", "1-; c #4D585E", "2-; c #555E63", "3-; c #525D61", "4-; c #525C5E", "5-; c #505B5D", "6-; c #434D4E", "7-; c #414D4D", "8-; c #404A4B", "9-; c #3A4644", "0-; c #414649", "a-; c #26272B", "b-; c #464843", "c-; c #6B6D6A", "d-; c #A8ABA4", "e-; c #AEB1A8", "f-; c #B3B6AB", "g-; c #A8ABA0", "h-; c #585C4D", "i-; c #383C2B", "j-; c #6F7460", "k-; c #6A6F5B", "l-; c #646953", "m-; c #666B57", "n-; c #3E3F41", "o-; c #3E4349", "p-; c #484C55", "q-; c #424951", "r-; c #3E454F", "s-; c #3A424D", "t-; c #3E474E", "u-; c #1E202C", "v-; c #7C8089", "w-; c #4A515B", "x-; c #5B626A", "y-; c #5A636C", "z-; c #454E55", "A-; c #59646A", "B-; c #667175", "C-; c #566165", "D-; c #515C60", "E-; c #566163", "F-; c #485454", "G-; c #34403E", "H-; c #394543", "I-; c #3E4A48", "J-; c #393F3F", "K-; c #262F2C", "L-; c #7C7E70", "M-; c #40474F", "N-; c #404751", "O-; c #3D444A", "P-; c #41434F", "Q-; c #3B3D49", "R-; c #5E606C", "S-; c #C1C5D1", "T-; c #404450", "U-; c #2F333E", "V-; c #626874", "W-; c #6D747E", "X-; c #646C77", "Y-; c #4A535C", "Z-; c #5E6871", "`-; c #5B686E", " ;; c #68757B", ".;; c #616F72", "+;; c #5E6C6F", "@;; c #627071", "#;; c #5A6869", "$;; c #4D5B5B", "%;; c #3E4C4C", "&;; c #334141", "*;; c #313F3F", "=;; c #3B4745", "-;; c #353F41", ";;; c #3F494A", ">;; c #323B3A", ",;; c #2B3534", "';; c #C4C6BB", ");; c #3E4148", "!;; c #42464F", "~;; c #454C56", "{;; c #434C55", "];; c #3F4A4E", "^;; c #3E494D", "/;; c #3C4349", "(;; c #3C3E4A", "_;; c #313340", ":;; c #464855", "<;; c #777986", "[;; c #858995", "};; c #4D515D", "|;; c #565A66", "1;; c #545A66", "2;; c #49515C", "3;; c #3F4752", "4;; c #6B737E", "5;; c #66707A", "6;; c #65727A", "7;; c #6E7B81", "8;; c #738086", "9;; c #6F7C82", "0;; c #6C797F", "a;; c #6F7D80", "b;; c #738184", "c;; c #79878A", "d;; c #5C6A6B", "e;; c #485656", "f;; c #384646", "g;; c #354343", "h;; c #394747", "i;; c #3C4648", "j;; c #374142", "k;; c #293332", "l;; c #27322E", "m;; c #2A3531", "n;; c #808274", "o;; c #54595F", "p;; c #4D545C", "q;; c #444D52", "r;; c #3F3F47", "s;; c #494B5A", "t;; c #4E505F", "u;; c #4F5160", "v;; c #4B4E5D", "w;; c #494C5B", "x;; c #4D5562", "y;; c #5A626F", "z;; c #6B7380", "A;; c #6E7B83", "B;; c #6D7A82", "C;; c #7F8C92", "D;; c #869399", "E;; c #7E8B91", "F;; c #717F82", "G;; c #808E91", "H;; c #596768", "I;; c #374546", "J;; c #3D4749", "K;; c #3A4445", "L;; c #394344", "M;; c #25302C", "N;; c #242F2B", "O;; c #222D27", "P;; c #4D4946", "Q;; c #C2BDBA", "R;; c #67695B", "S;; c #404146", "T;; c #4D5057", "U;; c #40454B", "V;; c #454E53", "W;; c #414B4D", "X;; c #363E41", "Y;; c #383B40", "Z;; c #4A4C59", "`;; c #464857", " >; c #424453", ".>; c #474A59", "+>; c #4C4F5E", "@>; c #4A505E", "#>; c #5C6471", "$>; c #707885", "%>; c #6F7985", "&>; c #69767F", "*>; c #69767E", "=>; c #67747C", "->; c #68757D", ";>; c #727F85", ">>; c #849197", ",>; c #828F95", "'>; c #707E81", ")>; c #637174", "!>; c #2F3D3D", "~>; c #384444", "{>; c #4E4A47", "]>; c #A49BA0", "^>; c #C6C6BA", "/>; c #87887A", "(>; c #4C4D3F", "_>; c #737464", ":>; c #6B6D5F", "<>; c #656759", "[>; c #454648", "}>; c #44474E", "|>; c #474C52", "1>; c #494E54", "2>; c #454754", "3>; c #3F414E", "4>; c #3B3F4B", "5>; c #454955", "6>; c #484E5A", "7>; c #5C646F", "8>; c #636B76", "9>; c #656F79", "0>; c #646E78", "a>; c #656F78", "b>; c #646E77", "c>; c #808B91", "d>; c #838E94", "e>; c #657074", "f>; c #5E696D", "g>; c #272D2B", "h>; c #252B29", "i>; c #212723", "j>; c #5B5E57", "k>; c #CBCBBF", "l>; c #494A3C", "m>; c #696A5A", "n>; c #707264", "o>; c #47484C", "p>; c #494C53", "q>; c #4A4D54", "r>; c #454952", "s>; c #454A50", "t>; c #40484B", "u>; c #3B3C41", "v>; c #494A4F", "w>; c #4D4D55", "x>; c #4C4E5B", "y>; c #464A56", "z>; c #474B57", "A>; c #494F5B", "B>; c #5F6973", "C>; c #656E77", "D>; c #667079", "E>; c #6A737C", "F>; c #6F787F", "G>; c #6A757B", "H>; c #666F76", "I>; c #454F51", "J>; c #394446", "K>; c #232927", "L>; c #55514E", "M>; c #666759", "N>; c #3A3F42", "O>; c #4E4D52", "P>; c #4B4D59", "Q>; c #494B57", "R>; c #494D58", "S>; c #515A63", "T>; c #59626B", "U>; c #5B656E", "V>; c #626A75", "W>; c #646B75", "X>; c #586168", "Y>; c #697078", "Z>; c #30383B", "`>; c #2D3538", " ,; c #5A5551", ".,; c #5D5A55", "+,; c #6F6D60", "@,; c #555648", "#,; c #757668", "$,; c #45464A", "%,; c #4C4B50", "&,; c #4E4F54", "*,; c #50505A", "=,; c #3E404C", "-,; c #3F434E", ";,; c #454954", ">,; c #4A4E59", ",,; c #4F5861", "',; c #535C65", "),; c #585F69", "!,; c #5F6670", "~,; c #5E656F", "{,; c #5E656D", "],; c #5C636B", "^,; c #52595F", "/,; c #272F32", "(,; c #433E3A", "_,; c #4D4844", ":,; c #534E4A", "<,; c #595450", "[,; c #625F5A", "},; c #484639", "|,; c #6F7062", "1,; c #646658", "2,; c #323A3C", "3,; c #474B54", "4,; c #485158", "5,; c #4E575E", "6,; c #454E57", "7,; c #4A4E5A", "8,; c #434753", "9,; c #4A4E57", "0,; c #4D515A", "a,; c #282D33", "b,; c #22272D", "c,; c #57524E", "d,; c #635E5A", "e,; c #66635E", "f,; c #656356", "g,; c #696B5D", "h,; c #53554A", "i,; c #454851", "j,; c #464D55", "k,; c #40444F", "l,; c #454753", "m,; c #363A45", "n,; c #26272C", "o,; c #58534D", "p,; c #69665F", "q,; c #80837C", "r,; c #909183", "s,; c #3C3F46", "t,; c #33333B", "u,; c #3E3E46", "v,; c #44444C", "w,; c #636057", "x,; c #595A52", "y,; c #5E615A", "z,; c #C9CBC6", "A,; c #67695C", "B,; c #5A5C51", "C,; c #3A3B40", "D,; c #514E47", "E,; c #636155", "F,; c #62635B", "G,; c #676A63", "H,; c #949688", "I,; c #2D2F24", "J,; c #56564C", "K,; c #636359", "L,; c #616157", "M,; c #58584C", "N,; c #5B5B51", "O,; c #686961", "P,; c #767972", "Q,; c #C1C4BD", "R,; c #ADAEA6", "S,; c #6B6D60", "T,; c #3C3D42", "U,; c #464540", "V,; c #57574F", "W,; c #6B6B63", "X,; c #63655A", "Y,; c #6A6D64", "Z,; c #8F9183", "`,; c #5C5E53", " '; c #64675E", ".'; c #5D6057", "+'; c #575850", "@'; c #61645B", "#'; c #7B7E77", "$'; c #64665B", "%'; c #606257", "&'; c #C4C7C0", "*'; c #C9CBBE", "='; c #888A7C", "-'; c #75776A", ";'; c #6A6C61", ">'; c #66685D", ",'; c #595B50", "''; c #3F4440", ")'; c #444945", "!'; c #5B605A", "~'; c #5F645E", "{'; c #5E635D", "]'; c #595E58", "^'; c #51564F", "/'; c #636862", "('; c #888D86", "_'; c #C1C3B6", ":'; c #717368", "<'; c #444943", "['; c #5C615B", "}'; c #565B55", "|'; c #707267", "1'; c #48494B", "2'; c #CED3CF", "3'; c #B3B5A7", "4'; c #787A6F", "5'; c #696B60", "6'; c #65675C", "7'; c #464749", "8'; c #4A4B4D", "9'; c #5F6460", "0'; c #818584", "a'; c #CACCBE", "b'; c #6B6D62", "c'; c #6D6F64", "d'; c #6F7166", "e'; c #5A5B5D", "f'; c #78797B", "g'; c #C5C7B9", "h'; c #666769", "i'; c #B7B8BC", "j'; c #BDBCC1", "k'; c #7B7D72", "l'; c #63645C", "m'; c #5F5D5E", "n'; c #676568", "o'; c #646267", "p'; c #818085", "q'; c #B7B4BB", "r'; c #C2C4B7", "s'; c #747669", "t'; c #77796E", "u'; c #71726A", "v'; c #606159", "w'; c #5A5957", "x'; c #666467", "y'; c #5F5D60", "z'; c #727075", "A'; c #AFACB3", "B'; c #676860", "C'; c #605C5B", "D'; c #6B6768", "E'; c #666165", "F'; c #B0ABB1", "G'; c #C2BDC4", "H'; c #B7B2B9", "I'; c #B1AFB4", "J'; c #717366", "K'; c #818378", "L'; c #6C6E63", "M'; c #363835", "N'; c #5D5958", "O'; c #64605F", "P'; c #696564", "Q'; c #6C6869", "R'; c #736E72", "S'; c #938E92", "T'; c #B7B2B8", "U'; c #C5C0C6", "V'; c #BCB7BD", "W'; c #B1ACB3", "X'; c #BDBFB2", "Y'; c #2B2E1B", "Z'; c #61605C", "`'; c #676662", " ); c #656460", ".); c #696866", "+); c #5D5C5A", "@); c #BBB9BC", "#); c #B0AEB3", "$); c #373A25", "%); c #565550", "&); c #666561", "*); c #64635F", "=); c #767573", "-); c #898C79", ";); c #383B28", ">); c #7A7C6E", ",); c #818375", "'); c #2C3230", ")); c #5A5F58", "!); c #6A6F68", "~); c #656762", "{); c #8D907F", "]); c #717365", "^); c #4F544D", "/); c #5E655D", "(); c #666B64", "_); c #636A62", ":); c #616660", "<); c #5F665F", "[); c #353729", "}); c #565D55", "|); c #606A61", "1); c #60675F", "2); c #586259", "3); c #616861", "4); c #6F7971", "5); c #AEB7B2", "6); c #787A6D", "7); c #404234", "8); c #6F7170", "9); c #636D64", "0); c #59635A", "a); c #626C64", "b); c #7E8880", "c); c #9BA59D", "d); c #AFB8B3", "e); c #A6AFAC", "f); c #A7B0AD", "g); c #B9BAB2", "h); c #7E8170", "i); c #687269", "j); c #646E65", "k); c #525C53", "l); c #677169", "m); c #B5BFB7", "n); c #ABB5AD", "o); c #A9B2AD", "p); c #C0C1B9", "q); c #5C635B", "r); c #5F6960", "s); c #CDCEC6", "t); c #61625A", "u); c #63665D", "v); c #60655E", "w); c #596058", "x); c #777E76", "y); c #B2B9B2", "z); c #B3B8B2", "A); c #AAB1AA", "B); c #C2C3BD", "C); c #7F8173", "D); c #64655D", "E); c #565B54", "F); c #90958E", "G); c #B5BAB4", "H); c #191C0B", "I); c #4A4D3A", "J); c #7B7C76", "K); c #B7B3B4", "L); c #B9B5B6", "M); c #727466", "N); c #73746E", "O); c #C3C5B8", "P); c #313735", "Q); c #5D5E56", "R); c #696863", "S); c #828572", "T); c #86887A", "U); c #646760", "V); c #656861", "W); c #B0B3A8", "X); c #B4B8A7", "Y); c #B1B6A2", "Z); c #0E1002", "`); c #797B6E", " !; c #323834", ".!; c #60655F", "+!; c #676C66", "@!; c #666B65", "#!; c #737572", "$!; c #B6BBA7", "%!; c #848975", "&!; c #2C3534", "*!; c #5F6561", "=!; c #666C68", "-!; c #6E7470", ";!; c #A4A89A", ">!; c #B3B8A4", ",!; c #C7CCB8", "'!; c #A0A591", ")!; c #293231", "!!; c #606662", "~!; c #5D635F", "{!; c #6B716D", "]!; c #808682", "^!; c #9EA293", "/!; c #ABAF9E", "(!; c #C2C7B3", "_!; c #ACB09F", ":!; c #848679", "~; c #656952", ",~; c #51543F", "'~; c #32373B", ")~; c #2D3537", "!~; c #5E5D5B", "~~; c #605F5D", "{~; c #777976", "]~; c #797B78", "^~; c #B9B9AD", "/~; c #BABAAE", "(~; c #B9BBB0", "_~; c #7B7E6B", ":~; c #283032", "<~; c #838582", "[~; c #BABAB0", "}~; c #ABAEA5", "|~; c #B4B8AA", "1~; c #B5B9AA", "2~; c #979B8A", "3~; c #4D523E", "4~; c #4F5440", "5~; c #7F8470", "6~; c #727665", "7~; c #6E7263", "8~; c #636758", "9~; c #484C3E", "0~; c #7E807F", "a~; c #727473", "b~; c #B6BAAC", "c~; c #0E1201", "d~; c #313524", "e~; c #666A59", "f~; c #797D6E", "g~; c #54574C", "h~; c #515449", "i~; c #59595B", "j~; c #757776", "k~; c #A5A89F", "l~; c #B5B9AB", "m~; c #BBBFB0", "n~; c #424637", "o~; c #7B7F70", "p~; c #737769", "q~; c #52554A", "r~; c #22272A", "s~; c #5A5A5C", "t~; c #7D7F7E", "u~; c #AFB3A5", "v~; c #C4C8BA", "w~; c #B0B4A5", "x~; c #6A6E5D", "y~; c #262A19", "z~; c #1F2314", "A~; c #6A6E5F", "B~; c #878B7D", "C~; c #6C7062", "D~; c #606358", "E~; c #55584D", "F~; c #B4B8A9", "G~; c #909483", "H~; c #484C3B", "I~; c #070B00", "J~; c #8F9385", "K~; c #7A7E70", "L~; c #62655A", "M~; c #6A6C6B", "N~; c #7C7E7D", "O~; c #737574", "P~; c #6C705F", "Q~; c #0A0E00", "R~; c #767A6C", "S~; c #787B70", "T~; c #6F7269", "U~; c #64675C", "V~; c #555557", "W~; c #717372", "X~; c #B0B4A6", "Y~; c #AAAE9F", "Z~; c #8A8E7F", "`~; c #44473C", " {; c #868980", ".{; c #686B60", "+{; c #AFB2A7", "@{; c #A5A99B", "#{; c #25291B", "${; c #686B62", "%{; c #7D7D7F", "&{; c #888A89", "*{; c #B7BBAD", "={; c #919489", "-{; c #32352A", ";{; c #40433A", ">{; c #777A71", ",{; c #767678", "'{; c #878789", "){; c #AEB2A4", "!{; c #767970", "~{; c #838385", "{{; c #AEB1A6", "]{; c #ABAEA3", "^{; c #B8BBB0", "/{; c #85887D", "({; c #777779", "_{; c #BFC2B7", ":{; c #7B7B7B", "<{; c #7B7B7D", "[{; c #BDC0B7", "}{; c #686A5F", "|{; c #7A7A7A", "1{; c #AAADA2", "2{; c #B7BAB1", "3{; c #898C85", "4{; c #74766B", "5{; c #A3A69D", "6{; c #757871", "7{; c #ADB0A5", "8{; c #85887F", "9{; c #828479", "0{; c #434540", "a{; c #BEC0B3", "b{; c #6E7065", "c{; c #6E7168", "d{; c #333A33", "e{; c #4B4D4C", "f{; c #BFC1B3", "g{; c #6C6D65", "h{; c #4D5150", "i{; c #333C37", "j{; c #2C362E", "k{; c #2A362C", "l{; c #28342A", "m{; c #424645", "n{; c #464A49", "o{; c #4E5253", "p{; c #6D6D6D", "q{; c #999B8D", "r{; c #707066", "s{; c #73736B", "t{; c #2A342B", "u{; c #525657", "v{; c #848577", "w{; c #5E5E52", "x{; c #777671", "y{; c #3D423C", "z{; c #30372F", "A{; c #565A5B", "B{; c #5D5B4C", "C{; c #030100", "D{; c #83827D", "E{; c #393C35", "F{; c #5B5F60", "G{; c #737162", "H{; c #686560", "I{; c #585753", "J{; c #3F3E3A", "K{; c #403F3B", "L{; c #5F6364", "M{; c #BDBEB6", "N{; c #8B897A", "O{; c #585546", "P{; c #191509", "Q{; c #7A7770", "R{; c #56524F", "S{; c #5C5855", "T{; c #3E3B36", "U{; c #413E39", "V{; c #43423E", "W{; c #5E6263", "X{; c #676453", "Y{; c #110D01", "Z{; c #706C63", "`{; c #5D5956", " ]; c #44433F", ".]; c #595D5C", "+]; c #646869", "@]; c #81806E", "#]; c #424031", "$]; c #616566", "%]; c #C1C2B2", "&]; c #0E0F01", "*]; c #6D6A65", "=]; c #5B5D5C", "-]; c #5F6362", ";]; c #5C6061", ">]; c #999C87", ",]; c #777A67", "']; c #707068", ")]; c #7C7B76", "!]; c #4D4A41", "~]; c #B7BBAA", "{]; c #9BA38C", "]]; c #8F9782", "^]; c #5F6352", "/]; c #67675F", "(]; c #6C6C64", "_]; c #ADB4A2", ":]; c #9BA58D", "<]; c #A2AB96", "[]; c #030700", "}]; c #86877F", "|]; c #74756D", "1]; c #5E5E56", "2]; c #57574D", "3]; c #6B6F70", "4]; c #A8B19E", "5]; c #9BA88E", "6]; c #AEBAA4", "7]; c #868F7A", "8]; c #444D3C", "9]; c #6B6E65", "0]; c #75766E", "a]; c #6F7374", "b]; c #A2AE9A", "c]; c #98A68C", "d]; c #B2C0A9", "e]; c #939F89", "f]; c #646F5E", "g]; c #37402F", "h]; c #010900", "i]; c #42483E", "j]; c #686C6D", "k]; c #9FA798", "l]; c #94A08C", "m]; c #B3BFAB", "n]; c #9BA695", "o]; c #7E8776", "p]; c #535B4C", "q]; c #0B1103", "r]; c #676A5F", "s]; c #3E3E36", "t]; c #54534F", "u]; c #646867", "v]; c #676B6A", "w]; c #636768", "x]; c #A9B1A6", "y]; c #9DA397", "z]; c #616759", "A]; c #131708", "B]; c #0E1203", "C]; c #66665A", "D]; c #4C4A3E", "E]; c #666867", "F]; c #AAAFA9", "G]; c #ABB0A9", "H]; c #0A0D00", "I]; c #656658", "J]; c #615F53", "K]; c #7A7E7D", "L]; c #ADB2AB", "M]; c #8A8E80", "N]; c #7A7B6D", "O]; c #646263", "P]; c #686C6B", "Q]; c #1A1D0C", "R]; c #5A574E", "S]; c #534F50", "T]; c #696768", "U]; c #A7AB9D", "V]; c #747266", "W]; c #716F63", "X]; c #646158", "Y]; c #A9AEA7", "Z]; c #ADB0A7", "`]; c #ABAFA1", " ^; c #635F60", ".^; c #656364", "+^; c #C4C8C7", "@^; c #A8ADA6", "#^; c #ACB0A2", "$^; c #68655C", "%^; c #A7ACA5", "&^; c #6F6C63", "*^; c #646061", "=^; c #737067", "-^; c #727071", ";^; c #B8BAAD", ">^; c #858877", ",^; c #848178", "'^; c #6B685F", ")^; c #77726C", "!^; c #645F59", "~^; c #696566", "{^; c #7E7E7E", "]^; c #6C6960", "^^; c #6F6A64", "/^; c #726E6F", "(^; c #6A6667", "_^; c #7D7B7C", ":^; c #A2A7A0", "<^; c #5E5B52", "[^; c #5F5A54", "}^; c #6D696A", "|^; c #B9BCAB", "1^; c #7C7D6F", "2^; c #49463D", "3^; c #9EA39C", "4^; c #646557", "5^; c #717262", "6^; c #050300", "7^; c #48463A", "8^; c #77746B", "9^; c #423F38", "0^; c #4F4D4E", "a^; c #878974", "b^; c #5F5E49", "c^; c #2B2B11", "d^; c #0F0F00", "e^; c #141400", "f^; c #89897D", "g^; c #717165", "h^; c #2B3431", "i^; c #6E6E54", "j^; c #3A3B1C", "k^; c #181900", "l^; c #151800", "m^; c #848678", "n^; c #212D29", "o^; c #222E2A", "p^; c #2D3834", "q^; c #2D3633", "r^; c #434947", "s^; c #6F6F71", "t^; c #252607", "u^; c #181B00", "v^; c #121301", "w^; c #26322E", "x^; c #27332F", "y^; c #454B49", "z^; c #414745", "A^; c #838584", "B^; c #B1B2A2", "C^; c #A9AB96", "D^; c #95957D", "E^; c #646448", "F^; c #303112", "G^; c #191C00", "H^; c #080900", "I^; c #24302C", "J^; c #293531", "K^; c #2B3733", "L^; c #313A37", "M^; c #6C6C6E", "N^; c #5C5C5E", "O^; c #75755B", "P^; c #3D3D21", "Q^; c #1D2005", "R^; c #2E3935", "S^; c #2A3330", "T^; c #414143", "U^; c #ABAA95", "V^; c #525236", "W^; c #2D3015", "X^; c #131402", "Y^; c #8B8D80", "Z^; c #ABAC9C", "`^; c #B5B4A0", " /; c #9E9D88", "./; c #6B6B51", "+/; c #464830", "@/; c #181907", "#/; c #7E8073", "$/; c #29322F", "%/; c #7C7C7E", "&/; c #ADAC98", "*/; c #7E7E66", "=/; c #5A5C46", "-/; c #17190B", ";/; c #888A7D", ">/; c #69696B", ",/; c #C1C1C3", "'/; c #5E604B", ")/; c #C2C2C4", "!/; c #B2B19F", "~/; c #6F715C", "{/; c #32373A", "]/; c #B9B9BB", "^/; c #868775", "//; c #424A4C", "(/; c #808080", "_/; c #6A6B5D", ":/; c #8D8F84", "(; c #747965", ",(; c #505541", "'(; c #252815", ")(; c #1A1D0A", "!(; c #303224", "~(; c #3F3E39", "{(; c #424B48", "](; c #3C4542", "^(; c #3A4340", "/(; c #3E4744", "((; c #343D3A", "_(; c #A5AC9C", ":(; c #B6BDAD", "<(; c #A1A896", "[(; c #5F6450", "}(; c #59594D", "|(; c #3D4643", "1(; c #434C49", "2(; c #39423F", "3(; c #C9CCC5", "4(; c #A1A79B", "5(; c #A8AF9F", "6(; c #989C8B", "7(; c #707463", "8(; c #1E2110", "9(; c #71746D", "0(; c #A2A89E", "a(; c #A8AEA2", "b(; c #7B7F6E", "c(; c #2D301D", "d(; c #1B1E0B", "e(; c #AEB4A8", "f(; c #8D9180", "g(; c #161709", "h(; c #414747", "i(; c #90938C", "j(; c #B8B2B4", "k(; c #AEB4AA", "l(; c #B2B6A8", "m(; c #9DA190", "n(; c #4C4F3A", "o(; c #181B08", "p(; c #6C6865", "q(; c #848774", "r(; c #5F624D", "s(; c #333621", "t(; c #1E210E", "u(; c #AEB2A3", "v(; c #939683", "w(; c #737661", "x(; c #41442F", "y(; c #8A8B83", "z(; c #858873", "A(; c #595D46", "B(; c #363924", "C(; c #555150", "D(; c #656462", "E(; c #474A51", "F(; c #474A53", "G(; c #464950", "H(; c #484B52", "I(; c #42454E", "J(; c #3F424B", "K(; c #3A3D46", "L(; c #B6B0B4", "M(; c #B7B1B5", "N(; c #B1ABAF", "O(; c #B3ADB1", "P(; c #B5AFB3", "Q(; c #B3B7A8", "R(; c #90937E", "S(; c #70735E", "T(; c #444732", "U(; c #464A53", "V(; c #484B54", "W(; c #4B4E57", "X(; c #797A74", "Y(; c #B9B3B5", "Z(; c #7B7E69", "`(; c #626550", " _; c #4B4E45", "._; c #3E4138", "+_; c #3B3E35", "@_; c #2C3232", "#_; c #4C505B", "$_; c #3E424D", "%_; c #3D3D45", "&_; c #696B66", "*_; c #686A65", "=_; c #C2C4BF", "-_; c #626658", ";_; c #5B5F51", ">_; c #414439", ",_; c #3E4136", "'_; c #373A31", ")_; c #2E3128", "!_; c #37423E", "~_; c #41484E", "{_; c #484C58", "]_; c #4C4E5A", "^_; c #6F716E", "/_; c #828481", "(_; c #A8AB98", "__; c #515441", ":_; c #37433F", "<_; c #3F4650", "[_; c #424953", "}_; c #474B56", "|_; c #3E4130", "1_; c #16180A", "2_; c #303D36", "3_; c #35423B", "4_; c #3D444C", "5_; c #414850", "6_; c #3C4B44", "7_; c #3E4D48", "8_; c #3C4A4A", "9_; c #9C9F8E", "0_; c #303B37", "a_; c #3F4E49", "b_; c #3D4C49", "c_; c #3D4B4B", "d_; c #757774", "e_; c #76786A", "f_; c #42423A", "g_; c #3A4A40", "h_; c #3E4F45", "i_; c #3B4A47", "j_; c #3B4949", "k_; c #4A5859", "l_; c #455054", "m_; c #BDBFBC", "n_; c #404038", "o_; c #3B4544", "p_; c #44554D", "q_; c #394845", "r_; c #495355", "s_; c #475152", "t_; c #8F9184", "u_; c #5F5C53", "v_; c #272C30", "w_; c #4D5C55", "x_; c #4F6056", "y_; c #404F4A", "z_; c #435151", "A_; c #475256", "B_; c #525A5D", "C_; c #6F767C", "D_; c #85877A", "E_; c #282B1A", "F_; c #35353D", "G_; c #42454C", "H_; c #4C5856", "I_; c #474E58", "J_; c #585C65", "K_; c #60646D", "L_; c #E3E7EA", "M_; c #838486", "N_; c #313222", "O_; c #615E57", "P_; c #32323A", "Q_; c #494D59", "R_; c #545864", "S_; c #5B5D6A", "T_; c #5B5D69", "U_; c #555763", "V_; c #A8A8B0", "W_; c #767779", "X_; c #767875", "Y_; c #434752", "Z_; c #4A4C5B", "`_; c #4B4A5A", " :; c #5E5D6D", ".:; c #5E5D6B", "+:; c #585765", "@:; c #7F7D8A", "#:; c #94929F", "$:; c #727179", "%:; c #BEC0BD", "&:; c #4C5359", "*:; c #474958", "=:; c #4A495B", "-:; c #454456", ";:; c #535063", ">:; c #514E5F", ",:; c #4F4B5C", "':; c #696574", "):; c #767281", "!:; c #5F5C67", "~:; c #5D5C61", "{:; c #73746F", "]:; c #5E5F4F", "^:; c #2D3037", "/:; c #4E5359", "(:; c #474751", "_:; c #4D4C5A", "::; c #4B485D", "<:; c #524F64", "[:; c #555066", "}:; c #565167", "|:; c #534E62", "1:; c #534B60", "2:; c #585163", "3:; c #5C5567", "4:; c #585462", "5:; c #4F4E53", "6:; c #71726D", "7:; c #595651", "8:; c #3F464E", "9:; c #4E505C", "0:; c #4A4959", "a:; c #4B4A5C", "b:; c #403D52", "c:; c #474459", "d:; c #49445A", "e:; c #4D485C", "f:; c #514C60", "g:; c #4A4559", "h:; c #494556", "i:; c #575361", "j:; c #6C6D68", "k:; c #9A9F8B", "l:; c #55554D", "m:; c #44443A", "n:; c #35343A", "o:; c #444854", "p:; c #434957", "q:; c #444353", "r:; c #454253", "s:; c #444154", "t:; c #3F3C4F", "u:; c #494659", "v:; c #504D60", "w:; c #464553", "x:; c #3F423B", "y:; c #AAAF9B", "z:; c #838872", "A:; c #40424E", "B:; c #3D414D", "C:; c #414551", "D:; c #484B5A", "E:; c #4A4D5C", "F:; c #444A5A", "G:; c #3F4553", "H:; c #3C3E4B", "I:; c #3F3E4C", "J:; c #3E3D4B", "K:; c #383747", "L:; c #403F4F", "M:; c #42453E", "N:; c #666863", "O:; c #787A77", "P:; c #A7AC98", "Q:; c #A8AD99", "R:; c #959A84", "S:; c #80836E", "T:; c #3A3C48", "U:; c #424652", "V:; c #464C5A", "W:; c #3C4250", "X:; c #373B46", "Y:; c #343440", "Z:; c #3C3C48", "`:; c #6E706B", " <; c #9A9E8F", ".<; c #A5A998", "+<; c #ADB29E", "@<; c #A3A892", "#<; c #61644F", "$<; c #393C27", "%<; c #30343F", "&<; c #383C48", "*<; c #424856", "=<; c #273037", "-<; c #242D32", ";<; c #ADB1A0", "><; c #71755E", ",<; c #4F533C", "'<; c #1F220F", ")<; c #27302D", "!<; c #353B47", "~<; c #3C424E", "{<; c #414755", "]<; c #2D383E", "^<; c #232D36", "/<; c #263137", "(<; c #283138", "_<; c #ABAE99", ":<; c #858972", "<<; c #6C7059", "[<; c #242D2A", "}<; c #3D434F", "|<; c #404652", "1<; c #464D5D", "2<; c #3B454E", "3<; c #454F58", "4<; c #373D39", "5<; c #3D433F", "6<; c #414640", "7<; c #A0A496", "8<; c #B4B7A2", "9<; c #93977E", "0<; c #84886F", "a<; c #666A53", "b<; c #2E321B", "c<; c #292C17", "d<; c #4B4F5A", "e<; c #454B57", "f<; c #434B58", "g<; c #4A5161", "h<; c #4E5565", "i<; c #6B7881", "j<; c #88959D", "k<; c #374140", "l<; c #3E4840", "m<; c #3C463D", "n<; c #465047", "o<; c #4D554A", "p<; c #424941", "q<; c #2C322E", "r<; c #B6B9A4", "s<; c #979B82", "t<; c #90947B", "u<; c #757960", "v<; c #3A3E27", "w<; c #272B14", "x<; c #2F331C", "y<; c #51565C", "z<; c #535A64", "A<; c #414956", "B<; c #444C59", "C<; c #4E5766", "D<; c #475361", "E<; c #77838F", "F<; c #98A5AE", "G<; c #546167", "H<; c #333F3F", "I<; c #3F4A42", "J<; c #444E45", "K<; c #444E43", "L<; c #4F5A4C", "M<; c #566153", "N<; c #4C564B", "O<; c #9B9F88", "P<; c #80846D", "Q<; c #5B5F46", "R<; c #383C23", "S<; c #262A11", "T<; c #21250E", "U<; c #1A1D08", "V<; c #4B5056", "W<; c #444C57", "X<; c #555E6D", "Y<; c #3C4A57", "Z<; c #586671", "`<; c #5D6B74", " [; c #6D7C83", ".[; c #3A484B", "+[; c #3A4848", "@[; c #4A5750", "#[; c #47544B", "$[; c #404C42", "%[; c #4F5B4F", "&[; c #586456", "*[; c #4A5746", "=[; c #A4A792", "-[; c #8F937C", ";[; c #6B6F58", ">[; c #474B32", ",[; c #30341B", "'[; c #272B12", ")[; c #1C2009", "![; c #1D200B", "~[; c #454D58", "{[; c #596978", "][; c #4D5D6A", "^[; c #4C5D67", "/[; c #4C5A63", "([; c #445358", "_[; c #48575A", ":[; c #61706D", "<[; c #1E2B22", "[[; c #233026", "}[; c #3E4C3F", "|[; c #455143", "1[; c #364234", "2[; c #323C34", "3[; c #72736E", "4[; c #3A3D36", "5[; c #848871", "6[; c #60644B", "7[; c #42462D", "8[; c #32361B", "9[; c #20240B", "0[; c #1E220B", "a[; c #505E6B", "b[; c #334553", "c[; c #41535F", "d[; c #42545E", "e[; c #394A52", "f[; c #495A61", "g[; c #4F6165", "h[; c #4B5B5B", "i[; c #586867", "j[; c #42534D", "k[; c #384740", "l[; c #47574D", "m[; c #56665B", "n[; c #4F5D50", "o[; c #3A483B", "p[; c #2F3B2F", "q[; c #3E413A", "r[; c #7D816A", "s[; c #5A5E43", "t[; c #404429", "u[; c #262A0F", "v[; c #21250A", "w[; c #3A4348", "x[; c #444E58", "y[; c #586877", "z[; c #475967", "A[; c #627480", "B[; c #60727E", "C[; c #5D6F79", "D[; c #64757D", "E[; c #4A5C60", "F[; c #4B5D5F", "G[; c #4F5F5E", "H[; c #4E5E5B", "I[; c #495853", "J[; c #37463F", "K[; c #26362C", "L[; c #2A3A30", "M[; c #334338", "N[; c #323F36", "O[; c #A6A996", "P[; c #989C85", "Q[; c #75795E", "R[; c #53583A", "S[; c #303517", "T[; c #252A0C", "U[; c #1E2207", "V[; c #52606D", "W[; c #4E606E", "X[; c #526573", "Y[; c #4E626D", "Z[; c #5C7079", "`[; c #54676E", " }; c #2B3E44", ".}; c #3B4D4F", "+}; c #273939", "@}; c #2E3E3D", "#}; c #3C4C49", "$}; c #3A4B45", "%}; c #394A42", "&}; c #35463E", "*}; c #29362F", "=}; c #A9AD96", "-}; c #8C9075", ";}; c #6A6F51", ">}; c #444929", ",}; c #323717", "'}; c #212608", ")}; c #21240F", "!}; c #48525B", "~}; c #47535F", "{}; c #677A88", "]}; c #5D717C", "^}; c #556974", "/}; c #768A93", "(}; c #7C9099", "_}; c #7E9198", ":}; c #B9CCD2", "<}; c #697B7D", "[}; c #1A2A2A", "}}; c #2A3A39", "|}; c #354542", "1}; c #2B3B38", "2}; c #263633", "3}; c #243330", "4}; c #959891", "5}; c #9DA186", "6}; c #818668", "7}; c #656A4A", "8}; c #4A4F2F", "9}; c #2D3212", "0}; c #23280A", "a}; c #242811", "b}; c #40494E", "c}; c #465059", "d}; c #45525B", "e}; c #4A5662", "f}; c #475B66", "g}; c #546A75", "h}; c #4A606B", "i}; c #6E828B", "j}; c #8397A0", "k}; c #BFD2D9", "l}; c #EAFDFF", "m}; c #4C6061", "n}; c #041618", "o}; c #344646", "p}; c #516161", "q}; c #344443", "r}; c #B2B5A4", "s}; c #A5A992", "t}; c #8F9378", "u}; c #5F6444", "v}; c #3A3F21", "w}; c #292E10", "x}; c #272B10", "y}; c #252910", "z}; c #515B5D", "A}; c #535E62", "B}; c #414B54", "C}; c #424F58", "D}; c #46535C", "E}; c #54656F", "F}; c #5A6E77", "G}; c #5B717C", "H}; c #576D78", "I}; c #6B818C", "J}; c #718590", "K}; c #C5D8E6", "L}; c #E8FAFF", "M}; c #EBFDFF", "N}; c #687B82", "O}; c #2A3B42", "P}; c #3F5155", "Q}; c #37494B", "R}; c #223232", "S}; c #213131", "T}; c #1F2D2D", "U}; c #979B84", "V}; c #797D64", "W}; c #55593E", "X}; c #3C4123", "Y}; c #2B3012", "Z}; c #1F2404", "`}; c #1D2202", " |; c #22260F", ".|; c #21292B", "+|; c #283639", "@|; c #384647", "#|; c #566467", "$|; c #5F6C72", "%|; c #3D4A53", "&|; c #47555E", "*|; c #414F58", "=|; c #55646B", "-|; c #56656A", ";|; c #505F64", ">|; c #596B6F", ",|; c #4B6268", "'|; c #5A737A", ")|; c #566E78", "!|; c #5A727E", "~|; c #6A7F90", "{|; c #6A7F92", "]|; c #98ADC2", "^|; c #D7E9FF", "/|; c #5B6E7F", "(|; c #495A6A", "_|; c #495B67", ":|; c #283B41", "<|; c #2A3C3E", "[|; c #293B3B", "}|; c #443E3E", "||; c #424741", "1|; c #576159", "2|; c #798079", "3|; c #9BA09A", "4|; c #A8A9AD", "5|; c #8A8E77", "6|; c #6B6F56", "7|; c #4F5436", "8|; c #363B1B", "9|; c #242A08", "0|; c #1E2400", "a|; c #22260B", "b|; c #263032", "c|; c #2C353C", "d|; c #2F3942", "e|; c #364049", "f|; c #243338", "g|; c #657477", "h|; c #859499", "i|; c #647378", "j|; c #415057", "k|; c #475560", "l|; c #43515C", "m|; c #4A5861", "n|; c #4E5C65", "o|; c #556469", "p|; c #59686B", "q|; c #5A6A6A", "r|; c #5B7375", "s|; c #5C757A", "t|; c #576F79", "u|; c #637B87", "v|; c #778C9D", "w|; c #72869F", "x|; c #93A7C0", "y|; c #A1B2CC", "z|; c #566880", "A|; c #526377", "B|; c #4A5C6A", "C|; c #2E4148", "D|; c #324549", "E|; c #2C3E3E", "F|; c #223231", "G|; c #483F42", "H|; c #4D4447", "I|; c #494343", "J|; c #5C5857", "K|; c #48524A", "L|; c #768179", "M|; c #97A199", "N|; c #9EA18C", "O|; c #878B74", "P|; c #6B6F54", "Q|; c #4C5133", "R|; c #313715", "S|; c #232907", "T|; c #748688", "U|; c #839599", "V|; c #55676B", "W|; c #42535A", "X|; c #63747C", "Y|; c #54656C", "Z|; c #5F7175", "`|; c #5F7171", " 1; c #627573", ".1; c #647773", "+1; c #5E7676", "@1; c #577172", "#1; c #576E74", "$1; c #758B99", "%1; c #788D9E", "&1; c #6D7F97", "*1; c #6F7F98", "=1; c #58687F", "-1; c #58697B", ";1; c #435563", ">1; c #31424A", ",1; c #37494D", "'1; c #2D3F41", ")1; c #233332", "!1; c #4C4344", "~1; c #544B4C", "{1; c #625E5D", "]1; c #4F5951", "^1; c #747E76", "/1; c #95A098", "(1; c #9A9E87", "_1; c #858970", ":1; c #696E50", "<1; c #2F3414", "[1; c #202409", "}1; c #303940", "|1; c #44565A", "11; c #3A4D51", "21; c #516269", "31; c #4E6167", "41; c #46575F", "51; c #5E6F76", "61; c #5A6D71", "71; c #5F7173", "81; c #637775", "91; c #5F746D", "01; c #566A61", "a1; c #485D56", "b1; c #4B6460", "c1; c #516B6A", "d1; c #637B7D", "e1; c #6A8187", "f1; c #697F8A", "g1; c #6B7E8F", "h1; c #596B7F", "i1; c #5D6E82", "j1; c #516272", "k1; c #3A4C58", "l1; c #32434B", "m1; c #293B3D", "n1; c #504748", "o1; c #4B4243", "p1; c #615D5C", "q1; c #4B524B", "r1; c #767D76", "s1; c #929C94", "t1; c #A3ADA5", "u1; c #ACB6AE", "v1; c #A0A38E", "w1; c #868A71", "x1; c #696D52", "y1; c #44482D", "z1; c #292D12", "A1; c #232710", "B1; c #72736D", "C1; c #303942", "D1; c #4C5D64", "E1; c #3E5358", "F1; c #26393F", "G1; c #34494E", "H1; c #5D7076", "I1; c #53686D", "J1; c #43565C", "K1; c #617478", "L1; c #708586", "M1; c #697D7B", "N1; c #657C74", "O1; c #677F72", "P1; c #52685B", "Q1; c #576F62", "R1; c #5A746B", "S1; c #728B87", "T1; c #90A6A4", "U1; c #93A8AB", "V1; c #84989F", "W1; c #7A8E99", "X1; c #677987", "Y1; c #5B6A7D", "Z1; c #596979", "`1; c #435362", " 2; c #3B4B58", ".2; c #3E4C55", "+2; c #273639", "@2; c #4F4949", "#2; c #574E4F", "$2; c #747A76", "%2; c #8F9591", "&2; c #A1AAA5", "*2; c #A6AFAA", "=2; c #9FA28D", "-2; c #999D86", ";2; c #61654C", ">2; c #43472C", ",2; c #2E3217", "'2; c #23270E", ")2; c #42555B", "!2; c #485D62", "~2; c #42565D", "{2; c #475C61", "]2; c #5C7077", "^2; c #586D72", "/2; c #4D6267", "(2; c #596E71", "_2; c #637879", ":2; c #728886", "<2; c #708781", "[2; c #6D847A", "}2; c #768E80", "|2; c #6D8575", "12; c #617A67", "22; c #6A8272", "32; c #72897F", "42; c #879E98", "52; c #93A9A7", "62; c #91A6A9", "72; c #8A9DA4", "82; c #738591", "92; c #5C6E7A", "02; c #546473", "a2; c #4E5E6D", "b2; c #384855", "c2; c #45535E", "d2; c #303F44", "e2; c #2A393C", "f2; c #212820", "g2; c #818682", "h2; c #989B86", "i2; c #7F826D", "j2; c #666A51", "k2; c #464B2D", "l2; c #34391B", "m2; c #1A1823", "n2; c #313840", "o2; c #333A44", "p2; c #546169", "q2; c #3D5057", "r2; c #556970", "s2; c #536770", "t2; c #566A71", "u2; c #5E7378", "v2; c #677C7F", "w2; c #596E6F", "x2; c #506663", "y2; c #6A8179", "z2; c #778F82", "A2; c #647C6C", "B2; c #6E8774", "C2; c #849D88", "D2; c #79927F", "E2; c #748C7F", "F2; c #8FA49D", "G2; c #8DA29D", "H2; c #819593", "I2; c #798B8F", "J2; c #677880", "K2; c #697A84", "L2; c #4E5C67", "M2; c #384651", "N2; c #2F3C42", "O2; c #283335", "P2; c #51504B", "Q2; c #5C5754", "R2; c #5C6141", "S2; c #454B29", "T2; c #2D3116", "U2; c #211F2C", "V2; c #1B1926", "W2; c #43545E", "X2; c #3B4F5A", "Y2; c #465A65", "Z2; c #526671", "`2; c #4B5F6A", " 3; c #4F636C", ".3; c #677B82", "+3; c #7C9196", "@3; c #6D8285", "#3; c #4B615F", "$3; c #829993", "%3; c #A0B7AD", "&3; c #71897B", "*3; c #90A996", "=3; c #C7E0CB", "-3; c #A5BEAB", ";3; c #91A79B", ">3; c #BDD2CB", ",3; c #C1D6D1", "'3; c #9BADAD", ")3; c #74868A", "!3; c #57686F", "~3; c #68767F", "{3; c #2C373B", "]3; c #252F31", "^3; c #7B8060", "/3; c #5C6240", "(3; c #2D311A", "_3; c #1E1C27", ":3; c #6D6E69", "<3; c #323943", "[3; c #4B525C", "}3; c #4E5E6B", "|3; c #3F5260", "13; c #485B69", "23; c #5B6E7C", "33; c #475A68", "43; c #4F6270", "53; c #7D919C", "63; c #778B92", "73; c #3D5257", "83; c #7E9394", "93; c #CFE5E2", "03; c #C1D8D0", "a3; c #849C8F", "b3; c #B0C8BA", "c3; c #E7FFEF", "d3; c #BBD3C5", "e3; c #B2C7BE", "f3; c #C3D6D2", "g3; c #ECFFFB", "h3; c #B0C0C0", "i3; c #4E5D62", "j3; c #5F6C74", "k3; c #5C6971", "l3; c #2F383D", "m3; c #2A3435", "n3; c #252D22", "o3; c #262E23", "p3; c #272D23", "q3; c #606058", "r3; c #63635B", "s3; c #929779", "t3; c #757B59", "u3; c #555A3C", "v3; c #40442D", "w3; c #3D444E", "x3; c #425566", "y3; c #495A6C", "z3; c #526375", "A3; c #627586", "B3; c #8D9EAE", "C3; c #8093A1", "D3; c #344650", "E3; c #99ADB4", "F3; c #CDE3E1", "G3; c #DEF3EE", "H3; c #F0FFFD", "I3; c #D3E8DF", "J3; c #E2F7EE", "K3; c #D8EBE7", "L3; c #E0F0F0", "M3; c #9DACAF", "N3; c #667379", "O3; c #515C62", "P3; c #232B20", "Q3; c #272F24", "R3; c #2E342A", "S3; c #5B5B53", "T3; c #A3A790", "U3; c #8F9476", "V3; c #73775C", "W3; c #777870", "X3; c #46576B", "Y3; c #4A5970", "Z3; c #596980", "`3; c #5A6980", " 4; c #728299", ".4; c #99A8BF", "+4; c #8798AC", "@4; c #BACCDA", "#4; c #D1E4EA", "$4; c #E2F6F5", "%4; c #D7E9E9", "&4; c #EAF9FC", "*4; c #818C92", "=4; c #5E696F", "-4; c #252D20", ";4; c #272F22", ">4; c #2E3428", ",4; c #33392D", "'4; c #373D31", ")4; c #46493E", "!4; c #45483D", "~4; c #767771", "{4; c #898D76", "]4; c #40432E", "^4; c #707265", "/4; c #383B44", "(4; c #404654", "_4; c #404B61", ":4; c #4B5771", "<4; c #4C5773", "[4; c #545F7B", "}4; c #58637F", "|4; c #717C98", "14; c #939EBA", "24; c #838EAA", "34; c #8B97AF", "44; c #DDE9FF", "54; c #D9E6F9", "64; c #C7D4E4", "74; c #7C8A95", "84; c #E0EEF7", "94; c #D4E1EA", "04; c #5F6972", "a4; c #2B3326", "b4; c #3F4539", "c4; c #484B40", "d4; c #9B9E8B", "e4; c #555940", "f4; c #393D22", "g4; c #22260D", "h4; c #333541", "i4; c #3B425C", "j4; c #4E5774", "k4; c #4E5776", "l4; c #4F5877", "m4; c #4F5879", "n4; c #5F6889", "o4; c #7E86AA", "p4; c #757E9F", "q4; c #9DA6C7", "r4; c #BCC5E4", "s4; c #AFB8D5", "t4; c #A1ABC4", "u4; c #505B71", "v4; c #E3EEFF", "w4; c #F6FEFF", "x4; c #C2CBDC", "y4; c #9EA7B8", "z4; c #848B9B", "A4; c #717986", "B4; c #616A73", "C4; c #545D64", "D4; c #30382B", "E4; c #343A2E", "F4; c #42483C", "G4; c #474D41", "H4; c #585B50", "I4; c #393D2F", "J4; c #797C71", "K4; c #707557", "L4; c #505634", "M4; c #303614", "N4; c #1C2005", "O4; c #30323E", "P4; c #393F4F", "Q4; c #383D5A", "R4; c #4D5375", "S4; c #494F71", "T4; c #494F73", "U4; c #484E72", "V4; c #4D5278", "W4; c #656A92", "X4; c #666B93", "Y4; c #64698F", "Z4; c #757AA0", "`4; c #9EA4C8", " 5; c #9399BB", ".5; c #7D84A1", "+5; c #858CA8", "@5; c #99A0BC", "#5; c #C4CBE5", "$5; c #A7AFC6", "%5; c #737B90", "&5; c #5A6173", "*5; c #32352C", "=5; c #31372B", "-5; c #323A2D", ";5; c #363E31", ">5; c #394134", ",5; c #3D4337", "'5; c #494F43", ")5; c #4E5448", "!5; c #696C61", "~5; c #8E9186", "{5; c #969A7F", "]5; c #8C9270", "^5; c #6E744E", "/5; c #4B5229", "(5; c #353B15", "_5; c #2A300E", ":5; c #292C35", "<5; c #2B2E37", "[5; c #2C2E3A", "}5; c #2E303C", "|5; c #333949", "15; c #333855", "25; c #43476C", "35; c #393D62", "45; c #3E4268", "55; c #43466F", "65; c #3F426B", "75; c #4F527D", "85; c #555883", "95; c #484B76", "05; c #595C87", "a5; c #9194BD", "b5; c #969AC0", "c5; c #9EA2C7", "d5; c #8E92B5", "e5; c #585D7D", "f5; c #7B809E", "g5; c #8F96B3", "h5; c #777E9A", "i5; c #6E748E", "j5; c #6D738B", "k5; c #636A7D", "l5; c #555B69", "m5; c #3A4233", "n5; c #3F4738", "o5; c #434B3C", "p5; c #4C5244", "q5; c #515749", "r5; c #555B4D", "s5; c #777B6D", "t5; c #B2B5AA", "u5; c #9FA490", "v5; c #9DA389", "w5; c #9DA483", "x5; c #858B65", "y5; c #626940", "z5; c #545A34", "A5; c #3C4220", "B5; c #76776F", "C5; c #292C33", "D5; c #2A2D36", "E5; c #2C2F38", "F5; c #303342", "G5; c #2F334C", "H5; c #373C59", "I5; c #282D4B", "J5; c #333856", "K5; c #3F4366", "L5; c #363A5D", "M5; c #41456A", "N5; c #494D72", "O5; c #4A4E74", "P5; c #4D5177", "Q5; c #5C6085", "R5; c #6E7297", "S5; c #61658A", "T5; c #44486B", "U5; c #414666", "V5; c #4C5171", "W5; c #3D4260", "X5; c #404562", "Y5; c #474B68", "Z5; c #42465F", "`5; c #3A3F55", " 6; c #44495C", ".6; c #4D505F", "+6; c #3C4238", "@6; c #40483B", "#6; c #4B5145", "$6; c #52584C", "%6; c #565C50", "&6; c #595F53", "*6; c #313429", "=6; c #8C8F84", "-6; c #9EA498", ";6; c #9BA38E", ">6; c #9AA388", ",6; c #949A7E", "'6; c #8A9170", ")6; c #6B7251", "!6; c #4E5534", "~6; c #303419", "{6; c #252813", "]6; c #6B6A68", "^6; c #777674", "/6; c #6A6967", "(6; c #2B2E35", "_6; c #2B313F", ":6; c #2D3245", "<6; c #2F3447", "[6; c #32374B", "}6; c #33384E", "|6; c #3D415A", "16; c #3C4059", "26; c #3C405B", "36; c #3E425D", "46; c #434764", "56; c #464A67", "66; c #3F405C", "76; c #3F3F59", "86; c #3E3E58", "96; c #3D3D55", "06; c #3C3D52", "a6; c #3B3C50", "b6; c #3A3C4B", "c6; c #3A3C49", "d6; c #363930", "e6; c #65685F", "f6; c #9DA59A", "g6; c #9DA596", "h6; c #A0A890", "i6; c #98A186", "j6; c #82886C", "k6; c #686E52", "l6; c #494D32", "m6; c #2B2F18", "n6; c #252912", "o6; c #1F210C", "p6; c #434144", "q6; c #777576", "r6; c #282F37", "s6; c #29303A", "t6; c #2F3545", "u6; c #2E3346", "v6; c #2F3448", "w6; c #363A53", "x6; c #383A53", "y6; c #32324A", "z6; c #333147", "A6; c #323046", "B6; c #312F44", "C6; c #302F41", "D6; c #2F2E3E", "E6; c #2E2D3B", "F6; c #30303C", "G6; c #1F2025", "H6; c #40463A", "I6; c #9DA49C", "J6; c #9EA699", "K6; c #A3AA9A", "L6; c #A9B19C", "M6; c #A9B19A", "N6; c #A4AD92", "O6; c #999F85", "P6; c #868C72", "Q6; c #6A6E55", "R6; c #4E5239", "S6; c #393D26", "T6; c #242611", "U6; c #464445", "V6; c #21292C", "W6; c #20272D", "X6; c #20272F", "Y6; c #222834", "Z6; c #222836", "`6; c #202636", " 7; c #1F2535", ".7; c #202538", "+7; c #24253A", "@7; c #262439", "#7; c #252436", "$7; c #242335", "%7; c #232232", "&7; c #22222E", "*7; c #282834", "=7; c #22222C", "-7; c #191A1F", ";7; c #2F3229", ">7; c #43463B", ",7; c #474A3F", "'7; c #4D5047", ")7; c #71746B", "!7; c #9FA69F", "~7; c #9FA69E", "{7; c #9CA497", "]7; c #9FA696", "^7; c #A4AB99", "/7; c #A5AD96", "(7; c #A0A58E", "_7; c #868A73", ":7; c #2D2E1C", "<7; c #192123", "[7; c #192124", "}7; c #1A2225", "|7; c #1E2430", "17; c #1A202E", "27; c #1A2030", "37; c #1C2134", "47; c #222133", "57; c #212030", "67; c #201F2F", "77; c #21212B", "87; c #676A61", "97; c #4F5249", "07; c #9BA398", "a7; c #9CA294", "b7; c #A0A797", "c7; c #A0A893", "d7; c #A0A58F", "e7; c #A2A790", "f7; c #646752", "g7; c #1E200B", "h7; c #1E1F0D", "i7; c #141D1C", "j7; c #161E20", "k7; c #1E252D", "l7; c #181E2A", "m7; c #1E202D", "n7; c #1F1F27", "o7; c #3F4237", "p7; c #797C73", "q7; c #A1A7A3", "r7; c #A2A9A2", "s7; c #7D806D", "t7; c #4D4E3C", "u7; c #23250F", "v7; c #22240E", "w7; c #1D1E0C", "x7; c #1B1C0E", "y7; c #171E24", "z7; c #161A25", "A7; c #191C25", "B7; c #1B1B23", "C7; c #4C4B46", "D7; c #727268", "E7; c #48483C", "F7; c #3B3E33", "G7; c #7F8277", "H7; c #9DA29B", "I7; c #A0A69C", "J7; c #A0A698", "K7; c #868978", "L7; c #363820", "M7; c #2E3116", "N7; c #24260E", "O7; c #202111", "P7; c #161B1E", "Q7; c #14191F", "R7; c #12151A", "S7; c #272B1D", "T7; c #AFB2A9", "U7; c #858676", "V7; c #676856", "W7; c #494B33", "X7; c #3B3E21", "Y7; c #282B10", "Z7; c #1F2109", "`7; c #22240F", " 8; c #272816", ".8; c #65625D", "+8; c #65625B", "@8; c #313527", "#8; c #3B3F31", "$8; c #4C5042", "%8; c #6B6E63", "&8; c #86897E", "*8; c #B1B4A9", "=8; c #63654D", "-8; c #4E5134", ";8; c #2F3119", ">8; c #272911", ",8; c #1F210B", "'8; c #635F5C", ")8; c #726F6A", "!8; c #292D1E", "~8; c #323627", "{8; c #4A4E40", "]8; c #6F7365", "^8; c #7D7F67", "/8; c #66694E", "(8; c #4C4F34", "_8; c #3A3D22", ":8; c #2D2F17", "<8; c #21230D", "[8; c #54504D", "}8; c #7D7976", "|8; c #333728", "18; c #4B4F40", "28; c #797D6F", "38; c #A5A599", "48; c #9A9C86", "58; c #83856D", "68; c #65674F", "78; c #4D4F37", "88; c #3A3C24", "98; c #2B2D15", "08; c #646361", "a8; c #7B7A76", "b8; c #65645F", "c8; c #45493B", "d8; c #696D5F", "e8; c #969882", "f8; c #7C7E68", "g8; c #64664E", "h8; c #4F5139", "i8; c #3D3F27", "j8; c #232510", "k8; c #1C1D0F", "l8; c #686A52", "m8; c #53553D", "n8; c #3D4025", "o8; c #2E3018", "p8; c #292B13", "q8; c #37392B", "r8; c #8B8E83", "s8; c #A6A6AE", "t8; c #BAB4B6", "u8; c #A7A896", "v8; c #91937E", "w8; c #81836D", "x8; c #6C6E56", "y8; c #515439", "z8; c #3C3F24", "A8; c #313419", "B8; c #262810", "C8; c #1E1F11", "D8; c #4C4F44", "E8; c #7E8274", "F8; c #A6A6B0", "G8; c #868870", "H8; c #6C6F54", "I8; c #56593C", "J8; c #45482B", "K8; c #36391E", "L8; c #272913", "M8; c #787974", "N8; c #31372D", "O8; c #575D51", "P8; c #6D7367", "Q8; c #83897D", "R8; c #949A8C", "S8; c #9CA296", "T8; c #A5A5AD", "U8; c #A5A5B1", "V8; c #A6A6B2", "W8; c #A7A7B1", "X8; c #A0A0A8", "Y8; c #6D7158", "Z8; c #5B5E43", "`8; c #474B30", " 9; c #35371F", ".9; c #1C1D0B", "+9; c #535446", "@9; c #5F5F53", "#9; c #454B41", "$9; c #6F756B", "%9; c #A7A7B3", "&9; c #909382", "*9; c #585D46", "=9; c #44482F", "-9; c #363C20", ";9; c #2B2F16", ">9; c #1F2509", ",9; c #1F2308", "'9; c #575350", ")9; c #95998A", "!9; c #888D79", "~9; c #747963", "{9; c #5D6349", "]9; c #4B5135", "^9; c #3B4125", "/9; c #2B3213", "(9; c #252C0B", "_9; c #1F1A21", ":9; c #666261", "<9; c #2D3025", "[9; c #7A7D74", "}9; c #868B77", "|9; c #70755F", "19; c #5C614A", "29; c #464C32", "39; c #30361A", "49; c #21270B", "59; c #1D2108", "69; c #53564D", "79; c #878A83", "89; c #989D89", "99; c #868B75", "09; c #70755E", "a9; c #575C45", "b9; c #41472D", "c9; c #363A23", "d9; c #5A5D54", "e9; c #72756C", "f9; c #979B8C", "g9; c #8C907F", "h9; c #7B806C", "i9; c #4F543E", "j9; c #3F422D", "k9; c #2E301B", "l9; c #363233", "m9; c #787B72", "n9; c #8F9384", "o9; c #7D8170", "p9; c #6E735F", "q9; c #484A34", "r9; c #292B15", "s9; c #292A1A", "t9; c #7E8178", "u9; c #94978E", "v9; c #838776", "w9; c #575B42", "x9; c #3E4229", "y9; c #2E3219", "z9; c #1F161B", "A9; c #1F1820", "B9; c #1E171F", "C9; c #211A21", "D9; c #919388", "E9; c #8D917A", "F9; c #7C8065", "G9; c #686C51", "H9; c #595D42", "I9; c #4B4F36", "J9; c #393D24", "K9; c #20230E", "L9; c #1D161E", "M9; c #1E171E", "N9; c #292B1D", "O9; c #B7B9AE", "P9; c #8E9279", "Q9; c #7C8067", "R9; c #686C53", "S9; c #595D44", "T9; c #353922", "U9; c #282C15", "V9; c #1D1E0E", "W9; c #7F8176", "X9; c #8F9088", "Y9; c #838770", "Z9; c #767A63", "`9; c #61654E", " 0; c #4E523B", ".0; c #30331E", "+0; c #8C8E83", "@0; c #A6AA99", "#0; c #A6AB95", "$0; c #9EA38D", "%0; c #9BA08A", "&0; c #939882", "*0; c #818670", "=0; c #6F745E", "-0; c #474C38", ";0; c #3A3F2B", ">0; c #2E331F", ",0; c #262B17", "'0; c #1E230F", ")0; c #292D1C", "!0; c #303423", "~0; c #606455", "{0; c #9EA291", "]0; c #9CA08F", "^0; c #7A7E6D", "/0; c #5B5F4E", "(0; c #4C503F", "_0; c #404531", ":0; c #353928", "<0; c #32361F", "[0; c #2C2E19", "}0; c #272B1C", "|0; c #282C1B", "10; c #333824", "20; c #393E28", "30; c #494D3C", "40; c #555948", "50; c #676B5A", "60; c #7A7E6F", "70; c #8B8F80", "80; c #A0A69A", "90; c #989F8F", "00; c #909787", "a0; c #899080", "b0; c #7E8575", "c0; c #717868", "d0; c #626959", "e0; c #525947", "f0; c #31371D", "g0; c #2D3415", "h0; c #242A0E", "i0; c #23270C", "j0; c #1C2007", "k0; c #181E04", "l0; c #282C13", "m0; c #262B14", "n0; c #262914", "o0; c #252A14", "p0; c #212816", "q0; c #1F2614", "r0; c #262D1B", "s0; c #1A210F", "t0; c #1E2611", "u0; c #232B16", "v0; c #29311C", "w0; c #323A25", "x0; c #3F4730", "y0; c #4D553E", "z0; c #69705E", "A0; c #757C6C", "B0; c #858C7C", "C0; c #949B8B", "D0; c #9FA599", "E0; c #9FA59B", "F0; c #A4AAA0", "G0; c #A6ACA0", "H0; c #AAB0A4", "I0; c #A4AA9E", "J0; c #969C8E", "K0; c #8A9181", "L0; c #7C8274", "M0; c #737B66", "N0; c #666F52", "O0; c #616B48", "P0; c #5B6240", "Q0; c #525C39", "R0; c #46502E", "S0; c #414829", "T0; c #3B4425", "U0; c #2E3516", "V0; c #2B3415", "W0; c #2B3115", "X0; c #283114", "Y0; c #282E14", "Z0; c #242D12", "`0; c #252B11", " a; c #242912", ".a; c #252712", "+a; c #212B13", "@a; c #242E16", "#a; c #252F17", "$a; c #273119", "%a; c #2E3820", "&a; c #343E26", "*a; c #47503B", "=a; c #4E5742", "-a; c #58614C", ";a; c #636C57", ">a; c #6E7860", ",a; c #7D876F", "'a; c #8E9880", ")a; c #99A28D", "!a; c #A7AE9E", "~a; c #ABB2A2", "{a; c #AFB6A6", "]a; c #B0B6A8", "^a; c #AAB0A6", "/a; c #AAAFA8", "(a; c #A1A79D", "_a; c #9EA49A", ":a; c #9AA092", "b; c #959988", ",b; c #929A85", "'b; c #909581", ")b; c #8B937E", "!b; c #828A75", "~b; c #808571", "{b; c #7F846E", "]b; c #7A7F68", "^b; c #6A6F58", "/b; c #5B6049", "(b; c #545742", "_b; c #4E533C", ":b; c #464934", "c; c #747A60", ",c; c #72785E", "'c; c #71775D", ")c; c #7B8167", "!c; c #797F65", "~c; c #767C62", "{c; c #767B64", "]c; c #787D67", "^c; c #7A7F69", "/c; c #7B806A", "(c; c #7D826C", "_c; c #7E836D", ":c; c #80856F", " > , , , > ; ' ' ' ' ' ' ' ' ) ) ! ) ' ~ { ] ^ / ^ ( _ : < : _ / ] [ ] [ ^ } | 1 ; ; 1 | } 1 1 1 1 1 1 1 1 ~ 2 2 3 3 2 2 ~ 3 3 2 2 2 2 ~ ~ 4 } 1 ; ; 1 } 4 4 } 1 ; ; 1 } 4 5 6 7 8 9 9 9 8 8 8 8 8 8 8 8 8 } } } } } 4 4 4 4 4 4 } } } } } 1 | 4 0 0 4 | 1 4 4 4 } } } } } a b b b c c d d e e f f g g g g h h h h h h h h i h j 9 9 h i k l l l l l l l l l l l l l l l l k k i i i i h h i i i i i i i i m m m m m m m m m m m m m m m l n k k k k k k k i i k k k o o o p p k k k k q q r r r r s s s r q k k k k k k k k k k k k k k k r r r r q q k k t u v w x x y z A A A A B B B B o u C C D E F C G G G G G G G G u u u G G G G o H I J K K J I H I L K J I H L M N t u u u u G G O O O t t u u P v Q Q Q v v G G O O R R I I I R S T T T O t t t T T T O O O O O U U U U V V T T T T W X Y Y Y Y Z Z ` . T O t t . . . . T T T T . . . . . . . . ` . O t t O . ` Z Z ` ` ` . . . ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` T . ` Z Z ` . T Z ` ` .. +. @. Z T Z Z ` ` ` . . . T . ` Z Z ` . T . Z .. Z T T ` #. $. %. %. %. $. $. Z Z Z Z &. &. *. *. *. &. =. Z . ` .. @. Z ` .. Z ` . . ` Z .. ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` -. ;. >. >. >. >. >. >. >. >. >. >. >. >. >. >. ;. -. ` Z Z Z Z .. .. Z Z Z Z Z Z Z Z &. &. &. &. &. &. &. &. ,. ,. &. &. &. &. =. =. '. ). .. Z Z .. #. !. ~. ~. ~. %. {. ]. ]. ^. #. @. @. @. @. @. @. @. +. @. .. Z Z Z .. .. +. @. Z ` ` Z .. @. Z Z .. @. @. .. Z Z .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. @. +. +. +. @. Z T O .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. /. @. Z . T . Z @. (. _. _. :. (. (. <. W -. -. <. _. _. <. -. -. ` Z Z .. @. +. /. [. .. .. .. .. .. .. .. .. Z @. @. ` .. [. +. T .. .. .. .. .. Z Z Z +. .. Z Z @. +. @. Z .. .. .. .. .. .. .. .. ` Z Z Z Z .. .. .. .. .. +. /. /. +. .. .. +. @. .. Z Z .. @. +. @. @. @. .. .. .. .. .. .. .. Z Z Z Z ` ` .. .. .. .. .. @. @. #. }. |. 1. 2. 3. 4. 5. _. _. _. 6. 6. 7. 8. 9. 0. S ` ` Z .. @. @. @. Z Z Z Z Z Z Z <. a. b. c. ;. d. e. f. g. :. (. /. +. .. ` h. @. =. i. i. i. i. i. i. i. i. i. i. 6. 6. 6. 6. j. k. k. k. k. k. k. k. k. l. :. -. -. _. :. :. f. m. n. c. c. f. f. o. o. 7. 7. p. q. r. r. s. q. *. 0. 0. 0. 0. 0. 0. 0. 6. 6. 6. 6. 6. 6. 6. 6. 6. 6. 6. 6. 6. 6. 6. 6. i. i. i. i. i. 6. 6. t. b. u. v. w. v. x. c. x. y. w. ;. x. b. z. v. c. :. @. @. .. .. Z Z Z Z Z .. .. .. .. @. @. -. (. (. W A. <. (. (. _. _. _. _. _. _. _. _. &. &. =. =. =. ). ). ). =. =. =. =. =. =. =. .. B. %. %. ~. C. $. Z .. ` ` ,. &. *. q. q. q. &. &. &. =. =. =. =. =. =. =. =. =. =. =. =. =. D. D. D. E. E. F. F. F. E. F. G. H. H. G. F. E. ,. ,. ,. ,. ,. ,. ,. ,. S S S S S S ", "I. . + + + + . I. I. . . + @ @ @ & & & ! ! ! ! ! ! ! ! ! ! ! ! ! J. J. = = & & # # ; ; > > , , , > ; ' ' ' ' ' ' ' ~ ~ ' ) ! ) ) ' K. L. M. N. O. P. Q. P. Q. N. M. R. S. T. U. R. V. W. X. Y. Y. X. W. W. W. W. W. W. W. W. W. 7 ~ 2 2 3 3 2 2 ~ ~ ~ 2 2 2 2 3 3 3 2 2 ~ ~ 2 2 3 3 2 2 ~ ~ 2 2 3 6 Z. `. 8 9 9 9 9 8 8 8 8 8 8 8 8 4 4 4 } } } } } + 0 0 4 } | 1 1 1 | 4 0 0 4 | 1 + 0 0 4 } | 1 1 .+ .+ .+ .+ ++ ++ j j j j @+ @+ #+ #+ #+ #+ h h h h h h h h k i h j j j h h l l l l l l l l l l l l l l l l h h i i i i k k i i i i i i i i m m m m m m m m m m m m m m m l n k k k k k k k i i k k k o o o p p k k k k q q r r r r s s s r q k k k k k k k o o o o o o o o r r r r q q k k u u v w x y y $+ A %+ %+ %+ A A B B &+ *+ t t D E D C G G G G G G G G u u u u u t t t I L L J J L L I I L K J I H L M M u u u u t t t O O O t t u u P =+ -+ -+ -+ =+ =+ t t O O R R I I I R ;+ T T O O O t t ` . . T O t u u >+ >+ >+ >+ ,+ ,+ O O . . W W Y '+ '+ '+ Z ` ` . T O O t T T T T . . . . . . . . . . . . ` . . T T . . ` Z Z ` ` ` . . . ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` . . ` Z Z ` . . Z ` ` Z @. @. Z . Z Z ` ` ` . . . . . ` Z Z ` . . . ` ` . O O . $. $. %. %. %. $. $. Z Z Z Z &. &. *. *. *. &. =. Z . ` .. @. Z ` Z ` . . . . ` Z .. .. .. .. .. .. .. .. ` ` ` ` ` ` ` -. )+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ )+ _. .. Z Z Z Z ` ` Z Z Z Z Z Z Z Z &. &. &. &. &. &. &. &. =. =. &. &. &. &. ,. ,. ). ). .. Z Z .. #. #. ~. ~. ~. %. {. ]. ]. ^. B. .. .. .. .. .. .. .. .. .. Z Z Z .. @. +. [. /. @. .. Z Z .. .. +. @. .. .. .. .. @. +. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. /. +. +. @. Z . O u .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. @. @. @. @. @. @. @. @. /. @. Z ` . ` Z .. (. _. <. _. (. (. <. k. <. _. _. :. :. _. _. <. .. .. @. +. +. /. [. [. .. .. .. .. .. .. .. .. .. +. .. ` .. [. +. . .. .. .. @. @. @. @. +. +. .. Z Z @. +. @. Z Z Z Z Z Z Z Z Z .. .. .. .. Z Z Z Z .. @. +. +. +. +. @. .. @. @. .. Z Z .. @. @. .. .. .. .. .. @. @. @. ~+ ~+ h. h. h. h. {+ {+ ]+ ]+ ]+ {+ {+ {+ {+ B. ^+ 1. 1. 2. ^+ /+ (. -. :. :. j. j. 7. 8. (+ _+ &. Z Z Z .. .. .. .. .. .. .. .. .. .. .. _. :+ b. v. ;. e. e. f. f. <. :. +. @. ` . ~+ .. =. i. i. i. i. i. i. i. i. i. i. i. i. 0. 0. 0. <. <. <. <. <. <. <. <. l. _. -. -. _. (. :. f. m. n. c. c. f. f. o. t. 8. 8. q. q. r. <+ [+ p. q. i. i. i. i. i. i. i. i. i. i. i. i. i. i. i. 6. 6. 6. 6. 6. 6. 6. 6. 6. 6. 6. i. i. i. i. i. g. v. f. c. e. ;. e. ;. a. v. e. c. :+ y. g. f. -. ` Z Z .. .. @. @. .. Z Z Z Z ` ` ` *+ <. :. k. W _. (. _. _. _. _. _. _. _. _. _. &. &. =. =. =. ). ). ). =. =. =. =. =. =. =. .. B. %. %. ~. C. $. Z .. ` ` ,. &. *. q. q. q. '. ). ). ). ). =. =. =. =. =. =. =. =. =. =. =. ,. ,. ,. &. &. =. =. =. &. =. ). ). ). ). =. &. ,. ,. ,. ,. ,. ,. ,. ,. &. &. &. &. &. &. ", "I. I. . + + + + I. . + + @ @ }+ }+ }+ }+ & ! ) ' ) ) ) ) ) ) ) ) |+ |+ J. = & ! $ $ ; ; > > , , , > ; ' ' ' ' ' ' ' 2 ~ ' ) ! ! ! $ > > L. 1+ N. 1+ P. 2+ L. > T. 3+ 4+ 3+ T. 5+ X. X. Y. Y. Y. Y. X. X. W. W. W. W. W. W. W. W. 1 2 2 3 3 2 2 ~ ' ' ~ 2 2 3 6+ 6+ 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 7 `. `. 8 9 9 9 9 8 8 8 8 8 8 8 8 0 0 4 4 } | | 1 0 4 4 4 } | | | 1 | 4 0 0 4 | 1 0 4 4 4 } | | | 7+ 8+ 7+ .+ 9+ 0+ + h 0 j a+ @+ b+ #+ b+ #+ h h h h h h h h k i i h j j 9 9 l l l l l l l l l l l l l l l l j j h i i k o o i i i i i i i l m m m m m m m m m m m m m m m m n k k k k k k k i i k k k o o o p p k k k k q q r r r r s s s r q k k k k k k k o o o o o o o o r r r r q q k k u G w w x y Q $+ A %+ %+ %+ A A B B &+ *+ t t D E D C G G G G G G G G G u u t t O T ;+ L L L L L L L L I L K J I H L J c+ G u u t O O T O O O t t u u P d+ e+ e+ e+ d+ d+ O O O O R R I I I R ;+ T O O O O O O . T T T O t t t f+ f+ f+ f+ C C t t . . W W Y '+ g+ g+ ` ` . . T T O O O O O T . ` ` ` . . . . . . . . ` ` ` . . ` ` ` Z Z ` ` ` . . . ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` . ` ` ` ` ` ` . .. Z . ` .. @. Z . Z Z ` ` ` . . . . ` ` ` ` ` ` . . . . T O T . C. $. %. %. %. $. $. Z Z Z Z &. &. *. *. *. &. =. Z . ` .. @. Z ` ` ` . . . . ` ` .. .. .. .. .. .. .. .. Z Z Z Z Z Z Z <. )+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ )+ :. @. .. Z Z ` . . Z Z Z Z Z Z Z Z &. &. &. &. &. &. &. &. ). ). =. &. &. ,. S S ). =. .. .. .. .. B. #. ~. ~. ~. %. {. ]. ]. ^. $. Z Z Z Z Z Z Z Z Z Z Z .. @. +. /. h+ [. /. +. @. .. Z Z [. +. @. Z Z @. +. [. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. @. @. .. .. ` . T O .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. /. +. .. Z ` Z .. .. (. _. <. _. (. (. _. -. _. :. (. (. (. (. :. _. @. @. +. /. /. [. [. [. .. .. .. .. .. .. .. .. @. +. .. . Z /. /. ` .. .. @. @. +. /. /. /. +. .. Z Z @. +. @. Z Z Z Z Z Z Z Z Z +. +. @. .. .. Z ` ` Z .. .. .. .. .. .. Z @. .. .. .. .. .. .. @. ` Z Z .. @. @. +. +. i+ i+ ~+ h. h. {+ ]+ ]+ j+ j+ ]+ ]+ {+ h. h. k+ $. l+ l+ 2. m+ n+ _. W (. (. j. j. 7. 9. o+ p+ ). @. @. @. @. .. .. .. .. .. .. .. .. .. .. _. :+ v. v. c. f. e. e. e. <. _. @. .. ` . ~+ Z =. i. i. i. i. i. i. i. 6. i. i. 0. 0. q+ _+ _+ _. _. _. _. _. _. _. _. (. _. -. <. :. (. :. e. r+ n. c. c. f. g. t. t. (+ 9. *. q. <+ <+ s+ t+ q. i. i. i. i. i. i. i. 0. 0. 0. 0. 0. 0. 0. 0. 6. 6. 6. 6. 6. 6. 6. 6. j. j. 6. 6. i. 0. 0. q+ _. f. _. e. <. d. -. d. :. e. -. e. :. g. _. -. ` ` Z Z Z .. .. .. @. @. @. .. Z ` ` ` u+ W _. -. k. _. :. <. _. _. _. _. _. _. _. _. &. &. =. =. =. ). ). ). =. =. =. =. =. =. =. .. B. %. %. ~. C. $. Z .. Z Z &. &. *. *. *. *. v+ v+ v+ '. ). ). =. =. =. =. =. =. =. =. =. =. &. 0. &. 0. &. 0. &. 0. =. i. =. 6. ). i. =. =. &. &. &. &. &. &. &. &. =. =. =. =. =. =. ", "I. I. I. . + + @ I. I. I. . + + + J. J. |+ |+ J. = w+ x+ x+ x+ x+ x+ x+ x+ x+ x+ |+ |+ J. = & ! $ $ ; ; > > , , , > ; ' ' ' ' ' ' ' 2 ~ ' ) ! ! ! $ V. y+ , z+ , A+ B+ A+ , y+ C+ 8+ D+ 8+ 7+ 8+ A+ A+ z+ z+ z+ z+ A+ A+ y+ y+ y+ y+ y+ y+ y+ W. 1 2 2 3 3 2 2 ~ ' ' ~ 2 2 3 6+ 6+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ 2 8 8 8 8 8 9 9 j 8 8 8 8 8 8 8 8 0 0 4 4 } | | 1 | | | } 4 4 4 0 1 | 4 0 0 4 | 1 | | | } 4 4 4 0 7+ 7+ F+ D+ G+ H+ I+ + J+ 0 K+ a+ L+ b+ L+ b+ h h h h h h h h i i i h h j 9 9 l l l l l l l l l l l l l l l l j j h i i k o o i i i i i i i l m M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ m n k k k k k k k i i k k k o o o p p k k k k q q r r r r s s s r q k k k k k k k G G G G G G G G r r r r q q k k G G w p y y Q N+ %+ O+ %+ %+ %+ %+ A A &+ *+ A. A. G o G t G G G G G G G G G u u t t O T ;+ L P+ P+ P+ P+ P+ P+ P+ Q+ P+ R+ S+ Q+ T+ P+ J c+ u u t O O T T O O O t t u u P U+ V+ V+ V+ U+ U+ T T O O R R I I I R R O O O O O T T t t t O T T T . f+ f+ f+ f+ C C t t . T W W Y '+ '+ '+ . . . . T T T T O O O T . ` ` ` . . . . . . . . . ` ` ` ` ` ` . Z Z ` ` ` . . . ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` . . ` ` ` @. Z . ` .. @. Z ` Z Z ` ` ` . . . ` ` ` . . ` ` ` ` . T O T . . W+ $. %. %. %. $. $. Z Z Z Z &. &. *. *. *. &. =. Z . ` .. @. Z ` ` ` ` ` ` ` ` ` .. .. .. .. .. .. .. .. Z Z Z Z Z Z Z <. )+ X+ X+ X+ X+ X+ X+ X+ X+ X+ X+ X+ X+ X+ X+ )+ :. @. .. Z Z ` . . Z Z Z Z Z Z Z Z &. &. &. &. &. &. &. &. ). ). =. &. &. ,. S S =. =. .. @. @. .. B. B. ~. ~. ~. %. {. ]. ]. ^. $. Z Z Z Z Z Z Z Z Z Z Z .. @. +. /. [. [. /. /. @. .. Z ` [. +. @. Z Z @. +. [. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. Z Z Z Z Z Z .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. +. +. @. .. .. .. .. .. (. _. -. <. :. (. :. <. :. :. (. l. l. (. :. :. +. +. +. /. /. /. [. [. .. .. .. .. .. .. .. .. @. +. .. T ` /. /. ` .. .. @. @. +. /. /. /. +. .. Z Z @. +. @. Z Z Z Z Z Z Z Z Z +. +. +. @. .. Z Z Z Z ` ` ` ` ` ` Z .. .. .. @. @. .. .. .. ` Z Z .. @. @. +. +. i+ Y+ Z+ `+ `+ @ .@ .@ +@ +@ .@ .@ @ `+ `+ k+ $. l+ l+ @@ m+ 3. <. X (. (. j. j. 7. 9. o+ p+ v+ /. /. +. +. +. +. +. @. @. @. @. @. @. @. :. g. v. v. v. f. f. e. e. <. _. @. .. ` . ~+ Z =. i. i. i. i. i. i. i. 6. i. i. 0. 0. q+ _+ _+ :. :. :. :. :. :. :. :. :. _. <. _. (. (. _. d. r+ #@ ;. c. g. g. $@ $@ (+ 9. *. q. <+ <+ s+ t+ p. 6. 6. 6. 6. 6. 6. 6. 0. 0. 0. 0. 0. 0. 0. 0. i. i. i. i. i. i. i. i. j. j. 6. 6. i. 0. 0. q+ _. _. .. <. Z -. ` -. .. -. T k. Z _. Z . .. .. Z Z Z ` ` ` /. /. +. @. @. .. Z Z %@ W _. <. -. _. :. -. _. _. _. _. _. _. _. _. &. &. =. =. =. ). ). ). =. =. =. =. =. =. =. .. B. %. %. ~. C. $. Z .. Z Z &. &. *. *. *. *. v+ v+ v+ '. ). ). =. =. =. =. =. =. =. =. =. =. 0. )+ 0. )+ 0. )+ 0. )+ 6. o. i. o. i. o. i. 6. &. &. &. &. &. &. &. &. ). ). ). ). ). ). ", "I. I. I. I. . + @ . I. I. I. I. I. I. I. * = |+ &@ &@ J. * w+ w+ w+ w+ w+ w+ w+ w+ w+ J. J. = = & & # # ; ; > > , , , > ; ' ' ' ' ' ' ' ~ ~ ' ) ! ) ) ; W. y+ y+ z+ z+ A+ A+ A+ z+ y+ *@ 8+ 8+ 8+ 8+ *@ A+ z+ y+ y+ y+ y+ z+ A+ y+ y+ y+ y+ y+ y+ y+ W. 1 2 2 3 3 2 2 ~ ~ ~ 2 2 2 2 3 3 =@ E+ E+ -@ -@ E+ E+ =@ =@ E+ E+ -@ -@ E+ E+ =@ j 9 8 8 8 9 j j 8 8 8 8 8 8 8 8 4 4 4 } } } } } 1 1 | } 4 0 0 + 1 | 4 0 0 4 | 1 1 1 | } 4 0 0 + ;@ ;@ >@ ;@ ,@ G+ '@ J+ '@ J+ )@ K+ !@ L+ !@ L+ + h h h h h h h j h i i i h j 9 l l l l l l l l l l l l l l l l h h i i i i k k i i i i i i i l m M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ m n k k k k k k k i i k k k o o o p p k k k k q q r r r r s s s r q k k k k k k k G G G G G G G G r r r r q q k k G o w p y Q ~@ N+ %+ O+ %+ %+ %+ %+ A A &+ *+ A. A. G o G t G G G G G G G G u u u u u t t N J P+ P+ Q+ Q+ P+ P+ S+ Q+ P+ R+ S+ Q+ T+ P+ J N t t O O O O O O O O t t u u P d+ e+ e+ e+ d+ d+ O O O O R R I I I R N t O O O T T T u u t O T . . ` >+ >+ >+ >+ ,+ ,+ O O O O X X Y Y Y Y . . . . T T T T T T T T . . . . . . . . . . . . T . . ` ` . . T Z Z ` ` ` . . . ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Z ` . . . . ` Z @. Z . . Z .. .. Z Z Z ` ` ` . . . Z ` . . . . ` Z Z . O O . ` ` W+ $. %. %. %. $. $. Z Z Z Z &. &. *. *. *. &. =. Z . ` .. @. Z ` ` Z .. .. .. .. Z ` .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 9. X+ X+ X+ X+ X+ X+ X+ X+ X+ X+ X+ X+ X+ X+ 0. =. .. Z Z Z Z ` ` Z Z Z Z Z Z Z Z &. &. &. &. &. &. &. &. =. =. &. &. &. &. ,. ,. &. =. @. @. @. @. B. $. ~. ~. ~. %. {. ]. ]. ^. B. .. .. .. .. .. .. .. .. .. Z Z Z .. @. +. +. +. +. +. @. .. Z ` +. @. .. .. .. .. @. +. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. Z Z Z Z .. @. /. [. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. @. @. @. @. @. @. @. @. +. +. +. @. @. .. .. .. (. _. -. -. _. (. (. :. _. :. (. (. (. (. :. _. +. +. +. +. +. +. +. +. .. .. .. .. .. .. .. .. +. +. Z T . /. /. Z .. .. .. @. @. @. @. +. +. .. Z Z @. +. @. Z .. .. .. .. .. .. .. .. +. +. @. @. @. @. .. .. Z Z ` . . ` Z Z Z .. @. @. @. @. .. Z .. .. .. .. .. @. @. @. Z+ Z+ `+ `+ `+ `+ @ @ .@ .@ .@ @ @ @ @ {@ C. 1. 1. @@ }. 3. <. X :. :. j. j. 7. 8. (+ _+ '. +. +. +. +. +. /. /. @. @. @. @. @. @. @. :. f. v. v. b. g. f. e. d. <. :. +. @. ` . ~+ .. =. i. i. i. i. i. i. i. i. i. i. i. i. 0. 0. 0. _. _. _. _. _. _. _. _. :. <. <. _. (. (. _. d. ]@ ^@ ;. c. g. g. $@ $@ 8. 8. q. q. r. <+ [+ p. p. 6. 6. 6. 6. 6. 6. 6. i. i. i. i. i. i. i. i. i. i. i. i. i. i. i. i. 6. 6. 6. i. i. i. i. i. @. @. .. .. Z Z Z Z .. ` . . Z .. Z . .. .. Z Z ` ` . . +. +. +. +. @. @. @. @. &+ -. (. <. -. _. :. -. _. _. _. _. _. _. _. _. &. &. =. =. =. ). ). ). =. =. =. =. =. =. =. .. B. %. %. ~. C. $. Z .. .. .. =. &. *. /@ /@ /@ '. ). ). ). ). =. =. =. =. =. =. =. =. =. =. i. o. (@ o. !+ )+ _@ :@ _@ t. <@ o. !+ )+ (@ t. t. i. =. =. =. =. =. =. =. =. =. =. =. =. =. ", ". I. I. . @ [@ + + . I. I. }@ }@ w+ * |+ &@ |@ |+ J. * w+ w+ w+ w+ w+ w+ w+ w+ * * = = & & - - ; ; > > , , , > ; ' ' ' ' ' ' ' ' ) ) ! ) ' ~ 1 1@ 2@ 3@ 3@ 4@ 4@ 4@ 5@ 5@ 4@ 3@ 2@ 2@ 2@ 2@ 3@ 4@ 3@ 2@ 6@ 6@ 2@ 3@ 4@ 3@ 3@ 3@ 3@ 3@ 3@ 3@ W. 1 2 2 3 3 2 2 ~ 3 3 2 2 2 2 ~ ~ x+ =@ -@ 7@ 7@ -@ =@ x+ x+ =@ -@ 7@ 7@ -@ =@ x+ h j 9 8 8 9 j h 8 8 8 8 8 8 8 8 } } } } } 4 4 4 } } } } } 4 4 4 1 | 4 0 0 4 | 1 } } } } } 4 4 8@ 9@ 9@ 0@ 9@ a@ b@ c@ d@ e@ '@ f@ )@ g@ !@ g@ !@ + h h h h h h h 8 9 h i i i h j l l l l l l l l l l l l l l l l k k i i i i h h i i i i i i i l m M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ m n k k k k k k k i i k k k o o o p p k k k k q q r r r r s s s r q k k k k k k k u u u u u u u u r r r r q q k k o o p p y Q ~@ h@ %+ O+ O+ O+ %+ %+ A A i@ g+ A. A. G o G t G G G G G G G G u u u G G G G j@ K S+ Q+ T+ T+ Q+ S+ R+ Q+ P+ R+ S+ Q+ T+ P+ J ;+ T O O O O t t O O O t t u u P d+ e+ e+ e+ d+ d+ O O O O R R I I I R N t t O T T T . O O O O O T T T U U U U V V T T u u A. X k@ k@ l@ l@ T T T T . . . . . . . . T T T T . . . . . . . . t O . ` ` . O t Z Z ` ` ` . . . ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Z ` . T T . ` Z +. Z . T ` .. .. Z Z Z ` ` ` . . . Z ` . T T . ` Z @. ` T T Z .. Z W+ $. %. %. %. $. $. Z Z Z Z &. &. *. *. *. &. =. Z . ` .. @. Z ` Z .. @. +. +. @. .. Z ` ` ` ` ` ` ` ` .. .. .. .. .. .. .. .. 9. 9. 9. 9. 9. 9. 9. 9. 9. 9. 9. 9. 9. 9. 9. 0. ,. ` Z Z Z Z .. .. Z Z Z Z Z Z Z Z &. &. &. &. &. &. &. &. ,. ,. &. &. &. &. =. =. &. =. @. +. +. @. B. $. ~. ~. ~. %. {. ]. ]. ^. #. @. @. @. @. @. @. @. +. @. .. Z Z Z .. .. Z Z @. @. @. .. Z ` Z Z .. @. @. .. Z Z .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. /. +. @. .. .. +. /. [. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. +. +. +. +. +. @. .. Z (. <. k. k. _. (. (. (. _. _. :. (. (. :. _. _. @. @. @. @. @. @. @. @. .. .. .. .. .. .. .. .. /. /. Z O . /. /. .. .. .. .. .. .. Z Z Z +. .. Z Z @. +. @. Z +. +. +. +. +. +. +. +. @. @. @. @. @. +. +. +. +. @. .. Z Z .. @. +. Z .. @. +. +. @. .. Z @. @. @. .. .. .. .. .. @ @ `+ `+ `+ `+ Z+ Z+ @ @ @ @ @ .@ .@ m@ W+ |. |. n@ }. 3. <. W _. _. 6. 6. 7. 8. 9. 0. ,. ` Z .. .. @. +. +. @. @. @. @. @. @. @. :. f. v. b. b. :+ f. e. l@ :. (. /. +. .. ` h. @. =. i. i. i. i. i. i. i. i. i. i. 6. 6. 6. 6. j. _. _. _. _. _. _. _. _. _. <. <. :. l. l. _. l@ ]@ ^@ ;. c. g. :+ $@ o@ 7. 7. p. q. r. r. s. q. p. 6. 6. 6. 6. 6. 6. 6. 6. 6. 6. 6. 6. 6. 6. 6. 0. 0. 0. 0. 0. 0. 0. 0. i. i. i. i. i. 6. 6. 6. +. j+ ]+ ]+ ]+ {+ {+ {+ j+ {+ h. {+ ]+ j+ ]+ h. . . . ` ` Z Z Z .. .. .. .. @. @. @. @. X :. l. <. -. _. :. <. _. _. _. _. _. _. _. _. &. &. =. =. =. ). ). ). =. =. =. =. =. =. =. .. B. %. %. ~. C. $. Z .. .. .. =. &. *. /@ /@ /@ &. &. &. =. =. =. =. =. =. =. =. =. =. =. =. i. (@ p@ (@ q@ !+ r@ _@ r@ s@ t@ (@ q@ !+ p@ <@ s@ i. =. =. =. =. =. =. =. =. =. =. =. =. =. ", ". I. . @ [@ @ @ + I. }@ u@ v@ x+ * J. |@ |@ &@ |+ = * * * * * * * * w+ w+ * = & }+ w@ w@ ; ; ; > > > > > ' x+ ' ' ' ' ' ' ) ! ! ! ) ' ~ `. x@ y@ 3@ z@ 4@ A@ 4@ A@ B@ C@ 4@ z@ 2@ y@ 3@ 3@ 4@ 3@ 6@ D@ D@ 6@ 3@ E@ 3@ F@ F@ F@ F@ F@ F@ 7 G@ E+ 2 3 3 2 2 ~ 6+ 6+ 3 2 2 ~ ' ' ' =@ 3 7@ 6+ -@ ~ x+ ' =@ 3 7@ 6+ -@ ~ ' i h 9 8 8 8 j h 8 8 8 8 8 8 8 8 1 | | } 4 4 0 0 0 0 4 4 } | | 1 1 | 4 0 0 4 | 1 0 0 4 4 } | | H@ I@ I@ I@ ,@ b@ J@ J@ J@ '@ '@ )@ )@ !@ !@ !@ K+ K@ L@ h h h h h h `. 8 j i k k M@ h l l l l l l l l l l l l l l l l o o k i i h j j i i i i i i i l m M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ M+ m n k k k k k k k i i k k k o o o p p k k k k q q q q r r r r r r q k k k k k k k u u u u u u u u q q q q q q k k o k k k w v P N@ A %+ %+ %+ A A B O@ P@ Q@ R@ N c+ j@ c+ N c+ G c+ G G G G G u u G G o p k k K J I H H I J K I L K J I H L J S . T T O t t u O O O t t u u u =+ -+ =+ =+ =+ =+ t t O O R R R R I R t =+ t d+ T U+ . W+ . W+ T U+ O =+ t u i+ i+ i+ i+ i+ . . . G G u X W k. -. <. T T T T . . . . ` ` ` . T O O O . . . . . . . . u t T . . T t u Z Z ` ` ` . . . ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .. ` . T T . ` .. +. Z . T ` .. .. Z Z Z ` ` ` . . . .. ` . T T . ` .. +. Z T . .. @. .. ` $. %. $. $. $. $. Z Z Z Z &. &. &. &. *. &. .. Z . ` .. @. Z ` .. @. +. /. /. +. @. .. ` ` ` ` ` ` ` ` .. .. .. .. .. .. .. .. *. *. *. *. *. *. *. *. *. *. *. *. *. *. *. &. S . ` Z Z .. @. @. Z Z Z Z Z Z Z Z &. &. *. &. *. &. *. &. S@ S /@ &. *. =. p. ). ,. i. @. (. +. :. .. ^+ C. ^+ C. 3. %. |. ^. ^. !. !. +. +. +. +. +. +. /. +. @. .. Z Z &. Z . ` Z @. @. .. Z ` . ` .. @. @. .. ` . .. .. =. .. .. .. .. .. .. .. .. .. .. B. .. B. B. B. B. B. B. B. .. .. T@ h+ /. @. @. @. +. /. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. Z Z Z Z Z Z Z Z +. +. +. /. +. @. .. Z (. <. k. k. _. (. l. (. <. _. :. :. :. :. _. <. @. @. .. .. .. .. .. .. .. .. .. .. .. .. .. .. /. /. Z O . /. /. .. @. .. .. Z Z ` . . +. .. Z Z @. +. @. Z /. /. /. /. /. /. /. /. .. .. .. @. +. /. /. /. h+ /. +. @. @. +. /. h+ ` .. ]+ +. +. @. .. ` +. +. @. @. .. <. Z ` ]+ ]+ {+ h. h. ~+ i+ i+ ~+ h. h. {+ ]+ ]+ j+ U@ U+ V@ V@ n@ }. n+ _. W <. <. i. 6. 7. 7. 8. i. R O T . ` .. .. @. @. @. @. @. @. @. @. :. f. g. :+ :+ :+ f. -. k. :. l. [. /. .. Z {+ +. .. _. _. _. _. _. _. _. _. _. :. 6. j. W@ W@ W@ <. <. <. <. <. <. <. <. _. <. <. :. l. l. _. k. X@ ^@ #@ n. Y@ :+ a. o@ j. Z@ p. p. r. `@ # /@ 6. 6. 6. 6. 6. 6. 6. 6. j. j. j. j. j. j. Z@ j. 0. 0. 0. 0. 0. 0. 0. 0. q+ 0. 0. i. 6. 6. j. j. /. /. j+ +. ]+ @. ]+ .. .# +. ]+ +. .# [. +# @. t O T . Z .. @. +. . ` ` Z Z .. @. @. -. l. 5. <. k. _. :. _. _. _. _. _. _. _. _. _. &. &. q. =. =. ). ). ). =. =. =. =. =. =. =. .. B. %. %. ~. C. $. Z .. @. .. =. &. *. /@ /@ S@ S . ,. Z &. .. =. @. =. .. =. .. =. .. =. i. t. (@ (@ !+ !+ _@ _@ @# s@ <@ (@ _@ _@ (@ <@ s@ i. =. =. =. =. =. =. =. &. &. &. &. &. &. ", "## $# %# &# }+ & ! & & }+ }+ }+ &# &# &# ! ' 2 ' }+ &# }+ ) & & ! ! ! ) ) ) ! ! ! ! ! ! ! ! ' ' ' ; ; ; ; ' x+ *# x+ =@ =@ E+ E+ E+ ' ' $ $ # % % =# A@ -# A@ -# A@ -# A@ -# y@ ;# y@ ;# y@ ;# y@ y@ 3@ y+ y+ y+ W. W. W. 7 X. 8 9 8 @ . @ G@ ># ,# '# )# )# '# !# ># [@ [@ Z. 7 7 7 `. `. `. ~# `. ~# `. ~# `. ~# 6 G@ 8 @+ j {# 7 6 0 + + 4 | | 0 n 1 1 1 1 1 } 4 0 $ 1 | | ; $ ; | 0 0 0 0 0 0 0 0 0 4 | 1 1 | 4 0 l + 0 0 0 0 + l ]# ^# H@ H@ ^# /# K+ (# (# (# (# _# K+ K+ :# 6+ w x p <# <# L@ h j j h 0+ M@ M@ q r j@ E l 0 } } 0 l E + + + + + + + + + n E n + 0 + n + n E D D E n + I+ I+ I+ I+ I+ J+ J+ J+ [# [# [# [# [# [# [# [# l i i i i i i i k k k i i h h h i i k k k o o o G G c+ c+ c+ c+ c+ c+ E E D D }# C C ,+ C D E D C ,+ }# E k k o o G G M M j@ j@ j@ j@ |# |# |# j@ M M M M M M M J a r S+ 1# 1# 2# 3# 4# |# j@ K c+ M N t t t t =+ =+ =+ -+ =+ =+ u N R ;+ S ;+ ;+ ;+ N N N N N N N N T T . ` ` . T T O O O O O O O O u =+ t O T T . . G t T O u G N O d+ e+ d+ V+ W+ ~. C. ~. d+ e+ U+ V+ W+ 5# C. C. k. k. k. k. k. . . . O O T V i+ i+ ~+ ~+ O O O O O O O O .. .. .. Z Z ` ` ` /. Z O O . Z ` T t t t O T T . . O T . ` ` . T O O O O O O O O O ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z $. Z Z Z Z Z Z Z Z Z Z Z Z &. Z h+ #. W+ U+ C. B. $. W+ W+ W+ C. $. $. B. #. #. /. /. /. /. /. /. /. /. T Z +. [. [. +. Z T 6# 6# 6# 6# 6# 6# 6# 6# 7# 7# 7# 7# 7# 7# 7# E. N ` @. @. .. Z Z .. ` ` ` Z Z .. .. =. q. q. r. q. r. q. r. q. r. q. r. q. r. q. r. q. i. o. i. o. i. o. i. f. _. f. _. f. _. f. _. _. B. ^. B. B. B. B. .. .. /. /. '. ). =. &. /@ S .. @. @. @. +. +. /. /. @. @. @. .. .. .. Z Z =. =. q. =. =. =. .. .. +. +. #. #. B. %. $. ~. 5# 5# ~. %. %. ^. B. #. 8# 8# /. +. @. @. =. =. .. .. .. .. .. .. .. .. Z Z Z Z Z Z Z Z +. +. +. +. +. +. +. +. .. +. /. /. @. .. @. /. (. (. (. (. (. (. (. (. _. _. _. _. _. _. _. _. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. Z @. +. @. Z Z .. +. /. +. @. .. .. @. +. /. +. @. .. ` ` .. @. +. . ` Z .. @. +. /. /. .. .. .. .. .. .. .. .. @. @. @. @. +. +. +. +. 9# 9# 0# H. G. G. =. =. =. =. i. 0. 0. :@ q+ q+ _. .. .. .. .. .. .. .. h+ [. +. @. @. +. [. a# 4. 1. |. 1. 4. 4. (. _. _. <. 0. 0. 8. b# c# d# =. Z Z ` ` Z Z .. .. .. .. .. .. .. .. .. e# W@ 6. i. 0. i. ). '. ,. &. ). '. '. ). &. ` ~. ]. f# g# h# i# B. C. C. B. #. +. +. @. .. ` ,. =. ). '. '. ). =. ,. '. '. ). ). =. &. &. -. j# k# l# m# n# o# r+ d. p# p# o+ o+ q# q# q# S@ _. _. _. :. (. l. W@ W@ 8. 8. 8. 8. 8. 8. r# 8. 0. <. <. <. <. <. <. <. _. _. _. _. _. _. _. _. _. _. .. _. .. _. .. _. +. (. +. (. +. (. +. (. j. j. j. j. j. j. j. j. 6. 6. i. 0. 0. i. 6. 6. _. _. _. <. <. -. -. -. (. (. (. (. :. :. :. 6. 8. 8. r# 8. 8. 8. 8. 8. i. 0. <. -. -. <. <. n+ V@ V@ V@ V@ 3. 3. <. <. _. _. 6. 6. Z@ b# b# W@ l. /+ :. n+ _. s# (. 4. (. /+ :. s# _. 3. <. <. _. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. _. _. _. <. <. -. -. -. _. <. <. -. k. k. ", "%# %# &# }+ & & ! & & & }+ }+ &# &# &# ! ' ~ ' & &# & ) & & ! ! ! ) ) ) ! ! ! ! ! ! ! ! ' ' ' ' ' ' ' x+ w+ t# t# *# x+ =@ =@ =@ ' ' $ $ # # u# v# w# -# w# -# w# -# w# -# x# y# x# y# x# y# x# x# 3@ y+ y+ y+ W. W. 7 7 7 8 @+ {# '# z# '# A# B# ,# C# D# )# '# !# A# [@ [@ Z. 7 7 `. 1@ 1@ `. `. `. `. `. `. `. `. Z. 7 8 j j 8 7 Z. 4 0 0 } 1 1 4 l } | | | | } 4 4 ; | } } 1 ; 1 } 0 0 0 0 0 0 0 0 0 4 | 1 1 | 4 0 + 0 0 4 4 0 0 + a+ 6+ 3 2 3 6+ a+ K@ E# E# E# K@ a+ a+ a+ 6+ x x x F# <# L@ h h h h 0+ M@ G# r r q H# l 0 } } 0 l n + + + + + + + + } 0 l n + l E }# l n E D D E n l m m m m I+ I+ I+ I+ [# [# [# [# [# [# [# n i i i i i i i i k k k i i i h h i i k k k o o o G G G G G G G G D D E E E E E E C D n E }# C D E p p o o G G M M K K K K R+ R+ R+ K I# J# J# J# J# J# I# I# 3# K# L# M# M# L# N# 3# O# K K K M N t t t t =+ =+ -+ -+ -+ -+ G u t O T T O O t t t t t t t t O O T . . T O O O O O O O O O O O O O O O T T T u O T T t u t U+ U+ V+ V+ V+ V+ 5# 5# 5# e+ e+ V+ V+ 5# 5# ~. 2. k. l@ l@ l@ k. k. . . O O V V Y+ Y+ Z+ ~+ ,+ O O O O O O O ` ` ` . . T T T /. Z T O . Z ` T T T T . . ` ` ` T . ` Z Z ` . T ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z 8# $. U+ U+ C. B. $. W+ C. C. $. $. $. $. B. B. /. /. /. +. +. @. @. @. ` Z @. /. /. @. Z ` P# P# P# P# P# P# P# P# Q# Q# Q# Q# Q# Q# Q# E. R# ` @. +. @. Z .. @. Z Z Z Z .. .. @. ). q. r. r. r. r. r. r. r. r. r. r. r. r. r. r. 8. 8. o. o. o. o. o. o. o. o. o. o. o. o. o. o. f. B. ^. ^. ^. B. B. .. .. /. +. '. ). q. *. /@ ,. =. .. .. @. @. @. +. +. @. @. @. .. .. .. Z Z q. q. q. q. =. =. .. .. @. @. #. B. ^. ^. ^. ^. {. {. {. ]. ^. ^. ^. ^. !. #. @. @. @. .. =. =. .. .. .. .. .. .. .. .. Z Z Z Z Z Z Z Z @. @. @. @. @. @. @. @. Z @. /. +. .. Z .. +. :. :. :. :. :. :. :. :. _. _. _. _. _. _. _. _. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. Z @. +. @. Z Z .. +. +. @. .. Z Z .. @. +. +. @. .. Z Z .. @. +. ` ` Z .. @. +. +. /. .. .. .. .. .. .. .. .. @. @. @. @. @. @. .. .. S# T# T# T# G. F. =. =. =. =. i. 0. )+ )+ :@ :@ _. _. _. _. _. _. _. _. 5. l. :. _. _. :. l. U# /+ |. V@ |. /+ 4. :. <. :. :. 6. i. 7. Z@ b# W@ ). .. Z Z Z Z .. @. Z Z Z Z Z Z Z Z v+ v+ '. ). =. =. ). ). ,. &. ). '. '. ). &. ` {. V# W# X# g# f# ^. %. %. ^. #. !. +. @. .. Z &. =. ). '. '. ). =. &. ). ). ). =. =. =. =. _. Y# Z# `# `# $ $ m. r+ )+ )+ 9. 9. `@ `@ `@ *. :. s# :. :. :. (. j. j. 8. 8. 8. 8. r# r# r# 8. i. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. :. :. :. :. :. :. :. :. :. :. :. :. :. :. :. :. j. j. j. j. j. j. j. j. j. 6. i. 0. 0. 0. i. 6. _. _. _. <. <. <. -. -. :. :. :. :. :. :. :. 6. 8. r# r# r# 8. 8. 8. 8. 6. i. <. <. <. <. n+ s# |. |. |. |. n+ n+ _. _. _. _. i. 6. 7. 7. 7. j. (. s# n+ 3. 3. n+ s# /+ /+ s# s# s# n+ 3. 3. 3. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. <. <. -. -. -. _. _. _. <. <. <. ", "& & & & & & & ! & & & }+ }+ &# &# ! ) ' ) & }+ & ) & & ! ! ! ) ) ) ! ! ! ! ! ! ! ! ' ' ' ' ' ' ' x+ * .$ .$ t# w+ x+ x+ x+ ' ' $ $ $ # 2+ +$ @$ w# @$ w# @$ w# @$ w# @$ w# @$ w# @$ w# @$ @$ y+ y+ y+ y+ W. W. 7 7 `. 9 @+ #$ !# '# !# ># B# ,# C# C# '# '# !# A# [@ [@ 7 7 `. `. 1@ $$ `. `. `. `. `. `. `. `. 7 `. 8 j j 8 `. 7 | } 4 } 1 1 } 0 0 0 4 } } } 4 4 | } 0 4 | 1 } 0 0 0 0 0 0 0 0 0 0 4 | 1 1 | 4 0 0 4 4 } } 4 4 0 E# K@ a+ 6+ 6+ 6+ a+ a+ E# E# K@ K@ K@ a+ a+ a+ x x x F# <# L@ h h h h 0+ M@ G# r r q H# l 0 4 4 0 l n n n n n n n n n ; } + l l n }# V l n E E E E n l l l l l n n n n n n n n n n n n k k k k k k k k o o k k i i i h i i k k k o o o G G G G G G G G }# D E E n l + + D E l n D }# E l w w o o G G c+ c+ J J J J S+ S+ S+ J I# J# J# J# J# J# I# I# 2# 2# L# L# L# L# L# 2# R+ K K J M M t t t t =+ =+ -+ -+ -+ -+ o G u t O O t t t t t t t t t t t t O T T O t t O O O O O O O O T T T O O O O O t T ` . O t O W+ W+ 5# V+ V+ V+ V+ e+ e+ e+ e+ V+ V+ 5# 5# ~. 2. k. l@ l@ l@ k. k. . . T T V V Y+ Y+ Y+ i+ V T T T T T T T T T T O O t t t @. Z T T . ` ` . . ` ` ` Z Z Z Z . ` Z Z Z Z ` . .. .. .. .. .. .. .. .. ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z $. W+ d+ U+ C. $. $. C. B. B. $. $. $. $. C. C. +. +. @. @. .. Z Z Z .. .. .. .. .. .. .. .. P# P# P# P# P# P# P# P# %$ %$ %$ %$ %$ %$ %$ F. &$ .. +. /. @. .. @. +. .. .. .. @. @. @. +. '. *. `@ `@ `@ `@ `@ `@ `@ r. r. r. r. r. r. r. 8. 8. o. o. o. o. o. o. o. o. o. o. o. o. o. o. f. B. ^. ^. ^. B. B. .. .. +. +. ). ). q. *. /@ ,. &. Z Z Z .. .. @. @. @. @. @. .. .. .. Z Z q. q. q. q. =. =. .. .. .. .. B. B. ^. i# i# i# g# f# f# f# i# ^. ^. ^. $. $. Z .. .. .. =. =. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ` .. @. @. Z ` Z @. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. Z @. /. +. .. Z .. +. +. @. @. .. .. @. @. +. @. @. .. Z Z .. @. @. ` ` Z .. @. @. +. +. .. .. .. .. .. .. .. .. +. @. @. .. Z Z ` ` *$ *$ *$ =$ F. F. =. =. ). ). i. i. )+ )+ )+ :@ _. _. _. _. _. _. _. _. (. :. :. _. _. :. :. /+ s# V@ 2. V@ s# s# _. -. (. (. W@ W@ Z@ 7. 8. 0. '. @. .. .. .. .. @. +. Z Z Z Z Z Z Z Z ). '. '. '. '. ). =. &. ,. &. ). '. '. ). &. ` {. V# f# f# f# f# ^. %. $. B. #. #. @. @. .. Z &. =. ). ). ). ). =. &. =. =. =. =. =. ). ). :. $ `# -$ Y# #@ n. Y@ Y@ j. j. j. j. t+ t+ ;$ t+ (. /+ :. :. :. :. i. i. 8. 8. 8. 8. r# r# r# 8. 6. :. :. :. :. :. :. :. _. _. _. _. _. _. _. _. :. :. :. :. :. :. :. :. _. _. _. _. _. _. _. _. j. j. j. j. j. j. j. j. W@ j. 6. i. 0. 0. 0. i. :. :. _. _. <. <. <. -. <. <. _. _. _. _. _. i. 8. r# r# r# 8. 8. 8. 8. j. 6. _. _. _. _. s# /+ 1. 1. 1. 1. s# s# :. :. _. _. i. i. 8. 9. 9. 0. :. _. <. <. <. <. _. :. :. :. :. _. _. _. <. <. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. <. <. -. -. -. _. _. _. _. :. :. ", ") ) ! ! & & & ! ! & & & }+ }+ }+ ! ) ) ) ! ! ! ! & & ! ! ! ) ) ) ! ! ! ! ! ! ! ! ' ' ' ' ' ' ' x+ = >$ >$ .$ * w+ w+ w+ ' ' $ $ $ $ 1+ 1+ Z. @$ Z. @$ Z. @$ Z. @$ 6 ,$ 6 ,$ 6 ,$ 6 6 y+ y+ y+ y+ W. W. 7 7 8 9 #$ #$ ># ># ># ># ,# ,# ,# C# '# !# !# !# G@ G@ 7 `. `. `. $$ $$ `. `. `. `. `. `. `. `. `. `. 9 9 9 9 `. `. 1 | 4 } 1 ; | 4 l l 0 4 } } } 4 } 0 + 0 } } 4 + 0 0 0 0 0 0 0 0 0 4 | 1 1 | 4 0 4 4 } | | } 4 4 '$ '$ E# K@ a+ a+ 6+ 6+ K@ K@ K@ K@ K@ K@ a+ a+ F# F# F# F# <# <# i i i i M@ M@ G# G# G# M@ )$ + 0 4 4 0 + l n n n n n n n n 1 } + l l n }# ,+ n n n E E n n n l k n k n o E o n k n k n k n k k k k k k k k k o o o k k i i i i i k k k o o o G G G G G G G G D D E E n n n l D n + l E D E l w w o o G G c+ c+ L L L L P+ P+ P+ L I# J# J# J# J# J# I# I# !$ 1# L# ~$ ~$ L# M# !$ R+ K J J M M u u t t =+ =+ -+ -+ -+ -+ k o G u t t u u t t t t t t t t u t t O O t t u O O O O O O O O . . T T O t t u O . ` ` T O T ` W+ 5# 5# V+ e+ -+ -+ -+ e+ e+ V+ V+ 5# 5# ~. ^+ k. l@ l@ l@ k. k. . . T T V V Y+ Y+ Y+ i+ V T T T T T T T . T T T O O t t Z ` . . ` ` ` . ` ` ` ` ` ` Z Z Z Z Z Z Z Z Z Z .. .. .. .. .. .. .. .. ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z U+ U+ U+ U+ C. $. $. $. #. #. B. $. $. C. W+ W+ Z Z Z Z Z Z .. .. +. @. .. ` ` .. @. +. E. Q# Q# Q# Q# Q# Q# Q# %$ %$ %$ %$ %$ %$ %$ F. Z @. /. /. @. @. +. [. .. @. @. @. +. +. /. v+ *. `@ `@ `@ `@ `@ `@ `@ r. r. r. r. r. r. r. q. i. o. o. o. o. o. o. o. o. o. o. o. o. o. o. _. B. ^. ^. ^. B. B. .. .. +. +. ). ). q. *. *. &. ,. ` ` Z Z .. .. .. @. @. @. .. .. .. Z Z q. q. q. q. =. =. .. .. ` Z $. B. i# i# h# h# {$ {$ {$ g# i# i# ^. ^. W+ W+ ` Z Z .. =. ). .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. Z Z Z Z Z Z Z Z . Z @. .. ` . Z .. <. <. <. <. <. <. <. <. _. _. _. _. _. _. _. _. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. .. +. /. +. .. .. @. /. /. /. /. +. +. /. /. /. @. .. .. .. .. .. .. @. Z Z Z .. @. @. +. +. .. .. .. .. .. .. .. .. +. +. @. .. ` . T T ]$ ]$ ^$ *$ E. F. =. ). ). ). 6. i. o. )+ )+ )+ _. _. _. _. _. _. _. _. :. _. _. _. _. _. _. s# n+ V@ @@ 2. n+ s# <. k. _. (. W@ /$ b# Z@ 8. q+ v+ +. @. @. @. @. +. /. @. @. @. @. @. @. @. @. =. ). '. v+ '. ). &. S ,. &. ). '. '. ). &. ` ]. V# ]. f# f# ]. ^. ^. B. B. B. #. @. .. .. .. =. =. =. ). ). =. =. =. ,. &. &. =. ). ). '. (. n# `# Y# j# ^@ #@ Y@ :+ (. j. j. j. t+ t+ ;$ t+ (. /+ (. :. _. <. 0. 0. 8. 8. 8. 8. r# r# r# 8. j. (. (. (. (. (. (. (. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. <. <. <. <. <. <. <. <. j. j. j. j. j. j. j. j. W@ j. 6. i. 0. 0. 0. 0. :. :. :. _. _. <. <. <. -. -. -. <. <. <. _. i. 8. r# r# r# 8. 8. 8. 8. W@ j. :. :. :. :. /+ 4. l+ l+ l+ l+ /+ /+ (. (. :. _. i. 0. 9. (+ o+ _+ 0. <. <. <. <. <. <. <. :. :. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. <. <. -. -. -. -. -. <. <. _. :. ", "' ' ) ! & & }+ ! ! ! & & & }+ }+ ! ! ! ! ) ) ) ! & & ! ! ! ) ) ) ! ! ! ! ! ! ! ! ' ' ' ' ' ' ' x+ = >$ >$ .$ * w+ w+ w+ ) ) ; ; ; ; > > ; Z. ; Z. ; Z. ; Z. $ 6 $ 6 $ 6 $ 6 y+ y+ y+ y+ W. W. 7 7 8 8 {# {# ($ ($ ($ ># C# ,# ,# ,# !# !# !# '# G@ G@ `. `. `. 8 $$ $$ `. `. `. `. `. `. `. `. 8 8 9 9 9 9 8 8 ; | 4 } 1 ; 1 } l l 0 4 } } } 4 } 0 l + 4 } 4 + 0 0 0 0 0 0 0 0 0 4 | 1 1 | 4 0 4 4 } | | } 4 4 E# E# E# E# K@ a+ 6+ 6+ a+ a+ K@ K@ K@ K@ K@ K@ F# F# F# F# <# <# i i i i M@ M@ G# G# G# M@ H+ + 0 0 0 0 + + n n n n n n n n 4 + n n + + n D E n n n n n n E i %@ i u+ o &+ G B k u+ k u+ k u+ k k o o o o o o o o G G o o k k i i i i k k k o o o G G G G G G G G E E D D }# }# }# C D n + l E D E l v v G G o o j@ j@ L L L L P+ P+ P+ L I# J# J# J# J# J# I# I# _$ 1# L# ~$ ~$ L# M# _$ S+ J J J M M G G t t =+ =+ -+ -+ -+ -+ k o G u t t u u t t t t t t t t u t t O O t t u O O O O O O O O . . T T O t t u O . ` ` T O T ` W+ W+ U+ d+ d+ =+ P P d+ d+ U+ U+ W+ W+ C. ^+ k. l@ l@ l@ k. k. . . . . i+ i+ U U U V i+ . . . . . . . Z ` ` ` . . T T . . ` ` ` ` ` ` ` ` . . . . . . Z Z Z Z Z Z Z Z ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z d+ U+ C. C. C. $. $. B. #. #. B. $. $. C. W+ W+ T T . ` Z .. @. +. /. @. Z ` ` Z @. /. E. E. E. E. E. E. E. E. G. G. G. G. G. G. G. G. Z @. +. +. .. .. +. h+ .. @. @. @. +. +. /. v+ *. *. *. *. *. *. *. *. q. q. q. q. q. q. q. q. i. i. i. i. i. i. i. i. i. i. i. i. i. i. i. _. B. ^. ^. ^. B. B. .. .. @. @. ). =. q. q. q. &. ,. ` ` Z Z .. .. .. @. @. @. .. .. .. Z Z q. q. q. q. =. =. .. .. ` Z $. B. i# i# h# h# {$ {$ {$ g# i# i# ^. ^. W+ W+ ` Z Z .. =. ). .. .. .. .. .. .. .. .. @. @. @. @. @. @. @. @. Z Z Z Z Z Z Z Z . Z @. .. ` . Z .. <. <. <. <. <. <. <. <. _. _. _. _. _. _. _. _. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. .. +. /. /. @. .. @. /. .. .. @. @. @. @. .. .. .. .. .. @. @. .. .. .. Z .. .. .. .. @. @. @. .. .. .. .. .. .. .. .. +. +. @. .. ` . T T ]$ ]$ ^$ *$ E. F. =. ). '. '. 6. 6. o. o. )+ )+ _. _. _. _. _. _. _. _. _. _. _. :. :. _. _. n+ n+ V@ @@ 2. n+ s# <. k. -. _. j. W@ :$ b# Z@ i. v+ +. @. @. @. @. +. /. +. +. +. +. +. +. +. +. &. =. '. '. '. =. ,. S ,. &. ). '. '. ). &. ` i# ]. ]. ]. ^. ^. B. #. #. B. .. .. =. =. =. ). ). =. =. =. =. =. =. ). ,. &. &. =. ). ). '. (. <$ $ Y# j# ]@ r+ :. (. :. :. ). ). [$ [$ [$ ). (. /+ :. _. _. <. q+ q+ 8. 8. 8. 8. r# r# r# 8. j. (. (. (. (. (. (. (. _. _. _. _. _. _. _. _. -. -. -. -. -. -. -. -. <. <. <. <. <. <. <. <. j. j. j. j. j. j. j. j. W@ j. 6. i. 0. 0. 0. i. (. (. :. :. _. _. <. <. k. -. -. <. <. _. _. i. 8. r# r# r# 8. 8. 8. 8. W@ j. :. :. :. :. /+ 4. l+ l+ l+ l+ /+ /+ (. (. :. _. i. 0. 9. (+ o+ _+ 0. <. <. <. <. <. <. <. _. _. _. _. _. _. :. :. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. <. <. -. -. -. W k. k. -. <. <. ", "' ) ) ! & & & ) ) ! ! & & & }+ ) & }+ & ) ' ) ! & & ! ! ! ) ) ) ! ! ! ! ! ! ! ! ' ' ' ' ' ' ' x+ * .$ .$ t# w+ x+ x+ x+ ) ) ; ; ; 1 V. V. ; ; K. ; K. ; K. ; K. ; K. ; K. ; K. ; y+ y+ y+ y+ W. W. 7 7 8 7 [@ G@ ($ #+ ($ A# C# C# ,# B# A# !# '# '# G@ ~# `. `. 8 8 }$ }$ `. `. `. `. `. `. `. `. 9 9 9 9 9 9 9 9 ; } 0 0 } 1 | } 0 0 4 } } } 4 4 } 0 + 0 } } 4 + 0 0 0 0 0 0 0 0 0 4 | 1 1 | 4 0 0 4 4 } } 4 4 0 a+ a+ K@ K@ K@ a+ 6+ 3 a+ a+ a+ K@ K@ K@ E# E# |$ |$ |$ F# <# p k k k k q M@ G# 1$ 1$ 0+ H+ + + + + + + + n n n n n n n n l E D n + 4 0 l E E n l l n E o e 2$ 2$ %@ u+ &+ &+ B u+ u+ u+ u+ u+ u+ u+ u+ o o o o o o o o G G G o o k k k i i k k k o o o G G G G G G G G n E D D }# C ,+ ,+ D E l n D }# E l v v G G o o j@ j@ J J J J S+ S+ S+ J I# J# J# J# J# J# I# I# 1# 3$ ~$ N# N# ~$ 4$ 1# P+ L J J M c+ G G t t =+ =+ -+ -+ -+ -+ o G u t O O t t t t t t t t t t t t O T T O t t O O O O O O O O T T T O O O O O t T ` . O t O . d+ d+ d+ d+ =+ =+ =+ =+ d+ d+ U+ U+ W+ W+ C. ^+ k. l@ l@ l@ k. k. . . . . i+ i+ U U U V i+ . . . . . . . .. .. .. .. Z Z ` ` t . Z Z ` . ` Z ` ` ` . . . T T Z Z ` . . ` Z Z . . . . . . . . ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z U+ C. #. #. $. C. $. B. B. B. $. $. $. $. C. C. T T . ` .. @. +. +. +. @. Z ` ` Z @. +. F. F. F. F. F. F. F. F. G. G. G. G. G. G. G. G. Z @. @. @. Z Z +. [. .. .. .. @. @. @. +. +. q. q. q. q. q. q. q. q. q. q. q. q. q. q. q. q. i. i. i. i. i. i. i. i. i. i. i. i. i. i. i. _. B. ^. ^. ^. B. B. .. .. @. .. =. =. q. q. q. =. &. Z Z Z .. .. @. @. @. @. @. .. .. .. Z Z q. q. q. q. =. =. .. .. .. .. B. B. ^. i# i# i# g# f# f# f# i# ^. ^. ^. $. $. Z .. .. .. =. =. .. .. .. .. .. .. .. .. @. @. @. @. @. @. @. @. .. .. .. .. .. .. .. .. ` .. @. @. Z ` Z @. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. @. /. [. /. @. .. +. [. T T . ` ` . T T Z .. @. @. @. @. .. Z .. .. .. .. .. .. .. @. .. .. .. .. .. .. .. .. +. @. @. .. Z Z ` ` *$ *$ *$ =$ F. F. =. =. '. '. j. 6. t. o. o. o. _. _. _. _. _. _. _. _. _. :. :. (. (. :. :. n+ s# V@ 2. V@ s# s# _. -. <. _. 6. j. b# b# Z@ j. '. @. .. .. .. .. @. +. +. +. +. +. +. +. +. +. =. =. ). ). =. &. ,. S ,. &. ). '. '. ). &. ` i# f# ]. {. %. ^. #. #. #. #. .. Z &. =. ). ). ). ). =. &. &. =. ). ). =. =. =. =. =. ). ). :. Y@ $ -$ Y# r+ m. :. :. _. _. =. =. 5$ 5$ 5$ F. .. n+ _. _. <. <. 0. 0. 8. 8. 8. 8. r# r# r# 8. 6. :. :. :. :. :. :. :. _. _. _. _. _. _. _. _. -. -. -. -. -. -. -. -. _. _. _. _. _. _. _. _. j. j. j. j. j. j. j. j. 6. i. i. 0. 0. i. 6. 6. (. (. (. :. :. _. _. _. -. -. -. <. _. :. (. j. 8. r# r# r# 8. 8. 8. 8. j. 6. _. _. _. _. s# /+ 1. 1. 1. 1. s# s# :. :. _. _. i. i. 8. 9. 9. 9. 0. <. _. :. :. _. <. <. <. <. _. _. _. :. :. :. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. <. <. -. -. -. k. k. k. k. -. -. ", "! ! ! & & & & ) ) ) ! ! & & & ) & &# & ' ~ ' ! & & ! ! ! ) ) ) ! ! ! ! ! ! ! ! ' ' ' ' ' ' ' x+ 6$ 7$ 7$ 8$ 9$ 0$ 0$ 0$ a$ a$ K. K. H@ H@ T. T. K. K. ] K. ] K. ] K. b$ H@ b$ H@ b$ H@ b$ H@ c$ y+ y+ y+ W. W. 7 7 `. Z. + [@ ># #+ ># !# D# C# ,# B# A# !# '# )# ~# ~# `. 8 8 9 }$ }$ `. `. `. `. `. `. `. `. j j 9 9 9 9 j j 1 } + + 4 } } 4 } | | | | } 4 4 | 4 0 0 } | } 0 0 0 0 0 0 0 0 0 0 4 | 1 1 | 4 0 + 0 0 4 4 0 0 + 2 3 6+ a+ K@ a+ 6+ 3 6+ a+ a+ a+ K@ E# E# E# |$ |$ |$ F# <# p k k k k q M@ G# 1$ 1$ 0+ 9+ + + + + + + 0 + + + + + + + + l E D n + 4 0 l D E n l l n E G d d$ e$ f$ g$ h$ i@ i@ h$ h$ h$ h$ h$ h$ h$ u+ o o o o o o o o G G G G o o k k i i k k k o o o G G G G G G G G E E D D D D D D C D n E }# C D E P P G G o o q q K K K K R+ R+ R+ K I# J# J# J# J# J# I# I# 2# i$ ~$ ~$ ~$ ~$ ~$ 2# P+ L L J c+ c+ G o t t =+ =+ -+ -+ -+ -+ G u t O T T O O t t t t t t t t O O T . . T O O O O O O O O O O O O O O O T T T u O T T t u t T u t t t t O O O O O T T . . ` -. k. l@ l@ l@ k. k. . . ` ` i+ i+ U U >+ ,+ ~+ ` ` ` ` ` ` ` @. @. .. .. Z Z Z ` u T .. .. ` . ` .. .. .. Z Z ` ` . . Z ` . T T . ` Z . . . . . . . . ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z C. #. j$ j$ #. $. $. B. C. C. $. $. $. $. B. B. .. .. .. .. .. .. .. Z @. @. .. .. .. .. @. @. .. .. .. .. .. .. .. .. @. @. @. @. @. @. @. @. Z .. .. Z . ` @. [. Z Z Z Z .. .. @. @. t+ t+ t+ t+ t+ t+ t+ t+ q. q. q. q. q. q. q. q. =. =. =. =. =. =. =. =. =. =. =. =. =. =. =. .. B. ^. ^. ^. B. B. .. .. .. .. =. =. q. q. q. =. =. .. .. @. @. @. +. +. @. @. @. .. .. .. Z Z q. q. q. q. =. =. .. .. @. @. #. B. ^. ^. ^. ^. {. {. {. ]. ^. ^. ^. ^. !. #. @. @. @. .. =. =. .. .. .. .. .. .. .. .. @. @. @. @. @. @. @. @. @. @. @. @. @. @. @. @. Z @. /. +. .. Z .. +. :. :. :. :. :. :. :. :. _. _. _. _. _. _. _. _. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. @. /. [. [. +. @. +. [. T . ` Z Z ` . T Z .. @. +. +. @. .. Z .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. @. @. @. @. @. @. .. .. S# T# T# T# G. F. =. =. '. '. j. j. t. t. o. o. _. _. _. _. _. _. _. _. _. :. l. 5. 5. l. :. n+ /+ |. V@ |. /+ 4. :. <. l. l. j. 6. 8. 7. 7. 6. ). .. Z Z Z Z .. @. .. .. .. .. .. .. .. .. ). ). =. &. ,. ,. &. &. ,. &. ). '. '. ). &. ` !. i# ^. %. $. B. #. !. +. @. =. &. &. =. p. t+ '. ). =. &. &. =. ). '. ). ). ). =. =. =. =. _. r+ m. Y@ Y@ :. :. _. <. .. .. {+ {+ F. F. =$ F. ` 3. <. <. <. _. i. i. 8. 8. 8. 8. r# r# r# 8. i. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. :. :. :. :. :. :. :. :. :. :. :. :. :. :. :. :. j. j. j. j. j. j. j. j. 0. 0. 0. 0. i. 6. j. W@ (. (. (. (. :. :. _. _. -. <. <. _. :. (. l. W@ 8. r# r# r# 8. 8. 8. 8. 6. i. <. <. <. <. n+ s# |. |. |. |. n+ n+ _. _. _. _. i. 6. 7. 7. 7. Z@ 0. i. 6. j. j. 6. i. 0. 0. 0. 0. i. 6. 6. 6. j. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. <. <. -. -. -. <. <. <. <. <. -. ", "& & & & & & & ) ) ) ! ! ! & & ) }+ &# }+ ' 2 ' ! & & ! ! ! ) ) ) ! ! ! ! ! ! ! ! ' ' ' ' ' ' ' x+ 9$ 8$ 8$ k$ 0$ l$ l$ l$ a$ a$ K. K. H@ ^# T. T. ] ] ] ] ] ] ] ] m$ m$ m$ m$ m$ m$ m$ ^# c$ y+ y+ y+ W. W. 7 7 7 6 . @ ># ($ ># '# D# C# ,# n$ ># !# '# )# ~# ~# 8 8 8 9 }$ }$ `. `. `. `. `. `. `. `. j j 9 9 9 9 j j 1 4 l l 0 4 } 4 1 1 1 1 1 } 4 0 | 4 0 4 | 1 } 0 0 0 0 0 0 0 0 0 0 4 | 1 1 | 4 0 l + 0 0 0 0 + l ' ~ 3 a+ a+ a+ 6+ 3 6+ 6+ a+ a+ K@ E# E# E# #+ |$ |$ F# <# p k o o k q M@ G# 1$ 1$ ++ 9+ 0 + l l + 0 0 + + + + + + + + + n E n + 0 + n D E n + + n E G o$ p$ d$ e$ f$ g$ h$ i@ h$ h$ h$ h$ h$ h$ h$ h$ o o o o o o o o u G G G o o k k i i k k k o o o G G G G G G G G D D E E n l l + C D E D C ,+ }# E P P G G o o q q |# |# |# |# O# O# O# |# I# J# J# J# J# J# I# I# K# K# ~$ ~$ ~$ ~$ N# K# P+ L L J c+ c+ o o t t =+ =+ -+ -+ -+ -+ u t O T . T T T t t t t t t t t T T . ` ` . T T O O O O O O O O u t t O T T . . G t T O u G t O G G u t t O T T O O T T . . ` -. k. l@ l@ l@ k. k. . . ` ` i+ i+ U U >+ ,+ ~+ ` ` ` ` ` ` ` .. .. .. Z Z ` ` ` G T .. @. ` . ` .. +. +. @. .. .. Z Z ` ` . T O O T . ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z $. 8# q$ a# #. $. $. B. W+ W+ C. $. $. B. #. #. [. [. /. @. .. ` . T .. .. .. @. @. .. .. .. .. .. .. .. .. .. .. .. @. @. @. @. @. @. @. @. ` Z Z ` T . .. /. ` ` ` Z Z .. .. .. v+ r$ r$ r$ r$ r$ r$ r$ q. q. q. q. q. q. q. q. =. =. =. =. =. =. =. =. =. =. =. =. =. =. =. .. B. ^. ^. ^. B. B. .. .. .. .. =. =. q. p. p. ). =. @. @. @. +. +. /. /. @. @. @. .. .. .. Z Z q. q. q. q. =. =. .. .. +. +. #. #. ^. %. %. ~. s$ s$ t$ {. %. ^. ^. i# 8# 8# /. +. @. @. =. =. .. .. .. .. .. .. .. .. @. @. @. @. @. @. @. @. +. +. +. +. +. +. +. +. .. +. /. /. @. .. @. /. (. (. (. (. (. (. (. (. _. _. _. _. _. _. _. _. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. @. /. [. [. +. @. +. [. .. @. +. /. /. +. @. .. ` .. @. +. +. @. .. ` @. @. @. .. .. .. .. .. .. .. .. .. .. .. .. .. @. @. @. @. +. +. +. +. 0# 0# 0# S# G. G. =. =. v+ '. j. j. t. t. o. o. _. _. _. _. _. _. _. _. :. (. 5. u$ u$ 5. (. s# 4. 1. |. 1. 4. 4. (. _. v$ w$ W@ i. 9. 9. 9. i. =. Z Z ` ` Z Z .. ` ` ` ` ` ` ` ` '. ). &. S S S &. =. ,. &. ). '. '. ). &. ` !. i# ^. ~. C. B. #. !. +. @. =. ,. ,. =. p. t+ '. ). =. ,. ,. =. ). '. '. '. ). ). =. &. &. q+ -. r+ g. :+ (. :. <. -. @. @. ]+ ]+ ]+ ]+ T# ]+ W+ m+ -. <. <. _. 6. 6. 8. 8. 8. 8. r# r# r# 8. 0. <. <. <. <. <. <. <. _. _. _. _. _. _. _. _. l. l. l. l. l. l. l. l. (. (. (. (. (. (. (. (. j. j. j. j. j. j. j. j. q+ q+ q+ 0. i. j. /$ e# l. (. (. (. :. :. _. _. <. <. _. :. (. l. 5. /$ 8. r# r# r# 8. 8. 8. 8. i. 0. <. -. -. <. 3. n+ V@ V@ V@ V@ 3. 3. <. <. _. _. 6. 6. Z@ b# b# b# i. 6. j. W@ W@ j. 6. i. 0. 0. 0. i. 6. 6. j. j. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. <. <. -. -. -. (. (. :. :. _. <. ", "}+ }+ & & ! ! ) ) ) ) ! ! ! & & ! ! ! ! ! ! ! ! & & & & & & & & ! ! ! ) ' ~ ~ ~ ' ' ' ' ' ' ' x+ 6$ x$ y$ z$ A$ B$ C$ C$ D$ D$ ^ ^ ] ] U. U. ( ( / / [ [ E$ E$ E$ E$ E$ E$ E$ E$ E$ b$ B+ A+ z+ z+ W. 1@ `. 8 Z. 7 {# #$ ($ ># !# '# B# B# B# B# A# A# A# A# ~# ~# `. 7 Z. Z. Y. Y. 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 } } } } } } } } | | } } } 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + + + + + + + + + + + + + + + a+ a+ a+ a+ a+ a+ a+ a+ K@ E# '$ '$ E# K@ 6+ 2 ($ #+ F# x w w k i k i ++ 0+ r |# G# 0+ 9+ + n E E n + 0 l l l l l l l l n n n n n n n n E n n l l + + j u+ h$ h$ h$ h$ h$ h$ h$ g$ g$ h$ h$ h$ i@ i@ i@ k k k k k k k k k k k k k k k k u o k o G u G k G G G G G G G G D E n l n E }# ,+ D D D D D D D D <# <# k k o o j@ c+ L K |# K P+ P+ S+ |# F$ G$ G$ G$ J# J# H$ H$ 2# 2# L# L# L# L# L# 2# S+ J J J M M u u u u P P ~@ ~@ ~@ ~@ t t t t t t t t T T O t t u G G u t T . . T t u O O O O O O O O u t T . . T t u . . . . . . . . . . . . . . . . . . . . . . . k. X '+ '+ k@ -. -. O G ` ` ~+ ~+ Z+ Z+ Z+ ~+ {+ .. .. . O t . Z ` ` ` ` ` ` ` ` .. .. Z Z Z Z Z ` ` Z Z .. .. Z Z ` . ` Z ` O t O T I$ [. Z O O O t G . T O O O . ` .. Z Z Z Z Z Z Z Z T . ` Z Z ` . T Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z . . . . . . . . . . ` Z Z .. @. @. Z .. @. Z T T Z /. C. C. C. C. C. C. C. C. #. #. #. #. #. #. #. #. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. [. @. ` . Z @. @. @. ` ` ` Z Z .. .. .. O Z /. +. Z ` @. h+ +. +. @. @. .. Z Z ` S &. ). ). =. &. ). v+ =. =. =. =. =. =. =. =. &. &. =. =. =. ). ). ). =. &. S ,. =. ). &. . d+ 5# %. ^. #. #. .. Z .. .. =. =. q. q. q. =. '. @. .. ` ` .. @. +. .. @. /. [. h+ [. /. +. q. q. q. q. =. =. .. .. @. +. j$ a# J$ K$ h# i# {. {. {. {. %. %. %. %. #. !. +. +. +. +. ). ). .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. @. @. +. +. /. [. [. h+ (. (. (. (. (. (. (. (. l. l. l. (. :. _. _. _. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. .. @. +. /. /. +. @. .. +. @. .. ` ` .. @. +. T@ [. +. @. +. @. Z . +. +. @. @. .. Z Z ` .. +. /. +. @. .. @. /. Z Z Z Z Z Z Z Z T# T# T# =$ F. F. &. &. '. '. j. j. $@ $@ $@ $@ _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. n+ U# l+ 1. l+ U# L$ l. :. _. _. i. i. 8. 8. 8. i. ). .. .. Z Z ` ` . .. .. .. .. .. .. .. .. '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. +. !. h# !. !. !. !. +. +. v+ ). &. =. p. p. *. S@ &. &. &. &. &. &. &. &. ,. &. &. =. ). ). '. j. 6. a. e# 5. (. :. +. [. ~+ h. {+ ]+ +@ M$ .@ m@ $. 3. <. _. :. :. j. j. Z@ Z@ Z@ Z@ N$ N$ N$ Z@ W@ l. (. (. :. :. _. _. <. <. <. <. <. <. <. <. <. <. <. <. <. <. <. <. <. <. <. <. <. <. <. <. j. j. j. j. j. j. j. j. j. j. 6. 6. i. 0. 0. q+ _. _. _. _. _. _. _. _. (. (. :. :. _. <. <. q+ 7. O$ O$ O$ 7. 7. 7. 7. /$ W@ (. :. :. (. 4. U# V@ V@ V@ V@ 3. 3. <. <. (. :. 0. q+ (+ 9. 7. Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ 9. 9. 9. 9. 9. 9. 9. 0. -. _. :. (. (. :. _. -. <. <. <. <. <. <. <. <. _. _. _. _. _. _. _. _. _. _. _. _. _. _. ", "}+ }+ & ! ! ! ) ) ) ) ! ! ! & & ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ) ) ) ) ' ' ' ' ' ' ' ' ' ' ' 9$ P$ x$ x$ y$ B$ C$ C$ P$ D$ D$ ^ ^ ] ] U. U. ( ( / / [ [ E$ E$ E$ E$ E$ E$ E$ E$ E$ b$ , z+ z+ z+ X. W. 7 7 Z. 7 {# #$ ($ ># !# '# B# B# B# B# A# A# A# A# {# {# `. `. 7 7 X. X. 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 } } } } } } } } | | } } } 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + + + + + + + + + + + + + + + a+ a+ a+ a+ a+ a+ a+ a+ 3 6+ a+ K@ a+ 6+ 3 2 ($ #+ F# x w p k i k i ++ 0+ r |# G# 0+ H+ l n E E n l + l l l l l l l l n n n n n n n n E E E n l l l h u+ h$ h$ h$ h$ h$ h$ h$ g$ g$ h$ h$ h$ i@ i@ &+ k k k k k k k k k k k k k k k k u o k o G u G k G G G G G G G G D E n n n D }# C D D D D D D D D w w o G G G M M L K |# K P+ P+ S+ |# Q$ G$ J# J# J# R$ H$ H$ 2# 2# L# L# L# L# L# 2# S+ J J J M M u u u u P P ~@ ~@ ~@ ~@ t t t t t t t t O O t t t t u u u t T . . T t u O O O O O O O O O O T T T T O O . . . . . . . . . . . . . . . . . . . . . . . k. X '+ '+ k@ -. -. O G . . i+ i+ Y+ Y+ Y+ i+ h. .. .. . O O . Z ` ` ` ` ` ` ` ` ` ` ` ` ` Z Z Z ` ` Z Z Z Z ` ` T ` Z ` T O T . h+ @. . O T . . T ` ` . T . ` .. @. Z Z Z Z Z Z Z Z . ` Z .. .. Z ` . Z Z Z Z Z Z Z Z .. .. .. .. .. .. .. .. ` ` ` ` ` ` ` ` ` ` Z Z Z Z .. .. Z .. @. Z T T Z +. $. $. $. $. $. $. $. $. #. #. #. #. #. #. #. #. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. /. @. ` ` .. @. @. .. Z Z Z Z .. .. @. @. @. .. .. .. @. @. .. Z @. @. @. .. .. .. .. .. S &. ). ). =. &. ). v+ =. =. =. =. =. =. =. =. &. &. =. =. =. ). ). ). ). &. ,. &. ). ). =. ` W+ ~. ^. i# #. #. .. Z .. .. =. =. q. q. q. =. '. @. .. Z Z .. @. +. ` .. @. /. /. /. +. @. q. q. q. q. =. =. .. .. .. @. 8# j$ K$ S$ i# ^. ]. ]. ]. ]. ^. ^. ^. ^. #. #. @. @. @. +. v+ v+ .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. @. @. @. +. +. /. /. /. (. (. (. (. (. (. (. (. (. (. (. (. :. :. :. :. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. .. @. +. /. /. +. @. .. +. @. .. Z Z .. @. +. /. @. Z .. +. +. @. Z @. @. @. .. .. .. .. .. .. +. /. +. @. .. @. /. .. .. .. .. .. .. .. .. T# T# T# =$ F. F. &. &. '. '. j. j. $@ $@ $@ $@ _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. n+ 4. 1. |. 1. 4. U# (. _. _. _. i. i. 8. 8. 8. i. ). @. @. .. Z Z Z ` .. .. .. .. .. .. .. .. '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. +. #. i# #. #. #. #. @. @. v+ ). &. =. p. p. *. S@ &. &. &. &. &. &. &. &. =. =. =. =. =. ). ). ). i. $@ /$ W@ 6. _. @. /. ~+ ~+ h. {@ M$ M$ T$ {@ $. 3. <. _. :. :. 6. j. Z@ Z@ Z@ Z@ N$ N$ N$ Z@ W@ l. (. (. :. :. _. _. :. :. :. :. :. :. :. :. <. <. <. <. <. <. <. <. _. _. _. _. _. _. _. _. j. j. j. j. j. j. j. j. j. j. j. j. j. j. j. j. _. _. _. _. _. _. _. _. :. :. (. (. (. (. (. j. 8. r# r# r# 8. 8. 8. 8. W@ j. :. _. _. :. /+ 4. V@ V@ V@ |. n+ n+ _. _. (. :. 0. q+ (+ 9. 7. Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ 8. 8. 8. 8. 8. 8. 8. i. 0. _. :. (. (. :. _. <. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. ", "& & & ! ! ! ) ) ) ) ! ! ! & & ! ! ! ! ! ! ! ! ) ) ) ) ) ) ) ) ' ' ' ' ) ) ) ) ' ' ' ' ' ' ' 9$ U$ V$ V$ W$ X$ Y$ Y$ Z$ `$ `$ / / [ [ % % _ _ ^ ^ ] ] b$ b$ b$ b$ b$ b$ b$ b$ b$ H@ , z+ z+ z+ Y. Y. 6 6 7 `. ~# {# ># A# A# !# B# B# B# B# A# A# A# A# {# {# 8 8 `. `. 1@ 1@ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 } } } } } } } } | | } } } 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + + + + + + + + + + + + + + + a+ a+ a+ a+ a+ a+ a+ a+ 3 6+ a+ K@ K@ K@ a+ a+ #+ |$ F# x p p i i k i ++ 0+ r |# G# 0+ )$ l n E E n l l l l l l l l l l n n n n n n n n D D E E E n n k u+ u+ u+ u+ u+ u+ u+ u+ %@ %@ u+ u+ u+ &+ &+ &+ k k k k k k k k k k k k k k k k u o k o G u G k G G G G G G G G E E n n E D }# C D D D D D D D D v v G u u t N N L K |# K P+ P+ S+ |# I# J# J# R$ R$ R# .% .% 2# 2# L# L# L# L# L# 2# Q+ I I I R R O O O O d+ d+ e+ e+ e+ e+ t t t t t t t t u u t t t t O O u t T . . T t u O O O O O O O O . T O O O O T . . . . . . . . . S S S S S S S S S S S S S S S _+ W Y Y k@ -. -. T u . . i+ i+ Y+ Y+ Y+ i+ ~+ Z .. ` T O . Z ` ` ` ` ` ` ` ` O T T . ` ` Z Z . . . . . . . . O . ` ` T T . Z .. . O O . Z .. Z Z Z ` ` ` Z @. @. ` ` ` ` ` ` ` ` Z Z .. @. @. .. Z Z Z Z Z Z Z Z Z Z .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. Z Z Z Z ` ` Z .. .. Z . . Z @. B. B. B. B. B. B. B. B. #. #. #. #. #. #. #. #. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 4. n+ ^+ ^+ n+ /+ s# n+ n+ n+ n+ s# s# s# /+ /+ T@ @. ` ` +. /. Z t .. .. .. .. .. @. @. @. ` .. @. @. Z Z @. /. .. .. .. .. .. .. .. .. E. E. F. F. F. G. G. G. H. F. E. F. H. 9# G. h. B. i# h# h# !. #. .. Z .. .. =. =. q. q. q. =. ). @. .. Z Z .. @. @. ` Z .. @. @. @. @. .. *. *. *. *. &. &. Z Z .. @. #. !. h# i# i# ^. f# f# f# f# i# i# i# i# !. #. .. Z .. +. +% @% .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. .. .. .. @. @. +. +. +. (. (. (. (. (. (. (. (. :. :. :. :. (. (. (. (. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. .. @. +. /. /. +. @. .. @. @. .. Z Z .. @. @. .. ` . Z @. +. @. Z .. .. .. .. .. @. @. @. .. +. /. +. @. .. @. /. @. @. @. @. @. @. @. @. T# T# T# =$ F. F. &. &. '. '. j. j. $@ $@ $@ $@ :. :. :. :. :. :. :. :. :. :. :. :. :. :. :. s# /+ |. V@ V@ s# /+ :. <. _. _. i. i. 8. 8. 8. i. '. +. @. @. @. .. .. .. .. .. .. .. .. .. .. .. '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. +. B. B. B. B. .. .. =. =. v+ ). *. *. <+ <+ r. /@ =. =. =. =. =. =. =. =. ). ). ). =. =. =. =. =. 9. 7. Z@ 6. &. &. {+ j+ i+ ~+ #% T$ $% %% %% &% $. 3. _. _. _. :. 6. 6. Z@ Z@ Z@ Z@ N$ N$ N$ Z@ W@ l. (. (. :. :. _. _. (. (. (. (. (. (. (. (. _. _. _. _. _. _. _. _. :. :. :. :. :. :. :. :. j. j. j. j. j. j. j. j. j. j. j. W@ W@ W@ W@ /$ _. _. _. _. _. _. _. _. _. :. (. (. l. 5. u$ e# 9. *% *% *% 9. 9. 9. 9. 6. 6. _. <. <. _. s# s# V@ V@ |. |. s# /+ (. (. (. :. 0. q+ (+ 9. 7. Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ 7. 7. 7. 7. 7. 7. 7. 6. 0. _. :. :. :. :. _. <. :. :. :. :. :. :. :. :. _. _. _. _. _. _. _. _. _. _. _. _. _. _. ", "! ! ! ! ! ! ! ) ) ) ! ! ! & & ! ! ! ! ! ! ! ! ' ' ' ' ' ' ' ' ~ ~ ~ ' ) ! ! ! ' ' ' ' ' ' ' 9$ =% -% V$ V$ Y$ Y$ Z$ ;% `$ `$ / / [ [ % % _ _ ^ ^ ] ] b$ b$ b$ b$ b$ b$ b$ b$ b$ H@ c$ y+ z+ z+ Y. +$ 5 =# `. `. ~# ~# A# A# A# A# B# B# B# B# A# A# A# A# #$ #$ 9 8 8 8 $$ $$ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 } } } } } } } } | | } } } 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + + + + + + + + + + + + + + + K@ K@ K@ K@ K@ K@ K@ K@ K@ E# '$ '$ >% ,% ,% ,% |$ F# F# F# <# <# i i k i ++ 0+ r |# G# 0+ H+ + l l l l + + l l l l l l l l l l l l l l l l D D D D E E E E k u+ k u+ k u+ k u+ i %@ k u+ k &+ o o k k k k k k k k k k k k k k k k u o k o G u G k G G G G G G G G E E E E E D }# }# D D D D D D D D w w G G u u M M L K |# K P+ P+ S+ |# I# J# R$ R$ R# R# .% '% 2# 2# L# L# L# L# L# 2# Q+ I I I R R O O O O d+ d+ e+ e+ e+ e+ t t t t t t t t G G u t t O T T u t T . . T t u O O O O O O O O ` . O t t O . ` . . . . . . . . S S S S S S S S S S S S S S S _+ k. k@ Y k@ -. -. T t T T V V U U U V i+ Z .. ` T T . Z ` ` ` ` ` ` ` ` u t O T . ` Z Z . . T T T T . . t T ` ` . . Z @. Z . O O ` .. .. Z ` ` ` ` ` Z .. .. ` ` ` ` ` ` ` ` .. .. .. @. @. .. .. .. Z Z Z Z Z Z Z Z ` ` ` ` ` ` ` ` .. .. .. .. .. .. .. .. @. @. .. Z Z ` . . Z Z Z Z ` ` Z .. #. #. #. #. #. #. #. #. #. #. #. #. #. #. #. #. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. /+ n+ ^+ 3. s# /+ s# 3. n+ s# s# s# /+ /+ 4. 4. [. @. Z Z @. +. .. . ` Z Z .. @. @. +. +. ` .. +. @. Z Z .. +. .. .. .. .. .. .. .. .. E. E. F. F. F. G. G. G. 9# G. F. G. 9# 9# H. {+ 8# S$ S$ h# !. #. .. Z .. .. =. =. q. q. q. =. ). .. .. .. .. .. .. @. Z .. .. @. @. +. +. +. *. *. *. *. &. &. Z Z .. .. B. #. i# ^. ^. ^. {$ {$ {$ {$ S$ S$ S$ S$ j$ 8# @. Z Z .. '. +% .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. .. .. .. .. .. .. .. @. (. (. (. (. (. (. (. (. _. _. _. :. (. l. l. l. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. @. @. +. +. +. +. @. @. @. .. .. .. .. .. .. @. .. ` . ` .. @. Z ` ` Z Z .. @. @. +. +. .. +. /. +. @. .. @. /. +. +. +. +. +. +. +. +. T# T# T# =$ F. F. &. &. '. '. j. j. $@ $@ $@ $@ :. :. :. :. :. :. :. :. :. :. :. :. :. :. :. s# s# V@ @@ 2. n+ s# _. -. _. _. i. i. 8. 8. 8. i. '. +. +. +. @. @. @. @. .. .. .. .. .. .. .. .. '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. Z $. $. $. Z Z &. &. '. =. *. *. <+ ;$ r. )% q. =. =. =. =. =. =. =. '. '. ). ). =. &. &. ,. (+ 8. 7. 8. ,. S h. ]+ V i+ !% #% %% %% ~% &% B. n+ _. _. _. _. 6. 6. Z@ Z@ Z@ Z@ N$ N$ N$ Z@ W@ l. (. (. :. :. _. _. :. :. :. :. :. :. :. :. _. _. _. _. _. _. _. _. (. (. (. (. (. (. (. (. j. j. j. j. j. j. j. j. W@ W@ W@ j. j. j. j. j. _. _. _. _. _. _. _. _. :. :. (. (. l. l. l. /$ 9. *% *% *% 9. 9. 9. 9. 6. 6. :. _. _. :. s# s# V@ |. |. 1. /+ 4. l. 5. (. :. 0. q+ (+ 9. 7. Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ i. _. _. :. :. _. _. _. (. (. (. (. (. (. (. (. _. _. _. _. _. _. _. _. _. _. _. _. _. _. ", ") ) ) ! ! ! ! ) ) ) ! ! ! & & ! ! ! ! ! ! ! ! ' ' ' ' ' ' ' ' ~ ~ ~ ' ) ! ! ! ' ' ' ' ' ' ' 9$ =% -% V$ V$ Y$ Y$ Z$ ;% `$ `$ / / [ [ % % _ {% ]% ]% K. K. H@ H@ H@ H@ H@ H@ H@ H@ H@ H@ C+ y+ y+ z+ Y. Y. 5 5 `. `. ~# ~# A# A# A# A# B# B# B# B# A# A# A# A# {# {# 8 8 8 9 }$ }$ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 } } } } } } } } | | } } } 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + + + + + + + + + + + + + + + K@ K@ K@ K@ K@ K@ K@ K@ E# E# E# '$ '$ >% ,% ^% x F# F# F# <# <# i i k i ++ 0+ r |# G# 0+ 9+ 0 0 0 0 0 0 0 l l l l l l l l l l l l l l l l E E E E D D D D n k n k n k n k l i n k n o E o k k k k k k k k k k k k k k k k u o k o G u G k G G G G G G G G n n E D D D D D D D D D D D D D p p k k o o c+ c+ L K |# K P+ P+ S+ |# I# J# J# R$ R$ R# .% .% 2# 2# L# L# L# L# L# 2# Q+ I I I R R O O O O d+ d+ e+ e+ e+ e+ t t t t t t t t G G u t t O T T u t T . . T t u O O O O O O O O Z ` T O O T ` Z . . . . . . . . S S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ _+ <. l@ Y Y k. -. . T . . i+ i+ Y+ Y+ Y+ i+ V ` Z Z . T ` Z ` ` ` ` ` ` ` ` u t O T . ` Z Z ` . T O O T . ` O . Z Z . . Z @. .. ` T T ` Z ` T O T T . ` ` ` ` ` ` ` ` ` ` ` ` @. .. .. .. .. .. .. @. Z Z Z Z Z Z Z Z . . . . . . . . ` ` ` ` ` ` ` ` @. @. .. Z Z ` . . Z Z Z Z .. .. Z ` !. !. !. !. !. !. !. !. B. B. B. B. B. B. B. B. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. s# /% (% /% _% _% /% :% /% <% <% <% _% _% [% 4. . .. +. @. Z Z @. [. ` Z Z .. @. @. +. +. Z @. +. @. Z ` .. @. .. .. .. .. .. .. .. .. E. *$ =$ =$ =$ T# T# T# 0# T# =$ T# 0# 0# S# {+ j$ S$ h# h# #. B. .. .. .. .. =. =. q. q. q. =. =. .. .. @. @. .. .. .. @. @. @. +. +. /. /. [. *. *. *. *. &. &. Z Z @. .. B. B. ^. ^. ^. i# {$ {$ {$ {$ S$ S$ S$ S$ q$ a# /. .. Z Z =. =. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. @. .. .. .. .. .. .. .. (. (. (. (. (. (. (. (. _. _. _. :. (. l. l. l. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. @. @. @. @. +. +. .. .. .. @. @. .. .. .. /. @. Z ` Z Z . O ` Z Z .. @. @. +. +. .. +. /. +. @. .. @. /. +. +. +. +. +. +. +. +. T# T# T# =$ F. F. &. &. '. '. j. j. $@ $@ $@ $@ (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. /+ n+ 2. @@ 2. n+ n+ <. k. _. _. i. i. 8. 8. 8. i. ). @. @. @. +. +. +. +. .. .. .. .. .. .. .. .. '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. Z Z Z Z &. &. &. &. p. q. )% `@ <+ ;$ }% `@ p. ). ). ). ). ). ). ). '. '. ). ). =. &. &. ,. S@ `@ q. q. D. &$ D. {+ Y+ !% |% $% %% %% 1% ~% #. s# _. _. _. _. i. i. Z@ Z@ Z@ Z@ N$ N$ N$ Z@ W@ l. (. (. :. :. _. _. <. <. <. <. <. <. <. <. :. :. :. :. :. :. :. :. (. (. (. (. (. (. (. (. j. j. j. j. j. j. j. j. /$ W@ j. 6. i. 0. q+ q+ _. _. _. _. _. _. _. _. (. (. :. :. _. _. _. 0. 7. O$ O$ O$ 7. 7. 7. 7. j. j. (. l. l. (. /+ /+ |. |. 1. 1. /+ /+ l. l. (. :. 0. q+ (+ 9. 7. Z@ N$ N$ N$ N$ N$ N$ N$ N$ N$ N$ N$ N$ N$ N$ N$ Z@ 6. _. _. _. _. _. _. :. (. (. (. (. (. (. (. (. _. _. _. _. _. _. _. _. _. _. _. _. _. _. ", "' ) ) ) ! ! ! ) ) ) ! ! ! & & ! ! ! ! ! ! ! ! ) ) ) ) ) ) ) ) ' ' ' ' ) ) ) ) ' ' ' ' ' ' ' 9$ U$ V$ V$ W$ X$ Y$ Y$ Z$ `$ `$ / / [ [ % U. {% {% ]% ]% K. K. H@ H@ H@ H@ H@ H@ H@ H@ H@ 1 *@ *@ y+ y+ W. X. Z. Z. 8 `. ~# G@ !# A# A# ># B# B# B# B# A# A# A# A# ~# ~# `. `. 8 8 $$ $$ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 } } } } } } } } | | } } } 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + + + + + + + + + + + + + + + K@ K@ K@ K@ K@ K@ K@ K@ a+ a+ 6+ 6+ 6+ a+ K@ E# y x F# |$ L@ L@ i i k i ++ 0+ r |# G# 0+ H+ 0 0 4 4 0 0 + l l l l l l l l + + + + + + + + n n n E E E D D n n n n n n n n l l n n n E E E k k k k k k k k k k k k k k k k u o k o G u G k G G G G G G G G l n E D }# }# D D D D D D D D D D <# <# i k k o j@ j@ L K |# K P+ P+ S+ |# F$ G$ G$ G$ J# J# H$ H$ 2# 2# L# L# L# L# L# 2# Q+ I I I R R O O O O d+ d+ e+ e+ e+ e+ t t t t t t t t u u t t t t O O u t T . . T t u O O O O O O O O ` ` . T T . ` ` . . . . . . . . S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ _+ i. l@ Y Y k. -. ` . ` ` ~+ ~+ Z+ Z+ Z+ ~+ C . Z .. ` . ` Z ` ` ` ` ` ` ` ` O T T . ` ` Z Z Z ` T O O T ` Z T ` .. Z ` . Z @. @. Z . . ` ` T t t O T . ` . . . . . . . . . . . @. .. Z Z Z Z .. @. Z Z Z Z Z Z Z Z . . . . . . . . ` ` ` ` ` ` ` ` .. .. Z Z Z Z ` ` Z ` ` Z @. @. Z . #. #. #. #. #. #. #. #. B. B. B. B. B. B. B. B. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. n+ s# (% (% /% _% _% /% :% /% /% /% <% <% <% _% _% t Z /. +. ` ` @. T@ .. .. .. .. .. @. @. @. .. @. /. @. Z ` Z @. .. .. .. .. .. .. .. .. *$ *$ =$ =$ =$ T# T# T# S# =$ *$ =$ S# 0# T# h. 2% h# i# ^. B. B. @. @. .. .. =. =. q. q. q. =. &. .. @. @. @. @. .. Z /. +. +. +. +. /. [. h+ q. q. q. q. =. =. .. .. +. @. #. B. ^. i# i# h# {$ {$ {$ {$ S$ S$ S$ S$ a# j$ /. +. @. .. &. ,. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. @. @. .. .. .. (. (. (. (. (. (. (. (. :. :. :. :. (. (. (. (. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. /. +. @. .. .. @. +. /. Z .. @. @. @. @. .. Z h+ +. .. Z .. Z . O .. .. .. .. .. @. @. @. .. +. /. +. @. .. @. /. @. @. @. @. @. @. @. @. T# T# T# =$ F. F. &. &. '. '. j. j. $@ $@ $@ $@ (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. /+ s# V@ @@ 2. n+ s# <. -. _. _. i. i. 8. 8. 8. i. =. .. .. @. @. @. +. +. .. .. .. .. .. .. .. .. '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. .. .. .. .. =. =. =. =. p. *. )% `@ <+ 3% }% r. p. ). ). ). ). ). ). ). ). ). ). =. =. =. =. =. )% `@ p. q. 6# &$ E. ]+ Z+ #% $% 4% 5% 4% 6% 7% #. s# :. _. _. _. 0. 0. Z@ Z@ Z@ Z@ N$ N$ N$ Z@ W@ l. (. (. :. :. _. _. <. <. <. <. <. <. <. <. :. :. :. :. :. :. :. :. :. :. :. :. :. :. :. :. j. j. j. j. j. j. j. j. j. j. 6. 6. i. 0. q+ q+ _. _. _. _. _. _. _. _. l. (. :. :. _. <. -. q+ Z@ N$ N$ N$ Z@ Z@ Z@ Z@ j. j. l. 5. 5. l. /+ /+ 1. 1. 1. 1. s# s# :. :. (. :. 0. q+ (+ 9. 7. Z@ N$ N$ N$ N$ N$ N$ N$ N$ O$ O$ O$ O$ O$ O$ O$ 7. 6. :. _. <. <. _. :. :. :. :. :. :. :. :. :. :. _. _. _. _. _. _. _. _. _. _. _. _. _. _. ", "' ' ' ) ! ! ! ) ) ) ! ! ! & & ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ) ) ) ) ' ' ' ' ' ' ' ' ' ' ' 9$ P$ W$ W$ 8% 9% X$ X$ Y$ `$ `$ / / [ [ % U. {% # $ $ ; ; 1 1 1 1 1 1 1 1 1 1 *@ *@ *@ *@ 1@ $$ 8 8 9 8 G@ [@ '# !# ># ($ B# B# B# B# A# A# A# A# [@ [@ 7 7 `. `. $$ $$ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 } } } } } } } } | | } } } 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + + + + + + + + + + + + + + + E# E# E# E# E# E# E# E# K@ a+ 6+ 2 2 3 6+ a+ Q y F# |$ @+ L@ h i k i ++ 0+ r |# G# 0+ 0% n l + + l n E l l l l l l l l + + + + + + + + + l l l n E E E [# [# [# [# [# [# [# [# m m [# [# [# a% a% E k k k k k k k k k k k k k k k k u o k o G u G k G G G G G G G G l n E }# }# }# D E D D D D D D D D p p o o o G c+ c+ L K |# K P+ P+ S+ |# b% H# H# 0% 0% G$ Q$ Q$ 2# 2# L# L# L# L# L# 2# S+ J J J M M u u u u P P ~@ ~@ ~@ ~@ t t t t t t t t O O t t t t u u u t T . . T t u O O O O O O O O . . ` ` ` ` . . . . . . . . . . S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ _+ 6. d. Y Y k. <. Z ` Z Z h. h. `+ `+ `+ h. }# T Z .. Z . ` Z ` ` ` ` ` ` ` ` ` ` ` ` ` Z Z Z @. Z . T T . Z @. ` .. @. .. ` . ` .. .. ` . ` Z Z . O O T . Z Z Z ` . . . . . . . . . .. Z ` . . ` Z .. Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z .. .. .. .. .. .. .. .. ` ` Z Z Z Z .. .. Z ` . Z +. +. Z T #. #. #. #. #. #. #. #. $. $. $. $. $. $. $. $. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. n+ n+ (% (% <% [% [% /% c% (% (% (% (% /% /% <% <% Z .. @. @. .. .. .. @. @. @. @. .. .. .. .. .. B. !. 8# !. $. C. $. B. B. B. B. B. B. B. B. .. *$ *$ =$ =$ =$ T# T# T# T# *$ ^$ *$ T# T# =$ ~+ m@ ^. %. ~. C. $. @. +. .. .. =. =. q. q. q. =. &. .. @. +. +. @. .. Z +. @. .. .. .. +. /. h+ t+ t+ t+ t+ '. '. +. +. [. /. #. B. ^. i# S$ K$ g# g# g# g# h# h# h# h# $. B. +. [. [. /. ). &. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. /. /. /. +. +. @. @. @. (. (. (. (. (. (. (. (. (. (. (. (. :. :. :. :. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. /. +. @. .. .. @. +. /. Z .. @. +. +. @. .. Z [. +. .. .. @. +. .. ` @. @. @. .. .. .. .. .. .. +. /. +. @. .. @. /. .. .. .. .. .. .. .. .. T# T# T# =$ F. F. &. &. '. '. j. j. $@ $@ $@ $@ l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. 4. s# V@ 2. V@ s# s# _. -. _. _. i. i. 8. 8. 8. i. ,. Z Z Z .. @. @. @. .. .. .. .. .. .. .. .. '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. @. @. @. @. ). ). p. p. q. *. )% `@ d% e% d% r. p. ). ). ). ). ). ). ). =. =. =. =. =. ). ). ). )% r. <+ p. 7# 6# *$ .@ @ T$ 5% f% g% h% i% j% !. s# :. :. _. <. 0. 0. Z@ Z@ Z@ Z@ N$ N$ N$ Z@ W@ l. (. (. :. :. _. _. _. _. _. _. _. _. _. _. :. :. :. :. :. :. :. :. _. _. _. _. _. _. _. _. j. j. j. j. j. j. j. j. i. i. i. 6. j. j. W@ W@ _. _. _. _. _. _. _. _. (. (. :. :. :. :. :. 6. 7. O$ O$ O$ 7. 7. 7. 7. i. 6. (. l. l. (. s# n+ l+ l+ 1. |. 3. ^+ -. -. (. :. 0. q+ (+ 9. 7. Z@ N$ N$ N$ N$ N$ N$ N$ N$ r# r# r# r# r# r# r# 8. j. :. _. <. <. _. :. (. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. ", "=@ ' ' ) ) ! ! ) ) ) ! ! ! & & ! ! ! ! ! ! ! ! & & & & & & & & # # # $ ; 1 1 1 ; ; ; ; ; ; ; k% x$ l% m% n% o% 8% W$ W$ 9% 9% p% p% q% q% E$ b$ {% # $ $ ; ; 1 1 1 1 1 1 1 1 1 1 y+ *@ *@ 8+ }$ }$ j j 9 8 G@ [@ '# !# ># ($ B# B# B# B# A# A# A# A# )# @ [@ [@ G@ ~# `. `. 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 } } } } } } } } | | } } } 4 4 4 a+ a+ a+ a+ a+ a+ a+ a+ 0 0 0 0 0 0 0 0 + + + + + + + + + + + + + + + + E# E# E# E# E# E# E# E# >% '$ K@ 6+ 6+ 6+ a+ K@ Q y F# |$ @+ @+ h i k i ++ 0+ r |# G# 1$ J# D E n n E D }# l l l l l l l l + + + + + + + + 0 + + l l n n E n n [# n [# n [# n m l [# n [# E a% E k u+ k u+ k u+ k u+ k u+ k u+ k u+ k k u o k o G u G k G G G G G G G G + n D }# C }# D E D D D D D D D D w v G G u u N N N c+ |# K L L J |# )$ l n n n E 0% 0% I# I# 2# 2# 2# 2# 2# 2# J Q@ M M M u u u u u u P P P ^% P t t t t t t t t T T O t t u G G M N ;+ S S ;+ N M R R R R R R R O T W+ Z .. .. Z . T . . . . . . S S S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S 6. d. X X k. <. Z ` .. .. {+ {+ {+ {+ @ {+ u T Z .. Z ` ` Z ` ` ` ` ` ` ` ` .. .. Z Z Z Z Z ` +. .. ` T T ` .. +. Z #. +. .. ` T . Z ` T T . .. .. ,. T T k. Z _. @. _. Z -. . k. . k. . k. . . Z C. . U+ T W+ ` $. Z $. Z $. Z $. Z Z @. @. @. @. @. @. @. @. @. @. @. @. @. @. @. @. . . ` Z Z .. @. @. Z ` . Z +. +. Z O .. B. .. B. .. B. .. B. Z $. Z $. Z $. Z Z .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. B. |. (% V@ <% r% [% |. c% 2. :% 2. (% V@ /% |. |. h+ @. ` Z +. /. Z O +. +. @. @. .. Z Z ` B. !. 8# !. $. C. C. B. B. B. B. B. B. B. B. .. h. *$ =$ =$ =$ T# T# T# =$ *$ ]$ ^$ =$ T# *$ i+ $. ~. 5# 5# C. $. @. /. .. .. =. =. q. q. q. =. ,. .. @. +. +. @. .. ` @. .. Z ` Z .. +. /. v+ v+ r$ v+ v+ v+ /. /. h+ [. !. #. #. h# j$ J$ i# i# i# i# i# #. #. #. t . @. @% s% @% v+ ). .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. h+ [. [. /. +. +. @. @. (. (. (. (. (. (. (. (. l. l. l. (. :. _. _. _. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. /. +. @. .. .. @. +. /. ` .. @. +. +. @. .. ` +. #. Z .. /. [. /. @. +. +. @. @. .. Z &. ` .. +. /. +. @. .. @. /. Z Z Z Z Z Z Z Z G. G. G. F. F. =. &. &. '. '. j. j. $@ $@ $@ $@ l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. /+ |. 3. 3. s# /+ :. <. _. _. i. i. i. i. 8. i. k. -. -. <. <. _. .. @. .. .. .. .. .. .. .. .. '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. +. +. +. +. +. '. '. t+ t+ q. /@ )% `@ d% e% d% r. p. ). ). ). ). ). ). ). ,. &. &. =. ). ). '. '. *. <+ ;$ p. *. E. F. j+ ]+ m@ t% u% v% w% x% y% h# /+ s# s# n+ <. <. 0. j. Z@ Z@ Z@ N$ z% N$ Z@ W@ /. '. +. ). @. =. .. ). @. ). :. 6. :. 6. :. :. s# :. s# :. s# :. s# <. 3. <. 3. <. 3. <. <. (. (. (. (. (. (. (. (. k. -. _. (. 5. w$ v$ A% _. _. _. _. _. _. _. _. :. :. (. (. l. 5. 5. u$ 9. 9. 9. 9. 9. 0. 9. 0. 0. i. :. (. (. :. n+ 3. /+ l+ s# n+ ^+ m+ W X (. :. 0. q+ q+ 0. 7. Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ 9. 9. 9. 9. 9. 9. 9. 9. j. :. _. -. -. _. :. (. <. <. <. <. <. <. <. <. _. _. _. _. _. _. _. _. _. _. _. _. _. _. ", "B% C% C% C% C% C% C% [@ [@ 6 5 =# =# 5 5 ' x+ x+ x+ x+ x+ x+ x+ = J. J. J. J. = * ) u# u# u# 2+ 1+ 1+ > > 2+ 1+ > V. V. > 1+ {% D% E% F% F% G% H% I% H% y$ y$ C$ C$ P$ P$ J% { 1 7 7 7 7 7 7 7 5 6 7 `. 8 `. 7 Z. D+ 7+ c$ , > V. } 4 | | 2 2 E+ E+ E+ E+ K% K% K% K% K% K% K% K% K% E+ E+ E+ E+ E+ E+ E+ | | } } } 4 4 4 | | | } 4 4 0 0 0 0 4 4 } | | | 0 0 4 4 } | | ~ #+ L% L% L% #+ #+ #+ #+ #$ #$ {# {# 8 8 8 8 E n + 4 } | | | + + + + + + + + E# E# E# E# E# E# E# E# E# E# E# E# E# E# E# E# M% N% N% N% M% M% K@ + 0 H+ b% F$ K# 3# O% P% )$ l l l l l l l E l + l D }# D n q q q q q q q q M@ M@ M@ q j@ j@ c+ c+ u u }# G E k n k D G D G }# u C t B A B A B A B A *+ A &+ h$ u+ i@ B *+ h i k o G u t O k k k k k k k k 0 + n D D D E n + n D D E E }# ,+ O t t u G G o o j i j@ M N N M G Q% R% S% T% U% ^% ,% ,% }# C R# R# R# R# H$ M B V% W% X% X% *+ t t G t ,+ &$ D. E. *$ E. G u t O T . ` ` . . . . . . . S I I I I I I I I I I I I I I I R U+ V+ W+ W+ W+ W+ T T . . S S S S S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ q. H H q. q. H H =. ,. k. T O O T . ` T . Z .. .. Z i+ T . . . . . . . . Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z ` . T T . ` Z 3. V@ 3. 3. 3. 3. <. <. <. <. 0. 0. 0. 0. 9. 0. (. f. <. e. :. :+ :. e. <. e. <. e. <. e. <. <. B. ^. B. ^. B. ^. B. ^. !. ^. $. %. #. h# #. $. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. . ` .. @. @. .. ` . .. .. .. .. .. .. .. .. .. .. =. .. =. .. =. .. =. .. =. .. =. .. =. .. Z C. C. B. !. !. $. U+ C. $. #. !. !. #. $. C. %. 1. h# 1. %. V@ ^. l+ ^. |. ^. |. ^. |. ^. ^. @. @. .. Z Z ` . . Z Z Z .. @. @. +. +. /. /. +. +. @. @. .. .. +. +. +. +. +. +. +. +. {+ j+ +# j+ ]+ {+ ]+ +# ~+ h. h. {+ ]+ ]+ j+ j+ !. S$ S$ K$ j$ a# h+ T@ @. @. ). ). q. q. *. &. '. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. h+ h+ +% +. @. Z ` ` +. +. +. +. +. !. +. !. $. #. !. #. $. Z .. @. '. '. '. t+ t+ t+ t+ t+ =. +. /. +. @. .. @. /. Y% Z% +. .. .. @. .. ` +. +. +. +. +. +. +. +. T ` .. +. /. +. @. .. +. +. +. +. +. +. +. +. . .. /. [. /. @. +. /. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. /+ l+ /+ /+ /+ /+ (. (. _. _. i. i. i. i. 8. i. @. +. /. +. Z . ` .. .. +. /. +. @. .. @. /. .. .. @. @. +. (. l. l. l. l. l. (. :. _. _. _. =. =. =. =. =. =. =. =. ). @% +% =. &. '. '. ` :. s# _. <. <. -. k. k. l. (. :. _. _. :. j. l. d. e. f. g. :+ a. 5. u$ u$ 5. [. /. +. +. ]+ @. .. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. <. 3. <. <. <. <. 0. 0. 9. o+ o+ 9. N$ `% & N$ r$ &. ;+ ,. '. v+ ,. M &. &. =. =. =. ). ). ). Z@ Z@ Z@ Z@ Z@ '. '. +. +. !. !. h# h# h# h# h# h# h# h# h# h# #. s# :. $@ $@ .& .& z% +& z% z% S@ &$ 6# E. Q# =$ @& T# #& $& %& =. *. =. 7. 6. /+ l+ /+ l+ s# 1. s# 1. /+ l+ s# 1. n+ V@ 3. ^+ /+ /+ /+ 4. 4. U# U# U# s# s# n+ 3. 3. n+ s# s# /+ /+ /+ /+ /+ /+ /+ /+ n+ s# /+ 4. 4. /+ s# _. <. 0. 0. 0. 0. <. 0. <. (. (. (. (. (. (. (. (. (. /+ (. (. (. (. (. (. l. l. (. (. :. :. i. i. j. j. j. j. j. j. j. j. i. 6. j. W@ W@ j. 6. i. (. (. :. :. _. <. <. -. :. _. _. <. <. -. -. k. _. _. _. _. _. _. _. _. (. :. _. <. _. (. ", "B% B% B% C% C% C% C% [@ [@ 6 5 =# =# +$ 5 ' x+ x+ x+ x+ x+ x+ x+ = = J. J. J. * w+ ) u# && && *& B+ B+ B+ , *& B+ , c$ c$ , B+ # D% =& F% F% -& E% ;& H% I% y$ x$ x$ P$ P$ U$ { 1 7 7 7 7 7 7 7 5 6 7 `. 8 `. 7 Z. D+ 7+ c$ , > V. } 4 | | 2 2 E+ E+ E+ E+ K% K% K% K% K% K% K% K% K% K% K% K% K% K% K% E+ 2 | } } } 4 4 4 | | | } 4 4 4 0 0 4 4 4 } | | | 4 4 4 4 } } } 3 L% >& >& >& L% L% #+ #+ ($ ($ #$ #$ 9 9 9 9 n l + 0 4 4 4 4 + + + + + + + + E# E# E# E# E# E# E# E# E# E# E# E# E# E# E# ,& M% N% N% N% M% M% K@ K@ 9+ H+ b% F$ K# 3# O% P% )$ l l l l l l l n + 0 + E D E l q q q q q q q q M@ M@ M@ q j@ j@ j@ c+ G G G G o o o o o G G G u u t A. B A A A A A A A g+ A i@ h$ h$ i@ A g+ k k k o G u u u k k k k k k k k l n D }# C }# D D n D C }# E E D C u u u u u G G G o G u t O t u v '& )& )& !& ~& ~& ~& ~& U% U% }# }# }# }# R$ t W% {& {& ]& X% N@ t t u t R# ^& /& /& /& ^& J# t t O T T . . . . . . . . . S I I Q+ I Q+ I Q+ I Q+ I Q+ I Q+ I Q+ R U+ V+ 5# 5# W+ W+ T T . . S S S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ q. H H q. q. H H q. ,. . T O O T . ` T . Z .. .. Z . T . . . . . . . . Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z .. Z ` . . ` Z B. 3. V@ V@ V@ 3. 3. <. <. <. <. 0. 0. 9. 9. 9. 0. t. e. d. e. g. g. f. d. e. e. e. e. e. e. e. r+ B. ^. ^. ^. ^. ^. ^. ^. h# ^. %. %. i# h# i# %. .. .. .. .. .. .. .. .. @. @. @. @. @. @. @. @. ` Z .. @. @. .. Z ` .. .. .. .. .. .. .. .. =. =. =. =. =. =. =. =. =. =. =. =. =. =. =. =. Z C. C. B. !. !. $. U+ C. $. #. !. !. #. $. C. %. i# h# i# %. %. ^. h# ^. ^. ^. ^. ^. ^. ^. ^. .. .. .. Z Z Z Z ` Z Z Z .. @. @. @. +. /. /. +. +. @. @. .. .. +. +. +. +. +. +. +. +. {+ j+ +# j+ ]+ {+ ]+ +# {+ {+ {+ {+ ]+ ]+ ]+ m@ !. h# h# S$ 8# j$ [. [. +. @. ). ). q. q. *. &. '. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. +. +. +. +. @. @. @. @. +. +. +. +. +. +. +. +. #. B. .. .. @. @. ). =. t+ t+ t+ t+ ;$ ;$ ;$ t+ =. +. /. +. @. .. @. /. Z% [. .. Z .. +. +. @. +. +. +. +. +. +. +. +. Z Z .. @. +. @. @. .. +. +. +. +. +. +. +. +. . .. /. [. +. @. +. /. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. !. /+ l+ l+ l+ /+ /+ (. (. _. _. i. i. 8. 8. 8. i. =. +. /. +. .. Z .. +. .. +. /. +. @. .. @. /. _. _. :. :. (. (. l. l. (. (. (. (. :. :. :. :. =. =. =. =. =. =. =. =. ). +% +% =. &. '. '. ,. :. :. _. _. _. _. <. <. l. (. :. _. _. :. (. a. e. c. c. v. :+ a. a. (& l. l. /. /. +. +. j+ +. .. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. ^+ ^+ -. -. -. -. q+ q+ 9. (+ o+ 9. N$ & & 7. r$ =. S &. v+ v+ &. N &. &. =. =. =. ). ). ). Z@ Z@ Z@ Z@ j. j. (. (. (. (. /+ /+ l+ l+ l+ l+ _& _& g# g# h# S$ 4. 4. $@ $@ .& .& +& +& +& z% *. 7# %$ %$ %$ :& <& @& [& }& [$ 5$ q. p. b# /$ n+ |. 1. 1. 1. 1. 1. 1. V@ V@ V@ |. |. |. |. |. 1. 1. 1. l+ l+ r% r% r% l+ 1. 1. |. |. 1. 1. l+ /+ /+ /+ /+ /+ /+ /+ /+ n+ s# /+ 4. 4. /+ s# n+ <. <. <. <. <. <. <. <. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. l. l. (. (. :. :. _. _. (. (. (. (. (. (. (. (. _. :. (. l. l. (. :. _. :. :. :. _. _. _. _. _. :. _. _. _. <. -. -. -. _. _. _. _. _. _. _. _. (. :. _. <. <. :. ", "B% B% B% C% C% C% C% [@ [@ 6 5 =# =# +$ 5 ' x+ x+ x+ x+ x+ x+ x+ = = J. J. = * w+ ' % u# 2+ 2+ 2+ 1+ 1+ 1+ 2+ 1+ > V. V. > 1+ # |& E% 1& 1& G% H% I% x$ y$ B$ C$ C$ 2& 2& J% { 1 7 7 7 7 7 7 7 6 6 Z. `. `. `. 7 7 7+ C+ C+ c$ V. 5+ | } | | 2 2 E+ E+ E+ E+ K% K% K% K% K% K% K% K% K% K% K% K% K% K% K% E+ 2 | } } } 4 4 4 | | } } } 4 4 4 4 4 4 } } } | | } } } 4 4 4 4 a+ L% >& L% L% L% L% #+ #+ @+ @+ @+ @+ j j j j l l + 0 0 + l l + + + + + + + + K@ K@ K@ K@ K@ K@ K@ K@ K@ K@ K@ K@ K@ K@ K@ M% M% N% M% M% K@ K@ K@ K@ H+ )$ )$ H# b% 3& 4& 5& )$ l l l l l l l l 0 4 0 n E n + k k k k k k k k i i k k k o o o o o o o G G G G o o o G G u u *+ B A A A A A A A g+ A i@ h$ h$ i@ A g+ o o o o G G G G o o o o o o o o E D }# C C C }# }# }# C ,+ C D E D C G G G u u u u u t O O O O t u v 6& 7& 8& 8& '& ~& T% T% 9& U% D E E D R$ O W% {& ]& ]& N@ N@ t O u t R# ^& 0& a& a& R$ R# O O O O T T T . . . . . . . . R R I R I R I R I R I R I R I R U+ V+ 5# 5# W+ W+ T T . . S S S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ q. H H q. q. H H q. ,. S ;+ R R ;+ S ,. ;+ S &. =. =. &. S ;+ . . . . . . . . Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z @. .. Z Z Z Z .. #. $. %. %. %. $. $. Z Z Z Z &. &. *. *. *. 0. o. d. l@ l@ e. f. e. l@ e. e. e. e. e. e. e. r+ B. ^. ^. ^. ^. ^. ^. ^. h# ^. %. %. i# h# i# %. ` ` ` ` ` ` ` ` .. .. .. .. .. .. .. .. Z Z .. @. @. .. Z Z .. .. .. .. .. .. .. .. =. =. =. =. =. =. =. =. =. =. =. =. =. =. =. =. .. Z ` .. +. +. Z . ` Z @. +. +. @. Z C. %. i# h# i# %. %. ^. h# ^. ^. ^. ^. ^. ^. ^. ^. Z Z Z Z .. .. .. .. Z Z .. .. .. @. @. @. /. /. +. +. @. @. .. .. +. +. +. +. +. +. +. +. {+ j+ +# j+ ]+ {+ ]+ +# j+ ]+ ]+ ]+ ]+ {+ {+ {@ #. i# i# i# !. !. +. /. +. +. '. ). p. q. q. =. '. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. ` Z .. @. +. /. [. h+ +. +. +. +. +. +. +. +. 8# B. ` Z /. [. ). ,. t+ t+ t+ t+ ;$ ;$ ;$ t+ =. +. /. +. @. .. @. /. +. .. . ` .. /. [. [. +. +. +. +. +. +. +. +. +. +. @. .. .. .. @. @. +. +. +. +. +. +. +. +. ` @. /. /. +. @. +. /. @. @. @. @. @. @. @. @. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. !. /+ l+ l+ l+ /+ /+ (. (. _. _. i. i. 8. 8. 8. i. =. +. /. /. @. @. +. [. .. +. /. +. @. .. @. /. _. _. :. :. (. (. l. l. :. :. :. :. (. (. (. (. ). ). ). ). ). ). ). ). ). +% +% =. =. v+ '. &. :. :. :. :. :. (. (. (. l. (. :. _. _. :. (. a. g. v. v. v. :+ :+ :+ :+ :. (. +. +. +. /. +# /. .. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. 3. 3. <. <. <. <. 0. 0. 8. (+ o+ 9. N$ & N$ 7. b& ). &. =. v+ +% =. ;+ &. &. =. =. =. ). ). ). Z@ Z@ Z@ Z@ j. j. (. (. (. (. /+ /+ l+ l+ l+ l+ c& d& i# h# 8# 8# U# U# $@ $@ $@ $@ e& e& +& z% t+ H. H. G. G. T# T# T# =$ F. F. F. ). '. /$ u$ ^+ 2. V@ V@ |. 1. 1. l+ @@ @@ 2. V@ |. |. 1. 1. |. |. |. 1. 1. l+ l+ l+ r% l+ l+ 1. 1. l+ l+ r% /+ (. (. (. (. (. (. (. _. :. (. l. l. (. :. _. _. _. _. _. _. _. _. _. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. l. l. (. (. :. :. _. _. (. (. (. (. (. (. (. (. _. :. (. l. l. (. :. _. _. _. _. _. _. :. :. :. :. _. _. _. <. <. <. <. _. _. _. _. _. _. _. _. :. :. _. <. <. <. ", "B% B% B% C% C% C% C% [@ [@ 6 5 =# =# +$ 5 ' x+ x+ x+ x+ x+ x+ x+ * = = = = * w+ ' # # 2+ # 2+ # 1+ $ 2+ $ > 1 V. ; 1+ ! f& H% g& g& h& x$ y$ C$ B$ D$ i& i& ] ] b$ H@ 1 7 7 7 7 7 7 7 6 Z. Z. 7 7 `. `. `. C+ C+ C+ C+ 5+ 5+ | | | | 2 2 E+ E+ E+ E+ K% K% K% K% K% K% K% K% K% K% K% K% K% K% K% E+ 2 | } } } 4 4 4 } } } } } } 4 4 4 4 } } } } } } | } } 4 0 0 + K@ L% >& L% L% L% L% #+ #+ @+ @+ @+ L@ h h i i l + + + + l E D + + + + + + + + a+ a+ a+ a+ a+ a+ a+ a+ a+ a+ a+ a+ a+ a+ a+ a+ ,& j& ,& ,& E# E# E# l l )$ )$ )$ 3& 3& 4& 3& )$ l l l l l l l + 4 } 4 l n l 0 k p k p k p k p k p k p k p o o k k k o G u u u o o o G G G u u B A A A A A A A A A i@ i@ i@ i@ A B G G G G o o o o o o o o o o o o D D D }# }# }# D D C V i+ ,+ }# E D C o o G G u t t O T T O t u G o p '& )& )& !& ~& T% T% T% Q% U% E l l E R$ T X% ]& ]& k& N@ N@ O O o G J# R# a& a& a& R# ^& T T O O O O O . . . . . . . . O O R O R O R O R O R O R O R O W+ 5# V+ V+ U+ U+ . . . . S S S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ q. H H q. q. H H q. ,. S ;+ R R ;+ S ,. ;+ S &. =. =. &. S ;+ ` ` ` ` ` ` ` ` Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z @. .. .. .. .. .. .. #. $. %. %. %. $. $. Z Z Z Z &. &. *. *. *. &. 0. l@ k@ l@ e. e. d. k@ e. e. e. e. e. e. e. <. B. ^. ^. ^. ^. ^. ^. ^. h# ^. %. %. i# h# i# $. ` ` ` ` ` ` ` ` Z Z Z Z Z Z Z Z .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. =. =. =. =. =. =. =. =. =. =. =. =. =. =. =. =. @. .. ` Z @. +. .. ` ` Z @. +. +. @. Z ` $. i# h# i# %. %. ^. h# ^. ^. ^. ^. ^. ^. ^. B. ` ` Z .. .. @. +. +. .. .. .. .. .. .. @. @. /. /. +. +. @. @. .. .. +. +. +. +. +. +. +. +. {+ j+ +# j+ ]+ {+ ]+ +# +# +# j+ j+ ]+ {+ {+ l& B. ^. ^. ^. #. #. @. @. +. +. '. ). p. p. q. =. '. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. ` Z .. @. +. /. [. h+ +. +. +. +. +. +. +. +. a# B. T ` [. T@ '. S t+ t+ t+ t+ ;$ ;$ ;$ t+ =. +. /. +. @. .. @. /. Z ` . ` .. +. /. [. +. +. +. +. +. +. +. +. h+ [. @. Z Z Z @. +. +. +. +. +. +. +. +. +. Z @. /. /. @. .. @. /. @. @. @. @. @. @. @. @. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. !. /+ l+ l+ l+ /+ /+ (. (. _. _. i. i. 8. 8. 8. i. =. +. [. /. +. +. [. T@ .. +. /. +. @. .. @. /. _. _. :. :. (. (. l. l. _. _. _. :. (. l. l. l. ). ). ). ). ). ). ). ). =. +% v+ =. =. v+ v+ &. :. :. (. (. l. 5. 5. 5. (. (. :. :. :. :. (. :+ a. y. b. b. g. g. f. f. _. _. @. @. +. /. +# [. .. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. s# s# :. :. :. :. 6. 6. 8. 9. (+ 9. N$ & N$ 8. b& '. =. '. +% +% ). S &. &. =. =. =. ). ). ). Z@ Z@ Z@ Z@ j. j. (. (. (. (. /+ /+ l+ l+ l+ l+ m& m& %. ^. !. 8# U# 5. :+ $@ $@ $@ e& e& +& .& +% .# $& +# H. j+ G. ]+ G. ]+ G. ]+ ). +. W@ l. }. n@ @@ 2. |. 1. l+ l+ @@ 2. 2. 2. V@ V@ |. |. V@ V@ V@ |. |. 1. 1. 1. n& r% l+ l+ l+ l+ r% U# (. (. (. (. (. (. (. (. :. :. (. (. (. (. :. :. _. _. _. _. _. _. _. _. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. l. l. (. (. :. :. _. _. (. (. (. (. (. (. (. (. :. :. (. (. (. (. :. :. -. <. <. _. :. :. (. (. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. :. :. _. <. -. -. ", "B% B% B% C% C% C% C% [@ [@ 6 5 =# =# +$ 5 ' ' ' ' ' ' ' ' ! ! & & ! ) ' ~ ) ) # ! # ! # ! # ) ; ~ 1 ' $ ! f& 7$ l$ l$ 9$ 6$ o& a$ p& {% ]% ]% L. L. R. R. 1 7 7 7 7 7 7 7 Z. Z. Z. Z. 7 7 `. `. C+ C+ C+ C+ 5+ 5+ | | | | 2 2 E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ 2 | } } } 4 4 4 4 4 } } } } } } } } } } } } 4 4 } } 4 4 0 + + E# #+ L% L% L% #+ #+ @+ @+ #$ #$ j h 0+ M@ M@ M@ + + 0 + l n E D + + + + + + + + K@ K@ K@ K@ K@ K@ K@ K@ K@ K@ K@ K@ K@ K@ K@ K@ ,& ,& ,& ,& E# E# l l l l )$ )$ 3& 3& 3& 3& )$ l l l l l l l + 4 } 4 l n l 0 p x p x p x p x w y p x p x p p k k k o G u u u k k o o o G G G B B B B B B B B &+ &+ B B B B &+ &+ G G G G o o o o G G G G G G G G E E E n n n E E C V i+ ,+ }# E D C o o G G u t t O T O t G o k i <# R% q& q& r& S% T% T% T% Q% U% D n n D R$ T X% ]& k& k& N@ s& O O i k G$ R$ 0& /& /& &$ ^& T T O O O O O . . . . . . . . O d+ O d+ O d+ O d+ O d+ O d+ O d+ O d+ ~. 5# V+ e+ d+ U+ . ` . . S S S@ S@ S@ S@ S S S S S S S S =. ;+ ;+ =. =. ;+ ;+ =. /@ S@ H I I H S@ /@ H S@ *. q. q. *. S@ ;+ ` ` ` ` ` ` ` ` Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z .. .. .. @. @. .. .. B. $. %. %. %. $. $. Z Z Z Z &. &. *. *. *. &. 0. k. W k. <. <. -. W <. <. <. <. <. <. <. <. B. B. B. B. B. B. B. B. !. B. $. $. #. !. #. $. ` ` ` ` ` ` ` ` Z Z Z Z Z Z Z Z @. @. .. .. .. .. @. @. .. .. .. .. .. .. .. .. =. =. =. =. =. =. =. =. =. =. =. =. =. =. =. =. +. .. Z Z @. +. @. Z ` Z @. +. +. @. Z ` $. #. !. #. $. $. B. !. B. B. B. B. B. B. B. B. Z Z Z .. @. +. +. +. @. @. .. .. .. .. .. .. /. /. +. +. @. @. .. .. +. +. +. +. +. +. +. +. {+ j+ +# j+ ]+ {+ ]+ +# .# +# +# j+ ]+ ]+ {+ {@ B. ^. ^. ^. B. B. .. .. /. /. '. '. t+ p. p. ). '. +. +. +. +. +. +. +. @. @. @. @. @. @. @. @. @. @. @. @. +. +. +. +. +. +. +. +. +. +. +. +. q$ #. . Z h+ t& v+ ,. t+ t+ t+ t+ ;$ ;$ ;$ t+ =. +. /. +. @. .. @. /. .. .. .. .. Z .. @. +. +. +. +. +. +. +. +. +. T@ [. +. .. Z .. @. +. +. +. +. +. +. +. +. +. @. +. /. +. .. Z @. /. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. !. /+ l+ l+ l+ /+ /+ (. (. _. _. i. i. 8. 8. 8. i. =. +. [. /. +. +. [. T@ .. +. /. +. @. .. @. /. _. _. :. :. (. (. l. l. _. _. _. :. (. l. l. l. '. '. '. '. '. '. '. '. &. v+ v+ =. =. v+ +% =. :. (. (. l. l. 5. u$ u$ :. :. (. (. (. (. :. g. (& y. y. b. g. f. f. e. <. _. .. @. +. +. +# /. .. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. 4. 4. l. l. l. l. W@ W@ 7. 9. (+ 9. O$ N$ O$ 8. r$ '. ). '. v+ '. =. ,. &. &. =. =. =. ). ). ). Z@ Z@ Z@ Z@ j. j. (. (. (. (. /+ /+ l+ l+ l+ l+ R% u& ~. %. B. #. (. (. :+ :+ $@ $@ e& e& e& .& u$ a# [. 8# /. !. +. #. +. !. +. !. +. #. .. B. }. }. m+ ^+ n+ s# /+ /+ s# n+ n+ 3. 3. ^+ ^+ ^+ 3. 3. 3. n+ n+ s# s# s# U# 4. /+ /+ /+ /+ 4. U# (. (. (. (. (. (. (. (. (. (. :. :. :. :. (. (. :. :. :. :. :. :. :. :. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. l. l. (. (. :. :. _. _. (. (. (. (. (. (. (. (. (. (. :. :. :. :. (. (. -. <. <. _. :. :. (. (. _. _. _. _. :. :. :. :. _. _. _. _. _. _. _. _. _. _. _. _. <. -. ", "B% B% B% C% C% C% C% [@ [@ 6 5 =# =# +$ +$ ; ' ' ' ' ' ' ' ) ! ! ! ! ) ' ~ ) ) ) ! ! ! & & ! ) ' ~ ~ ' ) ! v& 6$ w& w& k% ]% {% ]% {% P. N. x& y& y& z& c$ V. 7 7 7 7 7 7 7 7 Z. Z. 6 Z. 7 `. 8 c$ C+ C+ 7+ 3+ 5+ | 1 | | 2 2 E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ | | } } } 4 4 4 4 4 4 } } } | | | | } } } 4 4 4 4 0 0 0 0 + + K@ #+ L% L% L% #+ #+ @+ @+ {# {# 9 j ++ 0+ M@ M@ + 0 0 0 + l n E + + + + + + + + E# E# E# E# E# E# E# E# E# E# E# E# E# E# E# E# 6& 6& 6& 6& '$ '$ n n n l )$ H+ 5& 3& 3& H# l l l l l l l l l 0 4 0 n E n K@ x A& x A& x A& x A& y B& y A& x A& F# F# w o o o G G G G k k k o o G G G B B B B B B B B u+ &+ B *+ *+ B &+ u+ o o o o G G G G G G G G G G G G D E n l l l n n }# C ,+ C D E D C G G G u u u u u O t u o k i i <# C& m& D& D& R% S% T% T% Q% 9& }# D D }# R# T X% k& k& k& s& s& T T k o J# R# 0& /& /& &$ R# O O O O T T T . . . . . . . . d+ e+ d+ e+ d+ e+ d+ e+ d+ e+ d+ e+ d+ e+ d+ e+ %. 5# V+ -+ =+ U+ . Z . . S S S@ S@ S@ S@ S S S S S S S S =. ;+ ;+ =. =. ;+ ;+ =. /@ S@ H I I H S@ /@ H S@ *. q. q. *. S@ H ,. ` ` ` ` ` ` ` Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z .. @. @. .. Z $. $. %. %. %. $. $. Z Z Z Z &. &. *. *. *. &. =. -. k. k. <. _. <. k. <. <. <. <. <. <. <. <. B. B. B. B. B. B. B. B. !. B. $. $. #. !. #. $. ` ` ` ` ` ` ` ` .. .. .. .. .. .. .. .. +. @. @. .. .. @. @. +. .. .. .. .. .. .. .. .. =. =. =. =. =. =. =. =. =. =. =. =. =. =. =. =. /. @. Z Z @. +. +. .. ` Z @. +. +. @. Z ` Z #. !. #. $. $. B. !. B. B. B. B. B. B. B. B. .. .. @. @. @. @. +. +. @. @. @. .. .. .. Z Z /. /. +. +. @. @. .. .. +. +. +. +. +. +. +. +. {+ j+ +# j+ ]+ {+ ]+ +# +# +# +# j+ j+ j+ j+ m@ #. i# i# ^. B. B. Z Z /. /. v+ '. t+ p. p. ). '. +. +. +. +. +. +. +. @. @. @. @. @. @. @. @. /. /. +. +. @. @. .. .. +. +. +. +. +. +. +. +. a# !. Z .. [. h+ v+ =. t+ t+ t+ t+ ;$ ;$ ;$ t+ =. +. /. +. @. .. @. /. .. +. /. +. .. Z .. +. +. +. +. +. +. +. +. +. [. /. +. @. @. @. +. +. +. +. +. +. +. +. +. +. +. /. /. +. Z Z @. /. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. !. /+ l+ l+ l+ /+ /+ (. (. _. _. i. i. 8. 8. 8. i. =. +. /. /. @. @. +. [. .. +. /. +. @. .. @. /. _. _. :. :. (. (. l. l. :. :. :. :. (. (. (. (. '. '. '. '. '. '. '. '. &. '. v+ =. =. +% +% ). (. (. (. l. l. l. l. l. _. :. (. l. l. (. :. f. a. y. b. b. g. g. f. f. _. _. .. @. @. @. ]+ +. .. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. 4. 4. l. l. l. l. W@ W@ 7. 8. (+ 9. O$ N$ O$ 9. p. ). '. '. '. ). &. ,. &. &. =. =. =. ). ). ). Z@ Z@ Z@ Z@ j. j. (. (. (. (. /+ /+ l+ l+ l+ l+ C& C& ~. %. B. #. :. (. :+ :+ $@ $@ e& e& e& $@ l. 8# 8# 4. 4. <$ <$ <$ E& 4. 4. 8# !. #. $. C. ^+ ^+ 3. 3. n+ s# s# /+ 4. /+ /+ s# n+ 3. ^+ ^+ n+ n+ n+ s# s# /+ /+ /+ 4. /+ /+ s# s# /+ /+ 4. (. (. (. (. (. (. (. (. l. (. :. _. _. :. (. l. :. :. :. :. :. :. :. :. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. l. l. (. (. :. :. _. _. (. (. (. (. (. (. (. (. l. (. :. _. _. :. (. l. _. _. _. _. _. :. :. :. _. _. _. :. :. :. (. (. _. _. _. _. _. _. _. _. <. _. :. :. :. _. ", "B% B% B% C% C% C% C% [@ [@ 6 5 =# =# +$ +$ ; ; ; ; ; ; ; ; $ $ # # $ ; 1 ~ ' w+ w+ w+ * = = = * w+ x+ =@ =@ x+ w+ ! v& a$ ^# ^# K. N. P. N. P. F& x& G& H& H& I& J& V. 7 7 7 7 7 7 7 7 Z. 6 6 6 7 `. 9 , c$ 7+ D+ K& 3+ 1 ; | | 2 2 E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ | | } } } 4 4 4 0 4 4 4 } | | | | | | } 4 4 4 0 + + + + 0 0 0 a+ #+ #+ #+ #+ @+ @+ @+ @+ 7 `. 1@ $$ }$ ++ 1$ M@ + 0 4 4 4 0 + l + + + + + + + + >% >% >% >% >% >% >% >% >% >% >% >% >% >% >% >% '$ '$ '$ '$ n n n n E n + 0 9+ H+ H# 0% l l l l l l l l n + 0 + E D E E# A& L& A& L& A& L& A& L& M& N& B& N& A& O& P& P& v G G G o o o o i i k k o o o G G G G G G G G G k o G u u G o k k k k o G u u u u u u u u u u u C }# E n l n E E n D C }# E E D C u u u u u G G G T O u o o o o v R% q& q& r& S% S% S% S% Q% Q% V ,+ ,+ V ^& T N@ k& k& Q& s& }. T T O T ^& &$ /& 0& a& R$ J# t t O T T . . . . . . . . . W+ e+ R& e+ R& e+ R& e+ R& e+ R& e+ R& e+ R& e+ e+ %. ~. e+ -+ =+ d+ ` Z . . S S S@ S@ S@ S@ S . . . . . . . .. T T .. .. T T =. /@ q# T+ Q+ Q+ T+ q# )% T+ q# `@ r. r. `@ q# H &. Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z . ` Z .. .. Z ` W+ l& S& S& S& l& l& h. h. h. h. E. E. 7# 7# 7# &. ). Z ` Z @. @. .. ` Z Z Z Z Z Z Z Z .. .. .. .. .. .. .. .. +. .. Z Z @. +. @. Z .. .. .. .. .. .. .. .. @. @. @. @. @. @. @. @. /. +. @. .. .. @. +. /. .. .. .. .. .. .. .. .. =. =. =. =. =. =. =. =. =. =. =. =. =. =. =. =. +% '. &. &. ). '. '. ). ,. &. ). '. '. ). &. ` Z @. +. @. Z Z .. +. .. .. .. .. .. .. .. .. +. +. +. @. @. @. @. @. +. @. @. @. .. Z Z Z /. /. +. +. @. @. .. .. +. +. +. +. +. +. +. +. {+ j+ +# j+ ]+ {+ ]+ +# j+ j+ j+ j+ +# +# +# 2% !. h# h# i# #. B. .. .. [. [. v+ v+ t+ t+ t+ ). '. +. +. +. +. +. +. +. .. .. .. .. .. .. .. .. /. /. +. +. @. @. .. .. +. +. +. +. +. +. +. +. 8# !. +. +. /. /. v+ '. t+ t+ t+ t+ ;$ ;$ ;$ t+ =. +. /. +. @. .. @. /. Z +. [. [. @. .. +. [. +. +. +. +. +. +. +. +. @. +. +. /. [. /. /. +. +. +. +. +. +. +. +. +. /. [. /. @. Z ` @. /. /. /. /. /. /. /. /. /. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. !. /+ l+ l+ l+ /+ /+ (. (. _. _. i. i. 8. 8. 8. i. =. +. /. +. .. Z .. +. .. +. /. +. @. .. @. /. _. _. :. :. (. (. l. l. (. (. (. (. :. :. :. :. v+ v+ v+ v+ v+ v+ v+ v+ ,. '. '. &. =. +% +% ). l. l. (. (. (. (. :. :. _. :. (. l. l. (. :. f. :+ b. b. b. g. g. g. g. :. :. @. @. .. .. {+ .. .. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. s# s# :. :. :. :. 6. 6. Z@ 8. 9. 9. O$ N$ r# 9. q. =. ). ). =. &. ,. ,. &. &. =. =. =. ). ). ). Z@ Z@ Z@ Z@ j. j. (. (. (. (. /+ /+ l+ l+ l+ l+ m@ m@ #. !. +. +. (. (. :+ :+ :+ :+ s@ s@ s@ $@ :. s# /+ <$ <$ T& U& U& n. Y@ <$ 4. 8# !. {@ $. _. _. :. :. :. :. :. :. (. (. (. (. (. (. :. :. :. :. :. (. (. l. l. l. (. :. :. _. _. :. :. (. j. j. j. j. j. j. j. j. W@ j. 6. i. i. 6. j. W@ :. :. :. :. :. :. :. :. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. l. l. (. (. :. :. _. _. (. (. (. (. (. (. (. (. l. (. :. _. _. :. (. l. :. :. :. _. _. _. _. _. _. _. _. :. (. (. (. l. _. _. _. _. _. _. _. _. -. _. :. (. (. (. ", "B% B% B% C% C% C% C% [@ [@ 6 5 =# =# +$ +$ ; ; ; ; ; ; ; ; $ $ # # $ ; 1 2 ' x+ w+ w+ * = = = * w+ x+ =@ =@ x+ w+ ! V& ]% ^# ^# L. N. F& x& F& F& G& G& W& W& X& J& W. 7 7 7 7 7 7 7 7 Z. 6 6 6 7 8 9 , c$ 7+ D+ K& 3+ 1 ; | | 2 2 E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ 2 | | } } } 4 4 4 0 0 4 4 } | | | | | | } 4 4 0 0 n l l + 0 0 4 6+ @+ #+ #+ #+ @+ @+ @+ @+ Z. 7 1@ $$ }$ ++ 1$ 0+ H+ 0 4 } } 4 0 0 + + + + + + + + ,% ,% ,% ,% ,% ,% ,% ,% ,% ,% ,% ,% ,% ,% ,% ,% '$ '$ n n n n n n E n + 0 0 + H# E l l l l l l l l E l + l D }# D '$ A& L& L& L& L& L& L& L& Y& Y& N& N& L& O& O& P& P u u G o k k k i i k k o o o o G G G G G G G G k o G u u G o k h i k o G u t O u u u u u u u u V ,+ }# E E E D }# + n D D E E }# ,+ O t t u G G o o . T t G G u t d+ '& )& !& Z& T% S% R% R% 9& Q% i+ ~+ ~+ i+ ^& O N@ k& Q& Q& s& }. T T .. .. E. D. /& a& `& 0% G$ u t O T . ` ` . . . . . . . W+ e+ R& R& R& R& R& R& R& R& R& R& R& R& R& R& R& %. ~. e+ -+ =+ d+ ` Z . . S S S@ S@ S@ S S . . . . . . . .. T T .. .. T T =. /@ q# T+ Q+ Q+ T+ q# )% T+ q# `@ r. r. `@ q# H &. Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z T . ` Z Z ` . U+ l& S& S& S& l& l& h. h. h. h. E. E. 7# 7# 7# E. '. .. Z Z @. +. @. Z Z Z Z Z Z Z Z Z .. .. .. .. .. .. .. .. +. .. Z Z @. +. @. Z .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. /. +. @. .. .. @. +. /. .. .. .. .. .. .. .. .. =. =. =. =. =. =. =. =. =. =. =. =. =. =. =. =. @% '. &. &. ). '. v+ '. ,. &. ). '. '. ). &. ,. Z @. +. @. Z Z .. +. .. .. .. .. .. .. .. .. /. /. /. +. @. .. .. .. +. +. @. @. .. Z Z Z /. /. +. +. @. @. .. .. +. +. +. +. +. +. +. +. {+ j+ +# j+ ]+ {+ ]+ +# ]+ ]+ j+ j+ +# .# .# * 8# S$ S$ h# #. #. .. .. [. [. v+ v+ t+ t+ t+ '. '. +. +. +. +. +. +. +. .. .. .. .. .. .. .. .. @. @. @. @. +. +. +. +. +. +. +. +. +. +. +. +. !. 8# [. [. +. @. '. +% t+ t+ t+ t+ ;$ ;$ ;$ t+ =. +. /. +. @. .. @. /. ` @. h+ h+ /. +. [. T@ +. +. +. +. +. +. +. +. Z .. /. [. h+ h+ /. +. +. +. +. +. +. +. +. +. [. [. /. @. ` ` .. /. /. /. /. /. /. /. /. /. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. !. /+ l+ l+ l+ /+ /+ (. (. _. _. i. i. 8. 8. 8. i. ). +. /. +. Z . ` .. .. +. /. +. @. .. @. /. _. _. :. :. (. (. l. l. l. l. l. (. :. _. _. _. v+ v+ v+ v+ v+ v+ v+ v+ ,. '. '. &. =. +% @% ). l. l. (. (. :. _. _. _. _. :. (. l. l. (. :. f. g. v. v. v. :+ :+ :+ :+ (. (. @. @. .. Z h. ` .. _. _. _. _. _. _. _. _. _. _. _. _. _. _. _. 3. 3. <. <. <. <. 0. 0. Z@ 8. 9. 9. O$ N$ r# (+ /@ =. ). ). &. ,. S ,. &. &. =. =. =. ). ). ). Z@ Z@ Z@ Z@ j. j. (. (. (. (. /+ /+ l+ l+ l+ l+ * .* [. [. [. [. l. l. :+ :+ :+ :+ b. b. s@ b. m. m. m. o# T& +* @* #* $* #@ o# E& U# 8# U@ U@ +. (. (. (. :. :. :. :. :. :. (. (. l. 5. u$ u$ (. (. (. l. l. 5. 5. 5. :. :. _. <. <. _. :. :. j. j. j. j. j. j. j. j. W@ j. 6. i. i. 6. j. W@ :. :. :. :. :. :. :. :. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. l. l. (. (. :. :. _. _. (. (. (. (. (. (. (. (. l. (. :. _. _. :. (. l. (. (. :. :. _. <. <. -. _. _. :. :. (. (. l. l. _. _. _. _. _. _. _. _. -. <. :. l. 5. l. ", ",# ,# C# )# )# z# z# ~# [@ 6 Z. `. 8 W. Y. # # $ $ ; ; 1 1 % $ ; $ # # 1 6+ ~ =@ x+ x+ w+ w+ * * w+ x+ =@ -@ -@ =@ x+ ) % 2+ > 5+ 7+ 7+ C+ c$ %* %* &* &* ** =* -* ;* M@ h j 8 `. 7 7 7 9 8 7 Z. Z. 7 8 9 c$ c$ c$ c$ V. V. 1 1 1 1 ~ ~ =@ =@ =@ =@ ' ~ ~ 2 2 3 6+ 6+ ) ) ' ~ 3 6+ a+ a+ } 4 0 0 0 } 1 ; 0 0 0 0 0 0 0 0 } } } 4 0 + + + 0 0 4 4 } | | ~ p |$ #$ #$ @+ @+ 8 7 0+ 0+ 0+ ++ a 1$ 1$ 0+ K& 0 + n n + 0 4 n n l l l l l + 3 3 6+ a+ K@ E# '$ >% K@ K@ K@ E# E# '$ '$ '$ + l )$ n n l l + n n n n n '$ n n n n n n n n n n + n E D D E n K@ P& O& O& O& L& N& Y& >* Y& Y& N& N& L& O& O& P& P G o k k o G u G G G G G G G G k k k o G u u u t t t t t t t t G G G G G G G G u u G G o k k k }# }# D D E n n n }# }# }# }# }# }# }# }# O t t u G G o o o o o o o o o w T% Z& Z& Z& T% T% T% T% ,% ,% }# C C ,+ ^& T N@ k& k& k& N@ N@ t t O . D. &$ ,* '* '* R# R# O O O O O O O t t t t t t t =+ )* !* !* !* !* !* !* !* ~* {* {* {* ~* ]* >* M& e+ V+ 5# ~. C. W+ T O Z Z &. &. *. *. *. &. ;+ T . . ` Z Z Z ` ` ` ` ` ` ` ,. *. *. *. *. *. *. *. *. H S@ /@ *. *. /@ /@ S@ ;+ . Z @. @. .. Z ` T T . . ` Z Z Z Z Z Z Z Z Z Z Z . ` .. @. @. .. ` W+ k+ ^* ^* ^* !% !% Z+ Z+ @ @ =$ =$ %$ %$ %$ F. ). .. Z ` ` .. +. [. ` ` ` ` ` ` ` ` .. .. .. .. .. .. .. .. Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z .. Z . ` .. @. Z . . ` .. @. @. .. ` . +. +. @. @. .. Z Z ` +% v+ v+ '. ). =. =. &. v+ ). =. ). '. v+ '. =. r$ r$ r$ t+ p. q. q. q. p. p. t+ t+ r$ b& b& @% h+ [. [. /. +. +. @. @. Z .. .. @. +. /. /. [. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +# ]+ {+ ]+ j+ +# j+ {+ j+ j+ j+ j+ j+ j+ j+ U@ a# /* (* K$ #. $. Z @. h+ [. +% v+ t+ t+ p. ). +% [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. a# j$ [. /. +. +. ). ). b& b& b& r$ ;$ ;$ <+ p. '. +. /. [. [. h+ h+ T@ +. [. h+ [. +. .. @. /. Z .. +. [. h+ h+ [. /. /. /. /. /. /. /. /. /. Z @. /. +. @. .. +. [. @. /. [. [. +. @. +. [. +. +. @. @. .. Z Z Z +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. .. .. .. Z Z ` ` C. 3. |. 1. l+ 4. 4. l. (. l. l. W@ W@ b# b# b# W@ ,. .. +. /. [. /. +. @. @. +. /. h+ h+ /. +. @. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. '. '. '. '. '. '. '. '. ). ). '. '. v+ +% +% @% :. l. 5. 5. (. :. (. 5. (. (. (. (. (. (. (. :+ a. b. v. c. f. g. :+ a. 5. (. @. +. [. h+ +# @. /. :. _. <. -. <. :. (. (. (. (. (. (. (. (. (. /+ s# _. <. <. _. 6. j. Z@ Z@ Z@ Z@ N$ N$ N$ Z@ t+ '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. (+ 7. _* :* <* W@ -. X (. (. /+ /+ l+ l+ l+ /+ {+ {+ =. .. .. .. _. _. d. (& [* e. }* ^@ ;. X@ |* 1* n. 2* 3* 4* 5* 6* 7* 8* ^@ E& m+ B. * l& +. _. <. <. :. (. _. -. (. (. :. :. _. <. <. -. _. _. _. _. _. _. _. _. _. (. l. (. _. _. :. l. j. Z@ Z@ Z@ Z@ Z@ Z@ Z@ 8. 7. Z@ b# b# Z@ 7. i. <. :. l. 5. u$ u$ 5. l. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. <. (. 5. l. _. <. :. 5. l. l. (. :. _. -. -. k. _. _. _. :. (. l. l. l. _. _. _. _. _. _. _. _. (. :. <. -. -. <. :. (. _. _. _. _. _. _. ", "D# D# D# )# z# z# z# ~# [@ 5 6 7 `. X. Y. # # $ $ ; ; 1 1 # $ ; $ # # 1 } ~ =@ x+ x+ w+ w+ * * w+ x+ =@ E+ E+ =@ x+ ) # 1+ V. 5+ C+ C+ c$ , %* %* ** &* ** =* -* ;* 0+ j 9 `. 7 7 7 7 9 8 7 Z. Z. 7 8 9 c$ c$ c$ c$ V. V. 1 1 1 1 ~ ~ =@ =@ =@ =@ ~ ~ ~ ~ 2 2 2 2 3 3 3 3 6+ 6+ 6+ 6+ } 4 0 0 0 } | ; 0 0 0 0 0 0 0 0 4 4 4 4 0 0 0 0 } } } } 4 4 4 4 <# #+ #$ #$ @+ @+ 9 `. }$ ++ ++ 0+ 1$ a a .+ K& 0 + l l + 0 4 + + + + + l l l 6+ 6+ a+ a+ K@ E# E# '$ K@ K@ K@ E# E# '$ '$ n H+ )$ )$ H# H# l l + n n n '$ '$ '$ '$ '$ n n n n n n n n l n E D D E n E# A& L& P& O& P& L& B& Y& M& N& B& N& A& O& P& P& P G o k k o G u G G G G G G G G o o o o G G G G u u u u u u u u G G G G G G G G t u u u G o o o }# }# }# D D D D E }# }# }# }# }# }# }# }# t t u u u u G G G G G G G G G v T% Z& Z& Z& T% T% T% T% ^% ^% C C C C R# O N@ k& k& k& N@ N@ t t O . D. &$ ,* '* ,* R# R# O O O O T T T t t t t t t t =+ )* !* !* !* !* !* !* !* !* ]* ~* ~* {* ~* ]* R& e+ V+ 5# ~. C. W+ T O ` ` ,. ,. /@ /@ /@ ,. T . . . ` Z Z Z ` ` ` ` ` ` ` ` ,. ,. /@ ,. /@ ,. /@ ,. S@ ,. /@ &. *. ,. S@ ;+ T . Z .. @. .. Z Z T . . . ` Z Z Z Z Z Z Z Z Z Z Z . ` .. @. @. .. ` W+ !% ^* ^* ^* !% !% Z+ Z+ @ @ =$ =$ %$ %$ %$ =$ F. Z Z Z Z .. @. +. ` ` ` ` ` ` ` ` .. .. .. .. .. .. .. .. Z Z Z Z Z Z Z Z .. .. .. .. .. .. .. .. @. Z ` Z @. @. .. ` ` Z .. @. @. .. Z ` @. @. @. .. .. .. .. .. ). ). ). ). '. '. '. '. v+ ). =. ). '. v+ '. =. t+ t+ t+ t+ p. p. p. p. p. p. p. t+ t+ r$ r$ r$ v+ /. /. +. +. @. @. @. +. +. +. +. @. @. @. @. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +# ]+ {+ ]+ j+ +# j+ {+ j+ j+ j+ j+ j+ j+ j+ U@ 8# K$ J$ S$ #. $. .. @. /. /. v+ v+ r$ t+ t+ '. v+ /. /. /. /. /. /. /. /. /. /. /. /. [. [. [. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. !. !. +. /. /. /. v+ v+ b& b& b& r$ ;$ ;$ ;$ p. '. +. +. +. /. /. /. /. +. [. h+ [. +. .. @. /. +. /. [. [. [. /. +. @. /. /. /. /. /. /. /. /. Z @. /. +. @. .. +. [. @. /. [. [. +. @. +. [. /. /. /. +. @. @. @. .. @. @. @. @. @. @. @. @. /. /. /. /. /. /. /. /. @. @. @. .. .. Z Z $. n+ |. 1. l+ 4. /+ (. :. l. l. W@ W@ b# b# b# W@ &. .. @. /. /. /. +. @. @. +. /. [. [. /. +. @. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. '. '. '. '. '. '. '. '. '. '. '. v+ v+ v+ v+ v+ :. l. 5. 5. (. :. (. 5. (. (. (. (. (. (. (. :+ a. b. v. c. f. g. :+ a. 5. (. .. @. /. [. j+ @. +. :. <. -. -. <. _. :. (. (. (. (. (. (. (. (. s# n+ <. -. -. <. i. 6. 7. 7. 7. 7. O$ O$ O$ 7. t+ '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. 8. 7. :$ _* e# j. <. k. (. (. /+ /+ l+ l+ l+ /+ {+ F. =. =. =. .. _. _. a. a. e. 9* 0* T& a* T& ^@ b* x. c* d* e* f* g* h* i* j* k* k. U@ l* m* +. _. <. <. :. (. _. <. (. (. :. :. :. :. _. _. _. _. _. _. _. _. _. _. <. :. (. :. <. -. _. j. Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ 8. 7. Z@ b# b# Z@ 7. i. 0. _. (. l. 5. l. l. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. _. (. 5. l. _. <. :. l. l. l. (. :. :. _. <. <. :. :. :. :. (. (. (. (. _. _. _. _. _. _. _. _. (. :. _. <. <. _. :. (. <. <. _. _. _. :. ", "B% B% n* z# z# z# z# [@ @ =# 5 Z. 7 Y. v# 2+ 2+ 1+ 1+ > > V. V. 2+ 1+ > 1+ 2+ 2+ > } ' ' ' ' ) ) ) ) ' ' ~ 2 2 ~ ' ' Z. 7 `. `. 1@ W. z+ A+ z+ A+ o* o* p* q* r* s* ++ 9 `. 7 Z. Z. Z. Z. 8 `. `. 7 7 `. `. 8 7+ 7+ 7+ 7+ 3+ 3+ } } } } 3 3 -@ -@ -@ -@ 2 1 1 1 1 ; ; ; + + 0 0 4 4 4 } } 4 4 0 4 } | 1 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 4 1 | | } 4 0 + + <# @+ {# #$ j h }$ 1@ 1@ $$ a 1$ t* u* v* *@ 9+ 0 + l l + 0 0 } 4 4 0 + + l l a+ a+ a+ K@ K@ K@ K@ K@ K@ K@ K@ E# E# '$ '$ n )$ 3& 3& )$ )$ )$ l l n n '$ '$ '$ 6& 6& '$ n n n n n n n n l n E E E E n E# Q B& x P& F# P& x A& y B& y A& x A& F# F# P G o k k o G u G G G G G G G G D D D D E E E E D D D D D D D D G G G G G G G G t t t u u u G G }# }# }# }# }# C C C }# }# }# }# }# }# }# }# u u u u u t t t t t t t t t t =+ T% Z& Z& Z& T% T% T% T% 9& 9& C C C C J# u N@ k& k& k& N@ N@ t t O T D. ^& ,* '* ,* ^& R$ t t O T T . . O O O O O O O d+ e+ R& R& R& R& R& R& R& M& w* R& x* s$ t$ s$ s$ e+ V+ 5# ~. C. W+ T O . . S S S@ S@ S@ S . W+ W+ C. C. C. $. $. C. C. C. C. C. C. C. ` . . S . S . S . &. Z &. Z ,. . ;+ O . ` Z .. .. .. .. Z . . . ` ` ` Z Z Z Z Z Z Z Z Z Z ` Z Z .. .. Z Z C. !% ^* ^* ^* !% !% Z+ Z+ Z+ Z+ ^$ ^$ P# P# P# ^$ D. ~+ h. {+ ]+ ]+ {+ {+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ =. =. =. =. =. =. =. =. &. &. &. &. &. &. &. &. @. @. @. @. @. @. @. @. +. .. Z .. +. /. @. Z Z Z .. @. @. .. Z Z .. .. .. .. .. @. @. @. &. &. =. ). '. v+ +% +% v+ ). =. ). '. v+ '. =. p. p. p. p. t+ t+ t+ t+ q. q. q. p. p. t+ t+ t+ '. '. '. ). ). =. =. =. +% +% v+ '. ). =. &. &. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +# ]+ {+ ]+ j+ +# j+ {+ j+ j+ j+ j+ j+ j+ j+ U@ B. i# S$ h# B. $. .. +. +. +. '. v+ r$ r$ r$ v+ '. +. +. +. +. +. +. +. @. @. @. +. /. /. [. [. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. B. #. @. +. /. [. @% @% b& b& r$ r$ 3% ;$ ;$ t+ '. +. +. +. @. @. @. @. +. [. h+ [. +. .. @. /. [. [. h+ [. /. +. .. Z /. /. /. /. /. /. /. /. Z @. /. +. @. .. +. [. @. /. [. [. +. @. +. [. [. [. /. /. /. +. +. +. .. .. .. .. .. .. .. .. /. /. /. /. /. /. /. /. /. +. +. +. @. @. .. B. s# l+ l+ r% /+ s# _. _. l. l. W@ W@ b# b# b# W@ &. .. @. +. /. /. +. +. +. +. /. [. [. /. +. +. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. '. '. '. '. '. '. '. '. v+ v+ v+ v+ v+ '. '. '. :. l. 5. l. :. _. (. 5. (. (. (. (. (. (. (. :+ a. b. v. c. f. g. :+ a. (. :. Z .. +. /. ]+ Z .. <. -. -. -. <. _. _. (. (. (. (. (. (. (. (. n+ 3. <. -. -. <. 0. i. 8. 8. 8. 8. r# r# r# 8. t+ '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. 7. Z@ Z@ b# j. 6. _. <. (. (. /+ /+ l+ l+ l+ /+ F. 5$ q. =. =. =. _. _. :+ :+ ]@ y* #@ z* A* ^@ B* C* D* E* F* G* H* I* J* K* L* M* N* O* P* S# ). i. q+ 0. 6. j. 6. 0. 6. 6. j. j. j. j. W@ W@ 6. 6. 6. 6. 6. 6. 6. 6. q+ i. 6. i. q+ q+ 0. 6. Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ 8. 7. Z@ b# b# Z@ 7. i. 0. _. :. (. (. (. :. :. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. _. (. l. (. :. _. :. l. l. (. (. (. (. (. (. (. (. (. (. (. :. :. :. :. _. _. _. _. _. _. _. _. l. (. _. <. <. _. (. l. <. <. <. _. :. :. ", "Q* R* B% C% z# z# )# [@ + S* =# 6 Z. Y. v# 2+ 2+ 1+ 1+ > > V. V. 1+ > V. 1+ 2+ 2+ > 5+ ; ' ; ' $ ) $ ) ; ~ 1 ~ 1 ~ 1 ; `. `. `. 7 W. X. Y. A+ z+ z+ o* o* T* r* U* v* $$ `. 7 Z. 6 6 Z. Z. `. `. `. `. `. `. `. `. 7+ 7+ 7+ 7+ 3+ 3+ } } } } 3 3 -@ -@ -@ -@ | | 1 1 ; $ $ $ 4 4 4 4 4 4 4 4 4 4 4 4 } } | | 0 0 0 0 0 0 0 0 + + + 0 4 } } } } } } 4 0 0 0 + L@ #$ {# #$ j h ++ $$ W. 1@ .+ 1$ t* V* s* y+ 9+ + + + + + + 0 1 | } 4 0 + l l K@ K@ K@ K@ K@ a+ a+ a+ K@ K@ K@ E# E# '$ '$ n H# 3& 3& 5& H+ )$ l n n n '$ '$ 6& 6& 6& 6& '$ n n n n n n n n n n E E n n n P Q w x <# F# <# F# w y p x p x p p G G o o o o G G G G G G G G G G }# }# }# D E n n n E E E E E E E E G G G G G G G G t t t t t t t t D }# }# C C ,+ V V }# }# }# }# }# }# }# }# G G u u t O O T O O O O O O O d+ T% Z& Z& Z& T% T% T% T% Q% Q% ,+ C C }# G$ G N@ k& k& k& N@ N@ t t t T &$ ^& ,* '* a& ^& J# u t O T T . . O O O O O O O d+ e+ R& R& R& R& R& R& R& )* R& x* s$ s$ s$ s$ s$ e+ V+ 5# ~. C. W+ T O T T ;+ ;+ H H H ;+ . W+ C. C. C. C. C. C. C. C. C. C. C. C. C. C. U+ U+ U+ U+ U+ U+ U+ U+ B. B. B. $. C. U+ d+ =+ . ` ` Z .. .. .. .. . . ` ` ` ` ` ` Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z l& #% &% &% &% #% #% `+ `+ Z+ Z+ ^$ ^$ P# P# P# ^$ W* i+ h. ]+ j+ ]+ h. ~+ h. h. h. h. h. h. h. h. =. =. =. =. =. =. =. =. &. &. &. &. &. &. &. &. +. +. +. +. +. +. +. +. /. @. .. @. /. /. +. .. .. .. .. .. .. .. .. .. ` Z Z .. @. @. +. +. =. =. ). ). '. '. v+ v+ v+ ). =. ). '. v+ '. =. q. q. q. p. t+ r$ r$ r$ q. q. q. q. q. q. q. p. p. =. =. =. =. =. =. =. v+ v+ '. '. ). ). =. =. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +# ]+ {+ ]+ j+ +# j+ {+ j+ j+ j+ j+ j+ j+ j+ U@ W+ %. i# i# $. $. @. /. @. @. '. '. r$ b& b& @% ). @. @. @. @. @. @. @. Z .. .. @. +. /. /. [. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. #. !. +. +. /. [. +% +% r$ r$ r$ r$ 3% 3% ;$ t+ +% [. /. +. +. @. .. .. +. [. h+ [. +. .. @. /. [. [. [. /. /. +. @. @. /. /. /. /. /. /. /. /. Z @. /. +. @. .. +. [. @. /. [. [. +. @. +. [. /. /. +. +. +. +. +. +. .. .. .. .. .. .. .. .. /. /. /. /. /. /. /. /. [. [. /. /. +. +. +. #. /+ r% r% r% /+ s# _. <. l. l. W@ W@ b# b# b# W@ =. .. @. +. +. +. +. +. +. /. /. /. /. /. /. +. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. '. '. '. '. '. '. '. '. @% +% +% v+ '. '. ). ). _. (. l. l. :. _. :. l. (. (. (. (. (. (. (. :+ :+ b. v. v. g. g. :+ :+ (. _. ` Z @. +. ]+ Z ` -. -. -. -. <. _. _. (. (. (. (. (. (. (. (. 3. 3. <. -. -. <. 0. 0. 9. 9. 9. 9. *% *% *% 9. t+ '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. b# Z@ 7. 7. 6. 6. (. (. (. (. /+ /+ l+ l+ l+ /+ F. 5$ q. q. =. =. _. _. d. :+ E& Y@ X* Y* n# Z* p@ `* = .= += @= #= $= %= &= *= == -= ;= >= '* ). 0. q+ 0. 6. j. 6. i. 6. 6. j. j. W@ /$ /$ e# 6. 6. 6. 6. 6. 6. 6. 6. 0. 6. j. 6. 0. 0. i. j. Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ 7. 7. Z@ Z@ Z@ Z@ 7. 7. 0. _. _. _. :. :. _. _. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. :. (. (. (. :. :. :. (. (. (. (. l. l. l. l. l. l. l. l. (. :. _. _. _. _. _. _. _. _. _. _. _. l. (. _. <. <. _. (. l. :. :. _. _. _. _. ", "Q* R* B% C% z# z# )# [@ + S* =# 6 Z. Y. v# *& *& B+ B+ , , c$ c$ B+ c$ c$ , && && B+ 5+ 1+ $ 1+ $ > ; > ; V. 1 V. ; > 1 V. 1 8 ~# ~# G@ Z. Z. 6 Y. W. X. z+ z+ z+ ,= s* 8+ $$ `. 7 Z. Z. Z. Z. 7 `. `. `. `. `. `. `. `. 7+ 7+ 7+ 7+ 3+ 3+ } } } } 3 3 -@ -@ -@ -@ } | | 1 1 ; $ $ ; ; 1 | } 4 0 0 0 4 4 } } | | | 0 0 0 0 0 0 0 0 + + + 0 4 } } } + + + 0 4 4 4 } h 9 8 8 0+ 0+ ++ $$ y+ *@ V* u* u* V* U* ,= H+ + + 0 0 + + + 1 | } 4 0 + l l K@ K@ K@ K@ K@ a+ a+ a+ K@ K@ K@ E# E# '$ '$ n b% 3# 5& 5& H+ H+ H# n n '$ '$ '$ 6& 6& 7& 6& '$ n n n n n n n E n n n n n n E u v o p i <# i <# k p k p k p o o o o G G G G o o G G G G G G G G }# '= '= F a% [# [# [# a% a% a% a% a% a% a% E G G G G G G G G t t t t t t t t D }# }# C C ,+ V V }# }# }# }# }# }# }# }# G u u t O O T T T T T T T T T U+ T% Z& Z& Z& T% T% T% T% Q% Q% ,+ C C }# G$ G N@ k& k& k& N@ N@ t t u O &$ ^& ,* ,* a& &$ R$ t t O T T T . T T T T T T T U+ V+ V+ V+ V+ V+ V+ V+ V+ 5# 5# ~. ~. 5# V+ e+ -+ e+ V+ 5# ~. C. W+ T O T T ;+ ;+ H H H ;+ C. ~. ~. ~. ~. ~. 5# 5# ~. ~. ~. ~. ~. ~. ~. ~. V+ V+ V+ V+ V+ V+ V+ V+ ^. ^. ^. %. ~. V+ e+ -+ C. ` ` ` Z .. .. @. ` ` ` ` ` ` . . Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z l& #% ~% ~% ~% |% |% )= )= != != ~= ~= {= {= {= ^$ ]= Y+ `+ .@ .@ @ `+ Z+ `+ `+ `+ `+ `+ `+ `+ h. =. q. q. q. q. q. q. q. *. *. *. *. *. *. *. &. +. +. +. +. +. +. +. +. /. @. .. @. /. /. +. .. @. @. .. .. .. .. @. @. ` Z Z .. @. @. +. +. v+ v+ '. '. ). ). =. =. v+ ). =. ). '. v+ '. =. q. r. r. <+ ;$ 3% 3% 3% <+ r. r. r. r. r. r. q. q. q. q. q. q. q. q. p. q. q. p. p. t+ t+ r$ v+ +. +. +. +. +. +. +. +. @. @. @. @. @. @. @. @. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +# ]+ {+ ]+ j+ +# j+ {+ j+ j+ j+ j+ j+ j+ j+ U@ W+ %. i# i# B. B. +. [. @. @. '. '. r$ b& b& @% ). @. @. @. @. @. @. @. .. .. @. @. +. +. /. /. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. j$ j$ [. /. +. +. '. ). t+ t+ r$ r$ 3% 3% 3% r$ @% h+ h+ [. /. +. +. +. +. [. h+ [. +. .. @. /. +. +. +. +. /. /. [. [. /. /. /. /. /. /. /. /. Z @. /. +. @. .. +. [. @. /. [. [. +. @. +. [. .. .. @. @. @. @. @. @. .. .. .. .. .. .. .. .. /. /. /. /. /. /. /. /. [. [. [. /. /. +. +. !. /+ r% r% r% /+ s# _. <. l. l. W@ W@ b# b# b# W@ ). @. @. @. @. +. /. /. /. /. /. +. +. /. /. /. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. '. '. '. '. '. '. '. '. @% +% +% v+ '. '. ). ). _. (. l. (. _. _. :. l. (. (. (. (. (. (. (. :+ g. v. b. b. :+ :+ g. g. (. _. ` Z @. +. ]+ Z . -. -. <. _. _. _. _. (. (. (. (. (. (. (. (. 3. 3. <. _. _. <. 0. 0. 9. 9. 9. 9. *% *% *% 9. t+ '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. b# Z@ 7. 8. i. 6. (. l. (. (. /+ /+ l+ l+ l+ /+ 5$ s. q. q. =. =. i. _. f. ^= /= <$ n# (= _= := <= [= }= |= 1= 2= 3= 4= 5= 6= 7= 8= 9= 0= a= b= q. 9. (+ 9. Z@ b# Z@ 8. 7. 7. Z@ Z@ b# :$ :$ _* Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ 7. b# :$ :$ Z@ 7. Z@ :$ N$ N$ N$ N$ N$ N$ N$ N$ N$ N$ O$ O$ O$ O$ N$ Z@ 6. :. _. _. _. _. _. _. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. :. :. :. (. (. (. :. (. (. (. l. l. l. l. l. l. l. l. (. :. _. _. _. _. _. _. _. _. _. _. _. 5. l. :. _. _. :. l. 5. l. l. (. :. _. -. ", "B% B% n* z# z# z# z# [@ @ =# 5 Z. 7 Y. v# *& *& B+ B+ , , c$ c$ , c$ c$ , && && B+ c$ 1+ 1+ 1+ 1+ > > > > 5+ V. > > > > V. 5+ {# ~# G@ [@ Z. Z. 7 7 W. W. z+ z+ y+ *@ v* .+ $$ `. 7 7 Z. 7 `. `. 7 `. `. 8 8 `. `. 7 7+ 7+ 7+ 7+ 3+ 3+ } } } } 3 3 -@ -@ -@ 3 } } } | | | | 1 # $ ; 1 } 4 0 0 0 0 4 | | | } } 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 4 n l l + 0 4 } } j 8 `. 8 0+ M@ 0+ }$ .+ .+ V* V* V* V* c= V* )$ + 0 0 0 0 + l } 4 4 0 + + l l a+ a+ a+ K@ K@ K@ K@ K@ K@ K@ K@ E# E# '$ '$ n F$ 3# 5& P% P% H+ H# E n '$ '$ 6& 6& 6& 7& 6& '$ n n n n n n n E E n l l n E E G o k i i i k k i i k k k o o o k o G u u G o k G G G G G G G G F F F F a% a% a% a% F F F F F F F D D G G G G G G G G G u u u t t t }# }# }# }# }# C C C }# }# }# }# }# }# }# }# t t t O O O O O O O O O O O O d+ T% Z& Z& Z& T% T% T% T% 9& 9& C C C C J# u N@ k& k& k& N@ N@ t t u O ^& ^& ,* ,* 0& D. R# O O O O O O O T T T T T T T T U+ V+ V+ V+ V+ V+ V+ V+ %. %. %. %. ~. V+ e+ -+ e+ V+ 5# ~. C. W+ T O . . S S S@ S@ S@ S $. %. ~. ~. ~. 5# 5# 5# ~. ~. ~. ~. ~. ~. ~. ~. s$ s$ s$ s$ s$ s$ s$ s$ {. {. {. {. t$ s$ x* e+ $. ` ` ` ` Z .. @. Z Z ` ` ` . . . Z Z Z Z Z Z Z Z .. Z Z ` ` Z Z {@ T$ %% %% %% $% $% d= d= != != ~= ~= {= {= {= ~= W* Y+ Z+ `+ `+ `+ `+ `+ @ @ @ @ @ @ @ {+ 5$ q. q. q. q. q. q. q. *. *. *. *. *. *. *. &. ). @. @. @. @. @. @. @. +. .. Z .. +. /. @. Z +. @. @. .. .. @. @. +. .. .. .. .. .. @. @. @. +% +% v+ '. ). =. &. &. v+ ). =. ). '. v+ '. =. <+ <+ <+ <+ ;$ ;$ ;$ ;$ ;$ ;$ ;$ <+ <+ r. r. r. q. q. q. p. p. t+ t+ t+ *. *. q. p. t+ r$ b& +% '. +. +. +. +. +. +. +. @. @. @. @. @. @. @. @. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +# ]+ {+ ]+ j+ +# j+ {+ j+ j+ j+ j+ j+ j+ j+ U@ C. ^. h# h# B. B. +. [. +. +. '. v+ r$ r$ r$ v+ '. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. a# a# [. /. +. @. ). =. t+ t+ t+ r$ 3% 3% e= b& @% h+ h+ [. [. [. [. /. +. [. h+ [. +. .. @. /. @. @. @. @. +. [. h+ T@ /. /. /. /. /. /. /. /. Z @. /. +. @. .. +. [. @. /. [. [. +. @. +. [. Z Z .. .. .. @. @. @. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. [. [. /. /. +. +. +. !. s# l+ l+ r% /+ s# _. _. l. l. W@ W@ b# b# b# W@ ). @. .. .. @. +. /. [. [. /. +. +. +. +. /. [. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. '. '. '. '. '. '. '. '. v+ v+ v+ v+ v+ '. '. '. <. :. l. (. _. <. _. (. (. (. (. (. (. (. (. :+ f. v. b. y. a. :+ g. f. (. :. Z .. +. /. ]+ Z . -. _. :. (. (. (. (. (. (. (. (. (. (. (. (. 3. n+ :. :. :. :. i. 0. 8. 8. 8. 8. r# r# r# 8. t+ '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. 7. 7. 7. 8. 6. j. l. l. (. (. /+ /+ l+ l+ l+ /+ 5$ s. q. q. q. =. i. _. (& /= E& (% $ f= g= h= i= j= k= l= m= n= o= p= q= r= s= t= u= v= w= x= r. (+ o+ 9. Z@ b# Z@ 7. 7. 7. Z@ Z@ Z@ Z@ b# b# Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ :$ _* _* b# Z@ b# _* N$ N$ N$ N$ N$ N$ N$ N$ & N$ O$ r# r# O$ N$ b# W@ (. :. _. _. _. :. :. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. l. :. _. :. (. l. (. _. l. (. (. (. (. (. (. (. (. (. (. (. :. :. :. :. _. _. _. _. _. _. _. _. 5. l. :. _. _. :. l. 5. l. l. (. :. _. -. ", "D# D# D# )# z# z# z# ~# [@ 5 6 7 `. X. Y. *& *& B+ B+ , , c$ c$ , c$ C+ , && && *& c$ *& *& B+ B+ , , c$ c$ C+ c$ , B+ B+ , c$ 5+ ~# y= z= A= B= C= D= E= F= G= F@ F@ F@ x@ 6@ D@ $$ 8 `. `. `. `. 8 9 Z. 7 8 9 9 8 7 Z. c$ c$ c$ c$ V. V. 1 1 1 1 ~ ~ =@ =@ =@ ~ } 3+ 3+ 3+ K& K& K& K& V. 5+ 5+ 3+ 3+ K& K& 9+ + 0 } | 1 | } 4 0 0 0 0 0 0 0 0 4 4 4 4 0 0 0 0 + + + + 0 0 0 0 j 8 `. 8 0+ M@ 1$ .+ G# 1$ V* v* H= c= I= J= )$ + 0 4 4 0 + l + + + + + l l l 6+ 6+ a+ a+ K@ E# E# '$ K@ K@ K@ E# E# '$ '$ n Q$ 3# O% D+ D+ 5& H# D n '$ 6& 6& 6& 7& 7& 6& '$ n n n n n n n D E n l l n E D q q M@ M@ M@ q j@ c+ M@ M@ M@ q j@ j@ j@ c+ k o G u u G o k G G G G G G G G a% a% a% a% F F F F '= '= '= '= '= '= '= }# D G G G G G G G o o o G u u u t }# }# }# D D D D E }# }# }# }# }# }# }# }# T T O O O O t t O O O O O O O d+ T% Z& Z& Z& T% T% T% T% ^% ^% C C C C R# O N@ k& k& k& N@ N@ t t G t ^& ^& a& ,* 0& D. &$ . T T O t u u T T T T T T T T U+ U+ U+ U+ U+ U+ U+ U+ W+ C. C. $. C. C. W+ U+ e+ V+ 5# ~. C. W+ T O ` ` ,. ,. /@ /@ /@ ,. $. %. %. ~. 5# 5# 5# V+ ~. ~. ~. ~. ~. ~. ~. ~. t$ K= K= K= K= K= K= K= {* K= K= L= L= K= {* x* $. Z ` . ` Z @. +. Z Z Z ` . . . T Z Z Z Z Z Z Z Z @. .. ` . . ` .. m@ T$ %% %% %% $% $% d= d= d= d= M= M= :& :& :& M= ^$ Y+ Y+ Y+ Y+ Z+ `+ @ @ @ @ @ @ @ @ {+ 5$ q. q. q. q. q. q. q. *. *. *. *. *. *. *. &. =. .. .. .. .. .. .. .. @. Z ` Z @. @. .. ` /. +. @. .. .. @. +. /. @. @. @. .. .. .. .. .. '. '. '. '. ). ). ). ). v+ ). =. ). '. v+ '. =. ;$ ;$ ;$ ;$ <+ <+ <+ <+ 3% 3% 3% ;$ ;$ <+ <+ <+ p. p. p. t+ t+ r$ r$ r$ p. p. p. p. t+ t+ t+ '. '. +. +. +. +. +. +. +. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +# ]+ {+ ]+ j+ +# j+ {+ j+ j+ j+ j+ j+ j+ j+ U@ B. h# S$ S$ #. #. +. [. /. /. v+ v+ r$ t+ t+ '. v+ /. /. /. /. /. /. /. h+ h+ h+ [. /. +. @. @. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. 8# 8# /. /. /. +. '. '. p. t+ t+ t+ 3% e= e= b& '. +. /. /. /. /. [. [. +. [. h+ [. +. .. @. /. [. /. +. @. @. +. [. h+ /. /. /. /. /. /. /. /. Z @. /. +. @. .. +. [. @. /. [. [. +. @. +. [. .. .. .. @. +. +. +. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. +. +. @. @. #. n+ |. 1. l+ 4. /+ (. :. l. l. W@ W@ b# b# b# W@ '. @. .. .. .. +. /. [. [. /. +. @. @. +. /. [. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. '. '. '. '. '. '. '. '. '. '. '. v+ v+ v+ v+ v+ <. :. (. :. <. <. _. (. (. (. (. (. (. (. (. :+ f. v. b. y. a. :+ g. f. 5. (. .. @. /. [. j+ @. ` <. :. l. 5. 5. l. l. (. (. (. (. (. (. (. (. n+ s# (. l. l. (. 6. i. 7. 7. 7. 7. O$ O$ O$ 7. t+ '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. 8. 8. 7. Z@ j. j. l. l. (. (. /+ /+ l+ l+ l+ /+ 5$ s. r. q. q. q. i. _. g. m. :% <% (= N= O= P= Q= R= S= T= U= V= W= X= Y= Z= `= - .- +- @- x= `@ (+ o+ 9. Z@ b# b# 7. Z@ Z@ 7. 7. 7. 7. 8. 8. b# b# b# b# b# b# b# b# 7. b# _* :$ Z@ 7. Z@ :$ N$ N$ N$ N$ N$ N$ N$ N$ & N$ O$ r# r# O$ N$ b# e# 5. (. :. _. :. :. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. l. :. <. _. l. 5. (. _. l. l. (. :. :. _. <. <. :. :. :. :. (. (. (. (. _. _. _. _. _. _. _. _. 5. l. (. :. :. (. l. 5. _. _. _. _. _. _. ", "!# !# '# )# )# + + ~# [@ 6 Z. `. 8 W. Y. +$ 2+ B+ 1+ , > c$ V. c$ 5+ C+ > && #- F& > *& 2+ B+ 1+ , > c$ V. 7+ V. , 1+ B+ > c$ $$ G@ z= A= A= B= C= E= $- F= G= G= G= F@ x@ %- c }$ $$ $$ 1@ 1@ $$ }$ j X. 7 8 9 9 8 7 Z. V. V. c$ V. V. V. 1 1 1 1 ~ ~ ~ =@ ~ ~ } 3+ 3+ K& 9+ H+ H+ H+ 9+ 9+ 9+ 9+ K& K& K& K& + 0 } | 1 | } 4 0 0 0 0 0 0 0 0 } } } 4 0 + + + 4 4 0 0 + l l n 9 8 `. 8 0+ M@ 1$ a K G# .+ s* s* V* J= R+ H# + 9+ 4 K& 0 H+ n H# n )$ l )$ l )$ + 3 3 6+ a+ K@ E# '$ >% K@ K@ K@ E# E# '$ '$ n G$ b% 5& D+ K& H+ H# D n '$ '$ '$ 6& 6& 6& '$ n n n n n n n n D E n + + n E D M@ M@ M@ M@ q j@ c+ M M@ M@ M@ q j@ j@ c+ c+ k o G u u G o k G G G G G G G G n [# [# a% F '= '= '= f+ f+ f+ f+ f+ f+ f+ C D G G G G G G G k k k o G G u u }# }# D D E n n n }# }# }# }# }# }# }# }# . . T T O t t u t t t t t t t t U% T% T% T% U% U% U% U% ,% D }# C C ,+ ^& T =+ h@ N@ N@ N@ =+ t t G t ;+ ^& R# R$ '% D. Z ` . T O u G G T T T T T T T T T U+ T U+ T U+ T U+ O U+ . C. Z $. Z $. d+ U+ W+ C. C. . T O Z Z Z &. &. &. &. Z $. %. $. ~. W+ 5# U+ V+ C. ~. C. ~. C. ~. C. ~. {. L= {. L= {. L= {. L= x* {* t$ L= {. K= t$ s$ B. Z ` . . Z @. +. Z Z Z ` . . T T Z Z Z Z Z Z Z Z @. .. ` . . ` .. m@ &- *- &- &- &- T$ T$ @ @ @ =$ =$ %$ %$ %$ =$ *$ ~+ U ,+ U ~+ @ ]+ @ {+ @ {+ @ {+ @ {+ q. q. q. q. q. q. q. q. *. *. *. *. *. *. *. &. Z Z Z Z Z Z Z Z .. Z . ` .. @. Z . /. +. @. .. .. @. +. /. +. +. @. @. .. Z Z ` &. =. =. ). '. v+ v+ +% v+ ). =. ). '. v+ '. =. r$ r$ r$ t+ p. q. q. q. =- b& b& r$ t+ t+ p. p. p. ). t+ '. r$ +% b& @% b& v+ r$ '. p. =. q. &. +. +. +. +. +. +. +. +. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +# ]+ {+ ]+ j+ +# j+ {+ j+ j+ j+ j+ j+ j+ j+ j+ #. S$ a# j$ !. #. +. [. h+ [. +% v+ '. '. p. ). [. [. [. [. [. [. [. [. Z% t& T@ h+ /. +. @. @. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. #. #. +. +. /. [. +% @% ). ). t+ t+ r$ b& b& b& =. .. @. @. +. /. /. /. +. [. h+ [. +. .. @. /. t& h+ v+ @. @. @. +. /. /. /. /. /. /. 8# /. /. Z @. /. +. @. .. +. [. @. /. [. [. +. @. +. [. @. @. +. +. /. [. [. [. [. [. +% +% +% +% +% +% /. /. /. /. /. /. /. /. /. +. +. +. @. @. .. B. 3. |. 1. l+ 4. 4. l. (. l. l. W@ W@ b# b# b# W@ j. :. _. <. _. :. l. u$ u$ l. (. :. :. (. l. u$ +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. '. '. '. '. '. '. '. '. ). ). '. '. v+ +% +% @% <. :. (. :. <. <. _. (. (. (. (. (. (. (. (. (. f. v. b. y. a. :+ g. f. 5. (. @. +. [. h+ +# @. -. _. (. 5. u$ u$ 5. 5. (. (. (. (. (. (. (. (. s# /+ [. u$ h+ 5. '. 6. '. j. t+ Z@ t+ Z@ t+ t+ '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. 9. 8. 7. Z@ W@ W@ (. (. (. (. (. /+ /+ /+ /+ (. q. r. r. r. r# 8. -- (@ ;- >- X@ ,- '- )- !- ~- {- ]- ^- /- (- _- :- <- [- }- |- 1- 2- 3- 4- 5- *. o+ o+ 9. Z@ :$ b# Z@ Z@ Z@ 7. 7. 8. 9. 9. (+ b# W@ b# W@ b# W@ b# W@ 8. j. b# W@ 7. i. 7. b# Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ b# Z@ 7. 8. 8. 7. Z@ b# <* u$ W@ :. 6. :. j. l. j. (. j. (. j. (. j. (. (. /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ 5. :. <. _. l. 5. (. <. l. l. (. :. _. -. -. k. _. _. _. :. (. l. l. l. _. _. _. _. _. _. _. _. u$ 5. (. :. :. (. 5. u$ W k. q+ 0. 6. j. ", "~# ~# G@ G@ [@ Z. Z. Z. Z. Z. Z. Z. Z. Z. Z. 6- 6 $$ `. v# S* > 4 P. ]% L. H@ R. K. O. {% > ; > ; 1+ $ 1+ $ V. 1 V. 1 V. 1 V. 7 @ B= 7- 7- C= D= D= E= $- E= C= 7- @$ G= o$ c *@ 8- 8- 8- C+ C+ C+ 5+ C+ 5+ 5+ 5+ | | | | $ | K& 4 | 1 1 | | | | | | 2 | | } } } } } } } } 4 4 4 } } } } } } } 0 0 0 } 1 ; 0 0 0 0 0 0 0 0 } } 4 4 0 0 + + + + + + + + + + ++ ++ ++ 0+ 0+ 0+ M@ M@ 0+ 0+ 0+ G# G# r r r D+ K& D+ K& D+ K& D+ K& F$ )$ P% 9+ 3& H# b% )$ n '$ '$ '$ '$ '$ '$ '$ >% '$ K@ a+ a+ K@ '$ >% L@ L@ L@ L@ h h h h k k k k q q q q E E E n n n n n D D D D D D D D c+ K K K J J L L r r |# |# K K J M u P v v w w p p P P P P P P P P '$ '$ '$ '$ '$ '$ '$ '$ U% U% U% U% U% U% U% U% + D D l n C C E }# }# }# }# }# }# }# }# C C C C C C C C }# }# }# }# }# }# }# }# J# J# J# J# J# J# J# J# J# R$ R$ R# R# R$ R$ J# }# }# C C C C ,+ ,+ V R# J# G$ 0% 0% G$ G$ i+ 9& }# D }# O . Z . . . k. k. k. _+ k. . T O O O . ` .. O O O O O O O O t T S Z &. . ;+ t ;+ T S . ,. Z &. &. ,. ,. ,. ,. ,. ` ` ` ` ` ` C. C. C. C. C. W+ W+ . W+ . W+ . W+ . C. .. #. @. B. ` W+ 5# s$ V+ x* e+ )* -+ )* 5# f# i# s$ 5# f# i# 5# n+ 3. ^+ 3. s# s# ^+ }. m+ }. s& N@ s& m+ 3. n+ .. .. .. .. .. .. .. .. ` .. @. +. +. @. .. C. 9- 0- 9- 9- 9- S& S& l& {@ {+ G. G. H. 9# a- 9# F. Z i+ T V . h. .. V T ~+ Z ]+ /. .# h+ q. q. q. q. q. q. q. q. p. q. /@ S@ S@ /@ q. ). .. $. C. $. B. B. $. C. $. $. $. $. $. $. $. $. [. @. ` ` Z @. @. @. /. +. @. .. .. @. +. /. .. Z Z ` Z @. /. [. +. +. +. +. +. +. +. +. ,. &. &. =. ). ). '. '. '. '. '. '. '. '. '. '. @% /. ). @. '. +. =. ` '. +. '. +. '. +. '. +. +. /. [. h+ [. /. @. .. [. [. [. /. +. +. @. @. @. @. +. +. +. +. +. +. .. +. [. +. ` . ` @. @. @. .. Z .. +. [. h+ .. .. @. @. +. +. /. /. Z 8# T@ T@ /. @. @. /. [. [. [. [. [. [. +% [. /. /. /. /. /. /. /. /. @. @. @. @. @. @. @. @. j$ j$ j$ j$ j$ j$ j$ j$ $. !. a# q$ j$ !. !. !. /. /. /. /. /. /. /. /. /. /. v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ '. '. '. '. '. '. '. '. v+ v+ r$ v+ v+ v+ /. /. @. ` B. a# a# i# B. !. Z% t& T@ h+ /. +. @. @. /. /. /. /. /. /. /. /. 8# 8# /. /. /. /. v+ v+ +% '. p. t+ b& b& r$ p. =. +. /. /. @. .. @. /. [. +. @. /. h+ t& T@ j$ j$ K$ K$ K$ j$ j$ [. [. /. /. v+ v+ r$ r$ r$ W@ t. g. :+ :+ :+ :+ g. g. f. :+ (& a. :+ :+ a. u$ /. +# +# +# +# +# +# +# .# j+ ]+ j+ .# .# +# ]+ [. (. :. (. 5. 5. l. :. :. (. l. u$ u$ l. (. :. +. +. +. +. +. +. +. +. @. +. +. +. /. /. [. 5. a. y. y. y. a. a. a. a. (. (. +. +. +. +. j+ +. (. :+ :+ :+ :+ :+ :+ :+ a. a. :+ :+ g. g. f. _. .. .. {+ .. {+ .. {+ .. h. Z F. =. G. ). G. ). '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. j. $@ $@ $@ $@ $@ $@ $@ o. t. $@ a. a. :+ g. i. `@ b- c- d- e- f- g- h- i- j- k- l- m- n- o- p- q- r- s- t- u- v- w- x- y- z- A- B- C- D- E- 9. 8. i. i. i. i. i. i. i. i. i. i. 6. j. W@ W@ W@ +% [. +% [. +% [. +% [. +% [. +% [. +% [. +% +% 6. 6. j. j. W@ /$ /$ /$ j. j. j. j. j. j. j. j. j. j. Z@ j. Z@ j. Z@ j. b# j. 7. 6. 7. W@ _* <* /+ l+ l+ l+ l+ l+ l+ l+ F- G- r% r% G- G- r% 1. 3. <. <. <. <. <. <. <. u$ 5. 5. l. (. (. :. :. .. +. /. +. @. .. @. /. +. +. +. +. +. +. +. +. /+ /+ (. (. (. (. j. j. W@ 6. 8. 7. :$ c# ", "7 7 Z. Z. 6 6 6 Z. Z. Z. Z. Z. Z. Z. Z. H- ,$ 8 `. =# S* ; 4 {% ]% K. H@ b$ ] ^ {% ]% $ $ $ ; ; ; ; 1 1 1 1 1 1 1 1 G@ C= C= C= C= 7- 7- 7- $- E= C= 7- 7- C= E= 9 8- ;* ;* ;* 8- 8- C+ C+ C+ C+ 5+ 5+ | | | | ; } 0 0 } 1 | } | | | | | | | | } } } } } } } } } } } } } } } } 4 4 0 + 0 4 | 1 0 0 0 0 0 0 0 0 } } 4 4 0 0 + + + + + + + + + + ++ ++ ++ 0+ 0+ 0+ M@ M@ 0+ 0+ 0+ M@ M@ q q q P% P% P% P% P% P% P% P% F$ 3& P% P% 3& b% b% )$ n '$ '$ '$ '$ '$ '$ '$ >% '$ K@ a+ a+ K@ '$ >% |$ |$ |$ |$ L@ L@ h h k k q q r r r q H# n n n n E E E D D D D D D D D |# K K K J J L L r r |# |# K K J M u P v v w w p p w w v v v v P P '$ '$ '$ '$ '$ '$ '$ '$ ^% ^% ^% ^% ^% ^% ^% ^% l }# }# n E ,+ ,+ D }# }# }# }# }# }# }# }# C C C C C C C C }# }# }# }# }# }# }# }# J# J# J# J# J# J# J# J# J# R$ R$ R# R# R$ R$ J# R$ R$ R$ R$ R$ R$ R$ R$ R# R# R$ J# J# J# J# R$ Y+ >+ f+ F }# ,+ . Z . . k. k. l@ l@ l@ l@ T T O t O T ` Z O O O O O O O O ;+ ;+ S S S S ;+ ;+ ;+ S S S ,. &. &. &. /@ /@ /@ /@ ,. ,. ` ` ` ` C. C. ~. ~. ~. ~. . . . . . . . . . ` Z .. .. Z ` W+ C. 5# 5# V+ V+ e+ e+ e+ ~. i# i# 5# 5# ^. ^. 5# 3. ^+ ^+ 3. /+ 4. s# 3. ^+ m+ }. }. }. ^+ 3. n+ .. .. .. .. .. .. .. .. Z .. @. +. +. @. .. $. t$ K= L= L= {. {. ^. ^. B. B. .. ). ). ). p. '. .. Z . T T . Z .. . . ` .. @. +. /. [. =. q. q. q. q. q. q. q. p. q. *. *. *. *. q. ). .. $. $. $. B. B. $. $. $. $. $. $. $. $. $. $. /. @. ` ` .. +. @. @. /. +. @. .. .. @. +. /. @. .. Z Z Z .. +. /. +. +. +. +. +. +. +. +. .. .. @. @. @. @. +. +. +. +. +. +. +. +. +. +. [. +. @. @. +. +. @. Z +. +. +. +. +. +. +. +. +. /. [. [. /. +. .. Z [. [. [. /. +. +. +. @. [. /. /. /. +. +. @. @. .. +. [. +. .. ` .. +. /. +. @. @. @. +. /. h+ .. .. @. @. +. +. /. /. Z /. T@ T@ /. @. +. /. [. [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. +. +. +. +. +. +. +. +. 8# 8# 8# 8# 8# 8# 8# 8# B. !. a# a# 8# !. !. 8# /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. v+ v+ v+ v+ v+ v+ v+ v+ '. '. '. '. '. '. '. '. r$ r$ r$ r$ v+ v+ /. /. +. .. #. a# J$ ^. %. i# h+ h+ h+ [. /. +. @. @. /. /. /. /. /. /. /. /. 8# 8# /. /. /. /. v+ v+ b& t+ p. t+ e= e= 3% p. =. +. /. /. @. .. @. /. [. +. @. +. [. h+ [. 8# 8# S$ S$ S$ 8# 8# /. /. /. /. v+ v+ r$ r$ r$ W@ o@ b. b. b. b. b. b. y. c. b. I- y. b. b. y. [* +# J- J- J- J- J- J- J- J- .@ `+ @ +@ J- +@ {+ [. (. :. (. 5. 5. l. :. :. (. l. 5. 5. l. (. :. +. +. +. +. +. +. +. +. +. +. /. /. /. [. [. 5. a. y. y. y. a. a. a. a. (. (. +. +. +. +. j+ +. (. :+ :+ :+ :+ :+ :+ :+ a. a. :+ :+ g. g. f. _. .. {+ {+ {+ {+ {+ {+ {+ h. h. {+ {+ ]+ ]+ ]+ j+ '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. j. j. $@ $@ $@ $@ $@ $@ $@ o. t. $@ o@ o@ $@ t. -- 3% }% K- L- +& M- N- O- P- Q- R- S- T- U- V- W- X- Y- Z- `- ; .; +; @; #; $; %; &; *; =; -; ;; i. i. i. i. i. i. i. i. 6. 6. 6. 6. j. j. j. j. [. [. [. [. [. [. [. [. +. +. +. +. +. +. +. +. :. (. (. (. l. 5. 5. 5. (. (. (. (. (. (. (. (. Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ b# b# 7. 7. 7. Z@ :$ e# l+ >; >; >; >; >; >; >; ,; '; >; ); '; '; >; |. n+ _. _. _. _. _. _. _. l. l. l. l. l. (. (. (. .. +. /. +. @. .. @. /. +. +. +. +. +. +. +. +. /+ /+ (. (. (. (. j. j. Z@ 8. 9. 7. & !; ", "Z. Z. 6 6 5 5 5 Z. Z. Z. Z. Z. Z. Z. Z. ~; ,$ `. 7 5 =# ; } {% ]% K. H@ b$ ] ^ {% {% # $ $ ; ; 1 1 1 1 1 1 1 1 1 1 {# {# ~# G@ [@ @ @ + {# ~# ~# G@ G@ ~# ~# 8 8- ;* 8- 8- 8- 8- C+ C+ 5+ 5+ 5+ 5+ | | | | 1 4 + + 4 | } 4 } } } } } } } } } } } } } } } } } } } } } } } 4 0 + + + + 0 4 } 0 0 0 0 0 0 0 0 } } 4 4 0 0 + + + + + + + + + + j j j h h h i i h h h i i k k k H+ H+ H+ H+ H+ H+ H+ H+ 0% )$ 9+ 9+ )$ H# H# )$ + K@ K@ K@ K@ K@ K@ K@ '$ E# E# K@ K@ E# E# '$ x x x x p p k k k k q q r r r q H+ l l n E E D D D D D D D D D D |# |# |# K K J J J r r |# |# K K J M u P v v w w p p <# p p w w v v P >% >% >% >% >% >% >% >% ,% ,% ,% ,% ,% ,% ,% ,% n C C E D V V }# }# }# }# }# }# }# }# }# C C C C C C C C }# }# }# }# }# }# }# }# ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ }# C C ,+ ,+ C C }# V V ,+ C C }# D D ,+ ,+ C C C ,+ V i+ U >+ f+ '= }# ,+ . ` . . k. k. l@ l@ l@ l@ O O t t O T . ` T T T T T T T T S S ;+ ;+ ;+ ;+ S S S S S ,. ,. ,. &. &. /@ /@ /@ /@ ,. ,. ` ` ` ` C. C. ~. ~. ~. ~. . . . . . . . . T . ` ` ` ` . U+ $. ~. ~. ~. 5# 5# 5# 5# %. h# h# ~. 5# ^. %. V+ W+ U+ U+ $. 8# j$ 8# #. $. C. C. C. C. $. B. #. .. .. .. .. .. .. .. .. Z .. @. @. @. @. .. $. s$ K= t$ {. {. ]. ^. i# B. B. .. .. =. &. &. &. Z Z ` . . ` Z Z Z Z Z .. @. @. @. +. =. =. =. =. =. =. =. =. =. =. ). '. '. ). =. =. Z B. B. B. $. $. B. B. B. B. B. B. B. B. B. B. /. @. Z Z @. +. +. .. /. +. @. .. .. @. +. /. /. +. @. .. .. .. @. @. +. +. +. +. +. +. +. +. /. /. +. +. +. +. @. @. +. +. +. +. +. +. +. +. [. +. .. @. +. /. @. Z +. +. +. +. +. +. +. +. /. /. /. /. @. .. ` . [. [. /. /. /. +. +. +. [. [. /. /. +. @. @. @. .. +. /. /. @. @. +. [. h+ [. /. +. +. +. /. [. .. .. @. @. +. +. /. /. .. /. h+ h+ /. +. +. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. +. +. +. +. +. +. +. +. .. /. h+ h+ /. @. +. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. v+ v+ v+ v+ v+ v+ v+ v+ '. '. '. '. '. '. '. '. r$ r$ r$ r$ v+ v+ /. /. [. @. #. a# K$ %. ~. ^. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. 8# 8# /. /. /. /. v+ v+ b& t+ p. t+ e= e= 3% p. ). +. [. /. @. .. +. [. [. +. @. @. /. [. +. B. !. h# h# h# !. !. +. +. /. /. v+ v+ r$ r$ r$ W@ C- I- b. v. v. b. I- {; c. b. I- y. b. b. y. [* +# J- J- J- J- J- J- J- +@ @ Z+ `+ .@ +@ @ h. [. (. :. (. 5. 5. l. :. (. (. l. 5. 5. l. (. (. +. +. +. +. +. +. +. +. /. /. /. [. [. h+ h+ u$ a. y. y. y. a. a. a. a. (. (. +. +. +. +. j+ +. (. (. (. (. (. (. (. (. (. (. (. (. :. :. :. :. @. ]+ ]+ ]+ ]+ ]+ ]+ ]+ {+ {+ {+ ]+ ]+ j+ j+ j+ '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. j. j. $@ $@ $@ $@ $@ $@ $@ o. t. $@ o@ o@ $@ t. -- <+ }% r# ]; ^; /; (; O- _; :; <; [; }; |; 1; 2; 3; 4; 5; 6; 7; 8; 9; 0; a; b; c; $+ d; e; -- ;; i. i. i. i. i. i. i. i. j. j. j. j. 6. 6. 6. 6. /. /. /. /. /. /. /. /. .. .. .. .. .. .. .. .. (. (. (. l. l. l. 5. 5. (. (. (. (. (. (. (. (. Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ :$ b# Z@ 7. 7. 7. Z@ j. l+ >; >; >; >; >; >; >; f; ); g; g; ); ); >; |. s# :. :. :. :. :. :. :. (. (. (. l. l. l. l. l. .. +. /. +. @. .. @. /. +. +. +. +. +. +. +. +. /+ /+ (. (. (. (. j. j. 7. 8. 9. 8. N$ & ", "6 6 5 5 =# =# =# Z. Z. Z. Z. Z. Z. Z. Z. ~; ,$ 7 7 5 5 ; } {% ]% K. H@ b$ ] ^ {% h; # # $ ; 1 1 | 1 1 1 1 1 1 1 1 ~# ~# ~# G@ [@ [@ [@ @ ~# ~# ~# ~# ~# ~# ~# `. 8- ;* 8- 8- 8- C+ C+ C+ 5+ 5+ 5+ | | | | | | 0 l l 0 } 4 0 } } } } } } } } } } } } } } } } | } } } } 4 4 4 l l l + + 0 0 4 0 0 0 0 0 0 0 0 } } 4 4 0 0 + + + + + + + + + + j @+ j L@ h L@ i <# h L@ h <# i p k k l l )$ l )$ l )$ l 0% l 9+ 0 )$ n H# l K@ K@ K@ K@ K@ K@ K@ K@ E# E# E# E# E# E# E# E# x x x x p p k k k k q q r r r q 9+ + l n E D }# }# D D D D D D D D j@ |# |# K K K J J r r |# |# K K J M u P v v w w p p L@ L@ <# p w w v v >% >% >% >% >% >% >% >% >% >% >% >% >% >% >% >% E ,+ ,+ D }# i+ i+ C }# }# }# }# }# }# }# }# C C C C C C C C C C C C C C C C ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ }# C C ,+ ,+ C C }# i+ i+ V ,+ }# D E E ,+ ,+ ,+ ,+ V i+ ~+ h. >+ >+ f+ f+ C ,+ . ` . . k. k. l@ l@ l@ l@ t t t t O O T . T T T T T T T T &. S ;+ N N ;+ S &. S S ,. ,. ,. ,. ,. ,. /@ /@ /@ /@ ,. ,. ` ` ` ` C. C. ~. ~. ~. ~. ` ` ` ` ` ` ` ` T T . . . . T T $. %. %. %. %. %. %. ~. %. S$ h# ~. 5# ^. %. e+ U+ U+ U+ C. #. !. #. $. B. B. B. B. B. B. #. #. .. .. .. .. .. .. .. .. .. .. .. @. @. .. .. B. s$ {* t$ {. {. ]. i# i# #. B. .. Z &. ,. S S Z Z Z ` ` Z Z Z @. .. .. .. .. .. .. .. .. .. =. .. =. .. =. .. &. @. '. [. +% +. ). Z $. B. #. #. $. $. B. #. B. B. B. B. B. B. B. B. /. @. Z .. +. /. +. .. +. +. @. @. @. @. +. +. /. /. +. @. @. .. .. .. +. +. +. +. +. +. +. +. h+ [. [. /. +. +. @. @. +. +. +. +. +. +. +. +. /. @. .. @. +. /. +. .. +. +. +. +. +. +. +. +. /. /. +. @. .. ` . T /. /. /. /. /. /. +. +. @. @. @. @. @. @. @. @. @. @. +. /. /. /. [. h+ T@ T@ h+ [. /. /. /. /. .. .. @. @. +. +. /. /. +. /. /. /. /. +. +. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. [. @. @. @. @. @. @. @. @. @. /. h+ [. +. @. +. [. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ r$ r$ r$ r$ v+ v+ /. /. T@ +. !. j$ S$ ~. 5# ^. .. .. @. @. +. +. /. /. /. /. /. /. /. /. /. /. 8# 8# /. /. /. /. v+ v+ b& t+ p. t+ e= e= 3% p. ). /. [. /. +. @. +. [. h+ /. @. @. +. +. .. C. #. i# i# i# #. #. @. @. /. /. v+ v+ r$ r$ r$ W@ i; {; y. b. b. y. {; j; c. b. I- y. b. b. y. [* +# J- J- J- J- J- J- J- +@ @ `+ @ +@ +@ .@ h. [. (. :. (. 5. 5. l. :. (. l. l. l. l. l. l. (. +. +. +. +. +. +. +. +. /. /. [. [. h+ h+ h+ w$ a. y. y. y. a. a. a. a. (. (. +. +. +. +. j+ j+ +. (. +. (. +. (. +. (. +. (. +. (. @. :. @. @. ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ {+ {+ ]+ ]+ ]+ j+ j+ j+ '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. j. j. $@ $@ $@ $@ $@ $@ $@ t. t. $@ $@ $@ $@ t. k; l; m; n; +& o; p; q; r; s; _; t; u; v; |; w; x; y; z; A; B; C; D; E; F; G; H; I; (* J; (. K; 7. i. i. i. i. i. i. i. i. W@ W@ W@ j. 6. i. i. i. /. /. /. /. /. /. /. /. Z Z Z Z Z Z Z Z (. (. l. l. l. l. l. l. (. (. (. (. (. (. (. (. j. Z@ Z@ Z@ Z@ Z@ Z@ Z@ :$ b# b# Z@ 7. 7. 8. i. l+ >; >; >; >; >; >; >; ); g; L; g; >; ); g; |. 4. l. l. l. l. l. l. l. :. :. (. (. l. 5. 5. u$ .. +. /. +. @. .. @. /. +. +. +. +. +. +. +. +. /+ /+ (. (. (. (. j. j. 7. 8. (+ 9. O$ N$ ", "6 6 5 5 =# =# =# Z. Z. Z. Z. Z. Z. Z. Z. M; ,$ Z. Z. 6 6 ; | {% ]% K. H@ b$ ] ^ {% {% # $ $ ; ; 1 1 1 1 1 1 1 1 1 1 @ [@ [@ [@ G@ ~# ~# ~# ~# ~# ~# ~# ~# ~# ~# `. C+ 8- 8- 8- C+ C+ C+ 5+ 5+ 5+ | | | 2 2 2 | 0 l l 0 } 4 0 4 4 4 4 4 4 4 4 } } } } } } } } | | | } 4 4 0 0 l l + + 0 0 0 0 0 0 0 0 0 0 0 0 } } 4 4 0 0 + + + + + + + + + + @+ #+ @+ |$ L@ |$ <# F# L@ |$ L@ F# <# x p p E# E# l E# l E# l E# E E# 0 a+ l '$ n E# K@ K@ K@ K@ K@ K@ K@ K@ E# E# E# E# E# E# E# E# x x x x p p k k k k q q r r r q 9+ + l n E D }# }# D D D D D D D D q q j@ j@ j@ c+ c+ c+ q q j@ j@ c+ c+ M M u P v v w w p p <# <# <# p p w w v ,% ,% ,% ,% ,% ,% ,% ,% >% >% >% >% >% >% >% >% E ,+ ,+ D }# i+ i+ C }# }# }# }# }# }# }# }# C C C C C C C C C C C C C C C C ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ }# C C ,+ ,+ C C }# i+ i+ V ,+ }# D E E V V ,+ ,+ V i+ h. {+ >+ f+ f+ f+ ,+ V . . . . k. k. l@ l@ l@ l@ t t O T T T T T . . . . . . . . &. S ;+ N N ;+ S &. ,. ,. ,. ,. ,. ,. S S /@ /@ /@ /@ ,. ,. ` ` ` ` C. C. ~. ~. ~. ~. ` ` ` ` ` ` ` ` . . T T T T . . $. $. $. $. $. B. B. B. $. !. !. C. W+ B. B. U+ C. U+ U+ W+ $. $. W+ =+ #. #. #. #. #. #. B. B. .. .. .. .. .. .. .. .. @. .. .. .. .. .. .. #. ~. t$ t$ {. %. ^. ^. ^. #. B. .. Z Z ` S S Z Z Z .. .. Z Z Z @. @. @. .. .. .. Z Z .. B. .. B. .. B. .. B. Z #. +. j$ [. !. @. $. $. #. 8# !. $. C. B. !. #. #. #. #. #. #. #. #. /. @. .. @. /. [. +. .. @. @. +. +. +. +. @. @. /. /. /. +. +. @. .. .. +. +. +. +. +. +. +. +. h+ [. [. /. +. +. @. @. +. +. +. +. +. +. +. +. /. @. .. .. /. /. +. .. +. +. +. +. +. +. +. +. /. /. +. .. Z Z ` ` +. +. /. /. /. /. /. /. T . ` Z .. @. +. /. @. @. @. +. /. [. [. [. T@ h+ h+ h+ [. /. +. +. .. .. @. @. +. +. /. /. [. /. +. +. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. [. @. @. @. @. @. @. @. @. +. /. [. /. @. @. /. h+ /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ r$ r$ r$ r$ v+ v+ /. /. t& +. #. 8# h# ~. 5# i# Z .. .. @. +. /. /. [. /. /. /. /. /. /. /. /. 8# 8# /. /. /. /. v+ v+ b& t+ p. t+ e= e= 3% p. '. /. h+ [. +. @. /. [. h+ /. @. @. +. +. .. C. #. i# i# i# #. #. @. @. /. /. v+ v+ r$ r$ r$ W@ N; [* a. :+ :+ a. [* O; f. :+ (& a. :+ :+ a. u$ /. +# +# +# +# +# +# +# .# j+ ]+ ]+ +# .# +# ]+ [. (. :. (. 5. 5. l. :. l. l. l. (. (. l. l. l. +. +. +. +. +. +. +. +. /. /. /. [. [. h+ h+ u$ a. y. y. y. a. a. a. a. (. (. +. +. +. +. j+ j+ j+ +. j+ +. j+ +. j+ +. ]+ @. ]+ @. j+ +. j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ ]+ ]+ ]+ j+ j+ j+ +# +# '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. j. j. $@ $@ $@ $@ $@ $@ $@ $@ $@ t. t. t. t. $@ .& P; `% Q; R; S; T; U; V; W; X; Y; Z; `; > .> +> @> #> $> %> &> *> => -> ;> >> ,> '> )> .. S@ b# i. i. i. i. i. i. i. i. W@ W@ W@ j. 6. i. i. i. /. /. /. /. /. /. /. /. @. @. @. @. @. @. @. @. l. l. l. l. l. l. (. (. (. (. (. (. (. (. (. (. j. j. j. j. j. j. j. j. W@ W@ j. j. 6. i. i. <. /+ l+ l+ l+ l+ l+ l+ l+ r% 1. |. |. l+ r% l+ |. 4. l. l. l. l. l. l. l. :. :. (. (. l. 5. 5. u$ .. +. /. +. @. .. @. /. +. +. +. +. +. +. +. +. /+ /+ (. (. (. (. j. j. Z@ 8. 9. 9. O$ N$ ", "Z. Z. 6 6 5 5 5 Z. Z. Z. Z. Z. Z. Z. Z. !> ,$ 6 6 Z. Z. ; 1 {% ]% K. H@ b$ ] ^ _ K. ; ; ; $ $ $ $ 1 1 1 1 1 1 1 1 ! @ @ [@ G@ ~# {# {# G@ ~# ~# {# {# ~# ~# 7 C+ 8- 8- C+ C+ C+ 5+ 5+ 5+ | | | 2 2 2 2 1 4 + + 4 | } 4 4 4 4 4 4 4 4 4 } } } } } } } } 1 1 | } 4 4 0 0 l + 0 4 4 4 4 0 0 0 0 0 0 0 0 0 } } 4 4 0 0 + + + + + + + + + K@ #+ L% #+ ~> |$ ~> F# P& |$ ~> |$ P& F# A& x x M% K@ K@ K@ K@ K@ K@ K@ >% E# a+ a+ E# '$ '$ E# K@ K@ K@ K@ K@ K@ K@ K@ K@ E# E# '$ '$ E# E# K@ x x x x p p k k k k q q r r r q H+ l l n E E D D D D D D D D D D q q q j@ j@ c+ c+ c+ q q j@ j@ c+ c+ M u P P v v w w p p w w w w w w w w ,% ,% ,% ,% ,% ,% ,% ,% ,% ,% ,% ,% ,% ,% ,% ,% n C C E D V V }# }# }# }# }# }# }# }# }# C C C C C C C C ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ }# C C ,+ ,+ C C }# V V ,+ C C }# D D i+ V V ,+ V V i+ ~+ f+ f+ >+ >+ V V T T . . k. k. l@ l@ l@ l@ t O T . ` ` . . . . . . . . . . S S ;+ ;+ ;+ ;+ S S &. &. ,. ,. ,. S S S /@ /@ /@ /@ ,. ,. ` ` ` ` C. C. ~. ~. ~. ~. ` ` ` ` ` ` ` ` ` ` . T T . ` ` C. C. C. $. $. B. B. B. W+ #. #. W+ W+ #. #. W+ $. W+ U+ W+ $. $. U+ P B. #. #. #. #. B. $. C. .. .. .. .. .. .. .. .. @. @. .. Z Z .. @. #. %. {. {. {. %. %. %. %. B. B. .. .. .. Z Z Z Z Z .. @. @. .. Z Z @. @. @. .. .. .. .. .. B. B. B. B. B. B. B. B. B. B. #. !. !. #. B. B. C. !. j$ 8# $. C. B. j$ #. #. #. #. #. #. #. #. /. @. @. +. [. [. +. .. .. @. +. /. /. +. @. .. +. +. /. /. /. +. @. .. +. +. +. +. +. +. +. +. /. /. +. +. +. +. @. @. +. +. +. +. +. +. +. +. +. .. Z .. /. [. /. @. +. +. +. +. +. +. +. +. /. +. @. .. .. .. @. @. +. +. +. /. /. /. [. [. T . ` Z .. @. +. /. /. @. .. @. /. [. /. @. /. /. [. [. [. /. +. +. .. .. @. @. +. +. /. /. h+ /. @. @. /. [. /. +. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. +. +. +. +. +. +. +. +. +. [. [. /. @. @. /. h+ /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ r$ r$ r$ r$ v+ v+ /. /. T@ +. B. 8# h# ~. %. h# @. @. @. +. /. /. [. [. /. /. /. /. /. /. /. /. 8# 8# /. /. /. /. v+ v+ b& t+ p. t+ e= e= 3% p. '. [. h+ [. +. +. /. h+ [. +. @. @. /. [. +. B. !. h# h# h# !. !. +. +. /. /. v+ v+ r$ r$ r$ W@ W@ a. a. a. a. a. a. a. f. :+ (& a. :+ :+ a. u$ /. +# +# +# +# +# +# +# .# +# ]+ j+ .# m* +# @. 5. (. :. (. 5. 5. l. :. 5. l. (. (. (. (. l. 5. +. +. +. +. +. +. +. +. @. +. +. +. /. /. [. 5. a. y. y. y. a. a. a. a. (. (. +. +. +. +. j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ ]+ ]+ ]+ ]+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ ]+ ]+ ]+ j+ j+ +# +# +# '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. j. j. $@ $@ $@ $@ $@ $@ $@ o@ $@ t. o. o. t. $@ o@ b# Q; {> ]> ^> U; /> V; (> _> :> <> [> }> |> 1> 2> 3> 4> 5> 6> 7> 8> 9> 0> a> b> c> d> .# e> p. i. i. i. i. i. i. i. i. j. j. j. j. 6. 6. 6. 6. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. 5. 5. l. l. l. (. (. (. (. (. (. (. (. (. (. (. j. j. j. j. j. j. j. j. 6. 6. j. j. j. 6. i. <. /+ l+ l+ l+ l+ l+ l+ l+ r% 1. |. 1. r% n& r% l+ l. l. l. l. l. l. l. l. (. (. (. l. l. l. l. l. .. +. /. +. @. .. @. /. +. +. +. +. +. +. +. +. /+ /+ (. (. (. (. j. j. b# 7. 8. 8. N$ N$ ", "7 7 Z. Z. 6 6 6 Z. Z. Z. Z. Z. Z. Z. Z. ,$ !> 5 6 Z. 7 1 ; {% ]% K. H@ b$ ] ^ _ ^# H@ H@ K. ]% {% {% h; H@ H@ H@ H@ H@ H@ H@ 1 ' ' ' ~ ~ ~ ~ ~ ' ~ 3 6+ 6+ 3 ~ ; T. f> f> f> f> T. T. T. ^# ^# ^# w& w& w& l$ w& ; } 0 0 } 1 | } 4 4 4 4 4 4 4 4 } } } } } } } } 1 1 | } 4 0 0 + l + 4 } | } 4 4 0 0 0 0 0 0 0 0 } } 4 4 0 0 + + + + + + + + + K@ L% >& L% g> ~> g> P& O& ~> g> ~> O& P& L& A& A& b+ b+ b+ b+ b+ b+ b+ b+ h> ,& b+ b+ ,& 6& 6& ,& '$ '$ '$ '$ '$ '$ '$ '$ a+ K@ '$ >% >% '$ K@ a+ |$ |$ |$ |$ L@ L@ h h k k q q r r r q H# n n n n E E E D D D D D D D D i i k k o o o G k k o o G G u u P P v v w w p p =+ =+ P v v w p p ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% l }# }# n E ,+ ,+ D }# }# }# }# }# }# }# }# C C C C C C C C ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ^% ^% ^% ^% ^% ^% ^% ^% ^% U% U% 9& 9& U% U% ^% U% U% U% U% U% U% U% U% i> i> Q% 9& 9& 9& Q% Q% '= f+ >+ U V V T T . . k. k. l@ l@ l@ l@ O T ` Z .. Z ` ` ` ` ` ` ` ` ` ` ;+ ;+ S S S S ;+ ;+ &. &. &. ,. S S S ;+ /@ /@ /@ /@ ,. ,. ` ` ` ` C. C. ~. ~. ~. ~. Z Z Z Z Z Z Z Z .. Z ` . . ` Z .. . . . ` Z Z Z .. O Z .. . ` +. /. Z l& k+ k+ l& m@ U@ {@ k+ l& {@ m@ m@ m@ l& k+ i> .. .. .. .. .. .. .. .. +. @. .. Z Z .. @. !. i# i# ^. %. %. ~. W+ W+ B. B. B. #. #. #. #. +. ` Z @. +. +. @. Z ` .. .. .. .. .. @. @. @. B. ^. ^. ^. ^. ^. ^. ^. i# ^. %. %. %. %. ^. i# C. !. a# j$ $. W+ B. a# #. #. #. #. #. #. #. #. +. +. @. /. h+ h+ +. .. .. @. +. /. /. +. @. .. .. @. /. [. [. [. /. +. +. +. +. +. +. +. +. +. .. .. @. @. @. @. +. +. +. +. +. +. +. +. +. +. +. .. Z .. /. [. /. @. +. +. +. +. +. +. +. +. /. +. @. .. @. +. /. h+ @. +. +. +. /. [. [. [. +. +. +. +. +. +. +. @. [. @. Z .. +. /. @. ` .. @. +. [. [. /. +. @. .. .. @. @. +. +. /. /. T@ /. .. .. +. [. [. +. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. +. +. +. +. +. +. +. +. v+ v+ v+ v+ v+ v+ v+ v+ v+ +% +% '. =. =. v+ s% /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. v+ v+ v+ v+ v+ v+ v+ v+ +% +% +% +% +% +% +% +% r$ r$ r$ r$ v+ v+ /. /. h+ @. $. !. h# %. ^. K$ /. /. /. /. /. [. [. [. /. /. /. /. /. /. /. /. 8# 8# /. /. /. /. v+ v+ b& t+ p. t+ e= e= 3% p. '. [. T@ h+ /. +. /. h+ [. +. @. +. [. h+ [. 8# 8# S$ S$ S$ 8# 8# /. /. /. /. v+ v+ r$ r$ r$ W@ i. g. a. [* [* a. g. f. f. :+ (& a. :+ :+ a. u$ /. /. /. /. /. /. /. /. /. @. .. @. /. [. +. .. 5. (. :. (. 5. 5. l. :. 5. l. (. :. :. (. l. 5. +. +. +. +. +. +. +. +. .. .. .. @. @. +. +. (. a. y. y. y. a. a. a. a. (. (. +. +. +. +. j+ j+ +@ +@ +@ +@ +@ +@ +@ +@ @ @ .@ .@ +@ +@ J- J- +# +# +# +# +# +# +# +# ]+ j+ j+ j+ +# +# .# .# '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. j. j. $@ $@ $@ $@ $@ $@ $@ o@ $@ t. o. o. t. $@ o@ j> j> k> l> m> n> o> p> q> r> s> t> u> v> w> x> y> z> A> B> C> D> E> F> G> H> I> J> K> j+ L> /@ i. i. i. i. i. i. i. i. 6. 6. 6. 6. j. j. j. j. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. 5. 5. 5. l. (. (. (. :. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. -. <. :. (. (. (. _. _. /+ l+ l+ l+ l+ l+ l+ l+ r% l+ 1. l+ G- M> G- r% (. (. (. (. (. (. (. (. l. l. l. l. l. (. (. (. .. +. /. +. @. .. @. /. +. +. +. +. +. +. +. +. /+ /+ (. (. (. (. j. j. _* b# 7. 7. & & ", "`. `. 7 7 Z. Z. Z. Z. Z. Z. Z. Z. Z. Z. Z. ,$ !> 5 6 Z. 7 1 ; {% ]% K. H@ b$ ] ^ _ ]# ^# H@ K. ]% {% h; V& H@ H@ H@ H@ H@ H@ H@ H@ /# 2 2 ~ ' ' ) ) ' ~ 3 6+ 6+ 3 ~ ; T. f> f> f> T. T. T. ^# ^# ^# w& w& w& w& l$ l$ $ | 4 4 | 1 1 | 4 4 4 4 4 4 4 4 } } } } } } } } ; 1 | } 4 0 + + + 0 } | 1 | } 4 0 0 0 0 0 0 0 0 } } 4 4 0 0 + + + + + + + + + K@ L% >& >& g> g> g> O& O& g> g> g> O& O& L& L& L& 7@ 7@ 7@ 7@ 7@ 7@ 7@ 7@ h> ,& b+ b+ ,& 6& 6& ,& '$ '$ '$ '$ '$ '$ '$ '$ a+ K@ '$ >% >% '$ K@ a+ |$ |$ |$ |$ L@ L@ h h k k q q r r r q 0% E E n n n n n D D D D D D D D i i k k o o o o k k o o G G u u P P v v w w p p U+ U+ d+ =+ v w p <# ^% ^% ^% ^% ^% ^% ^% ^% U% U% U% U% U% U% U% U% + D D l n C C E }# }# }# }# }# }# }# }# C C C C C C C C ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ^% ^% ^% ^% ^% ^% ^% ^% ^% U% U% 9& 9& U% U% ^% ^% ^% U% U% U% U% 9& 9& k+ i> Q% 9& U% U% U% U% '= f+ >+ U V V T T . . k. k. l@ l@ l@ l@ T . Z @. @. .. Z ` ` ` ` ` ` ` ` ` N ;+ S &. &. S ;+ N &. &. &. ,. S S ;+ ;+ /@ /@ /@ /@ ,. ,. ` ` ` ` C. C. ~. ~. ~. ~. Z Z Z Z Z Z Z Z @. .. ` . . ` .. @. T T . . ` Z Z Z t ` Z . ` /. [. @. l& k+ k+ m@ .* * .* U@ l& {@ m@ m@ {@ l& i> 9& .. .. .. .. .. .. .. .. +. @. .. ` ` .. @. +. 8# h# i# ^. ~. 5# U+ d+ B. B. #. #. !. 8# 8# 8# ` Z @. +. +. @. Z ` Z Z Z .. @. @. @. !. B. ^. ^. ^. ^. ^. ^. ^. i# ^. ~. 5# 5# ~. ^. i# C. !. q$ j$ $. W+ #. a# #. #. #. #. #. #. #. #. +. +. +. [. h+ h+ +. Z .. @. +. /. /. +. @. .. Z .. +. [. h+ [. [. /. +. +. +. +. +. +. +. +. ` Z Z .. @. @. +. +. +. +. +. +. +. +. +. +. @. .. Z .. /. [. /. +. +. +. +. +. +. +. +. +. +. +. @. @. @. /. T@ t& @. @. +. +. /. [. [. [. Z% t& T@ h+ /. +. @. .. [. @. Z Z @. +. Z T ` Z @. /. [. /. +. @. .. .. @. @. +. +. /. /. t& /. Z Z +. h+ [. +. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. @. @. @. @. @. @. @. @. +% +% +% +% +% +% +% +% v+ +% +% '. =. =. v+ s% /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. v+ v+ v+ v+ v+ v+ v+ v+ +% +% +% +% +% +% +% +% r$ r$ r$ r$ v+ v+ /. /. [. .. $. #. h# %. i# /* [. [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. 8# 8# /. /. /. /. v+ v+ b& t+ p. t+ e= e= 3% p. '. [. T@ h+ /. +. [. h+ [. +. @. /. h+ t& T@ j$ j$ K$ K$ K$ j$ j$ [. [. /. /. v+ v+ r$ r$ r$ v+ _+ f. a. [* [* a. f. l@ f. :+ (& a. :+ :+ a. u$ /. /. /. /. /. /. /. /. +. .. Z Z @. +. @. Z 5. (. :. (. 5. 5. l. :. u$ l. (. :. :. (. l. u$ +. +. +. +. +. +. +. +. Z Z .. .. .. @. @. :. a. y. y. y. a. a. a. a. (. (. +. +. +. +. j+ j+ +@ +@ +@ +@ +@ +@ +@ +@ @ @ .@ .@ +@ +@ J- J- +# +# +# +# +# +# +# +# j+ j+ j+ j+ +# +# .# .# '. '. '. '. '. '. '. '. '. '. '. '. '. '. '. j. j. $@ $@ $@ $@ $@ $@ $@ o@ $@ t. o. o. t. $@ o@ X+ N> l> O> P> Q> R> Y; S> r> T> U> V> W> X> Y> Z> `> , ., H; +, @, #, $, %, &, &, U U *, H i. i. i. i. i. i. i. i. i. i. i. 6. j. W@ W@ W@ +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. 5. 5. 5. l. (. (. :. :. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. (. k. -. _. (. (. (. :. _. /+ l+ l+ l+ l+ l+ l+ l+ n& l+ 1. r% G- F- M> U# :. :. :. :. :. :. :. :. u$ 5. 5. l. (. (. :. :. .. +. /. +. @. .. @. /. +. +. +. +. +. +. +. +. /+ /+ (. (. (. (. j. j. c# :$ Z@ Z@ & `% ", "7 6 6 Z. Z. 5 S* 7 7 7 Z. Z. 7 7 7 @$ @$ Z. Z. Z. Z. ; ; H@ H@ H@ H@ b$ b$ b$ b$ J@ J@ J@ m$ m$ b$ b$ b$ m$ m$ m$ m$ m$ m$ m$ ^# { { { { { { { { w& w& w& w& w& w& w& ^# O. =, M. U. -, b@ '@ '@ d@ ;, ;, >, =% U$ U$ 9$ | | } } } 4 4 4 1 1 1 | | } } } } } 4 4 0 0 + + 0 1 $ | n }# n 4 0 0 0 0 0 0 0 0 0 + 0 | $ # ; | 0 0 0 0 0 0 0 0 + + + + + + + K@ A& O& O& g> >& >& ,, ,, g> O& N& L& g> >& O& N& M% ,& 6& h> h> ,& b+ 7@ b+ b+ M% ,& ,& 6& h> h> 3 6+ a+ K@ '$ >% ,% ^% '$ '$ '$ >% >% '$ '$ '$ |$ F# y Q v w i h i k q M@ 1$ G# K R )$ l l l l l l l }# E n E D }# D n j h k G G G k k k k o o G G u u p p w w v v v P =+ d+ d+ =+ v p @+ {# ^% ,% >% >% >% ^% 9& Q% ^% ,% ,% ,% >% >% '$ '$ }# }# }# }# }# }# }# }# ,+ ,+ C C C C }# }# }# C C ,+ V V i+ i+ ~+ ~+ i+ V ,+ C }# D U% T% S% S% S% R% R% R% R% R% R% S% S% S% T% T% S% S% S% S% S% S% S% S% S% S% S% S% S% S% S% 9& f+ f+ >+ >+ ,+ V T T . . W W Y '+ '+ g+ ` ` ` . T O O O O T . . . O u G S S S S S S S S S S S S S S S S /@ /@ /@ /@ ,. ,. ` ` ` ` C. C. ~. ~. ~. ~. ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Z Z Z Z Z Z Z Z +. @. @. .. ` . . T l& #% #% #% #% #% #% #% T$ T$ T$ T$ T$ T$ T$ {@ Z @. +. [. [. +. @. Z +. +. +. +. +. +. +. +. B. B. B. B. B. B. B. B. $. $. %. %. %. %. %. $. +. +. +. +. +. +. +. +. . . ` Z Z .. @. #. B. ^. ^. ^. ^. ^. ^. ^. h# h# h# h# h# h# h# h# C. $. #. 8# j$ 8# !. #. !. !. !. !. !. !. !. !. .. @. /. +. Z ` Z .. ` Z Z .. @. @. +. +. /. /. /. /. /. /. /. /. .. .. .. @. +. /. /. /. h+ [. [. /. +. +. @. @. Z Z .. .. @. @. @. +. .. .. .. @. +. +. /. /. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. /. /. [. h+ [. /. @. Z .. .. .. @. +. +. /. /. h+ [. +. @. @. +. [. h+ [. [. [. [. [. [. [. [. .. .. .. @. +. +. /. /. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. [. +% b& r$ r$ t+ t+ t+ p. b& b& b& b& b& b& b& +% [. [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. @% s% s% s% @% v+ ). &. ). ). '. '. v+ +% +% @% =- b& t+ p. ). '. [. h+ /. /. 8# 8# S$ S$ S$ S$ +. +. +. +. +. +. +. +. [. [. [. [. [. [. [. [. #. #. +. +. /. [. +% @% r$ r$ r$ r$ 3% 3% 3% r$ +% [. [. [. [. [. [. [. /. +. @. .. .. @. +. 8# 8# S$ S$ S$ 8# 8# /. /. /. /. v+ v+ r$ r$ r$ v+ j. (. (. (. (. (. (. (. l. l. l. l. l. l. l. l. [. [. [. /. +. +. @. @. +. +. +. +. +. +. +. +. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. /. +. @. .. .. @. +. /. +. +. +. +. +. +. +. (. g. v. b. b. a. (& (& [* _. :. +. /. /. +. ]+ {+ +@ +@ +@ +@ +@ +@ +@ +@ +@ +@ +@ +@ +@ +@ +@ +@ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ @% +% +% v+ '. '. ). ). v+ v+ v+ v+ v+ v+ v+ W@ _+ p# :@ )+ )+ o. t. t. $@ C- ', N; $@ o. o@ i; e& ), !, ~, {, ], ^, /, (, _, :, <, [, }, X* |, (% 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, a, b, +@ H$ c, j. j. j. j. 6. 6. 6. 6. W@ W@ W@ W@ W@ W@ W@ W@ @. @. .. .. +. [. t& Z% +. +. /. [. [. h+ T@ T@ u$ u$ u$ 5. 5. l. l. l. l. l. l. l. l. l. l. l. :. :. :. (. (. (. (. (. _. _. :. :. (. (. l. l. /+ /+ s# s# n+ 3. 3. ^+ /+ /+ /+ /+ /+ /+ /+ /+ (. (. :. :. (. l. u$ w$ l. l. l. l. l. l. l. l. /. @. .. @. +. /. +. .. /. /. [. [. /. @. ` . 4. 4. l. l. l. l. W@ W@ Z@ Z@ Z@ b# & & ", "Z. 6 6 Z. Z. 6 =# 6 6 6 Z. Z. 6 6 6 @$ @$ Z. Z. Z. Z. ; ; H@ H@ H@ H@ b$ b$ b$ b$ m$ m$ m$ m$ b$ b$ ] ] m$ m$ m$ m$ m$ m$ m$ m$ { { { { { { { { w& w& w& w& w& w& w& ^# M. d, U. S. S. J@ d@ d@ ;, ;, ;, =% =% U$ U$ U$ w& | } } } 4 4 4 1 1 1 | | } } } } } 4 4 0 0 + + 0 1 # 1 l E l } 0 0 0 0 0 0 0 0 + + + } ; $ 1 } 0 0 0 0 0 0 0 0 + + + + + + + K@ ~> g> ~> g> ~> >& L% >& L% O& A& O& ~> >& ~> A& M% ,& 6& h> h> ,& b+ 7@ M% M% ,& ,& ,& ,& 6& 6& a+ a+ K@ E# E# '$ >% >% >% >% '$ '$ '$ '$ >% >% |$ F# y Q v w i h i k j@ M@ 1$ G# K R H# n n n n n n n }# E n E D }# D n h i o G u G o o k k o o G G u u w w v v v P P P =+ =+ d+ =+ P w <# @+ ^% ,% >% >% >% ^% U% Q% ^% ^% ^% ,% ,% ,% >% >% }# }# }# }# }# }# }# }# C C C C C C C C C C C C ,+ ,+ ,+ ,+ V V V ,+ C }# }# ^% U% T% S% S% S% R% R% R% R% R% R% S% S% S% T% T% S% S% S% S% S% S% S% S% S% S% S% S% S% S% S% S% f+ f+ >+ >+ ,+ V T T T T W X Y Y Y Y . . . . T T T T O T . . . O t G S S S S S S S S S S S S S S S S /@ /@ /@ /@ ,. ,. ` ` ` ` C. C. ~. ~. ~. ~. ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Z Z Z Z Z Z Z Z +. @. .. .. ` ` . T #% #% #% #% #% #% #% #% T$ T$ T$ T$ T$ T$ T$ {@ h. .. .. @. @. .. .. Z @. @. @. @. @. @. @. @. .. B. B. B. B. B. B. B. $. $. %. %. %. %. %. %. !. +. +. +. +. +. +. +. ` Z Z Z Z .. .. .. B. ^. ^. ^. ^. ^. ^. ^. h# h# h# h# h# h# h# h# $. B. #. 8# 8# 8# !. #. !. !. !. !. !. !. !. !. @. /. /. +. Z ` .. +. .. .. .. @. @. +. +. +. /. /. /. /. /. /. /. /. @. @. @. @. +. +. +. +. /. /. /. +. +. +. +. +. @. @. @. +. +. +. /. /. @. @. @. +. /. /. /. [. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. /. /. [. h+ [. /. @. .. /. /. /. [. [. h+ h+ T@ h+ [. +. @. @. +. [. h+ /. /. /. /. /. /. /. /. @. +. +. +. +. /. /. /. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. [. b& b& b& r$ r$ r$ t+ t+ b& b& b& b& b& b& b& +% +% [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. +% @% s% s% @% +% '. =. '. '. '. v+ v+ v+ v+ v+ =- b& t+ p. ). '. [. h+ /. /. 8# 8# S$ S$ S$ S$ +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. !. !. +. /. /. /. v+ v+ r$ r$ r$ r$ 3% 3% 3% r$ '. +. +. +. +. +. +. +. /. +. @. .. .. @. +. 8# 8# S$ S$ S$ 8# 8# /. /. /. /. v+ v+ r$ r$ r$ v+ W@ l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. [. [. [. /. +. +. +. @. +. +. +. +. +. +. +. +. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. /. +. @. .. .. @. +. /. +. +. +. +. +. +. +. (. :+ b. b. y. a. a. a. a. _. :. +. /. /. +. ]+ {+ +@ +@ +@ +@ +@ +@ +@ +@ +@ +@ +@ +@ +@ +@ +@ +@ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ v+ v+ v+ v+ v+ '. '. '. v+ v+ v+ v+ v+ v+ v+ W@ 0. )+ o. o. o. o. t. t. e, o@ o@ o@ e, e, o@ $@ f, <= g, h, i, j, k, l, m, n, <, o, p, q, r, s, t, u, v, w, 4, x, y, z, A, B, 0, u% C, j+ H D, 6. 6. 6. 6. j. j. j. j. W@ W@ W@ W@ W@ W@ W@ W@ +. @. .. .. @. /. h+ T@ /. /. /. [. [. [. [. h+ 5. 5. 5. 5. l. l. (. (. l. l. l. l. l. (. (. (. 5. 5. l. l. l. l. (. (. _. _. :. :. (. (. l. l. s# s# s# s# n+ n+ n+ n+ /+ /+ /+ /+ /+ /+ /+ /+ (. (. (. l. l. l. l. l. l. l. l. l. l. l. l. l. /. @. .. @. +. /. +. .. +. /. /. /. /. @. Z ` 4. 4. l. l. l. l. W@ W@ Z@ Z@ Z@ b# & & ", "Z. 5 6 Z. 7 6 =# S* =# 6 Z. Z. 6 =# S* @$ @$ Z. Z. Z. Z. ; ; H@ H@ H@ H@ b$ b$ b$ b$ E$ E$ E$ [ [ [ / / E$ E$ E$ E$ E$ E$ E$ b$ { { { { { { { { w& w& w& w& w& w& w& ^# S. E, E, E, F, F, F, G, H, H, I, ;% ;% -% -% U$ w& | } } } 4 4 4 1 1 1 | | } } } } } 4 4 0 0 + + } ; # ; 0 l 0 | 0 0 0 0 0 0 0 0 + l l 0 | 1 } 0 0 0 0 0 0 0 0 0 + + + + + + + K@ #+ L% #+ ~> |$ ~> |$ ~> ($ ~> x P& #+ J, #+ F# M% E# '$ >% >% E# a+ 6+ '$ '$ E# E# E# E# K@ K@ E# E# E# E# E# E# E# E# ,% >% E# K@ K@ E# >% ,% |$ F# y Q v w i h i k j@ q 1$ G# |# N 0% E E E E E E E }# E n E D }# D n p w v P P P P v p p w w v v P P v v P P =+ =+ =+ =+ =+ =+ d+ d+ =+ P v w ^% ,% ,% >% ,% ^% U% 9& U% U% U% U% ^% ^% ,% ,% }# }# }# }# }# }# }# }# D D }# C C ,+ V V C C C C }# }# }# }# C C C C }# }# }# ^% U% T% S% S% S% R% R% R% R% R% R% S% S% S% T% T% S% S% S% S% S% S% S% S% S% S% S% S% S% S% S% S% f+ f+ >+ >+ ,+ V T T O O X X Y k@ k@ k@ T T T T . . . . T T . . . T O t S S S S S S S S S S S S S S S S /@ /@ /@ /@ ,. ,. ` ` ` ` C. C. ~. ~. ~. ~. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. &. &. &. &. &. &. &. &. ). ). =. &. &. ,. S . !% !% !% !% !% !% !% !% T$ T$ T$ T$ T$ T$ T$ {@ {+ Z Z ` ` Z Z .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. B. B. ^. ^. ^. ^. ]. ]. ]. ^. !. +. +. +. +. +. +. +. .. .. .. .. Z Z Z Z B. B. B. B. B. B. B. B. !. !. !. !. !. !. !. !. B. B. #. !. 8# !. !. #. !. !. !. !. !. !. !. !. [. [. [. @. Z Z @. [. @. @. @. +. +. /. /. /. /. /. /. /. /. /. /. /. +. +. +. +. @. @. @. @. @. @. @. @. +. +. +. +. +. +. +. /. /. [. [. [. +. +. /. /. /. [. [. [. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. @. @. @. @. @. @. @. @. +. +. +. +. +. +. +. +. /. /. [. [. [. /. +. @. /. /. [. [. [. h+ h+ h+ h+ [. +. @. @. +. [. h+ +. +. +. +. +. +. +. +. [. [. [. /. /. /. /. /. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. [. =- =- =- b& b& r$ r$ r$ b& b& b& b& b& b& b& +% +% [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. v+ +% @% @% @% +% v+ v+ v+ v+ v+ v+ v+ '. '. '. b& b& r$ t+ '. v+ [. [. /. /. 8# 8# S$ S$ S$ S$ +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. 8# 8# /. /. /. +. '. '. r$ r$ r$ r$ 3% 3% 3% r$ ). @. @. @. @. @. @. @. /. +. +. @. @. +. +. 8# 8# S$ S$ S$ 8# 8# /. /. /. /. v+ v+ r$ r$ r$ v+ +% [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. 5. 5. l. l. l. (. (. (. (. (. (. (. (. (. (. (. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. /. +. +. @. @. +. +. /. +. +. +. +. +. +. +. (. a. y. y. y. a. :+ :+ :+ _. :. +. /. /. +. ]+ {+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ '. '. '. v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ W@ j. $@ $@ t. t. t. t. t. C- t. :@ o. C- N; o@ )+ K, !, ~, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, `, ' .' x, +' @' #' $' %' &% j+ /. /@ :* i. i. i. 6. j. W@ W@ W@ W@ W@ W@ W@ W@ W@ W@ W@ +. +. @. .. @. @. +. /. [. [. [. [. /. /. /. /. l. l. l. (. (. (. :. :. 5. 5. 5. l. (. (. :. :. &' &' L$ U# U# 4. 4. /+ s# s# s# s# /+ /+ /+ /+ _. _. _. :. :. :. :. (. (. (. (. (. (. (. (. (. (. l. 5. u$ 5. l. :. _. l. l. l. l. l. l. l. l. /. @. .. @. +. /. +. .. @. @. +. /. +. +. @. .. 4. 4. l. l. l. l. W@ W@ Z@ Z@ Z@ b# & & ", "6 5 6 Z. 7 Z. 5 S* 5 Z. 7 7 Z. 5 S* @$ @$ Z. Z. Z. Z. ; ; H@ H@ H@ H@ b$ b$ b$ b$ E$ [ [ [ / / ( ( E$ E$ E$ E$ E$ E$ E$ E$ J% { { { { { { { w& w& w& w& w& w& w& >, *' =' E, F, F, F, -' -' G, ;% ;% ;% ;' ;' ;' =% w& | } } } 4 4 4 1 1 1 | | } } } } } 4 4 0 0 + + | ; $ ; 4 0 4 | 0 0 0 0 0 0 0 0 + l n + 4 } 4 + 0 0 0 0 0 0 0 0 + + + + + + + + #$ ($ @+ #+ L@ F# <# x #$ |$ <# |$ #$ ($ @+ <# K@ E# n >% E E# 0 6+ E >% n E# l K@ 0 a+ '$ '$ '$ E# E# K@ K@ K@ ^% >% E# K@ K@ E# >% ^% |$ F# y Q v w i h i k c+ j@ G# G# r c+ G$ D D D D D D D }# E n E D }# D n w v v P P =+ =+ =+ p p w w v v P P P P P =+ =+ d+ d+ d+ P =+ =+ =+ =+ =+ =+ =+ ,% ,% ,% ,% ^% ^% U% U% 9& 9& 9& U% U% ^% ^% ^% }# }# }# }# }# }# }# }# E E D }# ,+ V i+ i+ ,+ C C }# D D E E D D D }# }# }# }# ^% T% T% S% S% S% R% R% R% R% R% R% S% S% S% T% T% S% S% S% S% S% S% S% S% S% S% S% S% S% S% S% S% >' f+ >+ >+ ,+ V T T u t A. X k@ k@ l@ l@ O O O T . ` ` ` T T . . . T T T ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. /@ /@ /@ /@ ,. ,. ` ` ` ` C. C. ~. ~. ~. ~. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. &. &. &. &. &. &. &. &. ). =. =. &. &. ,. ,. &$ Y+ ,' ,' ,' ,' ,' ,' ,' T$ T$ T$ T$ T$ T$ T$ T$ j+ .. Z . . Z .. +. Z Z Z Z Z Z Z Z =. =. .. .. .. .. B. B. ^. ^. ^. ^. ]. ]. ]. ^. !. +. +. +. +. +. +. +. +. +. @. .. .. Z ` ` .. B. .. B. .. B. .. B. +. !. +. !. +. !. +. !. #. #. #. !. !. !. !. #. !. !. !. !. !. !. !. !. h+ h+ [. +. Z Z +. T@ +. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. +. @. .. .. .. Z .. .. @. +. +. /. /. @. @. +. +. /. /. /. /. [. [. [. [. [. [. [. [. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. @. @. @. @. @. @. @. @. /. /. /. /. /. /. /. /. /. /. /. /. /. /. +. +. @. @. @. @. @. +. +. +. h+ [. +. @. @. +. [. h+ @. @. @. @. @. @. @. @. T@ T@ h+ [. [. /. /. +. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. +% '' =- =- =- b& b& r$ r$ b& b& b& b& b& b& b& b& +% [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. v+ v+ +% +% +% +% +% +% @% +% +% v+ '. '. ). ). b& b& b& r$ v+ +% [. [. /. /. 8# 8# S$ S$ S$ S$ /. /. /. /. /. /. /. /. @. @. @. @. @. @. @. @. a# j$ [. /. +. +. ). ). r$ r$ r$ r$ 3% 3% 3% r$ '. +. +. +. +. +. +. +. /. /. +. +. +. +. /. 8# 8# S$ S$ S$ 8# 8# /. /. /. /. v+ v+ r$ r$ r$ v+ +% [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. l. l. l. l. l. l. (. (. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. /. /. +. +. +. +. /. /. +. +. +. +. +. +. +. (. [* I- I- y. :+ :+ g. g. :. :. +. +. +. +. ]+ ]+ +# /. +# /. +# /. +# /. j+ +. j+ +. j+ +. j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ ). ). '. '. v+ +% +% @% v+ v+ v+ v+ v+ v+ v+ W@ /$ e, e, o@ $@ $@ t. t. o@ o. )+ o. o@ e, o@ (@ )' !' ~' {' Y; r> ]' ^' R, /' (' _' :' <' [' ); }' |' 1' w, 2' 3' 4' 5' 6' 7' 8' u& +. u$ 9. k; q+ 0. i. 6. j. W@ /$ e# W@ W@ W@ W@ W@ W@ W@ W@ /. /. +. @. @. .. .. .. h+ h+ [. /. /. +. @. @. l. (. (. (. :. :. _. _. u$ u$ 5. l. (. (. :. :. &' L$ L$ U# 4. /+ /+ s# s# s# s# s# /+ /+ /+ /+ <. _. _. :. (. (. l. l. l. l. l. l. l. l. l. l. :. l. u$ w$ u$ l. _. -. l. l. l. l. l. l. l. l. /. @. .. @. +. /. +. .. @. @. @. +. +. +. +. +. 4. 4. l. l. l. l. W@ W@ Z@ Z@ Z@ b# & & ", "6 5 5 7 7 Z. 5 6 Z. 7 `. `. 7 Z. 6 @$ @$ Z. Z. Z. Z. ; ; H@ H@ H@ H@ b$ b$ b$ b$ E$ [ [ [ / / ( ( E$ E$ E$ E$ E$ E$ E$ E$ J% J% J% J% J% J% J% J% >, >, >, >, >, >, >, >, *' *' F, F, F, G, -' -' ;% ;% ;% ;' ;' ;' 9' g& w& | } } } 4 4 4 1 1 1 | | } } } } } 4 4 0 0 + + | 1 ; 1 } 4 } | 0 0 0 0 0 0 0 0 0 l n n 0 4 0 + 0 0 0 0 0 0 0 0 + + + + + + + + 9 #$ j @+ h <# i p 9 L@ k <# j #$ h i + l H# E 0% l 9+ 4 0% E H# l )$ + 9+ 0 >% >% '$ E# E# K@ a+ a+ ,% >% '$ K@ K@ '$ >% ,% |$ F# y Q v w i h i o c+ c+ r 1$ G# j@ G$ D D D D D D D }# E n E D }# D n v Q Q Q ~@ ~@ -+ -+ x x y y Q Q ~@ ~@ P P P =+ =+ d+ d+ d+ P P P =+ =+ =+ d+ d+ >% ,% ,% ^% ^% U% U% U% 9& 9& 9& U% U% ^% ^% ^% }# }# }# }# }# }# }# }# E E D }# ,+ V i+ i+ ,+ C C }# D D E E D D D }# }# }# }# ^% T% Z& r& r& r& q& q& q& q& q& q& r& r& r& Z& Z& r& r& r& r& r& r& r& r& r& r& r& r& r& r& r& S% >' f+ >+ >+ ,+ V T T u t A. X k@ k@ l@ l@ O O O T . ` ` ` . . T T T . . . ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. /@ /@ /@ /@ ,. ,. ` ` ` ` C. C. ~. ~. ~. ~. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. &. *. *. *. *. *. *. *. q. q. *. *. *. *. /@ D. Z+ 0' 0' 0' 0' 0' 0' 0' $% $% $% $% $% $% $% T$ +# +. .. Z Z .. +. /. Z Z Z Z Z Z Z Z =. =. =. =. .. .. B. B. i# i# f# f# f# f# W# f# !. +. +. +. +. +. +. +. +. +. +. @. .. Z Z Z .. .. =. .. =. .. =. .. '. +. '. +. '. +. '. +. !. !. !. #. #. #. #. !. !. !. !. !. !. !. !. !. [. h+ h+ +. .. .. +. h+ /. /. /. /. /. /. /. +. /. /. /. /. /. /. /. /. /. /. /. +. @. .. .. .. .. .. @. @. +. /. /. [. .. .. .. .. @. @. +. +. [. [. [. [. [. [. [. [. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. /. /. +. +. +. /. /. /. +. +. +. @. @. @. @. @. h+ [. +. @. @. +. [. h+ @. @. @. @. @. @. @. @. T@ T@ h+ [. [. /. /. +. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. +% =- a' a' e= e= 3% 3% 3% e= e= e= e= e= e= e= b& +% [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. +% +% +% +% +% +% @% @% @% +% +% v+ '. '. ). ). b& b& b& =- @% +% [. [. /. /. 8# 8# S$ S$ S$ S$ /. /. /. /. /. /. /. /. @. @. @. @. @. @. @. @. a# j$ [. /. +. +. ). ). r$ r$ r$ r$ 3% 3% 3% r$ +% [. [. [. [. [. [. [. /. /. /. /. /. /. /. 8# 8# S$ S$ S$ 8# 8# /. /. /. /. v+ v+ r$ r$ r$ v+ '. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. (. :+ a. a. a. a. a. a. a. a. a. a. a. a. a. a. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. /. /. /. /. /. /. /. /. +. +. +. +. +. +. +. (. [* I- I- y. :+ :+ g. g. (. (. @. @. @. @. j+ j+ /. l. /. l. /. l. /. l. +. (. +. (. +. (. +. +. j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ ). ). '. '. v+ +% +% @% v+ v+ v+ v+ v+ v+ v+ W@ e# C- e, o@ o@ $@ $@ t. :@ t. o@ $@ o. o. $@ b' c' d' e' f' g' h' i' j' k' l' m' n' o' p' q' r' s' t' u' v' w' x' y' z' A' B' C' ~. l. O; ), D' :@ 0. i. 6. j. W@ /$ e# W@ W@ W@ W@ W@ W@ W@ W@ /. /. /. +. +. @. .. Z [. [. [. /. +. @. @. @. l. (. (. (. :. :. _. _. 5. 5. 5. l. (. (. (. :. 4. r% r% l+ l+ 1. 1. |. l+ l+ l+ l+ 1. 1. 1. s# _. _. :. :. (. l. l. 5. l. l. l. l. l. l. l. l. :. l. u$ w$ u$ l. _. -. l. l. l. l. l. l. l. l. /. @. .. @. +. /. +. .. @. @. @. @. @. +. +. +. 4. 4. l. l. l. l. W@ W@ Z@ Z@ Z@ b# & & ", "5 =# 5 7 `. 7 6 7 7 7 7 7 7 7 7 @$ @$ Z. Z. Z. Z. ; ; H@ H@ H@ H@ b$ b$ b$ b$ E$ E$ E$ [ [ [ / / [ [ [ [ [ [ [ [ J% J% J% J% J% J% J% J% >, >, >, >, >, >, >, >, F, F, F, F, G, G, G, G, Z$ Z$ -% ;' ;' E' F' G' w& | } } } 4 4 4 1 1 1 | | } } } } } 4 4 0 0 + + } | | } } } } } 0 0 0 0 0 0 0 0 } + n n + 4 0 + 0 0 0 0 0 0 0 0 + + + + + + + + j j j h h h h h h k o k h j i o H+ )$ H# 0% 0% )$ 9+ K& H# H# )$ )$ )$ )$ H+ H+ E '$ '$ E# E# K@ K@ a+ '$ '$ '$ '$ '$ '$ '$ '$ |$ F# y Q v w i h i o M c+ r 1$ G# q 0% E E E E E E E }# E n E D }# D '$ v y y y y Q ~@ -+ x x y y Q Q ~@ ~@ v v P P =+ =+ =+ =+ =+ P P v v P =+ d+ >% >% ,% U% U% U% ^% ^% U% U% U% U% ^% ^% ,% ,% }# }# }# }# }# }# }# }# D D }# C C ,+ V V C C C C }# }# }# }# C C C C }# }# }# ^% T% Z& r& r& r& q& q& q& q& q& q& r& r& r& Z& Z& r& r& r& r& r& r& r& r& r& r& r& r& r& r& r& S% >' f+ >+ >+ ,+ V T T O O X X Y k@ k@ k@ T T T T . . . . . . T T T . ` Z ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. ,. /@ /@ /@ /@ ,. ,. ` ` ` ` C. C. ~. ~. ~. ~. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. *. *. *. *. *. *. *. *. *. *. *. *. *. *. *. E. `+ |% |% |% |% |% |% |% $% $% $% $% $% $% $% T$ +# +. @. @. @. @. +. /. .. .. .. .. .. .. .. .. =. =. =. =. .. .. B. B. i# i# f# f# f# f# W# f# !. +. +. +. +. +. +. +. +. +. @. @. @. @. .. .. =. =. =. =. =. =. =. =. '. '. '. '. '. '. '. '. /. 8# !. #. B. #. #. !. !. !. !. !. !. !. !. !. +. /. h+ /. @. .. @. +. /. /. /. +. +. @. @. @. /. /. /. /. /. /. /. /. +. +. +. +. @. @. @. @. +. +. +. /. /. /. [. [. Z Z Z .. .. @. @. @. [. [. [. /. /. /. +. +. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. /. +. +. +. +. /. [. h+ h+ h+ h+ [. [. [. /. /. h+ [. +. @. @. +. [. h+ +. +. +. +. +. +. +. +. [. [. [. /. /. /. /. /. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. +% b& e= 3% 3% ;$ ;$ ;$ <+ e= e= e= e= e= e= e= b& +% [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. @% @% +% v+ v+ v+ +% @% v+ v+ v+ v+ v+ '. '. '. b& b& =- '' s% @% [. [. /. /. 8# 8# S$ S$ S$ S$ /. /. /. /. /. /. /. /. +. +. +. +. +. +. +. +. 8# 8# /. /. /. +. '. '. r$ r$ r$ r$ 3% 3% 3% r$ +% [. [. [. [. [. [. [. +. /. [. [. [. [. /. !. 8# S$ S$ S$ 8# 8# /. /. /. /. v+ v+ r$ r$ r$ v+ ). @. @. @. @. @. @. @. /. /. /. /. /. /. /. /. (. :+ :+ a. a. a. (& (& a. a. a. a. a. a. a. a. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. +. /. [. [. [. [. /. +. +. +. +. +. +. +. +. (. a. y. y. y. a. :+ :+ :+ l. (. @. .. .. @. j+ /. l. l. l. l. l. l. l. l. (. (. (. (. (. (. (. (. +. j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ '. '. '. v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ W@ W@ o@ o@ o@ o@ $@ $@ $@ p# t. C- e, o. )+ o@ H' c' I' J' K' L' M' ]' N' O' P' Q' R' S' T' U' V' W' X' Y' Z' `' ) .) +) @) #) i# |. a. {; $) D' o. i. i. 6. j. W@ W@ W@ W@ W@ W@ W@ W@ W@ W@ W@ [. [. [. [. [. +. @. .. /. /. +. +. +. +. @. @. l. l. l. (. (. (. :. :. l. l. l. l. l. l. l. 4. s# 1. 1. 1. 1. 1. l+ l+ l+ l+ l+ l+ 1. 1. 1. s# :. (. (. (. (. l. l. l. l. l. l. l. l. l. l. l. (. l. 5. u$ 5. l. :. _. l. l. l. l. l. l. l. l. /. @. .. @. +. /. +. .. /. +. @. @. .. @. +. +. 4. 4. l. l. l. l. W@ W@ Z@ Z@ Z@ b# & & ", "5 =# 5 7 `. 7 6 `. 7 6 =# =# 6 7 `. @$ @$ Z. Z. Z. Z. ; ; H@ H@ H@ H@ b$ b$ b$ b$ F, F, F, F, E$ E$ [ [ [ [ [ [ [ [ [ [ J% J% J% J% J% J% J% J% >, >, >, >, >, >, >, >, [ [ E$ F, G, H, %) %) Z$ Z$ -% ;' 9' F' F' G' w& | } } } 4 4 4 1 1 1 | | } } } } } 4 4 0 0 + + 4 4 4 4 } } } 4 0 0 0 0 0 0 0 0 | 0 l l + 4 4 0 0 0 0 0 0 0 0 0 + + + + + + + + 0+ 0+ 0+ 0+ 0+ ++ ++ ++ M@ j@ c+ c+ q M@ q c+ 5& 3& b% F$ F$ 3& P% D+ 5& 5& 3& 3& 3& 3& b% H# n '$ E# E# E# E# K@ K@ K@ E# >% ^% ^% >% E# K@ |$ F# y Q v w i h i o M M |# 1$ 1$ M@ H# n n n n n n n }# E n E D }# D '$ w y x F# x y ~@ -+ x x y y Q Q ~@ ~@ w w v v v P P P =+ P v w w w v P '$ >% ^% U% 9& U% ^% ,% ^% ^% ^% ,% ,% ,% >% >% }# }# }# }# }# }# }# }# C C C C C C C C C C C C ,+ ,+ ,+ ,+ V V V ,+ C }# }# ^% T% Z& r& r& r& q& q& q& q& q& q& r& r& r& Z& Z& r& r& r& r& r& r& r& r& r& r& r& r& r& r& r& S% >' f+ >+ >+ ,+ V T T T T W X Y Y Y Y . . . . T T T T ` . T T T ` Z @. &. &. &. &. &. &. &. &. &. &. &. &. &. &. &. &. /@ /@ /@ /@ ,. ,. ` ` ` ` C. C. ~. ~. ~. ~. ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` *. *. *. *. *. *. *. *. *. *. *. *. *. *. *. E. .@ &) &) &) &) &) &) &) $% $% $% $% $% $% $% T$ {+ .. @. @. @. @. .. .. @. @. @. @. @. @. @. @. =. q. =. =. =. .. B. B. i# i# f# f# W# W# W# f# !. +. +. +. +. +. +. +. @. @. @. @. @. +. +. +. =. q. q. q. q. q. q. q. t+ t+ t+ t+ t+ t+ t+ '. [. 8# !. B. B. B. #. !. !. !. !. !. !. !. !. !. ` @. [. h+ +. .. Z Z +. +. +. @. @. .. .. .. /. /. /. /. /. /. /. /. @. @. @. @. +. +. +. +. h+ h+ h+ [. [. [. [. [. .. .. @. @. @. +. +. +. [. /. /. /. +. @. @. @. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. [. /. +. @. @. @. /. h+ T@ T@ h+ h+ [. [. /. /. /. h+ [. +. @. @. +. [. h+ /. /. /. /. /. /. /. /. @. +. +. +. +. /. /. /. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. +% t+ ;$ ;$ <+ <+ r. r. r. e= e= e= e= e= e= e= b& +% [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. *) s% +% v+ '. '. v+ +% '. '. '. v+ v+ v+ v+ v+ r$ b& '' =) -) s% [. /. /. /. 8# 8# S$ S$ S$ S$ [. [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. !. !. +. /. /. /. v+ v+ r$ r$ r$ r$ 3% 3% 3% r$ v+ /. /. /. /. /. /. /. +. /. [. h+ h+ [. /. !. 8# S$ S$ S$ 8# 8# /. /. /. /. v+ v+ r$ r$ r$ v+ H. j+ j+ j+ j+ j+ j+ j+ +# +# +# +# +# +# +# /. :. :+ :+ :+ a. (& (& (& (& (& (& (& (& (& (& (& l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. +. /. [. h+ h+ [. /. +. +. +. +. +. +. +. +. (. :+ b. b. y. a. a. a. a. l. (. @. .. .. @. j+ /. 5. (& (& (& (& (& (& (& :+ :+ :+ :+ :+ :+ :+ (. +. j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ v+ v+ v+ v+ v+ '. '. '. v+ v+ v+ v+ v+ v+ v+ W@ 6. t. $@ $@ $@ $@ o@ o@ o. t. o@ o@ o@ e, C- ;) >) ,) ') )) n, !) ~) {) ]) ^) /) () _) :) <) [) }) |) 1) 2) 3) 4) 5) 6) 7) L= ~. l+ v. u. i= f- t. 6. 6. 6. j. j. j. j. W@ W@ W@ W@ W@ W@ W@ W@ /. [. h+ T@ T@ h+ /. +. @. @. @. +. +. +. +. +. 5. 5. 5. 5. l. l. (. (. :. :. (. (. l. 5. u$ L$ n+ 1. 1. l+ r% n& n& G- r% r% l+ l+ 1. 1. |. n+ l. W@ W@ W@ j. j. j. j. /$ /$ /$ /$ /$ /$ /$ /$ (. (. (. l. l. l. l. l. l. l. l. l. l. l. l. l. /. @. .. @. +. /. +. .. h+ [. +. .. .. .. .. @. 4. 4. l. l. l. l. W@ W@ Z@ Z@ Z@ b# & & ", "5 =# 5 7 `. 7 Z. `. Z. =# 8) 8) =# Z. `. Z. Z. Z. Z. Z. Z. ; ; H@ H@ H@ H@ H@ H@ b$ b$ *' *' *' F, F, E$ E$ E$ [ [ [ [ [ [ [ [ J% 0$ { { { { { { w& w& w& w& w& w& w& m$ ^ / [ E$ H, 9) f@ g@ Y$ Z$ -% ;' ;' F' F' 0) w& 2 } } } 4 4 4 1 1 1 | | } 3+ } } } 4 4 0 0 + + 4 0 + 0 8@ } 8@ 0 0 @+ j j j 0 0 0 1 4 l l 0 4 K& 0 0 0 0 0 0 0 0 0 + + + + + + + + q M@ M@ 0+ ++ ++ }$ }$ q c+ M M j@ q j@ M H+ )$ b% 0% F$ )$ P% K& P% 9+ 5& )$ 3& H# F$ 0% l l l l l E# E# E# 6+ E# ,% U% U% ,% E# 6+ L@ F# w v v w i h i o N M j@ 0+ 1$ 0+ l l l l l l l l }# E n E D }# D n w x <# |$ <# x v ~@ p x w y v Q P P p p w w v v v P d+ P w p <# p w v '$ >% ^% U% 9& U% ^% ,% ^% ,% ,% ,% >% >% '$ '$ }# }# }# }# }# }# }# }# ,+ ,+ C C C C }# }# }# C C ,+ V V i+ i+ ~+ ~+ i+ V ,+ C }# ,% T% Z& S% r& S% q& R% q& R% q& R% r& S% r& T% Z& r& r& r& r& r& S% S% S% S% S% S% S% S% S% S% 9& f+ f+ >+ >+ ,+ V T T . . T W X A. A. *+ ` ` ` . T O O O ` . T T T ` .. @. &. &. &. &. &. &. &. &. &. &. &. &. &. &. &. &. /@ /@ /@ /@ ,. ,. ` ` ` ` C. C. ~. ~. ~. ~. ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` &. &. *. &. *. &. *. &. *. &. *. &. *. &. *. E. +@ t% t% t% t% t% t% t% T$ T$ T$ T$ T$ T$ T$ T$ . -. .. @. @. .. ` . +. +. +. +. +. +. j+ +. .. _. .. _. .. _. B. n+ i# 1. i# 1. f# g; f# i# !. +. +. +. +. +. +. +. .. .. .. @. +. /. /. /. =. =. q. =. q. =. q. =. t+ '. t+ '. t+ '. t+ '. h+ j$ !. B. $. B. #. !. !. !. !. !. !. !. !. !. T .. [. h+ /. Z . T +. +. @. @. .. Z Z ` /. /. /. /. /. /. /. /. .. .. .. @. +. /. /. /. t& t& T@ T@ h+ [. [. /. @. +. +. +. /. /. [. [. /. /. +. +. @. .. .. .. +. +. +. +. +. +. +. +. l. l. l. l. l. l. /. /. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. [. /. +. @. @. @. /. h+ T@ /. 8# +. +. @. .. .. .. h+ [. +. @. @. +. +% h+ [. [. [. [. [. [. [. [. .. .. .. @. +. +. /. /. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. +% p. p. p. q. q. q. *. *. b& b& b& b& b& b& b& b& +% [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. a) -) @% v+ '. '. '. v+ ). ). '. '. v+ +% +% @% r$ b& '' =) -) s% [. /. /. /. 8# 8# S$ S$ S$ S$ [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. @. @. +. +. /. [. +% @% r$ r$ r$ r$ r$ r$ 3% r$ '. +. +. +. +. +. +. +. +. /. h+ T@ T@ h+ /. +. 8# S$ 8# 8# 8# 8# /. /. /. /. v+ v+ v+ v+ r$ v+ .# .# .# .# .# .# .# .# +# +# +# +# +# +# +# /. :. :. (. (. l. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. +. /. h+ T@ T@ h+ /. +. +. +. +. +. +. +. +. (. g. g. :+ :+ a. (& 5. u$ l. (. @. .. .. @. j+ /. 5. (& 5. (& 5. (& 5. (& (. :+ (. :+ (. :+ (. (. +. +. j+ +. j+ +. j+ +. j+ +. j+ +. j+ +. j+ j+ b) $& $& v+ H. '. ). ). v+ v+ v+ v+ v+ v+ v+ v+ q. 8. 8. 7. .& $@ K, K, c) t@ q@ u. B* d) B* e) f) g) h) i) i) j) k) l) m) n) o) p) q) r) s) ;> t) u) v) w) x) y) z) A) B) C) @@ ^= D) q@ T; $) $@ (. (. (. :. :. :. :. l. l. l. l. l. l. l. l. /. [. T@ t& t& T@ h+ [. .. .. .. @. +. /. /. /. u$ u$ u$ 5. 5. l. l. l. <. _. :. (. l. u$ w$ w$ n+ 1. /+ r% L$ M> E) F- 4. r% /+ l+ s# 1. n+ n+ u$ /$ /$ W@ j. j. 6. 6. /$ /$ /$ /$ /$ /$ /$ /$ (. (. :. :. (. l. u$ w$ l. l. l. l. l. l. l. l. /. @. .. @. +. /. +. .. T@ h+ +. .. Z Z .. .. 4. 4. l. l. l. l. W@ W@ Z@ Z@ Z@ b# & & ", "' ' ' ' ' ' ' ~ ~ ' ' ) ) ! ! ; ; ; ; ; ; ; ; - $ | | ; $ {% ]% m$ F, F, F, F, F, F, F, ( ( / [ E$ F, *' F) G) 7& b+ =@ x+ x+ =@ E+ ' ' 1 | | } 4 K& U. U. b$ b$ b$ J% J% J% U$ =% =% G' 0) 0) H) H) 9$ =@ 2 3 6+ a+ + + 0 0 9+ 9+ 9+ 9+ P% 9+ } 6+ a+ K@ K@ a+ :# /# K+ /# w& w& F) K+ F) w& @+ g f f f @+ j j `. 9 )$ G$ I) J) ;@ T. l 4 | 1 } 4 } 1 0 0 0 + + l l l 9+ )$ H# )$ 9+ 3+ K& H+ 9+ 3+ 9+ G$ G$ 9+ 3+ 9+ q k j@ G j@ h }$ `. M@ i M@ i M@ i M@ M@ H# H# H# )$ )$ + + + n n '$ '$ 6& 6& 6& '$ K@ 6+ 0 E }# n E V D D D D D D G$ D D D D D D D D D D D D D D D D D u P u P u P u P u P u P u P u P ,% >% >% U% i> i> ,% K@ K@ E# E# '$ >% >% ,% ,% t t t t t t t t u u t t u G o o }# }# }# }# }# ,+ V i+ C C C C C C C C O O O O O O O O t t t t t t t t i> u& Q% R% 9& T% U% T% 9& S% 9& S% 9& S% 9& S% ~& T% R% S% ~& ,% U% Q% 9& 9& ,+ ,+ R# R# R# R# V V V V i+ i+ i+ i+ }# C V . . T t u ,+ ,+ V V i+ i+ ~+ ~+ h. h. h. h. h. h. h. h. Z Z Z Z Z Z Z Z ` ` ` ` ` ` ` ,. 5$ 7# 6# K) &$ E. ]+ j+ ~+ h. {@ m@ L) S& u& R% ~+ h. h. {+ ]+ ]+ j+ j+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ V V &$ ~+ F. ]+ H. j+ E. h. E. {+ G. ]+ H. j+ ]+ {+ {+ h. h. ~+ ~+ i+ h. h. h. h. h. h. h. Z <. e. <. <. <. <. Z Z .. .. {+ {+ {+ {+ @ {@ n@ M) '; N) |. :% V@ <% /+ m. -. e. :. :+ :. <. /. @. .. @. /. /. +. .. .. .. .. .. .. .. .. .. .. .. =. .. =. .. =. .. &. .. ). +. v+ /. v+ +. +. +. +. +. +. +. +. +. .. .. .. .. .. .. .. .. +# +# +# +# +# +# +# +# h. {+ {+ ]+ j+ +# +# .# {+ {+ {+ ]+ j+ +# +# +# +# +# +# +# +# +# +# +# +. /. h+ T@ T@ h+ /. +. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. l. f. :+ a. a. g. f. :. l. l. l. /. /. /. /. +# +# /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. [. !. h# !. !. !. !. +. +. /. /. v+ v+ v+ v+ r$ v+ h+ h+ h+ h+ h+ h+ h+ h+ /. /. /. [. [. h+ h+ h+ T@ h+ h+ T@ Z% t& [. @. @. @. @. @. @. @. @. @. v+ v+ '. '. ). ). ). =. '. '. v+ +% +% @% s% s% ). ). ). ). ). ). ). ). +% +% +% +% +% +% +% +% [. [. [. [. [. [. [. [. /. /. /. /. /. /. /. v+ =- =- =- =- @% @% h+ h+ +. +. 8# j$ K$ J$ /* /* /. /. /. [. [. h+ h+ h+ [. [. [. [. [. [. [. [. /. v+ v+ v+ v+ v+ v+ v+ s% @% v+ '. '. v+ =- s% /. /. /. /. /. /. /. /. h+ h+ h+ h+ h+ h+ h+ h+ @. !. [. h+ T@ T@ h+ [. h+ [. +. @. @. +. v+ [. /. [. [. h+ T@ T@ t& t& h+ h+ h+ h+ h+ h+ h+ h+ m* .# j+ +# m* O) .# +# .# .# .# .# .# .# .# [. [. 5. 5. 5. 5. 5. 5. 5. u$ u$ u$ u$ u$ u$ u$ u$ +. /. /. [. [. h+ h+ T@ Z .. .. @. +. /. /. /. v$ u$ l. l. u$ u$ /. @. @. @. +. /. /. +. @. @. @. _. .. _. @. (. /. 5. h+ u$ h+ u$ h+ u$ h+ u$ ` _. +. (. @. :. /. u$ h+ l. @. _. Z _. @. +. J- J- J- +# J- +# +# +# @. +. [. h+ u$ 5. (. ). P) Q) R) ;$ *% f, l> p; h, S) K* T) U) V) W) X) Y) Z) `) ! .! +! @! #! $! %! &! 4, *! =! -! ;! >! ,! '! )! !! ~! {! ]! 8# 4. a. K, ^! <= /! ^! a. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ 5. 5. 5. l. (. (. :. :. (. -. -. (. (. -. -. (. u$ s# k. 3. 5. &' (. ^+ :. s# :. s# (. /+ (. (. v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ v+ +% +% +% v+ '. '. ). ). s% @% '. ). =. ). v+ +% /. /. /. /. /. /. /. /. +. /. [. h+ [. /. @. .. 4. U# 5. u$ u$ 5. /$ W@ b# b# b# b# & & ", "' ' ' ' ' ' ' ~ ~ ' ' ) ) ! ! ; ; ; ; ; ; ; ; % $ | | ; $ $ K. m$ F, F, F, F, F, F, F, ( / / [ E$ F, *' ;, M% J, B# C# '# !# ># #+ {# {# 8 `. `. 7 W. V. R. U. b$ b$ b$ b$ J% J% (! (! (! (! G' 0) 0) _! 0$ =@ E+ -@ 6+ a+ 0 + 4 4 K& K& D+ D+ D+ K& } 6+ a+ K@ K@ a+ :# /# K+ /# >, >, F) )@ F) w& g t, t, t, f f j j 8 9 H+ )$ :! % ^% 9& Q% ^% E# '$ >% >% >% >% ,% ,% ,% t t t t t t t t t t t t u u G o C }# }# }# }# C V V C C C C C C C C O O O O O O O O t t t t t O O O 9& 9& 9& 9& 9& Q% Q% Q% 9& 9& 9& 9& 9& 9& 9& 9& ~& S% R% S% ^% ,% C V ,+ ,+ R# R# .% .% .% R# &$ i+ i+ i+ V V V V C ,+ V i+ i+ V ,+ C ,+ ,+ V V i+ i+ ~+ ~+ h. h. h. h. h. h. h. h. ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` 7# 7# 6# K) D. E. ]+ j+ h. h. {@ m@ [! S& u& R% {+ {+ {+ {+ {+ ]+ ]+ ]+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ i+ i+ ~+ h. h. {+ ]+ ]+ h. h. h. {+ ]+ ]+ ]+ j+ @. @. @. .. Z Z Z ` .. .. .. .. .. .. .. _. _. f. f. f. _. _. .. .. .. .. {+ {+ @ @ @ {@ }! |! 1! 2! 3! M) (% /% Y@ m. e. o. $@ $@ -- :@ +. @. Z .. +. /. @. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. @. +. /. +. +. @. +. +. +. +. +. +. +. +. .. .. .. .. .. .. .. .. +# +# +# +# +# +# +# +# j+ j+ j+ j+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ j+ j+ j+ j+ +# +# +# +# +# +# +# +# +. /. [. h+ h+ [. /. +. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. l. f. b. y. y. g. f. g. a. l. l. /. /. /. /. +# +# /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. j$ !. h# h# h# !. !. +. +. /. /. v+ v+ r$ r$ r$ v+ @% h+ h+ h+ h+ h+ h+ h+ @. @. +. +. /. /. /. [. T@ h+ [. h+ t& T@ /. .. +. +. +. +. +. +. +. +. [. [. [. /. /. +. +. +. [. [. [. [. [. [. [. [. '. '. '. '. '. '. '. '. +% +% +% +% +% +% +% +% [. [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. =- =- =- =- @% @% h+ h+ /. /. j$ j$ K$ K$ J$ J$ /. /. /. [. [. h+ h+ h+ [. [. [. [. [. [. [. [. v+ v+ v+ v+ v+ v+ v+ v+ s% @% v+ '. '. v+ @% s% /. /. /. /. /. /. /. /. h+ h+ h+ h+ h+ h+ h+ h+ @. +. [. h+ T@ h+ h+ [. [. /. +. @. @. /. [. h+ [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ C, l* +@ J- C, 4! l* J- l* l* l* l* l* l* l* .# [. 5. 5. 5. 5. 5. 5. 5. u$ u$ u$ u$ u$ u$ u$ u$ /. /. /. [. [. h+ h+ h+ /. /. +. +. +. +. +. +. h+ [. +. +. [. h+ /. @. @. @. +. /. /. +. @. @. +. @. @. @. @. +. /. /. h+ h+ h+ h+ h+ h+ h+ h+ _. (. 5. l. :. :. (. 5. 5. l. (. _. _. _. :. +. J- 5! J- J- J- J- +# +# .. @. /. [. 5. l. :. =. 6! 7! 8! 9! O$ R; $) q; 0! a! b! c! d! e! f! g! h! i! j! k! l! m! n! o! p! q! r! s! t! u! v! w! x! y! z! A! B! _# C! [. /. a. o@ K, <= <= /! ^! E& r% r% r% r% r% r% r% r% r% r% r% r% r% r% r% /. /. /. /. /. /. /. /. h+ h+ h+ h+ h+ h+ h+ h+ 5. 5. 5. l. (. (. (. :. l. <. <. l. l. <. <. l. w$ :. -. _. 5. w$ l. <. W k. -. <. _. :. (. l. ). ). ). ). ). ). ). ). '. '. '. '. '. '. '. '. +% +% +% v+ '. '. '. ). -) s% @% +% +% +% +% +% /. /. /. /. /. /. /. /. +. /. [. h+ [. /. @. .. /+ 4. 5. 5. 5. 5. W@ j. b# b# b# b# & & ", "' ' ' ' ' ' ' ~ ~ ' ' ) ) ! ! ; ; ; ; ; ; ; ; # ; | | ; $ $ H@ m$ F, F, F, F, F, F, F, / / [ [ E$ F, *' ;, x+ D# D# D# '# ># #+ F# L@ @+ 9 8 7 Z. Y. 2+ 4+ -, J@ J@ J@ J@ ;, ;, D! D! D! (! G' G' G' E! 0$ =@ E+ -@ 6+ 6+ 0 0 } } 3+ 3+ 7+ 7+ 7+ 3+ } 6+ a+ K@ K@ a+ 6+ 3 K+ /# w& /# K+ _# :# 2 g t, t, t, f f j j 9 9 K& K& ;@ ;@ ;@ F! 0% + 4 } 0 + 0 } } 4 4 4 0 0 + + 0 l n l 0 } 4 + 0 } 0 D D 0 } 0 9 9 9 j i o u t i i i i i i i i F$ F$ b% b% )$ )$ l + n n '$ '$ 6& 6& 6& 6& D + + D D l l D D D D D D D D D n n n n n n n n D D D D D D D D u u u u u u u u u u u u u u u u 9& ^% >% >% ^% U% ^% ,% ^% ^% ^% ^% ,% ,% ,% ,% u u u u u u u u t t t t u u G G C C }# }# }# C ,+ V C C C C C C C C O O O O O O O O u u t t O T T T }# }# C ,+ V V i+ i+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ 9& ~& S% R% R% U% ^% C V V V ^& ^& '% '% '% ^& D. ~+ ~+ i+ V ,+ ,+ ,+ C ,+ i+ ~+ ~+ i+ ,+ C V V V V i+ i+ i+ i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ . . . . . . . . ` ` ` ` ` ` ` ` 7# 6# 6# 6# D. E. {+ ]+ h. {+ {@ {@ [! S& C& u& ]+ ]+ ]+ {+ {+ {+ {+ {+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ h. h. h. h. h. h. h. h. h. h. {+ {+ {+ ]+ ]+ ]+ +. +. @. @. @. .. .. .. @. @. @. @. @. @. @. :. :. g. g. g. :. :. @. @. .. .. {+ {+ @ @ @ {@ L; |! G! 3! H! H! /% :% m. r+ e. g. o@ o@ o. p# +. .. Z Z @. +. @. Z .. .. .. .. .. .. .. .. @. @. @. @. @. @. @. @. @. +. +. /. +. @. .. .. +. +. +. +. +. +. +. +. @. @. @. @. @. @. @. @. +# +# +# +# +# +# +# +# .# .# +# j+ ]+ {+ h. h. j+ j+ j+ j+ ]+ ]+ ]+ ]+ +# +# +# +# +# +# +# +# @. +. /. /. /. /. +. @. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. l. g. b. I- y. g. f. :+ (& l. l. /. /. /. /. +# +# /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. j$ !. h# h# h# !. !. +. +. /. /. v+ v+ r$ r$ r$ v+ v+ /. /. /. /. /. /. /. .. .. @. @. +. +. +. /. h+ [. /. [. h+ h+ +. .. /. /. /. /. /. /. /. /. m* m* m* .# .# +# +# +# O) O) m* .# .# +# j+ j+ v+ v+ v+ v+ v+ v+ v+ v+ +% +% +% +% +% +% +% +% [. [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. r$ r$ r$ r$ v+ v+ /. /. h+ h+ j$ j$ K$ K$ S$ S$ /. /. /. [. [. h+ h+ h+ [. [. [. [. [. [. [. [. v+ v+ v+ v+ v+ v+ v+ v+ @% +% +% v+ v+ +% +% @% /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. +. /. [. h+ h+ h+ [. [. +. +. @. @. +. /. h+ h+ [. [. [. [. /. /. /. /. /. /. /. /. /. /. /. /. C, l* +@ J- C, 4! l* J- l* l* l* l* l* l* l* .# [. 5. 5. 5. 5. 5. 5. 5. l. l. l. l. l. l. l. l. /. /. /. [. [. h+ h+ h+ T@ h+ h+ [. /. +. @. @. /. @. .. @. /. [. /. @. @. +. +. /. /. +. +. @. [. /. +. @. @. @. +. +. h+ h+ h+ h+ h+ h+ h+ h+ l. 5. u$ 5. (. :. (. 5. 5. 5. (. :. :. :. :. +. +# J- J- J- +# +# +# +# .. @. :. (. (. :. g. i. I! 6! P) a' J! $) /! q; K! L! M! N! O! P! Q! R! S! T! U! V! W! X! Y! Z! /+ `! ~ .~ +~ @~ #~ $~ %~ &~ *~ =~ -~ ;~ >~ O /. a. o@ K, <= <= /! ^! E& r% r% r% r% r% r% r% r% r% r% r% r% r% r% r% +. +. +. +. +. +. +. +. h+ h+ h+ h+ h+ h+ h+ h+ 5. 5. l. l. l. (. (. (. 5. :. :. 5. 5. :. :. 5. w$ l. _. :. u$ v$ 5. :. W k. -. _. (. l. u$ u$ ). ). ). ). ). ). ). ). '. '. '. '. '. '. '. '. +% +% v+ v+ v+ '. '. '. +% +% @% @% +% v+ '. ). /. /. /. /. /. /. /. /. /. /. [. [. [. +. @. @. s# /+ l. l. l. l. j. 6. b# b# b# b# & & ", "' ' ' ' ' ' ' ~ ~ ' ' ) ) ! ! ; ; ; ; ; ; ; ; $ 1 | | ; $ ; ^# m$ F, F, F, F, F, F, F, / / [ [ E$ F, F, >, * n* n* D# '# A# #+ |$ L@ @+ 9 8 7 Z. Y. 2+ 4+ -, J@ J@ J@ J@ ;, ;, !@ !@ D! D! G' g& g& k$ l$ E+ E+ -@ 6+ 6+ 0 0 | | 5+ 5+ C+ C+ C+ 5+ 4 6+ a+ a+ a+ a+ 6+ 6+ _# :# /# /# K+ _# K+ 3 g t, t, t, f f j j j 9 5+ V. z& f> ;@ G+ 0% l 4 4 + + + 4 } } } 4 4 0 0 0 0 E# n E# 0 3 4 K@ + 3 0 >% E a+ } + j 9 9 9 h o t T i i i i i i i i F$ F$ F$ b% H# )$ l l n n '$ '$ 6& 6& 6& 6& }# n l D D + 0 E D D D D D D D D l l l l l l l l D D D D D D D D u u u u u u u u u u u u u u u u Q% U% >% '$ '$ ,% U% 9& Q% 9& 9& U% ^% ^% ,% ,% G G G G G G G G T O t u u u u u ,+ C }# }# }# C ,+ ,+ C C C C C C C C O O O O O O O O u u t O O T . . ,+ ,+ ,+ ,+ ,+ V V V ,+ ,+ ,+ ,+ ,+ ,+ ,+ 9& U% S% u& R% U% ^% ,+ V V V ^& ^& '% '% '% ^& F. h. ~+ i+ V ,+ C }# C ,+ i+ ~+ ~+ i+ ,+ C V V V V i+ i+ i+ i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ T T T T T T T T ` ` ` ` ` ` ` ` 6# 6# 6# 6# E. F. {+ ]+ {+ {+ {@ {@ S& C& C& u& j+ j+ ]+ ]+ {+ h. h. ~+ h. h. h. h. h. h. h. h. {+ {+ h. h. h. h. ~+ ~+ {+ {+ {+ {+ {+ {+ ]+ ]+ +. +. +. +. @. @. @. @. +. +. +. +. +. +. +. (. l. a. a. a. l. l. /. /. .. .. {+ {+ @ @ @ {@ ); ,~ '~ G! H! N) <% c% r+ r+ f. :+ e, o@ o. p+ @. .. ` Z @. +. .. ` .. .. .. .. .. .. .. .. @. @. @. @. @. @. @. @. +. /. /. /. +. @. .. Z +. +. +. +. +. +. +. +. @. @. @. @. @. @. @. @. +# +# +# +# +# +# +# +# +# +# j+ j+ ]+ ]+ {+ {+ +# +# +# j+ ]+ {+ {+ {+ +# +# +# +# +# +# +# +# @. @. +. +. +. +. @. @. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. l. g. y. I- y. :+ g. :+ (& l. l. /. /. /. /. +# +# /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. j$ 8# S$ S$ S$ 8# 8# /. /. [. [. +% +% b& b& b& +% v+ /. /. /. /. /. /. /. @. @. @. +. +. /. /. /. h+ /. +. +. [. [. +. .. [. [. [. [. [. [. [. [. m* m* .# .# +# +# +# j+ m* m* m* .# .# +# +# +# +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. r$ r$ r$ r$ v+ v+ /. /. T@ T@ a# j$ K$ S$ h# h# /. /. /. [. [. h+ h+ h+ [. [. [. [. [. [. [. [. +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. @. @. @. +. /. [. h+ h+ h+ [. [. /. +. +. @. @. /. /. /. /. /. /. /. /. m* l* +@ J- C, 4! l* J- l* l* l* l* l* l* l* .# [. 5. 5. 5. 5. 5. 5. 5. l. l. l. l. l. l. l. l. [. [. [. [. [. [. [. [. h+ h+ h+ [. [. /. /. /. @. .. Z .. /. [. /. +. +. +. /. /. /. /. +. +. h+ [. /. +. @. @. @. +. [. [. [. [. [. [. [. [. 5. w$ v$ u$ l. :. (. 5. 5. 5. l. (. (. (. (. +. +# J- J- J- +# +# +# /. .. .. _. :. :. _. f. i. 7# }& e> b& )~ !~ ~~ {~ ]~ ^~ /~ (~ _~ :~ <~ [~ .! }~ |~ 1~ 2~ 3~ 4~ 5~ 6~ 7~ 8~ 9~ 0~ a~ b~ c~ d~ z! e~ f~ g~ h~ i~ Z /. l. o@ K, j~ <= <= ^! E& r% r% r% r% r% r% r% r% r% r% r% r% r% r% 4. @. @. @. @. @. @. @. @. [. [. [. [. [. [. [. [. l. l. l. l. l. l. (. (. w$ (. (. w$ w$ (. (. w$ w$ 5. (. l. u$ w$ u$ (. :. (. l. 5. u$ w$ v$ v$ '. '. '. '. '. '. '. '. ). ). ). ). ). ). ). ). v+ v+ v+ v+ v+ v+ '. '. &. =. '. '. '. =. ,. S /. /. /. /. /. /. /. /. [. [. [. /. /. +. +. @. n+ s# (. (. (. (. 6. i. b# b# b# b# & & ", "' ' ' ' ' ' ' ~ ~ ' ' ) ) ! ! ; ; ; ; ; ; ; ; ; 1 } | ; $ 1 ]# m$ F, F, F, F, F, F, F, [ [ [ E$ E$ E$ E$ >, w+ D# D# C# '# A# ># ># ~# ~# `. `. `. `. 1@ 5+ 4+ -, J@ J@ J@ J@ ;, ;, !@ !@ D! D! G' g& g& k$ l$ -@ -@ -@ 3 6+ 4 4 | | 5+ 5+ C+ C+ C+ 5+ 0 a+ 6+ 6+ 6+ 6+ a+ a+ K@ 6+ 3 6+ K@ K@ a+ {# g t, t, t, f f j j h 9 5+ V. z& f> ;@ k~ 0% l 4 4 + + + 4 } 4 4 4 0 0 + + a+ ,& '$ ,& a+ -@ 6+ M% E# 7@ 6+ 6& '$ 7@ 6+ E# i h j j j i o u i i i i i i i i Q$ Q$ F$ F$ H# H# l l n n '$ '$ 6& 6& 6& 6& C n n D D 0 0 n D D D D D D D D l l l l l l l l D D D D D D D D u u u u u u u u u u u u u u u u Q% U% ,% '$ E# >% U% i> Q% Q% 9& 9& U% ^% ^% ,% u u u u u u u u . T t u u u t t ,+ ,+ C }# }# }# C ,+ C C C C C C C C O O O O O O O O t t O O T T . . ~+ ~+ i+ V ,+ C }# D ,+ ,+ ,+ ,+ ,+ ,+ ,+ 9& U% R% u& R% 9& U% ,+ i+ i+ i+ &$ &$ K) K) K) &$ F. h. ~+ i+ V ,+ C }# ,+ V ~+ h. h. ~+ V ,+ i+ i+ i+ i+ V V V V ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ T T T T T T T T ` ` ` ` ` ` ` ` K) 6# 6# 7# F. F. {+ {+ ]+ {+ {@ l& C& C& C& C& j+ j+ ]+ ]+ {+ h. h. ~+ h. h. h. h. h. h. h. h. {+ {+ h. h. h. h. ~+ ~+ ]+ ]+ {+ {+ {+ {+ {+ {+ @. @. @. @. +. +. +. +. +. +. +. +. +. +. +. (. l. a. a. a. l. l. /. /. .. .. {+ {+ @ @ @ {@ S$ L; l~ }! l+ r% 1. 2. n+ 3. <. :. l. l. i. _+ +. .. Z Z @. +. @. Z .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. +. /. /. /. +. @. .. Z +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +# +# +# +# +# +# +# +# {+ {+ ]+ ]+ j+ j+ +# +# +# +# +# j+ ]+ {+ {+ {+ +# +# +# +# +# +# +# +# +. +. @. @. @. @. +. +. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. l. :+ y. {; I- :+ g. a. (& l. l. /. /. /. /. +# +# /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. j$ 8# S$ S$ S$ 8# 8# /. /. [. [. +% +% b& b& b& +% v+ /. /. /. /. /. /. /. +. /. /. /. [. [. h+ h+ T@ [. @. +. /. [. +. .. [. [. [. [. [. [. [. [. +# J- J- +@ +@ .@ .@ .@ J- J- J- l* l* C, C, m* +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. r$ r$ r$ r$ v+ v+ /. /. T@ T@ a# j$ K$ S$ h# h# /. /. /. [. [. h+ h+ h+ [. [. [. [. [. [. [. [. +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. h+ [. [. [. [. [. [. [. @. @. +. /. /. [. [. [. h+ [. [. /. +. +. @. @. /. /. /. /. /. /. /. /. m* .# j+ +# m* O) .# +# .# .# .# .# .# .# .# .# [. 5. 5. 5. 5. 5. 5. 5. l. l. l. l. l. l. l. l. [. [. [. [. [. [. [. [. /. /. /. [. [. h+ h+ h+ @. .. Z .. /. [. /. +. +. /. /. [. [. /. /. +. T@ h+ [. +. +. +. +. +. [. [. [. [. [. [. [. [. 5. w$ v$ u$ l. :. (. 5. 5. 5. 5. 5. l. (. (. @. +# J- +# +# +# +# /. /. @. _. _. _. f. f. f. :. F. H. +% W@ (@ m~ n~ o> o~ p~ q~ r~ s~ t~ u~ v~ w~ x~ y~ z~ A~ B~ C~ D~ E~ F~ G~ H~ I~ J~ K~ L~ d~ M~ N~ O~ P~ ;~ m* T@ /. l. o@ K, j~ <= <= K, a. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. @. @. @. @. @. @. @. @. [. [. [. [. [. [. [. [. (. (. l. l. l. l. l. l. w$ l. l. w$ w$ l. l. w$ u$ 5. l. l. u$ u$ 5. l. u$ u$ 5. 5. 5. 5. 5. 5. +% +% +% +% +% +% +% +% '. '. '. '. '. '. '. '. '. '. v+ v+ v+ v+ v+ v+ &. =. '. '. '. =. ,. S /. /. /. /. /. /. /. /. [. [. /. /. +. +. +. +. n+ s# (. (. (. (. 6. i. b# b# b# b# & & ", "' ' ' ' ' ' ' ~ ~ ' ' ) ) ! ! ; ; ; ; ; ; ; ; 1 | } 1 $ $ | 8@ m$ F, F, F, F, F, F, F, [ E$ E$ E$ E$ E$ E$ J% =@ ,# ,# ,# A# A# A# A# @ [@ 7 7 8 8 }$ 9+ 4+ -, J@ J@ J@ J@ ;, ;, D! D! D! (! G' G' G' E! Q~ -@ -@ -@ 3 3 } 4 } } 3+ 3+ 7+ 7+ 7+ 3+ + a+ 6+ 3 3 6+ a+ K@ E# a+ 3 6+ K@ <# K@ #$ g t, t, t, f f j j h j 3+ 5+ f> F+ R~ k~ 0% + 4 } 0 + 0 } 0 0 0 + + l l E# b+ j& 6& j& b+ S~ 7@ N% 6& T~ 7@ j& ,& T~ 7@ 6& p k i h h h i i i i i i i i i i Q$ Q$ Q$ F$ 0% H# n n n n '$ '$ 6& 6& 6& 6& C n l D D + 0 n D D D D D D D D n n n n n n n n D D D D D D D D u u u u u u u u u u u u u u u u U% U% ^% >% E# '$ U% i> 9& 9& U% U% U% U% ^% ^% t t t t t t t t ` . O u G u t O V ,+ C }# }# }# C C C C C C C C C C O O O O O O O O T T T T T T T T {+ h. ~+ V C }# E E ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ U% R% C& u& 9& U% V i+ i+ i+ &$ &$ K) K) K) &$ D. ~+ ~+ i+ V ,+ ,+ ,+ ,+ V ~+ h. h. ~+ V ,+ i+ i+ i+ i+ V V V V i+ i+ i+ i+ i+ i+ i+ i+ . . . . . . . . ` ` ` ` ` ` ` ` K) 6# 7# 5$ F. F. {+ h. ]+ {+ l& k+ C& C& C& S& ]+ ]+ ]+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ h. h. h. h. h. h. h. h. ]+ ]+ ]+ {+ {+ {+ h. h. .. .. .. @. @. @. +. +. @. @. @. @. @. @. @. :. l. a. a. a. l. l. /. /. .. .. {+ {+ @ @ @ {@ h# L; U~ }! |. 1. 1. |. /+ n+ -. <. :. (. :. <. /. @. .. @. /. /. +. .. .. .. .. .. .. .. .. .. +. +. +. +. +. +. +. +. @. +. +. /. +. @. .. .. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +# +# +# +# +# +# +# +# h. h. {+ ]+ j+ +# .# .# j+ j+ j+ j+ ]+ ]+ ]+ ]+ +# +# +# +# +# +# +# +# /. /. +. @. @. +. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. l. :+ I- {; I- :+ :+ a. [* l. l. /. /. /. /. +# +# /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. j$ 8# S$ S$ S$ 8# 8# /. /. h+ h+ @% @% =- =- =- @% v+ /. /. /. /. /. /. /. /. /. /. [. [. h+ h+ h+ t& h+ +. +. /. [. /. +. /. /. /. /. /. /. /. +# J- +@ +@ +@ .@ .@ @ @ +@ +@ J- l* l* C, 4! 4! 9# v+ v+ v+ v+ v+ v+ v+ +% +% +% +% +% +% +% +% [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ r$ r$ r$ r$ v+ v+ /. /. h+ h+ j$ j$ K$ K$ S$ S$ /. /. /. [. [. h+ h+ h+ [. [. [. [. [. [. [. [. @% @% @% @% @% @% @% @% v+ +% +% @% @% +% +% v+ /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. T@ h+ [. /. /. /. [. [. +. /. /. [. [. /. +. +. [. [. [. [. /. /. /. /. /. /. /. /. /. /. /. /. m* .# j+ +# m* O) .# +# .# .# .# .# .# .# .# [. 5. 5. 5. 5. 5. 5. 5. 5. l. l. l. l. l. l. l. l. h+ h+ h+ [. [. /. /. /. @. @. +. /. [. h+ h+ T@ /. @. .. @. /. [. /. @. +. /. [. [. [. [. /. +. h+ [. /. /. +. /. /. [. /. /. /. /. /. /. /. /. l. 5. u$ 5. (. :. (. 5. 5. 5. u$ u$ 5. l. (. @. +# J- +# +# +# +# /. /. (. :. :. _. f. g. g. :+ @. !. l. g. >. V~ <; K! W~ X~ r~ Y~ Z~ T! `~ { .{ +{ @{ #{ ${ %{ &{ *{ ={ -{ ;{ >{ ,{ '{ ){ !{ ~{ {{ ]{ ^{ /{ ({ ]+ h+ /. l. o@ o@ )~ j~ j~ K, a. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. (. (. (. l. l. l. 5. 5. w$ (. (. w$ w$ (. (. w$ l. l. l. l. l. l. l. l. l. (. (. :. _. <. <. <. @% @% @% @% @% @% @% @% v+ v+ v+ v+ v+ v+ v+ v+ '. '. '. v+ v+ v+ +% +% +% +% @% @% +% v+ '. ). /. /. /. /. /. /. /. /. h+ [. /. +. @. +. +. /. s# /+ l. l. l. l. j. 6. b# b# b# b# & & ", "' ' ' ' ' ' ' ~ ~ ' ' ) ) ! ! ; ; ; ; ; ; ; ; | } } 1 $ $ | J+ m$ m$ m$ m$ m$ m$ m$ m$ b$ b$ b$ b$ b$ b$ b$ { =@ ,# B# n$ ># ($ ($ ># @ [@ 7 7 8 8 }$ 9+ R. U. b$ b$ b$ b$ J% J% (! (! (! (! G' 0) 0) _! Q~ -@ -@ -@ 3 3 } } 4 4 K& K& D+ D+ D+ K& I+ K+ 6+ 3 3 6+ a+ K@ <# @+ #$ @+ <# _{ L@ $- t, t, t, t, f f j j h j 9+ K& ;@ R~ R~ k~ H# 0 } | 4 0 4 | + + l l n n n >% :{ <{ 7& <{ :{ [{ T~ }{ 7& |{ T~ <{ j& |{ T~ 7& L@ i i k k i i h i i i i i i i i Q$ Q$ Q$ Q$ 0% 0% n n n n '$ '$ 6& 6& 6& 6& }# l l D D + + E D D D D D D D D E E E E E E E E D D D D D D D D u u u u u u u u u u u u u u u u ,% U% U% ,% '$ '$ ^% Q% ^% ^% ^% ^% ^% U% U% U% T T T T T T T T Z . O u G u O T V V C }# }# }# }# C C C C C C C C C O O O O O O O O ` ` ` . T O t t D. D. &$ ^& R# J# J# G$ R# R# R# R# R# R# R# ,+ 9& u& C& u& 9& 9& V ~+ ~+ ~+ D. D. 6# 6# 6# D. &$ i+ i+ i+ V V V V V i+ ~+ h. h. ~+ i+ V ~+ ~+ i+ i+ V V ,+ ,+ i+ i+ i+ i+ i+ i+ i+ i+ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` '% K) 7# 5$ G. F. h. h. j+ ]+ l& k+ u& C& S& S& {+ {+ {+ {+ {+ ]+ ]+ ]+ {+ {+ {+ {+ {+ {+ {+ {+ i+ i+ ~+ h. h. {+ ]+ ]+ j+ ]+ ]+ ]+ {+ h. h. h. ` Z Z Z .. @. @. @. .. .. .. .. .. .. .. _. (. :+ :+ :+ (. (. +. +. .. .. {+ {+ @ @ @ {@ i# i# i# %. ~. ~. #. 8# j$ #. C. W+ $. #. !. @. h+ /. @. +. [. h+ /. +. .. .. .. .. .. .. .. .. /. /. /. /. /. /. /. /. .. .. @. +. /. +. +. @. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. +# +# +# +# +# +# +# +# ]+ ]+ ]+ ]+ j+ j+ j+ j+ ]+ ]+ ]+ ]+ j+ j+ j+ j+ +# +# +# +# +# +# +# +# h+ [. /. +. +. /. [. h+ /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. l. :+ I- 1{ {; a. :+ a. [* l. l. /. /. /. /. +# +# /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. j$ j$ K$ K$ K$ j$ j$ [. [. h+ h+ @% @% =- =- =- @% @% h+ h+ h+ h+ h+ h+ h+ +. +. +. /. /. [. [. [. I$ T@ /. +. [. h+ [. /. +. +. +. +. +. +. +. j+ l* 5! 5! 5! 2{ 2{ 3{ 3{ 4{ 4{ 4{ 4{ 4{ 4{ 4{ l* H. '. '. '. '. '. '. '. +% +% +% +% +% +% +% +% [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ =- =- =- =- @% @% h+ h+ /. /. j$ j$ K$ K$ J$ J$ /. /. /. [. [. h+ h+ h+ [. [. [. [. [. [. [. [. @% @% @% @% @% @% @% @% '. v+ @% s% s% @% v+ '. /. /. /. /. /. /. /. /. h+ h+ h+ h+ h+ h+ h+ h+ t& T@ [. /. +. /. /. [. /. [. h+ h+ [. +. .. Z [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ [. +. /. h+ T@ [. /. [. [. [. [. [. [. [. [. 5. 5. 5. 5. 5. 5. 5. 5. u$ u$ u$ u$ u$ u$ u$ u$ h+ h+ h+ [. [. /. /. /. +. +. +. +. +. +. /. /. h+ [. +. +. [. h+ /. @. /. /. [. h+ h+ [. /. /. [. [. /. /. /. [. h+ h+ /. /. /. /. /. /. /. /. _. (. 5. l. :. :. (. 5. l. 5. u$ w$ u$ 5. (. @. +# +# +# +# /. /. /. /. 5. l. g. f. f. g. y. (& <$ _% T& 5{ 6{ 7{ 8{ 9{ 0{ r~ a{ Z) b{ c{ d{ e{ f{ g{ h{ i{ j{ k{ l{ m{ n{ o{ p{ q{ r{ s{ t{ u{ v{ w{ A$ x{ y{ .* O) ` /. l. W@ o@ )~ j~ j~ K, a. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. :. (. (. (. l. 5. 5. 5. u$ (. (. u$ u$ (. (. u$ (. (. l. l. (. (. (. l. _. _. _. _. <. <. <. <. +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% +% ). '. '. '. v+ +% +% +% -) s% @% +% +% +% +% +% /. /. /. /. /. /. /. /. T@ [. /. @. @. @. +. /. /+ 4. 5. 5. 5. 5. W@ j. b# b# b# b# & & ", "' ' ' ' ' ' ' ~ ~ ' ' ) ) ! ! ; ; ; ; ; ; ; ; | } } 1 $ $ | 0 ^# m$ m$ m$ m$ m$ m$ m$ b$ b$ b$ b$ b$ ] ] k% w+ C# B# J, #+ #+ |$ |$ G@ G@ 7 `. `. 8 $$ 3+ R. U. b$ b$ b$ b$ J% J% U$ =% =% (! 0) 0) H) z{ A{ 7@ 7@ -@ 3 3 } } 0 0 9+ 9+ P% P% P% 9+ I+ K+ 6+ 3 3 6+ a+ L@ <# @+ #$ f _{ Z! B{ C{ t, t, t, t, f f j j j h H+ H+ % :{ <{ D{ <{ E{ [{ |{ }{ D{ |{ |{ <{ <{ |{ |{ 7& {# j i o o o i h i i i i i i i i I# Q$ Q$ Q$ 0% 0% n n n n '$ '$ 6& 6& 6& 6& D + + D D l l D D D D D D D D D D D D D D D D D D D D D D D D D u u u u u u u u u u u u u u u u >% U% 9& U% >% '$ ,% Q% >% >% ,% ,% ^% U% U% U% . . . . . . . . Z . O u G u O . i+ V ,+ }# }# }# }# }# C C C C C C C C O O O O O O O O .. Z ` . T t u u ^& ^& ^& R# R# R# R# R$ R# R# R# R# R# R# R# ,+ 9& u& C& u& 9& 9& V ~+ ~+ ~+ D. D. 6# 6# 6# D. ^& V V V i+ i+ i+ i+ V i+ h. {+ {+ h. i+ V ~+ ~+ i+ i+ V V ,+ ,+ i+ i+ i+ i+ i+ i+ i+ i+ Z Z Z Z Z Z Z Z ` ` ` ` ` ` ` ` '% K) 7# [$ G. F. h. ~+ j+ ]+ l& i> u& C& S& [! ~+ h. h. {+ ]+ ]+ j+ j+ {+ {+ {+ {+ {+ {+ {+ {+ V V i+ ~+ {+ ]+ j+ j+ j+ j+ ]+ ]+ {+ h. h. h. . ` ` Z Z .. .. @. Z Z Z Z Z Z Z <. :. g. g. g. :. :. @. @. .. .. {+ {+ @ @ @ {+ l& h# S$ ^. 5# V+ B. a# q$ !. W+ d+ W+ B. !. 8# T@ [. +. /. h+ T@ [. /. .. .. .. .. .. .. .. .. /. /. /. /. /. /. /. /. Z .. @. +. /. /. /. +. +. +. +. +. +. +. +. +. /. /. /. /. /. /. /. /. +# +# +# +# +# +# +# +# .# +# +# j+ ]+ {+ {+ h. {+ {+ {+ ]+ j+ +# +# +# +# +# +# +# +# +# +# +# T@ h+ /. +. +. /. h+ T@ /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. l. :+ I- 1{ {; a. :+ (& [* l. l. /. /. /. /. +# +# /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. j$ j$ K$ K$ K$ j$ j$ [. [. h+ h+ @% @% =- =- =- @% @% h+ h+ h+ h+ h+ h+ h+ .. @. @. @. +. +. /. /. F{ t& [. /. [. T@ h+ [. @. @. @. @. @. @. @. ]+ C, G{ G{ 4{ 4{ 5! 5! 5! H{ H{ G{ 4{ 4{ 5! 2{ +@ G. ). ). ). ). ). ). ). +% +% +% +% +% +% +% +% [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ =- =- =- =- @% @% h+ h+ +. +. 8# j$ K$ J$ /* /* /. /. /. [. [. h+ h+ h+ [. [. [. [. [. [. [. [. @% @% @% @% @% @% @% @% '. v+ @% s% s% @% v+ '. /. /. /. /. /. /. /. /. h+ h+ h+ h+ h+ h+ h+ h+ t& T@ [. /. +. +. /. [. [. h+ h+ h+ [. +. Z . /. [. [. h+ T@ T@ t& t& h+ h+ h+ h+ h+ h+ h+ h+ h+ [. +. /. h+ T@ [. /. [. [. [. [. [. [. [. [. 5. 5. 5. 5. 5. 5. 5. 5. u$ u$ u$ u$ u$ u$ u$ u$ T@ h+ h+ [. [. /. /. +. /. /. /. +. @. .. .. Z t& h+ /. /. h+ h+ /. @. /. [. [. h+ h+ [. [. /. /. /. /. /. /. h+ T@ t& /. /. /. /. /. /. /. /. -. _. (. (. :. :. l. u$ l. 5. u$ w$ w$ 5. (. :. /. +# +# /. /. /. /. l. u$ (& :+ g. g. b. I- I{ o# n# l# J{ 4* K{ L{ s; M{ N{ O{ P{ s= Q{ R{ S{ T{ ${ U{ V{ W{ X{ Y{ Z{ `{ ] .] +] @] #] $] %] &] *] =] J> Q% k+ O* G /. l. W@ W@ )~ )~ )~ o@ W@ l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. [. [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. :. :. (. (. l. 5. 5. 5. 5. :. :. 5. 5. :. :. 5. :. (. (. (. :. :. :. (. _. _. :. :. (. (. l. l. v+ v+ v+ v+ v+ v+ v+ v+ @% @% @% @% @% @% @% @% ). ). '. '. v+ +% +% +% s% @% '. ). =. ). v+ +% /. /. /. /. /. /. /. /. T@ h+ /. @. @. @. +. /. 4. U# 5. u$ u$ 5. /$ W@ b# b# b# b# & & ", "' ! ) ' ~ ) ! 2 2 ~ ~ ~ ' ' ' ; $ # # ; | 4 0 1 ; # % # 1 4 0 ^# ^# ^# ^# ^# ^# ^# ^# K. K. K. K. K. K. K. k% x+ ,# n$ J, ($ ># !# '# #$ G@ 5 5 Z. `. 1@ V. F! U. ] m$ -] ;] )@ J% !@ !@ >] ,] '] 0) g& k$ 9$ =@ -@ 7@ 6+ 3 1 ; ; 1 5+ 3+ D+ P% 5& H+ 8@ :# :# :# a+ a+ @+ @+ d+ E= )] !] Z! ~] {] ]] ^] t, /] (] E= E= 9 9 j j K& K& F+ f> f> R. H+ + + + + + + + n l l + 0 0 4 6+ 7& D{ D{ D{ D{ D{ D{ D{ E{ E{ }{ <{ <{ D{ _] 8& w u O t G o G t i i i i i i i i Q$ I# I# I# G$ 0% n l l E ,% >% ,& ,& 6& '& D E n l n E }# ,+ D D D D D D D D }# D E n n E D }# V V ,+ C D E n l o t T u h h u ` h k G G o o u O ^% ^% ^% ,% >% '$ '$ '$ 9& 9& U% U% 9& Q% i> k+ T T O t t O T T t u G u O T O t ~+ ~+ ~+ i+ V V ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ O O O O O O O O . . T T O t t t D. .% H$ K) K) I# Q$ '% .% .% .% .% '% K) 6# E. k+ R% S% R% i> k+ i+ ,+ ~+ ~+ D. D. 6# K) K) &$ R# ,+ V V i+ i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ j+ {+ h. h. ]+ j+ {+ h. T T . . ` Z Z .. Z Z Z Z Z Z Z Z 6# 7# 7# 5$ F. E. h. ~+ i+ ~+ k+ l& S& [! [! L) i+ i+ ~+ h. h. {+ ]+ ]+ j+ j+ j+ j+ j+ j+ j+ j+ {+ {+ {+ {+ {+ {+ {+ {+ j+ j+ j+ j+ j+ j+ j+ j+ .. .. .. .. .. .. .. .. .. .. @. @. +. +. /. l. 5. (& (& a. (. _. Z ` .. .. ]+ ]+ +@ +@ J- +# {@ #. !. 8# 8# !. #. B. !. #. ^. %. ^. i# S$ a# +. +. +. +. +. +. +. +. [. /. +. +. +. +. /. [. [. @. +. T@ t& /. /. T@ [. /. /. +. @. .. .. Z +. +. +. /. /. /. [. [. +. +. +. +. +. +. +. +. ]+ j+ j+ +# m* O) :] :] +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# ]+ {+ j+ .# m* .# j+ h+ [. [. /. +. +. @. @. +. +. +. +. +. +. +. +. +. @. .. @. [. T@ h+ /. /. /. /. /. /. /. /. l. <] {; y. y. (& [* a. f. 5. 5. [. [. [. [. .# .# +. /. /. [. [. h+ h+ T@ h+ [. [. /. +. +. @. #. j$ K$ K$ K$ j$ j$ [. [. [. [. +% +% b& b& b& +% s% h+ h+ [. [. /. /. +. /. +. @. @. @. /. h+ T@ [. [. [. [. [. [. [. [. /. /. /. /. /. /. /. +# +@ +@ J- l* l* C, 4! 4! l* l* l* l* l* l* l* l* [] s% s% s% s% s% s% s% +% +% +% v+ '. '. ). ). h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. b& b& b& b& +% +% [. [. h+ h+ a# a# J$ J$ J$ J$ /. [. [. h+ T@ T@ t& t& h+ [. [. /. +. +. @. @. +% +% +% +% +% +% +% +% v+ v+ v+ v+ v+ v+ v+ v+ [. [. [. [. [. [. [. [. h+ @. @. h+ h+ @. @. h+ @. @. +. +. /. [. [. [. [. [. [. [. [. [. [. [. +. /. /. [. [. h+ h+ T@ [. [. [. [. [. [. [. [. +. +. /. [. [. /. +. +. [. [. [. [. [. [. [. [. l. l. l. l. l. l. l. l. l. 5. 5. u$ u$ 5. 5. l. t& t& T@ T@ h+ [. [. /. h+ h+ h+ [. [. /. /. /. +. /. h+ T@ T@ h+ /. +. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. [. t& h+ /. @. .. @. +. /. u$ 5. (. _. <. _. :. :. :. (. l. u$ u$ l. (. :. /. /. /. /. /. l. l. l. l. a. a. y. y. y. y. @* }] J{ |] 1] 2] 3] 4] 5] 6] Y) 7] P{ 8] 9] 0] a] b] c] h i d] D~ e] f] g] '! h] i] j] k] l] m] n] o] p] C' i> U@ h+ T +. +. j. j. Z@ Z@ Z@ j. W@ (. :. _. _. :. (. l. 5. 5. l. l. l. (. (. (. /. /. /. /. /. /. /. /. .. .. .. .. .. .. .. .. _. _. :. :. (. (. l. l. w$ w$ u$ 5. 5. l. (. (. 5. 5. 5. 5. 5. 5. 5. 5. :. (. 5. u$ u$ 5. (. :. M ;+ =. +% @% +% ). &. ). ). '. '. v+ +% +% +% s% @% v+ '. '. v+ @% s% +% +% +% +% +% +% +% +% /. /. /. /. /. /. /. /. +. +. +. /. /. [. [. [. 4. 4. l. l. l. l. W@ W@ b# b# b# b# & & ", ") ! ) ' ~ ' ! 2 2 ~ ~ ~ ' ' ' ; $ $ $ ; | 4 0 4 } ; $ $ ; | } ^# ^# ^# ^# ^# ^# ^# ^# K. K. K. K. K. K. K. ' '# ,# n$ J, ($ ># !# '# @+ {# Z. Z. `. 8 $$ 5+ T. S. m$ J@ '@ -] F) >, (! D! !@ !@ H) 0) G' k$ 0$ E+ -@ 7@ 6+ 3 | 1 1 1 5+ 3+ D+ P% P% H+ J+ K+ K+ K+ 6+ 6+ #$ #$ $- ]] {] q] r] s] t] r] u] v] w] ^] f f j j j j 9+ K& ;@ F+ F+ 4+ H+ + + + + + + + 0 0 0 + + + + K@ 7& D{ 7& D{ 7& D{ 7& D{ j& <{ j& <{ j& <{ j& j& p G t u o k o u o o k k i h h j F$ F$ Q$ Q$ G$ 0% n l l E ,% >% ,& ,& 6& '& D E n n n D }# C D D D D D D D D D D E E E E D D C C }# D D E n n o t T u i h u ` i o u G o o u O ,% ,% ,% ,% ,% >% >% >% U% U% ^% ^% U% 9& Q% i> T O t t t t O T t u G u O T O t i+ V V V V ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ O O O O O O O O . T T T O t t t 6# .% H$ K) K) I# Q$ '% '% '% '% '% '% K) K) D. k+ R% S% R% i> k+ i+ ,+ i+ i+ &$ &$ K) K) K) D. R# ,+ V V i+ i+ ~+ ~+ i+ i+ i+ ~+ ~+ ~+ h. h. ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ]+ h. ~+ h. ]+ j+ ]+ h. . . . ` ` ` ` ` Z Z Z Z Z Z Z Z 6# 7# 7# 5$ F. E. h. ~+ ~+ ~+ k+ l& S& [! [! [! ~+ h. h. h. h. {+ {+ {+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ {+ {+ {+ {+ {+ {+ {+ {+ j+ j+ j+ j+ j+ j+ j+ j+ .. .. .. .. .. .. .. .. .. .. @. @. +. +. /. l. l. a. a. :+ (. :. .. Z .. .. ]+ ]+ +@ +@ J- J- {+ #. !. 8# 8# !. #. B. !. #. ^. ^. ^. h# S$ K$ !. +. +. +. +. +. +. +. /. +. +. @. @. +. +. /. /. @. +. T@ t& /. /. T@ @. @. @. @. +. +. +. +. +. +. +. /. /. /. [. [. +. +. +. +. +. +. +. +. ]+ ]+ j+ +# .# m* O) O) +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# ]+ {+ j+ .# m* .# j+ +. +. +. /. /. /. /. /. /. /. /. /. /. /. /. /. h+ /. @. +. [. [. /. @. /. /. /. /. /. /. /. l. [* y. b. b. (& [* a. :+ 5. 5. [. [. [. [. .# .# /. /. /. [. [. h+ h+ h+ [. [. /. /. /. /. +. !. j$ K$ K$ K$ j$ j$ [. [. [. [. +% +% b& b& b& +% s% T@ T@ h+ [. [. [. /. /. +. +. @. +. /. h+ T@ [. [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. +# +# l* .# l* .# C, m* l* .# l* .# l* .# l* .# s% s% s% s% s% s% s% s% @% @% +% +% v+ v+ '. '. h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. =- =- =- =- @% @% h+ h+ h+ h+ a# a# J$ J$ J$ J$ h+ h+ h+ h+ [. [. [. [. [. [. /. /. /. /. +. +. +% +% +% +% +% +% +% +% v+ v+ v+ v+ v+ v+ v+ v+ [. [. [. [. [. [. [. [. h+ @. @. h+ h+ @. @. h+ +. +. /. /. [. [. h+ h+ [. [. [. [. [. [. [. [. /. /. /. [. [. h+ h+ h+ [. [. [. [. [. [. [. [. +. /. /. [. [. /. /. +. [. [. [. [. [. [. [. [. l. l. l. l. l. l. l. l. l. 5. 5. u$ u$ 5. 5. l. h+ h+ h+ h+ [. [. [. [. h+ h+ h+ [. [. /. /. /. +. /. [. [. [. [. /. +. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. [. [. /. /. +. /. /. [. h+ l. (. :. _. _. :. l. 5. :. (. l. 5. 5. l. (. :. /. /. /. /. l. l. l. a. a. a. y. y. b. b. u. x] y] z] A] B] C] D] E] F] G] H] I] J] 9] K] L] M] N] O] P] Q] R] S] T] U] V] W] ] e~ i] X] Y] Z] `] ^ .^ [! ,% m@ T@ .. +. +. j. j. Z@ Z@ Z@ Z@ W@ l. :. _. _. :. l. l. 5. 5. l. l. l. (. (. (. /. /. /. /. /. /. /. /. h+ h+ h+ h+ h+ h+ h+ h+ (. l. l. l. 5. u$ u$ u$ u$ u$ 5. 5. 5. 5. l. l. 5. 5. 5. 5. 5. 5. 5. 5. :. (. 5. u$ u$ 5. (. :. ;+ ,. ). v+ +% +% '. ). ). '. '. '. v+ +% +% +% @% +% +% v+ v+ +% +% @% +% +% +% +% +% +% +% +% /. /. /. /. /. /. /. /. /. /. [. [. h+ h+ h+ h+ 4. 4. l. l. l. l. W@ W@ b# b# b# b# & & ", ") ! ! ~ ~ ' ! 2 2 ~ ~ ~ ' ' ' ; $ $ $ ; | } 4 + 0 | ; $ ; 1 | | | | | | | | | ; ; ; ; ; ; ; ' !# B# B# n$ ># A# A# !# L@ {# 7 7 8 j }$ 3+ L. S. d@ '@ d@ J@ F) )@ U$ =% (! D! 0) 0) G' +^ Q~ -@ 7@ b+ a+ 6+ } } 1 1 5+ 3+ D+ D+ P% 9+ I+ @^ _# K+ 6+ 3 {# {# #^ Z! Z! $^ %^ W> W> &^ *^ ^] ^] ^] B{ _{ i i h h H+ 9+ R~ ;@ ;@ F! H+ + + + + + + + } 4 4 0 + l n '$ M% N% M% N% M% N% M% N% h> 8& 6& j& ,& N% b+ b+ <# o G o i i k G u G o k i h j 9 5& 3& b% F$ 0% 0% n l l E ,% >% ,& ,& 6& '& E E n n E D }# C D D D D D D D D E E D D D D E E E E E E E E E E o t T t k i u . k G u u o o u t >% >% ,% ,% ,% ,% ^% ^% ^% ^% ,% ,% ^% U% 9& Q% t t u G G u t t t u G u O T O t C C C ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ O O O O O O O O T T T O O O t t 6# .% H$ K) K) I# Q$ '% K) K) K) K) '% '% '% ^& k+ R% S% R% i> k+ i+ ,+ C C R# ^& '% K) 6# D. R# ,+ V V i+ i+ ~+ ~+ V V i+ i+ ~+ h. h. h. ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ h. ~+ i+ ~+ ]+ j+ ]+ {+ ` ` ` ` ` . . . Z Z Z Z Z Z Z Z 6# 7# 7# 5$ F. E. h. ~+ ~+ ~+ k+ l& S& [! [! [! {+ {+ {+ {+ h. h. h. h. {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ j+ j+ j+ j+ j+ j+ j+ j+ @. @. @. @. @. @. @. @. .. .. @. @. +. +. /. l. (. :+ :+ :+ :. :. @. @. .. .. ]+ ]+ +@ +@ J- J- {+ ]+ j+ +# +# j+ m@ {@ L) L) [! [! d& _& =^ -^ !. +. +. +. +. +. +. +. @. @. @. @. @. @. @. @. /. .. @. T@ T@ /. +. h+ Z Z .. @. +. /. [. [. +. +. +. /. /. /. [. [. +. +. +. +. +. +. +. +. {+ {+ ]+ j+ +# +# .# .# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# ]+ {+ j+ .# m* .# j+ .. @. @. +. /. [. h+ h+ [. [. [. [. [. [. [. [. t& [. +. +. /. /. @. Z /. /. /. /. /. /. /. l. (& b. v. b. (& [* (& :+ 5. 5. [. [. [. [. .# .# /. /. /. [. [. h+ h+ h+ /. /. /. /. /. [. [. j$ j$ K$ K$ K$ j$ j$ [. [. [. [. +% +% b& b& b& +% -) t& T@ T@ T@ h+ h+ h+ /. /. +. +. +. /. h+ h+ [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ .# [. .# [. +# /. .# [. .# [. .# [. .# [. s% s% s% s% s% s% s% s% @% @% @% @% +% +% +% +% h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. =- =- =- =- @% @% h+ h+ /. /. 8# 8# S$ S$ S$ S$ T@ h+ h+ [. /. +. @. @. /. /. /. /. /. [. [. [. +% +% +% +% +% +% +% +% @% @% @% @% @% @% @% @% [. [. [. [. [. [. [. [. h+ +. +. h+ h+ +. +. h+ [. [. [. [. h+ h+ h+ h+ [. [. [. [. [. [. [. [. /. /. /. [. [. h+ h+ h+ [. [. [. [. [. [. [. [. (. l. 5. 5. 5. 5. l. (. 5. 5. 5. 5. 5. 5. 5. 5. l. l. l. l. l. l. l. l. l. 5. 5. u$ u$ 5. 5. l. /. /. /. /. [. [. [. [. h+ h+ h+ [. [. /. /. /. /. /. +. @. @. +. /. /. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. [. @. +. [. h+ T@ T@ T@ T@ :. _. _. :. (. l. u$ u$ (. (. l. 5. 5. l. (. (. /. /. l. l. l. l. a. a. (& y. y. b. u. w. w. ;^ >^ ,^ '^ )^ !^ ~^ {^ ]^ ^^ /^ (^ _^ :^ <^ [^ }^ |^ 1^ &' 2^ 3^ 4^ T] 5^ 6^ 7^ 8^ 9^ 0^ a^ b^ c^ d^ e^ 5# x @+ $. t& /. +. +. '. '. t+ t+ t+ t+ /$ W@ j. j. j. j. W@ /$ /$ /$ W@ W@ W@ j. j. j. h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ T@ T@ u$ u$ u$ w$ w$ w$ v$ v$ l. l. 5. 5. 5. 5. u$ u$ 5. 5. 5. 5. 5. 5. 5. 5. :. (. 5. u$ u$ 5. (. :. =. ). ). '. v+ +% +% @% '. '. '. v+ v+ v+ +% +% v+ +% +% @% @% +% +% v+ +% +% +% +% +% +% +% +% /. /. /. /. /. /. /. /. [. [. h+ h+ T@ T@ T@ t& 4. 4. l. l. l. l. W@ W@ b# b# b# b# & & ", "! & ! ~ 2 ~ ) 2 2 ~ ~ ~ ' ' ' ; ; ; ; 1 1 | } 0 4 } 1 1 1 | | | | | | | | | | 1 1 1 1 1 1 1 ~ A# B# B# B# A# A# A# A# @+ {# 7 7 8 9 $$ 5+ P. S. -] -] J@ b$ ;, @^ P$ P$ U$ =% G' G' G' E! A{ 7@ b+ b+ a+ a+ 4 4 | | 5+ 3+ D+ D+ P% 9+ ;] f^ _# K+ 6+ 3 ~# C= g^ 1* h^ i^ j^ k^ l^ j^ m^ n^ (] /] B{ B{ i i h h H+ H+ % ,& ,& 6& '& E E E E E D }# }# D D D D D D D D n E D }# }# D E n l l l n n E E D o u O t o k G O o u t u G o G t >% >% >% ,% ^% U% U% U% ,% ,% ,% >% ,% ^% U% 9& t u G G G G u t t u G u O T O t D D }# C C ,+ ,+ V ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ O O O O O O O O T T O O O O O R 6# .% H$ K) K) I# Q$ '% 6# 6# 6# K) K) '% .% R$ k+ R% S% R% i> k+ i+ ,+ D }# J# R# '% K) 6# D. R# ,+ V V i+ i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ i+ i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ h. i+ V ~+ ]+ j+ ]+ {+ .. Z Z ` . . T T Z Z Z Z Z Z Z Z 6# 7# 7# 5$ F. E. h. ~+ h. h. l& l& S& S& S& S& j+ j+ ]+ {+ {+ h. ~+ ~+ h. h. h. h. h. h. h. h. {+ {+ {+ {+ {+ {+ {+ {+ j+ j+ j+ j+ j+ j+ j+ j+ @. @. @. @. @. @. @. @. .. .. @. @. +. +. /. l. (. g. g. g. :. (. +. /. .. .. ]+ ]+ +@ +@ J- J- F. G. j+ +# +# j+ m@ {@ L) L) L) L) d& _& =^ o^ !. +. +. +. +. +. +. +. .. .. .. @. @. .. .. .. /. .. @. h+ T@ +. +. h+ .. .. @. @. +. +. /. /. +. +. +. /. /. /. [. [. /. /. /. /. /. /. /. /. {+ {+ ]+ ]+ j+ j+ +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# ]+ {+ j+ .# m* .# j+ @. +. +. +. /. [. [. [. [. [. [. [. [. [. [. [. T@ [. +. +. /. [. +. .. [. [. [. [. [. [. [. 5. <] {; y. I- [* O; (& :+ 5. 5. [. [. [. [. .# .# [. [. [. [. [. [. [. [. +. +. /. /. [. h+ h+ q$ j$ K$ K$ K$ j$ j$ [. [. [. [. +% +% b& b& b& +% -) t& t& t& T@ T@ T@ T@ [. [. /. /. /. [. [. [. [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ w$ w$ u$ 5. 5. l. (. (. 5. 5. 5. 5. 5. 5. 5. 5. s% s% s% s% s% s% s% s% s% s% s% @% @% @% @% @% h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. r$ r$ r$ r$ v+ v+ /. /. /. /. 8# 8# S$ S$ S$ S$ [. [. /. /. +. +. +. @. +. +. /. /. [. h+ h+ T@ +% +% +% +% +% +% +% +% @% @% @% @% @% @% @% @% [. [. [. [. [. [. [. [. T@ +. +. T@ T@ +. +. T@ h+ h+ h+ h+ h+ T@ T@ T@ [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. l. l. 5. u$ u$ 5. l. l. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. l. 5. 5. u$ u$ 5. 5. l. @. @. +. +. /. [. [. h+ h+ h+ h+ [. [. /. /. /. [. +. @. Z Z @. +. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. +. /. h+ t& Z% t& T@ h+ (. (. (. (. (. l. 5. 5. (. l. l. l. l. l. l. (. /. /. l. l. l. l. a. a. y. y. y. b. u. u. w. p^ L! q^ r^ s^ t^ u^ v^ w^ x^ y^ z^ A^ l> B^ C^ D^ c] E^ F^ G^ H^ I^ J^ K^ L^ M^ M^ N^ O^ O^ P^ Q^ R^ z# |$ !# {# C. h+ +. /. /. v+ v+ r$ r$ r$ r$ /$ /$ W@ W@ W@ W@ /$ /$ /$ /$ W@ W@ W@ j. j. j. h+ h+ h+ h+ h+ h+ h+ h+ /. /. /. /. /. /. /. /. w$ w$ w$ w$ w$ w$ w$ w$ (. (. l. 5. 5. u$ w$ w$ 5. 5. 5. 5. 5. 5. 5. 5. :. (. 5. u$ u$ 5. (. :. +% v+ '. '. '. +% s% -) '. '. v+ v+ v+ v+ v+ v+ '. v+ @% s% s% @% v+ '. +% +% +% +% +% +% +% +% /. /. /. /. /. /. /. /. [. [. [. h+ h+ h+ T@ T@ 4. 4. l. l. l. l. W@ W@ b# b# b# b# & & ", "! & ! ~ 2 ~ ' 2 2 ~ ~ ~ ' ' ' ; ; ; 1 1 1 1 1 1 1 1 1 1 | } 4 | | | | | | | | 1 1 1 1 1 1 1 ~ A# B# B# B# A# A# A# A# ~# G@ Z. 7 8 8 W. 1+ P. S. -] -] J@ b$ ;, @^ P$ U$ U$ U$ g& G' 0) _! L+ b+ 7@ 7@ 6+ 6+ 0 0 | } 3+ 3+ 7+ D+ D+ K& ;] f^ _# K+ 6+ 3 ~# C= {] S^ t] T^ U^ 8* V^ W^ X> t, t, ^] B{ f 8 8 j h H+ H+ % ,& ,& 6& '& n n E D D D D D D D D D D D D D E E D D D D E E + + l n E E D D o u t t G G G u G t O t G o G t >% >% ,% ^% ^% U% 9& 9& ,% ,% ,% >% ,% ^% U% 9& t u G G G G u t t u G u O T O t D D }# C C ,+ ,+ V ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ O O O O O O O O O O O O O O T ;+ 6# 1# 3$ _$ _$ 2# i$ !$ _$ _$ X^ X^ _$ !$ 3$ I# k+ R% S% R% i> k+ i+ ,+ D }# J# R# '% K) 6# D. R# ,+ V V i+ i+ ~+ ~+ ]+ {+ {+ ~+ i+ V ,+ ,+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ h. i+ V i+ {+ ]+ {+ h. .. Z Z ` . . T T Z Z Z Z Z Z Z Z 6# 7# 7# 5$ F. E. h. ~+ h. h. l& l& S& S& S& S& j+ j+ j+ ]+ {+ h. h. h. h. h. h. h. h. h. h. h. {+ {+ {+ {+ {+ {+ {+ {+ j+ j+ j+ j+ j+ j+ j+ j+ +. +. +. +. +. +. +. +. .. .. @. @. +. +. /. l. (. :+ g. f. _. :. /. /. .. .. ]+ ]+ +@ +@ J- J- =$ T# S# 0# J- +@ M$ T$ &- &- Y^ Z^ Z^ Z^ `^ _& !. +. +. +. +. +. +. +. Z .. @. +. +. @. .. Z +. Z .. h+ h+ +. @. [. /. /. +. +. @. @. .. .. +. +. +. /. /. /. [. [. /. /. /. /. /. /. /. /. ]+ ]+ ]+ ]+ j+ j+ j+ j+ +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# ]+ {+ j+ .# m* .# j+ [. [. [. /. +. +. +. @. +. +. +. +. +. +. +. +. /. @. .. +. [. h+ [. /. [. [. [. [. [. [. [. 5. / ./ 1{ 1{ <] O; (& :+ 5. 5. [. [. [. [. .# .# [. [. [. [. [. [. [. [. +. /. /. [. h+ h+ T@ q$ j$ K$ K$ K$ j$ j$ [. [. [. [. +% +% b& b& b& +% s% T@ T@ T@ t& t& t& t& [. [. h+ h+ h+ [. [. [. [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ u$ O; O; [* (& (& a. :+ :+ (& (& (& (& (& (& (& (& e# @% @% @% @% @% @% @% @% @% @% @% @% s% s% s% h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. t+ t+ t+ t+ '. '. +. +. /. /. 8# 8# S$ S$ S$ S$ @. +. +. +. /. /. [. [. +. /. /. [. h+ h+ T@ T@ +% +% +% +% +% +% +% +% @% @% @% @% @% @% @% @% [. [. [. [. [. [. [. [. T@ /. /. T@ T@ /. /. T@ T@ T@ T@ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. l. (& [* [* [* [* (& a. (& (& (& (& (& (& (& (& 5. 5. 5. 5. 5. 5. 5. 5. l. 5. 5. u$ u$ 5. 5. l. @. @. +. +. /. [. [. h+ h+ h+ h+ [. [. /. /. /. [. +. @. Z Z @. +. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. h+ T@ t& Z% t& h+ /. +. 5. 5. 5. 5. l. (. (. :. l. l. l. (. (. l. l. l. l. l. l. l. a. a. a. a. y. y. z. z. z. z. +/ @/ #/ $/ %/ &/ */ =/ -/ ;/ >/ ,/ '/ )/ !/ ~/ {/ H- ]/ ^/ // (/ _/ :/ # B# B# ,# !# A# A# ># G@ [@ 6 7 8 8 W. 2+ L. S. d@ '@ d@ J@ F) )@ (! (! =% =% g& G' 0) _! L+ 7@ -@ -@ 3 3 4 0 } } 3+ 3+ 7+ 7+ 7+ K& -] @^ _# K+ 6+ {# {# !] V% S^ &^ 7/ 8/ 9/ 0/ a/ *^ w] v] v] B{ $- 7 Z. 9 9 K& 9+ R~ % ,& ,& 6& '& l n E D }# }# D D D D D D D D D D }# D E n n E D }# l n n E E D D }# G G u t t u G G u O T O G o G t ^% ^% ^% ^% U% U% U% U% ^% ^% ,% ,% ^% U% 9& Q% t t u G G u t t t u G u O T O t C C C ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ O O O O O O O O t t O O O T T ;+ 6# 1# 3$ _$ _$ 2# i$ !$ 1# !$ X^ # X^ _$ 1# H$ k+ R% S% R% i> k+ i+ ,+ C C R# ^& '% K) 6# D. R# ,+ V V i+ i+ ~+ ~+ ]+ {+ {+ ~+ i+ V ,+ ,+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ {+ ~+ i+ i+ h. {+ ~+ i+ ` ` ` ` ` . . . Z Z Z Z Z Z Z Z 6# 7# 7# 5$ F. E. h. ~+ {+ {+ {@ l& S& C& C& C& j+ j+ ]+ ]+ ]+ ]+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ j+ j+ j+ j+ j+ j+ j+ j+ +. +. +. +. +. +. +. +. .. .. @. @. +. +. /. l. 5. a. g. f. <. _. +. /. .. .. ]+ ]+ +@ +@ J- J- =$ T# S# 0# J- +@ M$ T$ &% &- Y^ Z^ b/ b/ `^ _& U@ +. +. +. +. +. +. +. Z .. +. /. /. +. .. Z +. Z .. h+ h+ @. @. [. [. [. /. +. @. .. Z Z +. +. +. /. /. /. [. [. /. /. /. /. /. /. /. /. j+ j+ j+ j+ j+ j+ j+ j+ +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# ]+ {+ j+ .# m* .# j+ h+ h+ [. /. +. @. @. .. @. @. @. @. @. @. @. @. +. .. .. @. [. T@ h+ [. h+ h+ h+ h+ h+ h+ h+ u$ / j; {; {; O; O; (& :+ 5. 5. [. [. [. [. .# .# h+ h+ h+ [. [. /. /. /. [. [. [. h+ h+ h+ h+ a# j$ K$ K$ K$ j$ j$ [. [. [. [. +% +% b& b& b& +% @% h+ h+ T@ T@ T@ t& t& h+ h+ T@ T@ T@ h+ /. /. [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ u$ [* {; I- I- I- I- y. y. I- I- I- I- I- I- I- (& e# @% @% @% @% @% @% @% +% +% +% +% @% @% @% @% h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. t+ t+ t+ t+ '. '. +. +. /. /. 8# 8# S$ S$ S$ S$ @. @. +. /. [. h+ h+ T@ [. [. [. h+ h+ h+ h+ h+ +% +% +% +% +% +% +% +% @% @% @% @% @% @% @% @% [. [. [. [. [. [. [. [. T@ /. /. T@ T@ /. /. T@ h+ h+ h+ h+ [. [. [. [. [. [. [. [. [. [. [. [. h+ h+ h+ [. [. /. /. /. [. [. [. [. [. [. [. 5. 5. (& [* O; O; [* (& (& (& (& (& (& (& (& (& (& u$ u$ u$ u$ u$ u$ u$ u$ l. 5. 5. u$ u$ 5. 5. l. /. /. /. /. [. [. [. [. h+ h+ h+ [. [. /. /. /. /. /. +. @. @. +. /. /. h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. T@ T@ T@ T@ h+ [. +. @. u$ u$ u$ u$ 5. l. :. _. 5. l. (. (. (. (. l. 5. l. l. l. l. a. a. a. y. b. y. z. e) c/ d/ e/ f/ g/ h/ i/ j/ k/ l/ m/ n/ o/ p/ q/ r/ s/ t/ =# &' /] u/ X' v/ w/ x/ y/ z/ A/ A/ B/ C/ D/ E/ F/ G/ H/ I/ J/ K/ =+ B. .. ` /. /. v+ v+ a- a- a- r$ b& _* c# c# c# c# _* :$ :$ :$ b# b# b# Z@ Z@ j. @% h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ 5. 5. 5. l. l. l. (. (. l. l. 5. 5. 5. 5. u$ u$ 5. 5. 5. 5. 5. 5. 5. 5. :. (. 5. u$ u$ 5. (. :. s% @% v+ '. '. v+ @% s% +% +% v+ v+ v+ '. '. '. v+ +% +% @% @% +% +% v+ +% +% +% +% +% +% +% +% /. /. /. /. /. /. /. /. @. +. +. +. /. /. [. [. 4. 4. l. l. l. l. W@ W@ b# b# b# b# & & ", "& }+ ! ~ 3 2 ~ 2 2 ~ ~ ~ ' ' ' $ ; | | | 1 ; $ # $ $ ; ; ; $ $ | | | | | | | | | | | | | | | 2 ($ n$ ,# C# '# !# ># ($ ~# G@ 7 `. 9 9 W. 1+ T. S. m$ J@ '@ -] F) >, >] !@ D! =% g& G' 0) z{ A{ -@ E+ =@ ~ 2 } 4 } } 3+ 3+ 7+ 7+ 7+ 3+ '@ )@ K+ K+ 6+ #$ #$ C{ k* t] L/ M/ N/ O/ P/ Q/ R/ S/ T/ n^ $- f 9 8 8 8 3+ K& ;@ R~ R~ G+ H+ + + + + + + + + + + + + 0 0 0 H# H# H# H# H# H# H# H# )$ )$ )$ )$ )$ )$ )$ )$ h k o o i h i o i k k o G G u u F$ F$ Q$ Q$ G$ 0% n l l E ,% >% ,& ,& 6& '& l n E }# }# }# D E D D D D D D D D ,+ }# n + + n }# ,+ E E D D D D }# }# G G u t O t G o t O T O u o G t 9& U% U% U% U% ^% ^% ^% U% U% ^% ^% U% 9& Q% i> T O t t t t O T t u G u O T O t i+ V V V V ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ O O O O O O O O t t t O T T T S 6# 1# 3$ _$ _$ 2# i$ !$ 2# 1# _$ # # X^ !$ .% k+ R% S% R% i> k+ i+ ,+ i+ i+ &$ &$ K) K) K) D. R# ,+ V V i+ i+ ~+ ~+ i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ j+ h. i+ i+ h. ~+ V C . . . ` ` ` ` ` Z Z Z Z Z Z Z Z 6# 7# 7# 5$ F. E. h. ~+ {+ {+ {@ l& S& C& C& C& ]+ ]+ ]+ ]+ ]+ j+ j+ j+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ {+ {+ {+ {+ {+ {+ {+ {+ j+ j+ j+ j+ j+ j+ j+ j+ /. /. /. /. /. /. /. /. .. .. @. @. +. +. /. l. w$ (& :+ e. <. <. @. +. .. .. ]+ ]+ +@ +@ J- J- =$ @& S# 0# 0# +@ M$ T$ &% &- Y^ b/ U/ U/ `^ d& U@ +. +. +. +. +. +. +. Z @. /. h+ h+ /. @. Z @. Z .. [. h+ @. @. [. +. +. +. +. @. @. @. @. +. +. +. /. /. /. [. [. [. [. [. [. [. [. [. [. +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# ]+ {+ j+ .# m* .# j+ /. /. /. /. /. +. +. +. +. +. +. +. +. +. +. +. [. +. @. +. [. h+ /. +. h+ h+ h+ h+ h+ h+ h+ u$ (& b. v. b. [* O; O; (& 5. 5. [. [. [. [. .# .# h+ h+ h+ [. [. /. /. /. T@ T@ h+ h+ h+ h+ [. j$ j$ K$ K$ K$ j$ j$ [. [. [. [. +% +% b& b& b& +% v+ [. [. [. h+ T@ T@ T@ h+ T@ T@ t& T@ h+ /. +. [. [. [. [. [. [. [. [. /. /. /. /. /. /. /. l. y. z. e) e) e) e) c/ c/ e) e) e) e) e) e) e) I- /$ +% +% +% +% +% +% +% '. '. v+ v+ +% +% @% @% h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. b& b& b& b& +% +% [. [. h+ h+ a# a# J$ J$ J$ J$ [. [. [. [. h+ h+ h+ h+ T@ T@ h+ h+ h+ h+ [. [. +% +% +% +% +% +% +% +% v+ v+ v+ v+ v+ v+ v+ v+ [. [. [. [. [. [. [. [. t& /. /. t& t& /. /. t& h+ h+ [. [. /. /. +. +. [. [. [. [. [. [. [. [. h+ h+ h+ [. [. /. /. /. [. [. [. [. [. [. [. 5. 5. [* [* O; O; [* [* (& (& (& (& (& (& (& (& (& u$ u$ u$ u$ u$ u$ u$ u$ l. 5. 5. u$ u$ 5. 5. l. h+ h+ h+ h+ [. [. [. [. h+ h+ h+ [. [. /. /. /. +. /. [. [. [. [. /. +. h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. h+ [. /. /. +. /. /. [. l. 5. u$ u$ u$ 5. l. (. 5. l. (. :. :. (. l. 5. l. l. a. a. a. a. y. y. b. z. e) d/ V/ W/ X/ Y/ Z/ `/ ( .( +( @( #( $( %( &( *( =( -( ;( >( ,( '( )( !( ~( {( ]( ^( /( (( (( _( /( :( <( [( }( |( I/ J/ 1( 3. /+ /. /. [. [. $& $& e> e> e> b& =- _* :* 2( 2( :* _* _* :$ :$ b# b# b# Z@ Z@ j. v+ /. /. /. /. /. /. /. T@ T@ T@ T@ T@ T@ T@ T@ u$ 5. 5. l. l. (. (. (. u$ u$ 5. 5. 5. 5. l. l. 5. 5. 5. 5. 5. 5. 5. 5. :. (. 5. u$ u$ 5. (. :. +% +% v+ v+ v+ v+ v+ +% +% +% +% v+ '. '. '. ). @% +% +% v+ v+ +% +% @% +% +% +% +% +% +% +% +% /. /. /. /. /. /. /. /. /. /. /. /. [. [. h+ h+ 4. 4. l. l. l. l. W@ W@ b# b# b# b# & & ", "& }+ ! ~ 3 2 ~ 2 2 ~ ~ ~ ' ' ' $ ; | } | 1 ; # $ ; ; $ $ % - w@ | | | | | | | | | | | | | | | 2 ($ n$ !# '# '# !# ># ($ {# ~# `. 9 h h 8 > F! R. K. ^# I+ [# K+ { 3( 4( L+ Q~ +^ E! _! z{ 7@ -@ =@ x+ ' ~ 3 4 4 4 K& 3+ 3+ 7+ F+ 4+ 8@ :# 6+ 6+ @+ @+ f ]] Z* >- 5( V> 6( 7( 8( 9( 0( a( b( c( y= g p w G@ `. | 3+ F! F! G+ G+ I+ + + + + + + + 4 4 0 0 + l l n H# H# H# H# H# H# H# H# 0% 0% H# )$ )$ H+ 9+ 9+ l E D E l l n D D D D D E E E E G$ J# I# J# G$ 0% n l l E ,% >% E# ,& '$ ,% + n D }# C }# D E D D D D D D F D V C l 0 0 l C V }# }# }# }# }# }# }# }# G G u t O t G k t T . O u o G t Q% Q% 9& U% U% ^% ,% ,% 9& 9& U% U% 9& Q% i> k+ T T O t t O T T t u G u O T O t ~+ ~+ ~+ i+ V V ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ O O O O O O O O t t t O T T . S 6# 1# 3$ _$ _$ 2# i$ !$ i$ 3$ _$ # s. # _$ '% ~+ R% 9& Q% i> k+ i+ ,+ ~+ ~+ D. D. D. &$ K) &$ ,+ 9& V V i+ i+ ~+ ~+ C C V i+ h. {+ G. j+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ +# {+ ~+ i+ ~+ ~+ ,+ }# T U+ . W+ ` $. Z B. Z $. Z $. Z $. Z Z D. E. 7# F. F. E. h. ~+ ]+ {+ {@ l& l& C& k+ i> {+ {+ {+ ]+ j+ +# +# +# j+ j+ j+ j+ j+ j+ j+ j+ {+ {+ {+ {+ {+ {+ {+ {+ j+ j+ j+ j+ j+ j+ j+ j+ /. /. /. /. /. /. /. /. .. .. @. @. +. +. /. l. v$ [* :+ e. -. <. .. @. .. .. ]+ ]+ +@ +@ J- J- =$ T# 2{ J- 5! +@ &) T$ d( &- 5% y% w% b/ j% ^{ U@ +. +. +. +. +. +. +. .. +. [. T@ T@ [. +. .. @. ` Z [. h+ @. .. [. Z .. .. @. +. /. /. [. +. +. +. /. /. /. [. [. [. [. [. [. [. [. [. [. m* .# $& .# .# .# .# .# +# +# +# +# +# 2% +# +# +# +# +# +# +# +# +# +# +# ]+ {+ +. [. h+ [. +. @. @. +. +. /. [. [. h+ [. [. [. [. [. [. [. [. T@ 5. +. (. /. l. @. <. h+ u$ h+ u$ h+ u$ h+ u$ l@ }* e( ;. (& O; <] w$ 5. 5. [. [. [. .# .# .# T@ h+ h+ [. [. /. /. +. t& t& T@ T@ h+ [. [. 8# j$ K$ K$ K$ j$ j$ [. [. [. [. +% +% b& b& b& +% '. /. /. [. [. h+ h+ T@ h+ T@ t& t& t& h+ /. +. [. [. [. [. [. [. [. [. /. /. /. /. /. /. /. l. b. u. y. e) I- c/ 1{ d/ I- e) I- e) I- e) I- I- /$ +% +% +% +% +% +% +% ). ). '. '. v+ +% +% +% h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. s% s% '' s% s% s% T@ T@ h+ h+ a# a# a# J$ a# a# t& t& T@ T@ h+ [. [. /. t& t& T@ T@ h+ [. [. /. +% +% +% +% +% +% +% +% v+ v+ v+ v+ v+ v+ v+ v+ [. [. [. [. [. [. [. [. t& /. /. t& t& /. /. t& [. [. .# /. j+ +. ]+ @. .# [. .# [. .# [. .# [. T@ h+ @% [. [. /. /. +. [. [. [. [. [. j$ [. j$ 5. /= w$ O; w$ O; u$ (& 5. (& 5. (& 5. (& /$ 5. u$ u$ u$ u$ u$ u$ u$ u$ l. 5. 5. u$ u$ 5. 5. l. v$ v$ T@ T@ h+ [. [. /. h+ h+ h+ [. [. /. +# /. +. /. h+ T@ T@ h+ /. +. h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. /. +. @. .. @. /. h+ t& _. g. 5. u$ w$ w$ u$ 5. u$ l. (. :. :. (. l. h+ /. /. l. l. a. a. y. z. w. x] f( g( h( i( j( p~ k( l( m( n( o( p( q( r( s( t( u( v( w( x( y( 1. z( A( B( C( D( D( D( E( F( G( /( H( I( J( K( L( M( c( B= N( /+ U# w$ O( 5. 5. +% +% +% +% b& b& _* c# :* 2( 2( :* c# e# :$ /$ W@ W@ W@ j. j. j. /. /. /. /. /. /. /. /. h+ h+ h+ h+ h+ h+ h+ h+ w$ u$ u$ 5. 5. l. (. (. w$ w$ u$ 5. 5. l. (. (. 5. 5. 5. 5. 5. 5. 5. 5. :. (. 5. u$ u$ 5. (. :. v+ v+ v+ v+ v+ v+ '. '. +% +% +% v+ '. '. ). ). s% @% v+ '. '. v+ @% s% +% +% +% +% +% +% +% +% /. /. /. /. /. /. /. /. [. [. [. h+ h+ T@ T@ T@ 4. 4. l. l. l. l. W@ W@ W@ W@ b# b# b# b# ", "$ ; ; 1 | | } 1 1 1 1 1 1 1 1 } } } | | 1 1 1 $ ; ; # % # 1 4 4 } } 1 ; $ # # } | ; $ $ ; | } 3 E+ 2 ~ ~ 2 2 3 3 3 3 3 3 3 3 } 3+ 3+ } } } } 3 3 b+ b+ 7@ 7@ S~ K% K% B# n$ J, L% ~> |$ #+ 7@ 3 _# _# J+ J+ 8@ F! -, 4+ 1 ~# E= $- f P( Z! s] Q( R( S( T( U( V( 9( W( X( Y( Z( `( _ s$ h# ($ -@ 6+ p& K. m H@ ] Y+ ._ ._ (# (# (# (# E# K@ K@ K@ K@ E# <# p p k )$ 3& 3& 3& 3& 3& 3& 3& 5& 5& 5& 5& 3& b% F$ G$ F a% [# I+ I+ [# a% F a% [# [# [# a% F f+ f+ n k q k k k k k G G G G G v G G t G o G t t }# E F F F F F F +_ F }# }# }# }# }# }# }# }# D D D D D D D D }# }# }# D E n n n }# }# }# D E n n n U% ,% >% ,% U% U% ^% >% ^% ^% ^% ^% ^% ^% ^% ^% U% U% U% U% U% U% U% U% U% U% 9& 9& 9& Q% Q% Q% C ,+ V ,+ D }# V ]+ i+ i+ i+ i+ i+ i+ i+ i+ C. C. W+ W+ U+ U+ d+ d+ W+ W+ W+ W+ W+ W+ W+ . !$ @_ M# M# M# M# M# M# @_ #_ $_ %_ %_ $_ #_ !$ 9+ >% ,+ i+ V ,+ ,+ V i+ i+ i+ i+ i+ i+ &$ i+ Q% R% Q% Q% Q% Q% V V V V &$ &$ D. E. 7# F. O O O O O O O O ` ` ` ` ` ` ` ` $. ~. W+ ~. B. i# B. %. W+ ~. B. i# #. ^. C. W+ j+ j+ G. ]+ {+ h. h. ~+ {+ {+ {+ {+ {+ {@ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ ~+ h. ]+ j+ j+ ]+ h. ~+ @. @. @. @. @. @. @. @. .. @. +. +. +. .. ` . +. +. +. +. @. @. @. @. @. @. @. @. @. @. @. :. 3. r+ m. m. s# s# #. #. !. !. U@ U@ t% t% t% t% &_ 5% *_ 5% =_ &_ *_ 5% -_ &) -_ &) ;_ $% >_ )= j+ /. /. [. [. h+ h+ T@ /. /. /. /. /. /. /. /. 8# 8# 8# 8# 8# 8# 8# 8# #. #. #. #. #. #. #. @. .. =. =. ). '. v+ v+ v+ '. '. '. v+ v+ v+ +% +% v+ v+ r$ v+ v+ v+ /. /. [. [. j$ j$ j$ K$ j$ .* ]+ +@ +@ +@ +# +# [. [. [. [. [. 5. 5. 5. 5. 5. +. +. /. [. [. h+ T@ T@ @. @. +. +. /. [. [. h+ 5. (& 5. (& 5. (& 5. (& 5. (& 5. (& 5. (& 5. (& (& (& (& (& 5. 5. 5. [. /. /. +# +# +# J- J- +# h+ [. +. /. h+ T@ [. /. /. /. /. [. [. h+ h+ a# a# K$ h# S$ a# q$ [. /. h+ [. +% v+ r$ b& b& @% s% h+ h+ [. [. /. /. +. h+ h+ h+ h+ h+ h+ h+ h+ 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. (& I- (& I- (& I- (& I- a. y. a. y. a. y. a. a. u$ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ /. [. T@ h+ /. +. [. h+ h+ h+ @% h+ h+ h+ h+ h+ +. /. /. [. [. a# h+ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ [. [. /. /. [. [. h+ t& h+ [. [. T@ t& T@ [. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. [. t& t& T@ T@ h+ [. [. [. .# .# C, m* l* j+ `+ ~+ C, m* C, m* C, m* C, m* @% @% =- @% @% @% h+ h+ h+ h+ a# a# a# J$ a# J$ ,_ G- j$ U# q$ E) T@ 5. T@ w$ -) '_ *) d# '' s% [. [. [. [. [. [. [. [. )_ t& /. /. T@ Z% Z% w$ A% !_ A% v$ w$ w$ h+ h+ +. +. +# .# .# m* 4! O) +. (. (. 5. w$ u$ (. <. 5. 5. 5. 5. 5. 5. 5. 5. /. /. /. /. /. /. /. /. /. /. /. /. /. /. /. l. a. y. a. a. a. a. a. a. l. l. l. l. l. l. /. +# ~_ {_ ]_ ^_ U# m. >. /_ (_ __ :_ 0! <_ [_ }_ |_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ 9_ 0_ a_ b_ c_ d_ e_ f_ g_ h_ i_ j_ k_ l_ m_ n_ I^ o_ p_ q_ r_ s_ t_ u_ v_ %^ e$ ;- k@ d. g. a. g. g. g. g. g. g. t. t. :$ b& b& b& +% +% +% [. v+ @. .. +. j$ a# j$ 8# (. l. u$ w$ w$ u$ l. (. w$ w$ u$ 5. 5. l. (. (. /. /. /. +. @. .. .. .. @. @. +. +. /. [. [. h+ v$ w$ w$ w$ u$ u$ 5. 5. u$ u$ u$ 5. 5. l. l. l. /. [. T@ h+ /. +. [. h+ [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. +. @. .. @. [. T@ h+ /. [. [. [. [. [. [. [. [. t& T@ T@ T@ h+ h+ [. [. [. [. +% +% +% +% ", "1 1 1 1 ; ; ; 1 1 1 1 1 1 1 1 } } } | | 1 1 1 $ ; ; $ % # 1 4 } } | 1 1 ; $ $ } | ; $ $ ; | } 3 2 2 ~ ~ 2 2 3 3 3 3 3 3 3 3 3 $$ $$ 8 8 8 8 {# {# #+ #+ ($ ($ n$ n$ B# B# w_ x_ L% ~> |$ #+ 7@ -@ _# _# J+ J+ d@ d@ -, ]# `. E= !] C{ ]] P( 1* t] T& y_ z_ A_ B_ C_ D_ E_ F_ G_ G_ H_ I_ J_ K_ J, -@ S& L_ /# (# M_ F) @^ _# _# _# _# _# (# E# E# K@ K@ K@ E# <# p p k )$ 3& 3& 3& 3& 3& 3& 3& 3& 3& 5& 5& 3& 3& b% H# N_ O_ ;] M+ M+ ;] O_ +_ O_ O_ ;] ;] ;] O_ +_ F n k k k k k k k G G G G G G G G A. B o G t t }# E F F F F +_ +_ +_ F '= }# }# }# }# }# }# }# D D D D D D D D D D D D D E E E }# }# }# }# D D D D 9& ^% ,% ,% U% 9& U% ,% ^% ^% ^% ^% ^% ^% ^% ^% U% U% U% U% U% U% U% U% U% U% 9& 9& 9& Q% Q% Q% C ,+ V ,+ }# }# V {+ i+ i+ i+ i+ i+ i+ i+ i+ C. C. W+ W+ U+ U+ d+ d+ W+ W+ W+ W+ W+ W+ W+ . !$ @_ @_ @_ @_ @_ @_ @_ @_ #_ #_ P_ P_ #_ #_ !$ )$ }# i+ ~+ i+ ,+ ,+ V i+ i+ i+ i+ i+ i+ i+ i> i> u& u& u& i> i> i+ i+ i+ i+ &$ &$ K) 6# 6# D. ;+ T T T T T T T ` ` ` ` ` ` ` C. $. ~. 5# ~. ^. i# ^. %. 5# ~. ^. i# i# ^. ~. 5# ]+ ]+ ]+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ ~+ h. ]+ j+ j+ ]+ h. ~+ @. @. @. @. @. @. @. @. Z .. @. +. +. .. Z ` @. @. @. @. +. +. +. +. +. +. +. +. +. +. +. (. 3. r+ m. m. s# s# #. !. !. !. U@ U@ t% t% t% Q_ 4% 7% 6% 7% R_ 4% R_ 4% =_ &) S_ 3{ T_ d= U_ V_ j+ +. +. /. [. [. [. h+ /. /. /. /. /. /. /. /. 8# 8# 8# 8# 8# 8# 8# 8# !. !. !. !. !. !. !. !. ). ). ). '. '. '. '. '. '. '. '. v+ v+ v+ +% +% r$ r$ r$ r$ v+ v+ /. /. [. [. j$ j$ K$ K$ K$ K$ +@ +@ J- J- .# .# [. h+ [. [. 5. 5. (& (& (& (& /. /. [. [. [. [. h+ h+ +. +. /. /. /. /. [. 5. 5. (& (& (& (& (& (& (& O; O; O; O; O; O; O; O; (& (& (& (& 5. 5. [. [. /. /. +# +# J- J- J- +# m* [. +. /. h+ T@ [. /. /. /. /. [. [. h+ h+ a# a# K$ h# S$ a# q$ [. /. h+ [. +% v+ r$ b& b& @% @% h+ h+ [. [. /. /. /. h+ h+ h+ h+ h+ h+ h+ h+ u$ u$ u$ u$ u$ u$ u$ u$ 5. 5. 5. 5. 5. 5. 5. 5. (& (& (& (& (& (& (& (& a. a. a. a. a. a. a. a. h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ /. [. T@ h+ /. +. [. h+ [. [. h+ h+ h+ T@ T@ T@ /. /. /. [. [. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ T@ h+ [. [. [. [. h+ T@ t& h+ [. [. T@ t& T@ [. /. /. /. /. /. /. /. /. h+ h+ h+ h+ h+ h+ h+ h+ t& T@ T@ T@ h+ [. [. [. O) K> K> b, K> C, J- +@ C, C, C, C, C, C, C, m* =- =- =- =- @% @% h+ h+ h+ h+ a# a# J$ J$ J$ J$ (* J$ K$ K$ q$ ,_ T@ [. h+ h+ s% -) =) '' =- @% @% h+ h+ h+ h+ h+ h+ h+ F{ T@ /. /. T@ Z% t& w$ v$ <] <] O; u$ u$ h+ [. /. /. .# .# l* l* C, m* [. (. (. l. u$ u$ l. :. 5. 5. 5. 5. 5. 5. 5. 5. [. [. [. [. [. [. [. [. /. /. /. /. /. /. /. l. (& I- (& (& (& (& (& (& l. l. l. l. l. l. /. +# W_ X_ Y_ m@ s# T& e) Z_ `_ : .: +: o~ @: #: $: %: &: *: =: -: ;: >: ,: ': ): 5~ !: ~: {: ]: ^: /: (: _: :: <: [: l_ }: I^ |: 1: 2: 3: 4: 5: 6: 7: 8: 9: 0: e( ;. v. y. b. b. b. b. b. b. b. :+ :$ b& b& b& +% +% [. [. /. +. #. !. K$ J$ K$ S$ (. l. u$ w$ w$ u$ l. (. 5. 5. 5. 5. 5. 5. 5. 5. /. /. /. /. +. +. +. +. +. +. /. /. /. /. [. [. w$ w$ u$ u$ 5. 5. 5. l. u$ u$ u$ 5. 5. l. l. l. /. [. T@ h+ /. +. [. h+ [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. /. +. @. +. [. h+ [. +. [. [. [. [. [. [. [. [. T@ T@ h+ h+ [. [. [. /. /. /. /. /. /. /. ", "} | 1 ; $ $ # 1 1 1 1 1 1 1 1 } } } | | 1 1 1 # ; 1 ; # $ 1 4 | | | 1 1 1 1 1 | | 1 ; ; 1 | | 3 2 2 ~ ~ 2 2 3 3 3 3 3 3 3 3 3 $$ $$ 8 8 8 8 {# {# #+ #+ ($ ($ J, n$ n$ n$ w_ x_ L% ~> |$ #+ 7@ -@ K+ K+ J+ J+ d@ d@ b@ 8@ 9 $- $- $- ]] ]] ]] a: h^ b: c: d: e: f: g: h: i: j: k: Y( l: m: n: o: w+ p: .* 2 w& M_ _# { /# :# :# K+ _# _# E# E# K@ K@ K@ E# E# '$ '$ n )$ 3& 3& 3& 3& 3& 3& 3& b% b% 3& 3& 3& 3& 5& H+ q: O_ ;] M+ M+ ;] O_ O_ O_ O_ ;] M+ M+ M+ M+ [# n k k k k k k k G G G G G G G G A. B o G t t }# E F F F F +_ +_ +_ F '= }# }# }# }# }# }# }# D D D D D D D D E E D D D D }# }# }# }# }# C C C C ,+ Q% U% ^% U% Q% Q% 9& ^% 9& 9& 9& 9& 9& 9& 9& 9& U% U% U% U% U% U% U% U% U% U% 9& 9& 9& Q% Q% Q% C ,+ V ,+ C C V h. i+ i+ i+ i+ i+ i+ i+ i+ C. C. W+ W+ U+ U+ d+ d+ W+ W+ W+ W+ W+ W+ W+ . K) _$ _$ _$ _$ _$ _$ _$ _$ !$ !$ 1# 1# !$ !$ K) G$ ,+ h. h. i+ V V V i+ i+ i+ i+ i+ i+ i+ i> k+ C& C& C& k+ k+ ~+ ~+ i+ i+ &$ &$ '% '% '% ^& ,. ` ` ` ` ` ` ` .. .. .. .. .. .. .. B. $. ~. 5# ~. ^. i# ^. %. ~. %. %. ^. ^. %. %. ~. {+ {+ {+ {+ {+ ]+ ]+ ]+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ ~+ h. ]+ j+ j+ ]+ h. ~+ @. @. @. @. @. @. @. @. ` Z .. @. @. @. .. .. .. .. .. @. +. /. /. /. /. /. /. /. /. /. /. l. n+ m. m. Y@ s# /+ !. !. !. !. U@ U@ t% t% t% Q_ &- *- r: *- %% &- %% &- &_ t% 2{ .@ 3{ @ M= =$ ]+ @. +. +. +. /. /. /. /. /. /. /. /. /. /. /. 8# 8# 8# 8# 8# 8# 8# 8# 8# 8# 8# 8# 8# 8# 8# 8# v+ v+ '. '. '. '. ). ). '. '. '. v+ v+ v+ +% +% r$ r$ r$ r$ v+ v+ /. /. [. [. j$ j$ K$ K$ K$ K$ J- l* l* l* m* m* T@ T@ [. [. 5. 5. (& (& (& (& h+ h+ [. [. [. [. /. /. [. [. [. /. /. /. /. l. 5. (& (& (& (& (& (& (& [* [* [* [* [* [* [* [* (& (& (& (& 5. 5. [. [. h+ h+ m* m* C, C, C, m* m* [. +. /. h+ T@ [. /. /. /. /. [. [. h+ h+ a# a# K$ h# S$ a# q$ [. /. h+ [. +% v+ r$ b& b& @% @% h+ h+ [. [. /. /. /. h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ T@ T@ [. [. [. [. [. [. [. 5. (& (& (& (& (& (& (& (& a. a. a. a. a. a. a. a. h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ /. [. T@ h+ /. +. [. h+ [. [. [. h+ T@ T@ t& t& /. /. /. [. [. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ t& T@ h+ h+ h+ h+ T@ t& t& h+ [. [. T@ t& T@ [. h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ h+ h+ h+ [. [. m* O) :] :] :] O) m* .# m* m* m* m* m* m* m* m* =- =- =- =- @% @% h+ h+ h+ h+ a# a# J$ J$ J$ J$ (* J$ K$ K$ q$ ,_ T@ [. [. [. @% s% '' =- b& +% s% T@ T@ T@ T@ T@ T@ T@ Z% T@ [. [. T@ t& t& w$ w$ O; [* [* u$ 5. [. [. h+ h+ .# .# l* l* J- +# T@ l. :. :. l. u$ 5. l. 5. 5. 5. 5. 5. 5. 5. 5. h+ h+ h+ h+ h+ h+ h+ h+ /. /. /. /. /. /. /. /. u$ [* u$ u$ u$ u$ u$ u$ /. /. /. /. /. /. /. +# 4! J- ]+ @. :+ z. s: t: u: v: %= w: x: y: z: A: 4_ B: C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: :: S: [: T: U: U: V: W: 2: X: Y: Z: `: < !/ -# .< +< e( ;. v. y. y. y. y. y. y. y. y. a. :$ b& b& b& +% +% [. [. [. +. #. !. J$ /* J$ S$ l. 5. 5. u$ u$ 5. 5. l. (. (. l. 5. 5. u$ w$ w$ /. /. /. [. [. [. [. h+ [. [. [. /. /. /. /. /. u$ 5. 5. 5. l. l. (. (. u$ u$ u$ 5. 5. l. l. l. /. [. T@ h+ /. +. [. h+ [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ h+ /. @. +. [. [. +. @. [. [. [. [. [. [. [. [. h+ [. [. [. /. /. +. +. +. +. +. +. +. +. ", "| | 1 ; ; ; $ 1 1 1 1 1 1 1 1 } } } | | 1 1 1 # ; 1 1 $ $ 1 4 1 1 1 | | | | | | | | 1 1 | | | 3 2 2 ~ ~ 2 2 3 3 3 3 3 3 3 3 3 $$ $$ 8 8 8 8 {# {# #+ #+ ($ ($ J, J, J, J, x_ x_ L% L% #+ #+ 7@ 7@ K+ K+ J+ J+ d@ d@ b@ 8@ h B{ f f C{ C{ !] !] @< #< $< %< &< v( *< =< -< ;< >< ,< '< )< !< ~< {< 6& k+ 6+ { w& w& (# { w& /# :# K+ _# E# E# K@ K@ K@ E# E# '$ '$ n )$ 3& 3& 3& 3& 3& 3& 3& b% b% b% b% 3& 5& P% 9+ O_ ;] ;] ;] ;] ;] ;] O_ +_ O_ ;] -] -] -] -] I+ n k k k k k k k G G G G G G G G A. B o G t t }# E F F F F +_ +_ +_ F '= }# }# }# }# }# }# }# }# }# }# }# }# }# }# }# E E E D }# C C C }# C C ,+ ,+ V i+ i+ i> 9& U% U% Q% i> Q% U% 9& 9& 9& 9& 9& 9& 9& 9& U% U% U% U% U% U% U% U% U% U% 9& 9& 9& Q% Q% Q% C C ,+ ,+ ,+ ,+ V i+ i+ i+ i+ i+ i+ i+ i+ i+ C. C. W+ W+ U+ U+ d+ d+ W+ W+ W+ W+ W+ W+ W+ . &$ K) K) 6# 6# 6# 7# 7# K) '% H$ I# I# H$ '% K) R# ~+ {+ {+ ~+ V V i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ k+ l& S& S& S& l& l& h. h. ~+ ~+ &$ &$ '% .% .% R$ &. Z Z Z Z Z Z Z .. .. .. .. .. .. .. .. $. ~. 5# ~. ^. i# ^. %. %. %. %. %. %. %. %. $. ~+ h. h. {+ ]+ ]+ j+ j+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ ~+ h. ]+ j+ j+ ]+ h. ~+ +. +. +. +. +. +. +. +. ` Z Z .. @. @. +. +. ` Z .. @. +. /. [. h+ [. [. [. [. [. [. [. 5. n+ m. Y@ Y@ s# /+ !. !. !. !. U@ U@ t% t% t% Q_ &- c& *- c& &- [! &- [! t% U@ +@ ]+ .@ ]+ =$ F. @. @. @. @. +. +. +. +. /. /. /. /. /. /. /. /. 8# 8# 8# 8# 8# 8# 8# 8# j$ j$ j$ j$ j$ j$ j$ j$ +% +% +% v+ '. ). ). ). '. '. '. v+ v+ v+ +% +% r$ r$ r$ r$ v+ v+ /. /. [. [. j$ j$ K$ K$ K$ K$ l* l* C, C, O) O) T@ t& [. [. 5. 5. (& (& (& (& T@ T@ h+ [. [. /. +. +. T@ h+ h+ [. /. /. +. +. 5. (& (& (& (& (& (& (& g. g. g. g. g. g. g. g. (& (& (& (& 5. 5. [. [. h+ h+ m* m* C, C, C, m* m* [. +. /. h+ T@ [. /. /. /. /. [. [. h+ h+ a# a# K$ h# S$ a# q$ [. /. h+ [. +% v+ r$ b& b& @% +% [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ t& t& t& t& t& t& t& t& [. [. [. [. [. [. [. [. 5. (& (& (& (& (& (& (& (& (& (& (& (& (& (& 5. h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ /. [. T@ h+ /. +. [. h+ T@ T@ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ Z% t& T@ T@ T@ T@ t& Z% t& h+ [. [. T@ t& T@ [. h+ h+ h+ h+ h+ h+ h+ h+ t& t& t& t& t& t& t& t& T@ T@ h+ h+ h+ h+ h+ h+ /. /. +# [. .# [. .# [. m* h+ m* h+ m* h+ m* h+ =- =- =- =- @% @% h+ h+ h+ h+ a# a# J$ J$ J$ J$ (* J$ K$ K$ q$ ,_ T@ [. /. [. +% @% =- b& b& v+ -) t& t& t& t& t& t& t& T@ T@ h+ h+ h+ T@ T@ u$ 5. (& (& (& 5. 5. [. [. T@ T@ m* .# l* J- +@ j+ t& 5. :. :. l. u$ u$ 5. 5. 5. 5. 5. 5. 5. 5. 5. h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. h+ u$ h+ u$ h+ u$ h+ h+ [. [. [. [. [. [. [. [. {+ +# -) <] b' ]< ^< /< (< _< :< x: << [< }< |< 1< 2< 3< 4< 5< 6< 7< 8< 9< 0< a< b< c< d< e< f< R: g< h< i< <: j< k< I^ l< m< n< o< p< q< r< s< t< u< %+ }* ;. c. b. y. I- I- I- I- I- I- I- (& :$ b& b& b& +% +% [. [. [. +. #. 8# J$ /* J$ S$ 5. 5. 5. 5. 5. 5. 5. 5. l. l. l. 5. 5. u$ u$ u$ /. [. [. h+ h+ T@ t& t& T@ h+ h+ [. /. /. +. +. 5. 5. l. l. (. (. (. :. u$ u$ u$ 5. 5. l. l. l. /. [. T@ h+ /. +. [. h+ [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ T@ [. +. +. /. /. +. Z [. [. [. [. [. [. [. [. [. [. /. /. +. +. +. @. @. @. @. @. @. @. ", "; ; ; 1 | | | 1 1 1 1 1 1 1 1 } } } | | 1 1 1 # ; | | 1 ; | } | | | | | } } } | | | } } | | | 3 2 2 ~ ~ 2 2 3 3 3 3 3 3 3 3 3 $$ $$ 8 8 8 8 {# {# ($ ($ #+ #+ L% L% L% L% v< v< J, J, ($ ($ b+ b+ :# :# 8@ 8@ '@ '@ ,@ J+ l L@ B{ f $- E= !] {] w< I{ Z* x< y< z< A< B< C< D< E< F< G_ G< H< I< J< K< ' 9& i> ~ L< >' ~ 2 3 6+ a+ K@ E# E# K@ K@ K@ E# E# '$ '$ n )$ )$ )$ )$ )$ )$ )$ )$ )$ H# 0% 0% H# )$ 9+ K& ;] ;] ;] O_ O_ ;] ;] ;] +_ O_ ;] -] -] -] -] I+ n k k k k k k k G G G G G G G G A. B o G t t }# E F F F F +_ +_ +_ F '= }# }# }# }# }# }# }# }# }# }# }# }# }# }# }# E E D }# }# C ,+ ,+ C C ,+ ,+ V i+ i+ i+ i> 9& U% U% Q% i> Q% U% 9& 9& 9& 9& 9& 9& 9& 9& U% U% U% U% U% U% U% U% U% U% 9& 9& 9& Q% Q% Q% C C C ,+ V i+ V V i+ i+ i+ i+ i+ i+ i+ i+ C. C. W+ W+ U+ U+ d+ d+ W+ W+ W+ W+ W+ W+ W+ W+ V ^& &$ D. D. E. E. E. &$ ^& R$ J# J# R$ ^& &$ i+ h. {+ {+ ~+ V i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ k+ l& S& S& S& l& l& h. h. h. ~+ D. &$ '% '% .% R# &. Z Z Z Z Z Z Z .. .. .. .. .. .. .. .. $. C. W+ C. B. #. B. $. $. $. $. $. $. $. $. $. ~+ h. h. {+ ]+ ]+ j+ j+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ ~+ h. ]+ j+ j+ ]+ h. ~+ [. [. [. [. [. [. [. [. Z Z Z .. .. @. +. +. ` Z .. @. +. /. [. h+ [. [. [. [. [. [. [. 5. s# Y@ Y@ <$ /+ /+ 8# 8# !. !. U@ U@ t% t% t% Q_ [! ]. c& ]. [! ^. [! ^. 2% 8# j+ +. j+ @. G. ). +. +. +. +. @. @. @. @. /. /. /. /. /. /. /. /. 8# 8# 8# 8# 8# 8# 8# 8# j$ j$ j$ j$ j$ j$ j$ j$ @% @% +% v+ v+ '. ). ). '. '. '. v+ v+ v+ +% +% r$ r$ r$ r$ v+ v+ /. /. [. [. j$ j$ K$ K$ K$ K$ l* l* C, C, O) O) T@ t& [. [. 5. 5. (& (& (& (& T@ T@ h+ [. [. /. +. +. T@ T@ h+ h+ [. /. /. +. 5. 5. 5. 5. 5. 5. 5. 5. :. :. :. :. :. :. :. :. (& (& (& (& 5. 5. [. [. h+ h+ m* m* C, C, C, m* m* [. +. /. h+ T@ [. /. /. /. /. [. [. h+ h+ a# a# K$ h# S$ a# q$ [. /. h+ [. +% v+ r$ b& b& @% +% [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ t& t& t& t& t& t& t& t& [. [. [. [. [. [. [. [. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ /. [. T@ h+ /. +. [. h+ Z% Z% t& T@ h+ /. /. +. [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ Z% t& T@ T@ T@ T@ t& Z% t& h+ [. [. T@ t& T@ [. h+ h+ h+ h+ h+ h+ h+ h+ t& t& t& t& t& t& t& t& h+ h+ h+ h+ h+ h+ T@ T@ [. 5. [. 5. [. 5. h+ u$ h+ u$ h+ u$ h+ u$ h+ h+ =- =- =- =- @% @% h+ h+ h+ h+ a# a# J$ J$ J$ J$ (* J$ K$ K$ q$ ,_ T@ [. /. [. +% @% =- b& b& v+ -) t& t& t& t& t& t& t& [. h+ T@ T@ h+ h+ h+ u$ 5. (& (& (& 5. 5. [. [. T@ T@ m* .# l* J- +@ j+ Z% u$ (. :. l. u$ u$ u$ 5. 5. 5. 5. 5. 5. 5. 5. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. [. /. /. +# /. +# /. +# +# .# .# .# .# .# .# .# [. ;+ j. -; ;) $) = M< N< O< P< Q< R< S< T< U< V< W< X< Y< Z< 6< `< [ .[ +[ @[ N^ #[ $[ %[ &[ *[ =[ -[ ;[ S: j< >[ V: ,[ l< '[ )[ ![ ~[ {[ ][ ^[ A@ e$ '+ d. f. g. :+ (& (& (& (& (& (& (& (& (& :$ b& b& b& +% +% [. [. h+ /. !. 8# J$ (* /* K$ 5. 5. 5. 5. 5. 5. 5. 5. u$ u$ u$ 5. 5. l. l. l. [. [. h+ h+ T@ t& t& t& T@ T@ h+ h+ [. /. /. +. 5. 5. l. l. (. (. (. :. u$ u$ u$ 5. 5. l. l. l. /. [. T@ h+ /. +. [. h+ [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ T@ [. +. +. /. /. +. Z [. [. [. [. [. [. [. [. [. [. /. /. +. +. +. @. @. @. @. @. @. @. ", "$ $ ; 1 | } } 1 1 1 1 1 1 1 1 } } } | | 1 1 1 # ; } } | 1 | } } } } } } | | | | | } 4 4 } | | 3 2 2 ~ ~ 2 2 3 3 3 3 3 3 3 3 3 $$ $$ 8 8 8 8 {# {# ($ ($ #+ #+ L% ~> ~> ~> /[ v< J, n$ ># ($ b+ M% :# :# 8@ 8@ '@ '@ ,@ J+ + L@ f f $- $- !] !] N( 0* := ([ z< _[ %< :[ <[ [[ }[ E< G_ |[ 1[ 1' 2[ 3[ 4[ ,% 5[ ^% a$ >% 3 6+ 6+ a+ K@ K@ E# E# K@ K@ K@ E# E# '$ '$ '$ l )$ )$ )$ )$ )$ )$ )$ H+ )$ H# 0% 0% )$ H+ K& M+ ;] O_ O_ O_ O_ ;] M+ O_ O_ ;] M+ M+ M+ M+ [# n k k k k k k k G G G G G G G G A. B o G t t }# E F F F F +_ +_ +_ F '= }# }# }# }# }# }# }# }# }# }# }# }# }# }# }# }# }# }# }# C C C C C ,+ ,+ ,+ ,+ V V V Q% U% ^% U% Q% Q% 9& ^% 9& 9& 9& 9& 9& 9& 9& 9& U% U% U% U% U% U% U% U% U% U% 9& 9& 9& Q% Q% Q% C }# }# ,+ i+ ~+ V C i+ i+ i+ i+ i+ i+ i+ i+ C. C. W+ W+ U+ U+ d+ d+ W+ W+ W+ W+ W+ W+ W+ W+ 9& 9& V i> i+ k+ h. l& i+ Q% V 9& ,+ Q% V i+ V ~+ h. h. i+ V ~+ {+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ k+ k+ C& C& C& k+ k+ ~+ ~+ h. h. D. D. 6# K) K) &$ &. Z Z Z Z Z Z Z .. .. .. .. .. .. .. .. $. C. W+ C. B. #. B. $. B. $. $. C. C. $. $. B. {+ {+ {+ {+ {+ ]+ ]+ ]+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ ~+ h. ]+ j+ j+ ]+ h. ~+ /. /. /. /. /. /. /. /. @. .. Z Z Z .. @. +. .. .. .. @. +. /. /. /. /. /. /. /. /. /. /. l. s# Y@ Y@ <$ /+ 4. 8# 8# !. !. U@ U@ t% t% t% 6[ h# g# g# g# h# h# h# h# 8# 8# /. +. +. @. ). ). /. /. /. +. +. +. @. @. /. /. /. /. /. /. /. /. 8# 8# 8# 8# 8# 8# 8# 8# 8# 8# 8# 8# 8# 8# 8# 8# +% +% +% +% v+ v+ v+ v+ '. '. '. v+ v+ v+ +% +% r$ r$ r$ r$ v+ v+ /. /. [. [. j$ j$ K$ K$ K$ K$ J- l* l* l* m* m* T@ T@ [. [. 5. 5. (& (& (& (& h+ h+ [. [. [. [. /. /. h+ h+ h+ h+ h+ [. [. [. 5. 5. 5. 5. 5. 5. 5. 5. u$ u$ u$ u$ u$ u$ u$ u$ (& (& (& (& 5. 5. [. [. h+ h+ m* m* C, C, C, m* m* [. +. /. h+ T@ [. /. /. /. /. [. [. h+ h+ a# a# K$ h# S$ a# q$ [. /. h+ [. +% v+ r$ b& b& @% v+ /. /. [. [. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ T@ T@ [. [. [. [. [. [. [. [. [. 5. 5. 5. 5. 5. 5. 5. u$ u$ u$ u$ u$ u$ u$ u$ h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ /. [. T@ h+ /. +. [. h+ Z% Z% t& T@ h+ /. /. +. h+ h+ h+ [. [. /. /. /. h+ h+ h+ h+ h+ h+ h+ h+ t& T@ h+ h+ h+ h+ T@ t& t& h+ [. [. T@ t& T@ [. h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ T@ T@ [. [. h+ h+ h+ T@ T@ T@ O( A% v$ w$ w$ v$ v$ A% u$ u$ u$ u$ u$ u$ u$ u$ =- =- =- =- @% @% h+ h+ h+ h+ a# a# J$ J$ J$ J$ (* J$ K$ K$ q$ ,_ T@ [. [. [. @% s% '' =- b& +% s% T@ T@ T@ T@ T@ T@ T@ +. [. t& T@ h+ /. [. u$ 5. (& (& [* u$ u$ T@ T@ h+ h+ .# .# l* l* J- +# t& u$ l. l. u$ w$ u$ 5. 5. 5. 5. 5. 5. 5. 5. 5. /. /. /. /. /. /. /. /. h+ h+ h+ h+ h+ h+ h+ h+ +# +# J- +# +# +# +# +# m* m* m* m* m* m* m* @% 8. e& e& ^> h- 7[ 8[ 9[ 0[ a[ b[ c[ d[ e[ f[ g[ h[ i[ j[ k[ l[ q< m[ n[ o[ p[ {{ q[ $, r[ s[ t[ u[ v[ h< :: w[ 1/ x[ y[ y[ z[ o< A[ B[ C[ D[ E[ F[ h$ k@ f. g. g. :+ (& a. a. a. a. a. a. a. a. b& b& b& b& +% +% [. [. h+ /. !. 8# /* (* /* K$ u$ 5. 5. l. l. 5. 5. u$ w$ w$ u$ 5. 5. l. (. (. [. h+ h+ h+ h+ T@ T@ T@ h+ h+ h+ h+ h+ [. [. [. u$ 5. 5. 5. l. l. (. (. u$ u$ u$ 5. 5. l. l. l. /. [. T@ h+ /. +. [. h+ [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ h+ /. @. +. [. [. +. @. [. [. [. [. [. [. [. [. h+ [. [. [. /. /. +. +. +. +. +. +. +. +. ", "; ; 1 1 1 1 1 1 1 1 1 1 1 1 1 } } } | | 1 1 1 # ; } 4 } 1 | } 0 0 4 } } | 1 1 1 | 4 0 0 4 | 1 3 2 2 ~ ~ 2 2 3 3 3 3 3 3 3 3 3 $$ $$ 8 8 8 8 {# {# ($ ($ #+ #+ ~> ~> P& P& /[ v< J, n$ ># ($ b+ M% /# /# 8@ 8@ '@ '@ I@ I+ 0 @+ @+ @+ $- $- $- C{ {] 9* I{ G[ H[ I[ J[ K[ L[ M[ N[ O[ P[ Q[ R[ S[ T[ U[ V[ W[ >% {@ '$ 6+ K@ L@ L@ L@ K@ E# E# E# _# _# _# (# (# ._ ._ ._ l l l l l l l l 4 0 n E D n l 0 M+ ;] O_ +_ +_ O_ ;] M+ O_ O_ ;] ;] ;] O_ +_ F n k k k k k k k G G G G G G G G A. B o G t t }# E F F F F +_ +_ +_ F '= }# }# }# }# }# }# }# C C C C C C C C ,+ C C C C }# }# }# ,+ ,+ ,+ ,+ C C C C 9& ^% ,% ,% U% 9& U% ,% ^% ^% ^% ^% ^% ^% ^% ^% U% U% U% U% U% U% U% U% U% U% 9& 9& 9& Q% Q% Q% C }# }# ,+ ~+ h. V }# i+ i+ i+ i+ i+ i+ i+ i+ C. C. W+ W+ U+ U+ d+ d+ W+ W+ W+ W+ W+ W+ W+ W+ ^% T% U% S% Q% u& k+ S& Q% u& i> C& k+ u& i> Q% C V i+ i+ V V h. ]+ h. h. h. h. h. h. h. l& i> u& u& u& i> i> i+ i+ h. h. E. E. 7# 5$ 5$ F. ,. ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Z ` . ` .. @. .. Z @. .. ` . . ` .. @. ]+ ]+ ]+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ ~+ h. ]+ j+ j+ ]+ h. ~+ @. @. @. @. @. @. @. @. /. +. .. Z Z Z .. @. @. @. @. @. +. +. +. +. +. +. +. +. +. +. +. (. s# <$ <$ <$ 4. 4. j$ j$ !. !. U@ U@ t% t% t% 6[ S$ ); ); ); r% r% r% r% U# U# l. l. (. (. j. 6. h+ [. [. [. /. +. +. +. /. /. /. /. /. /. /. /. 8# 8# 8# 8# 8# 8# 8# 8# !. !. !. !. !. !. !. !. v+ v+ v+ +% +% +% +% @% '. '. '. v+ v+ v+ +% +% r$ r$ r$ r$ v+ v+ /. /. [. [. j$ j$ K$ K$ K$ K$ +@ +@ J- J- .# .# [. h+ [. [. 5. 5. (& (& (& (& /. /. [. [. [. [. h+ h+ [. [. h+ h+ h+ h+ T@ T@ [. [. [. [. [. [. [. [. T@ T@ T@ T@ T@ T@ T@ w$ (& (& (& (& 5. 5. [. [. /. /. +# +# J- J- J- +# m* [. +. /. h+ T@ [. /. /. /. /. [. [. h+ h+ a# a# K$ h# S$ a# q$ [. /. h+ [. +% v+ r$ b& b& @% v+ /. /. [. [. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ m* m* m* m* m* m* m* m* .# .# .# .# .# .# .# [. [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ /. [. T@ h+ /. +. [. h+ h+ h+ h+ h+ h+ h+ h+ T@ h+ h+ h+ [. [. /. /. /. h+ h+ h+ h+ h+ h+ h+ h+ T@ h+ [. [. [. [. h+ T@ t& h+ [. [. T@ t& T@ [. /. /. /. /. /. /. /. /. h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. h+ T@ T@ T@ t& X[ / !_ O; O; O; <] <] [* [* [* [* [* [* [* u$ =- =- =- =- @% @% h+ h+ h+ h+ a# a# J$ J$ J$ J$ (* J$ K$ K$ q$ ,_ T@ [. h+ h+ s% -) =) '' =- @% @% h+ h+ h+ h+ h+ h+ h+ @. [. t& t& [. /. /. u$ 5. [* [* [* w$ v$ t& t& /. /. .# .# l* l* C, m* T@ 5. 5. u$ v$ v$ u$ l. 5. 5. 5. 5. 5. 5. 5. 5. [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ m* l* l* 4{ l* l* l* l* l* m* m* m* m* h+ h+ h+ e# Y[ M- Z[ `[ } .} +} @} #} $} %} &} *} =} -} ;} >} ,} '} )} p< !} ~} {} ]} ^} Z] /} (} _} :} <} v[ [} h< }} w[ 1/ |} 1} 2} 3} 4} 5} q< 6} 7} 8} 9} A l@ g. :+ :+ a. (& :+ :+ :+ :+ :+ :+ :+ :+ b& b& b& b& +% +% [. [. h+ [. 8# j$ /* (* /* J$ w$ u$ l. (. (. l. u$ w$ 5. 5. 5. 5. 5. 5. 5. 5. h+ h+ h+ h+ [. [. [. [. [. [. h+ h+ h+ h+ T@ T@ w$ w$ u$ u$ 5. 5. 5. l. u$ u$ u$ 5. 5. l. l. l. /. [. T@ h+ /. +. [. h+ [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. /. +. @. +. [. h+ [. +. [. [. [. [. [. [. [. [. T@ T@ h+ h+ [. [. [. /. /. /. /. /. /. /. ", "| | 1 ; ; $ $ 1 1 1 1 1 1 1 1 } } } | | 1 1 1 % 1 4 0 } | | } + + 0 4 } 1 1 ; 1 | 4 0 0 4 | 1 3 2 2 ~ ~ 2 2 3 3 3 3 3 3 3 3 3 $$ $$ 8 8 8 8 {# {# ($ ($ #+ #+ ~> P& P& P& /[ v< J, n$ ># ($ b+ M% /# /# 8@ 8@ '@ '@ I@ I+ 4 #$ #$ #$ @+ f f f ]/ k* ]@ t] 0} a} b} c} d} e} }[ f} g} h} i} j} k} 6~ l} m} n} m@ l& {# p p <# <# E# E# E# K@ _# _# _# (# (# ._ o} o} m l l l l l l l | 4 l E D E l + -] ;] O_ +_ +_ O_ ;] -] O_ ;] ;] ;] O_ +_ p} f+ n k k k k k k k G G G G G G G G A. B o G t t }# E F F F F +_ +_ +_ F '= }# }# }# }# }# }# }# C C C C C C C C V V ,+ C C }# D D V ,+ ,+ C C }# D D U% ,% >% ,% U% U% ^% >% ^% ^% ^% ^% ^% ^% ^% ^% U% U% U% U% U% U% U% U% U% U% 9& 9& 9& Q% Q% Q% C }# }# ,+ h. h. V D i+ i+ i+ i+ i+ i+ i+ i+ C. C. W+ W+ U+ U+ d+ d+ W+ W+ W+ W+ W+ W+ W+ W+ '& ~& T% S% R% u& C& C& R% u& S& [! [! S& u& R% ^% ,+ V V ,+ V h. j+ h. h. h. h. h. h. h. l& Q% R% R% R% Q% Q% V V ~+ h. E. F. [$ [$ %& H. ,. ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Z ` . ` .. @. .. Z @. .. ` . . ` .. @. j+ j+ ]+ ]+ {+ h. h. ~+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ ~+ h. ]+ j+ j+ ]+ h. ~+ Z Z Z Z Z Z Z Z [. /. @. Z ` ` Z .. +. +. +. +. @. @. @. @. @. @. @. @. @. @. @. :. /+ <$ <$ <$ 4. 4. j$ j$ !. !. U@ U@ t% t% t% 6[ K$ '; '; '; n& n& n& n& U# U# l. l. (. (. j. j. T@ h+ h+ [. [. /. /. +. /. /. /. /. /. /. /. /. 8# 8# 8# 8# 8# 8# 8# 8# #. #. #. #. #. #. #. #. '. '. v+ +% +% @% s% s% '. '. '. v+ v+ v+ +% +% r$ r$ r$ r$ v+ v+ /. /. [. [. j$ j$ K$ K$ K$ K$ .@ +@ +@ +@ +# +# [. [. [. [. 5. 5. (& (& (& (& +. +. /. [. [. h+ T@ T@ /. [. [. h+ T@ T@ t& t& [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. 5. 5. (& (& (& 5. 5. [. [. /. /. +# +# J- J- J- +# m* [. +. /. h+ T@ [. /. /. /. /. [. [. h+ h+ a# a# K$ h# S$ a# q$ [. /. h+ [. +% v+ r$ b& b& @% '. /. /. [. [. h+ h+ T@ h+ h+ h+ h+ h+ h+ h+ h+ .# .# .# .# .# .# .# .# .# .# .# .# .# .# .# .# [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ /. [. T@ h+ /. +. [. h+ @. +. /. [. T@ t& I$ I$ T@ h+ h+ [. [. /. /. +. h+ h+ h+ h+ h+ h+ h+ h+ h+ [. [. /. /. [. [. h+ t& h+ [. [. T@ t& T@ [. /. /. /. /. /. /. /. /. [. [. [. [. [. [. [. [. [. [. [. h+ T@ T@ t& v$ q} !_ O; (& a. a. a. (& [* [* [* [* [* [* [* [* =- =- =- =- @% @% h+ h+ h+ h+ a# a# J$ J$ J$ J$ (* J$ K$ K$ q$ ,_ T@ [. T@ T@ -) *) r} =) '' s% +% [. [. [. [. [. [. [. .. [. t& t& [. +. /. 5. u$ [* O; O; v$ A% Z% Z% +. +. +# .# l* C, 4! O) h+ 5. 5. w$ A% A% u$ (. 5. 5. 5. 5. 5. 5. 5. 5. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ m* C, G{ G{ G{ C, C, C, m* m* m* m* h+ h+ h+ h+ C- s} t} u} v} w} x} y} z} A} B} C} D} E} F} G} H} I} J} K} L} D@ +$ o[ M} N} &] O} P} Q} R} :} S} T} T} h< F~ U} V} W} X} Y} Z} `} | .| u_ +| @| #| g+ d. :+ :+ :+ a. (& g. g. g. g. g. g. g. :. b& b& b& b& +% +% [. [. h+ [. 8# j$ /* $| (* J$ w$ u$ l. (. (. l. u$ w$ (. (. l. 5. 5. u$ w$ w$ T@ h+ h+ [. [. /. +. +. /. [. [. h+ T@ T@ t& t& v$ w$ w$ w$ u$ u$ 5. 5. u$ u$ u$ 5. 5. l. l. l. /. [. T@ h+ /. +. [. h+ [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. /. /. /. /. /. /. /. /. +. @. .. @. [. T@ h+ /. [. [. [. [. [. [. [. [. t& T@ T@ T@ h+ h+ [. [. [. [. [. [. [. [. ", "$ # # 1 } } | ; 1 1 | | } 4 4 | | | | | | | | } } } } } } } } 0 4 4 } 1 ; ; $ 1 | } | $ # $ ; ' ~ 3 6+ a+ a+ 6+ 6+ a+ a+ 6+ 6+ 3 2 2 ~ 1@ }$ j i i j #$ ~# A# |$ y y ~> J, L% ~> %| &| A& A& F# #+ -@ =@ { :# m m '@ d@ -, 8@ 0 a+ a+ @+ @+ @+ @+ f B= *| m. r+ =| -| ;| >| ,| '| )| !| ~| {| ]| ^| :/ /| (| (| 3^ _| <# 8# w E= C= f p L@ K@ >% (# (# f^ f^ f^ f^ :| f^ a% E n l l + 0 0 E D }# C }# E l + '@ M+ O_ <| <| O_ M+ '@ M+ M+ ;] ;] ;] O_ O_ a% } j i o u u G G k k k o G u u u u+ u+ k k k k n n a% a% a% a% O_ O_ O_ a% [# l n D ,+ ,+ D l D D D }# }# }# C C E }# V ,+ }# D ,+ i+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ 9& 9& 9& 9& 9& 9& 9& 9& k+ k+ k+ k+ k+ k+ k+ k+ i> i> Q% Q% 9& U% U% U% ,% ,% ^% 9& Q% i> k+ l& i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ u& D& D& m& m& m& 9- 9- _& d& 9- D& D& D& 9- [! i> i+ i+ i+ i+ i+ i+ i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ k+ i> u& u& u& Q% Q% V V h. h. E. E. 7# 7# 7# E. '. +. @. .. Z . . T Z Z Z Z Z Z .. .. . .. +. .. ` T ` @. .. +. @. . . @. /. @. ~+ h. ]+ j+ j+ ]+ h. ~+ h. h. h. h. h. h. h. h. h. {+ ]+ j+ j+ ]+ h. ~+ {+ {+ {+ {+ {+ {+ {+ {+ +. .. Z Z @. +. @. Z /. +. @. .. .. @. +. /. +. +. +. +. +. +. +. +. /. +. @. .. .. @. +. l. 4. E& E& E& 4. 4. 8# 8# 8# 8# U@ m@ T$ #% !% u& %. U~ U~ L; 1. 1. l+ l+ n+ s# (. l. l. (. 6. i. h+ [. [. /. +. +. @. @. Z Z .. .. .. @. @. @. ,_ q$ q$ a# 8# !. !. #. 8# 8# 8# 8# 8# !. !. !. v+ v+ v+ +% +% @% @% @% ). ). '. '. v+ +% +% @% '' =- b& b& +% +% /. +. [. /. #. B. ^. h# J$ (* C, C, C, C, m* m* h+ h+ .. .. _. (. [* <] [* a. h+ h+ h+ h+ h+ T@ T@ T@ /. [. T@ h+ /. +. [. h+ /. [. T@ h+ /. +. [. h+ /. /. [. h+ [. +. @. <. 5. (& (& (& 5. 5. [. [. [. [. .# .# l* l* l* .# m* h+ h+ h+ h+ h+ h+ h+ @. +. /. h+ h+ T@ h+ a# ,_ (* /* /* a# j$ [. [. Z% +. '. *) =) p. *. +% -) T@ h+ [. [. h+ T@ t& Z [. Z% T@ @. Z /. Z% :] 4! C, J- J- C, 4! K> C, C, C, C, C, C, C, m* t& t& t& t& t& t& t& t& +. [. T@ h+ /. +. [. h+ T@ T@ h+ [. [. /. /. +. h+ h+ h+ h+ h+ h+ h+ h+ I$ Z% h+ /. /. /. h+ T@ /. /. /. /. /. /. /. /. Z% Z% Z% t& T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. t& t& t& t& t& t& t& t& t& t& T@ T@ h+ [. [. /. h+ h+ h+ h+ h+ h+ h+ h+ t& Z% Z% Z% t& T@ h+ 5. 5. [* <] !_ [| !_ <] O; :+ a. (& [* [* [* [* (& t+ r$ =- =) -) -) T@ h+ h+ h+ a# a# J$ J$ J$ J$ J$ J$ J$ J$ a# a# h+ h+ /. h+ s% -) =) '' =- v+ ). @. +. /. h+ T@ t& t& [. [. [. [. [. [. [. 5. 5. (& (& (& 5. 5. [. [. Z% Z% }| :] 4! 4! C, m* h+ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ h+ h+ h+ h+ h+ T@ T@ T@ t& t& t& t& t& t& t& :] l* 4{ 4{ 4{ l* l* .# .# m* h+ T@ v$ 5. :. l. ;) || 1| 2| _< 3| 4| 5| 6| B} 7| 8| 4< 9| 0| a| b| c| d| e| f| g| $ h| a^ i| j| k| l| m| n| o| o| o| p| i< q| r| s| t| u| v| w| x| y| D[ ^[ z| A| B| :. v$ 5. :. (. 5. 5. l. l. l. l. l. l. l. l. b& b& b& b& +% +% [. [. [. [. j$ j$ K$ K$ K$ K$ 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. @. +. [. h+ h+ [. +. @. [. [. [. [. [. [. [. [. u$ 5. (. l. u$ w$ 5. l. 5. 5. 5. 5. 5. 5. 5. 5. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. t& T@ h+ [. [. h+ T@ t& [. [. [. [. [. [. [. [. h+ h+ [. /. [. T@ t& I$ @. /. h+ h+ [. /. h+ t& I$ Z% t& T@ h+ /. ", "; # $ 1 } } | 1 1 1 1 1 | | | | | | | | | | | | | | | | | | | 0 4 4 } | 1 ; ; 1 } 4 } ; $ ; | 2 2 3 6+ 6+ 6+ 3 3 6+ 6+ 6+ 3 3 3 3 3 $$ $$ 9 j j 9 {# {# A# #+ x x L% n$ J, L% /[ %| P& P& |$ ($ E+ =@ { :# m m '@ d@ -, d@ J+ a+ a+ a+ @+ @+ @+ @+ D= s& y* ]@ y* C| a} D| E| F| G| H| I| J| K| L| M| N| O| P| Q| V[ R| p m+ s& W% S| <# <# E# K@ (# (# f^ f^ f^ f^ :| f^ [# n l l l l + + n E E D E n + 0 -] M+ O_ <| <| O_ M+ -] M+ M+ ;] ;] ;] O_ O_ a% 0 h k G G G o o o o o o G G G G *+ *+ u u u u }# }# F F F F +_ +_ +_ F [# n n D C ,+ D n D D D }# }# }# C C E }# V ,+ }# D ,+ i+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ 9& 9& 9& 9& 9& 9& 9& 9& Q% Q% Q% Q% Q% Q% Q% Q% i> Q% Q% Q% 9& U% U% U% 9& 9& 9& 9& 9& Q% Q% Q% i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ u& D& D& m& m& m& 9- 9- c& c& 9- m& D& D& m& C& i> i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i> 9& R% R% u& k+ k+ h. h. h. h. E. E. 7# 7# 7# E. ). @. .. Z ` . T T .. .. .. .. .. .. .. .. . Z @. .. ` . Z @. +. [. +. . . .. @. ` ~+ h. ]+ j+ j+ ]+ h. ~+ h. h. h. h. h. h. h. h. ~+ h. {+ j+ j+ ]+ {+ h. j+ j+ j+ j+ j+ j+ j+ j+ +. .. Z Z @. +. @. Z /. +. @. .. .. @. +. /. +. +. +. +. +. +. +. +. /. +. @. .. .. @. +. l. 4. E& E& E& 4. 4. 8# 8# !. !. U@ m@ T$ #% #% S& ^. L; L; g; 1. l+ l+ r% n+ s# (. l. l. (. 6. i. /. /. /. /. /. +. +. +. .. .. .. @. @. +. +. +. ,_ q$ a# a# 8# 8# !. #. 8# 8# 8# 8# 8# 8# 8# 8# v+ v+ v+ +% +% @% @% @% v+ v+ v+ v+ +% +% +% +% '' =- b& b& +% +% /. +. [. /. #. B. i# S$ J$ (* C, C, C, C, m* m* h+ h+ @. .. _. (. [* <] [* a. h+ h+ h+ h+ h+ h+ h+ h+ /. [. T@ h+ /. +. [. h+ /. [. T@ h+ /. +. [. h+ /. [. h+ h+ h+ /. +. .. 5. (& (& (& 5. 5. [. [. [. [. .# .# l* l* l* .# m* h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ t& T@ T@ h+ j$ ,_ /* /* /* a# j$ [. [. Z% /. v+ *) =) t+ p. @% s% h+ [. /. /. [. h+ T@ @. [. t& h+ +. @. /. T@ K> 4! C, l* l* C, 4! K> C, C, C, C, C, C, C, C, O) T@ T@ T@ T@ T@ T@ T@ /. h+ T@ T@ [. /. [. T@ T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ t& T@ h+ [. [. [. h+ h+ /. /. /. /. /. /. /. /. t& T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ t& t& t& t& T@ h+ [. [. l. (& O; <] !_ <] O; [* a. a. (& [* O; O; [* u$ r$ b& =- =) -) s% h+ [. h+ h+ a# a# J$ J$ J$ J$ J$ J$ J$ J$ a# a# h+ h+ [. h+ s% -) =) '' =- +% v+ /. [. [. h+ T@ T@ t& [. [. [. [. [. [. [. 5. 5. (& (& (& 5. 5. [. [. t& T@ O) O) 4! C, C, m* h+ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ T@ O) l* 4{ 4{ l* l* .# .# [. . k. -. e. l@ Y Y T| U| V| W| X| Y| Z| `| 1 Y= .1 +1 @1 Z< #1 $1 %1 &1 *1 =1 -1 ;1 >1 ,1 '1 v{ )1 !1 ~1 {1 ]1 ^1 /1 ]1 (1 u[ _1 :1 <1 [1 }1 |1 11 21 31 41 ^[ 51 F[ P@ :. v$ 5. :. (. 5. l. l. l. l. l. l. l. l. l. b& b& b& b& +% +% [. [. [. [. j$ j$ K$ K$ K$ K$ 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. @. +. [. h+ h+ [. +. @. [. [. [. [. [. [. [. [. u$ 5. (. l. u$ w$ 5. l. 5. 5. 5. 5. 5. 5. 5. 5. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. T@ h+ [. /. /. [. h+ T@ [. [. [. [. [. [. [. [. h+ [. /. /. /. h+ T@ Z% /. h+ T@ T@ [. /. h+ t& t& T@ T@ h+ [. /. ", "; # $ 1 } | 1 1 1 1 ; ; ; ; $ | | | | | | | | 1 1 1 1 1 1 1 1 0 4 4 } | 1 1 ; | 4 0 4 1 ; 1 } 3 3 6+ 6+ 6+ 3 2 2 3 3 3 3 3 6+ 6+ 6+ }$ $$ `. `. `. `. {# #$ A# ($ |$ |$ J, n$ n$ J, v< v< ~> L% #+ ># E+ =@ { :# m m '@ d@ -, d@ J+ K+ a+ a+ a+ a+ @+ @+ $- W% B{ s& 61 71 81 |) 91 01 a1 b1 c1 d1 e1 f1 v/ g1 h1 i1 F( j1 k1 l1 N@ Y@ m. P( 7- @+ '$ K@ (# (# f^ f^ :| :| m1 :| _# K@ E# E# E# E# '$ '$ E# E# '$ '$ '$ E# K@ a+ -] M+ O_ +_ +_ O_ M+ -] M+ M+ ;] ;] ;] O_ O_ a% l k o G G G o k G G G G o o o o X X O O O O ,+ ,+ '= '= '= '= <| <| <| '= a% n n D C ,+ }# E D D D }# }# }# C C D }# ,+ ,+ }# }# ,+ V ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ 9& 9& 9& 9& 9& 9& 9& 9& ^% ^% ^% ^% ^% ^% ^% ^% Q% Q% Q% 9& 9& 9& U% U% Q% Q% Q% 9& 9& 9& U% U% i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ u& u& u& C& C& C& S& S& C& C& C& C& C& u& R% S% i> i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i> 9& S% R% C& l& {@ ]+ j+ h. h. E. E. 7# 7# 7# E. =. .. Z ` . . T T .. .. .. .. .. .. .. .. ,. &. ). =. ,. S &. =. v+ @% v+ ,. S =. =. ;+ ~+ h. ]+ j+ j+ ]+ h. ~+ {+ {+ {+ {+ {+ {+ {+ {+ ~+ ~+ {+ ]+ j+ j+ ]+ ]+ +# +# +# +# +# +# +# +# +. .. Z .. +. /. @. Z /. +. @. .. .. @. +. /. +. +. +. +. +. +. +. +. /. +. @. .. .. @. +. l. 4. E& E& E& 4. 4. 8# 8# #. #. m@ m@ M$ M$ T$ [! h# g# g# g# S$ S$ S$ K$ #. !. +. /. /. +. '. ). +. +. +. /. /. /. /. /. @. +. +. +. /. /. [. [. q$ q$ a# j$ j$ 8# !. !. !. 8# 8# 8# 8# 8# 8# 8# v+ v+ v+ +% +% @% @% @% @% @% @% @% +% +% +% +% =- =- =- b& +% v+ /. /. [. /. !. #. h# S$ J$ (* J- J- J- J- +# +# /. /. +. @. :. l. O; <] [* a. T@ h+ h+ h+ h+ h+ h+ h+ /. [. T@ h+ /. +. [. h+ +# .# O) m* +# j+ .# m* .# m* m* O) m* .# +# /. 5. (& (& (& 5. 5. [. [. h+ h+ m* m* C, C, C, m* m* h+ h+ h+ h+ h+ h+ h+ Z% Z% Z% Z% t& T@ [. 8# q$ /* /* J$ a# a# [. [. Z% h+ @% *) =) b& r$ s% +% [. /. +. +. /. [. [. [. h+ h+ h+ [. [. [. [. 4! 4! C, l* l* C, 4! 4! C, C, C, C, C, C, C, C, m* m* m* m* m* m* m* m* .# O) }| :] m* .# m* :] T@ T@ T@ T@ t& t& t& t& h+ h+ h+ h+ h+ h+ h+ h+ [. [. h+ T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ h+ h+ h+ [. [. [. (. l. 5. u$ w$ w$ u$ u$ 5. 5. u$ v$ v$ v$ w$ w$ =- =- '' '' s% @% [. /. h+ h+ a# a# J$ J$ J$ J$ J$ J$ J$ J$ a# a# h+ h+ [. h+ s% s% '' '' =- +% @% h+ T@ T@ T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ u$ u$ [* [* [* u$ u$ h+ h+ [. [. .# m* C, C, C, m* h+ u$ u$ u$ u$ u$ u$ u$ l. l. l. l. l. l. l. l. T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ m* l* l* l* l* l* .# [. 5. 5. (& a. b. b. u. w. n1 o1 p1 (< q1 r1 s1 t1 u1 v1 w1 x1 y1 z1 A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1 L1 M1 M1 {1 :} ]1 N1 O1 P1 Q1 R1 _1 S1 T1 U1 V1 W1 X1 Y1 Z1 `1 2 .2 9} Q@ +. t& [. @. /. [. /. h+ h+ h+ h+ h+ h+ h+ h+ b& b& b& b& +% +% [. [. [. [. j$ j$ K$ K$ K$ K$ 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. +. /. [. [. [. [. /. +. [. [. [. [. [. [. [. [. u$ 5. (. l. u$ w$ 5. l. 5. 5. 5. 5. 5. 5. 5. 5. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. /. +. +. /. [. [. [. [. [. [. [. [. [. [. [. /. /. +. /. [. h+ h+ [. T@ t& T@ [. /. [. T@ [. [. [. [. /. /. ", "1 # $ 1 | | 1 1 1 ; ; $ # # # | | | | | | | | 1 1 1 1 1 1 1 1 0 4 4 } } | | 1 | 4 0 4 | 1 } 4 6+ 6+ a+ a+ 6+ 3 ~ ' ~ 2 2 3 6+ 6+ a+ a+ }$ $$ 7 Z. Z. 7 {# #$ A# ># ($ ($ n$ n$ n$ n$ x_ x_ J, J, ># A# E+ =@ { :# m m '@ d@ -, d@ J+ K+ a+ a+ a+ a+ @+ @+ @+ _{ E= _{ +2 <$ @2 ]( 91 #2 $2 %2 &2 *2 e1 =2 D( -2 ;2 2 ,2 '2 )2 Y@ P( !2 $- v '$ (# (# f^ f^ :| :| m1 :| K+ a+ K@ E# E# '$ >% >% E# '$ '$ '$ '$ E# E# E# M+ ;] O_ +_ +_ O_ ;] M+ M+ M+ ;] ;] ;] O_ O_ a% E G G G o o o k u u u G o k k k X X O O O O ,+ ,+ f+ f+ f+ f+ p} p} p} f+ F E n D C ,+ C D D D D }# }# }# C C D }# C C C C ,+ V C C C C C C C C 9& 9& 9& 9& 9& 9& 9& 9& ^% ^% ^% ^% ^% ^% ^% ^% Q% Q% 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ u& u& u& C& C& C& S& S& R% u& C& S& C& u& S% ^% ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ V V V V V V V Q% i> C& C& S& l& {@ {+ ]+ h. h. E. E. 7# 7# 7# E. &. Z ` ` . . T T Z Z Z Z ` ` ` ` &. &. =. &. &. ,. &. &. ). +% v+ ,. ,. ). ). S ~+ h. ]+ j+ j+ ]+ h. ~+ {+ {+ {+ {+ {+ {+ {+ {+ ~+ ~+ h. {+ ]+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ /. @. .. .. +. /. +. .. /. +. @. .. .. @. +. /. +. +. +. +. +. +. +. +. /. +. @. .. .. @. +. l. 4. E& E& E& 4. 4. 8# 8# #. #. m@ m@ M$ t% t% Q_ o^ ~2 {2 ~2 -^ K$ -^ K$ U@ !. +# /. +# /. H. '. @. @. +. +. /. [. [. h+ /. /. /. [. [. h+ h+ h+ q$ a# a# j$ j$ 8# 8# !. !. !. !. 8# 8# 8# 8# j$ v+ v+ v+ +% +% @% @% @% -) -) s% s% @% +% +% v+ r$ =- =- =- v+ v+ /. h+ [. /. 8# !. S$ K$ J$ /* J- J- J- J- +# +# /. /. /. +. (. l. O; <] [* a. T@ T@ T@ h+ h+ h+ h+ [. /. [. T@ h+ /. +. [. h+ +# .# O) m* +# j+ .# m* m* m* O) O) O) m* m* h+ 5. (& (& (& 5. 5. [. [. h+ h+ m* m* C, C, C, m* m* h+ h+ h+ h+ h+ h+ h+ T@ t& t& t& t& T@ [. j$ q$ /* J$ J$ a# a# h+ h+ Z% t& s% -) '' '' '' -) v+ /. /. +. +. /. /. /. Z% t& h+ h+ t& t& T@ .# 4! C, C, C, C, C, C, 4! C, C, C, C, C, C, C, C, l* .# .# .# .# .# .# .# m* :] }| }| O) m* O) }| [. [. h+ T@ T@ t& Z% Z% h+ h+ h+ h+ h+ h+ h+ h+ @. /. h+ t& Z% t& T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ +. +. /. [. [. h+ h+ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. /. [. [. h+ T@ T@ t& t& h+ h+ h+ h+ h+ h+ h+ h+ h+ [. [. /. /. /. [. [. +. l. /. 5. h+ u$ h+ u$ [. u$ T@ v$ Z% A% t& t& =) =) '' '' @% +% [. /. h+ h+ a# a# J$ J$ J$ J$ J$ J$ J$ J$ a# a# h+ h+ h+ h+ @% s% '' =- =- @% -) t& t& t& T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ u$ u$ [* [* [* u$ u$ h+ h+ +. +. +# .# l* C, C, O) h+ u$ u$ u$ u$ u$ u$ u$ l. l. l. l. l. l. l. l. T@ T@ T@ h+ h+ h+ h+ [. [. [. [. [. [. [. [. [. .# l* l* .# .# [. 5. (& [| ./ {; z. g( X/ ]2 Z_ ^2 ^~ /2 (2 _2 :2 <2 [2 }2 |2 12 22 32 42 52 62 72 82 92 s' 02 a2 b2 c2 _} _} <} #, d2 e2 f2 x' g2 d2 h2 q| s| i2 j2 k2 l2 m2 n2 o2 p2 q2 r2 s2 T /. T@ /. @. /. h+ /. h+ h+ h+ h+ h+ h+ h+ h+ b& b& b& b& +% +% [. [. [. [. j$ j$ K$ K$ K$ K$ 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. /. [. [. [. [. [. [. /. [. [. [. [. [. [. [. [. u$ 5. (. l. u$ w$ 5. l. 5. 5. 5. 5. 5. 5. 5. 5. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. /. /. /. +. +. /. /. /. [. [. [. [. [. [. [. [. /. /. +. +. +. /. /. /. [. h+ T@ h+ +. @. +. /. @. @. +. +. /. [. ", "1 $ $ 1 | 1 ; 1 1 ; ; $ # # # | | | | | | | | } } } } } } } } 4 4 4 4 } } } } 1 } 0 4 | | } 0 6+ 6+ a+ a+ 6+ 3 ~ ' ~ 2 2 3 6+ 6+ a+ a+ }$ $$ 7 Z. Z. 7 {# #$ ($ ># ># ># n$ J, n$ n$ x_ x_ J, n$ ># ># -@ -@ { :# m m '@ d@ -, d@ J+ K+ K+ K+ a+ a+ a+ @+ #$ L@ $- D= ^+ E) t2 u2 v2 w2 x2 y2 z2 A2 B2 C2 D2 x/ E2 F1 F2 H^ G2 H2 I2 J2 w< k* S| X% P K@ (# (# f^ :| m1 m1 K2 m1 L+ b+ M% ,& ,& 6& h> h> h> h> h> h> h> h> h> ,% ;] ;] O_ O_ O_ O_ ;] ;] M+ M+ ;] ;] ;] O_ O_ a% }# G G G o o o G u u u G o k k k *+ *+ u u u u }# }# f+ f+ f+ f+ p} p} p} f+ f+ D n E C ,+ ,+ }# D D D }# }# }# C C }# }# }# }# ,+ ,+ ,+ ,+ C C C C C C C C 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& Q% Q% ^% ^% U% 9& Q% i> i> k+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ i> i> i> k+ k+ k+ l& l& Q% i> k+ l& k+ i> 9& ^% ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ i+ i+ i+ i+ i+ i+ i+ i> m@ [! [! S& l& k+ ~+ i+ h. h. E. E. 7# 7# 7# E. &. Z ` ` ` . . . ` ` ` . . T T O &. *. /@ *. *. q. *. *. H q. p. *. *. r$ r$ =. ~+ h. ]+ j+ j+ ]+ h. ~+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ h. h. h. {+ {+ ]+ j+ j+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ /. @. .. @. /. /. +. .. /. +. @. .. .. @. +. /. +. +. +. +. +. +. +. +. /. +. @. .. .. @. +. l. 4. E& E& E& 4. 4. 8# 8# #. #. m@ U@ t% t% t% Q_ =] L2 M2 {2 u% -^ u% -^ Y_ 2% J- +# J- +# 0# 9# @. @. +. +. /. [. [. h+ /. /. [. [. h+ h+ h+ T@ a# a# j$ j$ j$ j$ 8# 8# #. #. !. !. 8# j$ j$ j$ v+ v+ v+ +% +% @% @% @% -) -) s% s% @% +% +% v+ t+ b& '' =- v+ '. [. T@ [. /. 8# 8# K$ J$ /* /* J- J- J- J- +# +# /. /. [. /. (. 5. O; <] [* a. t& t& T@ T@ h+ [. [. [. /. [. T@ h+ /. +. [. h+ +# l* 4! C, J- +@ l* C, C, C, C, C, C, C, 4! O) 5. (& (& (& 5. 5. [. [. T@ T@ O) O) 4! 4! 4! O) m* h+ h+ h+ h+ h+ h+ h+ +. /. [. h+ T@ T@ h+ a# a# J$ J$ J$ a# a# T@ T@ t& t& s% @% =- =) r} *) '. /. /. /. /. /. /. +. F{ Z% t& t& Z% Z% T@ .# C, G{ G{ H{ H{ G{ G{ G{ G{ G{ G{ G{ G{ G{ G{ C, l* l* l* l* l* l* l* l* C, K> b, b, 4! C, 4! }| /. /. /. [. h+ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ @. /. h+ t& Z% t& T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ +. +. /. [. [. h+ h+ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ T@ T@ [. [. [. [. [. [. [. [. /. [. [. h+ T@ T@ t& t& h+ h+ h+ h+ h+ h+ h+ h+ h+ [. /. /. /. [. h+ T@ /. /. +# /. .# [. m* T@ .# h+ O) t& }| Z% :] t& =) =) '' =- @% +% [. [. h+ h+ a# a# J$ J$ J$ J$ J$ J$ J$ J$ a# a# h+ h+ T@ h+ @% @% =- =- =- s% -) t& t& t& T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ w$ w$ O; O; O; w$ w$ T@ T@ +. +. +# .# l* C, C, O) h+ u$ u$ u$ u$ u$ u$ u$ l. l. l. l. l. l. l. l. t& t& T@ T@ h+ [. [. [. [. [. [. [. [. [. [. [. .# .# .# [. [. 5. (& I- x. /_ N2 O2 P2 Q2 R2 S2 T2 U2 V2 W2 X2 Y2 Z2 `2 3 .3 +3 @3 #3 $3 %3 &3 *3 =3 C< -3 ;3 d< >3 [} =[ t[ t[ ,3 '3 )3 !3 ~3 {3 #, ]3 ^3 /3 (3 _3 l2 :3 <3 [3 }3 |3 .2 13 23 Z [. T@ +. @. [. h+ /. h+ h+ h+ h+ h+ h+ h+ h+ b& b& b& b& +% +% [. [. [. [. j$ j$ K$ K$ K$ K$ 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. h+ [. [. [. [. [. [. h+ [. [. [. [. [. [. [. [. u$ 5. (. l. u$ w$ 5. l. 5. 5. 5. 5. 5. 5. 5. 5. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. +. /. /. /. /. /. /. +. [. [. [. [. [. [. [. [. /. /. /. /. /. /. +. +. +. [. h+ /. @. Z .. +. @. @. @. +. /. [. ", "| $ $ 1 | 1 $ 1 1 1 ; ; ; ; $ | | | | | | | | } } } } } } } } 4 4 4 4 4 4 4 4 ; | 4 } | 1 } 0 3 3 6+ 6+ 6+ 3 2 2 3 3 3 3 3 6+ 6+ 6+ }$ $$ `. `. `. `. {# #$ |$ ($ A# A# J, L% L% J, v< v< J, n$ ># ># 7@ b+ { :# m m '@ d@ -, d@ J+ K+ K+ K+ a+ a+ a+ a+ @+ @+ _{ C= $- U# V% 33 43 53 63 73 83 93 B2 e1 03 a3 _( b3 c3 d3 e3 f3 g3 h3 i3 j3 Y@ s# =+ ~# (# (# :| :| m1 m1 K2 m1 k3 M% ,& ,& ,& ,& 6& 6& '& h> h> 6& h> '& ~& T% ;] ;] ;] ;] ;] ;] ;] ;] M+ M+ ;] ;] ;] O_ O_ a% }# G o o o G u t G G G G o o o o B B G G G G D D '= '= '= '= <| <| <| '= >+ D E E C ,+ ,+ C D D D }# }# }# C C C }# D }# ,+ V ,+ C }# }# }# }# }# }# }# }# 9& 9& 9& 9& 9& 9& 9& 9& Q% Q% Q% Q% Q% Q% Q% Q% U% U% 9& 9& 9& Q% Q% Q% ,% ,% ^% 9& Q% i> k+ l& i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ i> i> i> k+ k+ k+ l& l& k+ k+ k+ k+ k+ i> Q% 9& ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ k+ U@ L) [! S& k+ Q% ,+ ,+ h. h. E. E. 7# 7# 7# E. &. Z Z Z Z Z Z Z Z Z ` . . T O O q. *. S@ /@ q. p. *. /@ L *. p. *. q. b& b& ). D. h. ]+ j+ j+ ]+ h. ~+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ {+ h. h. {+ {+ ]+ {+ {+ {+ {+ {+ {+ {+ {+ [. +. .. @. /. [. /. @. /. +. @. .. .. @. +. /. +. +. +. +. +. +. +. +. /. +. @. .. .. @. +. l. 4. E& E& E& 4. 4. 8# 8# 8# 8# U@ U@ t% t% t% Q_ =] M2 l3 m3 v% y% f% y% n3 o3 5! +@ 2{ J- p3 P* j+ +. +. /. /. /. /. /. /. /. /. [. [. h+ h+ h+ j$ j$ j$ j$ j$ j$ j$ j$ #. #. !. !. 8# j$ a# a# v+ v+ v+ +% +% @% @% @% @% @% @% @% +% +% +% +% q. b& =) '' '. ). [. Z% /. [. j$ j$ J$ J$ /* /* J- J- J- J- +# +# /. /. h+ [. l. u$ <] <] [* :+ t& t& T@ T@ h+ [. /. /. /. [. T@ h+ /. +. [. h+ J- l* 4! C, J- +@ l* C, C, l* l* J- l* C, 4! :] 5. (& (& (& 5. 5. [. [. T@ T@ O) O) 4! 4! 4! O) m* h+ h+ h+ h+ h+ h+ h+ @. @. /. [. h+ T@ h+ a# j$ K$ J$ J$ a# q$ T@ T@ h+ t& s% '. t+ =) q3 -) '. /. [. [. [. [. /. +. Z% Z% t& T@ h+ [. [. .# l* G{ H{ H{ H{ H{ G{ 4{ G{ G{ G{ G{ G{ G{ G{ G{ C, C, C, C, C, C, C, C, l* 4! b, K> C, l* C, :] +# /. /. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ h+ [. [. h+ T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ T@ h+ /. /. /. [. T@ Z% m* .# .# +# .# m* O) :] .# .# m* :] :] :] O) O) =) '' =- b& +% +% h+ T@ h+ h+ a# a# J$ J$ J$ J$ J$ J$ J$ J$ a# a# h+ h+ T@ T@ @% +% b& =- '' s% @% h+ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ w$ w$ O; O; O; w$ w$ T@ T@ [. [. .# m* C, C, C, m* h+ u$ u$ u$ u$ u$ u$ u$ l. l. l. l. l. l. l. l. t& t& T@ T@ h+ [. /. /. h+ h+ h+ h+ h+ h+ h+ h+ .# [. [. 5. 5. (& I- e) x] r3 r3 s3 O! t3 O! u3 v3 w3 x3 y3 z3 A3 Z2 B3 C3 D3 E3 F3 G3 H3 I3 J3 K3 L3 d} M3 N3 O3 P3 Q3 R3 S3 T3 U3 V3 W3 X3 Y3 Z3 `3 4 .4 +4 @4 #4 $4 %4 &4 *4 =4 |3 .2 r2 Q@ @. h+ h+ +. +. h+ h+ +. h+ h+ h+ h+ h+ h+ h+ h+ b& b& b& b& +% +% [. [. [. [. j$ j$ K$ K$ K$ K$ 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. T@ h+ [. [. [. [. h+ T@ [. [. [. [. [. [. [. [. u$ 5. (. l. u$ w$ 5. l. 5. 5. 5. 5. 5. 5. 5. 5. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. +. /. [. [. [. [. /. +. [. [. [. [. [. [. [. [. /. [. [. h+ [. /. +. @. @. /. [. /. @. .. @. /. +. +. /. /. [. [. ", "| $ $ ; 1 ; $ 1 1 1 1 1 | | | | | | | | | | | | | | | | | | | 4 4 4 4 4 4 4 4 $ 1 | | 1 1 | 4 2 2 3 6+ 6+ 6+ 3 3 6+ 6+ 6+ 3 3 3 3 3 $$ $$ 9 j j 9 {# {# x #+ A# A# L% P& ~> L% /[ v< J, n$ ($ #+ M% ,& { :# m m '@ d@ -, d@ '@ )@ K+ K+ K+ K+ a+ a+ <# @+ v #$ )] n+ E) -4 ;4 >4 ,4 >4 '4 '4 E| )4 !4 >| ~4 {4 ]4 F1 ^4 /4 (4 _4 :4 ([ C{ m+ =+ L@ (# (# :| :| m1 K2 K2 m1 3( 6& ,& ,& ,& ,& M% M% h> 6& ,& ,& ,& h> '& T% O_ ;] ;] ;] ;] ;] ;] O_ M+ M+ ;] ;] ;] O_ O_ a% D G o o o u O T o o o o G G G G B B G G G G D D F F F F +_ +_ +_ F U }# E E }# V V ,+ D D D }# }# }# C C ,+ }# E D V i+ ,+ }# }# }# }# }# }# }# }# }# 9& 9& 9& 9& 9& 9& 9& 9& Q% Q% Q% Q% Q% Q% Q% Q% U% U% U% 9& Q% Q% Q% i> U% U% U% 9& Q% Q% i> i> i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ i+ i+ i+ ~+ ~+ ~+ h. h. {+ {+ h. ~+ i+ i+ ~+ ~+ h. h. h. h. h. h. h. h. h. h. h. h. h. h. h. l& l& S& C& C& i> Q% V ,+ h. h. E. E. 7# 7# 7# E. =. .. .. @. @. @. @. @. +. @. @. .. Z ` . . p. *. S@ /@ q. p. *. S@ I q. t+ q. q. b& r$ &. D. h. ]+ j+ j+ ]+ h. ~+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ .# +# ]+ h. ~+ ~+ h. {+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ [. +. @. +. [. [. /. @. /. +. @. .. .. @. +. /. +. +. +. +. +. +. +. +. /. +. @. .. .. @. +. l. 4. E& E& E& 4. 4. 8# 8# j$ j$ .* 2% t% M$ M$ ^{ I> w% <4 w% g% 5% *_ 5% X_ n3 [4 2{ }4 5! |4 14 +# /. /. /. /. +. +. +. +. +. /. /. /. [. [. [. j$ j$ j$ j$ j$ j$ j$ j$ B. #. #. !. 8# j$ a# a# v+ v+ v+ +% +% @% @% @% v+ v+ v+ v+ +% +% +% +% *. b& =) '' '. ). [. I$ /. [. a# a# /* /* /* /* C, C, C, C, m* m* h+ h+ T@ [. 5. u$ <] <] [* :+ Z% t& t& T@ h+ [. /. /. /. [. T@ h+ /. +. [. h+ J- l* 4! C, J- +@ l* C, l* J- +@ +@ +@ l* C, O) 5. (& (& (& 5. 5. [. [. T@ T@ O) O) 4! 4! 4! O) m* h+ h+ h+ h+ h+ h+ h+ [. [. h+ T@ T@ T@ h+ j$ j$ K$ K$ J$ q$ q$ T@ t& /. t& @% =. q. =) q3 s% v+ [. h+ T@ T@ h+ [. /. +. h+ t& [. .. ` Z j+ l* G{ H{ 24 24 H{ G{ 4{ G{ G{ G{ G{ G{ G{ G{ G{ 4! 4! 4! 4! 4! 4! 4! 4! J- C, 4! 4! l* J- l* O) O) T@ h+ h+ h+ h+ [. [. h+ h+ h+ h+ h+ h+ h+ h+ t& T@ h+ [. [. [. h+ h+ /. /. /. /. /. /. /. /. t& T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ t& T@ [. /. [. T@ Z% F{ O) C, l* l* l* 4! K> 34 J- J- l* C, 4! 4! C, m* '' =- b& b& +% @% t& Z% h+ h+ a# a# J$ J$ J$ J$ J$ J$ J$ J$ a# a# h+ h+ t& T@ @% +% b& =- '' -) v+ /. [. [. h+ T@ T@ t& T@ T@ T@ T@ T@ T@ T@ w$ w$ O; O; O; w$ w$ T@ T@ t& T@ O) O) 4! C, C, m* h+ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ Z% t& t& T@ h+ [. /. /. T@ T@ T@ T@ T@ T@ T@ T@ [. [. [. 5. (& I- I- e) V/ 44 54 O! 64 74 84 94 04 a4 b4 c4 c4 04 d4 e4 f4 g4 h4 i4 j4 k4 l4 m4 n4 o4 p4 q4 V' r4 f2 ) s4 t4 u4 v4 w4 x4 y4 z4 A4 B4 =[ C4 D4 E4 F4 G4 H4 I4 J4 K4 L4 M4 N4 _+ /. O) m* ]+ j+ O) O) j+ +# +# +# +# +# +# +# +# b& b& b& b& +% +% [. [. [. [. j$ j$ K$ K$ K$ K$ 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. t& T@ [. /. /. [. T@ t& [. [. [. [. [. [. [. [. u$ 5. (. l. u$ w$ 5. l. 5. 5. 5. 5. 5. 5. 5. 5. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. /. [. h+ T@ T@ h+ [. /. [. [. [. [. [. [. [. [. [. h+ T@ T@ T@ [. /. +. +. [. T@ h+ /. /. h+ T@ [. [. [. [. h+ h+ ", "| ; $ ; 1 ; $ ; 1 1 | | } 4 4 | | | | | | | | 1 1 1 1 1 1 H@ 1 4 4 4 4 0 0 0 0 # ; 1 1 ; ; | 4 ' ~ 3 6+ a+ a+ 6+ 6+ a+ a+ 6+ 6+ 3 2 2 1 `. }$ j i i j #$ ~# v |$ ~# ># |$ x F# #+ F# |$ #+ ($ ($ #+ E# '$ { :# m m J+ 8@ -, 8@ '@ J+ J+ 0 0 a+ j @+ v #$ =+ <# . B. O4 N+ P4 Q4 R4 S4 T4 U4 V4 B2 W4 X4 Y4 Z4 `4 3( ,& 4( M% b+ b+ ,& M% b+ b+ M% ,& >% ^% M_ M_ [# m m [# a% a% m m [# [# [# a% %5 a% E o k k G t T ` k k k o G u u u u u u u u u }# }# a% a% a% a% a% a% O_ a% V }# E E }# V V V D D D }# }# }# C C ,+ D E D V i+ V }# }# }# }# }# }# }# }# }# 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& 9& U% U% U% 9& Q% Q% i> i> Q% Q% Q% 9& 9& 9& 9& U% i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ W+ i+ i+ i+ ~+ ~+ ~+ h. h. j+ ]+ h. i+ i+ i+ h. {+ h. h. h. h. h. h. h. h. {+ {+ {+ {+ {+ {+ {+ {@ Q% R% R% R% i> i> i+ i+ h. h. E. E. 7# 7# 7# E. ). @. @. @. +. +. +. +. [. [. /. +. @. .. Z Z ). ,. ;+ ,. =. '. =. S S '. v+ =. =. v+ ). ;+ ~+ h. ]+ j+ j+ ]+ h. ~+ ]+ ]+ ]+ ]+ G. G. G. ]+ O) .# ]+ h. ~+ ~+ ~+ h. +# +# +# +# +# +# +# +# [. +. @. +. [. [. /. @. /. +. @. .. .. @. +. /. +. !. +. +. +. +. +. +. /. +. @. .. .. @. '. /. l. E& 4. 4. 4. 4. 8# 8# q$ a# .* 2% U@ m@ T$ T$ v% v% v% f% 5% 5% &) &) W_ &5 5! 2{ 2{ 5! 14 *5 m* [. [. /. +. +. @. @. @. +. j+ j+ +# +# .# .# j$ j$ j$ j$ j$ j$ j$ j$ B. B. #. !. 8# j$ a# T@ /. v+ v+ +% +% @% @% @% ). ). '. '. v+ +% +% @% &. v+ =) s% '. ). h+ I$ /. [. a# q$ q$ /* q$ q$ =5 C, C, C, m* m* h+ h+ T@ h+ 5. u$ <] <] [* :+ Z% Z% t& T@ h+ [. /. +. /. [. T@ h+ /. +. [. m* J- l* H{ C, 5! +@ 4{ C, 5! +@ 3{ .@ 3{ J- G{ O) [. (& 5. 5. 5. 5. [. [. T@ T@ O) O) O) O) 4! O) h+ h+ h+ h+ h+ h+ h+ h+ t& Z% Z% Z% t& T@ [. /. j$ j$ j$ a# q$ T@ t& t& +. T@ h+ ,. &. -) a) s% [. h+ T@ t& t& T@ h+ [. ` +. T@ +. T G T {+ J- G{ -5 24 ;5 H{ 14 5! 14 G{ 14 G{ 14 G{ 14 C, K> K> K> K> K> K> K> K> +@ l* 4! C, J- +@ l* m* Z% Z% t& t& T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ I$ Z% h+ /. /. /. h+ T@ /. /. /. /. /. /. /. /. Z% Z% Z% t& T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ T@ T@ t& t& t& t& t& t& t& t& t& t& T@ T@ h+ [. [. /. h+ u$ h+ h+ h+ h+ h+ h+ Z% T@ [. /. [. T@ >5 ,5 :] O) C, m* C, :] b, '5 +@ +# l* m* C, m* C, .# =- b& r$ r$ +% s% Z% I$ h+ h+ a# a# J$ J$ J$ J$ J$ J$ J$ J$ a# a# h+ h+ t& T@ @% v+ r$ =- '' =) 6. :. j. l. u$ w$ v$ v$ w$ w$ w$ w$ w$ &' w$ w$ O; O; O; O; w$ w$ T@ T@ Z% Z% }| :] 4! 4! C, m* h+ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ u$ Z% )5 t& T@ h+ [. /. +. t& t& :] t& :] :] !5 t& +% 5. /$ (& c) e) ~5 f( {5 ]5 ^5 /5 (5 _5 :5 <5 x3 [5 }5 |5 K' k, 15 25 35 4~ 45 55 65 75 85 95 05 a5 b5 c5 d5 -> f2 e5 `3 f5 u4 g5 h5 i5 E; j5 V3 q) k5 l5 m5 n5 o5 p5 q5 r5 s5 t5 u5 v5 .& /$ +% O) m* ]+ j+ O) O) j+ +# +# +# /. /. /. /. v+ b& b& b& b& +% +% [. [. [. [. j$ j$ K$ K$ K$ K$ 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. v$ w$ +% l. /. 5. T@ v$ [. 5. [. 5. [. U# [. U# u$ U# (. l. u$ w$ 5. l. 5. 5. 5. 5. 5. 5. /$ 5. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. [. h+ T@ t& t& T@ h+ [. [. [. [. [. [. [. [. [. h+ T@ t& t& t& h+ /. +. /. h+ t& t& T@ T@ Z% F{ h+ h+ h+ h+ h+ h+ ", "5 7 `. `. 8 h o 9 8 8 `. `. 7 7 Z. Z. Z. 7 `. `. 8 4 4 ]# ]# ]# ]# ]# ]# J@ ]# 2 6+ a+ 6+ 2 2 3 a+ E# 6+ ~ ' 2 6+ 6+ 6+ } } } } } } } } l + } 1 1 1 } } 1 | } 4 0 + l n 4 6+ 4 3 3 2 2 2 K@ K@ K@ K@ K@ K@ + + + l l 0 } } I+ E k~ K& 3+ ++ B| u+ 9} w5 e$ 2$ h 9 4 + x5 i> 5# y5 z5 A5 B5 C5 `' `' D5 E5 F5 G5 H5 I5 k{ %{ J5 K5 L5 M5 N5 O5 P5 Q5 !] S| ,% ._ :| R5 S5 T5 $5 3( ,] 3( U5 G) ._ _# ._ M_ >% >% ,% ,% }# ^% ,% '& ,% ,% ,% ,% D D n E G$ H# )$ H# I# ^& }# ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% }# C V ,+ }# D C V C D E D C C '= E 9& d+ d+ d+ d+ d+ d+ d+ w P U+ d+ P v d+ W+ ,+ C D }# ,+ V C }# ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ i> Q% U% ^% ^% U% Q% i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> V C C ,+ i+ i+ ,+ }# i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ {+ ~+ i+ V V i+ ~+ {+ V V V V V V V V i+ V ,+ C C ,+ V i+ ,+ V ~+ h. {+ h. ~+ i+ h. h. h. h. h. h. h. l& l& L) o^ L) i> 9& i+ h. j+ ]+ F. E. 7# 5$ [$ H. &. Z Z Z Z Z Z Z +. +. @. @. .. Z Z ` <. <. <. <. <. <. <. <. (. (. :. :. _. <. <. ` k+ l& m@ U@ j+ ]+ h. ~+ G. 9# b) $& %& [$ %& $& j+ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% .* .* .* .. .. @. @. +. +. /. /. [. [. [. [. [. [. [. [. $. i# !. #. B. B. /. T@ T@ t& *) s% '. ). p. '. [. (. @. Z Z @. +. [. @. /. [. /. .. Z {+ j+ m@ M$ M$ M$ M$ M$ .@ .@ @ @ .@ .@ +@ +@ +@ +# [. l. +. +. /. [. O) }| .# .# l* J- +@ +@ .@ .@ ]+ ]+ j+ j+ +# .# .# .# +# +# +# +# +# +# +# +# [. [. [. [. [. [. [. [. T@ t& Z% T@ h+ [. t& I$ h+ h+ @% h+ h+ h+ h+ h+ /. /. /. /. /. 8# /. 8# =5 =5 =5 =5 * * a# a# ,_ ,_ E) E) V5 V5 V5 V5 t& h+ /. /. h+ h+ /. @. T@ T@ h+ [. [. /. +. j+ 4{ 4{ W5 4{ W5 4{ W5 4{ W5 3{ [4 24 X5 5! S_ l* .# 5. [. [. [. [. [. [. Z% T@ h+ T@ Z% Z% :] h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ @% @% @% @% @% h+ h+ h+ /. /. /. j$ j$ a# a# a# I$ Z% t& [. @. Z . T T G u ` Z T . ]+ Y5 Y5 Z5 Y5 Z5 Y5 Z5 Y5 >= P* >= P* >= P* >= P* C, O) :] }| }| :] O) m* :] :] :] :] :] :] :] :] Z% Z% Z% Z% Z% Z% Z% Z% t& T@ [. /. /. [. T@ t& /. [. [. h+ T@ T@ t& t& h+ h+ h+ h+ h+ h+ h+ h+ t& T@ h+ /. /. h+ T@ t& t& t& t& t& t& t& t& t& Z% Z% t& t& T@ T@ h+ h+ h+ h+ h+ T@ t& Z% Z% Z% T@ T@ T@ h+ h+ h+ h+ h+ t& t& t& t& t& t& t& t& v$ O; u$ l. l. u$ T@ t& t& t& :] :] :] :] K> :] m* h+ m* [. .# /. +# /. O) h+ m* [. .# /. +# +. =- =- =- =- @% @% h+ h+ t& t& q$ q$ J$ K$ K$ S$ K$ K$ J$ J$ a# q$ T@ T@ h+ h+ @% @% =- =- =- _* `5 i; `5 i; i; i; <] <] <] <] V5 V5 V5 6 V5 V5 [| O; a. a. 5. w$ T@ T@ Z% Z% }| :] 4! 4! C, m* +. l. l. 5. 5. u$ u$ w$ v$ v$ v$ v$ v$ v$ v$ v$ ,_ (* ,_ ,_ 5[ 5[ :] :] m* m* Y5 b) Y5 Y5 Z5 b) .6 )+ +6 o@ e& @6 #6 __ $6 V; p1 %6 &6 *6 =6 ;/ -6 ;6 >6 ,6 {- '6 )6 !6 `4 ~6 {6 ]6 ^6 /6 (6 _6 :6 <6 [6 }6 |6 16 26 36 4' 46 u[ 56 66 76 86 B( 96 06 a6 b6 c6 d6 e6 f6 g6 h6 i6 j6 k6 l6 m6 b# [] Y5 0# P* [] !5 s% +% v+ v+ ). 6. 6. W@ e# <* r$ r$ r$ r$ v+ v+ /. /. t& [. !. 8# J$ /* K$ i# /. h+ T@ t& t& T@ h+ /. h+ h+ h+ h+ h+ h+ h+ u$ e# N; :* C- W@ o@ u$ !_ A% O; U# E& U# n6 /+ |. 4. S$ 8# 8# 8# 8# /. /. T@ h+ @% +% +% v+ r$ '. /. /. /. /. /. /. /. /. /. [. [. h+ T@ T@ t& t& h+ h+ h+ h+ h+ h+ h+ h+ @. @. @. @. @. @. @. @. [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ +. [. h+ t& t& t& T@ h+ /. /. /. /. /. /. ", "7 8 8 7 7 8 j 8 8 8 `. `. 7 7 7 G= G= `. `. `. `. } } ]# ]# ]# ]# J@ J@ J@ ]# w& 6+ a+ 6+ 2 2 3 a+ K@ 3 ~ ~ 3 a+ 6+ 3 } } } } } } } } + 0 4 } } } 4 4 } } } 4 0 + + + 0 0 0 4 4 } } } + + + + + + + + + l l 0 } } + E 5& a a b #| o6 p6 q6 r6 g$ %@ j } J+ M_ L_ s6 t6 u6 66 v6 w6 O1 x6 y6 z6 A6 B6 m{ C6 r| D6 E6 J5 J5 06 F6 G6 H6 I6 ;- N( <# 2 F) J6 K6 L6 $5 M6 ,] $5 N6 N6 O6 ._ ._ ._ '$ >% E E D ,% Q Q Q Q v v G G k o c+ j@ G# r J ;+ }# ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% D C ,+ C D D }# ,+ C D E D C C }# E d+ d+ d+ d+ d+ d+ d+ d+ w P U+ d+ P v d+ W+ ,+ C D }# ,+ V C }# ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ Q% Q% 9& U% U% 9& Q% Q% Q% Q% Q% Q% Q% Q% Q% Q% i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> V ,+ ,+ V ~+ ~+ V C i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ h. ~+ i+ V V i+ ~+ h. i+ i+ i+ i+ i+ i+ i+ i+ h. ~+ V ,+ ,+ V ~+ h. ,+ V ~+ h. {+ h. ~+ ~+ {+ {+ h. h. h. h. ~+ k+ k+ [! 6[ [! k+ Q% ~+ {+ ~+ ~+ &$ ^& '% K) 7# F. &. Z Z Z Z Z Z Z @. @. @. .. .. .. .. .. n+ n+ n+ n+ n+ n+ n+ n+ /+ /+ s# s# s# s# n+ B. k+ l& m@ U@ j+ ]+ h. ~+ G. H. e> a- [$ 5$ s+ e> j+ U@ U@ U@ U@ U@ U@ U@ m@ m@ m@ U@ U@ 2% 2% 2% .. .. @. @. +. +. /. /. /. /. /. /. /. /. /. 8# B. h# S$ h# #. #. /. T@ [. h+ s% @% t+ q. p. v+ v+ +. @. @. @. @. +. /. @. /. [. /. .. Z .. +. j+ j+ j+ j+ j+ j+ j+ j+ ]+ ]+ j+ j+ j+ +# +# /. h+ 5. /. +. /. [. m* O) l* l* l* J- 5! 2{ 2{ +@ .@ j+ j+ j+ +# .# .# .# +# +# +# +# +# +# +# +# /. /. [. [. [. [. h+ h+ T@ t& Z% T@ [. [. T@ I$ h+ h+ h+ h+ h+ h+ h+ h+ /. /. /. /. /. /. /. /. =5 =5 =5 =5 * * a# a# q$ q$ &' &' P6 P6 P6 P6 Z% T@ [. [. h+ T@ [. +. h+ h+ h+ [. [. [. [. +# 4{ W5 W5 W5 W5 W5 W5 W5 Q6 }4 W5 R6 R6 W5 }4 G{ m* h+ h+ h+ h+ h+ h+ h+ t& h+ [. h+ t& Z% T@ [. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ =- =- =- =- @% @% h+ h+ /. /. j$ j$ K$ J$ J$ J$ t& T@ h+ [. /. +. @. @. Z T T @. /. .. @. h+ #& Z5 Z5 Z5 Z5 Z5 Z5 Z5 >= >= >= >= >= >= >= P* $& m* O) :] :] O) m* .# :] :] :] :] :] :] :] :] Z% Z% Z% Z% Z% Z% Z% Z% t& T@ [. /. /. [. T@ t& h+ h+ h+ h+ h+ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ t& T@ h+ [. [. h+ T@ t& t& t& t& t& t& t& t& t& Z% Z% t& t& T@ T@ h+ h+ T@ T@ T@ T@ t& t& t& t& h+ h+ h+ h+ h+ T@ T@ T@ t& t& t& t& t& t& t& v$ v$ O; [* (& 5. u$ T@ t& t& t& :] :] K> K> K> :] O) T@ h+ h+ [. [. [. [. T@ h+ h+ h+ [. /. /. /. r$ r$ r$ r$ v+ v+ /. /. h+ h+ a# a# J$ /* /* /* K$ K$ J$ J$ a# q$ T@ T@ h+ h+ @% @% =- =- =- _* `5 S6 S6 S6 ;) ;) j; j; j; j; := := (= (= (= (= / <] (& (& w$ A% Z% t& t& T@ O) O) 4! C, C, m* /. 5. 5. 5. u$ w$ w$ w$ v$ v$ v$ v$ v$ v$ v$ E) ,_ (* (* (* 5[ 5[ :] :] C, C, Y5 Y5 Z5 Z5 Z5 #& _* k> S6 T6 $) U6 V6 r; W6 X6 Y6 Z6 `6 m/ 7 .7 +7 @7 #7 V! .{ $7 %7 z/ &7 *7 =7 -7 ;7 >7 ,7 '7 )7 !7 ~7 {7 ]7 ^7 /7 (7 _7 R} :7 <7 [7 }: }7 |7 17 27 37 47 57 67 77 87 97 07 a7 b7 c7 l6 m6 b# L> *5 P* Y5 !5 d7 -) @% @% +% W@ j. o@ e, N; i; b& b& b& b& +% +% [. [. T@ [. !. 8# J$ /* K$ h# [. h+ T@ t& t& T@ h+ [. h+ h+ h+ h+ h+ h+ h+ u$ _* e7 `5 f7 o@ o@ [* !_ g7 [| P6 P6 6 6 h7 [% S$ S$ S$ S$ 8# 8# /. /. h+ h+ @% +% b& r$ r$ v+ +% [. [. [. [. [. [. [. T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ +. +. +. +. +. +. +. +. [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ +. /. [. T@ T@ T@ h+ [. /. /. /. /. /. /. ", "9 j 8 7 6 Z. `. 8 8 8 `. `. 7 7 7 o$ o$ `. `. `. `. 1 1 ]# ]# ]# ]# J@ J@ J@ ]# w& 6+ a+ 6+ 2 2 3 a+ 6+ 3 2 3 a+ a+ 3 ~ } } } } } } } } } 4 0 + + + 0 0 4 4 4 4 0 0 0 0 + + + 0 0 4 4 4 + + + + + + + + 0 l l + 4 4 + n 1$ i7 D^ 9} F[ j7 q6 k7 k7 o6 9: d$ `. } l ^% l7 m7 n7 o7 `' p7 q7 r7 +, ;> s7 <7 >[ 1/ t7 u7 v7 w7 x7 y7 z7 A7 B7 C7 D7 p$ *+ k ^# d@ O_ E7 $5 4( k3 3( G) F7 x5 M_ E# E# E# E# '$ '$ >% >% Q Q Q Q v v G G k o c+ j@ r r K R }# ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% E }# C }# E n D C C D E D C C }# E P P P P P P P P v P d+ d+ P P d+ U+ ,+ C D }# ,+ V C }# ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ U% 9& Q% Q% Q% Q% 9& U% 9& 9& 9& 9& 9& 9& 9& 9& i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> ~+ V V i+ h. h. i+ ,+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ h. ~+ i+ i+ i+ i+ ~+ h. ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ h. h. ~+ i+ i+ ~+ h. h. V i+ ~+ h. {+ h. h. h. ]+ {+ {+ h. h. ~+ ~+ i> i> S& [! [! k+ k+ h. ]+ i+ i+ ^& ^& K) 6# 7# F. &. Z Z Z Z Z Z Z .. .. .. .. .. @. @. @. #. #. #. #. #. #. #. #. #. #. !. !. !. !. 8# 8# C& S& m@ U@ U@ m@ h. ~+ E. G. 9# H. 5$ 7# [$ H. j+ U@ U@ U@ U@ U@ U@ U@ {@ {@ {@ m@ m@ U@ U@ U@ .. .. @. @. +. +. /. /. +. +. +. +. +. +. +. !. !. S$ K$ S$ !. !. [. t& @. /. +% v+ p. q. p. v+ ). +. +. /. /. +. +. @. +. /. [. /. @. .. @. +. +# +# +# +# +# +# +# +# j+ j+ +# +# .# .# .# [. T@ u$ [. /. /. /. .# .# l* l* l* l* 5! 5! 5! +@ +@ j+ j+ +# +# +# .# .# +# +# +# +# +# +# +# +# +. /. /. [. [. h+ h+ T@ h+ t& t& T@ [. [. T@ Z% h+ h+ h+ h+ h+ h+ h+ h+ /. /. /. /. /. /. /. /. =5 =5 =5 =5 * * a# a# a# a# L$ L$ /= /= /= /= Z% T@ h+ h+ t& t& h+ /. [. [. [. [. h+ h+ h+ m* C, G{ G{ G{ G{ G{ G{ G{ 24 4{ 4{ G7 G7 4{ 4{ K> O) T@ T@ T@ T@ T@ T@ T@ T@ [. /. [. T@ T@ h+ /. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ =- =- =- =- @% @% h+ h+ /. [. j$ j$ J$ J$ /* /* [. [. h+ h+ h+ T@ T@ T@ +. Z .. h+ t& h+ T@ F{ #& #& #& #& #& #& #& #& #& #& #& #& #& #& #& b) $& .# m* O) O) m* .# .# :] :] :] :] :] :] :] :] t& t& t& t& t& t& t& t& t& T@ [. /. /. [. T@ t& T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ h+ [. [. h+ T@ T@ t& t& t& t& t& t& t& t& t& t& t& t& T@ T@ T@ T@ t& t& t& t& T@ T@ T@ T@ /. [. [. h+ T@ T@ t& t& t& t& t& t& t& t& t& v$ v$ O; [* [* u$ u$ T@ t& t& t& :] :] K> K> K> :] :] t& T@ T@ T@ h+ h+ h+ T@ h+ h+ h+ [. [. [. [. b& b& b& b& +% +% [. [. /. /. j$ a# /* (* (* $| K$ K$ J$ J$ a# q$ T@ T@ h+ h+ @% @% =- =- =- _* `5 S6 S6 S6 ;) ;) j; j; j; j; := := (= (= (= (= / !_ O; O; A% O( I$ t& [. [. .# m* C, C, C, m* h+ u$ u$ w$ w$ w$ v$ v$ v$ v$ v$ v$ v$ v$ v$ E) ,_ (* (* (* ,_ ,_ :] :] m* m* b) b) #& #& #& =- j~ i= H7 T; g- I7 J7 K7 L7 M7 N7 6] O7 P7 Q7 R7 S7 T7 U7 V7 W7 X7 Y7 i1 a< Z7 `7 8 .8 +8 @8 #8 $8 %8 &8 *8 =8 -8 ;8 (7 >8 ,8 '8 )8 1/ D/ !8 ~8 {8 ]8 ^8 /8 (8 _8 :8 <8 [8 }8 |8 18 28 38 m6 b# 48 *5 Y5 Y5 !5 d7 s% +% @% @% /$ /$ C- N; i; ', =- =- =- =- @% @% h+ h+ h+ /. !. 8# J$ /* J$ S$ [. h+ T@ T@ T@ T@ h+ [. h+ h+ h+ h+ h+ h+ h+ u$ _* e7 `5 f7 o@ o@ [* !_ / !_ P6 P6 6 6 h7 [% S$ S$ S$ S$ 8# 8# /. /. h+ h+ @% +% b& r$ r$ v+ @% h+ h+ h+ h+ h+ h+ h+ Z% t& t& T@ h+ [. /. /. h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ @. +. /. [. h+ h+ [. [. /. /. /. /. /. /. ", "9 j 8 7 6 Z. `. `. `. `. `. `. `. `. `. d d 8 `. `. 7 ; ; ]# ]# ]# ]# J@ J@ J@ ]# w& 6+ a+ 6+ 2 2 3 a+ 3 2 2 6+ K@ K@ 3 ' } } } } } } } } | } + n n n + + 0 0 0 0 4 4 4 4 l l l + + 0 0 0 + + + + + + + + 0 + l + 4 4 + k D^ 58 #| j7 68 78 88 98 08 L* a8 8: b8 F= M@ u c8 2. d8 e8 q) p7 f8 g8 h8 i8 j8 k8 56 >[ l8 u7 m8 n8 o8 p8 q8 r8 r8 s8 t8 u8 v8 -. 0+ 1 G+ f+ ._ k3 L+ k3 w8 G) O6 M_ K@ K@ K@ E# E# '$ '$ '$ Q Q Q Q v v G G k G M c+ r r K N }# ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% n D }# D n n E }# C D E D C C }# E P P P P P P P P v P =+ =+ =+ =+ d+ U+ ,+ C D }# ,+ V C }# ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ^% U% Q% i> i> Q% U% ^% U% U% U% U% U% U% U% U% i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> ~+ i+ V ~+ {+ {+ ~+ ,+ i+ i+ i+ i+ i+ i+ i+ i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ i+ i+ ~+ ~+ ~+ h. h. h. h. h. h. h. h. h. ~+ ~+ ~+ ~+ ~+ ~+ h. i+ ~+ ~+ h. h. {+ {+ {+ ]+ ]+ {+ h. h. ~+ i+ i> i> C& C& S& l& {@ {+ ]+ h. h. E. F. 5$ [$ %& 9# &. Z Z Z Z Z Z Z ` Z Z .. @. @. +. +. !. !. U@ !. U@ !. U@ !. m@ #. U@ !. 2% j$ .* * C& S& m@ U@ U@ m@ h. ~+ E. G. H. G. 7# 6# 5$ H. j+ U@ U@ U@ U@ U@ U@ U@ l& l& l& {@ {@ m@ m@ m@ .. .. @. @. +. +. /. /. @. @. @. @. @. @. @. #. 8# J$ J$ K$ !. !. [. t& Z @. v+ '. p. q. t+ +% =. +. /. h+ h+ /. +. .. +. [. h+ [. @. .. @. /. .# .# .# .# .# .# .# .# +# +# +# .# .# m* m* h+ T@ w$ h+ [. /. /. +# +# l* l* l* l* 4{ 4{ 5! J- +@ j+ +# +# +# +# +# +# .# .# .# .# .# .# .# .# +. +. /. [. [. h+ T@ T@ h+ T@ t& T@ [. /. T@ Z% h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. =5 =5 =5 =5 * * a# a# j$ j$ U# U# ^= ^= ^= ^= Z% t& h+ T@ t& Z% t& h+ /. /. [. h+ h+ T@ t& :] C, C, C, C, C, C, C, C, b, C, C, 34 34 C, C, b, :] t& t& t& t& t& t& t& h+ [. +. /. h+ T@ [. +. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ =- =- =- =- @% @% h+ h+ [. [. j$ a# J$ /* /* /* h+ h+ h+ T@ t& t& Z% Z% h+ +. /. Z% I$ t& Z% x8 @% =- #& =- #& =- #& =- #& =- #& =- #& =- #& b) .# .# .# .# .# .# .# .# :] :] :] :] :] :] :] :] t& t& t& t& t& t& t& t& t& T@ [. /. /. [. T@ t& t& t& T@ T@ h+ [. [. /. h+ h+ h+ h+ h+ h+ h+ h+ T@ h+ h+ h+ h+ h+ h+ T@ t& t& t& t& t& t& t& t& t& t& t& t& T@ T@ T@ T@ Z% Z% Z% t& T@ h+ h+ h+ +. /. [. h+ T@ t& Z% Z% t& t& t& t& t& t& t& v$ v$ O; O; O; w$ w$ T@ t& t& t& :] :] K> K> K> :] }| Z% t& t& T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ r} r} r} r} *) *) Z% Z% [. [. j$ a# /* /* /* (* K$ K$ J$ J$ a# q$ T@ T@ h+ h+ @% @% =- =- =- _* `5 S6 S6 S6 ;) ;) j; j; j; j; := := (= (= (= (= [| <] [* O; A% O( Z% T@ +. +. +# .# l* C, C, O) T@ w$ w$ w$ v$ v$ v$ v$ v$ v$ v$ v$ v$ v$ v$ E) ,_ (* (* (* ,_ ,_ :] :] m* m* b) b) #& #& #& _* H7 I7 (; h- y8 z8 A8 B8 C8 y^ D8 E8 F8 G8 E8 H8 27 I8 J8 K8 L8 x7 M8 N8 O8 P8 Q8 R8 S8 T8 U8 V8 W8 X8 Y8 &8 Z8 `8 9 .9 +9 @9 #9 $9 D/ G2 %9 &9 *9 =9 -9 ;9 >9 ,9 '9 )9 07 !9 ~9 c7 l6 R; z% b# L> Y5 0# P* [] [] +% '. +% +% /$ /$ C- C- N; N; =- =- =- =- @% @% h+ h+ [. /. 8# j$ K$ J$ J$ K$ h+ h+ h+ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ _* e7 `5 f7 o@ o@ [* !_ <] [* E& E& h7 h7 [% 1. K$ K$ K$ K$ j$ j$ [. [. [. [. +% +% b& b& b& +% @% h+ h+ h+ h+ h+ h+ h+ t& T@ T@ T@ h+ [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. @. +. +. /. /. [. [. [. [. [. [. [. [. [. ", "`. 8 8 7 7 `. 9 `. `. `. `. `. `. `. `. d d 8 `. `. 7 ; ; ]# ]# ]# ]# J@ J@ J@ ]# w& 6+ a+ 6+ 2 2 3 a+ 3 2 2 6+ K@ K@ 3 ' } } } } } } } } | } + n n n + + 0 0 0 0 4 4 4 4 l l l + + 0 0 0 + + + + + + + + 4 + n l 0 4 0 i #| q6 j7 78 {9 ]9 ^9 ^9 /9 (9 _9 :9 <9 [9 8} }9 ]@ (% |9 19 29 39 Y3 49 59 69 79 j8 p| S: 89 99 09 a9 b9 c9 d9 e9 f9 g9 h9 i9 j9 k9 -= _+ /@ ;+ E# a+ 3 6+ K@ '$ '$ '$ K@ K@ K@ E# E# '$ '$ '$ Q Q Q Q v v G G k G N M |# r |# c+ }# ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% n D }# D n n E }# C D E D C C }# E P P P P P P P P P P P P d+ d+ d+ d+ ,+ C D }# ,+ V C }# ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ^% U% Q% i> i> Q% U% ^% U% U% U% U% U% U% U% U% i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> ~+ i+ V ~+ {+ {+ ~+ ,+ i+ i+ i+ i+ i+ i+ i+ i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ i+ ~+ ~+ ~+ ~+ ~+ ~+ i+ h. h. h. h. h. h. h. h. i+ i+ i+ ~+ ~+ i+ i+ i+ ~+ ~+ ~+ h. h. {+ {+ ]+ {+ {+ {+ h. h. ~+ ~+ k+ k+ u& u& C& {@ m@ ]+ {+ h. h. F. F. [$ [$ [$ G. &. Z Z Z Z Z Z Z ` Z Z .. @. @. +. +. U@ U@ t% U@ t% U@ t% U@ M$ m@ t% U@ Y_ .* o3 * C& S& L) 6[ U@ m@ l& k+ h. ]+ H. G. E. D. 5$ H. j+ U@ U@ U@ U@ U@ U@ U@ l& l& l& {@ {@ m@ m@ m@ .. .. @. @. +. +. /. /. @. @. @. @. @. @. @. #. j$ J$ /* K$ !. !. [. T@ Z @. v+ '. p. q. t+ +% ). +. [. h+ h+ [. +. @. /. [. h+ [. +. @. +. /. .# .# .# .# .# .# .# .# +# +# +# .# .# m* m* h+ h+ u$ h+ h+ [. /. j+ j+ l* l* l* l* 4{ 4{ G{ C, J- +# +# +# +# +# j+ j+ .# .# .# .# .# .# .# .# /. /. /. [. [. h+ h+ h+ h+ T@ T@ h+ /. /. h+ t& h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. =5 =5 =5 =5 * * a# a# j$ j$ U# U# ^= ^= ^= ^= Z% T@ h+ T@ Z% Z% t& h+ [. [. [. h+ T@ t& t& t& O) O) O) O) O) O) O) O) >5 m* m* }| }| m* m* >5 t& t& t& t& t& t& t& t& h+ [. +. /. h+ T@ [. +. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ =- =- =- =- @% @% h+ h+ [. [. a# a# /* /* (* (* t& t& t& t& t& t& T@ T@ T@ /. /. Z% I$ T@ t& )_ @% e# @% e# @% e# @% e# s% <* s% <* s% <* s% s% .# .# .# .# .# .# .# .# :] :] :] :] :] :] :] :] T@ T@ T@ T@ T@ T@ T@ T@ t& T@ [. /. /. [. T@ t& t& t& T@ T@ h+ [. [. /. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ h+ h+ h+ t& t& t& t& t& t& t& t& T@ T@ T@ T@ t& t& t& t& Z% Z% Z% t& T@ h+ h+ h+ +. /. [. h+ T@ t& Z% Z% t& t& t& t& t& t& t& v$ w$ <] <] <] v$ v$ t& T@ t& t& :] :] K> K> K> :] }| Z% t& t& T@ T@ T@ h+ h+ h+ h+ h+ T@ T@ T@ T@ r} r} r} r} *) *) Z% Z% t& T@ q$ q$ J$ K$ K$ K$ K$ K$ J$ J$ a# q$ T@ T@ h+ h+ @% @% =- =- =- _* `5 `5 `5 `5 i; i; <] <] <] <] V5 V5 6 6 6 6 <] [* (& [* v$ A% T@ [. +. +. +# .# l* C, C, O) t& v$ v$ v$ w$ w$ w$ w$ v$ v$ v$ v$ v$ v$ v$ E) ,_ (* (* (* ,_ ,_ t& t& h+ h+ @% @% =- =- =- f7 l9 m9 : ^5 n9 o9 p9 q9 r9 s9 s9 t9 u9 u9 v9 w~ w9 x9 y9 z9 A9 B9 C9 H1 D9 E9 F9 G9 H9 z, S} I9 J9 K9 L9 W8 M9 N9 O9 _7 @9 P9 Q9 R9 S9 T9 U9 s8 V9 W9 X9 Y9 _8 Z9 `9 07 0 .0 18 l6 ]; m6 J! :$ *, P* S# S# $& $& '. =. '. '. W@ W@ e, e, e, e, r$ r$ r$ r$ v+ v+ /. /. +. /. j$ j$ K$ K$ J$ /* T@ h+ h+ h+ h+ h+ h+ T@ h+ h+ h+ h+ h+ h+ h+ h+ _* c# :* _* W@ W@ u$ A% w$ 5. 4. 4. G- G- r% l+ K$ K$ K$ K$ j$ j$ [. [. [. [. +% +% b& b& b& +% v+ /. /. /. /. /. /. /. [. [. [. h+ T@ T@ T@ t& h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ [. [. [. [. [. [. [. [. +. +. +. +. /. /. [. [. [. [. [. [. [. [. ", "Z. `. `. `. `. 9 h 7 7 7 `. `. 8 8 8 o$ o$ `. `. `. `. 1 1 ]# ]# ]# ]# J@ J@ J@ ]# w& 6+ a+ 6+ 2 2 3 a+ 6+ 3 2 3 a+ a+ 3 ~ } } } } } } } } } 4 0 + + + 0 0 4 4 4 4 0 0 0 0 + + + 0 0 4 4 4 + + + + + + + + } + n n + 4 0 h #| +0 @0 #0 $0 %0 &0 *0 =0 -0 ;0 >0 ,0 '0 )0 88 1* !0 ~0 {0 q4 ]0 ^0 /0 (0 _0 :0 :0 6, p| g< <0 [0 }0 |0 10 2} 20 30 40 50 60 70 == 80 )~ 90 9. G <# 6+ 3 a+ E# E# E# E# E# E# E# '$ '$ >% h> Q Q Q Q v v G G k G N N |# r r j@ }# ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% E }# C }# E n D C C D E D C C }# E P P P P P P P P =+ P v P d+ U+ d+ =+ ,+ C D }# ,+ V C }# ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ U% 9& Q% Q% Q% Q% 9& U% 9& 9& 9& 9& 9& 9& 9& 9& i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> ~+ V V i+ h. h. i+ ,+ i+ i+ i+ i+ i+ i+ i+ i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ i+ i+ ~+ h. h. ~+ i+ i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ V i+ i+ ~+ ~+ i+ i+ V h. h. h. ~+ h. {+ ]+ j+ h. h. h. h. h. h. h. l& {@ C& u& C& {@ m@ {+ ~+ i+ i+ D. E. 7# 6# K) ^& &. Z Z Z Z Z Z Z .. .. .. .. .. @. @. ]+ M$ M$ &) M$ &) M$ &) M$ &) M$ &_ t% &_ t% ~_ Y_ C& S& L) 6[ U@ m@ l& k+ h. ]+ 9# H. F. E. [$ H. j+ U@ U@ U@ U@ U@ U@ U@ {@ {@ {@ m@ m@ U@ U@ U@ .. .. @. @. +. +. /. /. +. +. +. +. +. +. +. !. j$ J$ J$ S$ #. #. /. h+ @. /. +% v+ p. q. p. v+ v+ /. [. [. [. [. /. /. /. h+ T@ h+ +. @. +. [. +# +# +# +# +# +# +# +# j+ j+ +# +# .# .# .# [. [. 5. h+ h+ h+ [. +# j+ l* l* l* l* G{ G{ G{ 4! l* .# +# +# +# j+ j+ j+ m* m* m* m* m* m* m* m* [. [. [. [. [. [. [. [. [. h+ T@ h+ /. +. h+ t& h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ =5 =5 =5 =5 * * a# a# a# a# L$ L$ /= /= /= /= T@ h+ [. h+ t& Z% t& h+ h+ h+ T@ T@ T@ T@ t& t& T@ w$ T@ w$ T@ w$ T@ w$ I$ 5. [. v$ t& 5. [. I$ T@ T@ T@ T@ T@ T@ T@ T@ T@ [. /. [. T@ T@ h+ /. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ =- =- =- =- @% @% h+ h+ h+ h+ a# q$ /* (* (* (* Z% Z% Z% t& T@ h+ h+ h+ t& [. [. t& Z% [. [. Z% e# e# e# e# e# e# e# e# <* <* <* <* <* <* <* <* T@ m* .# .# .# .# m* O) :] :] :] :] :] :] :] :] T@ T@ T@ T@ T@ T@ T@ T@ t& T@ [. /. /. [. T@ t& T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ [. h+ T@ T@ T@ T@ h+ [. t& t& t& t& t& t& t& t& T@ T@ T@ T@ t& t& t& t& t& t& t& t& T@ T@ T@ T@ /. [. [. h+ T@ T@ t& t& t& t& t& t& t& t& t& v$ w$ <] !_ !_ A% A% t& T@ t& t& :] :] K> K> K> :] :] t& T@ T@ T@ h+ h+ h+ h+ h+ h+ T@ T@ T@ t& t& b& b& b& b& +% +% [. [. Z% t& ,_ q$ J$ K$ S$ S$ K$ K$ J$ J$ a# q$ T@ T@ h+ h+ @% @% =- =- =- _* :* `5 `5 `5 i; i; <] <] <] <] V5 V5 6 6 6 6 O; (& (& [* v$ v$ h+ /. [. [. .# m* C, C, C, m* t& v$ w$ w$ w$ u$ u$ u$ v$ v$ v$ v$ v$ v$ v$ E) ,_ (* (* (* ,_ ,_ t& t& h+ u$ @% e# _* _* _* Y[ 00 a0 b0 c0 d0 e0 f0 g0 h0 [~ i0 j0 k0 l0 m0 n0 o0 p0 q0 r0 s0 t0 u0 v0 w0 x0 y0 z0 >> s4 A0 B0 C0 D0 E0 B4 F0 4' G0 H0 :7 I0 M^ J0 K0 ~8 L0 M0 N0 /8 O0 P0 ,9 Q0 R0 S0 a7 T0 28 R; z% J! J! :$ L> Y5 0# 0# $& $& '. =. =. ). j. W@ e, e, o@ o@ r$ r$ r$ r$ v+ v+ /. /. @. +. j$ j$ K$ K$ /* (* T@ T@ h+ [. [. h+ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ _* c# :* _* W@ W@ u$ A% A% v$ L$ &' U0 U0 F- G- J$ J$ J$ J$ a# a# h+ h+ /. /. v+ +% b& =- =- @% v+ /. /. /. /. /. /. /. /. /. [. h+ T@ t& t& Z% h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ T@ T@ /. /. /. /. /. /. /. /. /. /. +. +. /. [. h+ T@ h+ h+ h+ h+ h+ h+ ", "Z. `. `. `. `. 9 h 7 7 7 `. `. 8 8 8 G= G= `. `. `. `. } } ]# ]# ]# ]# J@ J@ J@ ]# w& 6+ a+ 6+ 2 2 3 a+ K@ 3 ~ ~ 3 a+ 6+ 3 } } } } } } } } + 0 4 } } } 4 4 } } } 4 0 + + + 0 0 0 4 4 } } } + + + + + + + + } 0 n n + 0 0 h o6 88 V0 W0 X0 Y0 Z0 N7 `0 a .a +a @a #a $a %a &a *a =a -a ;a >a ,a /0 'a )a !a ~a {a v[ H9 {6 ]a ^a /a (a _a :a h> h> G) '& Q Q Q Q v v G G k G R N K r G# q }# ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% D C ,+ C D D }# ,+ C D E D C C }# E d+ d+ d+ d+ d+ d+ d+ d+ d+ P w v U+ W+ d+ P ,+ f+ F '= >+ U f+ '= >+ >+ >+ >+ >+ >+ >+ >+ Q% Q% 9& U% U% 9& Q% Q% Q% Q% Q% Q% Q% Q% Q% Q% ,' ,' ,' ,' ,' ,' ,' ,' ,' ,' ,' ,' ,' ,' ,' ,' V ,+ ,+ V ~+ ~+ V C i+ i+ i+ i+ i+ i+ i+ i+ h. h. h. h. h. h. h. h. V i+ ~+ h. h. ~+ i+ V i+ i+ i+ i+ i+ i+ i+ i+ i+ ~+ h. {+ {+ h. ~+ i+ {+ {+ h. ~+ h. {+ j+ +# i+ i+ ~+ h. h. {+ ]+ m@ U@ S& u& C& {@ m@ h. V ~+ h. E. F. 7# K) .% R$ &. Z Z Z Z Z Z Z @. @. @. .. .. .. .. {+ $% $% ;_ $% ;_ $% ;_ $% =_ &_ -_ &) -_ &) ;_ $% ^* 9- L) 6[ 6[ L) l& k+ ]+ j+ .# +# G. F. H. $& j+ U@ U@ U@ U@ U@ U@ U@ m@ m@ m@ U@ U@ 2% 2% 2% .. .. @. @. +. +. /. /. /. /. /. /. /. /. /. 8# 8# K$ K$ S$ B. $. @. /. [. h+ s% @% t+ q. p. v+ @% [. /. /. /. /. [. h+ [. h+ T@ h+ /. @. +. [. j+ j+ j+ j+ j+ j+ j+ j+ ]+ ]+ j+ j+ j+ +# +# /. +. l. [. h+ T@ h+ .# +# l* l* l* C, G{ H{ H{ 4! l* .# .# +# j+ j+ j+ ]+ m* m* m* m* m* m* m* m* T@ T@ h+ [. [. /. +. +. [. h+ T@ [. +. +. [. t& h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ =5 =5 =5 =5 * * a# a# q$ q$ &' &' P6 P6 P6 P6 h+ /. +. /. T@ t& T@ h+ t& t& t& T@ T@ T@ T@ T@ w$ O; w$ O; w$ O; w$ O; A% (& (. [* u$ :+ 5. A% h+ h+ h+ h+ h+ h+ h+ h+ t& h+ [. h+ t& Z% T@ [. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ =- =- =- =- @% @% h+ h+ h+ h+ q$ q$ (* (* (* (* t& t& T@ T@ T@ h+ h+ h+ F{ T@ h+ Z% t& /. +. h+ u$ [* [* [* [* [* [* [* O; O; O; O; O; O; O; w$ t& O) m* .# .# m* O) :] :] :] :] :] :] :] :] :] h+ h+ h+ h+ h+ h+ h+ h+ t& T@ [. /. /. [. T@ t& h+ h+ h+ h+ h+ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ [. h+ T@ t& t& T@ h+ [. t& t& t& t& t& t& t& t& h+ h+ T@ T@ t& t& Z% Z% T@ T@ T@ T@ t& t& t& t& h+ h+ h+ h+ h+ T@ T@ T@ t& t& t& t& t& t& t& v$ w$ <] !_ [| O( A% t& T@ t& t& :] :] K> K> K> :] O) T@ h+ h+ [. [. [. [. h+ h+ h+ T@ t& t& t& Z% r$ r$ r$ r$ v+ v+ /. /. T@ T@ q$ a# J$ J$ J$ J$ K$ K$ J$ J$ a# q$ T@ T@ h+ h+ @% @% =- =- =- _* :* `5 `5 `5 i; i; <] <] <] <] V5 V5 6 6 6 6 O; [* [* <] O( O( T@ /. t& T@ O) O) 4! C, C, m* T@ w$ w$ u$ 5. 5. 5. l. v$ v$ v$ v$ v$ v$ v$ E) ,_ (* F- F- E) E) v$ v$ u$ [* e# C- f7 f7 f7 T; 6a 7a 8a 9a 0a aa ba ca da S> ea fa ga ga ha L0 :( ia ja ka la V[ ma na 02 oa pa qa q) P: ra 8> sa ta ua d2 {1 R} va wa -{ xa U} K0 ya za Aa Ba Ca Da Ea Q= Fa Ga Ha .0 .2 Ia Ja z% `% & `% =- Ka La Y5 Y5 [] [] +% ). ). '. /$ e# N; C- e, o@ b& b& b& b& +% +% [. [. Z +. a# a# S$ S$ /* Ma t& T@ h+ [. [. h+ T@ t& h+ h+ h+ h+ h+ h+ h+ h+ =- '' =) =- v+ v+ h+ Z% Z% T@ a# q$ $| $| (* J$ J$ J$ J$ J$ a# a# h+ h+ /. /. v+ +% b& =- =- @% +% [. [. [. [. [. [. [. h+ h+ h+ h+ h+ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ T@ T@ /. /. /. /. /. /. /. /. h+ [. /. /. /. h+ T@ t& h+ h+ h+ h+ h+ h+ ", "7 8 8 7 7 8 9 Z. 7 7 `. `. 8 8 9 @$ @$ 7 `. `. 8 4 4 ]# ]# ]# ]# J@ J@ J@ ]# w& 6+ a+ 6+ 2 2 3 a+ E# 6+ ~ ' 2 6+ 6+ 6+ } } } } } } } } l + } 1 1 1 } } 1 | } 4 0 + l n 4 4 4 } } | | | + + + + + + + + | 0 n E l 0 0 j o6 Na Oa Pa Qa Ra @= _2 Sa Ta Ua Va Wa Xa Ya Za `a b .b +b @b #b $b %b &b *b =b -b ;b `3 >b ,b 'b )b !b ~b {b ]b ^b /b (b _b :b { h> h> '& )& 1b !& '& Q Q Q v v G G k u R R K r G# M@ }# ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% ^% }# C V ,+ }# D C V C D E D C C }# E d+ d+ d+ d+ d+ d+ d+ d+ d+ v w v U+ W+ U+ ^% >+ f+ F '= >+ U f+ '= >+ >+ >+ >+ >+ >+ >+ >+ i> Q% U% ^% ^% U% Q% i> i> i> i> i> i> i> i> i> ,' ,' ,' ,' ,' ,' ,' ,' ,' ,' ,' ,' ,' ,' ,' ,' V C C ,+ i+ i+ ,+ }# i+ i+ i+ i+ i+ i+ i+ i+ h. h. h. h. h. h. h. h. V i+ ~+ {+ {+ ~+ i+ V V V V V V V V V ~+ h. ]+ j+ j+ ]+ h. ~+ ]+ {+ h. ~+ h. {+ j+ +# ,+ V i+ ~+ {+ ]+ j+ 2% 2% [! u& C& {@ m@ ~+ ,+ j+ +# 9# 9# [$ 7# K) R# &. Z Z Z Z Z Z Z +. +. @. @. .. Z Z ~+ |% 2b 2b 2b 2b 2b 2b 2b =_ =_ -_ -_ ;_ 2b 2b d( 3b 9- L) 6[ 6[ L) l& k+ ]+ +# m* .# H. G. H. .# U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% .* .* .* .. .. @. @. +. +. /. /. [. [. [. [. [. [. [. j$ 8# K$ K$ h# $. C. .. +. T@ t& *) s% t+ p. p. '. s% h+ /. +. +. /. h+ T@ [. h+ T@ h+ /. +. /. [. ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ {+ {+ ]+ ]+ j+ j+ j+ /. .. (. [. h+ T@ T@ m* .# l* l* l* C, H{ H{ 24 K> l* .# .# +# j+ j+ ]+ ]+ m* m* m* m* m* m* m* m* Z% t& T@ h+ /. +. @. .. [. h+ h+ [. +. +. [. T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ =5 =5 =5 =5 * * a# a# ,_ ,_ E) E) V5 V5 V5 V5 [. +. @. /. h+ t& T@ [. Z% Z% Z% t& T@ h+ h+ u$ O; O; O; O; O; O; O; O; <] a. g. (& (& g. a. <] 5. [. [. [. [. [. [. [. Z% T@ h+ T@ Z% Z% t& h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ =- =- =- =- @% @% h+ h+ h+ h+ q$ q$ (* (* (* $| [. h+ h+ h+ h+ T@ T@ T@ x8 Z% t& I$ t& +. @. 5. u$ [* [* [* [* [* [* [* O; O; O; O; O; O; O; w$ Z% :] O) m* m* O) :] }| :] :] :] :] :] :] :] :] h+ h+ h+ h+ h+ h+ h+ h+ t& T@ [. /. /. [. T@ t& /. [. [. h+ T@ T@ t& t& h+ h+ h+ h+ h+ h+ h+ h+ /. h+ T@ t& t& T@ h+ /. t& t& t& t& t& t& t& t& h+ h+ T@ T@ t& t& Z% Z% h+ h+ h+ T@ t& Z% Z% Z% T@ T@ T@ h+ h+ h+ h+ h+ t& t& t& t& t& t& t& v$ w$ <] !_ / q} A% t& T@ t& t& :] :] K> K> K> :] m* h+ h+ [. [. /. /. /. h+ h+ T@ T@ t& t& Z% Z% =- =- =- =- @% @% h+ h+ /. [. j$ a# /* /* (* (* K$ K$ J$ J$ a# q$ T@ T@ h+ h+ @% @% =- =- =- =- :* `5 `5 `5 i; i; <] <] <] <] V5 V5 6 6 6 6 <] <] <] [| q} q} t& [. Z% Z% }| :] 4! 4! C, m* T@ u$ u$ 5. 5. l. l. (. v$ v$ v$ v$ v$ v$ v$ E) ,_ (* F- F- E) E) v$ <] [* {; b' b' Y[ 4b 4b 5b 6b 7b 8b 9b 0b ab bb cb db eb fb gb K5 hb ib jb kb lb mb nb ob pb v0 qb ;3 rb l: sb m: 29 )3 tb f2 ub vb ]1 ,8 8~ wb xb yb C6 zb 1: J5 Ab V9 Bb 57 (8 Cb Db Eb Fb 0 T0 Gb Hb Ib n; `% `% `% =- Jb Kb Lb La d7 d7 s% v+ '. v+ e# d# i; i; C- C- =- =- =- =- @% @% h+ h+ Z +. a# a# S$ S$ /* Ma t& T@ h+ /. /. h+ T@ t& h+ h+ h+ h+ h+ h+ h+ h+ =- '' =) =- v+ v+ h+ Z% h+ /. !. 8# J$ /* J$ S$ J$ J$ J$ J$ a# a# h+ h+ +. /. v+ +% b& =- =- s% @% h+ h+ h+ h+ h+ h+ h+ t& t& T@ T@ h+ [. [. /. h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. T@ T@ T@ T@ T@ T@ T@ T@ /. /. /. /. /. /. /. /. T@ h+ [. /. [. h+ t& Z% h+ h+ h+ h+ h+ h+ ", "`. `. `. `. `. `. `. 8 8 8 8 8 8 8 8 F= F= `. `. `. `. | | 8@ 8@ 8@ ]# J@ J@ m$ ^# w& 6+ a+ 6+ 2 2 3 a+ 2 2 2 3 6+ 6+ a+ a+ 4 | | 0 n E 0 | } } } } } 4 4 4 0 0 0 0 0 0 0 0 4 l n 4 $ $ 0 }# 4 0 + 0 } | 0 l + + + 0 4 } } 8 Mb >) #0 %0 Nb Ob Pb Qb Rb Sb Tb Ub Vb Wb Xb Yb Zb `b 7/ c .c +c @c #c $c %c &c *c =c -c ;c >c ,c 'c )c !c ~c {c ]c ^c K8 /c (c _c :c % ^% U% U% ,% >% ,% U% D D D }# }# }# C C }# }# }# }# }# }# }# }# =+ =+ =+ =+ =+ =+ =+ =+ d+ =+ =+ U+ C. C. d+ ,% Y+ 3c 4c 4c 5c p} p} p} 5c 5c 5c 5c 5c 5c 5c >+ k+ l& {@ {@ l& k+ Q% U% l& k+ i> i> i> i> k+ l& 6c 0' |% 0' 7c E7 7c 8c 7c E7 E7 9c 0' 0' 7c O6 {+ h. h. ~+ i+ i+ V V ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ i+ i+ V V ,+ ,+ i+ i+ ~+ h. h. ~+ i+ i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ {+ {+ {+ {+ {+ {+ {+ {+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ k+ 9& R% u& C& k+ i> V ,+ {+ {+ F. F. 5$ 5$ 5$ F. ,. .. @. +. +. @. .. ` .. .. .. .. .. .. .. {+ $% ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ -_ =_ 0c 0c =_ -_ %% Z^ z) _& _& _& _& 6[ 6[ U@ U@ U@ U@ j+ j+ j+ j+ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% 2% 2% 2% 2% 2% h+ t& Z% t& [. /. [. T@ .. .. @. +. /. [. h+ q$ !. h# h# S$ 8# 8# [. [. h+ h+ @% @% =- =- =- @% ). /. [. [. +. @. +. [. [. [. /. /. /. +. +. +. .# .# .# .# .# .# .# .# ]+ +# m* .# j+ ]+ j+ [. h+ 5. [. /. +. +. ]+ ]+ C, J- +@ J- H{ 24 4{ .@ J- +# +# +# +# +# +# +# .# .# .# .# .# .# .# .# [. [. [. [. [. [. [. [. +. /. h+ T@ T@ h+ /. +. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ ac ac ac ac 5[ 5[ ,_ ,_ a# a# L$ L$ /= /= /= /= [. h+ T@ T@ h+ [. +. .. h+ h+ [. /. [. h+ t& O( (& 1{ j; {; b. v. b. y. ./ ./ ./ j; 1{ 1{ {; [* v$ T@ h+ /. /. h+ T@ t& t& t& t& t& t& t& t& t& +. [. t& h+ +. @. /. T@ /. [. [. h+ T@ T@ t& t& =) =) =) =) -) -) t& t& h+ h+ a# a# J$ J$ J$ J$ h+ h+ h+ h+ h+ h+ h+ h+ /. [. [. h+ T@ T@ t& v$ v$ <] <] <] <] <] <] <] [* [* [* [* [* [* [* u$ t& :] :] :] :] :] :] :] }| }| :] :] O) O) m* m* /. [. T@ Z% I$ Z% t& T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ T@ t& Z% Z% t& T@ h+ t& t& Z% I$ Z% T@ [. /. T@ h+ [. h+ Z% I$ Z% t& h+ T@ t& Z% Z% t& T@ h+ t& t& t& t& t& t& t& t& +. +. +. +. /. /. [. [. T@ Z% F{ I$ T@ h+ t& F{ t& t& t& t& t& t& t& v$ v$ <] <] <] v$ v$ t& t& t& t& :] :] K> K> K> :] .# h+ Z% I$ I$ Z% h+ [. Z% t& T@ h+ h+ T@ t& Z% =) =) =) =) -) -) t& t& t& t& ,_ ,_ (* (* (* (* S$ /* Ma bc )5 q$ h+ T@ Z% t& s% @% =- '' =) r} 2( 2( 2( 2( '_ '_ A% A% w$ A% cc cc F- M> F- dc !_ [| [| [| A% u$ /. @. h+ h+ m* m* C, C, C, m* t& v$ v$ v$ v$ v$ v$ v$ w$ w$ v$ v$ A% O( O( ec E) l+ 1. n& P6 /= a. b. fc e) gc ^! f- hc ic ^2 jc kc lc mc nc ab oc pc qc rc sc tc uc |7 :( vc *{ wc xc yc E9 zc Ac Bc Cc Dc Ec V' Fc Gc Hc Ic Jc Kc h2 [} Lc H0 Mc Nc Oc C6 Pc Qc d| Rc Sc Tc Da Uc Vc Wc Xc Yc Zc ~9 Hb `c N$ !; `% & e= b& [$ S# 0# Y5 b) 9# '. ). +% s% d# <* e, e, C- i; =) =- b& b& s% -) T@ [. h+ h+ a# a# J$ J$ J$ J$ h+ h+ h+ h+ h+ h+ h+ h+ t& t& t& t& t& t& t& t& =) =) '' '' @% +% [. /. [. [. a# a# J$ /* /* /* (* (* (* (* ,_ ,_ t& t& T@ h+ v+ '. t+ r$ =- s% '. +. /. [. [. h+ T@ T@ [. [. /. /. +. +. +. +. /. /. /. [. [. h+ h+ h+ T@ T@ t& Z% Z% t& T@ T@ t& t& T@ T@ h+ [. [. /. h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. /. /. /. /. /. /. ", "`. `. `. `. `. `. `. 8 8 8 8 8 8 8 8 F= F= `. `. `. `. | | 8@ 8@ 8@ ]# J@ J@ m$ ^# w& 6+ a+ 6+ 2 2 3 a+ 2 2 2 3 6+ 6+ 6+ a+ 4 | | 0 n n 0 | | | } } 4 4 0 0 0 0 0 0 0 0 0 0 4 + l 4 ; $ 0 D 4 0 + 0 } } 0 l 0 0 0 0 0 4 4 9 8: a8 {9 X0 d .d +d @d #d $d $d %d &d *d =d -d ;d >d ,d 'd c a1 )d !d ~d /0 {d ]d ^d /d :} (d _d :d % ^% U% U% ,% >% ,% U% D D D }# }# C C C }# }# }# }# }# }# }# }# =+ =+ =+ =+ =+ =+ =+ =+ d+ =+ =+ U+ C. C. d+ ,% >+ 5c 5c 5c 5c p} p} p} 5c 5c 5c 5c 5c 5c 5c 5c 6c i> k+ l& k+ i> Q% 9& i> i> Q% 9& 9& Q% i> ,' 9c 0' |% 0' 7c E7 7c 8c 7c E7 E7 9c 0' 0' 7c dd Z+ ~+ ~+ ~+ ~+ i+ i+ i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ i+ V V V ,+ i+ ~+ ~+ ~+ ~+ ~+ ~+ i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ {+ {+ {+ {+ {+ {+ {+ {+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ k+ Q% u& C& S& l& k+ i+ V {+ {+ F. F. 5$ 5$ 5$ F. &. .. @. +. +. @. .. Z .. .. .. .. .. .. .. {+ $% $% ;_ $% ;_ $% ;_ $% ;_ &) =_ ~_ 0c &_ -_ %% Z^ z) _& _& _& _& 6[ 6[ U@ U@ U@ U@ j+ j+ j+ j+ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% 2% 2% 2% 2% 2% [. T@ t& T@ /. +. /. h+ .. @. @. +. /. [. h+ a# !. h# h# S$ 8# 8# [. [. h+ h+ @% @% =- =- =- @% ). /. [. [. +. @. +. [. [. [. [. /. /. +. +. +. +# +# +# +# +# +# +# +# ]+ +# m* .# j+ ]+ +# [. [. 5. [. [. /. /. +# +# C, J- +@ l* H{ 24 4{ .@ J- +# +# +# +# +# +# +# .# .# .# .# .# .# .# .# [. [. [. [. [. [. [. [. /. [. h+ T@ T@ h+ [. /. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ ed ed ed ed fd fd q$ q$ a# a# L$ L$ /= /= /= /= h+ h+ T@ t& T@ h+ /. +. h+ h+ [. /. [. h+ t& A% [* j; ./ ./ 1{ {; j; gd j; 1{ 1{ 1{ 1{ {; {; [* v$ T@ h+ [. [. h+ T@ t& t& t& t& t& t& t& t& t& /. h+ t& T@ /. +. [. t& h+ h+ h+ T@ T@ t& t& t& =) =) =) =) -) -) t& t& h+ h+ a# a# J$ J$ J$ J$ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ v$ <] <] <] <] <] <] <] [* [* [* [* [* [* [* u$ t& :] :] :] :] :] :] :] }| }| :] :] O) O) m* m* [. h+ T@ t& Z% Z% t& t& h+ h+ h+ h+ h+ h+ h+ h+ h+ T@ t& Z% Z% t& T@ h+ T@ T@ Z% Z% Z% t& h+ [. t& T@ [. h+ Z% I$ t& T@ h+ T@ t& Z% Z% t& T@ h+ t& t& t& t& t& t& t& t& +. /. /. /. [. [. h+ h+ h+ t& I$ Z% T@ h+ t& I$ t& t& t& t& t& t& t& v$ v$ <] <] <] v$ v$ t& t& t& t& :] :] K> K> K> :] .# h+ Z% I$ I$ Z% h+ [. Z% t& T@ h+ h+ T@ t& Z% =) =) =) =) -) -) t& t& t& t& ,_ ,_ (* (* (* (* S$ /* $| $| q$ j$ h+ T@ Z% t& s% @% =- '' =) r} 2( 2( 2( 2( '_ '_ A% A% u$ v$ hd E) G- n& M> U0 O; <] !_ !_ A% v$ h+ [. h+ h+ m* m* C, C, C, m* t& v$ v$ v$ v$ v$ v$ v$ w$ w$ w$ v$ v$ A% A% hd L$ r% r% h7 V5 := ./ d) d) ;^ s: 5b (; id jd 00 kd ld md nd od pd qd rd sd sc ~8 td ud vd kb wd xd yd zd Ad |+ Bd Cd Dd Dc Ed Fd Gd Hd Id Jd Kd k8 -[ -[ Ld Lc Md Nd Od Pd Qd Rd Sd c| Td Ud Vd O0 Wd }c Xd Yd Zd |8 18 v5 Ja & !; `% & e= #& }& 0# P* Y5 b) $& v+ '. +% s% d# <* e, e, C- i; =) =- b& b& s% -) T@ [. h+ h+ a# a# J$ J$ J$ J$ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ T@ T@ '' '' '' =- @% @% h+ h+ [. [. a# a# J$ /* /* /* (* (* (* (* ,_ ,_ t& t& T@ h+ +% v+ r$ b& =- s% v+ [. [. [. [. h+ h+ h+ h+ h+ [. [. /. /. /. +. /. /. [. [. [. h+ h+ h+ h+ h+ T@ t& t& T@ h+ h+ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. ", "`. `. `. `. `. `. `. 8 8 8 8 8 8 8 8 F= F= `. `. `. `. | | 8@ 8@ 8@ ]# J@ J@ m$ ^# w& 6+ a+ 6+ 2 2 3 a+ 2 2 3 3 3 6+ 6+ 6+ 4 } } 4 l l 0 } 1 1 | } 4 + + l 0 0 0 0 0 0 0 0 4 + l 4 1 ; 0 E 0 + + 0 } } 0 n 4 4 0 0 0 0 + h w5 `d e .e +e Z6 @e #e $e %e &e *e 1_ =e -e ;e >e ,e 'e )e !e ~e $2 {e ]e Y3 ^e /e (e _e :e % ^% U% U% ,% >% ,% U% D D }# }# C C C ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ =+ =+ =+ =+ =+ =+ =+ =+ U+ =+ =+ d+ W+ W+ d+ ^% <| ee fe fe fe fe ge ge ge ge ge ge ge ge ge 5c >' 9& Q% i> i> i> Q% Q% Q% Q% 9& U% U% 9& Q% 6c 9c he 2b he ie je ie ke le ie ie le he he le g~ Y+ i+ i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ i+ i+ i+ V V ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ k+ k+ C& S& [! {@ l& ~+ ~+ {+ {+ F. F. 5$ 5$ 5$ F. &. .. @. @. @. @. .. Z .. .. .. .. .. .. .. {+ T$ T$ $% T$ $% T$ $% T$ $% M$ &_ Y_ ~_ t% &) &- _& z) z) z) _& _& _& _& 6[ 6[ U@ U@ U@ U@ j+ j+ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% 2% 2% 2% 2% 2% /. h+ T@ h+ +. @. +. [. @. @. +. +. /. [. h+ a# !. h# h# S$ 8# 8# [. [. /. /. v+ v+ r$ r$ r$ v+ ). /. [. [. +. @. +. [. h+ [. [. [. /. /. +. +. j+ j+ j+ j+ j+ j+ j+ j+ j+ .# m* .# j+ j+ +# h+ [. 5. [. [. h+ h+ m* m* l* J- J- l* H{ H{ 4{ +@ J- +# +# +# +# +# +# +# m* m* m* m* m* m* m* m* [. [. [. [. [. [. [. [. h+ h+ T@ t& t& T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ =5 =5 =5 =5 * * a# a# a# a# L$ L$ /= /= /= /= T@ T@ t& t& t& T@ h+ [. h+ h+ [. [. [. h+ T@ v$ a. [* <] <] O; O; !_ / (& (& (& [* [* [* [* [* v$ T@ h+ h+ h+ h+ T@ t& t& t& t& t& t& t& t& t& [. T@ t& t& h+ [. h+ t& T@ T@ T@ t& t& Z% Z% Z% =) =) =) =) -) -) t& t& h+ h+ a# a# J$ J$ J$ J$ h+ h+ h+ h+ h+ h+ h+ h+ t& T@ T@ T@ T@ h+ h+ h+ E) E) E) E) E) E) E) E) L$ L$ L$ L$ L$ L$ L$ L$ t& :] :] :] :] :] :] :] }| }| :] :] O) O) m* m* T@ T@ T@ h+ T@ t& Z% Z% T@ T@ T@ T@ T@ T@ T@ T@ h+ T@ t& Z% Z% t& T@ h+ h+ h+ t& t& Z% t& t& T@ I$ t& h+ T@ t& Z% T@ [. h+ T@ t& Z% Z% t& T@ h+ t& t& t& t& t& t& t& t& [. [. [. h+ h+ T@ T@ T@ h+ T@ t& t& h+ [. T@ t& t& t& t& t& t& t& t& v$ v$ <] <] <] v$ v$ t& t& t& t& :] :] K> K> K> :] .# T@ t& I$ I$ t& T@ [. Z% t& T@ h+ h+ T@ t& Z% =) =) =) =) -) -) t& t& t& t& ,_ ,_ (* (* (* (* K$ J$ /* J$ 8# 8# h+ t& Z% t& s% @% =- '' =) r} =) =) =) =) -) -) t& t& [. h+ ,_ q$ K$ S$ J$ F- (& [* O; <] A% A% t& t& h+ h+ m* m* C, C, C, m* t& v$ v$ v$ v$ v$ v$ v$ u$ u$ u$ w$ w$ v$ v$ E) L$ M> h7 n6 E& I{ ./ me w. V~ l9 ne oe pe qe q9 re se te ue j' k) ve B_ we xe ye !8 ze Ae Be Ce De Ee Fe Ge He Ie Je qa Ke Le Me [) Ic Me Gd x) Ne ;[ P9 Oe Pe Qe Re Se Te Ue A9 Ve We Xe Ye Ze >9 `e f Yd .f E[ Gb +f P; *% 3% a' e= e= R) #& >= Y5 *5 *5 [] [] @% +% +% s% d# <* e, e, C- i; =) =- b& b& s% -) T@ [. h+ h+ a# a# J$ J$ J$ J$ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ #& #& #& #& b) [] O) O) .# .# * * .^ p: p: p: (* (* (* (* ,_ ,_ t& t& t& T@ @% @% =- =- '' -) @% h+ h+ h+ [. [. [. [. T@ T@ T@ h+ h+ [. [. [. /. [. [. [. h+ h+ T@ T@ [. [. h+ T@ T@ h+ [. [. h+ h+ h+ h+ h+ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ ", "`. `. `. `. `. `. `. 8 8 8 8 8 8 8 8 F= F= `. `. `. `. | | 8@ 8@ 8@ ]# J@ J@ m$ ^# w& 6+ a+ 6+ 2 2 3 a+ 3 3 3 3 3 3 6+ 6+ } } } 4 0 + 0 0 ; 1 | } 0 l n n 0 0 0 0 0 0 0 0 4 + + 4 | | 0 n 0 + l + 4 } + n 4 4 4 0 + l l i d$ @f #f $f .= %f &f *f =f -f ;f >f ,f ,f 'f )f !f ~f {f ]f .e ^f /f (f _f F; :f O1 [f }f |f 1f 2f 3f 4f 02 5f 6f ha 7f 8f 9f 0f af bf cf { df ef ff gf ad f$ P( g Q Z& hf if jf kf lf )& Q Q Q v v o o o o j@ j@ |# |# |# j@ }# ^% ^% ^% ^% ^% ^% ^% >% ^% U% U% ,% >% ,% U% }# }# }# C C C ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ =+ =+ =+ =+ =+ =+ =+ =+ U+ d+ =+ d+ W+ W+ d+ ^% +_ mf ee ee fe ge ge nf ge ge ge ge ge ge ge 5c x5 ^% U% 9& Q% Q% i> i> i> Q% 9& 9& 9& 9& Q% ,' 9c he 2b he ie je ie ke ke le ie le he he le E7 U V i+ i+ ~+ h. h. {+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ i+ i+ i+ i+ ~+ ~+ i+ i+ i+ i+ ~+ ~+ h. h. h. h. h. h. h. h. ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ h. h. h. h. h. h. h. h. h. h. h. h. h. h. h. l& {@ [! [! [! {@ {@ {+ {+ {+ {+ F. F. 5$ 5$ 5$ F. =. .. .. @. @. .. .. .. .. .. .. .. .. .. .. .. {@ {@ T$ {@ T$ {@ T$ {@ M$ m@ t% U@ t% U@ M$ L) _& z) z) z) _& _& _& _& 6[ 6[ U@ U@ U@ U@ j+ j+ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% 2% 2% 2% 2% 2% +. [. h+ [. @. .. @. /. @. @. +. +. /. [. [. j$ !. h# h# S$ 8# 8# [. [. /. /. v+ v+ r$ r$ r$ v+ ). /. [. [. +. @. +. [. h+ h+ [. [. [. /. /. /. ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ j+ .# m* m* +# j+ +# h+ /. 5. [. h+ T@ T@ :] :] J- J- l* C, G{ G{ 4{ J- l* .# .# .# .# .# .# .# m* m* m* m* m* m* m* m* [. [. [. [. [. [. [. [. T@ T@ t& t& t& t& T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ o3 o3 o3 o3 .* .* j$ j$ a# a# L$ L$ /= /= /= /= t& t& t& t& t& t& T@ T@ h+ h+ h+ h+ h+ h+ T@ T@ :. a. [* [* a. a. [* <] :+ :+ a. (& (& [* [* w$ t& T@ T@ T@ T@ T@ T@ t& t& t& t& t& t& t& t& t& T@ t& t& t& T@ T@ T@ t& t& Z% Z% Z% Z% Z% Z% Z% =) =) =) =) -) -) t& t& t& t& ,_ ,_ (* (* (* (* h+ h+ h+ h+ h+ h+ h+ h+ Z% Z% t& t& T@ h+ h+ [. ,_ E) ,_ E) ,_ E) ,_ E) a# L$ a# L$ a# L$ a# a# :] :] :] :] :] :] :] :] }| }| :] :] O) O) m* m* Z% t& h+ [. [. T@ Z% I$ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ t& t& t& t& T@ T@ [. h+ T@ t& t& Z% Z% Z% F{ Z% T@ T@ t& t& h+ /. T@ T@ t& t& t& t& T@ T@ t& t& t& t& t& t& t& t& h+ h+ T@ T@ t& t& t& Z% h+ h+ T@ h+ h+ h+ h+ T@ t& t& t& t& t& t& t& v$ v$ <] <] <] v$ v$ t& t& t& t& :] :] K> K> K> :] m* T@ t& Z% Z% t& T@ h+ Z% t& T@ h+ h+ T@ t& Z% =) =) =) =) -) -) t& t& t& t& ,_ ,_ (* (* (* (* J$ J$ J$ S$ #. #. [. Z% t& t& s% s% '' '' =) =) =) =) =) =) -) -) t& t& [. T@ ,_ ,_ J$ K$ J$ F- u$ [* O; <] v$ v$ t& t& h+ h+ m* m* C, C, C, m* t& v$ v$ v$ v$ v$ v$ v$ u$ u$ u$ u$ u$ u$ u$ &' &' U0 6 _% #@ T& c/ g( ;^ r3 ne of 0{ pf qf rf }5 c4 sf tf uf vf wf xf yf ^( P| zf a< Af 3/ Bf Cf Df 4f Ef Ff Gf `' O: O: P: Gd Ic Ic Hf q) 3) If Jf Kf Lf Mf Nf Od Of Pf Ue Qf 8= Rf Sf Tf Uf Vf Wf Xf Yf ^[ 51 Ia Ja Zf O$ e= a' e= e= `f *, g *5 *5 La !5 [] s% s% +% s% d# <* e, e, C- i; =) =- b& b& s% -) T@ [. h+ h+ a# a# J$ J$ J$ J$ h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. a- e> e> #& [] [] :] :] .# .# * * .^ p: p: p: (* (* (* (* ,_ ,_ t& t& t& t& s% s% '' '' =) -) -) t& T@ h+ h+ [. /. /. Z% t& t& t& T@ T@ h+ h+ [. [. [. h+ h+ T@ T@ T@ /. [. [. h+ h+ [. [. /. /. [. [. h+ T@ T@ t& t& h+ h+ h+ h+ h+ h+ h+ h+ t& t& t& t& t& t& t& t& T@ T@ T@ T@ T@ T@ ", "`. `. `. `. `. `. `. 8 8 8 8 8 8 8 8 F= F= `. `. `. `. | | 8@ 8@ 8@ ]# J@ J@ m$ ^# w& 6+ a+ 6+ 2 2 3 a+ 6+ 6+ 3 3 3 3 3 3 } 4 4 4 4 0 + l 1 1 | 4 + l n E 0 0 0 0 0 0 0 0 4 0 0 0 } } 0 + + l l + 4 4 + n 4 4 0 + + l n k d .g a8 `a +g C8 @g #g $g %g &g *g =g -g ;g >g ,g 'g )g !g ~g {g ]g ^g /g 29 (g _g :g wb % ^% U% U% ,% >% ,% U% }# }# C C C ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ =+ =+ =+ =+ =+ =+ =+ =+ W+ d+ P =+ U+ W+ U+ U% +_ ee ee fe ge ge nf nf ge ge ge ge ge ge ge 5c >' U% U% U% 9& Q% i> i> k+ k+ i> Q% Q% i> k+ !% 9c he 2b he ie je ie ke 2b ke ie ie ke he ke 9c U V i+ i+ ~+ h. h. {+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ h. ~+ i+ V V i+ ~+ h. h. h. h. h. h. h. h. h. ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ h. h. h. h. h. h. h. h. h. h. h. h. h. h. h. l& m@ L) [! [! {@ {@ ]+ ]+ {+ {+ F. F. 5$ 5$ 5$ F. ). .. .. .. .. .. .. @. .. .. .. .. .. .. .. .. B. B. {@ B. {@ B. {@ B. U@ !. m@ #. m@ #. U@ 6[ z) ng z) z) z) z) _& _& 6[ 6[ 6[ 6[ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% 2% 2% 2% 2% 2% +. [. h+ [. @. .. @. /. +. +. +. /. /. /. /. j$ !. h# h# S$ 8# 8# [. [. /. /. v+ v+ r$ r$ r$ v+ ). /. [. [. +. @. +. [. h+ h+ h+ [. [. [. /. /. ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ +# m* O) m* +# +# .# T@ /. 5. [. h+ T@ T@ :] :] J- l* C, C, G{ 4{ 5! J- l* .# .# .# .# .# .# .# O) O) O) O) O) O) O) O) [. [. [. [. [. [. [. [. t& t& T@ T@ T@ T@ t& t& h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ o3 o3 o3 o3 .* .* j$ j$ a# a# L$ L$ /= /= /= /= t& T@ T@ T@ T@ t& t& t& h+ h+ T@ T@ T@ h+ h+ h+ 5. u$ w$ u$ l. :. (. 5. (. (. l. 5. 5. u$ u$ w$ T@ t& t& t& t& t& t& T@ t& t& t& t& t& t& t& t& t& T@ T@ T@ t& t& t& T@ Z% Z% Z% Z% Z% Z% Z% t& =) =) =) =) -) -) t& t& I$ I$ ^_ ^_ Ma Ma Ma Ma h+ h+ h+ h+ h+ h+ h+ h+ I$ Z% Z% t& T@ T@ h+ h+ ,_ (* og (* og (* og (* .^ J$ .^ J$ .^ J$ .^ * :] :] :] :] :] :] :] :] }| }| :] :] O) O) m* m* I$ Z% T@ [. [. h+ t& Z% t& t& t& t& t& t& t& t& t& t& T@ T@ T@ T@ t& t& h+ h+ h+ T@ T@ t& Z% I$ F{ Z% T@ T@ t& t& h+ /. t& t& T@ T@ T@ T@ t& t& t& t& t& t& t& t& t& t& T@ T@ T@ t& t& Z% Z% Z% T@ h+ h+ h+ h+ T@ h+ h+ t& t& t& t& t& t& t& v$ v$ <] <] <] v$ v$ t& t& t& t& :] :] K> K> K> :] O) T@ t& t& t& t& T@ T@ Z% t& T@ h+ h+ T@ t& Z% =) =) =) =) -) -) t& t& t& t& ,_ ,_ (* (* (* (* J$ J$ J$ S$ #. #. [. Z% T@ T@ -) -) =) =) '' '' '' '' '' '' s% s% T@ T@ T@ Z% ^_ )5 /* /* (* dc A% !_ <] O; w$ w$ T@ T@ h+ h+ m* m* C, C, C, m* t& v$ v$ v$ v$ v$ v$ v$ w$ u$ u$ u$ u$ u$ u$ L$ U# dc pg _% T& := d) e/ qg 54 Y/ rg sg tg `2 <~ ve ug vg wg xg yg a3 %; zg Ag Bg Cg Dg Eg Fg Gg Df Hg Ig Jg Kg g5 Le Lg Mg Ng Ng Mg Mg Og Pg Qg Rg Sg Qe Tg Ug Vg Wg Xg Yg M] Zg `g h f[ .h +h @h #h 7} s< $h .2 %h r# r. 3% a' &h `f R) *h L> =h La La *5 [] !5 -) -) +% s% d# <* e, e, C- i; =) =- b& b& s% -) T@ [. h+ h+ a# a# J$ J$ J$ J$ h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. a- >= >= Z5 *5 *5 K> K> l* l* =5 =5 =] -h -h p: (* (* (* (* ,_ ,_ t& t& T@ T@ -) -) =) =) '' s% -) t& t& T@ h+ [. [. [. Z% Z% Z% t& t& T@ T@ T@ [. [. h+ h+ T@ T@ t& t& /. [. [. h+ h+ [. [. /. /. [. [. h+ T@ T@ t& t& h+ h+ h+ h+ h+ h+ h+ h+ t& t& t& t& t& t& t& t& t& t& t& t& t& t& ", "`. `. `. `. `. `. `. 8 8 8 8 8 8 8 8 F= F= `. `. `. `. | | 8@ 8@ 8@ ]# J@ J@ m$ ^# w& 6+ a+ 6+ 2 2 3 a+ 6+ 6+ 6+ 3 3 3 2 2 } 4 0 4 } } + n | } } 0 + l n n 0 0 0 0 0 0 0 0 4 0 0 0 4 4 4 0 + l n + 4 4 + E + + + + l l l i d e$ y# ;h >h r~ ,h 'h )h !h ~h {h ]h ;g ^h /h (h _h :h % ^% U% U% ,% >% ,% U% }# C C C ,+ ,+ V V ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ =+ =+ =+ =+ =+ =+ =+ =+ C. d+ P P d+ W+ U+ 9& 5c ge ge ge nf nf nf nf ge ge ge ge ge ge ge 5c 6c Q% 9& 9& 9& Q% i> k+ l& k+ i> i> i> i> k+ #% 9c he 2b he ie je ie ke ;_ ke ie ie ke he he 8c Y+ i+ i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ i+ ~+ ~+ ~+ h. h. h. h. {+ h. i+ V V i+ h. {+ {+ {+ {+ {+ {+ {+ {+ {+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {@ m@ L) [! S& l& {@ ]+ ]+ {+ {+ F. F. 5$ 5$ 5$ F. ). @. .. Z Z .. @. @. .. .. .. .. .. .. .. .. B. B. B. B. B. B. B. B. 8# !. #. B. B. #. !. S$ z) ng z) z) z) z) _& _& 6[ 6[ 6[ 6[ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% 2% 2% 2% 2% 2% /. h+ T@ h+ +. @. +. [. +. /. /. /. /. /. /. 8# !. h# h# S$ 8# 8# [. [. /. /. v+ v+ r$ r$ r$ v+ ). /. [. [. +. @. +. [. T@ T@ h+ h+ [. [. [. /. j+ j+ j+ j+ j+ j+ j+ j+ +# m* O) O) .# +# .# T@ [. 5. [. [. h+ h+ m* m* +@ l* 4! 4! 4{ 5! 5! l* C, m* m* m* m* m* m* m* O) O) O) O) O) O) O) O) [. [. [. [. [. [. [. [. t& T@ h+ h+ h+ h+ T@ t& h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ =5 =5 =5 =5 * * a# a# a# a# L$ L$ /= /= /= /= T@ h+ h+ h+ h+ T@ t& Z% h+ T@ T@ T@ T@ h+ [. /. A% O( q} A% u$ 5. 5. w$ 5. 5. 5. u$ u$ u$ u$ u$ T@ t& Z% Z% Z% Z% t& T@ t& t& t& t& t& t& t& t& t& h+ [. h+ t& t& T@ [. Z% Z% Z% t& t& T@ T@ T@ =) =) =) =) -) -) t& t& I$ I$ ^_ ^_ Ma Ma Ma Ma h+ h+ h+ h+ h+ h+ h+ h+ Z% Z% Z% t& t& t& t& q$ 5[ og og og og og og og .^ .^ .^ .^ .^ .^ .^ .^ :] :] :] :] :] :] :] :] }| }| :] :] O) O) m* m* Z% Z% t& T@ h+ T@ T@ T@ t& t& t& t& t& t& t& t& Z% t& T@ h+ h+ T@ t& Z% t& T@ T@ h+ T@ T@ Z% Z% I$ t& h+ T@ t& Z% T@ [. Z% t& T@ h+ h+ T@ t& Z% t& t& t& t& t& t& t& t& h+ h+ T@ T@ t& t& t& Z% t& T@ [. h+ t& t& T@ h+ t& t& t& t& t& t& t& v$ v$ <] <] <] v$ v$ t& t& t& t& :] :] K> K> K> :] :] t& T@ T@ T@ T@ t& t& Z% t& T@ h+ h+ T@ t& Z% =) =) =) =) -) -) t& t& t& t& ,_ ,_ (* (* (* (* K$ J$ /* J$ 8# 8# h+ t& h+ T@ -) *) r} =) '' =- '' '' '' '' s% s% T@ T@ T@ Z% oh ^_ (* /* $| Ma O( !_ <] O; u$ u$ T@ T@ h+ h+ m* m* C, C, C, m* t& v$ v$ v$ v$ v$ v$ v$ v$ v$ v$ w$ w$ u$ u$ L$ /+ U0 6 [% := ph qh rh sh th uh vh wh xh yh zh Ah Bh Ch X4 Dh Eh n_ k} Fh 2[ Gh Hh Fg Ih Jh c< Ig 0h Kh Lh Mh U3 Nh Oh q) Ng O: Ph Qh Qh Rh If Kf Mc Sh Th Uh Vh Wh Xh X} F3 Yh Zh `h i .i +i @i #i +| $h q2 $i %i & ;$ e= &h &h `f R) *h 48 =h La *5 Y5 b) [] -) -) +% s% d# <* e, e, C- i; =) =- b& b& s% -) T@ [. h+ h+ a# a# J$ J$ J$ J$ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ Z5 Z5 Z5 Z5 Y5 *5 4! 4! l* l* =5 =5 =] -h -h p: og (* (* (* ,_ ,_ t& t& h+ h+ s% -) =) '' =- @% -) t& T@ T@ T@ T@ h+ h+ Z% t& t& t& T@ T@ h+ h+ h+ h+ h+ T@ T@ t& t& t& [. [. h+ T@ T@ h+ [. [. h+ h+ h+ h+ h+ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ ", "`. `. `. `. `. `. `. 8 8 8 8 8 8 8 8 F= F= `. `. `. `. | | 8@ 8@ 8@ ]# J@ J@ m$ ^# w& 6+ a+ 6+ 2 2 3 a+ a+ 6+ 6+ 6+ 3 2 2 2 } 0 0 4 | | + E 4 4 0 0 + + l l 0 0 0 0 0 0 0 0 4 4 4 0 0 0 4 } + n n l 0 0 l E n l l l l + + + {# f ;# &i *i =i -i ;i >i ,i 'i ~h )i !i !i ~i {i ]i ^i /i (i _i Oa ]g :i % ^% U% U% ,% >% ,% U% C C C ,+ ,+ V V V }# }# }# }# }# }# }# }# =+ =+ =+ =+ =+ =+ =+ =+ C. U+ P P d+ U+ U+ 9& != ri ri ri ri nf nf nf ge ge ge ge ge ge ge 5c #% k+ i> Q% 9& Q% i> k+ k+ i> Q% Q% Q% Q% i> !% 9c he 2b he ie je ie ke -_ he ie ie ke 2b 2b 0' Z+ ~+ ~+ ~+ ~+ i+ i+ i+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ i+ ~+ ~+ ~+ h. {+ {+ {+ {+ h. i+ ,+ ,+ i+ h. {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {@ m@ [! S& C& k+ l& {+ ]+ {+ {+ F. F. 5$ 5$ 5$ F. '. @. .. Z Z .. @. +. .. .. .. .. .. .. .. .. n+ n+ n+ n+ n+ n+ n+ n+ 4. /+ s# n+ n+ s# /+ S$ z) ng ng ng z) z) z) z) _& _& 6[ 6[ 6[ 6[ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% 2% 2% 2% 2% 2% [. T@ t& T@ /. +. /. h+ /. /. /. /. /. /. /. 8# !. h# h# S$ 8# 8# [. [. h+ h+ @% @% =- =- =- @% ). /. [. [. +. @. +. [. T@ T@ T@ h+ h+ [. [. [. +# +# +# +# +# +# +# +# .# m* :] O) .# +# m* t& [. 5. [. [. /. /. +# +# .@ l* K> 4! 4{ 2{ 5! C, C, m* m* m* m* m* m* m* O) O) O) O) O) O) O) O) [. [. [. [. [. [. [. [. T@ h+ [. /. /. [. h+ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ ed ed ed ed fd fd q$ q$ a# a# L$ L$ /= /= /= /= h+ [. /. /. /. h+ t& Z% h+ T@ t& t& t& h+ /. +. T@ t& I$ Z% T@ h+ T@ Z% t& T@ T@ T@ T@ h+ h+ h+ T@ t& Z% I$ I$ Z% t& T@ t& t& t& t& t& t& t& t& t& [. +. /. T@ t& h+ /. t& t& t& T@ T@ h+ h+ h+ =) =) =) =) -) -) t& t& t& t& ,_ ,_ (* (* (* (* h+ h+ h+ h+ h+ h+ h+ h+ t& t& t& t& Z% Z% Z% )5 5[ si si si si si si si =] =] =] =] =] =] =] =] :] :] :] :] :] :] :] :] }| }| :] :] O) O) m* m* t& t& Z% Z% t& T@ h+ [. Z% Z% Z% Z% Z% Z% Z% Z% Z% t& T@ h+ h+ T@ t& Z% I$ Z% T@ h+ h+ h+ t& t& t& T@ [. h+ Z% I$ t& T@ Z% t& T@ h+ h+ T@ t& Z% t& t& t& t& t& t& t& t& h+ h+ h+ T@ T@ T@ t& t& I$ t& h+ T@ Z% I$ t& h+ t& t& t& t& t& t& t& v$ v$ <] <] <] v$ v$ t& t& t& t& :] :] K> K> K> :] :] t& T@ T@ T@ T@ t& t& Z% t& T@ h+ h+ T@ t& Z% =) =) =) =) -) -) t& t& t& t& ,_ ,_ (* (* (* (* S$ /* $| $| q$ j$ h+ T@ h+ T@ -) *) r} =) '' =- #& #& #& #& b) b) m* m* m* :] ti ui p: .^ p: $| v$ O; [* [* u$ w$ Z% I$ h+ h+ m* m* C, C, C, m* t& v$ v$ v$ v$ v$ v$ v$ A% A% A% v$ v$ w$ w$ &' U# U0 vi _% b: wi xi O2 yi zi Ai Bi Ci 7 Di Ei Fi Gi Hi Ii Ii T[ k} 7~ j< }i C4 Ji Ki Jh Li $[ Mi Ni b5 Oi Pi Qi Ri r4 Mg P: 3g Si #[ }} Ti Ld Ui Sh Qe Th Vi Wi Xi Yi Zi `i j .j :h 4< +j @j #j $j %j .2 $i v5 O$ &j e= &h *j &h `f `f =j -j =h *5 Y5 P* $& b) s% -) +% s% d# <* e, e, C- i; =) =- b& b& s% -) T@ [. h+ h+ a# a# J$ J$ J$ J$ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ T@ T@ g g g Z5 Y5 Y5 C, C, l* l* =5 =5 =] -h -h p: og (* (* (* ,_ ,_ t& t& /. [. @% s% '' =- b& v+ s% T@ T@ T@ T@ t& t& t& t& t& T@ T@ T@ h+ h+ h+ h+ h+ T@ T@ t& t& t& t& h+ h+ T@ t& t& T@ h+ h+ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ ", "`. `. `. `. `. `. `. 8 8 8 8 8 8 8 8 `. `. `. `. `. `. | | 8@ 8@ 8@ ]# ]# ]# m$ ^# 2 6+ a+ 6+ 2 2 3 a+ a+ a+ 6+ 6+ 3 2 2 2 } 0 + 4 1 | + D 0 0 0 + + + + + 0 0 0 0 0 0 0 0 4 4 4 0 + + 4 } + n n l 0 0 l E E E n l l + 0 0 8 d w5 ;j >j >h ,j 'j )j !j ~j {j ]j !i !i ~i ^j /j (j _j :j >e % ,% ,% U% U% C C R$ R$ R$ C ^% ^% ^% ^% ^% ^% ^% ^% >% ^% U% U% ,% >% ,% U% U% U% ,+ ,+ ,+ V V V }# }# }# }# }# }# J# }# t =+ =+ =+ =+ =+ =+ =+ $. U+ P v =+ U+ U+ Q% d= >_ >_ oj ri ri nf nf ge ge ge ge ge ge ge 5c M$ {@ k+ Q% Q% Q% i> k+ Q% Q% 9& U% U% 9& Q% 6c 4c oj >_ oj ge fe ge ri S_ oj ge ge ri >_ >_ != @ h. h. ~+ i+ i+ V V ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ i+ ~+ ~+ h. h. {+ {+ ]+ ]+ h. i+ ,+ ,+ i+ h. ]+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {@ m@ [! C& u& i> k+ {+ ]+ {+ {+ {+ F. F. F. F. F. +. @. .. ` ` .. @. +. .. .. .. .. .. .. .. .. B. n+ B. n+ B. n+ B. n+ 8# /+ #. n+ B. s# !. S$ g# z) z) z) _& _& _& _& _& 6[ 6[ 6[ 6[ 6[ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% 2% 2% 2% 2% 2% h+ t& Z% t& [. /. [. T@ /. /. +# +# +# j+ j+ U@ h# h# h# S$ 8# 8# [. [. h+ h+ @% @% =- =- =- =- ). /. +% [. +. @. +. [. T@ T@ T@ h+ h+ a# [. [. .# .# l* .# .# .# .# .# .# O) :] O) .# +# m* t& h+ [. [. /. +. +. ]+ ]+ .@ l* K> 4! J- +@ 5! C, m* m* m* m* m* m* m* m* O) O) O) O) O) O) O) O) [. [. [. [. [. [. [. [. T@ h+ /. +. +. /. h+ T@ u$ u$ u$ u$ u$ u$ u$ u$ h+ h+ h+ h+ h+ h+ h+ h+ 5[ 5[ ac 5[ 5[ 5[ ,_ ,_ a# a# L$ L$ L$ /= L$ L$ 5. l. +. +. +. [. T@ t& h+ T@ t& t& t& h+ +# +. .. +. [. [. /. /. h+ t& Z% Z% Z% t& T@ T@ h+ h+ T@ v$ Z% F{ F{ Z% t& T@ t& t& t& t& t& t& :] t& T@ /. @. +. h+ t& [. +. t& t& T@ T@ h+ [. [. /. -) -) !5 -) -) t& t& t& h+ h+ h+ a# a# L$ a# L$ h+ u$ h+ h+ h+ h+ h+ h+ T@ T@ t& t& Z% I$ >5 pj 5[ og ac og ac og ac og =5 .^ =5 .^ =5 .^ =5 * :] :] :] :] :] :] :] :] }| }| :] :] O) O) m* h+ T@ v$ Z% O( Z% w$ [. l. Z% A% Z% A% Z% A% Z% Z% Z% ,_ T@ a# h+ q$ t& )5 F{ ^_ t& a# [. a# T@ T@ T@ h+ [. h+ Z% I$ Z% t& Z% t& T@ h+ h+ T@ t& Z% t& t& t& t& t& t& t& t& [. [. [. h+ h+ T@ T@ T@ F{ t& h+ T@ I$ F{ Z% T@ t& t& t& t& t& t& t& v$ <] j; <] <] <] v$ v$ t& t& t& :] :] K> K> K> :] :] t& T@ T@ T@ T@ t& t& Z% t& T@ h+ h+ T@ t& Z% -) -) =) -) -) -) t& t& t& t& ,_ ,_ ,_ (* ,_ (* S$ /* Ma bc )5 q$ h+ T@ h+ T@ -) *) r} =) '' =- b) b) b) b) b) m* m* m* .# O) :] fd .* .* * ,_ e# e, /$ /$ e# '_ qj x8 h+ h+ m* m* m* m* C, * ,_ E) ,_ E) ,_ E) t& v$ F{ O( I$ A% t& v$ T@ w$ <] [| I- D) c) rj sj tj uj vj wj xj yj zj Aj Bj Cj Dj Ej Fj T[ }: [7 )8 j< Gj Hj Ij (: Hj Jj Kj '3 Lj Mj Nj tb Oj w6 Pj Qj d5 >> Rj -[ -[ Sj Tj Uj Vj Wj u7 Xj Qd Yj Zj `j k .k +k @k #k $k %k &k *k =k -k ;k (+ :$ >k =- '' =) '' #& #& L> -j !5 [] $& 9# 9# +% s% -) +% s% -) <* /$ /$ e# d# -) @% b& +% s% -) T@ [. h+ h+ a# a# a# J$ a# a# h+ h+ h+ h+ h+ h+ h+ h+ t& t& t& t& t& t& t& t& !5 L> g *, Y5 $& l* +# l* .# C, * =5 fd ed fd ,_ (* ,_ ,_ ,_ ,_ t& t& +. /. @% s% s% @% r$ '. h+ h+ h+ T@ t& Z% Z% Z% T@ T@ T@ h+ h+ [. [. [. h+ h+ T@ T@ t& t& t& Z% T@ T@ t& Z% Z% t& T@ T@ t& t& T@ T@ h+ [. [. /. h+ h+ h+ h+ h+ h+ h+ h+ [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ ", "~# ~# ~# ~# ~# ~# ~# #$ {# {# ~# ~# G@ G@ [@ 8 } } } } } } } } } 4 4 0 0 I+ + + } 1 1 } 0 4 } 1 } 0 0 4 4 + n 0 0 0 0 0 0 0 0 $ | + n E l 4 | 0 0 0 + + + l l | } } 4 0 + + l + + + + + + + + l l + + + 0 0 j B v8 q6 ,k 'k *i $a )k !k ~k {k ]k ^k /k /k ^k ;g ;g =g ]h (k _k :k T% S% R% i> k+ k+ i> V ,+ ,+ ,+ R# R# R# R# .% R# V C D }# ,+ V C }# C i+ i+ C C i+ i+ f+ 3c ri nf nf ge fe fe ee ri ri ri ri ri ri ri 3c ,' i> i> k+ k+ k+ l& l& 9& 9& 9& 9& Q% i> l& @ ~= wk wk wk wk wk wk wk xk xk xk xk xk xk xk yk U Q% Q% Q% Q% Q% Q% Q% l& l& l& l& l& l& l& l& l& l& l& k+ i> i> Q% Q% 9& 9& Q% i> k+ {@ {@ m@ {+ {+ {+ {+ {+ {+ {+ {+ h. h. h. h. h. h. h. h. m@ m@ {@ l& l& k+ i> i> k+ k+ k+ k+ k+ k+ k+ k+ {@ {@ {@ {@ {@ {@ {@ {@ m@ m@ m@ {+ {+ {+ {+ {+ j$ !. #. #. !. 8# #. $. $. $. B. B. B. #. #. #. 8# 8# 2% 8# 2% !. U@ !. l& #. U@ #. l& C. {@ !. S$ h# i# ^. ^. i# h# S$ S$ 8# 8# !. #. B. B. B. .* .* .* .* .* .* .* .* * U@ {@ m@ .* * 2% m@ 8# 4. 8# j$ j$ a# * * 2% 2% Y_ Y_ Y_ Y_ Y_ Y_ [! h# K$ S$ !. !. /. h+ /. [. @% s% '' b& r$ t+ b& +% b& +% +% +% [. [. [. +. #. !. j$ K$ 8# m@ C, C, G{ C, C, C, C, C, m* m* h+ h+ h+ h+ h+ h+ [. .# .# .# .# .# .# .# .# .# .# .# .# .# l* .# .# [. [. [. [. [. [. [. +. [. h+ +. Z Z /. t& I$ T@ /. +. /. [. [. /. h+ T@ t& t& t& h+ /. (. (& I- {; {; [* O; O; O; w$ v$ O( q} F{ I$ t& T@ a# J$ .^ J$ J$ J$ J$ J$ (* /* K$ S$ S$ n& /* E) 5. (& 5. 5. 5. 5. [. [. Z% t& O) m* m* O) K> }| t& t& t& t& t& t& t& t& [. [. h+ h+ T@ T@ T@ T@ v$ <] v$ v$ v$ v$ t& t& T@ h+ O) }| ,5 ,5 34 O) t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% 5[ 5[ ed fd * .# [. /. t& t& v$ d# d# i; d# i; v$ V5 E) E) E) E) ,_ ,_ )5 )5 ui 5[ fd * =5 * ui )5 }| )5 }| )5 }| )5 m* a# m* a# m* a# m* h+ T@ t& Z% F{ F{ Z% t& T@ F{ I$ I$ Z% t& t& T@ T@ w$ <] A% / q} !_ v$ O; v$ <] v$ <] A% !_ O( O( a# J$ a# J$ a# J$ a# J$ )5 $| )5 (* q$ J$ a# a# t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% t& t& t& T@ Z% I$ I$ t& T@ t& I$ /. [. T@ t& t& T@ [. l. y. c/ j; j; 1{ O; !_ q} w$ t& }| '5 '5 }| K> O) m* T@ t& Z% I$ I$ I$ I$ t& t& t& t& t& t& t& t& Z% t& s% h+ h+ T@ t& Z% h+ t& Z% Z% T@ a# T@ )5 /* /* (* (* )5 ^_ I$ I$ h+ h+ @% @% =- =- =- @% t& ,_ ,_ ,_ ,_ t& t& t& Z% Z% Z% *) *) *) *) *) *j d- *j *j =) =) =) -) @% h+ T@ q$ ,_ ,_ ui $| og (* og (* og (* 5[ ,_ ui a# +# h+ }| F{ d7 <* zk Ak Bk Ck Dk Ek Fk Gk Hk Ik Jk Kk Lk Mk Nk yg Y4 Ok Pk Pk Pg j_ Qk Rk Sk Tk Uk Vk Wk Xk {1 Yk Zk `k Oj p7 p7 l .l +l @l #l Yk P1 $l %l &l *l =l -l ;l >l ,l J8 'l S= )l !l 9| ~l {l ]l ^l /l (l _l %- O@ S =. +% s% '. +% s% s% @% +% s% *) W@ e# <* d# d# s% @% v+ +% s% -) [] $& $& b) !5 *) t& s% h+ h+ T@ t& Z% t& T@ [. /. /. j$ T@ t& I$ Z% Z% I$ F{ I$ T@ /. t& t& t& t& t& t& t& t& '. v+ $& @% [] -) d7 *) b) @% [] T@ :] t& }| Z% T@ a# h+ [. [. /. /. +. [. [. [. [. [. [. +% [. +. +. +. +. +. +. +. +. t& )_ F{ /. .. /. h+ [. [. [. [. h+ T@ T@ t& t& [. T@ t& T@ [. /. h+ t& @. T@ F{ )_ Z% h+ h+ T@ I$ t& T@ [. [. T@ t& I$ [. [. [. [. [. [. [. [. h+ h+ h+ h+ h+ h+ ", "~# ~# ~# ~# ~# ~# ~# {# {# {# ~# ~# G@ G@ G@ } } } } } } } } } } 4 4 0 0 + + + } 1 1 } 0 4 } | 4 + 0 4 } 0 l 0 0 0 0 0 0 0 0 | 4 + n E n + 0 0 0 0 + + + l l 0 0 0 0 0 4 4 4 + + + + + + + + l l + + + 0 0 j :l #| T% T% S% R% u& i> Q% ,+ C ,+ ,+ R# R# .% .% .% R# ^& C D }# ,+ V ,+ }# C i+ i+ C C i+ i+ f+ 5c ge ge ge nf nf nf nf ri ri ri ri ri ri ri 3c ,' i> i> k+ k+ k+ l& l& k+ i> Q% Q% 9& Q% i> Y+ ~= Ul Ul Ul Ul Ul Ul Ul Vl Vl Vl Vl Vl Vl Vl Wl Y+ i> i> i> i> i> i> i> l& l& l& l& l& l& l& l& l& l& l& k+ k+ i> i> i> Q% Q% i> k+ k+ l& {@ {@ {+ {+ {+ {+ {+ {+ {+ {+ h. h. h. h. h. h. h. h. {@ {@ {@ l& l& k+ k+ k+ k+ k+ k+ k+ k+ k+ k+ k+ {@ {@ {@ {@ {@ {@ {@ {@ l& l& l& {@ {@ {@ {@ {@ 8# #. B. B. !. !. B. C. $. $. B. B. B. #. #. #. U@ U@ U@ U@ U@ U@ U@ 2% l& m@ 2% U@ {@ l& m@ U@ 8# !. #. B. B. #. !. 8# !. !. !. !. #. #. #. #. .* .* .* .* .* .* .* .* * U@ {@ m@ .* * 2% #. !. /+ 8# 8# j$ j$ .* .* Y_ Y_ Y_ Y_ ~_ ~_ ~_ Y_ L) S$ J$ K$ 8# !. [. T@ +. /. +% @% '' =- b& r$ b& b& b& b& +% +% [. [. h+ /. !. !. K$ J$ K$ 6[ C, G{ G{ G{ C, C, C, C, .# .# [. [. h+ h+ u$ u$ m* m* m* m* m* m* m* m* .# .# .# .# .# .# .# .# [. [. [. [. [. [. [. [. /. h+ h+ /. @. @. [. t& I$ T@ /. +. /. [. [. /. [. h+ T@ t& t& h+ [. l. I- e) c/ c/ {; 1{ O; O; [* O; A% O( I$ Z% T@ a# a# J$ J$ J$ J$ J$ J$ J$ /* /* J$ J$ J$ J$ /* M> w$ O; O; O; w$ w$ T@ T@ Z% t& O) m* C, 4! K> }| :] t& t& t& t& t& t& t& [. [. h+ h+ T@ T@ T@ v$ v$ <] <] <] v$ v$ t& t& T@ h+ O) :] Xl Xl K> m* :] t& t& t& t& t& t& t& T@ T@ T@ T@ T@ T@ T@ q$ ac si -h -h fd fd h+ h+ t& t& d# d# `5 `5 `5 i; <] V5 V5 V5 E) E) ,_ ,_ ,_ ,_ 5[ 5[ ed ed ed fd O) T@ T@ T@ T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ T@ t& Z% I$ I$ Z% t& T@ t& t& t& Z% Z% Z% Z% A% w$ <] !_ [| [| !_ <] O; [* [* O; O; <] <] <] !_ a# J$ J$ J$ J$ J$ J$ J$ (* (* (* (* /* /* /* q$ t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% T@ Z% I$ I$ t& T@ t& I$ [. h+ T@ t& t& T@ h+ 5. I- d/ c' B* 1{ {; <] [| w$ v$ Z% >5 >5 }| K> O) I$ Z% T@ h+ T@ t& I$ )_ t& t& t& t& t& t& t& t& Z% t& T@ h+ h+ T@ t& Z% h+ t& Z% Z% T@ h+ T@ )5 q$ (* (* (* )5 ^_ I$ I$ h+ h+ @% @% =- =- =- @% ,_ (* (* (* ,_ ,_ t& t& Z% Z% *) *) r} r} r} r} Yl Yl Yl Yl &h &h '' '' @% @% T@ q$ ,_ ,_ $| $| Zl Zl Zl Zl og og og og ui fd m* :] '5 '5 d7 _* `l m .m +m @m #m $m %m &m *m =m -m ;m >m ,m 'm )m B6 >[ $9 56 !m $[ ~m {m ]m 1g ^m ^m /m (m 16 _m Oh w6 p7 :m j8 O1 ,3 2 $9 #9 Bm Tj :g Cm ml ml Dm nl Em Fm Q3 Gm zc Hm Im Jm Km Lm Mm Nm v9 Om Pm Qm Al Rm Sm Tm Um Vm Wm Xm Ym B& L% B# B# :{ 8& 2c Zm Zm `m n .n +n Tl @n F7 T% T% T% T% T% T% T% h> '& T% ~& h> h> '& ~& T% T% S% R% Q% 9& C C ,+ ,+ R# R# .% .% .% R# ^& C }# C V V ,+ }# C i+ i+ C C i+ i+ f+ <| fe fe ge nf ri oj oj ri ri ri ri ri ri ri 3c ,' i> i> k+ k+ k+ l& l& {@ l& i> Q% 9& 9& 9& >+ ~= Ul Ul Ul Ul Ul Ul Ul Ul Ul Ul Ul Ul Ul Ul ~= Z+ k+ k+ k+ k+ k+ k+ k+ l& l& l& l& l& l& l& l& l& l& l& l& k+ k+ k+ i> k+ k+ k+ k+ k+ l& l& l& ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ h. h. h. h. h. h. h. h. k+ k+ k+ l& l& {@ {@ {@ k+ k+ k+ k+ k+ k+ k+ k+ {@ {@ {@ {@ {@ {@ {@ {@ i> i> k+ l& l& {@ m@ m@ !. B. $. $. B. #. $. W+ $. $. B. B. B. #. #. #. l& l& {@ m@ m@ U@ 2% 2% m@ U@ .* 2% m@ {@ U@ .* 8# !. #. B. B. #. !. 8# #. #. #. #. !. !. !. !. 2% 2% 2% 2% 2% 2% 2% 2% .* U@ m@ U@ .* .* 2% #. #. s# !. !. !. 8# 2% 2% Y_ Y_ Y_ Y_ ~_ ~_ ~_ Y_ 6[ K$ /* J$ j$ 8# h+ t& @. +. v+ @% =- '' =- =- b& b& b& b& +% +% [. [. T@ [. 8# j$ /* /* J$ o^ J- 5! 5! 5! J- J- J- J- j+ j+ /. /. [. [. u$ u$ O) O) O) O) O) O) O) O) m* m* m* m* m* m* m* m* h+ h+ h+ h+ h+ h+ h+ h+ h+ T@ T@ h+ /. /. h+ t& Z% h+ /. /. [. h+ h+ /. /. [. h+ T@ T@ T@ h+ u$ I- e) {; {; {; 1{ O; O; u$ w$ w$ v$ t& T@ T@ a# q$ /* /* /* /* /* /* /* J$ J$ /* (* (* /* J$ G- v$ <] <] <] v$ v$ t& t& Z% t& O) m* C, 4! K> }| :] t& t& t& t& t& t& t& h+ h+ h+ T@ T@ t& t& v$ v$ <] <] <] v$ v$ t& t& t& T@ m* O) b, b, C, +# :] t& t& t& t& t& t& t& h+ h+ h+ h+ h+ h+ h+ a# ed -h si si 5[ 5[ Z% Z% t& t& d# d# `5 `5 `5 i; <] V5 V5 V5 E) E) ,_ ,_ q$ q$ fd fd ac ac ac 5[ m* h+ h+ h+ h+ h+ h+ h+ T@ T@ T@ T@ T@ T@ T@ T@ t& t& Z% I$ I$ Z% t& t& h+ T@ T@ t& Z% I$ F{ q} v$ <] !_ [| [| !_ <] <] (& [* [* [* O; O; <] <] q$ q$ q$ q$ q$ q$ q$ q$ q$ q$ q$ q$ ,_ ,_ ,_ ,_ t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% T@ Z% I$ I$ t& T@ t& I$ [. h+ t& Z% Z% t& h+ 5. 1{ B* gd ./ {; I- O; <] v$ v$ Z% I$ >5 }| :] :] x8 F{ t& [. [. T@ I$ )_ t& t& t& t& t& t& t& t& Z% t& T@ h+ h+ T@ t& Z% T@ t& I$ Z% T@ h+ t& ^_ ,_ (* (* $| )5 )5 I$ I$ T@ T@ s% s% '' '' '' s% ,_ (* (* (* ,_ ,_ t& t& Z% Z% *) *) r} r} r} r} #n #n a' a' a' a' =- =- @% @% T@ T@ ,_ ,_ )5 $| $n $n (* (* (* (* ,_ ,_ Z% t& t& I$ %n qj -) :$ &n *n =n -n ;n >n ,n 'n )n !n ~n {n y7 yf ]n ^n /n $9 _1 Q9 S: Sk (n _n :n 3n ub 5n 6n 7n -c g2 8n 9n E> 76 0n an bn 6e cn dn *} en fn gn -: hn in jn kn ln 7 o . .. /. T@ Z% T@ t& Z% t& [. +. /. u$ /$ C- N; N; <* <* @% +% +% s% !5 [] P* P* Y5 !5 }| t& T@ h+ h+ T@ t& Z% Z% t& t& T@ T@ t& t& Z% T@ h+ [. T@ Z% I$ t& [. t& t& t& t& t& t& t& t& +% +% @% @% s% -) *) *) s% s% s% s% -) -) -) -) T@ h+ h+ h+ [. [. [. [. h+ h+ h+ h+ h+ h+ h+ h+ t& t& t& t& t& t& t& t& h+ F{ F{ [. @. [. h+ [. h+ h+ [. [. [. [. /. /. h+ T@ Z% t& h+ [. T@ Z% h+ t& Z% t& T@ h+ T@ Z% [. [. h+ T@ T@ h+ [. [. h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ h+ ", "~# ~# ~# ~# ~# ~# ~# ~# ~# ~# ~# ~# ~# ~# ~# } } } } } } } } } } 4 4 0 0 + + + } 1 1 } 0 4 } 0 + l + } | } 4 0 0 0 0 0 0 0 0 l + 0 0 0 + n D 0 0 0 + + + l l l l + + 0 0 4 4 + + + + + + + + l l + + + 0 0 0 9 d mn #| nn jm on pn qn +i rn =d sn tn vm 0l un um vn 0l wn vm ]j xn yn >} 22 zn An Bn &7 I0 89 Cn Dn En Cm @, Fn Fn Fn Dm :m Gn Pg Hn In Jn Kn Ln Mn Nn On s~ (i Pn Qn Rn |- Sn Tn Un Vn Wn Xn f; Yn Zn l~ L% A& t$ 8& 8& )& `m 1b `n `n `n T% T% T% T% T% T% T% T% '& ~& ~& ~& '& '& '& ~& T% T% T% T% U% U% C C ,+ ,+ R# R# .% .% .% R# ^& ,+ }# C V i+ ,+ C C i+ i+ C C i+ i+ f+ 5c ge ge nf ri ri ri oj ri ri ri ri ri ri ri 3c ,' i> i> k+ k+ k+ l& l& l& k+ i> Q% 9& 9& Q% U ~= Ul Ul Ul Ul Ul Ul Ul o o o o o o o V_ `+ l& l& l& l& l& l& l& l& l& l& l& l& l& l& l& l& l& l& l& l& l& k+ k+ l& l& l& l& l& k+ k+ k+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ h. h. h. h. h. h. h. h. Q% i> i> k+ {@ m@ m@ U@ l& l& l& l& l& l& l& l& {@ {@ {@ {@ {@ {@ {@ {@ Q% Q% i> k+ l& {@ m@ U@ !. B. C. C. B. B. C. U+ $. $. B. B. B. #. #. #. i> k+ k+ {@ m@ U@ 2% 2% m@ 2% * .* U@ m@ U@ .* !. !. #. #. #. #. !. !. B. B. B. #. !. 8# 8# 8# 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% U@ U@ 2% 2% 2% !. B. n+ #. #. !. !. U@ 2% Y_ Y_ Y_ Y_ ~_ ~_ ~_ Y_ o^ J$ /* /* a# j$ T@ Z% @. @. '. +% =- '' '' =) b& b& b& b& +% +% [. [. t& h+ j$ j$ /* (* /* -^ J- 5! 5! 5! J- J- J- J- ]+ ]+ @. +. /. [. u$ u$ :] :] :] :] :] :] :] :] m* m* m* m* m* m* m* m* h+ h+ h+ h+ h+ h+ h+ h+ T@ t& t& T@ T@ T@ T@ t& t& h+ /. [. T@ T@ h+ [. /. [. [. h+ T@ T@ t& v$ I- e) {; {; {; 1{ O; O; u$ u$ u$ w$ T@ h+ h+ h+ q$ /* /* /* /* /* /* /* K$ J$ (* $| $| (* J$ U# v$ <] <] <] v$ v$ t& t& t& t& O) O) 4! 4! K> :] :] t& t& t& t& t& t& t& h+ h+ T@ T@ T@ t& t& v$ v$ <] <] <] v$ v$ t& t& Z% T@ m* m* 4! 4! l* j+ :] t& t& t& t& t& t& t& T@ T@ T@ T@ T@ T@ T@ q$ ed -h si si ui ti I$ F{ t& t& d# d# `5 `5 `5 i; <] V5 V5 V5 E) E) ,_ ,_ a# a# * fd ac .o .o ui O) T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ t& Z% Z% Z% Z% Z% Z% t& T@ t& t& t& Z% I$ I$ I$ v$ !_ !_ !_ !_ !_ !_ <] O; O; O; O; <] <] !_ A% T@ q$ T@ q$ T@ q$ T@ q$ h+ a# h+ q$ t& )5 Z% Z% t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& t& t& t& Z% Z% Z% Z% I$ T@ Z% I$ I$ t& T@ t& I$ [. h+ t& Z% Z% t& h+ 5. j; c' gd ./ {; I- [* O; v$ A% Z% Z% }| }| }| :] x8 F{ Z% T@ h+ T@ t& Z% t& t& t& t& t& t& t& t& t& t& T@ T@ T@ T@ t& t& T@ Z% I$ Z% t& T@ t& ^_ ,_ (* $| $| )5 )5 Z% Z% T@ T@ s% s% '' '' '' s% ,_ (* (* (* ,_ ,_ t& t& Z% Z% *) *) r} r} r} r} a' #n a' a' a' a' =- =- @% @% T@ T@ ,_ ,_ )5 )5 (* $n (* (* (* (* ,_ ,_ T@ t& Z% I$ qj *) @% b# +o @o #o -n $o %o &o *o =o -o ;o >o ,o 'o )o Gi )8 ={ !o ~o :: {o ]o (: O1 ^e x' 4n x6 3n s4 2 M^ M^ ro so y6 y6 j8 to nl uo :0 vo wo xo Ne yo zo Ao Bo Co Do Eo Fo Go Ho )l Io Jo Ko Lo Mo m, No Oo Po w] <% /% N+ 1( z Q Q Q ~& ~& ~& ~& T% U% U% U% U% U% U% U% U% ^% ^% ,% ^% ^% U% ^% ^% T% T% T% T% U% U% C C ,+ ,+ R# R# .% .% .% R# &$ ,+ C ,+ V i+ V C C i+ i+ C C i+ i+ f+ != oj oj ri nf nf nf ge ri ri ri ri ri ri ri 3c ,' i> i> k+ k+ k+ l& l& Q% Q% 9& 9& Q% i> k+ `+ ~= wk wk wk wk wk wk wk U_ U_ U_ U_ U_ U_ U_ V_ `+ l& l& l& l& l& l& l& l& l& l& l& l& l& l& l& l& l& l& l& l& l& {@ {@ {@ {@ {@ l& l& l& l& l& ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ h. h. h. h. h. h. h. h. Q% Q% i> k+ {@ m@ U@ U@ l& l& l& l& l& l& l& l& {@ {@ {@ {@ {@ {@ {@ {@ Q% i> i> l& {@ m@ U@ U@ !. B. C. C. B. B. C. U+ $. $. B. B. B. #. #. #. i> k+ k+ {@ m@ U@ 2% 2% m@ 2% * .* U@ m@ U@ .* #. #. !. !. !. !. #. #. B. B. B. #. !. 8# 8# 8# 2% 2% 2% 2% 2% 2% 2% 2% U@ 2% 2% 2% U@ U@ 2% 8# B. n+ #. #. !. !. U@ 2% Y_ Y_ Y_ Y_ ~_ ~_ ~_ Y_ o^ J$ /* /* a# j$ T@ Z% @. +. '. v+ b& '' =) =) b& b& b& b& +% +% [. [. t& h+ j$ j$ /* (* /* -^ J- 5! 5! 5! J- J- J- J- ]+ ]+ +. +. /. [. 5. 5. :] :] :] :] :] :] :] :] O) O) O) O) O) O) O) O) T@ T@ T@ T@ T@ T@ T@ T@ t& t& T@ t& t& t& t& T@ T@ h+ [. h+ t& Z% T@ [. [. [. [. h+ h+ T@ t& v$ (& I- {; {; [* O; w$ w$ w$ u$ h+ h+ m* m* m* O) ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ a# q$ )5 ^_ ^_ )5 q$ L$ w$ O; O; O; w$ w$ T@ T@ T@ T@ :] :] K> K> 4! O) :] t& t& t& t& t& t& t& T@ T@ T@ t& t& t& Z% A% v$ <] <] <] v$ v$ t& t& I$ t& .# .# C, 4! l* j+ :] t& t& t& t& t& t& t& t& t& t& t& t& t& t& ,_ ed -h si si ui ti I$ F{ t& t& d# d# `5 `5 `5 i; <] V5 V5 V5 E) E) ,_ ,_ a# a# * fd ac .o .o ui :] t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& Z% Z% Z% t& t& Z% Z% Z% I$ I$ I$ Z% t& t& t& T@ A% A% A% v$ v$ A% A% A% A% A% A% O( O( O( q} q} t& t& -) t& -) t& -) t& @% h+ @% T@ -) Z% *) Z% t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& T@ T@ t& t& Z% I$ I$ I$ T@ Z% I$ I$ t& T@ t& I$ h+ T@ Z% I$ I$ Z% T@ u$ <] ./ gd ./ [* (& [* O; A% A% Z% t& t& Z% }| }| Z% Z% F{ F{ I$ Z% h+ [. t& t& t& t& t& t& t& t& T@ T@ t& t& t& t& T@ T@ t& Z% F{ I$ t& T@ Z% ^_ )5 $| $| $| )5 )5 t& t& t& t& -) -) =) =) =) -) ,_ (* (* (* ,_ ,_ t& t& Z% Z% *) *) r} r} r} r} a' a' a' a' =- =- =- =- @% @% T@ T@ t& t& )5 )5 (* (* ,_ ,_ ,_ ,_ t& t& +% s% -) *) =) '' =- `% Qo Ro So To Uo Vo Wo Xo Yo Zo `o p .p +p @p J0 #p Li $p '! %p &p *p =p -p ;p >p /m ,p 'p )p !p *! x' f2 _m :m x6 3n ub A0 _m .l 3n *l ,3 ,3 ra 2) ~p Bh {p '6 ]p ^p U< /p (p _p :p

: bp cp C~ dp D/ ep fp gp hp 4n ol nl Dm ip jp kp lp Ne mp np op pp qp rp sp g) tp (i up vp wp `= Pm xp yp zp {p Ap Bp Y> *^ n# _% c% {& N+ N+ N+ ~@ ~@ ~@ ~& U% U% U% U% U% U% U% U% 9& ^% ,% ^% U% 9& U% ,% R% S% T% T% U% U% ,+ V ,+ ,+ R# R# .% .% .% R# &$ V C ,+ i+ ~+ V C C i+ i+ C C i+ i+ f+ d= >_ >_ oj ri nf ge ge ri ri ri ri ri ri ri 3c ,' i> i> k+ k+ k+ l& l& 9& 9& 9& 9& Q% i> l& T$ != wk wk wk wk wk wk wk wk wk wk wk wk wk wk != !% k+ k+ k+ k+ k+ k+ k+ l& l& l& l& l& l& l& l& l& l& l& l& {@ {@ {@ m@ l& l& l& {@ {@ {@ {@ {@ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ h. h. h. h. h. h. h. h. Q% i> i> k+ {@ m@ m@ U@ {@ {@ {@ {@ {@ {@ {@ {@ {@ {@ {@ {@ {@ {@ {@ {@ k+ l& l& {@ m@ U@ U@ U@ !. B. $. $. B. #. $. W+ $. $. B. B. B. #. #. #. l& l& {@ m@ m@ U@ 2% 2% m@ U@ .* 2% m@ {@ U@ .* B. #. !. 8# 8# !. #. B. #. #. #. #. !. !. !. !. U@ U@ U@ U@ U@ U@ U@ U@ m@ 2% .* .* U@ m@ U@ j$ #. s# !. !. !. 8# 2% 2% Y_ Y_ Y_ Y_ ~_ ~_ ~_ Y_ 6[ K$ /* J$ j$ 8# h+ t& /. /. '. v+ r$ =- '' =) b& b& b& b& +% +% [. [. T@ [. 8# j$ /* /* J$ o^ J- 5! 5! 5! J- J- J- J- .# .# [. [. /. /. l. l. O) O) O) O) O) O) O) O) O) O) O) O) O) O) O) O) T@ T@ T@ T@ T@ T@ T@ T@ t& T@ h+ t& Z% Z% T@ [. h+ [. [. T@ Z% I$ t& [. T@ h+ [. [. [. h+ T@ v$ (& I- {; {; [* O; w$ w$ v$ w$ T@ h+ m* O) O) :] ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ q$ ,_ )5 )5 )5 )5 ,_ &' w$ O; O; O; w$ w$ T@ T@ h+ T@ :] }| b, K> 4! m* :] t& t& t& t& t& t& t& T@ T@ T@ t& t& Z% Z% A% v$ <] <] <] v$ v$ t& t& I$ t& .# .# 4! K> 4! m* :] t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% )5 ed -h si si 5[ 5[ Z% Z% t& t& d# d# `5 `5 `5 i; <] V5 V5 V5 E) E) ,_ ,_ q$ q$ fd fd ac ac ac 5[ }| Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& I$ Z% t& t& t& t& Z% I$ F{ F{ I$ Z% t& T@ T@ h+ O( A% v$ v$ v$ v$ A% O( O( O( O( q} q} X[ X[ X[ -) -) -) -) -) -) -) -) s% s% s% s% -) -) -) -) t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& T@ T@ t& t& Z% I$ F{ F{ T@ Z% I$ I$ t& T@ t& I$ h+ T@ Z% I$ I$ Z% T@ u$ O; j; gd ./ [* (& O; <] O( A% t& t& t& t& Z% I$ h+ t& F{ x8 x8 I$ h+ /. t& t& t& t& t& t& t& t& h+ T@ t& Z% Z% t& T@ h+ t& I$ F{ I$ t& t& Z% oh ^_ Ma $| $| )5 ,_ t& t& t& t& -) -) =) =) =) -) ,_ (* (* (* ,_ ,_ t& t& Z% Z% *) *) r} r} r} r} *j *j *j *j =) =) =) =) @% @% T@ T@ t& t& Z% )5 ,_ ,_ ,_ ,_ ,_ t& t& t& +% s% -) =) '' '' =) Cp Dp Ep Fp Gp Hp Ip Jp Kp Lp Mp Np Op Pp _a S1 Qp Rp Sp Sp Tp Up Vp Wp Xp R8 46 /m Yp Zp ,p `p 8n #, x' /e f2 .l 9> O1 A0 /e O1 O1 f2 P3 _m Jc q) Kd q .q B_ 2~ +q @q #q $q %q &q *q =q -q ;q >q ,q u Z /. h+ h+ T@ Z% Z +. [. h+ h+ T@ I$ X[ <* N; C- e, /$ e# s% s% +% s% !5 [] P* P* Y5 !5 m* T@ t& Z% Z% t& T@ h+ T@ t& t& Z% Z% t& t& T@ Z% h+ /. [. T@ Z% t& T@ t& t& t& t& t& t& t& t& -) -) -) -) -) -) -) -) -) -) -) -) s% s% s% s% h+ h+ h+ T@ T@ T@ t& t& T@ T@ T@ T@ T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ @. t& I$ T@ /. T@ T@ [. T@ T@ T@ T@ h+ h+ h+ h+ h+ T@ Z% t& h+ [. T@ Z% Z% T@ h+ T@ t& Z% t& h+ [. [. h+ T@ T@ h+ [. [. T@ T@ T@ T@ T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ ", "~# ~# ~# ~# ~# ~# ~# G@ G@ G@ ~# ~# {# {# {# } } } } } } } } } } 4 4 0 0 + + I+ ]# H@ H@ ]# J+ 8@ ]# ^# 8@ I+ J+ 8@ ]# J+ m 0 0 0 0 0 0 0 0 0 0 0 0 0 + l l 0 0 0 + + + l l + + l l l l l l + + + + + + + + l l + + + 0 0 0 a+ @+ h &+ O@ v8 'q )q !q ~q nm {q W< ]q ^q /q (q _q 'f 'f /k 0l :q )i 9p i> k+ k+ k+ l& l& i> i> Q% 9& Q% Q% i> !% != != != != != != != != 3c 3c 3c 3c 3c 3c 3c 3c ,' ,' ,' ,' ,' ,' ,' ,' #% #% #% #% #% #% #% #% l& l& l& {@ {@ m@ m@ m@ k+ k+ l& {@ {@ m@ U@ U@ {+ {+ {+ {+ {+ {+ {+ {+ h. h. h. h. h. h. h. h. i> i> k+ l& l& {@ m@ m@ {@ {@ {@ {@ {@ {@ {@ {@ T$ T$ T$ T$ T$ T$ T$ T$ M$ M$ t% t% t% t% t% U@ 8# #. B. B. !. !. B. C. $. $. B. B. B. #. #. #. U@ U@ U@ U@ U@ U@ U@ 2% l& m@ 2% U@ {@ l& m@ U@ B. #. !. 8# 8# !. #. B. !. !. !. !. #. #. #. #. U@ U@ U@ U@ U@ U@ U@ U@ m@ 2% * .* m@ {@ U@ a# !. /+ 8# 8# j$ j$ .* .* Y_ Y_ Y_ Y_ ~_ ~_ ~_ Y_ L) S$ J$ K$ 8# !. [. T@ h+ [. v+ '. r$ b& =- '' b& b& b& b& +% +% [. [. h+ /. !. !. K$ J$ K$ 6[ C, G{ G{ G{ C, C, C, C, :] O) T@ h+ [. /. l. (. m* m* m* m* m* m* m* m* O) O) O) O) O) O) O) O) T@ T@ T@ T@ T@ T@ T@ T@ T@ h+ [. T@ I$ I$ T@ +. h+ [. [. t& I$ I$ t& h+ Z% t& h+ [. [. [. h+ w$ (& (& [* [* u$ w$ w$ w$ I$ Z% O) m* m* O) b, >5 Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& Z% A% v$ <] <] <] v$ v$ t& t& h+ T@ :] }| b, K> 4! m* :] t& t& t& t& t& t& t& T@ t& t& t& Z% Z% I$ O( v$ <] <] <] v$ v$ t& t& I$ t& .# .# K> 34 34 }| :] t& t& t& t& t& t& t& t& t& t& t& t& t& t& ,_ ac si -h -h fd fd h+ h+ t& t& d# d# `5 `5 `5 i; <] V5 V5 V5 E) E) ,_ ,_ ,_ ,_ 5[ 5[ ed ed ed fd :] t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% I$ Z% t& T@ T@ t& Z% I$ Z% Z% Z% Z% Z% t& t& t& I$ Z% t& T@ T@ t& Z% I$ Z% Z% Z% I$ I$ F{ F{ F{ *) r} r} r} r} r} r} r} =) =) =) =) '' '' '' s% t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& h+ T@ T@ t& Z% I$ F{ F{ T@ Z% I$ I$ t& T@ t& I$ T@ t& Z% I$ I$ Z% t& w$ (& O; !_ <] O; [* v$ O( O( A% v$ w$ w$ v$ A% I$ h+ T@ Z% F{ F{ I$ t& T@ t& t& t& t& t& t& t& t& h+ T@ t& Z% Z% t& T@ h+ t& I$ )_ F{ Z% t& Z% oh ^_ Ma Ma $| ,_ ,_ t& T@ Z% Z% *) *) r} r} r} *) ,_ (* (* (* ,_ ,_ t& t& Z% Z% *) *) r} r} r} r} r} r} r} r} r} r} *) *) @% @% s% s% -) -) *) Z% v$ v$ v$ v$ v$ d# d# d# c# 2( 2( d- &j yq zq Aq Bq Cq Dq Eq Fq Gq Hq Iq Jq Kq Lq Mq Nq Oq Wg Pq Qq Rq Sq =~ Tq Uq Vq Wq Xq Yq Zq `q y' #, r &l *! ^1 x, N1 /1 2k .r Kc .' hp 4, w' +r 3) t) x) @r #r $r %r &r *r @q #q =r _p -r ;r >r ,r 'r )r -= O @. [. h+ h+ h+ T@ @. /. h+ T@ h+ h+ Z% q} d# N; C- e, /$ e# s% -) +% s% !5 [] P* P* Y5 !5 m* T@ t& Z% Z% t& T@ h+ [. h+ t& Z% Z% t& h+ [. )_ Z% h+ h+ T@ Z% t& T@ t& t& t& t& t& t& t& t& *) *) *) *) -) -) -) -) *) *) -) -) s% s% @% @% h+ h+ h+ T@ t& t& t& Z% T@ T@ T@ T@ T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ .. t& I$ T@ [. T@ T@ [. T@ T@ T@ t& t& t& t& Z% T@ Z% I$ Z% T@ h+ t& I$ t& h+ h+ t& F{ F{ T@ /. t& T@ h+ h+ h+ h+ T@ t& T@ T@ T@ T@ T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ ", "~# ~# ~# ~# ~# ~# ~# [@ G@ G@ ~# ~# {# {# #$ } } } } } } } } } } 4 4 0 0 + + I+ ]# H@ H@ ]# J+ 8@ ]# H@ ]# J+ J+ 8@ 8@ I+ [# 0 0 0 0 0 0 0 0 0 + + l n n n n 0 0 0 + + + l l E E n l l + 0 0 + + + + + + + + l l + + + 0 0 0 2 3 0 k M P@ A| !r fo 4p ~r {r ]r ^r /p /r (r _q 'f 7p 0l wn _r :r i> i> k+ k+ k+ l& l& {@ l& i> Q% 9& 9& 9& 9& Z+ != != != != != != != 4c 4c 4c 4c 4c 4c 4c 4c 6c 6c 6c 6c 6c 6c 6c 6c #% #% #% #% #% #% #% #% l& l& l& {@ m@ m@ U@ U@ i> k+ k+ {@ m@ U@ 2% 2% {+ {+ {+ {+ {+ {+ {+ {+ h. h. h. h. h. h. h. h. k+ k+ k+ l& l& {@ {@ {@ {@ {@ {@ {@ {@ {@ {@ {@ T$ T$ T$ T$ T$ T$ T$ T$ Y_ Y_ Y_ Y_ Y_ t% t% t% .* !. #. #. !. 8# #. $. $. $. B. B. B. #. #. #. 2% 2% 2% 2% 2% U@ U@ U@ l& m@ U@ m@ l& k+ {@ U@ B. #. !. 8# 8# !. #. B. 8# 8# 8# !. #. B. B. B. U@ U@ U@ U@ U@ U@ U@ U@ m@ 2% * .* m@ {@ U@ a# 8# 4. 8# j$ j$ a# * * Y_ Y_ Y_ Y_ ~_ ~_ ~_ Y_ [! h# K$ S$ !. !. /. h+ T@ h+ +% '. t+ r$ b& =- b& b& b& b& +% +% [. [. [. +. #. !. K$ K$ S$ L) C, G{ G{ G{ C, C, C, C, >5 }| t& T@ h+ /. (. (. .# .# .# .# .# .# .# .# O) O) O) O) O) O) O) O) T@ T@ T@ T@ T@ T@ T@ T@ T@ [. /. h+ Z% I$ h+ @. [. [. h+ t& F{ F{ Z% h+ I$ Z% T@ [. /. /. [. u$ 5. (& [* [* u$ w$ w$ w$ F{ I$ :] O) O) :] 34 '5 }| Z% Z% Z% Z% Z% Z% Z% F{ I$ t& T@ T@ t& I$ q} O( [| [| [| O( O( I$ I$ h+ T@ :] }| b, K> 4! m* :] t& t& t& t& t& t& t& t& t& t& t& Z% Z% I$ O( v$ <] <] <] v$ v$ t& t& I$ t& .# m* K> Xl Xl '5 :] t& t& t& t& t& t& t& h+ h+ h+ h+ h+ h+ h+ a# ac si -h -h * .* [. /. t& t& d# d# `5 `5 `5 i; <] V5 V5 V5 E) E) ,_ ,_ )5 )5 ui 5[ ed =5 =5 * m* h+ h+ h+ h+ h+ h+ h+ Z% Z% Z% Z% Z% Z% Z% Z% F{ Z% t& T@ T@ t& Z% F{ T@ T@ t& t& Z% I$ I$ F{ F{ Z% t& T@ T@ t& Z% F{ t& t& t& Z% Z% Z% I$ I$ r} r} r} r} r} r} r} r} r} r} r} =) '' =- =- @% -) t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& h+ h+ T@ t& Z% I$ F{ )_ T@ Z% I$ I$ t& T@ t& I$ T@ t& I$ F{ F{ I$ t& T@ l. [* <] <] O; O; A% q} q} A% v$ w$ w$ v$ A% q} t& T@ T@ t& t& Z% F{ F{ t& t& t& t& t& t& t& t& h+ T@ t& Z% Z% t& T@ h+ t& I$ )_ F{ Z% t& I$ oh ^_ Ma Ma $| ,_ ,_ T@ T@ Z% Z% *) *) r} r} r} *) ,_ (* (* (* ,_ ,_ t& t& Z% Z% *) *) r} r} r} r} q3 q3 q3 q3 q3 q3 a) a) @% @% s% s% -) -) *) *) d# v$ v$ d# d# d# d# :* 2( rr rr yq d- sr tr ur vr wr xr yr Gq zr Ar Br Cr Dr Er Fr Gr Gr Hr Ir Jr Kr Lr Mr Nr Or Pr Qr Rr Sr /o Tr Ur Vr [m Wr 7, Xr Yr x, 3' Zr .r h2 w' hp `r t) +r s .s +s @s #s $s %s &s *s @q f[ =s -s ;s >s #m ,s 's )s !s O @. [. [. [. h+ T@ /. h+ T@ T@ [. [. T@ A% d# N; C- o@ W@ e# s% -) +% s% !5 [] P* P* Y5 !5 m* T@ t& Z% Z% t& T@ h+ /. [. T@ t& t& T@ [. /. Y% F{ T@ h+ t& Z% t& T@ t& t& t& t& t& t& t& t& *) *) *) *) *) -) -) -) *) *) -) -) s% s% @% @% h+ h+ T@ T@ t& t& Z% Z% T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ .. T@ I$ T@ [. T@ T@ [. T@ T@ t& t& Z% I$ I$ F{ [. T@ t& T@ [. /. h+ t& T@ h+ h+ Z% )_ F{ T@ @. I$ t& T@ [. [. T@ t& I$ T@ T@ T@ T@ T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ ", "{# {# {# {# {# {# {# [@ G@ G@ ~# ~# {# #$ #$ } } 4 4 0 0 0 + 0 } 1 | 0 + 4 1 H@ m$ d@ '@ '@ d@ m$ b$ J@ J@ J@ J@ J@ J@ J@ ]# 0 0 0 0 0 0 0 0 0 0 0 + + + l l + + + + + + + + n n n n n n n n 0 l E E l + + n l l l l l l l l M_ 3( ._ E# i 2$ #| ~s !9 {s ]s ^s /s u& R% R% 9& U% C }# i+ i+ ^& ^& .% H$ H$ J# &$ i+ i+ i+ i+ i+ i+ i+ {+ h. h. ~+ i+ i+ V V >+ >+ >+ >+ >+ >+ >+ >+ a% '= Z+ .@ +@ .@ `+ Y+ k+ k+ k+ i> Q% 9& 9& 9& k+ k+ k+ k+ k+ k+ k+ k+ `+ `+ `+ `+ `+ `+ `+ `+ `+ Z+ Z+ @ +@ .@ `+ U |% |% |% |% |% |% |% |% $% |% 0' 8c 8c |% &) t% {@ {@ {@ l& l& k+ k+ k+ 2% U@ m@ {@ l& l& l& l& ~+ ~+ ~+ h. h. {+ {+ {+ +# V ,+ ]+ +# ~+ i+ {+ {@ {@ {@ {@ {@ {@ {@ {@ m@ m@ m@ {@ {@ {@ l& l& !% $% &) &_ &_ &) $% 0' ~_ ~_ ~_ ~_ ~_ ~_ ~_ Y_ U@ !. !. !. !. !. !. !. B. B. B. #. !. 8# 8# 8# U@ U@ U@ U@ U@ U@ U@ U@ fd 2% l& {@ 2% 2% {@ i> B. #. !. 8# 8# !. #. B. !. #. B. C. C. $. #. !. m@ U@ 2% * * * * * * * * * .* 2% U@ !. a# L$ j$ j$ j$ j$ 2% 2% o3 o3 o3 o3 n3 n3 n3 o3 p: J$ J$ K$ j$ 8# /. +. +. /. v+ +% b& =- '' '' =- =- =- =- @% @% h+ h+ h+ T@ ,_ ,_ (* J$ S$ 6[ J- 5! 4{ H{ K> 34 Xl Xl m* m* h+ h+ h+ h+ u$ u$ +# O) .# {+ ]+ :] ,5 >5 O) +# +# :] :] .# m* }| t& T@ h+ T@ Z% t& /. .. t& t& t& t& t& t& t& t& Z% T@ h+ T@ Z% Z% t& h+ Z% Z% Z% t& T@ h+ h+ u$ A% <] w$ u$ u$ w$ t& Z% }| }| }| :] 4! C, C, m* }| t& T@ h+ h+ T@ t& Z% h+ T@ t& Z% Z% t& T@ u$ A% !_ !_ !_ A% A% Z% Z% t& t& :] :] K> K> K> :] :] t& t& t& t& t& t& t& t& t& t& t& t& t& t& v$ v$ !_ <] [* l. 5. t& F{ t& t& :] >5 Ds Xl K> .# m* h+ h+ T@ t& Z% Z% Z% T@ T@ T@ T@ T@ T@ T@ q$ .o Es Es Es ui ui Z% Z% T@ Z% Fs Fs `5 e7 `5 Gs <] V5 V5 61 hd hd ^_ ^_ ,_ q$ * .* =5 ac Hs pj :] t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% F{ I$ I$ Z% t& t& T@ T@ /. [. [. h+ T@ T@ t& t& T@ T@ T@ T@ T@ T@ T@ T@ Z% Z% Z% Z% Z% Z% Z% Z% =) =) =) =) =) =) =) =) r} r} r} r} r} r} r} *) @% T@ t& Z% F{ )_ x8 Y% t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& I$ I$ I$ Z% Z% t& t& t& I$ t& T@ t& I$ I$ Z% T@ t& t& t& t& T@ T@ T@ T@ v$ v$ v$ v$ v$ v$ v$ v$ A% A% !_ !_ !_ !_ !_ A% h+ h+ h+ h+ h+ h+ h+ h+ t& t& t& t& t& t& t& t& Z% F{ )_ I$ T@ h+ T@ t& Z% t& T@ T@ T@ Z% F{ Is a# bc Js Ks ,_ a# Z% Y% Z% Z% *) *) r} r} r} *) ,_ (* (* (* ,_ ,_ t& t& Z% Z% *) *) r} r} r} r} %n a) -) *) qj %n a) *) -) -) =) =) =) =) =) -) d# i; ', Ls Ls -; -; Ms n; Ns Os Ps Qs ur Rs Ss Ts Us Vs Ws Xs Ys Zs `s t .t +t @t #t $t %t &t *t =t -t ;t >t ,t 't )t !t ~t {t [n *[ o| 8q ]t ^t /t (t (t Xr _t :t T} 3t W9 4t >} 5t 6t 7t 8t 9t 0t at bt ct . .. [. T@ I$ F{ F{ t& t& t& t& t& t& t& v$ <* N; N; N; <* <* s% s% *) -) [] [] *5 Lb Kb dt :] t& t& t& t& t& t& t& Z% t& T@ h+ h+ T@ t& Z% t& t& t& t& t& t& t& t& h+ t& Z% t& h+ h+ T@ Z% qj -) +% +% s% -) *) -) -) -) -) -) -) -) -) -) t& t& t& t& t& t& t& t& h+ h+ T@ T@ t& t& Z% Z% t& t& T@ T@ h+ [. [. /. h+ h+ h+ h+ h+ h+ h+ h+ F{ I$ I$ Z% t& t& T@ T@ [. [. [. [. [. [. [. [. t& t& t& t& t& t& t& t& @. /. h+ h+ /. /. h+ t& h+ h+ h+ h+ h+ h+ h+ h+ t& t& t& t& t& t& ", "{# {# {# {# {# {# {# G@ G@ G@ G@ ~# ~# ~# ~# } } 4 4 0 0 0 0 0 } 1 | 0 + 4 H@ m$ J@ d@ '@ '@ d@ J@ m$ J@ J@ J@ J@ J@ J@ J@ J@ J+ 0 0 0 0 0 0 0 0 0 0 + + + l l + + + + + + + + n n n n n n n n 4 + n n + 0 + l l l l l l l l (# o} M6 o} (# l h D^ #| et )q ft gt ht it jt +1 %} :s + >+ >+ >+ >+ >+ >+ >+ >+ U Z+ @ @ `+ Y+ U i> i> i> i> i> Q% Q% Q% i> i> i> i> i> i> i> i> Z+ Z+ Z+ Z+ Z+ Z+ Z+ Z+ `+ Z+ Z+ @ +@ .@ `+ U |% |% |% |% |% |% |% |% |% |% 0' 8c 0' |% &) &_ T$ {@ {@ l& l& k+ k+ k+ {@ {@ {@ {@ {@ m@ m@ m@ ~+ ~+ ~+ h. h. {+ {+ {+ +# i+ ,+ ]+ +# h. i+ {+ {@ {@ {@ {@ {@ {@ {@ {@ m@ m@ m@ {@ {@ {@ l& #% |% $% &) &_ &_ &) $% |% &_ &_ &_ &_ &_ &_ &_ t% U@ !. !. !. !. !. !. !. #. #. #. #. !. !. !. !. U@ U@ U@ U@ U@ U@ U@ U@ 2% U@ m@ m@ 2% .* 2% U@ B. #. !. 8# 8# !. #. B. !. #. B. $. B. #. !. 8# U@ 2% .* * * * .* .* fd * * .* 2% 2% 2% 8# j$ U# j$ j$ j$ j$ .* .* o3 o3 o3 o3 n3 n3 n3 o3 .^ J$ J$ K$ j$ 8# /. /. /. [. +% @% =- '' '' '' =- =- =- =- @% @% h+ h+ [. h+ a# q$ J$ K$ h# L) 4! H{ H{ H{ 4! 4! 4! 4! m* m* h+ h+ h+ h+ u$ u$ +# O) .# {+ ]+ :] '5 >5 m* j+ j+ O) :] .# .# }| T@ h+ h+ T@ Z% t& [. @. t& t& t& t& t& t& t& t& T@ [. /. [. h+ T@ h+ /. t& t& t& t& T@ T@ T@ T@ A% <] w$ u$ u$ w$ t& Z% :] :] :] :] 4! 4! 4! 4! :] T@ h+ [. [. h+ T@ t& h+ T@ Z% I$ I$ Z% T@ u$ A% !_ !_ !_ A% A% Z% Z% t& t& :] :] K> K> K> :] :] t& t& t& t& t& t& t& t& t& t& t& t& t& t& v$ u$ <] [| [| v$ w$ t& Z% T@ h+ m* :] Xl Ds 34 :] O) T@ T@ T@ t& t& t& t& t& t& t& t& t& t& t& ,_ .o Es Es Es ui ui Z% Z% T@ Z% Fs Fs `5 e7 `5 Gs <] V5 V5 61 hd hd ^_ ^_ ,_ q$ fd fd ed ac .o ui :] t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& h+ T@ T@ T@ T@ t& t& t& t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% -) =) =) =) =) =) =) =) =) =) =) =) =) =) =) -) Z% Z% Z% I$ I$ I$ F{ F{ t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& F{ F{ I$ I$ Z% Z% Z% t& I$ t& T@ t& I$ I$ Z% T@ T@ T@ T@ T@ T@ T@ T@ T@ t& v$ v$ v$ v$ v$ v$ v$ A% A% !_ !_ !_ !_ !_ !_ w$ T@ T@ T@ T@ T@ T@ T@ t& t& t& t& t& t& t& t& t& I$ F{ I$ t& T@ t& Z% Z% t& T@ h+ T@ t& Z% ^_ a# Ma Ks Tt q$ j$ t& x8 Z% Z% *) *) r} r} r} *) ,_ (* (* (* ,_ ,_ t& t& Z% Z% *) *) r} r} r} r} qj *) -) -) a) qj a) -) -) -) =) =) =) =) =) :* :* `5 -; -; -; 90 90 Ms Ut Vt Wt `o Xt Rs Yt Zt `t u .u Iq +u @u #u $u %u &u *u =u -u ;u >u ,u 'u )u !u ~u {u ]u ^u /u (u _u {t 1g :u /1 g tu mq uu vu wu |r q8 T9 _( 7s xu 4n yu zu 0s Au Bu Cu Du Eu Fu Gu Hu Iu Ju x6 Ku Lu Mu Nu Ou Pu Qu Ru Su Tu Uu Vu w; Wu fb F6 Xu Yu Zu `u v .v +v @v g+ :. v$ q R# &$ R$ G$ R# ^& R$ R# R# R# R# R# R# R# ,+ 9& S% S% S% 9& Q% V V }# }# R$ R# '% K) K) D. R# ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ V V V V i+ i+ V V V V V V V V h. h. ~+ ~+ ~+ i+ i+ V Q% Q% i> i> i> i> k+ k+ i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> i> l& k+ k+ l& m@ m@ l& ,' |% 2b 2b 2b 2b 2b 2b 2b 2b he he he he 2b ;_ &) T$ {@ {@ l& l& k+ k+ k+ Q% i> {@ U@ 2% U@ m@ m@ ~+ ~+ ~+ h. h. {+ {+ {+ +# ~+ V {+ j+ {+ ~+ {+ {@ {@ {@ {@ {@ {@ {@ {@ m@ m@ m@ {@ {@ {@ l& #% |% ;_ -_ -_ -_ -_ ;_ 2b ;_ ;_ ;_ ;_ ;_ ;_ ;_ $% U@ !. !. !. !. !. !. !. !. !. !. !. #. #. #. #. U@ U@ U@ U@ U@ U@ U@ U@ {@ U@ 2% .* 2% 2% * 5[ B. #. !. 8# 8# !. #. B. !. !. #. #. !. 8# j$ a# .* .* * * * .* 2% U@ 5[ fd .* U@ U@ 2% .* a# !. /+ 8# j$ j$ a# fd fd o3 o3 o3 o3 n3 n3 n3 o3 .^ J$ J$ K$ j$ 8# /. /. [. [. +% @% =- =- '' '' =- =- =- =- @% @% h+ h+ /. [. j$ j$ K$ S$ h# L) b, 24 24 G{ l* J- +@ +@ m* m* h+ h+ h+ h+ u$ u$ +# O) m* ]+ j+ :] '5 }| m* ]+ j+ O) O) +# +# :] h+ [. [. h+ t& Z% T@ /. t& t& t& t& t& t& t& t& [. +. @. +. [. [. /. @. T@ T@ T@ T@ t& t& t& t& A% v$ w$ u$ h+ T@ :] }| O) O) 4! 4! 24 24 24 K> b) @% +% v+ v+ +% @% @% -) -) *) a) a) *) -) d# A% !_ !_ !_ A% A% Z% Z% t& t& :] :] K> K> K> :] :] t& t& t& t& t& t& t& t& t& t& t& t& t& t& v$ 5. <] g7 #v q} A% t& t& T@ [. +# m* b, Xl Ds '5 :] t& t& t& T@ T@ T@ T@ Z% Z% Z% Z% Z% Z% Z% )5 .o Es Es Es ui ui Z% Z% T@ Z% Fs Fs `5 e7 `5 Gs <] V5 V5 61 hd hd ^_ ^_ ,_ ,_ ui ui .o ac ed * :] t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& }| }| }| }| }| }| }| }| }| }| }| }| }| }| }| }| -) -) -) -) -) -) -) -) -) -) -) -) -) -) -) -) F{ F{ I$ I$ Z% Z% t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& F{ F{ I$ I$ Z% Z% Z% t& I$ t& T@ t& I$ I$ Z% T@ /. [. [. h+ T@ T@ t& t& t& t& t& t& t& t& v$ v$ !_ !_ !_ !_ ./ ./ ./ !_ A% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& T@ t& I$ I$ t& T@ Z% F{ Z% t& T@ h+ h+ h+ T@ q$ j$ $| bc Ma a# j$ t& F{ Z% Z% *) *) r} r} r} *) ,_ (* (* (* ,_ ,_ t& t& Z% Z% *) *) r} r} r} *) I$ t& h+ T@ Z% I$ *) s% =) =) =) =) *j *j *j d- yq 90 90 90 90 Ut Ut Ut $v %v `o &v Zt Zt *v =v -v ;v >v ,v 'v )v !v ~v {v ]v ^v /v (v _v :v k+ l& l& l& k+ k+ k+ k+ k+ k+ k+ k+ Q% Q% Q% Q% Q% Q% Q% Q% {@ l& i> k+ {@ m@ l& ,' |% 2b 2b 2b 2b 2b 2b 2b he he he he 2b ;_ ;_ &) T$ {@ {@ l& l& k+ k+ k+ Q% k+ m@ 2% .* U@ {@ k+ ~+ ~+ ~+ h. h. {+ {+ {+ j+ h. ~+ {+ j+ ]+ {+ h. {@ {@ {@ {@ {@ {@ {@ {@ m@ m@ m@ {@ {@ {@ l& #% $% ;_ ;_ -_ -_ ;_ ;_ ;_ 2b 2b 2b 2b 2b 2b 2b |% U@ !. !. !. !. !. !. !. 8# 8# 8# !. #. B. B. B. U@ U@ U@ U@ U@ U@ U@ U@ {@ .* fd fd 2% U@ * ui B. #. !. 8# 8# !. #. B. !. !. !. 8# j$ a# q$ q$ * * * * * 2% U@ m@ 5[ * 2% U@ m@ 2% * q$ #. s# !. 8# a# q$ 5[ 5[ o3 o3 o3 o3 n3 n3 n3 o3 -^ K$ K$ K$ j$ j$ [. [. /. /. v+ v+ b& b& b& b& =- =- =- =- @% @% h+ h+ [. [. a# a# J$ K$ K$ -^ K> 24 H{ G{ J- +@ .@ .@ m* m* h+ h+ h+ h+ u$ u$ +# O) O) j+ j+ :] >5 O) .# ]+ ]+ m* O) +# +# :] h+ /. /. [. t& Z% t& h+ t& t& t& t& t& t& t& t& [. /. @. +. [. h+ /. @. h+ h+ h+ T@ t& Z% Z% Z% v$ v$ w$ w$ T@ T@ :] :] m* m* C, 4! 24 $w $w b, [] s% @% @% @% @% s% s% *) *) *) *) *) *) *) '_ A% !_ !_ !_ A% A% Z% Z% t& t& :] :] K> K> K> :] :] t& t& t& t& t& t& t& t& t& t& t& t& t& t& v$ w$ [| g7 #v q} A% Z% I$ I$ T@ +# +# 4! 34 34 >5 }| Z% Z% t& T@ h+ h+ h+ I$ I$ I$ I$ I$ I$ I$ ^_ .o Es Es Es ui ui Z% Z% T@ Z% Fs Fs `5 e7 `5 Gs <] V5 V5 61 hd hd ^_ ^_ ,_ )5 ti pj Hs ac =5 .* :] t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% T@ T@ t& t& Z% I$ I$ F{ )_ F{ F{ I$ Z% Z% t& t& >5 >5 >5 >5 >5 >5 >5 >5 }| }| }| }| }| }| }| }| t& t& -) t& -) t& -) t& s% T@ s% T@ s% T@ s% T@ I$ I$ I$ Z% Z% t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& T@ T@ I$ t& T@ t& I$ I$ Z% T@ +. +. /. [. T@ t& Z% Z% }| }| Z% Z% Z% Z% A% A% !_ !_ !_ !_ ./ ./ ./ !_ O( I$ I$ I$ I$ I$ I$ I$ t& t& t& t& t& t& t& t& [. t& Z% Z% t& t& I$ )_ t& t& T@ h+ [. [. [. j$ a# (* Ma $| a# j$ T@ Z% Z% Z% *) *) r} r} r} *) )5 $| $| $| )5 )5 Z% Z% Z% Z% *) *) r} r} r} *) Z% q$ h+ h+ t& Z% -) @% r} r} r} r} %w %w %w yq 90 90 Ms Ms Ut Ut Ps &w *w =w -w *v ;w >w ,w 'w )w !w ~w {w ]w ^w /w (w _w :w [$ '% H$ F$ P% .% .% .% .% .% .% .% R# ^% T% T% S% Q% Q% i+ i+ i+ V ^& ^& .% H$ H$ R$ R$ C C C C C C C }# C C ,+ V V i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ ~+ i+ ,+ ,+ V ~+ ]+ +# Q% Q% i> k+ k+ l& {@ {@ {@ {@ {@ {@ {@ {@ {@ {@ R% R% R% R% R% R% R% R% L) S& u& C& [! L) S& ^* |% 2b 2b 2b 2b 2b 2b 2b ke he he 2b ;_ ;_ ;_ $% T$ {@ {@ l& l& k+ k+ k+ k+ {@ U@ .* 2% m@ k+ Q% ~+ ~+ ~+ h. h. {+ {+ {+ ]+ ]+ h. h. ]+ +# ]+ ~+ {@ {@ {@ {@ {@ {@ {@ {@ m@ m@ m@ {@ {@ {@ l& #% &) ;_ ;_ ;_ ;_ ;_ ;_ -_ 2b 2b 2b 2b 2b 2b 2b |% U@ !. !. !. !. !. !. !. 8# 8# 8# !. #. B. B. B. U@ U@ U@ U@ U@ U@ U@ U@ 2% fd ui fd U@ {@ U@ * B. #. !. 8# 8# !. #. B. !. 8# j$ j$ a# a# a# a# * * * * * 2% U@ m@ * .* 2% U@ U@ 2% * q$ #. s# !. 8# a# q$ 5[ 5[ o3 o3 o3 o3 n3 n3 n3 o3 -^ K$ K$ K$ j$ j$ [. [. +. +. '. '. t+ t+ t+ t+ =- =- =- =- @% @% h+ h+ T@ T@ q$ q$ /* /* (* og l* 4{ 4{ 4{ l* l* l* l* m* m* h+ h+ h+ h+ u$ u$ +# :] O) +# +# :] }| m* m* ]+ j+ O) O) +# +# :] h+ [. +. [. T@ Z% t& T@ t& t& t& t& t& t& t& t& T@ h+ /. [. T@ t& h+ /. h+ h+ h+ T@ t& Z% Z% Z% T@ T@ t& t& :] :] O) O) C, C, G{ H{ 24 $w R6 $w !5 =) r} r} r} r} =) =) r} r} =) =) =) =) r} '_ A% !_ !_ !_ A% A% Z% Z% t& t& :] :] K> K> K> :] :] t& t& t& t& t& t& t& t& t& t& t& t& t& t& v$ O( / / !_ w$ v$ I$ x8 x8 Z% m* +# C, 4! 4! m* }| Z% Z% t& T@ h+ h+ h+ I$ I$ I$ I$ I$ I$ I$ ^_ .o Es Es Es ui ui Z% Z% T@ Z% Fs Fs `5 e7 `5 Gs <] V5 V5 61 hd hd ^_ ^_ )5 ^_ pj pj ]_ .o ed .* :] t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% T@ T@ t& t& Z% I$ I$ F{ )_ )_ F{ F{ I$ Z% Z% t& >5 34 34 34 34 34 34 34 b, b, b, b, b, b, b, }| t& ,_ t& ,_ t& ,_ t& ,_ t& ,_ t& ,_ t& ,_ t& t& T@ t& t& t& Z% Z% Z% I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& T@ T@ h+ h+ h+ [. I$ t& T@ t& I$ I$ Z% T@ +. /. [. h+ T@ t& Z% Z% }| }| }| }| Z% Z% A% A% !_ !_ ./ ./ ./ ./ c' ./ O( I$ I$ I$ I$ I$ I$ I$ t& t& t& t& t& t& t& t& [. t& Z% Z% t& t& I$ )_ t& t& T@ T@ h+ [. /. 8# a# (* $| (* q$ a# T@ t& Z% Z% *) *) r} r} r} *) )5 $| $| $| )5 )5 Z% Z% Z% Z% *) *) r} r} r} *) Z% q$ a# a# t& Z% -) @% r} r} %w %w %w %w ;x >x Ut ,x ,x ,x 'x )x !x ~x {x {x ]x ^x /x ^x (x _x :x ^1 lx P1 mx nx ew ;8 ;! fw If Tj fp }/ hw p_ ox px 40 qx rx 8= sx tx vu ux vx wx Fk rv xx .0 !s ;+ ]+ .# @. /. [. T@ t& Z% Z% Z% t& t& t& t& t& t& t& v$ '_ ', ', ', '_ '_ *) *) -) -) [] [] Y5 P* 0# 9# :] t& t& t& t& t& t& t& T@ T@ t& t& t& t& T@ T@ t& t& t& t& t& t& t& t& Z% I$ )_ F{ Z% t& I$ )_ *) s% @% s% *) *) -) @% -) -) -) -) -) -) -) -) t& t& t& t& t& t& t& t& h+ h+ T@ T@ t& t& Z% Z% T@ T@ t& t& Z% I$ I$ F{ t& T@ T@ T@ h+ [. [. [. /. [. [. h+ T@ T@ t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& h+ t& I$ I$ t& t& I$ )_ t& t& t& t& t& t& t& t& [. [. [. [. [. [. ", "{# {# {# {# {# {# {# {# {# {# ~# ~# ~# ~# G@ 1 | | | } } 4 4 | 4 0 4 | | } J+ J@ c@ iu vw vw iu c@ *' e@ e@ e@ e@ e@ e@ e@ '@ J+ 0 0 0 0 0 0 0 0 0 0 + + + l l n n n n n n n n + + + + + + + + + + + 4 | } + E l l l l l l l (# yx zx Ax pv f^ ._ [# k D^ 58 a7 }8 Bx Cx Dx Ex y ~8 ,y 'y |7 )y S9 !y !y ~y ,[ {y ]y ^y /y (y 5& K) e> %& K) .% .% .% .% .% .% .% R# 9& S% S% S% 9& Q% V V ~+ i+ &$ ^& .% H$ I# J# R# ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ V V V V i+ i+ i+ i+ i+ i+ i+ i+ i+ i+ V ,+ ,+ ,+ i+ h. j+ +# k+ k+ k+ k+ l& l& l& l& {@ {@ {@ {@ {@ {@ {@ {@ u& u& u& u& u& u& u& u& L) S& u& u& S& [! [! &% |% 2b 2b 2b 2b 2b 2b 2b ke he 2b ;_ ;_ ;_ ;_ |% T$ {@ {@ l& l& k+ k+ k+ m@ m@ U@ 2% U@ {@ i> Q% ~+ ~+ ~+ h. h. {+ {+ {+ ]+ j+ ]+ ~+ {+ .# +# ~+ {@ {@ {@ {@ {@ {@ {@ {@ m@ m@ m@ {@ {@ {@ l& #% &) -_ ;_ 2b 2b ;_ -_ -_ 2b 2b 2b 2b 2b 2b 2b |% U@ !. !. !. !. !. !. !. !. !. !. !. #. #. #. #. U@ U@ U@ U@ U@ U@ U@ U@ * fd fd .* U@ m@ m@ U@ B. #. !. 8# 8# !. #. B. 8# j$ a# a# a# j$ 8# 8# .* .* * * * .* 2% U@ 2% 2% .* .* .* * * a# !. /+ 8# j$ j$ a# fd fd o3 o3 o3 o3 n3 n3 n3 o3 o^ S$ S$ K$ j$ a# h+ h+ /. /. v+ '. t+ t+ p. p. =- =- =- =- @% @% h+ h+ t& t& q$ q$ /* (* Ma _y J- 5! 4{ 4{ C, 4! 4! 4! m* m* h+ h+ h+ h+ u$ u$ +# :] :] +# .# :] :] .# O) +# +# :] :] .# m* }| t& h+ /. /. h+ t& t& T@ t& t& t& t& t& t& t& t& Z% T@ h+ T@ Z% I$ t& h+ T@ T@ T@ T@ t& t& t& t& h+ T@ t& Z% }| :] O) m* 4! 4! H{ H{ 24 24 X5 24 48 r} q3 :y :y q3 r} r} =) =) '' =- =- '' =) d# '_ !_ !_ !_ A% A% Z% Z% t& t& :] :] K> K> K> :] :] t& t& t& t& t& t& t& t& t& t& t& t& t& t& v$ q} / [| O; 5. u$ I$ Y% x8 I$ O) m* C, C, l* j+ :] t& t& t& T@ T@ T@ T@ Z% Z% Z% Z% Z% Z% Z% )5 .o Es Es Es ui ui Z% Z% T@ Z% Fs Fs `5 e7 `5 Gs <] V5 V5 61 hd hd ^_ ^_ )5 ^_ ti ti Hs .o ac 5[ :] t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& Z% Z% Z% Z% Z% F{ F{ I$ I$ I$ I$ Z% Z% b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, }| 5[ ,_ ,_ ,_ ,_ ,_ ,_ ,_ )5 )5 )5 )5 )5 )5 )5 )5 T@ T@ T@ t& t& Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& T@ T@ h+ h+ h+ I$ t& T@ t& I$ I$ Z% T@ h+ h+ T@ T@ t& Z% Z% I$ }| }| }| }| Z% Z% A% A% !_ !_ ./ ./ ./ ./ c' ./ O( I$ I$ I$ I$ I$ I$ I$ t& t& t& t& t& t& t& t& T@ t& I$ I$ t& T@ Z% F{ T@ T@ t& t& t& T@ h+ j$ ,_ (* (* (* ,_ ,_ t& t& Z% Z% *) *) r} r} r} *) )5 $| $| $| )5 )5 Z% Z% Z% Z% *) *) r} r} r} *) I$ ,_ a# q$ Z% I$ *) s% r} r} %w %w %w %w ;x >x Ut ,x ,x z ,z 'z 9v )z za Kw !z ~z {z ]z ^z ;l /z (z _z :z 48 .% .% .% .% .% .% .% R# Q% R% R% S% 9& 9& ,+ ,+ V V ^& R# .% .% .% R# ^& V V V V V V V ~+ ~+ i+ i+ i+ i+ V V ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ i+ i+ i+ i+ i+ ~+ h. {+ {@ l& l& l& l& k+ k+ k+ k+ k+ k+ k+ k+ k+ k+ k+ C& C& C& C& C& C& C& C& 6[ S& u& R% C& [! [! &% |% 2b 2b 2b 2b 2b 2b 2b le ke 2b ;_ -_ ;_ 2b |% T$ {@ {@ l& l& k+ k+ k+ m@ m@ m@ {@ {@ {@ {@ {@ ~+ ~+ ~+ h. h. {+ {+ {+ {+ +# j+ ~+ {+ m* .# i+ {@ {@ {@ {@ {@ {@ {@ {@ m@ m@ m@ {@ {@ {@ l& #% &_ -_ ;_ 2b 2b ;_ -_ =_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ $% U@ !. !. !. !. !. !. !. #. #. #. #. !. !. !. !. U@ U@ U@ U@ U@ U@ U@ U@ .* U@ m@ U@ 2% 2% U@ m@ B. #. !. 8# 8# !. #. B. j$ j$ a# a# j$ 8# #. B. U@ 2% .* * * * .* .* {@ U@ .* fd 5[ fd .* 8# j$ U# j$ j$ j$ j$ .* .* o3 o3 o3 o3 n3 n3 n3 o3 o^ S$ S$ K$ j$ a# h+ h+ T@ h+ @% @% b& r$ r$ r$ =- =- =- =- @% @% h+ h+ t& T@ a# a# J$ (* $| p] C, G{ G{ H{ 4! 4! K> K> m* m* h+ h+ h+ h+ u$ u$ +# :] :] .# .# :] :] +# :] .# .# }| >5 O) O) '5 I$ T@ /. /. h+ T@ T@ h+ t& t& t& t& t& t& t& t& I$ t& h+ T@ Z% I$ t& T@ t& t& t& t& T@ T@ T@ T@ h+ T@ t& Z% }| :] 4! C, K> K> 24 24 4z 4z 4z H{ *, =) r} q3 q3 r} =) '' '' '' b& r$ r$ b& '' <* '_ !_ !_ !_ A% A% Z% Z% t& t& :] :] K> K> K> :] :] t& t& t& t& t& t& t& t& t& t& t& t& t& t& v$ w$ !_ [| !_ w$ u$ t& I$ Z% T@ m* O) K> 4! l* ]+ O) T@ T@ T@ t& t& t& t& t& t& t& t& t& t& t& ,_ .o Es Es Es ui ui Z% Z% T@ Z% Fs Fs `5 e7 `5 Gs <] V5 V5 61 hd hd ^_ ^_ ^_ ^_ ui ui .o Hs ]_ pj :] t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& Z% Z% Z% Z% Z% I$ I$ I$ K> K> K> K> K> K> K> K> b, b, b, b, b, b, b, }| 5[ (* (* (* (* (* (* (* Ma Ma Ma Ma Ma Ma Ma ^_ Z% Z% t& t& t& T@ T@ T@ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% t& t& t& I$ t& T@ t& I$ I$ Z% T@ Z% Z% Z% Z% Z% Z% Z% I$ >5 34 >5 >5 >5 I$ O( O( !_ !_ ./ ./ c' c' c' ./ A% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& t& I$ F{ I$ t& T@ t& Z% h+ T@ t& Z% I$ Z% t& q$ ^_ $| $| $| ^_ ^_ Z% Z% Z% Z% *) *) r} r} r} *) ^_ Ma Ma Ma ^_ ^_ I$ I$ Z% Z% *) *) r} r} r} *) oh $| ,_ ,_ ^_ F{ a) -) q3 q3 5z 5z 6z 6z 6z Cp Ut ,x 7z 8z !x 9z {x |y 0z 0z az bz cz 4y dz ez fz gz hz iz jz kz lz mz nz oz pz qz rz sz tz uz vz wz xz yz zz Az Bz Cz Dz Ez Fz kx `3 *l Gz Hz Iz Jz Kz Lz ;! fw @9 Mz Nz }/ &x ~z Oz qx Ve Pz Qz Rz Sz Tz Uz Vz Wz Xz Yz Zz |8 r2 W $. y% .^ * T@ t& t& t& t& T@ h+ t& t& t& t& t& t& t& v$ '_ ', ', ', '_ '_ *) *) @% s% !5 d7 `z Lb La [] :] t& t& t& t& t& t& t& h+ T@ t& Z% Z% t& T@ h+ t& t& t& t& t& t& t& t& T@ Z% I$ Z% T@ h+ t& I$ s% s% @% -) a) a) s% v+ -) -) -) -) -) -) -) -) t& t& t& t& t& t& t& t& h+ h+ T@ T@ t& t& Z% Z% t& t& T@ T@ T@ T@ h+ h+ /. /. [. h+ T@ T@ t& t& Z% Z% t& t& t& t& T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ t& t& t& t& t& t& t& t& [. T@ Z% Z% T@ T@ Z% F{ Z% Z% Z% Z% Z% Z% Z% Z% T@ T@ T@ T@ T@ T@ ", "{# {# {# {# {# {# {# {# {# {# #$ @+ L@ L@ L@ ~ ~ 1 | | } } } 1 4 + 0 | 1 3+ J+ b@ e@ A .A .A vw e@ c@ iu iu iu iu iu +A iu -] J+ 0 0 0 0 0 0 0 0 0 0 + + + l l n n n n n n n n n n n n n n n n n E n 0 } 4 n }# l l l l l l l (# g@ zx zx ww ,] o} [# E ++ D^ 1p Zc !9 }8 @A #A $A %A &A (r 9l /k :r Ny Ny Ny su *A =A -A ;A >A ,A 'A J} d| -y )A @s 8> lx 1j !A ~A {A ]A ^A /A (A _A :A Yx i> 9& L_ L_ L_ L_ L_ L_ L_ S& S& S& S& S& S& S& S& 6[ S& u& R% C& [! [! &% |% 2b 2b 2b 2b 2b 2b 2b le ke 2b -_ -_ ;_ 2b 0' T$ {@ {@ l& l& k+ k+ k+ l& l& l& l& {@ m@ U@ 2% ~+ ~+ ~+ h. h. {+ {+ {+ {+ .# +# ~+ {+ O) m* i+ {@ {@ {@ {@ {@ {@ {@ {@ m@ m@ m@ {@ {@ {@ l& #% &_ -_ ;_ he he ;_ -_ =_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ $% U@ !. !. !. !. !. !. !. B. B. B. #. !. 8# 8# 8# U@ U@ U@ U@ U@ U@ U@ U@ U@ l& i> l& .* fd .* m@ .. @. +. /. /. !. #. B. j$ a# a# a# j$ #. $. W+ ]+ j+ +# m* m* m* m* * k+ m@ * ui ui og .* 6[ a# J$ j$ j$ j$ j$ 2% 2% o3 o3 o3 o3 o3 o3 n3 o3 U@ S$ S$ K$ j$ a# h+ T@ Z% Z% t& -) s% s% @% @% @% @% =- @% @% @% h+ h+ h+ h+ j$ 8# j$ J$ ,_ ^_ :] :] :] :] :] O) O) O) h+ h+ h+ h+ h+ h+ u$ h+ /. :] }| .# .# :] O) j+ }| m* m* >5 '5 :] :] ,5 F{ t& [. /. [. h+ h+ [. t& t& t& t& t& t& t& t& Z% T@ h+ T@ Z% Z% t& h+ Z% Z% Z% t& T@ h+ h+ h+ h+ T@ t& Z% }| :] O) m* b, b, b, K> H{ G{ G{ C, #& '' =) r} r} =) '' =- '' =- r$ t+ t+ r$ =- s% '_ A% A% A% A% Z% Z% Z% t& t& t& :] :] :] :] :] t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& v$ (. O; [| / A% w$ h+ h+ [. [. .# O) b, b, C, j+ m* h+ h+ T@ t& Z% Z% Z% T@ T@ T@ T@ T@ T@ T@ T@ .o Es .o .o ui ui Z% Z% T@ Z% Fs Fs i; N; `5 Gs V5 6 V5 61 hd hd ^_ ^_ ^_ )5 5[ fd ac Hs ({ gA :] ,_ t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% *) Z% F{ I$ I$ Z% t& t& T@ T@ T@ T@ t& t& Z% I$ I$ I$ 4! 4! 4! 4! 4! 4! 4! 4! b, b, b, b, b, b, b, }| 5[ (* ,_ (* ,_ (* ,_ (* oh bc oh bc oh bc oh oh F{ q} I$ t& T@ [. /. /. I$ I$ I$ I$ I$ I$ >5 I$ I$ I$ I$ I$ I$ I$ I$ I$ )_ )_ )_ F{ F{ F{ I$ I$ I$ t& T@ t& I$ I$ Z% T@ F{ F{ I$ I$ I$ I$ I$ Z% >5 >5 I$ I$ I$ I$ O( O( !_ !_ !_ !_ ./ ./ ./ !_ A% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& }| '5 ,5 >5 T@ h+ T@ t& [. T@ Z% I$ '5 '5 >5 }| oh ^_ )5 ^_ oh F{ I$ Z% Z% Z% Z% *) *) *) *) Z% ^_ Ma Ma Ma ^_ ^_ ^_ ^_ Z% Z% Z% Z% *) *) d7 Z% Is ^_ ,_ )5 F{ )_ a) *) a) q3 q3 q3 5z 5z 5z hA iA jA kA lA mA nA Dk oA pA qA rA sA tA tA uA vA wA xA yA zA AA BA CA DA EA FA GA HA IA JA KA LA MA NA OA PA QA RA SA TA UA VA T8 cw vb *l 4n ^d +~ WA XA YA ;! ZA Tj ro G5 `A =y B .B K] +B It @B #B $B %B &B *B =B kv -B ;B M4 N* ` #. -^ p: +. /. @% t& *) I$ a) I$ -) t& -) t& -) t& -) d# d# i; i; i; d# d# -) -) +% s% d7 hu Kb Kb `z d7 :] t& t& t& t& t& t& t& h+ T@ t& Z% Z% t& T@ h+ t& t& t& t& t& t& t& t& h+ t& Z% t& h+ h+ T@ Z% s% @% s% -) a) a) s% v+ -) -) -) -) -) -) -) -) t& t& t& t& t& t& t& t& h+ h+ T@ T@ t& t& Z% Z% t& t& T@ T@ h+ [. [. /. +. +. /. h+ T@ t& Z% I$ F{ I$ I$ Z% t& t& T@ T@ [. [. [. [. [. [. [. [. t& t& :] t& t& t& t& t& [. T@ t& t& T@ u$ t& I$ Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& ", "4 4 4 4 4 4 4 } } } } } } } 3 ) =@ 6+ E# '$ E# + 0 0 0 9+ 9+ 9+ 9+ P% G+ 9@ >B ,B 'B 'B )B iu e@ iu iu +A +A +A yx +A @^ K+ a+ a+ K@ K@ K@ E# E# 3 a+ E# K@ a+ a+ K@ '$ E# E# E# E# E# E# E# E# 3 a+ E# '$ >% >% '$ E# E E E n n l l l l l l l l l l (# !B !B !B !B dd dd F D E q :l A| ~B 8< Yd Eb {B ]B Sf ^B /B _q (B _B qu Ny Ny :B ]> EB FB +< Z* d. r+ 9* P( GB ^+ }. h@ ~@ -+ 5# ~. 5# e+ C. ` ` ` ` ` ` ` .. Z . T T . Z .. {+ ~+ V V i+ i+ ,+ }# h. h. {+ {+ {+ ]+ ]+ ]+ l& l& l& l& l& l& #% #% !% 0' 0' 0' 0' 0' 0' 0' T$ {@ {@ {@ {@ {@ {@ {@ U% 9& i> k+ l& l& l& #% |% |% |% |% |% |% |% |% $% $% $% $% $% $% $% $% T$ {@ {@ {@ {@ {@ {@ {@ {@ {@ l& l& {@ 2% * fd ~+ h. ]+ j+ j+ ]+ h. ~+ ]+ h. i+ ~+ {+ ]+ h. ~+ .* U@ m@ l& l& m@ U@ .* m@ m@ m@ {@ {@ {@ l& #% 3{ S_ S_ S_ }4 }4 }4 }4 S_ S_ S_ S_ T_ T_ >_ )= .@ +# .# +# {+ h. {+ j+ +# +# +# +# +# +# +# +# ~+ h. h. {+ ]+ ]+ j+ j+ O) m* .# +# j+ ]+ {+ {+ @% +% '. ). ). +. [. h+ .. +. j$ a# /* /* J$ j$ D. [$ #& 48 d7 !5 $& j+ 2% 2% o^ -^ -^ L2 .^ L2 .^ {2 o^ 6[ 6[ -^ p: og * * m* m* m* m* C, m* j$ j$ j$ j$ j$ j$ j$ j$ j$ j$ j$ [. [. [. [. [. m* m* b) m* m* m* m* m* m* m* m* m* m* * m* h+ u$ (& (& a. a. (& 5. u$ l. l. 5. 5. [. [. [. h+ Z% t& T@ h+ h+ T@ t& Z% t& t& t& t& t& t& t& t& h+ h+ T@ T@ t& Z% Z% Z% Z% Z% Z% t& T@ h+ h+ h+ +# O) O) j+ +# :] }| O) O) O) O) O) O) O) O) O) t& Z% F{ )_ )_ F{ Z% t& m* m* m* O) :] }| }| }| 48 L> *, #& *, 48 Ka Jb L> L> L> L> L> L> L> !5 d7 :] O) O) O) Z% F{ )_ h+ h+ h+ w$ v$ v$ A% A% t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% A% A% !_ <] <] w$ u$ h+ h+ Z% Z% }| }| b, b, b, }| :] t& t& Z% Z% Z% I$ I$ Z% I$ I$ F{ F{ I$ I$ Z% K> ac b, 34 >5 }| t& t& Z% Z% A% A% !_ !_ ', !_ HB IB JB HB M> M> Ma Js a# a# m* O) b, 34 Ds O* fd /* ,_ ,_ )5 ^_ I$ F{ F{ I$ -) s% s% -) q3 qj /. [. t& I$ F{ F{ I$ I$ Z% t& t& t& T@ T@ h+ h+ 4! 4! K> K> b, 34 34 Xl 34 b, K> K> K> 34 Ds KB }| )5 Z% )5 Z% )5 Z% )5 h+ a# h+ q$ t& )5 Z% Z% A% ', '_ '_ '_ '_ *) *) %n %n LB hu hu d7 La !5 /. [. [. h+ T@ T@ t& t& I$ I$ I$ I$ I$ I$ I$ I$ h+ t& Z% t& h+ h+ T@ Z% T@ T@ T@ T@ T@ T@ T@ T@ v$ <] O; O; v$ A% / / O( O( A% A% A% v$ t& t& t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% }| Xl $w K> 4! O) :] Z% F{ I$ I$ >5 }| K> K> H{ 4! dt %n qj a) a) Z% t& t& Z% Z% Z% )5 )5 )5 )5 )5 &' &' q$ q$ q$ q$ q$ /* fd p: p: p: p: p: -h fd >5 >5 >5 >5 a) a) a) a) qj *) '_ Fs e# j. d# MB NB OB PB QB RB SB TB UB VB WB XB YB ZB `B `B C .C +C @C #C $C %C &C *C =C -C ;C >C ,C 'C )C !C ~C {C pz ]C ^C /C (C _C :C :] :] :] t& t& Z% Z% A% A% A% !_ A% A% q} q} O( v$ w$ 5. l. l. v$ v$ v$ v$ v$ v$ ", "0 0 0 0 0 0 0 } } } } } } } 3 ) =@ 7@ ,& '$ E# + 0 0 0 9+ 9+ P% P% P% R~ 9@ iC jC ,B )B A iu e@ iu iu +A +A yx yx yx >] K+ a+ a+ K@ K@ K@ E# E# 3 a+ E# K@ a+ a+ K@ '$ E# E# E# E# E# E# E# E# K@ E# '$ >% '$ E# K@ a+ E n n n l l + + l l l l l l l (# kC lC lC lC kC kC a% a% n l 0+ D^ 6@ mC *k nC oC pC Vd qC rC sC tC uC qu vC wC xC yC zC AC BC CC DC EC FC GC HC IC JC KC LC MC NC 0B OC cB Vx gB Rw PC QC QC PC Lv .y Cu Jv Jv Cu RC SC /t x, TC UC )m 4q ep Se VC WC XC YC ZC `C D .D +D @D #D $D %D &D *D =D %h -D +f T0 ;D EB sj sj h- sj >D ,D 'D ;. ;. Z* N( k* }. h@ N+ )D s$ t$ s$ R& C. ` ` ` ` ` ` ` Z ` . . . . ` Z h. i+ V V i+ i+ V C i+ i+ i+ ~+ ~+ h. h. h. l& l& l& l& l& l& #% #% 0' 0' he he he he he 0' T$ {@ {@ {@ {@ {@ {@ {@ {@ {@ m@ m@ m@ m@ {@ l& |% |% |% |% |% |% |% |% $% $% $% $% $% $% $% T$ T$ {@ {@ {@ {@ {@ {@ {@ {@ {@ l& l& {@ m@ 2% .* ~+ h. ]+ j+ j+ ]+ h. ~+ ]+ h. i+ ~+ {+ ]+ {+ ~+ U@ U@ m@ m@ m@ m@ U@ U@ m@ m@ m@ {@ {@ {@ l& #% 2{ }4 }4 }4 S_ S_ S_ S_ }4 S_ S_ S_ T_ T_ >_ )= .@ +# .# +# {+ h. {+ j+ +# +# +# +# +# +# +# +# j+ j+ j+ j+ +# +# +# +# m* .# .# +# j+ j+ ]+ ]+ =- b& t+ p. ). '. [. h+ +. /. j$ a# /* J$ K$ 8# 5$ s+ R) *, *, #& 9# j+ +# 2% o^ -^ -^ L2 L2 L2 {2 {2 =^ _& o^ -^ p: og .* .* .# .# .# .# $& .# h+ a# a# a# a# a# a# a# j$ j$ j$ j$ j$ j$ j$ j$ m* m* m* m* m* O) O) O) m* m* m* m* m* m* m* h+ {; c/ e) z. y. I- [* [* [* [* u$ u$ h+ [. [. [. Z% t& T@ h+ h+ T@ t& Z% t& t& t& t& t& t& t& t& h+ h+ h+ T@ T@ T@ T@ t& t& t& t& t& T@ T@ T@ T@ O) >5 >5 m* m* '5 ,5 }| m* m* m* m* m* m* m* m* t& Z% I$ F{ F{ I$ Z% t& T@ T@ T@ T@ t& t& t& t& 48 L> L> L> L> 48 -j -j L> L> L> L> L> L> L> !5 Lb K> 4! 4! O) }| F{ )_ T@ t& v$ v$ <] !_ !_ !_ t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% A% A% !_ !_ <] v$ v$ t& T@ Z% Z% }| }| b, b, b, }| :] t& t& Z% Z% Z% I$ I$ t& Z% I$ I$ I$ I$ Z% t& K> b, b, b, }| }| Z% t& Z% Z% A% A% !_ !_ !_ 61 HB IB !D ~D M> M> Ma Ks )5 )5 :] :] K> b, `z '5 5[ (* (* $| )5 )5 Z% Z% F{ I$ -) s% '' =) q3 qj @% T@ t& Z% I$ I$ I$ I$ Z% Z% Z% t& t& t& T@ T@ K> K> K> b, b, b, b, b, b, b, K> K> b, b, 34 '5 }| Z% Z% Z% Z% Z% Z% Z% T@ T@ T@ t& t& t& t& v$ '_ ', ', ', '_ '_ *) *) qj a) hu hu `z Lb Lb d7 m* T@ T@ T@ T@ t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% T@ Z% I$ Z% T@ h+ t& I$ t& t& t& t& t& t& t& v$ <] j; j; 1{ <] !_ [| / O( O( Z% Z% Z% t& :] :] t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% }| G7 R6 24 4! 4! :] Z% I$ I$ I$ >5 }| 24 24 X5 H{ 48 r} r} r} *) a) I$ I$ Z% Z% )5 )5 $| $| $| $| E) E) ,_ ,_ ,_ ,_ (* (* og og Zl Zl {D {D {D og }| *) d7 *) *) *) *) *) Y% O( A% O( '_ u$ '_ ]D ^D /D (D _D :D ] K+ a+ a+ K@ K@ K@ E# E# 3 a+ E# K@ a+ a+ K@ '$ E# E# E# E# E# E# E# E# '$ >% >% '$ '$ K@ a+ 6+ E n n n l l + + l l l l l l l (# o} RD M6 M6 o} o} [# [# n l M@ M@ i7 3@ SD *k TD UD VD WD &A 7| tC ko qu vC wC xC yC zC AC BC XD Qy YD 0m ZD `D V( E .E +E @E #E $E %E }A QC &E Kv Kv Eu Eu Eu }g *E }g *E =E =E *E -E ;E (e >E ,E 'E )E Nz !E ~E {E ]E ^E /E (E _E :E |% |% |% |% |% |% |% |% $% $% $% $% $% $% $% T$ T$ {@ {@ {@ {@ {@ {@ {@ {@ {@ l& l& l& {@ m@ m@ ~+ h. ]+ j+ j+ ]+ h. ~+ ]+ h. ~+ h. ]+ ]+ {+ ~+ m@ m@ U@ U@ U@ U@ m@ m@ m@ m@ m@ {@ {@ {@ l& #% 5! [4 }4 }4 S_ S_ T_ T_ }4 }4 }4 S_ S_ T_ T_ d= .@ +# .# +# {+ h. {+ j+ +# +# +# +# +# +# +# +# m* m* m* m* m* .# .# .# +# +# +# +# +# j+ j+ j+ =- b& t+ p. ). '. [. h+ [. [. a# a# J$ K$ S$ !. a- 9! a- %& %& H. H. ]+ +# 2% 2% -^ -^ .^ L2 L2 {2 =^ =^ =^ o^ -^ .^ p: 2% 2% +# +# +# +# 9# +# T@ q$ q$ q$ q$ q$ q$ q$ a# a# a# a# a# a# a# a# .# .# .# m* O) O) :] :] m* m* m* m* m* m* m* h+ 1{ c/ I- I- I- I- [* O; A% v$ v$ w$ h+ h+ [. [. Z% t& T@ h+ h+ T@ t& Z% t& t& t& t& t& t& t& t& h+ h+ h+ h+ h+ [. [. [. T@ T@ T@ T@ t& t& t& t& O) >5 >5 m* m* '5 ,5 }| .# .# .# .# .# .# .# .# T@ t& Z% Z% Z% Z% t& T@ t& t& t& t& T@ T@ T@ T@ 48 48 -j -j -j 48 L> *, L> L> L> L> L> L> L> !5 Lb K> K> K> :] }| I$ F{ I$ I$ O( A% !_ !_ !_ !_ t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% A% A% !_ !_ !_ A% O( I$ I$ Z% Z% }| }| b, b, b, }| :] t& t& Z% Z% Z% I$ I$ T@ t& Z% Z% Z% Z% t& T@ b, b, b, b, }| }| Z% Z% Z% Z% A% A% !_ !_ !_ 61 HB IB IB ~D F- F- Ma Tt Is oh >5 }| K> K> Lb }| ui $| $| $| )5 ,_ t& t& I$ I$ *) -) =) r} q3 a) *) Z% t& t& t& Z% I$ I$ I$ I$ I$ I$ Z% Z% t& t& b, b, b, b, b, K> K> K> K> K> b, b, b, K> 4! O) }| Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& T@ w$ A% !_ !_ !_ A% A% Z% Z% Z% Z% }| }| 34 34 34 >5 }| Z% Z% Z% t& t& t& t& t& t& t& t& t& t& t& t& t& I$ F{ I$ t& t& Z% F{ Z% Z% Z% Z% Z% Z% Z% A% !_ j; j; j; <] !_ [| / O( O( Z% Z% Z% t& :] :] t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% }| G7 R6 24 K> K> :] Z% O( O( I$ }| }| $w 24 X5 24 #& =- '' =) *) a) I$ F{ Z% Z% )5 )5 $| $| $| $| )5 )5 )5 )5 )5 )5 )5 )5 C' C' C' C' C' C' C' C' t& v$ t& v$ v$ v$ d# d# bE Gs N; Gs cE Gs dE eE fE gE hE iE jE SB kE lE mE nE oE pE qE rE sE 7D tE uE vE wE xE yE zE AE BE CE DE lD EE FE GE HE IE JE KE LE ME NE OE PE :C QE RE SE TE UE VE WE XE YE ZE zD Qe Uj 99 I^ o0 /b `E F .F +F @F #F JD $F %F &F *F =F -F ;F >F S+ X^ 9# s% T@ U# l. *) r} r} r} r} r} r} r} =) =) =) =) =) =) =) d# '_ !_ !_ !_ A% A% Z% Z% Z% Z% }| }| b, b, b, }| }| Z% Z% Z% Z% I$ I$ I$ t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% h+ h+ h+ h+ h+ h+ h+ h+ Z% Z% Z% Z% Z% Z% Z% Z% T@ T@ T@ T@ T@ T@ T@ T@ I$ Z% T@ T@ T@ t& I$ )_ h+ [. [. h+ T@ Z% I$ F{ Z% t& t& T@ h+ h+ [. [. h+ h+ h+ h+ h+ h+ h+ h+ t& t& t& t& t& t& t& t& 34 34 34 34 >5 >5 I$ I$ Z% Z% A% A% !_ !_ !_ !_ l. 5. u$ w$ v$ A% O( q} v$ v$ v$ v$ v$ v$ ", " + + + + + + + } } } } } } } 3 2 -@ 7@ M% K@ K@ 0 0 0 0 9+ 9+ P% P% P% R~ ,F iC iC iC >B >B iu iu iu iu +A +A yx yx yx >] K+ a+ a+ K@ K@ K@ E# E# 3 a+ E# K@ a+ a+ K@ '$ E# E# E# E# E# E# E# E# '$ '$ '$ '$ E# K@ K@ a+ D D E E E n n n l l l l l l l (# f^ pv ,] ,] f^ f^ m m D E q j@ -= D@ B@ 'F )F !F ~F {F ]F ^F (q ,f /F vC Ny xC l& k+ Q% ` ` ` ` ` ` ` ` T . Z .. .. Z . T ~+ V ,+ V i+ ~+ i+ ,+ C ,+ ,+ ,+ V V i+ i+ l& l& l& l& l& l& #% #% $% $% ;_ ;_ ;_ ;_ ;_ $% !% k+ k+ k+ k+ k+ k+ k+ l& l& l& l& k+ i> 9& U% |% |% |% |% |% |% |% |% $% $% $% $% $% $% $% T$ T$ {@ {@ {@ {@ {@ {@ {@ {@ {@ l& l& k+ k+ l& l& ~+ h. ]+ j+ j+ ]+ h. ~+ ]+ {+ ~+ h. ]+ j+ {+ h. l& m@ U@ .* .* U@ m@ l& m@ m@ m@ {@ {@ {@ l& #% 4{ [4 [4 }4 S_ T_ T_ >_ }4 }4 }4 S_ S_ S_ T_ d= .@ +# .# +# {+ h. {+ j+ +# +# +# +# +# +# +# +# :] O) O) m* .# .# +# +# j+ j+ j+ +# +# +# +# +# =- b& t+ p. ). '. [. h+ h+ h+ a# a# K$ S$ h# !. #& R) %& 5$ E. F. G. ]+ +# 2% 2% .* -^ .^ L2 L2 =^ =^ =^ =^ -^ .^ .^ p: 2% 2% +# +# +# +# 9# +# t& ,_ ,_ ,_ ,_ ,_ ,_ ,_ a# a# a# a# a# a# a# a# +# +# .# m* O) O) :] :] m* m* m* m* m* m* m* h+ 1{ c/ {; I- I- {; [* O; q} O( A% v$ T@ h+ [. [. t& t& T@ T@ T@ T@ t& t& t& t& t& t& t& t& t& t& T@ h+ h+ [. [. /. +. +. h+ h+ h+ T@ t& Z% Z% Z% +# O) O) j+ +# :] }| O) m* m* m* m* m* m* m* m* T@ T@ t& t& t& t& T@ T@ Z% Z% Z% t& T@ h+ h+ h+ !5 48 Ka Ka Ka 48 #& e> L> L> L> L> L> L> L> !5 b, b, K> K> :] }| Z% Z% )_ )_ q} O( [| !_ !_ <] t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% A% v$ !_ !_ [| O( q} )_ )_ Z% Z% }| }| b, b, b, }| :] t& t& Z% Z% Z% I$ I$ h+ T@ t& t& t& t& T@ h+ b, b, K> K> :] :] Z% Z% Z% Z% A% A% !_ !_ !_ 61 HB ~D ~D ~D U0 U0 Ma bc Is oh >5 }| b, b, Lb >5 pj Ma Ma $| ,_ ,_ T@ T@ I$ I$ a) *) r} q3 q3 a) qj I$ t& T@ T@ t& Z% I$ F{ F{ F{ I$ I$ Z% Z% Z% '5 34 34 b, K> K> 4! 4! 4! K> b, 34 b, 4! l* j+ Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ Z% t& T@ T@ w$ A% !_ !_ !_ A% A% Z% Z% T@ T@ :] }| b, 34 Xl '5 ,5 F{ F{ I$ Z% Z% t& t& T@ T@ T@ T@ T@ T@ T@ T@ Z% I$ )_ F{ Z% t& I$ )_ I$ I$ I$ I$ I$ I$ I$ O( !_ ./ j; j; <] !_ !_ [| O( O( Z% Z% Z% t& :] :] t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% }| $w $w $w K> :] Z% A% A% A% A% Z% }| b, $w X5 24 #& =- '' '' -) -) Z% Z% Z% Z% )5 )5 $| $| $| $| ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ _y _y _y _y _y _y _y ^_ &' O; O; O; O; O; N; N; xF C- )~ -; yF zF zF AF BF CF DF EF FF GF HF IF JF KF LF MF NF OF PF QF RF SF TF UF VF WF AE XF YF ZF kD `F FE G FE .G +G @G #G $G %G &G *G =G -G ;G >G ,G 'G (d )G !G ~G {G ]G ^G Uh /G (G q_ _G :G 5 >5 I$ I$ Z% Z% A% A% !_ !_ !_ !_ l. 5. u$ w$ v$ A% O( q} v$ v$ v$ v$ v$ v$ ", " + + + + + + + } } } } } } } 3 3 7@ 7@ b+ a+ a+ 0 0 0 0 9+ 9+ P% P% P% R~ ,F iC 0@ 0@ bG bG iu iu iu iu +A +A yx yx yx >] K+ a+ a+ K@ K@ K@ E# E# 3 a+ E# K@ a+ a+ K@ '$ E# E# E# E# E# E# E# E# K@ K@ K@ K@ E# '$ '$ >% C }# }# }# D D E E l l l l l l l (# f^ ,] ,] ,] (# (# m m ,+ C c+ c+ |# a 4@ cG dG eG UD fG gG hG _q ,f /F vC Ny xC i> k+ l& l& k+ i> Q% |% |% |% |% |% |% |% |% $% $% $% $% $% $% $% T$ T$ {@ {@ {@ {@ {@ {@ {@ l& l& l& l& l& l& k+ k+ ~+ h. ]+ j+ j+ ]+ h. ~+ j+ {+ h. {+ ]+ j+ ]+ h. l& m@ U@ .* .* U@ m@ l& m@ m@ m@ {@ {@ {@ l& #% 5! [4 }4 }4 S_ S_ T_ T_ [4 [4 }4 }4 }4 S_ S_ 3{ .@ +# .# +# {+ h. {+ j+ +# +# +# +# +# +# +# +# m* m* .# .# +# j+ j+ ]+ j+ j+ j+ +# +# +# +# +# =- b& t+ p. ). '. [. h+ T@ T@ a# j$ S$ S$ S$ 8# [] e> [$ 7# E. E. ]+ j+ +# +# 2% .* -^ .^ .^ .^ _& =^ =^ {2 .^ .^ .^ .^ * * m* m* m* m* b) m* t& ,_ ,_ ,_ ,_ ,_ ,_ ,_ q$ q$ q$ q$ q$ q$ q$ q$ .# .# .# m* O) O) O) :] m* m* m* m* m* m* m* h+ O; 1{ {; {; [* [* w$ w$ q} O( Z% t& O) m* .# .# T@ T@ t& t& t& t& T@ T@ t& t& t& t& t& t& t& t& T@ h+ h+ [. [. /. +. +. h+ h+ h+ T@ t& Z% Z% Z% +# O) O) j+ +# :] }| O) }| }| }| }| }| }| }| }| t& t& T@ T@ T@ T@ t& t& Z% Z% Z% t& T@ h+ h+ h+ !5 d7 LB LB LB d7 b) $& !5 !5 !5 !5 !5 !5 !5 !5 b, b, b, b, }| }| t& t& )_ )_ q} O( [| !_ !_ <] t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% A% v$ !_ !_ [| O( q} )_ )_ Z% Z% }| }| b, b, b, }| :] t& t& Z% Z% Z% I$ I$ h+ T@ t& t& t& t& T@ h+ 34 b, K> 4! O) :] Z% I$ Z% Z% A% A% !_ !_ !_ 61 HB ~D ~D ~D WG WG Ma $| ^_ ^_ }| }| b, 34 XG ,5 pj Ma Ma $| ,_ ,_ T@ T@ I$ I$ a) qj :y q3 q3 a) qj I$ t& T@ T@ t& Z% I$ F{ F{ F{ I$ I$ Z% Z% Z% '5 >5 >5 }| :] :] O) O) O) :] }| >5 }| O) .# j+ Z% Z% Z% Z% Z% Z% Z% Z% F{ F{ I$ Z% Z% t& T@ w$ A% !_ !_ !_ A% A% Z% Z% T@ T@ O) :] b, 34 34 >5 ,5 )_ F{ F{ I$ Z% Z% t& T@ T@ T@ T@ T@ T@ T@ T@ Z% I$ )_ F{ Z% t& I$ )_ I$ I$ I$ I$ I$ I$ I$ O( [| ./ ./ j; <] <] !_ !_ O( O( Z% Z% Z% t& :] :] t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% }| K> $w $w b, }| Z% A% v$ v$ v$ Z% }| b, b, $w b, 48 r} =) =) s% s% h+ h+ Z% Z% )5 )5 $| $| $| $| ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ cc P6 |* |* |* 1{ 1{ YG YG ZG e& +& `G H .H +H @H #H $H %H &H *H =H -H ;H >H ,H 'H )H !H ~H {H ]H ^H /H (H _H :H K> K> K> :] :] t& t& Z% Z% A% A% !_ !_ !_ !_ w$ w$ w$ w$ v$ v$ v$ v$ v$ v$ v$ v$ v$ v$ ", "4 4 4 4 4 4 4 } } } } } } } 3 6+ 7@ 7@ 7@ a+ a+ 0 0 0 0 9+ 9+ P% P% P% R~ ,F 0@ 0@ FH a@ bG e@ iu iu iu +A +A yx yx yx >] K+ a+ a+ K@ K@ K@ E# E# 3 a+ E# K@ a+ a+ K@ '$ E# E# E# E# E# E# E# E# K@ a+ a+ K@ K@ '$ >% ,% }# }# }# D D E E E l l l l l l l E# ._ M6 M6 M6 ._ ._ [# [# V C M c+ |# 1$ *@ B@ GH HH !F _^ IH JH KH LH ko vC Ny xC I ,I ,I 'I OG )I !I ~I {I ]I SG |3 u= ^I /I c- `@ (I Q+ _$ '% a& W* P# =$ V_ Y+ ~+ ` ` ` ` ` ` ` . . ` Z Z ` . . i+ ,+ C ,+ ~+ h. ~+ V i+ ~+ ~+ ~+ h. h. {+ {+ l& l& l& l& l& l& #% #% $% $% ;_ ;_ ;_ ;_ ;_ $% !% k+ k+ k+ k+ k+ k+ k+ l& {@ m@ m@ m@ m@ {@ T$ |% |% |% |% |% |% |% |% $% $% $% $% $% $% $% T$ T$ {@ {@ {@ {@ {@ {@ {@ k+ l& {@ m@ m@ {@ {@ l& ~+ h. ]+ j+ j+ ]+ h. ~+ j+ ]+ h. {+ j+ +# ]+ h. m@ m@ U@ U@ U@ U@ m@ m@ m@ m@ m@ {@ {@ {@ l& #% 3{ S_ S_ S_ }4 }4 }4 }4 [4 [4 [4 }4 }4 S_ S_ 3{ .@ +# .# +# {+ h. {+ j+ +# +# +# +# +# +# +# +# +# +# j+ j+ j+ ]+ ]+ ]+ +# +# +# +# +# j+ j+ j+ =- b& t+ p. ). '. [. h+ T@ h+ j$ 8# S$ S$ K$ j$ b) e> %& F. F. G. j+ +# +# +# 2% .* .* .^ .^ .^ _& =^ {2 L2 .^ .^ .^ -^ * * m* m* m* m* b) m* T@ q$ q$ q$ q$ q$ q$ q$ q$ q$ q$ q$ q$ q$ q$ q$ m* m* m* m* m* m* m* m* m* m* m* m* m* m* m* h+ <] 1{ 1{ {; [* O; w$ v$ A% v$ t& T@ m* m* .# .# h+ T@ t& Z% Z% t& T@ h+ t& t& t& t& t& t& t& t& h+ h+ h+ h+ h+ [. [. [. T@ T@ T@ T@ t& t& t& t& O) >5 >5 m* m* '5 ,5 }| >5 >5 >5 >5 >5 >5 >5 >5 Z% Z% t& T@ T@ t& Z% Z% t& t& t& t& T@ T@ T@ T@ d7 d7 hu hu hu d7 !5 [] !5 !5 !5 !5 !5 !5 !5 !5 b, b, 34 34 >5 }| t& T@ I$ I$ O( A% !_ !_ !_ !_ t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% A% A% !_ !_ !_ A% O( I$ I$ Z% Z% }| }| b, b, b, }| :] t& t& Z% Z% Z% I$ I$ T@ t& Z% Z% Z% Z% t& T@ Xl 34 K> 4! O) :] I$ F{ Z% Z% A% A% !_ !_ !_ 61 HB _I _I ~D :I :I Ma (* ^_ ^_ }| }| 34 Xl XG O* ui $| $| $| )5 ,_ t& t& I$ I$ qj %n D, :y q3 a) *) Z% t& t& t& Z% I$ I$ I$ I$ I$ I$ Z% Z% t& t& }| }| }| }| }| :] :] :] :] :] }| }| }| :] O) O) Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ Z% Z% Z% A% A% !_ !_ !_ A% A% Z% Z% T@ T@ :] :] K> K> b, }| '5 F{ I$ I$ I$ I$ Z% Z% t& t& t& t& t& t& t& t& t& I$ F{ I$ t& t& Z% F{ Z% Z% Z% Z% Z% Z% Z% A% / gd ./ j; <] <] <] !_ O( O( Z% Z% Z% t& :] :] t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% }| K> 24 b, >5 I$ A% v$ v$ v$ v$ t& Z% }| b, G7 34 Ka q3 q3 r} -) s% h+ h+ Z% Z% )5 )5 $| $| $| $| )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 hd )5 hd Z% 61 (= !5 a) F{ ec q} Z% *) *) *) *) *) *) *) *) *) *) *) *) *) *) '_ A% !_ !_ !_ A% A% Z% Z% Z% Z% }| }| b, b, b, }| }| Z% Z% Z% Z% I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% *) =) =) *j =) *j =) *j =) *j =) *j r} %w r} %w r} *) Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& I$ I$ Z% Z% Z% t& t& t& t& Z% Z% Z% t& T@ [. [. I$ I$ Z% Z% t& T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ h+ t& t& t& t& t& t& t& t& 4! 4! 4! 4! O) O) T@ T@ Z% Z% A% A% !_ !_ !_ !_ A% A% v$ v$ w$ w$ u$ u$ v$ v$ v$ v$ v$ v$ ", "} } } } } } } } } } } } } } 3 a+ b+ 7@ 7@ 6+ 6+ 0 0 0 0 9+ 9+ P% P% P% R~ ,F 9@ >@ @J -, b@ '@ -] -] -] @^ @^ >] >] >] >] K+ a+ a+ K@ K@ K@ E# E# 3 a+ E# K@ a+ a+ K@ '$ E# E# E# E# E# E# E# E# '$ E# K@ a+ K@ E# '$ >% E E E n n l l l l l l l l l l E# M_ w8 w8 w8 M_ M_ E E C D 0% 0% Q$ b% P% *@ A@ 7: )F oC #J $J %J &J ko :r Ny ru xC wC iG jG Oy qu :r J Ld Dn }C ,J }C k+ {@ U@ 2% 2% U@ m@ ~+ h. ]+ j+ j+ ]+ h. ~+ +# ]+ {+ {+ j+ +# j+ {+ U@ U@ m@ m@ m@ m@ U@ U@ m@ m@ m@ {@ {@ {@ l& #% )= d= d= 3{ 2{ 5! 5! 4{ 4{ 4{ 5! 5! 2{ 2{ 2{ 3{ .@ +# .# +# {+ h. {+ j+ +# +# +# +# +# +# +# +# ]+ ]+ j+ j+ j+ j+ +# +# m* .# .# +# j+ j+ ]+ ]+ =- b& t+ p. ). '. [. h+ h+ [. 8# !. S$ K$ J$ q$ +# 9# 9# H. 9# +# .# m* +# +# +# .* .* * * .^ d& _& {2 L2 p: .^ -^ -^ .* .* .# .# .# .# $& .# h+ a# a# a# a# a# a# a# q$ q$ q$ q$ q$ q$ q$ q$ :] :] O) O) m* .# +# +# m* m* m* m* m* m* m* h+ v$ <] O; [* u$ w$ v$ v$ h+ h+ m* m* m* .# l* .# h+ T@ t& Z% Z% t& T@ h+ t& t& t& t& t& t& t& t& h+ h+ h+ T@ T@ T@ T@ t& t& t& t& t& T@ T@ T@ T@ O) >5 >5 m* m* '5 ,5 }| }| }| }| }| }| }| }| }| F{ I$ Z% t& t& Z% I$ F{ T@ T@ T@ T@ t& t& t& t& }| :] :] :] :] }| >5 >5 :] :] :] :] :] :] :] :] b, b, 34 Xl >5 }| T@ h+ T@ t& v$ v$ <] !_ !_ !_ t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% A% A% !_ !_ <] v$ v$ t& T@ Z% Z% }| }| b, b, b, }| :] t& t& Z% Z% Z% I$ I$ t& Z% I$ I$ I$ I$ Z% t& Xl 34 K> C, m* :] I$ F{ Z% Z% A% A% !_ !_ !_ 61 HB _I sJ ~D tJ tJ Ma /* s6 Is '5 >5 34 34 Kb '5 5[ (* (* $| )5 )5 Z% Z% Z% I$ %n uJ c, D, q3 *) @% T@ t& Z% I$ I$ I$ I$ Z% Z% Z% t& t& t& T@ T@ t& t& t& Z% Z% Z% Z% Z% Z% Z% t& t& Z% Z% I$ F{ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ q} hd 61 61 61 hd hd )5 )5 ,_ ,_ 5[ 5[ ac ed ed fd }| Z% Z% Z% Z% I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% T@ Z% I$ Z% T@ h+ t& I$ t& t& t& t& t& t& t& v$ / gd ./ j; O; <] <] <] O( O( Z% Z% Z% t& :] :] t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% }| 4! 24 b, >5 I$ A% v$ O; O; <] v$ t& }| 34 G7 34 -j q3 q3 r} *) *) Z% Z% Z% Z% )5 )5 $| $| $| $| (* (* ,_ ,_ ,_ ,_ E) E) v$ v$ v$ <] v$ <] d# j; h= vJ wJ xJ V/ V/ yJ yJ zJ AJ BJ CJ DJ EJ 1y qA FJ GJ HJ IJ JJ KJ LJ MJ 7D NJ OJ PJ QJ RJ SJ TJ UJ VJ WJ XJ YJ ZJ 3H `J K .K tI +K @K +K #K $K %K &K *K =K -K ;K >K ,K 'K )K !K ~K {K ]K ^K /K (K _K :K K> K> K> :] :] t& t& Z% Z% A% A% !_ !_ !_ !_ A% A% v$ v$ w$ w$ u$ u$ v$ v$ v$ v$ v$ v$ ", "| | | | | | | } } } } } } } 3 K@ b+ 7@ 7@ 6+ 6+ 4 0 0 0 9+ 9+ P% P% P% P% @ @J -, b@ '@ -] -] -] @^ @^ >] >] >] k3 a+ a+ a+ K@ K@ K@ E# E# 3 a+ E# K@ a+ a+ K@ '$ E# E# E# E# E# E# E# E# ^% >% E# K@ a+ a+ K@ E# l l + + + 0 0 0 l l l l l l l E# O6 G) G) G) O6 O6 D D E l )$ H# Q$ Q$ b% P% c gK hK iK jK kK lK %} tC 0l vC ru xC wC iG mK nK vC oK wn pK &} qK +q rK $7 sK j1 V: )8 tK jl jl s) En 0> 'J @y uK uK )J )J 9~ 9~ 9~ 9~ }f }g vK wK xK yK zK AK BK CK DK EK FK GK HK IK JK KK LK MK NK OK PK QK RK SK SK TK bJ UK VK WK XK YK ZK =4 `K L .L aG +L @L #L $L %L oJ qJ &L qJ /& D. ` ` ` ` ` ` ` .. Z . T T . Z .. V ,+ C ,+ ~+ h. ~+ i+ i+ i+ i+ ~+ ~+ h. h. h. l& l& l& l& l& l& #% #% 0' 0' he he he he he he $% T$ T$ T$ T$ T$ T$ T$ t% M$ M$ T$ !% L_ x5 O6 |% |% |% |% |% |% |% |% $% $% $% $% $% $% $% T$ T$ {@ {@ {@ {@ {@ {@ {@ i> k+ m@ 2% .* .* 2% 2% ~+ h. ]+ j+ j+ ]+ h. ~+ +# ]+ {+ {+ j+ +# j+ {+ .* U@ m@ l& l& m@ U@ .* m@ m@ m@ {@ {@ {@ l& l& Z+ )= d= 3{ 2{ 5! 4{ G{ 4{ 4{ 5! 5! 2{ 2{ 2{ +@ ]+ +# .# +# {+ h. {+ j+ +# +# +# +# +# +# +# +# ]+ ]+ j+ j+ +# .# .# .# O) m* .# +# j+ ]+ {+ {+ =- b& t+ p. ). '. [. h+ [. /. !. !. S$ K$ /* )5 j+ j+ 9# .# m* m* m* O) +# +# +# .# .# * m* * L) _& {2 *L p: .^ -^ o^ 2% 2% +# +# +# +# 9# +# [. j$ j$ j$ j$ j$ j$ j$ q$ q$ q$ q$ q$ q$ q$ q$ >5 }| :] O) m* +# j+ j+ m* m* m* m* m* m* m* h+ v$ <] O; [* u$ w$ v$ v$ /. /. .# .# .# .# l* m* m* T@ t& Z% Z% t& T@ h+ t& t& t& t& t& t& t& t& h+ h+ T@ T@ t& Z% Z% Z% Z% Z% Z% t& T@ h+ h+ h+ +# O) O) j+ +# :] }| O) :] :] :] :] :] :] :] :] )_ F{ Z% t& t& Z% F{ )_ h+ h+ h+ T@ t& Z% Z% Z% }| :] O) m* O) }| '5 O* :] :] :] :] :] :] :] :] b, b, 34 Xl >5 }| T@ [. h+ h+ u$ w$ <] <] !_ !_ t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% A% A% !_ <] <] w$ u$ h+ h+ Z% Z% }| }| b, b, b, }| :] t& t& Z% Z% Z% I$ I$ Z% I$ I$ F{ F{ I$ I$ Z% Ds 34 K> C, m* :] I$ )_ Z% Z% A% A% !_ !_ !_ 61 HB _I sJ ~D tJ tJ Ma J$ =L O4 O* '5 b, b, La :] fd /* (* (* )5 ^_ I$ F{ Z% I$ %n uJ c, D, q3 *) v+ [. t& I$ F{ F{ I$ I$ Z% t& t& t& T@ T@ h+ h+ T@ T@ t& t& Z% I$ I$ F{ I$ Z% t& t& t& I$ )_ Y% Z% Z% Z% Z% Z% Z% Z% Z% t& t& Z% I$ I$ F{ )_ X[ hd 61 61 61 hd hd )5 )5 )5 )5 ui 5[ ed =5 =5 * O) T@ t& t& Z% I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ h+ t& Z% t& h+ h+ T@ Z% T@ T@ T@ T@ T@ T@ T@ w$ / -L ./ j; O; O; <] <] O( O( Z% Z% Z% t& :] :] t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% }| 4! K> }| F{ F{ A% <] O; O; O; v$ v$ }| >5 34 34 L> =) r} q3 a) qj )_ )_ Z% Z% )5 )5 $| $| $| $| /* /* q$ q$ q$ q$ &' &' w$ O; O; N; N; YG e7 YG ;L >L >L >L h( h( ,L 'L )L !L ~L oA {L ]L ^L /L (L _L :L 48 -) w$ u$ 5. T@ T@ T@ T@ T@ T@ T@ T@ I$ I$ I$ I$ I$ I$ I$ O( A% !_ !_ !_ A% A% Z% Z% Z% Z% }| }| b, b, b, }| }| Z% t& t& T@ h+ h+ h+ I$ I$ I$ I$ I$ I$ I$ a) *j fK fK fK fK fK fK fK SL 6z 6z ;x fK fK Yl &h @% h+ h+ h+ h+ h+ h+ h+ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% h+ Z% F{ x8 )_ Z% h+ +. .. @. [. t& I$ F{ F{ F{ t& t& t& Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& 34 34 34 34 >5 >5 I$ I$ Z% Z% A% A% !_ !_ !_ !_ w$ w$ w$ w$ v$ v$ v$ v$ v$ v$ v$ v$ v$ v$ ", "1 1 | | } } 4 } | | 1 1 | | 3 ~ b+ 6& 6& K@ 6+ + n + + H+ H+ 5& 5& 5& 5& % >% '$ K@ a+ K@ K@ K@ K@ K@ K@ K@ K@ E# '$ '$ '$ '$ E# K@ a+ '$ '$ '$ '$ '$ '$ '$ '$ l l l l l l l l l l l l l l l E# '$ 6& 6& 6& '$ '$ n n E E %5 TL UL UL UL 3& ++ !> hm hK VL WL Uf bm XL vn YL ZL `L M iG wC .M +M @M wn -g lG M ,M 'M )M [g !M [g ~M {M ]M ^M /M (M _M :M F pM #_ qM 5- %L rM &L }& D. ` Z Z Z Z Z Z +. .. ` ` .. .. ` T i+ i+ i+ i+ i+ i+ i+ i+ {+ h. ~+ i+ i+ h. ]+ j+ Q% k+ U@ * * U@ !% 6c 0' 0' he 2b 2b ;_ ;_ ;_ |% |% |% |% |% |% |% |% $% $% $% $% $% $% $% $% |% |% |% |% |% |% |% |% 9c 8c |% $% &) $% |% !% !% l& m@ U@ U@ m@ l& k+ U@ m@ l& k+ k+ l& m@ U@ h. h. h. {+ ]+ ]+ j+ j+ j+ ]+ {+ h. {+ ]+ +# m* {@ m@ U@ 2% * fd 5[ ui U@ U@ U@ U@ U@ U@ U@ U@ +@ .@ @ `+ `+ @ .@ +@ +@ .@ @ `+ @ .@ J- C, +# +# +# +# +# +# +# +# j+ j+ j+ +# +# +# .# .# j+ j+ ]+ ]+ j+ +# m* m* .# .# .# .# .# .# .# .# t+ r$ =- '' s% @% /. +. )_ t& 8# 8# J$ J$ i# 5# 2% 2% +# +# +# +# +# +# O) m* m* .# .# +# 9# j+ o^ {2 L2 *L p: p: p: .^ * * O) O) :] }| d7 }| h+ a# a# a# a# a# a# a# ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ :] O) .# +# +# .# O) :] m* m* m* m* m* m* m* h+ v$ <] v$ v$ v$ v$ t& t& }| }| :] :] 4! 4! C, m* :] t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& h+ h+ T@ T@ t& Z% Z% Z% .# m* m* O) :] }| }| >5 :] :] :] :] :] :] :] :] Z% Z% Z% Z% Z% Z% Z% Z% Z% T@ h+ h+ t& Z% t& h+ O) O) :] :] }| >5 >5 '5 >5 >5 >5 >5 >5 >5 >5 >5 b, b, b, b, }| }| Z% Z% T@ T@ w$ w$ O; O; O; O; h+ T@ t& Z% Z% t& T@ h+ F{ t& [. h+ I$ )_ F{ A% v$ <] <] <] v$ v$ t& t& t& t& :] }| b, b, b, }| }| Z% Z% Z% Z% Z% Z% Z% Z% t& T@ T@ T@ Z% F{ )_ b, b, K> K> O) m* h+ h+ F{ I$ O( A% <] <] O; P6 JB !D IB ~D dc U0 (* (* Is oh '5 >5 34 b, Lb :] ti Ma Ma Ma ^_ ^_ I$ I$ /. T@ a) qj r} '' =- s% qj F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ Z% Z% I$ F{ I$ Z% T@ [. F{ F{ F{ F{ F{ F{ F{ F{ Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ O( sM tM tM HB dc U0 $| (* /* (* C' p] uM Es si fd }| Z% Z% Z% Z% Z% Z% Z% )_ F{ Z% t& t& Z% F{ )_ t& t& t& t& t& t& t& t& I$ I$ I$ I$ I$ I$ I$ O( <] j; j; j; <] <] <] <] u$ u$ h+ h+ h+ h+ m* m* Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% }| 4! 4! O) T@ T@ w$ O; 1{ -L / q} q} '5 '5 Xl Xl 48 r} r} r} *) *) Z% Z% Z% Z% )5 )5 $| $| $| $| _y _y _y _y ^_ ^_ O( O( ', Gs vM zk S6 s} `G wM d* ]5 xM th yM i- zM AM BM CM @H DM EM iM FM FJ GM HM IM JM KM LM MM NM 2L OM PM QM RM SM TM UM VM WM XM jL YM +K +K ZM `M hL hL iL N .N +N @N #N $N %N &N *N =N -N ;N >N ,N 'N )N !N ~N {N ]N ^N /N (N qB _N :N GL 5 I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ a) dN SL SL 6z 6z ;x ;x ;x eN fN gN SL ;x fK Yl a' -) Z% F{ )_ )_ F{ Z% t& I$ I$ I$ I$ I$ I$ I$ I$ F{ I$ I$ Z% t& t& T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ t& t& t& t& t& t& t& t& Z% T@ h+ t& I$ F{ I$ Z% /. [. [. h+ T@ T@ t& t& t& t& t& t& t& t& t& t& b, b, b, b, }| }| Z% Z% F{ I$ O( A% <] O; O; O; w$ w$ v$ v$ A% O( O( O( A% v$ w$ w$ w$ A% ", "| | | } 4 4 4 4 } } | | } } 6+ 2 b+ ,& ,& a+ 3 0 + + + H+ H+ 5& 5& 5& 5& % >% '$ K@ a+ K@ K@ K@ K@ K@ K@ K@ K@ '$ '$ '$ '$ '$ K@ a+ 6+ '$ '$ '$ '$ '$ '$ '$ '$ l l l l l l l l l l l l l l l E# '$ 6& 6& 6& '$ '$ n n l l J) TL hN hN `& I) 0 6 iN jN kN lN mN nN oN {j 8l pN qN xC iG rN sN tN uN qu kt =g vN wN pt xN yN Oz o0 zN 2r V: .s AN BN Lu Lu 2A xo CN 'M DN EN !M 1i [g ~M {M @~ FN GN HN IN JN KN LN MN NN ON PN QN RN SN TN UN J6 VN WN XN YN ZN cM `N O .O +O @O #O $O %O &O =v *O =O -O ;O >O ,O 'O L# @_ $_ nJ $L oJ P# &$ . . . . ` Z .. @. Z ` ` .. .. Z . i+ i+ i+ i+ i+ i+ i+ i+ h. h. ~+ i+ ~+ h. ]+ j+ l& l& {@ {@ {@ {@ #% #% 0' 0' he 2b 2b ;_ ;_ ;_ |% |% |% |% |% |% |% |% $% $% $% $% $% $% $% $% &) &) &) &) &) &) &) &) 8c 0' $% &) &_ &) $% #% T$ m@ m@ U@ U@ m@ m@ {@ U@ m@ l& k+ k+ l& m@ U@ h. h. h. {+ ]+ ]+ ]+ j+ j+ ]+ {+ h. {+ ]+ +# m* 2% 2% 2% 2% 2% 2% 2% 2% U@ U@ U@ U@ U@ U@ U@ U@ J- +@ .@ @ @ .@ +@ J- +@ .@ @ @ @ +@ J- l* j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ +# +# +# .# .# j+ j+ j+ ]+ j+ +# .# m* j+ j+ +# +# +# +# j+ j+ t+ r$ =- '' s% @% /. +. h+ [. 8# 8# J$ J$ K$ S$ 2% 2% 2% 2% +# +# +# +# m* m* m* .# $& 9# 9# +# o^ {2 L2 *L p: p: p: .^ * * m* O) O) O) [] :] h+ a# a# a# a# a# a# a# ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ :] O) .# +# +# .# O) :] :] :] :] :] :] :] :] t& v$ <] v$ v$ v$ v$ t& t& }| }| :] :] 4! 4! C, C, :] t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& h+ h+ T@ T@ T@ T@ t& t& }| :] :] :] O) O) O) m* :] :] :] :] :] :] :] :] Z% Z% Z% Z% Z% Z% Z% Z% I$ t& h+ T@ Z% I$ Z% T@ :] :] :] }| }| }| }| }| }| }| }| }| }| }| }| }| b, b, b, b, }| }| Z% Z% t& t& v$ v$ <] <] <] <] T@ t& Z% I$ I$ Z% t& T@ I$ t& [. h+ Z% F{ F{ A% v$ <] <] <] v$ v$ t& t& Z% Z% }| }| b, K> K> :] >5 I$ I$ I$ I$ I$ I$ I$ I$ Z% t& t& t& Z% F{ )_ 34 b, b, b, :] O) T@ T@ I$ I$ A% A% !_ !_ <] V5 HB ~D ~D ~D dc dc Ma Ma oh oh '5 >5 34 b, Lb }| ti Ma Ma Ma ^_ ^_ I$ I$ h+ t& qj a) =) '' =) *) qj F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ Z% Z% I$ F{ I$ Z% T@ h+ F{ F{ F{ F{ F{ F{ F{ F{ Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ cc ec tM tM HB dc U0 $| $| /* (* C' _y )O Es si p: }| Z% Z% Z% Z% Z% Z% Z% x8 )_ I$ Z% t& Z% I$ I$ t& t& t& t& t& t& t& t& I$ I$ I$ I$ I$ I$ I$ O( <] j; j; j; <] <] <] <] v$ v$ t& t& t& t& :] :] Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% :] :] :] t& v$ <] j; j; ./ ./ !_ A% Z% }| b, }| r} r} r} r} *) *) Z% Z% Z% Z% )5 )5 $| $| $| $| _y _y _y _y ^_ ^_ O( [| i; !O T6 ~O Ak Ak {O ]O ^O 0! K! t: (; /O #6 !L BM (O (O _O :O /L 5 I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% *) dN dN 6z 5z 6z %w ;x %w 6z 5z ;x %w ;x %w ;x %w -) Z% I$ F{ F{ I$ Z% t& Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& T@ T@ T@ T@ T@ T@ T@ T@ t& t& t& t& t& t& t& t& t& T@ h+ T@ Z% I$ Z% t& h+ h+ T@ T@ T@ T@ t& t& t& t& t& t& t& t& t& t& b, b, b, b, }| }| Z% Z% T@ T@ w$ v$ <] <] <] <] w$ v$ v$ v$ A% O( O( O( A% v$ w$ u$ w$ v$ ", "} } 4 4 4 0 0 4 4 4 4 4 4 4 6+ 2 7@ M% M% 6+ 3 } 4 + + H+ H+ 5& 5& 5& 5& 5& 5& 5& 5& H+ H+ + + 0 } 2 3 M% h> h> h> K@ E# E# '$ '$ E# E# K@ K@ K@ K@ K@ K@ K@ K@ K@ >% >% >% >% E# K@ 6+ 3 '$ '$ '$ '$ '$ '$ '$ '$ n n n n n n n n n n n n n n n '$ p x x x p p n n J+ J+ k~ TL RO SO TO UO J+ ~ =# k9 VO WO XO YO cm rm tm @M wv ru wC ZO `O P .P +P vC :r {i ;A @P #P 1K $P %P Rd p0 p_ Hi &P *P iB iB E5 so P x! ,P 'P )P !P ~P {P ]P ^P /P (P _P :P

9& 9& i> T$ t% 0' 0' he 2b 2b ;_ ;_ ;_ 2b 2b 2b 2b 2b 2b 2b 2b ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ &_ &_ &_ &_ &_ &_ &_ &_ |% |% &) &_ &_ &_ &) M$ Y_ U@ U@ m@ m@ U@ U@ 2% U@ m@ l& k+ k+ l& m@ U@ h. h. {+ {+ {+ ]+ ]+ ]+ j+ ]+ {+ h. {+ ]+ +# m* * .* 2% U@ m@ {@ l& k+ U@ U@ U@ U@ U@ U@ U@ U@ .# +# j+ j+ j+ j+ +# .# j+ ]+ ]+ ]+ ]+ j+ .# .# j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ +# +# +# .# .# +# j+ j+ j+ j+ +# .# m* h. ]+ j+ +# +# j+ ]+ h. r$ b& b& =- @% +% [. /. .. +. j$ j$ K$ K$ /* $| .^ .^ .^ .^ * * m* m* m* m* b) $& e> a- a- 9# o^ {2 L2 *L p: p: p: .^ * * m* m* m* .# $& .# h+ a# a# a# a# a# a# a# ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ :] O) .# +# +# .# O) :] }| }| }| }| }| }| }| Z% v$ v$ v$ v$ t& t& :] :] :] :] K> K> H{ H{ H{ 4! :] t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& T@ T@ T@ h+ h+ h+ h+ h+ ,5 '5 >5 :] O) .# +# j+ :] :] :] :] :] :] :] :] Z% Z% Z% Z% Z% Z% Z% Z% F{ Z% t& t& I$ F{ I$ t& ui ui ui ui ui 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ b, b, b, b, }| }| Z% Z% Z% Z% A% A% !_ !_ !_ !_ t& Z% I$ I$ I$ I$ Z% t& I$ t& h+ T@ Z% F{ I$ O( v$ <] <] <] v$ v$ t& t& F{ I$ >5 }| K> K> 4! O) '5 F{ F{ F{ F{ F{ F{ F{ )_ )_ F{ I$ Z% I$ I$ F{ 34 34 34 b, }| }| t& t& Z% Z% A% A% !_ [| [| +2 6 sJ _I ~D dc WG Tt Tt oh oh '5 >5 34 b, Lb }| ti Ma Ma Ma ^_ ^_ I$ I$ Z% F{ qj a) =) =) q3 %n *) Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% A% A% O( O( O( A% v$ w$ A% A% A% A% A% A% A% A% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ cc ec tM tM HB dc U0 $| $| (* (* C' _y )O Es si og }| Z% Z% Z% Z% Z% Z% Z% x8 )_ F{ Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& I$ I$ I$ I$ I$ I$ I$ O( <] j; j; j; <] <] <] <] A% A% Z% Z% Z% Z% }| }| Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% >5 >5 >5 I$ O( [| gd gd ./ ./ !_ A% Z% Z% }| }| r} r} r} r} *) *) Z% Z% Z% Z% )5 )5 $| $| $| $| lP lP _y _y ^_ ^_ O( [| N; ZG `G mP nP oP pP qP rP u} `[ u} sP tP )L uP PG vP _O wP 'I xP MG yP [d zP AP MM NJ BP CP DP EP FP GP HP IP JP KP eO LP MP NP NP YM OP PP QP RP SP SP G TP UP XJ .K aL VP WP XP YP ZP `P Q .Q +Q @Q #Q $Q %Q &Q *Q =Q -Q ;Q >Q ,Q 3K 'Q EO )Q !Q ~Q {Q ]Q ^Q 5N OL /Q tw NO gu (Q _Q :Q QO K> 4! O) >5 I$ I$ I$ I$ I$ I$ I$ t& t& t& t& t& t& t& -) :y q3 5z q3 %w r} *j =) e= =- a' =) %w q3 dN :y s% t& Z% Z% Z% Z% t& T@ t& t& t& t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& T@ h+ [. h+ t& Z% t& T@ Z% Z% t& t& t& t& T@ T@ t& t& t& t& t& t& t& t& b, b, b, b, }| }| Z% Z% [. [. u$ w$ <] !_ !_ [| v$ v$ v$ A% A% A% O( O( A% v$ w$ u$ u$ u$ ", "4 4 4 0 0 0 0 0 0 + + + + 0 a+ 3 7@ b+ b+ 6+ 3 | | + + H+ H+ 5& 5& 5& 5& 5& 5& 5& 5& H+ H+ + + 0 0 6+ 6+ b+ ,& 6& 6& E# E# E# E# E# E# E# E# K@ K@ K@ K@ K@ K@ K@ K@ >% >% >% >% E# a+ 6+ 3 '$ '$ '$ '$ '$ '$ '$ '$ n n n n n n n n n n n n n n n p p 1( x x p p n n I+ I+ J) TL RO SO SO }Q ;] :# 1 @$ 68 >j |Q << 1Q 2Q vn 3Q @M ru xC .M 4Q 5Q .P 6Q .M wv XD 7Q 8Q 9Q 0Q aQ Xv bQ cQ td dQ eQ fQ gQ hQ *P 8s A6 iQ CN 'M jQ kQ lQ mQ nQ oQ pQ qQ rQ sQ tQ uQ vQ wQ xQ yQ zQ AQ BQ CQ DQ EQ FQ GQ HQ IQ 6D JQ KQ LQ MQ NQ OQ PQ QQ RQ SQ iM TQ UQ ^L VQ iM hM WQ XQ Zf YQ l; Zf R+ P+ t+ ). Z . O O T ` Z Z . T ` .. +. @. Z ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ h. {+ {+ ]+ m@ l& Q% U% U% Q% #% M$ 0' 0' he 2b 2b ;_ ;_ ;_ 2b 2b 2b 2b 2b 2b 2b 2b ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ &) &) &) &) &) &) &) &) $% $% &) &_ &_ &_ &_ t% =5 .* U@ m@ m@ U@ .* * U@ m@ l& k+ k+ l& m@ U@ {+ {+ {+ {+ {+ {+ ]+ ]+ j+ ]+ {+ h. {+ ]+ +# m* .* 2% U@ m@ {@ l& k+ i> U@ U@ U@ U@ U@ U@ U@ U@ +# j+ j+ j+ j+ j+ j+ +# j+ j+ j+ j+ j+ +# .# .# ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ j+ j+ j+ +# +# +# .# .# +# +# j+ j+ j+ +# +# .# h. ]+ +# .# .# +# ]+ h. b& b& b& b& +% +% [. [. ` +. a# a# S$ S$ /* bc .^ .^ .^ .^ * * m* m* .# .# $& $& e> e> e> $& o^ {2 L2 *L p: p: p: .^ fd * m* .# .# +# H. j+ h+ a# a# a# a# a# a# a# ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ :] O) .# +# +# .# O) :] :] :] :] :] :] :] :] :] t& v$ v$ v$ t& t& :] :] :] :] K> K> H{ H{ H{ 4! :] t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& T@ T@ h+ h+ [. /. /. '5 >5 }| :] O) m* .# +# :] :] :] :] :] :] :] :] Z% Z% Z% Z% Z% Z% Z% Z% )_ I$ t& Z% F{ )_ I$ Z% pj ti ti ui 5[ 5[ fd fd fd fd fd fd fd fd fd fd b, b, b, b, }| }| Z% Z% I$ I$ O( O( [| [| [| [| I$ I$ I$ I$ I$ I$ I$ I$ Z% t& T@ T@ t& I$ I$ q} A% !_ !_ !_ A% A% Z% Z% )_ F{ >5 }| K> 4! C, m* '5 F{ F{ F{ F{ F{ F{ F{ Y% x8 )_ F{ F{ I$ I$ I$ 34 34 34 34 >5 >5 I$ I$ t& t& A% A% [| / / ZQ pg _I _I ~D dc WG bc bc ^_ ^_ >5 >5 34 34 `z >5 ti Ma Ma Ma ^_ ^_ I$ I$ )_ )_ %n a) =) =) D, `Q *) Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% A% A% A% A% A% A% v$ v$ A% A% A% A% A% A% A% A% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ cc dc HB HB HB dc dc Ma Ma (* $| C' C' Es Es Es og ti I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ O( !_ ./ ./ ./ !_ !_ !_ !_ A% A% Z% Z% Z% Z% }| }| Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% '5 '5 F{ q} / -L -L -L -L -L / / q} F{ '5 '5 r} r} r} r} *) *) Z% Z% Z% Z% )5 )5 $| $| $| $| lP lP _y _y ^_ cc O( Gs Y[ s} mP R .R +R @R @R #R $R $R %R &R *R =R -R ;R >R ,R 'R )R cM !R ~R {R ]R ]R ^R /R PJ (R _R :R K> K> :] >5 I$ I$ I$ I$ I$ I$ I$ T@ T@ T@ T@ T@ T@ T@ T@ a) a) q3 *) r} -) =) -) r$ +% =- s% =) *) q3 qj T@ T@ t& t& t& t& T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ t& t& Z% I$ I$ F{ I$ I$ I$ I$ I$ I$ I$ I$ t& t& t& t& t& t& t& t& h+ [. /. [. T@ Z% t& h+ F{ I$ I$ Z% t& t& T@ T@ t& t& t& t& t& t& t& t& b, b, b, b, }| }| Z% Z% T@ T@ w$ v$ !_ !_ !_ [| v$ v$ A% A% A% A% A% A% v$ v$ w$ u$ 5. 5. ", "0 0 0 4 4 4 4 0 + l l l l + a+ 3 -@ -@ 7@ 6+ 6+ } | + + H+ H+ 5& 5& 5& 5& 5& 5& 5& 5& H+ H+ + + n n E# a+ 7@ 7@ b+ b+ E# E# E# E# E# E# E# E# K@ K@ K@ K@ K@ K@ K@ K@ >% >% >% >% E# K@ 6+ 3 '$ '$ '$ '$ '$ '$ '$ '$ E E E E E E E E E E E E E E E w p 1( 1( 1( p p n n [# [# GR GR HR HR ,B )B mf o} 0 8 A@ IR JR KR LR MR al sm qu oK ru .M NR OR PR QR RR SR TR UR VR WR XR YR ZR `R S b] .S +S @S >| #S Y4 $S =l %S &S *S =S -S ;S >S ,S 'S )S !S ~S {S ]S ^S /S (S _S :S i> k+ !% !% 0' 0' he 2b 2b ;_ ;_ ;_ 2b 2b 2b 2b 2b 2b 2b 2b ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ |% |% |% |% |% |% |% |% &) &) &) &) &) &_ ~_ Y_ =5 .* U@ m@ m@ U@ .* * U@ m@ l& k+ k+ l& m@ U@ ]+ ]+ {+ {+ {+ {+ {+ {+ j+ ]+ {+ h. {+ ]+ +# m* {@ {@ {@ {@ {@ {@ {@ {@ U@ U@ U@ U@ U@ U@ U@ U@ {+ ]+ ]+ ]+ ]+ ]+ ]+ {+ ]+ j+ j+ +# .# .# .# .# j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ +# +# +# .# .# .# +# +# j+ j+ j+ +# +# j+ +# .# m* m* .# +# j+ b& b& b& b& +% +% [. [. @. [. ,_ q$ h# i# K$ (* L2 L2 .^ .^ * * * m* .# $& $& $& e> e> R) $& o^ {2 L2 *L p: p: p: .^ fd * m* .# .# +# H. j+ h+ a# a# a# a# a# a# a# ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ :] O) .# +# +# .# O) :] O) O) O) O) O) O) O) O) t& t& t& t& :] :] :] :] 4! 4! H{ H{ 24 24 X5 24 :] t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& T@ T@ h+ [. [. [. :] :] :] :] O) O) O) O) :] :] :] :] :] :] :] :] Z% Z% Z% Z% Z% Z% Z% Z% )_ I$ t& Z% F{ )_ I$ Z% pj _y _y C' og og p: p: p: p: p: p: p: p: p: fd b, b, b, b, }| }| Z% Z% I$ I$ O( O( [| [| [| [| I$ I$ I$ I$ I$ I$ I$ I$ t& t& t& t& t& Z% I$ q} A% !_ !_ !_ A% A% Z% Z% )_ F{ >5 }| K> 4! C, m* }| Z% Z% Z% Z% Z% Z% Z% x8 x8 )_ )_ F{ I$ I$ Z% 34 34 34 34 >5 >5 I$ I$ t& Z% A% O( / / g7 ZQ tM IB IB ~D dc U0 $| $| ^_ ^_ >5 >5 34 34 `z >5 ti Ma Ma Ma ^_ ^_ I$ I$ )_ x8 %n a) =) r} D, `Q *) Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% A% !_ <] <] <] !_ !_ !_ !_ !_ !_ !_ !_ !_ !_ A% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ cc dc ~D ~D ~D pS pS B) B) qS qS rS Zl {D sS sS C' ti I$ I$ I$ I$ I$ I$ I$ h+ T@ t& I$ F{ )_ x8 x8 Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ O( !_ ./ ./ ./ !_ !_ !_ !_ v$ v$ t& t& t& t& :] :] Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% ,5 ,5 )_ X[ g7 fc fc xi me me -L / q} F{ '5 '5 r} r} r} r} *) *) Z% Z% Z% Z% )5 )5 $| $| $| $| lP tS _y _y ^_ cc O( Gs uS vS wS xS yS zS AS BS CS CS DS ES FS GS HS IS WQ JS 'R KS LS :L MS NS OS PS QS RS SS TS US VS WS XS YS ZS `S T .T +T NP 1R kL YM @T eL #T $T %T pI 1H lI ZF &T *T lI =T -T ;T >T ,T 'T )T !T ~T {T 0) L< ]T ^T fA /T (T _T :T 5 I$ I$ I$ I$ I$ I$ I$ T@ T@ T@ T@ T@ T@ T@ T@ I$ I$ *) Z% -) t& s% T@ s% T@ s% T@ -) t& -) t& t& t& T@ T@ T@ T@ t& t& T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ t& t& Z% I$ I$ F{ I$ I$ I$ I$ I$ I$ I$ I$ t& t& t& t& t& t& t& t& h+ [. /. [. T@ Z% t& h+ F{ I$ I$ Z% t& t& T@ T@ t& t& t& t& t& t& t& t& b, b, b, b, }| }| Z% Z% F{ I$ O( O( !_ !_ <] <] A% A% A% A% A% A% v$ v$ v$ v$ w$ w$ u$ 5. ", "0 4 4 4 } } } 4 0 l n n l 0 6+ 3 E+ E+ 7@ K@ E# 0 } + + H+ H+ 5& 5& 5& 5& 5& 5& 5& 5& H+ H+ + + E E >% K@ -@ E+ -@ b+ '$ E# E# K@ K@ E# E# '$ K@ K@ K@ K@ K@ K@ K@ K@ E# E# '$ '$ '$ E# K@ a+ '$ '$ '$ '$ '$ '$ '$ '$ E E E E E E E E E E E E E E E w S| 1( 1( 1( p p n n a% a% q: GR HR HR jC A fe dd m j z@ eT fT gT hT iT jT kT pN lT qN mT nT oT pT qT rT sT tT uT vT wT xT yT zT AT BT g{ CT c} DT !( W' Dh $S )E ET n{ FT GT HT >S IT JT KT LT MT NT OT PT QT RT ST TT UT VT WT XT YT ZT `T U .U +U @U #U $U %U &U *U =U -U ;U >U ,U 'U )U !U !U [D ~U {U ]U ^U /U (U _U :U j~ _@ #& `f b) 2% {2 L2 *L p: p: p: .^ * * m* m* m* .# $& .# h+ a# a# a# a# a# a# a# ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ :] O) .# +# +# .# O) :] m* m* m* m* m* m* m* m* t& t& t& t& :] :] :] :] 4! 4! H{ H{ 24 24 X5 24 :] t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& T@ T@ T@ .# .# m* O) :] }| >5 >5 :] :] :] :] :] :] :] :] Z% Z% Z% Z% Z% Z% Z% Z% F{ Z% t& t& I$ F{ I$ ,_ ui C' C' C' C' og og og og og og og og og og og b, b, b, b, }| }| Z% Z% Z% Z% A% A% !_ !_ !_ !_ I$ I$ Z% t& t& Z% I$ I$ T@ t& Z% t& T@ t& I$ X[ A% !_ !_ !_ A% A% Z% Z% F{ I$ >5 }| K> K> 4! O) }| Z% Z% Z% Z% Z% Z% Z% I$ F{ F{ )_ F{ F{ Z% Z% K> K> b, b, }| >5 I$ I$ I$ I$ O( q} / / / [U JB !D IB ~D dc U0 (* (* )5 )5 }| >5 34 Xl Kb '5 ti Ma Ma Ma ^_ ^_ I$ I$ F{ )_ uJ qj r} r} :y }U *) Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% A% A% <] <] <] <] !_ [| / !_ !_ !_ !_ !_ !_ !_ !_ Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ cc U0 _I _I ~D pS |U 1U 1U B) qS Zl Zl {D {D sS _y pj F{ F{ F{ F{ F{ F{ F{ h+ T@ Z% I$ )_ )_ )_ )_ Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ O( !_ ./ ./ ./ !_ !_ !_ !_ v$ v$ t& t& t& t& :] :] Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% '5 F{ q} / / -L me me c' c' ./ ./ A% A% Z% }| r} r} r} r} *) *) Z% Z% Z% Z% )5 )5 $| $| $| $| tS tS _y _y ^_ cc Fs !O 2U {O xS 3U 4U $R 5U 6U 7U 8U 9U 0U aU bU cU dU FJ eU fU gU hU iU jU kU lU mU gI nU oU pU qU rU sU tU uU vU T wU xU yU 1R 2R zU gL 4H tI AU BU CU DU EU FU GU HU HU IU JU KU LU MU NU OU PU QU RU SU &% 3 TU UU VU WU XU YU ZU ,i 'i `U V .V +V @V #V $V %V &V *V p* t* %h )% # =V CR -V bT bT Z5 *5 *) a) vM ER #v U# /* $| Ma bc Ma $| $| $| Ma Ma (* J$ J$ $| :I O( <] O; O; A% A% t& h+ t& Z% }| }| 34 34 34 >5 >5 I$ I$ I$ I$ I$ I$ I$ t& t& t& t& t& t& t& t& Z% Z% Z% t& t& T@ T@ T@ I$ I$ Z% Z% t& T@ T@ T@ Z% Z% t& T@ T@ t& Z% Z% t& t& t& t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ t& t& t& t& t& t& t& t& T@ h+ [. h+ t& Z% t& T@ Z% Z% t& t& t& t& T@ T@ t& t& t& t& t& t& t& t& b, b, b, b, }| }| Z% Z% F{ F{ O( A% <] O; O; [* O( O( A% A% A% v$ v$ v$ w$ w$ v$ v$ v$ w$ ", "4 4 } | | | 1 | 4 + n n + 4 2 3 =@ =@ 7@ '$ ,% n + + + H+ H+ 5& 5& 5& 5& 5& 5& 5& 5& H+ H+ + + l n >% K@ -@ E+ 7@ ,& >% '$ K@ a+ a+ K@ '$ >% K@ K@ K@ K@ K@ K@ K@ K@ a+ K@ E# '$ '$ '$ E# E# '$ '$ '$ '$ '$ '$ '$ '$ E E E E E E E E E E E E E E E w S| v] 1( 1( S| p n n [# [# GR GR ,B ;V ;V 'B ee dd ._ + F[ @0 >V ,V 'V )V !V ~V {V ]V qN sN oT ^V /V pT (V _V zC :V R) `f `f b) 2% {2 L2 *L p: p: p: .^ * * m* O) O) O) [] :] h+ a# a# a# a# a# a# a# ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ :] O) .# +# +# .# O) :] O) O) O) O) O) O) O) O) t& t& t& t& :] :] K> K> C, C, H{ H{ X5 X5 R6 $w :] t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& Z% Z% Z% Z% I$ I$ .# .# m* O) :] }| >5 >5 :] :] :] :] :] :] :] :] Z% Z% Z% Z% Z% Z% Z% Z% I$ t& h+ T@ Z% I$ Z% q$ 5[ og og C' C' C' C' C' C' C' C' C' C' C' C' C' b, b, b, b, }| }| Z% Z% t& t& v$ v$ <] <] <] <] I$ Z% t& T@ T@ t& Z% I$ T@ Z% I$ Z% T@ T@ I$ cN O( [| [| [| O( O( I$ I$ Z% Z% }| }| b, K> K> :] >5 I$ I$ I$ I$ I$ I$ I$ T@ t& I$ F{ F{ F{ Z% Z% 4! 4! 4! K> }| }| Z% I$ )_ )_ q} q} / / [| +2 HB ~D ~D ~D dc dc Ma Ma )5 )5 }| >5 34 Xl Kb '5 ti Ma Ma Ma ^_ ^_ I$ I$ t& I$ uJ %n q3 r} q3 qj qj F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ q} A% <] O; O; O; !_ / g7 / / / / / / / / Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ cc U0 _I _I ~D pS |U 1U 1U B) qS Zl *L UV {D sS _y pj F{ F{ F{ F{ F{ F{ F{ Z% I$ F{ )_ F{ I$ Z% t& I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ O( [| gd gd gd [| [| [| [| O( O( I$ I$ I$ I$ >5 >5 Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% F{ F{ q} / / -L me me c' c' ./ ./ A% A% Z% Z% r} r} r} r} *) *) Z% Z% Z% Z% )5 )5 $| $| $| $| tS tS _y _y ^_ cc Fs !O VV {O WV XV AS YV ZV `V W .W +W @W #W 2y ;w $W %W &W *W =W yA -W [d LM CA ;W 3L >W ,W 'W )W !W ~W {W ]W ^W /W (W _W :W 5 I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% )5 )5 ,_ ,_ q$ q$ q$ q$ ^_ ^_ ^_ ^_ )5 )5 ,_ ,_ F{ I$ Z% t& t& Z% I$ F{ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& t& T@ h+ T@ Z% I$ Z% t& h+ h+ T@ T@ T@ T@ t& t& t& t& t& t& t& t& t& t& b, b, b, b, }| }| Z% Z% T@ T@ u$ u$ [* [* [* [* O( O( O( A% v$ v$ v$ w$ u$ w$ v$ A% O( A% ", "} } | | 1 1 ; | } + l l + } 2 2 ~ ~ 6+ >% U% D l + + + + H+ H+ H+ H+ H+ H+ H+ H+ H+ + + + 4 + n K@ 3 3 K@ >% >% '$ K@ a+ a+ K@ '$ >% K@ K@ K@ K@ K@ K@ K@ K@ 6+ a+ K@ '$ '$ >% >% '$ '$ '$ '$ '$ '$ '$ '$ '$ E E E E E E E E E E E E E E E o S| v] S| S| S| p n n J+ J+ I@ GR 'B zW AW BW mf +_ O_ l c CW DW >V EW hT FW GW [T HW lT IW JW KW LW MW NW OW PW QW RW SW TW UW VW WW +B c| XW YW V( Pt 3o ZW 2u `W tK X %S Lf .X +X @X #X $X %X &X *X =X -X ;X >X ,X 'X )X !X ~X {X YF LE ]X ^X /X (X _X :X R) `f `f [] 2% -^ .^ p: p: p: fd * * * O) O) :] }| d7 }| m* * * * * * * * 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ :] O) .# +# +# .# O) :] }| }| }| }| }| }| }| }| t& t& t& t& :] :] K> K> C, C, 4! H{ 24 24 $w b, 5[ ,_ ,_ ,_ ,_ ,_ t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& Z% I$ I$ F{ )_ )_ m* m* O) O) :] :] }| }| :] :] :] :] :] :] :] :] Z% Z% Z% Z% Z% Z% Z% Z% Z% T@ h+ h+ t& Z% t& h+ fd p: 5[ og ui _y ti p] ti _y ti _y ti _y ti ti ui }| b, }| }| }| Z% Z% T@ T@ w$ w$ w$ O; w$ w$ Z% t& T@ h+ h+ T@ t& Z% h+ Z% I$ Z% T@ h+ I$ x8 O( O( O( O( O( I$ I$ I$ t& t& :] }| b, b, b, }| F{ F{ F{ F{ F{ F{ F{ F{ [. h+ t& I$ F{ I$ Z% Z% m* m* C, O) :] :] Z% Z% x8 x8 X[ X[ q} [| O( 61 F- 6 U0 dc dc WG Is Is ,_ )5 }| >5 >5 '5 Kb ,5 ^_ Ma Ma Ma ^_ ^_ I$ I$ h+ Z% uJ uJ :y r} r} *) qj F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ A% V5 w$ P6 w$ 61 q} ZQ q} [U q} [U q} [U q} q} Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ cc F- pg pg HB dc WG bc Tt bc $| og p: -h si Es p] pj F{ F{ F{ F{ F{ F{ F{ )_ x8 x8 x8 F{ Z% h+ /. I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ O( [| [| [| [| [| [| O( O( q} q} F{ F{ F{ F{ '5 '5 Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ O( [| gd d) d) me me -L / q} q} F{ qj r} r} %w r} r} *) *) *) *) Z% Z% Z% )5 )5 )5 $| _y lP _y ^_ I$ O( Ls zk wS xS jX kX AS 5U lX mX nX oX pX #W qX >w rX sX tX xA uX vX .C wX xX yX zX AX BX CX 'W DX EX FX GX HX IX JX KX LX MX NX OX @K @K @T @T 3H 1H 1H GU PX QX YF fD RX 3W SX TX UX VX WX XX YX ZX `X jf j& C% Y .Y +Y @Y fl #Y $Y jW %Y &Y *Y =Y -Y ;Y >Y ,Y 'Y )Y !Y ~Y a& 7# r$ e> $& L> {Y ]Y Lb ^Y Kb hu -) s% /$ o@ :+ cc $| (* (* (* (* $| Ma J$ $| bc bc $| /* (* hd O; [* (& [* A% O( A% t& t& Z% }| >5 >5 Xl Xl ,5 I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ )5 )5 ,_ ,_ q$ q$ q$ a# ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ )_ F{ Z% t& t& Z% F{ )_ I$ I$ I$ I$ I$ I$ I$ I$ F{ I$ I$ Z% t& t& T@ T@ Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& Z% T@ h+ t& I$ F{ I$ Z% /. [. [. h+ T@ T@ t& t& t& t& t& t& t& t& t& t& }| }| b, }| }| }| Z% Z% @. @. (. (. l. (& u$ u$ O( O( O( A% v$ v$ w$ w$ 5. w$ A% O( q} q} ", "K@ a+ a+ 6+ 6+ 3 3 ' ~ 3 a+ a+ a+ 3 3 } } } 4 0 + K@ K@ a+ a+ a+ a+ b+ b+ b+ b+ ~ 3 6+ K@ K@ + 0 4 + + + H+ H+ H+ H+ + K@ 6& 6& ,& b+ b+ ,& h> M% M% M% ,& ,& 6& 6& 6& >% '$ E# K@ K@ K@ E# '$ E# >% ,% >% E# E# '$ ,% }# D n l + l n E }# D n l + l n o e B{ i k o G }# }# I+ m a% F +_ O_ /Y -] }Q }Q GR k~ UL F$ s* +| (Y Aw i[ _Y :Y e> e> $& O) 2% m@ 2% * 5[ m* j+ }| O) .# m* O) O) m* +# b, b, b, K> 4! 4! C, C, l* l* C, C, C, 4! 4! 4! 5[ 5[ fd fd * .* .* 2% 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 2% * fd 5[ 5[ fd * 2% 2% 5[ YY Hs o3 t% ed pj .^ p: og og og .^ 2% U@ * ui }| .# .# }| d7 b) h+ h+ T@ T@ t& Z% Z% Z% T@ T@ T@ T@ T@ T@ T@ T@ Z% Z% Z% Z% Z% Z% Z% Z% t& T@ h+ [. [. h+ T@ t& )_ )_ F{ I$ I$ Z% t& t& I$ I$ I$ Z% t& t& T@ T@ ZY `Y '5 ui :] 5[ :] ui }| ui }| ti >5 pj '5 pj fd q$ 5[ ,_ )5 ^_ ^_ oh ^_ ^_ ^_ )5 ,_ E) q$ q$ )_ I$ Z% I$ x8 Y% x8 F{ Z% Z% Z% Z% Z% Z% Z% Z% Z% t& T@ T@ T@ }| '5 ,5 >5 >5 >5 >5 >5 >5 >5 >5 t& t& T@ h+ T@ Z% F{ x8 I$ I$ I$ I$ I$ I$ I$ I$ h+ h+ O) T@ t& t& Z% Z% T@ T@ t& t& Z% O( I$ q} Is sM oh ^_ ^_ )5 t& t& Z Y% Y% x8 )_ F{ '5 F{ ^_ Ma Ma Ma ^_ ^_ I$ I$ x8 x8 uJ uJ c, c, c, uJ uJ )_ F{ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% )5 WG Is tJ s6 :I oh U0 oh dc ^_ dc oh :I s6 .Z )_ F{ F{ I$ I$ Z% Z% t& Z% Z% Z% Z% Z% Z% Z% A% hd +2 ZQ [U hd E) ^_ oh ^_ ^_ ti ti Hs Hs Hs ti ,5 )_ F{ I$ I$ Z% t& t& I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ O( O( O( O( O( O( I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ )_ F{ F{ I$ I$ Z% Z% t& )_ I$ t& t& I$ F{ F{ I$ >5 I$ I$ O( [| gd d) d) d) me -L [| v$ t& >5 %n *j yq >x hA rr rr +Z D, =) r} Ka dt dt LB d7 t& (* @Z dc q} DR dE Ps Z ,Z 'Z ~v )Z |O !Z ~Z &C UF {Z ]Z ^Z /Z (Z _Z :Z M% M% M% ,& ,& 6& 6& 6& E# E# E# E# E# E# E# E# E# >% ,% >% E# E# '$ ,% }# D n l + l n E E n l l n E }# t h 2$ i i k o E D m [# a% F +_ O_ ;] M+ N_ N_ HR ,F HR `& ~Y GZ `1 HZ IZ JZ KZ LZ MZ NZ }Y OZ PZ PZ mT QZ RZ SZ TZ TZ iG MH MH Fw :r =g mG UZ VZ VZ WZ XZ YZ {z hw }/ ZZ CD >! ;{ `Z ` .` +` @` #` $` %` &` *` =` -` ;` >` ,` '` )` RX !` ~` sY uY iZ {` ]` ^` /` (` _` :` <` [` }` |` 1` 2` 3` 4` 5` 6` 7` 8` 9` 0` a` b` c` d` cz e` !I f` g` h` .2 i` j` k` j. <. $. i# %. V+ C& o^ Z &. &. &. h. h. `+ `+ T$ T$ %% ~% l` m` n` m` 8c 8c 0' 0' 0' 0' |% |% |% |% |% |% |% |% |% |% he 2b -_ =_ =_ -_ 2b he 2b 2b ;_ ;_ ;_ -_ -_ -_ &) &_ &_ $% 0' 8c $% &_ $% $% $% $% $% $% $% T$ &% [! 6[ o^ -^ o^ 6[ 6[ o^ o^ o^ o^ 6[ S& u& U+ +. (. +. +. @. @. ]+ ]+ .@ .@ .@ .@ 3{ 3{ 3{ M$ &- d& =^ {2 -^ o^ L) [! m@ m@ j+ j+ j+ j+ 9# 9# ]+ j+ .# m* m* .# j+ ]+ ]+ ]+ ]+ ]+ j+ j+ +# +# {+ ]+ ]+ ]+ ]+ j+ j+ j+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ .# .# .# .# m* m* m* m* O) m* .# .# .# .# m* O) =- =- b& b& +% +% /. /. h+ h+ a# j$ K$ S$ S$ S$ 6[ o^ -^ -^ .* .* +# j+ .# .# $& $& e> e> e> $& [] .# j+ +# m* O) .# j+ }| O) .# m* O) O) m* +# 24 H{ H{ H{ H{ G{ G{ G{ 4{ 4{ G{ G{ G{ H{ H{ 4! ac 5[ 5[ fd fd * * * 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ .* * fd 5[ 5[ fd * .* 2% 5[ pj ti .* 2% fd p] .^ *L Zl rS og p: .^ -^ .* ui >5 m* m* >5 d7 $& h+ h+ T@ T@ T@ T@ t& t& t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% I$ Z% T@ h+ h+ T@ Z% I$ F{ F{ I$ I$ I$ I$ Z% Z% I$ I$ I$ Z% t& t& t& T@ O* ,5 >5 :] O) :] :] }| :] :] }| }| >5 >5 >5 >5 q$ q$ q$ q$ ,_ ,_ ,_ ,_ ^_ ^_ ^_ )5 ,_ ,_ ,_ q$ F{ Z% t& Z% )_ x8 )_ I$ Z% Z% Z% Z% Z% Z% Z% Z% }| :] O) O) O) }| >5 ,5 >5 >5 >5 >5 >5 >5 >5 >5 F{ F{ Z% t& t& Z% I$ F{ I$ I$ I$ I$ I$ I$ I$ I$ h+ T@ T@ T@ t& Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ F{ F{ F{ I$ I$ I$ I$ Z% F{ F{ )_ )_ )_ )_ )_ Is ^_ Ma Ma Ma ^_ ^_ I$ I$ )_ )_ %n %n D, D, D, %n %n F{ I$ Z% Z% Z% I$ I$ Z% Z% Z% Z% Z% Z% Z% )5 ^_ bc Tt Ks Ks Tt bc Ma Ma Ma $| $| Ma bc Tt Ks F{ F{ F{ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% A% A% [| g7 / A% v$ I$ F{ I$ I$ >5 >5 34 34 34 >5 >5 I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ I$ I$ Z% Z% Z% )_ I$ t& t& I$ F{ F{ I$ >5 >5 I$ O( O( gd gd d) d) me / [| t& t& >5 %n &h o` o` &j p` d- *j *j *j r} Ka q` q` Ka 48 -) hd pg +2 gd zk ., .pi ' .) .! .~ ./9 { .{F v1 ] .^ ./ .( ._ .: .< .[ .} .| .1 ..f 2 ..+ R# ~+ h+ h+ T@ t& Z% Z% t& t& F{ F{ I$ I$ I$ I$ Z% Z% oh Ma $| (* (* $| Ma bc Ma Ma Ma Ma Ma Ma Ma cc [| !O !O !O Gs Gs Gs Gs Fs Fs a) a) a) a) hu hu )_ F{ Z% t& t& Z% F{ )_ Z% Z% Z% Z% Z% t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& Z% Z% Z% I$ I$ Z% Z% I$ I$ I$ I$ F{ F{ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& I$ Z% t& T@ T@ t& Z% I$ Z% Z% t& t& T@ T@ h+ h+ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% F{ )_ )_ F{ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& ", "a+ a+ a+ 6+ 6+ 6+ 6+ 3 6+ a+ K@ K@ K@ K@ a+ 9+ 9+ 0 0 4 4 6+ 6+ b+ b+ b+ b+ :{ :{ :{ :{ 7@ b+ M% ,& '$ E# l + + + H+ H+ 5& 5& 5& H+ K@ ,& h> 6& M% b+ ,& h> M% M% M% ,& ,& 6& 6& 6& a+ K@ '$ >% >% '$ K@ a+ E# >% ,% >% E# E# '$ ,% D D E l l l n n l l n n D C V . i %@ i i i i l n m [# F '= <| +_ ;] M+ GR q: GR I@ HR '* [ ~o vG l .;{ m .n .o .p .q .r .s .t .u .v .w .x .y .>` z .XT /H A .&T B .C .D .{` xY E .F .G .H .I .J .K .}` L .M .N .O .P .Q .R .S .RY T .U .V .W .X .Y .Z .` .6I mS .....oS 13 j` hm N* &+ o W+ #. $. l& m@ ,. /@ ,. ,. D. D. ~+ ~+ T$ T$ $% |% ~% d( m` m` |% |% |% 0' 0' 0' 0' 0' |% |% |% |% |% |% |% |% he 2b -_ =_ =_ -_ 2b he 2b 2b ;_ ;_ ;_ -_ -_ -_ |% $% &) $% 0' |% &) n3 $% $% $% $% $% $% $% T$ #% {@ m@ U@ U@ U@ U@ m@ 2% 2% 2% 2% 2% U@ m@ B. [. /$ v+ '. ). =. E. E. 0# 0# 0# 0# +..+..+..J- &- d& d& _& 6[ L) L) [! U@ U@ ]+ ]+ ]+ ]+ F. F. ]+ j+ .# m* m* .# j+ ]+ ]+ ]+ ]+ j+ j+ +# +# +# +# +# +# +# j+ j+ j+ j+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ j+ +# .# m* m* O) m* O) O) :] :] O) O) m* r$ r$ b& b& +% +% h+ h+ h+ h+ a# j$ K$ S$ S$ S$ -^ -^ .^ p: fd * .# .# .# .# $& $& e> e> e> $& b) .# j+ +# m* O) .# +# }| O) .# m* O) O) m* +# 4{ 4{ 4{ G{ G{ G{ G{ G{ 4{ 4{ G{ G{ G{ H{ H{ 4! .o ui ui 5[ 5[ fd fd fd 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ * * fd 5[ 5[ fd * * .* 5[ pj ui * 2% fd _y .^ *L Zl rS C' C' og og 2% 5[ >5 :] :] >5 !5 9# T@ T@ T@ h+ h+ h+ h+ h+ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ Z% t& t& Z% I$ I$ Z% Z% I$ I$ I$ I$ F{ F{ I$ I$ Z% Z% Z% t& t& t& >5 }| :] O) O) :] :] }| O) O) :] :] :] }| }| }| q$ q$ q$ q$ q$ a# a# a# ^_ ^_ )5 )5 )5 ,_ ,_ ,_ I$ t& T@ t& F{ )_ F{ Z% Z% Z% Z% Z% Z% Z% Z% Z% }| :] :] O) :] }| >5 '5 >5 >5 >5 >5 >5 >5 >5 >5 Y% x8 F{ I$ Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ T@ T@ t& t& t& Z% Z% Z% F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ t& Z% Z% I$ F{ )_ x8 s6 ^_ Ma Ma Ma ^_ ^_ I$ I$ F{ F{ qj qj :y :y :y qj a) I$ Z% Z% Z% I$ F{ )_ F{ F{ F{ F{ F{ F{ F{ oh ^_ bc Tt Tt Tt Tt bc Ma $| $| $| (* $| Ma bc bc F{ F{ F{ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% A% A% [| g7 / A% v$ I$ F{ I$ I$ >5 >5 34 34 34 >5 :] t& Z% I$ I$ F{ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ I$ I$ Z% Z% Z% )_ I$ t& t& I$ F{ F{ I$ >5 >5 I$ O( O( gd gd d) d) me / [| t& t& >5 %n r} yq d- :* d- :* c# c# r} q3 q3 qj qj a) a) '_ 61 b: ./ )' vS nP +o $Z s` @..#..$..%..&..*..=..-..;..>Z 0I >..,..'..)..zP !..~Z G` SF ~..{..]..^../../..(.._..L` :..<..V` U` [..X` W` V` X` S` }..|..1..2..3..4... .5..6..7..iZ 8..iZ 9..0..a..b..c..d..e..f..g..h..i..x* (] j..'0 k..l..m..n..] .lW o..*Y ~V p..q..r..s..t..u..^[ v..K E. G. h+ T@ t& Z% Z% Z% Z% t& Z% Z% I$ I$ I$ I$ F{ F{ Is oh ^_ ^_ ^_ ^_ oh Is ^_ ^_ ^_ ^_ ^_ ^_ ^_ cc [| !O !O !O Gs Gs Gs Gs Fs Fs a) a) a) a) hu hu F{ I$ I$ Z% Z% I$ I$ F{ t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& Z% Z% Z% I$ I$ F{ F{ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& I$ Z% t& t& t& t& Z% I$ t& T@ T@ T@ h+ h+ h+ h+ t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ F{ F{ F{ F{ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& ", "a+ a+ a+ 6+ 6+ 6+ 6+ 6+ a+ a+ K@ K@ E# E# E# H+ H+ + 0 4 } 3 3 M% M% M% M% N% N% N% N% b+ M% ,& ,& '$ '$ n n + + H+ H+ 5& 5& 5& H+ a+ ,& h> h> ,& M% M% 6& M% M% M% ,& ,& 6& 6& 6& 3 a+ '$ ,% ,% >% K@ a+ E# >% ,% >% E# E# '$ ,% D E E n n l l l E E E D }# C ,+ T i %@ i i i h + + m [# F '= <| +_ ;] M+ /Y q: GR I@ RO ,* hN 8+ w..Ha 4p x..y..z..A..B..C..D..tm 7l Ny rN E..E..TZ TZ iG iG MH Fw Fw =g +.,+.'+.)+.!+.~+.{+.]+.^+./+.(+.4I _+.;R SQ gM :+.<+.N4 3@ iX W. t +. +. {+ h. ,. /@ ,. ,. D. D. ~+ ~+ @ T$ $% |% ~% d( m` m` &) $% $% |% 0' 0' 8c 8c |% |% |% |% |% |% |% |% he 2b -_ =_ =_ -_ 2b he 2b 2b ;_ ;_ ;_ -_ -_ -_ 9c 0' $% $% |% $% &_ &5 $% $% $% $% $% $% $% T$ #% l& {+ {@ ]+ m@ ]+ m@ ]+ U@ j+ U@ j+ U@ j+ +. v+ W@ '. '. ). ). F. F. P* P* P* P* p3 p3 p3 l* &- c& c& d& L) [! [! [! U@ U@ ]+ ]+ {+ h. E. D. ]+ j+ .# m* m* .# j+ ]+ ]+ ]+ j+ j+ +# +# .# .# O) m* m* .# +# +# j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ ]+ j+ j+ j+ +# +# .# .# ]+ j+ .# m* m* .# j+ ]+ t+ t+ r$ b& +% @% T@ T@ h+ h+ a# j$ K$ S$ S$ S$ -^ .^ p: p: fd fd m* .# .# .# $& $& e> e> e> $& $& .# +# .# .# m* .# .# }| O) .# m* O) O) m* +# +@ 2{ 5! 4{ 4{ G{ G{ H{ 4{ 4{ G{ G{ G{ H{ H{ 4! ui ui ui ui ui ui ui 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ fd fd fd 5[ 5[ fd fd fd * 5[ ti ui * .* fd C' p: *L Zl rS _y _y _y _y U@ 5[ >5 :] :] >5 !5 H. t& T@ T@ h+ h+ [. /. /. I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% I$ Z% Z% Z% Z% Z% Z% I$ t& t& Z% I$ I$ F{ )_ )_ Z% Z% Z% Z% Z% Z% t& t& O) O) O) O) O) :] :] :] m* m* O) O) :] :] :] }| ^_ )5 )5 ,_ q$ q$ a# a# )5 )5 )5 )5 )5 )5 ,_ ,_ Z% T@ h+ T@ I$ F{ I$ t& Z% Z% Z% Z% Z% Z% Z% Z% :] :] :] :] }| }| >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 x8 x8 )_ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ t& t& t& t& Z% Z% Z% Z% x8 x8 )_ )_ F{ I$ I$ Z% Z% Z% I$ F{ F{ )_ x8 x8 Z% Z% Z% I$ I$ F{ F{ oh ^_ Ma Ma Ma ^_ ^_ I$ I$ I$ I$ a) a) q3 q3 q3 a) *) Z% Z% Z% Z% F{ )_ x8 F{ F{ F{ F{ F{ F{ F{ F{ oh bc bc Tt Tt bc bc bc $| $| (* (* (* (* $| ^_ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ O( A% [| g7 / A% v$ I$ F{ I$ I$ >5 >5 34 34 34 >5 }| Z% Z% I$ I$ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ )_ I$ t& t& I$ F{ F{ I$ >5 >5 I$ O( O( gd gd d) d) me / [| t& t& >5 %n c, [+.}+.DR |+.Fs >k '_ >k Fs a) Fs a) Fs a) Gs c' V/ 1+.2+.3+.XV $Z 4+.#..5+.0U %..%..6+.{L EM 7+.[O 8+.9+._L 0+.6P a+.by b+.c+.d+.e+.f+.g+.h+.i+.j+.M` k+.l+.S` X` m+.l+.m+.T` V` W` X` m+.X` n+.o+.bZ }..p+.q+.r+.s+.t+.u+.8..v+.iZ a..w+.x+.y+.z+.A+.B+.C+.D+.E+.)& F+.G+.H+.I+.J+.K+.L+.rm M+.N+.o..O+.P+.1< Q+.R+.sv S+.T+.51 G# /@ $& $& h+ T@ t& Z% I$ I$ Z% Z% t& t& Z% I$ I$ F{ )_ )_ )_ oh F{ oh F{ oh F{ Is I$ ^_ I$ ^_ I$ ^_ I$ O( Gs !O !O !O Gs Gs Gs Gs Fs Fs a) a) a) a) hu hu I$ I$ I$ I$ I$ I$ I$ I$ T@ T@ t& t& Z% I$ I$ F{ Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& Z% Z% Z% I$ I$ )_ )_ F{ I$ I$ Z% t& t& I$ I$ I$ I$ I$ I$ I$ I$ T@ T@ t& t& Z% I$ I$ F{ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& Z% Z% Z% t& t& t& t& t& t& T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ Z% Z% Z% Z% Z% Z% Z% Z% T@ T@ t& t& t& t& T@ T@ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% ", "6+ 6+ 6+ a+ a+ a+ a+ a+ a+ a+ a+ K@ K@ E# E# H+ H+ + 0 4 } 3 3 M% M% M% M% N% N% N% N% M% M% M% M% E# '$ n E + + H+ H+ 5& 5& 5& H+ 6+ ,& h> h> ,& M% M% ,& M% M% M% ,& ,& 6& 6& 6& 2 6+ E# ,% ,% >% E# a+ E# >% ,% >% E# E# '$ ,% E E E E n n l l }# }# }# }# }# }# }# G k u+ k i i i l l [# a% '= f+ p} <| O_ ;] -] O_ q: /Y q: ]= ,* G# U+.V+.Jk W+.X+.Y+.Z+.`+. @..@.+@.0l Fw MH jG jG zC zC iG iG MH Fw Fw =g (r @@.#@.G..$@.%@.Ab za jw 6s H5 &@.q| ~o *@.&~ =@.-@.;@.>@.,@.7x '@.)@.!@.~@.{@.BE V..sY pV ]@.YF ^@.QX iZ iZ /@.(@.Z.._@.:@.<@.[@.}@.|@.1@.2@.3@.4@.5@.6@.7@.8@.9@.0@.a@.eJ b@.c@.d@.u` e@.f@.g@.5I 'x h@.L- Qs i@.:+.*% !s a j@ ;+ S &$ E. q. 8. 8. 8. =. =. F. {+ {+ {+ T$ #% |% 0' d( d( &) &) $% $% |% 0' 0' 8c |% |% |% |% |% |% |% |% he 2b -_ =_ =_ -_ 2b he 2b 2b ;_ ;_ ;_ -_ -_ -_ 7c 0' $% &) $% &) ~_ &5 $% $% $% $% $% $% $% T$ `+ h. E. {+ F. ]+ G. j+ F. {+ F. {+ G. ]+ H. '. =. 8. p. p. t+ t+ a- a- >= >= >= >= j@.j@.j@.P* ^{ c& c& c& [! [! [! L) U@ U@ ]+ ]+ {+ h. E. D. ]+ j+ .# m* m* .# j+ ]+ j+ j+ j+ +# +# .# .# .# O) O) m* m* .# +# +# j+ .# .# .# .# .# .# .# .# .# .# +# +# j+ j+ j+ ]+ {+ ]+ +# .# .# +# ]+ {+ t+ t+ r$ b& +% @% T@ T@ h+ h+ a# j$ K$ S$ S$ S$ -^ .^ p: p: fd fd m* .# .# .# $& $& e> e> e> $& $& .# m* .# .# +# .# .# }| O) .# m* O) O) m* +# +@ +@ J- l* l* C, C, 4! l* l* C, C, C, 4! 4! 4! 5[ ui ui ui ui ui ui ui 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ fd fd 5[ 5[ 5[ * 5[ ui 5[ fd * fd C' p: *L Zl Zl C' _y p] p] 2% ui >5 :] :] >5 d7 9# t& t& T@ T@ h+ [. [. [. I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& Z% Z% t& t& t& t& t& Z% I$ I$ F{ )_ )_ t& t& Z% Z% Z% Z% Z% Z% m* O) O) :] :] :] :] :] m* m* O) O) :] :] :] }| Is oh oh ^_ )5 )5 ,_ ,_ ,_ ,_ )5 )5 )5 )5 )5 )5 Z% T@ h+ T@ I$ F{ I$ t& Z% Z% Z% Z% Z% Z% Z% Z% O) :] :] }| }| >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 I$ I$ F{ F{ )_ )_ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% x8 x8 )_ )_ F{ I$ I$ Z% I$ I$ I$ F{ )_ x8 x8 x8 F{ F{ F{ I$ I$ Z% Z% )5 ^_ Ma Ma Ma ^_ ^_ I$ I$ I$ I$ a) a) q3 q3 q3 a) *) Z% Z% Z% Z% F{ )_ x8 F{ F{ F{ F{ F{ F{ F{ F{ Is oh oh oh oh oh oh Is ^_ )5 ,_ ,_ ,_ ,_ )5 )5 I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ O( A% [| g7 / A% v$ I$ F{ I$ I$ >5 >5 34 34 34 >5 '5 F{ F{ I$ I$ Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ )_ I$ t& t& I$ F{ F{ I$ >5 >5 I$ O( O( gd gd d) d) me / [| t& t& >5 )_ uJ k@.k@.X[ vM / Gs [| Gs Gs Fs Gs Fs Gs Fs !O yM u: u: l@.4U BS t` m@.n@.n@.o@.(+.o@.p@.q@.OG &W r@.r@.s@.yA t@.u@.v@.MM w@.x@.y@.z@.i+.A@.B@.C@./..k+.X` X` W` W` X` D@.X` m+.V` S` m+.U` T` aZ E@.F@.G@.H@.q+.I@.J@.K@.uY gZ L@.FA M@.N@.O@.P@.A+.Q@.R@.S@.T@.U@.Q w5 kN #A V@.$q W@.X@.Y@.Z@.`@.`U #..#.+#.@#.##.$#.xx %#.M4 I r$ [] b) T@ t& Z% I$ I$ I$ I$ Z% t& t& Z% I$ I$ F{ )_ )_ F{ F{ qj )_ %n F{ qj F{ a) I$ a) I$ a) I$ a) Fs Gs !O !O !O Gs Gs Gs Gs Fs Fs a) a) a) a) hu hu I$ I$ I$ I$ I$ I$ I$ I$ T@ T@ t& t& Z% I$ I$ F{ Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& Z% Z% Z% I$ I$ )_ )_ F{ I$ I$ Z% t& t& I$ I$ I$ I$ I$ I$ I$ I$ T@ T@ t& t& Z% I$ I$ F{ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& Z% Z% Z% Z% Z% Z% t& Z% Z% I$ I$ I$ I$ I$ I$ T@ T@ T@ T@ T@ T@ T@ T@ Z% Z% Z% Z% Z% Z% Z% Z% t& t& T@ T@ T@ T@ t& t& Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% ", "6+ 6+ 6+ a+ a+ a+ a+ a+ 6+ 6+ 6+ 6+ a+ K@ E# 9+ 9+ 0 0 4 4 6+ 6+ M% M% M% M% N% N% N% N% M% M% b+ b+ K@ E# n E + + H+ H+ 5& 5& 5& H+ 6+ ,& '& '& 6& M% M% M% M% M% M% ,& ,& 6& 6& 6& 3 6+ E# '$ >% >% '$ E# E# >% ,% >% E# E# '$ ,% n E E D E n l + D }# }# }# }# D E k k u+ k k o o E E [# a% '= f+ p} <| O_ ;] M+ +_ N_ /Y GR &#.a& |# *#..0 fo =#.-#.y..;#.8 .>#.1_ ,#.,f :q yv MH jG zC zC iG iG MH MH Fw :r '#.NH #@.#@.)#.8] !#.~#.Ay w7 6s *M m{ _1 F~ {#.]#.^#./#.(#._#.:#.<#.[#.CI }#.|#.]@.1#.2#.3#.4#.]@.sY 1W L@.D .5#.6#.7#.8#.9#..+. e> >= >= >= >= j@.j@.j@.P* Q_ d& d& c& [! L) L) 6[ U@ U@ ]+ ]+ ]+ ]+ F. F. ]+ j+ .# m* m* .# j+ ]+ j+ j+ +# +# .# .# .# m* m* m* .# .# .# .# +# +# m* m* m* m* m* m* m* m* O) m* m* .# +# j+ ]+ ]+ .# .# m* O) O) m* .# .# r$ r$ b& b& +% +% h+ h+ h+ h+ a# j$ K$ S$ S$ S$ -^ -^ .^ p: fd * .# .# .# .# $& $& e> e> e> $& 9# .# O) m* +# j+ .# m* }| O) .# m* O) O) m* +# l* l* l* C, C, C, C, C, l* l* C, C, C, 4! 4! 4! fd fd fd 5[ 5[ ui ui ui 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ui ui 5[ fd fd 5[ ui ui fd 5[ 5[ 5[ fd fd fd og og Zl *L *L p: og C' _y * ui }| m* m* }| d7 b) t& t& t& t& t& T@ T@ T@ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% T@ t& t& Z% Z% t& t& T@ Z% Z% I$ I$ I$ I$ F{ F{ t& t& t& Z% Z% Z% I$ I$ :] :] }| }| }| :] O) O) O) O) :] :] :] }| }| }| Is oh oh oh oh ^_ ^_ ^_ ,_ ,_ ,_ )5 )5 )5 ^_ ^_ I$ t& T@ t& F{ )_ F{ Z% Z% Z% Z% Z% Z% Z% Z% Z% O) O) :] >5 >5 >5 }| }| >5 >5 >5 >5 >5 >5 >5 >5 T@ t& I$ F{ )_ )_ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% t& F{ F{ F{ F{ I$ I$ I$ I$ F{ F{ )_ )_ )_ )_ x8 x8 x8 x8 )_ F{ I$ Z% Z% ,_ ^_ Ma Ma Ma ^_ ^_ I$ I$ F{ F{ qj qj :y :y :y qj a) I$ Z% Z% Z% I$ F{ )_ F{ F{ F{ F{ F{ F{ F{ F{ Is Is oh ^_ ^_ oh Is Is oh oh ^_ )5 ,_ )5 )5 )5 Z% Z% Z% I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ q} A% [| g7 / A% v$ I$ F{ I$ I$ >5 >5 34 34 34 >5 ,5 )_ F{ I$ I$ Z% t& t& I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% I$ I$ F{ F{ F{ )_ I$ t& t& I$ F{ F{ I$ >5 >5 I$ O( O( gd gd d) d) me / [| t& t& >5 )_ O( O( O( A% !_ !_ !_ !_ / [| Gs H' ', !O Gs z#.o~ A#.B#.C#.D#.E#.F#.G#.0U H#.I#.J#.p@.:O K#.dM L#.M#.N#.O#.[d P#.zP Q#.R#.S#.T#.U#.i+.B@.B@.B@.V#.R` V` X` :..W#.:..V` W` m+.[..m+.<..[..X#.Y#.E@.}..3..YP Z#.4..`#.I@.C . $..$.# .+$.@$.#$.$$.6..lO %$.&$.*$.=$.Q f$ -$.;$.>$.,$.'$.)$.!$.~$.{$.]$.: .^$./$.($._$.lu :$.Zc $i <$.q. *, La $& O) t& Z% I$ F{ F{ I$ I$ Z% Z% I$ I$ I$ I$ F{ F{ a) a) qj %n %n qj a) a) a) a) a) a) a) a) a) Fs Gs !O !O !O Gs Gs Gs Gs Fs Fs a) a) a) a) hu hu Z% I$ I$ F{ F{ I$ I$ Z% t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& Z% Z% Z% I$ I$ F{ F{ I$ I$ I$ I$ Z% Z% F{ F{ F{ F{ F{ F{ F{ F{ t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& Z% I$ I$ Z% t& t& I$ I$ I$ F{ F{ F{ )_ )_ t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% F{ F{ I$ Z% Z% I$ F{ F{ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% ", "3 6+ 6+ a+ a+ K@ K@ 6+ 6+ 3 2 3 6+ K@ E# K& K& 4 4 0 0 a+ a+ ,& ,& ,& ,& j& j& j& j& M% b+ 7@ -@ 6+ a+ l n + + H+ H+ 5& 5& 5& H+ 3 M% '& ~& h> M% M% M% M% M% M% ,& ,& 6& 6& 6& 6+ a+ K@ E# '$ >% >% ,% E# >% ,% >% E# E# '$ ,% n E D D D n l 0 l n E D }# D E k k u+ o o G u }# C a% F '= f+ p} <| +_ O_ [# f+ p} ;] GR &#.]= G$ G# 58 7E [$.W+.}$.|$.1$.2$.3$.4$.Hx #& e> a- %& [$ [$ [$ %& r$ <+ O$ <+ <+ ;$ ;$ s+ s+ bN bN bN bN W$.W$.W$.0# u% =^ d& c& [! L) o^ -^ m@ m@ j+ j+ j+ j+ 9# 9# ]+ j+ .# m* m* .# j+ ]+ +# +# +# .# .# .# m* m* +# +# +# +# +# .# .# .# .# .# .# .# .# .# .# .# m* m* m* m* .# .# .# .# :] O) O) m* m* O) O) :] =- =- b& b& +% +% /. /. h+ h+ a# j$ K$ S$ S$ S$ 6[ o^ -^ -^ .* .* +# j+ .# .# $& $& e> e> e> $& H. .# O) m* +# j+ .# O) }| O) .# m* O) O) m* +# K> 4! 4! 4! 4! C, C, C, l* l* C, C, C, 4! 4! 4! * * * fd fd 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ti ui 5[ fd fd 5[ ui ti 5[ fd fd fd 5[ 5[ 5[ p: C' Zl *L L2 -^ .^ p: og 5[ ti :] j+ j+ :] hu !5 t& t& Z% Z% Z% Z% I$ I$ t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% t& Z% I$ F{ F{ I$ Z% t& F{ F{ I$ I$ I$ I$ Z% Z% T@ t& t& t& Z% I$ I$ I$ >5 >5 '5 '5 >5 }| O) m* :] :] }| }| >5 >5 >5 >5 )5 )5 ^_ ^_ ^_ ^_ oh oh q$ ,_ ,_ ,_ )5 ^_ ^_ ^_ F{ Z% t& Z% )_ x8 )_ I$ Z% Z% Z% Z% Z% Z% Z% Z% m* O) }| >5 '5 >5 }| :] >5 >5 >5 >5 >5 >5 >5 >5 T@ t& I$ F{ F{ I$ Z% t& I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ I$ Z% Z% Z% t& Z% Z% Z% Z% I$ I$ I$ I$ x8 x8 x8 )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ F{ oh ^_ Ma Ma Ma ^_ ^_ I$ I$ )_ )_ %n %n D, D, D, %n %n F{ I$ Z% Z% Z% I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% x8 )_ F{ I$ I$ F{ )_ x8 x8 )_ F{ I$ Z% Z% I$ I$ Z% Z% Z% I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ q} A% [| g7 / A% v$ I$ F{ I$ I$ >5 >5 34 34 34 >5 >5 I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% I$ I$ F{ F{ F{ )_ I$ t& t& I$ F{ F{ I$ >5 >5 I$ O( O( gd gd d) d) me / [| t& t& >5 )_ hd 61 61 +2 +2 +2 gd gd fc -L H' @6 ;) )' X$.hc N< @} Y$.Z$.`$. %..%.+%.0U @%.#%.Zt aJ FJ $%.%%.&%.*%.=%.-%.-%.;%.>%.CA ,%.T#.'%.A@.)%.!%.~%.{%.]%.T` X` S` S` V` V` V` [..^%./%.X#.[..(%._%.X#._%.Y#.Y#.<..:R :%.<%.[%.5#.}%.|%.1%.2%.3%.4%.i$.5%.6%.7%.8%.9%.)& E= 0%.a%.@#.b%.EO c%.d%.e%.f%.g%.h%.i%.j%.k%.l%.m%.n%.!9 ~s XY o+ r$ 48 =h H. :] t& Z% F{ F{ F{ I$ I$ F{ F{ I$ I$ I$ I$ Z% Z% -) r} q3 :y :y q3 r} =) q3 q3 q3 q3 q3 q3 q3 >k Gs !O !O !O Gs Gs Gs Gs Fs Fs a) a) a) a) hu hu t& Z% F{ )_ )_ F{ Z% t& Z% Z% Z% Z% Z% t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& Z% Z% Z% I$ I$ Z% Z% I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ Z% Z% Z% Z% Z% t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ T@ t& Z% I$ I$ Z% t& T@ Z% Z% Z% I$ I$ F{ F{ F{ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% )_ F{ Z% Z% Z% Z% F{ )_ Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ ", "3 6+ 6+ a+ a+ K@ K@ 6+ 3 2 ~ 2 3 a+ K@ 3+ 3+ } 4 0 + K@ K@ ,& ,& ,& ,& j& j& j& j& b+ 7@ -@ E+ 3 6+ + l + + H+ H+ 5& 5& 5& H+ 3 M% '& ~& h> M% M% M% M% M% M% ,& ,& 6& 6& 6& a+ a+ a+ a+ K@ '$ ,% ^% E# >% ,% >% E# E# '$ ,% n E D D D n + 0 } 0 l E }# }# D G k u+ o G u O ,+ V a% F f+ >+ 5c p} +_ O_ a% >+ 5c O_ GR }Q ]= J# K o%.T0 fo p%.q%.r%.|$.s%.v1 t%.u%.v%.)i w%.x%.[B iG iG iG wC wC Ny :r y%.5$.lG &.,&.'&.)&.%v !&.hP ~&.{&.]&.6z P_ (I ^&.Ja Zf (+ (+ (+ /@ ,. F. {+ {+ h. `+ !% !% !% 0' |% |% $% &) &) &_ &_ |% |% |% |% |% |% |% |% 0' |% &) &_ &_ &) |% 0' |% |% $% $% $% &) &) &) 9c |% &_ ~_ &) $% $% &) $% $% $% $% $% $% $% @ 0# a- [$ [$ [$ a- #& *, L> *, e> %& %& %& a- b& e= & 3% ;$ <+ r. s. # bN bN bN bN W$.W$.W$.0# =] {2 _& d& L) 6[ -^ .^ m@ m@ j+ j+ +# .# $& b) ]+ j+ .# m* m* .# j+ ]+ +# +# +# .# .# m* m* m* ]+ ]+ j+ j+ +# .# .# .# +# +# +# +# +# +# +# +# +# .# .# m* O) O) :] :] :] O) .# +# +# .# O) :] '' '' =- b& +% v+ +. +. h+ h+ a# j$ K$ S$ S$ S$ 6[ 6[ o^ -^ .* 2% j+ j+ .# .# $& $& e> e> e> $& H. m* :] m* +# ]+ +# O) }| O) .# m* O) O) m* +# b, b, b, K> 4! 4! C, C, l* l* C, C, C, 4! 4! 4! 2% .* .* * fd fd 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ pj ui 5[ fd fd 5[ ui pj 5[ fd fd fd 5[ 5[ 5[ p: _y Zl L2 {2 o^ o^ -^ .^ ti pj :] ]+ ]+ :] LB hu t& t& Z% I$ I$ F{ )_ )_ T@ T@ T@ T@ T@ T@ T@ T@ Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ )_ x8 x8 )_ I$ Z% )_ )_ F{ I$ I$ Z% t& t& T@ T@ t& t& Z% I$ I$ I$ '5 ,5 O* ,5 '5 }| O) .# }| }| }| >5 >5 '5 '5 '5 q$ q$ ,_ ,_ )5 ^_ ^_ oh q$ q$ ,_ ,_ )5 ^_ ^_ ^_ )_ I$ Z% I$ x8 Y% x8 F{ Z% Z% Z% Z% Z% Z% Z% Z% m* O) }| >5 '5 >5 }| :] >5 >5 >5 >5 >5 >5 >5 >5 Z% I$ F{ F{ I$ t& h+ [. I$ I$ I$ I$ I$ I$ I$ I$ )_ F{ F{ I$ I$ Z% Z% t& T@ T@ t& t& Z% I$ I$ F{ Y% Y% Y% x8 )_ F{ F{ F{ F{ F{ F{ )_ x8 Y% Y% O4 ^_ Ma Ma Ma ^_ ^_ I$ I$ x8 x8 uJ uJ c, c, c, uJ uJ )_ F{ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% x8 )_ F{ Z% Z% F{ )_ x8 Y% x8 )_ F{ I$ I$ I$ F{ t& Z% Z% I$ I$ F{ F{ )_ F{ F{ F{ F{ F{ F{ F{ q} A% [| g7 / A% v$ I$ F{ I$ I$ >5 >5 34 34 34 >5 :] t& Z% I$ I$ F{ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ t& Z% Z% I$ I$ F{ F{ )_ )_ I$ t& t& I$ F{ F{ I$ >5 >5 I$ O( O( gd gd d) d) me / [| t& t& >5 )_ ec [U ZQ ZQ ig #< /&./&.fc me )' 1+.1+.yJ O> (&.4| _&.:&.<&.[&.}&.`V |&.@%.]x >w rX 1&.&W 2&.=W 3&.4&.5&.6&.E` 7&.{H 8&.9&.0&.a&.b&.c&.d&.e&.f&.g&.X` l+.X` ^%.h&.Y#.S` aR i&.i&./%.(%._%.^%.X#.^%.j&.Y#.U` k&.l&.:R m&.n&./@.o&.p&.q&.r&.tD /C s&.t&.(C u&..n L@ 0%.kn v&.dl w&.x&.f%.y&.z&.A&.B&.C&.D&.E&.F&.jn G&.H&.!r v8 p+ &. e> -j =h [$ !5 Z% I$ F{ F{ F{ F{ I$ )_ )_ F{ I$ I$ Z% t& t& '' =) r} q3 q3 r} =) '' q3 q3 q3 q3 q3 q3 q3 >k Gs !O !O !O Gs Gs Gs Gs Fs Fs a) a) a) a) hu hu t& Z% F{ )_ )_ F{ Z% t& F{ I$ I$ Z% t& t& T@ T@ Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& Z% Z% Z% I$ I$ t& t& Z% I$ I$ F{ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ Z% t& t& T@ T@ Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ T@ t& Z% F{ F{ Z% t& T@ T@ T@ t& t& Z% I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% t& T@ h+ h+ T@ t& Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ ", "2 2 3 6+ 6+ a+ a+ a+ a+ a+ a+ a+ a+ a+ a+ 9+ 3+ | } + l K@ 6+ h> 6& ,& M% j& 7& )& !& b+ b+ b+ b+ a+ a+ 0 0 E l H+ 0% H$ H$ b% K& E# M% M% 6& '& h> ,& 7@ '& h> 6& 6& 6& '& ~& S% E# E# E# E# E# E# E# E# K@ '$ >% ,% ,% >% '$ K@ n + + l D }# D n D D D D D D D G u B o k k o D }# '= '= F F O_ ;] ;] ;] >' >' E7 E7 p} p} f+ C q O@ o%.jm I&.J&.-i K&.!g L&.M&.vv N&.vN O&.x%.[B [B iG iG wC wC wC yv _F ;g ]h P&.tu Q&.)#.$@.tx R&.y9 ,o ^z S&.'[ T&.U&.V&.W&.X&.Y&.Z&.`&. *..*.K%.+*.@*.#*.$*.%*.m$.&*.O%.**.**.**.=*.vY -*.;*.>*.,*.,*.>*.'*.)*.]` !*.~*.{*.]*.^*./*.(*._*.:*.<*.[*.}*.|*.1*.2*.3*.4*.5*..H 6*.7*.8*.9*.0*.a*.b*.dK c*.d*.e*.f*.lJ gu $i Hb z% `% (+ ct 0. &. ,. D. h. ]+ {+ Y+ f+ $% $% $% $% $% $% $% $% 8c 0' $% &_ &_ &_ &) $% t% t% t% t% t% t% t% t% t% #% 6c 6c !% T$ M$ M$ $% $% $% $% $% $% $% $% |% |% $% $% &) &) &) .@ S# %& %& %& %& %& %& %& 6# 7# 7# 5$ [$ [$ %& t+ /@ Z@ '' b& *. S@ [$ #& }& }& @& @& :& rJ rJ ^$ y% =^ =^ =^ o^ o^ o^ o^ {@ U@ +# +# ]+ {+ G. 9# .# m* .# ]+ ~+ h. .# }| m* .# j+ ]+ ]+ j+ .# m* +# +# j+ j+ ]+ ]+ ]+ {+ j+ j+ ]+ j+ +# m* }| >5 m* m* m* m* m* +# j+ ]+ O) O) m* .# .# +# j+ j+ =- =- =- =- @% @% h+ h+ [. h+ j$ !. ^. ^. h# J$ og og p: .^ .* U@ j+ ]+ ]+ +# b) $& %& [$ %& $& b) m* O) >5 ,5 ,5 >5 O) m* .# j+ j+ j+ .# O) :] :] :] :] :] :] :] :] :] O) O) O) .# +# +# O) >5 .* .* .* .* .* .* .* .* ui ui ui ui ui ui ui ui 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ui ui ui ui ui ui ui C' p] Zl L2 *L _y p] C' .^ * * m* m* m* m* b) b) Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ h+ h+ h+ [. [. )_ Z% h+ h+ t& I$ I$ Z% Z% Z% Z% I$ I$ F{ F{ F{ O) :] }| >5 >5 }| :] O) '5 :] m* m* :] >5 '5 >5 )5 ,_ q$ a# a# q$ ,_ )5 ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ h+ Z% Z% h+ h+ Z% Z% h+ x8 F{ Z% Z% F{ F{ Z% T@ }| }| }| >5 >5 '5 '5 '5 O* >5 :] O) }| '5 '5 >5 I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ )_ )_ F{ I$ I$ Z% Z% t& I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ )_ )_ Is ^_ Ma Ma Ma ^_ ^_ I$ I$ I$ I$ a) a) q3 q3 q3 a) g*.F{ Z% )_ Y% I$ t& I$ F{ F{ F{ F{ F{ F{ F{ F{ I$ )_ x8 )_ I$ I$ F{ x8 x8 x8 x8 x8 x8 x8 x8 x8 Z% Z% Z% Z% Z% Z% Z% Z% I$ Z% t& t& Z% I$ )_ h*.cN #v g7 g7 q} O( I$ Z% I$ )_ O* ,5 34 34 Xl O* >5 I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ x8 x8 )_ )_ F{ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% F{ t& [. h+ I$ F{ I$ t& F{ F{ F{ I$ I$ Z% Z% Z% Z% t& t& Z% Z% F{ )_ x8 m* O) t& A% q} fc i*.C* d/ d/ <] <] Z% I$ >5 F{ c8 j*.k*.k*.l*.l*.-L me @6 ,L O> /O I7 m*.n*.o*.p*.q*.r*.s*.t*.}&.u*.v*.#%.;w %W w*.x*.y*.iU z*.A*.B*.C*.D*.E*.F*.CP G*.H*.I*.J*.K*.L*.M*.N*.O*.P*.Q*.l+.m+.T` T` X#.R*.Y#.X#.(%.X#.Y#.[..Y#.X#.S*.T*.U*.U*.V*.W*.X*.Y*.q$.Z*.`*. =..=.+=.@=.#=.$=.%=.&=.*=.l& A H&.==.W< i%.-=.;=.>=.,=.'=.)=.3G !=.~=.{=.~r ]s }l 88 ]=.k@ :. t& hu 48 g e> hu I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ =) r} :y D, D, :y r} =) D, D, :y q3 q3 r} =) :* Gs !O !O !O Gs Gs Gs Gs Fs Fs a) a) a) a) hu hu T@ T@ t& t& Z% I$ I$ F{ x8 x8 )_ )_ F{ I$ I$ Z% t& t& T@ T@ t& Z% F{ )_ t& t& t& t& t& t& t& t& t& t& t& Z% Z% Z% I$ I$ t& F{ x8 F{ Z% T@ Z% )_ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% T@ T@ T@ T@ T@ T@ T@ T@ I$ I$ I$ I$ I$ I$ I$ I$ x8 F{ Z% T@ T@ Z% F{ x8 )_ F{ F{ I$ I$ Z% Z% t& [. [. [. h+ T@ T@ t& t& T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ ", "3 6+ 6+ 6+ 6+ a+ a+ a+ a+ a+ a+ a+ a+ a+ a+ 9+ 3+ | } + l K@ 6+ 6& ,& M% M% N% 7& 8& )& b+ b+ b+ b+ a+ a+ 0 0 n + H+ H# Q$ Q$ 3& K& E# M% M% 6& '& h> ,& 7@ h> 6& ,& ,& ,& h> '& T% >% >% >% >% >% >% >% >% E# '$ >% ,% ,% >% '$ E# n l + l D }# D n D D D D D D D G u B o k k o D }# '= '= '= F +_ +_ +_ O_ x5 x5 g~ g~ <| <| '= '= 0% N 13 ~s ^=./=.JR (=._=.:=.<=.[=.FC }=.|=.1=.x%.[B iG iG wC wC wC Ny _r =g ]h ]h (h tu z%.A%.uu 2=.R&.40 3=.p0 '[ 4=.Mr 5=.4v 6=.7=.8=.9=.0=.a=.6%.-N b=.c=.d=.e=.f=.o$.**.C .C .**.x+.g=.5#.;*.5#.h=.i=.j=.k=.T*.l=.m=.n=.o=.p=.q=.r=.s=.t=.u=.v=.cS w=.x=.y=.z=.A=.B=.C=.D=.E=.Wt F=.D[ p2 a*.G=.H=.I=.J=.c*.K=.L=.tr Wt Ja Ja %i %h o+ b# q. ,. D. E. {+ h. U '= $% $% $% $% $% $% $% $% 8c |% $% &_ &_ &_ &) $% t% t% t% t% t% t% t% t% Y_ M$ !% !% #% T$ #% ,' $% $% $% $% $% $% $% $% |% |% $% $% &) &) &) +@ S# %& %& %& %& %& %& %& 5$ 5$ 5$ 5$ [$ [$ [$ p. /@ j. =- +% *. ,. [$ b) }& S# @& T# <& M=.:& @ y% =^ =^ =^ o^ o^ o^ o^ {@ U@ +# +# ]+ {+ G. 9# +# .# .# j+ {+ {+ +# :] .# +# j+ j+ j+ j+ +# .# +# +# j+ j+ ]+ ]+ ]+ ]+ +# +# j+ j+ +# m* O) }| .# m* m* m* m* .# j+ j+ m* m* .# .# .# .# +# +# =- =- =- =- @% @% h+ h+ [. h+ a# 8# ^. ^. h# J$ p: p: .^ -^ 2% U@ ]+ ]+ ]+ +# b) $& %& [$ a- $& [] m* m* O) >5 '5 }| O) .# .# .# .# .# m* O) :] :] :] :] :] :] :] :] :] O) O) :] m* +# +# O) }| * * * * * * * * fd fd fd fd fd fd fd fd 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ui ui ui ui ui ui ui C' _y Zl L2 *L _y p] C' p: 5[ 5[ :] :] :] :] !5 !5 Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& t& t& t& T@ T@ h+ h+ h+ )_ Z% h+ h+ t& I$ I$ Z% Z% Z% Z% I$ I$ F{ F{ F{ :] }| >5 '5 '5 >5 }| :] '5 }| m* O) }| '5 '5 '5 ^_ )5 ,_ q$ q$ ,_ )5 ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ T@ I$ I$ T@ T@ I$ I$ T@ )_ I$ Z% Z% F{ F{ I$ t& }| }| }| >5 >5 '5 '5 '5 O* >5 :] O) }| '5 '5 >5 I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ I$ I$ Z% Z% t& t& Z% Z% I$ I$ I$ I$ F{ F{ I$ I$ F{ F{ F{ )_ )_ Is ^_ Ma Ma Ma ^_ ^_ I$ I$ F{ F{ qj qj :y :y :y qj uJ t& T@ F{ x8 F{ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ Z% F{ )_ )_ I$ Z% I$ )_ )_ )_ )_ )_ )_ )_ )_ )_ Z% Z% Z% Z% Z% Z% Z% Z% F{ I$ Z% t& Z% I$ F{ X[ X[ g7 g7 / q} q} F{ F{ I$ )_ O* ,5 34 34 Xl O* '5 F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ )_ )_ F{ F{ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Y% F{ t& t& I$ F{ Z% h+ F{ F{ F{ I$ I$ Z% Z% Z% )_ F{ I$ t& T@ T@ T@ T@ }| }| Z% O( O( -L -L me c' c' !_ !_ I$ I$ >5 I$ ec tM tM N=.N=.d) d) ,L yJ V6 O=.P=.Q=.R=.S=..} T=.U=.V=.W=.X=.I$.Y=.Z=.`=.FJ -.gU .-.+-.@-.#-.$-.%-.&-.*-.d+.OM =-.--.;-.>-.,-.'-.)-.!-.!-.~-.{-.X` <..[..[..U` _%.]-.(%.(%.X#.X#.(%.(%.(%.X#.^-.U*./-./-.V*./X >*.(-._-.:-.<-.+=.[-.}-.|-.1-.2-.3-.4-.w8 &+ 5-.6-.!k 7-.8-.9-.0-.a-.b-.c-.d-.e-.f-.g-.h-.i-.Jk j-.;- k@ <. /. T@ d7 d7 QO #& d7 Z% Z% Z% Z% Z% Z% Z% F{ F{ F{ F{ F{ F{ F{ F{ -) r} :y D, D, :y r} =) :y :y q3 q3 q3 q3 r} 2( Gs !O !O !O Gs Gs Gs Gs d# d# *) a) a) qj dt dt Z% Z% Z% Z% I$ I$ I$ I$ F{ F{ F{ F{ I$ I$ I$ I$ Z% Z% t& t& t& Z% I$ I$ t& t& t& t& t& t& t& t& t& t& t& Z% Z% Z% I$ I$ t& I$ )_ F{ Z% t& I$ )_ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% )_ I$ t& T@ T@ t& I$ )_ F{ I$ I$ I$ Z% t& t& t& T@ T@ t& t& t& t& Z% Z% t& t& t& t& t& t& t& t& t& t& t& t& t& t& ", "K@ a+ a+ a+ a+ 6+ 6+ a+ a+ a+ a+ a+ a+ a+ a+ 9+ K& } 4 + l K@ a+ M% M% b+ b+ N% j& 7& 8& b+ b+ b+ b+ a+ a+ 0 0 l + 9+ )$ b% b% 5& K& E# M% M% ,& h> h> ,& b+ 6& ,& ,& M% ,& 6& h> '& ,% ,% ,% ,% ,% ,% ,% ,% E# '$ >% >% >% >% '$ E# E l + l E }# E n D D D D D D D G u B o k k o D }# '= '= '= '= <| p} p} p} O6 G) O6 O6 dd dd +_ F G$ R N* v8 eo ^=.k-.l-.m-.n-.o-.p-.q-.:j r-.s-.(F (F ;.Ja v5 %h o+ 7. 8. &. =. G. G. h. U $% $% $% $% $% $% $% $% 0' |% $% &) &_ &) &) $% t% U@ U@ U@ U@ U@ U@ U@ .* U@ {@ {@ m@ {@ Q% >' $% $% $% $% $% $% $% $% $% $% $% &) &) &_ &_ +@ S# H. H. H. H. H. H. H. H. G. G. G. G. F. F. =. &. (. @% /. =. ` G. .# T# .@ S# +@ ,;.2{ +..J- y% =^ =^ =^ o^ o^ o^ o^ m@ U@ .# +# ]+ {+ H. $& j+ +# .# .# j+ ]+ j+ .# j+ j+ +# .# .# +# j+ j+ +# +# +# j+ j+ ]+ ]+ ]+ m* .# +# +# +# .# m* m* .# .# m* m* m* .# +# j+ +# +# .# .# .# .# m* m* r$ r$ r$ r$ v+ v+ /. /. [. h+ a# j$ i# ^. h# J$ .^ .^ -^ o^ U@ U@ ]+ ]+ j+ .# b) $& %& %& a- b) !5 m* +# +# O) :] :] O) .# .# m* O) :] :] O) O) t& t& t& t& t& t& t& t& h+ t& t& T@ [. [. T@ Z% fd fd fd fd fd fd fd fd .* .* .* .* .* .* .* .* 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ui ui ui ui ui ui ui C' C' Zl *L *L C' _y og p: ui ui }| }| }| }| d7 d7 Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ Z% Z% t& t& t& T@ F{ Z% T@ T@ Z% I$ I$ t& Z% Z% Z% I$ I$ F{ F{ F{ >5 >5 '5 ,5 ,5 '5 >5 >5 ,5 >5 :] :] '5 O* ,5 '5 oh ^_ )5 )5 )5 )5 ^_ oh ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ t& )_ )_ t& t& )_ )_ t& F{ Z% t& Z% F{ )_ F{ Z% }| }| }| >5 >5 '5 '5 '5 ,5 >5 :] :] >5 '5 '5 >5 I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% t& t& t& t& Z% Z% I$ I$ F{ F{ )_ I$ I$ F{ F{ F{ )_ )_ Is ^_ Ma Ma Ma ^_ ^_ I$ I$ )_ )_ %n %n D, D, D, %n a) [. [. I$ x8 F{ I$ )_ F{ F{ F{ F{ F{ F{ F{ F{ -) a) qj a) -) -) *) qj qj qj qj qj qj qj qj qj Z% Z% Z% Z% Z% Z% Z% Z% )_ F{ I$ Z% Z% Z% I$ O( q} / / / q} X[ )_ )_ I$ )_ O* ,5 34 34 Xl O* ,5 )_ )_ )_ )_ )_ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% F{ F{ F{ F{ F{ F{ F{ F{ Z x8 F{ I$ F{ I$ t& h+ F{ F{ F{ I$ I$ Z% Z% Z% F{ I$ Z% T@ T@ h+ h+ T@ '5 '5 F{ O( O( ./ ./ c' me me / / I$ I$ >5 I$ hd 61 b: ./ ./ ';.';.'L ^O P=.);.!;.~;.{;.];.^;.];./;.(;._;.:;.<;.TQ cJ xP [;.r@.HM kU };.|;.1;.2;.O-.3;.}%.4;.5;.6;.7;.8;.9;.P*.0;.a;.b;.c;.c;.]%.m+.m+.[..U` T` (%.d;.aR _%.Y#.(%./%.h&.^%.X#.e;.f;.g;.h;.g;.h;.i;.j;.k;.l;.m;.n;.o;.o;.p;.q;.r;.U5 ._ j bg PY s;.t;.u;.v;.w;.x;.f%.y;.z;.A;.B;.C;.D;.E;.ku ;D e( /= <$ 4. a# O) La Lb CR L> !5 t& t& t& t& t& t& t& I$ I$ I$ I$ I$ I$ I$ I$ *) a) a) qj qj a) a) *) *) *) a) a) a) a) qj DR Gs !O !O !O Gs Gs Gs Gs <* <* -) *) qj %n F;.F;.F{ F{ F{ F{ I$ I$ I$ I$ Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ Z% t& t& t& Z% Z% t& t& t& t& t& t& t& t& t& t& t& Z% Z% Z% I$ I$ Z% I$ )_ F{ Z% t& I$ F{ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& I$ Z% T@ h+ h+ T@ Z% I$ Z% Z% Z% t& t& t& T@ T@ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% ", "E# E# K@ a+ a+ 6+ 6+ a+ a+ a+ a+ a+ a+ a+ a+ H+ K& } 4 l n E# a+ b+ b+ b+ b+ N% N% j& j& M% M% M% M% K@ K@ + + + 0 9+ H+ 5& 5& 5& 9+ '$ ,& b+ M% 6& h> ,& b+ M% M% M% M% ,& ,& 6& h> >% >% >% >% >% >% >% >% '$ '$ '$ >% >% '$ '$ '$ E n + l E D E l D D D D D D D G G B o o o o D D F '= '= f+ p} 5c 4c 9c M_ w8 M_ M_ kC kC O_ O_ %5 R# R G;.H;.eo tj .e I;.J;.K;.L;.M;.[r r-.-A 1=.N;...>.+>.@>.#>.$>.%>.&>.*>.=>.->.;>.rY rY C .O%.O@.>>.fZ 3..,>.'>.3..)>.!>.YP kD ~>.{>.{>.]>.]` ^>.zY #+./>.(>._>.:>.<>.[>.}>.|>.1>.2>.3>.4>.5>.6>.7>.8>.9>.0>.6z Zs a>.b>.e*.IS -R (O c>.d>.z% -D e>.7. 8. &. ). 9# $& +# ]+ T$ $% $% $% $% $% $% $% |% |% $% $% &) &) &) M$ t% U@ U@ U@ U@ U@ U@ U@ U@ m@ m@ U@ 2% m@ i> U% $% $% $% $% $% $% $% $% $% $% &) &) &) &_ &_ t% +@ j+ H. j+ H. j+ H. j+ 9# +# H. j+ G. {+ F. Z .. /+ j$ 8# B. $. m@ 2% M$ M$ t% t% ~_ n3 n3 =5 y% =^ =^ =^ o^ o^ o^ o^ m@ 2% .# +# j+ ]+ H. $& ]+ j+ .# .# .# +# j+ j+ ]+ j+ .# m* m* .# j+ ]+ .# .# +# +# j+ j+ ]+ ]+ O) m* m* .# +# +# +# +# +# .# m* m* m* .# +# +# j+ j+ +# .# .# m* O) O) r$ r$ r$ r$ v+ v+ /. /. [. h+ q$ a# h# i# S$ K$ -^ -^ o^ o^ U@ U@ ]+ ]+ j+ .# b) b) a- %& a- b) !5 .# ]+ ]+ +# m* O) m* +# m* :] }| >5 }| :] O) t& t& t& t& t& t& t& t& h+ t& Z% t& h+ [. T@ Z% ui ui ui ui ui ui ui ui .* .* .* .* .* .* .* .* 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ui ui ui ui ui ui ui C' og Zl *L *L og og og p: ui ui }| }| }| }| d7 d7 Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ I$ I$ Z% Z% Z% F{ Z% T@ T@ Z% I$ Z% t& Z% Z% Z% I$ I$ F{ F{ F{ '5 '5 '5 ,5 ,5 '5 '5 '5 ,5 >5 }| >5 ,5 KB O* '5 oh oh oh oh oh oh oh oh ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ Z% x8 x8 Z% Z% x8 x8 Z% I$ t& T@ Z% F{ x8 )_ I$ }| }| }| >5 >5 '5 '5 '5 ,5 >5 :] }| '5 ,5 >5 }| I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% t& t& t& t& t& t& Z% I$ I$ F{ )_ )_ I$ I$ F{ F{ F{ )_ )_ Is ^_ Ma Ma Ma ^_ ^_ I$ I$ x8 x8 uJ uJ c, c, c, uJ qj [. /. Z% )_ Z% t& I$ F{ F{ F{ F{ F{ F{ F{ F{ s% *) a) a) -) s% -) a) a) a) a) a) a) a) a) a) I$ I$ I$ I$ I$ I$ I$ I$ )_ )_ F{ I$ Z% Z% Z% A% A% [| [| / X[ X[ x8 x8 I$ )_ O* ,5 34 34 Xl O* O* x8 x8 x8 x8 x8 x8 x8 I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% t& t& t& F{ F{ F{ F{ F{ F{ F{ F{ Y% x8 )_ )_ )_ F{ Z% t& F{ F{ F{ I$ I$ Z% Z% Z% t& T@ T@ t& t& I$ F{ )_ '5 '5 F{ O( O( ./ ./ c' f>.f>.g7 g7 F{ I$ >5 Z% A% !_ ./ ./ ';.~O 'L g>.rP S=.h>.i>.j>.k>.l>.V=.m>.n>.o>.p>.Dk q>.>Z r>.HJ s>.NS t>.OS AY u>.oU }%.v>.w>.x>.:Z y>.z>._..A>.B>.C>.D>.E>.F>.G>.H>.I>.V` S` X` X` V` U` aR R*._%.Y#.(%.R*.]-.h&.J>.U*.K>.L>.L>.M>.N>.O>.P>.Q>.R>.S>.T>.U>.U>..Q V>.E7 i+ R ,k gm W>.X>.l( Y>.Z>.`>. ,..,.+,.@,.#,.$,.%,.&,.*,.=,.-,.:+ tM F- (* p: fd K> [Q % ,& b+ M% 6& h> ,& M% b+ M% M% ,& 6& 6& 6& 6& E# E# E# E# E# E# E# E# >% '$ '$ '$ '$ '$ '$ >% D n l l E D n + D D D D D D D G o &+ G G G G E E F '= '= f+ p} 5c 4c 9c M_ h> w8 w8 kC kC kC kC [# }# N O@ }9 >,.,,.V0 ',.Q/ ),.!,.@q g[ ,g -A s-.~,.{,.{,.d .d .QZ QZ QZ sN ],.:q ^h P;.Ry |s ^,./,.`E (,._,.:,.U;.<,.[,.},.|,.1,.2,.3,.4,.5,.6,.7,.8,.9,.0,.a,.b,.c,.d,.e,.0..rY C .O@.u+.u+.f,.G@.g,.XJ %T h,.+N qI lI i,.YP H@.j,./-.r$._X 0#.k,./>.l,.m,.n,.o,.p,.q,.r,.6X s,.t,.u,.v,.w,.x,. & V* s fK y,.2E 9J z,.jS y` 7I PG .H J! Ia (+ ct K; o+ ). v+ v+ j+ T$ $% $% $% $% $% $% $% |% |% |% $% $% &) &) t% t% U@ U@ U@ U@ U@ U@ U@ {@ l& {@ U@ .* 2% {@ i> $% $% $% $% $% $% $% $% &) &) &) &_ &_ &_ ~_ Y_ t% U@ j+ U@ j+ U@ j+ U@ .# 2% +# U@ ]+ m@ {+ B. ^. l+ S$ h# i# ^. L) o^ ^{ ^{ Q_ Q_ f% v% v% =] b/ =^ =^ =^ o^ o^ o^ o^ U@ 2% m* .# j+ ]+ 9# $& j+ j+ +# .# .# .# j+ ]+ ]+ j+ .# m* m* .# j+ ]+ .# .# .# +# +# j+ j+ j+ O) O) m* m* .# +# j+ ]+ +# +# .# m* m* m* .# +# j+ j+ +# .# .# m* O) O) r$ r$ r$ r$ v+ v+ /. /. [. h+ ,_ q$ S$ h# S$ K$ -^ -^ o^ o^ 2% U@ j+ j+ +# m* [] b) a- a- e> [] d7 m* ]+ ]+ j+ .# m* .# +# m* :] }| >5 }| :] O) t& t& t& t& t& t& t& t& h+ t& I$ Z% T@ h+ T@ Z% ui ui ui ui ui ui ui ui fd fd fd fd fd fd fd fd 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ui ui ui ui ui ui ui C' p: *L Zl Zl p: p: p: og 5[ 5[ :] :] :] :] !5 !5 Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ )_ F{ F{ F{ I$ I$ Z% Z% I$ t& T@ t& I$ F{ Z% T@ Z% Z% Z% I$ I$ F{ F{ F{ ,5 '5 '5 '5 '5 '5 '5 ,5 '5 >5 }| >5 O* KB O* '5 oh oh Is Is Is Is oh oh ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ I$ x8 x8 I$ I$ x8 x8 I$ I$ t& T@ Z% F{ x8 )_ I$ }| }| }| >5 >5 '5 '5 '5 '5 >5 :] }| '5 ,5 >5 :] I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ F{ F{ F{ I$ I$ F{ F{ F{ )_ )_ Is ^_ Ma Ma Ma ^_ ^_ I$ I$ x8 x8 uJ uJ c, c, c, uJ uJ t& h+ I$ F{ t& h+ t& F{ F{ F{ F{ F{ F{ F{ F{ s% r} q3 q3 =) '' =) q3 q3 q3 q3 q3 q3 q3 q3 a) I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ I$ Z% t& v$ A% [| [| / X[ X[ x8 x8 I$ )_ O* ,5 34 34 Xl O* O* x8 x8 x8 x8 x8 x8 x8 I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ t& t& t& Z% Z% Z% Z% Z% F{ F{ F{ F{ F{ F{ F{ F{ Z% F{ )_ x8 )_ F{ F{ F{ F{ F{ F{ I$ I$ Z% Z% Z% I$ I$ Z% I$ I$ )_ x8 Y% }| }| Z% O( O( -L -L me f>.f>.g7 g7 F{ I$ >5 Z% O( Gs !O !O H7 H7 R A,.B,.C,.j>.k>.D,.E,.F,.G,.H,.I,.J,.K,.L,.M,.N,.'Z GM NS sE O,.P,.Q,.R,.S,.T,.U,.V,.W,.X,.Y,.Z,.`,. '..'.+'.@'.#'.$'.5Z 5Z %'.l+.l+.X` X` X` [..h&.d;.^%.Y#._%.d;.&'.R*.*'.S*.h;.M>.M>.U%.j;.='.-'.R>.;'.o;.o;.>'.U>.,'.4-.'= (+ D' on ''.)'.!'.~'.{'.]'.^'./'.g%.w&.('._'.:'.<'.['.}'.|'.G;.Y@ U0 1U B) C' 5[ K> [Q 1'.2'.[] T@ T@ T@ T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ h+ h+ I$ ^_ I$ ^_ I$ ^_ I$ ^_ t& ,_ Z% ^_ I$ oh )_ X[ Gs !O !O !O Gs Gs Gs Gs cT DR qj a) a) *) d7 !5 x8 x8 )_ )_ F{ I$ I$ Z% T@ T@ t& t& Z% I$ I$ F{ )_ F{ Z% t& T@ T@ t& t& Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& Z% Z% Z% I$ I$ I$ I$ Z% I$ I$ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ T@ T@ T@ T@ T@ T@ T@ T@ t& t& T@ T@ T@ T@ t& t& T@ T@ T@ T@ t& t& t& t& I$ I$ Z% Z% t& T@ T@ h+ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ ", "K@ a+ a+ a+ a+ 6+ 6+ a+ a+ a+ a+ a+ a+ a+ a+ )$ 9+ 4 0 n E '$ K@ 7@ b+ M% ,& 7& 7& j& j& M% M% M% M% K@ K@ + + + l H# H+ P% P% 3& 0% >% ,& b+ b+ ,& 6& 6& ,& b+ M% ,& 6& h> h> 6& 6& E# E# E# E# E# E# E# E# >% >% '$ E# E# '$ >% >% }# E l l E E n + D D D D D D D G k &+ G u u G E n '= '= '= '= <| p} p} >' G) '& G) G) dd dd dd dd [# }# R$ O@ G;.]=.eo 3'.`b ',.4'.pC /8 x1 5'.6'.7'.8'.9'.{,.RZ d .QZ QZ ZO 0'.qN ru a'.b'.(h nt c'.vp #M `E S;.Zg x d'.e'.]} f'.g'.h'.rO i'.j'.k'.l'.)@.,` m'.n'.o'.p'.q'.r'.w+.@$.O%.O@.>>.s'.t'.F@.YJ u'..N .N .K N v'..N h,.|..w'.*'.U*.x'.y'.z'.A'.B'.C'.D'.E'.F'.G'.H'.I'.J'.K'.L'.M'.N'.O'.P'.Q'.R'.S'.~&.T'.$%.U'.V'.SQ ;R ;R ;R W'.d>.Zf ct <$.K; S &. &. ~+ @ $% $% $% $% $% $% $% $% $% |% |% |% &) &_ t% t% U@ U@ U@ U@ U@ U@ U@ {@ l& l& m@ 2% .* U@ {@ $% $% $% $% $% $% $% $% &) &) &) &_ &_ ~_ ~_ Y_ t% U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% U@ U@ U@ U@ i# f# >; g# g# f# f# d& _& Y^ Y^ Z^ Z^ j% j% x% b/ b/ =^ =^ =^ o^ o^ o^ o^ U@ .* m* .# j+ j+ 9# b) .# j+ ]+ j+ .# .# +# j+ j+ j+ +# .# .# +# j+ j+ m* .# .# .# +# +# j+ j+ m* m* m* m* m* +# j+ ]+ j+ +# .# m* m* m* .# .# +# +# .# .# .# .# m* m* r$ r$ r$ r$ v+ v+ /. /. /. T@ )5 ,_ K$ S$ S$ K$ -^ -^ -^ -^ .* .* .# .# +# m* [] [] e> a- e> [] !5 m* j+ j+ .# m* .# +# .# .# m* O) :] :] O) O) t& t& t& t& t& t& t& t& h+ t& I$ I$ t& T@ T@ Z% ui ui ui ui ui ui ui ui ui ui ui ui ui ui ui ui 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ui ui ui ui ui ui ui C' .^ *L Zl Zl .^ -^ p: og 5[ 5[ :] :] :] :] !5 !5 Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% F{ F{ F{ I$ I$ Z% Z% Z% Z% t& T@ Z% F{ F{ Z% h+ Z% Z% Z% I$ I$ F{ F{ F{ ,5 '5 >5 >5 >5 >5 '5 ,5 >5 }| }| >5 O* O* '5 }| ^_ oh Is Is Is Is oh ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ Z% x8 x8 Z% Z% x8 x8 Z% F{ Z% t& Z% F{ )_ F{ Z% }| }| }| >5 >5 '5 '5 '5 >5 }| }| >5 ,5 ,5 >5 :] I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% I$ I$ I$ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ )_ )_ Is ^_ Ma Ma Ma ^_ ^_ I$ I$ )_ )_ %n %n D, D, D, %n `Q Z% T@ F{ )_ t& h+ T@ F{ F{ F{ F{ F{ F{ F{ F{ =) q3 :y q3 =) =) r} :y :y :y :y :y :y :y :y qj qj F{ F{ F{ F{ F{ F{ F{ I$ I$ F{ F{ F{ I$ Z% v$ q} / / / q} X[ )_ )_ I$ )_ O* ,5 34 34 Xl O* ,5 )_ )_ )_ )_ )_ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ h+ Z% )_ x8 )_ F{ I$ F{ F{ F{ F{ I$ I$ Z% Z% Z% Z Y% x8 )_ F{ I$ F{ F{ }| }| Z% O( O( -L -L me me me / / I$ I$ >5 I$ cT ER X$.T6 ~O X'.qP $R Y'.Z'.`'. )..).+).@).#).$).%).&).qF *).>..=).ZN -).;).>).,).').)).P*.!).~).{).]).^)./).()._).4Z :).<).[).[).}).|).1).2).3Z S` X` [..[..U` (%.R*.h&.^%.(%.^%.R*.]-.d;.3).W*.h;.g;.L>.4).5).6).7).8).9).o;.>'.>'.p;.0).E' q a).b).==.c).wZ d).e).f).g).h).i).^$.j).k).l).m).n).o).p).q).s2 s# ,; r).s).rS 5[ b, [Q 1'.2'.!5 t& t& t& t& t& t& t& h+ h+ h+ h+ h+ h+ h+ h+ oh ^_ ^_ )5 )5 ^_ ^_ oh )5 )5 ^_ ^_ ^_ ^_ oh ec [| !O !O !O Gs Gs Gs Gs k@.k@.%n qj *) -) [] [] F{ F{ F{ F{ I$ I$ I$ I$ Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ Z% t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& Z% Z% Z% I$ I$ F{ I$ t& Z% F{ )_ I$ Z% I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& T@ T@ t& t& t& Z% Z% Z% Z% Z% t& t& t& t& T@ T@ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% ", "3 6+ 6+ 6+ 6+ a+ a+ a+ a+ a+ a+ a+ a+ a+ a+ )$ 9+ 4 + n E '$ E# b+ M% ,& h> 8& 8& 7& j& ,& ,& ,& ,& E# E# l l l E 0% )$ P% P% b% J# ,% ,& b+ 7@ M% 6& 6& ,& M% ,& h> '& ~& '& h> 6& '$ '$ '$ '$ '$ '$ '$ '$ ,% >% '$ E# E# '$ >% ,% }# E l n E E l 0 D D D D D D D G k &+ G u u G E n '= '= '= F +_ +_ +_ M_ t).!& t).t).N6 N6 g~ g~ F ,+ ,+ *+ s2 u).>,.a8 v).w).x).[j y).`h z).A).B).C).D).9'.RZ OW QZ QZ E).NW 0'.ru a'.^h vN Sy G} Hw R;.xN K] (,.F). x G).H).I).J).K).L).M).qO N).O).P).fy Q).R).S).T).i$.p&.U).e,.O@.O%.V).W).N%.X).Y).YJ v'.v'.Z).`). !..!.+!.7Z @!.#!.#!.$!.%!.&!.PU *!.=!.-!.;!.>!.,!.'!.)!.!!.~!.{!.]!.^!./!.(!._!.:!.[O a- #& !5 !5 m* .# m* O) O) .# ]+ .# .# .# .# .# m* O) :] t& v$ v$ v$ v$ v$ v$ v$ u$ v$ q} q} A% w$ v$ t& 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ui ui ui ui ui ui ui ui 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ui ui ui ui ui ui ui C' -^ *L rS Zl -^ o^ .^ og ti ti >5 >5 >5 >5 hu hu Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& I$ I$ I$ Z% Z% Z% t& t& Z% t& t& Z% F{ F{ t& h+ Z% Z% Z% I$ I$ F{ F{ F{ '5 >5 }| :] :] }| >5 '5 :] O) :] >5 ,5 O* >5 :] )5 ^_ oh Is Is oh ^_ )5 ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ Z% )_ )_ Z% Z% )_ )_ Z% )_ I$ Z% Z% F{ F{ I$ t& }| }| }| >5 >5 '5 '5 '5 >5 }| }| '5 O* ,5 >5 O) I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ )_ )_ x8 x8 )_ )_ F{ I$ I$ Z% t& t& I$ I$ F{ F{ F{ )_ )_ Is ^_ Ma Ma Ma ^_ ^_ I$ I$ F{ F{ qj qj :y :y :y qj }U Z% T@ F{ x8 I$ Z% I$ F{ F{ F{ F{ F{ F{ F{ F{ r} :y D, D, q3 r} q3 D, D, D, D, D, D, D, D, %n qj F{ F{ F{ F{ F{ F{ F{ t& Z% I$ F{ )_ F{ I$ A% X[ g7 g7 / q} q} F{ F{ I$ )_ O* ,5 34 34 Xl O* '5 F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% I$ I$ F{ F{ )_ )_ Z% Z% Z% Z% Z% Z% Z% Z% h+ Z% x8 x8 F{ t& T@ t& F{ F{ F{ I$ I$ Z% Z% Z% Z Y% )_ F{ I$ I$ I$ I$ '5 '5 F{ O( O( ./ ./ c' c' c' !_ !_ I$ I$ >5 I$ xF 8!.T6 zk vS oP 9!.0!.PB a!.b!.c!.d!.e!.f!.g!.DJ h!.9+.i!.=).j!.ZN k!.l!.m!.n!.o!.p!.q!.r!.s!.t!.u!.v!.w!.x!.y!.#'.@'.z!.A!.B!.C!.kL YM eO D!.E!.<..[..^%.^%.Y#.X#.aR ^%._%.^%./%.h&.R*.R*.F!.X*.L>.G!.O>.6).H!.R>.I!.J!.K!.L!.p;.M!.,'.N!.V$ D@ xx sv 2l !j O!.P!.Q!.R!.S!.T!.U!.V!.W!.X!.Y!.Z!.`!. ~..~.+~.i. K$ qS @~.@~.{D Es 34 ;,.1'.#~.d7 Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& Is bc $| (* (* $| bc Tt bc bc Ma Ma Ma Ma $| hd [| !O !O !O Gs Gs Gs Gs cT cT qj a) a) *) !5 !5 Z% Z% Z% Z% I$ I$ I$ I$ F{ F{ F{ F{ I$ I$ I$ I$ Z% Z% t& t& t& Z% I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ t& t& t& Z% Z% Z% I$ I$ )_ I$ t& Z% F{ )_ I$ t& I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ Z% Z% t& t& t& Z% I$ I$ I$ F{ Z% Z% Z% Z% I$ I$ I$ I$ t& t& t& t& t& t& t& t& t& t& t& t& t& t& ", "2 2 3 6+ 6+ a+ a+ a+ a+ a+ a+ a+ a+ a+ 0 l + 0 + n E '$ E# b+ ,& 6& '& '& )& h> 6& ,& ,& ,& ,& E# E# l l n D D H# 9+ 9+ 0% R$ ,% ,& a+ 7@ K@ 6& '$ ,& E# 6& ,% ~& U% ~& ,% >% >% >% >% >% >% >% >% >% ,% >% '$ K@ K@ '$ >% ,% }# E l n E E l 0 D D D D D D D D k o G u u G E n '= '= F F a% [# ;] ._ T% Z& F7 F7 F7 F7 $~.>' x5 Q% i> d+ X l@ A ;# %~.%~.&~.*~.=~.-~.;~.z).6'.B).>~.,~.3Y 0'.QZ QZ '~.ZO d .xC mK a'.mt )~.nt !~.~~.{~.b| zT ]~.^~./~.(~._~.:~.<~.[~.}~.|~.1~.2~.3~.4~.5~.6~.7~.8~.9~.0~.$$.N@.a~.O%.x+.7..b~.c~.d~.AU e~.v'.f~.`).g~.h~.i~.j~.@!.k~.>T l~.m~.n~.o~.o~.p~.q~.r~.s~.t~.u~.v~.w~.x~.y~.z~.A~.B~.C~.D~.E~.F~.F~.F~.9+.M,.SQ *H *H G~.H~.I~.J~.K~.L~.M~.Ms e- n; N$ 8. F. {+ {+ @ @ @ @ T$ &) $% |% 0' 2b ;_ =_ ~_ t% U@ t% U@ t% U@ U@ U@ ui * ]+ l& {+ {+ {+ h. d= $% d= $% d= $% d= $% 2{ &_ 2{ &_ 5! ~_ 4{ n3 t% Q_ Q_ Q_ Q_ Q_ Q_ Q_ ^{ ^{ Q_ Q_ y% u% u% .^ g# f# f# f# g# g# _& d& Z^ Z^ Y^ Y^ *- N~.O~.3b =^ =^ o^ o^ o^ o^ o^ o^ U@ .* O) m* +# j+ .# m* }| .# h. ~+ ]+ .# m* .# m* .# j+ ]+ ]+ j+ .# m* m* m* m* .# .# +# +# +# j+ +# m* O) O) m* +# j+ ]+ j+ +# m* m* m* m* m* O) O) m* .# .# +# j+ j+ @% @% =- @% @% @% h+ h+ /. T@ )5 )5 q$ K$ 8# K$ p: p: p: p: 5[ 5[ :] :] .# O) :] [] $& 9# b) !5 O) O) m* :] }| :] +# {+ m* .# j+ j+ j+ .# O) :] t& v$ v$ v$ v$ v$ v$ v$ 5. v$ q} q} O( v$ v$ t& fd fd fd fd fd fd fd fd ui ui ui ui ui ui ui ui 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ui ui ui ui ui ui ui ui o^ *L C' og -^ o^ .^ C' pj pj '5 '5 '5 '5 '5 '5 Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% T@ T@ T@ T@ T@ T@ T@ T@ I$ I$ }| }| :] :] :] O) t& t& t& I$ )_ F{ t& [. Z% Z% Z% I$ I$ F{ F{ F{ >5 }| :] O) O) :] }| >5 O) O) O) }| ,5 ,5 }| O) ,_ )5 oh Is Is oh )5 ,_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ t& )_ )_ t& t& )_ )_ t& x8 F{ Z% Z% F{ F{ Z% T@ }| }| }| >5 >5 '5 '5 '5 >5 }| }| '5 O* ,5 >5 O) I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ I$ ^_ I$ ^_ I$ ^_ I$ ^_ F{ oh )_ Is x8 s6 Y% Y% Y% x8 )_ F{ Z% t& T@ h+ I$ I$ F{ F{ F{ )_ )_ )_ ^_ Ma ^_ ^_ ^_ ^_ I$ I$ I$ I$ a) a) a) a) q3 a) )_ T@ T@ )_ Y% )_ )_ Y% F{ F{ F{ F{ F{ F{ F{ F{ a) %n c, %n q3 a) :y uJ c, uJ c, uJ c, uJ c, uJ F{ F{ F{ F{ F{ F{ F{ F{ h+ t& I$ F{ )_ )_ F{ I$ cN #v X[ X[ q} O( I$ Z% I$ )_ O* ,5 >5 >5 Xl O* I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ F{ )_ )_ x8 x8 Z% Z% Z% Z% Z% Z% Z% Z% T@ F{ Y% Y% Z% [. /. [. F{ F{ F{ I$ I$ Z% Z% Z% Z% Z% t& Z% Z% F{ )_ x8 gA `Y YY oh hd := 1{ c/ d/ d/ j; <] A% I$ I$ q} P~.g, 'L Q~.oP R~.S~.T~.U~.V~.W~.X~.X~.Y~.Z~.`~. {.KS cM .{.+{./w .&.@{.7D !H +.#{.{-.${.YS %{.&{.*{.{).={.!).-{.%'.[).;{.>{.,{.'{.vI vI ){.SP E!.T` X#.aR ^%.[..U` (%.X#._%./%.aR /%.aR m&.j=.!{.~{.{{.]{.^{./{.({._{.:{.<{.[{.}{.|{.Pl 0) @ 1{.2{.3{.4{.5{.6{.7{.8{.9{.]'.0{.a{.b{.*q >s #m c{.d{.e{.f{. & e# )5 g{.{2 L2 Zl C' 34 Kb ;,.;,.hu I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Is oh )5 ,_ ,_ )5 oh Tt Is Tt bc Ma Ma $| (* E) [| [| [| [| [| Gs Fs Fs Fs Fs a) a) a) a) hu hu T@ T@ t& t& Z% I$ I$ F{ x8 x8 )_ )_ F{ I$ I$ Z% t& t& O) T@ t& Z% F{ )_ I$ I$ I$ I$ I$ O( I$ I$ t& t& t& Z% Z% Z% I$ I$ )_ Z% T@ Z% F{ x8 F{ t& I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% )5 Z% )5 Z% )5 Z% )5 T@ q$ T@ q$ T@ q$ T@ T@ I$ I$ I$ I$ I$ I$ I$ I$ Z% I$ I$ F{ F{ I$ I$ Z% t& Z% Z% I$ I$ F{ F{ )_ Z% I$ I$ F{ F{ )_ x8 x8 T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ ", "l 0 4 4 0 l n } } } } } } } } k p p p p p p p L@ L@ L@ L@ L@ |$ L@ L@ a+ a+ K@ E# E# '$ >% >% K@ K@ K@ l l n n n 0 a+ 0 a+ + K@ l E# n '$ n '$ n '$ n '$ ,% '& '& ~& ~& T% T% T% ~& h> ,& M% M% ,& h> ^% i+ V V ,+ }# D E E n n E E D D }# }# E# >% ^% 9& 9& U% ^% ,% ,% ,% ^% U% U% 9& 6c Q% S% )& 7& 7& )& Z& 2c T% T% T% T% T% -+ -+ -+ -+ G@ D= M; h{.i{.j{.k{.l{.m{.n{.:q o{.p{.q{.r{.0'.].,].,].'].)].YB !].~].{].]].^]./].(].=R =R nA kA _].:].+& z% )~ b# W@ '. ). {+ @ d= $% ;_ <].<].<].<].&_ t% &_ t% 2{ +@ +@ +@ +@ +@ H. j+ H. H. H. H. ~= )= V_ d= M=.3{ ,;.2{ M= )= Wl != M= 3{ V_ 3c ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ $% &) &_ ~_ n3 n3 n3 n3 [! [! [! [! [! [! [! [! L) L) 6[ 6[ o^ -^ u% .^ L) L) m@ m@ m@ m@ m@ m@ m@ m@ U@ U@ 2% .* .* m* +# j+ ]+ ]+ ]+ +# m* O) .# .# .# .# .# .# .# .# .# .# .# +# j+ j+ ]+ ]+ :] m* +# +# m* m* +# ]+ +# +# +# +# +# j+ j+ j+ >5 }| m* .# .# m* }| >5 .# .# b) m* m* O) O) O) +# +# +# +# +# 2% +# 2% 5[ 5[ fd fd * .* .* 2% .* .* .* .# .# .# .# .# ui ui 5[ 5[ fd fd * * 5[ 5[ 5[ 5[ fd fd fd fd a# a# j$ j$ j$ a# ,_ ,_ )5 ,_ q$ q$ a# q$ ,_ ,_ }| :] m* +# .# O) >5 '5 m* m* m* m* m* m* m* m* q$ q$ q$ q$ q$ q$ q$ q$ q$ q$ ,_ ,_ )5 ^_ ^_ oh oh (* a# a# )5 )5 q$ 8# )5 )5 )5 )5 )5 )5 )5 Z% }| }| }| }| }| }| }| }| >5 >5 >5 >5 >5 >5 >5 I$ I$ O( I$ I$ I$ I$ >5 >5 }| }| b, b, b, b, b, b, >5 >5 >5 >5 >5 >5 >5 >5 .# :] '5 ,5 >5 :] :] :] t& Y% Y% I$ T@ Z% I$ t& [. F{ )_ T@ t& Y% Z Z% T@ t& Z% I$ I$ Z% t& T@ Z% Z% Z% Z% Z% Z% Z% Z% )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 O) b, 34 34 K> 4! K> 34 Xl Ds [].[].[].Xl b, :] x8 x8 )_ )_ F{ I$ I$ Z% F{ F{ F{ F{ F{ F{ F{ F{ oh bc oh bc oh bc oh bc ^_ Ma ^_ Ma ^_ Ma ^_ ^_ /. h+ t& I$ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ ^_ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ qj F{ Z x8 F{ I$ Z% I$ F{ F{ Z% Z% Z% Z% Z% Z% Z% Z% F{ F{ qj F{ qj F{ qj F{ qj F{ qj F{ qj F{ qj F{ F{ oh oh oh oh oh oh oh )5 ^_ ^_ oh Is Is s6 s6 Z% A% Z% Z% Z% Z% Z% Z% Z% F{ )_ x8 x8 )_ '5 Z% x8 x8 )_ F{ Z% t& T@ T@ x8 x8 x8 x8 x8 x8 x8 x8 Z% )_ Z Z x8 F{ F{ )_ Z% I$ )_ x8 x8 )_ I$ Z% F{ F{ F{ F{ F{ F{ F{ F{ Z% t& T@ T@ T@ Z% F{ )_ F{ F{ F{ F{ F{ F{ F{ F{ h+ x8 Z )_ I$ )_ )_ )5 _y _y _y Ma dc }].|].b* 1].b* c' ./ ./ [| DR g7 y] 2].3].4].#R 5].6].7].8].9].0].a].W .b].c].d].e]..{.f].~v g].h].i].{H 3L j].k].. .l].m].n].o].p].q].r].`,.l+.%'.l+._).W` |Z s].t].u].;{.n+.E!.v].w].x].x].y].v].Y#.(%.l&.z].z].l&.A].j,./@.j=.,T B].C].D].E].F].G].H].I].J].*_ ._ =# 2$ }9 K].L].M].N].O].P].Q].R].S].T].U].V].W].X].Y].Z].`].u= ^.Z@ t+ ). h+ I$ oh ^_ )5 )5 oh O* ,5 hu [] Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ F{ )_ )_ x8 x8 DR DR DR DR q} q} q} ec A% ec sM FR tJ :I WG U0 cc cc cc cc cc O( I$ I$ Z% Z% *) *) r} r} r} *) Z% Z% Z% Z% Z% Z% Z% Z% )_ F{ F{ I$ I$ Z% Z% t& O) O) 4! O) O) O) T@ T@ I$ t& w$ v$ O( / A% w$ Y% )_ F{ F{ )_ )_ I$ t& Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& T@ T@ T@ T@ T@ T@ T@ T@ )5 $| )5 Ma ^_ bc oh bc oh K$ 8# (* ^_ /* a# ,_ Z% Z% Z% Z% Z% Z% Z% Z% F{ F{ F{ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ F{ )_ )_ F{ I$ t& T@ T@ T@ T@ T@ T@ T@ T@ T@ Z% Z% Z% Z% Z% Z% ", "l 0 4 4 0 l n 4 4 4 4 4 4 4 4 p p p p p p p p L@ L@ L@ L@ L@ L@ L@ L@ K@ K@ E# E# E# E# '$ '$ K@ K@ K@ E# E# '$ '$ '$ 0 + + + l l n n n n n n n n n '$ >% h> h> '& '& ~& ~& ~& T% ~& h> ,& ,& h> ~& T% ,+ ,+ C }# D E n n n n E E D D }# }# >% >% ,% ^% U% U% ^% ^% ^% ^% U% U% U% U% 9& S% S% )& 7& 7& )& r& r& Z& Z& Z& Z& Z& Z& Z& Z& Z& E+ 3 Z. .^.+^.@^.#^.$^.%^.&^.,f c .*^. P 6Q ZO iG :V RW yC t{.t{.^.,^.,^.'^.)^.!^.~^.{^.]^.^^./^.G^ (^._^.:^.<^.[^.)C }^.|^.1^.2^.{@.GA Q{.3^.R{.&*.C .S{.V).V).Z{.4^.i&.]-.o+.W{.W{.U{.V{.|..!>.!>.W{.5^.6^.7^.8^.9^.0^.[..a^.o!.b^.t$.c^.d^.e^.f^.g^.h^.h^.i^.J .yV j^.k^.l^.m^.n^.o^.p^.q^.r^.WB s^.*H t^.u^.=..v^.w^.x^.:].y^.+& +& .& .& '. '. @ @ $% ;_ <].z^.z^.<].=_ &_ &_ &_ 2{ 2{ +@ +@ +@ S# H. H. H. H. H. H. M= M= M= M=.M=.,;.,;.,;.M=.M= ~= V_ M=.,;.M= != =_ =_ =_ =_ =_ =_ =_ =_ -_ =_ 0c A^.A^.A^.0c ~_ M$ m@ m@ m@ m@ m@ m@ m@ U@ U@ U@ 2% 2% 2% 2% 2% U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% 2% 2% +# j+ ]+ ]+ ]+ +# .# O) .# .# .# .# .# .# .# .# m* m* .# .# +# +# j+ j+ O) .# +# +# m* m* .# j+ j+ j+ j+ +# .# m* m* m* }| :] m* +# +# m* :] }| .# .# m* m* m* O) O) O) +# +# +# +# +# +# +# +# * * * * .* .* .* .* 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ fd fd fd fd fd * * * fd fd fd fd fd fd fd fd j$ j$ 8# 8# j$ a# q$ ,_ )5 ,_ q$ q$ a# q$ ,_ ,_ }| :] m* .# .# O) >5 '5 m* m* m* m* m* m* m* m* q$ q$ q$ q$ q$ q$ q$ q$ ,_ ,_ ,_ )5 )5 )5 )5 )5 Is )5 q$ q$ )5 ^_ q$ j$ )5 )5 )5 )5 )5 )5 )5 )5 }| }| }| }| }| }| }| }| >5 >5 >5 >5 >5 >5 >5 I$ I$ O( I$ I$ I$ I$ >5 >5 b, b, b, b, $w $w $w b, 34 >5 >5 >5 >5 >5 >5 >5 O) }| '5 '5 }| :] :] >5 t& x8 Y% I$ T@ Z% I$ t& t& x8 x8 t& t& )_ )_ T@ t& Z% I$ F{ F{ I$ Z% t& Z% Z% Z% Z% Z% Z% Z% Z% )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 K> 34 Xl 34 K> K> b, Xl 34 Xl Ds [].[].Xl 34 }| '5 F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ oh oh bc bc bc bc bc bc bc Ma Ma Ma Ma Ma Ma Ma Ma T@ t& I$ )_ )_ )_ )_ F{ )_ )_ )_ )_ )_ )_ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ Y% x8 F{ I$ Z% I$ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ oh oh oh oh oh oh oh oh oh oh oh oh oh Is Is Is Z% Z% Z% Z% Z% Z% Z% Z% I$ F{ )_ x8 x8 )_ F{ I$ F{ F{ F{ F{ F{ I$ I$ I$ )_ )_ )_ )_ )_ )_ )_ )_ Z% )_ Z Z x8 F{ F{ )_ Z% I$ )_ x8 x8 )_ I$ Z% F{ F{ F{ F{ F{ F{ F{ F{ I$ Z% t& t& t& I$ F{ )_ F{ F{ F{ F{ F{ F{ F{ F{ h+ x8 Z )_ I$ )_ )_ )5 )O tS lP B) dc }].}].B^.wJ wJ c' c' gd gd vM fc '^ 74 C^..} D^.E^.F^.G^.H^.I^.J^.K^.L^.%).M^.N^.O^.r@.P^.Q^.R^.S^.T^.BP p$.fZ nI oI U^.V^.W^.X^.Y^.k+.R` Q*.Q*.D@.:..:..W` W` l+.l+.W` X` m+.U` 2Z Z^.w].w].y].w]._%./%.`^.l&.j,. /.h=./@.h=../.,T +/.@/.#/.qV $/.%/.&/.*/.*_ @ c+ ~B eo =/.-/.;/.>/.,/.'/.)/.!/.~/.{/.0-.]/.^/.//.(/._/.:/. K> K> K> :] :] t& t& I$ Z% w$ v$ [| / !_ O; x8 F{ Z% I$ F{ F{ Z% T@ Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& t& t& t& t& t& t& t& ,_ ,_ (* $| $| Ma Ma Ma Ma bc K$ S$ (* Ma /* J$ (* Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ Z% Z% t& t& Z% Z% Z% Z% Z% Z% Z% Z% t& Z% )_ x8 )_ I$ T@ [. t& t& t& t& t& t& t& t& t& t& t& t& t& t& ", "l 0 4 4 0 l n + + + + + + + + L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ '$ '$ E# E# E# E# K@ K@ K@ K@ K@ E# E# '$ '$ '$ l l l n n E E E n n n n n n n '$ '$ 6& 6& h> h> '& '& '& S% T% '& h> h> '& T% S% C }# }# D E n n l E E E E D D D D ,% ,% ,% ,% ,% ^% U% 9& 9& 9& U% U% U% U% ^% ~& T% )& 7& 8& !& r& r& Z& Z& Z& Z& Z& Z& Z& Z& Z& b+ ,& #$ M; v_ [/.}/.|/.1/.2/.(k HW 3/..P QR QZ jG =^.[B iG ^.,^.5/.6/.7/.It 8/.9/.0/.a/.V{ b/.c/.d/.e/.f/.g/.h/.i/.1^.j/.k/.BE GA l/.m/.O@.S{.V).V).t'.4..cZ n/.n/.T{.o+.o+.W{.U{.V{.|..|..W{.;{.Y` T{.V{.o/.XP (%.p/.q/.#{.r/.s/.o!.t$.t/.u/.v/.w/.x/.y/.z/.}X A/.d#.B/.C/.C/.D/.!].r^.E/.RQ SQ F/.G/.H/.I/.w` J/.K/.Bk {> ^; -- k; '. '. .@ .@ &) -_ L/.M/.M/.R_ &_ t% t% t% t% t% t% t% U@ j+ j+ j+ j+ j+ j+ j+ 3{ 3{ 3{ 2{ 2{ 5! 5! 5! 5! 3{ d= d= 2{ 5! 2{ d= =_ =_ =_ =_ =_ =_ =_ =_ 0c 0c A^.A^.A^.0c =_ &) Y_ 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% U@ U@ U@ 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% U@ U@ U@ +# j+ j+ ]+ j+ +# .# m* .# .# .# .# .# .# .# .# m* m* m* m* .# .# .# .# m* +# j+ +# m* O) m* +# ]+ j+ +# .# m* O) :] }| O) m* +# j+ j+ +# m* O) .# .# m* m* m* O) O) O) m* m* m* m* m* m* m* m* 2% 2% 2% 2% .* .* .* .* 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ .* .* .* * * * * * .* .* * * * * * * j$ j$ 8# 8# j$ a# q$ ,_ ,_ ,_ q$ a# q$ q$ ,_ )5 :] O) m* .# m* O) }| '5 O) O) O) O) O) O) O) O) q$ q$ q$ q$ q$ q$ q$ q$ )5 )5 )5 )5 )5 ,_ ,_ ,_ Is ^_ ,_ )5 ^_ ^_ )5 q$ )5 )5 )5 )5 )5 )5 )5 )5 }| }| }| }| }| }| }| }| >5 >5 >5 >5 >5 >5 >5 I$ I$ O( I$ I$ I$ I$ >5 >5 Xl Xl Xl Xl N/.N/.N/.Xl 34 >5 >5 >5 >5 >5 >5 >5 }| >5 '5 }| O) O) }| ,5 t& x8 Y% Z% T@ Z% F{ Z% F{ Y% x8 Z% t& I$ I$ h+ I$ I$ F{ )_ )_ F{ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% oh bc bc bc bc bc bc bc $| $| $| $| $| $| $| )5 b, Xl Ds Ds 34 b, 34 Ds b, 34 Xl Ds Ds Ds Xl '5 }| Z% I$ F{ )_ x8 x8 Y% Z% Z% Z% Z% Z% Z% Z% )5 oh bc bc bc bc bc bc bc bc bc bc bc bc bc bc bc I$ F{ )_ x8 x8 x8 )_ F{ x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ x8 )_ F{ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ oh oh oh oh oh oh oh oh oh oh oh oh oh oh oh oh F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ I$ F{ )_ )_ )_ )_ F{ I$ F{ F{ F{ )_ )_ )_ x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ Z% )_ Y% Y% )_ F{ F{ )_ Z% I$ )_ x8 x8 )_ I$ Z% F{ F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ Z% I$ F{ )_ x8 Z% Z% Z% Z% Z% Z% Z% Z% T@ x8 Z )_ I$ )_ )_ ^_ )O tS _y Ma dc }].|].b* g( e/ c' d) X$.X$.Gs ';.<_ O/.l@.P/.6U Q/.R/.S/.T/.U/.V/.^L L,.W/.N^.X/.Y/.Z/.+-.`/. (..(.^R +(.1%. $.@(.#(.$(.%(.&(.*(.=(.D@.W` :..R` -(.D@.V` S` S` V` <..T` U` [..Y#.1Z 2Z y].w].X#.(%./%.R*.m&.j,.-*.5#.;*.g=.o&.;(.>(.,(.#/.Q@.'(.)(.!(.5x ~(.$~.}# :l {(.on ==.](.^(./(.((._(.:(.<(.x;.[(.}(.|(.1(.2(.3(.xR 0t u5 ;k +. Z% T@ h+ Z% F{ F{ I$ Z% Z% I$ )_ )_ I$ t& Z% Z% Z% Z% Z% Z% Z% Z% )_ )_ )_ F{ F{ F{ F{ F{ |+.|+.|+.|+.DR DR q} q} O( q} sM sM :I :I WG dc Ma Ma Ma Ma ^_ ^_ I$ I$ Z% Z% *) *) r} r} r} *) qj F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ Z% Z% Z% 34 34 34 34 >5 >5 I$ I$ F{ Z% v$ v$ [| / [| <] F{ Z% t& t& I$ I$ t& h+ Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% )5 q$ /* (* (* (* $| $| $| bc K$ S$ (* Ma /* J$ (* Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& T@ T@ Z% Z% Z% Z% Z% Z% Z% Z% T@ t& F{ )_ )_ I$ T@ [. Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& t& t& t& ", "l 0 4 4 0 l n l l l l l l l l L@ L@ L@ L@ L@ L@ L@ L@ <# <# <# <# <# <# <# <# >% >% '$ E# E# K@ a+ a+ K@ K@ K@ E# E# '$ '$ '$ n n E E D D D }# n n n n n n n n E# ,& ,& 6& 6& h> h> h> T% ~& '& h> h> '& ~& U% C }# }# D D E E n E E E E D D D D U% ^% >% '$ >% ^% 9& Q% Q% Q% 9& U% U% ^% ,% ,% ~& )& 7& 8& Z& r& Z& !& Z& Z& Z& Z& Z& Z& Z& Z& 6& '& p D= !> 4(.5(.8_ JZ #k {k 6(.kT IW mT 7(.mK jG jG _V E..d .RZ 8(.wC MH XD |B ;^.4/.>^.9(.XR 7/.0Q 0(.a(.b(.L} c(.d(.e(.f(.g(.h(.i(.j(.k(.l(.5%.}#.m(.n(.1#.o(.k].V).t'.4..4..4..p(.& .& .T{.T{.o+.o+.W{.U{.V{.V{.q(.}..Y` V{.q(.T{.7^.r(.s(.U*. /.S*.t(.u(.v(.w(.x(.c^.y(.z(.d^.A(.B(.C(.D(.E(.F(.G(.H(.E~.I(.h!.E/.J(.K(.L(.L(.M(.N(.#H O(.P(.2U {> -- -- i. ). G. .@ .@ &) -_ -_ L/.-_ t% t% t% t% t% t% t% t% U@ U@ U@ U@ j+ U@ j+ j+ 2{ 5! 5! 5! 5! 5! 5! 5! 4{ 2{ 3{ 2{ 4{ 4{ 5! 3{ -_ -_ -_ -_ -_ -_ -_ -_ A^.A^.A^.A^.0c =_ -_ $% o3 .* .* .* .* .* .* .* * .* .* 2% U@ U@ m@ m@ .* .* .* .* .* .* .* .* * .* .* 2% U@ U@ m@ m@ j+ j+ j+ j+ +# +# .# .# .# .# .# .# .# .# .# .# O) O) O) m* m* m* m* m* .# j+ ]+ +# m* :] O) .# .# .# .# m* O) O) :] :] .# +# j+ j+ j+ j+ +# .# .# .# m* m* m* O) O) O) m* m* m* m* m* m* m* m* m@ m@ U@ U@ 2% .* .* * .* .* .* .* .* .* .* .* 2% 2% 2% .* .* .* * * 2% 2% 2% .* .* .* * * q$ a# a# a# a# q$ ,_ )5 ,_ q$ q$ a# q$ ,_ )5 )5 :] O) m* m* m* :] }| >5 O) O) O) O) O) O) O) O) ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ oh ^_ ^_ )5 ,_ ,_ q$ q$ oh ^_ ^_ ^_ ^_ ^_ ^_ )5 )5 )5 )5 )5 )5 )5 )5 )5 }| }| }| }| }| }| }| }| >5 >5 >5 >5 >5 >5 >5 I$ I$ O( I$ I$ I$ I$ >5 >5 Xl Xl Xl Xl N/.N/.N/.Xl 34 >5 >5 >5 >5 >5 >5 >5 >5 '5 '5 }| O) O) >5 O* T@ )_ Y% Z% T@ I$ F{ Z% F{ )_ F{ I$ Z% I$ Z% t& F{ F{ F{ )_ )_ F{ F{ F{ Z% Z% Z% Z% Z% Z% Z% )5 bc bc bc bc bc bc bc bc Ma Ma Ma Ma Ma Ma Ma Ma ti Ds [].Ds 34 34 Xl [].b, 34 34 Xl Ds Ds [].O* I$ I$ I$ F{ )_ )_ )_ x8 Z% Z% Z% Z% Z% Z% Z% Z% oh bc bc bc bc bc bc bc bc bc bc bc bc bc bc oh )_ )_ )_ )_ )_ )_ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ oh oh oh oh oh oh oh oh oh oh oh oh oh oh oh oh F{ F{ F{ F{ F{ F{ F{ F{ x8 x8 )_ )_ F{ I$ I$ Z% F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ F{ F{ F{ )_ )_ )_ x8 x8 x8 x8 x8 I$ I$ I$ I$ I$ I$ I$ I$ I$ )_ x8 x8 F{ I$ F{ x8 Z% I$ )_ x8 x8 )_ I$ Z% F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ Z% Z% Z% Z% Z% Z% Z% Z% t& x8 Z F{ Z% F{ x8 oh )O lP _y dc HB }].b* b* V/ W/ d) me !O H' N; 4b P=.S=.Q(.R(.S(.7].T(.H^.U(.V(.]x /L W(.X(.Y(.Z(.`(. _.._.+_.@_.#_.dy $_.%_.&_.*_.=_.-_.;_.>_.,_.'_.:..:..D@.W#.W#.l+.X` V` X` m+.[..X#.(%.(%.(%.1Z )_.w].x].X#.(%./%.R*.N-.!_.{` 5#.~_.{_.q&.]_.^_./_.(_.__.i$./C :_.<_.!B /# c {(.<8 5p W>.[_./ .}_.|_.1_.2_.3_..,.4_.|(.5_.6_.7_.8_.% >% '$ E# E# K@ a+ a+ K@ K@ K@ E# E# '$ '$ '$ E E E D D }# }# }# n n n n n n n n E# E# E# '$ '$ >% >% >% >% >% '$ '$ '$ '$ >% >% C C C C }# }# }# }# D D D D E E E E U% ^% >% '$ >% ^% 9& Q% Q% Q% 9& U% U% ^% ,% ,% ~& h> 6& '& T% S% T% '& T% T% T% T% T% T% T% T% t).S% P f F= 68 0_.a_.I+.Ly 6p jo b_.8l oK ],.MH mK c_.Oy rN QZ 3Y d_.QZ wC MH XD |B -^.;^.e_.f_.g_.ps h_.i_.'} Uc j_.k_.d(.l_.m_.n_.o_.*G p_.q_.r_.'(.s_.t_.u_.v_.w_.s'.t'.4..p(.p(.9^.9^.9^.x_.y_.z_.A_.G@.G@.B_.B_.C_.5..H@.'>.D_.r(.,>.C_.3..R*.3..h&.N-.E_.F_.pU G_.s/.H_.t$.I_.J_.K_.L_.M_.`(.N_.O_.C/.P_.Q_.R_.]].J(.S_.lS T_.U_.FF <;.V_.W_.X_.Y_.)~ -- 8. =. '. j+ +@ 2{ 2{ 2{ }4 &_ t% 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ U@ 6[ U@ U@ 5! 5! 5! 5! 5! 5! 5! 2{ G{ 5! 3{ 2{ 4{ G{ 5! 2{ =_ =_ =_ =_ =_ =_ =_ =_ A^.A^.A^.A^.0c =_ -_ $% o3 .* .* .* .* .* .* .* * .* .* 2% U@ U@ m@ m@ .* .* .* .* .* .* .* .* * .* .* 2% U@ U@ m@ m@ ]+ j+ j+ +# +# .# .# .# .# .# .# .# .# .# .# .# m* m* m* m* m* O) O) O) .# j+ ]+ +# m* :] O) .# :] :] O) O) m* .# .# .# +# +# j+ j+ j+ j+ +# +# .# .# m* m* m* O) O) O) m* m* m* m* m* m* m* m* m@ m@ U@ U@ 2% .* .* * .* .* .* .* .* .* .* .* .* .* .* .* .* .* .* .* U@ 2% 2% .* .* * * * ,_ ,_ q$ q$ ,_ )5 ^_ oh q$ q$ a# a# q$ ,_ )5 ^_ O) O) O) O) O) :] }| }| :] :] :] :] :] :] :] :] ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ oh ^_ ^_ )5 ,_ ,_ q$ q$ )5 ^_ ^_ ^_ ^_ ^_ ^_ oh )5 )5 )5 )5 )5 )5 )5 )5 }| }| }| }| }| }| }| }| >5 >5 >5 >5 >5 >5 >5 I$ I$ O( I$ I$ I$ I$ >5 >5 Xl Xl Xl Xl N/.N/.N/.Xl 34 >5 >5 >5 >5 >5 >5 >5 '5 '5 '5 }| O) :] '5 KB h+ )_ x8 Z% T@ I$ )_ I$ Z% t& Z% I$ F{ I$ F{ )_ )_ F{ F{ F{ F{ F{ F{ )_ Z% Z% Z% Z% Z% Z% Z% )5 bc 1U 1U 1U 1U 1U 1U 1U B) B) B) B) B) B) B) Ma ti ,5 O* ,5 >5 >5 '5 O* >5 >5 >5 '5 '5 ,5 O* O* x8 )_ )_ )_ F{ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% oh oh oh oh oh oh oh oh Is Is Is Is Is Is Is Is )_ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 oh bc bc bc bc bc bc bc bc bc bc bc bc bc bc oh F{ F{ F{ F{ F{ F{ F{ F{ x8 x8 )_ )_ F{ I$ I$ Z% F{ F{ F{ F{ F{ F{ F{ F{ )_ F{ F{ F{ F{ F{ F{ )_ Z Z Y% x8 )_ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ F{ x8 )_ I$ Z% F{ x8 Z% I$ )_ x8 x8 )_ I$ Z% F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ Z% Z% Z% Z% Z% Z% Z% Z% t& x8 Z I$ t& F{ x8 oh )O _y ti cc +2 |].d) W/ g, g, Z_.';.S6 Y[ )~ +& +R BS `_. :..:.+:.@:.#:.$:.Vs >w %:.&:.*:.q! =:.-:.;:.>:.,:.':.):.!:.~:.{:.]:.^:./:.(:._:.::.kI <:.Q*.-(.W#.:..V` X` V` <..m+.U` Y#.(%._%._%._%.[:.}:.J>.J>.J>.J>.T*.S*.|:.t(.|:.>*.1:.2:.3:.4:.5:.6:.o(.0~.bH 7:.8:.n` >' 9 ,k 9:.0:.a:.)h kW b:.c:.d:.x;..,.e:.f:.g:.h:.i:.NL j:.k:.9>.-D /@ +% I$ )_ Z% t& F{ F{ Z% )_ I$ t& Z% F{ )_ I$ Z% I$ I$ I$ I$ I$ I$ I$ I$ x8 x8 )_ )_ F{ I$ I$ Z% |+.|+.|+.|+.DR DR q} q} X[ q} ec ec WG WG WG :I Ma Ma Ma Ma ^_ ^_ I$ I$ I$ I$ a) a) q3 q3 q3 a) qj F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ Ds Ds Ds Ds ,5 ,5 )_ )_ )_ I$ A% A% / g7 / !_ t& T@ [. h+ t& Z% t& h+ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ a# a# q$ q$ ,_ ,_ ,_ )5 oh j$ 8# ,_ ^_ q$ a# ,_ Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& T@ T@ h+ h+ Z% Z% Z% Z% Z% Z% Z% Z% x8 I$ T@ [. [. T@ F{ x8 I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ ", "l 0 4 4 0 l n l l l l l l l l L@ L@ L@ L@ L@ L@ L@ L@ p p p p p p p p '$ '$ E# E# E# E# K@ K@ K@ K@ K@ E# E# '$ '$ '$ n n E E D D D }# n n n n n n n n '$ '$ '$ >% >% ,% ,% ,% '$ '$ '$ '$ '$ '$ '$ '$ C C C C C C C C D D D D E E E E ,% ,% ,% ,% ,% ^% U% 9& 9& 9& U% U% U% U% ^% ^% '& h> h> ~& S% R% T% h> T% T% T% T% T% T% T% T% F7 l:.U% <# e d$ bg kn gt m:.0o cl n:.^k :q lt o:.Fw rN SR '~.E).NW p:.p:.QZ wC MH XD |B -^.u{.q:.r:.s:.t:.u:.v:.w:.x:.y:.z:.A:.B:.C:.D:.E:.F:.G:.H:.I:.J:.K:.L:.u_.v_.M:.N:.o/.0Z p(.9^.O:.9^.F@.F@.y_.z_.A_.G@.G@.B_.H@.G@.A_.3..C_.5..D_.,>.7^.o+.qI bZ P:.[... .Q:.R:.S:.T:.U:.V:.W:.X:.Y:.Z:.`:. <..<.d#.+<.+<.@<.#<.WB $<.S_.%<.kE &<.*<.=<.-<.;<.X_.Ls f7 Z@ 7. '. '. H. +@ S# +@ S# +@ U@ h# 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ _& 6[ Q_ ~_ 5! 5! 2{ 2{ 3{ 3{ 3{ 4{ 2{ 3{ 2{ 4{ 4{ 5! 3{ 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c A^.A^.A^.0c =_ &) o3 .* .* .* .* .* .* .* 2% 2% 2% 2% 2% U@ U@ U@ 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% U@ U@ U@ ]+ ]+ j+ .# .# .# +# +# .# .# .# .# .# .# .# .# .# .# .# .# m* m* m* m* m* +# j+ +# m* O) m* +# }| :] O) m* .# +# j+ ]+ +# +# +# +# +# +# +# +# .# .# m* m* m* O) O) O) m* m* m* m* m* m* m* m* 2% 2% 2% 2% .* .* .* .* 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ fd fd fd * .* .* .* 2% 2% 2% 2% .* * fd 5[ 5[ ,_ ,_ q$ q$ q$ ,_ ^_ ^_ a# a# a# a# q$ ,_ ^_ oh m* m* O) O) :] :] }| }| :] :] :] :] :] :] :] :] )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 ,_ ,_ ,_ q$ )5 ^_ ^_ )5 ,_ ^_ Is )5 )5 )5 )5 )5 )5 )5 )5 }| }| }| }| }| }| }| }| >5 >5 >5 >5 >5 >5 >5 I$ I$ O( I$ I$ I$ I$ >5 >5 Xl Xl Xl Xl N/.N/.N/.Xl 34 >5 >5 >5 >5 >5 >5 >5 >5 '5 ,5 '5 }| }| '5 O* h+ F{ x8 Z% T@ F{ )_ F{ Z% h+ T@ F{ )_ I$ I$ Y% )_ F{ I$ I$ I$ I$ F{ )_ Z% Z% Z% Z% Z% Z% Z% )5 bc 1U 1U 1U 1U 1U 1U 1U 1U 1U 1U 1U 1U 1U 1U bc ui '5 ,5 ,5 >5 }| >5 ,5 ,5 '5 >5 >5 >5 '5 ,5 O* Y% x8 x8 )_ F{ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% oh oh oh oh oh oh oh oh Is Is Is Is Is Is Is Is F{ F{ I$ Z% I$ I$ F{ )_ I$ I$ I$ I$ I$ I$ I$ I$ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ Z% I$ F{ )_ )_ )_ )_ F{ )_ )_ )_ )_ )_ )_ )_ Is bc bc bc bc bc bc bc bc bc bc bc bc bc bc bc bc F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ F{ I$ I$ F{ )_ )_ Z Z Y% )_ F{ I$ Z% t& F{ F{ F{ F{ F{ F{ F{ F{ I$ F{ )_ F{ Z% t& F{ x8 Z% I$ )_ x8 x8 )_ I$ Z% F{ F{ F{ F{ F{ F{ F{ F{ I$ F{ F{ )_ F{ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Y% Y% Z% T@ F{ x8 )_ ti ti ^_ cc +2 d) d) W/ ><.,<.Z_.2+.4b '<.)~ )<.!<.&Z ~<.{<.+:.]<.+W ^<./<.Iq FJ 9+.X/.(<._<.:<.<<.[<.}<.|<.1<.2<.3<.4<.5<.]:.6<.7<.8<.9<.0<.a<.b<.D@.R` D@.X` U` m+.V` U` U` [..[..Y#.X#.(%.(%.c<.d<.*'.*'.J>.J>.T*.S*.,*./X ,*.e<.:-.2:.f<.g<.h<.m(.0~.i<.+>.j<.k<.a, Z 9} tj /l l<.m<.n<.o.. ,.o<.p<.!$.q<.r<.s<.t<.u<.v<.w<.x<.y<.0+ . +. T@ I$ F{ T@ T@ I$ I$ T@ )_ I$ t& t& I$ F{ F{ I$ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ |+.|+.|+.|+.DR DR q} q} X[ X[ ec cc dc WG :I :I Ma Ma Ma Ma ^_ ^_ I$ I$ F{ F{ qj qj :y :y :y qj qj F{ F{ F{ F{ F{ F{ F{ Z% Z% Z% I$ I$ F{ F{ F{ Xl Xl Xl Xl '5 '5 F{ F{ )_ I$ A% O( g7 g7 / !_ t& h+ [. h+ Z% I$ Z% T@ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% q$ q$ ,_ ,_ ,_ )5 )5 )5 oh j$ 8# ,_ ^_ q$ a# ,_ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& t& t& T@ T@ Z% Z% Z% Z% Z% Z% Z% Z% Y% F{ t& [. [. Z% x8 z<.Z% Z% Z% Z% Z% Z% Z% Z% F{ F{ F{ F{ F{ F{ ", "l 0 4 4 0 l n + + + + + + + + p p p p p p p p p p p p p p p p K@ K@ E# E# E# E# '$ '$ K@ K@ K@ E# E# '$ '$ '$ [# [# [# a% a% a% F F [# [# [# [# [# [# [# [# E E E D D }# }# }# E E E D D E E E '= '= '= '= '= '= '= '= '= '= F F a% a% [# [# >% >% ,% ^% U% U% ^% ^% ^% ^% U% U% U% U% 9& 9& h> h> h> ~& R% R% ~& h> T% T% T% T% T% T% T% T% `m 2c T% w &+ A ~s S0 ft A<.B<.dl C<.D<.E<.F<.[s t-.wv nK G<.H<.I<.pT J<.p:.QZ wC MH XD =^.|B K<.L<.M<.c'.vp )#.^p N<.O<.P<.Q<.o] R<.S<.T<.U<.V<.W<.X<.Y<.Z<.`<.^_./_. [.z+.0^..[.0Z 7^.7^.7^.cZ W).tY f,.7..+[.+[.fZ M-.tY M-.@[.% .4W IU ,>..K N #[.bL tI P:.rI ,>.$[.Q*.W#.F_.R:.F_.G_.`T %[.&[.*[.=[.MF -[.;[.>[.,[.'[.)[.![.![.f` ~[.K,.{[.][.^[.CM /[.8!.-; e7 b# r$ r$ 9# a- 9# a- 9# !. /+ h# h# h# h# h# h# _& _& _& _& _& z) Z^ Z^ &_ &_ &_ &) &) $% $% $% ~_ &_ $% &) ~_ n3 &_ &) n3 n3 n3 n3 n3 n3 n3 n3 &) &_ ~_ n3 n3 n3 ~_ ~_ Y_ 2% 2% 2% 2% 2% 2% 2% U@ U@ U@ 2% 2% 2% 2% 2% U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% 2% 2% {+ ]+ +# .# m* .# +# j+ .# .# .# .# .# .# .# .# j+ j+ +# +# .# .# m* m* O) .# +# +# m* m* .# j+ m* m* m* .# +# j+ j+ j+ +# +# .# .# .# .# +# +# .# .# m* m* m* O) O) O) +# +# +# +# +# +# +# +# * * * * .* .* .* .* 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ti ti ui fd * .* 2% U@ 2% .* .* * fd 5[ ui ui a# j$ j$ j$ j$ a# q$ ,_ a# a# a# a# q$ )5 ^_ oh m* m* O) :] :] :] :] :] }| }| }| }| }| }| }| }| q$ q$ q$ q$ q$ q$ q$ q$ ,_ ,_ ,_ )5 )5 )5 )5 )5 j$ q$ ^_ )5 q$ q$ )5 Is )5 )5 )5 )5 )5 )5 )5 )5 }| }| }| }| }| }| }| }| >5 >5 >5 >5 >5 >5 >5 I$ I$ O( I$ I$ I$ I$ >5 >5 b, b, b, b, $w $w $w b, 34 >5 >5 >5 >5 >5 >5 >5 }| '5 O* O* '5 >5 >5 ,5 [. F{ x8 Z% t& F{ x8 F{ )_ T@ T@ )_ )_ t& t& x8 F{ I$ Z% t& t& Z% I$ F{ Z% Z% Z% Z% Z% Z% Z% )5 qS s).s).s).s).s).s).s).([.([.([.([.([.([.([.1U ,_ I$ F{ I$ t& t& Z% F{ Y% x8 F{ I$ I$ I$ F{ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ )_ F{ I$ I$ F{ )_ Y% z<.F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ t& Z% F{ x8 x8 x8 )_ F{ )_ )_ )_ )_ )_ )_ )_ Is bc 1U 1U 1U 1U 1U 1U 1U 1U 1U 1U 1U 1U 1U 1U bc F{ qj qj qj qj qj qj qj qj qj qj qj qj %n %n %n Z% Z% Z% Z% Z% Z% Z% Z% x8 )_ F{ I$ I$ F{ )_ x8 )_ )_ )_ F{ I$ I$ Z% Z% )_ )_ )_ )_ )_ )_ )_ )_ I$ F{ F{ I$ t& t& F{ x8 Z% I$ )_ x8 x8 )_ I$ Z% F{ F{ F{ F{ F{ F{ F{ F{ Z% I$ F{ F{ F{ Z% t& h+ F{ F{ F{ F{ F{ F{ F{ F{ I$ Y% Y% Z% T@ F{ x8 x8 >5 >5 I$ O( [| ';.';.,L U; V6 2+._[.:[.<[.1I 7z @..[[.{<.}[.|[.1[.$:./<.2[.,v 3[.4[.5[.6[.7[.8[.vV 9[.0[.a[.b[.c[.d[.e[.f[.g[.h[.i[.WF j[.-C !` k[.X` <..m+.U` U` T` m+.Y#.[..U` T` T` U` Y#.X#.l[.]%.J>.*'./-.T*.S*.j=.Y*.(-.Z*.m[.f<.n[.o[.p[.)(.}#.q[.$=.r[.s[.a, {@ v8 0_./l em t[.xZ h).u[.v[.w[.x[.y[.z[.A[.B[.C[.D[.E[.8T ,= M@ U% [! o^ a# Z% t& [. [. Z% Z% h+ x8 I$ t& T@ Z% F{ F{ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ |+.|+.|+.|+.DR DR q} q} cN X[ ec cc dc WG :I tJ Ma Ma Ma Ma ^_ ^_ I$ I$ F{ F{ qj qj :y :y :y qj *) Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ F{ F{ F{ Xl Xl Xl Xl '5 '5 F{ F{ x8 F{ A% O( g7 #v / [| t& T@ h+ T@ I$ F{ I$ t& Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ t& t& t& t& t& t& t& t& t& t& Z% Z% I$ I$ I$ I$ F{ [. /. t& I$ T@ h+ t& Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ Z% Z% t& t& Z% Z% Z% Z% Z% Z% Z% Z% F{ F{ I$ I$ F{ )_ x8 Y% t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% ", "l 0 4 4 0 l n + + + + + + + + p p p p p p p p p p p p p p p p a+ a+ K@ E# E# '$ >% >% K@ K@ K@ E# E# '$ '$ '$ m m m [# [# a% a% a% [# [# [# [# [# [# [# [# D D D }# }# C C C D D }# C C }# D D a% a% a% a% F F F F '= '= F F a% a% [# [# E# >% ^% 9& 9& U% ^% ,% ,% ,% ^% U% U% 9& Q% Q% h> h> h> ~& R% R% ~& h> T% T% T% T% T% T% T% T% F[.1b ~& '& P W G[.H[.fo I[.J[.K[.L[.M[.N[.O[.P[.vn :r Q[.R[.S[.T[.qT J<.J<.p:.QZ wC mK =^.XD U[.V[.V[.nt W[.X[.#@.Xe Y[.Z[.`[. }..}.+}.o% I{.@}.#}.$}.%}.R@.&}.]_.ZP ^_.*}.=}.0^..[.-}.-}.;}.W).W).tY f,.7..7..+[.+[.M-.7..>}.IU M-.dZ ,}.lI '}.)}.!}.~}.$K tI G {}. G Y` ]}.<../Z ^}./}.(}._}.w$.:}.Z:.<}.[}.-[.}}.O_.|}.1}.M^.M^.2}.3}.@;.4}.][.J,.5}.6}./[.:U dE )~ b# b# b# b# r$ r$ r$ (. <$ /+ l+ /+ h# h# h# 6[ _& _& _& z) z) `^ Z^ 5% &_ &) &) $% |% |% 0' ~_ &) $% $% &_ ~_ &_ $% &5 &5 &5 &5 &5 &5 &5 &5 $% &) &_ ~_ n3 n3 n3 o3 2% 2% 2% 2% 2% 2% 2% 2% m@ m@ U@ U@ 2% .* .* * m@ m@ m@ m@ m@ m@ m@ m@ m@ m@ U@ U@ 2% .* .* * {+ ]+ +# .# m* .# +# j+ .# .# .# .# .# .# .# .# ]+ ]+ j+ j+ +# .# .# .# :] m* +# +# m* m* +# ]+ j+ j+ j+ +# +# +# +# +# +# .# .# m* m* .# .# +# .# .# m* m* m* O) O) O) +# +# +# +# +# +# +# +# 5[ 5[ fd fd * .* .* 2% .* .* .* .* .* .* .* .* YY YY ti ui fd .* 2% U@ .* .* * fd 5[ ui ti ti 8# !. !. !. !. 8# j$ a# a# j$ j$ a# q$ )5 ^_ oh .# m* O) :] }| }| :] :] }| }| }| }| }| }| }| }| j$ j$ j$ j$ j$ j$ j$ j$ q$ q$ ,_ ,_ )5 ^_ ^_ oh 8# q$ )5 )5 a# a# ,_ oh )5 )5 )5 )5 )5 )5 )5 )5 }| }| }| }| }| }| }| }| >5 >5 >5 >5 >5 >5 >5 I$ I$ O( I$ I$ I$ I$ >5 >5 b, b, b, b, $w $w $w b, 34 >5 >5 >5 >5 >5 >5 >5 :] '5 KB KB ,5 >5 >5 '5 [. F{ x8 Z% t& F{ x8 F{ Z Z% t& x8 )_ h+ [. F{ I$ Z% t& T@ T@ t& Z% I$ Z% Z% Z% Z% Z% Z% Z% )5 qS s).s).s).s).s).s).s).([.([.([.([.([.([.([.1U q$ Z% I$ I$ t& T@ t& I$ Z Y% )_ I$ Z% Z% I$ F{ Z% I$ I$ F{ )_ )_ x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ )_ Z 7}.8}.)_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ t& Z% F{ x8 x8 x8 )_ F{ F{ F{ F{ F{ F{ F{ F{ oh bc 1U 1U 1U 1U 1U 1U 1U 1U 1U 1U 1U 1U 1U 1U bc F{ qj qj qj qj qj qj qj *) a) a) qj %n %n uJ uJ Z% Z% Z% Z% Z% Z% Z% Z% x8 )_ F{ Z% Z% F{ )_ x8 Z% Z% Z% I$ I$ I$ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 I$ F{ F{ Z% T@ t& I$ x8 Z% I$ )_ x8 x8 )_ I$ Z% F{ F{ F{ F{ F{ F{ F{ F{ Z% Z% I$ F{ I$ t& T@ [. F{ F{ F{ F{ F{ F{ F{ F{ I$ Y% Y% Z% T@ F{ x8 x8 >5 I$ O( Gs !O ';.,L /O O=.9}._[.Z[ 0}.Bk ./-.D}.j=.E}.Y*.(-.1:.F}.G}.H}.I}.J}.K}.K}.L}.r[.M}.N}.m@ ,$ O}.{B P}.KZ Q}.R}.S}.T}.U}.V}.W}.X}.Y}.Z}.`}. |..|.jJ =* 0% Q% 9- ni z) a# t& h+ +. /. Z% Z% [. x8 I$ t& T@ Z% F{ F{ I$ F{ F{ F{ F{ F{ F{ F{ F{ Z% I$ I$ F{ )_ )_ x8 x8 |+.|+.|+.|+.DR DR q} q} cN X[ ec hd U0 WG :I tJ Ma Ma Ma Ma ^_ ^_ I$ I$ F{ F{ qj qj :y :y :y qj *) Z% Z% Z% Z% Z% Z% Z% t& Z% Z% I$ I$ F{ F{ )_ 34 34 34 34 >5 >5 I$ I$ x8 F{ A% O( g7 #v g7 [| Z% T@ h+ t& I$ )_ F{ Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ T@ T@ T@ T@ T@ T@ T@ T@ Z% Z% Z% I$ I$ F{ F{ F{ F{ [. /. t& I$ T@ h+ t& Z% Z% Z% Z% Z% Z% Z% Z% F{ F{ F{ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% t& I$ x8 Z z<. Z x8 F{ T@ T@ T@ T@ T@ T@ T@ T@ h+ h+ h+ h+ h+ h+ ", "n + 0 0 + n E + } 1 } + n + 4 p p p p p p p p L@ L@ L@ L@ L@ L@ L@ L@ K@ E# >% '$ K@ a+ E# '$ '$ '$ '$ '$ '$ '$ '$ '$ a% O_ O_ O_ +_ +_ +_ +_ -] -] -] M+ M+ ;] ;] [# }# E n E D }# D n n n E E D D }# }# a% O_ +_ +_ <| p} p} p} 5c <| +_ O_ O_ +_ <| >+ 9& U% ^% U% Q% k+ i> 9& ^% ^% ^% ^% ^% ^% ^% ^% ^% U% 9& Q% Q% U% ,% >% ^% U% U% 9& Q% Q% i> u& F[.lf )& '& v u+ #| ~s |b TG +|.[p =q @|.#|.$|.%|.tn vn c .&|.*|.=|.-|.PR ;|.>|.3Y ,|.'|.tT XD )|.!|.!|.9p nt ~|.0m @@.{|.]|.^|./|.(|._|.L< |& :|.<|.[|.}|.||.1|.2|.3|.4|.ZP 6:.5|.6|.=}.7|.8|.7..W).V).W).tY W).W).f,.+[.M-.dZ dZ % .% .@[.lI 9|.0|.a|.b|.)}.c|.wI SP 5H .E!.d|.e|.V` S` S,.b[.f|.g|.h|.w$.i|.j|.k|.l|.m|.n|.o|.p|.q|.r|.s|.t|.u|.v|.w|.^[.x|.I,.y|.+& Q; <+.<+.Ms & N$ .& t. v. g. Y@ f. n+ n+ |. ^. ^. c& c& 7!.7!.7!.*- 5% 5% 5% 5% 5% 5% 5% 5% f% 5% 4% %% %% 4% 5% f% M$ M$ M$ M$ M$ M$ M$ M$ =5 M$ M$ =5 =5 M$ M$ =5 Q% U@ 5[ fd m@ k+ {@ 2% 2% 2% 2% 2% 2% 2% 2% 2% {@ m@ 2% .* * .* 2% U@ U@ U@ U@ U@ U@ U@ U@ U@ .# .# .# .# .# .# .# .# +# +# +# .# .# m* m* m* ]+ j+ .# m* m* .# j+ ]+ .# .# .# .# .# .# .# .# j+ j+ +# .# .# m* O) O) O) O) :] }| }| >5 >5 '5 m* m* m* m* m* m* m* m* ]+ +# m* }| }| :] O) .# .* .* .* .* .* .* .* .* 2% * fd 5[ 5[ fd * 2% pj ti ui 5[ fd * .* .* 5[ .* U@ U@ * 5[ ui 5[ a# a# a# a# a# a# a# a# ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ }| }| }| }| }| }| }| }| }| }| :] :] O) O) m* m* Is Is oh ^_ ^_ )5 )5 ,_ a# a# q$ ,_ )5 ^_ oh Is a# q$ q$ q$ ,_ ,_ )5 )5 ^_ ,_ q$ j$ j$ q$ ,_ ^_ }| >5 >5 '5 '5 >5 >5 }| }| }| }| }| }| }| }| Z% T@ w$ t& t& Z% I$ >5 '5 [].b, C, K> N/.N/.4{ Z+ 34 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 )_ x8 Y% x8 I$ t& Z% F{ )_ x8 Y% x8 I$ Z% Z% F{ )_ )_ F{ I$ I$ Z% t& t& T@ T@ T@ T@ T@ T@ T@ q$ Ma B) B) B) B) B) B) B) z|.A|.g{.1U B) B) B) Ma ,_ Z% F{ )_ )_ F{ Z% t& I$ F{ F{ F{ F{ I$ Z% t& I$ I$ F{ F{ F{ )_ )_ )_ z<.z<. Z x8 )_ F{ I$ Z% x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ I$ Z% Z% I$ )_ x8 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ Y% x8 )_ F{ F{ )_ x8 Y% F{ I$ Z% t& t& Z% F{ )_ Y% x8 )_ F{ F{ )_ x8 Y% x8 x8 x8 x8 x8 )_ )_ Is bc $| (* Ma Ks Js Ks Tt bc bc bc bc bc bc bc oh uJ c, c, c, c, c, c, c, :y :y :y :y :y :y :y qj F{ I$ Z% t& T@ t& t& t& )_ )_ )_ F{ F{ F{ I$ I$ T@ T@ T@ T@ T@ T@ T@ T@ F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ Y% Y% x8 )_ F{ I$ Z% t& x8 x8 )_ )_ F{ I$ I$ I$ t& Z% F{ )_ )_ F{ Z% t& F{ F{ F{ F{ F{ F{ F{ F{ a) qj cT B|.:U C|.'L 9}.sP D|.3U +R pP E|.mA a}.Fp F|.G|.H|.Fq g}.I|.J|.K|.L|.M|.N|.O|.P|.Q|.R|.S|.T|.'*.U|.V|.W|.X|.S:.Y|.Z|.(R OM &-.`|. 1..1.+1.Y#.Y#.Y#.Y#.X#.(%.(%.X#.Y#.[..U` [..X#._%.^%.U*.@1.@1.f;.x'.sV M>.#1.i;.$1.%1.&1.*1.=1.-1.;1.>1.,1.'1.)1.i% !1.e 0%.8_ s;.~1.U!.{1.]1.^1.R].c%.y[./1.(1._1.:1.<1.[1.}1.|1.11.f+ ^* 21.31.41.Ma I$ I$ I$ I$ I$ I$ I$ F{ I$ I$ Z% t& t& T@ T@ T@ t& I$ F{ F{ I$ t& T@ I$ I$ I$ I$ I$ I$ I$ I$ >k >k |+.}+.k@.51.61.61.cN cN sM sM WG dc dc dc Ma Ma Ma Ma ^_ ^_ I$ I$ )_ )_ %n qj :y :y q3 a) +% T@ t& I$ F{ I$ Z% Z% h+ h+ T@ T@ t& t& t& Z% 34 34 34 34 >5 >5 I$ I$ T@ F{ 61.h*. / !_ [| g7 I$ I$ I$ I$ I$ I$ I$ I$ h+ T@ I$ )_ x8 )_ I$ Z% T@ T@ T@ T@ T@ T@ T@ T@ T@ T@ t& Z% F{ )_ x8 x8 I$ I$ I$ I$ I$ I$ I$ I$ t& t& t& t& t& t& t& t& Z% I$ I$ t& h+ h+ Z% )_ Z% t& T@ T@ T@ Z% F{ )_ )_ F{ Z% t& t& Z% F{ )_ t& Z% F{ )_ )_ F{ Z% t& I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% ", "l + 0 0 + l n 0 } | } + n + 4 p p p p p p p p <# <# <# <# <# <# <# <# K@ E# >% '$ K@ a+ E# '$ '$ '$ '$ '$ '$ '$ '$ ._ O_ O_ O_ O_ O_ O_ O_ O_ '@ -] -] M+ ;] ;] O_ O_ '= E n E D }# D n n n E E D D }# '= O_ +_ +_ +_ <| p} p} p} p} <| +_ O_ O_ +_ <| p} >' ,% >% ,% 9& Q% 9& ^% ^% ^% ^% ^% ^% ^% ^% ^% U% U% 9& Q% 9& U% ,% >% 9& 9& 9& 9& 9& Q% Q% R% `m if Z& Z& T% P &+ v8 H;.xw 71.+|.81.{=.91.01.a1.b1.7p +@.tm &|.c1.d1.MW e1.f1.3Y ,|.sT g1.[B h1.O&.O&.mt i1.]h P&.:s NH j1.]|.k1.l1.m1.n1.## o1.p1.:|.q1.r1.s1.t1.u1.v1.w1.t_.x1.u_.v_.f=.n$.f,.W).S{.W).tY W).W).tY +[.M-.% .% .SX SX @[.lI y1.z1.A1.A1.)}.B1.C1.tI TP E!.d|.n+.e|.D1.S` E1.>W H_.F1.G1.H1.I1.J1.K1.L1.M1.N1.3X X/.O1.P1.Q1.R1.S1.4}.T1.J,.U1.5}.W_.V1.W1.h` 1I X1.R; )<.2U e& s@ <@ <@ t. g. :. s# B. ^. [! c& *- 7!.7!.7!.5% 5% 5% 5% 5% 5% 5% 5% f% 5% 4% %% %% 4% 5% f% t% t% t% t% t% t% t% t% =5 M$ M$ =5 =5 M$ M$ =5 i> U@ 5[ fd U@ l& m@ .* 2% 2% 2% 2% 2% 2% 2% 2% {@ m@ 2% .* * .* 2% U@ U@ U@ U@ U@ U@ U@ U@ U@ .# .# .# .# .# .# .# .# +# +# +# .# .# m* m* m* ]+ j+ .# m* m* .# j+ ]+ .# .# .# .# .# .# .# .# +# +# .# .# .# .# m* m* m* m* O) O) :] :] }| }| m* m* m* m* m* m* m* m* j+ .# O) }| }| :] m* +# .* .* .* .* .* .* .* .* .* * fd 5[ 5[ fd * .* 5[ 5[ 5[ 5[ fd * .* 2% ui * U@ 2% * 5[ 5[ fd a# a# a# a# a# a# a# a# ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ }| }| }| }| }| }| }| }| }| }| :] :] O) O) m* m* ^_ ^_ ^_ )5 )5 )5 )5 )5 q$ q$ ,_ ,_ )5 ^_ ^_ oh q$ q$ q$ q$ ,_ ,_ )5 )5 )5 )5 ,_ q$ q$ ,_ )5 )5 }| >5 >5 '5 '5 >5 >5 }| }| }| }| }| }| }| }| Z% t& v$ Z% Z% Z% Z% >5 >5 [].b, 4! b, Y1.Y1.24 .@ 34 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 F{ )_ x8 )_ I$ Z% I$ )_ I$ )_ x8 )_ Z% t& I$ F{ I$ I$ I$ I$ I$ I$ I$ I$ t& t& t& t& t& t& t& ,_ Ma B) Ma B) Ma B) Ma B) Tt g{.bc B) $| B) Ma bc )5 I$ I$ F{ F{ I$ I$ Z% F{ F{ )_ )_ F{ I$ Z% Z% I$ I$ F{ F{ F{ )_ )_ )_ Y% Y% x8 )_ F{ F{ I$ I$ x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ I$ Z% Z% I$ )_ x8 I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ Y% x8 )_ F{ F{ )_ x8 Y% )_ F{ I$ Z% Z% I$ )_ )_ x8 )_ F{ I$ I$ F{ )_ x8 F{ F{ F{ )_ )_ )_ )_ )_ Is Ma )5 Ma Is Ks Is bc oh bc oh bc oh bc oh oh %n D, D, D, D, D, D, D, :y :y :y :y :y :y :y qj %n F{ I$ Z% t& Z% Z% Z% )_ )_ )_ F{ F{ F{ I$ I$ t& t& t& t& t& t& t& t& F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ x8 x8 )_ )_ F{ I$ I$ Z% x8 )_ )_ )_ F{ I$ I$ I$ t& Z% F{ )_ )_ F{ Z% t& F{ F{ F{ F{ F{ F{ F{ F{ a) |+.cE 8!.C|. R 9}.Z1.`1. 2.A,.@R jA .2.L$.+2.@2.#2.$2.%2.&2.*2.J|.K|.=2.-2.M_.;2.>2.,2.'2.)2.!2.~2.{2.]2.^2./2.(2.W|.Z|._2.:2.<2.[2.^H }2.e+.+1.[..T` m+.T` [..X#.(%.(%.X#.[..U` T` T` U` ]%.|2.K>.K>.12.22.32.L>.#1.T%.42.52.Q>.&1.*1.62.72.5x 82.M}.h% y% s& t< +g 92.A} 02.a2.]1.b2.c2.d2.e:.e2.f2.g2.h2.i2.j2.k2.l2.m2.TO 4c *- n2.o2.p2.Ma I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% I$ I$ I$ I$ Z% I$ )_ x8 x8 )_ I$ Z% I$ I$ I$ I$ I$ I$ I$ I$ :* 2( 2( >k DR cT cN h*.X[ X[ sM ec dc dc dc U0 bc bc bc bc oh oh F{ F{ )_ )_ %n qj :y :y q3 a) @% t& Z% F{ F{ F{ I$ Z% T@ T@ t& t& Z% Z% Z% I$ 34 34 34 34 >5 >5 I$ I$ h+ I$ cN cN [| <] !_ [| I$ I$ I$ I$ I$ I$ I$ I$ h+ t& I$ )_ x8 )_ I$ Z% t& t& t& t& t& t& t& t& t& t& Z% I$ I$ F{ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ t& t& t& t& t& t& t& t& I$ F{ F{ Z% T@ T@ I$ x8 I$ Z% t& t& t& I$ F{ )_ )_ F{ Z% t& t& Z% F{ )_ t& Z% F{ )_ )_ F{ Z% t& I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% ", " + 0 4 4 0 + + 0 4 } 4 + l + 0 L@ L@ L@ L@ L@ L@ L@ L@ p p p p p p p p K@ E# >% '$ K@ a+ E# '$ '$ '$ '$ '$ '$ '$ '$ ._ ;] .A .A .A .A .A vw vw e@ e@ iu vw .A q2.mf +_ r2.0% H# 0% G$ J# G$ H# H# H# 0% 0% G$ G$ J# r2.+_ mf mf ee ee ee fe fe fe ee mf mf mf mf ee p} x5 >% '$ >% U% 9& U% ,% ^% ^% ^% ^% ^% ^% ^% ^% C ,+ ,+ ,+ ,+ C }# D V V V ,+ ,+ ,+ ,+ 9& 1b SU 2c q& R% U+ X 23 13 s2.t2.0` u2.v2.w2.x2.V@.=} My LH {j y2.z2.A2.QR B2.3Y 0'._V ,|.C2.3.,3.{U BJ '3.fJ y^.fJ 4*.{I )3.)3.$) e& s@ $@ (. #. i# L) d& Y^ Y^ 5!.5!.5% 5% 5% 5% 5% 5% 5% 5% f% 5% 4% %% %% 4% 5% f% Y_ 2% 2% 2% 2% 2% 2% 2% * m@ m@ * * m@ m@ * {@ .* 5[ fd U@ {@ U@ * 2% 2% 2% 2% 2% 2% 2% 2% m@ m@ U@ .* .* .* 2% 2% U@ U@ U@ U@ U@ U@ U@ U@ .# .# .# .# .# .# .# .# +# +# +# .# .# m* m* m* j+ +# .# .# .# .# +# j+ .# .# .# .# .# .# .# .# m* m* .# .# .# .# +# +# +# +# .# .# .# m* m* m* m* m* m* m* m* m* m* m* .# m* O) :] :] O) .# +# * * * * * * * * .* * fd fd fd fd * .* 2% .* fd 5[ 5[ * .* U@ ui fd .* 2% * fd * .* a# a# a# a# a# a# a# a# ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ }| }| }| }| }| }| }| }| :] :] :] :] O) O) O) O) q$ ,_ ,_ ,_ ,_ )5 )5 )5 ,_ ,_ ,_ )5 )5 )5 )5 )5 q$ q$ q$ ,_ ,_ )5 )5 )5 ,_ )5 ^_ ^_ ^_ ^_ )5 ,_ }| >5 >5 '5 '5 >5 >5 }| }| }| }| }| }| }| }| Z% I$ O( I$ Z% Z% Z% }| }| [].34 K> 34 Y1.!3.N/.C, 34 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 Z% F{ x8 )_ I$ I$ )_ x8 T@ Z% F{ I$ Z% t& I$ )_ t& t& Z% I$ I$ F{ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ )5 $| )5 $| )5 $| )5 $| ^_ $| )5 (* )5 $| ^_ oh q} O( O( A% A% O( O( q} X[ X[ cN cN cN q} O( O( I$ I$ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ uJ uJ uJ uJ uJ uJ uJ uJ uJ %n a) *) *) a) %n uJ Z% Z% Z% Z% Z% Z% Z% Z% F{ F{ F{ F{ F{ F{ F{ F{ x8 )_ )_ F{ F{ )_ )_ x8 x8 )_ )_ F{ F{ F{ )_ x8 )_ F{ I$ I$ I$ I$ F{ )_ Z% Z% I$ I$ F{ )_ )_ )_ x8 Is I$ ^_ )_ s6 F{ )5 F{ oh F{ oh F{ oh F{ F{ qj :y :y :y :y :y :y :y :y :y :y :y :y :y :y qj uJ x8 F{ I$ I$ I$ I$ F{ )_ )_ )_ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ I$ I$ Z% I$ I$ F{ F{ I$ I$ Z% F{ F{ F{ F{ F{ F{ F{ qj >k rr M~.`G mP WV 3+.`1.4U m>.~3.YV {3.]3.^3./3.-w (3._3.:3.J|.=).<3.F(.[3.}3.b#. U |3.13.23.33.43.53.63.73.83.93.03.a3.B}.s(.}%._R ^Z b3.c3.d3.e3.T` m+.<..<..T` [..X#.[..U` T` T` T` T` U` f3.K>.g3.tV ,2.h3.i3.9[.j3.k3.l3.m3.m3.n3.o3.p3.q3.r3.J].s3.=] n+ u< t3.u3.v3.w3.( .x3.y3.z3.z3.2_.}(.A3.B3.C3.D3.E3.F3.G3.H3.I3.rJ &) b/ J3.K3.L3.Ma I$ I$ I$ I$ I$ I$ I$ t& Z% Z% I$ F{ )_ x8 x8 )_ x8 Y% Y% Y% Y% x8 )_ I$ I$ I$ I$ I$ I$ I$ I$ :* :* 2( 2( Fs DR X[ X[ q} q} ec cc dc U0 U0 U0 Tt Tt Tt Tt Is Is )_ )_ )_ )_ %n qj :y :y q3 a) *) Z% I$ F{ )_ F{ F{ I$ Z% Z% Z% I$ I$ F{ F{ F{ 34 34 34 34 >5 >5 I$ I$ h+ Z% q} q} !_ <] <] !_ I$ I$ I$ I$ I$ I$ I$ I$ T@ t& I$ )_ )_ F{ I$ Z% I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ a) a) a) a) a) a) a) a) -) -) -) -) -) -) -) -) Z% I$ F{ I$ t& T@ I$ )_ F{ I$ I$ Z% I$ F{ )_ x8 F{ I$ I$ Z% Z% I$ I$ F{ Z% I$ I$ F{ F{ I$ I$ Z% I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% ", "0 4 4 4 4 0 0 0 4 4 0 + l l + L@ L@ L@ L@ L@ L@ L@ L@ p p p p p p p p K@ E# >% '$ K@ a+ E# '$ '$ '$ '$ '$ '$ '$ '$ ._ ;] .A vw vw vw iu iu iu e@ e@ iu vw q2.mf ee <| r2.0% H# 0% G$ J# G$ H# H# H# 0% 0% G$ G$ J# r2.+_ mf ee ee ee ee ee ee ee ee ee mf mf ee ee <| x5 ,% >% ,% U% Q% 9& ^% U% U% U% U% U% U% U% U% ,+ ,+ ,+ ,+ C }# }# D i+ i+ V V ,+ C C ^% `n SU 2c 1c u& u& . _+ o+ M3.N3.O3.P3.Q3.8t R3.S3.1/.+1 _s /q {h sm T3.+M U3.QZ QZ E..E..zC yC [B MH MH Fw Fw vC :r 0l uC (q *} V3.W3.X3.f6 Y3.Z3.`3.o1.D% m% 4..4.+4.@4.#4.H].$4.z .%4.T..BE a~.C .=*.C .**.x+.=*.x+.uY 9..v+.v+.8..8..D .@[.rI &4.)}.C1.R2.dL 5H n+.}..V` V` X` v>.v>.v>.*4.*4.=4.-4.;4.>4.,4.'4.)4.!4.~4.{4.=:.]4.^4.2X /4.(4._4.&3.*3.=3.:4.;3.>3.{U RY <4.b].[4.lA }4.|4.14.24.{I )3.^; ), k; t. :. #. m@ L) ^{ Y^ 7% 7% j% 5% 5% 5% 5% 5% 5% 5% 5% 5% 4% 4% 4% 4% 5% Q_ o3 .* .* .* .* .* .* .* * m@ m@ * * m@ m@ * U@ .* fd fd 2% U@ 2% fd 2% 2% 2% 2% 2% 2% 2% 2% m@ U@ U@ 2% 2% .* .* .* 2% 2% 2% 2% 2% 2% 2% 2% .# .# .# .# .# .# .# .# +# +# +# .# .# m* m* m* +# .# .# .# .# .# .# +# .# .# .# .# .# .# .# .# O) O) m* .# .# +# j+ j+ j+ j+ j+ +# +# +# +# +# m* m* m* m* m* m* m* m* O) O) :] :] O) m* +# j+ * * * * * * * * * * * fd fd * * * m@ U@ * fd 5[ * 2% U@ ti 5[ .* .* fd fd .* U@ a# a# a# a# a# a# a# a# ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ }| }| }| }| }| }| }| }| :] :] :] :] O) O) O) O) a# a# a# q$ ,_ ,_ )5 )5 )5 )5 )5 )5 )5 ,_ ,_ ,_ q$ q$ ,_ ,_ )5 )5 ^_ ^_ ,_ )5 oh Is Is oh )5 ,_ }| >5 >5 '5 '5 >5 >5 }| }| }| }| }| }| }| }| Z% )_ q} F{ I$ Z% Z% :] :] Xl b, K> 34 34.Y1.N/.b, 34 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 t& I$ )_ )_ F{ F{ )_ Z [. T@ Z% Z% t& t& I$ )_ Z% Z% Z% I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ t& ,_ t& ,_ t& ,_ t& ,_ t& ,_ T@ q$ t& )5 F{ F{ X[ q} A% v$ v$ A% q} X[ cN cN h*.h*.cN X[ q} O( I$ I$ F{ F{ F{ )_ )_ )_ t& Z% Z% I$ I$ F{ F{ F{ uJ uJ uJ uJ uJ uJ uJ uJ uJ %n a) *) *) a) %n uJ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ F{ F{ F{ F{ )_ )_ Y% x8 x8 )_ )_ )_ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ t& t& Z% I$ I$ F{ )_ )_ `Q %n qj qj %n %n a) -) qj qj qj qj qj qj qj qj q3 q3 q3 q3 q3 q3 q3 q3 :y :y :y :y :y :y :y :y `Q Y% x8 )_ F{ F{ )_ )_ )_ )_ )_ F{ F{ F{ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ qj |+.rr M~.VV '3.qP 3+.`1.P/.44.54.64.74.x` 84.1y 94.04.'R K|._L a4.b4.c4._` :@.d4.e4.f4.g4.h4.i4.53.53.j4.73.9;.93.k4.V|.e3.!_.e3.l4.d3.e3.{` !_.m+.m+.U` [..[..[..[..U` X` <..m+.U` Y#.(%.^%.m4.12.n4.i3.i3.i3.o4.p4.q4.l3.r4.m3.s4.n3.t4.u4.v4.h% w4.)O 8# .g x4.y4.)'.2Q Q}.z4.R].A4.B4.C4.D4.E4.F4.G4.H4.I4.J4.K4.L4.M4.N4.14 =5 *L O4.P4.Q4.Ma I$ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ )_ )_ )_ x8 x8 x8 x8 Y% Y% x8 x8 x8 I$ I$ I$ I$ I$ I$ I$ I$ 2( 2( >k >k DR DR X[ X[ O( O( cc cc dc U0 U0 U0 Ks Ks Ks Ks s6 s6 x8 x8 )_ )_ %n qj :y :y q3 a) qj F{ F{ )_ )_ )_ F{ F{ I$ I$ I$ F{ F{ )_ )_ )_ 34 34 34 34 >5 >5 I$ I$ t& Z% O( O( !_ !_ !_ !_ I$ I$ I$ I$ I$ I$ I$ I$ t& Z% I$ F{ F{ F{ I$ Z% F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ Z% Z% a) a) a) a) a) a) a) a) *) *) *) *) *) *) *) *) T@ Z% I$ Z% T@ h+ t& I$ F{ F{ F{ F{ F{ F{ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ ", "4 0 0 0 0 4 4 4 0 + + + + l n L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ K@ E# >% '$ K@ a+ E# '$ '$ '$ '$ '$ '$ '$ '$ ._ ;] .A .A vw vw iu iu e@ iu iu vw .A q2.mf ee <| r2.F$ b% F$ Q$ I# Q$ b% b% b% F$ F$ Q$ Q$ I# r2.<| ee ee ee ee ee mf mf mf ee ee ee ee ee ee +_ L_ ^% ,% U% Q% i> Q% 9& U% U% U% U% U% U% U% U% V ,+ ,+ C }# }# }# }# i+ i+ V V ,+ C C ^% if R4.SU `n S% R% T _+ 9. +f S4.T4.p).U4.6N 'Y V4.W4.X4.ou _s Hx ,f HW vC wv rN wC iG .w+.L-.M@.L-.rY &5.*5.*5.=5.=5.-5.dZ {}.+N N ZJ qI E@.;5.e|.e|.v>.v>.E_.G_.G_.G_.E_.*4.k+.l+.7;.(2.{{.>5.,5.'5.)5.!5.~5.{5.]5.^5./5.(5._5.:5.<5.[5.-3.}5.|5.!U 15.25.25.w` 74.35.45.55.55.65.|4._].{I R; -- Z@ '. j+ U@ t% Q_ 5% j% j% j% j% j% j% j% j% j% 7% 7% j% j% j% j% 7% ^{ o3 .* .* .* .* .* .* .* * m@ m@ * * m@ m@ * 2% .* * .* 2% 2% .* * 2% 2% 2% 2% 2% 2% 2% 2% U@ U@ U@ U@ 2% 2% .* .* 2% 2% 2% 2% 2% 2% 2% 2% .# .# .# .# .# .# .# .# +# +# +# .# .# m* m* m* m* .# .# .# .# .# .# m* .# .# .# .# .# .# .# .# O) O) m* .# .# +# j+ j+ +# +# +# +# +# j+ j+ j+ m* m* m* m* m* m* m* m* O) :] :] O) O) .# +# +# fd fd fd fd fd fd fd fd fd * * * * * * fd U@ 2% .* fd fd * .* 2% ui fd * * fd fd .* U@ a# a# a# a# a# a# a# a# ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ }| }| }| }| }| }| }| }| O) O) O) O) :] :] :] :] a# a# a# q$ ,_ ,_ )5 )5 )5 )5 )5 )5 )5 ,_ ,_ ,_ ,_ ,_ ,_ )5 )5 ^_ ^_ ^_ ,_ )5 oh Is Is oh )5 ,_ }| >5 >5 '5 '5 >5 >5 }| }| }| }| }| }| }| }| Z% )_ X[ F{ F{ I$ Z% }| :] 34 b, K> K> G7 N/.G7 b, 34 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 t& I$ )_ )_ F{ F{ )_ Z [. T@ Z% Z% t& t& I$ )_ F{ F{ F{ I$ I$ Z% Z% Z% )_ )_ )_ )_ )_ )_ )_ )_ Z% Z% *) Z% *) Z% *) Z% -) t& s% T@ -) Z% qj F{ X[ / !_ <] <] !_ / g7 #v #v e; e; #v g7 / O( I$ I$ F{ F{ F{ )_ )_ )_ t& t& Z% I$ I$ F{ )_ )_ uJ c, c, c, c, c, c, c, c, D, q3 r} r} q3 D, uJ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ Y% Y% Y% x8 x8 )_ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ t& Z% Z% I$ I$ F{ F{ qj 75.D, :y :y D, D, q3 =) :y :y :y :y :y :y :y :y 5z 5z 5z 5z 5z 5z 5z 5z dN dN dN dN dN dN dN :y `Q Y% x8 )_ )_ )_ )_ x8 )_ )_ )_ F{ F{ F{ I$ I$ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ F{ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ qj hA Cp Ps T [).l5.m5.Z,./}.^}.n5.FP o5.n5.v>.f3.p5.p5.f3.e;.f3.03.g&.X` T` (%./%.aR _%.[..T` m+.T` [..X#._%./%.aR q5.r5.s5.,2.tV 9[.uV q4.t5.u5.m3.v5.o3.t4.w5.v4.x5.r: og ^_ '+ y5.;d z5.jW A5.B5.u[.C5.D5.E5.F5.G5.H5.I5.J5.K5.L5.M5.N5.M4.O5.P5.Q5..o $n R5.S5.T5.dc I$ I$ I$ I$ I$ I$ I$ x8 )_ )_ )_ F{ F{ I$ I$ )_ )_ )_ F{ F{ )_ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ |+.|+.}+.}+.cT k@.cN cN O( O( cc cc dc dc dc WG Ks Ks Ks Ks s6 s6 x8 x8 )_ )_ %n qj :y :y q3 a) %n )_ F{ F{ F{ F{ F{ F{ I$ F{ F{ F{ )_ )_ x8 x8 34 34 34 34 >5 >5 I$ I$ )_ F{ O( O( / / / / I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ I$ Z% Z% )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ I$ I$ I$ I$ Z% Z% a) q3 q3 q3 q3 q3 q3 q3 r} r} r} r} r} r} r} *) [. T@ Z% t& h+ [. h+ t& F{ F{ )_ )_ )_ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ ", "0 + + + + 0 4 4 + l l + + l E L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ L@ K@ E# >% '$ K@ a+ E# '$ '$ '$ '$ '$ '$ '$ '$ ._ +_ mf q2..A vw iu iu iu .A .A .A q2.q2.mf mf +_ '* F$ b% F$ Q$ I# Q$ b% b% b% F$ F$ Q$ Q$ I# r2.&#.fe ee ee ee mf mf mf mf mf ee fe fe ee mf +_ 6c U% ^% U% i> k+ i> 9& 9& 9& 9& 9& 9& 9& 9& 9& V ,+ C }# }# }# }# C V V V ,+ ,+ ,+ ,+ 9& U5.V5.if if !& T% 9& T S ct gu W5.NO X5.Y5.Z5.`5. 6..6.+6.=} @6.'f 'i t-.vC rN rN 6.,6.zx '6.)6.!6.~6.{6.]6.^6.R..s&.d,.@$.->.N@.L-./6.L-.L-./6.=5.=5.&5.&5.*5.D .u'..N u'.U{.|..8^.5..U` s(.^X ^X k4.(6._6._6._6.<..X` U` :6.W|.F_.u(.<6.,5.[6.}6.|6.21.16.^5.26.36.46.56.:5.PV 66.76.76.TB 86.96.J/.J/.06.a6.a6.b6.d@.s` !<.c6.:].X1.^; N$ Z@ H. j+ +@ t% &_ 5% j% j% j% j% j% j% j% j% r: 7% j% x% x% j% 7% *- Y_ 2% 2% 2% 2% 2% 2% 2% * m@ m@ * * m@ m@ * .* .* 2% U@ U@ 2% .* .* 2% 2% 2% 2% 2% 2% 2% 2% 2% U@ U@ m@ U@ 2% .* * 2% 2% 2% 2% 2% 2% 2% 2% .# .# .# .# .# .# .# .# +# +# +# .# .# m* m* m* O) m* .# .# .# .# m* O) .# .# .# .# .# .# .# .# m* m* .# .# .# .# +# +# m* m* m* .# .# .# +# +# m* m* m* m* m* m* m* m* O) O) O) m* m* m* m* m* fd fd fd fd fd fd fd fd fd fd * .* .* * fd fd * * * * * .* .* .* fd * .* * 5[ 5[ * U@ a# a# a# a# a# a# a# a# ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ }| }| }| }| }| }| }| }| O) O) O) O) :] :] :] :] q$ ,_ ,_ ,_ ,_ )5 )5 )5 ,_ ,_ ,_ )5 )5 )5 )5 )5 ,_ ,_ )5 )5 ^_ ^_ ^_ oh ,_ )5 ^_ ^_ ^_ ^_ )5 ,_ }| >5 >5 '5 '5 >5 >5 }| }| }| }| }| }| }| }| Z% F{ q} F{ F{ F{ I$ >5 >5 Xl 34 b, K> 24 $w $w 34 34 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 Z% F{ x8 )_ I$ I$ )_ x8 T@ Z% F{ I$ Z% t& I$ )_ )_ )_ F{ I$ I$ Z% t& t& F{ F{ F{ F{ F{ F{ F{ F{ a) a) q3 a) q3 a) q3 a) q3 *) r} -) r} *) q3 DR q} [| [| !_ !_ [| [| / g7 g7 #v #v #v / [| [| I$ I$ F{ F{ F{ )_ )_ )_ Z% Z% I$ I$ F{ )_ )_ )_ c, c, c, c, c, c, c, c, c, D, q3 r} r} q3 D, uJ uJ x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ F{ )_ )_ F{ I$ I$ x8 x8 x8 x8 )_ F{ I$ Z% I$ I$ F{ )_ )_ F{ I$ I$ F{ F{ F{ F{ F{ F{ F{ qj c, +Z 5z 5z +Z d6.dN %w dN dN dN dN dN dN dN dN dN dN dN dN dN dN dN dN dN dN dN dN dN dN dN :y `Q Y% x8 )_ F{ F{ )_ )_ )_ )_ )_ F{ F{ F{ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ I$ I$ F{ F{ F{ )_ )_ )_ F{ I$ I$ Z% Z% I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ qj hA Ps Ps '3.lA e6.f6.g6.h6.i6.j6.k6.l6.Y=.m6.p@.n6.G(.M|.o6.p6.#]..w6./}.N-.l[.{-.l[.g&.J>.c<.f3.g&.m+.[..^%.R*.d;.aR X#.U` ^%.^%./%.aR aR /%.^%.*'.x6.h3.o4.y6.p4.z6.A6.B6.r4.C6.D6.p3.w5.E6.F6.G6.m& /+ l@ eT _^ #Y $Y %Y {'.x3.y3.c:.H6.E5.I6.J6.K6.L6.M6.N6.O6.P6.Q6.R6.S6.T6.U6.Hs qS V6.W6.X6.cc I$ I$ I$ I$ I$ I$ I$ x8 x8 )_ F{ I$ Z% Z% t& F{ F{ I$ Z% Z% I$ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ }+.}+.}+.[+.k@.k@.cN cN O( q} ec ec :I :I :I :I Tt Tt Tt Tt Is Is )_ )_ )_ )_ %n qj :y :y q3 a) uJ )_ F{ I$ Z% I$ I$ F{ I$ I$ F{ F{ F{ )_ )_ )_ 34 34 34 34 >5 >5 I$ I$ Y% F{ A% A% / g7 g7 / I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ I$ I$ Z% Z% Z% F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ q3 q3 q3 q3 q3 q3 q3 q3 r} r} r} r} r} r} r} *) v+ T@ Z% Z% T@ h+ h+ T@ I$ F{ F{ )_ F{ I$ Z% Z% Z% I$ I$ F{ F{ I$ I$ Z% F{ I$ I$ Z% Z% I$ I$ F{ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ ", " + l n n l + 0 4 + n n + 0 l D p p p p p p p p <# <# <# <# <# <# <# <# K@ E# >% '$ K@ a+ E# '$ '$ '$ '$ '$ '$ '$ '$ ._ <| ee mf q2..A vw vw iu mf mf mf q2.q2.q2..A ;] '* F$ b% F$ Q$ I# Q$ b% b% b% F$ F$ Q$ Q$ I# r2.&#.fe fe ee mf mf mf q2.q2.mf ee fe fe ee mf O_ L_ ^% ,% ^% Q% i> Q% U% 9& 9& 9& 9& 9& 9& 9& 9& i+ ^& R$ J# G$ J# R$ R$ R# R# R# R# R# ^& ^& Q% Y6.kf SU if 1b ~& U% O N <$.gu VG Z6.T4.)r `6. 7..7.+7.@7.Uf 'g b1.'i [s :q mK mK s{.s{.#7.$7.9'.8(.8(.d_.d_.%7.%7. P PZ /F wn XL N&.ot &7.*7.=7.-7.;7.-6.hR gR >7.T5 ,7.'7.)7.fx !7.{6.~7.P).a=.q'.a~.d,.d,.L-.&5.L-.L-.M@.&5.&5./6./6.=5.D .3..U{.B_.3..'>./%.l&.l&.{` {7.t(.q/.s$.X:.H_._6.T` Y` S` Y#.^X ]7.^7./7.(7._7.:7.<7.[7.}7.|7.T' 17.27.:5._4.37.47.3*.[D =&.57.RB 67.77.87.97.07.a7.b7.~<.t` 4+.#Z c7.)<. & b# 9# +# J- Y_ ~_ f% j% j% j% j% j% j% j% j% r: 7% j% x% x% j% 7% *- t% U@ U@ U@ U@ U@ U@ U@ * m@ m@ * * m@ m@ * .* 2% m@ {@ m@ U@ 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% U@ m@ m@ m@ 2% .* fd .* .* .* .* .* .* .* .* .# .# .# .# .# .# .# .# +# +# +# .# .# m* m* m* :] O) .# +# +# .# O) :] .# .# .# .# .# .# .# .# +# +# .# .# .# .# m* m* }| }| :] :] O) O) m* m* m* m* m* m* m* m* m* m* m* m* m* m* m* m* O) :] fd fd fd fd fd fd fd fd 5[ fd * .* .* * fd 5[ pj ui fd .* 2% .* * fd .* .* .* fd ui ui fd 2% a# a# a# a# a# a# a# a# ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ }| }| }| }| }| }| }| }| m* m* O) O) :] :] }| }| ^_ ^_ ^_ )5 )5 )5 )5 )5 q$ q$ ,_ ,_ )5 ^_ ^_ oh )5 )5 )5 ^_ ^_ ^_ oh oh )5 )5 ,_ q$ q$ ,_ )5 )5 }| >5 >5 '5 '5 >5 >5 }| }| }| }| }| }| }| }| Z% I$ O( F{ F{ F{ F{ ,5 ,5 d7.[].Ds 34 $w 24 G7 Xl 34 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 F{ )_ x8 )_ I$ Z% I$ )_ I$ )_ x8 )_ Z% t& I$ F{ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ qj D, D, +Z D, +Z D, +Z D, +Z D, dN q3 %w q3 5z |+.'_ [| [| / / [| [| !_ / / g7 g7 / [| !_ !_ I$ I$ F{ F{ F{ )_ )_ )_ F{ F{ F{ )_ )_ )_ )_ )_ c, c, c, c, c, c, c, c, c, D, q3 r} r} q3 D, uJ uJ x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ Z% I$ F{ )_ )_ F{ I$ Z% )_ )_ x8 x8 )_ I$ t& T@ I$ F{ )_ x8 x8 )_ F{ I$ Y% Y% x8 )_ F{ F{ I$ a) +Z 6z ;x 6z gN fN gN SL SL SL SL SL SL SL SL SL +Z +Z +Z +Z +Z +Z +Z +Z dN dN dN dN dN dN dN :y }U x8 )_ F{ F{ F{ F{ )_ )_ )_ )_ F{ F{ F{ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ x8 x8 )_ )_ F{ I$ I$ Z% I$ I$ I$ F{ )_ )_ )_ x8 )_ F{ Z% t& t& Z% F{ )_ F{ F{ F{ F{ F{ F{ F{ qj hA Ut e7.85..2.&R f7.h6.g7.h7.i7.mX e@.j7.k7.6I D/.o6.l7.6[.#].m7. U n7.o7.p7.q7.JU r7.s7.JP t7.u7.v7.w7.x7.Z|.Z|.s(.!_.y7.l[.}:.z7.A7.B7.C7.[:.Y#.X#.^%./%.aR /%._%.(%.aR h&.h&.R*.h&./%.^%.J>.tV PU D7.E7.F7.G7.H7.(7.I7.J7.K7.L7.M7.N7.O7.P7.5# Q7.R7.m-.S7.T7.U7.V7.h).W7.X7.c:.Y7.Z7.`7. 8..8.2{.+8.@8.CH #8.$8.%8.&8.T6.U6.ui F- V6.*8.X6.cc I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% )_ F{ I$ Z% Z% I$ F{ )_ I$ I$ I$ I$ I$ I$ I$ I$ }+.}+.}+.}+.DR DR q} q} q} X[ sM FR tJ =8.=8.=8.bc bc bc bc oh oh F{ F{ )_ )_ %n qj :y :y q3 a) %n F{ I$ t& t& t& Z% I$ Z% Z% I$ I$ F{ F{ )_ )_ 34 34 34 34 >5 >5 I$ I$ Y% I$ w$ w$ [| g7 / [| I$ I$ I$ I$ I$ I$ I$ I$ )_ F{ F{ I$ Z% Z% Z% Z% F{ F{ F{ F{ F{ F{ F{ F{ t& t& Z% I$ I$ F{ )_ )_ q3 q3 q3 q3 q3 q3 q3 q3 q3 q3 q3 q3 q3 q3 q3 a) @% Z% F{ )_ I$ t& t& Z% Z% I$ F{ F{ F{ Z% t& h+ t& Z% F{ )_ )_ F{ Z% t& )_ F{ Z% t& t& Z% F{ )_ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ ", " + n E E n + 0 4 + E n + 0 m D '$ p p p p p p p p p p p p p p p h i E k + j l k n k n k n k n n p} fe ee mf q2..A vw vw fe ee ee mf q2..A .A M+ r2.0% H# 0% G$ J# G$ H# H# H# 0% 0% G$ G$ J# r2.p} je fe ee mf mf q2.q2.q2.mf ee ge ge ee zW O_ '= >% '$ ,% U% 9& U% ^% 9& 9& 9& 9& 9& 9& 9& 9& i+ V C D D }# C ,+ }# R$ R$ R# ^& ^& &$ i+ N~.Y6.2c `n 1b t).U% ,+ 0% K L T+ P; AR 2- zR T0 -8.;8.,9 W4.)g +1 )f >8.7.[8.}8.!6.|8.{6.R..P).18.28.38.48.48.L-.=5.1%.0..j].58.58.68.68.78.5#.H@.,>.'>.'>.A]. /.m&.`^.Y..#{.|:.{7.88.98.X:.(6.U` P:.08.U` !_.a8.p/.b8.c8.d8.t/.e8.,5.f8.}6.g8.h8.i8.j8.v,.k8.l8.m8.K,.n8.FF o8.p8.p8.q8.r8.a7.s8.`V t8.q#.u8.$Z K/.v8.J! b# v+ v+ +# +# Y_ Y_ Q_ Z^ Q_ Z^ Q_ Z^ Z^ Z^ *- Y^ j% x% x% j% 7% *- L) m@ m@ m@ m@ m@ m@ m@ * m@ m@ * * m@ M$ * .* U@ {@ l& {@ U@ U@ U@ 2% 2% 2% 2% 2% 2% 2% 2% 2% U@ m@ m@ m@ 2% * fd .* .* .* .* .* .* .* .* .# [. .# [. .# [. .# [. +# /. +# [. .# h+ m* m* :] O) .# +# +# .# O) :] .# .# .# .# .# .# .# .# j+ j+ +# .# .# m* O) O) '5 >5 >5 }| }| :] O) O) m* m* m* m* m* m* m* m* .# .# .# .# m* O) :] }| fd fd fd fd fd fd fd fd 5[ fd * 2% 2% * fd 5[ w8.YY 5[ 2% U@ 2% fd 5[ 2% 2% 2% fd ui ti fd .* a# a# h+ a# h+ a# h+ a# t& ,_ t& ,_ t& ,_ t& t& }| }| }| }| }| }| }| }| m* m* O) O) :] :] }| }| Is Is oh ^_ ^_ )5 )5 ,_ a# a# q$ ,_ )5 ^_ oh Is )5 )5 )5 ^_ ^_ oh oh oh ^_ ,_ q$ j$ j$ q$ ,_ ^_ Z% >5 >5 '5 '5 >5 >5 }| }| }| }| }| }| }| b, }| Z% ^_ I$ oh )_ Is O* `Y d> x8.d7.({ b, .o G7 Ds >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 )_ x8 Y% x8 I$ t& Z% F{ )_ x8 Y% x8 I$ Z% Z% F{ t& t& Z% I$ I$ F{ )_ )_ I$ I$ I$ I$ I$ I$ I$ a) c, c, y8.c, y8.c, y8.c, z8.c, A8.:y B8.q3 B8.q3 d# !_ q} g7 X[ / A% <] O( / q} / q} [| A% v$ I$ I$ qj F{ F{ )_ )_ )_ x8 x8 x8 x8 x8 Is )_ )_ uJ uJ c, uJ c, uJ c, uJ c, %n q3 *) r} a) D, uJ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ t& Z% F{ )_ )_ F{ Z% t& F{ )_ )_ )_ F{ Z% T@ [. F{ )_ x8 Y% Y% x8 )_ F{ z<.z<.ZY O* ,5 '5 >5 d7 :y %w *j 5z d6.V$.d6.+Z dN dN dN dN dN dN dN dN c, c, c, c, c, c, c, c, :y :y :y :y :y :y :y :y uJ x8 F{ I$ I$ I$ F{ F{ )_ )_ )_ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ h*.h*.cN X[ F{ I$ Z% -) a) a) a) qj %n %n uJ uJ %n qj *) -) -) *) qj %n qj F{ qj F{ qj F{ qj |+.Ut 7z r` C8..m BF D8.E8.D8.F8.jE G8.H8.I8.J8.H~.K8.$U #].A'.L8.M8.N8.'2.)2.a;.O8.P8.Q8.R8.2).1..eZ S8.>}.6:.e3. /.T8.4^.`{.y7.*'.U8.V8.W8.O8.X8.^%._%.(%.X#.X#._%./%.A].N-.:%.l&. /.m&. /.A].D}.Y8.Z8.t5.t5.A6.`8. 9..9.+9.@9.#9.$9.j% b/ Z^ #. _@ %9.&9.*9.=9.-9.Q}.;9.>9.+V T].,9.'9.)9.!9.~9.{9.]9.u2.P3.^9.EH /9.(9._9.aT Kb :] &' HB g= :9.cc I$ I$ I$ I$ I$ I$ I$ T@ T@ t& t& Z% I$ I$ F{ x8 Is I$ Z% Z% I$ )_ x8 I$ I$ I$ I$ I$ I$ a) a) |+.>k >k >k Fs Fs O( O( X[ X[ FR FR =8.<9.<9.<9.Ma Ma Ma Ma ^_ ^_ I$ I$ )_ )_ %n qj :y :y q3 a) %n F{ Z% T@ T@ T@ t& Z% Z% Z% Z% I$ I$ F{ F{ F{ 34 34 34 34 >5 >5 I$ I$ x8 Z% 5. u$ !_ / [| <] I$ I$ I$ I$ I$ I$ I$ I$ x8 )_ F{ I$ Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ T@ T@ t& Z% F{ )_ x8 x8 a) a) q3 a) q3 a) q3 a) q3 a) q3 a) q3 a) q3 a) t& oh Y% Y% )_ I$ I$ F{ Z% Z% I$ F{ I$ t& s% [. t& Z% F{ )_ )_ F{ Z% t& )_ F{ Z% t& t& Z% F{ )_ I$ I$ a) I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ oh ", "k i h j 9 } } 8@ 8@ 8@ 8@ 8@ 8@ d@ 8@ 2 E# ^% >% a+ 3 E# U% ^% '$ K@ K@ '$ ,% >% k 0+ B| j@ O@ c+ P@ q D^ 0+ B| c+ P@ M@ :l q G$ +_ mf q2.q2..A vw vw vw mf ge nf ge q2.vw q2.<| [# E D }# }# D E n }# D E n n E D x5 E7 N6 dd kC kC dd <| p} +_ <| [9.yk yk [9.TO N_ a% D D D }# }# C C C C C C C C C U% C& R% T% '& ,% ,% ^% U% ^% C C C C C R# ,+ O6 t).}9.!1.^* ,' L_ >' U ,+ }# D D J# R# ;+ P@ CW |9.19.}c 29.39.V3.+1 @6.]h Dw 49.lT @M 59.69.69.69.p:. M o:.O;.79.Kx ^h /h [s 89.HW 99.Dw 8Q 09.a9.b9.c9.d9.e9.f9.<8.Y$ g9..>.h9.tL BI BI i9.+>.7:.j9.k9.l9.m9.n9.r'.m[.o9.p9.q9.Y*.,*.D}.`^.fZ +[.+[.$ .8..D .iZ $ .h=.l=.r9._R ^Z d3.b3.]}.b<.$[.D1.s9.-(.:..+1.^}.t9.t9.*4.u9.v9.w9.x9.FQ y9.z9.A9.B9.C9.D9.)].E9.F9.G9.%H H9.I9.J9.K9.`_.fE I$.L9.M9.xS pP N9.<[.uS N; N; 5. l. l. 4. 8# i# #. S$ * .^ -^ 6[ =^ =^ U/ U/ U/ U/ U/ b/ %. #. !. j$ j$ !. m@ l& Y_ t% M$ T$ T$ M$ &_ Y_ U@ fd fd U@ U@ fd fd U@ .* .* .* .* .* .* .* .* m* m* m* m* m* m* m* m* +# +# +# +# +# +# +# +# j$ U# j$ U# j$ U# j$ U# j$ U# j$ U# j$ U# j$ j$ +# .# m* O) O) O) O) m* :] :] :] :] :] :] :] :] .* .* .* * fd fd 5[ 5[ ui 5[ fd * * fd 5[ ui ,_ q$ a# 8# 8# a# q$ ,_ ,_ a# j$ j$ q$ ,_ q$ j$ * * * * * * * * U@ 2% 2% .* .* * * fd h+ h+ h+ h+ h+ h+ h+ h+ /. [. T@ t& t& T@ [. /. ]+ .# b) .# H. j+ b) }| $& .# $& .# $& .# $& .# :] :] :] :] :] :] :] :] m* m* m* O) :] }| }| }| t& Z% I$ F{ F{ Z% T@ [. [. I$ Z x8 t& /. h+ Z% Z% Z% Z% I$ I$ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ Is oh oh ^_ ^_ )5 ui 5[ ]_ ]_ ]_ ]_ ]_ ]_ O9.]_ 5[ og ui _y ti p] YY P9.ti _y ti _y ti _y Hs ti O) O) :] :] }| >5 >5 >5 }| }| }| }| }| }| }| }| q$ q$ ,_ ,_ )5 ^_ ^_ oh oh oh oh oh oh oh oh oh I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ LB hu =h [] g !5 ;,.LB Q9.hu Z5 b) [Q dt ^Y hu Y% cN F{ O( Z% O( F{ X[ F{ q} F{ q} F{ q} F{ F{ `Q uJ D, a) a) %n x8 Z T@ T@ ,_ ,_ )5 Ma ^_ oh F{ x8 }U x8 %n F{ %n Y% }U )_ a) F{ %n )_ qj Z% x8 x8 )_ )_ F{ I$ I$ I$ x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ q} q} )_ Y% 7}.7}.ZY ,5 >5 >5 34 34 34 34 34 34 LB qj qj %n uJ }U }U `Q qj qj qj qj qj qj qj qj qj qj qj qj qj qj qj qj qj qj qj qj qj qj qj qj x8 x8 )_ )_ F{ I$ I$ Z% x8 x8 )_ )_ F{ I$ I$ Z% I$ I$ I$ F{ )_ )_ x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ Z% I$ I$ F{ )_ )_ x8 cN i*.i*.R9.xF k@.uJ uJ Jb q` q` D, D, S9.S9.S9.S9.q3 Ka q` Ka r} =) r} q3 :y a) 2( Fs }+.cT |+.90 T9.U9.DS u` V9.J/.x` W9.X9.Y9.][.Z9.`9.)[. 0.*:..0.M8.+0.@0.n4.#0.$0.%0.$0.&0.*0.=0.-0.;0.>0.B>.3Z %'.%'.1Z ^%.Z{. [.,0. [.j&.(%.X#.(%.J>.N-.j,.Y#.X#.N-.:%.l&.A].m&.5#.h=.;*.g=.vY 6#.'0.Q%._-.#1.)0.!0.f<.:-.~0.{0.]0.^0./0.$% Y+ R f7 zk (0._0.:0.<0.[0.~Q }0.x&.|0.KL q<.10.20.4G 30.40.50./Q 60.mv 70.jP d% @L _Q 80.B8.-j a) a) O( O( O( F{ F{ F{ F{ F{ F{ F{ F{ T@ T@ t& t& Z% I$ I$ F{ oh bc oh oh oh oh F{ F{ Z% Z% *) *) *) *) r} r} q3 q3 q3 q3 a) a) I$ I$ t& Z% oh Is Tt bc $| (* bc bc bc bc oh oh F{ F{ x8 x8 %n %n :y q3 q3 *) %n Z% T@ t& F{ x8 I$ t& F{ F{ F{ F{ F{ F{ F{ F{ Ds Xl Xl 34 >5 }| Z% t& t& I$ X[ h*.e; g7 [| <] I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% oh oh oh oh oh oh oh oh ^_ ^_ ^_ ^_ ^_ ^_ ^_ I$ F{ I$ -) T@ -) I$ uJ Z *) Z% *) Z% *) Z% *) Z% Is Ma ,_ ,_ )5 )5 T@ [. F{ F{ qj qj qj qj :y qj I$ F{ )_ x8 x8 )_ F{ I$ Z x8 I$ T@ h+ t& I$ F{ DR DR |+.DR DR DR q} q} O( q} sM FR FR :I ", "u+ i h j 9 4 } J+ J+ J+ J+ '@ '@ '@ J+ w& E# ,% >% a+ 6+ E# U% >% E# a+ a+ E# '$ E# + M@ -= !s 90.90.!s -= ,q ,q !s 90.!s -= ,q -= c+ N_ q2.q2.q2..A vw vw vw mf fe ge fe q2..A mf p} ._ >% ,% ^% ^% ,% >% '$ ^% ,% >% '$ '$ >% ,% ^% N6 U5 $5 M6 o} kC +_ <| +_ <| [9.yk 00.a0.TO I) I) D }# }# C C C ,+ C C C C C C C U% R% r& Z& !& ~& ~& T% T% 9& 9& C C C C R$ C '= >' L_ 6c 6c 6c 6c 6c ,' 6c L_ >' >' L_ 6c i> t x@ v_ L( b0.c0.(8 d0.8o rC 6$.9l vn 7l e0.c1./V f0.69.p:.qN o:.1=.s-.g0.h0.mt lt ]V PZ P i0.h1.j0.k0.l0.m0.n0.][ o0.p0.q0.r0.s0. Q t0.u0.v0.+>.+>.w0.x0.y0.z0. =.n9.n[.2:.O>.$1.(X A0.B0.j=.g=.$ .$ .$ .9..D .L@.# .# .hZ C0.D0.E0.E0.D0.F0.@ .. .e|.+ .D1.'_.<:.]}.;5.<:.G0.v6.H0.e|.I0.J0.0~.K0.+>.L0.M0.N0./*.O0.P0.Q0.qF ;R HS UQ *..74.I$.R0.S0.T0.U0.V0.W0.Q~.vS 4b <= b' ;) ;) K, e. a. /+ s# /+ j$ a# S$ i# _& _& _& z) `^ `^ `^ _& i# s# !. 8# 8# !. m@ m@ o3 Y_ t% M$ &) &_ ~_ o3 t% * * U@ U@ * * U@ .* .* .* .* .* .* .* .* m* m* m* m* m* m* m* m* +# +# +# +# +# +# +# +# j$ U# U# U# U# U# U# U# U# U# U# U# U# U# U# j$ +# .# m* O) O) O) O) m* O) O) O) O) O) O) O) O) .* .* .* * fd fd fd 5[ 5[ fd * .* .* * fd 5[ ,_ q$ a# j$ j$ a# q$ ,_ ,_ a# j$ j$ q$ ,_ q$ j$ * * * * * * * * 2% 2% 2% .* .* * * * T@ T@ T@ T@ T@ T@ T@ T@ /. [. T@ t& t& T@ [. /. 9# b) [] b) 9# 9# [] hu b) b) b) b) b) b) b) b) :] :] :] :] :] :] :] :] O) O) O) O) :] :] :] :] Z% Z% I$ I$ Z% t& T@ T@ [. I$ Y% x8 t& [. h+ Z% Z% Z% Z% I$ I$ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ ec ec oh ^_ ^_ )5 ui ui ]_ ]_ ]_ ]_ O9.O9.O9.]_ )O _y _y C' C' C' C' C' _y _y _y _y _y _y _y _y :] :] }| }| >5 >5 '5 '5 }| }| }| }| }| }| }| }| )5 )5 )5 )5 ^_ ^_ ^_ ^_ oh oh oh oh oh oh oh oh I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ XG Kb `z Lb Lb `z Kb XG X0.XG La La `z Kb Lb [] KB x8 F{ I$ Z% I$ F{ )_ F{ F{ F{ F{ F{ F{ F{ F{ c, D, :y :y qj qj )_ x8 Z% Z% )5 ^_ Ma Ma Ma Ma F{ x8 Y% x8 )_ F{ )_ Y% Y% )_ I$ F{ )_ x8 F{ Z% x8 x8 )_ )_ F{ F{ I$ I$ x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ X[ q} I$ )_ Y% Z O* '5 Xl Xl Xl Xl N/.N/.N/.Xl ,5 )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ I$ I$ I$ F{ )_ )_ )_ x8 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ X[ f>.f>.i*.R9.k@.k@.Jb Jb q` A8.+Z +Z Y0.Z0.Z0.<+.5z +Z y8.+Z %w *j %w dN c, |+.2( 2( >k |+.2( `0.t8. a. a.`V n#..a.+a.q>. H @a.u,.#a.$a.%a.&a.]5.*a.=a.-a.;a.>a.M*.%0.&0.&0.,a.'a.)a.!a.)-.>a.~a.g4.{a.]a.@!.w].^a./a.(a.y+.d;.+1.+1.N-.N-.l=.:%.z].X#.:%.j,.A].m&.vY ;*.78.58.78._a.:a.5 }| Z% Z% Z% I$ X[ h*.e; g7 [| !_ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% oh oh oh oh oh oh oh oh ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ )_ I$ Z% T@ t& Z% )_ x8 Z% Z% Z% Z% Z% Z% Z% )5 ^_ (* /* (* ^_ oh I$ t& F{ F{ qj qj :y :y :y qj *) I$ F{ )_ )_ F{ I$ Z% F{ I$ Z% t& t& Z% F{ )_ |+.|+.|+.|+.DR DR q} q} A% O( ec sM :I WG ", "u+ i h j j 4 4 I+ I+ I+ I+ -] -] -] I+ /# E# ,% >% a+ 6+ E# ^% '$ K@ 3 6+ K@ E# K@ 0 M@ r |# |# |# |# r G# r |# J K r G# r G$ q: q2.q2..A .A .A vw vw q2.mf fe ee mf mf ee 5c ._ >% ,% ^% ^% ,% >% '$ ^% ,% ,% >% >% ,% ,% ^% $5 $5 M6 ,] f^ o} O_ O_ <| p} &#.[9.a0.qa.qa.r2.r2.C C C ,+ ,+ V V C C C C C C C U% '& !& Z& r& S% S% T% T% i> Q% V ,+ C }# J# }# >+ L_ >' >' L_ 6c ,' ,' !% ,' 6c 6c 6c 6c ,' k+ T %@ ra.ln sa.ta.ua.va.ou wa.:s _q {h xa.sm i0.MW f0.J<.0'.xC ya.za.za.|B =A Jx o:.qN mT B2.U3.za.Aa.Ba.Ca.Da.Ea.Fa.Ga.Ha.Ia.o% Ja.Ka.G:.La.Ma.@>.Na.Oa.Pa.({.Qa.Ra.:-.P>.Sa.Ta.{{.Ta.{{.(X Y*.g=.$ .$ .9..v+.iZ # .gZ E0.D0. $.C0.C0.C0. $.,}.@[.5..]}.Ua.Ua.+ .b<.e|.'_.+ .]}.Va.Wa.Xa.Va.W).N@.tL Ya.Za.`a. b.S^.KM .b.+b.@b.#b.i@.qA HS Dk o8.$b.%b.&b.RY *b.*R OV =b.-b.M- i= ~O H7 4b S; I- :+ g. g. 4. U# h# ^. 6[ _& Z^ Z^ $9.$9.$9.Z^ S$ /+ !. #. #. !. U@ 2% o3 o3 Y_ t% &_ ~_ n3 o3 T$ .* .* {@ {@ .* .* {@ .* .* .* .* .* .* .* .* +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# j$ j$ j$ j$ j$ j$ j$ j$ j$ j$ j$ j$ j$ j$ j$ j$ +# .# m* O) O) O) O) m* m* m* m* m* m* m* m* m* .* .* * * * fd fd fd fd * .* .* .* .* * fd q$ q$ a# j$ j$ a# q$ q$ ,_ a# j$ j$ q$ ,_ q$ j$ * * * * * * * * 2% 2% 2% .* .* * * * T@ T@ T@ T@ T@ T@ T@ T@ /. [. T@ t& t& T@ [. /. $& b) [] b) $& b) !5 hu [] [] [] [] [] [] [] [] :] :] :] :] :] :] :] :] :] :] :] :] O) O) O) O) F{ I$ Z% t& t& t& t& t& h+ I$ x8 )_ t& [. T@ I$ Z% Z% Z% I$ I$ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ ec ec oh ^_ ^_ )5 ui ui .o .o .o .o ;b.;b.;b..o uM _y _y C' og p: .^ .^ _y _y _y _y _y _y _y _y >5 >5 >5 >5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 oh bc bc bc Ma Ma Ma Ma bc bc bc bc bc bc bc oh I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ Ds Ds Xl 34 34 Xl Ds Ds d7.Ds Xl Xl Xl 34 4! +# O* x8 )_ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ q3 q3 :y D, %n qj I$ I$ )_ )_ Is oh bc bc Ma Ma F{ x8 Y% x8 )_ F{ )_ Y% Y% )_ F{ F{ x8 x8 F{ Z% x8 x8 )_ )_ )_ F{ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ h*.X[ Z% Z% F{ )_ '5 >5 Ds Ds Ds Ds 34.34.34.Ds O* x8 )_ F{ I$ Z% Z% t& F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ )_ )_ )_ I$ I$ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ q} Q( >b.Q( i*.cN cN F;.F;.dt q` D, D, S9.<+.<+.<+.}+.[+.,b.[+.|+.2( >k }+.'b.M~.Ms Q; 90 7>.7>.7z +%.)b.!b.~b.{b.]b.^b.~I /b.(b.'[._b.:b..cb.i&.(%.s(.!_.N-.z].l=.N-.N-.(%.j,.A].m&.`^.g=.n&.j].58._a.78.oz db.eb.U).fb.(_.E].gb.38.hb.ib.jb.kb.<| F. 7. lb.mb.nb.ob.pb.qb.rb.sb.;=.tb.V}.#F ub.vb.wb.xb.yb.zb.eC 8_.Ab.QD 0>.Bb.c- fK *j *j 5z q3 q3 q3 a) a) a) a) Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ Z% Z% Z% Z% )5 oh bc bc bc oh oh F{ F{ Z% Z% *) *) r} r} r} r} q3 q3 q3 q3 a) a) I$ I$ F{ F{ Is s6 Ks Tt bc bc bc bc bc bc oh oh F{ F{ F{ F{ qj qj :y D, D, %n uJ F{ I$ F{ x8 x8 )_ I$ F{ F{ F{ F{ F{ F{ F{ F{ Xl Xl Xl 34 >5 }| Z% Z% Z% I$ X[ cN #v g7 [| !_ I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ x8 F{ I$ t& t& Z% I$ F{ F{ F{ F{ F{ F{ F{ F{ oh ,_ /* J$ (* oh Is )_ I$ Z% Z% *) *) r} r} r} *) -) Z% I$ I$ I$ I$ Z% t& t& t& Z% Z% I$ F{ )_ )_ 2( 2( 2( 2( '_ '_ A% A% v$ A% cc cc dc dc ", "%@ i h j j 4 4 m m m m M+ M+ M+ m :# K@ >% '$ K@ a+ '$ ,% >% K@ 6+ 6+ K@ '$ E# + q r r |# |# r r r |# K J K r G# r G$ O_ q2..A .A .A .A .A .A .A q2.mf ee ee ee fe 5c M_ >% ,% ,% ,% ,% >% >% ^% ^% ,% ,% ,% ,% ^% ^% $5 $5 $5 M6 o} kC O_ O_ p} p} &#.&#.qa.qa.qa.UO UO C ,+ ,+ V V V i+ C C C C C C C U% 6& )& Z& q& R% R% S% T% k+ k+ i+ V C }# G$ D U L_ >' x5 x5 L_ ,' #% 6c 6c 6c 6c 6c 6c 6c Q% . B D^ F[ CW Cb.Db.Eb.va.%^.%} Fb.(k ~h Dw YL B2.J<.p:.0'.:B (F za.za.6Y 6Y x%.Fw wC U3.Gb.ZO Hb.Ib.Jb.Kb.Lb.Mb.Nb.Ob.f9.Pb.Qb.Rb.Sb.Tb.Ub.Vb.Vb.Wb.Xb.Yb.Zb.Zb.`b.F}. c.V2..c.+c.+c.@c.#c.$c.;*.9..8..8..D .iZ L@.# . $. $. $.C0.C0.C0.C0.IU @[.D_.5..r(.YP C_.;5.e|.%c.Va.. .D_.e|.&c.*c.=c.7<.-c.l(.;c.>c.,c.'c.)c.B9.!c.+b.~c.{c.,R L,.-R ]c.;3.I,.W_.5}.^c.*b.*R *R /c.pP (c.+R qP 3+._c.:c.I- v. g. :+ 4. s# ^. L) L) ^{ Y^ 7% 5!.5!.Y^ J$ 4. !. B. B. !. 2% * o3 o3 o3 o3 n3 n3 n3 o3 T$ 2% 2% {@ {@ 2% 2% {@ .* .* .* .* .* .* .* .* +# +# +# +# +# +# +# +# .# .# .# .# .# .# .# .# j$ j$ j$ j$ j$ j$ j$ j$ j$ j$ j$ j$ j$ j$ j$ j$ +# .# m* O) O) O) O) m* .# .# .# .# .# .# .# .# * * * * * * fd fd .* .* .* .* .* .* .* .* q$ a# a# a# a# a# a# q$ ,_ a# j$ j$ q$ ,_ q$ j$ * * * * * * * * .* .* .* .* .* .* .* .* h+ h+ h+ h+ h+ h+ h+ h+ /. [. T@ t& t& T@ [. /. [] [] [] [] [] [] d7 hu !5 !5 !5 !5 !5 !5 !5 !5 :] :] :] :] :] :] :] :] }| }| }| :] O) m* m* m* )_ F{ Z% T@ h+ T@ Z% I$ T@ Z% F{ I$ t& h+ t& I$ Z% Z% Z% I$ I$ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ cc cc ^_ ^_ ^_ ^_ ti ti .o .o .o .o ;b.;b.;b..o Es C' og og p: p: .^ .^ _y _y _y _y _y _y _y ti '5 '5 '5 '5 '5 ,5 ,5 ,5 '5 '5 '5 '5 '5 '5 '5 pj Ks Ks Tt Tt bc Ma Ma $| bc bc bc bc bc bc bc bc ^_ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ '5 ]_ Xl Hs 34 ]_ Xl ]_ 34 Hs Xl ({ Ds Hs K> m* x8 )_ )_ F{ F{ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ =) r} :y D, %n qj Z% t& Y% Y% s6 s6 Tt bc bc Ma F{ x8 Y% x8 )_ F{ )_ Y% Z x8 F{ )_ x8 x8 )_ I$ x8 x8 )_ )_ )_ )_ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ .7>.Q; Q; 7>.1c.2c.3c. a.4c.5c.6c.7c.*..8c. H 9c.'[.0c.ac.bc.cc.dc.ec.a^.fc.l[.l[.gc.hc.ic.jc.kc.f3.F!.lc.lc.mc.`{.q7.nc.oc.5Z pc.)>.qc.rc.)>._%.m+.v>.!_.N-.z].{` N-.:%.^%.l&. /.`^.sc.n&.tc.1%.78.Q%.78.~0.m9.l9.q&.uc./_.fb.gb.vc.wc.xc.yc.Z$ ]# _+ k> zc.Ac.Bc.Cc.Dc.Ec.Fc.Gc.Hc.0-.Ic.#F Jc.Kc.Lc.Mc.Nc.Oc.Pc.Qc.Rc.Sc.(Q e% fK 6z 5z 5z q3 q3 q3 q3 a) a) a) a) Z% Z% Z% Z% Z% Z% Z% Z% )_ F{ F{ I$ Z% Z% t& ,_ oh bc bc bc oh oh F{ F{ I$ I$ a) a) q3 q3 q3 q3 q3 q3 q3 q3 a) a) I$ I$ )_ )_ s6 s6 Ks Ks Tt Tt bc bc bc bc oh oh F{ F{ Z% I$ a) qj D, D, c, uJ uJ )_ )_ )_ x8 x8 x8 )_ F{ F{ F{ F{ F{ F{ F{ F{ 34 34 34 34 >5 >5 I$ I$ I$ F{ X[ cN #v g7 / [| I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ x8 )_ I$ Z% t& t& Z% I$ F{ F{ F{ F{ F{ F{ F{ oh ^_ (* /* $| oh Is F{ I$ Z% Z% *) *) r} r} r} *) -) Z% Z% Z% Z% Z% Z% t& t& t& I$ F{ F{ F{ F{ I$ 2( 2( 2( 2( '_ '_ A% A% v$ A% hd hd U0 U0 ", "2$ h h h j 0 0 m m m m M+ M+ M+ m K+ K@ '$ E# E# K@ '$ >% ,% '$ K@ K@ '$ >% >% l j@ q q q q q q j@ c+ M N M q M@ q G$ ;] .A .A .A .A .A q2.q2.q2.q2.q2.mf ee fe fe p} O6 ,% >% >% >% >% ,% ,% ^% ^% ^% ^% ^% ^% ^% ^% U5 U5 U5 N6 g~ dd +_ +_ p} p} &#.&#.qa.qa.qa.UO UO C ,+ ,+ V V V i+ C C C C C C C U% 6& )& Z& q& R% R% S% T% l& k+ i+ V ,+ C J# D V 9& U% ^% ^% 9& i> l& U% U% 9& 9& 9& 9& U% U% T t &+ h$ 9} 'k |l &9.$A Uf 'g Tc.]k (k un Uc.3Y Vc.OW d .d.,d.'d.)d.!d.~d.!d.]{.{d.='.5).$1.]d.vY 8..v+.v+.v+.v+.v+.v+.L@.# .{>. $.D0. $.C0.@ .jZ D_.D_.C_.'>.3..C_.;5.;5.s9.^d.<:.e|.<:./d.(d._d.:d.:.ld.md.nd.od.W` V` X` :..k+.k+.:..<.._%.&'.pd.j&.aR U` %'.I>.qd.0b.rd.cb.)>.w].I>.[..X` v>.!_.z].+1.{` :%.l&./%.A].m&.`^.sd.g=.n&.68.78.Q%.68.td.l9.ud.q&.vd.vd.wd.wd.xd.!(.yd.Tl L+ i (@ g- zd.Ad.Bd.Cd.Dd.Ed.Fd.Gd.Hd..,.q<.Id.Jd.Kd.Ld.Md.Nd.Od.nM QD Pd.BR }% #n 5z dN dN dN q3 q3 a) a) a) a) I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% )_ )_ F{ F{ I$ Z% Z% ,_ oh bc bc bc oh oh F{ F{ I$ I$ a) a) q3 q3 q3 q3 q3 q3 q3 q3 a) a) I$ I$ x8 x8 Is Is Tt Tt Ks Ks bc bc bc bc oh oh F{ F{ Z% I$ a) qj D, D, c, uJ %n x8 x8 x8 )_ )_ )_ x8 F{ F{ F{ F{ F{ F{ F{ F{ 34 34 34 34 >5 >5 I$ I$ F{ F{ X[ X[ g7 g7 / / I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ )_ )_ F{ I$ Z% Z% Z% Z% F{ F{ F{ F{ F{ F{ F{ oh s6 bc $| Ma oh oh Z% T@ Z% Z% *) *) r} r} r} *) *) Z% Z% t& t& Z% Z% Z% I$ F{ F{ F{ F{ I$ t& t& 2( 2( 2( 2( '_ '_ A% A% A% A% hd E) F- U0 ", "2$ h h h h + 0 I+ I+ I+ I+ -] -] -] I+ _# K@ E# E# E# E# '$ '$ ^% '$ K@ K@ '$ ,% >% '$ o j@ q M@ M@ q j@ j@ M N R N j@ M@ q 0% M+ vw .A .A .A q2.q2.q2.ee mf q2.mf fe ge fe +_ x5 ,% >% '$ '$ >% ,% ^% ,% ^% U% U% U% U% ^% ,% U5 U5 N6 $~.E7 g~ +_ +_ 5c p} &#.}Q TO qa.qa.[9.r2.C C C ,+ ,+ V V C C C C C C C U% '& !& Z& r& S% S% T% T% k+ k+ i+ V V ,+ R$ C ,+ 9& U% U% 9& Q% i> i> ^% ^% U% 9& 9& U% ^% ^% T O *+ B v8 ,k )0 )9 ;$.Qd.)g E} Rd.)f v%.]j M RZ RZ .Z*.n&.$ .9..8..v+.v+.8..8..9..v+.# .{>.C0.C0.{>.jZ ,}.r(.C_.r(.H@.3..,>.D_.C_.+ .'_.Va.>e.>e.<:.`F &N ,e.'e.]..$G L-.)e.!e.~e.{e.]e.^e./e.(e._e.]! :e.5 >5 >5 >5 '5 '5 '5 '5 '5 '5 '5 pj bc 1U 1U 1U B) B) B) B) 1U 1U 1U 1U 1U 1U 1U bc ^_ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ ^_ og Zl C' lP _y rS og Zl o^ *L _y 7e.p] 7e.P9.8e.oh )_ )_ x8 )_ F{ I$ Z% F{ F{ F{ F{ F{ F{ F{ F{ q3 q3 :y D, %n qj I$ I$ x8 x8 s6 s6 Tt Tt Tt Tt F{ x8 Y% x8 )_ F{ )_ Y% z<.Y% )_ )_ Y% Y% x8 F{ )_ )_ x8 x8 x8 Y% Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ H ge.he.ie.je.s/.ke.Q:.le.s9.me.D1..G ne.oe.<:.GE 5..pe.r(.`F . .|H d|.w].qd.qd.qd.w].y].y].v].Y#.m+.l4.!_.z].!_.{` j,. /.h&. /.m&.m&.`^.vY vY 78.78.68.2%.eb.m9.m9.U).qe.re.se.te.4%.ue.ve.+n ~. k@ n1 we.xe.ye.ze.T!.Ae.Be.Ce.De. ,..,.5K Ee.Fe.Ge.He.Ie.Je.Ke.Le.L# Bb.b- e% Yl 5z dN dN q3 q3 q3 a) a) a) a) I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% F{ F{ F{ F{ F{ I$ I$ ^_ oh bc bc bc oh oh F{ F{ F{ F{ qj qj :y :y :y :y q3 q3 q3 q3 a) a) I$ I$ x8 )_ oh oh bc bc Tt Ks bc bc bc bc oh oh F{ F{ F{ F{ qj qj :y D, D, %n a) )_ x8 x8 F{ I$ F{ x8 F{ F{ F{ F{ F{ F{ F{ F{ b, b, b, 34 >5 '5 F{ F{ F{ F{ q} q} / / / / I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ I$ I$ I$ I$ Z% Z% F{ F{ F{ F{ F{ F{ F{ oh O4 Tt Ma Ma oh oh Z% T@ Z% Z% *) *) r} r} r} *) a) I$ Z% t& t& Z% I$ I$ )_ )_ F{ I$ Z% Z% t& t& 2( 2( 2( 2( '_ '_ A% A% O( O( hd E) F- U0 ", "2$ h h h h + + J+ J+ J+ J+ '@ '@ '@ J+ _# K@ K@ K@ '$ '$ '$ '$ ,% E# a+ a+ E# >% '$ E# D E n l l n E D C ,+ V C E l n E M+ M+ M+ ;] O_ O_ O_ +_ 5c <| O_ +_ p} 5c <| ;] x5 ,% >% '$ '$ >% ,% ^% ,% ^% U% 9& 9& U% ^% ,% M6 $5 U5 N6 g~ dd O_ ;] 4c 5c }Q N_ SO TO a0.yk I) F '= '= f+ f+ f+ >+ f+ f+ f+ f+ f+ f+ f+ >' l:.2c `n 1b t).t).F7 F7 ,' ,' Y+ U U U W* V }# =+ d+ U+ U+ U+ U+ U+ P =+ U+ W+ W+ U+ =+ P C. W+ X A. G;.p6 2p on Me.;$.Ne.Oe.Pe.+1 _h }s 79.ya.{,.Qe.s{.[B [B [B RW RW zC zC Re.PW Se.5Y s{.Te.Ue.FD Ve.We.Xe.Ye.rx Ze.-x `e. f.c/..f.+f.@f.#f.$f.%f.&f.*f.=f.-f.'d.=e.;f.>f. c.,f.2:.o9.{_.C .uY 9..v+.D .D .D .8..v+.D .iZ L@.gZ hZ jZ eZ YP ,>.D_.5..YP H@.D_.D1.e|.]}.]}.$[.^d.'_.GE 'f.)f.!f.,e.~f.{f.!` O%.]f.^f.~e./f.(f._f.;).:f.5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 '5 '5 >5 >5 }| }| :] :] }| }| }| }| }| }| }| ui qS s).s).s).r).r).r).r).([.([.([.([.([.([.([.1U ^_ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ ^_ $n s).B) ([.1U r).qS cf.df.s).1U r).$n cf.g{.ef.oh )_ x8 x8 x8 F{ I$ t& F{ F{ F{ F{ F{ F{ F{ F{ c, D, :y :y qj qj )_ x8 F{ F{ oh Is Tt Tt Tt Tt F{ x8 Y% x8 )_ F{ )_ Y% z<.Y% )_ x8 Y% Z x8 F{ )_ )_ x8 x8 Y% Y% Z Z x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ cN q} F{ x8 Z Z O* '5 Xl Xl Xl Xl N/.N/.N/.Xl '5 F{ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ x8 )_ )_ )_ F{ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ sM ,!.ff.gf.gf.A|.A|.hf.9e._y _y ^_ cc +2 gd d) W/ ;L if.ae.5* V/ 1+.jf.O> {O kf.O(.nA {L UQ qX lf.mf.nf.of.N(._+.pf.qf.rf./e._f.sf.tf.EP !_.+ .DU uf.oe.vf.1H wf.oe.xf.1H yf.zf.yf.pI Af.DU Bf.TP 5^.$'.[).5Z 2Z x].Cf.rc.^%.Y#.!_.z].+1.e3.{` l&.m&.R*.m&. /. /. /.Df.Df._a.j].Ef.3%.m9.Ff.eb.sD o$.re.LE w1.Pa.Gf.Hf.D& If.Jf.Kf.Lf.Mf.Nf.Of.S!.Pf.((.Qf.De. ,.rR 2N Rf.xb.Mc.Nd.Sf.Cr Tf.Uf.JG %_ }% e= &h %w %w r} r} q3 a) a) a) I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ F{ F{ F{ F{ )_ Is oh bc bc bc oh oh F{ F{ F{ F{ qj qj :y :y :y :y q3 q3 q3 q3 a) a) I$ I$ )_ F{ ^_ )5 $| Ma bc Tt bc bc bc bc oh oh F{ F{ )_ )_ %n qj :y :y :y qj *) F{ x8 )_ Z% t& I$ x8 F{ F{ F{ F{ F{ F{ F{ F{ b, b, b, 34 >5 '5 F{ F{ )_ F{ q} q} / / / g7 I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% qj qj qj qj qj qj qj qj a) a) a) a) a) a) a) a) Z% Z% I$ I$ F{ F{ I$ I$ Z% Z% Z% Z% Z% Z% Z% )5 s6 bc Ma Ma Is Is F{ Z% F{ F{ qj qj :y :y :y qj %n F{ I$ Z% Z% I$ F{ )_ )_ F{ Z% t& t& Z% I$ F{ |+.|+.|+.|+.DR DR q} q} X[ q} cc hd U0 dc ", "e j h h h + + 8@ 8@ 8@ 8@ d@ d@ d@ 8@ (# K@ a+ K@ '$ >% '$ E# '$ K@ 6+ 6+ K@ E# E# a+ D E n + + n E D C V V C E l n a% m M+ M+ ;] O_ O_ +_ +_ 3c p} O_ +_ p} p} +_ m ^% ,% >% '$ '$ >% ,% ^% ,% ^% 9& Q% Q% 9& ^% ,% ,] M6 $5 U5 dd kC ;] M+ 4c 5c }Q N_ SO TO a0.yk %5 F F F '= '= f+ f+ f+ f+ f+ f+ f+ f+ f+ >' ^* 1c `n `m G) G) t).F7 6c 6c U U Y+ Y+ ]$ Y+ D P d+ W+ C. W+ d+ =+ d+ U+ W+ C. C. W+ U+ d+ B. C. W X Q@ }9 nn jm ju ft Vf.[k Wf.Xf.z).Yf.s-.Zf.za.za.s{.[B [B [B RW yC zC zC `f. g..g.+g.RW Te.@g.#g.Vd.@P $g.%g.Px &g.*g.=g.-g. _ ;g.mg >g.,g.'g.)g.!g.~g.*f.-f.,d.=e.;f.>f.-'. c.f<.m[.o(.{g.C .a..v+.iZ L@.# .iZ D .8..9..9..D .gZ @ .F0.,>.3..5... .5..r(.5... .b<.D1.]}.]}.D1.$[.3H ]g.^g./g.(g._g.:g.5 >5 }| :] :] >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 }| :] :] O) O) }| }| }| }| }| }| }| ui df.kg.cf.cf.s).r).r).([.([.([.([.([.([.([.([.1U ^_ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ ^_ qS r).lg.mg.mg.lg.r).s).r).lg.lg.s).ng.ng.r).z|.oh )_ x8 x8 x8 F{ Z% t& F{ F{ F{ F{ F{ F{ F{ F{ 75.c, D, q3 a) %n x8 Z Z% I$ ^_ oh Tt Tt Ks Ks F{ x8 Y% x8 )_ F{ )_ Y% z<.Y% x8 x8 Y% Z x8 F{ )_ )_ x8 x8 Y% Z Z Z x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ A% A% Z% )_ Z Z ,5 >5 34 34 34 34 G7 G7 G7 34 ZY Y% Y% x8 )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ x8 x8 )_ )_ F{ I$ I$ Z% x8 x8 )_ )_ F{ I$ I$ Z% x8 x8 )_ )_ F{ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ Z% I$ I$ F{ )_ )_ x8 s6 Zn ff.gf.gf.A|.A|.hf.hf._y Ma cc +2 |].b* W/ h( >L og.5* og.rh pg.jf.'L W0.=b.Ck Dk qg.a` q@.rg.sg.H9.Dk ;R =H tg.KJ ug.*[.3S vg._2.5.. G K wg.xg.yg.Af.zg.vf.Ag.Bg.Cg.wf.yf.Dg.Dg.yf.wf.Af.Eg.E@.@!.0b.Fg./a.qc.Cf.w'.R*._%.z].z].+1.s(.{` A].`^.d;.m&. /.A].l&.-*.-*._a.2%.r'.p&.l9.eb.Gg.e,.{g.se.t_.^{.Hg.Ig.Jg.L; i^ Kg.Lg.Mg.Ng.Og.Pg.Qg.Rg.Sg.Ce.C5.T].}0.Tg.Ug.Vg.Wg.[3 Xg.Yg.Zg.`g. h.[+ ;$ e= a' *j =) =) -) a) a) a) I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ Z% I$ I$ F{ )_ )_ x8 s6 oh bc bc bc oh oh F{ F{ F{ F{ qj qj :y :y :y :y q3 q3 q3 q3 a) a) I$ I$ )_ F{ )5 ,_ (* $| bc Tt bc bc bc bc oh oh F{ F{ x8 x8 %n %n :y q3 q3 *) -) I$ x8 F{ t& T@ Z% )_ F{ F{ F{ F{ F{ F{ F{ F{ K> b, b, 34 >5 '5 F{ )_ )_ )_ q} O( [| / g7 g7 I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% qj qj qj qj qj qj qj qj a) a) a) a) a) a) a) a) T@ t& Z% I$ F{ F{ F{ F{ Z% Z% Z% Z% Z% Z% Z% )5 oh $| (* Ma s6 .Z x8 )_ F{ F{ qj qj :y :y :y qj uJ )_ F{ I$ I$ F{ )_ x8 F{ I$ t& h+ T@ I$ x8 Z |+.|+.|+.|+.DR DR q} q} cN X[ ec cc dc WG ", "%@ i h j j 4 4 I+ J+ ]# ^# J@ -] O_ f+ _# K@ K@ E# E# '$ '$ '$ '$ '$ '$ '$ '$ '$ '$ '$ [# [# [# [# [# [# [# [# F F a% a% [# m m m F F F F F F F F f+ F a% F f+ f+ '= a% ,% >% '$ K@ K@ '$ >% ,% U% U% U% U% U% U% U% U% N6 N6 N6 N6 g~ g~ <| <| O_ <| &#.&#.SO RO SO &#./Y +_ p} <| ;] M+ O_ p} p} p} p} p} p} p} p} E7 $~.*=.Ml *=.$~.$~..h.+h.8c 9c 5c <| <| 5c yk Y+ i+ W+ C. C. W+ U+ d+ =+ W+ W+ W+ W+ W+ W+ W+ W+ e+ e+ d+ s& X Y 23 @h.#h.$h.zw %h.&h.+6.*h.=h.-h.;h.>h.>h.,h.'h.N;.XD .B_.3..C_.;5.+ .Ua.b<.D1.D_.D_.D1.D1. G 0h.ah.bh.ch.dh.eh.,_.fh.gh.hh.ih.5O jh.kh.DA /` lU (f.lh.mh.nh.oh.ph.6>.*<.+a.qh.rh.eg.sh.th.uh.vh.wh.xh.g>.Ak yh.zk cE 7. v+ b) C, 5! 2{ 5! l* 8# L$ ,_ q$ j$ j$ * 5[ Y_ Y_ o3 o3 n3 n3 &5 =5 M$ U@ 2% * * 2% U@ m@ {@ {@ m@ U@ 2% .* * fd m* .# j+ ]+ ]+ j+ .# m* m* .# .# +# j+ j+ ]+ ]+ o3 o3 o3 o3 o3 o3 o3 o3 =5 o3 o3 Y_ Y_ o3 o3 =5 }| O) .# +# j+ j+ +# .# }| :] O) O) O) O) :] }| fd * * .* .* 2% 2% U@ U@ 2% 2% .* .* * * fd a# q$ ,_ a# 8# 8# a# )5 ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ .* .* .* .* .* .* .* .* .* .* .* .* .* .* .* .* t& h+ [. [. T@ t& T@ [. h+ h+ h+ h+ h+ h+ h+ h+ [] b) b) !5 hu hu [] 9# d7 d7 !5 $& H. H. $& !5 ]+ j+ .# :] }| '5 '5 '5 :] :] :] :] :] :] :] :] I$ I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ Z% t& t& T@ T@ I$ I$ I$ I$ I$ I$ I$ I$ ec ec oh oh oh oh pj pj .o .o .o .o ;b.;b.;b..o Xl '5 '5 '5 '5 '5 '5 '5 >5 >5 >5 >5 >5 >5 >5 >5 }| }| }| }| }| }| }| }| >5 >5 '5 '5 '5 ,5 ,5 YY /* ~2 df.g{.A|.qS $n 1U 1U 1U 1U 1U 1U 1U 1U bc ^_ I$ I$ F{ )_ )_ x8 x8 I$ I$ I$ I$ I$ I$ I$ ^_ $n s).([.lg.lg.([.s).cf.r).r).([.([.([.lg.lg.g{.)5 I$ I$ F{ )_ )_ x8 x8 T@ Z% F{ F{ Z% Z% F{ x8 q3 q3 :y :y %n %n )_ )_ x8 x8 s6 s6 Ks Ks Ks Ks x8 x8 x8 x8 x8 x8 x8 x8 Z Z Z Z Y% F{ t& T@ z<. Z x8 )_ )_ x8 Z z<.x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% x8 x8 )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ A% O( I$ F{ )_ )_ O* O* d7.Xl b, 34 Y1.!3.34.b, '5 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ Z Y% F{ F{ z<.7}. Z Z% Z% Z% I$ I$ F{ F{ F{ x8 F{ I$ I$ )_ x8 )_ I$ x8 x8 )_ )_ F{ I$ I$ I$ F{ F{ )_ )_ x8 x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 s6 zh.gf.mg.mg.Ah.Ah.Bh.Bh.C' Ma ec [U l*.0e.X/ i( rh Q2 Ch.]5 Dh.Eh.jf.zM kf.I,.PG (].iM $O /L Fh.@H K(.Gh.Hh.!].s>.Ih.Jh.Kh.Lh.}%.Mh.Nh.Oh.Ph.$K Qh.xf.xf.wf.Bf.Af.wf.Cg.Cg.zg.wf.wf.Bf.yf.yf.3H q(.[).6Z 0b.qc.n/.Rh.)>.R*./%.z].!_.+1.N-./@.A].sd.h&.l&. /../.Sh.Th.~_.e,.q&.r&.p[.Gg.~0.td.Ff.q'.$/.Uh.p;.Vh.SU g G[ Wh.Xh.Yh.Zh.`h.S!. i.Rg..i.+i.@i.b:.#i.$i.30.%i.&i.*i.=i.-i.;i.>i.,i.'i.s+ e= &h =) '' =) q3 uJ uJ x8 x8 x8 x8 s6 s6 s6 )_ )_ )_ F{ F{ F{ I$ I$ F{ F{ F{ F{ F{ F{ F{ oh s6 Ks Tt Tt oh ^_ Z% Z% F{ F{ qj qj :y :y :y :y :y :y :y :y qj qj F{ F{ F{ F{ oh oh bc bc bc bc Ma bc Tt Ks s6 Is I$ Z% )_ )_ %n qj :y :y q3 a) a) Z% Z% Z% I$ )_ Z 7}.)_ F{ Z% t& t& Z% F{ )_ )i.)i.)i.)i.ZY ZY Z Z F{ F{ q} q} / / / / )_ )_ F{ I$ I$ Z% t& t& Z% Z% Z% Z% Z% Z% Z% Z% *) r} r} r} r} r} r} r} =) r} :y D, D, :y r} -) t& t& t& t& t& t& t& t& T@ t& I$ )_ )_ )_ I$ )5 oh bc bc bc oh oh F{ F{ t& t& *) a) q3 :y D, %n qj F{ F{ F{ F{ F{ F{ F{ Z% Z% Z% Z% Z% Z% Z% Z% |+.|+.|+.|+.DR DR q} q} q} O( cc hd U0 dc ", "u+ i i h h 0 0 J+ 8@ 8@ 8@ '@ M+ O_ F _# K@ K@ E# E# '$ '$ '$ '$ '$ '$ '$ '$ '$ '$ '$ [# [# [# [# [# [# [# [# F a% a% a% [# m m m F F F F F F F F f+ F a% F f+ f+ '= a% ,% >% '$ E# E# '$ >% ,% ^% ^% ^% ^% ^% ^% ^% ^% N6 N6 N6 N6 g~ g~ <| <| +_ p} [9.&#.SO SO TO [9.GR <| p} <| O_ ;] +_ p} p} p} p} p} p} p} p} E7 $~.*=.Ml *=.$~.$~..h.+h.8c 9c 5c p} p} 5c yk Y+ i+ W+ W+ W+ W+ U+ d+ d+ W+ W+ W+ W+ W+ W+ W+ W+ e+ e+ d+ d+ X X N* 23 -,.!i.xx ~i.{i.]i.ns ^i./i.(i._i.:i..%b.Hi.Ii.Ji.|I '<..& Z@ p. H. S# +@ .@ ]+ 8# L$ q$ a# j$ 8# .* fd o3 o3 o3 o3 n3 n3 n3 o3 M$ U@ 2% .* .* 2% U@ m@ m@ m@ U@ U@ 2% .* .* * .# .# +# +# +# +# .# .# .# .# +# +# +# +# j+ j+ o3 o3 o3 o3 o3 o3 o3 o3 =5 o3 o3 Y_ Y_ o3 o3 =5 O) m* .# j+ j+ j+ +# .# :] O) m* m* m* m* O) :] fd fd fd * .* .* .* 2% 2% .* .* .* * fd fd fd a# ,_ ,_ q$ j$ j$ q$ )5 ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ * * * * * * * * .* .* .* .* .* .* .* .* t& h+ [. [. T@ t& T@ [. h+ h+ h+ h+ h+ h+ h+ h+ !5 [] [] !5 hu d7 [] 9# b) !5 !5 b) 9# 9# b) !5 j+ +# m* :] }| >5 >5 >5 }| }| }| }| }| }| }| }| Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ Z% Z% t& t& t& I$ I$ I$ I$ I$ I$ I$ I$ ec ec oh oh oh oh pj pj .o .o .o .o ;b.;b.;b..o Xl '5 '5 '5 '5 '5 '5 '5 >5 >5 >5 >5 >5 >5 >5 >5 }| }| }| }| }| }| }| }| >5 >5 '5 '5 '5 ,5 ,5 YY (* Ki./* g{.Tt $n /* B) $| qS $| qS $| qS $| $| ^_ I$ I$ F{ )_ )_ )_ x8 I$ I$ I$ I$ I$ I$ I$ ^_ qS r).1U lg.g{.([.B) s).B) r).1U ([.1U lg.g{.g{.oh F{ F{ F{ F{ )_ )_ )_ t& I$ )_ F{ I$ I$ F{ x8 q3 q3 :y :y %n %n )_ x8 x8 x8 s6 s6 Ks Ks Ks Ks x8 x8 x8 x8 x8 x8 x8 x8 F{ )_ x8 Y% Y% x8 )_ F{ Z Y% )_ F{ F{ )_ Y% Z x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ q} q} F{ F{ F{ )_ ,5 ,5 [].Xl b, 34 Y1.!3.Y1.Xl '5 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ F{ Y% x8 I$ I$ Z z<.x8 Z% Z% I$ I$ I$ F{ F{ F{ x8 F{ I$ I$ )_ x8 )_ I$ x8 )_ )_ )_ F{ I$ I$ I$ F{ F{ )_ )_ x8 x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 s6 Li.Mi.lg.([.7e.lP tS )O _y Ma hd b: b* X/ d* 44 8{ Ni.Y/ 8{ k- I7 m> Oi.V1.Pi.fS Qi.gM Ri.WQ Si.h!.q^.F~.Ti.Ui.t=.*[.Vi.Lh.DP Mh.oe.Wi.Xi.Yi.ni.Zi.`i.`i.Af.wf.vf.wf. j.wf.Bf.yf.yf.yf.zg.Bf..j.6^.$'.5Z @!.)>.& .+j.)>._%.X#.+1.+1.N-.l&.h=.`^.m&./%.z].:%. /.@j.#j.#j.e,.r'.p&.q&.eb.td.Ff.ud.$j.}-.N2.%j.&j.C) S^ *j.=j.-j.;j.>j.,j.Rg.+i.Sg.'j.]1.T}.)j.!j.~j.8K {j.3(.]j.QD lF SO ^j./j.W5 #& *j q3 q3 r} r} qj uJ )_ )_ )_ )_ Is Is Is Is )_ )_ )_ F{ F{ F{ I$ I$ F{ F{ F{ F{ F{ F{ F{ oh )5 Ma Ma Ma ^_ ^_ I$ I$ F{ F{ qj qj :y :y :y :y :y :y :y :y qj qj F{ F{ F{ F{ oh oh bc bc bc bc $| Ma Tt Ks s6 s6 F{ F{ )_ )_ %n qj :y :y q3 a) qj I$ Z% Z% I$ )_ Y% Z )_ F{ Z% t& t& Z% F{ )_ [].[].[].[].O* O* x8 x8 F{ F{ q} q} / / / / F{ F{ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% r} r} r} r} r} r} r} r} =) r} q3 :y :y q3 r} -) -) t& t& t& t& t& t& t& T@ t& Z% I$ I$ I$ I$ ^_ oh bc bc bc oh oh F{ F{ Z% Z% a) a) q3 q3 :y qj qj F{ F{ F{ F{ F{ F{ F{ Z% Z% Z% Z% Z% Z% Z% Z% |+.|+.|+.|+.DR DR q} q} q} O( cc hd U0 dc ", "u+ k k i i l l ]# 8@ J+ m ;] ;] ;] [# _# K@ K@ E# E# '$ '$ '$ '$ '$ '$ '$ '$ '$ '$ '$ ._ ._ ._ ._ ._ ._ ._ ._ M_ M_ M_ ._ ._ ._ (# (# D D D D D D D D C D n E }# C }# E ,% >% '$ '$ '$ '$ >% ,% ,% ,% ,% ,% ,% ,% ,% ,% N6 N6 N6 N6 g~ g~ <| <| <| 5c yk yk qa.TO qa.yk zW fe ge fe mf mf ee ge fe fe fe fe fe fe fe je tk (j._j.(j.tk tk uk :j.le le ge fe fe ge xk 4c ` ^+ m+ m+ }. }. s& s& m+ m+ m+ m+ m+ m+ m+ m+ V+ V+ V+ V+ U+ W p+ 5.7h.)d.mj.nj.4|.__.LE LE wd.o(.{g.C .uY $ .8..8..v+.v+.v+.v+.D .% .fZ '>.C_.D_.D_.YP 3..G@.'>.r(.. .;5.3..A_.]}.UM oj.pj.qj.rj.oj.rj.sj.tj.kI uj.vj.wj.ri.xj.6L ui.yj.zj.BP Kh.Aj.6g.Bj.Ai.Cj.W/.K(.Dj.M(.{b.Ej.Fj.I9.^b.#H Ck Gj. Q; b# 9. q. r$ @% v+ @. /+ U# a# a# !. !. 2% * ed ed =5 o3 n3 ~_ &_ t% t% U@ 2% .* .* 2% U@ U@ U@ U@ U@ 2% 2% 2% 2% 2% .# .# m* m* m* m* .# .# +# +# +# +# +# .# .# .# o3 o3 o3 o3 o3 o3 o3 o3 =5 o3 o3 Y_ Y_ o3 o3 =5 m* .# +# j+ j+ j+ j+ +# O) m* .# .# .# .# m* O) 5[ 5[ fd fd fd * * * * * * fd fd fd 5[ 5[ ,_ )5 )5 ,_ a# a# ,_ ^_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ fd fd fd fd fd fd fd fd * * * * * * * * t& h+ [. [. T@ t& T@ [. h+ h+ h+ h+ h+ h+ h+ h+ hu !5 [] !5 d7 d7 b) H. H. b) !5 !5 b) $& b) !5 m* m* :] }| }| }| }| }| >5 >5 >5 >5 >5 >5 >5 >5 t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ Z% Z% Z% t& I$ I$ I$ I$ I$ I$ I$ I$ ec ec oh oh oh oh pj pj ]_ ]_ ]_ ]_ O9.O9.O9.]_ b, d7 d7 d7 d7 d7 d7 d7 hu hu hu hu hu hu hu hu }| }| }| }| }| }| }| }| >5 >5 '5 '5 '5 ,5 ,5 ,5 oh (* ,_ Tt Is (* q$ $| )5 $| )5 $| )5 $| )5 )5 I$ I$ F{ F{ F{ )_ )_ )_ I$ I$ I$ I$ I$ I$ I$ ^_ dc pS WG Li.:I |U dc pS dc pS WG |U WG Li.:I :I Is )_ )_ F{ F{ F{ F{ F{ Z% F{ x8 x8 F{ F{ )_ Y% :y :y :y D, %n uJ x8 x8 x8 x8 s6 s6 Ks Ks Ks Ks x8 x8 x8 x8 x8 x8 x8 x8 t& Z% F{ x8 Y% Z Z Z x8 )_ )_ F{ F{ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ F{ F{ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ X[ X[ )_ F{ F{ F{ '5 '5 Ds Xl 34 Xl !3.Hj.!3.[].'5 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ x8 x8 )_ )_ F{ I$ I$ Z% I$ x8 )_ t& Z% x8 Y% )_ Z% I$ I$ I$ F{ F{ )_ )_ x8 F{ I$ I$ )_ x8 )_ I$ )_ )_ )_ F{ F{ F{ I$ I$ F{ F{ )_ )_ x8 x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 s6 bc 1U 7e.lP )O Es Es .o pj ^_ A% ./ d) g, j( Ij.L7 K7 B8 L7 O=.Jj.)L I,.Kj.Lj.Mj.Nj.JS Oj.*).Pj.L|.t=.Qj.Rj.Sj.Tj.Uj.Vj.5O ih.xj.TM Wj.Xj.Yi.Yj.Zj.yg.yg.vf.Af.Bg.vf.yf.`i.wf.Dg.`j. j.wf.Af..j.bZ $'..'.JU Y{.+j. k.)>.T` U` +1.N-.l&. /.vY sc.l&.(%.!_.+1.l&.sc..k.+k.e,.3%.q&.r'.eb.Ff.$j.+=.@k.#k.|{.1b n@ @< $k.=j.%k.&k.5{.B5.*k.=k.Ce.X7.u[. V -k.;k.>k.,k.'k.&i.*i.)k.0>.!k.~= W5 ~k.X_ hu D, ,b.c, qj a) %n }U F{ F{ oh oh oh oh bc oh )_ )_ )_ F{ F{ F{ I$ I$ F{ F{ F{ F{ F{ F{ F{ oh q$ /* (* $| ^_ oh F{ )_ F{ F{ qj qj :y :y :y :y :y :y :y :y qj qj F{ F{ F{ F{ oh oh bc bc bc bc $| Ma bc Tt s6 s6 x8 )_ )_ )_ %n qj :y :y q3 a) %n F{ F{ I$ I$ F{ )_ )_ F{ I$ I$ Z% Z% I$ I$ F{ Xl Xl Xl Xl '5 '5 F{ F{ F{ F{ q} q} / / / / Z% Z% I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ :y :y :y :y :y :y :y :y =) =) r} q3 q3 r} =) -) -) t& t& t& t& t& t& t& t& t& T@ T@ t& Z% I$ ^_ )5 $| $| $| )5 )5 Z% Z% F{ F{ a) a) q3 q3 r} *) *) Z% Z% Z% Z% Z% Z% Z% F{ F{ F{ F{ F{ F{ F{ F{ |+.|+.|+.|+.DR DR q} q} q} O( cc hd U0 dc ", "&+ o k k k n n ^# 8@ m a% +_ O_ M+ I+ _# K@ K@ E# E# '$ '$ '$ '$ '$ '$ '$ '$ '$ '$ '$ ._ ._ ._ ._ ._ ._ ._ ._ M_ M_ ._ ._ ._ ._ ._ ._ D D D D D D D D }# E n E }# }# D n ,% >% >% >% >% >% >% ,% >% >% >% >% >% >% >% >% N6 N6 N6 N6 g~ g~ <| <| p} 4c Wl yk qa.qa.a0.Wl BW fe ge fe fe fe fe ge fe fe fe fe fe fe fe je tk (j._j.(j.tk tk uk :j.le ie ge ge ge ge {k.4c ` ^+ m+ }. }. }. }. }. m+ m+ m+ m+ m+ m+ m+ m+ V+ V+ V+ V+ U+ U+ W p+ ct 13 M4 N3.]k.^k.g6 /k.(k._k.:k.8.lt wv rN rN E..iG zC zC zC C2.zC iG .r(.Ua.D_.H@.B_.z_.'>.,>.5... .H@.y_.r(.aO rj.bk.rj.ck.dk.ek.Qh.sj.uj.uj.fk.gk.hk.ik.ri.jk.i[.kk.lk.mk.^R Tj.nk.!c.ok.3d.pk.z` qk.WK r#.rk.|!.z,.sk.EM DM +H ed.tk.Z0.e- ]; k; `5 dE Ls C- (. U# a# j$ !. B. U@ 2% ac ac ed =5 ~_ &_ &) M$ t% 2% 2% 2% 2% 2% 2% U@ 2% 2% 2% 2% 2% U@ U@ U@ +# .# O) :] :] O) .# +# j+ j+ +# +# .# m* m* O) o3 o3 o3 o3 o3 o3 o3 o3 =5 o3 o3 Y_ Y_ o3 o3 =5 +# +# j+ j+ j+ j+ j+ j+ m* .# .# +# +# .# .# m* 5[ 5[ 5[ 5[ fd fd fd fd fd fd fd fd 5[ 5[ 5[ 5[ ,_ ^_ ^_ )5 q$ q$ )5 oh ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ui ui ui ui ui ui ui ui * * * * * * * * t& h+ [. [. T@ t& T@ [. h+ h+ h+ h+ h+ h+ h+ h+ LB d7 [] [] !5 !5 b) H. F. 9# !5 d7 !5 b) [] [] :] :] }| >5 }| }| :] O) >5 >5 >5 >5 >5 >5 >5 >5 T@ T@ T@ T@ T@ T@ T@ T@ Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ cc cc ^_ ^_ ^_ ^_ ti ti ]_ ]_ ]_ ]_ O9.O9.O9.Xl Lb d7 d7 d7 d7 d7 d7 d7 hu hu hu hu hu hu hu hu >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 '5 '5 '5 ,5 ,5 ,5 x8 )5 Z% Is )_ q$ h+ )5 F{ oh F{ oh F{ oh F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ ec WG ec WG ec WG ec WG cc dc ec WG ec :I sM sM x8 x8 )_ )_ F{ I$ I$ Z% I$ )_ Y% x8 )_ )_ x8 Z :y :y D, D, %n uJ x8 x8 x8 x8 s6 s6 Ks Ks Ks Ks x8 x8 x8 x8 x8 x8 x8 x8 Z% I$ F{ )_ x8 Y% Z Z )_ F{ F{ F{ F{ F{ F{ )_ x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ I$ I$ Z% Z% Z% F{ F{ F{ F{ F{ F{ F{ F{ cN cN )_ )_ F{ I$ >5 }| Xl Xl Xl Ds !3.Hj.Hj.)i.'5 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ Y% Y% x8 )_ F{ I$ Z% t& Z% )_ F{ T@ t& )_ x8 I$ I$ I$ I$ F{ F{ )_ )_ )_ x8 F{ I$ I$ )_ x8 )_ I$ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ x8 x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 s6 Tt 1U p] p] )O Hs .o ui '5 q} g7 P~.rj l9 o1 o1 u} uk.D|.vk.xh.)L BM ag.wk.xk.r^.n6.I(.,..F~.yk.Sj.zk.Ak.Bk.Ck.R-.Dk.Ek.Fk.7O Gk.TM Zj.@N Hk.Ik.Wj.uj.Ag.uf.Bg.oe.Bg.pI xf.|H Jk.FE yf.DU Bf.TP P:..'.[).Kk.Y{.Lk.Mk.rc.X` U` N-.l&.A]. /.vY sd.z].X#.z].j,.m&.Nk.{_.Ok.Ef.sD U).U).Ff.l9.Pk.;1.s[.7% }9.Q 9: 3'.Qk.y..Rk.Sk./ .'j.Tk.Uk.Vk.Gc.}T Wk.[0.Xk.,k.Yk.Y!.Zk.Y5.`k.(Q 5$ 5! l..l.I> dt ,b.75.c, qj a) a) )_ I$ I$ ^_ ^_ ^_ ^_ Ma Ma )_ )_ )_ F{ F{ F{ I$ I$ F{ F{ F{ F{ F{ F{ F{ oh )5 $| $| Ma ^_ oh F{ )_ F{ F{ qj qj :y :y :y :y :y :y :y :y qj qj F{ F{ F{ F{ oh oh bc bc bc bc Ma Ma bc Tt s6 .Z Y% Y% )_ )_ %n qj :y :y q3 a) uJ x8 )_ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ 34 34 34 34 >5 >5 I$ I$ F{ F{ q} q} / / / / t& t& Z% I$ I$ F{ )_ )_ F{ F{ F{ F{ F{ F{ F{ qj :y :y :y :y :y :y :y :y =) =) r} r} r} r} =) =) *) Z% Z% Z% Z% Z% Z% Z% t& T@ h+ [. h+ T@ Z% oh )5 $| $| $| )5 )5 Z% Z% )_ )_ qj a) q3 r} =) -) *) Z% Z% Z% Z% Z% Z% Z% F{ F{ F{ F{ F{ F{ F{ F{ |+.|+.|+.|+.DR DR q} q} q} O( cc hd U0 dc ", "u+ k k k o E E ]# J+ [# '= <| O_ M+ J+ _# K@ K@ E# E# '$ '$ '$ '$ '$ '$ '$ '$ '$ '$ '$ 3( M6 M6 M6 M6 M6 M6 M6 M6 M6 M6 M6 M6 M6 $5 M_ D D D D D D D D }# E n n D }# D n >% ,% ,% ,% ,% ,% ,% >% >% >% >% >% >% >% >% >% N6 N6 N6 N6 g~ g~ <| <| p} 4c Wl yk qa.qa.a0.Wl {k.fe fe fe fe ge fe fe fe fe fe fe fe fe fe je tk (j._j.(j.tk tk uk :j.ie ie ge nf nf ge {k.5c Z ]@ *| y* y* y* k* *| *| *| *| *| *| *| *| m+ 5# D& 5# 5# W+ W+ . _+ ct <$.-D Hb S4.+l.@l.#l.$l.%l.&l.8/.*l.=l.um /k -l.;l.Ew wC :B {,.~h.>l.zC TZ iG .r(.D_.YP '>.'>.,>.YP '>.C_.+ .Ua.B_.,>. K @N }l.Qh.|l.1l.TP 2H ji.2l.me.G0.fk.3l.4l.=c.TJ 5l.6l.7l.8l.9l.0l.al.bl.cl.h~ dl.el.fl.gl.hl.Qi.il.jl.jl.FM cU '&.L^.kl.2I Y_.^; ^; N9.kf.mP S6 a. U# a# j$ #. B. m@ 2% ac ac ed =5 ~_ &_ &) M$ Y_ 2% 2% U@ U@ 2% 2% 2% 2% 2% 2% 2% 2% U@ U@ U@ +# .# O) :] :] O) .# +# j+ +# +# .# m* m* O) O) o3 n3 n3 n3 n3 n3 n3 n3 &5 n3 n3 ~_ ~_ n3 n3 =5 j+ j+ +# +# +# +# +# +# m* .# .# +# +# .# .# m* fd fd fd fd 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ fd fd fd fd ,_ ^_ ^_ )5 q$ q$ )5 oh ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ui ui ui ui ui ui ui ui fd fd fd fd fd fd fd fd t& h+ [. [. T@ t& T@ [. h+ h+ h+ h+ h+ h+ h+ h+ LB d7 b) b) !5 !5 [] $& F. 9# !5 d7 !5 b) [] [] }| }| >5 >5 >5 }| :] O) :] :] :] :] :] :] :] :] T@ T@ T@ T@ T@ T@ T@ T@ Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ cc cc ^_ ^_ ^_ ^_ ti ti ]_ ]_ ]_ ]_ O9.O9.O9.Xl Lb 48 48 48 48 48 48 48 -j -j -j -j -j -j -j hu >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 '5 '5 '5 ,5 ,5 ,5 Y% I$ *) )_ qj T@ s% F{ qj F{ qj F{ qj F{ qj F{ )_ )_ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ X[ ZQ / [U / [U g7 ZQ [| +2 / [U / ZQ g7 X[ x8 x8 )_ )_ F{ I$ I$ Z% I$ )_ Y% x8 )_ )_ x8 Z D, D, D, c, uJ uJ Y% Y% x8 x8 s6 s6 Ks Ks Ks Ks x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ )_ )_ )_ x8 x8 x8 F{ F{ F{ )_ )_ F{ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ I$ I$ Z% Z% Z% F{ F{ F{ F{ F{ F{ F{ F{ cN cN )_ )_ F{ I$ >5 }| 34 Xl Ds Ds 34.Y1.Y1.d7.'5 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ Y% Y% x8 )_ F{ I$ Z% t& Z% )_ F{ T@ T@ F{ )_ Z% I$ I$ F{ F{ )_ )_ x8 x8 x8 F{ I$ I$ )_ x8 )_ I$ F{ F{ F{ F{ F{ F{ )_ )_ F{ F{ )_ )_ x8 x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 `Y 9e.ll.({ ({ Xl Xl '5 LB k@.}c.ml.nl.V6 rP `[ ol.45.M9.$).pl.Ck ag.pf.]].P'.YB ql.rl.=2.sl.tl.ul.vl.yE O-.*5.wl.iI xl.yl.TM 2l.SM zl.Al.zl.WJ uf.>e.2l.'_.kI ne.uf.D1.pI ;5.nI ;5.pI $[.zf.bZ y].5Z 5Z Kk.rc.Bl.Cl.)>.m+.Y#.l&. /. /.A].Df.m&.+1.^%.`^.@j.]X Dl.+k.Ok.Ef.e,.sD U).El.]f.bH o;._j.l& ` h$ Fl.Gl.Hl.MR Il.Jl.Kl.A4.Ll.Ml.Nl.Ol.w&.< .Pl.Ql.'k.Rl.Sl.Tl.Ul.70.r. 9# o3 a, Vl.v% LB c, uJ %n *) -) t& I$ I$ ^_ ^_ ^_ Ma Ma Ma Ma )_ )_ )_ F{ F{ F{ I$ I$ F{ F{ F{ F{ F{ F{ F{ oh .Z Ks Ks Ks Is Is F{ F{ F{ F{ qj qj :y :y :y :y :y :y :y :y qj qj F{ F{ F{ F{ oh oh bc bc bc bc Tt Tt Tt Tt s6 s6 Y% Z )_ )_ %n qj :y :y q3 a) uJ x8 x8 )_ F{ I$ Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ Ds Ds Ds Ds ,5 ,5 )_ )_ F{ F{ q} q} / / / / t& t& Z% I$ I$ F{ )_ )_ F{ F{ F{ F{ F{ F{ F{ qj :y dN dN dN dN dN dN dN %w %w %w %w %w %w %w r} *) Z% Z% Z% Z% Z% Z% Z% t& T@ h+ [. h+ T@ Z% oh )5 $| $| $| )5 )5 Z% Z% )_ )_ qj a) q3 r} =) -) *) Z% Z% Z% Z% Z% Z% Z% F{ F{ F{ F{ F{ F{ F{ F{ |+.|+.|+.|+.DR DR q} q} q} O( cc hd U0 dc ", "%@ i i k k n n J+ I+ a% '= <| O_ M+ J+ _# K@ K@ E# E# '$ '$ '$ '$ '$ '$ '$ '$ '$ '$ '$ M6 M6 M6 M6 M6 M6 M6 M6 ,] ,] M6 M6 M6 $5 $5 w8 F D D D D D D D D n l n D }# E l >% ,% ^% ^% ^% ^% ,% >% ,% ,% ,% ,% ,% ,% ,% ,% N6 N6 N6 N6 g~ g~ <| <| <| 5c yk yk qa.TO qa.yk {k.ee mf mf fe ge fe mf fe fe fe fe fe fe fe je tk (j._j.(j.tk tk uk :j.je ie nf nf nf nf {k.f+ .. ]@ k* y* 9* y* k* *| *| *| *| *| *| *| *| @@ 5# D& 5# 5# W+ W+ . . p+ <$. ^.%h Wl.S4.u5 Xl.Yl.{[ `e F2.39.Zl.=e D..`l.&|.vC ru ya. m..m.+m.yC Re.m.,m.'m.)m.5:.'(.te.o(.O@.O@.m/.o(.**.x+.uY $ .9..9..$ .+[.M-.,>.YP H@.3..3..YP 5..r(.YP C_.;5.;5.C_.,>.,>.5H !m.~m.2H 3H 3H .j.ji.DU GE '_.H0.{m.]m.^..^m./m.(m._m.:m.5 '5 >5 >5 }| :] O) O) O) O) O) O) O) O) t& t& t& t& t& t& t& t& Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ F{ F{ F{ )_ I$ I$ I$ I$ I$ I$ I$ I$ hd hd )5 )5 )5 )5 ui ui ]_ ]_ ]_ ]_ O9.O9.O9.Xl Lb 48 48 48 48 48 48 48 -j -j -j -j -j -j -j hu LB '5 '5 '5 '5 '5 '5 '5 >5 >5 '5 '5 '5 ,5 ,5 ,5 }U a) r} %n :y -) r} uJ r} *) r} *) r} *) r} *) )_ )_ )_ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ O( cN g7 g7 / / g7 g7 #v [| [| / / / g7 g7 g7 )_ )_ )_ F{ F{ F{ F{ F{ Z% F{ x8 x8 F{ F{ )_ Y% D, D, D, c, uJ }U Y% Y% x8 x8 s6 s6 Ks Ks Ks Ks x8 x8 x8 x8 x8 x8 x8 x8 Z Y% x8 )_ F{ F{ )_ )_ F{ )_ )_ x8 x8 )_ )_ F{ x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ F{ F{ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ X[ X[ )_ F{ F{ F{ '5 '5 34 Ds [].Ds G7 $w N/.Ds '5 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ x8 x8 )_ )_ F{ I$ I$ Z% I$ x8 )_ T@ T@ F{ F{ t& F{ F{ F{ )_ )_ x8 x8 x8 x8 F{ I$ I$ )_ x8 )_ I$ I$ I$ F{ F{ F{ )_ )_ )_ F{ F{ )_ )_ x8 x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 gA gA ll.[].Ds Ds XG LB dt [+.yF ml.OV P=.1| 5m.55.CS 6m.H9.7m.}y 8m.0I fl.YB 9m.0m.am.bm.-2. b.~C cm.cm.6H dm.6H (:.=_.oe.me..G me.uj.aO TM >e.'_.^d.^d.'_.s9.ne.s9.D1.. .;5.;5.. .D1.b<.. .bZ v].6Z 6Z Kk./a.em.fm.^a.U` _%.m&.m&.l&.j,./@.m&.j,.d;.k&.gm.>(.gm.Ok.Ok.sD sD 3%.p[.z0.bH G].M!.G) X G;.'k hm.im.jm.A5.mW b:.km.D5.lm.mm.nm.om.pm.qm.rm.sm.tm.um.'s vm.wm.xm.3% +% * sS ym.M2 }| :y %n a) -) @% T@ Z% oh oh oh oh bc bc bc bc Is )_ )_ F{ F{ F{ I$ I$ F{ F{ F{ F{ F{ F{ F{ oh =L zm.zm.Js s6 Is F{ F{ F{ F{ qj qj :y :y :y :y :y :y :y :y qj qj F{ F{ F{ F{ oh oh bc bc bc bc Js Js Ks Tt Is s6 x8 Y% )_ )_ %n qj :y :y q3 a) %n )_ x8 x8 )_ F{ Z% Z% Z% I$ I$ F{ F{ I$ I$ Z% [].[].[].[].O* O* x8 x8 F{ F{ q} q} / / / / Z% Z% I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ qj :y dN dN dN dN dN dN dN dN dN 5z %w %w 5z dN :y *) Z% Z% Z% Z% Z% Z% Z% t& t& T@ T@ t& Z% I$ ^_ )5 $| $| $| )5 )5 Z% Z% F{ F{ a) a) q3 q3 r} *) *) Z% Z% Z% Z% Z% Z% Z% F{ F{ F{ F{ F{ F{ F{ F{ |+.|+.|+.|+.DR DR q} q} q} O( cc hd U0 dc ", "e h h i i n n m [# a% F +_ O_ M+ I+ _# K@ K@ E# E# '$ '$ '$ '$ '$ '$ '$ '$ '$ '$ '$ M6 M6 M6 M6 M6 M6 M6 M6 ,] ,] ,] M6 $5 $5 $5 G) F D D D D D D D D n l l E D E l >% ,% ^% U% U% ^% ,% >% ^% ^% ^% ^% ^% ^% ^% ^% N6 N6 N6 N6 g~ g~ <| <| +_ p} [9.&#.SO SO TO [9.BW mf .A q2.ee fe ee .A fe fe fe fe fe fe fe je tk (j._j.(j.tk tk uk :j.je ie nf ri ri nf {k.f+ .. r+ k* 9* 9* y* *| ]@ *| *| *| *| *| *| *| @@ ~. m& m& m& ~. C. ` ` ,. I R+ %h ov Wl.nv 9>.B@ Am.Bm.Cm.Dm.-d Em.Fm.D..Gm.IW pN O;.O;.~,.9'.t{.PW Re.d .MH mK Hm.b'.Im.lG :j &A &A Jm.}< Km.AT Lm.Mm.Nm.Om.; A{ _! Pm.Qm.Rm.Sm.Tm.Um.'m.Vm.Wm.'(.s_.Xm.LE wd.se.o(.m/.O@.C .uY $ .9..$ .7..7..3..,>.3..A_.G@.YP ;5.C_.5..5..C_.r(.5..r(.'>.Ym.Zm. K 2H pI D1.b<.$[.b<.Ua.e|.'_.FP `m. n..n.+n.@n.#n.i[.$n.%n.&n.NJ *n.zP =n.-n.;n.>n.!c.gU ,n.'n.'n.)n.!n.&2.`=.~n.6I kS X9.A,.{n.`[ u} (; 1{ E) )5 q$ 8# #. U@ 2% o3 o3 o3 o3 n3 n3 n3 o3 o3 2% U@ m@ m@ U@ 2% .* m@ m@ U@ U@ 2% .* .* * .# .# +# +# +# +# .# .# O) O) m* m* m* m* .# .# n3 n3 n3 n3 n3 n3 n3 n3 &5 n3 n3 ~_ ~_ n3 n3 =5 J- .# m* :] :] :] O) m* :] O) m* m* m* m* O) :] 2% .* .* .* * fd fd fd fd fd fd * .* .* .* 2% a# ,_ ,_ q$ j$ j$ q$ )5 ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ fd fd fd fd fd fd fd fd t& h+ [. [. T@ t& T@ [. h+ h+ h+ h+ h+ h+ h+ h+ !5 b) 9# $& [] hu hu hu b) !5 !5 b) 9# 9# b) !5 :] }| >5 '5 '5 >5 >5 }| :] :] :] :] :] :] :] :] Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ F{ F{ )_ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ hd hd )5 )5 )5 )5 ui ui .o .o .o .o ;b.;b.;b.b, Kb Ka Ka Ka Ka Ka Ka Ka -j -j -j -j -j -j -j hu LB '5 '5 '5 '5 '5 '5 '5 >5 >5 '5 '5 '5 ,5 ,5 dt ,b.r} *j :y dN r} dN 75.%w r} %w r} %w r} %w r} uJ )_ )_ )_ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ O( 51.xF ER vM vM ER xF dT Gs Gs vM vM vM ER ER ER F{ F{ F{ F{ F{ )_ )_ )_ t& I$ )_ F{ I$ I$ F{ x8 D, c, c, c, }U }U Z Z x8 x8 s6 s6 Ks Ks Ks Ks x8 x8 x8 x8 x8 x8 x8 x8 Z Y% x8 F{ F{ F{ )_ x8 F{ )_ Y% Z Z Y% )_ F{ x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ q} q} F{ F{ F{ )_ ,5 ,5 34 Ds [].Xl 24 G{ H{ b, '5 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ F{ Y% x8 t& t& F{ )_ Z% F{ F{ )_ )_ x8 x8 x8 x8 x8 F{ I$ I$ )_ x8 )_ I$ I$ I$ I$ F{ )_ )_ )_ x8 F{ F{ )_ )_ x8 x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 O* O* Ds XG ]n.]n.wW -j Jb S9.<+.mP xS D|.^n.~;.t` /n.(n.sg.p@.-..L,.*).(L _n.:n.(e.(.0n.an.gm.Ok.;(.r'.p[.r&.bn.$4.@>.cn.,'.U% -k dn.&9.en.fn.gn.Z>.b:.hn.in.jn.kn.ln.z&.mn.IO nn.J5.tm.on.pn.qn.rn..~.sn.=) h+ p: lP tn.un.:] a) qj a) t& T@ t& I$ Is Is Tt Tt Tt Tt g{.Tt Is )_ )_ F{ F{ F{ I$ I$ F{ F{ F{ F{ F{ F{ F{ oh s6 Ks Ks Ks Is Is )_ )_ F{ F{ qj qj :y :y :y :y :y :y :y :y qj qj F{ F{ F{ F{ oh oh bc bc bc bc vn.wn.Js Tt Is Is )_ x8 )_ )_ %n qj :y :y q3 a) a) F{ )_ x8 x8 F{ I$ Z% t& Z% F{ )_ )_ F{ Z% t& [].[].[].[].O* O* x8 x8 F{ F{ q} q} / / / / F{ F{ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% *) r} %w %w %w %w %w %w %w d6.+Z dN 5z 5z dN +Z c, a) I$ I$ I$ I$ I$ I$ I$ T@ t& Z% I$ I$ I$ I$ ^_ oh bc bc bc oh oh F{ F{ Z% Z% a) a) q3 q3 :y qj qj F{ F{ F{ F{ F{ F{ F{ Z% Z% Z% Z% Z% Z% Z% Z% |+.|+.|+.|+.DR DR q} q} q} O( cc hd U0 dc ", "9 j j h i l l [# [# a% a% a% [# ;] m K@ K@ K@ E# E# '$ '$ '$ '$ '$ '$ '$ '$ '$ '$ '$ o} M6 M6 M6 M6 M6 M6 M6 ,] ,] ,] M6 $5 $5 U5 O6 O6 D D D D D D D D n l l E D E l E D }# 9& 9& ^% ,% >% U% U% U% U% U% C C U% x5 t).t).t).x5 x5 x5 g~ O_ <| p} p} N_ q: N_ p} fe q2.vw .A ee fe mf vw fe fe fe fe fe fe fe je tk (j._j.(j.tk tk uk :j.xn.ie nf ri ri nf {k.'= .. 3. }. N@ X% s& m+ ^+ m+ m+ m+ m+ m+ m+ m+ m+ C& 3b ^* ^* C& k+ k+ ~+ h. R# I# H$ q# q# S+ 1$ ++ ,$ D7 yn.zn.Yb )'.,i An.kW Bn.o{.O;.o:.:B MH D).4Y PW d .mK c_.Cn.Dn.mt .3..5..]}.C_.mI i,.GE pI b<.b<.b<.b<.>e.. .Ua.YP G@.<..vj.Mn.Nn.On.Pn.Qn.Rn.h[.kk.8l.Sn.Tn.Un.MM Vn.Wn.Xn.Yn.Zn.`n. o.@u .o.5 }| :] O) }| :] O) O) O) O) :] }| U@ 2% 2% .* .* * * fd fd * * .* .* 2% 2% U@ a# q$ ,_ a# 8# 8# a# )5 ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd t& h+ [. [. T@ t& T@ [. h+ h+ h+ h+ h+ h+ h+ h+ O) .# H. +# [] >5 dt '5 d7 }| !5 .# H. j+ $& :] :] :] >5 '5 '5 '5 '5 >5 >5 >5 >5 >5 >5 >5 34 >5 >5 I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ F{ )_ )_ x8 x8 I$ I$ I$ I$ I$ I$ I$ I$ )5 hd )5 )5 )5 )5 ui ui ui ui .o .o .o .o .o b, LB LB Ka LB Ka LB Ka LB -j hu -j hu -j hu -j hu '5 '5 '5 '5 '5 '5 '5 '5 >5 >5 '5 '5 '5 ,5 ,5 dt c, %w *j dN +Z 5z +Z %o.dN dN dN dN dN dN dN :y uJ x8 )_ )_ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ 51.xF cT vM DR ER k@.dT Fs Gs DR vM DR ER cT cT Z% I$ I$ F{ )_ )_ x8 x8 T@ Z% F{ F{ Z% Z% F{ x8 uJ uJ uJ uJ Y% Y% Z O4 x8 s6 s6 s6 Ks Ks Ks Ks x8 x8 x8 x8 x8 x8 x8 x8 Y% x8 )_ F{ F{ )_ x8 Z )_ cN Z z<.z<. Z x8 )_ x8 x8 x8 x8 x8 x8 O* x8 Y% Y% x8 x8 )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ Z% I$ I$ F{ )_ )_ O* O* >5 ,5 O* '5 4! J- l* O) F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ Z Y% Z% t& )_ )_ Z% F{ F{ )_ )_ x8 x8 x8 Y% x8 F{ I$ I$ )_ x8 )_ I$ I$ O( I$ F{ )_ )_ x8 x8 F{ F{ )_ )_ x8 x8 KB Y% x8 x8 x8 x8 x8 cN cN cN cN cN x8 x8 x8 s6 O* x8 qj qj :y -j -j 48 %w yq &o.*o.Ii.=o.+R 2.-o.;o.5+.>o.,o.'o.)o.`=.,I 'R ^w 0+..&.!o.N0..(.~o.{o.]o.^o./o.(o.'f._o.wg.tj.Af.me.oe.2l.xj.7O :o.:o.l+.W#.W#.l+.W` :..l+.<..l+.l+.S` v>.l4.B}.od.Q*.1Z 1Z I>.I>.cb.'.1o.2o.3o.`n p# 4o.5o.6o.7o.8o.9o.2_.0o.ao.bo.co.a-.om.do.3G eo.fo.go.9t ho.io.-o jo.P$.o` q3 -) fd p] hf.7e.t& a) %n qj Z% t& I$ F{ s6 s6 s6 Ks s6 Ks Ks Ks Is )_ )_ F{ F{ F{ I$ >5 '5 '5 '5 '5 '5 '5 '5 pj )5 Ma Ma bc Is Is x8 x8 F{ F{ qj qj :y :y :y :y qj qj qj qj qj F{ F{ F{ F{ F{ F{ oh oh oh oh oh ko.vn.O4 s6 oh oh F{ )_ )_ )_ %n qj qj qj q3 a) Z% I$ )_ x8 x8 )_ F{ I$ t& Z% F{ )_ )_ F{ Z% t& O* O* [].O* O* O* x8 x8 F{ F{ q} q} q} / q} q} )_ )_ '5 I$ >5 Z% :] t& }| Z% }| Z% }| Z% }| *) r} 2( r} 2( r} 2( r} 2( ,b.[+.D, |+.:y }+.c, E- >k Fs Fs Fs Fs Fs a) I$ T@ t& I$ )_ )_ )_ I$ )5 bc bc bc bc oh oh F{ F{ t& v$ *) Fs >k |+.}+.}+.qj F{ F{ F{ F{ F{ F{ F{ Z% Z% Z% Z% Z% Z% Z% *) |+.|+.|+.|+.|+.DR DR q} q} O( O( hd hd dc ", "3 2 6+ E# >% >% E# E# E# E# E# E# E# (# E# } 0 l E E E n l + l E n + 0 l '$ dd dd dd dd dd dd dd dd @^ f^ o} kC dd E7 7c L_ ._ >% ,% '$ K@ K@ '$ ^% ,% >% '$ K@ K@ '$ >% D j@ M N t ,% >% '& T% }9.k3 K+ >' U %5 J) G$ U+ v a+ a+ 6& T% R% l:.Y_ !% g~ kC U5 N6 sk lC lo.xn.ie ie xn.J6 J6 xn.xn.je je ie le le ke ke .h.@n @n @n .h..h..h..h.8c 8c 4c 4c 5c p} &#.'= V U+ d+ =+ d+ W+ $. B. =+ =+ =+ =+ =+ =+ =+ U% dd N6 E7 7c 9c 8c 0' 0' 7c 5c 5c 5c 5c 5c 5c >+ >% z E= mo.no.oo.,e po.qo.4l ]h :r O;.ro.`L so.to.uo.vo.'8.,~. M xC yv yv :q vC vC oK c .Bn.5l n{.wo.xo.[q yo.Db.zo.Y z# bd R4.-m.Ao.Bo.%}.Yb.Co.Do.$/.)(.j/.}#.GA Eo.j$.ii.;(.rV Fo.Ta.Go.Ho.Io.Jo.kZ Ko.>T Lo.z7.w'.^a.w'.bZ n+.n+.P:.8^.C_.Mo.[H n$.a<.jD No.|H 1H Al.WJ zl.5H u'.U{.Oo.Po.Qo.Ro.So.To.Uo.Nn.6l.Vo.6l.h[.7l.Wo.Xo.Yo.Zo.`o. p..p.+p.@p.#p.$p.Nj.pf.)I %p.U_.&p.*p.;o.=p.-p.Q~.s} yh.4b '<.j~ e, N; /$ e# @% m* b) .# 0# +@ 4! 4! C, l* l* J- +@ +@ C, C, C, C, C, C, C, C, m* m* m* .# .# +# +# +# h. ]+ .# O) O) m* O) 4! G{ X5 ;p.X5 [4 }4 [4 4z }4 [4 [4 W5 W5 Q6 4z H{ 4! O) :] :] O) m* +# +# m* m* m* m* m* m* m* m* ,_ ,_ q$ q$ a# j$ j$ 8# a# a# a# a# a# a# a# a# )5 q$ a# q$ ,_ )5 ,_ a# a# a# a# a# a# a# a# a# 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ui 5[ 5[ 5[ fd fd * * t& t& Z% Z% t& T@ h+ [. Z% t& t& I$ )_ F{ t& [. t& ,_ T@ q$ h+ j$ [. 8# [. a# h+ 8# @. #. [. ,_ ^_ ^_ ^_ ^_ ^_ ^_ ti ti ed .o Hs Hs ac ed {_ Hs >5 '5 ,5 ,5 '5 >5 :] m* O* >5 :] O) :] }| :] O) :] :] }| :] O) :] >5 ,5 O* >5 :] :] >5 '5 '5 I$ )5 )5 )5 )5 )5 )5 )5 )5 oh oh pj pj pj pj pj pj >5 >5 hu >5 hu >5 hu >5 d7 >5 dt O* F;.,5 hu }| '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 LB -j -j -j -j -j -j -j -j Jb Jb q` q` Ka -j -j d7 I$ ^_ ^_ ^_ ^_ ^_ ^_ ^_ oh oh oh oh oh oh oh oh I$ O( F{ q} )_ X[ )_ cN x8 X[ I$ A% Z% O( )_ x8 I$ I$ I$ F{ )_ )_ x8 x8 x8 x8 )_ )_ F{ I$ I$ Z% O4 .Z s6 Is oh )5 ,_ (* s6 Ks Ks Ks Ks Ks Ks Ks )_ )_ )_ )_ )_ )_ )_ )_ Y% )_ F{ )_ Y% Y% x8 F{ cN #v cN cN cN cN x8 x8 F{ F{ '5 >5 >5 }| b, }| I$ F{ )_ )_ F{ I$ F{ )_ x8 x8 x8 x8 x8 x8 x8 x8 YY pj ti pj gA w8..Z s6 s6 s6 s6 s6 FR FR FR FR x8 x8 x8 x8 x8 x8 x8 x8 t& I$ )_ Y% Y% )_ I$ t& F{ F{ )_ )_ x8 x8 Y% Y% Z% x8 x8 I$ F{ Z z<.x8 F{ F{ F{ F{ F{ F{ F{ F{ Y% x8 )_ F{ F{ )_ x8 Y% cN #v cN cN cN cN x8 x8 F{ F{ '5 '5 '5 '5 Xl '5 a) }U h*.q} X[ >p.>p.e; 61 61 hd )5 )5 C' .o }| |+.`G h` h` ,p.,p.Gj./c./c.e6.$R 'p.Q(.];.)p.!p.aU Kp ~p.-O :3.1&.{p.]p.^p./p.*%.(p._p.!*.:p.x %w %w r} r} *) *) *) F{ F{ F{ F{ F{ F{ F{ F{ I$ x8 Z s6 I$ ,_ ^_ Is x8 x8 O* O* O* O* O* [].Xl Xl 34 b, G7 N/.Y1.y{ ui bc Tt Ks s6 Is F{ Z% F{ F{ %n %n c, ,b.,b.}U x8 s6 s6 s6 s6 x8 x8 x8 F{ F{ F{ qj qj qj qj qj F{ oh F{ F{ F{ F{ F{ F{ I$ I$ I$ F{ )_ )_ uJ x8 )_ )_ )_ F{ F{ F{ I$ I$ )_ )_ )_ F{ F{ F{ F{ F{ I$ I$ >5 I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ q} F{ F{ '5 '5 Xl >5 b, O) C, .# 34 ,5 d7.,5 K> m* K> >5 '_ ', '_ ', '_ vM cT xF DR vM DR vM DR vM DR vM 90 v#.Ms Ms e7 e7 _* e# d# '_ q} X[ sM ec )5 ,_ Ma B) pS pS dc dc cc O( X[ vM |+.Ls 7>.90 90 `5 DR F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ F{ )_ )_ x8 uJ q3 5z 5z q3 q3 q3 q3 a) a) Z% t& t& Z% ^_ ", "3 3 6+ E# >% '$ E# E# E# E# E# E# E# E# E# 0 + l n n n l l + l E n + 0 l n dd dd dd dd dd dd dd dd f^ f^ o} o} kC dd g~ x5 ._ >% ,% >% E# K@ '$ ^% ,% >% '$ E# E# '$ >% D 0% J R$ C D >% '& T% S% ,& (# 9& &$ G$ b% c+ k. k* s& s& s& tp.-+ ~@ =@ Q~ 4( U5 .n @n _j.m` J6 xn.ie je J6 up.xn.ie le le le ie ie ie ie uk vk *=.*=.*=.vk vk vk vk 9c 9c 4c 5c 5c 5c [9.>+ Y+ i> 9& 9& 9& Q% k+ l& 9& 9& 9& 9& 9& 9& 9& L_ g~ xn.je ie le ke he he ie ie ie ie ie ie ie 7c '& Q L@ vp.wp.xp.yp.zp.Ap.'g v%.=g yv Ny xC ,~.+m.+m.'8.8(.,~. M xC xC qN ru mT mT mT 7(.3/.YL :q /h )~.r-.-} yo.87 0%.,$ ># ^l.Bp.Cp.Ao.c[.&$.Dp.v1.Ep.$/.j/.Fp.!C Gp.1#.j$.+k.>4.#c.Hp.Ip.Jp.Kp.Lp.Mp.23.Np.Op.V8.Lo.^a.w'.bZ n+.}..aZ P:.Ua.lD CE Pp.EE jD }W 1H me.3H .j.zl.WJ @T SP Qp.Rp.Sp.fh.=_.Tp.Up.*_.Vp.Nn.Wp.:H Xp.#n.Yp.Zp.y}.RF `p. q..q.+q.yA @q.#q.$q.d].%q.&q.*q.=q.-q.X=.C,.qP _[.M- /; N9.vS 1I '<.j> f7 _* @% =- +% 9# H. C, C, l* l* l* l* J- J- C, C, C, C, C, C, C, C, .# .# .# .# +# +# j+ j+ h. ]+ .# m* O) O) m* 4! 4{ 4z R6 X5 W5 [4 W5 4z }4 }4 [4 [4 W5 W5 Q6 G{ 4! O) O) :] O) m* .# +# m* m* m* m* m* m* m* m* q$ q$ q$ a# a# a# a# a# a# a# a# a# q$ q$ q$ q$ )5 q$ a# q$ ,_ )5 ,_ a# a# a# a# a# a# a# a# a# 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ fd fd * * * .* Z% Z% t& t& T@ T@ h+ h+ t& T@ T@ Z% F{ )_ Z% h+ q$ q$ q$ q$ a# a# a# a# a# q$ q$ j$ !. 8# a# )5 &' &' ,_ ,_ )5 )5 ui ti ed .o Hs Hs {_ W_ {_ Hs K> }| >5 >5 >5 :] O) .# O* >5 O) O) :] }| :] O) }| }| }| }| :] }| '5 ,5 KB ,5 }| >5 ,5 O* ,5 '5 )5 )5 )5 )5 )5 )5 )5 )5 oh oh oh oh oh oh oh oh >5 >5 >5 >5 >5 >5 >5 >5 }| >5 ,5 O* O* ,5 >5 }| '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 -j -j -j -j -j -j -j -j q` q` q` Ka Ka Ka Ka LB F{ oh oh oh oh oh oh oh oh oh oh oh oh oh oh oh Z% I$ I$ I$ F{ F{ )_ )_ )_ )_ F{ I$ I$ F{ )_ )_ I$ I$ I$ F{ )_ )_ )_ x8 )_ )_ )_ F{ F{ F{ F{ oh s6 Ks Tt Tt bc Ma $| $| Ks Ks Ks Ks Ks Ks Ks Ks F{ F{ F{ F{ F{ F{ F{ F{ z<.Y% )_ x8 Z z<.Y% cN cN #v #v #v cN cN x8 x8 )_ )_ ,5 '5 Xl 34 34 >5 '5 F{ )_ )_ F{ F{ F{ )_ x8 x8 x8 x8 x8 x8 x8 x8 ll.({ Hs ]_ gA w8.s6 Is s6 s6 FR FR ig ig ig ig x8 x8 x8 x8 x8 x8 x8 x8 Z% I$ )_ Y% Y% )_ I$ Z% F{ F{ )_ )_ x8 x8 Y% Y% I$ Y% Y% F{ F{ Z Z F{ F{ F{ F{ F{ F{ )_ )_ )_ Y% x8 )_ F{ F{ )_ x8 h*.cN #v #v #v cN cN x8 x8 F{ F{ '5 '5 Xl Xl Xl Xl F;.;q.61.q} [| #v fc j; |].|].cc cc _y _y )O >5 h` Hi.P(.Hi.Hi.Hi.e6.e6.B,.>q.^D D^.D^.QB ,q.RB |y 'q.+u :3.)q.!q.~q..p.vX {q.]q.^q./q.(q._q.rY e|.:q.e.Z#.}q.7O xj.xl.jk.|p.-(.|q.|q.t].D@.:..:R :R v>.B}.r9.^Z :2.:2.1q.EP F0.G@.IU QM tY L:.**.2q.vl.3q.+$.+$.4q.4q.5q.1%.~{.6q.7q.8q.9q.H}.J}.62.0q.aq.*L M> I{ bq.cq.dq.eq.fq.gq.hq.iq.lm.jq.jq.ln.kq.y;.rR lq.mq.nq.oq.pq.qq.rq.V* R+ )% 3% *j 5z 5z 5z 5z 5z 5z 5z q3 qj F{ F{ F{ F{ F{ F{ F{ F{ x8 Y% x8 I$ t& I$ )_ x8 x8 x8 O* O* O* [].[].Xl N/.G7 $w ;p.sq.tq.uq.ti bc Tt Ks s6 Is F{ I$ F{ F{ qj %n D, c, c, uJ Is Tt Tt Tt Is Is )_ )_ F{ F{ qj qj :y :y :y qj qj F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ F{ )_ )_ )_ x8 )_ )_ )_ F{ F{ F{ I$ I$ F{ F{ F{ F{ F{ )_ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ 34 Xl Xl Xl 34 b, 4! 4! b, Xl [].Xl b, 4! b, '5 O( [| !_ !_ !_ [| / g7 / / / / / / / vM 90 ,x ,x 2U Ms `5 e7 N; d# A% O( ec ec cc )5 (* B) B) pS pS dc dc cc cc DR vM dE Ls 7>.Y_.90 -; DR F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ F{ )_ )_ )_ uJ q3 5z 5z 5z q3 q3 q3 q3 qj a) Z% t& Z% I$ ", "6+ 3 6+ E# >% '$ K@ E# E# E# E# E# E# E# E# E n l + + + l l + l E n + 0 l n dd dd dd dd dd dd dd dd o} o} o} o} o} o} o} ._ (# >% ^% ,% '$ E# '$ ,% ,% >% '$ '$ '$ '$ >% D 0% I# UO f+ F M_ '& T% S% y '$ d+ S N K O@ vq.d' wq.xq.;- @< )2 S| P C. 6[ ^{ l:.w8 M6 $5 je je je J6 lo.up.je ke he ke ke le ie je xn.sk vk *=.*=.*=.vk vk vk vk 7c 7c 5c 5c 5c 4c yk U Z+ k+ Q% Q% 9& Q% Q% i> Q% Q% Q% Q% Q% Q% Q% 6c E7 je ie ie le ke he he le le le le le le le 9c t).e+ v E= b8 4(.5(. 6.Ho yq.zq.(j w%.a'.mK :B ya.ya.ya.ya.ya.ya. M xC ],.],.sN mT sN sN 7(.ro.Cn.~i Aq.Bq.Cq.Dq.Eq.Fq.Gq.. k$ Hq.=m.Iq.Jq.Ub.Kq.Lq.5%.$/.9~.9~.Mq.I-.Nq.m(.Oq.Dl.Pq.Qq.Rq.OU Sq.Np.Np.Np.23.23.U8.U8.Cf.)>.q(.aZ E!.Y` P:.;5.lD ~>.EE EU Tq.kD zf.me.2H 3H ji.Uq.[p.uI Vq.sI Oo.Nh.0O Wq.=_.Xq.Qo.Up.Yq.Zq.`q. r.7<.Yp.Yp..r.+r.@r.R^.)Z (e.0+.n^.p^.W/.J(.#r.$r.%r.&r.*r.=r.vk.-r.;r.>r.oP R Ak 0}.vF e- Q; c# !; :$ r$ '. +# J- l* l* l* l* C, C, J- J- J- J- J- J- J- J- +# +# +# j+ j+ j+ ]+ ]+ ]+ j+ +# .# O) O) m* C, 5! Q6 4z 4z Q6 W5 4z X5 }4 }4 }4 [4 [4 [4 W5 4{ C, O) O) O) O) m* .# +# m* m* m* m* m* m* m* m* a# a# a# a# a# q$ q$ q$ j$ j$ a# a# q$ ,_ ,_ )5 )5 q$ a# q$ ,_ )5 ,_ a# q$ q$ q$ q$ q$ q$ q$ q$ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ fd fd * * * .* I$ Z% T@ h+ [. h+ T@ t& t& T@ h+ t& F{ )_ I$ t& a# a# a# q$ q$ q$ q$ ,_ q$ ,_ )5 q$ j$ j$ q$ ^_ L$ L$ a# q$ ,_ ,_ ui ui ed .o Hs Hs {_ W_ {_ Hs 4! :] :] }| :] O) m* .# ,5 >5 O) O) }| >5 }| O) >5 >5 }| }| >5 '5 ,5 O* ZY O* >5 '5 O* KB O* ,5 oh oh oh oh oh oh oh oh oh oh oh oh oh oh oh oh >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 '5 ,5 ,5 '5 >5 >5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 -j -j -j -j -j -j -j -j Ka Ka Ka Ka Ka q` q` dt )_ Is Is Is Is Is Is Is oh oh oh oh oh oh oh oh t& t& Z% Z% I$ I$ I$ F{ I$ F{ )_ )_ )_ )_ F{ I$ I$ I$ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ )_ )_ Is oh bc bc bc bc bc bc bc Ks Ks Ks Ks Ks Ks Ks Ks I$ I$ I$ I$ I$ I$ I$ I$ 7}. Z x8 Y% z<.7}. Z h*.cN #v #v #v cN cN x8 x8 Y% x8 O* O* Ds Ds Xl '5 '5 F{ F{ F{ F{ F{ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 y{ ll.]_ ({ `Y gA Is ^_ s6 s6 FR FR ig ig ig ig x8 x8 x8 x8 x8 x8 x8 x8 Z% I$ )_ x8 x8 )_ I$ Z% F{ F{ )_ )_ x8 x8 Y% Y% F{ Z Z F{ F{ Y% Y% I$ I$ I$ I$ F{ )_ )_ x8 x8 Y% x8 )_ F{ F{ )_ x8 h*.cN #v #v #v cN cN x8 x8 F{ F{ '5 '5 Xl Xl Xl Xl ,5 Z h*.O( !_ g7 -L 1{ N=.N=.ec ec pj pj ]_ F{ AJ LV Hi.A,.3U qP qP qP ,r.B,.f6.'r.'r.R0.)r.^b.Rs ;;.!r.sX ~r.#p.{r.uX ]r.^r./r.(r._r.:r.5q.gZ >.u_.a..E0.M@.rY /6.-5.4q.3r.4r.5r.bR 7q.|a.6r.7r.8r.m;.K!.N7.4!.]. A* }I 9r.0r.ar.br.cr.dr.er.fr.gr.hr.ir.ln.jr.kr.B&.lr.mr.Dx nr.or.rq.u* Q+ r. 3% *j 5z dN dN dN dN dN dN dN :y qj F{ F{ F{ F{ F{ F{ F{ F{ x8 x8 )_ I$ Z% I$ F{ cN cN cN x8 x8 x8 O* O* '5 Xl 34 34 G7 N/.34.ll.ti bc Tt Tt Is Is F{ I$ I$ I$ qj qj :y D, D, %n oh bc bc bc oh oh F{ F{ F{ F{ qj qj :y :y :y qj qj F{ F{ F{ F{ F{ F{ F{ I$ I$ F{ F{ F{ )_ )_ )_ )_ )_ )_ F{ F{ F{ I$ I$ Z% I$ I$ F{ )_ )_ x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ 34 Xl Xl Ds Xl Xl 34 b, K> 34 Xl Xl b, b, 34 ,5 )_ q} O( A% A% A% O( O( q} q} q} q} q} q} q} vM 7>.7>.7>.7>.90 -; :* d# d# A% O( cc ^_ Ma $| (* qS qS $| $| )5 )5 )5 hd DR DR DR Fs >k -; yq 2( qj F{ F{ F{ F{ F{ F{ F{ I$ I$ F{ F{ F{ )_ )_ %n r} %w %w %w r} r} r} r} %n qj I$ Z% Z% Z% ", "6+ 3 6+ E# '$ E# K@ E# E# E# E# E# E# E# E# }# E l 0 0 0 + l + l E n + 0 l n dd dd dd dd dd dd dd dd o} o} o} f^ f^ @^ @^ K+ (# >% ^% ^% >% '$ >% ,% ,% >% >% >% >% >% >% D %5 TO &#.f+ F M_ '& T% e+ ~@ W% s& p# Q% Q% 9& 9& 9& k+ k+ k+ k+ k+ k+ k+ !% 7c ie ie le ke ke he he le le le le le le le 9c }9.u& 9& p 2$ .iD iD kD PX FE GE zl.2H 3H ji.D!.Qp.@T 4H [p.[p.Nh.Nr.Sp.Wq.Or.=_.fh.Pr.mD yl.Qr.Rr.Rr.:m.Sr.Tr.`p.Ur.KM Vr.0m.ql.ZB ,U Wr.fX }D }D Xr.Yr.Zr.`r.=o.24.24. s.`l :[.v8.1I dd.Q; Wt e- `% b# H. +@ J- l* l* C, 4! 4! J- J- J- J- J- J- J- J- +# j+ j+ j+ ]+ ]+ {+ {+ +# j+ j+ +# m* O) m* l* 5! W5 Q6 Q6 Q6 4z X5 R6 }4 }4 }4 }4 [4 [4 [4 5! C, m* O) O) O) m* m* .# m* m* m* m* m* m* m* m* 8# j$ j$ a# q$ q$ ,_ ,_ j$ j$ a# q$ ,_ ,_ )5 )5 )5 q$ a# q$ ,_ )5 ,_ a# q$ q$ q$ q$ q$ q$ q$ q$ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ui ui ui 5[ 5[ fd fd fd F{ Z% h+ /. /. h+ t& I$ t& h+ h+ t& F{ )_ F{ Z% j$ a# a# q$ ,_ ,_ )5 )5 q$ )5 ^_ )5 q$ q$ ,_ ^_ E) E) ,_ ,_ ,_ ,_ 5[ 5[ ed .o Hs Hs {_ W_ {_ Hs K> :] :] :] :] :] :] O) ,5 }| O) O) }| >5 }| :] ,5 >5 }| }| '5 O* O* ,5 KB ,5 >5 >5 ,5 O* O* ,5 oh oh oh oh oh oh oh oh ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 '5 '5 >5 >5 >5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 hu -j -j -j -j -j -j -j 48 -j -j Ka q` q` Jb F;.x8 s6 s6 s6 s6 s6 s6 s6 oh oh oh oh oh oh oh oh T@ t& t& t& Z% Z% I$ I$ Z% I$ )_ x8 x8 )_ I$ Z% F{ F{ F{ F{ F{ F{ )_ )_ Z% I$ I$ F{ )_ )_ x8 x8 ^_ Ma Ma bc Tt Tt Tt Ks Ks Ks Ks Ks Ks Ks Ks s6 F{ F{ F{ F{ F{ F{ F{ F{ z<.Y% x8 Y% z<.z<. Z cN cN #v #v #v cN cN x8 x8 Z Z KB KB [].[].[].,5 ,5 F{ I$ F{ )_ )_ F{ I$ x8 x8 x8 x8 x8 x8 x8 x8 x8..s.({ ({ `Y `Y oh )5 s6 s6 FR FR ig ig ig ig x8 x8 x8 x8 x8 x8 x8 x8 I$ F{ )_ x8 x8 )_ F{ I$ F{ F{ )_ )_ x8 x8 Y% Y% x8 z<. Z F{ I$ x8 x8 Z% Z% Z% I$ F{ )_ )_ x8 x8 x8 x8 )_ )_ )_ )_ x8 cN cN #v #v #v cN cN x8 x8 F{ F{ '5 '5 Xl Xl Xl Xl :] ,5 )_ O( [| +s.bd.fc l*.l*.ZQ sM Is YY YY )_ AJ @s.vk.A,.qP 3+.+R +R #s.oP $).RY b].{U !+.*<.x#.$s.w*.LS %s./w &s.@-.*s.=s.-s.;s.>s.Ek.,s.RM - _s.:s.5 34 Xl Ds Ds Ds Xl Xl K> b, b, 34 34 Xl Xl ,5 x8 X[ F{ A% Z% A% Z% A% I$ O( I$ O( I$ O( I$ Fs |+.dE M~.Ls Ls ', '_ A% A% hd hd hd $| $| $| $| qS qS $| $| )5 )5 )5 Z% I$ Fs a) Fs q3 >k 5z q3 qj F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ %n =) *j *j *j =) =) =) =) %n %n F{ I$ Z% Z% ", "a+ 6+ a+ E# '$ E# a+ E# E# E# E# E# E# E# E# }# E l 0 0 0 + l + l E n + 0 l n dd dd dd dd dd dd dd dd kC kC o} f^ f^ @^ )@ K+ (# ,% U% U% ,% >% >% ,% >% ,% ,% ,% ,% ,% ,% a% q: AW BW p} +_ M_ '& T% -+ h@ N( j3 9s.T| 0s.as.bs.cs.ds.es.fs.qr.gs./_ hs.is.js.D= L@ U% C& &- 9c le ie J6 lo.up.ie 2b je je je ie le le le :j.N6 .n .n .n N6 N6 N6 N6 g~ E7 p} 5c 4c 4c Wl Y+ Z+ k+ k+ i> i> Q% 9& U% k+ k+ k+ k+ k+ k+ k+ !% 9c le le ke ke ke ke he ke ke ke ke ke ke ke ke +h.&% ,' ^% E q 2@ Ha S+.ks.ls.ms.ns.os.3i.ps.O&.Jx Jx Jx Jx o:.o:.o:.],.],.],.],.7(.sN sN M iG 9'.qs.7'.V[.M<.2K Dy rs.ss.*m.' /# D! n ts.8%.O2.$4.us.-N vs.ws.xs.ys.zs.As.6..s+.Bs.Cs.7q.Ds.7p.Io.Es.6p.Fs.Gs.Hs.h&.]-.G@.,>.H@.B_.B_.H@.iD DE PX PX kD EE `F pe.2H K 2H Eg.Qp.){.Qp.Is.Is.cO Is.Is.bO Rp.Sp.oI Js.Ks.9O (d.Ls./:.jI jk.Ms.Ns.yX ^R MM Q#.|d.LF Os.Ps.Qs.Rs.Ss.Wr.eX Ts.)U Us.@o.3+.Vs.Ws.>r.oP K/.4*.iA `0.Xs.v8.Vt J! '. j+ +# .# .# m* O) O) +# +# +# +# +# +# +# +# +# j+ j+ j+ ]+ ]+ {+ {+ m* +# ]+ j+ m* :] m* J- 4{ W5 W5 Q6 4z X5 X5 X5 [4 [4 [4 [4 [4 [4 [4 5! l* m* m* O) O) O) m* m* m* m* m* m* m* m* m* m* 8# j$ j$ a# q$ q$ ,_ ,_ a# q$ q$ q$ ,_ )5 )5 )5 )5 q$ a# q$ ,_ )5 ,_ a# ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ pj pj ti ti ui ui ui 5[ I$ t& h+ /. /. h+ Z% F{ Z% T@ h+ T@ I$ F{ I$ Z% a# a# q$ q$ ,_ )5 )5 ^_ q$ )5 oh ^_ ,_ q$ )5 ^_ FR sM oh ^_ )5 ,_ fd * ed .o Hs Hs {_ W_ {_ Hs 34 }| }| }| }| >5 >5 >5 '5 }| m* O) }| >5 >5 }| O* >5 :] }| ,5 KB O* ,5 O* '5 :] }| >5 ,5 '5 >5 oh oh oh oh oh oh oh oh ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 }| }| >5 >5 >5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 hu hu hu hu hu hu hu hu d7 hu hu LB dt dt F;.F;.x8 s6 s6 s6 s6 s6 s6 s6 oh oh oh oh oh oh oh oh T@ t& t& t& Z% Z% I$ I$ Z% I$ )_ x8 x8 )_ I$ Z% )_ )_ F{ F{ F{ F{ F{ F{ Z% I$ I$ F{ )_ )_ x8 x8 )5 )5 ^_ oh Is Is s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 Y% Y% Y% Y% Y% Y% Y% Y% Y% x8 F{ )_ Y% Z x8 q} cN #v #v #v cN cN x8 x8 Z Z ZY KB d7.[].[].O* O* F{ Z% I$ x8 Y% )_ Z% x8 x8 x8 x8 x8 x8 x8 x8 x8..s.({ ({ `Y `Y oh )5 s6 s6 FR FR ig ig ig ig x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ )_ )_ )_ )_ F{ F{ F{ F{ )_ )_ x8 x8 Y% Y% x8 z<. Z F{ I$ x8 x8 Z% I$ I$ I$ F{ )_ )_ )_ x8 )_ )_ x8 x8 x8 x8 )_ X[ cN #v #v #v cN cN x8 x8 F{ F{ '5 '5 Xl Xl Xl Xl }| O* Y% q} g7 Ys.Zs.C* f>.i*.#v cN cN x8 O* k@.]O `s. 2.D|. t.9}.n*.-b._c.eE 3I .t.kl.+t.8m.pf.3[.e5.@t.s@.#t.-2.h].&[.$t.%t.o[.p9.&t.R:.1r.%c.t.w_.iZ L@.4p.-5.=5./6.,t..R+ r. &h %w %w %w 5z d6.d6.d6.d6.d6.d6.d6.c, qj F{ F{ F{ F{ F{ F{ F{ x8 )_ F{ F{ F{ F{ I$ O( #v i*.#v #v #v cN cN cN F{ F{ )_ ,5 ,5 '5 Xl pj Is bc bc bc oh oh F{ )_ )_ )_ %n %n :y :y :y qj ^_ Ma Ma Ma ^_ ^_ I$ I$ F{ F{ qj qj :y :y :y qj qj F{ F{ F{ F{ F{ F{ F{ )_ )_ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ I$ I$ t& Z% I$ F{ )_ x8 Y% Y% )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ >5 >5 '5 ,5 ,5 ,5 '5 '5 }| :] :] }| '5 ,5 ,5 '5 O* )_ '5 Z% }| Z% }| Z% >5 I$ >5 I$ >5 I$ >5 I$ DR DR |+.Fs Fs A% A% A% A% hd E) F- F- F- @Z qS $| C' C' C' ui ui }| }| >5 I$ hu a) -j q3 -j q3 qj F{ F{ F{ F{ F{ F{ F{ )_ )_ F{ F{ F{ F{ F{ qj r} %w %w %w r} r} r} r} qj qj F{ F{ I$ Z% ", "a+ 6+ a+ E# '$ K@ a+ E# E# E# E# E# E# E# E# E n l + + + l l + l E n + 0 l [# dd dd dd dd dd dd dd dd kC kC kC o} f^ f^ @^ @^ (# ,% 9& 9& ^% >% >% ,% >% ,% ^% ^% ^% ^% ,% a% 'B 7t.8t.fe +_ M_ '& -+ $+ k& w< W^ 9t.gs.0t.at.bt.ct.dt.et.ft.gt.ht.it.jt.j* c. m. ^+ W+ Q% R% 7c le le je J6 J6 ie he xn.xn.je ie le ke ke m` N6 .n .n .n N6 N6 N6 N6 7c 7c 5c 5c 5c 4c yk 4c U i> i> k+ i> i> 9& 9& k+ k+ k+ k+ k+ k+ k+ !% 8c ke ke ke ke ke ke ke ke ke ke ke ke ke ke ke :j.~% 8c x5 '= C G# v..kt.`5.lt.mt.nt.ot.(i.-h.|=.,l.1=./h w%.w%.w%.yv yv qN ],.],.~8.7(.sN 3Y E..zC s{.N;.ps.pt.@P g_.qt.C1 rt.st.]T ) ._ Ml .4.tt.!e.G].ut.l(.1^.xs.vt.wt.xt.yt.zt.5|.At.Bt.Ct.Dt.B].Ds.Es.Fs.Hs.k5._%.h&.3..H@.H@.3..'>.4W DE Et.lD PX iD jD |H nI rI UP Eg.}p.vI ){.Qp.Is.Ft.Gt.+K hL WM Ht.It.Jt.Kt.Kt.Or.UJ fh.Gk.Lt.Ls.h[.Mt.Nt.PJ Ot.^R 7D Jh.bc.Pt.Qt.Ps.Rt.JF St.2}.Tt.Ut.Vt.U0.Wt.Vs.|4.Xt.K/.iA iA iA iA K/.;&.Vt v+ +# .# .# .# .# m* m* +# +# +# +# +# +# +# +# +# +# +# j+ j+ j+ ]+ ]+ }| .# {+ ]+ m* :] m* J- H{ W5 [4 W5 4z X5 4z Q6 Q6 Q6 Q6 W5 W5 W5 [4 5! J- .# m* O) O) O) O) m* m* m* m* m* m* m* m* m* a# a# a# a# a# q$ q$ q$ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ )5 q$ a# q$ ,_ )5 ,_ a# ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ pj ti ti ti ui ui 5[ 5[ t& T@ h+ [. h+ T@ Z% I$ F{ Z% T@ T@ Z% I$ Z% t& q$ ,_ ,_ ,_ ,_ )5 )5 )5 a# )5 oh oh )5 q$ ,_ )5 FR FR Is oh )5 ,_ fd fd ed .o Hs Hs {_ W_ {_ Hs 34 >5 }| }| }| >5 '5 ,5 >5 :] m* O) }| '5 >5 }| O* }| m* O) ,5 KB O* >5 ,5 >5 :] :] >5 '5 '5 }| oh oh oh oh oh oh oh oh )5 )5 )5 )5 )5 )5 )5 )5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 }| :] :] }| >5 >5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 hu hu hu hu hu hu hu hu LB LB LB LB LB dt dt ,5 Is Is Is Is Is Is Is Is oh oh oh oh oh oh oh oh t& t& Z% Z% I$ I$ I$ F{ I$ F{ )_ )_ )_ )_ F{ I$ )_ )_ )_ F{ F{ F{ I$ I$ F{ F{ F{ F{ F{ )_ )_ )_ ^_ ^_ ^_ oh Is Is s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 Z Z Z Z Z Z Z Z Y% )_ F{ F{ x8 Y% x8 q} cN #v #v #v cN cN x8 x8 Z Z KB KB [].[].[].O* KB F{ t& Z% x8 Z )_ t& x8 x8 x8 x8 x8 x8 x8 x8 y{ ll.]_ ({ `Y gA Is ^_ s6 s6 FR FR ig ig ig ig x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ x8 x8 Y% Y% F{ Z Z F{ F{ Y% Y% I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ x8 Y% Y% x8 )_ q} cN #v #v #v cN cN x8 x8 F{ F{ '5 '5 Xl Xl Xl Xl KB Yt.7}.cN X[ /&./&.d) xi xi fc g7 ER X[ %n ER 9}.S=.^n.^n.P=.tP ]O kf.Zt.`t.J~. u..u.@b.+u.KS KJ F(.@u.#u.$u.%u.&u.*u.=u.X%.-u.;u.>u.}.H@.4W f,.2p.f,. $.gZ )u.3q.-5.M@.5 ui Is Tt bc Ma ^_ oh )_ )_ Y% x8 uJ uJ D, D, D, %n oh bc bc bc oh oh F{ F{ F{ F{ qj qj :y :y :y qj qj F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ I$ I$ )_ )_ )_ F{ F{ F{ I$ I$ Z% I$ I$ F{ )_ )_ x8 x8 )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ >5 '5 '5 ,5 '5 '5 >5 }| '5 }| :] }| '5 ,5 '5 }| ,5 '5 >5 }| }| }| >5 >5 }| }| }| }| }| }| }| }| I$ O( Fs O( A% A% v$ E) hd E) F- M> M> 6 9u.@Z (* og og og 5[ 5[ :] :] }| }| d7 hu -j Ka wW LB F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ I$ a) q3 5z 5z 5z q3 q3 q3 q3 a) a) F{ F{ F{ I$ ", "K@ 6+ a+ E# E# K@ 6+ E# E# E# E# E# E# E# E# J+ I+ m [# [# [# m m I+ m a% [# I+ J+ m [# dd dd dd dd dd dd dd dd kC kC kC kC kC o} o} o} (# O6 L_ 6c >' O6 M_ M_ M_ O6 x5 >' >' x5 O6 O_ 0u.au.bu.cu.mf M_ '& -+ v] du.eu.W) j- fu.gu.hu.iu.ju.ku.lu.mu.nu.ou.pu.=i qu.gc fc l. X% <# '$ E7 7c 8c 9c E7 g~ 7c 8c 7c 7c 7c 7c 7c 9c 9c vk vk *=.*=.*=.vk vk vk vk 9c 9c 4c 5c 5c 5c [9.5c f+ L_ ,' !% !% !% 6c 6c ,' ,' ,' ,' ,' ,' ,' ,' 0' 0' 0' 0' 8c 8c 8c 8c 0' 0' 0' 0' 0' 0' 0' he uk :j.le E7 5c Z+ .% t* hC p2 ru.su.tu.uu.vu.wu.xu.yu.zu.>g )~./h mt :q kt :r qN ro.~8.~8.`O d_.4Y PW zC [B h1.U[.^h.@P Au.qt.Bu.Cu.Du.Eu.K& ._ Fu.Cp.8%.Na.a=.Gu.Hu.ws.Iu.Ju.AI Ku.Lu.Mu.BU Nu.Cs.8q.Ou.)0.Pu.~{.5p.Qu.j,.m&.M-.dZ @[.% .@[.IU 1W ~>.iD Mo.Mo.Tq.1H GE G Zm.2H WJ vI @T Qp.cL ZM 3R dO Ru.Su.#K Tu.Uu.Jt.Vu.Js.Wu.Wu.Xu.Sp.Lt.Yu.[g.Zu.(R `u.SS 2g.sf. v..v.+v.@v.#v.$v.%v.M'.VB &v.*v.}5.V0.3U kA Xt.jA jA =v.$Z =v.-v.;v.>v.e# h+ [. [. [. [. /. /. h+ h+ h+ h+ h+ h+ h+ m* .# l* l* l* J- J- +@ +@ 34 l* `+ @ C, K> C, +@ $w G{ 5! 4{ H{ 24 G{ 5! 24 24 H{ H{ G{ G{ 4{ 4{ J- l* C, 4! K> 4! 4! 4! C, C, C, C, C, C, C, m* q$ q$ q$ a# a# a# a# a# oh ^_ ^_ )5 ,_ q$ q$ a# )5 q$ a# q$ ,_ )5 ,_ a# )5 )5 )5 )5 )5 )5 )5 )5 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ fd fd fd * * h+ h+ T@ T@ t& t& Z% Z% Y% F{ t& T@ t& Z% t& T@ )5 )5 )5 )5 ,_ ,_ ,_ ,_ j$ ,_ ^_ oh )5 q$ q$ ,_ hd hd )5 )5 )5 )5 ui ui ed .o Hs Hs {_ W_ {_ Hs b, :] :] O) :] }| '5 ,5 >5 :] m* O) }| '5 '5 >5 O* :] +# m* '5 KB ,5 :] O* '5 }| }| '5 ,5 ,5 >5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 >5 >5 >5 >5 >5 >5 >5 >5 '5 >5 :] O) O) :] >5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 >5 >5 >5 >5 >5 >5 >5 >5 ,5 ,5 ,5 '5 '5 '5 '5 '5 oh oh oh oh oh oh oh oh oh oh oh oh oh oh oh oh Z% I$ I$ I$ F{ F{ )_ )_ )_ )_ F{ I$ I$ F{ )_ )_ x8 )_ )_ )_ F{ I$ I$ I$ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% Y% Y% Y% Y% Y% Y% Z x8 )_ )_ Y% Z Y% X[ cN #v #v #v cN cN x8 x8 Y% Y% KB O* [].Ds Ds ,5 ZY I$ T@ Z% Y% Z )_ t& x8 x8 x8 x8 x8 x8 x8 x8 ll.({ Hs ]_ gA w8.s6 Is s6 s6 FR FR ig ig ig ig x8 x8 x8 x8 x8 x8 x8 x8 )_ F{ F{ F{ F{ F{ F{ )_ F{ F{ )_ )_ x8 x8 Y% Y% I$ Y% Y% F{ F{ Z Z F{ x8 x8 )_ )_ F{ I$ Z% Z% F{ )_ x8 Y% Y% x8 )_ q} cN #v #v #v cN cN x8 x8 F{ F{ '5 '5 Xl Xl Xl Xl O* ,v.z<.q} q} i*.R9.)' g, rj rj P~.cE cT }+.8!.'v.X| o*.)v.4].Jj.!v.~v.w,.{v.]v.^v./v.gU (v._v.:v.g5.p6.&[.:}..f>.f>.i*.i*.i*.#v / g7 cN cN cN F{ Z% ,_ s6 Tt bc Ma ^_ oh )_ x8 Z Z `Q }U ,b.c, c, uJ Is Tt Tt Tt Is Is )_ )_ F{ F{ qj qj :y :y :y qj qj F{ F{ F{ F{ F{ F{ F{ x8 )_ )_ )_ F{ I$ I$ I$ )_ )_ )_ F{ F{ F{ I$ I$ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ I$ F{ F{ F{ I$ Z% T@ T@ x8 I$ t& Z% F{ )_ I$ O) >5 34 b, b, b, 34 Xl Ds b, b, b, b, b, b, b, }| Z% )5 Z% ,_ E) E) &' &' 61 6 vi h7 h7 Y* 6 pg ,_ ,_ ,_ ,_ :] :] :] :] b, b, b, 34 `z Kb ]n.Kb '5 F{ F{ F{ F{ F{ F{ F{ x8 )_ )_ )_ F{ I$ I$ a) D, +Z +Z +Z D, D, D, D, -) *) I$ F{ )_ F{ ", "K@ 6+ a+ E# E# K@ 6+ E# E# E# E# E# E# E# E# ]# J+ m a% a% a% [# m I+ m a% [# I+ J+ m [# dd dd dd dd dd dd dd dd kC kC kC dd dd dd dd dd _# O6 6c 6c L_ O6 M_ M_ M_ O6 x5 L_ L_ x5 O6 O_ tv.uv.bu.cu.mf M_ '& h@ vv. c wv.xv.dq.yv.zv.Av.Bv.Cv.Dv.Ev.Fv.Gv.Hv.;i Iv.Jv.Kv.ag G[.e k C. x5 7c 8c 8c 7c E7 E7 9c 8c 8c 9c 9c 7c E7 E7 N6 d( Lv.Lv.Lv.d( d( d( d( 8c 8c 4c 4c 5c p} &#.<| '= >' 6c !% #% !% ,' ,' 6c 6c 6c 6c 6c 6c 6c 6c 0' 0' 0' 0' 0' 8c 8c 8c 0' 0' 0' 0' 0' 0' 0' 0' sk Mv.ie je ri 3{ *$ I# O# Nv.Ov.p2 Pv.Qv.Rv.Sv.a| |k.Tv.}k.r-.Uv.i1.mt _r kt qN ro.Vv.Vv.`O >|.Wv.Xv.>l.zC uT 6Y ps.os.s:.Yv.Zv.L] [ Am.3@ `. +^ `v. w.0).$=.tL .w.1^.+w.@w.Ju.AI #w.$w.zt.s+.]s.Ou.)0.%w.e4.~{.5p.Qu.m&../.f,.fZ SX SX @[.,}.pV !` EE ZF GU a<.GE |H 2H 5H 6R 3H 4H @T &w.WM Gt.*w.Ru.Su.Su.Su.KP KP cL Ht.Sp.Js.Kt.Xu.Sp.Nr.=w.@(.hk.6n.jk.OM >W -w.;w.<}.>w..v..v.,w.ge.>[.eX 'w.)w.Yr.!w.,3. m Xt.jA jA $Z $Z =v.-v.!<.fJ c# T@ h+ [. [. /. +. +. h+ h+ h+ h+ h+ h+ h+ m* C, C, C, l* l* J- J- J- Xl l* `+ @ C, K> C, +@ G7 H{ 4{ 4{ H{ 24 4{ 3{ $w $w 24 24 H{ H{ G{ G{ J- J- C, 4! K> K> 4! 4! C, C, C, C, C, C, C, C, 5[ ,_ q$ q$ a# j$ j$ 8# Is Is oh )5 ,_ q$ a# j$ )5 q$ a# q$ ,_ )5 ,_ a# )5 )5 )5 )5 )5 )5 )5 )5 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ * * * .* .* 2% 2% 2% [. h+ T@ t& Z% Z% t& t& z<.)_ t& T@ T@ t& T@ h+ oh ^_ ^_ )5 ,_ ,_ q$ q$ 8# q$ ^_ ^_ ,_ a# a# q$ 4. 4. j$ q$ ,_ ^_ pj pj ed .o Hs Hs {_ W_ {_ Hs K> O) m* .# m* :] >5 '5 >5 O) m* m* }| '5 '5 >5 ,5 O) j+ .# >5 O* '5 O) ZY ,5 >5 >5 ,5 KB O* ,5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 )5 >5 >5 >5 >5 >5 >5 >5 >5 '5 >5 :] O) O) :] >5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 >5 >5 >5 >5 >5 >5 >5 >5 O* O* ,5 ,5 '5 >5 >5 }| ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ oh oh oh oh oh oh oh oh I$ I$ F{ F{ )_ )_ )_ x8 x8 )_ I$ Z% Z% I$ )_ x8 x8 x8 )_ )_ F{ I$ I$ I$ x8 x8 )_ )_ F{ I$ I$ Z% F{ F{ F{ F{ F{ F{ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 z<. Z x8 Y% z<.7}. Z cN cN #v #v #v cN cN x8 x8 Y% x8 O* O* Ds Ds Xl '5 ZY I$ T@ Z% Y% z<.)_ t& x8 x8 x8 x8 x8 x8 x8 x8 ({ ]_ Hs ]_ gA w8..Z s6 s6 s6 FR FR ig ig ig ig x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ F{ I$ I$ F{ )_ )_ F{ F{ )_ )_ x8 x8 Y% Y% Z% x8 x8 I$ F{ Z z<.x8 Z Y% x8 )_ F{ Z% t& t& F{ )_ x8 Y% Y% x8 )_ q} cN #v #v #v cN cN x8 x8 F{ F{ '5 '5 Xl Xl Xl Xl O) '5 )_ A% O( /&.~w.g, Z_.Z_.H7 H7 T6 dE M~.`G `[ {w. } P=.4e.Oi.]w.6}.^w./w.(w.z$._w.:w..R` :6.n5.o5.:R B}.r9.Q:.l+.|Z 4Z 4Z S` V` Q:.Q:.od.B}.EP {` 5v.c3.5v.l=.z].]-.j,.s(.+1.e3.{` ~_.78.78.78.j].~0.eb.El.l9.]f.bw.cw.8:.9, 1c Q 1* dw.ew.fw.gw.hw.iw.jw.kw.lw.mw.nw.ow.pw.D5.qw.rw.sw.tw.uw.vw.lv i6 Ia Zf e= *j 5z dN 5z %w 5z +Z dN dN dN dN dN dN dN :y qj F{ F{ F{ F{ F{ F{ F{ Z )_ Z% I$ x8 x8 F{ v$ i*.f>.f>.f>.i*.i*.i*.i*. / g7 cN cN cN q} Z% ,_ s6 Tt bc $| )5 oh )_ x8 7}.z<.;q.`Q 75.,b.,b.uJ s6 Ks Ks Ks s6 s6 x8 x8 F{ F{ qj qj :y :y :y qj qj F{ F{ F{ F{ F{ F{ F{ x8 x8 )_ )_ F{ I$ I$ I$ )_ )_ )_ F{ F{ F{ I$ I$ )_ )_ )_ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ I$ Z% T@ h+ [. Y% F{ t& Z% F{ )_ Z% h+ b, b, b, b, b, Xl Ds [].b, b, b, b, b, b, b, }| )5 ,_ ,_ E) &' &' L$ /= pg (= Y* z* I{ ww.[I b: E) ,_ t& t& t& :] :] :] K> b, b, 34 G7 N/.]n.Ds '5 F{ F{ F{ F{ F{ F{ F{ x8 x8 )_ )_ F{ I$ I$ a) c, d6.d6.d6.c, c, c, c, @% -) I$ F{ )_ )_ ", "a+ a+ K@ K@ K@ E# E# '$ '$ '$ '$ '$ '$ '$ '$ [# ;] ;] ;] ;] ;] ;] ;] M+ -] '@ -] ;] O_ ;] M+ dd dd dd dd dd dd dd dd g~ g~ g~ g~ g~ g~ g~ g~ g~ g~ g~ dd kC o} o} o} 7c E7 E7 g~ dd dd kC q2.xw.uv.xw.ee <| ^% ~@ ]& qr yw.zw.Aw.Bw.Cw.Dw.Ew.Fw.Gw.Hw.Iw.Jw.Kw.Lw.Mw.Nw.Ow.1~ Pw.t. #v <. 8 K+ 6c T$ >' K+ K+ ._ M_ 6c 6c ,' ,' ,' ,' 6c l:..h.@n @n @n .h..h..h..h.0' 8c 4c 5c 5c 4c Wl != 3c 8c 8c 8c 8c 8c 8c 8c 0' 0' 0' 0' 0' 0' 0' 0' T$ #% ,' 6c 6c ,' #% T$ #% #% #% !% ,' ,' 6c 9c ke Qw.Qw.ke ri 3c ]$ K) 2# t* p* iJ Z1 Rw.Sw.Tw.Uw.*l.t:.c'.8j._h (j ]j lt lt ro.ro.!8.>|.>|.Vw.Ww.Xw.Yw.>l.9'.~,.s-.3i.Zw.`w.pt `E x.Hn..x.-k I. +^ '] +x.3-.@x.#x.$x.6~.Hu.Iu.%x.zs.&x.$w.Mu.^s.*x.=x.Kr.Lr.-x.;x.>x.0n.,x.f,.fZ M-.SX % .dZ HU (H lD EE EE iD `F `F .j.zl.ji.6R SP 4H uI XM eO 3R NP dO *w.Ru.KP cO [p.cL aO Wq.Js.Sp.UM oI oI (d.2l.ne.|p.'x.t}.tf.Q,.)x.!x.~x.BY M_.{x.]x.^x.A=./x.66.][.U1.(x.4*._x.:x.!<.C8. 24 H{ H{ G{ 4{ 4{ 5! 24 H{ H{ G{ 5! 2{ 2{ 3{ C, C, C, C, C, C, C, C, C, C, C, C, C, C, C, C, H{ H{ G{ 4{ 4{ 5! 2{ 2{ G{ G{ G{ G{ G{ G{ G{ C, .* j$ j$ a# q$ q$ ,_ ,_ q$ j$ !. 8# q$ )5 )5 ,_ q$ a# 8# !. !. 8# a# q$ a# q$ ,_ )5 )5 ,_ q$ a# ui ui ui 5[ fd * * * YY ui .* m@ l& m@ 2% * F{ Z% h+ T@ I$ F{ Z% h+ x8 I$ t& t& Z% Z% T@ [. )5 )5 )5 )5 )5 )5 )5 )5 ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ sM sM oh ^_ ^_ )5 5[ 5[ Hs Hs Hs Hs |x.|x.|x.Hs Ds '5 }| :] :] }| '5 ,5 }| >5 >5 '5 ,5 ,5 O* O* '5 '5 '5 '5 '5 '5 '5 '5 }| >5 >5 '5 ,5 ,5 O* O* .Z oh ,_ )5 oh Is )5 a# oh oh ^_ ^_ ^_ ^_ )5 )5 >5 >5 >5 >5 >5 >5 >5 >5 ,5 '5 '5 >5 >5 }| }| :] :] }| }| >5 >5 '5 '5 ,5 O* O* ,5 ,5 '5 >5 >5 }| '5 '5 >5 }| >5 '5 O* ZY '5 '5 '5 '5 '5 '5 '5 '5 ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ oh oh oh oh oh oh oh oh F{ F{ F{ F{ F{ F{ F{ F{ I$ F{ )_ )_ F{ I$ t& h+ F{ F{ F{ )_ x8 Y% Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 )_ Y% Y% )_ Z% Z% x8 7}.x8 Z Y% Z% Z% x8 Z )_ Z% I$ F{ )_ )_ )_ )_ F{ Z Z Z Z Z Z Z 61.1x.e; #v g7 X[ cN Y% z<.z<. Z O* ,5 Ds [].)i.,v.O* x8 x8 x8 x8 x8 x8 x8 Z% I$ I$ F{ )_ )_ x8 x8 Hs Hs Hs Hs ti ti ^_ ^_ .Z Is ec sM ig 2x.ig [U x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 I$ I$ I$ I$ I$ I$ I$ I$ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ )_ x8 x8 Y% h*.h*.e; e; e; h*.h*.Y% Y% x8 x8 O* O* [].[].[].[].ll.`Y .Z 3x.h*.fc ';.yJ hc O=.]O kf.kf.`G .73.ic.T,.*4.VS F_.G_.*4.D@.|Z 1Z y].U` X` s(.j,.l4.Q:.ui._R 1q.3;.p$.h=.D}.`{.T*.S*.i=.k=.V*.|:.sx.tx.1:.2:.o[.ux.<-.vx.;1.5x wx.xx.*=.Q ]] yx.zx.$= Ax.Bx.Cx.Dx.Ex.Fx.Gx.nw.Hx.Ix.Jx.Kx.Lx.Mx.Nx.'k.Ox.9t Px.Qx.CB 9. &h *j 5z dN +Z +Z dN 5z dN dN dN dN dN dN dN :y %n )_ F{ I$ I$ Z% t& t& x8 x8 x8 x8 x8 x8 x8 cN -L xi f>.C* /&.i*.fc -L #v #v cN cN cN cN x8 s6 .Z Js Ks Ks Is Is F{ F{ x8 )_ a) *) r} q3 D, uJ .Z Js Js Js .Z .Z Y% Y% F{ F{ qj %n c, ,b.,b.}U %n t& T@ )_ Rx.Rx.F{ @. F{ F{ F{ F{ F{ F{ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 I$ )_ x8 Z Z x8 )_ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ x8 Z z<. Z x8 I$ t& T@ T@ t& t& Z% I$ I$ F{ C, K> 34 Xl Ds Ds Xl 34 34 [].)i.Xl C, J- K> KB O4 U# U# Sx.Tx.+2 P6 N=.U& Ux.+* }I Vx.Wx.+/ f>.[| w$ R@ k. cN F{ @. [. '5 >5 34 34 G7 |x.G7 34 >5 F{ F{ Z% T@ t& I$ x8 F{ F{ F{ F{ F{ F{ F{ qj '' %w dN d6.c, :y r} '' qj qj F{ F{ F{ F{ ", "a+ a+ K@ K@ E# E# E# '$ '$ '$ '$ '$ '$ '$ ._ ;] ;] ;] ;] ;] ;] ;] ;] M+ -] '@ -] ;] +_ O_ M+ dd dd dd dd dd dd dd dd g~ g~ g~ g~ g~ g~ g~ g~ dd dd dd dd kC kC kC kC g~ g~ g~ g~ g~ dd dd mf xw.au.Xx.ee '= ^% N+ ]& .b x- Yx.Zx.`x. y..y.+y.@y.#y.$y.%y.&y.*y.*g =y.-y.;y.>y.,y.'y.L( :l /. pj =5 ,' >' T$ ac =5 6c L_ L_ 6c 6c 6c 6c 6c l:..h.@n @n @n .h..h..h..h.0' 8c 4c 5c 5c 4c Wl != 3c 8c 8c 8c 8c 8c 8c 8c 0' 0' 0' 0' 0' 0' 0' 0' T$ #% ,' 6c 6c ,' #% T$ #% #% #% !% ,' ,' ,' 6c he )y.)y.he oj != ^$ ^$ .% 2# 0>.!y.p* qp.~y.{y.]y.^y.(.Dl.7..M-.M-.SX % .dZ -c.(H PX kD kD lD `F 7R TP .j.2H 6R SP @T 4H tI eO 3R NP NP dO +K hL hL Ht.bO UM Kt.6y.Js.Js.Wu.Xu.Kt.Wq.1../d.:.ge.Rt.by.fh Ss.3}.S_.cy.BJ '3.kA K/.!<.b@.}x.s` iA b# /. /. /. [. [. /. /. t& T@ h+ [. [. h+ T@ :] C, G{ G{ G{ 4{ 4{ 4{ 4{ 24 H{ G{ G{ 5! 5! 2{ 3{ C, C, C, C, C, C, C, C, C, C, C, C, C, C, C, C, G{ G{ 4{ 4{ 4{ 4{ 5! 5! G{ G{ G{ G{ G{ G{ G{ C, .* j$ j$ a# q$ q$ q$ ,_ oh ,_ a# a# ,_ )5 ,_ q$ q$ q$ j$ 8# 8# j$ q$ q$ a# q$ ,_ )5 )5 ,_ q$ a# 5[ 5[ 5[ 5[ fd fd fd fd ti ui * 2% U@ 2% .* * F{ t& h+ T@ I$ F{ Z% h+ F{ Z% t& t& I$ I$ t& h+ )5 )5 )5 )5 )5 )5 )5 )5 ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ hd hd )5 )5 ^_ ^_ ti ti Hs Hs Hs Hs |x.|x.|x.Hs Ds '5 }| :] :] }| '5 ,5 >5 >5 >5 >5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 :] }| }| }| >5 '5 '5 '5 s6 oh )5 ^_ Is s6 oh ,_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ >5 >5 >5 >5 >5 >5 >5 >5 '5 '5 '5 >5 >5 }| }| }| }| }| }| >5 '5 '5 '5 ,5 ,5 ,5 ,5 '5 '5 '5 '5 '5 '5 '5 >5 }| >5 '5 O* KB '5 '5 '5 '5 '5 '5 '5 '5 ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ oh oh oh oh oh oh oh oh F{ F{ F{ F{ F{ F{ F{ F{ Z% I$ F{ )_ )_ I$ Z% t& )_ )_ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ Y% Y% )_ I$ I$ x8 z<.x8 Z Y% Z% Z% x8 Z )_ I$ F{ )_ x8 x8 x8 x8 )_ Y% Y% Y% Y% Y% Y% Y% h*.61.e; #v g7 X[ cN Y% Z Z Y% ,5 '5 Xl Ds d7.ZY O* x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ )_ )_ )_ )_ ac ac ac ac 5[ 5[ ,_ ,_ .Z Is ec sM ig 2x.ig [U x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ )_ )_ )_ )_ X[ h*.e; e; e; h*.h*.Y% Y% x8 x8 O* O* [].[].[].[].Hs pj `Y c8 h*.i*.rj Z_.I7 V6 Jj.dy.&b.wS `l ey.sP P=.Jj.J7 fy.gy.hy.iy.jy.0m.Yn.ky.ly.my.ny.oy.u>.q/.py.sV p!.)).qy.Fs.ry.[:.sy.nx.ty.uy.lx.vy.r!.r!.r!.nx.wy.qx.xy.O8.73.ic.a3.E_.T,.T,.(6.k4.(%.I>.7n.I>.T` X` B}.e3.s(.B}.^Z d3.5v.'0.p$.Df./-.`{.D}./-.03.^-.wY >*.tx.p9.m[.ap..=.J}.+=.yy.zy.Ay.+Q +n '& Z! By.zx.$= Cy.Dy.Ey.Fy.Gy.Gy.Hy.Iy.Jy.Uk.Ky.Hc.Ly.3t.My.Ny.Oy.&m )r u#.CB 7. _* &h *j 5z dN +Z +Z dN 5z dN dN dN dN dN dN dN :y qj F{ F{ I$ I$ I$ I$ Z% x8 x8 x8 x8 x8 x8 x8 cN -L xi f>.C* /&.i*.fc / #v #v cN cN cN x8 x8 s6 .Z Js Ks Ks Is Is F{ F{ Y% x8 qj a) q3 :y c, }U .Z Js Js Js .Z .Z Y% Y% )_ )_ %n %n c, c, c, uJ %n I$ Z% )_ z<.z<.F{ h+ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ )_ x8 x8 )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ x8 Y% Z Z x8 I$ Z% t& t& Z% Z% Z% Z% I$ I$ :] b, Xl Ds Ds Ds Xl 34 [].Ds b, 4! 4! K> b, >5 sM /= E& := b: U& Py.xq.X/ be.Qy.{, ^2 Ry.Ni.n> t@ !O ', e, i; 5. :. T@ Z% }| }| .o ;b.;b.;b..o >5 F{ F{ I$ t& t& F{ x8 F{ F{ F{ F{ F{ F{ F{ qj '' *j 5z +Z D, q3 =) '' qj qj F{ F{ F{ F{ ", "a+ K@ K@ E# E# E# '$ '$ '$ '$ '$ '$ '$ '$ ._ ;] .A .A .A .A .A .A .A .A iu e@ iu q2.mf q2.vw dd dd dd dd dd dd dd dd dd dd dd dd dd dd dd dd up.up.up.up.J6 J6 J6 J6 J6 J6 J6 xn.xn.xn.xn.ee Xx.AW Sy.<| }# P ]& xq Ty.Uy.Vy.Wy.a0 Xy.Yy.Zy.`y. z..z.+z.@z.#z.$z.%z.&z.*z.=z.-z.;z.>z.,z.Z m@ {@ Q% ,% ^% i> U% a+ ^% ^% U% U% 9& Q% Q% l:..h.@n @n @n .h..h..h..h.0' 8c 4c 5c 5c 4c Wl != ri ke ke ke ke ke ke ke he he he he he he he 0' T$ l& i> Q% Q% i> l& {@ l& l& k+ k+ k+ i> i> ,' 2b 2b >_ >_ >_ )= *$ *$ 6# 7# s. <+ T+ V* 'z.r< )z.!z.a(.~z.[q F} _h v%.)i lt ],.7(.3Y {z.]z.^z./z./z.Ww.Ww.8(. m. m.79.(z.nt _z.z%.nq Ox i_.:z.Eb GH c 8 K. 9) .H-.K@.2z.;f.!d.3z.4z.{d.9q.0p.Ok.#j.a..8..8..8..D .iZ QX (H a<.Mo.a<.a<.FE 7R [W 5H TP 6R tI ){.){.SP ZM ZM eO Ft.Gt.vI D!.D!.aO Nh.Lt.=_.Xq.=_.5z.Qo.6z.7z.8z.GP %c.L` 9z.0z.az.nd.bz.K_.!x.!x.cz..v.dz.ez.fz.gz.,U hz.E/.ag.ag.8c.5 >5 }| }| >5 >5 '5 >5 >5 >5 >5 }| }| }| }| '5 '5 '5 '5 '5 '5 '5 '5 :] :] :] :] }| }| }| >5 Is oh ^_ oh s6 .Z s6 oh ,_ ,_ )5 ^_ ^_ oh Is Is >5 >5 >5 >5 >5 >5 >5 >5 '5 '5 '5 >5 >5 }| }| }| >5 >5 >5 >5 '5 '5 '5 ,5 '5 '5 '5 '5 '5 ,5 ,5 ,5 pj pj ti ti ti pj YY `Y ui ui ui ui ui ui ui ui ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ oh oh oh oh oh oh oh oh F{ F{ F{ F{ F{ F{ F{ F{ Z% I$ F{ F{ )_ F{ F{ I$ x8 x8 x8 x8 )_ )_ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 %n uJ }U %n qj qj uJ `Q %n }U }U a) a) }U `Q %n F{ )_ x8 Y% Y% Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 cN 61.e; #v #v cN cN Y% Z x8 )_ ,5 '5 Xl Ds Ds O* O* x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ )_ )_ F{ F{ F{ Hs Hs Hs Hs ti ti ^_ ^_ .Z Is ec sM ig 2x.ig [U x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% Y% Y% Y% Y% Y% Y% )_ )_ )_ )_ )_ F{ F{ q} cN #v #v #v cN cN x8 x8 x8 x8 O* O* [].[].[].[]..o ti YY FR h*./&.lz.nl.9}.P=.@s.LV e6.jA mz.nz.WV 4e.fy.oz.Kj.pz.qz.rz./{ #u.sz.^r.tz.uz.vz.wz.xz.S,.)*.^-.p/.yz.F!.zz.c..rx.x!.P8.Az.Bz.Cz.Dz.Bz.Ez.Fz.Gz.Hz.0;.c;.Iz.~2.Jz.Kz.Lz.Kz.Mz.Nz.e;.R*.2Z |Z 3Z T` T` l4.e3.+1.e3.b3.{` '0.p$.p$./@./-.8b.'*.@1.j5.r5.Oz.Fo.O>.='.Pz.Qz.m;.8).9).>'.Rz.1% Ol M% P( Sz.Tz.Uz.Vz.Wz.Of.Pg.Xz.Yz.Zz.((.`z.H6.0o.Hd. A.|(..A.i:.#m *,.MO +A.Os `% :* >k %w %w 5z dN +Z +Z dN 5z dN dN dN dN dN dN dN :y a) I$ I$ I$ F{ F{ F{ F{ x8 x8 x8 x8 x8 x8 x8 cN / fc i*./&.e; #v g7 q} cN cN x8 x8 x8 O* O* `Y .Z Js Ks Ks Is Is F{ F{ Y% x8 uJ %n D, c, c, }U s6 Ks Ks Ks s6 s6 x8 x8 x8 x8 uJ uJ D, D, D, %n %n )_ )_ )_ )_ )_ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ F{ I$ I$ I$ I$ F{ )_ )_ )_ )_ )_ )_ )_ )_ )_ q} X[ h*.61.h*.cN q} O( O( O( O( A% A% A% A% Z% '5 ,5 O* O* O* ,5 '5 >5 ,v.>5 +# +# :] '5 >5 T@ @A.bd.j; u. B* #A.$A.%A.^2 /> &A.p~ (< *A.=A.-A.q; ]D MB b' <@ C- <] u$ v$ t& 5[ 5[ ac si si ac >5 F{ )_ F{ Z% t& F{ x8 Z% Z% Z% Z% Z% Z% Z% *) =) %w dN +Z D, :y r} =) qj qj F{ F{ F{ F{ ", "K@ K@ E# E# E# '$ '$ '$ '$ '$ '$ '$ '$ '$ ._ ;] .A .A .A .A .A .A .A .A vw iu vw q2.mf q2..A dd dd dd dd dd dd dd dd dd dd dd dd dd dd dd dd lo.lo.lo.up.J6 xn.xn.xn.up.up.J6 J6 xn.je je ge }Q TO }Q '= u X% xq ;A.>A.,A.'A.)A.!A.~A.{A.]A.^A./A.PW (A._A.s-.:A.L<. 5A.{! m@ >% ,% Q% ,% ,% ,% ^% U% 9& Q% u& .h.@n @n @n .h..h..h..h.0' 8c 4c 5c 5c 4c Wl != ri ke ke ke ke ke ke ke he he he he he he he 0' T$ l& i> Q% Q% i> l& {@ k+ k+ k+ k+ k+ k+ i> ,' |% |% >_ )= )= `+ *$ *$ 7# 5$ 9! `f ;$ Q+ s* 4 .6A.+7.7A.a(..j *l.[k.,g >g vn O;.sN 3Y {z.J<.8A._y./z.Ww.9A.8(.,~.O;.lt ^h (j 0A.,g ;} aA.Fn.x1 8` bA.07 =k y+ ]# c@ cA.dA.eA.fA.1z.>` #>.9,.gA.hi.hA.iA.!d.3z.4z.jA.kA.Ok.#j.a..9..9..9..v+.iZ 1W CE Pp.FU &T Pp.pe.`F rI [W 6R 5H Vq.){.Vq.tI @T YM Qp.uI vI D!.}p.}p.}p.oe.lA.fh.mA.nA.mA.*_.oA.pA.qA.rA._..sA.9z.F_.nd.tA.mU uA.!x.vA.ay.OF 1X wA.xA.yA.>[.zA.AA.W/.6>.W'.6E >v.BA._].CA.5 >5 >5 >5 >5 >5 >5 '5 >5 >5 }| :] :] O) O) >5 >5 >5 >5 >5 >5 >5 >5 }| }| }| }| }| }| >5 >5 oh oh oh Is s6 .Z .Z .Z q$ q$ ,_ )5 oh Is s6 s6 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 '5 '5 '5 '5 '5 '5 '5 '5 }| >5 >5 '5 ,5 ,5 O* O* pj pj pj pj pj pj YY YY ui ui ui ui ui ui ui ui ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ oh oh oh oh oh oh oh oh F{ F{ F{ F{ F{ F{ F{ F{ Z% Z% I$ F{ )_ )_ )_ )_ Y% Y% Y% x8 )_ F{ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 %n uJ uJ %n %n %n uJ uJ a) }U }U a) qj `Q `Q %n )_ )_ Y% Z Z Z Y% Y% )_ )_ )_ )_ )_ )_ )_ X[ h*.e; e; #v cN h*.Y% Y% )_ F{ '5 '5 Xl Xl Xl ,5 O* x8 x8 x8 x8 x8 x8 x8 Y% Y% x8 x8 )_ F{ F{ I$ .s..s..s..s.gA gA .Z .Z .Z Is ec sM ig 2x.ig [U x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ Y% Y% Y% Y% Y% Y% Y% Y% Z Z Y% x8 x8 )_ F{ q} cN #v #v #v cN cN x8 x8 x8 x8 O* O* [].[].[].[].]_ ]_ YY s6 cN i*.zJ U; DA.4x.uk.EA.FA.GA.$Z lA QG Zt.HA.IA.JA.KA.LA.MA.NA.]e.OA.PA.QA.RA.SA.&-.TA.T:.V|.*4.p5.f3.]%.g&.UA.VA.WA.r6.XA.r!.YA.ZA.`A. B..B.+B.0;.0;.@B.c;.~2.{2.)).r5.#B.#B.x'.r5.T` 4Z s].3Z T` U` +1.j,.:%.N-.Y..-*.P%.Q%.p$.V*.S*.$B.%B.'*.|2.%B.@c.]{.6).7).&B.9k.S>.S>.S>.*B.<4 l:.,& B{ =B.-B.;B.>B.,B.'B.)B.!B.Pf.~B.{B.}_.0o.]B.^B./B.('.(B.{j._B.:B.hJ k 5z dN dN dN dN dN dN dN dN dN dN dN dN dN dN :y *) Z% I$ F{ F{ )_ x8 x8 x8 x8 x8 x8 x8 x8 x8 cN g7 fc #v #v #v cN X[ X[ x8 x8 x8 O* O* O* [].`Y .Z Js Ks Ks Is Is F{ F{ Y% Y% }U uJ c, ,b.,b.}U s6 Ks Ks Ks s6 s6 x8 x8 Y% Y% }U uJ D, :y :y qj %n Y% Y% )_ Z% Z% )_ z<.z<.z<.z<.z<.z<.z<.z<.z<.I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ )_ F{ Z% t& t& Z% F{ )_ )_ )_ )_ )_ )_ )_ )_ )_ q} X[ cN h*.h*.cN X[ q} X[ q} q} O( A% A% v$ v$ Y% Y% KB x8 O* )_ '5 I$ ZY Z% +# /. O) F{ >5 v$ ;. Vx.e/ g( !' [B.[_ X~ }B.[- |B.1B.2B.3B.4B.5B.'v.O=.#6 6B.t@ rj Q5 a. O; w$ q$ fd og si si og ^_ F{ x8 )_ I$ Z% F{ x8 Z% Z% Z% Z% Z% Z% Z% *) q3 dN +Z d6.c, D, :y q3 qj qj F{ F{ F{ F{ ", "K@ E# E# E# '$ '$ '$ '$ '$ '$ '$ '$ '$ '$ ._ ;] .A .A .A .A .A .A .A q2.vw iu vw mf ee mf .A dd dd dd dd dd dd dd dd kC kC kC kC kC kC kC kC lo.lo.lo.up.J6 xn.xn.xn.up.up.J6 J6 xn.je je 5c r2.I# J# u *+ N( xq c 7B.8B.d! 9B.0B.aB.bB.cB.dB.eB.fB.gB.hB.wT iB.jB.kB.lB.mB.nB.oB.pB.qB.q_ rB.sB.l& gA .* Q% Q% l& U% ^% ^% ,% ^% U% Q% u& .h.@n @n @n .h..h..h..h.0' 8c 4c 5c 5c 4c Wl != ri ke ke ke ke ke ke ke he he he he he he he 0' T$ l& i> Q% Q% i> l& {@ i> i> k+ k+ k+ k+ k+ k+ Y+ Y+ 3c Y+ Y+ Y+ ]$ &$ E. D. *. q. *. H G# 2@ 0 Fb Db tB.uB.+k vB.wB.}s Dw xB.7(.3Y {z.8A.8A._y._y._y.f1.d_.7(.],.lt [s 8p (k yB.@6.:j e .#@.F} 9u R= zB.F=..+ AB.c@ BB.CB.DB.EB.FB.GB.HB.)e.u1.IB.H!.JB.-'. c.H}.ap.U).Ef.L-.rY M@./6.=5.+$.QX 1W &T GU *T GU i,.FE rI G Zm.TP ){.Vq.sI Vq.Vq.Vq.3H .j.ji.zl.SM uj.oe.KB.Yu.@(.Wp.Wp.LB.MB.NB.OB.PB.QB.RB.SB.TB.UB.nd.8y.VB.K_.WB.0y.ay.XB.YB.ZB.l|.]x.;[.`B.oE C.qz.x,..C.L~.&w `0.v8.|I xF #v [| (& e. e. a. <] [* [* [* O; O; [* [* h+ 3{ S_ }4 }4 [4 W5 W5 Q6 Q6 Q6 W5 W5 W5 W5 [4 5! C, m* m* m* m* m* m* m* m* m* m* m* m* m* m* C, 2{ }4 [4 W5 W5 Q6 4z 4z Q6 Q6 Q6 Q6 Q6 Q6 Q6 G{ fd q$ a# a# a# a# a# a# ,_ a# 8# 8# q$ )5 )5 ,_ )5 )5 )5 )5 )5 )5 )5 )5 ,_ ,_ q$ q$ q$ q$ ,_ ,_ * * * fd 5[ ui ui ui * 5[ ti pj YY ti ui fd [. h+ T@ T@ T@ t& t& Z% T@ h+ [. T@ I$ )_ )_ F{ )5 )5 )5 )5 )5 )5 )5 )5 ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ cc cc ^_ )5 )5 ,_ 5[ 5[ Hs Hs Hs Hs |x.|x.|x.Hs 34 >5 >5 >5 >5 >5 >5 >5 '5 >5 >5 }| :] :] O) O) >5 >5 >5 >5 >5 >5 >5 >5 '5 '5 '5 '5 '5 '5 >5 >5 ^_ oh Is Is s6 s6 .Z O4 q$ q$ ,_ )5 oh Is s6 s6 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 ,5 ,5 ,5 ,5 '5 '5 '5 '5 }| >5 >5 '5 ,5 ,5 O* O* pj p] P9.P9.P9.p] p] p] C' C' C' C' C' C' C' C' ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ oh oh oh oh oh oh oh oh F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ F{ F{ )_ x8 Y% Y% Y% Y% x8 )_ F{ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 uJ D, D, c, c, c, D, D, r} c, ,b.:y :y 75.75.%n )_ )_ Y% Z Z Z Y% Y% )_ )_ )_ )_ )_ )_ )_ X[ cN e; e; e; h*.h*.Y% x8 F{ F{ '5 ,5 Ds Xl Xl '5 O* x8 x8 x8 x8 x8 x8 x8 Z Y% Y% x8 )_ )_ F{ F{ .s..s..s..s.gA gA .Z .Z .Z Is ec sM ig 2x.ig [U x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ Y% Y% Y% Y% Y% Y% Y% Y% z<.z<.z<. Z Y% Y% x8 cN X[ g7 g7 g7 X[ X[ )_ )_ x8 x8 O* O* [].[].[].[].uq.+C.`Y Is X[ fc hc O=.4].D|.@C.#C.J$.5].CS ]3.5*.$C.%C.E9.qz.&C.*C.O0.Qj.=C.M0.$t.-C.;C.&C >C.,C.R:.Q:.e3.U` X` D@.k+.${.2r.qx.B>.[:.h4.H>.'C.`A. B.)C.!C.0;.0;.b;.@B.6b.2b.#B.qy.UB.UB.x'.~C.W#.t].4Z 2Z U` m+.!_.A].l&.j,.-*.Df._a.78.Q%.wY k=.8b.%B.B0.%w.Ou.!0.{d.Qz.{C.]C.t1.n;.S>.n;.^C.1c w f .g /C.(C.Mg._C.:C.% >% '$ '$ '$ '$ '$ '$ '$ ._ ;] .A .A .A .A .A .A .A q2..A vw .A mf ee mf q2.dd dd dd dd dd dd dd dd kC kC kC kC kC kC kC kC up.up.up.up.J6 J6 J6 J6 J6 J6 J6 xn.xn.xn.xn.<| J# J M *+ g+ j3 ;A. c lC.mC.nC.oC.pC.qC.rC.sC.tC.uC.vC.wC.xC.yC.zC.AC.BC.CC.DC.EC.FC.V;.GC.HC.u7 6^ IC.JC.E# U@ m@ ^% i> Q% U% ^% ^% U% 9& u& .h.@n @n @n .h..h..h..h.0' 8c 4c 5c 5c 4c Wl != ri ke ke ke ke ke ke ke he he he he he he he 0' T$ l& i> Q% Q% i> l& {@ i> i> i> k+ k+ k+ l& l& U U U U U V ^& ^& D. ^& I I H H J !s KC.LC.MC.Fa NC.OC.PC.'g lo Uc.QC.~8.d_.f1.^z.^z._y.f1.f1.%7.7(.IW pN c .Dw +@.7p um RC.RC./B 6$.SC._j TC.UC.VC.F=.3# qa.WC.XC.YC.ZC.PA `C. D.bw.}-.&B.IB.H!.7).-'.3:.H}.p&.r'.a~.;>.@$.L-./6.*5.-c.QX GU .D.+D.*T kO lI [W rI G 5H Vq.tI tI ){.5H 5H TP K pI .G DU D.C(.CY ,D.DY 'D.)D.!D.~D.{D.]D.{c..C.XQ Wt z% vM #v #v !_ :+ f. a. <] (& [* O; O; O; O; [* 5. 5! [4 [4 [4 W5 W5 W5 W5 W5 W5 W5 W5 W5 W5 W5 4{ C, m* m* m* m* m* m* m* m* m* m* m* m* m* m* C, 5! [4 W5 W5 W5 W5 Q6 Q6 Q6 Q6 Q6 Q6 Q6 Q6 Q6 G{ fd q$ q$ a# a# a# j$ j$ a# 8# !. 8# q$ )5 )5 ,_ ,_ ,_ )5 ^_ ^_ )5 ,_ ,_ )5 ,_ q$ a# a# q$ ,_ )5 fd fd fd fd 5[ 5[ 5[ 5[ fd 5[ ti pj pj ui 5[ * +. [. T@ T@ h+ T@ t& I$ T@ h+ [. T@ I$ )_ )_ I$ )5 )5 )5 )5 )5 )5 )5 )5 ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ FR sM Is oh ^_ )5 5[ 5[ Hs Hs Hs Hs |x.|x.|x.Hs b, >5 >5 '5 '5 >5 >5 }| >5 >5 >5 >5 }| }| }| }| }| }| }| }| }| }| }| }| ,5 ,5 ,5 ,5 '5 '5 '5 >5 ^_ oh s6 Is oh oh Is .Z ,_ ,_ )5 ^_ ^_ oh Is Is >5 >5 >5 >5 >5 >5 >5 >5 }| }| }| >5 >5 '5 '5 '5 O* O* ,5 ,5 ,5 '5 '5 '5 '5 '5 '5 '5 '5 ,5 ,5 YY pj P9.P9.P9.P9.p] _y C' C' C' C' C' C' C' C' C' ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ oh oh oh oh oh oh oh oh F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ F{ F{ F{ )_ x8 Y% x8 x8 x8 x8 )_ )_ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 c, D, :y c, ,b.,b.D, q3 =) D, c, :y D, ^D.^D.%n qj )_ x8 Y% Y% Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 cN cN #v e; +s.61.h*.x8 x8 F{ )_ ,5 O* [].Ds Ds '5 O* x8 x8 x8 x8 x8 x8 x8 Y% Y% Y% x8 x8 x8 x8 )_ ]_ ]_ ]_ ]_ pj pj oh oh .Z Is ec sM ig 2x.ig [U x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 I$ I$ I$ I$ I$ I$ I$ I$ )_ )_ )_ )_ )_ )_ )_ )_ Z Z Z Z Y% Y% Y% h*.X[ g7 g7 g7 X[ X[ )_ )_ x8 x8 O* O* [].[].[].ll./D.(D.ll.Is q} -L O> V6 _D.uk.~;.D^.6U :D.DS .n;.cD.dD.6& !] Mb {9 eD.<- fD.gD.Pg.hD.Rg.iD.Ce.Ce.A4.x;.jD.kD.lD.mD.`}.nD.oD.pD.qD.N# _$ s+ b& :$ e, C- V$.d6.+Z dN dN dN +Z +Z dN dN dN dN dN dN dN :y qj F{ )_ )_ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 h*.cN X[ F{ F{ )_ O* KB O* [].[].[].Y1.Y1.Y1.ll.gA Js Ks Ks Is Is F{ F{ )_ x8 uJ }U ,b.c, c, %n Is Tt Tt Tt Is Is )_ )_ x8 x8 uJ uJ D, D, D, %n uJ Z Z x8 I$ I$ x8 7}.I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ F{ I$ I$ I$ I$ F{ )_ x8 x8 x8 x8 x8 x8 x8 cN X[ g7 g7 g7 #v #v #v #v / / / / / [| [| [| h*.cN X[ q} q} q} X[ X[ w$ A% q} X[ q} O( O( -L rD.ne sD.tD.uD.Wa vD.wD.xD.yD.zD.AD.BD.CD.DD.ED.FD.GD.0{ HD.L7 Eh.__ Vx.c/ I{ P6 F- U0 $| lP _y )5 )_ Y% Y% )_ F{ F{ )_ Z% Z% Z% Z% Z% Z% Z% *) ,b.V$.V$.V$.,b.,b.,b.,b.qj qj F{ F{ F{ F{ ", "E# E# '$ '$ >% >% >% '$ '$ '$ '$ '$ '$ '$ ._ ;] .A .A .A .A .A .A .A mf .A vw .A ee fe ee q2.dd dd dd dd dd dd dd dd o} o} o} o} o} o} o} o} J6 J6 J6 J6 up.up.up.up.xn.xn.xn.xn.xn.J6 J6 +_ J# ;k Q@ g+ g+ j3 ;A. c ID.JD.KD.LD.pC.MD.ND.OD.PD.QD.RD.SD.TD.UD.VD.WD.XD.YD.ZD.`D. E..E./~.:a C6 m{ a< +E.=6.l& ti U@ {@ l& Q% U% ^% U% 9& R% .h.@n @n @n .h..h..h..h.0' 8c 4c 5c 5c 4c Wl != ri ke ke ke ke ke ke ke he he he he he he he 0' T$ l& i> Q% Q% i> l& {@ Q% i> i> i> k+ l& l& l& i+ i+ i+ i+ i+ i+ i+ . &. S ;+ ,. &. &. S N* XY ~s @E.vr.#E.$E.0u %E.xn &E.*E.=E.-E.>|.;E.;E.>E.;|.%7.%7.%7. P IW Gm./F ,E.+@.,#.LH LH u%.LH )i 'E.)E.!E.~E.{E.]E.H& ^E./E.(E._E.:E..;>.rY =5.^@.HU .D..D.+D.+D.mI kO UP Ym.qI Zm.SP dL gO Vq.TP GE GE 7R kD lD PX 1E.2E.hD 3E.#n.Xp.4E.5E.6<.43.6E.7E.v!.8E.9E.0E.aE.bE.cE.dE.;D.eE.4g.4g.fE.gE.hE.v/.7S CY iE.5D jE.kE.D/.q^.~].#b.lE.rr e7 o. <] +s.Ys. / [* (& [* (& [* O; <] <] O; [* 5. G{ Q6 Q6 Q6 W5 W5 W5 W5 W5 W5 W5 W5 W5 W5 W5 4{ C, m* m* m* m* m* m* m* m* m* m* m* m* m* m* C, G{ Q6 W5 W5 W5 W5 [4 [4 Q6 Q6 Q6 Q6 Q6 Q6 Q6 G{ 5[ q$ q$ q$ a# j$ j$ j$ )5 q$ j$ j$ q$ )5 ,_ q$ a# q$ )5 ^_ ^_ )5 q$ a# )5 ,_ q$ a# a# q$ ,_ )5 5[ 5[ 5[ 5[ fd fd fd fd ui ui ui ui 5[ fd * .* @. [. T@ T@ h+ h+ t& F{ t& T@ h+ T@ I$ )_ F{ Z% )5 )5 )5 )5 )5 )5 )5 )5 ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ sM sM Is Is oh oh pj pj Hs Hs Hs Hs |x.|x.|x.Hs K> }| '5 ,5 ,5 '5 }| :] >5 >5 >5 >5 '5 '5 '5 '5 }| }| }| }| }| }| }| }| ,5 '5 '5 '5 >5 }| }| }| ^_ Is s6 Is )5 ,_ ^_ Is ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ >5 >5 >5 >5 >5 >5 >5 >5 }| }| }| >5 >5 '5 '5 '5 KB O* O* O* ,5 '5 '5 '5 ,5 ,5 ,5 '5 '5 '5 '5 pj pj P9.9e.9e.9e.p] C' og p] p] p] p] p] p] p] p] ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ oh oh oh oh oh oh oh oh F{ F{ F{ F{ F{ F{ F{ F{ Z Y% )_ F{ F{ F{ )_ x8 )_ )_ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 c, :y :y c, 75.75.D, r} '' :y c, D, c, ^D.^D.%n a) F{ )_ x8 x8 x8 x8 )_ Y% Y% Y% Y% Y% Y% Y% h*.X[ #v e; +s.61.h*.x8 )_ F{ )_ KB ZY )i.d7.Ds '5 O* x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% Y% Y% Hs Hs Hs Hs ti ti ^_ ^_ .Z Is ec sM ig 2x.ig [U x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ x8 x8 cN q} / / / q} q} F{ F{ x8 x8 O* O* [].[].[].ll.P~ +C.({ oh / xi m> mE.`1.^n.nE.X=.lX oE.a7.pE.qE.rE.sE.tE.^w 0x.uE./*. (.vE.{H 3g.&n.wE.`u.78.xE.IU jZ 9h.ne./d.Q*.V` l+.m+.{-.P*.yE.!).zE.X8.Fz.AE.+B.BE.CE.DE.DE.CE.EE.q!.n~.@1..].)).FE.UB.Y#.2Z 2Z y].[..<..l4.z].m&.A].-*.-*.Q%.78.58.(-.E}.Es.Ou.=x.5y.GE.;f.iA.9k.9k.9k.9k.n;.HE.IE.JE.($ G+.KE.LE.ME.#g NE.OE.PE.Xz.Rg.+i.y3.hn.d:.QE.RE.SE.TE.UE.VE.WE.XE.YE.ZE.nJ bN #& '' c# ', Gs `E.V$.+Z dN 5z dN +Z +Z dN dN dN dN dN dN dN :y uJ x8 x8 )_ )_ )_ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 Y% x8 )_ '5 '5 ,5 [].d7.[].Y1.Y1.Y1.tq.tq.tq. F.gA Js Ks Ks Is Is F{ F{ I$ F{ uJ }U ,b.c, :y a) oh bc bc bc oh oh F{ F{ )_ )_ %n %n c, c, c, uJ uJ Y% Y% x8 )_ )_ Y% Z I$ I$ I$ I$ I$ I$ I$ I$ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ )_ x8 x8 )_ F{ F{ Y% Y% Y% Y% Y% Y% Y% h*.X[ g7 / g7 g7 #v e; +s.[| [| / / / / g7 g7 g7 / [| !_ !_ [| g7 #v !_ <] !_ #v .F.>p.g7 {; +F.o~ @F.#F.[< $F.%F.&F.*F.=F.-F.;F.>F.,F.'F.)F.!F.1= ~F.C^.u: L7 {F.x] d/ |* (= pg dc |U g{.Tt )5 )_ Z Z x8 F{ F{ )_ F{ F{ F{ F{ F{ F{ F{ qj c, +Z +Z dN :y D, D, c, qj qj F{ F{ F{ F{ ", "E# '$ '$ '$ >% >% >% '$ '$ '$ '$ '$ '$ '$ ._ ;] .A .A .A .A .A .A .A mf .A A )B Sy.BW Sy.q2.dd dd dd dd dd dd dd dd o} o} o} o} o} o} o} o} xn.xn.xn.J6 up.lo.lo.lo.ie je je xn.J6 !B up.kC J# M Q@ g+ j3 >- eu.wv.]F.^F./F.(F._F.:F. Q% Q% i> l& {@ Q% Q% i> i> k+ l& l& l& h. h. h. h. h. h. Z Z &. &. =. '. +% +% =. S S O@ 2@ j` Yf fF.R= gF.hF.^q %|.F<.iF.Vv.!8.%7. P P IW IW IW Gm.c .c .-l./k ~h um XL tC 'f %|.^h 'E.N[..+=.Qa.NE g<.ME se.{g.x+.$ .f,.+[..D.B_.+D.z_.uF.3..UP !>.{}.E@.dL 7Z eL 5H |H zf.7R nI ZF &T .D.+D..CF.T#.DF.;W EF.FF.K_.3S GF.XB.HF.ge.pE KF s>.n6.IF.{v.'b.}+.v8 :+ Ys.=; .F. / e, a. a. [* O; <] V5 P6 /= 4. {_ l.)c 4z JF.W5 W5 [4 W5 W5 W5 W5 W5 W5 W5 4{ C, m* m* m* m* m* m* m* m* m* m* m* m* m* m* C, H{ 4z Q6 W5 W5 [4 }4 }4 Q6 Q6 Q6 Q6 Q6 Q6 Q6 G{ 5[ ,_ q$ q$ a# j$ j$ j$ s6 ^_ ,_ q$ ,_ )5 ,_ a# a# q$ ,_ )5 )5 ,_ q$ a# )5 ,_ q$ a# a# q$ ,_ )5 ui ui }| 5[ O) * m* * '5 ti }| 5[ m* * .# .# .. /. s% T@ [. [. t& F{ Z% T@ h+ t& I$ oh I$ t& Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ I$ I$ I$ I$ I$ I$ ^_ oh oh Is s6 .Z gA w8.Hs Hs Hs Hs Hs Hs |x.Hs :] }| '5 ,5 ,5 '5 }| :] }| >5 >5 '5 ,5 ,5 O* O* }| }| }| }| }| }| }| }| '5 >5 >5 }| :] :] O) O) ti Is gA Is 5[ a# 5[ ^_ pj oh ti ^_ ti ^_ ui ui >5 >5 >5 >5 >5 >5 >5 >5 :] }| }| >5 >5 '5 '5 ,5 KB KB O* O* ,5 ,5 '5 '5 O* O* ,5 ,5 '5 >5 >5 }| pj P9.`Y 9e.`Y p] ui og pj p] pj p] pj p] pj pj ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ oh oh oh oh oh oh oh oh F{ F{ F{ F{ F{ F{ F{ F{ z<. Z x8 F{ I$ F{ )_ )_ F{ F{ F{ )_ x8 Y% Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 uJ qj :y uJ ^D.;q.D, -) =- qj c, %n c, g*.^D.%n Z% I$ F{ )_ )_ )_ )_ F{ Z Z Z Z Z Z Z 61.X[ #v e; Ys.1x.h*.x8 )_ )_ x8 ZY ,v.d> )i.[].,5 O* x8 x8 x8 x8 x8 x8 x8 )_ )_ x8 x8 Y% Z Z z<.`Y `Y ll.`Y `Y `Y s6 s6 .Z Is ec sM FR 2x.FR ec FR s6 x8 x8 x8 x8 x8 x8 Y% Y% Y% Y% Y% Y% }U Y% Z Z Z Z Z Z Z Z )_ )_ )_ )_ )_ )_ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ t& t& Z% I$ I$ F{ )_ )_ q} q} q} q} q} q} F{ F{ x8 x8 x8 x8 O* O* O* O* Is Is q} [| X$.,<.#6 KF.LF.MF.64.NF.OF.PF.QF.RF.SF..b.+&.0x.TF.nk.=C.UF.VF.WF.XF.2L fI DP 3;.YF.O@.4W )s.6n.xl.<:.:..-(.Q*.R` :..ZF.7n.YA.|q.G>.!C.`F. G. B..G.+G.Iz.CE.7b.q!.n~.@1.UB.Mz.@G.)).F!.c<.3Z ZF.X#.g&.N-.T*.`^.S*.[o.)*.p$.tx.j].$c.>4.#G.iA.hA.;f.iA.$G.%G.&G.&G.*G.=G.-G.;G.>G.,G.(] `a 'G.)G.!G.wZ ~'.~G.9{.{G.]1.x3.]G.^G.-k./G.Lc.(G._G.:G.6 8G.9G.0G.aG.bG.cG.dG.eG.fG.gG.hG.iG.jG.kG.Uz.X~ lG.mG.nG.g( [I := pg WG g{.hf.9e.)5 )_ Z Z x8 F{ F{ )_ F{ F{ F{ F{ F{ F{ F{ qj :y q3 q3 r} r} a) q3 qj qj qj F{ F{ F{ F{ ", "E# '$ '$ '$ >% >% >% ^% ,% ,% >% '$ E# K@ _# )@ @^ ;] O_ O_ ;] I@ ,@ N_ N_ SO SO SO SO SO N_ ;] o} kC kC dd dd g~ g~ o} o} kC kC dd dd dd g~ mf ee ge nf nf ge xn.J6 oG.sk RD RD !B Rl tk N6 M+ R# R f$ pG.qG.rG.sG.!^ V2 tG.uG.vG.wG.xG.yG.zG.AG.BG.CG.CG.DG.EG.FG.GG.HG.IG.JG.KG.LG.MG.NG. .n Y6.ce QG.Pl 1% 1% Rl kb.Mv.RG.SG.TG.UG.VG.UN WG.Ul XG.Ul YG.AW YG.Ul Ul Ul Ul Ul Ul Ul Ul ~= `+ l& l& l& l& l& l& l& k+ k+ k+ k+ k+ k+ k+ k+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ Y+ C H# }$ 4@ 'F Yd ZG..6.>} am %} /q tn Uc.[T xa.C..y2.y2.D..tm 6l 6l :q /h 79.s-.s-.h1.6Y Hm.^j 8p `G.7'.]h. H..H.+H.@H.#H.$H.jC %H.&H.*H.r[.=H.-H.;H.>H.k<.,H.,H.J!.R>.8r.G}.E].<%.'H.)H.4..F@.&'.B_.rc.G@./a.W{.rc.V{./a.E@.)_.!>.w'.Y` q(.EE }W iD ZF &T Pp.FU uF.pe.7R pI me.me.Al.uf.SM =w.9O !H.~H.{H.]H.^H.h+./H.(H.x>.n5.VS ]7._H._H.w>.:H.:H.3L mU 5 $& m* [] :] d7 }| !5 !5 *) *) r} *) *) *) Z% Z% h+ h+ q$ q$ ,_ (* )5 )5 %n a) -) *) qj %n a) *) uJ uJ %n %n qj a) a) *) Z% }| }| }| }| }| }| }| }| :] O) }| '5 O* Ds '5 ti ti ti YY `Y YY 5[ 2% fd fd 5[ 5[ ui ti ti ti I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ '5 pj pj ]_ pj ]_ pj ]_ pj ({ YY ]_ ti Hs pj ({ YY >5 I$ F{ F{ F{ )_ )_ )_ F{ I$ I$ Z% Z% I$ I$ F{ Z% )_ Y% x8 I$ Z% F{ x8 I$ I$ F{ F{ F{ )_ )_ )_ t& )5 F{ Is )_ oh Z% ,_ Z% oh )_ s6 x8 Is F{ Z% I$ )_ x8 )_ I$ I$ F{ x8 x8 x8 )_ )_ F{ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ 7}.z<.z<. Z Z Y% Y% x8 T@ Z% F{ )_ )_ F{ Z% T@ I$ F{ )_ )_ )_ )_ F{ I$ Y% Y% uJ x8 %n )_ qj F{ uJ x8 uJ x8 %n )_ %n )_ x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ )_ x8 Y% Y% h*.p.Ys.+s.61.h*.x8 x8 x8 x8 O* O* [].[].[].O* KB Y% x8 x8 x8 x8 Y% Y% )_ Y% z<. Z x8 )_ x8 Z s6 s6 `Y s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 FR s6 FR FR tJ FR FR FR FR cN cN 1x.h*.k@.cT cT k@.E- bE )_ x8 Z z<.z<. Z x8 )_ t& Z% Z% F{ )_ x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ I$ Z% Z% I$ )_ x8 %n %n %n %n %n %n %n %n k@.cT DR DR Fs DR ER P~.rj ><.,<.1+.m*.tP 4e.A,.@o.M9.fH.35.gH.hH.iH.Yt |m.3D.UF.jH.kH.FQ WF.QF lH.RS mH.mH.%_.*5.d,.'(. $.x7.[g.Fk.f+.Mh.$[.<:.nH.`` .o7.T*.|2.k=.~{.q9.M>.sH.j;.o9.p9.:-.m[.,f. c.tH.uH.vH.wH.xH.yH.zH.AH.BH.BH.CH.DH.EH.+e FH.GH.HH._ .+V IH.2_. ,.JH.-k.KH.=d LH.MH.NH.OH.PH.QH.RH.SH.TH.qM bN `f B8.d6.`E.'b.&o.[+.qj %n }U `Q `Q uJ %n a) %n %n uJ uJ }U `Q `Q ;q.F{ I$ t& Z% F{ )_ I$ t& I$ I$ F{ F{ )_ )_ )_ )_ cN cN X[ X[ cN Y% z<.,v.O* O* O* [].[].[].Y1.[].,5 )_ )_ )_ )_ %n %n %n ;q.a) `Q g*.a) uJ UH.F{ Is Tt bc Ma ^_ oh )_ )_ F{ F{ %n %n c, c, ,b.}U cT X[ X[ X[ X[ X[ X[ X[ X[ cN h*.61.h*.X[ O( A% Y% Y% x8 x8 )_ )_ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 q} / q} g7 cN e; h*.e; A% [| O( / X[ g7 cN #v 61 ZQ 2x.ZQ V5 /= E) ec hd ec x8 x8 F{ I$ F{ cT X_.nP pP vk.@s.S=.o*.8[ 8[ VH.WH.XH.YH.ZH.#h.0e `H. I.7f .I.+I.px @I.#I.ks $I.%I.U! &I.*I.=I.-I.;I.>I.7G.,I.@: 'I.V; )I.g( !I.:= j*.Js p] ~I.8' pj F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ }U uJ %n qj qj )_ uJ Y% t& t& Z% Z% I$ F{ ", "E# '$ '$ '$ >% >% >% E# E# '$ '$ '$ >% >% >% @^ f^ ;] O_ O_ ;] /Y I@ SO SO SO SO {I.{I.{I.SO ;] o} kC kC dd dd g~ g~ kC kC dd dd dd g~ g~ g~ zW Sy.fe ge ge fe xn.J6 oG.sk RD RD Pl Rl Rl sk 4c [# }# V% 8* ]I.^I./I.(I._I.:I..JB./s.3y.,(.z+.RI.o/.+j.& ./a.qc./a./a.qc.)>.)>.cb.^a.w].rc.Y{.y]./%.a<.|W Mo.&T &T Mo.FE pe.5H K .j..j.@T ){.@T Qp.SI.TI.UI.VI.WI.XI.{H.YI.ZI.`I. J..J.+J.V#.J.>J.,J.,J.'J.'J.dH.)c W5 [4 [4 W5 eH.;5 C, m* m* m* m* m* m* m* .# .# m* m* m* O) O) 4! G7 R6 X5 Q6 Q6 Q6 4z X5 X5 X5 4z Q6 Q6 4z X5 24 5[ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ti ti ti ui 5[ 5[ 5[ fd ui 5[ 5[ ui pj ti fd .* m* !5 hu d7 b) $& [] hu b) b) [] !5 d7 d7 !5 !5 r} r} r} r} *) *) Z% Z% h+ T@ q$ q$ (* $| $| )5 qj r} =) r} q3 :y q3 =) D, D, :y :y :y :y q3 a) }| }| }| }| }| }| }| }| ,5 >5 }| }| '5 '5 >5 :] pj pj pj `Y gA `Y ui .* 5[ 5[ 5[ ui ui ti ti ti I$ I$ I$ I$ I$ I$ I$ I$ x8 x8 x8 x8 x8 x8 x8 x8 ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ({ ]_ ]_ ]_ ]_ ]_ ]_ YY >5 I$ F{ F{ F{ )_ )_ )_ F{ I$ I$ Z% Z% I$ I$ F{ Z% )_ Y% x8 I$ Z% F{ x8 I$ I$ F{ F{ F{ )_ )_ )_ t& Z% F{ )_ )_ F{ Z% t& I$ F{ )_ x8 x8 )_ F{ I$ I$ )_ x8 )_ I$ I$ F{ x8 x8 )_ )_ )_ F{ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ Y% Y% Y% x8 )_ )_ )_ F{ F{ F{ I$ I$ I$ I$ F{ F{ F{ )_ )_ x8 x8 )_ )_ F{ Y% Y% x8 x8 )_ )_ F{ F{ )_ )_ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 I$ F{ F{ F{ F{ )_ )_ X[ 1x.+s.+s.+s.61.h*.Y% Y% x8 x8 O* O* [].[].[].O* '5 x8 Y% z<.z<.Y% x8 F{ )_ x8 Z Y% )_ F{ x8 Z s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 tJ tJ tJ tJ FR FR cN cN 61.h*.k@.cT }+.[+.E- )J.%n x8 x8 Y% Y% x8 x8 )_ I$ I$ F{ )_ )_ x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 Y% x8 F{ I$ I$ F{ x8 Y% dt dt dt dt %n %n %n %n 51.51.xF ER vM ER P~.!J.U| ~J.pe U| P=.DA.V0.`r.$).[4.{J.]J./3.^J.p@.{c.cl./J.(J./f._J.:J.Sn.gI yj.yj.,s.vl. eJ.(2 fJ.X>.i).+V gJ.hJ.Ol.;=.iJ.jJ.yn f[ J] kJ.lJ.mJ.nJ.oJ.pJ.qJ.6! 0T R) *h 5z d6.&o.&o.zq }+.a) F{ )_ x8 x8 x8 )_ )_ )_ )_ x8 x8 x8 x8 Y% Y% )_ F{ Z% I$ )_ x8 F{ Z% I$ I$ F{ F{ )_ )_ )_ cN cN #v #v g7 cN h*. Z z<.x8 x8 O* O* [].[].[].O* F;.uJ uJ uJ uJ uJ uJ uJ ;q.a) `Q g*.a) uJ UH.F{ s6 Tt Tt bc oh Is )_ x8 F{ F{ %n %n c, c, ,b.}U k@.cN cN cN cN cN cN cN X[ cN cN h*.cN X[ X[ q} Y% Y% x8 x8 )_ )_ F{ F{ x8 x8 x8 x8 x8 x8 x8 cN X[ g7 g7 g7 #v #v #v #v / / / / / g7 g7 g7 [| ZQ #v ZQ 61 P6 hd ec )5 oh x8 )_ I$ Z% >5 DR 2U Hi. m n>.nE.rJ.sJ.Y$.tJ.uJ.vJ.wJ.xJ.8` Ft yJ.Zv Xu zJ.AJ.BJ.BJ.n8 CJ.CJ.DJ.EJ.FJ.L5 GJ.HJ.ts IJ.JJ.KJ.LJ.0r.MJ.Q2 NJ.W/ B* b: FR Ks Es 8H.OJ.'5 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ x8 )_ F{ I$ I$ F{ )_ x8 x8 x8 x8 x8 x8 )_ ", "E# '$ '$ '$ >% >% >% 6+ a+ K@ E# >% ^% U% 9& f^ f^ ;] O_ O_ ;] /Y /Y SO SO SO SO {I.{I.{I.SO ;] o} kC kC dd dd g~ g~ dd dd g~ g~ E7 E7 E7 E7 'B zW ee ee ee ee J6 up.uk sk lC lC Ql Rl Rl !B &) 2 p k* 8* PJ.QJ.b! RJ.R7 SJ.TJ.UJ.VJ.WJ.1I.XJ.YJ.ZJ.`J.FG.FG.FG. K.HG..K.+K.@K.#K.$K.%K.NG.&K.*K.:1 =K.-K.;K.Xj >K.,K.+[ P% %& a- [$ K) ,+ d( @n @n Lv.d( vk :j.R_ 'K.'K.)K.!K.~K.{K.]K.^K./K.wk o wk YG.BW YG.(K.Vl (K.Vl (K.Vl (K.Vl Wl Z+ k+ k+ k+ k+ k+ k+ k+ l& l& l& l& l& l& l& l& ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ $% $% @ {+ D. O@ 3@ VO _K.:K.Ex Uf (s 2/.)f &J @.MZ .)>.n/.Cf.w'.n/.rc.w]./%..D.1W GU +D.GU kD 1H 1H TP K 3H TP tI tI sI @T cK.dK.eK.fK.-_.-_.fh.Ks.YI.gK.i+.hK..D~.E~.1}.pK.qK.j; K, ZG :U h` Y_.N9.~O @6 u. +* rK.sK.tK.v% bf.uK.vK.vK.uK.bf.bf.X5 4z W5 [4 [4 W5 4z 24 C, m* m* m* m* m* m* m* .# .# m* m* m* O) O) 4! G7 R6 X5 4z Q6 Q6 4z 4z X5 4z 4z Q6 Q6 4z 4z 24 5[ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ti ti ui ui ui 5[ 5[ 5[ pj ti ui ti pj ti 5[ .* O) :] >5 }| O) O) :] }| m* O) :] }| }| }| }| !5 r} r} r} r} *) *) Z% Z% T@ T@ ,_ ,_ (* $| $| )5 I$ -) s% -) a) qj *) s% a) a) a) qj qj qj qj qj }| }| }| }| }| }| }| }| KB ,5 >5 }| '5 >5 :] m* YY pj pj `Y w8.gA ti fd 5[ ui ui ui ti ti ti ti I$ I$ I$ I$ I$ I$ I$ I$ x8 x8 x8 x8 x8 x8 x8 x8 ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ pj >5 I$ F{ F{ F{ )_ )_ )_ F{ I$ I$ Z% Z% I$ I$ F{ I$ )_ x8 )_ I$ I$ F{ x8 I$ I$ F{ F{ F{ )_ )_ )_ Z% I$ I$ F{ F{ I$ I$ Z% I$ F{ )_ )_ )_ )_ F{ I$ I$ )_ x8 )_ I$ I$ F{ x8 )_ )_ )_ F{ F{ F{ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ )_ F{ F{ F{ I$ I$ I$ I$ Z x8 F{ Z% Z% F{ x8 Z )_ x8 x8 Y% Y% x8 x8 )_ Y% Y% x8 x8 )_ )_ F{ F{ F{ F{ F{ )_ x8 Y% Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ I$ I$ I$ O( h*.e; e; e; 61.61. Z Z x8 x8 O* O* [].[].[].O* }| )_ Z 7}.7}. Z )_ Z% I$ )_ Y% x8 F{ I$ )_ x8 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 Ks Ks Ks Ks s6 s6 x8 x8 Z Y% uJ uJ c, c, ,b.`Q uJ )_ )_ F{ F{ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 Y% x8 x8 x8 x8 x8 x8 x8 x8 Y% x8 x8 )_ )_ x8 x8 Y% dt dt dt dt %n %n %n %n bE )J.dT xF ER ER P~.!J.K7 _< VH.v} DA.wK.Zr.U0.xK.BJ c>.9z yK.ur Rs zK.AK./J.BK.CK.DK.EK.FK.gI GK.hI .1.,s.E0.HK.hh.v7.jk.ih.IK.iI Mh.QM $[.$[.;{.JK.A!.|).Z` Z` OX KK.WA..B.)C.)C.C7.+G.+G.+G.7b.}b.j5.r5.qy.qy.x'.r5.q6.rH.LK.MK.8b.8b.'*.K>.%B.~{.#1.g;.`T U%.4).j;.F}.m[.f<.JB.NK.OK.PK.QK.RK.SK.TK.UK.VK.WK.XK.YK.ZK.`K. L..L.+L.@L.gJ.#L.a-.kr.$L.%L.&L.9u *L.[^ =L.-L.pJ.;L.>L.,L.aT Q~.WV u} $o.!L.~L.{L.]L.^L./L.(L.Ze Rn _L.:L.px % >% >% 6+ a+ K@ E# >% ^% U% 9& ._ o} ;] ;] ;] ;] GR GR SO SO SO SO {I.{I.{I.SO ;] o} kC kC dd dd g~ g~ g~ g~ g~ E7 E7 7c 7c 7c 'B 'B mf mf mf mf up.up.uk sk lC lC Ql Rl Ql n &% -@ z k& gL.hL.iL.jL.kL.lL.mL.nL.oL..K.IG.pL.qL.rL.rL.sL.tL.uL.vL.wL.xL.yL.@K.zL.zL.bF.AL.BL.Te D%.CL.CL.0$.V} Xj DL.DL.EL.FL.B+ a- Ka #& D. =5 *=.U5 vk ~% .h.oG.-H.'K.'K.lI.)K.{K.{K.]K.GL.ri oj wk ri xk ge {k.nf xk nf xk nf xk nf xk 4c !% k+ k+ k+ k+ k+ k+ k+ l& l& l& l& l& l& l& l& ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ 8c 8c Z+ @ F. R i7 =k HL.~i.Vf.[k IL.(s zq.Y4.%d MZ [K.[K.{j JL.Uc.Uc.O;.O;. m. m.Qe.{,.RW s{.b'./h KL.LL.ML.NL.OL.PL.QL.RL.SL.TL.UL.VL.WL.XL.;% )@ pv lC YL.V>.ZL.o;.({.nj.]_.`L. M.r+..M.+M.Lk. k.+j.Rh.& .n/./a.rc.rc.Rh.qc.)>.(a.cb.bb.aR +D.-c.+D.n$.[H a<.zf.zf.UP 6R 6R UP SP tI @T &w.@M.#M.$M.%M.&N xg.uj.SM Xq.&M.C@.i+.i+.y>.*M.-(.jk.w7.v}.jK.=M.-M.;M.>M.7D NF ,M.4D 'M.!D.s>.|}.X-.)M.!M../ YG ZG h` eE N9.mP ~O /! D* Vx.V/ |* o3 A^.uK.=_ vK.0c bf.A^.X5 4z W5 [4 [4 W5 4z 24 C, m* m* m* m* m* m* m* .# .# m* m* m* O) O) 4! $w R6 X5 4z 4z 4z 4z 4z 4z 4z Q6 Q6 Q6 Q6 4z H{ 5[ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ui ui ui ui ui ui 5[ 5[ `Y pj ti ti pj pj 5[ * 5[ ui }| ui :] 5[ :] ui m* fd :] ui >5 ti }| }| *) r} r} r} *) *) Z% Z% t& t& ,_ ,_ $| $| $| )5 I$ t& s% T@ *) I$ *) T@ -) Z% *) I$ qj F{ %n )_ >5 >5 >5 >5 >5 >5 >5 >5 O* '5 }| }| '5 '5 }| O) `Y YY YY `Y w8.w8.YY ui ui ui ti ti ti ti ti ti I$ I$ I$ I$ I$ I$ I$ I$ )_ )_ )_ )_ )_ )_ )_ )_ pj ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ({ ({ ({ ({ ]_ pj I$ I$ F{ F{ F{ )_ )_ )_ F{ I$ I$ Z% Z% I$ I$ F{ F{ F{ )_ )_ F{ F{ F{ )_ I$ I$ F{ F{ F{ )_ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ )_ )_ F{ F{ F{ I$ )_ x8 )_ I$ I$ F{ x8 )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ Y% x8 )_ F{ F{ )_ x8 Y% x8 x8 Y% Z Z Y% x8 x8 Y% Y% x8 x8 )_ )_ F{ F{ Z% I$ F{ )_ x8 Y% Z z<.x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ F{ I$ I$ O( X[ g7 #v e; h*.61.z<.z<.x8 x8 O* O* [].[].[].O* '5 )_ Y% Z Z Y% )_ F{ I$ )_ x8 )_ I$ Z% F{ x8 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 Ks Ks Ks Ks s6 s6 x8 x8 Y% Y% }U uJ c, ,b.,b.}U uJ )_ I$ Z% Z% I$ )_ x8 Y% Y% Y% Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% Y% x8 x8 Y% Y% Y% F;.F;.F;.F;.uJ uJ uJ k@.)J.51.xF ER ER ER P~.hc )v.~M.{M.]M.^M./M.$b.X9.Zt. H oS (M._M.Q'.:M..F1.i;.$1.42.E].E].8r.&B.8M.9M.0M.aM.bM.cM.dM.vq $< eM.fM.gM.hM.iM.jM.kM.mW @L.lM.mM.a-.nM.]/.oM.ms.pM.qM.d9.rM.oJ.;L.sM.tM.bN CR QO B8.uM.+Z d6.zq S9.hA >k a) Z% t& T@ t& I$ x8 Y% x8 x8 )_ )_ F{ I$ I$ Z% Z x8 )_ x8 Z Z Y% )_ F{ F{ )_ )_ )_ x8 x8 cN h*.e; #v #v cN h*.Y% Z x8 x8 O* O* [].[].[].O* vM.`Q `Q `Q `Q `Q `Q `Q ;q.a) `Q g*.a) uJ UH.F{ s6 Js Js Js .Z .Z Y% x8 )_ )_ %n %n c, c, c, uJ )J.61.61.61.61.61.61.61.cN X[ q} O( q} cN 61.1x.Y% Y% x8 x8 )_ )_ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 h*.e; e; #v g7 / / / #v #v g7 g7 / [| [| A% qj qj D, DR qj O( q} q} q} sM sM +2 V5 h7 6 |].rj fy.KF.Z1.wM.xM.yM.zM.AM.BM.CM.DM.EM.FM.GM.HM.IM.JM.KM.LM.MM.MM.NM.OM.PM.QM.{c *y {z RM.6L.SM.TM.UM.VM.WM.XM.o> YM.ZM.`M.d) := [U bc og -h Es '5 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ I$ I$ Z% ", "E# '$ '$ '$ >% >% >% E# E# E# '$ >% >% ,% ,% M_ M_ [# [# [# [# %5 %5 `& `& `& `& N. N. N.`& ;] o} kC kC dd dd g~ g~ g~ g~ g~ E7 E7 7c 7c 7c zW zW q2.q2.q2.q2.J6 J6 tk !B lC !B Rl Tl Ql Ol 8& B& )D nk .N.+N.@N.#N.$N.%N.&N._L.UJ..K.*N.=N.EG.-N.;N.>N.tL.,N.'N.)N.!N.~N.{N.bF.]N.^N./N.(N._N.a< D%.D%.Pd D%.Of :N., !@ ,] fN.gN.ZL.o;.O2.Z<.Co.Wm.hN.iN.jN.kN.lN.Nu.mN.pd.pd.Z{.4^.]-.i&.b..i&.d;.pd.4^./%.R*.GU QX +D.nN.4#..D.i,.i,.UP 6R 5H 6R SP tI @T &w.oN.pN.4n.qN.&N xg.SM uf.lA.Ks.rN. J.i+.i+.sN.*M.jk.,C.tN.g[.uN.-M.vN.wN.ay.OF xN.LF 1H.yN.>H Z(.zN.AN.BN.CN.X$.'<.N9.P(.`l WV Hi.oP /; m*.^O ;) O) G{ W5 4{ W5 4{ Q6 H{ 24 H{ 4{ 5! [4 W5 4z 24 C, m* m* m* m* m* m* m* .# .# m* m* m* O) O) 4! 24 X5 X5 X5 X5 4z Q6 Q6 4z Q6 Q6 W5 W5 Q6 Q6 H{ 5[ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ 5[ 5[ ui ui ui ui ui ui `Y pj ui ui ti pj ui fd ui C' 5[ C' ui _y ui C' fd og ui _y ti _y ti ui *) r} r} r} *) *) Z% Z% Z% Z% )5 )5 $| $| $| $| ^_ )5 T@ ,_ I$ oh Z% q$ t& ,_ Z% )5 I$ oh F{ )_ >5 >5 >5 >5 >5 >5 >5 >5 >5 }| :] }| '5 ,5 '5 >5 `Y YY pj YY gA w8.`Y pj pj pj ti ti ti ti ti ti I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ pj pj pj pj pj pj pj pj ti pj YY `Y `Y YY pj ti I$ I$ F{ F{ F{ )_ )_ )_ F{ I$ I$ Z% Z% I$ I$ F{ )_ F{ F{ F{ )_ )_ F{ F{ I$ I$ F{ F{ F{ )_ )_ )_ I$ I$ I$ I$ I$ I$ I$ I$ )_ F{ F{ F{ F{ F{ F{ )_ I$ )_ x8 )_ I$ I$ F{ x8 F{ F{ F{ F{ F{ F{ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ F{ )_ x8 Y% Y% x8 )_ F{ x8 x8 Y% Z Z Y% x8 x8 Y% Y% x8 x8 )_ )_ F{ F{ Z% I$ F{ )_ x8 Y% Z z<.x8 x8 x8 x8 x8 x8 x8 x8 Z Z Z Y% x8 )_ )_ X[ X[ g7 g7 #v h*.61. Z Z x8 x8 O* O* [].[].[].O* KB x8 F{ I$ I$ F{ x8 Y% I$ )_ x8 )_ I$ Z% F{ x8 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 Ks Ks Ks Ks s6 s6 x8 x8 x8 Y% }U }U ,b.,b.,b.uJ uJ )_ I$ Z% Z% I$ )_ x8 Y% Y% Y% Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% Y% Y% Y% Y% x8 vM.vM.`Q `Q `Q `Q )J.)J.k@.ER ER vM X$.P~.R9.m> DN.EN.FN.GN.HN.IN.JN.dy.$;.KN.LN.^v.MN.NN.ON.PN.QN._J.DK.Uj.mU RN.}M.y@.RJ vi.2q.IK.Fk.jk.QM 9h.,C.[g.k[.eZ 9h.3p.+ .]}.Y` Y` aZ aZ SN.SN.SN.Kk.H>. B. B.B7.W8.W8.W8.W8.7b.}b.j5.r5.f;.@1.x6.f;.TN.6M.A7.Np.UN.VN.0D.0D.B0.7M.A0.(X T%.$1.Sa.V2.fb.^_.2|.]C.6J.WN.QK.XN.g; vv.YN.Kg.(9 ZN.(=.`N. O..O.+O.8{.R].d2.@O.kp.#O.$O.%O.&O.*O.=O.-O.;O.>O.,F qa.xI.:& g [Q *, q` q` D, D, D, :y >k >k qj I$ t& t& t& I$ )_ Y% x8 x8 )_ )_ F{ I$ I$ Z% z<.Y% )_ x8 Z z<.Y% x8 )_ )_ )_ x8 x8 x8 Y% h*.61.e; e; #v cN cN Y% Y% x8 x8 O* O* [].[].[].O* vM.`Q `Q `Q `Q `Q `Q `Q ;q.a) `Q g*.a) uJ UH.F{ Is Ks Js zm.O4 .Z x8 )_ x8 x8 uJ uJ D, D, D, %n )J.61.61.61.61.61.61.61.cN X[ q} O( q} cN 61.1x.Y% Y% x8 x8 )_ )_ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 h*.h*.h*.cN X[ q} q} q} cN cN X[ X[ q} O( O( '_ q` Ka uM.:y q` %n cT q} g7 ZQ ZQ }].(= ,O.sK.'O.g( !' $6 jg.)O.!O.~O.{O.fJ.]O.^O./O.(O._O.:O.% >% >% >% >% '$ '$ '$ '$ '$ '$ O6 M_ a% [# [# a% %5 I) `& `& `& `& N. N. N.`& ;] o} kC kC dd dd g~ g~ dd dd g~ g~ E7 E7 E7 E7 Sy.Sy.mf q2.q2.mf xn.xn.sk !B lC sk Tl Tl Ql Nl :{ gO.hO.iO.jO.kO.lO.mO.nO.oO.pO.qO.rO.sO.tO.uO.5I.4I.vO.wO.vL.'N.xO.yO.zO.AO.BO.t| CO.^N.T1 b9 E%.2/ r| V} *K.C6 s| DL.DO.[N.4O.EO.FO.GO.&* %* V. n ,+ >+ >+ ,' 4c g~ 7c ie le ke Qw.HO.IO.ie 2b :j.le oG.ke :j.le tk he m` he m` he m` he 0' ,' i> i> i> i> i> i> i> k+ k+ k+ k+ k+ k+ k+ k+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ Z+ 0' 0' |% &) J- j+ ,. <$.M4 s2.SG Ik Xz JO.Wf.K+.m<.9 .[K.P.,P.,P.'P.)P.2S vN.!P.~P._f. <.|H.{P.-[.]P.^P./P.(P._P.:P.S6 0}.&n .FK.TS dP.:2.{>. $.iI IK.9h.>}.|p.1r.Mh.k[.3p.3p.]}.;5.P:.P:.Y` aZ =T =T '{.Z^.ix.eP.eP.`A.p7.p7.LK.LK.m~.m~.qy.f;.@1.12.32.K>.8b.Op.Op.Np.UN.VN.B0.7M.~{.~{.{{..c.P>.5).='.]{.fP.^_.Zb.]C.gP.hP.iP.jP.kP.lP.-B.mP.<< b[ nP.oP.pP.qP.rP.sP.tP.uP.@O.kp.vP.vH wP.f-.xP.yP.zP.9>. N./& <& @& >= Ka Jb Ka q` q` D, :y :y :y |+.DR %n F{ I$ I$ I$ I$ F{ F{ x8 x8 )_ )_ )_ )_ F{ F{ Z x8 )_ x8 Z Z Y% )_ )_ )_ )_ x8 x8 Y% Y% h*.1x.+s.e; #v cN cN x8 Y% x8 x8 O* O* [].[].[].O* )L.}U }U }U }U }U }U }U ;q.a) `Q g*.a) uJ UH.F{ oh Tt Js zm.O4 .Z )_ F{ x8 x8 uJ uJ D, D, D, %n 51.h*.h*.h*.h*.h*.h*.h*.cN X[ X[ q} X[ cN cN h*.Y% Y% x8 x8 )_ )_ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 cN cN cN cN X[ X[ X[ X[ X[ X[ X[ q} q} q} q} qj AP.2'.#~.uM.y8.,b.c, cT g7 l*.l*.B^.BP.CP.DP.ID.h( EP.ne /> ~J.FP.ME.GP.HP.IP./O.JP.KP.LP.[A.MP.NP.OP.PP.QP.RP.SP.TP.UP.VP.WP.6O.XP.YP.v7 )z ZP.h9 er `P.9L. Q..Q.Ch.+Q.m- W/ !I.61 tJ Tt p] P9.F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ F{ )_ )_ F{ I$ I$ I$ F{ F{ )_ x8 Y% ", "E# '$ '$ '$ >% >% >% '$ '$ '$ '$ '$ '$ '$ '$ x5 O6 a% [# [# a% I) r2.`& `& `& `& N. N. N.`& ;] o} kC kC dd dd g~ g~ kC kC dd dd dd g~ g~ g~ [9.&#.<| +_ +_ <| E7 7c N6 U5 U5 N6 @n @n n F[.L& @Q.#Q.$Q.%Q.&Q.*Q.=Q.-Q.;Q.ii >Q.,Q.'Q.)Q.uO.!Q.~Q.{Q.vO. K.vL.)N.yO.]Q.^Q./Q.cF.(Q._Q.DO./3 r| L^ m{ eF.=K.0$.s| DL.:Q.D.DQ.EQ.FQ.GQ.HQ.IQ.JQ.KQ./P.LQ.i8.s|.{O y^._x.!<.MQ.35.%Z YV YV kA d- [] g b) Z5 *5 *5 La La *5 4{ 5! 5! 4{ H{ 24 C, m* m* m* m* m* m* m* .# .# m* m* m* O) O) 4! H{ 24 $w $w $w H{ G{ 4{ G{ G{ 4{ 5! 5! 4{ G{ C, 5[ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ fd 5[ 5[ 5[ ui ti ti ti ui fd .* .* 5[ pj pj _y Ah.#) Zl #) 7e.7) lP NQ.Zl NQ.rS OQ.7e.OQ.lP _y *) r} r} r} *) *) Z% Z% F{ F{ oh ^_ $| $| $| (* Ks bc Ma bc Ks Ks Tt Ma Ma Ma $| $| $| $| (* ,_ '5 '5 '5 '5 '5 '5 '5 '5 '5 }| :] }| '5 ,5 '5 }| pj ui 5[ ui pj `Y `Y pj YY YY YY pj pj ti ti ti I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ oh oh oh oh oh oh oh oh )5 ^_ Is .Z .Z Is ^_ )5 I$ I$ F{ F{ F{ )_ )_ )_ F{ I$ I$ Z% Z% I$ I$ F{ x8 F{ Z% I$ x8 Y% )_ Z% I$ I$ F{ F{ F{ )_ )_ )_ )_ F{ Z% t& t& Z% F{ )_ x8 )_ F{ I$ I$ F{ )_ x8 I$ )_ x8 )_ I$ I$ F{ x8 I$ I$ I$ F{ )_ )_ )_ x8 F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ x8 x8 Y% Y% Z Z I$ I$ F{ F{ F{ F{ I$ I$ F{ )_ )_ x8 x8 )_ )_ F{ Y% Y% x8 x8 )_ )_ F{ F{ )_ )_ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% Y% Y% 61.cN #v #v #v cN X[ )_ )_ x8 x8 O* O* [].[].[].O* KB )_ F{ Z% Z% F{ )_ Y% )_ x8 Z Y% )_ F{ x8 Z s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 9e.9e.9e.9e.`Y `Y O* O* ,5 O* )L.vM.PQ.QQ.Jb dt %n x8 x8 Y% Y% x8 x8 )_ I$ I$ F{ )_ )_ x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 I$ F{ x8 Y% Y% x8 F{ I$ %n D, D, }+.}+.}+.}+.cE cE 8!.:U 6H.MB RQ.SQ.TQ.UQ.VQ.2P.vh.WQ.JN.oz.XQ.YQ.oh.ZQ.`Q. R..R.+R.c+.[M.S-.@R.#R.#R.bz.vg.TS 4L _2.E0.E0.k[.9h.4W fZ w6.W#.R` Q*.l+.X` m+.T` Y#.[..)_.2Z )_.v].y].w].ix.Az.$R.%R.&R.#!.hx.z7.F!.q5.S*.D}.S*.i=.X*.E}.Fs.Lp.23.Op.Sq.UN.7M.e4.%w.%w.Fo.3z. c.5).42.!0.K:.R.,R.'R.!/.~/.mM.f%.)R.!R.~R.H4.{R.]R.^R.Sc.[+ e> >= %& #& q` PQ.c, :y :y :y :y :y :y D, %n uJ x8 x8 x8 )_ F{ I$ Z% )_ )_ x8 x8 x8 x8 Y% Y% Y% x8 F{ )_ Y% Z x8 )_ )_ x8 x8 x8 Y% Y% Z 61.1x.+s.e; #v X[ cN x8 x8 x8 x8 O* O* [].[].[].O* F;.uJ uJ uJ uJ uJ uJ uJ ;q.a) `Q g*.a) uJ UH.F{ )5 bc Ks zm.O4 s6 F{ Z% Y% Y% uJ uJ D, D, :y qj k@.cN cN cN cN cN cN cN X[ cN cN h*.cN X[ X[ q} Y% Y% x8 x8 )_ )_ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ )_ )_ x8 x8 x8 x8 F{ F{ F{ F{ F{ )_ )_ %n /R.(R.w= 2'.z8.75.,b.cT g7 l*.0e._R.$> :R.% >% >% E# E# E# '$ >% >% >% ,% x5 O6 a% [# [# a% I) r2.`& `& `& `& N. N. N.`& ;] o} kC kC dd dd g~ g~ o} o} kC kC dd dd dd g~ yk [9.<| +_ +_ <| 7c 9c U5 U5 U5 $~.*=.@n n <{ pR.=J.qR.rR.sR.tR.uR.vR.wR.xR.w9 yR.zR.AR.BR.CR.DR.4F.4F.vO.ER.FR.wL.GR.HR.aF.BO.cF.1} 1} Te IR.m{ Ae Ae &7 0$.JR./3 (N.KR.LR.NG.MR.NR.OR.PR.OR.3} QR.%o.q3 J R# 7# UO ]= U 3c != != 8c le .h.r: Ml @n @n Lv.Lv.*=..n r: r: r: r: r: r: r: r: !1.,' ,' ,' ,' ,' ,' ,' L_ L_ L_ L_ L_ L_ L_ L_ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ ~+ !% %% m` vk vk #% T$ {+ &. o+ ;; v5 RR.Px.rv.SR.&h.TR.UR.VR.WR.kW kW tm XR.YR.Vv.>|.{z.bQ.bQ./z.ZR.`R. S..S..m.!h.2i.RW :V ML.+S.q:.We.aQ `R @S.#S.$S.%S.&S.`d.$d.R<.*S.C:.s0.=S.t0.-S.;S..P.>S.,S.x1.<%.an.>(.>(.gm.|o.Dl.Sh.Dl.sd.l&.@j../. /../.HU 1W &T +D.*T FU i,.kO e~.XJ rI Zm.SP SP sI Vq.'S.@M.pN.sQ.xf.`i.SM 2l.uj.Gk.H0./d.W#.)S.!S.j+.~S.{S.xQ.]S.^S./S.(S._S.:S. C, m* m* m* m* m* m* m* .# .# m* m* m* O) O) O) 4! 24 $w G7 $w 24 G{ 5! G{ 4{ 4{ 5! 5! 4{ 4{ C, 5[ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ ,_ fd fd 5[ 5[ ui ti ti ti fd .* U@ 2% fd ti YY p] Ah.#) @~.NQ.OQ.6S.7S.NQ.NQ.#) 7S.OQ.OQ.OQ.OQ.lP *) r} r} r} *) *) Z% Z% )_ F{ oh ^_ Ma $| $| (* Js Tt bc Tt Js Js Ks bc bc Ma Ma $| (* (* /* /* '5 '5 '5 '5 '5 '5 '5 '5 KB '5 }| }| '5 '5 }| m* pj 5[ fd 5[ ti YY YY pj `Y `Y YY YY pj ti ti ti I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ F{ F{ F{ oh oh oh oh oh oh oh oh ,_ ^_ Is .Z .Z Is ^_ ,_ I$ I$ F{ F{ F{ )_ )_ )_ F{ I$ I$ Z% Z% I$ I$ F{ x8 F{ Z% I$ x8 Y% )_ Z% I$ I$ F{ F{ F{ )_ )_ )_ )_ F{ Z% t& t& Z% F{ )_ x8 )_ F{ Z% Z% F{ )_ x8 I$ )_ x8 )_ I$ I$ F{ x8 I$ I$ I$ F{ )_ )_ x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ x8 Y% Y% Y% )_ F{ Z% T@ T@ Z% F{ )_ I$ F{ )_ )_ )_ )_ F{ I$ Y% Y% x8 x8 )_ )_ F{ F{ x8 x8 x8 x8 )_ )_ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ )_ x8 Y% Y% h*.h*.e; e; #v X[ q} F{ F{ x8 x8 O* O* [].[].[].O* '5 F{ )_ )_ )_ )_ F{ F{ )_ Y% z<. Z x8 )_ x8 Z s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 9e.9e.9e.9e.`Y `Y O* O* ,5 O* )L.8S.9S.QQ.Jb dt %n x8 Z z<.z<. Z x8 )_ t& Z% Z% F{ )_ x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 Z% I$ )_ x8 x8 )_ I$ *) q3 q3 >k >k >k >k Ls Ls :U 6H.0S.MB aS.oz.gX bS.UQ.cS.dS.eS.fS.gS.2G.hS.iS.jS.lh.kS.lS.mS.EA 2;.nS.#R.je.yY +.Q,.vg.7y.ui.PM [g.K` QM ,}.fZ ;}.l+.R` L` T.,T.'T.)T.!T.~T.{T.]T.^T./T.(T._T.ef :T.`P.% >% '$ '$ '$ E# E# E# E# E# E# E# E# E# E# >% >% E n n n H# H# I# I# Q$ Q$ K# K# 3# UL +_ dd dd dd dd dd dd dd 9c 7c 7c E7 E7 g~ g~ dd ]= UO f+ '= F F M_ M_ t).w8 4( 4( F[.`m `n cW 1T.2T.3T.rR.4T.5T.6T.7T.8T.9T.9e 0T.aT.bT.cT.dT.eT.fT.fT.4I.gT.hT.iT.YD.HR.jT.kT.cF.lT.Qd >K.C6 L^ &@.2/ mT.CL.CL.nT.DO.H3 /N.oT.pT.qT.rT.sT.tT.uT.vT.wT.xT.hA =- t* H$ F. &$ *$ J- `+ F E7 y% 2c de =$.=$.yT.yT.&j.&j.zT.zT.zT.zT.zT.zT.zT.N~.vk 9c 8c 8c 0' |% |% |% $% &) &_ &_ &_ $% |% ,' V V ,+ ,+ V h. j+ +# h. h. ~+ ~+ i+ i+ i+ 6c I> <4 f% 4% |% !% V ;+ q. (+ l; v5 q).%#.AT.BT.!k CT.DT.2Q 6(.KO.MO.Bn.Vv.=E.ET.FT.Vw.bQ.GT.Sd.Qe.Hb.2i.2i.t{.t{.t{.t{.9'.8'.>h.:i.a| It Gt a] }^ K( HT.G2.Z4.=6. f.IT.JT.U<.KT.LT.u0.lO MT.MT. P.+ J- |x.W_ ~_ o3 K> :] :] :] :] :] :] :] m* m* m* m* m* m* m* m* J- l* l* C, C, l* l* J- .@ @ @ +@ C, 4! l* +@ U@ !. 8# a# q$ ,_ )5 ^_ )5 ,_ ,_ ,_ ,_ )5 ^_ oh fd fd 5[ 5[ ui ti ti ti `Y YY ti ui 5[ 5[ ui _y lP 7S.7S.7S.7S.7S.7S.7S.7S.7S.7S.7S.7S.7S.7S.lP -) r} :y D, %n qj Z% t& t& t& )5 ^_ Ma bc Tt Tt $| $| $| Ma Ma bc bc bc bc bc bc bc bc bc bc bc '5 '5 '5 '5 '5 '5 '5 '5 O) :] >5 ,5 O* O* O* O* YY ti ui ui pj pj ti 5[ YY ti 5[ ti YY YY ui * Z% Z% Z% Z% Z% Z% Z% Z% x8 x8 )_ F{ Z% t& T@ T@ oh Is s6 .Z .Z s6 Is oh ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ x8 )_ I$ Z% Z% F{ )_ x8 F{ F{ F{ I$ I$ Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% Z% I$ I$ F{ )_ )_ x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ Y% I$ I$ x8 x8 Z% Z% )_ x8 x8 x8 x8 x8 x8 x8 x8 F{ I$ Z% Z% I$ )_ Y% Z Z% Z% Z% Z% Z% Z% Z% Z% F{ F{ )_ )_ x8 x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 Z% I$ F{ )_ x8 Y% Z z<.F{ Y% Y% F{ F{ Y% Y% F{ x8 x8 x8 x8 x8 x8 x8 x8 F{ )_ x8 Y% Y% x8 )_ q} cN #v g7 g7 q} O( I$ Z% F{ Y% ,v.ZY Ds Xl [].,v.O* x8 x8 x8 x8 x8 x8 x8 Z% I$ I$ F{ )_ )_ x8 x8 .Z .Z .Z .Z .Z .Z .Z .Z )5 ^_ ^_ oh Is Is s6 s6 8e.+C.+C.+C..s..s.d7.d7.Ds [].#U.{Y wW ;,.^Y vM.$U.Y% Z% )_ Rx.%U.z<.I$ I$ I$ I$ I$ I$ I$ I$ I$ x8 Y% z<.7}.7}.z<.Y% x8 x8 x8 x8 x8 x8 x8 x8 uJ >k zq &U.*U.L~.d>.<+.<+.1I `G V1.I,.CM 5}.:4.3*.=U.-U.;U.>U.,U.gX hS.'U.)U.!U.~U.{U.1q.D0.{>.iI gI ]U.^U.j;.i;.s$./U.(U.6O od.|p.ik.IU 6|._U.e|.W` c<.q7.X8.rx.C>.jc.fc.l[.f3.y7.m4.F!.mc.m4.q7.:U.k~.% >% '$ '$ '$ E# E# E# E# E# E# E# E# E# E# '$ '$ n E E E 0% 0% I# I# Q$ Q$ K# K# 3# b% F dd dd dd dd dd dd dd 7c E7 E7 E7 g~ dd dd dd r2.r2.'= '= '= F O6 O6 G) w8 3( 3( Zm `m `m M& `U..; V..V.+V.@V.#V.(' ga SU.$V.%V.GG.&V.*V.=V.-V.AG.;V.>V.,V.'V.8I.xO..K.)V.kT.cF.!V.~V.>K.C6 &7 I..2/ mT.CL.D%.{V.i2 }Q.OR.]V.^V./V.sT.(V._V.:V..T+ 3% L J# R# ^$ Z+ U 6c ^* Ll yT.yT.yT.=$.=$.=$.=$.yT.yT.yT.yT.yT.yT.yT.Ll vk 8c 8c 8c 0' |% |% |% |% $% &) &) &) |% 0' 8c Y+ i+ i+ i+ ~+ h. {+ ]+ {+ h. h. h. ~+ ~+ i+ ,' f% i% 4% %% |% 0' Y+ V ^& I Q+ P; Wl.q).}V.rv.|V.1V.2V.DT.3V.rm ^k c .],.7(.d_.f1.4V.Xc.5V.6V.RW 7V.RW RW yC Re.Re.Re.8(.9'.8'.B).Tv.8V. F e.>e.k+.L` tQ.jV.QT.kV.lV.xQ.mV.nV.'W oV.pV.qV.rV.sV.tV.b[.sV.uV.vV.wV.xV.J .l|.Ps.yV.pf.6I zV.AV.BV.CV.5].6U u` DV.D=.5*.&w v#.`% O$ q. '' G. .@ 4! W_ &_ ~_ .o 4! O) O) O) O) O) O) O) m* m* m* m* m* m* m* m* l* l* C, 4! 4! C, l* l* J- +@ +@ l* 4! 4! l* j+ a# a# a# a# a# q$ q$ q$ q$ q$ q$ q$ q$ )5 ^_ oh fd 5[ 5[ 5[ ui ti ti ti `Y YY ti ui 5[ 5[ ui _y rS #) rS #) rS #) rS #) lP 7S.lP 7S.lP 7S.lP _y -) r} :y D, %n qj Z% t& Z% Z% ^_ ^_ Ma Ma bc bc $| $| $| Ma Ma bc bc bc bc bc bc bc bc bc bc oh '5 '5 '5 '5 '5 '5 '5 '5 :] }| '5 ,5 O* O* ,5 ,5 pj ui 5[ ui pj YY pj ui YY ti ui ti YY YY ui * Z% Z% Z% Z% Z% Z% Z% Z% )_ )_ F{ I$ I$ Z% t& t& ^_ oh Is s6 s6 Is oh ^_ oh oh oh oh oh oh oh oh x8 )_ F{ I$ I$ I$ F{ )_ )_ )_ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ I$ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ x8 Z% Z% x8 x8 I$ I$ x8 )_ )_ )_ )_ )_ )_ )_ )_ x8 )_ F{ I$ I$ F{ F{ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ x8 x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 I$ F{ F{ )_ x8 Y% Y% Z F{ Y% Y% F{ F{ Y% Y% F{ x8 x8 x8 x8 x8 x8 x8 x8 F{ )_ x8 Y% Y% x8 )_ q} q} / / / X[ X[ )_ )_ I$ x8 KB O* Xl 34 Ds KB O* x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ )_ )_ )_ )_ .Z .Z .Z .Z .Z .Z .Z .Z oh oh Is Is Is Is s6 s6 EV.EV.EV.EV.({ ({ Ds Ds Ds [].#U.{Y wW wW ^Y vM.8S. Z x8 x8 Z Z x8 )_ )_ )_ )_ )_ )_ )_ )_ )_ x8 Y% Z z<.z<. Z Y% x8 x8 x8 x8 x8 x8 x8 x8 uJ >k zq 'b.zF d>.<+.<+.,p.h` V1.W_.5}.^[.,U.-3.Vt.57.)r.fS.>3.T1.FV.GV.HV.IV.|w.^U.7#.r9.4W *T jZ JV.KV.H_.W%.W%.X:.V:.R,.o5./Z 1p.RM '>.LV.y_.t].xy.[:.d<.X8.B>.xy.C}.C}.l[.l[.]%.*'.q5.q5.`{.g&.^a.@!.@!.f.,f.V2.Qz.PV.QV.RV.SV.TV.O& n^ UV.+g bo VV.WV.T].XV.YV.ZV.`V. W.gv.ES.Uk.d:..W.+W.8K @W.#W.$W.%W.&W.*W.=W.PO '' ', DR Fs '_ '_ a) %n %n %n %n %n %n %n %n %n Z% I$ )_ Y% Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ F{ I$ I$ F{ )_ x8 F{ F{ F{ F{ )_ )_ )_ X[ q} / / / q} q} F{ F{ z<.Y% ,5 >5 34 Ds d7.,v.)L.}U }U }U }U }U }U }U uJ uJ uJ uJ uJ uJ uJ x8 s6 zm.wn.Js Is oh )_ x8 )_ x8 uJ uJ ,b.75.75.`Q k@.cN cN cN cN cN cN cN cN X[ X[ q} q} X[ X[ cN Y% Y% x8 x8 )_ )_ F{ F{ F{ )_ )_ )_ x8 x8 x8 Y% F{ F{ F{ F{ F{ )_ )_ )_ I$ F{ )_ x8 x8 )_ F{ hu 2'.-W.JG 9! &h d- `5 S6 ';.g, ,<.;W.>W.,W.'W.Y0 )W.!W.~W.{W.KP.]W.^W./W.(W._W.:W.% >% '$ '$ '$ E# E# '$ '$ '$ '$ '$ '$ '$ '$ p p k o G u M M J J K K O# O# s b% F dd dd dd dd dd dd dd g~ g~ g~ dd dd dd kC kC I) G$ D }# }# }# ^% ^% 6& h> '& '& )& 8& 7& &| mW.nW.oW.pW.qW.rW.sW.tW..I.uW.0T.vW.wW.xW.yW.zW.AW.BW.CW.DW.EW.FW.7I.uL.sO.yL.GW.kT.t| 1} &K.C6 m{ HW.L^ 2/ CL.D%.Yi IW.JW.pT.KW.LW.MW.NW.OW.PW.QW.RW.SW.TW.UW.t#.tr d- -D L R R$ V {+ h. U% S& m& m& D& q& r& r& Z& q& q& q& q& q& q& q& 1c +h.ke ke he he he 2b 2b 2b 2b ;_ ;_ 2b he ke 9c Z+ ~+ h. {+ {+ h. h. ~+ ]+ ]+ {+ {+ h. h. h. !% r: VW.WW.WW.d( d( 8c Y+ ]$ &$ 6# *. `@ P; kP zR XW.YW.ZW.`W. X..X.+X.>8.xB.],. M 0'.OW 4V.@X.6V.:V #X.AC AC zC TZ TZ $X.Vc.RZ m.O;.7'.Aq.:i.Tv.pt %X.&X.*X.Wf =X.-X.;X.>X.,X.;' lQ.'X.)X.@>.xd.4|.J:.`<.`<.r_.uc.+k.gb.2a.~_.Df.tc.!X.~X.{X.tc.&*.HU n$.]X.[H qQ.8|.^X.XJ XJ XJ XJ +N +N N N cK./X.oN.iV.(X._X.GE |H pI kI Va.'_.W` W` -(.r].:X.5 >5 '5 ,5 ,5 ,5 '5 '5 ti 5[ fd ui pj `Y YY ti YY ti ti ti YY pj ui fd F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ cc cc ec sM sM ec cc cc sM sM sM sM sM sM sM sM Y% x8 )_ F{ I$ I$ I$ F{ x8 x8 )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ F{ t& t& x8 x8 F{ F{ Z F{ F{ F{ F{ F{ F{ F{ F{ x8 x8 x8 x8 )_ I$ Z% t& Y% Y% Y% Y% Y% Y% Y% Y% F{ F{ )_ )_ x8 x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ )_ )_ x8 x8 x8 x8 F{ Y% Y% F{ F{ Y% Y% F{ x8 x8 x8 x8 x8 x8 x8 x8 F{ )_ x8 Y% Y% x8 )_ q} A% [| [| / X[ cN Y% Y% I$ F{ O* ,5 34 34 Xl ,5 O* x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ )_ )_ F{ F{ F{ .Z .Z .Z .Z .Z .Z .Z .Z .Z .Z s6 s6 s6 s6 Is Is uM uM uM uM ]_ ]_ Xl Xl Xl [].#U.{Y wW wW ^Y )L.dt Z z<.Y% F{ Z% F{ x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ x8 Y% Y% Y% Y% x8 )_ x8 x8 x8 x8 x8 x8 x8 uJ rr Z0.1c.Z0.Ps ].)U.fX.gX.x(.t(.}%.SX hX.r(.V:.9y.tV.').FE.@G.U2.ke./Z /Z <:.+ .H@.G@.bZ s].B>. B.eP.)C.c;.DE.C7.C7.qH.qH.j5.qy.12.|2.@1.^-.w].>{.iX.,{.U{.o+.T{.T{.YP 3..7..f,.7..7..x+.Dl.,T [U.[U.[U.7p.Dt.GE.OV.,d.NV.]{.4z.7).bD.jX.kX.lX.mX.0J.TK.T/ R( x4.nX.0o i%.oX.gJ.pX.|t.qX.rX.sX.Ix.Ce.T}.tX.H5.uX.vX.OD s5 wX.xX.yX.zX.(R.AX.d# gd g7 g7 [| [| X[ h*.q} q} F{ F{ F{ F{ '5 '5 t& Z% F{ x8 Y% Z Z Z x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ F{ F{ F{ F{ )_ x8 Z Y% Y% )_ F{ I$ Z% A% X[ g7 g7 g7 X[ X[ )_ )_ Y% x8 '5 >5 34 Xl [].KB )L.}U }U }U }U }U }U }U uJ uJ uJ uJ uJ uJ uJ x8 .Z wn.vn.wn.s6 Is x8 Z x8 x8 uJ }U ,b.,b.75.`Q 51.h*.h*.h*.h*.h*.h*.h*.h*.cN cN X[ X[ cN cN h*.x8 x8 x8 x8 )_ )_ )_ )_ t& Z% I$ )_ x8 Z z<.7}.,5 ,5 ,5 '5 '5 '5 '5 '5 '5 '5 ,5 O* O* ,5 '5 LB 9S.V$.dN >k }+.cE dE S6 4b nl.ic BX.6x.}_ CX.DX.EX.FX.GX.HX.IX.JX.KX.LX.MX.NX.OX.PX.QX.RX.SX.TX.UX.VX.WX.XX.YX.ZX.`X. Y.8W..Y.HU.+Y.@Y.#Y.$Y. E.oB.y9 @I.%Y.iW.&Y.xR.*Y.=Y.-Y.;Y.2* '!.tM l+ U0 F{ Z% Z% I$ x8 Z Y% x8 )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ I$ I$ I$ F{ I$ I$ Z% I$ F{ ", ">% >% '$ '$ '$ E# E# '$ '$ '$ '$ '$ '$ '$ '$ <# <# k o G t N R J J K K O# O# s b% F dd dd dd dd dd dd dd dd dd dd dd kC kC kC M_ %5 0% D D }# C U% 9& ,& h> T% T% )& 7& j& %| >Y.,Y.'Y.)Y.!Y.~Y.{Y.4o f9 ]Y.^Y.8I./Y.(Y._Y.:Y.5 :] O) :] }| :] m* j+ a# a# a# a# a# a# a# a# 8# 8# 8# j$ a# ,_ )5 oh 5[ 5[ ui ui ui ui ui ui ti ui ui ui ui ui ui ui fd p: fd p: fd p: fd p: ti _y ti _y ti _y ti ti a) q3 q3 q3 a) a) I$ I$ )_ )_ oh ^_ Ma $| (* (* )5 )5 Z% ^_ I$ oh F{ oh F{ oh F{ oh F{ oh F{ F{ '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 ,5 ,5 ,5 '5 >5 >5 5[ fd fd 5[ YY `Y `Y YY pj pj pj pj pj ti ui fd F{ F{ F{ F{ F{ F{ F{ F{ Z% Z% I$ I$ I$ I$ F{ F{ cc cc cc cc cc cc cc cc FR FR FR FR FR FR FR FR Y% x8 )_ F{ I$ I$ I$ Z% Y% Y% x8 x8 )_ )_ )_ F{ )_ )_ )_ )_ )_ )_ )_ )_ x8 x8 )_ )_ F{ I$ I$ Z% F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ I$ T@ t& )_ Y% F{ )_ z<.I$ I$ I$ I$ I$ I$ I$ I$ I$ )_ x8 Y% x8 F{ Z% t& Y% Y% Y% Y% Y% Y% Y% Y% F{ F{ )_ )_ x8 x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% x8 x8 )_ )_ F{ F{ F{ Y% Y% F{ F{ Y% Y% F{ x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ x8 x8 x8 x8 )_ X[ q} / / g7 cN cN x8 Y% F{ )_ ,5 ,5 Xl Xl Ds ,5 O* x8 x8 x8 x8 x8 x8 x8 Y% Y% x8 x8 )_ F{ F{ I$ .Z .Z .Z .Z .Z .Z .Z .Z =L O4 O4 .Z s6 s6 Is YY EV.EV.EV.EV.({ ({ Ds Ds 34 [].#U.#U.^Y wW ^Y {Y d7 F{ x8 )_ F{ I$ F{ x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ x8 x8 x8 x8 )_ )_ x8 x8 x8 x8 x8 x8 x8 k@.rr Z0.&w Ps `0..-{. B.eP.)C.c;.DE.Iz.DE.qH.|J.n~.~C.f;.@1.x6.03.w].j~.7Z h,.W{.W{.W{.U{.,>.G@.tY S{.W).W).C .k&.oS.[U.YY.ZY.7q.Dt.5y.|U.`Y.#G.@c.+c. c.&B.t1.wH.41.,~ A> Z.R( /9 .Z.+Z.@Z.#Z.$Z.Z7.%Z.&Z.*Z.=Z.B4.Tk.T}.7U.-Z.;Z.NL >Z.=4 ,Z.'Z.)Z.!Z.~Z.{Z.]Z.Fs fc i*.i*.g7 / cN 61.q} q} F{ F{ F{ F{ '5 '5 I$ I$ F{ )_ x8 Y% Z Z x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ )_ )_ )_ )_ x8 Z Z Y% x8 )_ I$ I$ A% X[ g7 g7 g7 X[ X[ )_ )_ x8 )_ '5 >5 34 Xl Ds O* )L.}U }U }U }U }U }U }U uJ uJ uJ uJ uJ uJ uJ x8 O4 wn.vn.wn..Z s6 Y% Z x8 x8 }U }U ,b.,b.,b.}U k@.cN cN cN cN cN cN cN 61.h*.cN cN cN cN h*.61.x8 x8 x8 x8 )_ )_ )_ )_ Z% I$ F{ )_ x8 Y% Z z<.O* O* ,5 ,5 '5 >5 >5 }| ,5 ,5 ,5 O* O* ,5 ,5 ,5 %n 4H.7x.^Z.$J.0S.:U zk ~v.W_.W0./Z.(Z.s= _Z.:Z.% >% '$ '$ '$ E# E# >% >% >% >% >% >% >% >% L@ <# k o G u N N J J K K O# O# s b% F dd dd dd dd dd dd dd kC kC kC kC dd dd dd O6 %5 0% D D }# C U% 9& M% '& S% S% !& 7& 7& Jn zZ.AZ.BZ.CZ.DZ.EZ.ga ji FZ.GZ.HZ.&V.IZ.JZ.KZ.LZ.MZ.NZ.OZ.PZ.QZ.RZ.SZ.TZ.UZ.VZ.cI.3Y.4Y.5Y.BL.>K.&7 6Y.&7 &7 E%.`.b%.DO ,`.C).ya.RZ 8(.4Y PW '`.)`.!`.~`. g.Se.{`.]`.4V.4V.bQ.Vc.Vc.8(.9'. m.~i >g Sy ,g [q ^`.7A.[^ /`.(`.4A._`.:`.<`.[`.}`.|`.1`.~u.F].2`.3`.NE U).p&.r'.5r.78.q&.4`.5`.6`.7`.8`.As.@*.[H [H M%.&P.u'.%T XJ {}. N N +N .K PT.iV.nL cK. j.yf.|H zf.`F 1H $[.D1.[..(%.Y#.m+.qU 9`.0`.AF.[X.a`.b`.O` c`.iK.(..jV.r].08.Q` :6.n5.w>.d`.}M.e`.f`.g`.h`.i`.j`.P'.@a.8!.k`.)' W0.e6.CS CS pE.pl.BJ c>.$C.|+.a) !5 +# t% Y_ v% Y_ l* .# .# .# .# .# .# .# m* m* m* m* m* m* m* m* O) O) :] }| }| :] O) O) >5 }| :] :] }| }| m* +# 8# 8# j$ a# q$ ,_ ,_ )5 8# 8# 8# j$ a# q$ )5 ^_ ui ui ui ui ui ui 5[ 5[ 5[ 5[ 5[ ui ui ui ui 5[ fd fd O) fd O) fd O) fd >5 ti >5 ti >5 ti >5 >5 a) q3 q3 q3 a) a) I$ I$ )_ )_ oh ^_ Ma $| (* ,_ Z% Z% *) I$ a) F{ qj F{ qj F{ qj F{ qj F{ qj F{ '5 '5 '5 '5 '5 '5 '5 '5 '5 '5 ,5 ,5 ,5 '5 >5 >5 5[ fd fd 5[ YY `Y `Y YY ti pj YY YY ti ui 5[ 5[ F{ F{ F{ F{ F{ F{ F{ F{ Z% Z% I$ I$ I$ I$ F{ F{ cc +2 +2 +2 +2 +2 +2 +2 ig ig ig ig ig ig ig FR )_ )_ )_ )_ F{ F{ I$ Z% Y% Y% x8 x8 )_ )_ )_ F{ x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ F{ I$ I$ Z% F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ I$ T@ t& )_ Y% F{ )_ z<.I$ I$ I$ I$ I$ I$ I$ I$ t& Z% F{ x8 Y% x8 )_ I$ x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ )_ )_ x8 x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 Z Y% Y% x8 )_ F{ F{ I$ F{ Y% Y% F{ F{ Y% Y% F{ x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ )_ )_ x8 cN h*.e; e; #v X[ X[ )_ F{ Y% x8 O* O* d7.d7.[].O* O* x8 x8 x8 x8 x8 x8 x8 Z Y% Y% x8 )_ )_ F{ F{ .Z .Z .Z .Z .Z .Z .Z .Z =L O4 O4 .Z s6 s6 Is YY ~I.l`.l`.l`. F. F.Y1.Y1.G7 34.m`.m`.n`.xW o`.{Y d7 t& T@ Z% x8 Z Y% x8 )_ )_ )_ )_ )_ )_ )_ )_ x8 x8 )_ )_ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 x8 k@.rr &w *o..G>.y`.eP.)C.BE..B.Iz.c;.|b.qH.n~.Lz.r/.x6.x'.03.bb.iX.,{.z`.U{.V{.!>.q(.y_.y_.tY S{.>>.s'.C .@j. ].A`.B`.NU C`.C`.=x.=x.-x.-x.Ta.+c.,f.7).bD.wH.g; ;A.D`.E`..e F`.P}.pm P+.oX.G`.#L.H`.&Z.I`.J`.K`.L`.!j.M`.N`.O`.j:.P`.** Q`.R`.XG.S`.T`.U`.#U.[| xi C* C* fc fc #v +s.q} q} F{ F{ '5 '5 '5 '5 x8 x8 )_ )_ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ x8 x8 x8 x8 x8 x8 )_ x8 x8 x8 x8 x8 x8 )_ X[ cN #v #v #v cN cN x8 x8 )_ F{ '5 '5 Xl Xl Xl ,5 )L.}U }U }U }U }U }U }U uJ uJ uJ uJ uJ uJ uJ x8 O4 wn.vn.wn..Z s6 Y% Z Y% Y% }U }U ,b.,b.c, uJ cT X[ X[ X[ X[ X[ X[ X[ 61.h*.cN cN cN cN h*.61.)_ )_ )_ )_ x8 x8 x8 x8 )_ )_ )_ )_ x8 x8 x8 x8 O* [].Ds Ds Xl 34 34 b, [].[].[].Ds Ds [].[].O* :+ fc Q5 gd YG rj ~v.RQ.V`.BJ =,.X3.W`.X`.MP.Y`.Z`.``. +yU.. ++ +@ +# +$ +% +& +* += +- +; +> +, +' +) +! +~ +{ +] +^ +/ +6W.( +_ +: +< +[ +} +| +ei rZ.1 +2 +3 +|; 4 +5 +6 +7 +SS.8 +f= /% 9 +x8 Y% Y% x8 )_ F{ F{ )_ x8 x8 x8 x8 x8 x8 x8 x8 )_ F{ F{ I$ I$ Z% t& t& F{ )_ )_ )_ )_ F{ ", ">% >% '$ '$ '$ E# E# >% >% >% >% >% >% >% >% L@ L@ i k k o c+ c+ J J K K O# O# s b% F dd dd dd dd dd dd dd kC kC dd dd dd g~ g~ x5 I) G$ D }# }# }# ^% ^% ,& ~& R% R% !& )& Z& '~ 0 +a +b +c +d +e +ji f +g +h +i +j +k +l +m +n +o +p +q +OZ.r +s +|Y.-V.t +u +v +w +{N.kT.x +y +L^ I..&7 &7 C6 nT.:Q.8Y.z +YZ.A +B +C +.`.D +E +WD.F +F +G +H +%`.I +J +K +$h ^.Z@ '. R O Z ,% ~& T% R% u& S& [! L) S& S& S& S& S& S& S& &% |% 2b he he he ke ke ke -_ ;_ 2b he ke ke he 0' Z+ h. h. h. ~+ i+ V ,+ ]+ ]+ {+ {+ h. h. h. !% Lv.G6.G6.G6.WW.WW.|% |% <| 4c :& <& L +I! L +s+ M +jz.N +@8.N6.O +P +>`.Q +R + S.~,.{,.RZ Re.6j.S +T +S +U +V +W +X +Y +^z.^z.^z.bQ./z.Ww.Ww.8(.nK [s Z +oR $|.` + .+'} ..++.+@.+p0.#.+-' p% $.+%.+LT.NE bn.3`.&.+*.+p[.Q2.sD o&.5r.p[.LT.=.+`P -.+XF ;.+;.+2#.3#.m$.mI YJ u'.XJ ZJ >.+>.+ N +N ,.+'.+).+@M.`j.`j.`F FE zf.pI $[.$[.V` m+.T` T` *4.T:.KY.)W DX GY.O` .DR a) m* =5 ac fL.^{ m* m* m* m* m* m* m* m* m* m* m* m* m* m* m* m* m* m* O) :] :] O) m* m* }| O) O) :] }| }| O) +# !. !. 8# a# q$ ,_ )5 ^_ q$ q$ a# a# a# q$ ,_ )5 ti ti ui ui ui 5[ 5[ 5[ * fd 5[ ui ui ui 5[ 5[ :] :] :] :] :] :] :] :] >5 >5 >5 >5 >5 >5 >5 hu :y q3 q3 r} *) a) I$ F{ F{ F{ ^_ ^_ Ma Ma $| )5 Z% *) *) a) a) qj qj qj qj qj qj qj qj qj qj qj '5 '5 '5 '5 '5 '5 '5 '5 >5 >5 '5 ,5 ,5 ,5 '5 '5 ti 5[ fd ui pj `Y YY ti ui pj `Y YY ti 5[ 5[ ui F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ O( sM [U +2 +2 +2 +2 [U ZQ ZQ ZQ ZQ ZQ ZQ ZQ ZQ ZQ I$ F{ )_ )_ )_ )_ F{ I$ x8 x8 )_ )_ )_ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ t& t& x8 x8 F{ F{ Z F{ F{ F{ F{ F{ F{ F{ F{ t& Z% I$ )_ x8 x8 x8 x8 )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ )_ )_ x8 x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% x8 x8 )_ )_ F{ F{ F{ Y% Y% F{ F{ Y% Y% F{ x8 x8 x8 x8 x8 x8 x8 x8 Y% x8 )_ F{ F{ )_ x8 h*.1x.+s.+s.e; cN X[ F{ F{ Z Y% ,5 O* )i.)i.d7.O* O* x8 x8 x8 x8 x8 x8 x8 Y% Y% Y% x8 x8 x8 x8 )_ .Z .Z .Z .Z .Z .Z .Z .Z .Z .Z s6 s6 s6 s6 Is YY +C.OJ.OJ.OJ.uq.uq.!3.!3.$w 34.m`.m`.%u o`.xW XG hu t& T@ Z% x8 z<.Y% )_ )_ )_ )_ )_ )_ )_ )_ )_ Y% Y% x8 )_ )_ x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 k@.yq &w tk.tk.5*.c>.V_.kS UB n8.SY.n8.76.q`.q`.][.|.+1.+2.+VY.3.+cc.4.+zY 5.+`T >*.#{./Z v>.H@.z].ke.8y.6.+u(._6.v(.VS T:.Q*.D@.D1.]}.n+.u]..fc -L #v +s.cN cN x8 x8 O* O* O* O* Z Y% x8 )_ F{ F{ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 )_ x8 Y% Y% Y% Y% x8 )_ )_ )_ )_ x8 Y% Y% Z 61.cN #v #v #v cN cN x8 x8 )_ )_ ,5 ,5 Ds Ds Ds ,5 )L.}U }U }U }U }U }U }U uJ uJ uJ uJ uJ uJ uJ x8 .Z wn.vn.wn.s6 Is x8 Z Z Z }U }U ,b.c, c, uJ DR q} q} q} q} q} q} q} h*.cN cN X[ X[ cN cN h*.)_ )_ )_ )_ x8 x8 x8 x8 Z Z Y% x8 )_ F{ I$ I$ Ds Ds Ds Xl Xl Xl Xl Xl d7.d7.[].Ds Ds [].d7.Y% l*.w.+'- b* xi x.+T1.^[.8u.y.+z.+A.+A.+B.+C.+D.+E.+F.+G.+H.+I.+J.+K.+L.+M.+N.+O.+P.+Q.+R.+S.+T.+U.+V.+W.+X.+Y.+Z.+`.+ ++.++/ +6W.+++@++YJ.#++$++%++qB.&++f +js *++=++-++I;.l- ;++lW.>++f= vi k*.cN Y% Z x8 I$ Z% Z% F{ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ I$ I$ I$ )_ )_ x8 x8 x8 )_ ", ">% >% '$ '$ '$ E# E# >% >% >% >% >% >% >% >% L@ B{ 2$ %@ %@ %@ :l :l ;k ;k 90.90.xT.xT.YQ r F dd dd dd dd dd dd dd dd dd dd g~ E7 E7 E7 L_ r2.J# }# }# }# D ,% ,% ,& T% u& R% !& !& m& ,++'++)++!++~++wR.{++06 ]++GZ.^++/++(++_++:++<++[++}++|++1++q +2++K.Yi 7++8++YZ.A +`C 9++0++a++*V.b++c++d++e++f++g++h++i++j++k++l++(+ 51.W@ A. . ^% U% 9& Q% i> k+ l& {@ k+ k+ k+ k+ k+ k+ k+ !% |% 2b 2b he ke ke ke le =_ -_ ;_ he he he 2b $% Z+ i+ V ,+ ,+ ,+ V V {+ h. h. h. ~+ ~+ i+ ,' 1% xx.VW.VW.WW.WW.2b 2b fe oj m++n++6! ,L.W$.`f iP o++-o p++q++r++>r s++t++IO u++v++w++uo.>l.1i.!`.x++!`.y++ g.z++{`.]`.A++A++B++C++D++E++E++Ww.'~.],.F++G++'E.(y.hr h_.H++I++fW J++K++L++< M++N++O++P++bn.La.LT.Dp.F].Dp.p[.r'.p[.3%.bn.Ma.P++Q++b=.;.+R++@*.qe.7|.&P.YJ u'.{}.ZJ >.++N .K .N oL S++xI ).+T++(X.nI FE zf.zf.+ .b<.l+.S` m+.[..^-.U++V++qU W++X++P` c`.Y++rA.Z++`++6z. @+8z.Js.-_..@++@+@@+#@+$@+%@+&@+6P *@+=@+-@+;@+<>.>@+j* T0.,@+v` V9.]3.[4.AF y|.n; 51.UH.O* .o Hs )O -h O) O) O) O) O) O) O) O) m* m* m* m* m* m* m* m* .# .# m* O) O) m* .# .# O) .# .# O) }| }| O) .# j$ j$ j$ a# q$ q$ ,_ ,_ ^_ )5 ,_ q$ q$ q$ ,_ ,_ ti ti ti ui 5[ 5[ 5[ fd .* * 5[ ui ti ui 5[ 5[ }| d7 d7 d7 d7 d7 d7 d7 hu hu hu hu hu hu hu hu D, :y r} =) -) *) F{ )_ Z% Z% ^_ ^_ Ma Ma bc oh *) r} r} q3 q3 :y :y :y :y :y :y :y :y :y :y qj '5 '5 '5 '5 '5 '5 '5 '5 :] }| '5 ,5 O* O* ,5 ,5 pj ui 5[ ui pj YY pj ui 5[ pj `Y YY ui fd 5[ ti Z% Z% Z% Z% Z% Z% Z% Z% )_ )_ F{ I$ I$ Z% t& v$ FR ZQ [U +2 +2 [U ZQ ig [U [U [U [U [U [U [U [U t& Z% F{ )_ x8 x8 )_ )_ )_ )_ F{ F{ I$ I$ I$ I$ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ x8 Z% Z% x8 x8 I$ I$ x8 )_ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ I$ I$ F{ )_ x8 x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ )_ )_ x8 x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ )_ )_ F{ Y% Y% F{ F{ Y% Y% F{ x8 x8 x8 x8 x8 x8 x8 x8 Y% x8 )_ F{ F{ )_ x8 h*.h*.e; e; e; cN cN x8 x8 Z )_ '5 ,5 d7.)i.[].'5 O* x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% Y% Y% .Z .Z .Z .Z .Z .Z .Z .Z oh oh Is Is Is Is s6 `Y ~I.l`.l`.l`. F. F.Y1.Y1.24 34.m`.'@+%u o`.xW Kb LB x8 Y% x8 F{ I$ F{ x8 x8 x8 x8 x8 x8 x8 x8 x8 z<. Z Y% x8 x8 Y% Z z<.x8 x8 x8 x8 x8 x8 x8 k@.d- &w 5*.2I .H )@+!@+~@+SY.)U SY.~U q`.}5.Us.{@+]@+[3.^@+/@+(@+>w.n!.4S _@.fx.|:.G_.VS U++z].v>.U2.a^.a^.u(.#B._@+F_.a3.-(.W` E!.E!.n+.d|.Z` 5Z :@+<@+<@+[@+}@+MU A7.1J.2J.m~.n~._6.q/.x'.r$.)*.bb.j~.>{.>{.E@.6^.8^.8^.B_.G@.+[.fZ fZ fZ uY Sh.|@+1@+2@+NU f4.e..*x.-x.8q.*x.;f.~d.{C.bD.t1.3@+U^ (> 4@+}$.]l v3.5@+6@+7@+T].8@+9@+0@+a@+b@+1t.c@++W.,k.d@+na.e@+=* ;i.s.+f@+g@+h@+dH.i@+;p.Ds ./ 1].ae.SS.j@+j@+l*.2x.c8 c8 .Z .Z gA gA gA gA x8 x8 F{ F{ F{ )_ Y% Z x8 x8 x8 x8 x8 x8 x8 x8 )_ x8 Y% Z Z Y% x8 )_ )_ x8 x8 x8 Y% Y% Z 61.h*.e; e; e; h*.h*.Y% Y% )_ x8 O* KB d7.[].[].,5 )L.}U }U }U }U }U }U }U uJ uJ uJ uJ uJ uJ uJ x8 s6 zm.wn.Js Is oh )_ x8 Z Z `Q }U c, c, c, %n cT X[ X[ X[ X[ X[ X[ X[ cN X[ X[ q} q} X[ X[ cN F{ F{ )_ )_ x8 x8 Y% Y% Z Z Y% x8 )_ F{ I$ I$ Xl Xl Xl Xl Xl Ds Ds Ds )i.d7.[].Ds Ds [].d7.O4 k@+l@+m@+w.+n@+o@+p@+[= q@+r@+s@+t@+u@+v@+w@+x@+y@+z@+A@+B@+C@+D@+E@+F@+G@+H@+I@+J@+K@+L@+M@+N@+O@+P@+U.+Q@+R@+S@+T@+U@+V@+W@+X@+Y@+Z@+`@+ #+w@+.#+qB.2A._T.+#+% >% '$ '$ '$ E# E# >% >% >% >% >% >% >% >% L@ B{ h 2$ h e j mn M Q@ c+ O@ |# !s r q F dd dd dd dd dd dd dd dd g~ g~ E7 E7 7c 7c 4c ]= UO UO '= F ,% >% h> x )* s$ x* w* )D L; *#+=#+-#+;#+>#+,#+'#+)#+!#+~#+dT.{#+:Y.]#+^#+/#+(#+_#+:#+<#+[#+}#+|#+1#+QZ.4++2#+t +3#+pL.v +tO.z +/3 4#+N^ Se Se >K.{V.JW.5#+6#+B +7#+8#+9#+0#+a#+b#+-T.c#+d#+e#+f#+g#+h++h#+i#+j#+O@ k#+X[ X N@ U+ R% Q% R% i> u& i> u& i> u& i> u& i> u& i> ,' |% 2b 2b he ke ke le le 0c =_ ;_ 2b he 2b ;_ &) Y+ V C }# }# C V i+ h. h. ~+ ~+ i+ i+ i+ 6c *_ 6% 6% 6% 1% -H.2b 2b T_ [4 -5 14 m++:& <& [& &h Ns l#+gJ m#+n#+o#+p#+JO ;Z.q#+u++|G r#+s#+t#+u#+u#+QW QW 4Y Ww./z.C++]`.v#+]`.w#+w#+x#+y#+E++9A.!8.z#+],.w%.-A 8V.rH fr t= A#+B#+kR f9.C#+Ia.D#+E#+F#+0K.Uh.|`.G].G].G].tD G#+H#+)` I#+J#+K#+vs.>C L#+As.&*.4#.f=.8|.&P.%T kO ZJ ZJ f~.YJ AU M#+N#+OT.N#+M#+(X.`F GE `F nI D_.. .$[.W` ]}.^%.U` W` /}.L` L` r]._..(..qA.O#+P#+Z++6z.8z.Q#+R#+UJ Yq.Qn.@J.7l.8l.S#+BA T#+U#+V#+4D W#+X#+Y#+iy.bX.Z#+hH.W .zV.DV.DV.c>.R; `#+ $+.$+a) I$ )_ )_ -) -) -) -) -) :] :] :] m* m* m* =5 C, =5 =5 =5 +# .# .# m* m* .# .# +# .# +# +# h+ :] Z% :] h+ q$ q$ q$ a# a# a# a# j$ Is oh ^_ ,_ q$ q$ q$ q$ ti ti ti ui 5[ 5[ fd fd 2% .* fd ui ti ui 5[ fd >5 >5 hu >5 hu >5 hu >5 hu >5 hu >5 hu >5 hu hu %n qj r} -) -) *) F{ )_ t& t& )5 ^_ ^_ bc Is Is *) *) r} a) q3 qj :y qj :y qj :y qj :y qj :y qj '5 pj '5 '5 '5 '5 '5 '5 O) :] >5 ,5 O* O* F;.O* YY ti ui ui pj pj ti 5[ 5[ pj gA `Y ui fd 5[ ti Z% Z% Z% Z% Z% Z% Z% Z% x8 x8 )_ F{ Z% t& T@ T@ c8 ig sM [U ec ZQ FR 2x.cc +2 cc +2 cc +2 cc cc h+ t& I$ )_ Y% Y% x8 x8 F{ F{ F{ I$ I$ Z% Z% Z% F{ F{ F{ F{ F{ F{ F{ F{ Z% I$ I$ F{ )_ )_ x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ Y% I$ I$ x8 x8 Z% Z% )_ x8 x8 x8 x8 x8 x8 x8 x8 Z Y% )_ I$ Z% Z% I$ F{ Y% Y% Y% Y% Y% Y% Y% Y% F{ F{ )_ )_ x8 x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ )_ )_ x8 x8 x8 x8 F{ Y% Y% F{ F{ Y% Y% F{ x8 x8 x8 x8 x8 x8 x8 x8 Y% x8 )_ F{ F{ )_ x8 Y% X[ g7 cN cN h*.61. Z z<.Y% F{ }| >5 O* KB Ds }| x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ x8 x8 Y% Z Z z<..Z .Z .Z .Z .Z .Z .Z .Z )5 ^_ ^_ oh Is Is s6 `Y uM uM uM uM ]_ ]_ Xl Xl K> Ds X0.+$+Q9.^Y wW Kb qj 7}.%U.7}.t& /. t& Y% Z Z Z Z Z Z Z Z @$+=L gA s6 s6 Y% z<.7}.x8 x8 cN cN cN k@.k@.B|.Q; *o.ed..H (O PG K,.#$+V`.V`.]c.=<.v|.v|.4}.j8./@+*u.FQ $$+S-.OJ bz.yY s/.7y.U2.ke.a3.E_.v>.'x.V:.%$+(}.W:.a3.VS T,.*4.W` m+.+ .u].s9.aZ q(.ab. B.&$+*$+=$+A7.-$+Fs.;$+|2.>$+FE.p~.q/._X ,$+22.D_.'$+UP Y` Zm.E@.qI |..FE ,>.+D.SX a<.>}.+D.|o.)$+!$+Fs.Io.=x.GE.{d.#c.]{.-'.H!.*G.sF.~$+{$+X# b.+]$+[- R< ^$+/$+: .($+_$+:$+x;.9@+<$+[$+}$+lv.|$+-r 1$+*m e@+2$+lF 3$+4$+5$+6$+7$+8$+U6.9$+ZY j; ;L 0e.0e.b* |].l*.2x.3x.3x.O4 O4 w8.w8.w8.w8.F{ I$ I$ I$ F{ Y% z<.8}.x8 x8 x8 x8 x8 x8 x8 x8 )_ x8 Y% z<.z<.Y% x8 )_ Y% Y% Y% Y% Y% Y% Y% Y% h*.e; h*.h*.h*.h*.Y% Y% x8 x8 KB ZY ZY KB [].O* }U }U }U }U }U }U }U }U uJ uJ uJ uJ uJ uJ uJ uJ Is Js O4 .Z oh ^_ F{ x8 Z Z `Q }U uJ uJ D, %n h*.h*.h*.h*.h*.h*.h*.h*.X[ X[ q} O( O( q} X[ X[ F{ F{ )_ )_ x8 x8 Y% Y% Y% Y% x8 x8 )_ )_ F{ F{ b, 34 34 Xl Ds ({ O* O* ,v.KB O* ,5 dt uJ }U Ys.vJ 0$+:R.'++a$+b$+c$+d$+e$+f$+g$+h$+i$+j$+k$+l$+m$+n$+o$+p$+q$+r$+s$+t$+u$+v$+w$+x$+y$+z$+A$+B$+C$+D$+E$+F$+G$+H$+I$+J$+K$+L$+M$+5W.N$+O$+P$+ZJ.Q$+R$+S$+T$+ks U$+V$+W$+X$+x; Y$+yZ.2* l*.Z$+<$ L$ hd F{ F{ Z% t& F{ Y% I$ I$ I$ I$ I$ I$ hu I$ F{ F{ )_ )_ x8 Y% Y% Y% )_ x8 Y% Z Y% )_ ", "l + 0 0 l E D n E D }# }# D E n ,% P U% P '$ <# '$ o D G }# u D o n l g~ xn.xn.xn.xn.xn.xn.xn.xn.xn.xn.je je ie ie ge >i.R`.SO N_ <| x5 )& O& `$+ %+.%++%+@%+#%+$%+%%+&%+*%+=%+-%+;%+>%+,%+'%+)%+!%+~%+{%+]%+^%+/%+(%+_%+:%+<%+[%+[%+}%+|%+1%+NZ.2%+r +3%+:Y.4%+4%+5%+6%+7%+8%+9%+0%+a%+NI /N.8++b%+c%+d%+e%+f%+g%+h%+i%+j%+k%+l%+m%+5/.n%+eQ.o%+p%+q%+r%+M( c( s%+V@ %. d& L) c& L) {2 L) q& R% q& R% q& R% q& R% l:.0' != != != != != != != != != != != != != != != T$ {@ l& i> Q% 9& U% ^% l& l& l& l& l& l& l& #% $% %% %% %% %% $% $% $% $% $% d= d= d= d= d= @ ^& S S@ P; AR Qx.t%+t2.u%+v%+nn.w%+x%+y%+z%+C).:B z#+A%+B%+C%+D%+E%+X +{`.w#+z++F%+F%+G%+G%+F%+Sd.9A.H%+A%+v++I%+A).3j.J%+Ht K%+L%+M%+N%+O%+P%+Q%+R%+S%+T%+p;.U%+_{.7:.V%+`C.W%+X%+X%+Y%+Z%+`%+{@.}#.Fp.Q++k/.]@.sY +D.nN.hX.*T mI mI u'.g,.kO g,.FU &+a<.Pp.Pp.ZF Mo.iD EE EE iD lD ,}.}W b<.b<.;{.s9.u].[q.1...&++&+Js.VJ @&+R#+#&+Kt.Js.$&+%&+&&+hc.U,.]7.0z.=D.:S.*&+!P.>).7D m!.=&+=&+ C *;.'q.-&+l#+%v ;&+M +@H )@+BJ P(.Gj.Ck >&+]O <[.7>.>k >k :* :$ +% @% d7 :] 4! o3 f% ~_ v% fL.w4.ac fd * 2% 2% .* T@ t& /. [. +% e# s% <* -) t& a# * fd fd 5[ ui ui ui pj ti ti ui 5[ 5[ fd fd .* * fd 5[ ui ui 5[ 5[ fd fd fd fd fd fd fd fd oh )5 t& q$ T@ ,_ Z% oh [. a# h+ q$ t& )5 Z% Z% x8 )_ qj I$ I$ F{ )_ x8 T@ t& t& t& Z% )5 I$ I$ I$ Z% -) t& *) I$ %n Y% uJ F{ *) I$ %n x8 %n I$ Is Ma ^_ oh s6 s6 F{ Z% )_ F{ *) -) -) *) :y %n '5 pj YY YY `Y gA gA gA `Y `Y YY YY pj ti ti ti ,_ q$ a# q$ ^_ oh oh )5 ,_ ,_ )5 ^_ ^_ )5 ,_ ,_ F{ q} F{ q} F{ q} F{ q} I$ O( I$ O( I$ O( I$ I$ a) a) a) qj %n %n uJ uJ `Q }U uJ uJ uJ uJ }U `Q x8 )_ F{ Z% Z% F{ )_ x8 I$ I$ I$ I$ I$ I$ I$ I$ x8 x8 x8 x8 x8 x8 x8 x8 I$ x8 x8 Z% Z% x8 x8 I$ x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% x8 x8 )_ )_ F{ F{ s6 s6 Is Is oh ^_ ^_ )5 j$ ,_ s6 =L =L .Z ^_ q$ F{ )_ x8 Y% Y% x8 )_ F{ t& x8 Z Y% Y% Z x8 t& F{ )_ x8 Y% Y% x8 )_ F{ Y% Y% Y% x8 )_ F{ F{ F{ Z x8 )_ I$ I$ )_ x8 Z F{ F{ )_ )_ x8 x8 Y% Y% Y% h*.Y% Y% Y% Y% Y% Y% I$ )_ Y% x8 I$ t& >5 x8 s6 s6 Is Is oh ^_ ^_ )5 Is Is s6 s6 .Z O4 O4 =L Y% Y% Y% Y% Y% Y% Y% Y% Z Z Z Z Z Z Z O4 8e.8e.8e.9e.YY YY '5 '5 '5 '5 LB LB Ka Ka Ka qj ;q.1x.1x.1x.1x.1x.z<.z<.)_ )_ O* O* KB ZY ZY 8g.9e.,&+(D.P9.C' 5[ Is O4 61.X[ ER dT X$.'<.j~ Ak `l E|.,3.=R U1.][.@;.@;.9c.9c.#a.1}.'&+)&+n|.!&+ex.t(.xY )*.{7.ke.V:.G_.pU :R e3.z].e3.v>.B}.s(.od.V|./Z a3.od.od.:R FP FP od.B}.U` !_.T` <..yz.>a.~&+{&+]&+^&+/&+(&+_&+h3.:&+_X L8.<&+[&+}&+b^.>}.rI _X.GE j.`F M#+|&+1&+g,.N#+^X.2&+g,.3&+>>.4&+5&+6&+@c.42.2:.ux..=.[d.7&+8&+VW.N~.9&+0&+a* a&+b&+c&+DT.d&+e&+@V f&+-=.0-.ea.FS.Hd.Hc.G5.g&+h&+i&+1 .F=.j&+k&+oJ bN l&+m&+;,.^Y q` :y q3 2( -L me fc fc i*.#v e; e; 5 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% Y% Y% Y% Y% Y% Y% Y% x8 )_ F{ F{ )_ x8 Y% Y% h*.Y% Y% Y% Y% Y% Y% Z Z Z Z Z Z ZY Z }U ,b.,b.,b.,b.,b.,b.,b.^D.75.75.,b.c, c, D, %n Z .Z x8 x8 x8 x8 Y% Z Z Z Z Z Z Z `Q Z I$ )_ x8 Z Z x8 )_ I$ )_ )_ F{ I$ F{ x8 Z z<.Z% F{ x8 )_ I$ I$ F{ x8 F{ F{ F{ )_ x8 Y% Y% Y% Xl Xl ]_ ]_ pj p] oh oh c8 q} e; n&+B|.^; >;.OV c! o&+p&+q&+s^ r&+e .s&+t&+u&+v&+w&+x&+y&+z&+A&+B&+C&+D&+E&+F&+G&+H&+I&+J&+K&+L&+M&+N&+O&+P&+Q&+R&+S&+T&+U&+V&+W&+X&+Y&+Z&+`&+ *+.*++*+@*+#*+$*+%*+&*+Q$+**+=*+-*+;*+>*+,*+'*+)*+!*+gd ER DR k@.cc HB ec ec ec sM )_ )_ x8 x8 F;.F;.F;.F;.]Y F;.Y% Y% x8 x8 )_ )_ F{ F{ Z% F{ Y% z<.7}.z<.", "l + 0 + l E D n E D }# }# D E n >% ,% U% ^% '$ E# >% ,% ,% ^% ^% ^% ^% ,% >% ._ g~ xn.xn.xn.xn.xn.xn.xn.J6 J6 xn.xn.je je je fe ~*+{*+;V zW p} F7 )& N& `$+]*+^*+/*+(*+_*+:*+<*+[*+}*+|*+1*+IM.2*+3*+4*+5*+6*+7*+8*+9*+0*+9*+[%+a*+b*+c*+d*+e*+<%+9*+(%+f*+|++g*+{%+h*+i*+i*+j*+k*+l*+m*+n*+o*+p*+p*+AL.q*+r*+s*+t*+u*+v*+w*+x*+y*+z*+A*+k%+B*+C*+D*+E*+F*+ B G*+H*+I*+J*+K*+L; L*+D& S~ !& Z& T~ 7& L2 D& D& D& D& D& D& D& u& 8c 3c 3c 3c 3c 3c 3c 3c != != != != != != != Z+ #% l& k+ i> Q% 9& 9& 9& l& l& l& l& l& l& l& l& $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% Z+ h. E. &. H ^.M4 |'.M*+N*+O*+P*+Q*+R*+S*+T*+49.*^.=E.YR.U*+V*+D%+E%+ZR.z++F%+F%+G%+G%+W*+G%+X*+Sd.'8.vo.Y*+Z*+`*+Tv.9Q a| =+.=++=+M%+@=+#=+$=+%=+l_.S<.`v.[{.Ay.&=+=+,=+'=+!u.k/.#$.GA ->.B .uY nN.tY +D.+[.&P.A_.mI ^X..D.Pp.Mo.PX a<.Pp.Pp.Pp.ZF Mo.lD kD kD iD EU DU |H K K TP 5H TP .j.zl.Sp.Js.)=+#(.R#+#&+6y.+&+x!.!=+~=+;0.{=+1b.LY.]=+^=+T#.;M.3g./=+(=+-%._=+tX :=+<=+oF [=+}=+e7.0*.|=+1=+2=+#H 15.!U 3=+T0.v8.e- Q; 7>.&o.[+.=) '. [] 4! =5 I> I> I> 4=+fL.ed * .* .* .* * T@ t& h+ h+ e# e# e# <* <* w$ m* * * fd fd 5[ 5[ 5[ ui ui ui ui ui 5[ 5[ 5[ .* * fd 5[ 5[ 5[ 5[ fd 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ^_ )5 ,_ q$ q$ ,_ )5 ^_ )5 )5 ,_ ,_ ,_ ,_ ,_ ,_ )_ F{ I$ Z% Z% I$ F{ )_ t& t& Z% Z% I$ I$ I$ F{ )_ F{ I$ Z% Z% I$ )_ x8 x8 F{ Z% I$ )_ x8 F{ ^_ Is Ma Ma bc s6 s6 F{ Z% )_ F{ *) -) =) r} :y %n >5 pj pj pj YY `Y `Y `Y YY YY pj pj ti ti ui ui ^_ ,_ q$ ,_ oh Is ^_ )5 ,_ )5 ^_ ^_ ^_ ^_ )5 ,_ F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ I$ I$ I$ I$ I$ I$ a) a) a) qj %n %n %n uJ uJ %n %n qj qj %n %n uJ x8 )_ F{ I$ I$ F{ )_ x8 F{ F{ F{ F{ F{ F{ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 I$ x8 x8 Z% Z% x8 x8 I$ x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% x8 x8 )_ )_ F{ F{ Is Is Is Is oh oh oh oh q$ ^_ s6 O4 =L .Z Is ^_ F{ )_ x8 Y% Y% x8 )_ F{ t& x8 Z x8 x8 Z x8 t& F{ )_ x8 Y% Y% x8 )_ F{ x8 x8 x8 x8 )_ )_ )_ )_ x8 x8 )_ )_ )_ )_ x8 x8 F{ F{ )_ )_ x8 x8 Y% Y% )_ )_ )_ )_ )_ )_ )_ )_ Z% )_ x8 x8 I$ Z% F{ Y% oh oh oh oh Is Is Is Is s6 s6 s6 s6 .Z .Z .Z .Z Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% .Z s6 Ks Tt Tt Is Is F{ F{ Z Z `Q `Q 75.75.75.`Q 51.h*.h*.h*.h*.h*.Y% Y% x8 x8 O* KB KB KB KB gA ~I.5=+5=+hf._y Ma s6 6=+X[ #v }P.}P.s} l> 0}.X'.pP `r.,3.;3.J,.4}.7=+(b.p|.8=+9=+0=+a=+b=+c=+d=+x(.!_.+1.N-.e3.od.od.B}.B}.l4.l4.v>.od./Z :R E1./Z :R :R FP R:.4v.w6.FP :R od.v>.l4.s(.s(.B}.*4.-a.e=+f=+g=+g=+g=+M8.h=+i=+z'.>2.vV wV wV j=+H_.9h._X.T++M#+2&+k=+k=+T++N#+1&+1&+1&+N#+l=+3&+s'.m=+n=+o=+{{.p9.p=+_r.q=+r=+s=+t=+u% #. u=+/&.qu.v=+w=+x=+g.+h%.~Q iJ.-=.y=+e:.z=+A=+iJ.B=+C=+D=+E=+u_ 2 .e>.4& 3$ =V -+,-+'-+)-+!-+~-+{-+]-+^-+/-+(-+_-+:-+<-+[-+}-+2Y.|-+1-+2-+Sn 3-+-Q.4-+5-+w.+6-+7-+dT :* Z@ +2 HB tM tM ec sM )_ )_ x8 x8 F;.F;.]Y ]Y ]Y F;.)L.Y% x8 x8 )_ )_ F{ F{ I$ F{ Y% Z z<.Y% ", "l + + l n E D n E D }# }# D E n E# >% ^% ,% >% '$ ,% U% U% U% U% 9& U% ^% ,% M_ g~ xn.xn.xn.xn.xn.xn.xn.up.up.J6 J6 J6 xn.xn.ee 7t.8-+;V zW p} }9.Z& Y& `$+9-+0-+a-+b-+c-+d-+e-+,| f-+g-+}O.v@+h-+i-+NZ.j-+k-+l-+m-+n-+o-+n-+p-+q-+r-+s-+t-+u-+e*+[%+v-+w-+x-+o +y-+y-+z-+A-+B-+C-+D-+E-+F-+G-+H-+ZZ.I-+J-+K-+L-+M-+RZ.N-+O-+P-+Q-+R-+S-+T-+U-+V-+W-+X-+Y-+FZ.C%.sK %9 t' Z-+Jn z|.L2 =^ Zl {2 r& !& c& m& m& m& m& m& m& m& C& 8c 3c 3c 3c 3c 3c 3c 3c != != != != != != != Z+ ,' i> i> i> i> i> i> i> l& l& l& l& l& l& l& l& 0' 0' 0' 0' 0' 0' 0' 0' $% $% $% $% $% $% $% $% T$ m@ j+ '. =. (+ CB `-+ ;+.;+N*+O ++;+-r @;+'Q #;+$;+o{.]V ZL A%+vo.)8.ZR.Se.%;+%;+G%+G%+G%+F%+&;+*;+9A.'8.=;+KL.B).yu.M<.-;+;;+%1 >;+,;+';+);+>1 !;+~;+{;+];+r0.YL.<_.&=+^;+vz./;+(;+_;+:;+`%+hb.m9.|E.U).->.Ef.**.#j.S{.Sh.f,.@j.y_.&'.B_.,>.+D.GU ZF a<.Pp.GU .D..D.+D.&T a<.lD kD iD }W .G DU ji.ji..j.3H 3H Eg.zl.Oo.0O Wu.@&+#(.#(.<;+[;+GX !=+};+};+|;+1;+^7.]=+FF.EF.2;+;M.e`.cy (=+3;+4;+5;+6;+[O +u.7;+v#.1c.5*.(x.<4.#H 06.74.74.id.'3.>v.8;+{> M~.B|.:* =. @% m* O) ac ac ed &5 =5 * .* .* .* h+ T@ t& Z% T@ T@ T@ h+ e# e# e# u$ .# .* * * * fd fd fd 5[ 5[ 5[ ui ui ui ui ui 2% .* * fd 5[ fd fd fd ui ui ui ui ui ui ui ui ^_ )5 ,_ ,_ ,_ ,_ )5 ^_ Is oh oh ^_ )5 ,_ q$ q$ I$ I$ Z% t& t& Z% I$ I$ Z% I$ I$ I$ F{ F{ )_ )_ Y% x8 )_ F{ F{ F{ )_ )_ )_ I$ Z% I$ )_ )_ F{ )5 Is Ma Ma bc s6 s6 F{ Z% F{ I$ a) *) r} q3 q3 qj >5 ti ti pj pj pj YY YY ti ti ti ti ui ui ui ui s6 oh )5 ^_ oh Is ^_ ,_ ^_ ^_ oh Is Is oh ^_ ^_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ I$ I$ F{ F{ F{ )_ )_ )_ )_ F{ I$ I$ I$ I$ F{ )_ )_ )_ F{ I$ I$ F{ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 I$ x8 x8 Z% Z% x8 x8 I$ x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ )_ )_ oh oh oh Is Is Is Is s6 oh Is s6 .Z .Z .Z .Z s6 F{ )_ x8 Y% Y% x8 )_ F{ Z% x8 Z x8 x8 Z x8 Z% F{ )_ x8 Y% Y% x8 )_ F{ )_ )_ )_ )_ x8 x8 x8 x8 %n %n uJ uJ uJ uJ %n %n %n %n %n %n uJ uJ uJ uJ F{ F{ F{ F{ F{ F{ F{ F{ Z% I$ )_ )_ F{ F{ x8 Z )5 ^_ ^_ oh Is s6 .Z .Z .Z .Z .Z s6 s6 s6 s6 Is Y% Y% Y% Y% Y% Y% Y% Y% x8 x8 x8 x8 x8 x8 x8 s6 oh bc bc bc oh Is )_ )_ z<.z<.;q.;q.^D.^D.^D.;q.cT X[ X[ X[ )_ )_ )_ )_ Y% Y% Y% Y% KB O* O* `Y 8e.,&+,&+Js Is s6 Z .B}.l4.s(.^X q6.>a.g;+o~.o~.h;+i;+i;+d4.0[.:X I_.v$.v$.v$.X:..$.lD FU .D.GU FU ZF a<.FU GU +D.+D.+D.+D.rQ.S{.%w.Qq.Z8.#c.p9.j;+k;+l;+m;+k<.8H..^ s# := xq.bL.n;+o;+p;+q;+r;+pW s;+FO t;+t;+u;+v;+w;+x;+y;+z;+(Y ^[ A;+P; s. 9! 5 #U.B;+#U.d7.gA .Z .Z c8 Y@ 1{ )' 2+.X'.`r.C;+D;+E;+F;+G;+K=+H;+I;+J;+K;+L;+M;+N;+O;+P;+Q;+R;+S;+T;+U;+V;+U.+W;+X;++-+Y;+Z;+`;+ >+.>+*-++>++>++>+@>+>-+#>+$>+%>+&>+*>+=>+->+;>+eZ.WX.>>+,>+'>+)>+!>+~>+{>+1-+2-+]>+ > ^>+/>+(>+_>+:>+<>+}c.2( i. +2 HB tM tM ec sM )_ )_ x8 x8 F;.F;.]Y ]Y ]Y F;.F;.x8 x8 x8 )_ )_ )_ )_ F{ )_ x8 Y% Y% )_ ", "l l l n E E D n E D }# }# D E n K@ '$ ,% ,% >% >% ^% 9& U% 9& 9& 9& 9& U% ^% O6 g~ xn.xn.xn.xn.xn.xn.xn.lo.lo.up.up.J6 J6 J6 ee [>+}>+,B q: f+ R% S% jP.|>+9-+1>+2>+3>+4>+w- 5>+6>+7>+8>+v@+3I.9>+0>+a>+b>+c>+d>+e>+f>+g>+h>+i>+j>+s-+k>+b*+l>+u-+u-+m>+n>+o>+p>+q>+r>+s>+t>+u>+v>+w>+x>+y>+z>+A>+B>+dT.=V.C>+D>+)%+E>+F>+G>+H>+I>+J>+K>+L>+2F.V-+M>+N>+O>+P>+Q>+w7 /( x/ R>+g_ Cf *L S>+rS D& {2 {2 7& 9- 9- 9- 9- 9- 9- 9- S& 9c 4c 4c 4c 4c 4c 4c 4c != != != != != != != Z+ 6c Q% i> i> k+ k+ l& l& l& l& l& l& l& l& l& l& 0' 0' 0' 0' 0' 0' 0' 0' $% $% $% $% $% $% $% $% &) M$ t% j+ j+ =. 9. Ja T>+U>+>q u2.E;.6u.V>+W>+C<.8-.49.lt X>+Y>+`L RZ H%+Z>+`>+ ,+ ,+.,+.,++,+&;+@X.bQ.9A.,~.>~.}i.-A 4i.t:.#P @,+eQ.Gt ]8.#,+$,+%,+&,+*,+O~ =,+;% zx -,+&=+^;+ D.;,+>,+,,+'=+',+Gg.Ef.Ef.5r.5r.{_.+k..k.Sh.Nk.Nk.Z{.4^.]-.aR 7..*T GU .D.[H qQ.[H +D.rQ.*T Pp.Mo.PX lD kD GE zf.3H .j.Eg.Eg.Al.Oo.Nr.Eg.WJ 0O Js.#&+<;+),+!,+~,+{,+],+};+)2.^,+,-.^7.MY.FF.2;+2S ]R ]R /,+{R 6P (,+9y JJ _,+Pj..C.:,+Os `0.DV.<4.<,+96.06.[,+CJ 6*.X1.h@.7*.J! e- _* :$ @% -) }| }| :] m* .# 2% .* .* .* h+ T@ t& Z% t& t& T@ T@ e# /$ /$ /. * * * * * * * * fd fd 5[ 5[ ui ti ti pj 2% .* * fd fd fd fd * ti ti ti ti ti ti ti ti )5 )5 )5 ,_ ,_ )5 )5 )5 oh oh oh ^_ ^_ )5 )5 )5 Z% Z% Z% t& t& Z% Z% Z% I$ I$ F{ F{ )_ )_ )_ x8 Z Y% x8 x8 )_ F{ F{ F{ )_ I$ Z% Z% F{ )_ F{ )5 Is Ma Ma bc s6 s6 F{ Z% I$ I$ a) a) q3 q3 q3 a) >5 ti ti ti ti ti ti ti ui ui ui ui ui 5[ 5[ 5[ O4 s6 oh oh Is Is ^_ ,_ ^_ oh Is Is Is Is oh ^_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ F{ I$ I$ I$ I$ F{ )_ )_ F{ F{ F{ F{ F{ F{ )_ x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 I$ x8 x8 Z% Z% x8 x8 I$ x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ )_ )_ ^_ oh oh Is s6 s6 .Z .Z s6 s6 s6 s6 s6 .Z O4 =L )_ )_ x8 x8 x8 x8 )_ )_ Z% Y% Z )_ )_ Z Y% Z% F{ )_ x8 Y% Y% x8 )_ F{ F{ F{ F{ )_ x8 Y% Y% Y% a) %n uJ `Q `Q uJ %n a) %n %n %n %n uJ uJ uJ uJ )_ )_ )_ )_ )_ )_ )_ )_ Z% I$ F{ )_ x8 x8 Z z<.oh oh oh Is s6 s6 s6 .Z O4 .Z .Z s6 Is Is oh oh Y% Y% Y% Y% Y% Y% Y% Y% )_ )_ )_ )_ )_ )_ )_ Is )5 $| Ma bc oh Is )_ x8 Y% Y% }U }U ,b.,b.,b.}U cT X[ X[ X[ )_ )_ )_ )_ z<. Z Z Y% O* O* ,5 ,5 .Z O4 O4 3x.O4 61.1x.},+xF X$.ZG k`.o; uF _[.|,+1,+x|.U1.2,+'U 9c. 0.4@.%v.O_.:b.3,+4,+5,+6,+%[.32.qy.f;+~C.E_.Kz.p/.j5.7,+|2.*4.8,+V|.)).S,.a3.E1.od.:R /Z /Z od.Q:.B}.B}.v>.v>.Q:.v>.l4.!_.03.TN.9,+>$+>$+>$+#0.y'.h3.<6.<&+t$. U }&+:@.+U ,$+gZ Pp.FU Pp.ZF Pp.GU +D.FU *T qQ.rQ.rQ.qQ.rQ.W).bR %w.{{.0,+:-.n[.Q>.a,+b,+aq..^ n& ^@ k^ c,+d,+e,+U!.~V #Z.f&+f,+)Q JL g,+%L.q#+!=.h,+i,+j,+k,+l,+z| %h N$ *h =j #~.AP.+=-+I,+J,+K,+L,+@>+M,+N,+T&+O,+&>+P,+Q,+R,+S,+T,+U,+>>+_-+,>+V,+!>+qL.{>+W,+X,+17 Y,+Z,+`,+ '+.'++'+@'+>p.51.'_ +2 HB tM tM ec sM )_ )_ x8 x8 F;.F;.]Y ]Y ]Y F;.F;.x8 x8 x8 )_ )_ )_ )_ )_ )_ x8 x8 )_ F{ ", "l n E E E E E n E D }# }# D E n K@ '$ ,% ,% >% >% ^% 9& U% 9& 9& 9& 9& U% ^% O6 g~ xn.xn.xn.xn.xn.xn.xn.lo.lo.up.up.J6 J6 J6 ee r.+}>+,B q: f+ R% S% jP.#'+$'+%'+&'+*'+if.zw.='+-'+;'+>'+,'+''+K.+e*+)'+!'+~'+{'+]'+^'+/'+^'+('+_'+:'+<'+['+}'+|'+1'+2'+3'+4'+5'+6'+7'+8'+q>+9'+0'+a'+b'+c'+d'+e'+f'+4++4++g'+4*+E>+h'+i'+j'+H>+k'+l'+m'+n'+o'+CG.b++p'+q'+EC.r'+s'+hw t'+Ej 2[ Gg u'+og S& 7@ ~& S& ~& S& S& S& S& S& S& S& S& 8c 3c 3c 3c 3c 3c 3c 3c != != != != != != != Z+ 6c Q% i> k+ k+ l& {@ {@ l& l& l& l& l& l& l& l& 0' 0' 0' 0' 0' 0' 0' 0' $% $% $% $% $% $% $% $% ~% %% %% M$ M$ {+ F. *. o+ Hb Qx.%#.v'+sw w'+wx dl x'+e&+y'+`G.z'+QC.:B +m.5Y 5Y `>+`>+ ,+ ,++,+A'+GT.^z.bQ.3Y ,~.O;.~i (j _z.&7.B'+Dq.1s Hk S{ C'+fW @d.D'+&S.E'+#.+Z$ F'+3-.G'+H'+HB.P{.I'+J'+Ff.`*.4J.n9.o9.K'+:-.}a.>4.e<.!{.!{.!{.L'+k5.h&.M-..D.*T [H rQ.qQ.*T FU qQ..D.Pp.a<.a<.ZF a<.pe.g,.qI G Zm.UP TP .j.zl.3H .j.zl.Uq.Sp.)=+),+M'+N'+u!.O'+P'+)2.^,+Q'+b8.MY.R'+BQ.RN.OJ 2S S'+T'+U'+V'+N_.>H 8X.W'+qf.~].+t.(O }y ~L {L X'+Y'+Ci.t^.Dk Z'+Ii.>;.>;.v8.90 e- c# 2( a) a) *) s% @% /. [. h+ h+ T@ T@ T@ T@ t& t& T@ T@ h+ [. [. /. fd fd fd fd * * * * fd fd 5[ 5[ ui ti ti pj 2% .* * fd 5[ 5[ fd fd ti ti ti ti ti ti ti ti ,_ )5 )5 )5 )5 )5 )5 ,_ )5 )5 )5 ^_ ^_ oh oh oh t& Z% Z% Z% Z% Z% Z% t& I$ I$ F{ F{ )_ )_ )_ x8 Y% Y% Y% x8 x8 )_ F{ I$ F{ Z% t& Z% F{ F{ I$ ,_ Is Ma Ma bc s6 s6 F{ Z% I$ I$ a) a) q3 q3 q3 a) >5 ti ti ti ti ti ti ti 5[ 5[ 5[ ui ui ui ui ui O4 s6 oh oh Is Is ^_ ,_ ^_ oh Is Is Is Is oh ^_ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ F{ x8 )_ F{ F{ F{ F{ )_ x8 F{ F{ F{ )_ )_ F{ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 I$ x8 x8 Z% Z% x8 x8 I$ x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ )_ )_ x8 x8 x8 x8 oh oh Is Is s6 .Z .Z O4 .Z s6 Is Is s6 .Z O4 @$+x8 x8 )_ )_ )_ )_ x8 x8 I$ Y% Z F{ F{ Z Y% I$ F{ )_ x8 Y% Y% x8 )_ F{ F{ F{ F{ )_ x8 Y% Y% Y% a) D, c, 75.75.c, D, q3 c, c, c, c, D, D, D, %n x8 x8 x8 x8 x8 x8 x8 x8 I$ I$ F{ )_ Y% Z Z Z .Z .Z .Z s6 Is Is Is oh .Z .Z s6 s6 Is oh oh ^_ Y% Y% Y% Y% Y% Y% Y% Y% )_ )_ )_ )_ )_ )_ )_ Is ^_ Ma Ma bc Is Is x8 x8 Y% Y% }U }U ,b.,b.,b.}U uJ x8 x8 x8 x8 x8 x8 x8 z<. Z Z Y% x8 x8 )_ )_ 61.61.61.+s.1x.`'+}c.0S./[.k`. )+ )+ey. s.Hi.ZH.K,.Lj.a;+.)+N'.+)+#a.,[.%a.(<.@)+%u.IV.#)+$)+m7.h3.>$+r5.h;+Lz.%)+UB.h;+@1.N8._@+R|.UB.N8.#B.8,+p/.FP R:.FP Q:.s(.e3.l4.e3.s(.B}.B}.l4.e3.z]./-.2J.{&+#0.(&+#0.&)+h3.,2.<&+_X U t$.+U *)+t/.F1.L@.&T &T &T FU &T *T qQ.GU +D.n$.nN.4#.rQ.rQ.W).b..MV.>x.8p.0p.V2.s4.I7.=)+6S. 6 -)+;)+>)+,)+')+))+ V !)+da.~)+e:.q<.u++{)+])+^)+nn./)+()+lu _)+Zc 58 ct b# *, L> =h =h wW wW Ka :y :y }+.B|.B|.R9.i*.i*.i*.g7 g7 g7 g7 61.61.Y% Y% Y% x8 O* O* x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% )_ )_ )_ )_ )_ )_ )_ )_ }U }U }U }U }U }U }U }U `Q `Q `Q }U uJ uJ uJ %n )_ x8 Y% Z Z Y% x8 )_ Y% Y% Y% Y% Y% Y% Y% Y% z<. Z x8 )_ )_ x8 Z z<.F{ F{ x8 Y% Z z<.z<.z<.z<.7}.8}.z<.x8 F{ F{ x8 Z Z Z Y% x8 )_ )_ dt :)+<)+:)+^Y q` %n %n g7 XQ.!J.N- `[ [)+})+|)+1)+2)+3)+4)+5)+6)+=^.7)+8)+9)+0)+a)+b)+c)+d)+W.+F$+e)+f)+g)+h)+i)+i)+,-+j)+k)+l)+L,+m)+n)+o)+p)+q)+r)+s)+#>+t)+u)+v)+w)+x)+R,+y)+z)+A)+B)+C)+_-+D)+E)+F)+G)+H)+}A.ii xR.I)+J)+K)+L)+M)+N)+O)+`'+g7 +2 HB tM tM ec sM )_ )_ x8 x8 F;.F;.]Y ]Y ]Y F;.dt )_ )_ )_ x8 x8 x8 x8 )_ )_ )_ )_ F{ I$ ", "l E D D D D E n E D }# }# D E n E# >% ^% ,% >% '$ ,% U% U% U% U% 9& U% ^% ,% M_ g~ xn.xn.xn.xn.xn.xn.xn.up.up.J6 J6 J6 xn.xn.ee AW r.+RO +_ f+ S% -+ ) .P)+Q)+R)+gL.S)+T)+U)+V)+W)+X)+Y)+i'+Z)+`)+ !+.!++!+@!+#!+$!+%!+&!+%!+*!+=!+-!+;!+['+>!+d*+,!+'!+)!+3'+!!+~!+{!+]!+^!+/!+(!+_!+:!+ i> k+ l& l& {@ {@ l& l& l& l& l& l& l& l& 0' 0' 0' 0' 0' 0' 0' 0' $% $% $% $% $% $% $% $% l` l` ~% ~% |% #% `+ E. ). (+ <$.$i .2 LC.EZ g!+l%.h!+ym a1.i!+Z +`G.}i.j!+uo.uo.k!+k!+.g..g.l!+C++B++^z.8A.{z.3Y ],.xB.~i >g r-.c'.~~.Hw m!+Qn n!+o!+p!+q!+zB f9.r!+XO.:`.s!+t!++>.u!+us.H#+28. =.v!+o[.w!+4J.x!+K'+x!+K'+(X Y*.B0.5p.B0.Qu.F!.% .&T &T .D.+D..D.Pp.PX *T &T Pp.Pp.FU &T FU CU i,.[W 6R 5H 5H TP 2H Eg.3H 3H 2H Eg.}p.oI @&+y!+z!+A!+v!.],+B!+C!+D!+Kz.b8.E!+F!+CF.vN.G!+H!+I!+<}.h5.!U.A/.d#.J!+K!+Cj.L!+z` M!+~x N!+EJ O!+TQ P!+jS jS Q!+)@+2I tk.$+R|.Z!+`!+R|.Y!+N8. ~+.~+a3.FP w6.:R B}.e3.s(.l4.+1.!_.e3.e3.!_.z].:%.D}.TN.9,+#0.#0.#0.&)+y'.y'.t$. U U _X Y:.*)+*)+E .{>.FU [H rQ.qQ.+D..D..D.*T qQ.nN.]X.4#.n$.n$.S{.4..b..k&.|o.0p.='.+~+@~+#~+$~+ww.bq.U2 %~+&~+*~+N+.2_.,9.Hd..,.c%.q<.1N =~+-~+;~+>~+,~+'~+)~+'q -k 13 (+ b# *, L> g Z5 ^Y wW Ka :y :y }+.B|.dT R9.i*.i*.i*.g7 g7 g7 g7 61.61. Z Y% x8 x8 O* ,5 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% Y% Y% Y% Y% Y% Y% x8 Y% Z Z Z Z Y% x8 Y% Y% Y% Y% Y% Y% Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 }U }U }U }U }U }U }U }U ;q.;q.`Q }U uJ %n %n qj )_ x8 Z z<.z<. Z x8 )_ x8 x8 x8 x8 x8 x8 x8 x8 Z Z Y% Y% Y% Y% Z Z F{ )_ Y% Z z<.z<.z<.z<.x8 Z z<.Y% )_ I$ F{ )_ Z Z Z Z Y% Y% Y% )L.(R.!~+(R.2'.uM.:y |+.vM H7 ~~ &= WH.~~+1P.wS.(k {~+]~+^~+/~+(~+_~+:~+<~+[~+}~+|~+1~+`=+2~+3~+4~+5~+6~+T&+i)+,-+,-+7~+8~+l)+9~+0~+p)+a~+a~+b~+o)+c~+d~+7~+e~+f~+v)+g~+h~+{-+i~+j~+T,+k~+l~+m~+n~+o~+p~+YJ.q~+r~+s~+SM. > t~+u~+v~+w~+x~+y~+g7 !_ +2 HB tM tM ec sM )_ )_ x8 x8 F;.F;.]Y ]Y ]Y F;.dt )_ )_ )_ x8 x8 x8 x8 x8 x8 )_ )_ )_ )_ ", "n E }# }# }# D E n E D }# }# D E n >% ,% U% ^% '$ E# >% ,% ,% ^% ^% ^% ^% ,% >% ._ g~ g~ g~ g~ g~ g~ g~ g~ dd dd g~ g~ E7 E7 E7 p} YG.AW RO +_ f+ T% Q Jn z~+`# A~+B~+C~+K* D~+qq E~+F~+G~+H~+I~+t-+J~+K~+L~+M~+N~+O~+P~+Q~+R~+S~+T~+U~+V~+:'+W~+['+X~+c*+Y~+Z~+`~+ {+.{++{+@{+#{+${+%{+%{+&{+*{+={+-{+;{+Y@+>{+$*+>{+,{+'{+){+|F.E>+E>+!{+~{+w*+{{+]{+L-+^{+/{+{N.bF.Yg s| 1/ eF.({+$9 _{+,& :{+8e.[! S& u& u& u& u& u& u& u& u& )= )= )= )= )= )= )= )= != != != != != != != Z+ !% k+ k+ l& l& l& l& l& l& l& l& l& l& l& l& l& $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% l` WW.n` Lv.d( !% !% h. ]+ =. S K; ;k ,q *#.V+.<{+[{+}{+V@.|{+/p 1{+2{+E<.X>+j!+vo.vo.k!+k!+3{+4{+5{+A++^z.]z.{z.~8.NO.lt )i )i v%..tV M>.h{+0D.j=.tY +D.GU FU &T &T FU ZF GU &T FU &T GU GU FU lI `F 5H 3H 2H 3H 3H .j.ji.2H .j..j..j.Eg.zl.Nh.p].i{+j{+!W 33.k{+l{+^2.F_.U2.BX ^S.AX 3L uN.m{+T#.)x.[&+++.5S (@+n{+pE o{+p{+[;.d5.kl.`o N!+{x ^L t^.1!.L(.q{+L(.Q!+CJ Z'+7z ,x `0.2U v#.Ms Ut 90 <* <* d# d# <* e# /. +. h+ h+ * * * fd fd fd ti ti ti ui ui 5[ 5[ 5[ ui ui ui ui ui 5[ 5[ 5[ fd 5[ ui ti ti ti ti ui 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ q$ ,_ )5 ^_ ^_ )5 ,_ q$ ,_ ,_ ,_ ,_ ,_ ,_ )5 )5 Z% I$ F{ )_ )_ F{ I$ Z% t& t& Z% Z% I$ I$ I$ F{ t& Z% F{ )_ )_ )_ F{ I$ I$ Z% T@ t& I$ F{ Z% q$ Is Ma Ma bc s6 s6 F{ Z% t& Z% qj %n D, :y r} -) O* `Y `Y YY pj pj pj ti ui ui ti ti pj pj YY YY ^_ ,_ q$ ,_ oh Is ^_ )5 ,_ )5 ^_ ^_ ^_ ^_ )5 ,_ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ )_ )_ )_ )_ )_ s6 Is Is Is oh ^_ ^_ ^_ oh oh ^_ ^_ ^_ ^_ oh oh I$ F{ )_ x8 x8 )_ F{ I$ F{ F{ F{ F{ F{ F{ F{ F{ x8 x8 x8 x8 x8 x8 x8 x8 I$ x8 x8 Z% Z% x8 x8 I$ x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ )_ )_ x8 x8 Y% Y% .Z .Z .Z .Z s6 s6 s6 s6 ^_ oh oh Is s6 s6 s6 s6 Y% x8 )_ F{ F{ )_ x8 Y% F{ Y% Y% I$ I$ Y% Y% F{ F{ )_ x8 Y% Y% x8 )_ F{ x8 x8 x8 x8 )_ )_ )_ %n c, d6.+Z +Z +Z +Z d6.d6.V$.V$.d6.d6.+Z +Z dN :y uJ x8 x8 x8 x8 x8 x8 x8 Z x8 F{ )_ Z z<.Y% )_ .Z .Z .Z .Z s6 s6 s6 s6 oh oh oh oh Is Is Is Is Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% .Z O4 zm.Js Js .Z .Z x8 x8 Z Z `Q `Q 75.75.75.`Q vM.ZY ZY ZY ZY ZY Z Z x8 x8 cN h*.h*.h*.h*.h*.},+0S.6H.6H.0S.wM {O Ji.N9.)3.0}.{O r{+CM ,U.s{+t{+q|.N^.u{+v{+w{+x{+y{+z{+A{+_` zY B{+C{+]U.0[.D{+X!+Y!+o~.n7.X!+%!.o~.E{+E{+F{+%)+N8.Y!+G{+5w.a3.B}.N-.N-.e3.B}.e3.z].z].z].z].N-.N-.j,.l&.S*.TN.o7.|2.'*.'*.'*.g;.32.,$+,$+W%.E .H{+H{+^U.Z..-*.v+.a..=*.uY a..$ .a..uY x+.O%.O%.C .x+.C .s'.F@.p(.%P.I{+aD.J{+K{+L{+M{++b N{+O{+P{+Q{+R{+S{+x3.uP.{/.T{+f%.U{+Id.{)+V{+W{+tu.g6 .f iN W. *+ -- k; :$ :* -j Ka ;,.[Q ]Y ^Y Ka q3 :y }+.|c.}c.cd./&.i*.i*.g7 g7 / / cN cN x8 Y% Y% Y% ZY ZY x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% Y% Y% Y% Y% Y% Y% x8 Y% Z z<.z<. Z Y% x8 Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% x8 x8 x8 F{ x8 Z z<.z<. Z x8 F{ x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% Z z<.z<. Z Y% Y% Z z<.z<.7}.z<.Y% x8 )_ )_ Y% Z Y% )_ F{ )_ Y% x8 x8 x8 Y% Y% Y% Y% PQ.hU.X{+hU.Y{+v= +Z <+.8!.|,+Z{+`{+ ]+1P..]+sn +]+@]+#]+$]+%]+&]+*]+=]+-]+;]+>]+`=+,]+D$+i)+']+)]+!]+!]+,-+#>+~]+~]+{]+9~+0~+]]+^]+^]+/]+b~+(]+_]+c~+:]+<]+[]+}]+|]+1]+2]+3]+4]+5]+6]+T,+7]+8]+XX.9]+0]+ #+a]+b]+)#+bn tW.c]+d]+,| e]+f]+g]+j; -L +2 HB tM tM ec sM )_ )_ x8 x8 F;.F;.]Y ]Y ]Y F;.LB F{ )_ )_ x8 x8 Y% Y% x8 x8 )_ )_ x8 x8 ", "n D }# C }# D E n E D }# }# D E n ,% ^% U% ^% '$ E# '$ >% ,% ,% ^% ^% ,% >% '$ E# x5 g~ g~ g~ g~ g~ g~ g~ g~ g~ g~ E7 E7 7c 7c 5c >i.qa.N_ F }# P $+ h]+i]+j]+B~+k]+dO.a! l]+m]+n]+o]+p]+q]+r]+s-+s]+t]+u]+M~+N~+M~+R~+Q~+v]+w]+x]+y]+z]+A]+B]+W~+C]+>!+p-+Y~+D]+E]+F]+F]+G]+H]+I]+J]+K]+L]+6*+={+M]+N]+O]+P]+Q]+Q]+Q]+R]+,'+S]+T]+U]+QZ.QZ.3++V]+W]+X]+Y]+Z]++K.oT.`]+ ^+.^+Nz +^+@^+Ok #^+$^+_y ,&+L) R% R% R% R% R% R% R% Q% d= d= d= d= d= d= d= d= != != != != != != != Z+ #% l& l& l& l& l& l& l& l& l& l& l& l& l& l& l& $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% %% -H.1% WW.n` d( d( !% #% Z+ i+ i+ ,. E. &. ,. +6 _)+I[.%^+S3.X4.&^+*^+=^+lo E<.KL.j!+j!+-^+vo.D%+;^+>^+A++,^+]z.>E.`O Vv.NO.89.P[.8p n{.)f (y.yu.q:.'^+)^+Da.!^+~^+{^+g| ]^+^^+/^+(^+_^+Oa.v1.NE 62.:^+D6.v5.r4.k3.<^+[^+t5.z6.o4.h3.,2.tV }^+0D.w_.]X.*T FU FU GU *T +D.GU &T &T GU .D.GU ZF nI |&+%T qI rI rI rI [W UP 2H Eg.Al.ji.2H TP TP d|.|Z q].|^+33.1^+zF.DX TB.|:.US CX 2^+>W ,W )P.3^+4^+5^+rV.6^+7^+8^+9^+pE 0m.e#.0^+a^+FJ i@.94.'&.sk.Q!+1=+t^.|!.|!.t^.DJ 8z 'x `0.dd.dd.`0..+1.`^.z].N-.:%.j,.l&.A].A].A].m4.8b.0D.7M.~{.B0.L>.h;.U%.U%.G!.4).X%.n^+^U.o^+j].a..9..iZ L@.8..C .m/.x+.**.O%.**.x+.x+.**.>>.&P.F@.$P.6r.p^+q^+r^+s^+t^+u^+v^+0a w^+x^+y^+z^+Tk.Ll.A^+B^+fa.C^+r<.D^+E^+F^+G^+H^+y+ } O6 {@ d# `5 2( |+.QQ.PQ.Q9.]Y ]Y ^Y Ka q3 :y }+.|c.}c./&./&.i*.i*.g7 g7 / / O( q} )_ x8 Y% z<.i~ i~ x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% Y% Y% Y% Y% Y% Y% x8 Y% z<.7}.7}.z<.Y% x8 Y% Y% Y% Y% Y% Y% Y% Y% Z Z Z Z Z Z Z Z Y% Y% Y% Y% Y% Y% Y% Y% )_ )_ x8 x8 Y% Z Z z<.F{ x8 Z 7}.7}. Z x8 F{ x8 x8 x8 x8 x8 x8 x8 x8 x8 Y% z<.7}.7}.z<.Y% x8 Rx.Rx.Rx.8}.z<.x8 I$ t& )_ x8 Z Y% x8 )_ Y% z<.F{ F{ F{ )_ x8 Y% Y% QQ.I^+J^+4J I^+eN K^+5*.eE Hi.L^+eS.M^+N^+O^+^~+P^+Q^+R^+S^+T^+U^+V^+W^+X^+Y^+Z^+`^+ /+./++/+@/+#/+k)+8~+$/+%/+&/+L,+q)+0~+p)+*/+=/+-/+;/+>/+,/+'/+)/+!/+~/+{/+]/+^/+)-+//+(/+_/+:/+% >% '$ '$ >% ,% ^% 9& 9& ^% ,% >% ._ ._ ._ M_ O6 O6 x5 x5 >' >' x5 M_ _# _# ._ '= &#.qa.&#.f+ C =+ h@ k& vv.c/+c* d/+e/+f/+7G.-'+g/+h/+i/+j/+k/+k>+l/+m/+n/+o/+p/+p/+q/+r/+s/+t/+u/+v/+w/+U~+x/+y/+y/+;!+z/+A/+B/+C/+D/+E/+F/+G/+H/+I/+2'+J/+K/+L/+M/+P$+N/+`J.sL.sL.>N.O/+;N.P/+Q/+R/+:Y.V]+S/+T/+U/+V/+W/+C +X/+Y/+Z/+`/+ (+.(+R9 ep +(+@(+nb #(+,% $(+Q% l& {@ k+ 9& 9& i> k+ )= )= )= )= )= )= )= )= 3{ 2{ 3{ )= 4c 5c != @ !% U@ 2% m@ m@ U@ Q% K@ l& l& l& l& l& l& l& l& &) $% 0' 8c 8c 0' $% &) $% $% $% $% $% $% $% %% *_ 6% 1% WW.~% %% %% ^{ #% !% !% h. .@ {+ V Q@ a7 )q ft #j NC.OC.%(+` +$q &(+)~.zr.*(+X>+>~.-E.;^+=(+-(+-(+;(+>(+,(+~8.],.ro.xB.~i mt .W).*T &T GU .D.*T [H 4#.*T FU &T +D..D.a<.Pp.hV.CU ZJ {}.{}.qI rI [W UP 2H .j..j..j.2H K 6R Y` )_.y].m+.08.|(+;P.gK.sN.o5.o5./}.TA.Y|.1(+tN.1X.T:.2(+TT.3(+tV.K_.4(+5(+MF *@+KJ IJ (L {c.3- T$._+.vP 6(+7(+6(+*H sk.8(+~L bX.9(++o 85.0(+85.`0.1I `5 `5 j> 6. j. d# x8 F{ ti ui 5[ si si si Es 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ pj ti ti ui 5[ 5[ fd fd q$ q$ ^_ s6 ^_ j$ a# Is ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ F{ F{ F{ F{ F{ F{ F{ F{ t& )_ )_ t& t& )_ )_ t& Z Y% x8 )_ F{ Z% t& t& T@ Y% Z Z% h+ I$ )_ ,_ )5 bc Tt Ks s6 Is F{ Z% t& Z% qj %n D, :y r} -) '5 pj pj pj pj pj pj pj 5[ ti YY YY pj pj YY w8.oh oh oh oh oh oh oh oh ^_ )5 ,_ ,_ )5 ^_ Is .Z x8 x8 )_ )_ F{ I$ I$ Z% F{ F{ F{ F{ F{ F{ F{ F{ oh bc bc bc bc bc bc bc Ma $| (* /* J$ J$ /* q$ x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ F{ I$ I$ Z% I$ I$ F{ F{ F{ )_ )_ )_ t& F{ Y% Y% )_ I$ I$ F{ )_ )_ )_ )_ F{ F{ I$ I$ )_ x8 Y% Z Y% x8 F{ Z% oh Is s6 .Z .Z s6 Is oh s6 s6 s6 s6 s6 s6 s6 s6 Y% x8 F{ I$ Z% I$ F{ )_ x8 Y% Y% )_ I$ I$ x8 z<.Y% x8 x8 x8 )_ )_ )_ F{ h+ I$ Y% Y% )_ I$ F{ uJ ^D.c, q3 q3 D, c, ,b.c, c, c, c, c, c, c, c, c, }U x8 )_ F{ F{ )_ x8 Y% Y% Y% Y% Y% Y% Y% Y% Y% .Z .Z .Z .Z .Z .Z .Z .Z =L s6 oh Is O4 =L .Z Is Y% Y% Y% Z z<.z<.)_ Z% )_ Y% z<. Z )_ I$ I$ oh O4 zm.zm.zm.O4 O4 Z Z Z z<.;q.`Q c, c, 75.a(+#U.d7.d7.d7.KB KB KB Y% x8 h*.h*.61.+s.Ys.Ys.b(+ZG vS wM ]w.RQ.~O Y[ uS j~ zk /[.6}./b.c(+a;+d(+e(+f(+g(+h(+i(+j(+k(+}3.gX.@R.mU l^+Z..Y..EP s(.UB.)).#B.n~..].Mz.#B.~C.n~.UB.f;.qy.5w.5w..]..].D}.+1.+1.A].A].N-.j,.sd.N-.z].z].N-.:%.A].`^.sd.k5.3).U*./-.k=.5p.$c.Y*.Z*.S%.sH.(@.l(+m(+8#.p=+68.o&.5r.n(+1%.58.68.1%._a.68.Ef.3%.5r.58.j].Ok.2p.o(+fP.{d.G7.p(+q(+r(+s(+t(+u(+v(+w(+x(+y(+z(+hn.mM.A(+T{+U{+vH B(+C(+xP.D(+E(+F(+J) |% af.=] Z% Gs Fs DR dt dt {Y {Y Kb Kb dt %n uJ k@.dT dT i*.i*.i*.i*.#v #v #v #v 1x.61.Y% Z z<. Z '5 O) )_ )_ )_ )_ )_ )_ )_ )_ )_ x8 Z z<.z<. Z x8 )_ 7}.Y% )_ Y% 8}.Rx. Z F{ Z Z Z Z Z Z Z Z F{ F{ F{ F{ F{ F{ F{ F{ Z% F{ x8 Y% Z Y% x8 )_ )_ )_ )_ )_ )_ )_ )_ )_ Y% Y% Y% Y% Y% Y% Y% Y% )_ )_ x8 x8 Y% Z Z Z Y% Y% Y% Y% Y% Y% Y% Y% Y% x8 )_ F{ )_ Y% 7}.8}.z<.Y% x8 )_ )_ x8 Y% z<.)_ )_ )_ )_ )_ )_ )_ )_ F{ z<. Z t& h+ )_ x8 =) -;.G(+H(+J=.G=.M!+G9./c.I(+:D J(+K(+L(+M(+N(+O(+T^+P(+Q(+R(+S(+T(+U(+V(+W(+X(+Y(+Z(+`(+ _+._+._++_+@_+#_+$_+%_+&_+*_+=_+=_+-_+-_+;_+>_+>_+,_+'_+)_+!_+~_+{_+]_+^_+/_+(_+T.+__+:_+<_+Y.+[_+}_+|_+1_+2_+DU.3_+q~+OP.4_+`u ]n e1 5_+&2 %'+6_+7_+wq HB tM k*.j*.c8 c8 )_ F{ x8 x8 F;.F;.]Y ]Y ]Y F;.LB F{ F{ F{ F{ F{ F{ F{ x8 x8 x8 x8 x8 x8 ", "l n n n E E E + l n D }# }# }# }# ^% ^% ,% ,% >% >% '$ '$ >% ,% ^% U% U% ^% ,% >% M_ M_ M_ O6 x5 x5 x5 >' x5 >' >' M_ (# (# M_ '= &#.,* UO C t N@ h@ du.8_+9_+)I.`_ Q- 0_+a_+b_+c_+d_+e_+f_+g_+h_+i_+j_+k_+n/+n/+l_+l_+K~+m_+n_+o_+o_+p_+q_+=!+x/+r_+A]+s_+t_+u_+v_+w_+x_+y_+z_+p-+I/+2'+A_+B_+C_+D_+E_+3*+5F.wO.yG.iT.iT.iT.FG.F_+R/+f'+G_+H_+d'+d'+I_+J_+K_+L_+M_+N_+O_+P_+Q_+R_+eF.Nz +^+1/ Af S_+U@ T_+fd Q% l& m@ 9& Q% 2% != != != != != != != != )= d= d= != 3c 3c d= +@ !% m@ m@ l& {@ U@ k+ >% l& l& l& l& l& l& l& l& &) $% |% |% |% |% $% &) $% $% $% $% $% $% $% $% 4% 7% -H.~% ~% %% %% 4% t% T$ #% T$ .@ .@ ~+ T -= U_+V_+R0 ZG.W_+MH.%(+:h _j }k.(j '(+E<.P[.ZL ,(+A++J<.]z.;(+,(+>|.d_.],.ro.xB.O;.Jx /h zr.*(+.S.w++X_+!(+os.Y_+Z_+`_+ :+dW .:+R<..e.+:+IE..Q M!.0q.@:+<(+:{.#:+-1.m3.$:+%:+T%.uV &:+}(+h;.wY W).[H .D.GU GU FU Pp.Pp.GU Pp.FU .D.&T PX a<.uF.CU ZJ {}.{}.ZJ qI rI [W Zm.6R TP K 3H 3H 3H K }..2Z U` X` -(.+J.P` N` *:+`m.'x./}.o5./}.=:+n5.:6.L` :o.V++t}.tV.-D.hE.FQ.|H.qE J!+-:+;:+>:+@b.%).+t.;../].IS *H 6(+,:+DM ~L DV.9(+K/.CA.+o 0(+.e7 b# j. e# O( >5 ui 5[ p: -h UV -J.':+si 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ui ui ui ui ui 5[ 5[ 5[ ,_ q$ ^_ s6 ^_ j$ a# oh ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ F{ F{ F{ F{ F{ F{ F{ F{ t& )_ )_ t& t& )_ )_ t& x8 )_ )_ F{ I$ Z% Z% t& T@ x8 Y% t& h+ Z% I$ q$ ^_ bc Tt Ks s6 Is F{ I$ I$ F{ %n uJ c, D, :y a) '5 pj pj pj pj pj pj pj ui pj `Y YY ti ti YY `Y oh oh oh oh oh oh oh oh Is oh ^_ )5 )5 ^_ Is s6 )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ oh oh bc bc bc bc bc bc bc bc Ma $| (* /* /* (* (* )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ I$ I$ F{ F{ F{ )_ )_ )_ t& F{ Y% Y% )_ I$ I$ F{ x8 )_ )_ )_ F{ F{ I$ I$ )_ x8 Y% Y% Y% )_ F{ I$ oh Is s6 .Z .Z s6 Is oh s6 s6 s6 s6 s6 s6 s6 s6 Y% x8 )_ I$ I$ I$ F{ )_ )_ x8 x8 F{ Z% I$ )_ Z Y% Y% Y% x8 )_ F{ F{ F{ T@ I$ x8 Y% )_ I$ F{ x8 ;q.uJ q3 a) D, uJ ,b.uJ c, uJ c, uJ c, uJ c, uJ Y% x8 )_ F{ F{ )_ x8 Y% Y% Y% Y% Y% Y% Y% Y% Y% .Z .Z .Z .Z .Z .Z .Z .Z =L s6 oh Is O4 =L .Z Is Y% Y% Y% Z z<.z<.)_ Z% x8 Z 7}.7}. Z x8 Y% O4 .Z Js Js Js .Z .Z Y% Y% Y% Z ;q.}U D, D, ,b.):+#U.!3.!3.d7.d7.KB KB Y% )_ X[ cN #v e; /&.bd.R!+s} ~O wM ]D yh.N> ), H' B|.},+!:+}e.v,.t,.+)+4@.~:+ge.bc.{:+p6.:}._` w`.yY nU nU EP {` eZ eZ ,}.e;..].E_.Lz.*4.Mz.*4.r5.^-.Lz./-.f;.V|.Mz.f;+^X ./.l&.N-.l&.l&.+1.+1.j,.j,.j,.:%.j,.l&. /.`^.sc.lc.k5.S*.D}.i=.Qu.(-.X*.sH.q$.S%.]d.]:+^:+8#.F*._a.o&.U).q&.3%.n(+j].58.Ef.5r.sD 3%.5r.j].1%.Ok.,x.Dl.rV /:+(:+_:+::+<:+Vy.u(+[:+}:+|:+1:+2:+Pf.3:+G`.4:+;=.5:+6:+LD Vg.D[.7:+P`.8:+p} -H./0.fL.F{ vM DR DR dt dt XG XG Kb Kb dt %n uJ k@.dT dT i*.i*.i*.i*.#v #v #v #v 1x.h*.Y% Z z<. Z ,5 }| x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 Y% Z Z Y% x8 x8 Y% Y% x8 Z z<.z<.Y% )_ Z Z Z Z Z Z Z Z )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ )_ x8 Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% Y% Y% Y% Y% Y% Y% )_ x8 x8 x8 Y% Z Z Z Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% x8 x8 Z Y% x8 )_ )_ x8 Y% Z x8 x8 x8 x8 x8 x8 x8 x8 I$ x8 )_ t& Z% Z Z *) Bb.9:+0:+a:+O$.7z ~L id.AS b:+HL c:+d:+e:+f:+g:+h:+i:+j:+T(+k:+1~+`=+l:+m:+n:+Z(+o:+!_+p:+q:+q:+r:+s:+t:+%_+u:+v:+w:+=_+x:+x:+y:+y:+z:+z:+A:+B:+C:+D:+E:+F:+{/+]_+G:+/_+H:+2]+I:+J:+K:+L:+S@+~ +M:+N:+O:+O]+a]+P:+Q:+zJ.R:+S:+T:+U:+V:+W:+X:+Y:+}].tM k*.j*.c8 FR )_ F{ x8 x8 F;.F;.]Y ]Y ]Y F;.LB F{ F{ F{ F{ F{ F{ F{ x8 x8 x8 x8 x8 x8 ", "l n n n E E E + l E D }# }# }# }# ^% ^% ,% ,% >% >% '$ '$ ,% ,% ^% U% U% ^% ,% ,% ,% ,% ^% ^% ^% U% U% U% ^% U% U% ,% '$ E# >% C r2.'* r2.}# u X% N+ xq U^ 3* Z:+V; 2| $J `:+ <+.<++<+@<+#<+$<+%<+&<+*<+=<+-<+;<+;<+><+,<+'<+'<+w/+)<+!<+~<+{<+]<+^<+/<+(<+_<+i_+:<+<<+[<+}<+|<+q-+'!+1<+2<+1%+3<+BW.4<+5<+6<+'V.7<+8<+9<+HZ.0<+a<+b<+c<+I_+d<+e<+e<+f<+g<+h<+i<+j<+k<+l<+m<+n<+.(+(G o<+p<+q<+r<+C6 s<+KB ZY ,5 +# ,+ }# V ]+ 3c 3c 3c 3c 3c 3c 3c 3c 4c != )= != 3c != 3{ l* #% m@ l& Q% k+ U@ m@ 9& l& l& l& l& l& l& l& l& $% $% &) &_ &_ &) $% $% $% $% $% $% $% $% $% $% &) &- $% #% #% T$ M$ M$ o3 t% #% #% M$ t% M$ h. T p+ O@ ~B 'F $j }c tB.j[ &^+=l.)f xn 8p >8.F<.!8.>E.{z.f1.,(+-E.d_.QZ M ,~.>~. m.ya.o:.C).Y*+to.t<+to.C).7'.Zw.u<+v<+4: w<+&,+x<+];+y<+cV.z<+A<+yd.B<+}d.@k.K!.ue.8).~t.5J. =.='.K'+4).sx.|:.f,.qQ.[H [H [H *T Pp.lD .D.&T GU *T &T a<.ZF mI CU ZJ {}.{}.{}.ZJ qI qI rI G Zm.6R TP K 3H 3H D1.D1.+ .Ua.D_.+ ./d.v6.*c.v6.%c.^d.'_.ne.)s./d.8O C<+&c.^}.4v.D<+E<+CF.CQ.F<+G<+H<+I<+J<+B` _L K<+x,.d5.E/.d5.z` L<+*H *H K(.7I +H +o :].fJ +o Gj.eE ,p.T6 `5 f7 <* A% }| 5[ -h =] I> l3 s3.-J.si 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ui ui ui ui ui ,_ q$ )5 Is oh a# a# oh ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ Z% Z% Z% Z% Z% Z% Z% Z% t& )_ )_ t& t& )_ )_ t& I$ I$ I$ I$ Z% Z% Z% Z% T@ )_ x8 t& h+ t& Z% q$ ^_ bc Tt Tt Is Is F{ I$ )_ )_ uJ }U ,b.c, D, %n '5 pj pj pj pj pj pj pj pj YY `Y YY ti ui ti YY oh oh oh oh oh oh oh oh .Z s6 Is oh oh oh Is Is F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ oh oh bc bc bc bc bc bc bc Tt bc Ma $| $| $| $| Ma F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ I$ I$ F{ F{ F{ )_ )_ )_ Z% F{ x8 x8 F{ I$ I$ )_ x8 x8 x8 )_ )_ F{ F{ F{ x8 x8 Y% Y% x8 )_ F{ I$ oh Is s6 .Z .Z s6 Is oh s6 s6 s6 s6 s6 s6 s6 s6 Y% x8 )_ F{ F{ F{ F{ )_ F{ )_ x8 F{ Z% Z% F{ Y% Z Z Y% x8 )_ F{ I$ I$ t& I$ x8 x8 )_ F{ )_ x8 z<.x8 a) I$ %n x8 }U x8 uJ x8 uJ x8 uJ x8 uJ x8 Y% x8 )_ F{ F{ )_ x8 Y% Y% Y% Y% Y% Y% Y% Y% Y% .Z .Z .Z .Z .Z .Z .Z .Z O4 s6 Is s6 O4 O4 .Z Is Y% Y% Y% Z z<.z<.)_ Z% F{ Y% z<.z<. Z Y% Y% =L s6 Ks Ks Ks s6 s6 x8 x8 x8 Y% `Q uJ :y :y c, 8S.B;+!3.!3.d7.d7.d7.KB Y% F{ X[ g7 g7 #v i*.i*.!J.:U :U :U H' _@ G[.o@ .F.k#+M<+eX.N<+O<+P<+_b.O_.Q<+WY./@+}3.|w.*u.1w.9#.88.b3.EP jZ ,}.1H zf.nI z].^X l4.^X B}.p/.l4./-.:%.E_.!_.^-.B}.^-.`^.l&.]X m&.N-.:%.l&.:%.N-.:%.m&. /. /. /.m&.`^.sd.sc. ].lc.Qu.j=.j=.Qu.X*.>*.sx.R%.S%.]d.p=+]:+^:+8#.j].5r.3%.q&.r'.sD 5r.n(+p&.3%.U).r'.3%.Ef.Ef.r'.#j.p9.%:+R<+S<+T<+U<+V<+u(+W<+X<+Y<+Xz.Z<+sP.Qf.sb.da.5s.E4.`<+WI [+.[++[+Ab.N# P# S_ 6e.~k.@[+s6 g7 X[ X[ ,5 '5 Xl Xl Xl Xl ,5 )_ x8 cN e; e; i*.i*.i*.i*.#v #v #v #v 61.cN x8 Y% z<.z<.O* '5 Y% Y% Y% Y% Y% Y% Y% Y% Z Y% x8 x8 x8 x8 Y% Z F{ x8 Z Z x8 )_ x8 x8 Z Z Z Z Z Z Z Z Y% Y% Y% Y% Y% Y% Y% Y% x8 )_ )_ )_ )_ x8 Y% Z .Z .Z .Z .Z .Z .Z .Z .Z .Z .Z .Z .Z .Z .Z .Z .Z x8 x8 x8 Y% Y% Y% Z Z Y% Y% Y% Y% Y% Y% Y% Y% x8 Z z<.7}.z<.Y% F{ t& Z Y% x8 x8 x8 x8 Y% Z Y% Y% Y% Y% Y% Y% Y% Y% Z% I$ I$ Z% x8 8}.z<.'_ z% D=.vP 2I '3.^b.^b.#[+rW [+,[+'[+)[+![+~[+h)+{[+][+^[+/[+([+_[+:[+:[+<[+C:+[[+}[+|[+1[+2[+3[+4[+4[+4[+4[+5[+5[+6[+7[+8[+9[+0[+a[+b[+{/+^_+G:+c[+d[+e[+f[+X&+g[+h[+i[+j[+k[+D)+l[+m[+n[+| +ox (( eQ 5_+o[+p[+q[+r[+m@+s[+tM JB JB sM sM F{ I$ x8 x8 F;.F;.]Y ]Y ]Y F;.dt )_ )_ )_ )_ )_ )_ )_ x8 x8 x8 x8 x8 x8 ", "l n n n E E E l n E D }# }# D D ^% ^% ,% ,% >% >% '$ '$ ,% ^% ^% ^% ^% ^% ^% ,% U% U% U% U% U% U% U% U% ,% ^% U% ^% >% '$ ,% C I) I) G$ D v W% {& t[+y_ E* __ oe u[+d[ v[+w[+x[+y[+z[+A[+B[+C[+,<+D[+E[+F[+E[+;<+><+x]+G[+v/+)<+H[+H[+I[+J[+{<+K[+L[+M[+N[+O[+P[+Q[+.!+~'+R[+S[+T[+I/+U[+V[+={+E>+RZ.D>+W[+X[+Y[+Z[+`[+ }+.}+(++_Y.+}+@}+#}+$}+%}+&}+*}+=}+-}+;}+>}+,}+'}+)}+!}+*K.-K.o<+o<+~}+{}+r| ]}+C 1m.KB C ,+ h. C 4c 4c 4c 4c 4c 4c 4c 4c 3c != d= )= != != d= +@ #% {@ i> U% i> 2% 2% l& l& l& l& l& l& l& l& l& |% &) &_ n3 n3 &_ &) |% $% $% $% $% $% $% $% $% T$ {@ `+ l& `+ T$ .@ t% =5 t% !% !% T$ M$ t% m@ i+ Z . P@ %- j` ^}+Db /}+(}+Bw _}+zq.yB.v%.Dw ~8.f1.d_.!8.:}+-E.3Y rN xC ,~.=;+>~. m. m.C).to.<}+<}+[}+=;+~,.-A }}+|}+1}+2}+&m.3}+4}+5}+5}+6}+7}+8}+9}+0}+a}+b}+7v.cw.;1.+=..=.ux.m[.o9.S%.h=.$ .rQ.n$.nN.f=.f=.qQ.ZF +D.[H qQ.qQ.*T &T GU uF.^X.ZJ {}.{}.{}.{}.{}.{}. G [W [W Zm.UP UP UP UP ]}.b<.s9.<:.e|.. .D1.s9.Z#./d.^d.ne.Va.>e.G0.&c.Xu.oI (d./d.)s.R:.Z|.3^+EF.!x.c}+~x.d}+6D <.pE e}+n6.q^.p^.Cj.f}+g}+^].H~.h}+qk.i}+s#.0(+CA.:].P(.P(.tk.`G 7>.Ls DR q} :] 5[ =] m3 w% j}+cp.l3 si 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ fd fd 5[ 5[ ui ti ti pj )5 q$ ,_ Is oh q$ a# ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ Z% Z% Z% Z% Z% Z% Z% Z% t& )_ )_ t& t& )_ )_ t& T@ T@ t& t& Z% I$ I$ I$ t& I$ F{ Z% T@ T@ t& ,_ oh bc bc Tt Is oh F{ F{ )_ )_ %n %n D, D, D, %n '5 pj pj pj pj pj pj pj YY `Y gA `Y ti 5[ ui pj oh oh oh oh oh oh oh oh O4 .Z s6 s6 Is oh oh oh Z% I$ I$ F{ )_ )_ x8 x8 F{ F{ F{ F{ F{ F{ F{ oh bc bc bc bc bc bc bc bc Ks Tt bc Ma Ma Ma Ma bc ^_ I$ I$ I$ I$ I$ I$ I$ Z% I$ I$ F{ )_ )_ x8 x8 I$ I$ F{ F{ F{ )_ )_ )_ Z% F{ x8 x8 F{ I$ F{ )_ x8 x8 x8 )_ )_ )_ F{ F{ x8 x8 x8 x8 x8 )_ F{ F{ Is Is s6 s6 s6 s6 Is Is s6 s6 s6 s6 s6 s6 s6 s6 Y% x8 x8 )_ )_ F{ F{ F{ I$ F{ x8 )_ I$ Z% F{ x8 z<. Z Y% x8 )_ F{ I$ Z% Z% I$ F{ )_ )_ )_ )_ x8 =L s6 ^_ ^_ Is s6 .Z s6 s6 s6 s6 s6 s6 s6 s6 s6 x8 x8 )_ )_ )_ )_ x8 x8 Y% Y% Y% Y% Y% Y% Y% Y% .Z .Z .Z .Z .Z .Z .Z .Z .Z .Z s6 s6 .Z .Z .Z s6 Y% Y% Y% Z z<.z<.)_ Z% T@ I$ )_ x8 )_ F{ )_ .Z Is Tt Tt Tt Is Is )_ )_ )_ x8 }U %n q3 q3 D, vM.B;+k}+k}+!3.!3.d7.KB Y% x8 cN #v i*.i*.f>.f>.f>.XQ.cd.Gs C- o. _. cN 9g.l}+l}+u=.g(+~:+EY !&+o6.j(+m}+m}+n}+$$+k^+_@.sH.[o.IU IU pe.nI o}+o}+p}+5..s(.9h.e3.eZ B}.IU m&.F0./Z le.!_.IU sc.u+.Sh../.l&.+1.N-. /.sc.sc.sc.sd.sd.sd.sd.sd.sc.sc.sc. ].,T L'+5p.5p.5p.(-.(-.S%.tx.R%.sH.q}+8#.$_.r}+r'.U).Ef.n(+2%.Ef.3%.p&.p&.U).sD q&.p&.r'.3%.ap.2:.s}+t}+QK.u}+A~+v}+w}+x}+y}+z}+Ae.((.A}+Hx.AS.da.v;+B}+C}+1(.D}+E}+Z].F}+oM eK G}+R6 'J.H}+I}+.Z e; cN cN ,5 '5 Xl 34 Xl Xl ,5 )_ x8 cN e; e; /&./&./&./&.e; e; e; e; h*.cN )_ x8 Z z<.KB O* Z Z Z Z Z Z Z Z z<. Z x8 )_ )_ x8 Z z<.Z% x8 z<. Z )_ I$ F{ Y% Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Y% x8 )_ F{ )_ x8 Z 7}.O4 O4 O4 O4 O4 O4 O4 O4 .Z .Z .Z .Z .Z .Z .Z .Z x8 x8 Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% x8 Y% Z z<. Z Y% )_ F{ Y% Y% Y% x8 x8 Y% Y% Y% Z Z Z Z Z Z Z Z )_ I$ Z% F{ z<.8}.Y% d# ]w.Q~.Q~.5P.*v.J}+K}+L}+M}+N}+O}+P}+Q}+R}+S}+T}+,[+U}+V}+W}+X}+Y}+Z}+`}+][+ |+.|++|+@|+#|+#|+$|+%|+&|+}[+*|+=|+1[+-|+3[+7[+7[+7[+;|+>|+>|+,|+'|+)|+!|+~|+{|+]|+^|+]_+/|+(|+c[+_|+:|+<|+[|+g[+}|+}/+||+1|+2|+3|+4|+5|+gW.6|+L| 7|+|*+8|+9|+0|+a|+g= JB JB tM ec ec I$ I$ x8 x8 F;.F;.]Y ]Y ]Y F;.dt )_ )_ )_ )_ )_ )_ )_ x8 x8 x8 x8 x8 x8 ", "l n n n E E E n n E D }# D D E ^% ^% ,% ,% >% >% '$ '$ ^% ^% ^% ,% ,% ^% ^% ^% U% U% U% U% U% U% U% U% >% ^% 9& U% ,% ,% ^% C r2.r2.J# }# P X% N( j3 b|+c|+{F.L7 %k d|+e|+f|+g|+h|+i|+j|+k|+l|+m|+n|+o|+p|+o|+q|+r|+s|+l|+t|+u|+v|+u|+w|+x|+y|+z|+A|+B|+C|+D|+C|+E|+F|+s/+('+G|+H|+I|+J|+K|+L|+M|+N|+O|+P|+Q|+R|+S|+T|+T|+U|+V|+W|+X|+Y|+Z|+`|+ 1+.1++1+@1+#1+$1+%1+&1+*1+=1+-1+JR.(G u7 0$.r| ;1+>1+:1 ,1+l Yt.Yt.>5 ]+ i+ 4c 4c 4c 4c 4c 4c 4c 4c )= d= 2{ 3{ != 3c 3c `+ #% {@ i> ^% Q% 2% .* {@ l& l& l& l& l& l& l& l& |% &) &_ n3 n3 &_ &) |% $% $% $% $% $% $% $% T$ {+ Z E. Z F. ]+ H. +# +# {+ i+ i+ h. ]+ ]+ ]+ !% M$ M$ V G D^ VO `9 '1+)1+Ap. i K+._s My )i iF.-E.z#+z#+-^+`L ,~.MH ~.^j (y.0| 8/.{1+fW UU ]1+^1+/1+(1+'7._1+G'+:1+<1+[1+}1+x0.|1+y0.l9.Ff.eb.eb.e,.+k.uY nN.]X.]X.re.b~.]X.FU .D.[H rQ.qQ.*T .D..D.mI kO ZJ ZJ ZJ {}.{}.{}.XJ rI rI rI G [W Zm.UP UP ]}.+ .$[.ne.Va.ne.$[.+ .n+.JK.5^.[q.nH.,u.p].'u.fh.-_.11+TM /:.xl.4;.D<+2^+21+dE.31+hE.B(.B(.[}.41+K!+KJ 9m.rl.p^.51+61+71+81+L<+f` 6(+7I c>.4*.iA oP 4*.N9.2U Ls DR q} :] 5[ =] w% <4 #9.91+cp.si 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ fd fd 5[ 5[ ui ti ti pj ^_ a# q$ oh Is ,_ q$ )5 ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ Z% Z% Z% Z% Z% Z% Z% Z% t& )_ )_ t& t& )_ )_ t& T@ T@ T@ t& Z% I$ F{ F{ Z% I$ F{ F{ t& h+ T@ ^_ Is bc bc bc oh oh F{ )_ F{ F{ a) a) q3 q3 :y qj '5 pj pj pj pj pj pj pj YY `Y gA `Y ti 5[ ui pj oh oh oh oh oh oh oh oh .Z .Z .Z s6 s6 Is oh ^_ Z% I$ I$ F{ )_ )_ x8 x8 F{ F{ F{ F{ F{ F{ F{ oh bc 1U 1U 1U 1U 1U 1U 1U z|.A|.g{.1U B) B) 1U bc ^_ I$ I$ I$ I$ I$ I$ I$ Z% I$ I$ F{ )_ )_ x8 x8 I$ I$ F{ F{ F{ )_ )_ )_ I$ )_ x8 )_ I$ Z% F{ x8 Y% Y% x8 x8 x8 )_ )_ )_ Y% Y% x8 )_ )_ )_ )_ )_ s6 s6 Is Is Is Is s6 s6 s6 s6 s6 s6 s6 s6 s6 s6 Y% Y% Y% x8 x8 )_ )_ F{ I$ )_ x8 x8 F{ I$ F{ x8 Z Z Y% x8 )_ F{ I$ I$ F{ I$ I$ I$ F{ )_ x8 Is wn.Ks Ma Ma Tt Ks Js Ks Ks Ks Ks Ks Ks Ks Ks Ks Is )_ x8 x8 x8 x8 )_ )_ Y% Y% Y% Y% Y% Y% Y% Y% .Z .Z .Z .Z .Z .Z .Z .Z s6 .Z .Z .Z s6 s6 .Z .Z Y% Y% Y% Z z<.z<.)_ Z% T@ Z% )_ )_ F{ F{ )_ s6 Is Tt Tt Tt Is Is )_ )_ )_ x8 }U %n q3 q3 D, vM.01+k}+k}+!3.!3.d7.KB Y% Z 61.+s.bd./&.C* C* C* .F.!_ (. l. A% .Z }f.HV.[f.a1+i(+l7.b1+{x.c1+d1+|w.e1+*u.ex.]U.tf.]` /@.m&.5..zf.f1+g1+h1+i1+j1+GE k[.}W ,}.kD ,}.ZF 7..iD 1p.No.,}.Mo.f,.qe.tY m&.l&.:%.:%.m&.Nk.]X Nk.sd.sd.sc.sc.sc.sc.sc.sc.4^.4^.@j.@j.@j.@j.Th.#j.2%.1%.j].68.oz db.eb.El.I}.o[.$_.p=+p=+4J.^f. =.`*.$_.n9.^f.ux.r}+j;+$_.m3.k1+l1+X# t[+m1+n1+i/ o1+p1+q1+r1+s1+t1+u1+v1+u;+w1+.A.%i.YI x1+y1+z1+A1+B1+C1+D1+8$+;p.} J1+K1+L1+M1+N1+O1+P1+Q1+R1+S1+T1+U1+V1+W1+X1+,-+N,+Y1+o:+Z1+`1+ 2+.2+.2++2+@2+#2+|[+=|+=|+#2+3[+$2+%2+%2+'|+'|+'|+'|+'|+%2+&2+*2+~|+=2+F:+{_+-2+;2+f~+)-+H:+_|+:|+>2+<|+,2+'2+|/+k[+5W.)2+< +!2+QU.t'+1) ~2+{2+]2+^2+/2+(2+ad.k*.JB tM ec cc I$ I$ x8 x8 F;.F;.]Y ]Y ]Y F;.F;.x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 ", "l n n n E E E n E D D }# D E E ^% ^% ,% ,% >% >% '$ '$ U% ^% ,% ,% ,% ,% ^% U% U% U% U% ^% ^% ^% ,% ,% '$ ^% 9& 9& U% ^% ^% 9& UO R$ C t N@ 9* 9* _2+:2+jt.jC.<2+JH [2+}2+|2+12+22+32+]<+42+52+62+72+82+92+02+62+o|+q|+m|+a2+u|+v|+b2+c2+x|+y|+z|+z|+d2+e2+f2+f2+E|+s/+g2+h2+i2+j2+g>+k2+l2+m2+n2+o2+p2+q2+r2+s2+t2+u2+v2+w2+x2+y2+z2+A2+B2+C2+D2+E2+F2+G2+H2+I2+J2+K2+L2+M2+!}+N2+D%.;K.O2+0$.O2+u7 ;1+P2+rB.n ~D.)> +# O) 3c 3c 3c 3c 3c 3c 3c 3c )= 3{ 5! 3{ )= 4c 4c Y+ #% {@ i> U% i> 2% 2% l& l& l& l& l& l& l& l& l& $% $% &) &_ &_ &) $% $% $% $% $% $% $% $% $% @ &. &. *. &. =. ). '. 9# G. h. i+ i+ {+ ]+ ]+ @ &) n3 n3 M$ h. k. k` bg Q2+R2+S2+6o.T2+3+Zq.@(.w7.,3+0z.pU ]=+'3+)3+!3+!3+g^.~3+{3+]3+^3+sl.9x.KJ IJ :!.$q.0I Gh./3+(3+*H _3+:3+Xt.`l &n |I uS :* v$ }| og fL.l3 cp.cp.<3+[3+si 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ui ui ui ui ui oh a# a# oh Is )5 q$ ,_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ Z% Z% Z% Z% Z% Z% Z% Z% t& )_ )_ t& t& )_ )_ t& t& t& Z% Z% I$ I$ F{ F{ F{ I$ F{ x8 I$ h+ T@ Is Is Tt bc Ma ^_ oh )_ )_ F{ I$ *) *) r} r} q3 qj '5 pj pj pj pj pj pj pj pj YY `Y YY ti ui ti YY oh oh oh oh oh oh oh oh oh Is s6 s6 s6 Is oh ^_ F{ F{ F{ F{ F{ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ oh bc 1U 1U 1U 1U 1U 1U 1U A|.A|.g{.B) B) B) 1U bc oh F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ )_ )_ )_ I$ I$ F{ F{ F{ )_ )_ )_ F{ )_ x8 F{ Z% Z% F{ Y% Y% Y% Y% x8 x8 )_ )_ )_ Z Y% x8 )_ F{ F{ )_ )_ .Z s6 Is oh oh Is s6 .Z s6 s6 s6 s6 s6 s6 s6 s6 x8 Y% Y% Y% Y% x8 )_ F{ I$ x8 Z Z x8 F{ )_ x8 x8 x8 x8 x8 )_ )_ )_ )_ )_ I$ Z% Z% F{ x8 x8 Is wn.A|.B) B) g{.A|.z|.A|.A|.A|.A|.A|.A|.A|.A|.Ks oh )_ x8 Y% Y% x8 )_ F{ Y% Y% Y% Y% Y% Y% Y% Y% .Z .Z .Z .Z .Z .Z .Z .Z Is .Z O4 O4 s6 Is s6 O4 Y% Y% Y% Z z<.z<.)_ Z% I$ x8 Z Z x8 )_ x8 .Z s6 Ks Ks Ks s6 s6 x8 x8 x8 Y% `Q uJ :y :y c, 8S.01+}3+k}+k}+!3.d7.d7.Y% z<.Ys.Ys.bd.|3+|3+eL.C* !_ _. <. E) 13+m|.23+y{+3,+k(+/@+:}.d=+++.33+e1+43+gX.}&+.+.b^.#{.h=.sc.'>.7R ~m.j1+53+63+73+dk.zg.jD J` lD 83+lD ]o.+D.]o.}W 93+ZF 03+GU a3+Pp.dZ `^.`^.l&.A].sd.sc.m&. /.m&.`^.sd.sc.sc.sc.sd.d;.i&.@j.Nk.Nk.Nk..k.+k.2%.Ef.r'.r&.]f.$j.l9.Ff.r}+r}+r}+o[.^f.o[.n9.]:+n9.p=+p=+n9.j;+F*.nz b3+c3+d3+ng.e3+Cs f3+g3+h3+i3+j3+k3+l3+m3+n3+qX.o3+3T p3+q3+5N r3+Z].s3+t3+u3+v3+w3+x3+y3+7$+z3+P~ Y% e; h*.cN O* O* [].Ds Xl Xl ,5 )_ x8 cN e; e; /&./&./&./&.e; e; e; e; +*4+=4+S.+e[+-4+J:+Z.+/-+;4+>4+EU.,4+'4+)4+!4+~4+{4+]4+^4+/4+(4+_4+:4+<4+k*.JB ec ec F{ )_ x8 x8 F;.F;.]Y ]Y ]Y F;.F;.x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 ", "l n n n E E E E E D }# D D E n ^% ^% ,% ,% >% >% '$ '$ U% ^% ,% >% >% ,% ^% U% U% ^% ^% ^% ,% >% >% >% E# ,% 9& Q% 9& U% U% 9& ^& ^& V T }. k* k* W> [4+Eh.}4+|4+14+24+s,+34+44+54+{<+64+74+84+94+04+a4+a4+94+82+b4+62+c4+d4+e4+f4+g4+f4+h4+i4+j4+j4+k4+l4+m4+n4+o4+S~+S~+p4+q4+r4+s4+t4+u4+v4+w4+x4+y4+z4+A4+B4+C4+D4+E4+F4+G4+H4+I4+J4+K4+L4+D4+M4+N4+O4+P4+Q4+R4+S4+T4+lH -1+z-.[z U4+s| U4+:N.nT.7O.V4+W4+X4+5+ !5 !5 b) != != != != != != != != 4c )= 2{ 2{ )= != != Z+ #% {@ k+ 9& k+ 2% U@ i> l& l& l& l& l& l& l& l& &) $% |% |% |% |% $% &) $% $% $% $% $% $% $% @ *. (+ Zf 9. 8. 7. b# +% =. &. &. ). 9# $& j+ @ &) v% n3 M$ {+ @. N* ~s |b 3p 5o.Y4+Z4++Z.dm `4+2T 5+j!+>~.C).qs.w++w++[B Qe.OO..5+OO.+5+7N.@5+#5+=(+A++>E.~8.]V ]j ,g QI $5+2V gQ.%5+*Q &5+*5+=5+-5+;5+>5+P).`C.;,+,5+oY '5+)5+vc.)5+48.GA l/.l/.b~.f=.qQ.3#.L%.b~.+D.iD FU *T &T FU .D..D.CU g,.{}.qI Ym.rI rI Ym.qI ZJ ZJ qI Ym. G UP 5H K e|.;5.r(.D_.+ .<:.|r.JK.n+.JK.t7.8Z *t.*t.5 C' w4.-J.[3+[3+0q.|5+si 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ui ui ui ui ui 5[ 5[ 5[ oh a# j$ ^_ s6 ^_ q$ ,_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ F{ F{ F{ F{ F{ F{ F{ F{ t& )_ )_ t& t& )_ )_ t& I$ I$ I$ I$ F{ F{ F{ F{ Y% F{ )_ Z x8 T@ t& .Z s6 Tt bc Ma ^_ oh )_ x8 x8 )_ a) *) r} q3 D, uJ '5 pj pj pj pj pj pj pj ui pj `Y YY ti ti YY `Y oh oh oh oh oh oh oh oh ,_ )5 oh Is Is Is oh ^_ )_ )_ )_ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ F{ oh bc 1U 1U 1U 1U 1U 1U 1U A|.g{.1U B) qS qS B) Ma Is )_ )_ )_ )_ )_ )_ )_ )_ )_ )_ F{ F{ F{ F{ F{ I$ I$ F{ F{ F{ )_ )_ )_ F{ )_ )_ F{ Z% Z% )_ Y% Z Z Y% Y% x8 x8 x8 )_ Z Y% x8 F{ F{ F{ )_ x8 .Z s6 Is oh oh Is s6 .Z s6 s6 s6 s6 s6 s6 s6 s6 x8 Y% Z Z Z x8 )_ F{ F{ Y% z<.7}. Z x8 x8 Y% )_ )_ )_ )_ x8 x8 x8 x8 x8 I$ t& t& F{ Y% x8 Is 15+mg.r).r).lg.mg.25+mg.mg.mg.mg.mg.mg.mg.mg.A|.oh )_ x8 Y% Y% x8 )_ F{ Y% Y% Y% Y% Y% Y% Y% Y% .Z .Z .Z .Z .Z .Z .Z .Z Is .Z =L O4 Is oh s6 =L Y% Y% Y% Z z<.z<.)_ Z% F{ x8 Z Z x8 F{ F{ s6 .Z Js Js Js .Z .Z Y% Y% Y% Z ;q.}U D, D, ,b.):+01+}3+k}+k}+!3.d7.d7.Y% Z +s.+s./&.C* f>.be.f>.3. $. q$ 35+x{+[f.jS.45+N|.:}.d=+zY w`.}&+55+65+9#.k^+k^+9#.sx.,*.h=.dZ `F pI Zi.dk.75+85+95+A1.pN.05+cm. &+a5+b5+c5+d5+e5+f5+g5+~` h5+i5+j5+f5+IU `^.@j.A].z].:%.j,.z].:%.l&. /.`^.sd.sd.sd.sd.h&.]-.Nk.Nk.@j.@j.#j.{_.Ef.3%.p&.~u.)e.]f.l9.m9.o[.`*.o[.ux. =.o[.j;+F*.$_.p=+]:+p=+^:+8#.n9.k5+l5+z) jP.m^ E`.m5+n5+o5+p5+q5+r5+s5+qX.t5+u5+v5+w5+x5++;+y5+z5+A5+B5+C5+D5+E5+w3+gU.F5+01+z3+34.s6 ig FR FR gA gA .s..s.]_ ]_ YY Is s6 FR 2x.2x.bd.bd.bd.bd.+s.+s.+s.+s.0d.1x.)_ )_ x8 Y% O* ,5 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 Y% Z Z Y% x8 x8 Y% Y% x8 Z z<.z<.Y% )_ Z Z Z Z Z Z Z Z Y% Y% Y% Y% Y% Y% Y% Y% x8 x8 Y% Z z<.z<. Z O4 s6 Ks Ks Ks Ks Ks Ks Ks Js Js Js Js Js Js Js Js Z Z Z Y% x8 x8 x8 )_ Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% x8 x8 x8 Y% Y% Z )_ x8 Y% Z Z Y% x8 )_ x8 x8 x8 x8 x8 x8 x8 x8 7}.Y% Y% Z I$ h+ F{ <.+G5+H5+I5+J5+K5+L5+M5+N5+O5+P5+Q5+R5+S5+'2+T5+U5+V5+W5+X5+Y5+Z5+&-+%/+`5+ 6+/[+.6++6+@6+#6+$6+%6+&6+*6+=6+=6+*6+-6+;6+>6+,6+'6+)6+!6+~6+Z3+{6+]6+`3+ 4+^6+9[+/6+(6+_6+:6+B$+<6+[6+}6+|6+16+26+36+46+eZ.M:+56+N]+2I.Q$+66+x[ 76+{4+86+96+06+a6+b6+c6+d6+<4+k*.sM sM )_ x8 x8 x8 F;.F;.]Y ]Y ]Y F;.)L.Y% Y% Y% Y% Y% Y% Y% x8 x8 x8 x8 x8 x8 ", "E# '$ '$ '$ >% E E E E D }# D D E n ^% ^% ,% ,% >% >% '$ '$ 9& ^% ,% >% >% ,% ^% 9& ^% ^% ,% ,% >% '$ '$ '$ E# ,% 9& Q% 9& U% U% ,+ &$ &$ . . m+ c% e6+f6+g6+9r.~J.h6+i6+j6+k6+l6+m6+n6+o6+p6+q6+r6+s6+t6+u6+v6+w6+x6+94+y6+b4+z6+A6+B6+C6+a2+D6+E6+F6+F6+G6+H6+I6+n4+J6+K6+v]+L6+M6+N6+O6+P6+Q6+R6+S6+T6+U6+V6+W6+X6+Y6+Z6+`6+ 7+.7++7+@7+#7+$7+%7+&7+*7+=7+-7+;7+>7+,7+'7+)7+!7+~7+{7+]7+5A ^7+Xh DL.>K.:N.DL.m8 /7+(7+9+ dt ^& `+ `+ )= #% |% |% |% |% E7 3c d= 3{ d= V_ M= 3{ #% [! l& i> l& 2% m@ 9& l& l& l& l& l& l& l& l& M$ T$ !% ,' ,' !% T$ M$ T$ T$ T$ T$ T$ T$ T$ {+ /@ (+ (+ 9. q. 6. r$ +% =. =. ). v+ [] [] .# .@ |% 5% &) !% ~+ .. W k` N4 et DW kn PY S2+_7+Uf $q :7+5j.)~.-A <7+[7+[7+EI.Hb..5+.5+}7+u#+|7+17+27+#5+]z.{z.d_.],.79.,l.37+-;+zT 47+57+67+77+&Q 87+97+07+a7+b7+>5+OA Y%+c7+d7+e7+'` '` f7+3^.R{.b~.@*.f=.qQ.re.g7+h7+2#.iD &T [H GU GU [H [H kO %T XJ qI rI G G G rI Zm.[W G rI rI G [W Zm.;5.;5.]}.+ .D1.D1.+ .aZ $[.JK.JK.JK.|r.u].`` Nh.;3+i7+:d.Ro.gh.To.=c.3l.n5.9z.9z.9z.j7+gx.k7+l7+4S wi.m7+n7+]e.o7+,H E(.KF kd.qf.p7+L!+dS dS q7+r7+s7+t7+Ck u7+`G -; <* F{ ti Es ':+':+|5+v7+w7+':+si si si og og og 5[ 5[ 5[ 5[ 5[ ac K> K> K> 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ pj ti ti ui 5[ 5[ fd fd Is a# j$ ^_ s6 ^_ q$ q$ ^_ ^_ ^_ ^_ ^_ ^_ ^_ ^_ F{ F{ F{ F{ F{ F{ F{ F{ t& )_ )_ t& t& )_ )_ t& F{ F{ qj F{ qj F{ qj F{ `Q F{ %n 7}.}U T@ -) z<.s6 Tt bc $| )5 oh )_ x8 Y% x8 %n qj :y D, c, }U '5 '5 '5 '5 '5 pj pj pj 5[ ti YY YY pj pj YY w8.oh oh oh oh oh oh oh oh a# ,_ ^_ oh Is Is oh ^_ x8 x8 )_ )_ F{ I$ I$ Z% '5 '5 '5 '5 '5 '5 '5 oh bc |U 1U |U 1U WG bc WG Tt WG Ma U0 $| U0 $| ^_ x8 x8 O* x8 O* x8 O* x8 O* x8 ,5 )_ '5 I$ >5 Z% I$ I$ F{ F{ F{ )_ )_ )_ )_ )_ )_ I$ t& Z% )_ Z Z O4 Y% Y% x8 x8 x8 x8 z<.Y% )_ F{ I$ F{ %n x8 Y% s6 ,5 oh '5 Is O* .Z O* s6 O* s6 O* s6 O* s6 s6 .Z O4 =L O4 .Z Is oh Is O4 13+13+=L .Z .Z O4 I$ q} F{ )_ x8 Y% Y% Z Y% I$ T@ t& F{ Y% KB Is 15+mg.B) r).g{.mg.z|.mg.A|.mg.A|.mg.A|.mg.A|.A|.oh X[ x8 h*.Y% cN )_ q} Y% h*.Y% h*.Y% h*.Y% h*..Z c8 .Z c8 .Z c8 .Z c8 Is c8 =L 3x.Is ec s6 =L Y% Y% Y% Z z<.z<.)_ Z% Z% F{ x8 )_ I$ t& t& Z% O4 zm.O4 O4 O4 O4 Z Z Z z<.;q.`Q uJ uJ 75.a(+k}+k}+k}+!3.!3.d7.KB KB Y% h*.e; i*.fc xi z#.-L O 2% {! u`.x7+c=+c=+/@+W!+%[.y7+z7+A7+fx.s$.tf.H_.@G.G_.B7+03.s(./Z /d.$[.ji.Qh.!m.ck.C7+D7+E7+#M.8H c5+F7+h5+G7+8H c5+F7+H7+j5+I7+g5+e5+J7+03+;t.A].7..A].F0.!_.@ .!_.@ .N-.@[.m&.M-.sd.M-.`^. /.i&.Nk.Sh.@j../.~_..k.gb.2a.3%.U).U).r'.q&.p[.K7+6).Sa.:-.2:.m[.:-.o9.o9.p9.L7+M7+L7+`8.N7+O7+iP.P7+Q7+R7+S7+T7+U7+V7+W7+X7+Y7+lm.}$+Z7+`7+ 8+.8++8+@8+lv #8+$8+%8+&8+*8+=8+-8+gU.;8+>8+7$+34 )_ sM FR s6 .Z w8.w8.8g.]_ pj YY Is s6 FR c8 2x.+s.+s.+s.+s.+s.+s.61.61.,8++v8+1: w8+x8+y8+z8+A8+Wm B8+C8+D8+E8+j*.FR cN x8 }U uJ uJ F;.F;.]Y ]Y ]Y F;.Y% Y% Y% Y% Y% Y% Y% Y% x8 x8 x8 x8 x8 x8 ", "h> ,& M% M% ,& >% ,% '$ >% D D D n H+ 0 k+ i> Q% 9& ^% ,% >% >% >% ,% ,% ,% ^% ^% U% U% ^% ^% ^% ^% ^% ^% ^% ^% ,% ^% ^% U% U% ^% ,% E 0& K) S s& ]& F8+G8+H8+I8+J8+gu.K8+L8+M8+N8+O8+P8+Q8+R8+S8+T8+U8+V8+W8+X8+Y8+Z8+`8+x6+ 9+.9++9+@9+#9+#9+#9+$9+%9+&9+*9+=9+=9+-9+-9+;9+>9+,9+'9+)9+!9+!9+~9+{9+]9+^9+/9+(9+_9+:9+<9+[9+}9+|9+19+29+39+49+59+69+79+89+99+09+a9+b9+c9+d9+e9+f9+g9+h9+i9+j9+oB k9+l9+{b a%+&K.m9+n9+o9+^T.p9+o0.+% q9+5A.!% h> -h !1.4( si ~% |% >_ >_ U_ o uI.rJ #% c& L) L) L) S& u& S% l& l& {+ {+ {+ ]+ ]+ ]+ {+ {+ {+ {+ {+ {+ {+ {+ {+ h. i+ i+ i+ h. ]+ j+ &. &. &. &. E. Z E. h. {+ ]+ j+ +# +# j+ ]+ {+ #% t% o3 2% {@ l& #. [. t o e @$ r9+m1.s9+t9+u9+4t M;.1k.mG 5'.v9+w9+!(+Te.7N.x9+y9+z9+A9+B9+@5+=;++m.'8.D).9'.9'.N;.'h.C9+D9+2K Xd.E9+F9+rt.J++G9+H9+VL.I9+J9+K9+L9+M9+N9+S).2^.O9+BE $$.eV.2#.%*.P9+e=.Q9+R9+%*.S9+T9+k=+Dg.M#+l=+2&+M#+|&+{}.z`.h,.h,.z`.7Z 9Z j~.iX.9Z 9Z >{.U9+'$+'{.Y` GE Tq.Tq.iD kD EE jD kI No..G .G .G me.uf.uj.lA.(d.=w.9O V9+W9+X9+Y9+rN.8O )S.)S.L` R` l+.W` od.&t.RJ Nt.-M.DF.e`.Z9+`9+xN.LF J!+ 0+@<.yV.p7+dS .0++0+@0+PV U1.y|.Ls '_ 8}. * * )O w4.#0+$0+6% |5+%0+{t.j}+M2 {D lP p] fd fd 4! 4! H{ -5 eH.-5 K> ui ui ti ti pj pj YY fd fd 5[ 5[ ui ti ti pj )_ Z% h+ T@ I$ F{ Z% h+ F{ F{ F{ F{ F{ F{ F{ F{ :] }| '5 ,5 ,5 '5 }| :] i~ KB >5 O) .# O) }| F{ a) d# c# '_ |+.k@.}+.Fs >k Fs >k DR }+.cT [+.k@.sM WG WG dc cc hd A% v$ A% q} cT k@.[+.}+.|+.2( s% -) *) qj qj F{ F{ F{ h+ Z% Is oh $| (* Ma Ks oh oh oh oh oh oh oh oh oh oh oh ^_ ^_ )5 )5 )5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 34 34 34 34 34 34 34 ti dc HB WG tM WG ZQ sM ZQ U# P6 A% / cT ER cT DR >5 >5 34 >5 34 >5 34 >5 Xl '5 Xl '5 Xl '5 Xl '5 )_ x8 Z z<.z<. Z x8 )_ I$ I$ I$ F{ )_ )_ x8 x8 oh Ks .Z Is ^_ )5 I$ )_ F{ )_ uJ }U }U uJ D, qj dt '5 Kb '5 XG O* X0.ZY {Y O* {Y O* {Y O* {Y O* Ks Ks Ks Ks Ks Ks Ks Ks Ma (* /* $| Ks wn.zm.Tt FR #v h*.61.h*.X[ I$ Z% Y% )_ '5 ,5 O* KB [].pj Tt g{.Tt B) (* qS Tt z|.zm.z|.Js A|.Tt 1U bc Ma FR #v cN #v cN #v cN #v h*.e; cN #v h*.+s.h*.#v 1x.Ys.1x.+s.61.e; h*.e; cN e; 61.Ys.61.e; X[ q} Y% Y% Y% Y% Y% Y% Y% Y% F{ )_ )_ )_ x8 x8 Y% Y% X[ c8 61.61.cN X[ h*.1x.h*.h*.h*.h*.h*.h*.51.Y% G7 &0+k}+N/.34.d> i~ KB a) *0+DR Gs =0+R9.D' ', ,+ d> -0+;0+2.+>0+,0+'0+:}.XY.DK.65+,$+22.q/.UB.fc.)0+x].^a.x].7n.|q.aw.s]..&;.4E 60+d% ;x SL fN z8.70+z8.Jb q` Y% Y% Y% x8 )_ )_ F{ F{ ,5 )_ x8 x8 x8 x8 )_ X[ 61.61.61.61.61.61. Z Z z<.z<.z<.z<.z<.z<.z<.z<.)_ )_ )_ )_ )_ )_ )_ )_ x8 Y% z<.7}.7}.z<.Y% x8 Y% Y% x8 Y% Y% z<.7}.8}.Y% Y% Y% Y% Y% Y% Y% Y% h*.h*.h*.h*.h*.h*.h*.h*.61.61.61.61.61.61.61.61.q} sM cN c8 h*.FR X[ ec cN sM h*.80+90+3x.h*.61.)_ F{ I$ Z% I$ F{ x8 Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% x8 x8 x8 Y% Y% Y% Y% Y% Y% Y% Y% 51.bE bE 61.X[ [U Q( 00+xi me n,+ic g>.tP 8d.a0+b0+c0+d0+e0+f0+g0+w,+h0+i0+C&+j0+k0+l0+m0+n0+B$+o0+$/+p0+L,+q0+r0+*_+=_+w:+w:+s0+W3+W3+&|+&|+t0+u0+u0+u0+v0+w0+x0+y0+d8+f8+,6+z0+A0+B0+C0+D0+E0+F0+G0+H0+I0+J0+9[+K0+L0+M0+$4+N0+O0+P0+Q0+R0+v)+S0+T0+U0+V0+7Z.W0+P]+q~+X0+2A.Y0+6> Z0+`0+ a+.a++a+@a+~D E8++2 O; #a+c# c, c, c, c, F;.F;.F;.O* x8 x8 x8 x8 x8 x8 x8 x8 x8 )_ F{ I$ F{ x8 ", "8& j& N% M% ,& h> '& ,% ^% C C C D 0% n ,+ 9& 9& U% ^% ,% >% >% ,% ,% ^% ^% U% U% U% 9& ^% ^% ^% ^% ^% ^% ^% ^% >% ,% ^% U% U% ^% ^% D ,* .% R# N@ $a+%> %a+&a+*a+=a+-a+2/.;a+v,+>a+,a+'a+)a+!a+S8+~a+{a+]a+]a+^a+^a+Y8+`8+/a+/a+(a+.9+_a+:a+_ >_ o o uI.rJ T$ c& c& c& [! S& u& u& l& l& {+ {+ {+ ]+ G. G. .. .. .. .. .. .. .. .. Z Z ` ` Z .. @. @. {+ {+ {+ {+ {+ {+ {+ {+ {+ ]+ j+ +# +# j+ ]+ {+ {@ U@ .* 2% {@ l& m@ 2% {@ k+ 9& ,% 6+ &# Fa+Ga+Ha+Ia+Ja+Ka+La+Ma+hr wo.;h.'h.7N.x9+Na+Oa+Pa+Qa+!h.~,.~h.9'.>l.>l.>l.>l..S.~,.ps.Tv.2K It 8/.Ra+Sa+Ta+Ua+Va+Wa+Xa+Ya+Za+`a+ b+.b+2^.Fp.+b+E].P@.@b+$*.#b+e=.Q9+R9+$*.$b+%b+N#+2&+N#+N#+T++(X.i,.|..z`.z`.z`.,{.7Z 9Z >{.j~.j~.j~.>{.U9+'$+'$+P:.7R EE EE iD kD iD EU }H No.No.jD No.}H @D.Yu.jI Z#.>e.Z#.&b+*b+ J.=b+-b+8L fk.&c.>e.^d.>e.Z#.G0.xj.xl.jk.TA.xz.;b+uA.ld.~P.YB.5D >b+,b+_b.'b+)b+VB Tt.!b+^U ~b+wk.KN.4H.UH.T@ :] ti =5 |x. F.g% [3+%0+%0+aq.{b+Zl rS Ma 5[ 5[ :] K> ;5 ]b+]b+]b+K> ui ui ui ti pj pj pj 5[ 5[ 5[ ui ui ui ui ui I$ t& h+ T@ I$ F{ I$ T@ F{ F{ F{ F{ F{ F{ F{ F{ :] }| '5 ,5 ,5 '5 }| :] KB O* >5 :] O) :] }| >5 :y 2( :* 2( |+.}+.|+.2( >k >k >k |+.}+.}+.}+.k@.ec WG WG dc cc hd A% A% O( q} cT k@.[+.}+.|+.>k =) =) q3 :y qj qj F{ I$ t& I$ Is Is Ma $| bc Js oh oh oh oh oh oh oh oh oh oh oh ^_ ^_ )5 )5 )5 ,5 ,5 ,5 ,5 ,5 ,5 Ds Ds 34 34 G7 G7 G7 G7 G7 Hs cc HB tM tM [U ZQ g7 g7 O; <] Gs ER B|.cE cE DR LB Xl Xl Xl Xl Xl Xl Xl Xl Xl Xl Xl Xl Xl Xl '5 F{ )_ Y% Z Z Y% )_ F{ I$ I$ I$ F{ )_ )_ )_ s6 oh Ks Js Tt ^_ )5 I$ )_ F{ )_ uJ }U ,b.c, D, :y F;.F;.{Y F;.{Y F;.#U.vM.{Y F;.{Y F;.{Y F;.{Y O* Ks A|.A|.A|.A|.A|.A|.A|.g{.B) $n B) z|.ef.z|.:I ZQ g7 e; e; h*.cN F{ I$ Y% )_ '5 ,5 [].d7.[].pj YY Ks Ks bc $| Ma Tt zm.Tt Tt Tt Tt Ks Ks Ks Ks cN #v #v #v #v #v #v #v e; #v #v #v e; e; e; #v Ys.Ys.+s.+s.+s.e; e; e; #v e; +s.Ys.+s.e; g7 q} Y% Y% Y% Y% Y% Y% Y% Y% )_ )_ )_ )_ x8 x8 Y% Y% X[ h*.61.h*.cN X[ cN 61.h*.h*.h*.h*.h*.cN cN x8 ]_ P~ Hj.Xl Xl )i.ZY '5 uJ $U.a) e# E- 7. ,q '. 34 ^b+/b+(b+_b+:b+6+!6+~6+B0+B0+B0+Fb+F0+Gb+Hb+H0+I0+Ib+Jb+Jb+Kb+Kb+Lb+Lb+N0+Mb+Nb+Ob+Pb+Qb+T0+Rb+Sb+Tb+Ub+Vb+Wb+Xb+Yb+Zb+`b+ c+.c++c+@c+#c+$~+d6+ZQ !_ D- >k d6.d6.c, c, F;.F;.O* O* x8 x8 x8 x8 x8 x8 x8 x8 )_ )_ F{ F{ )_ x8 ", "8& j& N% M% ,& h> '& 9& 9& V V V ,+ J# }# D ,% ,% ,% ,% ,% ,% ,% ^% U% U% U% 9& 9& Q% Q% 9& 9& 9& 9& 9& 9& 9& 9& '$ >% ,% ^% U% U% U% C `& I# R$ X% Xn %> %a+$c+%c+&c+-/.*c+=c+-c+;c+>c+'a+)a+!a+S8+{a+{a+]a+,c+'c+'c+Y8+Y8+/a+/a+)c+ 9+!c+T8+~c+{c+~c+T8+]c+^c+/c+(c+q6+_c+q6+(c+:c+^c+_ >_ o o uI.rJ M$ c& 9- m& C& C& S& S& l& l& {+ {+ {+ ]+ G. G. .. .. .. .. .. .. .. .. . ` Z .. @. @. .. .. ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ {+ ]+ j+ +# +# j+ ]+ {+ {@ U@ 2% U@ m@ {@ m@ 2% .* 2% m@ {@ i> '$ ' }@ yc+@^.x:.zc+Ac+~z./y.!~.>h.cQ.+5+'`.z9+Bc+Cc+Dc+Qe.w%.N;.ya.9'.8(.4Y 4Y +m.8'.B).(y.xo.pt Ec+Fc+Gc+Hc+Ic+Jc+Kc+Lc+Mc+Nc+MA 5~.>,+T).j/.s_.__.6:.Jr.b~.qe.re.b~.@*.2#.qe.+D.4#.4#.+D.&T FU a<.`F |..,{.,{.,{.7Z iX.j~.>{.>{.U9+U9+U9+U9+U9+U9+bZ FE kD iD kD lD kD }W No.jD jD jD No.5 >5 '5 '5 >5 >5 }| '5 >5 >5 >5 >5 >5 >5 >5 D, q3 r} r} :y :y q3 =) q3 q3 :y :y :y D, D, %n oh bc bc Ma ^_ )5 Z% Z% I$ F{ %n %n D, D, :y q3 L> 48 -j Ka LB LB >5 >5 }| '5 `Y YY p] p] 9e.8e.pj pj pj pj pj pj pj pj pj pj pj ti ti ui ui ui Ds Ds Ds Ds Ds Ds 34.34.G7 G7 G7 G7 G7 G7 G7 Hs ^_ dc WG WG ec sM X[ X[ O( q} cT k@.[+.}+.}+.DR dt ,5 ,5 ,5 ,5 ,5 ,5 ,5 '5 '5 '5 '5 '5 '5 '5 '5 F{ X[ X[ cN cN X[ X[ q} O( O( q} q} q} X[ X[ sM ec tJ =8.:I cc hd O( X[ q} X[ k@.51.E- [+.}+.:y }U }U )L.uJ F;.uJ F;.uJ F;.uJ F;.uJ F;.uJ F;.x8 Ks Zn Zn Zn Zn Zn Zn Zn zh.Zn |U Li.zh. d+zh.:I [U / #v #v e; #v cN X[ Y% )_ '5 ,5 O* KB O* pj `Y 8e.8e.9e.p] p] 9e.'> _y _y p] P9.9e.8e.,&+zm.cN cN cN cN cN cN cN cN cN cN cN cN cN cN cN cN 1x.61.61.61.h*.h*.cN cN h*.h*.61.61.61.cN X[ X[ Y% Y% Y% Y% Y% Y% Y% Y% )_ )_ )_ x8 x8 Y% Y% Y% X[ h*.61.h*.X[ q} cN h*.61.61.61.h*.cN cN X[ )_ ,5 )i.)i.'5 '5 KB KB >5 vM..d+hu '. v+ N j@ [] +d+@d+#d+PN. (.Tj.Tj.$d+bP.DA 88.t(.t(.^X v>.4Z 8n.%d+&d+&d+&d+Kk.1Z 1Z :..D@.Q*.:..E1.v>.Q:.le.}W }W EU EU EU Tq.kD lD kD lD PX Mo.a<.ZF Pp.Pp.v+.h=.D .Df.L@.-*.gZ [o.# .Df.8..vY v+.h=.v+.vY A].l&.A].A].m&.`^.sc../.]X ]X ]X k&.k&.Dl.Dl.;x.#c.(X Pu.Pq.Bt.}o.$P. ].Pq.*d+/:+]0+=d+3b+W# -d+;d+>d+,d+;i 'd+)d+!d+mM.co.|0+C^+~d+ka.{d+Oc.]d+^d+,= S+ q# ;$ 5z V$.+Z 5z dN +Z d6.V$.V$.d6.c, %n )_ )_ F{ F{ F{ I$ I$ )_ )_ x8 x8 x8 x8 )_ )_ x8 x8 x8 x8 x8 x8 x8 x8 z<.z<.z<.z<.z<.z<.z<.z<.Y% Y% Y% Y% Y% Y% Y% Y% Y% Z Z z<.z<. Z Z Y% 8}.7}.z<.Y% Y% x8 x8 Y% z<.z<.z<.z<.z<.z<.z<.z<.h*.h*.h*.h*.h*.h*.h*.h*.61.61.61.61.61.61.61.61.X[ cN cN h*.h*.cN cN X[ cN h*.61.1x.1x.1x.1x.61.x8 x8 )_ )_ x8 Y% Z z<.Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Z z<.7}.7}.7}.Y% Y% Y% Y% Y% Y% Y% Y% w$ O( h*.61.2x.Q( Q( eb+/d+{, (d+H1+_d+ib+:d+m{.k d6.d6.c, c, F;.F;.O* O* x8 x8 x8 x8 x8 x8 x8 x8 F{ F{ )_ x8 Y% x8 ", "8& j& N% M% ,& h> '& 9& 9& ,+ ,+ ,+ ,+ R$ C n '$ >% >% ,% ,% ^% ^% U% U% 9& 9& Q% Q% Q% i> 9& 9& 9& 9& 9& 9& 9& 9& E# '$ >% ^% U% 9& 9& ,+ '* H$ R$ W% nk Cd+Dd+Ed+c! Fd+nN Gd+Hd+Id+Jd+Kd+Ld+Md+Nd+!a+{a+{a+,c+,c+'c+'c+Od+Y8+Pd+/a+)c+/a+Qd+,c+!c+]a+!c+]a+!c+]a+Rd+Sd+Td+Ud+Vd+Sd+Rd+Wd+Xd+_c+3a+3a+Yd+S~+Zd+`d+ e+.e++e+@e+#e+$e+%e+&e+*e+=e+-e+;e+>e+,e+'e+)e+!e+~e+{e+]e+^e+/e+(e+_e+:e+_ U_ o uI.V_ ^{ c& m& D& u& C& [! L) l& l& {+ {+ {+ ]+ G. G. .. .. .. .. .. .. .. .. . ` .. +. +. +. .. Z j+ j+ j+ j+ j+ j+ j+ j+ ]+ ]+ j+ j+ j+ j+ ]+ ]+ m@ U@ U@ U@ m@ m@ m@ U@ m@ m@ {@ m@ {@ i> >% #$ @$ &~.i{.ce+de+ee+~.xB. m.,~.RZ d .Re.Re.8(. m.KL.'(+wo.ie+pt [c je+ke+D'+#d.le+(1+me+ne+oe+|y.%5.Fp.$/.qV ^_.(_.L%.@*.re.qe.pe+2#.2#.re.n$.b~.@*.n$.GU +D.+D.CU |..,{.,{.7Z iX.9Z j~.>{.U9+U9+U9+U9+U9+>{.>{.E@.pe.lD kD lD PX lD EE EU EU jD jD No.e.8O vj.V9+gk.re+v6.v6.Pc+%c.R` /Z V|.7y.9y.K_.WB.v/.se+DY @v.ac.ac.te+Rt.mE mE ue+ve+p7+p7+we+qz./w.xe+ye+a- a- -j Y5 &5 fL.Es p] bc dc F- vi cc cc cc ^_ ti Hs |x.|x..o ui ui ui ui ui ui ui pj ti ti ui 5[ 5[ fd fd h+ h+ T@ t& I$ F{ F{ F{ Z% Z% Z% Z% Z% Z% Z% Z% >5 >5 >5 >5 >5 >5 >5 >5 :] }| >5 ,5 ,5 '5 >5 }| uJ :y r} r} :y :y r} '' :y :y :y :y :y :y D, %n ^_ Ma Ma Ma ^_ ^_ I$ I$ F{ F{ qj %n D, :y :y :y 48 48 -j Ka LB LB >5 }| '5 ,5 YY `Y 9e.9e.9e.8e.pj pj pj pj pj pj pj pj pj pj pj ti ti ui ui ui Ds Ds Ds Ds Ds Ds 34.34.G7 G7 G7 G7 G7 G7 G7 Hs ^_ dc WG WG ec sM X[ X[ cN cN k@.k@.[+.}+.}+.cT uJ O* O* O* O* O* O* O* '5 '5 '5 '5 '5 '5 '5 F{ q} q} q} X[ X[ q} q} q} q} q} q} q} q} q} X[ sM ec tJ =8.:I cc hd O( X[ q} X[ k@.51.E- [+.}+.|+.k@.k@.k@.k@.cT DR Fs Fs k@.k@.k@.k@.k@.k@.k@.cN tJ Zn Zn Zn Zn Zn Zn Zn ze+ d+zh.zh.zh.Zn Zn JB +2 / g7 #v #v e; h*.h*.Y% )_ F{ ,5 O* KB O* '5 `Y 8e.,&+8e.P9.P9.8e.'> p] p] P9.P9.9e.9e.8e.gA x8 cN x8 cN x8 cN x8 cN )_ cN Y% cN )_ X[ x8 h*. Z 61. Z h*.Y% cN x8 cN Z 61. Z h*.Y% cN x8 )_ Y% Y% Y% Y% Y% Y% Y% Y% )_ )_ x8 x8 Y% Y% Z Z X[ h*.61.h*.X[ q} X[ cN 1x.1x.61.h*.cN cN X[ X[ )_ Z z<.)_ x8 ,v.i~ O* )L.)L.d7 0# *$ W* 0# Ae+Be+Ce+Xn.De+VF.Kh.zk.Ee+Fe+5v.b3.s(.l4.e|.b<.;{.qd.Ge+Kk.6Z 6Z 8n.)_.y].W` :..D@.:..E1.Q:.E1.:R ,}.9h.EU 3p.iD @ .a<.>}.kD IU lD @ .Mo.>}.Pp.dZ -*.-*.[o.[o.Y..Y..Y..l=.Y..-*.h=.vY vY 5#.h=.h=.A].A].A]. /.m&.sd.sc.sc.Sh.Sh.Sh.Sh.Sh.Sh.Sh.Sh.$c.3J.e4.7,+MV.b..j&.4^.;x.Ta.l3.He+Ie+ng.B& c( R7+Je+Ke+a:.p;+-k. ,.Hc.Le+Me+%O.xH Ne+v<.Oe+Pe+r* S+ <+ e= *j V$.%o.`E.dN dN +Z d6.d6.d6.d6.c, qj F{ F{ F{ F{ F{ F{ F{ x8 x8 )_ )_ )_ )_ x8 x8 )_ )_ )_ )_ )_ )_ )_ )_ Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z 7}.7}. Z Y% Y% Y% Y% Z z<.z<.z<.z<.z<.z<.z<.z<.h*.h*.h*.h*.h*.h*.h*.h*.61.61.61.61.61.61.61.61.cN cN h*.h*.h*.h*.cN cN X[ 61.1x.h*.h*.f+,f+'f+'f+)f+!f+~f+{f+]f+#4+^f+_6+_6+e~+e~+od+/f+(f+_f+:f+ '& ^% ^% }# }# }# }# R$ C l '$ '$ >% ,% ^% ^% U% U% U% 9& 9& Q% Q% Q% i> 9& 9& 9& 9& 9& 9& 9& 9& E# '$ >% ^% U% 9& 9& ,+ 0& '% R# W% 0f+af+bf+cf+64 df+Gx ef+ff+gf+hf+if+jf+Md+Nd+!a+kf+kf+,c+lf+mf+mf+Od+Od+Pd+Pd+)c+/a+mf+nf+Qd+nf+Qd+nf+W8+of+pf+qf+rf+sf+tf+sf+rf+rf+Rd+^c+uf+|a+Yd+L~+vf+wf+ e+xf+yf+zf+Af+Bf+Cf+Df+Ef+Ff+Gf+Hf+If+Jf+Kf+Lf+Mf+Nf+Of+Pf+Qf+Rf+Sf+Tf+Uf+Vf+Wf+Xf+Yf+Zf+`f+ g+A +.g++g+dW.GW.BO.@g+#g+$g+j4 +[ j+ {! 9e.=] ^* ~% ~% 2b >_ U_ U_ o V_ ^{ c& m& D& u& C& [! L) l& l& {+ {+ {+ ]+ G. G. .. .. .. .. .. .. .. .. . Z @. +. /. +. @. .. j+ j+ j+ j+ j+ j+ j+ j+ j+ j+ ]+ ]+ ]+ ]+ j+ j+ U@ m@ m@ m@ U@ U@ U@ m@ l& k+ l& {@ U@ {@ i> ^% i @$ %g+&g+Wf =m *g+=g+8V.-A h1.s{.>l.V +-g+5Y Y*+X>+=;+z#+RZ Yc.;g+>g+Vc.,~.z'+,g+n{.~|.'g+)g+8d @{ eW !g+G9+~g+{g+]g+^g+/g+L}.$/.F].4:.^_.(_.L%.@b+2#.re.re.pe+pe+re.3#.@b+@*.qQ.&T qQ.4#.hV.V{.V{.|..!>.q(.8^.8^.8^.E@.E@.E@.E@.E@.6^.6^.6^.lI PX kD lD PX lD iD }W }W EU jD No.b+oE 9m.bI 'b+!].!].2g+3g+4g+04.5g+6z fK gN a' O) 5[ ti oh ec +2 V5 |* +2 +2 HB dc Ma _y _y )O ui ui ui ui 5[ 5[ 5[ 5[ pj ti ti ui 5[ 5[ fd fd [. h+ t& t& Z% I$ F{ )_ Z% Z% Z% Z% Z% Z% Z% Z% >5 >5 >5 >5 >5 >5 >5 >5 O) :] '5 ,5 O* '5 }| :] uJ qj *) *) qj qj *) s% %n %n qj qj qj qj qj F{ ^_ Ma Ma Ma ^_ ^_ I$ I$ )_ F{ qj qj :y :y :y D, 48 ;,.wW wW Kb `z b, b, Ds Xl ]_ ({ ~I.+C.+C.~I.]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ Hs Hs .o .o .o N/.N/.N/.N/.N/.N/.N/.N/.G7 G7 G7 G7 G7 G7 G7 Hs ^_ dc WG WG ec sM X[ X[ h*.cN k@.cT }+.}+.}+.cT uJ x8 x8 x8 x8 x8 x8 x8 F{ F{ F{ F{ F{ F{ F{ F{ X[ / / / / / / g7 g7 g7 / / / / / [U [U k*.j*.JB +2 61 [| g7 / g7 xF dT |c.B|.cE dE vM vM ER ER vM Gs i; N; xF xF xF xF xF xF xF #v ig k*.k*.k*.k*.k*.k*.k*.E8+E8+E8+<4+k*.JB JB JB N=.-L -L fc fc i*.e; +s.h*.X[ q} )_ x8 Y% x8 '5 YY .s.x8.y{ ll.({ ll.y{ .s..s.ll.ll.({ ({ ]_ pj O* x8 O* x8 O* x8 O* x8 >5 x8 ZY Y% '5 I$ ,5 Y% ZY Z KB Y% O* x8 ,5 )_ ZY Z KB Y% O* x8 O* x8 Y% Y% Y% Y% Y% Y% Y% Y% x8 x8 x8 Y% Y% Z Z Z X[ h*.61.h*.q} O( q} X[ 61.61.61.h*.cN cN cN X[ q} 61.1x.h*.61.Rx.6g+i~ d7.K> 4! G{ != d= 7g+8g+9g+0g+$d+ag+bg+nS.cg+]>.c3. $.F0.. .e|..j..j..j.9Z pc.&d+6Z 7n.I>.U` Y#.<..V` od.E1._R ^Z _2.&t.e3.l4.3p.l4.IU :%.@[.l&.jZ N-.jZ N-.4W l&.% .m&.EP t(.{7.{7.|:.|:.#{.#{.{7.|:.)*./X W*.W*./X wY m&.m&.`^.sd.sc../../../.Nk.Nk.Nk.Nk.@j.@j.@j.@j.Y*.$c.L'+@j../.fZ fZ sd.dg+{{.k3.eg+4!.B& C% fg+gg+hg+ig+jg+: .oX. ,.Hd..,.kg+lg+q3+v<.mg+ng+c= O# *. '' =) q3 75.ye+75.D, D, D, D, D, c, ,b.,b.qj F{ F{ F{ )_ )_ )_ )_ Y% x8 )_ F{ F{ )_ x8 Y% )_ )_ )_ )_ )_ )_ )_ )_ Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Y% Y% Y% Y% Z 7}.7}.z<.z<.z<.z<.z<.z<.z<.z<.h*.h*.h*.h*.h*.h*.h*.h*.61.61.61.61.61.61.61.61.h*.h*.h*.h*.h*.h*.h*.h*.X[ 1x.1x.X[ cN 90+90+h*.Y% Y% Z Z z<.z<.z<.z<.Y% Y% Y% Y% Y% Y% Y% Y% x8 Y% Z z<.7}.8}.Rx.Rx.Y% Y% Y% Y% Y% Y% Y% Y% cc FR Qe+E8+j*.'!.0e.>b.og+pg+qg+3=+rg+sg+tg+ug+vg+wg+1d+xg+yg+b)+d)+zg+f)+Ag+Bg+Cg+Y1+Dg+`(+Eg+yb+yb+Dg+Fg+Gg+*f+=_+w:+Hg+Ig+Jg+w:+Kg+Lg+Mg++_+n8+^f+M0+Ng+^|+Og+n8+L0+~_+~_+~_+cd+@4+Pg+Qg+Rg+Sg+Tg+Ug+a[+Vg+Wg+Kb+Kb+Xg+Lb+_6+Yg+e~+e~+Zg+`g+(f+ h+__+R@+.h++h+@h+#h+$++|A.+#+$h+%h+&h+*h+=h+-h+Ad+;h+s[++2 O; |c.-; zq zq c, c, uJ uJ O* O* x8 x8 x8 x8 x8 x8 x8 x8 F{ )_ Y% Z Z x8 ", "8& j& N% M% ,& h> '& ,% ,% E E E D J# C E >% >% ,% ^% ^% U% U% ^% U% U% U% 9& 9& Q% Q% 9& 9& 9& 9& 9& 9& 9& 9& '$ >% ,% ^% U% U% U% C /& '% R# W% kP.&'+>h+,h+'h+)h+!h+;a+~h+{h+]h+^h+/h+(h+_h+Nd+kf+kf+lf+lf+mf+mf+:h+Od+_ U_ o V_ &% 9- m& m& C& S& [! L) l& l& {+ {+ {+ ]+ G. G. .. .. .. .. .. .. .. .. Z .. @. +. +. +. +. @. ]+ ]+ ]+ ]+ ]+ ]+ ]+ ]+ +# j+ ]+ {+ {+ ]+ j+ +# 2% m@ {@ m@ U@ 2% U@ {@ {@ l& {@ U@ .* .* m@ k+ }# h X. _l Mh+ f Nh+UC.Oh+Ph+<7+C).+m.vo.3{+E%+z'+Qh+iF.`L 9A.4V.5V.5V.bQ.)8.B%+Rh+X@.>g .q(.q(.q(.q(.8^.8^.8^.8^.8^.8^.6^.6^.a<.PX kD kD lD lD iD }W Tq.}W EU No.No.No.No.jD <:.'_.Va.Va.'_.s9.s9.s9.5..D1.Va.'_.e|.+ .'_.&c.C<+GP `h+3v.j4.63.j7+ i+.i++i+!3+@i+#i+$i+%i+&i+{x.*i+Ih.=i+*@+0+.-0+-i+;i+N,.FJ >i+,i+'i+'i+>x r} a) a) DR Gs ./ j; [I b: b: f= pg U0 qS qS rS C' ui ui 5[ 5[ 5[ fd fd ui ui ui ui ui 5[ 5[ 5[ h+ T@ Z% Z% t& t& I$ )_ Z% Z% Z% Z% Z% Z% Z% Z% '5 >5 >5 }| }| >5 >5 '5 }| >5 '5 ,5 ,5 '5 }| :] %n a) *) *) qj qj a) -) %n %n %n qj qj qj a) I$ )5 $| $| Ma ^_ oh F{ F{ )_ )_ qj a) q3 :y D, q` ;,.;,.wW wW Kb `z b, K> Ds 34 Hs ]_ ~I.+C.~I.EV.]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ Hs Hs .o .o .o N/.N/.N/.N/.N/.N/.N/.N/.G7 G7 G7 34 G7 34 G7 Hs ^_ dc WG WG ec sM X[ X[ X[ X[ DR DR |+.}+.[+.k@.cT X[ X[ X[ X[ X[ X[ X[ q} q} q} q} q} q} q} q} #v g7 g7 / / g7 g7 #v g7 g7 g7 / / / [| +2 [U k*.j*.JB +2 61 [| g7 / g7 xF dT |c.B|.cE T6 H' ';.P~.!J.P~.z#.H' @6 R9.!J.R9.!J.R9.!J.R9.i*.Q( k*.k*.k*.k*.k*.k*.k*.k*.<4+E8+j*.JB tM tM 8 +f>.xi xi -L fc fc e; e; e; X[ q} X[ x8 Y% x8 F{ pj ll.y{ y{ ll.({ ({ ll.y{ y{ .s.ll.({ ]_ Hs Hs O* O* O* O* O* O* O* O* }| ,5 ZY KB >5 }| '5 ZY KB KB KB O* O* ,5 ,5 ,5 ,v.ZY KB O* ,5 O* O* KB Y% Y% Y% Y% Y% Y% Y% Y% x8 x8 Y% Y% Z Z Z z<.cN h*.61.cN O( A% O( q} h*.h*.h*.h*.h*.h*.h*.h*.g7 Q5 Q5 #v e; 0d.Rx.,v.[].3{ G{ )i+!i+~i+{i+]i+Ak.lH.D*.EA mS.|%.,s.HK.E0.EE GE K ~m.Qh.~m.^i+j~.qd.&d+6Z 1Z I>.U` [..Y#.U` l4.B}.d3.d3.^Z _2.v>.E_.s(.e;.!_.^-.N-./-.A].D}.j,./-.:%.D}. /.i=.t(.Nz.{7.x'.#{.x6.)*.22.{7.r/.{7.22./X h;./X wY sd.sd../.@j.@j.@j.@j../.Nk.Nk.@j.@j.@j../../../.Y*.$c.@j../.M-.M-.+[.tc.YF.42.<(+l5+Zm z# /i+9d + '= x5 x5 x5 x5 >' >' >' O6 O6 x5 x5 >' >' >' L_ x5 x5 x5 x5 x5 x5 x5 x5 M_ O6 x5 >' >' x5 x5 F UO H$ R$ W% t[+Ty.lC.QJ.5] )j Hi+Hd+Ii+Ji+Ki+Li+Mi+(h+_h+Nd+Ni+Ni+lf+Sd+mf+mf+:h+:h+j+,j+'j+)j+!j+~j+)j+{j+]j+^j+/j+(j+_j+:j+_ >_ U_ )= !1.Ll N~.*- &- &- &- &- #% #% @ @ @ .@ T# G. .. .. .. .. .. .. .. .. @. @. .. .. @. +. /. /. {+ @ @ @ @ @ @ @ J- +@ .@ @ @ .@ +@ J- 2% m@ l& {@ 2% .* U@ {@ m@ {@ {@ U@ * * 2% {@ k+ 9& E M@ %- 'F fF.7j+8j+=s 9j+,g+z'+so.D%+!8.49.49.iF.iF.-E.,(+27+#5+;E.27+0j+|T aj+)i 'f am bj+x~ cj+dj+ej+fj+{< gj+hj+S%+ij+jj+-u.2|.4:.w1.t_.s_.s_.t_.+b+LE wd.wd.eV.O@.C .**.C .a..$ .f,.z_.o+.U{.|..!>.!>.|..|..V{.|..|..!>.q(.8^.8^.8^.a<.lD iD EE iD kD EE }W Tq.}W EU No.No.jD EU EU $[.b<.b<.$[.s9.'_.'_.'_.+ .+ .+ .+ .. .e|.$[.'_.aw.0w.kj+m5.^).k{+!2.5w.lj+mj+nj+oj+pj+qj+rj+s~.y7+{H OS Q#.NF (w }O hU sj+tj+fM uj+4m.vj+wj+gP Y0.|+.>k -; ZG )' c' V/ [I [I ,- (= sJ 9u.9u.$n C' ui ui 5[ fd fd fd * 5[ 5[ 5[ ui ui ui ui ui h+ Z% F{ I$ t& T@ Z% F{ F{ F{ F{ F{ F{ F{ F{ F{ ,5 '5 }| :] :] }| '5 ,5 '5 '5 '5 '5 >5 }| :] O) '5 }| :] }| '5 ,5 '5 }| O* ,5 ,5 ,5 '5 >5 >5 >5 ui C' C' _y ti pj '5 '5 O* ,5 LB hu -j Ka q` Jb ;,.xW xW xW ]n.Q5.24 24 N/.$w {_ ;b.xj+OJ.xj+8H.]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ ]_ Hs Hs .o .o .o G7 G7 G7 G7 G7 G7 34 34 34 34 34 >5 34 >5 34 ti cc HB tM tM [U ZQ g7 g7 [| [| ', ', Ls dE B|.dT vM / / / / / / / / / / / / / / / bd./&.fc -L -L fc /&.bd.i*.fc fc fc -L gd gd |].N=.8 +wq '!.|].b: gd fc -L fc R9.cd.6H.:U 8!.T6 )' Z_.!J.!' ~w.><.rj Z_.!J.,<.!J.,<.!J.,<.!J.f>.Q( 8 +8 +8 +8 +8 +8 +8 +s[+8 +&#+8 +s[+f= s[+8 +|3+eL.X/ me me me i*.i*./&.g7 / g7 cN h*.cN F{ }| Ds d7.)i.[].Xl Xl Ds [].[].[].[].Ds Ds Ds Ds O* O* O* O* O* O* O* O* :] ,5 ZY KB }| O) '5 ZY d7.d7.[].[].Ds Ds Ds Ds yj+)i.d7.Ds Ds Ds [].KB Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Z Z Z z<.z<.cN h*.61.cN O( v$ A% O( X[ X[ cN cN h*.61.1x.Ys.i*.qh zj+fc / h*..Z ti Hs E7 uK.Aj+Bj+Cj+Dj+Ej+Fj+vi.,s.)u.O-.C0.{X }H }W Cg.Cg.^i+Gj+rj.Hj+j1+E!.I>.I>.2Z T` U` U` [..l&.:%.{` EP {` EP Ek.^Z p/.Lz./-.12.U*.r5.U*.12.j=.'*.D}.@1.U*.@1.D}.'*.sV y'.sV y'.sV y'.sV h3.22.V%.Nz.V%.32.tV M>.h;.Qu.sc../.Nk.Nk.Nk.@j../.Nk.Nk.Nk.@j.@j../../../.tc.~_.uY a..fZ 7..O%.AY.3%.v!+bp.iI.-@ 6- ,z.Ij+Ly Jj+Kj+Lj+8-.B=+pW C=+|$+Mj+Nj+/Q |i+Oj+'* P# %& r} c, :y q3 c, 75.c, c, D, :y :y :y c, ,b.`Q uJ x8 x8 Y% Y% Z Z Z Z Y% F{ I$ I$ F{ Y% Z Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 7}.z<.Y% x8 x8 Y% z<.7}.z<. Z Y% Y% Y% Z z<.z<.Y% Y% Y% Y% Y% Y% Y% Y% h*.h*.h*.h*.h*.h*.h*.h*.61.61.61.61.61.61.61.61.1x.61.h*.cN cN h*.61.1x.q} 0d.90+A% O( 0d.Pj+h*.F{ x8 Y% z<.z<.z<. Z Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Z Z Z Z Y% Y% Y% Y% Y% Y% Y% .Z U0 ~D IB g= s[+M)+Qj+Rj+Sj+Tj+6t Uj+Vj+Wj+Xj+Yj+Zj+`j+ k+.k++k+H:+@k+#k+od+$k+%k+d~+Dg+~/+Dg+Eg++/+yb+di+&k+*k+=k+*f+*_+-k+-k+;k+Mg+ei+>k+>k+$4+,k+'k+'k+'k+'k+'k+%4+%4+)k+)k+)k+!k+~k+{k+]k+^k+/k+(k+(k+Ng+Ng+]_+_k+]_+:k+]_+[]+%4+,k+,k+%4+/f+(|+V&+R.+.d>.[+.[+.k@.k@.x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 Z Y% x8 )_ F{ F{ ", "Zm Fi+Gi+k3 4( w8 G) x5 O6 a% [# a% '= ]= U f+ >' >' >' >' >' >' >' M_ O6 O6 O6 x5 x5 >' >' x5 x5 x5 x5 x5 x5 x5 x5 O6 x5 x5 >' >' x5 O6 a% %5 G$ G$ B w< ak+vJ bk+ck+Tc.dk+ek+fk+gk+hk+ik+Mi+(h+_h+Nd+Ni+Ni+lf+Sd+jk+mf+:h+:h+_ >_ >_ .h.Ll N~.Y^ ^{ ^{ &- &% #% #% @ @ @ .@ T# T# {+ .. .. .. .. .. .. .. +. @. .. Z .. @. /. m* `+ `+ `+ `+ `+ `+ `+ `+ J- +@ .@ @ @ .@ +@ J- .* m@ l& {@ 2% .* U@ l& {@ l& l& m@ 2% 2% m@ l& t% T$ !% i+ t y@ =l+-l+;l+} . X.>l+G++,l+NO.],.Dw Dw 89.iF.V*+'l+)l+)l+W2+;^+!l+3_.Y>+:q .q(.8^.YP a<.lD EE EE iD iD EE }W EE Tq.EU jD No.jD EU }W $[.e|.]}.]}.e|.b<.$[.b<.b<.+ .+ .s9./d./d.<:.aZ _l+:l+.2U yh.2+.yJ W/ g( 0l+ww.ww.,O.tK.al+,; $| ui 5[ 5[ fd fd * * fd fd 5[ 5[ ui ti ti pj T@ I$ )_ I$ T@ h+ t& I$ F{ F{ F{ F{ F{ F{ F{ F{ ,5 '5 }| :] :] }| '5 ,5 O* O* ,5 >5 }| :] :] O) >5 :] O) }| '5 O* ,5 >5 O* O* ,5 ,5 '5 >5 >5 ti 5[ C' C' _y ti pj '5 ,5 O* ,5 LB d7 48 Ka q` ]Y wW xW xW xW ]n.bl+24 H{ N/.24 W_ {_ xj+l`.cl+Es ]_ pj ]_ pj ]_ pj ]_ pj ]_ pj ]_ ti Hs ui .o .o 34 G7 G7 G7 G7 34 34 >5 >5 >5 >5 I$ I$ I$ I$ cc +2 }].tM s[+[U l*.g7 fc !_ j; N; ;) -; T6 B|.R!+!O d) gd d) gd d) gd d) -L me -L me -L me -L -L Q5 bd.i*.fc fc i*.bd.Q5 i*.i*.fc fc -L gd gd |].N=.8 +wq '!.|].b: gd fc -L fc R9.cd.6H.:U 8!.H7 ,L __ !' {F.dl+{F.!' j( ,<.i- ,<.i- ,<.i- ,<.be.>b.8 +8 +8 +8 +8 +8 +8 +f= '!.wq 8 +}].f= s[+eb+fO.`M.be.el+W/ me xi fc /&.fc / g7 #v e; cN q} :] '5 d7.KB Ds >5 34 '5 34 '5 Xl ,5 [].KB d7.ZY O* O* O* O* O* O* O* O* :] ,5 ,v.KB }| O) >5 ZY d7.d7.[].[].Ds Ds Ds Xl yj+d> d7.Ds Ds Ds [].KB KB Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Z Z z<.z<.z<.cN h*.61.cN O( v$ v$ O( O( q} X[ cN h*.1x.p.|3+#A.zj+me <] O( ,_ Y_ &5 pv fl+gl+hl+il+jl+kl+G` xE.xE.2q.$G jD }W GE zg. j.ll+ml+oj.oj.nl+ol+;{.%'.1Z 2Z [..Y#.Y#.[..m&.A].[o.Y..Y..l=.%_.G_.pl+f;.0D.B0.K>.f;.12.'*.%B.'*.|2.f;.qy.f;.12.|2.o4.o4.tV i3.,2.,2.h3.h3.,2.ql+i;+V%.,2.}(+}(+L>.j=.sd../.@j.Nk.@j../.sc.Sh.Sh.Nk.@j.@j../../.sc.tc.~_.=*.a..7..S{.se.~u.^f.a,+8v.Fi+`. rl+sl+bA.^r KH.Lj+]$.#Z.$i.tl+ul+Mj+s++kv p2 s* hN Wl T# #& D, 75.D, :y ,b.75.c, c, D, :y q3 :y D, ,b.;q.x8 Y% Y% Z Z z<.z<.7}. Z Y% F{ I$ I$ F{ Y% Z Z Z Z Z Z Z Z Z Y% Y% Y% Y% Y% Y% Y% Y% )_ )_ )_ )_ )_ )_ )_ )_ 7}.z<.Y% x8 x8 Y% z<.7}.8}.7}.z<.Y% Y% x8 Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% h*.h*.h*.h*.h*.h*.h*.h*.61.61.61.61.61.61.61.61.m+,m+'m+)m+2k+!m+uW.~m+{m+]m+^m+/m+(m+_m+:m+0k+@'+gd ZG :U d>.d>.[+.[+.k@.k@.x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 z<. Z x8 F{ I$ F{ ", ".n .n n $5 $5 M6 M6 E7 g~ +_ +_ +_ +_ }Q p} +_ dd kC kC kC kC dd g~ g~ g~ E7 E7 g~ dd kC kC dd dd dd dd dd dd dd dd 7c E7 E7 g~ g~ E7 E7 5c %5 &$ )$ &+ S^ eu. k+ {@ {@ m@ U@ 2% 2% U@ m@ {@ ^{ &- &% i> G c @n+}8 #n+$n+mr.%n+&n+D<.'E.Dw ]j ^k 49.NO.!8.f1.#5+#5+W2+W2+,(+-E.NO.o{.^k un pu }< M;.*n+=n+-n+Ha+'2 ;n+(^.D% >n+,n+'n+O2.K7+F].bn.)n+g<.)n+~u.~u.)n+Ef.e,.e,.e,.5r.o&.68.;*.M-.B_.3..,>.YP YP ,>.3..,>.,>.H@.H@.YP C_.r(.r(.PX lD lD kD iD EE Tq.Tq.Tq.}W }W }W EU EU jD jD $[.$[.$[.b<.b<.b<.b<.b<.D_.;5.e|.b<.s9.ne./d.,u.!n+qd..:v._n+(,+:n+.h` ~v.Oi.g, h( 1n+og.2n+B^.*#+*#+IB d+Ma ti ti ti ti ti ti ti ti ti ti ti ti ti ti ti T@ Z% I$ I$ t& T@ Z% I$ Z% I$ I$ F{ )_ )_ x8 x8 '5 '5 '5 '5 '5 '5 '5 '5 >5 >5 >5 >5 >5 >5 >5 >5 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 Hs ac Es uM EV.({ ]_ b, K> C, K> Kb Kb ;,.;,.wW ^Y ^Y ^Y wW ;,.`z Lb K> K> 34 b, ed ed -h si )O uM * )5 YY s6 `Y Is YY s6 w8.s6 YY ^_ ti oh `Y gA b, b, b, 34 34 '5 '5 F{ Y% cN q} A% v$ v$ <] 61 Q( M)+wq Y:+00+eb+i*.f>./&.f>.X$.';.zk C|.6H.~w.)' V/ c' W/ d) W/ me el+C* X/ c' e/ B* el+|3+3n+xi |3+3n+qh |3+C* qh 4n+zj+zj+3n+m,+4n+4n+4n+Qj+5n+6n+k@+7n+ph wi 4n+8n+4n+8n+x.+9n+gX 0n+SQ.]w.6C.an+Q> bn+{, an+Q> [_ {, an+Q> bn+Q> bn+{, l- cn+dn+vl+Qj+Qj+wi Qj+Qj+Re+>b.j@+h= [I h= b* j@+g( rh h( h( 1n+g( V/ me xi xi fc -L ./ gd #v >p.x8 )_ }| T@ m* T@ :] Z% ZY Z ZY Z KB x8 O* ,5 O* ,5 '5 >5 >5 ,5 O* KB i~ ,v.,v.ZY KB KB O* O* )i.[].Ds [].)i.)i.d7.Ds [].d7.d7.)i.)i.d> yj+i~ ZY Z Z Z Z Z Z Z Y% Y% Y% Y% Y% Y% Y% Y% 90+0d.90+X[ u$ u$ X[ 0d.h*.61.1x.h*.q} A% O( / en+,<.rj ~w.e; A% q$ ac $5 lC !K.fn+gn+hn+in+jn+4p.4W a<.a<.EE oe.Bg.Dg.dK.kn+ln+kn+0h.mn+0h.C7+E!.I>.[.._%.Y#.m+.e3.j,.h=.h=./@.Y..c3.c3.|%.wY >*.%w.Pu.|2.r5.K>.B0.B0.~{.~{.B0.%B.'*.|2.@1.f;.y'.tV y6.o4.h3.s5.y'.i3.i;+s5.tV }(+}(+o4.y6.#1.;x.Dl.]X ./.m&.A].m&.sd.@j.Nk.Sh.]X ]X Sh.@j../.g=.j].Th.Th.x+.C .Ef.U).e{+[{.H) 7@ %- nn+Db OC.$q on+pn+qn+rn+M`.sn+tn+un+vn+`6.wn+J= Q# bl+34.F;.uJ }U `Q `Q }U uJ uJ %n %n uJ uJ }U `Q `Q ;q.x8 x8 x8 x8 x8 x8 x8 x8 z<. Z Z Y% x8 x8 )_ )_ x8 x8 x8 Y% Y% Y% Z Z F{ )_ x8 Y% x8 F{ Z% T@ z<. Z x8 Y% z<.7}. Z Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Z Z z<.7}.7}.8}.8}.8}.8}.7}.7}.z<. Z Z Y% 61.61.61.61.61.61.61.61.X[ h*.1x.61.cN X[ cN 61.61.61.h*.cN X[ q} O( O( h*.h*.h*.h*.h*.h*.h*.h*.7}.7}.z<. Z Z Y% x8 x8 x8 Z z<. Z )_ F{ )_ Y% x8 Y% Y% Z Z z<.7}.7}.Y% )_ )_ Y% Y% F{ F{ sM JB xn+yn+X* h= zn+A=.-r.*h.An+Bn+P}+Cn+Dn+En+Fn+Gn+*4+Hn+In+Jn+Kn+Ln+Mn+Nn+Nn+@_+@_+di+di+xb+xb+xb+Lb+gi+Sl+@_+._+On+Xl+Wl+Xl+ei++_+~/+Lb+si+%4+|]+Pn+Qn+Qn+Qn+Rn+Sn+Tn+Un+Un+Un+Vn+Wn+Xn+Tn+Sn+Yn+Zn+`n+Yn+;2+`g+;2+^/+^_+;2+-m+,k+vb+ o+8d+8d+u)+c[+;m+36+.o++o+@o+#o+#++Wb+$o+5L.%o+&o+^m+*o+=o+-o+;o+>o+ZU.e) S6 b^+d>.d>.B|.B|.k@.k@.cN cN )_ Y% z<. Z x8 )_ x8 Z x8 )_ F{ Z% Z% F{ ", "Ol Ol Ol $5 M6 M6 M6 g~ g~ +_ +_ +_ +_ }Q <| 5c E7 g~ dd dd dd g~ g~ g~ g~ E7 E7 g~ dd kC kC dd dd dd dd dd dd dd dd 7c E7 E7 g~ g~ E7 E7 5c %5 '% )$ B .g tr.44 ,o+'o+)o+!o+~o+{o+]o+^o+/o+Q8+)a+!a+!a+kf+Ni+Sd+Ud+0m+0m+bm+(o+cm+dm+em+_o+fm+gm+hm+jm+Y5+Z5+Z5+Z5+:o+:o+:o+km+km+km+km+lm+.,>.,>.'>.3..G@.G@.B_.3..,>.H@.YP YP Mo.Mo.PX lD kD kD iD iD Tq.Tq.}W }W EU EU EU jD e|.e|.e|.e|.e|.e|.D1.D1.5..;5.e|.s9.Va.Va.ne.'_.I>.JU %'.WS Ro+^).VA.So+Dt.1;+i+.i+.To+Lr.7M.5w.Uo+{m.S8.,P.Vo+9l.>).Wo+I<+7P Xo+Yo+Zo+`o+5 >5 >5 >5 >5 >5 >5 >5 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 Hs si Es uM EV.({ ]_ b, K> 4! b, XG Kb ;,.[Q ;,.^Y ;,.-j ;,.-j `z hu 34 >5 [].,5 Hs ui Es C' )O p] a# L$ q$ hd )5 hd q$ L$ oh cc )5 hd ,_ hd )5 ^_ >5 >5 Xl '5 ,5 )_ x8 cN h*.+s.bd.bd.Q5 Q5 qh ph SS..p+.p+2n+SS.1].W/ V/ +p+#A.p@+p@+!v.Oi.Oi.dl+@p+m- #A.;W.fO.44 `M.d* #p+$A.#A.=Y.eL.d* `M.fO.g( V/ xi el+c' V/ me be.c/ g( B* V/ c' V/ B* }I b* D %p+EB &p+*p+=p+-p+;p+;p+>p+j- j- ,p+j- 'p+'p+'p+'p+)p+!p+o> ~p+f( {p+!I.}I b* SS.eb+]p+Qj+lW.Qj+lW.^p+/p+cn+(p+_p+54 =Y.44 _p+i( eL.`M.X/ f>.f>.gd 1{ I- {; j; O( O( F{ q} I$ A% Z% v$ Y% h*.x8 cN Z 1x.8}.Rx. Z Y% O* )_ O* Y% ZY z<.,v.z<.ZY Z ZY Z ZY ZY ZY [].Ds [].)i.)i.d7.Ds d7.d7.d7.d7.d7.)i.)i.ZY Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% 1x..i3.L>.y6.h;.}(+A0.Hp.(X Y8.(X {{.8p.Sh../.sc.@j.@j.sc.m&../.@j.Nk.Sh.Sh.Nk.@j../.58.j].Th.Th.#j.{_.U).Q>.bp.U5.=@ D= |p+R0 NC.5< ,$.qn+1p+np.2p+3p+~=.

.d>.B|.B|.k@.k@.cN cN )_ x8 Z Y% )_ F{ x8 Z x8 )_ F{ I$ I$ F{ ", "ww ww 4-.RD RD RD RD J6 J6 mf mf mf mf zW mf ri le ie xn.xn.xn.xn.xn.xn.xn.je je xn.J6 up.up.J6 J6 J6 J6 J6 J6 J6 J6 ie je je xn.xn.je je 5c %5 '% )$ A. Jp+Kp+i- Lp+fn ``.Mp+Np+Op+Pp+Qp+Rp+Sp+Sp+Tp+Tp+{a+kf+lf+Sd+0m+Up+bm+(o+cm+dm+em+_o+Vp+Wp+Xp+Yp+Zp+`p+`p+`p+ q+.q+.q++q++q+@q+@q+#q+M&+$q+%q+&q+|o+tk+=9+o4+{9+*q+=q+-q+;q+ j+>q+,q+'q+)q+!q+~q+{q+]q+^q+Dm+/q+(q+_q+:q+_ S_ [4 [4 }4 S_ [4 W5 [4 T_ >_ T_ 2{ !% {@ U@ 2% U@ U@ .* fd {@ m@ U@ 2% 2% U@ m@ {@ u& 9- c& h# h# /+ f. !+ >D ,,.WO oq+[k el `h pq+'l.,g (j P[.X>+`L )8._y./z._y.9A.d_.,~.],.lt vn W@.(k En.My e .qq+YU rq+sq+9i.tq+6$ -% uq+vq+>7 7%.1`.Q2.Q2.Dp.Dp.Do.g<.r&.p&.q&.3%.sD Ef.Ef.{_.W).tY 7..fZ M-.M-.M-.M-.tY f,.7..+[.M-.SX dZ dZ ZF ZF a<.Mo.PX lD lD kD EE Tq.Tq.Tq.}W }W EU EU + .+ .e|.e|.D1.b<.b<.$[.+ .;5.D_.;5.b<.ne.Va.ne.l+.xy.gc.U,.wq+j4.93.93.`{.j4.%D.xq+rU mc.yq+zq+y_.r(.)s.Aq+Y|./U.PS fE.+_.=i+Bq+Cq+Dq+O'.Eq+Oj.*).9I %).Kj.RQ.'L k- ~' k- rh el+j@+b: V5 E) hd ,_ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ Z% I$ F{ I$ T@ h+ T@ Z% I$ I$ I$ I$ Z% Z% Z% Z% '5 '5 '5 '5 '5 '5 '5 '5 >5 >5 >5 >5 >5 >5 >5 >5 Hs Hs Hs Hs Hs Hs Hs Hs Hs Hs Hs Hs Hs Hs Hs Hs Es )O )O uM ]_ Hs 34 b, b, Xl XG Kb [Q =h [Q wW L> =) 48 q3 hu qj ,5 )_ O* x8 pj ^_ C' $| C' Ma c8 [U cc [U c8 Sx.ec P6 L$ P6 E) 61 cc +2 cc cc F{ F{ '5 F{ I$ O( [| gd i*.C* `M.`M.=Y.44 44 Fq+Gq+Hq+d-+Iq+kU.Fq+_p+_p+1n+1n+yM pg.I7 (; q; @/ __ ]5 h( th Z:+s3 wZ.9r.sr.Jq+c|+Kq+Lq+Mq+b.+kW.5 +Lq+9v.E* dw.yi 9v.Nq+yx.kW.Oq+b.+Oq+kW.lP.Pq+8/ Qq+Rq+Sq+',.Tq+Uq+I' Vq+Wq+Xq+^9 *i k-.Yq+Zq+`q+ r+LE..r+&0 cO.+r++r+t; t; t; bL.%0 it.@r+#r+I' e' $r+{g %r+E`.&r+*r+9v.Nq+tr.nG./_ wZ.f( r3 NJ.=r+YM.YM.YM.YM.oR.-r+;W.+p+;r+4n+3n+zj+zj+Zs.^Z.n&+#a+hy.#a+^Z.bE dT cT vM Fs ', Fs ER )J.bE A% A% t& w$ T@ v$ t& A% )_ cN x8 cN x8 h*.Y% Y% ZY O* ,5 O* ZY ZY KB ,5 KB KB KB O* O* O* O* ,5 x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% Y% Y% Y% Y% Y% Y% cN h*.cN v$ l. l. A% h*.cN 61.1x.61.cN X[ h*.+s.R9.H' ;) Gs v$ @. {@ y% >r+,r+'r+oy.)r+bD !r+~r+DE $[.'_.b<.7R GE |H |H j.zg.dK.dK.pN.ml+{r+]r+<:.U` d;.&'.j,.l4.Y..~_.5#.vY 78.78. ]Y F;.%n )_ x8 Y% Y% x8 )_ )_ Y% Y% Y% Y% Y% x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 x8 Y% Y% Y% Y% Y% Z Z Z x8 x8 Y% Y% Z Z Z z<.z<.z<. Z Z Z z<.7}.8}.z<. Z x8 Y% z<.7}. Z Y% z<.z<.z<.z<.z<.z<.z<.z<.Y% x8 x8 x8 x8 )_ )_ )_ Y% Y% Y% Y% Z Z Z Z 61.61.61.61.61.61.61.61.cN 61.1x.61.cN cN h*.1x.1x.1x.1x.61.h*.cN X[ X[ 1x.1x.1x.1x.1x.1x.1x.1x.Y% Y% Z Z Z Z z<.z<. Z 7}.8}.7}.Y% x8 Y% z<.Y% Y% Y% x8 x8 x8 x8 )_ t& I$ )_ Y% Z Y% x8 X[ Z$+j@+|r+1r+eX M- 2r+3r+4r+5r+6r+7r+8r+9r+0r+ar+*4+W1+br+cr+dr+er+hp+fr+gr+hr++_+&k+di+xb+yb+9d+&f+9d+<]+Rl+@_+@_++_+ir++_++_+~/+_6+%4+jr+kr+.m+lr+lr+Pn+Sn+Tn+Xn+mr+pp+pp+nr+or+pr+or+qr+nr+qp+rr+sr+tr+sr+1]+c[+(|+xp+vp+vp+lp+lp+lp+jr+-m+-m+ur+vr+wr+xr+yr+zr+Ap+Ar+Br+Cr+wi+T$+ji Dr+Er+Fr+Gr+Hr+Ir+Jr+Kr+e/ s} ml.,p.,p.:U :U xF xF #v cN I$ )_ Y% x8 F{ I$ )_ x8 x8 )_ F{ F{ F{ F{ ", "Lr++x.ww pv RD RD lC up.up.mf mf mf mf 'B q2.ri le je xn.J6 J6 J6 J6 xn.xn.je je xn.J6 up.up.xn.xn.xn.xn.xn.xn.xn.xn.ie je je xn.xn.je je 5c N_ '% )$ N* +< Mr+I7 Nr+Lx Or+Pr+Qr+Rr+Sr+Tr+Ur+Vr+Vr+Wr+Wr+~a+{a+lf+Sd+Up+Xr+(o+Yr+cm+dm+em+_o+s+,s+'s+`i+zk+)s+!s+~s+)q+{s+]s+^s+/s+(s+_s+:s+oh+r+ps+.l.(j.Ql Tl n` n` WW.WW.l` -H.-H.-H.=_ =_ }4 }4 }4 }4 'i.,;.{+ .. .. .. .. .. .. .. +. +. +. +. +. +. +. j+ d= >_ oj oj >_ S_ S_ S_ S_ }4 }4 }4 S_ S_ S_ 2{ T$ U@ .* .* U@ U@ .* fd m@ m@ U@ U@ U@ U@ m@ L) ]. ]. f# g; |. 2. *| Y 0: qs+-$.R0 a_.77 F2.>: rs+0p ,g Uv./h O;.z#+)8.Sd.Sd.Vc.Vc. M M o:.t-.F<.[s vn vn 9l ss+rC a{ _i sq+ts+us+XO.vs+ws+vq+E:.xs+1`.*.+Kq.P++Lq.F].F].bn.g<.q&.3%.U).U).3%.O@.V).tY f,.f,.7..fZ SX W).tY f,.+[.M-.SX dZ dZ ZF ZF a<.a<.Mo.PX lD lD EE EE EE EE Tq.Tq.}W }W D1.D1.b<.$[.s9.'_.ne.ne.ne.;5.A_.F@.H@.D1.>e.L` jV.U,.S,.{-.S,.P*.F_.gc.9;.93.l[.{-.43.EX p5.ys+zs+.M.U{.<..B}.B7+#R.vN.O,.As+Bs+Cs+Ds+LQ Es+Fs+61+GJ f}+eS a;+]w.yJ {5 Gs+5e.@6 H' ', i; <* T@ fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd T@ Z% I$ I$ t& T@ Z% F{ F{ I$ I$ Z% t& t& T@ T@ >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 Hs Hs Hs Hs Hs Hs Hs Hs Hs Hs Hs Hs Hs Hs Hs Hs )O )O )O )O Hs Hs 34 34 Xl Ds {Y Kb =h g =h -j r} 2( 2( >k Fs DR q} q} O( O( hd hd U0 U0 U0 U0 Qe+N=.:= |].00+!M.Q( := := b: l*.#< 00+#< Q( ZQ Pj+,8+0d.t+,t+'t+)t+!t+~t+{t+]t+^t+M, M, M, =t+/t+(t+rq+_t+:t+p.+s.e; e; #v #v / / / [| [| [| [| O( Z x8 ,5 x8 ZY Z KB )_ KB Y% O* x8 ,5 F{ '5 F{ F{ F{ F{ F{ F{ F{ F{ F{ Y% Y% Y% Y% Y% Y% Y% Y% cN cN X[ v$ 5. u$ O( h*.cN 61.1x.1x.h*.h*.61.(.w_.0n.gb.dg+e<.q9.>4.}a.0,+e<.>4.}a.rV dg+0,+>4.0,+}a.|o.k&.Nk.k&.|o.|o.Nk.m&.sd.sc.sc../../../../.E}.4).j;.$1.x!+5).ot+pt+qt+=$.A& d$ ae 4p /s rt+Ph+:r+&L.st+mq.-s qw Iy [j.Px.W5.60+&j *j :y d6.D, qj )_ x8 x8 x8 x8 )_ F{ z<. Z Z Y% x8 x8 )_ )_ Y% Y% Y% Y% Y% Y% Y% Y% x8 x8 Y% Y% Z z<.z<.7}.Y% Y% Y% Z Z Z z<.z<.7}.z<. Z Y% Z 7}.Rx.%U.z<. Z x8 Y% z<.7}. Z Y% z<.z<.z<.z<.z<.z<.z<.z<.Rx.8}.8}.7}.7}.z<. Z Z )_ )_ x8 x8 Y% Z Z z<.61.61.61.61.61.61.61.61.cN 61.1x.1x.h*.cN h*.1x.k+ir++_+~/+_6+:6+jr+Kt++m+@m+lr+|]+sp+mp+Lt+Wn+Un+Mt+mr+nr+or+pr+Nt+Nt+Ot+Pt+Qt+Rt+Rt+Rt+g~+v)+1]+1]+lr+lr+kr+kr+kr+St+~k+~k+Tt+R0+M@+Ut+yr+Vt+;4+|f+Wt+4|+Xt+Yt+ji 6/+Zt+`t+*o+ u+.u++u+@u+W/ H7 wM ,p.,p.:U :U xF xF #v #v I$ )_ x8 )_ I$ Z% F{ x8 x8 )_ )_ )_ )_ )_ ", "Lr++x.ww pv RD RD lC lo.up.mf ee ee mf 'B .A fe je J6 up.up.up.up.up.xn.xn.je je xn.J6 up.up.xn.xn.xn.xn.xn.xn.xn.xn.ie je je xn.xn.je je 5c }Q .% H+ _+ D) m~ #u+$u+%u+&u+*u+=u+-u+;u+>u+,u+Wr+Vr+Wr+Wr+'u+~a+,c+,c+jk+jk+Yr+Yr+dm+dm+em+em+dm+Yr+)u+!u+~u+{u+]u+{u+^u+{u+]u+/u+~u+!u+(u+!u+5h+Et+_u+T1+:u+_ S_ }4 S_ S_ S_ }4 }4 }4 3{ Y_ .* * .* U@ {@ m@ 2% U@ U@ m@ m@ m@ m@ U@ h# >; Iu+3!.|! G! c% If.y* k@ Ju+j7 {(.'F =X. [ <^ Ku+Lu+`w.L<.{i w%.=;+vo.PW PW RZ RZ ya.ya.w%.o:.xC wC ],.ZL YL 7l XL Mu+Nu+u9+`e Ou+Pu+Qu+Ru+Su+N++Tu+Na.Pa.O2.Na.Na.|`.({.}-.[-.J}.I}. =. =.q&.ii.>>.S{.W).S{.W).+[.% .7..7..+[.M-.SX dZ @[.>}.ZF a<.a<.Mo.PX lD kD kD iD iD iD EE EE EE Tq.Tq.e|.D1.b<.$[.<:.s9.'_.'_.^d.]}.A_.4..B_.Ua.b<.:..*:+|X.t}.p/.ke.V|.ti.R:.^}.^}.od.B}.Uu+RT.Uo+5..p(.Vu+iX.2Z X` *4.a^.b[.K_.v/.NY.[}.Wu+{P.41+Xu+Yu+ve+&:.Zu+`u+ v+.v+,<.i= 4b 4b uS -; 2( =) -) O) fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd /. h+ Z% Z% t& Z% F{ x8 F{ I$ I$ Z% t& t& T@ T@ >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 >5 Hs 8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.|x.|x.G7 G7 34.34.U6.Q5.yW yW -V Ka |+.dE dE Ls Gs ', !_ !_ !_ !_ +2 [U tM JB JB '!.>b.[I @* 2* >b.ZU.0e.[I Re+Re+Re+Re+>b.b* !I.@* c. d. k@ %+ r6 hs.lP.+v+gt+@v+>)+#v+$v+%v+&v+*v+=v+-v+;v+>v+,v+'v+)v+%~+!v+~v+{v+{v+]v+^v+/v+%( f0 (v+_v+94 $t+:v+&t+(.gm.Dl.Sh../.sc.sd.sc.sc.sc../../.@j.!{.p4.g{+A6.Dv+m3.Ev+Fv+|6.!& $+ ad Gv+Hv+:k Iv+oY.ns.Jv+Kv+vx Gk Lv+Mv+;B sv.Ns >x Cp Cp S9.Nv+rr %n )_ x8 Y% Y% x8 )_ )_ z<. Z Z Y% x8 x8 )_ )_ Y% Y% Y% Y% Y% Y% Y% Y% x8 Y% Y% Z z<.z<.7}.7}.Y% Y% Z Z Z z<.z<.z<.z<. Z Y% x8 Y% z<.8}.Ov+z<. Z x8 Y% z<.7}. Z Y% z<.z<.z<.z<.z<.z<.z<.z<.Ov+Ov+Ov+Rx.8}.7}.7}.7}.)_ )_ x8 x8 Y% Z Z z<.61.61.61.61.61.61.61.61.h*.1x.w+,w+,w+'w+)w+!w+~w+{w+]w+]w+^w+Pt+/w+(w+_w+:w++Pb+Sn+Sn+.m+.m+St+[w+}w+&m+^_+P0+nm+|w+1w+2w+3w+4w+5w+2k+W,+Q:+7m 6/+{++e +*o+6w+zZ.7w+8w+be.m> O> AJ AJ :U :U R9.R9.#v #v I$ )_ x8 )_ I$ Z% F{ x8 )_ x8 x8 x8 x8 x8 ", "ww ww 4-.RD RD RD RD :| lo.mf ee ee mf )B vw mf J6 up.lo.lo.up.J6 xn.xn.xn.je je xn.J6 up.up.xn.xn.xn.xn.xn.xn.xn.xn.ie je je xn.xn.je je 5c &#..% 9+ q+ c. 9w+7` 0w+t&+aw+N;+{o+bw+cw+dw+ew+S8+Sp+Tp+Wr+'u+~a+]a+]a+mf+mf+:h+:h+dm+dm+em+dm+fw+gw+hw+iw+jw+(u+jw+(u+hw+)u+hw+)u+kw+iw+kw+iw+5h+lw+mw+_u+nw+:u+tk+ow+pw+qw+rw+sw+-q+3u+tw+ j+uw+vw+~s+ww+xw+yw+zw+Aw+Bw+Cw+Dw+Ew+}s+Fw+Gw+Hw+;L.qJ.Iw+Jw+Kw+Lw+Mw+Nw+Ow+Pw+Qw+Rw+Sw+Tw+Uw+Vw+Ww+Xw+Yw+Zw+`w+%K. x+.x+Uh +x+M~ @x+[3+#x+$x+%x+_j._j.n` n` l` l` l` -H.-_ -_ S_ S_ S_ S_ nq+M=.{+ .. .. .. .. .. .. .. +. +. +. +. +. +. +. j+ 3c oj >_ oj ri ri >_ }4 }4 T_ >_ T_ [4 W5 [4 3{ Y_ .* * 2% m@ l& {@ m@ 2% U@ m@ {@ {@ m@ U@ S$ H! &x+1! 1! H! H! _% _% <$ d. G[.:l %- *x+m[ rt.=x+-x+Fy `w.}k.[i.LL.uo.>l.4Y 8(.8(.9'. m.~,. m.E..;x+9A.>x+,x+PZ tm 'f 'x+~z.)x+!x+~x+{x+]x+^x+/x+(x+F#+Na.|`.Na.Ub._x+Pa.({.}-.[-.vx..=.<-.H}.wd.k].V).V).s'.S{.+[.dZ SX SX % .dZ @[.>}.>}.>}.ZF ZF a<.Mo.PX lD lD kD kD kD kD iD iD EE EE EE . .. .. .+ .e|.D1.D1.D1.s9.+ .5..C_.r(.D_.YP /.Df.7y./S.ST.R,.ke.6O =:+PM :R /}.>u.n5.E1.K` gk.'u.r7.5Z :x+X8.l[..].W:.az.VB.7^+L_.DQ.5 >5 >5 >5 >5 >5 >5 ti |x.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.cl+8H.8H.a, ;b.|x.G7 N/.N/.34.]n.bl+yW yW G}+Jb cE 8!.T6 zk !O H' j; j; -L fc Q( #< &#+wq wq [c.4x+C~+ae.Fq+5x+Gq+6x+kU.SS.og.0l+4* l^ i* V^ 7* UV.7x+&~.8x+I6 9x+0x+kv+ax+bx+cx+dx+ex+fx+fx+gx+hx+ix+jx+kx+lx+mx+nx+ox+px+qx+rx+sx+tx+ux+$( vx+wx+xx+yx+yx+zx+zx+Ax+Ax+Bx+Bx+Bx+Bx+Cx+Dx+Ex+Fx+3v+D~+Gx+Hx+D~+D~+Hx+Ix+Ix+Gx+Gx+Hx+Gx+Gx+Ix+Jx+Kx+Lx+Lx+Mx+Nx+Nx+Hx+Hx+Ox+^, Px+Qx+Rx+o-.o-.Sx+ev+/t+Lo+(t+Tx+Ux+Vx+f) Tx+Vx+Vx+Wx+Wx+Vx+Tx+Tx+Gx+Gx+Gx+Gx+Hx+D~+0v+jv+j, hv+gv+Xx+6v+6v+*t+Yx+Zx+Bx+1v+`x+ y+ y+av+6v+@t+.t+8t+{' .y++y+Uq+@y+9:.#y+9:.K].$y+%y+&y+*y+~~ (; 'L 6x.Oi.id #6 ><.,<.C* |3+zj+zj+|3+|3+C* 3n+3n+qh zj+zj+|3+C* C* +s.cN X[ cN 61.61.h*.X[ h*.h*.h*.cN cN cN cN X[ F{ F{ F{ F{ F{ F{ F{ F{ Y% Y% Y% Y% Y% Y% Y% Y% 1x.61.h*.X[ X[ cN 61.1x.cN 61.1x.61.cN X[ h*.61.:$ b& -) LB >5 .o P~ z9.S^.=y+zk.-y+;y+}g.}2.Ek.R,.^X !_.v>.:R E1.9h.F0.$G >y+Av+Av+Bv+Bv+,y+Et.eZ Q:.Q:.+1.-*.Y..l=.Y..%_.5v.}g.}g.2;.d+.Zo.yv+CE GU [H rQ.GU PX Mo.GU &T *T rQ.]X.f=.3#.nN.4#.x+..k.{g.gb.te.E].wd.AY.ii.YF.o(.AY.{g.+k.m/.2a.gm.an.0n.gm.]X ./.sc../.sc.sc.sc.sc../.@j.Sh.bR j3.F7.'y+)y+!y+xH.lX.~y+jP.@< {y+]y+om {k ^y+jJ./y+(y+_y+|j.i&+1 .:y+Qx.W5.w+gy+gy+hy+hy+)w+!w+~w+iy+Pt+Pt+jy+ky+/w+ly+(w+my+ny+w)+g~+V&+oy+Tn++m++m+St+St+py+~k+N0+qy+ry+sy+ty+uy+vy+wy+5w+2k+W,+Q:+7m xy+yy+zy+K)+Ay+3>+By+8w+`M.!v.'L AJ AJ :U :U R9.R9.#v #v I$ )_ Y% x8 F{ I$ )_ x8 )_ x8 Y% Y% Y% Y% ", "fN.fN.fN.lC RD RD RD +A :| mf ee ee mf A iu q2.up.up.up.J6 xn.ie le xn.xn.je je xn.J6 up.up.je je je je je je je je ie je je xn.xn.je je 5c [9..% K& q+ <@ Cy+}= V@.Dy+Ey+o$+Fy+Gy+J&+qf+Hy+_h+)a+!a+Tp+~a+'u+U8+U8+mf+mf+:h+:h+dm+dm+em+Iy+Jy+Ky+Ly+My+Ny+Oy+Ly+Ky+Py+Qy+Ry+Sy+Ty+Ky+Ly+Uy+5h+lw+Et+mw+Vy+Wi+tk+Wy+o4+qw+rw+>s+Xy+Yy+tw+Zy+`y+ z+.z++z+@z+#z+$z+%z+&z+*z+=z+-z+}s+Fw+Gw+;z+XG.+..>z+ku+,z+'z+%z+)z+!z+~z+{z+]z+^z+/z+(z+_z+:z+_ S_ Q6 }4 T_ oj T_ [4 Q6 [4 3{ T$ U@ 2% U@ {@ l& {@ U@ 2% U@ m@ {@ {@ m@ U@ S$ 1! 7z+&x+&x+8z+&J.n6 h7 U# s# -. . O )$ #- (8.9z+0z+ns u<+az+}G v+++m.bz+bz+bz+D)..m.8'.cQ.8'.ZR.@X.*;+cz+dz+Vv.]V 5l '#.B'+ez+fz+gz+hz+iz+jz+kz+lz+Tb.F#+jj+tt.Ub.F#+Pa.Uh.({.}-.[-.vx.<-.ap.eV.ii.O%.**.O@.**.9..# .L@.L@.L@.# .# .# .# .# .FU FU Pp.ZF a<.Mo.PX PX lD lD lD kD kD iD iD iD . .. .. .. .. .. .. .+ .+ .e|.D1.e|.+ .Ua.YP /.e,.]` }M.E<+mz+oU RJ ti._2.b3.x7.nz+ih.{>.F0./d.2v.lx.5Z 8n.}:.`{.*'.j5.n~.u(.Q,.oz+P,.pz+3S ~P.qz+rz+Ps.u{+)b+sz+^x.^x.5d..t.L~.1c.Y0.9:+f*.tz+d7 ui ui ui ui ui ui ui ui ui ui ui ui ui ui ui t& Z% F{ I$ t& T@ t& I$ I$ I$ I$ I$ F{ F{ F{ F{ }| }| }| }| }| }| }| }| >5 >5 >5 >5 >5 >5 >5 ti |x.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.xj+cl+a, w4.{_ ;b.N/.34.G7 N/.Q5.;5 yW m&+xW PQ.Ls ~O ~O ~O ';.';.d) d) xi f>.>b.>b.'O.B^.,- ww.5* uz+vz+rG.wz+e* 4* e* xz+yz+Pq+zz+Az+6b+fM.Tq+~ .Bz+Cz+$r+Dz+Ez+sv+Fz+:v+Gz+Hz+Iz+Jz+Jz+Kz+Lz+Mz+Nz+Oz+Pz+mx+Qz+Rz+Sz+Tz+Uz+Vz+Wz+Xz+Yz+Zz+`z+ A+.A+xx+xx+yx+yx+zx+zx++A++A+Ax+zx+yx+.A+@A+#A+$A+%A+&A+&A+%A+%A+&A+*A+=A+*A+-A+&A+&A+&A+-A+;A+>A+,A+'A+)A+!A+!A+~A+~A+&A+&A+{A+]A+^A+:=./A+(A+_A+:A+h fA+gA+hA+c$+iA+jA+kA+*y+lA+Gs+g( el+`M.#A.og+;r+/d+eL.`M.`M.fO.fO.mA+mA+3n++s.#v g7 #v +s.+s.e; g7 e; e; e; e; e; +s.+s.61.)_ )_ )_ )_ )_ )_ )_ )_ Y% Y% Y% Y% Y% Y% Y% Y% 1x.61.cN cN cN h*.61.1x.h*.61.1x.61.X[ O( q} cN '' L> dt nA+oA+^b+>n.tl.pA+m7+WF.:J.Lh.nS.Ek.Ek.ke.j5.B7+ke.ke.t(.l=.b3.7D..1.A}.A}.qA+qA+rA+sA+ $.B}.B}.!_.EP b3.5v.6#.5v.|%.jh.mS.;C.tA+;C.uA+(H 03+]o.vA+vA+]o.d5+~` 6H 6H 6H ~` 6H 6H 6H [H ^@.x+.&*.{g.R{.{g.R{.{g.o$.{g.R{.O@.pV O%.R{.o(.an.gm.Dl.]X ]X Sh.Nk.@j../../.sc.sc.@j.Nk.]X ;x.D7.wA+xA+q^+xH.SV.9J.~* yA+i^ #y+6 .:k u;.-Y r;+zA+AA+BA+CA+EZ DA++l.l; Zf d- 2c.Z0.EA+)x !x 5*.51.O4 =L =L =L =L O4 .Z s6 s6 s6 .Z .Z .Z .Z .Z Z Z Z Z Z Z Z Z 7}.7}.z<.z<.z<.z<. Z Z Z Z Z z<.z<.7}.7}.7}. Z Z z<.z<.z<. Z Y% Y% z<. Z x8 Y% z<.7}. Z Y% Y% Y% Y% Y% Y% Y% Y% Y% x8 x8 x8 x8 Y% Y% Y% Y% z<.z<.z<.z<. Z Z Z Z 61.61.61.61.61.61.61.61.61.1x.90++SA+Dt+TA+UA+VA+WA+Jn+H,+Ln+o0+XA+<]+Yg+:6+%4+%4+-m+:k+si+Lb+$4+YA+ZA+dy+Xg+{/+]_+)k+ m+`A+tb+ B+ey+fy+.B+#k++B+gy+>w+@B+#B+)w+)w+$B+~w+%B+&B+*B+=B+>2+-B+ly+;B+>B+,B+Rt+V&+sr+mp++m+.m+St+kr+'B+)k+Nb+)B+!B+~B+|8+{B+]B+n~+^B+/B+(B+X0+9e _B+:B+ AJ AJ :U :U R9.R9.#v #v )_ x8 Z Y% )_ F{ x8 Z )_ x8 Y% Z Z Y% ", "Ql sk !B lC lC RD RD +A :| q2.ee ee q2.vw iu up.up.J6 J6 je le ke he xn.xn.je je xn.J6 up.up.je je je je je K6 K6 K6 IO.je je xn.xn.E7 E7 >+ ^& R c :@ !~ 3B+4B+5B+6B+7B+8B+9B+0B+aB+bB+#q+U1+cB+Ni+{a+~a+dB+dB+dB+V8+eB+eB+eB+fB+gB+gB+hB+iB+jB+kB+kB+kB+jB+lB+mB+nB+oB+pB+qB+rB+sB+tB+uB+vB+_u+Vy+Vy+Xd+Xd+1o+Wy+o4+wB+rw+*q+xB+yB+zB+Yy+AB+BB+CB+DB+EB+FB+GB+HB+Tk+IB+JB+qh+KB+LB+MB+NB+OB+-V PB+QB+RB+SB+TB+UB+VB+WB+XB+YB+ZB+`B+ C+.C+vu++C+Q|+@C+#C+$C+.g+%C+&C+*C+=C+-C+;C+>C+,C+'C+Ml +h.+h.d( m` m` l` l` l` 2b 2b >_ >_ >_ U_ V_ {+ B. .. B. .. B. .. B. +. !. +. !. +. !. +. j+ d= 5! 4{ 5! d= d= 4{ 24 2{ d= != d= 5! G{ 5! 3{ ,' l& m@ m@ {@ {@ U@ .* 2% U@ m@ {@ {@ m@ U@ S$ ); 1! 3! 3! /% |. 1. s# !. B. h. ]+ +# @ I) 7+ )C+!C+~C+{C+]C+^C+/C+Zf..S.+m.+m.+m.+m.+m.=;+H%+(C+]`._C+#5+;^+>|.q{.F++Qh+r-.~~.:C+.HK.IK. $.C0.iI QM . .=t.KK.|).5Z 1Z v].I>.:..`{.]%.U++S,.u(.@G._6.z7+5 F{ ,5 )_ O* x8 }| Z% }| }| }| }| }| }| >5 >5 >5 >5 >5 >5 >5 ti Hs 8H.8H.8H.8H.)O )O )O )O )O )O )O )O )O )O )O EV.uM .o ac ac .o Xl Ds b, 34 `z La *5 La ^Y ^D.S6 2+.s} 'L ';.Z_.xi X/ me el+j@+wJ ww.9C+k# f6+0C+mR.aC+bC+cC+dC+dC+T- Je+eC+`s+kv+%t+%t+kv+fC+6t+6t+6t+J;.@t+*t+#t+gC+Gz+hC+iC+jC+kC+kC+lC+mC+nC+oC+pC+qC+rC+sC+tC+uC+vC+wC+xC+yC+zC+AC+_2 o/ BC+CC+DC+EC+DC+EC+DC+EC+FC+w3 1A+w3 GC+HC+IC+JC+KC+t( LC+LC+q> q> MC+*( NC+LC+MC+t( q> q> q> q> OC+PC+QC+RC+SC+!A+TC+w3 t( CC+DC+2A+1A+UC+Jv.VC+&s WC+XC+YC+B7 ZC+`C+XC+ D+ D+`C+WC+YC+XC+.D+]l+Ux++D+gW +D+Rx+Px+Sx+@D+vj #D+o-.Qx+o-.@D+(A+$D+3A+%D+zx++A+Fx+Ex+gM.[v+*t+@t+5v+@t+J;.4v+0x++r++e l-.dA+.= l-.&D+*D+~g *D+~g =D+cv+-D+Za dA+%0 ;D+>D+e' tv+,D+5 +E* 'D+Z_ 1n+rh ]2 d* =Y.;W.#A.|3+i*.fc i*.bd.bd./&.fc i*./&./&.bd.bd.Q5 Zs.Zs.#v cN cN cN cN cN cN x8 Y% Y% Y% KB KB KB KB Y% Z c8 X[ X[ cN 61.61.61.h*.+s.1x.e; / !_ [| q} '5 O* )D+/{ !D+&, Qj.~D+T-.[H.S-..,p.y|.MB 61.6=+@$+5D+@$+5D+=L 3x.Is sM s6 FR .Z 3x.O4 6=+61.61.61.61.61.61.61.61.90+90+w+>w+#B+vD+wD+xD+xD+yD+*B+zD+=B+AD+AD+X&+BD+-B+CD+DD+>B+_w+H:+ED+sr+Tn+|]+lr+lp+jr+jr+sD+ur+FD+GD+HD+ID+JD+KD+LD+XJ.|-+MD+ND+OD+.I.U( m' PD+QD+RD+SD+p@+TD+C|.zJ :U :U :U xF xF #v cN )_ Y% z<. Z x8 )_ x8 Z )_ x8 Y% z<.z<.Y% ", "U5 dd dd dd dd dd dd dd dd dd dd dd dd dd dd xn.xn.xn.xn.xn.J6 J6 J6 up.up.up.lo.lo.lo.:| :| je xn.UD+VD+IO.WD+VG.XD+XD+K6 je je E7 >' U% =+ ;- xq.YD+ZD+`D+ E+.E++E+@E+#E+<8+$E+%E+mw+.q+&E+|h+nf+nf+nf+W8+dB+*E+=E+-E+b4+;E+>E+,E+'E+)E+!E+~E+~E+~E+{E+]E+$!+^E+/E+(E+_E+4a+Xd+Wi+Ud+,c+:E+ C, J- .@ @ 3c O_ G+ ;* 8T OE+PE+QE+RE+GL 8Q >h.*(+SE+TE+D%+)8.9A._y.;E.=(+=(+=(+=(+=(+=(+#5+p:.],.P[.mo ;~.UE+SR.y<.VE+WE+WE+XE+YE+ZE+`E+ F+.F++F+@F+1^.=N L#+u_.2p.2p.2p.vd.P@.P@.Oq.W).fZ dZ >}.4W 4W @[.dZ @[.4W % .% .>}.jZ dZ M-.>}.3p.@ .IU ,}.IU @ .@ .F0.9h.r(.. .<:.s9.D1.+ .b<.'_.e|.e|.+ .]}.Ua.Ua.+ .b<.. . .5..5..Ua.+ .$[.'_.zf.EE iD iD Tq.jD #F+KB.Oo.8Z vI 8Z t7.A!.$F+1..d|.d|.}..u].nH.nH.5 34 >5 34 >5 34 >5 b, }| b, }| b, }| b, }| Z% A% Z% Z% Z% Z% Z% Z% }| >5 >5 '5 '5 >5 >5 ui .o )O EV.~I.~I.P9._y C' 9e.p] (* J$ n& G- U0 dc s6 oh I$ I$ F{ Z% /. Z F{ )_ )_ F{ t& t& *) DR s} ^O O> 6x.~, n> X/ Z:+V~ -F+;F+!e >F+,F+'F+)F+!F+_~ ~F+{F+{F+_~ ]F+Qa :0+_~ ^F+ d Ai /F+=0 (F+gM._F+:F+ K! V; bn+MF+%A.Q> {, NF+%A.%A.n> yM ~' l9 __ __ ~' yM g( eL.Re+ZU.ph OF+00+2x.FR s6 .Z 8g.y{ uq.uq.PF+;~ Is WG Tx.Qe+/= [U u=+61 [| bd.+s.1{ ;. v. H' e; .^ QF+6g.^@+yi.p6.EQ.<}.RF+y7+sf.C{+#R.]U.s$.{7.t(.a3.^X i=.N-.+1.j,.:%.3p.k[._H _H $G Av+-K Mo.:%.]%.]%.J>.*'.^-.U*.k=.^-.U*./-.T*./-.U*.03.!_.Mo. &+]o. &+83+03+]o.~0+vA+vA+*N *N *N ~0+*N *N kO H@.C_.r(.H@.G@.cZ p+.G@.'>.YP H@.A_.cZ 4..tY C .L-.SF+L-.L-.M@.*5.FA 78.68.p9.K'+:-.K'+o9.T%.TF+UF+1b+VF+WF+[% z. ~~ XF+YF+ZF+g.+q;+`F+ G+.G+1j.+G+D[ H^+v* q# a- $& O* O* `Y .Z =8.j*.<4+<4+Sx.+s.61.+s.61.+s.61.+s.61.+s.61.+s.61.+s.61.+s.+s.#v g7 #v +s.Ys.e; g7 #v #v e; Ys.Ys.Ys.Ys.Ys.h*.h*.h*.h*.h*.h*.h*.h*.1x.1x.1x.1x.1x.1x.1x.1x.1x.Ys.1x.1x.1x.1x.z<.z<.Y% x8 ,5 KB ,v.,v.d7.'5 Y% Z 7}.z<.Y% x8 Z z<.z<. Z x8 )_ )_ x8 Z z<.Y% Y% Y% Y% Y% Y% Y% Y% Z Z Z Z Z Z Z Z Y% Y% KB Y% KB Y% KB Y% i~ z<.ZY Y% O* )_ '5 F{ 7}.z<.z<. Z Z Y% Y% x8 Y% Y% Y% Y% Y% Y% Y% Y% O) q9+,v.'5 }f..Z s# Sx.@G+./ #G+RQ.N9.&q.F/.+|.$G+%G+&G+*G+=G+-G+S}+;G+]o+'[+>G+,G+$q+M&+'G+'G+)G+$s+N&+'G+Kn+Kn+lm+!G+~G+{G+{G+{G+{G+]G+]G+]G+^G+/G+(G+Mn+_G+:G++3G+3G+4G+5G+6G+7G+8G+8G+9G+9G+0G+my+Rt+g~+v)+v)+|]+sp+Yn+Ob+/|+*4+eD+P.+aG+L.+bG+cG+dG+oZ.1j+c!+ei ox eG+Cp+=++fG+gG+hG+TV !J.R9.!O vM vM ER k@.51.51.)J.F{ I$ I$ F{ x8 x8 F{ Z% I$ I$ F{ F{ )_ )_ ", "dd dd dd dd dd dd dd dd dd dd dd dd dd dd dd J6 J6 J6 xn.xn.xn.xn.xn.je xn.xn.J6 up.up.lo.lo.je J6 R5 UD+VG.WD+iG+jG+XD+K6 K6 E7 E7 U% U% 9* W> kG+E* lG+mG+1i+nG+oG+pG+qG+rG+sG+>u+5h+tG+uG+Pi+vG+|h+bB+wG+xG+*E+=E+yG+zG+AG+O~+BG+#!+CG+DG+EG+FG+EG+GG+HG+IG+JG+KG+LG+MG+NG+OG+_h+>u+PG+'u+QG+RG+SG+TG+J6+J6+pw+UG+|E+1E+E|+t]+VG+j_+WG+XG+YG+ZG+`G+ H+.H++H+@H+#H+$H+%H+&H+*H+=H+-H+;H+>H+,H+'H+)H+!H+~H+{H+bu+]H+^H+/H+(H+_H+:H++`L !8._y.bQ.J<.dH+eH+4{+>^+fH+fH+gH+B++#5+,(+~8.6l En.hH+el iH+jH+kH+lH+mH+nH+oH+pH+qH+rH+sH+tH+uH+Hr.As.vH+wH+x1.u_.P@.P@.vd.k].tY M-.fZ SX dZ % .SX M-.% .@[.@[.dZ @[.jZ 4W % .@[.,}.jZ @ .IU @ .jZ jZ ,}.eZ C_.]}.b<.b<.. .;5.. .b<.;5.]}.]}.Ua.5..Ua.+ .;{.3H ){.sI tI 6R 5H 3H 2H zf.zf.EE EE Tq.Tq.>y+EU 2H Vq.Vq.@T @T Vq.Qp.Is.cL Is.[p.Rp.Jt.Jt.Rp.nH.k+.U++{D+a^.b[.VB.#U $U +v.#v.xH+yH+{v.zF d>.7>.i; v$ E) cc ec ec hd &' ,_ (* (* (* og rS C' C' Hs 34 34 34 34 34 34 34 b, b, b, b, b, b, b, }| Z% A% A% A% Z% Z% Z% Z% }| >5 >5 '5 '5 >5 >5 ui .o )O EV.~I.9e.P9.Ma $| bc WG dc WG tM JB k*.k*.cN q} O( A% A% v$ u$ 5. v$ O( X[ 61.I+>I+>I+>I+>I+>I+>I+>I+tF+,I+)} 'I+'I+'I+'I+)I+)I+)} )} K} K} K} )} 'I+Ba ZS.BC+UC+!I+2A+2A+2A+2A+~I+BC+BC+UC+UC+!I+!I+2A+8A+xj {I+]I+]I+]I+-0 /F+/F+s( *0 IF+Nb Y0 ^I+Ys+Ys+Ys+^I+Y0 Y0 Y0 ^I+^I+/I+*0 ^I+^F+^F+q9 :0+(I+_I+LF+^< <; t: `_ Ry.Ni./> ne [_ an+an+bn+[_ ne 54 V) :I+y] .m4.]%.y7.J>.*'.`{.`{.*'.(%.a<.d5+i5+]o.03+83+ &+]o.d5+i5+~0+*N *N *N *N g,.'>.|..|..V{.U{.W{.o+.T{.W{.V{.V{.U{.T{.9^.p(.F@.1I+TF 2I+TF )` )` ~s.:a.ZT ^r+]:+j;+$_.n9.f{+f{+J{+3I+4I+31.); U& g- 5I+6I+7I+K(+bl on+Wk.WV.D&.8I+9I+^d+u= 3# 5$ g 4! [].~I.9e.z|.25+0I+aI+bI+Sx.+s.+s.+s.+s.+s.+s.+s.+s.+s.+s.+s.+s.+s.+s.+s.bd./&.fc i*.bd.Q5 /&.fc i*./&.bd.Q5 Q5 Q5 Q5 Q5 h*.h*.h*.h*.h*.h*.h*.h*.1x.1x.1x.1x.1x.1x.1x.1x.Ys.Ys.Ys.Ys.1x.1x.z<.z<.z<. Z KB ZY yj+yj+)i.O* KB Z 7}.z<.Y% x8 Z z<.z<. Z x8 )_ )_ x8 Z z<.Y% Y% Y% Y% Y% Y% Y% Y% Z Z Z Z Z Z Z Z KB KB KB KB KB KB KB KB i~ ,v.ZY KB O* ,5 ,5 '5 z<.z<.z<. Z Z Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% >5 dl.i~ Is cI+c8 ^= u=+b. !J.6B.)L dI+25.au eI+fI+t,+gI+Q^+hI+iI+jI+9r+kI+>G+X}+lI+M&+M&+'G+N&+nk+P3+P3+ok+mI+lm+!G+!G+gp+gp+gp+gp+gp+gp+gp+gp+nI+#w+Ht+oI+pI+qI+pI+rI+sI+Gt+tI+ay+uI+vI+wI+)w+!w+mr+mr+mr+$B+yD+yD+xI+AD+yI+zI+AI+BI+BI+CI+CI+DI+DI+6G+6G+8G+8G+9G+9G+;B+_w+g~+Il+v)+v)+@k+@k+Yn+|]+V&+16+EI+FI+GI+HI+II+GU.WJ.Eh+JI+)4+gW.5L.KI+LI+XC+rj hG+MI+R!+X$.xF xF k@.k@.cT cT cT cT Y% )_ )_ )_ Y% Y% F{ Z% )_ )_ )_ x8 x8 x8 ", "dd dd dd dd dd dd dd dd dd dd dd dd dd dd dd up.up.J6 J6 xn.je je ie ke ke le ie je xn.J6 J6 J6 up.NI+R5 UG.VG.OI+PI+XD+K6 K6 E7 E7 U% U% 9* c/+kG+QI+;p+RI+SI+TI+UI+VI+WI+XI+YI+ZI+5h+`I+fm+Pi+ J+bB+bB+wG+xG+.J++J+yG+@J+#J+$J+%J+&J+*J+=J+-J+;J+>J+,J+'J+)J+!J+~J+{J+]J+^J+/J+uf+!a+{a+T8+1a+(J+_J+SG+:J+J6+o4+pw+1E+1E+1E+;s+|.]z.BJ+CJ+DJ+DJ+>^+>^+v#+v#+EJ+FT.ro.;g FJ+}.dZ >}.>}.jZ jZ jZ >}.>}.@ .F0.C_.Ua.. .. .5..r(.5..]}.r(.D_.5..D_.D_.5... .JK.2H 4H @T ){.5H 6R UP UP zf.zf.Tq.Tq.Tq.EE Et.kD UP dL dL bL gO eL bL 4H uI &w.D!.D!.D!.D!.TJ+`` :6.X` N-.{D+U:.UJ+gX.}3.YB.VJ+WJ+XJ+{D.{v.YJ+|c.},+g7 <] <] O( X[ A% L$ cc cc cc hd )5 $| )5 ui 34 34 34 34 34 34 34 34 b, b, b, b, b, b, b, }| Z% Z% Z% Z% }| }| }| }| }| >5 >5 '5 Xl 34 34 .o ti _y p] P9.P9.p] Ma Ma dc WG :I JB JB JB tM tM <] !_ !_ !_ <] !_ / #v / [| [| #v +s.e; O; c. ZJ+&y+`J+,,.$k.:9 Uq+x). K+.K++K+@K+#K+$K+%K+&K+4v+4v+*K+*t+4t+j, [; =K+#D+-K+GC+TC+1A+;K+XM.>K+,K+PH+'K+SH+)K+!K+~K+UH+VH+{K+]K+^K+/K+(K+/K+_K+:K+p+0! Ry.Y/ :_ /> [_ bn+an+nK+bk+R2 oK+h( ]2 be.|3+i*.+s.1x.61.O* ,5 KB O4 zm.WG 3x.3x.61 Qe+qK.61 qK.V5 k@ e( gd :P.<.+qK.pK+qK+%u.c1+rK+6S ~P._` 4S B{+je.je.#R.je.nU (6.B7+T,.U++f;+Q:.Q:.+1.s(.@ .@ .PX PX PX PX 83+PX z].f;+03.D}.S*.U*.03./-.e;.f;+^-./-.T*.D}.D}.l&.@[.&T GU FU Mo.lD kD lD kD PX ZF FU &T GU &T kO 3..W{.x_.p(.p(.T{.U{.!>.U{.o+.x_.9^.x_.T{.x_.F@.3W YT sK+=C ~s.)` [a.^r+^r+8#.8#.^:+L7+f{+tK+w!+TF+uK+xH.vK+l+ c. `J+wK+xK+fp.BZ yK+jJ.w;+zK+,Y w'+AK+yJ+BK+!$ #& wW 34 [].~I.9e.z|.25+0I+aI+bI+Sx.+s.+s.+s.+s.+s.+s.+s.+s.+s.+s.+s.+s.+s.+s.+s.Q5 /&.i*.i*.bd.Q5 bd.i*.bd.bd.bd.bd.Q5 Q5 Q5 Q5 h*.h*.h*.h*.h*.h*.h*.h*.1x.1x.1x.1x.1x.1x.1x.1x.Ys.Ys.Ys.Ys.1x.1x.z<.z<.7}.z<.ZY ,v.oA+)D+d> KB KB Z 7}.z<.Y% x8 Z z<. Z Z Y% x8 x8 Y% Z Z z<.z<.z<.z<.z<.z<.z<.z<. Z Z Z Z Z Z Z Z z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<. Z Y% x8 )_ )_ z<.z<.z<. Z Z Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% ZY q9+@$+Is @$+tJ pg Tx./&.CK+u|.PV DK+EK+FK+GK+HK+gI+IK+&]+*]+JK+KK+LK+MK+Ct+Dt+W1+M&+N&+P3+P3+P3+ok+ok+mI+lm+!G+~G+~G+dr+dr+dr+dr+dr+dr+dr+dr+dr+#w+Ht+oI+qI+NK+qI+pI+sI+Gt+tI+OK+PK+QK+Jl+!w+!w+mr+mr+mr+$B+yD+yD+xI+RK+SK+{-+TK+UK+VK+]-+]-+WK+WK+XK+XK+YK+YK+Q,+ZK+*>+;B+:w+Qt+&>+&>+oy+@k+`K+ L+v)+R.+.L++L+@L+#L+$L+8W.%L+&L+JI+)4+gW.5L.,y *L+=L+-L+;L+>L+Zs../ +s.+s.h*.cN X[ q} O( O( z<.Y% x8 Y% Z Z )_ Z% x8 x8 x8 Y% Y% Z ", "dd dd dd dd dd dd dd g~ g~ g~ g~ g~ g~ g~ g~ lo.lo.up.J6 xn.je ie le ;_ 2b he ke le je je xn.J6 lo.m1 NI+UG.XD+jG+,L+XD+K6 je E7 >' U% =+ 9* Ty.s(+'L+)L+qe !L+sH ~L+{L+]L+^L+dD+ZI+mw+Zp+/L+Pi+ J+bB+bB+^a+xG+.J++J+(L+yG+_L+:L+:+QL+`+ M$ =] *- O~.O~.-H.-H.;_ S_ f@+S_ t% L) S& C& C& [! L) o^ .^ -^ 6[ L) L) 6[ -^ .^ U@ m@ m@ m@ U@ U@ m@ m@ .* U@ m@ m@ 2% * .* U@ l& U@ * * U@ {@ l& {@ 2% .* .* * * .* .* 2% J- 5! 5! 5! 5! 5! 5! 5! 2{ 3{ d= 2{ 4{ G{ 4{ S# [& 7# I -D RL+SL+TL+UL+V@.(p wm ^k VL+WL+YR.`O q{.XL+dH+DJ+YL+ZL+`L+`L+;^+ET.NO./h vN }=.{8.fr M+.M+JJ+mJ.+M+@M+#M+$M+%M+gy &M+l(.*M+yt.>t.s+.x1.P@.vd.2p.v_.v_.vd.w_.V).W).f,.7..f,.f,.+[.SX dZ 7..tY % .IU jZ dZ % .dZ >}.4W >}.dZ @[.4W IU r(.5..;5.Ua.r(.C_.r(.5..C_.r(.D_.r(.C_.r(.Ua. .TP ){.@T ){.TP 6R Zm. G 7R GE Tq.}W }W EE DE lD UP dL =M+dL N v'.f~.eL sI @T Qp.4H ){.@T vI Uq.+&+V#.k+.:R f;+g;.9#.B{+-M+6X.;M+Xu+8X.>M+8x.)J.pK.,M+e; O; u$ A% X[ h*.q} ec q} cc O( cc Z% Z% >5 34 34 34 34 34 34 34 b, b, b, b, b, b, b, }| }| Z% }| }| }| }| }| }| }| >5 >5 '5 Xl 34 34 b, ti _y _y p] p] Ma Ma dc :I tM HB pg 6 vi h7 I{ I- j; -L fc fc fc /&.Q5 i*.1{ ;. e( }* Jp+8: &~.'M+eG )M+H+.!M+~M+Dz+{M+]M+^M+/M+(M+$K+_M+:M+ lK+mK+Kf.,p+!p+<; qM+!^ rM+sM+tM+uM+vM+qg ;W.el+f>.bd.bd.#v cN h*.61.6=+WG 3x.3x.+2 u=+qK.V5 Sx.<$ Y g. e; wM+xM+yM+2c zM+AM+BM+Z:.e;+-M+ie.y7+y7+#R.je.je.]U.98.{D+#{.E_.^-.D}.e3.+1.j,.e3.jZ 4W a<.ZF a<.Mo.f5+kD !_.^X {7.D}./X 03.B7+03.{7.03.|:./-.V*.T*.wY l&.@[.dZ &T @[.PX eZ }W 3p.jD 3p.kD jZ ZF @[.ZF >}.'>.U{.T{.9^.9^.o+.V{.!>.V{.x_.0Z 0Z x_.W{.o+.y_.;K qY sK+sK+5q.)` oz oz 8#.8#.F*.F*.b3+f{+$:+u5.uK+CM+DM+EM+@@ %+ $y+FM+0w+GM+HM+IM+2p+>k.JM+KM+LM+MM+&;.l; [+ 48 XG Xl [].ll.9e.z|.z|.0I+bI+bI+Sx.+s.+s.+s.+s.+s.+s.+s.+s.+s.+s.+s.+s.+s.+s.+s.Ys./&.i*./&.Q5 Q5 bd.i*.Q5 Q5 Q5 bd.bd.Q5 Zs.>p.61.61.61.61.61.61.61.61.1x.1x.1x.1x.1x.1x.1x.1x.Ys.Ys.Ys.Ys.1x.1x.z<.z<.z<. Z KB ,v.oA+oA+d> O* KB Z 7}.z<.Y% x8 Z z<. Z Z Z Y% Y% Z Z Z z<.z<.z<.z<.z<.z<.z<.z<. Z Z Z Z Z Z Z Z z<.1x.z<.1x.z<.1x.z<.1x.z<.1x.z<.61.Y% h*.x8 x8 Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z i~ NM+=L sM tJ JB k*.Z$+me Z_.OM+8d.^y.8R.vt+PM+QM+RM+R^+SM+TM+UM+VM+, +WM+XM+Hn+M&+'G+P3+P3+P3+mI+mI+lm+!G+~G+~G+gp+gp+dr+dr+dr+dr+dr+dr+dr+dr+dr+#w+Ht+oI+qI+YM+NK+qI+ZM+Gt+`M+ N+Kl+FD+tr+!w+!w+mr+mr+mr+$B+yD+yD+xI+.N++N+@N+#N+UK+UK+->+]-+WK+WK+WK+XK+4G+YK+Q,+Q,+9G+*>+$N+Qt+rr+&>+oy+oy+%N+tp+Jl+&N+*N++L+@L+[#+=N+-N+;N+dR.>N+,N+gW.{z eG+'N+bM+a8 )N+5p+!N+gd e; e; cN cN X[ X[ q} q} Z Y% x8 Z 7}.7}. Z x8 )_ )_ x8 x8 Y% Y% ", "dd dd dd dd dd dd dd g~ g~ g~ g~ g~ g~ g~ g~ lo.lo.up.J6 xn.je ie le ;_ 2b he ke le ie ie je dd o} :| NI+UG.XD+UG.~N+XD+K6 je E7 >' U% =+ k& {N+]N+z] Kq+@: ^N+/N+(N+_N+:N+(+DJ+$O+%O+&O+&O+EJ+V*+ZL E<.(j _h F} fr *O+=O+-O+;O+>O+,O+'O+)O+Za+!O+8,.~O+-.+Wm.L:.6..L:.x1.v_.v_.P@.6:.P@.v_.>>.V).tY f,.f,.f,.fZ % .M-.V).>>.+[.4W jZ dZ % .dZ @[.>}.@[.% .dZ >}.@ .D_.5..Ua.5..r(.r(.D_.5..r(.5..5..r(.YP H@.YP E@.[W bL tI Vq.5H 6R Zm. G pe.FE iD EE Tq.EE DE lD FE G rI G qI YJ u'.qI 2H ji.zl.zl.Al.}p.0O Js.{O+qA.P#+*M.V#.T:.>W CF.B{+>:.]O+|H.^O+/O+1d.l}+(O+dX.hy.`'+Gs i; Gs ER Gs [| Gs [| Gs [| Fs O( >5 >5 >5 >5 >5 >5 >5 >5 }| }| }| }| }| }| }| }| }| }| b, b, b, b, b, b, b, 34 34 Xl Xl 34 34 b, ti ^_ ^_ )5 )5 cc cc cc ec +2 V5 |* I{ |* b: b* xi |3+qh qh C* d) d/ e) w. O+ #f ~ ._O+:O+n! .Mh.Q:.9h.e3.IU z].IU IU D_.r(.C_.YP YP H@.H@.H@.'>.z_.4..cZ A_.3..B_.+[.rY ~s.!s.!s.p.+s.e; e; Ys.>p.Ys.e; .F.>p.Ys.+s.+s.Ys.>p..F.61.61.61.61.61.61.61.61.1x.1x.1x.1x.1x.1x.1x.1x.Ys.Ys.Ys.Ys.1x.1x.z<.z<. Z x8 O* KB d> d> d7.,5 KB Z 7}.z<.Y% x8 Z z<. Z Z Z z<.z<. Z Z Z z<.z<.z<.z<.z<.z<.z<.z<. Z Z Z Z Z Z Z Z 1x.Ys.1x.Ys.1x.Ys.1x.Ys.1x.Ys.1x.+s.61.+s.61.h*. Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z @$+.Z O4 =8.U0 tM Tx.Z$+;L++P+&q.@P+qs #P+&T.$P+%P+&P+*P+=P+-P+;P+>P+Bt+XM+Hn+M&+'G+ok+,P+,P+'P+lm+)P+fp+!P+cr+Ft+~P+~P+Ft+Ft+Ft+Ft+Ft+Ft+Ft+Ft+~P+Ft+gp+#w+{P+]P+qI+^P+Ht+nI+/P+ N+(P+FD+tr+@B+!w+mr+mr+mr+$B+yD+yD+xI+.N++N+@N+#N+UK+UK+->+]-+_P+_P+_P+WK+4G+4G+:P+Q,+N+6P+)4+,o hb 6/+M5 7P+8P+)N+Zs.i*. / / X[ X[ cN cN h*.h*.x8 )_ )_ Z 8}.Rx.8}.z<.F{ F{ F{ F{ )_ )_ ", "dd dd dd dd dd dd dd g~ g~ g~ g~ g~ g~ g~ g~ up.up.J6 J6 xn.je je ie ke ke le le le ie ie 7c dd kC lo.up.VD+VG.XD+TG.XD+K6 je >' U% =+ N@ du.9P+0P+aP+Ks+bP+in cP+dP+eP+fP+gP+hP+iP+hD+'G+jP+Ti+Ti+Ti+Ti+kP+bB+^a+lP+92+mP+nP+3N+oP+pP+qP+rP+sP+tP+uP+vP+wP+xP+yP+zP+7a+AP+4E+j_+t]+n4+-s+-9+BP+(J+_J+TG+J6+v]+K6+uk+kN+kN+CP+1E+DP++=Q+-Q+;Q+>Q+t +nZ.,Q+'Q+)Q+!Q+ O+~Q+QL+o3 ^{ ~% ~% %% %% ;_ -_ S_ &) t% L) [! [! S& S& [! [! o^ 6[ 6[ L) L) 6[ 6[ o^ m@ U@ .* 2% m@ m@ U@ 2% .* 2% U@ 2% * .* U@ l& l& U@ * * U@ {@ l& {@ U@ 2% .* .* .* .* 2% U@ J- J- J- J- J- J- J- J- 4! l* .@ .@ +@ J- J- .@ T$ !% Q% T p+ }9 zo.{Q+$a S2+T= ]Q+-9.1_ {h 7l OZ P `O >(+;^+$O+Y7+^Q+cz+C%+so.X>+Aq.(j |k.u:./Q+(Q+_Q+:Q+}.@[.% .dZ >}.@ .5..5..D_.D_.r(.D_.5..Ua.D_.5..Ua.D_.H@.'>.,>.q(.qI eL dL bL UP Zm.[W G i,.i,.a<.Mo.PX PX |W Mo.i,.qI Ym.Zm. G qI Ym.6R 6R TP K 3H 2H ji.Oo.aO 0L `J Nr.6z.5Q+[Z Y|.oU bz.sf.[H.-M+FQ.6Q+7Q+8Q+r`.M^.}e.pz.5H.`'+Gs e, i; i; i; ', Gs Gs Ls vM I$ >5 >5 >5 >5 >5 >5 >5 }| }| }| }| }| }| }| }| b, b, b, b, b, b, b, b, b, 34 34 Xl Xl 34 34 }| ^_ ^_ )5 E) E) hd cc +2 61 b: b: |].N=.>b.eb+9Q+#A.=Y.X/ rh f( nG.9v.*r+ e $f +y+I;.]M+)e 0Q+4'.aQ+bQ+!F cQ+dQ+Ia+eQ+eQ+fQ+gQ+hQ+hQ+iQ+7O+jQ+kQ+lQ+mQ+hq nQ+oQ+pQ+qQ+rQ+sQ+tQ+uQ+vQ+uQ+vQ+wQ+xQ+e: e: yQ+yQ+%< %< zQ+zQ+%< %< yQ+e: e: yQ+yQ+%< ib U9 %x AQ+ib ib U9 %x AQ+U9 !6 qO+pO+qO+ib U9 b] b] b] ${ Am tO+Am sO+tO+tO+tO+h4 h4 BQ+BQ+BQ+CQ+8K+8K+8K+8K+8K+8K+9K+$M jM+jM+Uy R&..B Yv Uy Yv vO+DQ+EQ+EQ+EQ+DQ+DQ+EQ+vO+/c uO+DQ+EQ+vO+i .FQ+${ 1r b] x7 q8 q8 q8 x7 x7 x7 x7 x7 x7 x7 x7 qx W7 W7 70 70 70 70 GQ+W7 70 GQ+HQ+HQ+HQ+GQ+GQ+IQ+HC IQ+JQ+IQ+yO+KQ+xO+fM+oG fM+f4 2~ f4 2~ f4 iF+cF+Dl LQ+bF+aF+ev 0F+kF+dF+eF+dF+Dl LQ+&s LQ+DC+FC+GC++D+Px+#D+@D+@D+MQ+$D+gK+[t+1t+|t+n-.n-.{I+=0 -0 -0 -0 /I+X; IF+X; X; X; *0 IF+Nb ^I+NQ+OQ+PQ+QQ+RQ+SQ+TQ+UQ+VQ+WQ+sM+vM+vM+>W.XQ+m- og+Sx.FR 2^ 6=+U# hd 3x.L$ 3. U# @$+m|.wn./* zm.YQ+ZQ+`Q+-M+>w.rK+5S AY y(.u>. R+KV.tf..R+]` 7#.#{.k=.D}.L'+7,+`^.@j.]X l&.4W jZ Mo.PX PX lD f5+DE 3q.5v.}g.p$.:r.5v.Cv+]>.nt+6#.jh.3;.;y+3;.mS.'0.[o./-.:%.03.l4.E_.l4.e;.B}.E_.B}.k4.s(.^X e3.e3.+ .+ .e|.e|.. .Ua.r(.C_.'>.B_.G@.G@.3..'>.'>.SX L-.)` +R++R+ZT ^r+ZT |g.^:+8#.@R+b3+M7+$:+s4.#R+$R+%R+&R+>* n^ ~ .eG #A :T *R+=R+-R+;R+>R+,R+'R+t%+Hb O$ b# *, q` {Y Xl [].ll.9e.Js Js zh.$~+$~+3x.61.61.61.61.61.61.61.61.61.61.61.61.61.61.61.>p.+s.e; +s.>p.>p.Ys.e; *; @A.>p.+s.+s.Ys.>p..F.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.Ys.Ys.Ys.Ys.1x.1x.z<.z<.Y% x8 ,5 KB d> d> d7.'5 KB Z 7}.z<.Y% x8 Z z<. Z Z z<.7}.7}.z<. Z Z z<.z<.z<.z<.z<.z<.z<.z<. Z Z Z Z Z Z Z 61.Ys.Q5 Ys.Q5 Ys.Q5 Ys.Q5 Ys.Q5 Ys.Q5 Ys.Q5 +s.+s.h*.Y% Y% Z Z z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.=L cc <9.d6+ 6 #< o! 8n+)R+g>.MH.+oy+sp+@k+wI+&N+-B+4R+5R+E@+6R+7R+8R+9R+)V.0R+aR+ya w Cp+ha Mo+8n+bR+!N+/&.[| [| q} X[ cN h*.61.61.)_ )_ )_ Y% 8}.Rx.8}.z<.I$ I$ I$ F{ F{ )_ ", "dd dd dd dd dd dd dd E7 E7 E7 E7 E7 E7 E7 E7 dd dd dd g~ g~ g~ g~ g~ g~ g~ g~ E7 E7 E7 7c 7c E7 dd up.J6 IO.HO.VG.UG.K6 K6 je >' U% =+ N@ du.pW.cR+dR+eR+Ws+W< fR+gR+Ii+>c+hR+W.+iR+.w+X1+jR+kR+kR+lR+lR+Ri+kP+mf+'c+lP+2N+mR+nP+3N+nR+oR+pR+qR+rR+sR+tR+uR+xP+zP+vR+wR+xR+4E+yR+~'+1E+zR+TG+RG+RG+SG+L6+AR+u]+K6+~9+CP+CP+CP+1E+cL+cL+dL+BR+CR+DR+DR+ER+HP+S6+FR+GR+HR+sN+IR+JR+KR+wL+LR+3q+MR+NR+OR+PR+QR+RR+SR+_s+TR+UR+VR+WR+XR+YR+ZR+`R+ S+.S++S+@S+#S+#S+$S++{+~!+|++%S+&S+!%+{{+*S+=S+Z]+-S+;S+>S+O% ,S+Yt.YY #% #% %% %% $% &) S_ &) M$ L) L) L) L) [! S& C& [! L) L) 6[ 6[ L) L) [! m@ 2% * .* m@ {@ U@ .* .* 2% U@ .* * .* m@ k+ l& U@ * * U@ {@ l& {@ m@ U@ 2% 2% 2% 2% U@ m@ J- J- J- J- J- J- J- J- C, +@ `+ `+ +@ J- J- Y_ y% &- C& $. n+ d. Ju++0 }l fT 'S+)S+]Q+3$.!S+,#.HW 3/.Vv.2Y >|.;(+#5+#5+~S+{S+`L xB.)~.>g G} 5i.:N ]S+^S+/S+(S+_S+WE+:S+ex 1Q+&3+%/.i<.La.P++J:.oQ. P.4Q+6..x1.6:.w_.u+.w_.u+.V).W).W).f,.fZ % .4W +[.S{.7..SX SX % .4W dZ @[.>}.@[.dZ dZ 4W @ .D_.C_.YP YP r(.D_.Ua.;5.C_.D_.5..D_.YP ,>.H@.8^.ZJ >.+eL =M+rI rI rI rI ^X.^X.&T GU .D.GU QX GU i,.qI G 6R UP G [W K G rI rI G UP 5H 5H 5H .vg.fI eI [S+}S+|S+1S+!D.0g.iy.iy.2S+2S+hy.xF j> j> Y[ S6 ZG zk `G cE a) I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% }| b, $w $w $w $w $w b, b, b, 34 >5 '5 '5 >5 >5 Z% F{ O( v$ w$ w$ <] [| -L j; gd /&.zj+zj+be.V/ Vx.Z:+cq.b.+f3+c,+h* at+Je+>D+eC+3S+4v+6t+5v+6t+6t+4S+5S+5S+6S+C7 Z[.7S+8S+9S+fG+0S+0S+aS+E_ tq bS+cS+dS+eS+fS+gS+hS+iS+hS+jS+kS+lS+mS+nS+kS+lS+oS+6u pS+qS+qS+qS+rS+rS+rS+pS+qS+qS+rS+rS+rS+qS+pS+pS+%9 f3 f3 ^( ^( sS+tS+sS+^( uS+qS+qS+qS+/4 uS+!6 !6 !6 rO+I( vS+I( rO++w +w I( wS+xS+yS+zS+AS+@3 BS+`R `j Yh CS+CS+CS+CS+Yh `j CS+$P Zg Xv jM+Yv R&..B DS+bf bf DS+DS+ES+DS+R&..B bf ES+DS+70 X7 qO+ib !6 pO+4~ pO+!6 !6 !6 !6 !6 !6 !6 !6 b] /b /b cM+cM+cM+cM+L8 L8 /b /b B%.B%.B%./b cM+HQ+2d `H.$7 FS+2d `H.3~ '6 Aa eM+lk fM+GS+2~ a6 KQ+=J 2~ Aa fM+GS+2~ Aa 3K+rF+4K+rF+iF+mw iF+mw iF+qF+VC+VC+VC+XM.DC+1A+GC+DC+DC+FC+1A+IC+Qx+Px+Px+7A+]A+xj (F+(F+HH+]I+=0 /I+-0 GF+GF+-0 HF+s( HS+IS+JS+KS+LS+MS+NS+OS+PS+QS+RS+SS+TS+&A.W; of -r+Q( 3x.'U.5D+B. !. bc K$ J$ Ks US+a1+VS+_& WS+XS+.v.W!+W!+++.XY.UO+AY ex.u>.nd.JV.l^+.R+{7.l=.l=.T*.^-.D}.T*.e3. /.Sh.l&.>}.4W PX lD lD PX 03+YS+5q.:r.ZS+`S+wz.mS. T+nt+ZS+jh. T+;y+ T+jh.ZS+nt+V*.12.U*.~C.k4.Lz.^-.|2./-.qy.e;.n~.k4.n~.e;.f;+s(.eZ eZ eZ F0.@ .4W >}.% .@[.4W 4W @[.dZ dZ L@./6.+R+:a.p..F.Ys.+s.hS.*; >p.+s.e; +s.>p..F.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.Ys.Ys.Ys.Ys.1x.1x.z<.z<. Z Y% O* ZY yj+yj+)i.,5 KB Z 7}.z<.Y% x8 Z z<.Y% Z 7}.8}.8}.7}. Z Y% Y% Y% Y% Y% Y% Y% Y% Y% Z Z Z Z Z Z Z 61./&.C* /&.C* /&.C* /&.C* Q5 zj+Q5 zj+Q5 zj+Q5 Q5 h*.Y% Y% Z Z z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.5D+P6 D8+=T+[U -T+>L+ut+dy.;T+LP.>T+,T+'T+)T+!T+~T+jI+{T+T(+]T+^T+/T+ w+$q+)P+lm+:o+:o+[R+[R+er+!P+A$+A$++w+(T+ay+}R+}R+(T+(T+(T+(T+(T+(T+(T+(T+_T+P0+]G+{G+Mn+Mn+It+:T++(|+(|+5T+6T+-4+7T+T5+8T+9T+0T+aT+,4+yL.c!+bT+jw @5 cT+&< As Qj+dT+Z$+l*.ZQ ZQ sM sM FR FR FR FR Z Y% x8 Y% z<.z<.Y% )_ F{ F{ )_ )_ )_ x8 ", "dd dd dd dd dd dd dd E7 E7 E7 E7 E7 E7 E7 E7 g~ g~ g~ g~ g~ dd dd dd o} kC kC dd g~ E7 7c 7c >' x5 dd xn.IO.HO.VG.K6 K6 je E7 >' U% =+ N@ du.eT+fT+gT+dt+hT+rt+iT+jT+o$+kT+lT+0i+mT+.w+B$+H,+ >+ >+jR+jR+O3+Ti+kP+mf+X8+.J+mP+mR+_L+nT+oT+pT+qT+rT+sT+tT+uT+vT+wT+xT+yT+zT+}J+3E+AT+Q[+pw+zR+BT+BT+TG+J6+u]+CT+K6+o4+E|+t]+t]+1E+cL+DT+cL+U+1%+,U+'U+!{+)U+!U+WJ.~U+{U+]U+K# a(+]+ `+ #% %% %% $% &) S_ &) &- L) 6[ o^ 6[ [! C& R% C& S& L) 6[ 6[ L) S& C& {@ 2% * .* m@ {@ U@ * .* 2% 2% .* * .* m@ k+ l& U@ * * U@ {@ l& {@ {@ m@ U@ U@ U@ U@ m@ {@ J- J- J- J- J- J- J- J- +@ @ Z+ Z+ .@ l* C, o3 si m3 d& 6[ J$ 4. ]@ ;- ^U+/U+(U+u3.Wb _U+:U+n..'i MO.YL ~8.d_.{z.Xc.t.P@.w_.vd.Oq.>>.V).S{.tY +[.SX F0.@[.+[.fZ M-.fZ % .jZ dZ >}.4W >}.dZ dZ 4W IU C_.H@.,>.,>.C_.D_.Ua.Ua.H@.C_.D_.D_.C_.YP C_.E@.qI >.+>.+ N ZJ ZJ qI qI ^X.g,.*T qQ.rQ.n$.YF qQ.FE [W UP TP UP rI rI 6R Eg.3H 5H K .j.Eg.3H 5H @N 8U+bL Vq.Eg.}p.qe+=c.,3+=:+:H.-M.9U+H!+[m.0U+aU+@<.%U.Rx.Q_.p7+XB dX..& .& j> Y[ 2U VV `G cE Fs I$ I$ I$ I$ I$ I$ I$ Z% Z% Z% Z% Z% Z% Z% }| b, $w $w $w $w b, b, b, b, >5 >5 F{ F{ I$ I$ A% q} [| v$ O; O; j; gd -L j; xi 3n+og+fO.g( Kp+E* gt+bU+kv+5v+kv+eC+kv+@t+X) X) `s+.t+av+jv+=K+=t+cU+dU+eU+fU+bj.bj.gU+hU+iU+hU+jU+Qt kU+B< lU+mU+nU+oU+01 pU+y2 y2 y2 y2 qU+rU+sU+rU+qU+tU+qU+() uU+ 5 &{ 5 &{ E^ Q| E^ vU+`4 l} 5 &{ e3 wU+`4 e3 uS+^( f3 ^( f3 ye 0n 0n ye ^( /4 pS+pS+uS+%9 !6 ib !6 rO+I( I( 4~ qO+pO+rO++w I( wS+yS+zS+AS+i#+Yh CS+$P Zg qH _,.F).Xv Yh `j Yh $P Zg CS+@3 x-.R&..B DS+bf bf bf DS+xU+ES+DS+bf xU+yU+ES+%M ${ !6 ib !6 rO+4~ qO+U9 AQ+AQ+AQ+AQ+AQ+AQ+AQ+AQ+kw ;z.Oz Oz B%./b /b cM+;z.40 40 40 ;z.Oz B%./b zU+3~ 2d 2d 2d A7 4e AU+BU+AU+Zv 4e n0 A7 .x .x A7 3~ $7 $7 2d $7 =J GS+=J =J a6 lk M0 %I+#I+4K+aF+bK+bK+bK+dK+eK+FC+GC+DC+DC+DC+FC+GC++D++D+IC+1A+4A+6A+7A+,/ 5A+5A+5A+{A+{A+{A+8A+xj ]I+-0 CU+IS+KS+DU+EU+FU+GU+Xy.HU+IU+JU+t^ KU+LU+e0 MU+V; fc 3x.NU+80+C. C. (* -^ 8e.OU+d;+3,+PU+5!.QU+p6.W!+v`.<<.%[.1w.4S u/._}.nd.tA.RU+l^+B7+t(.EP EP 03.k4.^X p/.R:.+1.sc.j,.dZ >}.PX lD lD Mo.]o.CE ,t.ul.SU+TU+ul.UU+wz.TU+ T+VU+VU+VU+ T+ZS+SU+:a.wY 12.f;.~C.Lz.r5.K>.B0.%B.K>.qy.j5.n~.Lz.~C.^-.:%.>}.>}.@[.dZ % .% .% .dZ jZ F0.,}.4W dZ dZ # .+$.>s.>s.:a.ZT F*.q}+_@.@R+b3+L7+s}+l3.s4.[(+Ev+%R+WU+XU+zo $^ <9 YU+k{.[q ZU+`U+ V+O +.V++V+@V+U>+X+ :* 2( LB vM.+$+d7.[].ll.`Y .Z Js =8.<4+<4+O4 Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z 90+Ys.e; +s.>p..F.>p.+s.=; *; >p.+s.e; +s.>p.@A.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.Ys.Ys.Ys.Ys.1x.1x.z<.z<.7}. Z ZY ,v.oA+oA+d> KB KB Z 7}.z<.Y% x8 Z z<.Y% Z 7}.8}.8}.7}. Z Y% Y% Y% Y% Y% Y% Y% Y% Y% Z Z Z Z Z Z Z 61./&.C* C* C* C* C* C* C* zj+zj+zj+zj+zj+zj+qh Zs.cN Y% Y% Z Z z<.z<.7}.z<.z<.z<.z<.z<.z<.z<.1x.u=+P6 qK.#V+#< $V+)R+%V+&V+sU.*V+=V+-V+;V+>V+,V+'V+)V+F&+!V+)[+~V+{V+In+)P+lm+:o+:o+[R+]V+]V+Ht+cr+A$++w+(T+ay+}R+}R+OK+}R+}R+}R+}R+}R+}R+}R+}R+}T+P0+Ll+SA+{G+^V+:T+/V+(V+$w+_V+^G+:V+_T+vr+@k+Wn+mr+mr+mr+$B+yD+yD+xI+1G++%>+f~+1V+2V+:|+BD+|P+& +3V+4V+5V+2I.xL.#3 s'+td a} {m+6V+7V+wi :>+wM+b: Sx.2x.c8 FR sM ec ec cc 8}.z<. Z Y% Z Y% I$ T@ )_ x8 x8 x8 Y% Y% ", "dd dd dd dd dd dd dd kC kC dd dd g~ E7 7c 7c >' O6 M_ (# (# M_ O6 >' M_ O6 >' L_ L_ >' O6 M_ O6 O6 dd g~ xn.xn.K6 K6 UD+J6 g~ >' U% d+ }. 8V+9V+0V+aV+bV+cV+dV+Or+~h+eV+fV+gV+hV+.-+#-+iV+jV+Q3+Q3+kR+gD+kV+1N+}h+'c+eB+eB+lV+82+mV+mR+nT+pP+nV+oV+pV+qV+rV+sV+wT+tV+uV+zT+vV+}J+wV+Q[+xV+yV+zV+RG+AV+SG+AR+BV+S~+uk+s/+kN+CP+E|+DP+DT+CV+DV+EV+.!+FV+FV+GV+1u+-q+Yy+GR+)q+HV+IV+JV+uN+MP+KV+LV+MV+NV+mu+fJ+OV+PV+QV+RV+SV+ZT+TV+UV+VV+WV+XV+YV+ZV+`V+ W+.W++W+.W+@W+#W+$W+%W+&W+*W+B_+=W+-{++++!U+-W+;W+Eh+>W+(8.,W+,5 2% k3 ^* 8' &% kC 'W+&- o^ .^ -^ L) C& [! 6[ p: o^ [! S& [! 6[ L) [! k+ {@ U@ m@ l& l& {@ U@ {@ m@ U@ 2% 2% U@ m@ {@ l& m@ .* 2% U@ {@ m@ U@ .* U@ m@ l& l& m@ U@ .* ~+ ]+ +# +# {+ h. j+ m* j+ j+ ]+ {+ {+ ]+ j+ U@ M2 )W+!W+{2 ~2 r% E& y. ,D ~W+#y+{W+]W+Xa ^W+/W+(W+&E.lt ro.!8.{z.bQ.27+D%+D%+-^+j!+[i.T*+(y.Tv.We._W+:W+>.W).7..f,.+[.SX SX SX SX @[.4W @[.@[.>}.4W 4W >}.@[.@[.,>.C_.5..5..r(.YP H@.H@.C_.r(.D_.D_.D_.C_.H@.!>.ZJ .K +N >.+ZJ {}.Zm.ji.i,.i,.Pp.&T *T *T 1W Pp.lI nI `F FE nI pe.FE 7R zf.1H pI 1H zf.zf.pI Eg.=M+){.D!.&w.TP K ^d.v6.3l.4W+:H.3;.Dk.wE.`u.5W+6W+7P.'$ 7W+8W+9W+0W+#a.DR G;.e7 e7 J! zF VV cE i. h+ F{ x8 F{ Z% I$ F{ F{ F{ F{ I$ I$ Z% Z% }| 34 24 4! K> 34 34 b, O) ,v.x8 I$ A% A% A% w$ (& O; j; [| i*.Zs.!N+Q5 f>.aW+;r+be.p^ E* bW+Wq+$f dC+Fz+v3 ,d+cW+_v++t+Yx+|v+dW+eW+%A+fW+$A+$A+Hx+fU+@{ == == gW+hW+iW+jW+kW+jW+#5 lW+92 u2 mW+nW+oW+pW+pW+qW+rW+sW+sW+tW+uW+uW+vW+vW+vW+vW+uW+p) [i l{ Af l} wW+l} Af wU+xW+l} wW+l{ a< 4^ yW+>2 zg zg zW+zW+zg AW+BW+BW+AW+:/ CW+DW+CW+EW+FW+H2 zN %{ 1q C~ Bn C~ :( 1q :( :( :( GW+Bn jb HW+sO+e9 IW+IW+IW+IW+JW+JW+JW+bQ KW+IW+JW+JW+IW+Qf LW+LW+L8 cM+cM+L8 %M qx E3 B%.B%./b /b cM+L8 L8 L8 !z U9 U9 AQ+AQ+U9 U9 ib MW+MW+%x %x AQ+U9 U9 ib %7 B~ NW+E6 NW+%7 !z 1r B~ B~ B~ %7 %7 Y7 Y7 j .^c ^c za za z7 z7 kw kw kw j .j .j .j .j .zU+zU+^c j .G*+y7 Kw G*+Kw y7 zU+G*+X7 A~ XH+A~ wO+=J iF+BO+aF+cF+LQ+0F+dF+dF+dF+dF+dF+qF+CO+CO+FO+XM.1A+DC+VC+dK+cK+.Q.eK+XM.1A+GC++D+Qx+#D+@D+@D+6A+$( OW+PW+QW+RW+SW+TW+r1 UW+r( Lg.VW+WW+XW+YW+j- ;. cN .Z $. U% * f!+ZW+QF+)U.`W+ X+$' .X++X+:}.[H.gX.e1+$$+65+je.@R.@R.nU RU+_R ^Z }%.EP F0.s(.*4.f;+^X S,.E1.+1.:%.!_.@ .@ .PX kD iD lD d5+QX 4q.@X+#X+$X+$X+%X+&X+*X+=X+m=.*X+&X+-X+;X+;X+oz >*.'T K>.12.@1.@1.12.12.K>.'T 'T |2.f;.qy.|2.j=.N-.4W 4W jZ @ .jZ @[.SX dZ @[.jZ @ .jZ @[.fZ a..P%.>s.nt+m(+m(+|g.nz n^+b3+>X+[^+ 9.l3.t}+,X+'X+)X+p2.!X+Y, G+.~X+X9 {X+|}+Gy s..]X+LM+^X+MO k6 J! e, d# DR F;.F;.[].[].d> d> 8g.O4 O4 c8 2x.2x.t& t& I$ )_ x8 Z z<.7}.)_ x8 x8 Y% z<.7}.7}.8}.1x.1x.1x.1x.1x.1x.1x.1x.X[ cN 61.p.Ys.e; #v cN h*.z<.7}.z<.8}.)> Yt.d> d7.d7.ZY }| I$ F{ )_ x8 Z z<.z<.8}.8}.7}.7}.z<. Z Z Y% z<.z<.z<.z<.z<.z<.z<.z<. Z Z Z Z Z Z Z 61.Q5 zj+qh qh 3n+m,+m,+m,+|3+|3+|3+|3+|3+|3+|3+bd.h*.Y% Y% Y% Y% Y% Y% Y% )_ Z Z )_ F{ Y% z<.1x.hS.{; /X+aW+B* (X+;3.5o._X+:X+' L_ L_ >' O6 M_ O6 O6 dd g~ xn.je K6 je je E7 >' U% =+ N@ 9* xX+yX+zX+AX+BX+YO )o+CX+~o+-P+)V+'[+U.+4~+Z;+jV+!]+7~+7~+ >+kR+Ui+kV+DX+}h+'c+eB+s6+82+EX+FX+3N+GX+HX+IX+JX+KX+LX+MX+wR+NX+wR+OX+lN+PX+9h+QX+xV+M6+RX+(J+SX+_J+J6+u]+L~+uk+*!+*!+CP+t]+Y+,Y+'Y+)Y+!Y+~Y++W+{Y+]Y+^Y+/Y+(Y+_Y+:Y+t.6:.v_.2p.w_.w_.Oq.s'.W).tY 7..fZ M-.fZ M-.% .>}.fZ fZ M-.SX SX M-.fZ fZ G@.'>.YP C_.YP YP C_.D_.,>.H@.YP YP YP ,>.3..U{.e~.nY+nY+oY+e~.e~.{}.Zm.^X.i,.a<.ZF Pp.ZF 1E.DE Mo.FE 7R `F FE nI `F GE GE zf.1H 1H |H 1H DU uf.Eg.8Z TJ+|r. K .e|.$[.ik.pY+qY+rY+sY+`u.tY+2L uY+ <.bm.NA.N_.1d.]@+E~.'b+vY+wY+XY .2 <+.d>.`5 bE 7}.z<.)_ h+ @. @. /. F{ F{ F{ I$ I$ Z% Z% Z% 34 K> 4! K> 34 >5 }| T@ +. :. f. a. ./ /&.Q5 Q5 fc /&.Zs.:P.xY+zj+B* /_ By.+v+$f {' yY+.t+3S+X) fC+$t+aA+#t+Yx+|v+[v+2v+zY+%A+-A+*A+-A+AY+AY+BY+eU+CY+CY+CY+DY+EY+0_ FY+H*+GY+HY+IY+JY+KY+LY+MY+NY+OY+OY+tW+uW+PY+QY+uW+PY+QY+QY+uW+uW+QY+QY+Gc Bg xW+Af xW+RY+lb Ae yW+2/ yW+Ae mT.&7 m{ m{ L^ 2[ AW+zg AW+AW+BW+SY+SY+SY+zg :/ EW+TY+zW+TY+:/ UY+!y hl :( :( 1q VY+%{ VY+VY+VY+VY+hl :( GW+C~ WY+z9 XY+z9 XY+_G YY+_G IW+A9 %P _G YY+ZY+JW+e9 /b zU+Oz j .Oz zU+cM+Kw ;z.j .Oz j .B%.r8 /b r8 U9 AQ+AQ+%x %x %x %x %x MW+MW+MW+MW+%x %x %x %x B~ NW+NW+NW+B~ %7 Y7 Y7 E6 NW+NW+NW+B~ B~ %7 %7 NW+za za za za za za za kw z7 z7 z7 z7 z7 z7 z7 hj z7 zU+r8 zU+zU+r8 G*+zU+r8 Kw X7 wO+wO+X7 =J eM+kM+kM+kM+`Y+`Y+zO+zO+cF+cF+cF+cF+LQ+LQ+LQ+LQ+0F+LQ+aF+BO+AO+BO+aF+aF+zO+AO+cF+qF+DO+_A+ Z+IC+.Z++Z+@Z+@= #Z+$Z+pu.#Z+%Z+1R.%Z+%Z+GH+qf (=.&Z+ln X ,_ 8# 2% 9e.ZW+PU+*Z+WY.%u.=Z+#)+-Z+;Z+1w.XY.gX.43+}&+ +.#R.@R.w(.oU (}.6O PM ui.E1.Mh.:R :R k4.^X *4.B}.z].z].s(.F0.F0.iD EE Tq.iD 03+>Z+,Z+!s.#X+sK+*X+5q.#X+3r.#X+5q.#X+5q.@X+sK+(q.4q./X '*.i=.%B.j=.'T k=.K>.S*.'T j=.'T D}.|2.i=.5p.l&.4W @ .IU @ .@ .jZ 4W >}.4W @ .@ .jZ >}.% .8.._a.:a.q}+q}+|g.|g.n^+n^+'Z+f|.[^+k3.t}+t}+#R+hP.uS.`$+)Z+!Z+_O+oC ~Z+E2.{Z+Z_+ks.*m LO mv 70.4E `5 ', DR k@.vM.vM.)i.d7.d> d> 8g.O4 O4 c8 2x.c8 I$ F{ )_ x8 Y% Z z<.7}.x8 x8 Y% Z z<.7}.7}.8}.z<.1x.1x.1x.1x.1x.1x.1x.X[ h*.61.p.Ys.+s.e; h*.61.z<.7}.z<.8}.)> Yt.d> d7.d7.,v.,5 )_ x8 Y% Z Z z<.z<.7}.7}.7}.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.1x.Q5 zj+Q5 qh Zs.qh Zs.3n+bd.|3+bd.|3+bd.|3+bd.bd.h*.Y% Y% Y% Y% Y% Y% Y% 8}. Z Y% z<.7}.z<.Y% cN gd ]Z+!, ^Z+/Z+`D+6D+(Z+_Z+:Z+G.+m$++Pb+c[+(|+Q0+1V+1V+6Z+R.+36+7Z+8Z+XX.9Z+0Z+xO.sX+Yg ud Fi 7/+aZ+xg bZ+cZ+wX+yn+<4+<4+<9.<9.<9.<9.<9.<9.Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% Y% ", "dd dd dd dd dd dd dd 8c 9c 7c E7 dd o} f^ f^ M_ ,% ,% ^% ^% ,% ,% >% >% ,% U% 9& 9& U% ,% >% ,% ,% x5 x5 E7 E7 je ie le 9c L_ U% =+ X% V% A~+]N+dZ+eZ+fZ+2/.gZ+hZ+iZ+jZ+F&+kZ+~[+lZ+t)+!]+o0+by+~/+k)+$k+kR+P&+1N+}h+:h+'c+eB+mZ+82+92+mV+nZ+oZ+pZ+qZ+rZ+sZ+eN+tZ+uZ+vV+vZ+wZ+xZ+s/+pw+yZ+J6+zZ+BP+SX+SX+TG+AR+uk+~9+t]+CP+*!+CP+AZ+DP+BZ+DV+TX+dL+2E+]9+CZ+DZ+EZ+FZ+yk+)s+GZ+HZ+IZ+5J+JZ+KZ+=Y+LZ+MZ+NZ+OZ+PZ+QZ+RZ+SZ+TZ+UZ+VZ+VZ+WZ+XZ+YZ+ZZ+`Z+ `+.`++`+@`+#`+$`+%`+&`+*`+=`+-`+;`+>`+,`+'`+)`+3Y+!U+!`+~`+{`+]`+^`+O) ]@+p: l:.Q_ &- t).C& [! L) L) S& C& [! L) .^ 6[ [! [! L) 6[ L) [! .* * fd .* {@ k+ l& {@ {@ m@ U@ 2% 2% U@ m@ {@ {@ U@ .* .* U@ m@ m@ 2% U@ 2% .* .* .* .* 2% U@ @. /. [. [. /. +. [. T@ [. [. /. +. +. /. [. .* b/ U/ U/ z) _& g# s# Y@ e. ;- ;D tj kn &9.29./`+uv SC.]j Qh+(`+`L Vc.9A.3{+D%+uo.j!+,h.[i.dY+dY+V[._`+:`+<`+[`+}`+|`+1`+2`+3`+4`+[`.pO q;.5`+O2.%$.;S.lO Wm.lO lO Wm.4Q+>t.u_.P@.P@.P@.vd.Oq.>>.V).tY 7..+[.7..+[.M-.dZ f,.7..+[.+[.+[.+[.7..f,.G@.3..'>.'>.B_.3..,>.C_.B_.3..3..'>.3..B_.G@.o+.AU 6`+7`+8`+9`+0`+Y).u'.lI FE EE Tq.EE iD A .>y+PX iD EE EE iD iD EE }W kD EE }W }W }W EU }H oe.`` _).u].l+.b<.<..e3.z].Y|.4W+qY+qY+dP.SJ a`+BP {H b`+c`+};.d`+e`+~% MA.f`+=@+_.+6. g`+o+ _* b# '_ A% O( A% v$ O( cN 5 :] O) :] >5 I$ A% O; g7 ./ c/ c/ g( e/ e/ Vx.~w.!J.)' ~5 q@ h`+~W+i`+j`+k`+4G.;0 l`+X; `q+.r+gv+iv+0v+=K+=K+=K+Gx+1M+m`+^, JC+JC+^, Ox+-K+n`+o`+bp p`+sF+t8 q`+r`+GY+[K+Wy s`+t`+6u u`+v`+w`+x`+y`+z`+A`+B`+0; B`+Lj Lj Lj Lj Lj Lj Lj Lj Fd C`+D`+D`+E`+Oc 7^ O^ yb F`+Re yb Re F`+G`+xa R9 k5 k5 k5 k} k} Fh Fh Fh k< k} 2[ 2[ k5 k} k5 2[ 4^ H5 >2 zf zf H5 dp *M 4^ 4^ dp *M *M *M dp 6s q_ p0 H`+Pc I`+J`+q0 K`+Rd rt L`+o8 L`+o8 Rd %7 kw .5 za v ^c v za M`+za M`+za M`+z7 .5 z7 s/ AQ+/4 uS+%9 %9 ^( ^( ^( %9 %9 %9 %9 ^( ^( ^( ^( %{ VY+hl hl 1q 1q hl hl !y %{ %{ %{ VY+VY+hl MW+NW+NW+NW+NW+NW+E6 E6 E6 B~ B~ NW+E6 E6 w7 o0 o0 ~z E6 %7 %7 B~ B~ %7 Y7 Y7 Y7 Y7 !z b] 1r x7 y7 a6 KQ+KQ+KQ+KQ+2~ 2~ 2~ jF+jF+jF+jF+3K+3K+3K+3K+3K+jF+jF+jF+jF+3K+XW eM+IQ+KQ+fM+3K+iF+ev &s &s *s N`+aK+z^ DF+O`+P`+P`+Q`+Q`+Q`+R`+S`+T`+U`+V`+W`+k /. a# 5[ f!+x{ X`+yi.}w.Y`+Z`+``+65+_J._@.+U }&+ +.je.#R.s/.RU+JV.<2.6O Z|.R:.1p.1p.1r.R` R:.p/.E_.E_.s(.+1.!_.v>.k[.3p.Tq.}W EU }W b5+ @fD . @qY + @@ @. @YT oV # @$ @qY + @~r+sA+% @zv+[o.S*.sd.L'+Nk.L'+sd.i=. /.j=.sc.5p.sd.i=.`^.sd.iZ hZ D0.D0.{>.hZ C0.E0.{>.{>.hZ hZ gZ # .L@.L@.78.nz |g.|g.H{+{U.n^+@R+[^+f|.& @H7.t}+(7.* @= @kj - @; @> @I6 U`+yF+zm , @>~+@8+' @}V.^I ) @&h k@.#v 61.1x.,v.,v.d> )i.d> d> ,v. Z Z h*.e; h*.x8 KB KB ZY ZY ,v.,v.,v.O* KB KB ZY ,v.i~ i~ 8}.z<.z<.z<.z<.z<.z<.z<.z<.x8 Y% Z z<.7}.7}.z<.z<.1x.1x.1x.1x.1x.1x.1x.1x.p.Ys.+s.+s.61.61.z<.7}.z<.7}.)> i~ )i.d7.)i.i~ ZY z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.7}.7}.7}.z<.z<.z<.z<.z<.z<.z<.z<.7}.7}.7}.7}.7}.7}.7}. ! @OM+~U mu KP.:X+N}+~ @{ @iI+] @^ @/ @( @Zv+XM+_ @lI+6X+!P+lm+,P+er+[R+[R+]V+Ht+oI+oI+#w+}R+PK+uI+WA+WA+WA+WA+uI+(P+(P+Kl+Kl+Kl+PK+PK+R0+2Z+ub+lp+-m+si+Lb+~/+Rl+: @: @`(+Dg+<]+:6+[]+)k+Tn+rp+rp+np+xD+yD+&B+*B+< @% ,% U% 9& 9& U% ,% >% ^% ^% x5 >' E7 E7 ie ie 7c L_ L_ =+ N@ N( j3 c c @e! d @e @Im.f @g @] @)V+1~+![+U&+h @lD+XA+@/+gi+Xg+by+k)+ >+gD+Qi+1N+DX+:h+fB+eB+s6+lV+oB+>E++z#+D%+Z>+5Y +m.+m.C).'h.>h.6'.O&.>h.-.@jF.;.@>.@ M+,.@'.@).@!.@~.@[y.&=.{.@].@^.@5:.Wm.Wm.lO P.Wm.7U+L:.>t.u_.u_.u_.P@.2p.k].>>.S{.tY f,.tY f,.+[.SX +[.fZ M-.M-.M-.M-.fZ +[.H@.H@.,>.G@.y_.F@.A_.B_.B_.B_.B_.B_.B_.B_.G@.W{.ZJ RP /.@RP e~.Y).(.@(.@FE GE jD jD EU Tq.Av+>y+kD EE }W }W EE Tq.}W No.kD EE Tq.Tq.EE Tq.jD QM S` jc.:..73./Z od.Q:.r9.&_._2._.@:.@]:.<.@6D.a`+/R c+.[.@}.@|.@1.@2.@fL.1e 3.@4.@qz.5.@3 .a p+ _. (. w$ O( X[ cN h*.61.q} q} q} O( O( A% A% A% I$ t& T@ t& I$ O( !_ 1{ i*.xi el+i( i( oK+6.@wZ.7.@8.@88 Oa 9.@0.@>d 'G.>d &0 +e ^F+^F+Y0 *0 HF+=K+Hx+Ix+1M+Ix+Ix+a.@Ox+Ox+-K+JC+JC+-K+JC+TC+f' b.@$m.i9 4s ZH+lw }K+cv >y c.@d.@xe v`++S e.@f.@Hc B`+Fc 0; Jd g.@h.@i.@Hc i.@Jd j.@Jd j.@Hc 29 7~ Oc 4#+7^ 8^ yb xa F`+k.@F`+Re Re F`+F`+Re m{ k} Fh U: k< k< k< k< k< ;J U: Fh Fh k< }: k< Fh 4^ 4^ H5 4^ dp ze D/ J0 ze D/ J0 3q V: V: V: V: &x K0 v7 ud l.@&M m.@n.@p0 zN p0 zN p0 !y Pc %{ H( o.@-( -( p.@q.@q.@q.@-( -( -( -( -( -( -( o.@uS+uS+uS+uS+%9 ^( f3 sS+uS+uS+uS+%9 ^( f3 f3 f3 6s !y VY+hl hl VY+!y zN 6s 6s zN zN !y !y !y %{ o0 o0 w7 w7 E6 NW+NW+NW+B~ B~ NW+E6 w7 ~z ~z k .~z E6 B~ B~ E6 E6 B~ %7 %7 B~ E6 E6 NW+%7 b] Kw $7 IQ+g4 KQ+2~ fM+eM+eM+XW XW eM+eM+fM+2~ 2~ KQ+lk XH+gl lw lw g{ FQ+wO+wO+FQ+A~ XH+XH+XH+A~ A~ Sd By qx @I+r.@s.@cg t.@>I+sF+}^ CY+=I+3V C^ Am.N* /. t& j$ * 8' u.@v.@'0+lz w.@n^+~:.Fe+kh..T+x`.c^.VO+VO+tf.X:.nU U2.^Z ui./Z /Z QM QM '_.^d.4v.T,.V|.p/.v>.l4.B}.v>.;t.k[.}W EU jD EU !0+f5+(H -c.3W CE ~C QX 2W YS+. @CE oV ~>.x.@DE x.@~>.@ .:%.% .sd.7.../.7..sc.M-.sd.+[../.fZ m&.@[.>}.# . $.xE..$.hZ # .C0.xE.C0.{>.gZ L@.iZ L@.# .3;.nt+.T+.T+m(+H{+n^+b3+'Z+2w.'Z+y.@z.@(7.A.@'X+B.@C.@D.@R/ P= [O+E.@fl F.@G.@@8+' @H.@'O $_ :Q A8.)J.Ys.1x.1x.,v.,v.)i.)i.d> d> ,v. Z Z h*.e; h*.z<.,v.,v.,v.,v.,v.,v.,v.KB ZY ZY ,v.,v.i~ i~ Yt.z<.z<.z<.z<.z<.z<.z<.z<.Y% Z Z z<.7}.7}.7}.7}.1x.1x.1x.1x.1x.1x.1x.1x.0d.0d.90+90+ Yt.i~ 7}.z<.z<. Z Z Y% Y% Y% Z Z z<.7}.7}.8}.8}.z<.z<.z<.z<.z<.z<.z<.z<.8}.8}.8}.8}.8}.8}.8}.8}.]+kZ+Q.@hD+Et+br+)P+~G+:o+'P+]V+]V+]V+oI+oI+dr+dr+~P+PK+PK+uI+uI+uI+uI+uI+uI+Kl+Kl+Kl+Kl+PK+PK+PK+xp+Rn+R.@ m+jr+-m+si+Sl+Sl+ 6+ 6+R3+`(+di+_6+Lb+-m+Sn+uD+uD+rp+S.@T.@yD+xI+1G+SK+@N+AI+eX+U.@| @4Z+5Z+V.@1 @W.@X.@CD+~-+Y.@ny+Z.@ED+Jl+oy+=w+xp+Q0+uI+uI+uI+uI+1V+H:+d[+T;+`.@ +@:-+.+@++@@+@5Y.ud #+@$+@%+@&+@*+@=+@-+@wX+k*.k*.tJ tJ tJ tJ tJ tJ .Z Y% Y% Y% Y% Y% Y% Y% )_ )_ )_ )_ )_ )_ ", "dd dd dd dd dd dd dd g~ g~ g~ g~ g~ g~ g~ x5 M_ ,% U% 9& 9& U% ,% >% >% ,% U% 9& 9& U% ,% >% P ^% >' >' E7 7c ie ie g~ x5 x5 =+ N@ y* Z* ;+@>+@,+@'+@c&+)+@!+@~+@{+@]+@^+@(_+wp+Zg+9X+~/++_+/+@(+@Sl+Rl+$/+kR+Ui+Qi+1h+Yr+fw+_+@:+@:+@:+@rB+84+o|+<+@[+@}+@|+@1+@2+@3+@4+@5+@E6+Yd+1o+QG+'9+M~+zV+SX+6+@SG+aL+uk+uk+;s+1E+t]+CP+VG+AZ+DP+TX+7+@|E+1E+E|+]'+u @v @w @8+@9+@0+@,q+a+@b+@c+@d+@e+@f+@$H+g+@h+@i+@j+@Cm+k+@l+@m+@n+@o+@p+@q+@r+@)Y+s+@t+@u+@Q @v+@w+@x+@y+@w/+z+@A+@B+@C+@D+@E+@F+@G+@H+@I+@J+@K+@L+@Gh+M+@2r N+@~& 8e.{2 3b *- [! S& C& u& C& S& [! [! 6[ L) [! L) o^ -^ 6[ [! {@ U@ .* 2% U@ U@ .* fd U@ U@ m@ m@ m@ m@ U@ U@ m@ 2% * * 2% U@ U@ 2% U@ 2% * fd fd * 2% U@ /. /. /. [. h+ h+ h+ h+ h+ [. [. /. /. [. [. * b/ $9.Z^ Z^ L) L) B. n+ (. o. +6 @h.a).)q HZ 6.;: (s /p AJ+Z +X>+-^+O+@5Y 5Y +m.+m.C).'h.>h.B).(F KL.w9+_`+P+@Q+@R+@S+@T+@U+@V+@W+@X+@Y+@Z+@`+@r_. P.7U+7U+Wm.lO 7U+4Q+4Q+6..x1.u_.u_.6:.2p.k].u+.s'.W).W).W).W).7..fZ fZ M-.SX SX SX SX M-.fZ ,>.,>.'>.G@.y_.F@.A_.B_.'>.'>.'>.3..'>.'>.'>.!>.UP N .N .K {}.e~.(.@ @@mI CU lD iD iD iD A .Av+kD EE }W }W }W }W jD @@,@@'@@)@@cv+cv+=D+(=.!@@d,+pu.{A+=K+>t+,) ,) ,) ,) ~@@{@@]@@{@@^@@Lk n`+/@@(@@8u r.@5K+7K+gh p8 x7 !6 ib ib AQ+%9 ^( _@@^/ dQ 2o v, 29 :@@<@@76 Hf 76 Me 1o Gd [@@2) }@@Hf 76 1o w[ U} U} U} U} R9 1/ 1/ 1/ U} &7 &7 m{ m{ L^ mT.U: k_ 66 m_ m_ m_ 66 66 66 l_ k_ l_ m_ +r 66 k_ k} k} k} Fh U: }: ;J T[ }: ;J Fj Ej }t Dj }t G5 |t |t `A C/ p_ gw p_ F( ud j1 S9 o_ &M !8 n.@!8 dQ dQ dQ dQ x/ D( 2o 2o x/ x/ D( D( D( D( D( D( _@@_@@_/ _/ _@@^/ |@@// _/ _/ _/ _@@^/ ^/ |@@f3 n.@6s !y %{ %{ !y 6s n.@n.@n.@n.@6s 6s zN zN zN m.@1: q_ Pc K`+o8 rt 5s rt rt o8 K`+J`+Pc p0 q_ Pc K`+o8 o8 J`+J`+o8 5s rt K`+Pc p0 Pc K`+1@@b] A7 '6 `H.IQ+KQ+fM+XW XW eM+eM+eM+fM+2~ KQ+KQ+a6 y7 p8 tO+h4 h4 sO+${ 1r q8 q8 p8 p8 p8 q8 ${ 2@@3@@Mq 9A 4@@Mq }N.5@@6@@EO.Y} 7@@8@@7@@9@@[C+b& qj Y% O* ui Hs 0@@6g.wv+1.@a@@S#.q}+^:+Q%.3;.6#.VO+mU Q,.w(.98.88.(6.U2.d3.v>.le.Mh.b<.$[.kI ne.w6.VS VS F_./Z :R Q:.B}.le.k[.Tq.Tq.}W }W 93+f5+Pp..D.-c.FU CE .D.QX ZF YS+PX DE EE A .iD DE lD PX @ .Mo.4W Pp.SX *T +[..D.M-..D.SX FU 4W kD eZ C0.A}.e+.,s.3q.4p.O-.^H O-.3q.4p.+$.-5.+$.FA 3;.}g.Fe+k^+_@.5.+n^+f|.[^+[^+b@@c@@t}+]0+d@@xH.e@@f@@VK.g@@h@@i@@Ba Da j@@sw k@@H.@ d> ,v. Z `Q 51.dT 51.Yt.yj+yj+yj+d> d> d> d> d> d> d> d> yj+yj+yj+i~ z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.7}.8}.8}.1x.1x.1x.1x.1x.1x.1x.1x.,8+0d.0d.90+p.>p. i~ z<.z<. Z Y% x8 x8 )_ Y% Z Z z<.7}.7}.8}.8}.z<.z<.z<.z<.z<.z<.z<.z<.8}.8}.8}.8}.8}.8}.8}.8}.7}.1x.z<.61. Z h*.x8 cN Z 61. Z 61. Z 61. Z Z z<.z<.z<.z<.z<.z<.z<.z<.7}.)_ F{ z<.Y% I$ 8}.ph.m@@p>.n@@Hy o@@p@@q@@r@@Dl+% ,% U% 9& 9& U% ,% >% P =+ U% >' 7c 7c le le dd O6 ^% =+ N@ y* 0* k^ QJ.V@@W@@2V./~+X@@Y@@Z@@@f+ai+Qn+;2+nD+rD+>k+>k+(+@ir+Sl+Rl+8~+%/+Si+Ui+3h+3h+gw+gw+Ky+Oy+Oy+tB+!c+'u+`@@ #@.#@+#@@#@##@a2+$#@%#@n|+3a+1o+&#@:c+*#@zV+AV+AV+L6+v]+L~+K6+;s+1E+E|+E|+[J+AZ+AZ+dL+;s+;s+;s+E|+]'+=#@-#@;#@>#@,#@ah++j+'#@<9+)#@!#@~#@{#@{q+d+@]#@^#@/#@(#@do+_#@:#@<#@<#@[#@}#@|#@1#@2#@t+@3#@4#@5#@w+@6#@7#@I[+8#@9#@0#@a#@b#@c#@d#@e#@G+@f#@*S+%*+g#@h#@MM.i#@=K.j#@|@ OU+k#@m3 -^ L) C& u& C& [! [! S& L) [! [! L) -^ -^ 6[ [! i> {@ U@ U@ U@ U@ * 5[ 2% U@ m@ {@ {@ m@ U@ 2% m@ 2% fd * 2% U@ 2% .* U@ 2% .* .* .* .* 2% U@ /. +. @. +. [. h+ h+ /. [. [. /. +. +. /. [. .* b/ l#@b/ Z^ 6[ 6[ m@ @. '. i. (+ ;; `c b7 T+.zw _$.m#@%E..X.i!+z'+)$.n#@SZ SZ D).D)..m.8'.cQ.7'.~,.j!+<7+pt.xT YR ]S+bN.o#@p#@q#@r#@T5 s#@t#@Jq.1`.5:.Wm.7U+7U+Wm.4Q+L:.4Q+6..x1.x1.x1.6:.2p.k].k].s'.S{.W).S{.W).f,.fZ +[.+[.fZ M-.M-.fZ +[.+[.y_.A_.B_.B_.G@.B_.H@.r(.YP H@.H@.,>.H@.YP C_.6^.5H dL eL gO rI u'.9`+9`+7|.d~.*T &T ZF PX Et.>y+lD EE }W }W }W }W No.}H Tq.Tq.Tq.iD PX PX lD F0.t(.u(.%$+%$+W:.v(.TS E<+mz+2^+fI fI u#@xd.v#@eb.Xp.w#@x#@y#@3r.z#@A#@T^./,+Sj.MJ IM B#@)i.r2.0+ F= p$ g$ Y :+ <] !_ !_ / / / [| [| !_ !_ !_ O( <] O; j; gd d) V/ Z_ Qy.Q2 2]./5 C#@D#@E#@F#@l-.G#@H#@!F I#@bA+*D+-D+cv+GH+)G.J#@K#@$Z+K#@9A+}t+>t+]@@~@@]@@~@@J' Lk L#@^@@/@@f' (@@oF+*I+M#@E3 30 Qc ZY+B~ E6 T9 T9 %x H( f3 f3 ^/ |@@x/ C( v) v, N#@1o }@@Y' Y' u' }@@u' +s 1' 1' +s u' T[ ep O#@eF.1/ M^ M^ 1/ 1/ R9 m{ L^ L^ &7 &7 L^ }i }: 66 +r P#@P#@Cd +r m_ +r m_ m_ +r s s Cd m_ }: }: ;J T[ Fj Ej }t }t }t }t Dj 4m 4m 4m Dj }t 1t 1t 3u 1t 3u 1t 3u 1t C/ n_ F( 86 j1 Gi j1 Gi Q#@Q#@R#@R#@R#@Q#@]| L| Q#@Q#@Q#@Q#@]| ]| ]| L| x/ dQ |@@^/ ^/ |@@// dQ ^/ ^/ ^/ |@@|@@|@@|@@// !8 6s 6s 6s 6s n.@&M S9 &M &M n.@n.@6s 6s 6s zN l.@m.@1: p0 J`+K`+rt rt o8 K`+K`+J`+Pc p0 p0 p0 Pc K`+K`+J`+p0 p0 J`+rt K`+Pc q_ q_ p0 J`+rt Y7 AU+S#@T#@'6 `H.IQ+KQ+KQ+fM+fM+fM+fM+2~ 2~ 2~ GS+b] r0 U#@s0 U#@B9 '[ 1@@(z 1@@V#@B9 _z 2@@_z z-.W#@X#@Y#@Z#@X#@`#@X#@ $@.$@+$@@$@#$@$$@%$@W$.&$@b) I$ ,v.5A.*$@J> =$@-$@1.@=u.Ck..T+e,.j].D0.{` y@.bz.tA.s/.98..R+(6.pl+l4.Q:.Mh.Mh.b<.$[.kI ne.od.F_.T:.F_.FP FP od.l4.le.k[.EE EE Tq.Tq.93+f5+Mo.FU &T Pp.FU .D..D.Pp.PX lD kD EE Tq.Tq.Tq.Tq.lD lD kD kD lD Mo.ZF FU GU FU ZF a<.Mo.kD Tq.No.,s.]D+]D+zv+3q.FA 3q.)u.3q.FA 4p.+$.-5.+$.FA '0.cg+DA 65+k^+5.+{U.f|.[^+;$@;$@>$@A.@4I+* @,$@'$@ %+)$@v).!$@ d> ,v. Z `Q 51.dT 51.i~ yj+d> d> d> d> d> d> yj+yj+yj+yj+yj+yj+yj+yj+,v.z<.z<.z<.z<.z<.z<.z<.7}.z<.z<.z<.z<.7}.8}.Rx.1x.1x.1x.1x.1x.1x.1x.1x.90+90+90+p.>p..F.90+k+>k++_+&k+Rl+~/+Lb+,k+vp+3$@3$@tD+}P+3T+B@@4$@1G+yI+{-+3G+} @U.@4Z+5$@F@@6$@6$@7$@8$@9$@K@@L@@0$@a$@FD+(P+}T+_T+_T+_T+uI+uI+(T+b$@Q0+(|+V&+c$@F&+d$@e$@f$@sL.yL./~.,[ Bh Q@@S@@g$@h$@i$@j$@k$@,!.,!.Zn Zn Zn Zn Zn tJ .Z Y% Y% Y% Y% Y% Y% Y% x8 x8 x8 x8 x8 x8 ", "dd dd dd dd dd dd dd o} kC kC dd g~ E7 7c L_ L_ U% ^% ^% ^% ^% U% 9& >% ,% U% 9& 9& U% ,% >% =+ =+ U% L_ 7c 9c 9c 9c E7 >' U% =+ N@ 9* w< 9_+,^ l$@m$@+#.n$@o$@p$@;]+d)+q$@G:+Nb+dy+/+@ir+Xl+>k+>k++_+@_+$/+~]+O&+Si+Xp+Xp+)u+)u+My+r$@r$@s$@,c+t$@kf+u$@v$@w$@x$@y$@z$@A6+A$@OG+5a+B$@C$@D$@E$@r @_J+TG+AR+BV+r/+L~+E|+1E+;s+;s+dL+AZ+VG+q @F$@5+@o4+~9+]'+=#@JG+G$@H$@I$@J$@K$@Ak+)q+L$@M$@N$@O$@P$@Q$@R$@S$@T$@U$@V$@W$@X$@Y$@Y$@Z$@`$@r+@ %@.%@+%@@%@#%@$%@x+@%%@&%@*%@=%@-%@-%@;%@>%@,%@k/+p +2++'%@)%@7I.sO.!%@~%@i#@bj T[ {%@Kl pK+]%@_y -^ S& C& S& [! S& C& [! S& [! 6[ -^ .^ 6[ [! k+ {@ U@ U@ {@ {@ U@ .* 2% U@ m@ {@ {@ m@ U@ 2% m@ .* fd fd .* U@ 2% .* 2% 2% U@ m@ m@ U@ 2% 2% /. :. <. :. 5. u$ 5. (. l. l. (. :. :. (. l. 8# u% w% u% u% Y_ 2% j+ +. v+ 7. r# m6 L- ^%@/%@(%@<{+bo _%@:%@IM+U2+Y*+[}+SZ SZ bz+D)..m.8'.cQ.8'.=;+j!+[i.6'.<%@6{+[%@}%@|%@1%@2%@3%@|e s#@t#@4%@Ma.oQ. P.Wm.lO Wm.7U+L:.7U+L:.>t.>t.>t.u_.v_.w_.k].s'.S{.W).S{.W).f,.fZ 7..+[.fZ fZ fZ fZ +[.7..cZ A_.3..,>.,>.H@.C_.5..C_.YP H@.H@.YP C_.D_.P:.6R SP sI @T 5H Ym.{}.qI hX.|&+GU &T Pp.Mo.Et.{X |W Et.Av+>y+>y+>y+_H hD Av+>y+>y+Av+Et.DE A .2q.s/.o!.o!.o!.o!.UJ+KV.mU @R.uA.FK.SS CP .=.!:.z0.gD 5%@6%@7%@8%@9%@0%@a%@/,+)c.+_.#u.O0.'M._*.]$@-. A p$ d$ '+ <] @A.b%@ / / / [| [| !_ !_ !_ [| <] O; j; gd d) V/ Z_ c%@'^ d%@$v+e%@f%@g%@h%@~g i%@>0 j%@I#@j%@-D+{ .qf 1R.^A+@Z+#Z+$Z+$Z+(F+(t+k%@l%@m%@n%@o%@p%@q%@r%@s%@r/ t%@u%@v%@w%@-y /b _G x%@y%@jw ya |7 |7 td z%@/( 0n x/ D( w/ Ch 86 U: U: ;J }t .s .s 4m Ej }t .s 4q 4q .s }t Ej A%@ep O#@eF.1/ 1/ eF.eF.1/ R9 U} U} M^ M^ R9 6Y.>[ Pg <7 Mz Mz >J <7 Pg >J <7 >J yy Qg Ne yy >J B6 )8 ro Ok ZZ ZZ ZZ ZZ tK tK tK tK ZZ ro )8 }t B%@u' 1t +s Ii 1' C%@`, D%@Y' n_ 76 86 1o 86 76 ~p E%@h.@Jd Jd Jd h.@Hd Hc Hc Jd Jd h.@h.@Hd eQ %; w/ D( dQ // dQ x/ D( D( D( D( x/ x/ x/ dQ dQ G2 !8 o_ F%@F%@F%@F%@F%@o_ o_ !8 !8 G2 G2 G2 zN ~V.~V.Qd Qd Qd W;.W;.W;.Qd Qd Qd Qd ~V.~V.~V.~V.Qd W;.W;.~V./z /z Qd S&.W;.Qd ~V.~V.Qd S&.3A rt z7 4e n0 n0 A7 .x 3~ 3~ a6 a6 a6 GS+GS+GS+GS+FQ+r0 G%@z-.U#@z-.G%@H%@'[ :z '[ I%@G%@z-._z J%@K%@L%@M%@M%@N%@O%@P%@Q%@R%@S%@T%@U%@V%@W%@X%@Y%@Z%@G. -) Yt.7P.!c.`%@ &@xi..&@x@.+&@nt+N@.8..nD iI gI @R.m^+RU+RU+RU+r9.}%.9h.k[.le.le.pI pI DU s9.v>.a3.a3.U++v>./Z :R B}.Mh.k[.Tq.EE Tq.}W !0+b5+Cg.(X.k=+(X.k=+N#+N#+T++Dg.Dg.Dg.Dg.Dg.Cg. j.yf.b5+b5+b5+b5+b5+b5+93+93+d5+03+93+!0+93+b5+!0+EU ,s.^H zv+X+$&@;$@%&@4I+'X+'X+&&@'$@*&@=&@|h -&@X! 4S+~i.Bx O3.;&@>&@,&@-I LK F5+o`. Z 2x.FR sM `Y gA )i.d> d> d> 8S.`Q `Q 51.dT 51.ZY )i.)i.)i.d> d> d> d> yj+yj+yj+yj+yj+yj+yj+yj+,v.,v.,v.,v.,v.,v.,v.,v.Yt.i~ ,v.ZY ,v.i~ )> Ov+1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.1x.61.61.61.Ys.>p..F.@A.0d.90+7}.z<.z<.z<.,v.KB [].d7.oA+jy.,v.z<.z<.z<.z<. Z Z Z 7}.7}.7}.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.,v.,v.,v.i~ i~ i~ i~ Yt.ZY ZY ZY ZY ZY ZY ZY ZY Y% Y% Y% Y% Y% Y% Y% Y% Z 8}.z<.)_ Rx.:e.'&@)&@%H w2.!&@~&@iB.TW Wj+{&@]&@^&@/&@U(+#f+(&@_&@T&+B$+N&+O&+nk+'P+5X+5X+5X+[R+[R+Ht+gp++w+WA+uI+1V+4X+y@@z@@FD+FD+FD+fD+fD+FD+FD+|R+|R+:&@:&@<&@#B+Xn+[&@+m+[w+&m+}&@|&@1&@2&@3&@/+@ir+Sl+Sl+Lb+,k+vp+4&@3$@tD+}P+3T+3T+4$@1G+' 6c 9& ^% ,% ,% ^% 9& Q% >% ,% U% 9& 9& U% ,% >% t t ,+ >+ 7c 9c 9c vk vk vk S% -+ h@ N( h^ W^ n&@o&@#} p&@q&@r&@s&@( @V;+(f+^_+t&@u&@/+@v&@ir+~/+Rl+&k+Fg+$/+&-+.>+Y5+w&@x&@y&@iw+z&@A&@A&@B&@Sd+aB+C&@Ur+D&@E&@F&@F&@G&@Vr+8h+8h+_c+B$@C$@:c+}a+L6+UG+pw+S~+H&@q/+kN+t]+1E+|E+|E+qw+AZ+2E+K~+*!+F$@~9+~9+{'+=#@I&@J&@K&@L&@M&@N&@O&@_9+_9+P&@Q&@R&@S&@T&@U&@8u+V&@JT+W&@X&@Y&@Z&@`&@ *@.*@+*@@*@#*@$*@%*@&*@%%@H[+w|+x|+**@=*@-*@;u+;*@>*@,*@'*@)*@!*@L/+|F.S]+wO.YD.Fh+~*@{*@]*@^*@/*@e(.D& YY O) {+ C. l& B. l& 5# %. %. ^. !. a# a# 8# B. h. ]+ j+ ]+ h. k+ {@ m@ 2% U@ m@ {@ {@ m@ U@ 2% U@ -^ fd fd .* 2% 2% .* .* U@ m@ l& l& m@ U@ .# +. _. ` _. /. u$ /. _. +. (. @. _. .. :. +. !. =] M2 =] u% o3 Y_ +# +# +% t+ q. N$ `% m; 8*.N3..P+$#.(*@6t _*@:*@C)..m.D).bz+bz+bz+D).D).D).>~.-^+-^+j!+[i.;h.jF.<*@aN.:V.[*@}*@|*@+3+1*@g9.2*@6U+nQ.`O.[l.[l.8`.L#+XF 8`.'(.ak.6..6..NT.<%.0n.|o.Dl.C .W).C .W).uY fZ 9..M-.8..SX v+.M-.8..fZ +[.3..YP C_.YP H@.YP YP C_.YP H@.H@.YP C_.D_.Ua.6R TP Eg.WJ ji.7R 7R 1H lD kD kD |W 1E.1E.Et.>y+{>.,}..$.3p..$.3p.iI QM .$.3p.2q.3p.Av+}W $G IK.ke.q/.r$.x(.tf.Q,.KV.#R.fI cg+gI DA Vj.Vj.3*@/r+On.4*@5*@f5+6*@A}.7*@h(.8*@{H 9*@PF (@+0*@0*@7X.`B.X-.hd _{ D= u+ _. <] / / / gd !O ./ H' c' ,L e/ g( 1n+h( h( xM a*@>)+b*@c*@&~+d*@e*@f*@~8+Nb ~g ,@@_^ g*@h*@wj i*@j*@:=.k*@:=.FH.)G.k*@GC+L#@N/ l*@D_ r%@m*@lF+.> r/ n*@o*@p*@q*@r*@q*@)6 MW+%{ 6s S9 K0 gw gw gw F( gw Hi s*@1o 76 u' 1' l_ k_ j_ +r yy t*@A6 t*@<7 (g 1u t*@Ne u*@Mz <7 B6 B6 Pk [7 [7 Pk Pk B6 B6 Pk $9 [7 B6 )8 B6 [7 56 P3 ;[ k8 Tj 2' h< Gn il k8 il wo jl hp If 1u Ld Qg 7V A6 X so ET A6 %S 5 s6 5A.U*@i(+6,+V*@wi.5D.W*@:r.4p.O@.YS+X*@[g.%_..R+98.U2.RJ 6O ^Z {` b3.l4.r9.B}.eZ eZ 3p.Q:.l4.S,.ke.03.!_.E1.:R v>.QM le.}W Tq.}W 1H J` Dg.|b+Dg.f5+`j.83+2&+i5+k=+Y*@zg.J` `j.f5+`j.93+93+!0+kD 83+Mo.83+iD 05+No. &+kD qL EU !0+lD b5+Et.E0.vl.O-.3q.O-.5v.)u.]>.'0.'0.3;.3;.3;.3;.3;.Z..py.5.+5.+5.+*)+t/.Z*@`*@ =@.=@+=@@=@%R+8J.[D+K= (] #=@O5 $=@%=@&=@Zz *=@j6 VG c- ==@-=@;=@>=@o`. Z c8 FR s6 s6 w8.i~ Yt.d> ,v.8S.`Q `Q 51.51.51.Y% KB KB ZY ZY ,v.,v.,v.oA+oA+oA+oA+yj+yj+yj+yj+,v.,v.,v.,v.,v.,v.,v.,v.Yt.i~ ,v. Z z<.7}.Rx.Ov+z<.1x.1x.1x.1x.1x.1x.1x.61.61.61.61.61.61.61.61.1x.]+:=@f)+<=@n:+N,+]G+mI+nk+Z5+'P+5X+5X+:o+[R+er+~G+cr+A$+WA+WA+y@@z@@fD+FD+|R+FD+QK+vI+[=@Jl+Jl+tr+ED+}=@}=@|=@!w+qp+1=@rp+mp+ L+`K+2=@3=@4=@5=@oD+qD+Nl+rD+rD+N0+/_+c[+c[+Pb+&>+}P+[P+h~+zD+6=@=>+7=@8=@8=@4G+R,+G@@6&@6&@9=@9=@0=@a=@b=@b&@Kl+Kl+}T+}T+:V+:V+:V+uI+!B+uI+Q0+Q0+(|+V&+c$@k:+c=@d=@g&@e=@HR.^N.f=@0j g=@D| h=@i=@j=@k=@-+@wq j*.j*.=8.=8.=8.=8.Js .Z Y% Y% Y% Y% Y% Y% Y% Z Z Z Z Z Z ", "g~ g~ g~ g~ g~ g~ g~ 9c dd o} kC 7c 0' 8c >' M_ '$ '$ '$ >% ,% ^% U% U% U% U% U% U% U% U% C |# K I# ]= 5c 7c uk Tl Pl *=.2c 8& A& tp.@@ Kp+cs.l=@m=@$X.n=@o=@p=@q=@r=@`g+s=@5=@t=@t=@u=@v=@mD+XA+$/+~]+w=@w=@*-+--+x=@X5+Yp+!u+9m+y=@z=@A=@B$@B=@-@,-@'-@)-@ZI+K&+!-@!-@~-@{-@]-@^-@/-@(-@_-@:-@<-@[-@w@+PP.}-@n8 |-@7V ]o 1-@%& 2-@3-@ct q w$ Z% X% ^+ 3. s# u$ i; N; k; ct =. F. G. G. H. j+ +# +# {+ {+ {@ {@ [! [! [! [! o^ =^ o^ o^ o^ o^ o^ o^ m@ 2% .# .# j+ ]+ j+ .# .# [. .# [. .# [. .# [. .# [. .# [. .# [. .# .* p: .^ o^ L) m@ m@ +# +# j+ G. G. r$ b& 3% r. q# 70.^R.4-@5-@6-@l0.7-@8-@#g.`R.9-@O+@<}+ZR.Sd.bQ.-E.-E.`L H%+@5+OO.0-@a-@b-@c-@d-@e-@KJ+f-@g-@h-@i-@K0.j-@k-@%5.>,+l-@m-@Hu.vs.j/.t_.__./s.6r.|a.9q.0p.sD +k.n(+Th.1%.tc.rY a..3W 1W ~C (H ~C CE Pp.FU FU FU ZF Mo.kD EE lD lD lD lD kD kD iD 7R 1H 1H 1H pI pI EU }W }W DE ~>.~>.RX oV RX sA+zv+U*.q6..].qH./-.3)./-.]%.l&.Y#.v>.V` 9h.;5.9h.;t.E1.p/.U2.U2.U2.ke.nU nU 5O :2.Dk.EA ZS+wz. T+Cv+,C.xj.Mh.1r.ri.}%.^.@n-@Y..nU vg.E<+vg.TS E<+o-@p-@8S q-@r-@x+ JC.s-@M; C@ i; t-@u-@6B.Gs+$6 V; ~O.v-@w-@A3+x-@y-@z-@A-@B-@C-@D-@E-@F-@FU+G-@Q{+H-@HH+|t+n-.2t+n-.}t+MQ+}t+(t+fv+Tx+fv+fv+I-@]l+J-@K-@V> oQ+L-@qQ+M-@wQ+oO+N-@ys sq O-@IC }> P-@w) Q-@T: <: j_ R-@P3 Gn P3 Gn Gn Gn Jc Jc w' w' Jc Jc v[ k8 T} .' .r s7 .r wo S-@_g [} 2' v[ Sj il Jf ;[ h< h< h< h< ;[ i< Ti Ti Ti h< h< ;[ v[ v[ (1 T-@]1 R} o| U-@o| V-@^1 Sr /1 ,8 3' ZA 1k ZA G> G~ G> G~ G> G~ G> Lc 1k Lc G> W-@T} P9 X-@~3 Y-@Z-@`-@ ;@f8 Rx ~3 -> -> -> -> SH SH SH SH x) .;@`' 3) qa Mg k_ k_ k_ k< }: }: ;J T[ T[ T[ F%@0n 0n 0j ZW E( {4 {4 4u Fv /( /( G( ZW Fv /( tS+tS+0n /( Fv G( ZW ZW ZW ZW G( G( Fv 0j 0j 0j +;@J5 hj ^c hj J5 RM.@;@ZP.RM.6m @;@6m RM.+;@Lw !8 dp !8 !8 n.@n.@n.@bv )z ~z E6 NW+ B #;@ B 40 z*@z*@$;@K8 %;@40 40 40 FQ+sO+I( I( vS+vS+&;@*;@=;@-;@;;@T&.C*@>;@,;@z[ ';@);@D*@!;@~;@YH _d {;@];@^;@XZ./;@ # 'L.z8.(;@_;@:;@=j J& i$ <;@[;@dt h> };@|;@{4.1;@ =@2;@3;@^U.sH.Q%.8..1W 03+qL }H Mh.w6.FP Q:.xE.^Z d3.l=.Y..t(.l^+.R+7#.7#.l^+mz+TS V:.m^+pl+_2.PM w6.w6.Mh.le.1H |H pI ji.yg.=P.EU No.{X iD Et.EU >y+kD Av+iD Et.Tq.$G jD A .|W (H hZ DE C0.1E.gZ ~>.E0._H xE.Et. $.Av+.$.Et.{>.C0.b3.d3.b3.l=.#{.l=.B7+)*.#{.x6.x6.x6.22.h3.h3.22.W%.`T py.@&@#&@n}+4;@5;@6;@7;@7) g{.qS f# s& 58 8;@9;@<^ 0;@a;@H^+9>.+~.r. e= B8.AX.]Z.b;@c;@z<.8}.Rx.Rx.7}.z<.7}.Rx.ZY Z z<.z<.7}.7}.7}.p.bd.j; !J.@6 AM {U M9.bg.45.%B d;@e;@f;@g;@h;@i;@j;@lT+k;@U.+Y}+'-+)]+kp+xb+8~+l;@km+km+km+km+'P+'P+mI+,P+!G+gp+cr+A$+A$+(T+Kl+z@@z@@5T+QK+QK+g~+g~+Qt+dp+S0+m;@Hl+Hl+Hl+.N+.N+n;@xI+%B+S.@wD+#B+>w+#k+o;@p;@|G+[T+_V+Mn+Mn+q;@(T+|$@VA+*4+wI+|=@0&@ny+r;@s;@t;@u;@u;@v;@kX+kX+w;@DD+x;@0G+*>+my+my+Rt+wI+@k+=w+R0+Q0+;2+O0+qy+WA+y;@z@@fD+fD+5T+d[+_/+z;@A;@.*+B;@< +&*+C;@_a ~y 3q D;@E;@F;@o! G;@Re+eb+00+u=+6=+c8 s6 O4 @$+7}.z<.Y% )_ )_ )_ x8 Y% Z Z Z Y% x8 x8 ", "g~ g~ g~ g~ g~ g~ g~ E7 dd kC kC g~ 7c 7c L_ O6 ,% >% >% >% ,% ^% U% U% U% U% U% U% U% U% C R+ 2# !k.]= 5c 7c tk Rl 9%.H;@Y6._] 7& )* tp.:2+I;@J;@K;@L;@M;@N;@O;@P;@$>+e~+Nl+u&@Q;@Q;@^G+)B+Mb+cy+8~+~]+/V+/V+R;@+>+S;@T;@&E+#s+U;@&s+L3+V;@@F$@D|+.>@xZ+kN+2E+h2+~'+t @CZ++>@vf+t]+E|+;s+;s+1E+CP+kN+g2+@>@#>@$>@%>@&>@*>@=>@->@;>@>>@,>@'>@R=@)>@!>@~>@{>@]>@^>@/>@(>@_>@:>@<>@[>@}>@|>@1>@2>@3>@4>@5>@6>@7>@8>@9>@0>@&s+U;@,u+a>@b>@Op+c>@d>@e>@f>@g>@h>@i>@j>@k>@l>@m>@xb f] FO.n>@o>@lE.e# -. :. l. &' /= :+ e. +6 f, ]; z% q. 5$ [$ [$ H. H. +# +# {+ {+ {@ {@ [! [! [! [! =^ =^ =^ =^ o^ o^ o^ o^ m@ 2% .# .# j+ ]+ H. $& .# .# .# .# .# .# .# .# .# .# .# .# .# .# .# .* 5[ p: -^ o^ U@ 2% .# m* .# j+ H. 9# #& e> [$ X^ p>@q>@r>@s>@t>@u>@v>@w>@x>@y>@z>@TE+C%+A>@X +C++,(+2Y E%+Z>+V +U +B>@C>@D>@E>@F>@G>@H>@I>@J>@K>@L>@G'+`C.M>@w .(;+N>@.b+m-@O>@Fp.P>@__./s.5y.#G.9q.n[.2:.:-.n(+o&.1%.j].M@.&5.3W 2W + @+ @Q>@R>@Pp.Pp.ZF ZF a<.PX kD iD iD iD iD EE EE EE Tq.Tq.GE GE EE Tq.EE EE Et.Et.^D+S>@-C ]Z T>@rA+rA+^H j5.$0.$0.U>@Sq.6p.6p.VN.m4.3)./%.^%.X#.Y#.5..5..s(.v>.E1.E1.r9.d3.DP :2.DP DP d+.}g.{o.UU+{o.mS.Th.sc../.N-.n5.'x.v>.!_.!_.s(.E1./Z /Z Q:.z].W*.K_.4(+V>@W>@n{+J> }+ X>@-1 t9++0 g, Y>@mG.Z>@/~ `>@ ,@.,@+,@@,@#,@$,@%,@&,@*,@Hz+E-@=,@LS+KS+-,@CU+GF+HH+xj [t+$D+GO+#D+ev+Tx+]l+|A+|A+m! YC+;m f: ;,@>,@,,@',@),@5V !,@~,@{,@$s ],@$s {Y.^,@.q Lg e5 Vr `3 #, *! Q1 Q1 Q1 Q1 Q1 (1 (1 ]1 ]1 ]1 ]1 o| o| F> N1 ^1 ^1 /1 /1 /1 ^1 N1 F> o| ]1 ]1 S-@T} [} p| p| p| p| [} v[ p| p| p| [} [} T} T} 7, 7, +' +' /,@(,@(,@VH _,@_,@_,@fw fw y, y, y, ZA ZA va va :,@:,@:,@<,@ZA va va va ,8 V-@U-@]1 @E [,@},@|,@1,@2,@1,@3,@~3 ~3 r) r) r) r) 3) 3) Jc k8 _g k8 Jc R-@56 56 >[ >[ M^ 1/ 1/ eF.eF.9Y }7 0j /( 0j 4u E( {4 E( 4u G( Fv G( _( _( ZW 0j 0n /( 0j Fv G( ZW 4u 4u _( _( 4u 4u ZW ZW G( G( @5 9O.06 4,@4,@9O.6L..I.5,@L5 6L.bn 6L.L5 9O.~8 G2 2[ G2 G2 UY+UY+zN Lw k .YZ za za 60 w9 60 6,@2a 2a }a $;@dg B%./b /b Am Am qo &;@&;@qo ka 7,@8,@Fg 9,@0,@a,@b,@3A.c,@d,@e,@f,@g,@h,@^K i,@j,@*x+]; d- =F+k,@.O #b.l,@m,@5g+r# o+ '' n,@@b.Y% U@.2b+o,@}@.G .>X+z6.E .S%.Q%.gZ ~>.b5+!0+qL 05+1H <:.QM 3p.9h.k[.d3.l=.Z..88.X:.fx.9#._@.x`.je.mz+m^+88.]` b3.d3.B}.B}.jZ jZ pe.pe. G G f1+Jk.Mo.DE ~>.YS+|W A .Av+DE Av+Et.DE A .>y+Av+DE YS+E0.2q.iI x7.xE..$.2q.HK.-t.x7.E0.D0.E0.E0.D0.C0.{` b3.}%.EP #{.V*.#{.{7.22.22.ql+ql+ql+s5.p,@q~.32.g;.py.F1.@&@$&@n}+.=@q,@r,@V!+15+=8.M> N@ o$ s,@t,@u,@v,@w,@H^+U* S+ e= a' L> Ka ]Y x,@X0.8S.ZY 7}.Rx.8}.z<. Z z<.8}. Z Z z<.z<.7}.7}.7}.90+0d.@A.@A.@A.0d.0d.Rx.Rx.8}.8}.Yt.Yt.oA+oA+oA+oA+oA+oA+yj+yj+i~ i~ z<.z<.7}.Rx.,8+0d.Ys.+s.Ys..F.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.oA+oA+oA+oA+Yt.Yt.8}.8}.7}.7}.p.Ys.+s.e; e; +s.Ys.>p.#a+wY+bE cT / bd.Q5 ~w.Z_.Y>@V0.y,@z,@A,@u{.+;B+:w+:w+oy+oy+=w+xp+/|+G:+O0+u)+WA+y;@z@@fD+QK+2V+R.+U,@V,@+o+W,@X,@XJ.8F.AL.10 :N.:1 Y,@Z,@`,@!N+ '@$V+xi f>.+s.e; )_ F{ O* KB z<. Z Y% )_ )_ x8 Y% Z Z Z Z Y% x8 x8 ", "g~ g~ g~ g~ g~ g~ g~ kC dd g~ dd kC kC g~ L_ L_ U% ^% ,% ,% ,% ^% U% U% U% U% U% U% U% U% C 3$ 3$ pJ ]= 5c E7 sk Pl hY.P7.Y6.hf 8& )* N+ 9v..'@+'@@'@#'@$'@%'@&'@*'@T&+!]+#/+='@_V+_V+{G+-'@nD+cy+8~+$/+;'@;'@58+R;@F,@'P+tG+>'@,'@&s+L3+*s+Xd+=s+''@B$@^c+X;@X;@T8+{c+)'@Rd+Vd+C$@!'@!'@sk+~'@{'@G6+j4+F6+]'@^'@;<+/'@s/+r/+s/+('@K=@_'@:'@CP+F$@5+@5+@5+@D[+w]+hN+;<+=<+<'@9L+['@]J+}'@|'@1'@2'@;>@3'@4'@5'@`Z+6'@7'@8'@9'@0'@a'@b'@c'@d'@e'@f'@g'@h'@3>@i'@Rp+j'@Ur+Ur+t$@dw+k'@U1+_u+l'@m'@`j+hk+n'@o'@p'@q'@G~+r'@G)+s'@t'@_a W4+u'@v'@w'@x'@o* y'@/w.h+ .. L$ L$ 4. :. -. ct +6 r# & q. 5$ [$ [$ H. H. +# +# ]+ ]+ m@ m@ L) L) L) L) =^ =^ =^ =^ o^ o^ o^ o^ m@ 2% .# .# j+ ]+ H. $& .# .# .# .# .# .# .# .# +# +# +# +# +# +# +# 2% ui og p: .^ .* .* m* m* O) .# 9# $& *, #& a- s. _Q mJ 'O z'@A'@B'@C'@&B D'@E'@F'@so.U*+~S+[U+27+-E.Vv.E%+Z>+V +17+S +C>@G'@H'@I'@OW.J'@K'@L'@M'@N'@@S'@O>@2^.}#.0~.__.T'@4y.*x.0p.rV dg+0,+#j.Th.tc.n&.a..$ .-c.1W CE (H >Z+>Z+ZF a<.Mo.PX lD lD lD lD EE Tq.Tq.Tq.}W }W EU EU 7R 7R iD EE EE EE A .A .S>@-C U'@V'@y}.W'@yE ^H r/.g;+j5.f;.0D.e4.!{.E}.!_.l&.sc.sc.% .@[.dZ M-.j,.!_.Q:.E1.^Z d3.d3.^Z Ek.%_.}g.;y+;y+mS.ZS+>s.c3._R {` [o.r9.}%.[o.b3.d3.EP b3._R &t.EP {_.X'@Pz.`8.$$+W!+#+.A/.r& Y'@G2 w Z'@x).{5 `'@ )@.)@+)@@)@#)@dx+$)@%)@%)@&)@*)@=)@-)@;)@g%@>)@qx+,)@')@-0 }t+MQ+GO+@D+Tx+Wx+]l+[A+kF+Dl &I+ZC+rF+))@zQ+!)@~)@~,@~)@{)@])@^)@5u xg Bh /)@j&@/)@]( ()@_)@#, d2 *! Q1 ]1 o| o| ]1 o| o| o| F> F> N1 N1 /1 /1 /1 /1 /1 /1 /1 /1 x, x, 3' /1 ^1 N1 N1 N1 :t .r S-@T} T} T} T} S-@S-@S-@S-@.r .r :t :t :t +' /,@/,@(,@_,@fw fw y, fw y, y, y, _t _t _t _t :,@:,@:,@<,@:)@:)@s! s! ZA ZA va va ZA ,8 Sr N1 <)@[)@})@@E MC |)@sa Gz ^e ^e ^e ^e _g _g _g _g w' k8 .' _g Mz <7 B6 )8 [7 Pk O#@O#@o<+o<+o<+l< C/ F( j1 j1 gw |t |t C/ gw gw gw |t 2u 3u C/ }7 j1 j1 }7 F( F( gw C/ C/ 3u |t |t |t C/ C/ C/ _( hb w $x $x $x @5 hb eG+@5 @5 w w w $x an td G2 1)@1)@Ag >2 [/ [/ ^( T9 H( z7 z7 hj J5 y9 #;@(b 2)@3)@}a /b L8 4)@q8 p8 Am &;@5)@6)@K^ 7,@K: 7)@8)@9)@y/ Am g{ E3 bf yU+e| ': 0)@a)@b)@6c D9.Oj.j#.c)@d)@e)@f)@g)@Nj.xe+/@ *. ;q.QL+h)@h)@x8.yT.i)@j)@b@@`*@#&@4).sx./@.hZ $.Et.b5+k)@G7+05+`F + .k[.F0.F0.9h.}%.l=.7#.]` b^.r$.^U.F .^U.^` Z..sH.S%._-.;*.Df.j,.:%.fZ fZ mI mI u'.AU l)@m)@*T (H !` (H YS+A .>y+Et.>y+Av+A .Av+>y+>y+Et.~>.iI IK.-t.-t.IK.HK.-t.ih.Fk.-t.2q.D0.D0.D0.D0. $.{` EP b3.{` )*.wY V*.)*.sV sV s5.ql+ql+ql+:&+p,@g;.h;.F1.U%.Z*@n)@n}+4;@o)@p)@q)@r)@<9.l+ $- s)@t)@u)@v)@p!+w)@yJ+R+ r. d6.D, q` q` XG {Y #U.vM.KB z<.7}.7}. Z Y% Z 7}.z<.z<.z<.7}.7}.8}.8}.90+0d.@A.@A.@A.0d.0d.Rx.Rx.8}.8}.Yt.Yt.oA+oA+oA+oA+d> d> d> d> ,v.i~ 7}.7}.7}.Rx.,8+0d.Ys.+s.Ys..F.z<.z<.z<.z<.z<.z<.z<.z<. Z Z Z Z Z Z Z Z oA+oA+oA+oA+Yt.Yt.8}.8}.z<.z<.1x.1x.Ys.>p.>p.>p.%U.8}.z<. Z z<. Z x8 F{ 8}.8}.7}.7}.z<. Z Y% Y% z<.z<.z<.7}.7}.7}.7}.8}.z<.z<.z<.z<.z<.z<.z<.z<.+w;@R)@lX+9G+*>+;B+:w+:w+oy+v)+=w+xp+/|+G:+;2+u)+WA+1V+z@@fD+QK+2V+d[+_/+,*@+o+S)@T)@U)@!N.fI.T1 Xj *K.bj V)@|^ fc '@W)@d) me #v g7 I$ Z% '5 O* Y% Y% x8 x8 x8 Y% Z z<. Z Z Y% Y% Y% x8 ", "g~ g~ g~ g~ g~ g~ g~ f^ dd E7 dd f^ @^ dd L_ ,' Q% 9& ^% ^% ^% ^% ^% U% U% U% U% U% U% U% C 1# 1# a& ]= 5c N6 !B fN.X)@H;@=$.hf M& C) k& E* Y)@Z)@`)@ !@.!@+!@@!@#!@t)+XA+by+Jt+Mn+(G+-'@Ln+s=@9X+k)+8~+:T+:T+$!@58+5X+5X+%!@+q+28+Hy+Vi+&!@_c+B$@''@|o+Xd+7h+^c+7h+7h+(c+Vd+C$@!'@rk+rk+''@*!@=!@-!@;!@OG+>!@,!@52+#9+/'@'!@/'@)!@H&@o/+n/+!!@.>@D[+F$@D[+.>@w]+~!@hN+{!@;<+=<+<'@9L+]!@^!@/!@(!@_!@1'@:!@+`+.`+ `+@8!@ZI+9!@0!@ZI+a!@t$@>u+aB+l'@m'@b!@QA+c!@9Z.q$+d!@|k+){+e!@{>+HR.f!@Pp g!@h!@i!@/T.j!@k!@I$ l7 O4 8# U+ s& . 6. =- c# ;$ )% 5$ 5$ [$ [$ H. H. +# +# ]+ ]+ m@ m@ L) L) L) L) =^ =^ =^ =^ o^ o^ o^ o^ m@ 2% .# .# j+ ]+ H. $& .# .# .# .# .# .# .# .# +# +# +# +# +# +# +# 2% fd p: .^ .^ .* .* .# .# :] O) $& b) *, *, e> %& R) s+ lJ ov l!@^k.m!@ V+n!@o!@,g+49.Y>+,x+U*+-E.Vv.Vv.-E.E%+5Y 17+S +C>@p!@q!@r!@s!@t!@u!@v!@g-@w!@Z+]o.a<.Mo.lD iD iD kD PX Mo.EE EE Tq.Tq.}W }W }W EU |H zf.Tq.Tq.Tq.}W {X {X S>@^D+^D+S>@T>@T>@eD vl.M>.B!@12.12.K>.K>.T*.U*.E1.e3.A].sc.+[.fZ +[.7..dZ N-.l4.:R ti.PM ^Z b3.Ek.c3.;y+;y+EA EA ZS+ N1 N1 ^1 N1 N1 N1 ^1 ^1 /1 /1 /1 5, 5, 5, x, x, 3' 3' /1 5, 5, 5, x, x, 3' 3' /1 G> :t .r S-@S-@S-@S-@.r :t :t :t G> G> 1k 1k 1k (,@VH _,@fw y, Xr Xr qG _t _t _t _t Xr Xr Xr Xr s! s! s! :)@:)@:)@:)@:)@ZA ZA ZA va va va ZA fw S!@T!@4F <)@|)@|)@{d Gz 3n 3n 3n ^e _g _g k8 k8 w' k8 _g k8 >J <7 )8 ro )8 )8 A%@A%@p<+p<+p<+U!@V!@gw }7 }7 gw C/ C/ F( F( C/ |t 2u st 2u |t gw gw gw gw gw C/ C/ C/ C/ |t |t |t |t |t |t |t C/ av .w hb w hb hb eG+,y w w w @5 @5 $x $x tS+2[ 1)@1)@Ag zf W!@i1 z/ %{ MW+B~ za YZ +;@x9 X!@Y!@(b 2)@2a Oz /b 1r x7 1r ${ Z!@&;@6)@6)@ak 7)@`!@-3 u2 ~@.~@XW +~@@~@#~@VZ vF+$~@hK ad *; mE %~@&~@6I i}+f)@f)@g)@ u.*. &$ dt *~@Bj.=~@-~@;~@>~@C!@f|.'Z+5.+py.S%.P%.2q.>y+DE ]o.,~@g5+k)@Y*@lI Ua.F0.@ .IU eZ }%.l=.]` 88.b^.r$.^U.H{+F .^U.K'+m[.F}.f<.+k.tc.sd.m&.fZ fZ &P.&P.AU Y).'~@m)@[H CE 1E.!` YS+A .>y+A .Av+Av+Av+>y+{X {X {X >y+xE.2q.x7.iI HK.IK.-t.f+.jk.ih.iI E0. $. $.D0.D0.{` {` {` Y..V*.wY /X /X 32.sV s5.ql+ql+ql+:&+:&+g;.h;.F1.G!.>X+b@@)~@!~@~~@p)@OU+ef.U0 n@ vp.Er.Z: {~@]~@t)@H^+Nv.P+ r. ye+^D.QQ.q` XG #U.X0.):+O* Z 7}.z<.Y% x8 Z z<.z<.z<.7}.7}.7}.8}.8}.90+0d.@A.@A.@A.0d.0d.Rx.Rx.8}.8}.Yt.Yt.oA+oA+oA+oA+d7.d7.)i.d> ,v.i~ 7}.8}.7}.Rx.,8+0d.Ys.+s.Ys..F.z<.z<.z<.z<.z<.z<.z<.z<. Z Z Z Z Z Z Z Z oA+oA+oA+oA+Yt.Yt.8}.8}.Y% Z 61.1x.>p.>p..F..F.Rx.7}. Z Y% Z Z x8 F{ 8}.8}.7}.7}.z<. Z Z Z z<.z<.7}.7}.8}.Rx.Rx.Rx. Z Z Z Z Z Z Z Z z<.1x.z<.1x.z<.1x.z<.1x.8}.90+7}.B+ZK+ZK+Q,+Q,+=>+zI+R)@R)@9G+3 @;B+Y.@:w+Qt+v)+v)+xp+xp+/|+/|+;2+;2+uI+1V+z@@z@@z@@2V+d[+c~@d~@e~@f~@g~@_ +h~@LG.OL+:N.*K.`w i~@): ./ j~@5p+d) xi #v g7 I$ I$ '5 O* )_ )_ x8 x8 Y% Z Z z<.Y% Y% Y% Y% Y% Y% ", "g~ g~ g~ g~ g~ g~ g~ o} g~ E7 dd f^ @^ kC L_ ,' Q% 9& ^% ^% ^% ^% ^% U% U% U% U% U% U% U% C .% 1# a& ]= 5c N6 !B fN.U5.ce `n 8& h@ :% k* k~@l~@m~@Xc.n~@o~@p~@q~@r~@s~@cy+#/+='@Mn+Mn+q;@{G+nD+cy+8~+8~+:T+t~@$!@u~@v~@:R+%!@.q+28+Hy+y=@nw+Ud+nw+A=@A=@&!@Vy+Ud+Ud+Vy+Vy+nw+&!@L3+A=@&q+w~@x~@y~@z~@A~@_h+A~@Nd+/J+B~@$9+c4+q|+o|+)!@C~@)!@D~@D~@^'@E6+E6+E6+^'@^'@D~@NG+NG+52+m|+m|+r|+s|+E~@F~@&*@G~@H~@@`+I~@I~@J~@K~@L~@M~@N~@O~@P~@Q~@R~@S~@T~@U~@U~@6>@V~@ZI+W~@9!@ZI+X~@X~@ZI+9!@J&+Y~@Z~@bw+]o+`~@9Z. {@.{@i'+0]++{@2Y.@Y.@{@)Q+#{@${@;@%{@gA Kh+,&+U@ U+ }# ,. L> dN eK 1# 5$ 5$ [$ [$ H. H. +# +# j+ j+ U@ U@ 6[ 6[ 6[ 6[ =^ =^ =^ =^ o^ o^ o^ o^ m@ 2% .# .# j+ ]+ H. $& .# .# .# .# .# .# .# .# +# +# +# +# +# +# +# 2% .* -^ -^ -^ 2% 2% j+ j+ >5 O) $& $& *, *, #& a- }& %& ;$ O$ Wl.RR.[j.rv 7s.&{@9j+W@.*{@$;+Y>+~8.3/.Vv.-E.E%+5Y 17+S +T +={@-{@;{@>{@,{@'{@KJ+f-@){@!{@~{@{{@|8.Q'@]{@^{@T).e7+f7+q'.Xm.A!@3y.5y.|a.Cs.]s.Bt.k&.b..Nk.j&.7..A_.+D.uF.GU kO d5+]o.a<.Mo.lD iD iD kD PX Mo.kD kD iD iD EE EE EE EE zf.zf.EE EE EE }W {X $G x.@oV 2W . @@ @,Z+~r+O-.,*.'*.K>.K>.S*.S*.D}./-.e3.!_.jZ SX tY W).[H M-.r(.r(.;5.s9.}q.}q.IK.C0.E0.C0.O-.O-./{@yv+4q.5q.ME @$.L-.*5.e+.[J.]D+7D.zv+zv+,s.e+..1.A}.3q.8..d3.EP d3.V*.J{+)y+({@_{@:{@g} <{@7T.[{@}{@|{@1{@2{@3{@4{@5{@6{@7{@8{@9{@5{@0{@5{@3{@|{@5{@a{@b{@Hx+Ix+]@@~@@L#@J' c{@d{@*1 ))@bM+M5 Q!@&9 M`+-( zg :@@v) 1o v) 1o }@@Y' +s Y' }@@}@@u' +s `, t) T} /,@(,@VH VH _,@fw fw _,@_,@_,@fw fw y, y, y, qG qG qG Xr _t y, fw fw Xr Xr Xr _t _t _t _t y, ZA ,8 Sr V-@Yq V-@V-@V-@,8 ,8 ZA ZA va va :,@:,@fw fw y, _t Xr qG e{@e{@Xr Xr Xr Xr Xr Xr Xr Xr [f [f TH s! <,@:,@va va ZA ZA ZA ZA ZA va va _t [u #E Xy Xy }m [u ^1 F> T} T} [} [} Jf Jf ;[ >J Rh s (g s Fj Fj 9Y }/ }/ }/ U!@U!@n8 n8 n8 U!@V!@p_ K0 K0 &x p_ p_ K0 &x p_ V!@f{@f{@V!@V!@3u |t B%@B%@B%@n_ n_ n_ n_ Hi Hi Hi Hi Hi Hi n_ n_ 4u 4u ZW ZW ZW ZW ZW 4u 0j 0j /( /( 0n 0n 0n 0n 2[ }i 7~ 7~ Ag Ag zf [/ !y H( NW+E6 ~z )z RM.g{@(b (b h{@h{@Ay Ay z7 z7 MW+AQ+i{@j{@k{@H^ ak l{@m{@n{@sQ+7( QH lM+o{@p{@A: q{@r{@#a s{@t{@Oi.!b++o.~L +o DV.7I Qs r# o+ v+ Yt.!c.0, u{@tl.v{@w{@T%+m3.n^+{U.7#.5v.P%.8..hZ |W 03+g5+x{@y{@z{@A{@kO r(.@ .4W jZ F0.b3.Y..88..R+s$.fx.9#.^U.5.+5.+:-.m[.f<.n[.{_.~_../.sc.SX M-.|&+hX.Y).e~.B{@l=+qQ.CE 1E.!` (H |W DE |W YS+1E.~>.DE Et.Av+{X $G D0.D0.E0..$.x7.HK.HK.HK.ih.f+.iI .$.D0. $.D0..$.{` l=.Y..[o.V*.V*.wY /X sV sV s5.ql+ql+ql+:&+p,@sV g;.F1.i;.'Z+c@@C{@+=@o)@A) Ah.Ki.2. g D{@E{@ [ F{@G{@6: 9= -D )% 3% ^D.75.)L.F;.#U.X0.oA+)> O* Z 7}.z<.Y% x8 Z z<.7}.7}.7}.8}.8}.8}.Rx.0d.0d.@A.@A.@A.0d.0d.Rx.Rx.8}.8}.Yt.Yt.oA+oA+oA+oA+)i.)i.)i.d> i~ i~ 8}.8}.7}.Rx.,8+0d.Ys.+s.Ys..F.z<.z<.z<.z<.z<.z<.z<.z<. Z Z Z Z Z Z Z Z oA+oA+oA+oA+Yt.Yt.8}.8}.Y% Z 61.1x.>p.>p..F..F.z<.Y% x8 Y% z<.7}. Z Y% 7}.7}.7}.z<.z<.z<.z<. Z z<.z<.7}.7}.8}.Rx.Rx.Rx. Z Z Z Z Z Z Z Z z<.z<.,v.z<.i~ 7}.i~ 7}.i~ 7}.Yt.8}.Yt.8}.i~ 7}.&' dc Qe+Tx.e; !O ~v.-<.H{@Y=.I{@J{@K{@L{@M{@N{@O{@P{@Q{@R{@ik+S{@W}+UA+#-+`;+jV+Ml+o0+7~+$k+$k++ 7c $~.Ql n ]@SU )& B& tp.-$ X@ .]@+]@@]@#]@$]@%]@&]@*]@=]@od+#/+Jt+='@-]@_V+[T+[T+9X+XA+$/+l)+$!@t~@$!@u~@;]@G,@>]@.q+28+,]@y=@nw+Ud+Vy+nw+nw+nw+nw+Vy+Vy+nw+nw+nw+&!@L3+A=@qk+']@_ @}6+{V+Q.@aB+x~@aB+S8+{a+Tp+{c+B~@z6+)]@@9+:a+!]@D~@^'@E6+E6+F6+%#@%#@E6+E6+^'@^'@D~@D~@NG+B6+f4+~]@!<+t|+{]@]]@}J+lN+^]@vZ+/]@(]@_]@:]@Q~@<]@S~@[]@}]@|]@|]@1]@V~@t$@0!@ZI+Tr+j'@Tr+2]@3]@4]@Y~@_R+Gy+bw+5]@6]@7]@,`+e_+8]@BW.9]@0]@a]@b]@c]@d]@5 O) $& 9# #& *, #& e> =$ .@ 9# '. (+ o%.a7 ku i]@j]@W< k]@d&+6(.&E.HW o{.3/.Vv.-E.5Y V +U +T +l]@m]@n]@o]@V1 p]@q]@r]@+3+s]@qI.t]@y+x.@+ @1I+SF+2I+z]@SF FA {7.qy.12.'*.5p.!{.bR >x.sc. /.@[.M-.tY V).qQ..D.C_.,>.YP ]}.1p.K` x7.C0. $.{>.3q.3q.uA+uA+3r.=C zv+,s.+$.=5.)u.)u.4p.O-.vl.zv+,s.A}.A}.]D+.1.[J.EU B_.7..Nk.GE.A]@B]@C]@D]@E]@F]@G]@H]@I]@J]@K]@L]@!t+!t+M]@N]@]) O]@P]@Q]@R]@]) S]@T]@~t+U]@^) 0O+O/ Lk V]@W]@V> WH+YW ;y zQ+)6 R!@ v -( $x Fv k} <: X]@56 56 56 <7 Mz >J Rh Pg Rh Mz 1u Qg _g .r _,@_,@fw fw y, y, y, fw fw fw y, y, _t _t _t e{@qG qG Xr Xr _t y, y, Xr Xr Xr Xr Xr Xr Xr Xr va ZA ,8 Sr V-@V-@Sr Sr ZA ZA ZA va va :,@:,@:,@Xr Xr Xr Xr qG qG qG e{@qG qG Xr Xr Xr _t _t _t s! s! :)@<,@va ZA ,8 ,8 ZA ZA ,8 Sr ,8 ,8 ZA y, [u 7n Xy Xy }m /1 N1 o| [} [} p| Jf ;[ h< Ti Ti Ej +s }t B%@;J s*@V: 3u G5 f{@l< *y 8O.Y]@8O.di BJ.&x l.@S9 v7 &x ;l ud v7 &x BJ.hw ]z hw di f{@2u 1t 1t B%@n_ n_ Hi Hi 86 86 86 s*@s*@s*@Hi Hi _( _( 4u 4u 4u ZW ZW ZW Fv 0j /( 0n tS+0n 0n o_ k5 &@.&@.&@.k5 k5 dp dp 6s !y w7 o0 jw =y @;@f9 2)@2)@h{@60 60 y9 y9 YZ w7 sK MW+GW+ 5 (| ^4 /| Z]@`]@uQ+nO+ ^@.^@+^@@^@#^@vv {l $^@%^@Y4+&^@qg+*^@<,+0(+CA.5a ^[ 3@ &. )> Ui.#u.=^@-^@;^@>^@,^@e/.^f.q}+Q%.%_.A}.L@.^@.j$.'^@)^@H7+!^@~^@{^@oN.g,.C_.jZ >}.4W ,}.EP [o.]` ]` b^.fx.65+k^+9#._@.sx.R%.tx.tx.vY vY ./.Nk.M-.+[.hX.d~.9`+e~.]^@M#+nN.-c.YS+CE -c.1W (H CE -c.1W (H (H !` 1E.DE Av+E0. $. $.D0.xE.2q.xE..$.x7.x7.x7.xE.E0.D0.E0.xE.l=.Y..-*.-*.#{.#{.V*.wY 22.x6.ql+ql+ql+s5.q~.q~.g;.h;.U%.&:+[^+>$@^^@i)@[I+/^@{2 R& (^@6/ _^@:^@<^@5: a;@t#.YQ *% *j D, ,b.,b.)L.)L.X0.nA+oA+)> KB z<.7}.7}. Z Y% Z 7}.7}.7}.7}.8}.8}.Rx.Rx.0d.0d.@A.@A.@A.0d.0d.Rx.Rx.8}.8}.Yt.Yt.oA+oA+oA+oA+yj+yj+yj+oA+Yt.Yt.8}.8}.7}.Rx.,8+0d.Ys.+s.Ys..F.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.oA+oA+oA+oA+Yt.Yt.8}.8}.z<.z<.1x.1x.Ys.>p.>p.>p.z<.Y% x8 Z 7}.8}.7}. Z 7}.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.7}.7}.7}.7}.8}.z<.z<.z<.z<.z<.z<.z<.z<.,v.,v.,v.i~ i~ i~ Yt.Yt.,v.,v.i~ Yt.Yt.i~ ,v.8g.<9.>@+D8+Q( i*.gy.J,.2f.of.[^@}^@|^@4y+p$+1^@2^@3^@;%@4^@5^@I&+S1+_ @V1+6^@$-+kD+kD+7~+7~+$k+ >+T;@,P+,P+mI+lm+!G+fp+fp+cr+(T+}R+ay+WA+WA+uI+Kl+z@@z@@5T+QK+Il+g~+Qt+m;@m;@h~+RK+AD+B+lX+ZK+Q,++zI+8G+8G+3 @f^@Y.@/w+Qt+dp+1]+1]+xp+xp+/|+/|+^_+^_+}T+PK+b$@f~+f~+(|+2V+W&+4]+.h+g^@@*+Br+ K.'Q.BO.>K.*K.h^@i^@j^@c. k^@5p+C* zj+>p.Ys.Y% Y% ZY i~ )_ x8 Y% Z Z Z Y% x8 x8 x8 x8 Y% Y% Y% ", "g~ g~ g~ g~ g~ g~ g~ 8c 7c dd dd g~ g~ g~ O6 O6 ,% >% >% >% ,% ^% U% U% U% U% U% U% U% U% C G$ I# UO >+ 7c .h.+n +n ce de !& ) .If.n. xq.l^@m^@n^@o^@p^@q^@r^@s^@t^@lD+@/+0X+Jt+-]@_V+^G+}G+by+8~+{]+{]+u~@$!@u^@v^@w^@x=@38++q+28+,]@y=@vB+mw+sf+x^@x^@x^@sf+sf+sf+T1+T1+9>@9>@K&+!-@y^@']@Y}+(f+%>+`v+Hn+Dt+Hn+>u+dw+t$@]a+~a+dB+~a+!c+)'@z^@z^@z^@,!@R8+OG+A^@A^@R8+R8+R8+R8+,!@,!@,!@A6+>-@B^@x|+C^@;<+<'@D^@l_+r/+E^@LG+F^@G^@H^@I^@J^@[]@K^@L^@L^@L^@M^@N^@t$@Ur+Ur+Tr+O^@2]@P^@Q^@Q^@3]@{-@0B+R^@S^@T^@U^@V^@W^@X^@Y^@Z^@Q/+`^@dG+K+@ /@./@Ca++/@u7 Be sB.>% 9Y+]_ 0# ]$ rM @/@#/@$/@I! %$ @& @& S# S# J- J- J- J- Y_ Y_ y% y% y% y% =^ =^ =^ =^ o^ o^ o^ o^ m@ 2% .# .# j+ ]+ H. $& l* l* l* l* l* l* l* l* +@ +@ +@ +@ +@ +@ +@ t% 2% -^ .^ p: * .* j+ ]+ >5 O) 9# H. e> #& e> 9# @ t% .# [. 6. /@,/@'/@)/@!/@~/@{/@TG.]/@^/@//@^6.(/@d7+'` f7+q'.+b+/_.^s.D]._/@:/@.p[.I/@2%.6#.-5.vl.{X !` J/@J-.K/@)^@nL !^@y{@L/@M/@g,.C_.jZ >}.4W ,}.{` [o.Z..Z..r$.x(.x`.65+^` 9#.88.]` ]` ]` l=.-*.sd.Sh.7..f,.hX.hX.Y).AU N/@O/@3#.HU YS+CE -c.1W (H (H 1W (H !` (H 1W CE 1E.DE xE.D0.{>.{>.C0.{>.# .D .{>.D0.2q.2q.xE.E0.xE.2q.]>.'0.6#.'0.xY 88.xY Z..x(.x(._X _X <&+d4.r~.P/@N>.Oz.&:+j;.2w.c@@C{@Q/@A' OQ.9- A& A= R/@}( S/@ [ d9.^[ KC.P; `% c, T/@,b.}U vM.8S.d> d> d> ZY ZY 7}.Rx.8}.z<. Z z<.8}.7}.8}.8}.8}.Rx.Rx.Ov+,8+0d.@A.@A.@A.0d.0d.Rx.Rx.8}.8}.Yt.Yt.oA+oA+oA+oA+U/@U/@)D+)D+)> )> 8}.8}.7}.Rx.,8+0d.Ys.+s.Ys..F.z<.z<.z<.z<.z<.z<.z<.z<.8}.8}.8}.8}.8}.8}.8}.8}.oA+oA+oA+oA+Yt.Yt.8}.8}.7}.7}. d> yj+oA+oA+oA+)D+d7.)i.d> yj+yj+d> )i.gA 9 +8f+d6+N=.<.+V/@t7+W/@X/@Y/@Z/@`/@ (@Q1+.(@QA+hP++(@@(@iR+ w+Hn+M&+N&+nk+P3+(V+B+ZK+Q)@2T+Q,+=>+=>+8G+8G+3 @f^@Y.@/w+dp+dp+c[+c[+(|+(|+Ob+Ob+}]+}]+}T+_T+)B+P0+;2+/|+1]+S0+;(@>(@,(@@ +'(@)(@!N.6++&K.r| !(@~(@j{@.< {(@](@C* zj+>p.>p. Z Y% ZY i~ x8 Y% Z Z Z Y% )_ F{ )_ x8 x8 x8 Y% Z ", "g~ g~ g~ g~ g~ g~ g~ |% 7c kC dd 7c 9c E7 M_ M_ '$ '$ '$ >% ,% ^% U% U% U% U% U% U% U% U% C 0% G$ '= L_ .h.@n @n @n yT.Jg.)* $+ 0* >. :2+^(@/(@((@_(@:(@<(@[(@}(@|(@7~+Nn+1(@jp+ip+_V+[G+}G+@/+$/+p0+p0+u~@$!@u^@2(@3(@w^@4(@tG++q+>'@5(@9m+6(@6h+|h+of+|h+x^@sf+sf+&s+T1+9>@9>@,u+~-@7(@[6+<6+2Z+/_+m0+lZ+<6+lI+hD+U1+k'@8>@PG+]a+]a+lf+Ni+8(@z^@,!@,!@OG+p6+9(@~'@OG+OG+OG+OG+R8+R8+R8+0(@,-@a(@A$@b(@52+F[+p/+BV+c(@(E+d(@e(@f(@g(@h(@i(@j(@k(@l(@m(@K^@L^@n(@o(@7>@8!@j'@2]@P^@P^@p(@Q^@3]@J&+cw+q(@r(@s(@t(@u(@V^@v(@K/+w(@x(@y(@f#@z(@A(@B(@C(@D(@E(@F(@G(@-7.+@ K> XG [Q 6! >z+H(@!Z.I! %$ @& @& S# S# J- J- J- J- Y_ Y_ y% y% y% y% =^ =^ =^ =^ o^ o^ o^ o^ m@ 2% .# .# j+ ]+ H. $& l* l* l* l* l* l* l* l* +@ +@ +@ +@ +@ +@ +@ t% * .^ og og 5[ * +# j+ }| m* H. G. a- e> e> 9# t% u% p: fd 8# _. p# I(@J(@K(@L(@M(@#k N(@Tc.[_.~h HW o{.`L H%+5Y U +U +rY.O(@P(@Q(@R(@S(@T(@U(@V(@W(@X(@Y(@Z(@`(@ _@._@c7+%4.{@.te.uc.(_.6r.zz.+_@@_@:/@+/.0R bK.}/@|/@p(.p(.0`+9`+Y).e~.#_@]^@Pp.FU FU FU ZF Mo.kD EE PX lD lD lD kD kD iD iD GE 7R kD lD kD Tq.$G #F+S>@/H + @oV eD T>@1/@4q.7#.sV wY wY wY /X h=.5#.gZ L@.iZ L@.(H $_@j$.yt.%_@kN.,S.&_@*_@&_@2#..D.1W CE CE HU SF+=_@;K + @XT @ @@ @@ @rA+1/@,Z+z}.T>@1/@@ @YT @ @,Z+~r+1E./X.-_@;_@h,.>_@,_@'_@)_@!_@~_@{_@]_@^_@/_@(_@__@:_@<_@[_@}_@lU+|_@7( kO+}; 1_@.> 2_@3_@nW+4_@4_@gS+5_@N-@s/@s/@6_@s/@7_@7_@dQ C( B( %; Hi 1t s Jf wa '8 wa >! 8_@8_@P9 P9 P9 :7 H0 wb 8~ wb ZA fw y, y, y, y, _t _t _t fw fw y, y, _t _t _t Xr _t _t Xr Xr Xr Xr Xr Xr _t _t _t _t Xr Xr Xr Xr s! :)@<,@:,@va va :,@:,@<,@<,@<,@<,@:)@:)@s! s! Yr Yr e{@qG Xr Xr _t _t Xr Xr _t _t y, fw fw fw R} R} Yq V-@Sr ZA va :,@va ZA Sr Yq Yq Yq V-@Sr fw (,@/,@Yq V-@V-@U-@P9 @9 Md Md Kf Sg Nf 9_@O#@0_@a_@6|+E( ZW |7 av ox ox ox gW.&++ei ei b_@2A.bT+s'+c_@d_@d'.aR+aR+bT+d'.bT+d'.d_@H`+d_@QU.pB.f{@2u V!@|t p_ F( K0 j1 K0 }7 &x F( p_ C/ hw C/ p_ C/ hw C/ p_ F( K0 j1 K0 j1 &M G2 6s G2 n.@o_ *M &7 m{ kB ,[ x[ e_@di ;l (T.C%.y-.f_@Xb+Xb+9e g_@Pm g_@ik h_@V! :b i_@ef AU+9O.L5 RM.~8 ^c %x j_@^| v`+F6 fg tp k_@hn .h K+.:h ]r l_@m_@tv %^+n_@o_@U .2N.q2 1G.:e.]! H/@#x+/` m(+_a.# .v+.eV.6%.&5.3q.*5.1E.>y+p_@(D+K/@J7+iV.PT.q_@&K r_@s_@kO C_.jZ >}.4W IU {` -*.sx.sx.W%.r$.x`.x`.65+k^+xY xY ]` .R+b3.l=.m&.@j.tY f,.&P.&P.YJ e~.t_@3&+3#.QX |W YS+CE !` |W ~>.|W ~>.DE 1E.(H CE 1E.DE xE. $.gZ iZ iZ v+.uY **.D .{>..$.x7.2q..$.xE.x7.|%.'0.p$.'0.]` .R+88.7#.b^.b^.t$._X <&+d4.P/@u_@A0.(X T%.T%.2w.y.@)~@!~@v_@#) m& ~> 6/ w_@x_@y_@>o z_@q2 Hb Zf _* c, UH.}U `Q 8S.i~ yj+)i.[].,5 ,v.8}.Rx.Rx.7}.z<.7}.Rx.8}.8}.8}.8}.Rx.Rx.Ov+,8+0d.@A.@A.@A.0d.0d.Rx.Rx.8}.8}.Yt.Yt.oA+oA+oA+oA+ok.ok.A_@U/@6g+)> 8}.8}.7}.Rx.,8+0d.Ys.+s.Ys..F.z<.z<.z<.z<.z<.z<.z<.z<.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.oA+oA+oA+oA+Yt.Yt.8}.8}.8}.8}. d> yj+yj+oA+oA+)D+)D+[].d7.d> yj+yj+d> d7.`Y F- E8+&#+#< B_@^U #H C_@D_@E_@F_@G_@H_@I_@J_@K_@7y+TA+L_@M_@V1+'G+ok+T;@Z5+Z5+(V++8G+X.@3 @f^@Y.@/w+dp+dp+c[+c[+(|+(|+Ob+Ob+}]+}]+|G+:V+)B+U_@Mb+/|+1]+!-+V_@W_@X_@@ +Y_@2I.Z_@{N.<1 C6 'z `_@Bn 8: :@.:@C* |3+>p.Ys.Y% x8 ZY i~ Y% Z z<.z<. Z x8 F{ I$ )_ )_ x8 x8 Y% Z ", "g~ g~ g~ g~ g~ g~ g~ 7c E7 E7 g~ dd dd kC M_ 6c 9& 9& U% U% ^% ^% ,% ^% ^% U% 9& 9& 9& U% ^% f+ f+ f+ >' $~.+n +n U5.Zm !& h@ k& W> N2 -p++:@@:@0b+#:@$:@%:@&:@*:@=:@XA+Ol+-:@1(@ip+_V+Mn+-'@k)+Ol+-:@9~+2(@v^@;:@v^@>:@,:@38+tG++q+28+':@':@N3+N3+#s+,'@#q+,'@U;@0>@&s+Hy+%q+%q+7(@7(@!-@_ @%>+G:+/|+G:+u)+):@Z;+G,+W1+V1+sf+qf+nf+nf+Qd+lf+!a+)a+)a+Md+Md+(h+(h+A~@Md+A~@*!@A~@Md+Md+(h+*!@Md+!:@Md+OG+~:@4a+}a+}a+{:@{:@>E+02++J+]:@^:@/:@(:@_:@kk+Vp+::@bB+x^@U1+a!@ZI+%E+3]@Q^@Q^@p(@P^@V}+V}+<:@[:@}:@|:@1:@2:@3:@[Y+4:@*W+!*@5:@6:@7:@< +!2+h#@Gh+8:@k>@Pf '[ ,K.H+ +TE+k!+fe+e:@x9+DI.f:@g:@h:@~^.+=+lR i:@j:@=' k:@PI+l:@py m:@n:@U..48.te.!t.NT.|@+_/@+/.[/@o:@o:@0R k.|/@Rh.-}.-}.(.@0`+9`+Y).p:@t_@n$.+D.&T a<.Mo.a<.FU GU iD lD Mo.a<.ZF ZF a<.Mo.`F FE Mo.ZF ZF a<.1E.|W qA+-C ^D+sA+~r+SF z]@!s.p$.Z..|%.6#.68.j].*5.wl.oV ~C $ @1I+q:@q:@r:@s:@zt.$T t:@t:@.P.vH+N%.X).ZF GU X..YF X..^@.3W 3W $ @=_@SF+~C /H /H sA+S>@S>@^D+x.@/H RX oV oV YS+cK.Hj+u:@fO v:@w:@x:@y:@z:@A:@B:@C:@D:@E:@F:@G:@H:@m: ^| I:@5V %s J:@K:@j0 ') M-@K[ L:@M:@., N:@O:@P:@6B Q:@Q:@2t f.@]| R:@[@@}@@Y' +s (g t) 1u @9 S:@T:@T:@U:@_7 _7 _7 U:@U:@T:@S:@G0 V:@+9 >8 W:@W:@+~ t! t! +~ W:@W:@X:@t! t! +~ +~ W:@Y:@Y:@+~ +~ +~ +~ +~ W:@W:@W:@W:@X:@rG rG t! Y:@Y:@+~ Z:@Z:@`:@`:@`:@Z:@H~ <@.<@Z:@+<@.<@ <@ <@.<@+<@;E UH Xr Xr qG e{@e{@e{@Xr qG e{@e{@qG _t fw VH Yq Yq V-@Sr ZA :,@:)@TH ZA ,8 ,8 ,8 ,8 Sr Sr Sr 1k G> .r il ;[ h< Ti 89 89 F`+xa G`+k.@.(+@<@0$.&x `u `u ,y hb @;@5L.@I.4k+4k+#<@ND+FZ.$<@%<@&<@M] F3 XY+*<@=<@oB.U;.*<@-<@;<@=<@><@ x ,<@Pu ei ,o )y iw '<@iw )y =y z%@,o |7 ya uc =y av iw '<@iw )y {z av )<@)y ,o |7 {z 5m ,o |7 =y uc ya &M ~y ~y ~y ^z ^z ^z ^z f_@C%.#<@uW.ND+T$+!<@~<@{<@]<@^<@/<@(<@/<@_<@6D+(c :<@<<@{8 <<@SU..I.50 @;@o_ C/ p_ jw ]++}.4W jZ l=.{` xY 7#.r$.,$+k^+^` 65+x`.88..R+.R+.R+{` [o. /.`^.f,.tY d~.X). @@7<@8<@T9+rQ.$_@-c.CE !` YS+!` !` 1E.|W ~>.DE Et.Et.Et.DE D0.E0.E0.E0.D0.C0.gZ # .iZ gZ D0.xE.2q..$.C0.hZ 3;.mS.mS.mS.kh.kh.kh.kh.k^+k^++U Y:.t/.#&@& @F7.#c.#c.&:+G!.<^+A.@9<@0<@a<@}{ K% A& b<@c<@d<@#w &g+^[ $i +6 Z@ >k ,b.}U uJ Y% ,v.Yt.oA+Lh+9Y+8g.ZY Z z<.z<.7}.7}.7}.8}.Rx.8}.7}.z<.z<.7}.8}.0d.p.=; *; e; x8 Y% Y% Z Z z<.z<.7}.Rx.Rx.Rx.8}.7}.7}.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.F{ x8 Z 7}.7}.7}.z<. Z d> d> d> d> d> d> d> d> yj+d> d> d> [].b, b, YY >@+A* Q( e<@f<@*<.u2.g<@h<@i<@j<@k<@D+@4^@l<@m<@{V+F)@n<@o<@lR+%-+,P+G,@S;@x=@48+Y5+Si+O&+)G+)G+O&+ok+!P+cr+!P+fp+Jn+6X+(T+uI+PK+(P+FD+FD+fD+fD+|$@y@@5T+wI+Rt+Rt+Qt+m;@2]+W&+.N+AD+' >' F7 +n +n U5.SU )& )* h@ j3 Kp+gs.B<@C<@D<@E<@F<@G<@H<@I<@tb+vb+by+1(@J<@1(@fr+-]@(G+$w+Ol+l)+9~+9~+v^@v^@K<@L<@M<@>:@N<@38+tG++q+O<@O<@`r+`r+`r+M3+#s+#s+#q+,'@Hy+Hy+%q+N,@']@y^@y^@,G+%>+/f+G:+G:+u)+):@n0+Z;+$q+%s+mw+x^@qf+qf+rf+Sd+_h+%E+Md+P<@(h+m<@A~@J&+(h+J&+Q<@J&+(h+P<@A~@R<@P<@P<@(h+Md+5a+|a+S<@T<@T<@U<@qB+X8+V<@m(@K^@k(@W<@X<@kk+fm+Oi+::@kP+sf+8>@>u+P<@4]@{-@l<@l<@l<@y~@z~@-!@=!@Y<@Z<@`<@ [@.[@+[@|'+@[@k/+#[@$[@%[@&[@*[@i>@=[@-[@;[@.#+t| 4A >[@,[@AP.'[@)[@![@~[@{I.SO qa.rJ ,;.p3 24 N/.4{ 5! ~_ ~_ f% f% f% f% Y^ =^ {2 {2 6[ L) 6[ -^ 2% 2% +# j+ ]+ ]+ G. =$ 4{ 4{ 4{ 4{ 4{ 4{ 4{ 4{ d= 3{ 2{ 5! 5! 2{ 3{ $% Y_ p: og p: 2% U@ +# O) j+ +# b) [] *, #& a- H. Es Bh.*L d& 6[ ,_ v$ g. @# YD+3p {[@%h.$A (}+~l oN {h vn *E.TE+k!+ g.-g+17+:V Ib.-.@][@^[@n!++d./[@([@_[@)B XC.:[@<[@u]@;` oY 6v.te.uc./_. [.[[@8 >8 <@W:@+~ +~ t! t! +~ +~ W:@+~ +~ +~ +~ W:@W:@W:@W:@+~ +~ +~ t! t! t! t! t! +~ r[@sG rG X:@+~ +~ t! +<@+<@`:@s[@`:@+<@.<@H~ .<@Z:@+<@.<@ <@ <@.<@+<@;E UH Xr Xr qG e{@e{@e{@Xr qG e{@e{@qG _t fw _,@Sr Sr ,8 ZA va :,@:)@s! ZA ZA ZA ,8 ,8 ,8 Sr Sr G> A6 Ld yy ;[ Pk 89 [7 G`+1/ F`+(G t[@O2+!E ~y 5m Cp+,y _B+6m 6L.px u[@px v[@uW.w[@yR.x[@y[@y[@P>+%;@F*+z[@]Y.uW.yR.A[@P>+]++B[@$<@T;.C[@%<@uW.g{@f9 4k+_T.4k+px g{@zy zy zy zy g{@f9 px _T.f +_T.4k+2A.4k+2A.4k+f_@px 2A.4k+f_@px (T.f9 y-.y-.s'+s'+s'+y-.;<@;<@;<@ND+D[@)#+E[@F[@E[@G[@H[@I[@J[@FJ+.]` -*.@[.a<.k=+~0+CE + @YS+1E.1E.a<.]o.d5+_X.Jk.Jk.p}+U[@p}+5<@g1+lI C_.>}.>}.>}.4W Y..l=.xY 7#.,$+,$+9#.k^+^` ^` ]` 88.88.]` l=.Y..j,.l&.>}.dZ g,.uF.YJ YJ B{@O/@*T -c.QX CE !` !` !` !` 1E.|W ~>.DE DE DE ~>.|W $.D0.D0.D0.D0.C0.hZ gZ {>.{>.{>.C0.C0.C0.C0.)u.;y+;y+;y+;y+o^+o^+o^+o^+k^+k^+:@.+U 3;@@&@n)@b@@F1.A0.$1.j;.2w.t}+C!@V[@{b+}{ :{ n$ W[@n7 x_@X[@B^ 51 wF k; _* }+.;q.;q.Y% Z ,v.Yt.Lh+9Y+x8.w8.i~ 7}.7}.8}.8}.8}.Rx.Rx.Rx.8}.7}.z<.z<.7}.8}.0d. yj+yj+oA+U/@oA+oA+oA+oA+Yt.Yt.8}.8}.7}.7}.p.hS.@A.#v Y% Z Z Z z<.7}.7}.7}.8}.7}.7}.7}.7}.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.Y% Z z<.z<.7}.7}.z<.z<.,v.d> d> d> d> d> d> d> oA+)i.d7.yj+oA+yj+)i.Y% V5 Y[@Zs.s} x|.rv Z[@4r+`[@ }@.}@+}@@}@P^@%E+8y+lZ+6^@#}@$}@&-+}@,}@3Z+ky+P,+dp+H:+H:+vI+5T+s<@z$+y;@N)@wr+O,@K@@4 @t<@P)@ZK+ZK+Q,+Q,+:P+:P+8G+X.@f^@~-+/w+/w+:w+:w+oy+oy+@k+=w+^/+Ob+}]+8X+cy+9X+mD+s=@s=@^_+G:+(_+'}@N@@)}@!}@~}@rX+tL.zO._Q.r| `w {}@:( u< e<@]}@zj+f>.g7 #v Z 7}.i~ ,v.x8 Y% z<.7}.7}.z<.Y% x8 Z Z Z Z Z Z ", "g~ g~ g~ g~ g~ g~ g~ dd dd dd g~ g~ g~ g~ x5 L_ 9& 9& U% U% ^% ^% ^% ^% U% 9& 9& 9& U% ^% ^% >' >' E7 $~.+n +n SU SU !& C) k& >- O2 )p+^}@/}@(}@_}@$'@:}@<}@[}@}}@Yg+rD+hr+|}@jp+1}@It+$w++%>+%>+%>+|$@VA+%q+ew+T1+9>@Vy+Vy+Vy+Vy+W~@TA+W~@8}@l'@8}@x~@Q.@l'@XM+9}@XM+l'@TA+x~@0}@/T+/T+l'@a}@Xd+b}@c}@c}@d}@Ny+Oy+fw+:h+Vp+Oi+e}@f}@g}@fm+fm+Oi+h}@bB+qf+k'@aB+l'@R<@I&+0B+i}@cw+sy+j}@k}@Ut+l}@Z<@m}@n}@o}@p}@s$+q}@q}@r}@r]+s}@3!+r'@3I.3/+t}@u}@v}@`D.w}@/~.x}@y}@z}@A}@qM TH.l&+B}@B}@4$+8M 'i.S_ T_ 4z 4z X_ X_ af.g% *_ 5% Y^ =^ {2 {2 6[ L) 6[ -^ 2% 2% +# j+ j+ j+ G. T# 4{ W5 W5 W5 W5 W5 W5 W5 S_ }4 }4 [4 [4 }4 }4 &) M$ o^ .^ -^ 2% U@ .# m* +# .# $& b) #& e> e> 9# -h {D m3 d& o^ ,_ v$ :+ t. u).C}@$h.qv %h.W4.@R}@S}@T}@U}@V}@W}@2[@W}@X}@W}@#G *N R>@ &+-K !0+Bv+05+p}+bL Y}@Z}@`}@ |@.|@+|@@|@#|@$|@%|@&|@*|@=|@-|@D5 v' ;|@~4 >|@`P.,|@'|@)|@`~ TM.!|@E( Y' q) Og E%@7B ~|@7B @s Qi Ic {|@SH 8> 3) /e _g 3n wo /1 fw ;! ]|@]|@]|@(7 (7 (7 ]|@]|@;! Y:@W:@W:@+~ +~ @~ ^|@/|@/|@/|@/|@^|@@~ WA WA @~ @~ @~ ^|@^|@^|@^|@^|@/|@(|@(|@_|@:|@:|@(|@:|@<|@[|@_|@(|@(|@_|@}|@||@||@||@||@}|@1|@2|@3|@2|@1|@2|@4|@4|@2|@`:@;E UH Xr Xr qG e{@e{@e{@qG qG qG qG Xr y, fw _,@ZA ZA va va :,@:,@<,@<,@va va ZA ZA ,8 ,8 Sr .r A6 )m tK .s ro G5 O#@jB O2+x[ =K.f=@Xj 8O.S1 v7 @;@7L._B+TM.5|@6|@7|@ { 7|@8|@9|@+X-+w|@x|@y|@z|@A|@B|@C|@D|@E|@F|@90.C- v$ Is G|@jS.%u.Z:.H|@]U.98.Y..jZ eZ zf.iD Av+A .A .DE lD PX Mo.lI `F nI G [W I|@sI J|@6R 5..D_.jZ 4W >}.4W [o.Y..xY xY ,$+W%._@._@._@._@.sx.sx.sx.`..[o.l=.!_.e3.eZ F0.FE nI G rI K|@k=+FU CE CE CE CE (H YS+YS+1E.1E.|W |W |W |W 1E.YS+C0.C0. $. $. $.C0.{>.{>.D0.C0.gZ iZ iZ # .{>.vl.}g.;C.;C.;C.c+.c+.c+.c+.bP.bP.gX.43+*u.e1+L|@`*@r$.#1.x!+$1.'Z++~+M|@N|@zT.D{ j& Q* O|@P|@Q|@R|@gK r2 )~ `5 Fs )J.S|@UH.z<.z<.be+be+9Y+x8.(D.gA Yt.8}.8}.Rx.Rx.Ov+Ov+Ov+Rx.8}.7}.z<.z<.7}.8}.0d. )> yj+d> yj+)D+oA+oA+oA+oA+Yt.Yt.8}.8}.8}.8}.90+90+>p.>p.>p.>p.8}.8}.8}.8}.8}.8}.8}.8}.Rx.8}.7}.z<.z<.7}.8}.Rx.oA+oA+oA+oA+Yt.Yt.8}.8}.Rx.%U.0d.61.Ys.*; .F.#v z<.z<.z<.7}.7}.7}.8}.8}. Z Z Z z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.8}.8}.7}.z<.z<.z<.7}.7}.,v.,v.,v.,v.,v.,v.,v.,v.)> ,v.KB ZY Yt.6g+i~ x8 N; T|@eX kf.U|@V|@W|@X|@Y|@Z|@`|@ 1@.1@+1@L_@M_@#-+./+@1@>-+&-+}@I)@3Z+W{@mX+:w+Il+5T+QK+QK+s<@s<@d^@y;@X{@O,@Z.@4 @4 @0G+9G+9G+x)+x)+zI+zI+8G+X.@f^@~-+Y.@Y.@:w+1@C* xi / g7 z<.8}.)> Yt.Y% Z Z z<.z<. Z Z Y% Z Z Z Z Z Z ", "g~ g~ g~ g~ g~ g~ g~ kC kC dd dd g~ E7 E7 L_ >' U% U% U% U% U% U% U% U% U% 9& 9& 9& U% ^% ,% >' F7 $~.+n +n +n SU cW R& ,1@y* b|+lA+'1@)1@!1@~1@{1@]1@^1@/1@(1@`l+si+v&@_1@:1@<1@[1@:T++%>+y@@y@@y@@N,@%q+ew+A=@L3+L3+&!@:u+ w+Q.@Q.@Q.@XM+XM+XM+XM+Q.@0}@51@X}+XM+Q.@XM+X}+Ct+W}+61@61@B$@B$@71@81@91@r$@iw+bm+cm+Wp+01@a1@b1@fm+c1@Wp+Oi+h}@bB+kP+_u+T1+~-@9}@y~@d1@U}+U}+e1@f1@f1@g1@h1@i1@j1@m}@k1@l1@.[@['++[@m1@'*@n1@o1@p1@q1@)m+0Z+r1@s1@t1@u1@c!+[1 v1@w1@2'.x1@AX.-V OB+4$+y1@nq+'i.ri q2.X5 4z X_ A^.g% *_ R_ %% Y^ =^ {2 {2 6[ L) 6[ -^ 2% 2% +# +# j+ j+ H. S# 4{ W5 W5 W5 W5 W5 W5 W5 }4 }4 [4 [4 [4 [4 }4 &_ T$ L) 6[ o^ 2% 2% .# m* .# .# $& $& e> e> e> $& u% b/ Z^ Z^ .^ 5[ t& 5. /$ -- 5Q.z1@=,.#n+@i A1@ i /$+(k F<.A%+vo.Se. ,+fe+)h.t{.C).|=.B1@vp Hk C1@D1@O%+~x+=' E1@jG+~{@>5+i9.F1@[l.h<.L:.,(.z+.d..Cs.]s.L}@0n.K}@'H.At.Oq.N:.f=.m$.]X.X).W}@W}@+D.+D.+D.*T &T Pp.Mo.PX ZF ZF Pp.Pp.Pp.Pp.Pp.Pp.CU i,.a<.a<.ZF &T -c.^@.$ @. @~C 2W 2I+pY G1@sK+&5._a.Q%._a./6.M@.&5.*5.3W 3W H1@~..I1@I1@J1@K1@t_@hO hO lL Q}@'~@%*.Q9+pL S9+/D+'^@J/@S}@N}@'^@*N 3&+S9+%b+O/@pL S9+3&+3&+%b+l=+M#+(X._X.Dg.Cg.|H n+.L1@M1@N1@O1@P1@P1@Q1@R1@S1@T1@U1@&c V1@W1@4, X1@Y1@)y ih Z1@`1@ 2@.2@uG.+2@+I.av D%@t) 3) )3 E; i5 E; F; )3 @2@=> #2@$2@3n O1 .l :m 3' y, Y:@Y:@Y:@Y:@Y:@Y:@Y:@;! W:@W:@W:@+~ t! t! X:@X:@^|@^|@/|@(|@(|@/|@^|@^|@YA WA WA @~ ^|@^|@/|@/|@^|@/|@(|@_|@:|@[|@<|@<|@:|@[|@[|@[|@[|@:|@:|@:|@%2@%2@%2@||@||@}|@}|@1|@3|@2|@1|@2|@4|@4|@1|@s[@tG UH Xr Xr qG e{@e{@e{@qG qG Xr Xr _t y, fw _,@va :,@:,@:,@:,@:,@va va :,@va va ZA ,8 Sr Sr Ld [t &2@&2@*2@0_@st 2u 3u `A hw ;l ]z BJ.BJ.<,.f_@OD+TM.pO.TM.ii =2@|a -2@2@:O.,2@Al 'l kq 'l '2@)2@Al kq _O.'2@)2@'2@_O.'l Al !2@~2@#1 #1 #1 ~2@{2@]2@I[@^2@~2@/2@I[@I[@I[@/2@>2@0|@(2@F[@_2@e|@(2@F[@:2@E[@:2@E[@:2@E[@:2@k|@k|@a|@a|@a|@a|@<2@l|@[2@}2@|2@qs 12@22@32@42@52@62@O;..V oX.72@,l+Z@.82@92@02@x'+7-.3V.yB.)f _s :+Z% O4 P9.8e.o2@p2@Y`+gX. +.tf.{D+Y..@ .3p.Mh.jD KB.hD _H k[.Tq.eZ GE ]}.GE P:.6^.6^.'$+SN.2M.2M.aZ Ua.@ .jZ >}.>}.-*.-*.]` xY ,$+`T ^U.^U.^U.^U.]d.]d.]d.S%.5#.-*.+1.e3.IU IU nI nI [W [W p}+_X.Mo.YS+(H CE CE (H !` 1E.YS+1E.1E.1E.1E.YS+!` (H {>.{>.C0.C0.C0.C0.C0.C0.D0.{>.# .D .v+.iZ # .O-.EA tA+tA+tA+-y+-y+-y+-y+55+55+gX.43+1w.*u.q2@r2@F1.#1.T%.4).>X+>$@c3+s2@7!.hf T~ t2@u2@v2@/i+~; 9} X+ Ls cE cT bE S|@8}.8}.8}.be+be+x8.y{ (D.8e.i~ 7}.8}.8}.Rx.Rx.Rx.Rx.8}.8}.7}.7}.7}.7}.8}.90+ Yt.d> )i.yj+)D+oA+oA+oA+oA+Yt.Yt.8}.8}.Rx.Rx.0d.90+>p.Ys.Ys.Ys.8}.8}.8}.8}.8}.8}.8}.8}.Rx.8}.7}.z<.z<.7}.8}.Rx.oA+oA+oA+oA+Yt.Yt.8}.8}.Rx.[y+,8+1x.+s..F.>p.g7 7}.7}.7}.7}.8}.8}.8}.8}.x8 x8 Y% Z Z z<.z<.7}.z<.z<.z<.z<.z<.z<.z<.z<.[y+Ov+8}.z<. Z z<.7}.8}.z<.z<.,v.z<.,v.z<.,v.z<.6g+Ov+i~ )_ ,5 Z i~ )J.5d.W_.&H w2@Q[@x2@y2@z2@A2@B2@^h+C2@D2@E2@F2@G2@{[+H2@H2@N,+%-+l;@$!@58+%}@I2@uG+J2@K2@K2@Zr+3h+#s+Kn+!P+A$+6X+6X+WA+PK+PK+z@@fD+FD+Jl+Jl+wI+wI+FD+|R+tr+tr+}=@}=@w)+mX+[P+Gn+1G+6=@r<@r<@8~@7^@-}@L2@-}@$1@$1@U{@I)@cX+c^@M2@,B+ED+wI+wI+wI+FD+c&@s<@-(@-(@O,@L@@Z.@O)@4 @0G+9G+9G+x)+x)+zI+zI+8G+8G+3 @f^@Y.@Y.@(@(-+R2@S2@T2@U2@Pf *K.V2@i~@S9 W2@X2@>1@zj+C* g7 #v Z 7}.i~ ,v. Z Z Z Z Z Z Z Z Y% Y% Y% Y% Y% Y% ", "g~ g~ g~ g~ g~ g~ g~ kC kC dd dd g~ E7 E7 L_ >' U% U% U% U% U% U% U% 9& 9& 9& 9& 9& U% ,% >% F7 $~.$~.+n +n U5.SU cW R& '~ 0* tr.'p+Y2@Z2@`2@2u. 3@.3@+3@@3@#3@=:@1$@_1@$3@%3@<1@[1@;'@+&-+kD+SA+qy+Ll+u)+/_+(|+1]+1]+Pb+V&+U&+[6+[6+[6+*4+M@+wr+X{@w~@w~@w~@;3@''@''@|o+V;@Dt+`v+`v+`v+4~+4~+4~+4~+4~+Y}+N@+U&+`v+4~+`v+>3@1Z+1Z+S1+9}@|o+sk+,3@,3@'3@r$@iw+y&@)3@c1@!3@a1@kk+Wp+Xp+~3@Vp+}h+|h+2h+&s+ew+7(@y^@{3@{3@{3@y~@e1@f1@f1@g1@]3@^3@/3@1w+yr+(3@_3@:3@<3@[3@}3@zr+|3@13@23@33@43@53@63@73@P:+EC.R$+83@93@03@4& a3@:& Ul r.+iC BW b3@R6 [4 Q6 Q6 A^.0c R_ -H.l` ~% Y^ =^ {2 {2 6[ L) 6[ -^ 2% 2% +# +# +# +# 9# 0# 4{ W5 W5 W5 W5 W5 W5 W5 [4 [4 [4 [4 [4 [4 [4 ~_ M$ L) L) 6[ 2% .* .# .# .# .# $& $& e> e> e> $& Y_ 4% &- y% fd fd h+ e# :$ k; Ja h@.;&@(%@SR.;l+Xb (W+b1.5l c3@[}+.g.d3@e3@V +5Y j!+}i.vN ~|.Qn f3@g3@h3@i3@j3@I}@iG+k3@>5+l3@;c.m3@v0.;S.,0.Bs.D].I{+dg+9p.AY.0n.2a.an.eV.w_.o$.4#.sY nN.X}@+G [H +D..D.GU &T &T GU GU &T &T FU FU FU FU FU FU g,.^X.Pp.a<.a<.ZF CE 1W fD 2W . @2W ,Z+lt+,Z+sK+!s.>s.=C 5q.4r.,t.zE n3@o3@p3@q3@r3@s3@t3@t3@u3@v3@w3@x3@y3@#N y3@6<@z3@'.+,.+A3@B3@yI C3@x{@C3@5<@s_@D3@E3@5<@F3@G3@F3@H3@D3@F3@I3@J3@K3@K3@f1+/d._l+l5.L3@M3@N3@O3@P3@Q3@R3@S3@T3@U3@|u va 1A -M V3@W3@FJ.X3@Y3@$G+Z3@`3@ 4@.4@fi KI+0_@t*@f[@)3 !3 +4@+4@@4@~3 f8 #4@{d {d }m [u [u }o (t (t W:@W:@W:@W:@W:@W:@+~ +~ t! t! t! X:@X:@X:@r[@r[@^|@/|@(|@(|@(|@(|@/|@^|@WA @~ @~ ^|@/|@/|@(|@(|@/|@/|@(|@_|@:|@<|@<|@$4@<|@[|@:|@:|@[|@<|@<|@[|@%2@%2@||@||@}|@}|@}|@}|@4|@2|@1|@2|@3|@3|@}|@es tG UH Xr Xr qG e{@e{@e{@qG Xr _t y, fw fw _,@_,@va :,@:,@<,@:,@va ZA ,8 va va ZA ,8 Sr V-@Yq Tj *2@%4@%4@Cj &4@*4@0v '<@)<@,o (T.(T.2A.2A.=<@ND+s~+=4@-4@;4@|- >4@c{ c{ ,4@,4@'4@{2@#1 ^2@)4@!4@Q;.wp ~4@^,.Q;.nq Q;.wp wp Q;.{4@nq Q;.wp Q;.nq ]4@]4@^4@^4@]4@FK+/4@(4@^4@]4@_4@(4@(4@/4@_4@FK+|2@{2@l|@/2@:4@^2@<4@/2@[4@]2@[4@]2@[4@I[@}4@}4@|4@|4@|4@|2@|2@_4@14@14@24@34@u{.U[.)|.1B 44@N;.C%+uP.c:.S].ET.3:+}0+54@64@74@v;.84@Lj+q;+[T 94@04@a4@|=.b4@c4@(z.c4@:A.d4@e4@f4@g4@MM+0P h4@ql.^{ i4@j4@k4@}X GF.%[.v$.yY X:.t(.)*.l=.B}.od.le.K` 1r.RM :R Mh.W` $[.l+.n+.)_.x].@!.pc.JU l4@&d+ .;5.IU jZ 4W >}.-*.-*.]` xY ,$+`T ^U.^U.^U.^U.S%._-.]d.Z*.tc.g=.`^.m&.M-.SX kO ^X.Ym.rI m4@(X.PX 1E.(H CE 1W CE !` YS+!` YS+YS+1E.1E.YS+!` (H {>.{>.{>.{>.{>.{>.C0.C0.gZ gZ # .L@.iZ iZ iZ 4p.EA tA+tA+tA+-y+-y+-y+-y+55+bP.43+1w.*u.$$+q2@r2@42.3J.py.py.>X+z.@n4@o4@un._] He p4@O|@q4@!2 @$ G[.)~ xF xF cT )J.8}.7}.8}.13+be+8g.7g.(D.(D.,&+,v.z<.z<.z<.7}.7}.8}.8}.7}.7}.8}.8}.8}.8}.7}. )> yj+d> yj+)D+oA+oA+oA+oA+Yt.Yt.8}.8}.Rx.Rx.0d.90+>p.Ys.Ys.Ys.8}.8}.8}.8}.8}.8}.8}.8}.Rx.8}.7}.z<.z<.7}.8}.Rx.oA+oA+oA+oA+Yt.Yt.8}.8}.8}.[y+Pj+p.>p.#v 8}.8}.8}.8}.7}.7}.7}.7}.x8 x8 Y% Z Z z<.z<.7}.z<.z<.z<.z<.z<.z<.z<.z<.[y+Ov+8}.z<. Z z<.7}.8}.z<.1x.z<.1x.z<.1x.z<.1x.8}.r4@%U.X[ Z% 1x.J; vY+s4@fJ Q3.t4@u4@v4@w4@x4@y4@O{@gP+z4@A4@B4@G2@n<@C4@Bg+H2@#>+7~+k)+58+D4@E4@E4@F4@G4@)3@)3@Zr+4h+M3+G)@Jn+Jn+Jn+T{@uI+Kl+z@@fD+FD+Jl+Jl+Jl+Rt+wI+:&@:&@tr+tr+}=@}=@,B+mX+$N+3R+1G+< @dX+r<@7~@a^@q<@N_@;}@;}@%1@>}@,}@cX+ky+0~@,B+}=@Jl+FD+FD+(P+c&@c&@b&@a$@L@@P,@0&@O)@4 @0G+9G+9G+x)+x)+zI+zI+R)@8G+3 @f^@;B+;B+(@WX.I4@Y_@T2@U2@!V.V} J4@K4@f{@L4@36.>1@m,+zj+e; #v Z Z KB O* Z Z Z Z Z Z Z Z x8 x8 x8 x8 x8 x8 ", "g~ g~ g~ g~ g~ g~ g~ dd dd dd g~ g~ g~ g~ x5 x5 ^% ^% U% U% 9& 9& 9& 9& 9& Q% 9& 9& ^% ,% >% $~.$~.+n +n U5.U5.SU cW )* c% ^@ Kp+'p+M4@N4@O4@P4@Q4@R4@S4@T4@U4@7d+V4@gr+$3@W4@:1@X4@/V+;'@l;@gr+hr+&3@}1@|1@*3@=3@=3@4}@Y4@Z4@`4@>]@ q+ 5@.5@5X+1}@t~@:T+:T+^V+q;@U_@P0+Q0+(|+xp+1]+c[+pd+pd+*4+*4+[6+[6++5@M@+X{@X{@@5@@5@;3@pm+pm+;3@#5@|o+,G+`v+`v+`v+4~+4~+4~+4~+4~+Y}+N@+U&+`v+4~+Y}+>3@$5@1Z+y~@y~@%5@|o+,3@,3@'3@r$@&5@y&@)3@c1@!3@a1@Vp+~3@x&@4h+3h+3h+6h+6(@&s+Hy+%q+y^@']@']@y^@{3@sy+sy+g1@g1@]3@]3@*5@ty+=5@-5@;5@* +>5@oX+{B+{B+ti+,5@'5@)5@!5@~5@{5@]5@i2@^5@/5@(5@0R+5Y._5@z& :5@<5@[5@XG.xk |4 ;p.X5 [4 [4 =_ =_ R_ -H.-H.~% Y^ =^ {2 {2 6[ L) 6[ -^ U@ 2% +# +# .# .# $& P* 4{ W5 W5 W5 W5 W5 W5 W5 W5 W5 [4 }4 }4 [4 W5 n3 o3 o^ 6[ 6[ .* * .# +# m* .# $& 9# a- e> e> b) n3 %% &% =] 5[ m* 9# +% r$ N$ K- Os }5@/%@AT.g!++i |5@=/@15@U2+TE+<}+25@e3@d3@35@A%+*E.>8.En.m!+45@55@65@75@85@95@UG.05@a5@l3@b5@c5@d5@e5@f5@g5@6r.9q.dg+}a.;(.YF.YF.AY.wd.o(.o$.B .sY B .X}@V}@qQ.[H *T .D..D.*T +D.[H *T .D.GU &T FU &T &T GU mI g,.FU Pp.ZF ZF !` !` /H ~C ;K 2W lt+eD ~r+YT sK+nt+=C !s.~s.,t.XT h5@i5@j5@o3@o3@k5@l5@l5@m5@n5@o5@p5@q5@#N #N s_@r5@OT.oL s5@A3@C3@,~@F7+3n.K3@y3@q5@t5@ol+t5@#N h1+t5@h1+u5@i1+u5@ol+t5@#[.m+.CE.v5@w5@x5@y5@z5@A5@B5@C5@D5@E5@F5@G5@H5@I5@jl J5@&y g9 K5@L5@D&.M5@N5@yu.LP.O5@g9 P5@)m SH '3 Q5@+4@Y3 Rx Rx 9h 5k ]d ]d [u }o }o 8q (t /t W:@W:@W:@+~ +~ +~ t! t! X:@X:@X:@X:@X:@X:@r[@r[@/|@/|@(|@_|@_|@(|@/|@/|@/|@/|@/|@(|@(|@(|@(|@_|@(|@(|@(|@_|@:|@[|@[|@[|@<|@:|@(|@_|@[|@<|@<|@[|@%2@||@}|@1|@1|@1|@1|@}|@4|@2|@1|@1|@3|@2|@||@R5@tG UH Xr Xr qG e{@e{@e{@qG Xr _t fw _,@_,@_,@_,@,8 ZA va :,@:,@va ,8 Sr ZA ZA ,8 Sr Yq U-@R} Mz W' R:+S5@S5@ud+T5@96 ,y @;@ZP.y9 y9 x9 zy ]++Y!@kk Cl |- |- U5@hi V5@V5@!2@)2@#1 ^2@!4@W5@X5@~4@aA.Y5@;} Z5@aA.`5@ 6@.6@X[.`5@ 6@.6@ 6@`5@+6@@6@#6@$6@%6@&6@34@&6@34@&6@%6@&6@34@*6@52@*6@34@Gw =6@_4@-6@_4@;6@>6@;6@_4@,6@/4@,6@/4@-6@(4@-6@'6@12@)6@!6@~6@~6@52@52@{6@]6@^6@+S.cQ.{h.CC CC {,./6@(6@_6@:6@Y7+<6@[6@}6@|6@rb.FT.16@.V 26@YR.36@46@56@],.66@76@86@96@@V N[.06@a6@X`.b6@c6@$S.U@ c1+++.L|@L|@sf.md.c^.C{+x(.s$.B7+|:.{7.pl+ui.Q:.FP FP FP FP D@.:..:..:..%'.)0+$R.h4.%R.`A.d6@$R.2Z ;5.IU @ .4W 4W [o.[o.xY xY ,$+W%._@._@._@._@.Z..(@.sH.S%.~_.#j.k&.Dl.f,.7..uF.g,.ZJ qI g1+2&+ZF !` (H CE CE CE (H (H (H (H YS+1E.1E.1E.1E.YS+C0.C0.{>.hZ hZ hZ {>.{>.iZ L@.# .gZ gZ # .iZ -5.}g.;C.;C.;C.c+.c+.c+.c+.55+bP.1w.e1+w.@e6@L|@f6@,f.Oz.x(.`T [^+(7.g6@N|@i4@h6@e(.p4@i6@No+D= e p.>p.>p.>p.8}.8}.8}.8}.8}.8}.8}.8}.Rx.8}.7}.z<.z<.7}.8}.Rx.oA+oA+oA+oA+Yt.Yt.8}.8}.z<.%U.GA+p.>p.+s.8}.8}.7}.7}.7}.z<.z<.z<. Z Z Z z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.8}.8}.7}.z<.z<.z<.7}.7}.1x.1x.1x.1x.1x.1x.1x.1x.h*.GA+r4@61.61.M<+p|.4d.~x j6@k6@l6@m6@n6@o6@p6@QX.q6@ 1@r6@s6@B4@t6@u6@v6@w6@C4@x6@o0+8~+*-+y6@z6@z6@A6@A6@B6@C6@D6@E6@N3+br+G)@G)@$q+ep+WA+Kl+z@@fD+wI+Jl+tr+tr+Rt+Rt+<&@<&@tr+Jl+Rt+ED+w)+mX+$N+3R+1G+6=@dX+dX+6~@Gl+&(@F6@&(@a^@7~@r<@T_@W{@mX+,B+}=@tr+|R+FD+Kl+Kl+c&@G6@a$@H6@P,@a&@0=@O)@4 @0G+9G+9G+x)+x)+zI+zI+R)@R)@3 @f^@;B+;B+w)+w)+1R+1R+-w+-w+Yn+Yn+I6@sD+&k+On+*k+*k+~_+(6+:6+`l+q$@!V+J6@,(@K6@L6@e!@h~@cF.O2+l< M6@N6@O6@36.>1@8n+3n++s.e; Y% Y% O* '5 z<. Z Z Y% Y% Z Z z<.Y% Y% Y% Y% Y% Y% ", "g~ g~ g~ g~ g~ g~ g~ g~ g~ g~ g~ g~ dd dd O6 x5 ^% ^% U% U% 9& 9& 9& Q% Q% Q% Q% U% ^% >% '$ $~.$~.+n +n U5.U5.SU cW w* c% P6@Q6@L! at.R6@S6@y#+T6@U6@V6@W6@X6@Y6@dy+|}@%3@W4@:1@X4@/V+;'@^V+1(@Z6@}1@2}@;:@11@11@`6@ 7@M<@.7@+7@@7@.5@#7@$7@%7@fr+fr+-]@-]@_V+/G+U_@_T+R0+xp+xp+c[+pd+l0+>3@H:+q8+&7@*7@=7@~B+-7@;7@%5@>7@,7@'7@'7@,7@)7@%5@,G+!7@!7@!7@g)+h)+h)+h)+g)+r=@}$@}$@!7@g)+!7@~7@e)+>G+y~@y~@%5@|o+,3@,3@{7@'3@]7@E6@C6@K2@^7@01@Wp+3h+N3+M3+N3+5h+,'@.a~.|#.AE s7@t7@u7@s:@rQ.rQ.rQ.rQ.qQ.[H +D.*T [H *T .D.&T &T &T GU .D.kO kO GU GU GU &T CE CE ~C 3W 1I+;K z]@SF YT 2I+=C =C =C !s.G1@TF n3@XT v7@w7@t3@t3@x7@y7@z7@A7@%N B7@w3@C7@D7@y3@G3@D3@5<@F3@OT.OT.F7+h5+h5+iV.u5@E7@F7@G7@H7@I7@E7@63+G7@H7@J7@J7@G7@E7@K7@.N Bt.;a.a;.L7@M7@N7@O7@P7@Q7@R7@S7@T7@U7@V7@$] W7@#9 X7@*y JM.8@-8@,8@;8@b~ >8@>8@'8@)8@!8@~8@{8@]8@{8@~8@~8@,P {8@~8@~8@{8@~8@)8@R5@tG UH Xr Xr qG e{@e{@e{@qG Xr y, _,@VH VH _,@fw Yq V-@,8 va va ZA Sr V-@,8 Sr V-@Yq R} T-@c2 Rh X' cT+^8@6/+^8@%o+.I.6L.h9 60 ef K8 3)@2)@2)@3)@/8@hi V! V! (8@_8@:8@<8@'2@Al )4@!4@[8@}8@|8@ie+Y5@18@Y5@18@28@&} 38@48@`5@&} .6@58@38@58@`5@68@78@88@98@08@a8@88@44@7Q 98@88@44@b8@44@b8@1B 1B c8@>A d8@Br.q:.4i.q:.e8@24@Gw 24@Br.~6@>A f8@g8@24@34@h8@i8@i8@98@98@j8@-^.CC Wc..S.2i.$7.k8@l8@m8@n8@o8@p8@p8@|u._6@[t.q8@#5+.~>.~>.D0. $.{>.gZ gZ gZ gZ hZ D .iZ # .gZ gZ # .L@.FA ;y+VU+VU+VU+Ck.Ck.Ck.Ck.bP.``+$$+e6@-Z+[v.F8@;$@O>.32.x(.G!. 9.G8@H8@He+21.I8@J8@K8@w_@b<@f W :@ ', }c.dT X[ 61.7}.7}.@$+=L ,&+,&+(D.7g.L8@M8@8g.z<.7}.7}.7}.8}.8}.8}.z<.7}.8}.Rx.Rx.8}.7}.1x.p..F.>p.7}.7}.7}.z<. Z Z Z Y% 8}.7}.7}.7}.7}.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.Y% Z z<.z<.7}.7}.z<.z<.1x.Ys.Ys.Ys.Ys.Ys.Ys.Ys.e; *; @A.Ys.xM+N8@@G+B|.)r f#+O8@P8@Q8@R8@S8@T8@QX.q6@ 1@r6@s6@U8@V8@W8@ /+X8@%f+Y8@!]+$k+Z8@`8@ 9@ 9@.9@+9@B6@C6@@9@ s+4h+$s+br+br+%s+$q+y@@fD+fD+FD+Jl+tr+ED+ED+ED+Rt+#9@<&@Jl+wI+g~+Rt+k+ei+/6+dd+~_+(6+$4+jr+V&+!V+,%@;9@'>+>9@e!@iT.cF.p<+-l ,9@'9@)9@36.zn+m,+qh e; #v Z Z KB O* 7}.z<.Y% x8 x8 Y% z<.7}.z<.z<.z<.z<.z<.z<.", "g~ g~ g~ g~ g~ g~ g~ 7c E7 E7 g~ dd dd kC kC O6 ^% ^% U% U% 9& 9& Q% Q% Q% Q% Q% U% ^% >% '$ E7 E7 $~.+n U5.U5.E+.uS.Y& '~ Ux.d/+L! df+!9@~9@{9@]9@^9@/9@(9@_9@:9@#/+Nn+gr+<9@fr+t~@/V+:T+ip+R;@[9@0~+]]+11@3}@}9@|9@ 7@M<@19@29@39@49@$7@59@ip+-]@G+1Z+S1+B=@79@c9@c9@d9@e9@/u+f9@X5+im+g9@hm+jP+3h+M3+U;@U;@U;@g F AO >.@z9@A9@Va+B9@C9@D9@Za.7%.Ma.^.@:l.E9@F9@3|.Ra.F}.n[.f<.r'.r'.r'.0..;>.V..3^.Eo.s7@n3@$ @YF 4#.]X.3#.]X.rQ..D.FU qQ.+D..D.GU &T &T GU .D.CU kO .D.+D.[H +D.HU -c.YF X..1I+1I+;C ;C ;C 1I+-5.-5.-5.+$.2W 3W $ @SF+G9@1[@H9@H9@I9@J9@K9@u3@ll+i1+ol+u5@E7+ll+ll+U[@L9@M9@/X./X.k)@H7+F7+OT.nl+N9@O9@P9@Q9@R9@S9@E7@E7@I7@I7@I7@T9@C7@B7@U9@V9@W9@*{.X9@Y9@Z9@`9@ 0@.0@+0@@0@#0@$0@%0@&0@*0@=0@-0@]c ;0@>0@,0@hg.'0@)0@.8@+8@!0@JM.~0@3r Rh {0@]0@sa yu ol yu }o }o }o }o |u |u |u (t (t (t |u |u (t (t /t 5F 5F 5F ^0@^t ^t ^t ^t ^t ^t *8@/|@(|@-8@_|@-8@_|@=8@/|@/0@<|@>8@[|@b~ :|@-8@_|@-8@_|@-8@(|@=8@(|@=8@(|@>8@(|@J~ ^|@-8@<|@>8@[|@!8@}|@{8@3|@,P 3|@{8@1|@,P 2|@~8@1|@{8@1|@)8@(0@tG UH Xr Xr qG e{@e{@e{@e{@Xr y, _,@VH VH _,@fw 7, U-@Sr ZA va ZA Sr T} If If Tj il ;[ <7 Ti [7 F%@G( ,y ,y KI+bn 5|@=2@_0@w/@Q{ Q{ ,2@:O.:O.'2@:8@:0@'2@/<@wp mq vp vp {4@nq <0@Cq.W[.B1@Mx N&.FJ+[0@}0@[0@|0@10@20@30@40@50@60@70@80@90@/j (z.UR 00@a0@b0@c0@00@=^.s{.d0@00@uT =^.=^.g1.TR 00@UR 08@e0@f0@U[.B).C9+7Q g0.b8@44@88@1B f0@98@08@88@88@88@88@88@88@1B 1B g0.44@+S.)(+SW vT g0@h0@Yc._y._y.Xc.bQ.dz+rb.i0@FT.^A.j0@j0@k0@l0@m0@n0@o0@p0@q0@r0@s0@t0@u0@y3.v0@*g w0@x0@y0@z< w`+z0@A0@hA.,*.U2.TT.7y.{D+V:.{D+U2.R,.U2.V:.(U.(U.od.V` S` kc.kc.xy.So+ZF.}:.DE.C7. B. B.5M.B0@5M. B.U` ,}.IU @ .hZ hZ l=.l=.xY 7#.7#.,$+k^+^` 65+fx.(@.#{.]>.EP {` l=.:%.j,.,}.,}.7R 7R 7R Zm.pe.i,.*T -c.1W (H !` (H 1W QX 1W CE !` 1E.~>.DE Et.D0.E0.D0.{>.gZ # .# .# .gZ iZ iZ L@.L@.# .gZ hZ hZ mS.mS.mS.mS.+&@+&@+&@+&@Ck.S#.%t.CK.C0@,%.Z`+[^+F1.x'.,$+g{+m3.G8@D0@6;@=$.E0@F0@G0@No+R/@B{ E& _. Gs bE )J.cN 1x.8}.8}.=L O4 gA 8e.w8.f!+0@@h]@@$+8}.8}.8}.Rx.Rx.Ov+Ov+z<.7}.8}.Rx.Rx.8}.7}.z<.p.0d.0d.7}.z<.z<. Z Z Y% Y% x8 Rx.Rx.Rx.8}.7}.7}.z<.z<.z<.=L z<.z<.z<.z<.z<.z<.F{ x8 Z 7}.7}.7}.;q. Z 1x.Ys.Ys.Ys.`'+`'+`'+}P.b(+I0@MB ~w.J0@ v+]D #h.[2@K0@L0@Q8@M0@N0@O0@P0@Q0@R0@S0@T0@6>@U0@V0@W0@{[+{[+`}+t)+H,+nk+01@X0@X0@Y0@Z0@`0@ a@.a@+a@@a@3h+lw+$s+$s+V1+$q+0y+fD+fD+FD+Jl+tr+tr+ED+ED+Rt+L)@tr+Jl+Il+Il+g~+:w++my+ny+}=@}=@1R+up+up+-w+-9@-9@I6@]/+Sl+>k+/6+/6+/6+$a@gi+)k+1]+Bt+z;@,m+%a@&a@ #+wL.!V..^+-l ,9@*a@=a@36.zn+qh |3+#v #v Z 7}.,v.ZY 7}.z<.Y% x8 x8 Y% z<.7}.Rx.Rx.Rx.Rx.Rx.Rx.", "he ;_ lo.f@ ie ke lo.je je je je je je je E7 M_ ^% U% U% ,% >% ,% U% U% U% U% ^% ,% ,% >% >% [9.p} xn.!B n V5.-a@TV.;a@>a@+b ,a@'a@df+)a@!a@~a@{a@]a@3d+4T+(f+^a@jV+-'@-'@!P+gp+Ht+[R+29@/a@X4@(a@L<@K<@11@11@_a@_a@|9@:a@ .@ T$ ;b.&5 != <| nf 'i.U_ N_ y% =^ =^ =^ o^ 6[ 6[ 6[ {@ {@ ]+ ]+ j+ j+ H. 0# G{ &5 &5 n3 n3 ~_ ~_ ~_ {_ n3 &_ ~_ &5 W_ n3 &) o3 .* .* .* .* .* .* .* ti ui * .# .# m* }| ti 2% 2% .* .* .* .* * m* .# .# m* t& T@ '. N M@ r9+oa@Db F.@pa@T*+:B '8.d3@&;+qa@{`.[U+V*+ZL ra@ps.sa@XR ta@ua@va@wa@8% xa@ya@8%.za@Aa@1o.L7.Ba@{C.;f.aD.{d.6).3:.ap.n[.]f.ud.'t.'t.'t.',+Ca@pY X..rQ.n$.n$.rQ.qQ.+D.*T .D..D..D..D..D..D..D.*T FU GU .D.*T *T GU FU Pp.rQ.+D.-c.-c.^@.X..X..X..# .[o.Y..Y..hZ L@.1W QX ~>.(H #G R}@Da@Ea@Fa@a5+FY.I|@K|@Ga@g1+(X.Cg.zg.Jk.Jk.Jk.Jk.k=+T++M#+'S.Ha@Ia@Ja@Ja@Ka@La@Ma@R9@Na@Oa@Pa@0|.Qa@Ra@Sa@Ta@^W Ua@Va@Wa@Xa@Ya@Za@`a@ b@.b@+b@@b@#b@$b@%b@S:@If BN &b@Et *b@]r =b@-b@;b@AJ+6R.FM._T.|t .s 2' F> (,@fw Xr qG e{@qG Xr qG Xr Y:@;! ;! ;! W:@+~ W:@W:@W:@+~ +~ +~ t! t! X:@X:@X:@X:@X:@X:@X:@X:@r[@r[@_|@>b@<|@sG _|@+~ (|@X:@(|@r[@[|@rG (|@W:@/|@+~ @~ +~ (|@r[@(|@t! <|@rG _|@X:@(|@r[@:|@rG (|@X:@_|@r[@:|@>b@[|@rG _|@r[@_|@r[@(|@X:@/|@t! :,@va ,8 ZA <,@<,@:,@ZA va va va ZA ZA ZA ,8 _,@]|@(7 (7 ;! <,@<,@;z so fp 4m jB |t 9v ,b@hw S9 C6 *K.y[ l.@y-.j|@{<@'b@)b@!b@`3@/N+sg+42@{6@i8@~b@{b@]b@^b@]6@u{.g0.b4@/b@/b@!i `G.`G.]h (b@wn sm _b@:b@. $.D0.D0. $.,}.!_.z].j,.A].l&.N-.e3.s(.+1.:%.j,.:%.N-.N-.[o./@.c3.%_.3;.nt+mS.EA EA ZS+8*@Qb@Rb@Sb@Sb@-s.lS.@R+uV 3w.Tb@,X+Ub@D0@Vb@_] Wb@Xb@Yb@Zb@=| V% /= X[ h*.z<.7}.z<.z<.8}.%U.8}.8}.8}.13+8}.13+{! 13+z<.z<.7}.7}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.0d.Rx.Rx.Rx.Rx.Rx.Rx.%U.Ov+Ov+Rx.8}.8}.i~ i~ 9Y+9Y+9Y+9Y+be+be+@$+@$+@$+@$+80+80+F=+qK.qK.`b@8}.8}.8}.8}.8}.8}.8}.8}.7}.7}.7}.7}.7}.7}.7}.7}.8}.8}.Yt.8}.8}.8}.8}.8}.7}.7}.7}.7}.8}.90+8}.8}.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.`Y 8e.gA w8.w8.8g.i~ i~ Yt.Yt.a(+a(+a(+a(+,S+UH.8}.X[ ,8+k#+cE M~.#;.AF X9. c@@R .c@+c@IV @c@mr.#c@$c@%c@&c@*c@=c@-c@;c@>c@/h+)a+{a+dB+,c@}h+1h+'c@kR+kD+P3+x&@_o+)c@!c@~c@{c@]c@^c@/c@(c@(c@y&@N3+'G+G)@iD+iD+ep+WA+Kl+FD+FD+|R+Jl+Jl+tr+tr+ED+0=@K@@6T+&N+_w+_w+;m+|6+(w+Y.@*>+0G+>B+0G+*>+;B+9G+lX+lX+>B+>B+>B+P)@t<@ny+ny+ny+Z.@K@@K@@K@@K@@my+;B+*>+*>+0G+>B+>B+>B+ZK+Q)@s;@s;@s;@ZK+9G+3 @8$@9$@Z.@Z.@Z.@Z.@L)@<&@_c@:c@vr+Q0+}]+Tt+Tt+8X+-2+~/+m8+dd+E:+Pg+(+@$4+f~+3X+d~@N.}c@Pf R9 }/ D;@|c@1c@2c@3c@ZU.j@++2 Sx.@$+.Z YY gA 7}.z<.z<. Z Z Y% Y% x8 Y% Y% Y% Y% Y% Y% ", "ke 2b lo.f@ ie le up.je je je je je je je E7 O6 U% 9& U% ,% ,% ^% 9& U% U% U% ^% ^% ,% ,% D yk [9.fe sk n R4.pi 4c@5c@6c@7c@|] 8c@9c@0c@!V ac@bc@B&+k:+2]+5a@x@@)P+Jn+6X+0y++w+#w+]V+cc@dc@ec@ec@G+Ct+X}+,G+VA+In+G)@M&+N&+O&+jm+im+hm+O3+lw+$s+br+W1+$q+$q+In+WA+0y+|$@5a@5a@5a@VA+|$@`v+`v+X}+1Z+$5@7a@8a@9a@i9@[8+aa@ba@nc@oc@ea@' t% 4{ )= BW xk XG.M=.y% =^ =^ =^ o^ o^ o^ o^ m@ m@ j+ j+ j+ +# 9# +# G{ &5 &5 n3 n3 ~_ ~_ ~_ W_ n3 &_ ~_ &5 W_ n3 t% o3 .* .* .* .* .* .* .* ui 5[ * 2% 2% * 5[ ui .* .* .* .* .* .* .* .* * * * fd fd 2% i> ^% ~ _|.vY.Wf Ac@Bc@I%+B%+3{+Cc@&;+Y +[U+27+-E.B%+qs.C9+Wd.Dc@Ec@Fc@Gc@gj+fR Hc@lQ.Ic@Vh.N7.j}+Jc@&G.~d.!d.3z. c.V2.f<.m[.Ff.Gg.Kc@3a.Lc@Lc@4a.Mc@$_@qQ.rQ.rQ.qQ.[H *T .D.*T *T *T *T *T +D.+D.+D.*T +D.+D.[H [H +D.*T *T rQ.+D.GU &T .D.*T .D.SX @[.j,.:%.N-.jZ jZ Mo.a<.PX FU *N d5+cm.Nc@Nc@8H yf.Cg.`j.Jk._X.Dg.yf.Bf.`j.`j.`j._X.Jk.(X.k=+I3@Oc@Pc@Qc@Rc@Sc@La@Tc@Uc@Vc@Wc@Xc@Sa@Yc@Zc@`c@ d@.d@+d@@d@#d@$d@%d@&d@*d@=d@-d@;d@>d@,d@'d@)d@va Sj !d@~d@js /8@Pn mY.{d@]d@ib@^d@w/@^c C/ so 1k y, Y:@W:@+~ +~ W:@W:@Y:@+~ W:@Y:@;! ;! Y:@W:@+~ W:@W:@W:@+~ +~ t! t! t! X:@X:@X:@X:@X:@X:@X:@X:@X:@t! t! r[@rG sG r[@+~ X:@t! t! X:@>b@>b@t! W:@t! W:@Y:@+~ r[@>b@r[@X:@rG >b@X:@t! t! X:@r[@>b@X:@r[@r[@r[@>b@rG rG rG >b@r[@r[@r[@X:@X:@t! t! :)@:,@va va <,@:)@<,@va :,@:,@va va ZA ,8 ,8 Sr /d@(d@ 9 (7 ZA 1k t/@tK _d@0_@V!@v/@+Z>+<}+od@Wv.3{+ZR.Z>+3{+3{+Z>+Ww._y.{z.U3.+P 6l 9l 6$.pd@qd@'l :4@rd@sd@td@ud@q'+vd@wd@wd@xd@WZ !#.(8@(8@L5@yd@zd@Ad@3b@Bd@Cd@Dd@Ed@Fd@Gd@Hd@Id@Jd@Kd@y3.Ld@Md@Nd@Od@Pd@Qd@Rd@Sd@Td@Ud@Vd@nc.Wd@$&+Xd@6^.){.4H J|@Hk.Yd@wI Zd@`d@ e@.e@+e@.e@oH.@e@Q8.-{.[).-{.%'.O8.X` p5.T` e3. $.sA+/H /H .C0.C0.C0.!_.e3.!_.N-.l&.A].j,.N-.!_.N-.l&.l&.:%.N-.N-.:%.{` EP |%.P%.p$.|%.mS.>s.E*.ul.ul.TU+#e@1S $e@Rb@@R+p4.%e@E7.&e@*e@=e@-e@[{ K_ W[@R/@! .C{ Z* V5 X[ Y% z<.7}.z<.z<.8}.Ov+8}.8}.8}.8}.8}.8}.8}.8}.z<.z<.7}.7}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.8}.8}.Lh+Lh+Lh+Lh+{! {! 13+13+13+13+80+2^ F=+F=+F=+F=+8}.8}.8}.8}.8}.8}.8}.8}.z<.z<.z<.z<.z<.z<.z<.z<.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.7}.7}.7}.7}.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.=L w8.'> '> '> be+{! Yt.Yt.i~ i~ ):+):+;e@;e@;e@):+7}.oh 90+>e@`#+ H 3I m $Z f7.DF ,e@'e@)e@30@!e@~e@:Z+{e@]e@^e@/e@0Z.(e@_e@:e@Ni+W8+V<@Y8+Od+Wp+im+&-+,P+&E+D6@+9$@4e@P,@P,@P,@P,@<&@<&@5e@#k+vr+vr+I6@I6@Tt+^_+$4+_6+ _+ _+E:+6e@fi+Xg+f~+~V+7e@8e@9e@0e@>N.%V.ae@M^ 3r be@ce@de@ee@fe@ZU.j@+[U Sx.@$+.Z `Y gA z<.z<.z<. Z Z Y% Y% Y% x8 x8 Y% Y% Y% Y% ", "le he lo.:| ie le up.je je je je je je je E7 x5 9& Q% Q% U% ^% U% Q% U% U% U% U% ^% ^% ^% D Wl yk 5c N6 .n ge@he@ie@je@ke@le@|] 84 me@:- ne@oe@pe@UM+LK++k+9y+kV+fp+Jn+6X+WA+(T+~P+ZM+qe@re@se@te@ue@ue@ve@we@xe@ye@}9@hc@:a@1}@fr+Mn+_V+[T+Nb+Nb+^_+^_+_T+_T+R0+R0+z@@z@@y;@y;@wr+X{@ze@Ae@q8+;m+(w+&N+S.+}a@;m+&N+(w+(w+&N+;m+S.+}a@|6+|a@k}@k}@lc@lc@lc@lc@$5@$5@//+w@@w@@e)+Be@mc@[$@Ce@4a@De@Ee@Zv+Ct+0}@X}+,G+VA+In+G)@'G+N&+O&+Si+Si+$s+V1+%s+%s+W1+$q+In+In+0y+0y+VA+5a@5a@5a@VA+VA+Dt+Dt+X}+1Z+lc@7a@8a@9a@Fe@Ge@aa@ba@ca@8e@He@e~@Ie@lT+Je@Ke@<8+Le@Me@23@tc@Ne@Oe@wc@Pe@b_@)<@di G3 Qe@Re@Pf Se@m* T_+,&+&% =] ;b.&5 4{ bl+8$+N/.Q_ =^ =^ =^ o^ o^ o^ o^ U@ U@ +# +# .# .# $& .# G{ &5 &5 n3 n3 ~_ ~_ ~_ &5 ~_ &_ ~_ &5 W_ &5 Y_ o3 .* .* .* .* .* .* .* 5[ fd .* 2% 2% .* fd 5[ fd fd * .* .* 2% U@ U@ 5[ * .* .* * * U@ l& U% 7 Te@MC.| .Ue@np.x9@vo./z.{`.Ve@~1+bQ.d_.A%+Y*+}i.zu.=h.fr We@Xe@Ye@o% Ze@JT.`e@u&.dD.9, O7.6J.{C.{C.Qz.Pz.,f.m[.m[.td.db.{s.}.j,.:%.N-.@ .,}.EE Tq.iD Mo.]o.83+mt+ f@ f@Nc@zg.zg.yf.yf.yf.Bf.wf.Af.Cg.Cg.Cg.Dg.`j._X.Jk.K3@.f@Rc@+f@@f@#f@$f@#f@S9@N9@%f@0|.Qa@&f@*f@=f@-f@;f@>f@,f@'f@)f@!f@~f@{f@]f@^f@/f@(f@_f@:f@jx b@rG r[@t! t! +~ +~ t! r[@r[@t! W:@+~ W:@Y:@+~ r[@rG >b@r[@r[@X:@X:@t! t! X:@r[@>b@r[@r[@>b@>b@>b@rG rG rG >b@>b@>b@r[@r[@X:@X:@X:@TH :)@:,@<,@s! s! :)@:,@<,@<,@:,@va ZA ,8 Sr V-@ 9 O9 O9 9 ,8 :t Ld Ok d!+t'+~0@iw px g{@f9 2A._Q.b9 _Q.=<@uW.{<@pq 1f@[d@2f@|d@3f@cd@EI.7V.NL.#X.4f@-/@.5+5f@6f@t#+D).+m.xC wC d_.0'.S[.7f@I<.8f@+M OZ OZ 3_ `l.uC uC 9f@}K.6Y }B ub@0f@af@bf@cf@df@ef@ff@gf@hf@if@jf@jf@kf@lf@lf@lf@mf@mf@nf@jp.of@[$+of@pf@qf@pf@co.qf@rf@i7@rf@pf@P4@pf@sf@{`.bQ.3Y 7(.lt .sA+sA+sA+vl.zv+^H ,s.5v.c3.88.88.88.]` r$.)*.}%.eZ eZ eZ 9h.3p.;t.le.le.3p.k[.QM Mh.k[.3p.;t.x7..$.D0. $.D0.D0.{>.gZ L@.iZ iZ L@.L@.gZ hZ {>.+1.e3.s(.!_.:%.A].A].A].z].:%.l&.l&.N-.z].z].N-.b3.{` /@.vY p$.]>.'0.58.%g@^r+ul.ul.&g@*g@1S W*@n^+p4.$&@>$@=g@He+Ie+-g@;g@p4@>g@,g@C{ Q7.;. !_ cN Z 7}.7}.z<.z<.8}.Ov+8}.8}.8}.8}.8}.8}.8}.8}.z<.z<.7}.7}.8}.8}.Rx.Rx.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.'g@'g@'g@'g@]! ]! ko.ko.ko.ko.2^ 2^ F=+Tx.Tx.Tx.8}.8}.8}.8}.8}.8}.8}.8}. Z Z Z Z Z Z Z Z 8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.8}.7}.z<.z<.z<.7}.7}.7}.7}.7}.7}.7}.7}.7}.7}.7}.7}.7}.7}.7}.@$+@$+vn.)g@)g@13+ko.Rx.Rx.z<.z<.;q.;q.^D.^D.^D.;q.8}.oh +3 @3 @9G+9G+9G+lX+lX+ZK+ZK+Q)@Q)@Q)@ZK+9G+0G+9$@4e@Z.@Z.@P,@P,@L)@L)@;w+-w+fy+fy+-9@-9@}]+O0+Lb+<]+Fg+Fg+E:+6e@>k+_6+f~+>G+>c@Y @9e@4g@sL.5g@ae@M^ |/ 6g@7g@8g@ee@9g@wi 0e.[U Sx.@$+.Z `Y gA z<.z<.z<. Z Z Y% Y% Y% x8 x8 x8 Y% Z Z ", "ie le up.lo.ie ie up.je je je je je je je E7 >' Q% i> Q% U% U% 9& i> U% U% U% U% U% U% ^% }# Wl Wl 4c $~..n ge@0g@ag@5c@ke@bg@cg@dg@eg@fg@a{.!+@gg@=}@hg@~V+.w+ig@'G+!P+A$+WA+ay+@w+{P+jg@kg@lg@lg@mg@ng@og@ve@xe@xe@|9@:a@.&B.bD.&B.Pz.P>.m[.n[.El.m9.',+b@r[@t! t! W:@W:@+~ X:@r[@X:@+~ +~ W:@Y:@+~ >b@sG rG >b@t! t! t! t! X:@X:@r[@r[@>b@>b@>b@>b@rG rG rG rG >b@>b@>b@r[@r[@r[@X:@X:@[f s! :)@:)@TH TH s! <,@:)@<,@:,@va ZA Sr V-@V-@/d@ 9 O9 (,@,8 t/@tK Ok |/ aj ;h@)<@X!@ B x9 2A.bT+(Q.r'+t9@>h@]<@&z..gZ L@.D .D .iZ # .gZ :%.+1.s(.s(.z].j,.A].A].z].:%.j,.:%.+1.!_.!_.z].b3.b3.Y..5#._a.6#.6#._a.[a.ZT TU+TU+Uh@*g@1S Vh@{U.p4.n)@H7.N|@eg+Wh@h6@Xh@9k Yh@J/ Q7.k* b. [| cN Z 7}.7}.z<. Z 7}.Rx.8}.8}.8}.8}.8}.8}.8}.8}.z<.z<.7}.7}.8}.8}.Rx.Rx.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.7}.7}.8}.8}.Rx.Ov+Ov+%U.;~ ;~ ;~ ;~ 5A.5A.NM+NM+cI+NM+Zh@2^ Tx.Tx.u=+u=+8}.8}.8}.8}.8}.8}.8}.8}.z<.z<.z<.z<.z<.z<.z<.z<.8}.8}.8}.8}.8}.8}.8}.8}.%U.Ov+Rx.8}.7}.z<. Z Y% 7}.7}.7}.7}.7}.7}.7}.7}.7}.7}.7}.7}.7}.7}.7}.@$+13+)g@)g@)g@13+13+8}.8}. Z Z `Q `Q 75.75.75.`Q 8}.c8 2^ >p.i; :U >&+Hi.%p.`h@y,@ i@5'..i@+i@@i@#i@$i@%i@&i@*i@O{@3^@=i@=*@Md+kf+W8+^a+Y8+Od+DX+nk+(V+`I+-i@;i@!c@2e@2e@>i@}e@,i@2e@'i@)i@!i@+3 @9G+9G+9G+9G+9G+9G+lX+lX+ZK+ZK+ZK+lX+lX+>B+9$@4e@Z.@Z.@P,@P,@L)@L)@up+-w+.B+#k+~i@-9@^_+Zg+Yg+xb+Dg+@_+cd+$a@Sl+lD+/_+Zv+{i@]i@^i@/i@*[@5g@/z 1/ |/ (i@be@_i@:i@' Q% i> Q% U% U% 9& i> U% U% U% U% U% U% 9& ,+ Wl yk 4c .h.+n ge@i..lj aJ.^*+[i@}i@|i@1i@2i@Wk.3i@4i@a)+5i@_|+6i@7i@kV+cr++w+uI+ay+@w+Gt+qI+8i@se@se@ng@9i@ve@|9@0i@fc@we@ai@9i@bi@bi@69@69@/G+Mb+Mb+^_+^_+_T+_T+vr+vr+1V+y@@ry+nm++5@wr+ze@ci@J@@(w+(w+S.+}a@}a@(w+ny+S.+S.+;m+&N+&N+(w+_w+_w+k}@k}@lc@lc@lc@lc@$5@$5@q$@q$@ h+ h+Ce@[$@[$@di@hV+MK+MK+3~@Ee@>G+Ct+0}@}6+[6+{V+5a@In+$q+M&+M&+$q+$q+$q+In+In+In+In+ep+ep+ep+ep+ep+In+In+$q+lI+Dt+Dt+z~@z~@lc@6a@]3@8a@1w+rg@ei@>m+aa@}3@}3@fi@gi@hi@`.@ii@ti+ji@Y @13@ki@li@mi@aR.2*+$o+Xb+gW.V;.S$+V;.Y]@o9+3r ni@=@ 7e.hf.sS &% E7 9c 3c 7c ^{ d& _& _& o^ -^ -^ -^ 2% 2% +# .# .# m* b) m* G{ &5 &5 n3 n3 ~_ ~_ ~_ &_ ~_ n3 n3 n3 n3 &5 ed o3 .* .* .* .* .* .* .* * .* .* 2% 2% .* .* * 5[ 5[ fd * 2% U@ m@ m@ 5[ * U@ 2% * 5[ ui 5[ .* ` :l @n+oi@pi@W>+:*@qR qi@U*+>x+:}+0'.0'.:}+-E.~8.49.n{./y.w-.ri@si@ti@2.@gN.4x ui@c{+3-.wx.a,+vi@;'.m;.*1.v!+ux. =.p&.p[.d,.w+.M@.+$.3q.b@>b@>b@>b@>b@>b@>b@>b@t! W:@Y:@W:@X:@r[@r[@t! t! +~ Y:@+~ X:@>b@r[@X:@t! +~ W:@t! >b@sG rG >b@t! t! X:@X:@r[@r[@>b@>b@rG rG rG rG rG rG rG rG rG rG >b@>b@>b@r[@r[@r[@Zi@[f s! s! TH TH s! <,@<,@<,@:,@va ZA ,8 Sr Sr ;! (7 Sr ,8 Lc Dn `i@ZZ }/ !4+ j@,o Ay ;z..j@Xb+b_@nB.yR.j@,j@'j@d3@d3@*;+)j@!j@!j@~j@GT.{j@r{.]j@WL+aQ.z2.^j@/j@(j@_j@:j@{,.!h.+`L o:.-g `5@qj@c{ 6e cf T$+U;.r'+r'+rj@f_@(T.X!@h9 pO.sj@tj@uj@vj@kG lt so.k!+wj@co.2s.xj@o8@yj@zj@Aj@7U.Bj@ph@T! ji Gi F> Cj@Dj@Ej@Fj@Gj@Hj@Ij@ j.Jj@;_.-_@Kj@y3@zi@bh.Lj@Mj@Nj@Oj@Pj@Qj@Rj@Sj@Tj@Uj@Vj@G7@E7@E7@y3@53+I3@J3@U[@cK.Wj@Wj@-K Et.A .Av+.$.xE.D0.b3.b3.b3.B7+{D+(6.(6.v>.k[.;t.;t.k[.k[.3p.3p.;t.le.;t.k[.;t.QM RM RM iI iI x7..$. $. $..$.x7.D0.C0.# .D .v+.D .L@.gZ /.:%.!_.s(.!_.N-.:%.:%.+1.N-.N-.z].e3.s(.e3.+1.s(.E1.^Z /@.~_.~_.78.Q%.`S+`S+:a.^r+Xj@Xj@Uh@+(.@R+[^+& @t}+Yj@Yj@Vb@Zj@`j@Xb@b<@E= Y e. I- [| h*.z<.7}.7}. Z Z 7}.Rx.8}.8}.8}.8}.8}.8}.8}.8}.z<.z<.7}.7}.8}.8}.Rx.Rx.7}.7}.7}.7}.7}.7}.7}.7}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.7}.7}.8}.8}.Rx.Ov+Ov+%U.;~ ;~ ;~ ;~ 5A.5A.NM+NM+cI+NM+Zh@2^ Tx.Tx.u=+u=+8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.8}.8}.8}.8}.8}.8}.8}.%U.Ov+Rx.8}.7}.z<. Z Y% 8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.13+@$+vn.vn.vn.@$+@$+7}.7}. Z Z `Q `Q 75.75.75.`Q 6=+ k@.k@Qe+a. R9.c^+1,+%p.o8.+k@@k@GK+#k@cP+$k@%k@%i@&i@&k@1~@*k@{i@'a+=k@!a+]a+W8+^a+Od+Od+}h+Si+ >+`r+y&@-k@;k@>k@,k@,k@'k@)k@>k@!k@u6+-k@/a+~k@1N+lw+br+M&+G)@ep+0y+FD+FD+|R+|R+Jl+tr+tr+ED+Z.@4 @4 @4 @4 @4 @4 @O)@ny+ny+ny+ny+4 @O)@O)@t<@4 @4 @ny+my+(w+&N+;m+;m+;m+&N+&N+(w+(w+_w+_w+Y.@0G+9G+9G+9G+9G+9G+3 @3 @lX+lX+9G+9G+9G+lX+lX+>B+8&@8&@0&@0&@0&@0&@{k@{k@up+-w+-w+up+~i@-9@/|+Zg+e~+o0+Dg+Rl+Sl+Xg+9X+)]+pd+RA+]k@^k@G~+-T.*[@@+@/k@eF.3r 6g@(k@x< @'+_k@vl+Re+ZQ Sx.=L .Z `Y w8. Z Z Z Z Z Z Z Z Y% Y% Y% Z z<.z<.", "xn.up.J6 xn.je xn.up.je je je je je je je E7 x5 9& Q% Q% U% ^% U% Q% U% U% U% U% 9& 9& 9& 6c ]= 5c 4c .h.@n :k@+Jq+}k@|k@fq.YL 1k@2k@8i+D,+Qt+6i@3k@ig@~P+(T+PK+PK+ay+nI+^P+4k@te@5k@9i@*@W.+De@De@>G+1Z+ak@p8+}6+[6+{V+5a@5a@5a@5a@In+In+ep+ep+ep+ep+ep+In+In+ep+ep+ep+In+W1+W1+lI+!-@z~@z~@{3@lc@g1@]3@=5@yr+rg@Ge@>5@aa@aa@>m+sd+) ++V*+:}+d_.d_.:}+{z.f1.ZL wm *} up )I+_h.nk@ok@pk@%@@@5.8}+@5.qk@62.m;.m;.vi@I!.5J.<-.<-.r'.q&.d,.a~.rY *5.+$.iZ .D..D.GU GU GU .D.+D.+D.qQ.qQ.[H +D.*T *T .D..D.qQ.[H *T GU &T FU FU FU a<.PX lD PX Mo.Mo.kD 9h.;t.v>.l4.s(.F0.,}.iD iD iD EE J` qL rk@rk@mt+mt+Cg.Cg.yf.zg.zg.zg.zg.yf.yf. j.Dg.`j.`j.Dg.Cg.L9@sk@Ma@tk@Og@85+uk@vk@~}.wk@xk@i~.;T x!.yk@zk@Ak@Bk@Ck@Dk@Ek@Fk@Gk@Hk@Ik@Jk@Kk@Lk@Mk@,G Nk@Ok@Pk@Qk@Rk@kx Kc T[ Sk@Tk@Uk@Vk@Wk@Xk@Lu }C e{@Yk@Tx u! W:@W:@W:@+~ t! X:@r[@(7 ]|@Y:@W:@+~ +~ +~ +~ +~ t! t! t! X:@X:@r[@r[@>b@>b@>b@>b@>b@>b@>b@>b@>b@X:@+~ +~ X:@r[@X:@t! r[@t! W:@+~ r[@rG rG >b@r[@X:@t! X:@>b@rG >b@X:@+~ t! r[@>b@rG rG rG rG sG sG sG sG rG rG rG >b@rG rG rG >b@>b@r[@r[@r[@Zi@[f s! s! TH TH :)@:,@va va va ZA ZA ZA ,8 ,8 W:@y, ZA 1k ;z gp >z d!+9v ,b@iw ZP.;z.z*@.j@cf Zk@mB.F[@`k@ l@a4@.l@+l@@l@m0@;g+Cc@+,+#l@$l@ff@4h@%l@&l@*l@*l@=l@-l@;l@>l@,l@'l@A'+A'+)l@!l@:6@dH+q{.=E.IW +M R[.(j@~l@{l@]l@^l@/l@z9+(l@_l@:l@_.ll+oi.x3@N9@Dl@El@Fl@Gl@Hl@Il@Jl@Kl@Ll@Ml@Nl@Ol@Pl@Ql@Ql@Rl@Sl@Tl@L/@Ul@Vl@a5+Wj@Wl@Xl@A .A .A .D0.D0.D0.EP EP b3.{D+(6.r9.@ .,}.eZ k[.le.Mh.QM QM 3p.;t.;t.9h.3p.Mh.QM le.x7.x7.2q.E0.D0.D0..$.2q..$. $.hZ L@.iZ iZ L@.# .m&.j,.+1.e3.!_.z].z].z].+1.z].N-.+1.e3.s(.!_.N-.s(.:R ui./@.{_.Ok.o&.78.jh.:r.`S+[a.ey ey *g@+(.M7+ 9.z.@Yl@Fv+Zl@de `l@ m@.m@!2 W% e. a. j; g7 61.z<.8}.7}. Z Z z<.8}.8}.8}.8}.8}.8}.8}.8}.8}.z<.z<.7}.7}.8}.8}.Rx.Rx.7}.7}.7}.7}.7}.7}.7}.7}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.'g@'g@'g@'g@]! ]! ko.ko.ko.ko.2^ 2^ F=+Tx.Tx.Tx.8}.8}.8}.8}.8}.8}.8}.8}.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.8}.7}.z<.z<.z<.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.13+13+)g@vn.vn.@$+=L z<.z<.z<.z<.;q.;q.^D.^D.^D.bE c8 E8+%! +m@:= <.+R1.*3.;3.@m@#m@3r+$m@%m@&m@*m@]=@=m@&k@-m@;m@>m@,m@'m@)m@S8+]a+'c+Od+Od+Od+}h+jP+Qi+Xp+dm+!m@~m@'k@,k@{m@,k@)k@'k@]m@!k@^m@/m@m(@Pi+lw+M&+G)@iD+T{@0y+FD+FD+|R+|R+Jl+tr+tr+ED+Z.@4 @t<@O)@ny+my+ny+O)@4 @4 @ny+ny+4 @O)@t<@Q,@ny+ny+my+my+_w+(w+(w+&N+&N+&N+&N+(w+_w+my+ny+*>+>B+lX+9G+9G+9G+3 @3 @3 @9G+9G+3 @3 @3 @9G+ZK+ZK+8&@8&@0&@0&@0&@0&@{k@{k@;w+-w+@k+@k+-9@-9@Ob+/f+s~@lD+<]+Lb+gi+_k+N0+<6+T.+U,@(m@}f+CU.YJ.)N.aF.y*@eF.G5 D;@_m@:m@!M._k@cn+ZU.ig Sx.=L .Z `Y 8g.Y% Y% Y% Z Z z<.z<.z<.z<.z<.z<.z<.z<.z<.", "dd o} dd 7c E7 g~ kC E7 E7 E7 E7 E7 E7 E7 E7 O6 >' L_ >' O6 O6 x5 L_ >' >' >' L_ L_ 6c 6c 6c r2.f+ >+ l:.2c E+.@T+E.zS.*{@yB.'l.rm@@{ sm@tm@um@vm@wm@fx xm@V%+|-.o;.72.J!.vi@R>.vx..=.3%.q&.$$.N@.C .a..$ .$ .*T .D..D.GU .D.*T [H qQ.+D.+D.*T .D.GU &T FU FU [H [H +D..D.FU ZF PX lD kD kD kD PX ZF Pp.Mo.IU 3p.B}.B}.B}.9h.F0.kD lD EE Tq.05+|b+Nc@rk@mt+mt+Cg.o}+o}+1l.1l.^i+^i+|l.~m.|l.1l.ym@ym@1l.|l.Gj+zm@Am@Ma@95+Lj@Bm@ek. N h,.ab.WA.C7.Cm@Dm@Em@Fm@Gm@Hm@Im@Jm@Km@Lm@Mm@Nm@Om@[6.Pm@Qm@Rm@Sm@Tm@Um@Vm@Wm@Xm@=! S-@5q Sv Ym@Zm@`m@`r cq Xr n@.n@+n@]J W:@+~ t! X:@X:@t! t! /d@]|@Y:@+~ t! t! +~ +~ t! t! t! X:@X:@r[@r[@r[@rG rG rG rG rG rG rG rG -! rG X:@t! X:@r[@X:@t! >b@X:@+~ t! >b@sG tG tG sG >b@X:@X:@>b@>b@r[@t! t! X:@>b@sG tG tG tG sG tG tG tG sG rG rG rG >b@sG sG rG rG >b@>b@>b@r[@Zi@TH :)@:)@s! s! <,@ZA ,8 ,8 ZA ZA ZA va va va <,@va ZA 1k :g gp >z d!+f{@v/@=y #;@@n@}a .j@#n@$n@%n@I[@&n@*n@Kx yv =n@_h@_C+w#+mm.-n@8h@6h@;n@>n@5j@,n@'n@)n@!n@~n@{n@hr.]n@^n@/n@/n@(n@/n@_n@EJ+>|.NW I<.I<.H<.G<.:n@'~.^A.gb@|i.f kT er.BJ+^Q+wn@;^+xn@;(+er.JH.yS.kG yn@zn@An@-K.Bn@Cn@Dn@En@Fn@Gn@Hn@In@Jn@Kn@Ln@E3@_g.75+Mn@Nn@On@Pn@Qn@Rn@Sn@Tn@Un@Vn@Wn@Xn@Xn@Yn@Zn@`n@ o@.o@+o@@o@#o@$o@L/@%o@H7+b5+93+93+kD lD PX 3p.9h.F0.!_.!_.!_.e3.s(.@ .,}.eZ k[.;t.le.le.le.,}.k[.;t.eZ eZ le.;t.eZ x7.2q..$..$..$.xE..$..$..$.D0.C0.hZ # .# .# .gZ A].:%.+1.!_.z].N-.N-.z].z].N-.:%.z].+1.+1.:%.A].A].+1.N-.sc.+k.#j.;*.h=.6#.6#.>s.^r+/r+td._r.;s.52.+T+g6@&o@*o@*o@^l.=o@-o@D9 f 3. (& !_ R9.}c.61.7}.8}.7}. Z Y% z<.8}.8}.8}.8}.8}.8}.8}.8}.8}.z<.z<.7}.7}.8}.8}.Rx.Rx.z<.z<.z<.z<.z<.z<.z<.z<.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.8}.8}.Lh+Lh+Lh+Lh+{! {! 13+13+13+13+80+2^ F=+F=+F=+F=+8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.7}.7}.7}.7}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.ko.Zh@;o@;o@;o@80+5D+o@d6+wq #< W)@,o@'o@Z[ yo.)o@!o@~o@{o@]o@P5+^o@/o@:N+;m@(o@_o@:o@B+lX+lX+9G+3 @3 @3 @f^@9G+3 @3 @f^@3 @9G+ZK+Q)@9=@9=@O)@O)@0=@0=@6o@6o@hy+1R+=w+=w+sp+sp+^/+/|+Zg+e~+od+Mb+t&@8X+G:+l0+Bt+cp+7o@8o@T)@YJ.)N.FC.y[ eF.V: 7g@_m@H[ l*.9o@5n+ph ig Sx.=L s6 `Y 8g.Y% Y% Y% Z Z z<.z<.z<.8}.8}.7}.z<.z<. Z ", "kC f^ dd 7c E7 dd dd E7 E7 E7 E7 E7 E7 E7 E7 M_ x5 >' >' O6 M_ O6 >' >' >' >' L_ 6c 6c ,' ,' I) '= f+ l:.1c U@.0o@ao@,~ bo@k]+J* }m@W= co@do@eo@fo@go@'[+2V+ho@3k@Ti+}R+Kl+fD+z@@WA+cr+:o+:R+<9@5k@ai@:a@3}@11@_a@7m@io@;:@:a@<9@7k@[G+69@/G+N0+N0+;2+^_+_T+}T+fy+fy+FD+|R+H6@H6@L@@O,@8m@~B+L@+(w+my+_w+&N+;m+&N+_w+my+my+(w+;m+}a@|6+lc@y~@e1@e1@}a@}a@}a@}a@T.+T.+//+//+q$@ h+[$@Be@2a@jo@0m@>*@Q@+Yv+'}@'}@Bt+)[+3a@3a@ak@ak@p8+}6+}6+}6+[6+[6+|$@|$@|$@VA+VA+VA+$q+In+ep+ep+Jn+G)@M&+_u+A=@V;@@5@@5@bm@bm@sy+g1@ko@lo@ty+Fe@i9@Fe@:7@yr+- +- +mo@}|+Y.+no@[3@|_+oo@v<@d_+vi+Oe@po@qo@ro@so@Pe@R$+to@uo@9v 3r $S vo@/*@wo@!& 0@@c> o3 A{ &- *- Y^ Z^ y% u% =] -h T$ T$ .@ .@ +@ +@ S# J- G{ &5 &5 n3 n3 ~_ ~_ ~_ |% &_ &5 &5 ~_ ~_ W_ Hs o3 .* .* .* .* .* .* .* fd fd 5[ 5[ 5[ 5[ fd fd Y_ Y_ o3 o3 o3 o3 =5 =5 o3 Y_ Y_ o3 ed ed o3 M$ m@ ui Z% ,. -k |8 ku xo@yo@o!@>8.lt Qh+c3@V*+FT.J<.;(+er.72@8p }=.GJ+'} zo@Ao@lq+Bo@Co@a7+a5@Do@Eo@+4.K!.-1.72.m;.~t..=.q&.p&.q'.se.**.a..$ .a..+D.*T .D.GU .D.+D.qQ.rQ.*T .D.GU &T FU Pp.ZF ZF GU GU GU &T ZF kD Tq.jD iD EE kD Mo.FU &T Pp.4W F0.s(.B}.v>.3p.eZ kD PX b@>b@X:@+~ t! r[@rG tG -! -! -! tG -! tG tG sG sG rG rG >b@sG sG rG rG >b@>b@>b@>b@:e TH :)@:)@:)@:)@:,@ZA Sr Sr ,8 ZA va :,@:,@<,@<,@va G> 1k gp ({+-p@t'+0v ox zy 6,@$;@2a |a #n@;p@>p@,p@'p@)p@Jx `L _h@C++!l@!p@~p@{p@{p@]p@2l@^p@/p@(p@_p@:p@4l@q@,q@'q@)q@!q@~q@{q@]q@^q@/q@(q@_q@:q@s. WZ 7q@8q@9q@0q@o6@aq@p6@bq@cq@;m@dq@eq@fq@g4+I^@'u+U8+^a+'c+Od+Od+Y8+Y8+k(@gq@hq@iq@2o@jq@)k@{m@3o@4o@kq@'k@{m@]m@>k@lq@m(@1N+br+iD+Jn+6X+0y+uI+FD+FD+|R+|R+Jl+tr+tr+ED+Z.@t<@Q,@O)@(w+;m+&N+my+t<@O)@4 @ny+ny+O)@Q,@5o@my+my+my+my+ny+ny+ny+ny+(w+(w+_w+my+ny+4 @O)@>B+>B+lX+lX+9G+3 @3 @f^@f^@9G+3 @f^@f^@f^@9G+ZK+Q)@mq@9=@O)@O)@0=@0=@6o@6o@,w+#B+=w+(|+lr+|]+^/+Ob+O0+Zg+O0+^_+Tt+^/+Rn+//+Yv+nq@oq@pq@qq@,4+&*+bF.s| 1/ 3q rq@_m@6f b: sq@|r+wi ig Sx.=L s6 gA 8g.x8 Y% Y% Z Z z<.z<.7}.Ov+Rx.8}.7}.z<.Y% ", "x5 x5 M_ M_ 6c 6c x5 x5 x5 x5 x5 x5 x5 x5 x5 9c 7c E7 E7 E7 E7 g~ dd dd dd dd g~ g~ g~ g~ x5 ]= ,+ ,+ S% r& U@.SK.tq@#'+ww.=Y.uq@eq.vq@wq@xq@yq@.f+D&++N+}6+ J+zq@kV+ay+Aq@Bq@:&@PK+(T+gp+F,@fr+/a@:a@ai@og@ve@0i@6k@=3@|1@L<@[1@fr+(G+(G+{G+Mb+Mb+^_+^_+_T+_T+vr+vr+y@@1V+-(@b&@0$@O,@ze@;7@J@@(w+(w+(w+(w+(w+(w+(w+(w+(w+&N+;m+S.+}a@|6+|6+GD+GD+S.+}a@|a@lc@1Z+1Z+ h+ h+ h+q$@[$@mc@mc@Cq@)[+)[+)[+)[+)[+)[+4a@4a@2]+(/+d[+~V+W}+W}+~V+_|+=4+p8+{V+[6+[=@vI+4X+VA+In+In+iD+iD+fp+fp+fp+Dq@y=@c9@sk+|o+%5@>7@k}@Ut+=!@ko@Eq@Fq@8a@Gq@ x8.uM w4.w% j% w% cl+vv+8H.f% &) ~_ 4{ 4{ 2{ 3{ ,;.4{ 3{ &) &_ &_ ~_ n3 n3 &5 n3 n3 n3 n3 n3 n3 n3 o3 =5 .* 2% .* 5[ ui 5[ * 5[ 5[ fd fd * .* .* 2% t% ~_ ~_ n3 n3 &5 &5 W_ {_ W_ n3 ~_ ~_ n3 W_ ac fd fd O) @% 6. o%.bg )9 i]@]r _k wm aj+ZL d_.p:.BJ+dH+>|.Vv.F<.xn 5'.uu Uq@=7.Vq@j,@Wq@Xq@Yq@k'.Eo@Zq@8:.K!.K!.`q@+=..=.g<.bn.t_.wd.{g.>>.V).7..GU GU .D.*T *T +D.[H qQ.+D.*T .D.GU FU ZF a<.Mo.Pp.ZF PX EE EU EU iD Mo.kD kD iD EE Tq.Tq.}W k[.F0.Q:./Z E1.F0.@ .iD jD EU EU J` J` 8H rk@ r@.r@o}+Hk.r@,r@'r@)r@!r@~r@{r@]r@^r@,d@Rm@/r@(r@_r@:r@b@sG sG rG r[@t! +~ +~ t! X:@r[@>b@>b@rG rG sG sG sG sG >b@r[@X:@t! r[@rG >b@r[@X:@>b@sG rG rG rG rG rG rG rG rG >b@rG tG -! -! tG rG >b@-E -! tG rG rG tG -! -E sG sG sG sG sG sG sG sG 2r@[f :,@:,@TH TH va Yq :,@va ZA ZA va :,@<,@:)@:g If il If ({+@^+-p@9v 4L.,o 40 DS+3r@4r@Uu (+r{.OZ *s@{j {h =s@48@$G+-s@Q:+66+;s@>s@,s@'s@)s@!s@~s@{s@]s@^s@/s@(s@_s@:s@.gZ L@.N-.N-.N-.N-.:%.l&. /.m&.sc.sc.sc.sd.`^.m&.A].l&.Z{.4^.]-.h&.A]. /.m&.`^.Th.~_.j].1%.n(+e,.eb.o[.U%+tF.is@dD.ce #' js@J8@$^+[@ A. :. ', `'+b^+},+61. Z z<.z<.z<.7}.7}.7}.%U.Rx.7}.z<. Z z<.7}.8}.Rx.8}.7}.z<.z<.7}.8}.Rx.z<.7}.8}.8}.8}.8}.7}.z<.7}.7}.8}.8}.Rx.Ov+Ov+%U.7}.Ov+%U.8}.Rx.|f.|f.Ov+'g@'g@'g@'g@]! ]! ko.ko.13+ko.ks@'U.ls@`b@F=+Tx. Z z<.z<.7}.8}.Rx.Rx.Rx.7}.7}.7}.7}.7}.7}.7}.7}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.8}.8}.7}.7}.z<.=L 5D+d6+E8+<4+Sx.Qe+>p.>p.Ys.+s.xF xF |c.$J.`#+},+N)+)- '- ms@ns@os@Gs+4S+ps@qs@rs@ss@ts@43@us@vs@ws@xs@ys@^L+zs@As@Bs@Tp+]a+xG+Cs@ 9+`8+ 9+Ds@Es@Fs@K^@`8+Z8+Gs@Hs@Is@Js@Ks@Ls@Ms@Ns@Os@Ps@Qs@Gs@}h+Ti+$s+M&+M&+M&+In+T{@z@@z@@fD+FD+wI+Jl+tr+ED+0=@O)@O)@O)@O)@O)@O)@O)@4 @4 @4 @4 @4 @ny+ny+ny+(w+_w+_w+my+ny+4 @4 @O)@&N+&N+(w+_w+my+ny+ny+0G+0G+3 @f^@~-+~-+f^@3 @9G+9G+lX+Q)@ZK+9G+3 @lX+ZK+8$@8$@*>+*>+ny+ny+w)+w)+vD+vD+sr+oy+Tn+Sn+lr+Ob+_T+b$@b$@Q0+G:+2Z+(_+^+@D,+Rs@Ss@Ts@Us@Vs@A(@C;@S1 &7 3q be@Ws@Xs@U& Ys@Zs@j@+[U u=+s6 .Z be+YY Z Z Z Z Z Z Z Z z<.z<.z<.z<.z<.z<.", ">' >' M_ M_ L_ L_ O6 x5 x5 x5 x5 x5 x5 x5 x5 9c 7c E7 E7 E7 E7 g~ dd 7c 7c 7c E7 g~ dd dd dd ,+ ,+ 9& S% r& ]* SK.`s@e3+m# i( t@.t@+t@-Y @t@#t@7i+B,+$t@,G+V0@%t@1N+A$+|R+&t@Jl+fD+}R+dr+5X+fr+/a@:a@7@bm@k}@|w+(7@(7@^3@]3@h9@h9@h9@_7@P.+EI+Hq@Iq@|P+Jq@=t@-t@7Z.v<@;t@1k+>t@,t@'t@4|+)t@} +Qq@`D.!t@pB.~0@X7@F5 ~t@HW.Im E# ll..o ~% Ml r: -J.I> +h..h.%% &) ~_ 4{ 4{ 2{ 3{ ,;.4{ 2{ &_ &_ ~_ ~_ ~_ ~_ ~_ n3 n3 n3 n3 n3 n3 n3 o3 ac * .* .* fd 5[ fd .* * * * * * fd fd ed ~_ ~_ ~_ n3 n3 &5 &5 &5 {_ W_ n3 ~_ ~_ n3 W_ {_ =5 * O) O) +. R@ A@ {t@ft nu yq._k o|@49.,~.f1.BJ+>(+>|.-E.ZL 'E.(y.xo.+B 3: ]t@[~.^t@/t@(t@i-@2C+_t@M!.wx.:t@K!.[-.vx.U).q&.se.V).tY f,.+[.% .+D..D..D.[H n$.nN.n$.qQ.&T &T FU Pp.ZF a<.Mo.Mo.PX PX lD EE EU EU EE lD Tq.}W jD .E1.v>.F0.,}.Tq.jD jD EU qL J` mt+rk@ r@.r@o}+}l.Xj.@N '}.Ph.Xj.@N Wf@Ph.Ph.Hk.Xj.@N }l.@r@[t@}t@Bm@)}.iL |t@Kk.Pb@#r@1t@2t@3t@4t@5t@6t@7t@8t@9t@9t@0t@at@bt@ct@dt@et@ft@gt@$b@ht@it@L~ jt@kt@lt@@p@@p@}u }u (t /t y, /t mt@$p@.n@^M |r@vy }u Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@W:@W:@+~ t! t! X:@X:@t! r[@rG sG sG >b@X:@+~ t! t! X:@X:@r[@>b@>b@>b@>b@r[@r[@r[@r[@X:@X:@X:@t! r[@rG >b@r[@r[@>b@sG sG sG sG sG sG sG sG sG >b@rG tG -! -! tG rG >b@-E -! tG sG sG tG -! -E tG sG sG rG rG sG sG tG .~ [f :,@<,@TH TH :,@V-@:,@:,@:,@:,@:,@va va va jl Tj Jf 1u =l X7@&y ,b@nt@zy bf h .2=.ot@e{ pt@qt@rt@d4@7r@[h@st@'~.8A.tt@ut@vt@wt@xt@yt@zt@At@Bt@Ct@cp@Dt@Et@5l@cj@bj@Ft@Gt@mf@oj@Ht@It@nr@pj@Jt@@X.*;+27+[U+dH+^z.~j@GT.Kt@Lt@Mt@Nt@Ot@Pt@Qt@Rt@St@Tt@Ut@Vt@Wt@Xt@Yt@Zt@`t@Hr@ u@.u@+u@@u@#u@$u@%u@&u@*u@=u@-u@;u@>u@,u@'u@,u@)u@+u@!u@~u@`t@{u@]u@^u@/u@(u@Vw.pN `r@ s@6G._u@!|@:u@a3 ;J U} Re f Dw ]V mT ;l.Jp@|u@/B c[ 1u@2u@]<@{<@b_@]b ;s@3u@4u@5u@6u@7u@8u@9u@BE 0u@au@bu@cu@du@eu@fu@gu@hu@iu@ju@ku@lu@mu@nu@ou@pu@qu@ru@su@tu@uu@vu@wu@xu@yu@zu@Au@Bu@Cu@yI 7H I7+J7+vA+*N vA+Mo.a<.ZF @[.dZ @[.j,.:%.3p.eZ F0.eZ 9h.9h.F0.IU k[.9h.eZ ,}.IU IU ,}.F0..$..$..$..$..$..$..$..$..$..$..$.E0.D0.C0.{>.hZ N-.:%.l&.A].m&.m&.`^.`^.sd.sd.sc.sc.sc.`^. /.A]._%.(%.X#.Y#.z].j,.m&.sd.vY ;*.58.1%.5r.U).El. =.U%+^C.%j.%j.QG.o1.Du@Eu@^(+#$ k. l. Gs `'+b^+`'+)J. Z z<.z<.z<.7}.7}.7}.Ov+Rx.8}.z<.z<.z<.7}.8}.Rx.8}.7}.z<.z<.7}.8}.Rx.7}.8}.Rx.Rx.Rx.Rx.8}.7}.Rx.Rx.Rx.Rx.Rx.8}.8}.8}.7}.Ov+%U.8}.8}.[y+|f.Rx.'g@'g@'g@'g@]! ]! ko.ko.@$+13+Zh@ks@`b@qK.F=+Tx.Rx.Rx.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.8}.8}.7}.7}.z<.6=+80+d6+d6+E8+Qe+u=+>p..F.Ys.+s.dT dT |c.yF yF R!+c' Fu@|r+Gu@ns@#f I.Hu@Iu@Ju@Ku@ts@ek@Lu@Mu@Nu@Ou@Pu@Qu@,m@Ru@a(@Sp+{a+Qd+^a+ 9+ 9+ 9+ 9+Su@Tu@Fs@Ds@.9+Uu@Ps@Os@Ls@Js@Vu@Vu@Wu@Xu@Ms@Yu@Zu@a4+DX+Ri+M&+G)@G)@iD+T{@WA+z@@z@@fD+FD+wI+Jl+tr+ED+0&@4 @4 @4 @4 @4 @4 @4 @ny+4 @4 @4 @4 @4 @4 @4 @my+my+my+my+ny+ny+ny+ny+(w+(w+_w+my+ny+4 @4 @>B+>B+9G+3 @f^@f^@3 @9G+lX+9G+lX+Q)@ZK+9G+3 @lX+ZK+8$@8$@*>+*>+ny+ny+w)+w)+vD+vD+1R+sr+mp+mp+ L+sp+fy+fy+vr+=w+lr+3$@qd+> +C,+`u@ v@.v@+v@{>+HR.(Q.s| U} jB Zm@(k@IY+X@ sq@@v@0e.[U u=+Is s6 be+pj Z Z Z Z Z Z Z Z z<.z<.z<.z<.z<.z<.", "9& 9& >% >% U% U% '$ ^% ^% ^% ^% ^% ^% ^% x5 7c ie ie je je xn.xn.xn.he ke le ie je xn.J6 kC ,+ O 9& S% R& ]* SK.hO.$a+c* `_ #v@$v@%v@=E.&v@*v@=v@E&+M@@_ @-v@%t@1N+iD+fD+<&@Jl+fD+(P+@w+oI+fr+/a@:a@v@,v@,v@#5@''@>7@89@89@bm@k}@lc@6a@6a@7a@'v@'v@)v@!v@~v@{v@]v@^v@/v@(v@& +_v@:v@9e@43@H.6v@l` m` 4=+-_ 0c W5 W5 }4 S_ 'i.W5 5! ~_ ~_ ~_ ~_ &_ &_ &_ n3 n3 n3 n3 n3 n3 n3 o3 ac * .* .* fd 5[ * 2% 2% 2% .* * fd 5[ 5[ .o ~_ 0c 0c A^.A^.X_ X_ X_ l.7v@A^.0c 0c A^.7v@{_ =5 * ed fd .* ` %@ A@ 8v@PY Ne.4< Iv+49.z#+:}+ET.,(+_y.!8.-^+*E.Aq.4i.9v@sx 0v@av@h'.r#@bv@|C+ui@+5.A<+M!.8:.>'.}-.[-.bn.NE Xm.Oq.V).t'.y_.3..*T .D..D.[H 4#.nN.rQ.*T a<.a<.Mo.Mo.PX lD lD lD Tq.EE kD iD }W }W Tq.iD PX lD kD iD Tq.}W EU ;t.k[.v>.B}.l4.9h.3p.jD b@rG sG rG r[@t! +~ r[@r[@r[@r[@>b@>b@>b@>b@X:@t! +~ W:@W:@t! X:@r[@t! r[@rG rG r[@r[@rG tG tG tG tG tG tG tG tG tG rG sG sG tG tG sG sG rG -! -! tG sG sG tG -! -! -! tG rG >b@>b@rG tG -! .~ [f <,@<,@TH TH :,@Sr :,@<,@:)@:)@<,@va ,8 V-@Ld Mz B6 ro @(+-p@!4+'<@AJ.X!@R&.c| Cv 6D+,4@Lt /2@Iv@`3@qh@Jv@st@QZ W2+Y7+Kv@Lv@Mv@Nv@Ov@Pv@bj@Qv@Xr@Rv@0n@Sv@Sv@:p@ch@Tv@[p@-n@Uv@nj@dh@mm.+,+&;+Jt@Ep@GT.Y +;^+]`.Vv@Wv@Xv@Yv@Zv@9n@`v@ w@.w@+w@@w@@w@#w@$w@%w@&w@*w@=w@-w@;w@>w@,w@'w@)w@!w@~w@{w@!w@]w@^w@/w@(w@_w@:w@<@y*@@<@hw@iw@jw@kw@lw@mw@(R nw@ow@pw@qw@rw@sw@tw@uw@vw@ww@xw@yw@zw@Aw@Bw@Cw@Dw@Ew@Fw@Gw@Hw@Iw@Jw@Kw@Lw@Mw@Nw@Ow@Pw@Qw@Rw@Sw@Sw@xI OT.).+T++k=+k=+lI i,.i,.YP YP C_.r(.eZ F0.F0.9h.3p.9h.,}.jZ F0.,}.IU @ .@ .IU IU ,}.E0.E0.D0.D0.D0.D0.D0.D0..$..$..$..$..$.E0. $.C0.!_.z].j,.A].m&.m&.m&. /. /.`^.sc../../.sd.m&.A].[..)_.T` T` U` (%.l&.m&.[o.Df.;*.Th.e,.3%.p[..=.62.Tw@Uw@Vw@G% Ww@~;+e!+' v (. <* dE $J.b^+`'+)J. Z z<.z<.z<.7}.7}.7}.Ov+Rx.8}.7}.z<.z<.7}.7}.Rx.8}.7}.z<.z<.7}.8}.Rx.8}.Rx.Ov+Ov+Ov+Ov+Rx.8}.%U.%U.Ov+Rx.8}.7}.7}.z<.7}.Ov+%U.7}.8}.[y+[y+Rx.'g@'g@'g@'g@]! ]! ko.ko.=L =L 80+2^ qK.qK.F=+F=+[y+%U.%U.Ov+Rx.8}.7}.7}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.8}.8}.7}.7}.z<.6=+2^ D8+D8+d6+u=+Tx..F.@A.>p.>p.`'+}c.|c.|c.B|.:U )' Xw@Yw@Zw@be.Ia+`P.JA+`w@ x@.x@+x@@x@)*@#x@$x@%x@&x@,m@Ru@a(@0(@Ni+lf+pf+^a+ 9+*x@*x@*x@=x@Tu@-x@;x@>x@,x@'x@)x@!x@~x@{x@]x@]x@!x@^x@/x@(x@94+3h+)G+G)@Jn+Jn+Jn+0y+uI+z@@z@@fD+FD+wI+Jl+tr+ED+Z.@ny+ny+ny+ny+ny+ny+ny+my+ny+ny+4 @O)@O)@t<@t<@ny+ny+ny+ny+my+my+my+my+_w+my+my+ny+4 @O)@t<@P)@P)@lX+9G+9G+9G+9G+lX+ZK+9G+lX+Q)@ZK+9G+3 @lX+ZK+H@@H@@*>+*>+*>+*>+w)+w)+vD+vD+vD+)w+Lt+Lt+Wn+_x@#k+:x@#k+-w+wD+A@@H,@0r+K.eF.}/ w8+D;@1x@t] 9g@2x@eb+ZQ u=+Is s6 8g.pj Z Z Z Z Z Z Z Z Y% Y% Y% Y% Y% Y% ", "Q% Q% >% >% ^% ^% E# ^% ^% ^% ^% ^% ^% ^% x5 g~ ie ie ie xn.xn.xn.ie ke ke le le ie je je E7 ,+ d+ 9& r& R& ]* tq@hO.3x@9_+o> 4x@5x@6x@QZ 7x@8x@=v@At+'}@Hn+zq@9x@kV+Jn+FD+{k@Jl+fD+(P+@w+Ht+fr+0x@hc@:a@ve@ve@ye@fc@we@v@,v@ax@ax@''@''@''@>7@bm@bm@{3@lc@lc@d1@1Z+d1@bx@d2+d2+!v@!v@{v@cx@ID+dx@He@ {@Lu@f>@ex@37@fx@/i@ #+rL.w@+|-+gx@!%@fW.uo@hx@+/@V2@ix@jx@kx@^# 0, lx@>H.i% g% 6v@4=+g% -_ 0c W5 W5 }4 S_ 'i.W5 G{ n3 n3 ~_ &_ &_ &) &) n3 n3 n3 n3 n3 n3 n3 o3 =5 .* 2% .* 5[ ui 5[ * .* .* .* * fd fd fd ac n3 A^.A^.A^.A^.A^.A^.A^. l.7v@A^.0c 0c A^.7v@{_ =5 * =5 ac ed U@ d+ u+ F[ 0_.IZ mr.IM+Qh+ZL mx@V*+-E.9A.'8.H%+j!+}i.,l.r:.nx@ox@px@Vq@dN.[`.qx@xa@{.@<_.A<+M!.U>.7v.rx@*.+J:.s_.w_.;}.t'.z_.H@.&T .D.+D.[H *T &T FU Pp.Mo.PX lD kD iD EE Tq.}W jD Tq.kD lD iD EE EE iD iD kD lD lD PX Mo.a<.4W le.v>.s(.s(.3p.le.b@X:@+~ W:@>b@>b@>b@>b@>b@>b@>b@>b@X:@t! W:@Y:@Y:@t! >b@sG X:@>b@sG rG >b@r[@rG tG tG tG tG tG tG tG tG tG sG sG sG sG sG sG sG sG -! tG tG tG tG tG tG -! -! tG rG >b@>b@rG tG -! Rx@[f :)@:)@TH TH <,@ZA :,@:)@s! s! :)@va V-@p| ;[ <7 Pk }t |/ 0_@0v iw @I.50 !#.+3 8$.Rm Sx@Tx@]2@L5@Ux@Vx@Wx@Xx@Vv.Yx@Zx@`x@n3+ y@*Z.Ov@.y@Pv@+y@@y@#y@9l@7l@$y@%y@&y@*y@=y@jq.nm.nm.-y@y#+;y@W +E++A'+D++>y@Y7+Y7+,y@'y@)y@!y@~y@xr@{y@]y@^y@/y@(y@(y@_y@:y@.{>.C0.C0. $.D0.D0.D0..$..$.xE.xE.xE..$.E0.E0.s(.e3.!_.z].N-.:%.j,.l&.l&. /.sd../../.sc.m&.aR h&.w'.(%.Y#.[..Y#.N-.:%.[o.h=.n&..k.sD r'.p&.vx.-1.ZO.Pm.#z@`3.$z@%z@=@ '$ Z d# Fs B|.`#+b^+yF )J. Z z<.z<.z<.7}.7}.7}.Rx.Rx.8}.7}.7}.7}.7}.7}.Rx.8}.7}.z<.z<.7}.8}.Rx.Rx.Ov+Ov+%U.%U.Ov+Ov+Rx.Ov+Ov+Ov+Rx.8}.8}.8}.7}.7}.Ov+%U.7}.7}.%U.%U.8}.'g@'g@'g@'g@]! ]! ko.ko.O4 O4 6=+5D+Tx.F=+F=+F=+%U.%U.%U.Ov+Ov+Rx.Rx.Rx.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.8}.8}.7}.7}.z<.6=+qK.>@+D8+D8+Tx.Tx.@A.*; >p..F.2q@},+|c.B|.B|.6H.oz.Rj+27.5e.ev &z@Vi@*z@=z@i$+-z@;z@>z@,z@'z@C[+)z@!z@As@~z@Sp+!a+lf+rf+jk+Od+*x@Ds@Ds@Ds@Es@{z@-x@-x@]z@^z@/z@(z@]x@~x@_z@_z@:z@:z@^x@+*>+*>+*>+w)+w)+)w+)w+!w+!w+Vn+Un+Un+Un+<&@<&@;w+1R+S.@}z@+N+|z@1z@2z@3z@Y)+e=@HG.w +X} Pd A%@`W Z4 7g@-J is.4z@5z@ZU.ig u=+Is Is 8g.pj Z Z Z Z Z Z Z Z Y% Y% Y% Y% Y% Y% ", "Q% Q% >% >% ^% ^% E# ^% ^% ^% ^% ^% ^% ^% x5 dd je le ie xn.J6 je le je je je ie le le ke 8c ,+ d+ d+ R& R& ]* `s@+%+6z@;)+,o+7z@8z@9z@0z@az@bz@=}@cz@dz@Hn+ez@}o@O&+A$+:&@fz@Jl+fD+Kl+(T+!G+fr+0x@L<@hc@we@ve@xe@ye@we@.l4.B}.;t.Mh.}H }H jD No.Y*@Dz@ f@Ez@Ez@sQ.Xj.Fz@Gz@dv@hv@gv@Fz@Hz@Iz@tx@cv@Jz@8U+ux@Kz@Kz@Lz@Mz@wx@Nz@:U.TX Oz@Pz@Qz@Rz@Sz@Tz@Uz@Vz@Wz@Xz@Yz@Zz@`z@ A@U3 r) O1 ^1 Yq Sr H5@Nx@.A@#] +A@L~ @A@=! #A@$A@u! *8@%A@%A@ n@%E mt@mt@/t (t |u Y:@t! t! t! t! t! t! t! t! r[@r[@r[@r[@r[@X:@X:@X:@sG sG rG rG >b@X:@t! +~ X:@r[@r[@r[@>b@>b@>b@>b@rG r[@t! +~ +~ r[@sG -! X:@>b@sG sG >b@>b@sG -! rG rG rG rG rG rG rG rG sG sG sG sG sG sG sG sG tG tG tG -! -! tG tG tG -! tG rG >b@>b@rG tG -! Zi@[f s! s! TH TH :)@:,@<,@:)@s! TH :)@ZA Yq p| h< Pk Fj Ej G5 3u 'y {z f9 60 &A@9] '2@,4@]<@(O.Sx@]<@$G+[f@|m+vm ,x+A4.*A@=A@n3+-A@It@mr@mr@Nv@;A@dr@Pv@.y@>A@,A@'A@)A@ej@kn.!A@~A@'j@.g.`>+d3@nm.E<@{A@]A@^A@/A@/A@o8@(A@_A@:A@+ji {z K0 D6 (G F~ L1 q[ }} S: P3 66 86 _( eG+h9 e{ FA@GA@HA@rs DQ+o*@IA@JA@v~ ii 6|@50 (T.;l (G 89 3C ,{ KA@LA@MA@2<.nz e[.NA@OA@PA@QA@RA@SA@TA@UA@VA@WA@XA@YA@ZA@`A@ B@.B@+B@@B@#B@$B@%B@&B@*B@Uy@=B@-B@;B@.z@>B@Ul@,B@'B@)B@G3@I3@K3@I|@ym@o}+5H TP TP TP zf.3p.9h.eZ 3p.k[.3p.F0.@ .@ .@ .@ .IU IU IU IU IU # .gZ hZ C0. $.E0..$.xE..$.xE.2q.2q.2q.xE..$.E0.+1.!_.s(.s(.e3.+1.:%.j,.j,.A].m&.sd.sd.`^. /./%.i&.)>.w'.x].Y#.Y#.(%._%. /../..k.;(.AY.gb.g<.+=.o;..4.9' n% {;+!B@~B@6& Q% h+ cT k@.|c.`#+ H yF )J. Z z<.z<.z<.7}.7}.7}.8}.8}.8}.8}.8}.7}.z<.z<.Rx.8}.7}.z<.z<.7}.8}.Rx.Rx.Ov+Ov+%U.%U.Ov+Ov+Rx.7}.8}.8}.8}.Rx.Ov+Ov+Ov+7}.%U.Ov+7}.7}.Ov+Ov+z<.'g@'g@'g@'g@]! ]! ko.ko.=L =L 6=+5D+u=+Tx.F=+F=+Rx.Rx.Rx.Ov+Ov+%U.%U.%U.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.8}.8}.7}.7}.z<.6=+qK.{B@a/+a/+-T+-T+7-+:P.Zs.!N+I0@b(+6H.6H./[.]w.!b+MV ]B@^B@TM./B@>h@(B@_B@}v@:B@% >% U% U% '$ ^% ^% ^% ^% ^% ^% ^% x5 o} je ke le J6 up.je he up.J6 xn.je ie le ke 0' ,+ d+ d+ R& R& `s@`s@lB@)- mB@Y2@nB@oB@pB@qB@rB@sB@=}@c)+'}@Hn+ez@|N+nk+A$+:&@fz@Rt+5T+z@@(T+!G+fr+0x@L<@L<@we@ve@tB@xe@|9@:a@:a@[1@[1@^V+Mn+q;@Mb+Mb+^_+^_+_T+_T+vr+vr+fD+z@@d^@y;@X{@b~@pg@ci@J@@(w+(w+(w+(w+(w+(w+(w+(w+(w+(w+&N+&N+&N+&N+&N+*t@*t@S.+S.+S.+S.+d[+T.+ h+ h+ h+q$@[$@mc@mc@gz@|$@|$@T{@|$@|$@|$@|$@[6+*4+[6+{V+[6+[=@vI+[=@}6+_|+3a@ak@T.+2V+Il+1V+4X+A$+6X+!P+!G+km+'P+'P+`p+uB@vB@,3@wB@wB@wB@h.:y.b| p%+UB@VB@gj+((+F'+WB@XB@+5.q;.yd.@=.!e.~u.uc.vd.k].LV.YB@ZB@0^.hV.]X.3#.rQ.ZF kD PX FU Mo.PX lD iD Tq.}W jD jD Tq.kD Mo.Mo.lD iD iD iD EE EE Tq.}W }W EU EU ;t.;t.E1.E1.od.le.le.C@,C@'C@)C@!C@~C@7B Lj {C@Pi r4 :m 3m Yq Sr H5@]C@^C@Fv@/C@(C@_C@7, VH (t *8@:C@Yk@Yk@%E %E u! /t (t (t _t _t X:@X:@X:@X:@X:@X:@X:@X:@r[@r[@r[@>b@>b@>b@>b@>b@rG rG rG >b@r[@X:@X:@X:@W:@+~ t! X:@r[@>b@>b@rG sG rG >b@r[@r[@rG sG -! r[@rG sG sG rG >b@sG -! rG rG rG rG rG rG rG rG tG sG sG rG rG sG sG tG sG tG -! -! -! -! tG sG sG sG sG sG sG sG sG sG :e [f [f TH TH s! s! :)@:)@:)@s! :)@<,@ZA V-@T} Bm B6 }t Ej |t p_ ,o @;@y9 2)@e{ Uu D@,D@'D@)D@!D@.B@~D@{D@]D@^D@/D@(D@_D@Xy@:D@B+ZK+Q)@Q)@Q)@Q)@ZK+lX+9G+lX+Q)@ZK+9G+3 @lX+ZK+cB@cB@9G+9G+0G+0G+mX+mX+~w+~w+dB@sD@op+op+Un+,w+|R+|R+Jl+g~+m;@V_@|~+tD@uD@2W.vD@-T.uL.~N.z +IW.CL.kB@d!+W3@Ym@s`+1* _k@Gu@ZU.ig Qe+oh s6 {! gA Z Z Z Z Z Z Z Z Y% Y% Y% Y% Y% Y% ", "U% U% >% >% 9& 9& ,% ^% ^% ^% ^% ^% ^% ^% x5 f^ je ke le J6 up.je 2b J6 J6 J6 xn.je ie ie 7c ,+ d+ d+ R& R& `s@`s@lB@l# Lq+wD@xD@S6@yD@zD@AD@BD@CD@F&+)[+9y+zq@|N+nk+Jn+FD+{k@Rt+QK+FD+}R+gp+fr+0x@K<@L<@|9@ve@DD@tB@we@r+@[+WD@-_ 0c W5 W5 }4 S_ 'i.W5 2{ &_ &_ ~_ ~_ ~_ ~_ ~_ n3 n3 n3 n3 n3 n3 n3 o3 ed .* 2% .* fd ui fd * fd fd fd * * * * =5 &5 X_ X_ A^.A^.0c 0c 0c l.7v@A^.0c 0c A^.7v@{_ &5 o3 v% I> ':+(s.{t.b/ i> f$ 'k XD@YD@p&@#i.ZD@r#+`R.`D@TB@rh@rh@ E@.m.Zf.yu.QI Pz .E@4/ +E@l_.@Q Bz@Cz@&=.q;.8:.|-.O2.Q2.w1.u_.v_.s+.@E@#E@$E@X).n$.+D.&T Pp.ZF ZF ZF kD kD kD kD iD iD iD iD iD lD PX lD iD Tq.Tq.EE a<.Mo.PX lD kD iD EE eZ 3p.od.R:.w6.QM ;t.jD No.No.E@Rh@,E@'E@)E@Oz@!E@~E@{E@]E@^E@/E@(E@_E@:E@^4+U:+b@rG rG sG sG rG >b@>b@r[@r[@r[@r[@>b@]|@;! Y:@+~ X:@r[@rG rG sG sG sG rG rG rG rG rG r[@rG tG tG rG rG sG -! sG sG sG sG sG sG sG sG -! tG rG >b@>b@rG tG -! sG tG -! -E -E -! tG sG >b@rG tG -! -! tG rG >b@[f [f [f [f TH s! s! TH s! :)@<,@:,@va ZA ,8 .r Cn ro 3r G5 hw K0 ya RM.x9 .j@F@,F@'F@)F@!F@~F@{F@]F@^F@/F@(F@_F@:F@% >% Q% Q% ^% ^% ^% ^% ^% ^% ^% ^% x5 f^ xn.ke le J6 up.ie 2b xn.xn.xn.xn.xn.J6 J6 dd ,+ d+ e+ R& R& ]* `s@yA+l# 5 +^- EF@FF@,9.GF@HF@IF@8i+LK+>G+.w+JF@KF@Y5+'G+uI+:&@wI+fD+K,@ N+nI+ip+t~@u^@u^@:a@ai@og@og@og@ai@0x@[1@hp+^V+q;@/G+Mb+Mb+^_+^_+}]+_T+vr+vr+fD+z@@y;@y;@wr+b~@0$@K@@J@@(w+(w+(w+(w+(w+(w+(w+&N+(w+(w+(w+(w+(w+(w+(w+_w+(w+&N+;m+S.+}a@ak@~V+ h+ h+ h+q$@q$@mc@//+l0+T{@6X+6X+6X+T{@T{@T{@T{@y@@VA+lI+5a@|$@|$@lI+UA+q8+|6+lc@*7@q8+wr+ry+[o+pk+LF@MF@NF@+q+@q+`I+@a@s$@71@HD@HD@Vd+Td+Sd+Sd+nw+K&+Hn+Dt+5a@{V+O,+']@OF@ID@PF@ID@QF@QF@RF@SF@;5@<3@fm@TF@UF@LD@!5@!5@VF@WF@XF@YF@ZF@r'@`J.++@(B+qZ.5|+>N+5e+`F@`F@ G@.G@-{ +G@>] mq+>r+he A^.-_ [4 W5 W5 }4 nq+'i.|4 3{ 3{ 2{ 2{ 5! n3 n3 &5 n3 n3 n3 n3 n3 n3 n3 o3 Hs 5[ * * fd * 2% m@ 2% .* .* * fd fd 5[ ac W_ X_ X_ A^.A^.0c 0c =_ l.7v@A^.0c 0c A^.7v@{_ ed o3 f% v% -J.':+-J.u% U@ *+ et go @G@VV.P+.^y+4K #G@[7+s#+$G@$G@TB@D).x%.dY+/i.Hk %G@Dg@]}+&G@1*@cA.WB@*G@=G@8:.8:.].@8r.fb.;(.S{.)H.aK.XP 0Z m$.B_.kD ;5.Pp.3..Pp.5..Tq.]}.iD Ua.lD D_.Mo.4W kD IU lD iD }W jD EU Tq.G@,G@.g@'G@)G@!G@~G@3R {G@]G@^G@/G@(G@_G@:G@8 H5@%~ Gv@#] {M ZA ,J 2k UH SC ^0@mt@ n@*8@mt@/t (t _t 5, ,J ,J Xr +~ +~ +~ +~ +~ +~ +~ X:@X:@r[@>b@rG sG tG -! >b@r[@r[@r[@r[@>b@>b@rG /d@(7 ]|@W:@t! r[@rG sG sG sG sG sG sG >b@r[@X:@r[@rG tG tG rG rG tG -E ;E ;E Rx@;E Rx@;E Rx@;E .~ ;E :e UH [f hB Rx@ds rG 5G@6G@Fu Fu 6G@5G@7G@*8@:C@6G@Du Du 6G@:C@*8@r[@UH hB UH Yr e{@Yr UH e{@qG _t y, ZA G> ZA G> t) t) 7s D%@4u 0j bv an ji SU.dj 1a >y._Z.8G@:c 9G@:c Jo 2u@vj@ss+LO.0G@Tk.A4.aG@`z.B4.Vk.bG@|u.cG@(A@dG@-A@|t.a@+;l@>y@gr.qf@>l@jp.eG@eG@|0+Z7+eh@0@+fG@gr.gG@}t.dC@hG@iG@jG@kG@lG@dE@mG@nG@oG@pG@qG@rG@7y@dy@sG@tG@uG@hA@vC@vG@FC@wG@xG@yG@zG@AG@BG@CG@DG@EG@EG@FG@GG@HG@IG@JG@KG@LG@MG@NG@sA@OG@PG@QG@ME@RG@SG@TG@&: (q UG@VG@WG@XG@3v@wz@1L.YG@Mc ZG@Ti ;[ il Jf )8 ro kB@bk 8O.0R+#3 sX+r'+!y |@@f3 ye w eG+5L.`G@ZP.Lw bv gw |/ ro T: H@[n N9 (m .H@+H@@H@#H@$H@%H@&H@*H@=H@-H@;H@>H@,H@'H@)H@!H@~H@{H@]H@^H@/H@(H@_H@:H@.hZ Q:.s(.N-.l&.:%.e3.:R 4v.m&.A].N-.!_.e3.!_.+1.(%./%.^a._%._%./%.R*../.Sh.;(.jA.7r.7r.3:.`b.Vb.8H@`e@V>.F' 9H@$z@0H@3( L_ +# F{ `Q E- E- `#+%J.yF )J. Z z<.z<.z<.7}.7}.7}.7}.8}.Rx.Ov+Rx.8}.z<.Y% Rx.8}.7}.z<.z<.7}.8}.Rx.z<.7}.8}.8}.8}.8}.7}.z<.%U.Ov+Ov+Rx.8}.8}.7}.7}.7}.%U.Ov+z<. Z 8}.8}.Y% ]! ]! 'g@]! ]! ]! ko.ko.aH@bH@ks@2^ 80+u=+80+80+Rx.Rx.Rx.8}.7}.z<.z<. Z 7}.7}.7}.7}.7}.7}.7}.7}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.8}.8}.7}.7}.z<.=L k@cH@dH@<4+<4+Qe+>p.Zs.Q5 !N+b(+lz.!J.gy.eH@dX #E.fH@gH@hH@iH@jH@i2@kH@lH@mH@nH@oH@pH@g2+N~+qH@F=@rH@sH@tH@uH@vH@5B@wH@ 9+j(@iF@xH@=x@K^@Cs@Cs@lF@^:@92+EX+yH@zH@pF@pF@AH@BH@pF@CH@DH@EH@EH@94+Up+U;@Dq@LF@A$+A$+uI+Kl+PK+z@@fD+wI+wI+Rt+ED+ED+O)@O)@O)@O)@O)@O)@O)@>B+R,@R,@R,@P)@P)@P)@P)@P)@0G+*>+*>+*>+;B+;B+;B+Y.@Y.@;B+;B+*>+0G+lX+P)@ZK+3 @x)+DD+2T+Q)@ZK+9G+3 @9G+lX+Q)@ZK+9G+3R+lX+ZK+R)@R)@R)@N.8F.$K.H3 JH@U} }t `W Ym@ck 4V Ux.KH@5z@00+ZQ 3x.Is w8.Ea+Yt. Z Z Z Z Z Z Z Z z<.z<.z<.z<.z<.z<.", "^% ^% ^% ^% ^% ^% ^% ,% ^% 9& Q% Q% 9& ^% O6 E7 E7 E7 g~ dd dd kC kC 7c 7c 7c 7c 7c 7c 7c L_ =+ N@ e+ R& r& ~* ~* ,1@n# [4+LH@MH@NH@x;.OH@PH@QH@RH@SH@ h+n<@TH@UH@;'@q;@Ll+u)+R0+VH@p;@}G+69@#w+er+:R+F,@WH@XH@YH@ZH@YH@cc@`H@29@5X+:o+~G+]G+N0+[]+)k+%4+ o+t)+$>+h @%>+(|+fD+z@@vI+vI+5T+J@@J@@(w+(w+(w+(w+(w+(w+(w+(w+(w+(w+(w+(w+(w+(w+(w+K@@Il+=4+p8+H:+2V+2V+H:+g~+2V+=4+}6+51@>3@51@[6+y@@T{@ep+$q+$q+$q+In+ep+T{@T{@T{@T{@T{@T{@T{@nm+qk+ I@ I@ I@ I@ I@.I@+I@+I@+I@@I@@I@#I@$I@d9@e9@%I@&s+mw+x^@x^@sf+_u+0>@0>@9y+V1+Hn+In+VA+$q+&I@y^@{3@|w+Q<@*I@-*@lo@@=I@^k@13@rc@13@23@-I@ia@43@)m+R]+;I@la@>I@,I@;[@w}@Gh+M+@r| 99 yb Q^ )@ -~@'I@24 sq.]b+U_ nq+)I@s.+!I@~I@p3 p3 p3 p3 p3 4{ 4{ 4{ 2{ 3{ &) &) 5% v% I> -h Y_ * fd 5[ 5[ fd * 2% 5[ 5[ fd fd * .* .* o3 W_ &5 ~_ &_ &_ ~_ &5 W_ O9.|x.;b.W_ n3 ~_ &) &) =] -h fL.fL.fL.I> n3 Y_ +# @. G;.5-.>V Y4+s;.Tf nR cH+zu.B).Z*+SE+vo.{,..m.'h.{I@]I@^I@]S+/I@75@Wa+(I@_I@@Q :I@ZO..H}.gb.vd.2p.m$.|&+{}.)H./a.C_.w'.z_.n/.,>.2Z . .2Z Ua.x].YP bb.Ua.<..;t.Q:.;t.;t.;t.;t.jD jD No.}H Y*@J` !0+Y*@ f@05+e|.S` l+.Q*.Va.^d.Va.Va.7R GE .G SM uj.xf.Af.Af.-_.tj.Eg.TJ+Rp.WM gL [I@}I@|I@1I@2I@3I@4I@5I@6I@7I@8I@9I@0I@aI@bI@cI@dI@eI@fI@gI@hI@iI@jI@Me 9F :t x, 5, y, (,@7, 36 7, (7 (7 ]|@]|@G0 kI@lI@O9 ;! _t qG X:@+~ W:@W:@mt@;! ]|@(7 (7 ]|@Xr Yr uG t! X:@r[@r[@r[@t! W:@Y:@Y:@+~ r[@sG tG sG rG >b@_|@:|@[|@$4@$4@[|@:|@_|@^|@^|@/|@(|@_|@:|@:|@[|@-! tG sG rG >b@r[@X:@X:@-! -! -! tG tG tG sG uG ll ll mI@ll mI@ll mI@ll ;M Qv mI@0> nI@ll ;M Qv RC oI@oI@Tx Tx pI@pI@Yk@oI@oI@oI@oI@oI@oI@qI@qI@Zy rI@~A `y Tx pI@sI@tI@Hz 8q [u [u 3' O1 o| uI@{4+vI@S:+f1 C2 .q ~( $s &< wI@wI@!|@!|@SM.7L.-*+pO.U7 xI@^O.yI@>f 2_ B5.W7..i..i.^1.zI@zI@AI@BI@)/.CI@DI@EI@FI@GI@HI@II@JI@KI@br@LI@Ft@hl@5C@Ft@4s.0b+0b+in.MI@|u.s5+NI@OI@PI@zp@QI@RI@SI@TI@UI@VI@WI@XI@YI@YI@ZI@`I@ J@.J@+J@@J@#J@$J@%J@&J@*J@=J@-J@;J@;J@>J@,J@'J@)J@!J@~J@{J@]J@^J@/J@(J@_J@:J@.d3.b3.le.9h.9h.;t.k[.F0.F0.3p.F0.9h.k[.k[.9h.F0.,}.,}.9h.3p.F0.jZ jZ ,}.jZ SX M-.@[.4W jZ ,}.3p.F0.>}.!_.:%. /.sd.5p.E}.e<.0,+Z*.42.$:+%1.=1.Hg.DJ@*$.hY.<4 Lr+EJ@FJ@0H@!1.u% .s.Yt.]$@$U.g*.)J.2<@.$+8}.8}.8}.8}.8}.8}.8}.8}.8}.7}.z<. Z z<.7}.Rx.%U.8}.8}.8}.8}.8}.8}.8}.8}.z<.7}.7}.8}.Rx.Ov+%U.%U.8}.8}.7}.7}.z<. Z Z Y% Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.7}.8}.6g+%U.%U.Ov+8}.7}.8}.Rx.%U.[y+[y+Pj+Rx.8}.%U.Rx.8}.7}.7}.8}.Rx.%U.7}.7}.8}.8}.Rx.Ov+Ov+Ov+%U.8}.z<.7}.Ov+%U.Rx.7}.Rx.7}.z<.z<.8}.Rx.8}.z<.7}.7}.8}.8}.Rx.Ov+Ov+%U.Rx.Rx.Rx.8}.7}.z<.z<.=L Zl r,@GJ@]%@Ks @$+,8+@A.H' P~.HJ@Rj+7.@IJ@JJ@i, i_@1a hH@KJ@LJ@MJ@NJ@5V+OJ@PJ@QJ@RJ@hN+SJ@p|+TJ@tH@UJ@VJ@UJ@vH@WJ@XJ@YJ@/:@ZJ@wH@`J@ K@V0@.K@/:@;x@5B@^z@+K@mV+@K@3N+#K@nT+nF@$K@%K@&K@iF@iF@am+uB+wB@*K@=K@M,@T{@A$+f~+R0+xp+=w+oy+Qt+:w+;B+;B+0G+*>+;B+;B+;B+0G+P)@Q)@ZK+ZK+Q,+Q,+Q,+Q,+Q,+Q,+x;@x;@cB@cB@H@@H@@X.@X.@-K@;K@2 @YK+>K@5$@YK+2 @,K@,K@'K@)K@!K@!K@2T+Q,+lX+lX+#a@#a@#a@&B+#a@zD+YK+~K@6G+;K@{K@R)@!K@]K@H@@H@@H@@^K@^K@^K@^K@8&@Z.@K@@Qt+(/+:f+/K@(K@TX._K@:K@-T.|-+.)>.qc.qc.Y{.x].Y{.bb.y].v].y].y].)_.2Z Q:.Q:.Q:.Q:.le.le.b@t! t! X:@r[@X:@t! W:@Y:@Y:@+~ r[@rG sG sG >b@r[@_|@:|@[|@<|@<|@[|@:|@_|@^|@/|@/|@(|@_|@:|@[|@[|@-! tG sG rG >b@r[@r[@X:@-! -! -! tG tG tG sG uG ll @L@mI@@L@mI@@L@mI@@L@;M @L@nI@#L@nI@#L@mI@Qv 5G@oI@oI@Tx Tx pI@pI@pI@oI@oI@oI@oI@oI@oI@oI@oI@$L@%L@~A ~A Tx Yk@%A@tI@^t -c x, 3' :m O1 2' x) ~|@&L@*L@*L@R4 =L@^,@$s 8w@wI@-L@dh Yu !|@!|@^8@er =4@gw@;L@>L@xa.*Y Jl.X7.Ed.q5+,L@'F.'L@f).)L@!L@~L@{L@]L@EI@^L@/L@(L@_L@yb@:L@M@,M@'M@)M@!M@~M@{M@]M@^M@R9@J7@gv@hL cO /M@(M@_M@mx.1).Wf@]g.]g.]g.:M@Wj.Al.ji.kI kI 1p.1p./Z od._R r9.Mh.3p.3p.le.;t.eZ eZ k[.eZ 9h.k[.k[.3p.eZ F0.,}.@ .IU jZ @[.>}.@ .jZ SX M-.@ .9h.F0.IU F0.F0.IU EP Y..Df.5#.>*.(-.Z*.o9.tK+%1.):.p.', z#.)' ,<.2M@3M@j- #D+4M@5M@6M@7M@q~+8M@9M@0M@aM@bM@cM@dM@eM@B~@fM@gM@hM@iM@iM@jM@kM@lM@WJ@WJ@`J@WJ@WJ@YJ@mM@-v@`J@nM@Ds@=x@bB@oM@EX+zG+3N+pM@qM@rM@sM@tM@Ds@uM@vM@Xp+72+wM@,3@xM@%I@ep+6X+P0+Ob+lr+=w+rr+Qt+[P+f^@f^@0G+0G+*>+;B+*>+0G+ZK+Q)@Q,+Q,+:P+:P+:P+:P+:P+:P+w;@DD+R)@R)@8G+8G+5G+;K@r8+yM@5&@4G+gX+gX+2R+CI+zM@AM@V.@V.@>K@YK+Q,+Q,+lX+lX+#a@#a@&B+&B+&B+zD+2 @BM@DI+CM@6G+~K@V.@AM@7G+7G+G@@G@@G@@DM@EM@8$@4e@my+Qt+W&+:f+FM@(K@GM@_K@#o+YJ.@l+/N.HM@IM@Jj w) JM@KM@LM@MM@NM@'O.OM@ee@ig X[ 7}.O* )i.PM@9$+ZY Z Z Z Z Z Z Z z<.z<.z<.z<.z<.z<.", "^% ^% ^% ^% ^% ^% ^% ^% U% U% 9& 9& U% U% ^% E7 E7 E7 E7 g~ g~ g~ dd 7c 7c 7c 7c 7c 7c 7c L_ U% =+ e+ R& r& 4K@~* ,1@If.eh QM@RM@SM@G`.TM@UM@VM@WM@XM@//+o<@dK@`8@:T+(G+SA+YM@u)+:V+}G+[G+_V+nI+~P+Ht+er+29@ZM@fK@re@`H@`H@29@5X+5X+!G+~G+gK@Nb+:k+~k+!k+%4+vb+`g+/f+<6+%>+1V+y@@*4+*4+[=@2V+e^@_w+_w+_w+_w+_w+_w+_w+(w+(w+(w+(w+(w+(w+(w+(w+Il+H:+}6+}6+p8+=4+p8+}6+Il+2V+=4+p8+}6+}6+}6+[6+y@@0y+T{@ep+In+ep+ep+ep+T{@T{@T{@T{@T{@T{@T{@M,@`M@=K@+I@%I@jK@ N@.N@`M@.N@=K@.N@=K@+I@%I@B&@y=@&s+%s+Et+4m@4m@4m@Et+V1+Et+6i@6i@%s+In+ep+In+W1+#-+F)@Hn+UA+mT+iR+i}@K_@dm@+N@R1+rG+6]@@N@@N@#N@ji@nK@oK@d>@13@$N@OD@[-+E_+%N@i>@PP.&N@@g+Sq@.p (G C6 (G {}+/G *N@P. XG -5 m`.eH.wk |4 |4 s.+XG.S`.j@.j@.j@.p3 p3 4{ 4{ G7 $w W_ &5 v% v% v% u% o3 * fd fd fd fd * .* fd fd fd * * * .* .* W_ &5 n3 n3 n3 n3 &5 W_ {_ W_ W_ W_ &5 n3 n3 n3 =] -h fL.fL.W_ &5 4{ J- C, h+ i. aE eo I&..= =N@)g *R+_z.;g :q ro.-^+-^+[}+uo.#g.-N@;N@>N@,N@'N@&Q )N@!N@yx ~N@gN.ve.{N@o;.&B.bn.__.k$.@*.N%.m$.o+.T{.o+.W{.V{.!>.!>.!>.T{.!>.Y` n+.}..n+.d|.d|.Q:.Q:.E1.E1.Mh.QM }H }H EU Z' w' G~ V:@+9 ;! ]|@ 9 .9 @A@+L@ 9 /d@/d@(7 (7 /d@ 9 O9 +L@+L@/d@;! Y:@;! ;! Y:@+~ Y:@W:@+~ t! X:@X:@X:@X:@+~ t! t! X:@t! +~ W:@Y:@Y:@+~ X:@>b@rG >b@r[@X:@_|@:|@[|@[|@[|@[|@:|@_|@/|@/|@(|@_|@:|@[|@[|@<|@tG tG tG sG rG >b@r[@r[@-! -! -! tG tG tG sG sG Rx@ll Rx@ll Rx@ll Rx@ll Zi@0> :e jl Ld ;[ +r C( Bh @S @S @S Bh Fi a} .w w `G@FJ.+#+^+iN@,y@jN@kN@lN@mN@jn@nN@rn@oN@pN@qN@oN@mf@rN@sN@tN@}L@uN@iG@4w@vN@wN@xN@yN@oG@zN@AN@BN@CN@DN@EN@FN@GN@HN@IN@JN@KN@LN@MN@NN@ON@mL@PN@QN@RN@SN@TN@UN@VN@WN@XN@YN@ZN@`N@ O@ O@.O@+O@@O@#O@$O@DE@vC@%O@&O@*O@=O@-O@ca.t-.O@Le %8@sa ,O@'O@)O@!O@~O@Li@{O@]O@^O@/O@(O@_O@ M@:O@*._-.p9.k;.tK+cO@dO@<(+:^+K7.eO@PI.Tl R<.fO@ok@(! si ~I.w8.be+)> )> 8}.z<.g*.UH.z<.z<.z<.z<.z<.z<.z<.z<.7}.7}.z<.z<.7}.8}.Rx.Ov+8}.8}.8}.8}.8}.8}.8}.8}.|f.[y+%U.Ov+8}.z<. Z Y% 7}.7}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Ov+Rx.8}.8}.8}.8}.Rx.Ov+Ov+%U.[y+[y+[y+[y+%U.Ov+Ov+Rx.8}.8}.8}.8}.Rx.Ov+8}.8}.8}.Rx.Rx.Rx.Ov+Ov+Ov+8}.7}.8}.Ov+Ov+Rx.7}.%U.Rx.8}.8}.Ov+%U.Ov+8}.Rx.Rx.Rx.Rx.Rx.8}.8}.8}.7}.7}.7}.7}.8}.8}.8}.{! a<@6;@A' a<@8e.vn.5D++s.n&+'8+';.gO@hO@EP.gW iO@jO@ps@kO@i2@e=@Br+2Y+{%+w-+F]+lO@mO@-<+G=@W;@nO@oO@pO@qO@hM@rO@vH@/:@nM@ K@.K@nM@nM@.K@L^@.K@XJ@ 9+Ds@xF@2N+EX+@J+GX+sO@tO@uO@vO@wO@x6+xO@yO@Od+b4+zO@AO@!'@Vi+$q+6X+P0+Ob+lr+=w+rr+Qt+[P+f^@f^@0G+0G+*>+*>+0G+>B+ZK+Q)@Q,+Q,+:P+:P+:P+:P+:P+:P+!K@!K@!K@w;@YK+2 @2 @2 @R,+R,+CI+2R+gX+gX+BO@CI+5Z+V.@1 @1 @2 @2 @ IO@m`.,v.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.", "^% ^% ^% ^% ^% ^% ^% U% U% U% U% U% U% U% U% E7 E7 E7 E7 E7 E7 g~ g~ 7c 7c 7c 7c 7c 7c 7c L_ U% =+ e+ R& r& ~* ~* ,1@If.a8 JO@ZW.KO@LO@MO@#:@NO@OO@1~+w@@PO@dK@QO@It+(G+jD+B$+&4+)B+^G+69@_V+Gt+@W1+%s+Et+6i@4m@6i@6i@Et+6i@4m@6i@V1+In+ep+In+W1+G,+#-+%s+hD+TO@UO@{-@kK@cm@VO@WO@(e@XO@YO@YO@YO@6]@@N@c#@/-@TF@wg@ZO@`O@r'@h>@v@+gx@v8+.E.3v@}L.W;.(G m9+*K.t7 R_+ P@.P@bl++P@PM@wk Sy.xk !I@OB+j@.j@.j@.j@.p3 p3 4{ 4{ 24 H{ &5 n3 v% v% v% u% =5 * * fd fd * * * fd fd * * * * * * &5 &5 &5 &5 &5 &5 &5 &5 &5 &5 &5 &5 &5 &5 &5 W_ =] -h fL.fL.W_ &5 4{ 5! l* h+ W@ _@ @P@`J+K].#P@$P@-: _}+'f vn :h@,x+mx@C%+[}+%P@w9+&P@*P@=P@-P@;P@>P@,P@9) SG.Sl ts.F6.o;.{u.g<.)t.vd.pe+c~.m$.AU T{.YJ U{.{}.q(.rI 6^.XJ E@. K |r.Al.5^.ji.<:.:R :R :R :R Mh.Mh.b@t! +~ +~ t! t! t! t! +~ +~ +~ W:@+~ X:@r[@>b@r[@r[@X:@_|@:|@:|@:|@:|@:|@:|@_|@(|@(|@_|@:|@[|@<|@<|@$4@tG tG tG sG rG rG >b@>b@-! -! -! tG tG tG sG sG tG ;E es ;E es ;E es ;E cP@hB `:@UH `:@UH s[@cP@%2@%2@%2@%2@%2@%2@%2@%2@dP@dP@dP@%2@%2@%2@%2@||@:|@:|@:|@1|@1|@2|@Z:@eP@fP@gP@8V X X hP@99 eF.ye a} iP@$h+eG+.w .w 5L.@;@f9 f +#I.jP@Et 4_+,l Q@,Q@,Q@'Q@)Q@!Q@~Q@{Q@]Q@^Q@/Q@(Q@_Q@aj+:Q@ }Q@|6 &8 |Q@1Q@2Q@3Q@4Q@5Q@6Q@7Q@8Q@y!.jJ@9Q@+&Q+BQ@xR+CQ@DQ@EQ@FQ@GQ@HQ@oO@qO@rO@vH@nM@XJ@XJ@bB+IQ@nM@/:@XJ@L^@L^@.K@`8+.9+JQ@92+@J+nP+KQ@LQ@MQ@sO@NQ@OQ@eB+=x@PQ@*x@(L+QQ@72+Vd+vB+W1+Jn+P0+Ob+Ob+=w+oy+g~+[P+;B+f^@0G+0G+0G+0G+>B+>B+ZK+ZK+Q,+Q,+:P+:P+:P+:P+:P+:P+RQ@]K@]K@]K@>K@>K@YK+4G+5&@4G+2R+2R+2R+2R+BO@2R+XK+1 @1 @~K@2 @5G+x)+x)+lX+lX+#a@#a@&B+&B+&B+zD+5G+DI+6G+6G+~K@1 @F@@CO@SQ@DO@6$@G@@EM@EO@TQ@UQ@K@@_w+:w+Hl+rd+FM@I_@VQ@$N@#o+m[+WQ@GO@0%+*~ XQ@YQ@ZQ@`Q@LM@f-+E_ 7n+ R@.R@00+h*.8}.O* d7.+R@U6.,v.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.z<.", "^% ^% ^% ^% ^% ^% ^% U% U% U% U% U% U% U% U% E7 E7 E7 E7 E7 E7 7c 7c 7c 7c 7c 7c 7c 7c 7c L_ U% U% S% r& R& ~* ~* @R@Y# #R@wK+$R@%R@vo.&R@*R@=R@-R@d)+F,+;R@dK@>R@ip+(G+SA+B$+):@U_@^G+69@_V+nI+c@D+@~R@@N@ck@Me@{R@]R@QD@^R@xG.s@+/R@t|@qB.*y 8O.(R@NM.Of DL._R@09 :R@ -h ed * * * * * * fd * * * * * * fd fd &5 &5 W_ W_ W_ W_ &5 &5 n3 n3 &5 &5 &5 W_ W_ W_ =] -h -h -h W_ &5 4{ 5! J- m* +% o. N> 0s.%9.]y+EW 'o+|R@]k Bn.1R@2R@2R@dz+V*+Y*+<7+Vd.f_.eY+e.$[.+ .X` ;5.^a.:@+7R@<@+y`.<@+8R@9R@0R@aR@bR@cR@dR@eR@fR@gR@hR@iR@jR@kR@lR@mR@nR@oR@pR@qR@rR@sR@Mj }C G0 !{ tR@kI@/d@O9 @A@uR@uR@@A@ 9 O9 O9 9 9 9 +L@.9 .9 uR@@A@O9 /d@/d@/d@]|@;! Y:@t! >b@sG sG >b@X:@+~ t! t! t! t! t! t! X:@X:@t! t! X:@r[@r[@r[@r[@r[@:|@_|@_|@_|@_|@_|@_|@:|@_|@_|@:|@[|@<|@$4@$4@vR@tG tG tG sG sG sG sG rG -! -! -! tG tG tG sG sG tG 5G@$4@5G@$4@5G@$4@5G@<|@7G@:|@:C@:|@:C@[|@<|@%2@wR@wR@wR@wR@wR@wR@wR@xR@xR@xR@wR@yR@yR@zR@zR@~8@~8@{8@AR@mQ mQ mQ BR@CR@DR@ER@FR@FR@Ug vK@(G n.@|7 )y 'y {z {z ox >l ei =<@GR@HR@IR@JR@42 KR@LR@Kt GA@MR@NR@cd@g1.OR@PW Sd.3{+LO@PR@QR@xC @l@bQ.GT.A'+Zr@nd@nd@RR@SR@'A@TR@UR@VR@WR@XR@YR@ZR@`R@ S@.S@+S@@S@S@,S@'S@)S@!S@~S@{S@HN@]S@^S@/S@(S@_S@:S@[ j< U: }: V: 9Y `A p_ |7 uc )z k .y9 y9 X!@x9 YZ oS@.5 pS+_@@N#@Gd ra ta E0 pS@qS@rS@2Q@sS@tS@uS@vS@wS@+G.xS@hK.yS@Wd@Kh@Wq.1F@zS@AS@BS@/o.}O@CS@DS@ES@FS@GS@HS@+f@IS@^M@Mg@Tc@Ho@JS@KS@LS@MS@dh.dh.Yf@Yf@Wi.tj.}p.WJ SM SM 1r.1r.FP FP 6O ti.K` RM QM K` 1r.Mh.Mh.1p.QM ;t.3p.3p.;t.le.k[.eZ ;t.le.3p.,}.F0.9h.F0.>}.eZ ;t.le.k[.k[.;t.9h.jZ EP l=.[o.-*.V*./X tx.Z*.b3+n^+[v.B+>B+P)@P)@ZK+ZK+Q,+Q,+:P+:P+:P+:P+:P+:P+RQ@RQ@,K@)K@)K@>K@5$@5$@5$@gX+gX+2R+BO@BO@BO@gX+XK+1 @1 @~K@2 @5G+x)+x)+lX+lX+#a@#a@&B+&B+&B+zD+>T@5G+5G+2 @w;@w;@w;@w;@,T@DD+mq@^K@8$@I@@UQ@UQ@e^@_w+:w+h~+'T@FM@I_@-c@-I@ja@m[+WQ@)T@!T@*~ /} Dd ZQ@W4 LM@|) ^g k@+~T@{T@OF+h*.7}.'5 Xl B;+La i~ 7}.7}.7}.7}.7}.7}.7}.z<.z<.z<.z<.z<.z<.", "^% ^% ^% ^% ^% ^% ^% 9& U% U% ^% ^% U% U% L_ E7 E7 E7 E7 7c 7c 7c 9c 7c 7c 7c 7c 7c 7c 7c 7c >' U% S% r& R& ~* pR.@R@l# lP.wK+]T@^T@E../T@(T@_T@:T@+1V+y@@*4+*4+[=@2V+J@@(w+(w+(w+(w+(w+(w+(w+(w+(w+(w+(w+(w+(w+(w+(w+H:+=4+p8+=4+H:+H:+p8+X}+=4+H:+2V+2V+2V+H:+=4+[=@1V+uI+uI+PK+uI+WA+0y+T{@T{@T{@T{@T{@T{@T{@T{@T{@T{@&4+T{@&4+T{@&4+T{@&4+T{@u)+0y+f~+0y+&4+ep+In+$q+$q+W1+W1+%s+%s+%s+V1+V1+6i@6i@V1+W1+$q+%s+lw+#}@jR+$-+`;+Et+.w+1T@Q.@J&+{-@-*@2T@YI+YI+3T@=i@,R@,R@4T@~R@5T@h|+6T@p1@7T@8T@O/+!#+u|@2A.QU.Y]@M+@9T@iR.[N.[N.DL.pH 0T@aT@bT@Wl cT@dT@eT@nq+8M j@.j@.j@.j@.p3 p3 4{ 4{ 3{ 3{ &) &) 5% v% I> fL.ed fd * .* .* * fd fd .* .* * * * fd fd ed &5 W_ W_ {_ {_ W_ W_ &5 &5 &5 &5 &5 &5 W_ W_ W_ =] -h -h -h W_ &5 4{ 5! 4{ m* v+ 6. ), f- fT@gA+L(@6 .LH.gT@0Q.hT@iT@#O+jT@,(+`L j!+7'.8Q kT@lT@mT@nT@.n+oT@] lo.'K.6R@'1.;1.Pk.p&.eV.vd.pe+c~.e=.T9+O/@l=+pT@O/@T++Dg.k=+Jk.`j.`j.`j.Dg.yf..G 1p./Z /Z od.le.;t.EU EU Tq.No.Fo@Y*@ r@&E@&E@Y*@DU $[.$[.$[.$[.s9.'_.ne.D1.'_.$[.[..U` :..W#.xy.7W qT@rT@sT@tT@uT@vT@wT@xT@yT@zT@AT@BT@CT@DT@>r@ET@FT@GT@HT@IT@JT@KT@LT@MT@NT@@2@*l [f 0~ OT@PT@QT@+L@+L@RT@uR@uR@RT@+L@+L@+L@O9 O9 O9 +L@@A@@A@bP@@A@ 9 9 9 9 /d@]|@Y:@+~ X:@rG rG >b@X:@t! r[@r[@X:@X:@X:@r[@>b@rG r[@r[@r[@>b@>b@>b@>b@>b@:|@_|@(|@(|@(|@(|@_|@:|@:|@:|@[|@<|@$4@vR@vR@Eu tG tG tG tG tG tG sG sG -! -! -! tG tG tG sG sG ST@ST@ST@ST@ST@ST@ST@ST@v! v! }A cN@cN@}A v! <|@!8@!8@yR@)8@wR@TT@xR@TT@xR@TT@xR@)8@yR@UT@VT@~8@VT@{8@WT@XT@YT@YT@>S ZT@BR@|i FR@FR@`T@ U@Wj o<+&x v/@'<@'y 5m 5m AJ.;h@gW.ei gW.1O.1O..U@GR@1v@+U@@U@#U@=6@{6@$U@a0@%U@&U@OR@Re.uo.hb@C).*U@=U@RZ Vc.6V.;g+-U@;U@ ,+~A@>U@,U@'U@)U@!U@~U@{U@]U@^U@/U@(U@_U@:U@CP@x+Mp@oh@Cl 17 KI+)y v7 v7 y*@v7 kB i&@x[ jB |/ _d@)m 4m Dj u*@u*@P#@B6 [7 ;J T[ 9Y G5 `A p_ z%@z%@)z k .y9 #;@y9 X!@OD+BU+2d cv LU@_/ eQ [) '3 ol MU@NU@OU@PU@QU@sS@RU@SU@TU@Li@UU@VU@!).WU@XU@+&+}p.UM YU@$(.ZU@`U@ V@.V@+V@@V@@V@#V@HS@Lg@Lg@$V@xi@tk@Sc@La@On@%V@&V@dh.dh.dh.Wi.tj.}p.WJ SM oe.1p.1p./Z FP ti.ti.)s.RM RM K` K` QM Mh.1r.1p.le.9h.3p.le.Mh.;t.9h.;t.le.k[.,}.,}.9h.,}.@[.eZ 3p.3p.9h.k[.le.eZ @[.l=.Y..-*.[o.V*./X tx.Z*.tK+M7+g|.v5.w5.w5.&o@%0+H;@R<.*V@=V@9$ y% P9.9e.{! @$+z<.8}.0d.0d.2<@)J.z<.z<.z<.z<.z<.z<.z<.z<. Z z<.7}.8}.Rx.Rx.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.7}.7}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Ov+Rx.8}.8}.8}.8}.Rx.Ov+%U.Ov+Rx.Rx.Rx.Rx.Ov+%U.8}.8}.Rx.Ov+Ov+Rx.8}.8}.Ov+Ov+Rx.Rx.Rx.8}.8}.8}.7}.Rx.Ov+Ov+8}.7}.8}.Ov+%U.Rx.8}.8}.Ov+%U.Ov+8}.Rx.Rx.Rx.Rx.Rx.8}.8}.8}.7}.7}.7}.7}.8}.8}.8}.13+-V@15+ef.Yn k@E8+Tx.CN.I0@'8+&3.;V@g_@>V@,V@'V@)V@m6@Vb+-T.LD+!V@~V@{V@]V@^V@/V@(V@.T@_V@nO@:V@hM@rO@/:@.K@IQ@IQ@IQ@L^@IQ@.K@nM@XJ@IQ@ K@ K@Cs@x6+X8+s6+EX+nR++0G+>B+P)@R,@R,@ZK+ZK+Q,+Q,+:P+:P+:P+:P+:P+:P+RQ@]K@)K@)K@>K@>K@4G+4G+4Z+fX+gX+2R+BO@BO@7V@gX+5Z+V.@1 @1 @2 @2 @T@5G+2 @YK+w;@w;@w;@R)@DD+x;@mq@^K@8$@8$@8V@8V@J@@_w+:w+h~+3]+9V@I_@-c@CB@ja@3/+g#@)T@9%+z! v{ <: *P iB 'm ]n 0V@6n+aV@{T@00+#v ' >' S% r& R& pR.#'+bV@J{ +v+cV@dV@6s.!h@eV@fV@gV@hV@iV@W;+[T@dK@Z8@_G+69@gK@YM@&4+)B+}G+jV@Q;@[T+U_@_V+_V+ic@1}@0x@X4@0x@0x@[1@hp+It+q;@/G+)B+8X+=m+&m+!k+%4+,k+`g+G:+O,+/_+z@@z@@[=@[=@vI+Il+L@+;m+;m+;m+;m+;m+;m+;m+(w+(w+(w+(w+(w+(w+(w+(w+2V+H:+=4+2V+Il+2V+p8+51@=4+=4+2V+Il+Il+2V+H:+[=@1V+uI+PK+Kl+PK+uI+0y+T{@T{@T{@T{@T{@T{@T{@T{@T{@n0+h @u)+G:+f~+/f+):@$>+):@`g+u)+G:+f~+G:+u)+u)+In+In+In+In+In+$q+W1+W1+%s+V1+Et+V1+%s+%s+Et+kV@#}@Q3+kD+jV+6^@lV@V1+&I@aB+W~@m<@4]@-*@-*@2T@2T@-*@;u+2T@mV@6]@nK@^k@{R@7T@nV@oV@pV@$V.4k+&++Y]@jR./~.$3 3O.qV@DO.b9 rV@sV@tV@1%@M. cT@uV@eH.eH.j@.j@.j@.j@.p3 p3 4{ 4{ 4{ 4{ ~_ ~_ f% v% I> I> ac ed =5 o3 o3 =5 ed ac o3 o3 o3 =5 ed ed ed ac &5 W_ {_ ;b.;b.{_ W_ &5 W_ W_ W_ &5 &5 &5 &5 &5 =] p: -h -h W_ &5 W5 5! H{ K> $& i. k; e& @P@b:@vV@,j s;.X>.))+/ .5Q /V ny@;(+>|.`L 79.h0.V[.2K wV@xV@,.@yV@zV@[ SG.yc.82.7:.H#+0~.te.v_.w_.f=.U}@AV@W}@/D+'^@(D+6H ~` ~0+]o.03+83+83+f5+J` jD ;t.Q:.E1.E1.le.le.No.No.Tq.No.Fo@|b+ r@Ez@ f@qL .G D1.e|.+ .e|.D1.W` l+.]-.U` X` f3.p5.P*.73.pH.BV@CV@DV@EV@FV@GV@HV@IV@JV@KV@LV@MV@NV@OV@PV@QV@RV@SV@TV@UV@VV@WV@XV@YV@ZV@w4 -> #, `V@Ev@ W@.W@+W@@A@.9 @A@bP@uR@bP@RT@.9 +L@+L@+L@+L@.9 @A@RT@RT@+L@ 9 /d@ 9 O9 9 /d@;! Y:@+~ r[@>b@>b@>b@r[@rG >b@r[@r[@>b@rG tG -! sG rG rG rG >b@rG rG rG :|@_|@(|@/|@/|@(|@_|@:|@:|@[|@[|@<|@$4@vR@Eu Eu tG tG tG tG tG tG tG tG -! -! -! tG tG tG sG sG ST@@W@@W@@W@@W@@W@@W@@W@^A @W@#W@#W@#W@#W@@W@^A '8@'8@!8@>8@)8@/0@TT@/0@$W@/0@)8@'8@UT@-8@~8@=8@~8@=8@,P Ox@{M %W@YT@mQ &W@*W@Lf Pe FR@FR@hP@=W@G5 B/ 2u F( !8 o_ `A @p *y BJ.]z 3v@-W@<,.<,.rZ.yR.;W@>W@>6@e8@b4@b8@,W@'W@,W@)W@Dn.Py Kx !W@~W@su Ny xC rN sT sT E..8(.5Y g.{W@]W@^W@D}@/W@(W@_W@:W@X@dh.Yf@Yf@Wi.tj.}p.}p.uj.SM 1p.1p.FP w6.Z|.4;.)s.RM RM K` K` QM Mh.1r.K` Mh.9h.9h.le.QM le.3p.le.Mh.;t.eZ 9h.;t.3p.@ .4W eZ k[.9h.F0.9h.F0.4W [o.-*.-*.-*.V*./X S%.p9.%1.tK+<(+p3.E6.p3.c3+,X@'X@$=+)X@!X@w8 C' 8e.,&+13+@$+z<..gX {X@]X@^X@/X@d2@e4@(X@_X@uc@:X@+0G+P)@R,@r;@R,@ZK+ZK+Q,+Q,+:P+:P+:P+:P+:P+:P+)K@)K@>K@>K@5$@4G+4G+4G+| @4Z+7V@BO@fX@BO@gX@7V@zM@AM@V.@V.@>K@YK+Q,+Q,+lX+lX+#a@#a@&B+&B+&B+zD+hX@{-+' >' }9.r& R& pR.#'+%'+ak+aC+vS.lX@tl+,8.mX@nX@gV@oX@iV@pX@qX@dK@Z8@:G+[G+U_@Ll+&4+)B+jc@rX@jV@/G+U_@_V+Mn+fr+[1@X4@(a@0x@0x@[1@hp+It+q;@[T+8X+]_+=m+~k+!k+%4+vb+`g+/f+%>+(|+fD+z@@vI+vI+5T+g~+6Z+S.+S.+S.+S.+S.+S.+S.+(w+(w+(w+(w+(w+(w+(w+(w+2V+2V+H:+Il+g~+Il+=4+51@p8+=4+2V+Il+Il+2V+H:+[=@1V+PK+Kl+Kl+Kl+uI+WA+T{@T{@T{@T{@T{@T{@T{@T{@&4+T&+'-+/f+Ob+Ob+/f+'-+T&+'-+h @`g+/f+G:+/|+/|+G:+):@ep+ep+T{@ep+In+$q+W1+W1+%s+V1+V1+%s+V1+6i@;R@N,+$k+Ml+Ml+$-+^a@$s+%s+k'@sX@W~@m<@*!@tX@tX@tX@J&+J&+-*@uX@5]@m6+|3@wg@vX@wX@xX@pV@yX@T$+&++RU.r'+~%@SD@yg@]T.zX@zX@w'@WP.sV@AX@vO &#.BX@01+CX@j@.j@.j@.j@.p3 p3 4{ 4{ $w 24 W_ &5 v% v% v% v% ac ed =5 Y_ Y_ =5 ed ac o3 o3 o3 =5 ed ed ac ac &5 W_ {_ ;b.;b.{_ W_ &5 {_ W_ W_ W_ &5 n3 n3 o3 =] p: -h -h W_ &5 W5 [4 G7 $w b) ). Z@ j> N> DX@/U+EX@|_ 2)+FX@Y>.iT@/V DJ+gN@>E.-E.O;.GX@62@9Q ta@C{.HX@IX@JX@KX@LX@qI.MX@&/.NX@6v.#$.wd.k].V).n$.dm.K-.+G /D+a3+OX@+G vA+d5+83+93+93+!0+05+No.eZ l4.B}.v>.le.Mh.}H KB.Tq.No.Fo@|b+Nc@ f@Nc@!0+pI e|.. .]}.]}.. .<..X` (%.93.U,.93.{-.2J.d..PX@QX@RX@SX@TX@UX@VX@WX@XX@YX@ZX@`X@ Y@.Y@+Y@@Y@#Y@$Y@%Y@&Y@*Y@=Y@-Y@;Y@>Y@+4@,Y@vb +L@'Y@)Y@!Y@~Y@{Y@RT@.9 .9 bP@uR@uR@bP@.9 .9 +L@+L@+L@.9 RT@RT@@A@O9 /d@/d@ 9 +L@O9 /d@]|@;! W:@t! X:@>b@>b@rG sG rG >b@>b@rG sG -! -E tG tG sG rG rG rG sG sG :|@_|@(|@^|@^|@(|@_|@:|@[|@[|@<|@$4@vR@Eu Eu Kv tG tG tG tG tG tG -! -! -! -! -! tG tG tG sG sG @W@@W@@W@@W@@W@@W@@W@@W@^A ^A @W@#W@#W@@W@^A ^A #~ }A ]Y@v! #W@ST@@W@^Y@^A ST@#W@}A #~ yK /Y@/Y@(Y@/Y@FN WA WA WA ^|@H~ >8 W-@H0 W-@Lc X 7V Ok t) H< +s v) [Q@i} Hi _Y@B/ |t p_ `A hw ud K0 iw #<@e{ <8@mq |s r-.,l.^h Ix :Y@ TY@A4 $8 pS@UY@VY@WY@XY@YY@ZY@`Y@ Z@.Z@%0.+Z@@Z@~%.{=+VS &c.#Z@$Z@%Z@&Z@*Z@=Z@-Z@;Z@>Z@,Z@,Z@@X@'Z@)Z@!Z@;Z@~Z@Yf@{Z@{Z@;_@Wi.Oo.Oo.2l.uj.1r.1p.w6.R:.4;.w>.)s.RM RM K` 1r.Mh.Mh.1p.)s.Mh.9h.9h.Mh.RM Mh.3p.QM RM QM ;t.Mh.1r.RM k[.M-.F0.Mh.3p.@ .jZ IU IU -*./@./@.-*.V*./X S%.p9.$:+k;.<(+N7+*B.w5.g6@]Z@^Z@/Z@(Z@Du@R% P9.'> vn.ko.@$+61.+0G+P)@r;@r;@r;@Q)@ZK+Q,+Q,+:P+:P+:P+:P+:P+:P+>K@>K@>K@4G+4G+5&@5&@CI+lZ@mZ@nZ@BO@fX@oZ@gX@nZ@pZ@qZ@AM@AM@>K@>K@2T+Q,+lX+lX+#a@#a@&B+&B+&B+*B+hX@{-++*>+*>+0G+4 @4 @4 @4 @6T+(w+:w+Gn+hX@9V@ii@q$+rZ@ja@sZ@g#@)T@9%+z! p{ }} 8s BN tZ@X4 uZ@vZ@ms@#V+l*.g7 .F.61.7}.QL+):+7}.7}.7}.7}.7}.7}.7}.7}.z<.z<.z<.z<.z<.z<.", "g~ g~ g~ g~ g~ g~ g~ dd dd dd dd kC kC kC kC dd g~ g~ E7 E7 7c 7c 9c E7 E7 E7 E7 E7 E7 E7 E7 8c x5 !1.D& w* |! wZ@{N+3> xZ@yZ@zZ@w&.AZ@BZ@CZ@gV@DZ@EZ@//+W0@FZ@w=@:T+_V+gK@Ll+):@SA+q;@69@[G+v=@sD+u&@qD+_1@gr+<1@<1@$3@$3@GZ@v&@v&@s=@s=@Nb+:k+:k+)k+-m+%4+%4+G:+G:+%>+(|+fD+z@@vI+[=@5T+g~+J@@(w+(w+(w+(w+(w+(w+(w+;m+&N+(w+_w+_w+&N+S.+|6+=4+}6+51@p8+2V+Il+2V+H:+X}+=4+g~+Rt+2V+=4+H:+QK+z@@PK+uI+uI+WA+0y+0y+T{@T{@T{@ep+ep+ep+T{@0y+u)+/f+HZ@7d+HZ@'k+'k+=:@7d+lp+'k+=:@jr+St+IZ@[w+Ob+Q0+WA+T{@In+In+In+ep+T{@In+$q+W1+%s+V1+Et+6i@cK@#>++/+o0+XA+lD+t)+`;+G,+$q+Hn+_ @Q.@l'@l'@W~@W~@ZI+0!@4]@;*@+N@Ge@+o+JZ@KZ@g>@%N@i2@OP.Q:+Xb+b_@.#+%++!%@ E.5e+k>@k>@k>@LZ@w'@ (+Wh MZ@4+ NZ@OZ@yW -V j@.{= M= -5 H{ 3{ 3{ 4{ {_ |x.8H.w4.v% 4% W_ W_ W_ &5 &5 &5 n3 n3 {_ {_ {_ {_ {_ {_ {_ {_ {_ &5 ~_ ~_ &5 &5 ~_ $% n3 n3 n3 n3 n3 n3 n3 o3 si og -h -h &5 n3 W5 [4 4z G{ P* 9# t+ 7. -- k> PZ@L, QZ@|B.RZ@U!.SZ@NR CJ+TZ@>(+f1.ru yv /h }k.1.K}.d,.ii.|o.s'.qe./D+'^@AV@OX@~` (D+dm.~` *N d5+d5+d5+ &+f5+EE eZ l4.l4.B}.k[.;t.No.No.`@,`@'`@)`@!`@~`@{`@]`@^`@/`@(`@_`@:`@<`@Z3 %l [`@{Y@YC@}`@|`@1`@+W@bP@uR@uR@uR@bP@RT@@A@@A@O9 /d@ 9 +L@@A@.9 +L@+L@O9 O9 O9 O9 9 9 9 ;! W:@X:@X:@X:@r[@sG -! sG rG >b@>b@rG sG -! }g rG rG >b@>b@r[@r[@X:@X:@(|@_|@:|@[|@<|@<|@<|@<|@_|@:|@<|@vR@Eu Eu Eu Eu r[@r[@r[@>b@sG -! }g *E -E -E -E -E -! -! tG tG +z ^A #W@#~ #~ #~ ]Y@#W@(Y@(Y@#~ ]Y@#W@@W@^A .z +n@rI@2`@3`@4`@3`@2`@~A $L@rI@5`@Zy 6`@aB 6`@bB 7`@.n@^M }u 5h 5h }u y, VH :t :t G> .r 1u Mz .;@F; 8`@~|@@s h.@h.@~p ()@+s@X' Ch Ch ZW 4u 4u (4 bn 9`@(c cn 0`@a`@^q ]h b`@c`@ad@}b@|m+d`@1f@e`@f`@g`@h`@[0@=s@}0@pK i`@j`@kG 94@}K.b'.^h Hm.k`@l`@m`@n`@o`@p`@q`@r`@s`@t`@u`@v`@w`@x`@y`@z`@A`@B`@C`@D`@E`@F`@G`@H`@ON@I`@J`@K`@L`@M`@N`@O`@P`@Q`@R`@S`@T`@qW@U`@V`@W`@X`@Y`@Z`@``@ #. #+ #@ ## #$ #% #& #* #JW@= #- #hG@;^+vC ; #uj@yl 6|@SU.u[@SU.px px `G@KI+iw 0v aj &y -p@_d@kB@=W@Ok ZZ ro B6 Fj Fj jB 3q ud n.@z%@td k .k .x9 y9 40 xU+RY@Rn 6D+4d &A@K8 L0 > #, #>O@O3 r) }Q@Z3 QL@MU@!r@' #) #! #~ #{ #] #^ #/ #( #l7+B@._ #: #< #TB.aO pi.[ #} #| #1 #2 #3 #3 #4 #5 #6 #7 #8 #9 #0 #a #rj.C7+ni.tj.;_@0O 0O lA.lA.|p.K` FP /Z Z|.,3+|p.|p.)s.QM ;t.le.K` 7O )s.QM k[.k[.Mh.QM ;t.9h.1p.1r.1p.QM ;t.k[.le.QM le.9h.@ .@ .F0.9h.F0.@ .Y..{` {` -*.X*.q9.]d._-.X%.k;.n3.w5.u4.p3.K7.b #Q%+=V@`j@c #[! d #m|.Ks @$+80+61.O( / .F.5H.7x.8}.8}.8}.8}.8}.8}.8}.8}.Rx.7}.z<.z<.8}.Rx.8}.z<.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.z<.%U.P] |f.7}. Z Rx.J; Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+)_ z<.7}.Y% Z Rx.Rx.z<.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.z<.z<.z<.z<.z<.z<.z<.z<.7}.7}.8}.8}.Rx.Ov+Ov+%U.7}.7}.7}.7}.7}.7}.7}.7}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.z<.7}.8}.Rx.Rx.8}.7}.1x.+s.2c@e #N=.+m@f]+f #g # v+h #7d i #VS@j #k #[v@l #33@m #@<+f_+n #s+@o #p #/V@q #r #s #t #u #v #w #x #X8+mZ++9++9+y #]z@X8++9+y #+9+X8+fB+_+@_+@+9+eB+&T@nP+8X@z #A #B #C #D #E #F #G #0X@H #1V@@K@pB+Sy+I #/u+)P+dr+p;@sD+Tt+vr+=w+wI+}=@O)@Q,@*>+*>+0G+>B+>B+P)@Q)@Q)@Q,+Q,+T,@T,@kX+kX+kX+v;@jX+J #K #J #5$@2R+gX+4Z+gX+7V@7V@gX@gX@gX@gX@gX@5Z+V.@V.@1 @YK+2 @p.1x.z<.g*.UH.|f.z<.Y% 7}. Z Z% I$ z<.Rx.Rx.8}.8}.7}.7}.", "g~ g~ g~ g~ g~ g~ g~ dd dd dd dd dd dd dd dd g~ g~ g~ E7 E7 7c 7c 7c E7 E7 E7 E7 E7 E7 E7 E7 8c dd l:.q& M& ,~ O #af+P #@v+Q #R #pR S #CX+T #gV@DZ@EZ@//+U #V #w=@:T+_V+gK@Ll+):@SA+q;@69@[G+v=@sD+u&@qD+_1@gr+<1@|}@:1@:1@gr+='@='@nD+nD+Mb+:k+:k+)k+-m+%4+%4+/f+G:+%>+(|+z@@z@@vI+[=@5T+g~+J@@(w+(w+(w+(w+(w+(w+(w+&N+&N+(w+(w+&N+;m+S.+S.+H:+p8+}6+p8+H:+2V+H:+=4+51@=4+g~+g~+2V+H:+H:+QK+z@@PK+PK+uI+uI+WA+WA+WA+WA+0y+T{@ep+ep+T{@T{@u)+/f+HZ@7d+HZ@'k+'k+=:@7d+jr+=:@HZ@'k+kr+[w+St+Ob+Q0+WA+T{@ep+In+ep+T{@T{@ep+In+In+$q+W1+%s+V1+^a@,-+yb+XA+lD+lD+lD+iV+`;+$q+W1+Hn+ w+K&+,u+,u+l'@t$@0!@J&+kK@Gq@5]+[f+ui+9e@W #}v@qK@wc@X0+wi+$o+rO.v8+X #`D.Y #xc@Z #G3 T1 <1 2z+09 ` #H).oT@Ae+ .#xW <& yW 9$+bl+d= 4c 5! 4{ W_ ;b.a, fL.v% f% W_ W_ W_ &5 &5 &5 n3 n3 {_ {_ {_ {_ {_ {_ {_ {_ W_ n3 ~_ n3 W_ {_ &5 n3 n3 n3 n3 n3 n3 n3 n3 o3 p: p: -h =] &5 &5 Q6 Q6 4z Q6 p3 0# %& p. 7. o. D) ..#$0 e.+b[ +.#*Y 5Q TZ@TZ@>(+>|.7(.],.lt -A ~~.It @.##.#$.#%.#&.#*.#=.#EB.,1.us.#$.2a.|o.Dl.f=.n$.a3+4#./D+*T 6H nN.(D+*T *N &T ~0+FU &+lD F0.s(.s(.l4.3p.k[.jD jD EU EU |b+|b+Nc@Nc@Nc@|b+Bf.me.$[.+ .. .S` W` C}.]%.EE.EE.&0.-.#;.#>.#,.#'.#).#!.#~.#{.#>r@].#^.#/.#(.#_.#:.#<.#[.#}.#|.#1.#2.#3.#4.#5.#<`@6.#]0@[m 7.#[`@8.#9.#0.#a.#}`@XC@[`@[`@b.#[`@uR@bP@RT@bP@.9 O9 O9 .9 @A@.9 +L@O9 O9 O9 9 9 /d@/d@/d@Y:@+~ X:@r[@X:@X:@rG tG tG sG rG rG rG sG tG -E rG rG rG >b@>b@>b@>b@>b@:|@:|@[|@<|@$4@<|@<|@[|@:|@[|@<|@vR@Eu Eu Eu Eu tG sG rG rG rG sG sG tG -! -! -! tG tG tG sG sG vR@@W@'8@#~ b~ ]Y@>8@#W@'8@]Y@>8@@W@c.#+z d.#PC rI@e.#f.#g.#g.#f.#h.#i.#!A h.#h.#i.#j.#0B k.#j.#}r@%E ]J $A@l.#l.#fw 3' :t 4, 4, 4, Ne u*@(g .;@8`@m.#E; #r q[@#s ()@n.#&P g=@a3 {( _( (4 _( yi+o.#w~ .3 O{ UG@:s 'f +#,+#'+#)+#!+#~+#{+#]+#^+#YL+;l.|b@/+#4R._c ii dj OD+OD+OD+px 5L.)<@iw !4+@p %y d!+kB@=W@Ok ZZ Ok )8 Ej Fj jB V: ud n.@Lw T9 E6 E6 #;@ B ;z.xU+RY@'l 6D+_8@&A@K8 G*+CT (+#S[ _+#Zk *l Z3 ta D0 :+#<+#[+#}+#) #|+#1+#1+#2+#U3@3+#B]@4+#5+#6+#E{+X++%&+2..Kt.Kt.7+#,_.[ #8+#)f.9+#0+#a+#a+#b+#4 #nl+ck.oj.ck.^i+Qh.Oo.UM TM =w.xj.xl.R:.R:.w>.TA.|p.|p.xl.1p.Mh.QM K` xj.1p.1p.RM QM le.;t.le.Mh.QM 1p.1r.RM le.k[.;t.le.;t.k[.9h.F0.@ .jZ @ .IU Y..{` l=.-*.X*.$c.Z*._-.k;.52.D6.u4.w5.u4.c+#R4.d+#Du@-o@e+#J. S$ f+#RO+6=+2^ 90++s.Ys.*; ^Z.dT 90+8}.8}.8}.8}.8}.8}.8}.8}.z<. Z z<.8}.8}.7}. Z 8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.7}.Ov+[y+%U.8}.z<.Rx.[y+Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.7}.%U.%U.8}.8}.[y+[y+Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.z<.7}.8}.Rx.Rx.8}.7}.1x.-L m,+g+#Qj+l*.h+#:>+aW+i+#HQ+j+#k+#l+#m+#n+#o+#O@@23@Mu@p+#q+#r+#x@y #>x@6B@A+#A+#y #mZ+eB+fB+fB+eB+X8+eB+oB+nR+pT+B+#C+#D+#E+#F+#G+#H+#D+#I+#J+#K+#3N+EX+Qy+L+#!u+Kn+#w+jc@v=@sD+}T+vr+|R+L)@0=@Q,@*>+*>+0G+>B+>B+P)@Q)@Q)@Q,+Q,+T,@T,@kX+kX+kX+kX+jX+J #K #J #gX+2R+gX+M+#7V@7V@gX@gX@gX@gX@N+#gX@zM@AM@AM@V.@>K@YK+Q,+Q,+lX+lX+mX+mX+yD+T.@T.@T.@Gn+3]+>2+f^@lX+Q)@P)@>B+Q,@t<@O)@ny+K@@K@@K@@K@@e^@_w+:w+Hl+'T@FM@I_@VQ@O+#CU.m[+A(@x +8%+*~ P+#vG Tj A6 Q+#D%@1, R+#N #Qj+wi !N+Q5 +s.61.;q.g*.Rx.Y% )_ z<.z<.)_ x8 Rx.Rx.8}.8}.8}.7}.z<.", "xn.xn.xn.xn.xn.xn.xn.xn.xn.xn.xn.xn.xn.je je g~ g~ g~ E7 E7 7c 7c 7c E7 E7 E7 E7 E7 E7 E7 E7 le up..h.r& Jn S+#T+#9P+U+##v+V+#ZF+W+#X+#q&@Y+#gV@/ @1~+w@@Z+#V #w=@hp+_V+gK@Ll+):@SA+q;@69@[G+`+#=m+YA+gi+fi+Xl+ @#Mg+Mg+Mg+ei++_+>k+Lb+Lb+si+:k+]_+)k+-m+-m+-m+/f+/f+O,+/_+z@@z@@[=@[=@5T+g~+J@@(w+(w+(w+(w+(w+(w+(w+_w+(w+&N+;m+;m+;m+;m+;m+2V+H:+p8+p8+H:+2V+=4+}6+}6+=4+Il+Il+2V+H:+2V+QK+fD+Kl+Kl+PK+PK+uI+uI+uI+PK+uI+WA+T{@T{@ep+T{@&4+/f+h @'-+h @/f+/f+`g+'-+`g+h @'-+`g+/|+Ob+Ob+G:+Q0+WA+0y+T{@T{@T{@T{@0y+T{@T{@ep+ep+In+$q+W1+iV+!]+kp+Yg+Yg+e~+s~@)]+t)+n0+n0+Hn+Hn+Hn+ w+K&+K&+L_@mT+W}+4a@.@#+@#V0+@@##@#ek@1k+}v@$@#%@#&@#s@+uz@*@#=@#tK@-@#h#@Z #yg@`]+ ^+<1 >K.0T@;@#>@#G9+o`.:5@MK xW p3 ,;.d= 4c G{ G{ &5 &5 I> I> I> I> 7v@7v@7v@X_ X_ X_ A^.A^. l. l. l. l. l. l. l. l.&5 ~_ ~_ n3 {_ |x.;b.{_ n3 n3 n3 n3 n3 n3 n3 o3 .^ .^ =] =] &5 W_ 4z )c JF.Q6 14 P* a- t+ p. 6. O; }* 88 aY+,@#'@#02.Kp@XL+TZ@>(+,(+Vv.NO.xB.^j )@#!@#~@#{@#]@#^@#/@#(@#_@#:@#!O+q[.)(.)t.gm.,x.O@.x+.X..x+.YF 9..HU uY X..9..1W iZ CE L@.YS+C0.!_.!_.e3.s(.9h.3p.}W EU Tq.Tq.qL 05+Nc@ r@ r@Dz@zg.DU .G ]}.;5.X` X` l[.*'.1b.M*.N*.<@#[@#}@#|@#1@#2@#3@#4@#5@#].#6@#7@#8@##Y@~`@9@#x/@0@#a@#b@#c@#d@#e@#]0@uI@-> _m (1 ,p bP@{Y@8.#f@#g@#g@#g@#h@#i@#i@#i@#i@#b.#[`@uR@[`@RT@.9 +L@.9 @A@.9 O9 9 9 9 /d@/d@(7 (7 ]|@W:@t! r[@r[@X:@t! r[@rG -! -! tG sG rG sG sG tG rG rG rG rG rG sG sG sG <|@$4@$4@vR@$4@$4@<|@[|@:|@[|@<|@vR@Eu Eu Eu vR@}g -E tG rG >b@r[@r[@r[@-! -! tG tG sG sG sG rG <|@<|@||@[|@||@<|@dP@$4@||@[|@%2@<|@dP@vR@(0@-E j@#0s 0s 0s Gv k@#zu l@#l@#9s 9s zu m@#Yy n@#-c _t y, fw ^1 N1 3n .' .' Ne t*@)m *2@_Y@C%@D%@+s@C2 o@#vI@Q@@S:+%h+g=@$+@>| E!@:u@dh ,y Cp+eG+ji QC@qU.QY@p@#:Q@kG q@#r@#r@#_j@8r@8r@@j@Z3@s@#t@#Vx@u@#v@#}b@|b@}b@w@#`r@`r@x@#`r@}b@}0@XL 9l 0l y@#z@#A@#B@#C@#D@#E@#q`@F@#G@#H@#I@#J@#K@#L@#M@#N@#O@#gY@P@#Q@#R@#S@#T@#U@#V@#W@#X@#Y@#Z@#`@# ##.##+##@#####$##%##&##*##=##-##;##>##,##'##)##!##~##{##]##^##/##(##_##:##<##eH+8f@[##}##}.IU l=.l=.Y../@.X*.$c.Z*.]d.w!+&1.:^+D6.o3.u4.Ig.lg j##Cf e+# m@-g.C% J$ k##5D+ks@hS.>p.Ys.!N+XQ.dT 90+8}.8}.8}.8}.8}.8}.8}.8}.z<. Z z<.8}.8}.7}. Z 8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.8}.Rx.8}.8}.8}.8}.Rx.8}.8}.8}.8}.8}.8}.8}.8}.Ov+|f.|f.Rx.Rx.[y+[y+8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.%U.%U.%U.%U.%U.%U.%U.%U.Rx.Rx.Rx.Rx.Rx.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.z<.7}.8}.Rx.Rx.8}.7}.1x.b(+V/ m,+(p+dn+l##@u+ e m##n##o##p##q##r##o]+s##t##44+u##v##w##x##y##z##fN+(V@A##B##C##D##E##F##6X@>x@mZ+>x@]z@>x@>x@6B@x #]z@y #X8+eB+eB+eB+eB+fB+eB+EX+tO@G##H##I##J##K##L##M##N##O##P##Q##R##nR+mV+s6+fw+E6@ok+Ht+^G+t&@8X+_T+vr+|R+L)@0&@t<@*>+*>+0G+>B+>B+P)@Q)@Q)@Q,+Q,+:P+T,@T,@kX+kX+kX+jX+J #lZ@4Z+gX+2R+7V@nZ@7V@gX@gX@gX@N+#N+#N+#gX@pZ@qZ@qZ@AM@)K@>K@2T+2T+lX+lX+mX+mX+yD+T.@T.@T.@Gn+Hl+W&+h~+mX+#a@#a@P,+S##T##|=@}=@ED+Rt+tr+tr+e^@_w+:w+Hl+'T@FM@I_@VQ@U##V##sZ@@l+sc+8%+IM@W##VE il A6 X1@n_ X##)!.N #wi ph Q5 bd.+s.+s.)J.)J. Z )_ )_ Z 7}. Z 7}.%U.8}.8}.7}.7}.7}.z<.", "xn.xn.xn.xn.xn.xn.xn.xn.xn.je je je ie ie ie E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 je IO.lo.$~.Z& &| Y##mW.Z##`##$v+<0++j Cg@X+#CX+ $#gV@/ @d)+e)+Z+#V #/V+hp+_V+gK@Ll+):@SA+q;@69@u&@`+#:k+dy+gi+fi+ei+Mg+Mg+=k+Lg+*k+@_+&k+<]+_6+Yg+]_+]_+)k+)k+)k+-m+/f+`g+O,+/_+z@@1V+[=@*4+vI+Il+J@@(w+(w+(w+(w+(w+(w+(w+my+_w+&N+S.+}a@S.+&N+(w+g~+H:+=4+=4+H:+H:+p8+51@p8+=4+H:+2V+2V+2V+2V+QK+fD+Kl+Kl+Kl+Kl+Kl+Kl+PK+(P+Kl+uI+0y+T{@T{@T{@T{@u)+h @'-+h @/f+/f+`g+'-+h @'-+$>+'-+/f+/|+G:+u)+WA+WA+WA+0y+0y+0y+WA+WA+WA+WA+0y+0y+T{@ep+ep+):@s~@Yg+:6+,k+Zg+Zg+s~@h @n0+n0+lI+lI+lI+lI+~-@_ @TO@8}@1Z+2]+T0+.$#;>++$#C)+OX.:K@-z@@$#xX@$@##$#cR.$$#=@#%$#&$#-@#RP.83@*$#4O._a [z !}+v'@=$#-$#;$#yW >$#b;@q: &#.G{ 4{ 24 H{ &5 ~_ f% I> fL.w4.7v@7v@7v@X_ X_ X_ A^.A^. l. l. l. l. l. l. l. l.{_ &5 n3 &5 ;b.|x.;b.W_ n3 n3 n3 n3 n3 n3 n3 o3 o^ K$ -^ =] W_ W_ dH.dH.JF.JF.b3@p3 [& a- %& '. ^_ /+ h$ 3'.|4+,$#'$#a2.1s.)$#>(+,(+=E.iF.QC.}i.!$#^h.~$#{$##4 _Q+]$#^$#/$#Za+Q'@L}.s&.uc.9q.I{+Ok.#j.~_.~_.tc.n&.;*.vY ;*.h=.-*.Y..[o.Y..{` }%.+1.+1.!_.e3.eZ 9h.Tq.}W }W }W qL 05+rk@Nc@Nc@|b+yf..G 1H Ua.Ua.m+.p5.]%.8b.($#_$#:$#<$#[$#}$#|$#1$#2$#3$#4$#5$#6$#7$#8$#9$#0$#a$#b$#c$#d$#s' e$#f$#g$#e5 d2 *! *! ,p n| RT@bP@{Y@h@#h$#i$#i$#i$#$b@j$#j$#j$#Cv@i@#UE@b.#UE@uR@@A@.9 @A@@A@.9 O9 9 9 /d@/d@(7 ]|@;! ;! +~ X:@>b@r[@t! t! X:@>b@-E -E -! tG sG sG sG sG rG rG sG sG sG tG tG tG vR@vR@Eu Eu vR@$4@[|@[|@[|@<|@$4@vR@Eu Eu vR@vR@-E -! sG rG r[@r[@r[@r[@-! -! -! tG tG sG sG sG cP@)M lQ EN k$#EN ;P [g >P l$#~M fP@m$#I5@n$#8r o$#p$#q$#r$#Je 9F v6 v6 v6 W1@9F W1@H; Oh tt -h@>z fp `i@tK Nz `W |/ !4+aj s$#t$#4L.nt@js @I.zJ.%o+u$#{m+yy+^8@v$#ji o.#2 +9f 7m pO.v[@6e j|@lr 6R.w$#x$#y$#z$#A$#B$#C$#D$#E$#F$#b0@G$#H$#I$#J$#K$#L$#M$#Jv@[h@Jv@M$#L$#L$##j@L$#[h@}K.b'.^h _r =n@or@N$#O$#P$#Q$#R$#S$#T$#U$#V$#W$#X$#Y$#Z$#`$# %#.%#+%#@%##%#$%#%%#&%#*%#=%#-%#;%#>%#,%#'%#)%#!%#~%#{%#]%#^%#/%#(%#_%#:%#<%#[%#}%#|%#1%#2%#3%#4%#5%#6%#7%#8%#9%#0%#a%#b%#eH+;l.c%#g`@d%#e%#f%#Jo |- |- -2@17 +I.4k+`G@)<@AJ.U!@U!@o<+ep =W@+^+ZZ ro }t }t G5 jB K0 &M T9 %x !z b] Oz 40 40 }a g%#9] ot@h%#ES+/b Kw i%#c; j%#k%#l%#m%#8J@&l |6 7h 5##6##6##6##7##7##7##n%#o%#p%#4i o%#q%#C]@r%#s%#t%#u%#v%#w%#x%#y%#z%#+J.vj.Ks.11+A%#B%#C%#| #} #Yj.{Z@ni.|l.1l.2H Al.TM Lt.6n.6n.:o.:o.D%#1(+|p.xj.7O 7O xj.xl.xl.xl.)s.|p.|p.)s.RM QM 1p.K` le.RM K` )s.1p.le.k[.k[.k[.;t.;t.9h.IU 4W jZ IU l=.l=.[o.Df.>*.Y*.Z*.p9.tK+Q>.t4.sQ@.9.p3.-m.E% c/.pm@E%#f_ F%#.m@G%#tp.ec qK.xM+.F.i*.bd.XQ.^Z.90+8}.8}.8}.8}.8}.8}.8}.Ov+8}.z<.7}.Rx.Ov+8}.7}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.7}.z<.7}.8}.Rx.8}.z<.7}.7}.7}.7}.7}.7}.7}.7}.Rx.[y+%U.7}.7}.Rx.Rx. Z Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.%U.%U.%U.%U.%U.%U.%U.%U.%U.Ov+Ov+Rx.8}.8}.7}.7}.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.z<.7}.8}.Rx.Rx.8}.7}.1x.6q@g, 7.@H%#I%#$#+J%#WH+UU.jO@K%#_B@>t@L%#li@M%#|3@E+@N%#O%#%*@Q @P%#Q%#&>@R%#S%#T%#U%#V%#E##W%#5B@y #mZ+>x@>x@mZ+mZ+>x@>x@y #mZ+mZ+mZ+mZ+X8+fB+_+@qB+FX+MQ@X%#Y%#Z%#`%# &#.&#+&# &#@&##&#$&#%&#oP+(x@hB+)u+E6@P3+km+Mn+mD+Mb+)B+R0+fD+Jl+K@@ny+ny+*>+0G+>B+>B+P)@Q)@Q)@&#,&#'&#$v+)&#!K ~&#{&#]&#^&#/&#(~+_&#:&#/V+It+_V+gK@Ll+):@SA+q;@69@u&@t&@:k+dy+Xg+Xl+ei+Mg+Lg+=k+=k+._+Fg+@_+xb+<]+kp+[]+]_+)k+!k+)k+-m+/f+`g+<6+%>+1V+1V+*4+*4+vI+Il+J@@(w+(w+(w+(w+(w+(w+(w+my+_w+&N+S.+}a@S.+&N+(w+g~+H:+=4+=4+H:+H:+p8+51@H:+H:+=4+H:+2V+Il+Il+QK+z@@Kl+Kl+Kl+Kl+Kl+Kl+Kl+K,@(P+PK+WA+0y+0y+0y+0y+u)+):@o8+):@u)+u)+&4+o8+o8+n0+Z;+o8+u)+Q0+f~+&4+WA+WA+uI+uI+uI+uI+uI+uI+uI+uI+WA+WA+WA+0y+0y+u)+,k+<&#,k+,k+,k+=:@`g+`g+n0+lZ+m0+m0+5a@5a@,G+,G+8}@2~+$5@dz@T0+.$#S,++$#l~+2W.[&#}&#g>@|&#i>@4&#sK@5&#j>@ E.7&#PU.rV@Xj s| =K.R_+t[@];@8 �&#]n.M= 5! $w $w H{ n3 ~_ f% v% fL.a, 7v@7v@7v@X_ X_ X_ A^.A^. l. l. l. l. l. l. l. l.|x.{_ W_ W_ {_ ;b.W_ n3 n3 n3 n3 n3 n3 n3 n3 o3 o^ K$ -^ =] W_ W_ dH.dH.JF.JF.b3@p3 j@.>= e> 9# ac o^ s& @f K].}m+a&#b&#nW Kp@2Y `O =E.ZL X>+}i.[i.)|.xT <*@c&#d&#e&#f&#NJ+g&#h&#GB.ut.!t.jA.=x.rV 2:.1:.Z*.p9.p9.S%.sH.tx.sH.Z..xY xY xY 88.B7+z].+1.+1.!_.F0.eZ Tq.Tq.jD jD 05+05+mt+mt+8H J` Cg.1H |H 5..5..T` p5.y7.|J.^&+i&#j&#k&#l&#m&#n&#o&#p&#q&#r&#s&#t&#u&#v&#w&#x&#G< {: o7 e$#|@@v) Q3 ]3 46 _} y&#y&#z&#A&#w! XC@8.#h$#$b@B&#gt@gt@C&#C&#C&#C&#j$#i@#UE@b.#UE@uR@@A@.9 @A@@A@.9 O9 O9 O9 9 /d@(7 ]|@;! Y:@+~ X:@>b@r[@t! t! X:@>b@-E -E -E -! -! tG sG rG sG sG sG sG sG sG sG sG vR@vR@Eu Eu vR@$4@[|@[|@[|@<|@$4@vR@vR@vR@vR@$4@sG rG >b@>b@r[@>b@rG rG -E -E -! -! tG tG tG cP@EN +x+D&#=S D&#=S D&#=S 3h E&#CR@FT CR@GT F&#G&#H&#I&#hx@J&#K&#L&#Uv M&#M&#L&#L&#Uv DJ.]c 3L.DJ.Ca+zg@zg@N&#Gh+O&#P&#Q&#Q&#R&#^5@ro@KJ@SM@T&#=z.TS@O5@a2@UE@V&#W&#T&#X&#Y&#Z&#`&# *#.*#+*#@*##*#Ze+AZ@$*#%*#&*#**#=*#-*#-*#;*#>*#,*#'*#)*#!*#~*#{*#{*#{*#~*#~*#]*#{*#~*#^*#/*#a0@00@00@(*#_*#:*#qa@<*#[*#}*#(u@|*#1*#2*#gC@3*#4*#5*#6*#7*#8*#9*#0*#a*#b*#c*#d*#e*#f*#g*#h*#i*#j*#k*#l*#m*#n*#o*#p*#q*#r*#s*#t*#u*#v*#w*#x*#y*#z*#A*#B*#C*#D*#E*#F*#G*#H*#I*#J*#K*#iN@L*#tN sm (B |0@f`@e%#Jo Jo Z~ =4@ { TM.SU.4k+ya {z YP.-l (G O2+vK@hP@Ok )8 Ej Ej 9Y V: K0 &M Lw H( %7 Y7 40 Ay B A[@Ft M*#DD .B LW+L8 x7 (| N*#O*#P*#Q*#R*#`p ^7 -8 9J@9J@9J@9J@9J@9J@S*#S*#,O@T*#U*#7h V*#1j W*#X*#Y*#Z*#`*# =#.=#+=#@=##=#!2.53.)S.Va.Ks.UJ *P.$=#%=#Yj.Yf@Yf@;_@pi.zl..j.lA.Lt.ik.ik.'x.:o.D%#1(+7O }q.}q.6n.6n.}q.xj.xl.6n.|p.K` 1r.)s.xl.K` 1p.Mh.1r.xl.xl.1r.QM le.;t.le.3p.eZ eZ 3p.3p.F0.@ .l=.Y../@.h=.>*.Y*.Z*.1:.tK+&1.o3.):.):.N7+&=#*=#==#K_ 9k 9k -=#;=#W[@No+C{ /= =; <>+!N+bd.uv+XQ.90+8}.8}.8}.8}.8}.8}.8}.%U.Rx.8}.Rx.%U.%U.Ov+8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.7}.z<.7}.8}.Rx.8}.z<.7}.7}.7}.7}.7}.7}.7}.7}.Rx.[y+%U.7}.7}.Rx.Rx. Z Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.%U.Ov+Ov+Rx.8}.8}.7}.7}.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.z<.7}.8}.Rx.Rx.8}.7}.bE ]w.pg+EP.>=#,=#m1+Nk '=#iW.X3@jH@)=#!=#~=#@h+y[+{=#]=#U @^=#/=#(=#_=#%>@R%#A##:=#T%#U%#<=#W%#jM@]z@JQ@94+[=#94+Sy+:+@JQ@Qy+Qy+Qy+JQ@xF@[z@94+Sy+:+@lV+OQ@}=#X%#Y%#|=#1=#2=#3=#4=#5=#6=#7=#8=#9=#0=#Py+hw+(u+f9@nk+,P+$w+XA+e~+]G+f~+1V+5T+6T+&N+ny+*>+0G+>B+>B+P)@Q)@Q)@+:P+:P+T,@T,@T,@5$@4Z+| @fX+BO@fX@BO@nZ@gX@gX@N+#N+#N+#N+#a=#gX@&&#*&#*&#qZ@,K@)K@|V+|V+lX+lX+mX+mX+yD+T.@T.@T.@*B+C@@B@@T.@%B+Pt+iy+$B+sD@dB@)w+vD+sr+oy+sr+Jl+Z.@my+{ p{ @9 Dn 2A k5 e=#f=#g=#Qj+ZU.f>.f>.bd.Q5 }c.k@. Z 7}.7}.z<.z<.7}.7}.z<.z<.z<.z<.z<.z<.z<.", "xn.xn.xn.xn.xn.xn.xn.up.up.J6 xn.je ie ie ie 7c 7c 7c E7 E7 g~ g~ g~ E7 E7 E7 E7 E7 E7 E7 je HO.R5 uk 2c Jn S+#_*+,&#h=#E#@6| i=#}N ~&#j=#k=#l=#/&@+1V+y@@*4+*4+[=@2V+J@@(w+(w+(w+(w+(w+(w+(w+_w+(w+&N+;m+;m+;m+;m+;m+2V+H:+p8+p8+H:+2V+=4+}6+Il+H:+p8+p8+2V+Il+Il+5T+1V+uI+uI+PK+PK+Kl+Kl+Kl+K,@(P+PK+uI+WA+WA+WA+uI+u)+):@o8+):@u)+u)+&4+o8+):@n0+n0+o8+u)+Q0+f~+u)+WA+WA+PK+PK+Kl+Kl+PK+PK+uI+uI+WA+WA+WA+WA+WA+f~+'k+n=#vb+HZ@HZ@HZ@`g+/f+m0+m0+m0+m0+VA+VA+{V+}6+e)+P2@4a@'}@.@#9V@o=#d$@p=#Tb+v<@^i@q=#fD@r=#R]+e=@{>+i>@s=#pZ.X #X # E.5e+$3 Aa+Xj m9+*K.Od t[@Q_+];@t=#%u u=#'@+d= G{ 24 H{ n3 ~_ f% v% fL.w4.7v@7v@7v@X_ X_ X_ A^.A^. l. l. l. l. l. l. l. l.O9.{_ &5 &5 W_ W_ n3 &_ n3 n3 n3 n3 n3 n3 n3 o3 .^ J$ .^ .^ &5 W_ )c )c JF.JF.u.+b3@bT bT >= P* v% b/ [! '+ ,,.vS.v=#w=#74@nW 2Y 7(.ro.iF.X>+}i.x=#]h.e_.*P@y=#z=#A=#B=#C=#D=#E=#F=#i<.K7+1a.3z.V2.,f.5).O>.x!+42.j;.E .4).G!.`T ,$+,$+,$+r$.x'.{7.+1.!_.e3.eZ eZ Tq.Tq.jD jD 05+05+mt+8H G7+G7+Dg.|H zf.5..5..m+.{-.q6.G=#H=#i&#I=#J=#K=#L=#M=#N=#O=#P=#Q=#R=#S=#T=#PW@U=#V=#Cc S[ :@@}@@a3 +r h< WC@A&#W=#X=#X=#_r@Dv@{Y@8.# p@$b@Y=#Z=#Z=#Z=#C&#C&#C&#j$#Cv@UE@[`@uR@[`@RT@.9 +L@.9 @A@.9 O9 +L@+L@O9 9 (7 ]|@;! ;! W:@t! r[@r[@X:@t! r[@rG -! -! -E -E -E -! tG sG tG sG sG sG rG >b@>b@>b@<|@$4@$4@vR@$4@$4@<|@[|@<|@$4@vR@vR@vR@vR@$4@$4@r[@r[@r[@r[@r[@rG sG tG -! -! tG tG sG sG sG s[@*S `=# -#`=# -#.-#+-#@-##-#$-#%-#@-#%-#@-#%-#m8 &-#*-#=-#--#;-#77@u1@77@QM@;-#>-#,-#'-#)-#v}@!-#!-#~-#{-#]-#^-#/-#(-#_-#:-#r1@<-#[-#[-#}-#|-#1-#/$@rs@vU.2-#3-#4-#5-#=T.6-#(W.7-#8-#1Z.9-#0-#a-#b-#c-#d-#e-#f-#g-#h-#i-#j-#k-#l-#m-#n-#]&@]&@o-#p-#p-#S^+S^+S^+q-#q-#p-#q-#r-#*[+`e+s-#`e+t-#u-#v-#w-#id@w-#x-#y-#z-#A-#fp@B-#C-#D-#E-#F-#G-#H-#I-#J-#K-#L-#M-#N-#O-#P-#AY@Q-#R-#S-#T-#U-#V-#W-#X-#Y-#Z-#`-# ;#.;#+;#@;##;#$;#%;#&;#*;#=;#-;#;;#>;#,;#';#);#!;#~;#{;#>^+];#%7.IW tm ko i`@r.#^;#Jo Z~ tj@-4@1a SU.+I.k .ya |} D6 =K.O2+vK@hP@=W@B6 Fj Fj jB 3q ud n.@td T9 NW+NW+ B #;@ B 40 Ft M*#DS+R&.qx q8 jb /;#(;#_;#:;#Q*#<;#[;#=8 9J@};#|;#|;#|;#|;#1;#1;#|6 L9 2;#3;#4;#7h 5;#1m 6;#7;#8;#9;#0;#a;#b;#c;#d;#e;#f;#C!+63.Z,.*c.Z#.Xu.g;#&V@oi.{Z@7+#ZU@0O zl.=w.(d.ri.ri.(Z 'x.D%#i##hk.6n.6n.6n.hk.ik.}q.xj.hk.|p.1r.1r.|p.xj.)s.RM 1r.)s.|p.|p.K` RM QM RM QM k[.eZ 3p.Mh.QM 3p.IU {` [o.Df.5#.>*.(-.p9.o9.w!+&1.o3..9.h;#1o.i;#;& hf j;#F0@F0@i6@k;#k;#i6@dj.js.j; xY+l;#xY+!, X$.90+8}.8}.8}.8}.8}.8}.8}.%U.Rx.8}.8}.Ov+%U.Ov+8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.8}.Rx.8}.8}.8}.8}.Rx.8}.8}.8}.8}.8}.8}.8}.8}.Ov+|f.|f.Rx.Rx.[y+[y+8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.z<.7}.8}.Rx.Rx.8}.7}.`'+T; m;#n;#o;#m- bO+p;#q;#*++r;#s;#x@+fD@q1@;z@ {@U^@t;#u;#v;#w;#(]@&>@x;#y;#:=#z;#C##D##A;#B;#kM@A+#94+94+JQ@Qy+Ky+Qy+xF@JQ@s6+Qy+JQ@,x@,x@JQ@:+@94+mP+C;#pT+X%#D;#|=#.&#E;#4=#F;#G;#H;#I;#J;#K;#0=#Ry+kw+~u+ s+P3+T;@l;@o0+XA+]G+P0+uI+5T+X{@;m+ny+*>+0G+>B+>B+P)@Q)@Q)@x)++=>+:P+:P+T,@7=@5$@fX+4Z+fX+BO@nq@fX@gX@gX@gX@N+#N+#N+#N+#a=#N+#pZ@qZ@qZ@AM@)K@>K@2T+2T+lX+lX+mX+mX+yD+T.@T.@T.@bX+*B+T.@yD+%B+Pt+iy+$B+dB@!w+)w+wD+oy+oy+oy+oy+Z.@ny+.f>.Q5 !N+`'+xF z<.Rx.Ov+7}.z<.8}.7}.x8 Z Z Z Z z<.z<.", "xn.xn.xn.xn.xn.xn.xn.lo.lo.up.J6 xn.je je ie 7c 7c 7c E7 E7 g~ g~ g~ E7 E7 E7 E7 E7 E7 E7 je Qw.UD+oG.1c ) .0-+P;#Q;#R;#S;#T;#Jj+I%+U;#V;#W;#X;#/&@iV@pX@m=#:&#;'@-]@_V+gK@Ll+):@SA+q;@69@u&@t&@]_+gi+Xg+ei+On+Lg+=k+=k+=k+._+@_+@_+<]+<]+kp+si+[]+!k+~k+~k+)k+`g+h @<6+%>+y@@y@@[6+[6+[=@2V+J@@(w+(w+(w+(w+(w+(w+(w+&N+&N+(w+(w+&N+;m+S.+S.+H:+p8+}6+p8+H:+2V+H:+=4+g~+H:+}6+}6+H:+g~+g~+5T+y@@WA+WA+uI+uI+PK+PK+PK+(P+Kl+PK+uI+uI+PK+PK+Kl+0y+ep+In+ep+0y+0y+T{@In+T{@In+$q+ep+WA+PK+uI+0y+0y+WA+PK+(P+(P+(P+Kl+PK+WA+WA+WA+WA+WA+WA+WA+f~+'k+Y;#Z;#`;# >#.>#Yl+`l+5~+5~+U&+U&+N@+N@+*4+p8+ h+ai+4a@Q@++>#) +(K@@>##>#+h+$>#9e@)>+:X@%>#r=#e=@Cr+,N.xO.YD.gx@&># E.*>#G3 Yg Qd >K.0$.1/ t7 Q_+=>#->#t=#p3 ;>#Y1.2{ H{ H{ &5 &5 I> I> fL.fL.7v@7v@7v@X_ X_ X_ A^.A^. l. l. l. l. l. l. l. l.{_ &5 ~_ n3 W_ W_ &5 ~_ n3 n3 n3 n3 n3 n3 n3 o3 p: /* p: .^ &5 &5 JF.JF.>>#JF.u.+b3@bT bT Z5 Y5 af.l3 =] :. *p+QM@,>#'>#)># V =E.mT M `L X>+zr.v++cQ.!>#~>#{>#]>#^>#/>#(>#_>#:>#<>#[>#K7+1a.>f.}>#}>#J{+A6.Dv+J{+q4.<6.p4.3w.d4.0[.0[.<&+0[.x'.{7.!_.!_.e3.eZ 9h.}W }W }W }W qL qL mt+8H 8H 8H _X.Cg.GE 5..Ua.X` yz.|J.1;+lv@|>#1>#2>#>r@3>#4t@4>#mh 5>#6>#7>#&[ 8>#9>#0>#a>#Bc _+#Y' ~4+1' 66 8_@~{ b>#c>#,{ ,{ d>#it@f@#e>#h$#B&#Y=#kx f>#f>#Cv@Cv@Cv@i@#UE@[`@bP@RT@bP@.9 O9 O9 .9 @A@.9 +L@@A@.9 +L@O9 /d@(7 ]|@;! Y:@+~ X:@r[@X:@X:@rG tG sG tG -E }g }g -E -! tG -! tG sG rG >b@X:@t! t! :|@:|@[|@<|@$4@<|@<|@[|@<|@$4@vR@vR@vR@vR@$4@<|@r[@r[@r[@X:@r[@>b@rG sG rG rG >b@>b@r[@r[@r[@s! G&#{}+g>#{}+u'@q<+v'@P2+v'@h>#v'@h>#v'@h>#v'@M+@t1@>'+_-#r1@MJ@i>#MJ@r1@a]+j>#k>#kH@|v@l>#e=@|v@m>#NJ@n>#o>#p>#q>#Y_@O]+L6@f$@V##r>#iB@l #s>#t>#u>#yU.v>#w>#x>#y>#z>#A>#z>#B>#C>#D>#E>#F>#G>#H>#=[+I>#J>#K>#L>#M>#N>#O>#P>#Q>#R>#S>#-]+T>#gk+gk+U>#V>#W>#X>#Y>#Y>#Y>#Y>#Z>#`># ,#`>#.,#+,#.,#@,##,#$,#%,#&,#*,#=,#-,#;,#>,#,,#',#),#!,#~,#{,#],#^,#/,#(,#_,#:,#<,#[,#},#|,#1,#2,#3,#4,#5,#6,#7,#8,#9,#0,#a,#b,#c,#d,#e,#f,#g,#h,#i,#j,#k,#l,#m,#n,#o,#p,#q,#r,#s,#t,#u,#v,#w,#B2.+P 7l ko [b@D2.x,#y,#gw@z,#=4@6e OD+5|@Q>+3=.y*@|} V} (G vK@hP@A%@Pk T[ ;J 3q J0 &M zN td T9 w7 w7 y9 #;@40 B%.Qu F).LW+A,# S p8 jb Q| mp B,#C,#D,#E,#F,#G,#H,#Xm@I,#WE@WE@J,#K,#K,#K,#L,#M,#9n I9 N,#[m O,#P,#Q,#R,#S,#T,#U,#V,#W,#X,#Y,#Z,#`,# '#1^+[Z L` 2...'#Yj.+'#@'#7+#ZU@oI 0O Gk.Ks.^m.^m.Aq+Uu+i##1(+u7.hk.6n.6n.hk.ri.ik.}q.}q.xj.xl.)s.)s.)s.K` K` |p.xj.7O |p.K` 1r.1r.)s.QM QM QM QM QM le.3p.eZ {` [o.h=.vY >*.(-.p9.K'+f{+l;.h;#):.t4.#'#L2.lg cW K_ $'#x0 %'#&'#*'#='#-'#;'#W2@+< C* aW+SV R9.90+8}.8}.8}.8}.8}.8}.8}.Rx.7}.z<.z<.8}.Rx.8}.z<.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.7}.Ov+[y+%U.8}.z<.Rx.[y+Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.7}.%U.%U.8}.8}.[y+[y+Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.8}.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.z<.7}.8}.Rx.Rx.8}.7}.`'+hc >'#,'#''#)'#8T.!'#'=#U$+9G@k6@~'#<-@y*+bF@@[@{'#]'#^'#/'#('#n @{J+_'#:'#<'#z;#['#u #iM@}'#kM@y #s6+s6+94+s6+Qy+xF@|'#|'#bB@94+s6+[=#,x@[z@94+xF@1'#2'#pT+3'#4'#O##5'#6'#7'#8'#9'#0'#a'#b'#c'#d'#(x@Jy+(u+ s+T;@,P+$w+@/+cy+U_@_T+Kl+wI+b~@&N+ny+*>+0G+>B+>B+P)@Q)@Q)@x)+x)+=>+=>+=>+:P+:P+3G+4G+fX+M+#nZ@fX@nq@e'#gX@gX@N+#N+#N+#a=#a=#a=#N+#zM@AM@AM@V.@>K@YK+Q,+Q,+lX+lX+mX+mX+yD+T.@T.@T.@%B+yD+B@@T.@~w+iy+$B+S.@dB@!w+1R+sr+oy+oy+@k+oy+0&@ny+.C* !N+:P.},+xF Z Ov+%U.7}.z<.Ov+8}.)_ Y% Y% Y% Z z<.z<.", "xn.xn.xn.xn.xn.xn.xn.:| :| lo.up.J6 xn.je je 9c 7c 7c E7 E7 g~ g~ dd E7 E7 E7 E7 E7 E7 E7 E7 Qw.xn.8c u& jP.a-+l'#m'#n'#(I.o'#.#.<7+p'#q'#r'#[~+:$@iV@s'#t'#u'##Zl+Yl+5~+5~+U&+U&+N@+(f+*4+p8+dp+2]+'v@S{@dm@x'#! +V0+y'#gm@7Z.$>#z'#A'#>4+B'#0Z+C'#sL.++@D'#Wb+PP.E'#FC.yg@~%@]b y +Of U4+<1 F'#`/+VP.G'#H'#c;@I'#+@ C, C, =5 W_ W_ &5 &5 &5 7v@7v@7v@X_ X_ X_ A^.A^. l. l. l. l. l. l. l. l.~_ &_ &) ~_ &5 {_ W_ &5 n3 n3 n3 n3 n3 n3 n3 o3 og og p: -h &5 n3 W5 J'#JF.JF.JF.b3@14 14 *5 H{ fL.Vl.ti u$ u).K'#L'#$v@!V M'#Bn.qu ru ro.X>+=;+k!+@5+ML.N'#O'#P'#Q'#R'#S'#T'#P'@3~.cn.K7+ap.-'.7).tH.U'#Dv+/:+4z.@c.g;.Oz.h;.r$.b^.b^.b^.yY .R+EP !_.e3.s(.9h.3p.}W EU iD EE EE Tq.qL 05+05+|b+83+GE EE 5..!_.V` S,.7b.Rq.)g.V'#W'#X'#Y'#Z'#`'# )#.)#+)#@)##)#$)#%)#&)#Ef *)#=)#Q-@+r P#@+r <: jX@-)#;)#,{ >)#_r@,)#ht@e>#h$#B&#Y=#Z=#kx f>#kx i@#i@#WH UE@y&#bP@@A@.9 @A@O9 kI@')#QT@))#!)#+L@WC@c2 ~)#_7 T:@G0 V:@V:@+9 W:@Z:@X:@Z:@r[@cP@-! 7G@6F 6G@Du Cu Du Fu -! -! tG sG >b@X:@t! @~ W:@(|@r[@}|@s[@%2@cP@%2@cP@dP@es R5@+5)#n~+6)#7)#1|+1|+7)#dk@hm@:v@8)#,(@,(@ (@9)#I3+0)#a)#WI+Fl+7r+Fl+8B+b)#c)#d)#e)#Wv+f)#i:+i:+i:+g)#{T+h)#i)#&]@j)#k)#l)#m)#n)#o)#o)#p)#q)#r)#s)#t)#t)#u)#v)#w)#x)#y)#x)#y)#x)#z)#A)#B)#A)#C)#D)#E)#C)#F)#s@@G)#H)#I)#J)#K)#L)#M)#N)#O)#P)#Q)#R)#S)#T)#U)#V)#W)#X)#Y)#Z)#<,#`)# !#.##.!#+!#@!##!#$!#%!#&!#*!#=!#-!#;!#>!#,!#'!#)!#!!#~!#{!#]!#^!#/!#(!#w`@_!#JC@:!#^+$O+>E.QR 7d@-l.$6.}0@h`@/+#f%#y,#DM.z,#U7 6|@=2@6,@J5 )z K0 F( jB 3r /n B6 Pg >[ }: }: I^ dp P| zN T9 sK o0 o0 ^c B%.L8 Qu F).qH A,#hM+sO+jb Q| }!#|!#1!##)#2!#3!#]7 4!#5!#i@#Cv@j$#C!#f>#f>#26 7.#16 16 %l 2n 7!#8!#9!#0!#a!#b!#c!#d!#e!#f!#g!#h!#i!#j!#k!#l!#m!#n!# @+6z.Wu.$&+C<+'u.8O H0.Pc+&b+*c.*c.^m.3l.ri.3l.{m.H0.6n.6n.hk.3l.hk.6n.xl.7O }q.nz+f+.IK.ih.nz+7O }q.}q.|p.K` 1r.)s.|p.QM K` |p.K` le.eZ eZ 3p.{` V*.,*.>*.>*.(-.p9.4J.@R+ )> )> )> )> Rx.Rx.Rx.z<.7}.90+0d.0d.90+~#,~#'~#+*>+0G+>B+>B+P)@Q)@Q)@x)+x)+x)+=>+.C* 7-+xY+XQ.dT cN Rx.%U.z<.7}.%U.Ov+x8 x8 Y% Y% Z Z z<.", "5c 4c 4c 4c p} +_ O_ <| +_ O_ O_ O_ <| 5c 4c 0' 8c 7c E7 g~ E7 7c 9c g~ 7c 7c E7 kC o} kC g~ <| a% 9& -+ t, bo@^~#/~#(~#_~#%k.cl s-.:~#<~#[~#UM+}~#Y^+|~#1~#2~#kR+Q;@_V+_V+Mn+q;@q;@q;@gK@od+s=@dy+dy+dy+Xg+>k+&k+@_+@_+@_+Fg+Dg+di+Rl+~/+9X+gK@gK@gK@gK@gK@gK@gK@A$+iD+iD+iD+iD+Jn+A$+(T+PK+wr+6Z+;m+;m+&N+(w+/w+/w+;B+f^@;B+~-+f[+G$+'v@7a@16+16+}a@16+}a@16+}a@16+(w+:|+;m+e[+;m+e[+&N+(w+wr+M@+3~#M@+4~#X{@5~#O,@4~#X{@5~#0$@6~#b~@y$+y;@|$@4X+4X+4X+4X+4X+y@@y@@&I@Hn+5a@|$@4X+|$@VA+VA+R0+R0+R0+Q0+Q0+Q0+Q0+Q0+u)+u)+u)+u)+u)+u)+u)+u)+ o+ o+vb+HZ@,k+'k+/f+/f+%>+%>+4X+|$@{V+{V+,G+X}+e1@7~#7~#yp+HD+}8+i9@>5@8~#9~#0~#% +]B+;4+$ +7)##*+a~#Oq@47@b~#4/+ma@fk@c~#fW.,N+JI+C;@d~#OR.OR.$Y.`D.e~#E'#]`+f~#J# O^.,5 }| >5 Xl 0# ]= Q# `z {_ w4.w4.w4.w4.w4.w4.w4.v% v% I> I> I> fL.fL.fL.n3 n3 &5 &5 &5 W_ W_ W_ &5 W_ {_ ;b.;b.{_ W_ &5 ed ed ac {_ ;b.|x.|x.g~#7v@7v@X_ 4{ 4{ 5! 2{ +@ !% fd ^_ U# }* vq.h~#i~#j~#3B..@.x.L'+j=.i=.k=./@.|%.zv+ 1.s~#Q-..$.9h.9h.9h.3p.3p.3p.3p.3p.7O RM jZ k[.RM F0.>}.@D.}W 1W }q.=:+^X LY.o~.t~#u~#v~#w~#x~#y~#z~#A~#B~#C~#u&#D~#E~#F~#G~#H~#I~#J~#K~#L~#M~#S: 8_@>! I@LJ@>{#,{#,{#'{#){#!{#!{#Ku@Ku@Ku@~{#=T.~{#2y+{{#]{#^{#/{#({#_{#:{#<{#;>+[{#7V@}{#5&@BM@;K@7T+}8+|{#{K@{K@J:+$E+1{#R^@G&+,[+'[+kI+kI++ >#4{#5{#6{#7{#8{#9{#0{#0{#9{#9{#a{#b{#c{#d{#e{#f{#g{#h{#i{#j{#k{#h{#l{#m{#i{#n{#o{#p{#i{#j{#q{#r{#s{#t{#u{#v{#w{#x{#y{#z{#A{#B{#C{#D{#E{#F{#G{#H{#I{#J{#K{#L{#M{#N{#O{#P{#Q{#R{#S{#T{#U{#V{#W{#X{#Y{#Z{#`{# ]#.]#+]#@]##]#$]#%]#&]#*]#=]#-]#F.#;]#>]#,]#,]#JU@']#)]#cC@_C+(V '~.!]#~]#y%.y%.{]#]]#vj@^]#x,#/]#DM.qU.,6 Gp@yO+m[@(]#_]#]m+n.#*2 {4+Gn -[ }} [: T: Fh U: U: D/ F%@o_ td T9 sK NW+40 F).c|@c|@M*#_,.`i gh b,@jb (| U[ :]#<]#f5 s4 s[ M1 WH )> )> )> )D+)> 7}.7}.8}.8}.Rx.Ov+Ov+%U.%U.Ov+Ov+Rx.8}.8}.7}.@$+h]@:{+u]#v]#M8@f!+ZW+h]@M8@M8@M8@M8@M8@M8@M8@M8@NM+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+7}.8}.Ov+%U.%U.Ov+8}.7}.%U.%U.%U.Ov+Ov+Rx.Rx.)> 'g@'g@'g@'g@'g@]! ko.ko.w]#L$ ls@x]#I{ @'+y~+f( y]#z]#;@@TC+A]#B]#@I.C]#D]#[ +tz@M/+1_+E]#F]#G]#H]#I]#J]#K]#L]#+#@M]#N]#O]#P]#Q]#R]#S]#T]#W<@hq@gB+y #>x@eB+r6+U]#V]#W]#X]#Y]#Z]#`]# ^#zG+:L+.^#oT+MQ@+^#@^##^#$^#%^#&^#*^#=^#-^#;^#>^#,^#'^#)^#GX+A+#.9+gB+!^#&E+tG+'P+er+gp+#w+ay+vr+oy+oy+Qt+0G+cB@cB@x;@x;@DD+DD+DD+,T@,T@,T@w;@DD+w;@x;@R)@!K@>K@>K@YK+4G+4G+4G+2R+fX+| @~^#mZ@nZ@gX@{^#mZ@]^#qZ@F@@7G+^^#^^#3 @3 @;B+;B+$N+$N+S.@S.@S.@S.@#a@mX+[P+S0+_|+d[+_|+_|+|=@|=@{k@{k@{k@{k@#9@Aq@/^#(^#_^#:^#<^#J:+[7@A;@L;#ja@[^#PP.^N.}^#|^#1^#l .il iQ -M 2^#C% 3^#4^#Tx.!M.Zs.Zs.3n+4n+gy.5^#90+7}.7}.z<.Y% x8 x8 )_ Z Z Z Z Z Z ", "p} 5c 5c 5c <| O_ ;] <| +_ O_ O_ O_ <| p} 4c 0' 8c 7c E7 g~ E7 7c 7c g~ 7c 9c E7 dd o} kC g~ ]= E V s& *^ U<+^~#H!@6^#r( b[ p|@za.:~#<~#7^#a)+8^#9^#0^#a^#b^#lR+/G+-]@-]@-]@Mn+Mn+gK@U_@Mb+s=@dy+dy+dy+gi+Sl+~/+Rl+di+di+Dg+Dg+Dg+Rl+~/+cy+gK@cr+cr+cr+cr+cr+cr+cr+)P+)P+)P+)P+!P+cr+~P+ay+b~@6T+&N+&N+&N+(w+/w+/w+Y.@~-+~-+>2+rd+c~@c^#'v@16+16+16+16+16+16+16+16+:|+e[+e[+R.+R.+e[+e[+&N+-7@8m@kc@kc@8m@9k@ze@pg@8m@9k@ze@pg@pg@ze@9k@wr+y@@y@@y@@y@@4X+4X+4X+4X+lI+5a@VA+4X+4X+4X+|$@VA+f~+f~+Q0+Q0+Q0+Q0+R0+R0+u)+u)+u)+u)+u)+u)+u)+/f+od+:6+,k+,k+,k+%4+/f+/f+%>+%>+4X+|$@[6+{V+{V+{3@e1@d^#d^#d^#e^#f^#EI+g^#/v@T5+h^#i^#j^#k^#F@+fZ.ki@l^#Nq@[v@47@m^#&@#A1 Q:+| + E.E'#n^#o^#vJ+p^#sO.,I@D]#| +c!+d,@q^#Y. |f.P] 6g+}| Z5 ^Y /R.[Q W_ fL.fL.fL.fL.fL.fL.fL.v% v% I> I> I> fL.fL.fL.n3 n3 &5 &5 &5 W_ W_ W_ &5 W_ {_ ;b.;b.{_ W_ &5 W_ W_ W_ {_ {_ ;b.;b.;b.&5 &5 &5 n3 n3 n3 n3 Y_ +# T@ &' E& Y@ Py.By.bC+^F+'h r^#BI.HW WL+ET._y.F%+#l@-g+>l.s^#Ve.0(.C{.t^#u^#Qb.v^#w^#ue.x^#|`.!e.9k.Qz.3z.C].8p.4^.d;.aR /%.gZ {>.lt+lt+kt+kt+~>.lD ,}.F0.eZ 9h.9h.9h.@[.k[.e3.l&.e3.:R FP 4v.{g..$.$ .[o.r9.X*.V%.y^#z^#A^#B^#C^#D^#E^#F^#G^#H^#I^#J^#K^##X^#X^#g>#;@#.{#Y^#Z^#`^# /# /# /# /#./#+/#=-#@/##/#$/#%/#&/#*/#=/#-/#;/#>/#7 @,/#Y)+'/#Y_@)/#.<+!/#o6@o6@o6@t>#~/#{/#]/#^/#//#^/#//#//#,V+(/#=}@_/#Q_@:/#Gl+TK++N+9G+P,+my+ED+)~#<&@G6@PK+y;@z@@d^@4X+Hn+@Vc.wC Cn.j`@Im.68@=(#-(#-(#48@e%#;(#(#zp ws ,(#'(#%h+E| )(#x) -[ R1 Kc [: [: U: k< U: U: o_ G2 Lw sK MW+za F).!(#c|@M*#_,.b6@ S tO+!6 b3 M| M| ~(#Ke {(#](#XQ@^(#v{ q[ (} M1 S} S} []#s[ 8J@ r J9 MU@1m 8!#/(#((#_(#:(#<(#[(#}(#|(#1(#2(#3(#4(#5(#6(#7(#8(#9(#0(#f]#a(#j!#b(#c(#d(#83.Q` GP Kt.Wu.e(#f(#Xf@7+#oI Sp.oI UJ UJ hk.}q.6L 6L g(#Mt.6D.h(##@@_m.yl.TM TM lA.lA.lA.lA.lA.SM oe.uf.uf.me..G 1H . .^-.~C.q/.|:.sH._-.j;+$_.i(#j(#,C+q,@d& P& $+ {& M( v!#k(#l(#-'#r]#m(#n(#n(#s]#o(#ij s]#p(#Z! [* 7x.w,.,=@$J.},+n&+@A.e; .F..F.u=+u=+d6+E8+E8+E8+>p.>p.>p.>p. )> )D+)D+)D+)> Yt.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.8}.13+M8@q)@q(#q)@OU+]%@OU+q)@OU+OU+OU+OU+OU+OU+OU+M8@NM+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+7}.8}.Ov+%U.%U.Ov+8}.7}.Ov+Ov+Ov+Ov+Rx.Rx.8}.Yt.'g@+d++d+'g@'g@]! ko.ko.ks@Sx.!M.r(#eb+0e.^p+s(#t(#u(#v(#K' w(#x(#1O.D]#-{#w<@N]+y(#z(#nc@j|+A+@A(#B(#C(#D(#E(#E(#F(#G(#H(#I(#J(#R]#K(#L(#M(#_o+gw+fB+_+@fB++J+N(#O(#P(#Q(#R(#S(#T(#U(#T(#r @V(#MQ@W(#X(#qZ+Y(#Z(#`(# _#._#+_#@_##_#$_#%_#&_#*_#=_#A+#.9+gB+y&@W5+`I+tG+%!@ q+Ft+ay+fy+oy+sr+:w+0G+cB@cB@x;@x;@DD+DD+DD+,T@,T@,T@DD+DD+x;@x;@x;@w;@w;@w;@w;@2 @2 @5&@5&@5$@E@@| @| @nZ@7V@M+#lZ@&&#AM@F@@7G+X.@X.@3 @9G+;B+;B+$N+$N+S.@S.@S.@S.@#a@mX+$N+m;@dp+dp+Qt+:w+}=@}=@L)@L)@L)@L)@<&@-_#;_#>_#,_#6~#'_#)_#.o+u<@!_#ja@Oe@*@#^N.C6 ~_#1^#i< il `r =M {_#e^ ]_#^_#F=+F=+!N+Zs.qh qh en+XQ.90+7}.z<.z<.Y% Y% x8 )_ z<.z<.z<.z<.z<.z<.", "<| <| <| <| +_ O_ ;] <| +_ +_ O_ +_ <| p} 5c 8c 9c 7c E7 g~ E7 E7 E7 g~ E7 9c E7 dd kC dd E7 W* }# i+ }. vv.Ty.^~#^F./_#(_#K8+__#6Y :_#<_#[_#}_#( @|_#0^#1_#2_##}@Ln+ip+ip+ip+Mn+_V+)B+)B+8X+s=@dy+dy+dy+gi+Xg+~/+Rl+di+di+Dg+Dg+Dg+di+~/+cy+]G+6X+6X+6X+6X+6X+6X+6X+Jn+Jn+Jn+Jn+6X+A$+(T+uI+0$@e^@J@@J@@(w+(w+&N+:|+:|+/w+>2+>2+f[+I:+c~@G$+R.+S.+S.+S.+S.+S.+S.+S.+;m+S.+S.+}a@}a@S.+S.+;m+L@+wr+wr+M@+wr+X{@b~@b~@X{@X{@b~@O,@O,@b~@X{@X{@z@@z@@1V+1V+y@@4X+|$@|$@5a@VA+|$@4X+4X+4X+|$@|$@u)+u)+u)+f~+Q0+Q0+R0+R0+f~+f~+f~+f~+f~+f~+f~+G:+Mb+[]+%4+%4+%4+%4+`g+`g+%>+%>+4X+4X+[6+[6+[6+{3@e1@e1@d^#d^#Q.+HD+EI+g^#t$+3_#+L+4_#5R+5_#i^#6_#7_#pK@HH@x[+8_#9_#0_#pV@MD+| +gk@a_#b_#RP.f!@#K.!N.ZD.ZD.c_#gk@d_#W} e_#8 )_ jy.+# UL P# bN /& &5 I> I> I> I> I> I> I> v% v% I> I> I> fL.fL.fL.n3 n3 &5 &5 &5 W_ W_ W_ &5 W_ {_ ;b.;b.{_ W_ &5 &5 &5 &5 W_ W_ {_ {_ {_ n3 n3 n3 n3 &5 &5 &5 =5 5[ ,_ U# E& P6 2* eu.bW+X0 f_#g_#w3.LO.:h@>|.bQ.+,+#l@fe+t{.6Y ^h.h_#i_#![ nk@j_#k_#l_#cw.!(.Pa.|`.jX.e[.nj.u9.D].pd.i&.'>.YP hZ gZ z]@z]@dD eD gZ 4W jZ @ .,}.F0.s(.s(.e3.E1./Z :R *4.^X e;.l4.ui.5;.4W+pU G_.p!.m_#nj+n_#o_#p_#q_#r_#s_#t_#u_#v_#w_#x_#xv@8 .<@X:@`:@rG %2@||@1|@Z:@xt ;b {a {a Qv 0> =P #y #y G&#g>#g>#D_#ms+E_#F_#G_#H_#H_#I_#%l+J_#K_#`m+L_#L_#M_#N_#`m+K_#ks+*{#O_#P_#Q_#R_#S_#<)#T_#U_#Y_@MX.O$+d_+Y{@|f+V_#W_#X_#Y_#Z_#`_#O1+O1+ :#.:#+:#@:#T=+JK+(/#.f+.f+#:#$:#%:#0r+&:#I,@*:#RK+=:#_|+V&+vI+=w+7X+-:# N+|G+gp+_V+Ht+^V+(V+;:#;:#;:#%/+Eg+Eg+:]+:]+:]+:]+Z1+>:#%|+a8+@2+,:#,:#':#):#h8+h8+!:#!:#!:#!:#!:#~:#{:#]:#^:#/:#(:#_:#::#::#<:#<:#[:#}:#|:#1:#1:#2:#3:#4:#4:#5:#6:#7:#8:#4:#6:#8:#8:#8:#7:#6:#5:#9:#0:#a:#b:#c:#d:#e:#f:#g:#h:#i:#j:#k:#l:#m:#n:#o:#p:#q:#r:#s:#t:#u:#v:#w:#x:#y:#z:#A:#B:#=!#C:#D:#E:#F:#G:#H:#I:#J:#K:#L:#M:#VI@N:#2y@O:#P:#wN@Q:#[A@R:#S:#T:#Gt@3E@bC@U:#D%+],.kt y%.18@V:#qj@oh@W:#X:#Y:#^<@^<@Pm Z:#V! (c <<@Vu _B+Cp+,y ,y _( Pg u[ :: #[ <: [: k< k< I^ D/ F%@!8 Lw sK H( za F).!(#vd@F).F).LW+<#,<#'<#)<#!<#~<#{<#]<#^<#/<#f]#(<#b(#_<#3b.yz.S` >e.GP @&+@&+:<#ZU@7+#Wq.Wq.Ks.Ks.@(.mD <<#6L g(#g(#7l.[<#}<#!.+p.*; *; F=+F=+D8+d6+d6+E8+.F..F..F..F.90+90+8}.8}.Rx.Rx.)> )> )D+)D+)D+)> )> Rx.Rx.Rx.Rx.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.ko.ZW+PS@q)@q)@OU+OU+PS@q(#q)@q)@q)@q)@q)@q)@q)@v]#NM+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+7}.8}.Ov+%U.%U.Ov+8}.7}.Rx.Rx.Rx.8}.8}.8}.7}.i~ 'g@+d+'g@'g@'g@]! ko.ko.6=+ls@l*.N=.^p+h= 9<#0<#a<#b<#c<#d<#jW.x(#e<#Qq@[ +f<#g<#Z)+h<#i<#j<#k<#l<#m<#n<#D(#o<#p<#q<#r<#s<#t<#J(#u<#v<#w<#B6@!^#Yr+0m+vB+W8+x<#y<#z<#:E+A<#B<#C<#S<@}a+E$@RX+D<#E<#F<#G<#H<#I<#J<#K<#L<#M<#N<#O<#P<#Q<#R<#S<#T<#rM@]z@.9+t6+y&@f9@`I+tG+@q+.q+cr+ay+fy+1R+1R+w)+0G+cB@cB@x;@x;@DD+DD+DD+,T@,T@DD+DD+x;@x;@x;@cB@8G+8G+8G+8G+2 @2 @5&@5&@5&@5$@4Z+4Z+nZ@nZ@mZ@U<#pZ@AM@1 @~K@8G+8G+x)++It+It+ip+Mn+69@:V+|G+sD+s=@dy+dy+dy+dy+gi+Sl+~/+di+di+di+Dg+di+Rl+~/+9X+]G+6X+6X+6X+6X+6X+6X+6X+6X+6X+Jn+Jn+6X+A$++w+uI+L@@K@@e^@e^@J@@&N+&N+;m+;m+e[+:|+>2+>2+f[+f[+I:+R.+S.+S.+S.+S.+S.+S.+S.+S.+S.+}a@|6+|6+}a@S.+6Z+X{@X{@wr+M@+wr+wr+X{@b~@X{@b~@b~@b~@b~@b~@b~@X{@FD+FD+fD+z@@y@@4X+|$@|$@5a@VA+VA+VA+VA+VA+VA+VA+):@&4+&4+u)+f~+Q0+Q0+R0+Q0+Q0+Q0+Q0+Q0+Q0+Q0+/|+Nb+]_+-m+-m+%4+,k+`g+h @%>+%>+4X+4X+*4+*4+[6+}6+q8+e1@d^#d^#d^#Q.+f^#EI+-[#;[#;[#3_#aG+FI+FI+>[#;9@,[#$N@'[#}&#)[#~'#![#Wb+~[#,-#a_#SD@xc@n^#{[#]Q.uz@,Q.g +E'#@{#E(@y*@][#9 rz.~D.>= ,* =V ;,.n3 v% v% v% v% v% v% v% v% v% I> I> I> fL.fL.fL.n3 n3 &5 &5 &5 W_ W_ W_ &5 W_ {_ ;b.;b.{_ W_ &5 &5 &5 &5 &5 &5 &5 &5 W_ ~_ ~_ n3 &5 &5 W_ {_ {_ =5 fd a# U# V5 := P6@yi c.+hT+^[#/[#b_.]V sN _y.l!+([#`>+t{.|B !|.2K Cy 3: _[#:[#<[#[[#}[#|[#x^#1[#T>.-u.Z<.&}.u9.At.pd.F@.B_.dZ v+.1I+TF 2[#rA+hZ @ .@ .IU IU ,}.!_.e3.R:.od.FP F_.U++UB.a3.a3.'W t}.]=+U:.3[#h3.4[#5[#6[#7[#8[#9[#0[#a[#b[#c[#d[#e[#f[#g[#h[#T=#&[ *[ i[#Zp M1 (} m] i'#m] `V@`V@[`@[`@[`@[`@[`@[`@b.#i@#UE@b.#UE@i@#i@#[`@RT@!)#!)#]C@B_#Nx@')#')#')#:r@:r@:r@:r@:r@R~#j[#ew k[#=! l[#m[##A@l.#5h 5h }u +~ r[@sG $4@$4@||@`:@mI@Rv n[#o[#p[#q[#ix@i!@Re@Re@r[#s[#t[#u[#L+@v[#w[#x[#y[#z[# .@A[#B[#C[#;T.D[#E[#C[#5Y+F[#-W+G[#k$+!/#H[#o+#I[#l #J[#s##4)#,>+3W..*+K[#L[#M[#N[#O[#P[#.(@.(@Q[#R[#S[#T[#S;+$9@$9@U[#U[#U[#U[#V[#W[#X[#Y[#Z[#sb+`[# }#uD+Qn+wp+O0+Nb+v=@v=@`+#.}#+}#W4@@}##}#$}#Kg+=_+*f+Bb+&|+W3+@2+):#@2+):#%}#~:#&}#&}#&}#*}#*}#=}#-}#;}#;}#;}#>}#>}#>}#>}#,}#'}#)}#!}#~}#{}#]}#^}#^}#/}#(}#_}#:}#<}#[}#[}#}}#|}#1:#1}#2}#3}#4}#3}#5}#6}#7}#6}#8}#3}#7}#9}#0}#a}#b}#c}#b}#d}#e}#f}#g}#h}#i}#j}#k}#l}#m}#n}#o}#p}#q}#r}#s}#t}#u}#v}#w}#x}#y}#z}#A}#B}#C}#D}#E}#F}#G}#H}#I}#J}# %#K}#L}#M}#N}#O}#P}#Q}#R}#S}#T}#U}#V}#W}#Bt@X}#lf@-y@Z>+H%+o:.^h {]#28@Fp@tn@f%#Y}#/<@/<@`= !2@,4@#M9 ^7 #|#$|#Z8 %|##<#&|#*|#=|#&|#-|#;|#>|#,|#'|#)|#!|#~|#{|#]|#^|#/|#(|#_|#a(#/<#:|#<|#[|#)2.ic.9;.`h+WS Xd@'u.Xu.7+#Xu.Xu.Ks.9O @(.mD <<#<<#8%@g(#}|#||#1|#8%@Yu.SM SM SM uj.uj.uj.2l.kI uf.SM oe.kI DU DU $[.Q:.Q:.r9.{` Q%.o&. )> )D+)D+)D+)> ]$@Ov+Ov+Rx.8}.8}.7}.7}.7}.7}.8}.8}.Rx.Ov+Ov+cI+f!+OU+q)@q)@OU+OU+q)@9&+q)@q)@q)@q)@q)@q)@q)@v]#NM+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+7}.8}.Ov+%U.%U.Ov+8}.7}.Rx.8}.8}.8}.7}.7}.z<.,v.'g@+d+'g@'g@]! ]! ko.2^ Qe+qK.00+0e.wi cn+8w+b|#lC.c|#d|#e|#f|#g|#e<#h|#G)+i|#j|#k|#;`+l|#m|#n|#I]#o|#n<#p|#q|#r|#s|#t|#u|#v|#R]#w|#iF@)c+x|#y|#Od+jk+rf+z|#A|#B|#C|#D|#/c+E|#5V@F|#*#@' >' x5 x5 O6 O6 >' 6c L_ x5 x5 >' 6c *$ C i+ }. kP.f6+S)+Ks+nv+]v+@1#a1.cd@#1#<_#bc@$1#&[#|_#zg+%1#&1#*1#gD+It+ip+-]@_V+69@:V+|G+]/+nD+_k+_k+{/+_k+-2+$4+$4+_6+_6+<]+<]+<]+_6+$4+mD+gK@A$+A$+A$+A$+A$+A$+A$+A$+A$+6X+6X+6X+A$++w+uI+H6@0$@0$@J@@6T+6T+L@+;m+S.+e[+:|+/w+/w+>2+f[+f[+e[+;m+;m+;m+;m+;m+;m+;m+S.+S.+}a@|6+|6+}a@S.+6Z+b~@d^@y;@y;@N)@y;@d^@d^@-(@-(@-(@d^@d^@-(@-(@-(@|R+|R+FD+fD+1V+y@@4X+4X+VA+5a@5a@5a@lI+5a@5a@5a@):@):@&4+&4+u)+u)+f~+f~+f~+f~+f~+f~+f~+f~+f~+G:+Nb+[]+-m+%4+,k+,k+h @h @%>+%>+4X+4X+*4+*4+[=@=4+q8+}a@e1@7~#7~#yp+HD+}8+P.+k1@k1@=1#;[#ID+ID+-1#zr+q$+}k+,[#ia@ex@nV@;1#u@+(B+>1#1v@@g+2v@Z #E'#1j+DC.vf@,1#JI+<,.wz@2L.x[ '1#]+ Ti.)1#[& I! ;,.4{ n3 n3 n3 n3 n3 n3 n3 n3 n3 &5 &5 &5 W_ W_ W_ n3 n3 &5 &5 &5 W_ W_ W_ &5 W_ {_ ;b.;b.{_ W_ &5 W_ &5 &5 &5 &5 &5 &5 &5 n3 n3 n3 &5 W_ {_ {_ {_ T$ fd C' J$ n6 A* 5{ Kp+!1#Vs+}m+~1#u;.]V 7(.-E.A>@l!+Se.PW x%.=A D9+@,+i_#![ {1#]1#s#@r3.^1#}1+ue.Uh.-u.Y<.^.@Q@.I0.LV._U.;}.rQ.YF /1#G9@(1#x.@D0.F0.F0.F0.!_.!_.!_.!_.p/./-.e;.#B.n~.j]#_1#:1#<1#[1#*a.}1#|1#11#o#31#RV@41#51#61#71#81#91#01#a1#b1#D0 2n 9n []#[]#{1 {1 y&#y&#i'#i'#O;#c1#y&#[`@[`@b.#b.#[`@[`@[`@UE@[`@uR@uR@[`@[`@RT@.9 !)#d1#!)#d1#!)#e1#e1#f1#d1#d1#e1#e1#QT@QT@QT@e1#g1#h1#i1#j1#k1#Qx@l1#Cj@Qx@5h mt@7G@-! -! tG DN m1#n1#o1#p1#q1#r1#s1#t1#u1#v1#w1#S_#T_#S2@O]+g~@x1#y1#z1#y1#M$++*+A1#|f+V_#9Z+qX+|)#X,@B1#T)@=1@C1#D1#aD+E1#F1#G1#[x@VX.H1#I1#J1#K1#L1#M1#N1#7V@O1#P1#Q1#R1#s;@0~@mX+B@@k0+S1#S1#tD+tD+tD+tD+tb+T1#U1#P;@T1#ey+V1##m+IZ@[]+$4+Sl+ir+/+@W1#Xl+X1#Y1#Z1#`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#12#22#<:#32#42#<}#52#62#72#82#52#92#02#82#a2#92#b2#<}#}}#c2#d2#d2#e2#f2#5:#6:#g2#h2#i2#j2#k2#l2#m2#n2#o2#p2#q2#r2#s2#t2#u2#v2#w2#x2#y2#z2#A2#B2#C2#D2#E2#F2#G2#H2#I2#J2#K2#L2#M2#N2#O2#P2#Q2#R2#S2#S2#T2#U2#V2#W2#X2#Y2#Z2#ld@-U@d .su j`@&} V:#`2#.3 xp 3#Rm (8@.3#+3#1E@_L.t9@@3#Wv .#+R$+eW.6e+NU.10 xa S: S: S: >[ >[ J0 J0 J0 I^ ud &M k .o0 w7 ^b dg Qu Qu Z}#IW+e9 r0 i{@M8 E^ #3##3# |# |#B,#f$#:]#Ed $3#Gj Si Qh e5 vb uy uy %3#&3#*3#=3#-3#;3#^7 2m b1#b1#8!#[6 |]#>3#,3#'3#)3#!3#~3#{3#]3#^3#/3#(3#vv@7$#_3#:3#<3#[3#}3#|3#!a.*0.63.9;.().13#C<+Wq.Xu.Wq.>3+-_.;3+;3+23#23#33# r.43#}|#53#`q.Yu.SM SM SM SM SM SM SM DU uf.SM oe.me..G .G me.;t.;t.xE.{>.*5.L-.63#Kc@73#:p.83#93#O~.1b T% ($ G^ F;@qS+b3 l(#03#a3#9|#m(#-'#o(#u!#o]#n(#6<#b3#c3#nn+X+ $J.7x.7x.@A.+s.+s.Ys.Qe+u=+d6+D8+D8+>@+hS..F.>p..F.,8+Pj+Rx.7}.Rx.Rx.)> )> )D+)D+)D+)> ]$@Ov+Ov+Rx.8}.8}.7}.7}.7}.7}.8}.8}.Rx.Ov+Ov+cI+f!+M8@v]#v]#M8@M8@v]#u]#v]#v]#v]#v]#v]#v]#v]#v]#NM+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+7}.8}.Ov+%U.%U.Ov+8}.7}.Rx.8}.8}.8}.7}.7}.z<.,v.'g@'g@'g@'g@]! ]! ko.2^ qK.[U wM+Qj+>b.;++d3#]p+iQ+Q' e3#f3#x@x6+gB+E6@ s+tG+O3#@q+NF@Ft+Kl+-w+#B+!w+K)@9G+8G+8G+R)@R)@w;@w;@w;@w;@w;@R)@R)@R)@8G+8G+8G+^^#^^#X.@X.@5G+2 @5&@5&@R,+5$@4Z+4Z+nZ@M+#~^#W|#zM@zM@AM@V.@YK+2 @' >' >' L_ >' x5 O6 M_ O6 >' 6c L_ >' x5 L_ ,' *$ }# ,+ s& kP.f6+V3#V<+F#@r1 )j &n+cd@$[#<~#W3#$1#( @Y^+X3#Y3#Z3#`3#gD+-]@-]@+%>+4X+4X+[=@[=@[=@vI+q8+}a@}a@e1@e1@7~#yp+HD+|8+P.+P.+k1@k1@ 4# 4#* +>m+Q3#8e@}k+y[+ia@q=#.4#vc@$++JB@+4#.#+fW.k>@(5@PP.zR.vf@u|@#3 L`+_Q.(R@`w zb hI.E @4#a3@=V 0& G{ &5 &5 &5 &5 &5 &5 &5 n3 n3 &5 &5 &5 W_ W_ W_ n3 n3 &5 &5 &5 W_ W_ W_ &5 W_ {_ ;b.;b.{_ W_ &5 {_ {_ {_ W_ W_ &5 &5 &5 &5 &5 W_ W_ W_ W_ {_ {_ #% ed )O .^ l+ [% U& Wx.c|+uq@#4#,$#$4#al o{.:}+A>@A>@ZR.9A.ya.Jx V[.%4#Rz &4#*4#=4#-4#;4#>4#,4#5x 7v.Pa.Vb.'4#)4#!4#I0.6|.o(+qe.3#.~4#{4#]4#^4#A .eZ eZ eZ s(.s(.s(.^X ^-.qy.gx.L*.n7./4#%)+(4#_4#:4#bi.<4#[4#}4#|4#31#14#24#34#44#54#64#74#84#94#04#A4 a4#R*#R*#s[ s[ <} <} z&#z&#i'#i'#;)#X=#z&#[`@b.#b.#b.#b.#[`@uR@b.#uR@RT@bP@uR@uR@RT@.9 d1#d1#/M /M /M /M d1#e1#e1#e1#f1#/7 QT@.9 ))#b4#c4#d4#e4#f4#wK g4#h4#l1#Qx@5h u! r[@s[@Zi@cP@i4#j4#k4#k4#l4#m4#n4#o4#p4#q4#r4#1)#C1#2W.s4#t4#@@#u4#[_+Jq@}_+Z.+v4#w4#x4#y4#z4#A4#B4#C4#D4#f&@2z@E4#F4#G4#G4#H4#I4#J4#K4#|z@9V@L4#@N+zI+w+;w+fy+R0+f~+`g+^_+)k+]_+M4#M4#M4#^|+M4#}w+N4#O4#P4#Q4#R4#S4#T4#U4#{|+V4#V4#>f+W4#&2+4[+X4#Y4#Z4#`4# 5#.5#`4#+5#+5#@5##5#$5#$5#%5#@5#&5#*5#=5#-5#;5#%5#>5#,5#'5#)5#!5#)5#!5#~5#{5#~5#{5#]5#^5#/5#(5#_5#:5#:5#<5#<5#[5#:2#}5#|5#15#25#35#45#55#55#65#75#75#85#55#55#85#95#95#65#05#05#a5#b5#c5#d5#e5#e5#f5#5}#g5#h5#i5#j5#k5#l5#m5#n5#o5#p5#q5#r5#s5#t5#u5#v5#w5#x5#y5#z5#A5#B5#C5#D5#E5#F5#G5#H5#I5#J5#K5#L5#M5#N5#O5#P5#Q5#R5#S5#S5#T5#U5#V5#W5#X5#Y5#Z5#`5#{9@ 6#.6#+6#60@s|@S7 .3 6G.jq {- w/@_0@w[@uW.Xb+oB.r'+@6#83@#6#~T.nB $6#%6#xa :: S: i< $9 $9 3q J0 J0 I^ ud &M k .o0 w7 ^b %;@@n@dg /b e9 1r &6#Bn (| /;##3#6~ /*@/*@<]#<]#*6#S[ =6#-6#P: Si E> Vr (o Z=#&3#;6#>6#,6#'6#'6#$|#^7 ]7 3;#3;#b1#}]#8!#)6#!6#~6#{6#]6#^6#/6#(6#_6#:6#<6#[6#}6#|6#16#26#36#46#56#66#76#e&.86#96#Y^.UM oI oI ;3+11+;3+-_..@+.@+06#43#43#43#a6#a6#jI 2l.uj.uj.SM SM oe.oe.DU uf.uj.oe..G |H 1H .G 9h.9h.D0.YS+;K W..j5@b6#c6#:p.d6#e6#_j.@n }9.A# f6#F1 qS+2##i%#k(#F;@g6#@2 @2 C| o(#dj.dj.o(#P<.c3#h6#&g+58 n&+4>.i6#g7 Ys.Ys.Qe+u=+d6+d6+D8+D8+hS.>p.+s.Ys.,8+Pj+Rx. Z Rx.Rx.)> )> )D+)D+)D+)> )> Rx.Rx.Rx.Rx.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.ko.{! h]@v]#v]#M8@M8@h]@:{+v]#v]#v]#v]#v]#v]#v]#v]#Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+7}.8}.Ov+%U.%U.Ov+8}.7}.Rx.Rx.Rx.8}.8}.8}.7}.7}.'g@'g@'g@]! ]! ko.2^ 2^ ls@:= cn+|r+5x+j6#;++k6#l6#m6#}K@~4 Dt mm@n6#2k+P$+A'#oo@5T@P8+o6#p6#q6#r6#n<#s6#t6#u6#v6#w6#G(#s<#x6#y6#Es@hq@dm+D6@E6@2h+of+of+nf+z6#nO@z<#s #u3#W;@o|+x3#y3#A6#B6#C6#u+#D6#E6#E6#F6#G6#G3#H6#I6#J6#K6#L6#M6#N6#O6#wF@mP+.J+X8+gw+ s+.s+%!@.q+.q+MF@(T+Kl+up+#B+!w+,B+9G+8G+8G+R)@R)@w;@w;@w;@w;@R)@R)@R)@8G+8G+X.@X.@^^#X.@X.@8G+2 @YK+4G+5$@5&@5$@4Z+4Z+nZ@nZ@mZ@P6#&&#&&#*&#qZ@>K@2 @>T@hX@f^@f^@Gn+Gn+B@@B@@B@@B@@3R+=B+zD+ky+M2@M2@M2@0~@,B+,B+|=@|=@|=@|=@{k@a&@Q6#R6#S6#pg@ED@nX+i9@fi@n1@T6#P$+'N.GW.Xh ;s@89 Mz !d@-h@'E #3#e^ U6#]_#2x.ig #v e; bd.Q5 b(+2q@61. Z Z Z Z Z Z Z 7}.7}.7}.7}.7}.7}.", "<| +_ O_ +_ <| 5c 4c ;] O_ <| p} 5c p} <| +_ x5 x5 >' L_ >' x5 M_ ._ O6 >' 6c 6c >' >' 6c !% *$ D C N@ 0f+Ty.<:+Os+F#@r1 1Q _k cd@$[#V6#W6#$1#X6#(#Y6#Z6#`6#kR+_G+_G+_G+69@69@:V+:V+_T+nD+s=@t&@t&@t&@t&@s=@s=@s=@s=@nD+nD+s=@t&@`+#]/+}T+Kl+Kl+Kl+Kl+Kl+Kl+Kl+uI+uI+WA+0y+0y+WA+WA+uI+a~@y;@y;@y;@y;@X{@X{@L@+L@+6T+6T+(w+(w+&N+;m+S.+&N+6T+6T+6T+6T+6T+6T+6T+6T+L@+L@+6Z+6Z+L@+L@+6T+wI+fD+z@@1V+y@@y@@1V+1V+FD+fD+z@@1V+1V+z@@fD+FD+FD+FD+FD+FD+fD+fD+fD+fD+z@@1V+4X+|$@VA+|$@|$@4X+u)+u)+&4+):@):@o8+n0+n0+):@):@):@):@):@):@):@h @!]+kp+ o+ o+ o+vb+h @h @%>+%>+4X+y@@[=@vI+vI+vI+=4+=4+=4+}a@}a@16+16+yp+ 7#|8+|8+_7@_7@P.+P.+k1@:7@= +[k+)}@;9@d!@.7#q=#ka@>N.+7#}c@JI+,N+}-@!t@ZD.*@#uz@u|@@7#Ue Pf D6 kB ,[ #7#$7#:! %7#z}@[Q -5 H{ H{ H{ H{ H{ H{ H{ 4{ 4{ G{ G{ G{ H{ H{ H{ n3 n3 &5 &5 &5 W_ W_ W_ &5 W_ {_ ;b.;b.{_ W_ &5 ;b.;b.;b.{_ {_ W_ W_ W_ {_ {_ {_ W_ W_ W_ W_ W_ v% si si -^ ~2 9u.z* Ux.tr.;p+zd.&7#*7#P+.aj+`L D%+27+Vw.)8.,~. m.U[.M<.=7#-7#;7#av@>7#,7#pI.'7#}E.>c.G].1`.-S.;S.!4#s+.Mu.wH+#*.dm.s:@T}@)7#1[@|W @ .+1.e3.l4.B}.*4.#B.Lz.%)+i]#/4#!7#~7#{7#1h.`'#]7#^7#/7#(7#_7#:7#<7#[7#'<#}7#|7#17#27#37#%<#47#57#7h S*#67#R*#Zp uy uR@[`@y&#y&#;)#77#b>#Dv@z&#[`@b.#UE@UE@b.#[`@uR@b.#bP@@A@RT@bP@uR@bP@@A@f1#87#97#07#]M /M k[#a7#O9 O9 9 +' _7 c2 z&#I,#c4#b7#c7#d7#j1#g4#l1#8v |u _t :,@<,@e7#kl E&#m8 f7#g7#h7#i7#j7#k7#4Z.l7#hB@I3+gB@Wv+Z@@9i+m7#n7#m;@dp+&N+(/+:|+h~+>T@5#S7#T7#S7#U7#V7#W7#X7#Y7#Z7#`7# 8#.8#+8#.8#`7#`7#`7#@8##8#$8#_5#%8#%8#:5#&8#_2#*8#=8#^}#-8#;8#45#>8#,8#>8#'8#'8#>8#)8#,8#'8#!8#~8#>8#{8#,8#65#<}#]8#^8#/8#(8#_8#:8#<8#[8#}8#|8#18#28#38#48#58#68#78#88#98#08#a8#b8#c8#d8#e8#f8#g8#h8#h8#i8#j8#k8#l8#m8#n8#n8#o8#p8#q8#r8#s8#t8#u8#v8#w8#x8#y8#z8#A8#O)#N)#B8#C8#D8#E8#F8#G8#H8#80@I8#qj@Z:#un@JA@J8#9O.6L.4k+_T.2A.aR+_Q.K8#{T.F'#L8#L8#M8#Gr a^ ~o Q9 89 eF.eF.3q J0 ,[ ,[ ^z m.@jw ~z Q>+Q>+^b x%@_G b] r0 r0 r0 Bn D~ &{ Gh {_#.|#=)#b2 |#SY@N8#N8#j} Fd Ph E> `3 4' Cv@O8#P8#'6#Q8#R8#R8#S8#T8#-3#G,#*3#=8 2m K9 U8#V8#W8#X8#Y8#Z8#Wz@`8# 9#.9#+9#@9##9#$9#-`@%9#&9#*9#36#[3#=9#66#-9#($#W#.Z#.&c.&c.Lt.=w.Lt.9O ;9#>9#-_.23#,9#,9#'9#06#=w.TM lA.2l.uj.oe.uf.uf..G uf.uj.uf.1H 7R GE 1H lD lD |W R>@)9#u7@k5@w7@!9#~9#{9#]9#r;.+n }9.x+ ^9#/9#^( (9#i%#]4 I2 _9#:9#g6#3<#C| ij u!#u!#<9#[9#ss.ss.}9#k` dT =; >p.hS.hS.qK.F=+D8+d6+E8+<4+*; Ys.#v +s.0d.Pj+8}.Y% Rx.Rx.)> )> )D+)D+)D+)> Yt.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.8}.13+]! v]#:{+v]#M8@ZW+M8@v]#M8@M8@M8@M8@M8@M8@M8@M8@Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+7}.8}.Ov+%U.%U.Ov+8}.7}.Ov+Ov+Ov+Ov+Rx.Rx.8}.8}.'g@'g@]! ]! ]! ko.2^ 2^ F=+#< Qj+|r+RD+Y$+|9#oQ+fQ A5 Y1@&4@19#;-#$++Bp+B'#1Y+>`+!R@29#39#49#59#69#79#89#99#09#a9#b9#c9#d9#A|#e9#>x@Z8+gB+Iy+Od+2h+nf+o(@8>@z6#gM@f9#_V@fM@g9#1o+4a+'!@A##h9#y;#i9#j9#k9#l9#m9#n9#n9#m9#D3#o9#p9#MQ@q9#(z@Is@r9#[=#lP+fB+I #{u+O<@ q+s9#s9#t9#ay+(P+up+#B+)w+P,+9G+8G+8G+R)@R)@w;@w;@w;@R)@R)@R)@8G+8G+X.@X.@X.@X.@X.@8G+R)@YK+>K@jX+jX+5$@E@@| @| @nZ@7V@M+#~^#u9#u9#]^#&&#)K@2 @@N+T0+hX@hX@Gn+Gn+4$@4$@B@@B@@3R+1G+ky+W{@W{@ky+#a@mX+K)@K)@K)@K)@6o@6o@6o@=9@v9#w9#_^#x9#'_#y9#.L+l9@F]#z9#%>#-1@#K.Xh A9#I0 (g I< iB A5 M| J/ U3#B9#6=+6=++s.+s.+s.Ys.},+},+61. Z Z Z Z Z Z Z z<.z<.z<.z<.z<.z<.", "<| +_ +_ <| p} 4c != ;] O_ <| p} 5c p} <| +_ O6 x5 >' L_ >' x5 M_ ._ O6 >' 6c 6c L_ >' 6c !% *$ E }# X% 0f+U<+N{+C9#nv+r1 1Q _k cd@:_#D9#E9#$1#F9#1~+X3#G9#H9#I9# >+:G+:G+:G+[G+69@)B+)B+b$@Mb+s=@t&@t&@`+#t&@s=@s=@t&@t&@t&@s=@t&@`+#v=@p;@OK+(P+(P+(P+(P+(P+(P+(P+PK+uI+WA+0y+0y+WA+WA+uI+M,@pk+pk+N)@y;@y;@d^@X{@b~@6T+J@@J@@6T+;m+S.+}a@6T+6T+6T+6T+6T+6T+6T+6T+J@@6T+L@+L@+L@+L@+6T+O,@FD+fD+z@@1V+y@@y@@y@@1V+|R+fD+z@@1V+1V+z@@fD+|R+fD+fD+FD+FD+FD+FD+FD+|R+|R+FD+z@@y@@4X+y@@1V+z@@f~+f~+u)+):@o8+n0+Z;+#-+o8+o8+o8+o8+o8+o8+o8+'-+,-+9d+Y8@8d+ o+ o+h @h @%>+%>+4X+y@@vI+vI+5T+5T+=4+=4+=4+=4+=4+}a@}a@16+7~#yp+ 7#J9#J9#J9#|8+|8+*5@_7@i9@.o+2w+gm@hm@.7#'{+K9#IB@L9#>N+.#+.E.}-@D]#M9#,I@,1#N9#d'.!V.O9#i&@U!@h>#=K.P9#,* Q9#^Y ;5 24 24 24 24 24 24 24 4{ 4{ G{ G{ G{ H{ H{ H{ n3 n3 &5 &5 &5 W_ W_ W_ &5 W_ {_ ;b.;b.{_ W_ &5 O9.|x.|x.;b.{_ {_ W_ W_ ;b.;b.;b.{_ W_ &5 &5 &5 cl+a, v% Q_ Zl z|.pg Y# ;+@], R9#S9#T9#U9#'$.],.:}+27+Vw.Vw.-E.z#+N;.V9#D9+W9#wV@FO.8 #]v Y9#%3+Z9#u!+G#+6%.[l.4Q+I0.wH+`9##*.U}@2[@ 0#J9@2[@FU @[.N-.!_.l4.U++Mz.G{+G{+.0#g=+3h.+0#@0##0#$0#%0#&0#*0#=0#-0#;0#+9#>0#)<#,<#,0#'0#37#)0#!0#~0#{0#}]#W8 ,O@8J@%l (,@S} [`@[`@`V@y&#;)#77#~{ Q~#A&#[`@b.#UE@UE@b.#[`@bP@[`@bP@@A@@A@bP@uR@uR@b4#ew ]0#^0#97#/M d1#a7#/7 9 /,@/,@Yq R} X-@vG /0#(0#-d@_0#:0#Px@;8 (7 ,8 8~ &S ^)#Y^#v'@OM.W4+ZN+<0#[0#}0#4Z.|0#*1@ui+10#20#9i+c)+30#40#*]@50# B+`n+60#]/+Tt+^/+sp+ L+np+3$@70#80#90#00#a0#b0#c0#d0#80#1=@ }#uD+uD+Tn+mp+sp+Yn+I6@e0#f0#f0#v=@s=@rD+Xg+/+@/+@3&@g0#h0#q7#i0#i0#i0#j0#z7#z7#z7#k0#l0#m0#n0#o0#p0#q0#r0#s0#t0#u0#v0#w0#x0#x0#y0#z0#A0#B0#C0#K7#D0#E0#F0#G0#H0#I0#J0#U7#!5#{2#/2#=8#K0#L0#M0#N0#K0#O0#P0#Q0#R0#R0#S0#S0#T0#T0#T0#T0#!5#Y7#]5#]5##8#(5#_5#_5#[5#:2#:2#|5#|5#25#25#U0#85#V0#W0#V0#X0#V0#Y0#Z0#V0#`0# a#.a#X0#W0#V0#+a#05#@a##a#$a#%a#&a#*a#=a#-a#;a#>a#,a#'a#)a#!a#~a#{a#]a#^a#/a#(a#_a#:a##qa#ra#;*#sa#ta#}d@d4@s@#pq v~ w; 7L.ji ua#5L.=y l.@/k@U4+ (+va#wa#xa#ya#za#a^ ~o Q9 I0 O#@eF.V: 3q i&@,[ ^z l.@jw ~z Aa#Q>+Aa#E6 %7 ib r0 i{@i{@E^ Ba#l} 2^#C`+.|#=)#~m |!#Ca#I:@Da#Da#)< 29 Ea#d2 <} [`@#b@Fa#R8#R8#Ga#Ga#R8#Ha#Ha#=3#Ia#G,#]7 2;#94#Ja#V8#Ka#Gx@La#Z8#Ma#(`@Na#Oa#'|#:6#Pa#Qa#Ra#Sa#Ta#Ua#Va#Wa#Xa#Ya#Za#P*.R` G0.%c.Z#.TM Lt.9O `a#;9#>3+;3+fK. b#,9#;3+;3+Lt.=w.lA.uj.oe.uf.kI .G uf.uj.uf.zf.FE `F zf.a<.Mo.p_@R}@J9@.b#x7@p3@+b#@b##b#$b#~N@.n $~.* %b#(9#/( 2##(9#l(#03#l(#b_ a3#8|#&b#@2 m(#u!#*b#=b#-b#-b#ss.[9#hm (& ;b#@G+;b#>b#`b@>@+E8+j*.k*.*; +s.g7 e; 0d.Pj+7}.)_ Rx.Rx.)> )> )D+)D+)D+)> i~ 7}.8}.8}.Rx.Ov+Ov+%U.%U.Ov+Ov+Rx.8}.8}.7}.7}.5A.:{+u]#v]#M8@f!+ZW+h]@M8@M8@M8@M8@M8@M8@M8@]! Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+7}.8}.Ov+%U.%U.Ov+8}.7}.%U.%U.%U.Ov+Ov+Rx.Rx.Rx.]! ]! ]! ko.ko.2^ 2^ F=+#< dn+eb+,b#I%#'b#)b#T, `, BN |/ ;l mm@!b#/B+~b#|k+|Y+{b#]b#~z@7!@^b#/b#(b#_b#:b#K@)K@E@@E@@jX+J #lZ@| @nZ@7V@nZ@mZ@gb#hb#u9#]^#)K@5G+ib#;(@hX@hX@Gn+Gn+4$@4$@B@@4$@AD+1G+ky+W{@W{@ky+mX+P,+T##T##T##T##jb#jb#jb#a=@kb#lb#mb#qg@ci@-4+*N+j9@m1@nb#B'#qL.Dh+ob#A9#Bm Dj ~4+iB pb#M| A= ]_#^_#2^ 80+>p.Ys.+s.+s.}c.)J. Z Z Z Z Z Z Z Z Z Z Z Z Z Z ", "p} 4c 5c <| +_ p} 5c 3c 3c 4c 4c 5c p} p} <| L_ U% ,% ^% 9& Q% U% ^% ^% U% U% 9& 9& U% U% ^% ]= n C s& 0f+ c m) qb#ov+rb#sb#v%.cd@:_#ek+7^#a)+]+@EZ@tb#ub#vb#wb#kD+xb#xb#:G+69@_V+U_@U_@P0+:V+:V+:V+|G+|G+|G+eK@eK@|G+|G+|G+eK@eK@p;@p;@VH@K,@|R+|R+FD+FD+fD+fD+fD+z@@z@@fD+fD+fD+fD+fD+Kl+c&@yb#M)@pk+M,@pk+a~@N)@N)@wr+X{@b~@b~@L@+6Z+q8++5@+5@+5@M@+M@+wr+wr+wr+wr+wr+wr+M@+M@+M@++5@+5@VA+):@&4+f~+Q0+R0+vr+fy+vr+.B+#k+.B+vr+R0+vr+.B+1V+z@@FD+|R+|R+FD+z@@1V+y@@y@@y@@4X+4X+|$@|$@|$@&4+&4+):@):@o8+o8+n0+n0+n0+n0+n0+Z;+Z;+#-+#-+i)+#>+9d+ o+ o+8d+8d+'-+/f+/_+%>+4X+|$@{V+{V+,G+,G+N@+N@+(f+)-+(f+51@0}@W}+}a@|a@lc@(7@(7@Ut+g1@7~#nX+yp+zb#<_+Ab#Bb#Cb#dk@Db#Eb#P/+IB@vW.EC.U;.87@gx@uz@gx@| + E.<,.lT.HC.{y ,[ uK@uK@Fb#Gb#Hb#)1#9$+Ib#Jb#d= 2{ H{ 5! G{ G{ H{ H{ H{ 24 24 24 $w {_ {_ {_ {_ {_ {_ {_ {_ n3 W_ {_ W_ n3 ~_ &5 {_ &5 {_ ;b.{_ W_ &5 W_ ;b.{_ {_ {_ {_ {_ {_ {_ {_ g% <4 -J.{D Zl df.'; [% b* (_ Kb#=R.Lb#Mb#[0.Nb#=E.E).,(+Ob#bQ.;x+{,.#[#!>#Pb#Qb#hY+Rb#Sb#Tb#Ub#Vb#Wb#Xb#q[.i$.t_.MT.vH++P.Yb#d=.$b+K/@Zb#`b#>Z+]X.9h.@j.`^.F_.T,.Kz.h;+ c#.c#+c#@c##c#$c#%c#&c#*c#=c#-c#;c#{6#>c#,c#]3#'c#)c#_`@#c !c#~c#{c#]c#^c#/c#(c#_c#7.#:c#b.#UE@ p@{Y@Dv@Q~#&0@&0@&0@Q~#A&#uR@uR@[`@[`@uR@uR@bP@bP@bP@uR@uR@bP@@A@O9 (d@ew #1c#h!@2c#SD@Y #3c#4c#5c#O:+6c#XX.8)#|_+@>#S,+$9@J,@7c#8c#T1#9c#0c#N4#ac#bc#cc#cc#2&@ZA+1$@1$@~k+dc#Yl++m+ec#ec#fc#}(@gc#V1#V1##m+@m+St+kr+)k+[]+hc#_k+Sl+gi+ic#jc#kc#lc#3&@g0#]|+]|+Pg+=2+V4#~|+mc#y7#nc#oc#r0#r0#r0#pc#pc#qc#rc#rc#sc#tc#uc#vc#wc#wc#xc#yc#zc#zc#Ac#Bc#Cc#Cc#K7#Dc#Ec#)2#!2#Fc#Gc#Hc#R7#Ic#Q7#Jc#Kc#S7#Lc#Mc#Mc#Mc#Lc#Nc#Oc#Oc#Pc#Qc#Jc#Rc#Kc#P0#V7#R0#Sc#Sc#R7#R7#/2#/2#Tc#Tc#*8#=8#=8#-8#25##a#@a#&a#Uc#Vc#*a#=a#*a#Vc#Wc#Xc#Wc#Wc#Wc#Xc#Xc#Xc#Xc#Xc#Yc#Yc#Zc#`c#`c#,8#{8#{8# d#.d#+d#@d##d#$d#%d#&d#*d#=d#-d#;d#>d#,d#'d#)d#!d#~d#{d#]d#^d#/d#(d#_d#:d#@+<4+E8+&e#.F.>p.Ys.+s.1x.90+Ov+%U.Rx.Rx.)> )> )D+)D+)D+)> )> Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.Rx.%U.[y+[y+%U.Rx.8}.5A.5A.5A.5A.5A.5A.5A.5A.be+be+{! {! ]! 5A.5A.Ea+%U.%U.%U.%U.%U.%U.%U.%U.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+5A.]! ]! ko.NM+Zh@80+u=+N)+Qj+ph I%#j6#0/ Tn (' 76+[t V2@.p lm@*e#/i@W0+=e#;`+l|#H[+-e#;e#>e#,e#'e#)e#!e#~e#Q!#{e#]e#^e#/e#=T@&T@lV+JQ@Qy+hB+eB+y6+,c+Rd+X;@(e#_e#:e#T@-K@g[+g[+;K@2 @>K@)K@YK+2 @;K@-K@-K@;K@2 @YK+8G+8G+R)@R)@2 @2 @4G+4G+E@@E@@fX+fX+7V@BO@BO@BO@8e#9e#9e#iX+4G+5&@AI+AI+=>+zI+AD+AD+0e#0e#xI+*B+T_@r<@T_@< @< @< @zD+zD+M2@#a@P,+mX+T##S##K)@0&@4e@ae#be#;v@-7@ED@ce#yr+3:@k|#5W._ +KG.IW.de#I0 Ii `Q@ee#fe#ge#v] B9#B9#80+80+90+90+90+90+4H.4H.8}.8}.7}.7}.z<. Z Z Y% z<.z<.z<.z<.z<.z<.", "p} 4c 5c <| +_ p} 5c 5c 5c 5c 5c p} p} p} f+ 9& U% ,% ^% 9& Q% U% ^% ^% U% U% 9& 9& U% U% ^% ]= n C }. kP.U<+3> he#nv+r1 fn.v%.cd@ie#ek+7^#a)+]+@1~+je#ke#le#me#Ln+xb#xb#ne#[G+69@)B+)B+b$@:V+:V+:V+|G+|G+eK@eK@eK@eK@eK@eK@eK@p;@p;@oe#o;@:x@:&@|R+|R+FD+FD+FD+FD+z@@z@@z@@z@@z@@z@@z@@PK+pe#yb#M)@LF@mm+pk+a~@a~@a~@y;@d^@b~@b~@X{@wr+M@+M@+M@+M@+wr+wr+X{@X{@X{@wr+wr+wr+M@+M@+M@++5@4X+T{@&4+u)+f~+f~+Q0+R0+R0+f~+R0+vr+vr+Q0+Q0+R0+fy+1V+z@@FD+|R+|R+FD+z@@1V+1V+1V+y@@y@@4X+4X+4X+4X+&4+&4+):@):@o8+o8+n0+n0+o8+o8+n0+n0+Z;+Z;+Z;+T&+,-+wb+vb+ o+Y8@Y8@'-+h @O,+O,+VA+VA+{V+{V+,G+Y}+qe#Qn+Rn+c[+c[+)-+N@+51@*4+*7@{3@z~@z~@bm@j}@f1@e1@xr+]3@36+re#Ab#se#te#@x@ue#>{+T2@wL.}c@nh@Pe@*@#*@#PP.1v@(5@3v@66+/z ,[ e_@=K.:1 a9 ve#we#F+ OZ@xe#Y1.5! $w G{ d= G{ 4{ 4{ G{ G{ H{ 24 24 $w {_ {_ {_ {_ {_ {_ {_ {_ n3 W_ ;b.{_ &5 n3 W_ {_ &5 {_ ;b.{_ W_ &5 W_ ;b.{_ {_ {_ {_ {_ {_ {_ 6v@/0.ye#;H.':+{D *L Ki.n6 b* ;^ ze#Ae#Be#z;+Ce#Wk.PZ De#r{.!l+_y.4V.vo.9'.za.Ee#Fe#Ge#He#mJ.Ie#Je#)7.Ke#&3+2Q+28.s_.MT.Mu.Le#Me#$*.%b+x{@Ne#Oe#J/@4#.fZ A].B}.U*.qy.X!+Pe#Qe#Re#Se#Te#Ue#Ve#We#Xe#Ye#Ze#`e# f#.f#X8#+f#@f##f##c $f#49 ]c#]c#`-@Z-@$8 |m %f#(c#&f#7.#[`@b.#{Y@w! Q~#Q~#@] *f#=f#-f#Dv@uR@uR@[`@[`@uR@uR@bP@RT@RT@bP@bP@RT@.9 O9 9 C_#j[#;f#$~ ))#`Z _7 U-@:7 Jf Cn )8 O#@eF.eF.eF.-{ u/@Sg Vj >f#./#,f#'f#+.@)f#!f#5Y+~f#{f#_ +]f# *+^f#z)+j~+! +FM@J,@=:#/f# B+(f#_f#:f#5#Oc#Jc#Lc#Gf#Hf#If#If#If#Gf#Gf#Mc#Jf#Kf#Nc#L0#L0#Oc#K0#Pc#Lf#Lf#Lf#]2#]2#^2#^2#^2#R7#]}#{}#Mf#Nf#Of#Pf#/8#Qf#Rf#Sf#Tf#Uf#Vf#Wf#Xf#Yf#Zf#`f#Xf# g#.g#Wf#Vc#Zc#+g#@g#@g##g#$g#%g#&g#*g#=g#-g#;g#>g#,g#'g#)g#!g#~g#{g#]g#^g#/g#(g#_g#:g##-]+og#<~+SM+pg#qg#rg#^;#3#Gg#Hg#Ig#Jg#Kg#Lg#Mg#Ng#Og#Pg#Qg#Rg#i+.Sg#Tg#G=#9;.73.%'.%'.Xd@Xd@GP Wq.Sp.*(.$=#;_.TM TM lA.lA.2l.2l.2l.2l.lA..G GE 1H .G |H `F FE PX ZF 1W R}@H1@q:@x7@j5@Ug#Vg#Wg#r3.`d#@n A{ -@ f6#i%#{4 /4 ]4 (9#]4 k(#/9#03#Xg#Yg#6|#Zg#m(#<9#=b#`g#Dr.a/. h#[9#9i..h#[* +s.ls@ls@d6+<4+>@++h#.F.>p.Ys.Ys.1x.90+Rx.Ov+Rx.Rx.)> )> )D+)D+)D+)> )> Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.Rx.%U.[y+[y+%U.Rx.8}.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.Ea+Ea+Ea+%U.%U.%U.%U.%U.%U.%U.%U.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+]! ]! NM+cI+ks@ks@qK.-T+wi ^p+l##@h#,a@#h#$h#%h#Y4 _d@CJ.a_#=[@sZ@&h#q'@h|+j|+]b#C6+*h#3b#u|#O]#!e#)e#!e#=h#Q!#-h#;h#R!#>h#=T@lV+82+94+:+@hB+94+2N+,h#]c+62+'h#)h#!h#~h#}e#{h#{h#]h#^h#/h#(h#_h#:h#&>@8L+T@-K@-K@-K@;K@2 @>K@)K@YK+2 @;K@-K@-K@;K@2 @YK+8G+8G+8G+R)@2 @YK+4G+4G+E@@E@@4Z+fX+nZ@nZ@nZ@7V@8e#8e#9e#iX+4G+5&@AI+AI+:P+=>+1G+1G+1h#1h#*B+2h#r<@r<@T_@< @< @< @zD+zD+M2@#a@P,+mX+T##S##T##4 @9$@ae#be#;v@-7@ED@ce#1w+3h#4h#5h#!>+v +}Q.N;#k.@1t gQ 'm 6h#7h#w] 8h#^_#5D+5D++!]+kp+vb+ o+Y8@dc#T&+'-+lZ+lZ+5a@5a@,G+,G+{V+U&+wp+ub+ m+lr+lr+lr+vp+c[+%>+[6+{V+{V+{V+y^@']@+5@&7@|a@k}@ 7#*N+K:+Jq@jh#E]#z'#N$+0e@kh#xG.,Q.gx@$$#gx@*@#42 (5@Tq@wz@{*@e_@|##(G E%.6O.lh#mh#nh#S. OZ@oh#bl+M=.,;.M=.,;.,;.,;.+..p3 14 -5 ;5 $w {_ {_ {_ {_ {_ {_ {_ {_ W_ {_ |x.;b.W_ &5 {_ |x.&5 {_ ;b.{_ W_ &5 W_ ;b.{_ {_ {_ {_ {_ {_ {_ 6v@/0.ye#v7+w7+ym.ph#Ki.n& b: me N- qh#rh#sh#th#x'+o..uh#;|.jT@^z.GT.Ve@SZ RW vh#wh#xh#yh#zh#Ah#Bh#)7.m:@&3+2Q+Ch#+*.Dh#Lu.Eh#+P.Fh#6<@Sw@2n.Gh#)^@eZ sd.z]./Z bR '*.k7+Hh#Ih#Jh#Kh#Lh#Mh#Nh#Oh#Ph#Qh#Rh#Sh#Th#Uh#Vh#Wh#Xh#x4 Bt Yh#Zh#`h#Rx ]d 7n V*# i#4!#%f#b4#.i#[`@[`@XC@+W@Ev@>)#=f#+i#@i#u{ Dv@uR@uR@[`@[`@uR@uR@bP@@A@@A@@A@@A@.9 +L@ 9 9 S^#R~#:r@s{ ^J P^#aY P9 Sg l8 R_+o<+DL.{*@{*@{*@ ^+#i#$i#`m+%i#'Q+&i#*i#x[#=i#-i#;i#5h#>i#1_+7Z.i[+U0+L4#.@#M@@c$@,i#3$@+m+py+/k+'i#)i#!i#)f+~i#gf#{i#gf#gf#ef#]i#]i#cf#$a@mi+^i#/i#/i#(i#5f#af#*m+bf#bf#(k+(k+ni+ni+bc#_i#:i#2#*5#fi#*5#gi#hi#gi#hi#ii#ji#ki#li#mi#mi#If#ni#ni#oi#pi#Gf#Lc#Lc#Nc#Qc#Jf#gi#gi#gi#hi#hi#>5#>5#>5#]2#Lf#!}#qi#_:#ri#si#a/#ti#ui#vi#wi#vi#ui#xi#yi#zi#Ai#Bi#Ci#xi#_8#ti#Di#`c#@g#Ei#Ei#Fi#Gi#Hi#Ii#Ji#Ki#Ji#Li#Mi#Ni#Ni#Oi#Pi#Qi#Ri#Si#Ti#Ui#Vi#Wi#Xi#Yi#Zi#`i# j# j#.j#+j#@j##j#$j#%j#&j#*j#=j#-j#;j#>j#,j#'j#)j#!j#~j#{j#]j#^j#/j#(j#_j#:j#<@y%@n.@BW+AW+:/ 9j##3#0j#Gh {_#2^#aj#)! W] '! '! ^3 YQ@1o [@@66 Mg 0P@+l Q1 :} bP@|c#bj#cj#dj#ej#fj#gj#hj#ij#jj#:f@'d@Z=#(o (o s[ kj#lj#lj#d5 Mi mj#nj#oj#oj#pj#qj#rj#94#(3#sj#sj#tj#uj#vj#wj#xj#=C@yj#zj#Aj#Bj#x%# '#=0.|^+.'..'.$'.*t.}r.Cj#`J Vu.0O Lt.=w.=w.TM TM lA.lA.2l..G zf.pI DU |H `F FE jZ 4W # .(H ~C 3W o3@Dj#Ug#{0.]0.k<.h% Lv.w8 A# k_.E2 Sk@%9 2##i%#(9#2##(9#Ej#7|#Xg#t/ Yg#8|#Fj#Gj#+.+-b#-b#Hj# h#P<.y:.mo.h$ [U `b@%! D8+D8+&e#.F.>p.>p.Ys. )> )D+)D+)D+)> )> Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Ov+Ov+%U.%U.Ov+Ov+Rx.6g+6g+6g+6g+6g+6g+6g+6g+jy.jy.jy.jy.]$@]$@]$@]$@%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+13+ko.cI+l7 'U.ks@F=+Z$+eb+@v@Ij#Jj#8( Kj#n, :, Lj#QM.Mj#Nj#Oj#3_+W0+Pj#fm@T^@~<+Qj#E=@Rj#Sj#Tj#Uj#Vj#Wj#Xj#Yj#Zj#`j# k#dX@nP+mV+EX+pB+.k#Ry+mV+rM@qH@QQ@+k#A6#@k#+^##k#$k#]h#%k#V|#&k#V|#!J+*k#-#@Zd+=k#M=@~J+_=#-k#&>@;k##k#>k#,k#Qs@'k#)k#;k@V8+^c+Wd+6V@9m+V5+Dq@LF@yb#z$+Kl+wI+vD+xD+yD+6=@{-+yM@yM@yM@R,+5&@5$@jX+5&@5&@R,+yM@yM@R,+5&@2 @8G+8G+8G+R)@2 @YK+4G+4G+E@@E@@4Z+4Z+M+#mZ@mZ@mZ@!k#!k#9e#iX+2R+CI+[V+AI+T,@:P+dX+2G+~k#2h#2h#{k#r<@r<@r<@dX+< @< @6=@6=@W{@zD+mX+#a@M2@M2@T##4 @9$@]k#be#;v@-7@ED@^k#/3@;!+8T+>i#/k#v +}Q.n<+k.@n_ KM@LM@(k#_k#w] <>.:k#6=+6=+z<.z<.z<.z<.;q.;q.Rx.Rx.Rx.8}.8}.7}.7}.7}.%U.%U.Ov+Rx.8}.8}.", "p} 4c 5c <| +_ p} 5c O_ O_ +_ +_ <| p} p} >+ 9& =+ v P d+ U+ =+ P P =+ =+ d+ d+ =+ =+ P ]= E V ^+ du.+lD+Yg+,k+vb+Y8@5k#i)+$>+@-+F)@Hn+lI+,G+,G+{V+U&+7}@`l+`l+ub+vp+vp+lr+lr+&4+O,+T{@VA+ep+T{@M,@nm+M@+*7@sy+xr+6k#7k#8k#{B+9k#6Z.j|#O$+h-+kh#xO.0k#YD.JB@uz@87@ E.3v@wz@|L.kB ak#h>#=K.bk#ck#F_#dk#ek#[9.fk#'@+yk ,;.p3 V_ M=.M=.,;.+..14 -5 ;5 ;5 24 {_ {_ {_ {_ {_ {_ {_ W_ ;b.O9.|x.{_ W_ {_ |x.&5 {_ ;b.{_ W_ &5 W_ ;b.{_ {_ {_ {_ {_ {_ {_ 6v@J].gk#$b#Rz.w7+ph#L2 '; h7 zj+g, 7` jY.hk#ik#>Y jk#kk#iT@u8@lk#mk#w#+X*+Dc+nk#ok#pk#qk#rk#sk#tk#uk#vk#vz.L}.P{.-N Ir.$w.Lu.wk#xk#yk#zk#2n.Ak# r@7O B}.N-.k4.0D.n7.Bk#Ck#Dk#Ek#Fk#Gk#Hk#Ik#Jk#Kk#/E@Lk#Sh#Mk#Id#Nk#ZV@X3 Cg#Ok#6.#QL@Pk#]t Qk#=! i#4!#Rk#%f#|c#.i#[`@b.#{Y@w! Ev@,{ =f#+i#@i#u{ Dv@uR@uR@[`@[`@uR@uR@bP@.9 .9 .9 .9 +L@O9 9 ')#S^#tR@L~ $] P^#Sk#Tk#9_@t[@=K.:N.^T.G3 2v@}-@ E.Uk#,Q+Vk#Wk#Xk#Yk#Zk#`k#M$+ l#]B+% +.l#+l#uy+7Z+T0+Hl+Qb+qd+,i#4&@Rn+lp+*m+/k+qi+p7#{|+!f+.4+.4+gf#gf#@l#ef#kc#]i#kc#cf#3&@ni+#l#$l#hc#%l#=m+/k+&l#&l#Ng+(k+ni+*l#=l#=l#2f#:i#-l#hf#}i#;l#>l#,l#2f#bc#bc#2f#2f#Rg+Rg+mc#,f+'l#'l#)l#)l#!l#rc#rc#tc#4i#rf#rf#qf#5i#6i#7i#~l#8i#8i#tf#uf#zc#{l#]l#bi#^l#/l#di#Af#(l#_l#>2#:l#5#hi#gi#)}#7l#8l#9l#9l#0l#al#0l#vi#/8#ti#(8#:8#bl#cl#bl#xi#dl#:8#(8#el#fl#gl#gl#Ei#Fi#hl#=8#il#jl#kl#ll#ll#<2#<2#<2#ml#nl#ol#pl#ql#rl#sl#tl#ul#vl#wl#xl#yl#xl#zl#Al#Bl#Cl#Dl#El#Fl#Gl#Hl#Il#Jl#Kl#Ll#Ml#Nl#Ol#Ol#Pl#Ql#Rl#Sl#Tl#Ul#Vl#Wl#Xl#Yl#Zl#`l# m#.m#+m#@m#u{##m#$m#%m#&m#*m#=m#-m#;m#>m#Y&#~[#GR@f=@1/ $9 i< i< F~ xa F`+G`+O2+O2+8O.YP.f=@|} bT+d'.=<@=<@;<@y%@!8 BW+AW+:/ 9j##3#0j#Gh 2^#C`+aj#,m#W] |^#|^##p T: l_ m_ 56 _)@_)@d2 Q1 36 36 'm#b4#H,#)m#!m#~m#f@#e>#{m#]m#'d@:f@P~#P~#Z=#kx []#[]#s[ Yk A0 4##[o 6n h[#^m#}]#/m#(m#_m#:m#p.>p.>p. )> )D+)D+)D+)> )> Rx.Rx.Rx.Rx.Rx.Rx.Rx.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+6g+6g+6g+6g+6g+6g+6g+6g+q9+jy.jy.]$@6g+6g+)> )> %U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+13+NM+l7 'U.Zh@Tx.!M.!M.Zs@nm#om#n- p- pm#$h#|; qm#to@rm#u}@sm#f$@tm#TF@`~@3T@um#vm#wm#>k#xm#ym#Yj#Vj#Uj#zm#Xj#Uj#Am#Bm#qM@nP+mR+FX+pB+.k#Cm#OQ@pM@GX+B+8$@Tm#9=@;v@-7@;v@Um#/3@y/+Vm## +Wm#pL.Xm#Ym#O#@a3 KM@Zm#`m# n#v] .n#<>.3x.3x. Z Z Z Z vM.vM.Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.Rx.Rx.8}.7}.z<.Y% ", "p} 4c 5c <| +_ p} 5c O_ O_ +_ +_ <| p} p} >+ 9& =+ v P d+ U+ =+ P P =+ =+ d+ d+ =+ =+ P W* E V ^+ !0 +lD+Yg+,k+vb+Y8@5k#i)+$>+@-+F)@Hn+lI+,G+,G+{V+U&+.>#Z;#v'#v'#=:@'k+'k+jr+s~@`g+Ll+&4+Ll+Ll+6X+ep+wr+}a@|6+S.+-4+*n#=n#|P++l#]B+YX.t8+-n#3I.>N.bR.|-+uz@gx@87@%++qB.;n#|L.e_@bk uK@>n#2z+u9@,n#'n#)n#!n#bT ~n#MK xW m++n++<& m++m++n++j@.bT yW ;5 24 {_ {_ {_ {_ {_ {_ {_ W_ ;b.O9.|x.{_ W_ {_ |x.&5 {_ ;b.{_ W_ &5 W_ ;b.{_ {_ {_ {_ {_ {_ {_ 6v@gk#{n#]n#k<.eO@^n#{b+Ki.1. Q( rj /n#yl+(n#_n#:n#)#,{ Bn#Cn#Cn#it@Dv@uR@uR@[`@[`@uR@uR@bP@.9 .9 +L@+L@O9 O9 O9 B_#L~ AK $] Dn#En#BD ^G va#Fn#w'@`]+eW.j>@)-#QP.g#@!U+Gn#Hn#7R+In#W@+9T+fZ.Jn#Kn#4R+=n#*n#<^#Ln#}a@}P+uD+uD+Tn+Sn+.m+kr+Mn#/k+Ng+b[+]|+Pg+=2+Nn#Nn#kc#ic#On#ic#On#ic#On##l#5=@#l#pD+#l#Pn#V4@`+#:k+Qn#ki+M4#&l#(k+%l#*l#cf#2f#h0#:i#Rn#Sn#gf#}i#}f#Tn#cc#cc#1f#1f#1f#Un#Vn#W4#A7#A7#A7#!l#t0#t0#t0#pf#4i#vc#vc#qf#5i#qf#rf#qf#6i#sf#7i#yc#Wn#Xn#Yn#Zn#`n# o#/l#.o#Af##5#_l#zf#+o#$5#[l#@o#*5#Fc##o#$o#_:#%o#7l#&o#*o#=o#-o#5#%5#6l#;5#=5#;5#;5#;o#;o#W7#W7#!5#U7#>5#hi#gi#)}#7l#/:#::#::#>o#Of#,o#'o#,o#'o#,o#'o#)o#!o#~o#{o#]o#:}#^o#^o#^o#/o#(}#(o#_o#]}#Gc#:o#H0##Po#jm@| +qB.-l O#@B6 F`+.(+t[@R_+DL.DL.8O.8O.^T./T.S$+S$+b_@b_@c_#C%.AW+Qo#_+#!< .|#/*@=)#.|#{o {o `{ [K@W] '! d=#~_#Qk <: X]@:: h2 h2 #, *! 7, 7, xn#xn#%f#zn#zn#zn#8.#h@#h$#B&#gt@'d@:f@P~#Y=#Y=#kx kx (o i[#S} 4' Vr e5 8J@8h O,#Ro#S*#So#To#Uo#Vo#/|#Wo#Xo#Yo#Zo#`o# p#.p#+p#@p##p#$p#%p#&p#*p#=p#-p#@e@`L@;p#bO@oI 9O 9O 9O Gk.Lt.TM lA.SM DU .G kI me.|H `F ;5.!_.:%.h=.;*.78.78.4r.oz >p#,p#'p#)p#*- d& %. ,g@6|#^( _( /4 E2 E2 2##2##i%#!p#03#n]# e# e#_9#~p#{p#]p#@e#Dr.^p#+e#y:.jm#/p#y:.'2 V% j*.=T+&e#j*.>p..F..F..F.90+ )> )D+)D+)D+)> )> Rx.Rx.Rx.Rx.Rx.Rx.Rx.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+6g+6g+6g+6g+6g+6g+6g+6g+]$@]$@6g+6g+)> Yt.Yt.i~ %U.%U.%U.%U.%U.%U.%U.%U.[y+[y+[y+[y+[y+[y+[y+[y+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+ko.cI+'U.ks@5D+2x.00+OF+(p#Ij#_p#F!@:p#K@5$@jX+jX+E@@4Z+| @mZ@~^#P6#P6#Qm#Qm#!k#vp#gX+2R+}V+BI+8=@wp#r<@r<@xp#xp#Rm#yp#r<@8~@r<@dX+dX+dX+6=@6=@c^@ky+zD+ky+M2@Sm#M2@>B+8$@Tm#9=@;v@-7@;v@Um#h1@mz@1P+zp#Ap#Bp#pT.Cp#eF.03 )4 `m#Zb+92 xq Dp#-x.3x. Z Z ZY ZY vM.vM.8}.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.7}.z<.Y% ", "p} 4c 5c <| +_ p} 5c <| <| <| <| p} p} p} f+ 9& =+ v P d+ U+ =+ P P =+ =+ d+ d+ =+ =+ P &$ D V ^+ du._>+Ep#eR+@n#UW+]Q+v%.#[#:~#X@@7^#=}@8^#Fp#Gp#Hp#H9#$-+{G+ip++!]+kp+vb+ o+Y8@dc#T&+'-+lZ+lZ+5a@5a@,G+,G+{V+<6+7d+Jp#Jp#Kp#w'#7d+vb+vb+s~@s~@Ll+qy+qy+]G+fp+Jn+L@+S.+}a@S.+-4+<^#7k#Iq@Lp#.l#;4+N:+o~+N/+3I.>N.|-+*@#PP.| +%++QU.;n#|L.;1@i&@*K.;K.5O.Mp#UP.Np#IE+Op#Pp#:& Qp#~n#rJ xW j@.j@.j@.bT bT bT yW -5 24 {_ {_ {_ {_ {_ {_ {_ W_ {_ |x.;b.W_ &5 {_ |x.&5 {_ ;b.{_ W_ &5 W_ ;b.{_ {_ {_ {_ {_ {_ {_ 6v@gk#I].Rp#Sp#:(+^n#{b+ng.1. b: )' Tp#Ws.Up#Vp#Wp#Xp#Pg.Yp#}n#Zp#`p# q#nf@.q#+q#p!@@q##q#$q#%q#&q#*q#=q#Za+|z.-q#O{.@G &x.;q#>q#,q#r_@'q#)q#!q#~q#f=.E1./-.UB.*D./4#{q#]q#^q#/q#(q#mn#_q#:q#)#9q#iw@Bn#_r@Dv@uR@uR@[`@[`@uR@uR@bP@@A@.9 +L@+L@+L@+L@.9 `Z 0q#aq#m .bq#cq#dq#za#a9 ,n#eq#83@&N@ZD.sK@n6#,4+7:@2P+fq#gq#hq#iq#5_#+L+jq#kq#lq#pg@H6@ N+}R+P0+St+mq#IZ@nq#{k+*m+bf#/k+Ng+b[+g0#]|+h0#Pg+oq#lc#5=@Pn#Pn#Pn#Pn#Pn#Pn#Pn#pq#5=@oD+oD+Pn#Pn#`+#Nb+-m+ki+M4#&l#Ng+(k+ni+*l#g0#Qg+Rn#Rn#}f#Sn#}i#Sn#qq#qq#qq#rq#sq#|f#|f#tq#f8+f8+uq#uq#uq#vq#wq#vq#xq#4i#vc#vc#qf#5i#qf#rf#yq#rf#rf#yc#xc#xc#Wn#zq#Aq#Bq#Cq#Dq#Eq#H7#H7#L7#K7#K7#Fq#G0#Ec#~2#~2#Fc#Ef#Gq#Hq#fi#*5#[l#Iq#Iq#Iq#%5#~2#Jq#J0#Kq#)5#Lq#;o#;o#W7#W7#Mq#Mq#Nq#Nq#{5#{5#!5#Q7#>5#}l#}l#)}#Gq#Oq#Pq#Qq#Rq#Qq#Qq#Qq#Pq#Pq#Qq#Rq#Sq#Tq#Uq#Uq#Tq#_}#^o#^o#Vq#Wq#Xq#_o#I0#Gc#Yq#Zq#`q# r# r#}o#.r#+r#@r##r#$r#%r#&r#*r#%r#=r#4o#-r#so#-r#;r#>r#,r#'r#)r#!r#)r#~r#rl#{r#]r#$d#)g#)g#^r#^r#/r#%r#(r#_r#:r##i$+dr#QP.>l }L.J4@(G t[@R_+t7 XP.DL.8O.8O.Ba+66+0R+6P+oB.oB./R@(T.k5 Ph w) er#fr#ud#fr#gr#hr#hr#{{ W] W] |^#d=#g'#^(#M~#VE }} Kc Kc `3 d2 36 36 xn#xn#Rk#|m Rk#xn#uR@{Y@8.#h@#h$#$b@gt@gt@C&#C&#Y=#gt@gt@B&#$b@Cv@ir#i[#jr#kr#26 %l 7h J9 lr#8##6##mr#Td#nr#or#6$#pr#qr#rr#sr#.p#+=#tr#ur#vr#wr#xr#yr#zr#Ar#Br#Cr#C<+9O fh.fh.9O Lt.TM 2l.uf.DU DU uf.kI zf.`F ;5.f;+/-.W*.;*._a.Q%.`S+|g.Sb@Dr#'0+SO+Ll ]. 2. Yb@81 /( G( rS+rS+pS+(+#2##2##k(#9j 81 81 e#n]#Er#Fr#Ze.Gr#WU Hr#Hr#+v 0|#b3#Ir#5<#r]#n^ 6 _Z@Jr#>p..F..F.@A.90+ )> )D+)D+)D+)> )> Rx.Rx.Rx.Rx.Rx.Rx.Rx.%U.Ov+Ov+Rx.Rx.Ov+Ov+%U.6g+6g+6g+6g+6g+6g+6g+6g+)> )> )> )> Yt.Yt.Yt.Yt.%U.%U.%U.%U.%U.%U.%U.%U.[y+[y+[y+[y+[y+[y+[y+[y+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+ko.cI+'U.2^ Sx.2x.-T+cn+Kr#8w+Lr#:p#h' h' Mr#bO.Nr#Or#Oj#;/#Pr#U##q$+@N@Qr#*%@<'@Rr#Sr#9X@Tr#Ur#8p#Uj#Am#>k#>k# k#Vr#bp#Wr#uO@rM@uO@nP+@J+Xr#oT+Yr#Zr#`r# s#.s#+s#@s##s#$s#$s#%s#&s#*s#=s#-s#;s#>s#,s#'s#kp#)s#!s#H$@~s#T<#{s#@~#rp#]s#7X@^s#Xr#p|+X;@!c+Td+y=@z=@Dq@Dq@a~@y;@z@@Il+A@@B@@C@@AD+zI+5&@4G+5$@5$@4G+5&@5&@5&@5&@4G+5$@5$@4G+5&@5&@-K@^^#X.@8G+YK+>K@jX+jX+E@@E@@4Z+4Z+M+#mZ@mZ@mZ@/s#Qm#Qm#!k#fX+gX+}V+}V+wp#wp#r<@dX+(s#xp#Rm#_s#8~@8~@r<@dX+dX+dX+6=@6=@c^@W{@zD+ky+Sm#:s#M2@>B+H@@DO@mq@ED@8m@ze@#Dv@uR@uR@[`@[`@uR@uR@bP@RT@@A@.9 +L@+L@.9 RT@Dv@%t#&t#*t#bq#=t#-t#;t##i#>t#L_#,t#Q$+$$#|-+'t#3F.NZ.)t#!t#F@+~t#{t#]t#^t#/t#x9#c&@(t#_t#:t#8k@v&@&l#u#,u#'u#)u#!u#~u#{u#]u#^u#/u#(u#(u#_u#:u#3 >3 M~#}} #[ M~#sd#~_#d=#g'#i| 5u#P+#q[ m] VE (} (} 'p ,p *! *! kr#kr#|m })@V*#$l ,p WC@A&#z&#y&#`V@6u#7u#7u#7u#`o@ht@8u#ht@ht@9u#0u#ir#Y=#S} J,#K,#+<#=8 tI@W8 pS@au#bu#cu#du#eu#fu#gu#hu#iu#ju#ku#lu#mu#nu#ou#pu#qu#ru#su#tu#uu#'u.9O fh.fh.9O Lt.lA.uj.uf.DU kI SM kI zf.`F ]}.03.f;.32.wY Z..Z..l(+.T+/f.vu#wu#xu#Z& s$ @@ yu#%9 {4 0j b3 /4 f3 rS+i%#(9#(9#]4 !p#81 03#81 zu#Au#Bu#Ze.Gr#=b#Hj#+v Cu#ej+Fj#3<#Du#='#Eu#n6 %! >p..F.@A.@A.0d. )> )D+)D+)D+)> )> Rx.Rx.Rx.Rx.Rx.Rx.Rx.[y+%U.Rx.8}.8}.Rx.%U.[y+Fu#Fu#Fu#Fu#Fu#Fu#Fu#Fu#.d+.d+.d+Fu#Fu#Fu#Fu#Fu#%U.%U.%U.%U.%U.%U.%U.%U.[y+[y+[y+[y+[y+[y+[y+[y+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+80+Zh@Zh@80+Sx.Tx.#V+!*+;++Gu#Hu#j) Iu#[p#Ju#Ku#Lu#Mu#kH@vi+Nu#sc@/-@Ou#Pu#Qu#['@Ru#Su#qT+Tu#Uu#8p#9p# k#bp#9b#Vr#Vr#9b#Vu#qM@nP+qM@Wu#qM@dX@Xu#Yr#Yu#Zu#Zu#`u# v#.v#+v#@v#&s##v#$v#$v#%v#&v#*v#=v#-v#;s#;v#>v#wP+,v#'v#'v#)v#{s#qZ++~#!v#iZ@bp#~v#`@@{v#Td+vB+Vi+,]@K@jX+E@@E@@E@@4Z+fX+nZ@nZ@nZ@7V@]v#]v#Qm#!k#nZ@7V@}V+}V+wp#7=@7~@7~@(s#(s#xp#_s#8~@8~@8~@7~@dX+dX+2G+2G+cX+T_@ky+ky+c^@^v#Sm#P)@H@@DO@mq@ED@8m@ze@+ '= F f+ >+ Y+ Y+ U U >+ f+ f+ }# 9& =+ v P d+ U+ =+ P P =+ =+ d+ d+ =+ =+ P ^$ J# V m+ h^ k^ wv.he#[v#|B.*d }s DC p'#q&@}v#B&+At+|v#1v#2v#3v#lR+8~+8~+@/+Nl+`+#u=@p;@eK@}T+(P+(P+K,@K,@K,@:x@:x@:x@Kl+Kl+Kl+(P+(P+K,@K,@K,@|R+sr+Jl+wI+wI+QK+QK+QK+{k@#9@<&@:&@|R+FD+fD+z$+.q+8s#9s#0s#$7@$7@4k#.5@.5@hh#gh#4v#4v#gh#L,@M)@pk+ry+pk+N)@a~@y;@!B+y;@!B+y;@!B+N)@a~@N)@pk+pk+Ll+]G+od+od+od+od+od+:6+lD+od+N0+od+lD+!]+jD+Ll+1V+5T+FD+Jl+|R+FD+z@@1V+y@@y@@y@@4X+4X+|$@|$@T{@Ll+Ll+YM@YM@B$+B$+X1+X1+X1+X1+X1+iV+iV+`;+`;+`;+#>+j)+)]+)]+t)+t)+'-+u)+f~+%>+0y+|$@VA+VA+5a@m0+%4+5v#bs#}/#cs#cs#Y8@8d+lD+e~+od+U_@/G+{G+-'@B$+pd+//+$5@~V+}a@S.+7~#*5@Iq@8~#6v#g^@VF@q1@GB@zG.6<+7v#L9#,Q.Fh+V;./T.YP.{*@'z P2+O2+:N.[N.6O.2z+sV@8v#)n#lB 9v#n`.9&#-V G}+G}+-V m&+yW 14 bT p3 24 {_ {_ {_ {_ {_ {_ {_ n3 W_ {_ W_ n3 f% &5 {_ &5 {_ ;b.{_ W_ &5 W_ ;b.{_ {_ {_ {_ {_ {_ {_ 6v@~k.0v#k<.av#6z+bv#(s.{b+Ah.K$ (& cd.Zt.cv#dv#ev#fv#gv#hv#iv#-(+)l@]n@jv#kv#lv#mv#nv#ov#pv#qv#rv#sv#tv#Nc+%M+5~.uv#Gs#vv#Is#wv#xv#z3@yv#mL xI Jk.}Z q!.q!.,a.zv#Av#Bv#Cv#Dv#Ev#Ph#Fv#Gv#Hv#Iv#Jv#'C@Kv#Lv#Zs#Mv#&8@Nv#Gz Hz m[#|c#]M e1#}c#Ov#ZC@Pv#Xm@7q#b4#'m#+L@B_#Nx@Nx@H5@H5@Nx@b>#O;#*f#>{ b>#z&#z&#[`@[`@.i#.i#|c#|c#b4#'m#.9 .9 _C@;{ 3C >{ i'#X] Sh Pq |0 eq#Y #&$#[ +>N.Qv#0e@-z@k%+Rv#g_+>!+ID+Sv#Tv#Uv#EM@4e@S6#Vv#(t#Wv#Xv#Yv#Zv#+}#mi+'i#(k+`v#^i#%l#ni+b[+dy+dy+3&@3&@}t# w#.w#On#sD+Tt+Tt+Tt+sD+sD+sD+sD+pq#v=@qD+u&@5=@t=@5=@t&@:k+Mn#&l#&l#Ng+^|+mi+mi+]|++w#2f#Un#mc#Un#@w#{i##w#$w#$w#%w#&w#*w#6t#=w#-w#-w#;w#;w#>w#>w#,w#>w#'w#)w#!w#!w#~w#'w#~w#D7#uq#uq#{w#{w#{w#8t#9t#]w#^w#/w#/w#ht#it#(w#kt#lt#lt#lt#mt#mt#mt#mt#_w#rt#G0#G0#G0#G0#qt#pt#pt#pt#rt#ot#st#tt#ut#vt#wt#xt#xt#Nq#yt#yt#zt#zt#zt#zt#:w#:w#u#ww#xw#yw#dw#Ni#zw#~u#Aw#Bw#Wq#Cw#Dw#Ew#Fw#Gw#Pf#Hw#Iw#Jw#a:#Kw#V.+Lw#k<@Mw#%a@Nw#f$@Ow#Pw#h#@Y #(5@(5@gk@@g+}-@3v@di BJ.BJ.Y]@f{@`A gw l_ _)@R-@R-@0P@R1 i< P9 ZG@l .xb 5u#5u#5u#hw@{#.g'#ry@Bn@Bn@VE VE Qw#Q} <} :} 26 %f#Rk# i#Rw#Rw#n| c2 _C@@A@WC@uR@y&#b.#UE@i@#$b@B&#gt@gt@{m#B&#bP@5!#VE@Ti@6!#5!#:c#:c#^7 1;#Sw#*8 Tw#6##Uw#Vw#Ww#Xw#Yw#Zw#`w# x#.x#+x#@x##x#$x#%x#&x#`9@*x#=x#'u.9O fh.fh.9O G0.2l.Va.s9.<:.s9.Va.s9.. .Ua.T` f;.(&+V%.Nz.X:.s$.65+9#.{e.m}+WY.-x#)& x* e+ &'#Ch Eh C( , #^/ D( ;x#>x#7h#-2 u/ t' d$#0@#g1 k(#pO+Au#,x#'x#)x#P<.ej+!x#~x#`[.{x#B- ]x#0} is.b. Zs.XQ.^Z.n&+^Z.>p.)J.h*.0d.Rx.Rx.)> )> )> )> )> Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.[y+%U.Rx.8}.8}.Rx.%U.[y+Fu#Fu#Fu#Fu#Fu#Fu#Fu#Fu#.d+Fu#Fu#^x#QL+QL+(w.(w.%U.%U.%U.%U.%U.%U.%U.%U.[y+[y+[y+[y+[y+[y+[y+[y+Ov+Ov+Ov+Ov+Ov+6g+6g+6g+6g+Ov+Ov+Ov+,8+,8+,8+,8+=L ko.2^ 5D+u=+wX+/x#;++6x+(x#|; ;Q._x#:x#+2R+5$@fX+jX+gX+5&@]-+R,+CI+5$@fX+jX+gX+5&@R,+g[+^^#;K@5G+4G+gX+fX+M+#M+#M+#nZ@{^#gX@oZ@oZ@oZ@/s#/s#Qm#!k#fX+gX+[ @}V+7=@7=@3G+6~@2G+dX+r<@8~@8~@8~@7=@7~@:P+dX+=>+2G+S,@T_@ZK+ky+s;@^v#r;@ZK+H@@DD+mq@ED@-7@;v@;7@h1@Iq@yx#zx#f#@Ax#AL.Bx#eF.X4 8/+k&@Cx#u2 xq .n#Dx#80+80+8}.Yt.Yt.a(+c;@a(+Y% Z Z z<.7}.7}.8}.8}.z<.z<.z<.z<.z<.z<.", "M M M M N R ;+ N N N M c+ c+ j@ o x5 L_ 6c ,' ,' 6c L_ x5 ,' !% !% !% ,' 6c L_ >' ]$ ^& F. k. %+ V~ O2 HO+hg+R< ;e }s DC Ex#1m+Fx#Gx#*k@Hx#Ix#Jx#wb#by+di+_6+:6+%4+)k+}]+]/+u=@oe#Aq@<&@<&@:&@K,@(P+Kl+Kl+7X+7X+7X+7X+7X+7X+7X+7X+>w+Lt+#B+#B+up+up+-w+-w+<&@:x@c&@s<@z$+s<@Kx#Lx#59@ZM+oI+ZM+{P+{P+sI+oI+er+gp+dr+nI+nI+dr+gp+MF@LF@SO@Mx#`M@Nx#Ox#Px#`M@Qx#=K@Qx#=K@Qx#=K@Qx#LF@L,@6X+B$+YM@O0+;2+vb+}/#,k+,k+Zg+Zg+Ll+P0+(T+PK+wI+Il+wI+}=@Rx#{k@vI+_ @z@@z@@uI+uI+WA+0y+0y+A$+!P+~G+!G+!G+lm+lm+lm+mI+#w+~G+mI+mI+lm+mI+P3+O&+]G+YM@X1+iV+`;+iV+B$+Jn+6X+T{@6X+ep+In+In+$q+X1+%4+Yg+wb+9d+&f+&f+j)+!]+SA+SA+]G+cr+cr+Ft+~P+b$@Qn+3{#pd+pd+=4+T.+16+G$+Sx#[7@Tx#Ux#:v@q'@Vx#Wx#9]@Xx#mZ.Yx#g#@v8+6P+<,.YP.8O.-l l< U!@|L.PM.PM.OB@LZ@5O.Zx#`x# y#.y#+y#@y#V_ 'i.}R@8M sq.eT@fe ]b+X5 X5 X5 X5 X5 l. l.6v@4=+QB@g% g% s3.4=+6v@g~#g~##y#)i+ l. l.7v@7v@ l. l. l. l. l. l. l.{_ ac 5[ si {D {D (s.(s.$y#ym.un.C' )5 E) g. s2 `J+%y#&y#br.*y#YR.=y#-y#;y#>y#,y#'y#)y#!y#~y#{y#]y#^y#/y#(y#_y#:y#a {0@8> O1 O1 F> (1 Q1 /,@@A@b.# p@h@#XC@$~ [c#gy#)m#a7#(d@O9 T-@~)#P9 P9 :7 :7 Ti h2 4 4 M~#hy#iy#{#.z&#WE@jy#ky#ly#my#ny#oy#I,#y&#{#.py#xb +l 3F $2@76+|d qy#ry#po@uc@sy#_K@ty#)}@J6@[+:f+I:+f[+/w+(w+e^@tr+:&@7X+uy#[a@rX@vy#wy#xy#yy#2&@ni+ZA+ni+ZA+#l#zy#Ay#By#2&@2&@2&@2&@3&@3&@3&@Cy#|&@hc#V4@2$@ZA+3&@3&@zy#ic#Dy#cc#Tn#Ey#oq#lc#/+@ZA+*l#*l#g0#]|+U4#Fy#+w#,f+.4+Gy#Hy#nc#Iy#Jy#Ky#|f#Ly#e8+My#f8+Ny#Oy#Py#Qy#Ry#Ry#7t#Ry#Sy#Ty#Uy#f8+Uy#Uy#Uy#Uy#Ry#Ry#Vy#Vy#Sy#Sy#Sy#Wy#Xy#Xy#/l#G7#G7#.o#.o#Dc#H7#Fq#Yy#D0#Zy#`y#`y#Zy# z#.z#Ec#%5#%5#%5#~2#~2#~2#~2#Jq#Jq#Jq#Jq#Jq#Jq#Jq#J0#+z#xt#@z#xt##z#$z##z#%z#&z#*z#7w#=z#-z#;z#+z#)5#>z#%5#O7#Xq#,z#Xq#'z#Hc#I0#Hc#Gc#Hc#'z#_o#)z#Ot#!z#!z#~z#3w#4w#4w#4w#{z#Zq#H0#]z#~5#^z#xt#(5#/z#(z#(z#(z#8w#(z#_z#:z#l f{@1t Kd 3F Z-@0t@QW@Ea#:: :: S: i< 8_@8_@aY 4C 3C i'#b>#P^#k] uz#vz#wz# (+xz#Vg Nf Nf Sk#yz#7u#w! [c#zz#~ C! A_@U/@ok.q9+|f.|f.[y+[y+%U.Ov+Ov+Ov+%U.[y+|f.J; J; |f.[y+%U.%U.%U.]$@]$@]$@A_@A_@A_@A_@]$@%U.,8+*; @A.7-+@A.O4 $(+Ks &A#a/+*A#=A#-A#fM.;A# Q.>A#,A#'A#**+)A#!A#~A#{A#]A#^A#Je@Sr+3]@/A#W;@(A#Xu#_A#:A#K@T,@w;@2T+!K@2T+,T@ZK+x;@9G+x;@9G+*>+_w+&N+S.+16+h9@EA#oc@Z @0]+tB NG.@<@Ok W' D| FA#GA#n]#9* Dx#St.' 7c 9c 8c 8c 9c 7c E7 9c 9c 8c 8c 8c 9c 7c E7 W* R# E. p+ Jp+HA#jt.IA#JA#KA#LA#}s h0.MA#1m+NA#OA#PA#QA#RA#SA#TA#by+`(+|/#<&#UA#VA#}]+sD+jc@u=@ N+|R+|R+|R+K,@K,@K,@K,@7X+7X+7X+7X+7X+7X+uy#o;@;w+Lt+Lt+Lt+up+up+-w+-w+:x@K,@Kx#yb#yb#yb#WA#XA#YA#Gt+ZM+nI+]P+`M+{P+nI+Ht+#w+ZM+nI+sI+dr+oI+gp+ih#Mx#Mx#Qx#Px#Nx#ZA#Qx#Qx#Qx#Qx#Qx#Qx#Qx#Qx#Qx#M)@6X+iD+B$+Zg+%4+vb+}/#<v#s~@s~@YM@Ll+M)@a~@[=@H:+2V+g~+g~+g~+QK+QK+1V+1V+WA+WA+0y+0y+T{@6X+~G+~G+:o+!G+km+lm+km+lm+er+lm+,P+ok+'P+mI+T;@O&+)P+G)@M&+br+br+M&+iD+Jn+Jn+iD+iD+iD+iD+G)@G)@X1+N0+:6+kp+wb+9d+wb+!]+lD+SA+SA+!P+cr+cr+Ft+~P+b$@Qn+`A#3{#3{#pd+ h+T.+'}@Sx##Vx#7:@ B#dG+;T.oZ.!2+.#+6P+Ba+8O.-l l< U!@bk J4@{c OB@NM..B#_ >_ sq.X5 ]b+]b+X5 X5 X5 X5 l. l.6v@4=+QB@af.<4 s3.;H.5v@ l. l. l. l. l. l. l.)i+ l. l. l. l. l. l. l.{_ t& E) ,_ (* {D ph#|5+$B#@9.^n#Vl.lP C' S$ W .< %B#&B#*B#Jj+^y+d .)h.=B#-B#;B#>B#,B#'B#)B#!B#~B#{B#]B#^B#/B#(B#_B#:B# N1 +' 7, 7, +' bP@@A@B_#B_#!)#+W@@t#@t#6q#^0#(d@ 9 T-@8j#vG vG :: i< Ti R-@0P@Qh Rj X]@0F py#zy@y!#dB#Uo@eB#my#fB#9J@46 Bn@Vg gB#.x+*P hB#KM@iB#jB#;p@kB#lB#|W.WI+Fn+k:+Yv+ai+(_+(_+Pb+mB#&>+rr+oy+sr+#k+#k+|t#|t#&n#rX@vy#xb#8k@[t#}t#2&@2&@2&@2&@By#ic#zy#3&@3&@2&@2&@By#By#ic#ic#oi+oi+*l#*l#=l#=l#2f#2f#]i#_i#nB#1f#,l#,l#hf#:i#oB#By#cf#=l#Qg+Qg+Rg+pB#qB#j0#id+id+jf#oc#rB#r0#Vn#sB#>f+e8+e8+tB#Ny#uB#Ny#vB#wB#wB#7t#7t#Vy#z0+%w#%w#xB#xB#xB#xB#yB#yB#zB#zB#AB#AB#BB#CB#CB#Xy#ci#DB#yf#EB#EB#EB#Dc#Dc#FB#GB#K7#J7#HB#Zy#IB#JB#!2#@o#@o#@o#%5#%5#%5#%5#Fc#Fc#Fc#Fc#Fc#Fc#Fc#Jq#+z#xt#@z#xt#=z#-z#=z#KB#LB#@z#KB#=z#-z#-z#=z#;z#,5#Fc#&5#Hc#_o#_o#Hc#Hc#Df#Df#Df#Hc#Hc#Hc#_o#_o#MB#NB#NB#NB#OB#OB#PB#PB#[o#[o#&8##8#QB#QB#RB#SB#TB#UB#(5#(5#(5#(z#_z#:z#VB#C#9z#,C#'C#)C#hz#*g#*g#hz#&g#*g#hz#&g#&g#hz#hz#&g#!C#~C#{C#{C#]C#^C#qi#/C#(C#~:#_C#s0+Kg+:C#/a@6m@+w+#N+ Z-@2C#3C#Gn I0 I0 Bm Bm ;[ Sg :7 yz#4C ;{ ~{ k] k] P^#X] t[@Xj R_+R_+Nf Sg 4C#yz#-)#@t#5C#6C#7C#8C#9C#0C#!)#36 n| n| ,p :} :} #, [m O,#8J@ta %l 8h b1#2m 1;#oy#oy#aC#aC#oy#oy#Xm@Ez#aC#Xm@7q#H,#Xm@aC#-8 bC#cC#dC#eC#fC#gC#hC#iC#9[@jC#kC#lC#mC#nC#oC#pC#qC#M` Va.08.+J.-(.:..)S.63.gc.73.5b.P*.5b.EE.-a.g;+h;+ql+*a.L8.rC#0#.sC#tC#uC#vC#l#@Ol '] uQ@wC#K| xC#yC#yC#U:+d1 yC#{| zC#NY+<_@AC#BC#CC#p4 DC#EC#FC#GC#d} HC#IC#JC#KC#LC#vZ oC MC#NC#~F /}+OC#7E )+W1.CM oz.]w.b^+b^+`'+},+0d.0d.90+D#,D#'D#)D#!D#~D#{D#]D#^D#/D#Ef+(D#_D#:D#v@jK@ N@=K@d^@d^@X{@X{@Rt+w)+[|+-K@-K@;K@5G+2 @YK+YK+2 @YK+YK+YK+2 @5G+5G+;K@-K@yM@5&@7V@{^#AA#AA#8D#9D#9D#0D#0D#aD#aD#CA#N+#gX+5$@5$@5$@5$@5$@5$@5$@4G+4G+4G+4G+4G+4G+4G+4G+fX+gX+5$@4G+4G+5$@>K@)K@w;@!K@!K@!K@,T@DD+x;@cB@lX+9G+*>+Y.@&N+R.+16+Gq@.o+bD#cD#;V.tB t| @<@Ok Eh dD#|) vd+03#N( 1D St.' 7c 9c 9c 9c 9c 7c E7 g~ E7 7c 9c 9c 9c 7c E7 ]= J# i+ X .< N2 lA+IA#eD#y..*d SC.{i c:+1m+fD#gD#hD#iD#jD#kD#lD#by+`(+|/#<&#n=#VA#^_+8X+Q;@jc@ay+PK+Kl+(P+K,@:x@fh#fh#7X+7X+7X+7X+7X+7X+7X+#k+;w+Lt+Lt+Xn+up+-w+-w+-w+K,@(P+pe#yb#yb#yb#mD#4v#nD#tI+nI+@w+`M+uy#/P+@w+gp+Ft+nI+@w+Gt+#|k+N]+pD#_ +XJ.{>+$$#v8+,N+qB.Y]@-l l< U!@bk {c {c LZ@LZ@#CD#DD#ED#FD#GD#HD##b+y_.aR `{.S*.ID#JD#KD#LD#MD#ND#OD#PD#QD#RD#$<#SD#TD#UD#VD#WD#e[@w6 x, /1 o| n| ,p 7, (,@uR@.9 1f 1f QT@))#$~ :r@f1#(d@/d@O9 A&#WH XD#YD#YD#M1 46 h2 Kc Vr `3 -[ {#.Y] 77#-)#Ag##|#0J@ZD#Tw#`D#R1 Q9 E#UP..E#+E#@E#Nr##E#s;#x@+$E#%E#&E#O{@Op+*E#De@w@@O2@wp+2Z+Pb+mB#&>+rr+oy+sr+#k+#k+=E#|t#&n#rX@xb#ne#7k@-E#}t#2&@3&@3&@2&@By#ic#ic#/+@/+@3&@By#ic#Ay#jc#jc#ni+ni+*l#*l#=l#=l#]i#]i#2f#2f#1f#1f#}f#,l#,l#Rn#oB#By#;E#cf#2f#Qg+Fy#pB#>E#qB#Hy#Hy#oc#q0#r0#kf#sB#i0#if#W4#>f+sB#Ky#,E#'E#f8+'6+,6+vB#vB#Uy#)E#%w#%w#xB#xB#xB#xB#yB#yB#zB#zB#AB#AB#BB#CB#CB#Xy#^l#bi#yf#yf#EB#EB#zf#Dc#!E#GB#~E#K7#Zy#Zy#Zy#Ec#M7#Fc#Fc#@o#%5#Iq#Iq#Iq#@o#@o#@o#@o#@o#@o#@o#~2#Kq#{E#^z#{E#;z#]z#;z#~5#]E#^z#~5#;z#]z#]z#]z#^E#I0#Df#&5#&5#&5#&5#Df#Hc#&5#&5#&5#&5#Df#Df#Hc#Hc#Pt#Pt#MB#MB#5w#5w#5w#OB#}o#|o#/E#[5#(5#@8#RB#(E#UB#UB##8##8#(5#(z#_z#_z#0w#_E#VB#WB#XB#YB#ZB#`B#:E# C#J >J p| R} _7 _7 Dv@s{ R^#jE#Ay@kE#lE#)Y@lI@T:@U:@_7 _C@Q} Q} 8j#c2 (} m| h2 _} ]3 4 Vr `8 aC#aC#aC#aC#aC#aC#aC#Ez#aC#Xm@H,#zn#H,#7q#|;#A4 mE#bC#uj#[m#X'#nE#oE#pE#qE#rE#sE#tE#uE#vE#wE#{).}X.'x.S:.9`.VS A].^}.^}.o5.R:.F_.w6.a3.U++k4.k4.j5.r/.V%.0[..U t/.$&@xE#yE#B, 5!.`m _! zE#c< ~p n[@yC#yC#d1 n[@AE#NY+yC#:_@NY+{| y/@BE#4_@DC#q4 q4 [_@Z]@u2 CE#DE#EE#FE#vZ H#@GE#HE#~F *L.zp.Wc R0 IE#eE c^+c^+JE#:U ER 2q@6P.r4@0d.61.6=+80+Ov+Ov+Rx.8}.8}.Rx.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+H0@ok.A_@A_@H0@C! ok.A_@yj+)D+A_@A_@U/@U/@A_@dl.jy.[y+[y+%U.%U.%U.Ov+Ov+%U.[y+[y+|f.|f.[y+[y+%U.Rx.Rx.)> )> )D+)D+KE#KE#A_@]$@]$@,8+*; 7-+m,+7-+G|@`Y 9e.QC#LE#ME#NE#)b#_x#OE#PE#O5@QE#t@+,N.Oe@RE#SE#TE#UE#VE#b!@WE#XE#YE#ZE#W]#`E# F#.F#+F#@F#A #Su#|V@|V@#F#$F#1A#%F#7p#&F#+~#X(#*F#=F#-F#Y(#D+#;F#>F#,F#'F#)F#!F#{D#~F#{F#{F#]F#^F#/F#(F#_F#:F#v@+I@Pm#SO@y;@y;@wr+wr+g~++Y.@&N+R.+16+Gq@[8+8F#cD#N/+Z_@t| @<@Ok 9F#0F#0F#>| e#V% St.M'.+Wm#!>+U)@< +$$#!2+%++qB.Y]@8O.l< U!@bk {c {c [N.w'@LZ@w'@Aa+iF#jF#kF#[R@+R@8$+b3@|4 }R@sD#wk ]b+]b+X5 X5 X5 X5 l. l.4=+QB@QB@QB@s3.s3.s3.;H.A^.A^.A^.X_ X_ 7v@7v@ l. l. l. l. l. l. l. l.{_ t& E) ,_ (* {D ph#|5+$B#$B#$y#':+lP p] $| l. ;. n~ bP+#4#T9#lF#,`.~h.!h.0-@mF#nF#oF#+l+oc+pF#qF#rF#sF#tF#uF#vF#wF#xF#yF#zF#AF#m$.z_.q5.BF#'T CF#DF#EF#FF#GF#HF#IF#JF#KF#LF#MF#Hx@NF#OF#OF#PF#W3 j8 Zr 3' F> n| ,p 7, (,@+L@.9 !)#))#!)#QT@S^#1f O9 9 9 .9 `V@QF#~1 kx $, i[#WH i@#Cv@yn#:c#uR@;)#77#X=#h@#Ag#Ez#1;#E0 g2 Jc A%@9T@)Q+u[#RF#SF#TF#U_#Ne@;t@^i@23@UF#^-@Li+am@Zv+~[+VF#Zg+N0+;2+Pn+mB#&>+rr+oy+-w+#k+#k+=E#|t#[a@rX@xb#:G+bi@WF#By#2&@3&@3&@3&@2&@By#By#2&@2&@By#ic#zy#Ay#Ay#jc#b[+b[+ni+*l#=l#cf#XF#XF#Qg+Qg+Rn#1f#}f#}f#}f#1f#cc#ic#;E#cf#2f#2f#Fy#YF#ZF#`F#nc#nc#q0#q0#r0#2i#i0#if#if#if# G#sB#@w#,E#.G#>6+)6+'6+f8+vB#Uy#)E#My#My#+G#+G#+G#+G#@G#@G#zB#zB#AB#AB#BB#CB#CB#Xy#^l#bi##G#yf#yf#EB#zf#zf#GB#GB#GB#$G#IB#Zy#HB#Ct#N7#&5#Fc#@o#%5#Iq#-5#%G#@o#@o#@o#@o#@o#@o#@o#~2#Kq#Lq#&G#Lq#J0#^E#J0#)5#)5#Kq#Kq#J0#J0#J0#J0#J0#)z#_o#&5#@o#%5#@o#&5#Hc#Fc#Fc#Fc#&5#&5#Df#Df#Df#*G#Pt#Pt#Pt#|w#|w#5w#5w#|o#=G#-G#;G#[5#(5#RB#RB#UB#-z##8##8##8#(5#>G#_z#_E#VB#! yz#VE d=#L1 {#.ry@ry@l .J,#aC#aC#aC#aC#jy#jy#Ez#Ez#jy#oy#7q#H,#zn#H,#_c#/c#L9 E0 :+#6##}+#hG#iG#jG#kG#lG#mG#nG#oG#pG#qG#BF#rG#sG#/2.tG#tG#/}.4v.4v.R:.w6.RM Mh.k[.eZ ,}.l4.e3.{7.|:.7#.W%.F .#&@uG#p!#6' aq.1c +^ Ad $3#L| U:+vG#AE#n[@wG#U:+yC#AE#vG#zC#<_@oW+&2 CC#p4 FC#9@#L:@MY+KY+xG#yG#As zG#FE#yp.cQ+HE#NC#,} AG#BG#Cb [8 o; oz.J0@b^+T6 `'+^Z.GA+GA+0d.1x.5D+80+Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+]$@A_@A_@A_@A_@ok.A_@A_@d7.yj+)D+)D+)D+)D+A_@q9+[y+[y+%U.%U.%U.%U.%U.%U.%U.%U.[y+[y+[y+[y+%U.%U.Rx.Rx.)> )> )D+)D+KE#KE#A_@]$@]$@,8+*; 7-+m,+7-+13+gA $| CG#N ###+DG#') OE#EG#FG#GG#f$+HG#YJ.7 @IG#JG#UE#n'@Lw#a>@KG#LG#MG#NG#OG#PG#QG#RG#SG#J+#TG#Su#Ur#z #UG#UG#VG#N6#WG#XG#YG#ZG#`G# H#.H#+H#vP+@H##H#$H#gA#%H#&H#*H#=H#-H#;H#>H#,H#'H#)H#!H#~H#{H#]H#^H#/H#(H#_H#:H#5F#3D#tA#uA#=D#3X@_=#+Y.@&N+R.+16+Gq@Ge@n1@cD#N/+}H#5Y.@<@Ok |H#!4 vd+1H# e#N( 1D Rs.#dH#h3#>4+9>+Z@+e!@YJ.u@+n6#>1#fW.-W@8O.{*@n8 |L.PM.PM.1L.s| PM.DL.>K.m8 D_#eH#O. +R@fH#8$+8M }R@]b+{k.]b+]b+X5 X5 X5 X5 l. l.QB@QB@QB@4=+;H.s3.s3.s3. l.7v@7v@X_ X_ A^.A^.A^. l. l. l. l. l. l. l.{_ t& E) ,_ (* {D ph#|5+$B#$B#l5+':+lP p] Ma u$ :+ D* as.gH#v&.hH#lq.,h.{h.Ib.iH#jH#kH#lH#wa+mH#nH#oH#pH#qH#rH#sH#gy tH#uH#vH#qe.f,.sd.L'+%w.Rq.[@#wH#xH#yH#zH#AH#BH#CH#Fz#DH#EH#FH#GH#HH#IH#Pj JH#O1 /1 /1 N1 7, 36 7, /,@ 9 +L@!)#B_#YA WA KH#B_#RT@c2 c2 8j#i@#C&#Y=#Ed#Y=#Ag# p@LH#MH#T8#NH#OH#,)#it@X=#8.#UE@[`@n| T} Mz |##PH#QH#RH#SH#TH#UH#>>+VH#3@O,+O0+N0+$4+Xg+si+lr+3$@Sn+Tn+sp+ L+`K+`K+60#60#Pn#v=@oD+u&@.}#.}#By#2&@3&@3&@/+@3&@2&@2&@ic#ic#ic#ic#ic#ic#ic#ic#b[+b[+ni+*l#=l#cf#XF#XF#Qg+Qg+Rn#1f#}f#}f#}f#1f#oB#By#XF#]i#2f#Qg+Un#XH#YH#ZH#nc#`H# I# I#kf#)l#i0#q7#{|+q7#i0#mc#Un#@w#>f+.I#d8+>6+.G#+I#f8+'6+My#My#+G#+G#+G#+G#@G#@G#zB#zB#AB#AB#BB#CB#CB#Xy#@I##I##G##G#yf#yf#zf#zf#GB#GB#GB#$G#$I#Zy#HB#N7#N7#&5#Fc#@o#%5#Iq#-5#%G#%5#%5#%5#%5#%5#%5#%5#%5#~2#P7#>z#P7#Jq#O7#Jq#,5#I0#I0#O7#Jq#~2#~2#,5#,5#%I#_o#&5#%5#Iq#%5#Fc#Df#Fc#Fc#Fc#&5#&5#Df#Df#Df#*G#Pt#Pt#Pt#|w#|w#5w#5w#|o#=G#&I#*I#/E#(z#(E#RB#UB#UB##8##8#(5#(z#_z#:z#[z#[z#[z#=I#,G#,G#,G#,G#-I#-I#-I#)G#;I#;I#>I#/G#,I#{#0I#^5@aI#bI#P&#cI#LM.t$#!4+|##|##|/ s @4@`-@dI#eI#Wr $l +' U:@lI@l] fI#gI#hI#iI#jI#kI#9V aP@|C 1C .X lI#-C+-C+mI#h] nI#h] oI#pI#pI#X] b.#I,#.i#.i#I,#WE@5!#yn#yn#yn#J,#WE@I,#.i#|c#|c#xn#qI#qI#(c#};#Tw#Uw#rI#sI#hG#tI#uI#vI#wI#xI#yI#zI#o~.AI#BI#Lz.)).a8.E1.:R QM Mh.jD Tq.kD PX Mo.kD PX gZ gZ |%.3;.m(+{U.CI#DI#EI#FI#N~.>$ pb _+#Q#@Fc Gc x`+Hc Jd GI#Gc x`+N:@ wM 6}._U !:+7x. )> )> )> )> Yt.)> )> KB ,v.Yt.)> Yt.Yt.]$@q9+%U.%U.%U.%U.%U.%U.[y+[y+%U.%U.%U.%U.%U.%U.%U.%U.Rx.Rx.)> )> )D+)D+KE#KE#A_@]$@]$@,8+*; 7-+m,+7-+ec bH@.Z )M.PI#9<#&r J#,J#'J#)J#!J#~J#{J#]J#^J#/J#(J#_J#:J#@['@5J#SJ@4a+/c+Y;@B&@d9@$I@V5+':@a~@N)@M@+wr+Il+[P+X.@;K@;K@5G+5G+5G+5G+2 @YK+2 @5G+-K@-K@-K@;K@5G+5&@4G+gX+nZ@yA#AA#AA#8D#aD#aD#aD#:{#a=#N+#oZ@BO@gX+5$@5$@5$@5$@5$@5$@5$@4G+4G+4G+4G+4G+4G+4G+4G+| @4Z+jX+jX+jX+jX+,K@[H#w;@!K@!K@!K@,T@DD+x;@cB@lX+9G+*>+Y.@&N+R.+16+Gq@no@6J#cD#7J#HG.5Y.!E Ok |H#vd+1H#8J#F1 *| 6C+Q1.1x.1x.;q.;q.^D.^D.9S.8S.S|@Rx.8}.8}.7}.z<.z<. Z z<.z<.z<.7}.7}.z<.", "u u u u t O T t t t t O O O V 6c 9c 7c E7 E7 7c 9c 9c g~ E7 7c 9c 9c 9c 7c E7 '= D V X @< c* nG.Qs+[v#9J#=9.v%.Uv.0J#aJ#dF#bJ#5H#cJ#dJ#eJ#fJ#mD+Lb+9H#gJ#5v#5v#od+9X+-]@-]@/P+}R+@w+}R+@w+}R+}R+}R+7X+7X+7X+7X+7X+7X+7X+#k+up+Xn+mp+mp+@k+@k+@k+=w+(P+K,@Vv#Vv#Vv#Kx#WA#yb#s<@1V+WA+y@@PK+fD+PK+y@@WA+1V+Kl+FD+(P+fD+uI+WA+yb#M)@M)@L,@yb#yb#M)@Dq@LF@LF@LF@LF@LF@LF@LF@LF@mm+A$++w+qy+s~@ o+vb+<v#oD#t)+']+iV+iV+,]@Hy+QK+hJ#iJ#jJ#kJ#51@{k@fz@|$@|$@T{@T{@0y+0y+0y+0y+WA+4X+0y+4X+T{@|$@ep+VA+ep+lI+W1+lI+In+VA+$q+%s+x@@lw+br+M&+G)@G)@G)@M&+M&+M&+M&+G)@G)@G)@G)@n0+6~+lJ#Zl+6d+Yl+6d+VF#}$@<6+U&+|$@*4+4X+[=@1V+c[+Pn+`A+Pn+Pn+1]+1]+2V+_|+ 7#@l>@Of 7O.nJ#Cu+oJ#N_ pJ#IO@|4 'i.8M eH.]b+]b+X5 X5 X5 X5 l. l.af.QB@4=+4=+;H.;H.s3.<4 )i+)i+ l.7v@X_ X_ A^.A^. l. l. l. l. l. l. l.{_ t& E) ,_ (* {D ph#|5+$B#$B#l5+-J.rS _y $| u$ :+ ~5 %p+K'#XD@K[.qJ#rJ#;h.TW sJ#tJ#uJ#vJ#wJ#xJ#yJ#zJ#/>#AJ#7n#BJ#CJ#F=#9~.l/.S{.m&.j=.%w.DJ#EJ#FJ#GJ#HJ#IJ#JJ#KJ#LJ#Fz#MJ#NJ#OJ#PJ#QJ#RJ#g$#]1 6, Q1 ]1 N1 N1 +' 7, +' /,@O9 9 1f @~ ^|@YA $~ p@! Tj UJ#{c P&#VJ#WJ#pz#XJ#YJ#ZJ#S@+.L+8a@lo@^3@eD+lc@,G+%>+;2+Nb+{/+{/+mi+{_+M0+Kt+3$@Sn+Tn+sp+ L+`K+`K+]/+]/+v=@v=@oD+oD+`J#`J#By#2&@3&@/+@/+@/+@3&@3&@zy#zy#ic#ic#By#By#By#2&@ni+ni+*l#*l#=l#=l#]i#]i#2f#2f#1f#1f#}f#,l#,l#Rn#W1#2&@_i#_i#Qg+h0#mc# K#`H#nc#z7#nc# I# I#kf#)l#mc#+w#+w#+w#i0#i0#i0#i0#>f+.I#d8+d8+e8+.G#'6+!6+.K#.K#+K#+K#+K#+K#@K#@K#zB#zB#AB#AB#BB#CB#CB#Xy#@I##I##K##G##G#yf#Cc#Cc#$G#$G#$G#$G#IB#C0#$K#HB#M7#Fc#Fc#@o#%5#Iq#Iq#Iq#%5#%5#%5#%5#%5#%5#%5#%5#@o#%K#-5#%K#Fc#Ef#Fc#[l#Hc#&K#&5##o#@o#*5#@o#Fc#Xq#Hc#Fc#%5#Iq#%5#Fc#Df#&5#&5#&5#&5#Df#Df#Hc#Hc#Pt#Pt#MB#MB#5w#5w#5w#OB#}o#=G#*I#-G#/E#&8#*K#*K#TB#TB#(z#(5#(z#&8#:z#=K#-K#-K#;K#;K#XB#,G#,G#,G#>K#>K#>K#>K#Xt#Xt#Xt#Xt#,K#'K#)K#!I#,I#!K#~K##r#{K#Ei#Ei#]I#/I#^I#~u#Fi#Hi#Hi#hl#hl#hl#hl#hl#[2#`q#]K#^K#`y#HB#M7#Ct#+T&+Y}+~V+dz@H,@@N+^-+Z_#Pr#[K#H[#}K#|K#1K#2K#3K#4K#ry#5K#u1@e<#6K#[L.+s SH .;@w' 2' Jf Jf :7 lI#7K#8K#9K#9K#0K#aK#bK#[e >8 cK#aP@aP@|C [E@0V +X dK#&~ vz#eK#oI#fK#dK#A&#b4#'m#'m#'m#|c#WE@J,#5!#5!#J,#WE@WE@I,#.i#uR@))#))#!)#k[#k[#(0#H,#gK#Eh@hK#iK#jK#kK#>r@lK#mK#nK#oK#pK#B@._<#r5.#B./-.B}.;t.jD }W b5+03+ &+h5+H7+ &+p_@!` fD FA `S+F*.}d.qK# X+z{+Z& t2@O8 =6#rK#Fc x`+GI#Hc Hc GI#Gc Gc N:@p) sK##; EC#9@#q4 9@#9@#tK#e$#, #KY+Xs@H[ EY+LI#uK#S`+O0 vK#bA.wK#&=@xK#de+Db Cb.*p+0S.Z9.TY.5H.61.61.90+Pj+Zh@5D+7}.8}.8}.Rx.Rx.8}.8}.7}.7}.7}.7}.7}.7}.7}.7}.7}.i~ Yt.)> )> i~ ,v.Yt.)> ZY i~ )> )> Yt.Yt.6g+jy.Ov+Ov+%U.%U.%U.[y+[y+[y+[y+%U.Ov+Ov+Ov+Ov+%U.[y+Rx.Rx.)> )> )D+)D+KE#KE#A_@]$@]$@,8+*; 7-+m,+7-+cc '&+yK#zK#AK#:O+BK#CK#DK#EK#FK#GK#}K#HK#})#ki@IK#R0@-u+bw+.k+@(@VI#JK#+T@u3#R!#KK#LK#MK#NK#OK##^#*F#PK#QK#QG#.J#RK#QG#WG#+~#SK#@J#TK#I<#J<#'v#UK#VK#WK#XK#YK#ZK#`K# L#.L#+L#@L##L#$L#%L#&L#*L#=L#-L#;L#>L#,L#'L#M<#)L#!L#+Y.@&N+R.+16+Gq@/L#}Y+cD#7J#HG.(Q.!E Ok #S 1H#g=@{( _9#E& T!+j8.1x.1x.;q.;q.^D.^D.9S.8S.g*.7}.7}.z<.z<.z<. Z Z Z z<.7}.7}.7}.7}.", ",% >% >% ,% ^% U% 9& U% U% U% 9& 9& Q% Q% Q% ,' 9c 7c E7 E7 7c 9c 8c 9c 9c 8c 8c 8c 9c 7c E7 x5 ,% i> }. h^ Wx.,a@(L#_L#'h kb+:s Uv.:L#aJ#3@[6+p8+*4+=4+vI+c[+Sn+%w+Sn+Sn+=w+v)+QK+Il+xr+zb#.L+Y.+Kq@'2+{ + *+h3#A'#2_+,{+/i@Oe@9L#0L#&N@E'#G3 ;n#iR. G@[N.PM.1L.;K.P2+>n#Xj m9+aL#bL#=>#v9@YG.cL#~I@Z%@XG.7M ;5 ;5 24 24 24 24 {_ {_ v% I> fL.w4.':+-J.l3 w% ;b.{_ {_ {_ {_ {_ {_ {_ {_ {_ {_ {_ {_ {_ {_ ac t& E) ,_ (* {D ph#|5+$B#$B#l5+l3 *L C' (* 5. g. I- 9s.J(@K(@dL#eL#fL#5+qL#K%.se.+k.!{.7M.o}.rL#sL#tL#uL#vL#wL#xL#yL#zL#KF#AL#6;#BL#CL#9n {1 VH +9 Qw#n| ]1 F> F> +' +' (,@_,@/d@;! YA QT@h$#:f@jj#B&#P} L1 (} m| C!#O8#NH#S8#DL#EL#EL#Ad#FL#GL#e>#=f#b>#k] -C+Kf Vj CJ.N&#bI#HL#Us@iB@IL#P0@JL#KL#16+N,@ew+Hn+5a@):@):@t)+od+[]+_k+(k+(k+(k+Ng+&l#Kt+Pn+|]+sp+Yn+-9@`K+`K+8X+8X+8X+sD+`+#v=@pD+pD+2$@ZA+YA+dy+gi+dy+dy+dy+ZA+ZA+ZA+ZA+2$@2$@2$@2$@oi+oi+*l#*l#=l#=l#2f#2f#]i#_i#nB#1f#,l#,l#hf#:i#lc#oB#1f#Rn#df#2#SL#TL#UL#VL#Df#&5#Fc#%5#%5#@o#Fc#&5#Df#Df#Df#Hc#Hc#Hc#_o#_o#MB#NB#NB#NB#OB#OB#PB#PB#}o#WL#;G#XL#/z#&8#SB#YL#ZL#`L#&8#&8#&8#[5#=K# M#-K#-K#-K#-K#'G#YB#YB#YB#.M#.M#.M#.M#|z#|z#}z#}z#dw#dw#}z#'K#}z#)K#|z#$r#+M#@M##M#$M#%M#&M##M#jl#R7#jl##M#[2#R7#{2#:o#*M#=M#-M#;M#>M#,M#HB#`y#'M#G0#Bf#)2##o##o##o#Hq#*5#Lq#~5#)M#Ct#8 >8 <@ <@%W@YT@x! %~ $] .A@.A@Dn#2M#~{ ~)#+L@ 9 9 O9 .9 bP@[`@uR@[`@[`@[`@[`@uR@uR@w! ,{ Ev@s{ QT@B_#a7#a7#xn#`8 |6 3M#2C#4M#5M#ZX@6M#qM#8M#9M#0M#aM#bM#D<+r9.x7._H {X Xl@cM#cM#dM#eM#Ak#fM#gM#hM#. @^r+p=+R#.iM#jM#@) Kl kM#I; {: rK#GI#GI#Id Hc Hc GI#Gc N:@N:@p) lM#sK##; h} EC#]: G< mM#nM#>x#j_@pS+t`+`H+oM#pM#9_ qM#>9 rM#Vf Fa Cb Ea &=@sM#TD et zk !:+5H.,8+0d.0d.0d.80+5D+z<.7}.8}.Rx.Rx.8}.7}.z<.8}.8}.8}.8}.8}.8}.8}.8}.7}.Rx.%U.Ov+7}.z<.8}.%U.8}.Rx.%U.Ov+Rx.8}.Ov+%U.Ov+Ov+Ov+%U.[y+[y+[y+|f.[y+%U.Ov+Rx.Rx.Ov+%U.[y+%U.%U.]$@]$@A_@A_@PC#PC#A_@]$@]$@,8+*; 7-+m,+7-+2x.x]#tM#uM#hs.YC+vM#wM#xM#yM#zM#AM#;t@BM#CM#DM#Ge@dm@R^@i}@EM#FM#XE#GM#HM#IM#JM#G<#KM#JX+NK#LM#MM#NM#OM#OM#PM#5x#QG#QM#$F#H #%D#RM#SM#6L+dN+TM#6'#UM#VM#WM#XM#`K#YM#ZM#`M# N#.N#+N#@N##N#$N#%N#&N#*N#=N#-N#;N#>N#,N#'N#/V@8L+}'@)N#Rr#!N#~N#V(#*#@84+;T@{N#6V@I #(u+~u+':@Qx#z$+d^@X{@L@+:w+P,+cB@8G+8G+8G+8G+8G+8G+8G+w;@R)@^^#X&+X&+[|+X.@5G+5$@5$@fX+M+#]N#^N#AA#AA#CA#a=#a=#N+#oZ@BO@fX@CI+5$@5$@5$@5$@5$@5$@5$@5$@4G+4G+4G+4G+4G+4G+4G+4G+fX+gX+5$@4G+4G+5$@>K@)K@w;@!K@!K@!K@,T@DD+x;@cB@lX+9G+*>+Y.@&N+R.+16+Gq@2p#}Y+cD#tz@0I.(Q.!E Ok W' {( g=@{( /N#+2 )b+pK.61.61.`Q `Q 75.75.PQ.vM.}U Y% Y% Z Z Z Z Z Z z<.7}.8}.8}.7}.", ">% '$ '$ >% ,% ^% U% U% U% U% 9& Q% Q% i> ,' 8c 9c 7c g~ g~ 7c 9c 8c 8c 0' 0' 0' 8c 9c 7c E7 >' ^% k+ }. j3 6{ (N#Rs+_N#:N#FD.(r 9p )+@3@>3@}6+p8+p8+=4+H:+V&+Sn+%w+Sn+Sn+=w+=w+QK+QK+f1@xr+0N#mo@aN#bN#cN#dN#||+!}@H!#tc@CU.0Z+2k+LJ@qZ.j>@5e+k>@KR. G@[N.[N.O2+P2+uK@-K.F(@DL.xz#Cu+)n#eN#fN#Ul gN#hN#uI.iN#m&+;5 24 24 24 24 {_ {_ f% I> fL.w4.':+-J.l3 x% W_ W_ {_ {_ ;b.|x.O9.O9.{_ {_ {_ {_ {_ {_ {_ ac t& E) ,_ (* {D ph#|5+$B#@9.l5+l3 *L og /* l. _. (& }* YD+,,.jN#m:.jt =R+Nx =7#kN#lN#mN#nN#oN#pN#qN#rN#sN#tN#,7.xm@7,.OE r&.7r.!0.m=+uN#vN#wN#xN#yN#zN#AN#BN#CN#DN#z~#Ig#D0 W8 8q l.#uR@')#EN#-)#+' F> F> o| 7, +' VH _t W:@+~ ')#FN#GN#HN#IN#6u#v{ q[ M1 Zp Y=#JN#-3#KN#Ha#LN##b@#b@MN#i$#NN#@] oI#ON#PN#QN#RN#Mj#rm#SN#Q_#hE#NX.t4#,5@TN#UN#0i+lI+$-+nk+jV+SA+N0+N0+e~+kp+:6+Qn#/k+bf#bf#VN#WN#Kt+lr+|]+sp+Yn+-9@`K+XN#;2+Nb+Nb+8X+`+#v=@Pn#5=@2$@ZA+YA+dy+gi+gi+dy+dy+Xg+gi+dy+YA+ZA+#l##l#Cy#pi+pi+oi+*l#=l#bc#Qg+Qg+XF#]i#nB#1f#,l#hf#-l#-l#YN#W1#Rn#:i#f+sB#B7#B7#B7#ML#ZN#NL#OL#!l# K#`N#`N#PL#+w#{|+~|+.4+mc#if#.I#QL#>6+>6+&2+c8+.K#.K#+K#+K#+K#+K#@K#@K#zB#zB#AB#AB#BB#CB#CB#Xy# O##I##K##K##G##G#Cc#Cc#$G#~E#K7#Fq#C0#C0#IB#$I#Ec#Ec#Ec#Ec#!2#!2#!2#!2#G0#G0#G0#G0#G0#G0#G0#$5#'2#RL#z0#RL#,2#TL#,2#ei#ei#RL#RL#ei#,2#.O#Cw#Lt#Fc#Fc#@o#@o#@o#Fc#Fc#&5#Df#Hc#Hc#Hc#_o#_o#Xq#Xq#NB#NB#+O#+O#PB#PB#PB#@O#[o#|o#XL#/E#&8#&8#YL##O#$O#ZL#[5#[5#[5#/z# M#%O#;K#;K#-K#&O#ZB#`B#*O#*O#cw#cw#cw#cw#}z#}z#}z#dw#}z#}z#dw#dw#}z#Xt#=O#)G#-O##M##M#$M#&M#$M#[2#=8#{2#jl#$M#[2#{2#;o#^2#;O#>O#,O#'O#)O#!O#~O#{O#`y#qt#Ec#Jq#R7#R7#]2#>5#U7#.8#]O#^O#-z#;z#~2#Iq#/O#(O#_O#:O#@=I@GH@U##C1#3O#^M#4O#NJ@G[#F[#5O#-{#6O#Y #7O#5O.8O#Th 9O#BR@~M 4|@;! y, Y:@W:@+~ t! (|@(|@^|@1f jt@zK J~ S^#Ev@@t#B_#/d@(7 ]|@/d@O9 @A@bP@@A@RT@bP@uR@uR@uR@bP@w! &0@0O#)Y@tR@Q^#')#B_#O9 hB m[#kr#3C#QW@[,@aO#bO#cO#dO#eO#fO#gO#hO#5^+2X.pl+_2.IK.#F+Bv+Ea@Ea@iO#jO#eM#kO#gM#~..$ @I#+4J.lO#=Z+mO#7) nO#`( oO#pO#rK#GI#Id Hc Jd Hc Fc Gc p) p) x#^/ /( G( g{ hW+sO#9_ tO#d6 (Z.7A.Vc &=@Db Wc j{.6S+9V.uO#},+5H.iy.M<+,8+1x.6=+80+z<.7}.8}.Rx.Rx.8}.7}.z<.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+8}.Ov+|f.%U.8}.7}.Rx.[y+Rx.%U.[y+%U.Rx.8}.Rx.%U.Ov+Ov+Ov+%U.[y+[y+|f.|f.[y+%U.Rx.8}.8}.Rx.%U.[y+%U.%U.]$@]$@A_@A_@PC#PC#A_@]$@]$@,8+*; 7-+m,+m,+OF+wM+vO#l;#wO#h9 xO#yO#zO#=T.AO#2)#BO#f~@CO#DO#_7@Eq@cw+J&+TA+L_@EO#FO#GO#B##JM#H<#HO#IO#NK#JO#KO#LO#MO#OM#5x#NO#QG#OO#PO#fZ@IX+QO#LX+RO#SO#TO#UO#VO#WO#XO#YO#ZO#`O# P#.P#+P#@P##P#$P#%P#&P#*P#=P#-P#TR+;P#>P#,P#'P#)P#/V@=>@)N#A3#!N#2A#!P#AG+QQ@_a+&T@rB+L+#Uy+iw+(u+-3@~P#z$+-(@b~@6T+K@jX+4Z+mZ@]N#^N#zA#CA#a=#a=#N+#gX@BO@2R+CI+5&@5$@5$@5$@5$@5$@5$@5$@5$@4G+4G+4G+4G+4G+4G+4G+4G+gX+gX+4G+5&@5&@4G+>K@>K@w;@!K@!K@!K@,T@DD+x;@cB@lX+9G+*>+Y.@&N+R.+16+Gq@2p#}Y+{P#tz@0I./~.!E Ok D2 !( g=@{( I*+2x.]P#i6#61.61.`Q `Q 75.75.PQ.vM.%n )_ x8 x8 Y% Z Z z<.Y% z<.7}.8}.8}.7}.", "t).t).t).t).t).t).t).F7 F7 t).t).G) G) G) w8 kC kC dd g~ 7c 9c 8c 8c 7c 9c 8c 0' 0' 8c 9c 7c M_ l& S& 1( *^ U<+i* Rs+^P#/P#2$.Cw yB.K$# =5 Y_ si si si si UV UV UV UV =5 =5 =5 =5 =5 =5 =5 =5 ac ac ac ac ac ac ac 5[ t& E) ,_ (* {D ph#|5+$B#M7.l5+':+rS C' (* w$ u$ &' O; >. {y+K].JR eP#)g fP# .+gP#hP#!Q+iP#jP#kP#lP#mP#nP#oP#,7#&H.pP#qP#8r.1|.Y8.t~#rP#sP#tP#uP#vP#wP#xP#yP#zP#AP#BP#CP#2j }o fw ;! I~ Gv@.A@H5@_,@F> (1 (1 +' (,@_,@_,@@A@i@#_f@$h@DP#Ri@jj#H5@4C l .M1 i[#Y=#6!##|#$|#NH#MH#gt@EP#FP#%] 3u@GP#HP#IP#JP#`m+KP#-{#D[#/i@li@2W.9)#i:+At+EZ@Z=+q$@YM@cy+^V+9X+9X+N0+N0+%4+%4+%4+LP#'B+0c#(f#mq#mq# m+kr+St+[w+[w+St+~k+!k+-m+-m+[]+]_+:k+:k+=m+1$@-2+_k+1$@V4@hc#V4@1$@{/+-2+-2+-2+_k+{/+{/+1$@1$@oi+oi+oi+oi+cf#cf#]i#]i#_i#_i#nB#nB#Sn#Sn#Sn#Sn#Wl+Wl+6+>6+d8+d8+)6+)6+.K#.K#+K#+K#+K#+K#@K#@K#AB#AB#AB#AB#BB#BB#BB#OP#PP#QP#RP##K##G#yf#zf#zf#~E#$G#GB#!E#D0#$I#C0#$K#HB#$K#Zy#C0#C0#Zy#$K#HB#IB#IB#IB#IB#IB#IB#IB#K7#/K#(K#(K#(K#(l#(l#(l#(l#}I#}I#}I#SP#SP#>}#>}#,2#Hc#Df#Fc#@o#@o#Fc#Df#Hc#Hc#Hc#Df#Df#Df#Df#Df#Df#MB#Pt#Pt#*G#Zq#|w#5w#OB#}o#}o#/z#/z#/z#/z#TP#TP#7w#=z##8#(z#&8#/z# M#%O#;K#;K#-K#-K#'G#'G#'G#'G#|z#}z#UP#)u#VP#WP#cw#.M#>K#>K#>K#.M#.M#cw#cw#cw#XP#YP#YP#ll#ll#ZP#ZP#ZP#/2#/2#/2#`P#*8#*8#}5#|w#'O# Q#.Q#+Q#)O#@Q##Q#nt#tt#)M#Kq#Y7#!5#P0#Kc#$Q#%Q#&Q#&Q#@8#]5#^5#{2#Fc#Pq#;2#0E#*Q#~:#=Q#-Q#x0+di+lD+SA+Ll+&4+<6+X}+Ct+I&+H&+R^@bw+;Q#V,@`.@l9@>[#>Q#,Q#9T+'Q#)Q#!Q#~Q#{Q#KP#Pp 1L.hP@t/@va qG Xr -c 5F ^t ^0@^t *8@mt@]Q#Iz A_@ok.Ae+KE#d> zc@Ai.K@>K@R)@R)@8G+8G+H@@H@@H@@CD+lX+9G+;B+/w+;m+&R#eD+$E+T^@*R#=R#4<+HG.^N.R_+fp +s@GA#{( g=@:9#x]#T!+hS.Pj+,8+UH.;q.75.^D.;e@):+;q.z<.z<.z<.z<.z<.z<.z<.7}.7}.7}.7}.8}.8}.", "t).t).t).t).t).t).t).}9.F7 F7 F7 t).t).G) G) dd dd g~ E7 E7 7c 9c 9c 7c 9c 8c 0' 0' 8c 9c 7c O6 l& S& z 0f+Ty.i* eR+bx+-R#;R#hG SC.>R#,R#'R#Vv+)R#!R#~R#mT+`}+{R#~/+3f#1P#1P#2P#8~+l)+u^@K<@29@5X+[R+]V+rI+oI+ZM+nI+1N#uy#7X+7X+:x@:x@:x@up+@k+Tn+Tn+Tn+@k+@k+@k+@k+K,@K,@Vv#Vv#Vv#Vv#6N#Vv#P,@}=@ED+ED+ED+Rt+Rt+Rt+Rt+g~+Il+2V+2V+Il+g~+Jl+R0+_T+_T+_T+b$@b$@P0+P0+YM@Ll+qy+b$@b$@P0+qy+Ll+L,@+w+A$+qy+Zg+,k+,k+ii+5v#oD#)]+s~@Ll+Ll+,]@_u+_ @Q.@8}@8}@XM+51@[=@5T+5a@|$@0y+0y+T{@ep+0y+1V+QK+2V+H:+=4+p8+p8+p8+p8+H:+}6+X}+0}@51@51@X}+Dt+ep+Jn+6X+6X+6X+iD+M&+br+M&+G)@Jn+6X+6X+Jn+iD+n0+r=@#!@lJ##!@]R#8L#}$@~7@N@+l0+[6+p8+*4+=4+[=@)-+Rn+`A+lr+lr+xp+(|+y@@4X+8m@;7@^k#6k#=n#^R#/R#Kn#'2+k~+(R#e$@BM#&h#uc@qK@w@+$$#n^#83@_R#LR.#i#|0 u7 kB@=W@=W@-K..^+8P#:R#HP#)n# b, l* Y_ =5 -h -h -h -h {D {D {D {D =5 =5 =5 =5 =5 =5 =5 =5 ac ac ac ac ac ac ac 5[ t& E) ,_ (* {D ph#|5+$B#M7.l5+':+rS C' (* w$ u$ U# 61 1{ |R#/C.J&.w9@1R#2R#{X+[b 3R#4R#5R#6R#lP#$$@7R#fN#8R#9R#0R#aR#+4.bR#>5.cR#:4#dR#eR#fR#gR#hR#iR#jR#kR#lR#mR#nR#oR#to -c W:@Y:@I~ '{ (1 F> fw y, /,@n| pR#qR#%h@rR#Sm@'d@e>#W=#yz#8_@46 S} Y=#6!#;3##|#yn#j$#sR#M~ tR#uR#Gr vR#wR#xR#Wk#B[#{f#`@+M/+;z@yR#+$#Ie@c)+Z=+![+mc@7}@lD+XA+cy+cy+od+od+,k+'k+'k+`l+ub+zR#`A+AR# B+BR#.m+St+[w+IZ@[w+[w+~k+!k+)k+!k+:k+:k+:k+=m+=m+=m+$4+_k+{/+V4@V4@V4@1$@{/+_k+_k+_k+{/+1$@1$@1$@V4@*l#*l#*l#*l#=l#=l#_i#_i#_i#_i#nB#nB#Sn#Sn#Sn#Sn#Ey#Ey#:i#:i#,l#,l#sB#sB#ML#ML#NP#)w#at#t0#ct#t0#>f+{|+if#if#if#if#>f+>f+W4#e8+>6+>6+)6+)6+)6+!6+.K#.K#+K#+K#+K#+K#@K#@K#AB#AB#AB#AB#BB#BB#BB#OP#PP#QP#RP##K##G#yf#zf#zf#$G#$G#$G#$G#CR#$I#C0#C0#HB#$K#Zy#C0#C0#Zy#$K#HB#C0#C0#C0#C0#C0#C0#C0#Fq#/K#(K#(K#(K#(l#(l#(l#(l#}I#}I#}I#SP#SP#>}#>}#>}#DR#&5#Fc#Fc#Fc#Fc#&5#Df#Df#Df#Df#Df#Df#Df#Df#Df#Pt#Pt#MB#MB#5w#5w#5w#OB#|o#|o#/E#/E#/E#/E##O##O#UB#TB#&8#[5#/E#XL#ER#FR#-K#-K#-K#-K#'G#'G#'G#'G#|z#}z#ew#)u#VP#Vt#cw#.M#.M#.M#.M#cw#GR#bw#HR#HR#YP#YP#ll#ll#ZP#ZP#ZP#}5#/2#/2#/2#`P#`P#*8#*8#`q#)O#IR#JR#)O#)O#@Q#KR##Q#tt#tt#;z#`7#Y7#Z7#LR#MR#%Q#%Q#@8#@8#]5#^5#{2#Ic#NR#Hq#OR#/C#:K#PR#QR#E0+$2+RR#SR#TR#<1@jp+Nn+S#t$.H_.m^+3;.A}..1.$_@~4#j5+-K Xl@S>@)u.nz $:+m}+,S#q,@s).B% 'S#)S#-3 3##m: Gd 2) 29 sb )< wd#m: hQ#., ., hQ#Ec !S#~S#PL@f$#Dc o7 M| EW+o_ ZW )z y7 $m.t.@{S#)I+]S#^S#/S#Cb Q= Vc ce+$~@L} (S#a|#z@ 5. ,8+6P.Pj+5D+3x.8}.Rx.Rx.7}.x8 )_ 7}.[y+Ov+Ov+Rx.Rx.Rx.8}.8}.8}.[y+Rx.z<.z<.8}.Ov+Ov+Rx.Rx.%U.[y+[y+Ov+Rx.Ov+[y+%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.Ov+Ov+Ov+%U.Ov+Yt.)> A_@ok.Ae+KE#)D+dl.]$@90+=; :P.|3+3n+/x#_S#e) cj+:S#@U0@3S#uQ#4S#5S#6S#Q!#7S#LK#8S#xQ#yQ#J6#zQ#AQ#AQ#BQ#G<# J#G##9S#0S#aS#bS# e+wT+cS#dS#eS#fS#gS#hS#iS#jS#kS#lS#mS#nS#oS#pS#qS#rS#sS#tS#uS#vS#wS#xS#yS#zS#AS#BS#CS#3e#y3#(E+:L+$J+DS#nF@mR+[=#s6+hB+fw+ES#]7@FS#$R#~P#M)@y;@X{@&N+Qt+m;@x;@x;@x;@cB@cB@cB@cB@cB@x;@cB@H@@CD+CD+H@@cB@R)@YK+4Z+~^#P6#]N#yA#^N#GS#DA#{^#{^#7V@gX+5$@YK+YK+5$@5$@5$@5$@5$@5$@5$@5$@4G+4G+4G+4G+4G+4G+4G+4G+gX+gX+5$@5$@5$@5$@>K@>K@w;@R)@R)@R)@cB@cB@H@@H@@lX+9G+;B+/w+;m+&R#eD+$E+~R@HS#H~+;V.}I.$3 t7 >z D2 !4 8J#{( 3<#i8.T!+=; ,8+0d.g*.;q.^D.^D.,S+a(+;q.z<.z<.z<.z<.z<.z<.z<.8}.8}.8}.7}.7}.7}.", "t).t).t).t).t).t).t).l:.l:.}9.}9.F7 F7 F7 t).E7 E7 E7 E7 E7 E7 E7 E7 7c 9c 9c 8c 8c 9c 9c 7c t).S& C& N+ $a+.N.3> [k#bx+IS#JS#/B My >R#HK+3H#KS#LS#MS#NS#Q.@`g+7~+`(+3f#1P#1P#2P#8~+-:@K<@K<@OS#WH@v~@5X+[R+Ht+Ht+#w+`M+(t# N+ N+K,@:x@:x@up+@k+Tn+Tn+Tn+@k+@k+@k+@k+K,@K,@Vv#Vv#Vv#Vv#6N#Vv#H6@tr+Jl+Jl+wI+wI+wI+wI+QK+QK+5T+vI+vI+5T+QK+fD+R0+_T+_T+b$@b$@P0+P0+P0+qy+P0+P0+b$@P0+P0+qy+Ll+mm+6X+6X+qy+O0+-m+-m+ji+ii+<&#s~@Zg+qy+qy+#lJ#5~+r=@O,+N@+|$@*4+4X+[=@y@@/_+lr+.m+|]+|]+vr+R0+uI+y@@9k@;7@Um#^k#U5+PS#QS#RS#i[+<{#x4#B)+#@#ek@&a@C'#sL.cR.4c#dW.SS#NU.TS#Fn#o<+)8 Ok ZZ Nz ;K.:R#8P#US#P_+VS#WS#XS#YS#ZS#`S#Z5 F. +# '5 '5 +# U@ 5[ .^ .^ .^ p: Zl rS rS rS * * * * * * * * 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ t& E) ,_ (* {D ph#|5+$B#M7.l5+':+rS C' (* w$ u$ 61 tM b: /_ Nq+ T#Qa Ob 1R.Rx+x~ E3 .T#+T#@T#7R##T#$T#%T#V(@&T#2P *T#1o.8M.G7.:D+=T#-T#5(#;T#;|#>T#,T#kR#'T#)T#!T#~T#3j nl {T#t! <@x! l] ` Nx@,8 N1 F> 3' Xr y, n| S} ]T#^T#,d@h@#QT@')#$~ it@2C aY y&#i@#C!#=8 M9 Zp m| q| @<@/T#$i#hq+(T#Yk#_T#6W.!V@y(#1Y+,`+ck@.h+em@U,@)[+//+~7@}$@`g+)]+lD+)]+s~@s~@`g+`g+7}@2Z+Qn+Rn+:T#3$@T1#/f# B+Zn+af#af#af#5f#*m+Mn#Mn#*m+*m+*m+WN#WN#WN#WN#WN#si+[]+]_+:k+=m+=m+:k+:k+:k+:k+=m+=m+=m+RO@RO@V4@ni+ni+ni+ni+bc#bc#2f#2f#2f#2f#1f#1f#}f#}f#}f#}f#f+>f+>f+>f+.G#.G#>6+'6+'6+)6+z0+}T#}T#}T#X3+X3+Y3+Y3+Y3+Y3+|T#|T#1T#1T#1T#1T#CB#CB#CB#Xy# O#2T##K##G##G#yf#zf#zf#GB#$G#~E#K7#IB#IB#IB#$I#3T#4T#4T#lt#lt#4T#4T#3T#4T#4T#4T#4T#4T#4T#4T#5T#6T#7T#7T#7T#8T#8T#8T#8T#9T#9T#9T#0T#0T#aT#aT#>}#@5#Fc#&5#&5#&5#&5#Fc#Fc#&5#&5#Df#Df#Df#Df#Df#Df#*G#MB#+O#bT#@O#PB#OB#5w#|o#|o#/E#/E#/E#/E##O##O#ZL#$O#/E#XL#;G#-G#cT#dT#&O#&O#&O#&O#YB#YB#'G#'G#|z#}z#ew#UP#WP#Vt#cw#.M#GR#GR#HR#HR#eT#fT#gT#gT#<2#|o#}o#}o#[o#[o#[o#hT#]z#iT#iT#iT#St#St#St#jT#!O#kT#lT#mT#mT#>M#{O#nT#6w#6w#]z#/5#]5#T0# 8# 8#`7#`7#Kq#Kq#Kq#~2#~2#@o##o#*5#+--+zT#gm+hm+AT#BT#CT#fb#*K@OF@EI+-1#DT#A'#>9@ET#LJ@R&#FT#GT#Nu ,z HT#Sv IT#`r ,J _t SC Yk@JT#6`@KT#LT#MT#NT#ew U:@_7 U:@G0 V:@G0 T:@T:@U:@_7 _7 _7 U:@T:@lI@,P ,P ,P ,P ,P ]8@3|@3|@I~ H~ H~ _t Xr e{@y, eI#+E OT#-|#PT#QT#RT#ST#TT#UT#VT#WT#J_.UJ+tV.az./X [l.3#.{>..$.5v.`..{U.2w.XT#YT#ZT#WF+B# eQ#`T#e$#jQ#Nh Og q) Lg U#.U# U#Le {(#+U#+U#Nh Le {(#Ke @U#PL@Bc Dc #3#FW+UY+/( iw E6 7K+$m.#U#$U#a] o%+tO#BG#%U#Q= sM#&U#L} @Y K( /^.r9+_. GA+[e.ks@ec z<.8}.Rx.Rx.Rx.Rx.Rx.Rx.Ov+Ov+Rx.Rx.Rx.8}.8}.8}.Pj+0d. A_@ok.Ae+KE#ok.)> i~ 0d.hS.:P.8n+aW+*U#=U#-U#8f ;U#>U#,U#qK@'U#)U#!U#cH#<7@dm@-*@Md+Vy+tf+x^@of+~U#UJ@{U#hF#]U#N]#^U#BQ#LK#RM#/U#(U#J6#_U#:U#K@5$@5$@5$@5$@5$@5$@5$@4G+4G+4G+4G+4G+4G+4G+4G+gX+gX+5$@5$@5$@5$@>K@>K@!K@!K@w;@w;@x;@x;@x;@cB@lX+9G+;B+/w+;m+&R#eD+$E+no@zU#AU#N/+}I.$3 t7 fp W' 0F#1H#@S -'#BU#6C+xM+90+ EU#FU#GU#s1 vv My :Q@HU#cF#B>#IU#JU#KU#W}+/f+7~+R3+LU#LU#2P#LU#8~+Z6@L<@3}@M<@MU#MU#WH@v~@5X+[R+er+/P+tI+tI+OK+K,@K,@K,@-w+oy+Tn+Tn+Tn+@k+@k+@k+@k+K,@K,@Vv#Vv#Vv#Vv#6N#Vv#a$@Jl+Jl+wI+wI+QK+QK+QK+5T+5T+vI+vI+vI+vI+5T+z@@R0+_T+b$@b$@P0+P0+qy+qy+b$@b$@b$@b$@P0+qy+Ll+Ll+iD+iD+6X+qy+;2+)k+)k+ki+ki+ii+Zg+Zg+P0+P0+mm+/7@,G+0}@0}@0}@0}@51@[6+*4+VA+4X+WA+WA+0y+T{@WA+PK+<&@L)@tr+Jl+wI+5T+vI+[=@vI+*4+{V+{V+[6+[=@*4+|$@uI+(T+(T+(T++w+A$+6X+6X+A$+A$+A$+A$+A$+6X+6X+Ll+`g+Yl+=:@Zl+7d+ >#$>+6~+&4+O,+T{@4X+0y+y@@WA+/_+|]+.m+sp+sp+fy+vr+uI+uI+y$+9k@N.xO.@l+o^#]V.oT.nB #i#1/ B6 Ok tK UJ#@(+/G 8P#(a }0 UU#VU#WU#XU#YU#ZU#]Z.b) +# >5 ,5 .# U@ 5[ o^ -^ .^ p: Zl rS lP 7e. * * * * * * * * 5[ 5[ 5[ 5[ 5[ 5[ 5[ ,_ t& E) ,_ (* {D ph#|5+$B#M7.l5+':+rS C' (* w$ L$ 2x.s[+!I.6{ kG+`U# V#1v+#A+&( xO+i ..V#+V#@V##T##V#$V#%V#&V#^1+ww VW.~$+{$+*V#=V#-V#;V#>V#,V#<(#'V#)V#!V#~V#{V#]V#2,@^V#{T#/V#:)@H~ [e x! Fv@(V#:,@5, 5, 5, _,@7, 'p Zp Z=#j$#{Y@!)#')#')#:r@$~ Q~#W=#c1#i@#Ag#+<#^7 16 =[ j< e_@2O.;S+_V#:V#+tD+rr+Tn+3V#4V#4V#4V#af#*m+Mn#ki+af#af#5f#*m+*m+WN#WN#Mn#[]+[]+]_+]_+:k+:k+:k+:k+RO@RO@RO@RO@RO@RO@RO@RO@b[+b[+b[+b[+g0#g0#Qg+Qg+2f#2f#1f#1f#}f#}f#}f#}f#M#jV#>M#^K#^K#hV#hV#iT#]z#]z#]5#]5#]5#Kq#!2#!2#!2#!2#!2#)2#@o#'2#[l#:l#8 +9 S:@S:@T:@T:@T:@S:@G0 V:@2|@(|@{8@;8@]8@]8@3|@3|@{M 3|@2|@3|@_|@[|@t! Xy 1,@HV#IV#JV#KV#LV#MV#NV#OV#PV#QV#RV#SV#TV#UV#%e@>f.7,+V*.32.G!.p4.'Z+y.@VV#WV#NQ.~* v< XV#YV#*6#O*#Nh Og qa Mg P: U# U#<) {(#+U#+U#Le <) Le Nh ZV#@U#~(#Bc #3#9j#i1 UY+;l ~z 4)@T{ {n {n a] AT ,: `V#:^ %U#c0.h #(S#L} W#c3#X[@!> (. 0d.NU+NU+Rx.Ov+Ov+Rx.Ov+|f.%U.7}.Ov+Ov+Rx.Rx.Rx.8}.8}.8}.Pj+0d. A_@ok.Ae+KE#H0@ZY i~ ,8+Ys.:P.)N+.W#,=#g6+yO++W#@W##W#$W#Ow#%W#&W#*W#}7@1w+cw+9!@o(@'c+'c+bB+IQ@=W#-W#hF#SA#;W#>W#,W#OM#XI#'W#)W#!W#~W#_U#:U#:U#{W#]W#H|#|U#^W#/W#EQ#(W#xP+_W#:W#<+eM@hW#iW#=_#DS#sU#tU#!x@jW#kW#^m@vU#(c@@9@lW#mW#nW#xU#L,@d^@b~@(w+:w+[P+<^#<^#<^#I@@8$@8$@^K@^K@mq@^K@I@@<^#<^#I@@^K@x;@5&@fX+mZ@~^#yA#{^#zA#yU#yA#nZ@fX+5$@YK+R)@x;@8G+YK+4G+4G+4G+4G+4G+4G+4G+4G+4G+4G+4G+4G+4G+4G+4G+2R+2R+4G+4G+4G+4G+YK+YK+]K@!K@!K@!K@DD+DD+x;@x;@lX+9G+;B+/w+;m+&R#eD+$E+no@}Y+AU#N/+}I.^N.t[@`i@Dh dD#vd+5u 7<#Y-.M'.,M+1x.1x.;q.g*.ye+T/@CU#Fu#;q.z<.z<.z<.z<.z<.z<.z<.Ov+Rx.8}.7}.z<. Z ", "+n +n +n +n +n +n +n Ml *=.*=.*=.@n @n +n $~.7c 7c E7 E7 E7 E7 g~ g~ 7c 7c 7c 7c 7c 7c 7c 7c }9.r& r& ,1@=a DU#oW#EU#pW#GU#Ta $F.@6.Vx@HU#dk+w&+qW#rW#sW#Ct+6~+,-+yb+LU#LU#2P#LU#Ol+J<@3}@3}@Y4@M<@M<@MU#WH@:R+5X+:o+nI++Ll+&4+6X+0y+A$+WA++w+f~+|]+.m+Yn+Yn+ur+}T+(T+uI+tW#y$+++GW#hL.U+#HW#IW#se JW#KW#Dl gW+LW#MW#NW#OW#PW#XZ.QW#RW#!@ j4@SW#.0.TW#UW#VW#WW#XW#YW#ZW#`W# X#.X#+X#<7#Ig#@X##X#Hz 2k :)@:)@S Dd C/ 3J@$X#%X#&X#L6@5Z.nc@_3@ [@*X#:7@0N#y9#e[+|a@[6+4X+f~+f~+f~+;2+G:+VF#VF#VF#7}@O,+%>+%>+%>+xp+xp+=w+=w+fD+=w+FD+fy+]k+=X#=X#=X#af#*m+Mn#ki+af#af#5f#*m+}w+py+py+Mn#]_+]_+]_+]_+:k+:k+=m+=m+RO@RO@RO@RO@RO@RO@RO@RO@mi+mi+mi+mi+]|+]|+h0#h0#Qg+Qg+Rn#Rn#,l#,l#,l#,l#-X#qq#[T#[T#sq#sq#;X#Ny#uq#uq#D7#D7#dt#w0#w0#u0#,6+,6+,6+,6+,6+wB#wB#wB#5V#5V#5V#>X#>X#>X#,X#,X#'|+%2+'|+'|+'|+'|+,|+,|+'X#'X#'X#'X#)X#)X#)X#!X#^l#bi#yf#yf#yf#yf#zf#zf#$G#K7#Fq#L7#Zy#C0#$I#CR#lt#lt#lt#lt#lt#lt#lt#lt#3T#3T#3T#3T#3T#3T#3T#6V#.5#~X#7V#6T#`4#8V#{X#aV#]X#9V#]X#0V#^X#aV#{X#/X#$5#@o#Fc#Df#Df#Fc#@o#Iq#@o#@o#Fc#Fc#&5#Df#Df#Df#*G#MB#bT#cV#dV#@O#OB#|w#|o#|o#/E#/E#/E#/E##O##O#$O#$O#/E#XL#XL#;G#FR#FR#&O#&O#-K#-K#XB#XB#,G#,G#,K#~K#ew#UP#WP#Vt#fT#HR#gV#gV#}o#[o#[o#hT#hT#`q#`q#`q#jT#jT#jT#hV#hV#hV#6w#6w#6w#6w#tt#tt#tt#tt#5T#6V#(X#`y#_X#_X#_X#_X#hV#hV#hV#6w#6w#;z#;z#J0#L7##5##5##5##5##5##5#Bf#:X#Bf#Dc#Cf#@8V ~~#Y:@}u Hv@}u V:@gG#fX#fX#fG#aP@&W@&W@1C 1C fG#fG#1C |C aP@>8 t! mt@/|@W~#/|@^|@^|@^|@;8@b~ b~ =8@-8@'8@,P O9 gX#hX#iX#9r jX#kX#lX#mX#nX#oX#pX#qX#rX#sX#tX#uX#vX#wX#xX#1l+u$.yX#a#.TW#zX#AX#!W+BX#CX#`( N*#Y' Bc Le Og qa O3 Ng P: P: .U#Le +U#{(#Le <) <) Le f< ](#=)# |##3#6~ l{ i1 q_ p0 x%@4)@DX#EX#o%+FX#8= )} af GX#x:.&U#j9 HX#K( IX#X[@JX#r9+A. 80+KX#%U.J; [y+7}.8}.|f.[y+z<.Ov+Ov+Rx.Rx.Rx.8}.8}.8}.,8+.F.>p..F.*; hS.@A.>p.hS.xM+,M+,M+=; hS.=; 6P.|f.|f.|f.|f.|f.|f.|f.|f.%U.%U.[y+[y+|f.J; J; J; %U.Ov+Yt.)> A_@ok.Ae+KE#ok.ZY ]$@,8+ / <>+(5.LX#}R.SC+[T.`P.MX#NX#a]+o>#OX#PX#i^#k1@(7@K&+Et+kV+h}@`8+IQ@XJ@QX#A;#kD#RX#SX#TX#;h#UX#VX#}A#WX#XX#~W#YX#ZX#:U#{W#`X#H|#|U#!W# Y#EQ#wP+.Y#+Y#@Y#wm+#Y#$Y#%Y#&Y#UQ#*Y#=Y#-Y#;Y#>Y#,Y#'Y#)Y#!Y#~Y#{Y#]Y#^Y#/Y#(Y#_Y#I~@/]@~!@'!@:Y#iW#uO@zH@+xb+dY#dY#eY#LU#Ol+&3@}9@0i@ 7@M<@M<@fY#OS#v~@5X+:o+oI+~P+~P+ay+Kl+(P+FD+-w+oy+Tn+Tn+Tn+@k+@k+@k+@k+K,@K,@Vv#Vv#Vv#Vv#6N#Vv#gY#:&@|R+|R+FD+FD+FD+FD+1V+z@@fD+fD+fD+fD+z@@Q0+b$@^_+;2+;2+O0+O0+O0+Zg+Tt+}]+^_+;2+;2+;2+^_+b$@M&+iD+6X+P0+}]+)k+)k+ji+WN#ji+s~@s~@qy+P0+LF@[o+[6+}6+}6+51@51@51@{V+,G+lI+VA+0y+T{@ep+ep+T{@WA+z@@fD+FD+|R+FD+fD+1V+y@@z@@y@@|$@|$@1V+z@@z@@uI+A$+6X+A$+A$+(T+ay+OK+ N+ay+(T++w+6X+6X+Jn+6X+Ll+s~@vb+vb+vb+ o+ o+)]+)]+Ll+Ll+6X+A$+A$++w++w+P0+Ob+.m+^/+^/+}T+_T+(T++w+tW#y$+hY#Um#iY#jY#kY#^t#L4#*(@J4#R;+UX.PX.Nu#&a@R]+,N.5P+dR.lY#oT.yW##i#eF.<7 yy Ne fp @(+=$#vK@mY#nY#M8#AW#oY#pY#qY#rY#=h vM.,v.O) +# }| 5[ m@ .^ .^ .^ p: Zl rS rS rS * * * * * * * * 5[ 5[ 5[ 5[ 5[ 5[ 5[ ,_ t& E) ,_ (* {D ph#|5+$B#M7.l5+':+rS C' (* w$ /= n6 B^.sY#tY#uY#vY#wY#xY#yY#zY#AY#m`+BY#dj+CY#TO.}%@DY#4@@PM.-$#6$ SO+EY#FY#GY#HY#6(#IY#JY#KY#LY#MY#NY#OY#PY#PV@QY#RY#79 2k 2k :)@s! T~#T~#CR@l$#<,@2k Zr N1 :} 'p ,p /,@@A@]|@/|@YA +W@h$#e>#An#,)#,)#9.# t#Xm@E0 {3 Ri [@@v/@SY#'{#ss@vD@IG#|3@0a@]3@(7@|w+j}@q8++5@nm+T{@A$+P0+b$@_T+_T+^_+/|+wp+qe#qe#Qn+/_+(|+(|+Q0+vr+vr+Kl+Kl+}R+OK+OK+ur+TY#/i#/i#/i#5f#*m+Mn#Mn#*m+*m+*m+WN#py+py+py+py+=m+:k+:k+:k+:k+=m+RO@}&@RO@RO@RO@=m+=m+=m+:k+:k+b[+b[+b[+b[+g0#g0#Qg+Qg+Qg+Qg+Rn#Rn#,l#,l#,l#,l#-X#-X#[T#[T#sq#sq#Ny#Ny#uq#D7#D7#D7#w0#w0#v0#v0#)E#)E#)E#)E#)E#UY#UY#Sy#Wy#Wy#Wy#!X#!X#VY#ci#,X#'|+%2+'|+'|+'|+'|+,|+,|+'X#'X#'X#'X#)X#)X#)X#!X#ci#DB#yf#yf#yf#EB#zf#zf#Fq#Fq#L7#L7#C0#C0#IB#$I#(w#(w#lt#4T#4T#lt#(w#(w#4T#4T#4T#4T#4T#4T#4T#5T#WY#.5#.5#7V#`4#{X#{X#^X#]X#]X#]X#^X#^X#{X#{X#/X#Bf#@o#@o#Fc#Fc#@o#@o#%5#%5#%5#@o#Fc#&5#Df#Df#Df#*G#MB#+O#bT#@O#PB#OB#5w#}o#}o#/z#/z#/z#/z#TP#TP#$O#$O#/z#/E#/E#XL#%O#ER#-K#-K#;K#=I#XY#XY#YY#YY#ZY#ZY#)u#)u#VP#VP#aw#aw#_2#_2#hT#St#St#St#hV#hV#jT#hV#hV#hV#6w#6w#tt#tt#6w#tt#tt#tt#st#st#st#st#Zy#Zy#HB#`y#_X#_X#`y#`y#6w#6w#6w#6w#tt#tt#st#)M#lV#7V# 5#7V# 5#7V#7V##5#`Y#J7#L7#J7#'M# Z#'M#J7##5#:X#{X#{X#{X#aV#}X#mV#.Z#2X#2X#2X#+Z#@Z##Z#$Z#%Z#WY#.o#&Z#rT#*Z#=Z#-Z#2(@S;@+q+Dq@ N@;Z#kc@>Z#,Z#@ +R2@'Z#)Z#!Z#~Z#_V#)Q+4O.0T@ U@{Z#&W@H~ H~ gG#fX#aY yz#gG#|C aP@aP@1C 1C fG#1C |C aP@cK# <@+~ u! u! u! 1r@W~#/|@/|@-8@>8@>8@]Z#HN ^Z#/Z#B_#f8 9r (Z#_Z#:Z#+IW+hZ#BS+BS+Ve 8K+K} iZ#dU+uK#l1.jZ#Hr#kZ#V{ lZ#mZ#nZ#3. )&+7}.J; |f.z<.z<.[y+J; 8}.Ov+Ov+Rx.Rx.Rx.8}.8}.90+0d..F.>p.@A.hS.hS.@A.Ys.*; =; ,M+xM+hS.*; hS.xM+[y+[y+[y+[y+[y+[y+[y+[y+%U.%U.%U.[y+[y+[y+[y+|f.%U.Ov+Yt.)> A_@ok.Ae+KE#ok.ZY q9+,8+[| /X+oZ#pZ#qZ#rZ#sZ#sj@tZ#uZ#4F.5w+5h#]B+FI+vZ#bm@$q+O&+Qi+h}@ 9+XJ@vH@wZ#<=#kD#SA#SX#xZ#yZ#zZ#AZ#BZ#CZ#DZ#~W#YX#ZX#ZX#EZ#`X#H|#FZ#RM#GZ#ZI#HZ#9+@+e+HQ#IZ#JZ#KZ#LZ#MZ#NZ#4W#OZ#PZ#QZ#RZ#D` SZ#TZ#UZ#VZ#WZ#XZ#YZ#X=@pU#]Y+BS#['@!!@c4+:Y#qM@Wu#ZZ#zH@pF@`Z# `#.`#+`#2g@2Y#@`##`#$`#%`#6Y#yb#-(@O,@_w+[P+$N+I@@8$@8$@8$@8$@^K@^K@^K@^K@8$@<^#ly+ly+<^#8$@cB@R,+gX+mZ@mZ@{^#gX@DA#^N#yA#nZ@gX+YK+R)@cB@8$@CD+YK+4G+4G+4G+4G+4G+4G+4G+4G+4G+4G+4G+4G+4G+4G+4G+2R+2R+4G+4G+4G+4G+YK+YK+!K@!K@w;@w;@x;@x;@x;@cB@lX+9G+;B+/w+;m+&R#eD+$E+~R@HS#&`#4<+HG.CO..(+tK 9F#0F#!4 6u P( *`#pK.xM+1x.1x.UH.UH.y'@T/@,S+):+;q.z<.z<.z<.z<.z<.z<.z<.8}.7}.7}.z<. Z Y% ", "@n @n @n @n @n @n @n @n +n +n +n .n .n n n dd dd g~ E7 E7 7c 9c 9c 9c 7c E7 g~ g~ E7 7c vk F7 7& j& C) r(+2>+=`#-`#;`#>`#Ta ,`#'`#|m+)`#dk+!`#~`# F> Q1 Q1 +' VH _,@_,@+L@(7 @~ WA ')#))#8q#8q#y`#Ev@$~ d1#g1#|m }Q@.;@D2 xi+7j#z`#A`#B`#D)@;c@R.+ry+M,@pk+M)@A$+fp+'G+~G+gp+#w+~P+:V+)B+P0+u)+/_+c[+c[+c[+xp+xp+Kl+}R+OK+tI+XA#C`#D`#D`#D`#jc@=m+E`#VN#F`#VN#VN#|+>|+L`#L`#L`#L`#tT#tT#tT#VY#M`#di#EB#EB#EB#EB#zf#zf#J7#J7#Fq#K7#IB#IB#IB#IB#N`#(w#lt#4T#4T#lt#(w#N`#lt#lt#lt#lt#lt#lt#lt#O`#WY#WY#H7#lV#I7#`Y#P`#P`#Q`#Q`#Q`#P`#P`#`Y#`Y#R`#@5#@o#%5#%5#%5#%5#@o#Fc#Iq#%5#%5#@o#Fc#&5#Df#Hc#Pt#Pt#MB#MB#5w#5w#5w#OB#hT#hT#&8#&8#&8#&8#SB#SB#$O#fV#/E#/E#XL#XL#%O#%O#;K#=I#=I#[z#YY#S`#T`#T`#U`#U`#V`#V`#W`#W`#X`#X`#(2#(2#St#iT#hV#6w#{O#{O#hV#6w#6w#6w#tt#tt#st#st#tt#tt#tt#st#st#ot#ot#ot#pt#!2#M7#Ct#Ct#Ct#Y`#Y`#HB#HB#HB#$K#Z`#Z`#nt#Zy#``#Y4# $``# $``#``#H7#. $(X#5T#6V#,M#,M#3T#5T#Dc#_l#8V#aV#aV#8T#+ $rT#nV#9X#9X#9X#@ $@Z##Z#$Z#.o#zf#zf#Dc#~X#+ $@2#*Z## $$ $% $& $* $= $- $$R#; $6v#Cb#> $n~+O:+, $}-+[`##Y.' $#i#) $JE+Lf Pe aY 4C ;{ aY 0Y 1C 1C fG#fG#fG#fG#1C |C aP@&W@H~ (t {J 6h ! $%E }r@yK yK #~ @W@~ $)P { $] $^ $jt@5k / $( $hs c[@_ $hs : $KY#TD#< $[ $} $| $1 $2 $3 $4 $5 $6 $7 $8 $9 $tX#0 $a $25+b $Zn c $1t 1[ !< >> Rj R-@R-@R-@R-@P3 Qh >> ZV#e< ZV#f< f< f< ZV#](#.|#/*@S3#6~ wU+l{ Pc 1: y-.3=.F3 Qf CS+`j $M Ve 8K+8= aj.o`+d $^^.Hr#e $:^@f $#w :^@D{@B{ h+ Rx.P] Rx.7}.J; P] Ov+Ov+Ov+Rx.Rx.Rx.8}.8}.90+0d..F..F.@A.hS.hS..F.Ys.@A.hS.=; =; *; @A.*; =; %U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.Ov+Ov+Ov+%U.Ov+Yt.)> A_@ok.Ae+KE#C! ZY q9+0d.+s.j~@oZ#V~ g $h $i $%I.j+#j $4I.LD+[V#6_#k $e^#l $G)@jm+01@Oi+*x@/:@hM@<=#V%#kD#hF#SX#TX#m $n $RK#o $p $BZ#q $C(#ZX#ZX#EZ#`X#H|#FZ#0S#QO#r $s $t $u $v $w $x $y $jo+z $A $B $C $qY+D $E $F $G $H $I $J $K $L $M $N $O $P $]]@F^@SJ@62+P(# ~#vO@Q $ZZ#R $qD@jq@S $T $U $.a@@`#V $W $%`#mD#yb#-(@J@@_w+$N+Gn+mq@mq@mq@^K@^K@^K@^K@^K@8$@I@@<^#ly+ly+<^#I@@H@@R,+gX+M+#M+#{^#gX@DA#zA#yA#nZ@gX+YK+8G+H@@I@@<^#2 @5&@5&@5&@5&@5&@5&@5&@4G+4G+4G+4G+4G+4G+4G+4G+CI+CI+5&@5&@5&@5&@2 @2 @w;@R)@R)@R)@cB@cB@H@@H@@lX+9G+;B+/w+;m+&R#eD+$E+~R@X $H~+AG.0I.$3 R_+fp 9F#!4 !4 Y $*| Z $;b#=; +` $ .$..$>`#+.$@.$:U+#.$$.$%.$&.$*.$=.$~M#-.$N@+']+Y1+o:+;.$>.$ _+._+Lg+,.$'.$`6@`6@3}@hc@:a@/a@1}@ip+Mn+q;@U_@b$@R0+vr+@k+@k+sp+sp+sp+sp+Yn+fy+fy+fy+K,@K,@Vv#Vv#Vv#Vv#Vv#Vv#Aq@Aq@fh#fh#:x@:x@:x@K,@PK+Kl+K,@7X+7X+ N+}R+ay+U_@Mb+U_@N0+gK@Zg+]G+Zg+b$@^_+P0+O0+P0+}]+ur+VH@G)@ep++w+R0+_T+/|+%4+HZ@!k+'k+)]+n0+YM@T{@6X+ep+*4+p8+p8+p8+}6+{V+,G+Dt+&I@lI+In+In+W1+W1+In+T{@W1+In+0y+uI+PK+uI+WA+T{@PK+WA+T{@0y+PK+(P+(P+Kl+ay+(T++w+6X+6X+A$+(T+ay+ay+b$@qy+B$+X1+X1+B$+YM@8d+8d+8d+ o+vb+,k+Zg+Zg+Ll+Ll+6X+A$+A$++w++w++w+f~+vp+Q0+Q0+b$@+w+A$+6X+!B+!B+y$+ze@ci@/t#).$8$@rd+<`#UK+S;+d$@!.$Tb+ek@>9@3|+!U+WJ.~.$PR.{.$Nq kB@.s ZZ 4q ZZ kB@=W@-K.xz#].$^.$/.$(.$_.$:.$<.$[.$!5 ;:+ZY }# {+ }| m@ 5[ og og og p: *L UV p: * * * * * * * * 5[ ac ac ac ac ac ac 5[ :] 5[ 5[ si si ':+(s.(s.{t.{b+Zl $| U0 E) P6 I{ ww.4> }.$|.$1.$2.$3.$4.$5.$6.$7.$-A+Lk c{@cj+4s 8.$d,@9.$W: Nz tK [: B0 :0 79 0.$a.$b.$c.$Lv#d.$e.$f.$uj#g.$h.$NC i.$|+;|+>|+>|+>|+>|+L`#L`#tT#tT#tT#tT#X4#X4#X4#ci#di#di#EB#EB#EB#EB#zf#Cc#'M#R`#Fq#~E#$I#$I#C0#Zy#x.$N`#lt#4T#4T#lt#N`#x.$(w#(w#(w#(w#(w#(w#(w#(w#y.$WY#H7#lV#I7#`Y#P`#P`#Q`#Q`#Q`#P`#P`#`Y#`Y#R`#+S.$I+@T.$U.$Xm+Ao+L_#gs#.(+Q9 Q9 I0 Ui ,! Md wa fG#fG#fG#S:@G0 EN#%W@+~ (t (t /t 5F %A@Yk@}A }A #~ @W@V.$W.$X.$Y.$)P zK $l _0 8B *|@Z.$`.$ +$.+$( $++$@+$#+$$+$%+$&+$*+$=+$-+$]V#;+$8@#>+$,+$'+$)+$!+$~+${+$sJ [.#]+$u' >> >3 Kc _)@u[ P3 Sj w' Kc Q3 r[ ](#^+$f< r[ ZV#i_ ud#.|#Gh 6~ 9j#wU+l{ !y Pc p0 w7 WY+Qc /+$Vy Sd %I+hF+rF+rF+ D+gW+(+$_+$Y! 0|#:+$+v <9#<9#<9#'+ h*.vY+Pj+0d.iy.YQ.%U.Ov+Ov+Rx.)> )> {! Yt.8}.90+.F..F.*; =; hS..F.+s..F.*; =; hS.@A..F.*; hS.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+[y+%U.%U.Ov+Ov+Rx.8}.8}.%U.Ov+8}.)> ]$@jy.U/@)> Ai. Z wY+2q@#G+<+$Wc+[+$}+$pm#|+$1+$zQ@2+$3+$@ +]B+Kn#4+$5+$`M@>'@G4@X<@@;k#)9+qH@uO@B+$2'#C+$O6#O6#(z@D+$)c@!i@;i@(c@W5+$`##7@mD#Px#s<@b~@J@@Y.@$N+f^@E+$E+$Tm#mq@mq@^K@^K@8$@8$@;B+/w+:|+:|+/w+;B+3 @5G+2R+4Z+M+#nZ@7V@{^#yA#M+#4Z+gX+4G+5G+X.@CD+[|+5&@CI+CI+CI+5&@5&@5&@5&@4G+4G+4G+4G+4G+4G+4G+4G+5&@5&@5&@5&@5&@2 @2 @R)@R)@R)@8G+cB@H@@H@@8$@I@@mq@^K@8V@(w+;m+&R#'v@7e@X @F+$y*+fT.A(@10 Vj ({+Y4 !4 !4 G+$<$ H+$>b#,8+90+90+S|@$U.S|@;e@PQ.)L.z<.z<.z<.z<.z<.z<.z<.z<.Y% Z Z Z Z Z ", "U5 $~..h.vk vk .h.$~.N6 $~.vk +h.+h.vk $~.sk IO.K6 UD+xn.ie le E7 dd x5 >' >' 9& Q% Q% W+ u& yT.I+$-g@!* Ym a-+J+$K+$P! L+$M+$N+$O+$P+$Q+$R+$S+$T+$C)+U+$4]+_f+'-+dY#K0+V+$>:#>:#([+([+p:+q:+W+$'.$$}#:C#:C#J<@1(@Nn+#/+nD+8X+Tt+Yn+^/+Ob+/|+&m+RO@}&@}&@X+$XN#XN#`n+Y+$o;@(P+uI+uI+PK+(P+:x@z@@fD+fD+FD+(P+K,@ N+7X+OK+OK+OK+tI+tI+tI+tI+@w+/P+[T+gp+{G+#w+)B+#w+gK@Ft+U_@+w+P0++w+P0+WA+WA+ep+|$@WA+z@@PK+xp+Q0+/_+f~+/_+f~+y@@WA+y@@WA+y@@5T+)-+N@+N@+)-+/_+O,+m0+o8+n0+X1+iV+iV+X1+B$+YM@G)@M&+M&+G)@iD+6X+A$++w+(T++w+A$+A$++w+ay+OK+7X+}R+}R+ay+ay+(T++w+P0+P0+Ll+Zg+s~@s~@)]+t)+t)+8d+w'#Jp#Z;#Z;#HZ@HZ@HZ@=:@`g+/f+u)+f~+Q0+Q0+PK+PK+z$+!B+WA+T{@T{@T{@T{@T{@WA+WA+uI+1V+z@@z@@z@@Il+'}@> +L4#9V@Rb+u4#eZ.||+Z+$;i#9M@`+$ @$.@$3c#5e+;n#9v J4@aj |##|/ }/ -l J4@{*@OU.@6#dW.KP#+E#+@$@@$S )]./w.;q./. C `Y ll..o =5 u% =] -h fL.=] 5[ :] :] :] :] :] K> K> l* 5! 2{ 2{ 5! 4{ H{ 24 l. l. l. l. l.w4.si og p] zm.<9.61 I{ [I [I #@$$@$%@$&@$*@$=@$-@$-@$;@$'A+;A+Gx+@D+_A+dF+1~ GS+(9#>@$,@$v, !d@BN Oh _g 3n 4n 4n x' E> 4##e2 Fm '@$)r@)@$)@$!@$!A V~#V^#ds rG fP@EN ~@${@$]@$Sk#VE -[ p| N1 ^1 }m {J tI@tI@! $]J Y:@;! +9 +9 EN#')#(7 ;! _,@S-@t) aj An@0F@^@$/@$3m+T(+EZ@Cq@r=@wp+`g+h @Zg+;2+^_+;2+O0+^_+^_+^_+O0+s~@=:@/|+Yn+%>+%>+/_+xp+fy+.B+o;@-:#-:#oe#oe#[a@`M+u=@]P+jc@:k+&l#:k+bf#}&@/k+si+1P#[]+Qn#]_+Mn#=m+*m+}&@TY#r.$|&@Cy#2$@ZA+YA+/+@/+@zy#zy#kc#Dy#Dy#cc#(@$oB#_@$zy#.w#cc#cc#(@$1f#nB#Rn#hf#>f+>6+>6+LL#tB#'E#X3+:@$u.$<@$Oy#Oy#[@$}@$|@$1@$2@$sf#sf#3@$4@$Wn#et#Sy#OP#OP#OP#OP#OP#OP#VY#!X#!X#!X#Xy#Xy# O#OP#,X#>X#Wy#Sy#OP#Xy#^l#ci#7T#qT#~X#J`#.o#G7#G7#5@$EB#di#Af#Af#Af#_l##5##5#Fq#Fq#Fq#Fq#C0#C0#C0#C0#mt#mt#mt#6@$6@$7@$7@$7@$mt#mt#nt#nt#Z`#Z`#Z`#nT#IB#C0#Zy#HB#`y#_X#_X#_X#`y#`y#`y#HB#HB#$K#$K#J7#$5#@o#&5#Fc#@o#@o#&5#Hc#Df#Fc#%5#Iq#Iq#@o#&5#Gc#^E#^E#6w#iT#St#St#hT#hT#;z#iT#hT#[o#}o#[o#hT#(2#<2#<2#gT#gT#eT#eT#eT#8@$gT#fT#gT#9@$9@$9@$9@$9@$0@$D.$W`#E.$a@$]5#/5#(2#iT#iT#hV#hV#hV#hV#^K#^K#st#{E#;z#[o#}o#]z#+z#]z#;z#;z#;z#;z#;z#;z#;z#tt#HB#HB#(X#HB#(X#HB#(X#(X#(X#b@$b@$b@$b@$b@$c@$c@$6V#6V#d@$6V#e@$I7#I7#I7#Q`#^X#^X#{X#`4#`4#7V#6T#6T#mV#mV#mV#mV#mV#mV#mV#f@$g@$}X#g@$f@$|X#h@$i@$j@$CR#k@$B0#B0#B0#B0#G7#l@$&Z#}X#}X#&Z#m@$m@$n@$o@$p@$q@$r@$s@$t@$u@$H@+v@$1<+w@$x@$y@$z@$A@$B@$v8+di *y t$#|##.^+A%@Bm 8_@~)#_7 QT@d1#j[#^Q#C@$+~ .<@X:@>b@7G@7G@D@$D@$D@$+n@#~ b~ -8@~8@{8@{8@yK 7`@.n@ n@{J ~J 1j |)@1,@E@$F@$G@$.f#H@$I@$ar OF#pW+vW+J@$QY+PF#K@$L@$p4 oW+M@$[k@N@$p4 hB#Hd >> O@$M1 X-@Yq .r Yq p| 46 4 ~1 ^+$O^#P@$Q@$td#E~ j'#j'#W!@l{ l} &{ Q| wU+{y 2q &M 2q 1q jb &;@b3 LY+CF@CT 4V 6f jU+R@$Rt S@$T@$U@$V@$^M+0Q+W@$V0 ;j ]D Ss.2G.`'+@A.w$ 7}.Ov+5A.Lh++d+X@$Y@$y{ Pj+5H.5H.5H.hy.hy.!:+!:+hy.2q@ER xF 2q@7x.^Z.`'+Rx.Ov+[y+%U.Rx.8}.Ov+%U.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+*0+4H.2<@UH.Ov+%U.2^ 80+eX.^Z.Kj.ag.{[.Z@$9(+`@$ #$.#$+#$iH@Ku@BU.sc@JL#@#$kq###$+I@^u+&5@|g@$#$4B@%#$&#$R]#u<#*#$*#$=#$B|#-#$;#$;#$PG#>#$,#$'#$)#$s|#o3#!#$O]#~#$Am#{#$]#$pA#_W#^#$/#$(#$_#$:#$<#$[#$5M }#$4W#|#$1#$2#$EQ 3#$4#$5#$6#$7#$8#$9#$0#$a#$eN+PX+-#@b#$c#$[L+d#$e#$f#$f#$g#$h#$i#$,x@iq@hq@Pd+dm+am+>'@Mx#a~@a~@y;@X{@6T+_w+;B+*>+0G+Tm#Tm#j#$Tm#Tm#Tm#k#$k#$;B+[P+[P+[P+B@@T.@yD+zD+T,@7=@7=@3G+3G+}V+}V+}V+[ @}V+}V+BI+BI+VK+VK+UK+l#$l#$o7#o7#}V+BI+BI+VK+[V+[V+[V+[V+=>+=>+=>+=>+zI+:P+kX+v;@m#$S,@|V+Q)@3 @9G+lX+R,@R,@P)@O)@8&@ae#lb#n#$;v@S.+2V#6y+,%@o#$p#$q#$r#$bF.m9+Ui Ld hQ fQ `Q@gQ#=8.s#$t#$}f.=L 13+)> Yt.i~ +$+nA+.d+z<.z<.z<.z<.z<.z<.z<.z<.8}.8}.8}.8}.8}.8}.", "U5 $~..h.vk .h..h.$~.$~.$~..h..h..h..h.$~.tk HO.XD+VD+K6 le le 7c g~ L_ L_ 9& 9& d+ U+ }. V+ +) u#$0g@SK.Ym 7c@J+$v#$w#$x#$M+$y#$z#$A#$h! m]+B#$C#$D#$A)+9V@n;@7}@1P#K0+k8+E#$#|+#|+F#$G#$K0+H#$I#$RR#RR#;k+ @#Xl+ir+ir+-2+_k+=m+~k+St+kr+)k+=m+V4@V4@V4@}&@}&@XN#XN#Y+$o;@(P+PK+1V+z@@FD+|R+fD+fD+fD+FD+(P+K,@ N+ N+OK+OK+tI+tI+/P+/P+/P+/P+{P+ZM+Ht+Ht+dr+dr+#w+~G+Ft+Ft++w++w++w++w+WA+WA+|$@4X+y@@z@@z@@1V+y@@4X+y@@y@@y@@y@@y@@y@@y@@y@@v)+)-+(f+(f+/_+/_+O,+m0+o8+o8+X1+iV+X1+X1+jD+SA+br+br+br+br+G)@iD+6X+A$+ay+(T++w+A$++w+(T+}R+OK+ay+(T+(T+(T+(T++w+P0+P0+O0+Zg+,k+,k+vb+ o+ o+7d+Z;#J#$o/#o/#Zl+Yl+Yl+Yl+2Z+2Z+/_+/_+/_+(|+1V+1V+`M@`M@pk+M,@M,@M,@0y+0y+f~+f~+Q0+Q0+Ob+Ob+Ob+lr+_f+$t@3]+ib#H$++@#Z.+cN#K#$Z+$L#$M#$N#$;W+eR.RP.2v@aG#}L.t$#!4+!4+0_@0_@aj 9v qB.,N+R$+`D.*{#O#$#{#P#$S@ -) S|@@% G$ >5 [].Hs ac ed ;b.a, w4.ed K> :] :] :] :] :] K> K> G{ 4{ [4 [4 W5 Q6 X5 i@+0H.0H.0H.aH. l.{_ ac 5[ j$ cc ZQ := !I.}I wJ Q#$R#$S#$T#$U#$V#$W#$X#$Y#$3M+Z#$]@@`#$0F+AO+ $$.$$tK#iQ#., <@@f[@v' H; xu y6 +$$ G> :)@V^#@$$#$$)r@$$$%$$!A &$$W^#sG s[@n$#k$#-S W7@*$$oI#-{ ;[ S-@3' 3' n@#! $!A !A U~#%E ]J Y:@+9 aP@+9 ]|@(,@V-@t/@=l =$$IR@$`.-$$;$$B2@)V+EZ@Ce@`l+HZ@'k+=:@HZ@=:@jr+lp+jr+'k+jr+lp+lp+jr+=:@=:@lp+St+%>+/_+(|+xp+fy+.B+o;@-:#o;@o;@p;@p;@jc@jc@jc@`+#]/+=m+:k+RO@}&@}&@:k+si+[]+]_+]_+:k+=m+RO@}&@TY#1&@1&@Cy##l#By#2&@oB#oB#Dy#Dy#>$$(@$! yz#~)#))#/M j[#Kz {M &W@eP@Z:@>b@:C@+n@+n@cB D@$D@$}A :|@}|@1|@~8@a$$b$$c$$d$$^M ^M xK {J m@#e$$(0 %c Pf@(Z#(Z#Lv#f$$83 g$$h$$i$$j$$hB#k$$vI@l$$:_@(m+m$$JC n$$o$$Si m| (} 8j#U-@Sr V-@Yq Qw#46 XD#UE p$$Q@$Q@$td#q$$>2 >2 zf W!@l{ l} Ba#wU+W!@4^ *M 4^ W!@&{ c; ,@$e$#Yz#r$$JY+mW+NM@bS+s$$t$$fQ+u$$6t+yY+>d >d v$$w$$`J+zM s|.cX.x$$#v z<.%U.y$$Lh+Eo+mq+z$$^b+Ov+7x.7x.7x.5H.5H.hy.hy.5H.},+xF }c.^Z.7x.^Z.)J.Rx.Ov+[y+%U.Rx.8}.Ov+%U.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+wY+.$+4H.90+,8+Pj+qK.Tx.j; b(+H7 W_.A$$CJ B$$C$$D$$E$$8e dD@n6@[W.GM@Rb+'T@6Z+ N@{u+]7@;i@S $F$$G$$H$$I$$J$$R]#R]#K$$L$$Z!#M$$;#$N$$O$$P$$'#$Q$$R$$S$$T$$U$$P]#V$$9p#W$$1D#X$$Y$$Z$$`$$ %$.%$+%$@%$#%$$%$%%$&%$*%$=%$-%$;%$>%$,%$'%$)%$!%$~%${%$]%$6F#^%$Zd+/%$(%$_%$:%$<%$[%$}%$f#$2'#|%$X!#1%$hq@lk+Vp+1h+N3+,]@M,@ry+N)@wr+X{@6T+_w+;B+*>+^K@6&@2%$2%$6&@6&@6&@mq@>B+;B+$N+3T+3T+B@@3%$80#*B+< @:P+:P+:P+3G+3G+3G+7=@}V+}V+4%$:/#:/#5%$J4#J4#6%$6%$4%$4%$:/#:/#BI+BI+[V+[V+[V+[V+=>+=>+=>+=>+=>+:P+T,@v;@S,@S,@s;@Q)@9G+lX+P)@P)@t<@O)@4 @4e@7%$8%$9%$;7@}a@lK@*E#[g@ws@0%$2F.a%$(Q..(+Md :t u*@K| JM@b%$ k@c%$d%$-V@=L 13+)> Yt.yj+d> nA+.d+,v.z<.z<.z<.z<.z<.z<.z<.8}.8}.8}.8}.8}.8}.", "N6 $~..h..h..h.$~.$~.$~.$~.N6 N6 N6 N6 $~.tk Qw.IO.K6 IO.ke he 9c E7 6c 6c Q% 9& d+ d+ d+ S% &j.i..E+.0J.hO.7c@DU#e%$f%$f! M+$g%$h%$i%$`) j%$n]+k%$D#$UX.~M#n;@7}@2P#nd+^6+l%$k8+k8+G#$Jb+nd+8[+m%$RR#RR#TR#YN#lc#3&@ir+$4+_k+:k+!k+!k+kr+)k+:k+{/+1$@1$@RO@RO@I6@e0#-:#o;@(P+PK+z@@z@@FD+|R+fD+fD+fD+FD+(P+K,@ N+ N+}R+}R+@w+@w+Gt+/P+/P+/P+sI+ZM+oI+oI+nI+nI+gp+!G+Ft+Ft++w++w++w++w+WA+WA+y@@y@@1V+1V+1V+y@@4X+|$@y@@y@@y@@y@@y@@y@@y@@y@@oy+1]+(f+(f+/_+/_+<6+lZ+):@o8+B$+X1+X1+X1+jD+SA+br+$s+$s+$s+br+G)@iD+Jn+ay+ay+(T++w+A$+A$++w++w+A$+A$+A$++w++w++w+P0+b$@O0+O0+%4+,k+,k+,k+vb+HZ@v'#o/#Yl+Yl+`l+`l+wp+wp+(|+(|+(|+/_+y@@y@@y@@y@@=K@Mx#mm+Dq@mm+mm+A$++w+P0+P0+P0+b$@^_+}]+}]+lr+Pb+4T+$N+f^@g[+h[+n%$cN#K#$z1#L#$o%$0]@p%$$Y.83@2v@3v@*y bG#~0@aj OW@~d@t'+!4+*y qB.R$+!%@&N@j>@q%$8.$r%$t+ s%$LN.F. }| Xl 34 b, Hs O9.O9.;b.=5 K> :] :] :] :] :] K> K> H{ H{ Q6 Q6 4z 4z R6 i@+0H.0H.0H.aH. l.{_ ac 5[ !. hd [U |* t%$[I ;L vJ u%$v%$w%$x%$y%$z%$A%$B%$C%$2M+Lk oF+eM+g4 D%$ha E%$., m: Me f[@v6 W1@v6 F%$G%$Qv 'J 7r @y H%$+y I%$J%$@$$K%$i.#&$$V~#W^#rG s[@n$#;S L%$M%$N%$oI#Ui If ,J 2k 2k l@#&$$e.#h.#i.#tI@/t y, y, +9 +9 va V-@'8 $y +/@O%$P%$,t@~5@Q%$ha@cY#^+@R%$ m+jr+'k+,k+vb+,k+-m+)k+-m+%4+-m+)k+!k+-m+,k+,k+-m+St+/_+/_+(|+=w+fy+.B+o;@-:#VH@ur+eK@eK@}G+}G+^G+t&@60#RO@:k+:k+RO@TY#}&@RO@]_+]_+:k+=m+RO@}&@}&@}&@1&@1&@Cy#Cy#ic#By#cc#cc#W1#oB#Tn#Tn#rq#!+=&$Vm#-&$r=#AQ@#$#u@+(B+gx@.#+^N.f=@O2+l8 u/@;{ WC@]C@lI@|C aP@&W@.<@r[@:C@+n@$L@2`@2`@;&$>&$#W@'8@'8@'8@a$$a$$a$$(Y@yK yK *8@^t 9q Fn ,&$,&$'&$)&$!&$~&${&$6> 7|+6> 7|+6> ]&$5_+^&$/&$(&$ q _&$ q ~|@Hf R1 46 46 Qw#R} Sr ,8 ,8 T-@Q} 46 XD#UE :&$p$$td#}i 4^ H5 H5 zf W!@l{ wU+wU+W!@H5 *M dp >2 l{ uU+CW+II#() MY+LY+<&$2_@NM@[&$N/ }&$|&$1&$6t+[j 'G.,0 =~.G#@`J+!O cX.pK.@A.z<.[y+|m.Lh+vv+2&$@d+3&$Rx.0d.0d.,8+,8+Pj+Pj+Pj+,8++$N+$N+3T+B@@T.@80#xI+1G+x)+=>+=>+:P+T,@7=@wp#}V+}V+}V+BI+:/#5%$5%$5%$5%$5%$5%$5%$BI+BI+BI+BI+[V+[V+=>+=>+=>+=>++=>+2T+|V+|V+|V+s;@Q)@>B+P)@P)@P)@O)@4 @my+ci@8%$P&$Q&$8m@|a@RA++N@|x#R&$S&$T&$a%$C;@t[@Oe ;z P#@&P ()@U&$.k@c%$V&$Js =L 13+)> Yt.yj+d> nA+.d+,v.z<.z<.z<.z<.z<.z<.z<.8}.8}.8}.8}.8}.8}.", "$~.$~.$~.$~.$~.$~.$~..h.$~.U5 $5 $5 U5 $~..h.he HO.IO.HO.he he 8c 7c ,' ,' Q% Q% d+ =+ =+ ~& &j.0g@jf WU+hO.`# ak+W&$X&$&t+Y&$g%$h%$i%$Z&$`&$ *$.*$:-+@@#;[+U;+!7@Cg+~_++*$J0+k8+@*$#*$nd+nd+X1#SR#SR#X1# @#YN#lc#/+@Xg+Xg+-2+]_+]_+)k+)k+)k+]_+{/+{/+{/+=m+=m+I6@I6@-:#o;@(P+Kl+z@@fD+FD+FD+FD+FD+FD+FD+(P+(P+OK+OK+ay+ay+@w+@w+Gt+Gt+/P+/P+ZM+oI+oI+ZM+Gt+nI+gp+lm+Ft+Ft++w++w++w++w+WA+WA+z@@z@@1V+1V+y@@4X+4X+|$@y@@y@@y@@y@@y@@y@@y@@y@@sr+v)+)-+)-+/_+/_+<6+lZ+&4+):@B$+X1+X1+X1+jD+jD+M&+M&+br+br+M&+G)@iD+Jn+}R+ay+(T++w+A$+6X+Jn+Jn+Jn+Jn+Jn+6X+A$++w+P0+P0+O0+O0+%4+%4+%4+%4+%4+%4+n=#Y;#Yl+`l+`l+ub+2Z+2Z+xp+xp+(|+(|+y@@4X+4X+M,@':@':@Dq@Dq@Dq@LF@+w+(T+qy+qy+P0+P0+^_+^_+}]+Ob+v)+wD+ K> 34 34.O9.{_ o3 K> :] :] :] :] :] K> K> $w 24 X5 X5 X5 R6 R6 i@+0H.&*$&*$0H.aH. l.{_ ac fd oh ec P6 I{ b* >b.TS.**$=*$-*$;*$>*$,*$'*$'*$C%$)*$pF+!*$`H.D%$~*$gb vd#)< V' Hf :f v6 {*${*$F%$lp Cm 'J ]*$^*$H%$cs 5;#/*$(*$(*$U^#j@#j@#;E es )M HT 9V [M#_*$:*$cq#{Z#iQ CN Cm @, <*$T^#g.#f.#h.#sI@! $_t y, va ZA ~~# X >f#N+t'@ w*@r*$r*$@r Gd O3 Sj Qw#46 Qw#T-@Sr va va V-@U-@Q} (} YD#UE :&$td#&@.dp dp 4^ H5 >2 W!@vU+wU+vU+H5 dp *M 4^ zf EW+CW+^| `z#`z#s*$G+$t*$u*$v*$D_ l%@eQ+5t+1&$m-.[j !F %A#=~.)M+q6 ;) =; ;b#0d.[y+Ea+9Y+w*$x*$X@$y*$Yt.90+8}.0d.Rx.,8+Ov+,8+8}.=$,=$'=$)=$!=$K|#:h#J&@(%$F #M&$_%$~=$Zr#{=$f#$]=$6e#xF@Z8+em+c1@K2@Xp+Yp+#q+28+mm+!B+d^@d^@b~@0$@K@@K@@9$@EM@^=$EM@EM@8$@8$@8$@*>+*>+P,+$N+[P+B@@B@@3%$xI+Gn+>T@zI+=>+:P+T,@wp#wp#[V+BI+BI+BI+:/#:/#:/#:/#K4#K4#wW#wW#VK+BI+BI+}V+[V+[V+=>+=>+=>+=>++=>+Q,+2T+2T+2T+Q)@Q)@R,@P)@P)@>B+4 @my+_w+e^@S6#/=$tW#l $lc@kK@WO@X @Me@(=$_=$~#+]N. E#Mf :g Y' x8+L| , t#$c%$d%$Ks =L 13+)> Yt.yj+d> nA+.d+,v.z<.z<.z<.z<.z<.z<.z<.8}.8}.8}.8}.8}.8}.", "$~.$~.$~.$~.$~.$~.$~..h.$~.U5 $5 $5 U5 $~..h.he le ie le he he 8c 7c ,' ,' Q% Q% 9& U% U% ~& yT.0g@yT.L= e3+Z# ak+:=$<=$$t+Y&$g%$h%$[=$}=$.2@|=$pz#4)#9)#(K@M@@a9@Y6@n8++*$J0+k8+Eb+Jb+nd+nd+YN#1=$TR#TR# @# @#Xl+ir+Xg+Xg+$4+si+[]+)k+)k+!k+]_+{/+{/+{/+=m+=m+I6@I6@o;@VH@(P+(P+fD+fD+fD+fD+FD+FD+FD+FD+(P+(P+OK+OK+(T+(T++m0+u)+&4+YM@B$+X1+X1+jD+jD+iD+iD+G)@G)@G)@iD+Jn+6X+ay+(T+(T++w+6X+Jn+iD+G)@G)@G)@iD+Jn+Jn+6X+qy+qy+O0+O0+%4+%4+%4+%4+%4+%4+=:@=:@=:@'k+/f+G:+G:+G:+R0+R0+uI+uI+WA+0y+pk+M,@':@Pm#= P* P* K> G7 $w G{ +@ K> :] :] :] :] :] K> K> $w $w R6 R6 R6 R6 R6 dH.&*$&*$&*$0H.aH. l.{_ ac ui ^_ E) /= b: ZU.ZU.2n+9=$0=$z%$a=$b=$c=$d=$e=$f=$g=$r/ .$$ha +x 3~ &9 Q#@29 Lg qa :f v6 F%$o$#0> 4+te#aa@x'#G$+3a@ h+3{#:T#.m+%4+:6+_6+:6+-2+]_+-2+si+Lb+[]+{/+:k+-2+si+-2+]_+R0+xp+=w+@k+.B+.B+o;@o;@ur+ur+|G+|G+^G+^G+^G+s=@p=$:k+:6+Yg+[]+=m+}&@TY#=m+RO@RO@RO@RO@}&@}&@}&@Cy#Cy#Cy##l#ic#ic#Dy#Dy#lc#lc#oq#Ey#rq#rq#+tc@&h#x=$ka@wO.uL.A(@Q$+dW.5e+y=$5O.z=$Ug A=$BR@+<@rG cB 2`@B=$C=$D=$E=$F=$G=$G=$H=$-8@-8@UT@'8@%2@tG es ;E En ut z6 Oj I=$39 p*$p*$>E w, w, w, w, p$#p$#p$#r$#q$#9F tt Oh H; Oh _g p| Q} _} Qw#T-@Sr va :,@,8 V-@T-@Qw#M1 ~1 UE td#&@.dp dp dp 4^ H5 >2 zf l{ vU+>2 4^ dp dp H5 zg DW+II#II#^| 6u JI#<&$:[ f: J=$p%@K=$eQ+L=$M=$4G.cQ+A^ *= yp.N=$68 [* pK.GA+[y+{! 8g.y*$zi.x{ 8' i~ 7}.Yt.8}.)> Rx.)> Ov+Yt.8}.)> Ov+jy.%U.Yt.z<.Rx.Ov+[y+%U.Rx.8}.Ov+%U.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+6P.'U.Zh@3q@.k@.k@&e#D8+!M.l;#O=$P=$Q=$R=$S=$uZ#SN#T=$1&#vD@U=$A)+em@2V#!-@6(@Xp+B6@V=$W=$X=$Y=$Z=$`=$ -$`=$N*$.-$f&$O*$+-$+-$@-$#-$$-$Q*$Vu#%-$&-$y<#*-$$-$=-$--$;-$>-$,-$'-$)-$!-$~-${-$]-$^-$/-$(-$_-$:-$<-$[-$}-$|-$1-$2-$3-$4-$5-$6-$[J#7-$8-$9-$!J+*k#F #0-$a-$b-$c-$d-$e-$f-$^s#mR+[=#gB+em+G4@G4@g-$h-$`p+.q+MF@yb#z$+s<@b&@b&@0$@L@@qg@/t#EO@EO@EO@I@@I@@;B+;B+0G+*>+$N+$N+3T+B@@T.@C@@Gn+hX@>T@x)+=>+:P+T,@wp#[V+[V+BI+BI+BI+BI+:/#:/#K4#K4#UK+UK+VK+BI+[V+3G+=>+=>+=>+=>+ Yt.yj+d> nA+.d+,v.z<.z<.z<.z<.z<.z<.z<.8}.8}.8}.8}.8}.8}.", ".h.$~.N6 N6 N6 $~.$~.$~.$~.N6 N6 N6 N6 $~.$~.ke ie je ie ke he 9c E7 6c 6c Q% 9& 9& 9& 9& }9.ce 0g@yT.K= n-$o-$= [& 0# P* ;5 24 G{ J- K> :] :] :] :] :] K> K> $w $w ;p.;p.;p.R6 4z )c &*$D-$&*$0H.0H. l. l.ac =5 j$ 8# P6 Sx.Z$+b* k^ E-$F-$G-$CZ.H-$'*$aO+I-$J-$T( v%@ha #x )6 K-$-J v, x*@O3 .;@xu v6 F%$o$#Qv 0> 0> 'J uK uK .~ [f (e /d ml 7F ds .~ .~ 'M CR@L-$8K#_*$M-$N-$O-$P-$Q-$R-$S-$'J ml 9q /d 0s zu zu Sx -c 5, ,J ,J ({+UJ#M+@ /@T-$U-$V-$6_#Sv#Q.+*t@X{@1]+Qn+W-$X-$`A+si+Lb+~/+Lb+gi+_k+gi+$4+Sl+-2+YA+{/+gi+$4+Xg+]_+vr+=w+@k+@k+.B+#k+o;@o;@VH@ur+eK@eK@}G+}G+^G+t&@p=$:k+:6+Yg+[]+:k+RO@RO@RO@RO@}&@}&@}&@}&@}&@}&@2$@2$@2$@2$@By#By#Dy#Dy#W1#oB#Tn#Tn#rq# W1@v' p*$I=$Oh y6 En 0> ll ll Cm [r@cq En 6r 6r En cq 2 zf l{ vU+zf >2 H5 4^ 4^ 2[ DW+^| ^| E%$_/ 6u LY+<&$-;$;;$>;$q%@l%@eQ+}O+&Z+R`+MC#cQ+$~@$A#,;$p$ =; ,8+GA+cI+]! v]#';$$.@'> {! Yt.Yt.)> )> )> 6g+6g+)> )> 6g+6g+6g+6g+)> Yt.Rx.Ov+[y+%U.Rx.8}.Ov+%U.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+NU+.k@4q@4q@);$);$>@+d6+CN.!;$~;$U1.{;$];$^;$/;$/-#C'#g>@'>+7P#o=#9a@S1+0>@Yp+G4@A6@(;$_;$:;$Y=$<;$M*$ -$ -$N*$N*$[;$};$4V@|;$1;$2;$3;$Vu#4;$$K@5;$|;$6;$7;$Su#ZI#8;$9;$0;$a;$b;$c;$d;$e;$f;$g;$h;$i;$j;$k;$l;$m;$n;$o;$p;$q;$r;$s;$t;$vm+u;$X$$v;$7L+!J+w;$x;$G #7A#:%$y;$6p#VG#Xu#OQ@2N+mZ+:h+z;$A;$F4@uG+4(@tG+8s#.5@4v#pe#pe#c&@c&@a$@a$@e^@9$@EM@EM@8$@8$@8$@*>+*>+0G+0G+P,+$N+[P+B@@B@@P,+f^@>T@>T@x)+=>+=>+:P+:P+AI+AI+VK+BI+BI+}V+4%$4%$5%$5%$VK+VK+BI+BI+[V+[V+=>+=>+=>+=>+B+4 @my+K@@K@@K@@L@@W<#6N#Px#om+bm@ko@j-$U^@B;$p]+AG.uL.dW. G@C;$~t@_Y@D;$x/@E;$]_#8h#0&+)g@=L 13+)> Yt.yj+d> nA+.d+,v.z<.z<.z<.z<.z<.z<.z<.8}.8}.8}.8}.8}.8}.", "vk $~.N6 U5 N6 N6 $~.$~.$~..h..h..h..h.$~.$~.vk $~.N6 $~.vk vk .h.N6 }9.}9.}9.}9.}9.l:.l:.l:. ]@lf yT.K= F;$%'+f6+G;$bt+_v+yj H;$I;$J;$K;$r-$L;$M;$I[#X_#N;$TK+,i#7d+LU#K0+p:+([+([+O;$L0+ _+On+Mg+Lg+Lg+Lg+On++_+>k+gi+Xg+Lb+_6+Lb+si+]_+:k+1$@V4@V4@V4@}&@}&@XN#XN#VH@VH@K,@K,@FD+FD+fD+z@@|R+|R+|R+FD+(P+Kl+}R+}R+A$+A$+Ft+~P+nI+Gt+/P+/P+Wv#sI+er+km+~G+#w+dr+dr+Ft+Ft++w++w++w++w+WA+WA+1V+y@@4X+4X+4X+y@@z@@fD+y@@y@@y@@y@@y@@y@@y@@y@@1]+)-+(f+)-+xp+@k+xp+(|+Q0+f~+qy+YM@B$+B$+jD+jD+Jn+iD+G)@G)@G)@G)@iD+iD+Jn+6X+A$+A$+6X+iD+G)@br+G)@G)@G)@G)@G)@M&+iV+iV+)]+)]+ o+vb+,k+,k+,k+%4+ o+ o+s~@s~@s~@Zg+Ll+Ll++w++w++w++w+M)@L,@L,@L,@-3@-3@NF@28+28+28+)P+fp+]G+]G+gK@gK@N0+Mb+Mb+Mb+s=@`+#eK@Kl+y;@6Z+^k#8k#6P#fZ.N:+]f#_ +G)+5P+'4+yL.Fh+.#+fW.*y ~0@t'+t'+Y4 &2@*2@B/ |t K0 &M c_@FC.;[@Qe@Z #P;$s* RK Q;$ g >= }& 0# -5 ;5 ;5 *5 K> :] :] :] :] :] K> K> 24 $w R6 ;p.R6 X5 Q6 /j.&*$D-$&*$0H.0H. l. l.ac ed j$ 8# +2 Tx.Q( j^ R;$S;$c|#T;$U;$V;$W;$D_ X;$X;$f: zQ+-( q.@d.@-J R!@v, Og Gn k8 4, y6 Cm ll 2r@.~ 2r@)J Y;$Y;$Z;$)J Qv 7F 'J 'J Rx@8r x`#E&#`;$ >$M-$.>$+>$@>$#>$$>$%>$=S jQ 2r@j.$<*$<*$9q ol ol yu 4n hp gp ({+,z &>$lm@i>@&[@V-$iq#*>$=>$->$Kx#7X+ur+vp+qe#_9@R.@si+Sl++_+Sl+(+@dy+(+@Xg++_+gi+2&@ZA+/+@Xg+ir+-2+fy+@k+@k+-w+.B+#k+o;@o;@o;@o;@p;@p;@jc@jc@jc@`+#60#=m+[]+[]+:k+=m+=m+:k+}&@}&@}&@}&@}&@}&@}&@}&@YA+YA+YA+YA+3&@2&@cc#cc#Dy#Dy#>$$(@$$qq#rq#sq#|f#My#%w#+I#;X#'w#~w#uq#D7#)w#!w#I`#>>$>>$I`#,>${w#)$$2@$2@$'>$)>$!>$y0#zq#s=$Xy#Xy#Xy#Xy#Xy#Xy#Xy#Xy#Xy#Xy#OP#OP#~>$~>$~>$VY#!X#Xy#OP# O#@I#5@$/l#/l#/l#G7#.o#WY#H7#H7#.5#EB#di#Af#Af#Af#_l##5##5#Fq#Fq#Fq#Fq#C0#C0#C0#C0#$K#$K#Zy#Zy#C0#C0#C0#IB#IB#C0#C0#C0#Zy#Zy#$K#$K#C0#C0#Zy#Zy#Zy#Zy#C0#IB#HB#HB#HB#$K#$K#Zy#Zy#pt#M7#O7#I0#O7#,5#P7#,5#Jq#I0#I0#Gc#Gc#Gc#I0#O7#O7#^E#]z#]z#;z#;z#+z#+z#+z#+z#;z#]z#iT#iT#iT#iT#iT#(2#(2#(2#_2#_2#:2#:2#:2#_2#_2#_2#(2#Tc#Tc#/5#/5#Tc#_2#[o#St#]z#;z#6w#jT#^K#^K#^K#^K#>M#>M#>M#^K#hV#~5#~5#iT#iT#;z#]z#[o#]z#]z#]z#]z#]z#]z#]z#6w#Zy#5T#5T#5T#5T#5T#5T#5T#5T#5T#5T#5T#5T#5T#5T#5T#6V#6V#6V#6V#I7#I7#I7#I7#7V#7V#6T#6T#~X#~X#qT#qT#}X#}X#}X#}X#}X#}X#}X#}X#{>$.;$}X#mV#}X#/$$}X#mV#0T#$2#]>$#2#+;$@;$$;$#;$^>$B0+^>$z0+wB#,6+z0+/>${+/i@w<@(>$TS#UP._>$:>$E&#`:@>b@ z j*$*;$*;$<>$<>$[>$}>$b~ m$#n$#n$#n$#I5@DN DN =P =P #L@|>$Q+#Lu -h@so [r@[f .~ !J uK !J .~ Rx@s! Zi@Rx@TH va Sr c2 (} c2 8j#_} 8j#R} V-@Sr Sr V-@Yq R} Q} _} m| ~1 Sk }i 4^ dp dp 4^ H5 >2 >2 vU+W!@W!@zf >2 >2 H5 1)@FW+2h 2h Ca#|@@^/ 1>$Y $2>$ ~@3>$35 4>$l%@5>$6>$k1.oC &U#7>$8>$i+#9>$;- g7 GA+GV.aH@35+35+h]@h]@{! Lh+'g@'g@;~ ;~ 6j+6j+;~ ;~ ;~ 'g@'g@'g@;~ Ea+Rx.Ov+[y+%U.Rx.8}.Ov+%U.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+NU+3q@;o@0>$a>$a>$b>$<4+2c@k^@c>$xw X,+d>$&@#e>$TF#DU.T6#7_#^f#f>$=!@aB+O3+hm+A6@g>$h>$i>$j>$k>$l>$b&$`=$ -$.-$J(#L$$m>$n>$n>$o>$o>$Vu#4;$0b#vO@.D#+-$O$$5x#p>$q>$r>$s>$t>$u>$v>$w>$x>$y>$z>$A>$B>$C>$D>$E>$F>$G>$H>$I>$J>$K>$L>$M>$N>$O>$P>$Q>$R>$S>$K&@K&@Hm#Gm#T>$7A#Zr#$F#RK#xm#OQ@2N+mZ+Yr+U>$V>$W>$X>$4(@%!@9s#$7@59@4v#pe#c&@c&@a$@a$@0$@9$@8$@8$@8$@8$@*>+*>+*>+>B+0G+*>+$N+[P+[P+$N+$N+3 @9G+x)+x)+x)+x)+zI+zI+AI+AI+AI+[V+BI+}V+}V+}V+}V+}V+}V+}V+[V+[V+[V+[V+=>+=>+B+R,@r;@O)@4 @K@@e^@e^@K@@P,@)~#Y>$Lx#pe#N)@sy+lo@5]@i|+Z>$j%+3*+,N.{`+`>$F(@+^+_Y@ ,$.,$@R@3^#]_#V&$)g@=L 13+)> Yt.yj+d> nA+.d+,v.z<.z<.z<.z<.z<.z<.z<.8}.8}.8}.8}.8}.8}.", "vk $~.N6 U5 U5 N6 $~.N6 $~.vk +h.+h.vk $~.N6 .h.$~.U5 N6 .h.vk $~.U5 t).F7 F7 }9.l:.l:.!1.Ll n cd =$.{* +,$@,$l^ G;$bt+iK+#,$H;$$,$J;$K;$%,$zO#&,$L%#C1#*,$.$#ai+Z}+9d+>.$bd+([+/[+/[+>.$ _+Gg+s:+s:+._+*k+ei+>k+ir+gi+Xg+Lb+_6+_6+$4+_k+:k+V4@V4@hc#hc#TY#TY#XN#`n+ur+VH@K,@K,@|R+FD+fD+z@@:&@|R+|R+FD+(P+Kl+}R+ay+A$+A$+Ft+~P+nI+Gt+/P+/P+=,${P+:o+'P+lm+gp+nI+Gt+Ft+Ft++w++w++w++w+WA+WA+y@@4X+|$@|$@4X+1V+fD+FD+y@@y@@y@@y@@y@@y@@y@@y@@c[+(f+N@+)-+=w+-w+@k+xp+R0+Q0+qy+YM@B$+B$+jD+jD+iD+G)@M&+br+br+br+M&+G)@iD+Jn+6X+A$+6X+Jn+G)@M&+iD+iD+G)@M&+M&+br+`;+6^@t)+t)+8d+ o+vb+vb+,k+,k+8d+8d+)]+)]+s~@s~@YM@Ll+6X+A$+A$++w+L,@L,@yb#yb#$R#-3@NF@28+>'@>'@Kn+)P+]G+]G+]G+gK@N0+Mb+Mb+nD+Nl+u&@}G+|G+WA++5@*t@*N+-,$Jn#k[+5W.)2+U)@Yx#5P+8F.)V.{[# E.2v@}L.~0@st ~d@&2@_Y@C%@3u F( ud m.@;,$`D.SD@>,$,,$67+s+ ',$[Q g [& 0# -5 bl+Q5.`z K> :] :] :] :] :] K> K> H{ 24 R6 ;p.R6 4z W5 J'#&*$&*$&*$0H.aH. l.{_ ac YY )5 E) 2x.Z$+t%$]g ),$r/@T;$!,$~,$V;$hq X;$f: v*${,$s`+q.@a} o.@^( dQ w) Mg Jc .' hp y6 Rx@.~ 2r@)J }f Z;$],$^,$!J @y 7r 'J DN x`#8V Pe zD /,$(,$l=$_,$:,$<,$P-$%>$=S [,$,M Cm /V#/V#x6 4n 4n 4, 5q =l X7@bj },$;-#n[+3*+i'+|,$1,$2%$P&$5L#2,$3,$oe#/|+6d+4P#}}@$4+>k++_+>k+(+@/+@(+@ir++_+(+@2&@2&@/+@ir+ir+-2+ur+-w+-w+-w+.B+#k+o;@o;@-:#o;@oe#oe#u=@u=@jc@v=@2=@}&@=m+=m+RO@RO@=m+]_+TY#TY#}&@}&@}&@}&@}&@}&@dy+dy+dy+dy+3&@3&@oB#oB#4,$4,$@l#>$$5,$$Zv#5,$6,$[i#7,$.K#%w#+I#;X#'w#~w#uq#I`#)w#!w#>>$8,$8,$8,$E7#'$$9,$0,$2@$x0#a,$)>$y0#^$$VY#VY#VY#VY#VY#VY#VY#VY#OP#OP#OP#~>$~>$b,$b,$b,$VY#!X#Xy#OP# O#@I#5@$/l#5@$/l#G7#.o#WY#H7#H7#7V#EB#di#Af#Af#Af#_l##5##5#Fq#Fq#Fq#Fq#C0#C0#C0#C0#HB#HB#$K#$K#Zy#Zy#Zy#C0#$I#$I#$I#IB#IB#C0#C0#C0#C0#C0#Zy#Zy#Zy#C0#IB#IB#`y#`y#`y#HB#HB#$K#$K#)M#M7#I0#I0#O7#,5#P7#,5#Jq#O7#O7#I0#Gc#Gc#Gc#I0#:I#]z#]z#]z#;z#+z#+z#~5#~5#~5#+z#]z#St#St#St#]z#;z#Tc#(2#(2#(2#_2#_2#:2#:2#(2#(2#(2#Tc#Tc#Tc#Tc#Tc#Tc#_2#[o#St#]z#;z#6w#jT#^K#^K#^K#^K#>M#>M#>M#^K#hV#+z#~5#iT#iT#;z#]z#[o#iT#iT#iT#iT#iT#iT#iT#hV#C0#O`#O`#O`#O`#O`#O`#O`#5T#5T#5T#5T#6V#6V#6V#6V#6V#6V#6V#6V#I7#I7#I7#I7#`4#`4#6T#6T#~X#J`#M`#ci#mV#mV#mV#mV#mV#mV#mV#mV#c,$d,$/$$}X#/$$/$$/$$+ $]>$%2##2#1I#@;$#;$^>$}T#A0+B0+A0+)6+,6+f8+)6+/>$df#@4+dd+Gg+#_+: @@_+by+~]+%-+Ml+jD+SA+fp+fp+Jn+L&+~-@9}@y~@g1@36+f>$[_+fi@8Z.e,$f,$!_#g,$ia@'{+0]@~.$h,$K_#i,$*C+DR@T~#tG {A ;&$=;$=;$j,$k,$}>$!8@n$#n$#I5@I5@I5@8r Y~#kl CN @L@l,$Rv Q+#'E 2 zf W!@W!@vU+W!@W!@zf >2 1)@:/ j} >O@i} x/ dQ _@@j_@4V CT m,$bM+35 iU+n,$o,$^|.!F p,$$~@q,$r,$B- O6@(& xM+KX#yK#~X@=8.-V@m|.]! 'g@'g@;~ ;~ 6j+6j+6j+6j+6j+;~ Lh+9Y+Lh+6j+$(+)> Ov+[y+%U.Rx.8}.Ov+%U.Ov+Ov+Ov+Ov+Ov+Ov+Ov+NM+yM+3q@0>$v~.0>$0>$cH@j*.:i@sz+CM Fc+s,$t,$i2@S_#}0#n~+u,$|_+v,$)_#61@4m@Ui+^7@g>$w,$x,$y,$z,$A,$B,$J$$`=$ -$.-$d&$C,$C,$D,$n>$o>$E,$4;$5e#Wr# ~#F,$@-$zZ#^W#G,$H,$I,$J,$K,$L,$M,$N,$O,$P,$Q,$R,$S,$T,$m;$U,$V,$W,$$P#&P#X,$Y,$Z,$`,$ '$.'$+'$@'$>#@`d+#'$4L+Gm#C+#$'$@s#%'$UG#&'$Q*$1'#+J+V<@:h+*'$='$-'$X>$`4@;'$49@>'$59@4v#XA#Kx#c&@c&@a$@0$@4 @0G+^K@0G+0G+0G+0G+0G+>B+0G+*>+;B+Y.@[P+Y.@;B+9G+9G+9G+x)+x)+>T@>T@{-+{-+AI+AI+[V+[V+}V+}V+[ @eX+eX+[ @[ @3G+[V+[V+AI+=>+=>++>B+R,@r;@4 @ny+e^@e^@e^@K@@a&@,'$Y>$nD#pe#wr+sy+/3@''$)'$j/+!'$TZ.VJ.RP.2O.PM.|/ 7s `Q@b%$N) ~'$ [#{'$wn.=L 13+)> Yt.yj+d> nA+.d+,v.z<.z<.z<.z<.z<.z<.z<.8}.8}.8}.8}.8}.8}.", "$~.$~.$~.$~.$~.$~.$~..h..h..h..h..h..h..h..h.1b 1b 1b `n `n 2c 2c 2c Ml *=.@n .n .n @n *=.Ml O~.1b 1c s$ u] @,$eu.h* kK+iK+@Z+]'$ s@Fp@QY@j%$$/#2K#!=#NX.7G#wW#dz@}$@kp+L0+!_+D:+~_+m8+`(+Ql+zb+#_+*k+*k+*k+&k+>k+/+@dy+gi+Xg+Sl+Xg+-2+{/+1$@|&@V4@1$@1$@}&@}&@I6@}]+}T+ur+:x@fh#<&@:&@FD+fD+FD+FD+FD+FD+(P+(P+OK+OK+}R+ay+~P+Ft+#w+dr+nI+Gt+ZM+oI+er+er+~G+#w+Gt+/P+~P+Ft+6X+Jn+Jn+6X+WA+uI+:&@FD+z@@z@@fD+FD+z@@y@@z@@1V+y@@4X+y@@z@@FD+|R+v)+v)+1]+1]+(|+(|+/_+/_+R0+Q0+qy+YM@B$+B$+jD+jD+G)@G)@G)@iD+Jn+6X+6X+6X+6X+6X+6X+6X+6X+6X+6X+6X+6X+Jn+G)@M&+br+M&+X1+B$+s~@s~@ o+ o+8d+Y8@Y8@Y8@)]+)]+B$+B$+B$+B$+iD+iD+,'@,]@Dq@LF@~P#Qx#Mx#Mx#$R#^'$.q++q+@q+@q+mI+lm+-'@{G+{G+q;@mD+nD+s=@s=@dy+gi+Nl+/G+(T+d^@;v@kq#/'$('$_'$56+:'$Br+_ +-1@9R+VJ.@l+v8+ E.}-@bG#9v A/ A/ &2@*2@B/ |t }7 &M 2v@<'$*>#B(@['$yc@GO.;e@/v.wW W* 0# bl+5! 2{ b, K> :] :] :] :] :] K> K> N/.$w X5 4z 4z X5 R6 }'$0H.|'$1'$bH.~i+A^.=5 5[ s6 n+ V5 uM#vl+2'$v> 3'$YW C_ L-@L-@.> Qt Qt H[ 4'$LU@// C( dQ ^/ zW+BW+l_ R-@w' wo ,J En Cm ll 2r@)J Y;$],$],$Y;$5'$}f ,M 6'$7'$S-$o{ ,! Oe 8V 9O#8'$9'$0'$P-$a'$b'$c'$d'$*S 8r DN 0> Cm Ku s) `r e'$X7@=$$M+@PH#Pp@Q&#'t#Qv#'{+@o+f'$jq#g'$h'$i'$j'$&n#jc@Ob+`A+X-$zR#_6++_++_++_++_++_++_++_+(+@(+@(+@(+@(+@(+@(+@-2+ur+@k+@k+@k+fy+fy+ur+ur+b$@b$@:V+:V+}G+jc@jc@Pn#Nb+}&@}&@:k+:k+TY#H`#=m+H`#TY#RO@=m+=m+RO@TY#H`#ZA+ZA+ZA+ZA+2&@2&@cc#cc#W1#W1#Tn#Tn#l#>l#6t#6t#[@$[@$}@$8t#{w#D7#o'$p'$u0#vq#vq#u0#v0#1@$q'$q'$q'$q'$^$$^$$^$$^$$Xy#VY#K`#K`#!X#Xy#!X#K`#OP#OP#OP#OP#OP#OP#OP#OP#b,$OP#Xy#VY#ci#ci#5@$Zn#~X#~X#.5#.5#H7#H7#H7#.5#_l#(l#_l#EB#yf#yf##5#+5#~E#~E#~E#~E#$I#$I#$I#$I#~E#~E#K7#Fq#K7#~E#GB#FB#$G#~E#K7#L7#J7#J7#J7#J7#C0#C0#C0#C0#C0#C0#C0#C0#HB#_X#Qt#`y#Zy#C0#Zy#)M#pt#)5#)5#)5#)5#)5#)5#)5#Lq#)5#Kq#J0#:I#r'$H0#X#5V#^>$w'$w'$B0+B0+Z3+~6+!6+)6+>6+e8+e8+V4#~|+~|+ed+ed+E:+@4+>k++_+by+by+by+by+-'@-'@-'@'G+'G+G)@$q+ew+z~@y~@Eq@VO@rQ#`~@m6+WH#u<@x'$y[+i-+y'$z'$a]@hq+ n+A'$ -#DN tG v! B'$d$$C'$b$$#W@1|@fP@I5@)M )M DN 8r Y~#=P nI@;M l,$D'$Rv @L@nI@ <@4|@{8@||@TT@E'$F'$G'$TT@%2@!8@}|@~8@%W@Q^#^J zj#c2 T-@U-@V-@Sr Sr U-@T-@T-@R} Qw#$, :&$Rk HW.*M dp 4^ 4^ *M ze D/ vU+zf >2 W!@l{ l{ >2 Fh H'$!< i} 1[ AW+zg |@@^/ yf t`+>y @+3q@<9.d #x{ $.@c> c> $.@x{ nh.c> y*$0@@%.@%.@y*$c> $(+]$@%U.%U.%U.%U.%U.%U.%U.Rx.Rx.Rx.Rx.Rx.Rx.Rx.ko.&' L'$.k@9 +4q@;o@E8+M'$N'$3x+ 7.O'$f4@P'$xX@Us@n~+Q'$%*${B+=5@<:@k'@ez@R'$S'$T'$U'$V'$W'$X'$Y'$<;$Z'$`'$c&$R]#J(#m>$K$$Z!#+-$2;$1;$3;$Wr#dX@4;$2;$ )$.)$+)$@)$#)$$)$%)$&)$*)$=)$-)$;)$>)$,)$')$))$!)$m;$~)${)$])$^)$/)$()$_)$:)$<)$[)$})$|)$1)$wP+~s#aN+2)$-D#%s#3)$Tu#4)$5)$ F#Wr#92+V8+Xr+#s+F4@6)$7)$BT#`4@8)$%!@8s#9)$Lx#XA#yb#z$+s<@b&@0$@4 @mX+*>+*>+;B+;B+Y.@Y.@>B+0G+;B+/w+:|+/w+<^#Y.@*>+3 @3 @3 @3 @>T@>T@{-+=>+=>+=>+[V+[V+[V+[V+[V+#N+TK+AI+3G+:P+zI+{-+@N+>T@x)+lX+ZK+lX+9G+;B+Y.@f^@f^@0G+>B+>B+>B+4 @4 @0&@0&@Z.@Z.@L@@L@@0$@a$@uy#uy#c&@b~@26+_7@oz@)*@mH@0)$7I.!N.,t#./@2L.-p@*2@a)$b)$c)$B9#k##35+35+13+@$+i~ Yt.ok.H0@.y#QL+)> Rx.7}.7}.7}.Rx.%U.[y+8}.8}.8}.8}.8}.8}.", "$~.$~.$~.$~.$~.$~.$~..h..h..h..h..h..h..h..h.`n `n `n `n 2c 2c 1c 1c Ml *=.@n +n +n @n *=.Ml O~.1b 1c s$ {& W> |R#aC+p> d)$e)$f)$Fp@g)$|2 :Z.h)$s1@T_#iB@i)$S;+M@@>3@t)+yb+bd+1/#m8+m8+R3+d~+Pl+#_+*k+*k+@_+&k+>k+/+@gi+gi+Xg+Sl+Xg+gi+YA+1$@hc#V4@{/+1$@}&@}&@I6@}]+}T+ur+:x@fh#<&@:&@FD+fD+FD+FD+FD+FD+(P+(P+OK+OK+}R+ay+Ft+cr+gp+#w+nI+Gt+oI+oI+Ht+Ht+gp+#w+dr+nI+~P+~P+A$+6X+6X+A$+uI+uI+FD+fD+1V+1V+fD+FD+z@@y@@z@@1V+y@@y@@y@@z@@fD+FD+v)+1]+1]+1]+(|+/_+/_+/_+R0+Q0+qy+Ll+B$+B$+jD+jD+iD+iD+iD+Jn+Jn+Jn+Jn+Jn+6X+6X+6X+6X+6X+6X+6X+6X+6X+Jn+iD+M&+M&+M&+X1+B$+s~@)]+ o+ o+8d+Y8@Y8@Y8@)]+)]+B$+B$+B$+B$+iD+iD+,]@#E'#2v@bG#aj A/ A/ A/ 0_@2u gw K0 aG#Sq@7e+zg@Mj#./@D4 9+ .y##U.*5 4! $w W_ 5! @ K> :] :] :] :] :] K> K> G7 $w X5 4z 4z X5 R6 ;p.'J.bH.cH.)i+X_ ~_ .* a# 4. Y@ := b* 7* l)$iO+X$+oO+C_ g: ;;$f: v*$m)$-;$2>$b3 dQ 2o zW+EW+zW+w) _)@P3 2' wo cq En 0> ll )J !J Z;$Y;$Y;$Y;$5'$Z;$[,$S-$nI@;z Md Kf Oe o{ n)$BR@o)$p)$q)$r)$s)$t)$u)$'M 8r 8r Cm Cm 2A `r X7@|d GT#${#O#$v)$sK@9L#R]++x@H!#Mq@46+w)$x)$(^#=,$y)$&n#]/+St+`A+z)$zR#:6+Sl+>k+Sl+>k+Sl+>k+Sl+(+@gi+(+@gi+(+@gi+(+@-2+fy+@k+@k+@k+fy+fy+ur+ur+_T+_T+:V+|G+}G+}G+}G+`+#Nb+}&@}&@:k+:k+TY#H`#=m+H`#TY#RO@=m+=m+RO@TY#H`#ZA+ZA+ZA+ZA+2&@3&@oB#oB#oB#oB#Tn#(@$l#>l#*w#*w#Qy#Qy#8t#{w#,>$v.$A)$p'$u0#ct#ct#u0#v0#1@$q'$q'$q'$q'$^$$^$$^$$^$$Xy#VY#K`#K`#!X#Xy#!X#K`#Xy#Xy#Xy#Xy#Xy#Xy#Xy#Xy#~>$Xy#!X#K`#M`#M`#/l#5@$~X#~X#.5#.5#H7#H7#H7#.5#Af#(l#_l#EB##G##G#Dc#/X#Fq#Fq#Fq#Fq#C0#C0#C0#C0#K7#K7#Fq#L7#Fq#K7#$G#GB#~E#K7#Fq#L7#L7#L7#Fq#Fq#C0#C0#C0#C0#C0#C0#C0#C0#Zy#HB#`y#HB#Zy#C0#Zy#Y`#)M#Kq#Kq#Kq#Kq#Kq#Kq#Kq#Kq#Kq#J0#^E#^E#:I#r'$r'$]E#{E#+z#]z#iT#St#iT#iT#hT#St#iT#]z#]z#iT#St#hT#<2#<2#gV#gV#:2#:2#:2#_2#]5#/5#/5#/5#/5#/5#/5#Tc#iT#iT#]z#]z#6w#6w#tt#tt#Z`#{O#jV#u'$u'$>M#iV#4T#6w#]z#]z#]z#]z#]z#]z#]z#iT#]z#;z#;z#;z#;z#]z#hV#`y#6V#O`#5T#(X#b@$6V#5T#5T#6V#(X#6V#O`#3*$y.$5T#6V#6V#6V#6V#I7#I7#I7#I7#`4#`4#8V#8V#8V#6T#7T#7T#}X#}X#/$$f@$f@$f@$/$$/$$f@$f@$f@$/$$/$$}X#}X#|X#&2#@;$Ty#Ty##;$w'$w'$B0+B0+Z3+~6+!6+d8+>6+>6+e8+.I#.4+y0+^6+r:+B)$Nn#Pg+On+&k+N2@N2@@/+@/+$w+$w+,P+,P+,P+mI+28+[o+N,@{3@sy+]3@8a@:/+:/+C)$V,@fm@D)$3<+E)$M#$4P+F)$Bo+j4#G)$*S cP@:|@/|@FN GN -8@`:@fP@)M )M 'M 'M DN DN nI@nI@mI@;M Rv @L@@L@nI@1|@UT@UT@!8@TT@$W@$W@H)$TT@)8@!8@!8@UT@]8@Gv@`Z ~)#c2 c2 c2 T-@R} U-@U-@R} T-@T-@R} 8j#YD#$, Qk 6Y.ze dp 4^ 4^ dp *M ze >2 4^ 4^ H5 W!@vU+zf 2[ j'#er#_+#:@@BW+AW+zg |@@f3 R!@&9 Q!@ y*$y*$c> $.@x{ x{ $.@y*$0@@%.@%.@0@@h]@%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.3x.3q@5D+:I 3x.5D+ls@q|.L)$;<. - uZ#M)$kH@sm#>9@6Z.N)$bN#i9@ko@~-@x@@O)$P)$S'$Q)$R)$V'$S)$X'$Y'$<;$Z'$`'$M*$R]#J(#m>$L$$P*$4V@E,$2;$3;$5e#5e#3;$ )$8X@T)$U)$V)$W)$X)$Y)$Z)$`)$ !$.!$+!$@!$#!$$!$%!$&!$*!$=!$-!$;!$>!$,!$'!$)!$!!$~!${!$]!$^!$dx#/!$(!$D #D+#%s#_!$:!$Tu#+Y.@/w+ly+<^#I@@8$@*>+*>+3 @3 @3 @3 @>T@>T@+=>+=>+[V+[V+[V+[V+#N+TK+AI+[V+=>+zI+{-+@N+>T@>T@9G+lX+9G+3 @Y.@/w+~-+f^@*>+0G+0G+0G+4 @ny+0&@0&@Z.@Z.@L@@L@@0$@a$@uy#(t#(P+L@+Q.+l1@}!$*W+|!$1!$u +yL.83@D(@'z A/ Eh `Q@2!$3!$B9#&A#vn.wn.ko.@$+,v.Yt.U/@ok.4!$Fu#Yt.8}.7}.z<.7}.8}.Ov+%U.8}.8}.8}.8}.8}.8}.", "$~.$~.$~.$~.$~.$~.$~..h..h..h..h..h..h..h..h.2c U@.U@.4K@4K@4K@yT.yT.iI.iI.9%.|{.|{.9%.X)@X)@Lv.`m l:.~. 9* P6@HA#mR.@r+!@@5!$6!$g)$7!$qj@r-$8!$fY.r1@9!$e$@c=@; +w@@$>++/+Ql+ 6+: @: @R3+%k+Pl+: @@_+&k+@_+@_+>k+(+@ir+ir+ir+>k+ir+(+@/+@YA+hc#1$@{/+{/+RO@}&@I6@}]+}T+ur+:x@fh#<&@:&@FD+fD+fD+fD+fD+fD+Kl+Kl+}R+}R+(T+(T+Ft+cr+gp+#w+dr+dr+oI+ZM+ZM+ZM+dr+#w+gp+gp+k+>k+by+cy+]G+6X+N)@~B+ce#PU#aG+a!$b!$>i#c!$E)$( +FU.dG+;T.p%$X #@g+2v@t$#aj @p @p aj ~0@f{@`A pB.d'.E(@E(@/T.d!$m8 e!$ @ yj+ok.Hs &_ fL.{_ T$ K> :] :] :] :] :] K> K> $w $w X5 4z 4z X5 R6 R6 X_ {_ |x.Hs ed 2% !. /+ N=.ZU.]p+kG+f!$5M+g!$ek G6 ))@Z'@GY+r`+|j 81 k(#>x#EW+BW+BW+$3#h!$-6#YQ@R-@X-@[} G> :)@[f Zi@Rx@! wa ~~#Y~#)M )M -S {@$k!$l!$m!$n!$-P $w.$'$$z!$A!$B!$vc#vc#B!$v0#v0#q'$q'$>X#>X#!X#!X#!X#!X#Xy#VY#K`#K`#!X#Xy#!X#K`#VY#VY#VY#VY#VY#VY#VY#VY#Xy#!X#VY#K`#qT#M`#J`#/l#/l#/l#G7#G7#B0#B0#B0#G7#yf#di#Af#yf##K##K#zf##5#J7#J7#J7#J7#$K#$K#$K#$K#Fq#Dc##5##5##5#Dc#zf#Cc#Dc#Dc##5##5#Dc#zf#Cc#~E#IB#IB#IB#IB#IB#IB#IB#IB#IB#Zy#$K#$K#C0#C0#Zy#Y`#tt#;z#;z#;z#;z#;z#;z#;z#]z#]z#]z#]z#]z#]z#]z#]z#;z#]z#iT#St#hT#hT#St#St#hT#St#iT#iT#iT#iT#St#hT#gV#gV#gV#:2#:2#_2#_2#_2#/5#/5#/5#/5#/5#/5#/5#/5#;z#tt#6w#6w#{O#{O#^K#^K#3T#~O#C!$mT#D!$mT#kT#iV#tt#;z#;z#;z#;z#;z#;z#;z#;z#;z#]z#]z#]z#]z#;z#tt#$K#5T#y.$O`#6V#(X#5T#y.$y.$5T#6V#5T#3*$k@$3*$O`#6V#6V#6V#6V#I7#I7#I7#I7#7V#7V#8V#8V#8V#8V#aT#aT#&Z#&Z#}X#/$$f@$f@$/$$/$$/$$/$$}X#}X#mV#mV#mV#rT#&2#@;$>X#,X#@;$D0+w'$B0+B0+B0+~6+~6+!6+)6+'6+>6+>6+y0+c8+%|+C:+r:+Nn#h0#*k+*k+Nn+Nn+k)+k)+l;@l;@S;@S;@G,@'P+lm+fp+mm+pk+N)@+5@*7@6a@d1@kK@H&+mV@U^@6J#E!$[V#:'$F!$G!$~`+H!$ix@I!$J!$T~#YT@4|@3|@s[@:e Rx@.~ .~ .~ .~ .~ ll ll 0> Cm Cm 0> 0> Rx@dP@TT@TT@)8@)8@!8@!8@!8@)8@!8@!8@!8@!8@{8@K!$Nx@T:@R} c2 Q} 8j#8j#c2 c2 R} T-@T-@U-@Q} m| XD#}} j< D/ *M dp 4^ 4^ 4^ dp 4^ *M ze *M 4^ >2 >2 Ag }i Qo#w) YQ@Fh SY+BW+x/ /( tS+sK M`+&9 @Ti+O)$U!$V!$W!$X!$Y!$Z!$`!$ ~$<;$`'$.~$M*$R]#N*$e&$L$$|;$5;$$K@o>$Q*$4;$Vu#7;$+~$bX@@~$H,$#~$$~$%~$&~$*~$=~$nS#-~$;~$>~$,~$'~$)~$!~$~~${~$]~$^~$/~$(~$_~$:~$<~$[~$}~$|~$$v#1~$2~$O##3~$3~$4~$4~$5~$Tu#6~$&F#Xu#P(#lP+wG+ J+Ti+uG+AT#BT#38+>]@8s#Ip#.5@Lx#Vv#Kx#s<@c&@b&@a$@K@@w)+T.@T.@T.@$N+$N+;B+;B+*>+;B+I@@<^#EO@EO@EM@^K@*>+*>+*>+*>+3 @3 @3 @>T@+=>+=>+=>+[V+[V+TK+TK+zI+=>+=>+zI+>T@>T@f^@3 @3 @3 @*>+;B+Y.@/w+/w+Y.@;B+*>+ny+ny+Z.@K@@0&@0&@P,@P,@H6@H6@a$@K,@o;@VH@fD+S.+ty+''$7~$8~$9~$0~$!N.>N+}-@3L.&y B/ #S fQ a~$b~$B9#.k@zm.Tt ko.@$+,v.i~ )D+U/@c;@):+i~ z<.z<.z<.z<.7}.8}.Rx.8}.8}.8}.8}.8}.8}.", "$~.$~.$~.$~.$~.$~.$~.$~.$~.$~.$~.$~.$~.$~.`n r& 4K@4K@4K@Jg.Jg.&j.&j.iI.ce 9%.9%.9%.9%.9%.X)@Ml `m l:.~. y* Ux./_ c~$=i !@@#F.hW d~$ew@e~$f~$g~$h~$/-#U_#U=$i~$5 @//+$>+Z(+d~+Pl+ 6+R3+Tl+ci+Eg+: @@_+&k+@_+@_++_+ir+>k+>k+>k+ir+ir+(+@(+@dy+2$@{/+_k+{/+RO@}&@I6@}]+}T+ur+:x@fh#<&@:&@FD+fD+fD+fD+fD+fD+Kl+Kl+}R+}R++w++w+Ft+Ft+#w+#w+#w+#w+oI+ZM+sI+{P+nI+#w+~G+lm+@w+@w+ay+ay+ay+ay+Kl+Kl+1V+4X+|$@y@@fD+FD+fD+z@@z@@1V+1V+1V+1V+z@@z@@z@@c[+c[+c[+c[+/_+/_+/_+/_+Q0+f~+qy+Ll+YM@YM@]G+]G+A$+A$+A$+6X+Jn+iD+iD+iD+A$+A$+A$+A$+A$+A$+A$+A$+6X+Jn+Jn+iD+iD+G)@X1+X1+)]+)]+8d+8d+8d+8d+8d+8d+H,+H,+H,+H,+Kn+Kn+Kn+Kn+ih#ih#$R#xU#xU#xU#0!$0!$+s+@s+@q+@q+`p+@q+lm+lm+{G+{G+-'@-'@XA+o0+o0+k)+Xg+Xg+#/+cy+]G+Ll+pk+kc@j~$vZ# 4#FI+k~$$ +l~$m~$$L+` @n~$`+$ @$;W+o~$@g+!t@}L.t$#aj @p aj !4+!4+t$#;l CJ.J4@y[ p~$q~$e] r~$-h 2.+0@@d( x% xj+)O ac :] :] :] :] :] K> K> 24 24 X5 4z 4z X5 X5 X5 ~_ ed Hs ti fd 8# s# o# vl+lW.wz+6b+Z#$s~$/K+mF+KQ+YH+t~$t~$t~$r`+/9#i%#:/ zg BW+1)@h!$h!$_+#<: X-@v[ S-@1k s! :e Rx@.~ cP@cP@dP@R5@(0@(0@u~$E'$v~$=P jl il @9 ~~#Y~#Rx@!M 9~ w~$(0@w~$(0@x~$(0@|f +>T@*>+}=@;w+%N+`K+@m++m+`A+zR#VA#-m+[]+-2+[]+-2+[]+-2+[]+_k+]_+_k+]_+_k+]_+_k+]_+vr+=w+=w+=w+vr+vr+}T+}T+VH@ur+eK@|G+^G+^G+[T+s=@Nb+}&@}&@:k+:k+TY#H`#=m+}&@RO@RO@RO@RO@RO@RO@}&@#l##l#2$@ZA+3&@3&@W1#W1#kc#Dy#>$$(@$rq#rq#qq#qq#w!$w!$l'$l'$x!$x!$5t#5t#+K#+G#Vy#Vy#,>$v.$E~$1@$F~$G~$B!$B!$B!$B!$w0#v0#q'$q'$>X#>X#!X#!X#!X#!X#Xy#VY#K`#K`#!X#Xy#!X#K`#K`#K`#K`#K`#K`#K`#K`#K`#!X#VY#K`#K`#qT#qT#~X#~X#/l#/l#G7#G7#B0#B0#B0#G7##G#DB#EB#yf##K##K#H~$Dc#J7#J7#J7#J7#$K#$K#$K#J7#L7##5#:X#:X#:X##5##5##5##5#:X#:X##5#Dc#zf#H~$I~$IB#IB#IB#IB#IB#IB#IB#IB#CR#IB#Zy#Zy#C0#IB#Zy#Y`#6w#]z#]z#]z#]z#]z#]z#]z#iT#iT#iT#]z#]z#;z#;z#;z#[o#[o#[o#[o#[o#[o#hT#hT#hT#St#St#St#St#St#St#hT#:2#:2#:2#_2#_2#(2#(2#(2#Tc#Tc#Tc#/5#/5#]5#]5#]5#st#st#tt#6w#{O#^K#Rt#Rt#3T#~O#C!$mT#D!$D!$J~$C!$st#+z#+z#+z#+z#+z#+z#+z#~5#+z#]z#iT#iT#]z#+z#ot#$K#O`#3*$y.$5T#6V#5T#y.$y.$O`#5T#O`#3*$k@$3*$y.$6V#6V#6V#6V#I7#I7#I7#I7#7V#7V#6T#8V#aV#0V#0T#0T#4*$($$mV#}X#/$$/$$/$$/$$}X#mV#mV#mV#&Z#&Z#($$sT#&2#@;$,X#$;$1I##2#@;$#;$w'$C0+B0+~6+!6+)6+'6+'6+)6+/>$':#*6+W3+<[+Nn#:i#*k+@_+Nn+k)+k)+o0+l;@l;@S;@;]@G,@:R+:o+er+s9#t9#LF@M,@[o+%q+!-@61@x~@{-@1{#/L#aa@+o+K~$Ar+L~$M~$N~$ZN+$g+D_#O~$DR@`~#3h :e uG .~ xt )J cs )J xt 'J ml Cm @, En @, 0> Rx@R5@TT@TT@)8@)8@!8@!8@UT@!8@!8@UT@!8@)8@~8@$S#H5@U:@T-@Q} Qw#Qw#8j#c2 T-@U-@T-@T-@U-@c2 (} (} Ti w[ I^ D/ *M dp 4^ 4^ 4^ 4^ *M D/ I^ D/ *M dp 2[ I..T: Dd l_ }: U: z5 SY+}7 Fv bv Lw oS@&9 FQ+lw d| b6 P~$zn zG#$A##A#S@$O5 S@$z_ Q~$'- kX@yn+Ei+-V@-V@M8@-V@M8@-V@M8@-V@u]#R~$v]#35+M8@)g@ZW+)g@ko.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.r4@,8+>e@M<+2<@*0+9c.S~$PG T~$;'+K0@Q]+sz@U~$z'#YR#V~$W~$/v#Wi+6i@jP+UH@X~$Y~$Z~$`~$ {$.{$+{$l>$b&$Z'$`'$M*$R]#N*$e&$L$$4V@.D#$K@o>$3;$5e#4;$7;$@{$uR+#{$fh+${$%{$&{$*{$={$-{$RQ#;{$>{$,{$'{$){$!{$~{${{$]{$^{$/{$({$_{$:{$<{$[{$+Y#t $}{$|{$1{$2{$3{$4{$4{$5{$6{$7{$Tu#8{$7p#Xu#=T@lP+n(@9{$0{$X5+a{$38+tG+%!@s9#.5@hh#Vv#c&@c&@b&@a$@0$@L@@ED+xD+T.@T.@T.@$N+$N+;B+;B+;B+;B+I@@8$@EM@7$@6&@6&@8$@*>+*>+*>+3 @3 @3 @3 @+=>+=>+=>+[V+[V+TK+AI+zI+zI+zI+zI+x)+>T@f^@f^@f^@f^@Y.@Y.@/w+/w+:|+/w+Y.@;B+my+my+K@@e^@0&@0&@P,@P,@H6@H6@a$@K,@o;@-9@v)+16+:7@b{$c{$x(@d{$e{$]Q.S$+BJ.!4+0_@D%@ ,$~p f{$g{$B9#3q@wn.Tt ko.@$+ZY ,v.yj+oA++$+)L.ZY Z Z z<.z<.7}.7}.8}.8}.8}.8}.8}.8}.8}.", "$~.$~.$~.$~.$~.$~.$~.$~.$~.$~.$~.$~.$~.$~.`n r& ~* ~* ~* Jg.Jg.&j.&j.ce ce 9%.X)@}{.V>.V>.9%.*=.w8 l:.~. y* 5{ /_ h{$EX@d)$i{$r= d[ j{$0`@=h@E*$--#%X#k{$1S#I1#/K@_f+6~+,-+d~+%k+Eg+R3+{R#l{$R3+Dg+Rl+Rl+di+di++_+ir++_+>k+>k+ir+ir+(+@(+@gi+YA+_k+-2+_k+RO@}&@I6@Tt+}T+ur+:x@fh#<&@:&@FD+fD+z@@z@@z@@z@@PK+PK+ay+ay++w++w+~P+~P+dr+dr+#w+#w+oI+ZM+sI+{P+nI+#w+~G+lm+@w+@w+}R+}R+}R+}R+Kl+Kl+1V+y@@4X+y@@fD+FD+FD+z@@1V+z@@z@@z@@z@@1V+1V+1V+)-+)-+)-+)-+/_+/_+/_+/_+Q0+f~+qy+Ll+Ll+Ll+gK@gK@+w++w+A$+6X+6X+Jn+iD+iD+A$+A$+A$+A$+A$+A$+A$+A$+6X+6X+6X+Jn+Jn+iD+B$+X1+t)+t)+8d+8d+8d+8d+ o+ o+H,+Ml+mI+mI+mI+mI+@q+@q+nW# 5@ 5@ 5@m{$m{$n{$n{$o{$p{$`I+`I+`I+tG+km+km+(G+(G+^V+^V+@/+k)+k)+k)+dy+M0+$4+mD+]G+qy+a~@3~###$q{${v@r{$s{$t{$u{$v{$w{$x{$-Q+y{$B@$E[#s'@j>@@g+!t@pB.t$#s$#]c ]c &y 9v !4+e_@V: bk 3r kB@o!$Ih z{$y{+3,+A{$j}+B{$Bh.ac :] :] :] :] :] K> K> H{ H{ 4z X5 X5 4z 4z H{ Y_ q$ ^_ hd &' ^= U& t%$lW.C{$D{$|F+^K+E{$F{$G{$Aa cp An H{$D8@I{$H^ 5 2[ k5 _+#fr#b< i_ >3 R-@v[ [} ,8 <,@TH Zi@ G> <,@TH :e uG 9~ -E (0@vR@R5@$4@TT@$4@Kv tG UH s! kl ])#;1+zg@ZN+~-#J{$K{$L{$z1#M{$|/+<{#2O#e'#nq@]-+TK+>T@Gn+B@@1=@aX+[&@&w+N{$VA#UA#,k+,k+:6+,k+:6+,k+:6+,k+:k+!k+:k+!k+:k+!k+:k+!k+R0+xp+xp+xp+R0+R0+_T+_T+VH@ur+eK@|G+^G+^G+[T+s=@Nb+}&@}&@:k+:k+TY#H`#=m+=m+RO@RO@RO@RO@RO@RO@=m+2$@2$@2$@ZA+3&@3&@oB#W1#kc#Dy#>$$(@$rq#rq#qq#qq#l'$l'$O{$O{$4t#4t#*w#*w#@K#@K#Vy#Vy#w.$E~$q'$P{$B!$Q{$R{$S{$F~$B!$w0#w0#q'$q'$>X#>X#)X#)X#)X#)X#Xy#VY#K`#K`#!X#Xy#!X#K`#K`#K`#K`#K`#K`#K`#K`#K`#VY#VY#VY#VY#M`#qT#~X#6T#/l#/l#G7#G7#B0#B0#B0#G7##K#DB#Af#EB##G##K#H~$zf#L7#L7#L7#L7#Zy#Zy#Zy#L7#J7#:X##5##5#:X#:X#:X#/X#/X#/X#/X#:X##5#zf#H~$I~$IB#IB#IB#IB#IB#IB#IB#IB#CR#IB#Zy#Zy#C0#IB#Zy#Y`#6w#]z#]z#]z#]z#]z#]z#]z#St#St#iT#]z#]z#;z#+z#+z#}o#}o#[o#[o#[o#hT#hT#[o#St#hT#hT#hT#hT#hT#hT#St#_2#_2#_2#(2#(2#Tc#Tc#Tc#/5#/5#/5#/5#/5#/5#/5#/5#st#st#nT#{O#{O#^K#jV#jV#iV#!O#C!$mT#J~$T{$T{$D!$tt#;z#;z#;z#;z#;z#;z#;z#{E#+z#;z#iT#iT#;z#+z#rt#$K#O`#3*$y.$5T#6V#5T#y.$y.$O`#5T#O`#3*$k@$3*$y.$6V#6V#6V#6V#I7#I7#I7#I7#7V#7V#8V#aV#aV#0V#9T#9T#($$&Z#mV#}X#/$$/$$}X#}X#mV#mV#mV#&Z#&Z#($$($$($$8T#5*$K`#5*$&2##2#1I##;$w'$w'$#;$A0+A0+}T#z0+z0+Y3+hd+-|+1[+#2+C:+ @#oq#1(@Nn+:T+l;@Ml+H,+Ml+mI+38+38+8)$>]@%!@8s#Ip#s9#@q+>'@Kn+G)@G)@$q+$q+lI+{3@2V#zb#d~@zp+,(@D)+Y_@m>#U{$t[#V{$e]@ms+W{$X{$Cm /d 7F ;b _e Y{$Z{$Y{$cs RC uG SC UH SC uG ;E %2@%2@%2@%2@%2@%2@%2@%2@||@}|@}|@||@||@1|@{M lI@WC@8j#Qw#Qw#8j#c2 R} U-@U-@T-@T-@U-@c2 46 _} ;[ w[ J0 J0 I^ ze *M dp 4^ H5 4^ *M I^ 3q 3q I^ U: HW.[: j_ X]@;J }: U: z5 F( j1 uc z%@bv H( r8 wO+@I+3V b6 `{$$=@i+# ]$.]$.]$+]$M/ @]$EH.$r)@0>$$]$v~.%]$a>$%]$a>$%]$a>$%]$35+ko.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.k#+2<@&]$*]$E- E9.cP =]$f7@-]$;]$>]$4O#,]$']$)]$!]$~]${]$a*$]]$kV@a1@^]$/]$(]$`~$_]$:]$<]$[]$[]$J$$ -$Z'$c&$u<#J(#m>$K$$|;$5;$$K@o>$Vu#0b#5e#}]$J+#|]$1]$2]$3]$4]$5]$6]$7]$8]$9]$0]$a]$b]$c]$d]$PN e]$f]$g]$h]$i]$j]$k]$l]$m]$n]$TM#s $o]$p]$2~$q]$r]$s]$s]$t]$u]$v]$3)$w]$+~$Xu#(L+wG+n(@9{$$}@h-$&E+`I++q+ q+t9#hh#yb#c&@b&@a$@L@@L@@Z.@Z.@w)+B@@x]$B@@B@@P,+P,+P,+*>+;B+8$@8$@^K@6&@6&@j#$Tm#8&@4 @0G+0G+0G+0G+9G+9G++=>+=>+=>+zI+zI+zI+{-+>T@x)+x)+x)+3 @f^@;B+Y.@Y.@/w+(w+(w+&N+(w+_w+my+K@@K@@K@@e^@a&@a&@*9@*9@H6@H6@G6@K,@-9@sp+&>+_/+ei@)'$bF@y]$z]$9F.bF./k@K0 1t W' &P 'm R#@A]$B]$3^#3q@)g@zm.13+=L ZY ZY yj+yj++$+)L.ZY Z z<.z<.7}.7}.7}.7}.8}.8}.8}.8}.8}.8}.", "$~.$~.$~.$~.$~.$~.$~.N6 N6 N6 N6 N6 N6 N6 1b r& ]* ]* ~* 4K@4K@yT.yT.U5.ce X)@X)@}{.}{.V>.gN.oG.w8 }9.5# 9* x. m~ c~$J&.e.+]l r= pd@C]$9m Tx@#8@FT#%/#D]$l7#*,$cp+m;@<6+j)+s)+%k+Eg+R3+Q3+Q3+R3+Dg+Rl+Rl+di+Dg+&k+>k+&k++_+>k+ir+(+@ir+ir+ir+dy+-2+$4+_k+=m+}&@I6@Tt+}T+ur+:x@fh#<&@:&@FD+fD+z@@z@@z@@z@@PK+PK+ay+ay+(T+(T+@E'#2v@pB.Tq@]c 3L.3L.st OW@3q T[ ]*@}: w[ P]$CN Q]$yT.|;@jM#R]$l#@Z^ ac :] :] :] :] :] K> K> G{ G{ 4z X5 X5 4z Q6 G{ .* &' hd V5 P6 |* [I ;L 2] he#g`#LD.S]$T]$U]$V]$M0 cp W]$Au#yS+wS+/;#z/ 2[ 2[ +|#ud#ud#+|#Qh Gn [} S-@ZA :)@:e Rx@9~ }f E'$5'$G'$G'$u~$UT@Ox@0~ c2 [} G> }C TH UH UH Yr tG tG <|@v! [|@}A b~ cN@$4@rG Yr s! kl ^)#X]$B(@L+@Y]$5w+Z]$9T+`]$YR# ^$|T+]-+CI+:/#BI+W=+*(@.^$+^$@^$#^$$^$%^$(f#LP#n=#,k+,k+,k+,k+,k+,k+,k+,k+!k+!k+!k+!k+!k+!k+!k+kr+xp+xp+xp+xp+R0+R0+_T+_T+}T+}T+|G+|G+}G+^G+^G+t&@Nb+}&@}&@:k+:k+TY#H`#=m+:k+=m+RO@RO@RO@RO@=m+:k+ZA+ZA+ZA+ZA+2&@2&@cc#cc#cc#cc#(@$(@$X#>X#)X#)X#)X#)X#Xy#VY#K`#K`#!X#Xy#!X#K`#K`#K`#K`#K`#K`#K`#K`#K`#VY#VY#!X#!X#ci#M`#~X#6T#/l#/l#G7#G7#B0#B0#B0#G7##K#DB#_l#Af#EB##G#Cc#zf#K7#K7#K7#K7#IB#IB#IB#K7#J7##5##5#Dc##5#:X#/X#/X#+5#+5#+5#+5#/X##5#zf#Cc#C0#C0#C0#C0#C0#C0#C0#C0#IB#Zy#$K#$K#C0#C0#Zy#Y`#tt#;z#;z#;z#;z#;z#;z#;z#St#iT#iT#]z#]z#;z#;z#+z#}o#[o#hT#St#St#St#hT#[o#St#hT#[o#[o#[o#[o#hT#St#(2#(2#(2#Tc#Tc#/5#/5#/5#]5#]5#]5#/5#/5#Tc#Tc#Tc#tt#tt#{O#{O#{O#{O#>M#>M#C!$C!$mT#mT#J~$J~$T{$D!$6w#]z#]z#]z#]z#]z#]z#]z#~5#+z#+z#;z#;z#+z#+z#ot#$K#5T#y.$O`#6V#(X#5T#y.$y.$5T#6V#5T#3*$k@$3*$O`#6V#6V#6V#6V#I7#I7#I7#I7#{X#{X#aV#aV#0V#0V#0T#0T#mV#}X#/$$/$$/$$/$$}X#mV#mV#mV#mV#mV#&Z#&Z#($$($$7T#qT#qT#+;$]>$]>$+;$,X#1I#w'$w'$#;$^>$}T#z0+z0++K#'|+4[+2[+W3+C:+;k+Xl+0X+by+^V+-'@SA+YM@YM@fp+o{$o{$*^$%!@%!@8s#8s#8s#`I+`p+,P+mI+lm+lm+!G+fp+u)+)-+H:+G$+d~@)}@+h+Nu#P$+m[+>I@Nj# /@ n+,f#X^#b@}|@||@%2@%2@dP@R5@R5@||@}|@1|@}|@}|@3|@0~ _7 46 _} Qw#Q} T-@U-@Yq V-@Yq T-@T-@R} Q} (} 46 ;[ >[ 3q 3q 3q J0 I^ D/ ze 4^ 4^ dp ze 3q jB V: ;J 6Y.<: j_ 56 T[ }: k< U: }7 }7 |7 5m |7 bv ^c j .B%.By -m hF+-^$;^$ ]$Mo++]$>^$M/ M/ QD+>F+rK.#]$b>$v~.0>$a>$a>$0>$v~.v~.v~.0>$a>$);$);$);$);$4q@ko.Rx.Rx.Rx.Rx.Rx.Rx.Rx.%U.%U.%U.%U.%U.%U.%U./w. u.E- ,^$YJ+>k '^$)^$!^$~^${^$]^$,'+%W#^^$[V#/^$(^$_^$:^$<:@o(@ J+<^$[^$(]$}^$|^$1^$<]$2^$3^$3^$I$$`=$ -$J$$q3#R]#K$$4^$|;$.D#sM@E,$Vu#0b#5e#XG#!s#&_#5^$6^$7^$8^$9^$0^$9]$a^$b^$c^$d^$e^$f^$g^$h^$i^$j^$k^$l^$m^$n^$o^$p^$q^$r^$s^$t^$uT+U)$U)$u^$q]$@H#@H#v^$w^$x^$3)$y^$+~$oR+b4+Qd+z^$[T@#}@nk+`r+`p+28+NF@LF@L,@!B+-(@O,@0$@Z.@Z.@4 @ny+w)+B@@x]$B@@B@@P,+P,+P,+P,+8$@^K@mq@k#$Tm#Tm#2%$6&@8&@4 @0G+0G+0G+0G+9G+9G+lX++=>+=>+=>+=>+zI+{-+{-+>T@>T@x)+m+z[+A^$B^$C^$AO.W} ~y 86 ()@D^$D^$E^$N8#F^$(P.+1#;o@35+vn.@$+=L KB ZY yj+oA+nA+vM.ZY z<.7}.8}.8}.8}.8}.7}.8}.8}.8}.8}.8}.8}.", "$~.$~.$~.$~.$~.$~.$~.N6 N6 N6 N6 N6 N6 N6 1b )* Jl !* !* U@.U@.=$.=$.U5.ce X)@hY.+Q }{.G^$gN.oG.w8 L_ W+ g+ j* 9w+%B#NY H^$s;.r= V:#d[ ;} Lt An@FT#I^$J^$K^$7G#]-+P,+O,+!]+Tl+d~+%/+$/+7~+$k+`(+di+Rl+Rl+Dg+Dg+&k+>k+@_+&k+>k+ir+lc#fi+Xl+>k+dy+$4+Lb+-2+=m+}&@I6@Tt+}T+ur+:x@fh#<&@:&@FD+fD+z@@z@@z@@z@@PK+PK+ay+ay+ay+ay+tI+(t#`M+/P+nI+nI+oI+oI+Ht+Ht+gp+#w+dr+nI+Ft+~P+}R+OK+OK+}R+uI+WA+<&@|R+fD+fD+|R+:&@FD+z@@1V+z@@fD+fD+fD+1V+y@@4X+N@+N@+N@+(f+/_+/_+/_+(|+Q0+f~+P0+qy+qy+P0+)B+)B+6X+6X+6X+A$+A$+A$+A$++w++w++w++w++w++w++w++w++w+Jn+6X+A$+A$+A$+Jn+B$+X1+']+']+Y8@8d+ o+ o+ o+s~@kD+ok+ok+ok+`p+`p+`p+`p+ 5@^'$E]$FS#wU#FS#L^$E]$y|#W5+&E+&E+`I+tG+km+:o+(G+(G+(G+(G+#/+rD+rD+Xg+_k+Qn#si+:6+e~+SA+Jn+M,@3~#x$+PF@~v@H@+M^$N^$O^$P^$Q^$w{$=N+7W.R^$B[#S^$o~$j>@}-@3v@pB.Tq@uo@3L.~d@1t Ej s T[ 66 yy s) Cm Vr T^$EY#U^$D0@V^$zT.ac :] :] :] :] :] K> K> 4{ G{ 4z X5 X5 4z Q6 4{ a# P6 V5 P6 I{ [I ae.C~+]I.W^$7F+X^$Y^$Z^$`^$q- eM+6K+AS+Am 2@@i{@l{ dp j'#H'$ud#b< /$./$R1 v[ S-@.r :,@s! :e .~ 9~ }f R5@(0@E'$dP@,P Ev@8u#jx 4' (1 Zr j.$uG hB hB j@#6F 7G@}A D@$cN@+n@#~ +n@yK *8@X:@s! kl +/$[N.{`+[`#{f#@/$Z+$U@+#/$$/$%/$;K@zI+[V+}V+:/#Q_@D&+&/$*/$rb+=/$#^$-/$(f#LP#<&#jr+jr+jr+jr+jr+jr+jr+jr+St+St+St+St+St+St+St+St+xp+xp+xp+xp+R0+R0+_T+_T+_T+_T+:V+|G+}G+}G+}G+`+#Nb+}&@}&@:k+:k+TY#H`#=m+]_+:k+RO@}&@}&@RO@:k+]_+dy+dy+YA+YA+2&@By#kc#kc#oB#oB#Tn#(@$/$>/$+G#+G#@G#@G#,/$,/$&^$w.$s=$0,$'/$)/$S{$!/$~/$F~$w0#dt#q'$q'$>X#>X#)X#)X#`1#)X#Xy#VY#K`#K`#!X#Xy#!X#K`#VY#VY#VY#VY#VY#VY#VY#VY#VY#!X#Xy#OP#@I#^l#J`#~X#~X#~X#.5#.5#H7#H7#H7#.5##G#di#/K#/K#Af#yf#zf#zf#K7#K7#K7#K7#IB#IB#IB#K7#L7#Dc#zf#zf#zf##5#/X#+5#{/${/$]/${/${/$/X#:X##5#$K#$K#$K#$K#$K#$K#$K#$K#Zy#HB#`y#HB#Zy#C0#Zy#Y`#st#+z#+z#+z#+z#+z#+z#+z#iT#iT#]z#]z#]z#]z#;z#;z#St#iT#]z#]z#]z#iT#St#hT#St#hT#[o#}o#}o#[o#hT#St#(2#Tc#Tc#Tc#/5#/5#]5#]5#{5#{5#`7#]5#Tc#(2#_2#_2#hV#hV#{O#{O#{O#{O#~O#~O#^/$D!$mT#mT#J~$J~$J~$mT#jT#St#St#St#St#St#St#St#;z#+z#~5#~5#~5#~5#+z#tt#`y#6V#O`#5T#(X#b@$6V#5T#5T#6V#(X#6V#O`#3*$y.$5T#6V#6V#6V#6V#I7#I7#I7#I7#]X#^X#0V#0V#0V#aV#aT#aT#f@$.;$.;$.;$f@$}X#mV#&Z#}X#}X#}X#mV#mV#&Z#&Z#&Z#6T#qT#qT#8T#0T#$2#+;$,X#1I#1I#@;$#;$^>$Ty#Ty#5V#@G#Y3+//$(/$=_+Kg+:C#1(@ip+(G+{G+]G+6X+T{@T{@6X+^'$^'$_/$_/$:/$:/$:/$:/$tG+tG+8)$O3#km+:o+:o+^V+o0+s~@f~+pd+Yv+m9@A;@w=$R3#E_+sL.|-+pZ.@{@ 5i *c }/$|/$Iu 1/$1/$Au Au Au Hv Ux qI@Tx 7G@rG s[@s[@cP@cP@es es es s[@`:@+<@+<@Z:@ <@T:@WC@(} _} Q} U-@V-@V-@V-@Yq V-@R} c2 T-@Qw#m| (} Ti >[ V: jB 9Y jB V: 3q J0 D/ *M 4^ dp I^ V: V: }: 6Y.<: j_ X]@;J }: k< U: F( }7 av )y 'y )y RM.J5 px Ay L8 By %I+-^$7S+U@$-U#|O+M/ 2/$:M+y- 3/$#@$c6+Bd+4/$8f+8f+4/$Bd+b>$Bd+4/$8f+5/$8f+4/$Bd+~X@cI+%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U./w.D- S9.lE.lE.lE.6/$bJ 7/$u@+8/$9/$$*+0/$a/$b/$c/$d/$:`#q{$_h+n(@ez@<^$e/$}^$f/$g/$h/$i/$2^$3^$3^$&#$c&$M*$j/$k/$q3#4^$l/$5;$m/$ ~#|%$Vu#5e#Vu#G##n/$o/$p/$q/$r/$s/$t/$u/$nS#v/$w/$x/$y/$PQ#z/$A/$B/$C/$D/$E/$F/$G/$H/$I/$J/$2X@K/$L/$M/$M/$N/$S<#O/$P/$@H#Q/$R/$S/$T/$:!$U/$pT+rM@Rd+sf+V/$[T@#}@O&+`r+Zp+>'@NF@LF@a~@y;@d^@b~@0$@Z.@4 @0G+0G+P,+3T+W/$x]$x]$T.@T.@mX+mX+mq@k#$X/$Y/$Z/$j#$2%$7$@9=@O)@O)@O)@>B+>B+>B+lX+lX+lX++=>+=>+zI+>T@hX@hX@>T@9G+lX+P)@>B+*>+;B+_w+my+ny+ny+_w+my+ny+4 @0&@0&@a&@P,@a&@a&@*9@*9@gY#gY#G6@K,@|]+tD+qd+5 @fi@`/$ ($]{+.($+($|} jB u' @($#($$($ee#x/@F;$%($ [#9 +-V@wn.@$+O4 KB ,v.oA+U/@&($):+ZY z<.8}.Rx.Ov+Rx.8}.8}.8}.8}.8}.8}.8}.8}.", "$~.$~.$~.$~.$~.$~.$~.N6 N6 N6 N6 N6 N6 N6 t).!& w* !& Z& Z& 2c 2c 2c .n @n (j._j._j.=H.Sl *($oG.$5 >' U+ A ur.Cy+ T#tD.=($s;./W+uj@pd@;} ss IR@8:@-($&,$s>#j<@;($6=@3{#7d+Z(+Tl+~]+8~+k)+8~+`(+di+~/+Rl+Dg+Dg+&k++_+@_+&k+>k+ir+lc#fi+Xl++_+gi+$4+Lb+-2+=m+}&@I6@Tt+}T+ur+7X+fh#fh#:x@(P+Kl+PK+z@@PK+PK+PK+PK+ay+ay+ay+}R+(t#uy#uy#(t#Gt+nI+dr+#w+~G+~G+!P+Ft+@w+tI+Ft+(T+ay+}R+}R+ay+uI+WA+&t@:&@|R+|R+:&@:&@FD+z@@1V+z@@fD+FD+Kl+uI+0y+T{@<6+O,+O,+%>+u)+f~+f~+Q0+Q0+P0+P0+qy+qy+P0+)B+:V+YM@):@Ll+qy+qy+P0+b$@b$@P0++w+Ft+Ft+Ft+Ft+Ft+Ft+fp+!P+cr+Ft+cr+!P+iD+X1+iV+iV+T&+$>+'-+'-+):@):@M&+'G+#q+#q+#q+#q+`p+`p+ 5@+s+mW#>($lW#>($mW#mW#W5+ s+&E+Zp+&E+@q+km+!G+^V+{G+(G+q;@rD+nD+qD+s=@$4+:6+_6+XA+o0+Ml+jD+iD+pk+}o+>7@w$+J@+EI+mz@,($'($)($!($~($WS@{($8M@rK@s'@&N@E'#jR.]($|L.QM.V2@Xk@o_ 7s *2@CW+}@@^($/($P3 +$$./$(($_($ X+[3+x% ac 5[ :] 5[ :] 5[ K> ac J- &5 H{ {_ 24 W_ G{ 2% P6 [I |* !I.{p+;L @P/+,{+n~+,Z#4($5($%/$~K@{-+AI+[V+}V+&(@Q_@6($&/$%:#rb+7($8($fc#%w+ub+=:@ m+ m+vp+ m+vp+ m+vp+lp+^/+St+^/+St+^/+St+^/+^/+xp+xp+xp+R0+R0+R0+_T+_T+b$@)B+:V+:V+}G+jc@jc@Pn#Nb+}&@}&@:k+:k+TY#H`#=m+]_+{/+V4@hc#hc#V4@{/+_k+Xg+gi+dy+3&@2&@ic#4,$4,$W1#Ey#Tn#Tn#$ O#@I#/l#J`#~X#~X#.5#.5#H7#H7#H7#.5#5@$~X#aV#bV#_l#EB#zf#Dc#Fq#Fq#Fq#G0#G0#G0#qt#G0#Dc#zf#Cc#Cc#zf#Dc#:X#+5#{/$]/$]/$]/$]/${/$'M#R`#HB#HB#HB#HB#HB#HB#HB#HB#HB#_X#Qt#`y#Zy#C0#Zy#)M#ot#~5#~5#~5#~5#~5#~5#~5#]z#]z#]z#]z#]z#]z#]z#]z#]z#;z#+z#+z#+z#]z#St#hT#St#hT#[o#|o#|o#[o#hT#St#iT#iT#iT#]z#]z#;z#;z#;z#^z#{E#~5#;z#iT#hT#[o#}o#jT#Rt#^K#{O#{O#nT#3T#3T#a($^/$D!$mT#C!$C!$lT#>M#`q#_2#hT#_2#hT#_2#hT#_2#]z#`7#~5#b($^z#{5#+z#]z#`y#$K#Zy#$K#`y#_X#HB#Zy#Zy#HB#`y#HB#C0#IB#C0#$K#6V#6V#6V#I7#I7#I7#I7#`4#c($d($9V#0V#0V#aT#8T#8T#d,$d,$e($e($f@$}X#mV#&Z#/$$/$$}X#}X#mV#mV#mV#&Z#mV#qT#qT#8T#0T#0T#+;$VY#1I#1I#@;$$;$,X#^>$>X#Ty#yB#@G#f($//$g($(/$h($}1@ic@-]@q;@gK@A$+0y+4X+pk+xU#nW# 5@^'$:/$o{$o{$p{$;'$;'$;'$;'$5X+:R+:R+:R+%/+7~+Zg+%>+ak@_/+5]+[f+}k+q'@)>+sz@e!@/B+i($M9#&b@9F {*$8F j($:0 -b k($l($m($n($o($Nw Vx v! }A tG es cP@cP@cP@cP@s[@s[@s[@`:@Z:@Z:@.<@+9 _7 z&#(} Qw#T-@V-@,8 Sr Yq R} V-@R} c2 c2 _} XD#M1 ZG@>[ 1/ O#@ep ep O#@eF.1/ 1/ m{ mT.mT.m{ R9 R9 U} HW.<: w[ >[ ;J }: k< Fh J0 F( p_ `A f{@V!@)y ya AJ.o0 b] Y7 &9 [K+p($8S+!$@|O+M/ q($r($'t+k/@7B.a/+{B@b @wX+wX+b @{B@a/+b @_Z@=T+_Z@3q@;o@9 +zm.cI+%U.%U.%U.%U.cI+cI+cI+]! )> )> )> .d+.d+.d+y'@s($Y0.t($8m.`=.u($v($w($x($y($z($K^$A($B($9k#-1#C($q{$t=$~a+}]@zq@D($dK@[^$E($1^$F($G($H($3^$3^$a&$L*$Z=$I($K(#&#$J($K($L($7B@,k#.~#pT+%T@XG#p>$(H#M($N($Lf+O($P($Q($bU#R($S($T($U($V($dU#W($X($Y($Z($`($ _$._$x+$+_$@_$#_$$_$%_$&_$Z(#M/$*_$=_$S<#-_$-_$P/$;_$>_$T/$+F#6p#f#$nB+s$@9m+|h+Pi+Ri+Si+Yp+`r+#q+28+mm+pk+N)@d^@b~@K@@4 @O)@>B+0G+mX+}z@sb+`[#`[#C@@C@@=B+9G+ZK+,T@,_$,_$'_$)_$!_$EM@mq@>B+O)@>B+>B+lX+>B+lX+lX+++=>+=>+:P+zI+>T@hX@hX@>T@9G+ZK+R,@P)@0G+;B+my+my+4 @4 @my+my+4 @K)@6o@fz@{k@#9@#9@#9@fh#fh#:x@gY#G6@K,@Sn+S1#n;@b=#)}@Y<#~_$0!+{_$yc@i&@Dj w*@]_$^_$]_$/_$c$#~0 (_$T3#tJ vn.zm.=L O4 KB ,v.)D+A_@4!$.d+,v.@$+Rx.NM+%U.NM+Rx.13+8}.13+8}.13+8}.13+", "9c 8c 9c E7 E7 7c 8c dd dd g~ E7 E7 7c 9c 9c t).t).t).t).t).N6 N6 N6 .h..h..h.$~.$~.sk sk sk <].*($.h.~& f Z* d/+__$fZ+:_$9J#<_$[_$$F.NH 1C@.U@*>#}_$|_$1_$2_$(/#6($Z[#P;@HZ@2P#R3+0d+9~+-:@Fg+Fg+Fg+Fg+Fg+Fg+Fg+: @+_+&k++_+ir+3&@3&@(+@Sl+<]+Yg+od+Mb+Nb+Nb+)B+)B+~P+~P+~P+(T+L,@L,@L,@(T+}R+fy+ur+VH@VH@ur+ur+}T+_T+}T+}T+ur+ur+VH@oe#o;@P0+qy+Ll+Ll+qy+P0+_T+ur+o;@#k+.B+.B+.B+.B+.B+.B+FD+wI+wI+Jl+:&@:&@<&@<&@Kl+Kl+Kl+Kl+ay+(T+A$+6X+6X+6X+6X+6X+6X+6X+6X+6X+(T+~P+Ft+cr+Ft++'-+Zg+O0+N0+gK@q;@q;@Mn+Mn+Ht+Ht+ip+ip+^V+$w+lm+mI+Kn+G)@$s+W1+ew+ew+~-@K&+79@!-@6~#ry+A=@Vi+3_$jk+am++s+#7@4_$*^$5_$6_$6_$7_$8_$p{$/u+Yp+4h+x&@M3+mI+)P+-'@]G+/G+)B+s=@Mb+9X+cy+mD+mD+#/+(G+^V+^V+^V+$w+lm+)P+ep+N,@*7@|6+&R#- +A;@p'@sc@IG#+<+-z@Qv#kh#YD.v8+k>@iR.t7 YG@9_$0_$ak#3L.aj *4@(( {4 {4 a3 Ii $S |-@a_$D$ b_$c_$ie .s.o^ l& p: `Y _y 5[ _y YY ~I.ll.EV..o =] U@ s# 0l+d_$:I+rG.e_$f_$g_$h_$g $~K+(K+i_$j_$k_$l_$m_$pr n_$M:@Da#o_$R#@N#@N#@!< PL@p_$f$#z0 _)@Jc Sj *! /,@Xr UH uG ds +y q_$r_$ds (7 N~#s_$t_$u_$z&#*0@*0@.<@X:@>b@6F j@#v_$5;#0s 79 7q w_$JH#v6 -h@o!$^)#;1+M+@@.@ZD.'N.8T@ja@ki@qG+x_$y_$UK+b^@I,@&9@&(@&(@q<@a^@Gl+Gl+&9@b^@*:#0e#C@@B@@}P+Pb+V&+1]+Pn+1]+Pn+1]+Pn+1]+lr+(|+|]+.B+-9@vr+^/+.B+:c@.B+fy+fy+}T+_T+_T+)B+)B+U_@/G+[T+[T+[G+[G+[G+`+#8X+=m+=m+RO@RO@}&@hc#|&@V4@2$@ZA+ZA+ZA+YA+YA+YA+/+@/+@/+@W1#W1#W1#Ey#Ey#z_$A_$6,$5,$B_$C_$1t#D_$w!$k'$w!$w!$C_$C_$u.$u.$u.$xB#wB#)E#'$$E7#|@$|@$E_$F_$A)$A)$A)$A)$1@$1@$)$$)$$)$$2@$zc#zc#zc#!>$ai#ai#Bc#]l#G_$/O#H_$/O#+o#z0#+o#z0#+o#z0#+o#z0#,w#~>$!X#VY#^l#^l#/l#~X#~X#J`#.o#G7#B0#WY#WY#H7#Z4#Y4#%Z#.o#7V#`4##5#zf#I_$I_$$5#Iq#%5#%5#U7#%5#_l#~X#~X#~X#6T#8V#{X#^X#`Y#`Y#`Y#`Y#`Y#`Y#(X#(X#_X#`y#HB#$K#Zy#C0#IB#$I#$K#$K#$K#$K#$K#$K#$K#)M#qt#)5#Kq#J0#J0#Kq#)5#Lq#:I#^E#^E#J0#J0#^E#^E#:I#_2#Tc#/5#/5#(2#_2#(2#/5#/5#(2#_2#(2#/5#/5#Tc#hT# r#`q#jT#hV#6w#6w#6w#hV#J_$rt#ot#st#tt#hV#jT#Rt#K_$@Q#L_$M_$;M#N_$-M#-M#L_$L_$L_$L_$L_$L_$O_$P_$hT#X`#(2#E.$Tc#a@$/5#a@$/5#a@$/5#T0#]5# 8#`7#`7#iT#hV#hV#hV#hV#tt#st#ot#ot#rt#Q_$R_$R_$Q_$rt#pt#IB#WY#WY#H7#lV#7V#`4#8V#8V#8V#8V#7T#8T#]>$$2#9T#/$$7X#S_$T_$U_$V_$U_$T_$.Z#T_$7X#S_$S_$7X#T_$/$$|X#@2#W_$@2#X_$Y_$@2#Z_$Z_$Z_$tT#)X#CB#AB#`_$zB#*Z# :$ 2#uT#z:+>_+;/+wT#`6@0x@[R+~G+Jn+In+5a@|$@ih# q++q+@q+`I+`I+`I+`I+38+38+.:$.:$+7@+7@+7@v~@[G+[T+U_@qy+y@@5T+(w++:$f>$j~+dZ.e,$,[#9e@s##k$+@:$7&$#:$$:$%:$&:$3j *:$=:$-:$;:$4`@Vx +z d.#u~$$4@tG tG tG rG r[@t! +~ t! >b@>b@Y:@+L@bP@.9 (7 +L@+L@.9 .9 .9 +L@O9 9 .9 .9 .9 @A@RT@uR@b.#(} *@.F`+G`+G`+k.@k.@k.@k.@F`+F`+F`+xa xa Re Re yb R9 w[ R9 M^ M^ M^ 1/ 1/ M^ 3q 3q V: V: jB jB jB 1/ 6Y.4^ H5 [/ 5 9j :m@>:$1O+2O+-t+,:$Ix+j, bt+w. @v@5q@ZU.5x+,b#lW.6x+dn+wM+F=+80+13+]! 6j+y$$jy.]$@Ea+5A.5A.M8@M8@ZW+y*$;~ U/@':$@4#@4#):$&D !:$~:${:$az ]:$Ep ^:$}-#/:$(:$_:$SX.20#+@#; +7a@k}@:u+Ni+N^@s3#.K@3k@V!#::$<:$[:$[:$vM@}:$|:$1:$2:$3:$4:$5:$6:$6:$7:$K*$.`#8:$B+$Dm#Gm#O##@ :$0:$a:$b:$c:$d:$QN e:$f:$g:$h:$i:$j:$bU#k:$l:$m:$n:$o:$p:$q:$r+@r:$s:$t:$+R#u:$v:$w:$r^$:H#x:$y:$z:$[J#A:$B:$C:$D:$E:$F:$G:$H:$I:$J:$K:$L:$Zr+h-$K2@jm+T;@lm+~G+cr+A$+0y+|$@5T+}=@,B+w)+$N+$N+Gn+U;+M:$Y=+N:$.N+RK+>T@>T@x)++,B+dB@@B+%N+-9@~k+O:$60#e0#o;@-:#7X+pe#uI+Sn+/f#U;+QA+u<@J.+P:$Q:$R:$K`+;J 3) #2@Rx #4@Bt 4G@S:$8f+T:$t#$tJ -V@35+13+13+i~ i~ d> )i.X0.ZY 8g.wn.=L wn.=L wn.=L wn.13+)g@13+)g@13+)g@", "9c 8c 9c E7 E7 7c 8c E7 E7 E7 E7 E7 E7 E7 E7 g~ g~ g~ g~ g~ g~ g~ g~ 7c 7c 7c E7 E7 g~ g~ sk 'K.*($uk F7 _{ 0* p^ 'a@ck+:_$Yh.U:$V:$W:$@@.rU.fs#X:$Y:$Z:$`:${/# <$.<$+<$s{#lJ#@<$Eg+0d+}1@J<@*k+@_+@_+@_+@_+@_+@_+@_+>k++_++_+ir+/+@3&@ir+Rl+_6+:6+Mb+Nb+8X+8X+:V+:V+~P+~P+~P+~P+hh#hh#hh#~P+ay+}T+ur+ur+ur+ur+}T+_T+}T+}T+}T+}T+}T+ur+ur+ur+Q0+f~+f~+u)+f~+Q0+vr+fy+.B+.B+.B+.B+.B+.B+.B+-w+FD+wI+wI+Jl+:&@:&@:&@<&@Kl+Kl+}R+}R+ay+(T+cr+!P+!P+!P+!P+!P+!P+!P+!P+!P+Ft+Ft+!P+!P+!P+cr+~P+_T+'k+#<$Y;#v'#7d+7d+vb+vb+od+9X+(G+(G+ip+ip+[R+[R+fr+fr+ip+ip+:o+lm+@q+,]@U;@L&+L3+:u+<$JG#,<$T8@l^#1k+%N@,N.'4+5e+ ^+ E#Sh g*$hP@'<$)<$!<$~<$+#+T5@{<$:u@0j W3@'z @<@]<$ A ^<$}3+0' L) C' 9e..^ S% R% o^ C' _y p] bc Ma (* J$ A* wz+/<$(<$_<$:<$<<$C9#[<$}<$G{$|<$1<$g!$8M+8M+No iS+oW+lM#Fc Hc Jd 29 wd#`:#p_$2<$f$#3g 0P@R-@R1 cw S} /,@_t Yr ;E uG qG ;E VH @|#^m {t D,#'p .<@mQ WT@2|@:|@7G@6F U^#5;#!a 79 3<$4<$m*$pb#5<$W3@;1@OB@6<$rm#%$#9L#Q]+:X@<-+RU#`u@xW#%9@&9@V[#V[#%9@F6@q<@q<@a^@a^@6~@H)@AD+AD+3R+3R+$N+m;@dp+_|+Pb+Pb+Pb+Pb+Pb+Pb+1]+1]+xp+@k+.B+.B+vr+vr+fy+#k+fy+fy+ur+ur+}T+}T+|G+|G+[T+[T+^G+^G+[G+Q;@Q;@`+#`+#=m+=m+RO@RO@}&@hc#hc#2$@2$@2&@2&@2&@3&@3&@3&@/+@/+@W1#W1#W1#W1#Ey#Ey#5,$5,$>$>>$E7#E_$z0+)6+>>$>>$>>$>>$v0#v0#2@$yc#yc#yc#4@$4@$4@$4@$7<$7<$7<$8<$8<$8<$8<$8<$9<$9<$9<$9<$9<$9<$9<$z0#QP#!X#5*$5*$M`#M`#~X#6T#~X#J`#.o#G7#B0#WY#WY#H7#Z4#0<$%Z#%Z#7V#`4##5#zf#I_$I_$Iq#Iq#6l#6l#Jc#hi#/K#7T#6T#6T#6T#8V#{X#{X#`Y#`Y#`Y#`Y#(X#(X#(X#(X#HB#HB#HB#$K#Zy#C0#C0#C0#$K#$K#$K#$K#$K#$K#$K#)M#qt#)5#Kq#J0#J0#Kq#)5#Lq#:I#:I#^E#^E#^E#^E#:I#:I#_2#Tc#/5#/5#(2#_2#(2#/5#/5#(2#_2#(2#/5#/5#Tc#hT# r#]K#Rt#^K#{O#{O#{O#^K#{O#{O#{O#^K#Rt#]K#a<$a<$@Q#@Q#L_$M_$;M#N_$-M#-M#M_$M_$M_$L_$L_$L_$L_$P_$_2#E.$E.$E.$0@$a@$a@$a@$T0#T0#T0# 8# 8# 8#MR#{5#;z#]z#]z#]z#]z#;z#+z#+z#~5#{E#^z#]E#]E#^z#{E#pt#$I#WY#WY#WY#.5#7V#6T#6T#8V#8V#7T#7T#&2#]>$$2#b<$/$$7X#S_$T_$U_$V_$U_$T_$U_$.Z#T_$7X#7X#T_$.Z#c<$g@$d<$@2#d<$Y_$e<$d<$W_$W_$W_$Z_$tT#)X#CB#CB#BB#f<$ 2#<$$ 2#*Z#A:+# $$ $gc@:a@%7@er+Jn+5a@VA+|$@LF@MF@.q++q+@q+@q+`I+`I+`I+38+8)$8)$+7@+7@+7@29@Ht+q;@]G+]G++w+(T+s<@0$@;m+rd+H$+! +[f+GM@qG+g<$<)#h<$D*$i<$j<$k<$l<$m<$n<$o<$p<$Mv dB q<$r<$u~$vR@-! tG sG rG X:@+~ W:@Y:@+~ t! ;! +L@RT@+L@]|@+L@+L@.9 .9 .9 +L@O9 9 +L@+L@+L@.9 @A@bP@[`@`V@Bn@s<$Nc Nc Nd 9_@9_@Nf s<$s<$s<$s<$s<$s<$s<$Re Re R9 R9 M^ M^ 1/ 1/ 1/ R9 R9 M^ M^ 1/ 1/ eF.[7 I0 }} HW.HW.k} :/ ^4 -;$t<$9S+u<$v<$pM+|t+xj r+w<$C* x<$SD+sh y<$=Y.qg 8n+:P.@A.8}.Yt.)D+z<$PC#A_@]$@Ea+5A.h]@M8@A<$A<$0@@0@@KE#cT@MK B<$C<$D<$E<$F<$G<$H<$I<$J<$K<$L<$M<$N<$E4#g)#<`#.N+d&@>3@%q+9>@nf+n(@M^@.K@/:@xH@xH@yO@O<$}:$vM@P<$+{$Q<$R<$S<$T<$:;$U<$U<$V<$W<$9&$ab#X<$Y<$tR+@)$Z<$`<$ [$.[$+[$@[$#[$$[$%[$&[$*[$9U+=[$-[$;[$>[$,[$'[$)[$![$~[${[$][$^[$.%@/[$([$_[$:[$N|#&_$<[$[[$}[$|[$1[$2[$3[$4[$g+$RG#N6#5[$Ns@6[$7[$8[$)i@(c@W5+J2@48+T;@km+~G+cr+A$+0y+0y+QK+L)@6o@,B+$N+$N+3R+Y=+9[$0[$X=+SK+SK+{-+{-+zI+=>+>K@)K@AM@V.@~K@8G+cB@9G+9G+9G+x)+x)+x)+x)+=>+=>+[V+[V+[V+[V+BI+[V+2 @2 @2 @2 @R)@R)@x;@x;@x;@x;@mq@^K@9$@8V@8V@8V@;B+P,+,B+!w+Wn+Zn+{k+bf#^i#%l#sD+p=$-:#-:#Vv#Kl+Sn+70#U;+QA+'5@9e@U-+a[$b[$%{ U: .;@.l Em c[$d[$,E 2!$e[$f[$g[$<9.)g@-V@13+@$+i~ i~ d> )i.X0.ZY 8g.wn.wn.wn.wn.wn.wn.wn.)g@)g@)g@)g@)g@)g@", "9c 8c 9c E7 E7 7c 8c 9c 9c 7c E7 E7 g~ dd dd g~ g~ g~ g~ g~ g~ g~ g~ 7c 7c 7c E7 E7 g~ g~ sk lI.*($oG.}9.GB ^@ 7{ h[$tD#:_$Yh.U:$i[$j[$vv cn u|@SD@k[$Z:$`:${/#/=@l[$m[$n[$=]@o[$@>+[9@J<@|}@On+&k+&k+&k+&k+&k+&k+&k+(+@>k+>k+ir+(+@(+@>k+di+Lb+si+]_+:k+sD+sD+sD+sD+)B+)B+~P+~P+~P+~P+hh#~P+(T+_T+}T+}T+}T+}T+_T+b$@}T+}T+}T+_T+_T+_T+_T+b$@R0+R0+Q0+Q0+Q0+R0+vr+fy+fy+fy+.B+.B+.B+.B+.B+-w+FD+wI+Jl+Jl+|R+:&@:&@:&@Kl+Kl+}R+}R+ay+(T+cr+!P+Ft+Ft+Ft+Ft+Ft+Ft+Ft+Ft+Ft+cr+!P+fp+fp+fp+!P+Ll+HZ@v'#=:@,k+vb+ o+!]+!]+-'@-'@^V+^V+5X+5X+29@29@[1@1}@ip+-]@Ht+!G++q+,'@,]@L&+nw+Wi++X #5e+]T. E#.x+F(@&>$t[$KM.sZ.~<$>|@6/+{<$td =$$l< >f#u[$v[$w[$x[$ F.EV.~I.+C.)O y% -^ _y /* /* (* U0 U0 U0 F- ,- y[$c! z[$A[$B[$C[$D[$AY#E[$F[$G[$uf H[$nO+lO+5_@n_$#; Gc h.@Gd x*@V' sb 2<$2<$I[$e< Qh P3 X-@R1 {1 <} @|#;c >p n| e{@Xr y, {1 }n J[$cw 'p Xr -! }|@}|@}|@[|@6F 6F T^#0s 7q 7q r$#tZ@`m@K[$L[$M&#Mj#M[${`+g#@[`#m[+4g@+x@BM#2z@N[$I4#&(@Gl+O[$P[$&(@F6@q<@;}@7^@a^@6~@6~@AD+AD+3R+3R+$N+[P+Qt+dp+Pb+Pb+Pb+Pb+Pb+Pb+1]+1]+=w+-w+#k+.B+vr+R0+vr+.B+fy+fy+ur+ur+VH@VH@p;@p;@^G+^G+}G+}G+jV@jV@jV@v=@`+#=m+=m+RO@RO@}&@hc#hc#2$@2$@2&@2&@2&@3&@3&@3&@/+@/+@W1#W1#W1#W1#Ey#Ey#qq#qq#qq#qq#C_$C_$C_$C_$k'$k'$k'$k'$C_$C_$[T#[T#.K#.K#)E#)E#I`#>>$'$$>>$)E#'6+)E#)E#I`#I`#v.$w0#'>$'>$yc#yc#W%$Xn#]$$|*$Q[$Q[$8<$8<$8<$8<$7<$7<$9<$9<$9<$9<$9<$9<$9<$z0#DB#5*$]>$]>$7T#qT#6T#8V#~X#J`#.o#G7#B0#WY#WY#H7#Z4#Y4#%Z#%Z#7V#`4##5#zf#$5#$5#Iq#%5#6l#>5#>5#*5#]@;'$;'$5X+~G+SA+SA+]G+A$++w+z$+-(@q8+e[+BD+sd+k9@J3+W[$t##Nq@X[$P'$Y[$Z[$`[$B5 }$.}$+}$@}$#}$[A d.#u~$u~$vR@-! -! sG >b@t! W:@Y:@(7 ;! Y:@(7 +L@@A@O9 (7 +L@.9 .9 .9 .9 +L@ 9 9 O9 O9 O9 +L@.9 RT@uR@y&#ry@a^ a^ s<$Nd 9_@9_@Nf s<$s<$s<$s<$s<$Nc Nc F`+Re R9 M^ M^ 1/ 1/ 1/ eF.R9 R9 R9 M^ M^ M^ 1/ $9 Bm i< >[ $9 T[ Gi i1 s`+$}$iU+H6 5t+LE.bv+gK+%}$4'.Jf.mA+SD+&}$$A.d* l- 4n+:P.@A.8}.Yt.)D+z<$Ae+A_@]$@Ea+5A.h]@M8@OU+OU+%.@%.@oA+c;@&$@*}$=I =}$a*.^J.-}$;}$>}$,}$'}$)}$!}$~}$E4#{}$I,@Gn+,i#Y}+Hy+mw+bB+L^@.K@j(@Fs@]}$yO@O<$^}$/}$P<$Z!$(}$_}$:}$4:$<}$[}$U<$}}$|}$1}$1Y#jW#&F#J+#$~#2}$3}$0:$4}$5}$6}$7}$8}$9}$0}$a}$b}$c}$d}$e}$f}$g}$h}$i}$j}$k}$l}$m}$.Q+n}$o}$p}$q}$r}$s}$t}$u}$u}$v}$w}$x}$y}$z}$_H#A}$Y%#B}$X<$H:$r9#C}$D}$E}$;i@@9@y|#g-$Y5+,P+km+~G+cr+A$+0y+uI+wI+{k@6o@,B+w)+P,+=B+F}$F}$F}$F}$RK+RK+>T@>T@+*>+ny+ny+ny+ny+;B+P,+w)+)w+Lt+Zn+&m+bf#(k+Ng+8X+]/+-:#Y+$-_#|R+oy+8c#Z=+QA+d>@G}$2F.H}$y-$!y U: 3) tt I}$w6 J}$Ct K}$b~$T:$L}$ k@vn.)g@@$+@$+i~ ,v.d> d> X0.ZY w8.zm.zm.zm.zm.zm.zm.zm.)g@)g@)g@)g@)g@)g@", "9c 8c 9c E7 E7 7c 8c 7c 7c 7c E7 E7 g~ g~ g~ E7 E7 E7 E7 E7 E7 E7 E7 7c 7c 7c E7 E7 g~ g~ sk mI.YL.oG.!1.W% n. Z:+M}$Y6 _~#N}$O}$Ip@V:$/B 9m ]Y.w}@P}$Q}$R}$S}$Np+T}$3d+U}$1a@V}$M,+p0+&3@<1@On+&k+&k+&k++_++_++_++_+/+@ir++_+>k+ir+ir++_+Dg+Lb+si+[]+:k+8X+sD+sD+8X+)B+)B+~P+~P+~P+~P+hh#~P+P0+b$@_T+_T+_T+_T+b$@P0+}T+}T+_T+_T+b$@P0+P0+P0+vr+vr+R0+R0+vr+vr+vr+fy+vr+fy+fy+fy+fy+.B+.B+-w+|R+Jl+Jl+Jl+|R+|R+:&@:&@Kl+Kl+}R+}R+ay+(T+cr+!P+Ft+Ft+Ft+Ft+Ft+Ft+Ft+Ft+Ft+cr+!P+fp+fp+)P+)P+jD+8d+oD#vb+,k+:6+kp+j)+Q3+Ln+$w+$w+$w+:R+:R+v~@v~@t~@hp+ip+_V+Ht+~G+28+,'@@Vy+]]$7@%<$W}$X}$Y}$!a+8m+{a+dB+W8+Xr+am+ s+ s+!^#!^#Z}$-i@!u+9m+5h+5h+6(@U;@G)@iD+_T+b$@qy+Ll+Zg+O0+^_+}]+R0+b$@)B+[T+/G+_V+Mn+-]@l;@l;@Ml+H,+X1+n0+lZ+~[+;<$F&+At+g)#1z@I3+hB@s[$DU.>/#rK@=@#3c#5e+KR.3O.;,$`}$ |$.|$ks +|$2 +@|$ F- 6 6 (= (= |$z[$,|$'|$)|$5M+!|$us ~|$O-@{|$v( e: s*$M:@p) Id E%@Gd 29 hQ#]|$k%#`}#e< Qh w' .' [} Sj hB _t |n ^|$/|$uy VH (,@7, <} 4' 'p VH e{@UH e{@<|@<|@<|@6F 6F V^#Gv /d Dm {*$(|$Xk@_|$cj :|$e<#$Y.+Y.<|$%*+}-+`@+O$+ek@e$@i)$:{#[|$q<@a^@O[$}|$&(@N_@q<@;}@7^@a^@7~@6~@AD+AD+=B+=B+P,+$N+:w+Qt+Pb+Pb+Pb+Pb+Pb+Pb+1]+1]+@k+up+:c@.B+vr+Q0+R0+fy+vr+fy+ur+VH@o;@o;@|t#|t#}G+}G+}G+jc@jV@rX@rX@Pn#v=@RO@RO@RO@RO@RO@V4@V4@2$@2$@2&@2&@2&@3&@3&@3&@/+@/+@W1#W1#W1#W1#Ey#Ey#Vl+Vl+Vl+-X#1t#C_$C_$B_$k'$k'$k'$k'$C_$C_$[T#[T#X3+X3+z0+)E#I`#I`#v.$I`#wB#,6+wB#wB#D7#D7#,>$,>$x0#'>$yc#xc#Xn#r=$||$||$9<$9<$9<$Q[$8<$7<$7<$7<$9<$9<$9<$9<$9<$9<$9<$z0#di#&2#$2#]>$7T#M`#~X#6T#~X#J`#.o#G7#B0#WY#WY#H7#Z4#Y4#%Z#%Z#7V#`4##5#zf#$5#$5#%5#%5#6l#>5#>5#*5#[X#0T#aV#8V#6T#6T#7V#`4#`Y#`Y#`Y#`Y#(X#(X#(X#(X#Zy#Zy#Zy#Zy#$K#$K#$K#$K#HB#HB#HB#HB#HB#HB#HB#Y`#)M#Kq#J0#J0#J0#J0#Kq#Kq#r'$r'$H0#H0#H0#H0#r'$r'$_2#Tc#/5#/5#(2#_2#(2#/5#/5#(2#_2#(2#/5#/5#Tc#hT#`q#Rt#^K#{O#{O#^K#^K#Rt#1|$1|$1|$=M#=M#R[$R[$a<$L_$L_$M_$M_$;M#;M#N_$N_$;M#;M#M_$M_$L_$@Q#2|$KR#St#(2#Tc#Tc#Tc#Tc#Tc#Tc#`7#`7#`7#{5#{5#Mq#Mq#Mq#^z#^z#~5#+z#;z#;z#;z#+z#~5#~5#~5#~5#~5#~5#~5#pt#$I#B0#B0#WY#.o#.o#J`#J`#8V#6T#7T#7T#+;$&2#]>$$2#/$$mV#&Z#}X#f@$.;$f@$}X#f@$f@$f@$f@$f@$f@$f@$S[$3|$Y_$Y_$e<$4|$4|$e<$X_$X_$X_$d<$d<$@2#W_$Z_$Z_$ 2#Z1#5|$Z1# :$6|$$ $7|$`6@0x@[R+gp+6X+VA+*4+[=@!B+!B+!B+a~@LF@mm+Dq@'@>'@+q++q++q+.q+%!@:o+!P+]G+]G+]G+6X+6X+mm+M,@']@q8+y9#Sx#<7@ei@>m+8e@G}$fD@Ow#2K#8|$9|$D;@V3@0|$a|$Iv o($.y b|$u~$(0@-E -E -! sG >b@t! W:@;! ]|@;! Y:@]|@O9 .9 +L@ 9 .9 .9 @A@.9 .9 O9 9 /d@O9 O9 O9 +L@.9 RT@uR@y&# ] )D+i|$KE#U/@6g+5A.5A.h]@h]@PS@PS@8' 8' yj+nA+a3@x1@iU.S'.j|$DM U'.k|$l|$m|$n|$o|$p|$q|$`u@r|$SK+[P+pd+5a@,'@3h+h}@j(@xO@xO@s|$vM@}:$/}$t|$u|$v|$v|$(}$Y'$w|$K*$x|$V<$y|$z|$|}$w|$A|$E,$ J#EQ#q>$B|$C|$D|$E|$F|$G|$H|$I|$J|$K|$L|$M|$N|$O|$P|$Q|$R|$S|$T|$U|$V|$W|$X|$Y|$Z|$`|$ 1$.1$+1$@1$#1$$1$%1$&1$*1$=1$-1$;1$>1$g+$0S#pR+NQ@/x@,1$'1$)1$(c@3g@+a@p{$h-$T;@,P+lm+fp+cr+A$+WA+z@@|R+{k@6o@|=@w)+,B+#a@bX+~k#1h#0e#AD+RK+>T@>T@T@{-+{-+{-+{-+TK+TK+TK+zI+zI+x)+x)+x)+x)+9G+9G+;B+;B+;B+*>+ny+ny+ny+ny+my+ d> +$+,v.w8.zm.zm.zm.zm.zm.zm.zm.)g@)g@)g@)g@)g@)g@", "9c 8c 9c E7 E7 7c 8c g~ g~ g~ E7 E7 7c 7c 7c E7 E7 E7 E7 E7 E7 E7 E7 7c 7c 7c E7 E7 g~ g~ sk kb.Pl +h.u& X% n. f( /1$(1$_1$|B.:1$d0+d0+u%.qK %<@h#@P}$<1$[1$}1$|1$11$21$31$(&@Ag+#}@&-+t~@<1@*k+@_+&k+&k++_++_+>k+>k+/+@ir++_++_+>k+>k+&k+di+9H#li+:6+[]+]_+]_+Nb+Nb+)B+)B+)B+)B+~P+~P+~P+~P+P0+b$@_T+_T+_T+_T+b$@P0+}T+}T+_T+_T+b$@P0+P0+P0+vr+vr+vr+vr+vr+vr+R0+R0+R0+R0+vr+vr+fy+.B+.B+-w+:&@tr+Jl+Jl+|R+|R+|R+|R+Kl+Kl+}R+}R+ay+(T+cr+!P+Ft+Ft+Ft+Ft+Ft+Ft+Ft+Ft+Ft+cr+cr+cr+!P+fp+)P+jD+j)+wb+kp+Yg+cy+o0+$k+%/+l;@:T+F,@F,@WH@WH@.:$WH@;'@:T+It+(G+er+!G+28+,]@3@![+U;+> +0r+S;++Ub+q>#!~#rK@4&#-@#v}@RK#81$91$01$hh =*+g9 =y x[ o<+Qe {#a1$b1$c1$t=+m` U5 d( u% o^ C& (* F- vi Y* ww.ww.ww.Q#$d1$e1$f1$g1$..$7.$h1$0M+Ot }> i1$p.@^( uS+`4 EW+Ca#Fc <@@Me <@@sb PL@p_$ <#e< Q3 Gn .r G> :t T} Xr UH +' cw cw :} n| uy n| 7, _,@e{@uG uG Yr _t ST@ST@5G@Tx Tx T^#9q 9q +$$^($ce@K&#j1$6K#R&#U{$mZ.J+@*S+Q/+k1$g<#5h#W,@C)+7G#a=#[|$q<@q<@}|$}|$q<@N_@;}@;}@7^@7^@7~@7~@AD+AD+=B+=B+mX+P,++&>+&>+&>+&>+&>+v)+v)+@k+up+:c@.B+vr+Q0+R0+fy+vr+fy+ur+VH@o;@o;@|t#|t#}G+}G+}G+jc@jV@rX@rX@Pn#v=@RO@RO@RO@RO@RO@V4@V4@2$@2$@2&@2&@2&@3&@3&@3&@/+@/+@W1#W1#W1#W1#Ey#Ey#1=$1=$Vl+-X#C_$C_$B_$B_$k'$k'$k'$k'$C_$C_$[T#[T#X3+X3+z0+)E#I`#I`#v.$I`#wB#My#wB#wB#wB#wB#,>$,>$'>$'>$2@$)$$Xn#r=$l1$m1$%K#%K#9<$Q[$Q[$8<$7<$7<$9<$9<$9<$9<$9<$9<$9<$z0#DB#5*$&2#&2#M`#ci#/l#J`#~X#J`#.o#G7#B0#WY#WY#H7#`4#.5#.o#.o#7V#`4##5#zf#Bf#Bf#%5#@o#@o#@o#Fc#SL#n1$9T#0V#8V#8V#8V#`4#`4#`Y#`Y#`Y#`Y#(X#(X#(X#(X#Zy#Zy#Zy#Zy#$K#$K#$K#$K#HB#HB#HB#HB#HB#HB#HB#Y`#Y`#J0#J0#J0#J0#J0#J0#J0#:I#r'$H0#$]>$/$$mV#&Z#}X#f@$.;$f@$}X#f@$f@$f@$f@$f@$f@$f@$S[$3|$e<$Y_$T[$q1$q1$T[$X_$Y_$Y_$X_$X_$d<$@2#W_$W_$ 2#f($5|$Z1#uT#6|$$ $7|$`6@0x@]V+gp+A$+|$@[=@vI+X{@-(@-(@-(@z$+a~@pk+[o+#r1$#g+s1$t1$7r wt Jv u1$&E E'$E'$-E -E -! tG rG r[@+~ W:@+~ t! +~ Y:@/d@+L@.9 .9 @A@@A@@A@@A@+L@O9 /d@(7 O9 O9 O9 +L@.9 RT@uR@y a^ s<$Nc Nd 9_@9_@Nf Nc Nc Nc Nc Nc Nc Nc G`+xa M^ 1/ 1/ 1/ eF.eF.eF.R9 R9 R9 M^ M^ 1/ 1/ $9 $9 56 Pg <7 Dj 1t Hi w/ -J v1$w1$n%@|O+1&$x1$e|$|&$.]$y1$dw.|T.-Y.m- _p+3n+!N+@A.Rx.)> )D+z1$NZ@U/@6g+5A.5A.h]@h]@PS@PS@f!+f!+i~ ):+;e@A1$B1$S'.M~.BM C1$2f.=O.D1$E1$:W.2_$F1$c=@9V@W&+_|+[6+W1+M3+~3@gq@uM@s|$s|$G1$H1$H1$v|$u|$I1$J1$S)$J1$K1$L1$M1$W<$N1$O1$P1$7:$Q1$R1$8x#PK#S1$T1$U1$V1$W1$X1$Y1$Z1$`1$RQ# 2$.2$+2$@2$#2$$2$%2$&2$*2$=2$-2$;2$>2$,2$'2$)2$M $!2$~2${2$]2$z:$^2$/2$/2$(2$_2$:2$<2$>1$ux#Y%#--$|A#[2$}2$|2$8[$+a@(c@C6@-i@o{$`p+ok+mI+lm+fp+!P++w+WA+z@@FD+L)@}=@ED+T@>T@>T@>T@3 @3 @*>+*>+;B+;B+my+my+K@@Z.@Z.@ny+ny+ d> nA+i~ w8.O4 O4 O4 O4 O4 O4 O4 13+13+13+13+13+13+", "9c 8c 9c E7 E7 7c 8c dd dd g~ E7 E7 7c 9c 9c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c E7 E7 g~ g~ N6 oG.Pl +h.u& X% #@ x] 'D+62$;B.72$82$92$02$7| @@.a2$>1#b2$c2$d2$e2$6r+f2$KK+g2$ai+Y}+iV+(V+$!@1(@Ol+Fg+@_+@_+&k++_+>k+>k+(+@>k+@_+@_++_+>k++_+Rl+3f#gJ#:6+si+[]+]_+Nb+Mb+)B+)B+)B+)B+~P+~P+~P+~P+b$@_T+}T+}T+}T+}T+_T+b$@}T+}T+}T+_T+_T+_T+_T+b$@R0+R0+vr+vr+vr+R0+Q0+f~+Q0+Q0+R0+vr+fy+.B+.B+-w+:&@tr+tr+Jl+|R+|R+FD+FD+Kl+Kl+}R+}R+ay+(T+cr+!P+Ft+Ft+Ft+Ft+Ft+Ft+Ft+Ft+fp+!P+cr+cr+cr+!P+fp+jD+7~+xb+xb+xb+o0+8~+~]+~]+/V+/V+S;@S;@;]@;]@N<@;]@G,@'@,]@,]@mw+lf+Sd+Y;@#U,+.*+|f+g&@3_+Oe@a]+*e#j2$>{#k2$dD@dD@MP.l2$m2$91$#;@t$#%y 7^ -#F&#n2$T5 o2$p2$@d+w4.&% &% i# F- 6 Y* j]+q2$r2$Q#$s2$;|$t2$u2$=v+L!@/K+v2$w2$O-@x2$3o tS+>2 zf yW+2[ N#@Hc <@@29 Fd hQ#PL@f$#f< Q3 _)@2' .r G> G> :t y, ds ;E _,@VH e{@fw 4' 7, (,@y, Xr qG e{@UH W^#Tx cB Tx pI@V~#V~#9q w_$^($y2$K&#z2$-[@=[@*e#sZ@/k#H+@G+@-{+A2$>i#1|+ *+(R#:{#B2$6%$&(@&(@}|$C2$N_@-}@;}@$1@%1@7^@8~@7~@RK+AD+=B+=B+mX+P,+w)++&>+&>+&>+&>+&>+v)+v)+=w+-w+#k+.B+vr+R0+vr+.B+fy+fy+ur+ur+VH@VH@p;@p;@^G+^G+}G+}G+jV@jV@jV@v=@Pn#}&@}&@RO@RO@=m+1$@1$@2$@2$@2&@2&@2&@3&@3&@3&@/+@/+@W1#W1#W1#W1#Ey#Ey#Vl+-X#-X#qq#C_$B_$B_$m'$k'$k'$k'$k'$C_$C_$[T#[T#.K#.K#)E#)E#I`#>>$'$$>>$+K#.K#)E#)E#)E#)E#v.$v.$w.$)$$)$$0,$r=$r=$l1$l1$9<$9<$9<$9<$Q[$Q[$Q[$Q[$9<$9<$9<$9<$9<$9<$9<$z0#2T#VY#5*$5*$ci#^l#/l#J`#~X#J`#.o#G7#B0#WY#WY#H7#`4#.5#.o#.o#7V#`4##5#zf#Bf#Bf#%5#@o#@o#Fc#Fc#SL#[X#0T#aV#aV#8V#aV#{X#^X#`Y#`Y#`Y#`Y#(X#(X#(X#(X#$K#$K#$K#$K#Zy#Zy#Zy#Zy#HB#HB#HB#HB#HB#HB#HB#Y`#D2$^E#J0#Kq#Kq#J0#^E#^E#^E#:I#H0#$/$$mV#&Z#}X#f@$.;$f@$}X#}X#/$$f@$f@$f@$f@$/$$|X#3|$Y_$Y_$e<$4|$4|$e<$X_$e<$Y_$Y_$X_$d<$@2#W_$F2$ :$G2$Z1#<$$6|$H2$I2$V[$`6@0x@]V+#w+A$+4X+vI+2V+6T+J@@e^@e^@0$@X{@M@+ry+%q+%q+/7@[o+[o+mm+mm+6X+uI+Q0+b$@P0+!P+)P+#q+U;@#J2$#g+K2$L2$S-$!J =E u1$5'$E'$-E -E -E -E tG rG >b@X:@>b@>b@r[@t! Y:@/d@O9 .9 @A@@A@@A@@A@+L@ 9 /d@(7 /d@/d@/d@ 9 +L@@A@RT@A&#*@.Nd Nd Nd 9_@9_@9_@9_@9_@9_@Nd Nd Nc Nc s<$s<$xa 1/ 1/ 1/ eF.eF.O#@O#@M^ M^ M^ 1/ 1/ eF.eF.[7 X]@56 Pg Rh Ej Fj Hi B( G( 1x@M2$N2$S@$L=$i@@Ia+7S+S@$gQ+@y+qg XU.l- rh qh !N+.F.Rx.)> oA+z1$Jb#)D+)> ]! 5A.h]@v]#q)@q)@ZW+ZW+Yt.a(+,S+=D =}$*U./[.*3..0+[.+O2$P2$Q2$S}$Y_#=.$Ie@U,@3X+{V+$q+N&+X5+R2$S2$H1$N1$T2$T2$T2$U2$S)$I1$I1$S)$V2$W'$J1$N1$/}$u|$v|$N1$H1$M1$W2$X2$Y2$QO#Z2$`2$ 3$.3$+3$@3$#3$$3$%3$&3$*3$=3$-3$;3$>3$,3$'3$)3$!3$~3${3$]3$^3$/3$6u+(3$_3$:3$<3$[3$}3$|3$13$23$33$43$53$63$73$ux#83$93$XG#oT+}h#03$a3$+a@-i@D6@D6@-i@tG+lm+mI+mI+)P+fp+6X+WA+uI+1V+fD+Jl+tr+Rt+Rt+}=@K)@Pt+bX+xI+4$@h~+Gn+3 @9G+lX+lX+cB@H@@DM@G@@6$@mq@8&@4 @4 @0G+0G+0G+0G+9G+3 @>T@>T@>T@>T@{-+{-+{-+>T@>T@>T@>T@3 @3 @*>+*>+;B+;B+my+my+K@@K@@e^@e^@Z.@ yj+nA+):+,v.=L =L =L =L =L =L =L 13+13+13+13+13+13+", "9c 8c 9c E7 E7 7c 8c E7 E7 E7 E7 E7 E7 E7 E7 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c E7 E7 g~ g~ N6 vk n !1.u& v ]@ x. ..#g3$M{ }$.h3$3)+i3$&e NH R{ yX@8|$/;$j3$k3$l3$+:#c=@cp+W&+=4+Jn+mI+/V+l)+{]+R3+`(+Dg+di+Rl+~/+~/+Xg+Rl+Dg+Dg+Rl+Sl+Sl+Sl+|/#hi+4f#Qn#]_+:k+:k+]_+Nb+Nb+)B+)B+)B+)B+~P+~P+_T+}T+ur+ur+ur+ur+}T+_T+}T+}T+}T+}T+}T+ur+ur+ur+Q0+R0+R0+vr+R0+Q0+u)+&4+f~+Q0+Q0+R0+vr+fy+.B+up+<&@tr+tr+tr+|R+FD+FD+FD+Kl+Kl+}R+}R+ay+(T+cr+!P+!P+!P+!P+!P+!P+!P+!P+!P+'G+Kn+)P+fp+!P+fp+)P+H,+o0+di+8~+$/+~]+{]+/V+/V+x=@x=@x=@x=@a{$a{$BT#%}@G,@&-+.>+gD+O&+)G+>'@@&s+Hy+In+In+f~+Q0+R0+R0+Ob+Ob+/|+2Z+pd+(_+(f+%>+Ll+]G+-'@^V+ip+ip+ip+^V+^V+$w+Ln+XA+di+<]+Yg+`g+qe# h+0i+) +ii@Sb+(-+IL#ek@TU#Ne@53@td+k #[-#l+#<-#1-#o3$p3$q3$i|@.U@t$#r| 0_$Oe r3$s3$8K.t3$_b+u3$Es -h $| G- n6 -)+$p+v3$s2$w3$x3$y3$z3$A3$B3$C3$D3$Nf@IC DT 2o z5 k} ^3 ^3 ~_#q| k_ x*@wd#Fd <) <) .U#.U#P3 Jc [} S-@G> 1k <,@:)@hB xt ds qG y, qG Yr qG _,@_,@_,@fw _t e{@UH W^#Zy Zy Zy Zy &$$W^#(e -M Mu +/@7=$t1@i($sZ@Br+Y@+E3$!($F3$G3$H3$I3$vy+{ +J3$2O#2O#;($%9@%9@K3$K3$N_@-}@$1@$1@%1@%1@8~@7~@RK+AD+=B+=B+#a@mX+w)+w)+rr+rr+rr+rr+rr+rr+oy+oy+xp+@k+.B+.B+vr+vr+fy+#k+fy+fy+ur+ur+}T+}T+|G+|G+[T+[T+^G+^G+[G+Q;@Q;@`+#Pn#}&@}&@RO@RO@=m+1$@1$@2$@2$@2&@2&@2&@3&@3&@3&@/+@/+@W1#W1#W1#W1#Ey#Ey#qq#qq#rq#rq#B_$B_$m'$m'$k'$k'$k'$k'$C_$C_$[T#[T#%w#My#wB#)E#>>$>>$E7#E_$Y3+X3+Y3+Y3+z0+z0+5V#'$$q'$q'$0,$0,$Yn#Yn#r=$r=$H_$H_$H_$+o#+o#+o#+o#:l#+o#+o#+o#+o#+o#+o#+o#z0#QP#Xy#K`#5*$M`#ci#J`#6T#~X#J`#.o#G7#B0#WY#WY#H7#:X#Dc#zf#zf##5#:X##5#zf#Bf#)2#)2#)2#@5#@5#$aV#6T#~X#8V#0V#9V#0V#8V#6T#8V#aV#0V#0V#aV#8V#7T#M3$Y_$X_$Y_$T[$4|$Y_$d<$Y_$Y_$X_$d<$@2#W_$W_$+2#f<$Z%$G2$Z%$H2$z:+=Z#xT#;:@t~@Ht+Ft+WA+[=@H:+dp+(w+_w+ny+ny+K@@J@@6Z++5@7(@y^@N,@N,@nm+M,@pk+0y+|$@%>+f~+P0+Ft+!P+NF@28+NF@NF@':@&q+sk+=s+OF@N3$g^#oX+8Z+B($z'#>9@MJ@}p#_)#i#@p[#>M uK Y;$*E }g -E -E }g }g -E -! tG sG sG rG rG >b@X:@+~ ]|@/d@RT@RT@RT@@A@+L@ 9 (7 ]|@;! ;! ;! ]|@(7 9 +L@~)#P9 Sg Mc Mc Mc u/@u/@u/@Sg Sg Mc u/@*@.Bn@xb xb Q9 Q9 Q9 89 89 I0 I0 I0 Q9 89 89 89 I0 I0 Bm Bm 56 P3 Gn Gn m_ l_ 1o eQ D2 ])@s`+O3$jU+P3$Q3$7S+>:$R3$K=$S3$b.+qg oR.$A.zj+Zs..F.Rx.)> oA+T3$3K@)D+)D+]! 5A.h]@v]#q)@q)@-V@-V@Rx.S|@y'@lE.3E :,+U3$V3$W3$@m@X3$Y3$Z3$`3$G1#x_$b=#7a@XM+%s+$s+O&+uG+*'$P1$Z!$S)$V2$ 4$ 4$V'$.4$+4$+4$W'$@4$#4$.4$$4$%4$&4$&4$/}$P<$H$$l/$j&$G<#*4$z+$=4$-4$;4$>4$,4$'4$)4$!4$~4${4$]4$^4$/4$(4$_4$:4$<4$[4$}4$|4$14$24$34$44$vm+54$64$74$84$94$04$a4$13$b4$o&$c4$>1$L/$83$MM#d4$MQ@]=$e4$u6+;i@2Y#Z}$Z}$#1@h-$,P+!G+)P+)P+)P+)P+6X+WA+uI+y@@z@@wI+wI+QK+Il+ED+,B+%B+&B+B@@3T+m;@$N+*>+>B+P)@>B+8$@I@@EO@EM@6&@k#$8&@0&@0&@4 @4 @4 @4 @0G+*>+3 @3 @3 @3 @>T@>T@>T@3R+3R+3R+3R+P,+P,+P,+P,+w)+w)+}=@ED+Rt+g~+wI+g~+Z.@ED+wI+v)+lr+St+RO@(i#bf#/k+}]+Tt+.B+-w+-(@q8+e[+lK@:/+Vt+}V#f4$B^$g4$dI.OU.F(@p<+~y J0 Nu E;@w( b>$f[$3!$4q@~X@Tt f+#O4 O4 ZY ,v.yj+yj+nA+a(+Yt.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.", "9c 8c 9c E7 E7 7c 8c 9c 9c 7c E7 E7 g~ dd dd 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c E7 E7 g~ g~ N6 vk `m !1.u& w k* D) Oq+%y+S7+[- h4$i4$j4$k4$cw@/,.lB.l4$m4$n4$g/+o4$H3+VX.y_$ib#dp+WA+)P+T;@.>+%/+Eg+R3+`(+di+Rl+Rl+~/+Sl+di+`(+`(+Rl+Xg+Xg+$4+hi+4f#Qn#&l#=m+=m+=m+=m+Nb+Nb+)B+)B+)B+)B+~P+~P+}T+ur+ur+VH@VH@ur+ur+}T+_T+}T+}T+ur+ur+VH@o;@o;@f~+Q0+R0+R0+R0+f~+&4+):@f~+f~+Q0+R0+vr+fy+.B+up+<&@L)@tr+tr+|R+FD+FD+FD+Kl+Kl+}R+}R+ay+(T+cr+!P+!P+!P+!P+!P+!P+!P+!P+!P+O3+)G+'G+)P+)P+)P+Kn+kD+@/+di+$/+%/+&/+p0+/V+;'@x=@x=@x=@x=@a{$a{$a{$a{$,P+ >+P&+Q&+kV+O3+>'@Dq@U;@x^@Qd+rf+C$@Td+D|#D=@m3$t6#m3#y$@fF@z$@G&@'-@i2$_h+*s+:u+{a+p4$lD@U8+lf+rf+mw+0>@&s+Hy+In+In+u)+Q0+R0+fy+Yn+Ob+/|+wp+(_+q$@N@+O,+):@SA+-'@$w+# +@t4#_K@U##s##[)#q4$r4$s4$t4$xU.G*$9q@u4$kB.v4$=<@f=@mT..4 W##w4$x4$y4$I}+z4$~I.og i# l+ $ l# ^~#A4$B4$C4$D4$E4$F4$G4$H4$I4$Nm J4$_]#C( 86 j< q| ~_#d=#i| VE 0P@x*@Fd sb <) O: Lg O3 hp hp ,J ,J cq [r@:e Rx@Xr UH ds ds Yr fw _,@y, Xr y, _t e{@hB hB qG l.#JT#K4$L4$sI@&$$<*$lp M4$i#@_)#dX#%X#N4$'(@]f#O4$P4$Q4$R4$Q4$S4$T4$cN#^f#U4$2O#J4#J4#$9@$9@K3$V4$N_@-}@$1@$1@%1@%1@8~@7~@RK+AD+=B+zD+#a@mX+,B+w)+rr+rr+rr+rr+rr+rr+oy+oy+(|+=w+.B+.B+vr+vr+.B+:c@.B+fy+ur+}T+_T+_T+)B+)B+/G+/G+[T+[T+[G+[G+[G+`+#4=@}&@}&@RO@RO@=m+1$@{/+2$@2$@2&@2&@2&@3&@3&@3&@/+@/+@W1#W1#W1#W1#Ey#Ey#>$E_$|@$A0+'|+%2+'|+'|+'|+}T#Ty#Ty#,X#W4$W4$9,$Yn#zq#zq#Xn#G_$G_$H_$+o#+o#:l#Cf#Cf#+o#+o#+o#+o#+o#+o#+o#di#X4$Xy#K`#5*$M`#M`#6T#8V#~X#J`#.o#G7#B0#WY#WY#H7#:X#Dc#zf#zf##5#:X##5#zf#)2#)2#)2#)2#@5#@5#+_w+;m+q8+{3@{3@y^@y^@']@']@ry+4X+lI+<6+u)+f~+~P+~P+.5@s9#.q+.q+6}@71$.5$c9@+5$lq#J9#Hq@^R#~ +g^@5)#.+@/B+@5$_)#K2$#5$$5$uK !J *E -E -E }g *E *E }g -E -E rG rG rG rG rG >b@t! Y:@RT@RT@RT@@A@+L@ 9 (7 ]|@+~ +~ +~ W:@;! (7 /d@T:@wa Ui Kf Sg Mc u/@u/@-{ Ui Kf Sg u/@*@.Bn@ry@ ] Q9 Q9 89 89 89 I0 I0 I0 89 I0 I0 I0 Bm Bm #9 ;[ P3 Gn Jc Gn m_ k_ v) v) X' ^/ tS+iP@.S v*$%5$M!$.]$>^$c{@&r v<$sr.oR.XU.zj+Zs..F.Rx.)> oA+T3$3K@NZ@)D+]! 5A.h]@v]#q)@&5$35+35+Ov+*0+,^$oS 7;+4S.<5.*5$Jj.+6.)=@=5$NA+-5$0)#y_$U,@V}+hD+x@@Si+&}@7)$g>$@4$+4$+4$;5$W'$.4$>5$@4$;5$;5$.4$V'$,5$'5$1^$F($)5$)5$t|$K(#K($`!#!5$~5$Z2${5$]5$^5$/5$(5$C/$_5$z&$4W#:5$<5$[5$}5$|5$15$25$35$45$55$65$75$85$95$05$a5$b5$c5$d5$84$e5$f5$g5$h5$i5$A:$j5$k5$4[$rA#KO#l5$=-$Wr#up#a4+|g@em+x|##1@a{$x=@Z5+T;@!P+fp+)P+iD+iD+6X+WA+uI+y@@1V+QK+5T+vI+5T+Jl+}=@~w+T.@A@@4T+Qt+[P+4 @>B+t<@>B+9$@I@@/t#EM@7&@m5$9&@0&@0&@0&@0&@4 @4 @4 @4 @0G+0G+9G+9G+9G+9G+9G+3R+3R+3R+3R+P,+P,+P,+P,+,B+,B+}=@ED+Rt+g~+QK+5T+Z.@ED+wI+xp+Ob+~k+RO@(i#M4#Qn#;2+Ob+-w+1R+O,@L@+I:+$E+ei@8Z+n5$o5$W[+p5$d~#OU._a S1 2r x[ |d (k@q5$r5$s5$t5$~X@ k@Ma 35+O4 O4 ZY ,v.yj+yj+c;@a(+)> Rx.Rx.Rx.Rx.Rx.Rx.Rx.8}.8}.8}.8}.8}.8}.", "g~ g~ E7 E7 7c 7c 7c g~ g~ g~ g~ g~ g~ g~ g~ 7c E7 g~ dd dd E7 9c 8c 7c 7c 7c 7c 7c 7c 7c .h.&- 1c F7 T% U+ m+ '+ ,D b:@(U+''.h4$u5$v5$w5$x5$wp l|@s;#zO#y5$R}$H[#z5$7I#<{#f>$16+N)@6X+mI+&-+~]+yb+xb+yb+Y1+Y1+xb+Lb+<]+<]+_6+_6+Lb+$4+$4+-2+hi+A5$B5$+&4+SA+Ln+l;@-]@It+hp+It+Mn+_V+Mn+0X+Mg+fd+B)$~_+~/+N0+f~+H:+3a@U,@) +ii@H5$GM@@@#t4#,>+I4@K^$z5$I5$x&+J5$u>#_M#K5$L5$@3#66+*K.!! M5$N5$O5$P5$Q5$6v@y*$u]#k##JB ww.#~{ aY 0P@Ng U#<) 3g Rj w' wo }C }C s! TH [f :e cP@cP@wt cs ;E hB Yr qG Xr Xr _,@_t e{@UH uG hB UH ^0@6h k.#! $! $^t 2k #p@bj 7e+.6$i($!~#'/#V_#>i#H3$+6$@6$#6$k^#$6$T@+%6$&6$*6$oZ@4%$4%$q<@q<@q<@q<@#(@N_@&(@&(@7^@%1@8~@6~@6=@6=@=B+=B+mX+P,+w)+w)+!w+)w+wD+rr+&>+rr+sr+1R+=w+@k+fy+.B+.B+fy+fy+vr+fy+fy+ur+ur+ur+ur+eK@eK@}G+}G+}G+}G+Q;@Q;@Q;@`+#v=@H`#=6$H`#RO@:k+V4@|&@YA+dy+3&@ic#By#(+@3&@Ay#2&@3&@W1#lc#lc#W1#Tn#(@$Vl+-X#qq#rq#m'$m'$m'$B_$k'$k'$k'$k'$C_$C_$[T#[T#My#X3+}T#z0+D7#D7#v.$}T#'|+-6$;6$xB#xB#+G#|T#Ty#Sy#w.$E~$E~$^$$zq#Yn#Yn#yf#yf#yf#yf#yf#yf#yf#yf#_l#Af#Af#EB#EB#yf#yf#bi#^l#Xy#OP#OP#^l#M`#6T#aV#J`#J`#.o#.o#WY#WY#WY#WY#zf#I_$I_$$5#$5#Bf#Bf#Bf#/X#/X#/X#/X#/X#/X#/X#bV#>6$,6$d($d($9V#0V#^X#{X#`Y#I7#I7#I7#5T#5T#O`#O`#Zy#HB#_X#HB#C0#$I#C0#$K#Zy#Zy#Zy#C0#C0#IB#IB#'6$qt#Kq#J0#J0#)5#Lq#)5#J0#:I#:I#:I#:I#:I#:I#:I#:I#]5#Tc#(2#_2#_2#(2#Tc#]5#_2#(2#/5#`7#`7#]5#/5#Tc#;z#iT#St#St#iT#]z#St#[o#]z#iT#[o#}o#}o#[o#iT#]z#)6$!6$~6$`4${6${6$`4$~6$)6$!6$]6$!6$)6$ut#^6$]6$hV#hV#hV#hV#hV#hV#hV#hV#st#tt#tt#6w#6w#hV#hV#jT#z.$*G# Z#R`#R`#R`#R`#R`# Z# Z# Z#'M#'M#R`#R`#R`#`Y#`Y#`Y#`Y#{X#{X#aV#aV#6T#6T#7T#qT#5*$K`#K`#K`#bV#bV#bV#bV#bV#bV#bV#bV#bV#bV#/K#/K#_l#_l#Af#qT#rT#@2#d<$d<$X_$d<$d<$@2#)X#tT#W_$@2#@2#W_$tT#'X#Z%$/6$/6$vT#y:+y:+=/+]]+X4@It+gp+(T+fD+Jl+ED+2+f^@lX+P)@*>+&N+R<@S1+&7@L@+6T+L@+M@+[6+*4+/_+Q0+vr+tI+(t#YA#YA#49@s9#O<@Pm##I@.N@(6$_6$lq#:6$*N+|P+<6$[6$t8+&[@}6$|6$16$26$36$;M 'J )J *E *E }g }g }g *E *E =E sG sG rG >b@r[@X:@t! t! ;! (7 /d@/d@]|@]|@/d@O9 W:@W:@W:@W:@Y:@]|@(7 S:@H0 wa >! l .ZG@P9 @9 G~ W-@H0 '8 :7 >! l .vG VE >! >! >! >! >! 8_@8_@8_@8_@8_@8_@8_@>! >! >! h< Jc -> q) qa qa q) 1o N#@n_ %; %; Ch Fv -J 03#46$fG+R3$2O+m%@oF+v<$7{ 56$W)@gd +s.P] KB d> 66$Jb#KE#)D+'g@'g@M8@M8@r)@r)@vn.h8.61.o@ ,=@.t.XQ p`.76$86$96$06$a6$b6$]{#U=+c6$E@@Y.@']@,'@Yp+z;$*'$d6$e6$f6$#4$g6$g6$g6$h6$i6$g6$@4$>5$>5$V'$.4$j6$h/$k6$[:$}:$l6$m6$n6$cX@CQ#o6$p6$~#@q6$%Y+r6$s6$t6$$=$u6$v6$w6$x6$y6$z6$A6$B6$C6$D6$E6$F6$G6$H6$0o+I6$J6$1c+K6$L6$M6$N6$&_#O6$P6$Q6$R6$X$$S6$S1$KX+KO#T6$Mm#7X@mR+Hs@;k@$#$U6$V6$AT##1@48+x=@(V+Kn+iD+Jn+Jn+Jn+ep+In+In+z@@1V+y@@y@@1V+wI+tr+}=@vD+A@@rr+!-+g~+:w+Z.@4 @a=@O)@be#8&@W6$).$n#$qg@X6$=9@=9@=9@=9@0=@0=@O)@my+my+my+;B+;B+;B+;B+f^@Gn+=:#k0+4T+B@@T.@S.@}P+vD+wD+rr+Pb+1]+v)+oy+Jl+L@@wI+1V+(|+^/+~k+=m+M4#hi+4f#^_+Ob+=w+v)+b~@&N+h9@Y6$5T@DM#Z6$`6$ 7$.7$z +_a S1 (G i&@ak#+7$`A yu#LQ.LQ.5/$L}$9 +Tt d%$13+13+Yt.Yt.oA+oA+c;@a(+Yt.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.", "g~ g~ E7 E7 7c 7c 7c g~ g~ g~ g~ g~ g~ g~ g~ E7 E7 g~ dd g~ E7 9c 8c 7c 7c 7c 7c 7c 7c 7c .h.!1.`n ~& T% W+ ^+ k@ 0: `J+>h @7$1B.#7$v5$$7$%7$^,.<4@p3$&7$s-$m+#r##*7$=7$8]+[_+zb#~B+LF@+q+kD+Q3++/+yb++/+Y1+Y1+yb+_6+xb+xb+<]+_6+Lb+$4+$4+M0+B5$B5$7$z$@h2$W}$Vr+Sp+!a+Wr+D&@gF@i2$_h+Ud+Vy+T1+ew+N,@ry+4X+4X+/_+/_+(|+(|+lr+lr+|]+Sn+(_+(_+)-+/_+qy+]G+-'@$w+-]@It+:T+$w+(G+Mn+{G+N2@Mg+fd+B)$/6++_+mD+P0+(|+=4+2]+c~@4]+sd+(K@,7$@>#p=#l~+'7$B4#)7$j<@!7$~7$RE#{7$W-+UJ.fW.,[ yW+!! zy@Y] ]7$^7$/7$+}.($ h@ pg }, ak+Ep#(7$_7$3{@:7$<7$F-$[7$wl /) 9/+ 6$&P +r j_ q[ m] b>#2C ` gG#h2 Lg Ph P: Qh P3 _g 4, [r@[r@TH [f :e Zi@es es xt ds uG UH Yr e{@e{@e{@y, Xr e{@UH hB UH Yr ^t 6h ! $tI@{T#6, #p@,z Ag@a_#sK@a]+Wt+~}@}7$|7$`]$17$4($#/$%6$27$37$47$*6$oZ@oZ@4%$4%$q<@q<@q<@q<@#(@N_@&(@&(@7^@%1@8~@6~@6=@6=@=B+=B+mX+P,+w)+w)+!w+)w+wD+rr+&>+rr+sr+1R+@k+@k+fy+fy+fy+fy+fy+fy+fy+fy+ur+ur+ur+ur+eK@eK@}G+}G+}G+}G+Q;@Q;@Q;@`+#v=@TY#H`#TY#=m+:k+1$@hc#YA+gi+3&@ic#By#(+@/+@Ay#2&@3&@W1#lc#lc#W1#Tn#(@$-X#-X#qq#rq#m'$B_$B_$C_$k'$k'$k'$k'$C_$C_$[T#[T#My#X3+}T#z0+D7#D7#v.$}T#Y3+-6$57$;6$+G#+K#|T#|T#Sy#Sy#E~$E~$^$$^$$Yn#Yn#yf#yf#yf#yf#yf#yf#yf#yf#Af#Af#Af#EB#yf#yf#yf#bi#M`#VY#VY#!X#ci#qT#8V#aV#J`#J`#.o#.o#WY#WY#WY#K7#$5#$5#$5#Bf#Bf#)2#)2#)2#/X#/X#/X#/X#/X#/X#/X#bV#d($67$9V#9V#9V#9V#^X#^X#`Y#`Y#`Y#I7#6V#6V#5T#5T#Zy#HB#_X#HB#C0#$I#C0#$K#$K#$K#$K#Zy#Zy#C0#C0#qt#qt#Kq#J0#J0#)5#Lq#)5#J0#:I#:I#:I#:I#:I#:I#:I#:I#/5#Tc#(2#_2#_2#(2#Tc#/5#_2#(2#/5#]5#`7#]5#/5#/5#;z#iT#St#St#iT#]z#St#[o#]z#iT#[o#}o#}o#[o#iT#]z#)6$^6$]6$~6$`4$~6$~6$]6$)6$!6$~6$]6$^6$)6$!6$]6$hV#hV#hV#hV#hV#hV#hV#hV#tt#tt#tt#6w#6w#hV#hV#}w#*G# Z#'M#R`#R`#R`#'M#'M# Z# Z# Z#'M#'M#R`#R`#R`#`Y#`Y#`Y#`Y#{X#{X#aV#aV#8V#8V#8T#7T#+;$5*$5*$5*$bV#bV#bV#bV#bV#bV#bV#bV#bV#/K#/K#/K#_l#Af#Af#77$sT#W_$@2#@2#d<$@2#W_$W_$)X#tT#Z_$W_$W_$Z_$tT#'X#Z%$//$/6$/6$/6$(/$h($yT#0x@ip+#w+ay+FD+Rt++/w+lc@|a@q8+L@+L@+q8+*7@51@[=@(|+R0+vr+tI+tI+C`#C`#49@s9#-3@':@#I@.N@->$_6$ze@;v@-4+7T+aN#j[+7)#87$>/#u}@97$07$m1#i4#;M 6r wt }g }g }g }g }g *E *E tG tG sG rG >b@r[@r[@X:@+~ Y:@]|@]|@;! ;! ]|@ 9 Y:@Y:@W:@W:@W:@Y:@;! ]|@,8 @9 P9 ZG@ZG@P9 '8 W-@H0 @9 '8 :7 >! 8_@ZG@l .8_@8_@8_@>! >! >! >! >! >! >! >! >! >! 8_@8_@X-@_m -> q) qa x) x) [@@v) Hi s*@s*@X' gw sS+k{@F1 kW+>^$u<$l%@n`+a7$b7$h|$c7$Q5 g7 Rx.)> )D+d7$i|$NZ@oA+Lh+Lh+ZW+ZW+$]$$]$~X@lm#,M+#G+Kj.ag.(].9D@e7$f7$Mx g7$h7$i7$j7$k7$| @R)@6Z+/7@M3+K2@.9@l7$m7$n7$f6$#4$g6$o7$o7$o7$i6$W'$@4$>5$>5$@4$W'$j6$h/$k6$p7$q7$a&$r7$s7$.F#t7$u7$v7$w7$x7$y7$z7$A7$B7$C7$D7$E7$F7$G7$H7$I7$J7$K7$L7$M7$N7$O7$P7$ R#Q7$R7$S7$T7$U7$V7$W7$X7$Y7$Z7$`7$ 8$.8$S1$yQ#+8$~5$H<#@8$>k#6e#,x@D+$#8$Y0@R2$X>$%}@48+w=@/V+l;@)P+Jn+6X+A$+0y+0y+T{@T{@FD+fD+z@@1V+1V+z@@fD+wI+sr+rr+&>+&>+Il+Rt+K@@Z.@0&@0&@9&@9&@W6$W6$W6$mb#v9#)~#)~#=9@=9@=9@=9@0=@K@@my+my+my+my+;B+;B+$N+$N+}z@k0+4T+B@@T.@S.@}P+wD+rr+&>+Pb+v)+oy+sr+1R+a&@Jl+fD+R0+I6@{k+RO@&l#4f#ji+^_+lr+1]+Pb+L@+26+0a@U^@A[+$8$%8$&8$*8$=8$sc+ G@=K.O2+l< Nu -8$!y -4 S' AN.cH@CG#=8.Tt V&$13+13+Yt.Yt.oA+oA+c;@a(+Yt.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.", "g~ g~ E7 E7 7c 7c 7c g~ g~ g~ g~ g~ g~ g~ g~ E7 g~ g~ g~ g~ E7 7c 9c 7c 7c 7c 7c 7c 7c 7c .h.F7 !& '& T% W+ C. -. k@ pr.Yq+#P@;8$>8$,8$'8$)8$aA.,A 5r@u4@!8$~8$>]${8$]8$!U#Z.+^8$f1@M,@28+mI+{R#Z(+&f+Z(+][+][+&f+kp+9d+9d+wb+kp+Yg+:6+si+4f#:f#s7#:f#:f#:f#:f#/k+/k+]_+]_+]_+:k+8X+sD+sD+sD+b$@b$@_T+_T+_T+}T+}T+}T+b$@_T+_T+_T+_T+}T+}T+}T+vr+vr+fy+fy+fy+vr+R0+Q0+.B+.B+.B+.B+.B+.B+.B+-w+|R+Jl+Jl+Jl+|R+|R+|R+|R+PK+PK+ay+(T+(T++w+Ft+cr+cr+fp+)P+)P+!P+cr+!P+)P+N&+'G+)P+fp+!P+!P+fp+!G+$w++.>+Z5+P3+nk+O3+`r+M3+!u+!u+!u+!u+z&@9m+lw+^a@cK@o<@bH#bH#6h+6h+kP+|h+mf+jk+L+#_+@mZ+/8$X}$I^@v$@v$@I^@'-@n3$'-@h2$Vr+Tp+i2$X}$X}$Wr+_h+Ud+Vy+T1+%q+nm+ry+y@@y@@(|+(|+(|+(|+lr+lr+lr+lr+)-+)-+(|+Q0+b$@U_@q;@(G+ip+hp+l;@$w+^V+{G+SA+o0+Mg+X1#Mg+On+0X+rD+U_@b$@1V+H:+_|+-.$rd+T0+(8$U0+Kq@Bb#_8$L1#:8$x_$ ,J [f :e :e Zi@es $_6$ze@b~@&N+<|+,2+'2+ *+4W.P$+j8$k8$r1#l8$+(+@L@6r cs }g }g }g }g }g }g }g -E -! -! tG sG rG >b@>b@>b@X:@+~ +~ +~ +~ Y:@]|@;! Y:@W:@+~ +~ +~ W:@W:@:,@,8 U-@c2 Q} T-@U-@V-@V-@V-@Yq U-@R} T-@c2 c2 A&#WC@WC@_C@_C@~)#~)#_7 _7 _7 ~)#_C@_C@WC@Aj#_m ]0@Ri -> 8> 8> qa O3 66 66 66 u' Ej s*@H'$/;#m8$7S+}&$d|$>t+zp K:@'D+n8$y!#@A. Z jy.A_@o8$z<$NZ@NZ@Lh+Lh+ZW+ZW+$]$$]$dc pg e; R9.ZG W_.GF *^@9d.IM+p8$q8$eP+r8$s8$~M#>T@&N+N,@#s+w&@U>$t8$ 4$,5$u8$u8$u8$h6$o7$+4$v8$;5$W'$.4$U2$U2$ 4$S)$w8$F($x8$y8$S]#z8$A8$B8$C8$M##D8$E8$F8$G8$H8$I8$J8$K8$|#$D7$D7$:5$L8$M8$N8$)[@O8$P8$Q8$R8$S8$T8$U8$V8$W8$X8$Y8$Z8$V7$`8$ 9$43$.9$+9$@9$#9$JX+ Y#]#$W$$zm# k#Wr#'x@$9$%9$M(#U6$A;$I2@58+58+-:@Nn+^V+6X+T{@WA+uI+uI+uI+uI+uI+:x@K,@Kl+PK+uI+WA+WA+1V+v)+v)+1]+1]+QK+wI+0$@L@@L@@P,@mb#mb#x)$lb#lb#X6$v9#u!$u!$)~#)~#)~#)~#a&@L@@K@@K@@K@@K@@my+my+$N+$N+3T+k0+4T+S.@S.@wD+&>+&>+&>+1]+v)+=w+-w+up+;w+)~#:&@Kl+vr+e0#}&@}&@/k+M4#ki+}]+lr+1]+V&+q8+ 7#1V#)'$&9$*9$=9$oF#.($-9$`]+F(@V} A%@%y M6@,9@l(#[% ;9$>9$!D 3q@:I Ks {'$13+13+Yt.Yt.oA+oA+c;@a(+a(+UH.UH.UH.UH.UH.UH.UH.S|@S|@S|@S|@S|@S|@", "g~ g~ E7 E7 7c 7c 7c E7 E7 E7 E7 E7 E7 E7 E7 g~ g~ g~ g~ E7 7c 7c 9c 7c 7c 7c 7c 7c 7c 7c }9.T% Z& T% S% U+ W+ T k@ -,.Yq+/l ,9$'9$)9$!9$~9${9$[8@m|@|Z@&/#~8$]9$'U#^9$/9$N)$8k#(9$A=@U;@nk+@1@][+Z(+][+_9$Cg+Z(+wb+Z(+&f+9d+wb+kp+:6+si+4f#E`#:9$:f#:f#:f#:f#&l#M4#]_+]_+:k+:k+sD+sD+]/+]/+b$@b$@b$@b$@_T+_T+_T+_T+P0+P0+b$@b$@_T+}T+}T+ur+vr+vr+vr+vr+vr+vr+R0+R0+#k+#k+#k+#k+#k+#k+#k+up+|R+Jl+Jl+Jl+|R+|R+|R+|R+PK+PK+(T+(T++w+A$+!P+!P+fp+)P+'G+Kn+fp+!P+)P+'G+O3+O3+)G+'G+Kn+)P+)P+fp+-'@kD+&-+kR+P3+'G+N&+lw+6(@6(@9m+vB+vB+vB+C$@vB+6i@cK@o<@o<@kV@kV@kP+kP+6h+kP+mf+jk+L+#_+@X8+.J+~a+/A#D&@<9$X}$'-@X}$<9$X}$/A#Wr+i2$Y}$/A#S8+_h+]]$nw+L&+%q+nm+ry+y@@y@@(|+(|+(|+(|+lr+lr+lr+lr+(|+(|+R0+_T+:V+^G+69@_V+-]@^V+l;@Ml+-'@SA+B$+jV+N2@Mg+jp+jp+0X+rD+U_@b$@uI+1V+2V+_|+:|+/w+>2+X&+^8$,2+{K@;K@h[++@#Rb+@>#[9$IG#}9$l+#|9$JR@Y]@3r tK Uj ro $9 HW.H'$19$s' s*$JY+:[ qQ+29$39$49$59$69$79$n[@#s o$$Kd qa R-@[} R} _7 S:@{M 4|@,P <@]3 Og R-@w' .' 4, ,J cq Rx@Rx@Rx@.~ k+3&@3&@W1#W1#W1#W1#Tn#Tn#rq#/$e9$f8$f9$f9$f8$@G#yB#AB#Sy#Wy#Wy#^$$^$$X%$X%$/l#/l#/l#/l#/l#/l#/l#/l#/l#/l#/l#/l#/l#/l#/l#ci#7T#5*$5*$5*$M`#M`#J`#~X#~X#~X#.5#.5#H7#H7#H7#Fq#)2#@o#@o#Fc#Fc#&5#$&2#&2#&2#/K#/K#/K#/K#/K#/K#/K#/K#_l#_l#_l#_l#Af#Af#Af#77$ci#tT#Z_$Z_$Z_$tT#)X#CB#)X#)X#)X#)X#)X#)X#)X#'X#//$g8$g8$-6$:@$:@$@}#%3@6m@M )J }g *E =E =E =E =E *E }g }g -E -E -! tG sG sG -! rG r[@r[@r[@r[@+~ Y:@;! Y:@W:@t! X:@X:@X:@X:@:)@:,@Sr U-@T-@T-@U-@Yq V-@V-@Yq Yq Yq U-@U-@U-@A&#WC@WC@_C@~)#_7 _7 U:@T:@U:@_7 ~)#_C@WC@A&#<} e2 ]0@Ri -> r) r) SH qa +r m_ m_ Cd Dj Ej U: zg L0 >;$l*@fQ+,:$QH l9$m9$>. 17.Rs.7}.Yt.A_@7g+i|$Jb#Jb#9Y+9Y+f!+f!+n9$Yn +h#+m@7-+uv+~v.o9$p9$I$.q9$Ex#r9$7B+r8$=u+K4#U,@;m+ry+,]@`r+G4@.9@s9$+4$h6$t9$u8$,5$#4$;5$v8$u9$;5$V2$ 4$T2$T2$N1$v|$v9$F($w9$x9$J($y9$z9$A9$B9$C9$D9$E9$F9$G9$H9$I9$J9$K9$L9$M9$N9$O9$P9$Q9$R9$S9$T9$U9$V9$^5$W9$X9$Y9$Z9$`9$ 0$.0$+0$@0$#0$$0$%0$&0$*0$=0$IX+}U#QK#8p#zm#0p#5e#3V@-0$1o@M(#g}@A6@E4@58+-:@-:@Z6@N2@rD+qy+WA+uI+PK+Kl+Kl+PK+PK+(P+Kl+PK+PK+uI+uI+uI+uI+xp+1]+1]+1]+QK+QK+O,@O,@0$@0$@:^#:^#x)$lb#lb#;0$>0$u!$-_#-_#-_#H6@H6@H6@a$@0$@0$@e^@e^@e^@e^@:w+xD+3T+k0+k0+A@@A@@rr+Pb+V&+Pb+1]+v)+@k+up+;w+;w+<&@|R+PK+_T+]/+RO@RO@&l#&l#Mn#Ob+lr+c[+(_+|a@Fq@ba@>z@[X@,0$'0$)0$!0$5Y.m9+u7 R9 |/ y2$`_@Tk@a3#mm#p,.~0$IB 4q@=8.wn.-V@13+13+Yt.Yt.oA+oA+c;@a(+.d+S|@S|@S|@S|@S|@S|@S|@S|@S|@S|@S|@S|@S|@", "g~ g~ E7 E7 7c 7c 7c E7 E7 E7 E7 E7 E7 E7 E7 dd g~ g~ E7 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c }9.R% x* 5# V+ 9& =+ t A. 58 {0$|Q K&.]0$^0$/0$(0$]]#ob@12@e2@_0$P'$:0$C~$<0$[0$}0$|0$J9#:u+6h+kV+R&+_9$Cg+_9$bi+bi+][+&f+][+][+&f+9d+kp+Yg+:6+4f#:f#s7#10$10$ ,J cq cq .~ .~ 9~ 9~ 9~ }f E'$}f wt xt ;E UH qG _t y, y, e{@Yr Yr Yr Yr e{@qG :)@iQ iQ =0@&S |-@>n#2O.`D.} +D[#i|#']$}7$80$K$+90$a9$M1#M1#M1#[{#[{#00$gX@BO@BO@}V+}V+}V+}V+3G+}V+$1@N_@&(@&(@7^@%1@8~@6~@6=@6=@=B+=B+mX+P,+w)+w)+vD+vD+vD+vD+wD+wD+oy+oy+;w+-w+vr+Q0+Q0+vr+.B+:c@fy+fy+ur+ur+ur+ur+eK@eK@jc@jc@jc@jc@jV@jV@jV@v=@v=@RO@=m+=m+=m+=m+{/+_k+#l#YA+/+@/+@&k+a0$`5+ 6+/+@/+@oB#oB#oB#oB#Ey#Ey#rq#/$e9$b0$c0$f9$f8$d0$yB#AB#AB#Wy#Wy#!X#!X#X%$X%$/l#/l#/l#/l#/l#/l#/l#/l#5@$5@$5@$5@$/l#/l#/l#ci#ci#K`#K`#K`#ci#ci#/l#5@$6T#6T#7V#7V#lV#lV#lV#L7#@o#>5#>5#Ic#Fc#&5#$&2#&2#&2#_l#Cf#Cf#Cf#Cf#Cf#Cf#Cf#:l#:l#:l#:l#:l#:l#:l#77$ci#tT#Z_$Z_$tT#)X#CB#BB#CB#CB#CB#CB#CB#CB#CB#1T#f9$-6$-6$:@$$w#$w#2t#+}#<9@69@@w+(P+tr++0G+*>+;B+my+my+6T+L@+q8+*7@']@+5@wr+QK+z@@vr+vr+fy+tI+@w+gh#hh#hh#L,@]`#4~#+5G+|T+`&+f~@@*+f0$g0$h0$:)#DJ.X7@k9$Rx@-! }g =E i0$i0$i0$i0$*E *E }g }g -E -! tG tG -E sG >b@>b@rG rG X:@+~ ;! Y:@+~ X:@r[@>b@>b@>b@TH <,@ZA V-@U-@U-@Yq Yq V-@V-@V-@V-@V-@V-@V-@V-@_C@_C@_C@~)#~)#_7 _7 _7 T:@T:@U:@_7 _C@WC@A&#:} e2 ]0@]0@3F r) r) uI@Ri Gn P3 Rh <7 <7 Rh w[ U: s/ `v lF+2O+>t+L#@/@@j0$k0$ :@l0$P] O* U/@T3$o8$NZ@NZ@Lh+Lh+ZW+ZW+$]$v~.lm#a/+xY+9n+2,+m0$,3.n0$o0$q&@ $#*P+-P+Z@@+N+(/+wr+mm+`p+#1@p0$='$q0$W'$g6$h6$#4$,5$#4$W'$+4$K1$S)$N1$N1$P<$P<$/}$t|$i/$w9$r0$&#$s0$t0$u0$v0$^!$w0$dA#x0$y0$1W#z0$A0$B0$C0$D0$E0$F0$G0$H0$$[$I0$J0$K0$L0$M0$N0$Ik+O0$P0$Q0$R0$S0$T0$U0$V0$:3$W0$X0$Y0$Z0$!N#W(#9p#j&$5e#/e#%-$O(#^z@1%$/m@U6$.9@-'$`0$v^@}1@-:@._++_+gi+b$@1V+z@@fD+fD+z@@uI+uI+T{@0y+WA+uI+PK+Kl+Kl+(P+(|+xp+xp+=w+fD+FD+b&@b&@b&@a$@6~#S6#8%$8%$w9#v9#>0$3L#3L#gY#gY#G6@G6@b&@a$@0$@0$@0$@0$@e^@e^@:w+xD+ }#S1#S1#uD+rp+tD+4&@Rn+Rn+lr+sp+ L+tp+`K+:c@K,@Kl++w+P0+Nb+:k+_k+M0+&l#Mn#Ob+lr+)-+l0+lc@dm@A[+ a$o@L'$ k@)g@wn.13+13+Yt.Yt.oA+oA+c;@a(+CU#y'@y'@y'@y'@y'@y'@y'@y'@y'@y'@y'@y'@y'@", "g~ g~ E7 E7 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c dd g~ E7 7c 7c 7c 7c E7 7c 7c 7c 7c 7c 7c 7c }9.R% t$ ~. 5# U% ,% u A. -k 0_.$a$%a$&a$+y.*a$=a$60@2B 22@0R.p##,{#a]+Bp+-a$;a$>a$S!$e^#,a$jk+Pi+'a$bi+_9$bi+)a$!a$_9$Z(+_9$Cg+][+&f+wb+kp+:6+hi+A5$~a$~a$~a$B5$B5$B5$B5$&l#&l#=m+=m+RO@RO@]/+p=$}T+}T+}T+_T+_T+_T+b$@b$@P0+P0+P0+b$@b$@b$@b$@_T+vr+R0+R0+R0+R0+vr+fy+.B+fy+fy+fy+fy+fy+fy+fy+@k+|R+Jl+Jl+Jl+|R+|R+|R+|R+(P+(P+}R+ay++w+A$+!P+!P+)P+'G+N&+'G+)P+)P+Kn+N&+Ri+Ti+Ti+Ti+Ri+O3+N&+'G+H,+jR+Ri+x@@lw+V1+mw+k'@Sd+8m+8m+_h+5a+p6+5a+_h+{a$t6@G2@n<@lw+lw+5h+6h+Dq@,]@9m+0m+)u+gw+gB+mZ+rf+]a+dB+'u+]a+~a+61$g(@61$'u+~a+S8+!a+Nd+Nd+_h+C&@:u+!-@y^@+5@M@+vI+vI+1]+1]+1]+1]+Rn+Rn+Rn+vp+P0+U_@[T+^G+Q;@[G+:G+_G+[G+q;@SA+YM@&4+O,+Y}+F)@jD+Ln+jD+jD+SA+qy++w+(T+PK+Kl+s<@-(@-(@-(@-(@-(@8m@9k@pg@b~@wr+q8+e[+;(@5]+W[$2W.r4$2K#5K#PH#|d ce@9F#*2@#S Dh +s@B( w/ ~( ]a$or tX+xg ^a$or S:+v, Gn wo 4, wo T} S-@:t V-@V-@G0 >8 .<@H~ +9 T:@u[ Gn k8 s7 ,J }C [r@[r@2r@2r@9~ 9~ 9~ 9~ (0@9~ }g ds uG Yr qG _t y, y, e{@e{@e{@e{@e{@Yr Yr TH =0@])#^)#P2+;K.|L.}-@!%@>I@sZ@O]+V_#/a$(a$K$+09$_a$N1#M1#M1#N1#00$gX@oZ@BO@BO@}V+}V+}V+}V+3G+}V+$1@N_@&(@&(@7^@%1@8~@6~@6=@6=@=B+=B+mX+P,+w)+w)+wD+vD+vD+)w+vD+wD+oy+v)+up+-w+vr+R0+R0+vr+.B+#k+fy+fy+ur+ur+ur+ur+eK@eK@u=@u=@u=@u=@rX@rX@rX@Pn#4=@RO@=m+=m+RO@RO@1$@_k+#l#YA+/+@/+@&k+a0$a0$: @(+@/+@oB#cc#cc#oB#Ey#oq#qq#rq#rq#5#@o#Fc#@5#@5#/X#/X#{X#{X#e0$e0$e0$/$$aV#aT#aV#aV#aV#0V#^X#^X#P`#P`#P`#P`#(X#(X#6V#6V#$K#C0#IB#C0#HB#`y#HB#Zy#HB#HB#HB#$K#$K#Zy#Zy#pt#)M#^E#:I#^E#Kq#Kq#J0#:I#:I#:I#:I#:I#:I#:I#:I#:I#(2#(2#Tc#/5#/5#Tc#(2#(2#/5#Tc#Tc#Tc#Tc#/5#]5#`7#]5#Tc#(2#(2#Tc#/5#(2#:2#_2#_2#(2#(2#(2#(2#_2#_2#ZL#`L#TB#UB#UB#UB#TB#TB#TB#`L#$O#ZL#TB#UB#`L#$O#^K#^K#^K#^K#^K#^K#^K#^K#^K#^K#^K#{O#{O#nT#nT#HB#P`#^X#{X#{X#{X#^X#]X#c($]X#]X#]X#^X#^X#{X#{X#{X#`Y#`Y#`Y#`Y#{X#{X#aV#aV#aV#aV#aT#8T#&2#+;$+;$=2#_l#Cf#Cf#Cf#Cf#Cf#Cf#Cf#+o#+o#+o#+o#:l#:l#:l#(l#M`#Z_$Z_$Z_$tT#)X#CB#BB#CB#CB#BB#`_$`_$BB#CB#1T#57$:@$:@$:@$$w#D_$%3@$3@<9@69@2+f^@0G+0G+*>+Y.@my+ny+6T+L@+q8+&7@+5@M@+X{@fD+uI+R0+vr+ur+tI+@w+4v#yb#yb#z$+y$+ze@lq#:a$kq#ly+e^@ED+w)+mX+=>+nq@J1#yR#@ +4O#b@X:@W:@+~ X:@r[@rG rG rG rG TH :)@va ,8 V-@V-@V-@Sr ,8 ,8 ,8 ,8 Sr Sr Sr Sr _7 _7 _7 ~)#~)#~)#~)#~)#U:@U:@U:@_7 ~)#_C@_C@,p _m ]0@]0@3F 8> 8> Ri Zk Gn Gn <7 >J <7 Pg >[ k< s/ 6/+u%@k%@|a$v<$1a$q;#35 e( 2a$r`.KB )D+z<$k}+KE#KE#'g@'g@M8@-V@r)@Bd+k*.'!.$V+)R+A=.3a$4a$5a$6a$7a$*]+1X+j:+LK+dz@}=@z$+ q+38+AT#6)$V>$8a$V'$#4$#4$#4$@4$@4$ 4$S)$Z!$N1$P<$P<$^}$9a$|:$|:$0a$2^$2^$j/$y9$aa$ba$ca$da$ea$fa$ga$ha$ia$ja$ka$la$ma$na$oa$pa$*3$qa$ra$sa$ta$ua$va$wa$xa$ac+ya$za$Aa$Ba$Ca$Da$Ea$Fa$Ga$#1$Ha$Ia$Ja$(E+Vu#OG#Ka$3V@La$O(#7B@&K@/m@(a+.9@Ma$Na$K,+0~+2}@#_+Gg+cd+-2+b$@z@@z@@z@@1V+4X+T{@ep+W1+$q+T{@uI+Kl+K,@K,@:x@Q0+xp+=w+@k+|R+|R+b&@b&@a$@a$@6~#S6#P&$P&$P&$Q6#,_#3L#4L#4L#G6@c&@s<@s<@a$@a$@0$@0$@0$@0$@e^@Rt+xD+ }#S1#S1#uD+uD+3$@3{#Rn+Pn+|]+ L+ L+tp+-9@.B+(P+PK+A$+qy+Mb+]_+-2+Og+M4#Mn#Ob+Rn+pd+//+6a@+N@&9$i'+BW.Oa$Pa$Qa$Ra$-K.k.@If 56 !d@Sa$Ta$/4 T/ 52$Ua$b>$cH@k## k@35+Ks 13+13+Yt.Yt.oA+oA+c;@a(+CU#y'@y'@y'@y'@y'@y'@y'@y'@y'@y'@y'@y'@y'@", "g~ g~ E7 E7 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c kC dd E7 7c 9c 7c E7 E7 7c 7c 7c 7c 7c 7c 7c }9.-+ ,1@~. 5# U% ^% t k. XY -$.]y+}$.Va$Wa$Xa$=a$Wx@c8@ob@Ya$Za$[8$;N.5<+Ap#`a$ b$.b$jY#B=@Up+kV+8H#!a$bi+!a$+b$)a$bi+][+bi+_9$Cg+Z(+9d+kp+Yg+hi+@b$#b$$b$$b$%b$~a$A5$B5$/k+/k+/k+bf#RO@RO@}&@p=$VH@ur+ur+ur+}T+_T+_T+_T+b$@b$@b$@b$@P0+P0+P0+P0+vr+R0+Q0+Q0+Q0+vr+.B+#k+fy+fy+fy+fy+fy+fy+fy+@k+|R+Jl+Jl+Jl+|R+|R+|R+|R+:x@K,@OK+}R+(T++w+cr+!P+!P+)P+Kn+)P+!P+!P+fp+Kn+N&+)G+O3+O3+O3+)G+N&+'G+M&+lw+kV@kV@6h+mw+sf+8>@Ni+Nd+8h+OG+OG+A$@~:@8h+&b$*b$n<@G,+%s+%s+U;@U;@Dq@,]@!u+!u+~u+~u+iw+L+#pf+W8+wG+]a+pf+Sd+,c+dB+]a+{a+{a+Ni+8m+]]$8m+8m+Wi+:u+!-@']@+5@wr+vI+vI+v)+v)+1]+1]+Rn+Rn+Qn+2Z+]G+q;@_V+69@:G+:G+:G+_G+Q;@[T+gK@qy+/_+)-+>3@`v+In+iD+iD+iD+Jn+0y+a~@!B+pe#pe#pe#s<@s<@s<@s<@s<@tW#Ox#=b$s<@!B+y@@5T+/w+f>$ti++h+})#:-#|9$N&#K&#-b$FA#}) >| v`+;b$KY++S {( {( !( Bh e.@^)@+S vd#>J .r cq ,J .r Yq Sr :,@,8 ,8 va :)@s! <,@Sr R} p| _g :t ,J [r@En [f :e 9~ 9~ 9~ 9~ (0@(0@(0@9~ rG hB Yr e{@qG qG qG qG qG qG qG qG e{@Yr UH :e {)#.{#P2+F(@DL.Ba+%++!2+rK@3/+.+@']$/a$(a$>b$_a$,b$CA#AA#BA#AA#DA#oZ@e'#4%$4%$}V+}V+3G+3G+3G+}V+$1@N_@&(@&(@7^@%1@8~@6~@6=@6=@=B+=B+mX+P,+w)+w)+wD+vD+)w+)w+)w+wD+oy+1]+@k+@k+fy+fy+fy+fy+fy+fy+fy+fy+ur+ur+ur+ur+eK@eK@u=@u=@u=@u=@rX@rX@rX@Pn#'b$}&@=m+=m+TY#TY#V4@_k+ZA+dy+3&@2&@(+@@_+&k+(+@(+@/+@oB#cc#cc#oB#Ey#oq#-X#-X#qq#rq#m'$B_$B_$C_$k'$k'$k'$k'$C_$C_$[T#[T#My#X3+}T#z0+D7#D7#v.$}T#b0$xe@)b$!b$!b$)b$f($f($AB#AB#1T#1T#!X#!X#VY#VY#/l#/l#/l#/l#/l#/l#/l#/l#~b$Zn#Zn#Zn#5@$/l#/l#ci# O#Xy#VY#5*$7T#qT#~X#J`#6T#6T#7V#7V#lV#lV#lV#L7#;5#Rc#;5#6l#%5#@o#)2#)2#/X#/X#{X#{X#e0$e0${b$/$$0V#0T#aV#aV#aV#aV#`4#`4#`Y#`Y#`Y#I7#6V#6V#5T#5T#$K#C0#$I#C0#HB#_X#HB#Zy#$K#$K#$K#Zy#Zy#C0#C0#qt#)M#^E#r'$:I#J0#Kq#J0#:I#:I#:I#:I#:I#:I#:I#:I#:I#_2#(2#Tc#/5#/5#Tc#(2#_2#/5#/5#Tc#(2#Tc#/5#`7#{5#T0#0@$E.$E.$0@$a@$E.$.r#X`#X`#E.$E.$E.$E.$X`#_2#fV#$O#`L#TB#UB#TB#TB#`L#-z#TB#ZL#`L#UB#-z#TB#`L#^K#^K#^K#^K#^K#^K#^K#^K#^K#^K#^K#{O#{O#nT#nT#HB#]b$]X#^X#{X#{X#{X#^X#^X#]X#]X#]X#^X#^X#{X#{X#{X#`Y#`Y#`Y#`Y#{X#{X#aV#aV#8V#8V#8T#7T#+;$5*$5*$^b$Af#:l#:l#:l#:l#:l#:l#:l#H_$H_$H_$+o#:l#:l#:l#(l#qT#W_$W_$W_$Z_$)X#CB#BB#CB#BB#`_$/b$/b$`_$BB#1T#$w#D_$:@$:@$#w##w##}#<1@ic@_V+~P+Kl+wI+Qt+m;@W&+/w+*>+>B+>B+my+_w+K@@Z.@J@@6T+X{@wr+N)@N)@N)@y@@WA+Q0+_T+}T+tI+tI+Kx#Kx#yb#z$+ze@Ae@:a$kq#7k#<|+:w+vD+,B+zD+=>+fX@J1#6 @5Z.l[+m>#u}@Gh+uo@t$#}/ Yq ]|@t! rG -E *E *E *E *E *E }g -E -! tG tG sG >b@X:@t! X:@>b@rG >b@X:@t! X:@r[@rG rG sG rG rG s! :)@:,@ZA ,8 ,8 ,8 ,8 va va va ZA ,8 ,8 Sr Sr T:@T:@U:@_7 ~)#~)#_C@_C@_7 _7 _7 _7 _7 _7 ~)#36 uI@~d `h#]0@-> -> Zk Qj R-@Gn >J Mz Jf Ti Q9 ;J $x ^8@fa M#@oF+1a$=t+(b$F6 _b$[| P_.dl.U/@:b$o8$Ae+Ae+;~ ;~ h]@35+%]$4/$_Z@q, ](@T+0h#bz@gV@[b$q[$Q@+_|+#9@gh#8s#N<@6)$-'$}b$|b$x,$f6$,5$@4$.4$.4$ 4$U2$O1$N1$P<$/}$9a$|:$1b$1b$1b$2^$1b$2b$y9$3b$4b$5b$6b$7b$8b$9b$0b$ab$bb$cb$la$db$na$eb$4W#fb$gb$hb$ib$jb$kb$lb$mb$nb$ka+ob$pb$qb$rb$sb$tb$ub$Fa$vb$wb$H3#*>@o/+bp#Ka$l/$K($*T@xb$3V@6B@1%$hq@)c+*'$yb$zb$Ab$q)+q)+zb+68+~_+-2+_T+z@@1V+y@@|$@5a@%s+V1+V1+W1+ep+uI+}R+ N+ N+K,@R0+vr+fy+#k+:x@:x@G6@c&@gY#gY#P3#P3#/=$/=$/=$Y|#,_#Y>$4L#Vv#Kx#pe#z$+z$+b&@b&@b&@b&@O,@O,@O,@g~+xD+ }#S1#S1#tD+tD+Rn+qe#Pn+Sn+sp+ L+`K+-9@Yn+vr+ N+}R++w+P0+Nb+:k+_k+M0+Qn#ji+/|+Rn+pd+q$@6a@;Q#$8$Bb$)%+Cb$Db$Eb$G).l8 #9 ,J w' xu Q+#A5 Fb$n6 (P.52$dH@Bd+L'$<9.35+Tt 13+13+Yt.Yt.oA+oA+c;@a(+Gb$Hb$Hb$Hb$Hb$Hb$Hb$Hb$y'@y'@y'@y'@y'@y'@", "g~ g~ E7 E7 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c kC dd E7 9c 9c 7c E7 g~ 7c 7c 7c 7c 7c 7c 7c }9.y h@ 5# V+ T% =+ U+ n+ e. +0 Ib$Jb$#e Kb$Lb$=a$ul@$6@ob@Mb$Y/+Nb$Ob$Pb$Qb$ ++Rb$=n#k}@9>@x@@qX@'a$fJ#)a$8H#Sb$bi+Cg+!a$bi+Cg+Z(+yb+<]+_6+^f+Tb$Ub$Vb$Wb$Xb$Yb$Zb$`b$(k+(k+(k+%l#V4@hc#hc#}&@oe#VH@p;@ur+eK@}T+|G+_T+:V+_T+)B+b$@U_@qy+gK@Ll+}T+R0+b$@Q0+Q0+vr+.B+#k+.B+.B+.B+.B+.B+.B+.B+-w+Jl+Jl+Jl+Jl+|R+|R+|R+|R+fh#:x@ N+OK+ay++w+cr+cr+Ft+cr+fp+!P+Ft+~P+cr+fp+)P+Kn+'G+nk+nk+P3+ok+Kn+N&+x@@kV+vG+2h+sf+x^@o(@a!@Ur+Ur+Tr+0(@0(@0(@Ur+U8@*b$n<@G,+W1+$q+G)@M&+ ,J }C [f :e Zi@Rx@9~ 9~ 9~ }@8~@2G+2G+6=@1G+1G+=B+3R+P,+P,+A@@vD+)w+)w+)w+wD+v)+1]+=w+@k+fy+.B+.B+fy+fy+vr+fy+fy+ur+ur+ur+ur+eK@eK@u=@u=@u=@u=@rX@rX@rX@Pn#;c$TY#=m+RO@H`#H`#hc#{/+YA+gi+3&@ic#By#(+@3&@jc#(+@/+@oB#cc#cc#oB#Ey#oq#Vl+-X#qq#rq#m'$m'$m'$B_$k'$k'$k'$qq#C_$[T#[T#[T#My#)6+}T#>>$D7#D7#v.$Ty#f9$>c$!b$>/$,c$;6$f($G2$AB#AB#1T#1T#!X#!X#VY#ci#ci#/l#/l#/l#/l#/l#/l#/l#~b$~b$Zn#Zn#5@$5@$/l#ci# O#!X#M`#7T#aT#aT#8V#6T#6T#6T#7V#7V#7V#7V#lV##5#-5#'c$-5#Iq#Iq#Bf#Bf#Bf#/X#/X#{X#{X#{X#e0$e0$e0$9V#+P)@>B+;B+/w+my+4 @my+K@@J@@b~@y;@ry+N,@In+A$+P0+(T+@w+tI+(t#Vv#G6@z$+-(@Ae@UQ@<^#+:$j)$<|+Rt+vD+|=@#a@Q,+[V+1T+/-++h+[&#Ne@;/#s1@$X#~c$rZ.O2+Cn .G@E&#*S =S {c$[,$-P }f }f -E vR@ST@v! 6F t! H~ <@t! r[@rG >b@r[@r[@r[@>b@rG cP@cP@||@s[@Z:@:)@:,@va ZA ZA ZA ZA <,@:,@:,@va ZA ,8 Sr Sr S:@S:@T:@U:@~)#_C@WC@A&#~)#~)#_7 _7 _7 _7 _7 U-@_m 3F '3 Ri *l '3 E> A0 0P@P3 Mz 1u il ;[ Ti Pk Sk@&< &< ]c$^c$/c$Lk V> h[@A_ .h#(O+(c$A_@_c$KE#A_@A_@]$@]$@Ea+cI+3q@8f+:c$*A#$l>$I$$ac$l>$bc$cc$dc$:A#ec$fc$gc$hc$ic$jc$kc$lc$mc$nS#eU#L9$nc$oc$f:$pc$qc$hb$rc$sc$tc$uc$vc$wc$xc$yc$zc$Ac$Bc$Cc$Dc$Ec$Fc$Gc$.H#L&$p/+z3#>h#Hc$Ic$Jc$Kc$Lc$Tu@Mc$3B@/L+U>$Ma$Nc$Oc$J,+L,+L,+Pl+bd+&k+-2+_T+1V+y@@4X+5a@&I@Et+4m@%s+$q+T{@uI+}R+OK+OK+OK+PK+fy+K,@fh#fh#fh#gY#G6@-_#-_#P3#P3#Y|#=b$Pc$Nx#Y>$Y>$nD#Vv#pe#yb#yb#!B+c&@b&@b&@b&@O,@O,@O,@g~+)w+ }#&>+3$@&>+Sn+c[+O2@v)+sp+-w+`K+#k+Yn+vr+R0+:x@(P+b$@^_+:k+1$@Ng+Qc$4f#-m+G:+)-+T.+2V#8a@:3@Rc$4++Sc$Tc$Uc$Vc$Xi F`+Tj ;> _g Oh ^($AN D!@4/$T:$52$$~+Bd+4q@:I -V@Tt 13+13+{! {! oA+oA+oA+Yt.Fu#$U.$U.$U.$U.$U.$U.$U.S|@S|@S|@S|@S|@S|@", "E7 E7 E7 E7 E7 E7 E7 8c 8c 9c 9c 7c E7 E7 E7 uk tk tk sk !B !B lC lC uk uk uk sk lC lC uk d( -+ tp.n@ n@ V+ x* R& )D :% y_ E`. t+Wc$Xc$Yc$Zc$P;.b4@r:.=6@`c$ d$.d$+d$~1$J>+s8+@d$<7@cm@V}+EO##d$U #U #:9@PO@W8@$d$`}+%d$_9$Cg+ci+&d$*d$!_+nd+=d$-d$;d$;d$>d$>d$]f+,d$'d$'d$ni+ni+ZA+ZA+ZA+ZA+^G+|G+}G+eK@jc@|G+^G+)B+[T+)B+[T+U_@/G+U_@q;@gK@cr+A$+cr++w++w+(T+(T+(T+uI+Kl+|R+|R+fD+fD+|R+L)@fz@|=@}=@ED+Jl+Jl+|R+:&@K,@K,@OK+@w+T+:d$Ft 8 >8 >8 >8 +9 H~ Z:@+<@.<@V:@_7 A&#Sr ,8 :,@:)@+<@s[@s[@cP@}f }f 9~ 9~ {#3d$qz#[)#1)#8o@d=@7I#4d$5d$6d$CA#DA#zA#yA#{^#7V@BO@CI+2R+4G+4G+YK+YK+!K@!K@2T+=>+:P+kX+v;@m#$v;@T,@:P+{-+{-+zI+=>+=>+zI+{-+AD+A@@vD+)w+!w+!w+)w+1R+sr+@k+@k+fy+fy+fy+fy+fy+fy+Yn+`K+`n+XN#I6@I6@p=$f0#v=@t&@s=@t&@pD+5=@oD+s=@V4@RO@RO@RO@=m+:k+_k+-2+gi+YA+2&@3&@/+@(+@/+@2&@cf#bc#Qg+2f#_i#_i#:i#M#,M#jd$kd$ld$(X#Y4$67$9V#0T#0V#9T#d($,6$d($9T#9V#0T#0V#aT#aV#/K#[I#SL#Bf#:l#:l#:l#Cf#'2#SL#[I#md$[I#'2#RL#Cf##o#>5#>5#Q7#>5#>5#>5#*5#*5#Q[$%K#ei#>2#>2#nd$77$VY#3X#f<$od$<$$ :$H2$+2#|T#pd$pd$7t#7t#vB#~w#vB#+I#+I#Ly#.K#%2+%2+%2+-6$#w#W4@_1@='@/G+b$@=w+oy+wD+_|+S0+W&+Hl+h~+h~+.N+h~+dz@(/+Qt+Rt+wI+1V+T{@iD+Kn+!G+s9#hh#4v#4v#yb#!B+-(@O,@J@@&N+e[+I:+CD+>B+Rx#_c@gy+!w+mX+x)+[V+e'#1z@9)#8&$J5$qd$rd$sd$td$$$#ud$&>#SP. /@d]@vd$wd$xd$yd$1i E'$+z B=$&;$i*$:e Y~#Y~#[f UH hB 6F 5G@/|@[|@R5@R5@n$#HT zd$Ad$EN s[@+<@.<@H~ H~ .<@Z:@+9 +9 +9 +9 +9 +9 +9 +9 G0 T:@~)#~)#_7 _7 ~)#_C@_C@~)#U:@T:@T:@U:@~)#c2 u[ +l P3 Gn X-@Gn -[ -[ Sj X-@-[ -[ -[ Sj v[ yy H< X4 Ch e.@yQ+;,@3'$kQ+L-@5V @c$9* DV _b.{! {! 9g.8}.3d.Bd$k#+Ys.Q( Cd$Dd$Ed$Fd$Gd$Hd$r-$Id$Jd$@:#}~+At+Kd$!-+fy+/G+t~@K<@6k@_a@Ld$_]+Md$Nd$}^$Od$Od$Pd$/]$Qd$S'$Rd$S)$U2$V<$z,$R<$Sd$Td$Ud$Vd$Wd$Xd$Yd$Zd$ v#P>$`d$ e$.e$+e$@e$#e$$e$%e$&e$*e$=e$-e$-e$oc$;e$>e$=!$,e$'e$)e$!e$~e${e$]e$^e$/e$(e$_e$:e$$|e$1e$pM@ ~#3V@NG#2e$3e$4e$5e$^]$[^$6e$}T@*-+*-+r)+7e$8e$@>+;:#%/+Y1+$k+,-+iV+T{@uI+T{@V1+4m@V1+In+T{@ep+ep+WA+Kl+:x@:x@K,@OK+ N+4L#3L#4N#4N#3L#3L#pe#Kx#Vv#4L#4L#Kx#Px#L,@$7@Gt+Gt+tI+tI+ N+7X+:x@PK+PK+z@@fD+QK+QK+g~+g~+Il+rr+tr+1R+tr+@k+z@@(|+1V+R0+Kl+VH@ N+VH@ N+VH@-w+|]+kr+Mn#9e$0e$ae$Ug+Wg+Yg+):@q8+Q.+KD@be$ce$de$ee$fe$ge$he$%V#kq+8^ w[ A6 w' .;@q$#@r ie$je$T:$%! HB D8+9 +=8.zm.Tt wn.vn.ZW+M8@'g@Lh+9Y+8g.Yt.8}.8}.8}.8}.8}.8}.8}.Rx.Rx.Rx.Rx.Rx.Rx.", "E7 E7 E7 E7 E7 E7 E7 8c 9c 9c 9c 7c E7 E7 E7 tk tk tk tk sk sk sk sk sk uk uk tk !B !B tk vk d+ s& tp.V+ x* R& ]* `s@~0 R)+DG#ke$le$me$ne$i4$68@78@2B oe$Ya$pe$qe$re$se$te$y[+7]+mJ#U,@7a@FM#&b$mM@Z+#[T@t6@V8@ue$Y(+$d$_9$s)+%k+ve$we$1/#+*$#*$xe$ye$ze$Ae$Ae${f+{f+p7#]|+]|+]|+/+@/+@/+@qD+[G+^G+}G+jc@}G+}G+^G+[T+[T+[T+[T+/G+/G+/G+q;@q;@Ft+Ft+Ft+~P+(T+ay+ay+ay+uI+Kl+|R+|R+fD+fD+wI+tr+6o@|=@}=@ED+Jl+Jl+|R+:&@K,@K,@OK+@w+8 V:@T:@_7 +9 >8 .<@+<@s[@cP@es es }f }f 9~ 9~ +2T+kX+S,@v;@kX+T,@:P+3G+7=@7=@3G+[V+AI+yI+[P+vD+)w+!w+!w+)w+1R+sr+-w+-w+.B+.B+.B+.B+.B+.B+Yn+`K+`n+XN#I6@I6@p=$f0#v=@`+#s=@t&@pD+5=@oD+s=@1$@=m+RO@RO@RO@=m+{/+_k+gi+YA+2&@3&@/+@(+@/+@2&@=l#bc#Qg+2f#_i#_i#:i#M#,M#jd$ld$jd$~O#c($9T#0T#aT#aT#0T#9T#67$9T#9T#9T#0T#0T#aT#aT#>}#UL#Ef#*5#[l#%K#%K#%K#[l#*5##o#Ef##o#[l#%K#[l#*5#U7#P0#U7#U7#6l#6l#5l#[l#9<$:l#ei#>2#Ye$=2#^b$K`#,_+pV#Ze$Ze$6|$6|$>|+Y3+*w#*w#vB#+I#NP#ML#ML#ML#tB#.G#.K#X3+%2+X3+:@$#w#2t#$3@_1@Nl+)B+_T+fy+sr+dp+m;@h~+Gn+RK+RK+J,@H,@-.$W&+Qt+Rt+wI+z@@A$+fp+.q+ q+.5@gh#4v#pe#s<@d^@b~@O,@J@@&N+;m+e[+;B+,B+Bq@5e@>w+@B+,B+=B+=>+}V+;($z,+[C#`e$ f$.f$+f$N0@-T.h&@w<@@f$#f$!`+$f$%f$&f$*f$=f$|f Rw -f$;f$5`@:e =P Y~#TH Yr SC :C@7G@X~#[|@vR@R5@>f$,f$,f$'f$lQ s[@+<@.<@H~ H~ .<@Z:@>8 >8 >8 >8 >8 >8 >8 >8 >8 G0 U:@U:@U:@T:@_7 ~)#~)#~)#_7 U:@U:@_7 ~)#T-@Q} X-@Sj Sj Sj Sj X-@-[ Sj X-@-[ u[ -[ X-@v[ 2' Cd u' s*@x/ 6u )f$u*$p/@K-@sQ+t*$!f$qK.v{+~f$=L 6=+g7 .6 :,+M~.MB n8$7_+{f$]f$^f$s(+ $$/f$(f${/#_f$:f$>P+Bt+1]+|G+<9@:a@wT#=Z#+;:#Q3+7~+o0+XA+e~+M&+T{@uI+WA+In+W1+T{@PK+WA+0y+T{@WA+Kl+K,@K,@(P+Kx#Kx#Vv#3L#3L#3L#4L#4L#Kx#Vv#4L#4L#4L#Kx#pe#L,@Gt+Gt+Gt+Gt+tI+tI+OK+OK+PK+PK+z@@fD+QK+QK+g~+g~+wI+wI+wI+wI+FD+fD+z@@1V+PK+PK+OK+ N+ N+ N+(t#ur+sr+%w+ m+ac#9e$v7#Nf$Ug+Of$Yg+O,+f1@!v@Pf$Qf$Rf$Sf$Tf$Uf$Vf$Wf$Xf$Wg Re [7 A6 `' f[@{*$ U#Yf$2S.Zf$%! tM D8+ k@<9.vn.Js wn.vn.ZW+M8@0@@%.@8' '> {! 13+13+13+13+13+13+13+cI+cI+cI+cI+cI+cI+", "E7 E7 E7 E7 E7 E7 E7 9c 9c 9c 7c 7c 7c E7 E7 je je je je ie ie ie ie J6 je le le je xn.xn.7c 9& d+ e+ S% r& R& ]* `s@~0 bo@m1+`f$ g$.g$+g$%e ]]#@g$e8@oe$}2@#g$m^#$g$TD.%g$@<+VQ@i[+(8$c^#&g$U8@*g$~U#V/$*b$V8@PO@`}+fJ#@1@s)+d~+a0$a0$68+9[+#*$#*$#*$nd+nd+{f+cd+cd+=g$ir+ir+ir+='@='@='@rD+69@^G+^G+}G+}G+}G+^G+[T+[T+[T+[T+/G+/G+/G+q;@q;@dr+dr+~P+8 V:@V:@V:@V:@ <@H~ +<@s[@es 1+q[#>g$(R@g9 ,g$TJ.s;# x@j$+'g$l #{M# v@A4#)g$z4#Oe$!g$!g$BA#yU#S[#S[#~^#mZ@4Z+fX+5$@5$@YK+2 @2 @5G+X.@X.@@N+TK+=>+7=@kX+wp#8=@wp#~g$~g$~g$U.@eX+}V+BI+M#3T#4T#jd$,M#^X#0V#aV#8V#8V#aV#0V#0V#9V#9V#9V#0V#0V#aV#aV#bV#UL#NR##o#*5#%K#%K#%K#%K#[l#*5##o#*5#%K#9<$%K#[l#P7#;o#P7#P7#Iq#Iq#%K#:l#+o#Af#(l#(l#+;$+;$5*$Z_$,_+qV#/g$(g$6|$uT#'|++K#*w#u.$+I#tB#ML#z7#z7#z7#tB#.G#My#.K#X3+X3+:@$#w#2t#+}#_1@Nl+/G+_T+vr+@k+dp+[P+3R+zD+6=@AD+H,@ar+W&+Hl+:w+Rt+wI+z@@+w+6X+ih#t9#hh#pe#pe#c&@s<@-(@b~@O,@0$@J@@L@+;m+_w+}=@&t@5e@>w+)w+,B+=B+f$1g$2g$lQ s[@`:@Z:@.<@.<@.<@.<@H~ H~ H~ H~ H~ H~ H~ H~ Z:@ <@G0 S:@S:@S:@U:@~)#_7 _7 ~)#_C@_C@~)#_7 R} R} p| [} [} p| Sj X-@-[ X-@-[ -[ -[ -[ X-@Sj v[ j_ l_ l_ v, e.@6_@5V )f$X;$X;$%< 2>$%^ Dx#St.#v [| cd.rF c>.dd.W1.SV j@+3g$DP.4g$L#@5g$6g$7g$1W.T}+F9#d)+![+/_+)B+fr+}9@wT#=Z#8g$(]+9g$0g$ag$bg$cg$dg$eg$eg$f/$f/$fg$;5$gg$hg$ig$jg$Vd$kg$lg$lg$mg$ng$og$pg$qg$rg$sg$tg$ug$vg$wg$xg$yg$zg$Ag$Bg$Cg$qf$Dg$Eg$Fg$Gg$Hg$Ig$Jg$Kg$Lg$Mg$Ng$Og$Pg$Qg$Rg$Sg$Tg$Ug$Vg$aS#Wg$CH@Xg$Qs@Yg$Zg$Ic$NG#i(@ K@Z8@`g$ h$.h$+h$L,+L,+&/+&/+%/+~]+8~+@/+9X+nD+Nb+M&+T{@PK+PK+WA+WA+(P+Aq@PK+uI+WA+uI+Kl+K,@(P+PK+s<@s<@c&@G6@gY#gY#G6@G6@G6@G6@gY#gY#G6@c&@s<@yb#/P+Gt+Gt+@w+@w+h$`x#Se G`+B6 A6 D5 H; 9F ,h$cM.'h$.n#>@+k*.>@+ k@ k@35+wn.wn.vn.ZW+M8@0@@%.@8' '> {! 13+13+13+13+13+13+13+NM+NM+NM+NM+NM+NM+", "E7 E7 E7 E7 E7 E7 E7 9c 9c 7c 7c 7c 7c 7c 7c xn.je fe ie nf le ri ke .A xn.ri ke ge xn.ee g~ 6c Q% S% S% r& r& ~* pR.@R@bo@)h$qb#!h$~h${h$]h$50@a4@Gw zv (4@d2@^h$9_#/h$k%+(h$vg@v4#->+G&+EM#_h$~U#~U#V/$*b$V8@PO@6^@fJ#M,+d~+d~+a0$Pl+68+dd+K0+K0+Jb+Jb+~_+~_+cd++_+ir+ir+='@='@='@='@-]@-]@_V+[T+^G+}G+}G+}G+^G+^G+[T+[T+[T+/G+/G+/G+q;@q;@nI+nI+#{[+^a@^a@6^@6^@`;+`;+`;+`;+^a@o<@cK@`;+iV+6^@o<@)G+O3+Ri+Ti+kV+Ti+Ti+Ti+Ri+O3+O3+)G+)G+N&+N&+'G+6(@,'@8 H~ .<@+<@s[@es 1+{}+;1+'<$JM.F*$l2$Me$k #U_#+ +I4@ v@C4#5d$-c$1h$1h$2h$2h$^N#^N#S[#S[#mZ@M+#fX+gX+jX+5$@YK+2 @5G+;K@-K@-K@(8$.$#AI+BI+7=@eX+8=@U.@3h$4h$5h$6h$U.@[ @BI+M#~O#4T#jd$,M#`Y#aV#{X#8V#`4#aV#{X#aV#^X#0V#^X#0V#^X#0V#^X#z#>z#2*$2*$I_$I_$+o#EB#Af#~X#qT#7T#@2#W_$W_$W_$,_+6X#qV#pV#6|$Z%$Y3+.K#u.$[T#tB# G#z7#j0#j0#j0#>f+.G#My#My#.K#.K#:@$:@$2t#+}#_1@rD+/G+)B+_T+=w+g~+$N+#a@ky+ky+AD+H,@ar+h~+h~+:w+Rt+wI+fD+uI++w+!B+!B+z$+s<@-(@b&@b&@b&@b~@O,@0$@0$@b~@X{@O,@tr+#9@>w+#B+)w+w)+=B+/+rh$sh$th$ag$(]$uh$vh$Od$wh$xh$yh$zh$;5$hg$<}$S<$Td$kg$Ah$Bh$Ch$Dh$Eh$Fh$Gh$Hh$Ih$Jh$Kh$Lh$Mh$Nh$Oh$Ph$nf$Qh$Rh$Sh$Th$Uh$f:$E7$Vh$Wh$Xh$Yh$Zh$`h$ i$.i$+i$@i$#i$$i$%i$&i$R6$qV+3'#*i$^x@=i$1e@-i$;i$>i$x #jF@1h+,i$n)+'i$'i$n)++h$+h$)i$)i$&/+{]+k)+by+Nl+u&@}G+iD+0y+PK+PK+uI+PK+K,@Aq@(P+PK+uI+PK+Kl+(P+Kl+uI+d^@-(@b&@a$@a$@a$@a$@b&@H6@H6@H6@H6@a$@b&@b&@s<@tI+tI+@w+@w+[#gi$VF@hi$zM#ii$#W#e<#DJ.=l ,J e{@^0@W^#V^#ml 7F mI@mI@Zi@s[@`:@+<@+<@+<@`:@`:@+<@+<@Z:@H~ <@>8 +9 +9 H~ .<@+<@s[@cP@es es es }f }f 9~ 9~ M#I7#{X#`Y#{X#`Y#{X#`Y#`4#P`#^X#P`#^X#P`#^X#P`#+5#Cf#[l#*5##o#Ef#Ef#NR#NR#%K#*5##o#[l#9<$Q[$9<$%K#2*$2*$K7#K7#zf#zf#EB#J`#6T#&Z#rT#rT#Ai$Ai$Ai$oV#Bi$Ci$4X#6X#6|$G2$+K#My#[T#hf#i0#q7#Sg+Tg+Tg+Sg+>f+.G#%w#%w#My#My#:@$:@$2t#W4@$3@='@Mn+U_@b$@R0+wI+M S-$S-$;M 0> @, ^t ! $6h k.#rI@pI@+n@}A <|@dP@TT@k$#%2@cP@s[@s[@`:@+<@Z:@.<@+<@+<@+<@+<@+<@+<@+<@+<@Z:@ <@G0 S:@T:@T:@_7 WC@S:@U:@_7 _C@_C@_7 U:@S:@Sr Sr Sr V-@Yq R} T-@c2 8j#Q} Q} c2 T-@T-@T-@T-@;{ 4C >! >J Ej Ch Fi z- ]c$Hi$WU.') K=$Na TD+Ii$>=#NF+X'.WV 2=+Ji$Ki$m> .K+WH+;%+Li$Mi$Ni$5W.Oi$$9@7c#5d+}$@t)+$/+0~+Pi$fc@Qi$Ri$Si$Ti$Ui$Vi$(]$Wi$Xi$Yi$Zi$`i$yh$ j$S)$.j$4:$+j$kg$Bh$@j$#j$#j$$j$%j$5~$&j$Cf+E4+*j$=j$-j$;j$>j$,j$q+$'j$r+$Ey@Ey@Rh$)j$!j$~j${j$]j$^j$/j$(j$_j$;L#zm+wm+:j$=^#+R;@/V+hp+-]@8 +9 +9 V:@.<@Z:@`:@s[@cP@es es cP@}f }f 9~ 9~ $9)$C`#59@C`#Hj$Hj$vi$Gt+s=@:k+=m+RO@RO@RO@1$@1$@gi+YA+2&@3&@/+@(+@/+@2&@F:+=g$6e@h0#2f#2f#Rn#>$,6+My#My#My#+G#+G#@G#@G#@K#@K#AB#AB#BB#BB#BB#BB# O# O# O#@I#@I#^l#^l#^l#M`#^l#@I#^l#M`#M`#ci#@I##K##G#EB#_l#_l#Af#EB#yf#bV#bV#bV#bV#bV#bV#bV#bV#:X#:X#/X#+5#+5#/X#:X#:X#/X#/X#/X#/X#/X#/X#/X#@5#M#6V#`Y#b@$P`#b@$P`#(X#I7#(X#`Y#(X#P`#b@$Q`#c@$ Z#$5#[l##o#Ef#NR#NR#NR#Ef#[l#*5##o#*5#%K#9<$%K#Cf#Fq#Fq#H7#H7#.5#Y4#&Z#&Z#mV#7X#I.$Kj$Lj$#Z#@Z#@Z#Bi$Mj$Nj$4X#H2$f8$+G#Ly#hf#:i#q7#p7#Tg+Oj$Oj$Tg+if#.G#u.$u.$%w#My#:@$-6$Pj$2t#$3@_1@Mn+q;@U_@Q0+fD+g~+Rt+k$,k$Vi$Z~$'k$Xi$)k$!k$_]$Y!$ 4$7:$4:$3:$~k${k$@j$0+$a+$w]$]k$7{$^k$/k$(k$_k$:k$+R;@u~@:T+It+-]@Mn+(T+uI+uI+uI+uI+WA+WA+uI+K,@Kl+PK+Kl+(P+K,@Kl+1V+6T+&N+J@@_w+K@@my+e^@_w+0&@ny+K@@_w+e^@_w+e^@K@@K,@K,@ N+(P+OK+(P+(P+Kl+z@@z@@z@@fD+QK+QK+wI+wI+wI+wI+QK+5T+1V+1V+z@@z@@(P+(P+ N+ N+ N+OK+@w+ay+=w+(|+G:+[]+Ng+qi+Ug+,d$2P#jr+ak@wk$k>+a>+xk$c'+yk$zk$Ak$Bk$Ck$kj$lj$~o A6 wo v6 p$#O: Dk$T' 8h#M'$2x.u=+F=+FR 5D+}f.@$+ko.13+be+8g.x8.9Y+Lh+]! {! 13+13+13+13+13+13+13+NM+NM+NM+NM+NM+NM+", "E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 7c 9c 9c 9c 8c BW BW BW BW Sy.Sy.Sy.Sy.Sy.{k.{k.BW zW zW BW nf oj le Ek$sk Ql +n 4K@K= G! %'+Fk$Gk$Hk$Ik$Jk$Kk$Lk$w@#Vx@.6@X[.Op@l|@Mk$eD@Nk$Ok$Pk$e,$E+@Qk$Rk$U}+W~@9!@,u+hD+vG+1N+kR+Sk$--+p0+9~+[9@[9@0d+Gg+: @l)+Ol+Ol+Ol+Nn+:T+:T+5X+5X+5X+;'$;'$;'$;'$5X+^V+(G+Mn+69@[G+[G+[G+[G+69@69@69@_V+_V+_V+Mn+Mn+_V+_V+/G+[T+[T+^G+:V+:V+qy+b$@}T+_T+Q0+Q0+R0+@k+FD+fD+fD+fD+FD+|R+:x@fh#fh#fh#:x@:x@K,@(P+Kl+Kl+(P+fD+PK+uI+0y+T{@Jn+iD+!P+!P+cr+Ft+gp+~G+lm+mI+P3+)G+)G+'G+)P+)P+$-+#}@#>+#>+Z(+5k#5k#Y6@Y6@Y6@x6@x6@x6@']+']+t)+t)+t)+)]+)]+s~@)]+)]+)]+)]+s~@U_@gK@]G+SA+jD+SA+SA+SA+]G+]G+]G+]G+]G+]G+SA+SA+jV+jD+]G+]G+jD+jD+SA+gK@od+e~+lD+od+Nb+sD+8X+Nb+P0+Ll+X1+B$+Ll+Ll+B$+iV+B$+B$+YM@YM@Ll+Ll+qy+qy+Kn+Kn+iD+iD+Jn+Jn+ep+T{@1V+1V+1V+y@@*4+*4+*4+}6+4a@![+w@@~7@.>#7d+8d+8d+T&+N@+_|+>2+^8$* +oz@B;$)>+4u#57@$X#${#o9+=l :t qG *8@$p@W^#uG uG nI@nI@`:@`:@+<@+<@+<@+<@`:@s[@`:@.<@>8 G0 S:@G0 >8 <@+<@`:@cP@es $`k$YA#59@C`#Hj$2,$vi$/P+}G+sD+]/+]/+]/+sD+t&@s=@Nl+u&@}t#`J#.}#v&@.}#2&@F:+=g$@4+Pg+2f#2f#Rn#>$,6+ ;$My#My#My#My#+G#+G#@G#@G#@G#@G#zB#zB#zB#`_$PP#PP# O# O#@I#@I#@I#^l#M`#^l#@I#^l#M`#M`#ci#@I##K##G#EB#_l#_l#Af#EB#yf#/K#/K#/K#/K#/K#/K#/K#/K#Dc##5#:X#/X#/X#:X##5#Dc#:X#:X#:X#:X#:X#:X#:X#)2#Ct#Jq#~2#,5#,5#~2#Jq#O7#Jq#Jq#Jq#Jq#O7#O7#O7#O7#HB#`y#_X#`y#Zy#C0#Zy#HB#$K#$K#$K#HB#HB#`y#`y#D2$;z#]5#]5#]5#]5#/5#/5#/5#/5#]5#`7#]5#Tc#(2#Tc#/5#/5#Tc#(2#(2#(2#(2#Tc#/5#(2#(2#(2#(2#(2#(2#(2#TB# l$]g$Te$.l$+l$xi$a<$a<$0h$ah$Pt# Z# Z#{/${/${/$Ft#Yq#D2$Yq#|w#OB#|w#Yq#|w#|w#Zq#}w#)M#Y`#Yq#Gt#{/$>6$@l$#l$$l$dh$]X#{X#Q`#]b$zi$id$b@$(X#,M#>M#nT#`y#^K#Qt#Rt#_X#{O#HB#nT#HB#nT#`y#{O#_X#^K#_X#l$,l$Ci$'l$)l$Nj$H2$f8$xB#Ly#hf#:i#q7#p7#Oj$t7#t7#Oj$if#>f+[T#sq#u.$%w#57$-6$Pj$2t#%3@:1@ip+Mn+q;@P0+Kl+5T+2V+dp+Qt+$N+=B+ky+#a@mX+w)+ED+Jl+FD+(P+wI+&N+I:+G$+2V#&R#}a@6Z+X{@d^@a$@-_#-_#Kx#gh#gh#ay+|R+wD+wD+A@@B+ZK+lX+Q,+YK+>K@zM@9e#8e#8e#!k#!l$~l$b9$b9$Rj$Sj$Q'${l$']$i|#3/+]l$^l$/l$(l$Xj$l,$o$#kp 9q 9s 4i 4i _l$:l$$Ql$6)$4c$Rl$Sl$Rl$9j$8j$Ab$v^@Tl$2(@58+u~@t~@1}@ip+(G+ay+1V+1V+1V+z@@z@@z@@1V+|R+fD+z@@fD+|R+:&@|R+QK+(w+/w+_w+*>+ny+*>+my+;B+O)@0G+my+Y.@(w+Y.@my+ny+|R+|R+K,@|R+:x@:&@:&@:&@z@@z@@z@@fD+QK+QK+wI+wI+wI+wI+wI+wI+FD+fD+z@@1V+(P+K,@ N+ N+ N+OK+ yj+oA+)> {! 13+13+13+13+13+13+13+cI+cI+cI+cI+cI+cI+", "E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 7c 9c 9c 8c 8c {k.BW BW Sy.zW zW 'B 'B {k.{k.{k.Sy.'B 'B {k.oj @m$HO.Ek$SG.Pl +n =$.K= H! +b wv.I!@t^ #m$$m$%m$&m$u@#}###.$9m *m$)2@<4@vj$r9@=m$-m$D@+;m$>m$ei@8a@R<@J&+K&+U1+vG+1N+jm+,m$I,+R;@-:@9~+[9@[9@#_+l)+l)+l)+Ol+Ol+Nn+:T+:T+F,@F,@8)$8)$8)$8)$8)$F,@km+^V+Mn+69@[G+[G+[G+[G+69@69@69@_V+_V+_V+Mn+Mn+Mn+Mn+Mn+/G+/G+[T+[T+)B+gK@b$@}T+_T+b$@f~+R0+fy+Kl+fD+fD+fD+fD+|R+:x@fh#Aq@fh#fh#:x@K,@(P+Kl+Kl+FD+FD+Kl+uI+0y+T{@Jn+iD+!P+cr+Ft+~P+dr+gp+!G+lm+N&+)G+N&+Kn+fp+fp+jV+lR+j)+j)+9d+&f+Z(+5k#][+Y6@x6@x6@x6@']+']+t)+t)+t)+']+t)+)]+)]+t)+']+t)+)]+U_@gK@]G+SA+SA+SA+SA+]G+gK@gK@gK@gK@gK@gK@gK@]G+SA+gK@U_@U_@]G+]G+gK@)B+Mb+N0+od+Mb+sD+p=$]/+sD+P0+YM@X1+X1+Ll+Ll+B$+`;+YM@Ll+Ll+qy+qy+P0+P0+b$@fp+fp+Jn+Jn+6X+6X+0y+0y+z@@z@@1V+1V+[=@*4+*4+p8++k+De@>G+~[+!7@t^@Y8@Y8@T&+wp+g~+*>+^^#mo@1V#He@'m$[-@la@D]#7=$/7+n{ ZA t! *8@:C@7G@sG uG DN DN s[@s[@`:@`:@`:@`:@s[@cP@cP@Z:@G0 ~)#~)#T:@>8 Z:@s[@cP@$`k$YA#59@C`#Hj$2,$Hj$/P+jc@]/+]/+]/+sD+8X+s=@nD+Nl+u&@}t#`J#.}#v&@.}#}t#ir+$a@@4+Pg+2f#2f#Rn#df#Sn#}f#,l#hf#Ly#Ly#Ly#[T#-X#-X#-l#-l#Ly#Ly#.G#.G#!w#!w#I`#I`#u0#z!$v0#>>$,6+ ;$My#My#My#My#+G#+G#@G#@G#@G#@G#zB#zB#zB#zB#PP#PP# O# O#@I#@I#@I#@I#M`#^l#@I#^l#M`#M`#ci#@I##K##G#EB#_l#_l#Af#EB#yf#_l#_l#_l#Af#Af#Af#Af#Af#zf#Dc##5#:X#:X##5#Dc#zf##5##5##5##5##5##5##5#Bf#N7#Jq#~2#,5#,5#~2#Jq#I0#,5#,5#~2#~2#Jq#O7#O7#I0#HB#_X#_X#`y#Zy#C0#Zy#HB#C0#Zy#Zy#Zy#$K#$K#HB#Y`#;z#]5#]5#]5#]5#`7#`7#`7#/5#]5#`7#]5#Tc#(2#Tc#/5#]5#/5#(2#_2#_2#(2#/5#]5#Tc#Tc#Tc#Tc#Tc#Tc#Tc#iT#)6$]g$.l$[m$[m$xi$a<$]K#0h$ah$Pt#*G# Z#*G#*G#*G#|w#Yq#D2$Yq#OB#PB#OB#Zq#5w#|w#Yq#)M#qt#pt#}w#NB#^X#>6$@l$}m$|m$Jj$]X#`4#Q`#hd$1m$id$b@$(X#,M#>M#{O#^K#Rt#]K#]K#Rt#^K#{O#Z`#nT#nT#{O#{O#^K#^K#Qt#2m$3m$3m$VL#md$'2#+o#G_$SL#[I#md$[I#'2#:l#Cf#bV#e@$e@$e@$e@$4m$4m$5m$5m$5m$&l$6m$7m$8m$9m$0m$am$bm$cm$dm$Nj$H2$57$xB#Ly#hf#:i#q7#p7#Oj$t7#t7#Oj$if# G#sq#sq#5t#%w#57$f8$Pj$Pj$@}#em$fr+ip+Mn+U_@ay+1V+[=@=4+2V+:w+#a@c^@0~@#a@w)+B+P)@s;@s;@fm$]K@'K@AM@AM@zM@AM@pZ@gm$hm$hm$!l$im$09$jm$km$Ar+P$+Oe@sz#lm$mm$s1$D'$Rv G%$/d Gv Gv m=$!A nm$om$pm$}r@Tx v! [|@s[@cP@es es cP@`:@Z:@H~ Z:@Z:@Z:@Z:@Z:@Z:@Z:@Z:@+<@H~ +9 +9 >8 <@>8 V:@S:@G0 +9 >8 >8 +9 G0 S:@R} R} U-@Yq Yq Yq U-@U-@T-@U-@V-@Sr ,8 Sr V-@lI@y`#qm$n$,n$'n$)n$6F#H<#KK#!n$,k#ab#[e@~n$X=${n$]n$^n$/n$(n$_n$_n$:n$+0G+0G+*>+*>+>B+0G+;B+Y.@/w+Y.@;B+ny+Jl+|R+|R+:&@<&@#9@#9@#9@z@@z@@z@@fD+QK+QK+wI+wI+QK+wI+tr+tr+:&@FD+z@@1V+K,@K,@ N+ N+ N+}R+ yj+oA+)> {! 13+13+13+13+13+13+13+ko.ko.ko.ko.ko.ko.", "g~ g~ g~ g~ g~ g~ g~ 9c 7c g~ dd dd g~ 7c 9c Sy.BW xk (K.(K.xk BW Sy.(K.{k.Sy.{k.(K.wk {k.mf ri ie sk sk Tl @n if _] jP.lB@;+@+[#BX+Hk$7n$;j.8n$9n$0n$V:$an$bn$.3#,4@cn$!{#dn$en$fn$8)#Ux#>m+Gq@Eq@Q<@9!@8>@kP+Xp+jm+gn$Oc$0j$0j$y6@+h$)i$[9@&/+&/+&/+&/+{]+Ol+It+-]@G,@F,@@7@39@39@@7@8)$G,@:R+hp+ip+-]@@j2$M9#&-#in$n[#[f rG ST@QC Du *E cs [,$,M Y;$Y;$Z;$}f 9~ es s[@+<@Z:@H~ +9 S:@G0 +9 .<@+<@ mI@i4#@-#Qp >$'6+ ;$Ly#[T#u.$My#.K#X3++K#+G#@G#@K#|T#,|+'X#1T# O# O#@I#@I#@I# O#PP#PP#PP#^l#qT#M`#@I#@I#ci#7T##K##G#EB#_l#_l#Af#EB#yf#_l#_l#_l#Af#Af#Af#Af#Af#Dc#Dc#Dc##5#:X#/X#/X#/X#/X#/X#/X#/X#/X#:X#:X#)2#!2#)5#Lq#&G#Lq#Kq#^E#:I#J0#J0#J0#J0#J0#J0#J0#J0#Zy#Zy#C0#IB#IB#C0#Zy#Zy#D0#CR#IB#Zy#$K#$K#HB#)M#;z#]5#]5#]5#]5#]5#]5#]5#:2#:2#:2#_2#(2#(2#Tc#Tc#Tc#Tc#Tc#(2#_2#:2#:2#:2#(2#(2#Tc#/5#/5#Tc#(2#St#~6$Z4$Z4$Z4$Z4$a<$a<$a<$z.$z.$ah$ah$z.$*G# Z#'M#z.$z.$z.$z.$0h$sn$tn$un$sn$0h$z.$Qt#Qt#z.$0h$+O#0V#vn$wn$xn$d($yi$yi$d($c($Y4$hd$Q`#`Y#`Y#b@$id$Rt#jT#hV#6w#6w#tt#st#st#hV#hV#hV#6w#6w#tt#tt#Y`#+5#+9G+x;@,T@,_$Kn$Ln$Mn$Nn$Mn$Mn$On$On$]^#hm$b9$w4#||+S)@@*+V###h+Pn$Qn$Rn$-0@#L@F%$jp :0 |/$I%$g.#h.#U~#U~#Yk@Tx 6F rG }f }f 9~ 8 V:@T:@U:@S:@+9 V:@V:@V:@V:@V:@S:@T:@U:@T:@WC@ ;Q.%o$&o$/B@*o$=o$-o$u{$t$+(f+Og+#4+~_+._+s:+dE#^]+_a@7m@;o$>o$,o$'o$f6$)o$!o$~o${o$P1$Z!$]o$w|$4j$^o$/o$(o$w]$Qm$_o$;F#:o$:@5}@MU#,:@,:@,:@F,@:R+[R+gp+WA+[=@vI+vI+5T+5T+QK+QK+Jl+tr+L)@{k@{k@L)@tr+Rt+(w+Y.@Y.@Y.@Y.@;B+;B+;B+Y.@16+&R#Y.@>B+0G+*>+O)@ED+Jl+Jl+wI+wI+QK+QK+5T+5T+wI+Jl+wI+1V+y@@1V+fD+wI+wI+wI+wI+FD+FD+FD+FD+Kl+(P+OK+OK+OK+OK+tI+OK+uI+Q0+;2+si+^f+#4+|/#li+=:@.-+sG+j|+J/+Bo$Co$Do$Eo$Fo$Go$P_+Ho$G`+_1 Dn 4, .l 9F v' Io$%]$Jo$T3#Tx.@A.hS.=; GA+Pj+Rx.8}.7}.Rx.6g+)> d> )i.d> Yt.{! l7 NM+s6 s6 ko.NM+O4 ko.ko.13+13+@$+@$+", "g~ g~ g~ g~ g~ g~ g~ 9c 7c g~ dd dd g~ 7c 9c ee fe xk ri (K.nf BW ee (K.ge Sy.ge (K.oj {k.ee he 9c tk tk Tl *=.SU hf Jn 3x@_2+mB@0v.Ko$Lo$Mo$No$k4$02$Oo$vm$Po$.3 .3#Qo$Me$Ro$So$To$A($B($zp+<7@8a@[:@a}@dw+2h+x&@#1@`0$3(@Oc$Oc$Oc$+>+L,+[9@p0+p0+&/+p0+{]+Nn+It+-]@G,@F,@[R+39@39@@7@8)$G,@hp+hp+hp+It+ip+-]@_G+_G+ne#:G++/f+%4+%4+s~@`g+(f+T.+__+J:+K:+y'#]R@C'#/-#@5$Uo$in$+x++<@[|@ST@QC PC *E }g !M ,M Z;$Z;$Z;$}f 8 +9 >8 H~ Z:@`:@$ O#@I#@I#^l#@I# O# O# O#^l#M`#M`#^l#@I#ci#7T##K##G#EB#_l#_l#Af#EB#yf#Af#Af#Af#Af#Af#_l#_l#_l##5##5##5##5#:X#:X#:X#:X#/X#/X#/X#/X#:X#:X#:X#!2#pt#)5#Lq#Lq#)5#Kq#J0#^E#J0#J0#J0#J0#J0#J0#J0#J0#HB#$K#Zy#Zy#Zy#Zy#$K#HB#IB#C0#Zy#$K#$K#$K#Zy#pt#;z#]5#]5#]5#]5#]5#]5#]5#_2#(2#(2#(2#(2#Tc#Tc#Tc#(2#(2#(2#(2#_2#_2#_2#_2#_2#(2#(2#Tc#Tc#(2#(2#hT#~6$Z4$Z4$Z4$a<$a<$a<$a<$ah$0h$0h$0h$0h$ah$z.$Qt#Qt#Qt#Qt#Qt#z.$0h$sn$#p$0h$ah$z.$Qt#Qt#z.$ah$NB#>6$wn$wn$67$aV#9V#d($0V#Y4$Y4$]b$]b$]b$]b$c@$`y#}w#}w#hV#D2$6w#D2$6w#Y`#hV#}w#hV#D2$6w#D2$tt#Y`#{/$2+:|+&N+K@@L@@H6@gY#4L#Lx#Lx# N+wI+}P+A@@S.@w)+,B+0G+>B+0G+lX+DD+,T@,_$>p$Kn$Ln$Mn$Mn$Mn$On$On$]^#hm$~l$,p$'p$Ei$D#$2)#^M#H[#~8$)p$hk@o[#l,$!p$+, ;b |/$v_$h.#!A !A pI@Tx 6F rG 9~ 9~ @Ep$Fp$Gp$Hp$Ip$2b$Jp$lq@H*$Kp$Lp$i>$Mp$ro$Np$Op$Pp$Op$Qp$Rp$Sp$4c$Tp$yb$21@>:@MU#,:@,:@G,@,:@G,@F,@:o+[R+gp+y@@[=@vI+vI+5T+5T+QK+QK+wI+Jl+tr+L)@L)@tr+Jl+g~+_w+Y.@Y.@;B+;B+*>+*>+*>+*>+R.+16+;B+P)@0G+*>+O)@ED+ED+tr+Rt+wI+wI+wI+QK+QK+Jl+tr+Jl+z@@1V+z@@FD+wI+wI+wI+wI+FD+FD+FD+FD+(P+(P+OK+OK+OK+OK+tI+tI+(T+(T+U_@N0+Sl+(6+|/# o+7}@Up$'R@22+Vp$Wp$Xp$Yp$Zp$`p$ q$[0 hP@89 S: ,J vo 3n 9F f[@$'#.q$|` h8..F..F.*; hS.Pj+,8+8}.8}.7}.Rx.6g+)> d> )i.d> Yt.{! l7 NM+.Z s6 ko.ko.O4 ko.ko.13+13+@$+@$+", "g~ g~ g~ g~ g~ g~ g~ 7c E7 E7 g~ g~ E7 E7 7c xn.je nf ke ri le fe xn.nf ie fe je nf ke nf je 0' 6c .h..h.Ml Ml de kh B& e3+w< +q$__$Ts+@q$#q$m<.$q$%q$&q$p{@*q$C3 =q$vG.$`.-q$vD#;q$9e@dk@VH#[7@}8+Eq@Q<@Vy+0m+X5+#1@`0$>q$Ao$3(@K,+D4@R;@{]+ 6+ 6+ 6+ 6+Fg+@_+0X+Jt+;'@hp+It+]V+]V+5X+:R+G,@[1@[1@t~@$!@t~@1}@ic@bi@7k@bi@<9@ic@fr+ic@ic@ic@='@ir+(+@(+@dy+dy+dy+{/+{/+1$@=m+=m+RO@RO@&m+I6@ur+7X+eh#7X+OK+}R+(P+:x@fD+fD+FD+|R+L)@{k@fz@fz@wI+wI+QK+QK+z@@1V+WA+WA+T{@T{@6X+6X+!P+!P+!P+!P+fp+fp+fp+fp+fp+fp+-'@-'@by+@/+di+Dg+`(+`(+Fg+Dg+li+<&#ii+<&#oD#bs#oD#<&#<v#bs#}/#}/#bs#5v#<&#Yg+Yg+Yg+Yg+:6+:6+:6+:6+kp+kp+kp+kp+kp+kp+kp+kp+-2+$4+_6+<]+<]+_6+mD+nD+-'@{G+~G+gp+#w+dr+dr++p8+G$+; +R@+)}@)>+9G#,q$'q$Uo$)q$*S +<@[|@ST@QC PC &E }g !M [g }f }f }f }f 6$0V#0V#aV#aV#aV#8V#8V#8V#$p$%l$``#e@$}q$|q$1q$2q$1q$2q$3q$4q$0m$9m$5q$8m$6q$(g$Ze$od$f($Y1#+G#+G#My#My#e8+e8+A7#'l#'l#'l#.4+QL#7q$7q$Y3+Y3+f($f($8q$c0$>c$9q$we@:a@X4@;'@gp+(T+OK+(P+QK+Il+T@TK+{-+@N+3]+~-+/w+(w+K@@P,@*9@-_#3L#4N#4N#Aq@Jl+vD+S.@xD+,B+K)@>B+P)@ZK+ZK+,T@!K@'K@AM@qZ@qZ@0q$0q$0q$aq$aq$aq$hm$~l$bq$,p$S5+A4#f&@cq$dq$!=#=-#eq$fq$gq$hq$iq$+, h8 5;#Gv 9s 9s V^#j@#;E hB 8 G0 S:@V:@>8 lI@H5@0~ 0~ I~ 0~ 0~ H5@I~ lI@`Z Nx@I~ %W@{M jq$IN kq$PT@(V#Pe o!$K[$'N+sZ#lq$qU.mq$+Z.X< FX.nq$oq$pq$qq$rq$sq$tq$uq$vq$wq$xq$yq$zq$M[#5R+DV+''@Jt+QL#y0+)|+<[+=_+^]+=/+Ld$tV#Aq$,o$Bq$Cq$Dq$@4$U2$U2$|}$y|$rk$Eq$Fq$Gq$/o$0+$Hq$Iq$Jq$Kq$Lq$~!$Mq$Nq$Oq$Pq$Qq$Rq$Sq$Tq$Uq$Vq$Wq$Xq$Yq$Qh$Rh$Zq$)j$`q$B $=Y#nS#dU# r$.r$+r$@r$#r$$r$(=#%r$F(#>e#R]#v<#&r$B6@*r$V>$=r$d6$,o$-r$Rp$;r$>r$,r$'r$Qp$)r$-'$-'$F4@41@.:$+7@>]@8)$tG+8)$tG+O3#.q+Ip#t9#y@@=4+H:+H:+2V+2V+Il+Il+Il+g~+Rt+Rt+Rt+Rt+g~+Il+my+;B+;B+*>+*>+0G+0G+>B+0G+/w+:|+0G+P)@0G+*>+>B+w)+w)+ED+p.},+2q@^Z..$+4H.g*.g*.g*.S|@Fu#.d++$+X0.+$+Yt.{! cI+ko.O4 O4 13+13+=L 13+13+13+13+@$+@$+", "E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 sk tk oG.:j.:j.oG.tk sk uk uk tk tk uk oG.oG.vk !% i> S% l:.Ll 3b yT.de Z& ,1@k* >- (r$h{$]y+}$._r$:r$q$>q$21@Tl$R;@R;@{]+bd+bd+!_+!_+Fg+&k++_+0X+Nn+N2@It+ip+ip+It+:R+:T+[1@t~@$!@u~@u~@t~@fr+ic@bi@<9@<9@ic@ic@fr+fr+gr+Jt+>k+ir+ir+gi+gi+gi+dy+_k+_k+:k+=m+RO@}&@X+$XN#oe#3P#3k#eh#OK+}R+(P+K,@FD+FD+|R+|R+tr+tr+L)@L)@Jl+Jl+wI+QK+z@@1V+uI+WA+0y+0y+A$+A$+cr+cr+cr+cr+)P+)P+)P+)P+)P+)P+Ln+Ln+by+@/+Rl+di+Fg+Fg+Fg+Dg+gJ#<&#ii+ii+oD#oD#5v#ii+<v#bs#}/#}/#bs#5v#<&#Yg+Yg+:6+:6+si+[]+[]+]_+[]+[]+[]+[]+[]+[]+[]+[]+-2+$4+_6+<]+<]+_6+mD+nD+{G+{G+gp+gp+#w+dr+dr+dr+U_@P0+qy+Ll+Ll+qy+P0+P0+qy+qy+qy+P0+P0+b$@b$@b$@@w+@w+}R+OK+OK+ N+K,@K,@#9@|R+1V+y@@vI+QK+QK+L@+ED@ED@L@+5T+uI+b$@Nb+[]+%4+'k+wp+q$@Bt++>#x'#9Z.`|#sZ@3r$4r$5r$bL#*S +<@[|@ST@QC PC &E Kv !M [g 9~ 9~ 9~ 9~ 8 H~ Z:@s[@es es es es +=>+Q,+Q,+W{@S##sD@dB@!w+)w+vD+sr+sr+@k+up+:c@5e@5e@:c@#k+fy+~i@Zn+e0#X+$`n+]k+]/+:k+Pn#hc#4=@|&@t=@Cy#5=@Pn#u=@(t#(t#(t#(t#(t#`M+`M+7h$7h$YM+NK+NK+qI+qI+ne#/+@]|+h0#h0#h0#h0#:i#:i#}f#}f#,l#hf#[T#Ly#Ly#Ly#Vl+-X#-l#hf#sq#|f#tq#Ky#!w#!w#D7#D7#ct#ct#dt#D7#&2+fd+`-$;f+Ly#[T#u.$5t#<@$u.$xB#xB#pd$pd$yB#AB#er$X4$ O#^l#ci#ci#ci#ci#@I#^l#ci#ci#ci#ci#M`#M`##K##G#EB#_l#_l#Af#EB#yf##G#yf#EB#Af#_l#/K#bV#bV#/X#/X#/X#:X##5#Dc#Dc#Dc##5##5##5#:X#:X#:X#:X#M7#'6${E#+z#]z#]z#;z#~5#{E#;z#;z#;z#;z#;z#;z#;z#;z#HB#HB#$K#Zy#Zy#$K#HB#HB#HB#`y#`y#_X#_X#`y#HB#Y`#]z#/5#/5#/5#/5#/5#/5#/5#`7#`7#]5#/5#/5#Tc#Tc#(2#:2#:2#:2#_2#(2#Tc#Tc#Tc#gV#:2#_2#_2#_2#_2#:2#}o# r#a<$a<$a<$a<$a<$a<$a<$R[$R[$=M#=M#R[$a<$]K#Rt#id$id$id$id$id$zi$/q$(q$zi$id$id$id$id$id$id$hd$vn$fr$xn$qT#^l#8T#d($>6$gr$Y4$]X#dh$hr$hr$]b$K7#M7#Fc#O7#Df#I0#Hc#'z#_o#Gc#Hc#Gc#Df#I0#&5#O7#l$5q$8m$mr$nr$nr$nr$nr$f($f($|T#|T#@K#@K#)E#)E#I`#I`#I`#C7#QL#.4+7q$7q$Y3+Y3+f($f($or$or$)b$>c$xe@|9@hc@$!@oI++=>+zI+>T@f^@Y.@Y.@_w+e^@L@@*9@-_#u!$pr$qr$L)@)w+$B+~w+K)@0~@P)@ZK+Q)@2T+!K@>K@AM@zM@zM@9e#rr$rr$sr$tr$tr$tr$hm$~l$b9$,p$@d$Cj$4d$*1@Tb+TU#ur$GT#xz@vr$wr$J5@o$#xr$;b 5r 9q 9q j@#ds ;E Zi@cP@cP@cP@s[@`:@`:@+<@+<@`:@`:@`:@`:@`:@`:@`:@`:@s[@s[@`:@`:@+<@Z:@.<@.<@H~ Z:@Z:@H~ +9 V:@+9 >8 Nx@lI@0~ I~ EN#EN#I~ I~ {M I~ 0~ I~ 4|@2|@3|@Ox@/Z#yr$Ox@V:@{Z#zr$_|$Ar$Br$Cr$/O.Dr$Er$Fr$s@#Gr$Hr$j' Ir$Jr$HX.#T.Kr$Lr$d;@y2@!}$Mr$Z.+bx@,v@:/$X1#!6+~6+Z3+Nr$3[+=/+/]+tV#vV#Or$bp$Cq$Pr$Qr$Rr$i>$s9$V<$Sr$Tr$Ur$Vr$fp$Wr$Xr$WX#Yr$@&#@Y#Zr$<)$`r$.[$ s$.s$+s$@s$RQ##s$$s$%s$&s$*s$=s$-s$;s$>s$,s$|#$'s$)s$!s$~s${s$]s$^s$/s$(s$_s$b2+R~@:s$r$>r$,r$Qp$2r$p0$X>$a{$38+>]@@7@8s#O3#+q++q++q+.q+MF@t9#L,@[=@=4+H:+H:+2V+2V+Il+Il+Il+Il+Il+Il+Il+Il+Il+Il+my+;B+ny+*>+4 @>B+t<@P)@t<@;B+my+>B+t<@;B+my+>B+w)+w)+w)+w)+ ko.ko.@$+=L @$+@$+=L 13+13+13+13+@$+@$+", "E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 $~.Ql Rl (j._j._j.(j.Rl Ql Tl Tl Rl Rl Rl Tl _j.O~.~. }. e+ R% m& 3b yT.de m& {. ^+ 9* ]=.^U+yw H^$7s$8s$(#xO+cf 0s$$`.;1#as$#o+|k+>>+=t@Y.+}8+bs$V;@5(@-i@AT#2r$)r$cs$21@31@I2@R;@p0+!/+/[+O;$K0+m8+m8+m8+&k+&k+&k+0X+0X+0X+0X+hp+hp+[1@t~@$!@u~@u~@t~@[1@fr+<9@<9@<9@ic@ic@fr+fr+hr+hr+Xl+>k+>k+ir+ir+gi+gi+$4+$4+-2+{/+=m+RO@}&@60#p;@3P#3N#uy#OK+ay+Kl+K,@<&@:&@tr+Jl+Jl+wI+g~+Il+Rt+Rt+wI+QK+5T+vI+1V+y@@0y+0y+0y+0y+A$+A$+A$+A$+M&+M&+'G+'G+'G+'G+kD+kD+@/+@/+&k+&k+On+*k+._+Fg+gJ#<&#ji+ii+5v#oD#<&#ji+ii+<&#oD#bs#bs#oD#<&#ii+Yg+:6+:6+si+[]+[]+]_+]_+]_+]_+]_+]_+]_+]_+]_+]_+M0+Kb+(6+n8+Rl+~/+rD+Nl+_V+_V+oI+ZM+49@49@0s#nI+U_@qy+Ll+Ll+Ll+Ll+qy+P0+qy+qy+qy+P0+P0+b$@b$@b$@~P+~P+(T+ay+ay+ay+Kl+Kl+<&@FD+1V+y@@vI+QK+QK+b~@;v@ze@d^@PK+(T+)B+Nb+Mb+-m+jr+qe#q$@Bt+hg@&1@oK@YF@m[+RH#ds$d]@D_#J!$`:@[|@@W@+z Qw &E Kv !M [g 6$]X#dh$vs$vs$]b$K7#|+L`#1T#1T#Xy#Xy#s=$s=$s=$'$$&2+!|+Es$Es$'|+'|+G2$G2$Fs$or$b0$>c$ye@}9@}9@X4@]V+dr+@w+}R+PK+5T+g~+ED++*>+(w+J@@e^@L@@L@@*9@)~##9@{k@dB@dB@~w+K)@0~@P)@ZK+2T+T,@5$@gX+9e#9e#vp#c9$Gs$Hs$Is$Js$Js$Ks$Ls$Ls$c8$ ^$J$+Ms$-c$7P#WX.ek@[ +Gh+Ns$Os$Ps$Qs$iq$Rs$!p$i8 j.$ml {a 7r .~ Zi@cP@s[@s[@s[@s[@`:@`:@`:@s[@s[@s[@s[@s[@s[@s[@s[@cP@cP@s[@`:@+<@+<@Z:@Z:@.<@+<@`:@Z:@ <@>8 >8 <@H5@0~ I~ EN#{M {M {M EN#%W@%W@%W@4|@1|@}|@1|@{8@Ss$]Z#4|@ZA %S Ts$Us$B]#+#$Vs$Ws$Xs$Ys$Zs$`s$ t$.t$+t$8R.vU.@t$#t$$t$%t$&t$bJ#*t$!k#K@+]u+=t$-t$6[+T%$C0+C0+;t$-|+=/+/]+Rl$>t$,t$'t$Cq$)t$!t$Rr$i>$y,$~t${t$Tr$]t$^t${k$Wr$w]$)W#u^$/t$(t$_t$:t$r$>r$pt$;r$6)$#1@4(@`I+O3#%!@Ip#.5@.q+NF@28+NF@MF@LF@L,@z$+[=@=4+H:+H:+2V+2V+Il+Il+Il+Il+2V+2V+2V+2V+Il+Il+e^@_w+K@@ny+0&@O)@a=@Q,@qt$4 @0&@t<@0=@(w+J@@4 @$N+$N+$N+$N+P,+P,+w)+w)+Rt+}=@{k@L)@FD+fD+(P+:&@Jl+Jl+Jl+Jl+|R+|R+|R+|R+(P+(P+}R+}R+ay+ay+~P+~P+M)@M)@cr+{G+by+<]+xb+w'#1a@MK+rt$,`+;i#st$tt$ut$vt$n<+wt$9_@89 If ,J 2k 9> 4n {*$xt$15+%+..1#2^ `'+$J.$J.$J.9f+9f+^D.^D.ye+y'@Gb$CU#]Z.x,@]Z.a(+)> 13+13+ko.13+=L =L =L @$+@$+@$+@$+13+13+", "7c 7c 7c 7c 7c 7c 7c g~ E7 E7 7c 7c E7 E7 N6 Ql |{.X)@hY.hY.X)@|{.%x+|{.9%.9%.|{.%x+|{.G6.Y^ n@ y* h@ e+ s$ m& yT.de 9- c& C. s& G[.ad S0 L(@ye.(t.yt$zt$At$g0 e4 yO+60 Bt$Ct$po@im@ja@Db#$>#y'#Y.+.L+(9$@5@5(@Z}$Dt$Et$Ft$Gt$cs$4}@I2@D4@&/+Ht$`1++|+O;$K0+K0+!_+!_+cd++_+&k+&k+N2@N2@0X+0X+t~@t~@t~@t~@t~@t~@t~@t~@ic@ic@ic@<9@ic@fr+1}@jp+jp+ei++_++_+>k+>k+Xg+Xg+Sl+Lb+$4+-2+]_+:k+=m+]/+|G+(t#uy#(t#}R+ay+Kl+K,@#9@<&@tr+Jl+wI+QK+2V+H:+g~+g~+QK+QK+5T+vI+y@@y@@WA+WA+WA+WA++w++w++w++w+G)@G)@Kn+Kn+Kn+Kn+Ml+Ml+@/+by++_++_+ei+On+=k+Fg+9H#<&#ji+ii+<v#ii+ki+ii+<&#oD#bs#bs#oD#<&#ii+:6+:6+si+si+si+si+[]+[]+:6+:6+:6+:6+:6+:6+:6+:6+{_+Kb+(6+n8+Rl+~/+rD+Nl+69@69@ZM+ZM+49@49@49@4k#Ft+qy+qy+Ll+Ll+qy+qy+P0+P0+P0+P0+b$@b$@_T+_T+_T+cr+cr+A$++w++w+(T+uI+uI+|R+fD+1V+1V+QK+wI+QK+X{@9k@->$]`#L,@~P+U_@nD+nD+[]+jr+Qn+5d+0i+>P+UN#IK#YF@m[+&i#+.@3j+It$Jt$||@'8@@W@+z Qw &E Kv !M [g es es b$Dj$a9$a9$a9$M1#2h$2h$M1#~^#| @mZ@M+#yA#]N#^N#yU#AA#BA#St$os$ps$Tt$Ut$Ut$(m$(m$H4#[|$6%$4%$}V+3G+=>+l#%w#X3+.K#*w#6t#+G#,|+~>$ O#@I#ci#M`#M`#ci#ci#ci#@I#@I#^l#M`#qT#M`#ci##K##G#EB#_l#_l#Af#EB#yf#yf#EB#EB#Af#_l#_l#/K#/K#:X#:X#:X#:X##5##5##5##5#zf#zf#Dc#Dc##5#:X#/X#M7#)M#+z#+z#;z#+z#~5#{E#{E#;z#;z#;z#;z#;z#;z#;z#;z#Zy#Zy#C0#IB#IB#C0#Zy#Zy#IB#Zy#$K#`y#Qt#Qt#z.$Zq#iT#Tc#Tc#Tc#Tc#Tc#Tc#Tc#/5#/5#/5#Tc#Tc#Tc#Tc#Tc#_2#_2#_2#_2#(2#(2#(2#(2#:2#_2#_2#(2#(2#_2#_2#[o#|w#ah$ah$ah$ah$ah$a<$a<$]K#]K#]K#a<$]K#Rt#^K#{O#(q$/q$/q$1m$1m$/q$(q$(q$zi$zi$1m$/q$/q$1m$zi$hd$9T#Zt$ts$5*$M`#9T#6$]X#Y4$gr$gr$]b$#5#md$NR#&K#&K#&K#&K#ws$ws$ws$ws$ws$&K#&K#NR#NR#md$/K#6T#6T#6T#6T#8V#aV#0V#0V#0V#aV#aV#aV#8V#8V#8V#`Y#lV#H7#I7#.u$xs$.;$f@$V_$U_$+u$Bs$@Z##Z#-l$@u$Ds$c0$n@$8q$Z%$uT#+2#Z_$)X#m@$^l#5@$#G##G#H~$^$$!6+!|+fd+Es$%2+'|+G2$G2$#u$nr$n@$$u$0i@0i@|9@:a@[R+oI+nI+ay+PK+z@@wI+ED+B+>B+_w+_w+e^@K@@L@@L@@L@@L)@fz@dB@dB@~w+K)@#a@lX+u$p~$Sa$,u$l,$o$#ll 'J @y @y [,$DN cP@cP@cP@cP@s[@s[@s[@s[@s[@s[@s[@s[@s[@s[@s[@s[@es es cP@s[@`:@+<@+<@Z:@Z:@`:@s[@`:@.<@ <@ <@H~ EN#{M %W@4|@4|@4|@%W@%W@4|@3|@2|@}|@||@||@||@UT@b~ b~ .<@ZA ({+rq@'u$)u$!u$~u${u$]u$^u$/u$(u$_u$_u$:u$_X@S8@]M#q$Gt$Gt$Ju$Ju$>r$>r$pt$ot$F4@Yp+tG++q++q+.q+s9#t9#MF@Dq@Dq@M,@LF@a~@z$+-(@[=@=4+H:+H:+2V+2V+Il+Il+g~+Il+2V+2V+2V+2V+Il+g~+J@@J@@e^@K@@0&@0=@a=@a=@Ku$0=@0=@a=@Z.@6Z+L@+my+[P+h~+[P+$N+$N+$N+w)+w)+g~+ED+L)@tr+fD+z@@Kl+|R+:&@tr+tr+tr+:&@:&@:&@:&@(P+(P+}R+ay+ay+(T+Ft+Ft+LF@ih#~G+{G+by+<]+wb+w'#Lu$Kd$c#@Z|#}Y.Mu$Nu$Ou$Pu$Vi DR@Sg il cq Zr Zr ut ut f[@Qu$Ru$/r$h8.80+},+`#+$J.yF 1G.9f+ye+ye+ye+y'@Gb$CU#]Z.x,@]Z.a(+)> @$+@$+NM+NM+=L .Z @$+@$+@$+@$+@$+13+13+", "7c 7c 7c 7c 7c 7c 7c dd g~ 7c 9c 9c 7c g~ U5 %x+3o.%j.dD.dD.%j.3o.>~@>~@Su$Su$>~@Vw@>~@Vh.`^ Q& j3 {& N+ x* s$ 4K@U@.1c m& Q% =+ R@ G[.z| c:@Tu$Uu$Vu$rC.Wu$Xu$:> IA@70 :L.QE#73@Yu$~b#]R@$>#Ux#RS#0a@J9#''@A&@x|#Zu$`u$vo$nt$ v$21@w^@E4@8e$.v$T3+S3+F#$F#$+|+Z1+Z1+{f+cd+~_+~_+&k+&k++_+0X+$!@X4@/a@ec@ec@/a@X4@u^@ec@ec@6m@5k@6m@ec@0x@&3@jp+On+On+ei++_+>k+>k+Sl+~/+~/+Lb+$4+$4+-2+]_+Nb+/G+nI+tI+@w+#&v${U+d]@*v$F&#}|@'8@@W@+z Qw &E Kv w~$;P cP@es es es es cP@s[@`:@`:@`:@s[@cP@es es es es v$,v$7r$'v$ks$Ot$Qt$Qt$)v$!v$~v${v$]v$4w+kn$^v$/v$%u$Dj$Dj$Dj$Dj$2h$!g$!g$2h$~^#| @mZ@M+#yA#]N#^N#yU#BA#BA#St$St$(v$(v$(v$(v$F4#H4#Fj$Fj$oi$l#$[ @7=@kX+2T+Q)@R,@R,@t<@t<@jb#|=@!w+!w+!w+!w+)w+#B+#B+;w+;w+#k+#k+#k+#k+:c@~i@7f#_v$:v$f+$+;$ts$6$>6$d($d($c($c($]X#+5#VL#Qq#Qq#Pq#Pq#Pq#Pq#Pq#Qq#Qq#Qq#Qq#Pq#Pq#Oq#kV#B+P)@P)@4 @4 @4 @ny+Z.@Z.@Z.@L)@{k@@B+!w+$B+,B+mX+9G+x)+zI+[V+BO@gX@00$N1#M1#Cj$4v$5v$6v$7v$8v$=u$9v$0v$;u$27$av$bv$Ms$=k$T4$+*+cv$g#@Nj#7=$dv$ev$hk@-0@l,$Rv ;M >M 6'$6'${c$DN cP@cP@cP@cP@es es es es cP@cP@cP@cP@cP@cP@cP@cP@ @^+7g@fv$gv$+#$hv$yo.iv$jv$kv$lv$mv$nv$hE#OD@6T@_v@}/+Z.+mJ#Y&+ov$;7@ih#[$$pv$qv$rv$7V#nd$Ye$#2#sv$tv$Ab+/]+Sl$xo$1s$n7$Bq$uv$vv$wv$5u$po$xv$yv$zv$Av$lg$0u$Bv$Cv$Dv$Ev$Fv$i+$il$q&$Gv$Hv$Iv$Jv$Kv$Lv$Mv$Nv$Ov$Pv$Qv$Rv$:w 0v#P#.~4$Sv$Tv$Uv$Vv$Wv$-=$Xv$Yv$Zv$p}$R @`v$|]@ w$.w$+w$f/$@w$0j$J,+Oc$Oc$K,+v^@4}@cs$#w$$w$>r$>r$%w$&w$B6@am+.s+O<@O<@6}@-3@~P#Mx#SO@SO@}o+=K@4~#y$+-(@[=@=4+H:+H:+2V+2V+Il+Il+Rt+g~+Il+2V+2V+Il+g~+Rt+X{@b~@O,@0$@P,@a&@=9@b=@*w$=9@b=@b=@0$@+5@+5@J@@W&+H,@Hl+Hl+[P+$N+#JE+Mf Kf :g Cm Zr 5, ol x6 <) >w$,w$'w$h8.80+^Z.%J.$J.yF 1G.9f+T/@y'@ye+y'@Gb$CU#]Z.x,@]Z.a(+6g+=L =L l7 cI+O4 s6 @$+=L =L @$+@$+13+13+", "7c 7c 7c 7c 7c 7c 7c dd g~ 7c 9c 9c 7c g~ U5 %x+3o.X)@dD.hY.%j.|{.>~@%x+3o.9%.>~@)w$>~@G6.U/ h@ h^ u] N+ e+ D& q& `n `n }9.U% P X 23 A| {s b&+!w$iM.~w${w$A#$]w$On ^w$fi *z@/w$|_$TI#,'+N$+oo@8Z+1V#P.+(w$s$@ES#*r$}b$`u$Sp$Gt$lt$+>+--+7e$_w$98+S3+:w$+|+`1+Ht$.v${f+{f+nd+~_+~_+~_+cd++_+-:@X4@6m@te@5k@ec@X4@v^@/a@ec@cc@fK@cc@`H@|T@X4@1(@On+On+On++_++_+>k+>k++_+~/+~/+Sl+Sl+Sl+$4+mD+{G+/G+^G+:V+[T+)B+}T+.B+fy+fy+@k+@k+oy+oy+oy+oy+QK+5T+5T+vI+[=@*4+|$@|$@y@@y@@WA+WA++w+Ft+Ft+Ft+cr+cr+cr+cr+gp+gp+Mn+Mn+N2@0X+Jt+fi+gr+ei+1(@: @gJ#+v$ji+q.$<&#+v$ji+ac#ji+@v$5v#as#oD##v$ii+ji+%4+si+si+:6+Yg+Yg+kp+kp+si+si+si+si+si+si+$4+$4+gi+Xg+~/+Rl+@/+by+rD+_V+(G+(G+(G+er+er+er+%!@!G+Nb+)k+[]+O0+N0+;2+Nb+^_+:V+_T+:V+}T+@w+OK+tI+tI+cr+cr+cr++w++w+(T+uI+uI+z@@1V+z@@wI+tr+ED+6T+M@+3~#0*$~P#ih#gp+(G+Jt+#/+-2+-m+Rn+%v$bK@cz@bZ.6+gw$C7#I`#D7#ct#vq#wq#~w#tB#-l#;f+`-$`-$In$ ;$%w#<@$.K#$2+;|+xB#*w#@K#5[+!X#ci#ci#M`#M`#ci#^l#@I#M`#@I#PP#@I#M`#7T#M`#^l##K##G#EB#_l#_l#Af#EB#yf#_l#_l#_l#Af#Af#Af#Af#Af#Dc#$5#Dc#Bf#:X#/X#/X#/X#H~$Cc#zf#Dc##5#:X#/X#R`#}w#]z#+z#{E#^z#{E#~5#+z#;z#;z#;z#;z#;z#;z#;z#;z#`y#HB#$K#$K#$K#$K#HB#`y#$K#HB#`y#`y#HB#HB#$K#pt#iT#Tc#Tc#Tc#Tc#Tc#Tc#Tc#:2#:2#:2#_2#(2#(2#Tc#Tc#Tc#Tc#Tc#(2#_2#:2#:2#:2#(2#(2#Tc#/5#/5#Tc#(2#St#|w#|w#|w#|w#|w#|w# r# r#p1$o1$o1$o1${6$`4$~6$]6$a<$z.$Rt#Qt#^K#Qt#]K#z.$a<$sn$1|$tn$hw$#p$=M#MB#us$fr$iw$b<$8T#67$us$us$d($>6$>6$9V#{X#{X#^X#n1$Rq##a#Rq#Ew#Pq#jw$Oq#jw$Rq#Ew#Qq#Ew#Pq#$o#Oq#kV#n1$c($]X#]X#c($>6$dh$ u$0V#0V#aV#aV#aV#8V#8V#8V#'M#J7#Fq#L7#`4#{X#7V#J`#}X#}X#|X#|X#nV#oV#oV#*Z#f8$-6$b0$f9$f9$G2$'X#)X#X4#4*$G7#G7#B0#~E#3*$/l#A0+;6+hd+hd+;|+>|+L`# 2# :$f<$*Z#H2$U[$$ $c0$kw$X4@It+_V+[T+:V+vr+up+{k@ED+ED++0G+P)@R,@R,@R,@P)@t<@O)@O)@4 @ny+ny+|=@!w+,B+,B+mX+3R+>T@{-+TK+VK+fX@gX@{^#^N#lw$mw$ln$4v$&u$7v$=c$nw$a8$;u$ow$pw$46+d8$b9$,p$qw$!U#l[+m[+MJ@]-#k[$rw$p1#Tk$#5$}h$S-$$5$6r 6r S-$Zi@es es es es es x$,x$Nd$'x$9j$Oc$)x$Tl$v^@X4@4}@4}@cs$$w$$w$!x$~x${x$fm+N3+28+NF@28+28+mm+M)@LF@pk+M,@ry+a~@y;@s<@b&@[=@=4+H:+H:+2V+2V+Il+Il+ED+Rt+Il+2V+2V+Il+Rt+ED+wr+X{@b~@O,@L@@a&@=9@=9@*w$=9@b=@b=@O,@y^@']@6T+(/+W&+W&+m;@m;@[P+:w+$3(@uk$m)+q)+[9@Pl+ve$bx$cx$88+@|+V+$@*$Ib+Ib+Ae$~f+!i#a[+Wg+,d$dx$m8+._+Z6@$!@$!@t~@[1@29@%7@v~@v~@+7@+7@+7@+7@+7@v~@gr+ei+On+On+On+On+ei+Xl+On++_+ir+(+@/+@(+@ir+>k+Jt+rD+Nl+t&@oD+`+#`+#sD+]/+I6@I6@I6@^/+Ob+/|+G:+f~+uI+z@@fD+QK+5T+vI+[=@[=@y@@WA++w+Ft+dr+ZM+ZM+{G+{G+{G+{G+(G+(G+(G+(G+(G+(G+(G+Jt+ip+Jt+ip+#/+-m+LP#jr+LP#jr+LP#jr+LP#jr+UA#HZ@Z;#7d+v'#'k+jr+'k+,k+vb+ o+ o+vb+:6+si+{/+_k+$4+_6+_6+Lb+Xg+Nl+(G+er+Ht+Ht+(G+^V+$w+$w+(G+(G+(G+(G+(G+(G+#/+Sl+ex$$b$Xb$fx$Ul$hi+Og+si+nD+U_@[T+~P+$7@gh#$7@59@/G+U_@)B+)B+_T+_T+Kl+Kl+a$@O,@X{@6Z+6Z+;m+ED@Ae@gx$Pc$Nx#4k#oI+b$>b$>b$>b$-c$>b$-c$Jx$(v$0)#=.$=.$E4#8D#os$cr$cr$qs$ps$os$St$8D#CA#[|$eh$eh$eh$o7#o7#7=@7=@T,@X#ci#/l#/l#J`#J`#~X#~X#~X#~X#J`#/l#5@$5@$J`#6T#8V#~X#J`#5@$Zn#Zn#5@$J`#~X#/l#/l#/l#J`#J`#~X#~X#Af#X#,X#@;$5*$VY#!X#CB#)X#)X#)X#tT#tT#tT#tT#>|+In$Nn#@4+F:+dy+V4@60#:c@;w+L)@}=@4 @0G+>B+x;@mq@9$@9$@9$@8&@8&@8&@mq@mq@mq@x;@mq@x;@x;@x;@x;@lX+lX+=B+3 @3 @>T@{-+zI+[V+8=@~g$U.@pi$pi$T[#]N#yA#,b$2h$O[#Ux$Vx$]v#Wx$|T+Qm#Xx$&&#&&#&&#&&#&&#Qj$}C#Yx$b@>b@rG sG tG tG sG sG rG rG sG sG tG s[@s[@s[@s[@s[@s[@s[@s[@`:@+<@Z:@.<@Z:@`:@cP@es `:@`:@||@s[@}|@+<@2|@.<@4|@.<@1|@s[@dP@y$s9$|}$7:$L1$.{$,y$S2$'y$1Y#Om$)y$!y$~y${y$]y$^y$@j+/y$(y$_y$:y$3$2y$3y$=~@^* f5.4y$5y$6y$7y$PQ#8y$9y$/5$0y$,P##_$ay$by$N^@`3#cy$dy$ey$Md$>t$Rl$Ab$io@*3@Ab$)x$u^@v^@|1@|1@|1@|1@Y4@;]@mI+)P+fp+!P+Ft+~P+ ,v.Yt.6g+6g+i~ ZY ,v.i~ ,v.i~ Yt.)> )> Yt.", "J6 je ie le ie ie je je je je je ie ie le oG.uk Tl Tl Tl Tl Tl Tl Tl Ql Ql Ql Ql Ql Tl (j.Ml Q% U+ Q% L_ 7c 7c 7c 7c E7 6c 9& v N@ ]@ X@ (r$my$T9#>i >#.92$ny$oy$py$qy$#s@Ow.aD@ry$qy#@g+VJ.Y@+YX.,Q#sy$KD@G6+wB@/u+g-$gn$,i$Mf$zb+Pl+*d$ty$uy$vy$08+88+@|+V+$@*$@*$#*$ze$Ae$~f+wy$wy$xy$dx$._+Z6@u~@u~@$!@t~@v~@29@+7@+7@+7@+7@yy$yy$yy$+7@hr+On+*k+*k+*k+*k+On+ei+On+ei+fi+lc#lc#lc#fi+Xl+>k+ir+gi+dy+YA+YA+1$@1$@1$@RO@RO@}&@&m+~k+!k+}]+b$@ay+Kl+(P+FD+QK+5T+vI+[=@y@@WA++w+Ft+#w+rI+rI+(G+(G+(G+(G+(G+(G+(G+(G+(G+(G+(G+(G+(G+(G+(G+9X+;2+jr+jr+jr+jr+jr+jr+jr+jr+'k+HZ@7d+7d+HZ@'k+jr+jr+'k+,k+vb+vb+,k+si+[]+{/+_k+$4+Lb+~/+Sl+Xg+rD+er+8s#Ip#Ip#er+:o+km+$w+(G+(G+#/+#/+#/+#/+Sl+#4+zy$Ay$zy$By$Yb$Ul$Og+Og+s=@s=@dr+nI+$7@Cy$Cy$59@/G+nD+)B+)B+:V+_T+Kl+Kl+a$@O,@6T+L@+GD+ED@ly+UQ@Dy$5~#yb#Ft+]V+_1@_1@fi+(+@{/+jr+mc@U;+hx${T+]L+LX.2K#Ey$/l$i#@|d$:e $p@.z .z ^A q<$x~$m!$t)$t)$[g b$>b$>b$>b$>b$)g$Wy$F1$+:#Xy$({#a)#Tt$Yy$Yy$Ut$qs$ps$GS#BA#AA#CA#B+4 @6o@6o@|=@|=@|=@}=@L)@L)@:&@:&@:x@:x@:x@:x@:x@#k+ L+@m+@m+@m+IZ@IZ@{k+{k+~k+~k+RO@}&@hc#hc#V4@V4@|G+|G+|G+|G+|G+|G+}G+}G+jV@Q;@:G+_G+_G+:G+ne# w#By#bc#h0#Pg+6e@Pg+:i#Rn#-l#-l#hf#,l#|f#}i#{i#{i#rq#qq#;f+-f+In$ ;$tB#'E#!w#!w#D7#D7#ct#ct#dt#ct#f8+f8+,6+,6+,6+'6+)E#)E#UY#Ry#Ry#Zy$>X#,X#>X#Xy#^l#5@$/l#/l#J`#J`#J`#J`#~X#J`#/l#5@$5@$J`#6T#8V#~X#J`#5@$Zn#Zn#5@$J`#~X#J`#J`#J`#J`#~X#~X#6T#_l#@5#Fc#Fc#Fc#Fc#Fc#@5#@5##5##5#7V#7V#`4#`4#`4#J7#Y`#;z#+z#+z#+z#+z#~5#~5#~5#~5#~5#+z#+z#;z#;z#;z#nt#Z`#Z`#nT#nT#Z`#Z`#nt#nT#nT#{O#{O#^K#^K#^K#jT#jT#St#iT#iT#]z#]z#]z#;z#+z#;z#]z#iT#iT#iT#iT#]z#hT#hT#hT#hT#St#St#St#St#[o#hT#St#St#St#St#hT#o#Sx$Rx$X#)6+.I#~|+=2+h0#*l#4=@`n+#k+1R+K@@*>+8$@cB@8G+cB@9$@4e@9$@8&@8&@8&@mq@mq@x;@x;@x;@x;@R)@R)@R)@R)@T@{-+zI+[V+[V+8=@8=@U.@D@@pi$ui$oi$Fj${^#zA#yU#+z$S[#yA#7V@fX@4Z+4Z+E@@,K@,K@,K@RQ@} @(m$@z$`e$#z$8p$$z$%z$&z$*z$=z$-z$7r _e :0 }/$!a ;z$-! sG rG >b@rG sG tG tG sG sG rG rG sG sG tG s[@s[@s[@s[@s[@s[@s[@s[@`:@+<@Z:@Z:@Z:@`:@cP@es s[@s[@cP@cP@s[@`:@+<@Z:@H~ Z:@+<@s[@es z$,z$'z$)z$!z$~z${z$sw$/$yB#Vy#5V#>X#K`#&Z#&Z#+;$-2#:z$3I#*y$( iz$jz$kz$lz$mz$nz$oz$pz$qz$rz$N!#g(@of+sz$'k$}^$tz$uV#vV#Sl$=3@io@0X#|1@*3@K<@v^@2(@2(@R;@R;@58+/V+Ml+jD+SA+]G+U_@)B+:V+|G+_T+P0+_T+o;@VH@qy+P0+:c@[=@Rt+tr+g~+wI+ED+Jl+=4+vI+Il+wI+g~+5T+H:+5T+g~+J@@e^@K@@Z.@0&@Z.@Z.@Z.@0=@0&@K@@J@@L@+6Z+6Z+6Z+dp+Qt+Qt+Qt+:w+[.l}+ks@5D+)> )> Yt.Yt.Yt.Yt.i~ i~ )> Yt.i~ ,v.,v.i~ Yt.)> i~ )> ]$@6g+Yt.,v.,v.i~ ,v.i~ Yt.)> )> Yt.", "xn.je ie ie ie je je ie ie ie le le le ke :j.uk Tl Tl Tl Tl Tl Tl Tl Pl Pl Pl Pl Rl Tl _j.Lv.9& d+ 9& L_ 7c 9c le le 9c ,' Q% P s& r+ ^@ %p+Cz$Dz$Ez$9h#i4$d0+oy$Oo$Fz$7] un@hh E!#BV#a_#{Q#Gz$M$+Hz$Vm#y/+Iz$&#@0m+x&@g9@y6@Mf$$_+a0$&d$Jz$uy$Kz$Lz$08+88+ 2++|++|++|+F#$#*$ze$Ae$Ae$>d$]f+*k+1(@$!@$!@$!@t~@v~@29@+7@+7@+7@+7@yy$yy$yy$+7@jp+*k+._+._+._+._+*k+On+On+On+Xl+fi+fi+fi+Xl+Xl++_+>k+>k+ir+gi+dy+YA+{/+1$@V4@}&@}&@TY#}&@{k+I6@_T+}R+(P+(P+FD+FD+QK+5T+1V+y@@WA++w+Ft+#w+rI+rI+Mn+Mn+Mn+Mn+Mn+Mn+Mn+Mn+(G+(G+(G+(G+(G+(G+(G+9X+od+,k+,k+,k+,k+,k+,k+,k+%4+%4+,k+vb+vb+,k+%4+%4+lp+jr+%4+%4+%4+%4+[]+]_+_k+-2+$4+Lb+Sl+Sl+Sl+rD+er+8s#Ht+Ht+er+:o+$w+$w+^V+by+by+by+~/+~/+~/+(6+Xb$zy$zy$By$Yb$Ul$Og+Og+t&@t&@nI+nI+59@59@9*$C`#[T+s=@[T+)B+:V+_T+PK+PK+a$@0$@J@@6T+'_#'_#UQ@8V@;v@9k@!B+A$+er+Jt+gr+Xl++_+-2+G:+mc@M:$Mz$tD@D)@fx@>{#b2$<'$K2$i4#:e $p@]A ]A @W@c.#R5@k!$Nz$Nz$[g b$>b$>b$>b$>b$)g$`z$F1$[C#[C#a)# A$.A$+A$qs$qs$ps$os$BA#AA#AA#AA#Fj$Fj$oi$oi$} @} @8=@8=@kX+Q,+9G+9G+>B+>B+ny+_w+6o@6o@|=@|=@|=@}=@L)@L)@:&@:&@:x@:x@:x@:x@:x@#k+tp+#m+#m+#m+Zn+Zn+X+$X+$&m+{k+}&@TY#hc#hc#V4@1$@p;@p;@p;@p;@p;@p;@u=@u=@jV@Q;@:G+:G+:G+:G+ne# w#ic#=l#2f#Qg+h0#h0#Rn#Rn#-l#-l#hf#,l#|f#|f#}i#}i#rq#qq#;f+-f+In$ ;$tB#'E#!w#!w#D7#D7#ct#ct#dt#dt#Uy#wB#wB#wB#)E#)E#5V#5V#>X#Sy#Zy$OP#!X#VY#!X#OP#@I#Zn#5@$5@$5@$/l#/l#/l#~X#J`#/l#5@$5@$J`#6T#8V#J`#J`#/l#5@$5@$/l#J`#J`#~X#~X#~X#6T#6T#6T#8V#/K#)2#@o#@o#@o#@o#@o#)2#)2#:X#:X#`4#`4#7V#7V#7V#L7#qt#{E#~5#~5#~5#~5#+z#+z#{E#{E#{E#~5#~5#+z#+z#+z#mt#nt#nt#Z`#Z`#nt#nt#mt#Z`#Z`#Z`#nT#nT#{O#{O#6w#hV#]z#]z#]z#;z#;z#+z#+z#]z#;z#;z#;z#;z#]z#iT#St#St#St#St#St#hT#hT#hT#hT#[o#hT#hT#St#St#hT#hT#A$l+#!8$,A$SI#D)+zp+/v#NF@/a@g8$>/$yB#Vy#5V#>X#VY#($$rT#1I#2I#3I#'A$)A$!A$~A$th$W!$X!$Rd$O1$L1$M1$9c$^}$r0${A$H$$]A$^A$/A$(A$_A$:A$.Ga.(M.GJ dA$eA$fA$gA$hA$iA$jA$xS#kA$lA$8Z@mA$z6+bB+a1@`8@nA$9j$=3@Ld$Ld$Ld$io@11@`6@L<@K<@;:@v^@2(@2(@v^@58+/V+l;@Ln+-'@{G+/G+[T+:V+|G+|G+:V+}T+VH@}T+Ll+P0+fy+1V+Jl+:&@QK+fD+tr+|R+vI+1V+QK+FD+QK+1V+[=@z@@wI+J@@e^@K@@Z.@Z.@Z.@Z.@K@@0&@Z.@e^@J@@L@+L@+L@+L@+Rt+Rt+Rt+ED+ED+ED+}=@}=@ED+g~+Il+g~+ED+ED+Rt+v)+tp+Zn+]k+]k+X+${k+=m+:k+{/+{/+{/+_k+dy+gi+gi+gi+Sl+Sl+^V+Ln+@q+71$wB@yZ+oA$pA$qA$rA$sA$tA$/u sR#_7 Sr :)@:e 0> En ;z t/@IT#fp R| %v.%v.cI+2^ 3x.,v.,v.i~ i~ i~ i~ Yt.Yt.)> Yt.i~ ,v.,v.i~ Yt.)> i~ 6g+jy.]$@Yt.i~ i~ Yt.,v.i~ Yt.)> )> Yt.", "je je je je je je je ie le le le ke ke he he uk Tl Tl Tl Tl Tl Tl Tl Pl Pl Pl Pl Rl (j._j.d( ^% U% >' L_ 9c 9c ke ke 9c !% ,' =+ }. m. #@ :2+uA$vA$wA$~k u5$02$xA$yA$P+$zA$AA$-2@.|$=A$z2$!b#BA$CA$DA$EA$FA$B|+rm+Vd+bm+hm+!3@Z8@8e$%k+GA$HA$Jz$IA$Kz$Lz$cx$08+`1+`1+JA$`1++|+G#$#*$Ae$>d$Of$ei+hr+[1@[1@[1@1}@29@%7@+7@+7@+7@+7@yy$yy$yy$+7@1(@._+._+Gg+Gg+._+._+*k+*k+On+On+ei+Xl+Xl+Xl+Xl++_++_++_++_+Sl+gi+dy+YA+1$@1$@}&@TY#H`#H`#X+$XN#ur+OK+(P+(P+FD+FD+wI+wI+1V+1V+(T+Ft+#w+oI+rI+]V+Mn+Mn+Mn+Mn+Mn+Mn+Mn+Mn+(G+(G+(G+(G+(G+(G+(G+9X+od+,k+,k+,k+,k+,k+,k+,k+%4+%4+%4+,k+,k+%4+%4+%4+lp+jr+-m+-m+-m+-m+[]+]_+_k+-2+-2+$4+Sl+Sl+Sl+#/+er+8s#Ht+Ht+er+:o+$w+$w+by+by+by+by+~/+~/+~/+(6+Xb$zy$zy$Yb$Ul$Ul$Og+$4+t&@t&@^G+Gt+59@C`#9*$C`#[T+s=@[T+[T+:V+:V+ay+PK+a$@a$@0$@e^@ci@8V@8V@9$@GD+-7@N)@T{@!G+^V+0X++_+di+:6+wp+//+M@@R_@g)#KA$LA$H)+'q$#g+p~$R-$Zi@r[@@W@]A @W@/0@dP@-S MA$r)$[g #TH#My$Oy$Oy$QA$QA$)U#)U#Yz$Yz$Gx$Vy$Zz$RA$L[#RA$jm$jm$ar$ar$>b$>b$>b$>b$>b$)g$Wy$SA$a)#a)#P1+TA$.A$UA$ps$ps$os$os$BA#AA#AA#zA#T[#T[#ui$ui$U.@U.@~g$m#$|V+Q,+9G+3 @0G+0G+_w+&N+6o@6o@|=@|=@|=@}=@L)@L)@:&@:&@:x@:x@:x@:x@:x@#k+%N+VA$VA$VA$3V#3V#]k+]k+X+$X+$TY#TY#|&@V4@1$@{/+p;@p;@p;@p;@p;@p;@u=@u=@Q;@Q;@ne#:G+:G+ne#ne#}t#ic#cf#_i#_i#2f#2f#1f#1f#-l#-l#hf#hf#sq#|f#|f#|f#rq#qq#;f+-f+In$ ;$tB#'E#!w#!w#D7#D7#ct#ct#dt#dt#Vy#wB#Vy#)E#UY#5V#5V#Wy#,X#Xy#OP#OP#^l#VY#@I#PP#~b$~b$Zn#Zn#5@$5@$5@$/l#~X#J`#/l#5@$5@$J`#6T#8V#J`#J`#J`#/l#/l#J`#J`#J`#~X#6T#6T#6T#8V#8V#aV#bV#$5#Iq#Iq#Iq#Iq#Iq#$5#$5#/X#/X#{X#`4#7V#.5#.5#Fq#WA$^z#^z#{E#~5#~5#+z#+z#{E#{E#{E#{E#{E#{E#{E#~5#6@$mt#nt#nt#nt#nt#mt#6@$mt#nt#nt#nt#Z`#Z`#nT#tt#6w#]z#;z#;z#+z#+z#+z#~5#iT#]z#+z#+z#+z#]z#St#hT#St#St#St#St#hT#hT#hT#hT#[o#[o#hT#hT#hT#hT#[o#+=>+3G+7=@wp#8=@} @U.@ui$oi$oi$l#$yA#N+#oZ@e'#e'#oZ@7V@nZ@gX+gX+5$@5$@>K@>K@>K@gX+B$X-+,B$l4$,U#1K#4W.zr+/v#Dq@/a@7|$>/$@G#UY#5V#,X#$;$rT#+ $#2#:z$'B$)A$!A$)B$!B$~B${B$7c$T2$]B$9c$^B$/B$l>$(B$z+#4^$1;$RK#_B$Pw$:B$ [r@Dn t/@Yw w[ [@ vB$X/.s6 80+3x.KB ZY ZY ,v.i~ i~ Yt.Yt.Yt.Yt.i~ i~ i~ i~ Yt.Yt.Yt.6g+jy.]$@)> i~ i~ Yt.,v.i~ Yt.)> )> Yt.", "je je je je je je je ie le le le ke ke he he uk uk uk uk uk uk uk uk !B !B !B !B tk uk :j.d( x5 U% >' L_ 9c 9c ke ke 9c !% ,' =+ }. m. #@ :2+a&+wB$<0+xB$>8$yB$d0+ny$ s@q{@zB$%+E*$AB$[a$BB$CB$YX.L.+DB$KD@G6+Xd+0m+Ti+jP+EB$@>+%k+GA$HA$a}#FB$Jz$Jz$ty$_w$Ht$Z1+.v$Ht$Z1+/[+K0+nd+Of$=g$lc#GZ@_1@gr+fr+fr+ic@ic@v~@v~@+7@+7@+7@+7@yy$+7@1(@._+._+Gg+Gg+._+._+*k+*k+*k+*k+*k+On+ei+ei+Xl+On+On+@_+@_+&k+>k+gi+dy+1$@1$@hc#|&@H`#H`#TY#60#eK@OK+(P+(P+FD+FD+wI+wI+z@@z@@(T+~P+#w+Ht+]V+]V+Mn+Mn+Mn+Mn+Mn+Mn+Mn+Mn+(G+(G+(G+(G+(G+(G+(G+9X+od+,k+,k+,k+,k+,k+,k+,k+%4+%4+%4+-m+-m+%4+%4+%4+jr+jr+-m+)k+)k+-m+[]+[]+-2+-2+-2+-2+Xg+Sl+Sl+by+(G+er+Ht+Ht+(G+^V+$w+$w+@/+@/+Rl+Rl+Rl+Rl+n8+n8+>d$>d$>d$wy$,d$,d$Kb+Xg+qD+u&@[G+[G+{P+{P+D`#]P+[G+u&@t&@t&@)B+)B+b$@Q0+fD+FD+0$@e^@K@@K@@8V@9$@Ln#*t@M@+|$@fp+-'@0X+0X+k)+od+O,+![+T;+wW#;>+e>@dn$P:+GB$#g+H&#n[#Rx@>b@^A @W@/0@/0@dP@-S HB$4z+[g #TH#My$Oy$Oy$JB$QA$KB$)U#Yz$Sy$Vy$Vy$RA$L[#L[#L[#jm$jm$ar$ar$>b$>b$>b$>b$>b$)g$LB$TA$TA$ A$Tt$Tt$qs$qs$os$St$BA#BA#^N#zA#zA#zA#T[#ui$ui$ui$U.@U.@~g$m#$|V+Q,+9G+*>+4 @4 @_w+&N+6o@6o@|=@|=@|=@}=@L)@L)@:&@:&@:x@:x@:x@:x@:x@#k+%N+VA$VA$VA$3V#3V#]k+]k+X+$]k+H`#H`#|&@hc#V4@1$@p;@p;@p;@p;@p;@p;@u=@u=@[G+Q;@ne#ne#ne#ne#ne#`J#ic#cf#]i#]i#_i#_i#1f#1f#-l#hf#hf#hf#[T#sq#sq#sq#rq#qq#;f+-f+In$ ;$tB#'E#!w#!w#D7#D7#ct#ct#dt#dt#Vy#Vy#Sy#UY#Wy#Wy#>X#!X#K`#^l# O#@I#/l#ci#5@$~b$~b$~b$Zn#Zn#5@$5@$5@$/l#~X#J`#/l#5@$5@$J`#6T#8V#J`#J`#J`#~X#~X#J`#J`#J`#~X#6T#6T#6T#8V#8V#aV#bV#$5#Iq#Iq#Iq#Iq#Iq#$5#$5#/X#/X#{X#`4#7V#.5#.5#Fq#WA$^z#^z#{E#~5#~5#+z#+z#~5#{E#{E#{E#{E#{E#{E#{E#6@$mt#nt#nt#nt#nt#mt#6@$mt#mt#mt#nt#nt#Z`#Z`#st#6w#]z#;z#;z#+z#+z#+z#~5#iT#]z#+z#+z#+z#]z#St#hT#iT#iT#St#St#hT#hT#[o#[o#}o#[o#[o#hT#hT#[o#[o#fd$ZP#jl#jl#[2#ll#ZP#ZP#ZP#:2#:2#[5#[5#[5#[5#<5#<5#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#R[$0h$0h$0h$0h$0h$0h$0h$z.$0h$sn$0h$z.$Qt#z.$|w#]}#8E#]}#{}#]}#{}#Hc#&K#MB$md$K@5$@l#$H4#a=#(R#_-+QB$!Q#-W+RB$SB$TB$UB$+, !a %B$/*$RC -! -! -! -! tG sG sG tG sG sG rG rG sG sG tG es es es es es es es es s[@s[@s[@s[@s[@s[@s[@`:@cP@es +Q:+WB$j2@63@|k+'*@l}@Dq@`H@>c$57$+K#Y3+;|+6[+F2$+ $d<$&y$*y$)A$XB$)B$!B$YB$ZB$ j$N1$Z!$^B$`B$ C$.C$+C$tM@`!#3;$6x#@C$#C$$C$%C$&C$*C$=C$-C$;C$>C$,C$'C$H0$)C$!C$~C${C$]C$^C$/C$(C$_C$:C$ )> Yt.", "ie je xn.xn.xn.je je ie ie ie le le le ke ke uk uk uk uk uk uk uk uk tk tk sk sk sk tk uk vk L_ 9& L_ L_ 7c 9c le le le 8c 6c ^% d+ 3. ]@ b|+iC$%y#jC$kC$lC$02$mC$nC$ s@q{@zB$.3#qO. |$@E#oC$pC$xx$`a$[s#a!$3_#d2+qC$&!@mw+Ti+P&+l{$l{$rC$sC$&d$a}#FB$tC$FB$_w$Ht$Z1+Z1+Z1+Z1+/[+K0+nd+Of$=g$W1#GZ@_1@gr+fr+fr+ic@ic@v~@v~@+7@+7@+7@+7@yy$+7@jp+*k+._+._+._+._+*k+On+*k+*k+._+._+._+*k+ei+ei+*k+._+: @: @Fg+&k+Xg+gi+ZA+V4@hc#hc#TY#}&@}&@]/+eK@tI+}R+PK+PK+fD+FD+wI+z@@PK+(T+~P+#w+Ht+[R+[R+(G+(G+(G+(G+(G+(G+(G+(G+(G+(G+(G+(G+(G+(G+(G+9X+od+,k+,k+,k+,k+,k+,k+,k+%4+%4+-m+)k+)k+-m+%4+%4+'k+'k+-m+)k+)k+-m+si+si+$4+-2+-2+-2+gi+Xg+Sl+by+(G+er+Ht+Ht+(G+^V+$w+@/+@/+@/+Rl+Rl+Rl+Rl+n8+n8+]f+>d$>d$wy$,d$#4+Xg+Xg+Nl+Nl+69@69@sI+sI+0s#{P+[G+u&@t&@t&@[T+)B+b$@b$@uI+z@@O,@0$@K@@K@@8V@8V@-B+y9#6Z+*4+Ll+]G+#/+#/+cy+O0+N@++k+5 @1O#k7$C@+;1#'-#AB$uC$Tk$}h$.~ sG QC +z q<$vR@;P EN 4z+4z+[g b$>b$>b$>b$>b$-c$yC$TA$TA$TA$Tt$Tt$os$os$St$St$AA#AA#zA#zA#zA#yA#oi$oi$oi$oi$} @8=@v;@v;@|V+ZK+0G+0G+O)@O)@ny+_w+6o@6o@|=@|=@|=@}=@L)@L)@:&@:&@:x@:x@:x@:x@:x@#k+tp+#m+#m+#m+Zn+Zn+X+$X+$X+$X+$H`#H`#r.$|&@hc#v=@p;@p;@p;@p;@p;@p;@u=@u=@[G+[G+ne#xb#xb#ne#:G+`J#By#cf#]i#]i#]i#_i#1f#Rn#hf#hf#hf#hf#[T#[T#[T#[T#rq#qq#;f+-f+In$ ;$tB#'E#!w#!w#D7#D7#ct#ct#dt#dt#Sy#Sy#Sy#Wy#Wy#!X#!X#!X#ci#@I#~b$Zn#/l#J`#/l#Zn#Zn#Zn#5@$5@$5@$/l#/l#/l#~X#J`#/l#5@$5@$J`#6T#8V#J`#J`#~X#6T#6T#~X#J`#J`#~X#~X#~X#6T#6T#6T#8V#/K#$5#Iq#Iq#Iq#Iq#Iq#$5#$5#:X#:X#`4#`4#7V#7V#7V#L7#qt#{E#~5#~5#~5#~5#+z#+z#+z#+z#+z#~5#~5#{E#{E#{E#mt#nt#nt#Z`#Z`#nt#nt#mt#mt#nt#nt#nt#Z`#Z`#nT#tt#hV#]z#]z#]z#;z#;z#+z#+z#]z#;z#;z#;z#;z#]z#iT#St#]z#iT#iT#St#hT#[o#[o#}o#}o#}o#[o#hT#hT#[o#}o#fd$ZP#jl#[2##M#YP#ll#ZP#ZP#:2#:2#[5#[5#[5#[5#<5#<5#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#Z4$a<$Z4$a<$Z4$a<$Z4$a<$P_$]K#xi$R[$L3$Rt#E2$`q#:o#(I#:o#]}#:o#]}#Gc#Hc#Et#MB$N7#D$,D$'D$)D$!D$~D${D$]D$^D$/D$(D$8b#4b#+K@iq@I*$_D$:D$nt$k+hr+jp+;'@Z5+9m+B$@[D$)'+}D$u>+|D$1D$2D$+] [c#dw Y:@s! Zi@:e }C 1k Dn iQ ({+3D$}f.0c.l}+Is c8 5D+,v.,v.i~ i~ i~ i~ Yt.Yt.,v.i~ Yt.)> )> Yt.i~ ,v.,v.Yt.6g+6g+i~ ZY ,v.i~ ,v.i~ Yt.)> )> Yt.", "le je xn.J6 xn.xn.je je je je je ie ie le le .h..h..h..h..h..h..h..h.vk .h.$~.N6 N6 N6 $~.$~.6c 6c 9c 7c ie ie IO.ie je 9c L_ ,% =+ ^+ *| ,D )p+Y6 Uz.xe.4D$V:$#^@#^@1u@0`@5D$Al x[@~<@6D$7D$8D$Vz$-i#[V#k)$<6$;[#/3@-!@,u+6i@cK@N,+N,+_9$)a$[O#9D$0D$aD$aD$&d$bD$o:+>.$>.$bd+!_+ _+~_+$a@=g$lc#fi+Xl+ei+jp+jp+jp+hr+[1@[1@v~@v~@v~@v~@+7@v~@hr+On+*k+*k+*k+*k+On+ei+*k+._+Gg+Gg+Gg+._+On+ei+*k+._+#_+#_+: @@_+>k+gi+ZA+2$@V4@hc#V4@1$@:k+8X+eK@|G+_T+Q0+Q0+xp+=w+@k+vr+R0+_T+)B+/G+Mn+ip+ip+$w+$w+$w+$w+$w+$w+$w+$w+(G+(G+(G+(G+(G+(G+(G+9X+Mb+[]+[]+[]+[]+[]+[]+[]+:6+si+]_+:k+:k+]_+si+,k+HZ@=:@%4+-m+-m+%4+:6+Yg+$4+$4+-2+_k+gi+Xg+~/+@/+(G+er+Mn+Mn+(G+^V+@/+@/+k)+di+di+di+!i$!i$!i$!i$]f+]f+]f+,d$#4+#4+Xg+Xg+rD+rD+Mn+_V+_V+69@ZM+69@oD+ZA+YA+{/+s=@Nb+;2+;2+u)+(|+QK+wI+ED+ED+e^@_w+<|+BD+;m+=4+u)+qy+N0+N0+U_@f~+}6+Ee@d~@U4$7o@<-+AQ@1O.d_#hx@Aj$S-$)J -! PC PC Kv Eu w~$[g D&#=S [g b$>b$>b$>b$>b$-c$Oe$6d$Jx$Jx$eD$eD$eD$eD$ni$ni$N1#N1#N1#N1#[{#yA#l#$l#$eX+eX+wp#wp#kX+kX+2T+ZK+0G+>B+t<@Q,@0=@0&@6o@6o@|=@|=@|=@}=@L)@L)@:&@:&@:x@:x@:x@:x@:x@#k+ L+ L+ L+ L+-9@-9@e0#e0#e0#e0#60#f0#pq#pq#pq#4=@|G+|G+|G+|G+|G+|G+}G+}G+69@[G+ne#xb#xb#ne#:G+.}#2&@=l#]i#]i#]i#2f#Rn#df#hf#hf#hf#hf#Ly#Ly#Ly#Ly#rq#qq#;f+-f+In$ ;$tB#'E#!w#!w#D7#D7#ct#ct#dt#dt#Sy#OP#Xy#Xy#!X#^l#^l#^l#5@$Zn#YA$Aq#.o#.5#.5#G7#5@$5@$/l#/l#J`#J`#J`#J`#~X#J`#/l#5@$5@$J`#6T#8V#/l#J`#6T#8V#8V#6T#J`#/l#J`#J`#J`#J`#~X#~X#6T#_l#Bf#%5#%5#%5#%5#%5#Bf#Bf##5##5#7V#7V#`4#`4#`4#J7#Y`#;z#+z#+z#+z#+z#~5#~5#;z#;z#;z#+z#+z#~5#~5#~5#nt#Z`#Z`#nT#nT#Z`#Z`#nt#nt#nt#Z`#Z`#Z`#nT#nT#tt#jT#St#iT#iT#]z#]z#]z#;z#+z#;z#]z#iT#iT#iT#iT#]z#]z#]z#iT#St#hT#[o#}o#}o#|o#}o#[o#[o#[o#[o#}o#;O#}5#jl##M#@M#fD$YP#ZP#}5#:2#:2#[5#[5#[5#[5#<5#<5#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#E2$E2$]g$E2$]g$E2$]g$E2$gD$P_$.l$Z4$Te$P_$wi$!6$:I#R7#:I#I0#:I#I0#}w#N7#ah$Pt#Qt# Z#c@$Q`#c@$id$id$id$id$c@$Q`#P`#P`#P`#^X#^X#0V#0V#0V#0V#0T#0V#{X#7V#.o#l@$Zn#Zn#5@$5@$^l#^l#!X#VY#VY#K`#$;$$;$hD$5[+5[+5[+6[+6[+>|+>|+@G#@G#zB#AB#AB#AB#1T#5V#o'$iD$G~$rc#of#jD$A!$kD$lD$mD$lD$nD$oD$nD$oD$pD$qD$&2+y0+.4+6e@g0#pD+p=$o;@up+L@@Z.@9$@^K@cB@^K@9$@4e@9$@8&@8&@8&@mq@mq@,T@,T@,T@,T@!K@!K@!K@!K@S,@S,@|V+2T+T,@kX+8=@8=@7=@7=@eX+} @oi$l#$o7#o7#BO@_P+_P+_P+hX+vp#9e#8e#8e#8e#8e#8e#8e#8e#8e#4Z+rD$6h$~^#M1#Sj$sD$A1#tD$uD$Vj$Re@H&#F%$Dm (*$k($RC -E }g }g }g -! tG sG tG sG sG rG rG sG sG tG s[@s[@s[@s[@s[@s[@s[@s[@cP@cP@es #UD$VD$WD$XD$YD$ZD$`D$ E$.E$+E$@E$#E$$E$%E$&E$*E$=E$-E$;E$L!#=h#>h#$9$!c@>E$,E$'E$)E$!x$5l$Qi$!E$fc@0i@0i@}9@}9@3}@K<@K<@K<@K<@(a@X4@t~@hp+1}@ip+k+jp+t~@S;@nk+vB+~E$KD@{E$]E$^E$/E$(E$tB$'G Kz _E$W:@s! [f s! G> .r ;z CN >[ |+ 9=+*:.aH@=L ec 80+)> )> Yt.Yt.Yt.Yt.i~ i~ ,v.i~ Yt.)> )> Yt.i~ ,v.ZY i~ )> Yt.,v.KB KB ZY ,v.i~ Yt.)> )> Yt.", "le je xn.J6 J6 xn.je xn.xn.xn.je je ie ie ie .h..h..h..h..h..h..h..h.+h.vk .h.N6 N6 U5 U5 N6 ,' ,' 9c 9c ie je K6 VD+K6 ie E7 M_ ^% W+ }. @< p^ :E$(I+.$!i$L0+!_+!_+ _+~_+$a@=g$Xl+ei+On+*k+Z6@Z6@Z6@1(@[1@[1@v~@v~@v~@v~@+7@v~@gr+ei+On+On+On+On+ei+Xl+*k+._+Gg+#_+Gg+._+On+ei+._+Gg+#_+0d+#_+Fg++_+ir+By#2$@2$@V4@1$@{/+_k+[]+sD+:V+)B+P0+P0+Q0+R0+=w+vr+}T+:V+[T+_V+-]@fr+1}@:T+l;@l;@l;@l;@l;@l;@l;@(G+(G+(G+(G+(G+(G+(G+#/+nD+[]+[]+[]+[]+[]+[]+[]+:6+si+]_+:k+:k+]_+si+:6+ o+HZ@,k+%4+%4+,k+Yg+kp+Lb+$4+-2+_k+dy+Xg+~/+@/+(G+(G+Mn+Mn+(G+by+@/+Rl+di+di+di+!i$!i$!i$!i$!i$]f+]f+]f+,d$#4+#4+Xg+Xg+#/+#/+(G+Mn+Mn+_V+oI+_V+oD+ZA+YA+YA+qD+s=@Mb+;2+Ll+u)+z@@wI+Jl+Rt+J@@(w++:$'T@S0+H:+/_+f~+;2+;2+_T+z@@~V+Gy+[8+k~+4d$h/+Wb+LM.J&#h^@|d$[,$Z;$}g u1$Lv &E }f !M [,$=S ,M b$>b$>b$>b$>b$>b$(R#_{#Oe$6d$cE$cE$dE$dE$,b$,b$N1#N1#N1#N1#[{#[{#7V@o7#[ @[ @7=@7=@T,@2T+Q)@lX+0G+>B+Q,@5o@qt$0=@6o@6o@|=@|=@|=@}=@L)@L)@:&@:&@:x@:x@:x@:x@:x@:x@@k+sp+sp+sp+Yn+Yn+I6@I6@I6@e0#60#f0#'b$'b$'b$pq#|G+|G+|G+|G+|G+|G+}G+}G+69@[G+ne#vy#vy#ne#:G+.}#3&@bc#_i#]i#_i#2f#:i#df#hf#hf#hf#-l#Ly#Ly#Ly#Ly#rq#qq#;f+-f+In$ ;$tB#'E#!w#!w#D7#D7#ct#ct#dt#dt#OP#OP#Xy#Xy#^l#^l#^l#ci#Zn#~b$NB$Aq#.o#7V#lV#.o#G7#/l#/l#J`#J`#~X#~X#~X#~X#J`#/l#5@$5@$J`#6T#8V#/l#J`#6T#8V#8V#6T#J`#/l#/l#/l#/l#J`#J`#~X#~X#Af#)2#@o#@o#@o#@o#@o#)2#)2#Dc#Dc#.5#7V#`4#{X#{X#R`#}w#]z#]z#;z#+z#+z#~5#~5#iT#]z#]z#;z#+z#+z#~5#~5#Z`#Z`#nT#{O#{O#nT#Z`#Z`#Z`#Z`#Z`#nT#nT#{O#{O#6w#`q#St#St#St#iT#iT#]z#]z#~5#+z#]z#St#St#St#]z#;z#]z#]z#iT#St#hT#[o#}o#}o#|o#}o#}o#[o#[o#}o#}o#;O#}5#jl##M#@M#fD$YP#ZP#}5#:2#:2#[5#[5#[5#[5#<5#<5#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#`L#wi$wi$wi$wi$wi$wi$wi$wi$eE$9h$Te$.l$]g$9h$wi$^6$iT#/2#:I#:I#:I#:I#}w#}w#0h$ah$z.$Qt#c@$c@$id$id$id$id$id$c@$Q`#Q`#P`#P`#^X#^X#0V#0V#0V#0V#0T#0T#aV#`4#.5#J`#/l#5@$5@$^l#@I#Xy#!X#!X#VY#$;$$;$$;$hD$hD$hD$hD$5[+5[+6[+6[+@G#@G#AB#AB#1T#1T#1T#Ty#o'$iD$jD$3i#3i#jD$iD$kD$mD$mD$mD$mD$mD$fE$fE$gE$qD$~6+&2+QL#k+[1@t~@T;@6(@:u+%F$&F$*F$4H+!r$=F$-F$;F$u{ >F$B'$W:@s! TH :,@S-@S-@:g nI@ug#6[ Ps.>( l7 ko.hd 5D+]$@6g+6g+)> Yt.Yt.i~ i~ ,v.i~ Yt.)> )> Yt.i~ ,v.KB ,v.Yt.i~ ZY O* O* KB ,v.i~ Yt.)> )> Yt.", "xn.le ke ie je je ie ie ie ie ie ie ie ie ie 7c L_ L_ L_ L_ L_ L_ L_ 6c ,' !% ,' >' O6 x5 L_ x5 >' 7c le HO.HO.WD+IO.VD+ie 8c 6c U% =+ s& X@ ,a@,F$>)+'F$)F$m..aw@48@50@28@+6@!F$~F$9] 9e C]#{F$]F$J{$'(@^F$1_+9k#{B+/F$h9@y~@_ @F)@Y(+H2@(F$_F$:F$k+>k+Xg+gi+dy+dy+_k+_k+-2+nD+Mb+Mb+^_+}]+^/+^/+^/+;2+;2+Mb+mD+rD+Jt+gr+gr+;'@l;@l;@(V+.>+&-+l;@(G+2+[P+Rt+oy+R0+P0+Ll+z@@=4+7a@;Q#nK@,(@=7$}F$u1@P5@`w Qs$}h$jQ }f Kv &E Kv }f 9~ [g 'M DN DN b$5F$6F$5F$%u$7F$)g$8F$Cj$S5+y4#Dj$^m$,p$,p$,p$Ej$b8$b8$b8$[{#y)+BI+7=@7=@:P+:P+2T+u;@Q)@R,@Q,@t<@a=@a=@=9@=9@}=@}=@}=@|=@|=@|=@{k@{k@|R+|R+K,@K,@K,@K,@:x@:x@>w+;w+up+-w+fy+fy+ur+ur+VH@o;@|t#=E#9F$@p$[a@u=@oe#p;@eK@:V+)B+)B+[T+[T+_V+[G+ne#xb#vy#xb#:G+.}#2&@bc#2f#2f#2f#2f#1f#1f#}f#,l#,l#hf#Ly# ;$In$In$rq#-X#-f+-f+Ly#Ly#>6+&2+C7#C7#I`#I`#u0#u0#w0#w0#OP#OP#OP#OP# O# O# O# O#/l#/l#G7#G7#G7#G7#B0#G7#YA$Zn#/l#J`#~X#J`#/l#5@$5@$/l#~X#6T#6T#~X#/l#5@$5@$~X#aV#aV#6T#J`#J`#~X#8V#6T#J`#/l#/l#J`#6T#/K#)2#@o#@o#@o#@o#@o#)2#)2#Dc#Dc#.5#7V#`4#{X#{X#R`#qt#;z#iT#iT#+z#{E#^z#^z#+z#+z#+z#+z#+z#+z#+z#+z#nT#nT#nT#nT#nT#nT#nT#nT#nT#nT#nT#nT#nT#Z`#Z`#st#hV#;z#~5#~5#;z#]z#]z#+z#~5#;z#St#[o#[o#hT#iT#]z#hT#hT#hT#[o#[o#[o#}o#}o#]z#hT#|o#=G#WL#WL#=G#0F$fD$#M##M##M#ll#ll#ZP#ZP#Tc#_2#[5#&8##8#@8#^O#_5#UB#TB#`L#ZL#ZL#`L#TB#UB#`L#`L#`L#`L#`L#`L#`L#`L#wi$wi$]g$]g$Te$Te$.l$.l$+l$aF$bF$+l$]g$9h$wi$!6$hT#St#iT#;z#tt#tt#tt#tt#]K#]K#u'$u'$u'$u'$D!$D!$id$zi$zi$zi$]b$Q`#`Y#`Y#.5#7V#aV#9V#9V#0V#aT#8T#~X#J`#5@$/l#J`#M`#^l#PP#X4$~>$Xy#,X#$;$,X#>X#5V#AB#AB#AB#1T#'X#'X#>|+>|+>|+,|+@K#@G#yB#@G#@K#z0+Jy#oc#jf#2i#cF$dF$G0+G0+eF$G0+dF$cF$cF$dF$G0+fF$gw$)6+>6+.I#df#Qg+ w#Pn#gF$5e@,'$0&@9$@8$@I@@I@@8V@qg@8V@8V@8V@8V@I@@I@@cB@cB@cB@x;@R)@w;@w;@w;@2T+2T+2T+2T+T,@T,@7=@7=@7=@7=@[ @[ @o7#o7#o7#7V@hF$iF$iF$jF$kF$kF$lF$lF$lF$lF$5($5($5($5($d9$9e#5$@jX+J #lZ@]v#Dj$1r$n~+mF$NJ@&$#['$Tk$Rv /d {T#-E -E -E }g }g }g *E *E tG tG tG tG tG tG tG tG s[@s[@s[@s[@s[@s[@s[@s[@cP@s[@`:@`:@`:@`:@s[@cP@es cP@`:@s[@es $ai@-Z#pF$=_+r0+qF$XB$rF$sF$nE$Jm$V2$Z!$u|$^B$tF$uF$vF$ED$wF$5[$@D#VG#0+$$F#xF$Hf$|D#yF$K6$zF$AF$BF$CF$DF$EF$FF$GF$HF$bU#IF$JF$KF$LF$MF$NF$OF$PF$QF$RF$SF$TF$UF$VF$WF$XF$YF$ZF$`F$ G$.G$+G$@G$#G$N]#N(#$G$%G$&G$Pl$*G$=G$Np$-G$;G$>G$$F$#F$Qi$!E$fc@6k@`6@3}@}9@|9@ 6g+6g+6g+)> )> )> )> )> )> )> )> ]$@Yt.ZY ZY i~ Yt.", "xn.le ke ie je je ie ie ie ie ie ie ie ie 7c L_ L_ L_ L_ L_ L_ L_ L_ L_ 6c ,' 6c >' x5 >' 6c x5 E7 ie le HO.HO.WD+VG.VD+K6 le L_ ^% v X% y* f6+^G$G;$:0+/G$(G$:s 60@60@]]#pb@Op@kq xd@9|@`}$QH#_G$:G$8M@Y@+>4+Ap+ea@uy+R@+]3@y~@,G+lZ+G,+S&+k+ir+gi+dy+dy+dy+_k+-2+s=@s=@s=@Nb+}]+}]+Ob+Ob+;2+;2+nD+rD+='@gr+:1@gr+:T+$w+$w+2+Qt+g~+=w+R0+f~+&4+5T+&R#dm@2G$TF@J.+]v$S_#t[$3=$y2$Yw S-$v~$5'$E'$&E &E }f 9~ [,$;M mI@mI@Rx@es es cP@cP@s[@s[@s[@}f es s[@s[@b$>b$%u$5F$=c$Sj$Di$5d$8F$8F$-c$S5+Dj$5G$Ej$Ej$Ej$Ej$b8$c9$c9$vp#]-+}V+wp#7=@=>+=>+2T+s;@R,@R,@Q,@t<@a=@a=@=9@=9@|=@|=@|=@|=@|=@}=@L)@L)@:&@:&@:x@:x@:x@:x@:x@:x@up+up+-w+@k+fy+vr+}T+ur+VH@o;@=E#=E#9F$9F$[a@u=@p;@eK@|G+:V+:V+:V+^G+}G+69@[G+ne#xb#xb#xb#:G+.}#2&@bc#2f#2f#2f#2f#1f#1f#hf#hf#hf#-l#Ly#Ly# ;$ ;$rq#-X#-f+-f+Ly#Ly#>6+&2+C7#C7#I`#I`#u0#u0#w0#w0#>X#!X#!X#!X#!X#^l#^l#^l#/l#/l#G7#G7#G7#G7#G7#G7#5@$/l#J`#J`#J`#/l#5@$Zn#/l#J`#~X#~X#~X#~X#J`#/l#J`#6T#aV#8V#~X#/l#J`#~X#8V#6T#J`#/l#/l#J`#6T#/K#)2#@o#@o#@o#@o#@o#)2#)2##5##5#7V#7V#`4#`4#`4#J7#qt#+z#iT#]z#+z#{E#^z#{E#+z#+z#+z#+z#+z#+z#+z#+z#nT#nT#nT#nT#nT#nT#nT#nT#Z`#Z`#Z`#nT#nT#nT#nT#tt#hV#;z#~5#~5#;z#]z#]z#+z#+z#;z#St#[o#[o#hT#iT#]z#hT#hT#hT#[o#[o#[o#}o#}o#St#[o#WL#=G#WL#|o#WL#6G$YP##M#[2#[2#ZP#ZP#ZP#}5#Tc#_2#[5#&8##8#@8#^O#_5#-z#UB#`L#ZL#ZL#`L#UB#-z#`L#`L#`L#`L#`L#`L#`L#`L#wi$wi$]g$]g$Te$Te$.l$.l$Te$+l$+l$.l$wi$gD$9h$P_$`q#St#iT#]z#6w#6w#hV#jT#]K#]K#u'$u'$u'$u'$D!$D!$c@$c@$c@$c@$Q`#Q`#P`#`Y#`4#{X#0V#9V#9V#0V#aT#8T#6T#J`#/l#/l#M`#M`#@I#~>$~>$OP#Wy#,X#,X#,X#Ty#5V#1T#'X#'X#'X#'X#L`#>|+>|+,|+|T#@K#yB#yB#yB#@G#)E#A7#)l#id+cF$Gy#G0+ 4+eF$j8+G0+Gy#cF$id+dF$ 4+i8+!6+!6+)6+>6+;f+h0#}t#v=@gF$5e@)~#a&@4e@9$@8V@8V@qg@qg@8V@8V@8V@8V@I@@I@@x;@x;@x;@x;@w;@w;@!K@!K@2T+2T+2T+2T+T,@T,@7=@7=@wp#wp#eX+eX+l#$l#$l#$nZ@WK+jF$jF$kF$kF$lF$lF$lF$lF$lF$5($5($5($5($d9$d9$5Z+jX+J #lZ@/s#M1#y4#>>+wy+qq@i($&{#+{#ki$mI@hB -E -E -E }g }g }g *E *E tG tG tG tG tG tG tG tG s[@s[@s[@s[@s[@s[@s[@s[@`:@`:@+<@Z:@Z:@+<@`:@`:@es cP@`:@s[@es G$!E$Qi$!E$#F$gc@fc@3}@}9@|9@|9@ )> 6g+6g+)> )> )> )> )> )> )> )> ]$@Yt.ZY ZY i~ )> ", "xn.le ke ie je je ie ie ie ie ie ie ie ie 7c >+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ }# ,+ i+ V C C V Y+ x5 E7 ie le HO.WD+WD+VG.UG.IO.ie >' >% p GB {& 6z@.H$+H$@H$%f -d &^.{]#1b@90@/N+(4@!4@6D+RY@>Q.;-#~`+u1#3F$3|+2|+H!#B($cH#KL#k+ir+(+@dy+dy+gi+gi+YA+{/+{/+:k+)k+)k+)k+)k+-m+-m+-2+Xg+ir+Xl+Wl+:1@hp+^V+(G+$w+H$CO#=c$=c$%u$%u$>b$T4$>b$%u$6F$5F$nw$Ms$,H$'H$,H$a8$;u$im$)H$)H$!H$5($2R+7=@wp#7=@=>+zI+6+&2+C7#C7#I`#I`#u0#u0#w0#w0#,X#,X#,X#,X#,X#VY#VY#VY#ci#ci#/l#/l#/l#/l#/l#/l#J`#J`#J`#J`#/l#5@$Zn#~b$~X#~X#J`#J`#J`#J`#~X#~X#6T#8V#aV#6T#/l#5@$J`#6T#8V#6T#J`#/l#/l#J`#6T#/K#)2#@o#@o#@o#@o#@o#)2#)2#:X#:X#`4#`4#7V#7V#7V#L7#qt#+z#]z#]z#~5#{E#{E#~5#+z#+z#+z#+z#+z#+z#+z#+z#nT#nT#nT#nT#nT#nT#nT#nT#nt#nt#Z`#Z`#nT#{O#{O#hV#jT#;z#~5#~5#;z#iT#]z#;z#;z#]z#St#[o#[o#hT#St#iT#hT#hT#hT#[o#[o#[o#}o#}o#[o#|o#=G#=G#|o#}o#|o#bh$ll#jl#jl#jl#}5#}5#*8#*8#(2#:2#/z#[5#(5##8#$8#:5#-z#UB#TB#TB#TB#TB#UB#-z#`L#`L#`L#`L#`L#`L#`L#`L#]g$]g$]g$]g$Te$Te$Te$Te$]g$Te$.l$Te$9h$~H$gD$K_$jT#Yq#}w#}w#_X#Qt#z.$ah$zi$zi${H${H${H${H$]H${H$(X#(X#b@$b@$P`#P`#Q`#Q`#^X#]X#d($d($d($9V#0T#0T#aV#~X#ci#ci#M`#ci#Xy#~>$OP#Sy#Wy#>X#^>$Ty#Ty#5V#+2#Z_$Z_$tT#L`#L`#L`#L`#|T#@K#+G#xB#*w#*w#xB#%w#&2+`3+&2+`3+&2+i8+;6+i8+;6+`3+d8+B7#>6+^H$&2+;6+!6+~6+!6+&2+-f+$|s$QG$;r$GH$'r$HH$IH$SG$SG$JH$JH$Qi$#F$0i@0i@0i@0i@}9@|9@|9@|9@}9@|9@|9@ kl $[ u& jE.QH$ko.ko.s6 5D+6=+Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.i~ i~ Yt.Yt.Yt.)> )> )> Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.6g+Yt.ZY ZY i~ )> ", "xn.le ke ie je je ie je je je je je je je E7 >+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ D C V V ,+ ,+ V `+ g~ E7 ie HO.WD+WD+WD+VG.VG.HO.ke 7c O6 '$ p {& RH$SH$TH$UH$C8 VH$bm P;.2b@!W@}Z.WH$Q;.8] xd@$;@Rq@&{#XH${-#G[#3_+5W.$>#X_@[/+R@+_/+T.+=4+<6+lZ+v6@#H$b:#YH$&H$&H$Sb$+b$ZH$ZH$`H$`H$$_+zb+0d+#_+dd+9[+/6+/6+E:+@4+fi+fi+hr+jp+1(@hr+<9@7k@7k@GZ@_1@fi+fi+fi+fi+Xl+ei+ei+*k+*k+*k+*k+*k+*k+*k+*k+1=$TR#Lg+=k+Ul+Ul+#_+#_+ei+>k+ir+(+@gi+gi+gi+Xg+ZA+ZA+1$@{/+]_+-m+-m+-m+-m+[]+-2+Xg+ir+Xl+1=$Wl+It+Mn+_V+(G+$w+l;@^V+Mn+Mn+(G+$w+$w+^V+^V+l;@$/+cy+_6+_6+Lb+Lb+$4+$4+$4+Lb+$4+$4+-2+_k+_k+{/+:k+)k+jr+%4+-m+!k+!k+]_+:6+-2+-2+-2+$4+Xg+Sl+Sl+Sl+rD+rD+rD+rD+Xg+Xg+Xg+Kb+>.$L0+v-$dx$]f+,d$*H$Wg+6e@fi+fi+fi+fi+fi+fi+fi+On+On+On+On+On+On+On+/6+E:+0[+=g$F:+]|+b[+1$@1$@Nb+}]+Ob+^/+@k+@k+oy+oy+dp+&N+2V+5T+Q0+u)+%>+N@+R.+9a@6]@vg@Vx#Y)+ I$.I$j9$v' ;> 0> 2r@Z;$5'$5'$|f |f Z;$!J 7r !p$iq$Rv Zi@cP@cP@cP@cP@cP@cP@cP@}f es s[@s[@b$=c$%u$%u$>b$=k$=c$5F$6F$6F$Hs$nw$Gs$=I$Gs$,H$;u$im$)H$!H$-I$jF$5$@wp#8=@wp#=>+>T@9G+ZK+R,@Q,@qt$a=@b=@b=@=9@=9@;I$jb#6o@|=@}=@ED+Jl+Jl+#9@#9@fh#fh#fh#:x@:x@:x@:&@:&@:&@:&@:x@:x@ N+ N+OK+OK+tI+tI+/P+/P+/P+/P+)B+)B+)B+)B+:V+eK@u=@[a@Q;@Q;@ne#ne#ne#:G+:G+`J#3&@g0#Qg+Qg+Qg+Qg+Rn#Rn#-f+-f+;f+-l#[T#sq#|f#|f#rq#-X#-f+-f+Ly#Ly#>6+&2+C7#C7#I`#I`#u0#u0#w0#w0#Ty#Ty#>X#Ty#>X#>X#>X#!X#VY#ci#ci#ci#/l#ci#/l#/l#~X#~X#~X#J`#/l#Zn#~b$>I$8V#6T#J`#/l#/l#J`#6T#8V#aV#aV#8V#~X#5@$Zn#J`#8V#8V#6T#J`#/l#/l#J`#6T#/K#)2#@o#@o#@o#@o#@o#)2#)2#/X#/X#{X#`4#7V#.5#.5#Fq#qt#+z#]z#;z#~5#{E#~5#+z#;z#;z#;z#;z#;z#;z#;z#;z#nT#nT#nT#nT#nT#nT#nT#nT#mt#mt#nt#Z`#nT#{O#^K#jT#jT#]z#+z#+z#]z#iT#iT#;z#]z#iT#St#hT#[o#hT#hT#St#hT#hT#hT#[o#[o#[o#}o#}o#}o#WL#,I$,I$|o#[o#[o#fd$ZP#jl#|5#|5#*8#*8#*8#`P#_2#gV#/E#/z#(z#(5#_5#<5#UB#UB#UB#UB#UB#UB#UB#UB#`L#`L#`L#`L#`L#`L#`L#`L#E2$E2$]g$E2$Te$L3$Te$L3$]g$L3$.l$L3$9h$KR#9h$E2$D2$D2$D2$D2$`y#Qt#z.$ah$zi$zi${H${H${H${H$]H${H$d@$6V#6V#(X#`Y#P`#Q`#]b$c($Y4$>6$>6$>6$>6$,6$67$d($aV#qT#ci#M`#ci#Xy#~>$Wy#Wy#Wy#>X#Ty#Ty#Ty#5V#@2#@2#W_$Z_$+2#L`#L`#'X#@G#@G#xB#xB#*w#*w#u.$u.$Es$&2+Es$&2+7q$d8+7q$d8+Es$&2+7q$d8+7q$d8+Es$!6+A0+A0+~6+;6+Es$Nn#_1@Nl+@p$-:#-_#*9@mb#4e@8V@8V@qg@qg@8V@8V@8V@8V@I@@I@@DD+,T@,T@,T@]K@]K@RQ@RQ@2T+2T+2T+2T+T,@T,@7=@7=@'I$'I$D@@D@@pi$pi$pi$lZ@)I$~]$:H$:H$:H$:H$ i~ ,v.,v.Yt.)> ", "xn.le ke ie je je ie je je je je je je je E7 >+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ D C V V ,+ ,+ V `+ g~ je IO.HO.WD+WD+KI$iG+WD+)y.he 9c x5 >% v N+ S+#LI$MI$NI$=j.OI$a1.]i (z.!W@}Z./N+Q;.PI$6D+.B U;.to@%{#[a$/-#;/#l[+'>+}f+dZ.5]+U,@2]+=4+<6+F)@QI$RI$)d$SI$TI$UI$|P#8H#di$di$VI$@>+L,+L,+[9@0d+1/#Eb+9[++*$E:+@4+6e@6e@Xl+On+jp+gr+WF#[t#7k@WF#WF#W1#lc#fi+fi+fi+fi+fi+On+On+On+On+On+On+On+On+1=$TR#;k+-k+Ul+Ul+Ul+#_+ei+ei+>k+ir+(+@(+@Xg+Xg+ZA+ZA+1$@{/+]_+[]+-m+-m+[]+[]+-2+Xg+ir+Xl+1=$Wl+ip+_V+69@_V+^V+$w+$w+(G+_V+(G+$w+$w+^V+^V+l;@8~+@/+Rl+~/+~/+Sl+Sl+Xg+Xg+Xg+Xg+Xg+gi+gi+dy+YA+1$@!k+jr+,k+%4+)k+!k+]_+si+-2+-2+-2+$4+Xg+Sl+Sl+Sl+rD+rD+Xg+Xg+Xg+Xg+Kb+Kb+>.$WI$v-$dx$>d$wy$*H$Wg+fi+_1@_1@_1@_1@_1@fi+fi+On+On+On+On+On+On+On+/6+E:+0[+0[+Vg+F:+b[+(k+(k+:k+!k+Ob+Ob+lr+|]+=w+oy+QK+5T+1V+WA+u)+&4+O,+l0+G$+mK@ji@23@&h#sm#-($XI$)E j8 /V#Cm .~ 9~ kQ n!$YI$YI$-P jQ 'J o$#p$#q$#Zi@cP@cP@cP@cP@cP@cP@cP@}f es s[@s[@b$%u$6F$5F$=c$nw$=J$-J$-J$Gs$,H$Gs$=I$;J$Js$Ls$!I$)H$!H$>J$jF$5$@wp#v;@kX+T@9G+ZK+R,@Q,@qt$a=@b=@b=@,'$=9@;I$jb#6o@|=@}=@ED+Jl+Jl+#9@#9@fh#fh#:x@K,@K,@K,@:&@:&@#9@&t@qr$Aq@eh#7X+ay+ay+~P+~P+dr+dr+nI+nI+U_@U_@U_@)B+:V+eK@[a@@p$rX@jV@ne#ne#:G+:G+:G+`J#/+@]|+h0#h0#h0#h0#:i#:i#`-$`-$-f+-l#[T#sq#|f#}i#rq#-X#-f+-f+Ly#Ly#>6+&2+C7#C7#I`#I`#u0#u0#w0#w0#5V#z0+5V#z0+5V#5V#5V#Wy#,X#VY#VY#VY#ci#VY#ci#ci#6T#~X#J`#/l#5@$Zn#~b$~b$aV#6T#~X#/l#/l#~X#6T#aV#8V#aV#8V#J`#5@$5@$~X#8V#8V#6T#J`#/l#/l#J`#6T#/K#)2#@o#@o#@o#@o#@o#)2#)2#/X#/X#{X#`4#7V#.5#.5#Fq#qt#+z#;z#+z#{E#{E#+z#]z#;z#;z#;z#;z#;z#;z#;z#;z#nT#nT#nT#nT#nT#nT#nT#nT#mt#mt#nt#Z`#nT#{O#^K#jT#`q#]z#+z#+z#]z#St#iT#]z#iT#iT#St#hT#[o#[o#[o#hT#hT#hT#hT#[o#[o#[o#}o#}o#|o#=G#,J$,I$|o#[o#[o#fd$ZP#jl#|5#|5#*8#*8#*8#`P#:2#<2#XL#/z#&8#(z#:5#<5#TB#TB#UB#UB#UB#UB#TB#TB#`L#`L#`L#`L#`L#`L#`L#`L#L3$]K#L3$]K#E2$Rt#E2$Rt#L3$a<$[m$a<$E2$^K#E2$a<$)M#!2#J7#J7#J7#'M#Q`#]b$'J$'J$'J$'J$)J$)J$)J$'J$H.$(X#(X#6V#`Y#Q`#]b$hd$dh$dh$yi$yi$ u$ u$vn$vn$us$67$8T#qT#5*$K`#!X#Xy#>X#>X#Ty#5V#5V#5V#z0+Ty#@2#+ $W_$Z_$Z_$tT#L`#'X#@G#@G#+G#xB#%w#u.$u.$5t#.K#.K#$w#My#$w#My#$w#%w#-6$X3+g8$%2+g8$%2+-6$X3+A0+A0+~6+;6+Es$ed+gr+rD+[a@o;@gY#H6@:^#qg@9$@9$@qg@qg@8V@8V@8V@8V@I@@I@@DD+,T@,T@,T@]K@]K@RQ@RQ@2T+2T+2T+2T+T,@T,@7=@7=@!J$!J$6h$6h$ti$ti$ti$U<#~J$~]$~]$~]$:H$:H$ i~ ,v.i~ )> )> ", "xn.le ke ie je je ie xn.xn.xn.xn.xn.xn.xn.g~ >+ ,+ ,+ ,+ ,+ ,+ ,+ ,+ }# ,+ i+ V C C V Y+ g~ je IO.HO.WD+WD+KI$iG+WD+Qw.)y.8c E7 ^% ^% tp.QJ$RJ$.N.0C+eD.KR 9o ,l.DC |d@}Z.@j@ 6@:0@_8@WZ SJ$/T.7=$%{#]-#-/#q>#h/+S)@UX.[/+<_+__+=4+{V+4~+D$+X(+RI$)d$TJ$TJ$|P#UJ$di$VJ$;-+;:#[9@[9@[9@zb+68+p:+Eb+9[+/6+@4+6e@6e@fi+Xl+hr+gr+WF#[t#7k@GZ@-E#W1#lc#fi+Xl+fi+fi+fi+ei+ei+ei+ei+ei+ei+ei+ @#1=$TR#;k+-k+s:+s:+s:+=k+On+ei+>k+ir+(+@ir+Xg+Xg+YA+YA+{/+{/+]_+]_+)k+)k+[]+[]+gi+ir+fi+Wl+1=$Wl+It+Mn+69@_V+^V+l;@l;@$w+_V+^V+l;@l;@$w+^V+^V+k)+@/+Rl+Rl+~/+~/+Sl+Sl+Sl+gi+Xg+Xg+Sl+Xg+gi+dy+_k+!k+jr+vb+,k+%4+)k+[]+si+$4+$4+$4+$4+Sl+Sl+~/+~/+by+#/+Xg+Xg+Xg+Xg+#4+(6+v-$dx$dx$]f+wy$wy$*H$Vg+fi+_1@_1@_1@_1@_1@fi+fi+ei+ei+ei+ei+ei+ei+ei+E:+=2+0[+0[+0[+=g$F:+b[+(k+:k+:k+^_+G:+G:+vp+xp+=w+z@@1V+WA+T{@YM@YM@):@51@2V#z;@TF@9e@q>#^-#/5@Uv v' ol 6, UH cP@es w~$kQ n!$1i 1i S-$Qv q$#r$#r$#:e s[@s[@cP@cP@es es es }f es s[@s[@]$&J$TF#T_#tx$tx$ux$ux$Yo$Yo$My$My$~v$,]$Ts@Ts@Ry$Ry$xC$xC$Gx$Gx$Vy$Vy$Vy$Zz${m${m$ar$Tj$=k$>b$5F$6F$6F$%u$Ms$Hs$-J$=J$,H$a8$,H$'H$Js$;u$Ls$!I$)H$)H$ K$kF$4G+7=@kX+T,@6+&2+C7#C7#I`#I`#u0#u0#w0#w0#)E#)E#)E#)E#)E#)E#UY#UY#,X#,X#,X#VY#VY#VY#VY#VY#7T#~X#/l#5@$Zn#Zn#5@$5@$8V#6T#6T#~X#~X#6T#6T#8V#J`#6T#6T#~X#/l#/l#~X#aV#8V#6T#J`#/l#/l#J`#6T#/K#)2#@o#@o#@o#@o#@o#)2#)2#:X#:X#`4#`4#7V#7V#7V#L7#qt#~5#+z#~5#{E#{E#+z#iT#;z#;z#;z#;z#;z#;z#;z#;z#nT#nT#nT#nT#nT#nT#nT#nT#nt#nt#Z`#Z`#nT#{O#{O#hV#`q#iT#;z#;z#iT#St#iT#]z#St#St#St#hT#hT#[o#[o#[o#hT#hT#hT#[o#[o#[o#}o#}o#}o#=G#,I$,I$|o#[o#[o#fd$ll#jl#jl#jl#}5#}5#*8#*8#gV#<2#;G#/E#[5#&8#<5#.K$ZL#`L#TB#TB#TB#TB#`L#ZL#`L#`L#`L#`L#`L#`L#`L#`L#]K#]K#]K#]K#Rt#Rt#Rt#Rt#]K#a<$=M#R[$]K#Rt#]K#0h$!2#!2#L7#L7#L7#J7#`Y#P`#'J$'J$'J$'J$)J$)J$)J$'J${H$id$b@$(X#P`#Q`#hd$_q$dh$dh$yi$ u$@l$+K$@K$#K$@K$vn$9T#8T#+;$+;$K`#>X#,X#,X#Ty#5V#UY#5V#z0+Ty#Z_$sT#Z_$tT#tT#tT#L`#L`#@G#@G#+K#+K#My#%w#u.$5t#x!$x!$O{$4t#O{$4t#O{$4t#e8$-6$7|$I#$V[$g8$>c$57$,|+Ty#A0+~6+Es$ed+gr+rD+u=@p;@Vv#H6@:^#qg@4e@9$@qg@qg@8V@8V@8V@8V@I@@I@@DD+DD+DD+,T@!K@!K@]K@]K@2T+2T+2T+2T+T,@T,@7=@7=@'I$'I$D@@D@@pi$pi$pi$lZ@~J$~]$~]$$K$_H$(H$ K$ K$!H$!I$;u$Js$Js$;u$%K$qw$qw$L1#^N#S[#pi$U.@l#$gX@ni$Ei$x1#&K$*K$=K$-K$;K$!M -E -E }g }g }g *E *E tG tG tG tG tG tG tG tG es es es es es es es es $Ho$Cu+Cu+0T@.x+]T.(>$B@$HI+>K$E^@94+,K$'K$>:@I,+Kf$e/$U!$U!$)K$ {$A|$!K$5H$X2$^A$~K$|J$|J$y^$1J$Pw$|I${K$]K$^K$/K$(K$_K$:K$Tg$G$$F$$F$0i@0i@0i@ye@|9@ye@$F$Aw$% $xe@tB@9i@5k@<9@_G+[T+)B+b$@Q0+Q0+(|+(|+FD+wI+|R+tr+:&@Jl+FD+wI+FD+5T+1V+5T+|R+tr+|R+fD+z$+c&@G6@G6@s<@s<@c&@gY#gY#gY#gY#gY#gY#gY#gY#gY#K,@K,@(P+(P+(P+K,@:x@fh#:x@:x@:x@:x@:x@:x@:x@#k+`K+Zn+X+$X+${k+&m+:k+]_+$4+Lb+Lb+_6+Rl+di+di+j)+5a@V}+/h+{'#nK$oK$pK$qK$rK$m4 sK$tK$uK$vK$wK$xK$mQ Sr c2 8j#,J 0> (: F[.K8.O_.ko..Z s6 .Z O1.6=+Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.i~ i~ i~ ,v.,v.,v.i~ i~ i~ i~ i~ i~ i~ i~ Yt.i~ ,v.Yt.6g+6g+", "xn.le ke ie je je ie xn.xn.xn.xn.xn.xn.xn.g~ >+ R# R# R# R# R# R# R# R# ^& &$ ^& R$ J# R$ U g~ je IO.HO.WD+WD+KI$iG+UG.IO.HO.7c g~ ,% U% tp.yK$zK$AK$+H$BK$yZ@dl CK$O&.DK$}d@EK$[F.Qm V5@!#.FK$lT.PH#${#J2$GK$T_#g&@HK$i)$IK$h[+f[+d[+{V+4~+g)+E$+X(+RI$JK$KK$UJ$UJ$di$VJ$@>+%/+9~+9~+0~+ad+68+([+p:+9[+/6+@4+6e@6e@W1#fi+gr+_1@WF#-E#bi@_1@-E#W1#fi+Xl+ei+Xl+fi+lc#fi+fi+fi+fi+fi+fi+fi+YN#TR#W+$X1#;k+;k+;k+Mg+Mg+On+ei+Xl+fi+ir+ir+ir+>k+/+@dy+_k+_k+:k+:k+!k+!k+[]+[]+gi+ir+fi+Wl+1=$Wl+It+Mn+69@_V+^V+b@cP@k$#;P w~$!M [g mI@0> r$#MK$MK$:e s[@s[@cP@cP@es es es }f es s[@s[@b$%u$5F$%u$>b$Rj$nw$Hs$Hs$a8$%K$;u$;J$im$im$!I$!I$6+&2+C7#C7#I`#I`#u0#u0#w0#u0#)6+)6+)6+)6+)6+)6+z0+z0+^>$^>$^>$,X#,X#,X#,X#VY#qT#J`#5@$Zn#Zn#5@$/l#J`#~X#6T#8V#8V#8V#8V#6T#~X#Zn#/l#6T#8V#6T#~X#6T#aV#8V#6T#J`#/l#/l#J`#6T#/K#)2#@o#@o#@o#@o#@o#)2#)2##5##5#7V#7V#`4#`4#`4#J7#qt#~5#+z#~5#^z#{E#;z#St#]z#]z#]z#]z#]z#]z#]z#]z#nT#nT#nT#nT#nT#nT#nT#nT#Z`#Z`#Z`#nT#nT#nT#nT#tt#`q#iT#;z#;z#iT#St#St#iT#hT#hT#hT#hT#hT#[o#}o#}o#hT#hT#hT#[o#[o#[o#}o#}o#[o#WL#,I$=G#|o#}o#}o#;O#YP##M#[2#[2#ZP#ZP#ZP#}5#<2#gT#;G#XL#/z#&8#<5#UK$fV#$O#`L#`L#`L#`L#$O#fV#`L#`L#`L#`L#`L#`L#`L#`L#a<$ah$z.$z.$Qt#Qt#_X#_X#_X#z.$ah$ah$Qt#_X#z.$ah$Ct#$&2#1I#@;$$;$^>$Ty#UY#)E#)E#z0+Ty#CB#m@$m@$m@$)X#tT#L`#L`#@G#@K#Y3+X3+X3+My#Ly#4t#.L$+L$@L$#L$$L$%L$&L$,c$*L$b0$% $$u$$F$c0$=L$)b$|T#5V#}T#!6+Es$ed+_1@='@jV@eK@Vv#a$@:^#qg@4e@4e@qg@qg@8V@8V@8V@8V@I@@I@@x;@x;@x;@x;@w;@w;@!K@!K@2T+2T+2T+2T+T,@T,@7=@7=@~g$~g$U.@U.@ui$ui$ui$| @-L$;L$$K$>L$>L$V~$>J$>J$!H$!I$Js$;J$Gs$,H$%K$qw$,L$,b$^N#S[#pi$U.@eX+7V@M1#(R#1|+WS@'L$)L$!L$~L$u)$-E -E }g }g }g *E *E tG tG tG tG tG tG tG tG es es es es es es es es es cP@cP@s[@s[@cP@cP@es es cP@`:@s[@es G$!E$#F$#F$$F$ye@ye@xe@xe@$F$Aw$% $xe@tB@9i@5k@<9@_G+[T+)B+b$@Q0+Q0+(|+c[+wI+Rt+Jl+ED+tr+Rt+Jl+g~+wI+2V+vI+Il+Jl+ED+Jl+wI+y;@s<@G6@G6@s<@s<@G6@-_#G6@G6@G6@G6@G6@G6@G6@G6@|R+|R+FD+fD+FD+|R+<&@#9@:&@:&@:&@:&@:&@:&@:&@up+-9@IZ@{k+{k+&m+!k+]_+[]+-2+$4+$4+Lb+~/+Rl+di+!]+_ @{-@=i@AL$BL$CL$DL$EL$m~#E*@py#[M#FL$GL$HL$IL$mQ V-@U-@R} S-@u[ JL$KL$K8.LL$=L @$+s6 Is w]#sM Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.i~ i~ ,v.,v.ZY ZY ,v.,v.,v.,v.,v.,v.,v.,v.i~ i~ ,v.Yt.6g+6g+", "xn.le ke ie je je ie xn.xn.xn.xn.xn.xn.xn.g~ >+ ,+ R# ,+ R# ,+ ]= >+ W* Y+ ^$ Y+ UO F r2.5c xn.je IO.HO.HO.WD+WD+VG.~N+VD+je je dd M_ ^% e+ #'+ML$[i@3* NL$OL$R+.,$.3i.*6@@j@=(#pb@oh@)b@=q$s.@z9 Vv XI$/5@$X#t}@Ow#|)#HK$'p$v,$j)$ED@om+ew+`v+3~+X;+Lu$PL$QL$*b$*b$*1#0{$gD+~]+/V+9~+58+0~+RL$>:#3/#l8+B)$@4+6e@6e@oB#lc#fi+fi+WF#`J#GZ@gr+oB#W1#YN#ei+ @#ei+YN#fi+oq#lc#oq#lc#oq#lc#oq#oq#TR#X1#X1#;k+X1#TR# @#Wl+Mg+Mg+ @#YN#fi+fi+Xl+Xl+lc#(+@gi+dy+{/+1$@=m+=m+[]+-2+-2+Xg+ir+Xl+Xl+>k+$w+(G+69@_V+^V+$^>$,X#,X#,X#,X#,X#VY#VY#M`#ci#5@$Zn#Zn#5@$J`#~X#J`#6T#8V#0V#0V#8V#7V#J`#YL$5@$6T#aV#8V#6T#8V#aV#8V#6T#J`#/l#/l#J`#6T#/K#)2#)2#)2#)2#)2#)2#)2#)2#Dc#Dc#Dc##5#:X#/X#/X#R`#Lq#~5#+z#{E#^z#{E#;z#St#]z#]z#]z#]z#]z#]z#6w#6w#nT#nT#nT#nT#nT#nT#nT#nT#nT#nT#nT#nT#nT#Z`#Z`#st#[o#Tc#;z#]5#iT#_2#St#Tc#hT#_2#hT#_2#hT#:2#}o#|o#hT#H0#hT#6$yi$us$+K$+M$@M$#M$$M$%M$ss$ts$$2#&M$#2#1I#w'$#;$Ty#v.$D7#I`#>>$Ty#AB#BB#BB#CB#)X#'X#L`#L`#@K#|T#'|+%2+'|+.K#My#4t#*M$+L$=M$#L$%L$,c$!b$!b$)b$b0$c0$$u$$u$c0$b0$57$@K#UY#z0+)6+7q$-f+$3@GZ@jV@jc@Kx#G6@S6#:^#mb#mb#qg@qg@8V@8V@8V@8V@I@@I@@cB@cB@cB@x;@R)@w;@w;@w;@2T+2T+2T+T,@T,@7=@7=@5$@J #| @| @mZ@mZ@mZ@mZ@Xx$)I$$K$>L$>L$-M$;M$;M$>M$ K$!I$Ks$,M$'H$,H$%K$,L$'M$,b$M1#S[#lZ@U.@eX+[ @S[#,b$ *+5h#)M$!M$~M${M$-z$9~ 9~ }f }f Kv &E &E $4@tG tG tG tG ;E ;E ;E es es es es es es es es cP@s[@`:@`:@`:@`:@s[@cP@es cP@`:@s[@es $]A$r3#%#$L(#f}@A;$31@Sp$AM$(]+,/+BM$CM$DM$EM$-p$zL$IH$wI$CJ$BJ$JH$>G$Qi$!E$#F$0i@ye@xe@tB@tB@0i@ye@ye@we@ai@6m@<9@+ ,' Y+ L_ <| kC 4c 9c ri ke nf ie k:@UD+ke ke ke ke le HO.HO.HO.IO.ie ie ie ie 7c 7c L_ $+ du.b: i*.FB H&.$a ,} Ma+nq OM$PM$QM$ph@ph@s|@VZ ~#.50 Ui@RM$SM$FT#-[@C[#'(@l~$M.+TM$UM$VM$WM$,u+&g$iR+FM#`C#E2@_h$_h$XM$vG+Ri+gD+im+=-+w^@v^@*f+YM$<[+<[+8[+r:+B)$B)$@4+@4+$a@=g$ir+gi+(+@(+@k+ir+ir+ir+ir+ir+ir+ir+ir+ir+*k+ei+Xl+ei+*k+@_+&k+>k++_++_++_+Sl+Sl+Sl+Xg+ir+/6+/6+/6+/6+E:+E:+E:+cd+E:+$a@F:+U4#g0#a[+{f+~_+~_+cd+>k+=g$(+@F:+F:+F:+cd+cd+cd+~_+cd+$a@=g$F:+Vg+Vg+F:+F:+F:+]|+/+@/+@Nl+Nl+Nl+Nl+_V+_V+69@[T+B$+Zg+N0+od+!]+']+lZ+$5@.@#Q3#d!@X,@ZM$`M$f]@%S ZA _t X:@+<@`:@s[@N$5G$^m$Dj$_a$Ej$Ej$c9$c9$c9$b8$!l$!l$!l$WL$qZ@RQ@'K@fm$,T@,T@P)@P)@O)@O)@,B+|=@}=@)w+L)@ED+|=@|=@|=@|=@|=@|=@{k@{k@|R+|R+K,@K,@K,@K,@K,@K,@z@@1V+z@@|R+qr$,N$3k# N+eh#eh#uy#(t#Gt+nI+dr+[T+sD+~k+Tt+~k+sD+=m+sD+=m+s=@_k+qD+dy+Nl+gi+='@ir+.}#/+@.}#/+@lc#lc#6e@6e@df#|+>|+6[++2#'X#Z_$W_$W_$tT#tT#sT#+;$M`#0($di#DB#bi#bi##K##K#EB#EB#zf#Dc##5##5#J7#:X#8V#8V#8V#8V#8V#8V#8V#8V#aV#8V#8V#8V#6T#6T#~X#~X#+5#+5#+5#+5#+5#+5#+5#+5#MB$DR#DR#$DM$e($M3$U_$2q$]N$^N$/N$(N$_N$/$$c($ u$aV#67$:N$|+6[+5[+>|+>|+,|+'|+|T#Y3++K#+K#d0$7N$8N$8N$8N$8N$7N$d0$G2$d0$8N$8N$Y1#G2$Z%$,|+^>$^>$}T#)6+In$;f++}#WF#:G+jV@`k$9N$,_#Q6#>0$;0$a&@0&@4 @O)@O)@t<@P)@P)@3 @9G+ZK+s;@|V+|V+2T+Q,+,K@,K@,K@E@@E@@E@@E@@8e#8e#Qm#0N$rr$aN$ow$ow$rr$kF$kF$jF$bN$bN$%/$/H$/H$~J$WL$!l$b9$a9$cN$^m$Cj$Sj$09$Ej$]v#gb#dN$~g$7=@pi$Rs@@@#hB@`o$eN$fN$gN$bL#{c$!M EN w~$F'$u~$!8@c.#vR@vR@-! ds 7F Qv Qv Rx@I@fh$iN$jN$kN$!!@lN$z&@Od+.K@UJ@bZ@mN$nN$z+#J($oN$|L$1A#pN$UG#xJ$5M$qN$rN$Yr$sN$tN$uN$vN$wN$xN$yN$zN$AN$BN$CN$DN$EN$FN$GN$HN$IN$JN$KN$LN$MN$NN$ON$PN$QN$RN$SN$TN$UN$VN$WN$XN$YN$ZN$`N$ O$*-$OG#L$$l>$/}$G1$t8$l7$zo$Sp$.O$+O$-G$@O$#O$$O$%O$&O$*O$=O$-O$;O$>O$,O$'O$'O$)O$!O$!O$& $~O${O$]O$]O$^O$5k@1}@t~@[1@-]@_G+[G+[G+}G+|G+|G+}T+}T+_T+R0+Ob+G:+Kt++m+#m+tp+sp+lr+2Z+2Z+(|+=w+@k+-w+@k+fD+z@@FD+FD+FD+|R+|R+:&@:&@:&@#9@#9@<&@:&@|R+FD+fD+z@@v)+tD+v)+rr+oy+wD+sr+wD+5T+Il+0$@Z.@P,@Z.@L@@0$@:&@:c@-:#f0#hc#{/+{_+#4+M0+si+'k+Qn+Pb+d&@De@Pp+rW#/O$(O$_O$:O$ '> 8g.Yt.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.)> )> )> )> )> )> ", "sk oG.:j.m` oG.uk sk sk sk sk tk tk uk uk .h.kC x5 L_ ,' 8c 7c g~ kC ie ie HO.HO.HO.IO.XD+K6 HO.le le le le le le le ie ie ie ie ie ie ie 7c =+ X% u$ [| 23 1O$2O$*= 3O$M[@Y:#4O$QM$30@Vx@.6@zB$@~@5O$7L.6O$E$$Uv N&#={#N#$7O$8O$9O$0O$aO$bO$,a$J&+%E+Tr+5>@Rp+8!@7>@N^@ho@x@@O3+Si+im+&}@v^@w:+3[+YM$cO$8[+H#$B)$B)$@4+@4+$a@=g$Kb+Kb+{_+F:+k+YA+|&@}&@[]+%4+!k+lp+vb+{G+{G+^V+^V+$w+$w+:T+:T+[1@[1@[1@[1@/a@/a@/a@<1@hr+&k+@_+Fg+@_+&k+>k+ir++_++_++_++_++_++_++_+ei+Mg+TR#Vl+1=$Mg+Lg+ei+Xl+ei+ei++_+>k+Sl+Sl+Xg+ir+E:+ed+ed+ed+ed+B)$/6+/6+/6+E:+F:+]|+]|+F:+$a@cd+(6+#4+{_+mi+mi+{_+Kb+#4+(6+(6+n8+n8+(6+#4+Kb+{_+Vg+Vg+=g$F:+F:+]|+/+@/+@v&@v&@v&@v&@#%S aP@H~ +<@`:@`:@s[@H$*I$5F$%u$%u$5F$6F$jO$;N$>N$5G$^m$Dj$_a$Ej$a9$b9$b9$b9$b9$!l$!l$!l$WL$qZ@>p$,_$,_$,T@,T@P)@P)@t<@O)@K)@K)@!w+!w+)w+)w+|=@|=@|=@|=@|=@|=@{k@{k@|R+|R+K,@K,@K,@K,@K,@K,@FD+FD+FD+:&@Aq@Aq@7X+}R+7X+7X+(t#tI+/P+Gt+nI+:V+sD+~k+~k+~k+=m+=m+=m+=m+{/+_k+dy+dy+gi+gi+ir+ir+`J#.}#.}#.}#lc#lc#6e@6e@|+>|+>|++2#+2#)X#Z_$+ $rT#X4#m@$sT#7T#K`#0($0($X%$bi#bi##G##K#EB#EB#zf#Dc#L7#L7#L7#:X#`4#8V#8V#8V#8V#8V#8V#8V#aV#aV#aV#8V#8V#6T#6T#6T#{X#{X#{X#{X#{X#{X#/X#/X#DR#5#^5#S0#Y7#!5#Y7#^5#:I#r'$}w#D2$)M#Y`#_X#Qt#`y#HB#{O#nT#nt#Z`#{O#^K#nT#nt#nT#nT#nT#nT#nT#nT#nT#tt#]5#T0#a@$a@$a@$0@$0@$0@$E.$E.$E.$E.$X`#X`#.r#:2#H0#)z#)z#'z#Gc#Gc#,z#kO$,z#,z#*M#*M#*M#)N$)N$)N$*M#*M#*M#*M#;O#;O#;O#;O#WL#WL#A.$A.$A.$A.$lO$A.$ZL#[o#[o#[o#[o#[o#[o#[o#[o#[o#hT#hT#St#St#iT#iT#`L#TB#UB#TB#`L#`L#)6$vt#E2$L3$;M#M_$@Q#@Q#;M#=M#~z#Mt#Cw#Cw#mO$nO$oO$pO$vn$vn$:N$qO$DM$3|$rO$1q$sO$sO$]N$(N$2q$/$$e($yi$9T#67$tO$uO$vO$wO$xO$yO$zO$AO$BO$CO$DO$%2#U%$|@$E7#E7#1@$A)$~/$~/$~/$A)$Vy#@K#@K#|T#,|+>|+>|+6[+>|+>|+,|+,|+|T#|T#@K#@K#@G#yB#yB#pd$pd$yB#yB#@G#,|+@G#pd$pd$@K#,|+,|+,|+^>$Ty#}T#)6+.K#;f+W4@WF#bi@jV@2,$9N$EO$W<#>0$;0$P,@Z.@4 @4 @O)@O)@P)@P)@3 @lX+ZK+s;@|V+|V+2T+Q,+,K@,K@E@@E@@E@@E@@8e#8e#d9$!l$Ls$Ks$;J$;J$Js$Js$5($d8$jF$iF$bN$%/$FO$GO$~J$WL$WL$b9$b9$Dj$^m$Cj$K$+09$4($~l$HO$IO$,K@7=@} @;($t!$i)$JO$KO$LO$MO$NO$OO$=f$D&#w~$PO$QO$Fy$c.#c.#vR@-! ds 7F o$#Qv Rx@P$,P$'P$)P$!P$~P${P$]P$vb$^P$/P$(P$BZ#_P$:P$O$,O$'O$)O$)O$!O$!O$& $& $aP$bP$bP$YH@<9@It+l;@$w+Mn+69@^G+^G+}G+|G+|G+|G+_T+_T+_T+}]+lp+^d$py+}w+[w+St+kr+lp+/|+Ob+vr+.B+.B+.B+(P+Kl+|R+|R+|R+:&@:&@<&@<&@<&@#9@<&@<&@:&@|R+FD+fD+v)+v)+tD+uD+uD+rr+wD+wD+wD+Il+g~+K@@Z.@0&@Z.@4e@L@@H6@fh#-:#60#Pn#YA+F:+Kb+Ng+)k+wp+ h+dz@Kd$cP$^-@dP$eP$fP$I'@gP$hP$iP$jP$kP$W=# <@}C 'E 5<$lP$mP$Dt :|$:|$:|$2: nP$[y+'].8}.8}.{! {! 8' 8' 8' f!+Yt.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.)> )> )> )> )> )> ", "tk oG.:j.:j.uk sk !B sk sk sk tk tk uk uk .h.dd x5 L_ 6c 9c 7c g~ dd je je IO.HO.HO.HO.VG.IO.HO.le le le le le le le ie ie ie ie ie ie ie 7c i> v .. u$ @6>@EO#EO#&b$4m@lw+lR+gD+yP$zP$[9@*_+s0+YM$cO$8[+H#$r:+B)$E:+E:+$a@$a@Kb+Kb+Kb+F:+k+ZA+|&@}&@]_+-m+~k+!k+,k+{G+(G+^V+^V+hp+hp+:T+:T+1}@1}@/a@/a@0x@0x@:a@|}@jp+*k+*k+*k+*k+On+ei+Xl+*k+*k+*k+*k+*k+*k+*k+*k+Mg+1=$Vl+Vl+ @#Mg+ei+fi+ei+ei++_+>k+Sl+Sl+Xg+ir+6e@#k #gO$c_+1_$hO$$N$pz#pz#r##Yu$S_#Yu$Yu$%N$%N$&N$&N$%W#}0#^9$zx$-o$-o$*N$Ax$cw$Gx$Vy$Zz$Zz$Zz$/v$/v$*I$*I$5F$%u$%u$5F$6F$6F$>N$DP$5G$^m$Dj$Dj$a9$a9$ow$ow$ow$bq$~l$!l$!l$WL$qZ@>p$,_$,_$,T@,T@P)@P)@Q,@Q,@T##T##dB@dB@dB@!w+|=@|=@|=@|=@|=@|=@{k@{k@:&@:&@:x@:x@:x@:x@:x@:x@<&@|R+|R+:&@fh#fh#OK+ay+OK+OK+tI+tI+/P+/P+/P+eK@sD+~k+=m+=m+=m+=m+1$@1$@YA+YA+YA+dy+/+@(+@(+@(+@`J#`J#`J#.}#W1#lc#Pg+Pg+|+>|+>|++2#+2#tT#W_$+ $rT#X4#m@$X4#qT#K`#0($X%$X%$DB#bi##G##G#EB#EB#Dc#Dc#Fq#L7#L7##5#`4#8V#8V#8V#8V#8V#8V#8V#0V#0V#aV#aV#8V#8V#8V#8V#`4#`4#`4#`4#`4#`4#:X#:X#@5#@5#Fc#@o#@o#@o#%5#6l#^5#S0#Y7#Y7#^5#[w#:I#r'$}w#D2$)M#Y`#_X#Qt#`y#HB#^K#nT#Z`#Z`#{O#^K#{O#Z`#nT#nT#nT#nT#nT#nT#nT#tt#;z#/5#/5#/5#Tc#Tc#(2#(2#(2#(2#(2#_2#_2#:2#:2#:2#H0#$LP$MP$NP$sO$]N$OP$2q$f@$.;$yi$,6$,6$q1$PP$QP$RP$SP$TP$}N$UP$|+>|+,|+,|+|T#|T#@K#@K#@G#@G#yB#pd$pd$yB#@G#@G#,|+@K#yB#yB#@K#,|+,|+|T#Ty#Ty#z0+'6+My#-l#W4@GZ@bi@jV@2,$Y>$XP$W<#Q6#;0$P,@Z.@ny+4 @4 @4 @>B+>B+9G+lX+ZK+Q)@|V+2T+2T+Q,+,K@,K@E@@E@@E@@E@@8e#8e#5($d9$!I$Ls$Js$Js$;u$;u$5($d8$iF$iF$bN$bN$FO$GO$)I$lF$WL$b8$b9$Dj$Dj$Cj$}0$09$4($!l$YP$K #,K@3G+[ @;($K1#/{#O@@ZP$`P$ Q$.Q$+Q$@Q$u)$w~$PO$#Q$NA$c.#c.#vR@-! ds 7F o$#Qv Rx@<+bp#x #1%$r3#*Q$=Q$-Q$;Q$>Q$A|#|;$,Q$>#$.J#AZ#OO#'Q$)Q$!Q$~Q$u^${Q$]Q$^Q$/Q$(Q$(Q$_Q$5^$:Q$[+V,@vQ$0%$wQ$oF#xQ$yQ$zQ$AQ$BQ$CQ$XA :|@TH `r 4=$)o DQ$qm#;B$;B$gW.UB@e# D~.8}.7}.7}.be+be+%.@%.@%.@ZW+Yt.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.)> )> )> )> )> )> ", "uk oG.oG.uk tk !B lC tk tk tk tk tk tk tk $~.g~ x5 L_ L_ 7c 7c g~ g~ J6 xn.IO.HO.Qw.Qw.WD+HO.IO.ie ie ie le le le le ie ie ie ie ie ie ie 7c T$ >% ,+ @. p+ s2 ~s 9:.8_ ~f NH |E$D2.9n$EQ$|0@Y:#zB$VZ fg 6L.FQ$GQ$d_#O#$!f#Uj$HQ$IQ$JQ$KQ$LQ$OF@9}@9!@8!@u$@U~@MQ$U0@#d$o<@jR+lR+gD+ei$yP$&/+*_+s0+YM$<[+<[+q:+r:+dd+E:+E:+cd+$a@#4+Kb+Kb+=g$k+Sl+Sl+Xg+ir+h0#df##OM.n{ ~~#.<@`:@s[@`:@s[@N$DP$5G$^m$Dj$Dj$a9$cN$RQ$RQ$SQ$ow$0N$~l$!l$lF$qZ@>p$,_$,_$,T@,T@P)@P)@5o@Q,@S##S##sD@sD@dB@dB@|=@|=@|=@|=@|=@|=@{k@{k@:&@:&@:x@:x@:x@:x@:x@:x@:&@|R+FD+|R+fh#fh# N+}R+}R+}R+tI+tI+/P+/P+`M+u=@sD+~k+=m+=m+=m+=m+1$@1$@YA+YA+YA+dy+/+@/+@(+@(+@`J#`J#`J#.}#W1#W1#Pg+Pg+Nn#f+z7#z7#Jy#Jy#u.$u.$xB#+G#Y3+'|+>|+>|+'X#'X#'X#L`#tT#Z_$Z_$+2#'X#,|+,|+>|+>|+>|++2#+2#tT#W_$+ $rT#X4#m@$X4#qT#VY#X%$X%$X%$DB#DB##G##G#Af#Af#Dc#Dc#Fq#Fq#L7##5#`4#8V#8V#8V#8V#8V#8V#8V#0V#0V#0V#aV#aV#8V#8V#8V#.5#.5#.5#.5#.5#.5#Dc#Dc#)2#)2#@o#@o#%5#%5#%5#6l#^5#S0#^5#^5#[w#[w#:I#:I#}w#D2$)M#Y`#_X#Qt#`y#HB#^K#nT#Z`#nT#^K#^K#{O#Z`#{O#{O#{O#{O#{O#{O#{O#6w#]z#/5#/5#Tc#Tc#(2#(2#(2#(2#(2#_2#_2#:2#:2#gV#gV#hT#fd$|o#fd$hT#H0#}o#bh$}o#fd$|o#;O#|o#bh$WL#bh$kO$kO$kO$kO$gd$gd$gd$gd$}o#}o#$O#$O#$O#$O#TQ$$O#ZL#[o#[o#[o#[o#[o#[o#[o#[o#[o#hT#hT#St#St#iT#iT#`L#TB#UB#TB#ZL#ZL#!6$ut##Q#K_$M_$;M#M_$M_$-M#1|$~z#Nt#3m$3m$UQ$VQ$HP$WQ$}m$+K$XQ$JP$JP$c,$YQ$ZQ$NP$]N$^N$`Q$V_$f@$d($xn$vn$xn$q1$tO$ R$.R$SP$+R$wO$$>|+,|+,|+|T#|T#@K#@K#>|+>|+,|+,|+|T#|T#@K#@K#@K#@G#yB#yB#yB#yB#@G#@K#,|+@K#yB#@G#|T#,|+|T#@G#5V#5V#)E#'6+My#-l#W4@GZ@bi@Q;@Hj$Y>$XP$W<#Q6#v9#L@@K@@ny+ny+4 @4 @0G+>B+lX+lX+ZK+ZK+2T+2T+2T+2T+,K@,K@E@@E@@E@@E@@8e#8e#d8$5($)H$!I$;u$;u$im$im$d8$d8$iF$I$+/'$bN$FO$FO$-L$)I$lF$!l$b8$a9$Dj$-c$}0$09$bv$c9$8e#4Z+5$@[V+BI+:/#,b$_{#*1@#R$=1@ I$2j+$R$$|$|F${@$YI$%R$QO$c.#c.#vR@-! -! 7F Qv Qv .~ i$lq@-R$rO@5X@;R$>R$1b#Ip$+-$,R$'R$5x#QK#)R$XX#!R$~R${R$]R$^R$du$J;#/R$b'#b'#(R$_R$:R$O$kR$lR$lR$mR$nR$oR$qQ$;O$5P$xV#rQ$3@De@>[+5]+>(@rc@rR$9!+sR$tR$uR$vR$wR$9q#xR$=8@[|@qG hp E5 g[@Lj#4L.yR$>l gM+zR$#a+P_.T@ z<.z<.8g.be+%.@0@@0@@M8@Yt.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.)> )> )> )> )> )> ", "uk uk uk tk sk !B lC tk tk tk tk tk tk tk $~.g~ >' >' L_ 7c E7 E7 g~ J6 xn.IO.HO.Qw.Qw.WD+HO.VD+je je ie ie le le ke ie ie ie ie ie ie ie ie &) kC g~ !% O _+ AR$8v@PY 92.S< aw@oy@BR$CA@&m$B8@:0@CR$D3 BU+zJ.Tk@DR$${#Vj$A[#&K$.++ER$s{$ds#d^#{3@,u+a!@EO#FR$GR$*g$]d$PO@#}@>-+@1@bi+M,+d~+t0+&|+)_+!M#2/#q:+r:+dd+/6+~_+cd+cd+#4+#4+Kb+=g$6e@ed+B)$B)$Nn#k+Sl+Sl+Xg+ir+h0#h0#Pg+6e@E:+/6+dd+dd+D:+dd+/6+@4+6e@6e@Pg+F:+$a@=g$]|+g0#]|+=g$~_+ _+~_+~_+m8+m8+~_+cd+$a@$a@0[+0[+@4+6e@6e@6e@lc#lc#_1@_1@gr+gr+1}@[1@[1@N2@by+$4+gi+Xg+Rl+xb+)]+N@+'v@R1+rc@=1@aE$o=$@wb +<@s[@s[@s[@s[@es }f 9~ 9~ p$'K@'K@,T@,T@ZK+ZK+r;@R,@S##S##iy+iy+dB@dB@|=@|=@|=@|=@|=@|=@{k@{k@<&@<&@fh#fh#fh#fh#fh#fh#|R+fD+z@@fD+:x@Aq@3k#eh#}R+}R+tI+tI+/P+/P+`M+u=@sD+=m+=m+=m+1$@1$@1$@1$@ZA+ZA+3&@3&@3&@/+@W1#W1#}t#}t#-E#-E#oB#W1#:i#:i#-f+;f+W4#>f+ML#ML#Jy#Jy#u.$%w#+G#+K#Y3+'|+>|+6[+'X#'X#'X#L`#tT#Z_$Z_$+2#'X#,|+,|+>|+>|+>|++2#+2#Z_$@2#|X#rT#X4#7d$m@$M`#!X#^$$X%$X%$DB#DB#yf#yf#_l#_l#Dc#Dc#Fq#Fq#Fq#Dc#`4#8V#8V#8V#8V#8V#8V#8V#0V#0V#aV#aV#8V#8V#8V#6T#.5#.5#.5#.5#.5#.5#Dc#Dc#Bf#Bf#%5#%5#@o#@o#@o#>5#^5#S0#[w#[w#/2#/2#:I#:I#}w#D2$)M#Y`#_X#Qt#`y#HB#Rt#{O#nT#nT#^K#Rt#^K#nT#{O#{O#{O#{O#{O#{O#{O#6w#]z#/5#Tc#Tc#(2#(2#_2#_2#_2#_2#_2#:2#:2#gV#gV#gV#[o#|o#A.$WL#$O#hT#ZL#|o#$O#}o#fV#|o#fV#WL#A.$WL#gd$kO$kO$kO$gd$gd$gd$gd$}o#}o#$O#$O#$O#$O#TQ$$O#ZL#[o#[o#[o#[o#[o#[o#[o#[o#[o#hT#hT#St#St#iT#iT#`L#TB#UB#`L#$O#$O#]6$^6$#Q#K_$;M#;M#M_$;M#-M#1|$~z#Nt#3m$VL#Mx$FP$VQ$JR$}m$}m$KR$XQ$XQ$XQ$LR$MR$]N$NR$OR$ZQ$LP$e($,6$xn$wn$ss$4|$tO$PR$TP$QR$SP$.R$vO$RR$T[$Y_$d<$+;$+;$VY#X%$X%$W4$Yn#9,$Yn#W4$#;$>|+>|+,|+|T#@K#@K#@G#>|+>|+,|+,|+|T#|T#@K#@K#@K#@K#@G#yB#yB#@G#@K#@K#,|+@K#@G#@K#,|+,|+@K#yB#UY#Vy#wB#,6+My#-l#W4@GZ@<9@Q;@Hj$nD#6N#SR$P3#v9#P,@Z.@ny+4 @4 @O)@>B+>B+lX+lX+lX+ZK+Q,+2T+2T+|V+,K@,K@E@@E@@E@@E@@8e#8e#d8$5($)H$!I$;u$;u$im$im$d8$iF$/'$/'$TR$TR$UR$FO$GO$/H$lF$d9$b8$Ej$Dj$Dj$VR$09$J$+47$iX+fX+4G+AI+BI+:/#L1#7o@yR#$N@tc@p>#WR$XR$YR$xd$d'$~@$PO$i!$c.#c.#^Y@6G@-! 7F Qv Qv 2r@+u_+K=@{:@ S$.S$+S$l6$@S$pO@#S$>R$1b#&-$P*$h&$$S$7S#OM#%S$&S$L3#*S$*S$=S$-S$TC$;S$>S$,S$,S$/H#IR+'S$)S$!S$~S${S$]S$^S$/S$(S$_S$:S$O$am$am$nQ$nR$6P$8S$;O$HH$9S$rQ$ )> )> )> )> )> ", "tk tk sk sk sk sk sk uk uk uk tk tk sk sk N6 E7 >' >' >' E7 E7 E7 E7 je je IO.HO.HO.HO.VG.IO.UD+xn.xn.je ie le le ke ie ie ie ie ie ie ie ie L/.J6 je 0' }# T p# eo c:@F`.C/@iS$;f =a$=a$CA@48@I8#S7 jS${8 9O.T5@Dt GT#O#$u}@z[#kS$lS$DA$i^#*N+q8+z~@aB+o(@U0@*g$=W#Z+#qX@R&+bi+!a$!a$bi+d~+mS$t0+RL$!M#2/#1/#D:+D:+~_+~_+~_+cd+(6+#4+#4+$a@Pg+ed+r:+r:+ed+Nn#Nn#ed+Nn#k+Sl+Sl+Xg+Xg+F:+Pg+Pg+6e@@4+E:+E:+/6+dd+dd+/6+E:+E:+@4+6e@6e@E:+cd+$a@$a@$a@cd+~_+m8+~_+m8+m8+m8+m8+~_+cd+$a@+4++4+@4+@4+6e@6e@fi+lc#_1@gr+gr+hr+[1@t~@t~@Ol+Rl+Lb+Xg+Sl+di+yb+t)+U&+De@nS$^k@Ub+aE$t[#Ca+m>@e7#`:@cP@cP@s[@s[@es }f 9~ 9~ 9~ p$'K@'K@,T@,T@ZK+ZK+R,@R,@T##T##~w+~w+dB@!w+|=@|=@|=@|=@|=@|=@{k@{k@<&@<&@fh#fh#fh#fh#fh#fh#FD+z@@1V+fD+:x@qr$tS$3k#OK+OK+tI+tI+/P+/P+/P+jc@sD+=m+=m+=m+1$@1$@1$@1$@ZA+ZA+2&@3&@3&@/+@W1#W1#}t#}t#[t#-E#oB#W1#:i#:i#;f+;f+W4#W4#LL#LL#LL#LL#My#My#+K#Y3+Y3+'|+>|+>|+1T#1T#1T#'X#)X#tT#tT#L`#'X#,|+,|+>|+>|+>|++2#+2#W_$@2#|X#rT#X4#7d$m@$ci#!X#^$$^$$X%$DB#DB#EB#EB#_l#_l##5#Dc#Fq#Fq#K7#zf#`4#8V#8V#8V#8V#8V#8V#8V#aV#8V#8V#8V#6T#6T#~X#~X#.5#.5#.5#.5#.5#.5#Dc#Dc#Bf#Bf#@o#@o#@o#Fc#Fc#Ic#Y7#S0#[w#/2#`P#`P#:I#:I#}w#D2$)M#Y`#_X#Qt#`y#HB#Rt#{O#nT#{O#Rt#Rt#^K#nT#^K#^K#^K#^K#^K#^K#^K#hV#iT#Tc#Tc#(2#(2#_2#_2#_2#_2#_2#:2#:2#gV#gV#gV#<2#ZL#fV#!N$!N$fV#ZL#ZL#$O#$O#$O#fV#fV#fV#A.$A.$WL#bh$)N$)N$)N$bh$bh$bh$bh$|o#|o#fV#fV#fV#fV#EP$fV#ZL#[o#[o#[o#[o#[o#[o#[o#[o#[o#hT#hT#St#St#iT#iT#`L#TB#UB#`L#$O#fV#~6$!6$#Q#P_$N_$N_$;M#M_$;M#R[$ch$3m$3m$3m$Mx$Nx$UQ$UQ$+K$+K$XQ$XQ$XQ$XQ$uS$uS$vS$MR$wS$xS$c,$:N$us$yS$zS$yS$4|$AS$+R$BS$CS$DS$ES$}N$FS$EM$Y_$d<$@2#+;$VY#VY#X%$X%$DB#Yn#/O#X%$,X#>|+,|+,|+|T#|T#@K#@K#>|+>|+,|+,|+|T#|T#@K#@K#|T#@K#@G#@G#@G#@G#@K#|T#,|+@K#@G#@K#,|+,|+@G#pd$Vy#Vy#Uy#f8+%w#-l#W4@GZ@<9@[G+vi$nD#6N#SR$P3#_^#a&@0&@4 @O)@O)@t<@P)@P)@ZK+ZK+lX+lX+R$1b#C|#P*$OS$PS$%S$QS$RS$SS$TS$US$aQ$*0$VS$WS$XS$YS$ZS$o/$`S$ T$.T$+T$@T$#T$$T$%T$&T$*T$=T$-T$;T$>T$,T$'T$c4$#1$)T$!T$~T${T$ym#X]#]T$fQ$^T$/T$(T$_T$i6$g6$.4$:T$7c$R)$Q)$O$[T$0m$kR$mQ$;O$;O$;O$;O$9S$xV#*@&1@.h+X_@,(@}T$|T$1T$2T$3T$YZ@4T$5T$6T$7T$8T$/Y@}u _,@hp $S t'+cj ;B$=I+cG /$ DR z<.8}.7}.7}.be+be+%.@%.@%.@ZW+Yt.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.)> )> )> )> )> )> ", "sk !B !B sk sk tk tk uk uk uk tk tk sk sk N6 7c >' >' x5 g~ E7 E7 7c ie ie HO.HO.HO.IO.XD+K6 UD+J6 xn.je ie le le ke ie ie ie ie ie ie ie IO.z^.9T$mI.l` M_ }# _+ ad Gv+0T$y..aT$bT$cT$'8$~9$D2.B8@2u@cn 8Y A7 w Yb+GQ$j1$8x$NQ$Fm$@B$O:+M:+mo@GD+f1@z~@sX@N^@dT$UJ@eT$wb#8H#)a$fT$}G$gT$[O#we$mS$mS$hT$68+!_+ _+ _+~_+~_+~_+~_+cd+cd+$a@$a@Pg+E:+D:+D:+/6+@4+@4+E:+6e@6e@6e@Pg+Pg+h0#h0#h0#B)$ed+Nn#k+Sl+Sl+Xg+Xg+=g$=g$=g$=g$=g$=g$@4+@4+E:+E:+B)$B)$B)$ed+ed+@4+/6+dd+D:+D:+D:+dd+/6+E:+dd+dd+D:+D:+dd+/6+E:+@4+.4+.4+ed+Nn#Nn#G+(e@|3@|f+ I$iT$tc+;1+8~ `:@cP@cP@s[@s[@es 9~ 9~ 9~ 9~ 9~ b$8F$Cj$^m$Dj$Dj$^m$sS$sS$b9$b9$b9$b9$!l$!l$!l$WL$pZ@qZ@AM@AM@!K@!K@Q,+Q,+ZK+lX+#a@#a@yD+yD+xD+xD+!w+!w+!w+!w+!w+!w+@B+@B+>w+>w++B++B++B++B++B++B+;w+@k+xp+xp+.B+:c@Y+$-:#o;@o;@p;@eK@jc@}G+^G+^G+sD+=m+1$@1$@1$@1$@ZA+ZA+By#By#2&@2&@oB#oB#oB#W1#yy#yy#q=$q=$Tn#Tn#,l#hf# ;$ ;$e8+e8+C7#C7#C7#C7#X3+X3+Y3+Y3+Y3+'|+,|+,|+AB#AB#AB#1T#CB#)X#)X#'X#'X#,|+,|+>|+>|+>|++2#+2#W_$d<$|X#+ $m@$7d$7d$ci#Xy#^$$^$$^$$DB#di#EB#EB#/K#_l##5##5#Fq#K7#K7#zf#`4#8V#8V#8V#8V#8V#8V#8V#6T#6T#6T#~X#~X#J`#J`#J`#7V#7V#7V#7V#7V#7V##5##5#)2#)2#@o#Fc#&5#&5#&5#Sc#Y7#S0#/2#`P#*8#`P#:I#:I#}w#D2$)M#Y`#_X#Qt#`y#HB#]K#^K#nT#{O#Rt#]K#^K#{O#^K#^K#^K#^K#^K#^K#^K#hV#iT#iT#St#St#hT#hT#hT#hT#[o#[o#[o#}o#}o#}o#|o#|o#~6$mT$nT$nT${6$~6$~6$`4$`4$`4${6${6${6$mT$mT$oT$;O#*M#*M#*M#;O#;O#;O#;O#WL#WL#A.$A.$A.$A.$lO$A.$ZL#[o#[o#[o#[o#[o#[o#[o#[o#[o#hT#hT#St#St#iT#iT#`L#TB#UB#`L#fV#fV#`4$]6$KR#E2$-M#-M#;M#M_$M_$]K#*G#2m$Ot#3w#~z#~z#ch$Lx$|m$|m$pT$pT$pT$pT$qT$qT$MR$wS$rT$sT$[N$tT$X#,|+,|+,|+|T#|T#|T#|T#>|+>|+,|+,|+|T#|T#@K#@K#1T#AB#AB#zB#zB#AB#AB#1T#'X#AB#AB#1T#'X#'X#zB#AT$Ry#Ry#Uy#f8+%w#-l#W4@GZ@ic@[G+vi$nD#6N#i-$P3#_^#=9@a=@t<@t<@Q,@Q,@r;@r;@Q)@ZK+lX+9G++KG+4N+Zu@8u$.j$Hw$Iw$t|$3^$D##NS$>Q$C|#P*$OS$-h#JT$KT$LT$MT$TS$NT$OT$aR$|D#=_$PT$QT$RT$ST$TT$UT$VT$WT$XT$YT$ZT$`T$ U$.U$+U$@U$#U$QT$$U$%U$&U$*U$=U$-U$;U$>U$Y2$@-$,U$'U$^T$)U$!U$~U${U$]U$^U$fg$)o$Q)$Tp$yo$O$;O$CJ$CJ$/U$/U$BJ$EJ$Qi$!E$!E$!E$fc@fc@}9@|9@|9@[+W_@;9@d!@cD#T]+(U$(E$_U$:U$ )> )> )> )> )> ", "!B lC !B !B sk uk uk oG.uk uk tk tk sk sk U5 7c >' >' x5 g~ E7 E7 7c le le Qw.Qw.HO.IO.UG.UD+R5 J6 J6 xn.ie le le ke ie ie ie ie ie ie ie IO.z^.Y9#4U$-H.o} >% W Ju+`* hA+5U$6U$7U$cT$8U$9U$0d@:Q@0U$QY@}~ EQ+4,@{<$GQ$aU$z2$dX#,q$4F$P]+A'#RS#6k#ce#sy+,a$V~@bU$QX#kM@cU$dU$Sb$Sb$}G$gT$4E$*d$we$mS$!/+bd+!_+ _+ _+m8+~_+~_+~_+cd+cd+$a@$a@Pg+E:+D:+D:+/6+@4+@4+E:+6e@6e@Pg+Pg+Pg+h0#h0#h0#B)$ed+Nn#k+Sl+Sl+Xg+Xg+#4+$a@=g$=g$=g$=g$6e@Pg+@4+E:+ed+B)$B)$B)$B)$ed+dd+D:+68+hT$hT$D:+E:+6e@dd+dd+D:+D:+dd+/6+E:+E:+.4+.4+ed+Nn#Nn#Nn#YN#YN#:1@:1@<1@|}@X4@(a@u^@2}@Fg+m8+~_+m8+!_+o:+&f+Z}+>G+(e@TF@+B$SH#J2$eU$;1+x`#s[@es es s[@s[@es 9~ }f 9~ 9~ 9~ w+>w++B++B++B++B++B++B+gy+up+=w+=w+fy+#k+o;@VH@-:#-:#oe#p;@}G+^G+[T+s=@=m+=m+1$@1$@1$@1$@ZA+ZA+By#By#2&@2&@oB#oB#oB#oB#yy#yy#q=$q=$Tn#Tn#,l#,l#Ly# ;$e8+>6+gw$gw$F_$F_$%2+%2+'|+'|+Y3+Y3+|T#|T#zB#zB#zB#AB#BB#CB#CB#1T#'X#,|+,|+>|+>|+>|++2#+2#W_$d<$|X#+ $m@$7d$7d$ci#Xy#s=$^$$^$$DB#di#EB#EB#/K#/K##5##5#Fq#K7#K7#zf#`4#8V#8V#8V#8V#8V#8V#8V#~X#~X#~X#J`#J`#/l#/l#/l#`4#`4#`4#`4#`4#`4#:X#:X#)2#@5#Fc#&5#&5#Df#Df#]}#Y7#S0#/2#*8#*8#*8#r'$:I#}w#D2$)M#Y`#_X#Qt#`y#HB#]K#^K#nT#{O#Rt#]K#Rt#{O#^K#^K#^K#^K#^K#^K#^K#^K#hV#iT#St#St#hT#hT#hT#[o#[o#[o#[o#}o#}o#|o#|o#|o#`4$mT$iU$nT$mT$~6$~6$~6$`4$`4${6${6${6$mT$mT$oT$fd$,z#,z#,z#fd$fd$fd$fd$=G#=G#!N$!N$!N$!N$~N$!N$ZL#[o#[o#[o#[o#[o#[o#[o#[o#[o#hT#hT#St#St#iT#iT#`L#TB#UB#`L#fV#A.$`4$]6$K_$L3$-M#-M#;M#L_$L_$Rt#R`#DR#!z#{N$jU$jU$~z#ch$$l$$l$kU$kU$kU$pT$qT$qT$lU$mU$nU$oU$pU$wn$fr$fr$qU$CO$rU$sU$tU$uU$vU$xT$wU$xU$wO$CM$3X#9X#+ $|X#sT#M`#J`#J`#EB#EB#EB#di#1T#|T#|T#|T#,|+,|+,|+,|+>|+>|+,|+,|+|T#|T#@K#@K#1T#1T#AB#zB#zB#AB#1T#1T#'X#1T#AB#1T#L`#'X#)c$yU$7t#7t#Uy#f8+%w#-l#W4@GZ@ic@[G+vi$nD#6N#i-$Y|#_^#b=@qt$Q,@Q,@5o@5o@zU$zU$Q)@ZK+lX+9G+P s[@e7#9_$ ^+FU$ZJ$GU$HU$IU$JU$DS#db#KU$7f$LU$MU$t|$[]$v #x+#iK$A|#P*$OS$NU$d+$OU$KT$LT$PU$QU$TS$OT$Hf$RU$:2$Ug$SU$T&@TU$UU$VU$WU$XU$YU$ZU$`U$ V$.V$+V$@V$#V$$V$%V$&V$*V$=V$-V$mB$;V$>V$JT$j&$,V$'V$)V$!V$~V${V$]V$^V$^U$/V$U'$zo$4c$ Yt.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.8}.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.)> )> )> )> )> )> ", "sk sk sk sk sk sk sk !B tk :j.m` m` :j.tk U5 E7 >' L_ L_ 7c 9c 9c 9c J6 xn.IO.HO.HO.IO.UG.UD+HO.le le ie ie ie ie ie ie ie ie je je xn.xn.VD+8V$9V$!K.mI.ke ,' . p# 0V$aV$jC$bV$_r$Lb$cV$=a$[##i`@58@e%#(<@UM..x J5 Dt :|$j1$GB$dV$%/#k>#>9@Ms$/'$Hq@*5@l}@eV$p4$fV$ZJ@m=#gV$hV$Sb$$H$iV$jV$5E$kV$lV$&d$bD$o:+:]+bD$!i$>.$!/+!_+cd+=g$$a@m8+6e@6e@6e@6e@6e@6e@6e@6e@Pg+Pg+Pg+Pg+Pg+Pg+Pg+Pg++T.+bw+mV$tm#f0$h9$nV$[/$GT s[@es ]$r##pz#o]+eN$eN$C~$C~$`J$!Z#TF#S_#Yu$&J$UL$%N$&N$eN$rV$rV$zx$zx$IR$IR$*N$Ax$cw$oz#oz#Gx$Gx$Vy$/v$/v$*I$CO#%u$%u$%u$6F$-N$sV$>N$8F$Dj$@d$@d$Dj$sS$tV$SQ$ow$ow$ow$0N$0N$~l$hm$BM@XK+1 @V.@)K@,K@S,@u;@s;@s;@W{@ky+&B+&B+%B+iy+pp+mr+aX+np+rp+rp+mp+Xn+uV$uV$vV$ew$ew$wV$wV$wV$ L+ L+tp+tp+~i@~i@xV$xV$yV$zV$f0#p=$v=@Pn#4=@pq#V4@V4@ZA+ZA+ZA+YA+3&@3&@W1#W1#W1#W1#Ey#Ey#Ey#Ey#q=$S%$+}#+}#rq#>$8,$%2+%2+Y3+Y3++K#+G#@G#@G#1T#1T#'X#L`#Z_$Z_$tT#L`#1T#|T#|T#|T#|T#|T#1T#1T#X_$d<$rT#m@$AV$AV$7d$ci#&2#=2#0($X%$bi#bi#yf#EB#Af#Af#Dc#Dc#Fq#Fq#Fq#Dc#G7#J`#~X#6T#6T#6T#6T#~X#8V#8V#8V#8V#8V#8V#8V#8V#`4#`4#{X#^X#^X#{X#:X#:X#@5#)2#@o#@o#@o#Fc#&5#Sc#[w#BV$[w#[w#[w#[w#^E#^E#}w#}w#}w#}w#_X#_X#_X#_X#{O#{O#{O#{O#{O#{O#{O#{O#{O#{O#^K#^K#Rt#Rt#Rt#]K#6w#jT# r#`q#jT#hV#`q#p1$ r# r# r#p1$p1$o1$o1$o1$=M#=M#=M#=M#=M#=M#=M#=M#R[$R[$R[$R[$R[$R[$R[$p1$|+@G#@G#@K#@K#@K#|T#|T#|T#1T#CB#CB#/b$ZV$ZV$/b$CB#CB#CB#CB#BB#BB#BB#`_$zB#Ry#Ry#Uy#f8+%w#-l#W4@GZ@<9@_V+0s#4v#6N#W<#>0$v9#*w$Ku$`V$ W$t<@t<@R,@zU$R1#R1#R1#t;@S,@|V+|V+|V+[H#[H#J #J #J #J #Xx$Xx$!l$~l$Ks$AU$;J$;J$;J$Ks$WL$bN$.W$Hq@^t#W~$!_$+W$_^$-L$~J$hm$~l$b9$Ej$Ej$@W$nw$;u$c9$hX+CI+R,+TK+[V+[V+}{#}{#pw$37$#W$$W$X@+8R+IS$DU$%W$&W$d'$9~ Kv PC Fu Fu ds ds mI@mI@es es es es es W$,W$wv$'W$)W$t|$1b$HQ@v #!W$Hc$4V@*-$b9#~W${W${e#qI$]W$^W$/W$]#$(W$gG$t}$_W$:W$ Yt.i~ ,v.,v.i~ Yt.)> KB ZY ,v.i~ Yt.)> ", "sk sk sk sk sk sk sk lC !B sk uk uk sk !B $5 E7 >' >' L_ 7c 9c 9c 9c J6 xn.IO.HO.HO.IO.UG.UD+IO.ie ie ie ie le le le ie ie ie je je je xn.RG.9V$9V$!K.mI.ke ,' . l@ p@ B<@zW$AW$fD.6i$BW$CW$DW$0d@|b@_p$EW$6o pP$BU+zJ.Vv j1$FW$GW$AV#O_#Us@HW$#/$T5+;[#vZ#IW$uf+YE#[]@WJ@_&#JW$KW$%H$#H$LW$.$!/+!_+cd+=g$$a@~_+6e@6e@6e@6e@6e@6e@6e@6e@Pg+Pg+Pg+Pg+Pg+Pg+Pg+Pg+f+QL#H#$H#$`-$;f+Vl+Vl+em$#}#,.$yT#;:@|1@|1@]]+r:+9[+^6+^6+^6+9[+!i$8d+l0+R^@#N@q'@NW$Q}$97$[/$FT `:@cP@]$UL$pz#o]+o]+eN$eN$C~$`J$`J$%J$4F$S_#Yu$&J$UL$%N$&N$eN$,]$,]$UH#UH#rS$IR$*N$kn$^v$Gx$Gx$Gx$Vy$Vy${m${m$*I$CO#%u$%u$%u$6F$jO$sV$>N$8F$Dj$_a$_a$Dj$sS$tV$ow$ow$bq$bq$~l$~l$~l$!l$iX+5Z+V.@AM@)K@)K@S,@S,@s;@s;@W{@ky+&B+&B+&B+%B+nr+pp+aX+np+np+np+Xn+Lt+SW$SW$ew$wV$wV$~i@~i@~i@ L+ L+tp+tp+~i@~i@xV$xV$xV$`n+60#]/+v=@Pn#4=@pq#V4@V4@ZA+ZA+ZA+YA+3&@3&@W1#W1#W1#W1#Ey#Ey#Ey#Ey#q=$S%$+}#+}#rq#>$%2+X3+Y3+Y3++K#+G#@G#@G#1T#1T#'X#L`#Z_$Z_$tT#L`#'X#,|+,|+,|+,|+,|+'X#'X#@2#@2#rT#m@$TW$TW$m@$qT#&2#=2#0($X%$bi#bi#yf#EB#Af#Af#Dc#Dc#Fq#Fq#Fq#Dc#G7#J`#~X#6T#6T#6T#6T#~X#8V#8V#8V#8V#8V#8V#8V#8V#7V#`4#`4#{X#{X#`4#:X##5#)2#)2#%5#%5#@o#Fc#&5#]2#^5#BV$[w#/2#/2#[w#^E#J0#}w#}w#}w#}w#_X#_X#_X#_X#{O#{O#{O#{O#{O#{O#{O#{O#{O#{O#{O#^K#^K#^K#Rt#Rt#6w#jT# r#`q#jT#jT#`q#p1$p1$p1$p1$o1$o1$oT$oT$oT$hw$tn$hw$#p$1|$#p$1|$sn$=M#sn$=M#sn$=M#sn$=M#sn$Ft#,z#*M#*M#;O#;O#fd$I$'X#|T#@K#@G#@G#@K#|T#,|+@G#@G#@G#@K#@K#|T#|T#1T#`_$BB#BB#`_$>X$/b$CB#tT#CB#CB#CB#BB#BB#BB#`_$`_$,/$Ry#Uy#f8+%w#-l#W4@GZ@7k@[G+>'$XA#6N#,_#Q6#v9#b=@qt$ W$5o@t<@O)@P)@r;@t;@t;@t;@s;@|V+2T+2T+2T+,K@,K@E@@E@@E@@E@@8e#8e#!l$~l$Ks$AU$;J$;J$;J$Ks$hm$bN$=n#Hq@^t#W~$!_$+W$)_$_^$-L$~J$WL$!l$c9$,p$Is$,H$;u$c9$hX+BO@]-+AI+[V+[V+BM@BM@bN$bN$$/$YR# l#-a$,X$'X$EU$XR$-z$}f Kv PC Du Fu ds .~ ,M 'M es es es es es es es es cP@cP@cP@cP@cP@cP@cP@cP@cP@cP@cP@`:@Z:@.<@`:@cP@s[@s[@s[@cP@cP@cP@es ;E &$$9s UH Y~#;S ;S m$#}|@`:@,8 Lf ]L$h,${q$)X$!X$FP+]'+0=# S$~X$Gw${X$]X$t|$[]$HQ@v #!W$^X$/X$+-$xZ#(X$(X$R$$_X$:X$+z)+X $e_+uX$vX$K-+wX$xX$yX$]v ,c OT@6C#kt@|r@zX$DV#u! _t il ZZ O2+'[ %m.B^ @| ;; 51.wY+z<.z<.z<.z<.8g.8g.7g.7g.7g.'> i~ 7}.7}.7}.7}.7}.7}.7}.8}.8}.8}.8}.8}.8}.8}.8}.)> Yt.i~ ,v.,v.i~ Yt.)> ZY ,v.,v.i~ Yt.)> ", "sk sk sk sk sk sk sk sk sk sk sk sk sk sk N6 g~ >' >' >' 7c 7c 9c 9c xn.je K6 IO.IO.K6 XD+VD+VD+je je ie le le ke ke le le ie ie je je je RG.;4#A<+;4#AX$:j.!1.W+ l@ ]Z+lA+iA+Lg.N}$U:$BX$CX$Ld@DX$EX$0n$ s@6o 8Y ef Ay 4k+cI#FW$FX$QH#AV#GX$Rt$HX$t{$IX$r{$DV+[u+:c+i(@[]@YJ@Z+#JX$UI$TJ$%H$[F$|G$KX$0D$[O#^[+ |+9D$L0+o:+bd+!_+~_+$a@cd+~_+=g$=g$=g$=g$=g$=g$=g$=g$$a@$a@$a@$a@$a@$a@$a@@4+$k'$%3@W4@B_$m'$[T# ;$%w#u.$vB#vB#~w#uq#,>$I`#X3+X3+Y3++K#+K#+K#@G#@G#1T#1T#'X#L`#Z_$Z_$tT#L`#L`#>|+>|+>|+>|+>|+L`#L`#tT#Z_$sT#m@$ZA$ZA$X4#7T#5*$^b$0($X%$bi#bi#yf#EB#Af#Af#Dc#Dc#Fq#Fq#Fq#Dc#G7#J`#~X#6T#6T#6T#6T#~X#8V#8V#8V#8V#8V#8V#8V#8V#.5#7V#7V#`4#`4#7V##5#Dc#Bf#Bf#Iq#Iq#%5#@o#Fc#]2#Y7#S0#/2#`P#`P#/2#J0#Kq#Y`#Y`#Y`#Y`#HB#HB#HB#HB#{O#{O#{O#{O#{O#{O#{O#{O#nT#nT#nT#{O#{O#^K#^K#^K#6w#jT# r# r#jT#jT# r#o1$o1$o1$oT$oT$SX$SX$SX$TX$UX$VX$WX$hr$XX$YX$1v$ZX$1v$ZX$1v$ZX$1v$ZX$1v$bT#Gt#*M#)N$)N$bh$bh$;O#fd$=G#=G#A.$A.$A.$fV#EP$fV#A.$WL#|o#|o#}o#[o#hT#hT#hT#hT#hT#hT#hT#hT#hT#hT#`L#`L#`L#`L#`L#`L#]6$]6$Z4$E2$L_$;M#-M#DV$-M#]K#ah$Ft#Ft#Ft#MB#MB#MB#MB#]b$]b$'J$UW$`L$FV$ZL$`X$LV$+~K@W.@UR$UR$-Y$1,$M:+QB$wx$;Y$>Y$,Y$Du+jQ Du 'Y$'Y$Fu -E 2r@,M ,M _+z:+y:+y:+/6$//$I#$g8$SR#W+$#w#kw$L<@K<@(a@0x@5k@te@<9@fr+:T+:T+hp+ip+_V+[G+Q;@eK@up+vD+vD+vD+ED+ED+ED+ED+L@+L@+;v@Ae@Ae@ci@n#$qg@e^@:w+ Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Rx.Ov+Ov+)> Yt.i~ ,v.,v.i~ Yt.)> i~ i~ i~ i~ Yt.Yt.", "sk sk sk sk sk sk sk :j.oG.uk tk tk uk oG.+h.g~ x5 >' >' E7 7c 7c 7c je je K6 K6 K6 K6 XD+K6 UD+xn.je ie le ke he he le le le ie ie je je tk AX$+Q AX$_j.+h.!1.W+ *| e( 9t.B<@tD.j~#CY$$Y DY$Ld@EY$FY$u@#UG@`2#=q$9`@DS+z[@GR@FT#FX$FX$7D$GY$HY$IY$JY$KY$LY$MY$NY$=9+E|#uH@/:@WJ@*g$JX$&1#W8@(F$|G$OY$[F$9D$ |+[O#9D$o:+o:+bd+!_+m8+~_+~_+~_+=g$=g$=g$=g$=g$=g$=g$=g$$a@$a@$a@$a@$a@$a@$a@$a@6e@c$h($;k+TR#X1#-k+-k+;k+TR#;k+-k+Kg+*f+*_+*_+*f+*f+*f+-k+X1#;k+s:+Ul+._+On+Gg+Gg+Fg+@_+Rl+Rl+~/+_6+Qn#M4#^|+^|+{_+Kb+$a@cd+B)$B)$fd+`-$7q$7q$X3+7q$8[+q:+q:+q:+q:+q:+q:+q:+2/#r:+B)$B)$q:+q:+B)$Nn# G#W4#fd+fd+`-$`-$;k+Kg+:C#yT#dE#dE#;:@K<@L<@:C#8[+l8+l%$l%$x0+l8+ _+9d+g)+0m@[g@PY$~=#GX$.I$/)#gP@Z:@s[@es 9~ Z;$Z;$Y;$}f 9~ $(J$(J$)M )M cP@cP@[g [g d'$oS$HR$QY$RY$SY$TY$3w$Iy$tx$&I$f0$q4#r4$3Z.3Z.j7#Vz$vx$UY$VY$$J$4F$S_#Yu$&J$UL$%N$&N$eN$%W#Oy$WY$qS$aw$rS$*N$kn$ p$Zz$Zz$Zz$RA$RA$*c$*c$CO#CO#5F$5F$6F$6F$jO$jO$DP$8F$^m$Dj$Dj$^m$sS$hU$b9$b9$b8$b8$d9$d9$d9$5($YP$YP$&&#pZ@jX+5$@:P+:P+2T+2T+T_@T_@jy+bX+*B+80#nr+PX$QX$ec#ec#ec#RX$XY$VA$#m+Zn+Zn+IZ@IZ@[w+[w+#m+#m+#m+#m+3V#3V#]k+]k+!k+~k+=m+=m+V4@hc#|&@|&@2$@2$@ZA+ZA+2&@3&@3&@3&@W1#W1#Ey#Ey#Ey#Ey#qq#qq#;>$W4@%3@W4@C_$B_$[T# ;$u.$u.$vB#vB#~w#~w#{w#uq#Y3+X3++K#+K#+K#+K#@K#@K#1T#1T#'X#L`#Z_$Z_$tT#L`#+2#6[+6[+6[+6[+6[++2#+2#CB#)X#X4#m@$7d$7d$sT#8T#K`#X%$X%$X%$DB#DB#yf#yf#EB#EB#zf#zf#K7#K7#K7#zf#G7#J`#~X#6T#6T#6T#6T#~X#8V#8V#8V#8V#8V#8V#8V#8V#.o#.5#7V#7V#7V#7V#Dc#zf#Bf#Bf#Iq#Iq#Iq#%5#Fc#Ic#Y7#S0#/2#`P#`P#/2#J0#Kq#Y`#Y`#Y`#Y`#HB#HB#HB#HB#{O#{O#{O#{O#{O#{O#{O#{O#Z`#nT#nT#nT#{O#{O#^K#^K#hV#`q#p1$ r#`q#jT# r#o1$oT$SX$SX$SX$TX$TX$YY$UX$ZY$`Y$ Z$.Z$hr$vs$YX$|m$YX$|m$YX$|m$YX$|m$YX$+Z$Ht#)N$)N$kO$gd$bh$bh$;O#=G#=G#A.$A.$A.$A.$lO$A.$A.$WL#|o#}o#[o#hT#hT#St#St#St#St#St#St#St#St#St#TB#TB#TB#TB#TB#TB#!6$!6$Z4$E2$L_$;M#-M#DV$-M#]K#ah$Ft#Ft#Ft#MB#MB#MB#MB#Q`#]b$@Z$'J$UW$`L$#Z$$Z$[N$:q$:q$:q$%Z$%Z$%Z$&Z$*Z$=Z$-Z$tX$;Z$>Z$,Z$!U$'Z$)Z$!Z$~Z${Z$]Z$^Z$yD$H2$ :$'X#)X#tT#ci#^l#@I#zB#@G#@G#@G#@G#@G#@G#@G#yB#yB#@G#@G#@G#@K#@K#AB#BB#m@$X4#m@$ZA$ZA$m@$sT#7d$7d$7d$ZA$ZA$ZA$TW$`_$Zy$Vy#wB#,6+My#;f+%3@_1@/Z$&n#Hj$nD#EO$,_#Q6#_^#P,@0=@t<@t<@4 @4 @>B+R,@Q)@Q)@Q)@ZK+Q,+K@>K@5$@5$@5$@5$@iX+iX+!l$~l$Ks$AU$;J$;J$;J$Ks$gm$FO$W~$(Z$_Z${]$^=$^=${]$!_$UR$/H$)I$d9$d9$_8$-u$,H$;u$b8$vp#7V@2R+}V+=>+=>+W.@6$@+W$2%$:Z$_+z:+y:+y:+;_+vT#I#$g8$RR#RR#SR#W+$hc@hc@0x@6m@te@se@ic@[1@<9@It+ip+_G+jV@[G+69@:V+;w+)w+)w+)w+}=@}=@}=@}=@L@+L@+;v@;v@Ae@ci@FZ$ci@_w+ )> Yt.Yt.i~ i~ ", "sk sk sk sk sk sk sk :j.oG.uk tk tk uk oG.+h.g~ x5 x5 >' E7 E7 7c 7c je je K6 K6 K6 K6 XD+K6 UD+xn.je ie le ke he he ke ke le le ie ie je tk _j.hY.hY.Y6.Ll u& W+ *| 0: 8.@|| NZ$s{@OZ$L&.@^@BR$PZ$QZ$RZ$#^@EW$V5@_b SZ$Qu TZ$| +=-#UZ$oC$N~$VZ$WZ$XZ$YZ$ZZ$`Z$ `$zR+(E+.`$ZE#lF@4e$*g$U8@2_#$H$+`$@`$}G$#`$3E$[O#5E$:]+o:+!_+ _+ _+m8+/6+cd+=g$Kb+Kb+Kb+Kb+Kb+Kb+Kb+#4+#4+#4+#4+#4+#4+#4+$a@6e@c$xT#SR#W+$SR#m%$pF$RR#SR#RR#m%$pF$=_+=_+=_+=_+pF$Kg+;k+X1#;k+s:+Ul+Gg+*k+#_+Gg+Fg+@_+Rl+~/+Sl+Lb+&l#Mn#/k+&l#Ng+{_+=g$$a@B)$B)$fd+Es$%2+X3+Y3+X3+Tx$8[+8[+8[+8[+8[+8[+8[+C:+8[+fd+fd+H#$8[+fd+-f+tB#e8+7q$Es$7q$Es$m%$w:+h($-Z#-Z#^]+11@`6@3}@:C#x0+l%$$`$$`$$`$x0+D:+yb+Z}+Ee@%`$}f+})#bX#J2$['$gP@Z:@s[@es 9~ Z;$Z;$Y;$Z;$Z;$}f 9~ $%>$(J$(J$)M )M cP@cP@[g [g d'$oS$oV$NX$&`$*`$!q$v[#=`$Ky$!Z#NW$q4#.*$3Z.3Z.j7#Vz$vx$UY$VY$VY$4F$S_#Yu$&J$UL$%N$&N$eN$%W#Oy$WY$qS$aw$rS$*N$kn$ p$Zz$Zz$Zz$RA$RA$*c$*c$ln$CO#5F$6F$6F$jO$jO$jO$8F$8F$^m$^m$^m$^m$sS$sS$b9$b9$b8$b8$d9$d9$d9$5($HO$HO$YP$Xx$jX+5$@3G+3G+:P+T,@T_@3Z+{k#2h#*B+80#qp+QX$ec#ec#ec#ec#RX$XY$#m+#m+Zn+IZ@IZ@[w+[w+[w+VA$VA$VA$VA$Zn+Zn+X+$X+$!k+!k+=m+RO@hc#hc#hc#hc#2$@2$@2&@2&@2&@3&@oB#oB#Ey#Ey#Ey#Ey#qq#qq#qq#qq#k'$W4@kw$@}#C_$B_$%w#My#xB#xB#Uy#Uy#{w#{w#8t#~w#+K#.K#+K#+K#+K#+K#|T#|T#1T#1T#'X#L`#Z_$Z_$tT#L`#+2#6[+6[+6[+6[+6[++2#+2#BB#)X#X4#X4#m@$m@$sT#8T#!X#^$$^$$X%$DB#DB#yf##G#EB#EB#zf#zf#K7#K7#K7#zf#G7#J`#~X#6T#6T#6T#6T#~X#8V#8V#8V#8V#8V#8V#8V#8V#.o#.5#7V#7V#7V#7V#Dc#zf#Bf#Bf#%5#Iq#%5#@o#Fc#]2#Y7#S0#/2#`P#`P#/2#J0#Kq#Y`#Y`#Y`#Y`#HB#HB#HB#HB#{O#{O#{O#{O#{O#{O#{O#{O#nT#nT#nT#{O#{O#^K#^K#^K#^K#]K#R[$R[$]K#]K#R[$1|$hw$hw$hw$-`$-`$;`$;`$UX$`Y$>`$,`$ZK$.Z$}m$vs$}m$vs$}m$vs$}m$vs$}m$vs$'`$4w#kO$kO$'N$6G$gd$gd$bh$WL#WL#!N$!N$!N$!N$~N$!N$!N$WL#WL#|o#}o#[o#hT#hT#hT#hT#hT#hT#hT#hT#hT#hT#TB#TB#TB#TB#TB#TB#!6$!6$Z4$E2$L_$;M#-M#DV$-M#]K#ah$|w#|w#|w#ah$ah$ah$ah$c@$id$G.${H$ M$)`$!`$#Z$[N$:q$~`$%Z$%Z$%Z$&Z$&Z$*Z${`$rF$tX$'o$Cq$!t$]`$^`$/`$(`$_`$:`$<`$[`$sF$'_+H2$Z%$'X#W_$@2#W_$tT#zB#@G#@G#@G#@G#@G#@G#@G#yB#yB#yB#@G#@G#@G#@K#AB#tT#sT#rT#X4#ZA$AV$TW$ZA$7d$7d$7d$ZA$ZA$ZA$TW$`_$Zy$Vy#wB#,6+My#;f+%3@_1@/Z$&n#Hj$nD#EO$,_#Q6#_^#L@@0&@t<@t<@4 @4 @P)@r;@Q)@Q)@Q)@ZK+Q,+K@>K@5$@5$@5$@5$@iX+iX+!l$~l$Ks$AU$;J$;J$;J$Ks$aq$GO$BU$:`#=Y$^=$^=$=>$=>${]$UR$/H$)I$d9$d9$c9$-u$,H$;u$b8$[{#nZ@gX+[ @=>+=>+W.@6$@}`$}`$|`$1`$('$6c#rS$2`$3`$4`$kh$v~$Du 'Y$'Y$'Y$}g }f jQ jQ !M 9~ @5c#6`$7`$8`$2o+9`$0`$H*$Sr$a`$}:$@S$qO@5X@6Z$b`$c`$d`$e`$f`$HQ@g`$`=$`'$h`$i`$j`$uM$QS$k`$l`$m`$n`$o`$p`$p`$q`$r`$s`$t`$u`$v`$w`$x`$y`$z`$A`$B`$C`$D`$E`$F`$G`$H`$I`$J`$y<#K`$L`$M`$:T$N`$O`$zZ$P`$Q`$/V$R`$4P$4P$4P$yo$Iu$>q$Y4@Y4@Y4@4}@4}@21@21@=3@5X#,_+,_+,_+S`$>_+y:+vT#yD$y:+I#$I#$m%$=_+pF$RR#:a@2+>2+f[+I:+:f+<_+KL#!g$U`$V`$W`$X`$Lq UL Y`$h@+Z`$``$)8@@~ $p@V~#m@#&c Rx (g o_ %. %+ %5: @ %~B XY j> wY+>e@7}.Rx.Rx.Rx.]! ]! 0@@0@@0@@M8@6g+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Rx.Rx.Rx.Ov+Ov+%U.%U.[y+i~ i~ Yt.Yt.Yt.Yt.i~ i~ 6g+)> )> Yt.i~ ,v.", "sk sk sk sk sk sk sk sk sk sk sk sk sk sk N6 dd O6 x5 x5 E7 E7 E7 7c ie je K6 VD+VD+K6 XD+IO.VD+je je ie le le ke ke ke ke ke le le ie ie uk _j.Y6.Y6.yT.D& s$ m+ *| k@ w. ~~ *y+# %6-.[h /W+$ %% %hG.& %#^@Y:#* %g%#a2$_,.= %GZ.lm@GB$.I$Vj$- %; %> %, %' %) %! %~ %BV++k#3V@tM@:V@VJ@|]@{ %%H$] %@`$}G$#`$4E$9D$5E$bD$o:+!_+ _+!_+!_+dd+cd+=g$Kb+Kb+Kb+Kb+Kb+Kb+Kb+#4+#4+#4+#4+#4+#4+#4+$a@6e@k+t~@X4@X4@X4@hc@hc@hc@hc@3}@}9@ye@xe@xe@xe@% $7|$oW$SR#W+$SR#pF$=_+pF$RR#SR#RR#m%$pF$=_+=_+pF$pF$Kg+;k+X1#;k+s:+Ul+Gg+*k+#_+#_+: @@_+Rl+~/+Sl+$4+M4#ki+&l#&l#Ng+^|+F:+=g$B)$B)$Es$Es$%2+%2+;|+hd+Tx$8[+H#$fd+fd+H#$8[+8[+C:+8[+`-$`-$fd+H#$fd+`-$e8+>6+Es$Es$7q$Es$pF$=f+h($-Z#^]+^]+0X#11@`6@xT#:[+E#$^ %^ %^ %E#$p:+dY#5~+Bt+o=#/ %=1@sm#t1@#{#E&#+<@s[@es 9~ }f Z;$Z;$}f }f }f 9~ 9~ 9~ +:P+3Z+3Z+Rm#2h#xI+3%$| %[&@ey+ey+[&@[&@RX$RX$#m+#m+Zn+Zn+IZ@IZ@[w+[w+VA$VA$VA$VA$Zn+Zn+X+$X+$~k+&m+}&@TY#|&@|&@hc#V4@2$@2$@2&@2&@2&@3&@oB#oB#Ey#Ey#Ey#Ey#qq#qq#qq#qq#k'$%3@kw$@}#C_$C_$%w#.K#+G#+K#)E#)E#v.$,>${w#~w#+G#My#+K#+K#+K#Y3+|T#|T#1T#1T#'X#L`#Z_$Z_$tT#L`#L`#>|+>|+>|+>|+>|+L`#L`#BB#)X#sT#X4#m@$m@$sT#7T#OP#s=$^$$X%$DB#DB##G##G#yf#yf#Cc#Cc#~E#~E#~E#Cc#G7#J`#~X#6T#6T#6T#6T#~X#8V#8V#8V#8V#8V#8V#8V#8V#.5#7V#7V#`4#`4#7V##5#Dc#@5#)2#@o#@o#@o#Fc#&5#Sc#[w#BV$[w#[w#[w#[w#^E#^E#Y`#Y`#Y`#Y`#HB#HB#HB#HB#{O#{O#{O#{O#{O#{O#{O#{O#{O#{O#^K#^K#Rt#Rt#Rt#]K#Rt#a<$R[$R[$a<$]K#R[$1|$hw$hw$hw$hw$-`$-`$;`$UX$.Z$@K$1 %@K$1 %@K$1 %@K$ZK$#K$ZK$#K$ZK$#K$ZK$GP$ed$kO$'N$2 %0F$6G$gd$gd$WL#WL#!N$!N$!N$CV$3 %CV$CV$=G#=G#WL#|o#}o#[o#[o#[o#[o#[o#[o#[o#[o#[o#[o#`L#`L#`L#`L#`L#`L#]6$]6$Z4$E2$L_$;M#-M#DV$-M#]K#a<$|w#|w#|w#ah$ah$ah$ah$id$zi${H${H$ M$)`$!`$EV$[N$:q$%Z$%Z$%Z$%Z$&Z$&Z$4 %5 %6 %.Y$cp$7 %vv$]Y$xZ$8 %9 %0 %a %b %<`$[`$MC$c %y:+uT#d %X_$@2#L`#@G#@G#@K#|T#|T#@K#@G#@G#pd$pd$yB#yB#@G#@G#@G#AB#tT#rT#+ $sT#ZA$e %f %e %7d$7d$7d$ZA$ZA$ZA$TW$`_$Sy#UY#)E#'6+.K#-f+em$gr+xy#jV@vi$Lx#XP$,_#Q6#_^#L@@0&@t<@t<@O)@O)@R,@zU$s;@s;@s;@Q)@2T+Q,+Q,+Q,+)K@)K@jX+jX+jX+jX+9e#9e#!l$~l$Ks$AU$;J$;J$;J$Ks$aq$-L$Uv#=Y$^=$^=$^=$=>$^=$!_$UR$GO$~J$WL$!l$b8$-u$,H$;u$b9$[{#yA#fX+eX+=>+M Fu 'Y$'Y$'Y$*E Z;$v~$v~$!M 9~ _+y:+vT#'_+vT#:@$-6$pF$w:+=_+m%$:a@.%,.%}|@rG V^#Hz e$$#4@F; 76 !6 po +d.'.%).%+| r2 )~ |c.vY+k#+ Z Rx.Rx.Rx.]! ]! 0@@0@@0@@M8@6g+Ov+Ov+Ov+Ov+Ov+Ov+Ov+7}.7}.8}.Rx.Ov+%U.%U.%U.,v.i~ Yt.)> )> Yt.i~ ,v.)> )> Yt.Yt.i~ i~ ", "sk sk sk sk sk sk sk lC !B sk uk uk sk !B $5 dd O6 O6 x5 g~ E7 E7 E7 le ie VD+UD+UD+VD+VG.HO.IO.ie ie ie ie le le le ke ke ke ke le le ie uk Ml yT.yT.yT.D& s$ m+ *| k@ b. i= !.%~.%pn {B Wb [Y {.%].%^.%10@^]#Qm /.%e|@(.%_.%:.%<.%,I@!b#*{#[.%}.%|.%1.%2.%3.%4.%5.%6.%P~+7.%=#$p3#v #VJ@*g$%H$8.%8.%] %gT$_F$#`$k+Sl+>k+$!@(a@L<@L<@L<@L<@3}@3}@fc@0i@ye@ye@% $$F$#F$wT#wT#RR#SR#RR#=_+w:+=_+m%$SR#RR#m%$pF$pF$pF$pF$m%$-k+X1#TR#;k+s:+ad+#_+._+0d+#_+: @Fg+Rl+~/+Xg+$4+li+<f#Qn#M0+M0+=g$=g$ed+ed+7q$Es$hd+$2+7[+$2+Tx$H#$fd+`-$`-$fd+H#$8[+)_+8[+`-$-f+fd+H#$H#$fd+d8+&2+gd+Es$In$7q$m%$w:+h($h($-Z#^]+0X#0X#11@-Z#c8+^ %:O#:O#:O#^ %3/#>.$wp+Qb+:/#/{#=1@;/#VJ#:)#FT `:@cP@+:P+3Z+cX+yp#{k#xI+3%$/f# B+ B+ B+ B+ey+V1#V1#VA$VA$3V#Zn+Zn+IZ@IZ@IZ@$m+$m+VA$VA$Zn+Zn+{k+{k+{k+X+$H`#H`#r.$|&@hc#1$@2$@By#2&@2&@cc#oB#oB#oB#Ey#Ey#qq#qq#qq#qq#C_$C_$k'$%3@9q$kw$1t#C_$%w#.K#+K#Y3+}T#}T#E7#v.$,>$uq#+G#My#+G#+K#Y3+Y3+|T#,|+1T#1T#'X#L`#Z_$Z_$tT#L`#'X#,|+,|+,|+,|+,|+'X#'X#BB#)X#sT#sT#m@$m@$X4#M`#~>$et#^$$X%$di#DB##G##G#yf#yf#Cc#Cc#~E#~E#~E#Cc#G7#J`#~X#6T#6T#6T#6T#~X#8V#8V#8V#8V#8V#8V#8V#8V#7V#`4#`4#{X#{X#`4#:X##5#'$XA#6N#,_#Q6#v9#P,@0=@Q,@Q,@t<@Q,@zU$G.%t;@t;@t;@s;@|V+2T+2T+2T+,K@,K@E@@E@@E@@E@@8e#8e#!l$~l$Ks$AU$;J$;J$;J$Ks$H.%I.%+W${]$O&$O&$J.%K.%^=$!_$CU$-L$gm$tr$0N$bq$-u$,H$;u$b9$Qj$yA#4Z+} @=>+1+>M Fu 'Y$'Y$'Y$*E Y;$j!$j!$1i 9~ 9~ +%,+%'+%)+%!+%YF$~+%{+%]+%^e#&-$^+%@.%xZ$/+%(+%_+%:+%<+%[+%0l$DZ$_+y:+vT#y:+f8$x!$4t#RR#w:+=_+m%$3}@}9@:a@ai@T@T@'T@/K@Rb+z)+3+%i/+-n#4+%Lq 5+%/D.Ax 6+%7+%8+%4|@-! SC sa 9+%0+%Jd _@@gl je+a+%b+%w<.c+%-- cE )&@*]$4H.)_ Ov+8}.8}.{! {! %.@%.@%.@ZW+)> Rx.Rx.Rx.Rx.Rx.Rx.Rx.z<.z<.7}.8}.Rx.Ov+Ov+%U.,v.i~ Yt.)> )> Yt.i~ ,v.Yt.Yt.Yt.Yt.i~ i~ ", "sk xn.sk xn.sk xn.sk J6 tk ke m` he :j.je dd dd O6 dd g~ g~ g~ E7 E7 le ie VD+UD+UD+VD+IO.HO.le le le ie ie ie ie ie he ke ke ke le le ie uk Ml Y6.Y6.yT.Ll D& u& W+ GB f. c) (@ @P@J(@H+.y4.%d d+%^.%Zc$|0@UG@qj@'l _2@z.+e+%f+%g+%,Q.,I@|6$h+%i+%j+%)L$k+%l+%m+%n+%o+%p+%q+%0p#A<#&-$x<#*Q$V8@r+%s+%&H$t+%_F$:F$[F$5E$u+%L0+ _+bd+bd+D:+cd+Kb+Kb+Kb+Kb+Kb+Kb+Kb+Kb+{_+{_+{_+F:+F:+F:+F:+F:+6e@H$Ix$B+%6F$DP$-c$Cj$8F$5G$5G$5G$cN$a9$hU$ow$ow$ow$0N$0N$~l$~l$/s#YP$YP$Xx$J #E@@8=@8=@=>+:P+3Z+cX+yp#jy+xI+B@@S1#tD+tD+tD+tD+rp+Xn+Lt+_x@_x@%N+~i@`K+`K+`K+-9@_x@_x@%N+%N+`K+`K+e0#e0#`n+`n+2=@C+%'b$4=@v=@oD+ w#By#}t#2&@cc#oB#oB#oB#Ey#Ey#qq#qq#qq#qq#C_$[T#qq#;f+W+$In$Ly#[T#My#'6+X3+!6+A0+B0+A0+>>$wB#Uy#My#My#$w#.K#X3+Y3+'|+'|+|T#|T#,|+L`#+2#$;$L`#,X#|T#5V#|T#5V#|T#5V#1T#Wy#CB#VY#rT#qT#X4#@I#m@$ci#X4$D+%@I#DB#M`#DB#5@$#K#/l#yf#G7#Cc#G7#Cc#B0#G7#/l#J`#~X#6T#6T#6T#6T#~X#8V#8V#8V#8V#8V#8V#8V#8V#`4#`4#{X#^X#^X#{X#:X#:X#DR#DR#|+'|+|T#+K#pd$*w#pd$xB#yB#xB#@G#@G#er$PP#^l#^l# O#Z+%Z+%X4$@I#@I#@I# O# O# O#PP#~>$Sy#UY#)E#)E#.K#.K##w#em$5k@<9@sI+Gt+Lx#4L#u!$)~#Z.@K)@5o@r;@Q,@R,@XL$`+%R1#u;@R1#S,@S,@kX+]K@]K@ @%[H#[H#[H#[H#J #&&#Xx$WL$~l$Ks$AU$;J$;J$;J$Ks$0q$.@%+@%Uv#!_$O&$=>$:^$O&$+W$@@%#@%aq$$@%$@%rr$Js$,H$b9$Qj$Qj$mZ@4Z+} @=>+R)@x;@6&@7&@g %%@%}`$pZ@:8$ZJ#@ +C~$~`+o1#{c$9~ Du Du Cu Cu =E uK `I$}f }f 9~ @%,@%X.%'@%t|$u|$xZ$)V$)@%!@%~@%{@%j&$]@%^@%/@%(@%_@%:@%<@%[@%}@%|@%1@%vQ#xZ#2@%3@%4@%5@%5@%6@%5@%7@%8@%9@%}@%0@%a@%:V@-x@b@%X.%c@%d@%e@%E.%[`$$.%Vi$R`$_+H2$vT#Z%$>/$g@%h@%W+$pF$pF$RR#-Z#h($xT#,.$yT#1H$f/$i@%j@%V+%k@%Z8@_G+_V+_V+oe#@k+g~+g~+g~+g~+J@@J@@J@@9&@9&@9&@l@%l@%l@%W6$W6$*>+mX+mX+mX+P,+$N+[P+m;@m;@m;@[P+[P+:w+$N+.Z@ [+..6 wY+uJ a) |f.7}.7}.be+be+9Y+8' 8' f!+ko.ko.ko.ko.ko.ko.Rx.Rx. Z Z z<.7}.8}.Rx.Ov+Ov+,v.i~ Yt.)> )> Yt.i~ ,v.i~ i~ i~ i~ Yt.Yt.", "E7 4c 8c 3c 9c p} g~ p} E7 p} E7 p} E7 p} E7 E7 E7 je je je je je je J6 ie le xn.+A f@ xn.2b J6 xn.ie le ke ke le le le le le le le le le oG.Tl 9%.9%.9%.9%.Tl Tl .h.&% 9& !. a. 0: vq.t@%*K+Wb 7| s.#02$yI@7w@g)$A: Y}#Qm '4@O'$u@%v@%w@%j>@eW.*>#x@%y@%qx$-W+gh$z@%A@%B@%C@%M=@SK#D@%E@%F,$TJ@F@%TO@{ %r+%$H$gT$[F$G@%H@%;.$K0+O;$78+68+!_+Dg+<]+_6+<]+Dg+`(+Fg+&k+>k+>k+>k+Xl+Xl+Xl+Xl+Xl+Mg+Mg+|}@Mg+h8$X1#'.$SR#$}#RR#V[$I#$$u$//$$u$//$y:+4[+7[+;|+'|+Y3++K#.K#.K#.K#.K#.K#.K#In$In$In$SR#RR#m%$pF$=_+-_+Ab+ 5$f8$f8$f9$G2$Z%$uT# :$uT#=Z#wT#$u$>c$>c$>c$'.$$}#$}#xT#:C#yT#dE#2}@]]+ad+1/#p:+p:+p:+p:+p:+p:+p:+>:#3/#3/#l8+l8+^6+)|+!|+D:+D:+dd+dd+dd+/6+/6+B)$ed+ed+B)$fd+H#$8[+8[+<[+C:+<[+8[+H#$r:+r:+q:+q:+r:+D:+2/#dd+Nn#Pg+6e@Nn#Ly#u.$%w#X3+$2+3[+4[+;|+B:+4[+uT#6|$>_+S`$=X$*Z#6[+6[+6[+7[+$2+8[+Fg+']+T.+VK+I@%Xz$>/#&*+Z #ix@J!$cP@es 9~ }f Z;$Z;$}f cP@cP@cP@cP@cP@cP@cP@cP@[,$[,$2r@Rx@[f [r@[f nI@=P 36$J@%K@%vd$4G$L@%Qz$:V#4w$4w$tx$ux$ux$RK$RK$M@%M@%M@%is$is$is$is$is$Uz$U~$U~$U~$U~$U~$U~$}0#}0#}0#yx$yx$~v$^9$UH#UH#IR$ns$N@%~m$Ax$Cx$Ex$Gx$O@%O@%P@%P@%P@%LB$I@%I@%Q@%R@%B+%>N$DP$8F$^m$^m$S@%cN$a9$a9$ow$SQ$ow$b9$00$vp#vp#!k#4Z+4Z+8=@8=@:P+2T+W{@W{@jy+%B+&B+yD+A@@S.@S.@S.@xD+xD+!w+!w+1R+1R+1R+up+up+up+up+up++B++B+:c@#k+VH@ur+}T+_T+p;@oe#@p$9F$9F$@p$&n#rX@xb# w#ne#}t#[t#-E#-E#-E#>$$>$$Sn#}f#}f#,l#sq#'E#Iy#kf#A7#A7#ML#ML#LL#B7#&2+&2+!6+!6+!6+!6+%2+Es$#w##w#kw$#w##w#:@$.K#.K#'|+7[+T@%w'$Ty#v.$UY#'$$UY#'$$5V#'$$Ty#E7#,X#W4$VY#X%$ci#DB#ci#DB#ci#ci#ci#ci#4*$/l#4*$/l#4*$/l#($$J`#($$J`#($$J`#%Z#J`#/l#yf#yf#EB#EB#Af#Af#Af#_l#Af#EB#yf#EB#Af#/K#bV#]/$]/${/$/X#:X##5#Dc#zf#+5#+5#+5#`$W@%W@%X@%Y@%Z@%Z@%Y@%X@%`@% #%.#%.#%+#%+#%@#%##%##%$#%$#%%M#&M#&M#$M#@M#@M#%#%m.%kO$kO$kO$kO$)N$,z#*M#,z#)z#,z#kO$'N$kO$)N$;O##%>#%,#%I+%'#%J+%J+%'#%J+%K+%)#%!#%!#%~#%]Z${#%]#%^#%/#%/#%(#%_#%:#%_#%<#%[#%}#%-_+vT#Z%$7N$'|+.K#+G#My#Y3+%2+Y3+My#xB#%w#xB#My#+G#.K#+K#)E#w.$et#s=$s=$^$$^$$^$$X%$^$$^$$^$$^$$^$$^$$^$$^$$Sy#UY#@K#@G#@G#yB#>/$3t#2t#k'$bi@:G+Gt+tI+ N+|R+ED+yD+0~@ky+mX+=B+ZK+|V+2T+T,@!K@>K@>K@5$@V.@>K@|#%|#%1#%>p$>p$qZ@.@%~J$2#%2#%Ks$AU$3#%4#%5#%6#%SQ$0N$lF$bN$zw$:`#(`#7#%!_$!_$+W$CU$GO$)I$)I$WL$[{#M1#Qj$S[#~^#mZ@| @4Z+,K@,K@]K@,T@k#$6&@8#%8$@>T@BI+B2$B)+QB$#J$9#%)n#7E$5'$u1$.y Jv Cu cs cs }f }f 9~ 9~ DN +x+{@$;P Eu Vx &@%0#%nm$MC >J BJ.ud$|v@l'+a#%b#%c#%$9+82+^m@6:$d#%Dq$Dq$Dq$Rr$^Y$e#%(T$]X$f#%g#%e#%)W$h#%i#%5S$'V$L*$CD$P*$j#%k#%l#%tJ$tJ${e#m $P]#+-$m#%n#%o#%p#%q#%r#%s#%t#%u#%v#%w#%x#%:s$y#%z#%A#%B#%G($&4$C#%e@%#.%D#%AZ$AZ$BZ$E#%F#%)o$U'$nE$'5$R)$Q)$U'$R)$U'$Tp$4c$Iu$Iu$4c$9j$}#%G#%H#%I#%J#%sv$2u$hD$F2$>|+Y3+%2+gd+Tx$fd+In$Es$.G#'E#d8+}[+K#%bg$L#%M#%N#%a0$@/+qD+v=@4=@XN# L+sr+1R+1R+#B+L)@L)@{k@b=@b=@b=@kb#X6$:^#x9#Ae@/w+h~+h~+h~+h~+Hl+S0+(/+:w+.V>.V>.G^$G^$Sl Sl l` }9.m@ 4. y* T^ &$%)e *$%/W+j[$i[$=$%yB$i[$py@4O$^]#* %'2@!(#-$%GZ.{[#;$%Gh+<'$&-#>$%-@#s=#U)@k1$|#+,$%'$%)$%tI$a+$@D#!$%G=@{a+EO#~$%W8@(F$+`${$%]$%^$%F#$([+([+1/# _+Dg+<]+Lb+~/+di+Dg+@_++_+>k+Xl+Xl+Xl+Wl+Wl+Wl+Wl+<1@<1@<1@<1@#}##}#9q$9q$$}#$}#V[$V[$$u$$u$$u$//$vT#7[+7[+;|+'|+'|+Y3+Y3++K#+K#+K#+K#+K#+K#+K#.K#%2+Es$gd+Tx$Nr$3[+B:+B:+Y3+'|+,|+,|+L`#+2#+2#6[+>$E7#|@$'$$'$$'$$'$$E7#E7#W4$W4$X%$X%$DB#DB#DB#DB#DB#DB#4*$4*$4*$4*$4*$4*$4*$4*$($$($$($$($$($$($$($$J`#J`#EB#EB#EB#Af#Af#_l#_l#_l#Af#EB#yf#EB#Af#/K#bV#{/${/$+5#/X#:X#:X##5##5#/X#/X#/X#/X#/X#/X#/X#/X#c($c($c($]X#]X#]X#]X#]X#c($c($c($]X#^X#^X#^X#{X#+5#+5#{/$]/$]/${/$+5#+5#Ue$Ue$Ue$Ue$Ue$Ue$Ue$Ue$~z#ch$Lx$Ue$Lx$ch$<$%jU$V@%V@%V@%V@%V@%V@%V@%V@%vs$|m$|m$|m$vs$,`$[$%}$%[$%[$%|$%1$%1$%|$%[$%2$%3$%+#%+#%@#%@#%4$%4$%4$%5$%5$%5$%6$%6$%6$%6$%Aw#7$%8$%9$%9$%0$%0$%9$%It#a$%%I#Xq#%I#9$%0$%9$%It#bh$fd$H0#H0#fd$fd$Zq#}w#sn$0h$zi$id$id$zi$/q$(q$MB#MB#MB#MB#Jj$Jj$KP$KP$JP$c,$b$%b$%dm$c$% R$d$%e$%,#%,#%,#%f$%'#%J+%g$%'#%J+%h$%h$%J+%J+%h$%i$%j$%k$%l$%l$%m$%n$%o$%p$%q$%q$%[#%}#%-_+y:+Z%$7N$Y3+My#%w#My#X3+X3+.K#%w#%w#%w#%w#My#My#.K#.K#)E#w.$!>$y0#y0#zq#zq#zq#zq#y0#y0#y0#y0#y0#y0#y0#)$$Sy#UY#@K#@G#zB#)c$7N$>/$%L$w!$[*$}t#jV@p;@VH@up+S.@yD+bX+bX+=B+=B+Q,+|V+2T+T,@>K@>K@5Z+5Z+5Z+V.@|#%r$%1#%1#%>p$>p$.@%~J$s$%2#%Ks$AU$3#%4#%t$%u$%Gs$cN$d9$jF$/'$jq#:`#_Z$!_$!_$+W$CU$GO$-L$)I$8e#[{#^N#]N#S[#~^#mZ@| @4Z+)K@)K@!K@!K@DD+x;@mq@9G+=B+7~@4%$*,$|0#`J$v$%jh$oS$n!$&E .y Jv Cu =^$=^$}f }f 9~ 9~ |+;|+Nr$cO$8[+y0+~6+!w#ML#^H$a8+*%%=%%-%%-%%ve$R3+Rl+nD+`+#]/+I6@ L+mp+1R+1R+#B+#B+L)@L)@=9@=9@=9@a&@mb#:^#x9#J@@*>+Gn+Gn+h~+[P+[P+m;@Qt+Qt+Rt+Rt+Rt+ED+ED+L)@)w+3T+W/$3T+A@@wD+wD+sr+sr+#B+wD+}P+}z@=B+2G+%%,%%'%%)%%!%%~%%B7${%%'X.]%%^%%/%%(%%Hv@3n ZQ@_%%:%%<%%I8#wN [%%}%%|%%JI.1%%2%%$_ A8.Gb$CU#9S.;e@):+8S.Yt.Yt.Yt.Yt.{! {! {! ZW+r)@$]$$]$n9$wn.zm.zm.Js O4 =L z<.7}.8}.Rx.S|@Ov+i~ {! 5A.Ea+Ea+5A.{! be+{! {! {! {! {! {! ", "+_ <| p} p} <| +_ +_ p} p} p} p} p} p} p} p} je je je je je je je je +A je 2b 2b ie J6 J6 je ie ie le le le ie je je le le le le le le le oG.Tl 9%.V>.V>.G^$G^$Sl Sl -H.vk m@ /+ y* W> y_ Wq+r~ e)$s1 u1 3%%3%%%F.yB$nC$+7 )b@)2@!(#u@%v@%B1 6=$2v@4%%5%%@E#6%%ur$@f$7%%8%%7*+9%%Jm#TG#o $+J#.^#C=@p4$Du$FR$UI$fT$Eo#0%%a%%b%%/[+78+>:#2/#dd+@_+~/+Sl++_+&k+@_+On+Xl+fi+YN#YN#YN#Vl+Vl+Vl+Vl+:1@:1@em$em$em$em$kw$kw$wT#wT#wT#wT#I2$I2$I2$vT#//$;|+;|+;|+;|+'|+'|+'|++K#+K#+K#+K#+K#+K#+K#.K#X3+7q$Es$Es$hd+$2+4[+4[+'|+'|+,|+>|+L`#L`#+2#6[+# $I2$I2$$ $wT#wT#-/+=/+h($h($yT#yT#yT#:C#J<@._+9[+#*$#*$#*$Ib+Ib+Ib+Ib+_[+_[+E#$l%$l%$j8+i8+j8+8[+q:+r:+r:+r:+B)$B)$B)$Nn#Nn#Nn#ed+ed+B)$B)$B)$fd+fd+ed+B)$B)$q:+2/#!M#q:+2/#68+1/#/6+@4+E:+r:+gd+%2+%2+$2+B:+tv$;t$7[+2u$5[++2#F2$/$%KC$X_$@2#c%% :$uT#/6$g($=k+8~+F)@Zv+! +L[#k7#d%%'4+qV@Y^#Y~#`:@cP@es f+Hy#r0#3i#!l#!l#s0#kf#A7#^H$&2+&2+&2+&2+Es$Es$Es$Es$%3@%3@%3@%3@D_$D_$ ;$ ;$u.$.K#A0+B0+8,$E_$|@$U%$'$$'$$'$$E7#E7#|@$W4$W4$X%$X%$DB#DB#DB#DB#DB#DB#4*$4*$4*$4*$4*$4*$4*$4*$4*$4*$4*$4*$4*$4*$4*$/l#~X#Af#Af#_l#_l#_l#/K#/K#Af#Af#EB#EB#EB#_l#/K#/K#/X#/X#/X#/X#/X#/X#/X#/X#:X#:X#:X#:X#:X#:X#:X#:X#]X#]X#]X#]X#]X#c($c($c($Y4$Y4$c($c($c($]X#]X#]X#{/$+5#+5#/X#/X#+5#+5#{/$Ue$Ue$Ue$Ue$Ue$Ue$Ue$Ue$ch$ch$Lx$Lx$ch$~z#<$%jU$V@%V@%V@%V@%V@%V@%V@%V@%.Z$.Z$vs$.Z$,`$`Y$[$%}$%`Y$`Y$[$%}$%}$%[$%`Y$k%%7$%@#%@#%4$%4$%5$%5$%5$%6$%6$%6$%6$%5$%5$%5$%5$%8$%0$%9$%9$%l%%8$%0$%a$%a$%It#%I#It#9$%0$%9$%It#bh$fd$H0#$!>$y0#y0#zq#zq#zq#!>$!>$!>$!>$!>$!>$!>$2@$Sy#UY#@K#@G#zB#)c$7N$>/$#L$l'$q=$}t#jV@p;@o;@up+S.@yD+%B+%B+=B+=B+ZK+|V+2T+2T+>K@>K@V.@V.@5Z+V.@fm$A%%fm$fm$'K@'K@AM@zM@gm$hm$Ks$Ks$;J$,M$t$%=I$Gs$cN$!l$kF$bN$TR$Uv#Uv#!_$!_$UR$CU$GO$-L$)I$8e#[{#^N#]N#S[#~^#mZ@| @4Z+>K@>K@!K@w;@DD+DD+k#$ZK+ky+7~@:/#7]+B%%L~$C%%}g$fO$7E$5'$&E Cu Cu Du Du }f }f 9~ 9~ $S.%)V$P$%X%%X%%Y%%Z%%`%%8 % &% &%.&%+&%@&%T+%|+%+%%#&%$&%%&%&&%*&%tU$=&%-&%BS$tU$;&%/V$DZ$N`$yZ$R`$&%,&%*|+|[+I#%'&%&y$KC$KC$KC$d %5[+;t$-|+s0+<[+)|+{6+gw$A7#^H$,:#b8+6I#hT$D:+ _+Rl+~/+mD+s=@8X+Tt+ L+mp+sr+1R+1R+#B+L)@L)@=9@a&@a&@P,@:^#x9#x9#J@@O)@mX+$N+m;@Qt+:w+.V>.G^$G^$Sl Sl -H.vk {@ #. y* n. Ux.b.+6&%y: 82$7&%8&%9&%%F.02$nC$PC@oh@* %;W@0] u@%vd@JW+U;.KM.j1$XI$AB$QH#0&%J{$z@%a&%b&%c&%!J+93$VX#d&%J`$W;@e&%sQ#KW$Fo#f&%g&%tC$_w$Db+h&%RL$q:+B)$Fg+&k+>k+>k+On+On+ei+YN#YN#YN#Vl+Vl+Vl+Vl+D_$Vl+em$:1@em$em$em$em$kw$kw$wT#wT#wT#wT#I2$I2$I2$vT#'|+'|+'|+;|+;|+;|+;|+;|++K#+K#+K#+K#+K#+K#+K#.K#.K#In$7q$7q$%2+hd+;|+;|+'|+'|+>|+>|+L`#L`#L`#L`#Z%$$u$$ $$ $I2$-/+-/+=/+-Z#-Z#h($yT#:C#,.$&3@Mg+9[+#*$#*$#*$Ib+Ib+Ib+Ib+k8+k8+l%$l%$l%$l%$$`$x0+8[+q:+r:+r:+r:+B)$B)$B)$Nn#Nn#Nn#Nn#Nn#Nn#Nn#ed+-f+-f+Nn#Nn#B)$r:+2/#!M#q:+!M#hT$1/#dd+E:+B)$q:+YM$Nr$$2+3[+tv$J#%B:+7[+2u$5[++2#F2$/$%KC$X_$@2#Ai$Ai$ :$/6$g($=k+k)+lZ+i&%`.@K[#U~$~Z#&N@ G@v'@x`#`:@s[@es es es es es cP@cP@cP@cP@cP@cP@cP@cP@Zi@Rx@Rx@:e 6, 2k En =P Yw #5$j&%k&%Uo$+E#Vj$rx$Iy$Jy$4w$4w$4w$4w$z+%z+%l&%l&%m&%m&%m&%m&%m&%n&%<0$}0#}0#}0#}0#}0#}0#}0#}0#}0#yx$yx$~v$~v$,]$,]$rS$-o$4w+]8$Ax$Bx$Fx$i%%:$%:$%O@%O@%LB$LB$LB$LB$j%%j%%Bj$5d$Cj$-c$Dj$Dj$Dj$@d$qw$,p$b9$b9$b8$_8$o&%]v#Qm#!k#fX+gX+3G+3G+Q,+2T+W{@W{@Pt+%B+~w+$B+$N+$N+w)+w)+,B+,B+6o@6o@tr+tr+tr+tr+:&@:&@:&@:&@:&@:&@:x@:x@:x@fh#eh#eh#(t#uy#3P#3N#3,$2N#1N#`M+jV@jV@ne#ne#}t#`J#-E#-E#Ey#Ey#:i#df#-l#;f+W4#'l#r0#3i#p&%!l#s0#s0#A7#^H$&2+&2+&2+&2+Es$Es$Es$SR##}##}##}##}#W+$W+$7q$7q$%w#X3+A0+A0+E_$>>$E7#T%$'$$'$$E7#E7#|@$|@$`A$`A$X%$X%$DB#DB#DB#DB#DB#DB#($$($$($$($$($$($$($$($$4*$4*$4*$4*$4*$4*$4*$/l#~X#_l#_l#_l#/K#/K#bV#bV#EB#EB#EB#Af#Af#_l#_l#/K##5#:X#:X#:X#/X#+5#+5#+5#/X#/X#/X#/X#/X#/X#/X#/X#{X#^X#^X#]X#c($c($Y4$Y4$Y4$Y4$Y4$Y4$c($c($c($c($]/${/$/X#:X#:X#/X#{/$]/$Ue$Ue$Ue$Ue$Lx$Lx$Lx$Lx$ch$ch$ch$ch$~z#<$%<$%jU$V@%V@%V@%V@%V@%V@%V@%V@%,`$,`$,`$`Y$`Y$[$%}$%}$%,`$,`$`Y$`Y$`Y$`Y$,`$q&%r&%4$%4$%5$%5$%6$%6$%6$%Aw#Aw#6$%5$%5$%4$%@#%@#%l%%0$%9$%0$%8$%r&%l%%9$%9$%a$%%I#It#9$%0$%9$%It#)N$fd$$!>$!>$y0#y0#zq#zq#)>$)>$)>$)>$)>$)>$)>$&^$Sy#UY#@K#@G#zB#)c$7N$>/$#L$l'$q=$ w#rX@oe#o;@;w+S.@yD+%B+%B+=B+=B+ZK+s;@2T+2T+>K@>K@V.@V.@5Z+V.@fm$A%%fm$fm$'K@'K@AM@zM@~J$WL$Ls$Ks$;J$,M$t$%=I$sS$cN$b8$5($jF$bN$UR$CU$!_$!_$UR$CU$GO$-L$)I$8e#[{#^N#]N#S[#~^#mZ@| @4Z+YK+YK+w;@w;@DD+,T@E+$Q)@W{@2G+:/#7]+1|+tD$rx$A&%=z$u)$}f &E *E Cu Du Du }f }f 9~ 9~ @ @$LD+z[+B&%G~@c2+_V@Es@C&%f6$D&%E&%E&%^V$]U$ZB$j6$:T$F&%F&%P%%A$%g#%G&%iW$H&%a`$I&%1:$J&%`'$K&%T%%L&%e&$m#%7Z$ C$/B$M&%N&%O&%P&%P&%Q&%R&%S&%T&%2+%U&%a %V&%|+%*.%d@%W&%X&%Y&%Z&%`&%%%%DS$-&%zT$zT$BS$oY$/V$R`$N`$yZ$0l$DZ$R`$0l$R`$DZ$&% *%.*%H#%H#%+*%*Z$xL$xL$@*%KC$2u$B:+tv$2[+YM$/>$]6+qD$^H$`3+x0+:[+q:+E:+@4+$a@Sl+Sl+mD+s=@sD+I6@sp+Tn+sr+sr+1R+1R+L)@L)@a&@P,@L@@0$@x9#x9#x9#0$@O)@w)+Qt+2V+2V+Il+Rt+L)@5T+z@@z@@fD+fD+(P+(P+@k+rr+uD+uD+Tn+oy+@k+@k+@k+L)@Rt+Qt+h~+1G+=>+AI+QU##*%VH#2S#K~$5:@$*%%*%&*%**%=*%-*%;*%3v -f#'8@]M xy ;! ,8 `i@Lj#f|#>4@UZ h >*%*g+1j.,*%'*%DH aN )*%!*%5&%;e@F;.vM.):+,v.Yt.Yt.{! {! {! {! ZW+ZW+15+15+15+n9$)g@)g@)g@-V@ko.ko.8}.8}.7}.7}.;q.z<.i~ {! 5A.Ea+Ea+5A.{! be+{! {! {! {! {! {! ", "5c 5c p} p} 5c 5c 5c p} p} p} p} p} p} p} p} je je je je je je je je xn.xn.xn.up.lo.lo.xn.ie le le ke ke le ie xn.J6 ie ie ie ie ie ie ie uk Tl 9%.V>.V>.G^$G^$~*%Sl l` .h.T$ {@ s& Y@ I{ :2+0r.Xh.{*%]*%^*%m/ /*%(*%mC$PC@_*%e%#`= _O.:*%<*%[*%Ay _T.#I.}*%7&$8>+j2@|+>|+L`#L`#'X#'X#f($G2$G2$//$/6$/6$(/$(/$x:+pF$pF$m%$;k+;k+X1#Mg+9[+Jb+9[+9[+9[+9[+^6+^6+x0+x0+x0+x0+/>$/>$/>$x0+8[+q:+r:+r:+r:+B)$B)$B)$ed+Nn#Nn#Nn#Nn#Nn#Nn#Nn#>+U~$aE$e~#rV@+/$Y~#s[@cP@es es es cP@cP@cP@cP@cP@cP@cP@cP@cP@cP@8r DN Rx@:e En [r@CN mI@L2$TB$j&%q1#[H$6r$L+@v[#=`$Jy$Jy$4w$4w${q$z+%y[#l&%l&%m&%m&%m&%m&%m&%n&%<0$}0#}0#}0#}0#}0#}0#}0#}0#}0#yx$yx$~v$~v$,]$,]$aw$IR$4w+]8$Ax$Bx$A+%CM#:$%:$%O@%O@%LB$LB$LB$LB$Bj$Bj$Bj$5d$Cj$Cj$Dj$Dj$Dj$@d$qw$,p$b9$b9$b8$_8$o&%]v#Qm#!k#fX+gX+3G+3G+Q,+2T+W{@W{@Pt+%B+~w+$B+P,+P,+w)+,B+,B+K)@6o@6o@tr+tr+tr+tr+:&@:&@:&@:&@:&@:&@:&@<&@fh#fh#fh#fh# N+7X+3P#3N#3N#3P#1N#`M+jV@jV@Q;@Q;@}t#`J#`J#`J#W1#W1#:i#df#df#6+&2+&2+&2+Es$Es$SR#SR#SR#SR#h8$h8$h8$h8$SR#SR#Es$Es$.K#%2+B0+A0+>>$D7#,>$v.$E7#E7#E7#|@$|@$T%$`A$`A$X%$X%$DB#DB#DB#DB#DB#DB#($$($$($$($$($$($$($$($$4*$4*$4*$4*$4*$4*$4*$/l#~X#_l#_l#_l#/K#/K#bV#bV#EB#EB#Af#Af#_l#_l#_l#_l##5##5#:X#:X#/X#+5#{/${/${/${/${/${/${/${/${/${/${X#^X#^X#]X#c($c($Y4$Y4$c($c($c($c($Y4$Y4$Y4$Y4$]/${/$/X#:X#:X#/X#{/$]/$]/$Ue$Ue$Lx$Lx$ch$ch$~z#ch$ch$~z#<$%<$%<$%<$%<$%V@%V@%V@%V@%V@%V@%V@%V@%`Y$`Y$`Y$[$%[$%[$%[$%[$%,`$,`$,`$,`$,`$,`$,`$q&%r&%4$%4$%5$%5$%6$%6$%6$%6$%6$%6$%5$%4$%@#%@#%@#%l%%0$%0$%l%%7$%7$%8$%9$%l%%9$%It#a$%0$%0$%9$%It#kO$*M#)z#,z#*M#*M#Gt#Et#+O#NB#hd$]b$]b$hd$YK$[q$Pt#MB#NB#+O#$l$|m$KR$KR$c,$c,$m%%m%%dm$c$% R$d$%9*%q%%q%%r%%r%%)#%K+%s%%)#%s%%0*%s%%)#%t%%K+%a*%b*%u%%[#%u&%c*%d*%v&%x%%ey$u&%e*%}#%Jg+ 5$6|$Y1#+G#*w#6t#*w#+G#+G#xB#6t#xB#xB#xB#+G#+G#+K#+K#UY#&^$D+%D+%et#et#s=$s=$s=$D+%D+%D+%D+%D+%D+%D+%&^$Sy#UY#@K#@G#zB#)c$7N$>/$%L$l'$[*$}t#jV@p;@o;@up+vD+$B+%B+%B+mX+mX+ZK+s;@2T+2T+!K@!K@V.@V.@V.@CO@,T@R,@,T@,T@!K@!K@V.@5Z+~J$WL$~l$0N$Js$;J$'H$'H$sS$cN$b8$5($jF$bN$UR$CU$!_$!_$UR$CU$GO$-L$)I$!k#[{#^N#]N#S[#~^#mZ@| @4Z+YK+YK+w;@w;@DD+,T@E+$Q)@W{@$9l$j*%k*%lW$*&%l*%:+%yh$yh$F#%;&%F&%m*%A$%n*%o*%p*%H&%A.%q*%r*%s*%t*%u*%v*%.-$m#%M*$1:$ ~$M&%^`$P&%w*%x*%x*%y*%z*%V&%V&%V&%A*%B*%C*%D*%X+%]Z$E*%F*%G*%H*%xO$ES$I*%J*%K*%L*%oY$M*%8l$^U$]U$9l$N*%8l$9l$9l$8l$8l$N*%O*%ap$>&%}f$P*%Q*%R*% Y$ Y$OV$OV$xL$S*%sv$B:+tv$2[+YM$/>${6+Fb+`3+`3+)|+y0+Nn#6e@6e@$a@Sl+Xg+nD+t&@]/+e0#Yn+sp+sp+ L+-w+up+up+up+<&@:&@a$@b&@-(@b&@6~#0$@P,@Rt+2V+[=@[=@vI+QK+|R+1V+uI+PK+PK+Kl+}R+}R+fy+oy+Tn+Tn+sp+@k+fy+(P+FD+L)@Rt+(w+~-+x)+2 @R,+S,+k~+u,$[6$56+T*%U*%V*%W*%X*%Y*%Z*%`*% =%EN#4|@ <@V:@wb &S ak# j@5|@WZ Xe {u$:T .=%+=%@=%MM+%i *j Gb$;= QL+vM.F;.8S.Yt.,v.Yt.{! {! {! ZW+ZW+ZW+ZW+15+15+n9$n9$)g@-V@35+35+NM+ko.Rx.8}.7}.z<.;q. Z i~ {! 5A.Ea+Ea+5A.{! be+{! {! {! {! {! {! ", "4c 5c p} p} 5c 4c 4c p} p} p} p} p} p} p} p} je je je je je je je je le je J6 lo.lo.up.je le ie ie le le le ie je je ie ie ie ie ie ie ie uk Tl 9%.V>.V>.G^$G^$~*%~*%lI.uk $% {@ P n+ P6 -L+>p+#=%$=%%=%&=%*=%==%(*%-=%i3$;=%_*%oh@qj@nq 'l Uy B%.y9 g{@1 +>=%,=%b2$'=%!Z#)=%W@+!=%~=%{=%]=%|e#d(@wm#HM#^=%/=%|P#(=%_=%HA$lV$:=%,&%u:+w:+-k+ad+=k+Mg+Mg+Lg+Lg+TR#Vl+#w##w##w#:@$:@$:@$:@$:@$SR#X1#X1#X1#SR#SR#g8$g8$(/$(/$vT#vT#6|$6|$6|$6|$;|+;|+;|+;|+;|+'|+'|+'|++K#+K#+K#+K#+K#+K#+K#.K#X3+7q$7q$7q$%2+%2+'|+'|+7[+7[+>|+>|+L`#'X#'X#'X#f($G2$Z%$Z%$/6$//$//$g8$g($g($m%$RR#RR#;k+;k+r:+dd+Jb+9[+9[+9[+9[+^6+^6+)|+)|+)|+x0+/>$c8+c8+c8+8[+q:+r:+r:+r:+B)$B)$B)$B)$B)$B)$ed+ed+Nn#Nn#Nn#$%OB@])#8r cP@es 1+xz@[=%}=%Qz$_V#!f#=`$#J$Jy$4w$4w${q$y[#y[#f.%f.%6w$6w$6w$6w$6w$f+>f+ML#!l#F0+p&%A7#A7#>6+&2+&2+&2+Es$Es$SR#SR#SR#SR#h8$h8$h8$h8$SR#SR#Es$Es$X3+hd+B0+A0+I`#uq#{w#,>$E7#E7#|@$|@$T%$T%$`A$F7#X%$X%$DB#DB#DB#DB#DB#DB#&Z#&Z#&Z#&Z#&Z#&Z#&Z#&Z#`n#`n#`n#`n#`n#`n#`n#5@$~X#Af#Af#_l#_l#_l#/K#/K#yf#EB#Af#_l#/K#_l#_l#Af##5##5#:X#:X#/X#+5#+5#+5#]/$]/$]/$]/$]/$]/$]/$]/$]X#]X#]X#]X#]X#c($c($c($]X#]X#]X#c($c($c($Y4$Y4$]/$]/${/${/${/${/$]/$]/$]/$Ue$Ue$Lx$ch$~z#~z#<$%ch$ch$<$%jU$jU$jU$jU$<$%V@%V@%V@%V@%V@%V@%V@%V@%,`$`Y$[$%[$%}$%[$%`Y$`Y$`Y$`Y$,`$.Z$.Z$,`$`Y$k%%7$%@#%@#%4$%4$%5$%5$%5$%5$%5$%4$%4$%4$%4$%@#%@#%8$%l%%l%%r&%3$%7$%l%%a$%8$%0$%a$%a$%0$%0$%9$%It#kO$*M#,z#,z#*M#)N$Gt#Et#+O#NB#hd$]b$]b$hd$YK$[q$MB#MB#MB#NB#gr$$l$JP$JP$JP$JP$*#%b$%c$% R$RP$+R$9*%r%%r%%r%%t%%K+%s%%0*%K+%0*%|=%0*%K+%t%%K+%s%%t&%j$%1=%k$%c*%2=%d*%dy$3=%z&%4=%'/+yD$S`$*Z#Z1#@K#xB#*w#*w#+G#+K#+G#*w#xB#xB#xB#+G#+G#+K#+K#UY#,/$D+%D+%D+%et#et#s=$s=$et#et#et#et#et#et#et#w.$Sy#UY#@K#@G#zB#)c$7N$>/$,c$w!$S%$`J#Q;@eK@VH@-w+vD+$B+%B+%B+mX+mX+ZK+s;@Q)@2T+!K@!K@V.@V.@V.@!K@,T@R,@,T@,T@!K@!K@V.@5Z+)I$WL$!l$~l$Js$;J$'H$'H$sS$cN$b8$5($iF$/'$TR$Uv#!_$Uv#UR$FO$GO$)I$lF$!k#[{#^N#]N#S[#~^#mZ@| @4Z+>K@>K@!K@w;@DD+DD+k#$k#$ZK+{-+CI+ni$U`$M/+_g$_G$5=%Pz$=S }f }f *E Du Du }f }f 9~ 9~ #`m+6=%y{$YX.:3@n|#7=%U~@Fs@8=%yo$.Y$9=%0=%tU$w.%a=%b=%c=%b=%d=%F#%e=%f=%g=%g=%h=%c@%i=%A.%[s$z.%j=%k=%l=%m=%N*$H$%L`$1M$M&%5Z$n=%o=%p=%p=%p=%q=%@%%#&%#&%#&%r=%s=%s=%]Z$%X$%X$t=%xU$u=%v=%.R$w=%x=%y=%y=%z=%A=%B=%.Y$^U$^V$M*%C=%9l$.Y$M*%D=%9l$E=%N*%F=%G=%)B$H=%I=%J=%YW$ Y$OV$K=%@*%KC$d %hD$B:+3[+$2+d8+~6+qD$i8+i8+)|+y0+Nn#6e@E:+$a@Xg+gi+t&@`+#]/+I6@^/+sp+sp+sp+-w+-w+up+up+:&@|R+-(@d^@d^@-(@X<#H6@|R+wI+z@@y@@y@@y@@PK+Kl+PK+ay+ay+}R+@w+@w+tI+eK@^/+|]+|]+^/+vr+vr+Kl+fD+<&@Rt+(w+~-+5G+5&@]-+z)+1r$L=%[V#X@+M=%N=%O=%P=%Q=%R=%S=%T=%W7@0Y fX#'M DR@U=%ix@{c 3=..B rm@{X+~z.V=%*X.)z.=l+58 +% }U CU#!*%.d+)L.F;.):+)> i~ {! {! {! {! ZW+ZW+ZW+ZW+15+n9$n9$$]$-V@-V@35+35+ko.ko.8}.8}.7}.7}.;q.z<.i~ {! 5A.Ea+Ea+5A.{! be+{! {! {! {! {! {! ", "5c p} <| <| p} 5c 4c p} p} p} p} p} p} p} p} je je je je je je je je le ie ie je ie le le ie je je ie le le le ie ie je je je je je je je tk Tl 9%.V>.V>.G^$G^$~*%~*%kb.tk $% #% ,% ^+ U# w< -F+Ss+W=%X=%Y=%Z=%`=% -%.-%.-%;=%+-%@-%ph@!b@Qm !#.~#.A7 n0 9O.f|#&k$#-%j2@GX$Yo$$-%%-%&-%*-%=-%--%WO$.T@;-%FQ@/=%;R@lD#>-%,-%'-%)-%!-%~-%*/+h($r0+*f+-k+-k+Kg+Kg+SR##w#g8$g8$g8$f9$f9$f9$f9$g8$gd+gd+gd+gd+hd+hd+hd+hd+;|+;|+>|+>|+>|+>|+L`#>|+4[+7[+7[+;|+'|+'|+Y3+Y3++K#+K#+K#+K#+K#+K#+K#.K#%2+Es$Es$Es$%2+%2+'|+'|+7[+7[+6[+>|+'X#'X#'X#1T#L`#+2#5[+5[+5[+7[+'|+Y3+%2+%2+hd+gd+gd+gd+Tx$8[+2/#1/#2/#2/#2/#2/#<[+<[+gd+gd+gd+Tx$$2+Nr$Nr$cO$8[+8[+H#$H#$H#$fd+fd+fd+H#$H#$H#$fd+fd+`-$`-$`-$Nn#1+07$g%%h%%Wo$~q$T-$aE$sx$Ky$Ky$Y]$Y]$x[#z[#%Q$%Q$8r$8r$8r$8r$8r$8r$<0$}0#}0#}0#}0#}0#}0#}0#}0#}0#yx$yx$~v$~v$,]$,]$Fe$rS$]8$]8$Ax$Ax$i%%Vk$:$%:$%O@%O@%LB$LB$LB$LB$j%%j%%j%%j%%DP$DP$S@%S@%5G$Dj$Ej$a9$ow$ow$bq$b8$[{#[{#!k#!k#4Z+fX+wp#wp#Q,+2T+W{@W{@Pt+%B+~w+$B+mX+mX+,B+K)@K)@K)@jb#jb#tr+tr+tr+tr+:&@:&@:&@:&@fz@fz@&t@#9@<&@:&@:x@:x@ N+7X+eh#3k#3N#3P#uy#(t#jc@jc@Q;@Q;@oD+u&@`J#`J#cc#cc#2f#Qg+Rn#:i#i0# G#ML#A7#^H$^H$e8+e8+d8+;6+Es$Es$SR#SR#SR#SR#'.$'.$em$em$em$em$#w##w#In$In$%w#X3+A0+A0+I`#D7#,>$v.$|@$|@$|@$T%$T%$T%$F7#F7#X%$X%$DB#DB#DB#DB#DB#DB#&Z#&Z#&Z#&Z#&Z#&Z#&Z#&Z#`n#`n#`n#`n#`n#`n#`n#5@$J`#EB#EB#EB#Af#Af#_l#_l##G#EB#Af#/K#/K#/K#_l#Af#:X#:X#:X#/X#/X#/X#/X#/X#{/${/${/${/${/${/${/${/$c($c($c($]X#]X#]X#]X#]X#{X#^X#^X#^X#]X#c($c($c($]/$]/$Ue$Lx$Lx$Ue$]/$]/$]/$Ue$Ue$Lx$ch$~z#<$%<$%ch$~z#<$%'`$'`$'`$jU$<$%V@%V@%V@%V@%V@%V@%V@%V@%.Z$,`$[$%[$%[$%`Y$,`$.Z$}$%[$%,`$.Z$.Z$,`$[$%^-%3$%+#%+#%@#%@#%4$%4$%4$%@#%@#%@#%4$%4$%4$%4$%4$%r&%/-%/-%(-%_-%(-%l.%!z#/-%l.%ed$ed$l.%l.%ed$3w#'N$)N$,z#,z#)N$)N$Gt#Et#+O#NB#hd$]b$]b$hd$YK$[q$MB#MB#MB#MB#Jj$Jj$KP$KP$KR$XQ$KV$KV$ R$RP$.R$TP$:-%!#%!#%!#%<-%[-%L+%}-%[-%}-%|-%L+%~#%!#%<-%[-%1-%2-%3-%4-%ey$2=%2=%2=%1f$e*%5-%'/+yD$6-%A:+<$$|T#@G#yB#@G#|T#|T#@K#yB#yB#yB#yB#@G#@G#@K#@K#UY#,/$7-%D+%D+%D+%et#et#et#s=$s=$s=$s=$s=$s=$s=$E~$Sy#UY#@K#@G#zB#)c$7N$>/$!b$@}#+}#.}#[G+|G+}T+@k+vD+$B+iy+iy+mX+mX+P)@s;@Q)@Q)@!K@!K@CO@CO@V.@!K@DD+P)@ZK+ZK+w;@w;@YK+4G+zM@9e#!l$~l$bq$ow$Gs$'H$5G$cN$c9$d8$I$+T!$8-%8-%Uv#Uv#UR$FO$GO$)I$lF$!k#[{#^N#]N#S[#~^#mZ@| @4Z+)K@)K@!K@!K@DD+x;@mq@^K@9G+@N+2R+9-%l~+}T$u8+RH#x@%GC$8E$[,$}f *E Lv PC }f }f 9~ 9~ 6g+i~ {! {! ZW+ZW+ZW+ZW+]%@]%@$]$$]$$]$$]$-V@-V@-V@-V@13+13+8}.8}.7}.7}.g*.7}.i~ {! 5A.Ea+Ea+5A.{! be+{! {! {! {! {! {! ", "p} +_ O_ O_ +_ p} 5c p} p} p} p} p} p} p} p} je je je je je je je je le le he ;_ -_ ;_ ke je J6 xn.ie le ke ke le le je je je je je je je tk Tl 9%.V>.V>.G^$G^$~*%~*%nI.Ek$;_ |% >% W+ !. V% l^ yz+S-%b*@T-%U-%^*%V-%W-%X-%Y-%Z-%`-% ;%w$#.;%27 9`@pP$IQ+@x !|@tZ.+;%GW$@;%#;%Vz$z@$g*+$;%|*%%;%l_+4p#r # #@F@%ho@qX@8H#sC$7e$.h$ h$!-%=3@11@o)+*_+Kg+Kg+*f+Kg+RR#W+$I#$I#$//$//$//$//$//$I#$$2+Tx$Tx$Tx$$2+$2+$2+$2+;|+;|+>|+>|+>|+>|+L`#>|+hD$4[+7[+;|+'|+Y3++K#+K#+K#+K#+K#+K#+K#+K#+K#.K#hd+gd+gd+gd+hd+hd+'|+'|+7[+7[+6[+>|+'X#'X#1T#1T#F2$&;%2u$2u$2u$5[+;|+'|+Y3+X3+%2+%2+gd+Tx$Tx$<[+2/#1/#2/#2/#2/#2/#<[+<[+Es$gd+gd+Tx$$2+Nr$Nr$3[+Tx$8[+H#$H#$H#$fd+fd+fd+<[+8[+8[+H#$fd+fd+`-$`-$ed+Nn#|+hD$<=%{-%S*%/$%d<$W_$Z_$W_$g@$S[$g@$+ $T_$7X#nV#f<$//$X1#@/+<6+'}@%`$!}@)Z#*;%&-#~}+i4#,M 9~ 9~ }f 9~ 9~ #n>#M@%M@%M@%M@%M@%BA$}0#}0#}0#}0#}0#}0#}0#}0#}0#}0#yx$yx$~v$~v$,]$,]$Fe$rS$]8$]8$Ax$Ax$i%%Vk$:$%:$%O@%O@%LB$LB$LB$LB$j%%j%%I@%I@%>N$>N$;;%;;%S@%^m$a9$a9$ow$SQ$ow$b9$00$00$vp#!k#4Z+4Z+8=@8=@Q,+2T+W{@W{@Pt+%B+~w+$B+mX+mX+,B+K)@K)@T##jb#jb#tr+tr+tr+tr+:&@:&@:&@:&@>;%Rx#&t@#9@<&@:&@K,@K,@ N+7X+eh#3k#3N#3P#uy#(t#jc@jc@Q;@Q;@oD+u&@`J#`J#Dy#Dy#_i#2f#1f#Rn#mc#mc#Hy#B7#^H$^H$e8+e8+d8+;6+Es$Es$SR#SR#SR#SR#'.$'.$W4@W4@W4@W4@1t#1t#Ly#Ly#5t#%w#z0+}T#>>$I`#'$$|@$|@$|@$|@$T%$T%$U%$F7#F7#X%$X%$DB#DB#DB#DB#DB#DB#&Z#&Z#&Z#&Z#&Z#&Z#&Z#&Z#`n#`n#`n#`n#`n#`n#`n#5@$/l#yf#yf#EB#EB#Af#Af#Af##G#yf#Af#/K#/K#/K#_l#Af#/X#/X#/X#/X#/X#/X#/X#/X#+5#+5#+5#+5#+5#+5#+5#+5#Y4$Y4$c($c($]X#^X#^X#{X#`4#{X#{X#^X#^X#]X#]X#c($]/$Ue$ch$~z#~z#ch$Ue$]/$]/$Ue$Ue$Lx$~z#<$%<$%jU$Lx$~z#jU$'`$V@%'`$jU$<$%V@%V@%V@%V@%V@%V@%V@%V@%.Z$,`$`Y$[$%[$%`Y$.Z$vs$}$%[$%`Y$,`$,`$`Y$[$%^-% #%.#%.#%+#%+#%@#%@#%@#%+#%+#%+#%@#%4$%5$%5$%8$%(-%,;%,;%_-%_-%,;%ed$Ot#,;%';%ed$ed$l.%l.%ed$3w#'N$)N$,z#,z#)N$)N$Ht#Ft#+O#NB#hd$]b$]b$hd$YK$[q$MB#MB#MB#MB#dh$Y4$d,$d,$);%KR$!;%!;%RP$.R$~;%xO$:-%!#%!#%!#%<-%[-%L+%}-%[-%}-%|-%}-%~#%<-%<-%[-%1-%{;%];%];%[#%2=%3=%2=%^;%/;%5-%LC$6-%lK$9X#`1#'X#@K#@G#@G#|T#,|+|T#@G#yB#yB#yB#@G#@G#@K#@K#AB#b,$7-%7-%D+%D+%et#et#et#^$$^$$^$$^$$^$$^$$^$$q'$Sy#UY#@K#@G#zB#)c$7N$>/$)b$kw$$3@v&@69@:V+_T+=w+vD+$B+iy+iy+,B+mX+P)@r;@R,@Q)@,T@!K@CO@CO@CO@!K@ZK+P)@ZK+ZK+w;@w;@YK+4G+zM@9e#!l$~l$bq$bq$Gs$Gs$S@%^m$,p$37$n%$5P#8k#.W$Uv#TR$+@%%/$/H$lF$lF$!k#[{#^N#]N#S[#~^#mZ@| @4Z+,K@,K@]K@!K@DD+x;@^K@8$@3 @3]+2R+Vx$N[#ZO@sz@cX#l4#[=%Pz${c$1i *E &E PC }f }f 9~ 9~ |+'|+My#+I#,6+gw$$`$^ %x0+)|+r:+dd+E:+=g$YA+ZA+`+#s=@od+s~@St+.m+.m++m+sp+ L+ L+ L+-w+@k+1V+y@@y@@z@@b&@H6@(P+K,@K,@K,@ N+OK+ay+ay+@w+@w+Gt+/P+/P+`M+7h$u=@sD+~k+Tt+Tt+}T+}T+Kl+fD+P,@UQ@<|+|{#hF$pw$e;%Mq@>i#4*++++`^@f;%g;%]>#h;%i;%j;%k;%Pq l;%]M$m;%P2+]L$`F@(5@v@%n;%o;%n!+p;%]X@O0 'M+[9 i@ 4. zm.{'$O* vM.vM.O* ZY 6g+]$@be+{! ZW+ZW+ZW+ZW+]%@]%@]%@r)@r)@r)@r)@-V@-V@-V@-V@@$+@$+7}.7}.8}.8}.UH.8}.i~ {! 5A.Ea+Ea+5A.{! be+{! {! {! {! {! {! ", "p} p} p} <| +_ O_ ;] M+ ;] O_ +_ <| 5c 4c 4c ie ie je je je je xn.xn.J6 J6 xn.je je ie le le xn.je je ie ie je je xn.je le ke le je je ie :j.@n ce 9%.V>.G^$G^$!{@~*% Q% N@ Z* 9C+,a@zz+q;%hC+r;%`=%(*%-=%&F.Db@s;%Ch@|m+28@t;%u;%u;%3l$G6 25 Wu 9f Nr#NX#Q}$pC$v;%w;%bG+x;%y;%.!+z;%<'@Qj#'-@EO#6G#_&#TA#O)$QO@A;%A;%Iu$Ab$1H$r0+Kg+-k+Kg+Kg+RR#SR#g($g($//$f9$f8$57$;6$3t#%2+Es$%2+hd+hd+hd+7[+7[+5[+6[+>|+>|+L`#+2#F2$5[+@K#Y3+'|+;|+7[+7[+7[+7[+;|+;|+'|+'|+Y3+Y3++K#.K#.K#7q$gd+Tx$Nr$$2+;|+'|+'|+'|+>|+6[++2#F2$&;%&;%L`#+2#&;%F2$>|+,|+6[+4[+;|+;|+hd+hd+hd+hd+gd+H#$q:+q:+q:+q:+8[+8[+8[+8[+gd+gd+$2+Nr$$2+%2++K#My#YM$YM$YM$s0+s0+cO$In$sq#7q$7q$7q$7q$Es$Es$Es$fd+B)$/6+B)$B)$B)$B)$fd+fd+ ;$ ;$.K#.K#X3+X3+Y3+Y3+Y3+@K#@K#>|+d %S*%@*%S*%W_$W_$+ $+ $|X#|X#/$$/$$}q$U_$1X#Ai$uT#RR#Nn+n0+-.$W_@dk@4O#{-##{#$c$>M 2r@9~ }f Z;$Z;$}f 9~ 9~ 9~ 9~ ;%fz@wI+5T+fD+|R+PK+Kl+K,@fh#eh#eh#7X+ N+p;@p;@u=@jc@v=@`+#oD+oD+3&@3&@bc#bc#2f#2f#Rg+Un#`H#ML#>6+&2+/>$;6+Es$In$W+$#w#D_$1t#w!$l'$D;%D;%W4@W4@W4@W4@1t#1t#Ly#Ly#%2+%2+}T#}T#E_$E_$E7#E7#U%$T%$|@$E7#|@$T%$*2#-2#X%$X%$di#(l#SP#SP#(l#DB#}X#mV#mV#&Z#4*$`n#`n#E;%4*$4*$4*$($$($$&Z#&Z#~X#8V#/K#_l#_l#Af#EB#EB#EB##G#yf#yf#EB#EB#Af#_l#_l#{/$+5#+5#/X#:X#:X##5##5#Cc#/X#Lx$]/$#5#zf#:X#]/${X#^X#c($Y4$Y4$c($]X#^X#{X#]X#c($Y4$Y4$c($]X#{X#Lx$Lx$Lx$Ue$]/$]/${/${/${/$+5#+5#]/$~z#jU$jU$<$%~z#ch$Lx$Ue$Ue$ch$<$%jU$jU$jU$'`$V@%q&%q&%k%%k%%[$%}$%|$%}$%,`$.Z$,`$`Y$.Z$,`$`Y$[$%}$%}$%}$%2$%7$%@#%@#%@#%@#%@#%@#%@#%+#%+#%@#%@#%4$%4$%4$%8$%,;%k%%k%%q&%q&%q&%V@%V@%q&%q&%q&%V@%V@%'`$'`$l.%l%%l%%0$%It#_o#Hc#Ot#{N$~z#~z#gr$Jj$Jj$dh$dh$dh$+O#NB#MB#Pt#Y4$Jj$c,$JP$d,$c,$KV$KV$dm$dm$.R$yO$F;%G;%%X$H;%E*%I;%J;%J;%I;%I;%F*%F*%E*%E*%E*%E*%v.%b*%j$%1=%k$%v%%2=%3=%/;%K;%L;%5 %*X$rU$9X#.2#F2$'X#AB#AB#1T#L`#'X#AB#)c$!c$AT$AT$AT$)c$AB#1T#b,$~>$OP#Xy#!X#VY#K`#5*$OP#OP#OP#OP#OP#OP#OP#Sy#M;%N;%Y+%=w#!c$)c$7N$;6$b0$kw$$3@.}#[G+eK@VH@up+sr+vD+vD+xD+,B+K)@t<@P)@r;@s;@,T@,T@DO@W.@W.@8G+ZK+0~@W{@c^@S,@S,@kX+wp#J #4Z+hX+_P+*6$00$cN$hU$;;%5G$a9$_8$pw$I$+/'$/'$TR$+@%GO$)I$~J$WL$WL$!k#00$zA#yA#]N#mZ@~^#U<#U<#,K@)K@]K@!K@DD+x;@^K@^K@t;@2T+jX+]N#D~$-I@ja@63@{-#O;%K@%P;%[,$*E u1$Lv }f }f }f }f }f }f }f }f }f }f 9~ 9~ %.>%mU$xS$+>%ir$ir$$Z$IV$@>%@>%#>% R$TP$H*%xU$yO$xO$xO$yO$$>%yO$+R$d-%d-%d-%PR$c;%yD$%>%*y${-%@*%e<$S[$S[$sT#@2#@2#+2#|T#+G#.K#)6+,6+gw$i8+^ %:[+x0+r:+/6+dd+]|+2$@ZA+t&@s=@lD+H2@lp+}w+Zn+3V#IZ@St+^/+Yn+.B+Q0+&4+):@T{@uI+uI+uI+Kl+Kl+}R+OK+OK+ N+(t#(t#1N#`M+/P+Gt+]P+7h$_t#9F$p=$}&@]/+]/+ur+ur+Kl+fD+6T+I@@F@@bN$46+9~#.l#6Z.X@+)%@/Y.3#+&>%*>%:Q+=>%!G$->%`T@ER@C;$Qp ~}+Ag@Pp@j>@;>%/Q+>>%,>%'>%n!+9/.}/.-$.9: 9* '; )>%%]${! Yt.Yt.Yt.Yt.{! {! {! {! ZW+ZW+]%@]%@]%@]%@!>%n9$r)@L*+%]$vn.wn.)g@f+#ko.ko.8}.8}.7}.7}.;q.z<.,v.8g.be+be+{! {! ]! ]! 5A.`Y ti 8g.Ea+{! ", "p} p} p} <| +_ O_ ;] O_ O_ +_ +_ <| p} 5c 5c je je je je je je je je xn.xn.je je je je ie ie xn.je ie ie ie ie je xn.je le ke le je je ie :j.@n ce 9%.9%.G^$G^$!{@!{@nI.nI.Qw.ke 8c ,' 6c U+ k& l# )- 2> ~>%q;%{>%]>%Di ^>%/>%(>%_>%20@70@58@qj@xp xp jq HC J:@sd SM..|$XC#j2@ Q$:>%<>%[>%xk$}>%|>%}<+1>%2>%3>%4>%FO#GR$U #zj$Sk$5>%Hu$7j$3(@~-%v:+*f+Kg+*f+*f+m%$SR#g($g($I#$//$f9$f8$f8$:@$%2+Es$%2+hd+hd+hd+7[+7[+2u$hD$5[+>|+L`#L`#L`#L`#|T#'|+;|+7[+7[+7[+;|+;|+;|+;|+'|+'|+Y3+Y3++K#.K#My#In$Es$gd+$2+hd+'|+'|+;|+;|+6[+6[++2#+2#F2$F2$L`#+2#&;%F2$L`#,|+6[+5[+;|+;|+;|+hd+hd+hd+gd+gd+fd+B)$B)$B)$fd+fd+fd+fd+gd+gd+Nr$Nr$Nr$$2+'|+Y3+$2+gd+Tx$YM$s0+YM$Es$ ;$Es$Es$Es$Es$Es$Es$Es$fd+B)$/6+B)$B)$B)$B)$fd+fd+ ;$My#.K#+K#Y3+Y3+|T#,|+,|+|T#|T#6[+d %S*%S*%KC$W_$@2#+ $+ $|X#g@$/$$/$$_N${b$7X#c%%Z%$SR#N2@o8+dz@W_@S)@)Z#{F$#{#$c$;M .~ 1+in$[=%r[#Qz$6>%v[#aE$:0$:0$:0$bX#bX#4F$!Z#!Z#C~$C~$Uz$Uz$Uz$TH#TH#TH#}0#}0#yx$yx$~v$~v$,]$,]$~v$~v$~v$~v$~v$~v$~v$~v$rS$rS$Ry$Ry$kn$kn$A+%A+% v@B;%O@%O@%LB$C;%B4#Wy$5d$5d$5d$5d$Cj$Cj$^m$^m$^m$^m$cN$cN$bq$bq$bq$bq$o&%]v#/s#Qm#4Z+fX+7=@7=@2T+2T+W{@ky+%B+%B+~w+~w+P,+P,+,B+,B+,B+,B+6o@6o@{k@{k@L)@L)@:&@:&@:&@tr+L)@jb#>;%fz@tr+wI+|R+<&@PK+Kl+K,@fh#eh#eh#7X+ N+p;@p;@u=@jc@v=@`+#oD+oD+3&@3&@g0#g0#Qg+Qg++w#mc#`H#ML#>6+&2+;6+;6+7q$In$W+$W+$#w#D_$2t#w!$l'$l'$W4@W4@W4@W4@1t#1t#Ly#Ly#%2+%2+}T#}T#E_$E_$E7#E7#T%$|@$E7#'$$E7#|@$F7#*2#0($X%$DB#77$(K#>}#(l#di#}X#mV#&Z#&Z#4*$4*$`n#E;%4*$4*$($$($$($$&Z#&Z#~X#8V#/K#_l#_l#Af#Af#EB#EB#EB#EB#EB#EB#Af#Af#Af#Af#+5#+5#/X#/X#/X#/X#:X#:X##5#{/$ch$Lx$+5##5#+5#Ue$c($c($Y4$Y4$c($]X#{X#`4#^X#]X#c($Y4$Y4$c($]X#^X#Ue$Ue$Ue$]/${/${/${/$+5#]/${/${/$Ue$<$%'`$jU$<$%~z#~z#ch$Lx$ch$~z#jU$'`$'`$'`$V@%q&%k%%2$%^-%^-%[$%}$%|$%}$%,`$.Z$,`$[$%,`$,`$[$%}$%}$%}$%}$%2$%r&%4$%4$%4$%4$%4$%4$%4$%@#%@#%@#%4$%4$%5$%5$%8$%,;%k%%k%%q&%q&%q&%V@%V@%q&%q&%q&%V@%V@%'`$'`$'`$l.%l%%0$%It#_o#_o#!z#{N$~z#~z#gr$Jj$Jj$Jj$dh$dh$+O#NB#MB#Pt#Y4$dh$KP$c,${>$c,$KV$KV$c$%c$%~;%H*%t=%G;%%X$H;%H;%E*%F*%F*%I;%I;%F*%F*%E*%E*%E*%H;%!#%~#%7>%1=%1=%v%%8>%9>%/;%0>%~A$5 %*X$rU$a>%c%%+2#'X#zB#zB#1T#'X#1T#AB#zB#)c$!c$!c$!c$zB#AB#1T#~>$~>$~>$OP#Xy#!X#!X#VY#OP#OP#OP#OP#OP#OP#OP#Sy#;w#-w#=w#pd$!c$!c$7N$>/$b0$kw$$3@v&@[G+|G+ur+-w+sr+vD+vD+)w+,B+K)@t<@t<@R,@R,@,T@,T@DO@DO@F@@DD+>B+0~@ky+W{@|V+|V+kX+7=@J #4Z+hX+_P+Wx$[{#cN$S@%>N$8F$Dj$qw$37$b>%/'$/'$TR$+@%/H$)I$WL$!l$!l$[{#N1#zA#yA#yA#M+#mZ@| @| @[H#[H#RQ@]K@,T@DD+k#$mq@s;@Q,+5$@M+#I1#QX.Nu#U_#%X#}_$($%$B$=S }f &E Kv }f }f }f }f }f }f }f }f }f }f 9~ 9~ @M_@Ui+ 9@DZ$7l$c-%PR$c>%*Y$$.%3=%d*%g/$*.%d@%d@%`i$d@%[;%|+%|+%.%%V&%B.%B.%U&%S;%S;%T;%I&%H&%d>%u9$m*%nY$]V$e>%wT$wT$n-%E*%E*%s=%{;%}-%f>% >% >% >%g>%h>%xS$uS$+>%ir$ir$$Z$i>%j>%k>%l>%.R$yO$$>%$>%H*%xO$xO$yO$xU$yO$+R$d-%d-%d-%m>%=Z$*y$*y${-%{-%e<$Y_$g@$|X#X4#sT#W_$L`#1T#@G#+K#!6+'6+C7#^H$`3+)|+)|+B)$/6+E:+bc##l#YA+s=@t&@od+Z(+ki+}w+Zn+3V#IZ@St+^/+Yn+fy+Q0+&4+):@0y+uI+uI+uI+Kl+Kl+}R+OK+OK+OK+(t#(t#`M+/P+Gt+Gt+{P+7h$Wv#@p$]/+RO@]/+I6@ur+fy+FD+O,@'_#DM@/'$n>%9~#8T+gi$KD++++o>%Wm+p>%q>%r>%s>%~b ->%Qe #-#]M$;K.Ag@(R@PH#42 v4$I +,>%t>%u>%v>%{;$iH+Yd et Y n& 0I+w>%x>%{! Yt.Yt.Yt.{! {! {! ZW+ZW+ZW+]%@]%@]%@]%@!>%!>%15+$]$%]$r)@vn.wn.)g@35+ko.ko.8}.8}.7}.7}.;q.z<.,v.8g.be+be+{! {! ]! ]! 5A.`Y pj be+Ea+be+", "<| p} p} p} <| +_ O_ <| <| <| <| <| <| <| <| J6 J6 xn.je je ie le le ie ie je je je je xn.xn.je je ie le le ie je je je le ke le je je ie :j.@n ce 9%.9%.G^$G^$!{@!{@8V$!K.WD+HO.le 9c ,' u& )* M) 3! @,$y>%NI$94 A+z>%oy$A>%0n$>L@D2.}b@|m+X:#oh@QY@.3 xy@>(#j0$S#@ih SY#r1$B>%h7#RK$7W.%S+C>%D>%E>%F>%c#%w|+j3#4>%G>%XM$Pi+|o@H>%X<@.9@z6@Qd$I>%t:+ad+ad+ad+*f+-k+m%$m%$m%$I#$I#$I#$I#$I#$%2+!6+!6+~6+A0+A0+#;$#;$:z$2I#@;$$;$!X#!X#!X#>X#>|+7[+7[+7[+7[+;|+'|+'|+;|+;|+'|+'|+Y3+Y3++K#.K#My#In$7q$Es$%2+%2+'|+Y3+4[+4[+6[+6[++2#+2#L`#L`#VY#K`#+;$@;$,X#>X##;$w'$^>$A0+A0+A0+~6+~6+~6+gd+`-$TR#TR#TR#W+$W+$W+$W+$I#$I#$vT#vT#y:+vT#6|$/6$%2+%2+%2+Nr$-|+-|+Nr$%2+$2+$2+hd+hd+hd+hd+hd+gd+B)$/6+/6+B)$B)$fd+Es$Es$.K#.K#+K#|T#|T#,|+'X#'X#F2$L`#L`#+2#d<$Y_$X_$d<$+ $+ $}X#}X#}X#/$$e0$e0$J>%8X#S_$K>%f($#w#Jt+&4+)[+W_@.*+UL$q!$},$k9$ll Zi@es %v[#aE$:0$1K#1K#S_#S_#3d$TF#TF#NW$NW$)Z#eN$eN$eN$eN$eN$}0#}0#yx$yx$~v$~v$,]$,]$~v$~v$~v$~v$~v$~v$~v$~v$rS$rS$Ry$Qy$~m$ns$CM#CM#fE# v@L>%O@%LB$LB$C;%C;%5d$5d$5d$5d$Cj$Cj$^m$^m$5G$^m$cN$cN$bq$bq$bq$bq$]v#Qj$Qm#!k#fX+gX+3G+3G+2T+2T+W{@ky+%B+%B+~w+~w+#a@#a@K)@,B+,B+,B+|=@|=@{k@{k@{k@L)@<&@:&@:&@tr+L)@6o@jb#6o@L)@L)@{k@fz@fD+FD+K,@:x@:x@:x@7X+ N+p;@p;@p;@eK@v=@`+#`+#`+#dy+dy+]|+]|+]|+]|+q7#i0#sB#tB#e8+d8+Es$Es$W+$#w#SR#W+$9q$kw$og@M>%M>%N>%em$em$em$em$#w##w#In$In$%2+%2+}T#}T#E_$E_$E7#E7#E7#E7#'$$'$$'$$E7#`A$`A$=2#0($bi#DB#77$(K#(l#77$mV#mV#&Z#($$($$4*$`n#`n#4*$($$($$($$&Z#&Z#mV#6T#8V#/K#_l#_l#_l#Af#Af#Af#_l#_l#_l#Af#Af#Af#Af#EB#/X#/X#/X#/X#/X#+5#+5#+5#/X#Ue$<$%~z#]/$+5#]/$ch$dh$dh$dh$Y4$c($^X#`4#7V#^X#]X#c($c($c($c($]X#^X#]/$]/${/${/${/$+5#+5#+5#Ue$]/$]/$Lx$<$%'`$jU$<$%<$%<$%~z#~z#<$%jU$'`$V@%V@%q&%q&%k%%2$%^-%O>%O>%[$%}$%|$%}$%`Y$,`$`Y$}$%`Y$`Y$[$%}$%|$%|$%}$%^-%r&%4$%4$%4$%4$%4$%4$%4$%4$%4$%4$%4$%5$%5$%6$%l%%k%%`Y$`Y$,`$,`$,`$.Z$.Z$,`$,`$,`$.Z$.Z$vs$vs$'`$P>%Q>%Q>%Vq#R>%ws$Nt#2w#FP$FP$@l$@l$ u$ u$ u$dh$NB#MB#MB#Pt#Y4$Y4${>$KP${>$c,$KV$!;%RP$.R$v=%xU$S>%%X$%X$%X$%X$%X$%X$%X$F*%F*%F*%E*%E*%H;%H;%H;%[-%L+%{;%3-%1=%v%%8>%/;%T>%0>%~A$U>%*X$rU$a>%c%%+2#'X#zB#zB#AB#1T#AB#)c$AB#zB#zB#)c$zB#AB#1T#'X#`_$`_$`_$`_$`_$`_$BB#BB#BB#BB#BB#BB#BB#BB#BB#AB#,/$Ry#yB#pd$!c$AT$V>%W>%b0$9q$:1@v&@69@:V+}T+@k+sr+1R+vD+)w+|=@6o@t<@t<@P)@P)@k#$E+$SQ@SQ@SQ@fm$mX+&B+zD+ky+< @< @T,@7=@J #4Z+nZ@7V@00$[{#lw$O[#>N$DP$Dj$,p$47$pw$/'$/'$/'$bN$/H$)I$WL$!l$!l$[{#N1#zA#yA#{^#nZ@nZ@fX+gX+X>%X>% @%RQ@fm$,T@E+$k#$,T@w;@>K@7V@c=@ty#yF@)/#:-#Y>%Z>%in$+x+9~ Kv Eu }f }f }f }f }f }f }f }f }f }f 9~ 9~ %c-%x-%*Y$$.% ,%c=%g/$*.%3P$w8$w8$3P$[L$i=%c@%.,%.,%.,%.,%T&%T&%T&%T&%H&%xZ$h=%g=%+,%oY$e>%@,%#,%$,%%,%G*%[-%t&%t&%!#%&,%*,%*,%*,%=,%-,%;,%kU$kU$>,%>,%;,%,,%',%),%!,%nU$f>%~,%f>%|N$}N$}N${,%],%{,%wO$vO$wO$vO$FS$BM${-%*y${-%{-%Y_$X_$+ $&Z#i@$m@$tT#'X#AB#@G#+K#}T#'6+C7#A7#A7#.I#QL#B)$dd+h0#=l##l#dy+nD+t&@Nb+kp+Mn#:v$af#af#*m+WN#~k+&m+Tt+^_+Zg+s~@qy+b$@_T+b$@PK+PK+Kl+Kl+OK+OK+OK+ N+@w+@w+nI+nI+Gt+/P+7h$[a@8X+!k+~k+I6@ur+.B+tr+my+CD+{K@46++l#4h#^,%/,%-{+(,%H-+/V._,%:,%<,%[,%qd#{Z#FT $-#;K.CJ.},%t[$Q:+Y-+W`.|,%1,%>Q 2,%>>%3,%4,% 2 r2 :+ tJ b $w>%25+{! Yt.{! {! {! {! ZW+ZW+ZW+]%@]%@]%@!>%!>%!>%!>%15+n9$$]$$]$wn.zm.vn.)g@ko.ko.8}.8}.7}.7}.;q.z<.,v.8g.be+be+{! {! ]! ]! 5A.gA YY be+5A.be+", "<| <| p} p} <| +_ O_ p} p} p} <| +_ +_ +_ O_ up.up.J6 xn.ie le ke ke le le ie je je xn.J6 J6 je ie ie le le ie ie je je le ke le je je ie :j.@n ce 9%.9%.G^$G^$!{@!{@5,%8V$KI$XD+K6 le 8c &% =$.6,%K= ~0 =a c 7,%')@]*%8,%ny$0n$>L@D2.|b@0Y#70@X:#oh@tn@ 3#xy@3l$IA@60 7|@km@-($9,%0,%7r$a,%b,%c,%J|+,($:'+q_+!<+kD@4>@_h$V/$ez@k(@d,%e,%f}@[J$f,%c~+$_+&_+&_+ad+Kg+;k+-k+m%$m%$m%$m%$(/$Nr$!6+!6+!6+~6+A0+A0+#;$#;$2I#D0+@;$,X#VY#VY#VY#,X#5[+4[+4[+4[+7[+;|+'|+Y3+;|+;|+'|+'|+Y3+Y3++K#.K#My# ;$In$In$X3+X3+Y3+Y3+;t$;t$5[+6[++2#L`#'X#'X#VY#K`#+;$5*$,X#>X#$;$w'$^>$^>$A0+A0+A0+~6+~6+~6+SR#X1#X1#X1#SR#SR#SR#SR#I#$g($/6$vT#y:+y:+z:+;_+;|+%2+%2+$2+-|+-|+Nr$%2+Nr$Nr$Nr$$2+$2+$2+hd+gd+B)$/6+/6+/6+fd+fd+Es$Es$.K#+K#|T#|T#1T#'X#'X#'X#d %F2$+2#F2$d<$Y_$d<$@2#|X#|X#}X#}X#/$$/$$e0$e0$An$ $g,%h,%5|$D_$='@u)+De@>(@HK$i,%j,%GT#o!$Cm :e cP@es es es es cP@s[@%O@%k,%k,%k,%LB$5d$5d$5d$5d$Cj$Cj$^m$^m$5G$5G$sS$cN$bq$bq$bq$b9$Qj$[{#!k#vp#gX+2R+[V+[V+2T+2T+W{@ky+%B+%B+~w+~w+M2@0~@T##K)@,B+,B+}=@}=@fz@fz@{k@{k@<&@<&@:&@tr+}=@|=@6o@6o@fz@fz@Rx#>;%|R+|R+K,@:x@:x@:x@ N+ N+p;@p;@p;@eK@v=@`+#`+#`+#dy+dy+]|+F:+F:+F:+=2+V4#sB#tB#e8+>6+7q$7q$#w#D_$SR#SR#9q$9q$ve@og@og@og@em$em$em$em$#w##w#In$In$%2+%2+}T#}T#E_$E_$E7#E7#'$$'$$'$$'$$'$$E7#W4$W4$Ye$0($#I##I#DB#(l#(K#(l#mV#&Z#&Z#($$($$4*$4*$`n#($$($$($$&Z#&Z#mV#mV#6T#8V#/K#_l#_l#_l#_l#_l#_l#bV#bV#/K#_l#_l#Af#EB#EB#:X#:X#/X#/X#+5#{/${/$]/$+5#Ue$~z#~z#Ue${/$]/$Lx$Y4$Y4$c($c($]X#^X#^X#{X#]X#]X#]X#c($c($]X#]X#]X#+5#+5#+5#+5#+5#+5#+5#+5#Ue$]/${/$Ue$~z#jU$<$%~z#jU$jU$jU$jU$jU$'`$V@%V@%V@%V@%q&%k%%2$%2$%^-%^-%`Y$}$%|$%|$%`Y$`Y$[$%|$%[$%}$%|$%|$%1$%|$%}$%^-%r&%4$%4$%4$%4$%4$%4$%4$%4$%4$%4$%5$%5$%6$%6$%l%%k%%`Y$`Y$,`$,`$,`$.Z$.Z$,`$,`$,`$.Z$.Z$vs$vs$'`$l,%Q>%m,%Bw#Wq#R>%dd$l,%FP$FP$#l$@l$@l$ u$ u$ u$NB#MB#MB#Pt#Y4$Y4$d,$d,${>$c,$KV$n,%v=%ES$I*%$>%G*%H;%H;%%X$%X$G;%G;%w.%F*%F*%E*%E*%E*%H;%H;%H;%}-%|-%|-%o,%2-%u%%e*%/;%T>%p,%d;%*X$AS$EM$2X#I.$Z_$'X#zB#)c$AB#AB#zB#!c$AB#AB#AB#AB#AB#AB#1T#1T#`_$/b$/b$/b$/b$/b$>X$>X$BB#BB#BB#BB#BB#BB#BB#AB#Sy#UY#@G#yB#!c$AT$q,%r,%b0$kw$:1@='@_V+:V+_T+=w+-w+1R+vD+)w+|=@6o@t<@t<@O)@P)@k#$E+$,_$,_$1#%|#%mX+yD+=B+=B+6=@6=@:P+7=@J #4Z+M+#nZ@[{#Qj$lw$mw$>N$j%%^m$Ej$_8$d8$iF$/'$/'$bN$/H$lF$!l$!l$b8$[{#N1#zA#{^#{^#7V@BO@2R+2R+X>%[H# @%RQ@fm$,T@k#$k#$x;@R)@YK+CI+^-+.}@s,%z>#1f+%/#i9$GC$Q-$;P H)$c.#E'$}f }f }f }f }f }f }f }f }f 9~ 9~ Q#zx#Rc$Qb$I+@I,%J,%K,%5R#L,%M,%zy@aP@8~ iQ >z |##DJ.j1$|A.a|@Su Cy N,%O,%>Q >Q P,%!C+Q,%M3.)~ [| =8.v~.R,%lg.{! Yt.{! {! {! {! ZW+ZW+]%@]%@]%@]%@!>%!>%!>%!>%15+15+n9$15+wn.wn.wn.vn.ko.ko.8}.8}.7}.7}.;q.z<.,v.8g.be+be+{! {! ]! ]! Ea+w8.`Y be+]! 8g.", "+_ <| p} p} <| <| +_ 5c 5c p} <| +_ +_ O_ O_ up.up.J6 xn.ie le ke ke le le ie je je xn.J6 J6 ie ie le le le le ie ie je le ke le je je ie :j.@n ce 9%.9%.G^$G^$!{@fx ^/@8V$KI$XD+K6 le ke l` G6.S,%E+.]* M) k# )h$p> Ke+T,%$: #.$48@vj@70@|m+/j 90@U,%^]#EW$iO@IA@IA@XZ }a B[@ry#A~$l %V,%JS$W,%dj$a>+X,%=&$t(@Y,%B^@]x$8!@N^@M^@5B@{z@Z,%s|$`,% '%'-%`5+c~+$_+0d+s:+Lg+=k+-k+-k+-k+-k+pF$cO$!6+E_$E_$8,$|@$|@$T%$T%$W4$W4$X%$X%$X%$^b$(l#&2#5[+4[+;t$;t$4[+7[+'|+Y3+;|+;|+'|+'|+Y3+Y3++K#.K#My# ;$ ;$In$.K#X3+Y3+'|+;t$;t$5[+6[++2#L`#'X#'X#VY#di#=2#^b$X%$q'$`A$F7#|@$|@$|@$8,$8,$8,$8,$~6+m%$:C#xT#xT#xT#xT#oW$oW$$ $$ $$ $I2$U[$# $;%>;%:&@:&@|R+|R+K,@K,@K,@K,@VH@VH@p;@eK@]/+sD+`+#`+#YA+YA+mi+{_+F:+=g$Vg+=2+hf#Ly# ;$ ;$#w#D_$D_$D_$9q$9q$we@ve@ve@ve@bP$og@em$em$em$em$#w##w#In$In$%2+%2+}T#}T#E_$E_$E7#E7#v.$v.$'$$E7#E7#E7#q'$q'$=2#X%$2T#2T#DB#77$(l#(l#&Z#&Z#($$($$($$($$4*$4*$($$($$&Z#&Z#mV#mV#}X#8V#6T#_l#/K#/K#/K#/K#/K#/K#%m,%Q>%Vq#Wq#2w#l,%#'%#'%#l$#l$@l$@l$ u$ u$NB#NB#NB#NB#dh$Y4$e($e(${>$c,$KV$$'%I*%%'%%'%p-%&'%*'%*'%M+%`&%pY$pY$*&%*'%*'%*'%M+%M+%M+%`&%%X$='%}-%}-%7>%j$%u%%T>%4=%-'%p,%5 %=Z$BM$yL$2X#nV#@2#tT#BB#`_$BB#BB#`_$>X$BB#BB#CB#CB#CB#BB#BB#BB#/b$/b$/b$/b$>X$>X$>X$>X$BB#BB#BB#BB#BB#BB#BB#AB#Wy#5V#@K#@G#!c$AT$q,%r,%)b$@}#$3@v&@69@:V+_T+=w+-w+1R+1R+#B+|=@6o@a=@t<@t<@t<@E+$E+$Y/$;'%1#%>'%#a@yD+xI+C@@1G+6=@r<@8~@~g$} @M+#M+#]N#S[#9-%mw$DP$j%%5G$a9$c9$d8$iF$I$+/'$bN$kF$lF$!l$!l$b8$[{#N1#zA#{^#{^#7V@BO@2R+2R+,K@,K@]K@!K@DD+x;@mq@^K@cB@w;@YK+]-+S;+#{5@73@kx$+{#Q-$;P H)$c.#E'$}f }f }f }f }f }f }f }f }f 9~ 9~ OM.e~#6=%tD$''%fi@U~+um#7h+am+Kp$'t$)'%u,%!'%D=%B=%NC$ j$iQ$v|$/}$9c$/}$]o$M`$Y'$H&%r %y,%r %x,%N&%^`$N&%^`$d>%g=%g=%m*%M+%e>%-&%L*%%'%~'%f>%{'%A,%<-%t%%]'%^'%G,%*,%C,%/'%/'%E,%E,%!,%*,%/'%+M$*,%B,%/'%q.%`;%Z;%Z;%('%sT$!;%!;%sT$$'%sT$!;%n,%n,%!;%m%%yL$@*%&y$S*%KC$d<$rT#4*$`n#H,%i@$m@$CB#zB#@G#@K#}T#'6+!w#ML#Jy# G#>f+ed+/6+_i#;E##l#gi+nD+v=@p=$:k+WN#:v$Wt$Q4#WN#Mn#*m+af#)k+%4+s~@Zg+^_+Tt+_T+Q0+1V+1V+z@@z@@fD+Kl+(P+(P+(T+ay+ay+@w+@w+tI+tI+eK@)k+'B+kr+.m+-w+1R+ny+X.@nz#Kq@9k#k)$56+g<#E-%J+@_'%DL :'%<'%[,%{#.|C V:@:,@1k fp ]*@aU$['%v|@$5+}'%|'%1'%2'%1,%3'%c9.p2 4'%`% YJ+90+c8 zh.5'%15+ZW+{! {! {! ZW+ZW+ZW+ZW+]%@]%@!>%!>%!>%!>%6'%!>%n9$15+15+15+wn.vn.wn.wn.ko.ko.8}.8}.7}.7}.;q.z<.,v.8g.be+be+{! {! ]! ]! Ea+8g.gA be+{! w8.", "+_ <| p} p} p} <| <| p} p} p} <| +_ +_ O_ O_ J6 J6 xn.je je ie le le ie ie je je je je xn.xn.ie le le ke ke le le ie je le ke le je je ie +h.@n de 9%.9%.G^$G^$fx fx 7'%7'%KI$KI$WD+HO.Qw.mI.8'%eR /l.:k@s$ j# >- yi ~F+y: 9'%vv 40@vj@70@90@2b@+6#@j@X:#tn@0'%a'%j0 EQ+bf b'%!#+U{$]F$c'%d'%e'%f'%b,%g'%Q.$3:@U @Y,%h'%O^@V~@1]@mF@jK$b`$q7$TH@i'%j'%`5+`5+a0$0d+Gg+._+=k+=k+Lg+;k+;k+;k+gd+!6+E_$E_$8,$|@$|@$T%$T%$q'$q'$^$$^$$0($^b$(K#;}#6[+4[+;t$;t$;t$4[+7[+;|+;|+;|+'|+'|+Y3+Y3++K#.K#X3+In$In$In$.K#X3+'|+;|+4[+4[+6[+6[++2#+2#L`#,X#ci#di#=2#^b$X%$^$$`A$F7#|@$|@$|@$|@$8,$8,$8,$~6+m%$:C#xT#xT#xT#xT#oW$oW$I2$$ $$ $$u$3v$U[$# $y:+;_+Nr$hd+hd+Nr$Nr$hd+X3+Nr$Nr$Nr$$2+hd+%2+X3+7q$B)$/6+/6+/6+fd+fd+Es$Es$Y3+Y3+1T#'X#)X#tT#X4#tT#X_$&;%W_$@2#X_$Y_$g@$+ $f@$f@$f@$f@$e0$e0$e0$Z4#k'% $l'%m'%5|$$w#='@u)+De@cZ.bE$9/$oC$Uv #p@ml :e cP@cP@es es cP@cP@s[@cP@cP@es es es %xR#Jy$Ky$:0$1K#1K#S_#S_#3d$TF#TF#NW$NW$)Z#eN$eN$eN$eN$eN$}0#}0#yx$yx$~v$~v$,]$,]$~v$~v$~v$~v$~v$~v$~v$~v$rS$rS$Ry$Qy$~m$ns$CM#CM#B;%B;%O@%+'%o'%k,%k,%LB$5d$5d$5d$5d$Cj$Cj$^m$^m$S@%S@%sS$sS$bq$b9$b8$b8$]v#Qj$Qm#!k#fX+gX+3G+3G+2T+2T+W{@ky+%B+%B+~w+~w+0~@0~@T##T##T##K)@6o@6o@Rx#fz@fz@fz@#9@#9@<&@L)@|=@w)+ED+}=@6o@;I$Rx#fz@<&@:&@|R+FD+(P+(P+K,@K,@VH@VH@p;@eK@]/+sD+`+#`+#ZA+ZA+b[+mi+]|+F:+Vg+=2+-l#Ly#Ly#Ly#1t#1t#D_$D_$kw$kw$ve@ve@og@og@p'%og@ai@em$em$em$#w##w#In$In$%2+%2+}T#}T#E_$E_$E7#E7#v.$'$$E7#|@$|@$|@$W4$q'$0($^$$#I##I#di#77$77$di#($$($$($$($$($$($$($$($$&Z#&Z#&Z#mV#mV#}X#}X#8V#6T#_l#/K#/K#/K#bV#bV#bV#%T>%u%%p,%5 %t'%CM$yL$U_$nV#|X#W_$CB#BB#CB#CB#BB#/b$`_$BB#BB#CB#BB#`_$/b$/b$>X$>X$/b$/b$/b$/b$/b$/b$BB#BB#BB#BB#BB#BB#BB#AB#Wy#5V#@K#@G#)c$!c$V>%W>%,c$2t#S%$.}#[G+:V+}T+vr+-w+1R+1R+#B+|=@6o@a=@a=@Q,@5o@A%%A%%Y/$;'%1#%|#%M2@%B+xI+C@@1G+< @,}@u'%8=@U.@mZ@mZ@S[#S[#9-%mw$DP$j%%DP$^m$Ej$_8$iF$I$+/'$bN$kF$lF$!l$!l$b8$[{#N1#zA#yA#{^#nZ@nZ@fX+gX+,K@)K@]K@!K@DD+x;@^K@^K@cB@!K@)K@]-+J4# B$Xy$v'%w'%l+#oC$16$x'%w~$u~$q<$E'$}f }f }f }f }f }f }f }f }f 9~ 9~ |-@to@S^$,/#.*+Ux#j|+z'%SJ@uB+A'%B'%Mp$C'%D'%E'%t9$yZ$zh$S)$1}$M1$M1$9c$]o$M&%_}$a`$a`$a`$a`$_}$iW$iW$6S$6S$u9$g=%m*%nY$`&%=&%L*%u=%~'%I*%],%],%{'%F'%G'%H'%@M$G,%*,%/'%/'%/'%/'%C,%I'%B,%+M$+M$oU$oU$pU$LV$ >%`;% >%nU$n,%KV$!;%sT$sT$n,%!;%n,%n,%!;%J'%K'%KC$<=%KC$/$%|X#rT#4*$`n#i@$`n#X4#)X#BB#zB#@K#}T#wB#)w#LL#LL#>f+W4#Nn#E:+Qg+cf#2$@gi+nD+v=@p=$:k+*m+Q4#Q4#:v$Mn#Mn#*m+af#-m+,k+s~@O0+}]+Tt+_T+Q0+1V+vI+1V+z@@z@@fD+Kl+Kl+(T+ay+}R+OK+(t#(t#tI+ur+kr+0c#.m+BR#oy+:w+;B+-K@}|++l#_'$# +X@+, $pD#UZ.qT.L'%ek#KM$ZE aP@;! /d@_t ,J gp W3@LM.B[@Ye.M'%3O$R-%fr 9` N'%O'%P'%NO K- y#.x,.GA+3x.<9.0>$);$ZW+{! {! {! ZW+ZW+ZW+]%@]%@]%@!>%!>%!>%!>%6'%6'%$]$n9$ef.15+)g@)g@vn.wn.ko.ko.8}.8}.7}.7}.;q.z<.,v.8g.be+be+{! {! ]! ]! Ea+be+w8.{! {! gA ", "O_ +_ <| p} p} p} <| <| <| <| <| <| +_ +_ +_ je je je je je je je je xn.xn.je je je je ie ie ie le ke ke ke ke le ie je le ke le je je ie +h.@n de 9%.9%.G^$G^$fx fx Q'%Q'%rI.rI.~K.Qw.HO.kb.ZL.8%..4.V5.q& If.Z* tr.mK+R'%OI$~l FC .6@J[@80@H8#'h@S'%T'%/+#tn@U'%{- fg bf _,.V'%cR.#f$Jy$l&%W'%X'%Y'%Z'%$W$nc@`'%)R@Ld+=*@_h+~a+J%%uL$e9#s %TH@ )%sC$`H$%k+d~+ 6+Fg+Fg+._+*k+*k+Mg+ @# @#-f+!6+E_$E_$8,$|@$|@$`A$`A$W4$W4$X%$X%$DB#77$(l#Ye$>|+7[+4[+;t$;t$;t$4[+4[+;|+;|+'|+'|+Y3+Y3++K#.K#%2+Es$7q$In$X3+%2+7[+4[+;|+;|+6[+6[++2#+2#F2$@;$ci#di#(l#77$X%$^$$`A$F7#W4$W4$|@$|@$8,$8,$8,$~6+RR#,.$$}#$}#$}#$}#V[$V[$=Z#I2$$u$c0$n@$n@$8q$/6$vT#hd+X3+%2+Nr$3[+Nr$$2+Nr$$2+$2+hd+%2+X3+.K#In$/6+~_+/6+/6+fd+fd+Es$Es$Y3+'|+'X#'X#tT#X4#sT#Z_$d<$&;%W_$@2#Y_$e<$S[$g@$.;$.;$.;$f@$e0$e0$e0$Z4#.)%An$+)%@)%Z1#:@$Jt+&4+Bt+,7$dD$9/$=-#=$$#p@7F Zi@cP@es %M>%p'%p'%p'%og@ue@W4@W4@W4@1t#1t#Ly#Ly#%2+%2+}T#}T#E_$E_$E7#E7#'$$E7#|@$U%$U%$U%$`A$W4$^$$s=$#I#DB#77$(l#di#bi#($$($$($$($$($$($$($$($$&Z#&Z#mV#mV#}X#}X#}X#8V#6T#_l#/K#/K#bV#bV#%%)%&)%&)%&)%&)%&)%&)%&)%.#%.#%.#%+#%+#%@#%@#%7$%k%%`Y$`Y$,`$,`$,`$.Z$.Z$,`$,`$,`$.Z$.Z$vs$vs$'`$Nt#Uq#*)%*)%=)%Uq#-)%;)%nO$nO$wn$wn$$e($KP$KP$KV$>)%6;%,)%')%$,%VV$))%r'%r'%r'%r'%*'%*'%*'%M+%M+%M+%`&%`&%pY$G;%F;%A,%!#%!#%b*%b*%T>%-'%1-%p,%5 %t'%EM$yL$U_$1X#S[$@2#tT#)X#)X#)X#CB#`_$/b$`_$BB#BB#BB#/b$>X$!)%~)%~)%~)%{)%])%-X$-X$-X$-X$-X$-X$-X$-X$-X$-X$AB#Wy#UY#@K#@G#)c$)c$8N$&w##L$l'$[*$}t#Q;@eK@ur+fy+-w+up+1R+#B+{k@fz@a=@a=@ W$ W$^)%^)%Y/$Y/$Y/$A%%]w+Ot+*B+xI+1h#2h#I)@/)%8=@U.@pi$pi$R[#R[#+z$mw$DP$j%%DP$5G$a9$c9$iF$-,$/'$bN$kF$lF$!l$!l$b8$N1#N1#zA#yA#yA#M+#mZ@| @| @[H#,K@RQ@]K@,T@DD+mq@mq@G@@>p$,K@5&@;($mn$O;+()%_)%:)%dV$16$x'%kQ i!$d.#E'$}f }f }f }f }f }f }f }f }f 9~ 9~ %H'%G'%G'%6)%`K$W@%>`$1 %1 %ZK$j.%j.%7)%j.%@K$%M$8)%8)%uT$q.%>)%9)%g>%mU$uS$LR$xS$mU$0)%xS$xS$0)%mU$uS$LP$c<$&;%2u$d %d %+ $rT#($$4*$4*$($$rT#tT#CB#zB#@K#}T#Uy#)w#A7#B7#QL#QL#Nn#@4+Pg+bc#2$@dy+s=@v=@]/+[]+bf#F`#F`#E`#M4#&l#bf#=X#si+Yg+e~+N0+8X+]/+|G+b$@vI+H:+vI+vI+5T+5T+fD+fD+PK+Kl+(P+:x@7X+7X+ N+ur+[w+mq#+m+BR#rr+m;@>2+H$+v,$.l#[6$j|#:'$/k#/Y.|j+a)%b)%c)%AD d)%EN#8v ]J $A@3' Ne st 3=.CS+ta@e)%Rf f)%_T F2.i&+[j.bt Q$.>x *U.]v.S|@Y% wn.;o@4q@{! {! ZW+ZW+ZW+ZW+]%@]%@]%@!>%!>%!>%6'%6'%6'%6'%%]$$]$15+n9$-V@35+)g@wn.ko.ko.8}.8}.7}.7}.;q.z<.,v.8g.be+be+{! {! ]! ]! Ea+be+8g.{! be+gA ", "O_ +_ <| p} p} p} <| <| <| <| <| <| <| <| <| ie ie je je je je xn.xn.J6 J6 xn.je je ie le le ie le ke ke ke ke le ie je le ke le je je ie :j.@n ce 9%.9%.V>.G^$!{@!{@Y9#qI.~K.]K.]K.Qw.HO.Ek$=G@_t@2o.hY.Ll e+ h@ 0* k7 I&./l g)%h)%pd@-(#T'%i)%j)%,h@qh@B8@Y:#cn P{ w/@k)%$P vd@^Y.p%$-{#-W+l)%m)%n)%o)%89$:v@h|+ji@XO@4T@p)%R8+`@@q)%2b#6X@r)%TA#*1#M,+M,+;:#$/+k)+Ol+Fg+@_+&k++_+>k+ir+Pg+&2+}T#}T#8,$^>$W4$`A$0($^b$^b$0($X%$DB#DB#di#^b$Ty#;|+4[+;t$B:+B:+;t$;t$;|+;|+'|+'|+Y3+Y3++K#.K#hd+gd+7q$7q$X3+hd+4[+;t$'|+'|+>|+6[++2#F2$&;%1I#VY#0($=2#^b$W4$q'$`A$U%$W4$|@$|@$|@$8,$8,$8,$~6+SR#SR#SR#SR#SR#SR#g8$g8$y:+vT#//$f8$f8$f8$G2$//$;|+X3+.K#X3+Nr$2[+2[+s0+Tx$Tx$gd+Es$7q$In$ ;$;f+B)$/6+B)$B)$fd+fd+Es$%2+'|+'|+,|+'X#tT#tT#Z_$Z_$d %@;$W_$+;$Y_$ts$M3$0T#e($9V#.;$0V#s)%{X#e0$Z4#e@$%l$Y4#X4#|T#1=$#/+O,+0i+T,+K^$#;%&{#n9+#p@7r cP@es }#%`Y$}$%1$%1$%}$%}$%1$%q'%q'%q'%y)%y)%q'%@'%1$%O>%z)%A)%A)%B)%A)%B)%B)%B)%&)%&)%&)%.#%.#%+#%+#%3$%k%%k%%`Y$q&%,`$q&%.Z$V@%,`$q&%,`$V@%.Z$'`$vs$x)%Nt#-)%C)%D)%E)%-)%l,%F)%x)%nO$+K$wn$#l$)%')%H)%I)%$,%J)%))%))%))%))%))%))%))%M+%M+%M+%M+%`&%`&%K)%pY$:;%v.%v.%L)%L)%4=%T>%-'%M)%L)%5 %BM$EM$N)%U_$T_$3|$g@$sT#X4#X4#X4#7d$TW$AV$AV$TW$ZA$`_$>X$ZV$O)%P)%~)%~)%{)%-X$Z1#<$$<$$5|$5|$5|$5|$5|$5|$5|$AB#UY#UY#@K#@G#@G#yB#7N$>/$Q)%D;%,$$yy#jV@jc@p;@VH@.B+up+1R+#B+{k@fz@a=@a=@R)%`V$S)%^)%Y/$Y/$X/$E+$:s#]w+ky+zD+6=@T_@m#$!J$4Z+mZ@~^#R[#o&%9-%9-%mw$DP$DP$DP$S@%cN$c9$pw$-,$I$+iF$kF$lF$!l$!l$b8$[{#L1#zA#yA#]N#]N#~^#P6#U<#K #X>% @%RQ@fm$E+$E+$m5$mq@T)%>'%2 @}V+:m$mn$U)%B@+V)%W)%X)%Pz$-P u1$Kv }f }f }f }f }f }f }f }f }f }f 9~ 9~ %t=%H*%+!%@!%@!%Y;%~,%#!%H'%6)%3N$7)%ZK$1 %+K$+K$}m$@K$#K$@K$wn$fr$zS$8)%$!%%!%7)%oU$C,%/'%);%JP$c,$XQ$E,%);%KR$KR$);%E,%XQ${>$S[$W_$@;$@2#+;$+ $~X#($$J`#($$7T#+ $K`#1T#Vy#+K#)6+NP#LL#^H$ 4+)|+!|+Nn#6e@$a@g0#ZA+dy+s=@v=@sD+si+bf#F`#^i#/k+^|+&l#%l#=X#Lb+Yg+cy+Mb+`+#]/+`+#b$@/_+vI+vI+(|+xp+xp+=w+vr+R0+fy+-w+;w+<&@<&@:&@-w+@m+&!%BR#/f#4T+'T@sd+uy+{ +[6$!V@E-%(,%UZ.|j+*!%->#=!%i| eP@fP@T:@(,@ml k8 (g |t k .x-.[b -!%9` ;!%CF+XU Vc 1 .Jy 8*.o` S9.'b.75.qj )_ =L 80+O4 {! {! {! ZW+{! ZW+ZW+ZW+]%@]%@]%@]%@!>%!>%!>%]%@L*+$]$wn.vn.35+f+#-V@vn.ko.ko.8}.8}.7}.7}.z<.z<.8g.8g.be+be+{! {! ]! ]! Ea+{! be+{! be+`Y ", "kC kC dd dd dd dd dd g~ E7 9c 8c 8c 9c E7 g~ 9c 9c 7c E7 E7 g~ dd dd 0' 7c dd kC g~ E7 E7 g~ J6 xn.ie ke ke ke le ie ie je je xn.xn.je je uk (j.X)@X)@X)@X)@}{.=H.=H.Mv.Mv.HO.HO.Qw.ke he m` =H.V>.9%.Rl +n N6 G) v s& y# >!%,!%gK+'!%h%$#.$1b@H8#,h@ul@7r@yn@Op@/<@0|@Uu b'%Qu )!%!!%u|@)-#Mu#~!%{!%]9$r##q4$s##Lu@yI$fm@2:@{<+D~@o|+]!%0C$^:@Jf$jF@ K@}h+jP+Qi+'c@EB${R#_6+{/+(i#(i#Mn#M0+B)$3[+Nr$z0+|T#$;$VY# O##I#DB#DB#DB#zq#Yn#_K#^!%D0+T@%T@%T@%T@%T@%T@%T@%T@%B0+}T#}T#A0+A0+}T#,6+;X#tB#.G#e8+)6+~6+B0+B0+wB#z0+#;$D0+#2##2#@;$$;$#;$Ty#5V#Ty##;$w'$^>$z0+^>$}T#z0+)E#)E#z0+}T#A0+hd+hd+%2+%2+X3+X3+X3+.K#%2+hd+$2+Nr$Nr$hd+Y3++G#vB#Uy#)6+~6+Z3+Z3+;6+)|+x0+x0+l8+^6++*$+*$+4++4+.4+.4+QL#QL#&2+&2+!6+!6+}T#z0+)E#Vy#UY#Wy#,X#@;$1I#*2#1I#*2#&2#|I#b<$/!%9T#SP#aV#/K#6T#/K#`4#:X#/X#:X#di#w.$+I#Pg+kp+pX@(!% +@Wz$SF#}=%D_#J!$+<@es es es es es es es es 1+in$07$_)#rm#ZD.U{$GK$/-#_-#Yu$Yu$f0$f0$NW$NW$)Z#}F$&N$_!%_!%Oy$Oy$Oy$Oy$Oy$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$rS$rS$Ry$Qy$kn$~m$i%%i%%:$%$)%+'%+'%k,%k,%k,%k,%5d$5d$5d$)g$-c$S5+_a$_a$Dj$Dj$a9$a9$b9$b9$b9$b9$9-%lw$Qj$[{#nZ@7V@}V+3G+:P+:P+< @< @bX+bX+%B+%B+#a@ky+W{@M2@0~@#a@w)+>$'$$5V#5[+6[+6[+>|+,|+,|+1T#1T#tT#tT#X4#X4#X4#X4#X4#X4#E;%Zn#5@$5@$/l#J`#J`#~X#J`#J`#~X#~X#~X#6T#6T#7T#^b$=2#;}#;}#;}#(K#77$di#SP#SP#$.;$f@$.;$d($Ue$Ue$Lx$ch$UQ$UQ$FP$FP$#'%nO$nO$nO$:!%:!%%O>%O>%|!%|!%X@%X@%|!%Z@%1!%2!%3!%3!%1!%1!%4!%4!%4!%q'%5!%6!%6!%7!%8!%7!%7!%7!%9!%0!%0!%9!%a!%a!%b!%6$%(-%c!%}!%d!%`@%e!%GP$E)%VQ$C)%JR$e!%JR$e!%GP$VQ$VQ$VQ$'`$x)%'`$#'%jU$+K$.Z$+K$gr$#l$|m$}m$$l$ch$G)%'N$f!%f!%';%jU$FP$#l$>6${>$!;%`;%g!%h!%i!%j!%I;%s=%k!%k!%]Z$s=%Z&%&&%l!%l!%+,%nY$;&%nY$F&%nY$m!%n!%]Z$E.%X+%D*%{#%C*%r=%n!%6 %o!%Mj$As$1q$}q$mV#6T#.5#.o#WY#B0#j@$j@$p!%YA$Aq#Zn# O#~>$er$q!%AB#AB#AB#AB#AB#@K#@K#@K#|T#@K#xB#*w#u.$%w#.K#Y3+Vy#Zy$yB#yB#pd$*w#&w#x!$2t#k'$q=$yy#wy#xb#Q;@^G+fy+-w+;w+>w+fz@{k@P,@K@@qt$Ku$r!%r!%s!%s!%X/$k#$r$%zU$s;@s;@2T+2T+>K@4G+8e#!k#b8$a9$Dj$^m$^m$^m$5G$5G$S@%hU$cN$b8$47$b>%d8$jF$kF$kF$lF$lF$!l$!k#Wx${^#{^#{^#yA#yA#]N#mZ@4Z+E@@)K@fm$E+$t!%u!%u!%be#a=@Q,@r;@t;@8=@oi$aD#v!%XJ#w!%x!%y!%;M xt =^$-! 9~ Z;$Y;$Y;$Z;$9~ U+z!%Ja$&T@A!%B6@aC$B!%kt$8=%Jm$7c$'5$7c$ {$]B$P<$/}$u|$(}$K1$j-%^`$G&%A$%1;%1;%1;%~U$l!%F*%|-%}-%s'%C!%F'%1N$3N$D!%E!%oU$oU$oU$D!%F!%F!%#K$pO$pO$nO$mO$Xe$nO$oO$pO$F)%:!%nO$oO$k.%k.%pO$`K$ L$`K$#K$6+'l#nc#j0#|i#,f+V4#=2+Pg+]|+bc#mi+gi+YA+v=@Pn#v=@t&@V4@^i#Cy#|&@#l#V4@YA+_k+~/+_6+Sl+-2+dy+{/+ZA+]/+&4+%>+(|+^/+Yn+St+kr+'B+[w++m+mp+rp+A@@ 6g+5A.Yt.be+{! 5A.{! {! {! {! {! {! {! {! =L vn.13+ko.ko.13+@$+=L =L =L =L =L =L =L =L =L ]! ]! ]! ]! ]! ]! ]! ]! {! {! {! {! {! {! ", "E7 g~ g~ g~ g~ dd dd g~ E7 9c 8c 8c 9c E7 g~ 7c 7c E7 E7 E7 E7 g~ g~ 0' 7c dd dd g~ E7 E7 g~ xn.je le ke ke ke le ie ie je je xn.xn.je je uk (j.X)@X)@X)@X)@X)@(j.(j.uk uk le le ke ke he m` uk Tl Tl Tl uk tk $~.F7 Q% S| %+ #R@7t+AY+N!%O!%80@!W@2f@qh@P!%s@#rt@L5@$#;$F7#F7#F7#*2#Ye$|I#/!%V!%}I#SP#bV#/K#_l#_l#:X#:X#@5#'2#RL#v0#.G#F:+7d+Up$W!%9)#yx$]F$X!%W{$N-%~M es es es es es es es es es es es es es es es tG tG 5G@;E Rx@mI@`=#m1#n1#q1#${#bI#sK@Mu#s1@73@Y!%&J$%N$%N$%N$eN$eN$k7#k7#_!%_!%Oy$Oy$Z!%Z!%Z!%Z!%8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$rS$rS$Ry$Qy$kn$~m$i%%i%%$)%$)%+'%+'%k,%k,%k,%k,%Bj$Bj$5d$5d$-c$-c$Dj$Dj$Dj$Dj$a9$a9$b9$b9$b9$b9$lw$lw$Qj$[{#nZ@7V@[ @}V+:P+:P+< @< @bX+bX+%B+%B+zD+ky+ky+W{@0~@#a@w)+>$E_$E7#Ty#>|+Z%$Z%$Z%$Z%$G2$<$$<$$.2#.2#K>%K>%K>%K>%K>%X4#5@$5@$/l#/l#/l#/l#J`#J`#J`#J`#~X#~X#~X#6T#6T#7T#0($F7#-2#;}#;}#Ye$(l#77$SP#$d,$.;$f@$.;$>6$Y4$Ue$Lx$ch$UQ$FP$FP$#'%nO$nO$MV$`!%`!%`!%%Z$%Z$/u#/u#`!% ~%.~%+~%@~%@~%GP$GP$JR$`@%^-%O>%O>%#~%|!%|!%X@%X@%|!%Z@%1!%3!%3!%3!%1!%1!%4!%4!%4!%Z@%$~%%~%6!%6!%6!%6!%&~%&~%9!%0!%0!%9!%a!%a!%b!%5$%7$%d!%d!%d!%d!%c!%e!%C)%C)%e!%e!%c!%c!%e!%e!%C)%.Z$.Z$vs$vs$vs$|m$|m$|m$.Z$|m$gr$$l$|m$vs$$l$ch$Ht#*M#)N$)N${N$3w#Mx$Mx$>6$yi$tT$>)%*~%g!%H)%=~%|-%{;%]Z$k!%]Z$s=%Z&%Z&%rX$rX$l!%+,%F&%{U${U$;&%l*%[`$X+%X+%D*%D*%{#%{#%X+%-~%6 %sU$'l$;~%(N$|q$Z4#`4#lV#H7#y.$y.$N`#N`#>~%p!%XA$Zn#Zn#~>$b,$,~%AB#AB#AB#AB#@K#@K#+K#+K#'|+Y3+.K#My# ;$In$7q$%2+Vy#Zy$@G#yB#xB#xB#4t#C_$2t#k'$q=$,$$wy#xy#ne#^G+}T+@k+up+>w+fz@{k@a&@P,@qt$qt$r!%r!%s!%'~%X/$Tm#r$%r$%fm$fm$!K@>K@5Z+iX+WL$b8$im$a8$Ms$=c$=c$=c$sS$sS$hU$hU$cN$Ej$47$e;%d8$d8$kF$kF$lF$lF$WL$8e#vp#{^#yA#yA#zA#^N#]N#]N#4Z+E@@)K@fm$E+$t!%)~%)~%a&@=9@a=@Q,@5o@s;@wp#N+#[x@u-$M;$!~%~~%iq$7F ;b -! 9~ Z;$Y;$Y;$Z;$9~ vo@vo@~}+h># G@SS#{~%jZ.]~%^~%/~%&T@ES#R2$(~%UH@:&#dK@:L$Im$~B$`~$~o$$4$$4$:]$w8$3P$_~%_~%q=%:~%+,%nY$nY$nY$<~%r'%='%[~%}~%|~%G'%1~%3N$3N$E!%E!%B,%B,%oU$+M$pU$#K$`t$oO$F)%:!%Xe$We$:!%F)%oO$nO$nO$oO$k.%2~%k.%oO$k.%@~%@~%pO$nO$mO$:!%nO$F)%oO$:!%3~%^g$We$SP#DB#DB#DB#yf#EB#zf#Dc#Dc#Af#EB#0($F7#_O#Fb+ 4+'l#|i#j0#j0#;p$;p${|+q7#g0#g0#ni+mi+gi+YA+v=@Pn#v=@t&@ZA+2$@#l##l#2$@ZA+dy+gi+Sl+Xg+Xg+gi+dy+YA+YA+1$@qy+f~+Ob+^/+&m+&m+WN#ac#}w+mq#BR# }#3T+Gn+hX@Gn+rp+tb+qd+J,@v,$`&+# +2/+(,%U.$4~%(3 5~%6~%e'.W] 7~%8~%wK ~J ,J E5 9~%Ar$0~%1E@/,..j 2r+os k[ Q-%Ke$a~%b~%c~%k .. Z% )_ Ov+Rx.8}.7}.z<.z<.7}.7}.i~ )> 6g+6g+Yt.i~ Yt.6g+Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.=L @$+13+ko.ko.13+@$+=L =L =L =L =L =L =L =L =L ]! ]! ]! ]! ]! ]! ]! ]! {! {! {! {! {! {! ", "9c 7c E7 E7 g~ g~ dd E7 E7 7c 9c 9c 7c E7 E7 g~ g~ E7 E7 E7 E7 7c 7c 0' 7c g~ dd E7 7c E7 dd le ke ke he ke le ie ie ie je je xn.xn.je je uk (j.X)@X)@X)@X)@X)@(j.(j.uk uk le le ke ke he m` uk Tl Tl (j.oG.oG.vk !1.Q% d+ (& x. tv+$t+le$d~%68@c4@+6#qh@*n@'+&X#Y_@5W.h3#JD+f~%g~%[J+kN+'!@x3#0C$]:@h~%`8+}h+jP+zT#zP$%/+Dg+_6+Og+B5$6+)6+!6+A0+B0+)E#}T##;$D0+#2##2#1I#w'$w'$B0+}T#A0+C0+T@%B0+}T#C0+B0+A0+A0+A0+A0+B0+C0+~6+~6+~6+!6+!6+)6+)6+)6+~6+!6+)6+'6+'6+'6+'6+)6+Uy#wB#)6+!6+~6+~6+;6+)|+x0+l8+^6+9[+9[++*$nd++*$x0+/>$;6+&2+!6+)6+'6+'6+)E#z0+Ty#^>$^>$^>$,X#>X#`A$`A$`A$F7#Ye$|I#/!%V!%SP#SP#/K#_l#_l#_l#:X#:X#@5#SL#ei#1@$e8+$a@w'#Up$j~%qG+}0#]F$9#%NK$%>$m$#es es es es es es es es es es es es es es es -! -! 5G@;E Rx@mI@`=#m1#n1#16$7=$bI#sK@Mu#%X#>'+S_#>]$=o$UL$UL$&N$&N$_!%U~$_!%_!%Oy$Oy$Z!%Z!%Z!%Z!%8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$rS$rS$Ry$Qy$kn$~m$i%%i%%$)%$)%+'%O@%LB$LB$LB$LB$j%%j%%Bj$Bj$8F$Cj$^m$^m$Dj$Dj$a9$a9$b9$b9$b9$b9$lw$lw$Qj$[{#nZ@nZ@[ @[ @:P+:P+< @< @bX+bX+%B+%B+zD+zD+ky+ky+0~@#a@,B+w)+K)@K)@6o@6o@fz@fz@fz@fz@!w+sD@'w+dB@vD+wD+1R+#B+up+up+#k+#k+#k+#k+#k+`K+tp+#m+@m+@m+[w+[w+&m+~k+~k+!k+]_+[]+-2+-2+-2+^|+'i#'i#Qc$`b$Kb+Kb+gi+gi+v&@.}#bi@7k@bi@<9@cc@ec@9i@%3@em$em$#w#W+$7q$7q$X3+X3+z0+}T#E_$8,$|@$^>$,|+,|+,|+>|+>|+>|+L`#L`#tT#tT#X4#X4#X4#X4#X4#X4#J`#J`#J`#/l#/l#/l#/l#/l#J`#J`#~X#~X#~X#6T#6T#7T#0($0($=2#(K#>}#>}#bV#/K#%O>%|!%|!%|!%|!%Y@%Z@%1!%1!%1!%1!%1!%4!%4!%Z@%Z@%Z@%$~%$~%6!%r~%r~%s~%t~%t~%9!%0!%u~%0!%a!%a!%v~%4$% #%w~%w~%x~%w~%d!%c!%e!%e!%c!%c!%d!%d!%c!%c!%e!%.Z$.Z$vs$vs$vs$|m$|m$|m$.Z$|m$gr$$l$|m$vs$$l$ch$Et#'z#Ft#Ft#2m$MB$[X#~%p!%XA$~b$Zn#OP#OP#Zy$zB#zB#zB#zB#@G#@G#+G#+G#;|+'|+X3+X3+7q$7q$Es$hd+UY#Sy#@K#@G#+G#xB#3t#1t#w!$;>$q=$,$$wy#wy#xb#jc@}T+@k+up+>w+fz@fz@=9@=9@qt$qt$t!%t!%'~%'~%X/$X/$|#%|#%|#%fm$]K@>K@5Z+iX+WL$b8$im$a8$Ms$nw$=c$=c$sS$sS$hU$hU$cN$Ej$47$e;%d8$d8$kF$kF$lF$lF$WL$8e#!k#M+#yA#]N#^N#yU#S[#S[#4Z+E@@)K@fm$E+$t!%)~%)~%a&@=9@a=@Q,@Q,@Q)@3G+oZ@/{#C~%D~%E~%LB@VB$ml 5r -! 9~ Z;$Y;$Y;$Z;$9~ #iR.SS#^M$F~%xk$B/+n/+qB+cm+g}@R'$G~%`,%cy$[^$Im${B${B$~o$,y$ {$iQ$/+%!o$H~%f=%:~%.!%+,%nY$;&%nY$oY$M+%C!%|~%G'%1~%]'%]'%AO$AO$E!%E!%B,%B,%oU$+M$pU$@K$vn$:!%nO$mO$We$3~%Xe$:!%:!%:!%F)%k.%q~%q~%@~%oO$x)%GP$JR$GP$#'%FP$#'%VQ$FP$#'%Nx$>+~($I+@J~%eI.K~%L~%M~%N~%E`+VE nx GV#Hv@8q so *2@;h@O~%>Q./h.P~%UC.Q~%R~%S~%T~%i{ U~%s-@k +. Z% x8 Y% 8}.8}.8}.Rx.8}.7}.z<.z<.i~ )> 6g+)> i~ ,v.Yt.6g+Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.=L @$+13+ko.ko.13+@$+=L @$+@$+@$+@$+@$+@$+@$+@$+{! {! {! {! {! {! {! {! {! {! {! {! {! {! ", "7c 7c E7 g~ dd dd kC E7 E7 E7 7c 7c E7 E7 E7 dd dd g~ E7 E7 7c 9c 9c 8c 7c g~ g~ E7 7c g~ dd he he he he ke le ie ie ie je je xn.xn.je je uk (j.X)@X)@X)@X)@X)@(j.(j.uk uk le le ke ke he m` uk Tl (j.(j.:j.m` d( d( 6c P :+ c/ 'D+f* d [E$8| >g 1b@Vx@Z3@X:#V~%OM$^d@.$v-$Ul$`b$ri+B)$*f+Nr$X3+|T#+2#VY# O#2T#bi#di#X%$0,$0,$PB$(C#B0+B0+B0+B0+B0+B0+B0+B0+bE#g8+B0+A0+A0+z0+Uy#;X#+I#.G#e8+>6+)6+!6+A0+A0+z0+}T##;$D0+#2##2#1I#D0+D0+B0+A0+B0+T@%g8+C0+A0+C0+C0+C0+C0+C0+C0+C0+C0+Z3+Z3+~6+~6+!6+!6+)6+)6+Z3+!6+'6+f8+f8+,6+'6+)6+)E#)E#)6+!6+!6+~6+;6+;6+)|+)|+^6+^6+^6+9[++*$+*$,:#c8+/>$;6+!6+)6+'6+,6+wB#z0+^>$#;$w'$#;$,X#>X#W4$W4$`A$F7#Ye$|I#/!%V!%SP#>}#/K#_l#_l#_l##5#:X#)2#SL#>2#(O#!6+cd+8d+Up$R{@I3+Oy$Zx$GS$NK$(J$m$#es es es es es es es es cP@es es es es u$Re@O#$v}@sK@.{%%X#>'+S_#+{%=o$=o$=o$j7#j7#_!%_!%_!%_!%Oy$Oy$Z!%Z!%Z!%Z!%8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$rS$rS$Ry$Qy$kn$~m$i%%i%%$)%$)%O@%O@%LB$LB$C;%C;%I@%I@%j%%j%%8F$8F$5G$^m$Dj$Dj$a9$a9$b9$b9$b9$b9$M1#M1#Qj$[{#nZ@nZ@[ @[ @:P+:P+< @< @bX+bX+%B+%B+zD+zD+zD+zD+#a@#a@K)@,B+K)@K)@6o@6o@fz@fz@fz@fz@dB@'w+'w+dB@vD+rr+sr+1R+up+up+#k+#k+#k+#k+#k+`K+tp+#m+#m+@m+IZ@[w+&m+&m+!k+!k+[]+si+$4+$4+-2+M0+Ng+'i#Qc$`b$Kb+Kb+gi+gi+.}#.}#bi@bi@<9@<9@cc@6m@%3@em$em$em$W+$W+$Es$Es$%2+%2+}T#A0+8,$I~%T%$T%$|T#|T#,|+,|+>|+6[++2#F2$tT#tT#X4#X4#X4#X4#X4#X4#6T#~X#~X#J`#/l#/l#5@$5@$J`#J`#~X#~X#~X#6T#6T#6T#DB#di#77$(l#/K#bV#{%0!%u~%u~%,{%a!%'{%@#%){%x~%x~%x~%x~%w~%d!%c!%c!%c!%d!%w~%w~%d!%c!%`@%.Z$.Z$vs$vs$vs$|m$|m$|m$.Z$|m$gr$$l$|m$vs$$l$ch$Dt#Gc#Et#Et#MB$DR#~%/{%p!%~b$Zn#Xy#Xy#Wy#zB#zB#zB#zB#@G#@G#+G#+G#Y3+Y3+X3+X3+7q$7q$7q$X3+5V#Sy#@K#@K#+G#+G#3t#1t#k'$;>$q=$yy#wy#wy#vy#u=@ur+@k+up+;w+fz@Rx#b=@*w$a=@a=@m5$m5$]k#'~%X/$Y/$>'%>'%|#%RQ@)K@)K@5Z+iX+!l$!l$im$a8$a8$nw$nw$nw$sS$sS$hU$hU$cN$Ej$47$e;%d8$d8$kF$kF$lF$lF$WL$8e#!k#M+#mZ@]N#S[#yU#S[#R[#M+#4Z+)K@]K@E+$t!%u!%)~%a&@a&@0=@t<@t<@ZK+[V+1O#`z$u-$J^$dV$uC$J5@j.$9q -! 9~ Z;$Y;$Y;$Z;$9~ #iR.SS#^M$F~%xk$D/+H&@qB+em+R'$R'$G~%({%cy$ )> i~ ,v.i~ )> Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.@$+@$+13+13+13+13+@$+@$+@$+@$+@$+@$+@$+@$+@$+@$+{! {! {! {! {! {! {! {! {! {! {! {! {! {! ", "g~ g~ dd dd kC kC o} E7 E7 E7 g~ g~ E7 E7 E7 dd dd g~ E7 E7 7c 9c 9c 9c 7c g~ E7 7c 7c g~ kC 2b he ke le le ie ie ie ie je je xn.xn.je je uk Tl 9%.9%.9%.9%.9%.Tl Tl uk uk le le ke ke he m` .h.@n (j.(j.:j.m` m` d( M$ w A. b. HA#/1$(> 3{%K8+_k ]]#4{%X:#28@QM$oh@^<@* %Z:#h_@V! hi #~@@~@0] Y-+5{%!#+OP.SN#,q$w1#p>#kS$'Q#Hz$a>+a*+c>+l/+52+p4$YE#}]@L^@|N+Sk$}T@L,+zb+zb+hT$([+Jb+Ae$Vg+B)$*f+Nr$X3+|T#+2#VY#OP#2T#bi#0($0($0,$)$$P{$PB$B0+B0+B0+B0+B0+B0+B0+B0+bE#g8+B0+A0+A0+z0+Uy#;X#f8+.G#e8+>6+)6+)6+}T#}T#}T#A0+#;$D0+#2##2##2#2I#2I#C0+B0+C0+g8+g8+T@%B0+C0+C0+T@%T@%T@%T@%C0+C0+Z3+Z3+Z3+~6+~6+!6+!6+!6+Z3+!6+'6+f8+f8+,6+'6+)6+)6+)6+)6+)6+)6+!6+&2+;6+y0+y0+)|+^6+^6+^6+^6+^6+,:#-6+{6+Z3+!6+)6+)E#)E#UY#5V#^>$w'$@;$@;$,X#>X#W4$W4$`A$`A$=2#;}#.z$/!%>}#>}#/K#_l#Af#Af##5##5#!2#@5#[I#0E#Z3+m8+8d+6{%QA+i)$7{%l %'f#8{%4z+}|@es es es es es es es es cP@cP@cP@es u$t)%.6$,I@sK@.{%*/#>'+S_#+{%=o$=o$=o$j7#j7#_!%_!%_!%_!%Oy$Oy$Z!%Z!%Z!%Z!%8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$rS$rS$Ry$Qy$kn$~m$i%%i%%$)%$)%O@%O@%C;%C;%B4#B4#I@%I@%j%%j%%8F$8F$5G$^m$Dj$Dj$a9$a9$b9$b9$b9$b9$M1#N1#[{#[{#M+#nZ@eX+eX+:P+:P+< @< @bX+bX+%B+%B+zD+zD+zD+zD+#a@#a@K)@T##K)@K)@6o@6o@fz@fz@fz@fz@dB@'w+'w+dB@vD+rr+sr+1R+up+up+#k+#k+#k+#k+#k+`K+%N+VA$#m+#m+IZ@IZ@&m+&m+!k+!k+[]+si+$4+$4+-2+M0+Ng+'i#^|+M0+Kb+Kb+gi+gi+`J#.}#WF#GZ@<9@ic@6m@6m@%3@%3@%3@em$#w#W+$7q$7q$%2+%2+}T#A0+8,$I~%T%$T%$|T#|T#,|+,|+>|+6[++2#F2$tT#tT#X4#X4#X4#X4#X4#X4#6T#6T#~X#~X#J`#/l#/l#5@$J`#J`#~X#~X#~X#6T#6T#6T#EB#EB#Af#_l#:X#/X#+5# Z#'M#'M#`y#`y#`y#`y#{O#`y#c@$c@$c@$c@$Q`#Q`#Q`#Q`#^X#^X#0V#0V#0V#0V#0T#0V#VK$'J$'J$'J$'J$'J$'J$'J$yn$@Z$UW$UW$@Z$@Z$UW$`L$dh$dh$ u$@l$#l$+K$`t$`t$@K$zS$%M$uT$9{%0{%a{%a{%a{%a{%a{%b{%c{%c{%d{%d{%$M$$M$|!%W@%>`$ZK$.Z$vs$|!%|!%Y@%Y@%Z@%Z@%Z@%Z@%4!%4!%4!%Z@%Z@%Z@%Y@%Y@%={%={%5!%e{%f{%_-%_-%7$%%)% #%@#%+#%&)%B)%g{%+#%w~%h{%h{%h{%h{%HP$}!%`@%`@%`@%}!%HP$HP$}!%`@%`@%.Z$.Z$vs$vs$vs$|m$|m$|m$.Z$|m$gr$$l$|m$vs$$l$ch$Et#Ft#Ft#Ft#Lx$Ue$n1$[X#yi$>6$DM$3|$4|$tO$vO$i{%]'%K+%L+%[-%<-%<-%H;%I;%))%@X$@X$@X$sX$<~%]V$N+%;&%j{%#4$j{%v8$f=%v8$zh$,5$M*%E'%k{%l{%m{%n{%^N$VK$c($Q`#P`#6V#5T#lt#(w#o{%p!%p!%~b$~b$Xy#!X#,X#zB#zB#zB#zB#@G#@G#+G#+G#+G#+G#.K#.K#In$In$ ;$My#)E#UY#@K#@G#+G#xB#3t#1t#;>$;>$q=$[t#xy#:t#p{%@p$o;@up+up+;w+{k@fz@b=@*w$a=@0=@9=@8&@7&@]k#Y/$;'%>'% @% @%RQ@,K@)K@zM@9e#!l$!l$im$a8$a8$nw$nw$nw$sS$sS$hU$hU$cN$Ej$47$e;%d8$d8$kF$kF$lF$lF$WL$8e#8e#M+#M+#]N#]N#S[#S[#S[#M+#4Z+)K@]K@E+$t!%u!%u!%0&@0=@a=@t<@t<@lX+AI+1O#z4#l7#qz##/#q{%hk@0> (e ! :,@[f Yr y, Ld >z W3@4L.A[@x{%|{%y{%Y_+h_# d. d.z{%!C+A{%6 .. Y% 7}.z<. Z Z Z z<.8}.Ov+Ov+Rx.7}.z<.,v.Yt.)> Yt.,v.,v.i~ )> Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.13+13+@$+@$+@$+@$+13+13+13+13+13+13+13+13+13+13+be+be+be+be+be+be+be+be+{! {! {! {! {! {! ", "kC kC kC kC kC dd dd E7 E7 g~ dd dd g~ E7 E7 g~ g~ E7 E7 E7 E7 7c 7c 9c E7 g~ E7 9c 7c g~ o} ke le ie je je je ie ie ie je je xn.xn.je je uk Tl 9%.9%.9%.9%.9%.Tl Tl uk uk le le ke ke he m` .h.@n Tl (j.oG.oG.oG.+h.ed v B c. /_ wZ.'p+B{%C{%D{%&A uj@.6@pd@uj@;(#qj@qj@tn@QY@E{%F{%|2 cn G{%Y-+v|@v|@0T.so@SN#%X#bX#Tz$H{%'Q#v{$}D$I{%v@$o6+Sp+F@%|]@~U#zq@O)$J{%+h$c~+6I#t0+w0+p:+Ib++*$B)$*f+cO$X3+Y3+6[+,X#OP#QP#^$$0($`A$0,$v0#1@$P{$A0+A0+A0+A0+A0+A0+A0+A0+3G#T@%A0+A0+A0+}T#wB#+I#,6+e8+e8+>6+)6+)6+z0+}T#B0+B0+w'$w'$1I##2#%2#:z$:z$T@%C0+T@%!:#!:#g8+C0+B0+C0+T@%T@%T@%T@%C0+B0+{6+Z3+Z3+Z3+~6+~6+!6+!6+~6+!6+)6+'6+'6+'6+'6+)6+!6+!6+)6+'6+)6+)6+&2+;6+y0+y0+y0+)|+)|+^6+x0+x0+c8+c8+{6+Z3+~6+!6+}T#z0+5V#Ty#^>$#;$@;$$;$$;$$;$F7#`A$`A$`A$^b$Ye$;}#|I#>}#(K#_l#Af#Af#Af#Dc##5#!2#]$=o$UL$UL$&N$&N$_!%U~$_!%_!%Oy$Oy$Z!%Z!%Z!%Z!%8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$rS$rS$Ry$Qy$kn$~m$i%%i%%$)%$)%O@%L>%C;%B4#Wy$Wy$j%%j%%Bj$Bj$8F$Cj$^m$^m$Dj$Dj$a9$a9$b9$b9$b9$b9$N1#N1#[{#[{#M+#M+#} @eX+:P+:P+< @< @bX+bX+%B+%B+zD+zD+=B+=B+mX+#a@T##S##K)@K)@6o@6o@fz@fz@fz@fz@!w+sD@'w+dB@vD+wD+1R+#B+up+up+#k+#k+#k+#k+#k+#k+%N+VA$VA$#m+Zn+IZ@{k+{k+~k+!k+]_+[]+-2+-2+-2+_k+Ng+Ng+^|+M0+Kb+Kb+gi+gi+`J#`J#WF#_1@ic@ic@5k@5k@W4@W4@W4@%3@D_$#w#In$In$X3+X3+z0+}T#E_$8,$|@$|@$Ty#,|+,|+>|+>|+>|+L`#L`#tT#tT#X4#X4#X4#X4#X4#X4#~X#~X#~X#~X#~X#J`#J`#J`#J`#J`#~X#~X#~X#6T#6T#6T#_l#Dc#Dc#Dc##5#:X#'M#'M#`y#`y#`y#{O#{O#{O#{O#{O#c@$c@$c@$c@$Q`#Q`#Q`#Q`#]X#]X#9V#9V#9V#9V#9T#9V#VK$'J$'J$UW$UW$UW$EV$EV$@Z$UW$`L$EV$UW$'J$EV$FV$Jj$ u$@l$@l$#l$wn$`t$:q$%M$uT$uT$L{%9{%9{%0{%0{%a{%a{%a{%a{%M{%M{%M{%M{%N{%O{%Y@%|!%W@%>`$.Z$.Z$|!%Y@%Z@%Z@%Z@%Z@%Y@%|!%4!%4!%4!%Z@%Z@%Y@%Y@%Y@%={%={%5!%e{%e{%f{%P{%P{%z)%3$%r&%@#%.#%B)%B)%&)%w~%HP$HP$h{%HP$}!%`@%JR$JR$`@%`@%}!%}!%`@%`@%JR$.Z$.Z$vs$vs$vs$|m$|m$|m$.Z$|m$gr$$l$|m$vs$$l$Jj$+O#Ht#Ht#4w#~z#ch$Mx$Ve$d($>6$qO$DM$T[$4|$uO$BO$o%%t%%~#%<-%Q{%Q{%G;%F*%*'%r'%@X$R{%!{%sX$<~%]V$~U$o7$#4$g6$_T$G&%_T$;5$h6$O+% X$S{%T{%U{%V{%W{%WK$Y4$Q`#P`#6V#O`#(w#N`#:$$Y%$XA$~b$~b$Xy#!X#,X#AB#AB#AB#AB#@K#@K#+K#+K#xB#xB#My#.K#In$ ;$Ly#%w#wB#Vy#yB#xB#*w#u.$C_$rq#;>$[*$-E#}t#xb#:t#X{%Y{%+B+>w+;w+;w+{k@fz@b=@b=@0=@0=@8&@9$@8#%]k#Y/$Z{%`{% @% @%[H#,K@E@@9e#9e#!l$!l$im$;u$a8$,H$,H$nw$sS$sS$hU$hU$cN$Ej$47$e;%d8$d8$kF$kF$lF$lF$WL$WL$iX+fX+fX+nZ@M+#yA#]N#]N#M+#4Z+jX+)K@,T@E+$m5$u!%a=@a=@qt$Q,@Q,@ZK+[V+1O#_{#HK$}K#%/#<'$H&#mI@Cm >$!w#Hy#Hy#j0#,f+,f+)f+)f+{|+q7#g0#bc#ni+mi+gi+YA+v=@Pn#v=@t&@gi+gi+Xg+Xg+Xg+gi+YA+YA+2$@2$@ZA+ZA+YA+dy+dy+gi+Pn#u=@`+#t&@{/+{/+/k+WN#kr+lr+&>+S0+'T@ov$K:+aN#/-+WX.1|+O:+sP$+]%Bu+@]%Pu$LJ$#]%j| WC@]|@qG Yr }C t/@=W@J4@4L.uW.$]%%]%Y_+#B GL <`+~E.Sv.&]%g6 B@ u Z% 8}.8}. Z Z 7}.z<.z<.7}.8}.Rx.8}.8}.8}.ZY i~ )> Yt.,v.ZY ,v.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.ko.13+@$+=L =L @$+13+ko.13+13+13+13+13+13+13+13+be+be+be+be+be+be+be+be+{! {! {! {! {! {! ", "kC kC dd g~ E7 E7 7c 7c E7 dd kC kC dd E7 7c 7c 7c E7 E7 E7 E7 g~ g~ 7c E7 E7 7c 9c 9c g~ o} ie je xn.J6 J6 xn.ie le ie je je xn.xn.je je uk Rl |{.|{.|{.|{.|{.Rl Rl uk uk le le ke ke he m` .h.@n Tl Tl uk tk tk $~.o3 U% T f. -L+V~ Eh.B<@ t@*]%g)%|< e .d~$ s@14+A: =]%=]%-]%y,#/]#;(#|2 Uu ls T;.Qu T;.MD+ry#P%${-#b.%vx$;]%>]%%S+/#+0*+,]%=*@Tr+)-@FR$mM@D($']%)]%!]%)/+&|+%|+>:#_[+3/#B)$*f+cO$X3+Y3+6[+,X#Sy#D+%^$$0($`A$0,$v0#v0#z!$}T#}T#}T#}T#}T#}T#}T#}T#g8+C0+A0+}T#A0+A0+z0+f8+,6+e8+>6+>6+'6+)6+z0+z0+B0+B0+w'$w'$1I##2#&M$3I#3I#g8+T@%T@%!:#3G#!:#T@%A0+B0+C0+T@%T@%C0+B0+A0+{6+{6+Z3+Z3+Z3+~6+~6+~6+!6+~6+~6+~6+~6+!6+)6+'6+~6+!6+)6+'6+'6+)6+&2+;6+d8+&2+&2+&2+;6+x0+/>$/>$/>$Z3+Z3+Z3+B0+B0+A0+A0+^>$^>$,X#,X#,X#$;$5*$+;$*2#*2#F7#`A$^b$^b$=2#Ye$>}#(K#_l#Af#EB#EB#Dc#Dc#Ec#Ct#MB$Sx$!:#1/#Y8@ -+tg@`z$~]%g0$Gi$u[$EN [|@es es es es es es es es s[@s[@cP@es %B4#Wy$)7$)7$Bj$Bj$5d$5d$-c$-c$Dj$Dj$Dj$Dj$a9$a9$b9$b9$b9$b9$N1#N1#[{#[{#M+#M+#} @} @:P+:P+< @< @bX+bX+%B+%B+zD+=B+=B+3R+mX+#a@S##{]%K)@K)@6o@6o@fz@fz@fz@fz@)w+!w+sD@dB@)w+vD+#B+hy+up+up+#k+#k+#k+#k+#k+#k+%N+%N+%N+%N+`K+`K+e0#e0#I6@Tt+8X+Nb+s=@s=@s=@{/+{/+{/+_k+-2+Xg+Xg+gi+gi+2&@3&@GZ@_1@gr+_1@+}#S%$;>$;>$k'$k'$1t#1t#Ly# ;$.K#.K#)E#z0+>>$E_$E7#E7#^>$^>$^>$^>$^>$Ty#>X#>X#VY#VY#ci#ci#ci#ci#ci#ci#J`#J`#~X#~X#~X#~X#6T#6T#J`#J`#~X#~X#~X#6T#6T#6T#/X#J7#L7#Fq#Fq#L7#HB#`y#{O#{O#{O#K_$K_$K_$K_${O#c@$c@$c@$c@$Q`#Q`#Q`#Q`#Y4$Y4$>6$>6$>6$>6$,6$>6$'J${H$ M$ M$)`$)`$XK$XK$XK$]]%^]%]]%)`$ M$)`$FV$@{%KP$c,$tT$LV$[N$[N$UP$D!%AO$3N$3N$3N$]'%]'%]'%G'%G'%G'%G'%H'%H'%H'%H'%#!%#!%@M$@M$^'%^'%*,%*,%|!%Y@%Z@%4!%4!%Z@%|!%X@%4!%Z@%Z@%Z@%Y@%Y@%|!%|!%1!%4!%4!%WQ$WQ$WQ$WQ$/]%(]%_]%:]%:]%){%<]%<]%[]%c!%}!%}!%}!%}!%`@%JR$GP$GP$JR$JR$`@%`@%JR$JR$GP$.Z$.Z$vs$vs$vs$|m$|m$|m$.Z$|m$gr$$l$|m$vs$$l$Jj$bT#bT#bT#+Z$<$%~z# u$yi$9V#>6$us$us$}]%Zt$iw$BO$ Y$o%%]'%_{%|]%ZW$:-%='%S>%n-%VV$1]%2]%3]%4]%<~%~V$i6$h6$o7$G&%n=%G&%+4$1;%5]% X$6]%7]%U{%8]%9]%WK$c($Q`#`Y#5T#y.$N`#x.$y.$B0#Y%$~b$~b$OP#Xy#>X#'X#'X#'X#'X#,|+,|+'|+'|+xB#+G#X3+%2+Es$7q$ ;$%w#vB#vB#*w#6t#6t#<@$m'$%[H#[H#[H#E@@8e#8e#!l$!l$im$;u$;u$,H$,H$,H$sS$sS$hU$hU$cN$Ej$47$e;%d8$d8$kF$kF$lF$lF$WL$WL$XK+WK+WK+hX+hX+vp#00$00$!k#8e#zM@AM@SQ@X/$]k#m5$qt$Ku$Ku$5o@Q,@ZK+[V+1O#*,$:-+L%#%X#nV$Ps$n[#ll Cm Yw Yw Tk$>g$]L$Y #N#$c]%<#+d]%e]%mZ+c1@ 9@_L$e/$.]%5f$M#%bg$ag$ag$Ui$X!$Vi$f]%O`$#.%l*%l*%l*%A~%g]%g]%h]%$%%zZ$i]%:-%]'%]'%]'%]'%]'%3N$3N$j]%j]%[N$LV$tT$:N$DM$67$aT#^g$Xe$mO$We$3~%We$Xe$:!%:!%F)%pO$@~%pO$mO$^g$Mx$<$%q&%q&%'`$<$%~z#~z#Ue$Ue$:X#H~$H~$:X#:X##G#DB#DB#yf#EB#zf#Dc#Dc#Af#Af#0($E~$D7#)w#Hy#'l#,f+,f+,f+!f+!f+0[+=2+=g$F:+ni+mi+gi+YA+v=@Pn#v=@t&@dy+gi+gi+Xg+gi+dy+ZA+2$@ZA+ZA+ZA+ZA+YA+YA+YA+YA+5=@pD+u&@qD+gi+_k+&l#Mn#kr+Pn+mB#W&+J:+L:+Jq@<6$[6$W0+g<#!>+k]%NL+l]%m]%n]%o]%`o@QT@5h u! 5F 2k >z _d@|L.)4+$<@0] ~^.V|@p]%q]%BO r]%s]%t]%5-@u]%!s +. Z Rx.z<.Y% Z Rx.7}.7}.z<.z<.7}.8}.Rx.Ov+ZY i~ Yt.i~ ZY ZY ,v.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.ko.13+@$+=L =L @$+13+ko.ko.ko.ko.ko.ko.ko.ko.ko.8g.8g.8g.8g.8g.8g.8g.8g.{! {! {! {! {! {! ", "kC dd g~ 7c 9c 8c 8c 7c E7 dd kC kC dd E7 7c 9c 9c 7c E7 E7 g~ dd dd 7c E7 E7 7c 8c 9c g~ o} xn.J6 up.up.up.xn.ie le ie je je xn.xn.je je uk Rl |{.|{.|{.|{.|{.Rl Rl uk uk le le ke ke he m` vk @n Tl Rl tk sk !B !B |% >' Z _. r6 ,D Mr+h, iC$v]%|Q 1R#p-.l= s@+7 14+A: =]%-]%;L@w]%+-%e%#[C@x[@a2$DD F).yR.Q:+km@[a$A~$x]%ux$y]%N]$z]%x@$A]%,R@B]%/o+4>@FR$-v@sz$C]%)-%%_+&|+)_+%|+%|+%|+B)$Ul+<[+7q$X3+7[+^>$Sy#D+%^$$`A$`A$1@$u0#u0#z!$}T#}T#}T#}T#}T#}T#}T#}T#T@%B0+}T#}T#A0+A0+}T#,6+'6+>6+>6+>6+'6+)6+z0+z0+C0+C0+w'$w'$1I#%2#&M$'B$3I#g8+T@%g8+3G#3G#!:#T@%}T#A0+C0+T@%T@%C0+A0+}T#{6+{6+{6+Z3+Z3+~6+~6+~6+!6+~6+Z3+{6+{6+~6+)6+,6+Z3+~6+)6+'6+'6+'6+&2+;6+d8+d8+&2+&2+;6+/>$Z3+Z3+~6+~6+Z3+Z3+B0+B0+B0+C0+w'$#;$>X#>X#>X#$;$+;$&2#-2#-2#F7#F7#0($0($^b$^b$(K#(K#_l#Af#EB#EB#Dc#Fq#pt#Ct#2m$Px$3G#68+Y8@ -+UN#D]%~]%n4#Gi$ -#es [|@es es es es es es es es `:@s[@cP@es %B4#Wy$)7$)7$5d$5d$5d$)g$-c$S5+_a$_a$Dj$Dj$a9$a9$b9$b9$b9$b9$L1#L1#00$[{#M+#M+#} @} @:P+:P+< @< @bX+bX+%B+%B+zD+=B+3R+3R+mX+#a@S##{]%K)@K)@6o@6o@fz@fz@fz@fz@vD+!w+dB@dB@)w+vD+@B+,w+up+up+#k+#k+#k+#k+#k+#k+_x@%N+%N+%N+`K+`K+e0#e0#e0#I6@sD+8X+t&@t&@t&@`+#t&@{/+_k+-2+Xg+Xg+gi+gi+2&@3&@GZ@_1@gr+_1@+}#S%$Zv#Zv#;>$;>$C_$C_$[T#Ly#My#My#wB#)E#I`#>>$'$$'$$w'$#;$#;$^>$Ty#Ty#Wy#Wy#VY#VY#ci#ci#ci#ci#ci#ci#/l#J`#J`#~X#6T#6T#8V#8V#J`#J`#~X#~X#~X#6T#6T#6T#'M#R`#L7#Fq#Fq#Fq#$K#HB#{O#{O#K_$K_$K_$K_$K_${O#>M#c@$c@$c@$Q`#Q`#Q`#Q`#dh$dh$yi$yi$yi$yi$xn$yi$'J$ M$ M$)`$)`$XK$XK$]]%^]%E]%F]%E]%XK$)`$XK$FV$@{%KP$G]%tT$LV$[N$UP$UP$3N$3N$3N$AO$_{%_{%_{%_{%1~%1~%1~%1~%3N$3N$3N$3N$&,%&,%^'%@M$H]%I]%J]%J]%|!%Y@%Z@%4!%4!%Z@%|!%X@%Z@%Z@%Z@%Z@%Y@%Y@%|!%|!%4!%4!%4!%1!%K]%K]%K]%K]%(]%d!%:]%:]%){%[]%L]%[]%`@%`@%}!%}!%`@%JR$GP$VQ$VQ$GP$JR$JR$JR$JR$GP$VQ$.Z$.Z$vs$vs$vs$|m$|m$|m$.Z$|m$gr$$l$|m$vs$$l$Jj$bT#bT#+Z$+Z$<$%~z# u$yi$0V#>6$vn$I$OP#Xy#Wy#L`#L`#L`#L`#>|+>|+;|+;|++K#Y3+%2+hd+gd+Es$7q$In$Qy#Qy#6t#<@$<@$|f#5,$5,$q=$-E#`J#}t#jV@y)$0]%V]%W]%X]%_c@>w+L)@L)@a&@a&@0=@0&@8V@8V@).$]k#;'%Y]%`{%X>%X>%J #J #E@@8e#8e#!l$!l$im$;u$;u$Js$Js$,H$sS$sS$hU$hU$cN$Ej$47$e;%d8$d8$kF$kF$lF$lF$WL$WL$BM@BM@XK+WK+_P+hX+Wx$Wx$!k#!k#zM@AM@CO@SQ@Tm#]k#Z]%`]%`]% W$r;@Q)@3G+e'#7]+.*+g&@ c$97$Wj$36$;M %/]$.^%M#%M#%1f$K;%^Z$^Z$,k$Ui$E#%f]%O`$#.%#.%l*%#.%l*%h]%g]%h]%$%%D#%i]%:-%]'%1~%1~%1~%1~%6)%6)%' C O k@ }* T| 9w+>^%k~@,^%^B@:t+'^%zA$)^%=]%-]%_p$#.$vj@Ch@!^%w$#(O.:2@+3#Q{ bf xU+3)@h|@**+|9$~^%n4#@A$y[#3Y+c!$Mq@l9@~R@0#@h'%5>@U0@Z+#{^%]^%c~+t0+6I#6I#)_+H#$t:+Ul+<[+cO$Nr$;|+Ry#q!%9t#&^$W4$F7#(C#EC$u0#at#)E#}T#A0+}T#z0+)E#z0+A0+}T#B0+T@%g8+g8+B0+}T#'6+!6+&2+&2+&2+!6+!6+}T#}T#C0+C0+D0+2I#%2##2##2#D0+w'$C0+C0+C0+C0+T@%T@%T@%C0+C0+C0+B0+B0+A0+A0+A0+Z3+Z3+~6+~6+~6+!6+!6+!6+!6+!6+!6+!6+!6+!6+!6+!6+Z3+Z3+Z3+Z3+Z3+Z3+Z3+Z3+!6+!6+~6+~6+!6+)6+)E#wB#}T#}T#}T#A0+^>$^>$#;$#;$$;$,X#VY#VY#VY#K`#qT#+;$F7#*2#-2#-2#=2#X%$s=$D+%(l#(l#_l#Af#Af#Af#Dc#Fq#)M#Y`#N7#.O#4I#8*%o[$^^%C,+/^%K{%A~$${@X{$-E QC }g }f 9~ 9~ +dB@[^%}^%hy+up+up+#k+#k+#k+#k+#k+#k+-w+-w+-w+-w+.B+.B+VH@VH@VH@ur+|G+:V+^G+^G+^G+`+#`+#t&@s=@nD+Nl+qD+YA+ZA+>k+ir+fi+fi+fi+fi+YN#YN#k'$k'$k'$k'$1t#1t# ;$ ;$u.$u.$Uy#)E#>>$E_$|@$T%$|@$|@$|@$|@$|@$|@$W4$W4$X%$X%$DB#DB#DB#DB#DB#DB#5@$J`#~X#8V#8V#8V#6T#~X#J`#~X#6T#8V#8V#6T#~X#J`#J7#J7#J7#R`#R`#R`#`y#`y#Z`#Z`##Q#KR#KR#KR#K_${O#,M#b@$b@$b@$P`#P`#P`#P`#Y4$c($d($d($>6$ u$vn$#l$VK$'J$'J$`L$GV$GV$`L$'J$GV$GV$FV$FV$`L$EV$EV$@{%KP$:N$G]%tT$`$W@%W@%X@%|!%|!%|!%}m$1 %1 %ZK$>`$>`$W@%W@%|$%`Y$|m$$l$$l$|m$$l$gr$,`$|m$Jj$Jj$$l$|m$vs$|m$ZX$[q$[q$YK$Jj$dh$yi$>6$d($d($3~%3~%4^%5^%5^%5^%~`$H+%H+%6^%OV$OV$;#%AO$7^%zO$$>%8^%9^%0^%#,%=&%;&%:~%#Y$:~%H~%H~%x*%a^%b^%3;%.Y$qQ$oR$c^%d^%^N$s)%{X#`Y#I7#5T#O`#(w#(w#3*$j@$j@$Zn#~b$~>$b,$,/$zB#zB#zB#AB#|T#|T#'|+'|++G#+G#%w#%w#[T#[T#[T#sq#Qy#vB#%w#My#%w#[T#K@K #e^%e^%K #fX+iX+iX+5($d9$)H$!I$Ks$;J$;J$,M$cN$sS$sS$cN$a9$Ej$_8$_8$b>%d8$lF$WL$hm$WL$lF$kF$~J$)I$/H$kF$5($!l$b9$ow$d9$!l$gm$H.%f^%g^%Z/$7&@u!%a=@t<@t<@P)@ZK+:P+BO@,b$D#$~=#[w$ds$>u$Pz$R-$1i }f }f }f }f }f }f }f >$C7#'l#'l#,f+j0#,f+!f+md++*$+*$$a@=g$Kb+Kb+Xg+Xg+nD+s=@t&@`+#gi+gi+gi+gi+gi+dy+dy+dy+ZA+YA+dy+gi+gi+dy+YA+ZA+u&@u&@YA+YA+{/+_k+-m+'k+Sn+4T+:f+R@+Kq@90$S4$b/$)`+5c#WJ.4~%m^%n^%YG$o^%c1#B_#+~ $p@! $Yy [u hp @p IM.]Y.0] Ht p^%~(+q^%%^%Ca.r^%s^%t^%}i+`k./I g*.7}.8}.Rx.Rx.Ov+Ov+Ov+7}.7}.7}.z<.z<. Z Z Z ZY ZY ZY ZY ZY ZY ZY ZY KB KB KB KB KB KB KB KB ko.ko.ko.ko.ko.ko.ko.ko.@$+13+ko.NM+ko.@$+O4 .Z ]! ]! ]! {! be+8g.8g.8g.gA w8.be+{! {! be+", "dd g~ g~ kC o} kC g~ 8c 9c E7 g~ dd g~ g~ E7 E7 g~ E7 7c 8c 9c g~ o} g~ g~ g~ g~ g~ g~ g~ g~ ie ie ie ie ie ie ie ie ie ie ie ie ie ie ie uk Tl 9%.9%.9%.9%.9%.Tl Tl oG.uk je je je ie ke m` d( Lv.Lv.Lv.m` m` lI.lI.ie 7c >+ ,+ X k@ I(@8.@xq.u^%vq.v^%oo.w^%x^%Po$S7 -]%e%#|E$10@u@#{~+*c+OM$^d@$^>$#;$#;$$;$$;$VY#VY#K`#5*$7T#&2#=2#*2#*2#F7#0($X%$s=$et#77$77$Af#Af#Af#Af#Dc#Fq#st#tt#N7#.O#4I#)/+Cg+^^%~M#/^%C^%A~$OA$*S -E QC }g }f 9~ 9~ >$E_$E7#|@$|@$|@$|@$|@$|@$|@$W4$W4$X%$X%$DB#DB#DB#DB#DB#DB#5@$/l#J`#6T#6T#6T#~X#J`#~X#6T#8V#aV#aV#8V#6T#~X#:X#J7#J7#R`#R`#R`#`y#`y#Z`#Z`#Z`#KR#KR#K_$K_${O#b@$b@$b@$b@$P`#P`#P`#P`#]X#]X#d($>6$yi$ u$us$@l$ys$VK$'J$>,%GV$pT$`L$VK$GV$pT$FV$kU$`L$>,%EV$@{%G]%G]%tT$`$W@%W@%W@%X@%|!%|!%|!%ZK$ZK$ZK$ZK$ZK$>`$>`$>`$}$%,`$|m$$l$|m$|m$$l$gr$.Z$|m$Jj$Jj$$l$|m$|m$$l$ZX$[q$[q$[q$Jj$dh$yi$yi$>6$>6$We$We$5^%5^%[!%[!%~`$H+%H+%6^%OV$OV$;#%AO$H^%i{%yO$$,%j!%9^%I^%3]%J^%X&%p=%X&%f=%K^%'Z$L^%M^%l-%E=%N^%6P$O^%^{%`Q$s)%^X#`Y#I7#6V#5T#lt#lt#3*$B0#j@$Zn#~b$~>$b,$,/$zB#zB#zB#AB#|T#|T#Y3+'|+xB#xB#%w#u.$[T#sq#sq#sq#;X#+I#%w#Ly#Ly#,l#$$[t#}t# w#5=@&n#[a@@p$|t##k+up+;w+;w+L)@{k@a&@a&@0&@a=@m5$9=@).$).$6&@SQ@)K@K #e^%e^%U<#4Z+9e#9e#5($d9$!I$!I$Ks$Ks$AU$,M$sS$sS$sS$sS$cN$a9$c9$_8$pw$d8$kF$WL$WL$WL$lF$/H$P^%.@%-L$/H$lF$!l$0N$ow$!l$!l$hm$gm$.@%I.%@@%X/$t!%qt$Q,@Q,@R,@Q)@T,@7V@,b$M[#/d$ I$XH$[=%1c#n[#1i }f }f }f }f }f }f }f Yw vo@m1#{}+ G@Q^%R^%`a$@L+C[+<+@:h+;]@'i$bg$bg$j^%j^%K;%0>%)B$S^%*Y$*Y$*Y$*Y$*Y$i]%i]%P`$-~%-~%-~%P`$P`$i]%i]%p,%r%%]'%G'%]'%M]%o%%4N$3N$UP$UP$q.%LV$G]%qO$3|$0T#7T#(K#SP#}I#^g$}I#}I#SP#}I#^g$We$mO$nO$F)%F)%x)%<$%bT#+O#NB#MB#Pt#*G#*G#*G#'M#L7#Fq#J7#J7#L7#Dc#_l#77$EB##G#H~$H~$Cc#EB##G#^$$E~$>>$C7#id+'l#,f+j0#|i#!f+!f+0[+=2+F:+]|+{_+{_+gi+gi+s=@t&@t&@`+#dy+dy+dy+dy+gi+gi+gi+gi+ZA+ZA+ZA+ZA+ZA+ZA+ZA+ZA+oD+oD+ZA+1$@{/+:k+lp+Qn+,i#Gn+yM@j~+<6$`]$gZ.c!$4P+bI.%K.T^%U^%V^%W^%%] H5@Y:@r[@SC @Y^%q]%f#+cb+}i+}V.!&.3% g*.7}.7}.7}.8}.Rx.Ov+Ov+8}.8}.8}.7}.7}.z<.z<.z<.,v.,v.,v.,v.,v.,v.,v.,v.ZY ZY ZY ZY ZY ZY ZY ZY @$+@$+@$+@$+@$+@$+@$+@$+13+13+ko.ko.13+@$+=L O4 {! {! {! {! {! be+be+be+w8.8g.{! ]! ]! {! ", "dd E7 g~ kC o} dd E7 9c 7c E7 g~ g~ g~ E7 E7 g~ g~ 7c 8c |% 9c kC )@ 7c 7c 7c 7c 7c 7c 7c 7c ie ie ie ie ie ie ie ie ie ie ie ie ie ie ie uk (j.X)@X)@X)@X)@X)@(j.(j.:j.oG.ie je je je ie oG.+h.Ll Ml Ml :j.:j.mI.mI.le 9c U ,+ O X 23 Y m. /% k* ]] W2@yn.R`+Z^%M[@S7 e%#vj@; #i`@`^%x@# /%V~%}C@gw@b{ 27 =q$k)%}a h|@Zk@km@D]#}p#$Q$]F$L%#s[$./%+/%@/%XO@r(@7m+sX@ho@ig@zj$Sk$J{%#/%$/%0d+Gg+q:+8[+cO$7[+UY#Ry#q'$q'$E7#E7#A)$z!$p'$p'$)E#}T#A0+}T#z0+)E#z0+A0+A0+B0+C0+T@%C0+B0+}T#'6+!6+&2+&2+&2+!6+!6+}T#}T#B0+C0+D0+:z$&M$%/%%/%'B$:z$g8+g8+T@%C0+C0+B0+B0+B0+B0+A0+A0+A0+}T#}T#}T#{6+Z3+Z3+Z3+~6+~6+!6+!6+'6+'6+'6+'6+'6+'6+'6+'6+&2+&2+&2+&2+!6+!6+!6+!6+A0+B0+B0+#;$#;$^>$Ty#5V#}T#}T#Ty#^>$^>$^>$$;$$;$5*$5*$K`#K`#M`#7T#8T#&2#Ye$*2#F7#`A$X%$^$$X%$X%$77$77$Af#Af#Af#Af#Dc#L7#tt#)6$D2$md$'B$6I#_9$&/%~M#*/%'U#[a$e]@DN Fu z }g }f 9~ 9~ w+>w++B++B++B++B++B++B+|R+|R+|R+|R+K,@K,@ N+ N+7X+ N+tI+@w+nI+nI+Gt+}G+}G+^G+[T+/G+Nl+qD+u&@oD+/+@/+@h0#h0#h0#h0#:i#:i#Vl+%3@%3@em$#w#W+$7q$7q$X3+X3+z0+z0+>>$>>$'$$'$$|@$|@$|@$|@$|@$|@$W4$W4$X%$X%$DB#DB#DB#DB#DB#DB#Zn#5@$/l#J`#~X#~X#J`#J`#8V#8V#aV#0V#0V#aV#8V#8V#/K#:X#:X#/X#/X#/X#'M#'M#$K#$K#HB#nT#{O#{O#{O#^K#c@$c@$c@$c@$Q`#Q`#Q`#Q`#`4#^X#d($yi$ u$ u$xn$,6$KP${>$ys$KP$pT$XQ$kU${>$pT$XQ$pT$XQ$kU$JP$kU$c,$KV$QP$vO$vO$wO$i{%7^%7^%zO$:-%:-%<-%<-%<-%~#%1-%{;%1-%!#%<-%[-%}-%='%s'%=/%=/%=/%{'%],%+!%+!%B,%1!%4!%Y@%|!%X@%X@%X@%|!%Y@%Y@%Y@%Y@%Y@%Y@%Y@%Y@%@M$@M$@M$@M$H]%O{%O{%*{%*{%*{%q~%-/%;/%;/%>/%>/%W@%C,%C,%*,%*,%*,%,/%,/%/'%/'%/'%E,%E,%E,%E,%E,%[$%,`$|m$$l$|m$vs$|m$gr$vs$$l$Jj$Jj$$l$|m$|m$gr$FV$`L$`L$`L$@{%@{% u$ u$Nx$Nx$Xe$Xe$'/%'/%'/%'/%/u#%Z$~`$6^%2v$2v$5N$4N$d$%d$%i{%{'%8^%0^%)/%!/%~/%V;%X&%{/%@%%]/%~Z$^/%$Y$s=%//%4X#bm$(/%NP$(N$.u$]X#P`#`Y#6V#5T#4T#lt#3*$B0#j@$Zn#~b$~>$~>$,/$zB#zB#AB#AB#@K#|T#Y3+Y3+xB#xB#%w#u.$[T#sq#sq#sq#+I#+I#%w#Ly#[T#,l#$$-E#}t#}t#pD+rX@[a@@p$-:#:c@;w+>w+>w+fz@fz@=9@=9@0&@0=@m5$8&@/t#/t#7$@SQ@E@@U<#_/%_/%U<#| @8e#Xx$lF$lF$%4=%4=%L)%r%%1~%G'%]'%M]%e$%BO$AO$UP$UP$[N$LV$G]%qO$3|$9T#8T#>}#SP#}I#}I#}I#SP#SP#}I#^g$We$mO$:!%nO$nO$#'%ch$NB#MB#MB#Pt#*G# Z# Z#*G#R`#L7#L7#R`#'M#R`#:X#/K#(l#Af#EB#Cc#Cc#zf#EB##G#^$$E~$>>$gw$id+id+~i#,f+,f+)f+)f+{|+q7#bc#=l#mi+mi+dy+YA+t&@`+#`+#`+#ZA+YA+YA+dy+gi+gi+Xg+Xg+YA+ZA+#l#Cy#Cy##l#ZA+YA+v=@v=@1$@1$@=m+!k+Kt+4&@^+@yI+BO@}/+DT# l#1/%6/%xR#7/%L'%8/%9/%wG N5$YT@.<@X:@Yr /V#ut 0/%[) Ch 6,@k[ W3.Z< hr wo.a/%b/%c/%d/%e/%fC zR Zf *j c, UH.7}.z<. Z Z 7}.Rx.Ov+Rx.Rx.Rx.8}.8}.7}.7}.7}.i~ i~ i~ i~ i~ i~ i~ i~ ,v.,v.,v.,v.,v.,v.,v.,v.=L =L =L =L =L =L =L =L ko.ko.13+@$+=L @$+@$+@$+be+be+{! {! {! {! ]! ]! be+{! {! ]! ]! {! ", "g~ E7 g~ dd kC dd E7 7c E7 E7 E7 E7 E7 E7 E7 9c 7c E7 7c 8c 7c dd @^ 7c 7c 7c 7c 7c 7c 7c 7c ie ie ie ie ie ie ie ie ie ie ie ie ie ie ie uk _j.hY.hY.hY.hY.hY._j._j.:j.:j.le ie ie je je $~.+h.Ll Ml Ml :j.:j.mI.mI.ke ke 4c U ,+ t R@ *+ %. ]. t$ tp.Q7.y# f/%%A#Z^%F..W:#X:#50@pK bw@ad@90@Vx@t@#g/%5R.Pm .3 {- !#.}a Y!@t9@z^%v}@QH#h9$=/#}K#MX.^i@!_#7]@A]%h/%7m+7>@[]@ZJ@%t@sz$<^$i/%Pl+#_+q:+8[+cO$Nr$}T#UY#`A$|@$'$$I`#u0#zC$p'$o'$)E#}T#A0+}T#z0+)E#z0+A0+A0+A0+B0+C0+B0+A0+z0+'6+!6+&2+&2+&2+!6+!6+}T#}T#A0+B0+D0+:z$%/%VP$VP$'A$3I#3G#!:#g8+T@%C0+B0+A0+B0+A0+A0+A0+}T#}T#z0+z0+{6+{6+Z3+Z3+Z3+~6+~6+~6+'6+'6+'6+'6+'6+'6+'6+'6+d8+d8+d8+d8+)6+)6+)6+)6+A0+B0+w'$w'$w'$$;$,X#,X#Ty#}T#Ty#^>$^>$^>$$;$$;$5*$5*$K`#K`#qT#7T#8T#aT#;}#*2#`A$q'$^$$^$$0($^b$di#77$Af#Af#Af#_l##5#L7#)6$)6$D2$[I#3I#6I#_9$j/%|z@O1+(d$[a$e]@DN Fu z }g }f 9~ 9~ ]$+{%%N$%N$f0$f0$eN$)Z#k7#k7#U~$_!%%W#(^%_^%Z!%qS$^9$e.%e.%|S#|S#8p$8p$<^%<^%<^%<^%<^%<^%<^%<^%8p$8p$aw$IR$4w+]8$Ax$Bx$A+%i%%$)%$)%O@%O@%LB$C;%C;%C;%Di$)g$)g$5d$8F$8F$S@%S@%^m$Dj$,p$Ej$bq$ow$b9$b8$M1#M1#[{#[{#M+#nZ@eX+eX+T,@T,@T_@T_@jy+jy+Pt+Pt+ky+ky+ky+zD+#a@mX+,B+,B+T##T##jb#jb#Rx#>;%>;%>;%'w+!w+vD+vD+dB@sD@@B+1R+gy+gy+5e@5e@5e@5e@5e@5e@|R+|R+|R+|R+K,@K,@ N+ N+7X+ N+tI+@w+Gt+Gt+Gt+/P+}G+^G+[T+/G+Nl+qD+u&@oD+3&@3&@Qg+Qg+h0#h0#i0#:i#1=$em$#}##}#SR#SR#Es$gd+hd+%2+}T#}T#>>$I`#v.$v.$T%$T%$T%$T%$T%$T%$`A$`A$0($0($di#di#di#di#di#di#Zn#5@$5@$/l#/l#J`#J`#J`#8V#8V#8V#aV#aV#8V#8V#8V#/K#/K#/K#bV#/X#/X#+5#'M#R`#R`#HB#`y#`y#`y#^K#_X#c@$c@$c@$c@$Q`#Q`#Q`#Q`#7V#{X#d($ u$@l$ u$,6$67$G]%qO$qO$:N$LV$[N$tT$:N$[N$[N$LV$LV$LV$LV$LV$LV$wO$wO$wO$}N$i{%7^%7^%:-%:-%:-%!#%<-%<-%<-%1-%1-%7>%1-%<-%~#%L+%|-%='%C!%=/%=/%=/%{'%],%+!%+!%+!%F^%4!%Z@%|!%X@%W@%W@%W@%|!%|!%|!%|!%|!%|!%|!%|!%nU$>)%B,%^'%@M$@M$O{%O{%k/%:{%*{%q~%-/%;/%>/%k.%W@%C,%*,%*,%*,%*,%*,%*,%C,%C,%/'%/'%E,%);%);%KR$`Y$.Z$|m$|m$vs$vs$|m$gr$|m$gr$Jj$Jj$$l$|m$$l$Jj$#Z$#Z$`L$`L$>,%>,%@l$@l$UQ$UQ$mO$mO$'/%l/%l/%l/%m/%/u#~`$6^%2v$2v$5N$BO$H^%d$%d$%7^%$>%8^%0^%n/%o/%p/%4;%];%<`$q/%r/%s/%t/%M)%u/%=X$+Z#rO$v/%_N$.u$]X#P`#P`#(X#6V#4T#4T#y.$B0#B0#5@$Zn#OP#~>$Zy$AB#AB#AB#AB#@K#@K#Y3+Y3++G#+G#My#My#Ly#Ly#[T#[T#+I#+I#[T#[T#hf#,l#(@$cc#`J#`J#oD+v=@u=@[a@oe#-:#+B+>w+>w+gy+fz@Rx#b=@b=@0&@0=@9=@8&@/t#/t#7$@DO@E@@U<#_/%_/%U<#| @Xx$YP$lF$WL$L$w/%x/%A%%5o@5o@5o@r;@s;@kX+nZ@ni$M[#]v$&I$y/%z/%A/%|h$1i }f }f }f }f }f }f }f 0> |/%vo@>1+{}+w'@B/%!>+C/%>Q#&<+(e#gq@E4@1H$/;%D/%3/%E/%F/%P*%!A$ Y$YV$n%%d$%5/%9*%:-%F'%~#%~#%1-%1-%t&%-'%T>%T>%b*%r%%1~%1~%]'%o%%e$%;#%4N$j]%j]%[N$LV$G]%qO$3|$9T#aT#SP#SP#SP#SP#SP#SP#SP#}I#^g$We$mO$:!%:!%:!%FP$~z#NB#NB#MB#Pt#*G# Z# Z# Z#R`#L7#L7#R`# Z#'M#/X#/K#(l#_l#Af#Dc#zf#zf#EB##G#^$$E~$>>$gw$Gy#Gy#*2+I0+*2+ld+)f+{|++w#bc#=l#b[+b[+ZA+ZA+`+#`+#`+#`+#2$@2$@ZA+YA+dy+gi+Xg+Sl+gi+YA+#l#1&@1&@#l#YA+gi+Pn#]/+1$@=m+!k+Kt+:T#G/%1~+|z@x_$8)#H!#@/$7R+B@$H/%@4 I/%J/%K/%L/%mI#[g )> )> )> )> )> )> )> i~ i~ i~ i~ i~ i~ i~ i~ @$+@$+@$+@$+@$+@$+@$+@$+NM+ko.@$+O4 O4 =L 13+ko.be+be+be+{! ]! 5A.5A.5A.{! ]! ]! ]! ]! ]! ", "g~ 7c E7 dd kC g~ E7 g~ E7 E7 E7 E7 E7 E7 E7 |% 9c dd kC g~ E7 E7 g~ 7c 7c 7c 7c 7c 7c 7c 7c ie ie ie ie ie ie ie ie ie ie ie ie ie ie ie uk _j.hY.hY.hY.hY.hY._j._j.:j.:j.le le ie je je N6 vk 1c *=.*=.oG.oG.kb.kb.Qw.ke 4c U ,+ t R@ u 2c =$.=$.r& V+ W% k9 Q/%>9 Rf X[.B8@0Y#Wx@Jv@[h@M$#R/%S/% ;%;(#-]%&I.yl T/%{- 5O$Y!@y^%z^%>-#8|$Y>%U/%MJ@7 @N$+.{@Y)%['+V/%d4+E=@3e$uH@.K@m(@W/%VI$$_+!M#<[+YM$3[+B0+}T#X/%T%$'$$D7#ct#zC$p'$o'$)E#}T#A0+}T#z0+)E#z0+A0+A0+A0+A0+A0+A0+}T#z0+)6+!6+&2+&2+&2+!6+!6+}T#}T#}T#B0+D0+:z$&M$%/%VP$'A$'B$3G#!:#g8+T@%C0+B0+B0+B0+B0+B0+A0+A0+}T#}T#}T#{6+{6+{6+Z3+Z3+Z3+~6+~6+'6+'6+'6+'6+'6+'6+'6+'6+d8+d8+d8+d8+)6+)6+z0+z0+^>$^>$$;$@;$@;$5*$K`#,X#Ty#Ty#Ty#^>$,X#,X#$;$$;$5*$K`#M`#M`#M`#qT#6T#8T#Ye$*2#`A$q'$^$$X%$0($^b$di#di#EB#Af#_l#_l#:X#J7#)6$Y/%6w#;%>;%>;%dB@!w+)w+!w+dB@dB@#B+1R+gy+gy+5e@5e@5e@5e@5e@5e@|R+|R+|R+|R+K,@K,@ N+ N+7X+7X+(t#tI+Gt+Gt+/P+/P+Gt+nI+[T+/G+_V+69@u&@oD+2&@2&@Qg+Qg+q7#q7#if#df#TR##}##}#h8$SR#RR#gd+gd+$2+$2+A0+}T#>>$>>$v.$v.$PB$PB$PB$PB$PB$PB$ (% (%.(%.(%z0#z0#z0#z0#z0#di#5@$5@$5@$5@$/l#/l#J`#J`#6T#6T#6T#~X#~X#6T#6T#6T#(K#(K#(K#>}#bV#bV#6$ u$@l$ u$,6$67$uO$tO$q1$tO$uO$j]%%S>%$>%xU$xU$H*%u=%+!%F^%4!%Y@%X@%W@%W@%W@%W@%|!%|!%|!%|!%|!%|!%|!%|!%nU$|N$+!%+!%2N$#!%#!%c{%@(%@(%#(%$(%%{%o~%%(%2~%X@%*,%*,%*,%*,%*,%C,%C,%C,%C,%/'%/'%E,%);%);%KR$,`$vs$|m$|m$.Z$.Z$|m$gr$$l$gr$dh$Jj$$l$|m$gr$dh$#Z$#Z$#Z$#Z$kU$kU$#l$#l$FP$FP$Lt#Mt#'/%'/%Jt#'/%5^%(%q/%,(%'(%)(%wL$&;%oV#g@$_N$Z4#]X#]X#P`#`Y#6V#5T#4T#lt#y.$WY#B0#5@$Zn#OP#OP#Zy$1T#1T#AB#AB#@K#@K#+K#+K#Y3+Y3+X3+.K#In$ ;$ ;$ ;$.G#.G#[T#sq#,l#,l#Tn#oB#.}#`J#u&@`+#jc@p;@oe#o;@+B+>w+>w+gy+fz@Rx#b=@b=@Z.@0&@9=@8&@/t#!(%7$@DO@E@@~^#~(%~(%~^#mZ@YP$HO$WL$WL$2#%2#%2#%2#%:/%Ks$RQ$tV$tV$tV$hU$sS$b9$b8$pw$pw$iF$iF$jF$kF$kF$)I$;L$w/%w/%L$w/%x/%E+$Q,@Q,@Q,@R,@Q)@2T+gX+L1#m~+R2@C~${(%m %](%kh$1i }f }f }f }f }f }f }f %T>%b*%r%%1~%1~%]'%e$%<(%5N$BO$j]%j]%[N$LV$tT$:N$DM$67$9T#SP#SP#SP#SP#SP#SP#SP#^g$3~%We$Xe$mO$mO$mO$UQ$bT#sn$sn$0h$ah$z.$Qt#Qt#`y#$K#C0#C0#HB#`y#`y#R`#_l#(l#_l#_l#Dc#Dc#zf#EB##K#s=$q'$E_$F_$ 4+ 4+I0+_[+k8+md+!f+{|+q7#g0#g0#b[+ni+2$@2$@v=@`+#t&@s=@#l#2$@ZA+YA+dy+gi+Xg+Xg+Xg+dy+ZA+#l##l#ZA+dy+$4+}&@&m+=m+)k+ m+R.@[(%Z[#F9#tD@VQ@A($']$}(%|(%1(%2(%Er $$@eN#nH AD .X CR@{Z# X >z $S rm$#+@3(%iF+4t 4(%k7@:j wB.]g@^i nR 6t 5(%SG b7 9. %n 6g+jy.8}.7}.z<. Z Y% Z 7}.8}.Ov+Ov+Ov+Rx.Rx.8}.8}.8}.)> )> )> )> )> )> )> )> Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.13+13+13+13+13+13+13+13+ko.13+=L O4 O4 @$+ko.NM+be+be+{! ]! ]! 5A.Ea+Ea+]! ]! ]! {! {! ]! ", "E7 7c E7 dd dd g~ 7c dd g~ E7 7c 7c 7c E7 E7 |% 7c kC f^ kC E7 9c 8c 7c 7c 7c 7c 7c 7c 7c 7c ie ie ie ie ie ie ie ie ie ie ie ie ie ie ie uk (j.X)@X)@X)@X)@X)@(j.(j.uk uk le le le ie je N6 vk 1c *=.*=.oG.oG.kb.kb.HO.HO.nf 5c >+ ,+ R 9& ]@Su$U5.if r& V+ %@ 6(%&k *L.GJ+B1@7(%>R#)+@#j@8(%9(%0(%a(%_>%b(%14+qU.#s@yp hk i_@(b )#+fk@}O.@E#6%%}p#Oj#p>#V_#b!$Vm#R!%c(%vm#D=@t3#h*%]:@JF@d(%e(%6I#t0+W3+s0+C0+A0+X/%T%$E_$I`#t0#t0#p&%F0+)E#}T#A0+}T#z0+)E#z0+A0+A0+A0+A0+}T#}T#z0+z0+)6+!6+&2+&2+&2+!6+!6+}T#}T#}T#A0+w'$2I#%2#&M$&M$3I#3I#3G#!:#!:#g8+T@%T@%C0+C0+C0+C0+B0+B0+A0+A0+A0+]6+]6+{6+{6+Z3+Z3+Z3+~6+!6+!6+!6+!6+!6+!6+!6+!6+&2+&2+&2+&2+!6+!6+}T#}T#5V#Ty#,X#$;$K`#K`#K`#VY#>X#Ty#Ty#^>$,X#,X#$;$$;$K`#VY#ci#ci#ci#M`#~X#7T#^b$F7#`A$W4$X%$X%$0($^b$DB#DB#EB#Af#_l#_l#:X#J7# l$Y/%6w#@5#%2#[[+_9$f(%5%$g(%`/%q!$Uk$Zi@Ux i*$}g }f 9~ 9~ w+>w++B++B++B++B++B++B+|R+|R+|R+|R+K,@K,@ N+ N+eh#7X+(t#tI+Gt+/P+/P+/P+Gt+nI+[T+/G+_V+69@u&@oD+2&@2&@Qg+h0#{|+{|+V4#>$'$$v.$OB$OB$OB$OB$OB$OB$(O#(O#j(%j(%RL#RL#RL#RL#RL#RL#/l#/l#5@$5@$/l#J`#~X#6T#6T#6T#~X#J`#J`#~X#6T#7T#Ye$Ye$Ye$>}#>}#>}#6$ u$@l$@l$us$Zt$5N$OV$D-%K=%CO$;#%;#%5N$;#%;#%BO$BO$BO$4N$4N$4N$~;%~;%TP$TP$TP$TP$k(%k(%:;%:;%:;%w.%m!%m!%n!%n!%n!%m!%m!%k!%E*%F*%H;%G;%S>%S>%$>%xU$xU$H*%u=%+!%I'%Y@%|!%X@%W@%W@%W@%W@%X@%X@%X@%X@%X@%X@%X@%`K$>)%+!%],%],%2N$2N$#!%#!%@(%l(%#(%$(%&{%&{%m(%%{%|!%,/%*,%*,%*,%C,%C,%C,%/'%/'%/'%E,%E,%E,%E,%E,%vs$|m$|m$vs$,`$,`$|m$gr$gr$Jj$dh$gr$|m$|m$Jj$VK$#Z$#Z$#Z$n(%kU$kU$+K$+K$UQ$UQ$Mt#Mt#o(%o(%Ox$Ox$p(%(%v(%w(%x(%-(%y(%w+>w+fz@fz@=9@=9@Z.@0&@8&@9$@!(%!(%EM@F@@5$@M+#~^#~^#M+#M+#Xx$HO$hm$hm$2#%2#%2#%2#%2#%Ls$SQ$hU$tV$hU$sS$cN$b8$c9$pw$pw$I$+I$+iF$jF$kF$)I$=@%z(%;L$~]$s$%2#%!I$!I$Ks$Ls$#RF#A(%DT$B(%7E$}f }f }f }f }f }f }f 1+Tk$]L$f!@C(%5Z.[Y+^'#q)%/L+Nc$D(%K;%E(%5r#F(%G(%H(%!A$OV$FS$QP$vO$wO$7^%1N$F'%F'%<-%<-%t&%b*%T>%4=%4=%L)%r%%1~%1~%_{%e$%YW$CO$;#%}#>}#>}#SP#SP#^g$3~%We$Xe$mO$mO$Xe$Nx$bT#sn$sn$0h$ah$z.$Qt#Qt#`y#$K#IB#IB#Zy#$K#$K#Fq#Af#77$_l#_l#Dc#zf#Cc##G##K#s=$q'$E_$F_$j8+j8+J0+#|+k8+md+!f+=2+{|+]|+]|+mi+b[+ZA+2$@v=@t&@nD+mD+2$@2$@ZA+ZA+YA+dy+dy+gi+Xg+dy+YA+ZA+ZA+YA+dy+$4+}&@~k+)k+jr+I(%`A#%v$bK@R_@bp+QX.9e@L6@8M@+]%J(%K(%Er L(%M(%N(%O(%9O#Oe m>@$y d!+f{@$x $7 V9 P(%Sh+am D} =l.,g _z.Q(%Q+.R(%S(%ey.`5 DR i~ 9Y+({ Yt.8}.8}.7}.7}.z<.z<.z<.Rx.Rx.Rx.8}.8}.7}.7}.7}.)> )> )> )> )> )> )> )> i~ i~ i~ i~ i~ i~ i~ i~ ko.ko.ko.ko.ko.ko.ko.ko.@$+@$+@$+=L @$+13+ko.ko.]! ]! ]! ]! 5A.5A.5A.5A.]! {! {! be+be+{! ", "E7 9c 7c g~ dd g~ 7c kC dd E7 7c 9c 7c 7c E7 7c g~ o} o} g~ 9c 8c 8c g~ g~ g~ g~ g~ g~ g~ g~ ie ie ie ie ie ie ie ie ie ie ie ie ie ie ie uk Tl 9%.9%.9%.9%.9%.Tl Tl sk tk ie ke ke le ie $~..h.2c @n @n uk uk Mv.oI.IO.IO.ge 5c >+ V ;+ Q% X)@Gf.ve.%x+.n ^* Z p+ a7 T(%tv |{+(y.+6#qb@U(%V(%W(%X(%Bj@RZ$0n$py@-I.}u@Gp@fj hk V7 :b w[@T$+Tq@.p ;,$!-#b.%Uz$CA$Y(%5_#nz@D|+vm#4b#u3#Z(%/:@`(%Wi$ _%)/+#2+W3+T@%B0+U%$T%$8,$>>$zC$zC$p&%p&%)E#}T#A0+}T#z0+)E#z0+A0+B0+A0+}T#z0+z0+z0+z0+)6+!6+&2+&2+&2+!6+!6+}T#}T#}T#A0+#;$D0+1I#1I#1I#D0+:z$!:#!:#!:#g8+g8+g8+g8+g8+g8+T@%T@%C0+C0+C0+B0+]6+]6+]6+{6+{6+Z3+Z3+Z3+~6+~6+~6+~6+~6+~6+~6+~6+;6+;6+;6+;6+~6+~6+A0+A0+UY#5V#>X#,X#VY#VY#ci#VY#>X#Ty#>X#,X#,X#,X#K`#K`#^l#^l#@I#@I#5@$/l#J`#qT#X%$W4$`A$F7#^b$0($0($X%$DB#DB#EB#Af#_l#/K#:X#R`#._% l$tt#)2##2#&|+bi+|~#:/#+_%@_%j,%Uk$Zi@qI@i*$}g }f 9~ 9~ %S>%$>%xU$xU$H*%u=%+!%,/%|!%X@%W@%W@%W@%X@%X@%X@%X@%X@%X@%X@%X@%X@%`K$ >%f>%f>%f>%#!%2N$2N$2N$c{%c{%&{%&{%%{%%{%m(%%{%,/%9)%9)%g>%.>%.>%.>%h>%mU$mU$mU$mU$mU$h>%h>%/'%|m$|m$|m$vs$,`$,`$vs$gr$Jj$dh$dh$gr$|m$|m$Jj$xs$#Z$#_%#Z$n(%qT$pT$+K$}m$UQ$UQ$Cw#Cw# z$ z$Ew#Ew#Px$'/%`!%`!%_%,_%5I#*2#+;$>}#{X#`4#`4#`4#lV#H7#y.$y.$N`#N`#O`#H7#WY#/l#5@$Xy#OP#Sy#'X#1T#1T#1T#@K#@G#+G#+G#+G#+G#%w#%w#[T#[T#sq#sq#e8+.G#[T#|f#}f#1f#Tn#W1#.}#qD+u&@t&@|G+eK@p;@VH@#k+up+;w+;w+L)@{k@a&@a&@K@@Z.@8&@9$@!(%!(%EM@W.@4G+nZ@M+#M+#7V@7V@Xx$HO$hm$hm$2#%2#%s$%s$%s$%2#%ow$sS$sS$sS$cN$a9$c9$_8$d8$pw$I$+-,$I$+iF$kF$)I$'_%)_%!_%$K$:H$L$_^$mq@O)@O)@O)@>B+lX+ t1$Yw q[#{}+.B#wC$o>#'m+{_%]_%^_%a1@Nc$|f$/_%F/%F(%F(%G(%H(%J=%CO$QP$!;%vO$}N$7^%zO$A,%A,%!#%!#%b*%L)%4=%5-%5-%p,%t%%1~%1~%_{%<(% Y$CO$5N$uO$}#(K#>}#>}#SP#^g$3~%We$Xe$Xe$Xe$We$Mx$NB#0h$ah$z.$z.$Qt#_X#_X#`y#$K#IB#$I#C0#C0#IB#$G#yf#di#Af#Af#Dc#Cc#H~$#K##K#s=$q'$E_$qD$j8+l%$k8+k8+J0+!f+;p$q7#q7#]|+F:+{_+mi+ZA+2$@`+#s=@mD+cy+ZA+ZA+ZA+ZA+YA+YA+YA+YA+YA+YA+ZA+ZA+ZA+ZA+YA+{/+&m+kr+jr+Yl+]R#*'@v@@(_%Q_@N[$#@#tc@4g@__%:_%<_%(Q+[_%Ck$2z+8O#=C+}_%g*$>f#u7 `A o0 70 0K+^8 |_%1_%2_%;e LA#/r Rd.L[.sh#3_%#s.eE |c.x8 {! %.@uM be+8}.Ov+%U.Ov+8}.z<.Y% 8}.8}.8}.7}.7}.z<.z<.z<.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.i~ i~ i~ i~ i~ i~ i~ i~ 13+13+13+13+13+13+13+13+O4 =L @$+13+ko.ko.13+13+Ea+5A.5A.5A.5A.]! ]! ]! ]! {! 8g.w8.w8.8g.", "E7 9c 7c g~ dd E7 7c kC dd E7 7c 9c 9c 7c E7 kC o} kC g~ 9c 0' 8c 7c g~ g~ g~ g~ g~ g~ g~ g~ ie ie ie ie ie ie ie ie ie ie ie ie ie ie ie uk Rl |{.Rl |{.Rl Rl Rl Rl !B sk ie ke ke ke le uk .h.2c @n @n uk uk Mv.Mv.VD+je je 7c 4c U i+ ,' 9, $Z3+Z3+Z3+Z3+B0+B0+Vy#UY#5V#>X#,X#,X#!X#>X#E7#E7#E7#|@$W4$W4$`A$0($s=$#I#2T#2T##I#bi#yf#di##I#X%$^b$=2#=2#^b$0($^$$bi#DB#EB#:l##5#)2#R`#nT#]g${g$nT#:X##2#t0+%d$c_%;($d_%e_%XH$Uk$Zi@ z z }g }f 9~ 9~ }#SP#SP#SP#SP#}I#[X#[X#n1$n1$d($@Z$@Z$@Z$@Z$xs$xs$xs$c($Jj$ u$yi$ u$@l$FP$`t$zS$H+%f_%6N$g_%CO$e$%BO$e$%;#%o%%BO$M]%AO$_{%3N$zO$H^%.R$+R$+R$+R$&X$&X$c>%:;%:;%:;%m!%m!%m!%n!%n!%1-%t&%1-%7>%|-%|-%L+%A,%C!%C!%=/%{'%{'%+!%+!%>)%*,%*,%C,%C,%C,%X@%,/%|!%X@%X@%X@%X@%X@%X@%X@%`K$Y;%y~%X;%X;%h_%2N$2N$2N$%!%$!%o~%o~%o~%o~%m(%%{%^'%('%('%>)%nU$nU$h>%h>%xS$0)%0)%mU$h>%h>%.>%C,%XQ$#l$$l$}m$`Y$ZK$vs$@l$Jj$yi$dh$@l$|m$+K$Jj$xs$G+%i_%n(%$Z$qT$qT$KR$}m$ u$Nx$Xe$Dw#j_%Ew#.O#Sx$Px$[!%`!%`!%iw$ss$ss$yS$T[$q1$tO$q1$EM$k_%}N$h_%l_%m_%n_%&_%o_%p_%q_%r_%s_%g$%t_%1I#7T#aV#{X#`4#7V#7V#.5#WY#B0#B0#k@$j@$H7#.5#.o#/l#^l#Xy#Wy#Sy#'X#'X#1T#|T#@K#+G#+G#+G#6t#5t#5t#sq#|f#|f#}i#}i#'6+f8+5t#|f#}i#}f#Tn#W1#GZ@.}#qD+t&@}G+jc@u=@p;@.B+-w+up+up+L)@L)@P,@a&@K@@Z.@4 @9$@UQ@'_#8$@x;@2 @7=@wp#[ @}V+2R+E@@]^#Xx$Xx$hm$hm$hm$hm$2#%~l$bq$9-%9-%lw$M1#[{#Wx$hX+_P+u_%hF$@#$@#$}{#5Z+)I$v_%'_%=@%$K$_H${J$!H$-I$c8$im$Ls$:/%w_%:H$>L$UR$cB@0G+0G+0G+0G+0G+x)+AI+x_%/-+5Z.Gz$#J$WR$2j+y_%z_%)J 1i }f }f }f }f }f #1Y+A_%B_%mF@!3@>t$p,%Q*%:(%C_%C_%G(%D_%<(%5N$j]%j]%H^%4N$7^%3N$:-%1~%9*%r%%v.%q%%p,%E_%k^%p%%]'%6)%6)%AO$5N$OV$PP$uO$uO$tT$LV$LV$tT$G]%qO$DM$3~%.O#2#bV#TL#n1$j_%Mx$Cw#Nx$Cw#Mx$Mx$MB#z.$z.$Qt#_X#`y#HB#HB#`y#$K#IB#$I#$I#IB#CR#!E##G#/O#di#:l#EB#H_$#K#Bc##I#y0#E7#A)$qD$F_%l%$l%$ 4+*2+|i#y7#mc#+w#h0#]|+=g${_+YA+ZA+`+#nD+9X+XA+u&@YA+YA+ZA+ZA+ZA+ZA+ni+#l#V4@1$@1$@=m+sD+I6@{k+WN#'B+#<$#!@G_%2{#]+@H_%I_%J_%/d$Br+DR.g4$K_%L_%M_%kj$.x+8P#Cu+bL#D_#1L.n8 qB.zy ES+Cv N_%)l Fn.hH+L+.bm ]%a&%U_%V_%W_%X_%Y_%D&@Z_%UJ@`_%W/%d(%)-%2/#:[+j8+dF$ :%.:%+:%@:%#:%)f+~|+~|+QL#fd+gd+hd+$2+hd+$2+g($Tx$RR#1=$-X#,l#f8+!w#D7#I`#z0+z0+}T#}T#7[+7[+7[+7[+vT#y:+>_+'_+ 5$2[+2[+2[+2[+-|+_C#_C#$:%=Q#-Q#%:%%:%&:%=Q#$:%E0+_O#I~%8,$8,$8,$8,$I~%E0+E0+_O#_O#I~%8,$E_$E_$B0+{6+T@%g8+g8+T@%B0+A0+A0+A0+A0+^>$^>$Ty#Ty#E7#CC$EC$A)$EC$OB$QR#(C# (%0,$Yn#Yn#.(%.(%j(%RL#ei#/X#{X#aV#aT#aT#]>$=}#=}#j(%>2#SL#@o#Ec#Lq#ot#*:%=:%-:%@Q#]X#6[+8*%;:%iV@k7$>:%,:%k4#vC$fP@^A +z &E Z;$Z;$Z;$Z;$Z;$Z;$Z;$v$#f$Y]$ux$&I$Fm$&J$&J$UL$f0$NW$zV#}F$)Z#U~$):%7{%7{%(^%!:%_^%^^$Z!%WY$<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%IR$IR$Qy$Qy$kn$kn$A+%A+%~:%d_%+'%L>%Wy$Wy$B4#C;%j%%8F$-c$@d$@d$@d$Ej$a9$,p$b8$bq$ow$rr$0N$!l$vp#M+#oi$nZ@l#$[ @[ @7=@3G+3G+3G+:P+:P+Q,+< @Q,+Q,+w;@YK+w;@w;@w;@Q,+ZK+ZK+ZK+P)@0~@K)@~w+$B+$B+$B+jb#6o@|=@}=@|=@6o@;I$v)%ED+L)@{k@fz@{k@L)@Jl+QK+Q0+Q0+_T+}T+VH@oe#oe#|t#u=@jc@^G+Q;@rX@&n#xb#Q;@v=@v=@`+#`+#oD+YA+YA+YA+/+@/+@W1#Pg+lc#Pg+%.>%C,%h>%/'%!,%!,%!,%!,%!,%!,%Y@%$M$=/%C!%C!%F'%G'%6)%6)%6)%a{%b{%$(%$(%:{%q~%;/%m~%8)%E!%E!%&,%&,%&,%B,%^'%+M$+M$/'%/'%C,%C,%,,%C,%E,%pU$E,%pU$E,%pU$E,%pU$KR$LV$JP$tT$JP$[N$E,%/'%uS$MR$i_%^:%/:%YQ$JP$XQ$f@$9V#d($Ve$Ve$j_%Ve$3~%(%_:%::%<:%[:%}:%|:%M]%D-%Y_$M3$f@$Y4# o#%Z#e0$Z4#Y4#%Z#1:%%Z#&Z#mV#4*$X4#m@$)X#CB#1T#AB#AB#Ty#5V#5V#z0+)E#)E#wB#,6+,6+e8+.G#.G#.G# G# G#tB#vB#vB#*w#u.$u.$[T#C_$qq#q=$yy#yy#On#:t#&n#y)$|t#fh#<&@<&@<&@{k@{k@fz@fz@|=@|=@,B+4 @4 @4 @0G+mX+zD+zD+ky+< @< @2T+T,@>K@IO$K #Xx$8e#Xx$/s#aN$2:%]N#S[#R[#3:%3:%P6#mZ@4Z+CI+CI+R,+r8+H$+h[+2 @AM@Uv#4:%5:%-M$(H${J$)H$!I$Ls$!I$M z_%v~$v~$j!$j!$j!$#%6^%e:%e:%o%%f:%_{%g:%]'%h:%|~%0{%6)%L{%3N$qU$3N$E!%oU$$'%$'%sT$!;%KV$KV$*#%KV$LP$.Z#.Z#zs$LP$jr$e($Nx$ws$%!z#Wq#!z#R>%MB$+!-+rp+k:%l:%m:%n:%o:%;P+C;%<-+GB@ux$T-$c%+p:%q:%r:%~7+s:%l .If &S q<+n9+MM.Sq@|A.5/+R{ t:%u:%k7@ )> Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.", "E7 E7 E7 E7 E7 E7 E7 kC E7 0' |% 8c 7c E7 7c U5 $~.vk +h.+h.vk $~.U5 U5 $~..h..h.$~.$~..h.+h.$~..h..h.vk vk .h..h.$~.+h.+h.+h.+h.+h.+h.+h.+h.:j.oG.tk sk sk tk oG.:j.uk uk uk uk uk uk uk uk +h.~% %% ~% .h.$~..h.d( +h.+h.+h.+h.+h.+h.+h.Ml 6% VW.H;@Y6.iI.Y6.Ll 3b t).u& Q% 6+ y:%fj+Az$n]#:> z:%At$A:%.7 xh -I.-]%e%#x,#&z.s@#B:%C:%d4@{2@*<@~V.]b ;n#6<$}a$D:%..@E:%is$F:%]%+G:%H:% z+$_$I:%51$J:%Du$XM$`3#']%a0$78+@|+K:%L:%#:%M:%N:%O:%*H$Of$0[++4+`-$fd+%2+hd+hd+I#$m%$m%$;k+TR#Wl+oq#'6+>>$>>$>>$z0+}T#}T#}T#'|+'|+f9$//$/6$y:+8g$>/+Jg+Jg+cE#cE#2[+2[+h8+h8+$:%P:%=Q#-Q#&:%Q:%R:%S:%T:%E0+_O#I~%8,$8,$I~%I~%T:%E0+E0+_O#I~%8,$E_$E_$A0+B0+C0+T@%T@%C0+A0+A0+}T#A0+A0+A0+A0+A0+A0+8,$AC$U:%~/$U:%V:%{:#W:%X:%@R$Y:%l1$l1$m1$OR#OR#ei#R`#(X#`Y#{X#aT#]>$;}#=}#j(%>2##o#@o#)5#xt#%z#Z:%`:% <%O_$.u$6[+we$.<%@f+E4#+<%@<%O;%u'@n$#V.$/A E'$}f }f }f }f }f }f }f v$#f$%J$ux$&I$Fm$&J$&J$%N$f0$NW$zV#}F$)Z#U~$_!%):%):%%W#(^%^^$Z!%WY$qS$<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%IR$IR$Qy$Qy$kn$kn$A+%A+%d_%u)%O@%L>%B4#B4#C;%C;%>N$DP$^m$_a$_a$_a$a9$cN$c9$b8$bq$ow$rr$0N$!l$vp#M+#oi$l#$l#$[ @[ @7=@7=@3G+3G+:P+:P+Q,+Q,+Q,+Q,+1 @1 @1 @1 @YK+YK+Q,+Q,+ZK+ZK+0~@#a@&B+&B+yD+yD+6o@|=@}=@ED+}=@|=@jb#;I$ED+}=@|=@6o@|=@}=@Rt+QK+R0+_T+}T+ur+p;@oe#@p$@p$u=@jc@[G+Q;@vy#:t#xb#oD+pD+V4@1$@1$@ZA+YA+YA+YA+/+@/+@W1#lc#lc#lc#YN#YN##}##}#%3@W4@1t#D_$In$7q$%2+%2+}T#}T#E_$E_$E7#E7#|@$|@$T%$U%$T%$|@$E~$w.$X%$^b$(l#77$di#DB#di#(l#SL#Cf#+o#:l#'2#SL#Cf#+o#:l#:l#:l#Cf#Cf#'2#'2#'2#{X#{X#0V#0V#0V#0V#0T#0T#$2#$2#b<$b<$%/%VP$VP$@*%#<%$<%%O$(/%%<%&<%m%%G]%qO$xn$Xe$Xe$Xe$Mt#Mt#Mt#*<%*<%MV$MV$`!%`!%:q$:q$UP$UP$F!%F!%}N${,%{,%{,%7^%7^%7^%7^%:-%:-%!#%!#%!#%!#%t&%t&%u%%u%%u%%j$%s%%=<%=<%=<%-<%-<%a{%a{%a{%a{%M{%M{%$M$$M$$M$@M$]:%v-%v-%;<%g>%.>%.>%h>%!,%!,%!,%!,%!,%!,%Y@%@M$C!%[-%[-%~#%G'%G'%6)%6)%9{%0{%%{%&{%*{%q~%;/%m~%$!%H'%6)%6)%E!%E!%D!%D!%+M$+M$/'%/'%E,%E,%D,%E,%);%q.%q.%q.%q.%q.%q.%q.%[N$LV$tT$tT$tT$[N$q.%+M$MR$ZQ$^:%><%LP$/:%c,$JP$.;$e($>6$>6$Mx$Mx$Mx$Mx$tT$tT$tT$tT$tT$tT$tT$tT$G]%:N$qO$DM$qO$:N$G]%CO$5-%l$%,<%'<%3-%t&%<-%L+%H^%rU$2X#rO$V_$8X#g,%0<$e0$Z4#&Z#($$4*$($$rT#rT#tT#tT#)X#)X#1T#1T#AB#AB#5V#5V#)E#)E#wB#wB#,6+f8+e8+e8+.G#.G#>f+ G# G#tB#vB#7t#*w#*w#u.$u.$C_$qq#Z-$Z-$.w#On#vy#:t#&n#[a@:x@<&@<&@<&@{k@{k@fz@fz@|=@|=@,B+,B+,B+,B+mX+mX+~w+~w+%B+%B+ky+W{@2T+T,@)<%'I$| @4Z+Qm#/s#!<%~<%S[#Zk$Zk$Gj$ti$ui$} @eX+BI+3G+[V+TK+T0+T0+{-+2 @Uv#4:%{<%V~$(H${J$!I$!I$Ks$Ls$2#%L$=@%CU$:P+dX+ky+zD+~w+$B+mX+=B+R,+Z&+dH#''+3|+]<%^<%/<%$B$]-%]-%=;%v~$v~$j!$j!$9~ 9~ Eu Eu vR@vR@^A ^Y@R5@$(<%AP$_ %&`$j+%v;%DT#_<%:<%Mc$R`$PR$tT$UP$H+%&Z$<<%d:%d:%6^%f_%e:%,#%f$%'#%[<%[<%g:%g:%a{%0{%%!%8)%8)%uT$7)%7)%C,%h>%mU$mU$xS$xS$uS$LR$LR$LP$zs$zs$LP$/:%LP$e($Ot#_o#Hc#Df#&5#Df#Hc#Hc#Hc#_o#Xq#%I#Xq#_o#Hc#DR#R`#`Y#(X#`Y#(X#`Y#(X#`Y#O`#lV#5T#I7#5T#WY#k@$I~$+o#Xn#W%$Xn#l1$l1$r=$xc#Wn#WP$WP$F~$F~$B!$B!$B!$F_$gw$B7#A7#W4#W4#! N1 ,J IT#;1@t$#.U@~[#8<%)4@-;+nR 9<%_z.v%.)f Bq.RI nR PC.$n+K(@`J+j* |].Qe+;o@9 +O4 13+{! 8g.be+be+{! {! ]! ]! 5A.5A.{! {! {! {! {! {! {! {! be+be+8g.8g.be+be+{! ]! 8g.8g.8g.be+{! ]! ]! M8@OU+A) OU+A) OU+A) OU+A) ]%@!>%]%@!>%]%@};@V!+V!+]! )> )> Yt.Yt.i~ i~ i~ Yt.Yt.Yt.Yt.Yt.Yt.", "g~ g~ g~ g~ g~ g~ g~ o} g~ 8c 0' 8c 7c 9c 8c N6 N6 $~.$~.$~.$~.N6 N6 $5 N6 .h.$~.N6 U5 $~.vk vk +h.d( d( d( d( +h.vk .h..h..h..h..h..h..h..h.:j.oG.tk sk sk tk oG.:j.uk uk uk uk uk uk uk uk vk +h.d( +h..h.$~..h.vk +h.+h.+h.+h.+h.+h.+h.Ml WW.G6.hY.X)@ce iI.*=.Ll &% ^{ m@ Q% '$ ) ;X.6<#/, 0<%X2 a<%b<%Hp@Z) EW$oh@2u@OM$OM$c<%Ux@d<%{2@,<@Ue H`+d'.,N+(5@|6$[a$e<%f<%T_%>]%g<%h<%i<%j<%lo$Gp$k<%X}$N^@-x$`3#di$&d$.v$+|+l<%m<%n<%O:%o<%wy$Of$0[+0[+.I#QL#)6+)6+!6+%2+gd+Tx$8[+H#$B)$`-$~6+A0+A0+A0+'|+'|+'|+'|+57$57$b0$c0$$u$I2$5l$>/+'_+'_+J#%J#%'&%'&%bE#bE#p<%p<%q<%r<%s<%t<%u<%u<%T:%T:%_O#I~%I~%I~%_O#_O#T:%T:%E0+_O#I~%8,$8,$E_$}T#}T#A0+B0+B0+A0+A0+}T#z0+}T#}T#A0+B0+B0+C0+_O#*Q#V:%X:%v<%W:%w<%x<%@R$m1$m1$m1$OR#2#Fc#~2#~5#xt#%z#Z:%y<%z<%M_$9V#B0+we$A<%(_%B<%C<%x($O;%g>#)M c.#+z (0@9~ 9~ 9~ 9~ 9~ 9~ 9~ %>v$#f$%J$ux$&I$Fm$&J$&J$%N$f0$NW$NW$)Z#)Z#U~$_!%U~$_!%Oy$Oy$Z!%WY$^9$^9$<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%IR$IR$Qy$Qy$kn$kn$A+%A+%$)%$)%O@%L>%C;%C;%LB$LB$>N$DP$5G$^m$^m$^m$cN$sS$b8$b9$b9$bq$0N$~l$~l$!k#M+#oi$oi$l#$eX+[ @7=@7=@3G+3G+:P+:P+Q,+Q,+Q,+Q,+1 @1 @1 @1 @YK+YK+Q,+Q,+Q)@Q)@0~@0~@&B+&B+&B+yD+}=@}=@ED+ED+ED+}=@6o@6o@ED+}=@|=@6o@|=@}=@Rt+QK+fy+ur+VH@VH@oe#|t#=E#=E#u=@jc@[G+Q;@rX@&n#xb#oD+pD+V4@1$@1$@ZA+YA+YA+YA+/+@/+@W1#lc#lc#lc#YN#YN#h8$#}#em$em$#w#W+$7q$Es$%2+%2+}T#}T#E_$E_$E7#E7#|@$|@$T%$T%$T%$|@$q'$E~$0($=2#(K#(l#di#DB#77$(K#SL#Cf#:l#Cf#SL#[I#SL#Cf#Cf#Cf#Cf#'2#'2#SL#SL#SL#7V#`4#8V#aV#0V#9V#9T#9T#$2#$2#b<$b<$%/%VP$VP$@*%;~%%O$(/%%<%&<%b$%b$%tT$qO$us$us$Xe$mO$mO$Lt#Lt#.~% ~% ~% ~%zS$:q$:q$:q$UP$UP$}N$}N$}N${,%v=%v=%zO$zO$zO$zO$9*%9*%v.%v.%<-%~#%1-%1-%j$%j$%2-%2-%s%%s%%s%%s%%|~%|~%|~%|~%6)%6)%&,%&,%&,%&,%B,%B,%('%z=%('%>)%>)%>)%>)%>)% >% >%@M$@M$@M$@M$@M$#!%s'%H;%[-%[-%F'%F'%G'%1~%qU$L{%%!%$!%o~%o~%2~%m~%c{%h_%H'%6)%D!%F!%UP$UP$+M$+M$E,%E,%);%KR$;,%XQ$KR$[N$[N$[N$[N$[N$[N$[N$LV$LV$tT$tT$tT$LV$[N$q.%^:%^:%><%MP$jr$LP$KP$KP$e($d,$>6$yi$Mx$Mx$Nx$Nx$tT$tT$tT$tT$tT$tT$tT$tT$tT$G]%:N$qO$qO$qO$:N$K=%k^%e*%k$%4-%1=%1-%~#%~#%d$%zD$2X#rO$V_$T_$0<$4m$Z4# 5#&Z#($$4*$($$sT#sT#tT#tT#)X#)X#1T#1T#AB#AB#UY#Vy#wB#wB#Uy#Uy#+I#+I#e8+e8+.G#.G#>f+ G# G#tB#+I#vB#*w#*w#u.$u.$C_$qq#Y-$Y-$D<%On#vy#rX@rX@u=@:x@:&@:&@<&@L)@{k@{k@{k@|=@|=@,B+,B+,B+,B+mX+mX+~w+~w+%B+%B+ky+W{@2T+T,@m#$~g$| @4Z+Qm#/s#o&%3:%P6#ti$ti$6h$D@@} @7=@3G+[V+:P+T,@=>+3]+rd+'T@[|+Uv#5:%{<%V~$(H${J$!I$!I$AU$Ks$:/%2#%~]$$K$!_%_^$:P+dX+ky+zD+~w+$B+mX+=B+r8+*6$''%''+`@+_V#{U+/<%E<%}h$]-%]-%v~$v~$v~$j!$}f }f Kv Eu vR@$4@@W@ST@R5@#%,#%e:%I+%f:%[<%L{%L{%%!%%!%%!%8)%7)%7)%j.%j.%/'%/'%E,%);%);%KR$XQ$XQ$JP$c,$KP$c,$JP$c,${>$d($Ot#Xq#Xq#Xq#Xq#_o#Df#Df#&5#Df#Hc#Hc#_o#Hc#Df#DR#zf#.o#WY#.o#WY#.o#WY#.o#H7#7V#lV#.5#WY#l@$Y%$A0#+o#i:%{l#i:%j:%l1$r=$xc#@R$@R$@R$WP$WP$wc#wc#F~$gw$gw$`3+`3+QL#.I#%Q<%R<%S<%=C+t/@s) IT#X7@QM.QU.Wv mB.1K 2K p]%T<%a/%(y.yB._j :y.U<%V<%&h.W<%0V$p@ ./ OF+_Z@L'$-V@8g.be+9Y+y{ be+be+{! {! {! ]! ]! ]! {! {! {! {! {! {! {! {! be+be+be+be+be+8g.w8.gA be+be+be+be+{! {! {! {! M8@OU+M8@OU+M8@OU+M8@OU+f!+V!+ZW+]%@ZW+]%@M8@M8@{! Yt.Yt.i~ i~ ,v.,v.,v.Yt.Yt.Yt.Yt.Yt.Yt.", "g~ g~ g~ g~ g~ g~ g~ f^ dd 9c 8c 9c 9c 8c 0' $~.N6 U5 $5 $5 U5 N6 $~.$5 N6 $~.$~.U5 $5 N6 .h.vk +h.d( d( d( d( +h.vk $~.$~.$~.$~.$~.$~.$~.$~.:j.oG.tk sk sk tk oG.:j.uk uk uk uk uk uk uk uk .h.vk vk vk .h.$~..h..h.+h.+h.+h.+h.+h.+h.+h.Ml (j.X)@9%.9%.ce ce @n @n ^* &% l& k+ l& 9& [@ '2 ;t+X<%Y<%Y2 H] Xn$7] *I.QY@oh@!b@!b@Ux@Ux@d<%/2@P>+^b q0 ^b vz@u|@,-#8x$~^%l %Z<%`<%n)%bG+ [%.[%Q @Fp$+[%@[%gF@e&%dT$W0@8H#aD$5E$#[%$[%%[%&[%*[%Xb$,d$Of$0[+~|+.I#e8+,6+)6+!6+&2+;6+8[+x0+q:+x0+]6+C0+C0+B0+;|+;|+'|+f9$;6$;6$)b$b0$$u$!E$5l$@F$>/+yD$'&%'&%'&%*y$4I#4I#=[%p<%p<%p<%u<%u<%u<%-[%~:#T:%E0+_O#_O#_O#_O#E0+T:%T:%E0+_O#_O#I~%8,$8,$)E#z0+z0+}T#}T#}T#}T#}T#z0+z0+}T#A0+B0+C0+T@%T:%*Q#V:%v<%v<%w<%w<%x<%@R$OR#OR#OR#OR#fi#fi#fi#'2#J7#6V#I7#I7#`4#8V#(K#(K#:l#'2#Jq#Kq#KB#*z#;[%>[%,[%'[%{O#v$#f$%J$ux$&I$Fm$&J$&J$f0$f0$f0$NW$)Z#eN$U~$U~$k7#k7#}0#}0#qS$^9$UH#zx$<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%IR$IR$Qy$Qy$kn$kn$A+%A+%:$%B;%L>%L>%LB$LB$LB$k,%DP$DP$S@%5G$5G$5G$sS$hU$b9$b9$b9$b9$~l$~l$~l$Qm#mZ@ui$oi$oi$eX+eX+7=@7=@3G+3G+:P+:P+Q,+Q,+Q,+Q,+1 @1 @1 @1 @YK+YK+Q,+Q,+Q)@Q)@M2@0~@%B+&B+&B+&B+ED+ED+ED+ED+ED+}=@|=@|=@ED+}=@|=@6o@|=@}=@Rt+QK+.B+VH@o;@o;@|t#|t#=E#=E#u=@jc@[G+Q;@rX@&n#xb#oD+v=@V4@1$@1$@ZA+YA+YA+YA+/+@/+@W1#lc#lc#lc#YN#YN##}##}##}##}#W+$SR#Es$gd+%2+%2+}T#}T#E_$E_$E7#E7#|@$|@$|@$|@$|@$|@$q'$q'$0($=2#(K#(K#77$di#77$(K#SL#'2#Cf#'2#[I#md$[I#'2#'2#'2#'2#SL#SL#[I#[I#)%x=%>)%('%('%('%('%('% >% >%@M$@M$@M$@M$ >%f>%G*%H;%L+%[-%C!%F'%G'%G'%4N$qU$uT$8)%m~%m~%@~%m~%H'%H'%6)%3N$D!%F!%F!%UP$+M$+M$E,%);%XQ$JP$>,%c,$XQ$LV$LV$LV$LV$LV$LV$LV$LV$LV$tT$tT$tT$LV$LV$LV$><%><%><%MP$jr$LP${>${>$d,$d,$>6$>6$Mx$Mx$Nx$UQ$tT$tT$tT$tT$tT$tT$tT$tT$tT$tT$G]%:N$qO$qO$qO$D-%~A$][%K;%T>%1-%M)%~#%:-%n%%zD$a>%rO$zs$.Z#8X#{b$ 5#Y4#&Z#($$($$4*$X4#X4#tT#tT#)X#)X#1T#1T#AB#AB#Vy#Vy#Uy#Uy#vB#vB#+I#;X#e8+e8+.G#.G#>f+ G# G#tB#+I#vB#*w#u.$u.$[T#qq#qq#^[%/[%([%([%rX@jV@jV@}G+:x@:&@:&@<&@L)@L)@{k@{k@6o@6o@K)@K)@K)@K)@#a@#a@~w+~w+%B+%B+ky+W{@2T+T,@v;@8=@4Z+| @Qm#/s#]v#R[#~(%5h$6h$U.@8=@7=@[V+=>+=>+T,@|V+Q,+hX@rd+I:+)_#UR$5:%-M$(H$_H$%G]%j]%~`$1[%J<%d:%K<%vT$vT$>#%d:%e:%I+%f:%[<%qU$L{%uT$8)%8)%8)%7)%7)%j.%j.%/'%E,%E,%);%);%KR$KR$XQ$JP$XQ$KR$KR$KR$JP$KP$d($2m$Xq#It#a$%It#Xq#Df#Fc#@o#Fc#Fc#&5#&5#&5#&5#>$F_$i8+$`$)|+y0+Nn#Pg+Pg+F:+dy+YA+t&@t&@8X+8X+{/+Ng+(k+9e$0e$v7#|v$|v$t7#:9$WN#0c#Qn+3{#_|+}P+PX$4P#^+@&9@,b$4[%{v$Y]$5[%6[%7[%[{%%|$8[%9[%DR@`i@$S nm@&y qB.-<@0[%a[%b[%q]%[%%az+$|.yu.0A.m{.U<%c[%d[%7u.e[%4b b' [U Tx.L'$m|.M8@w8.9Y+9Y+y{ be+be+{! {! {! {! {! {! {! {! {! {! {! {! {! {! 8g.be+{! ]! ]! be+w8.gA {! {! {! {! be+be+be+be+]! M8@]! M8@]! M8@]! M8@be+f!+be+ZW+]! h]@5A.5A.i~ i~ i~ ,v.,v.ZY ZY ZY Yt.Yt.Yt.Yt.Yt.Yt.", "g~ g~ g~ g~ g~ g~ g~ o} g~ 9c 9c 7c 7c 8c |% .h.$~.U5 M6 M6 U5 $~..h.U5 N6 .h.$~.U5 $5 U5 $~..h..h.vk +h.+h.vk .h..h.$~.$~.$~.$~.$~.$~.$~.$~.:j.oG.tk sk sk tk oG.:j.uk uk uk uk uk uk uk uk .h..h.$~..h.vk vk vk .h.+h.+h.+h.+h.+h.+h.+h.Ml Rl gN.9%.9%.9%.9%.@n @n l:.!1.6c 6c {@ {@ '$ Zb@Uq+|v+;K+f[%g[%a'%AA$h[%Pm * %Iv@Iv@S_%S_%,p@]2@h|@&<@M] C[@XY+z[@t9@'-#$X#%/#LX$fN$2`$@B$i[%p +D]+j[%k[%l[%j9#+#@J:%m[%*g$n[%4*%[G$_F$o[%p[%+v$Wb$xy$>d$Ae$~i#'l#A7#A7#gw$gw$^H$`3+)|+l%$3/#:[+]6+;t$4[+4[+/6$//$//$c0$)b$)b$*L$=L$% $0S$/+'_+J#%'&%*y$*y$5I#5I#p<%=[%=[%=[%-[%-[%-[%u<%s<%q[%*Q#r[%r[%r[%r[%*Q#q[%q[%*Q#r[%AC$CC$EC$8,$)E#)E#)E#z0+z0+}T#A0+A0+z0+}T#A0+B0+C0+T@%g8+T:%QR#W:%v<%W:%s[%/C#OR#l1$&o#&o#fi#fi#[l#[l#[l#Bf#L7#5T#5T#lV#7V#7V#_l#_l#$5#!2#J0#+z#KB#*z#;[%>[%t[%u[%)M#,2#v$#f$%J$ux$&I$Fm$&J$&J$NW$f0$f0$f0$eN$eN$U~$k7#Zo$k7#yx$yx$qS$^9$UH#zx$<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%IR$IR$Qy$Qy$kn$kn$A+%A+%B;%B;%O@%O@%LB$LB$LB$LB$8F$8F$S@%S@%S@%S@%hU$hU$b9$b9$b9$b9$~l$~l$~l$Qm#mZ@ui$ui$oi$} @eX+wp#wp#3G+3G+:P+:P+Q,+Q,+Q,+Q,+1 @1 @1 @1 @YK+YK+Q,+Q,+s;@s;@M2@M2@%B+%B+&B+&B+Rt+Rt+ED+}=@}=@}=@}=@}=@ED+}=@|=@6o@|=@}=@Rt+QK+up+#k+#k+#k+-:#-:#|t#|t#p;@eK@^G+}G+rX@&n#jV@oD+v=@V4@1$@1$@ZA+YA+YA+YA+/+@/+@W1#lc#lc#lc#YN#YN#em$em$#}#h8$SR#RR#gd+gd+%2+%2+}T#}T#E_$E_$E7#E7#|@$|@$E7#E7#E7#|@$W4$W4$0($^b$(K#(l#di#DB#77$(K#bV#_l#Af#/K#%f>%~,%~,%~,%~,%~,%~,%~,%~,%%'%p-%E*%s=%]Z$]Z$[-%[-%F'%G'%_{%_{%qU$qU$uT$uT$m~%m~%AO$AO$AO$AO$D!%D!%D!%D!%pU$pU$);%KR$XQ$JP$>,%KP$JP$tT$tT$tT$tT$tT$tT$tT$tT$tT$LV$LV$LV$tT$tT$tT$MP$><%><%><%LP$LP${>$d,${>$d,$d($d($n1$Mx$Nx$UQ$G]%G]%G]%G]%G]%G]%G]%G]%G]%G]%G]%G]%:N$qO$DM$xL$MC$}#%}#%L;%L)%1-%<-%:-%d$%zD$a>%yL$z[%2X#T_$U_$Y4#Y4#&Z#($$($$4*$X4#m@$tT#tT#)X#)X#1T#1T#AB#AB#Vy#Vy#Uy#Uy#vB#vB#+I#;X#e8+e8+.G#.G#>f+ G# G#tB#+I#vB#u.$u.$u.$[T#qq#qq#^[%/[%([%([%rX@jV@jc@|G+K,@|R+:&@:&@tr+L)@L)@L)@6o@6o@K)@K)@K)@K)@#a@#a@~w+~w+%B+%B+ky+W{@2T+T,@kX+8=@4Z+| @Qm#/s#]v#~^#W|#!J$'I$8=@T,@:P+=>+x)+#%>#%e:%H+%D[%qU$qU$%M$%M$7)%`K$`K$7)%>`$ZK$E,%E,%);%);%);%);%KR$KR$XQ$);%E,%E,%KR$JP$KP$yi$2m$%I#a$%9$%a$%Xq#&5#@o#@o#@o#%5#%5#%5#@o#@o#)2#E[%PP#>I$PP#>I$PP#>I$PP#J`#ci#5@$@I#~b$PP#>I$2[%I_$F[%G[%8<$-5#9<$Q[${l#j:%l1$j:%r=$r=$Wn#Xn#Wn#>>$F_$i8+$`$)|+y0+Nn#Pg+6e@F:+dy+ZA+`+#`+#8X+Nb+[]+Qn#^|+'i#H[%I[%J[%J[%K[%L[%5f#py+vp+4&@g~+ ]! )> ]! )> ]! i~ be+Yt.]! )> 5A.]$@]$@i~ i~ i~ ,v.,v.ZY ZY ZY Yt.Yt.Yt.Yt.Yt.Yt.", "dd dd dd dd dd dd dd dd E7 9c 9c 7c 7c 8c |% .h.$~.N6 U5 U5 N6 $~..h.N6 .h.vk .h.U5 $5 U5 $~.N6 $~..h..h..h..h.$~.N6 $~.$~.$~.$~.$~.$~.$~.$~.:j.oG.tk sk sk tk oG.:j.uk uk uk uk uk uk uk uk vk .h.$~..h.+h.d( +h.vk +h.+h.+h.+h.+h.+h.+h.Ml *($gN.9%.X)@X)@X)@*=.@n vk ^* !% ,' l& m@ U% E= Sz.at+*Y.TC+zO+>(#u;%Om Pm (<@Qm W[%eI+S_%,p@I[@:2@)#+9|@3)@dg yU+:,.B[@**+so@^-#Z:$o4#c.%p>#@/$;%%D]+~Y+X[%Y[%Z[%`[% }% #@.}%JK#+}%TI$w6@[/#Jp#@}%#}%Vb$xy$ld+~i#'l#A7#gw$C7#B7#B7#Gy#G0+J0+l%$Nr$4[+7[+7[+/6$/6$$u$$u$c0$c0$% $% $!O$0S$[%%}%LB#P7#0E#&}%*}%=}%-}%;}%>}%,}%'}%1d$D'$wt Fu 9~ 9~ 9~ 9~ 9~ 9~ 9~ 9~ v$#f$%J$ux$&I$Fm$&J$&J$NW$NW$f0$%N$&N$eN$k7#k7#k7#k7#}0#}0#qS$^9$UH#zx$<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%IR$IR$Qy$Qy$kn$kn$A+%A+%B;%:$%O@%+'%k,%LB$C;%B4#-c$Cj$5G$S@%S@%S@%sS$sS$bq$b9$b9$b8$!l$~l$~l$/s#~^#ui$ui$ui$} @} @wp#wp#3G+3G+:P+:P+Q,+Q,+Q,+Q,+1 @1 @1 @1 @YK+YK+Q,+Q,+s;@s;@Sm#M2@Pt+%B+%B+%B+Rt+ED+}=@|=@|=@|=@|=@}=@ED+}=@|=@6o@|=@}=@Rt+QK+up+#k+#k+#k+o;@o;@oe#oe#p;@eK@^G+}G+rX@&n#jV@oD+v=@V4@1$@1$@ZA+YA+YA+YA+/+@/+@W1#lc#lc#lc#YN#YN#W4@%3@em$#}#SR#SR#Es$Es$%2+%2+}T#}T#E_$E_$E7#E7#|@$E7#E7#E7#E7#|@$`A$F7#^$$0($(l#77$DB#bi#DB#77$_l#Af#EB#_l#bV#[X#%~,%Y;%)}%Y;%Y;%Y;%7;%7;%7;%7;%%,%E*%s=%s=%]Z$L+%[-%C!%C!%G'%1~%L{%qU$%M$%M$+~%uT$4N$4N$4N$AO$D!%D!%E!%E!%pU$q.%);%KR$XQ$XQ$kU$JP$XQ$LV$LV$LV$LV$LV$LV$LV$tT$tT$LV$LV$LV$tT$G]%:N$MP$><%^:%^:%/:%/:%{>$d,$d,$e($9V#0V#[X#n1$Mx$UQ$G]%G]%G]%G]%G]%G]%G]%G]%:N$:N$G]%G]%G]%:N$qO$4|${`$ *% *%!}%)B$v.%:-%A,%H^%BM$3X#EM$z[%2X#7X#.Z#%Z#%Z#($$&Z#($$4*$m@$7d$tT#tT#)X#)X#1T#1T#AB#AB#UY#Vy#wB#wB#Uy#Uy#+I#+I#e8+e8+.G#.G#>f+ G# G#tB#+I#vB#u.$u.$[T#[T#qq#Ey#D<%D<%([%5=@rX@rX@u=@p;@K,@|R+|R+:&@tr+L)@L)@L)@jb#jb#T##T##T##T##0~@0~@~w+~w+%B+%B+ky+W{@2T+T,@T,@wp#4Z+| @/s#Qm#Qj$mZ@IO$m#$v;@T,@:P+=>+L$_H$:H$2#%Ls$Ks$AU$Ks$:/%2#%~]$$K$!_%_^$Q,+< @0~@#a@dB@!w+,B+mX+5G+Wx$~}%_[%EU.:V#{}%A[%n'%n[#n[#}h$[,$jQ jQ jQ }f }f Kv Eu vR@$4@@W@ST@R5@%1_+^}%/}%Ds@Q)$QV$tO$#%e:%H+%D[%D[%qU$:q$zS$j.%`K$`K$7)%>`$ZK$);%);%);%);%);%);%);%);%KR$E,%/'%E,%XQ$KP$KP$ u$Ot#%I#It#a$%%I#Hc#Fc#%5#@o#@o#Iq#-5#-5#-5#-5#:l#QP#~>$PP#~>$PP#~>$PP#~>$@I#Xy# O#~>$X4$b,$PP#QP#I_$_}%:}%F[%-5#-5#%G#7<$Q[$3[%3[%i:%i:%W%$W%$)$$>>$gw$`3+`3+QL#.I#K@!l$-N$0r$}}%|}%1}%>h$G*@qd#`;$eP@T~#&W@ X &y 1d @I.(b 2}%X^%kF.3}%09.:`+:`+ )> )> )> )> )> )> )> )> )> )> )> 6g+6g+6g+6g+Yt.Yt.Yt.i~ i~ ,v.,v.,v.Yt.Yt.Yt.Yt.Yt.Yt.", "dd dd dd dd dd dd dd E7 7c 9c 9c E7 E7 9c 0' .h..h.$~.$~.$~.$~..h..h.$~.vk +h.vk N6 U5 N6 .h.N6 $~..h..h..h..h.$~.N6 .h..h..h..h..h..h..h..h.:j.oG.tk sk sk tk oG.:j.uk uk uk uk uk uk uk uk d( .h.$~..h.~% %% ~% +h.+h.+h.+h.+h.+h.+h.+h.Ml *($gN.}{.+Q G6.hY._j.*=.N6 d( #% ,' ,' #% i> w w< 8* 7}%b7$8}%0F+DQ+27 g_@.3#)2@)2@ir Iv@,p@rt@>p@-s@>h@%Q}$[%<5#b($=5#m}%.2+n}%o}%^ @W;#p}%q}%r}%Ym@s}%0q =^$}f }f }f }f }f }f }f }f v$#f$%J$ux$&I$Fm$&J$&J$zV#NW$f0$%N$&N$eN$k7#Zo$k7#U~$}0#}0#WY$qS$^9$UH#<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%IR$IR$Qy$Qy$kn$kn$A+%A+%:$%$)%+'%R5+k,%C;%Wy$)7$y4#S5+^m$5G$S@%5G$cN$cN$ow$bq$b8$c9$d9$!l$0N$t}%~^#pi$ui$ui$U.@} @8=@8=@3G+3G+:P+:P+Q,+Q,+Q,+Q,+1 @1 @1 @1 @YK+YK+Q,+Q,+s;@s;@Sm#Sm#Pt+Pt+%B+%B+ED+}=@|=@jb#jb#jb#6o@|=@ED+}=@|=@6o@|=@}=@Rt+QK+-w+-w+.B+.B+.B+.B+VH@VH@p;@eK@:V+|G+u=@[a@jc@`+#v=@V4@1$@1$@ZA+YA+YA+YA+/+@/+@W1#lc#lc#lc#YN#YN#;>$k'$%3@#}#SR#SR#7q$7q$%2+%2+}T#}T#E_$E_$E7#E7#|@$E7#'$$'$$'$$|@$F7#*2#s=$X%$di#DB##I##I#bi#di#Af#yf#yf#EB#/K#<%^:%ZQ$MR$LR$YQ$KP${>$e($.;$aV#8V#bV#[X#Ve$Nx$:N$:N$:N$:N$:N$:N$:N$:N$DM$qO$:N$G]%tT$G]%:N$q1${`$'/+'/+'/+U>%S^%9*%F'%7^%AS$yL$EM$EM$a>%nV#T_$1:%1:%($$&Z#($$4*$7d$ZA$tT#tT#)X#)X#1T#1T#AB#AB#5V#5V#)E#)E#wB#wB#,6+f8+e8+e8+.G#.G#>f+ G# G#tB#+I#+I#u.$u.$[T#[T#qq#Ey#.w#.w#On#5=@rX@[a@[a@oe#(P+FD+|R+|R+tr+tr+tr+L)@jb#jb#T##T##T##T##0~@0~@~w+~w+%B+%B+ky+W{@2T+T,@:P+7=@4Z+| @/s#Qm#[{#M+#J #S,@2T+B+_w+;m+S.+;m+ly+DO@CU$GO$)I$~J$hm$0N$0N$0N$~l$hm$WL$-L$GO$CU$F@@Q,+< @0~@#a@dB@!w+,B+mX+>K@Wx$2S#v}%'(@&R$w}%5=%n'%n[#n[#n[#[,$[,$jQ jQ 9~ 9~ Eu Eu vR@vR@^A ^Y@R5@$(<%fO$NX$x}%y}%5Z.z}%w|+jF@mt$B-%K=%5N$vT$(u#_u#(}%(}%NV$NV$f_%f_%6^%6^%~`$H+%%M$%M$wn$`t$j.%`K$X@%W@%>`$1 %1 %1 %1 %1 %1 %1 %1 %1 %ZK$>`$>`$}m$ u$>6$yi$FP$Ot#%I#%I#Xq#_o#&5#@o#Iq#&5#@o#Iq#%G#G[%G[%G[%G_$et#Sy#OP#Sy#OP#Sy#OP#Sy#~>$,/$er$,~%er$,/$OP##I#I_$F0#A}%JB#2*$I_$l}%B}%C}%G_$G_$]l#]l#ai#ai#!>$E_$gw$B7#A7#W4#W4#@M}%N}%Ve+O}%P}%)r Q}%sr zq ^w.R}% Z {! 8e.%.@2&$l`.g~#S}%T3$3K@Lh+{! be+be+8g.8g.w8.w8.{! {! {! {! {! {! {! {! 5A.]! {! be+be+be+be+{! 8g.8g.8g.be+{! ]! ]! ]! )> .d+.d+.d+.d+.d+.d+.d+^x#Fu#Fu#Fu#Fu#.d+.d+.d+)> )> )> Yt.Yt.i~ i~ i~ Yt.Yt.Yt.Yt.Yt.Yt.", "dd dd dd dd dd dd dd 7c 9c 8c 9c g~ g~ 7c 8c .h..h..h.vk vk .h..h..h.vk +h.d( +h.$~.N6 $~..h.$~..h.vk vk vk vk .h.$~..h..h..h..h..h..h..h..h.:j.oG.tk sk sk tk oG.:j.uk uk uk uk uk uk uk uk d( vk $~.vk %% 4% %% +h.+h.+h.+h.+h.+h.+h.+h._j.*($gN.}{.ts.T}%G6._j.(j.RD vk |% 6c >' ,' ,' =+ *| W> Jf.UV.8>$U}%0K+EQ+V7 .3#)2@'2@ir W[%,p@!&@Iv@V}%|C@W}%ik /8@9`@i_@5|@j|@~<@81$8|$X}%j2@~!%Y}%]I$Z}%`}% |%.|%+|%@|%b}%#|%$|%%|%&|%D&@)-@*|%Bg+=|%d}%Tb$Jb+ld+~i#'l#^H$p&%s0#kf#-|%qc#;|%dF$X3+f8$f9$f9$$u$$ $$ $$ $5l$5l$|%^$%,|%'|%] @)|%!|%~|%Uk@{|%>E ]|%Z{$!J Z;$Z;$Z;$Z;$Z;$Z;$Z;$v$#f$%J$ux$&I$Fm$&J$&J$zV#NW$f0$UL$j7#eN$k7#Zo$U~$U~$Oy$Oy$Z!%WY$^9$^9$<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%<^%IR$IR$Qy$Qy$kn$kn$A+%A+%$)%u)%R5+R5+k,%C;%)7$`z$'p$y4#Dj$^m$5G$5G$cN$a9$ow$bq$b8$c9$d9$!l$0N$t}%~^#pi$pi$ui$U.@} @8=@8=@3G+3G+:P+:P+Q,+Q,+Q,+Q,+1 @1 @1 @1 @YK+YK+Q,+Q,+t;@s;@Sm#Sm#Pt+Pt+%B+%B+ED+}=@6o@;I$;I$jb#6o@|=@ED+}=@|=@6o@|=@}=@Rt+Il+@k+@k+fy+fy+fy+fy+ur+}T+p;@eK@:V+|G+u=@[a@jc@`+#v=@V4@1$@1$@ZA+YA+YA+YA+/+@/+@W1#lc#lc#lc#YN#YN#^|%;>$W4@em$W+$W+$7q$In$%2+%2+}T#}T#E_$E_$E7#E7#|@$E7#'$$'$$'$$|@$F7#*2#et#^$$DB#bi#2T#2T##I#DB#EB##G##G#EB#/K#f+ G# G# G#tB#+I#u.$[T#[T#hf#Ey#W1#[t# w#pD+Pn#[a@[a@@p$|t#(P+FD+|R+|R+tr+tr+tr+tr+jb#jb#T##T##T##T##0~@0~@~w+~w+%B+%B+ky+W{@2T+T,@:P+7=@4Z+| @/s#Qm#[{#nZ@,K@|V+Q,+`$1 %1 %1 %1 %1 %1 %1 %1 %1 %ZK$>`$ZK$+K$>6$d($yi$#'%!z#Xq#Xq#_o#Df#Fc#%5#Iq#&5#Fc#Iq#F[%2|%3|%2|%Bc#s=$Wy#Wy#Wy#Wy#Wy#Wy#Wy#,~%,~%;w#;w#,~%,/$Wy#!X#zf#F0#A}%F0#2*$2*$l}%B}%B}%B}%4|%Bc#ai#5|%5|%)>$E_$gw$A7#ML# G# G# u3$OJ.g~#&0+T3$3K@Lh+{! be+be+8g.w8.w8.w8.{! {! {! {! {! {! {! {! xc+5A.{! w8.`Y `Y gA w8.gA w8.8g.be+{! ]! 5A.Ea+.d+.d+.d+.d+.d+.d+.d+.d+QL+QL+^x#Fu#Fu#.d+a(+a(+6g+6g+6g+)> )> Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.", "E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 U5 N6 N6 $~.$~..h.vk vk N6 N6 N6 $~.$~..h..h..h.$~.$~.$~..h.vk vk +h.+h..h..h..h..h..h..h..h..h.uk uk uk uk uk uk uk uk -H.l` :j.oG.oG.:j.l` -H.+h..h.$~..h.d( ~% d( vk $~.$~..h..h..h.vk vk (j.AX$A<+A<++Q +Q +Q AX$_j.-H.d( 9c 7c E7 L_ 6c i> |. e6+s] f|%g|%h|%$=@i|%WZ /8@c{ T7 j|%)2@Op@ir k|%R_%]<@Jo xI@Cl 0O.[u@J8#i_@h{@.j@mh@91$WB$-($<0#l|%m|%7O$Bo$n|%QN+o|%p|%q|%r|%s|%N!#|[%H^@9!@TI$iV$bs#t|%(6+nd+^6+ 4+^H$A7#!l#p&%u|%v|%w|%!l#)6++K#+G#+K#//$/6$$u$c0$$u$$u$$F$$F$!O$x|%x|%% $rV#=X$/$%KC$KC$S*%%/%%/%-}#^!%1G#y|%z|%z|%Qx$j}%A|%B|%C|%C|%C|%B|%A|%A|%B|%B|%C|%D|%{:#V:%E|%CC$T:%T@%C0+B0+B0+C0+T@%g8+T@%T@%C0+B0+C0+C0+T@%T@%~w#uq#>>$8,$_O#X/%X/%*2#-2#-2#=2#0($s=$et#bi#77$.o#.5#H7#H7#H7#y.$$I# z#rt#ot#=z#-z#UB#-z#=z#`7# 8#P0#3l#F|%G|%H|%I|%J|%K|%L|%M|%Us${|%w, 0|$Z{$!J Z;$}f }f 9~ 9~ 9~ K@>K@2T+2T+s;@t;@N|%O|%P|%Pt+yD+B@@ED+ED+}=@|=@6o@6o@|=@|=@ED+ED+ED+ED+Rt+Rt+g~+g~+up+up+up+up+#k+#k+#k+#k+}T+}T+|G+|G+|G+|G+}G+`+#v=@V4@1$@1$@YA+YA+YA+dy+/+@/+@W1#lc#lc#lc#YN#YN#;>$;>$k'$W4@#w#W+$Es$Es$%2+%2+}T#}T#E_$E_$E7#E7#v.$v.$'$$'$$E7#E7#q'$W4$s=$X%$77$(K#>}#(K#(l#77$Zn#/l#~X#6T#~X#~X#8V#9V#~X#8V#aV#8V#6T#~X#6T#aV#{X#{X#aV#0V#0V#9V#9T#9T#}]%]>$5*$5*$&M$DO$VP$%/%67$xn$G]%G]%qO$qO$G]%LV$DM$qO$tT$[N$q.%q.%!;%[N$F!%UP$UP$j]%vO$wO$wO$}N$~;%~;%u}%u}%Q|%R|%S|%R|%DS$DS$DS$BS$%%%=&%pY$pY$*&%*&%$%%h]%A~%d=%d=%X+%X+%X+%X+%X+%k!%k!%k!%k!%%X$%X$S>%S>%S>%S>%$>%=/%C!%|~%C!%s'%T|%U|%WV$V|%W|%X|%Y|%Z|%N]%N]%UV$!{%l!%%&%5)%5)%Z&%`|%U;% 1%L+%L+%C!%G'%G'%1~%3N$3N$CO$5N$;#%BO$F!%F!%F!%F!%[N$[N$);%);%);%XQ$kU$JP$c,$G]%tT$tT$LV$LV$[N$[N$tT$tT$G]%:N$qO$qO$DM$DM$MR$ZQ$><%MP$jr$LP$c,$JP$/$$.;$>6$>6$n1$n1$Mx$UQ$:N$:N$:N$:N$:N$:N$:N$:N$:N$:N$G]%G]%tT$tT$tT$uO$=Z$5 %d;%5 %=Z$=Z$|]%:-%zO$i{%n%%AS$zD$lK$3X#c<$($$%Z#4*$4*$4*$($$rT#+ $d<$@2#W_$Z_$'X#AB#zB#zB#UY#UY#)E#wB#wB#Uy#f8+f8+.G#.G#tB#tB#sB#sB#sB#Vn#tB#tB#[T#[T#[T#hf#Ey#W1#.w#On#5=@Pn#u=@p;@p;@VH@Aq@#9@#9@#9@{k@{k@{k@{k@6o@6o@T##T##T##S##M2@M2@iy+~w+&B+yD+=B+zD++8=@U<#W|#/s#Qm#Qj$~^#)K@2T+Q,+T@3 @9G+r;@R,@4 @_w+(w+&N+(w+ly+G@@CO@*&#&&#pZ@9e#Qm#/s#t}%/s#Xx$8e#AM@V.@F@@w;@ZK+zD+#a@S##[^%[^%jb#P,+X&+v,$T4$}7$'/##f$.1%5r$Pz$R-$n[#n[#[,$[,$jQ jQ }f }f Eu Eu vR@vR@@W@ST@R5@`$`Y$,`$.Z$vs$FP$#'%#'%#'%x)%x)%VQ$VQ$#'%#'%x)%VQ$x)%FP$Nx$Mx$Ot#Xq#_o#Hc#Df#&5#Fc#@o#Df#Df#Df#Fc#%5#F[%3|%%1%q'$5V#Vy#7t#7t#Ry#Vy#UY#Ry#Ry#7t#7t#Ry#UY#Ty#VY##5#C0#$I#D0#GB#GB#H~$Cc#H~$I~$#K#E[%&1%*1%=1%,w#uq#!w#B7#^H$QL#W4#:i#Qg+6e@]|+YA+2$@v=@t&@Nb+si+<&#@v$10$:9$L[%:9$s7#10$G`#UA#r=@w@@/w+DD+7G+/v@-1%Z}%;1%>1%0W.JU.,1%'1% >$|C :)@[r@4, s l_ 0j 7d m!+^i.Y_+ot.Y^%)1%g:@kT@kT@!1%~1%lt.{1%e|%&n o>@A1$jU.;e@)i.y{ x8.%.@2&$;~@2&$2&$]1%]1%z1$NZ@Lh+{! {! {! {! {! {! {! xc+Ea+]! be+be+be+{! ]! be+{! ]! 5A.]! be+w8.gA {! be+be+be+8g.8g.w8.w8.8S.8S.8S.8S.8S.8S.8S.8S.a(+a(+8S.vM.vM.vM.8S.8S.,v.,v.,v.,v.i~ Yt.6g+]$@i~ Yt.)> ]$@]$@)> ", "E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 .h..h..h..h.vk vk vk vk N6 N6 N6 $~.$~..h..h..h.$~.$~.$~..h.vk vk vk +h..h..h..h..h..h..h..h..h.uk uk uk uk uk uk uk uk l` m` oG.uk uk oG.m` l` +h..h.$~..h.d( ~% d( vk $~.$~..h..h..h.vk vk (j.AX$A<+A<+A<++Q +Q AX$AX$l` m` 8c 7c 7c 7c 6c i> ^. |. m+ N( h$ -# +Y J)$b6 +3 4r@V5@Al '2@R_%LP.s@#ph@ph@4R.4R.,6 ej [u@^1%J8#h{@50 v[@/1%~c$|9$IS$(1%V,%Yk#U-$2Y+'U+_1%:1%<1%[1%}1% .%|1%k @z^@11%#H$n:+dc#+/+>.$dd+.4+QL#A7#A7#p&%G0+u|%w|%s0#)6+wB#+G#+K#;|+/6$/6$f9$/6$$ $$ $#F$$F$$F$$F$$F$6X#=X$/$%KC$KC$KC$&M$&M$^!%21%1G#y|%z|%31%Qx$j}%41%B|%B|%C|%C|%B|%A|%A|%C|%C|%D|%D|%{:#V:%V:%AC$E0+C0+B0+A0+A0+B0+C0+T@%T@%C0+C0+B0+B0+B0+B0+B0+!w#!w#C7#gw$F_$I~%_O#_O#X/%51%*2#W4$w.$&^$E~$X%$ci#/l#J`#.o#.o#WY#IB#7@$rt#ot#;z#]z#iT#^E#J0#Y7#S0#Jc#x<%61%71%81%91%01%`:$a1%.c$Us$b1%w, 0|$Z{$uK Z;$Z;$Z;$}f }f 9~ 9~ Z;$Z;$}f }f }f 9~ 9~ 9~ es )M +x+u[$xJ+2F$Kt$,Q+Rz$:V#ux$ux$&I$&I$Yu$Yu$f0$f0$f0$f0$eN$eN$U~$U~$):%):%Oy$Oy$Z!%WY$WY$WY$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$<^%<^%<^%.v@.v@IR$IR$Qy$Qy$kn$kn$A+%A+%$)%$)%O@%O@%LB$C;%C;%C;%y4#S5+^m$5G$5G$^m$Ej$,p$b8$b8$b8$b8$!l$!l$!l$!k#M+#oi$oi$oi$} @} @8=@8=@3G+3G+:P+:P+Q,+Q,+Q,+Q,+V.@V.@V.@V.@>K@>K@2T+2T+Q)@s;@:s#N|%c1%%B+T.@B@@ED+ED+}=@|=@6o@6o@|=@|=@}=@ED+ED+ED+Rt+Rt+g~+g~+1R+up+up+up+#k+#k+#k+#k+ur+ur+eK@eK@eK@eK@jc@v=@Pn#V4@V4@V4@ZA+ZA+YA+YA+/+@/+@W1#lc#lc#lc#YN#YN#k'$k'$W4@%3@D_$#w#7q$7q$%2+%2+}T#}T#E_$E_$E7#E7#'$$'$$E7#E7#E7#|@$W4$W4$^$$X%$di#77$(l#(l#77$77$Zn#/l#~X#6T#~X#~X#8V#0V#~X#8V#aV#8V#6T#~X#6T#aV#{X#{X#aV#0V#0V#9V#9T#9T#ts$]>$+;$+;$&M$DO$VP$%/%67$xn$vn$vn$qO$qO$G]%LV$qO$:N$tT$[N$!;%!;%!;%KV$F!%F!%UP$j]%vO$wO$}N$}N$~;%~;%u}%u}%u}%u}%d1%d1%QR$QR$DS$DS$tU$%%%*&%*&%*&%*&%h]%h]%A~%d=%d=%d=%E.%E.%E.%E.%]Z$]Z$]Z$]Z$H;%H;%G*%G*%G*%G*%p-%s'%C!%s%%C!%L+%T|%e1%WV$#X$f1%g1%h1%kW$i1%+X$j1%kW$:~%.!%%&%5)%Z&%J^%U;%U;%H;%L+%C!%C!%G'%1~%3N$3N$;#%;#%BO$BO$F!%F!%UP$UP$[N$q.%);%);%);%KR$pT$JP$c,$G]%tT$tT$LV$LV$[N$[N$LV$LV$tT$G]%:N$qO$qO$DM$ZQ$^:%><%MP$jr$LP$KP$c,$f@$e($>6$>6$n1$n1$Ve$Nx$G]%G]%G]%G]%G]%G]%G]%G]%:N$:N$G]%G]%tT$tT$tT$+8=@U<#W|#/s#Qm#Qj$~^#E@@|V+Q,+T@9G+9G+zU$R,@>B+ny+_w+_w+_w+Y.@H@@F@@qZ@&&#pZ@8e#Qm#t}%/s#/s#Xx$8e#AM@V.@CO@w;@ZK+#a@K)@;I$k1%k1%Rx#w)+CD+hF$90$98$5V+w[#)f#d]@Pz$R-$n[#n[#[,$[,$jQ jQ }f }f Eu Eu vR@vR@@W@ST@R5@.`E.;e@&$@nA+y{ (D.7g.%.@;~@;~@2&$2&$^b+NZ@CX@NZ@oA+{! {! {! {! {! {! {! xc+5A.]! be+be+be+{! ]! be+{! ]! ]! ]! be+8g.w8.]! ]! {! {! {! be+be+be+,v.8S.):+):+):+):+a(+a(+.d+a(+):+8S.8S.8S.8S.):+)> Yt.i~ i~ ,v.i~ Yt.Yt.i~ Yt.)> 6g+6g+)> ", "E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 +h.+h.+h.+h.vk vk vk vk N6 N6 N6 $~.$~..h..h..h.$~.$~..h..h..h.vk vk vk .h..h..h..h..h..h..h..h.uk uk uk uk uk uk uk uk :j.oG.oG.uk uk oG.oG.:j.+h..h.$~..h.d( ~% d( vk $~.$~..h..h..h.vk vk (j.;4#y1%A<+A<+A<+A<+AX$AX$l` m` ke le 7c 7c 9c 6c R% ^. h# |. 3. l@ #| [9 I)$w:.Cv ot@'l Al ^d@6R.[f@}##}##-]%-]%z1%qy@Cm$_u@pd#5o df 7|@cf fk@z^%N~$A1%9,%3r$aE$x[#Z@+E>+B1%C1%D1%E1%F1%G1%H1%nB$I1%J1%{ %ue$@1@Eg+._+ed+y0+id+A7#!l#F0+0_%a_%s0#C7#D7#Uy#)E#A0+4[+7[+;|+7[+/6$/6$$ $I2$I2$I2$I2$,_+,_+KC$/$%/$%/$%%2#%2#21%1G#y|%y|%z|%31%Qx$i}%K1%L1%9l#9l#9l#9l#L1%L1%^:#^:#M1%M1%M1%M1%N1%V:%I~%B0+A0+}T#}T#A0+B0+B0+C0+C0+B0+B0+A0+}T#}T#!6+d8+>6+e8+.G#e8+'6+!6+Z3+C0+T@%w'$Ty#Vy#7t#Ry#Sy#Xy#!X#^l#/l#.o#H7#C0#Zy#ot#ot#+z#^E#^E#O7#Jq#{2#|G#Qc#W:% 2+O1%P1%c>@}W.Q1%7D$R1%Mu X1@!p$0q Z{$H%$],$Y;$Y;$Z;$Z;$Z;$}f Z;$Z;$}f }f }f 9~ 9~ 9~ es )M *S u[$xJ+lT$Kt$gs$Rz$:V#ux$ux$&I$&I$Yu$Yu$f0$f0$f0$f0$eN$eN$U~$U~$):%_!%Oy$Oy$WY$WY$qS$qS$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$<^%<^%<^%.v@.v@IR$IR$Qy$Qy$kn$kn$A+%A+%$)%$)%O@%O@%LB$C;%C;%C;%S5+-c$Dj$^m$^m$Dj$a9$Ej$bq$bq$bq$bq$0N$0N$0N$/s#nZ@l#$l#$l#$eX+eX+wp#wp#7=@7=@T,@T,@2T+2T+2T+2T+V.@V.@V.@V.@>K@>K@2T+2T+ZK+Q)@Sm#Sm#Pt+&B+T.@B@@ED+ED+}=@|=@6o@6o@|=@|=@}=@}=@}=@ED+ED+Rt+Rt+Rt+1R+1R+1R+1R+up+up+#k+#k+.B+.B+VH@VH@p;@p;@p;@p=$4=@|&@hc#hc#2$@2$@2$@ZA+/+@/+@W1#lc#lc#lc#YN#YN#%3@%3@%3@%3@D_$D_$ ;$ ;$%2+%2+}T#}T#E_$E_$E7#E7#E7#E7#|@$|@$T%$T%$`A$`A$X%$X%$DB#bi#DB#di#77$77$5@$($$mV#mV#&Z#&Z#}X#f@$&Z#}X#/$$}X#mV#&Z#mV#/$${X#{X#aV#0V#0V#9V#9T#9T#ts$$2#&2#&2#%/%VP$VP$VP$^g$We$mO$mO$xn$xn$G]%LV$G]%tT$KV$KV$-#%=#%8;%*#%D!%F!%wO$wO$wO$wO$~;%v=%u}%u}%u}%S1%T1%T1%T1%T1%k{%U1%U1%U1%lW$lW$^V$^V$^V$K)%N+%N+%F#%F#%e=%#%%B*%B*%B*%B*%{/%{/%`|%`|%]Z$]Z$H;%H;%G*%G*%G*%s'%L+%i$%0*%{;%|-%&Y$V1%W1%X1%Y1%kW$Z1%`1% 2%.2%+2%k-%q=%n*%g=%%&%%&%l-%&Y$s=%s=%L+%[-%F'%A,%]'%]'%4N$4N$BO$BO$UP$UP$j]%j]%q.%q.%);%E,%);%KR$pT$JP$c,$G]%tT$tT$LV$LV$[N$[N$[N$[N$LV$tT$G]%:N$:N$qO$><%><%MP$kr$zs$jr${>${>$f@$e($yi$>6$n1$[X#Ve$Nx$G]%G]%G]%G]%G]%G]%G]%G]%G]%G]%G]%tT$tT$LV$LV$_+9X#mV#Y4#($$($$4*$($$rT#rT#tT#)X#)X#CB#1T#AB#AB#zB#Vy#Vy#Uy#Uy#vB#vB#+I#;X#'E#'E#tq#tq#@w#@w#@w#@w#Ky#Ky#Sn#Sn#Sn#nB#Dy#Dy#On#5=@Pn#Pn#p;@p;@VH@VH@Aq@#9@#9@#9@{k@{k@{k@{k@|=@6o@K)@K)@T##T##M2@M2@iy+~w+&B+yD+=B+zD++8=@U<#W|#/s#Qm#Qj$~^#E@@kX+T,@=>+zI+zI+x)+x)+t;@s;@ZK+0G+*>+*>+;B+;B+CD+R)@)K@J #J #| @P6#@2%~^#~^#| @4Z+)K@)K@!K@!K@Q)@#a@K)@jb#}^%}^%Rx#,B+H@@}{#90${l$Gz$ .@2w$Bo+Pz$R-$n[#n[#[,$[,$jQ jQ }f }f Eu Eu vR@vR@@W@ST@R5@#%iw$ss$b<$Zt$yS$yS$xn$xn$vn$`t$#l$+K$vs$.Z$,`$,`$VX$.Z$x)%VQ$VQ$VQ$GP$GP$JR$JR$VQ$GP$GP$VQ$x)%#'%UQ$Nt#Ot#Hc#Df#Fc#Fc#&5#Hc#_o#Xq#Xq#_o#Hc#Fc#%5#%G#G_$^$$Wy#Zy$,~%,~%,/$Zy$Sy#,/$,/$,/$,/$Zy$Wy#>X#VY#.5#WY#B0#l@$Aq#l@$l@$/l#5@$^l#@I#@I# O#~>$b,$,/$D7#!w#B7#B7#W4#>f+:i#Qg+Qg+g0#dy+dy+s=@s=@8X+:k+/i#(i#bf#E`#Mn#ac#^d$0c#gz@qd+3]+r8+aN#9~#0x$P4$&2%zu+*2%=2%i+%G<%-2%Fr Dn >J T[ 4u $x 2d 0j.|}+;2%/i.9Q ]I@>2%,2%'2%d++)2%!2%v'+VG j> 51.,W+vM.nA+&($oA+x8.(D.7g.L8@L8@L8@%.@%.@Lh+oA++R@oA+Yt.{! {! {! {! {! {! {! Ea+5A.]! {! be+{! {! ]! be+{! {! ]! {! be+8g.8g.5A.5A.5A.]! ]! {! {! {! ,v.i~ i~ Yt.Yt.)> )> 6g+6g+)> Yt.i~ i~ i~ i~ Yt.]$@6g+Yt.i~ ,v.,v.,v.,v.i~ Yt.)> )> )> )> ", "E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 d( d( +h.vk vk .h.$~.$~.N6 N6 N6 $~.$~..h..h..h..h..h..h..h..h..h.vk vk .h..h..h..h..h..h..h..h.uk uk uk uk uk uk uk uk oG.uk uk uk uk uk uk oG.+h..h.$~..h.d( ~% d( vk $~.$~..h..h..h.vk vk (j.;4#y1%A<+A<+A<+A<+AX$AX$lI.m` ke le 9c 9c 9c 9c w8 C& L) %. C. n+ -. s2 ~2%'M+GX#w-.'l '2@/<@e~$}##{2%yI@DA@iG.]2%G] ^2%/2%^1%5o kk J8 y^%B[@0T.>1#v)$QH#QH#J2$RH#r!$Br+D_+H>+(2%_2%:2%<2%[2%D3#F&@}2%2L#]d$dh#l{$l)+*k+q:+QL#e8+A7#^H$0_%dF$!l#zC$ct#uq#I`#8,$_O#I~%A0+B0+4[+4[+4[+vT#y:+y:+H2$,_+,_+KC$KC$/$%/$%%2#%2#y|%y|%y|%y|%z|%31%31%|2%12%si#L1%9l#9l#9l#L1%L1%M1%M1%M1%M1%N1%N1%N1%V:%8,$A0+A0+}T#}T#A0+A0+A0+B0+B0+B0+B0+A0+}T#z0+'6+)|+.4+if#mc#sB#>f+.I#y0+/>$c8+{6+!6+f8+;X#Qy#Uy#UY#Sy#Xy#^l#/l#.5#J7#HB#pt#)M#Kq#Jq#Jq#&5#&5#&5#Sc#gi#r[%Z1+22%gV+ (@/M#GK$O%$l8$k9$=M 'J 0q wt ^,$],$],$],$Y;$Y;$Z;$Z;$Z;$Z;$}f }f }f 9~ 9~ 9~ K@>K@2T+2T+lX+ZK+0~@M2@%B+&B+T.@B@@ED+ED+}=@|=@6o@6o@|=@|=@}=@}=@}=@ED+ED+ED+Rt+Rt+1R+1R+1R+1R+up+up+#k+#k+#k+#k+o;@o;@oe#oe#oe#60#pq#|&@|&@|&@#l##l#2$@2$@/+@/+@W1#lc#lc#lc#YN#YN#em$em$%3@%3@D_$D_$Ly#Ly#%2+%2+}T#}T#E_$E_$E7#E7#|@$|@$|@$T%$T%$U%$F7#F7#0($X%$bi#2T##I#bi#di#77$`n#($$mV#mV#&Z#($$mV#/$$&Z#}X#/$$}X#mV#&Z#mV#/$${X#{X#aV#0V#0V#9V#9T#9T#b<$$2#$2#$2#%/%VP$VP$VP$^g$We$mO$mO$xn$xn$G]%LV$LV$LV$KV$KV$=#%8;%8;%8;%{,%F!%}N$wO$wO$}N$~;%v=%Q|%u}%u}%S1%T1%32%{{%{{%k{%k{%k{%U1%42%lW$52%52%K)%K)%N+%;&%F#%e=%e=%e=%@%%m-%m-%m-%{Z${Z$U;%U;%s=%s=%E*%E*%n-%n-%n-%E*%{;%62%62%62%`|%&Y$72%W1%82%92%Z1%+2%02%02%a2%b2%c2%x*%q=%n*%X&%X&%l-%d2%`|%`|%}-%L+%F'%A,%]'%]'%AO$AO$4N$BO$j]%j]%j]%j]%q.%q.%E,%E,%);%KR$pT$XQ$c,$G]%tT$tT$LV$LV$[N$[N$q.%q.%[N$LV$tT$G]%G]%:N$MP$MP$kr$kr$zs$zs$d,$d,$.;$d,$yi$>6$n1$[X#n1$Mx$tT$tT$tT$tT$tT$tT$tT$tT$G]%G]%tT$tT$tT$LV$LV$_+z:+A:+/$$Z4#mV#($$($$($$sT#sT#CB#CB#CB#BB#AB#AB#AB#AB#UY#UY#wB#wB#Uy#Uy#+I#+I#tq#tq#tq#Ky#@w#MP#MP#MP#,E#,E#gf#gf#ef#ef#kc#ic#5=@5=@Pn#p=$p;@p;@VH@.B+Aq@#9@#9@#9@{k@{k@{k@{k@|=@|=@K)@K)@K)@T##0~@0~@iy+~w+&B+yD+=B+zD++8=@U<#W|#/s#Qm#Qj$~^#4Z+wp#7=@3G+=>+zI+zI+b@*8@$p@5G@Du Du -! cP@EN D&#d'$F<%Np#h2%q4#D@+i2%/A#9x@'x$$2%*Z$g_%j2%k2%>#%~`$fr$fr$ts$Zt$yS$yS$xn$xn$vn$wn$#l$+K$|m$vs$.Z$.Z$VX$.Z$V@%VQ$GP$GP$JR$JR$JR$`@%JR$JR$GP$VQ$x)%FP$UQ$Nt#_o#Hc#&5#Fc#Fc#Df#_o#Xq#Xq#_o#Hc#&5#@o#Iq#%G#G_$^$$Wy#Zy$,~%,~%,/$Zy$Sy#,/$,/$,/$Zy$Sy#Wy#>X#VY#J`#.o#G7#/l#l@$5@$5@$^l#^l#!X#@I#Xy#OP#Sy#~>$Zy$D7#!w#A7#A7#>f+ G#:i#Qg+_i#g0#dy+Xg+mD+s=@8X+]/+H`#}&@=m+&l#!k+St+@m+[&@B@@ar+sd+qw$%u$ ++l2%m2%n2%M_+o2%< %UU#BP$p2%o{ Dn ZZ 9Y )y ZP.k)%wu P~%fP#=g+!E.GL q2%r2%s2%t2%u2%v2%w2%*% :y ;q.)> $(+d> oA+)D+Lh+7g.PU+x2%A<$L8@L8@%.@ZW+oA+Yt.c;@Yt.Yt.{! {! {! {! {! {! {! 5A.5A.]! ]! {! {! {! {! be+{! {! {! {! be+be+be+]! ]! ]! ]! {! {! be+be+be+be+Yt.{! )> 5A.]$@Ea+]$@5A.)> {! Yt.{! Yt.)> 6g+)> Yt.i~ ,v.,v.i~ i~ i~ Yt.Yt.Yt.Yt.Yt.", "E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 vk vk vk .h.$~.N6 N6 N6 N6 N6 N6 $~.$~..h..h..h.vk vk .h..h..h..h..h..h..h..h..h..h..h..h..h..h.uk uk uk uk uk uk uk uk uk uk uk oG.oG.uk uk uk +h..h.$~..h.d( ~% d( vk $~.$~..h..h..h.vk vk (j.;4#y1%y1%y1%A<+A<+;4#AX$mI.mI.ke ke ke le 7c 7c $5 Ll &- R% U% U+ -. %z2%(>%L=+A2%B2%G8 C2%D2%E2%U5@kk h|@k|@F[@F2%g +oB.HR@ |$WB$h~$U/%-/#P]+Y{@[X@G2%H2%I2%J2%K2%89#L2%M2%ci$|h+Ui+C5$9~+0~+-k+7q$>6+d8+`3+`3+p&%o'$B!$ct#u0#EC$CC$EC$>>$I~%B0+B0+C0+;t$;t$B:+2u$lK$K'%e<$Y_$Y_$Y_$$2#$2#[!%5^%5^%4^%Px$Px$Px$>o#N2%0l#si#L1%9l#9l#L1%L1%M1%M1%M1%N1%N1%O2%O2%E|%E_$A0+A0+A0+A0+A0+A0+}T#A0+A0+B0+B0+B0+}T#z0+'6+^6++4+{|++w#Un#i0#V4#.4+y0+)|+/>$&2+e8+'E#;X#+I#wB#wB#Vy#Sy#^l#~X#:X#R`#!2#!2#~2#@o##o#Hq#Gq#Gq#NR#'}#%:%o:+pX@V,@XX.Y)+VJ#t)%X^##y =P 2r@uK !J ^,$],$],$],$Y;$Y;$Z;$Z;$Z;$Z;$}f }f }f 9~ 9~ 9~ K@>K@2T+2T+lX+lX+0~@0~@&B+&B+yD+T.@ED+ED+}=@|=@6o@6o@|=@|=@|=@|=@}=@}=@}=@ED+ED+ED+vD+vD+1R+1R+1R+1R+up+up+:c@:c@:c@:c@-:#-:#-:#f0#pq#|&@|&@|&@#l##l#2$@2$@/+@/+@W1#lc#lc#lc#YN#YN#em$em$%3@%3@D_$D_$Ly#Ly#%2+%2+}T#}T#E_$E_$E7#E7#|@$|@$|@$T%$T%$U%$F7#F7#^b$0($bi##I#2T#bi#DB#di#4*$&Z#mV#mV#($$($$mV#/$$&Z#}X#/$$}X#mV#&Z#mV#/$${X#{X#aV#0V#0V#9V#9T#9T#]>$$2#b<$ts$VP$VP$VP$DO$^g$Dw#mO$mO$xn$xn$vn$LV$LV$KV$KV$*#%8;%8;%]{%8;%{,%{,%}N$}N$~;%~;%v=%v=%Q|%Q|%P2%P2%T1%32%l{%l{%k{%U1%U1%U1%lW$lW$^V$^V$K)%K)%;&%;&%e=%e=%m*%m*%@%%#&%@%%@%%@%%@%%X&%X&%J^%J^%J^%J^%r'%r'%r'%F*%o,%Q2%Q2%Q2%{Z$4;%R2%S2%p=%w*%T2%U2%V2%W2%W2%W2%X2%Y2%x*%q=%n*%n*%Y&%Y&%U;%U;%`|%]Z$[-%<-%!#%:-%3N$AO$BO$;#%+8=@U<#W|#/s#Qm#Qj$S[#mZ@} @[ @}V+[V+[V+[V+=>+kX+kX+|V+2T+2T+Q,+lX+x)+[|+8G+)K@J #J #lZ@~(%e2%mZ@M+#4Z+4Z+,K@)K@]K@|V+r;@0~@|=@6o@ 3%X]%>;%6o@<|+nz#.3%9T+-i#5w$C%%+3%Pz$R-$n[#n[#[,$[,$jQ jQ }f }f Eu Eu vR@vR@@W@ST@R5@#%6^%:q$`t$}]%ss$vn$vn$xn$xn$ u$#l$|m$|m$|m$|m$YX$hr$VX$.Z$V@%E)%C)%C)%e!%e!%e!%c!%c!%e!%C)%P>%2w#dd$Nt#Nt#Hc#Df#&5#Fc#&5#Df#Hc#Xq#Df#&5#Fc#%5#-5#%G#F[%4|%bi#Xy#~>$er$er$b,$~>$OP#b,$b,$~>$OP#Xy#!X#!X#VY#J`#J`#J`#ci#/l#^l#^l#Xy#Xy#Wy#Xy#Sy#Sy#UY#Zy$Vy#D7#!w#LL#ML# G# G#:i#h0#_i#g0#dy+Xg+mD+s=@8X+]/+`+#t&@t&@]_+Tt+-9@Lt+~w+$gP@H0 Ok G5 av #;@ot@*3%=g+@k@xo.h_#2j.GL Q[%G +=3%-3%;3%P`.@_ -j X0.9Y+Eo+Eo+x8.Yt.)> ]! f!+VS+V!+A) !>%]%@ZW+)g@Yt.8}.a(+Yt.Yt.{! {! {! {! {! {! {! 5A.5A.5A.]! ]! {! {! be+{! be+be+be+be+{! {! {! {! {! be+be+8g.8g.8g.8g.be+ZW+{! M8@]! h]@5A.h]@Ea+h]@]! ZW+{! ZW+{! ]! i~ i~ ,v.,v.i~ Yt.)> 6g+Yt.i~ i~ i~ i~ i~ ", "E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 .h.$~.$~.$~.$~.N6 N6 N6 N6 N6 N6 $~.$~..h..h..h.vk vk vk .h..h..h.$~.$~..h..h..h..h..h..h..h..h.uk uk uk uk uk uk uk uk uk oG.oG.:j.:j.oG.oG.uk +h..h.$~..h.d( ~% d( vk $~.$~..h..h..h.vk vk (j.;4#y1%y1%y1%A<+A<+;4#;4#mI.mI.he he ke le 7c $~..h.r: %% }9.x5 Q% T A. 23 |c xw `9 tB.>3%:8@^<@g`@,3%&F.'3%)3%!3%$/>$i8+E|%!/$B!$F~$~/$U:%F~$ct#A)$8,$8,$I~%C0+T@%T@%2I#S*%K'%e<$T[$T[$4|$}]%Zt$MV$o#:3%/8#0l#L1%L1%9l#L1%L1%^:#^:#M1%N1%O2%<3%!/$~/$E_$A0+B0+B0+B0+B0+A0+}T#z0+}T#B0+C0+T@%B0+A0+&2++4+,d$Vg+p7#p7#{|+=2+0[+0[+!|+l8+)|+.I#>f+>f+e8+>6+,6+wB#Vy#Xy#M`#_l#/X#M7#)2#@o#[l#fi#'}#oT#jw$Oq#k}%':#Tl+4~@>m+n~+[3%Qz$g!@X{$Y~#s[@2r@uK !J ],$],$Y;$Y;$Z;$Z;$Z;$}f Z;$Z;$}f }f }f 9~ 9~ 9~ 9~ EN J!$U=%.J$lT$.E#6>%Rz$:V#ux$ux$&I$&I$Yu$Yu$f0$f0$f0$f0$eN$eN$U~$U~$U~$U~$}0#yx$qS$^9$^9$^9$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$<^%<^%<^%.v@.v@IR$IR$Qy$Qy$kn$kn$A+%A+%$)%$)%O@%O@%LB$C;%C;%C;%Cj$-c$Dj$_a$_a$Dj$a9$cN$bq$bq$bq$bq$0N$0N$0N$/s#nZ@l#$l#$l#$eX+eX+wp#wp#wp#wp#kX+kX+|V+|V+|V+|V+V.@V.@V.@V.@>K@>K@2T+2T+ZK+ZK+0~@0~@%B+%B+%B+&B+ED+ED+}=@|=@6o@6o@|=@|=@|=@|=@|=@}=@}=@ED+ED+ED+vD+vD+1R+1R+1R+1R+up+up+#k+#k+#k+#k+o;@o;@o;@XN#4=@|&@hc#hc#2$@2$@2$@ZA+/+@/+@W1#lc#lc#lc#YN#YN#%3@%3@%3@%3@D_$D_$ ;$ ;$%2+%2+}T#}T#E_$E_$E7#E7#E7#E7#|@$|@$T%$T%$`A$`A$^b$^b$di#DB#bi#DB#DB#ci#($$&Z#}X#mV#($$($$&Z#}X#&Z#}X#/$$}X#mV#&Z#mV#/$${X#{X#aV#0V#0V#9V#9T#9T#&2#b<$}]%Zt$VP$VP$VP$1G#^g$Dw#mO$mO$xn$xn$vn$wn$KV$KV$*#%b$%8;%8;%}3%-#%ES${,%{,%}N$~;%v=%v=%ES$Q|%Q|%d1%d1%d1%P2%|3%|3%k*%k*%k*%13%23%33%K)%K)%]V$]V$;&%nY$e=%m*%m*%f=%@%%#&%@%%@%%@%%@%%X&%X&%l-%l-%l-%l-%))%))%))%U;%];%<:%Q2%Q2%{Z$4;%R2%S2%k-%43%U2%53%63%63%73%83%93%03%'Z$x*%q=%q=%Y&%Y&%a3%&Y$U;%s=%[-%<-%!#%v.%3N$4N$BO$5N$<%><%LP$LP$d,$e($e(${>$ u$yi$[X#_+A:+e($.u$/$$mV#($$4*$X4#X4#tT#)X#)X#CB#1T#AB#AB#zB#UY#UY#)E#wB#wB#Uy#f8+f8+'E#'E#tq#tq#@w#@w#@w#@w#MP#MP#gf#ef#ef#]i#ic#ic#5=@Pn#p=$p=$VH@VH@VH@.B+#9@#9@#9@#9@{k@{k@{k@{k@}=@}=@,B+,B+K)@K)@#a@0~@iy+~w+&B+yD+=B+zD++8=@U<#W|#/s#Qm#Qj$S[#mZ@oi$l#$}V+BI+BI+[V+[V+7=@T,@T,@kX+2T+Q,+b@X:@]J u! %A@oI@Fu 5G@cP@cP@D&#u)$( %xJ+d3%@N$dk@e3%[o@zq@f3%g3%sv$t_%k2%J<%f_%2v$iw$wn$}]%ss$$er$er$b,$~>$OP#er$b,$OP#Xy#!X#VY#VY#^l#ci#ci#M`#M`#M`#!X#Xy#Wy#Zy$Zy$Zy$Vy#Vy#Vy#Vy#wB#!w#!w#ML#Jy#sB#sB#Rn#h0#Qg+g0#dy+dy+s=@s=@8X+8X+_V+_V+/G+Nb+}T+.B+@B+#a@-K@Z&+T4$h3%i3%j3%wo+k3%hR.l3%m3%:[%%>$Jt$~~#il )8 F( z7 2=.|}+T<%n3%dY+/i.,Q 6C XR G +o3%p3%q3%Np 4$ ;,.m`.P~ WD@gm#r3%9Y+]! 5A.M8@V!+VS+!>%r,@!>%x>%)g@)g@8}.8}.UH.UH.Yt.{! {! {! {! {! {! {! ]! ]! 5A.5A.5A.{! be+be+{! be+be+8g.be+{! ]! ]! be+be+be+8g.8g.w8.w8.w8.ZW+]%@ZW+]%@ZW+]%@ZW+]%@h]@OU+ZW+V!+f!+V!+f!+ZW+8g.,v.,v.,v.i~ Yt.6g+]$@Yt.i~ ,v.,v.,v.,v.", "E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 $~.$~..h..h..h..h.vk vk N6 N6 N6 $~.$~..h..h..h.+h.vk vk vk .h.$~.$~.$~..h..h..h..h..h..h..h..h.uk uk uk uk uk uk uk uk uk oG.m` l` l` m` oG.uk +h..h.$~..h.d( ~% d( vk $~.$~..h..h..h.vk vk (j.9V$G'+y1%y1%y1%y1%;4#;4#kb.mI.)y.)y.he le ie tk :j.r: O~.2c }9.k+ . B p# @h.IE##h.do +7.E2.Fn.;f =a$s3%t3%u3%v3%w3%x3%F{%Om h_@|f@Qo$y3%wG.z3%;z.an .w .w ji O~%Nr##W#Y!%VL$UH#A3%08$A/+)P#B3%(V@C3%e(@_V@ D#Es@_:@Ma$Nc$p)+pF$gd+Tx$-6+-6+^ %D|%D3%!/$S{$!/$S{$'/$pf#F~$z!$A)$EC$I~%_O#E0+D0+KC$K'%T[$4|$tO$PP$iw$iw$`!%MV$[!%4^%Px$Px$Px$,o#[:#ti#al#E3%F3%ki#ki#F3%ki#G3%H3%I3%J3%K3%L3%R{$8,$B0+C0+T@%T@%C0+B0+A0+)E#}T#B0+g8+g8+g8+C0+/>$Vg+Zb$Wg+,d$,d$Of$Of$Of$a[++4+Eb+l8+!|+~|+~|+QL#QL#>6+,6+wB#Sy#!X#Af#/K#@5#)2#%5#[l#OR#$}%M3%|2%$I5@||@}g Y;$}f Y;$Z;$Z;$Z;$}f }f 9~ 9~ Z;$Z;$}f }f }f 9~ 9~ 9~ }f [g J!$N3%A'$HE+.E#6>%Rz$:V#ux$ux$&I$&I$Yu$Yu$f0$f0$f0$f0$eN$eN$U~$U~$U~$U~$yx$yx$^9$^9$^9$^9$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$<^%<^%<^%.v@.v@IR$IR$Qy$Qy$kn$kn$A+%A+%$)%$)%O@%O@%LB$C;%C;%C;%8F$Cj$_a$@d$@d$_a$cN$sS$b8$b8$b8$b8$!l$!l$!l$!k#M+#oi$oi$oi$} @} @8=@8=@8=@8=@v;@v;@S,@S,@S,@S,@V.@V.@V.@V.@>K@>K@2T+2T+Q)@Q)@0~@0~@%B+Pt+Pt+]w+ED+ED+}=@|=@6o@6o@|=@|=@6o@6o@|=@|=@}=@}=@}=@ED+vD+vD+vD+vD+1R+1R+up+up+up+up+#k+#k+o;@o;@o;@XN#Pn#V4@V4@V4@ZA+ZA+YA+YA+/+@/+@W1#lc#lc#lc#YN#YN#k'$k'$W4@%3@D_$#w#7q$7q$%2+%2+}T#}T#E_$E_$E7#E7#'$$'$$E7#E7#E7#|@$W4$W4$^b$^b$(l#(l#77$di#DB#^l#($$7X#T_$7X#h@$O3%S_$T_$S_$T_$.Z#T_$7X#S_$7X#/$${X#{X#aV#0V#0V#9V#9T#9T#&2#b<$Zt$ss$DO$%/%VP$y|%^g$Dw#Mt#Mt#We$We$vn$wn$*#%b$%P3%P3%Q3%}3%R3%w=%ES$|N$v=%~;%~;%v=%Q|%Q|%d1%d1%S|%S|%S3%S3%T3%T3%13%13%CS$CS$z,%z,%]V$oY$]V$]V$nY$nY$m*%m*%m*%f=%K^%+%%+%%+%%K^%K^%%&%%&%Y&%Y&%d2%d2%@X$@X$@X$&Y$U3%o_%w(%w(%m-%<`$V3%:`$c2%P]%W3%X3%Y3%Z3%`3% 4%.4%O&%+4%Y2%x*%q=%p=%R2%R2%R2%U;%s=%%X$w.%!#%v.%AO$BO$;#%CO$<%^:%ZQ$YQ$/:%{>$d,$e(${>$ u$yi$[X#$xs$f@$mV#($$4*$m@$m@$W_$W_$Z_$tT#1T#AB#zB#zB#Ry#7t#vB#vB#Qy#Qy#Ny#Ny#tB#tB#'E#'E#sB#Vn#Vn#Vn#@w#@w#nB#nB#nB#_i#By#By#5=@Pn#p=$p=$VH@VH@.B+.B+#9@#9@#9@#9@{k@{k@{k@{k@}=@}=@w)+,B+,B+K)@#a@#a@iy+~w+&B+yD+=B+zD++8=@U<#W|#/s#Qm#Qj$S[#S[#T[#6$yi$@l$|m$$l$[q$[q$[q$YX$$4%U@%jU$l,%P>%P>%E)%E)%E)%C)%c!%C)%l,%Nt#VL#UL#UL#UL#Df#Hc#_o#Xq#_o#Df#Fc#%5#@o#%5#-5#F[%2|%2|%2|%4|%bi#@I#PP#Z+%Z+%X4$PP# O#Z+%PP#@I#^l#ci#ci#ci#^l#^l#VY#K`#5*$K`#VY#Xy#Sy#,~%7t#7t#vB#vB#Uy#Uy#Uy#!w#)w#ML#Iy#Vn#Vn#Rn#h0#h0#]|+YA+YA+t&@t&@Nb+Nb+(G+Ht+dr+:V+OK+FD+g~+>2+@#$'2+;4+%4%&4%*4%=4%-4%;4%-2%( %p2%n)$&W@'8 j_ k} %x ,y.vu >4%rJ#[7+,4%[%%h_#_W+ d.'4%lF.t>@)4%!4%2'.uV@i|$~4%{4%@:+{4%8' ]! 5A.h]@$]$R,%x>%]4%x>%^4%~X@~X@90+90+4H.4H.8}.{! {! {! {! {! {! {! {! ]! 5A.Ea+5A.]! be+8g.{! be+8g.8g.8g.{! ]! 5A.{! {! {! be+be+be+8g.'> OU+A) ]%@};@V!+/4%(4%/^@OU+!>%V!+/4%VS+/4%VS+V!+{! Yt.i~ ,v.i~ i~ Yt.)> Yt.i~ ,v.ZY ZY ,v.", "E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 E7 .h..h..h.vk +h.+h.d( d( N6 N6 N6 $~.$~..h..h..h.+h.+h.vk vk .h.$~.$~.$~..h..h..h..h..h..h..h..h.uk uk uk uk uk uk uk uk oG.:j.l` -H.-H.l` :j.oG.+h..h.$~..h.d( ~% d( vk $~.$~..h..h..h.vk vk oG.;4#y1%;4#A<+;4#;4#;4#AX$kb.mI.)y.GL.he ke ie sk uk _j.@n .n vk &- k+ E +. N* G;.N4 DB 'q f }k _4%:4%%F.3%%p( Q7 <4%vn@O{ QY@Z:#^d@[4%}4%|4%>p@Ab #x 4o F6 4o ua#:S#14%lm$24%)Z#OX#34%gi$44%54%64%xZ+]!@R%#X#qT#/K#bV#'2#Cf##A'$3j+.E#!q$!f#~Z#tx$&I$&I$Yu$Yu$Yu$f0$f0$f0$f0$eN$eN$U~$U~$U~$U~$yx$yx$^9$^9$^9$UH#8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$8p$<^%<^%<^%4Z.4Z.Qy$Qy$Qy$kn$kn$kn$A+%A+%$)%+'%O@%O@%P@%C;%f4%j%%8F$Cj$_a$@d$@d$_a$cN$sS$b8$b8$b8$b8$!l$!l$!l$!k#mZ@ui$ui$ui$U.@U.@~g$~g$8=@8=@v;@v;@S,@S,@S,@RQ@V.@V.@V.@V.@>K@>K@2T+2T+s;@Q)@M2@M2@Pt+Pt+]w+c1%ED+ED+}=@|=@6o@6o@|=@|=@6o@6o@|=@|=@}=@}=@}=@}=@vD+vD+vD+vD+1R+1R+up+up+-w+-w+.B+.B+VH@VH@VH@e0#RO@RO@=m+=m+{/+{/+{/+_k+dy+dy+/+@(+@(+@(+@fi+fi+[*$;>$k'$W4@1=$W+$Es$Es$%2+%2+}T#}T#E_$E_$E_$E7#v.$v.$'$$'$$E7#E7#q'$W4$^b$=2#(K#>}#(K#77$DB##I#($$mV#T_$mV#h@$4*$S_$mV#S_$}X#.Z#}X#7X#&Z#7X#/$$aV#aV#aV#0V#0V#9V#9T#9T#+;$b<$ss$yS$}]%%/%ts$4^%^g$We$UQ$mO$We$xn$vn$LV$b$%b$%&<%&<%Q3%}3%g4%v=%ES$zO$xO$TP$TP$xO$DS$DS$k*%k*%13%CS$h4%i4%j4%j4%CS$33%z,%z,%k4%oY$oY$oY$]V$]V$nY$nY$m*%m*%m*%.!%g=%C#%C#%K^%g=%%&%.!%%&%d2%d2%d2%d2%d2%d2%d2%4;%l4%m4%n4%n4%m-%$&%V3%S&%+4%o4%p4%q4%r4%s4%t4%u4%v4%w4%x4%y,%^`$^`$n=%x*%'Z$R2%X&%J^%g]%m!%:;%l^%s&%5/%n%%YV$n%%wO$|N$2N$F!%+M$+M$/'%/'%E,%);%KR$b$%b$%*#%*#%KV$LV$!;%[N$tT$tT$G]%KP${>${>$d,$d,$jr$><%i_%LR$LR$c,${>$d,$d,$yi$ u$Mx$[X#SP#[X#^g$67$3|$3|$3|$3|$3|$3|$3|$LV$LV$LV$LV$[N$[N$q.%UP$7^%H^%d-%i{%zO$7^%ZW$t'%*X$PV$ZW$PV$U>%LC$c %<=%xn$>6$0V#8T#M`#ci#^l#!X#&2#1I#@;$$;$>X#UY#Vy#Vy#N;%[@$[@$y4%y4%uB#uB#{i#Ly#-l#hf#hf#,l#Rn#Rn#1f#Sn#Sn#5,$>$$>$$Dy#By#pD+5=@Pn#p=$e0#VH@.B+.B+-w+#9@{k@#9@{k@{k@{k@{k@{k@}=@}=@w)+,B+,B+,B+K)@K)@iy+~w+&B+yD+=B+zD+lX+Q,+=>+8=@IO$W|#YP$Xx$Qm#/s#S[#T[#+zI+@N+5G+>K@[H#J #E@@fX+| @~^#fX+fX+fX+E@@E@@,K@,K@RQ@`V$;I$|=@}=@hy+E^%;I$S##|#%zM@bv$$ +c!$f*%z4%XJ$m1#L2$o[#n[#S-$[,$jQ )J }f }f Eu Eu vR@vR@ST@ST@z#_}%F4%F4%:}%G[%#G##I#PP#Z+%Z+%X4$PP# O#Z+%PP#@I#ci#M`#M`#ci#^l#^l#VY#M`#5*$K`#VY#Wy#Sy#-w#-w#Qy#Qy#vB#+I#vB#+I#>6+Hy#sB#Vn#@w#Un#Rn#h0#=g$]|+YA+V4@v=@8X+Nb+N0+{G+/G+:V+}R+FD+&N+36+[8+Rj$G4%H4%`^@{~%I4%GE+J4%s1%dP@9~ .<@H0 il >[ [/ G*+,y.%X.[r Uv.79.SE+E'@K4%Ec+~^.v<+L4%M4%}V.Yl :Q @4#N4%O4%P4%^0.Q4%R4%8' ]! h]@h]@$]$n9$$]$%]$$]$v~.)g@80+13+90+4H.4H.8}.{! {! {! {! {! {! {! {! ]! 5A.Ea+5A.]! be+8g.{! be+8g.w8.8g.{! 5A.Ea+5A.5A.]! ]! {! {! {! f!+PS@OU+]%@V!+(4%WS+hf.hf.]%@]%@VS+(4%(4%(4%VS+'> 6j+U/@oA+yj+d> d> d> d> oA+yj+d> d7.d7.d> ", "$5 U5 U5 N6 $~.$~..h.$~.$~.$~.$~.$~.$~.$~.$~.+h.vk .h.N6 N6 .h.vk +h.N6 N6 N6 N6 N6 N6 N6 N6 m` :j.oG.uk tk tk tk tk uk uk uk uk uk uk uk uk oG.oG.oG.uk uk uk uk uk :j.:j.oG.oG.uk tk tk sk J6 xn.xn.je je ie ie le ke ke ke ke ke ke ke :j.Mv.Sl Mv.Sl Mv.Mv.Mv.uk m` m` m` :j.oG.uk uk uk uk uk oG.oG.:j.+h.d( 0' 8c >' O6 x5 L_ ._ {% R|@#A##D+>(#S4%gk T4%T4%qU.f%#x,#w$#U4%s&+V4%[Z.[f@W4%k0 ^1%ea X4%ga }#>}#SP#SP#}I#}I#}I#3~%Xe$mO$Xe$3~%/!%3~%Xe$Ve$9V#Y4$}m$}m$KP$d,$YQ$*#%r-%v=%.R$;5%B~%>5%TP$+(%:-%:-%:-%e-%e-%e-%e-%e>%=&%23%lW$lW$33%,5%{V$z~%z~%z~%<~%oY$nY$;&%;&%N+%N+%;&%nY$+,%l!%rX$:~%v8$I1$_T$f=%A$%rX$~V$rX$'5%82%82%rX$X&%%&%K^%W&%A*%y&%)5%!5%b %b %R&%y,%~5%Y.%{5%]5%^5%/5%(5%_5%:5%h`$h`$`'$<5%[5%r %x,%d>%C#%H~%F#%M%%d=%&&%Z&%*&%*&%+(%e-%k(%xO$xO$zO$i{%{,%|N$>)%B,%oU$+M$sT$r-%c$%)l$)l$P3%*#%ZQ$/:%YQ$YQ$c,$@{%@{%ys$dh$ys$WK$ir$#Z$kU$>,%ys$.;$aV#yi$n1$SP#>}#SP#Sx$Cw#:!%xn$:N$G]%G]%G]%:N$qO$qO$qO$3|$3|$qO$LV$q.%q.%vO$TP$c>%z-%+(%&X$}5%}5%b:%9*%|]% Y$C-% Y$ Y$C-%t_%.z$TL#,2#_K#nd$j(%.(%9,$9,$P{$PB$PB$P{$z!$vq#OL#,6+'6+.K# ;$Ly#[T#|f#X#Sy#Vy#5V#}T#'6+f8+'E#+I#W4#q7#U4#=l#]i#_i#Qg+6e@E:+$a@F:+YA+{/+[]+%4+jr+)k+TY#[]+w'#U&+I:+U0+>[#D)$N-+f5%VZ.3Y.K8#0T@u'@8r 5`@g5%h5%l[#Mz C/ y9 zl -} _h >8.15@`U i5%j5%VR.N_%bp k5%a/.l5%2@ p. QQ.Q9.X0.BX@i|$z<$m5%n5%]1%Lh+{! {! {! ZW+ZW+ZW+ZW+'> wn.8g.=L 8g.=L z<.z<.ZY Yt.]$@jy.6g+Yt.Yt.Yt.Yt.6g+i~ ,5 ZY ]$@Yt.}| {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! M8@M8@M8@ZW+f!+'> '> '> ZW+ZW+ZW+ZW+ZW+ZW+ZW+Lh+NZ@NZ@NZ@NZ@NZ@NZ@NZ@NZ@!3.3K@KE#PC#_c$PC#", "$~.$~.$~.N6 N6 N6 N6 $~.$~.$~.$~.$~.$~.$~.$~.+h.vk .h.$~.$~..h.vk +h.N6 N6 N6 N6 N6 N6 N6 N6 :j.oG.uk tk tk tk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk oG.oG.oG.oG.oG.oG.uk uk uk uk uk xn.je je je ie le le le ke ke ke ke ke ke ke ke :j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.oG.oG.oG.oG.uk uk oG.oG.:j.:j.m` m` oG.sk sk oG.R_ -H.tk k3 o5%p5%o%@v%@FS+yO+C3 ol@4R.;(#4{%*c+q5%r5%s5%t5%DM.LJ.E2%Cm$k0 X4%h[@o.#u5%r;#kO@3K#cX#&I$'/#]f#Z}%v5%w5%x5%_Y#y5%z5%A5%B5%B|#z+#lk+X5+x=@C5%'i$X3+|@$#;$T%$E_$>>$>>$>>$~w#vq#at#t0#F0+0_%0_%DC$E0+51%Rx$31%#5%D5%Ox$Ox$E5%F5%^o#12#G5%G5%+g#+g#Rq#Qq#$o#jw$$}%/C#w<%{:#C|%H5%nD$nD$I5%I5%J5%Gb+md+Ib+k8+l%$$`$Fb+|@$E7#|@$T%$U%$T:%T:%-Q# 6h Yk@oI@5G@9~ 6E$|g$1i Z;$],$^,$^,$],$Z;$}f }f }f }f }f }f }f }f }f )J Rx@n[#|h$)q$2c#b_#&$#!f#~Z#bX#bX#S_#S_#rz#rz#zV#zV#zV#zV#}F$}F$Zo$Zo$Zo$Zo$~v$~v$^9$^9$^9$~v$`P$r4$`P$`P$`P$`P$8p$8p$4Z.`o$`o$Ts@)U#Xz$Qy$wy+cD$cD$A+%A+%A+%A+%Gx$Gx$Hx$Hx$dw$dw$*I$CO#CO#ln$DP$8F$5G$5G$^m$Dj$a9$a9$c9$c9$c9$c9$d9$d9$d9$vp#!k#M+#M+#M+#4Z+4Z+E@@E@@K #J #[H#,K@]K@]K@!K@!K@V.@V.@V.@V.@)K@)K@|V+|V+t;@Q)@#a@#a@Pt+Pt+&B+T.@|=@|=@|=@|=@|=@|=@|=@|=@6o@6o@6o@|=@}=@}=@}=@ED+wD+vD+)w+!w+!w+)w+1R+sr+-w+-w+.B+.B+.B+.B+.B+-9@.m+9c#(f#(f#(f#(f#py+py+ki+ki+ki+ki+M4#M4#M4#^|+WF#S%$S%$+}#oq#oq#;f+;f+In$In$)6+)6+F_$F_$F_$F_$w0#w0#v0#v0#1@$1@$9,$9,$Yn#Yn#/O#/O#/O#/O#/O#/O#M`#M`#M`#qT#qT#7T#7T#7T#8T#7T#qT#M`#qT#7T#aT#9T#>}#>}#>}#SP#SP#}I#}I#}I#}I#3~%Xe$We$^g$^g$3~%Xe$Jj$c($VK$pT$XQ$KP$LP$LR$8;%r-%~;%.R$>5%;5%c-%z-%e-%v.%v.%!#%:;%:;%:;%AZ$pY$*&%52%52%^V$TV$K5%L5%~U$+,%+,%nY$nY$;&%;&%;&%N+%;&%;&%nY$+,%l!%rX$k-%_T$X'$u9$u9$~V$~V$M5%M5%'5%!{%82%p=%X&%K^%+%%+%%[;%+%%#&%C#%C#%p*%y,%N5%N5%]5%O5%P5%|P$|P$Q5%R5%`N$`N$lY$9Z$S5%T5%L`$mY$H&%xZ$K1$v8$e=%e=%m*%.!%K)%^V$AZ$CZ$z-%z-%TP$TP$TP$7^%|N$+!%B,%oU$+M$sT$.R$;5%#O$#O$P3%8;%ZQ$^:%YQ$YQ$>,%@{%EV$UW$_q$_q$)J$U5%`L$FV$>,%ys$9V#0V#Ve$n1$}I#SP#%s&%|]% Y$ Y$YW$YW$$1%g}%Sx$jw$;2#&o#U!%Y:%9,$Wn#1@$WP$EC$U:%A)$B!$at#OL#A7#e8+ ;$Ly#hf#,l#w+#B+jb#}=@Rt+Rt+}=@6o@|=@}=@|=@|=@|=@|=@|=@|=@|=@,B+~w+&B+&B+&B+#a@#a@lX+lX+2T+|V+)K@)K@qZ@qZ@*&#&&#P6#]N#yA#yA#M+#7V@y)+! +i~+gX+IO$dN$J #4G+;K@;K@R,+5&@4G+jX+E@@E@@E@@E@@E@@E@@E@@jX+jX+5$@5$@!K@4 @0=@0~@T_@r<@7~@2G+%PV$4 %#6%$6%K<%f_%(}%2v$ss$xn$us$ u$@l$gr$$l$ZX$bT#gd$ll#ll#YP#%6%&6%*6%%6%ll#ll#ll#ZP#}5#`P#/2#[w#/5#(2#:2#_2#Tc#]5#]5#/5#{5#`7#`7#{5#Mq#=6%-6%;6%>6%,6%%1%%1%2[%2[%E[%E[%~b$5@$($$&Z#&Z#($$@)%i@$i@$5@$J`#~X#qT#M`#!X#Sy#Zy$5V#}T#'6+f8+'E#tB#W4#F:+mi+ni+=l#_i#Qg+Pg+@4+Pg+g0#2$@=m+)k+jr+ m+Kt+'B+LP#X-$=:#.$#y'# Yt.Yt.)> i~ )> i~ O* ZY ]$@)> '5 {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! be+be+be+be+{! {! {! {! {! {! {! Lh+NZ@NZ@z1$NZ@z1$NZ@z1$NZ@7g+3K@i|$PC#:b$PC#", "+h.vk .h.$~.N6 N6 U5 $~.$~.$~.$~.$~.$~.$~.$~.vk vk .h.$~.$~..h.vk vk .h..h..h..h..h..h..h..h.uk uk tk tk tk uk oG.:j.uk uk uk uk uk uk uk uk sk tk tk uk oG.oG.:j.:j.uk uk uk uk uk oG.oG.oG.ie ie ie le le le ke ke ke ke ke ke ke ke ke ke m` m` m` m` m` m` m` m` oG.oG.oG.oG.:j.:j.:j.:j.uk uk oG.oG.:j.:j.m` m` :j.uk tk m` g% QB@*_ ^* ^] z> <6%hQ+q%@AO+C3 W4%F{%14+b(%r.#_>%[6%{~+ ;%^;#xI@xI@E2%^1%^1%GJ.GJ.pO.9G@C$$Ct$,q$#;%i(%Vz$}6%|6%16%26%x5%36%46%56%66%76%86%96%S]#AJ$b1@y6@#w#{6+cE#06%Z3+)6+!6+:O#)w#)w#!w#!w#C7#gw$p'$o'$_O#X/%PR#h}%#5%D5%]o#]o#Fw#a6%^o#12#Yc#Yc#+g#+g#Rq#Rq#Ew#jw$pT#/C#w<%{:#D|%lD$nD$nD$b6%c6%4/#J5%ld+md+J0+j8+i8+qD$E7#'$$E7#|@$T%$_O#_O#:O#^ %k8+$a@|/#n8+#4+{_+{_+$a@~_+/6+/6+/6+/6+B)$B)$B)$B)$X1#-k+cO$Nr$7[+>|+@;$&2#>}#>}#;}#|I#:K#j}%t<%d6%`g$ez@kf+j-$yI$%;$g#@f]@1k ! $pI@oI@5G@H$>H$>H$*I$8F$8F$5G$^m$^m$^m$a9$a9$b8$b8$b8$b8$!l$!l$!l$!k#!k#M+#M+#M+#4Z+4Z+E@@E@@E@@E@@,K@,K@RQ@]K@]K@]K@AM@AM@AM@AM@>K@>K@2T+2T+s;@ZK+#a@#a@%B+Pt+&B+T.@|=@|=@|=@|=@|=@|=@|=@|=@6o@6o@|=@|=@|=@}=@}=@}=@wD+vD+)w+!w+!w+)w+1R+sr+-w+-w+.B+.B+.B+.B+.B+-9@@m+&!%&!%&!%nq#nq#nq#nq#ki+ki+M4#M4#M4#M4#^|+mi+WF#S%$S%$+}#oq#oq#;f+;f+In$In$'6+)6+gw$F_$F_$F_$v0#v0#v0#v0#1@$1@$0,$0,$Yn#Yn#/O#/O#/O#/O#/O#/O#ci#M`#M`#M`#qT#qT#7T#7T#8T#7T#qT#M`#qT#7T#aT#9T#>}#>}#>}#SP#SP#}I#}I#}I#>}#}I#3~%3~%^g$^g$We$mO$$l$Y4$VK$>,%JP${>$/:%xS$=#%-#%~;%.R$f6%>5%g6%z-%k(%*Y$l^%:;%AZ$*&%pY$K)%^V$^V$+Y$h6%~{%O%%.X$L5%F&%F&%F&%{U${U${U$5]%5]%{U$F&%F&%~U$2;%~V$~V$k-%G&%d>%Q]%Q]%O]%92%+X$+X$'5%!{%82%p=%:~%n*%h=%h=%C#%h=%c@%(}$Z!$]o$S%%A %{5%i6%:5%}P$j6%j6%k6%l6%B %m6%n6%o6%h`$p6%q6%[5%x,%H&%d>%j-%g=%g=%.!%:~%K)%^V$52%D=%w-%x-%x-%c>%TP$xO$|N$+!%+!%|N$+M$sT$.R$;5%#O$#O$P3%8;%ZQ$^:%YQ$YQ$>,%@{%EV$UW$_q$_q$)J$U5%EV$`L$>,%ys$d($9V#n1$n1$^g$^g$Px$Px$Px$4^%,6$qO$:N$:N$:N$:N$qO$qO$G]%:N$qO$G]%[N$pU$pU$wO$PR$A-%x-%y-%&X$r6%r6%&X$s&%|]%YW$YW$<(%<(%(}%g_%V!%Sx$.z$,}#F7#9,$q'$)$$'$$v0#>>$z!$I`#ct#NP#NP#.G#.G#[T#sq#,l#}f#5,$5,$q=$q=$[t#[t#8k@8k@ne#8k@lg@Y5%Yv#Y5%7k@_G+:G+jV@@p$|t#15%s6%s6%_c@gy+hy+;I$|=@ED+ED+|=@jb#6o@|=@6o@6o@6o@6o@6o@6o@6o@K)@$B+yD+yD+yD+mX+mX+9G+9G+2T+2T+>K@)K@AM@qZ@qZ@pZ@mZ@yA#]N#S[#P6#mZ@fX@QU#U0+CI+E@@K #E@@5&@;K@-K@R,+5&@4G+jX+E@@E@@E@@E@@jX+jX+jX+5$@5$@4G+4G+w;@t<@a=@R,@|V+,}@8~@dX+dX+w;@~K@iF$Z5%{l$<>%:V#.6$`5% 6%,u$,u$;M ;M 9~ Z;$[|@<|@$4@-! 6G@RC 5r /d #%>#%vT$yS$xn$xn$ u$Jj$YK$[q$[q$+O#;O#ZP#}5#ll#v6%%6%v6%fD$ll#ll#ZP#*8#/2#[w#Y7#Y7#]5#(2#:2#_2#/5#]5#]5#/5#`7#`7#`7#{5#Mq#=6%w6%05%x6%xf#xf#xf#RP#RP#RP#RP#Zn#5@$($$&Z#&Z#($$@)%E;%_$$l@$.o#~X#qT#M`#!X#Wy#,/$UY#z0+'6+f8++I#.G#.I#=2+a[+U4#Rg+Fy#Un#:i#Pg+2f#cf#Cy#RO@!k+jr+ m+%w+#!@y6%4$@6~@2O#oo@A^$z6%'B##K.G_#D_#$-#CV#;z x, {7 A6%dI#Me yf *9 )l _j np.Cg@aj+6N.B6%C6%D6%E6%BY#mZ#M; -. I$ x8 ZY ,v.yj+oA+NZ@KE#NZ@NZ@o8$3K@Lh+{! {! {! {! {! {! {! be+be+be+be+be+be+be+be+,v.)> ]$@]$@)> i~ Yt.)> ,v.i~ ,v.KB ,v.6g+)> ZY {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! be+be+be+be+{! {! {! {! {! {! {! {! {! {! {! {! oA+oA+NZ@oA+NZ@oA+NZ@oA+3K@yj+KE#A_@PC#U/@", "vk vk vk .h..h.$~.$~.$~.$~.$~.$~.$~.$~.$~.$~.vk .h..h..h..h..h..h.vk .h..h..h..h..h..h..h..h.tk tk tk tk uk oG.:j.m` uk uk uk uk uk uk uk uk !B sk tk uk oG.:j.m` m` sk tk tk uk oG.oG.:j.:j.le le le le ke ke ke ke ke ke ke ke ke ke ke ke :j.:j.:j.:j.:j.:j.:j.:j.uk uk uk oG.:j.m` m` m` uk uk oG.oG.:j.:j.m` m` R_ m` oG.oG.m` -H.m` l:.If.xX+F6%]g mk l*@f4 LJ.Gp@&I.A: G6%#^@0n${2%`-%5R.rU.gw@W4%v~ 0O.5o 5O$|a {<@A1 S&#s1@,q$LX$H6%I6%J6%IY$K6%Rf$L6%M6%y5%z5%bK$N6%O6%P6%n6%mD@&E+9~+ad+&_+t0+2/#H#$fd+y0+e8+A7#,6+C7#C7#C7#C7#I`#I~%U%$QR#j}%z|%D5%Q6%Q6%R6%S6%_}#12#Zc#Yc#G5%G5%1w#Rq#Ew#$o#pT#$}%m}%{:#{:#lD$T6%nD$c6%U6%V6%4/#!f+ld+I0+ 4+`3+F_$'$$v.$E7#E7#|@$8,$8,$qD$i8+j8+cd+9H#n8+#4+{_+{_+$a@~_+/6+/6+/6+/6+r:+r:+r:+r:+;k+Kg+s0+-|+4[+5[++;$]>$SP#SP#|I#.z$Rx$Rx$i}%W6%'i$ez@kf+-5@oo@>{+g#@l>@,J tI@Tx oI@5G@es u)$6E$1i Z;$],$^,$^,$],$Z;$}f }f }f }f }f }f }f }f }f )J 'M R-$36$h!@X6%3c#S^$T-$3F$4F$4F$3d$3d$}-#|K#zV#zV#zV#zV#}F$}F$Zo$Zo$Zo$Zo$~v$~v$^9$^9$^9$~v$aX#hE#aX#aX#aX#aX#<^%<^%Ts@4Z.]v$`o$Ry$Xz$Qy$4w+dD$dD$i%%i%%i%%i%%Vy$Vy$dw$dw$dw$dw$>H$Ix$Ix$Ix$8F$8F$^m$^m$^m$^m$cN$cN$b9$b9$b9$b9$~l$~l$~l$Qm#!k#M+#M+#M+#4Z+4Z+E@@E@@jX+jX+)K@,K@RQ@RQ@RQ@RQ@qZ@qZ@qZ@AM@>K@YK+Q,+Q,+s;@ZK+mX+#a@%B+%B+&B+T.@|=@|=@|=@|=@|=@|=@|=@|=@|=@|=@|=@|=@|=@|=@}=@}=@wD+vD+)w+!w+!w+)w+1R+sr+-w+-w+.B+.B+.B+.B+.B+-9@@m+&!%&!%&!%nq#nq#nq#nq#ki+ki+M4#M4#M4#M4#^|+mi+WF#S%$S%$+}#oq#oq#;f+;f+ ;$ ;$'6+'6+gw$gw$F_$F_$v0#v0#v0#v0#1@$1@$0,$0,$Yn#Yn#/O#/O#/O#/O#/O#DB#ci#ci#M`#M`#M`#qT#qT#qT#8T#7T#qT#M`#qT#7T#aT#9T#>}#>}#>}#SP#SP#}I#}I#}I#(K#SP#^g$3~%^g$^g$We$:!%vs$dh$VK$@{%c,${>$YQ$sT$=#%-#%.R$.R$Y6%Y6%SP$z-%w-%*Y$BZ$AZ$*&%K)%]V$oY$+Y$+Y$h6%Z6%`6%.X$ 7%.7%{U${U${U${U${U${U${U${U$~U$~U$2;%2;%~V$~V$O]%k-%n=%^`$n=%n=%w*%jW$kW$kW$!{%!{%82%p=%q=%+7%+7%+7%o*%x,%_}$]o$@7%w|$#7%:5%~@%$7%%7%&7%*7%7%h`$<5%q6%mY$x,%^`$o*%n*%n*%:~%:~%;&%K)%52%D=%x-%RV$RV$RV$TP$xO$|N$+!%+!%|N$+M$sT$.R$;5%#O$#O$P3%8;%ZQ$^:%YQ$YQ$>,%@{%EV$UW$_q$_q$)J$)J$EV$EV$@{%ys$>6$d($[X#n1$3~%We$p(%Px$Sx$/!%67$DM$qO$:N$:N$:N$qO$qO$:N$qO$DM$:N$LV$q.%[N$QP$sU$R;%RV$z-%&X$r6%c;%k(%s&%|]%<(%<(%o%%e$%f_%$1%}]%/!%b<$;}#@;$W4$>X#E~$UY#v.$)E#I`#wB#uq#+I#+I#.G#tB#sq#|f#Sn#Sn#6,$6,$q=$q=$[t#[t#8k@8k@ne#ne#8k@xy#Yv#wy#ne#[G+Q;@u=@=E#15%s6%_c@ 3% 3%E^%E^%v)%6o@}=@}=@6o@jb#jb#6o@6o@6o@6o@6o@6o@6o@6o@K)@$B+yD+yD+yD+mX+mX+9G+9G+2T+2T+>K@)K@AM@AM@qZ@pZ@M+#yA#]N#R[#@2%P6#nZ@nq@i~+]-+5$@E@@jX+4G+;K@-K@r8+yM@5&@4G+5$@5$@5$@5$@5$@5$@5$@4G+4G+5&@5&@R)@Q,@qt$r;@|V+,}@>}@r<@r<@R)@~K@iF$#/$A3%9r$[ %D:%,7%'7%iq$,u$;M ;M 9~ }f 1|@:|@[|@tG 5G@j@#5r 5r #@x@T @)7%j(@u~@v^@!-%@6%!7%[f$5 %b:%*X$<(%,#%,#%f$%e:%6^%iw$iw$xn$yi$dh$dh$_q$_q$YK$NB# ]$@6g+Yt.i~ Yt.6g+ZY ,v.,v.,v.i~ )> )> Yt.{! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! 8g.8g.8g.be+{! ]! ]! ]! {! {! {! {! {! {! {! {! Yt.Yt.oA+Yt.oA+Yt.oA+Yt.yj+Yt.)D+6g+U/@6g+", "$~..h..h.vk vk vk +h.$~.$~.$~.$~.$~.$~.$~.$~..h..h..h.vk vk .h..h..h..h..h..h..h..h..h..h..h.tk tk tk tk uk oG.:j.m` uk uk uk uk uk uk uk uk !B sk tk uk oG.:j.m` m` sk tk tk uk oG.oG.:j.:j.ke ke ke ke le le le le ke ke ke ke ke ke ke ke oG.oG.oG.oG.oG.oG.oG.oG.uk uk uk oG.:j.m` m` m` uk uk oG.oG.:j.:j.m` m` g% -H.:j.oG.oG.:j.oG.}9.C) :' =a :7%<7%2/$[&$QH [7%#s@/^ -I.A: DA@}7%g/%OM$dN@2C@(O.W}%|- I8 _0@kk I8 )#+$b<$}I#}I#.z$.z$Qx$Qx$h}%b7%m)+ig@Ni+yr+7Z.sz@WQ@7O.,J tI@Tx oI@5G@es u)$6E$1i Z;$],$^,$^,$],$Z;$}f }f }f }f }f }f }f }f }f )J 'M R-$E<%h!@X6%3c#S^$5O#Xo$r!$c7%&X#&X#<)#<)#zV#zV#zV#zV#}F$}F$Zo$Zo$Zo$Zo$~v$~v$^9$^9$^9$~v$aX#hE#aX#aX#aX#aX#<^%<^%Py$4Z.]v$`o$Ry$Xz$Qy$]8$bE$bE$CM#CM#CM#CM#Zz$Zz$/v$/v$/v$dw$>H$>H$>H$>H$Cj$Cj$^m$^m$^m$^m$sS$sS$b9$b9$b9$b9$~l$~l$~l$Qm#!k#M+#M+#M+#4Z+4Z+E@@E@@jX+jX+)K@,K@RQ@RQ@RQ@RQ@qZ@qZ@qZ@AM@>K@YK+Q,+Q,+Q)@lX+mX+mX+&B+%B+yD+B@@|=@|=@|=@|=@|=@|=@|=@|=@}=@}=@|=@|=@|=@|=@|=@|=@wD+vD+)w+!w+!w+)w+1R+sr+-w+-w+.B+.B+.B+.B+.B+-9@@m+&!%nq#nq#nq#nq#5f#5f#M4#M4#M4#M4#^|+^|+^|+mi+WF#S%$S%$+}#oq#oq#;f+;f+ ;$ ;$,6+'6+C7#gw$gw$gw$E7#E7#E7#E7#'$$'$$E~$E~$X%$X%$DB#DB#DB#DB#DB#DB#ci#ci#ci#M`#M`#M`#qT#qT#8T#7T#qT#M`#qT#7T#aT#9T#aT#aT#aT#0T#0T#9T#9T#9T#8T#0T#,6$,6$67$,6$us$,%@{%EV$UW$_q$_q$)J$)J$UW$UW$ys$ys$yi$>6$n1$n1$3~%We$p(%Px$Sx$.z$9T#3|$DM$qO$:N$:N$qO$qO$DM$3|$M3$3|$:N$tT$G]%CM$sU$R;%A-%z-%c>%r6%r6%&X$5/%|]%e$%o%%M]%M]%>#%(}%}]%ts$Y_$]>$F2$$;$'X#Wy#@K#UY#+G#wB#xB#Uy#%w#f8+e8+.G#sq#}i#gf#gf#5,$5,$q=$q=$[t#[t#8k@8k@ne#ne#:G+xb#/Z$vy#ne#Q;@jc@oe#w7%x7%s6%_c@_c@E^%}^%}^%v)%6o@}=@}=@6o@jb#jb#6o@6o@6o@6o@6o@6o@6o@6o@K)@xD+T.@T.@T.@P,+P,+3 @3 @Q,+Q,+>K@>K@V.@AM@AM@zM@M+#yA#]N#R[#@2%~(%M+#BO@i~+->+5&@5$@jX+5$@5G+-K@h[+r8+yM@5&@4G+4G+4G+4G+5$@5$@5$@4G+4G+5&@5&@R)@r!%Z]%R,@2T+r<@8~@,}@,}@R)@7G+/'$#/$y7%ms$,X$q!$z7%'7%-0@-0@mI@mI@[g }f 1|@}|@[|@tG tG ;E 5r 5r @UJ#Dj =2 D7%E7%bK+F7%6_ )f :7+5j.Aq.6'.zq.*R+Nu+G7%!F 9} W t& Y% Z Z i~ 6g+U/@)D+oA+yj+Jb#3K@3K@3K@Lh+{! {! {! {! {! {! {! {! {! {! {! {! {! {! {! Yt.)> 6g+)> i~ i~ )> ]$@,v.,v.i~ Yt.Yt.Yt.)> ]$@{! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! 8g.8g.8g.be+{! ]! ]! ]! {! {! {! {! {! {! {! {! Yt.8}.Yt.8}.Yt.8}.Yt.8}.Yt.Rx.)> Rx.)> Rx.", "N6 N6 $~..h.vk +h.+h.$~.$~.$~.$~.$~.$~.$~.$~.$~..h.vk vk vk vk .h.$~..h..h..h..h..h..h..h..h.uk uk tk tk tk uk oG.:j.uk uk uk uk uk uk uk uk sk tk tk uk oG.oG.:j.:j.uk uk uk uk uk oG.oG.oG.ke ke le le le ie ie ie ke ke ke ke ke ke ke ke uk uk uk uk uk uk uk uk oG.oG.oG.oG.:j.:j.:j.:j.uk uk oG.oG.:j.:j.m` m` -H.l` m` m` m` l` -H.r: R& 1! H7%=a vv.I7%J7%v> }; lM+v9 z1%qy@3x$K7%L7%OM$!&@[4%jr 1C@lr 8|@s~+kk _0@h|@h|@0T.wi+so@}p#M7%N7%O7%*K$P7%-Q+Q7%/%+R7%S7%T7%U7%V7%W7%X7%Y7%Z7%`7%@-+u)+X1+>-+Q3+Rl+._+=k+;k+gd+%2+z0+5V#UY#A0+8,$T%$U%$*}#j}%z|%#5%o(%Ox$Jt#:}#_}#12#%5%35#Sq#1w# z$Ew#%o#pT#d4%D|%{:#oD$kD$T6%I5%I5%a7%H0+ld+md+J0+j8+i8+qD$E7#'$$U%$T%$|@$E_$E_$F_$`3+j8+/6+m8+m8+cd+F:+h0#Pg+E:+ed+B)$B)$H#$8[+<[+<[+C:+*f+=f+%>%J#%sv$/$%$2#ts$}I#^g$^g$/!%Px$31%z|% 8%m)+ig@Ni+Fe@dH#x=$@l+DL.1k ! $pI@oI@5G@K@>K@2T+2T+Q)@lX+P,+mX+&B+&B+yD+B@@|=@|=@|=@|=@|=@|=@|=@|=@}=@}=@}=@|=@|=@|=@6o@6o@wD+vD+)w+!w+!w+)w+1R+sr+-w+-w+.B+.B+.B+.B+.B+-9@@m+&!%nq#nq#nq#nq#5f#5f#M4#M4#M4#M4#^|+^|+^|+mi+WF#S%$S%$+}#oq#oq#;f+;f+Ly# ;$,6+,6+C7#C7#gw$gw$E7#E7#E7#E7#'$$'$$E~$E~$X%$X%$DB#DB#DB#DB#DB#DB#^l#^l#ci#ci#M`#M`#M`#qT#8T#7T#qT#M`#qT#7T#aT#9T#aT#aT#aT#0T#0T#9T#9T#9T#0T#,6$us$us$,6$,6$us$$XQ$XQ$G]%*#%}N$.R$RP$ R$d-%QR$DS$DS$y-%d7%52%52%h6%~{%TV$`6%`6%Z6%e7%f7%C$%.8%.8%+8%f7%B$%F&%F&%F&%~U$~U$~U$2;%O]%O]%O]%O]%O]%92%92%w*%Y2%y,%Y2%Y2%w*%w*%92%+X$M5%O]%k-%n=%!V$^`$r %mY$i7%Ud$kg$@8%#8%Ah$Bh$2z$$8%%8%&8%*8%=8%-8%=8%;8%>8%,8%u7%u7%B %lY$S5%O5%hW$1M$a`$^`$n=%Q]%G&%g=%1;%{U$]U$B=%D=%.Y$w-%w-%z-%e-%yO$H*%+!%|N${,%}N$Y6%;5%#O$#O$P3%8;%ZQ$^:%YQ$YQ$>,%@{%EV$UW$_q$_q$)J$)J$'J$UW$ys$ys$ u$ u$Mx$Ve$3~%3~%Sx$Sx$Sx$/!%0T#M3$3|$qO$qO$:N$qO$qO$3|$M3$S[$M3$qO$:N$qO$yL$m>%R;%A-%z-%b:%,/+}5%c>%5/%|]%e$%M]%]'%]'%e:%(}%e<$Y_$X_$d<$&;%F2$+2#L`#|T#@K#+G#+G#+G#+G#.K#.K#>6+e8+[T#}i#gf#Sn#K@V.@AM@AM@zM@~^#]N#yA#]N#P6#P6#M+#7V@]-+]-+R,+5$@E@@E@@YK+;K@h[+r8+yM@5&@4G+4G+4G+4G+jX+jX+jX+5$@5$@4G+4G+w;@r!%'8%k#$Q,+:P+7~@r<@|V+cB@7G+/'$Rb$7_%)8%!8%q!$z7%~8%Sa$-0@R-$mI@[g !M n$#%2@dP@-! -! ds ml j.$#7)#{8%Y}$j(@]8%Oc$'x$][%!7%[f$5 %c>%n%%o%%f$%I+%I+%~`$6^%yS$vn$>6$>6$Y4$Y4$]b$]b$id$_X#H0#`P#/2#*8#ll#YP#YP#ZP#ll#}5#/2#Y7#W7#W7#W7#!5#`7#/5#(2#(2#]5#{5#`7#]5#(2#/5#]5#{5#b($=6%=6%95%l}%H_$H_$G_$#G##G##K##K#/l#/l#4*$4*$4*$4*$O3%4*$Dq#B0#G7#G7#/l#/l#ci#VY#er$Zy$UY#UY#Uy#Uy#,6+)6+ML#z7#z7#z7#Jy#nc#sB#mc#F:+^|+]_+'k+]R#mc@%v$fB@1^@^8%/8%(8%8T@D[#;v$Bo+_8%8v#Z^#Ho$Y^#;1+p<+bv v; JW#:8%<_$Cw XL q9+)D+)D+yj+yj+3K@Jb#Jb#oA+{! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! Yt.6g+6g+)> i~ i~ )> ]$@Yt.,v.Yt.6g+)> ,v.i~ jy.{! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! be+be+be+be+{! {! {! {! {! {! {! {! {! {! {! {! 8}.8}.8}.8}.8}.8}.8}.8}.Ov+Ov+Rx.Rx.Rx.8}.", "N6 N6 N6 $~.$~.$~.$~.$~.$~.$~.$~.$~.$~.$~.$~.$~..h.vk +h.+h.vk .h.$~.N6 N6 N6 N6 N6 N6 N6 N6 :j.oG.uk tk tk tk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk oG.oG.oG.oG.oG.oG.uk uk uk uk uk oG.oG.oG.uk tk tk tk sk :j.:j.:j.:j.:j.:j.:j.:j.oG.oG.oG.oG.oG.oG.oG.oG.:j.:j.:j.:j.oG.oG.oG.oG.uk uk oG.oG.:j.:j.m` m` :j.:j.l` l` l` l` l` r: q& u}+3!.`$+l~ n-$Q7+[8%mk }8%*I+z/@g) Ei qy@EA@k|%|8%18%28%38%ss -s@8|@d{ +D[@fk@|O.ks+48%58%68%78%88%98%=N+08%x;%a8%b8%+H#c8%d8%e8%f8%g8%h8%5>@TA+.w+6i@lR+.>+[9@2}@pF$g($'|+,|+5V#A0+A0+}T#8,$U%$51%2G#i}%31%,o#Jt#Kt#Kt#22#%5%35#Sq#Cw#p(%Px$Qx$:K#i~%q[%r[%pD$0_%0_%eF$eF$Hb+i8%md+Ib+k8+l%$$`$Fb+|@$E7#X/%U%$T%$E_$E_$F_$i8+l%$/6+dd+dd+E:+Pg+:i#df#Nn#`-$fd+fd+gd+Tx$cO$YM$YM$w:+Bb+I#%'&%<=%KC$b<$,6$n1$^g$3~%V!%p(%z|%z|%C4%'i$zq@kf+Fe@''%O]+g#@XP.G> 6h Yk@oI@5G@9~ 6E$|g$1i Z;$],$^,$^,$],$Z;$}f }f }f }f }f }f }f }f }f jQ 'M ;g$B(%NO$I_#!q$_V#Fi$Sz$c7%c7%NW$NW$<)#<)#zV#zV#zV#zV#}F$}F$Zo$Zo$Zo$Zo$~v$~v$^9$^9$^9$~v$o]+pz#o]+o]+o]+o]+e.%e.%Wz$4Z.]v$R2@]8$Ry$Ry$Qy$bE$bE$CM#CM#CM#CM#Zz$Zz$/v$/v${m${m$ln$]m$]m$ar$-c$-c$Dj$^m$5G$5G$sS$hU$c9$c9$c9$c9$d9$d9$d9$vp#!k#M+#M+#M+#4Z+4Z+E@@E@@K #J #[H#,K@]K@]K@!K@!K@V.@V.@V.@V.@)K@)K@|V+|V+Q)@lX+P,+P,+&B+&B+T.@3T+|=@|=@|=@|=@|=@|=@|=@|=@ED+}=@}=@}=@|=@6o@6o@6o@wD+vD+)w+!w+!w+)w+1R+sr+-w+-w+.B+.B+.B+.B+.B+-9@St+py+py+py+WN#WN#WN#WN#M4#M4#^|+^|+^|+^|+mi+]|+WF#S%$S%$+}#oq#oq#;f+;f+Ly#Ly#,6+,6+!w#C7#C7#C7#|@$|@$E7#E7#'$$'$$w.$w.$X%$X%$DB#DB#DB#DB#DB#DB#^l#^l#^l#ci#ci#M`#M`#M`#8T#7T#qT#M`#qT#7T#aT#9T#g@$g@$g@$S[$S[$M3$M3$M3$DM$:N$tT$G]%qO$qO$:N$tT$#l$yi$KP$q.%q.%tT$b$%vO$.R$PR$m>%d-%DS$=&%%%%y-%^V$h6%~{%Z6%Z6%Z6%j8%j8%f7%+8%.8%g7%k8%l8%m8%n8%D$%f#%f#%g#%g#%R%%R%%R%%o8%o8%o8%o8%o8%o8%o8%!V$y,%y,%Y2%^`$k-%k-%p8%q8%p8%p8%!U$!V$r8%/T$s8%hR$t8%u8%v8%w8%x8%y8%z8%A8%*8%*8%B8%C8%C8%D8%E8%-8%F8%C %t7%;7%B %`N$G8%O5%U.%Q<$a`$a`$N&%d>%u9$_T$1;%i6$5]%O+%^U$^U$52%AZ$z-%y-%+(%F;%H*%yO$7^%i{%Y6%;5%#O$#O$P3%8;%ZQ$^:%YQ$YQ$>,%@{%EV$UW$_q$_q$)J$)J$'J$'J$VK$ys$ u$@l$UQ$Mx$3~%}I#;2#$Y_$T[$4|$q1$tO$tO$q1$4|$e<$Y_$e<$q1$tO$q1$yL$PR$H8%RV$z-%b:%kK$kK$QV$5/%|]%o%%_{%1~%1~%I+%f_%X_$a>%9X#9X#*Z#*Z#f<$f<$G2$f($57$;6$;6$57$g8$hd+&2+>6+[T#|f#Sn#}f#rq#qq#q=$q=$[t#[t#8k@8k@ne#ne#[G+jc@&n#[a@jc@eK@oe#Y+$x7%5e@>w+>w+>w+_c@E^%}^%Rx#L)@Jl+Jl+L)@fz@{k@L)@tr+tr+tr+tr+tr+tr+tr+ED+xD+T.@T.@T.@P,+P,+3 @3 @6$>6$c($]b$c@$c@$b@$`y# 6g+6g+Yt.,v.,v.)> jy.6g+i~ )> jy.)> KB ZY jy.{! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! be+be+be+be+{! {! {! {! {! {! {! {! 8}.90+90+90+90+90+90+90+Pj+,8+0d.90+90+90+", "$~.$~.N6 U5 U5 $5 $5 $~.$~.$~.$~.$~.$~.$~.$~.N6 .h.vk +h.+h.vk .h.N6 N6 N6 N6 N6 N6 N6 N6 N6 m` :j.oG.uk tk tk tk tk uk uk uk uk uk uk uk uk oG.oG.oG.uk uk uk uk uk :j.:j.oG.oG.uk tk tk sk oG.uk uk tk tk sk sk !B :j.:j.:j.:j.:j.:j.:j.:j.m` m` m` m` m` m` m` m` m` m` m` :j.oG.uk uk uk uk uk oG.oG.:j.:j.m` m` oG.:j.m` m` :j.uk tk +n D& {* cW Y& x* L; If.*^ i3 p5%N/ F!@|F :> W8%h[%[4%X8%18%|8%8i$qt@Y8%pt@(2@u+#d$Ti+zP$R;@dE#wT#//$f9$'|+;|+}T#}T#}T#|@$U%$51%&}#31%z|%Jt#Kt#Kt#Jt#%5%Rq#Mt#Mt#o(%Px$Qx$:K#i~%q[%r[%pD$F0+F0+G0+dF$i8%k0#Ib+@*$k8+E#$^ %Fb+T%$|@$*}#X/%T%$8,$E_$F_$i8+l%$r:+dd+dd+ed+df#Rn#df#-f+`-$Es$Es$gd+cO$3[+3[+-|+-_+Jg+*y${-%KC$Y_$67$xn$n1$Ve$Ve$3~%Dw#p(%#5%C4%Qd$%t@~a+Fe@Ei$Y)+=@#PM.:t {J Yk@Tx 6G@9~ e6%-5%1i Z;$],$^,$^,$],$Z;$}f }f }f }f }f }f }f }f }f [,$+x+;g$>9%,9%H_#;v$3w$w[#Sz$c7%c7%NW$NW$<)#<)#zV#zV#zV#zV#}F$}F$Zo$Zo$Zo$Zo$~v$~v$^9$^9$^9$~v$d.%$N$d.%d.%d.%d.%:^%:^%Wz$4Z.]v$R2@]8$Ry$Ry$Qy$bE$bE$CM#CM#CM#CM#Zz$Zz$/v$/v${m$jm$]m$Tj$Tj$,Z#-c$-c$Dj$^m$5G$5G$hU$hU$_8$_8$_8$_8$5($5($5($hX+!k#M+#M+#M+#4Z+4Z+E@@E@@IO$K #[H#,K@]K@!K@w;@w;@1 @1 @1 @V.@)K@,K@S,@S,@ZK+9G+P,+P,+&B+&B+T.@3T+|=@|=@|=@|=@|=@|=@|=@|=@ED+ED+}=@}=@|=@6o@6o@6o@wD+vD+)w+!w+!w+)w+1R+sr+-w+-w+.B+.B+.B+.B+.B+-9@St+py+py+py+WN#WN#WN#WN#M4#M4#^|+^|+^|+^|+mi+]|+WF#S%$S%$+}#oq#oq#;f+;f+Ly#Ly#f8+,6+!w#C7#C7#C7#|@$|@$E7#E7#'$$'$$w.$w.$X%$X%$DB#DB#DB#DB#DB#DB#^l#^l#^l#ci#ci#ci#M`#M`#8T#7T#qT#M`#qT#7T#aT#9T#g@$g@$g@$S[$S[$M3$M3$M3$:N$tT$LV$tT$:N$qO$:N$tT$@l$yi$G]%pU$+M$tT$RR$QP$TP$PR$m>%d-%tU$e>%%%%y-%TV$~{%Z6%Z6%Z6%Z6%'9%'9%.8%g7%)9%)9%k8%l8%!9%vv$~9%g#%g#%R%%R%%!U$!U$o8%{9%{9%{9%{9%o8%o8%o8%!V$y,%]9%x,%o*%Q]%qX$q8%Q%%p8%!U$^9%G$%/9%s8%hR$(9%_9%:9%<9%[9%}9%|9%19%29%39%49%59%D8%69%79%89%99%09%C %t7%-7%a9%,V$G8%b9%bc$U.%_}$a`$iW$6S$_T$v8$1;%i6$5]%L%%L%%]U$K)%K)%SV$y-%tU$F;%H*%yO$xO$TP$Y6%;5%#O$#O$P3%8;%ZQ$^:%YQ$YQ$>,%@{%EV$UW$_q$_q$)J$)J$@Z$'J$VK$ys$@l$@l$FP$Nx$^g$SP#,}#;2#Sx$4^%]>$Y_$e<$4|$q1$tO$tO$q1$q1$4|$T[$4|$tO$PP$tO$rU$c>%A-%RV$z-%QV$%.%%.%r6%|]%|]%o%%]'%G'%1~%f:%f_%9X#9X#9X#9X#*Z#*Z#*Z#*Z#Z%$G2$f8$57$57$f8$I#$$2+gd+d8+Ly#sq#}f#}f#qq#-X#q=$q=$[t#[t#8k@8k@ne#Q;@[G+jc@[a@[a@p;@eK@o;@Y+$15%5e@:c@;w+;w+gy+ 3%}^%fz@tr+wI+wI+tr+{k@L)@tr+Jl+Jl+Jl+Jl+Jl+Jl+Jl+Rt+xD+T.@T.@T.@P,+P,+3 @3 @6$Y4$]b$]b$c@$b@$b@$`y##.5{.i9%2_ YL pN xB.E<.zu.!E.j9%+G+k9%B+ =$ NZ@ed `Y 5A.Ea+be+gA gA w8.be+be+x8.y{ x8.Lh+;~ 6j+{! {! {! {! {! {! {! {! ]! ]! ]! ]! ]! ]! ]! ]! )> 6g+6g+Yt.,v.,v.)> jy.]$@Yt.6g+q9+6g+,5 KB jy.{! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! ]! ]! ]! {! be+8g.8g.8g.{! {! {! {! {! {! {! 13+8}.90+90+90+90+90+90+90+Pj+Pj+0d.90+90+o#|2%$o#Ew#j_%We$4^%.z$*2#`A$X/%r<%I~%Fb+i8+i8+j8+ 4+I0+I0+Ib+Ib+J0+l%$$`$:O#U%$U%$|@$|@$E7#E_$>>$gw$^H$id+ed+ed+ed+-f+-f+-f+-f+In$7q$X3+%2+hd+Nr$tv$'&%#4%Jg+Ig+#o>#zV#zV#}K#}K#f0$f0$NW$NW$}F$}F$]q$]q$]q$]q$,]$,]$UH#UH#UH#,]$`P$r4$`P$`P$`P$`P$8p$8p$4Z.4Z.`o$`o$4w+4w+4w+wy+1S#1S#=7$Vk$CM#CM#Vy$Vy$Hx$/v$jm$*c$ar$]m$ln$CO#;N$>N$^m$_a$_a$_a$cN$sS$b9$b9$b9$b9$~l$~l$~l$Qm#hX+7V@nZ@nZ@4Z+| @J #J #IO$IO$[H#)K@!K@R)@X.@X.@6G+6G+~K@1 @>K@)K@|V+S,@9G+lX+#a@P,+3T+3T+yD+Pt+jb#|=@ED+Rt+g~+Rt+ED+}=@|=@|=@|=@|=@|=@|=@|=@|=@vD+vD+vD+vD+vD+vD+1R+1R+-w+-w+.B+fy+fy+vr+vr+^/+&m+*m+WN#WN#/k+&l#&l#&l#$l#(k+{_+{_+b[+*l#=l#bc#.w#,$$q=$[*$Ey#oq#;f+-f+In$7q$)6+)6+F_$F_$qD$qD$UY#Ty##;$w'$w'$#;$>X#Sy#VY#VY#ci#ci#ci#ci#ci#ci#qT#qT#qT#qT#qT#ci#^l#@I#M`#7T#aT#8T#7T#qT#8T#0T#g@$3|$qO$DM$S[$|X#S[$DM$3|$3|$3|$3|$DM$DM$DM$DM$wn$wn$LV$[N$j]%j]%wO$wO$PR$d-%&X$k(%y-%tU$*&%*&%TV$TV$Z6%Z6%Z6%Z6%'9%'9%)9%)9%)9%)9%C9%C9%C9%D9%{X$E9%E9%F9%F9%h#%h#%h#%G9%G9%G9%r8%G$%G$%h#%iW$xZ$A.%p*%y*%c2%P]%H9%I9%J9%J9%K9%L9%M9%N9%O9%#8%P9%Q9%R9%S9%T9%U9%V9%W9%X9%Y9%Z9%`9% 0%.0%+0%_B$@0%#0%$0%%0%-7%&0%*0%=0%-0%L*$U.%hW$a`$a`$iW$e#%g#%Rr$;0%#4$F&%~U$t9$ap$^V$*&%%%%wT$&'%n-%H*%TP$B~%;5%>5%>5%8;%P3%^:%><%LR$/:%xs$xs$'J$UW$hd$]b$J>%)J$`L$`L$VK$xs$yi$@l$0%A-%H8%}5%,/+r6%b:%s&%|]%e$%1~%[~%}~%e:%'A$.2#a>%K'%a>%A:+,_+*Z#Z1#G2$G2$f9$f9$f9$f9$g8$%2+[T#'E#sq#|f#,l#,l#qq#-X#[*$q=$[t#yy#xy#wy#vy#&n#rX@u=@jc@}G+eK@p;@|t#15%15%Y+$-:#:c@:c@:c@+B+gy+&t@<&@|R+:&@<&@#9@:&@FD+<&@<&@<&@<&@:&@:&@:&@tr+A@@B@@B@@B@@P,+P,+3 @9G+Q,+Q,+>K@>K@AM@AM@qZ@pZ@~l$b9$b8$b8$!l$d9$d9$d9$tr$WL$/H$/H$)I$)I$FO$6G+R,+5&@5&@4G+5$@5$@jX+jX+E@@E@@J #K #K #J #J #,K@'~%'~%SQ@>K@>K@5$@2T+Q)@r;@mq@W.@lF$K$+k %k7#Z:$,0%-B$1d$Mu G$$7E$(J$kQ kQ w~$!M M#Rt#:I#*8#ll#ll#*8#[w#[w#[w#}5#*8#/2#[w#Y7#Y7#Y7#Y7#/5#/5#]5#]5#`7#`7#`7#`7#]5#]5#`7#{5#Mq#b($=6%B7%$5#:l#:l#+o#EB#yf#yf#yf#5@$/l#i@$)0%!0%&Z#S_$E;%i@$Zn#Zn#Zn#Zn# O#~>$,/$Zy$Vy#wB#,6+,6+e8+e8+e8+A7#z7#@w#~0%YF#=l#YA+Mb+_x@//+MK+|~+J4#{0%gB@G>#]0%>l 3L.n9+h>#])#m>@hP@99 t7 o<+D6 -<@F).47+h_.^0%]'./0%WL+$;+{V 49.,l.wo.Uz (0%w,@C+ ;5 7$+[4 ^b+%.@%.@%.@%.@%.@ZW+ZW+,&+'> f!+ZW+M8@v]#:{+:{+Ea+5A.{! 8g.w8.8g.be+be+]! ]! ]! ]! ]! ]! ]! ]! )> Yt.i~ ,v.ZY ZY ZY ZY ]$@)> Yt.i~ i~ Yt.)> ]$@be+be+{! {! ]! 5A.5A.5A.be+8g.w8.be+5A.xc+xc+5A.]! ]! ]! ]! ]! ]! ]! ]! {! {! {! {! {! {! {! 13+Ov+0d.1x.h*.h*.h*.1x.6$ u$Lx$Lx$Ve$n1$kV#kV#Px$75%'i$JF@~a+-5@dH#~b#WQ@DL.:t ! $Tx qI@6G@K@2T+2T+lX+lX+0~@mX+B@@B@@&B+Pt+6o@|=@}=@Rt+Rt+Rt+ED+}=@|=@|=@|=@|=@|=@|=@|=@|=@vD+vD+vD+vD+vD+vD+1R+1R+up+up+.B+.B+fy+fy+fy+Yn+&m+*m+WN#WN#/k+&l#&l#&l#$l#(k+{_+{_+b[+*l#=l#bc#q=$q=$[*$[*$Ey#oq#-l#;f+In$In$'6+)6+gw$gw$F_$F_$UY#5V##;$w'$w'$#;$Wy#Sy#VY#VY#ci#ci#ci#ci#ci#ci#M`#qT#qT#qT#qT#M`#^l#^l#M`#7T#aT#8T#7T#qT#8T#0T#S[$3|$qO$DM$S[$g@$M3$DM$3|$3|$3|$DM$DM$DM$qO$qO$wn$wn$LV$j]%j]%j]%wO$H^%d-%c>%&X$k(%y-%AZ$AZ$*&%K)%~{%~{%Z6%Z6%Z6%j8%j8%60%)9%)9%g7%k8%k8%k8%70%{X$E9%F9%F9%F9%h#%h#%h#%r8%r8%r8%G$%G$%h#%h#%iW$xZ$A.%p*%.,%Y2%P]%H9%H9%U2%80%83%90%00%a0%b0%c0%d0%e0%f0%g0%h0%i0%j0%k0%l0%m0%n0%.0%o0%p0%q0%r0%s0%#0%t0%vM$>8%u0%v0%i`$w0%Z=$hW$hW$1)%_}$5Z$Iw$]X$Q+%Qr$Rr${U$5]%u8$,o$52%52%tU$e>%A=%wT$yO$+R$;5%;5%;5%B~%P3%P3%ZQ$ZQ$LR$/:%VK$VK$UW$`L$YK$hd$x0%U5%FV$FV$ys$VK$yi$@l$Ve$Mx$Xe$Xe$o(%p(%Px$/!%&M$S*%@*%D-%D-%D-%xL$@*%K=%D-%xL$xL$xL$D-%OV$YV$,/+R;%A-%A-%r6%}5%c;%c>%s&%|]%e$%]'%}~%|~%e:%'A$@2#K'%EM$3X#=X$,_+*Z#5|$f($f($f8$f8$f8$f8$-6$X3+.G#tB#sq#sq#}f#,l#qq#qq#q=$q=$[t#yy#xy#wy#vy#vy#rX@u=@jc@}G+jc@p;@@p$=E#=E#|t#oe#oe#o;@o;@-:#+B+qr$<&@|R+:&@<&@#9@:&@FD+<&@<&@<&@<&@:&@:&@:&@tr+xD+T.@yD+yD+#a@0~@ZK+Q)@Q,+Q,+>K@>K@AM@AM@qZ@pZ@~l$b9$b8$b8$!l$d9$d9$d9$tr$WL$/H$)I$~J$~J$GO$+@%XK+4G+4G+5$@5$@jX+jX+jX+E@@J #K #K #K #J #E@@AM@Z/$y0%@@%V.@>K@>K@2T+Q)@5o@>B+G@@/H$09$km$,]$~8$z0%-B$p~$Mu G$$yd$4z+l!$kQ w~$!M [g .~ ll ll 9~ 9~ 9~ 9~ 9~ 9~ 9~ 9~ ~+D0%V* W* sq.yX$cH.Eo+8' 8' 8' 8' 8' f!+f!+'> f!+f!+ZW+M8@h]@h]@v]#5A.]! be+8g.8g.8g.{! {! ]! ]! ]! ]! ]! ]! ]! ]! )> Yt.i~ ,v.,v.,v.i~ i~ 6g+)> Yt.i~ i~ Yt.)> 6g+be+be+{! {! ]! ]! 5A.5A.{! 8g.8g.be+5A.xc+Ea+5A.]! ]! ]! ]! ]! ]! ]! ]! {! {! {! {! {! {! {! {! Rx.90+%%I0%J0%J0%K0%L0%M0%N0%O0%P0%Q0%[@%I%%|o+Vi+1h+tG+5X+31@|1@#w#Es$hd+hd+%2+!6+B0+E0+E7#U%$*}#PR#k}%k}%Rx$Sx$>}#9T#}]%ts$%2#$;$^>$A0+}T#)6+d8+d8+.I#.I#V4#V4#!f+ld+*2+Gy#`3+F_$|@$|@$T%$|@$|@$8,$E_$F_$^H$^H$7q$7q$7q$7q$7q$X3+X3+X3+;|+;|+;|+6[+hD$<=%{-%*Z$c %=y$ ! $oI@Ux Du 9~ u)$7E$=H$],$],$],$],$Y;$Z;$}f Z;$Z;$}f }f }f 9~ 9~ !M +x+8E$E<%9E$3j+%i#6Y+#f${q$%J$C~$Uz$eN$eN$pz#pz#f0$f0$NW$NW$}F$}F$]q$]q$]q$]q$,]$,]$UH#UH#UH#,]$`P$r4$`P$`P$`P$`P$8p$8p$Py$Py$Ts@Ts@Qy$Qy$Qy$]8$cD$cD$A+%i%%i%%i%%Vy$Vy${m${m$/v$/v$CO#ln$]m$ar$Cj$Cj$5G$5G$^m$^m$a9$Ej$b9$b9$b9$b9$~l$~l$~l$Qm#vp#nZ@nZ@M+#4Z+4Z+J #J #E@@E@@)K@)K@!K@!K@w;@w;@V.@V.@V.@1 @YK+YK+|+6[+6[+>|+1T#AB#tT#tT#X4#X4#X4#X4#X4#X4#M`#M`#qT#qT#qT#M`#ci#^l#M`#7T#aT#8T#7T#qT#8T#0T#M3$z[%J'%z[%N)%rO$N)%J'%N)%N)%N)%z[%z[%J'%J'%:N$fr$fr$%&X$*Y$BZ$BZ$AZ$zZ$52%52%^V$~{%~{%TV$O%%O%%.7%60% 7% 7%.8%+8%+8%R0%E9%2)%2)%2)%S0%S0%i#%i#%i#%i#%i#%S0%S0%S0%2)%Y'$T0%y.%U0%.,%Y2%+4%X2%V0%W0%X0%Y0%Z0%`0% a%.a%+a%!y$@a%#a%$a%%a%&a%*a%=a%-a%;a%>a%,a%>a%'a%)a%!a%s0%~a%#0%{a%]a%>8%^a%B %b9%~@%i7%hW$1)%,@%>@%j>$/a%/a%(a%_a%Rr$Dq$cp$bp$B=%M*%d7%^V$e>%=&%y-%g6%>5%;5%B~%#O$&<%P3%lU$wS$uS$/:%VK$VK$`L$FV$ZX$[q$U5%#Z$GV$FV$>,%ys$yi$ u$Nx$Nx$mO$Xe$p(%Px$%5/%|]%e$%_{%|~%1~%>#%'A$e<$tO$tO$e<$/$%KC$&;%AB#@K#@K#+K#+K#+K#+K#.K#.K#e8+e8+[T#sq#}f#}f#K@>K@AM@AM@qZ@pZ@~l$;u$im$im$!I$)H$)H$)H$sr$2#%_H$_H$s$%s$%~]$GO$5Z+5$@5$@jX+jX+E@@E@@E@@J #J #K #K #J #E@@jX+V.@:a%:a%@@%V.@>K@>K@2T+Q)@5o@4 @7$@%/$J$+U`$R2@1K#C]#-B$p~$Y,@X^#36$yd$4z+l!$l!$k!$!M [g ,M mI@mI@}f }f }f }f }f }f }f }f 6$0V#Y4$]b$c@$(X#~O#~O#2|$nT#r'$}5#ll#ll#}5#`P#`P#*8#[w#^5#^5#Y7#^5#[w#/2#/2#]5#]5#]5#`7#`7#{5#{5#{5#{5#Mq#Mq#b($=6%~7%~7%{7%$5#:l#:l#+o#EB#yf#yf#yf#Zn#5@$i@$H,%i@$&Z#S_$E;%m@$!X#VY#,X#>X#5V#UY#wB#f8+.G#.G#>f+>f+if#if#{|+`N#=l#ni+{/+Mb+u)+[6+eD+J:+(K@`&+/ %^i@ 6g+6g+)> Yt.Yt.Yt.Yt.)> 6g+be+be+{! {! {! ]! ]! ]! {! be+8g.be+5A.xc+Ea+]! ]! ]! ]! ]! ]! ]! ]! ]! {! {! {! {! {! {! {! {! 7}.8}.Rx.Rx.Ov+Rx.Rx.8}.8}.8}.8}.7}.7}.z<.", "$~.$~.$~.$~.$~.$~.$~.$~.vk +h.vk $~.$~..h.+h.N6 $~.vk +h.+h.vk $~.N6 $~.$~..h..h..h.vk vk vk :j.:j.:j.:j.:j.:j.:j.:j.:j.oG.oG.uk uk oG.oG.:j.uk uk uk oG.:j.m` m` m` -H.l` oG.tk sk sk tk Rl Tl 9%.9%.9%.9%.9%.9%.9%.%x+%x+|{.9%.X)@X)@hY.hY.:j.:j.:j.:j.oG.oG.oG.oG.m` m` m` m` m` m` m` m` m` m` m` m` m` m` m` m` l` -H.R_ -H.m` :j.m` l` kb.kb.HO.oG.le vk vk l:.S% ~@ Q $+ g |a%1a%i`#Km.Q;.dN@eI+GA@VW 2a%3a%4a%Y8%E[@)#+g{@RM.ZP.jw rt o8 K`+6s kB V!@V2@vc+X:$z~$&i#Lt$F~%5a%6a%16%]i$7a%8a%9a%0a%aa%ba%ca%l @da%ea%tf+(o+x&@G4@R;@em$W+$X3+%2+%2+hd+B0+T@%5V#T%$51%*}#k}%k}%Qx$z|%8T#aT#b<$ts$&M$@;$Ty#)E#)E#'6+>6+e8+W4#>f+if#if#)f+)f+~i#id+^H$gw$'$$E7#E7#E7#E7#>>$>>$C7#B7#B7#In$7q$7q$7q$X3+%2+%2+%2+7[+7[+5[+hD$2u$<=%@*%*Z$wL$LC$+*%S*%d<$+ $aV#]X#Lx$]/$+5#/X#SL#TL#,2#2I#q0+%t@h(@S^@g^@.+@WQ@:N.G> tI@oI@'Y$Du }f 6E$e6%=H$],$],$],$],$Y;$Z;$}f Z;$Z;$}f }f }f 9~ 9~ !M +x+TL$1c#.J$ n+hq+6Y+#f$#B$RK$My$My$&N$&N$$N$$N$f0$f0$NW$NW$}F$}F$]q$]q$]q$]q$,]$,]$UH#UH#UH#,]$`P$r4$`P$`P$`P$`P$8p$8p$Wz$Py$Py$Py$Ry$Ry$Qy$Qy$Sy$Sy$Fx$A+%A+%i%%Vy$Zz$jm${m$/v$dw$*I$CO#]m$Tj$y4#-c$^m$5G$5G$^m$Ej$,p$b9$b9$b9$b9$~l$~l$~l$Qm#vp#nZ@M+#M+#4Z+4Z+E@@E@@5$@5$@>K@>K@]K@]K@]K@]K@qZ@qZ@AM@V.@YK+2 @x)+x)+lX+Q)@Sm#M2@&B+yD+%B+]w+|=@|=@}=@ED+ED+ED+ED+ED+|=@|=@|=@|=@|=@|=@|=@|=@vD+vD+vD+vD+vD+vD+1R+1R+>w+>w+:c@:c@#k+#k+#k+-9@&m+*m+/k+/k+/k+&l#Ng+Ng+oi+ni+mi+mi+bc#=l#bc#Qg++}#+}#+}#+}#Ey#Ey#hf#hf#Ly#Ly#f8+,6+!w#C7#C7#C7#@K#|T#,|+>|+>|+,|+1T#AB#tT#tT#X4#X4#X4#X4#X4#X4#ci#M`#qT#qT#qT#M`#ci#ci#M`#7T#aT#8T#7T#qT#8T#S[$N)%N)%z[%z[%z[%z[%z[%J'%rO$N)%N)%z[%J'%m%%m%%b$%5%#O$Hn$%<%8;%wS$Ga%uS$YQ$ys$ys$FV$GV$YX$ZX$#Z$n(%GV$GV$kU$>,% u$ u$Nx$Nx$Xe$We$p(%Px$Sx$21%VP${-%{-%*Z$*Z$*Z$*Z${-%e$%<(%YW$ Y$ Y$C-%C-%=Z$c;%A-%A-%RV$b:%b:%b:%c>%|]%ZW$e$%M]%1~%_{%f_%t_%Zt$fr$uO$ts$/$%&M$&;%Wy#@G#Vy#+G#wB#+G#wB#My#,6+d8+e8+Ly#sq#}f#Sn#5,$5,$,$$,$$yy#yy#xy#xy#xb#xb#rX@rX@rX@rX@rX@rX@:t#&n#xb#jV@ne#:G+:G+ne#jV@jc@tS$fh#K,@:x@fh#Aq@:x@(P+:x@:x@:x@:x@fh#fh#fh#<&@$B+yD+&B+%B+Sm#:s#R1#R1#Q,+Q,+>K@>K@AM@AM@qZ@pZ@Ls$;u$im$im$!I$)H$)H$)H$sr$2#%:H$:H$w_%Ha%K@2T+R,@Q,@4 @8$@~K@37$||+@ +*J$g~$Ja%H&#h^@X^#E<%yd$d'$t)$l!$k!$u)$[g ,M mI@mI@9~ 9~ 9~ 9~ 9~ 9~ 9~ 9~ X#,X#^>$^>$}T#)E#'6+tB# G# G#i0#i0#q7#q7#p7#(k+:k+^_+/f+%>+p8+&R#- +i[+X_@1Y+'m$BG.T8%s=#Gh+bj 2A ;z Ld il Tj Bm U} zb 3U$yN t:%[%%SI I%+[i.La%M/%T<%T<%ns.Ma%7s.i]@ 7.l6 YJ+.d+Hj.}3+Na%}a%WD@vv+vv+vv+(D.(D.(D.(D.M8@M8@-V@)g@vn.vn. k@9 +8g.8g.8g.be+be+{! ]! 5A.{! {! {! {! {! {! {! {! Yt.Yt.i~ i~ Yt.)> ]$@jy.)> )> )> Yt.Yt.)> )> )> be+be+{! {! {! {! {! {! ]! be+8g.be+5A.Ea+5A.]! ]! ]! ]! ]! ]! ]! ]! ]! {! {! {! {! {! {! {! {! ,v.7}.6g+[y+jy.[y+6g+Ov+i~ z<.,v.z<.,v.z<.", "$~.$~.$~.$~.$~.$~.$~.$~.vk +h.vk $~.$~..h.+h.N6 $~.vk +h.+h.vk $~.N6 $~.$~..h..h..h.vk vk vk oG.oG.oG.oG.oG.oG.oG.oG.uk uk tk sk sk tk uk uk uk uk uk oG.:j.m` m` m` -H.l` oG.tk sk sk tk Rl (j.X)@X)@X)@X)@X)@X)@X)@|{.|{.|{.|{.9%.X)@hY.hY.oG.oG.oG.oG.:j.:j.:j.:j.m` m` m` m` m` m` m` m` m` m` m` m` m` m` m` m` l` -H.R_ -H.m` :j.m` l` Qw.~K.Oa%Qw.Pa%ke 8c ,' M$ {@ #. U# U# }. )] Qa%}k Ra%Sa%{4@,A kP@x|@Ta%x|@kB.lB.5/+ND+g{@RM.RM.><@*<@x%@B~ %{ 0j 3u &4@},%7=$iT$=`$Ua%Va%Wa%Xa%Ya%Za%Za%`a% b%.b%+b%@b%#b%9L+tk+Rd+W8+bB+x&@sI+,.$SR#W+$W+$%2+$2+Nr${6+A0+C0+51%*}#*}#&}#Qx$#5%8T#aT#$2#b<$&M$1I#Ty#wB#)E#'6+e8+e8+>f+>f+if#i0#)f+)f+,f+id+B7#gw$'$$'$$'$$v.$v.$I`#D7#!w#LL#LL#.K#.K#X3+X3+'|+;|+;|+;|+hD$hD$&;%d %/$%S*%T[$xL$t'%{`$C-%@*%X_$+ $aV#]X#MB# Z#:X#:X#[I#kV#,2#D0+}1@Pi+'u+4T@7Z.P$+A(@:N.:t ! $oI@'Y$Cu }f 6E$e6%=H$],$],$],$],$Y;$Z;$}f Z;$Z;$}f }f }f 9~ 9~ !M +x+TL$es$+N$%l+FT$Rz$:V##B$RK$My$My$_!%_!%$N$$N$f0$f0$NW$NW$}F$}F$]q$]q$]q$]q$,]$,]$UH#UH#UH#,]$`P$r4$`P$`P$`P$`P$8p$8p$Wz$Py$Py$Py$Ry$Ry$Qy$Qy$Sy$Sy$Fx$A+%A+%i%%Vy$Zz$jm${m$/v$dw$*I$CO#]m$Tj$'M$S5+Dj$5G$5G$^m$Ej$,p$b9$b9$b9$b9$~l$~l$~l$Qm#!k#M+#M+#M+#4Z+4Z+jX+jX+5$@5$@>K@>K@]K@]K@]K@]K@*&#qZ@AM@V.@YK+5G+>T@>T@9G+Q)@Sm#Sm#%B+&B+%B+Pt+}=@}=@}=@}=@}=@ED+Rt+Rt+|=@|=@|=@|=@|=@|=@|=@|=@vD+vD+vD+vD+vD+vD+1R+1R+>w+>w+:c@:c@#k+#k+#k+-9@&m+bf#/k+/k+(k+Ng+Ng+Ng+*l#b[+]|+g0#=l#cf#2f#h0#$3@$3@+}#+}#oq#oq#hf#hf#Ly#Ly#f8+,6+!w#C7#C7#C7#|T#|T#,|+,|+,|+,|+1T#1T#tT#tT#X4#X4#X4#X4#X4#X4#ci#ci#M`#qT#qT#qT#M`#ci#M`#7T#aT#8T#7T#qT#8T#S[$rO$#<%#<%;~%(/%%<%%<%(/%#<%;~%;~%(/%&<%P3%P3%*#%b%ja%,b%'b%)b%!b%~b%{b%]b%^b%/b%(b%_b%:b%:b%%c>%b:%ZW$ZW$e$%o%%M]%o%%(}%t_%yS$`!%fr$/!%%2#-}#1I#E~$Vy#,>$wB#D7#wB#D7#,6+,6+d8+e8+Ly#sq#}f#Sn#5,$5,$,$$,$$yy#yy#xy#xy#xb#xb#vy#vy#:t#:t#:t#vy#wy#vy#8k@ne#7k@bi@bi@7k@8k@Q;@ab%fh#K,@:x@fh#Aq@:x@(P+K,@K,@:x@:x@fh#fh#Aq@#9@xD+T.@yD+&B+0~@M2@s;@s;@Q,+Q,+>K@>K@AM@AM@qZ@pZ@Ls$;u$im$im$!I$)H$)H$)H$:/%K@2T+R,@a=@Z.@9$@~K@e;%VH#,>+!=#--#cb%y!%ev$X^#n'%oS$|F$t)$t)$k!$u)$D&#=S mI@mI@M#@Q#2|$2|$Z`#St#}5#ZP#}5#`P#`P#}5#ll#}5#`P#[w#Y7#!5#W7#A7%A7%`7#`7#`7#{5#{5#{5#Mq#Mq#b($=6%=6%=6%=6%~7%~7%B7%$5#:l#:l#+o#EB#yf#yf#yf#~b$5@$E;%!0%E;%mV#h@$TW$'X#}T#}T#~6+!6+d8+>6+W4#if#{|+{|+a[+a[+)i#)i#M0+-m+/f+%>+p8+|6+36+/F$uy+DM#L=%4*+db%&*+w}@t)%i#@~t@%S 7V #9 Bm #9 >[ 2q B~ eb%1s [G 'Q mp.to.Qe.jF.=7#fb%%]%(y+gb%qv !i.k> ', ;q.yj+3K@hb%ib%Na%WD@jb%QU+QU+QU+QU+5=+5=+OU+OU+$]$$]$Yn ze+ d+<9.w8.8g.be+{! {! ]! ]! ]! be+be+be+be+be+be+be+be+Yt.Yt.i~ i~ Yt.)> ]$@jy.Yt.)> )> )> )> )> )> Yt.{! {! be+be+be+be+be+be+]! {! be+{! 5A.Ea+5A.{! ]! ]! ]! ]! ]! ]! ]! ]! {! {! {! {! {! {! {! {! ,v.Yt.U/@jy.H0@jy.A_@6g+d> ,v.d> ,v.d> ,v.", "$~.$~..h..h.$~.$~.N6 $~.vk +h.vk $~.$~..h.+h.N6 $~.vk +h.+h.vk $~.N6 $~.$~..h..h..h.vk vk vk uk uk uk uk uk uk uk uk uk tk sk sk sk sk tk uk oG.oG.oG.oG.:j.:j.:j.:j.m` :j.oG.uk tk tk tk Rl (j.X)@X)@X)@X)@X)@X)@X)@X)@X)@9%.9%.9%.X)@hY.G6.oG.oG.oG.oG.:j.:j.:j.:j.m` m` m` m` m` m` m` m` m` m` m` m` m` m` m` m` m` -H.R_ -H.:j.oG.:j.GL.Oa%Oa%Oa%Oa%Pa%Pa%ri 8c Y_ M$ m@ !. 8# n+ W% u< '0 #J Xe kb%^2@rs x|@3a%x|@vj$lb%5/+B[@ND+zy zy $o+B[@:,.z7 MW+ye Fv 4u EJ.qy#O#$]<%mb%nb%ob%pb%qb%rb%sb%tb%ub%vb%wb%xb%yb%zb%k @4a+(6$z=@^a+Qi+q)+pF$SR#W+$hd+Nr$Nr$Nr$B0+T@%51%51%X/%51%Qx$z|%b<$0T#$2#$2#&M$#2##;$)E#)E#'6+>6+e8+W4#>f+if#if#)f+)f+~i#id+^H$gw$'$$'$$'$$'$$v.$I`#D7#!w#A7#LL#.K#.K#X3+%2+;|+;|+7[+7[+2u$2u$d %/$%KC$S*%4|$D-%=Z$U>%OV$xL$S[$g@$^X#c($MB#'M#Dc##5#md$VL#kV#2I#yT#kV+Ni+n}@oo@$*+.K.m9+.r 6h Tx Ux Du }f 6E$e6%=H$],$],$],$],$Y;$Z;$}f Z;$Z;$}f }f }f 9~ 9~ !M +x+TL$nJ#ls+XJ$0-%Rz$4w$z+%`J$Uz$Uz$U~$U~$pz#pz#f0$f0$NW$NW$}F$}F$]q$]q$]q$]q$,]$,]$UH#UH#UH#,]$`P$r4$`P$`P$`P$`P$8p$8p$Py$Py$Ts@Ts@Qy$Qy$Qy$]8$cD$cD$A+%i%%i%%i%%Vy$Vy${m${m$/v$/v$CO#ln$]m$ar$'M$y4#_a$Dj$Dj$Dj$a9$Ej$b9$b9$b9$b9$~l$~l$~l$Qm#Qm#mZ@M+#M+#4Z+fX+jX+jX+5$@5$@>K@>K@]K@]K@]K@]K@qZ@qZ@AM@V.@YK+2 @x)+>T@3 @lX+Sm#Sm#%B+yD+&B+%B+}=@}=@|=@|=@}=@ED+Rt+g~+|=@|=@|=@|=@|=@|=@|=@|=@vD+vD+vD+vD+vD+vD+1R+1R+;w+;w+#k+#k+#k+.B+.B+-9@RO@bf#/k+/k+(k+Ng+Ng+Ng+ni+b[+]|+bc#cf#cf#2f#Pg++}#+}#+}#+}#YN#YN#;f+;f+ ;$ ;$,6+,6+C7#C7#gw$)6+|T#|T#|T#|T#|T#|T#1T#1T#tT#tT#X4#X4#X4#X4#X4#X4#^l#ci#M`#qT#qT#qT#M`#M`#M`#7T#aT#8T#7T#qT#8T#S[$c<$+u$Bs$As$;~%%<%(/%;~%#<%;~%(/%%<%&<%P3%8;%KV$$x|$z,$z,$hg$hg$_a%gg$Dq$Fw$O+%u8$9l$9l$d7%52%BZ$w-%0=%Y6%>5%;5%P3%8;%lU$wS$xS$LR$ys$ys$EV$`L$YK$_q$U5%U5%UW$EV$pT$pT$#l$ u$n1$n1$^g$^g$Px$o(%'/%m/%6N$+*%*Z${-%&y${-%{-%*Z$C-% Y$ Y$YW$ Y$ Y$+*%t'%QV$R;%R;%H8%b:%c>%b:%QV$PV$ZW$e$%e$%e$%<(%(}%g_%[!%Zb%K@>K@AM@AM@qZ@pZ@Ls$;u$im$im$!I$)H$)H$)H$2#%{J$(H$_H$s$%Ha%K@!K@R,@0=@K@@9$@w;@u_%VH#,>+!=#WB$cb%Wj$n1#X^#n'%oS$oS$t)$t)$k!$u)$D&#=S mI@mI@es es es es es es es es %r6%AS$tO$}]%b<$b<$67$d($^X#`4#`Y#(X#,M#>M#L_$L_$@Q#KR#iT#`P#*8#`P#/2#/2#*8#ll#ZP#*8#/2#Y7#W7#95%95%B7%`7#`7#`7#{5#{5#Mq#Mq#Mq#b($b($b($b($=6%=6%=6%95%$5#:l#:l#+o#EB#yf#yf#yf#>I$Zn#E;%i@$`n#mV#h@$AV$@K#)6+)6+d8+d8+.I#W4#if#=2+Vg+Vg+Wg+Wg+Zb$Zb$ii+7}@[6+p8+16+)_#mo@8~# c%X^@N-+f5%WQ@*>#Tk$.-#%S 7V 7V CD I0 I0 O#@ze 1q e9 :G QI 1{+mp.!$.d3@.m..c%+c%>.@@c%~n .x.b7 e& 2q@61.x8 d7.NZ@d7$#c%$c%z4$%c%&c%&c%&c%&c%PU+PU+OU+]%@$]$n9$ze+ze+ d+ d+=L 8g.{! {! ]! {! {! be+be+be+be+be+be+be+be+be+Yt.Yt.i~ i~ i~ Yt.)> 6g+Yt.Yt.)> 6g+6g+)> Yt.Yt.{! {! be+be+be+8g.8g.8g.5A.{! be+{! 5A.Ea+]! {! ]! ]! ]! ]! ]! ]! ]! ]! {! {! {! {! {! {! {! {! oA+)D+Ae+A_@PC#A_@Ae+U/@3K@d> 3K@yj+Jb#oA+", "N6 .h.vk vk .h.N6 U5 $~.vk +h.vk $~.$~..h.+h.N6 $~.vk +h.+h.vk $~.N6 $~.$~..h..h..h.vk vk vk tk tk tk tk tk tk tk tk oG.uk uk tk tk uk uk oG.:j.:j.:j.:j.oG.oG.oG.oG.uk uk oG.oG.oG.uk tk Rl (j.X)@X)@X)@X)@X)@X)@X)@9, G6.hY.X)@9%.X)@hY.G6.uk uk oG.oG.:j.:j.m` m` m` m` m` m` m` m` m` m` m` m` m` m` m` m` m` m` :j.l` -H.m` oG.uk oG.Qw.*c%=c%*c%*c%-c%-c%wk != U U V T U+ U+ s& 0: ;c%fA+]W+/`+c%0T.FZ.x9 $<@,c%,c%w[@h9 an p.@e.@p.@,y XG@O&#!b#]F$'c%)c%!c%~c%{c%]c%E2+^c%/c%(c%_c%:c%$]>$&M$&M$D0+A0+z0+)6+>6+>6+.I#W4#V4#V4#!f+!f+~i#Gy#^H$F_$E7#E7#|@$|@$E7#E_$E_$gw$^H$^H$.K#.K#Y3+'|+;|+7[+5[+5[+KC$/$%/$%/$%Y_$T[$4|$D-%=Z$U>%OV$D-%3|$M3$Y4$Jj$Pt#R`#zf##5#UL#dd$Dw#'B$o)+Pi+Ni+n}@|Y+ZF@sO.7O.S-@~J Yk@qI@Fu 9~ 7E$6E$=H$],$],$],$],$Y;$Z;$}f Z;$Z;$}f }f }f 9~ 9~ !M =S TL$nJ#WJ$J_#1c%>v$4w$y[#%Q$TH#2c%k7#k7#.*$q4#f0$f0$NW$NW$}F$}F$]q$]q$]q$]q$,]$,]$UH#UH#UH#,]$`P$r4$`P$`P$`P$`P$8p$8p$Ts@4Z.4Z.4Z.]8$]8$4w+4w+8o@bE$CM#CM#CM#i%%Vy$Vy$dw$/v${m$jm$]m$]m$ln$ln$y4#y4#@d$@d$@d$_a$cN$cN$b9$b9$b9$b9$~l$~l$~l$Qm#Qm#mZ@mZ@M+#fX+fX+jX+5$@jX+jX+)K@)K@!K@!K@!K@!K@AM@AM@V.@V.@YK+2 @%K>%K>%K>%K>%X4#^l#^l#M`#qT#qT#qT#qT#M`#M`#7T#aT#8T#7T#qT#8T#S[$2X#J.$*l$Bs$#<%(/%;~%As$#<%;~%(/%%<%P3%8;%=#%!;%b%Eb%Fb%9c%0c%ac%bc%cc%dc%ec%Mb%fc%gc%hc%hc%ic%jc%|b%kc%lc%mc%nc%oc%Vb%Vb%Vb%#0%pc%Xb%qc%rc%l6%i6%gR$sc%hR$hW$k>$<}$:;$Sr$[}$0b%/a%Rr$Fw$g6$#4$cp$cp$d7%52%52%SV$QR$S1%Y6%f6%=#%8;%ZQ$^:%0)%LR$ys$VK$UW$UW$]b$Q`#tc%x0%.M$'J$kU$;,%#l$ u$Nx$Mx$3~%^g$Sx$Px$o(%{:%NV$+*%*Z$&y$&y$&y${-%*Z${-%*Z$C-% Y$ Y$ Y$+*%t'%c;%>0%uc%>0%QV$c>%QV$r6%*X$PV$<(%e$%<(% Y$$1%vc%o(%Kt#o(%'}#U!%$}%0E#@R$v0#wc#z!$F~$z!$F~$p'$p'$LL#tB#sq#sq#}f#,l#qq#qq#Z-$Z-$.w#yy#xy#8k@ne#ne#wy#/Z$Xv#wc%wc%xc%lg@se@lg@lg@mg@ng@ng@mg@yc%8k@ab%fh#K,@:x@fh#Aq@:x@(P+(P+(P+K,@:x@fh#Aq@qr$&t@~w+&B+&B+yD+mX+mX+3 @3 @Q,+Q,+>K@>K@AM@AM@qZ@pZ@Ls$;u$im$im$!I$)H$)H$)H${J$ K$V~$(H$:H$w_%K@!K@R,@Z.@K@@9$@w;@_P+`&+:-+U_#>-#,7%j&%y!%G)$n'%oS$oS$t)$t)$k!$u)$D&#=S mI@mI@M#M_$M_$zc%P_$]z#/2#/2#[w#^5#^5#`P#ZP#*8#`P#[w#Y7#W7#A7%95%95%`7#{5#{5#{5#Mq#Mq#b($b($b($b($b($b($Mq#Mq#Mq#W7#$5#:l#:l#+o#EB#yf#yf#yf#YL$Zn#E;%i@$4*$mV#h@$/b$+G#e8+>6+.I#W4#if#i0#+w#{f+]f+]f+ex$ex$t|%t|%v'#l0+}a@e[+<|+re#Jq@jh#E!$[Y.o%$Rz$-v$ms+nI@:)@U-@Cn YG@G`+yb U} r| m< tO+Ac%p;%hr '(+SB@<}++,+Bc%H}$Cc%hY+Dc%Ec%b j> },+#a+ Yt.i~ ,v.,v.,v.i~ i~ i~ Yt.)> 6g+6g+)> Yt.i~ {! {! be+be+8g.8g.w8.w8.5A.]! be+{! 5A.5A.]! be+]! ]! ]! ]! ]! ]! ]! ]! {! {! {! {! {! {! {! Lh+PC#Ae+i|$NZ@z1$NZ@i|$KE#T3$Jb#T3$NZ@z1$KE#", "N6 .h.vk vk .h.N6 U5 $~.vk +h.vk $~.$~..h.+h.N6 $~.vk +h.+h.vk $~.N6 $~.$~..h..h..h.vk vk vk sk sk sk sk sk sk sk sk :j.:j.oG.uk uk oG.:j.:j.m` m` m` :j.oG.uk uk uk sk tk oG.:j.:j.oG.uk Rl (j.X)@X)@X)@X)@X)@X)@X)@8v.VW.G6.X)@X)@X)@hY.G6.Tl Tl (j.(j._j._j.n` n` n` n` n` n` n` n` n` n` n` n` m` n` m` m` m` m` oG.m` l` m` uk tk uk Qw.sI.*c%sI.@m$@m$@m$oj oj 3c #% .@ M$ U@ .* ,_ ec }* P5 >!%IA+Cb :C+Jc%X-+4a%kB.y3%lB.E[@h|@.j@Q.u[@.I.wf o.@d.@M`+`G@>l 1v@sK@]-#8D$Kc%Lc%Mc%Nc%Oc%Pc%Qc%Rc%Sc%Tc%Uc%Vc%Wc%Xc%Q!#~v#%I@<^$c~+}1@Lg+Kg+*f+(/$$2+7[+w'$U%$|@$)$$0,$x<%k}%vT$xL$/$%d %<=%3I#2I#B0+!6+)6+d8+d8+>6+id+W4#'l#~i#*2+Gy#^H$F_$E_$8,$A0+C0+C0+C0+B0+Z3+;6+;6+;6+.K#+K#Y3+'|+;|+7[+5[+hD$KC$KC$KC$Y_$e<$T[$4|$q1$OV$CO$CO$tO$DM$3|$yi$@l$Y4$`4#J`#6T#We$:!%[!%{-%S'$~k@Nd+j-$Yc%Zc%)N.MM.Tj $A@%A@oI@-! (0@l!$~@$Y;$],$],$],$],$Y;$Z;$}f Z;$Z;$}f }f }f 9~ !M !M =S u[$bL#WJ$J_#1c%>v$4w$5w$n>#BA$9r$Zo$Zo$`P$r4$eN$eN$)Z#)Z#}F$Zo$]q$]q$]q$]q$,]$,]$UH#UH#UH#,]$`P$`P$`P$`P$`P$`P$8p$8p$4Z.4Z.`o$]8$4w+4w+4w+wy+1S#1S#=7$Vk$CM#CM#Vy$Vy$Hx$/v$jm$*c$ar$]m$ln$CO#_a$@d$qw$&6$qw$Ej$cN$hU$b9$b9$b9$b9$b9$b9$b9$~l$Xx$| @| @4Z+jX+jX+>K@>K@,K@,K@)K@]K@!K@!K@DD+w;@!K@!K@!K@w;@w;@w;@lX+lX+/w+*>+t<@t<@O)@ny+ny+ny+ED+}=@{k@6o@{k@}=@Rt+Il+|=@|=@|=@|=@|=@|=@|=@|=@vD+vD+vD+vD+vD+vD+1R+1R+-w+-w+.B+fy+fy+vr+vr+^/+RO@bf#(k+(k+(k+Ng+b[+b[+g0#g0#g0#=l#XF#]i#Qg+fi+oB#oB#WF#lc#Xl+ @#B)$fd+-f+`-$d8+d8+&2+`3+~6+~6+Y3+f8$Y1#d0$d0$Y1#f($Z1# 2#.2#.2#.2#K>%K>%K>%X4#7d$^l#4*$qT#&Z#qT#&Z#qT#($$7T#/$$8T#mV#qT#}X#S[$9X##Z#`c%@Z#Ci$'l$Mj$+Z#Ci$Ci$(/%%<%P3%8;%=#%vO$d%,d%'d%)d%!d%~d%{d%]d%cc%ec%^d%/d%(d%_d%:d%jc%jc%za%&9%Hl$nc%nc%%$p$@Z$kU$;,%XQ$ u$+K$@l$yi$67$^g$^g$3~%Zt$OV$C-%xL$&y$KC$&y$@*%*Z$KC$&y$xL$C-%OV$C-%D-%+*%[|%,/+5d%,/+YV$n%%[|%BM$[|%YV$5N$5N$CO$K=%K=%NV$p(%Jt#p(%&o#(O#$}%0E#X:%1@$WP$A)$~/$A)$~/$o'$o'$ML#'E#sq#|f#,l#,l#qq#oq#Y-$Z-$.w#yy#xy#8k@ne#:G+vy#/Z$Xv#Xv#Xv#xc%lg@se@6d%V5%mg@mg@7d%7d%yc%Y5%8d%eh# N+7X+eh#Aq@:x@(P+c&@c&@G6@H6@*9@)~#,'$=9@S##M2@0~@#a@mX+0G+3 @3 @Q,+Q,+>K@>K@AM@AM@qZ@pZ@~l$b9$!l$!l$!I$)H$)H$)H$ K$>J$;M$V~$:H$s$%:H$)I$zM@jX+5$@5$@4G+5&@5&@R,+yM@R,+4G+jX+E@@J #J #*&#z(%`b%!_%_^$V.@!K@Q)@S##Z.@e^@ny+!K@gX+<{#~I$aX#67@R1%9d%in$G)$8E$yd$6E$l!$kQ w~$!M =S =S R-$mI@}f }f }f }f }f }f }f }f f+ G#mc#mc#+*$nd+dx$bd%cd%cd%as#.>#3a@.@#H$+}|+Z.+ c%=W+H4%R^$(T#pV$CP$Pe >8 5h 9 Q9 =K.*K.E%.~V.Ue 30 )} }'%ZU+RI <7+8'.RZ Re.h1.>.@dd%ed%C+ F$ D. %n J; Rx. Z `Y .s.!3.Y1.k}+PF+2&$;~@2&$;~@2&$L8@%.@L8@7g.VS+'> 15+wn.15+wn.wn.{! {! ]! 5A.]! be+w8.gA 8g.8g.8g.8g.8g.8g.8g.8g.)> Yt.i~ ,v.ZY ZY ZY ZY i~ Yt.)> ]$@]$@)> Yt.i~ {! {! be+be+8g.w8.w8.w8.Ea+]! be+{! 5A.5A.]! be+]! ]! ]! ]! ]! ]! ]! ]! {! {! {! {! {! {! {! Lh+fd%PC#KE#Jb#3K@Jb#NZ@KE#Jb#Jb#NZ@NZ@KE#Ae+", "Tl Tl Tl Tl Tl Tl Tl (j.Tl Rl Pl Pl Ql Rl Tl .h..h..h..h..h..h..h..h.N6 $~.$~..h.vk vk +h.+h.uk uk uk tk tk sk sk sk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk :j.:j.:j.:j.:j.:j.:j._j.Tl hY.G6.hY.|{.%x+%x+9%.hY.hY.hY.hY.hY.hY.hY.hY.VW.9, hY.X)@9%.9%.9%.9%.9%.X)@hY.G6.G6.hY.X)@9%.G6.G6.n` 9, WW.1% 1% 1% sk tk le ke ke le je xn.HO.HO.HO.le le le le le 2b ~% |% ~% ~% ~% ~% &% !1.q& h> A# v@ gd%': eb%}a 0@|C@pq pq hd%id%:c 6e -2@6|@Vu L5 Xu ~8 $x |7 )y nt@[L.DJ.*>#jd%kd%ld%md%nd%#}+as+od%pd%qd%rd%sd%td%ud%@8$vd%Et+|P#wb#V #Z8@v^@h($I2$t'%@2#^$$z0#[l#N0#wd%3l#sv$xd%Ig+Ig+Jg+-|+Nr$$2+Z3+Z3+qD$F_$gw$zC$C7#!w#C7#C7#)6+)6+}T#}T#A0+hd+X3+$2+Tx$In$W+$Kg+*f+RR#7[+#;$#;$w'$D0+D0+#2##2#$2#$2#b<$67$,6$xn$us$us$`t$`t$ e{@sG $4@TT@yd%zd%u1$=E =E =E =E =E Y;$Y;$-P -P 1i 1i 1i !M u)$u)$-z$TL$nJ#E_#X6%YN+Vk#{q$z+%`J$Uz$Uz$eN$eN$pz#pz#d.%o]+`P$aX#|x@<^%8p$|S#<^%.v@.v@/d$/d$.v@.v@<^%|S#|S#|S#|S#8p$.v@]v$R2@]8$]8$]8$~m$~m$~m$~m$~m$cD$cD$A+%A+%A+%A+%Gx$Gx$/v$/v${m${m$ln$ln$]m$=c$Ej$b8$b8$b8$b8$b8$b8$b8$Ej$Ej$Ej$Ej$Ej$Ej$Ej$b8$zM@AM@AM@AM@AM@AM@'K@'K@CO@CO@CO@SQ@SQ@SQ@X/$,T@t;@t;@s;@Q)@P)@>B+8&@9$@9=@7&@Ad%Ad%7%$h %h %7%$P,@L)@<&@L)@<&@L)@L)@L)@tr+tr+ED+ED+ED+ED+ED+ED+vD+vD+vD+vD+vD+vD+1R+1R+ 3%gy+#k+vr+R0+R0+fy+-9@RO@RO@RO@=m+:k+:k+_k+_k+ZA+ZA+3&@3&@/+@/+@(+@(+@ir+]|+3&@]|+=g$6e@Pg+Rn#:i#df#;f+-f+-f+.I#In$ ;$.K#.K#Y3+Y3+'|+'|+'|+>|+,|+'X#'X#'X#)X#)X#)X#m@$4*$4*$g,%($$Bd%&Z#0<$&Z#Cd%4*$0<$/$$_N$f@$_N$2X#f<$'_+6-%>_+>_+lE$zD$=X$,_+zD$CM$RR$FS$QP$FS$RR$[|%PV$|]%*Y$e-%l^%*Y$Q`$zZ$M%%;&%M%%yZ$@4$h6$M%%l*%X+%]Z$E.%g]%h]%&&%J^%;&%nY$L5%M5%+X$+X$Dd%p8%i#%#7%+d%hR$N9%sc%sc%'U$Ea%~@%w0%=0%=0%=0%w0%gR$'V$!@%#d%'U$Ed%b0%Fd%Gd%Hd%Id%Jd%Kd%Ld%+0%Md%Nd%1L$Od%Nb%Pd%aW$Qd%Rd%Sd%_d%OT$Td%Ud%Vd%Wd%Xd%Vb%Yd%Zd%Zd%`d% e%.e%+e%@e%u7%#e%R5%h`$2P$L`$<;$Q<$5S$3)%z,$[}$MU$MU$Qr$t9$u8$E'%SV$42%13%@,%wU$$e%h4%S{%%e%&e%k{%P2%{{%O^%*O$(/%(/%MP$kr$zs$|q$|q$}q$xs$ys$@{%G+%+>%ir$VK$kU$ys$}q$V_$zs$jr$zs$U_$tO$xL$T[$xL$tO$OV$q1$@*%T[$xL$4|$D-%PP$CO$uO$5N$Zt$6N$tO$OV$uO$e%8d%ab%3N#Y>$3L#4L#gY#Y|#X<#5~#pg@,e%lb#W6$!(%r!%r;@R,@R,@P)@mq@x;@cB@R)@!K@)K@>K@2 @2 @YK+jX+WK+_P+iX+iX+lF$lF$WL$WL$ K$ K$ K$ K$'e%'e%'e%_H$R,+:P+T,@kX+kX+T,@:P+zI+T,@T,@T,@T,@T,@T,@T,@>K@AM@-L$'K@]K@Q)@M2@S##'w+}=@}=@mX++M~$o=$$g+lh#u[$4z+)M dP@c.#vR@vR@6$d($6+2i#Jy#kf#!w#!w#)w#Jy#d8+QL#/6+n8+|/#ii+'B+tD+n7#}e%H5$p=#!}@|e%)%@1e%[[%w+%2e%3e%x! 1f f1#@A@8^ /k@d'.;<@%<@;W@{~.` +hF.1{+HL La%dY+dY+n3%Y_+4e%%Q b$ .@ 34 [].d7.x8..s.9Y+;~ +d+/D.P~ ^b+6j+{! )g@{! ZW+{! %.@Lh+%.@x8.vv+uq.l`. F.t=+5e%PF+;~ 6g+6g+)> Yt.Yt.i~ i~ 6g+,v.O* O* ,v.Yt.Yt.,v.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.,v.,v.,v.i~ Yt.)> )> )> be+]! Ea+5A.{! be+{! 5A.]! ]! ]! ]! ]! ]! ]! ]! Ea+5A.5A.]! {! {! be+be+be+{! {! {! ]! ]! 5A.5A..s.y{ y{ x8.9Y+9Y+Lh+Lh+'g@Lh+9Y+x8.x8.9Y+", "Tl Tl Tl Tl Tl Tl Tl Tl Rl Ql Pl Ql Rl Tl (j.vk vk vk .h..h..h..h..h..h..h..h..h..h.vk vk vk uk uk uk tk tk tk sk sk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk :j.:j.:j.:j.:j.:j.:j._j.Tl hY.G6.hY.|{.%x+|{.9%.hY.hY.hY.hY.hY.hY.hY.hY.dD.dD.%j.Su$%j.%j.dD.Vh.Su$%j.dD.Vh.Vh.dD.%j.Su$hY.hY.G6.G6.9, 9, WW.WW.uk oG.ke he he ke le ie :j.:j.:j.:j.:j.:j.:j.:j.l` l` l` l` l` l` l` WW.WW.9, Y6. n k3 &@ 6e%7e% I+-m _b c{ ^d@2u@OM$5R.#7 ;4@;4@=4@ { dj SU..I.J5 an /( B( Ch a3 Ii bk 8e%9e%0e%ae%9W.be%ce%de%ee%DB+fe%ge%he%ie%je%ke%le%me%hD+ay+/P+[R+Y4@Ld$%.%+2#VY#RL#4l#ne%oe%Mc#-|+^]+*/+=f+w:+cO$hd+!6+!6+F_$F_$gw$p'$zC$u0#u0#I`#z0+}T#A0+B0+{6+Nr$YM$m%$*_+*f+h8$h8$dE#]]+RR#7[+#;$w'$w'$D0+D0+#2##2#$2#$2#9T#67$,6$xn$us$us$B+8&@8&@7&@7&@g %g %%@%%@%%@%h %*9@<&@<&@<&@<&@<&@L)@L)@tr+tr+ED+ED+ED+ED+ED+ED+vD+vD+vD+vD+vD+vD+1R+1R+_c@gy+#k+vr+R0+vr+fy+-9@sD+=m+=m+:k+:k+]_+_k+_k+ZA+ZA+3&@3&@/+@/+@(+@(+@Kb+mi+b[+mi+=g$=g$Pg+Qg+h0#h0#df#Nn#-f+-f+;f+;f+In$.K#X3+X3+'|+'|+'|+'|+,|+,|+'X#'X#'X#'X#)X#)X#O3%g,%g,%Bd%Bd%0<$0<$0<$te%g,%0<${b$_N$_N$_N$c<$H2$Ig+c % 5$'_+wL$lE$S`$lK$zD$BM$AS$RR$RR$k_%AS$o!%QV$ue%6 %CZ$CZ$Q`$E#%N`$j{%o7$g6$@4$V'$gg$;5$#.%[`$E.%X+%A~%A~%g]%Z&%;&%nY$L5%M5%+X$+X$Dd%!U$ d%i7%#7%Yb%hR$gR$fQ$i6%w0%w0%{@%*0%i`$i`$*0%b9%ve%-d%b0%a0%we%[P$r7%xe%ye%ze%+0%Ae%Be%Pd%3L$Ce%/d%Pd%De%Ee%Fe%3I$*0$aR$*0$aQ$Ge%He%Ie%Je%UN$Ke% e%Le%Le%Le%Me%Ne%Oe%Pe%u7%;7%o6%h`$q6%L`$<;$Q<$5S$3)%z,$j>$MU$MU$h6$t9$E'%E'%SV$U1%R|%zT$Qe%$e%Re%z$%S{%6]%S{%6]%{{%=O$O^%O^%$O$*O$MP$kr$kr$1q$}q$xs$ys$>,%G+%G+%+>%+>%G+%ir$v/%v/%(N$OP$(N$V_$m%%4|$e<$T[$q1$tO$4|$T[$e<$T[$4|$q1$tO$PP$PP$iw$4^%5^%ss$yS$iw$fr$j]%[N$!;%!;%KV$*#%ZQ$&<%^:%J'%Zt$V!%21%^!%=}#-2#X/%U%$E_$_O#8,$uq#!w#:O#-Q#^ %d8+>6+;f+hf#,l#,l#Tn#Tn#[t#[t#[t#[t#ne#ne#ne#Q;@Wv#Wv#7h$7h$NK+NK+jg@jg@fK@re@=e%=e%]O$^O$Se%;e%Te%=,$3,$3,$Y>$Y>$3L#Q6#Q6#6~#Dy$gx$W6$Ue%Ve%!(%k#$k#$k#$k#$mq@mq@x;@x;@R)@!K@)K@>K@2 @2 @YK+)K@4G+2R+iX+iX+9e#9e#WL$WL$ K$ K$ K$ K$'e%'e%'e%_H$2 @:P+T,@kX+kX+T,@:P+=>+T,@T,@T,@T,@T,@T,@T,@7=@zM@zM@)K@Q)@R,@S##,w+,w+)w+xD+mX+6=@CI+oZ@BT$>>+%J$1w$5r$xJ+u[$4z+dP@vR@^A ^Y@-! z#H~$#I#~>$pd$&w#Pj$@}#-f+'l#2i#r0#OL#zC$u0#D7#+I#&2+`-$6e@_k+~k++m+Tn+=:#J4#WI+QX.yF@%>#+{@WJ.;f%>f%,f%3e%7K#H5@Nx@+W@i'#:1 s'+ x F*+'f%ie+wo.Yf.T*+5j.dY+xu.ED Dc@)f%!f%Ic+#.+8c O9.P~ /D.PF++d+P~ PF+^b+^b+PF+PF+^b+;~ 13+80+13+13+{! {! Lh+Lh+PF+/D.S}%&0+~f%{f%]f%^f%U/@6g+)> )> Yt.Yt.i~ i~ 6g+i~ KB KB ,v.Yt.Yt.,v.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.i~ i~ i~ i~ Yt.Yt.Yt.Yt.be+{! 5A.]! be+8g.{! 5A.]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! {! {! be+be+be+8g.8g.be+be+be+{! {! {! 8g.8g.8g.be+be+{! {! {! ]! {! be+8g.8g.be+", "Ql Ql Ql Ql Ql Ql Ql Ql Ql Pl Ql Ql Tl (j._j.+h.+h.vk vk .h.$~.$~.$~.vk vk vk .h..h..h..h..h.oG.oG.uk uk tk tk tk sk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk :j.:j.:j.:j.:j.:j.:j._j.Tl X)@G6.X)@|{.%x+|{.X)@hY.hY.hY.hY.hY.hY.hY.hY.Su$Su$Su$Su$%j.dD.is@x5.Su$%j.dD.Vh.Vh.dD.%j.Su$X)@X)@hY.hY.hY.G6.n` n` :j.:j.he 2b 2b he ke ke m` m` m` m` m` m` m` m` m` m` m` m` m` m` m` n` WW.VW.1% O~.&- R% [@ /f%hW+gF+k)%|- VG@Jr$+T.(f%DM.Jo z,#_f%;4@rq TM._B++;@an bv /( F%@j1 I^ kB IP#48%58%68%:f%@1h+z;$lt$`6@I#$6[+51%w<%0f%af%N1%Tx$yT#yT#Kg+m%$Es$7q$>6+e8+A7#C7#zC$zC$p'$A!$p'$)6+%2+hd+Nr$3[+W3+Bb+B4%*/+1H$1H$v^@v^@Tl$Tl$:C#(/$4[+4[+;t$hD$hD$d %d %KC$KC$e<$T[$DM$qO$:N$:N$us$ss$xn$Zt$4|$xL$xL$@*% :$z:+%.%(]+(]+rh$7l$DZ$X0@]z@T!%&%@bf%cf%3I.rP$D(@m>@Y~#EN ;P x~$df%PO$u1$Jv =E =E =E =E Y;$Y;$-P -P 1i 1i 7E$u)$u)$u)$8E$8E$bL#8v#X6%YN+Vk#w[#z+%`J$Uz$Uz$eN$eN$pz#pz#e.%|S#8p$<^%<^%<^%<^%8p$.v@.v@/d$|)#|)#/d$.v@.v@<^%<^%8p$8p$8p$<^%4Z.4Z.]8$]8$~m$~m$~m$~m$~m$~m$dD$dD$i%%i%%i%%i%%Vy$Vy$/v$/v${m${m$ln$ln$]m$=c$cN$cN$bq$cN$cN$cN$cN$cN$Ej$Ej$Ej$Ej$Ej$Ej$b8$b8$9e#jX+jX+jX+jX+jX+jX+jX+>K@>K@>K@>K@>K@>K@>K@T,@,}@_s#{k#{k#< @6=@9G+9G+mq@mq@6&@6&@}`$}`$}`$Ad%P,@L)@L)@L)@L)@L)@L)@L)@ED+ED+ED+ED+ED+ED+ED+ED+vD+vD+vD+vD+vD+vD+1R+1R+gy+>w+#k+fy+vr+vr+fy+-9@sD+=m+:k+:k+:k+]_+_k+_k+ZA+ZA+3&@3&@/+@/+@(+@(+@Kb+mi+b[+mi+=g$=g$Pg+Qg+Qg+h0#df#_+Hg+wL$'_+'_+LC$=Z$6-%zD$zD$rU$BM$CM$CM$EM$rU$o!%c;%rF$ue%qY$qY$E#%E#%/V$yZ$g6$h6$@4$V'$6f$W'$~B$:+%d=%d=%l*%l*%F#%m*%i6$1;%~U$~V$p8%p8%p8%!U$ef%ff%i7%Yb%gR$fQ$i6%G8%b9%b9%,V$`N$M$$M$$M$$`N$R5%gf%}P$k6%hf%if%jf%@0%kf%lf%mf%nf%of%of%pf%qf%rf%sf%tf%uf%vf%wf%xf%6J$yf%zf%Af%Ge%Bf%Cf%@0%Df%Ef%BH$^W$Ff%Me%Me%Gf%$0%u7%;7%o6%9Z$p6%H$%i-%1M$5S$A,$.j$z,$_a%_a%g6$t9$E'%E'%SV$42%DS$-&%Qe%Hf%If%K%%E&%Jf%6]%%e%&e%9=%;5%;5%Q3%O^%%<%;~%kr$1q$U_$V_$jr$LP$YQ$YQ$YQ$YQ$YQ$jr$1q$1q$kr$MP$kr$V_$z[%T[$Y_$e<$4|$q1$T[$Y_$Y_$e<$e<$T[$4|$q1$q1$ss$@5%#5%{:%m/%/u#%Z$H+%zS$UP$UP$j]%>$8,$F_$)w#)w#qD$^ %i8+>6+W4#-l#hf#Rn#Rn#Tn#Tn#[t#[t#}t#}t#ne#ne#Q;@Q;@_t#2N#Wv#Wv#Wv#7h$YM+YM+qe@jg@Kf%kg@ZH@ZH@Lf%Mf%:t#y)$@p$@p$3P#3N#3k#u!$Nf%)~#:^#mb#9&@Ad%8#%/t#^K@^K@^K@^K@mq@mq@x;@x;@R)@!K@)K@>K@2 @2 @YK+)K@4G+4G+5$@5$@zM@zM@pZ@pZ@)I$)I$_H$_H$(H$(H$Of%(H$2 @:P+T,@T,@T,@T,@:P+=>+T,@T,@T,@T,@T,@T,@T,@7=@zM@zM@)K@Q)@R,@T##,w+hy+)w+xD+mX+6=@5&@BO@Wx$>>+NJ@!q$Bo+jh$Pf%HB$;P Eu ^Y@^Y@-! z#H~$#K#PP#!c$pd$3t#D_$In$A7#3i#sc#nf#p'$o'$F_$>6+r:+>k+_k+-9@Xn+| %3T+0r+Xf%Yf%#R$^M#,/#~Q#)f#Zf%>f%`f%k;%lI#-C+4C VE N^ /T.@3# g%eQ. F 3j.Tv.6'.;h.dY+:i.3j.p]%.g%+g%4D+J# &) 6}%PF+PF+PF+^b+Y@$PF+/D./D.PF+^b++d++d+Lh+{! 13+13+13+{! {! Lh+Lh+^b+PF+@g%5e%#g%#g%^f%]1%)D+)> )> Yt.Yt.Yt.i~ i~ )> i~ ZY ZY i~ Yt.Yt.i~ Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.i~ i~ i~ i~ w8.be+]! {! 8g.w8.be+{! ]! ]! ]! ]! ]! ]! ]! ]! {! {! {! be+be+8g.8g.8g.w8.w8.w8.8g.8g.be+be+be+be+be+be+{! {! ]! ]! ]! ]! {! be+8g.8g.be+", "Ql Ql Ql Ql Ql Ql Ql fN.Pl Pl Ql Rl (j._j._j.+h.+h.vk vk .h.$~.N6 N6 +h.+h.vk vk .h.$~.$~.N6 oG.oG.oG.uk uk tk tk tk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk :j.:j.:j.:j.:j.:j.:j._j.Rl X)@hY.X)@|{.%x+9%.X)@hY.hY.hY.hY.hY.hY.hY.hY.%j.%j.Su$Su$%j.dD.Vh.is@Su$%j.dD.Vh.Vh.dD.%j.Su$9%.9%.X)@X)@hY.hY._j.n` m` l` 2b 2b 2b 2b 2b he l` l` l` l` l` l` l` l` m` m` m` m` m` m` m` n` _j.G6.n` Lv.4% o^ U+ E= $g%%g%cU+!l.9j._<@!F$^<@4R.4R.rU.Jo 5d U7 -2@ii g{@RM.)z n.@n.@2q 2q nT.LR.M[$ks+&g%*g%=g%-g%;g%>g%,g%'g%2J+ER+)g%!g%~g%{g%]g%$|%d4+8(@y6+Od+X5+WH@X4@=_+06%-Q#A!$Q{$nD$H#$Lg+X1#`-$`-$ ;$.G#.G#ML#LL#at#t0#zC$p'$^g%DC$!6+gd+(/$s0+Bb+,&% *%f3%!-%'0%S'$,i$3(@y6@gn$v^@=_+;t$B:+B:+2u$2u$d %d %KC$KC$e<$T[$DM$qO$:N$tO$yS$2v$NV$6N$xL${-%{-%&y$6|$ 5$(]+_]+_]+9g$/g%U'$/}${z@z6+A|+-`+q]+(g%|-+6<$h>#{)#I5@lQ xR@_g%PO$u1$Jv =E =E =E =E Y;$Y;$-P -P 1i 1i 7E$u)$u)$u)$8E$8E$bL#8v##{@:g%a]@w[#z+%`J$Uz$Uz$eN$eN$pz#pz#|S#|S#8p$<^%<^%<^%<^%<^%.v@/d$/d$|)#|)#/d$/d$.v@.v@.v@<^%8p$8p$8p$Ts@Ts@]8$]8$~m$~m$~m$~m$~m$~m$dD$dD$i%%i%%i%%i%%Vy$Vy$/v$/v${m${m$ln$ln$]m$=c$^m$^m$^m$^m$^m$cN$cN$cN$Ej$Ej$Ej$b8$b8$!l$!l$!k#fX+eX+fX+eX+fX+eX+fX+eX+gX+[ @5$@[ @5$@[ @5$@[ @+w+;w+#k+fy+fy+fy+fy+-9@]/+RO@=m+=m+=m+=m+1$@1$@ZA+ZA+3&@3&@/+@/+@(+@(+@Kb+mi+b[+mi+=g$=g$Pg+Qg+Qg+h0#df#%O3%O3%h@$h@$S_$S_$S_$O3%h@$7X#T_$U_$V_$V_$yL$S`$[f$wL$'_+'_+{`$*X$lE$rU$rU$rU$rU$EM$yL$yL$lK$o!%r6%B-%rF$mW$tX$,k$,k$0l$N`$h6$h6$V'$V'$gg$;5$~B$:+%d=%A~%l*%l*%M%%e=%1;%1;%}g%A$%q8%!U$p8%G$%ef%ff%i7%Ea%gR$b9% +%|g% +%,V$a9%m6%;7%;7%;7%;7%#e%#e%^a%j`$xM$1g%2g%3g%4g%Pb%5g%6g%7g%8g%9g%0g%ag%%V$%U$bg%/2$cg%dg%%0$eg%fg%gg%za%hg%ig%Vb%s0%cR$BH$^W$Ff%jg%Ne%kg%.e%lg%;7%a9%lY$p6%T5%L`$i-%O$%,@%9b%.j$^Y$^Y$g6$#4$t9$ X$42%42%DS$-&%Qe%Hf%Jf%mg%,5%E&%6]%ng%&e%U1%Y6%f6%}3%Q3%&<%(/%kr$1q$T_$.Z#U_$zs$jr$LP$/:%/:%/:%jr$1q$1q$kr$><%MP$N)%DM$e<$X_$Y_$T[$4|$T[$Y_$Y_$Y_$e<$e<$T[$T[$4|$}]%@5%og%D5%(u#/u#&Z$H+%H+%H+%BO$;#%5N$YV$[|%[|%K=%VP$^!%^!%-}#51%X/%X/%_O#I`#E_$gw$NP#NP#F_$i8+B7#W4#>f+hf#,l#1f#1f#Tn#oB#yy#yy# w# w#xb#xb#jV@jV@1N#1N#Wv#Wv#Wv#Wv#YM+YM+jg@pg%qg%Kf%kg@kg@rg%Mf%vy#5=@[a@[a@|t#=E#3k#qr$sg%,'$a&@a&@u!%u!%8&@8V@I@@I@@8$@8$@^K@mq@x;@DD+R)@!K@)K@>K@2 @2 @YK+)K@YK+4G+>K@5$@AM@zM@qZ@pZ@-L$)I$$K$_H$>L$(H$tg%>L$YK+:P+:P+T,@T,@:P+:P+:P+T,@T,@T,@T,@T,@T,@T,@T,@pZ@zM@)K@Q)@P)@6o@hy+@B+#B+xD+mX+6=@5&@BO@Wx$Ei$Wt+-{#L@%SB$xJ+ -#!M E'$vR@^Y@-! 6+!l#lf#sc#of#0_%$`$)|+/6+Rl+e~+%>+,i#-.$> +b=#yg%zg%Ag%Bg%%N$GX$~-#6r$ n+_8%Cu+=$#vK@l8 1/ &7 Qd @3#e+%;.@@B Cg%R[%os.Vd.Dg%Eg%[%%Fg%!^+O'%gC %h Xl uq.PF+PF+uq. F.P~ PF++d+/D.uq.P~ Y@$3&$+d+x8.{! 13+13+13+{! {! Lh+Lh++d+^b+]1%@g%^f%^f%^f%@g%oA+Yt.Yt.Yt.Yt.Yt.i~ i~ Yt.i~ i~ i~ i~ Yt.Yt.i~ Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.)> )> )> Yt.i~ ,v.,v.,v.w8.be+{! be+w8.gA 8g.{! ]! ]! ]! ]! ]! ]! ]! ]! be+8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.be+be+{! {! {! ]! ]! ]! ]! ]! ]! ]! {! {! be+be+be+be+", "sk sk sk sk sk sk sk lC lC !B tk uk oG.oG.:j.+h.vk vk vk .h.$~.$~.$~.+h.+h.vk vk .h.$~.$~.N6 :j.:j.oG.oG.uk uk tk tk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk :j.:j.:j.:j.:j.:j.:j._j.Ql 9%.hY.X)@|{.|{.9%.hY.hY.hY.hY.hY.hY.hY.hY.hY.is@Vh.dD.%j.Su$Su$%j.%j.Su$%j.dD.Vh.Vh.dD.%j.Su$9%.9%.X)@X)@hY.hY._j.n` -H.l` 2b 2b 2b 2b 2b ;_ l` l` l` l` l` l` l` l` m` m` m` m` m` m` m` n` AX$ts._j.@n d( L) W+ S| F[ Gg%j{.Hg%Ig%=q$lr Jg%.;%;L@^;#@7 z,#W}%8|@s~+Xb+4k+f_@l.@/z nT.@#)%L@%Kg%Lg%Mg%Ng%Og%x;%Pg%Qg%Rg%Sg%Tg%Ug%Vg%Wg%Xg%s|+c4+,h#_+@E6@x=@D4@4G#v0+J0+Hb+Yg%!|+/6+ed+Nn#f+>f+>f+ML#LL#!l#p&%p'$o'$Zg%pD$gd+-k+-Z#v:+1H$ h$'x$'0%`g%Jm$Jm$s{%aC$R'$U>$D4@Bb+cE#cE#cE#J#%tv$sv$sv$<=%<=%S*%@*%4|$q1$tO$tO$~`$>#%YW$C-%*Z$'&%'_+Ab+-/+xd%9g$Md$ h% h%.h%)o$Z!$iF@=E+$#@%<++h%@h%-1@wC$NM.g9%CR@;S Ad$#h%$h%u1$Jv =E =E =E =E Y;$Y;$-P -P 1i 1i 7E$u)$u)$u)$ -# -#bL#./##{@:g%a]@w[#z+%`J$Uz$Uz$eN$eN$pz#pz#8p$8p$8p$8p$<^%.v@.v@/d$/d$/d$|)#|)#|)#|)#/d$/d$.v@.v@<^%8p$8p$8p$Ts@Ts@]8$]8$~m$~m$~m$~m$~m$~m$bE$bE$CM#CM#CM#CM#Zz$Zz$/v$/v${m${m$ln$ln$]m$]m$Cj$Cj$Cj$Cj$Cj$^m$cN$cN$b8$b8$b8$!l$!l$WL$WL$8e#} @8^@oi$8^@oi$8^@oi$8^@o7#;}@[ @;}@[ @;}@[ @;}@%h%&h%%h%*h%=h%=h%7~@2G+=>+=>+%O3%O3%h@$h@$S_$S_$S_$S_$S_$7X#T_$.Z#V_$zs$EM$6-%[f$wL$ 5$'_+LC$*X$lE$rU$rU$rU$zD$yL$yL$yL$zD$o!%c;%B-%rF$mW$tX$E#%E#%0l$N`$g6$h6$@4$@4$MU$+4$fg$_+%N%%N%%zh$zh$+4$_T$]X$e#%e#%)W$-h%G$%;h%/9%ff%Ud$>h%,h%eQ$l6%k6%4S$v0%4S$rc%t7%>8%%0%+e%+e%C %'h%'h%uJ$zZ#[X$)h%bR$^P$!h%~h%{h%]h%^h%/h%>^#(h%_h%:h%$k>$5Z$]X$o7$#4$O+% X$42%42%DS$-&%@,%ah%j*%`6%bh%ch%dh%u,%9=%k*%S1%S1%f6%>5%P3%&<%(/%(/%T_$T_$T_$.Z#U_$zs$jr$jr$/:%zs$U_$U_$jr$LP$LP$N)%DM$e<$X_$Y_$T[$4|$T[$Y_$Y_$Y_$Y_$e<$e<$e<$T[$VP$eh%fh%gh%hh%ih%jh%&Z$t.%t.%e:%e:%>#%YW$ Y$C-%C-%%/%&M$3I#:z$2I#D0+T@%C0+wB#!6+!6+f8+.G#d8+&2+.G#>f+ G#Rn#1f#1f#1f#oB#oB#yy# w# w# w#jV@jV@jV@jV@/P+tI+`M+`M+`M+`M+7h$7h$NK+kh%kh%qg%8i@8i@lh%Xv# w##l#Pn#4=@f0#f0#Y+$+B+b]%&t@{k@{k@a=@qt$O)@8&@I@@I@@8$@8$@^K@mq@x;@DD+R)@!K@)K@>K@2 @2 @YK+)K@:P+:P+!K@>K@]K@)K@>p$qZ@#@%.@%I.%-L$!_%>L$=@%FO$>K@:P+:P+:P+:P+:P+:P+T,@T,@T,@T,@T,@T,@T,@T,@T,@pZ@zM@)K@Q)@O)@|=@@B+#B+#B+)w+mX+6=@5&@BO@Wx$Ei$)2+K+@Qz$4G$jh$u[$D&#}f vR@vR@-! #zX@]L$F(@n8 8O.QU.aR+3=.P>+wh%XR 09.xh%yh%zh%{I@N'#Ah%]I@Bh%e/%Ch%Dh%`@ q` oA+^b+PF+P~ F. F.uq./D.+d+/D.uq.P~ Y@$3&$+d+x8.{! {! {! {! {! {! Lh+Lh++d++d+Fc%]1%]1%@g%5e%/D.yj+i~ i~ i~ i~ i~ Yt.Yt.i~ Yt.Yt.Yt.Yt.i~ i~ Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.)> )> )> Yt.i~ ,v.,v.,v.w8.be+{! be+w8.gA 8g.{! ]! ]! ]! ]! ]! ]! ]! ]! 8g.8g.8g.8g.8g.8g.8g.be+be+be+{! {! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! {! be+be+{! {! {! {! ", "sk sk sk sk sk sk sk lC !B sk uk uk oG.uk uk .h..h..h..h..h..h..h..h.vk vk vk .h..h..h..h..h.:j.:j.:j.oG.oG.uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk :j.:j.:j.:j.:j.:j.:j.:j.Ql 9%.X)@X)@|{.|{.X)@G6.hY.hY.hY.hY.hY.hY.hY.hY.x5.is@dD.%j.Su$Su$Su$Su$Su$%j.dD.Vh.Vh.dD.%j.Su$X)@X)@hY.hY.hY.G6.n` n` -H.l` 2b he he 2b 2b ;_ m` m` m` m` m` m` m` m` :j.:j.:j.:j.:j.:j.:j.:j.jI.xx.n` Rl vk &% i> w 90+N; U_+{0$MC#X9 Eh%Rn oh@;(#nS@Fh%#7 #7 nL.>h@fk@Yt+6P+aR+/~.Xh BL.DO.zb F%@y[ qB.!m$TO${(%mb%Gh%ls$Og%$;%}H+Hh%Ih%mJ$Jh%Kh%E1%Lh%Mh%Nh%}]$@J+Oh%dm+w&@}T@'-%Z1+Eb+G#$Eb+m8+E:+@4+=2+if#V4#W4#'l#A7#p&%F0+o'$DC$pD$^ %-k+yT#]]+m)+'i$nA$'0%_L$Jm$.{$/}$G1$}s$i*%AJ$!3@~-%#4%#4%I#%I#%*y$'&%&y$<=%<=%S*%@*%xL$D-%tO$K=%o%%,#%J=%g3%+=>+=>+%O3%O3%h@$h@$S_$S_$S_$7X#7X#7X#T_$.Z#V_$jr$CM$yD$=y$c %;_+;_+wL$=Z$lE$BM$rU$rU$zD$yL$EM$CM$AS$m>%QV$B-%rF$mW$tX$Q`$D#%0l$N`$g6$g6$.4$.4$_a%_T$zh$N%%H~%H~%N%%;5$v8$u9$(T$6S$)W$S0%G$%/9%Wh%#d%>h%m7%,h%7b%l6%v0%4S$rc%v0%j`$-7%+e%%0%vM$vM$.e%Xh%LT$Yh%C3#Zh%`h%Gl$ i%.i%+i%@i%#i%@0$$i%%i%&i%*i%=i%-i%;i%>i%,i%'i%)i%!i%~i%{i%4h%fg%za%Ge%Ge%]i%^i%/i%(i%Le%sI$vJ$_i%:i%:i%m6%`N$ +%p6%T5%2P$O$%1)%,@%,@%6S$5Z$+4$h6$O+%O+%52%42%DS$BS$-&%z,%ch%`6%,5%ch%j*%dh%U1%k*%S1%S1%Y6%f6%=#%8;%P3%&<%2q$.Z#.Z#.Z#.Z#U_$V_$zs$LP$zs$U_$U_$jr$LP$LP$z[%4|$T[$Y_$e<$4|$q1$T[$Y_$e<$e<$e<$e<$e<$e<$T[$VP$07%f+ G#sB#Rn#1f#1f#1f#oB#W1#On#On#On#On#rX@rX@rX@u=@tI+tI+/P+/P+`M+`M+`M+Wv#Wv#_t#_t#Wv#qI+qI+YM+p{%5=@#l#hc#|&@TY#60#XN#~i@5e@;w+tr+{k@jb#v)%S##O)@^K@^K@^K@^K@mq@mq@x;@x;@R)@!K@)K@>K@2 @2 @YK+)K@Q,+Q,+,T@!K@fm$]K@1#%>p$x/%#@%g^%I.%z(%=@%)_%UR$>K@T,@:P+=>+=>+:P+T,@T,@T,@T,@T,@T,@T,@T,@T,@T,@pZ@AM@!K@ZK+O)@|=@;w+up+#B+)w+mX+6=@5&@BO@Wx$(R#2|+~f#rx$f7#SB$bL# -#!M R5@vR@-! -! ,M ,M n[#=S [g ,v.,v.i~ i~ i~ Yt.Yt.,v.Yt.6g+6g+Yt.i~ i~ Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.i~ i~ i~ i~ w8.be+]! {! 8g.w8.be+{! ]! ]! ]! ]! ]! ]! ]! ]! 8g.8g.8g.be+be+{! {! {! {! {! {! ]! ]! 5A.5A.5A.]! ]! ]! {! {! be+be+be+8g.be+{! ]! ]! {! ", "uk uk uk uk uk uk uk !B sk tk uk oG.uk tk sk N6 N6 $~..h.vk vk +h.+h..h..h..h..h..h.vk vk vk :j.:j.:j.:j.oG.oG.uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk :j.:j.:j.:j.:j.:j.:j.:j.Pl Rl (j.(j.Tl Rl (j.n` _j._j._j._j._j._j._j.hY.Vh.dD.%j.%j.Su$%j.dD.dD.Su$%j.dD.Vh.Vh.dD.%j.Su$hY.hY.G6.G6.9, 9, WW.WW.-H.l` he ke ke he 2b ;_ :j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.kI.~(.n` Rl .h.&% k+ P +. -. }9 0d Gg%&U#o`+Ig%ji%uj@^<@5R.hd%B+#a@#a@#a@K)@K)@K)@K)@K)@K)@ED+ED+ED+ED+ED+ED+tr+tr+vD+vD+vD+vD+vD+vD+1R+1R+@k+-w+.B+#k+#k+#k+.B+-9@Nb+]_+:k+:k+=m+=m+V4@V4@ZA+ZA+3&@3&@/+@/+@(+@(+@Kb+mi+b[+mi+=g$=g$Pg+Qg+2f#2f#Rn#:i#-l#-l#hf#hf#-l#-l# ;$ ;$ ;$In$.K#.K#'|+'|+'|+'|+,|+,|+,|+'X#K>%K>%K>%$Z#$Z#I.$I.$I.$1X#nV#nV#1X#2X#rO$J'%k_%>/+vL$sV#I2$=Z#(]+r6%,/+0d%Nj$Nj$5d%'l$)l$c$%PR$PR$b:%rF$rF$mW$qY$D#%zZ$/V$yZ$i6$i6$;5$;5$^Y$e#%;5$v8$u9$u9$I1$Iw$X'$6S$/9%5S$i#%.d%=b%@d%wi%a0%7b%xi%yi%hf%cQ$zi%zi%Ai%Bi%Ci%yM$Di%}d%}d%{a%jg%RS$H1%H1%Ei%Fi%Gi%lL$Hi%Ii%cX$Ji%Ki%:~$Li%Mi%Ni%Oi%Pi%Qi%Ri%Si%Sg$Ti%Ui%Vi%8R$Wi%Xi%eg%Yi%Zi%za%`i%`i% j%/i%2b%Ff%.j%09%:i%:i%u0%M$$,V$i`$b9%fQ$O$%hQ$1)%1)%iW$6S$+4$h6$L%%O+%52%52%tU$%%%-&%z,%bh%`6%~{%h6%ch%E&%lW$SV$0=%0=%Y6%Y6%RP$ R$=#%=#%%<%(/%;~%As$As$#<%;~%;~%J'%rO$c<$c<$DM$:N$qO$DM$tO$4|$e<$T[$q1$tO$4|$T[$T[$T[$T[$T[$T[$T[$T[$VP$+j%@j%Hw##j%$j%%j%&j%*j%=j%-j%;j%>j%6i%,j%,j%W6%tv$sv$2u$2u$B:+;t$;t$;t$.K#$2+Tx$In$In$Es$`-$hf#sB#mc#1f#nB#2f#2f#oB#W1#On#On#5=@5=@rX@rX@u=@u=@(t#(t#(t#uy#uy#3P#3P#2N#2N#3,$3,$1N#]P+{P+7h$y)$Cy#pi+$l#$l#(i#}&@{k+IZ@`K+ L+sr+#B+sD@D^%{w+T##P)@k#$k#$k#$mq@mq@x;@x;@R)@!K@)K@>K@2 @2 @YK+]K@ZK+ZK+R,@Q)@A%%fm$r$%|#%'j%Z{%)j%'_$Z/$)_$!j%+W$]K@T,@:P+=>+=>+:P+T,@kX+T,@T,@T,@T,@T,@T,@T,@T,@qZ@AM@!K@P)@4 @}=@up+-w+;w+#B+,B+zD+2 @2R+hX+'M$Ar+,/#sx$~j%{j%Np#x'%4z+R5@R5@-! -! ,M ,M =S =S [g M#`y#Jq#{2#R7#:o#`P#`P#`P#`P#{5#=6%^e%@8##8#QB#Bt#8w#8w#7i%xg%/e%MR#MR#`7#`7#{5#`7#+z#;z#st#ot#J_$7@$_j%:j%[+>m+|3@nb#''+88$]J$Xo$/5@3j%d_#]c |L.%y 'z %c$}L.rZ.#<@h|@!2@wp c'.os.ei%4j%9N.5j%6j%PO.HI.7j%8j%9j%oa.EH 'L.#U.3K@NZ@/D./D.PF++d+Y@$Y@$+d+^b+P~ PF+^b+^b+PF+PF+^b+Y@$Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh+PF+PF+^b+^b+PF+P~ F.6}%)i.ZY ,v.,v.i~ i~ Yt.Yt.ZY Yt.]$@]$@)> i~ i~ )> Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.i~ i~ i~ i~ Yt.Yt.Yt.Yt.9Y+Lh+;~ 'g@9Y+x8.Lh+;~ 'g@'g@'g@'g@'g@'g@'g@'g@be+be+be+{! {! ]! ]! ]! be+be+be+{! {! {! ]! ]! {! {! {! be+be+8g.8g.8g.8g.be+{! ]! ]! {! ", "uk uk uk uk uk uk uk sk tk uk oG.oG.tk sk !B U5 U5 N6 .h.vk +h.d( ~% N6 $~.$~..h.vk vk +h.+h.m` :j.:j.:j.oG.oG.uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk :j.:j.:j.:j.:j.:j.:j.:j.Pl Rl (j.(j.Tl Rl (j.n` _j._j._j._j._j._j._j._j.9%.Su$Su$Su$%j.dD.is@x5.Su$%j.dD.Vh.Vh.dD.%j.Su$G6.G6.G6.9, 9, VW.1% 1% l` m` ke le le ke he 2b oG.oG.oG.oG.oG.oG.oG.oG.:j.:j.:j.:j.:j.:j.:j.:j.r;.=H.(j.Ql tk ~% !% U% ,+ T <. f. 23 t< u8 R`+0j%#@.9m `= ^d@ss vG.aj%wi+wi+/R@;$%JI+]N.]N.W} C( Id dQ ye )z oB.lm@t1@x]%bj%cj%dj%`a$p +ej%w-+7`$fj%gj%hj%ij%jj%kj%lj%~K$aB@vU#$^ %{6+cO$]]+2(@K,+J,+z6@oB$(~%R'$]B$+{$ac$B,$S]#&#$Jp$Ph%'0%/_%}f$!}%!}%}#%'/+[f$Jg+'_+yD$AD$lE$t'%=Z${`$'/+g3%}#% *%pj%,&%1H$1H$Oc$nA$)K$_]$ {$~o$ {$iQ$J1$Z!$qj%D5$rj%sj%p$R1#uj%uj%uj%=(@=(@=(@J)@r<@r<@r<@8~@8~@8~@8~@8~@7~@(s#dX+(s#dX+{k#{k#jy+zD+zD+#a@#a@#a@#a@K)@#a@#a@zD+#a@#a@#a@K)@K)@K)@ED+ED+ED+ED+ED+ED+tr+tr+vD+vD+vD+vD+vD+vD+1R+1R+@k+-w+.B+#k+#k+#k+.B+-9@N0+si+si+[]+]_+]_+{/+{/+ZA+ZA+3&@3&@/+@/+@(+@(+@Kb+mi+b[+mi+=g$=g$Pg+Qg+_i#2f#Rn#:i#-l#-l#hf#hf#-l#-l#Ly# ;$ ;$In$.K#.K#'|+'|+'|+'|+,|+,|+,|+,|+.2#K>%K>%$Z#$Z#I.$I.$I.$1X#1X#nV#nV#2X#rO$J'%k_%>/+vL$>/+$ $I2$sV#}5%kK$0d%Nj$Nj$Nj$cm$dm$ R$+R$d-%c>%-Z$-Z$tX$CZ$zZ$$%%N`$j{%i6$1;%+4$+4$]X$(T$+4$_T$G&%)W$X'$X'$5Z$1)%Ab%N9%+d%Yb%hR$Ed%a0%vj%hf%cQ$cQ$wj%zi%xj%Ai%yM$xM$1g%yj%Di%}d%jg%{a%Ff%nc%zj%mc%Q0%Aj%Bj%Hi%Cj%Dj%Tg$Ej%Fj%Gj%Hj%Ij%Jj%Kj%Lj%Mj%Nj%Oj%Pj%Qj%Rj%Sj%Tj%Uj%Vj%Hi%6L$Wj%Zi%OT$`i% j%^i%oc%Xj%jg%.j%yj%:i%u0%j`$,V$i`$b9%b9%Z=$hQ$1)%1)%N&%6S$+4$.4$g6$L%%52%52%tU$%%%-&%33%Yj%`6%+Y$h6%Zj%,5%23%`j%0=%SP$Y6%Y6%.R$.R$-#%-#%}3%Q3%$O$;~%;~%;~%(/%(/%z[%rO$2X#S[$DM$:N$:N$qO$tO$4|$T[$4|$tO$PP$q1$T[$4|$4|$4|$4|$T[$T[$T[$VP$A|%a/# k%Hw##j%$j%d5#d5#;j%.k%+k%@k%5i%#k%(j%d6%B:+2u$2u$B:+;t$;t$;t$3[+X3+Tx$cO$7q$In$H#$fd+:i#mc#Un#1f#_i#_i#2f#oB#/+@On#5=@5=@5=@rX@u=@u=@p;@uy#7X+3P#eh#3N#tS$ab%tS$3N#tS$ab%3P#tI+@w+(t#|t#1&@$k%$l#$l#(i#bf#&m+St+Yn+|]+v)+1R+sD@D^%m@%S##r;@A%%E+$E+$k#$mq@x;@cB@R)@!K@)K@>K@2 @2 @YK+]K@ZK+P)@R,@R,@A%%A%%r$%r$%'j%'j%)j%%k%Z/$j#$!j%+W$]K@T,@:P+zI+zI+:P+T,@kX+T,@T,@T,@T,@T,@T,@T,@T,@qZ@>p$,T@P)@0&@L)@up+-w+;w+#B+,B+zD+2 @2R+hX+'M$n~+X,@SK$l %{}%SB$bL#X{$[g R5@-! -! .~ ,M =S ,M %_&#({%uh$3i%=k%b8+*y$xL$DM$d($Ve$DR#G#8w#7i%xg%/e%MR# 8#`7#`7#Mq#{5#+z#+z#st#rt#Q_$ z#-k%;k%>k%,k%'k%:j%)k%!k%$G##K#D+%0t#OL#s0#i8%~k%{k%]k%m0#t7#k:%_9@P8%b=#Q3#rc@.7#O$+8M@:V#g2%h%%Tq@Tv Y,@nm@`W d!+U!@K0 4L.@I.y^%'4@Cq.Sy 2{+^k%X_+/k%8N.(k%_k%:k% jy.jy.)> i~ i~ )> Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.,v.,v.,v.i~ Yt.)> )> )> 9Y+'g@6j+;~ Lh+9Y+Lh+;~ 'g@'g@'g@'g@'g@'g@'g@'g@be+be+{! {! ]! 5A.5A.Ea+w8.w8.8g.8g.be+be+be+{! {! {! be+be+8g.w8.w8.gA 8g.be+{! ]! ]! {! ", "xn.xn.je je ie ie ie ie ie ie ie ie ie ie ie %% %% ~% +h.vk .h.$~.N6 $~.$~.$~..h.vk vk +h.+h.tk tk tk tk tk tk tk tk :j.l` l` :j.tk !B !B sk :j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.m` m` l` l` m` m` :j.oG.l` l` l` m` :j.:j.oG.(j.hY.dD.dD.dD.dD.dD.dD.dD.Su$Su$3o.3o.3o.Su$dD.dD.hY.hY.hY.hY.X)@X)@(j.(j.m` m` he he he he he he m` R_ R_ oG.oG.m` m` tk m` m` m` m` m` m` m` m` AX$AX$=H.(j.uk $~.$~.F7 Q% W+ C. m+ A. f$ x# 0%._8 2R#F..5d 8G@1E@(2@k|@0T.yX@w@%2k%RD@ud$v8+S$+%; xC#DT -( tc x9 $V.ma@.{% c$i7#3k%)c%dj%w;%bG+4k%5k%6k%7k%8k%9k%0k%ak%a+$aa$bk%A!%h-$gm+O)$di$[F$d}%ck%dk%dk%v-$]f+Of$dd+^6+8[+x0+YM$':#cE#1[+]]+2(@K,+Oc$Ma$oB$R'$s{%ti%G1$l6$0c$&#$S]#Jp$v<#_L$Y~$'x$si%!-%~-%ek%a~+fk%_]+vL$(]+(]+(]+rh$LC$[f$ *% *%}#%f3%si%si%Qd$A;%'0%~o$[L$c@%A.%'@%u|$ j$O1$%#$2e$B_%}[%E!$kS$A[#Qz$,f#vC$+-#u)$kQ R5@=E Jv =E =E =E =E Y;$Y;$-P -P -P 1i 7E$u)$u)$u)$ -#Q-$|w$ck##{@YN+a]@4P+5w$n>#BA$BA$}F$}F$r4$`P$Ts@Ry$Ry$Qy$Qy$]8$]8$]8$]8$4w+4w+4w+4w+]8$Qy$Ts@.v@<^%8p$|S#e.%e.%QA$Wz$Qy$Qy$kn$~m$ns$ns$N@%N@%dD$dD$i%%i%%i%%i%%Vy$Vy$*c$*c$*c$Wk$ar$Tj$Tj$!U#'7$C4#'7$'7$)g$Di$,L$J3$b8$b8$WL$hm$P^%H.%f^%Y]%R,@S##S##{]%Sm#:s#^v#^v#c^@T_@T_@r<@r<@r<@r<@r<@3Z+3Z+2T+< @2T+^v#gk%hk%Sm#M2@K)@,B+,B+K)@jb#S##gk%=(@W{@zD+=B+mX+#a@#a@K)@K)@|=@}=@tr+Jl+wI+wI+)w+!w+dB@sD@dB@!w+1R+sr+-w+-w+#k+#k+:c@+B++B+wV$p=$}&@}&@RO@RO@=m+1$@1$@#l#ZA+/+@(+@ir+(+@/+@3&@mi+mi+mi+{_+F:+=g$6e@6e@@4+6e@/+Ld$-k$-k$-k$6l$jk%jk%@O$@O$kk%kk%#O$#O$B~%lk%m>%c;%u/%B-%mW$qY$zZ$h]%0l$yZ$o7$o7$.4$@4$_a%]X$^Y$]X$6S$S0%i#%i#%1)% d%N9%Ed%a0%mk%eQ$nk%ok%dQ$#$D@%1g%n $WI#qk%sI$[d%rk%sk%v`$tk%uk%vk%wk%xk%yk%zk%Ak%Bk%Ck%Dk%Ek%Fk%Gk%Hk%Ik%Jk%Kk%Lk%Mk%Nk%o+@Ok%Pk%ON$Qk%Rk%$0$eX$yf%jc%OT$Sk%!R$Tk%8h%Xj% e%}d%Uk%C %wM$&0%Vk%*0%=0%Wk%Wk%'V$gQ$r %_}$d>%u9$i6$}g%+,%nY$AZ$BZ$y-%23%TV$B$%~U$2;%L5%{V$oY$]V$=&%%%%QR$0=%+R$d-%RP$.R$Y6%;5%Xk%Yk%Yk%Xk%Mj$Ci$CM$k_%tO$PP$PP$ss$ss$Zt$q1$q1$4|$4|$T[$T[$e<$e<$X_$e<$T[$4|$4|$T[$e<$%2#j}%+j%Hw#Hw#Zk%`k% l%.l%@k%+l%5i%#k%)/+Cb+t0+&|+cE#J#%tv$B:+;t$Nr$$2+$2+.K#7q$Es$H#$H#$fd+`-$Nn#Un#Rg+2f#_i#_i#cf#ic#ic#}t#oD+oD+v=@jc@u=@u=@p;@3k#Aq@eh#fh#eh#Aq@tS$qr$tS$qr$3k#Aq@Aq@fh#fh#-:#s.$@l%#l%#l%/i#/i#X+$IZ@`K+tp+#B+@B+sD@'w+m@%{]%0G+mq@k#$E+$A%%E+$,T@,T@8G+R)@>K@YK+5G+;K@2 @!K@s;@Sm#M2@0~@P)@R,@r;@r;@$l%T)%;'%X/$Tm#Tm#2%$DO@8G+:P+T,@kX+kX+T,@:P+zI+T,@T,@kX+v;@m#$m#$m#$v;@On$W.@H@@P)@qt${k@up+:c@>w+@B+|=@#a@R)@4G+WK+J3$.*+9Z+)Z#i7#[/%%l%lh#1F$e6%Z;$-E -! l%;l%6@$,l%'l%)l%!l%~l%{l%]l%^l%l@$QP#9t#D7#i8+k8+kd+/l%6|%L[%q.$`;#(l%7c#$9@Q1+JZ@ue#i|#~Q#_l%+E#Bo+OA$'z _d@d!+4q 4q 4m |t K0 j .$;@_O.:l%yu.X@.SE+Y*+~h. )> )> )> )> )> )> )> )> Yt.i~ i~ i~ )> ]$@jy.i~ i~ Yt.Yt.)> 6g+6g+]$@Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.'g@+d++d+^b+PF+/D./D./D.^b+^b+^b+^b+^b+^b+^b+Lh+]! ]! {! {! be+be+8g.8g.]! ]! ]! ]! ]! ]! ]! ]! w8.`Y YY gA {! 5A.5A.]! {! 8g.gA w8.be+{! ", "xn.xn.je je ie ie ie ie ie ie ie ie ie ie ie d( d( +h.vk .h..h.$~.$~.$~.$~.$~..h.vk vk vk +h.uk uk uk uk uk uk uk uk oG.:j.m` :j.tk !B sk uk :j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.uk oG.:j.:j.m` m` m` :j.l` l` m` m` :j.:j.oG.(j.hY.dD.dD.dD.dD.dD.dD.dD.%j.Su$Su$Su$Su$%j.dD.Vh.X)@X)@X)@X)@hY.hY._j._j.m` m` he he he he he he :j.-H.-H.oG.oG.l` l` uk m` m` m` m` m` m` m` m` kI.AX$AX$=H.oG.uk uk .h.!% l& {@ B. C. U+ v i@ vr.Db.22 J} e{ i|@x[@E[@MD+X0+MD+5{%0T.wi+Pe@uW.g3 8l%~( i1$an ZP.uW.MD+1-+LJ@/-#~!%9l%0l%`J$_T#al%bl%cl%dl%el%rx#fl%gl%hl%9+$il%(I$qj%]}$jl%kl%+`$ll%@<$ck%2P#LU#3f#~/+&k+On+Mg+;k+m%$pF$-_+w:+8G$Tl$J,+Oc$Nc$oB$ 9@R'$}s$H1$9c$0c$0c$S]#-R$}:$#BA$BA$}F$}F$r4$`P$Ts@Ry$Ry$Qy$Qy$]8$]8$]8$]8$4w+4w+4w+4w+]8$Qy$Ry$`o$.v@<^%8p$|S#|S#Wz$Py$Qy$Qy$kn$~m$ns$ns$ns$N@%dD$dD$i%%i%%i%%i%%Vy$Vy$jm$jm$jm$*c$]m$ar$ar$ar$N[#4d$4d$4d$)g$S5+@d$,p$c9$c9$!l$WL$gm$P^%P^%Z{%Q,@v)%Ku${]%5o@Sm#r;@^v#Q)@T_@2T+r<@T,@r<@7=@7=@Q,+w;@R)@8G+R)@Q,+s;@t;@zU$Sm#T##,B+w)+w)+,B+#a@3Z+3Z+< @6=@=B+=B+mX+mX+T##K)@6o@|=@L)@tr+Jl+Jl+)w+!w+dB@dB@dB@)w+1R+sr+@k+-w+.B+.B+#k+:c@:c@~i@p=$}&@}&@RO@RO@=m+1$@1$@2$@ZA+3&@(+@(+@(+@/+@3&@b[+b[+mi+mi+]|+F:+Pg+Pg+6e@Pg+df#df#hf#,l#,l#,l#1f#:i#;f+;f+hf#,l#Ly#7q$.K#.K#.K#X3+Y3+Y3+'|+,|+5|$ik%ik%`1#.2#c%%Ai$Ai$yL$9X#`1#c%%3X#EM$K'%qV#Ri$Ld$-k$-k$-k$6l$jk%jk%@O$@O$kk%kk%#O$B~%B~%lk%m>%QV$rF$rF$tX$qY$D#%zZ$0l$yZ$o7$o7$.4$.4$(a%]X$]X$Fa%3)%3)%2)% d%.d%#7%ql%eQ$vj%[P$rl%hf%wj%sl%VN$qc%qc%|d%F8%D@%n $PG#D@%zZ#zZ#UX#tl%^W$ul%vl%I6#wl%xl%yl%zl%Al%Bl%Cl%Dl%El%Fl%Gl%Hl%Il%Jl%Kl%Ll%Ml%7K$Nl%Ol%Pl%Ql%5W$Rl%Rj%Sl%Tl%cX$+i%Ul%Vl%Zi%OT$Wl%Xl%Yl%8h%Zl%`l%.j%Di%F8%wM$j`$ m%i`$*0%H$%Wk%'V$gQ$a`$Y'$K1$I1$+4$}g%+,%nY$*&%BZ$tU$^V${U$B$%~U$2;%L5%{V$oY$]V$%%%tU$QR$0=%+R$+R$.R$Y6%32%=O$6P$Yk%Xk%Hn$'l$Mj$yL$yL$4|$}]%}]%}]%ts$ts$q1$q1$4|$4|$T[$T[$e<$e<$Y_$e<$T[$4|$4|$T[$e<$&M$i}%u<%-[%`k%`k%.m%$:%d6%5i%(j%u0+)/+Cb+mS$0d+RL$-|+B:+;t$;t$Nr$$2+$2+Tx$ ;$In$`-$fd+fd+`-$Nn#K@YK+5G+;K@2 @2T+c^@c^@M2@ky+P)@Q)@r;@s;@T)%|#%Y/$SQ@Tm#6$@2%$6$@R)@:P+T,@kX+kX+T,@:P+=>+:P+T,@kX+kX+v;@v;@v;@v;@*G+I@@t<@*w$<&@.B+#k+:c@#B+|=@mX+R)@5&@WK+:8$ZJ#1S#e.%+m%@m%k4#,9%E<%#I$}f 9~ -! ~%-m%>I$~>$UY#`3+^6+ze$!i#u7#;m%>m%]7%,m%.^$N_@'m%,[#+x@/i@C[#&$#%l+G_#_8%./#ak#d!+|/ }/ 9Y F( G2 H( X!@k)%)m%]g@i!+ra@:}+H%+%P@ S.!(+Jb.!m%~m%{m%]m%^m%/m%<)+(m%z3+_m%:m% )> )> )> )> )> )> )> Yt.i~ i~ ,v.i~ Yt.6g+]$@Yt.Yt.Yt.Yt.)> )> )> )> )> )> )> )> )> )> )> )D+^b+^b+^b+^b+PF+PF+PF+PF+^b+^b+^b+^b+^b+^b+^b+^b+'g@]! {! {! be+be+8g.8g.]! ]! ]! ]! ]! ]! ]! ]! w8.gA gA 8g.]! 5A.{! be+{! be+w8.8g.{! ]! ", "ee ee fe fe ge ge ge ge ge ge ge ge ge ge ie .h..h..h..h..h..h..h..h.$~.$~..h..h..h.vk vk vk oG.oG.oG.oG.oG.oG.oG.oG.tk oG.:j.oG.tk sk uk :j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.je je ie le le ke he he he he he ke ke ke le oG.hY.dD.dD.dD.dD.dD.dD.dD.dD.%j.%j.%j.%j.dD.Vh.is@9%.9%.X)@X)@hY.hY.n` n` m` m` he he he he he he uk l` l` oG.oG.-H.-H.:j.m` m` m` m` m` m` m` m` 'K.lI.lI.lI.mI.:j.:j.+h.+h.^* ^* S& [! [! L) #. XY U_+Yf @Y [m%[*%@n@D[@9|@_L._L.h|@E[@#BA$BA$}F$}F$r4$`P$Ry$Ax$Ax$kn$kn$~m$~m$~m$~m$ns$ns$ns$ns$~m$kn$Ry$`o$.v@<^%8p$8p$8p$Ts@Ts@Qy$Qy$~m$~m$~m$ns$ns$ns$dD$dD$i%%i%%i%%i%%Vy$Vy$/v${m${m${m$ln$ln$]m$]m$8]+(R#7F$Di$S5+S5+_a$,p$_8$_8$d9$lF$lF$~J$~J$>p$T)% W$^)%zU$r$%t;@|#%S,@)K@wp#jX+wp#fX+eX+M+#M+#XK+BM@~K@6G+~K@YK+!K@]K@>'%t;@Q)@ZK+0G+0G+0G+9G+|+5|$ik%ik%`1#.2#c%%Ai$Ai$K'%oV#.2#Ai$3X#yL$K'%qV#Ri$$w$+F$+F$+F$_V$im%im%qQ$qQ$-O$-O$pQ$pQ$=O$jm%m>%b:%ue%6 %CZ$CZ$E#%E#%/V$yZ$o7$o7$;5$;5$^Y$e#%E9%km%lm%ig$ef%mm%nm%O9%t8%rl%dQ$om%om%pm%qm%rm%jf%jf%jf%sm%tm%um%zM$QM#fK$OO#OO#OO#vm%Tk%wm%xm%mL$ym%zm%Am%Bm%Cm%Dm%Em%Fm%Gm%Hm%Im%Jm%Km%Lm%Mm%Nm%Om%Pm%Qm%Rm%Sm%Tm%Pl%Um%Vm%Wm%Xm%wb%Ym%w}$yf%Rd%aQ$_d%Zm%`m% n%`l%5x#.n%09%yM$pk%j`$&0% m%,V$T5%2P$Wk%Z=$Q<$M&%J1$S)$+4$}g%l!%nY$*&%AZ$AZ$K)%{U$+n%~U$2;%2;%~U$oY$]V$tU$y-%z-%w-%+R$+R$TP$0=%32%=O$oR$6P$Hn$#O$cm$Mj$3X#3X#Y_$$2#$2#|I#|I#$2#q1$q1$4|$4|$T[$T[$e<$e<$Y_$e<$T[$T[$T[$T[$e<$$2#1G#g}%g}%=[%=[%@n%06%W3+#n%[[+6I#t:+0d+#_+l)+s:+g($/6$g($g($I#$I#$RR#RR#1t#-X#Vl+1=$Wl+YN#oq#df#Rg+Rg+bc#=l#=l#cf##l##l#oD+v=@v=@v=@p;@p;@oe#o;@7X+:x@:&@<&@#9@Bq@b3%$n%Rx#fz@fz@6o@|=@|=@}=@;w+2=@%n%s.$r.$H`#60#XN#`K+:c@;w+L)@L)@}=@}=@,B+4 @8$@^K@mq@k#$k#$k#$DD+x;@8G+w;@>K@>K@2 @5G+2 @T,@3Z+{k#W{@< @ky+T_@Q)@|V+fm$]K@,T@!K@DO@W.@G@@7G+2 @:P+T,@T,@T,@T,@:P+=>+:P+:P+:P+T,@T,@kX+kX+kX+>p$&n%<^#4 @=9@:&@fy+.B+:c@;w+L)@,B+8G+R,+}{#U4$VX.d=@*n%=n%-n%;n%.Q$B(%#I$}f n%,n%'n%Tp+*Q$r)% >+_G+/a@io@jk%$<%#<%d<$#2#&2#]>$Y_$S[$S[$f@$.u$e0$%l$%l$)n%H.$iV#$K#J0#^2#:o#=8#*8#/2#[w#Y7#{5#b($^e%Nq#@8##8#^O#+8#+8#xg%xg%xg%T0# 8#{5#Mq#b($Mq#{E#^z#R_$R_$J_$nt#x.$!n%ht#~n%/w#~n%_$$E;%AV$|T#$2+x0+~_+Zb$Qc$^d${n%U}$]n%^n%z,+F1$~7$}&#/n%j2$Vj$h(%${@./#(n%0T@n8 *y hw p_ ud zN GW+y7 z*@$@.Bw _n%n:.c3@U*+qi@^k%}G zh%:n% )> )> )> )> )> )> )> i~ i~ ,v.,v.,v.i~ Yt.)> )> )> )> Yt.Yt.Yt.Yt.i~ 6g+6g+6g+6g+6g+6g+6g+U/@PF+@g%@g%@g%]1%]1%]1%]1%]1%]1%]1%]1%]1%]1%]1%^b+Lh+{! {! {! be+be+be+be+]! ]! ]! ]! ]! ]! ]! ]! 8g.w8.8g.{! 5A.]! be+gA 5A.{! 8g.be+]! 5A.", "ee ee fe fe ge ge ge ge ge ge ge ge ge ge ie dd N6 N6 $~.$~..h..h..h..h..h..h..h..h..h.vk vk :j.:j.:j.:j.:j.:j.:j.:j.!B tk oG.oG.uk tk oG.m` :j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.ie ie ie je ie ie le le ke ke ke ke ke ke le oG.hY.dD.dD.dD.dD.dD.dD.dD.Vh.dD.dD.dD.dD.Vh.is@x5.|{.9%.9%.X)@hY.G6.n` WW.m` m` he he he he he he tk m` m` oG.oG.R_ R_ m` m` m` m` m` m` m` m` m` 'K.'K.'K.'K.'K.'K.l` m` uk .h.$~.}9.l:.^* ^{ 6[ t& e# R@ iN +e#2n%r.@3n%$;@d{ 1E@c{ [C@+Y5+&}@w^@`0$2r$)r$)r$cs$ek%9G$ml%0G$f3%Qd$'x$S'$}+% {$3P$)5$M`$v9$P<$,y$:L$al$al$mn%/]$/I$/I$Qd$si%f3%fk%fk%fk%fk%[z$sh$#1%#1%#1%Md$ h%-y$-y$;y$nE$ j$I1$d>%o*%M`$W<$N1$_~%:]$yO@nn%on%pn%6J#W0++v@!b#t)%+(+=P ;z$Nw 'Y$Cu Cu *E *E *E *E Z;$Z;$[g [g [g EN 4z+(J$(J$(J$X{$+-#O-%5O.7O#:g%Th%B[#5w$n>#BA$BA$}F$}F$r4$`P$Ry$Ax$Ax$kn$kn$~m$~m$~m$~m$ns$ns$ns$ns$~m$kn$Ry$`o$/d$.v@<^%<^%<^%4Z.`o$]8$]8$~m$~m$~m$~m$ns$ns$dD$dD$i%%i%%i%%i%%Vy$Vy$dw$dw$/v$/v$CO#CO#CO#ln$'p$'M$y4#y4#y4#@d$qw$qw$47$47$_8$5($d9$lF$lF$~J$Kn$Z{%Kn$>p$qZ@pZ@zM@9e#vp#[{#[{#N1#N1#2h$2h$2h$qw$qn%qn%_8$5($5($5($9e#9e#fX+5$@3G+5&@[V+=>+[V+<`#I,@k$N`$yZ$g6$o7$+4$v8$]X$F9%tn%un%ig$ig$S<$Td$ql%eQ$yi%wj%o7%qm%qm%jf%vn%TN$-8%wn%wn%sm%tm%wJ$xn%`l%OO#OO#OO#yn%$]>$;}#;}#|I#|I#Zt$q1$4|$4|$T[$T[$e<$e<$e<$e<$e<$T[$T[$e<$e<$e<$Zt$6N$6N$t_%{-%J#%tv$x:+=f+8G$]]+2}@-:@Z6@;'@&3@'.$f9$g8$g8$g8$g8$SR#SR#qq#qq#qq#qq#Ey#Ey#Ey#W1#2f#Rg+bc#=l#=l#cf##l##l#v=@v=@v=@Pn#p;@oe#oe#o;@K,@:&@:&@<&@&t@>;%@o%#o%jb#jb#6o@K)@K)@mX+,B+@B+C+%$o%'b$'b$f0#f0#o;@#k+:c@<&@L)@L)@K@@K@@my+8V@I@@8$@^K@mq@k#$k#$x;@x;@R)@w;@)K@>K@2 @5G+YK+T,@r<@xp#< @dX+< @dX+2T+T,@!K@>K@!K@>K@F@@~K@7G+5G+YK+:P+:P+T,@T,@:P+:P+:P+:P+=>+=>+=>+:P+T,@T,@kX+'K@%o%ly+0&@=9@|R+}T+ur+#k+up+L)@w)+8G+R,+hF$Z&++$#)7$&o%*o%[Z$5n%z/%A/%=o%1i ##)%1(%-o%;o%FA$z|+v$@T~@&I@(T+lm+F4@Ew$Qp$9S$rV#;_+>_+S`$zD$T[$e<$g@$f@$e0$Z4#I7#`Y#(X#(X#HB#O7#R7#:o#:o#`P#/2#^5#Y7#{5#Mq#^e%Nq#@8##8#]O#+8#+8#/e%/e%/e% 8# 8#{5#{5#b($b($^z#]E#Q_$Q_$rt#ot#CR#j@$k@$j@$B0#Dq#4*$X4#AB#;|+<[+*k+-2+:k+)k+W-$' +o%ZP$,o%Vb+s1@8x$${#NB@g!@ /#z=$Fn#6P+=<@;<@C%.I`+%7 4)@[a 'o%R-%ou ;e al *^.,x+hq.M[.fL#N}%;~+v<.)o%!o%~o%EW#{o%]o%^o%P4%gm#bQ#,X@w*$/D.PF+PF+^b+^b+^b++d+Y@$+d+PF+PF+/D.P~ uq. F.5e%5e%5e%5e%5e%5e%/D.PF+x8.x8.be+be+{! {! ]! ]! )> )> )> )> )> )> )> )> ,v.,v.,v.,v.,v.,v.i~ i~ 6g+)> )> Yt.i~ i~ ,v.,v.6g+6g+6g+6g+6g+6g+6g+U/@/D.5e%5e%@g%]1%Fc%Fc%Fc%]1%]1%]1%]1%]1%]1%]1%^b+Lh+{! {! {! be+be+be+be+]! ]! ]! ]! ]! ]! ]! ]! {! be+be+]! 5A.]! w8.YY 5A.{! be+{! 5A.Ea+", "ee ee fe fe ge ge ge ge ge ge ge ge ge ge ie dd U5 N6 $~.$~..h.vk vk vk vk .h..h..h..h..h..h.:j.:j.:j.:j.:j.:j.:j.:j.!B tk oG.oG.uk uk :j.l` :j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.he ke le je je je je ie le le le le le le ke :j.hY.dD.dD.dD.dD.dD.dD.dD.Vh.dD.dD.dD.dD.Vh.is@x5.9%.9%.X)@X)@hY.hY.n` n` m` m` he he he he he he tk m` m` oG.oG.R_ R_ m` m` m` m` m` m` m` m` m` 'K.4U$'K.'K.'K.<].~(.1% _j.(j.Rl .n +n *=.Lv.*- o3 J- h. }# 8 /o%Gj#s.@i ._b xI@EA@(o%L7%_o%:o%VG@8G@#BA$BA$}F$}F$r4$`P$Ry$Ax$Ax$kn$kn$~m$~m$~m$~m$ns$ns$ns$ns$~m$kn$Ry$`o$.v@<^%<^%<^%.v@`o$`o$4w+4w+~m$~m$~m$~m$~m$~m$dD$dD$i%%i%%i%%i%%Vy$Vy$dw$dw$dw$/v$*I$CO#CO#5F$_a$_a$_a$_a$@d$&6$$*$Bb#&6$&6$qw$_8$c9$d9$d9$!l$d8$d8$d8$d8$47$&6$&6$J3$'p$(R#B)+C)+C)+f&@f&@D#$PX#oo%oo%oo%po%,Z#~}%'M$/-+A)+J1#x_$J1#x_$Rs@_/#VM+*(@H)@7~@dX+2G+AD+Gn+0~@T##jb#6o@fz@fz@#9@{k@@B+)w+)w+vD+vD+wD+sr+sr+@k+@k+fy+fy+fy+fy+fy+Yn+p=$}&@}&@RO@RO@=m+1$@1$@YA+YA+3&@3&@3&@/+@(+@(+@ni+b[+b[+b[+]|+]|+Pg+Pg+Qg+Qg+Rn#:i#hf#hf#hf#hf#:i#h0#:i#:i#df#%*Y$l^%BZ$CZ$E#%,k$yZ$yZ$g6$i6$_T$u9$)W$F9%&b%qo%ro%ro%8f$so%to%ok%uo%&8%*8%vo%-8%wo%49%xo%yo%zo%Ao%Bo%Co%Do%Do%Eo%DZ#@{$@{$ Y#!W#Fo%L3#Sk%bR$Y0$Go%Ho%Io%Jo%Ko%Lo%Mo%No%Oo%Po%Qo%Ro%So%To%Uo%Vo%Wo%Xo%Yo%Zo%Ol%`o% p%.p%+p%@p%#p%13$$p%%p%&p%*p%=p%-p%Aa%`m% n%;p%.n%wJ$>p%yj%pk%pk%if%4S$b9%p6%2P$-0%Q<$/B$Z!$V2$+4$_T$.!%m*%h]%$%%pY$nY${U$+n%}g%A$%2;%~U$nY$;&%AZ$BZ$z-%w-%&X$&X$TP$0=%R]%ng%,p%rn%`>%c-%sU$0d%zD$S*%&M$%2#=}#:K#Rx$21%Zt$q1$4|$4|$T[$T[$e<$e<$T[$e<$e<$e<$e<$e<$e<$T[$4|$4|$4|$xL$lK$S`$;_+-/+^]+|1@;:@u^@$!@t~@WH@0x@'.$7|$7|$>c$9q$kw$kw$kw$;>$;>$[*$[*$[*$[*$-E#oB#2f#PL#bc#=l#*l#oi+#l##l#v=@v=@p=$p=$oe#oe#-:#-:#:x@:&@:&@L)@fz@>;%@o%#o%jb#T##T###a@#a@zD+mX+|=@gF$'p%Y{%9F$=E#|t#eh#fh#fh#*9@P,@P,@qg@qg@8V@8V@8$@^K@mq@k#$k#$k#$DD+x;@R)@!K@)K@>K@YK+2 @YK+kX+r<@=h%(s#O[$2G+7~@dX+8~@:P+7=@>K@jX+)K@5$@~K@5G+>K@:P+:P+:P+:P+:P+:P+T,@:P+:P+=>+=>+=>+:P+kX+v;@'K@%o%ly+0&@=9@|R+}T+ur+-:#:c@L)@,B+cB@2 @BM@u_%c=@6d$)p%!p%`/%l %~p%A/%OO$[,$es sG sG tG -E }g es es /+,/+t'%lK$9X#d<$g@$aV#/X#/X#J7#J7#M7#I0#R7#R7#^2#[w#^5#Y7#!5#`7#Mq#^e%Nq#@8##8#]O#^p%^p%#f%#f%#f%MR#MR#`7#`7#Mq#b($]E#]E#Q_$J_$rt#qt#JB#Cc#~E#Cc#Cc#/l#sT#Z_$Z%$pF$._+#/+sD+Yn+/_+3~@/p%+h+IL#(p%vD@j$+2K#Or#^l$:)#/)#lx$W4+1L.Mp#`]+Pe@!#+3k+Y-+_p%Zg :p%8= |'%Xe pq+%} tn 99.*^.LO.|R@j[ y1 7Q.)s )> )> )> )> )> )> )> ,v.,v.i~ i~ ,v.,v.,v.ZY )> )> Yt.Yt.i~ ,v.,v.ZY Yt.Yt.Yt.Yt.Yt.Yt.Yt.oA+/D.5e%5e%@g%]1%Fc%Fc%Fc%]1%]1%]1%]1%]1%]1%]1%^b+9Y+be+be+be+{! {! {! {! ]! ]! ]! ]! ]! ]! ]! ]! 5A.]! {! ]! 5A.]! 8g.YY 5A.{! be+{! 5A.Ea+", "ee ee fe fe ge ge ge ge ge ge ge ge ge ge ge g~ N6 $~.$~..h.vk vk vk vk vk vk .h..h..h.$~.$~.oG.oG.oG.oG.oG.oG.oG.oG.!B tk oG.oG.uk tk oG.m` :j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.2b he le je je ie le ke ie ie ie le le le ke :j.hY.dD.dD.dD.dD.dD.dD.dD.dD.%j.%j.%j.%j.dD.Vh.is@hY.hY.hY.hY.X)@X)@(j.(j.m` m` he he he he he he uk l` l` oG.oG.-H.-H.:j.m` m` m` m` m` m` m` m` )K.)K.lI.'K.'K.<].~(.~(.6% 1% n` (j.(j.*=.H;@Lv.:j.9c 7c !% m@ t R|@3p%b.@^w$.3 Yn$4p%!F.!F.lb+Fh%0@>0@8G@#n@ { J8 h9 x9 +;@k .uc hw aG#%I$Kg%5p%6p%7p%8p%' %m+%9p%k-+0p%ap%bp%cp%dp%ep%fp%=w$}O#Q.@UA+dw+qf+:h+cm+!i@gp%hp%ip%jp%kp%lp%b~+I#%H#%g3%Q*%mp%5-%5-%[`${#%B*%#&%#&%[;%(+%|^$^]$^]$^]$6e$G~%G~%U!$P)$S'$S'$fm%vk$vk$fm%;y$-y$sh$B-%7l$//%//%>k$N*%DZ$m7$f6$g6$_T$)W$5Z$np%S)$~o$op%V!#S~@pp%qp%h|+OD@Ow#v)$L&#Lu 9q k($rp%p<$'Y$Du }g }g }g }g }f }f !M !M !M [g Dz+4z+4z+Q-$%-#Z^#sV@eq#Sh%>T.!U+5w$n>#BA$BA$}F$}F$r4$`P$Ry$Ax$Ax$kn$kn$~m$~m$~m$~m$ns$ns$ns$ns$~m$kn$Ry$Ts@<^%8p$8p$8p$<^%4Z.`o$4w+4w+ns$~m$~m$~m$kn$kn$dD$dD$i%%i%%i%%i%%Vy$Vy$dw$dw$/v$/v$CO#CO#CO#5F$cN$cN$bq$a9$,p$qw$$*$Bb#qw$qw$,p$,p$,p$Ej$b8$Ej$Jn#{ +{ +2S# *+''%U`$W,@,>+K6@s[$^M#J[#sp%sp%g&@~}@0T+CA$tp%tp%3)#|0#YJ#!}@Tb+*1@Z|@RU#RU#up%gB@J4#Gl+6~@6~@2G+2G+1G+AD+#a@#a@|=@|=@{k@{k@#9@{k@@B+)w+vD+wD+wD+wD+sr+1R+up+up+.B+.B+.B+fy+fy+Yn+p=$}&@}&@RO@RO@=m+1$@1$@YA+YA+2&@2&@3&@/+@(+@ir+mi+mi+mi+{_+F:+=g$6e@6e@h0#h0#:i#df#-l#-l#;f+%6 %*Y$BZ$BZ$D#%Q`$j{%yZ$g6$i6$u9$n=%!V$h#%&b%vp%vp%mm%so%wp%ok%dQ$&8%q7%-8%wo%wo%xp%yp%kf%Cf%zp%zo%Ao%Bo%;p%;p%;p%'Q$'Q$!R$Fo%L3#Sk%Xl%Xl%Wl%OT$jc%Go%!h%Ap%Bp%Cp%Dp%Ep%Fp%Gp%Hp%Ip%Jp%Kp%Lp%Mp%>4$Np%Op%Rn%Ol%Pp%Qp%Rp%Qi%Sp%Tp%/2$Up%Vp%Fe%@~$_d%_d%gX$gX$]i%Wp%Zl%2g%tm%>p%yM$pk%if%&0%*0%p6%2P$Wk%mY$S.%(}$v|$J1$_T$.!%m*%g]%h]%`&%+,%i6$+n%}g%A$%2;%~U$nY$;&%pY$*&%y-%z-%&X$c>%d-%SP$%e%Xp%,p%%e%9=%SP$jm%AS$rU$@*%%/%=}#k}%Rx$Qx$1G#Zt$q1$4|$4|$T[$T[$e<$e<$T[$T[$e<$Y_$Y_$e<$T[$T[$N)%N)%N)%yL$Ci$pe%rV#5l$_a@yV# 7@M<@MU#WH@.:$|T@}9@V[$7|$>c$kw$@}#@}#W4@k'$;>$q=$q=$q=$q=$-E#W1#bc#PL#bc#=l#*l#oi+#l#hc#Pn#Pn#p=$60#oe#|t#-:#:c@#9@<&@L)@{k@fz@;I$Yp%Zp%S##M2@0~@ky+zD+zD+zD+,B+x7%0]%Y{%Y{%3N#3N#eh#-_#-_#*9@mb#mb#4e@W6$8#%8#%^K@mq@k#$E+$A%%E+$,T@,T@R)@!K@,K@)K@YK+2 @>K@kX+8~@=h%O[$O[$6~@6~@7~@8~@3G+7=@E@@J #J #jX+5Z+5&@T,@T,@:P+=>+=>+:P+T,@T,@kX+T,@=>+=>+=>+T,@v;@m#$1#%DM@UQ@0&@=9@:x@ur+VH@Y+$+B+{k@K)@x;@YK+XK+_P+2O#ps$`p% q%&N$aE$y@%.q%$B$[,$es sG sG tG -E }g es es $9T#[X#@5#)2#!2#Jq#^2#^2#{2#Q7#!5#!5#W7#W7#]5#{5#Nq#Nq#@8#@8#q%,q%Cy |'%'q%0j%@m.Cw BI.y2.99.y2.)q%vQ@!q%z1@/I ;x Y{+{Z.|p%~q%^o%~4%%c%{q%]q%YT#w*$/D.PF+PF+^b+^b+^b++d+PF+^b++d+PF+P~ uq.uq.5e%^f%^f%n5%n5%]1%@g%/D.P~ x8.x8.be+be+13+13+ko.ko.)> )> )> )> )> )> )> )> i~ i~ Yt.Yt.Yt.i~ ,v.ZY Yt.i~ i~ i~ i~ ,v.,v.,v.i~ i~ i~ i~ i~ i~ i~ yj+PF+@g%@g%@g%]1%]1%]1%]1%]1%]1%]1%]1%]1%]1%]1%^b+9Y+be+be+be+{! {! {! {! ]! ]! ]! ]! ]! ]! ]! ]! Ea+]! be+be+]! ]! be+w8.5A.{! 8g.be+]! 5A.", "Sy.Sy.BW BW {k.{k.{k.{k.{k.{k.{k.{k.{k.{k.ge 7c .h..h.vk vk vk vk vk +h.vk vk vk .h.$~.$~.$~.uk uk uk uk uk uk uk uk sk uk :j.oG.tk tk uk :j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.ke le je je ie he -_ =_ je je ie ie le le ke :j.hY.dD.dD.dD.dD.dD.dD.dD.%j.Su$Su$Su$Su$%j.dD.Vh.9, G6.G6.hY.X)@9%.Tl Rl m` m` he he he he he he :j.-H.-H.oG.oG.l` l` uk m` m` m` m` m` m` m` m` !K.!K.!K.)K.'K.'K.jI.~(.^q%~(.T}%G6.hY.hY.hY.hY.r;.Ek$Ek$oG.Q_ U@ u+ j..W@$}t+Y~ 6] &q$/q%(q%u3%e`@_q%T.!U+5w$n>#BA$BA$}F$}F$r4$`P$Ry$Ax$Ax$kn$kn$~m$~m$~m$~m$ns$ns$ns$ns$~m$kn$Ry$Py$|S#|S#|S#8p$<^%4Z.`o$wy+4w+ns$ns$~m$kn$kn$kn$dD$dD$i%%i%%i%%i%%Vy$Vy$/v$/v$/v${m$CO#ln$ln$%u$a9$b9$0N$bq$b9$b8$_8$_8$,p$,p$_a$_a$Dj$Dj$a9$-c$K[#&c$k %N@%4w+]8$4Z.<^%`P$r4$k{$|K#D]$Q1%Pn$WJ#Fm$iq%:>%K8%K8%UL$&N$pz#aX#o+#jq%1C#kq%Oo#lq%mq%F4#$1@a^@Gl+H)@%ue%6 %CZ$BZ$$%%h]%M%%j{%h6$i6$Q]%c2%)U$h#%&b%oq%pq%qq%to%rq%sq%uo%tq%B8%uq%yo%vq%wq%yp%xq%yq%Cf%xp%Ao%;p%;p%zq%Aq%Yl%Yl%Wl%US$Zm%OT$OT$`i%`i%Td%Bq%}b%Cq%0Q$Dq%Bp%Eq%Fq%Gq%Hq%Iq%Jq%Kq%Lq%Mq%Nq%Oq%Pq%Qq%Rq%Sq%Tq%Uq%Vq%Wq%Xq%Tp%23$Dq%Yq%Zq%Fe%`q%`q%hc% r%cY$Aq%zq%Bo%sm%>p%yM$Ci%xM$ m%*0%p6%p6%T5%L`$1M$xZ$M`$J1$v8$.!%m*%g]%g]%&&%l!%i6$^Y$}g%A$%A$%}g%nY$;&%M+%`&%AZ$CZ$c>%b:%b:%RV$%e%Xp%Xp%R]%k{%0=%c-%[|%BM$@*%&M$-2#0E#:K#|2%z|%Zt$q1$4|$4|$T[$T[$e<$e<$4|$T[$e<$Y_$Y_$e<$T[$4|$c<$2q$1q$#<%bm$wI$EJ$!x$.O${x$.r%+r%.7@.7@6_$@r%11@wT#xT#'.$kw$@}#k'$k'$W4@S%$[*$q=$[t#-E#WF#lc#bc#PL#ni+*l#*l#oi+hc#hc#Pn#p=$60#60#-:#-:#-:#:c@&t@fz@fz@fz@6o@;I$v)%#r%S##M2@M2@ky+ky+6=@6=@#a@$r%%r%8d%8d%&r%9N$4N#>0$P3#_^#x)$lb#Ad%g %*r%]k#k#$k#$A%%r$%r$%r$%fm$fm$w;@]K@,K@)K@YK+YK+>K@v;@=h%Vh%}|$P[$P[$}|$a^@a^@}V+eX+U.@6h$U<#| @fX+5$@kX+T,@:P+=>+=>+:P+T,@kX+v;@kX+:P+=>+:P+kX+m#$O1#Z{%G@@8V@a=@=r%fh#VH@oe#15%s6%Rx#T##,T@>K@zM@vp#gX@P[#*t$Sy$|x@G[#-r%NO$E<%=S es sG sG tG -! -E es es r%R} ,r%@Y.[3%'r%)r%!r%^k@/-+37$+@%O&$~r%'3@Z}${r%]r%]O$EZ$6k@I2$G2$+2#]>$67$^g$SL#[l#@o#Ic#{2#{2#U7#;o#A7%95%95%95%]5#{5#Nq#QB#.8#@8#]$/r%L8%g~$j1$)<$3L.@p J4@{*@:N.(N.BL.{N.*[@f9%(r%_r%f++:W+2,%Dy 9$.G..g[ Cw LH :r%kM.HH.-i )> )> )> )> )> )> )> Yt.)> )> 6g+)> Yt.,v.ZY ,v.,v.,v.,v.i~ i~ i~ i~ Yt.Yt.Yt.Yt.Yt.Yt.Yt.oA+^b+]1%]1%]1%@g%@g%@g%@g%]1%]1%]1%]1%]1%]1%]1%^b+x8.8g.be+be+{! {! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! $(+5A.8g.w8.be+]! ]! ]! {! be+w8.8g.{! ]! ", "ee ee fe fe ge ge ge ge ge ge ge ge ge ge ge 8c +h.+h.+h.+h.vk vk vk +h.+h.vk vk .h.$~.$~.$~.tk tk tk tk tk tk tk tk tk oG.:j.oG.tk sk uk :j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.je xn.xn.je le ;_ X_ l.je je je ie le le ke :j.hY.dD.dD.dD.dD.dD.dD.dD.Su$Su$3o.3o.3o.Su$dD.dD.VW.9, G6.hY.X)@9%.Rl Ql n` m` m` m` m` m` m` m` m` R_ R_ oG.oG.m` m` tk m` m` m` m` m` m` m` m` kb.kb.!K.mI.lI.'K.'K.jI.mI.AX$AX$AX$(j.(j.Tl Tl ~*%-,+Mv.sk +h.L) $. A wq.Oa [; '!%4r%xh 5r%Zn$}f@28%jr `k@Tx@2E@9G@8m +I.SU.@;@an ^( %9 // o_ 2r ;n#)m$ /@!q$xR#T.!U+n>#o>#BA$}F$}F$r4$r4$`P$Ts@Ax$Ax$kn$kn$~m$&W#&W#&W#0r$ns$ns$ns$~m$kn$Ry$Wz$e.%e.%e.%|S#8p$Ts@4Z.wy+wy+ns$ns$~m$kn$kn$cD$|C#`_#`_#|C#:$%:$%:$%:$%Vy$Zz$Zz$Zz$RA$pr%(a$(a$O#%K$+}0$8v$7v$7v$qr%80$Q'$rr%km$&c$&c$k %/a$3)#k7#Tz$&I$SH#i(%#;%~!%'=%L8%Y>%X}%8>+sr%7x$tr%ur%Y:$w}%l4#vr%wr%@4%xr%B>%yr%zr%Ar%Mi$ii$P8@)=#Br%Y_#Cr%:{#Q;+Rs@J4#fX@[V+^^#;B+8V@K@@_^#*9@Q6#-_#{k@}=@Jl+g~+QK+oy+sr+1R+>w+>w+wV$~i@`K+`K+-9@-9@{k+}&@}&@V4@V4@1$@ZA+ZA+/+@3&@cc#Dy#[t#3&@v&@>k+Kb+Kb+#4+#4+cd+cd+cd+E:+6e@6e@YN#Wl+ @#TR#X1#Mg+_+Ri$:V$+F$+F$+F$_V$_V$im%Dr%Er%Fr%Gr%Hr%`j%k{%42%x-%mW$mW$>k$E#%^U$;&%m*%+4$W'$.4$np%iW$)V$)V$5S$ d%Ir%qq%Jr%>d%Kr%uo%om%*8%vn%yo%xp%Lr%Lr%Mr%Nr%Or%Pr%Qr%Rr%Sr%Tr%/P$Ur%Vr%gX$Wr%:d%Zi%Xr%Zi%Zi%T)$Yr%xa%Zr%`r%%p% s%.s%+s%@s%#s%$s%%s%&s%*s%=s%-s%;s%>s%Np%Op%,s%'s%)s%!s%~s%{s%;i%]s%a4$^s%/s%(s%Sd%`r%_s%:s%za%Xl%%QV$QV$H8%`>%ng%ng%R]%P2%S1%RP$dm$EM$e<$%2#*2#*2#*}#j}%g}%6N$D-%xL$*Z${-%{-%'&%yD$wL$Hg+Ig+/]+/]+a~+ek%vV#rQ$xV#>r$,r$;r$nt$|s%1s%Dt$2s%3s%4s%@`#>($mW#.s+x&@O3+N&+Kn+!P+Ft+(T+ay++w+(T+ay+}R+Kl+PK+uI+f~+^/+St+St+[w+Yn+-9@-9@ L+-w+-w+#k+#k+<&@<&@<&@#9@*w$a=@0=@0=@0=@a=@S##{]%S##S##Pt+%B+%B+%B+*B+~w+,N$5s%5s%tS$5N#u!$u!$v9#:^#:^#W6$l@%]k#y0%%k%s!%t!%Q,@r!%`V$S)%`V$r$%t;@DD+|V+RQ@kX+YK+:P+>K@v;@=h%O[$6~@&9@&9@&(@:/#4%$7V@nZ@~^#W|#W|#K #8=@wp#wp#7=@:P+AI+zI+3G+T,@wp#m#$8=@T,@3G+:P+wp#)<%6s%7s%mq@9$@a=@*w$#9@:x@fh#,N$>;%qt$R,@fm$AM@pZ@8e#yA#Ux$Q@%A+%=1@mo%~-#z/%y_%8E$DN s[@rG sG -! -E es es T.2I.T&$0s%7T@^M#dD$as%bs%cs%Iz$z#ds%es%es%es%J0#`7#Mq#{5#`7#]5#QB#Nq#(e%fs%_e%X7#_e%W7#`7#^E#:I#)5#WA$F0#'6$C0#CR#.z#>z#-5#Q[$gs%E~$+K#D_$GZ@[T+uI+f1@sG+s(@T^@Q3#hm@Br+U{$dX#|6$a_#6<$hs%'<$QM.|L.8O.|} _Q.5=$GC.v4$is%js%ks%BK@]I@;A$_W+Dq.uu GJ+pq+rC 6$.=e i=#ls%h~#w< g7 0d.8S.{Y m`.CX@z3+{f%ms%jb%ns%]Z@os%6;@vv+P~ P~ /D./D.PF+PF+PF+ F./D.+d+^b+P~ uq./D.Fc%^f%n5%$c%ps%Fc%@g%P~ uq.x8.x8.be+be+13+13+ko.ko.)> )> )> )> )> )> )> )> )> 6g+]$@]$@6g+)> i~ ZY KB ZY ZY ,v.i~ i~ Yt.Yt.6g+6g+6g+6g+6g+6g+6g+U/@+d+Fc%Fc%]1%@g%5e%5e%5e%]1%]1%]1%]1%]1%]1%]1%^b+x8.8g.be+be+{! {! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! T_+5A.y{ gA 8g.]! Ea+Ea+{! 8g.gA w8.be+{! ", "xn.xn.je je ie ie ie ie ie ie ie ie ie ie ie .h..h..h..h..h..h..h..h.vk vk vk .h..h..h.$~.$~.Rl Rl Tl Tl Tl (j.(j.(j.n` n` n` _j.(j.Tl Tl Tl uk uk oG.oG.:j.:j.m` m` m` m` :j.:j.oG.oG.uk uk :j.:j.:j.:j.:j.:j.:j.:j.uk oG.:j.m` m` :j.oG.uk hY.hY.hY.hY.hY.hY.hY.hY.hY.hY.G6.9, 9, VW.8v.8v.9, 9, 9, 9, 9, 9, 9, 9, G6.n` n` n` n` n` n` n` -H.l` :j.oG.oG.:j.l` -H.m` m` m` m` m` m` m` m` le le HO.le le le le oG.2b :j.oG.:j.l` l` m` oG.-,+-,+AX$_j.d( &% S& $. _{ h$ W2@L!$&s j0 [u@0O.c{ 'b@5d #n@GM.qs%cf +I.u[@OD+ZP.6m eG+.w tc C~ mb rs%,r%qV@#{@1w$;v$3w$GT$vx$L~$O$+:B@z*+ss%ts%AL$5]@k1@]v@us%O6+HG+vs%pg$ws%xs%&s#ys%zs%As%t @G5$&1#lV@cK@D($ir%w,%d@%NC$B*%Bs%Bs%{/%X+%2-%A*%jr%::$uM@Cs%i*%|M$O<$.{$}s$8=%t8$B!%aC$mt${e%Tp$Aq$Ds%Es%C=%E=%8l$8l$R`$4P$DZ$/V$zh$:T$ j$ 4$P1$}:$nM@GO#%r$pn%X $k'+T2@g#@Mj#;1+{)#[g ],$5'$[|@Jv Jv =E =E =E =E Y;$Y;$1i 1i !M !M D&#Dz++x+36$q[#Zx#4O.YN+C7%5Y+A[#[3%}(%]q$aX#aX#I[#I[#I[#4Z.Qy$]8$~m$~m$0r$/9$/9$)]$)]$Fs%N@%ns$4w+4w+`o$Gs%Hs%Hs%Hs%Hs%Gs%C~%u-$Is%Js%Js%K^$l7#l7#}x@#z$Yj+wg+Ks%Ls%Ms%~`#Ns%aD+Ne$K^$Js%Ry$Ry$IR$Os%CA$Ps%w;%Qs%Qs%&K$&K$!Q#RK$z[#~Q#d%%d%%Rs%Pw#i($%$#X:$tc+NB@+{#07$Wj$j&%fq$d9%-0@hq$,u$.6%Rs$Rs$V3@UB$Ss%Ss%Ss%Ss%Ss%Ss%gq$gq$s1$fq$Ts%H&#h^@z<@5%%ii$Us%V)%Vs%s##O+#dH#Lq@2#%_^$Ws%Xs%Ys%Zs%`s% t%Ox#b~@-(@0$@)~##9@-w+xp+tp+tp+#m+@m+&!%&!%mq#}w+{k+}&@hc##l#On#On#.w#Z-$^|%^|%q=$q=$lg@-E#7k@`J#{_+`b$^|+^|+b[+b[+ZA+2&@(+@ir+_1@gr+hr+<1@|}@|}@oq#-X#-X#-X#-X#1t#1t#1t#4t#3t#:@$f8$f8$57$>/$*w#%2+~6+$2+]6+;t$C0+7[+A0+,|+^>$hD$:z$KC$&M$/$%=X$;G$+O$+O$+O$!x$!x$:V$$w$>o$>o$ap$O*%N*%R`$9l$9l$O*%N*%8l$0l$N`$W'$;5$S)$L1$7:$}z$`B$O$%Wk%Z=$OC$fl$Td$so%t8%ok%=7%o7%qm%B8%-8%wo%xp%Qr%lf%lf%Mr%.t%+t%]d%1I$Pw$Dv$@t%#t%$t%/K$8k%%t%&t%*t%=t%-t%;t%>t%0W$%p%,t%R<#'t%)t%!t%~t%Ni%{t%]t%W1$W1$^t%/t%(t%_t%_t%:t%%QV$lk%nq%=O$sn%rt%st%tt%tt%LR$J'%e<$KC$&y$bE#06%):#W6% 8%ut%6i%[[+RL$$_+7e$FZ@zj$kV+4h+2h+x^@3_$A&@2g@vt%vt%wt%xt%'1$yt%zt%At%91@Bt%Ct%Dt%Et%Ft%!j%;5@DO#[3@Vt+Tx#~ +Z.+bN#{B+uy+Jq@aN#46+aN#aN#[_+b=#|~+0r+fB@L4#;(@;(@:f+Q,+lX+*>+0G+Q,@5o@t<@9=@EM@^=$).$).$9$@9$@Z.@|=@Yp%D^%Gt%Gt%Ht%Ht%It%Jt% 3%E^%hy+@B+{k@|=@|=@O)@_w+0G+k#$k#$x;@6$@SQ@;'%Kt%b3%=r%b3%*w$>;%qt$S##R,@W{@2T+r<@T,@8~@7=@r<@T_@T_@T,@5&@fX@Z&+,p$Dj$@d$Ej$[{#M+#jX+T,@< @6=@wp#fX+jX+fX+jX+fX+jX+fX+4G+2R+5$@gX+jX+fX+E@@v;@ZK+t<@t<@O)@O)@4 @0&@4 @9$@^K@x;@SQ@'K@Lt%H.%$@%c9$Dj$>H$Mt%0/$^B+M~$l4#iq+lh# -#8r es i0$Nt%Kv }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f 9~ 9~ 9~ 9~ 9~ 9~ 9~ 9~ 9~ 4. (. e$ O6@R3$YC+Aa fg &A@w/@_0@I8 s~+5|@OD+u[@5|@+;@6m KI+KI+RM.w7 IR.$u%-1+&K.u%,u%'u%)u%!u%~u%{u%]u%^u%]x$cB+>u+of+zq@/u%,y$7c$W&%S2%(u%{/%X+%E.%A*%p7$q7$yO@]}$vM@}:$^}$9a$G1$G1$8c$_u%:u%:u%w,$e6$O*%O*%C=%N*%N*%DZ$DZ$#DR@4z+|u%1u%;P u1$Jv =E =E =E =E Y;$Y;$1i 1i !M !M D&#Dz++x+n'%jx@.B##{@6O#S^$6=%8R+p>#4O#]q$aX#r4#r4#I[#I[#4Z.4Z.]8$]8$&W#0r$/9$^q$4v$pr%0r$ns$ns$]8$`o$`o$Gs%jq%Hs%Hs%Hs%Gs%C~%u-$K^$K^$K^$K^$K^$l7#l7#Ne$wg+2u%2u%3u%4u%//#i7$5u%6u%iB@|)#rV$'Z#H{%H{%<>%7u% 9%^J$^J$8u%8u%M7%9u%+.@}=%V{$['$MX$o9++/@~}+G&#|d$R-$S-$>M >M 7r {a _e ^d Iu 1/$1/$l($l($1/$Y{$Z{$Z{$Z{$Z{$Z{$Z{$Z{$0q 0q 0q 0q _e 7F ml |>$0u%au%#W#u4@;/#Ni$V_#km$8|%(^$bu%cu%du%L.%eu%fu%gx$ci@Ae@:^#X6$a&@Jl+1]+up+tp+#m+&!%&!%Vt$fw$}w+{k+}&@hc##l#On#.w#Z-$Z-$^|%^|%lg@lg@8k@7k@:G+u&@M0+`b$M0+^|+b[+b[+YA+ZA+='@='@_1@_1@fr+fr+ec@:1@k'$qq#1t#1t#1t#1t#$w#$w#&w#>/$57$f8$f($Y1#7N$&w#.K#d8+;6+/>${6+{6+B0+A0+}T#A0+w'$2I#%2#%2##2#&;%;G$xV#!x$!x$:V$:V$7S$7S$yo$yo$4P$v%,v%'v%vp%S0%G$%o8%p8%Yj%ot%ah%pt%L*%QR$SP$TP$k(%c>%QV$g6%g6%f6%rt%)v%)v%!v%!v%wS$*#%0d%LC$[f$,&%%_+mS$ve$Jz$~v%6*%sC$fT$3*%+}%X~@}N+:e@{v%]v%c*$^v%yB@/v%(v%_v%:v%;%qt$;I$Q,@0~@t;@cX+kX+>}@[ @;}@4%$}V+3G+4G+CI+u_%$*$%*$,Z#ar$j %%*$J3$Wx$gX+T,@W{@T_@7=@gX+gX+gX+gX+gX+gX+gX+2R+2R+gX+gX+fX+fX+4Z+v;@P)@T##O)@O)@0G+0G+8$@H@@G@@G@@F@@CO@I.%Lt%H.%$@%c8$>b$bv%cw$tp%l[+x[#&v${U+NO$es$J!$)M *E &E ^Y@}f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f 9~ 9~ 9~ 9~ 9~ 9~ 9~ 9~ }f 5[ sv%*Z+*Z+&c%sv%Ic%ME+Ic%Ic%Ic%&c%&c%&c%&c%&c%uq.P~ P~ P~ /D.PF+PF+PF+/D./D./D./D./D./D./D./D.#u%#u%Fc%Fc%]1%]1%PF+PF+'g@Lh+{! be+8g.be+be+{! {! {! {! {! {! {! {! {! be+be+be+be+{! {! {! {! 6g+Fu#Fu#Fu#Fu#Fu#Fu#Fu#8S.8S.):+):+a(+a(+.d+)> ^b+^b+^b+^b+PF+PF+PF+PF+^b+^b+^b+^b+^b+^b+^b+Lh+'g@{! be+8g.8g.be+{! ]! 8g.be+{! ]! ]! ]! {! {! /D.P~ P~ /D.Lh+'g@9Y+y{ ]! {! @$+=L =L @$+", "sk sk tk tk uk uk uk uk uk uk uk uk uk uk uk .h..h..h..h..h..h..h..h.vk vk vk .h..h..h.$~.$~.Rl Rl Tl Tl Tl (j.(j.(j.(j.(j.(j.(j._j._j._j._j.uk uk oG.oG.:j.:j.m` m` m` m` :j.:j.oG.oG.uk uk :j.:j.:j.:j.:j.:j.:j.:j.uk oG.:j.m` m` :j.oG.Tl _j.hY.hY.hY.hY.hY.hY.hY.9, 9, 9, 9, G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.oG.oG.:j.:j.:j.:j.oG.oG.m` m` m` m` m` m` m` m` he he he he he he he he 2b ke le ke 2b 2b he oG.mI.AX$AX$n` m` d( &% S& Q% 4. v$ a. 0: W2@r,$I'$.{ k[@=2@17 ii 17 pO.pl@9T.7f 5,@6L.ji xy+ji =y ia _N.tv%(z uv%@6#vv%t[#y/%A1%Zx$SF#J{$NJ@M#$, $Ar+VF@1Y+M{$wv%xv%yv%zv%/k$Av%Bv%Cv%Dv%Ev%Fv%r}$CQ@,-@Gv%C&@pf+::@k(@H1$U2$/+%q=%V3%K^%e@%W&%z*%[s$1b$[]$x9$9a$9a$|:$|:$]B$H1$O1$8c$8c$t8$q0$>5$,5$f6$cp$'t$m7$5c$5c$d6$e6$>y$s9$T2$N1$N1$T2$G1$yO@Hv%(Y$Iv%Jv%Kv%V`$sZ@g#@3O.f]@{L$F&#~@$Lv%5'$u1$Jv =E =E =E =E Y;$Y;$1i 1i !M !M D&#Dz++x+Pz$m8 #4O#]q$aX#r4#r4#I[#I[#4Z.4Z.]8$]8$&W#0r$/9$/9$/9$/9$&W#~m$kn$Qy$4Z.4Z.<^%aX#8p$8p$<^%.v@`o$]v$]v$]v$4w+]8$~m$~m$~m$Mv%Nv%Ov%Ov%Pv%i7$x&+x&+. +r>#V##O]+^B+C(%n>#`J$$J$C%%Qv%Rv%CT$A&%2j+ y$Sv%K@%J@%Tv%Ss%Ss%Uv%Vv%Wv%Xv%Yv%Zv%Zv%Zv%6r @y _e `v% w% w%a|$a|$a|$l($1/$.w%0q 0q 0q 0q 0q 0q 0q `v%+w%+w%+w%+w%0q Z{$s}%ck w(#@w%#w%X}%e>$Fm$U~$$w%7_%%w%6v%&w%*w%=w%-w%+W$G@@DM@^K@k#$t<@w)+wD+1R+tp+#m+nq#nq#5f#*m+*m+St+St+~k+=m+1$@ZA+2&@cc#yy#yy#}t#}t#oD+u&@t&@:k+M0+`b$M0+^|+mi+mi+YA+YA+='@='@_1@_1@<9@<9@5k@+}#k'$qq#C_$1t#D_$D_$:@$:@$>/$;6$;6$57$Y1#d0$d0$>/$%w# ;$7q$gd+$2+$2+7[+7[+;|+7[+5[+hD$&;%F2$F2$ :$mK$9S$:V$+F$+F$_V$;o$;o$yo$yo$4P$h%(9%n7%yi%dQ$sl%q7%;8%vn%yo%zp%yq%xq%xq%;w%>w%Mb%,w%'w%)w%!w%fc%~w%{w%%t%]w%&t%^w%43$/w%i5$^s%%1$(w%~h%_w%$1$:w%[e$Q#Hz$Qb$}Y.uw%h'+vw%CW.)`+Z@+o%$,/#z[#!Z#Y]$bX#sx$B~$ww%w!%#;%Y~%B~$+{%SH#=o$xw%e_%yw%(d$wx$&N$2c%]q$aX#I[#s>#l #2)#s##ki@v<@m~+U`$||+Cb#dN#%*${ +-t@YR##/$zw%-I$ K$kF$zM@jX+zI+1G+=B+yD+qp+}(@}(@mr+sD@fz@{k@}=@Z.@Z.@Z.@8&@9$@mq@Tm#Tm#7$@!_$+W$SQ@E+$r;@A%%s;@]K@|V+)K@wp#4Z+oi$yA#H4#DA#Aw%a=#a=#2O#U4$<{#8]+Ei$rr%&c$/a$> $ *+dN#$*$BO@7=@S,@S,@4G+4G+4G+4G+4G+4G+4G+4G+4G+4G+5$@5$@jX+jX+E@@v;@>B+K)@0G+0G+0G+*>+H@@H@@6$@W.@F@@CO@.@%P^%H.%tr$b8$-c$*I$^v$4V+DU.8M@RF#y@%A[%1c#Q-$)M }g Kv v! }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f 9~ 9~ 9~ 9~ 9~ 9~ 9~ 9~ }f $[0 F'#`>$yg@d_@,o @I.-z.O[@Bw%t>#z#l}%I~$yf#7T#7T#Z_$CB#1T#1T#D0+T@%;k+by+%s+:e@;5@R!$Hw%t{%w<@]l$t[#O%$GT#M&#bj ~t@C;$Iw%) $va#Jw%Kw%Lw%4Y.OI b|@FA@mq Mw%&(+EO qs.6Y s-.;h.zu.!~.M<.Nw%Ht {^.Ow%Jy 38 d>.*0+nh.*Z+&c%sv%Ic%Pw%Pw%;~@Pw%;~@;~@Ic%&c%QU+sv%sv%/D./D./D.PF+PF+PF+^b+^b+/D./D./D./D./D./D./D./D.Fc%Fc%Fc%]1%]1%]1%PF+PF+x8.9Y+be+{! ]! {! {! be+{! {! {! {! {! {! {! {! ]! {! {! {! be+be+be+8g.)> )> )> )> )> )> )> )> ,v.,v.i~ i~ Yt.Yt.)> )> +d++d+^b+^b+PF+PF+/D./D.^b+^b+^b+^b+^b+^b+^b+Lh+'g@{! be+8g.8g.be+{! ]! be+be+{! {! {! be+8g.w8.Y@$PF+P~ P~ 9Y+Lh+9Y+x8.]! {! @$+=L =L @$+", "sk sk tk tk uk uk uk uk uk uk uk uk uk uk uk .h..h..h..h..h..h..h..h.vk vk vk .h..h..h.$~.$~.Rl Rl Tl Tl Tl (j.(j.(j.Tl Tl Tl (j._j.n` n` n` uk uk oG.oG.:j.:j.m` m` m` m` :j.:j.oG.oG.uk uk :j.:j.:j.:j.:j.:j.:j.:j.uk oG.:j.m` m` :j.oG.Tl _j.hY.hY.hY.hY.hY.hY.hY.VW.VW.9, G6.G6.hY.X)@X)@G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.tk uk :j.m` m` :j.uk tk m` m` m` m` m` m` m` m` 2b 2b 2b 2b 2b 2b 2b 2b 2b ke le ke 2b 2b he oG.mI.AX$kI.n` m` d( ^* ^* l& C. W l@ e. +< !/ @^.N0 l! <<@ii 17 17 TM.er o.#SM.m##7f _B+-*+ua#KI+;l ae@o8 SJ$Qw%Rw%FC.{[#TO$iT$u1#9,%e<%Zx$&R$sx$TF#S2@)2+)=%e'%Sw%Tw%aE+Uw%Vw%Ww%Xw%Yw%Zw%`w% x%.x%d4++x%;3@r6+kF@%#$0c$7:$J1$d>%h=%g=%_~%C#%p*%@.%@x%@x%y %q*%0a$0a$0a$/}$P<$N1$O1$O1$O1$U2$ 4$W'$.4$V'$#x%e6${e%g>$g>$w,$_u%P1$]B$/}$t|$t|$9a$0a$(B$G(#$x%%x%&x%S-+Bp+9x$#)%.B#Y^#`~#D&#n!$E'$*E Cu *E *E *E *E Z;$Z;$1i 1i !M !M D&#Dz++x+G)$m8 OB@eq#c]@p%$ @$_g$p>#4O#]q$aX#r4#r4#I[#I[#.v@4Z.]8$]8$&W#0r$/9$/9$ p$ p$&W#kn$kn$Ry$Ts@<^%|x@hE#aX#aX#aX#.v@/d$]v$R2@R2@4w+4w+~m$kn$kn$Is%N1+A)@A)@A>#. +. +)/#*x%Ni$Ow#rX+uD$w[#=`$}|%~U+=x%-x%;x%>x%,x%'x%)x%!x%~x%{x%7'$bq bq +w%]x%aq ^x%/x%^x%^x%]*$bq 6r 0q ]x%(x%_x%_x%i.$a|$.}$1/$.w%0q 0q 0q 0q 0q 0q 0q `v%`v%+w%]x%]x%+w%+w%:x%@%K*$Q1$4H$cG$oN$iu%9x%0x%$7%et%[P$zi%ax%;8%bx%yo%cx%yq%dx%ex%ex%,a%,a%mf%mf%'w%fx%gx%hx%{w%@~$ix%jx%=t%kx%i5$lx%'t%`n%3h%Dn%mx%cg%nx%ox%px%qx%%i%rx%sx%@U$tx%ux%vx%wx%Uq%xx%yx%zx%Ax%Bx%Cx%Dx%Ex%Fx%,i%Gx%Tu%Hx%qx%`n%Ix%zb%Jx%Kx%Lx%Mx%QU$sI$^W$jg%[d%~a%{a%|d%pk%Nx%cQ$yi%n7%n7%nk%t8%#8%~k$so%Ox%ow%qq%Px%Px%Qx%S<$tF$S]#B,$+{$K1$_T$m*%+,%&&%h]%l^%i]%P`$$.%5-%|f$&X$SP$g6%c-%jm%H8%H8%Ds%B+,B+0G+0G+*>+*>+CD+CD+F@@F@@CO@'K@.@%P^%H.%tr$b9$-c$CO#Vy$|0#N$+3|+3F$~`+r1#A/%;g$'M }f Kv <|@}f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f 9~ 9~ 9~ 9~ 9~ 9~ 9~ 9~ Z;$9~ es es y%,y%x +0F.f+%nx@D9+(y.xn ,g+LL.}B 'y%)y%1B 34@oe$g_.(y+!y%~y%4 .Zf D, T/@6g+nh.;~@#0+A{$sv%Ic%&c%QU+;~@Ic%Ic%Ic%&c%QU+QU+vv+PF+PF+PF+PF+^b+^b+^b+^b+/D./D./D./D./D./D./D./D.]1%]1%]1%]1%]1%]1%PF+PF+.s.y{ be+]! 5A.]! {! be+{! {! {! {! {! {! {! {! {! {! {! {! be+be+be+be+)> )> )> )> )> )> )> )> ,v.,v.i~ i~ Yt.Yt.)> )> ;~ +d++d+^b+PF+/D./D.P~ ^b+^b+^b+^b+^b+^b+^b+Lh+{! {! be+be+be+be+{! {! be+be+{! {! be+8g.gA `Y {y%+d+/D.P~ x8.9Y+9Y+x8.]! {! @$+=L =L @$+", "sk sk tk tk uk uk uk uk uk uk uk uk uk uk uk .h..h..h..h..h..h..h..h.vk vk vk .h..h..h.$~.$~.tk tk uk uk uk oG.oG.oG.uk uk uk oG.:j.m` m` m` uk uk oG.oG.:j.:j.m` m` m` m` :j.:j.oG.oG.uk uk :j.:j.:j.:j.:j.:j.:j.:j.uk oG.:j.m` m` :j.oG.Tl _j.hY.hY.hY.hY.hY.hY.hY.9, 9, 9, G6.hY.X)@X)@X)@G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.uk oG.m` l` l` m` oG.uk m` m` m` m` m` m` m` m` 2b 2b 2b 2b 2b 2b 2b 2b 2b ke le ke 2b 2b he oG.lI.kI.kI.n` m` d( !1.!1.fd #. X k@ O; #v e, ad ]y%FE#|A+eM+IA@^y%[u@k0 Sn /y%ts ts 7L.i[@o.#9T.KI+f_@3=.^b XY+XY+XY+(y%ud$j>@Nj#t[#XH$k8${}%XH$QH#AV#VJ#rx$#B$_y%d<+:y%y$_u%:u%f}@S2$ti%H1$^}$0a$|;%9y%@.%0y%x %H(#ay%&l%by%cy%4<+Pw#X:$e]@g9%s1%Jt$;P R5@*E Cu *E *E *E *E Z;$Z;$1i 1i !M !M D&#Dz++x+G)$m8 OB@eq#c]@p%$ @$_g$p>#4O#]q$aX#r4#r4#I[#I[#.v@4Z.]8$]8$&W#0r$/9$/9$ p$ p$&W#kn$kn$Ry$Ts@<^%q4$U_#hE#hE#q4$~=#B1#|)#R2@R2@4w+4w+~m$kn$kn$Is%l #Vs%Pr#ts@k$+Ni$dy%;/#-/#i($~q$L+@%I$WR$~p%.Q$ey%$|$fy%gy% J$j!$`I$ZI$hy%iy%vt Iv Iv n($jy%ky%H%$`I$`I$`I$H%$H%$hy%hy%ly%|A my%iy%Bu Bu Iv Iv bs r_$r_$r_$r_$r_$r_$r_$wt r_$+y hy%hy%hy%hy%`v%69 l<$ny%oy%py%be@-8$qy%ry%sy%ty%V,%UY$uy%H0%7O$Hz$9k# c%cH#'2+u_%R,+>T@;B+@%bG$tF$4H$uF$z8$/X$wy%xy%7b%yi%[P$a%>a%>a%,a%>a%fx% r%zy%:d%@~$Rd%*V$0R$kx%Ay%lx%By%Cy%Dy%Ey%Fy%Gy%Hy%Iy%Jy%!i%Ky%ew%Ly%>i%Qu%My%Ny%Bk%Oy%Py%Qy%Ry%Ry%Sy%Ty%Uy%Vy%Wy%Xy%Yy%Zy%fw%qx%ox%`y% z%.z%+z%@z%en%#z%Le%^W$9h%{a%#0%4b%$z%Xb%xj%cQ$[P$yi%n7%n7%nk%nk%ft%@8%to%%z%pq%Px%ja%ja%&z%ht%a&$(B$x9$9a$t|$3P$f=%m*%#%%A~%P`$!B$$.%v,%/;%K;%rF$QV$A-%//%Es%z%,z%'[#C>#Pr#hE#f0$sm#j8$}6$S^$;W+gU$!q$C(@8s 9h 1,@1,@2,@Qf@'z%)z%'a !z%e.$~z%{z%]z%{z%^z%Q+#Ym@Ym@Ym@*a@*a@*a@*a@I&#/z%(z%(z%(z%~~%_z%#g+(z%(z%(z%(z%qy%#g+<'$97$k[$ds$iT$iT${(%&i#!`+=`$[3%!Q#<>%FC$@/$ZR#n~+1|+M[#N[#7o@N;$B2$e'#1O#]-+DD+9=@8&@9$@9$@EM@EM@!_$+W$@@%g^%;L$!_%=@%:z%2#%cN#2S#j %j %Ei$>>+_-+_-+:-+4)#I4@3z@u-$r4#jq%B+0G+9G+3 @H@@H@@CO@CO@AM@qZ@.@%P^%aq$tr$bq$Dj$%u$/v$&c$t8+88$pl%&i#~p%'n#$B${c$!J *E -! }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f Z;$9~ es es 6+`-$Mg+._+7~+L_@1z%B(#^j%)'$9T+2z%ZR$3z%4z%4G$,f#i!@Uk$;1+uK@;K.7O.Xj 10 Aa+5z%}Q.}K 6z%7z%XR 37+zh%Ar.Z*+j!+8z%hB.9z%Aa.0z%az%eY+bz%Qv.cz%T* K) Y5 34.3K@^b+OJ.OJ.OJ.l`.l`.OJ.vv+w*$vv+vv+vv+w*$Eo+Eo+Eo+2&$^b+^b+^b+^b+PF+PF+PF+PF+/D./D./D./D./D./D./D./D.@g%@g%@g%@g%@g%@g%^b+^b+.s.y{ be+]! 5A.]! {! be+{! {! {! {! {! {! {! {! w8.w8.8g.be+{! ]! 5A.5A.)> )> )> )> )> )> )> )> ,v.,v.i~ i~ Yt.Yt.)> )> 'g@'g@Lh+Lh+9Y+9Y+x8.x8.Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh+be+be+{! {! {! {! be+be+be+be+{! {! be+8g.gA `Y {y%Y@$/D.P~ x8.Lh+9Y+9Y+]! {! @$+=L =L @$+", "sk sk tk tk uk uk uk uk uk uk uk uk uk uk uk .h..h..h..h..h..h..h..h.vk vk vk .h..h..h.$~.$~.tk tk uk uk uk oG.oG.oG.oG.oG.oG.oG.:j.:j.:j.:j.uk uk oG.oG.:j.:j.m` m` m` m` :j.:j.oG.oG.uk uk :j.:j.:j.:j.:j.:j.:j.:j.uk oG.:j.m` m` :j.oG.Tl _j.hY.hY.hY.hY.hY.hY.hY.G6.G6.hY.hY.hY.hY.X)@X)@hY.hY.hY.hY.hY.hY.hY.hY.G6.G6.G6.G6.G6.G6.G6.G6.:j.m` m` l` l` m` m` :j.m` m` m` m` m` m` m` m` he he he he he he he he 2b ke le ke 2b 2b he oG.jI.jI.kI.n` m` +h.+h.!1.6c Q% t W 5. / e# s2 >D t@%dz%-n+&s HC [u@ts ts ts ts ts Mt Mt Mt Mt OD+OD+OD+g{@FZ.*<@ x ,<@x-$@7#.#+gk@ /@ZN+r[#H!$GT#K&#()#}=%Qz$ez%fz%gz%hz%iz%jz%kz%lz%mz%nz%oz%pz%&+%qz%rz%zG+3V@5H$PC$sz%hW$hW$Q<$hW$S.%1:$|;%@x%@x%V.%V.%@.%9y%|;%q*%/}$/}$Z!$N1$N1$Z!$S)$J1$K1$u|$N1$G1$P1$}s$G1$vM@^}$x9$|:$tz%@x%v %s*%v#%t#%@x%t<#uz%vz%wz%xz%~1$rK@.6$,f#.{#{L$fP@k$#dP@}g Du }g }g }g }g }f }f 1i 1i !M !M D&#Dz++x+Pz$m8 #4O#]q$aX#r4#r4#I[#I[#.v@.v@`o$]8$~m$0r$/9$/9$/9$0r$&W#~m$Qy$4Z..v@|x@q4$U_#U_#|p#q4$L%#B1#g&@|)#]v$]v$]8$]8$]8$~m$`o$B1#9!$S2@Ow#+v@j8$0&%VJ#-r%z~$}=%5r$j4#XR$wd$'x% N$@I$tj%Y;$5'$}g Kv Du Ww yz%zz%@}$Az%or%Bz%Ov wt v~$v~$!J !J H%$hy%|A hy%hy%iy%iy%vt Bu Bu vt +y +y +y +y +y +y +y +y wt r_$+y hy%hy%+y +y .w%!a yt -b Cz%0|$Dz%Ez%Fz%Gz%iF#vd$+3%9#%@J$Q;%5Y+9>+Vx#WF@y[+7Z.eZ.V0+! +-K@f^@my+Jl+-w+VH@eK@I6@Sn+tb+%w+.m+St+~k+=m+=m+RO@RO@=m+~k+St+Kt+Kt+^d$/$>/$;6$d0$57$.K#In$In$7q$%2+$2+4[+;t$4[+4[+6[+6[++2#F2$&;%*Z#BJ$-G$_V$_V$(V$(V$0p$Aq$yo$yo$4P$A%nL$,A%^W$D %qk%Di%]a%pc%$z%'A%)A%=7%[P$dQ$yi%n7%!A%nk%nk%t8%ft%rq%~A%pq%{A%]A%^A%/A%Sd$j/$3^$x9$9a$.{$3P$f=%m*%#%%l*%$.%$.%YB$:+% ,%tz$0g$Ti$-y$Q)$T'$f}@gq@jF@)'@F6+D|+(A%_A%:A%v(@^x$0e@l>#po@57@LJ@t@+-[@O#$(5@3O.[N.7O.pH vK@/G jl 1j $bA%cA%dA%eA%fA%gA%hA%YX.t8+t8+5W.2|+Y{@l[+.+@iA%Us@zV#TF#&J$&,$jA%*k$@;%fY.-[@@5$kA%s1#~_%..@lA%0l%ms$C/%vy+.3%37$WK+4G+4G+4G+4G+4G+4G+4G+4G+4G+4G+5$@5$@jX+jX+E@@v;@ZK+0~@P)@>B+lX+9G+cB@8G+'K@'K@qZ@qZ@P^%P^%aq$tr$bq$_a$=c$*I$)]$D)+:'$aT+:V#{}%,Y$B(%-z$v~$Z;$-E }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f Y;$}f es es -+$d$%1#sA%tA%uA%WF@)8%vA%wA%xA%pV$yA%l3%aL#Y^#m>@+/$$y DL.10 *$#ob#kT./Q.32$|K zA%AA%c|%BA%[7+V2+D).9'.NL.CA%5j%DA%EA%FA%GA%HA%OE+IA%=h B;+}'$r+OJ.2&$2&$vv+OJ.w*$=|$OJ.OJ.vv+w*$Eo+2&$2&$=|$^b+^b+PF+PF+PF+/D./D./D./D./D./D./D./D./D./D./D.5e%5e%5e%@g%@g%@g%^b+^b+x8.9Y+be+{! ]! {! {! be+{! {! {! {! {! {! {! {! gA gA w8.be+{! 5A.Ea+Ea+Yt.Yt.Yt.Yt.Yt.Yt.Yt.Yt.,v.,v.i~ i~ Yt.Yt.)> )> 9Y+9Y+9Y+9Y+Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh+8g.be+{! ]! ]! {! be+8g.be+be+{! {! {! be+8g.w8.3&$+d+/D./D.Lh+'g@Lh+9Y+]! {! @$+=L =L @$+", "sk sk tk tk uk uk uk uk uk uk uk uk uk uk uk .h..h..h..h..h..h..h..h.vk vk vk .h..h..h.$~.$~.tk tk uk uk uk oG.oG.oG.:j.:j.:j.:j.oG.oG.oG.oG.uk uk oG.oG.:j.:j.m` m` m` m` :j.:j.oG.oG.uk uk :j.:j.:j.:j.:j.:j.:j.:j.uk oG.:j.m` m` :j.oG.Tl _j.hY.hY.hY.hY.hY.hY.hY.X)@X)@X)@hY.hY.hY.hY.hY.hY.hY.hY.hY.hY.hY.hY.hY.G6.G6.G6.G6.G6.G6.G6.G6.-H.-H.l` m` m` l` -H.-H.m` m` m` m` m` m` m` m` :j.:j.:j.:j.:j.:j.:j.:j.l` :j.oG.:j.l` l` m` oG.jI.jI.WW.n` :j.+h.+h.l:.._ ^% ,+ u O -. R :l 0: KA%#f Uq+u$$l*@@! fa JA@[u@k0 l0 S4%S4%.! j[@=4@ { fi -z.ih 4k+g{@3=.WY+L`+!V.W} w'@[N.]L$f]@X7@Sv z<@i!@G_#TY$LA%MA%de$h*+ [%NA%OA%PA%QA%RA%SA%TA%yV+L6+GX+dX@|L$4S$xy%gR$Ea%L*$PC$d`$+C$J$$[]$1b$y %@x%9y%9y%|;%q*%/}$P<$Z!$N1$N1$Z!$J1$J1$`!$^B$M1$UA%aG$l6$B,$j/$ -$^+% -$.-$.-$Kc$^+%VA%WA%B#%9m%XA%YA%ZA%`A% B%2I.%$#OA$ms+E&#DN !M 9~ }g Du }g }g }g }g }f }f 1i 1i !M !M D&#Dz++x+n'%jx@.B##{@6O#S^$6=%8R+p>#4O#]q$aX#r4#r4#I[#I[#.v@.v@`o$]8$~m$ns$0r$0r$Fs%Fs%0r$ns$4w+`o$/d$~=#q>#dy%dy%dy%.B%q>#Y)+T)@B;@rV$rV$OX#OX#0/$a/$mF$C(%8M@~f#C[#Fi$+B%-S++.@Gi$j4#lh#B(%@B%gy%lh$-5%#B%G'$%R$Nt%$B%Nt%%B%Lv &B%Ww *B%zz%=B%Az%-B%zz%=E !J )J )J )J r_$+y hy%r_$r_$r_$vt vt vt vt vt +y +y +y +y +y +y +y +y +y hy%hy%|A hy%hy%+y bs .}$;B%l($1/$1/$.w%`v%]*$Zv%Xv%|h$E<%}/%lh#A'$G_#3F$.B%.+@O$+t8+6)#g^@Ux#Z.+nz#CD+_w+0$@|R+(P+(P+mp+rp+mp+ L+IZ@{k+}&@hc#%l#%l#(k+/k+/k+Mn#Mn#ac#B%cQ$wj%Ai%,B%'B%yo%zp%)B%ig%;w%,a%'a%gX$Ge%!B%Bq%~B%[b%{B%]B%^B%Jz%/B%(B%_B%:B%+xB%yB%5:@G+@7:@zB%o~$Sq@to@to@9T@7O.;K.]M$Rg H0 ,8 _,@/d@;8 Lz }u ;! y, Xr e{@Yr ^0@^t ^t SC W^#V^#V~#sI@sI@T^#v_$f.#(*$/*$I%$k($1/$1/$a|$Ju ;b ^d Z{$0q 0q Z{$wt Mw Ux 'Y$Nw Cu Cu }g -E ],$Z;$1i 1i =H$|g$6E$-z$1c#)q$o1#A[%g%%%l%Y:$sy%x]%b.%BB$)Z#{v$qX+']$B%%Sj$c9$_8$J$+%6$%6$#/$`.+k^#U@+AB%8|%-1%BB%CB%DB%!Q#B[#4P+ .@Fi$#f$!f#~q$..@-r%EB%~`+XH$k[$k[$nV$uC$&b@bj z<@TB$q~$GC$d]@FB%Kg%`J$@/$k[+j[+T@+pw$5Z+>K@>K@>K@>K@>K@>K@>K@YK+YK+>K@>K@)K@)K@,K@S,@s;@Sm#Q)@Q)@ZK+ZK+w;@R)@>p$qZ@qZ@*&#gm$gm$aq$tr$]v#N1#Dj$6F$^q$A0%ZX._T#z(@C%%CT$-x%u[${c$9~ $Ty#Ty#Wy#Sy#~>$&1%2[%xf#oA%F4%:}%es%ds%^z#Nq#}z%}z%JB%KB%LB%{l#1@$F_$~|+#4+kp+Y(+)d$MB%&/%b#@23@<-@P]+#;%3`$9u%NB%OB%PB%9[%#SB%+E+9z%~h.t{.SZ E@TB%UB%PL.VB%WB%XB%qK$YB%IA% h.ZB%x[$`B% C%.C%+C%+n+vv+Eo+w*$vv+OJ.w*$2&$w*$w*$w*$w*$w*$Eo+Eo+Eo+PF+PF+PF+/D.P~ P~ P~ uq./D./D./D./D./D./D./D./D.S}%S}%5e%5e%@g%@g%^b+^b+'g@Lh+{! be+8g.be+be+{! {! {! {! {! {! {! {! {! 8g.8g.be+be+{! {! ]! ]! Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh+x8.x8.9Y+9Y+Lh+Lh+'g@'g@y{ x8.x8.9Y+Lh+'g@'g@;~ Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh+8g.be+{! ]! ]! {! be+8g.8g.be+{! ]! ]! ]! {! {! ^b+PF+PF+^b+6j+6j+'g@9Y+]! {! @$+=L =L @$+", "sk sk tk tk uk uk uk uk uk uk uk uk uk uk uk .h..h..h..h..h..h..h..h.vk vk vk .h..h..h.$~.$~.tk tk uk uk uk oG.oG.oG.m` m` m` :j.oG.uk uk uk uk uk oG.oG.:j.:j.m` m` m` m` :j.:j.oG.oG.uk uk :j.:j.:j.:j.:j.:j.:j.:j.uk oG.:j.m` m` :j.oG.Tl _j.hY.hY.hY.hY.hY.hY.hY.9%.9%.9%.X)@hY.G6.G6.G6.hY.hY.hY.hY.hY.hY.hY.hY.G6.G6.G6.G6.G6.G6.G6.G6.*_ R_ l` m` m` l` R_ *_ m` m` m` m` m` m` m` m` oG.oG.oG.oG.oG.oG.oG.oG.l` :j.oG.:j.l` l` m` oG.jI.jI.WW.n` :j.:j.vk vk t% ed C, h. ,+ . E. k. ]@ }, |].!I.pG..y+@C%q%@`H.l[@pd#_u@ts S4%.! .! QC@C%,C%tO@`E#'C%hf%}s%FD$iu%iu%4V@n>$4^$H$$x9$1b$y %9y%9y%|;%q*%P<$P<$N1$N1$N1$Z!$J1$v|$/B$9c$l6$v<#l6$&#$J$$c&$)C%!C%T%%~C%{C%]C%]C%.-$^C%G($/C%(C%_C%G%%:C%I@V{$m8 #y ,M Z;$*E Du Du }g }g }g }g }f }f 1i 1i !M !M D&#Dz++x+E<%jx@Zx#X6%@{@S^$5Y+pl%p>#4O#]q$aX#r4#r4#I[#I[#.v@.v@`o$`o$]8$ns$0r$0r$/a$k %N@%wy+]v$|)#|)#~=#q>#/n%dy%dy%.B%S2@Y_@Y_@4O#{v${v$B;@mF$mF$qX+^B+[C%%L+>T.b]@1c%.E#4G$Np#lh#1F$=o%}C%|C%+I$1C%Nt%2C%3C%3C%3C%4C%5C%6C%7C%8C%9C%0C%aC%bC%bC%Uw cC%1C%+y uK cs cs wt r_$+y cs wt wt r_$+y vt hy%hy%+y +y +y +y +y +y +y +y |A |A ly%ly%|A hy%+y bs dC%eC%ky%Iv as bs vt hy%!J )J jQ j!$lh$lh$z_%Pz$i9$q!$pS$G[#C(%L6@D)+S)@Mq@se#}|+[|+<^#UQ@Ae@J@@Rt+wD+wD+mp+-9@e0#Pn##l#2$@*l#ni+ni+(k+Ng+'i#:f#Qc$`b$M0+Og+Kb+#4+Sl+~/+v&@='@_1@gr+1}@1}@0x@|}@J<@Lg+Mg+ @#1=$-X#qq#qq#W+$#w#3t#4t#4t#3t#57$-6$pF$m%$RR#SR#g8$g($vT#y:+vT#vT#uT#uT#f<$=X$lK$5d%mK$9S$:V$+F$+F$_V$;o$;o$yo$yo$4P$p%zo%3g%gC%]i%;w%gX$gX$`i%Hz%hC%iC%jC%jC%kC%lC%/B%mC%yl%nC%oC%pC%i#Hw%Hw%W@+1/%&D%*D%=D%-D%J6%d'%.1%$l+ih$;H$Bo+4G$5r$SB$,9%,9%,9%o1#o1#GC$GC$Tk$Rv w_$9> j.$Z{$6r =S ;@#3G$-S+y[#WS@zp#_'$('$pw$zM@)K@)K@)K@)K@)K@)K@)K@YK+YK+>K@>K@)K@)K@,K@S,@t;@^v#s;@s;@Q)@2T+!K@YK+qZ@qZ@*&#&&#gm$gm$aq$tr$]v#N1#a9$;;%*I$80$}7$kS$+++=`$w}%5=%bL# -#[g cP@}f }f }f }f }f }f }f }f }f }f }f }f }f }f }f }f Z;$Z;$Z;$Z;$Z;$Z;$Z;$Z;$],$}f D%Uy$,D%.o+'D%T1+s9#F,@69@by+hp+$3@em$(/$H2$tT#ZA$m@$J`#qT#di#0($=2#=}#UY#)E#Vy#Ry#,~%;w#,w#)D%5|%xf#2|%:}%_}%ds%&G#^z#~7%!D%~D%{D%0i#dt#^H$+*$LU#fi$`^+1k#]D%sW#QA+ty##h+tz#@5$X)%$g+aL#`T@`~#ZT@*0@^D%h*$,! Qe s<$Se $3 d~#dI./D%(D%R(@*^%^:$_D%fi%6j%EI.$7.C2.17+:D%2 r| 1/ $9 fp Qp OB@HE+]}%PK$cD%dD%eD%fD%gD%mJ#r8+G&+'m@hD%iD%+>@jD%XG#QG#kD%pk%lD%&0%Da%;#$1;$mD%/e#2b#N*$y %1b$1b$q*%|;%q*%0a$P<$]B$T2$O1$O1$T2$S)$v|$^B$4H$3H$3H$W2$nD%H$%M$%oD%pD%qD%rD%[;$&-$Ip$J(#j=%sD%A#%tD%uD%vD%wD%)r%-n#NQ$$`B$bc$ C$s0$oN$/X$/X$FD$FD$LD%eR$Bi%F8%bx%Df%Do%zq%ig%hg%;w%gX$'a%Af%1b%MD%jC%ND%OD%Qb%PD%hw%QD%RD%SD%iX$TD%UD%VD%WD%XD%4X$YD%4X$ZD%`D%dw%Wq%My% E%.E%+E%.E%@E%#E%$E%%E%&E%*E%=E%-E%;E%>E%Fp%U7$Ep%Lo%,E%'E%LC%)E%!E%8t%56%~E%@z%en%Zd%{E%n $Ci%xj%ax%qB%]E%.a%ja%OC%}P$ +%b9%=0%gR$fQ$i6%P5%'U$sc%@d%#d%^E%-d%90%/E%Q]%e=%yZ$M*%52%k4%uU$uU$ch%K)%5]%]U$h6$fg$S)$^}$(E%EQ@by$3p#&<+_E%xB%$[@S.$/k#:E%>T.$5E%6E%5E%6E%5E%6E%5E%6E%q)$Cu Nv @}$@}$Ov Pv Pv -z Cu Cu Cu =E i0$i0$^,$1C%0C%7E%8E%7E%9E%aC%0E%[A Wx Rw fB Rw aE%b|$bE%%B%yz%ky%-z vt r_$@y $5$|h$@B%iF#,Y$cE%m %{U+f7#{(%!Z#Us@S2@3_+F!$c7%%J$Y]$SF#0,%*i#dE%eE%fE%3z%gE%XR$1c#}/%}/%B(%>9%kh$kh$n'%;g$;g$;g$;g$;g$;g$;M |/$Hu l($m($m($Hv -E =S xJ+.E#hE%7:@l~$vy+%6$b>%6G+8G+8G+R)@R)@w;@w;@w;@ @%8G+X.@]K@]K@R)@!K@iE%ZK+c^@t;@|V+2T+Q,+!K@,K@V.@zM@&&#u9#0q$tr$hm$WL$]v#S[#]v#a9$Ms$c/$L$+ZX.6W.5w$M7%A&%lh#G)$*S 'M 9~ 9~ 9~ 9~ }f }f Z;$Z;$}f }f }f }f }f }f }f }f N+,V.|!+_[%f_+ar$_a$}{#yp+U1+hm+4}@EZ$,.$TR#kw$-6$f9$>|+'X#BB#ZA$@I#ci#M`#qT#K`#X%$q'$2I#A0+wB#wB#5V#>X#E~$D+%jE%kE%Q[$Iq#lE%E4%,5#mE%Xt%nE%oE%@R$pE%ZH#Jb+}/#!7@qE% k+^$i`#rF+T#@=2@IE%rq aD%=4@/#rX+mo%mo%mo%rX+D[#h,$8H+`E%SY$ F%=z$=z$8E$6E$-P *E Cu Ow #}$#}$Lv PO$.F%1u%1u%+F%+F%@F%ED%CD%Lv%DD%ED%ED%DD%Lv%F'$Nt%-z -z -z i0$i0$i0$i0$i0$i0$i0$i0$],$],$],$],$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$+I$#F%4h 4h @I$@I$=H$Y;$-P Z;$Z;$Z;$Z;$Z;$Z;$v~$n[##5$26$07$r1#k[$GY$#;%yw%^^$Ax$jm$Sj$90$('$Jq@CM@[|+I:+;m+6T+fD+o$yo$5$@4$gu%W<$A,$|)%bc$ C$oN$PC$iu%iu%$F%$F%%F%Nx%Ci%|d%Df%Ca%;p%3g%]i%5h%gX$gX$fX$hc%OT$&F%:s%kC%*F%PD%Ha$Vu%Am%_B%=F%pC%-F%;F%-F%>F%4X$ub$Ea$,F%9L$'F%)F%!F%~F%Df${F%Ry%Qy%]F%^F%/F%(F%_F%:F%K@,K@5Z+zM@&&#]^#$@%tr$hm$!k#/s#S[#Qj$Qj$a9$Rj$c/${l$;i#tF%c3%{U+A[%G)$*S 'M $q'$w.$j(%vF%wF%vf#xF%7<$*5#vf#OR#yF%ct#F_%mc#T4#V}$zF%AF%BF%2~@QX.g<$o4$CF%r1@L&#'E Ku Ku 2k y, (7 9 9 ~)#l .O^ }^#Xh 1} 4Y.8<+Q:$DF%EF%FF%GF%_D%HF%;^.IF%Jb.JF%Td.Td.9z%KF%LF%MF%NF%OF%PF%QF%iU.B<$cL#RF%SF%TF%UF%VF%WF%XF%{f%P~ P~ /D.PF+PF+PF+^b+/D./D./D./D./D./D./D./D.^b+^b+^b+PF+PF+PF+PF+PF+/D./D./D.P~ P~ P~ P~ uq.@g%@g%@g%@g%@g%@g%^b+^b+y{ x8.be+{! ]! ]! {! {! `Y gA w8.be+{! {! {! {! 8g.{! ]! 5A.5A.{! w8..s.w*$w*$w*$Eo+2&$=|$=|$=|$u3$2&$w*$Eo+=|$=|$2&$w*${! {! {! {! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! {! {! ]! ]! ]! ]! {! {! {! {! {! {! {! {! {! {! /D.^b++d++d+9Y+9Y+Lh+;~ Ea+{! O4 O4 @$+ko.", "uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk N6 N6 N6 $~..h.vk +h.+h.+h.+h.+h.+h.+h.+h.+h.+h.ie ge ge ge ge ge ge ge ge nf nf ri ri nf nf ie uk uk uk oG.oG.oG.:j.:j.-H.:j.uk uk :j.m` m` :j.:j.:j.:j.:j.oG.oG.oG.oG.m` m` m` m` m` m` m` n` n` G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.X)@X)@X)@X)@hY.hY.hY.hY.G6.G6.G6.G6.G6.G6.G6.G6.uk oG.oG.:j.m` l` -H.-H.m` m` m` m` m` m` m` m` (j.hY.hY.hY.hY.G6.G6.G6.hY.hY.hY.hY.hY.hY.hY.hY.n` n` n` n` m` m` m` m` =_ -_ S_ 3{ d= d= V_ `+ 9- Jg.cW cW x* t$ 2. ]@ x# x!#(+$`C+W7 <<@s~+`~ |a 1a 8m { OD+u[@RC@7m G%,G%g~@'G%EB%Mj#HC$7r RC Au Du Du *E *E }g -E #XJ#[)#Pr#L%#L%#~=#/d$`o$]8$~m$~m$ns$ns$4w+]v$|)#B1#B1#9!$Gz$-a$@B$5w+^B+3|+,/#+v@s!$#++e=@|v@q~+*e#t}@;{#)G%!G%&`$9.%fO$=f$=f$-P Y;$=E Jv o($o($@}$@}$cC%Lv%~G%~G%~G%{G%{G%{G%+F%.F%1u%+F%@F%@F%+F%1u%PO$Nt%]G%]G%]G%^G%^G%Nt%Nt%Nt%Nt%G'$G'$tj%tj%tj%G'$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$|f 4h -5%-5%-5%|g$|g$|g$@I$e6%=H$=H$=H$=H$=H$=H$=H$Rx@;M >M P;%Tv%xz@/G%vr%(G%;Y$_G%:G%_^%Xz$N@%>>+^f#Kq@7Z+i9@y9#ED@5~#yb#Gt+[G+bi@[t#Z-$@l#(@$h0#qi+Qc$Og+^f+#4+Kb+dy+YA+.}#`J#-E#-E#7k@bi@6m@$3@gr+>k+ei+ei+ei+Xl+oq#oq#1=$X1#-k+;k+W+$W+$SR#m%$'.$'.$9q$9q$>c$V[$$ $$ $8g$8g$rV#rV#6X#qV#qV#6X#9S$im%vy%vy%_V$_V$Aq$ap$@%`B$uF$m/$7.%e]%@W++{+ej%MZ.6`$zG%J~%6Y+N_#dk#8O#9O#`;$l] 0~ [E@nQ ``$#] 1M#XT@]8@]8@=8@;8@GN GN :&%:&%:&%:&%/Y@(Y@(Y@b~ ]Y@>8@q<$b|$F'$F'$F'$F'$F'$PO$PO$PO$|f u1$Jv Jv -z i0$1C%1C%^,$Y;$Y;$=H$@I$@I$|g$-5%#B%3C%FD%FD%$B%$B%%B%%B%%B%FD%$B%%R$F'$i!$u~$u~$Qw .D%AG%or%@}$@}$Pv Pv -z *E uK =H$lh$ J$BG%=o%$B$d!$(l$LB@CG%Wj$e%%d!$Tv%Tv%Ss%P;%DG%DG%lh$lh$EG%],$],$^,$^,$^,$+I$+I$+I$Z;$Z;$Z;$*E Z;$*E Z;$Cu FG%GG%HG%IG%JG%Mv *E #I$*f$X!%4P+WS@gZ.O#%qn%iF$6G+R)@R)@R)@w;@w;@!K@!K@w;@8G+w;@`{%`{%!K@w;@|V+Q,+3Z+S,@|V+T,@:P+>K@,K@5Z+zM@8e#Xx$tr$tr$~l$Qm#/s#mZ@Qm#Qj$b8$%K$O#%KG%'Q#)M$LG%f7#SB$jx@i4#'M $OP#Xy#>X#>X#>X#>X#Wy#,X#5V#Zy$Zy$Wy#,X#W4$q'$Rx$V%$sf#@R$7i#xc#x<%rf#F_%I0+Db+{$%Y6@lJ#QG%RG%SG%TG%IG#[)#}S#UG%B>%6K#`m@JH#ut j8 }o #A@7, n| T-@#[ yW+S&.cF.6=$VG%WG%XG%YG%ZG%`G%VB%fi%Ba.Aa. H% H% H%Zc.Zc..H%g:@+H%@H%#H%$H%%H%-8+gU.&H%:5@cL#RF%*H%=H%-H%;H%hl+Cj+S}%Hj.3K@3K@3K@Jb#Jb#Jb#3K@3K@3K@3K@3K@3K@3K@3K@+d++d+^b+PF+/D./D.P~ P~ P~ P~ P~ P~ /D./D./D./D.&0+&0+S}%5e%@g%@g%^b++d+y{ x8.be+{! ]! ]! {! {! `Y gA w8.be+{! {! {! be+8g.be+]! 5A.]! {! 8g.y{ OJ.WD@z4$Gc%>H%mq+z$$@d+z$$>H%Gc%>H%z$$@d+z$$2&$]! ko.ko.13+13+13+13+@$+13+13+13+13+13+13+13+13+]! ]! {! be+be+{! ]! ]! {! {! {! {! {! {! {! {! uq./D.^b+^b+x8.x8.Lh+;~ 5A.{! O4 O4 @$+ko.", "tk tk tk tk tk tk tk uk uk uk uk uk uk uk uk U5 N6 N6 $~.$~..h..h..h.+h.+h.+h.+h.+h.+h.+h.+h.ge ge ge ge ge ge ge ge ge ge ge nf nf ge ge ie le oG.oG.oG.oG.oG.:j.:j.-H.m` oG.oG.m` l` m` :j.m` m` m` :j.oG.uk uk uk m` m` m` m` m` m` m` n` n` G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.X)@X)@X)@X)@hY.hY.hY.hY.G6.G6.G6.G6.G6.G6.G6.G6.m` m` m` m` m` m` m` m` l` l` l` m` :j.:j.:j.(j.Tl 9%.9%.X)@hY.hY.G6.G6.9, 9, G6.G6.G6.G6.9, 9, n` n` n` n` m` m` m` m` -_ -_ T_ T_ T_ )= U_ |% j}+Jc@Y6.ce 2c m& i# S$ /+ h$ hm j_.$|)%hQ$-0%2P$2P$2P$T5%T5%pX$M$%pX$/Y$K$$L$$M*$(H%f-%z.%A#%^b#_H%:H%]$q4#W_#k[+B($jh#8~#; $*n#Ae@!B+~P+dr+xb#:t#D<%q=$lc#b[+Qc$Og+^f+#4+Kb+dy+YA+.}#.}#WF#WF#bi@<9@6m@_1@_1@ir+Xl+Xl+Xl+fi+YN#YN#TR#;k+-k+;k+W+$#w#W+$RR#9q$9q$kw$kw$>c$7|$$u$$ $8g$>/+5X#5X#qV#pV#qV#wV#-G$Dr%Ds%Ds%(V$(V$Aq$ap$3u$4P$DZ$DZ$Q)$U'$)o$'5$8l$9l$f6$,5$.4$W'$np%]o$A,$U.%.C$L*$QC$hu%wy%{@%,R$Vk%Nx%Ci%F8%}d%s0%PE%dx%hg%5h%`i%aQ$Wr%9H%Zr%9H%0H%Zq%Cq%(s%0Q$,t%aH%lx%Mz%Cy%bH%cH%qd%Cl%dH%eH%)!$fH%gH%hH%;L#iH%_)$jH%bJ$kH%lH%mH%nH%oH%pH%qH%rH%sH%tH%uH%vH%wH%xH%yH%zH%xC%AH%BH%CH%Dy%Nz%DH%EH%wl%lc%sk%nc%RS$Ef%n $FH%E@%il%t8%Jr%OC%GH%Q5% +%b9%=0%gR$fQ$i6%P5%ve%'U$@d%#d%^E%^E%3c%r8%HH%IH%JH%60%60%E$%KH%LH%zv$ep$dG$$K@W(#{L#&>@MH%8'+Co$NH%FE+`w+MW.1z+Mp#/G Lf &W@W:@YA Lz LZ$WA 1M#}M#XT@WT@WT@AR@{8@{8@;8@/|@=8@X~#/Y@X~#(Y@B'$OH%PH%QH%RH%&;$SH%Uw 7E%0C%0C%0C%0C%TH%TH%TH%Nt%=E =E i0$i0$],$^,$^,$^,$@I$@I$|g$|g$|g$|g$|H%-5%#B%oF%3C%G'$%R$G'$F'$|f 2C%UH%3C%G'$i!$E'$H)$Eu no%p<$Nv @}$Ov Pv yz%VH%Jv i0$i0$^,$],$],$=H$v~$Vv%WH%t1$t1$UB$Zv%Zv%Zv%6'$uK uK =E =E =E =E =E 1C%1C%1C%1C%1C%GD%GD%GD%=E =E =E =E =E =E =E Jv XH%YH%ZH%IG%JG%Nw Z;$BG%](%- %5w$L#$oo%Rj$d9$XK+R)@R)@R)@w;@w;@!K@!K@!K@X.@X.@R)@]K@]K@w;@8G+>T@Q,+3Z+S,@|V+T,@:P+>K@E@@5Z+zM@9e#8e#hm$hm$~l$Qm#mZ@mZ@Qm#!k#!l$c9$`H% I%^ +.I%f.%2w$3j+m8 I!$mI@$~>$Sy#Sy#Wy#Wy#Wy#Wy#OP#OP#OP#Sy#>X#,X#W4$W4$9,$0t#w<%fh%V:%F~$~/$r0#^$%*I%=I%-I%;I%>I%,I%'I%)I%Nq@dy%(-#@5$/l$uC$Tv C5 4k D> 4n O1 ]1 X-@S: ={ L^ ae@Pu !I%~I%n%+{I%E>@]I%^I%/I%(I%_I%Ud.Aa.FD jF.>2%;A$<*@=3%:I%H%>H%mq+mq+>H%z4$z4$Gc%z$$@d+z$$=|$5A.ko.ko.13+@$+@$+=L =L 13+13+13+13+13+13+13+13+5A.]! be+8g.8g.be+]! 5A.{! {! {! {! {! {! {! {! F.P~ PF+PF+x8.x8.Lh+;~ ]! be+=L =L 13+ko.", "tk tk tk tk tk tk tk uk uk uk uk uk uk uk uk N6 N6 N6 $~.$~.$~..h..h.+h.+h.+h.+h.+h.+h.+h.+h.nf nf nf nf nf nf nf nf nf ge ge ge ge ge ge le ke :j.:j.:j.:j.:j.oG.oG.l` :j.oG.:j.l` -H.m` oG.m` m` m` :j.oG.uk uk uk m` m` m` m` m` m` m` n` n` G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.hY.hY.hY.hY.X)@X)@X)@X)@G6.G6.G6.G6.G6.G6.G6.G6.R_ R_ -H.m` :j.oG.uk tk -H.-H.l` m` :j.:j.oG.(j.Tl 9%.9%.X)@hY.hY.G6.G6.8v.VW.9, G6.G6.9, VW.8v.Lv.Lv.n` n` m` m` m` m` 2b 2b 2I%@m$@m$oj 3I%Qw.4I%sF.[{.ve.X)@Y6.N~.^{ U@ .. N* 9} nn+9V.,I+yU+40 +I.1 +@I.#<@T$+-z.cf :L.:L.:L.-z.-z.-z.>y.mh@(.%5I%5I%6I%@+@!2+={#5O#b.%o>#87$./%rc@`|@^-@{'#-!+7$$7I%WG+8I%9I%0I%aI%bI%zH$!e#$Sd$+d%'U$aF%i6%fQ$gR$gR$=0%b9%{@%iu%/X$iu%`=$(H%i@%U&%VE%mN$E(#hI%iI%>4+jI%~^%)m$+(+G%$5r Au Du Du *E *E }g -E #ix@e]@&l+KP#S^$5Y+pl%C(%iA%{v$|x@XJ#l #Pr#sp%L%#L%#~=#~=#`o$`o$]8$]8$wy+wy+R2@})#})#g&@HK#T)@L{$&D%`R$.I%&K$fh$Uj$~f#G)+3�k#PP.,-#6K#O%$d_#x'%-S {@$k!$1i }f }f }g =E =E bs Iv Iv Iv Iv o($1C%^,$#B%4h tj%@I$tj%@I$#B%4h tj%@I$|u%@I$}H%oF%^G%zz%]G%]G%^G%^G%^G%Nt%Nt%G'$G'$G'$tj%tj%|u%tj%G'$Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$|f @I$@I$|g$@I$-5%4h 4h 4h 4h ^,$^,$^,$^,$^,$^,$^,$Du Du Lv Jv =E uK $5$UB$2H%e%%(l$kI%lI%mI%8>+j2@ c$NW$T)@5W.k[+R!$nI%Hq@^k#-7@z$+OK+1N#[a@[G+rD+Ng+Qc$Og+^f+#4+Kb+dy+YA+`J#.}#WF#GZ@ic@ic@6m@_1@_1@ir+(+@(+@lc#fi+fi+fi+Wl+Mg+;k+X1#1=$Vl+#w#SR#9q$we@ve@ve@xe@ye@$F$#F$5l$-k$jk%mK$DJ$nW$DJ$wV#-G$Dr%Ds%Ds%(V$(V$Aq$ap$3u$yo$i%Tz%TI%Bm%:B%_B%UI%VI%WI%XI%I6#d%0F%Q5%h`$p6%T5%Wk%2P$O5%v7%`.%]5%!@%Z.%v4%v4%Wh%G$%-h%F$%YI%ZI%`I%%b% J%Yg$}L$tO@.J%-k#+J%@J%=U+#J%gs+$J%%J%&J%*J%=J%`<#l .+' |g }u ]Q#Iz Iz ]Q#W~#4|@mQ mQ mQ 3|@2|@2|@2|@3|@t! (|@X:@_|@r[@:|@+n@-J%;J%>J%,J%'J%)J%!J%!J%Az%Az%.D%.D%cC%cC%cC%.y -z -z -z VH%1C%1C%GD%GD%^,$^,$4h 4h 4h 4h |g$|g$#F%#F%#B%4h oF%],$G'$],$~J%+I$oF%],$u1$*E Kv -E Du Nw Nw o($Pv -z VH%VH%-z -z ^G%Nt%Nt%&E PC -E 6'$D'$;M S-$$5$H%$uK wt +y i0$i0$^G%.y .y .y Lv i0$i0$i0$i0$i0$i0$=E =E ],$],$],$],$],$],$],$i0${J%]J%FG%@}$Nw Du 1i Du+*z$^J%!Q#ZR#~}%c9$zM@w;@R)@x;@DD+DD+,T@,T@fm$fm$x;@DD+DD+x;@x;@x;@x;@9G+Q,+3Z+v;@kX+T,@:P+5$@E@@zM@9e#9e#9e#d9$!l$~l$Qm#| @U.@4Z+8e#lF$d9$Hm$/J%(J%}6%Gn#Rz$%l+Uk$I!$mI@es es X#W4$|@$0t#ct#[J%[J%mf#lf#b6%xe$}J%|J%1J%2J%3J%4J%cq@SU#q4#5J%dX#eU$o9+Zw =P y6 I=$J}$Ct :f 3) <7 [7 V: zb bT+u|@UC@|V QO.[D%6J%7J%8J%9J%vC.0J%CA%vh#Vd.sa@!@#fb%aJ%bJ%cJ%dJ% t m&+9$++R@;>#;>#PM@(m%01+8$+8$+7$+RF%eJ%|n%|n%T3$T3$Jb#3K@3K@3K@3K@3K@3K@3K@3K@3K@3K@3K@3K@3K@3K@P~ P~ P~ /D./D.PF+PF+PF+P~ P~ P~ /D.PF+^b+^b+^b+#u%Fc%Fc%Fc%]1%]1%PF+PF+6j+6j+Ea+]! {! w8.`Y YY gA w8.8g.be+be+be+be+8g.be+be+{! {! {! {! {! 9Y+=|$fJ%gJ%gJ%Hc%Hc%%c%%c%%c%jb%$0+jb%gJ%fJ%fJ%Eo+]! ko.13+13+@$+=L =L O4 @$+@$+@$+@$+@$+@$+@$+@$+]! {! 8g.w8.w8.8g.{! ]! {! {! {! {! {! {! {! {! F.P~ PF+PF+y{ y{ 9Y+'g@]! be+=L @$+ko.ko.", "uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk $~.$~..h..h..h..h..h..h.+h.+h.+h.+h.+h.+h.+h.8c nf nf nf nf nf nf nf nf ri nf nf ge ge nf nf ri he m` m` :j.:j.:j.oG.oG.:j.oG.oG.:j.l` l` :j.uk :j.:j.:j.:j.oG.oG.oG.oG.m` m` m` m` m` m` m` n` n` G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.hY.hY.hY.hY.X)@X)@X)@X)@G6.G6.G6.G6.G6.G6.G6.G6.*_ R_ -H.l` :j.uk tk tk l` l` l` m` :j.:j.oG.(j.(j.hY.hY.hY.hY.G6.G6.G6.Hu+8v.9, G6.G6.9, 8v.Hu+Lv.Lv.n` n` m` m` m` m` 2b 2b @m$@m$Pa%Pa%3I%WD+pO 1-.hJ%ZL.ts.G6.WW.7% !% {@ v+ /$ K; 'F <^@iJ%5K+/b y-.4k+#<@Xb+:L.:L.-z.7d #n@#n@7d .4@jJ%kJ%lJ%0T.v|@5I%mJ%nJ%aF.HR.g3#-/#.B%r>#cq$s4#Mw#A;@oz@be$7$$K[+oJ%&+%pJ%qJ%qJ%rJ%sJ%tJ%uJ%vJ%wJ%xJ%yJ%*G%@x%y %|;%|;%q*%|:$T0%I&%x,%x,%x,%x,%o*%iW$,@% d%N9%#d%wi%aF%'U$gR$fQ$i6%P5%=0%hu%/X$iu%zJ%AJ%i@%2+%h-%u #BJ%CJ%DJ%{P#SK$u1#N&#HC$o$#5r 1/$Du Du *E *E }g -E #s>#[K#[K#L%#L%#~=#~=#`o$`o$]8$]8$wy+wy+R2@})#})#g&@HK#T)@1/%EJ%FJ%&D%A@$9M@M#$`R#G)+i>@PP.Rq@t[$19#cb%p~$+x+dP@;P R5@9~ 9~ }g }g i0$i0$vt vt Bu Bu Bu Bu VH%VH%1C%1C%i0$i0$i0$i0$GD%1C%],$Y;$Y;$],$^,$GD%]G%zz%]G%]G%^G%^G%^G%^G%G'$G'$G'$G'$tj%tj%|u%tj%G'$Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%],$],$],$],$^,$^,$^,$^,$],$i0$],$i0$],$i0$],$i0$cC%Ow Ow Pw PC Fu xt {a 7r l,$-0@HJ%6g@IJ%JJ%KJ%LJ%h0${F$bX#5w+ZR#E]#da@5P#>Z#GD+b~@c&@OK+ay+N0+Ng+Qc$Og+^f+#4+Kb+dy+YA+`J#.}#GZ@_1@fr+fr+6m@_1@GZ@(+@/+@/+@W1#lc#Xl+Xl+YN# @#X1#X1#1=$Vl+W+$RR#|9@|9@we@we@xe@0i@#F$#F$5l$-k$uc%BJ$nW$@u$nW$wV#9S$im%vy%vy%_V$_V$Aq$ap$3u$yo$@%`B$bc$.C$QC$hu%{@%{@%,R$Vk%FH%Ci%09%}d%s0%MJ%6h%dY$Td%Af%Wr%Wr%Zi%Zq%NJ%OJ%pI%Yq%Vp% s%^s%(2$'T$@i%px%qx%PJ%Tu%QJ%RJ%SJ%TJ%UJ%Mg$VJ%WJ%XJ%YJ%ZJ%`J% K%.K%+K%@K%#K%$K%%K%&K%*K%=K%-K%;K%>K%,K%'K%)K%!K%2t%~K%Uz%{K%Al%pC%]K%M %^K%XF$#b%GG$J%4K%5K%6K%7K%8K%8K%.D%.D%cC%cC%.y .y u1$=E -z Pv Pv VH%VH%9K%9K%GD%GD%+I$+I$^,$^,$4h @I$@I$#F%0K%#F%ZI$^,$H%$],$+y +I$|A 1C%+y i0$bs *E *E =E =E =E =E =E -z -z -z Jv -z ^G%^G%.y Ow Pw Fu uK $5$>M !J H%$0K%],$=E GD%aK%aK%aK%8C% y Vw 9C%u1$=E =E =E *E *E *E }g Y;$Y;$Y;$Y;$Y;$Y;$=H$Y;$VH%yz%yz%Pv Jv }f =S es$[g$YJ$&K$ l#dN#hX+>K@DD+DD+DD+DD+,T@,T@fm$fm$fm$>'%>'%,T@+:$<|+DD+|#%s;@Q,+3Z+v;@kX+T,@:P+5$@E@@9e#iX+iX+iX+5($d9$~l$Qm#4Z+} @4Z+fX+9e#kF$!H$bK%cK%'Q#H0%6=%Vo$e]@.-#mI@'M es es X#VY#YL$Zn#/l#ci#^l#Xy#E~$|@$ct#DC$mD$gK%hK%a7%iK%jK%kK%lK%mK%qc@nK%oK%E>#k{$[w$'q$+{#Aj$nI@;E }r@Xy w*@D^$1' +s B%@n_ J0 ;l aR+$V.N>+pK%qK%rK%sK%tK%uK%vK%wK%xK%yK%zK%f:@{I@pK%AK%.d.BK%CK%DK%Vl RF%#c%@g%~f%S}%]1%z<$i|$T3$7$+7$+7$+9$+B;+B;+B;+m`.BX@Jb#Jb#3K@3K@3K@Hj.Hj.3K@3K@3K@3K@3K@3K@3K@3K@ F.uq.uq.P~ /D.PF+^b+^b+/D./D.PF+PF+PF+PF+^b+^b+O4%O4%#u%Fc%]1%]1%PF+/D.y$$y$$Ea+5A.be+w8.`Y pj w8.8g.be+be+be+be+8g.8g.be+be+be+be+{! {! {! %.@x*$lx@fJ%gJ%Hc%%c%jb%$0+Hc%jb%$0+jb%Hc%gJ%Hc%QU+{! @$+@$+@$+@$+=L =L =L @$+@$+@$+@$+@$+@$+@$+@$+{! be+8g.8g.8g.8g.be+{! {! {! {! {! {! {! {! {! /D.PF++d+^b+x8.y{ x8.Lh+{! be+=L 13+NM+NM+", "oG.oG.oG.oG.oG.oG.oG.uk uk uk uk uk uk uk uk vk vk vk vk vk vk vk vk +h.+h.+h.+h.+h.+h.+h.8c nf xk xk xk xk xk xk xk U_ wk xk {k.{k.xk wk >_ 2b l` m` m` :j.:j.oG.oG.oG.uk uk :j.l` m` oG.sk oG.oG.oG.oG.:j.:j.:j.:j.m` m` m` m` m` m` m` n` n` G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.hY.hY.X)@X)@9%.9%.G6.G6.G6.G6.G6.G6.G6.G6.l` l` m` m` m` :j.:j.:j.m` m` m` m` m` :j.:j._j.WW.9, 9, G6.G6.G6.G6.G6.VW.9, X)@9%.9%.X)@9, VW.Lv.Lv.Lv.Lv.m` m` m` m` EK%EK%2I%2I%@m$@m$*c%{K.6,.cn.K0.1[#Zq@}{.kI.1% &) T$ F. ). 8. ;k y<.FK%GK%HK%8.$A9 ,<@FZ.qO.~<@#n@X`.X`.2E@>0@IK%JK%KP.T&#}A.,c%%<@C[@%P %P mJ%RD@Wb+KK%:M#!/#Oo#5u%}C#%6$P.$mz@LK% >@MK%9Z@..%NK%OK%PK%QK%RK%SK%TK%UK%VK%WK%XK%s*%YK%@.%q*%|:$+{$'@%H&%x,%y,%y,%^`$N&%S0%*b%=b%N9%@d%#d%#d%'U$aF%:5%:5%i6%~@%PC$QC$L`$AJ%B*%2+%h-%u #vI$ZK%`K% L%5w+3r$8:@$c$o$#0s 1/$Du Du *E *E }g -E +} +,-#t[$19#'u$@L%-0@.~ vR@0%jk%nW$Cs$nW$wV#xV#-G$(V$(V$+F$+F$0p$>o$3u$yo$4P$4P$4c$Iu$zo$Q)$ap$O*%'t$#4$.4$.4$V<$7:$Y=$K*$I($ C$PC$hu%wy%{@%,R$>L%kw%Ci%yj%}d%s0%oc%cY$hg%Td%za%fX$zf%Rd%&p%OJ%,L%'L%)L%!L%~L%{L%]L%^L%xu%/L%)t%9J$(L%_L%:L%'%CD+Eq@ko@+:$fm$t;@Q,+,}@v;@kX+7=@3G+5$@E@@9e#iX+_P+_P+d8$d9$b8$Qm#4Z+} @jX+jX+5Z+/H$!H$bK%cK%W@+` @;T.KP#MX$Zw mI@DN cP@es es :@fc@@ $J>%WL%}j%~E#4|%ai#]l#zq#9,$q'$v.$E7#E7#5V#UY#Wy#>X#$;$5*$>I$l@$.5#J`#^l#~>$w.$'$$A)$Q:%XL%YL%ZL%`L% M%.M%+M%@M%#M%$M%%M%]{#&M%>'+!b##{#Zw M%B>@,M%'M%)M%!M%~M%C>@nk#Td.-.@p]%{M%Rw.C-$@J /K.]M%^M%/M%_m%H}+1P (M%{f%&0+tq.'@+'@+>8+x,@x,@Q9.QQ.QQ.+R@BX@BX@BX@'@+m`.m`.m`.'@+'@+'@+'@+'@+'@+'@+3K@P~ P~ P~ P~ P~ P~ /D./D.^b+^b+^b+PF+PF+PF+PF+PF+]1%]1%]1%]1%]1%]1%PF+PF+'g@'g@]! ]! {! be+w8.gA w8.8g.be+be+be+be+8g.w8.be+be+8g.be+be+{! ]! y*$=|$fJ%fJ%gJ%Hc%%c%%c%%c%fJ%Hc%%c%%c%gJ%fJ%Hc%QU+=L 6=+6=+6=+5D+5D+5D+5D+6=+6=+6=+6=+6=+6=+6=+=L 8g.8g.be+be+be+be+8g.8g.{! {! {! {! {! {! {! {! +d+Y@$3&$+d+9Y+y{ x8.9Y+be+be+=L 13+NM+NM+", ":j.:j.:j.:j.:j.:j.:j.uk uk uk uk uk uk uk uk +h.+h.+h.+h.vk vk vk vk +h.+h.+h.+h.+h.+h.+h.8c nf nf nf nf nf nf nf nf T_ >_ ri nf nf ri >_ T_ 2b l` 'K.m` mI.:j.kb.oG.Mv.tk Ek$oG.lI.m` Mv.!B uk uk uk oG.:j.m` m` m` m` m` m` m` m` m` m` n` n` G6.G6.G6.G6.G6.G6.G6.G6.Vh.Vh.Vh.Vh.Vh.Vh.Vh.G6.G6.hY.hY.X)@X)@9%.9%.G6.G6.G6.G6.G6.G6.G6.n` oG.oG.:j.:j.m` l` -H.-H.m` m` m` m` m` m` m` m` 6% 8v.VW.9, 9, G6.G6.hY.G6.X)@|{.%x+%x+|{.X)@G6.Lv.Lv.Lv.Lv.n` n` m` m` M/.M/.L/.EK%EK%GL.2I%4U$82.u!+j<._M%pO +5.Sl lI.4=+$% f+ '= ^& =. 5$ /@ X. :M%L%kw%n $yj%.j%Xj%(i%Wp%`i%za%jc%fX$aQ$aQ$*p%pI%rM%sM%qI%tM%uM%{L%^L%94$-^#/L%vM%wM%xM%yM%Zz%zM%AM%BM%CM%DM%EM%FM%GM%HM%IM%JM%KM%LM%MM%NM%OM%PM%dI$QM%RM%SM%&P#TM%UM%VM%WM%XM%SI%YM%ZM%TI%Bl%`M% N%.N%L %+N%@N%#N%$N%%N%QU$9h%09%xj%cQ$rl%sB%o6%~C%&N%^+%zJ%2P$]5%`.%*d%v4%wi%aF%ve%aF%hR$sz%DD$*N%q9# )$XG##^#=N%-N%;N%>N%,N%'N%)N%lH#!N%~N%w4${N%]N%dj#0C#^N%EL%/N%(N%*M%KT#_N%Hv@}u W:@+~ +~ +~ +~ +~ +~ W:@W:@_t mt@5F ^t ^0@SC W^#V^#V^#-! }g =E i0$^,$^,$],$=H$|g$|g$ N$ N$ N$ N$:N%|g$iy%$L%ky%ky%%L%%L%KL%LL%LL%LL%LL%my%hy%hy%+y +y ly%aq |A ]x%hy%+w%iy%_x%vt w%vt i.$iy%}@8=@wp#7=@}V+5$@4Z+9e#iX+_P+u_%d8$5($b8$]v#M+#4Z+fX+jX+>K@5Z+kF$Rb$=u$gZ.c!$o%$]l$eX#+{#p[#*S cP@EN k$#;P ;P ;P ;P kQ E'$E'$}f }f }g }g }g cP@cP@cP@cP@cP@cP@cP@cP@u$} +h-+3N%bf%{]@]!%&K@Ph%7j$11@$ $oV#Z4#F.$j@$DB#y0#w.$E~$E7#|@$}T#)E#A0+A0+Y3+Y3+|T#Z%$6|$&;%TW$/l#6T#qT#Xy#,>$D7#zC$eF$Iw#98+4N%5N%6N%7N%8N%9N%0N%aN%bN%xD%cN%dN%TO$t)%~}+iQ VH Px@eN%(N%=M%.;@D%@C/ G( )z x9 $<@F[@Yv.9Q -.@fN%.5+gN%hN%iN%jN%kN%lN%mN%GI.oG+ H%37+1j.9z+e>.%& ;5 i@+nN%oN%Aj+pN%qN%R4%rN%>H%@g%5e%NZ@+R@nA+nA+]Z.PQ.QQ.QQ.c;@NZ@BX@Jb#'@+Hj.m`.Hj.'@+3K@'@+3K@'@+3K@'@+3K@PF+PF+/D.P~ P~ uq. F. F.+d++d++d+^b+PF+/D./D./D.uq.P~ P~ /D.PF+PF+^b+Lh+x8.x8.be+{! ]! {! {! be+8g.8g.be+be+be+8g.w8.w8.be+8g.8g.8g.be+{! ]! y*$Eo+Hc%Hc%Hc%gJ%gJ%gJ%gJ%u{@z$$>H%>H%mq+mq+Gc%vv+gA O4 O4 =L @$+@$+13+13+=L =L =L =L =L =L =L =L .Z w8.be+{! {! be+w8.gA {! {! {! {! {! {! Lh+Lh+6j+y$$*$@;~ be+w8.w8.be+be+=L @$+13+NM+NM+", "vk $~.N6 N6 $~.vk +h.$~.$~.$~.$~.$~.$~.$~.$~.+h.+h.+h.+h.+h.+h.+h.+h.N6 $~.vk d( ~% d( +h.vk ke ke ke ke ke ke ke ke ke ke ke ke ke ke ke ke kb.kb.!K.mI.)K.'K.z^.<].!K.kb.%+vG.Lt jr 6R.|M%vN%wN%f$'f$N-%%>$G)$$g+`F@rm#0L#)t@q~+j>#sm#0Z+dy%;/#!~#r!$ c$~Z#a]+<)#YN%)/#sp%Pr#+ +iB@J[#+ +Pr#Pr#)/#*x%ZN%`N%k$+']$4V+o)%)=%'(@cv$G)+@l+;$%{*@UJ##p@@, Gv |/$l($qI@Ux Ux Ux 'Y$'Y$Cu Cu 9K%9K%GD%GD%GD%hy%1C%1C%-z -z -z -z -z -z -z -z 9K%9K%9K%9K%GD%9K%GD%9K% O% O% O%aK%Xw GJ%Nt%Nt%GJ%GJ%GJ%oF%oF%oF%oF%oF%*L%GD%*L%GD%*L%GD%*L%GD%GJ%1C%GJ%1C%GJ%1C%GJ%1C%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%1C%1C%i0$i0$i0$=E Jv Jv .y Jv Jv Jv Jv Jv Cu as =^$=^$cs ;z$xt ;z$I%$(*$0s ml Rv He+q!$ c$iA%4W.:v@jh#Jq@^R#+:$FD+)B+]G+SA+N0+Mb+mD+9X+$4+_k+YA+/+@fi+fi+df#Qg+mi+Qc$b[+qi+b[+qi+]|+p7#bc#{|+@4++4+Nn#~|+r:+2/#:C#X4@:a@:a@hc@K<@0X#io@io@_a@_a@5l$Qi$Qi$Qi$!E$mK$}5%>0%EJ$JH$mK$uc%6l$F=%F=%.O%.O%.O%+O%+O%+O%Np$ro$Cq$Rr$+n%^Y$0b%z,$1d%:}$j7%@O%fl$#O%m7%WN$Bi%FH%FH%n $fK$$O%TS$%O%&O%&O%aQ$Wr%:d%ya%:b%*O%Yi%eg%4h%=O%-O%rI%bg%;O%>O%,O%U7$'O%)O%)O%Gq%!O%~O%{O%]O%^O%/O%.K%(O%_O%:O%#$3S$E@%>L%rO%sO%tO%uO%*G%[5%^T$Wh%Y3%vO%00%$7%Ah$wO%s7$8x#xm#!n$1*%~L#xO%yO%zO%AO%BO%CO%gF DO%EO%@$@FO%GO%MH#HO%IO%_0#U7@JO%]0#87#=p@=p@@~ 4|@YT@YT@>S mQ 4|@^|@^|@/|@/|@(|@(|@X:@(|@X:@X:@X:@X:@r[@r[@r[@-! -! -E }g =E i0$1C%^,$],$],$],$],$],$],$@I$],$|A my%my%my%my%my%my%|A |A |A |A |A |A |A |A |A ly%ly%GD%|A GD%hy%1C%hy%i0$+y i0$vt i0$vt i0$i0$=E Y;$|f =E u1$Nt%Nt%Nt%Nt%Nt%Nt%^G%^G%^G%^G%]G%Ov nr%Ov Ov Pv -z -z i0$|N%|N%PL%}H%|u%KO%nx$7E$=H$uK uK !J !J )J }f }f }f Z;$5'$5'$5'$5'$5'$Cu LO%;B%a|$bq r<+2j+C%%7r$7O$z1#K#$90$qw$Wx$hX+gX+T_@Pt+Pt+Pt+Pt+Pt+Pt+Pt+yD+3T+_f+MO%NO% -+c1%0e#7~@a^@7^@7^@eX+l#$} @oi$7V@7V@hX+hX+vp#vp#d9$c9$Qj$*6$v,$i~+R,+>K@E@@4Z+]v#S5+m~+|f+7 @q~+J2$($%u[$;P k!$#h%mh$mh$OO%df%_g%se%u~$E'$}g Du =^$=^$-! -! -! -! -! -! -! -! tG -! -! -! -! tG sG 8r f]@RP.~>+PO%0}%`S@>k#D+$Ql$Gt$Qi$# $=X$/$%,X#{w#)E#gw$!6+!6+;6+&2+%2+-6$:@$e8$tB@xe@ye@sQ$sQ$$F$H2$|T#Ry#z0+:O#QO%a_%RO%SO%TO%UO%VO%WO%XO%YO%ZO%%g$-q$*e#t1@97$MB@_R@^)#FT <,@]|@l[#a7#l[#`O%l.#X-@Rh [7 &x zy f|@W5@ob@ P%u++.P%+,.lp.TE+'8.iG +P%[l%@P%WR s:.J%+Ku+#P%sa.P@ Z% O* N/.$P%7g+5e%z4$%c%%c%%c%z4$w*$w*$/D.PF+Jb#Jb#3K@'@++$++$++$+Hj.P~ 3K@/D.3K@PF+Jb#PF+3K@/D.3K@/D.3K@/D.3K@/D.&0+S}%S}%5e%@g%@g%]1%]1%%P%&0+&0+S}%S}%5e%5e%PF+*$@;~ 9Y+y{ y{ 9Y+;~ $(+be+be+{! {! ]! 5A.5A.Ea+]! ]! ]! ]! ]! ]! ]! ]! ]! ]! {! {! be+be+8g.7g.2&$;~@Ic%Ic%w*$vv+vv+OJ.2&$/D.P~ P~ PF+^b+Jb#Hj.9Y+x8.x8.x8.9Y+Lh+'g@;~ Lh+Lh+'g@;~ 'g@9Y+y{ gA cI+13+=L @$+NM+cI+]! be+y{ Lh+;~ 'g@x8.y{ PF+;~ ]! ko.ko.ko.ko.ko.ko.ko..Z 3x.5D+80+80+5D+", "+h..h.$~.$~..h.+h.d( .h..h..h..h..h..h..h..h.+h.+h.+h.+h.+h.+h.+h.+h.$~..h.vk d( d( d( +h.vk :j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.lI.!K.!K.!K.!K.!K.!K.!K.!K.nI.nI.oI.oI.nI.nI.mI.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.n` G6.G6.G6.Vh.Vh.Vh.Vh.sN%sN%OK.OK.OK.OK.g..OK.Vh.X)@9%.X)@G6.G6.hY.9%.hY.G6.9, 9, 9, hY.X)@Rl m` he he 2b 2b 2b ;_ ;_ he he he he he he he m` n` G6.hY.X)@X)@hY.G6.G6.G6.G6.G6.G6.G6.hY.hY.hY.G6.G6.G6.G6.G6.G6.G6.G6.hY.9, VW.9, hY.hY.G6.VW.'K.'K.'K.'K.'K.'K.'K.'K.kb.mI.lI.'K.'K.lI.mI.oG.u% =L .Z GB &P%*P%$m.ES+{<@|C@*z. 4@yd@=P%-P%J.@>1#G3 PU.6P+oB.IM.cf w9 h{@ef Oz kw Ue 1: y[ ;l >l IM.1-+H)+rX+2|+;P%>P%,P%t(@'P%I[+)P%n<#!P%~P%{P%]P%^P%/P%(P%i7%_P%:P%f$'f$N-%Q-$bL#SB$z~$L+@0L#4|+po@TI#k #q##:M#k>#2k+i($]-#qx$kP%63@_X@)/#)/#[)#[)#iB@^M#Pr#Pr#)/#*x%ZN%`N%`N%ZN%g~@QB$rV$X,@Wt+e=@oZ.v8+]($%y :g @, V~#y'% D%lP%mP%mP%no%no%'Y$Nw Nw Nw 9K%9K%GD%GD%1C%1C%^,$^,$i0$i0$i0$i0$i0$i0$i0$i0$GD%GD%GD%GD%GD%GD%GD%GD%pM%pM%pM%*L%GJ%GJ%GJ%Nt%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GD%GD%GD%GD%GD%GD%GD%GD%1C%1C%1C%1C%1C%1C%1C%1C%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%1C%1C%i0$i0$i0$i0$=E =E =E =E =E =E =E =E *E *E *E }g }g -E -E Fu nP% D%f.#v_$Ju G%$oP%},$.I$GK$S2@Ar+6Z.Mq@9~#mo@ci@PK+WA+A$+(T+)B+U_@od+mD+_k+YA+]|+6e@6e@if#+w#ri+Qc$'i#'i#qi+qi+ri+ri+U4#a[+0[++4+0[+0[+!|+2/#J<@X4@0x@0x@X4@u^@|1@*3@=3@=3@7m@7m@_a@6k@6k@gc@>/+}5%}5%rV#JH$BJ$uc%jk%Er%Er%pP%pP%qP%qP%rP%rP%sP%tP%Bq$Pr$Rr$Q+%hg$z,$<}$1d%uP%Av$fl$ju%m7%WN$cQ$FH%FH%WI#`l%Tk%TS$bt%vP%wP%fX$fX$T)$xP%yP%|G%zP%AP%Am%Am%=O%lx%'t%13$BP%CP%DP%EP%FP%GP%HP%Iq%IP%kL%JP%KP%LP%MP%NP%OP%aU#PP%QP%$[$RP%SP%TP%UP%VP%WP%XP%SP%YP%ZP%`P% Q%.Q%BI%+Q%@Q%#Q%$Q%%Q%&Q%Ww%Cl%jO%*Q%=Q%Cj%oO%-Q%;Q%>Q%dt%)R$WI#FH%xM$0Z$S$$,Q%'Q%)Q%s*%N5%)@%80%83%!Q%~A%Ah$Pm$N6#d4$T6$vx#2J#~Q% `+{Q%]Q%^Q%/Q%(Q%_Q%:Q%c$we@we@aP$tQ$iQ%iQ%& $.L$%w#)6+`3+dF$jQ%kQ%lQ%mQ%nQ%oQ%pQ%qQ%rQ%sQ%t4#kh#E'#C(@e]@X^#-z$)M H~ WA a~ /7 qI#:} d2 d2 X-@_: HW.U} ^z &<@'f%ED rJ#FO c%.$G@Y*+so.ZL Y>+'E.Dg%f_.jb@Au.fr Ra+Bm.gK A. )5 Ea+6j+PF+3K@Jb#P~ w*$&c%&c%&c%w*$w*$w*$w*$/D./D.3K@3K@3K@Jb#BX@Jb#Hj.P~ /D./D./D.PF+PF+PF+/D./D./D./D./D./D./D./D.5e%5e%5e%@g%@g%]1%]1%]1%S}%S}%5e%5e%@g%@g%]1%^b+;~ ]! be+8g.8g.be+]! 5A.be+be+{! {! {! {! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! {! {! be+be+8g.'> 2&$;~@Ic%Ic%Eo+Eo+w*$w*$^b+/D.Hj.Hj.Jb#NZ@BX@Hj.NZ@PF+PF+/D.PF+^b++d++d+PF+^b++d+Y@$Y@$+d+PF+x8.NM+80+=L @$+ko.NM+{! 8g.x8.Lh+;~ 'g@/D.P~ PF+'g@ko.2^ 2^ 2^ 2^ 2^ 2^ 2^ 6=+5D+80+2^ 80+5D+", "+h.+h.vk vk +h.+h.d( vk vk vk vk vk vk vk vk +h.+h.+h.+h.+h.+h.+h.+h..h..h.vk +h.d( +h.+h.vk :j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.lI.lI.mI.kb.Mv.Mv.Ek$Ek$kb.mI.mI.lI.lI.mI.mI.kb.m` :j.uk tk tk uk :j.m` m` m` m` m` m` m` m` m` n` n` G6.G6.G6.G6.Vh.Vh.sN%sN%sN%sN%OK.OK.OK.sN%is@hY.9%.X)@G6.9, hY.X)@G6.9, 9, VW.9, G6.hY.(j.:j.ke he he 2b 2b 2b ;_ he he he he he he he m` _j.G6.9, 9, 9, 9, G6.hY.hY.hY.hY.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.X)@G6.9, G6.X)@9%.hY.9, 'K.'K.'K.'K.'K.'K.'K.'K.mI.mI.lI.'K.'K.lI.mI.:j.w8 6[ og C. ~# tQ%Gj#|q .B e{ lr *z.jr uQ%vQ%GG#~[#42 | +$o+fk@yJ.wQ%fi -2@J8 z[@/b xQ%yQ%6A zQ%}-@c~#v}@fY.#k>#iE${F$)f#U{$TI#_X@XQ%XQ%[K#[)#J[#Nw#+ +Pr#)/#*x%ZN%`N%`N%ZN%l[+qX+X,@Y_@s!$|v@p%$j>@Ca+`w =P ml T^#y'%`C%YQ%no%no%no%Nv Nw o($o($o($VH%VH%1C%1C%1C%1C%^,$^,$i0$i0$i0$i0$i0$i0$i0$i0$GD%GD%GD%GD%GD%GD%GD%GD%pM%pM%*L%*L%*L%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GD%GD%GD%GD%GD%GD%GD%GD%1C%1C%1C%1C%1C%1C%1C%1C%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%1C%1C%i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$=E *E *E *E }g }g -E Fu no%3`@`y v_$;z$Qv vo@+/@Ns$xr%w1#Zo$tp%A0%]B+Tx#j)$&N+6Z+vI+Kl+}T+)B+mD+rD+/+@2&@oB#Pg+6e@Pg+g0#mi+^|+^|+^|+mi+mi+mi+mi+]|+=g$E:+E:+@4+@4+B)$=k+J<@X4@0x@0x@X4@u^@|1@*3@Rl$Rl$AM$Ld$7m@_a@6k@gc@8g$mE$mE$8g$5l$-k$OG%6l$+F$_V$Rp$ZQ%`Q%.O%tP%)'%)'%)'%Mp$ R%Fw$;0%d#%j>$<}$1d% J%uP%Nm$ju%m7%$F%hf%FH%.R%QM#vm%+R%`m%OT$Cq%gg%Xr%Xr%@R%@R%Ob%0H%(w%#R%$R%$R%`n%%R%'t%&R%*R%=R%T7$)O%-R%;R%>R%,R%'R%)R%!R%~R%{R%]R%^R%:O%/R%Ym$(R%_R%:R%g$!m$YR%ZR%$;%lO@2A#^m@=r$:V$DJ$9X#K'%@*%:z$B0+;|+hd+$2+hd+I#$-6$:@$$w#c0$7|$7|$ye@xe@~O$~O$>c$X3+^ %`R% S%kd+.S%+S%@S%#S%$S%%S%&S%*S%PA#VX.=S%]-#e]@ix@u'@+-#Jt$T~#I~ QT@!)#RT@<} h2 Qh Si w) 1)@!y K`+;z.1##ps .F -S%.u%qs.qs.qs.,h.Ar.2{+1{+09.eY+fb%;S%e6 Ha :@ X[ .Z v]#J> >S%x*$O4%Fc%S}%w*$&c%&c%&c%w*$w*$w*$w*$uq.P~ Hj.3K@Jb#Jb#+R@NZ@Hj.P~ /D./D./D.PF+PF+PF+PF+PF+PF+PF+PF+PF+PF+PF+@g%@g%@g%]1%]1%Fc%Fc%Fc%@g%@g%@g%@g%]1%]1%]1%+d+9Y+be+be+be+be+be+be+be+{! {! be+be+be+be+8g.8g.]! ]! ]! ]! ]! ]! ]! ]! ]! ]! {! {! be+be+8g.'> Eo+Ic%;~@;~@2&$2&$=|$=|$^b+/D.Hj.3K@NZ@KE#BX@Hj.KE#+d+^b+PF+/D.PF+PF+^b+PF+PF+^b++d+Y@$+d++d+Lh+13+5D+O4 =L 13+13+be+8g.x8.Lh+'g@Lh+PF+/D.PF+'g@]! ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.@$+", "d( d( +h.+h.d( d( d( +h.+h.+h.+h.+h.+h.+h.+h.+h.+h.+h.+h.+h.+h.+h.+h.vk vk vk +h.+h.+h.+h.vk :j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.mI.kb.kb.Mv.Mv.Ek$Ek$Ek$kb.mI.'K.<].<].'K.mI.kb.m` oG.tk !B !B tk oG.m` l` l` l` l` l` l` l` l` n` n` G6.G6.G6.G6.Vh.Vh.Vh.sN%sN%sN%OK.OK.OK.sN%is@hY.X)@hY.G6.9, G6.X)@VW.VW.VW.VW.9, 9, G6._j.:j.ke ke he he 2b 2b 2b he he he he he he he m` _j.G6.VW.8v.8v.VW.G6.hY.X)@X)@hY.hY.G6.9, 9, VW.G6.G6.G6.G6.G6.G6.G6.G6.9%.hY.G6.hY.9%.9%.X)@G6.'K.'K.'K.'K.'K.'K.'K.'K.mI.lI.lI.lI.lI.lI.lI.:j. n Ll 3b R% R% U+ d hm d $`{$!#.{<@2E@1C@Sx@pt@_L.Zk@qO.y^%>Q.,S%=z.QC@9G@>y.>Q.:,.'S%)S%Mq !S%;$%5|+ZD.M9#[a$Z:$B~$%N$L6@tc@@o+uA%~S%0'@{S%]S%^S%/S%(S%xJ%*+%Yh%ul%7;$QG#pN$%F#s7$_S%&0%Da%:S%$S$I@4|+qK@Z<#i$+i$+:M#k>#*e#0&%u1#Hy$$Q$TI#_X@aS%!/#xD%[)#J[#sy#iB@iB@sp%ts@[x#_M#_M#im@~b#l[+O]+P]+rL.3&#pZ.@g+MX$~}+nI@ml T^#h.#y'% D%no%no%Nv Nv o($o($o($Pv -z -z i0$1C%1C%1C%^,$+I$i0$i0$i0$i0$i0$i0$i0$i0$GD%GD%GD%GD%GD%GD%GD%GD%*L%*L%*L%*L%*L%*L%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GD%GD%GD%GD%GD%GD%GD%GD%1C%1C%1C%1C%1C%1C%1C%1C%GD%GD%GD%GD%GD%GD%GD%GD%4Q%4Q%GD%GD%1C%1C%i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$=E =E *E *E *E }g }g Du Nw Ux oI@6G@-E 2r@R-$q[#f%%bS%n4#pC$cS%dS%}7$3V+uy+<_+zb#R.+O,@K,@@w+[G+<9@[*$q=$Tn#lc#Pg+]|+bc#mi+^|+M0+M0+{_+{_+mi+mi+F:+$a@/6+E:+6e@6e@Nn#Mg+J<@X4@0x@0x@X4@u^@|1@*3@uV#uV#tV#AM$7m@_a@6k@6k@;/+rh$mE$>/+5l$6l$Si$6l$!x$:V$;r$Rp$`Q%.O%tP%)'%eS%fS%ro$gS%hS%iS%Hw$[}$qk$jS% J%uP%Nm$Ud$m7%$F%hf%FH%kS%xn%Zl%zn%Zm%lS%gg%fg%gg%gg%Fe%mS%nS%oI%Io%sG%Jo%oS%6t%pS%qS%,O%,^#U7$)O%rS%-R%FC%sS%bR%tS%uS%vS%wS%FI%xS%yS%zS%AS%`1$RQ#BS%CS%DS%ES%FS%bU#GS%HS%IS%JS%KS%LS%MS%NS%OS%PS%QS%RS%SS%#Q%TS%US%VS%WS%ON$XS%hR%iR%YS%ZS%1b%Xj%[s%'B%s7%sl%`S%n6% T%.T%+T%&d%v4%wi%QC%Ed%!A%Pm$6p#@T%bN+wT+)=$ Q+#T%$T%%T%&T%*T%=T%cA -T%;T%S8 rR#>6#LN#>T%,T%'T%)T%c7#d7#IR%mx dw dw 0~ 0~ [E@9V ]@$]@$JR%9'$%W@@~ ^|@^|@/|@/|@/|@(|@:|@:|@[|@$4@Eu Kv &E u1$i0$i0$=E =E =E =E *E *E i0$i0$i0$i0$i0$i0$i0$i0$|A |A |A |A |A |A |A |A |A |A |A |A |A |A |A |A 4Q%4Q%GD%GD%GD%1C%1C%1C%i0$i0$i0$i0$i0$i0$i0$i0$*L%*L%GJ%Nt%u1$&E Kv Eu u1$u1$u1$u1$u1$u1$u1$.y Pv Pv Pv Pv Pv -z -z i0$1C%+I$+I$#F%#F%#F%NL%|N%VH%yz%^G%-z .y .y u1$&E &E &E Kv Kv Kv Kv q<$-E ^d !T%M4$9e+!2+~T%Ap#35%] +@6$qn%!H$5($5($hX+gX+T_@jy+jy+jy+jy+jy+jy+jy+SR%{T%P8%]T%^T%/T%C@@{k#a^@q<@;}@;}@l#$l#$oi$oi$mZ@M+#vp#hX+_P+u_%b>%n%$8~#8~#[_+QU#5&@3G+[V+UK+7V@H_@8]+O@@d_+Oq@NJ@..@9E$( %oS$t)$s)$(T%dQ%_T%0S%:T%)8@<|@v! 6F T^#V^#-! -! -! -! -! -! -! -! tG -! -! -! -! tG sG 8r q[#SD@5P+)`+*C%/$//$//$$u$7|$>c$e8$e8$#w#}T% S%'f+|T%1T%2T%3T%4T%5T%6T%7T%8T%P0@9T%0T%jI%r[#bL#N3%{L$^D%[e 0~ !)#w! bP@:} -[ _)@k_ k} !8 ~z ;z.Yv Cv t:%3j.aT%!$#^6@+S.!(+FD {I@c|%][@J%+bT%cT%T~$1 .Gb e, 61.ko.,&+L8@=|$Eo+mq+Be+z$$WD@&c%&c%&c%&c%w*$w*$w*$w*$ F.uq.Hj.3K@Jb#NZ@cT@KE#Hj.P~ /D./D./D.PF+PF+PF+PF+PF+PF+PF+PF+PF+PF+PF+]1%Fc%Fc%Fc%Fc%Fc%Fc%Fc%@g%@g%@g%@g%@g%@g%@g%PF+.s.w8.be+{! {! be+w8.gA {! {! be+be+8g.w8.w8.gA ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! {! {! be+be+8g.'> Eo+Ic%;~@;~@=|$u3$u3$x*$+d+PF+3K@3K@NZ@KE#+R@3K@Ae++d+^b+PF+/D./D./D.PF+P~ P~ /D.PF+^b+^b+^b+Lh+@$+6=+=L =L =L @$+8g.8g.9Y+Lh+Lh+Lh+PF+PF+PF+Lh+]! ko.]! ko.]! ko.]! ko.Ea+NM+5A.NM+]! 13+", "d( d( d( d( d( d( +h.+h.+h.+h.+h.+h.+h.+h.+h.+h.+h.+h.+h.+h.+h.+h.+h.+h.+h.+h.vk vk vk vk +h.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.Ek$Ek$Ek$Mv.Mv.kb.kb.mI.kb.mI.'K.<].<].'K.mI.kb.m` oG.tk !B !B tk oG.m` l` l` l` l` l` l` l` l` n` n` n` n` G6.G6.G6.Vh.Vh.Vh.sN%sN%sN%sN%OK.sN%is@G6.X)@hY.9, VW.G6.hY.8v.VW.VW.9, G6.G6.G6.n` oG.le ke ke he he 2b 2b he he he he he he he m` _j.G6.VW.8v.8v.VW.G6.hY.X)@X)@hY.hY.G6.9, 9, VW.G6.G6.G6.G6.G6.G6.G6.G6.9%.hY.G6.hY.9%.9%.X)@G6.'K.'K.'K.'K.'K.'K.'K.'K.lI.lI.lI.mI.mI.lI.lI.kI.Hu+6!.Y6.Ll b/ p] p] q$ r9+c(.dT%@I+(b 7|@|a :b {<@#n@#n@W}%W}%eT%fT%eT%fH@JA+F!#fk@EC.gT%[K }K 6z%b!+5g@Pe@|O.e<#6%%AV#^-#:-#zV#:B@hT%iT%jT%'>@}N#kT%lT%mT%nT%oT%<2%^B%83$vx#KO#ct%Mx%nX$P!#]W#P!#pT%1g%0Z$4S$R5%qT%rT%|S%X%%sT%3S%3S%tT%uT%W+%m-%)5%A*%vT%bP%TQ%7S%8S%iD#Y @Ts@i(%D:%o1#Xv%@y =^$Mw Ux Ux ^A ^A ~ $XR%:T%:T%mh$q)$wT%-2%=C+8v#H_#iT$_V#4|+qK@Z<#q##i$+:M#k>#*e#0&%u1#WR$]<%;/#1f+k$+9!$~=#B1#Ub+li@=1@=1@f$@8G#53@im@im@im@/i@/i@`@+h-+)(@xO.&>#Sq@2L.y~$CN (e W^#h.#xT%yT%no%no%no%Nv Nw o($o($o($Jv Jv =E i0$1C%1C%+I$+I$i0$i0$i0$i0$i0$i0$i0$i0$GD%GD%GD%GD%GD%GD%GD%GD%GJ%GJ%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%4Q%4Q%4Q%GD%GD%1C%1C%1C%1C%1C%1C%1C%1C%1C%1C%1C%=E =E =E *E *E *E }g }g .y PC ^Y@6G@-E )J [,$`=#B(%,9%zT%;n%AT%Z<%$Zv#$qk$jS%Fq$uP%@O%Ud$DT%FD$>B%ET%kS%wJ$zq%Wl%OT$FT%GT%6L$xf%(s%%p%0W$HT%vu%=O%By%oS%Bm%nx%Uu%IT%JT%KT%hB%)O%LT%MT%NT%OT%PT%QT%RT%ST%,K%TT%UT%VT%WT%XT%YT%ZT%`T%x&$ U%.U%+U%@U%#U%$U%%U%&U%*U%=U%-U%;U%>U%,U%'U%)U%!U%~U%{U%1w%Ui%]U%^U%/U%*A%ik$GT%Af%5h%Cf%wo%q7%o7%om%dQ$(U%p#%_U%:U%[S%KN%QC%ft%rl%9+$PO#S 4|@^|@/|@/|@(|@(|@(|@_|@[|@<|@$4@vR@Kv u1$Nt%GJ%i0$i0$i0$i0$=E =E =E =E i0$i0$i0$i0$i0$i0$i0$i0$GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%4Q%4Q%GD%GD%GD%1C%1C%1C%i0$i0$i0$i0$i0$i0$i0$i0$*L%*L%GJ%Nt%u1$&E Kv Eu u1$u1$u1$u1$u1$u1$u1$u1$-z -z -z -z -z i0$i0$i0$1C%1C%1C%^,$+I$+I$+I$GD%]G%zz%0C%cC%aC%[A Rw Rw b|$b|$d.#d.#(0@(0@R5@%dU%eU%bK%!H$ K$kF$kF$iX+5$@2T+T_@T_@T_@T_@T_@T_@T_@AD+cX+1G+fU%gU%hU%H,@,}@a^@q<@o7#o7#l#$l#$M+#M+#!k#!k#vp#hX+pw$b>%n%$n%$<3@<3@Ge@! +yM@[V+[V+UK+BO@k7$(R#f&@Ar+)m+Wt+pS$5r$NK$fO$iU%jU%kU%lU%df%:T%:T%)8@<|@v! 6F V^#V^#-! -! -! -! -! -! -! -! tG -! -! -! -! tG sG 8r q[#@.@S^$9]@mU%`V+nU%&T@`0@)r$'O$@Z#K'%DM$e<$d<$Ai$Ai$/g$/g$Ze$od$5|$d0$Z%$;|+//$'|+Y3++K#.K#>6+oU%pU%qU%rU%ja#sU%tU%uU%vU%wU%xU%dq$q4#pC$yU%f7#8v#%-#BR@(V#lI@jt@R~#@t#XC@bP@Q} Ti Fj F( uc ZP.!#.#M )g+*l.a/%:i.g0.NR@98@]6@Ah%m|$zU%AU%QW.BU%CU%Rw.wn+z% }+.Y% w8.PU+QF+FI#DU%N}.EU%qN%FU%1n%%c%&c%&c%&c%w*$w*$w*$w*$ F.uq.Hj.3K@Jb#NZ@cT@KE#Hj.P~ /D./D./D.PF+PF+PF+^b+^b+^b+^b+^b+^b+^b+^b+Fc%Fc%Fc%Fc%Fc%Fc%Fc%]1%5e%5e%5e%5e%S}%S}%S}%P~ .s.w8.be+]! ]! be+w8.gA {! {! be+be+8g.w8.w8.gA ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! {! {! be+be+8g.'> Eo+Ic%;~@;~@=|$u3$u3$x*$+d+PF+3K@Jb#KE#KE#+R@3K@Ae++d+^b+PF+/D./D./D.PF+uq.uq.uq.P~ P~ /D.PF+Lh+=L 6=+@$+=L =L =L 8g.be+Lh+9Y+9Y+9Y+^b+^b+^b+PF+'g@]! 'g@]! 'g@]! 'g@]! 6j+5A.'g@]! Lh+{! ", "+h.+h.d( d( +h.+h.vk vk vk vk vk vk vk vk vk +h.+h.+h.+h.+h.+h.+h.+h.d( d( +h.vk .h.vk vk +h.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.Ek$Ek$Mv.Mv.kb.mI.lI.lI.kb.mI.mI.lI.lI.mI.mI.kb.m` :j.uk tk tk uk :j.m` m` m` m` m` m` m` m` m` n` n` n` n` G6.G6.G6.G6.Vh.Vh.sN%sN%sN%sN%OK.sN%VW.G6.hY.hY.9, VW.9, hY.8v.VW.9, G6.hY.hY.G6.n` oG.le le ke ke he he he he he he he he he he m` _j.G6.9, 9, 9, 9, G6.hY.hY.hY.hY.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.X)@G6.9, G6.X)@9%.hY.9, 'K.'K.'K.'K.'K.'K.'K.'K.'K.lI.mI.mI.mI.mI.lI.jI.Vh.Su$>~@ ]@iI.3b 1c !& Q $- GU%HU%>z.p8 ^c VC@>4@#7 IU%#7 #7 JU%KU%(f%=h@LU%MU%mv%QP.>N+NU%3Y.OU%PU%QU%RU%C%.'<@P[%9~%SU%TU%#/#r1@Pb$f4$UU%VU%WU%XU%YU%ZU%`U% V%.V%+V%@V%!E%#V%Aj%An%mc%E %$V%C3#%V%7%&V%*V%T$%a^%~Z$=V%tT%tT%uT%-V%A*%;V%k@%>V%,V%'V%RX#)V%!V%;`+N@%Yo$~-#16$Tv%>M =^$Hv 'Y$Ux QC q<$Oz$Oz$~V%,.%{V%MA$:[%O~$}_%./#.E#Vj$;{#kP%/B+qK@Z<#q##X[$:M#2k+9L#U{$dX#+.@iT$MJ@td+0Z+53@Y_@g&@~}@Ub+~}@=1@L6@f$@O]+53@mi@mi@Q]+Q]+ZJ.;N.7F.YD.`D.6<$f]@p!$kl /V#^0@&$$`y yT%3`@mP%mP%mP%'Y$'Y$Nw Nw Cu Cu =E =E i0$1C%+I$+I$i0$i0$i0$i0$i0$i0$i0$i0$GD%GD%GD%GD%GD%GD%GD%GD%GJ%GJ%GJ%*L%*L%*L%pM%pM%*L%*L%*L%*L%*L%*L%*L%*L%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%]V%4Q%4Q%4Q%GD%GD%1C%1C%1C%1C%1C%1C%1C%1C%1C%1C%i0$i0$=E =E *E *E *E Kv $B%Qw ^A ^Y@Kv *E }f [,$-z$1c#,9%^V%/V%(V%_V%<0#V##ek@:v@zp+.L+ED@Nx#:V%re@yc%$IV%JV%KV%LV%MV%NV%OV%PV%QV%RV%c^ SV%^r@TV%UV%VV%WV%XV%YV%aU%ZV%`V%d7#JO%IR%*p@vy LZ$LZ$0~ 0~ [E@x! d)%>S 0'$ZT@2|@(|@(|@_|@_|@:|@:|@:|@$4@$4@vR@Eu Kv u1$Nt%Nt%=E i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%4Q%4Q%GD%GD%GD%1C%1C%1C%i0$i0$i0$i0$i0$i0$i0$i0$GJ%GJ%Nt%Nt%u1$&E &E Kv u1$u1$u1$u1$u1$u1$u1$u1$i0$i0$i0$i0$i0$i0$i0$i0$1C%1C%1C%i0$i0$i0$i0$^G%Uw Uw Uw bC%[A @D%Qw d.#b|$i!$u~$(0@w~$;P k$#+x+jx@()#t[#Pw#f<#N]+35% ++@6$Hm$ K$(H$/H$/H$V.@V.@T,@T_@2T+T_@2T+T_@2T+T_@x)+T_@u;@Q@+1>@ W%3]+J)@a^@q<@o7#o7#l#$l#$M+#M+#vp#hX+hX+_P+pw$b>%b>%b>%<3@:3@no@d~@U0+AI+AI+VK+BO@H_@7F$d=@D)+G~+i|#Xo$Bo+A'$&W$fO$.W%+W%kU%OO%:T%Fy$>8@<|@v! 6F V^#V^#-! -! -! -! -! -! -! -! tG -! -! -! -! tG sG 8r ~}+zg@%$#}-+@W%)Y+#W%:a+!m@]p%bC$xI$+Z#K'%2X#nV#Kj$*l$6m$#Z#Lj$`c%Z1#Z1#,|+'|+'|+!6+)6+)6+)6+*2+$W%%W%h}#&W%*W%=W%-W%;W%>W%,W%.<+63@U{$6r$-H$)n#8'$ Eo+Ic%;~@;~@2&$2&$=|$=|$Y@$^b+3K@Jb#KE#Ae+cT@Jb#KE#+d+^b+PF+/D.PF+PF+^b+/D.P~ P~ uq.P~ /D.PF+9Y+=L 5D+13+13+=L O4 be+{! 'g@9Y+x8.9Y+^b++d+^b+/D.+d+'g@+d+'g@+d+'g@+d+'g@+d+Lh+PF+9Y+PF+Lh+", ".h.+h.d( d( +h..h.$~..h..h..h..h..h..h..h..h.+h.+h.+h.+h.+h.+h.+h.+h.~% d( +h..h..h..h.vk +h.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.m` :j.oG.oG.uk uk oG.oG.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.m` m` n` n` n` n` G6.G6.Vh.Vh.Vh.Vh.sN%sN%sN%sN%VW.n` _j.n` 1% 6% WW._j.1% WW._j.(j.Tl (j._j.n` oG.oG.oG.oG.:j.:j.m` m` m` m` m` m` m` m` m` m` n` G6.hY.X)@X)@hY.G6.G6.G6.G6.G6.G6.G6.hY.hY.hY.G6.G6.G6.G6.G6.G6.G6.G6.hY.9, VW.9, hY.hY.G6.VW.'K.'K.'K.'K.'K.'K.'K.'K.'K.lI.mI.kb.kb.mI.lI.jI.#88$5W%6W%7W%8W%9W%0W%aW%bW%cW%dW%eW%fW%gW%hW%iW%iW%5y%jW%kW%lW%a@%mW%nW%<5%oW%7c%Z%%b %b %_`$pW%D.%qW%V&%U&%S;%U&%@&%h-%rW%sW%kM%mr%4[%}F$NQ$-;%V4+t1$Z{$1/$as Cu Kv Kv H)$H)$yR@,.%{V%MA$:[%O~$*C+ck#hq+~q$5O#rK@/B+vc@Oe@i$+Vb+k #2k+q~+Pw#J2$h%%u[#(-#;/##++Q]+i|#O]+Gz$T)@-i#g~@LD+l[+i|#P]+Bp+Bp+m[+e=@'N.wL.&*+'4+B(@E(@Qp =0@x`#Yr $p@Yk@5`@4`@`y `y `y 3`@qI@Ux Ux Ux Du Du *E =E i0$1C%+I$+I$i0$i0$i0$i0$i0$i0$i0$i0$GD%GD%GD%GD%GD%GD%GD%GD%Nt%GJ%GJ%GJ%*L%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%GD%GD%GD%GD%GD%GD%GD%GD%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%GD%GD%GD%GD%GD%GD%GD%GD%]V%]V%4Q%4Q%4Q%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%i0$i0$i0$=E =E *E *E &E $B%aE%V.$c.#Qw u1$u1$Z;$1i {c$TL$}/%](%cE%%f$f7#,q$r9@&h#tW%-1#f^#(6$#7@'K$Lf%6d%,$$`J#dy+:k+RO@{/+-2+Lb+_6+~/+Sl+gi+YA+&k+@_+._+On+fi+W1#Ey#YN#J<@X4@0x@0x@X4@u^@|1@*3@11@11@_a@_a@_a@7m@7m@7m@V[$xd%9g$vL$AM$vV#$I%tV#Aq$Aq$-r$-r$Or$Or$ro$ro$tP%sP%gS%ro$iS%;0%7f$.j$pk$5:$Fq$ J%@O%fl$#O%FD$}V%.R%uW%;p%Wp%OT$Rd%Yi%/s%vW%kx%wW%^s%qI%qI%wW%ox%xW%gw%Wi%yW%yW%zW%AW%BW%X8$eO%CW%DW%EW%FW%SS%GW%zV%HW%IW%JW%GI%KW%LW%MW%NW%OW%PW%QW%RW%SW%TW%nV%KS%UW%VW%WW%XW%YW%ZW%`W% X%.X%+X%@X%#X%hG%$X%_{$%X%&X%]3$ON$X%xP+,X%'X%)X%!X%~X%{X%]X%^X%N~%Li /X%(X%_X%:X%$8{%}=%]-#i($8R+6/%6X%7X%eU%Hm$dA%(H$>L$GO$GO$_^$V.@>K@T,@>K@T,@>K@T,@>K@T,@X>%ib#YK+m#$J:++>#5G+wp#}V+4%$7V@7V@nZ@nZ@!k#!k#d8$d8$pw$pw$S!$S!$S!$S!$RS#1V#= +d~@+@#UK+VK+5%$gX@a=#Di$Ss@B%%W0+, $pl%%I$lT$jh$&W$OQ$a'${V%mh$XN%XR%/0@$4@$4@tG ;E ;E -! -! -! -! -! -! -! -! tG -! -! -! -! tG sG 8r Qp tc+*{#-1@8X%9X%}!@hN+02+)3@.7@sQ$JH$6X#@Z#Kj$7m$0X%aX%6m$;l$Lj$ 2#<$$|T#Y3+)6+d8+&2+ 4+ 4+ye$bX%cX%dX%eX%fX%gX%hX%iX%jX%kX%_0$hN$[N.lX% >$0V 2C 0~ Gv@:r@S~#j[#:r@XC@A&#l .U} zb E6 B%.1##v-.v9+'(+T*+)~.1=.)|.!|.V[.az%6/.mX%nX%oX%pX%qX%rX%#~.QQ.):+i~ .s.#0+ns%DI#p!#<(+sX%@:+s=+tX%uX%vX%%c%&c%&c%&c%w*$w*$w*$w*$/D./D.3K@3K@3K@Jb#BX@Jb#Hj.P~ /D./D./D.PF+PF+PF++d++d++d++d++d++d++d++d+^b+^b+^b+PF+PF+/D./D./D.PF+PF+PF+/D./D.P~ P~ P~ 9Y+{! {! ]! ]! {! {! be+be+be+{! {! {! {! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! {! {! be+be+8g.'> 2&$;~@Ic%Ic%Eo+Eo+w*$w*$Y@$^b+Jb#NZ@Ae+Ae+cT@Jb#NZ@PF+PF+/D.PF+^b++d++d+Y@$+d+^b+/D./D.PF+^b+'g@=L 80+NM+ko.@$+=L {! 5A.'g@9Y+y{ x8.+d+Y@$^b+/D.+d++d+Fc%+d+Fc%+d+Fc%+d+5e%/D.S}%P~ 5e%^b+", "$~.vk +h.+h.vk $~.N6 $~.$~.$~.$~.$~.$~.$~.$~.+h.+h.+h.+h.+h.+h.+h.+h.%% ~% +h..h.$~..h.vk +h.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.-H.-H.l` m` :j.:j.oG.oG.:j.oG.tk sk sk tk oG.:j.:j.:j.m` l` l` m` :j.:j.oG.oG.oG.oG.oG.oG.oG.oG.m` m` m` n` n` n` n` G6.G6.Vh.Vh.Vh.Vh.sN%sN%Vh.1% WW._j.n` 1% 6% WW._j.WW.n` (j.Tl Rl Tl (j._j.uk oG.oG.oG.:j.:j.m` m` m` m` m` m` m` m` m` n` 9, hY.X)@|{.|{.X)@hY.9, VW.9, 9, G6.hY.hY.X)@X)@G6.G6.G6.G6.G6.G6.G6.G6.G6.9, 8v.VW.G6.hY.9, 8v.'K.'K.'K.'K.'K.'K.'K.'K.<].lI.mI.kb.kb.mI.lI.~(.Gf.wX%Aa@Gf.is@is@xX%$y#$9.7!.zT.N~.1b yX%zX%AX%*J zA$f%#f$,.%MA$HB$U=%;@#Z^#t,%PA$;{#IB$rK@/B+vc@Oe@i$+Vb+mi$9L#u@+0L#8x$h(%*{#u}@*e#h&@T2@`@+'(@'/#-a$LD+LD+LD+i|#i|#Br+Bp+YJ.a]+4|+cR.GR.HR.&N@C(@g!@u'@#y 8r hB $p@%A@cB i*$~A ~A `y `y oI@qI@qI@qI@Fu Du *E =E i0$1C%+I$+I$i0$i0$i0$i0$i0$i0$i0$i0$GD%GD%GD%GD%GD%GD%GD%GD%Nt%Nt%GJ%GJ%*L%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%GD%GD%GD%GD%GD%GD%GD%GD%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%GD%GD%GD%GD%GD%GD%GD%GD%]V%]V%]V%4Q%4Q%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%i0$i0$i0$=E =E =E *E &E 3C%QO$Oz$V.$Qw gB .y u1$*E }f !M {c$Du+}/%)n#,f#$Y%8|$/B+2!+}V# 4#+x%%Y%%`#&Y%lh%xy#[G+s=@}]+&m+:k+-2+Lb+<]+Rl+Sl+gi+YA+&k+@_+._+On+fi+W1#Ey#+}#(a@X4@0x@0x@X4@u^@|1@*3@3}@3}@gc@6k@_a@7m@7m@Ld$7|$xd%9g$vL$AM$$I%$I%tV#ap$ap$Or$Or$Or$,o$ro$ro$*Y%sP%ro$Mp$;0%Qr$hg$.j$pk$5:$8u$ J%@O%fl$#O%=Y%}V%dR$uW%;p%cY$&O%Wj%Q|# o%-Y%^2$lx%;Y%i5$/w%wu%iO%>Y%,Y%,Y%qx%'Y%9J$)Y%!Y%#E%TS%~Y%{Y%]Y%^Y%/Y%(Y%_Y%:Y%P ~M m$#||@[|@[|@<|@<|@$4@$4@$4@Eu Eu Eu Eu Kv Kv Kv Kv }g *E =E i0$1C%GD%4Q%]V%i0$i0$i0$i0$i0$i0$i0$i0$*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%4Q%4Q%GD%GD%GD%1C%1C%1C%i0$i0$i0$i0$i0$i0$i0$i0$u1$u1$u1$u1$u1$Nt%Nt%Nt%&E &E &E &E &E &E &E &E @I$@I$],$],$],$],$i0$i0$1C%1C%-z Jv Du Fu qI@ z -f$Sw Sw dB .z ^A /0@k$#~@$nx$t)$ET$(<%Pf%9.%}g$RF#&I$aT+Gz$o)%HW$cK%bK%(^$dA%>L$>L$_^$_^$_^$_^$V.@5$@>K@5$@>K@5$@>K@5$@QY%:/+:_+hE$RY%5&@5G+R,+2R+4%$7V@7V@nZ@nZ@!k#!k#b>%pw$pw$pw$S!$S!$-I$-I$d8$46+j9@em@sd+.$#UK+wW#gX@a=#)g$C4#+*+A'#X@+]J$2w$H_#Gi$AD%hs#:[%q)$wR@XR%~ $/0@/0@$4@tG tG ;E -! -! -! -! -! -! -! -! tG -! -! -! -! tG sG :e ~t@E(@($@r%WY%Z%,Z%.y#Ae++d+;~@@u%'Z%)Z%p3.h;#!Z%~Z%{Z%]Z%+C%^0.%c%&c%&c%&c%w*$w*$w*$w*$PF+PF+Jb#3K@3K@3K@'@+3K@Hj.P~ /D./D./D.PF+PF+PF++d++d++d++d++d++d++d++d+^b+^b+PF+PF+/D.P~ P~ uq.+d++d+^b+^b+PF+/D./D.x8.]! ]! ]! {! {! ]! ]! ]! be+be+{! {! ]! 5A.5A.Ea+]! ]! ]! ]! ]! ]! ]! ]! ]! ]! {! {! be+be+8g.'> 2&$;~@Ic%Ic%w*$vv+vv+OJ.Y@$^b+Jb#NZ@Ae+Ae+cT@Jb#Jb#/D./D./D.PF+^b++d+Y@$B#@'W+Y@$+d+^b+^b++d+;~ @$+2^ cI+NM+@$+=L {! Ea+;~ 9Y+y{ x8.+d+Y@$^b+P~ Fc%Fc%Fc%Fc%Fc%Fc%Fc%Fc%&0+&0+%P%&0+S}%@g%", "vk vk $~.U5 N6 vk ~% +h.+h.+h.+h.+h.+h.+h.+h.~% N6 U5 vk d( .h.$~..h..h.vk +h.d( d( +h.vk .h.-H.tk sk :j.l` oG.uk :j.m` m` m` m` m` m` m` m` .h.vk +h.d( ~% ~% ~% ~% +h.+h.+h.+h.+h.+h.+h.+h.oG.oG.oG.oG.oG.oG.oG.oG.:j.oG.uk :j.-H.R_ l` :j.he -H.R_ l` oG.Tl (j.hY.G6.G6.G6.Vh.dD.%j.3o.3o._j.m` l` m` oG.oG.m` -H.oG.oG.oG.oG.oG.oG.oG.oG.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.9, 9, 9, 9, 9, 9, 9, 9, G6.G6.G6.9, 9, VW.VW.VW.G6.G6.G6.G6.G6.G6.G6.G6.9, 9, 9, 9, 9, 9, 9, 9, <].<].<].<].<].<].<].<].'K.'K.'K.'K.'K.'K.'K.jI.p;.Rm.DJ@_l.{N@Gf.Gf.c+#Vh.*o@Jc@$9.6!.if k$ 1q@)/ ^Z%vy@O{ ]2%/Z%c%A|@(Z%A(@pZ.~q$0L#u|@%x b$#_Z%:Z%$K+@E[#@f$sZ@ET#Ow##h+X[$h$+la@u@+9x$D]#b@}A cB {A {A `y `y 3`@3`@Ux Ux 'Y$'Y$Cu Cu =E =E =E i0$],$],$GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%u1$u1$u1$Nt%GJ%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%1C%1C%GD%GD%GD%GD%1C%1C%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%=E =E =E *E *E }g }g }g =E =E =E *E *E }g }g Kv i!$i!$i!$b|$Rw Rw Lv Lv PC Du -E 9~ [g =S HB$`=#Qs$qZ%6%%~Q#@/$t{$rZ%6y%WM$Cy$0s#oI+]G+Zg+G:+Ob+]/+`+#t&@s=@Nl+Nl+qD+qD+0X+N2@jp+hr+_1@gr+&3@2}@X4@u^@v^@v^@u^@(a@;:@*3@0X#11@6k@gc@6k@6k@_a@7m@a~+a~+a~+a~+Sl$Sl$Sl$Sl$cs$3u$,t$m7$,t$1s$[V%ro$)'%)'%Mp$ R%Fw$;0%Hw$[}$lm%R<$Av$Av$fl$Ud$DT%wO%sZ%uW%89%tZ%uZ%vZ%y:$wZ%'t%,T$xZ%yZ%xu%xu%zZ%AZ%Wi%Cl%Tu%BZ%9J$~t%CZ%DZ%EZ%`z%,R%FZ%GZ%[L%HZ%IZ%JZ%KZ%LZ%BI%EI%MZ%NZ%OZ%PZ%QZ%RZ%SZ%TZ%UZ%VZ%WZ%XZ%YZ%ZZ%cY%`Z% `%.`%+`%@`%#`%$`%%`%&`%~R%*`%=`%Ol%-`%;`%>`%nL%,`%43$'`%)`%)a%Sr%!`%79%Co%Do%~`%~`%{`%]`%@C$^`%/`%(`%_`%:`%<`%[`%}`%|`%IK 1`%2`%75 Kr 3`%4`%5`%6`%7`%8`%9`%0`%a`%b`%c`%d`%1`@e`%j[#xy G5@1r@=p@1r@/|@_|@[|@[|@||@%2@%2@dP@dP@dP@$4@$4@$4@$4@$4@$4@$4@$4@$4@vR@vR@Eu Kv &E u1$u1$1C%1C%1C%1C%1C%1C%1C%1C%GD%GD%GD%GD%GD%GD%GD%GD%f`%g`%g`%pM%pM%*L%GJ%GJ%GJ%GJ%GJ%*L%*L%*L%*L%*L%1C%1C%1C%1C%GD%GD%GD%GD%GD%GD%1C%1C%i0$=E =E =E u1$u1$u1$u1$u1$u1$u1$u1$Kv Kv Kv &E &E u1$u1$u1$=H$=H$Y;$Y;$Y;$Y;$=E =E GD%1C%-z Jv Cu Cu 'Y$Vx aC%0E%@D%^A c.#R5@;P r)$h`%AP$NX$i`%/J$3G$i+%j`%Uj$~}@L{$A1#99$c/$17$7G$.b$>J$-M$>L$;L$;L$#@%.@%5Z+iX+5Z+iX+5Z+iX+5Z+iX+5Z+iX+5Z+iX+5Z+iX+5Z+gX+nZ@nZ@nZ@nZ@vp#vp#vp#vp#d9$5($k`%n>%l`%l`%m`%n>%I$+I$+hF$]-+]-+VK+5%$5%$yA#BA#8F$'7$/a$B%%E3$}s# @$Wo$A(%.Q$hs#-2%W7@n$#)8@>8@>8@#W@<|@sG cP@cP@sG tG -! tG sG sG -! }g }g -! tG -! }g }g -E Rx@%S Uk$$g+n`%:E o`%p`%F]+q`%[D$r`%gB+#`#s`%1s%t`%u`%v`%w`%9S$'O$% $fc@Pi$YN#Qg+lV$x`%y`%z`%A`%B`%C`%D`%E`%F`%G`%H`%6B+1y+I`%Uv `i@R} +W@J`%DL%.t#.9 _C@_C@~)#]C@~)#y&#q[ ~o RY+K`%DX#Gt |}+=h.c8@G$#N;.O&.7Q 3i.b4@Gw -;+E*+C1@L`%M`%N`%O`%P`%Q`%6$+34.R`%I}+$0+1p%S`%):.h;#h;#T`%T`%U`%s=+(&%EU%jb%QU+QU+QU+vv+vv+vv+vv+^b+PF+Hj.!3.!3.Hj.BX@NZ@!3.uq.uq.P~ P~ /D./D./D./D./D./D./D./D./D./D./D.]_ x8.'g@9Y+({ ]_ .s.'g@y{ y{ y{ y{ y{ y{ y{ y{ {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! gA w8.be+{! {! be+w8.gA w8.8g.8g.be+{! ]! ]! h]@OJ.QU+Ic%Pw%u3$=|$2&$2&$6}% F.Hj.3K@3K@Hj.9$+34.Y1./D.^b+/D. F.6}%uq.PF+^b+^b+^b+^b+^b+^b+^b+Lh+@$+5D+@$+@$+@$+@$+be+be+'g@'g@Lh+Lh+PF+PF+/D./D.]1%]1%]1%]1%]1%]1%]1%]1%]1%]1%]1%]1%]1%]1%", "vk vk .h.N6 N6 vk d( +h.+h.+h.+h.+h.+h.+h.+h.+h.U5 $5 vk d( vk .h.+h..h.vk +h.d( d( +h.vk .h.-H.tk sk :j.l` oG.uk :j.m` m` m` m` m` m` m` m` +h.d( d( ~% ~% d( +h.vk +h.+h.+h.+h.+h.+h.+h.+h.:j.:j.:j.:j.:j.:j.:j.:j.:j.oG.oG.:j.-H.R_ l` :j.ke 2b -H.l` :j.oG._j.n` (j.hY.hY.G6.Vh.Vh.dD.hY._j.l` -H.l` :j.oG.m` -H.:j.:j.:j.:j.:j.:j.:j.:j.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.G6.G6.G6.G6.G6.G6.G6.G6.hY.hY.G6.G6.9, 9, 9, 9, G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.<].<].<].<].<].<].<].<].'K.'K.'K.'K.'K.'K.'K.jI.sF.V`%DJ@_l.{N@Gf.Gf.sF.xX%O7.x5.O7.6!.Y6.W`%N% j..j`+gK+}F T4%X`%F{%}W%DM.(O.1C@q3$Y`%P:+} +} +n6#1-+IM.,y rK#Z`%``%SV@ &. &mj#SY+-W@&{#$Q$w<@+ &@ &# &$ &% && &* &= &EB+Ji%- &; &> &ge%X0$, &' &NG$) &a9#a@%! &lY$c&$<5%z %N5%N5%oW%oW%~ &0y%s*%J&%@x%j=%8 %^C%k=%w %{ &)P%pW$Ax$K8%9,%] &Wj$0A%h8 _e _e 9~ 9~ w~$#h%{V%q)$F<%x'%8{%vC$OB@#{@(>$K+@E[#@f$sZ@ET#Ow##h+X[$Po#4|+(B+Qq@bI#*>#`F@.6$,-#g#@cR.bU%G)+`+$cv$3Y+M#$gh$aT+4Y+`R#0]@3&#JB@rO.87@42 Sq@hs%[/$~}+=0@x`#+<@>b@[|@v! {A {A `y `y 3`@3`@Ux Ux 'Y$'Y$Cu Cu =E =E =E i0$],$],$GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%Nt%Nt%Nt%Nt%GJ%GJ%GJ%GJ%*L%*L%*L%*L%*L%*L%*L%*L%1C%GD%GD%4Q%4Q%GD%GD%1C%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%i0$i0$i0$=E =E *E *E *E =E =E =E *E *E *E }g }f n!$$h%i!$b|$b|$Rw Ow Ow Pw Pw Fu Fu -! M4$/)#|6$n>#'Q#M.+^ &q{$+5$=K@M)@uI+R0+xp+Ob+sD+t&@s=@nD+Nl+Nl+Nl+qD+Jt+0X+hr+gr+_1@_1@|}@}1@X4@u^@v^@v^@u^@(a@;:@*3@11@11@gc@gc@gc@6k@7m@7m@Pi$Pi$Pi$Pi$=3@=3@=3@=3@Gt$3u$,t$m7$,t$1s$[V%hS%fS%fS% R%Bq$;0%Dq$d#%j>$<}$1d% J%uP%Nm$Ud$DT%wO%/ &{`%79%Sr%Ur%@9$v}$+i%xZ%( &( &Ji%_ &yu%: &5I$'Y%Dj%BZ%< &U0$[ &} &| &TS%1 &2 &3 &4 &5 &6 &AM%7 &'!$8 &9 &0 &a &b &c &d &e &f &g &h &HS%i &j &5R%LS%k &l &m &n &o &p &=P#q &$`%,!$r &s &t &u &Zo%v &w &DN$x &QJ%/w%y &T|#z &)Q$!a%A &)Q$!R$DQ#B &pV+/`%C &D &E &F &G &H &I &J &K &L &M &%t N &O &P &Q &R &S &]m#Cd#T &U &V &Ad#g@#W &Cn#X &:Q#jt@LZ$1r@W~#W~#W~#(|@:|@[|@[|@%2@%2@dP@dP@dP@R5@vR@vR@vR@vR@vR@vR@vR@vR@vR@vR@Eu Kv &E u1$u1$Nt%1C%1C%1C%1C%1C%1C%1C%1C%GD%GD%GD%GD%GD%GD%GD%GD%*L%*L%*L%*L%GJ%GJ%GJ%GJ%*L%*L%*L%*L%*L%*L%*L%*L%1C%1C%1C%GD%GD%GD%GD%GD%1C%1C%i0$i0$=E =E *E *E u1$u1$u1$u1$u1$u1$u1$u1$Eu Kv Kv Kv &E &E u1$u1$Y;$Y;$Y;$Y;$Y;$Y;$=E =E =E =E Jv Cu Du Du Fu QC +z +z q<$(0@;P D&#(<%AP$Y &OX$pV$B[%v$%xA%Z &` &-i#|0#98$rr%c/$O#%7G$!]$!H$ K$(H$$K$w/%w/%#@%P^%)I$9e#9e#9e#9e#9e#9e#9e#9e#9e#9e#9e#9e#9e#9e#9e#vp#nZ@nZ@nZ@vp#vp#vp#vp#d9$5($S!$n>%/R#/R# .&{t#..&-,$@#$->+->+5%$5%$J4#DA#AA#-c$5d$sD$y1#l~$i[%f<#~q$TR%^V%':%N3%F&#||@>8@>8@#W@#W@<|@$4@es es sG -! -E -! tG tG -E *E -E -! sG tG -E }g -! es o{ X^#Z^#%3 +.&@.&#.&s>+$.&%.&&.&J6+*.&04+~m@=.&-.&Op$;r$nt$)r$Y4@WH@:T+$/+,-+;.&>.&,.&'.&).&!.&~.&{.&k-#].&NA#^.&/.&7&$|d >z T} b4#bj#dj#~m#6q#U-@h< :: VE VE L1 ={ !o wW+s0 (.&(,.b| t:.V[._.&Ad@cQ.;h.zu.cH+&7./y.V=%f6 x<._$ ;8+:.&<.&[.&}.&DE%%P%I}+|.&$0+2p%CI#<(+v5.v5.e{+@:+U`%^0.^0.pN%%c%&c%&c%&c%w*$w*$w*$w*$^b+PF+Hj.!3.!3.Hj.BX@NZ@!3.uq.P~ P~ P~ /D./D./D.PF+PF+PF+PF+PF+PF+PF+PF+]_ y{ Lh+9Y+({ Hs .s.Lh+x8.x8.x8.x8.x8.x8.x8.x8.{! {! {! {! {! {! {! {! ]! ]! ]! ]! ]! ]! ]! ]! w8.8g.{! ]! ]! {! 8g.w8.{! {! {! {! be+be+be+f!+vv+&c%;~@Pw%=|$=|$Eo+Eo+P~ /D.Jb#Jb#Jb#Jb#'@+Hj.Y1.P~ PF+PF+P~ uq./D.+d+^b+^b+^b+^b+^b+^b+^b+Lh+13+80+13+13+13+13+{! {! 'g@'g@Lh+Lh+PF+PF+/D./D.^b+^b+]1%^b+]1%^b+]1%^b+]1%^b+]1%^b+]1%^b+", "vk +h..h.N6 N6 .h.d( +h.+h.+h.+h.+h.+h.+h.+h.+h.U5 $5 vk d( vk .h.+h..h.vk +h.d( d( +h.vk .h.-H.tk sk :j.l` oG.uk :j.:j.:j.:j.:j.:j.:j.:j.:j.~% ~% %% ~% d( +h..h.$~.+h.+h.+h.+h.+h.+h.+h.+h.m` m` m` m` m` m` m` m` :j.oG.oG.m` -H.-H.m` oG.le ke 2b 2b :j.oG.m` 1% (j.(j.hY.G6.9, VW.x5.8v.m` 2b -_ ;_ he ke 2b ;_ he he he he he he he m` WW.9, 9, 9, 9, 9, 9, 9, G6.G6.G6.G6.G6.G6.G6.G6.hY.hY.hY.hY.hY.hY.hY.hY.X)@X)@hY.hY.hY.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.hY.hY.hY.hY.hY.hY.hY.hY.<].<].<].<].<].<].<].<].'K.'K.'K.'K.'K.'K.'K.jI.#['$C(@~*@{`+!2+dR.5P+{~%~>+z'$B@$t.&N#$hE%;T.{~%VJ.!%@fW.3v@Tq@%c$j9$>g$G&#E&#x`#+<@:|@'8@#W@@W@{A `y `y 3`@3`@Ux Ux 'Y$'Y$Cu Cu =E =E =E i0$],$],$GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GJ%GJ%GJ%GJ%Nt%Nt%Nt%Nt%*L%*L%*L%*L%*L%*L%*L%*L%GD%GD%GD%GD%GD%GD%GD%GD%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%]V%]V%]V%]V%]V%]V%]V%]V%GD%GD%GD%GD%GD%GD%GD%GD%GD%1C%1C%1C%i0$i0$=E =E i0$i0$=E =E *E *E *E }f n!$n!$5'$&E &E Lv Ow #}$Mv Mv Ux Fu -! $:;$v.&8u$ J%@O%fl$DT%wO%w.&x.&79%/P$y.&z.&*1$-Y%9W$Ji%yu%A.&!t%A.&B.&[w%C.&D.&$i$E.&F.&US%G.&H.&&s%I.&J.&K.&L.&}L%M.&UJ%N.&O.&+X%P.&Q.&R.&S.&T.&+&,+&'+&&i%&R%43$3I$)+&T*$C:$Hf$tx#!+&~+&{+&]+&^+&/+&(+&_+&:+&<+&[+&}+&|+&1+&2+&1v 3+&4+&5+&6+&7+&8+&9+&0+&i$#P8#a+&{m#-f#c>#gI#b+&c+&d+&I~ @~ (|@_|@_|@_|@:|@<|@<|@<|@<|@$4@$4@vR@vR@vR@vR@vR@vR@vR@vR@vR@vR@vR@vR@Eu Eu Kv &E u1$Nt%Nt%1C%1C%1C%1C%1C%1C%1C%1C%GD%GD%GD%GD%GD%GD%GD%GD%Nt%$B%$B%$B%FD%FD%FD%FD%6C%6C%6C%7C%7C%7C%7C%*L%GD%GD%1C%1C%1C%1C%1C%1C%=E =E =E *E *E *E }g }g &E &E &E &E &E &E &E &E Eu Eu Eu Kv Kv &E &E &E *E *E *E *E *E *E *E *E }g }g }g -E -E -E -E -! dP@;P k!$7E$ET$=z$ F%3G$e+&f+&(T#g+&z+%h+&O]$i+&{l$1r$oo%,Z#90$bv$bv$qn%)H${J$:H$:H$~]$2 l} kb j{ >I+I+&Jt g2@q:.J+&i8@i8@jF.K+&xo.$T+V=%zp.87 ;D +6 :y L+&M+&N+&O+&P+&^o%&0+t=+$0+$0+p!#Q+&n3.t4.t4.b,+e6#pN%R+&R+&rN%Hc%Ic%Ic%Ic%Eo+Eo+Eo+Eo+^b+PF+Hj.!3.!3.Hj.BX@NZ@!3.P~ P~ P~ /D./D.PF+PF+PF+PF+PF+PF+PF+PF+PF+PF+({ w8.{! be+`Y pj gA be+be+be+be+be+be+be+be+be+{! {! {! {! {! {! {! {! 5A.5A.5A.5A.5A.5A.5A.5A.be+{! {! ]! ]! {! {! be+5A.5A.]! {! be+8g.w8.,&+Eo+;~@;~@Pw%2&$2&$w*$w*$Y@$+d+NZ@NZ@NZ@NZ@cT@Ae+!3./D.PF+PF+/D./D.^b+Y@$^b+^b+^b+^b+^b+^b+^b+Lh+ko.2^ ko.ko.ko.ko.]! ]! 'g@'g@Lh+Lh+PF+PF+/D./D.^b+Lh+^b+Lh+^b+Lh+^b+Lh+^b+Lh+^b+Lh+^b+Lh+", "vk +h.vk $~.N6 .h.+h.+h.+h.+h.+h.+h.+h.+h.+h.~% $~.U5 vk d( .h.N6 .h.vk vk +h.+h.+h.+h.vk vk -H.tk sk :j.l` oG.uk :j.:j.:j.:j.:j.:j.:j.:j.:j.d( d( ~% ~% d( +h.vk .h.+h.+h.+h.+h.+h.+h.+h.+h.l` l` l` l` l` l` l` l` m` :j.oG.m` -H.-H.m` oG.je ke he he :j.:j.l` R_ n` n` G6.G6.9, VW.x5.8v.:j.2b -_ -_ 2b he 2b ;_ 2b 2b 2b 2b 2b 2b 2b l` WW.9, 9, 9, 9, 9, 9, 9, G6.G6.G6.G6.G6.G6.G6.G6.X)@X)@X)@X)@X)@X)@X)@X)@9%.9%.X)@X)@hY.hY.hY.G6.G6.G6.G6.G6.G6.G6.G6.G6.X)@X)@X)@X)@X)@X)@X)@X)@'K.'K.'K.'K.'K.'K.'K.'K.'K.'K.'K.'K.'K.'K.'K.jI._r+1.&Su$sN%O7.~$+sN%{$+c+#sN%S+&-m.%j.Vh.is@P7.lP dc [% T+&0D%1O+_A+ $$LJ._f%-4@id%U+&aj%}A.C$$,S%fi { 9T.:B+cT+,m Q:@n_$j_@U9 1r Qw%FC.v8+n6#4u#dn$T&$Pb$t{%ob%V+&W+&X+&Y+&@V$7B%Z+&`+& @&.@&cZ%+@&@@&R %-h#_X$;#$+-$m7%~@%,h%$7%eQ$eQ$i6%b9%f&$I(#J(#J&%oW%8 %T;%y %T$$) &#@&B($mF$ww%$@&%@&&@&&B$+, {a 2r@[g {@${@$MA$F<%BP$NK$.J$Zx#D(@xc@.@$6=%!U+~f#mo%Ow#Ow#X[$k #*@&n[+P:+Qq@mm@zg@E(@2L.CJ.]($5e+{`+(>$+Y.YR%{~%{~%{~%yD%yD%=@&=@&Eh+Sq@t$#]c N6@j9$+(+G&#|d$8~ +<@1|@:|@'8@#W@@W@]A {A `y 3`@3`@Ux Ux 'Y$'Y$Cu Cu =E =E =E i0$],$],$GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%*L%*L%*L%GJ%Nt%u1$u1$u1$*L%*L%*L%*L%*L%*L%*L%*L%4Q%4Q%GD%GD%GD%GD%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%]V%]V%]V%]V%]V%]V%]V%]V%GD%GD%GD%GD%GD%GD%GD%GD%4Q%4Q%GD%GD%1C%1C%1C%i0$i0$i0$i0$=E =E *E *E Z;$-P -P -P *E &E Cu Ow Nv Mv no%Ux Ux -! -! es tG 5G@RC jQ E<%iq+M7%ux$`k#k[+>[#-@&lo@e[+ED+wI+Q0+)B+nD+mD+9X+#/+#/+#/+rD+v&@='@hr+gr+_1@_1@<1@&3@X4@u^@v^@v^@u^@(a@;:@*3@3}@3}@fc@fc@gc@6k@7m@Ld$Pi$Pi$Pi$Pi$=3@=3@=3@=3@Sp$3u$,t$,t$1s$1s$hS%iS%Bq$eS%Cq$)t$Rr$Rr$7f$j>$2d%Eq$;@&8u$>@&fl$DT%wO%,@&x.&79%)a%)`%rY% o%*A%&i$'@&)@&!@&[w%~@&{@&}w%[w%Ea$E.&dM$US%]@&H.&^@&/@&RS%(@&_@&:@&<@&[@&}@&|@&1@&2@&3@&4@&5@&6@&7@&8@&9@&0@&qc$a@&b@&c@&4#$d@&e@&XZ%f@&qV%cY%g@&h@&;U%i@&j@&k@&l@&#&,#&s-$$X#PH#d!+h< VH /7 b4#I,#{1 _} Q} B6 )z OD++I.@;@ZP.!z '#&.E@s.@Yd.It ps )#&8-@]h. H%!#&fb%~#&xN tY.77 Fl.p@ /&.+s.z<.)L.]n.{#&L*@]#&|n%S}%WD@WD@jb%Gu+p!#g6@b,+p!#{4%%c%9D%@g%@g%]1%2&$;~@;~@;~@2&$2&$2&$2&$^b+PF+Hj.!3.!3.Hj.BX@NZ@Hj.P~ P~ /D./D.PF+PF+PF+^b+^b+^b+^b+^b+^b+^b+Lh+y{ be+]! {! w8.gA 8g.{! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! ]! ]! ]! ]! ]! ]! ]! ]! {! ]! ]! ]! ]! ]! ]! {! ]! ]! {! {! be+be+8g.'> =|$Pw%Pw%;~@2&$Eo+w*$vv+3&$Y@$NZ@Jb#Jb#NZ@OZ@PC#NZ@^b+^b+^b+PF+PF+PF+^b+^b+^b+^b+^b+^b+^b+^b+Lh+NM+Zh@NM+NM+NM+NM+5A.5A.'g@'g@Lh+Lh+PF+PF+/D./D.Lh+{! Lh+{! Lh+{! Lh+{! 'g@]! 'g@]! 'g@]! ", ".h.+h.+h..h.$~..h.vk +h.+h.+h.+h.+h.+h.+h.+h.5% vk $~.+h.+h.N6 $5 U5 +h.+h.vk vk vk vk +h.+h.-H.tk sk :j.l` oG.uk :j.oG.oG.oG.oG.oG.oG.oG.oG..h.l:.!1.^* &% &% ^* ^* !1.!1.!1.!1.!1.!1.!1.+h.l` l` l` l` l` l` l` l` l` :j.:j.m` -H.-H.:j.uk je ri he he ke ke l` R_ i% 6% WW.n` hY.G6.G6.WW.oG.2b -_ -_ 2b he he 2b 2b 2b 2b 2b 2b 2b 2b l` WW.9, 9, 9, 9, 9, 9, 9, G6.G6.G6.G6.G6.G6.G6.G6.X)@X)@X)@X)@X)@X)@X)@X)@9%.9%.X)@X)@hY.hY.hY.G6.G6.G6.G6.G6.G6.G6.G6.G6.X)@X)@X)@X)@X)@X)@X)@X)@'K.'K.'K.'K.'K.'K.'K.'K.'K.'K.'K.'K.'K.'K.'K.jI.#9.^#&iI.*o@5!.*o@^#&/#&O7.is@dD.dD.is@is@1.&Su$H;@4!.=^ {$ |. T+&|h eQ+aF+(#&-4@+2@7d {<@nL.,S%Z1@[&%j[@j[@&N.`P.`P.RC@60 $<@:,._#&)!%5I%GZ.3k+0_#Pq@;I@wO.XJ.f.%1o%:#&<#&[#&}#&|#&dw%7Z%1#&2#&Lh%3#&4#&5#&P!#6#&3S$7#&=Y%m7%n7%et%yi%yi%et%}s%6;$t<#J(#J&%jZ%*V%Bb%0y%8#&9#&Qh%X $|e%NJ@@3%%@&hq$!T%!p$Qv ,M ,M 4z+4z+HB$:[%[H%W{$A'$.B#Mj#RP.>T.B[#4Y+8M@mo%Ow#Ow#X[$k #*@&n[+Xt+0#&mm@C(@2L.~t@UJ#u7 PM.`>$L_#a#&b#&I4%I4%c#&I4%d#&#l+#l+,t#uo@&y 'z X7@y~$k9$#y CN 8~ +<@1|@:|@'8@>8@{G$]A {A `y 3`@3`@Ux Ux 'Y$'Y$Cu Cu =E =E =E i0$],$],$GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%*L%*L%*L%GJ%Nt%u1$u1$u1$*L%*L%*L%*L%*L%*L%*L%*L%4Q%GD%1C%i0$i0$1C%GD%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%]V%]V%]V%]V%]V%]V%]V%]V%GD%GD%GD%GD%GD%GD%GD%GD%4Q%4Q%4Q%GD%GD%1C%1C%1C%1C%1C%i0$i0$=E =E *E Z;$v~$v~$v~$wt *E as Nw Au no%no%Ux Ux -! -! es tG ^Y@^Y@-! 'M I!$h!@k[$8D$&N$|0#x'$`~@$7u$Eq$;@&8u$e#&Nm$#O%wO%,@&x.&+0%f#&(d%g#&wu%( &5I$)@&!@&$&,$&'$&)$&!$&~$&[Q%FN#:f@O8#SJ#NH#MH#J,#w! _C@2C lI#0V IT mQ }|@%2@dP@<|@[|@$4@vR@vR@vR@vR@Eu QC PC PC PC Kv Kv Kv Kv Kv Kv Kv Kv Kv &E &E u1$Nt%GJ%*L%*L%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%*L%FD%{$&{$&QL%]$&^$&^$&^$&]$&]$&QL%QL%{$&/$&/$&$B%Nt%i0$=E =E *E }g }g }g tG tG tG tG -! -! -! -! vR@vR@vR@vR@vR@vR@vR@vR@$4@$4@$4@vR@vR@Eu Eu QC Ux Ux Ux Ux Ux Fu Fu -E -E 9~ 9~ !M [g [g [g 4z+OQ${I$kT$}g$e+&&g%8u%{q$n>#<>%L#$x1#y1#6c#3w+S4$N)$&6$&6$&6$47$47$47$47$Ls$Ls$2#%2#%s$%s$%s$%s$%!I$im$im$im$im$im$im$im$;u$;u$;u$;u$;u$;u$;u$b9$!k#!k#!l$!l$!l$!l$!I$!I$($&(^$(^$1,$_$&:$&<$&H]$[$&; $nz#i~+y)+5%$J4#_/#2O#k7$w4#k~+*W#25%}$&v{$M/+-T.:0$~^%g%%_R@*S s[@cN@+n@|$&]Y@<|@<|@EN es `:@tG *E =E *E }g *E i0$-E tG sG sG -! -E -! <|@!8@1$&2$&3$&4$&Na%5$&8+{o%<5@(m%5e%z4$z4$jb%Gu+|r%j$&+X+@u%Hc%Eo+5e%Hj.Hj.Hj.2&$;~@;~@;~@2&$2&$2&$2&$^b+PF+Hj.!3.!3.Hj.BX@NZ@Hj.P~ /D./D.PF+PF+^b+^b+PF+PF+PF+PF+PF+PF+PF+9Y+Lh+]! 5A.]! {! be+{! 5A.{! {! {! {! {! {! {! {! {! {! {! {! {! {! {! {! 8g.8g.8g.8g.8g.8g.8g.8g.]! ]! ]! {! {! ]! ]! ]! 8g.8g.be+be+{! {! ]! M8@u3$Pw%;~@Ic%Eo+w*$w*$w*$Y@$+d+Jb#3K@3K@Jb#cT@Ae+PC#Y@$+d+^b+PF+/D.P~ uq.^b+^b+^b+^b+^b+^b+^b+Lh+NM+Zh@NM+NM+NM+NM+5A.5A.'g@'g@Lh+Lh+PF+PF+/D.x8.{! 13+{! 13+{! 13+{! 13+]! ko.]! ko.]! ko.", ".h.+h.+h..h.$~.$~.vk +h.+h.+h.+h.+h.+h.+h.+h.5% vk $~.+h.+h.N6 $5 U5 d( +h.vk .h..h.vk +h.d( -H.tk sk :j.l` oG.uk :j.oG.oG.oG.oG.oG.oG.oG.vk $~.}9.!1.^* &% &- &% &% !1.!1.!1.!1.!1.!1.!1.!1.m` m` m` m` m` m` m` m` l` m` :j.m` -H.l` :j.tk nf ri 2b 2b ke le m` -H.g% 6% WW._j.X)@X)@hY.n` tk ke ;_ -_ 2b ke le ke he he he he he he he m` WW.9, 9, 9, 9, 9, 9, 9, hY.hY.hY.hY.hY.hY.hY.hY.hY.hY.hY.hY.hY.hY.hY.hY.X)@X)@hY.hY.hY.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.hY.hY.hY.hY.hY.hY.hY.hY.lI.lI.lI.lI.lI.lI.lI.lI.'K.'K.'K.'K.'K.'K.'K.l` l3 P7.iI.6!.5!.P7.H;@/#&xX%O7.O7.xX%_r+xX%sN%S+&eR Su$V5.&j.ng.,; xq k$&4'.ev+Sm U7 fi nL.#n@0@V&#Za$jm@]0%+U@g+%5I%p$&-$%e|@q$&Xt+GR.;W+>T.r$&s$&t$&u$&KZ+v$&w$&qY%Pk%x$&y$&z$&A$&.z%}X$eK$>#$_S%il%>B%B$&uo%uo%v8%C$&eR$D$&y<#]C% -$.Y%E$&F$&.Y%q3#G$&H$&$q%I$&E_+Q}$$Y%HJ%!T%!p$o$#,M 'M 4z+HB$F<%:[%W{$vC$=v$T.B[#4Y+8M@mo%Ow#Ow#X[$:M#J$&u@+ma@>1#1A../@ak#>z A6 `i@@(+l>@Pp L_#PR.K$&b#&b#&#l+L$&a#&Sh%Z #'<$Z4 nm@e'$o!$2A kl kl Z:@+<@_|@:|@'8@>8@{G$@W@{A `y 3`@3`@Ux Ux 'Y$'Y$Cu Cu =E =E =E i0$],$],$GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GJ%GJ%GJ%GJ%Nt%Nt%Nt%Nt%*L%*L%*L%*L%*L%*L%*L%*L%GD%i0$=E *E *E =E i0$GD%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%]V%]V%]V%]V%]V%]V%]V%]V%GD%GD%GD%GD%GD%GD%GD%GD%4Q%4Q%GD%GD%1C%1C%1C%1C%1C%1C%1C%i0$i0$=E =E uK $5$$5$$5$Z{$wt as Au Au Gu Gu Ux Fu -! %&XW%,%&'%&)%&!%&~%&{%&]%&^%&/%&(%&_%&:%&<%&Da$My%Ww%[%&xZ%x}$Z#&}%&|%&kB$1%&2%&3%&4%&4n$L(%5%&/K 6%&7%&8%&9%&0%&a%&b%&c%&d%&e%&f%&'G B&#Dd#zg#g%&h%&i%&i%&j%&b4#a7#S:@va _ T_ >_ ke le ke m` -H.l` (j.Tl Tl (j.G6.WW.!B ie 2b ;_ he le ie ie ke ke ke ke ke ke ke :j.WW.9, 9, 9, 9, 9, 9, 9, hY.hY.hY.hY.hY.hY.hY.hY.G6.G6.G6.G6.G6.G6.G6.G6.hY.hY.G6.G6.9, 9, 9, 9, G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.lI.lI.lI.lI.lI.lI.lI.lI.'K.'K.'K.'K.'K.'K.'K.l` -J.*- Ll *- Y^ zT.H;@6!.5!.6!.*o@/#&O7.O7.is@Aa@+4.N2.eR kf iP.kg.,++!0 8* {M+L%&M%&N%&hi |- ]>+O%&bb P%&8G.KU%]W.Q%&1Z@P_#]5@l>#$@#R%&S%&-$%$P DS+5|@$<@T%&!%@+g+d#&U%&V%&W%&_j+X%&Y%&<#@Z%&`%& &&cZ%.&&+&&@&&7h%@0%'B%om%&8%+a%#&&Hd%$&&%&&sZ%&&&l&$96%.~$*&&=&&R$%.Y%N*$-&&Fp$x$%;&&U-+*/#{[%D;@p$#o$#o$#'M 'M (J$%>$F<%:[%It$A'$WJ$t,%2O.n^#>T.B[#4Y+8M@C(%S2@Ow#X[$Vb+_B@$++xg@5|+iE#9T@%y A6 s7 A6 =l h>#X]$y=$#6#oT.cW.PR.a#&Sh%N_#ks+C(@ak#Y1@)E BN #p@#p@:g ,J Z:@+<@_|@:|@'8@>8@~ $@W@{A `y 3`@3`@Ux Ux 'Y$'Y$Cu Cu =E =E =E i0$],$],$GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%Nt%Nt%Nt%Nt%GJ%GJ%GJ%GJ%*L%*L%*L%*L%*L%*L%*L%*L%i0$=E }g -! -! }g =E i0$4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%1C%1C%i0$i0$i0$1C%1C%1C%1C%i0$i0$=E uK $5$>&&>&&xr$Z{$Y{$1/$1/$Iu Iu ;z$;z$ds .~ 'M EN H)$/0@>8@cN@SC (e @L@BF@,&&Je$hi$D]%y_$rd+=4+0y+|G+^G+[T+/G+_V+_V+_V+69@-]@hp+u~@u~@$!@t~@X4@(a@X4@u^@v^@v^@u^@(a@;:@*3@we@we@ye@ye@fc@6k@7m@=3@ml%~-%~-%~-%8j$8j$8j$8j$Iu$4c$d6$}b$|s$}b$B'%Fw$gS%)'%Bq$)t$Rr$Qr$Hw$Sr$pk$5:$8u$Fq$>@&Nm$M$&t0$'&&)&&`9%!&&~&&{&&'T$AZ%[w%~@&]&&^&&/&&/&&(&&Bu%|w%_&&m#&)F%P$&ux%Q$&:&&<&&[&&r#&}&&|&&1&&2&&2L%3&&4&&5&&k &6&&7&&8&&~)$9&&bU#4W#0&&a&&b&&eN.c&&d&&e&&f&&g&&h&&WW%ZZ%X$&i&&j&&l@&b@>b@r[@r[@>b@>b@rG rG sG sG [|@[|@[|@[|@[|@[|@[|@[|@[|@[|@<|@<|@$4@$4@$4@^Y@k%&T&&T&&k%&3`@qI@6G@6G@es es I5@F&#`~#U&&V&&l3%8H+W&&h,$zD%yD%zB%/k#g<#x1#k[+]B+.3%47$hX+hX+}{#WK+_P+_P+hX+Wx$00$,p$,p$b9$b8$im$!I${J$ K$ K$!H$zw%#/$#/$#/$#/$#/$#/$#/$7G$7G$7G$7G$7G$7G$7G$c8$~l$Qm#~l$~l$~l$~l$Ls$Ls$.b$(^$($&X&&Y&&gA%Z&&cA%(H$GO$5Z+2R+CI+J4#S;+A,+H_@H_@w4#w4#Z5%`.+`&&] +2_+1k+s!$Rs%hN$W4+=0@r[@cN@+n@B'$(Y@(|@3|@YT@YT@H~ >b@-E *E }g -E }g *E =E }g -! -E *E =E }g Eu { $ *&.*&+*&@*&#*&$*&PT@iI#%*&&*&**&=*&-*&;*&>*&u/+,*&C[%wk$'*&32+)*&n1@W^@z9#9]+l[+Ny$c7%G[#n4#XJ$0|%-t#Q@&.A@R~#!*&~*&zz#d1#R} ro {*@oB.g4@V}%S'%q@#]j xn _h 3B wp {4@X5@^4@{*&Ve.Dg%,4%10.]*&^*&/*&r2.>5 }f.v~.(*&bI+_*&:*&D8+ks@Pj+S|@)*%Jb 9$+!3.P~ w*$Ic%&c%QU+<*&x2%x2%8' 8g.d> 8S.9S.+$+w*$&c%&c%&c%w*$w*$w*$w*$^b+PF+Hj.!3.!3.Hj.BX@NZ@3K@/D.PF+PF+^b+^b+^b+^b+P~ P~ P~ P~ P~ P~ P~ y{ 9Y+be+8g.be+be+{! be+be+8g.8g.8g.8g.8g.8g.8g.8g.{! {! {! {! {! {! {! {! 8g.8g.8g.8g.8g.8g.8g.8g.]! {! 8g.w8.w8.8g.{! ]! be+be+be+be+{! {! {! ZW+2&$;~@&c%&c%w*$Eo+=|$u3$PF+PF+NZ@KE#KE#NZ@BX@Jb#Jb#P~ F.uq.PF+^b+/D.uq.^b+^b+^b+^b+^b+^b+^b+Lh+13+80+13+13+13+13+{! {! 'g@'g@Lh+Lh+PF+PF+/D.x8.13+80+80+80+80+80+80+80+Zh@Zh@Zh@Zh@Zh@Zh@", ".h.d( d( vk $~.$~..h.+h.+h.+h.+h.+h.+h.+h.+h..h.M6 M6 .h.~% +h.+h.~% d( +h.vk .h..h.vk +h.d( -H.tk sk :j.l` oG.uk :j.uk uk uk uk uk uk uk uk ~% &% &% &% ^* !1.l:.}9.!1.!1.!1.!1.!1.!1.!1.+h.oG.oG.oG.oG.oG.oG.oG.oG.-H.m` :j.m` l` l` oG.tk he ;_ -_ 2b oG.uk oG.:j.:j.oG.tk Ql tk (j.WW.6% lC je he 2b ke ie je je le le le le le le le oG.WW.P7.9, 9, 9, 9, 9, 9, hY.hY.hY.hY.hY.hY.hY.hY.9, 9, 9, 9, 9, 9, 9, 9, G6.G6.G6.9, 9, VW.VW.VW.G6.G6.G6.G6.G6.G6.G6.G6.9, 9, 9, 9, 9, 9, 9, WW.lI.lI.lI.lI.lI.lI.lI.lI.'K.'K.'K.'K.'K.'K.'K.l` -J.*- Ml *- j% O~.H;@6!.H;@ce R4.V5.%j.Vh.Vh.ve.].@ue.o;.is@^#&7!.L= C) Q& Z* pG.7P+C7 rF+Zv m##db [*&}*&>6 hd%E0%yM#lv$P_#[^#;I@la@wc@oL.:.%Xv YH+-J y7 Qc 6P+C;@|*&0-%1*&2*&3*&4*&5*&6*&7*&8*&bW%9*&0*&a*&b*&c*&d*&e*&jf%rm%f*&z8%f*&g*&tq%pm%|d%h*&:Y$o6%.T%i*&s#%WA%j*&k*&l*&m*&n*&o*&Pn$p*&/z%-0@Rv Rv mI@'M (J$(J$%>$U=%It$=v$OA$X:$gk@!2+%L+[C%4Y+aT+aT+,/#S2@Ow#9G#vc@bR.YD.Pe@ E.pB.|##t*@D5 A6 ({+p!$h>#1L. ^+10 LR.LR.qV@y=$Co++/#Uk$_d@5q :@5}@5}@M<@fY# 7@cs$~O$~O$~O$& $pR$iR$#w$Ld$Sl$o)+Sl$)x$Sl$)x$Sl$)x$3u$4c$1s$}b$`u$}b$m7$;0%BT%ro$Fw$Dq$gg$6f$po${t$1d%3j$Fq$e#&>@&Nm$M$&t0$w.&x.&79%!&&y.&%t%^w%[e$AN$}w%eH%^&&/&&/&&(&&(&&i#&s*&t*&@U$]@&ux%u*&v*&dG%7 &iG%w*&2L%x*&y*&z*&A*&B*&C*&D*&E*&/-$F*&G*&H*&I*&J*&wl$K*&L*&c`+ax.M*&N*&O*&P*&Q*&R*&dY%S*&bO%T*&U*&V*&gG%LZ%W*&X*&Y*&Rq%Z*&`*& =&.=&dH$+=&dH$@=&_#@WP+#=&$=&%=&H}%&=&*=&==&-=&;=&>=&,=&'=&)=&!=&~=&{=&{=&]=&J&&^=&/=&O8#I,#7q#(=&h1#d4#M&&_=&:=&wK 5`$6h SC W^#uG r[@||@R5@R5@%2@||@<|@$4@Kv Kv PC Lv Lv .y .y .y Jv Jv Jv Jv =E Jv u1$u1$u1$Nt%Nt%GJ%*L%pM%g`%g`%|N%|N%|N%4Q%|N%4Q%4Q%4Q%GD%GD%GD%my%9K%my%9K%9K% y y y Vw 0C%TH%gB gB TH%%B%b|$d.#q<$c.#/0@dP@b@rG rG 7G@7G@pI@pI@7G@7G@7G@7G@7G@rG rG rG sG cP@es es tG j@#U^#j@#j@#;E Rx@'M +x+X{$U=%It$mY#!G%<=&[=&}=&nZ.=S+|=&+{@)`+o~+''+z'#> $Cb#Jn#e;%WK+XK+5&@CM@WK+WK+5($hX+c9$b8$Ej$Ej$Ej$Ej$4($c8$qn%Rb$-I$Rb$YR#YR#YR#YR#YR#YR#YR#YR#bK%bK%bK%bK%bK%bK%bK%bv$b9$b9$b9$b9$b9$b9$;u$;u$zw%Hm$1=&0v$2=&0v$3=&($&2#%~J$lF$iX+BO@1O#y_$^-+BT$K1#&6$cN#J$+#/$4=&+6$>i#,{+u8+@f$-@#M+@])#s! rG :C@yK X~#4|@*0@IT IT <@r[@-! }g }g -E -E }g i0$*E -E }g =E i0$*E Kv %B%5=&{G$6=&7=&8=&B =&h=$M2+0=&a=&b=&c=&d=&@z+%<+l1%i2%:3@;`+e=&ug%WF@^9$xx$z[#0E$f=&$Q$5&#[H$g=&ON#h=$IT Fv@8q#@t#LZ$QT@U-@ZZ J4@iE#$V.[4@p9%Z*+Y*+X>+w%.Qy a4@14@MR@)6@VW az%'^+yh%h=&WI Y].i=&'i.PC#Bj.';$A|.kg.j=&k=&5'%Li.cc I$ qj dt dt Ds F.P~ Eo+Eo+Ic%5=+5=+<*&(D.(D.8g.yj+):+c;@c;@P~ QU+vv+vv+vv+vv+vv+vv+^b+PF+Hj.!3.!3.Hj.Jb#NZ@/D./D.PF+PF+^b+^b+^b++d+uq.uq.uq.uq.uq.uq.uq..s.x8.,&+gA gA w8.8g.w8.gA w8.w8.w8.w8.w8.w8.w8.w8.{! {! {! {! {! {! {! {! be+be+be+be+be+be+be+be+{! @$+w8..Z gA O4 be+13+5A.ko.]! 13+be+=L 8g.w8.8' Ic%w*$vv+w*$2&$u3$x*$/D.^b+KE#PC#PC#KE#NZ@3K@ll.]_ Hs ll.9Y+;~ 'g@9Y+Lh+Lh+Lh+Lh+Lh+Lh+Lh+{! @$+5D+@$+@$+@$+@$+be+be+]! ]! Lh+Lh+9Y+9Y+x8.x8.13+80+8}.80+8}.80+8}.80+Ov+Zh@Ov+Zh@Ov+Zh@", "9c 9c 0' &) &) 0' 9c 8c 8c 8c 8c 8c 8c 8c 8c d( vk .h.vk +h.d( +h..h.$~.$~.$~.$~.$~.$~.$~.$~.uk uk oG.oG.:j.:j.m` m` tk tk tk tk tk tk tk tk d( d( %% %% %% d( .h.$~.d( d( d( d( d( d( d( d( uk :j.l` m` :j.:j.l` R_ uk uk uk oG.:j.:j.m` m` 6% 6% 1% WW.WW.n` _j.:j.l` l` m` m` he :j.:j.:j.m` m` m` m` m` m` m` m` m` m` m` :j.:j.m` m` m` r: 7!.6!.6!.6!.6!.6!.6!.Hu+VW.xx.l=&+Q Ig@}{.QI.9, 9, 9, 9, 9, 9, 9, 9, G6.hY.X)@X)@X)@G6.VW.8v.G6.G6.G6.G6.G6.G6.G6.G6.9, 9, 9, 9, 9, 9, 9, WW.mI.Qw.)y.GL.GL.EK%L/.L/.Qw.)y.)y.GL.GL.EK%EK%M/._j.H;@G6.P7.9, VW.VW.8v.9, 9, 9, 9, 9, 9, 9, T}%M!._M%M!.xx.xx.VW.6!.7!.9- Z& ~> C# b<@t!#m=&%9 ea [~ m$&aD%8G@TS@n=&A1 ro@so@Xt+JB@*@#Qq@1j+(y%i%#c$#k(#qO+%7 Zj AO.Q$+Yx#5c#B@$'v$o=&Nt$x{$XS@p=&q=&r=&s=&}!@;V$t=&u=&v=&w=&x=&kS%vY%xe%y=&z=&Id%A=&zM$D@%Gf%B=&C=&D=&E=&SA#F=&G=&H=&hf+I=&$m@J=&j&%TB$t1$n[#;M ,M 'M GT |d$q[#+/@8:@lm@K=&4&#!U+gh$gh$L=&M=&{($fh$M#$pl%uD$Vs@oZ.!2+E'#Sq@s$#Y1@iB 'E 'E F5 $S $S F5 ZZ tK 7V ET ET 7V Uj Rg If G> ,J ,J 1k va <,@s! :)@s! [f s[@cP@cP@cP@cP@%2@%2@dP@dP@dP@R5@vR@vR@Kv Kv Kv &E &E &E u1$=E ],$H%$H%$H%$H%$H%$H%$H%$0K%0K%0K%0K%ZI$ZI$ZI$1C%GJ%Xw Xw Xw Xw Xw Xw Xw ^G%^G%^G%^G%^G%^G%^G%Nt%+I$0K%|C%0K%|C%0K%0K%^*$ML%N=&N=&N=&N=&N=&N=&N=&O=&NL%NL%#F%4h 4h @I$],$=H$Y;$=H$],$4h +I$#F%+I$i0$i0$i0$i0$i0$i0$i0$i0$4Q%4Q%GD%1C%i0$=E *E *E Z;$Z;$}g }g }g -E -E Fu }g }g -E -! $4@rG ||@}|@n$#n$#||@rG W^#k@#RY#MK$L #mh%P=&zO#Q=&l #q'@V^@R=&S=&T=&3$$1$$U=&[$$!O$V=&=L$>c$#}#hp+Ln+B$+)P+@7@W=&X=&- $iQ%Y=&Z=&Z=&`=& -& -&.-&+-&Z=&@-&#-&;o$Rl$0p$yo$>o$yo$Aq$-&,-&'-&)-&!-&~-&{-&]-&^-&/-&(-&_-&LW%:-&<-&[-&}-&|-&C7$1-&2-&3-&4-&5-&E0$}R%6-&7-&8-&9-&0-&a-&hL$b-&4-$=`%gM$c-&d-&d-&e-&f-&f-&g-&h-&So%i-&j-&k-&l-&m-&n-&o-&p-&q-&r-&s-&t-&u-&E&&v-&w-&x-&y-&z-&A-&B-&C-&D-&E-&T &F-&G-&;6#B&# p@OH#vg# t#]M 87#G5@]J 1r@*8@$p@rG sG sG $4@<|@<|@<|@<|@<|@<|@<|@vR@vR@Eu &E &E &E Kv Du Iv Bu Bu Bu iy%ky%9K%9K%9K%9K%9K%9K%9K%9K%*L%UH%tj%#B%PL%~J%H-&UH%1C%i0$my%my%LL%I-&KL%J-&%L%$L%K-&L-&Bz%!J%!J%Az%Mv i*$Ow Lv Kv Kv (0@R5@R5@[g x`#1A 1A kl iQ :)@:)@<,@s! s! X:@X:@X~#X~#X~#}r@y'%M-&N-&$$$3i 4i Gv 0s <*$@, (e Cm nI@mI@mI@n[#q[#q[#jx@h!@$g+5r$5r$4G$.E#TY$j`%O-&k3%P-&Q-&dG+Y{@BM#'>+ki@.*+>>+7P#U,+w4#$*$37$}{#BM@~K@~K@~K@bN$iF$-I$d8$qn%qn%bv$4($bv$90$90$90$90$T4$90$90$Rj$Rj$09$09$90$90$N)$N)$Rj$09$90$N)$N)$90$09$Rj$a8$a8$a8$a8$a8$a8$a8$a8$J$+4($a8$a8$bv$%6$#/$bv$Rb$-I$-I$pw$37$e;%e;%e;%37$$*$ ^$%6$ ^$ ^$#W$Z5%5v$`a$Y@+>/#0&%s[#+/@@^+En /V#Yr +<@l$#CR@p2%CR@cP@sG tG -! -E }g *E *E -E }g =E i0$i0$=E }g xt bq s}%_)@Ef R-&S-&2e n< T-&7F.+{@uw%U-&7`$/L$V-&*R#W-&BB@X-&Y-&Z-&P$+!Z#aE$$Q$'Q+h(% n+ f!+ZW+M8@M8@M8@{! {! Yt.Yt.Yt.Yt.Yt.Yt.8g.8g.8g.8g.8g.8g.8g.8g.5A.{! w8.gA 8g.{! ]! ]! O4 3x.O4 6=+@$+5D+13+80+NM+80+@$+3x.O4 5D+13+NM+Lh+2&$^b+^b+^b+^b+^b+^b+^b+^b+PF+PF+/D.P~ P~ y{ 8g.8g.8g.be+{! ]! ]! ]! be+be+be+be+be+be+be+@$+ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.]! ]! ]! ]! ]! ]! i~ 7}.):+7}.):+7}.):+7}.QL+%U..d+8}.a(+Rx.", "g~ E7 9c 0' |% 9c E7 8c 8c 8c 8c 8c 8c 8c 8c d( vk .h.vk +h.d( +h..h..h..h..h..h..h..h..h..h.uk uk oG.oG.:j.:j.m` m` uk uk uk uk uk uk uk uk +h.+h.d( d( d( +h.vk .h.d( d( d( d( d( d( d( d( uk :j.l` m` :j.:j.l` R_ oG.:j.:j.:j.:j.m` m` n` n` G6.9, 9, 9, 9, WW.WW.l` l` he he he ke ke ke m` m` m` m` m` m` m` m` :j.:j.m` m` m` m` :j.Ml r: 7!.7!.7!.6!.6!.6!.6!.Hu+9, xx.l=&ts.gN.pO $;&ts.G6.G6.G6.G6.G6.G6.G6.G6.hY.X)@X)@X)@G6.9, 8v.G6.G6.G6.G6.G6.G6.G6.G6.9, 9, 9, 9, 9, 9, 9, WW.lI.)y.GL.GL.GL.GL.EK%EK%)y.)y.)y.GL.GL.EK%EK%<].n` G6.G6.9, 9, VW.VW.VW.9, 9, 9, 9, 9, 9, 9, T}%9K.&=+9K.9K.9K.xx.VW.VW.ym.{t.21.21.ni E{ %;&&;&;m $$hk i_@kk 7|@9e v[@$o+|A.0#&5|+rO.Pe@HR.*<@sS+M:@u/ b3 b] Qc Qt%%V.iT.FG.F)+Uj$T_%*;&Qs%L{$5h#=;&-;&;;&>;&,;&';&);&!;&~;&{;&];&^;&/;&(;&_;&:;&<;&99%2g%[;&lW%!#$};&|;&1;&2;&3;&4;&F+&5;&6;&7;&xz@in$ki$R-$mI@Rx@Zi@CN vo@Zw KK#ry#7M@*e#8M@8;&Gn#L=&L=&M=&M=&R^$h+&!U+;T.VJ.Q$+!%@@g+pB.~d@iB A5 A5 -h@5q 5q G> ,8 Sr V-@,8 va <,@:,@va va <,@s! :)@s! [f :e Zi@Zi@Zi@cP@)M lQ lQ k$#k$#;P R5@R5@R5@R5@vR@Eu Kv &E &E *E GD%|A |A |A |A |A |A |A hy%hy%hy%hy%hy%hy%hy%1C%GJ%Xw Xw Xw Xw Xw Xw Xw Xw Xw ^G%^G%^G%^G%.y u1$+I$|C%|C%|C%|C%0K%0K%^*$^*$^*$^*$9;&^*$9;&0;&^*$|C%#F%#F%#F%#F%4h 4h 4h @I$@I$@I$4h 4h 4h 4h ^,$],$i0$i0$i0$i0$i0$i0$i0$4Q%4Q%GD%1C%i0$=E *E *E &E &E &E Kv Kv Eu Eu Eu Kv Kv Eu vR@vR@$4@<|@%2@lQ lQ lQ sG V^#Gv Gv *c MK$tZ@Ja%P=&/w$R_#7 @i[%a;&b;&c;&d;&e;&f;&g;&h;&i;&j;&b0$#}#hp+jD+n0+G)@8s#o@$k;&k;&l;&l;&m;&m;&n;&o;&p;&p;&q;&r;&s;&#-&7S$7S$0p$Aq$Aq$Aq$0p$0p$7S$0p$Aq$0p$;o$;o$>o$&.>&+>&@>&4-$#>&$>&-s%%>&&>&*>&=>&!%&PS%->&;>&>>&4 &UJ%,>&'>&)>&!>&~>&{>&]>&^>&/>&(>&_>&:>&<>&[>&}>&|>&1>&2>&3>&4>&Ti@&3#Z=#VE@gt@h$#8.#{Y@XC@w! !)#')#WA WA ^|@/|@_|@:|@[|@<|@[|@[|@[|@:|@:|@:|@:|@:|@vR@Eu Kv &E &E &E &E }g vt i.$vt vt iy%iy%my%my%GD%GD%GD%GD%GD%GD%*L%UH%tj%#B%H-&5>&6>&~J%1C%i0$iy%my%LL%J-&J-&J-&7>&8>&9>&hq%IG%-:$p<$+}$Nv Mw 5G@;E cP@DN I5@J!$F&#+-#HC$Mu ~}+HC$HC${)#{)#1A {)#x`#x`#+<@+<@r[@+<@^0@n=$e.$0>&)z%to ,&$9> V1@-M Q+#Zw 1d${}+l8$ix@a>&r[#+.@Hy$.1%g2%hh$QK$g+&b>&88%c>&d>&98%e>&f>&Ps%.*+RU#9)#9)#D~$7]+t!$#*%v4#1T+|T+hF$DI+6G+6G+6G+>M$g>&S!$S!$Rb$Rb$bv$bv$90$90$T4$T4$~}%~}%~}%~}%Rj$Rj$09$09$90$90$N)$N)$Rj$09$90$N)$N)$90$09$Rj$Ms$Ms$Ms$Ms$Ms$Ms$Ms$Ms$90$Rj$nw$Ms$09$N)$N)$90$qn%qn%qn%Rb$Rb$ ^$ ^$ ^$Rb$Rb$Rb$Rb$Rb$Rb$Rb$`.+J8%35%'r%Br+3F$@5$MX$,z xo ;> TH TH CR@CR@p2%p2%s[@sG tG -! -E }g }g *E -E }g =E i0$i0$=E }g 2r@VB$h>&X4 Ej#i>&#{ r.@Ru j>&k>&:B@{P#7~$l>&bj$s$+!_#p9@m>&n>&o>&Qv#!~#%X#N~$O#$-v$OB@aL#>f#Th ,! 0Y :7 :7 CD Vj p<+x[ v7 &++uW.i|@O'$>W@p>&R~%q>&fN%r>&s>&t>&u>&6j%DA%K}%0N.v>&w>&x>&y>&0G z>&A>&[].l`.OJ.vv+vv+w*$Eo+Eo+w*$w*$w*$w*$w*$w*$w*$w*$=|$=|$2&$Eo+w*$w*$Eo+Eo+2&$Eo+w*$vv+vv+w*$Eo+2&$5e%5e%5e%5e%5e%5e%5e%5e%@g%5e%&0+%P%%P%&0+S}%5e%/D./D./D./D./D./D./D./D.uq.P~ /D.PF+PF+/D.P~ +C.8' V!+V!+V!+ZW+ZW+ZW+ZW+{! {! Yt.Yt.Yt.Yt.a(+Yt.,v.8g.8g.8g.8g.8g.8g.8g.5A.5A.]! be+8g.8g.8g.be+O4 3x.3x.6=+6=+6=+6=+6=+2^ 2^ 80+5D+5D+80+2^ ko.Lh+^b+^b+^b+^b+^b+^b+^b+^b+^b+PF+PF+/D./D.P~ y{ be+@$+@$+@$+13+13+13+13+@$+@$+@$+@$+@$+@$+@$+@$+@$+@$+@$+@$+@$+@$+@$+@$+13+13+13+13+13+ko.ko.ko.Yt.a(+a(+a(+a(+a(+a(+a(+^x#Fu#.d+a(+a(+.d+", "dd kC g~ 9c 9c E7 dd 8c 8c 8c 8c 8c 8c 8c 8c d( vk .h.vk +h.d( +h..h.vk vk vk vk vk vk vk vk uk uk oG.oG.:j.:j.m` m` oG.oG.oG.oG.oG.oG.oG.oG.vk vk .h..h..h.vk +h.d( d( d( d( d( d( d( d( d( uk :j.l` l` :j.:j.m` -H.l` l` l` m` m` m` m` n` (j.X)@hY.G6.9, VW.1% 6% l` l` he he he ke ke ke m` m` m` m` m` m` m` m` oG.:j.l` -H.-H.l` :j.*=.r: 7!.7!.7!.6!.6!.6!.6!.Hu+9, T}%l=&T}%V>.pO 4I%+Q hY.hY.hY.hY.hY.hY.hY.G6.hY.hY.X)@hY.G6.9, VW.G6.G6.G6.G6.G6.G6.G6.G6.9, 9, 9, 9, 9, 9, 9, WW.<].EK%GL.GL.GL.GL.)y.)y.)y.)y.)y.GL.GL.EK%EK%<].n` G6.G6.9, 9, VW.VW.VW.9, 9, 9, 9, 9, 9, 9, T}%=G@=G@=G@=G@ts.ts.G6.G6.6!.P7.7!.)W+un.21.hf D# ~x#:A+.{ VC@SU.xi+JM.['%B[@KR@TU%~c$**+**+)-#JR@0v /( %9 ib x7 `i ,H%B>&q'+C>&TZ.+{@M#$M@%9:%D>&E>&rV$F>& a$H3$^[$G>&H>&I>&J>&K>&L>&M>&N>&O>&P>&g*&Q>&R>&S>&T>&U>&V>&W>&X>&Y>&Z>&`>& ,&.,&+,&6B+@,&p1#)q$Aj$i4#=P :e :e 1A |/%{}+GT#O&#so@qo@k>#8R+h+&Gn#Gn#L=&L=&L=&gh$gh$0]@mZ.0I..K.{[#R$+-W@_d@E5 'E 'E `r ,&,,&',&e8$#}#jp+o0+iV+N&+;'$),&- $- $Y=&Y=&`=&`=&!,&!,&~,&~,&{,&f}%#-&&w$#w$$w$7S$;o$0p$;o$;o$;o$7S$;o$Aq$Aq$0p$Aq$O*%0l$}}$y|$7:$L1$1}$L1$u;&$-&{c@1Y#%-&>@&1z$],&#O%$F%9+$QM#Do% n%Vr%hc%vu%%0$`8$Ww%+=&O$&x;&*-&^,&/,&(,&(L%dH$G.&_,&Lj%:,&D;&<,&[,&},&|,&1,&2,&3,&4,&5,&6,&7,&8,&9,&0,&a,&b,&c,&d,&|k$|k$e,&f,&V;&g,&h,&i,&j,&k,&l,&m,&n,&Nq%o,&p,&q,&#>&r,&Sm%3W$q,&s,&aL$t,&u,&v,&N.&w,&x,&y,&z,&A,&B,&C,&D,&#$.f=.E,&F,&G,&H,&I,&J,&J&&K,&L,&D-&M,&N,&%3#Ed#Cv@i@#h$#8.#w! ))#))#!)#kI@a~ WA WA @~ ^|@(|@_|@:|@:|@_|@_|@_|@_|@_|@_|@_|@:|@vR@Eu Kv &E u1$&E &E &E ],$H%$],$^,$^,$+I$+I$+I$UH%UH%UH%UH%UH%UH%UH%UH%3C%2C%4C%6C%~J%pM%GD%1C%1C%|A ly%LL%=c =c (x%#It$vC$It$=v$/)#},$t)%lx$lx$Uk$Uk$>g$m8 u'@u'@%-#%-#FT %-#{)#o!$Vx%e'$O,&'z P5@2L.Me+:)#h(%O#$6r$TO$Qz$F)$=`$Jy$z+%5w$h+&gh$O]$7W.`X.jZ.P,&27%Q,&r9%R,&!($f~@!.$@@#@@#A)+A)+#*%[f+IK$x_%v,$@#$@#$CM@CM@@#$..&n>%k`%k`% ^$ ^$%6$J$+90$90$T4$T4$~}%~}%~}%~}%09$09$09$09$90$90$90$90$Rj$09$90$N)$N)$90$09$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$09$Ms$Hs$nw$Rj$90$09$Rj$im$c8$c8$c8$qn%qn%Rb$Rb$qn%qn%qn%qn%qn%qn%qn%@6$ ++V-$i[%EU.F[#8x$['$bj k9$xo TH TH CR@CR@p2%CR@s[@sG sG tG -! -E -E }g }g *E =E =E =E =E *E )J Sv M6@P[%%7 %G@fQ.45@S,&T,&U,&j'+V,&k/+W,&h^#cN#K6@/M#1k+uc@0Z+63@_-#s1@iT$O#$&l+Co+RN#09 u%lX%Kf Sg Sg YG@XC%-K.D6 s'+;<@P>+SZ$Zv.p>&2K a| 37+-^.Td./k%f:@VR X,&Y,&~$#Z,&t2%`,&A'@ '&.'&9:+70+)i.vv+vv+vv+vv+vv+vv+vv+w*$w*$w*$w*$w*$w*$w*$w*$Eo+2&$2&$2&$2&$Eo+w*$vv+Eo+Eo+w*$vv+vv+w*$Eo+Eo+5e%5e%5e%5e%5e%5e%5e%5e%5e%5e%S}%S}%S}%5e%@g%]1%/D./D./D./D./D./D./D./D./D./D.PF+^b+^b+PF+/D.7g.%.@]%@]%@]%@f!+f!+f!+f!+{! {! Yt.Yt.Yt.Yt.a(+Yt.i~ be+be+be+be+be+be+be+be+Ea+$(+Ea+8g.`Y gA 8g.=L =L O4 O4 O4 O4 .Z .Z 13+ko.NM+NM+NM+NM+ko.{! Lh+^b+^b+^b+^b+^b+^b+^b+^b+^b+PF+PF+PF+/D./D.x8.{! 13+13+13+@$+@$+@$+@$+@$+@$+@$+@$+@$+@$+@$+@$+=L =L =L =L =L =L =L =L =L =L @$+@$+13+13+ko.ko.)> )> )> )> )> )> )> )> )> )> Yt.i~ i~ Yt.", "dd kC dd 7c 9c E7 g~ 8c 8c 8c 8c 8c 8c 8c 8c d( vk .h.vk +h.d( +h..h.d( d( d( d( d( d( d( d( uk uk oG.oG.:j.:j.m` m` m` m` m` m` m` m` m` m` .h..h.N6 N6 N6 .h.d( ~% d( d( d( d( d( d( d( d( oG.m` l` l` :j.oG.m` -H.R_ R_ -H.l` l` m` m` _j._j.hY.hY.G6.G6.9, WW.WW.l` l` he he he ke ke ke m` m` m` m` m` m` m` m` uk :j.l` -H.-H.l` :j.@n O~.zT.zT.zT.P7.P7.P7.P7.Hu+9, ts.l=&xx.}{.pO xx.}{.X)@X)@X)@X)@X)@X)@X)@hY.hY.hY.hY.G6.G6.9, 9, G6.G6.G6.G6.G6.G6.G6.G6.9, 9, 9, 9, 9, 9, 9, WW.M/.L/.EK%GL.GL.)y.Qw.Qw.GL.GL.GL.GL.GL.GL.GL.'K.WW.9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, =G@=G@=G@=G@ts.ts.G6.G6. ]@+'&lf de 7!.zT.hf n$ [* 68 L} cg gM+e9 ,<@&<@%<@Zk@|A.$o+yX@}A.4l$,l @'&'<@ya w7 ZY+bQ #'&$'&%'&&'&*'&TZ.P.%o%$[3%='&M@%M@%&K$<0$-'&L$+LE%;'&>'&H`$,'&''&)'&!'&~'&{'&sl%]'&^'&/'&('&_'&:'&<'&['&}'&|'&1'&2'&3'&4'&-V+5'&ev$_R@Zw |d$CN [f [f 1A |/%~}+},%P&#K=&[8$k>#8R+h+&y]%Gn#Gn#L=&L=&L=&f*%: +6'&Z_@xL.)V.{[#)4+|/ 8s BN #p@`r ZA fw y, Y:@;! ;! ;! }u u! W~#u! =p@}u =p@mt@1r@mt@yK :C@}A 6F }A rG s[@s[@cP@cP@cP@es es es s[@cP@tG -! -E }g *E =E Nw Nw Nw Nw Nw Nw Nw Nw yz%yz%yz%&L%&L%&L%7'&7'&*L%*L%UH%*L%UH%*L%UH%*L%5>&pM%~J%*L%oF%Nt%G'$|f ^,$^,$^,$^,$^,$1C%1C%hy%i0$vt -z vt -z Bu vt vt -z -z VH%VH%9K%8'&4Q%]V%|N%|N%NL%#F%4h @I$@I$],$],$i0$i0$i0$i0$i0$i0$i0$GD%GD%1C%1C%i0$i0$=E =E u1$u1$&E &E &E Kv Kv Kv Eu Eu Eu Kv Kv Kv Kv E'$yd%#h%yd%vR@^Y@qI@g.#5;#7q 9'&Sa$i~@kI%0'&3x%h7#=D%a'&b'&c'&d'&xM@Cy$e'&N>%M>%@}##}#jp+Ol+%-+ >+5X+),&X=&- $iQ%Y=&f'&`=&!,&!,&g'&g'&f}%#-&&w$&w$.O$#w$$w$7S$7S$7S$7S$$w$$w$;o$Aq$Aq$Aq$>o$8l$N`$6f$V<$L1$L1$L1$7:$u;&$-&S $.`#%-&>@&|Y#],&#O%FD$h'&&'$Do%SN$i'&hc%vu%j'&k'&%i%l'&i#&&-&m'&y;&/,&DZ%s&&6I$tx%RI%n'&:,&o'&p'&q'&r'&s'&N#&t'&u'&5@&v'&w'&7,&x'&y'&z'&Bs#A'&E7$B'&|k$T;&f,&C'&D'&E'&~4$2R%F'&G'&F&$H'&I'&J'&Yo%o&&K'&7K$L'&Tn%Sq%)s%M'&N'&O'&P'&v#&Q'&R'&S'&T'&U'&V'&W'&_#.X'&Y'&Z'&`'& )&.)&+)&@)&#)&}>&$)&%)&&)&/=&*)&&3#yn#UE@b.#8.#w! !)#QT@B_#')#a~ @~ WA WA @~ ^|@/|@(|@_|@_|@:|@:|@:|@:|@[|@[|@[|@[|@Eu Eu Kv &E u1$u1$&E 5'$tj%|g$}H%4h =)&#F%-)&H-&PL%PL%PL%PL%PL%PL%PL%UH%7C%8C%8C%6C%pM%*L%GD%GD%GD%|N%ML%;)&N=&N=&+w%]*$Ez%l,$L2$Yw p[#ki$m1#jx@g!@,f#,f#5r$GS$GS$GS$~_%z~$.I$@5$@5$t[#>$%>$%8:@*>#*>#-v$t,%t,%OB@QQ$t,%8:@;-#u1@bI#v}@=[@=[@Pw#rK@C[#~f#8M@_g$|(%Uj${($_T#6/%A@$z@%>)&HQ$y@$,)&hZ.hZ.')&')&))&))&C>%!)&Cb# +@@@#@@#+$#A)+#*%[f+z)+z)+i[+i[+Ab#Ab#Ab#46+l`%n>%n>%6P#27$T@+%6$cN#N)$N)$%*$%*$j %j %j %j %09$09$09$09$90$90$90$90$Rj$09$90$N)$N)$90$09$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$nw$=J$Hs$Ms$09$09$Rj$a8$;u$im$im$c8$c8$c8$qn%c8$c8$c8$c8$c8$c8$c8$`H%Y(%~)&i[%Z@+C[#t1@#{#!(@HC$xo 1A x`#l$#CR@p2%CR@s[@rG sG sG tG tG -! -! }g }g *E *E *E *E }g )J HT#eq$vc+,1#$'&{)&])&b3$T]+^)&Z @s}@#[@4h#25%rr%g&@_X@td+:M#/)&/)&9L#4&#rP$wC$#{@Pp UP.Fn#}0 va#=$#99 yy@=K.m9+YP.)4+b_@F).$]%x{%p>&%4#|8@[8@=6@~b@()&_)&:)&<)&[)&~>#})&`,&Pc.`k.|)&J=.3E =}$;e@y{ vv+vv+vv+vv+vv+vv+vv+w*$w*$w*$w*$w*$w*$w*$w*$w*$Eo+2&$=|$2&$Eo+vv+l`.Eo+w*$w*$w*$w*$w*$w*$Eo+5e%5e%5e%5e%5e%5e%5e%5e%5e%5e%5e%@g%@g%]1%Fc%#u%/D./D./D./D./D./D./D./D.PF+PF+^b+^b+^b+^b+PF+8' 0@@OU+OU+]%@f!+'> '> '> {! {! Yt.Yt.Yt.Yt.a(+Yt.i~ be+be+be+be+be+be+be+`Y ]! T_+$(+be+`Y gA {! @$+=L =L O4 .Z .Z s6 s6 13+ko.cI+l7 l7 cI+ko.{! Lh+^b+^b+^b+^b+^b+^b+^b+^b+^b+PF+PF+PF+PF+PF+9Y+]! ko.ko.13+@$+=L =L =L 13+13+13+13+13+13+13+13+@$+@$+@$+@$+@$+@$+@$+@$+O4 O4 =L @$+13+13+ko.ko.5A.5A.6g+5A.6g+5A.6g+5A.Yt.{! i~ be+i~ be+", "g~ dd g~ 9c 8c 9c 7c 8c 8c 8c 8c 8c 8c 8c 8c d( vk .h.vk +h.d( +h..h.d( d( d( d( d( d( d( d( uk uk oG.oG.:j.:j.m` m` m` m` m` m` m` m` m` m` .h..h.N6 N6 N6 .h.d( ~% d( d( d( d( d( d( d( d( :j.m` -H.l` :j.oG.:j.l` R_ R_ -H.l` l` m` m` _j.WW.9, G6.G6.hY.hY.(j.(j.l` l` he he he ke ke ke m` m` m` m` m` m` m` m` oG.:j.m` -H.-H.m` :j.*=.O~.zT.zT.zT.P7.P7.P7.P7.Hu+G6.ts.l=&l=&+Q pO T}%}{.X)@X)@X)@X)@X)@X)@X)@X)@hY.hY.G6.G6.9, 9, 9, G6.G6.G6.G6.G6.G6.G6.G6.9, 9, 9, 9, 9, 9, 9, WW.M/.L/.EK%GL.GL.)y.Qw.Qw.GL.GL.GL.GL.GL.GL.GL.'K.WW.9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, =G@=G@ts.ts.ts.ts.G6.G6.l#@6!.H;@6!.`^ `^ &j.Z& B. k 1)&2)&3)&K`%c_@RU.&<@]++Y!@}a a2$q%;q%td@p'+Nb${Q.P/+rL.w<@#J$Jy$y[#4)&5)&@q%6)&7)&0p%8)&9)&6M%0)&a)&b)&Ip$fR$c)&d)&e)&f)&g)&h)&i)&j)&k)&l)&m)&n)&o)&p)&q)&5'&K2$jx@Zw #y CN TH TH 1A HC$/7+KB@lm@W,+57@!~#8R+h+&Gn#Gn#L=&L=&L=&M=&3Y+(,%r)&s)&tB ]Q.Fh+0R+l< ZZ =l CV#:g Dn ZA va y, ;! ;! ;! LZ$LZ$LZ$G5@]Q#%p@:&%%p@_E$Iz _E$%p@Y#%%p@:&%+n@|$&D@$|$&}A rG :e :e Zi@Zi@Zi@Rx@Rx@Zi@Zi@Rx@.~ 2r@)J !J wt Nw Nv Nv Nv Nv Nv Nv Nv Ov t)&t)&u)&u)&{J%{J%7'&*L%UH%PL%UH%PL%UH%PL%UH%6>&~J%H-&UH%PL%oF%#B%oF%],$],$],$],$i0$i0$i0$-z ^G%-z ^G%Pv ]G%Ov Pv Ov Ov Ov t)&t)&&L%7'&8'&v)&]V%]V%|N%+I$#F%4h @I$],$],$i0$i0$i0$i0$i0$i0$i0$1C%1C%1C%1C%i0$i0$i0$i0$u1$u1$u1$&E &E &E Kv Kv Eu Eu Eu Kv Kv Kv Kv E'$bQ%OO%gQ%q<$+z Vx mP%nP%v_$5r ll o[#Ts%07$<'$XH$w)&ks$o$8l$N`$6f$V<$7:$7:$7:$8x%u;&$-&S $F$$%-&>@&1z$|Y#M$&ED$B)&RK#C)&SN$i'&hc%0W$D)&E)&t&&F)&0J$G)&H)&I)&*-&j#&l'&} &J)&K)&Gk%L)&M)&N)&q'&O)&P)&Q)&R)&S)&T)&U)&V)&W)&X)&Y)&Z)&C=#`)&f:$ !&.!&+!&Qh$@!&#!&E'&$!&%!&qc$&!&*!&=!&tS#-!&Wo%o&&:%&Sq%Tn%;!&>!&,!&'!&)!&!!&~!&{!&]!&^!&/!&(!&_!&:!&&4!&5!&6!&7!&8!&9!&0!&,6#>6#6!#yn#UE@UE@XC@+W@QT@')#')#1f WA /|@@~ @~ ^|@/|@(|@(|@_|@_|@<|@<|@$4@$4@vR@vR@Eu Eu Eu Kv &E u1$u1$u1$u1$5'$}H%a!&{G%=)&b!&-)&c!&d!&@F%@F%@F%@F%ED%ED%ED%2C%8C%Vw Vw 9C%Xw Xw GJ%*L%|N%NL%e!&e!&f!&lh$=;%ji$9d%q1#Re@t)%,,$r[#h%%%I$Qz$2w$2w$g2%g2%T@&T@&c'%w1#&,$:0$bX#r!$k>#C[#rK@IB${Q#{Q#{Q#b]@gU$b]@IB$A[#NJ@NJ@F!$C(%^B+tD$-i#o~+'r%E3$m~$35%sF%6R+6R+6R+sF%dU%dU%g!&hq#ER$ER$h!&h!&i!&i!&j!&j!&j!&k!&%*$`&+eZ.eZ.`&+`&+}/+cH#Lq@Lq@se#se#se#se#se#se#av$6P#6P#('$T@+T@+%6$cN#N)$%*$%*$%*$j %j %j %j %90$90$90$90$09$09$09$09$Rj$09$90$N)$N)$90$09$Rj$09$09$09$09$09$09$09$09$Rj$nw$=J$Hs$Ms$09$09$Rj$a8$a8$a8$%K$%K$4($4($4($4($4($4($4($4($4($4($`H% ++ l#E3$, $~f#g3#${#i#@~}+k9$1A 1A x`#x`#CR@l$#s[@rG rG rG sG sG sG sG -E -E -E -E -E -E -E 2r@Zw R1%to@]Q.g4$]{+|Y.[Y.V-$~)&~)&;P%;P%N:+89$|)#j$+l!&m!&3K#u@+'t#L9#uz@&>#{`+n!&[Q.$i#Nq o!&Mp#PM.p<+Xj D6 W} 5=$M] N[@a] Qz =+fb%ps jb@oe$oe$[)&p!&K5$nb@q!&r!&s!&]d+4'%0N Yl z8.)*%PQ.Q9.#U. F.l`.OJ.vv+vv+w*$Eo+Eo+w*$w*$w*$w*$w*$w*$w*$w*$vv+w*$2&$2&$2&$w*$OJ.l`.w*$w*$w*$Eo+Eo+w*$w*$w*$5e%5e%5e%5e%5e%5e%5e%5e%5e%5e%@g%]1%Fc%Fc%Fc%Fc%/D./D./D./D./D./D./D./D.^b+^b+PF+PF+PF+PF+^b+%.@0@@OU+OU+]%@f!+'> '> '> {! {! Yt.Yt.Yt.Yt.a(+Yt.Yt.{! {! {! {! {! {! {! ti 8g.xc+xc+be+gA be+Ea+@$+@$+=L =L O4 .Z .Z s6 13+ko.cI+l7 l7 cI+ko.{! Lh+^b+^b+^b+^b+^b+^b+^b+PF+PF+^b+^b+^b+^b+^b+Lh+]! ko.ko.13+@$+=L =L =L NM+NM+NM+NM+NM+NM+NM+NM+13+13+13+13+13+13+13+13+=L =L @$+@$+13+ko.ko.ko.5A.h]@5A.h]@5A.h]@5A.h]@be+f!+{! ZW+{! ZW+", "7c g~ E7 9c 0' 0' 8c 8c 8c 8c 8c 8c 8c 8c 8c d( vk .h.vk +h.d( +h..h.d( d( d( d( d( d( d( d( uk uk oG.oG.:j.:j.m` m` m` m` m` m` m` m` m` m` vk vk .h..h..h.vk +h.d( d( d( d( d( d( d( d( d( :j.l` -H.l` :j.uk :j.m` l` l` l` m` m` m` m` n` WW.9, G6.G6.hY.X)@Tl Tl l` l` he he he ke ke ke m` m` m` m` m` m` m` m` m` m` m` m` m` m` m` d( Lv.&j.&j.&j.H;@H;@H;@H;@Hu+G6.+Q l=&4I%T}%pO +Q +Q hY.hY.hY.hY.hY.hY.hY.X)@X)@hY.9, 9, 9, G6.G6.G6.G6.G6.G6.G6.G6.G6.G6.9, 9, 9, 9, 9, 9, 9, WW.<].EK%GL.GL.GL.GL.)y.)y.EK%EK%EK%GL.GL.)y.)y.lI.1% VW.VW.9, 9, G6.G6.G6.9, 9, 9, 9, 9, 9, 9, 9, ts.ts.ts.ts.ts.ts.G6.G6.j}+$9.6!.5!.U/ U/ `^ N~.ed Ds Xl ^$ u# t!&u!&8.$y-.T$+v[@s~+-2@8G@id%_c 9e 4_+IM.Zk@$V.]Y.Y-+u@%v!&7z%w!&td@Nb$T8%yG.FR.,Q+,Q+>v$QK$x!&vA%CB$@x@y!&z!&^j%A!&B!&C!&D!&tD%/Y$E!&F!&G!&H!&I!&J!&K!&L!&M!&N!&O!&P!&Q!&R!&S!&p*&ev$jx@Zw |d$CN [f Y~#{)#+(+[/$PH#ZD.H)+/)&!~#8M@gh$L=&L=&M=&M=&O]$O]$n~$T!&+]%1(%Z{@8F.yL.c!+V} B6 7V n{ %S jl W-@,8 >8 ;! ]|@]|@Lz Lz LZ$Iz xW$OH%U!&OH% S#|r@ S#C'$ S#xW$OH%U!&V!&W!&V!&+n@>b@[f :e :e Zi@Zi@Zi@Rx@Zi@Zi@'M 'M 'M ,M ,M .~ }g Du Du Du Du Du Du Du Du Cu Cu Jv -z VH%VH%GD%tj%|u%|u%|u%|u%|u%|u%|u%|u%|u%|u%|u%|u%|u%}H%#B%@I$],$@I$],$],$i0$Nt%^G%Xw Xw X!&X!&Y!&Y!&Y!&Y!&FG%Z!&Z!&]J%]J%u)&u)&&L%8'&4Q%|N%|N%#F%#F%#F%+I$],$i0$i0$i0$i0$i0$i0$i0$1C%1C%1C%1C%i0$i0$i0$i0$Nt%Nt%u1$u1$&E &E &E Kv Kv Eu Eu Eu Eu Eu Eu H)$`!&`!& ~&V.$`G$.z i*$3`@mP%U^#V^#0> R-$p[#ix@t)%9u%@A$tF%t8+DM#Ge@]3@[6+P0+rD+gr+<1@|}@&3@J<@u~@:R+>]@+7@x)&- $y)&+-& -& -&`=&g'&f}%.~&.~&.r%.r%.O$#w$$w$7S$7S$7S$7S$$w$7S$;o$Aq$Aq$0p$Aq$O*%0l$y,$y|$dl$dl$dl$dl$u;&u;&.`#1Y#%-&e#& `#v;&],&DD$5[$+J#uW%zq%+~&fX$Zq% 8$@~&[%&#~&j#&vI%$~&%~&&~&*~&=~&-~&P$&;~&>~&,~&M)&'~&)~&!~&MS%~~&m+$m+${~&+L#]~&^~&/~&(~&_~&:~&<~&[~&}~&|~&1~&'j$D'&2~&xp$3~&co$4~&5~&1-$6~&7~&M#&8~&9~&0~&`U$a~&a~&q@&b~&c~&d~&UU$e~&f~&g~&h~&i~&j~&k~&l~&m~&1!&n~&o~&p~&q~&r~&`'&s~&t~&u~&v~&w~&x~&y~&S8#-3#Ag#5!#UE@i@#{Y@+W@QT@')#')#1f WA ^|@/|@/|@(|@(|@_|@_|@:|@:|@vR@vR@Eu Kv &E &E u1$u1$Eu Kv &E u1$Nt%Nt%u1$|f +F%{G%z~&@F%d!&d!&d!&A~&@F%ED%ED%ED%ED%2C%ED%7C%Vw 7E%aC%gB .y u1$Nt%^,$#F%}C%fy%+Q$Du+Pf%bL#$g+TR%9,%RH#pS$M~$~Z#Sz$8R+8M@aT+aT+=i#!Q#)M$)M$@B$aX#xD%~=#g&@f$@MX.DU.P$+i|#Br+Br+Bp+cv$cv$cv$i|#']$+B$+B$+B$+*+B%%1|+> $M:+M:+fZ.*W#S4$S4$08$O#%`]$`]$0$$S4$U@+@6$/J%@6$}H$#W$fA%.b$eA%cA%eA%.b$90$k~+`&+`&+k~+'p$^f#Lq@}/+/-+/-+/-+/-+/-+/-+}/+('$('$T@+T@+%6$cN#cN#N)$%*$%*$%*$%*$j %j %j %%*$90$90$90$90$09$09$09$09$Rj$09$90$N)$N)$90$09$Rj$09$09$09$09$09$09$09$09$09$Ms$Hs$nw$Rj$90$09$Rj$a8$a8$%K$%K$4($4($4($4($bv$bv$bv$bv$bv$bv$bv$90$oo%z1#~($:'$_g$iE$&{#R1%z<@HC${)#1A x`#x`#l$#l$#`:@>b@>b@rG rG rG rG rG -! tG tG sG sG tG tG .~ p[#Ag@OU.6z%B~&2#+C~&EJ%+L%D~&nM%CA$kS$4O#f0$1K#3K#D*$E~&NX#OP.oL.RD@ud$d~#zL.]V.' $F~&G~&H~&G~&w'@]($]($6P+Rw%#'&`R 47+Zv.aQ 7/.Au.;6@12@)6@I~&h2@J~&w!&AU%{@#K~&L~&M~&fK B8.-j [Q *5 *5 G7 Y1.6}%l`.OJ.OJ.w*$w*$Eo+2&$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$Eo+Eo+w*$vv+OJ.l`.vv+w*$Eo+Eo+Eo+Eo+w*$vv+5e%5e%5e%5e%5e%5e%5e%5e%5e%5e%@g%]1%Fc%]1%]1%@g%/D./D./D./D./D./D./D./D.^b+PF+/D./D./D./D.PF+2&$%.@]%@]%@]%@f!+f!+f!+f!+{! {! Yt.Yt.Yt.Yt.a(+Yt.Yt.{! {! {! {! {! {! {! pj w8.]! ]! be+be+]! $(+@$+@$+@$+@$+=L =L =L =L 13+ko.NM+NM+NM+NM+ko.{! Lh+^b+^b+^b+^b+^b+^b+^b+PF+PF+^b+^b+^b++d++d+'g@{! 13+13+13+@$+@$+@$+@$+ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.M8@OU+M8@OU+M8@OU+M8@OU+f!+]%@M8@OU+M8@OU+", "7c g~ g~ 9c 0' 0' 8c 8c 8c 8c 8c 8c 8c 8c 8c d( vk .h.vk +h.d( +h..h.+h.+h.+h.+h.+h.+h.+h.+h.uk uk oG.oG.:j.:j.m` m` :j.:j.:j.:j.:j.:j.:j.:j.+h.+h.d( d( d( +h.vk .h.d( d( d( d( d( d( d( d( m` l` -H.l` oG.uk oG.m` oG.:j.:j.:j.:j.m` m` n` _j.hY.hY.hY.hY.X)@(j.(j.l` l` he he he ke ke ke m` m` m` m` m` m` m` m` -H.l` :j.uk uk :j.l` %% Lv.3b 3b 3b Lv.Lv.Lv.Lv.i% _j.=H.^q%2P jI.-,+=H.ts.G6.G6.G6.G6.G6.G6.G6.9%.X)@G6.9, VW.9, G6.hY.G6.G6.G6.G6.G6.G6.G6.G6.9, 9, 9, 9, 9, 9, 9, WW.lI.lI.'K.'K.'K.'K.<].<].<].<].<].'K.'K.lI.lI.lI.1% VW.VW.9, 9, G6.G6.G6.9, 9, 9, 9, 9, 9, 9, 9, VW.VW.VW.VW.VW.VW.VW.VW.hY.X)@ce iI.Y6.H;@H;@Ml !B )y.-_ ri ;] h; N~&O~&P~&L8 h9 dj [&%T! T! QC@_L.Q:+[O.wi+MD+X0+g4@v|@z{.f+%Q~&7z%CC.R~&S~&T~&$K.pT.a#&!q$&i#U~&V~&:^%GJ$W~&B&%yj$r6@X~&Y~&Z~&hM@`~& {&.{&+{&@{&#{&${&%{&&{&*{&={&-{&;{&>{&,{&'{&n1#_R@Aj$|d$=P Y~#Y~#=0@>g$.B#;,$0L#q~+9G#+v@{f#{f#Uj$M#$fh$U-$9M@U-$U-$!>+P.%DR.6F.iT.(Z%jT.Of F`+XC% X Pe H0 1C G0 +9 V:@1f kI@+t#Kz Jz W$|Y#y9$aa$ F#uW%Bo%}{&Vr%aW$(s%|{&f5$#~&j#&1{&2{&3{&4{&G)&5{&6{&7{&v*&8{&cO%[,&9{&3@&0{&a{&b{&c{&d{&e{&f{&g{&h{&i{&j{&k{&l{&m{&n{&o{& n$p{&q{&r{&2#$s{&t{&d,&u{&v{&w{&x{&y{&z{&A{&B{&C{&nz$D{&E{&F{&G{&H{&I{&J{&K{&]&%L{&M{&N{&O{&P{&Q{&R{&S{&T{&U{&V{&W{&r~&X{&Y{&Z{&`{& ]&.]&9!&+]&S8#KN#J,#I,#b.#i@#8.#w! !)#B_#B_#')#YA @~ _|@_|@_|@:|@:|@:|@[|@[|@Eu Eu Kv &E u1$Nt%Nt%GJ%Kv &E u1$Nt%Nt%Nt%Nt%F'$@]&#]&$]&1$&1$&1$&%]&%]&ED%2C%2C%2C%UH%*L%UH%*L%cC%cC%PC QC Eu E'$=H$e6%=f$Du+7:%xJ++N$OK$&]&;v$ux$}F$X,@T)@L6@~}@Y{@t8+t8+5h#5h#M$+M$+{l${l$km$.*+hB@hB@#@#W,@3W.ki@'>+D)+Ar+5W.5W.5W.5W.X@+5h#> $''%1r$1r$,Z#~}%%*$dN#N)$J$+J$+Rb$Rb$Rb$qn%bv$09$=k$O#%09$@6$bv$bK%bv$zw%Rb$.b$-I$cA%g>&$/$S!$qw$w4#^f#^f#k~+'p$`&+eZ.`&+U,+U,+U,+U,+U,+U,+U,+.3%cN#cN#cN#N)$%*$T4$T4$dN#dN#dN#dN#dN#dN#dN#dN#N)$N)$90$90$09$09$Rj$Rj$Rj$09$90$N)$N)$90$09$Rj$09$09$09$09$09$09$09$09$90$Rj$nw$Ms$09$N)$N)$90$Rj$Rj$Rj$09$09$90$90$90$N)$N)$N)$N)$N)$N)$N)$%*$po%6c#>i#N$+u8+k>#M9##{#i#@Mu k9$xo En En TH TH >b@>b@>b@>b@>b@>b@>b@>b@sG sG >b@r[@r[@>b@sG Zi@nI@Nz {V.*]&=]&tJ+-]&;]&>]&,]&']&)]&0,%@;%h~$!]&=A$.c$~]&=A$1A.t|@;$%%++6++4Y.OR.]V.yW#}`#{.$n!&@6#,N+V;.'S%fQ.{]&-7#]]&^]&~I%/]&/]&VW (]&[)&_]&:]&<]&[]&}]&|]&yJ+r. y8.1]&2]&C! Ae+^b+^b+3]&!D+vv+vv+vv+vv+vv+vv+vv+vv+w*$w*$w*$w*$w*$w*$w*$w*$Eo+Eo+w*$vv+OJ.OJ.vv+vv+vv+w*$Eo+2&$2&$Eo+w*$vv+/D./D./D./D./D./D./D./D./D.PF+^b+^b+^b+PF+P~ uq./D./D./D./D./D./D./D./D.PF+/D.P~ uq.uq.P~ /D.Eo+8' x2%x2%x2%%.@%.@%.@%.@Lh+Lh+oA+oA+oA+oA+c;@oA+)> ]! ]! ]! ]! ]! ]! ]! 8g.8g.8g.8g.be+{! ]! Ea+be+be+be+{! {! {! {! ]! ]! ]! {! be+be+{! ]! ]! Lh+^b+^b+^b+^b+^b+^b+^b+PF+PF+^b+^b++d++d+Y@$;~ be+@$+@$+@$+13+13+13+13+@$+@$+@$+@$+@$+@$+@$+@$+13+13+13+13+13+13+13+13+l7 l7 l7 cI+NM+ko.13+)g@]%@!>%]%@!>%]%@!>%]%@!>%]%@A) PS@|7.q)@r,@", "7c dd dd 7c 8c 8c 8c 8c 8c 8c 8c 8c 8c 8c 8c d( vk .h.vk +h.d( +h..h.vk vk vk vk vk vk vk vk uk uk oG.oG.:j.:j.m` m` oG.oG.oG.oG.oG.oG.oG.oG.d( d( %% %% %% d( .h.$~.d( d( d( d( d( d( d( d( m` -H.-H.l` oG.uk oG.m` uk uk uk oG.:j.:j.m` n` Rl 9%.9%.X)@hY.G6.n` WW.l` l` he he he ke ke ke m` m` m` m` m` m` m` m` *_ l` oG.tk tk oG.l` 5% Lv.3b 3b 3b Lv.Lv.Lv.Lv.i% _j.=H.^q%J].~(.-,+Sl T}%9, 9, 9, 9, 9, 9, 9, 9%.X)@G6.9, VW.9, G6.hY.G6.G6.G6.G6.G6.G6.G6.G6.9, 9, 9, 9, 9, 9, 9, 9, AX$mI.lI.'K.'K.<].M/.M/.M/.<].<].'K.'K.lI.lI.AX$8v.VW.VW.9, 9, G6.G6.hY.9, 9, 9, 9, 9, 9, 9, 9, VW.VW.VW.VW.VW.VW.VW.VW.VW.9, H;@H;@P7.6!.6!.WW.4]&5]&~K.VD+2b G{ Y+ 7 nP$6]&&I+DQ+(#&U'%ej un@>Q.**+**+yX@g4@~[#~[#0T.RW.7]&v!&8]&z{.Y-+V'%p$&XZ.mB /N.,t#Eh+u}@[w$9]&G~+L;#'5@}e%QA+0]&RR%Y3#~U#a]&AN%b]&c]&d]&e]&f]&g]&h]&i]&j]&k]&l]&J)#2m@'{&n1#m1#Aj$i4#=P 8r J!$$-#>g$.B#rm#0L#4|+Ow#dy%s!$f<#M#$o%$U-$pZ%sP$sP$U-$+++p~+m]&7I. K.wL.)V.DO.jF#vK@>f#Mf Oe .X fG#|C G0 H5@')#S^#+t#Kz Jz d$$U!&q%&OH%Y#%|r@_E$C'$_E$xW$d$$U!&q%&V!&q%&+n@[f $B]&B]&:{&<{&u;&C]&l7%D]&%-&MS$bk%[{&1z$y9$dc$h'&{`%Bo%Rr%Aa%E]&g#&F]&f5$wM%(,&G]&.=&I.&{U%H]&I]&2{&J]&K]&QI%M)&L]&M]&!~&N]&q;$O]&P]&Q]&R]&S]&T]&U]&V]&W]&X]&Y]&Z]&`]& ^&.^&p{&r{&r{&q+$q+$U;&+^&@^&#^&$^&%^&j^$&^&XW%*^&=^&-^&;^&Ju%>^&,^&'^&1@&)^&!^&~^&{^&]^&^^&/^&(^&_^&:^&<^&[^&}^&|^&1^&2^&Y{&3^&4^&5^&6^&|>&7^&8^&Ha#NH#I,#.i#[`@UE@h@#XC@))#QT@QT@B_#a~ WA :|@:|@:|@[|@[|@[|@[|@<|@vR@Eu Eu Kv u1$Nt%Nt%GJ%Kv &E u1$Nt%Nt%Nt%Nt%%B%QL%9^&s%&0^&]$&^$&^$&5C%7C%7C%7C%*L%*L%*L%*L%GD%.y *E Eu $U,+k~+'M$y4#_a$@d$J3$$*$,p$_8$_8$47$37$b>%b>%bN#nw$]m$>b$Sj$09$90$N)$cN#%K$%K$c8$c8$c8$qn%!H$qn%,L$k~+}/+/-+k~+k~+/-+X_@p=#ZJ#ZJ#ZJ#ZJ#(-+ZJ#ZJ#dN#dN#N)$%*$T4$T4$T4$=k$dN#dN#dN#dN#dN#dN#dN#dN#N)$N)$90$90$09$09$Rj$Rj$Rj$09$90$N)$N)$90$09$Rj$09$09$09$09$09$09$09$09$N)$09$Ms$Ms$90$cN#N)$90$Rj$09$09$09$90$90$N)$N)$cN#cN#cN#cN#cN#cN#cN#dN#po%6c#N:+^F$Z@+3/+h|#z2$R1%z<@k9$xo En En TH Yr >b@>b@>b@>b@r[@r[@r[@r[@rG >b@r[@X:@X:@r[@>b@hB /V#Rh IR.5@@MW.b^&c^&d^&e^&f^&g^&h^&i^&j^&Yi@dD#-b$k^&cj l^&[L.*y QU.6P+cF.kT.)T@]V.m^&n^&LU.a#&,t##3 'S%,;+o^&p^&q^&!I%1V r^&s^&0Q &^%t^&6/.FL TW.u^&v^&(I d% =j ;e@w^&':$U/@^b+vv+I}+r3%$0+Hc%2&$Eo+w*$w*$OJ.OJ.l`.xj+w*$w*$w*$w*$w*$w*$w*$w*$2&$Eo+vv+l`.l`.l`.vv+w*$OJ.w*$Eo+2&$2&$Eo+w*$OJ./D./D./D./D./D./D./D./D./D.PF+^b+^b+^b+/D.uq. F./D./D./D./D./D./D./D./D.PF+/D.uq. F. F.uq./D.Eo+7g.PU+PU+x2%%.@0@@0@@0@@Lh+Lh+oA+oA+oA+oA+c;@oA+)> ]! ]! ]! ]! ]! ]! ]! Ea+{! w8.w8.8g.{! {! {! be+be+{! {! ]! 5A.5A.Ea+5A.{! be+w8.w8.be+{! ;~ ^b+^b+^b+^b+^b+^b+^b+^b+PF+PF+^b+^b++d+Y@$Y@$;~ 8g.=L =L @$+13+ko.ko.ko.O4 O4 O4 O4 O4 O4 O4 O4 =L =L =L =L =L =L =L =L aH@bH@}f.l7 cI+ko.13+)g@V!+};@};@};@};@};@};@};@!>%A) |7.p)@p)@|7.", "8c 8c 8c 8c 8c 8c 8c 7c 7c 7c 9c 8c 0' 0' 0' .h..h..h..h..h..h..h..h.$~.vk +h.vk $~.N6 .h.vk m` :j.oG.uk uk oG.:j.m` tk tk uk uk oG.oG.oG.oG.vk +h.d( ~% d( vk $~.N6 d( d( d( d( d( d( d( d( m` m` m` m` m` m` m` m` :j.:j.:j.m` m` m` l` WW._j.hY.hY.hY.hY.hY._j._j.*_ *_ -_ -_ ;_ 2b 2b he oG.oG.oG.oG.oG.oG.oG.oG.:j.m` -H.R_ R_ -H.m` +h.vk l:.!1.!1.d( ~% ~% ~% oG.:j.lI.<].<].lI.!K.=H.xx.VW.VW.VW.VW.VW.VW.VW.8v.VW.9, G6.G6.VW.Hu+#9.9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, ~(.jI.AX$=H.=H.AX$jI.~(.2P `d#^q%~(.kI.AX$=H.Sl VW.Hu+Hu+VW.X)@9%.hY.VW.X)@X)@hY.hY.G6.9, 9, 9, Y6.H;@H;@P7.P7.6!.VW.8v.9, 9, 9, 9, 9, 9, 9, T}%>4#`(@7'%x^&~k.#y#=5 {@ 8 mo.~x#X! JQ+S4%h) [&%8|@aj%#_:$b)#+}@A^&B^&V;+1+Aj${)#iQ 8~ FT G&#/7+t,%-@#)t@|v@3_+S2@N4$+v@,/#3|+i|#LD+tD$Gz$N]+-n#;V.3*+N^&vO.yG.vW.BO.b9 /T#Fn#09 Wj JE+Tg `;$1C G0 ]|@a~ Lz Lz Lz GN d$$FN Y#%(M kt@C@$#h>#X]$l>@rV@ G@iR.#i#O^&P^&Q^&P^&Q^&P^&Q^&P^&R^&S^&T^&U^&V^&W^&T^&X^&[=&[=&[=&[=&[=&[=&[=&[=&/.$Y^&[=&w+%Z^&Z^&Z^&yA%)n#xJ+=z$xd$BD%BG%@Q$6E$PL%tj%F'$b|$aE%eB `^& /&./&+/&@/&YH%FG%nr%@}$@}$&L%&L%9K%8'&4Q%]V%1N%1N%4Q%4Q%4Q%GD%1C%1C%i0$i0$GD%GD%GD%GD%GD%GD%GD%GD%u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Eu vR@$4@$4@)8@#/&$/&$/&%/&S&&`G$G=$;&$j*$j*$j*$2`@{A {A v! 6F _e G%$1d$&/&d>$*/&q$>q$21@Y4@>q$Iu$Tp$Tp$4c$4c$Q)$)o$_D$_{&:{&<{&8x%L1$w|$w|$1Y#0&$%-&ep$[{&>W$1z$oE$Pm$9+${`%Co%Sr%=/&-/&g#&;/&`8$>/&CZ%.A%,/&'/&{U%T%DL%^0#b4#I,#UE@UE@h@#{Y@))#')#YA @~ /|@(|@[|@[|@[|@<|@<|@$4@$4@$4@u1$u1$Nt%Nt%GJ%GJ%*L%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%TH%D/&E/&F/&G/&H/&D/&I/& y TH%^G%^G%9K%v)&v)&VH%wt ],$v~$7E$OO$BD%xd$QW$3G$J/&&g%K/&Rz$0W.z'$L/&7:@y1#(R#~}%8]+%*$'p$%*$'p$N)$J3$N)$$*$%6$Bb#27$Bb#e'#xW#2O#2O#2O#k7$k7$7]+7o@y4#y4#7F$,Z#,Z#,Z#7F$8]+H1#H1#H1#*,$*,$*,$K1#N;$BT$BT$:8$:8$*6$*6$J3$ln$*c$*c$Wk$Wk$!U#Tj$,Z#]m$ar$Sj$=k$T4$%*$cN#dN#Sj$~}%j[+te#te#|/+~}%!U# *+XX.XX.XX.XX.S)@XX.XX.j %j %%*$j %j %j %j %j %~}%~}%T4$T4$T4$T4$T4$T4$90$90$09$09$Rj$Ms$Ms$Ms$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$Ms$nw$Hs$Hs$nw$Ms$09$N)$N)$N)$N)$N)$N)$N)$N)$%*$`]$6Z.1_+OD@%>#s!$0&%.I$eU$o9+$c$=M En 6, /V#UH rG rG sG sG sG >b@r[@r[@+~ r[@rG r[@W:@Y:@X:@6F $E P1 _: M/&oB b#&N/&O/&P/&Q/&R/&S/&D;@,E *|@9r q*$g[@&2@t'+0_@U!@D6 y*@Xh 5z%GO@GO@oT.n!&T/&lY#^Q.U/&V/&C1@u,@+=+]]&]~.]~.W/&X/&Y/&Y/&Yv.Z/&.d.`/&%* R) L> 48 X0.+$+N/.uq.vv+WD@%c%%c%Gu+Gu+|r%DU%OJ.w*$Eo+Eo+w*$OJ.l`.2&$2&$2&$2&$2&$2&$2&$2&$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$x8.x8.x8.x8.x8.x8.x8.x8.x8.x8.x8.x8.x8.x8.x8.x8.^b+PF+PF+Y@${y%{y%^b+ F.PF+PF+/D.P~ P~ uq. F.l`.x*$*Z+;~@&c%vv+w*$Eo+Eo+3&$^b+3K@Jb#PC#_c$cT@d> Yt.{! {! {! {! {! {! {! ]! ]! ]! ]! ]! ]! ]! ]! 9Y+y{ y{ x8.Lh+Lh+x8..s.Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh+PF+^b++d+Y@$3&$Y@$^b+PF+P~ P~ /D.PF+^b++d+Y@$;~ be+@$+@$+@$+@$+@$+@$+@$+.Z @$+NM+cI+ko.@$+=L @$+=L =L =L =L =L =L =L =L ko.ko.ko.NM+NM+cI+cI+f+#{2 };@ (&r,@!>%|7.|7./4%r,@r,@r,@r,@r,@r,@", "8c 8c 8c 8c 8c 8c 8c 9c 9c 9c 9c 8c 8c 8c 8c .h..h..h..h..h..h..h..h.N6 .h.+h.+h..h..h.+h.~% m` :j.oG.uk uk oG.:j.m` tk tk uk uk oG.oG.oG.:j.vk +h.d( ~% ~% +h.vk .h.d( d( d( d( d( d( d( d( m` m` m` m` m` :j.:j.:j.:j.:j.:j.m` m` m` l` WW._j.hY.hY.hY.hY.hY._j._j.-H.-H.;_ 2b 2b 2b 2b 2b :j.:j.:j.:j.:j.:j.:j.:j.:j.m` -H.R_ R_ -H.m` +h.vk !1.!1.!1.d( ~% ~% ~% oG.:j.lI.'K.'K.lI.!K.kb.~(.VW.VW.VW.VW.VW.VW.VW.VW.9, 9, 9, 9, VW.8v.Hu+9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, jI.jI.kI.kI.kI.kI.jI.jI.^q%^q%~(.jI.jI.kI.AX$AX$G6.9, 8v.9, hY.hY.9, Hu+hY.hY.G6.G6.9, 9, VW.VW.H;@H;@H;@P7.P7.6!.VW.VW.VW.VW.VW.VW.VW.VW.VW.9K..(&+(&~{@5,%@(&/0.5% #% q$ _. .g #(&|&$CO+xO+u;%7d !<@4l$X,+$n@#E##E#4l$Q._L.h|@f|@Ft F).$(&j4 :Q.Yg 0R+fs#1-+VS@9_#%(&_P#A&+&(&*(&=(&(&*{&,(&'(&)(&!(&~(&{(&p=@](&ek+@,&Ps$>1+Yw {)#iQ 8~ FT u'@[/$Hh+5&#[ +m[+Y_@Y)+NJ@+v@,/#3|+LD+LD+tD$tD$V@&GX%0]+AG.3*+4F.5F.iT.dI.sc+NU.qV@Nq Fn#09 Iw%Th ,! 1C G0 G0 ]|@a~ a~ WA WA zK WA zK WA zK @~ zK @~ J~ ^|@;8@(|@-8@`:@{)#HT#~t@nm@h>#;1@X]$QM.[N.wz@KR.k>@#6#83@_R#PR.^(&/(&((&/(&((&/(&((&/(&((&_(&:(&ae%2*&_(&:(&<(&p1%1c%1c%1c%1c%1c%1c%1c%h,$[(&0-%TY$}(&}(&}(&.E#I_#G_#d]@$g+AD%{I$xd$dO$|(&a!&|u%PO$PO$#Q$1(&TH%Y!&FG%FG%nr%Ov Ov Ov Pv &L%&L%9K%8'&4Q%4Q%]V%]V%4Q%4Q%4Q%GD%1C%1C%1C%i0$GD%GD%GD%GD%GD%GD%GD%GD%u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Eu vR@vR@$4@/0@QO$QO$%/&S&&S&&`G${G$G=$.z j*$j*$;&$2`@2`@cB cB U^#<*$;> oP%2(&@/#[-#ZP$t4#<8+WO@*I@L3+':@^'$8s#,P+l;@It+ic@6m@q$21@Y4@4}@>q$>q$21@Y4@Ao$Iu$Tp$zo$Iu$zb$zo$Q)$_D$_D$Km$:{&dl$8x%C]&C]&1Y#-i$%-&ep$[{&>W$1z$cc$GV%2P%wY%uW%3(&Tr%)`%rY%4(&>O%5(&(,&.A%6(&7(&wI%(&&7I$bV%$X%8(&~!&_j$9{&9(&0(&R)&m+$a(&//&b(&c(&d(&e(&f(&g(&h(&i(&j(&k(&T;&+!&p{&OZ#q+$C $,s$l(&s{&m(&n(&o(&Sv$p(&==$q(&r(&f@&s(&t(&u(&5K$v(&I'&w(&x(&y(&z(&A(&B(&C(&D(&E(&F(&G(&H(&I(&J(&K(&L(&M(&N(&2!&O(&P(&#)&Q(&R(&S(&T(&~m#cj#5!#yn#UE@[`@XC@+W@QT@1f WA /|@_|@_|@<|@<|@<|@$4@$4@vR@vR@vR@u1$u1$Nt%Nt%GJ%GJ%*L%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%TH%U(&V(&W(&X(&*z /&*B%cC%[N%9K%VH%|A ly%0K%uK S-$36$es$.J$+N$SB$4G$@J$j`%:g$ 9%5w$8;&Y(&y{$i+&~($dN#$*$$*$&6$47$47$47$47$_8$_8$d8$d8$pw$pw$pw$u_%BO@4%$4%$6%$6%$6%$oZ@B2$L1#,b$@d$@d$@d$y4#y4#y4#7G#i)$i)$i)$7G#7G#7G#7G#7o@7o@7o@7o@,b$,b$ni$1h$RA$=7$=7$=7$D#$4[%K[#K[#M[#M[#!U#1r$1r$Ei$''%''%!U#Ei$ *+||+||+ *+Ei$K[#U`$U`$U`$U`$W,@W,@W,@U`$''%''%j %j %j %j %j %j %,Z#,Z#=k$=k$=k$=k$=k$=k$Rj$Rj$Rj$Rj$Rj$Ms$Ms$Ms$09$09$09$09$09$09$09$09$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$09$Rj$Ms$nw$nw$Ms$09$90$N)$N)$N)$N)$N)$N)$N)$%*$vy+> $7)#A'#N$+3_+[w$[a$}a$L&#Mu =M [r@6, b@rG rG rG >b@X:@X:@+~ r[@rG X:@Y:@]|@W:@$p@0B Z(&'p ^3 5n${T.RW$`(& _&|Z$j&%hq$8F ._&+_&@_&#_&Ct f[@t) .s }/ V: kB nT.b9 K8#NU.f'#NU%qc+$_&*O+%_&_&R[@t^%]d+N# AP.,_&FW#c;@H0@xe#^b+OJ.vv+jb%(W%(W%p!#p!#|r%DU%OJ.w*$Eo+Eo+w*$OJ.l`.Eo+Eo+Eo+Eo+Eo+Eo+Eo+Eo+w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$x8.x8.x8.x8.x8.x8.x8.x8.x8.x8.x8.x8.x8.x8.x8.x8.^b+PF+PF++d+3&$3&$^b+uq./D./D./D.P~ P~ P~ P~ OJ.=|$;~@Ic%&c%w*$Eo+=|$u3$+d+^b+Jb#Jb#KE#KE#+R@Jb#oA+{! {! {! {! {! {! {! ]! ]! ]! ]! ]! ]! ]! ]! 9Y+x8.x8.9Y+'g@'g@9Y+y{ Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh++d+Y@$Y@$Y@$Y@$^b+/D.P~ P~ P~ /D.PF+^b++d+Y@$;~ {! 13+13+13+13+13+13+13+O4 @$+NM+ko.@$+=L @$+13+@$+@$+@$+@$+@$+@$+@$+@$+13+13+ko.ko.NM+NM+NM+35+rS !>%q(#!>%V!+r,@PS@};@OU+A) OU+A) OU+A) ", "8c 8c 8c 8c 8c 8c 8c 8c 8c 8c 8c 9c 9c 9c 9c vk vk vk vk vk vk vk vk U5 .h.+h.+h.+h.+h.%% 5% m` :j.oG.uk uk oG.:j.m` uk uk uk oG.oG.:j.:j.:j.+h.+h.d( ~% ~% ~% d( d( d( d( d( d( d( d( d( d( l` l` l` m` :j.:j.oG.oG.:j.:j.:j.m` m` m` l` WW._j.hY.hY.hY.hY.hY._j._j.:j.:j.ke he he he 2b 2b l` l` l` l` l` l` l` l` m` l` l` -H.-H.l` l` d( 8c ,' ,' !% 0' 0' |% |% ke ke )y.GL.GL.)y.~K.mI.kI.G6.G6.G6.G6.G6.G6.G6.G6.G6.9, VW.8v.8v.VW.VW.9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, T}%T}%xx.xx.xx.xx.T}%T}%T}%T}%T}%T}%T}%T}%T}%T}%X)@G6.9, G6.G6.G6.8v.#9.9, 9, 9, 9, VW.VW.VW.VW.H;@&j.&j.zT.P7.6!.6!.6!.8v.8v.l=&l=&l=&l=&l=&M}.Do@'_&~6.05@)_&kI.n` +h.og q$ E& w< k$&!_&o%@XW /8@I8 >h@/#T)@Y_@dy%/n%3_+7 @l[+l[+g~@g~@B'#'{+Eb#P:$P:$6_&^R@wO.h~@Dh++g+n^#' $^L$]T.Fn#09 =$#9_$,! ,! H0 1C 1C fG#`;$7K#h*$9V *W@d)%L-$0V ^D%9V *W@d)%n)$ZT@E&#uK@@p |L.}L.wz@pB.G3 .E.eW.R$+n^#!2+#Y.WQ@dR.@Y.` &7_&%*%7_&%*%7_&%*%7_&8_&9_&%*%7_&0_&a_&b_&c_&rF%%L+%L+%L+%L+%L+%L+%L+;N+d_&Wk#z4%:g$:g$z4%z4%Rz$6Y+6>%;v$@J${j%e_&/J$f_&g_&OW$h_&i_&1u%CD%$h%Lv Nw o($o($o($Pv Pv -z VH%VH%9K%9K%8'&8'&8'&]V%4Q%4Q%GD%GD%GD%1C%1C%1C%GD%GD%GD%GD%GD%GD%GD%GD%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$&E Kv Eu vR@vR@$4@$W@$W@Oz$c.#c.#^A ^A @W@^A .z .z ]A ]A ]A >&$cB $L@JT#5F ;> 1d$3j%$/#rz#^M#JZ@j_&s(@JC$+5$k_&%Y%!G+(G+-]@<9@5k@9i@we@|9@ye@ye@0i@`6@0X#*3@Ab$J,+`0$31@5}@31@`0$3(@lt$31@3(@Na$yb$7j$Na$Na$7j$Hu$_D$_D$B]&Km$:{&:{&l_&l_&1Y#-i$ep$ep$[{&>W$1z$],&GV%qE$G:$7H$eG$m_&n_&*p%o_&p_&q_&BW%r_&s_&t_&wI%u_&iH%v_&$X%wV%V$&w_&x_&/)$y_&z_&Q]&A_&B_&C_&D_&E_&F_&G_&H_&I_&J_&K_&k(&1~&p{&Wq$Wq$r{&#!&L_&tu$C $M_&N_&O_&P_&Q_&R_&S_&T_&U_&V_&W_&X_&Y_&Z_&`_& :&.:&+:&@:&#:&$:&%:&&:&*:&=:&G(&-:&;:&>:&,:&':&):&!:&4!&~:&P(&{:&]:&^:&/:&T(&.p@T8#JN#6!#UE@RT@!)#QT@1f WA /|@:|@[|@<|@vR@vR@vR@Eu Eu Kv Kv Kv u1$u1$Nt%Nt%GJ%GJ%*L%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%TH%(:&_:&::&<:&[:&*B%]G%Cu }:&ML%EG%Yv%Yv%Ss%p[#ix@d]@ih$1w$Wo$6>%Vk#N#$zB%pZ%sP$6W.>)&Hw%35%l~$$ +'2+v,$|T+u_%u_%_P+hX+hX+vp#vp#iX+iX+iX+WK+WK+2R+[ @;}@;}@;}@o7#eh$eh$[|$DA#DA#L1#,b$,b$,b$@d$y4#`z$G1#G1#G1#`z$`z$`z$`z$`z$`z$)7$Wy$Wy$B4#C;%*/%Vk$1S#1S#1S#HK$HK$HK$HK$YJ#YJ#YJ#YJ#YJ#:-+:-+_-+km$rr%PX#PX#PX#PX#rr%km$A0%A0%PX#PX#PX#PX#PX#PX#>>+>>+Ei$Ei$Ei$Ei$Ei$Ei$Tj$Tj$Sj$Sj$Sj$Sj$Sj$Sj$nw$nw$Ms$Ms$Ms$Ms$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$%*$T4$=k$Sj$Sj$Sj$=k$=k$T4$T4$T4$T4$T4$T4$T4$T4$,Z#1r$>>+3W.Ar+Y_@bX#%/#u1@},%`w Ts$Ku to =b zu ^0@r[@r[@>b@r[@X:@t! +~ +~ r[@>b@+~ (7 9 ]|@]J aB om$/7 Q} u/@Th W{$|:&1c#p[##L@w_$0>&1:&2:&3:&4:&$2@x' 2' k8 >J [7 R9 D%.&K.GB%`]+x +5:&%3 6:&7:&+ %*O+*O+7:&8:&9:&0:&nJ%^~.a:&SO.b:&c:&Qc.H%z$$@d+5e%@g%z1$z1$o8$o8$:6%NZ@oA+{! {! {! {! {! {! {! {! {! {! {! {! {! {! {! 'g@9Y+9Y+Lh+;~ ;~ Lh+x8.Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh+3&$3&$3&$Y@$+d+PF+P~ uq.P~ /D./D.PF+^b++d++d+;~ ]! ko.ko.ko.ko.ko.ko.ko.@$+13+ko.13+=L O4 13+NM+ko.ko.ko.ko.ko.ko.ko.ko.@$+@$+13+13+13+ko.ko.ko.8e.OU+h]@V!+,&+]%@M8@]%@ZW+]%@ZW+]%@ZW+]%@", "8c 8c 8c 8c 8c 8c 8c 0' 0' 0' 8c 9c 7c 7c 7c vk vk vk vk vk vk vk vk .h.+h.~% d( +h.+h.~% 4% m` :j.oG.uk uk oG.:j.m` uk uk oG.oG.oG.:j.:j.:j.+h.+h.d( ~% %% %% %% 4% d( d( d( d( d( d( d( d( -H.-H.l` m` :j.:j.oG.oG.:j.:j.:j.m` m` m` l` WW.n` G6.G6.G6.G6.G6.n` n` uk uk le le ke he he 2b -H.-H.-H.-H.-H.-H.-H.-H.l` l` l` l` l` l` l` ~% 8c ,' !% !% 0' 0' 0' 0' ke he )y.)y.)y.)y.{K.mI.kI.G6.G6.G6.G6.G6.G6.G6.X)@hY.9, 8v.Hu+8v.9, G6.9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, ts.T}%l=&4I%4I%l=&T}%ts.ts.ts.ts.T}%T}%xx.xx.xx.G6.G6.G6.G6.G6.9, VW.Hu+VW.VW.VW.VW.VW.8v.8v.5!.zT.zT.zT.zT.P7.P7.P7.P7.Hu+Hu+4I%4I%4I%4I%)1.82.Do@[E.f:&g:&;4#=H.=H.Lv.!1.S& /+ E& 0* HE%Mo+2k.dM+i_@qs%hh fi 7d 9G@9G@9G@,S%JA+JA+,S%>h@(2@a2$h:&i:&j:&k:&e9 #;@v[@,S%;p@1Z@0q@~/#l:&SA$i~$H_%>P+N:$m:&U1#n:&o:&p:&q:&r:&s:&t:&u:&v:&w:&x:&y:&z:&Ts%#5$L2${)#:g gP@#-#g9%NM.M_#;W+`R#Wt+T)@L6@Ow#ET#3_+7 @l[+>9@Y{@2|+B'#A:&D_+lH@lH@r'@B:&P/+*'&s)&0I.A(@A(@f!@dW.yg@qV@XP.p<+YG@Vj Rg Rg ,! JE+Ug Ug U@ U@`T@`T@`T@ U@ U@ U@ U@ U@ U@ U@Cu+|L.-W@.E.,N+R$+%++{[#Fh+'4+WQ@oZ.oZ.C:&C:&C:&!U+gh$3P+3P+3P+3P+3P+3P+3P+y{$H0%3P+Y(&7W.7W.H0%L=&7%%|(%|(%|(%|(%|(%|(%|(%]J$[3%[3%[3%[3%[3%]J$]J$pl%8R+uD$A[##f$hh$f+&B[%]}%D:&/J$E:&F:&G:&:,$t)$=H$=E =E =E =E =E =E =E VH%VH%VH%9K%9K%7'&8'&8'&GD%GD%GD%GD%GD%GD%1C%1C%GD%GD%GD%GD%GD%GD%GD%GD%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$&E Kv Eu vR@vR@$4@$4@/0@$4@/0@vR@c.#c.#c.#^A ^A @W@@W@@W@#W@>&$V!&z]&.n@Yr =P h^@5%%@/#|K#d_+=e#H:&I:&J:&K:&L:&MF@q;@_V+$h>$Z0@B]&B]&B]&I*$I*$F$$-i$ep$ep$[{&[{&v;&],&2z$@j$M:&o $y^$qN$n_&*p%N:&@~&O:&P:&+A%G]&t_&Q:&R:&'S$S:&}K$T:&U:&V:&W:&X:&Y:&Z:&`:&B_&,[$,[$ <&.<&+<&_~&@<&#<&$<&%<&&<&3/&*<&;Y#=<&-<&r{&;<&><&>s$>).1O ,<&'<&)<&!<&==$~<&{<&p;$]<&^<&/<&I9$(<&_<&:<&<<&[<&}<&|<&1<&2<&3<&4<&5<&6<&7<&8<&9<&0<&a<&b<&c<&c<&d<&e<&f<&g<&x~&HO%DL#-3#JN#Ag#uR@+L@kI@a~ @~ (|@:|@<|@$4@vR@Eu Kv Kv Kv &E &E u1$u1$u1$u1$Nt%Nt%GJ%GJ%*L%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%^G%h<&i<&X(&7E% y O%1C%j!$f!&@B%}/%o1#16$Uo$7=$|6$!f# .@8R+_g$Uj$U-$9>+M]+O4$56+H3$H3$;4+fZ.25%Jn#46+}|+@#$hF$}{#WK+iX+9e#8e#8e#9e#9e#iX+hX+iX+BO@} @8^@8^@P_@oi$Fj$Fj$Xk$DA#CA#L1#,b$,b$7o@@d$7F$}C#OA#OA#OA#}C#}C#}C#}C#D]%OA#/^%E1# :#Z/%j<&u)%1S#k<&3)#k<&3)#k<&3)#k<&@ +4)#@ +4)#+B$I4@+B$+B$+*+|0#k %N@%N@%k %&c$km$&c$&c$sD$sD$sD$sD$sD$sD$>>+>>+>>+>>+Ei$Ei$Ei$Ei$ar$ar$>b$>b$>b$>b$>b$>b$Hs$Hs$nw$nw$Ms$Rj$Rj$09$Ms$Ms$Ms$Ms$Ms$Ms$Ms$Ms$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$dN#%*$T4$T4$=k$Sj$Sj$Sj$T4$T4$T4$T4$T4$T4$T4$T4$~}%1r$>>+3W.tc@V##dy%(-#v}@t[$|d zr$Ku to l<&l@#5F X:@X:@X:@X:@t! +~ W:@+~ X:@r[@W:@ 9 .9 O9 |g Hv@xK }u ]|@V:@~~#J!$[,$Y~#En 6, &c m<&n<&o<&p<&q<&lx f2 f2 2' w' Pg w[ yW+CL.&K.{V.Mq r<&s<&t<&u<&v<&Eb$w<&x<&n5 j2 R:$}1 y<&z<&A<&n>@}% oF B<&AX.9&#n`.m&+;5 !3.P~ O9.OJ.QU+QU+EI#C<&~4.D<&j$&QU+vv+vv+vv+vv+vv+vv+vv+vv+vv+vv+vv+vv+vv+vv+vv+w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$7g.x8.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.^b+PF+P~ P~ P~ /D.PF+PF+uq.uq.P~ /D./D.PF+^b+2&$Gc%Hc%Hc%Hc%Gc%>H%mq+mq+&0+@g%i|$z1$k}+tq.(m%KE#oA+{! {! {! {! {! {! {! {! {! {! {! {! {! {! {! 'g@Lh+9Y+'g@6j+6j+'g@x8.Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh++d++d++d+^b+^b+PF+/D./D./D./D.PF+PF+^b+^b++d+'g@5A.NM+NM+NM+NM+NM+NM+NM+13+ko.13+=L .Z O4 13+cI+NM+NM+NM+NM+NM+NM+NM+NM+=L =L @$+@$+13+13+13+ko.]! M8@{! '> w8.'> {! M8@be+f!+be+f!+be+f!+", "8c 8c 8c 8c 8c 8c 8c 0' 0' 0' 8c 9c 7c 7c 7c +h.+h.+h.+h.+h.+h.+h.+h.d( %% 4% ~% vk .h.vk d( m` :j.oG.uk uk oG.:j.m` oG.oG.oG.:j.:j.:j.m` m` d( d( d( d( ~% %% 4% 4% d( d( d( d( d( d( d( d( l` l` l` m` :j.:j.:j.oG.:j.:j.:j.m` m` m` l` WW.n` G6.G6.G6.G6.G6.n` n` tk uk ie le ke ke he he R_ R_ R_ R_ R_ R_ R_ R_ l` l` l` l` l` l` l` ~% 0' !% !% !% 0' 0' 8c 8c he he )y.Qw.Qw.)y.{K.lI.kI.G6.G6.G6.G6.G6.G6.G6.9%.hY.9, 8v.8v.VW.9, G6.9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, ts.T}%l=&4I%4I%l=&T}%ts.+Q +Q ts.T}%T}%xx.l=&l=&Hu+VW.9, G6.G6.G6.G6.G6.8v.8v.8v.VW.VW.VW.VW.6!.zT.0- zT.zT.zT.zT.P7.P7.Hu+Hu+4I%4I%)1.)1.)1.82.u%&$5.$5.'1.4x +Q ts.P7.*- c& S$ F- F- /% P( G+.J)$}A+<<@dj pO.8m hh qs%9G@9G@2M%2M%m2$zn@q3$lJ%O>+:.%E<&BS+p%+2K+XZ I8 U+&d2@4-#F<&G<&H<&/^%`u@KK+I<&J<&K<&*]@L<&M<&N<&O<&P<&Q<&R<&S<&T<&&]+dN%U<&fq$#5$L2${)#:g o{ DR@v'@rV@Pt%oZ.`R#'/#qX+l[+0Z+Z<#7 @P]+>9@DU.87$87$^F$M/+){+QD@QD@P:$,'+B:&~Q.DR.)(@uL.uL.&*+.K.ud$dW.PU.Ba+Xj o<+A%@A%@vK@sV@,n#,n#VP.VP.dk#dk#dk#,n#VP.dk#UP.gs##i#F'#]T.fW.oB./R@/R@Pe@gx@YD.GR.cR.3&#G)+G)+w<@{f#{f#{f#{(${(${(${(${(${(${(${($U-${($7%%{($U-$pZ%U-$Gz$T)@qX+qX+qX+qX+qX+qX+qX+,]$'Z#'Z#rV$rV$rV$rV$rV$,]$'Z#-a$5V+=i#n>#$J$LG%V<&W<&X<&Y<&Z<&`<& [&PW$|(&|g$|g$|g$=H$=H$Z;$Z;$i0$i0$VH%VH%&L%u)&7'&7'&VH%1C%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GD%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%Nt%u1$&E Kv Eu Eu $4@tG $4@tG $4@-! vR@R5@R5@R5@R5@$4@$4@$4@<|@#W@H=$7V$.[&cN@hB -M z<@AB$L8%&X#2_+^,%+[&@[&#[&$[&mm+9X+#/+Jt+hr+|}@$}#$}#V[$V[$xT#-Z#]]+p)+m)+I,+lt$5}@>:@5}@`0$3(@`0$lt$>:@>:@5}@`0$Na$Hu$mt$mt$(;$(;$C&%Z0@Z0@Z0@%[&%[&F$$1Y#MS$MS$Yg$[{&v;&|Y#@j$&[&M:&G:$*[&(P$!&&-/&=[&|{&-[&#A%;[&G]&&s%'/&>[&,[&jH%AI%'[&9I$~-&)[&![&~[&{[&][&^[&/[&D_&([&_[&:[&<[&[[&}[&|[&k(&1[&OZ#*s$;Y#;Y#2[&#!&4/&>s$3[&OY.u@.4[&5[&M*&6[&7[&8[&9[&[O%0[&a[&b[&c[&d[&e[&f[&g[&h[&i[&j[&k[&l[&m[&n[&o[&p[&q[&r[&s[&t[&u[&v[&w[&x[&y[&z[&A[&B[&%)&0!&DL#g%&J,#.i#+L@(7 @~ ^|@(|@[|@$4@vR@Eu Eu Kv &E &E &E u1$u1$Nt%Nt%u1$u1$Nt%Nt%GJ%GJ%*L%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%^G%C[&D[&TL%*L%H-&E[&fy%>9%NO$%l%f7#&i#:G$sx$Y]$[3%Gz$-i#;i#`a$Z]$M$+ l#Ap+;4+fZ..3%.3%('$('$bN#46+}|+@#$@#$}{#_P+hX+vp#vp#!k#!k#vp#vp#hX+Wx$hX+oZ@oi$P_@P_@F[&Fj$Xk$zA#AA#AA#8D#ni$1h$S5+Di$S5+Di$C4# v@ v@ v@ v@ v@ v@ v@fE#Z_#B;%|C#$)%9T%d_%G[&k %k %C/%k %9v%N@%9v%N@%}7$|0#A1#+B$4V+3)#4V+3)#|f+9Z+]v$4Z.Qy$4w+k %|0#/a$/a$)]$)]$(a$(a$(a$(a$_-+_-+_-+_-+m~+m~+1r$1r$ar$ar$>b$>b$>b$>b$Ms$Ms$Hs$nw$nw$Ms$Rj$Rj$09$09$Ms$Ms$Ms$Ms$Ms$Ms$Ms$Ms$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$%*$j %j %~}%~}%,Z#Tj$ar$,Z#,Z#,Z#,Z#,Z#,Z#,Z#,Z#8]+B)+>>+W,@5)##o+P]+/B+qZ.HR@=$$Vx%I}$H[&I[&J[&5F t! X:@X:@t! +~ W:@Y:@W:@t! X:@;! +L@RT@.9 9 0~ EN#4|@.<@H~ H~ Z:@UH Xr 8q }o S!@p%#q<&Mg#K[&V*#P1 kr#g2 Q1 -[ }} ={ E~ xW+L[&C*@(7+M[&N[&1z [*@OW#O[&P[&h3@Q[&R[&S[&Vc$s<&WZ@F(+i$ =j )*%x1@9&#b;@>8+%u BX@_c$6j+9Y++C.5=+5=+@) aM.T[&T[&U[&QU+vv+vv+vv+vv+vv+vv+vv+vv+vv+vv+vv+vv+vv+vv+vv+w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$7g.x8.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.PF+PF+/D.P~ P~ P~ PF+^b+P~ P~ P~ /D.PF+^b+^b+2&$>H%gJ%gJ%gJ%>H%Gc%z4$z4$&0+@g%i|$z1$k}+tq.(m%KE#oA+{! {! {! {! {! {! {! be+be+be+be+be+be+be+be+'g@^b+PF++d+3&$3&$+d+/D.^b+^b+^b+^b+^b+^b+^b+^b+/D./D./D.PF+PF+^b++d++d+PF+PF+PF+PF+^b+^b+^b+Lh+5A.NM+NM+NM+NM+NM+NM+NM+13+ko.13+=L .Z O4 13+cI+NM+NM+NM+NM+NM+NM+NM+NM+=L =L @$+@$+13+13+13+ko.xc+{! ,v.w8.,v.8g.Yt.5A.i~ be+i~ be+i~ be+", "8c 8c 8c 8c 8c 8c 8c 8c 8c 8c 8c 9c 9c 9c 9c +h.+h.+h.+h.+h.+h.+h.+h.~% %% 4% ~% .h.N6 $~..h.m` :j.oG.uk uk oG.:j.m` oG.oG.oG.:j.:j.m` m` m` ~% d( +h.+h.+h.d( ~% %% d( d( d( d( d( d( d( d( m` m` m` m` m` m` m` m` :j.:j.:j.m` m` m` l` WW.n` G6.G6.G6.G6.G6.n` n` oG.oG.le le ke ke ke ke -H.-H.-H.-H.-H.-H.-H.-H.-H.l` l` m` m` l` l` %% |% #% !% !% 0' 8c 8c 8c 2b he Qw.Qw.Qw.Qw.{K.'K.kI.G6.G6.G6.G6.G6.G6.G6.X)@hY.G6.9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, T}%T}%xx.xx.xx.xx.T}%T}%+Q ts.ts.T}%T}%xx.xx.l= .8v.G6.G6.G6.9, G6.X)@VW.VW.VW.VW.9, 9, 9, P7.7!.V[&7!.zT.zT.&j.H;@H;@8v.8v.l=&l=&M}.M}.M}.W[&:_.$5.'1.'1.M}.l=&l=&VW.r: N~.S& ^. i# 1. ^+ k* ,D x).n,$eF+2~ <<@-2@1a #n@nL.G[@U+&q3$7j#T&#X[&%@#%@#!I%R=$8= aj.0K+vO+e{ l|@Y[&ZN%f#KR.cW.bU%{f#'/#~}@Y{@P]+C'#-T.P]+~b#DU.N$+B'#^F$''+2!+PD@QD@lH@,'+>}&r'@B:&3I.`J.;N.FR.+7#yO.,Q.Fh+S$+/T.D6 x[ e_@Xj 7O#`m+N_#M_#L_#L_#n!&n!&N_#M_#L_#Pt%' $oT.]V.8@{}&]}&^}&>&$}A [f o!$o9+UZ$GY$8r$1/%/}&}>%(}&us%M,@9X+by+N2@1(@J<@:C#xT#oW$oW$h($h($dE#0~+L,+L,+31@5}@>:@5}@`0$Na$3(@lt$5}@>:@5}@lt$7j$mt$mt$mt$Ql$Ql$C&%C&%Z0@B]&I*$I*$.`#1Y#MS$MS$Yg$Yg$ `#|Y#GV%@j$M:&G:$*[&_}&:}&y.&Ev${L%<}&KT%[}&G]&Jq%}}&7 &xV%|}&1}&2}&9I$3}&4}&5}&z#&6}&7}&8}&{)$9}&0}&a}&b}&c}&d}&e}&f}&g}&h}&Xq$i}&j}&j}&#!&Ag$l(&k}&l}&m}&n}&6l+o}&p}&q}&r}&s}&o;$t}&H_&u}&v}&w}&x}&y}&z}&A}&B}&C}&D}&E}&F}&G}&H}&I}&J}&K}&L}&M}&N}&O}&P}&Q}&R}&S}&T}&u-&U}&V}&8^&.p@)m#'m#/7 ]|@Y:@(|@_|@[|@$4@Eu Kv Kv Kv Kv &E &E &E u1$u1$Nt%Nt%u1$u1$Nt%Nt%GJ%GJ%*L%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%W}&~J%tj%6E$dO$xd$':%+3%.1%=`$y[#tF%H{%0/$6X%M$+z1#> $DA$3w+Q'$Tj$T4$.3%J$+47$pw$u_%hF$hF$CM@CM@hF$}{#}{#_P+hX+vp#vp#vp#vp#00$hX+Wx$Wx$*6$*6$B2$Fj$F[&F[&X}&Xk$G4#AA#8D#8D#0D#1h$z4#Di$N[#Di$N[#C4# v@C4# v@ v@ v@ v@ v@ v@Z_#{M#{M#|C#Y}&Y}&xC$/a$A3%A3%Z}&Z}&Z}&`}&`}&Z}&9v%9v%C/%C/%4V+C/%4V+~}@g&@B1#.v@.v@]v$wy+k %/a$/a$)]$)]$(a$(a$7v$(a$_-+:-+_-+_-+m~+m~+1r$1r$Tj$Tj$Sj$Sj$Sj$Sj$Rj$Rj$Rj$Rj$Rj$Rj$09$09$09$09$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$T4$Sj$,Z#~}%~}%~}%,Z#Tj$ar$,Z#,Z#,Z#,Z#,Z#,Z#,Z#,Z#8]+(R#Ei$W,@A'#G~+sz@2&#$$#c~#DJ.4=$I}$ |&.|&J[&5F X:@X:@X:@X:@t! +~ W:@Y:@+~ t! ;! +L@RT@.9 T:@h=$M%$L%$HT eP@ <@W:@]J ~J $E #E ]t Wr ]1 f2 f2 P1 g2 %l ua Vr t[ L~#$[ Cg +|&@|&gI.#|&#.@$|&X4+%|&&|&r<&NW#U(@|N.*|&=|&wB ;@ =h a3@-|&@B#JZ$ks#%u %u >8+9&#+R@BX@)i.({ +C.(D.5=+@) @) T[&T[&U[&&c%vv+vv+OJ.OJ.vv+vv+w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$7g.x8.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g./D.PF++d+^b+/D.P~ PF+^b+/D./D.PF+PF+PF+PF+^b+2&$mq+fJ%fJ%fJ%>H%Gc%WD@t=+5e%@g%z1$z1$o8$o8$:6%NZ@oA+{! {! {! {! {! {! {! be+be+be+be+be+be+be+be++d+PF+PF+^b+Y@$Y@$^b+/D.^b+^b+^b+^b+^b+^b+^b+^b+uq.uq.uq.P~ /D.^b+Y@$3&$PF+PF+PF+PF+^b+^b+^b+Lh+]! ko.ko.ko.ko.ko.ko.ko.@$+13+ko.13+=L O4 13+NM+NM+NM+NM+NM+NM+NM+NM+NM+@$+@$+13+13+13+ko.ko.ko.jy.,v.O* ,v.Yt.i~ i~ 6g+Yt.Yt.Yt.Yt.Yt.Yt.", "8c 8c 8c 8c 8c 8c 8c 9c 9c 9c 9c 8c 8c 8c 8c d( d( d( d( d( d( d( d( vk d( ~% +h..h.N6 $~.vk m` :j.oG.uk uk oG.:j.m` oG.:j.:j.:j.m` m` l` l` %% d( +h.vk vk vk +h.d( d( d( d( d( d( d( d( d( oG.oG.:j.:j.m` l` -H.-H.:j.:j.:j.m` m` m` l` WW.WW.9, 9, 9, 9, 9, WW.WW.m` m` he ke ke ke ke ke -H.-H.-H.-H.-H.-H.-H.-H.R_ -H.m` :j.:j.m` -H.4% |% #% #% !% 8c 8c 8c 9c 2b he Qw.HO.HO.Qw.{K.'K.~(.VW.VW.VW.VW.VW.VW.VW.G6.hY.hY.hY.hY.G6.9, VW.9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, T}%T}%ts.ts.ts.ts.T}%T}%ts.ts.T}%T}%T}%T}%xx.xx.Hu+9, hY.hY.9, 8v.9, G6.VW.VW.9, 9, G6.G6.hY.Y6.7!.V[&V[&0- zT.&j.H;@H;@VW.VW.xx.9K.9K.9K.&=+&=+j<.1[#rF.hJ%wx.<3+4I%9, +n 2c 1c r& T% e+ 5# r+ t%$;|&,d v<$Vx+kM+0O.`~ lr W}%Lt +j@)o@>|&,|&'|&)=#)=#,B$)|&Q{ /c x~ x~ WZ R{ F0%9i$8G#l #N@%d=@@z$!|&~|&{|&]|&^|&0c#/|&%k+(|&_|&:|&<|&|X+[|&}|&||&fq$ji$p[#{)#n{ 8V {L$0T@]T.vJ+x<@{f#5V+Yx%2|+/i@AF@-T.P]+~b#O$+B'#A:&''+es#2!+PD@QD@lH@r'@,'+%;$fD@sz@E_+B:&P/+O/+D'#A|@DC.,1#r'+bT+v7 ;l 66+dW.#Y.#Y.dR.dR.dR.dR.dR.dR.&L+&L+&L++K.+K.bI..K.,Q.UJ.RW.[I.wc@n[+q~+|v@YJ.Bp+Br+)2+)2+88$88$)2+3_+1|&0Z+1|&0Z+1|&0Z+1|&mi@#h+/n%1|&-T.}v@Q]+8G#}x@ v@Vk$ v@Vk$ v@Vk$ v@Vk$fE#D#$f&@4[%fE#Vk$B;%RA$RA$=7$k %k %Yx%L{$&K$M=&.Y.P-&2|&3|&4|&5|&6|&7|&UU#r]&_ %fO$oS$=f$e6%],$i0$-z Pv t)&t)&]J%u)&-z 1C%1C%1C%GD%4Q%4Q%4Q%GD%GD%GD%GD%GD%GD%GD%GD%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%GJ%GJ%Nt%u1$&E *E as 1/$=^$xt xt .~ 'M 'M D&#D&#Dz+4z+EN 2g$)8@8|&9|&0|&a|&>&$:C@[r@p!$a>&s1#yU%Y}%b|&c|&d|&e|&ry+9X+by+N2@1(@J<@:C#xT#xT#xT#h($h($yT#}1@-:@-:@31@>:@>:@5}@`0$Na$3(@`0$Na$`0$lt$`0$yb$Hu$yb$Na$f|&f|&+9@C&%B]&Km$+S$+S$.`#F$$MS$g|&bk%Yg$ `#|Y#h|&GV%#j$G:$*[&5M$i|&j|&k|&tu%l|&m|&n|&G]&Jq%GW%)U%HW%o|&V$&2}&p|&q|&r|&5@&s|&t|&u|&v|&w|&x|&y|&z|&A|&B|&C|&D|&E|&F|&sp$j}&Wq$*s$*s$r{&;<&G|&H|&I|&J|&K|&0+.L|&M|&N|&O|&P|&Q|&R|&S|&T|&U|&V|&W|&X|&Y|&Z|&`|& 1&.1&+1&@1&$1&%1&&1&L}&*1&=1&-1&;1&>1&x[&R}&S}&,1&'1&|>&%)&y~&~m#97#/7 |g W:@X:@:|@[|@<|@vR@Eu Kv Kv Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$Nt%Nt%GJ%GJ%*L%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%G'$n!${@$$>$q]&yA%8e%)1&Z &b>&Hn#w;%W@+|7$po%eU%*W#08$%*$*W#90$Rj$Ej$_8$pw$pw$}{#BM@5&@2 @YK+w;@YK+iX+5($d9$d9$d9$c9$c9$c9$_8$qw$47$&6$$*$$*$$*$<{#DA#F4#F4#;G+F4#;G+aD#0)#Oe$)7$)g$4d$4d$7I#4d$7I#'7$C4#'7$C4#C4#C4#C4#C4#C4# v@ v@ v@ v@ v@B;%CM#y7%HX$!1&~1&{1&{1&{1&]1&]1&^1&D~&nM%nM%/1&(1&A1#T)@Y_@Y)+X,@mF$0/$tp%9v%98$98$99$J8%cK%cK%8|%qr%4[%YJ#YJ#YJ#4[%4[%K[#K[#1r$,Z#=k$=k$=k$=k$09$09$N)$90$90$90$90$09$09$09$09$09$09$09$09$09$09$09$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$T4$%u$]m$Tj$,Z#,Z#,Z#Tj$ar$Tj$Tj$Tj$Tj$Tj$Tj$Tj$Tj$(R#7F$!U#m~+6)#G~+$*+h>@cR.42 3L.u) D> |&_1&:1&^t X:@r[@r[@X:@t! +~ +~ ;! W:@+~ ;! +L@RT@+L@fG#<1&[1&+>$}1&ZT@%W@;! 8v $E |1&m[#7, ;[ Bm 99 #9 :} :c#Zp kx uy A_#:;#a> 11&21&31&41&51&61&#.@#|&71&81&|%@91&Gb#01&a1&b1&AB.-5 +R@B;+8$+3K@7$++..G}+0:@n`.>8+#U.`z b, .o 8e.,&+(4%/4%/4%/^@c1&7;@x2%w*$OJ.l`.l`.OJ.w*$Eo+Eo+Eo+Eo+Eo+Eo+Eo+Eo+Eo+w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$7g.x8.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.uq.^b+3&$3&$+d+PF+PF+^b+^b+^b+^b+PF+PF+PF+PF+Eo+z4$Hc%gJ%fJ%mq+>H%z4$WD@Fc%]1%T3$T3$i|$i|$CX@Jb#oA+{! {! {! {! {! {! {! 8g.8g.8g.8g.8g.8g.8g.8g.PF+/D./D.PF++d++d+PF+P~ ^b+^b+^b+^b+^b+^b+^b+^b+/D.P~ P~ P~ P~ PF++d+Y@$^b+^b+^b+^b+PF+PF+PF+9Y+{! 13+13+13+13+13+13+13+O4 @$+NM+ko.@$+=L @$+13+ko.ko.ko.ko.ko.ko.ko.ko.13+13+ko.ko.NM+NM+NM+NM+6g+F;.dt a(+^x#a(+a(+^x#.d+.d+.d+.d+.d+.d+", "8c 8c 8c 8c 8c 8c 8c 7c 7c 7c 9c 8c 0' 0' 0' d( d( d( d( d( d( d( d( N6 .h.+h.vk $~.$~..h.+h.m` :j.oG.uk uk oG.:j.m` :j.:j.:j.:j.m` m` l` l` %% ~% +h..h.$~..h.vk vk d( d( d( d( d( d( d( d( tk uk oG.:j.m` -H.R_ R_ :j.:j.:j.m` m` m` l` l` O~.P7.O~.P7.O~.O~.O~.WW.-H.l` 2b he ke ke le le l` l` l` l` l` l` l` l` R_ -H.m` :j.:j.m` -H.4% |% #% #% !% 8c 8c 9c 9c ;_ he Qw.HO.HO.Qw.{K.<].~(.VW.VW.VW.VW.VW.VW.VW.9, G6.X)@9%.X)@G6.VW.8v.9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, xx.T}%+Q }{.}{.+Q T}%xx.T}%T}%T}%T}%T}%T}%T}%T}%VW.hY.9%.X)@VW.Hu+Hu+VW.9, 9, 9, G6.hY.hY.X)@iI.4!.7!.7!.zT.zT.H;@H;@Y6.9, 9, T}%T}%4x 4x 4x ZL.wx.+4.pP#Zq@:t@0q.$;&G6._j.7% l3 l3 y% y% p: Ma Ei+j]+_2+Q~$x).eQ+bF+`H.v~ |- W}%1C@|C@;O@*h@d1&Me$VS@'|&`w@=z.|- k)%+3 'q%%g.e1&f1&>}&,{+87$W_#g1&h1&f2$#:#i1&j1&80#mp+/|+k1&l1&m1&n1&=m@o1&p1&Rn$Ss%^*@R-$kl ;z n{ ^)#:R#LR.q1&2Y.f<#5w+~}@2|+4g@Q]+-T.P]+~b#O$+%>#M/+M/+Wx#3!+r1&ZF@QD@r'@%;$[-+ja@#o+-z@>}&B:&;N.*[@s1&S~&!I%EC.Wv U;.=<@/R@}H#9I.2Y.x<@x<@bU%9R+9R+9I.9I.2Y.x<@x<@bU%9R+9R++7#'t#wL.D'#{>+q~+@f$3/+8M@mo%aT+'/#7%%^B+6/%^B+Ow#X[$ET#X[$ET#X[$ET##h+mi@1|&Ow#1|&Q]+}v@Q]+P@@}x@8o@Vk$Vk$Vk$Vk$Vk$Vk$D#$4[%_-+.*+_-+4[%=7$Vk$_-+_-+HK$HK$3)#+B$']$WS@6/%fh$kZ.t1&u1&v1&w1&x1&58%8e%y1&z1&QW$;K$$R$gy% J$],$i0$-z yz%yz%u)&u)&Pv -z VH%VH%9K%8'&8'&4Q%GD%GD%GD%GD%+I$+I$+I$+I$*L%*L%*L%*L%*L%*L%*L%*L%pM%*L%*L%GJ%Nt%u1$&E *E vt bs bs cs xt .~ es EN [g [g Dz+EN EN lQ )8@^ $A1&B1&C1&]A Yk@^t }C y~$A[%/V%D1&E1&F1&*h$G1&d^#%>+&4+jD+Ml+Ol+J<@:C#yT#yT#h($:C#J<@1(@1(@t~@5}@>:@MU#5}@`0$Na$Na$`0$mt$7j$3(@3(@yb$yb$Na$7)$Et$f|&Ql$h>$_D$:{&rk$$-&9&$F$$1Y#g|&bk%Yg$ `#1z$H1&I1&qE$9+$3M$J1&^`%;-$O/$ru%`8$#s%+0$#E%n#&}}&%~&K1&L1&bJ$'[&DI%M1&N1&O1&P1&Q1&R1&^[&D_&#P#S1&T1&g(&U1&V1&W1&rp$X1&-Y#Y1&Z1&Z1&'j$q{&`1&Rv$ 2&.2&+2&@2&(c$[R@IO@#2&$2&%2&&2&*2&=2&-2&;2&>2&,2&'2&)2&!2&~2&{2&]2&+1&^2&/2&(2&_2&:2&<2&[2&}2&|2&12&22&F&&32&]:&f<&42&52&62&dj#07#g1#/7 |g t! rG s[@%2@dP@(0@E'$Kv E'$Kv Kv Kv Kv &E &E u1$u1$u1$u1$u1$Nt%Nt%GJ%oF%+I$+I$@I$@I$`I$lh$lh$lh$lh$$|$J4%RW$72&&>M$)H$5($-I$5($!l$WL$iX+DI+CM@CM@DI+5&@4G+>K@)K@jX+!l$im$!I$im$im$c8$c8$c8$J$+J$+J$+%6$%6$T@+.3%^f#N;$a=#N;$a=#a=#a=#x4#x4#Oe$)g$)g$)g$)g$)g$)g$)g$A4#A4#*c$A4#Ss@Ss@Ss@Ss@C4# v@fE#fE#fE#Y_#fE#d=@y7%7_%02&5v$a2&b2&c2&d2&e2&f2&]1&HW$~1&y7%Z'%89$mF$T)@T)@qX+QB$tp%tp%Os%98$99$J8%J8%cK%cK%8|%qr%K[#4[%4[%4[%K[#K[#K[#!U#Ei$~}%~}%T4$T4$T4$T4$90$.3%cN#cN#N)$90$90$09$=k$90$T4$T4$T4$T4$T4$T4$T4$90$90$90$90$90$90$90$90$90$90$90$90$90$90$90$T4$6F$ln$ar$Tj$,Z#,Z#Tj$ar$Tj$Tj$Tj$Tj$Tj$Tj$Tj$Tj$,Z#ar$]m$Wk$y1#A'#A:&7J#sL.PP.Pp@Nu BN D> |&&c r[@+<@+<@>b@r[@X:@t! u! ]|@W:@+~ ;! +L@@A@O9 1C <1&g2&3E%`~#mQ >8 ]|@8v l.#Qk#+' T-@Bm l8 R_+99 _} S} kx Bv@cw Zq h2&i2&j2&h_ k2&+|&l2&m2&n2&o2&p2&1z q2&r2&s2&t2&k~ N4%]n.xe#N4%o8$sq.T3$i|$$P%BX@:5@uV@@y#4!$yj+oA+y$$.s.,&+(D.VS+PU+(4%/^@WS+8' /D.uq. F. F.uq./D.PF+^b+^b+^b+^b+^b+^b+^b+^b+w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$w*$7g.x8.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g.8g. F.2&${y%{y%Y@$PF+PF+^b++d++d++d+^b+PF+/D./D./D.t=+jb%Gc%mq+z$$mq+>H%>H%O4%]1%o8$T3$d7$:b$i|$3K@Lh+{! {! {! {! {! {! {! 8g.8g.8g.8g.8g.8g.8g.8g.PF+P~ P~ /D.^b+^b+/D.uq.^b+^b+^b+^b+^b+^b+^b+^b+^b+PF+/D.P~ uq.P~ PF+^b+^b+^b+^b+^b+PF+PF+PF+9Y+be+vn.@$+@$+@$+@$+@$+@$+.Z @$+NM+cI+ko.@$+=L @$+ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.NM+NM+cI+cI+cI+)> '5 hu )> (w.)> a(+]$@Fu#6g+Fu#6g+Fu#6g+", "8c 8c 8c 8c 8c 8c 8c g~ E7 7c 9c 8c 0' |% $% 9c 9c 8c 8c 0' |% |% $% 0' 0' 0' 0' 0' 0' 0' 0' uk :j.m` m` oG.uk oG.m` l` l` l` m` :j.:j.oG.oG.-H.m` oG.oG.m` l` l` :j.oG.oG.oG.oG.oG.oG.oG.oG.m` uk sk tk :j.-H.m` oG.-H.-H.-H.-H.-H.-H.-H.%% &% N~.&% N~.&% &% &% ~% %% %% -H.-H.-H.-H.-H.-H.2b -_ =_ -_ 2b he ;_ =_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ $% $% #% #% !% 0' |% |% $% 0c 2b HO.HO.GL.L/.u2&'K.AX$hY.G6.9, 9, VW.8v.8v.8v.VW.VW.9, 9, G6.hY.hY.X)@X)@hY.hY.G6.9, 9, VW.9, 9, 9, 9, 9, 9, 9, 9, 4I%4I%l=&l=&xx.T}%T}%ts.T}%T}%T}%T}%T}%T}%T}%T}%hY.G6.VW.8v.8v.VW.G6.hY.9, 9, 9, 9, 9, 9, 9, 9, P7.P7.P7.P7.P7.9, 9, 9, 9, 9, 9, 9, T}%T}%T}%[{.Tw@Gf.M!.F6.0@I[@X5@0Q x2&y2&P/+P.%(Y.)U+D_+[&#IL#G1#8D#eh$BI+TK+>[+a#@0Z.z2&A2&}^@)=@B2&Ss%)J 2r@ll }&$*+>{+>{+Eb#r1&|F.PD@D_+lH@ZF@C2&QD@lH@M/+M/+A:&'{+>{+r=#R]+1&#D2&E2&![#A|@3k+mB.mB.3k+-1@}-+_ +cv$f<#f<#{f#{f#8M@8M@8M@_g${f#{f#f<#XJ.w<@w<@=S+XJ.=S+XJ.0]@{f#B@$_g$[C%aT+R^$M#$R^$8M@ #+AF@s!$0Z+rX+Ow#>/#3_+,/#3_+3|+/i@)2+~b#)2+>9@rV$rV$0/$0/$QB$QB$QB$Yx%tp%tp%tp%a/$a/$a/$Os%a/$})#g&@=1@Ub+Ub+h/+h/+2|+']$Yx%0/$0T+@/$@/$6X%7R+B[#F2&>v$qx$L@%[H$j4#o1#D_#X{${c$!J i0$1C%VH%Pv .D%+D%+D%Y!&G2&[N%[N% O%4Q%4Q%|N%+I$EG%EG%`I$@I$G'$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%1C%i0$i0$=E }g -E Eu R5@dP@dP@dP@%2@%2@%2@||@'8@]Z#a$$B'$B'$z]&z]&L4$sI@;E |d$.J$]}%H2&I2&J2&[++av$J:+2V#S1+&I@iV+by+fi+Ul+Ul+Kg+=k+J<@1(@hp+hp+K2&W>$7)$[!$[!$7)$W>$-'$41@[!$7)$6)$6)$7)$[!$L2&{x$ v$:n$d6$5c$w,$_D$Z0@I*$'y$%G$.`#M2&N2&O2&5H$y9$=Y%%F%,#$M6#PK#GZ#P2&s^$@1$Q2&A.&[ &R2&c~&Ij%&s%S2&t_&GW%JZ%N.&vS%T2&U2&V2&W2&X2&ak$Y2&Z2&`2& 3&.3&+3&@3&$3&=%$r{&r+$%3&%3&ql$&3&*3&5-&=3&-3&L'.2H.)> P~ ;3&>3&,3&'3&)3&!3&~3&{3&]3&^3&/3&(3&_3&:3&_3&<3&[3&}3&|3&13&23&33&43&53&63&73&^=&NY%83&93&03&a3&b3&.p@DL%c3&e1#f1#;8 8v (t ^t Yr 8~ T~#T~#T~#l$#cP@1i ],$|f |f &E &E Rw gB TH%TH%FD%$B%|f 5'$Y;$#F%d3&e3&f3&g3&h3&$D%i3&X)%AB$[a$x[#K{$)=%A1#M$+Z+$|7$po%@6$qn%!H$V~$FO$CU$+W$+W$!_$DO@@@%F@@7G+{K@TR$%/$8k#w-$b>%u_%|T+1T+*6$c9$1=&j3&1=&7G$bK%YR#$6$j^##/$#/$bK%bK%7G$j3&j3&j3&k3&T@+YR#%6$J$+J$+bv$bv$J$+Ej$sS$sS$a9$,p$BT$@d$Sj$ar$(a$jm$jm$jm$C4#Ss@fE#fE#OA#Y_#Y_#l3&Y_#Y_#/a$/a$A3%/a$y7%)]$y7%)]$7_%(a$7_%4v$b2&^q$d2& p$kn$Qy$]8$~m$~m$0r$0r$/9$)]$(a$(a$qr%qr%c/$K$+c/$Tj$!U#!U#!U#!U#!U#!U#Tj$Tj$Tj$Tj$Tj$Tj$Tj$Tj$Sj$90$90$90$90$T4$T4$T4$~}%%*$j %~}%~}%1r$1r$1r$Tj$T4$T4$T4$T4$=k$=k$=k$=k$%*$%*$%*$%*$%*$%*$%*$%*$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$}0$K$+c/$m3&Z+$`a$:'$3|+|v@n6#Rq@DJ.|c@Vx%`r BR@W7@n$#}|@^|@WA G5@Iz |g |g ;8 +L@:} Qw#Q} :7 yz#fG#cK#s! Z:@y, V-@T-@Yq U-@U-@P9 u/@*@.a^ ry@_} $, n3&R8 {m {m a> ]m o3&p3&*)#O*#Io$g_ q3&r3&s3&t3&u3&X{ v3&% Ai.w3&oA+x8.d7.6}%6}%uq./D.^b+Hj.!3.Y1.Y1.!3.P~ PF+^b+/D.x8./D.7g.w*$7g.7g.x8.3K@3K@3K@3K@3K@3K@3K@3K@Hj.Hj.Hj.Hj.Hj.Hj.Hj.Hj.P~ Eo+2&$u3$u3$2&$Eo+vv+OJ.w*$2&$Eo+vv+vv+w*$%.@;~ be+gA `Y w8.be+be+be+5A.be+gA `Y w8.be+be+be+w*$&c%vv+vv+w*$Eo+2&$2&$/D./D.Jb#Jb#NZ@NZ@KE#KE#^b+2&$^b+^b+^b+^b+^b+^b+PF+PF+PF+PF+^b+^b+^b+^b+x8.be+{! {! {! 8g.gA `Y {! {! {! {! {! {! {! {! ^b+^b+^b+^b+^b+^b+^b+^b+PF+PF+PF+/D./D.P~ P~ P~ Fc%]1%@g%5e%&0+%P%R`%g~#]1%]1%]1%]1%]1%]1%]1%^b+8' V!+f!+f!+f!+f!+f!+f!+{! be+,v.,v.,v.Yt.)> ]$@@$+@$+@$+@$+13+13+13+13+ko.ko.ko.ko.ko.ko.ko.ko.5A.5A.6g+5A.6g+5A.6g+5A.i~ be+i~ w8.O* gA ", "8c 8c 8c 8c 8c 8c 8c 9c 9c 9c 9c 8c 8c 8c 8c 9c 9c 8c 8c 8c 8c 0' 0' 0' 0' 0' 0' 0' 0' 0' 0' uk oG.m` :j.uk tk oG.:j.l` l` l` m` :j.:j.:j.oG.-H.m` oG.oG.m` l` l` :j.:j.:j.:j.:j.:j.:j.:j.:j.m` uk tk uk m` l` m` :j.-H.-H.-H.-H.-H.-H.-H.%% &% S& S& S& S& S& &% &% ~% ~% l` l` l` l` l` l` ke 2b ;_ ;_ he ke he ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ $% $% #% #% !% 0' |% |% $% =_ 2b HO.HO.GL.L/.u2&'K.jI.9, 9, 9, 9, 9, 9, 9, VW.VW.VW.VW.VW.9, 9, 9, hY.hY.G6.G6.G6.G6.9, 9, 9, 9, 9, 9, 9, 9, 9, 9, xx.xx.xx.xx.T}%T}%T}%T}%T}%T}%T}%T}%T}%T}%T}%T}%hY.G6.VW.8v.8v.VW.G6.hY.9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, is@Tw@Gf.8'%F6.F6.F6.l=&xx.jI.jI.~(.~(.M/.M/.x3&*_ b/ d& m& c& S$ 2. c( !f$As y3&z3&A3&rd [*&B3&ej ;4@7d 7d :c *z.;O@:d@_4@,6@s:.C3&D3&,V.o@%E3& l+(g%){+W0+3W.B)+7o@BT$N+#V0+mV$12+F3&G3&H3&f4@4%%}h$-E ds uG @, cq so _d@-l d'.2k%(Z%>N.3I.0e@.+@~b#P$+>{+>{+>{+%;$QD@HB%ZF@lH@%;$Eb#QD@ZF@lH@D_+Wx#M/+M/+'{+>{+r=#R]+R]+h>@D2&E2&![#![#wG.wG.![#T2@&[@`@+u8+Br+3|+3|+Wt+,/#,/#,/#Wt+3|+3|+3|+Br+B@$`+$`+$`+$`+$`+$`+$B@$dG+B@$4Y+4Y+z(@z(@[C%z[#w<@3/+mo%+v@+v@+v@C(%,/#^B+'(@i|#i|#88$LD+LD+tD$Gz$Gz$Gz$tD$f2%-i#-i#-i#FC$0T+0T+0T+0T+0T+0T+FC$.+@vi+P@@P@@V##MX.h/+@*+@ +3)#N@%k %&c$km$sD$9v%'(@XJ.`R#d%%;{#Vj$L@%`F@$g+D_#Pz${c$#I$v~$Z;$*E .D%=B%+D%+D%Y!&X!&Ww aK%8'&4Q%+I$+I$EG%EG%`I$`I$G'$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%Nt%Nt%u1$&E Kv Eu Eu <|@<|@<|@<|@[|@[|@[|@[|@-8@-8@yK 7`@z]&I3&J3&L4$V~#TH #-#9P#]}%9e%K3&L3&E]#2w+rg@dm@S1+lZ+o0+@_+s:+<[+Kg+=k+J<@1(@:T+:T+F4@6)$7)$[!$[!$7)$6)$W>$[!$7)$6)$W>$W>$6)$7)$M3&cs$$w$:n$Ew$5c$5c$h>$C&%&G$'y$%G$%G$M2&N2&no$N3&oE$RC$7#&i&$O3&G<#GZ#:H#P3&Q3&R3&:{$N$&S3&w$&R2&T3&U3&V3&W3&SS%X3&Y3&Z3&`3&U2& 4&.4&+4&5@&@4&$4&%4&kH$&4&*4&=4&d}$m(&@!&2k$-4&;4&ql$ul$-s$>4&,4&'4&)4&Ui.Gc%!4&~4&{4&]4&^4&/4&(4&_4&_4&:4&<4&[4&}4&|4&14&24&34&44&54&64&74&84&94&04&a4&b4&c4&d4&e4&e4&e4&Cd#TJ#bj#e1#ew ew |g 5h (t ^t SC hB Rx@DN fP@eP@b$8v$>a$hA%+6$/J%U@+#6$t{$m4&U@+m4&U@+m4&eU%/J%/J%m4&m4&/J%n4&o4&9v$-u$-u$YR#4($,H$cN$Ej$,p$c9$Ej$>b$qr%(a$4v${m${m$C4#C4#fE#fE#OA#Y_#|1$l3&|1$Y_#1S#k %/a$/a$/a$Fs%pr%pr%(a$(a$4v$4v$&u$&u$p4&^q$ p$&W#&W#0r$/9$pr%pr%pr%80$80$qr%qr%c/$c/$O#%O#%,Z#,Z#,Z#,Z#,Z#,Z#,Z#,Z#Tj$Tj$Tj$Tj$Tj$Tj$Tj$Sj$90$90$90$90$T4$T4$~}%~}%~}%~}%1r$1r$m~+K[#K[#!U#Tj$Sj$Sj$Sj$=k$=k$=k$=k$T4$T4$T4$T4$T4$T4$T4$T4$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$}0$}0$K$+c/$m3&|7$.++`a$-i#Br+< +9x$a_#},%L&#Qp `~#,f$Ad$m$#3|@WA G5@Iz l1#l1#|g /7 Q} 8j#8_@T-@36 m[#y, qG qG y, Yq T-@wa :7 >! ZG@Bn@ ] ~_#^(#q4&Xk n3&Xk ^+$ /$Tk a> *)#p3&r4&k%#s4&mj$t4&u4&v4&F2 w4&x4&w4&. 7P.y4&;~ 'g@9Y+y{ P~ PF++d+Y@$/D.P~ uq.uq.P~ /D.^b++d+PF+PF+PF+PF+PF+PF+PF+PF+Jb#BX@BX@BX@BX@BX@BX@BX@m`.m`.m`.m`.m`.m`.m`.Hj./D.Eo+Eo+2&$2&$Eo+Eo+w*$OJ.w*$Eo+Eo+vv+OJ.w*$8' 'g@be+gA gA 8g.be+be+8g.]! be+gA gA 8g.be+be+'> w*$&c%QU+QU+w*$Eo+2&$2&$/D./D.Jb#Jb#NZ@NZ@cT@KE#NZ@^b+^b+^b+^b+^b+^b+^b++d++d++d+^b+PF+/D./D.x8.9Y+{! ]! ]! ]! {! be+w8.{! {! {! {! {! {! {! {! ^b+^b+^b+^b+^b+^b+^b+^b+PF+PF+/D./D.P~ P~ P~ uq.@g%@g%@g%@g%@g%@g%@g%5e%]1%]1%]1%]1%]1%]1%]1%2&$%.@]%@]%@]%@ZW+ZW+ZW+ZW+]! ]! Yt.i~ Yt.)> ^x#jy.Ov+NM+ko.ko.13+@$+@$+=L ko.ko.ko.ko.ko.ko.ko.ko.5A.5A.5A.5A.5A.5A.5A.5A.be+{! {! 8g.gA w8.", "8c 8c 8c 8c 8c 8c 8c 0' 8c 8c 8c 9c 9c 9c 7c 8c 8c 9c 9c 9c 9c 7c 7c 0' 0' 0' 0' 0' 0' 0' 0' tk oG.:j.oG.tk tk uk :j.l` l` m` m` m` :j.:j.:j.-H.m` oG.oG.m` l` l` :j.m` m` m` m` m` m` m` m` :j.oG.uk oG.m` l` m` :j.m` m` m` m` m` m` m` d( &% S& S& S& S& S& &% &% d( d( m` m` m` m` m` m` le he 2b 2b ke le ke 2b he he he he he he he 0' $% #% #% !% 0' |% |% $% -_ 2b Qw.Qw.GL.EK%u2&'K.^q%8v.VW.9, 9, G6.hY.hY.VW.VW.VW.8v.8v.8v.8v.Hu+9, 9, 9, G6.G6.G6.G6.G6.9, 9, 9, 9, 9, 9, 9, 9, ts.ts.ts.ts.T}%T}%T}%T}%T}%T}%T}%T}%T}%T}%T}%T}%G6.9, 9, VW.VW.9, 9, G6.9, 9, 9, 9, 9, 9, 9, 9, G6.G6.G6.G6.G6.G6.G6.G6.9, 9, 9, 9, 9, 9, 9, is@Tw@Gf.8'%8'%F6.F6.xx.xx.`d#`d#^q%^q%<].'K.'K.m` *=.3b N~._& C' Tt l+ v] z4&KC#w1$A4&eb Eo B4&C4&fi qs%=z.tg#*h@D4&IK%&n@ *#-6@E4&F4&G4&H4&Zw+I4&EW.C2&3!+z'#XX.7F$_a$2h$@d$x'$23@J4&K4&L4&'{&8e+R-$tG ;E hB [r@,J Ne `W YP.rj@vf@iT.;N.M4&E_+x=$.+@x=$sz@>{+>{+%;$ZF@N4&lH@%;$$*+%;$lH@lH@Eb#$*+D_+D_+GB@$*+>{+r=#Qv#R]+h>@D2&E2&![#![#![#![#E2&3I.tz@&[@`@+u8+Br+Br+3|+Wt+Wt+3|+3|+3|+Br+Br+Br+`+$`+$`+$`+$`+$`+$`+$`+$zB%`+$4Y+4Y+4Y+4Y+Lt$%J$A[#m>#G[#G[#N4$NJ@+v@+v@3|+3|+i|#i|#i|#'(@Gz$5V+'(@'(@LD+LD+LD+88$88$88$Gz$FC$FC$FC$FC$FC$FC$FC$~b#~b#>9@>9@Y{@g~@V_#V_#ZR#}7$A3%A3%|7$|7$m3&C/%88$ #+Bp+#++@f$kP%;{#KP#h(%+/#g!@g>#G)$;g$=S ,M .y .D%.D%]G%]G%^G%VH%VH%9K%9K%GD%1C%^,$^,$H%$H%$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%Nt%Nt%u1$&E Kv Kv Eu <|@<|@<|@[|@:|@:|@:|@_|@~8@~8@_|@yK z]&z]&J3&L4$sI@e{@gP@It$y[%B[%0e%'L$56+;9@m6+;Q#6a@VA+Ml+#_+;k+RR#RR#m%$J<@-:@/V+/V+X>$7)$[!$41@41@[!$7)$7)$6)$6)$W>$-'$-'$W>$6)$2r$Gt$7S$`u$Ew$d6$d6$Ql$+9@&G$'y$%G$O4&2o@M2&P4&L($_I$X2$7#&i&$O3&G<#RM#Q4&73$Q3&#i%R4&S4&T4&U4&V4&W4&1F%bB%W3&dO%X4&Y4&Z4&`4& 5&.5&+5&@5&$5&%5&E*&&5&*5&s}&=5&-5&;5&r{&>5&,5&'5&)5&Ey@;4&!5&~5&{5&)4&]5&]3+^5&/5&`m$(5&_5&:5&<5&[5&}5&|5&15&25&Go@~}.35&45&55&65&75&85&95&05&a5&b5&!=&c5&]%%c4&d5&Bd#gj#e5&f5&.t#f1#xy Lz LZ$}u mt@^0@W^#j@#RC }g b$Tj$Ei$>>+K[#M[#)]$L$+ ++9T+$ +DA$ ++gZ.$ +DA$$ +H3$M{$H3$M{$M{$MR%MR%j5&m3&J8%k5&l5&&u$25%T4$Ms$Ms$Rj$@d$Ej$^m$>b$7v$4v$^q$/v$/v$Zz$Zz$Ss@fE#OA#OA#OA#Y_#m5&Y_#HK$|0#&c$/a$Fs%Fs%/9$/9$4v$4v$4v$4v$7v$7v$7v$(a$/9$Fs%pr%pr%)]$)]$80$80$c/$c/$c/$po%O#%O#%08$08$=k$=k$=k$=k$=k$=k$=k$=k$=k$=k$=k$=k$=k$=k$=k$=k$90$90$90$90$T4$T4$T4$T4$,Z#,Z#!U#!U#Wk$Wk$M[#Wk$ln$=c$=c$>b$Sj$Sj$=k$=k$T4$T4$T4$T4$T4$T4$T4$T4$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$qr%qr%c/$c/$m3&|7$Z+$M$+L#$EU.}-+{>+ZD.6K#eU$.B#n5&p)$2g$n$#2|@@~ 5h 5h Hv@Hv@5h ;8 ~)#WC@8_@T-@36 m[#fw Xr Xr fw Yq T-@:7 >! l .q[ |^#{{ [K@K1 o5&n3&Q@$XD#h2 =[ K~#G9 p5&p3&r4&V=#q5&r5&t4&s5&t5&u5&v5&w4&w4&. y4&w5&;~ Lh+9Y+x8./D.PF+^b+Y@$PF+PF+/D./D.PF+PF++d++d++d++d++d++d++d++d++d++d+Jb#Jb#Jb#Jb#Jb#Jb#Jb#Jb#3K@3K@3K@3K@3K@3K@3K@3K@PF+Eo+w*$vv+vv+w*$Eo+Eo+OJ.w*$Eo+w*$OJ.l`.OJ.7g.'g@8g.gA gA 8g.{! be+8g.]! 8g.gA gA 8g.{! be+'> w*$&c%QU+QU+w*$Eo+2&$2&$/D./D.Jb#Jb#NZ@NZ@cT@KE#NZ@^b+^b+^b+^b+^b+^b+^b+3&$Y@$+d+^b+PF+/D.P~ .s.9Y+{! ]! 5A.5A.5A.]! ]! {! {! {! {! {! {! {! {! ^b+^b+^b+^b+^b+^b+^b+^b+PF+PF+PF+/D./D.P~ P~ P~ S}%5e%5e%]1%Fc%#u%O4%O4%]1%]1%]1%]1%]1%]1%]1%2&$0@@OU+OU+OU+M8@M8@M8@M8@5A.5A.)> )> )> 6g+QL+jy.|f.l7 cI+NM+ko.@$+=L =L ko.ko.ko.ko.ko.ko.ko.ko.]! ]! ]! ]! ]! ]! ]! ]! {! ]! ]! {! 8g.8g.", "8c 8c 8c 8c 8c 8c 8c 8c 8c 8c 8c 9c 9c 9c 9c 8c 8c 9c 9c 7c E7 E7 g~ 0' 0' 0' 0' 0' 0' 0' 0' sk uk :j.oG.tk sk uk oG.m` m` m` m` m` m` :j.:j.-H.m` oG.oG.m` l` l` :j.l` l` l` l` l` l` l` l` oG.oG.:j.m` l` l` m` m` m` m` m` m` m` m` m` d( &% S& S& S& S& S& &% &% d( d( m` m` m` m` m` m` ke 2b ;_ 2b ke le he ;_ he he he he he he he 0' $% #% #% !% 0' |% |% $% ;_ 2b )y.)y.GL.GL.]K.'K.~(.VW.VW.9, 9, G6.G6.G6.VW.VW.8v.8v.Hu+PI.PI.PI.8v.VW.VW.9, G6.G6.hY.hY.9, 9, 9, 9, 9, 9, 9, 9, }{.}{.+Q +Q ts.T}%T}%xx.T}%T}%T}%T}%T}%T}%T}%T}%9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, hY.hY.hY.hY.hY.hY.hY.hY.9, 9, 9, 9, 9, 9, 9, is@Tw@1o.[{.8'%8'%8'%T}%T}%~(.jI.jI.kI.mI.mI.kb.kb.Tl O~.r: N~.Q_ og (* l+ [U V% x!#R3$r%@v%@m0 HJ.ih wQ%>%+9G@>0@D4&x5&KP.,|&pe$s9@y5&0!+z5&5%+A5&=V.B5&i-+3N%1_+Ei$Sj$Cj$ln$''%v<@C5&D5&s1&!~%R1%=P rG hB UH }C G> ZZ }/ D6 5=$T~&~#+wO.fT.,'+sz@x=$sz@>{+>{+>{+$*+QD@HB%Eb#$*+>{+>{+%;$Eb#%;$>{+Eb#Eb#%;$>}&>}&K9#Qv#Qv#h>@h>@D2&E2&E2&E2&E2&D2&zG.7J#tz@&[@`@+u8+u8+Br+Br+Br+Br+Br+Br+Br+Br+cv$`+$`+$B@$B@$B@$B@$`+$`+$dG+B@$4Y+4Y+B@$B@$4Y+4P+Sz$r!$r!$r!$N4$NJ@+v@mo%3|+3|+'(@'(@'(@'/#-a$L~$^B+^B+^B+'(@tD$i|#LD+i|#5V+5V+Gz$Gz$Gz$tD$tD$tD$, $x=$DU.>9@g~@~}@Yx%4V+M$+}7$A3%98$|7$9T+KG%{l$f2%'(@3|+s!$_g$@f$d%%{Q#5&#;S+#)%2c#e]@ix@_R@`=#Y;$Jv .y ^G%Nt%Nt%1C%VH%VH%VH%VH%VH%VH%VH%vt -z Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%Nt%Nt%u1$u1$&E &E Kv $4@<|@<|@[|@:|@_|@_|@2|@VT@VT@1|@_|@7`@z]&L4$L4$&$$Yr 8~ O~$jh$Zf%B[%VZ$Gz$J.+Me@6]@lo@N,@l;@}1@>c$f9$f9$I#$yT#9~+w=@48+AT#[!$41@41@41@41@[!$[!$W>$W>$W>$-'$-'$W>$W>$E5&xo$;o$`u$`u$|s$|s$f|&F5&&G$'y$O4&O4&~m@2o@Zg$no$dG$oE$,Q$i&$6x#G<#RM#bY$G5&7J$y}$Fv%H5&I5&T4&N$&W4&[}&J5&K5&K5&X4&Y4&L5&M5&N5&O5&P5&Q5&R5&S5&T5&s|&U5&*5&V5&W5&X5&Y5&tu$>5&Z5&`5& 6&Ey@Ey@Bg$.6&+6&@6&e`+=%.db$$6&%6&&6&*6&=6&-6&;6&>6&,6&'6&)6&!6&~6&{6&]6&^6&/6&(6&_6&:6&<6&[6&}6&|6&16&26&d4&Ad#36&46&C_#+t#LZ$=p@G5@1r@*8@7G@j@#;z$=^$as Fu ST@W~#dw d1#xy [|@Nt%5'$|f Lv%DD%DD%ED%ED%}H%56&66&76&86&6:%%f$~U+&i#Y]$N4$C(%O]+li@s[$@h+_-+,L$5($d8$jF$jF$kF$/H$/H$%/$FO$1 @W.@W.@W.@7G+7G+w)${K@~K@DI+@#$Ab#'2+w4#'p$l~+K[#YJ#BM#ek@s[$@*+5h#j|#O4$v}%O4$5h#6X%a/$`a$ZR#2=$5h#~($>4+E3$O4$@/$@/$@/$1/%1/%}7$}7$98$9T+PX#80$Wk$Tj$,Z#>b$ln$7v$7v$^q$96&96&/v$Zz$Zz$Ss@Ss@Ss@OA#}C#OA#SA$OA#YJ#+*+&c$/a$Fs%Fs%/9$/9$4v$4v$4v$(a$qr%c/$c/$Q'$)]$/a$)]$sD$sD$rr%Q'$Q'$c/$po%po%po%08$08$S4$S4$T4$T4$90$T4$90$T4$90$T4$09$=k$09$=k$09$=k$09$09$90$90$90$90$90$T4$T4$T4$Tj$Tj$Tj$Wk$Wk$*c$L[#*c$*I$6F$5F$%u$>b$Sj$=k$=k$=k$=k$=k$=k$=k$=k$=k$=k$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$qr%qr%c/$c/$m3&KG%|7$Z+$2=$9>+cU%06&[ +ur$|6$*>#a6&Z~#q)$2g$>P %W@;! 5h }u xK }u |g _7 WC@8_@T-@36 l[#_,@y, y, _,@U-@T-@P9 ZG@q[ WE b6&Li $p /X%/X%p$$m| Q} X-@=[ Tk ]m c6&p3&r4&xt$d6&e6&t4&s5&oO#f6&g6&3^ h6&@ ]@+7W+x8.y{ .s..s.uq.uq.P~ /D.+d+^b+^b+^b+^b++d++d++d+Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$NZ@NZ@NZ@NZ@NZ@NZ@NZ@NZ@Jb#Jb#Jb#Jb#Jb#Jb#Jb#PF+^b+Eo+vv+OJ.OJ.vv+Eo+2&$OJ.w*$Eo+w*$OJ.xj+OJ.(D.Lh+8g.gA w8.be+{! be+w8.{! 8g.gA w8.be+{! be+,&+w*$&c%QU+QU+w*$Eo+2&$2&$/D./D.Jb#Jb#NZ@NZ@cT@KE#NZ@^b+^b+^b+^b+^b+^b+^b++d++d+^b+^b+PF+PF+/D.x8.x8.be+be+{! ]! ]! 5A.5A.{! {! {! {! {! {! {! {! +d++d++d++d++d++d++d++d++d++d+^b+^b+^b+PF+PF+PF+S}%S}%5e%@g%Fc%#u%O4%O4%Fc%Fc%Fc%Fc%Fc%Fc%Fc%=|$y*$PS@PS@PS@h]@h]@h]@h]@]! ]! )> )> )> 6g+^x#]$@[y+cI+cI+NM+NM+ko.ko.13+ko.ko.ko.ko.ko.ko.ko.ko.]! ]! ]! ]! ]! ]! ]! ]! {! ]! 5A.]! be+be+", "8c 8c 8c 8c 8c 8c 8c E7 E7 7c 9c 8c 0' |% |% 8c 8c 9c 9c 7c E7 E7 g~ 0' 0' 0' 0' 0' 0' 0' 0' tk oG.:j.oG.tk tk uk :j.:j.:j.m` m` m` m` m` m` -H.m` oG.oG.m` l` l` :j.l` l` l` l` l` l` l` l` uk :j.m` l` l` l` m` m` m` m` m` m` m` m` m` d( &% S& S& S& S& S& &% &% %% %% -H.-H.-H.-H.-H.-H.he ;_ =_ -_ 2b he 2b -_ he he he he he he he 0' $% #% #% !% 0' |% |% $% he 2b EK%EK%GL.GL.]K.'K.kI.G6.G6.9, 9, VW.VW.VW.VW.VW.8v.8v.Hu+PI.PI.PI.8v.8v.VW.VW.9, G6.G6.hY.9, 9, 9, 9, 9, 9, 9, 9, }{.}{.+Q +Q ts.T}%T}%xx.T}%T}%T}%T}%T}%T}%T}%T}%9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, G6.G6.G6.G6.G6.G6.G6.G6.9, 9, 9, 9, 9, 9, 9, is@Tw@1o.[{.8'%8'%[{.ts.+Q AX$AX$AX$AX$lI.lI.lI.lI.kI.6% 1% *=..h.&- Q_ L) W+ w !> km#72 i6&j .js x9 SU.cf |a h_@T7 |C@W&#,|&X&#i2@'t#6F.j6& }+.l+G-%=V.k6&PZ.KD+7)#3w+1r$sD$&c$@*+lH@l6&$$#%{#lx$x`#>b@:e [f }C :t Ok G5 |} GC.g+%7v#-N.3*+r'@>{+>{+$*+%;$$*+sz@>{+%;$lH@%;$$*+sz@>{+%;$Eb#$*+sz@P:$P:$r'@8T@B:&@$#h>@h>@h>@h>@h>@D2&D2&D2&D2&h>@zG.P.%+{@F)+}-+_ +_ +cv$cv$cv$cv$cv$cv$cv$cv$cv$B@$N#$!U+B[#B[#!U+N#$0]@0]@!U+B[#N#$=S+|=&: +0]@~Q#F[#~Q#~Q#A[#uD$8M@_g$Uj$Uj$Uj$Uj${($=i#!Q#tF%!Q#]J$]J$aT+=i#|(%7%%|(%=i#=i#=i#7%%7%%{(${($'(@88$88$88$LD+f2%f2%0T+CA$'Q#lS$m6&Z'%MR%g!&MR%^ +QB$T)@L6@O]+'(@>/#rX+@f$3&#oZ.s'@KP# /@`F@Uo$j4#-z$jQ -P -P Y;$],$^,$1C%-z -z -z Pv Pv Pv t)&yz%^G%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$vR@$4@$4@[|@:|@_|@_|@2|@8+%zd$~M 1|@yK 7`@%A@%A@U^#W^#[f +-#bL#jh$$I$n6&M~$3_+T6#}Y+j-$18+km+:a@b0$Ds$n@$$u$`6@v^@48+48+BT#41@[!$[!$[!$[!$41@41@-'$W>$W>$W>$W>$W>$W>$Et$xo$;o$:n$:n$Et$Et$f|&F5&&G$I*$$#$$#$D+$D+$uU#P4&ab#5H$RC$@-$,#$7&||%&v$&R$x[#F!$l[+@*+D)+W,@U`$B)+!U#Dj$/'$W.@W.@F@@F@@F@@1 @1 @1 @1 @~K@~K@~K@6G+6G+DI+DI+WK+hX+Z&+'2+cH##>#yR#S)@BM#@h+CU.)m+f*$IH@/i@)2+EU./k#EU.fh$L~$n&%Ny$8r$BA$M@%}(%!Q#L~$=i#aT+x[#x[#z[#]J$aT+'/#Gz$~}@Yx%QB$a/$N@%km$A0%rr%)]$80$7_%6v$^q$96&^q${m${m$*c$A4#A4#Ss@Wy$}C#Wy$Ss@D#$|0#&c$/a$Fs%Fs%pr%/9$(a$(a$(a$80$c/$po%po%oo%)]$)]$sD$sD$Q'$Q'$Q'$oo%c/$po%O#%O#%08$08$`.+`.+09$09$4($09$4($09$4($09$bv$90$bv$90$bv$90$bv$bv$bv$bv$bv$90$90$90$T4$T4$Sj$Tj$Tj$ar$Wk$*c$*c$*c$>H$6F$5F$%u$=c$>b$Sj$Sj$Sj$Sj$Sj$Sj$Sj$Sj$Sj$Sj$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$ar$Wk$Tj$Tj$c/$oo%KG%|7$YX._[%;{+-n#f<#~Q#M~$;v$jq+=C+N-%Jt$T~# <@;! 8v 5h }u }u 8v U:@_C@aY ~)#n| l[#VH fw fw VH U-@c2 >! vG ^(#q4&,7&'7&'7&)7&XQ@m| Qw#T-@X-@=[ C,#!7&p5&0>#^: ~7&{7&]7&^7&u4&/7&AX%(7&Az$h6&G@ u=.u=.y{ y{ y{ .s.uq.P~ P~ P~ +d++d++d++d++d++d++d+^b+Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$KE#KE#KE#KE#KE#KE#KE#KE#NZ@NZ@NZ@NZ@NZ@NZ@NZ@^b++d+Eo+w*$OJ.OJ.w*$Eo+=|$vv+Eo+2&$w*$OJ.l`.OJ.(D.9Y+8g.w8.8g.{! {! 8g.gA be+8g.w8.8g.{! {! 8g.8e.w*$&c%QU+QU+w*$Eo+2&$2&$/D./D.Jb#Jb#NZ@NZ@cT@KE#NZ@^b+^b+^b+^b+^b+^b+^b+/D./D.PF+PF+^b+^b++d+'g@y{ w8.8g.8g.be+{! {! ]! {! {! {! {! {! {! {! {! +d++d++d++d++d++d++d++d+3&$3&$3&$Y@$Y@$+d++d++d+@g%@g%@g%@g%@g%@g%@g%@g%Fc%Fc%Fc%Fc%Fc%Fc%Fc%=|$y*$PS@PS@PS@h]@h]@h]@h]@8g.be+i~ Yt.)> )> .d+)> 8}.ko.ko.NM+NM+cI+cI+l7 ko.ko.ko.ko.ko.ko.ko.ko.]! ]! ]! ]! ]! ]! ]! ]! be+]! Ea+5A.{! be+", "8c 8c 8c 8c 8c 8c 8c g~ g~ E7 9c 8c |% $% $% 8c 8c 9c 9c 9c 9c 7c 7c 0' 0' 0' 0' 0' 0' 0' 0' uk :j.m` m` oG.uk oG.m` :j.:j.:j.m` m` m` l` l` -H.m` oG.oG.m` l` l` :j.m` m` m` m` m` m` m` m` tk :j.-H.R_ -H.m` m` l` m` m` m` m` m` m` m` d( &% S& S& S& S& S& &% &% %% %% -H.-H.-H.-H.-H.-H.2b -_ =_ -_ 2b 2b ;_ =_ he he he he he he he 0' $% #% #% !% 0' |% |% $% ke 2b L/.L/.GL.)y.{K.'K.AX$hY.G6.9, 9, VW.8v.8v.VW.VW.VW.8v.8v.8v.8v.Hu+VW.VW.VW.VW.VW.9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, ts.ts.ts.ts.T}%T}%T}%T}%T}%T}%T}%T}%T}%T}%T}%T}%VW.9, 9, G6.G6.9, 9, VW.9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, Tw@1o.[{.[{.[{.Tw@+Q }{.kI.kI.jI.~(.M/.x3&6e.6e.jI.`d#^q%(j.uk %% 5% &- Y_ ui I$ [. *+ s)@*g._7&A9 x9 f +v[@|a W}%:c Tx@[A.p3$b]+D'#uL.VZ.|j+9|%8#+9#+{#+AW.PZ.KD+zp#h3#>i#tp%T)@e!@3&#Nj#`F@m8 8~ >b@:e :e [r@jl ro 9Y |} GC.g+%7v#-N.AG.Eb#>{+%;$Eb#Eb#$*+sz@sz@$*+Eb#Eb#$*+>{+>{+%;$Eb#%;$E_+:7&c#+6_&[-@^R@^R@@$#@$#h>@h>@h>@h>@h>@h>@Qv#Qv#+{@+{@F)+}-+_ +cv$cv$f<#cv$cv$cv$f<#f<#f<#{f#{f#N#$!U+4P+ .@ .@4P+!U+N#$!U+4P+4P+!U+=S+|=&|=&=S+C[#C[#A[#A[#A[#uD$8M@_g$aT+aT+|(%|(%7%%=i#!Q#tF%%Q$%Q$n>#z[#[3%pl%[3%8R+z[#pl%pl%8R+8M@_g$_g$Uj$'(@tD$Gz$Gz$FC$)=%)Q#o)%1/%<7&nM%!1&[7&MR%MR%^ +A1#g~@']$2|+, $)2+Br+Bp+}-+2I.G)+[ +-{#L+@]<%h%%.J$U=%x'%8E$OO$e6%@I$^,$=E Jv o($Ov Ov nr%FG%t)&^G%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Kv Eu vR@$4@[|@:|@_|@1|@zd$lF%W7@~M _|@yK $p@%A@T^#V^#:e Y~#G&#vC$A'$,f#eX#.{%P]+z9#['+Y<@28+YH@=L$od$Cs$>G$`6@v^@x=@48+BT#[!$7)$7)$7)$7)$[!$41@-'$W>$6)$6)$6)$6)$W>$Et$Sp$7S$)r$)r$E5&Et$Ql$C&%}7&I*$$#$%9$;k@;k@$9$-0$|7&dG$n6$@-$,#$8p#YI#8S#S1$63$Ug$1[$17&27&Au%!@&F)&fB%37&47&~Y%&s%57&67&]O%T:&77&87&]-&97&07&a7&b7&c7&d7&e7&f7&g7&h7&i7&j7&k7&>5&l7&rl$qY+)5&m7&n7&o7&p7&q7&n{&qu$r7&s7&t7&l-@oV hh.u7&lV.;4.8E.v7&w7&x7&y7&z7&A7&B7&C7&D7&E7&F7&G7&H7&I7&%7&c`%gj#J7&K7&L7&(M C@$G5@=p@=p@W~#7G@6G@as bs bs Nw !{&M7&N7&(%%+p@~m#e1#WA w~$~@$KO%O7&P7&Q7&F:&R7&||%S7&1|%0l%n&%@B$@/$ZR#km$K[#,Z#,L$&6$:8$_8$iX+G@@7&@Tm#X/$X/$DO@F@@W.@1 @BM@BM@BM@hF$|T+v,$v,$Z&+:8$N;$*,$U,+}f+O+#ek@;t@&a@vi+C'#;I@T7&bR.n[+kP%d%%5Y+Xo$:V#:G$ty%8D$}|%Zx$}|%]F$IS$]F$IS$&i#EB%-r%iT$]-#F)$0&%~Z#4F$c7%eN$9r$rV$V_#Ar+ZR#89$L$+99$y7%5v$4v$4v$4v$*c$*c$*c$A4#A4#A4#Wy$6d$A4#=7$k %/a$/a$/a$/a$)]$)]$Q'$Q'$Q'$Q'$po%po%po%oo%(a$)]$)]$sD$80$Q'$Q'$Q'$c/$c/$K$+O#%O#%O#%@6$@6$%K$%K$%K$%K$%K$%K$%K$%K$bv$bv$bv$bv$bv$bv$bv$bv$bv$bv$bv$bv$90$90$90$T4$=k$=k$Tj$Tj$ar$Wk$Wk$ar$5F$5F$%u$%u$=c$>b$>b$Sj$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$ar$ar$Wk$Tj$Tj$c/$po% I%KG%9T+# +A2$9>+9M@!Q#n>#Fi$IP#`f%=C++-#E&#&W@+9 ]|@;8 8v 5h |g O9 ~)#aY ~)#n| =! /,@VH VH /,@R} c2 8_@VE WE /X%U7&Tp '7&KE+/} (} 8j#T-@-[ =[ P@$%[ *)#V7&I_ Ig W7&r5&X7&fZ#/7&AX%Y7&3^ 3^ @+ Z7&w5&Lh+Lh+Lh+Lh+^b+^b+^b+^b++d++d+Y@$Y@$Y@$+d+PF+PF+Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$Ae+Ae+Ae+Ae+Ae+Ae+Ae+Ae+KE#KE#KE#KE#KE#KE#KE#+d+=|$2&$Eo+Eo+Eo+Eo+2&$=|$Eo+=|$=|$2&$vv+l`.OJ.7g.9Y+w8.w8.8g.{! {! 8g.gA be+w8.w8.8g.{! {! 8g.8e.w*$&c%QU+QU+w*$Eo+2&$2&$/D./D.Jb#Jb#NZ@NZ@cT@KE#NZ@^b+^b+^b+^b+^b+^b+^b+uq.P~ /D.PF+^b++d+Y@$3&$x8.8g.w8.w8.w8.8g.be+{! {! {! {! {! {! {! {! Lh++d++d++d++d++d++d++d++d+3&$3&$3&$Y@$Y@$+d++d++d+]1%]1%]1%@g%5e%5e%S}%S}%Fc%Fc%Fc%Fc%Fc%Fc%Fc%=|$0@@OU+OU+OU+M8@M8@M8@M8@w8.8g.i~ Yt.)> Yt.a(+Yt.z<.=L @$+ko.NM+cI+l7 }f.ko.ko.ko.ko.ko.ko.ko.ko.{! {! {! {! {! {! {! {! 8g.{! 5A.5A.{! be+", "8c 8c 8c 8c 8c 8c 8c 7c 7c 9c 9c 8c 8c 0' 0' 9c 9c 8c 8c 8c 8c 0' 0' 0' 0' 0' 0' 0' 0' 0' 0' :j.m` -H.l` :j.oG.m` -H.oG.:j.:j.:j.m` l` l` l` %% d( vk vk d( ~% ~% +h.+h.+h.+h.+h.+h.+h.+h.+h.N6 +h.4% 5% %% d( d( ~% %% %% %% %% %% %% %% %% &% S& S& S& S& S& &% &% ~% ~% l` l` l` l` l` l` m` -H.R_ -H.m` m` l` R_ -H.-H.-H.-H.-H.-H.-H.%% %% &% &% ^* d( ~% ~% %% oG.l` x3&x3&'K.mI.)K.'K.jI.WW.WW.WW.WW.WW.WW.WW.1% 1% 1% 1% 1% WW.WW.WW.WW.WW.1% 1% 1% 1% 6% 6% WW.WW.WW.WW.WW.WW.WW.WW.~(.~(.~(.~(.jI.jI.jI.jI.jI.jI.jI.jI.jI.jI.jI.jI.6% 1% n` _j._j.n` 1% 6% WW.WW.WW.WW.WW.WW.WW.WW.6% 6% 6% 6% 6% 6% 6% 6% WW.WW.WW.WW.WW.WW.WW.9, Tw@1o.[{.[{.[{.Tw@}{.}{.kI.kI.jI.~(.M/.x3&x3&6e.tN%`7& 8&kI.lI.*_ *_ l` lo.9c `+ Y+ V n .8&+8&@8&P~&E6 4k+u[@8m =z.U&#U+&q3$&@#]0%|-+;W+*N.#8&$8&%8&&8&*8&AW.'`+%4%IC$-{+tD$Br+tL.={# /@2c#bL#8~ `:@:e :e 1A jl ro -l /T.6=$q'+6F.-N.AG.Eb#sz@-n#;V.;V.N/+tz@tz@;V.4<+AG.;V.7J#N/+AG.4<+;V.N/+=8&-8&c#+;8&-q$;1#@$#@$#Qv#Qv#Qv#Qv#Qv#Qv#r=#Qv#F)+F)+}-+_ +cv$f<#f<#{f#cv$f<#f<#f<#{f#_g$_g$_g$B[#5Y+Fi$:V#:V#Fi$5Y+6=%6=%-W+Fi$5Y+E[#;T. @$6=%@f$@f$C[#d%%A[#A[#uD$uD$pl%pl%]J$aT+|(%aT+=i#!Q#`J$%J$x[#Sz$z[#~Q#z[#A[#Y]$Y]$Sz$~Q#d%%C[#@f$~f#]J$=i#=i#=i#<>%7R+7R+.I%oM%>8&FJ%,8&hZ.'8&)8&^ +Z]$']$ZR#O:+O:+2|+>9@.+@)2+u8+ #+YJ.w<@C[#Sz$T-$%l+jq+F_#=v$bL#TL$OO$v~$!J as o($@}$nr%ZH%Z!&FG%^G%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%&E &E Kv vR@$4@[|@:|@}|@zd$lF%!8&W7@1|@_|@$p@$p@sI@SC UH [f 1A $-#;@#>g$`w #{#pS$L6@4h#~8&z=@),&& $Aw${8&jQ$qR$>:@a{$a{$AT#7)$6)$W>$W>$6)$7)$[!$W>$6)$7)$[!$[!$7)$6)$E5&Gt$#w$ v$ v$E5&|s$(;$Z0@}7&I*$%9$#8$^m@^m@Oh%uU#]8&!K$X2$@-$,#$O3&^8&RM#/8&(8&_8&}3$:8&Vw%<8&$i%[8&hG$}8&|8&| &6{&wI%v*&18&28&!R%3&&M1&38&38&48&58&68&LS%-%&%U%78&88&98&=%.%@+08&!5&a8&ul$3k$b8&,s$c8&&e$Pv$g}&d8&e8&f8&#:&. @1M.g8&B@.h8&i8&Bj#j8&k8&l8&m8&oG#nG#n8&o8&p8&q8&r8&s8&t8&u8&v8&zd#w8&46&&7&L7&V7@%0@Lz Lz G5@1r@:C@6G@=^$as as 'Y$!J%x8&x8&y8&EV#]0#kI@%W@6E$dO$OW$z8&A8&B8&!}&C8&ZR$D8&ms$'Z#4V++*+6c#''%=k$,p$b8$8e#pZ@)K@CO@DD+be#)~%'8%Z]%t!%k#$6$@6G+BM@}{#pw$e;%Bb#}/+}/+/-+#>#WX..B$hB@3W.ek@vD@53@,t@aR.H)+1-+QP.1v@1A.to@rm#rm#)Q+.6$b$>b$>b$>b$=c$=c$=c$=c$=c$=c$=c$=c$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$ar$)g$4d$Tj$Tj$Sj$=k$O#%po%0$$$ + l#x1#6X%kS$kS$_g$:g%RN#Z^#;@#&S ~~#ZA fw xn#m[#|g |g O9 .9 _C@~)#n| xn#+' (,@(,@+' T-@c2 >! VE %p E8&U7&U7&KE+$p /} VE >! :7 Ti g< {o ~m F8&h_ ~: oa G8&$'#H8&H8&/7&f6&I8&J8&Az$w G(.oh.9Y+9Y+Lh+Lh+^b+^b+PF+PF+^b++d++d+Y@$+d+^b+/D.P~ +d++d++d++d++d++d++d++d+3&$3&$3&$3&$3&$3&$3&$3&$Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$2&$=|$=|$u3$u3$=|$=|$2&$=|$u3$x*$=|$w*$vv+vv+8' x8.w8.w8.be+]! ]! 8g.`Y 8g.w8.w8.be+]! ]! 8g.9e.w*$&c%QU+QU+w*$Eo+2&$2&$/D./D.Jb#Jb#NZ@NZ@cT@KE#NZ@^b+^b+^b+^b+^b+^b+^b+/D./D./D.PF+^b++d++d++d+;~ Lh+9Y+x8.x8.x8.9Y+Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh+Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$+d++d++d+^b+^b+^b+PF+PF++d++d++d+^b+^b+^b+PF+PF+Y@$Y@$Y@$Y@$Y@$Y@$Y@$u3$%.@]%@]%@]%@ZW+ZW+ZW+ZW+8g.be+Yt.6g+6g+6g+.d+Yt.z<.@$+@$+13+ko.ko.NM+NM+ko.ko.ko.ko.ko.ko.ko.ko.{! Lh+Lh+Lh+Lh+Lh+Lh+Lh+.s.9Y+'g@;~ Lh+x8.", "8c 8c 8c 8c 8c 8c 8c 8c 8c 8c 8c 9c 9c 9c 9c 9c 9c 8c 8c 0' |% |% $% 0' 0' 0' 0' 0' 0' 0' 0' m` l` R_ -H.m` :j.l` R_ oG.oG.:j.:j.m` l` l` l` %% d( vk vk d( ~% ~% +h.vk vk vk vk vk vk vk vk N6 +h.5% f% %% d( d( %% %% %% %% %% %% %% %% &- S& S& S& S& S& S& &% &% d( d( m` m` m` m` m` m` oG.m` -H.l` :j.oG.:j.l` -H.-H.-H.-H.-H.-H.-H.%% %% &% &% ^* d( ~% ~% %% uk l` x3&x3&'K.mI.)K.'K.^q%6% 1% WW.WW.n` _j._j.6% 1% 1% WW.WW.n` _j._j.n` WW.WW.1% 6% 6% i% i% WW.WW.WW.WW.WW.WW.WW.WW.`d#`d#^q%^q%~(.jI.jI.kI.jI.jI.jI.jI.jI.jI.jI.jI.6% 1% n` _j._j.n` 1% 6% WW.WW.WW.WW.WW.WW.WW.WW.i% i% i% i% i% i% i% i% WW.WW.WW.WW.WW.WW.WW.9, Tw@1o.[{.[{.Tw@ve.}{.V>.AX$AX$AX$AX$lI.lI.lI.'K.[z.K8& 8&)_&4U$x3&<].Ek$)y.-_ T_ 3c 2{ 34 ;5 ]$ $$ gd%_7&1r #;@5|@j|@{<@7d m2$s@+]0%9x$+B%~.$L8&M8&N8&O8&P8&Q8&|Y.AW.R8&0)$u8+06&}H#@{@zX@ck#Pz$3h `:@Zi@Zi@1A %S kB@-l 66+6=$h +6F.-N.;V.GB@,{+&[@7J#N/+N/+7J#N/+4<+(g%4<+;V.N/+;V.4<+4<+AG.M4&=8&S8&-8&;8&-q$;1#@$#@$#Qv#Qv#Qv#Qv#r=#r=#r=#tz@}-+}-+_ +cv$f<#f<#{f#{f#f<#f<#{f#{f#_g$8M@8M@~f#5Y+Fi$:V#Iy$Iy$:V#Fi$5Y+5Y+-W+#f$Fi$-W+5Y+-W+#f$D[#@f$C[#F[#~Q#Sz$~Q#~Q#x[#z[#[3%aT+aT+aT+=i#aT+%J$Y]$Sz$Xo$~Q#F[#F[#d%%~Z#iE$i($}6$>I@4&#s=#rK@~Q#z[#hs$]J$y]%=i#3P+_T#T8&n)%e'%&D%U8&V8&W8&]I$6X%4V+A1#Z]$V_#V_#~}@qX+Gz$'(@)2+)2+u8+Br+Wt+`R#6Y+X8&48%8e%2F$9E$Pf%-z$v~$wt Cu @}$nr%ZH%Z!&FG%^G%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%GJ%GJ%Nt%u1$&E Eu vR@<|@[|@}|@zd$lF%!8&W7@~M 1|@r[@$p@/t 5F ^0@UH En kl =0@=0@#p@Mu kA%tx$~)&C]+tk+.s+= $!O$jR$0S$qR$>:@4(@4(@AT#7)$W>$-'$-'$W>$7)$[!$6)$7)$[!$41@41@[!$7)$2r$cs$.O${x$ v$2r$|s$h>$B]&}7&%[&%9$#8$!k@^m@Uu@$9$Ps@ab#*N%@-$_S%O3&xJ$o6&pA#tx#Y8&2[$84$Z8&cH$`8& 9&.9&+9&rS%$s%@9 &I.&$9&%9&&9&*9&=9&9I$-9&M]&J'&G&$;9&>9&H'&,9&'9&)9&!9&3&.~9&><&5-&Bg$C'&Qh${9&]9&5W#5A$^9&/9&(9&_9&-C w7.;-.AI#:9&<9&[9&}9&|9&19&29&39&49&59&69&79&89&Em@r8&99&L,&09&c`%c`%5C#a9&b9&L7&%0@+t#dw dw LZ$=p@$p@5G@=^$=^$=^$Ux c9&d9&e9&+D%$L@=p@2|@4z+.N$YR$f9&g9&h9&i9&j9&VY$CB$ns$&c$A0%I3$j %90$,p$b>%WK+zM@Kn$7s%T)%^)%r!%)~%k9&l9&Z]%r!%DD+7G+CM@u_%37$Bb#{ +Cb#dH#s8+dk@Lu@^i@Nu#sy#CU.vi+ET#G!#(B+QP.gk@Tq@{c V2@]*@X7@1L.l>@X]$X]$l>@1L.F(@PM.1L.1L.l>@l>@X]$f]@f]@h>#=l ({+({+p!$q<++/@lx$8e+kA%ds$~-#}6$G)+~T%__%7J#]f#2=$M$+89$}7$98$km$rr%)]$*c$]m$]m$Cj$Cj$Cj$5d$m9&~m$0r$Fs%/a$km$PX#PX#I3$I3$3w+3w+po%c/$c/$c/$^q$pr%4v$4v$(a$(a$qr%qr%8v$8v$8v$}0$VR$17$17$j3&Js$Js$Js$Js$Js$Js$Js$Js$Rb$Rb$Rb$Rb$Rb$Rb$Rb$Rb$qn%qn%bv$bv$bv$bv$90$90$N)$%*$T4$T4$,Z#,Z#,Z#Tj$Sj$Sj$>b$>b$>b$>b$>b$=c$=c$=c$=c$=c$=c$=c$=c$=c$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$>b$ar$)g$4d$Tj$Tj$Sj$=k$O#%O#%U@+$W$Y(%|7$<7&o)%CA$U-$(>$`>$ck#|w$])#Dn ZA fw ,p =! (d@;8 O9 .9 ~)#.9 n| xn#+' /,@/,@+' T-@c2 >! VE %p E8&U7&U7&,7&'1 q[ ZG@wa '8 Ti _: R: (n c< n9&o9&p9&q3&G8&q9&r9&s9&t9&u9&v9&4/ P G(.Kh+.s.y{ y{ x8./D.P~ P~ uq.PF+^b++d+Y@$+d+PF+P~ uq.+d++d++d++d++d++d++d++d+3&$3&$3&$3&$3&$3&$3&$3&$Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$2&$=|$x*$X@$X@$x*$=|$2&$u3$X@$X@$u3$Eo+vv+w*$8' x8.w8.w8.be+]! ]! 8g.`Y 8g.w8.w8.be+]! ]! 8g.9e.w*$&c%QU+QU+w*$Eo+2&$2&$/D./D.Jb#Jb#NZ@NZ@cT@KE#NZ@^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+PF+PF+PF+PF+y$$6j+'g@9Y+9Y+9Y+Lh+'g@Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh+Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$PF+PF+PF+/D./D./D.P~ P~ Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$y*$f!+V!+V!+V!+f!+f!+f!+f!+be+{! 6g+]$@jy.]$@Fu#)> 8}.13+13+13+@$+@$+@$+@$+ko.ko.ko.ko.ko.ko.ko.]! Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh+ll.x8.'g@'g@9Y+y{ ", "E7 7c 7c 9c 9c 9c 9c |% 0' 8c 8c 8c 8c 0' |% 0' 0' 8c 9c 7c E7 g~ dd 9c 8c |% $% $% 0' 9c 7c :j.:j.:j.m` m` m` l` l` l` :j.uk oG.m` -H.-H.l` v% ^{ !1.F7 F7 !1.^{ u% l:.^* &- &% !1.l:.!1.&% ^* !1.l:.^* &- Q_ ^{ &- Q_ Q_ ^{ ^{ &- &% &% ^* S& u& R% u& S& S& ^* l:.d( ~% R_ -H.m` :j.l` -H.Rl _j.WW.n` Tl Rl (j.WW.6% 1% 1% WW.WW.n` _j.Ml Lv.N~.Y^ *- Lv.Ml O~.r: WW.WW.jI.jI.jI.jI.tN%jI.lI.m` m` l` l` -H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.l` m` :j.:j.m` l` R_ *_ :j.l` R_ R_ -H.-H.R_ af.M/.M/.M/.<].<].<].'K.'K.'K.'K.'K.'K.'K.'K.'K.'K.uk m` R_ -H.m` :j.-H.g% g% R_ l` -H.R_ R_ -H.m` *_ R_ -H.m` m` -H.R_ *_ R_ -H.-H.l` l` m` m` _j.8'%{N@8'%8'%8'%8'%xx.xx.jI.jI.jI.jI.'K.'K.'K.'K.w9&'7#05@;4#!K.)K.z^.M/.L/.EK%!i+>_ >_ != wk Wl ]+ j s)@P<.A~ 5|@SU.yJ.>h@zn@v4$xg@uz@=@#%I$/{+x9&y9&z9&A9&dT.5<+FW.m]&B9&ER.Z_@]Q.bF.10 Cu+@-#3h eP@wb ~~#%S 7V ep |} /~.0F.C9&D9&3F.(g%r1&D_+&[@+{@+{@m]&f5%B9&eT.eT.E9&eT.f5%m]&P.%+{@P.%zG.[-@;1#;1#F9&F9&;1#[-@[-@R]+Qv#K9#B:&E_+r=#4g@u8+}-+|=&: +=S+0]@N#$!U+!U+B[#B[#B[#B[#B[#B[#B[#B[#5Y+5Y+Fi$Fi$Fi$5Y+E[# @$E[#6=%6=%5Y+-W+-W+Fi$Fi$IB$IB$IB$IB$-W+-W+-W+-W+4P+4P+Lt$Lt$Lt$Lt$hs$hs$4P+-W+#f$!f#:V#5O#F2&;W+{Q#S^$g#@@l+1j+HR.HR..K.HG.x<@1I.5c#z'$`+$N=%3Y+d>&M=& Y.)X$G9&a,%G9&a,%L{$L{$L{$L{$L{$0T+0T+FC$Y{@>9@>9@>9@>9@>9@>9@)2+Xx#U.$H9&Ym+W&&I_#Np#1c#+-#,M =E VH%Ov nr%I9&!{&^G%u1$&E &E u1$GJ%pM%f`%Nt%*L%pM%*L%u1$&E u1$GJ%u1$Nt%GJ%*L%*L%GJ%Nt%u1$Kv &E &E Kv Eu $4@<|@||@J9&K9&q)$Ad$n$#}|@>b@:C@W^#SC ^0@e{@2k }C }C 2k W$ab#i#$1;$Ci%{E%N9&^W#`I#/8&O9&WS$XS$Y7$P9&Q9&R9&)t%#s%hG$)Y%j#&vI%$~&4{&bV%S:&S9&!R%)%&T9&U9&V9&W9&Cp$X9&Y9&Z9&`9& 0&.0&+0&#%&7A$@0�&$0&Rh$%0&Qv$&0&*0&=0&-0&;0&>0&@J.,0&A@.'0&)0&!0&~0&{0&]0&^0&/0&(0&_0&_0&:0&<0&[0&}0&|0&10&20&30&40&'P 40&b9&iF%50&+t#[c#e1#xy yK ST@Cu Jv =^$;z$bs yz%+D%Az%Mv Vx QC Z;$|H%60&f_&70&80&90&00&a0&b0&II+gZ.~}%~}%T4$90$qw$5($iX+5Z+AM@Kn$$l%S)%^)%Z]%'8%X6$X6$9&@9=@6$@7G+/'$b>%'2+{ + *+1|+n~+W_#@*+V##9!$!=#U_#Nk$sm#(-#h|#Q&#;,$./@l>@@(+CD Sj R} ZA aY -C+`;$h*$lI#c0&c0&-C+L-$h*$.X h*$L-$n)$*W@H0 _t -c 6, En :g fp $y q<+o1#16$[H$ds$iT$_V#p%$tL.Z@+]f#c!$c!$5h#ZR#}7$/a$sD$80$Tj$,Z#=k$09$@d$Di$Fs%k %/a$&c$&c$km$rr%PX#oo%oo%oo%Q'$c/$c/$c/$c/$4v$4v$&u$7v$7v$7v$8v$8v$=u$=u$=u$=u$-u$Is$Is$Is$im$im$im$im$im$im$im$im$c8$c8$c8$Rb$ ^$ ^$c8$;J$qn%qn%qn%qn%bv$bv$bv$90$09$90$%*$dN#%*$T4$Tj$]m$Sj$Sj$Sj$Sj$Sj$Sj$Sj$Sj$=c$=c$=c$>b$>b$Sj$Sj$Sj$>b$>b$>b$>b$>b$>b$>b$>b$=c$>b$Sj$=k$=k$>b$%u$CO#Di$N[#Di$Di$Sj$Rj$Rj$Rj$VR$O#%] + ++|7${l$lS$9M@IG.83@Pp NM.>n#tK t/@3' fw fw 8v |g /d@ 9 lI@O9 7, xn#7, +' (,@/,@T-@8j#q[ Jj d0&K1 [K@b6&b6&[K@sd#Bn@Mc Sg Q9 !o .4 e0&31&f0&I; I; r3&g0&u2@Jm h0&i0&s3&F/ I8&B. G(.Kh+y{ y{ x8.x8./D.PF+PF+PF+P~ P~ /D.PF+^b++d+Y@$Y@$Y@$ F. F.Y@${y%+d++d+{y%%' %' %' %' %' %' %' %' u3$x*$X@$x*$=|$2&$=|$u3$u3$u3$u3$u3$u3$u3$u3$u3$Eo+Eo+Eo+Eo+Eo+Eo+Eo+8' Lh+{! {! {! {! {! {! {! 8g.8g.8g.be+{! ]! ]! M8@=|$Pw%Pw%;~@Eo+w*$w*$w*$/D.PF+NZ@KE#KE#NZ@BX@3K@3K@/D.PF+PF+^b++d++d++d+Y@$Y@$+d+^b+PF+/D.P~ P~ PF+PF+PF+PF+^b+^b+^b+^b+uq.uq.P~ /D.PF+PF+^b+^b++d+PF+/D.PF+^b++d+^b+/D.^b+^b+^b+^b+^b+^b+^b+^b+Lh+9Y+x8..s..s.y{ 9Y+Lh+6j+;~ ;~ 'g@Lh+Lh+9Y+8' M8@OU+OU+OU+M8@M8@M8@M8@]! ]! )> )> )> )> .d+)> 8}.13+13+13+13+13+13+13+ko.NM+cI+cI+NM+13+=L w8.Lh+PF+/D.P~ /D.^b+Y@$3&$'W+^b+uq.uq.PF++d+", "E7 7c 7c 9c 9c 9c 8c 8c 8c 9c 7c 7c 9c 8c 8c 0' 0' 8c 8c 9c 7c 7c E7 9c 8c 0' |% |% 0' 0' 8c :j.:j.:j.m` m` m` l` l` -H.:j.uk oG.m` l` l` d( Q_ &- ^* l:.l:.^* &- Q_ l:.^* &- &% !1.l:.^* &% ^{ &% ^* ^* &- &- &% !1.&- &- &- &% ^* ^* ^* !1.[! C& u& u& S& [! &% !1.d( ~% R_ -H.m` :j.l` -H.(j.n` 1% WW.(j.Tl _j.WW.1% 1% 1% 1% 1% WW.WW.O~.Lv.N~.Y^ *- Lv.Ml O~.r: WW.WW.jI.jI.jI.jI.tN%jI.lI.m` m` l` l` -H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.l` m` m` :j.m` l` R_ *_ m` -H.*_ R_ l` l` R_ *_ M/.M/.M/.<].<].<].'K.'K.'K.'K.'K.'K.'K.'K.'K.'K.:j.-H.*_ R_ l` m` -H.*_ *_ -H.l` l` -H.R_ l` :j.*_ R_ -H.l` l` -H.R_ *_ R_ -H.-H.-H.l` m` m` n` 8'%{N@8'%8'%8'%8'%xx.xx.jI.jI.jI.jI.'K.'K.'K.'K. 8&'7#[z.05@)K.4U$z^.j0&L/.EK%!i+!i+2I%oj wk oj #% >% w M; k0&D1 FQ++I.2)@_L.yR.**+PP.Qq@|6$n`%l0&m0&n0&BR%o0&p0&G4&7I.r#$~#+~N.6=$1} U4+XC%n{ n)$&W@~~#~~#n{ 0_$p<+D6 CO.AO.ud@6I.3*+DW.sY$CW.p~+P.%m]&m]&f5%B9&B9&eT.eT.B9&f5%m]&P.%+{@+{@__%-N.;1#@$#F9&F9&;1#^R@[-@Q]+ka@R]+Qv#R]+ka@P]+s!$w<@N#$N#$!U+B[#4P+ .@ .@w[#w[#w[#w[#w[#w[#w[#Fi$-W+Fi$#f$#f$#f$Fi$5Y+6=%5Y+5Y+-W+-W+-W+-W+Fi$5O#IB$IB$IB$IB$-W+-W+-W+-W+4P+4P+Lt$Lt$Lt$Lt$hs$Lt$Fi$T-$T-$5O#IB$S^$;W+g#@pZ.&>#!%@!%@%++%++%++v8+@K.+K.+K.+K.+Y.nZ.q0&q0&r0&7u%t.&8W.d>&_y%_y%98%A@$A@$A@$f2%A@$f2%f2%f2%WS@Y{@Y{@Y{@Y{@Y{@Y{@88$3Y+dG+lZ.yD%Th%1c%XJ$_8%W{$ -#-P =E Jv o($zz%Y!&Xw Nt%u1$u1$Nt%GJ%pM%g`%Nt%*L%pM%*L%u1$&E u1$GJ%u1$Nt%GJ%*L%*L%GJ%Nt%u1$&E &E &E &E Kv vR@$4@%2@,.%1g$'f$Ad$m$#}|@r[@r[@SC ^0@^t ^t 2k 6, 6, {T#%A@^t ])# n+ZJ$<7&s0&d2+i8$@s+6_$X=&t0&2s%-<$yy$41@41@41@[!$[!$7)$7)$7)$41@7)$6)$6)$[!$41@[!$2r$Sp$$w$)r$ v$2r$Et$Ql$C&% !%M9$#8$;k@D+$-0$no$ `# `#dG$n6$kw%D@%rL$@C$I+#%9%q]$^R$>-$u0&v0&P9&w0&_ &wM%#~&{@&{@&x0&6{&y0&v*&dG%z0&28&vS%A0&B0&C0&D0&E0&Hu%F0&G0&H0&H'&I0&M*@J0&K0&L0&M0&&[$N0&-e$O0&f:$P0&Q0&R0&S0&T0&U0&a`.B@.Aj#V0&{0&W0&X0&Y0&Z0&`0& a&.a&z:@+a&@a&#a&$a&%a&&a&R8#w8&*a&xR$K7&=a&a$$gS$V7@+t#xy =p@}A ^Y@Jv Jv as =^$bs iy%o($o($Jv =E -P =o%YR$86&-a&;a&=g%>a&JS$HT$,a&6R+=k$,p$,p$c9$d9$lF$zM@AM@W.@F@@fm$r$%^)%^)%Z]%'8%9=@^K@7$@&n%{K@-,$bN#j[+||+7)#5h#Y{@'(@,/#mo%!~#sz#sz#.{%SN#t1@^l$tc+b$>b$>b$>b$Sj$Sj$=k$=k$>b$>b$>b$>b$>b$>b$>b$>b$=c$>b$Sj$Sj$Sj$=c$%u$5F$Di$N[#Di$S5+Rj$Rj$%K$%K$VR$K$++6$KG%L$+A3%<7&Gz$[`#j>@B(@./@|##Nz Ne G> fw fw 8v |g /d@ 9 lI@O9 /7 xn#n| 36 +' +' c2 8j#q[ %p q4&%p W] [K@`{ W] sd#xb u/@Sg Q9 !o .4 C4 !a&f0&O8 O8 ~a&{a&u2@Jm AX%F^ u9&]a&(7&C. Z7&y4&y{ y{ y{ x8./D.PF+PF+PF+P~ /D./D.PF+^b++d+Y@$Y@$'W+/D.P~ 3&$B#@Y@$Y@${y%%' %' %' %' %' %' %' %' x*$%' >S%%' u3$=|$u3$X@$u3$u3$u3$u3$u3$u3$u3$u3$w*$w*$w*$w*$w*$w*$w*$7g.Lh+{! {! {! {! {! {! {! be+be+be+be+{! {! {! ZW+2&$;~@;~@;~@Eo+Eo+Eo+Eo+/D.PF+NZ@KE#KE#NZ@BX@3K@Jb#PF+^b+^b++d++d+Y@$Y@$Y@$Y@$+d+^b+PF+/D.P~ P~ uq.P~ /D.PF+^b++d+Y@$3&$PF+PF+PF+PF+PF+PF+PF+/D.+d+PF+/D.PF+^b++d+^b+/D.^b+^b+^b+^b+^b+^b+^b+^b+'g@Lh+x8.y{ y{ x8.9Y+Lh+Lh+Lh+Lh+'g@'g@'g@'g@0@@M8@OU+OU+OU+M8@M8@M8@M8@]! ]! )> )> )> )> .d+)> 8}.13+13+13+13+13+13+13+13+ko.NM+NM+NM+ko.@$+8g.Lh+PF+/D./D./D.^b+Y@$3&$3&$^b+/D./D.+d+Y@$", "7c 7c 9c 9c 8c 8c 8c 9c 9c 7c E7 E7 7c 9c 9c 8c 8c 8c 8c 8c 9c 9c 9c 8c 9c 9c 9c 8c 0' $% &) :j.:j.:j.m` m` m` l` l` R_ m` oG.oG.m` l` m` +h.&- S& S& C& C& S& S& [! u& S& [! S& u& u& C& [! o^ L) S& C& [! S& u& S% S& C& C& C& u& u& u& u& L) S& C& S& L) L) &- ^* d( ~% R_ -H.m` :j.l` -H.n` 9, VW.VW.G6.hY.9, VW.VW.VW.VW.8v.8v.8v.8v.$9.H;@zT.4!.7!.H;@Y6.P7.6!.9, 9, T}%T}%T}%T}%4x jI.lI.he he 2b 2b ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ 2b 2b he he he 2b ;_ -_ ;_ -_ =_ -_ 2b he 2b -_ L/.L/.L/.EK%EK%EK%GL.GL.EK%EK%EK%EK%EK%EK%EK%EK%;_ =_ 0c =_ ;_ 2b ;_ -_ =_ ;_ he he ;_ ;_ he le -_ -_ ;_ 2b 2b ;_ -_ -_ -_ ;_ ;_ ;_ 2b 2b 2b l` [{.1o.[{.[{.[{.[{.T}%T}%~(.~(.~(.~(.<].<].<].<]. 8&yc.tN%tN%4U$4U$z^.j0&^a&u2&/a&!i+2I%2I%(a&>_ &) }9.6[ 8# f km#_a&d| ~#.w[@yR.|A.rO.Pe@e~#:a&K(%7@d9@+s+ea&4s%3s%7_$Z4@Z4@Z4@41@41@[!$[!$[!$41@7)$6)$6)$[!$41@[!$2r$xo$7S$Ft$)r$2r$E5&fo%F5& !%M9$%9$D+$2o@P4&L($1z$v;&dG$%K@s7$'R$BZ#xJ$fa&QN$;_$]R$TC$;S$>-$Y7$ga&R9&_ &!t%ha&ia&} &ja&^@&ka&tS%zV%iH%z0&la&ma&na&>+&oa&pa&qa&ra&sa&ta&ua&va&wa&xa&&*$ya&f:$za&Aa&Ba&Ca&8,.Da&Ea&9~.gZ Fa&X|.Ga&Ha&Ia&Ja&Ka&La&IV@Ma&Na&Oa&Pa&@a&Qa&[0&uS@Ra&Sa&Ta&.p@[c#c~ ,8@L7&gS$Ua&Ua&/Y@FN X~#}A ^Y@PC -z VH%vt bs vt hy%uK `I$}C%Va&'x%Wa&=x%w}%dE%G0%)M$w;%ZX.^ +99$c/$b8$8e#8e#8e#pZ@pZ@qZ@qZ@&n%7G+6$@SQ@X/$X/$X/$DO@7G+CM@T!$aN#Kq@.l#||+7)#ZR#>9@3|+sZ@kP%]l$&$#rP$;-#e<#8:@eU$7e+(R@.{##-#Tk#2C '{ Xa&~*&Ya&1U$Za&`a& b&.b&+b&.b&+b&En@@b&#b&9C#$b&%b&&b&*b&&b&8C#>T%=b&IR%Cj@]J Xr .<@8~ o{ m>@Y^#/7+A'$g!@+/#b$%u$-J$>H$/9$ns$Fs%Fs%Fs%/a$)]$)]$^q$^q$4v$4v$7v$qr%qr%c/$c/$c/$c/$c/$}0$}0$}0$}0$VR$VR$9v$9v$9v$9v$0v$0v$4($4($4($4($4($4($4($4($J$+4($a8$a8$4($bv$bv$c8$qn%!H$!H$qn%qn%qn%bv$bv$J$+90$09$Rj$Sj$Sj$Sj$=k$Sj$Sj$Sj$Sj$Sj$Sj$Sj$Sj$Sj$Sj$Sj$=k$=k$=k$T4$T4$>b$>b$>b$>b$>b$>b$>b$>b$%u$=c$=c$=c$=c$%u$5F$6F$5d$6d$-b&-b&^m$^m$,H$,H$Ms$Sj$K$+Q'$99$Z}&*N$K{$}6$lm@w}@~*@}L.J4@`i@4, 3' 3' l.#|g /d@')#')#O9 /7 xn#:} :} ,p n| Q} 8j#L1 WE Jj XQ@~_#W] {{ |^#0F a^ 9_@Nf G`+N^ ;b&xc Be 51&v5&s3&Y7&R] >b&,b&f6&h0&u9&h6&'b&U+ o{+]@+.s.y{ y{ y{ /D./D.PF+PF+/D./D.PF+^b++d++d+Y@$Y@$B#@+d+^b+'W+B#@'W+3&$'W+%' %' %' %' %' %' %' %' X@$%' >S%%' x*$u3$x*$X@$=|$=|$=|$=|$=|$=|$=|$=|$vv+vv+vv+vv+vv+vv+vv+(D.Lh+{! {! {! {! {! {! {! {! {! {! {! be+be+be+f!+Eo+Ic%Ic%Ic%2&$2&$2&$2&$/D.PF+NZ@KE#KE#NZ@BX@3K@Jb#^b+^b+^b++d++d++d++d+Y@$+d++d+^b+PF+/D./D.P~ %P%&0+S}%@g%]1%#u%O4%3]&#u%#u%Fc%Fc%]1%@g%5e%5e%+d+PF+/D.PF+^b++d+^b+/D.^b+^b+^b+^b+^b+^b+^b+^b+'g@{! be+be+be+{! ]! ]! 8g.be+be+{! ]! 5A.Ea+v]#ZW+]%@]%@]%@ZW+ZW+ZW+ZW+{! {! Yt.Yt.Yt.Yt.a(+Yt.8}.13+13+13+13+13+13+13+@$+13+ko.NM+NM+NM+ko.{! ^b+]1%@g%@g%@g%]1%Fc%#u%#u%Fc%]1%Fc%O4%O4%", "7c 9c 9c 9c 8c 8c 8c 8c 9c 7c 7c 7c 7c 9c 8c 7c 7c 7c 9c 9c 9c 9c 9c 8c 9c 7c 7c 9c |% &) ~_ :j.:j.:j.m` m` m` l` l` R_ l` oG.oG.m` l` m` vk ^* S& S& [! [! S& S& C& u& S& [! [! C& u& C& [! 6[ [! C& C& [! [! C& R% S& S& C& C& C& C& C& C& 6[ [! S& S& L) 6[ ^{ &% d( ~% R_ -H.m` :j.l` 1% 1% VW.8v.VW.VW.VW.VW.8v.VW.VW.8v.8v.Hu+PI.PI.l#@H;@zT.4!.7!.H;@Y6.P7.6!.9, 9, T}%T}%T}%T}%4x jI.lI.he he 2b 2b ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ 2b 2b 2b 2b 2b 2b 2b ;_ -_ =_ 0c =_ 2b ke he ;_ L/.L/.L/.EK%EK%EK%GL.GL.EK%EK%EK%EK%EK%EK%EK%EK%0c 0c 0c =_ -_ ;_ ;_ ;_ -_ 2b he he 2b ;_ he le -_ ;_ ;_ ;_ ;_ ;_ ;_ -_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ -H.[{.1o.[{.[{.[{.[{.T}%T}%~(.~(.~(.~(.<].<].<].<].~(.~(.yc.~(.z^.z^.z^.z^.u2&u2&/a&/a&!i+!i+)b&!i+ l..h.!1.o^ B. W% mo.cj.+{ K8 :,.Q:++4#nh@&N@j2 !b&~b&hY+{b&zO ;Q 45@-$%SC@A[@^b J`+UY+Fh j_ i< Oe `;$Oe Pe n{ ]M$u7 ;n#PU.sX+~#+1Y.tz@]b&2!+]b&^b&t +t +t +t +5a&5a&5a&6a&t +o>%+]%r)&k]%r)&~T%3I.E_+E_+K9#K9#h>@1&#Oe@Oe@ET#[^#/)&kH@j>#k>#:V#:g$7a&7a&QK$QK$YJ$YJ$QK$QK$QK$QK$QK$QK$QK$QK$rx$rx$rx$rx$rx$v[#!f#!f#v[#!f#!f#T-$5O#5O#IB$IB$C7%C7%Th%Th%Th%Th%;N+;N+rF%rF%rF%rF%` &` &` &rF%Vk#b]@.@$#Y.#Y.$Y.RP.Z #!m$Mj#hs%2L.2L.ak#V2@J4@o<+O2+=K.:1 S1 w'@KR.y=$eq#M_#:g%8a&/b&L$&#l+H9&da&N=%N=%N=%N=%3Y+kZ.U-$9M@LD+-i#-i#-i#V_#V_#@/$0T+In#z@%sP$( +zB%1I.d#&x+%&]&CP$O~$'f$-S n!$oF%GJ%GJ%GJ%GJ%GJ%GJ%GJ%*L%Nt%*L%pM%*L%u1$&E u1$GJ%u1$Nt%GJ%*L%*L%GJ%Nt%u1$Nt%Nt%Nt%Nt%Nt%u1$Kv Kv !8@!8@||@}|@}|@}|@r[@r[@e{@e{@e{@^t {T#<*$9q V^#U!&b$$:|@N-%ls+$Q$7%%>i#da@'P%G6+*K@m{$4Y#(b&_b&7_$.7@.7@Z4@Z4@41@41@41@41@7)$6)$6)$[!$41@[!$2r$xo$;o$Ft$Ft$E5&E5&]p%*r$ !%M9$%9$~m@M2&O2&R1$|Y#1z$dG$jW#:I$s7$|J$F:$(P$m_&cu$:b&@o{ H$0r$ns$0r$0r$Fs%Fs%pr%pr%96&^q$^q$(a$qr%c/$po%po%po%po%po%c/$K$+K$+K$+}0$=u$VR$9v$9v$9v$j3&1=&1=&bv$90$bv$90$bv$90$bv$90$J$+Rj$Gs$Hs$%K$90$bv$bv$!H$!H$!H$!H$qn%qn%qn%bv$%6$bv$Rj$Ms$nw$>b$Sj$=k$>b$>b$>b$>b$>b$>b$>b$>b$Sj$=k$=k$=k$T4$T4$%*$%*$>b$>b$>b$>b$>b$>b$>b$>b$%u$%u$%u$%u$%u$5F$6F$>N$-b&-b&-b&-b&^m$^m$,H$nw$Ms$>b$qr%80$98$9v%aw$_!%%X#v)$lm@Rq@3v@~0@/n A6 G> 3' _,@Qk#kI@')#')#O9 (d@xn#<} 'p <} :} 8j#Qw#VE ^(#WE 1^#ry@~_#|^#sd#0F a^ Nd Nf G`+8^ ;b&P^ Be 51&s3&Y7&Xb&Yb&>b&F^ Zb&h0&s3&v5&Yb&d+ iS.y4&.s..s.y{ y{ P~ /D./D./D./D./D.PF+^b++d+Y@$3&$3&$!D+{y%3&${y%`b&B#@{y%'W+%' %' %' %' %' %' %' %' x*$X@$%' X@$u3$=|$u3$x*$=|$=|$=|$=|$=|$=|$=|$=|$w*$w*$w*$w*$w*$w*$w*$7g.Lh+{! {! {! {! {! {! {! ]! ]! ]! {! be+8g.8g.'> w*$&c%&c%Ic%2&$=|$=|$=|$PF+PF+NZ@NZ@NZ@NZ@BX@Jb#Jb#PF+PF+PF+PF+PF+PF+PF++d++d+^b+^b+PF+PF+/D./D.S}%S}%5e%@g%]1%Fc%#u%#u%#u%#u%#u%Fc%Fc%]1%]1%@g%+d+PF+/D.PF+^b++d+^b+/D.^b+^b+^b+^b+^b+^b+^b+Lh+Lh+{! {! {! ]! ]! 5A.5A.be+{! {! {! ]! 5A.5A.h]@ZW+]%@]%@]%@ZW+ZW+ZW+ZW+{! {! Yt.Yt.Yt.Yt.a(+Yt.Rx.ko.ko.ko.ko.ko.ko.ko.@$+@$+13+ko.ko.NM+NM+5A.+d+]1%]1%]1%]1%Fc%Fc%Fc%]1%Fc%#u%3]&3]&O4%", "9c 9c 8c 8c 8c 0' 0' 0' 0' 8c 9c 9c 8c 0' 0' E7 E7 E7 7c 7c 7c 7c 7c 8c 9c 7c 7c 9c |% &) ~_ :j.:j.:j.m` m` m` l` l` -H.m` oG.oG.m` l` m` +h.!1.C& [! L) L) [! C& u& C& [! L) [! C& C& S& L) S& C& u& C& [! L) [! S& S& S& [! [! [! [! [! [! 6[ [! S& S& L) 6[ ^{ &% d( ~% R_ -H.m` :j.l` 1% 6% VW.VW.VW.8v.8v.8v.VW.VW.VW.8v.8v.Hu+PI.PI.l#@H;@zT.4!.7!.H;@Y6.P7.6!.9, 9, T}%T}%T}%T}%4x jI.lI.he he 2b 2b ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ 2b 2b 2b 2b 2b 2b 2b he -_ =_ 0c =_ 2b ke he ;_ L/.L/.L/.EK%EK%EK%GL.GL.L/.L/.L/.L/.L/.L/.L/.L/.A^.0c =_ =_ -_ -_ ;_ 2b =_ ;_ he he ;_ ;_ 2b ke ;_ ;_ ;_ -_ -_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ -_ -_ -_ R_ [{.1o.[{.[{.[{.[{.T}%T}%^q%^q%^q%^q%M/.M/.M/.M/.~(.1% ^q%6% M/.M/.<].<].EK%EK%!i+!i+NE+NE+ c&NE+6v@ n F[.9- h# &' e. g|%J)$b.@A,#IM.|O.1v@E'#.c&u<&+c&u^&z9@ox@`R CS+DS+$;@j ..5 ^( AW+YQ@Og 0P@'8 lI#,! Lf +/$]M$;K.]($eW.yL. K.qL.`@+GX%Wx#GX%^b&t +t +5a&5a&5a&5a&5a&t +5a&o>%r)&k]%k]%k]%F)+&[@sz@>{+E_+r=#R]+Q]+-T.ET#9G#kH@G!#HG#l4&l4&Oj#:V#7a&7a&7a&7a&QK$QK$QK$7a&7a&7a&7a&7a&7a&7a&7a&3w$F)$+B%_V#_V#_V#~q$_V#_V#~q$~q$;{#-{#-{#{Q#{Q#C7%C7%C7%C7%Th%Th%Th%Th%%L+%L+rF%rF%rF%rF%` &rF%~.$dR.dR.o^#$Y.SP.B(@6<$M+@Ag@(R@`w ,z nm@d!+.s Mz ;[ Ti S: 89 Bm Vj /G 09 09 |0 #i#~T.nB x+@c&#c&ca&P-&da&u1&GU.t1&3Y+kZ.U-$9M@LD+LD+-i#-i#@/$1/%lS$ZX.L#$z@%kZ.GU.$c&bW.{.$%c&&c&*c&$>$c'$|u%|f u1$Nt%Nt%GJ%GJ%GJ%GJ%Nt%*L%pM%*L%u1$&E u1$GJ%u1$Nt%GJ%*L%*L%GJ%Nt%u1$u1$Nt%Nt%GJ%Nt%u1$&E &E #W@#W@v! [|@[|@:|@>b@>b@TH Yr e{@e{@/V#@, j.$5G@gS$=c&]Z#m$#O~$tc+5&#>/#;z@}Y+{8%(w$@I@V $-c&;c&>c&.7@.7@Z4@Z4@41@41@41@41@7)$6)$6)$[!$41@[!$2r$Sp$;o$:n$:n$E5&E5&]p%V6$ !%M9$%9$~m@M2&O2&R1$|Y#1z$jW#jW#6H$h#$#D#UG#(P$m_&cu$;_$Q/$,c&pu%'c&|[$#i%cH$w0&$i%A.&(,&6I$#E%H.&^@&Q$&)c&3{&3b&!c&6G%~c&{c&qY%]c&^c&/c&(c&_c&!~&:c&.EX 6c&7c&8c&9c&0c&ac&bc&cc&dc&vS@ec&fc&gc&hc&ic&jc&-d@JO%Lz W:@}|@vR@>8@`G$/A Wx Qw Rw ^G%aK%Xw Xw VH%9K%my%iy%vt 6'$kc&lc&mc&nc&5n%b.%o>#Gz$QB$+*+''%dN#qw$c9$vp#iX+qZ@>p$>p$qZ@qZ@qZ@~J$~J$/H$%/$iF$-,$w-$aN#5P#8~#te#hm@@o+H!#O:+T)@p>#Y]$3w$Vo$Hh+l>@>f#]M$Pe Lc jl jl Lc va <@^|@;8@5=&oc&pc&qc&rc&sc&tc&uc&vc&wc&xc&yc&zc&yc&xc&yc&zc&Ac&Bc&zc&Cc&Dc&Ec&Fc&Gc&Hc&C@$j[#Ic&f@#QT@0~ T:@|C `;$`;$FR@{L$DR@:>$aL#}=%-r%{-#g3#M~$bX#Yo$My$qX+tp%A3%sD$80$7v$*u$&u$Fs%N@%Fs%Fs%0r$0r$/9$/9$4v$4v$(a$80$c/$K#$K#$vy+K#$K#$O#%O#%K$+}0$VR$VR$Is$Is$-u$9v$0v$1=&1=&j3&09$=k$09$=k$09$=k$09$=k$90$>b$Hs$%u$Ms$T4$N)$bv$!H$ K$!H$!H$!H$qn%qn%qn%J$+bv$%K$nw$nw$nw$Rj$09$>b$>b$>b$>b$>b$>b$>b$>b$Sj$=k$=k$=k$T4$T4$%*$%*$>b$>b$>b$>b$>b$>b$>b$>b$=c$=c$%u$5F$5F$5F$5F$DP$-b&GS#Jc&Jc&lw$lw$^m$^m$Ms$=c$*c$M[#+*+R2@8p$gP%~8$Or#ry#'-#JR@}L.d!+A6 G> 3' _,@VH kI@')#')#O9 (d@xn#<} {1 'p <} Qw#_} VE ^(#XQ@L1 Bn@ ] sd# ] b&F^ F^ ,b&I8&v5&Mc&C. y4&$(+.s..s..s.y{ P~ P~ /D./D.PF+PF+^b++d++d+Y@$3&$3&$!D+`b&{y%{y%`b&!D+`b&'W+%' Nc&Nc&Nc&Nc&Nc&Nc&Nc&Pw%*Z+ME+*Z+;~@Ic%;~@Pw%=|$=|$=|$=|$=|$=|$=|$=|$=|$=|$=|$=|$=|$=|$=|$0@@Lh+{! {! {! {! {! {! {! ]! ]! ]! {! be+8g.8g.'> w*$&c%&c%Ic%2&$=|$=|$=|$^b+^b+Jb#Jb#Jb#Jb#+R@NZ@3K@/D./D.P~ P~ P~ P~ P~ ^b+^b+^b+^b+PF+PF+PF+PF+]1%]1%]1%]1%@g%@g%@g%@g%@g%]1%]1%Fc%Fc%#u%#u%#u%+d+PF+/D.PF+^b++d+^b+/D.^b+^b+^b+^b+^b+^b+^b+Lh+9Y+be+{! ]! ]! 5A.5A.5A.5A.5A.5A.]! {! {! {! f!+f!+V!+V!+V!+f!+f!+f!+f!+be+be+i~ i~ i~ i~ ):+i~ Rx.ko.ko.ko.ko.ko.ko.ko.@$+@$+13+13+ko.NM+NM+Ea++d+Fc%Fc%Fc%Fc%Fc%Fc%]1%@g%Fc%O4%3]&3]&#u%", "9c 9c 8c 8c 0' 0' 0' |% 0' 8c 8c 8c 8c 0' |% 9c 9c 9c 7c 7c 7c 7c 7c 8c 9c 9c 9c 8c 0' $% &) :j.:j.:j.m` m` m` l` l` l` :j.uk oG.m` -H.-H.~% ^* S& S& [! [! S& S& C& C& [! L) L) S& C& S& L) C& u& R% C& [! 6[ L) [! S& [! [! [! L) L) L) L) L) S& C& S& L) L) &- ^* d( ~% R_ -H.m` :j.l` 1% i% VW.9, 9, 8v.Hu+8v.9, VW.VW.VW.8v.8v.8v.8v.$9.H;@zT.4!.7!.H;@Y6.P7.6!.9, 9, T}%T}%T}%T}%4x jI.lI.he he 2b 2b ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ 2b 2b ;_ ;_ ;_ 2b he ke ;_ -_ =_ -_ 2b he 2b -_ L/.L/.L/.EK%EK%EK%GL.GL.L/.L/.L/.L/.L/.L/.L/.L/.0c -_ ;_ ;_ -_ =_ ;_ 2b 0c -_ 2b ;_ -_ -_ ;_ he 2b ;_ -_ -_ -_ -_ ;_ 2b ;_ ;_ ;_ -_ -_ -_ =_ *_ 8'%{N@8'%8'%8'%8'%xx.xx.^q%^q%^q%^q%M/.M/.M/.M/.1% 6% 6% i% *_ R_ M/.<].EK%EK%!i+NE+NE+NE+Oc&Pc&6e.fN..n Z^ .^ WG 61 %+ qs+Pw.== :,.|O.P&#@g+Qc&8=$Rc&D{.C'+Ac%Yv R&.W7 $7 M5 t`+v`+Q#@Gd Zk 0P@wa -C+Md Lf +/$]M$F(@]($@6#]Q. K.qL.u8+N]+A:&V@&cU%o>%o>%o>%o>%o>%o>%5a&t +5a&+]%r)&k]%k]%k]%F)+Z@+O$+,{+>{+sz@4g@-T.0Z+ET#/)&G!#>{#,{#k2$k2$Mu#!f#:g$:g$:g$7a&7a&7a&7a&7a&7a&7a&7a&7a&7a&7a&xR#+B%_V#~q$;{#;{#;{#;{#~q$;{#;{#-{#-{#-{#-{#{Q#{Q#C7%C7%C7%C7%Th%Th%Th%Th%45%45%r0&r0&r0&r0&7u%45%aI.+g+o^#n^#SP.SD@C(@M+@2L.j9$j9$X7@F5 )m 4q Mz ]1 P1 kr#g2 Q1 (1 [} Ld Rg Rg Vj vK@ E#xz# (+{T.T/&Sc&Tc&Uc&Vc&da&da&GU.GU.f*%O]$&K$&K$tD$f2%L{$89${l$lS$1/%In#c]%d>&.Y.Wc&Xc&Yc&Zc&`c& d&.d&+d&;P Eu Kv u1$Nt%Nt%Nt%Nt%Nt%*L%pM%*L%u1$&E u1$GJ%u1$Nt%GJ%*L%*L%GJ%Nt%u1$&E u1$Nt%Nt%Nt%u1$u1$Lv .z .z z ST@ST@<|@sG sG [f [f Yr Yr /V#@, (e sG }U$@d&#d&{8@T~#p!$&>$P%$ka@>D%$d&`;@L:&%d&&d&*d&=d&Z4@Z4@41@41@[!$[!$[!$41@7)$6)$6)$[!$41@[!$2r$Gt$$w$Ft$:n$Et$Et$]p%*r$ !%M9$%9$D+$2o@P4&L($v;&1z$_I$_I$6H$q9#-d&B8$eG$r0%;d&>d&S/$Q/$ou%'L%,d&'d&`8&`8&Vw%$i%ha&|b&)d&@9&!d&)!$X4&~d&~d&(&&{d&]d&D.&Ea$k#&^d&/d&-N#(d&_d&:d&j$[d&Pa.}d&I/@|d&B@.1d&|(+C@.hK.2d&3d&4d&5d&6d&7d&8d&9d&0d&ad&bd&cd&dd&ed&fd&b7#d7#Iz *8@X:@s[@E'$d.#Wx Wx Wx Rw TH%aK% O% O%Xw -z VH%my%iy%bs }h$^V%(G%gd&h7#vx$L~$~}@W_#km$Ei$,L$00$!k#4Z+5$@5G+SQ@SQ@SQ@CO@V.@V.@/H$kF$kF$d8$e;%bN#~ +~ +~ +9k#1_+V,+li@T)@p>#tx$NQ$N~$h(%b$>b$>b$>b$>b$>b$>b$>b$>b$>b$%u$5F$5F$5F$%u$8F$Jc&GS#Jc&Jc&lw$lw$^m$^m$=c$ln$RA$HK$D)+h/+aX#Kd&~8$3K#tz#'-#1A.[L.d!+t*@jl G> _,@VH kI@')#')#B_#(d@xn#:} <} :} :} _} (} VE ^(#^(#VE *@.ry@sd#ry@a^ a^ s<$Nd k.@yb D`+a_$Be 51&s3&Y7&Ld&Yb&>b&F^ ,b&i0&I8&J8&%,+a# u=.be+ll.ll..s..s.P~ P~ P~ /D.PF+PF+^b++d+Y@$3&$3&$'W+B#@`b&B#@'W+B#@;n.>n.X@$%' Nc&Nc&Nc&Nc&Nc&Nc&Nc&;~@Pw%*Z+Pw%Ic%&c%Ic%;~@2&$2&$2&$2&$2&$2&$2&$2&$u3$u3$u3$u3$u3$u3$u3$y*$Lh+{! {! {! {! {! {! {! {! {! {! {! be+be+be+f!+Eo+Ic%Ic%Ic%2&$2&$2&$2&$+d+^b+Jb#3K@3K@Jb#+R@KE#Jb#/D./D./D.P~ P~ P~ P~ ^b+^b+^b+^b+PF+PF+PF+PF+#u%Fc%Fc%]1%@g%5e%5e%S}%5e%5e%@g%]1%Fc%Fc%#u%#u%+d+PF+/D.PF+^b++d+^b+/D.^b+^b+^b+^b+^b+^b+^b+Lh+y{ 8g.be+]! ]! 5A.]! ]! Ea+Ea+5A.]! {! be+be+'> f!+V!+V!+V!+f!+f!+f!+f!+be+be+i~ i~ i~ i~ ):+i~ Rx.ko.ko.ko.ko.ko.ko.ko.ko.ko.13+13+13+ko.NM+Ea++d+#u%#u%O4%#u%Fc%]1%@g%@g%Fc%O4%O4%Fc%]1%", "8c 8c 8c 0' 0' |% |% 0' 8c 9c 9c 9c 9c 8c 0' $% |% |% 0' 8c 8c 9c 9c 9c 8c 0' |% |% 0' 0' 8c :j.:j.:j.m` m` m` l` l` :j.uk tk uk m` R_ R_ 4% &% S& S& S& S& S& S& S& S& [! 6[ L) S& C& [! 6[ [! C& u& C& [! L) [! C& C& C& C& S& [! [! [! L) [! C& u& u& S& [! &% !1.d( ~% R_ -H.m` :j.l` 1% 6% 9, hY.G6.8v.Hu+VW.G6.VW.VW.VW.VW.VW.9, 9, P7.H;@zT.4!.7!.H;@Y6.P7.6!.9, 9, T}%T}%T}%T}%4x jI.lI.he he 2b 2b ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ 2b ;_ ;_ -_ ;_ 2b ke le he ;_ =_ -_ 2b 2b -_ =_ L/.L/.L/.EK%EK%EK%GL.GL.L/.L/.L/.L/.L/.L/.L/.L/.-_ 2b ke he -_ =_ -_ 2b A^.=_ -_ -_ 0c 0c -_ 2b 2b ;_ -_ =_ =_ -_ ;_ 2b ;_ ;_ ;_ -_ =_ =_ =_ g% %o>%5a&5a&o>%+]%k]%k]%Xx#Xx#F)+, $87$N$+%>#sz@/i@0Z+Ow#ET#/)&HG#,{#_0$Ct$Ct$67@xR#PK$PK$PK$Z &Z &Z &Z &PK$PK$PK$PK$PK$PK$PK$xR#~q$;{#-{#S^$S^$S^${Q#-{#S^$S^${Q#{Q#{Q#{Q#-{#-{#(>$Zm+zD%zD%zD%zD%aa&aa&ba&ba&ba&ba&Od&Od&Od&ba&d#&cW.a#&M_#`m+Hh+Co+NM.1L.;K.Nz ZZ Ok Mz Mz f2 |m Pd&=M%=M%4!#4!#l[#+' Yq Yq wa wa Kf Sg Sh u%H~&Q^&Qd&Rd&Tc&Uc&Vc&da&z'$`+$f*%fh$fh$fh$&K$L{$89${l$98$/1&oM%Sd& Y.8W.Td&Ud&Vd&o2%Wd&Xd&Yd&Zd&m$#[|@vR@Kv u1$Nt%Nt%Nt%Nt%*L%pM%*L%u1$&E u1$GJ%u1$Nt%GJ%*L%*L%GJ%Nt%u1$Kv &E u1$u1$Nt%u1$&E Lv -f$-f$4`@Vx ^Y@^Y@-! tG Zi@Zi@:e [f En d&t]$%e&&e&*e& 9$=e&1[$=e&@0$17&-e&;e&>e&h#&,e&'e&`9$x;&)e&:Q$C.&!e&~e&{e&e&]e&^e&/e&(e&_e&:e&V($#OB@+/$Lc W:@ n@_N%6`@ie&z]&z]&$L@V!&wW$k,$je&ke&le&me&ne&oe&pe&qe&re&se&te&ue&ve&we&xe&ye&ze&Ae&Be&Ce&Ce&De&Ee&Fe&Ge&He&Es#Ie&FI Je&Ke&c>#nQ %~ [E@l] Un$fG#|C cK#aP@Mf E(@${#nV$97$3x%A~$w1#&I$i|#WS@Z]$M$+rr%Q'$qr%(a$km$|0#&c$&c$/a$Fs%pr%pr%80$80$80$80$qr%c/$c/$c/$O#%O#%K$+}0$=u$@W$Le&Le&5#%5#%4#%3#%Me&2=&Ne&0v$>b$ar$ar$ar$ar$ar$ar$ar$ln$CO#CO#ar$~}%j %,Z#Ms$!H$ K$ K$ K$!H$!H$qn%qn%im$im$%K$%K$Rj$Ms$nw$Hs$=c$=c$=c$=c$=c$=c$=c$=c$>b$>b$>b$>b$Sj$Sj$=k$=k$>b$>b$>b$>b$>b$>b$>b$>b$=k$Sj$=c$%u$5F$%u$=c$-c$ni$AA#zA#zA#N1#N1#_a$_a$Cj$f4%CM#4)#V,+&h#L%#gO$=/#k2$7M@km@HR@EJ._d@!d@jl G> _,@VH dw ew S^#B_#/7 =! n| n| n| ,p _} M1 L1 XQ@^(#VE -{ xb sd# ] s<$a^ a^ Nd l8 Re D`+Oe&Be 51&u9&I8&b&,b&Pe&Qe&u9&Re&'b&=L Se&w8.ll.ll.ll..s.uq.P~ P~ P~ PF+^b+^b++d+Y@$3&$'W+'W+3&$B#@B#@Y@${y%-~@;n.X@$%' Nc&Nc&Nc&Nc&Nc&Nc&Nc&;~@*Z+ME+*Z+Ic%&c%Ic%Pw%2&$2&$2&$2&$2&$2&$2&$2&$=|$=|$=|$=|$=|$=|$=|$0@@Lh+{! {! {! {! {! {! {! be+be+be+be+{! {! {! ZW+2&$;~@;~@;~@Eo+Eo+Eo+Eo++d+^b+Jb#3K@3K@Jb#+R@KE#KE#+d++d+^b+PF+PF+PF+/D.PF+PF+PF+PF+^b+^b+^b+^b+]1%]1%]1%]1%@g%@g%@g%@g%5e%@g%@g%@g%@g%@g%@g%@g%+d+PF+/D.PF+^b++d+^b+/D.^b+^b+^b+^b+^b+^b+^b+Lh+ll.gA 8g.{! ]! ]! ]! {! ]! ]! ]! ]! ]! {! {! ZW+'> VS+VS+VS+'> '> '> '> 8g.8g.,v.,v.,v.,v.8S.,v.Ov+NM+NM+NM+NM+NM+NM+NM+cI+NM+ko.@$+@$+13+ko.5A.Y@$#u%O4%3]&O4%#u%]1%@g%@g%Fc%#u%Fc%5e%5e%", "+h.+h.+h.d( d( ~% ~% vk vk .h.$~.$~..h.vk vk ~_ ~_ &_ &) $% 0' 0' 8c 9c 8c |% $% $% 0' 9c 7c :j.:j.:j.m` m` m` l` l` uk tk sk uk l` *_ g% 5% &- [! C& C& C& C& [! [! S& L) 6[ L) S& C& [! 6[ o^ [! C& C& [! [! C& S% R% l:.!1.!1.!% #% #% T$ &% u& l:.u& &% &% ^* l:.d( ~% R_ 1% m` _j.l` 1% 8v.G6.X)@hY.VW.Hu+9, hY.8v.VW.VW.9, 9, G6.hY.hY.H;@zT.4!.7!.H;@Y6.P7.6!.9, 9, 9, 9, T}%T}%T}%jI.m` he he 2b 2b ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ 2b ;_ -_ -_ ;_ 2b ke le ke 2b -_ -_ ;_ ;_ -_ A^.-_ -_ -_ ;_ ;_ ;_ GL.GL.L/.L/.L/.L/.L/.L/.L/.L/.2b ke ie ke -_ 0c -_ 2b X_ 0c =_ =_ A^.A^.=_ ;_ he ;_ -_ =_ =_ -_ ;_ he ;_ ;_ -_ -_ =_ =_ 0c g% $;&#k.#k.#k.#k.#k.$;&$;&^q%^q%^q%^q%^q%^q%M/.6% -H.7% 5% f% f% 5% R_ -H.;_ ;_ NE+NE+Pc&Pc&J'#uK.Te&T}%6% r: `m R% S$ ^+ #v ./ ', t< (S#|q A[@Ue&2{%Ve&Q_%;I+r.@ZH+rF+.~@7u pr LY+pG E%@o$$)3 Ri Tj Md ,! .G@]M$uK@[N.G3 aF.7v#*'&h-+LD+87$>4+87$@++zB%(,%J+@T.$We&u{%/Y./Y.o>%We&k]%(,%Xx#(,%!>+88$Y@+N]+-n#E)+u8+>/#sZ@/B+q~+j2$O_#.{%Or#67@h|#6>%PK$PK$PK$PK$PK$PK$Z &$C%$C%$C%$C%$C%$C%$C%$C%>v$-{#Th%;W+WJ.;W+Th%{Q#WJ.;W+>T.S^$a]@{Q#Vk#,Q+.@$.@$.@$.@$>T.aa&aa&aa&ba&ba&ba&ba&ba&ba&Od&ba&Xe&$Y.:g%`m+ks+Hh+]L$1L.o<+k.@i< -[ -[ *! kr#Rk#=b&c4#i1#:0#:0#:0#a7#a7# 9 T:@U:@U-@0Y wa -C+J}%;t#Ye&Ze&`e& f&.f&+f&@f&H9&{~%z'$`+$`+$M#$M#$&K$#f&(1&$f&$f&}6%a,%%f&4*&&f&*f&Vc&#c&=f&-f&;f&>f&wt$x`#DN [,$j!$@I$@I$],$],$UH%~J%*L%u1$&E u1$GJ%F'$G'$3C%UH%*L%GJ%Nt%u1$Eu Kv &E u1$u1$u1$&E PC [A bC%Pw Pw QC QC -E -E b@Fy$!Y@K~ FN .n@:C@(e oP%@E#/B+C_+}!$,f&A&@4s%>c&[!$[!$[!$lt$lt$`0$`0$`0$5}@lt$E4@p0$AT#BT#AT#6)$M<@yV#>q$zb$}b$='$V>$Kp$F5&'f&%[$)c@#8$2o@kW#N2&dG$y9$RC$A8$+D#N6#.F#F:$5M$)f&>d&!f&s]$~f&{f&z:$Ug$}3$Ug$:8&]f&^f&/f&(f&%P$V1$_f&Li%:f&`9$i## +I3$ar$S@%mf&!k#2R+[V+:P+< @6=@9G+mq@6&@6$@W.@+@%bN$iF$37$f'$9k#te#7Z.s8+7)#B%%V_#/n%MJ@pS${F$~`+s[#2c#aL#Tg |C EN#(M xW$nf&of&pf&nf&qf&rf&sf&tf&uf&vf&wf&xf&Fc&yf&zf&Af&Bf&Cf&Df&Ef&Ff&Gf&Hf&If&Jf&Kf&Lf&Mf&Mf&Nf&Of&Pf&Kf&Kf&Qf&Rf&Sf&Tf&F` ,4#Uf&OT@{8@jq$H5@Un$fG#^D%8V {Z#v'@b$Ms$Sj$Rj$Sj$-c$)g$)g$-c$-c$-c$-c$-c$,L$y4#>b$=c$%u$]m$ar$S5+ni$zA#zA#zA#N1#N1#_a$_a$8F$f4%Zz$YJ#W0++x@B1#$N$WJ#HL#9I#ry#O&#;B$%y 4q so G> ,8 VH /d@')#')#B_#O9 7, 36 7, 7, n| _} m| q[ XQ@XQ@VE ZG@VE sd# ] Bn@_1 xb 89 Bm F~ aj#Oe&9,@51&v5&s3&Y7&R] 'b&,b&3^ VS+VS+VS+'> '> '> '> 8g.8g.,v.,v.,v.,v.8S.,v.Ov+NM+NM+NM+NM+NM+NM+NM+l7 cI+ko.@$+@$+@$+13+]! Y@$O4%3]&3]&O4%#u%]1%5e%@g%Fc%Fc%@g%&0+&0+", "Ml Ml Ml Ml Ml Ml Ml @n @n *=.*=.Ml Ml Lv.Lv.4% 0' 7c 7c 9c 8c 9c E7 0' 9c 7c 9c |% $% $% 0' d( ~% %% %% %% ~% d( d( d( d( d( d( d( +h.+h.+h.!1.R% S% S% S% R% C& [! S& S& S& S& S& S& S& S& 9- m& D& 9- 6[ 6[ &% }9.6c 8c |% $% 3{ 3{ d= )= 8c !% 0' #% |% $% %% 4% Ml Ml Ml H;@Lv.H;@Lv.H;@VW.O7.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.VW.VW.VW.1% *_ *_ *_ *_ *_ *_ *_ *_ l` l` l` l` l` l` l` l` l` l` l` l` l` l` l` l` l` l` l` l` l` l` l` l` ~_ ~_ ~_ &_ &) &) ;_ ;_ =_ =_ vK.vK.vK.vK.`f&vK.*_ *_ R_ R_ -H.l` l` m` *_ *_ *_ *_ *_ *_ *_ *_ ;_ he ke 2b =_ 0c =_ ;_ 0c =_ -_ ;_ ;_ -_ =_ g% VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.8v.Hu+Hu+h% h% m` l` -_ 0c A^.0c =_ =_ 0c 0c 0c 0c 0c 0c 0c 0c `d#xx.T}%9, 8v.i% 7% ~% R% a# X[ l@ Jf.0Q+9F+.D+ g&Fc@.g&+g&W]$'#&h4 wS+l(#u/ _/ rK#x*@Gd @r .;@P3 v[ Ld ({+>g$E(@w}@PP.)N.ZJ.0e@#o+tc@D)+km$+B$, $o%$Uj$Uj$o%$!>+@++o%$p~+P.%p~+P.%p~+P.%p~+p~+!>+!>+!>+_ +f<#`R#A[#Xo$C[#Rs%i($u}@g3#g3#g3#_V#xR#PK$PK$$C%V<&V<&@g&@g&$C%$C%$C%$C%$C%V<&V<&V<&V<&8u%LA%Vk#k3%Th%ez%Vk#ca&nZ.ca&|I.#g&a]@x1&Rz$5O#5O#5O#5O#-W+d_&d_&d_&q0&%L+$g&%g&#c&&g&*g&IU.YR%p%$6>%%I$I_#X6%a9 @<@Re l .RT@'m#=g&HR%FL%EL%J`%@t#!)#]C@lI@lI@lI@Nx@^J [E@[e fG#Un$aP@[E@P^#9V 0V 3e%}E%PN#-g&;g&$i#>g&lY#b#&aI.=@&5c#;T.B@$,g&8p%'g&8p%)g&!g&~g&gz%{g&]g&^g&N=%.Y.t.&7u%>T.;[@uo@MX$>u$Wj$V4+E<%;g$}C%|g$YI$5'$b|$$B%7C%4C%/g&{G%/g&DD%2C%7C%6C%TL%.y .y .y .y u1$u1$Y;$=E Lv Lv PC PC Kv Eu Eu Eu $4@sG [|@>b@r[@X:@t! .<@I5@l$#/|@.n@U!&PH%C'$@~ FR@N_#3Y+h3%;!+tX@/7@oI+:R+WH@,:@58+[9@)i$+h$Mf$+h$L,+w=@x=@X5+X5+ s+tG+K2&Oc$J,+J,+Na$z6@Ma$.9@*'$.9@C&%'f&tk$U6$l_&3H$G$$O2&R1$5;$%K@h#$(g&hZ@93$^`%_g&:g&;-$K@)K@8=@8=@,K@X/$X/$SQ@7G+; $^R#av$cN#]B+Ap+VF@OD@#*+O]+zV#1K#q!$6%%;,$X:$2c#W4+wt$Z~#m$#$W@~ $Ag&Bg&Cg&ke&Dg&Eg&Fg&Gg&Hg&Ig&Jg&Kg&Lg&Mg&Ng&Og&Pg&Qg&Rg&Sg&Tg&Ug&|F@Vg&Wg&Ms#Xg&Ul@Ul@L/@Yg&Zg&`g&Zg&Tl@Zg&&K h&.h&+h&2/@@h&#h&$h&%h&&h&^|@%2@4C#Qe v'@`^# /#l%&>t#x+%*h&IS$RK$FC$Z]$C/%Fs%pr%rr%YX.YX.{l$`}&y7%y7%5v$5v$6v$y7%99$99$E}%=h&=h&`}&Z}&A3%A3%sD$^q$CO#6F$jO$jO$-N$-h&;h&u$%Gs$4($4($im$;u$;u$im$,H$Gs$Gs$Gs$,H$%K$bv$%6$a8$a8$a8$a8$a8$a8$a8$;u$!H$!H$!H$!H$!H$qn%qn%qn%bv$bv$bv$90$90$90$T4$90$Rj$Ms$,H$Hs$Gs$Hs$Gs$nw$Gs$nw$%K$09$4($Rj$,H$5G$9D#>h& A$(v$8D#:{#,b$2h$M1#2h$-c$-c$)g$4d$4d$)g$lw$Qj$Qj$Qj$b9$a9$_a$_a$>b$]m$4v$pr%Fs%N@%C/%V_#'/#!~#k>#LJ@qZ.c~#9T@%y >z jl G~ ,8 G0 S:@U:@_7 U-@U-@U-@R} c2 Qw#46 M1 m| M1 M1 (} 46 _} l .l .Ti j_ #[ 56 <7 X]@b< xd xd l2&,h&In 61&In 'h&s3&N+@'h&ob )h&!h&]! E(.y{ P~ P~ P~ S}%S}%S}%S}%S}%vv+Eo+=|$=|$2&$2&$u3$%' >S%>S%>S%>S%>S%%' %' %' ~h&>S%X@$x*$x*$x*$%' >S%u3$~h&{h&%' X@$>S%%' 2&$Pw%;~@;~@;~@Eo+Eo+w*$w*$Y@$Y@$+d++d+KE#NZ@NZ@oA+Lh+be+w8.gA gA w8.be+{! {! {! {! {! {! {! {! {! ^b+2&$^b+^b+PF+PF+PF+PF++d++d+^b+^b+PF+PF+/D./D.^b+/D.P~ /D.+d+Y@$+d+PF+^b+^b+^b+^b+^b+^b+^b+^b+/D./D./D./D./D./D./D./D.B#@3&$^b++d+3&$'W++d+/D.O4%O4%O4%#u%#u%Fc%Fc%Fc%]1%]1%@g%@g%5e%S}%S}%uq.9Y+{! 5A.Ea+Ea+5A.{! be+be+8g.w8.8g.]! 5A.]! ZW+M8@OU+OU+OU+M8@M8@M8@M8@{! {! Yt.Yt.Yt.Yt.a(+Yt.dl.$(+xc+Ea+]! {! be+8g.be+be+{! {! ]! 5A.5A.6j+P~ 5e%@g%]1%#u%O4%3]&3]&#u%5e%5e%]1%]1%&0+", "Y6.Y6.Y6.Y6.Y6.Y6.Y6.ce ce iI.iI.Y6.Y6.H;@Lv.4% 0' 7c 7c 9c 8c 9c 7c 0' 9c 7c 9c |% $% |% 0' d( d( d( d( ~% ~% %% %% d( d( d( d( d( d( d( ^* ^* u& u& R% u& S& L) 6[ S& S& S& S& S& S& S& S& 9- m& D& 9- 6[ 6[ &% l:.9c 8c >_ T_ S_ T_ ^j.>_ != 0' 0' |% |% $% %% %% Lv.Lv.H;@H;@H;@H;@H;@Y6.x5.x5.x5.O7.O7.O7.xX%xX%O7.O7.O7.O7.O7.O7.O7.O7.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.R_ R_ R_ R_ R_ R_ R_ R_ -H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.l` l` l` l` l` l` l` ~% &_ M$ M$ M$ &) $% $% $% =_ =_ vK.vK.vK.vK.`f&vK.M/.R_ R_ -H.-H.-H.-H.-H.*_ *_ *_ *_ *_ *_ *_ *_ -_ 2b he ;_ =_ A^.0c -_ 0c =_ ;_ 2b 2b ;_ =_ g% 6% 8v.8v.8v.8v.8v.8v.8v.8v.8v.8v.Hu+PI.PI.PI.<4 R_ =_ 0c A^.A^.0c -_ ;_ 0c 0c 0c 0c 0c 0c 0c g% 2P l=&xx.l=&$;&QI.`d#1% .h.L) )5 E& [I x; f=$~@@ W#Z2+.g&]h&c6@C9 &;@H^ h1 19$2h 1[ <@@Gd @r [) e2 w' Qg ({+`w },%;[@} +>N.R]+sz@+x@'>+3W.m~++*+:'$U-$7%%7%%fh$U-$U-$Uj$pD#pD#pD#+{@9]@P.%P.%P.%(,%(,%Xx#Xx#|=&5c#E[#6=%F2&IB$T-$_V#+B%+B%+B%_V#8u%$C%$C%V<&V<&@g&@g&@g&V<&V<&V<&$C%$C%$C%$C%$C%^h&/h&LA%x1&ez%ez%ez%x1&ba&ba&ba&ba&#g&k3%x1&z4%Fi$Xo$F[#F[#-W+5Y+;N+;N+yD%WJ.%g&aa&#c&Xc&#c&Ym+WJ.-{#F)$-S+I_#X6%a9 ;s@sd#QF#zg#=3#(h&/N%_h&@S#'a&)Y@:Q#'{ |E@jq$Fv@jq$1M#,P nQ lI@[E@}|@m$#%W@zK zK EN#I~ 1C lI#Iw%-g&{T.~T.SS#cW.&L++Y.5P+yD%9_&:h&:h&+g-$x&@f9@@a@Z8@+h$I,+I,+I,+,i$z6@Ma$*'$.9@.9@*'$F5&Z0@<{&}z$G$$t %R1$5;$|%$Vu#(g&!5$--$o6&(U#yQ#sx#sx#9h&0h&WS$}g&|g&=t%43$43$wu%[e$QT$=e&y}$ah&bh&R4&ch&dh&eh&fh&/t$T*$Aq%[s%vJ$Zj#gh&#_$hh&'z+ih&jh&kh&lh&7D.mh&nh&oh&_-.sH.ph&#{.qh&rh&sh&=d@th&jc&uh&vh&&h&wh&hj#jE#S~#R~#1f YA YA @~ X:@rG ;E xt cs Kv xh&yh&zh&Ah&tg&Bh&X(&Uw Du [,$1c#=x%Ch&Dh&Eh&Fh&9v$WL$/H$%/$UR$CU$SQ@,_$DO@DO@DD+w;@>K@5$@5$@5$@DM@Tm#,_$V.@iF$bN#Jn#Cb#h3#A'#B'#P$+Bp+2k+_-#!b#PH#%c$OM.jx@E<% -#3h [e r<$`d&Gh&Ib&Hh&Qb&Ih&Jh&Kh&Lh&Mh&Nh&Oh&Ph&Qh&Rh&Sh&Th&Uh&Vh&Wh&Vh&Xh&Yh&Zh&C7+E7+y3@`h& i&#N y3@ol+#N q5@x3@.i&+i&@i&yk##i&)7#I` $i&$_@se.$/.%i&&i&Sm@+<@Oe Wj `^#2c#i,$w+%H~&*i&=i&z(@9M@2=$A0%80$jm$p4&(a$PX#Z+$98$`}&m3&J8%7_%7_%7_%7_%99$L$+5v$Z}&`}&Os%Os%Os%Os%0r$/v$*I$6F$6F$jO$jO$-i&-i&=I$,H$4($bv$im$;u$im$c8$Js$Js$;J$;J$Js$;u$c8$qn%;u$;u$;u$;u$;u$;u$;u$;u$!H$!H$!H$!H$qn%qn%qn%qn%bv$bv$90$90$90$90$T4$90$%K$a8$,H$Gs$'H$'H$Gs$Gs$,H$a8$%K$4($4($%K$a8$^m$(/#;i&>h&Cr%;G+Aw%DA#^N#00$N1#ni$1h$)g$4d$A4#5d$N1#!k#Qm#Qm#b9$a9$a9$Dj$>b$]m$7v$4v$pr%)]$y7%}7$5V++v@G[#*e#9x$0#&2O.CJ.UJ#>z G~ W-@G0 S:@U:@_7 U-@U-@U-@R} c2 Qw#46 M1 M1 M1 M1 (} (} 46 46 h2 h2 Rj 0P@R-@Gn Rj ud#>i&!a&,i&'i&In In In )i&Eg@Eg@'h&ob )h&>1 {! ;0+9Y+P~ P~ S}%S}%S}%S}%S}%S}%vv+Eo+=|$=|$2&$2&$u3$%' >S%>S%>S%>S%>S%>S%>S%>S%~h&>S%X@$x*$x*$x*$X@$%' u3$>S%~h&X@$x*$%' X@$Eo+Pw%Pw%Pw%;~@2&$2&$Eo+Eo+Y@$Y@$KE#KE#KE#NZ@+R@oA+yj+be+8g.8g.8g.8g.be+be+{! {! {! {! {! {! {! {! PF+PF+PF+PF+^b+^b+^b+^b++d++d+^b+^b+PF+PF+/D./D.^b+/D.P~ /D.+d+Y@$+d+PF+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+3&$+d+PF+PF+Y@$Y@$^b+/D.#u%#u%#u%#u%Fc%Fc%]1%]1%@g%@g%@g%@g%5e%5e%5e%/D.9Y+{! ]! ]! ]! ]! {! be+{! be+8g.be+]! 5A.]! f!+M8@OU+OU+OU+M8@M8@M8@M8@{! {! Yt.Yt.Yt.Yt.a(+Yt.6g+5A.]! ]! ]! ]! ]! ]! {! {! {! {! {! ]! ]! 'g@/D.5e%@g%]1%]1%Fc%#u%#u%O4%@g%@g%#u%Fc%S}%", "Y6.Y6.Y6.Y6.Y6.Y6.Y6.ce ce iI.iI.Y6.Y6.H;@Lv.%% 0' 7c 7c 8c 0' 8c 9c 0' 8c 7c 8c |% $% |% 8c ~% d( +h.vk +h.~% 4% 5% +h.d( d( d( d( d( d( ^* ^* C& C& C& S& L) o^ -^ S& S& S& S& S& S& S& S& 9- m& m& 9- L) L) &% !1.8c 0' >_ T_ T_ T_ U_ >_ != 0' 0' |% |% $% %% %% r: r: P7.P7.H;@Y6.Y6.iI.is@is@is@is@x5.x5.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.-H.-H.-H.-H.-H.-H.-H.-H.R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ -H.-H.-H.-H.-H.-H.-H.%% |% #% #% T$ $% $% $% $% =_ =_ vK.vK.vK.vK.`f&vK.<].-H.-H.-H.-H.R_ R_ R_ *_ *_ *_ *_ *_ *_ *_ *_ 0c -_ ;_ -_ 0c A^.0c =_ -_ -_ ;_ 2b 2b ;_ -_ R_ h% PI.PI.PI.PI.PI.PI.PI.Hu+Hu+PI.PI.PI.#9.#9.<4 QB@X_ X_ X_ A^.=_ -_ ;_ 0c 0c 0c 0c 0c 0c 0c g% J].$;&l=&4I%QI.91+2P 6% +h.u& j$ V5 vl+;)+/c${@@ h#!i&~i&`,@{i&5)@&;@H^ y/ 19$2h i} 29 Me tb )3 Jc 2' Ne |-@`w },%;[@n6#>N.R]+sz@+x@'>+3W.U`$n~+]f#9M@_T#_T#{(${($|(%aT+o%$cv$cv$2I.}-+qL.qL.06&|=&|=&Xx#Xx#~>+mZ.5c#Yx#IB$5O#;{#_V#_V#L+@&$#_V#hh$hh$hh$(T#(T#(T#g2%g2%(T#hh$hh$8u%8u%xR#xR#Rz$hh$8u%Rz$>v$Vk#Vk#Vk#Vk#a]@Th%Th%>T.>T.Th%a]@a]@-W+F[#Rs%kP%K+@K+@WJ.WJ.=@&@Y.zD%zD%@f&]i&bW.Ao+6Y+;v$-S+X!% n+dk#^i&++>+D4@E4@gn$K2&z6@A6@*'$C&%C&%+9@Z0@rk$C]&.S$$G$N3&.D#$K@4;$(g&!5$3'#rM$g+$+8$rE$sx#B:$8i&B:$}g&$p%(2$43$^w%|3$yZ%|[$'d&'d&ah&ah&ah&u&&17&9i&(t$0i&ai&/W#VX#KK#NM#bi&1X@ci&'z+di&ei&fi&aH O%.}%._2.[o.gi&3|.BX jA.hi&ii&ji&ki&li&mi&ni&:X%Fa#oi&'a&e`%jt@XA WA ^|@^|@(|@>b@tG xt wt wt u1$pi&qi&rg&ri&b$ar$7v$4v$pr%)]$99$}7$kS$p>#N4$k>#s=#PP.k>@{c uK@fp W-@W-@1C fG#gG#0Y U-@U-@U-@T-@c2 Qw#46 (} (} (} (} M1 M1 M1 m| 4 O@$Qh _)@P3 _)@>3 ud#/*@Xi&j#@Eg@)i&)i&In 'h&'i&'h&)i&ob )h&Yi&w8.;0+6j+/D./D.5e%5e%5e%5e%5e%5e%vv+Eo+=|$=|$2&$2&$u3$%' %' >S%>S%>S%>S%>S%>S%>S%~h&>S%%' X@$x*$x*$X@$X@$=|$%' >S%u3$u3$X@$x*$Eo+*Z+*Z+*Z+*Z+=|$=|$2&$2&$Y@$Y@$KE#KE#KE#NZ@+R@oA+d> 8g.be+{! {! be+8g.8g.{! {! {! {! {! {! {! {! /D./D./D.PF+^b++d++d++d++d++d+^b+^b+PF+PF+/D./D.^b+/D.P~ /D.+d+Y@$+d+PF+^b+^b+^b+^b+^b+^b+^b+^b++d++d++d++d++d++d++d++d+^b+/D.P~ /D.^b++d+^b+PF+Fc%Fc%Fc%]1%]1%]1%@g%@g%5e%5e%5e%@g%@g%@g%@g%^b+Lh+{! be+be+be+be+{! {! 5A.{! be+be+]! ]! {! '> M8@OU+OU+OU+M8@M8@M8@M8@{! {! Yt.Yt.Yt.Yt.a(+Yt.ZY 8g.8g.{! ]! 5A.Ea+Ea+{! {! {! {! be+be+be+9Y+PF+@g%@g%@g%@g%@g%@g%@g%3]&]1%]1%O4%#u%@g%", "Y6.Y6.Y6.Y6.Y6.Y6.Y6.ce ce iI.iI.Y6.Y6.H;@Lv.%% 0' 9c 9c 8c |% 0' 8c |% 8c 9c 8c |% $% 0' 8c 5% %% +h..h..h.vk ~% 4% +h.+h.+h.d( d( d( d( &% !1.u& u& C& [! L) o^ o^ S& S& S& S& S& S& S& S& 9- 9- 9- 9- [! [! &% ^* 0' |% >_ >_ >_ >_ U_ >_ )= |% |% |% |% |% ~% ~% j% 7% 6!.P7.H;@Y6.iI.iI.Vh.Vh.Vh.is@is@x5.x5.x5.is@is@is@is@is@is@is@is@6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.l` l` l` l` l` l` l` l` *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ -H.-H.-H.-H.-H.-H.-H.%% 8c ,' !% #% |% $% $% &) =_ =_ vK.vK.vK.vK.`f&vK.lI.l` l` -H.R_ R_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ A^.=_ -_ =_ A^.X_ 0c =_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ -H.<4 #9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.<4 QB@X_ X_ X_ A^.0c 0c =_ 0c 0c 0c 0c 0c 0c 0c g% J].4I%l=&l=&$;&QI.2P 6% %% u& #. P6 Qj+)h$V]@bO+:+$uN%Zi&,2 `{@9)@h1 `i&l{@3##SY@)< wd#x*@Qi )3 w' yy fp p!$o9+vc+`D.0k#kh#R]+sz@#*+'>+ki@S)@6)#X@+9M@_T#<>%_T#7%%aT+[3%8M@~f#~f#D[#D[#< +{>+< +;T.0]@0]@5c#5c#5c#Yx#Yx#5O#;{#;{#~q$&$#&$#&$#&$#2w$(T#(T#(T#(T#(T#(T#(T#(T#hh$hh$8u%xR#Rz$Rz$>v$8u%xR#Rz$Rz$>v$>v$>v$>v$>v$>v$a]@Th%Th%Th%Th%IB$-W+Rs%kP%rK@K+@C:&|I.@Y.aI.dR./b&/b& j&n^&KU.GE+ih$;H$4G$lT$_8%=>#va#pI#.j&*f#YC@w8&+j&@j&#j&yg#$j&%j&&j&*j&=j&-j&.e&50&HN Ua&HN FN zK (M ,8@FN W~#W~#1r@^|@H~ j@E4@D4@D4@D4@w^@E4@gn$K2&A;$*'$C&%C&%C&%Z0@rk$C]&5j$,j&N3&R1$F,$|%$(g&7;$Ur#0S#aS#%9%ai&sx#O/$y &'j&}g&=t%43$^w%)j&!j& 9$8J$8J$#i%'d&'d&ah&ah&ah&~j&{j&]j&/`%YI#ZG#LK#Ia$^j&/j&(j&_j&:j&S |E%gQ%s%&dj&ej&fj&qc&Tb&gj&hj&ij&jj&kj&lj&mj&nj&;q#SI.oj&pj&,e.qj&fK.]r+rj&cK.sj&$M.Gj+h1+ol+ol+Pi&y3@ol+D7@ol+t5@53+53+53+y3@Pi&r5@Oe#tj&uj&,C Q++m/.|%.mz+vj&wj&z&#W] xj&m9+zX@X6%%i#yj&/++X]+AW.vD$[6$,Z#'M$ni$^m$S@%DP$ln$jm$*c$c/$qr%8v$&u$&u$4v$(a$(a$4v$pr%pr%0r$0r$&W#&W#&W#dw$>H$*I$CO#5F$%u$=c$=c$nw$Rj$bv$bv$%K$%K$c8$Rb$Ls$Ls$Ls$Ks$Ks$Ks$Ks$Ks$)H$)H$)H$)H$)H$)H$)H$)H$ K$ K$ K$!H$!H$!H$!H$qn%Rb$J$+J$+J$+J$+N)$N)$J$+;u$;u$Js$,M$,M$,M$;J$;J$im$im$im$im$im$im$im$Ej$dr$#:#(m$G4#b$7v$(a$(a$)]$99$89$kS$}(%NJ@2k+[ +*@# E.]($>n#UJ#ET W-@1C fG#gG#0Y Yq U-@R} T-@Q} Qw#46 (} _} 46 (} M1 m| XD#XD#O@$r[ >3 R-@R-@Qh 3g ud#ud#zj&Aj&In )i&'h&)i&Eg@ob 'h&'h&IC.T] Bj&YY 0m.|m./D./D.5e%5e%5e%5e%5e%5e%vv+Eo+=|$=|$2&$2&$u3$%' %' %' %' >S%>S%>S%>S%~h&~h&>S%>S%%' X@$x*$x*$x*$=|$%' %' =|$2&$x*$x*$Eo+ME+ME+ME+*Z+u3$=|$=|$=|$Y@$Y@$KE#KE#KE#NZ@+R@oA+)i.8g.{! ]! ]! {! 8g.w8.{! {! {! {! {! {! {! {! uq.P~ /D.PF+^b++d+Y@$3&$+d++d+^b+^b+PF+PF+/D./D.^b+/D.P~ /D.+d+Y@$+d+PF+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+PF+/D./D.PF++d+Y@$Y@$+d+Fc%]1%]1%]1%@g%@g%5e%5e%S}%5e%5e%@g%]1%]1%Fc%+d+'g@{! 8g.w8.w8.8g.{! ]! xc+5A.{! {! ]! ]! be+,&+M8@OU+OU+OU+M8@M8@M8@M8@]! ]! )> )> )> )> .d+)> KB w8.8g.be+{! ]! 5A.Ea+]! ]! {! {! be+8g.8g.y{ ^b+@g%@g%5e%5e%S}%S}%S}%#u%@g%@g%#u%#u%5e%", "Y6.Y6.Y6.Y6.Y6.Y6.Y6.ce ce iI.iI.Y6.Y6.H;@Lv.%% 0' 9c 9c 0' $% |% 0' $% 0' 9c 8c |% |% 0' 9c v% 4% d( .h.$~.$~.vk +h.vk vk +h.+h.d( ~% ~% &% }9.R% u& C& S& [! L) L) S& S& S& S& S& S& S& S& 9- 9- 9- 9- C& C& &% &- $% |% >_ >_ >_ >_ U_ >_ )= |% |% |% |% |% ~% ~% j% j% 5!.6!.P7.H;@Y6.iI.Vh.Vh.Vh.is@is@x5.x5.x5.is@is@is@is@is@is@is@is@6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.l` l` l` l` l` l` l` l` *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ R_ R_ R_ R_ R_ R_ R_ 4% 8c ,' !% #% |% $% $% &) =_ =_ vK.vK.vK.vK.`f&vK.lI.l` l` -H.R_ R_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ X_ 0c -_ =_ A^.A^.0c -_ ;_ ;_ -_ -_ -_ -_ ;_ -H.<4 #9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.<4 g% 0c 0c 0c A^.X_ X_ 7v@0c 0c 0c 0c 0c 0c 0c g% `d#xx.T}%xx.4I%4I%^q%WW.4% u& #. E& 0e.)F+Cj&#h#u!#G/ AX%Dj&m]#Ej&Fj&rO#{: iQ#., sb V' h5 Mj Kd Mz ZZ fp p!$o9+N&#o~$cR.>N.ka@P$+d_+ek@3W.S)@6)#5W.-i#)=%-a$5V+'/#C(%p>#N4$G[#MJ@j2$LJ@LJ@LJ@>I@5Y+5Y+5Y+5Y+5Y+K+@K+@C:&~q$;{#;{#5&#%$#%$#Nj#&$#2w$2w$2w$2w$_l%_l%_l%_l%qx$qx$qx$6>%6>%6Y+6Y+6Y+6>%6>%6>%6>%6Y+6Y+gs$gs$6>%6Y+gs$b]@b]@C7%b]@{Q#5O#Rs%Rs%s=#p%$oZ.@Y.&L++K.o^#PR.PR.n^&}`#Gj&Hj&lT$2F$ls+>f%l3%Ij&ON#oI#FI$Bn#Jj&Kj&Lj&$j&Mj&Dn@Nj&Hc&Oj&Za&Cy@ b&Dn@Pj&fS$>F$50&vl@40&Qj&FN @D%%p@%E }r@*8@*8@X:@TH x`#@-#u'@Uk$Zx#t,%4O.M[$L_#&L+aI.IG.YR%1I.5c#0]@_g$M#$fh$9M@88$:'$87$5W.O$+Bp+rL.tL.,N.oZ.o~$b_#4O.E_#g># -#jQ Y;$i0$^G%^G%u1$u1$Nt%^G%^G%X!&X!&Y!&Y!&X!&Xw Xw oF%oF%#B%#B%|f u1$u1$&E &E &E Kv Kv $4@$4@vR@vR@vR@vR@Eu 9~ 8r x`#Z:@yK W!&RH%6h&of&C@$3h $g+{-#O]+g|+R&$nS$*s+`p+&E+S;@u~@}1@dE#-Z#a~+*/+0X#*3@W>$A;$*r$X>$E4@D4@w^@w^@w^@E4@F4@A;$Kp$+9@Z0@Z0@}7&&G$Lm$u;&5j$Z,%L($N3&i#$$K@xm#7;$B}$lk$I+#GD$ai&h+$O/$y &8i&Rj&Y8&yF$=t%=t% 9$4I$|[$|[$|[$#i%#i%#i%#i%#0$ZS$Sj&Tj&.8$EQ#rZ+Uj&K/$Vj&Wj&Xj&Yj&Zj&`j& k&.k&+k&Bs.@k&#k&$k&%k&&k&*k&=k&,T%-k&)m#!m#*)&ft@vg#@t#KA@;k&PH$,8@=8@[|@vR@$4@vR@-E *E r_$+y +y ],$ED%DD%Lv%n!$1i [,$36$26$H!$N~$~Q#tD$M$+KG%O#%bv$qn%5($/H$/H$CU$UR$2%$O&$2%$2%$!_$!_$BU$jq#T!$nz#fX+nZ@*6$t!$X_@hm@N:+:'$]J$Fi$FT$I_#WJ$It$s]&!8&>k&~V%,k&hP%'k&)k&Da&.b&!k&~k&{k&]k&^k&/k&(k&_k&:k&b$>b$nw$Rj$4($%K$a8$a8$4($Rb$!I$#sZ@D[#$$#!%@k>@l>@@(+ET ET W-@H0 fG#gG#V-@Yq R} c2 8j#Qw#_} 46 Qw#_} 46 (} M1 m| XD#O@$ /$Q3 _)@_)@>3 f< ud#i_ 9k&]G$0k&In Eg@)i&Im ak&N+@Eg@,h&Ce Yi&ui sl.Bj.PF+PF+@g%@g%@g%@g%@g%@g%vv+Eo+=|$=|$2&$2&$u3$%' X@$X@$%' %' >S%~h&~h&~h&~h&~h&>S%%' X@$x*$u3$=|$u3$%' X@$2&$2&$x*$x*$Eo+ME+ME+ME+*Z+u3$=|$=|$=|$Y@$Y@$KE#KE#KE#NZ@+R@oA+d> be+]! 5A.5A.]! be+8g.{! {! {! {! {! {! {! {! uq.P~ /D.PF+^b++d+Y@$3&$+d++d+^b+^b+PF+PF+/D./D.^b+/D.P~ /D.+d+Y@$+d+PF+^b+^b+^b+^b+^b+^b+^b+^b+PF+PF+PF+PF+PF+PF+PF+PF+PF+^b++d++d+Y@$Y@$3&$'W+Fc%]1%]1%]1%@g%@g%5e%5e%5e%5e%@g%@g%]1%Fc%Fc%Y@$;~ ]! be+8g.8g.be+]! 5A.xc+5A.{! {! 5A.5A.{! '> M8@OU+OU+OU+M8@M8@M8@M8@]! ]! )> )> )> )> .d+)> i~ be+be+be+{! {! {! {! 5A.]! ]! {! be+be+8g.x8.^b+]1%@g%@g%5e%S}%&0+&0+]1%S}%S}%]1%Fc%S}%", "Y6.Y6.Y6.Y6.Y6.Y6.Y6.ce ce iI.iI.Y6.Y6.H;@Lv.%% 0' 9c 9c |% $% $% |% $% 0' 8c 8c |% |% 8c 7c 5% 4% d( vk .h.$~..h.vk vk vk +h.+h.d( ~% %% %% l:.u& C& S& [! S& S& C& S& S& S& S& S& S& S& S& 9- c& c& 9- u& u& &% ^{ &) $% >_ oj oj oj U_ >_ d= $% $% |% |% 0' d( d( j% 7% 5!.6!.P7.P7.H;@H;@is@is@is@is@x5.x5.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.r: -H.-H.-H.-H.-H.-H.-H.-H.R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ 4% |% #% #% T$ $% $% $% $% =_ =_ vK.vK.vK.vK.`f&vK.<].-H.-H.-H.-H.R_ R_ R_ *_ *_ *_ *_ *_ *_ *_ *_ A^.=_ -_ -_ 0c 0c =_ ;_ -_ -_ =_ 0c 0c =_ -_ R_ <4 #9.#9.#9.#9.#9.#9.#9.#9.#9.#9.PI.PI.PI.Hu+i% *_ =_ =_ =_ 0c A^.7v@ l.0c 0c 0c 0c 0c 0c 0c g% `d#xx.ts.T}%l=&4I%~(.WW.4% R% #. ^= b* bk&bO+]t+ck&n7 oO#dk&c_ ek&fk&gk&l: iQ#., m: hk&mj#V3 Kd yy +^+$y Qp MX$8:@X #xO.sL.Q]+~b#h/+s[$BM#S)@H!#5h#@/$)Q#)=%FC$Gz$'/#mo%m>#k>#j2$ik&t@+P%$P%$67@i($#f$:V#:V#!f#T-$5O#5O#_V#~q$5&#%$#Nj#&$#_l%_l%_l%_l%qx$qx$qx$6>%6Y+6Y+6Y+6>%6>%6>%6>%6>%6Y+6Y+6>%qx$qx$6>%6Y+gs$qx$6>%gs$,Q+,Q+,Q+,Q+-{#i($i($Pw#4&#;W+g#@dR.+g++g+,t#' $_R#~T.$i#>t#OK$ls+=v$jk&kk&,f%lk&=t#9K#mk&nk&ok&~P pk&qk&rk&sk&tk&uk&vk&wk&xk&yk&zk&Ak&Bk&Ck&Dk&hF%}>$Ek&_E$bB OC OC JT#%A@%A@:C@hB :e |d$.-#q[#q[#m8 [/$NM.4O.5e+{`+,t#Q$+A(@5P+Vs@~f#f<#3|+i|#LD+Y{@Y{@O:+2|+'(@Br+_ +2I.mZ.5P+(>${`+Co+aL#DR@J!$[g Z;$i0$1C%u1$Jv .y Pv ]G%X!&Y!&Y!&Y!&X!&Xw GJ%oF%#B%}H%#B%G'$Nt%u1$u1$&E &E &E Kv vR@$4@$4@$4@$4@$4@$4@dP@EN 8r +<@yK W!&zX$pf&(%%Iz .<@Uk$&{#j2$f*$Fk&Gk&Y<@V5+{u+`I+S;@v^@;:@-Z#xd%=/+6k@0X#>q$-'$Zu$X>$E4@+>+E4@w^@E4@gn$A;$A6@*r$F5&Z0@B]&&G$W=$Lm$$-&%G$Z,%vF$N3&i#$$K@+D#ym#Ur#3'#Hk&GD$xQ#:g&Ik&y &WS$Jk&A:$o&$43$^s%/w%b4$Kk&Kk&|[$|[$|[$'d&|[$|[$Lk&ru%8i&S6$JO#Mk&Z(#q^$Nk&L0%Ok&Pk&Qk&Rk&Sk&Tk&Uk&Vk&Wk&Xk&Yk&Zk&`k&`k&T(&/i&-3# l&zg#FN#.l&Dv@$~ 'P ;k&1i&;8@b~ vR@&E vR@Eu *E =E r_$r_$r_$uK tj%|u%e6%7E$8E$X^#i!@%{#;{#sZ@, $6)#`]$J$+5($d8$d8$jF$/H$/H$CU$UR$!_$^=$2%$!_$!_$Uv#Uv#zw$Tv#n%$N1#,b$*,$6 @$>#5)#f2%Yk#7a&)1&<=&PB%P-$+l&oQ @l&#l&$l&%l&&l&*l&=l&-l&;l&>l&,l&Jg&'l&)l&!l&~l&{l&i+.i+.]l&^l&/l&!H.(d.=_.uj.s9.<:.W` X` [..U` V` 5H m4@ym@K|@(l&(l&]^@]^@1k&#_@N/@t_@l)@(l&_l&:l&xs..1#.{g.2a.p&.O>.1w.)Z%[l&}l&.^+26$7e+)Q+.@$+]%SZ.BW.Vx#u,$u<@6]+QU#cp+i~+fX@{^#^N#N1#L1#4($17$9v$@W$Le&8k&8k&*u$8k&&u$&u$(a$80$Q'$oo%1r$ln$ln$ln$]m$]m$]m$=c$>b$Hs$Ms$a8$a8$Gs$Gs$%K$Rb$J$V~$>J$V~$>J$V~$V~$(H$(H$(H$ K$ K$ K$ K$!H$-I$Rb$Rb$Rb$Rb$J$+J$+Rb$!H$)H$!I$Ls$Ls$Ls$Ls$!I$!H$)H$)H$!I$!I$)H$)H$5($l#$|l&D@@} @7=@:P+!K@]K@>p$>p$AM@5Z+iF$b>%n%$n%$WK+WK+iX+vp#d9$b8$b9$a9$09$Sj$}0$qr%qr%80$m3&Z+$4V+mF$-a$,/#w<@|-+&>#2v@CJ.>n#0_$ET W-@H0 fG#fG#V-@Yq R} Q} 8j#_} _} _} 8j#Qw#_} 46 (} M1 m| m| ^+$Q3 Rj Rj Q3 ZV#b< b< #^+1l&2l&61&Eg@'h&o2&3l&Im N+@'i&o2&!h&fd @u.h~ PF+PF+@g%@g%@g%@g%@g%@g%vv+Eo+=|$=|$2&$2&$u3$%' X@$X@$%' %' >S%~h&{h&{h&~h&~h&~h&>S%%' x*$=|$2&$x*$>S%%' 2&$2&$x*$X@$=|$*Z+*Z+*Z+*Z+=|$=|$2&$2&$Y@$Y@$KE#KE#KE#NZ@+R@oA+yj+{! ]! ]! ]! ]! {! be+{! {! {! {! {! {! {! {! /D./D./D.PF+^b++d++d++d++d++d+^b+^b+PF+PF+/D./D.^b+/D.P~ /D.+d+Y@$+d+PF+^b+^b+^b+^b+^b+^b+^b+^b+/D./D./D./D./D./D./D./D.^b+Y@$3&$3&$+d++d+Y@$'W+Fc%Fc%Fc%]1%]1%]1%@g%@g%@g%]1%]1%]1%]1%Fc%Fc%+d+;~ ]! ]! {! {! ]! ]! 5A.xc+5A.{! ]! 5A.Ea+]! f!+M8@OU+OU+OU+M8@M8@M8@M8@]! ]! )> )> )> )> .d+)> 6g+5A.]! ]! {! be+be+be+5A.5A.]! ]! ]! {! {! Lh++d+]1%]1%@g%@g%5e%5e%S}%@g%&0+&0+]1%]1%S}%", "Y6.Y6.Y6.Y6.Y6.Y6.Y6.ce ce iI.iI.Y6.Y6.H;@Lv.%% d( vk +h.~% 4% 4% %% 4% ~% +h.+h.d( ~% +h..h.+h.+h.+h.+h.+h.+h.+h.+h..h.vk vk +h.d( ~% %% %% &% &- ^{ ^{ ^{ &- ^* !1.&% &% &% &% &% &% &% &% 9- c& d& 9- R% R% &% Q_ &_ &) >_ oj ri oj wk >_ d= $% $% |% |% 0' d( d( 7% r: 6!.6!.6!.6!.6!.6!.x5.x5.x5.O7.O7.O7.xX%xX%O7.O7.O7.O7.O7.O7.O7.O7.6!.r: r: r: r: r: r: r: r: r: r: r: r: r: r: r: R_ R_ R_ R_ R_ R_ R_ R_ -H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.R_ R_ R_ R_ R_ R_ R_ 4% 5% ^{ ^{ ^{ 4% %% %% %% *_ *_ x3&x3&x3&x3&@(&x3&M/.R_ R_ -H.-H.-H.-H.-H.*_ *_ *_ *_ *_ *_ *_ *_ A^.=_ ;_ ;_ =_ =_ ;_ he =_ =_ A^.X_ X_ A^.=_ *_ h% h% h% h% h% h% h% h% <4 h% h% h% i% 6% 6% 6% g% *_ R_ R_ R_ *_ g% af.g% g% g% g% g% g% g% g% 2P l=&T}%xx.4I%$;&`d#1% f% S% B. P6 eb+x; V]@^t+1a%c $4l&5l&6l&7l&8l&G< l: iQ#!S#hQ#)< wd#V3 Kd ZZ @(+h>#[/$['$.6$s'@'N.YJ.7 @O]+=1@2)#K6@W,@7)#M$+1/%o)%)Q#f2%LD+i|#>/#m[+/B+q~+0G#tz#^5@R&#Or#i($~Z#M~$0E$NQ$pS$0&%iE$g3#u}@=[@sK@sK@=[@v}@h|#+B%rx$rx$v[#v[#!f#!f#!f#5O#5O#T-$!f#v[#v[#rx$rx$;{#~q$+B%F)$F)$+B%_V#~q$_V#_V#~q$;{#-{#;{#;{#~q$u}@U{$]l$Pw#s'@pZ.#Y.o^#o^#n^#^L$]T.#i#dk#jq+A'$kk&}_%U&&V&&l=$3e%*$$9l&&t#0l&=@.al&bl&cl&dl&el&fl&gl&hl&il&jl&kl&ll&ml<.nl&ol&a4&y~&`V% S#y]&pl&:l$O.%!A i.#V~#V^#uG Cm nI@R-$n[#`=#.-#;@#Qp Ag@9e+~*@E'#v8+uz@0k#Vs@#++s!$'(@L6@g~@g~@|f+V_#WS@sP$pZ%o%$dG+5c#+Y.o^#[Q.iR.=$#]M$E&#'M !J hy%*E as Jv Iv Pv Ov Ov t)&&L%&L%aK%*L%UH%PL%=)&=)&G'$Nt%Nt%u1$u1$&E &E &E Eu Eu Eu vR@$4@<|@<|@%2@!M EN ||@cN@|$&QH%ql&rl&%p@Xr CV#Ag@;-#[8$aF@(=$u.&xM@jK@{u+T;@58+|1@_a@;/+=Z#!E$6k@#w$Ft$1s%[!$K2&gn$gn$gn$F4@A;$A6@*'$*r$F5&&G$W=$W=$W=$sl&Mm$%G$Z,%tl&L($ul&sM@h#$ym#PO#--$Hk&GD$;-$C:$[g&y &'j&A:$A:$5g&PT$^w%wu%/w%vl&vl& 9$!j&z:$Ug$_8&_8&v0&wl&8i&B:$xl&`(#yl&zl&Al&Bl&Cl&Dl&El&Fl&Gl&Hl&#k&Il&Jl&Kl&Ll&Ml&A-&Nl&Ol&DL#HY%Pl&7u#lI@|C ~M Q^#xR$1i&K~ =8@b~ vR@u1$Eu Kv *E =E r_$r_$wt !J z_%=o%kh$B(%GC$,,$|6$GK$3|+li@7)#U,+37$WK+~K@6G+}{#WK+5Z+5Z+_^$UR$!_$=Y$'_%'_%'_%4:%{<%;M$g>& ^$D~$Ql&e$@:-+V_#L~$$J$C%%;f%Rl&+>$Sl&Tl&Ul&Bg&Vl&Wl&-l&Xl&Yl&Zl&`l& m&.m&+m&@m&#m&$m&%m&&m&*m&=m&-m&;m&>m&,m&'m&4n.Af.=w.2l.G0./d.b<.[..T` kc.R` 6R [W 5H {}.kN.)m&0`+YJ e~.Y).0`+(.@ @@!m&kN.~m&{m&q:@s:@&*.L@.;*.Ef.F1.]m&>:.1<#*7 >1+^m&zg@ /@5Y+pD#|!+''+!}@X_@>(@hi@L4#D,+5 @/K@VK+o7#nZ@gX@37$J$+c8$%K$a8$nw$nw$Ms$Rj$Sj$Sj$Tj$Tj$,Z#,Z#,Z#ar$)g$-c$-c$Cj$Cj$^m$^m$hU$sS$cN$sS$RQ$SQ$b9$5($gm$)I$GO$bN$TR$/'$+@%%/$+@%bN$+@%bN$+@%bN$+@%+@%GO$GO$GO$/H$/H$/H$/H$kF$iF$pw$pw$pw$pw$37$37$37$pw$jF$kF$lF$WL$lF$lF$lF$jF$kF$lF$WL$WL$lF$kF$WK+[ @%1@8=@T,@x)+f^@I@@8$@6&@6&@6$@W.@+@%%/$%/$jF$5Z+iX+iX+vp#d9$c9$c9$,p$09$Sj$K$+qr%qr%Q'$m3&|7$+*+9Z+qX+Y_@>/#4|+qZ.gk@./@V2@@(+fp t/@If H0 @9 Sr Yq R} Q} Qw#_} _} _} 8j#8j#Qw#_} _} 46 (} (} L~#O@$ 4 4 ./$r[ /m&R: (m&_m&:m&S%~h&{h&{h&~h&~h&~h&~h&%' x*$=|$Eo+%' ~h&>S%=|$2&$X@$%' u3$Pw%Pw%Pw%;~@2&$2&$Eo+Eo+Y@$Y@$KE#KE#KE#NZ@+R@oA+)D+]! {! {! {! {! ]! ]! {! {! {! {! {! {! {! {! PF+PF+PF+PF+^b+^b+^b+^b++d++d+^b+^b+PF+PF+/D./D.^b+/D.P~ /D.+d+Y@$+d+PF+^b+^b+^b+^b+^b+^b+^b+^b+PF+PF+PF+PF+PF+PF+PF+PF+^b+Y@$'W+Y@$^b+/D.^b+Y@$Y@$Y@$Y@$Y@$+d++d+^b+^b++d++d++d++d+^b+^b+^b+^b+'g@5A.Ea+Ea+Ea+Ea+5A.]! Ea+]! {! ]! Ea+xc+Ea+M8@M8@OU+OU+OU+M8@M8@M8@M8@5A.5A.6g+6g+6g+6g+Fu#6g+6g+5A.5A.5A.]! ]! {! {! 5A.5A.5A.5A.5A.Ea+Ea+6j++d++d+^b+^b+^b+^b+PF+PF+^b+uq.P~ +d++d+/D.", "Y6.Y6.Y6.Y6.Y6.Y6.Y6.ce ce iI.iI.Y6.Y6.H;@H;@r: d( vk +h.~% 4% 4% %% 4% ~% +h.+h.d( ~% +h..h.U5 N6 .h.+h.d( ~% ~% ~% .h..h.vk +h.d( ~% %% 4% Q_ y% y% u% y% ^{ &% !1.&% &% &% &% &% &% &% &% 9- c& d& 9- R% R% &% y% &_ &) >_ oj ri ri wk >_ 3{ $% $% |% |% 0' d( +h.r: r: 6!.6!.6!.5!.5!.5!.x5.O7.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%Hu+r: r: r: r: r: r: r: r: r: r: r: r: r: r: r: r: *_ *_ *_ *_ *_ *_ *_ *_ l` l` l` l` l` l` l` l` l` l` l` l` l` l` l` l` R_ R_ R_ R_ R_ R_ R_ 4% f% y% y% Q_ 4% 4% %% %% *_ *_ x3&x3&x3&x3&@(&x3&x3&*_ R_ R_ -H.l` l` m` *_ *_ *_ *_ *_ *_ *_ *_ 0c -_ 2b ;_ -_ -_ 2b ke =_ 0c X_ 7v@7v@X_ 0c =_ g% h% h% h% h% h% h% h% h% h% i% i% 6% 1% 1% 1% QB@af.*_ -H.l` -H.-H.R_ g% g% g% g% g% g% g% h% QI.4I%l=&4I%QI.QI.2P 6% fL.R% $. P6 ph 1m&J-$^) 2m&q9&3m&4m&5m&6m&7m&]: ]: ~S#!S#hQ#sb wd#Gd Kd +^+>n#OM.e]@V{$.6$pZ.uL.#++3_+Y_@})#8I#4)#,>+7)#Z+$lS$<7&CA$@/$:'$)2+Br+ZJ.sL.Cr+n[+W,+so@^5@67@}6$3F$M~$aE$aE$NQ$pS$0&%pS$u}@U{$sK@sK@=[@ur$h|#rx$v[#Iy$!f#:V#T-$#f$5O#-W+IB$Fi$T-$Iy$rx$G!$!`+T-$~q$rx$F)$3w$+B%v[#~q$v[#~q$T-$;{#T-$~q$!f#_V#pS$u}@U{$Pw#{Q#pZ.4c#o^#dW.eW.]T.qV@Fn#RN#8v#bL#8m&ER@A=$A=$9m&3e%uK$0K#0m&am&bm&cm&dm&em&fm&gm&hm&im&im&m5@ 0#R>@Et.2q.r9.pU pU N>.jm&km&lm&2K%mm&mm&:l$%$$i.#h.#T^#j@#@, 0> Qv >M >M n[#i4#|/%d9%rq@M&#t$#fW.87@rO.YD.Cr+#++3|+O]+L6@~}@9Z+Yx%;i#6W.sP$U-$f*%B@$yD%@Y.cW.NU.w'@vK@Ho$#y {c$bq wt Y{$bs Iv Bu jy%Ov Ov &L%9K%*L%UH%PL%=)&nm&=)&G'$Nt%Nt%u1$u1$u1$&E &E &E &E Kv Eu vR@$4@<|@||@-P [g %2@}A |$&V!&(%%KT#L4$5F ,J ,z 97@om&uf@<-@oz@UR##5@>v@Zp+x=@21@7m@Qi$U[$SG$!E$!x$$w$ v$M3&-'$K2&gn$gn$A;$A6@*'$.9@V6$F5&&G$W=$W=$W=$sl&Eq$l_&pm&l7%vF$dG$i#$h#$8x#$F#z #H##aS#qm&rm&$t%-S$B:$Jk&5g&A:$j5$:W#z:$'T$,d&vl&!j&_8&2[$sm&:W#j5$tm&um&9h&:W#vm&wm&xm&YZ#(j&ym&zm&$$&Am&Bm&Cm&Dm&Em&Fm&Gm&Hm&Im&Jm&Km&Lm&ej#TJ#U8 Mm&~$&~{ X] 77#jq$1i&5=&Ss$=8@b~ vR@&E Kv Kv *E =E r_$wt wt )J ;g$TB$V4+k&%x@%-r%_-#4O#@*+m~+'p$Wx$jX+|V+ZK+H@@DI+}{#XK+V.@_^$UR${]$=Y$Nm&4:%Om&;M$$/$.b$Hm$08$d!@Pm&@*+B;@Tz$E:%aA%]}%0.%Qm&Rm&Sm&Tm&Um&Vm&Wm&Xm&Ym&Zm&Ym&`m& n&.n&+n&@n&#n&$n&%n&&n&{n+*n&=n&-n&;n&>n&,n&'n&'m&SI.$M.`i.GE GE Va./d.V` [..<..Y` Zm.6R YJ )n&!n&!m&AU @@~n&3[@~n&~n&!m&{n&,S.Mq.|#.Q++'(.O%.;(.K7+x!+43+]n&A/.P8 r<+^m&Mj#|6$sx$^B+2_+5Z.>>+A)+(K@9V@V_@, +W.+, +(8$BI+}V+BO@46+6P#S!$qn%c8$4($c8$4($%6$N)$N)$T4$09$Sj$Sj$-c$y4#S5+S5+Dj$Dj$^m$5G$sS$hU$ow$ow$RQ$^n&/n&0N$lF$P^%I.%CU$Uv#BU$BU$BU$Uv#UR$UR$UR$UR$UR$UR$UR$UR$_^$GO$GO$GO$GO$/H$/H$/H$bN$iF$iF$pw$pw$pw$pw$pw$I$+iF$%/$kF$)I$kF$/H$kF$%/$kF$)I$WL$~J$lF$/H$XK+3G+r<@T,@S%~h&{h&0, ~h&~h&{h&~h&%' x*$2&$Eo+>S%{h&>S%=|$=|$%' >S%x*$Pw%;~@;~@;~@Eo+Eo+w*$w*$Y@$Y@$KE#KE#KE#NZ@+R@oA+A_@5A.{! be+be+{! 5A.Ea+{! {! {! {! {! {! {! {! ^b+^b+^b+^b+PF+PF+PF+PF++d++d+^b+^b+PF+PF+/D./D.^b+/D.P~ /D.+d+Y@$+d+PF+^b+^b+^b+^b+^b+^b+^b+^b++d++d++d++d++d++d++d++d+PF+Y@$3&$+d+/D.uq.P~ ^b+3&$3&$3&$Y@$Y@$+d++d++d+3&$Y@$Y@$+d+^b+^b+PF+9Y+]! 5A.xc+$(+$(+xc+5A.]! 5A.{! be+]! Ea+$(+xc+h]@M8@OU+OU+OU+M8@M8@M8@M8@5A.5A.6g+6g+6g+6g+Fu#6g+6g+5A.5A.5A.5A.5A.5A.5A.]! 5A.5A.Ea+xc+xc+$(+$(+'g@+d++d++d++d++d++d++d++d+/D./D.Y@$3&$^b+", "Y6.Y6.Y6.Y6.Y6.Y6.Y6.U5.iI.P7.P7.Y6.ce iI.Y6.Ml Ml Lv.O~.r: r: 7% 7% O~.Lv.Ml Ml Ml Ml Lv.O~.+h.+h.+h.d( d( d( ~% ~% +h.+h.+h.+h.+h.+h.+h.+h.~% ~% ~% ~% ~% ~% ~% ~% d( d( d( d( d( d( d( ^* d& c& 9- m& u& R% }9.}9.9c 9c nf nf nf nf xk nf )= $% &) &) $% |% +h.vk Lv.Lv.H;@H;@H;@H;@H;@H;@xX%xX%O7.O7.x5.is@is@Vh.x5.x5.x5.x5.x5.x5.x5.VW.r: %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% -H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.*_ R_ -H.m` m` -H.R_ *_ *_ *_ *_ *_ *_ *_ *_ 5% j% Z^ Z^ Z^ j% j% j% j% WW.6% J].}n&ye#`d#)_&=H.<].-H.-H.R_ *_ g% g% g% *_ g% af.QB@af.R_ m` oG.0c =_ -_ ;_ ;_ -_ =_ 0c ;_ ;_ -_ =_ 0c A^.X_ 7v@*_ *_ *_ *_ *_ *_ *_ *_ *_ 4=+>r+6v@R_ l` *_ 4=+6% i% <4 s3.s3.<4 i% 6% h% h% h% h% h% h% h% h% xx.xx.xx.xx.xx.xx.~(.1% v% C& #. E& j@+1m&|n&1n&2n&3n&4n&5n&7l&6n&{: `!@R[ 7n&S[ SY@=6#1[ 76 +s u7 f]@Zx#2c#B(@!2+VJ.,4+m[+7 @.+@h/+s[$BM#3W.1|+Z+$98$`}&nF$tp%Yx%L6@O]+Q]+AF@-q%4/+jm@Y`%NP.B.+-/#4F$4F$bX#bX#[w$[w$/-#(-#(-#(-#.{%s1@s1@^-#^-#M~$~Z#Y]$Xo$Sz$~Z#Ky$aE$Ky$~Z#tx$3F$Y]$3F$tx$M~$3F$iE$~Z#iE$3F$}6$F[#kP%M~$0&%M~$iE$~Z#i($3F$i($aE$0&%i($4&#S^$s'@6O#KP#Y #eW.*$#LR.sV@|w$ms+O-% -#Sg CR@4z+oI#9'$8n&9n&0n&an&bn&cn&dn&en&fn&gn&hn&|y#}B#HD#AF#in&b~.P@.an.|a.T*.n~.}^+jn&kn&ln&mn&nn&=:$on&A6%4i 5;#-c W^#;E ;E :e [f ,M j!$7'$l,$,u$Qs$ce@DJ.-W@c_#DC.cR.sL. #+Br+Y_@X,@~}@']$L#$z@$N]$` @( +FU.: +9R+bI.f!@6e+w'@ ^+;K..{#Yw S-$Dz%]*$]x% w%1/$Au Au VH%VH%GJ%oF%Lv%1u%~G%1u%5'$&E &E &E &E &E &E &E Kv Kv Eu Eu vR@vR@vR@$4@R5@dP@$4@ST@ z %L@6`@GV#}r@SC /V#gp ]*@DJ.RU.sL.pn&qn&rn&''@Pm#tG+MU#`6@!E$xI$JH$;G$!x$$w$Ft$Et$7)$X>$p0$F4@Kp$F5&F5&+9@V=$V=$sn&>E$tn&Tr$un&sl&C]&pm&0&$A|$!K$ul&2'#oT+6p#tI$vn&^`%wn&C:$]R$Ik&WS$Y8&PT$)j&yF$|g&|g&|g&PT$)j&)j&PT$Rj&:W#|]$xn&Sm$yn&Rj&o&$zn&An&}y%Bn&Cn&Dn&En&Fn&Gn&Hn&In&Jn&Kn&Ln&Hm&<6&Mn&Nn&On&$0@ej#&h&Ri@Pn&Qn&Rn&^D%l] jq$1i&]Z#W.$>8@/0@Kv u1$Nt%&E }g }g r_$r_$cs ;M Tv%Sn&f%%i9${F$r!$Y_@@ +U`$'p$*6$4G+Q,+0~@S##R,@)K@zM@V.@V.@CU$UR$5:%4:%#[ %~j%{}%pV$m3%b'$$/&Ul&Tn&Un&Vn&Wn&Xn&Yn&Kg&Zn&`n& o&.o&+o&@o&C@.$n&#o&$o&&Z@%o&&o&*o&=o&-o&Li&;o&>o&,o&'o&)o&rj&#M.dK.zg.Dg.lI CU ,>.mI pe.`F ^X.m$.`9#!o&X).m$.~o&%_@l$.M%.8|.8|.rQ.+*.Fp.1#.ii.wd.E].F}.g{+b#.{o&]o&ik@q~$(R@($%Y:$%J$5V+j|#dk@U,+U4$QU#4]+W.+M:$n;@M:$H,@dX+3G+->+}{#pw$iF$pw$pw$37$pw$37$c9$,p$,p$@d$qw$,L$,L$,L$,L$N;$N;$BT$BT$BT$BT$Wx$]v#/s#Qm#!k#!k#8e#Xx$&&#W.@G@@DM@DM@DM@6$@SQ@,_$SQ@SQ@SQ@SQ@SQ@SQ@SQ@SQ@DO@F@@7G+7G+7G+1 @AM@&&#XK+XK+BM@@#$Y&+}|+WK+8e#pZ@pZ@AM@5Z+1 @BM@6G+CM@{K@DI+1 @5Z+V.@XK+6G+;K@@N+AD+3 @/w+;m+q8+;7@Ae@,e%l@%Ad%'~%Z/$)_$UR$TR$5Z+5Z+zM@9e#WL$~l$b9$bq$%K$Rj$K$+}0$qr%7v$k5&7_%sD$/a$wy+=1@~b#T2@)N.nh@,N+n8 uK@({+%S 7V Tj Tj V-@U-@T-@8j#Qw#Qw#Qw#8j#Qw#Qw#_} 46 (} M1 m| m| 46 M1 XD#YD#~1 UE d0&M5$^o&/o&(o&|,._o&|,.,1 S%{h&&, 0, {h&~h&>S%%' X@$x*$x*$x*$x*$x*$u3$u3$=|$=|$=|$X`+*Z+Ic%&c%w*$=|$%' {h&^b++d+Ae+PC#Ae+KE#BX@d> oA+{! {! {! {! {! {! {! ]! ]! {! {! be+8g.8g.8g./D./D./D.PF+^b++d++d++d++d++d++d++d++d+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b++d++d++d+Y@$Y@$^b++d+Y@$3&$3&$+d+PF+P~ Y@$Y@$+d++d+^b+^b+^b+^b+;~ ;~ ;~ ;~ ;~ ;~ ;~ ;~ y$$6j+'g@Lh+Lh+'g@6j+y$$]! {! {! ]! 5A.]! 8g.`Y be+{! ]! 5A.5A.]! {! f!+v]#V!+V!+q)@v]#f!+f!+v]#]! ]! )> )> )> )> .d+)> )> 5A.5A.Ea+Ea+5A.5A.]! ]! ]! ]! ]! ]! ]! ]! ]! 6j+'g@9Y+9Y+Lh+Lh+x8..s.h~ 6j+x8.x8.6j+y$$", "ce ce ce ce ce ce ce ce Y6.H;@Y6.ce ce iI.H;@Ml Ml Lv.Lv.Lv.O~.O~.O~.Lv.Lv.Lv.Ml Ml Lv.Lv.Lv.+h.+h.+h.d( d( d( ~% ~% +h.+h.+h.+h.+h.+h.+h.+h.~% ~% ~% ~% ~% ~% ~% ~% d( d( d( d( d( d( d( d( Z^ _& d& c& S& C& !1.!1.8c 8c ri ri ri ri (K.ri )= $% &) &) $% |% +h.vk O~.O~.P7.P7.P7.P7.P7.P7.O7.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.VW.r: %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% -H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.*_ R_ -H.l` l` -H.R_ *_ *_ *_ *_ *_ *_ *_ *_ 5% j% Z^ Z^ Z^ j% j% j% j% 1% 6% 2P J].J].`d#yc.kI.M/.R_ R_ R_ *_ *_ *_ *_ R_ *_ af.af.af.R_ l` :j.A^.0c =_ -_ -_ =_ 0c A^.-_ -_ =_ =_ 0c A^.A^.X_ *_ *_ *_ *_ *_ *_ *_ *_ R_ QB@@[+4=+*_ -H.g% 6v@6% i% <4 s3.s3.<4 i% 6% h% h% h% h% h% h% h% h% l=&l=&l=&l=&l=&l=&^q%6% v% C& 8# ^= j@+x; 0O+[o&2m&np }o&|o&7l&rO#mM#`!@uU+,@$DW+CW+EW+AW+Hi st 1L.OB@2c#&l+Y #'4+VJ.,4+>/#3_+O]+Ub+NX.K6@,>+.*+PX#y7%E}%=h&9v%A1#g~@L6@P]+-T.Z<#vc@po@T=$T=$KK%G[#N4$c7%c7%!Z#4F$4F$_-#j8$j8$j8$Oj#Oj#(-#(-#[w$sx$J{$%J$z[#z[#z[#x[#x[#x[#x[#z[#z[#z[#x[#%J$ux$Y]$3F$tx$~Z#Y]$Xo$~Q#d%%tx$~Z#Y]$3F$Sz$Xo$Sz$F[#Ky$~Z#F[#kP%K+@{Q#:J$KP#)Q+xc@]T.`>$ /#vC$ms+Y^# -#Md CR@3h fK#9'$J9&CL%1o&2o&3o&4A$4o&en&5o&6o&7o&8o&9o&AF#J-.@b+v_.(_.;x.Kr.B0.n4.0o&ao&bo&co&do&eo&[A%fo&go&m=$k@#Gv ho&RC uG hy%;)&Rx@Sr T-@o$#p$#@L@b1%,z &y aG# E.'4+xO.-1@ #+3|+^B+tD$-i#In#In#jZ.F~%y{$( +(,%Xx#U.$+K.o^#dW.eW.~%@NM.o9+Zw o[#Uv%io&6r Z{$bs vt VH%1C%oF%#B%+F%+F%{G%+F%|f u1$u1$u1$u1$u1$u1$u1$Kv Kv Eu Eu vR@vR@vR@vR@vR@$4@$4@^Y@^Y@cB %p@Cj@xK 5F qG 1k $p0$F4@Kp$F5&F5&+9@V=$V=$sn&>E$tn&Tr$un&sl&lo&C]&-i$0&$ `#dG$}L$2'##D#xJ$_}&M3#mo&no&5J$Ik&y &Rj&Y8&PT$PT$)j&PT$PT$Y8&o&$)j&{&&}g&WS$9h&B:$0i&oo&5g&2[$E &HZ+e+@po&qo&ro&1`%so&to&uo&vo&wo&xo&yo&94&[6&zo&On&/:&xg#P8#Ao&4`%%b@>{ +X h*$[E@K!$K~ HN W.$/0@c.#Kv u1$GJ%u1$}g *E +y hy%r_$>M g3&i4&Bo&xr% I$qq@W_#XX.J3$_P+4G+Q,+ky+0~@iy+0~@!K@V.@V.@1 @CU$UR${<%Om&Co&(^$4=$Q4$v{$l~$;i#8M@Rs%+B%-S+GS$3G$m3%Do&Eo&Fo&Go&Ho&Io&Xn&Jo&Ko&Lo&Mo&No&Oo&Po&Qo&Ro&{n+So&To&Uo&Vo&Wo&Yj.ni.Xo&Yo&Zo&Ki&`o&`o& p&.p&+p&@p&#p&FY.iV.N#+1&+CU pe.hV.kO lI ^X.hV.d~.hV.g,.hV.c~.l$.c~.d~.M%.7|.f=.l/.Q{.o(.o(.E].2z.6).g{+L_.$].&j.6Y.A<@Uv qy%-[@ux$kS$5h#f~@`&+U4$i~+;(@'}@Qb+Qb+c$@Hl+6=@T,@R,+DI+I$+bN$iF$jF$jF$kF$5($d8$47$47$&6$47$qw$qw$qw$00$00$00$00$vp#vp#vp#vp#HO$YP$pZ@zM@5Z+XK+1 @F@@7$@EM@/t#EO@/t#7$@7&@Tm#'~%Tm#]k#Tm#]k#6&@7&@6&@Tm#6$@6$@W.@W.@CO@'K@AM@~K@XK+BM@CM@,2+}|+}{#zM@AM@AM@V.@1 @~K@6G+{K@{K@{K@6G+~K@1 @1 @~K@6G+;K@hX@3R+;B+/w+6Z+q8+9k@pg@Dy$gx$W6$8#%}`$2%$!_$BU$1 @5Z+5Z+5Z+/H$lF$d9$c9$im$%K$17$}0$}0$qr%k5&k5&80$pr%0r$R2@>9@ka@*[@JB@;$%Y]@V2@$y ET Rg il Jf V-@U-@T-@Q} Qw#Qw#Qw#8j#Qw#Qw#_} 46 (} M1 M1 m| 46 m| YD#~1 $, UE q4&/X%$p&]{ (o&%p&_o&&p&*p&=p&:n&[n&Im Im 5^ k+ am.Bj.^b+PF+@g%5e%@g%]1%Fc%Fc%=|$=|$u3$u3$u3$x*$x*$x*$X@$X@$x*$x*$X@$%' ~h&{h&{h&{h&~h&>S%%' X@$x*$x*$x*$u3$u3$u3$u3$u3$u3$=|$ME+*Z+;~@Ic%2&$u3$X@$>S%^b++d+Ae+PC#Ae+KE#BX@d> oA+{! {! {! {! {! {! {! ]! ]! {! {! {! {! be+be+PF+PF+PF+PF+^b+^b+^b+^b+P~ /D./D.PF+^b+^b++d++d+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b++d++d++d+Y@$Y@$+d++d+Y@$Y@$+d+^b+PF+PF+Y@$Y@$+d++d+^b+^b+^b+PF+'g@'g@'g@'g@'g@'g@'g@'g@6j+;~ 'g@Lh+Lh+'g@;~ 6j+]! {! {! ]! Ea+5A.be+w8.{! ]! 5A.Ea+Ea+5A.]! ZW+v]#V!+V!+q)@v]#f!+f!+v]#]! ]! )> )> )> )> .d+)> )> ]! 5A.Ea+Ea+5A.]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ;~ Lh+9Y+9Y+'g@;~ Lh+x8.'g@Lh+9Y+9Y+Lh+Lh+", "iI.iI.iI.iI.iI.iI.iI.Y6.H;@Y6.iI.U5.U5.Y6.6!.H;@H;@H;@Y6.Y6.Y6.iI.iI.H;@H;@H;@H;@H;@H;@H;@Lv.+h.+h.+h.d( d( d( ~% ~% +h.+h.+h.+h.+h.+h.+h.+h.l` l` l` l` l` l` l` l` -H.-H.-H.-H.-H.-H.-H.%% b/ _& _& d& [! S& &% ^* |% |% >_ >_ >_ >_ U_ >_ )= $% &) &) $% |% d( d( r: r: 6!.6!.6!.6!.6!.6!.x5.x5.x5.x5.x5.O7.O7.O7.x5.x5.x5.x5.x5.x5.x5.VW.%% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% -H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.R_ R_ -H.l` l` -H.R_ R_ *_ *_ *_ *_ *_ *_ *_ 5% j% `^ `^ `^ $9.$9.$9.$9.8v.8v.l=&l=&4I%4I%)1.`d#x3&*_ *_ *_ R_ R_ R_ R_ -H.R_ g% af.g% *_ -H.l` A^.A^.0c =_ =_ 0c A^.A^.=_ =_ =_ 0c 0c 0c 0c 0c =_ =_ =_ =_ =_ =_ =_ =_ -_ A^. l.7v@=_ -_ A^.6v@6% Hu+#9.cp.cp.#9.Hu+8v.PI.PI.PI.PI.PI.PI.PI.PI.$;&$;&$;&$;&$;&$;&2P h% f% [! a# V5 j@+^f 8( -p&;p&fZ#e_ D!@>p&N| l{@#j>#i>#i>#G[#vx$n&%8r$tF%!Q#=i#=i#=i#!Q#=i#=i#=i#!Q#tF%M@%%Q$x[#Y]$%J$Y]$%J$Sz$z[#A[#x[#Sz$z[#~Q#pl%A[#pl%uD$x[#~Q#A[#C[#6=%IB$gs$PA$h(%@.@4O.t,%A'$9E$ms+Y^#@-#]M$+-#ER@/,$'f$'f$,p&'p&)p&!p&~p&{p&]p&^p&lY /p&vv#(p&J-.L%.u_.(_.3y.5y._p&(4#:p&&&]*$N=&ZI$^,$UH%PL%@F%@F%b!&@F%G'$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Kv Kv Kv Eu Eu vR@vR@vR@Eu ^Y@ST@^Y@^Y@ST@$p@]J 8v (t _t 3' 1k y6 so (5@'r%4p&5p&fy$=s+':@8)$4}@gc@!E$JH$;G$!x$#w$Ju$2r$7)$X>$V6$*r$Kp$F5&gp%V=$hp%hp%sn&>E$6p&un&un&sl&Mm$u;&1Y#-i$>W$!K$7p&B+$B8$}A#5M$8p&jp$qm&5J$$t%5g&2[$4I$_8&Y8&Y8&Rj&Rj&WS$8i&}g&9p&9p&]w%%t%0p&-S$|]$j5$ap&bp&cp&dp&ep&fp&gp&hp&ip&jp&kp&lp&mp&np&op&pp&qp&rp&sp&tp&b3&Ao&Cd#c1#^J ]C@Un$1C [e $S#5=&^Z#~ $c.#c.#&E Nt%*L%Nt%=E =E hy%|A hy%6'$up&] &TR%aE$}(%']$k[+Jn#d8$XK+w;@ZK+0~@%B+&B+#a@Q,+w;@F@@W.@UR$+@%o%&>M$.b$vp&p%&v{$m+&Ps%wp&h+&2w$%l+3j+ls+9P#xp&1g$yp&zp&Ap&Bp&Xm&Cp&Dp&Ep&Fp&Gp&Hp&Ip&Jp&hK.Kp&Lp&1 #Mp&Np&.'#;_@aO aO [q.Zj.Op&Pp&;n&'n&Qp&Rp&Rp&Sp&Tp&SI..r@A{@yf.Dg.Jk.i,.*T SX dZ dZ % .% .@[.jZ @[.f,.V).W).tY >>.vd.P@.o$.Eo.se.wd.uc.A!@P>.uV [<.6[.Up&Uv%Vp&3L.qy%D]#vx$6Q%x1#6Z.dN#*6$yM@T0+W&+$N+$N+-.$W&+6=@T,@YK+~K@bN$+@%%/$%/$/H$/H$lF$-,$n%$n%$e;%pw$47$47$_8$vp#nZ@nZ@nZ@fX+fX+jX+jX+K #J #)K@2 @X.@^^#^^#CD+8V@8V@ci@UQ@qg@9$@9&@9=@u!%m5$be#9=@9&@9$@4e@9$@^K@mq@k#$DD+,T@,T@DD+w;@8G+5G+5G+-K@ov$h[+R,+5$@>K@w;@w;@R)@8G+X.@X.@^^#^^#X.@8G+8G+8G+8G+X.@^^#~-+Gn+;B+/w+6Z+q8+8m@5~#->$_6$T`$/t#Ve%O&$!_$Uv#V.@V.@V.@XK+%/$jF$d8$37$c8$4($17$K$+}0$}0$8|%>a$qr%jm$Zz$8o@h/+4g@sL.Wb+u|@qB.{c _d@tK Ok >J ;[ V-@Yq R} c2 8j#8j#Qw#Qw#Qw#Qw#_} _} 46 (} M1 M1 `V@P} )1 )d@)d@)d@Wp&.] Xp&Yp&Zp&`p& q& q&.q&+q&@q&o2&IC.ob S_+i> am.Bj.Y@$+d+]1%@g%5e%5e%@g%@g%=|$u3$u3$u3$x*$x*$X@$X@$>S%%' %' X@$X@$%' >S%>S%~h&~h&>S%>S%%' X@$x*$x*$u3$u3$u3$u3$u3$u3$u3$u3$Pw%Pw%Pw%Pw%u3$u3$u3$x*$+d++d+Ae+Ae+Ae+NZ@BX@yj+oA+{! {! {! {! {! {! {! {! {! {! ]! ]! ]! ]! ]! ^b+^b+^b+^b+PF+PF+PF+PF+ F. F.uq.P~ PF+^b++d++d+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b++d++d++d+Y@$Y@$3&$Y@$+d+^b+^b+^b+^b+^b++d++d++d+^b+^b+PF+PF+PF+Lh+{! {! {! {! {! {! {! ]! ]! {! be+be+{! ]! ]! {! be+be+{! 5A.Ea+]! be+]! 5A.5A.Ea+Ea+5A.5A.M8@v]#V!+V!+q)@v]#f!+f!+v]#]! ]! )> )> )> )> .d+)> Yt.]! 5A.5A.5A.5A.]! {! ]! ]! ]! ]! ]! ]! ]! ]! 5A.{! be+{! 5A.Ea+5A.]! gA be+]! {! 8g.8g.", "P7.P7.P7.P7.P7.P7.P7.H;@H;@Y6.U5.W`% ]@Y6.5!.P7.P7.H;@Y6.iI.ce U5.U5.Y6.Y6.H;@H;@H;@H;@Y6.Y6.+h.+h.+h.d( d( d( ~% ~% d( d( d( d( d( d( d( d( l` l` l` l` l` l` l` l` -H.-H.-H.-H.-H.-H.-H.%% Y^ d& d& c& S& S& ^* ^* $% $% T_ T_ T_ T_ ^j.T_ d= $% $% $% $% $% %% ~% 7% 7% 5!.5!.5!.5!.5!.5!.Vh.is@is@x5.O7.O7.xX%xX%x5.x5.x5.x5.x5.x5.x5.VW.%% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% -H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.R_ -H.-H.-H.-H.-H.-H.R_ *_ *_ *_ *_ *_ *_ *_ j% j% `^ `^ `^ $9.$9.$9.$9.8v.8v.xx.T}%xx.4I%6R@91+6e.g% g% *_ R_ -H.-H.-H.-H.-H.*_ g% g% *_ R_ R_ A^.A^.A^.A^.A^.A^.A^.A^.0c 0c 0c 0c 0c =_ =_ =_ 0c 0c 0c 0c 0c 0c 0c 0c ;_ 0c X_ X_ 0c 0c X_ @[+6% Hu+#9.cp.cp.#9.Hu+8v.PI.PI.PI.PI.PI.PI.PI.PI.QI.QI.QI.QI.QI.QI.J].<4 5% L) )5 61 h= #q&f=$[M+;( q9&$q&dk&c_ ;2 y/ &;@1q 1q rt 5s o8 q_ qB..p t,%Hh+`m+Sh%dR.VJ.9R+XJ.mo%qq@X,@|)#3z@k<&1S#=7$sD$4v$ p$/9$&c$+*++B$9Z+|)#|)#g&@HK#8G#53@vi+vi+Y_@T)@X,@X,@B;@qq@qq@.B%S2@Ow#Ow#Ow#Ow#Ow#Ow#S2@9r$%q&;]%Qs%&q&7R+c]%c]%A@$A@$A@$A@$c]%7R+Qs%Zk#M@%n>#%Q$%Q$%Q$n>#n>#[3%[3%]J$]J$]J$aT+aT+|(%|(%]J$8R+8M@~f#B[#5Y+Vk#gs$6r$@u'@Tg g*$|F$ {#YH *q&=q&=q&-q&;q&>q&>q&,q&'q&)q&&>.SJ+ak.NT./s.`Y.q}.!q&~q&{q&]q&^q&/q&(q&_q&:q&$5P+=@&5c#|=&(,%Y(&T8&T8&T8&Y(&7W.n~$ B#zB%=S+5c#5c#x<@}I.oZ.s'@e~#8:@${#dv$ev$TB$Va&2q&EG%EG%PL%PL%@F%d!&c!&d!&UH%*L%*L%*L%*L%*L%*L%*L%&E &E Kv Kv Eu Eu vR@vR@PC ^Y@ST@^Y@QC ^Y@:C@t! fw _t y, _,@x, 6, Zr LZ@=i#ti&1'+3q&G6+*K@.s+lt${`#!E$JH$Qi$+O$#w$ v$4q&7)$X>$V6$*r$Kp$F5&gp%V=$hp%hp%sn&>E$6p&un&un&5q&Mm$$-&lo&1Y#[{&ab#6q&C;#e-$F:$Qm$@F#D;#7q&8q&~&&Rj&4I$_8&_8&Y8&Rj&5g&Jk&WS$8i&0p&]w%]w%9q&0q&0q&aq&:o$TO#bq&/f&$H+cq&dq&eq&fq&gq&hq&iq&jq&D&&[6&w~&kq&lq&mq&Lm&!*&xd#u8&nq&TJ#QT@a~ I~ 0~ V:@{M ,8@]Z#~ $S&&q<$q<$&E Nt%pM%GJ%=E i0$|A ly%hy%Yv%f%%t1#NQ$8R+-i#z1#*W#6P#%/$w;@k#$>B+#a@&B+*B+=B+lX+x;@G@@7G+Uv#TR$>M$k`%~t#g'%v{$A2$Ap#o%$y[#)f#2F$s]&[H%wT%1g$oq&pq&qq&rq&sq&tq&uq& o&vq&wq&xq&yq&zq&hK.%n&Aq&| #4D@Bq&Wi.Nh.nH.2r.${.Cq&43.Z,.CU `j.]r+vf.Af.wf.zg. j.SM DU zf.`F FE pe.CU kO @ .4W @[.@[.@[.@[.@[.dZ jZ SX 7..fZ f,.k].6:.x1.AE ME Xm.fb.kA..c.O>.Dq&Eq&2r%p5&Fq&*a@]c kI%QH#%Q$Sd&35%k[+T4$c9$5&@hX@~-+#a@mX+m;@W&+x)+kX+>K@AM@-L$_^$GO$FO$FO$+@%bN$8k#^R#5P#46+b>%pw$d8$WK+5$@5$@5$@5$@>K@>K@!K@!K@!K@w;@cB@CD+<^#ly+ly+ly+qg@qg@qg@qg@qg@4e@9&@9&@u!%u!%be#9&@9&@4e@qg@qg@8V@^K@mq@E+$E+$DD+cB@H@@CD+X.@X.@-K@ov$ov$-K@2 @R)@R)@8G+8G+X.@^^#^^#^^#^^#^^#^^#^^#^^#^^#^^#hX@~-+Gn+;B+:|+6Z+&7@8m@5~#(6$hY#T`$!(%Ve%2%$+W$)_$>p$AM@AM@V.@%/$%/$iF$pw$c8$c8$7G$17$17$}0$8|%}0$>b$%u${m$Vk$@*+&a@AF@bR.rO.rZ.t$#V2@Nz ro Mz Mz V-@Yq R} T-@Q} 8j#8j#Qw#8j#8j#Qw#_} 46 (} M1 M1 `V@P} (d )d@)d@)d@Gq&O} Hq&Iq&Jq&.q&Kq&Lq&Kq&Mq&@q&ob Im o2&'h&^% am.=~@+d+^b+@g%@g%5e%@g%]1%]1%u3$u3$u3$x*$x*$X@$X@$X@$~h&~h&>S%%' %' %' X@$X@$>S%>S%>S%%' X@$X@$x*$x*$=|$=|$=|$u3$u3$x*$x*$x*$Ic%;~@*Z+ME+x*$u3$=|$2&$Y@$Y@$Ae+KE#KE#NZ@+R@yj+oA+{! {! {! {! {! {! {! be+{! {! ]! ]! 5A.Ea+Ea++d++d++d+^b+PF+/D./D./D.P~ P~ /D./D.PF+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b++d++d++d+Y@$Y@$'W+3&$+d+PF+/D.PF++d+Y@$+d++d+^b+^b+^b+PF+PF+9Y+9Y+be+be+be+be+be+be+be+{! {! be+be+be+be+{! {! 8g.w8.gA 8g.]! 5A.]! be+5A.5A.5A.Ea+Ea+5A.5A.h]@v]#V!+V!+q)@v]#f!+f!+v]#]! ]! )> )> )> )> .d+)> Yt.]! ]! 5A.5A.]! ]! {! ]! ]! ]! ]! ]! ]! ]! ]! 5A.{! be+]! Ea+$(+xc+5A.be+be+{! {! {! {! ", "P7.P7.P7.P7.P7.P7.P7.H;@H;@Y6.U5.W`% ]@Y6.5!.6!.P7.H;@Y6.iI.ce U5. ]@iI.Y6.H;@P7.P7.H;@Y6.iI.+h.+h.+h.d( d( d( ~% ~% d( d( d( d( d( d( d( d( l` l` l` l` l` l` l` l` -H.-H.-H.-H.-H.-H.-H.%% N~.9- 9- m& C& C& !1.!1.&) &) S_ S_ S_ S_ nq+S_ 3{ $% $% $% $% &) 4% 4% j% j% $9.$9.$9.$9.$9.$9.Vh.is@is@x5.O7.O7.xX%xX%x5.x5.x5.x5.x5.x5.x5.VW.%% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% -H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.R_ R_ -H.-H.-H.*_ *_ *_ *_ *_ *_ *_ j% j% `^ `^ `^ $9.$9.$9.$9.Hu+8v.T}%T}%T}%l=&6R@s[.6e.g% g% *_ R_ -H.-H.-H.-H.R_ R_ *_ *_ *_ *_ R_ A^.A^.A^.A^.A^.A^.A^.A^.0c 0c 0c 0c 0c =_ =_ =_ 0c 0c 0c 0c 0c 0c 0c 0c -_ 0c A^.A^.A^.A^.X_ 6v@6% Hu+#9.cp.cp.#9.Hu+8v.PI.PI.PI.PI.PI.PI.PI.PI.QI.QI.QI.QI.QI.QI.J].<4 4% 6[ oh 61 2* Nq&V]@)b#m(#v4&c3 Oq&d3 {i&&;@K`%rt o8 Rd Rd Rw%5=$.E.w}@Hh+`m+n!&PR.&L+5P+Yx#w<@mo%qq@X,@|)#1)#}x@8o@Vk$pr%/9$ p$pr%&c$A0%|0#N@%4w+4w+R2@=1@=1@Ub+h/+h/+g~@g~@~}@~}@qX+qX+qX+X,@T)@Y_@Y_@3_+3_+7 @7 @O]+FC$)Q#)Q#)Q#)Q#)Q#)Q#)Q#@/$L#$L#$L#$L#$@/$0T+FC$-a$L~$}(%}(%}(%}(%L~$L~$5w+5w+5w+'/#'/#^B+^B+^B+7%%7%%7%%|(%4Y+B[#;N+a]@:J$KP#ks+ n+WJ$A'$=v$O-%f]@q<+/7+Wj Wj }_%s<$Pq&Qq&!N M).Rq&Sq&L>@Tq&Uq&Vq&Wq&j/.qV Do.2z.7).Xq&Yq&Zq&`q& r&.r&+r&@r&#r&$r&%r&&r&*r&=r&-r&;r&>r&(t iy%4Q%>b@[|@pM%u1$(7 5G@j@#-! .~ ,M =S u[$es$9E$${@ks+6O#Zm++Y.U.$uJ+kZ.`X.)X$Y(&Y(&Y(&O]$O]$M#$Uj$_g${f#_ +2I.U)@< +rK@Pw#!b#D:%,,$+{##D%~x%lh$`I$#B%#B%ED%ED%,r&'r&UH%*L%*L%*L%*L%*L%*L%*L%&E &E &E Kv Kv Eu Eu QC [A dB {A ^Y@Fu -E sG `:@:)@s! :,@,8 fw qG Xr C;$Jy$`a$)r&l>&^v%89@fb#I2@{`#6k@Qi$Qi$iR$yV#4}@[!$X>$!r&V6$*r$ !%gp%gp%V=$hp%hp%Kl$~r&6p&un&{r&5q&7q%l_&Mm$1Y#[{&8:$]r&[2$}%$sR%Uu#6A#^r&7q&#t%0q&Rj&_8&_8&z:$Y8&Y8&WS$y &-S$8k%~&&~&&~&&#t%8q&$t%q]$J$CU$k#$k#$>B+mX+=B+0e#AD+*>+8$@EM@DM@BU$Tv#k`%T@+'($[s#'r%+++0]@T-$-S+iq+a'$~V%~V%~V%@l&qq&7r&8r&9r&sc&0r&ar&xc&br&cr&dr&hK.=m&er&| #.r@Bg.lA.Va.<:.08.fr&!2.{2.gr&E{+hr&6b.*0.fr&ir&&D.&D.jr&kr&lr&k{+j4.yz.]%.f3.<..S` l4.!_.j,.l&.l&.A]. /.sd.j,.`^.sc.sd.@j.gm.<%.(_.;>.#$.s_.)t.}a.{{.O>.E7.[X E+.>> mr&Tv L&#nr&8x$z(@z@%E3$9T+K$+b8$XK+^^#>2+>B+P)@Y.@>2+8G+)K@AM@Ln$Kn$1#%CO@W.@{K@or&|{#7T+mo@K:+Y&+@#$hF$}{#BM@YK+w;@w;@w;@w;@w;@DD+DD+I@@<^#'_#ED@ED@ED@ED@Ae@ci@x9#:^#mb#mb#mb#X6$mb#kb#kb#X6$X6$mb#mb#:^#qg@UQ@8V@8&@mq@mq@^K@I@@<|+<|+[|+^^#[|+BD+J:+ov$;K@X.@H@@CD+CD+CD++:$+:$+:$+:$+:$<|+<|+<|+<|++:$~-+>2+h~+Y.@:|+q8+&7@8m@ze@_6$Dy$T`$/t#pr&2%$@@%'_$Kn$Kn$qZ@qZ@)I$/H$kF$d8$qn%qn%7G$`H%17$17$8|%}0$Rj$^m$ln$=7$W_#&h#%N@v@+5|+JR@.p &y d!+.s Ok 1u Yq Yq U-@R} T-@Q} 8j#Qw#8j#8j#Qw#_} _} 46 (} (} `V@P} )1 )d@(d )d@Wp&.] Hq&qr&rr&.q&Kq& q& q&sr&tr&,h&'h&IC.N+@E# MA.ur&/D./D.5e%5e%@g%Fc%#u%O4%u3$u3$x*$x*$X@$X@$%' %' {h&{h&~h&~h&>S%%' X@$x*$%' %' %' X@$X@$X@$X@$x*$u3$u3$u3$u3$u3$u3$u3$u3$&c%;~@*Z+ME+x*$=|$Eo+w*$Y@$Y@$KE#KE#NZ@NZ@+R@oA+oA+{! {! {! {! {! {! {! be+be+{! {! ]! 5A.5A.5A.+d++d++d+^b+PF+/D./D./D.Y@$Y@$+d++d+^b+PF+PF+PF+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b++d++d++d+Y@$Y@$'W+3&$+d+PF+/D.PF++d+Y@$^b+^b+^b+PF+PF+PF+/D.x8.9Y+be+be+be+be+be+be+be+be+be+{! {! {! {! be+be+w8.gA YY gA 8g.{! be+8g.5A.5A.5A.]! ]! 5A.5A.h]@v]#V!+V!+q)@v]#f!+f!+v]#]! ]! )> )> )> )> .d+)> Yt.{! ]! ]! ]! ]! {! {! ]! ]! ]! ]! ]! ]! ]! ]! 5A.{! be+]! Ea+$(+xc+5A.T_+]! 8g.be+Ea+$(+", "iI.iI.iI.iI.iI.iI.iI.Y6.H;@Y6.iI.U5.U5.Y6.6!.6!.6!.P7.H;@Y6.iI.ce U5.iI.Y6.P7.6!.6!.P7.Y6.iI.+h.+h.+h.d( d( d( ~% ~% d( d( d( d( d( d( d( d( l` l` l` l` l` l` l` l` -H.-H.-H.-H.-H.-H.-H.%% 3b m& m& m& C& u& !1.!1.$% $% T_ T_ T_ T_ ^j.T_ 3{ &) $% $% $% &) 5% f% 7% 7% 5!.5!.5!.5!.5!.5!.x5.x5.x5.x5.x5.O7.O7.O7.x5.x5.x5.x5.x5.x5.x5.VW.%% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% -H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.l` -H.R_ R_ R_ R_ -H.l` *_ *_ *_ *_ *_ *_ *_ j% j% `^ `^ `^ $9.$9.$9.$9.PI.Hu+xx.T}%xx.l=&Ay.QI.x3&*_ *_ *_ R_ R_ R_ R_ *_ *_ *_ *_ R_ R_ R_ R_ =_ 0c A^.A^.A^.A^.0c =_ =_ =_ =_ 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c A^.A^.A^.A^.X_ QB@6% Hu+#9.cp.cp.#9.Hu+8v.PI.PI.PI.PI.PI.PI.PI.PI.QI.QI.QI.QI.QI.QI.J].<4 %% 6[ oh V5 @* Tq+V]@vr&m(#Zb&Oq&d3 wr&{i&n< d9 cQ xr&Rw%y-$T-&@7#ud$j>@N_#n!&cW.lY#@Y.[`# @$w<@rX+Y)+X,@|)#3z@3z@}x@8o@0r$ p$ p$pr%km$A0%km$Fs%Fs%N@%N@%k %+B$+B$@ +@ +Z]$']$A1#V_#Yx%Yx%Yx%qX+mF$X,@T)@Y_@T)@O]+O]+L6@1/%/1&<7&;a$-y%;a$;a$;a$lS$'Q#W@+W@+W@+W@+'Q#ZX.f2%Gz$)=%-a$kS$-a$)=%5V+kS$5V+)=%5V+FC$Gz$f2%tD$c]%6/%_T#7%%gh$z(@r0&WJ.@Y.#Y.8a&M_#Z8%,n#i,$NM.D(@(R@n9+7O.XP.@<@yr&*p&zr&Ar&Br&Cr&Dr&Er&Fr&*H.18.6%.Ep.Do.Qa.Qz.Gr&Hr&Ir&Jr&Kr&Lr&Mr&Nr&Or&Pr&Qr&Rr&Sr&Tr&Ur&Vr&QK.^0+Wr&Xr&t! r[@WA $4@GJ%u1$^Y@6G@vR@tG EN 4z+HB$x'%7:%9E$HE+%l+x+%:g%L$&Yr&t1&7W.y{$y{$7W.H0%M=&L=&fh$7%%=i#{($pZ%+++!>+o%$cv$~f#Xo$u}@TO$V{$GC$V4+=o% J$ox$tj%DD%ED%#]&'r&2C%*L%*L%*L%*L%*L%*L%*L%u1$&E &E &E Kv Kv Eu QC aC%-f$ z z -E }g s&,s&'s&)s&!s&GL#6r&V &d5&wg#Ic&vg#/M Lz 1r@u! YA b~ ~ $WN%bE%b|$b|$Nt%*L%pM%Nt%*E }g wt cs ds i4#X:$IB$(,%H+@l~$+6$gA%$K$)_$Tm#m5$>B+=B+AD+j0+RK+Y.@8V@EO@%o%BU$Tv#n>%k^##q%E3$&K$~Q#+B%D:%-;%1c#:T%8|&~s&{s&.*&Tm&8r&-l&]s&^s&/s&(s&_s&:s&_.&N 5z.V9+R` 83.]2.-.#|s&1s&2s&7Z#3s&!0&Xa#4s&d;#5s&u%#yj#6s&v%#7s&$r@8s&9s&76#9D.5b.k4.!_.:%.l&.A].A].A]. /. /../.Nk.@j.]X an.fP.gb.@$.|E.)t.YF.rV !0.B6.0s&as&bs&z6 cs&*a@ds&qy#qZ.dG+N]$HQ$Z+$}0$4($w-$}8+yp+0G+R,@3 @[|+8G+V.@AM@Z{%1#%,_$DO@G@@w)$7k#re#re#re#|{#,2+nz#@#$@#$DI+X.@H@@8$@8$@8$@8$@8$@9$@'_#;v@;7@;7@9k@9k@ze@ze@ze@pg@x9#:^#:^#:^#:^#x9#x9#:^#:^#:^#:^#:^#:^#:^#Ae@UQ@UQ@UQ@<^#ly+-4+Ln#y9#<|+[|+X&+)_#36+J:+[|++:$+:$+:$<|+<|+<|+<|+<|+<|+<|+-B+y9#y9#-B+<|+>2+>2+h~+Y.@:|+q8+&7@kc@9k@gx$gx$FZ$/t#Ve%2%$)_$@@%Kn$>p$qZ@qZ@~J$)I$lF$d9$!H$qn%bK%7G$`H%17$AB%17$4($_a$ar$K[#D)+ja@R]+AQ@PP.JR@.p @p `W .s ZZ Qg '8 Yq Yq U-@R} c2 8j#Qw#Q} 8j#8j#Qw#_} 46 (} (} `V@WH QF#sR#)1 )d@.] es&Hq&fs&gs&`p&hs&is& q&js&ks&'i&'h&,h&'h&,% am.!c.P~ P~ S}%5e%@g%Fc%O4%3]&x*$x*$x*$X@$X@$%' %' %' ~h&~h&{h&{h&~h&>S%%' X@$X@$X@$X@$X@$X@$X@$X@$X@$x*$x*$x*$u3$u3$=|$=|$=|$Ic%;~@Pw%*Z+u3$2&$w*$vv+3&$Y@$KE#NZ@Jb#NZ@+R@)D+oA+{! {! {! {! {! {! {! be+be+be+be+be+{! {! {! ^b+^b+^b+^b+PF+PF+PF+PF+'W+'W+3&$Y@$^b+PF+/D./D.^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b++d++d++d+Y@$Y@$3&$Y@$+d+^b+^b+^b+^b+^b+^b+^b+^b+PF+PF+/D./D.x8.Lh+{! {! {! {! {! {! {! be+{! ]! ]! ]! ]! {! be+be+w8.`Y `Y 8g.be+be+8g.5A.]! {! {! {! {! ]! h]@v]#V!+V!+q)@v]#f!+f!+v]#]! ]! )> )> )> )> .d+)> i~ {! {! ]! ]! {! {! be+]! ]! ]! ]! ]! ]! ]! ]! 5A.{! be+{! 5A.Ea+5A.]! G|@]! gA 8g.xc+T_+", "ce ce ce ce ce ce ce ce Y6.H;@Y6.ce ce iI.H;@6!.6!.P7.P7.H;@Y6.Y6.iI.ce Y6.P7.6!.6!.P7.Y6.ce +h.+h.+h.d( d( d( ~% ~% ~% ~% ~% ~% ~% ~% ~% ~% l` l` l` l` l` l` l` l` m` m` m` m` m` m` m` d( N~.9- 9- 9- S& S& &% &% $% $% T_ T_ T_ T_ ^j.T_ 3{ &) $% |% $% &) f% v% 7% 7% 5!.5!.5!.5!.5!.5!.O7.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.VW.%% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% -H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.l` -H.R_ *_ *_ R_ -H.l` *_ *_ *_ *_ *_ *_ *_ j% j% `^ `^ `^ $9.$9.$9.$9.PI.Hu+4I%l=&l=&l=&M}.l=&M/.R_ R_ R_ *_ *_ *_ *_ af.g% *_ R_ R_ -H.-H.-H.-_ =_ 0c A^.A^.0c =_ -_ -_ -_ =_ =_ 0c A^.A^.X_ A^.A^.A^.A^.A^.A^.A^.A^.X_ X_ A^.A^.A^.A^.0c g% 6% Hu+#9.cp.cp.#9.Hu+8v.PI.PI.PI.PI.PI.PI.PI.PI.$;&$;&$;&$;&$;&$;&2P h% %% 6[ oh /= P6@ls&f=$EH+y:.ms&ns&|^ os&X: i4 yQ%ps&b[$y-$AO.AO.aF.HR.v8+Pt%oT.K$&K$&~.$K+@E[#w<@>/#Y_@T)@})#3z@3z@}x@8o@i%%Vy$Vy$L[#m~+>>+K[#RA$L[#=7$=7$D#$D#$D#$D#$&c$89$Z]$89$A1#A1#4V+4V+Yx%OX#rV$rV$X,@mF$T)@T)@qX+<7&nM%^1&^1&^1&D~&m6&(1&m6&(1&^ +6R+sF%sF%sF%Hw%;i#WS@@/$f2%0T+FC$L{$f2%6Q%)=%)Q#)=%0T+FC$L{$f2%Sd&c]%7R+_T#M=&R^$z'${~%U.$bI.vJ+9s%qs&mh#{T.qV@3O.9e+uo@CJ.1L.JR.-T%rs&ss&ts&us&vs&Yh+dV.yY.3C+18.i<.us.bH }-.R>.ws&d@@xs&ys&zs&As&Bs&Cs&Ds&Es&Fs&Gs&Hs&`h#ta L^#Is&WV#:` R4.Js&+~ Nt%$4@b~ >8@c.#vR@/0@$4@k$#-S r)$(<%AP$&W$v+%$I$SY$8e%Ks&0a&7u%O]$( +VN+/M$Ls&9M@6/%9M@&K$5V+tD$, $N]+N]+, $EU.3|+8M@d%%;{#Vo$3j+h!@1F$OO$l!$~@$PO$Lv%Ms&ED%3C%GJ%GJ%GJ%GJ%GJ%GJ%GJ%u1$u1$&E &E &E Kv Kv PC Uw -f$.z z }g }f [,$+x+GT Y~#wb Sr +9 X:@yK o{ aA%v@`I+Y4@ 7@6k@6k@{`#M<@>:@;]@!r&!r&Ps&Qs& !%gp%Rs&hp%~Y$~Y$Kl$~r&Ss&{r&{r&5q&Tr$sk$]c@9&$Ts&Yg$Us&pD@pF@rP+8{$`r&Tu#Vs&>_$r]$:W#Ws&Xs&2[$Rj&Rj&WS$y &-S$^R$$t%]R$5J$5J$.s&5J$)+&9p&Ys&fk$IV+Zs&`s& t&.t&+t&@t&#t&$t&%t&&t&OA@*t&=t&Rp@-t&;t&>t&,t&'t&Ic&Ic&cj#^0#vy ^M %E 1r@>8@S&&bE%/$&%B%%B%GJ%pM%*L%Nt%}g -! ds uG Yr CV#`m+ @$`^@T*%)t&n4&!t&!_%Z/$]k#9=@0G+AD+SK+.^$+N+/w+'_#<^#*n#W~$T!$6P#R!$b!$@/$RK${(%~_%dv$jx@*S )P ~t&{t&{t&]t&^t&^t&/t&(t&_t&:t&.+k.;(.T'@~d.J{+u_@#].mt&nt&WH%M6@ot&GR@*@#`+$jZ.#f&m6&>a$%6$l1@pt&ko@+:$,T@x;@w)$7G+GO$GO$DO@6&@6&@G@@DM@w)$j)$j)$w)$or&or&nz#nz#nz#CM@{K@+:$<^#UQ@UQ@UQ@UQ@UQ@ci@ci@pg@ze@8m@4~#3~#4~#4~#om+3~#y$+5~#X<#5~#y$+y$+3~#3~#4~#y$+5~#5~#X<#pg@Ae@;v@GD+*t@*t@*t@26+26+yp+y9#<|+<|+)_#36+)_#BD+-B+-4+-4+-4+-4+ly+ly+ly+ly+-4+Ln#26+26+Ln#-4+>2+>2+h~+/w+e[+&7@*7@kc@9k@,e%gx$T`$qt&K.%=>$!_$UR$CO@CO@V.@AM@)I$)I$lF$!l$!H$qn%bK%bK%`H%`H%AB%17$J$+,p$Sj$>>+5)#:X@K9#E2&*@#1v@pB.!4+3r }/ ro 1u '8 Yq Yq Yq U-@c2 8j#Qw#Q} Q} 8j#Qw#_} 46 46 (} `V@WH WH P} QF#)d@rt&st&Hq&fs&tt&hs&hs&Kq&Kq&ut&vt&'i&Im IC.5^ {@ F(.Bj.PF+/D.5e%5e%@g%]1%Fc%#u%x*$x*$X@$X@$%' %' %' %' >S%~h&{h&{h&{h&~h&>S%%' x*$x*$x*$x*$X@$X@$X@$X@$%' %' X@$x*$=|$2&$Eo+Eo+;~@Pw%Pw%Pw%2&$Eo+w*$w*$'W+Y@$KE#Jb#Jb#Jb#+R@)D+oA+{! {! {! {! {! {! {! be+be+8g.8g.8g.8g.w8.w8.PF+PF+PF+PF+^b+^b+^b+^b+Y@$+d++d+^b+PF+PF+/D./D.^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b++d++d++d+Y@$Y@$+d++d+Y@$Y@$+d+^b+PF+PF+^b+PF+PF+PF+/D./D.P~ y{ 'g@]! ]! ]! ]! ]! ]! ]! {! ]! 5A.Ea+Ea+5A.]! {! xc+]! 8g.w8.be+{! {! be+]! {! be+8g.8g.be+{! M8@v]#V!+V!+q)@v]#f!+f!+v]#]! ]! )> )> )> )> .d+)> i~ be+{! ]! ]! {! be+be+]! ]! ]! ]! ]! ]! ]! ]! 5A.{! be+be+]! 5A.{! 8g.be+w8.`Y w8.{! ]! ", "Ml Ml Ml Ml Ml Ml Ml +n *=.O~.O~.Ml @n *=.Ml 6!.6!.6!.P7.P7.H;@H;@H;@ce Y6.P7.5!.5!.P7.Y6.ce +h.+h.+h.d( d( d( ~% ~% ~% ~% ~% ~% ~% ~% ~% ~% l` l` l` l` l` l` l` l` m` m` m` m` m` m` m` d( *- c& *- c& &- &- ^{ ^{ |% |% >_ >_ >_ >_ U_ >_ 2{ &) $% |% $% &_ v% I> %% r: r: r: r: r: r: 6!.Hu+Hu+8v.8v.VW.9, 9, G6.VW.VW.VW.VW.VW.VW.VW.VW.%% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% -H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.1% -H.1% -H.-H.m` -H.R_ *_ *_ R_ -H.m` *_ *_ *_ *_ *_ *_ *_ *_ j% `^ $9.$9.$9.$9.$9.$9.PI.PI.$;&4I%l=&l=&xx.T}%1% 1% 1% 6% i% h% h% h% s3.<4 h% 6% 1% WW.WW.WW.-H.R_ *_ g% g% *_ R_ -H.-H.-H.R_ *_ g% af.QB@4=+A^.A^.A^.A^.A^.A^.A^.A^. l.X_ A^.A^.A^.A^.0c R_ 6% Hu+#9.cp.cp.#9.Hu+8v.PI.PI.PI.PI.PI.PI.PI.PI.PI.$;&2P $;&2P 2P 2P h% &- 6[ ^_ ^= Py.BH+)*$Q/ 8i./#3|+O]+f$@=1@iB@iB@3z@}x@dD$A+%i%%=7$_-+>>+K[#RA$M[#M[#M[#M[#M[#7I#M[#M[#km$+*+89$|0#}7$k %C/%k %rS$Qy$IR$]8$-o$4w+0/$tp%E}%zt&zt&zt&d2&6v$m3&KG%6v$7_% b$] +0$$$W$$W$$ +YX.n~+M$++*+}7$}7$}7$A1#-o$-o$a/$a/$tp%tp%tp%4V+CA$o)%)Q#)Q#c]%&K$n~$FU.(,%Xx#At&*N.Bt&^V.KW.7 J{.Ht&GB.Xb#x^#}-.It&#R+Jt&Kt&Lt&Mt&Nt&Ot&Pt&Qt&wd+Rt&St&q7 q7 w%Tt&SC Ut&JT.b,+k<.Ft&9=&x! HT yd%TT@/0@/0@/0@$W@H)$zd%m!$q)$q)$<[%OQ$_ %9P#&c&8H+ez%t.&L/&7H+YF%`^@( +U-$+++9M@f2%-i#]f#2_+'r%g<#]f#88$^B+aT+A[#!f#'Q+4G$XR$y_%ET$yd$ox$tj%Lv%3C%%R$Nt%$B%Nt%Nt%^G%^G%^G%.y .y .y Lv &E Kv Kv PC 0C%-f$.z ^Y@Kv Z;$1i ,M l$#x`#&W@S:@+9 >b@<|@CR@NB%Vt&H0%Wt&_%+ko&%5@6}@BT#Y4@11@`6@M<@>:@;]@;]@X>$X>$Zu$*r$Kp$F5&gp%V=$hp%hp%sn&>E$6p&Xt&un&Yt&Zt&~c@{c@M2&bk% S$Us&)x@oF@|A##F#sR%Tr#sL$J1&Hk&A}$!+&>1$RU$aH$`t&`t&VS$VS$VS$rm&rm&{R$~Q$sY%y.&vZ%}[$ u&.u&+u&@u&#u&$u&%u&&u&*u&=u&-u&;u&4j&V}&>u&zd#c`%,u&'u&)u&!u&'t&{m#Ic&}c#ew a~ @~ t! _|@/0@S&&/$&$B%Nt%Nt%^,$|N%0K%j!$[,$nI@|d${)#CV#ck#:g$M=&~u&{u&p%&]u&Of%5:%Z/$Tm#6&@cB@X.@@N+(8$ib#ly+qt&:a$j)$T!$av$R!$[6$X@+]J$&i#x@%p1#Aj$CN r[@je&wf&Wm&Wm&Vm&Vm&0r&0r&^u&/u&(u&_u&:u&S%%' >S%{h&0, 0, {h&>S%%' x*$x*$x*$x*$x*$X@$X@$X@$~h&>S%%' x*$=|$Eo+w*$vv+*Z+Pw%;~@;~@Eo+w*$w*$w*$'W+3&$KE#Jb#Jb#Jb#+R@KE#oA+Lh+Lh+Lh+Lh+Lh+Lh+Lh+9Y+9Y+x8.y{ y{ .s.ll.ll./D./D./D.PF+^b++d++d++d+/D./D./D./D./D.PF+PF+PF+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b+^b++d++d++d+Y@$Y@$^b+=|$u3$x*$x*$=|$Eo+vv+Eo+Eo+Eo+Eo+w*$w*$vv+vv+;~ 5A.5A.5A.5A.5A.5A.5A.{! ]! Ea+xc+xc+Ea+]! {! G|@xc+]! {! ]! 5A.5A.{! {! be+w8.gA gA w8.be+{! v]#V!+f!+v]#v]#f!+f!+v]#]! ]! )> )> )> )> )> )> i~ be+{! ]! ]! {! be+be+]! ]! ]! ]! ]! ]! ]! ]! Ea+]! be+be+{! {! 8g.gA ui pj `Y gA gA gA ", ":j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.:j.j% 5!.6!.H;@H;@H;@H;@H;@Y6.Y6.iI.Y6.Y6.H;@6!.6!.vk d( %% 5% 5% %% d( vk d( d( d( d( d( d( d( d( ~% d( +h.d( %% 4% %% ~% 4% 4% %% ~% ~% d( +h.+h.r: *- r: *- %% %% %% %% &_ &_ 3{ 3{ d= )= V_ )= d= $% $% $% $% $% $% $% &5 f% 4% ~% d( d( ~% ~% %% r: r: r: r: r: r: r: Ml r: x% j% r: Ml *=.*=.4% 4% 4% 4% 4% 4% 4% 4% %% %% %% %% %% 4% 4% 4% =_ =_ -_ -_ ;_ 2b l` m` 1% 1% 6% 8v.i% Hu+h% h% *_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ *_ i% $9.Hu+Hu+Hu+Hu+Hu+Hu+VW.8v.Hu+PI.Hu+VW.G6.X)@xX%xX%xX%xX%xX%xX%xX%xX%O7.xX%N7.M7.M7.N7.xX%O7.l=&^q%^q%2P }n&}n&2P ^q%}n&J].`d#2P ye#}n&J].2P 4=+7v@X_ A^.A^.X_ 7v@7v@=_ 0c 0c A^.A^.X_ 7v@4=+s3.#9.#9.PI.Hu+Hu+8v.8v.cp.#9.#9.PI.Hu+Hu+8v.8v.i% i% *_ i% *_ *_ *_ 5% ^* h# F- 8 +_>+zu&Au&vr&_+$Bu&T{ P~&Cu&AS+30 4)@h:&p$&vf@aT.ud@Du&ER.qL.YJ.-T.s!$0Z+Ow#q>#q>#.B%Y_@8G#P@@MX.V##f$@B1#/d$wy+k %k %|0#|0#km$4[%_-+e$@e$@~I$~I$N[#`z$N[#~I$=7$=7$/a$=7$/a$=7$/a$=7$^v$Gx$ p$Zz$pr%L[#80$Wk$ar$]m$%u$%u$%u$%u$nw$Ms$Ms$09$J$+T@+('$T@+J$+09$(R#i)$7P#[x@B)+l~+N[#7I#M[#M[#&c$&c$&c$&c$&c$&c$k %N@%&W#&W#=h&`}&C/%}7$2=$;i#wp&fh$Uj$f<#: +~>+K+@F2&;{#F)$Hy$W&&Eu&Fu&Gu&Hu&W@&L).Cr&Iu&}`.Ju&P'@a5@Ku&Lu&oO u4.,X+Mu&Nu&Ou&Pu&Qu&Ru&Su&c[@Tu&m6#Dh UC Ku fw yK ^A =a&oc&Uu&Vu&Wu&Xu&Yu&Zu&+>$Lv%'8@L7&50&Wx RL%`G$PH$^Z#W.$VT@#] d)%HT L%$`u&i+% v&Xe&yj&yo+3#++]%J+@@++pZ%, $:'$5W.D)+5h#5h#>4+t8+O:+-i#Gz$aT+A[#-W+2w$+.@}g$B(%DG%Zv%ZI$|N%4C%2C%1(&%B%gB aC%Vw y zz%zz%]G%cC%.y .y *E *E .y Lv QC vR@vR@Eu 5'$Y;$E'$es 1|@WA a~ a~ WA YT@.v&+v&@v&_y%1++c*+#v&Wi+N3+48+I2@31@5}@%}@BT#%}@Tl$Tl$21@`0$`0$3(@F4@F4@F5&Kp$B6@'f&'y$O4&I*$)c@Gs@oD@Om#EX+mR+$K@sM@Xr#^s#C;#q9#s7$_S%kw%FH%PG#Zj#JT$RS$ v%$v&CH$CH$~T$Fi%Fi%~T$~T$4F#%v&kR%Gl$46%&v&*v&=v&-v&;v&>v&,v&'v&)v&!v&~v&{v&]v&*=&MN#wl@^v&/v&(v&NY%_v&e4&:v&g@#,{ tR@.A@Rn&9V !8&k!$i!$WN%d.#u1$^,$0K%Zv%UB$#n!&45%iZ.a'&[v&}v&{t#|0$zw$BU$DO@6$@DM@w)$jq#zw$bN$FO$=>$j#$'_$bN$9~#B($D)+L%#e=@|v&LB@nm@7r /d `O%1v&2v&3v&4v&5v&6v&7v&8v&9v&}B#0v&B@.av&.@+_:.bv&qN.cv&dv&{Z@[p.kj+9m#ev&+=#.=#fv&gv&gv&hv&iv&jv&kv&lv&mv&nv&ov&pv&qv&rv&:E@sv&tv&Pd@Of@x4 ]0 Bg#uv&Hg.u#@.n$tY+8#.Z..o^+&:+j;.T%.z6.z6.3[#p^+vv&p^+bn.',+]f.F}.!e.G1.++.c#.wv&j< xv&&/&sr%h)$T=$Pn$wy+6c#''%~}%{ +Vt+_3@=1#SF@or&f^%g^%_Z$e^#(`#Tm#8V@K@@qg@K@@qg@my+8V@my+ly+/w+-4+:|+-4+/w++:$Y.@;m+H:+&7@[=@b~@QK+X{@y@@d^@uI+!B+WA+M,@Jn++9G+9G+R)@R)@YK+4G+iX+8e#!l$c9$,p$,p$%K$a8$a9$3:%Yk$zA#H_@VX.}f+tm#`|#3|+Rs%Nj#2O.:N.yb :: h< Jf Mz v[ w' Q1 kr#kr#g2 &f#:} bP@zC {#.{#.{#.b>#c1#_r@6u#'G `o@Qn&/u zv&ts&Mq&+q&&p&&p&|,.vt&(7&(7&s3&h6&Yb&!. o{+5A.({ ll.y{ ^b++d++d+^b+PF+vv+w*$2&$x*$>S%0, Av&Bv&{h&~h&~h&>S%%' %' X@$X@$Be+Be+Be+@d+@d+@d+z$$z$$@d+@d+@d+z$$z$$mq+mq+mq+*Z+*Z+Pw%Pw%=|$2&$2&$2&$'W+'W+PC#Ae+Ae+KE#+R@NZ@Hj.PF+^b+PF+P~ P~ /D.^b+/D.P~ P~ uq.P~ PF++d+Y@$Fc%]1%@g%@g%@g%Fc%#u%3]&]1%@g%5e%&0+&0+5e%@g%]1%i|$i|$i|$i|$i|$i|$i|$i|$z<$z<$i|$i|$i|$z1$z1$]1%mq+fJ%fJ%fJ%fJ%fJ%fJ%fJ%lx@lx@lx@fJ%gJ%gJ%Hc%Ic%8' {! ]! Ea+Ea+]! {! be+]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.]! ]! ]! {! {! {! {! {! {! {! {! {! {! {! w8.'> be+{! ]! Ea+xc+xc+{! 5A.Ea+5A.{! 8g.be+)> )> )> )> )> )> )> )> )> ZY Yt.6g+)> ,v.ZY i~ 6g+{! Ea+xc+Ea+be+w8.be+]! 8g.5A.$(+$(+5A.{! ", "ke ke ke ke ke ke ke ke ke ke ke ke ke ke :j.7% 6!.P7.H;@Y6.Y6.Y6.H;@Y6.Y6.Y6.Y6.Y6.H;@P7.6!.vk +h.~% 4% 4% ~% +h.vk d( d( d( d( d( d( d( d( ~% d( +h.d( %% 4% %% ~% %% %% ~% ~% ~% ~% d( d( r: r: r: r: %% %% %% %% &_ &) 3{ 3{ d= )= V_ )= d= $% $% $% $% $% $% $% &) $% |% |% |% $% &_ ~_ %% %% %% %% %% %% %% %% d( %% 5% 5% ~% d( d( %% 4% 4% 4% 4% 4% 4% 4% 4% 4% 4% 4% %% %% %% %% %% -_ -_ -_ ;_ ;_ ;_ -H.-H.1% 1% 8v.8v.Hu+Hu+PI.h% *_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ *_ i% Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.PI.Hu+8v.VW.9, xX%[M@[M@[M@[M@[M@[M@[M@c+#[M@I1.L7.L7.I1.[M@O7.l=&l=&l=&$;&91+s[.$;&l=&91+$;&$;&QI.s[.s[.QI.`d#4=+X_ A^.A^.A^.A^.X_ 7v@0c 0c 0c 0c 0c A^.A^.af.h% PI.PI.PI.PI.Hu+Hu+Hu+PI.PI.PI.PI.PI.Hu+Hu+Hu+5% 5% *_ *_ *_ *_ 5% Q_ &% K$ U0 8 +f6+Cv&Au&2; l1.C'+T{ =I+Cu&AS+30 4)@h:&v@%Dv&7v#Du&D9&f5%`@+.+@P@@8G#HK#9!$9!$L%#L%#HK#HK#8G#P@@8G#HK#L%#|x@QB$tp%wy+3)#k %|0#D#$D#$d=@d=@7I#7I#)7$)7$)7$D]%L[#=7$=7$=7$L[#L[#L[#L[#/v$/v$CO#ln$]m$ar$>b$Sj$-c$-c$^m$5G$5G$^m$a9$a9$b9$b8$47$e;%b>%pw$d8$00$N;$:{#N[$N[$:{#aD#z4#z4#4d$4d$Wk$M[#M[#M[#M[#M[#=7$=7$RA$Zz$4v$(a$80$Q'$Y(%gZ.'Q#1/%-i#LD+pZ%!>+z(@B[# .@=`$Kg%_l%|*&Ev&Fv&Gv&Hv&W@&M).Iv&Jv&wm@Kv&P'@'_&Lv&oO :^+H7.Mv&Jr&6;#Nv&/(#{c#Ov&Pv&'z$(|$u) -M )J vR@Qv&Rv&Sv&Tv&Uv&Vv&Wv&Xv&Yv&Zv&R'#`v&;k&RL%L7&4r&Ya&^}&hd& w&.w&`G$~ $/0@TT@2|@Rn&o]&<=&Hj&F~&js++w&|j+@w&T.$9]@Y@+]f#5W.D)+D)+5Z.>4+>4+5h#ZR#@/$FC$7%%8M@w[#$Q$A(%#w&r<+Vv%Zv%H%$ED%Ms&1(&bE%gB 0C%*B%){&+D%+D%zz%cC%.y u1$*E *E u1$&E Eu vR@vR@Eu &E u1$Kv vR@[|@(|@^|@@~ ^|@YT@$w&%w&&w&0W.S.$U[+bj$*!@0>@P3+x=@%}@I2@I2@X>$w^@Tl$8G$Ab$Ab$K,+J,+gn$gn$A6@A;$z;$U>$&r$Ph%&r$*w&JQ@yG+FX+2V@mR+vO@vO@mR+Xr#6e#ul&*N%RC$7#&w&,w&'w&)w&!w&~w&{w&]w&^w&/w&(w&!v&_w&3+&:w&#uz#fI#3e%3Q%wT%kU%QO$WN%d.#=E ZI$7'$WH%i~@2w&nr&kx$h0$u1#5O#5c#y{$6x%3w&m%&bA%cs%zw$7G+7G+G@@G@@&n%&n%zw$cs%4w&5w&v_%4:%Om&av$te#6)#L%#Q_#r1$Os$zr$G> Hv 3`@6w&7w&8w&9w&0w&aw&bw&cw&dw&qN.ew&fw&gw&&N =w.5z.Tp.hw&iw&jw&kw&lw&mw&nw&ow&pw&gv&qw&rw&sw&tw&uw&vw&ww&xw&yw&zw&Aw&Bw&Cw&Dw&@+$Ew&Fw&Fw&Gw&p*$Hw&Iw&`v%Jw&Kw&D*.Lw&Mw&SS b3+f{+z6.q4.q4.G7.Nw&vv&vv&Gr&^f.$j.G#+[-.S>.s4.d=+ZT#Ow&]*@Pw&C]#E~%Qw&Pq@V)%=7$8]+/-+`&+cH#[3@:3@>5@g^#zw$#@%'_$=>$Rw&:^$7&@qg@L@@L@@L@@K@@K@@K@@K@@e^@(w+&N+S.+S.+S.+S.+S.+2V+vI+*4+[=@z@@fD+z@@WA+uI+(T++w+A$+6X+Jn+)P+iD+G)@$q+iD+Jn+6X+cr+cr+gp+er+er+[R+[R+%7@%7@%7@@7@6}@jK@+I@+I@+I@ I@ I@pm+pm++5$ea%9@8M@~q$vv%w'@Re *@.h< yy Mz 2' 2' f2 }Q@W8 W8 &f#&f#bP@zC {#.Vw&{#.c>#-f#,{ ,)#[Q%7u#FP#/u zr&ts&yu&%p&_o&_o&@q&2l&S%~h&{h&>S%>S%>S%%' %' %' %' %' Xw&Xw&Xw&Be+Be+@d+@d+@d+@d+@d+@d+z$$z$$mq+mq+mq+*Z+*Z+Pw%Pw%=|$2&$2&$2&$^b+^b+NZ@NZ@NZ@NZ@+R@NZ@7g+@g%]1%@g%S}%S}%5e%]1%@g%5e%S}%S}%S}%5e%]1%Fc%Fc%]1%@g%@g%@g%Fc%#u%O4%]1%@g%5e%S}%S}%5e%@g%]1%i|$i|$i|$i|$i|$i|$i|$i|$z<$z<$i|$i|$i|$z1$z1$]1%fJ%)p#fJ%)p#fJ%)p#fJ%)p#lx@$x+lx@)p#gJ%+X+gJ%Ic%8' {! ]! 5A.5A.]! {! be+]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.]! ]! ]! {! {! {! {! {! {! {! {! {! {! {! be+be+{! {! ]! 5A.Ea+Ea+{! 5A.Ea+5A.{! 8g.be+]! )> )> )> )> )> )> )> )> i~ )> ]$@6g+Yt.i~ )> ]$@{! 5A.xc+5A.be+8g.be+]! 8g.5A.$(+$(+5A.{! ", "ke ke ke ke ke ke ke ke ke ke ke ke ke ke :j.O~.H;@Y6.iI.iI.iI.Y6.Y6.Y6.Y6.Y6.H;@H;@H;@P7.P7..h.vk d( ~% ~% d( vk .h.d( d( d( d( d( d( d( d( ~% d( +h.d( %% 4% %% ~% d( d( ~% ~% ~% ~% %% %% r: r: r: r: %% %% %% %% &) &) 3{ d= d= d= V_ )= d= $% $% $% $% $% $% $% 8c 8c 8c 0' $% &_ n3 W_ %% %% %% %% %% %% %% %% ~% 4% 5% 4% ~% ~% 4% v% 4% 4% 4% 4% 4% 4% 4% 4% 5% 5% 4% 4% %% ~% ~% d( ;_ ;_ ;_ ;_ ;_ -_ R_ R_ 6% 6% 8v.8v.Hu+Hu+Hu+i% *_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ *_ i% Hu+Hu+Hu+Hu+Hu+Hu+Hu+cp.#9.PI.Hu+Hu+Hu+Hu+PI.xX%xX%xX%xX%xX%xX%xX%xX%O7.xX%N7.M7.M7.N7.xX%O7.l=&xx.xx.4I%QI.91+$;&l=&QI.$;&$;&91+v7+v7+QI.^q%af.A^.0c =_ =_ 0c A^.A^.0c 0c 0c =_ =_ =_ =_ R_ i% Hu+Hu+PI.PI.PI.PI.PI.Hu+Hu+Hu+PI.PI.PI.PI.PI.5% 5% *_ *_ *_ *_ 5% Q_ ^{ J$ dc 8 +U<+Yw&l) 2; /|.': T{ =I+Cu&AS+b$Sj$Sj$Sj$y4#S5+Dj$Dj$Dj$Dj$Ej$,p$b9$b8$_8$37$pw$pw$5($00$BT$H_@H_@H_@N[$:{#_{#z4#)g$4d$Wk$Wk$M[#M[#M[#M[#~I$7I#Wk$Wk$ar$Tj$K#$K#$g'%$ +YX.x1#`a$;i#]f#Y@+o%${f#4Y+w[#T@&C%%L$&Zw&`w&Fv& x&.x&+x&@x&8K.#x&Vb#a5@'_&5x `q@J7.$x&%x&&x&*x&=x&-x&Pf@49 /0 Nv#`v%:e -! [A k,$;x&>x&,x&'x&{k&)x&!x&~x&{x&]x&^x&/x&(x&6T$_x&]}&]}&0|&:x&4r&8C#8T$4+>4+~($2=$;i#WS@9M@o%$`+$5O#f7#A-$iF#Ss%UB$6'$#B%Lv%F'$%B%gB 0C%*B%*B%zz%zz%]G%cC%.y u1$5'$5'$&E &E Kv Eu Eu Kv &E &E Eu Eu $4@<|@:|@(|@/|@4|@o)$}x&+v&LA%F~%|x&;!+1x&A=@@q+G,@%}@31@`0$W>$3(@*3@Ab$Ab$Ab$3(@3(@K2&K2&A6@A;$B6@U6$&r$w<#%9$*w&94+92+[=#82+xF@wO@wO@,x@xF@bB@P4&L($(I$CD$/X$4V@2x&V$$8+$yZ#Zj#P!#kY$C3#^@%8I%`G#~5$3x&3x&KX+H3#4x&5x&6x&7x&8x&9x&0x&ax&bx&cx&dx&ex&fx&gx&F%.+sr%ci%GK$G[#@++)`+0M@[v&m%&_$&n%&cs%TR$W.@x;@CD+H@@7G+7G+TR$o%&jx&kx&*>$P.$M^$Q.$k[+0/$SH#u1#Ns$26$=0@X:@Lv W!&lx&mx&nx&ox&px&qx&rx&sx&:g.tx&ux&vx&>9#xf.fh.5z.(d.g;#~Z@E7@Yd@pA.;0.wx&a##xx&yx&zx&E^#Ax&m<&hK#Bx&Cx&Dx&Ex&Fx&Gx&Hx&Ix&Jx&Kx&Lx&Mx&Nx&2j {d 4n Ox&/V#d1#Px&Qx&VO+Rx&mU X%.f{+$1.%:+A6./:+Sx&>5.Tx&}>#I}.4%.Qo+rx@T>.[^+|w.c/.&@.Ux&Vx&{3%dV$Q!%Wx&aS%D#$`&+Ux#$J.%).$ci@0$@0$@0$@0$@0$@0$@e^@e^@6T+L@+q8+&7@*7@*7@*7@z@@y@@4X+4X+uI+PK+WA+A$++w+Ft+cr+!P+fp+fp+lm+)P+)P+iD+fp+fp+fp+!G+!G+:o+km+:R+v~@v~@|T@|T@|T@>]@.s+d9@d9@$I@$I@+I@+I@*K@xM@ I@yv&g9$hY#+2 @5&@WK+_P+_P+Wx$qw$,p$,p$L1#ti$Uw&#cv$F2&6O#LR.V} F`+h< 1u 1u k8 k8 x' eI#$8 |m &f#&f#bP@zC {#.Vw&{#.0q#_r@>)#it@Xx&-)#d~ Yx&Zx&ts&ut&`x&yu&(o&ks&2l&Xb&Ww&u9&4/ y&O4 G(.be+({ ll..s.x8./D.PF+/D./D.x*$x*$x*$x*$x*$x*$x*$x*$X@$X@$X@$X@$%' %' %' %' .y&.y&+y&+y&Xw&Xw&Xw&Be+@d+@d+@d+z$$z$$mq+mq+mq+*Z+*Z+Pw%Pw%=|$2&$2&$2&$uq.uq.Hj.3K@Jb#Jb#+R@KE#7g+@g%Fc%]1%5e%S}%5e%]1%Fc%]1%@g%5e%5e%5e%@g%@g%]1%]1%@g%@g%@g%]1%#u%#u%]1%@g%5e%5e%5e%5e%@g%]1%i|$i|$i|$i|$i|$i|$i|$i|$z<$z<$i|$i|$i|$z1$z1$]1%>H%gJ%>H%gJ%>H%gJ%>H%gJ%z$$lx@mq+fJ%mq+gJ%>H%2&$Lh+{! ]! 5A.5A.]! {! {! ]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.]! ]! ]! {! {! {! {! {! {! {! {! {! {! {! ]! ]! ]! ]! ]! ]! ]! ]! {! 5A.Ea+5A.{! 8g.be+]! )> )> )> )> )> )> )> )> )> 6g+jy.]$@)> )> 6g+]$@{! 5A.Ea+5A.{! be+{! ]! be+]! Ea+Ea+5A.{! ", "ke ke ke ke ke ke ke he he he he he he he m` Lv.Y6.iI.iI.ce iI.Y6.Y6.Y6.Y6.H;@H;@H;@H;@H;@Y6..h.vk +h.d( d( +h.vk .h.~% ~% ~% ~% ~% ~% ~% ~% ~% d( +h.d( %% 4% %% ~% +h.+h.d( ~% ~% %% 4% 4% r: r: r: r: %% %% %% %% &) &) d= d= d= d= M= d= d= $% $% $% $% $% $% $% 9c 8c 0' |% &) ~_ n3 &5 %% %% %% %% %% %% %% %% %% 4% 4% %% ~% %% v% w4.4% 4% 4% 4% 4% 4% 4% 4% f% f% 5% 4% %% ~% d( +h.he 2b 2b ;_ -_ -_ *_ *_ 6% 6% 8v.8v.Hu+Hu+Hu+i% *_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ *_ i% Hu+Hu+Hu+Hu+Hu+Hu+Hu+cp.PI.Hu+VW.VW.8v.PI.#9.xX%xX%xX%xX%xX%xX%xX%xX%O7.xX%N7.M7.M7.N7.xX%O7.4I%xx.T}%l=&$;&QI.$;&l=&$;&$;&$;&s[.v7+v7+$;&~(.af.0c =_ =_ =_ =_ 0c A^.0c 0c =_ =_ -_ ;_ ;_ -H.6% 8v.Hu+Hu+PI.#9.#9.cp.8v.8v.Hu+Hu+PI.#9.#9.cp.f% f% g% g% g% g% f% y% Q_ (* WG '!. c R]@@y&#y&}j ': T{ >I+Cu&AS+4)@e9 )!%5I%T~&&'&Du&!Q.f5%&[@x=$CU.MX.V##f$@g&@B1#B1#B1#B1#B1#B1#~=#~=#|x@.v@OX#-o$]8$]8$ns$ns$CM#CM#:$%:$%O@%L>%C;%C;%C;%B4#M[#D#$M[#M[#M[#M[#Wk$Wk$]m$]m$]m$ar$>b$Sj$Sj$=k$y4#y4#_a$Dj$Dj$_a$,p$,p$b9$b8$_8$47$d8$d8$5($Wx$:8$H_@k7$k7$H_@:{#7o@z4#)g$)g$ar$Wk$Wk$M[#M[#M[#~I$N[#1r$,Z#~}%%*$*W#25%iq#Q4$M{$ l#m~$E3$'r%9>+Ap#+++3Y+z(@y&,y&'y&)y&=b =b QW@^V#<)@T^#]G%Ek&!y&~y&{y&]y&^y&/y&(y&_y& o&:y&Ap&!+z|+*s+,'@&E+%}@31@lt$2r$>q$>q$Ab$Ab$)x$3(@Na$K2&K2&*'$A6@tk$U6$&r$w<##8$v6+a4+94+w6+94+$9$^z@Zg$xF@Uu@$9$uU#P4&O2&N3&R1$R1$|'#Ka$Q$$V$$9p#Uj#Zj#JT$6y&J|#KO#KO# H# H#)v#7y&8y&9y&0y&ay&by&cy&dy&ey&fy&gy&hy&iy&jy&Id&/J ky&ly&my&ny&$7&oy&Bd#gj#jE#MN#9u#,)#k] YT@k$#w~$TT@aE%py&bE%oF%NL%~x%d!$LJ%@,&I^$G[#S2@88$!V@A2$)t&~t#n%&n%&cs%TR$W.@x;@ZK++:$^^#8G+~K@bN$I$+|0$ .&4_#>[#>Q#DA$-o$wx$dE%{U+AD%x'%k$#d.#/A qy&ry&sy&ty&uy&Ci&vy&{^@wy&xy&}k&=P.-_.;3+9O 5z.=w.DU Uq.yy&zy&Ay&By&Cy&}3#Dy&Ey&IV#Fy&>T#Gy&Hy&f4#-J%Iy&Jy&Ky&Ly&My&Ny&Oy&Py&Qy&Ry&Sy&Ty&Uy&~A T^#yu Wr {A Vy&.-'.9k.Xy&t1.JB.Uh.rx@I}.vi@V`%9<@Yy&Zy&Uv%`y&LB@TU%j2@sz#2+$HK#K[#eZ.8Z.zr+DO#A]%_3@EA#Tv#zw${]$!_$2%$O&$J.%T`$ze@b~@b~@b~@b~@b~@b~@b~@b~@L@+M@+&7@+5@&7@+5@+5@PK++w+6X+A$++w+(T+cr+fp+gp+~G+er+:o+:o+km+km+'P+!G+!G+!G+lm+'P+'P+G,@G,@S;@;]@;]@>:@>:@>:@M<@N<@p{$^u+^u+ z& z&#I@#I@+I@>v@jK@.I@i8$(6$->$->$y$+M)@A$+A$+A$+A$+0y+0y+WA+1V+1V+1V+5T+5T+QK+Il+Il+,i#4T+B@@3T+_|+d[+6Z+L@+X{@b~@5~#X<#.z&9%$/=$x9#4 @=B+9G+9G+x)+x)+5G+R,+@#$hF$u_%*6$_8$,p$,p$L1#pi$|l&S%>S%%z&%z&%z&.y&.y&+y&+y&+y&@d+@d+@d+z$$z$$mq+mq+mq+*Z+*Z+Pw%Pw%=|$2&$2&$2&$P~ P~ 3K@3K@Jb#Jb#+R@NZ@o8$]1%Fc%]1%5e%5e%@g%Fc%Fc%Fc%]1%@g%@g%5e%5e%5e%@g%@g%@g%@g%]1%]1%Fc%Fc%]1%@g%@g%@g%@g%@g%@g%]1%i|$i|$i|$i|$i|$i|$i|$i|$z<$z<$i|$i|$i|$z1$z1$z1$]1%>H%]1%>H%]1%>H%]1%>H%Fc%mq+Fc%mq+Fc%mq+]1%^b+Lh+]! ]! ]! ]! ]! ]! {! ]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.]! ]! ]! {! {! {! ]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.5A.]! {! {! {! be+{! 5A.Ea+5A.{! 8g.be+]! )> )> )> )> )> )> )> )> )> 6g+6g+6g+)> )> )> 6g+]! ]! ]! ]! {! {! {! ]! {! ]! 5A.5A.]! ]! ", "ke ke ke ke ke ke ke he he he he he he he m` Ml Y6.iI.ce iI.iI.Y6.H;@Y6.Y6.P7.P7.P7.H;@Y6.iI.vk vk +h.+h.+h.+h.vk vk ~% ~% ~% ~% ~% ~% ~% ~% ~% d( +h.d( %% 4% %% ~% +h.+h.d( ~% ~% %% 4% 4% r: r: r: r: %% %% %% %% $% $% d= d= d= d= M=.3{ d= $% $% $% $% $% $% $% 0' |% |% $% &) &) &) &_ %% %% %% %% %% %% %% %% %% 4% 4% %% ~% %% v% w4.%% %% %% %% %% %% %% %% f% f% 5% 4% %% ~% d( +h.he 2b 2b ;_ -_ -_ *_ *_ i% i% Hu+Hu+8v.8v.8v.6% *_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ *_ i% Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+8v.VW.9, 9, VW.Hu+PI.xX%xX%xX%xX%xX%xX%xX%xX%O7.xX%N7.M7.M7.N7.xX%O7.4I%xx.T}%xx.4I%QI.$;&l=&QI.$;&$;&91+v7+s[.QI.^q%af.0c =_ =_ =_ =_ 0c A^.0c 0c =_ =_ -_ ;_ ;_ -H.6% 8v.Hu+Hu+PI.#9.#9.cp.8v.8v.Hu+Hu+PI.#9.#9.cp.f% f% g% g% g% g% f% y% y% $| :I '!.&z&*z&@y&=z&>^$-z&YH+ I+q`+YH+%M /b F*+;z&V'%p'+>z&~Q.fT.tz@P$+&h#CU.MX.V##f$@g&@g&@g&@B1#B1#~=#~=#|x@|x@.v@OX#-o$]8$]8$~m$~m$i%%i%%u)%u)%+'%+'%LB$C;%C;%C;%M[#M[#M[#M[#Wk$Wk$Wk$Wk$]m$]m$>b$>b$>b$Sj$Rj$Rj$y4#y4#_a$Dj$Dj$_a$,p$,p$b9$b8$c9$_8$5($5($5($Wx$:8$2O#2O#k7$k7$N[$x4#7o@-c$)g$ar$Wk$Wk$Wk$Wk$Wk$N[#7F$(R#'p$cN#.3%Jn#Jn#0x$0x$k~$(;%b!$# +V-$E3$M]+9>+7:@/k#8;&Jy$:g$zD%2e+,z&ij$vt$'z&)z&!z&kY+#3+~z&mY+8%.Gf.h|.{z&]z&^z&nj 4F i.$Mw dC%%E Uw /z&(z&_z&:z&8 '8 Th v'@LZ@6e+ez&s)&~T%h-+Z@+N]+V@&o~+;i#;i#;i#;i#>)&>)&6W.t{%3Y+0]@>T.Uk#wC$7e+GC$@B%7E$5'$&E u1$^G%]G%]G%]G%]G%]G%^G%u1$|f YI$~@$~@$5'$&E &E u1$u1$&E &E &E [|@<|@$4@vR@<|@:|@/|@@~ *0@|i IE+}(&b>&HQ$`)+fz&9(@3_$Yp+#1@41@L2&.r% 7@>q$Ab$Ao$Ao$Na$Na$A6@A6@C&%+9@tk$U6$%9$$#$#8$$*>$zw$7G+x;@lX+zD+'T@3]+;K@DI+b>%bN#Kn#<6$Bz&@x@x1#,]$!8%Cz&4z%$I$<[%;S NA$Y.$Dz&qc&Ez&Fz&Gz&qx&Hz&Iz&i+.i+.VI.>3+;3+>9#(d.Gk.=_.&c.&c..J. K |r._).Jz&Kz&Lz&Mz&Nz&6i =b Yy c4#Oz&3X%Pz&Qz&Rz&Sz&Tz&Uz&Vz&Wz&Xz&Yz&Zz&`z& A&.A&+A&]{&T^#9q mx 2`@i*$@A&#A&21+$A&W%.]:+`*.J}.{u.O2.Ub.Oa.}-.Uh.!e.I}.8).%A&C!@&A&*A&=A&2w&()#1E$U/%G!#AF@~=#K[#cH#zr+ca@DO#A]%p}@^R#bN$zw$_Z$=>$Ve%Ve%-A&T@>T@;K@yM@}|+@#$u_%Wx$c9$c9$,p$L1#pi$8^@#_r@`Z W=#+z&c1#)G Wq X;.>A&js&(o&,A&vt&_n&Yi&%,+Qe&s3&I8&'A&bH@c;+w8.y{ y{ y{ y{ P~ /D./D./D.2&$=|$=|$u3$u3$x*$x*$X@$x*$x*$X@$X@$%' >S%>S%~h&)A&%z&%z&%z&.y&.y&+y&+y&@d+@d+@d+z$$z$$mq+mq+mq+*Z+*Z+Pw%Pw%=|$2&$2&$2&$Y@$Y@$KE#KE#NZ@NZ@BX@Jb#o8$]1%Fc%Fc%@g%5e%@g%Fc%Fc%Fc%Fc%]1%]1%@g%5e%5e%5e%5e%@g%@g%]1%]1%]1%]1%@g%]1%]1%]1%]1%]1%]1%@g%i|$i|$i|$i|$i|$i|$i|$i|$z<$z<$i|$i|$i|$z1$z1$z1$T3$@g%T3$@g%T3$@g%T3$@g%z1$]1%i|$Fc%i|$Fc%i|$+d+'g@]! ]! {! {! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.]! ]! ]! {! {! {! ]! ]! ]! ]! ]! ]! ]! ]! Ea+Ea+5A.]! {! {! be+be+{! 5A.Ea+5A.{! 8g.be+]! )> )> )> )> )> )> )> )> Yt.Yt.i~ Yt.Yt.Yt.Yt.Yt.]! {! {! {! ]! ]! ]! ]! ]! ]! {! {! {! ]! ", "ke ke ke ke ke ke ke he he he he he he he m` Ml Y6.iI.iI.iI.Y6.H;@P7.Y6.H;@P7.6!.6!.H;@iI.ce +h.+h.+h.+h.+h.+h.+h.+h.%% %% %% %% %% %% %% %% ~% d( +h.d( %% 4% %% ~% d( d( ~% ~% ~% ~% %% %% r: r: r: r: %% %% %% %% |% |% d= d= d= 3{ M=.3{ d= $% $% $% $% $% $% $% $% $% &) &) &) $% |% |% %% %% %% %% %% %% %% %% ~% 4% 5% 4% ~% ~% 4% v% %% %% %% %% %% %% %% %% 5% 5% 4% 4% %% ~% ~% d( ;_ ;_ ;_ ;_ ;_ -_ R_ R_ i% i% Hu+Hu+8v.8v.8v.6% *_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ *_ i% Hu+Hu+Hu+Hu+Hu+Hu+Hu+VW.VW.9, 9, 9, VW.8v.Hu+xX%xX%xX%xX%xX%xX%xX%xX%O7.xX%N7.M7.M7.N7.xX%O7.4I%xx.ts.T}%l=&$;&$;&4I%s[.QI.4I%$;&91+s[.QI.2P af.A^.0c =_ =_ 0c A^.A^.0c 0c 0c =_ =_ =_ =_ R_ i% Hu+Hu+PI.PI.PI.PI.PI.Hu+Hu+Hu+PI.PI.PI.PI.PI.f% f% g% g% g% g% f% y% Q_ $| :I s[+y>%S]@Au&!A&.]$EY+YH+ I+~A&YH+L8 B%.A[@SC@7]&{A&mA%3F.;V.>{+,{+&h#&h#CU.MX.V##f$@f$@f$@g&@B1#~=#~=#~=#~=#|)#0/$a/$4w+]8$~m$~m$A+%A+%d_%u)%R5++'%LB$C;%C;%B4#L[#L[#L[#L[#*c$*c$*c$*c$]m$]m$=c$=c$=c$=c$Ms$Ms$y4#S5+Dj$Dj$Dj$Dj$Ej$,p$b8$b8$b8$c9$d9$d9$5($hX+Z&+2O#Rs@Rs@2O#H_@N;$7o@-c$-c$>b$ar$ar$Wk$ar$ar$Di$y4#'p$w4#('$6P#av$6P#]A&j^#^A&/A&,Q#Hz$P4$l~$m+&'r%g<#Ap#t{%h+&5w$%L+H9&2e+(A&_A&:A&f#w'@]V.+K.bU%qL.F)+tz@-n#GX%]f#X@+X@+X@+>)&>)&6W.6W.O]$f*%z'$=@&dR.vv%r[#/<%D ~ 5'$=E Nt%^G%^G%]G%]G%^G%Nt%|f YI$ox$nx$~@$5'$&E u1$Nt%Nt%u1$&E &E <|@<|@$4@$4@<|@:|@(|@^|@@~ cK#8m&XJ$:g$wp&R.$b*+z|+Xd+am+#1@41@.r%.~&bC$Sp$)x$Ao$zb$Na$7j$A6@A6@C&%+9@'f&U6$%9$%9$)c@B&,B&'B&GV# n@bB GV#6`@)B&0!&9k.R'+G!.$_..=.({.!e.OE 7%.nO !B&I}.cD.bR#S@.ws&He+Zy&>J s1$@{#@E#8x$Oj#/)&0Z+})#1r$Lq@zp+}3@aa@_3@Ka%Tv#TR$W~$:^$/`#K.%~B&{B&g9$4~#y;@y;@y;@y;@y;@y;@y;@M,@M,@M,@pk+a~@z$+s<@Vv#dr+Ht+:o+:o+[R+[R+v~@,:@WH@WH@OS#OS#19@19@19@OS#v~@WH@OS#MU#MU#>:@5}@5}@4}@4}@4}@yV#yV#yV#yV#4}@+7@o{$5_$:/$:/$^'$_/$^'$@s+6}@O<@Mx#$R#Qx#Mx#mm+fp+!P+cr+cr+A$+A$+6X+ep+0y+0y+4X+y@@y@@vI+vI+vI+mB#}P+S.@S.@dp+d[+L@+6T+O,@O,@x9#x9#9%$9%$9%$x9#4 @mX+0G+3 @3 @>T@^^#-K@nz#@#$WK+vp#~l$b9$b8$00$T[#8^@eh$6%$U4$I1#U,+XX.Vx#GB@M4&1Y.sO.f!@PU.jR.u7 Nz Ok yy Mz 2' ]1 P1 &f#&f#bP@uR@3C i'#{#.{#.77#X=#^J W=#+z&A&sr&#z&vt&vt&_n&>1 Mc&d<@g6&g6&]l.l7 m^.w8.9Y+9Y+x8.y{ P~ /D.PF+^b+2&$2&$=|$u3$x*$X@$%' >S%%' %' %' >S%>S%>S%~h&~h&%z&%z&%z&.y&.y&+y&+y&+y&@d+@d+@d+z$$z$$mq+mq+mq+*Z+*Z+Pw%Pw%=|$2&$2&$2&${y%'W+_c$PC#Ae+KE#+R@NZ@T3$Fc%#u%Fc%@g%5e%]1%#u%]1%]1%Fc%Fc%Fc%]1%@g%5e%S}%S}%@g%]1%]1%]1%@g%@g%@g%]1%Fc%Fc%Fc%Fc%]1%@g%i|$i|$i|$i|$i|$i|$i|$i|$z<$z<$i|$i|$i|$z1$z1$z1$T3$T3$T3$T3$T3$T3$T3$T3$z1$z1$z1$i|$i|$i|$z<$Ae+;~ ]! {! {! {! {! ]! 5A.]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.]! ]! ]! {! {! {! ]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.5A.]! {! {! be+be+{! 5A.Ea+5A.{! 8g.be+]! )> )> )> )> )> )> )> )> )> i~ ,v.i~ Yt.)> Yt.,v.]! {! be+{! 5A.Ea+5A.{! 5A.{! 8g.8g.{! ]! ", ":j.:j.:j.:j.:j.:j.:j.l` l` l` l` l` l` l` l` Lv.Y6.Y6.Y6.H;@P7.6!.5!.Y6.H;@6!.5!.6!.H;@ce U5.~% ~% d( d( d( d( ~% ~% %% %% %% %% %% %% %% %% ~% d( +h.d( %% 4% %% ~% %% %% ~% ~% ~% ~% d( d( r: r: r: r: %% %% %% %% |% |% )= d= 3{ 3{ M=.2{ d= $% $% $% $% $% $% $% |% $% &) &_ &_ &) $% |% %% %% %% %% %% %% %% %% d( %% 5% 5% ~% d( d( %% ~% ~% ~% ~% ~% ~% ~% ~% 4% 4% 4% %% %% %% %% %% -_ -_ -_ ;_ ;_ ;_ -H.-H.h% h% Hu+Hu+8v.8v.VW.1% *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ i% Hu+Hu+Hu+Hu+Hu+Hu+Hu+9, VW.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+8v.Hu+#9.cp.cp.#9.Hu+8v.`d#~(.AX$kI.~(.`d#`d#`d#Te&ye#^q%^q%2P ye#ye#ye#4=+QB@af.af.af.af.QB@4=+g% g% g% g% g% af.af.af.h% PI.PI.PI.PI.Hu+Hu+Hu+PI.PI.PI.PI.PI.Hu+Hu+Hu+v% v% af.af.af.af.v% u% ^{ (* WG }].]B&S]@Lx+^B&T@$t<$1K+r`+a_ 1K+G*+Oz z[@SC@sd@/B&'%+3F.;V.$*+,{+#*+d_+d_+li@h/+Ub+Ub+h/+Ub+})#|)#/d$|)#})#})#QB$tp%wy+4w+ns$~m$i%%i%%d_%u)%R5++'%LB$C;%B4#Wy$Zz$Zz${m${m${m${m$CO#CO#%u$%u$%u$%u$Hs$Hs$Hs$Hs$-c$-c$^m$5G$5G$^m$a9$a9$b8$b8$b8$b8$!l$d9$5($hX+Z&+e'#1O#1O#1O#B2$BT$N;$Dj$-c$>b$>b$>b$ar$>b$>b$-c$ni$,L$Bb#bN#46+l`%n>%m`%{t#(B&i^#^A&iq#g'%$ + l#89$Z]$'r%'r%9M@L=&.Y.82&_B&1e+:B&t!@+bU%pZ.Vj$V{$u[$,M 1i uK i0$-z -z Jv -z i0$Nt%|f ox$KO%nx$nx$E'$&E Nt%GJ%GJ%Nt%&E Kv vR@vR@vR@vR@$4@<|@:|@:|@+~ <@ER@QQ$$V>$A6@A6@Z0@+9@M9&`0@%9$%9$!c@!i@'y$B6@B6@e,%-@%DB&e,%UA%PG$L(#DB&DB&mD@iF@qj%b`$7B@ ~#vO@sM@2'#Xu#8x#O3&5x#uI$rM$SM#KX+uA&G5&EB&FB&xA&GB&HB&IB&JB&KB&LB&MB&<2&NB&OB&PB&fj#YC@8u#QB&RB&HA&SB&TB&ht@e>#@t#B_#a~ X~#6F 6G@Du as .y ri&Gb&UB&eO$i`%MA&%u%Uz$]v$.*+{ +qw$lF$/'$zw$Uv#(Z$j)$&n%cB@9G+=B+AD+RK+SK+I,@gi@,7$cH#|_+Mq@'m+.+@j8$GY$TR%'f#8:%VB&OJ$WB&XB&YB&ZB&`B& C&.C&+C&@C&#C&$C&wy&qN.wf.11+&N 2l.(d.uj.ne.H0.qe+S` m+.yz.%C&&C&*C&=C&}o .w%/1 j@#Iz Ek&uf&Di&-C&;C&>C&,C&'C&)C&!C&~C&{C&]C&^C&/C&(C&_C&:C&:@fY#fY#fY#fY#qR$EZ$EZ$EZ$fY#fY#fY#M<@M<@M<@M<@Y4@yV#yV#yV#.O$.O$.O$.O$yV#@r%8)$.:$>]@>]@O3#;'$%!@%!@.q+ q+MF@ q+NF@28+>'@)P+!G+cr+Ft+Ft+A$+Jn+iD+ep+T{@T{@|$@4X+4X+y@@[=@&>+wD+)w+)w+g~+Il+6T+J@@K@@K@@:^#:^#,e%,e%,e%:^#4 @mX+0G+3 @f^@hX@^^#g[+nz#hF$iX+Qm#0N$bq$b9$[{#yA#Fj$eh$6%$U4$<{#k~+ *+6)#''+3a&eT. K..K.&>#Z #[N.-K.=W@ro >J w' Q1 Q1 :} :} bP@uR@3C i'#{#.{#.O;#-)#Q~#z&#sR#S%>S%{h&{h&{h&~h&~h&~h&~h&~h&.y&.y&.y&+y&+y&+y&Xw&Xw&@d+@d+@d+z$$z$$mq+mq+mq+*Z+*Z+Pw%Pw%=|$2&$2&$2&$3&$3&$PC#PC#Ae+Ae+OZ@Ae+T3$Fc%#u%#u%]1%@g%]1%#u%5e%@g%Fc%#u%#u%#u%Fc%]1%&0+S}%5e%]1%]1%]1%@g%5e%@g%]1%Fc%#u%#u%Fc%]1%@g%KE#KE#KE#KE#KE#KE#KE#KE#Ae+Ae+KE#KE#KE#NZ@NZ@NZ@'@+'@+'@+'@+'@+'@+'@+'@+BX@+R@+R@+R@cT@OZ@OZ@Ae+;~ ]! {! be+be+{! ]! 5A.]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.]! ]! ]! {! {! {! 5A.5A.5A.5A.5A.5A.5A.5A.]! ]! ]! ]! ]! {! {! {! {! 5A.Ea+5A.{! 8g.be+]! )> )> )> )> )> )> )> )> 6g+Yt.,v.i~ 6g+]$@)> i~ ]! be+8g.be+5A.xc+5A.{! Ea+{! w8.w8.be+]! ", ":j.:j.:j.:j.:j.:j.:j.l` l` l` l` l` l` l` WW.H;@H;@H;@H;@H;@6!.5!.$9.Y6.H;@6!.5!.6!.H;@ce ]@%% ~% ~% d( d( ~% ~% %% %% %% %% %% %% %% %% %% ~% d( +h.d( %% 4% %% ~% 4% 4% %% ~% ~% d( +h.+h.r: r: r: r: %% %% %% %% |% |% )= d= 3{ 3{ ,;.2{ d= $% $% $% $% $% $% $% 8c 0' $% &_ &_ &_ &) $% %% %% %% %% %% %% %% %% +h.%% f% 5% %% +h.vk vk ~% ~% ~% ~% ~% ~% ~% ~% %% %% %% %% %% 4% 4% 4% =_ =_ -_ -_ ;_ 2b l` m` h% h% Hu+Hu+8v.8v.VW.VW.i% *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ i% Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+9, VW.PI.#9.cp.cp.PI.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+8v.Hu+#9.cp.cp.#9.Hu+8v.`d#~(.AX$AX$~(.`d#`d#`d#:W%ye#^q%jI.^q%J].}n&}n&4=+4=+QB@af.af.QB@4=+4=+*_ g% g% af.af.QB@4=+;H.cp.#9.#9.PI.Hu+Hu+8v.8v.cp.#9.#9.PI.Hu+Hu+8v.8v.v% v% af.af.af.af.v% u% &- /* WG f= ]B&S]@Mx+bC&mk jW+1K+r`+a_ 1K+G*+;z.:,.Y-+sd@/B&'%+4<+0]+'{++x@#*+#*+d_+li@h/+Ub+Ub+li@h/+=1@|)#|)#|)#=1@9Z+4V+4V+3)#wy+ns$ns$i%%i%%d_%u)%+'%O@%C;%B4#Wy$Wy$Vy$Vy$/v$/v$/v$/v$*I$*I$%u$%u$%u$%u$=J$=J$=J$=J$-c$Cj$5G$5G$5G$5G$cN$a9$b8$b8$b9$b9$!l$d9$5($hX+u_%1O#nq@1O#1O#e'#*6$BT$a9$Dj$Ms$>b$>b$>b$>b$-c$Jc&ni$qw$e;%n%$46+|0$..&n%&XR# .&(B&s0&F@+92&0$$KG%Z}&Z}&>i#O4$X@+9M@kZ.5w$:E%cC&dC&eC&Zl$fC&gC&hC&iC&jC&kC&4!.lC&mC&#~+nC&S} @D%oC&pC&Gg&qC&rC&sC&tC&uC&vC&wC&xC&yC&zC&AC&BC&CC&DC&EC&FC&GC&HC&IC&JC&pB&KC&LC&MC&NC&~>.vF.2q.3p.$[.;5.OC&PC&QC&RC&SC&TC&UC&VC&aC#O9 @9 Y^#]L$#6#Eh+*N.s)&UZ.__%)%@Q/+f#@2Y+H+@Ps%$L+C~&F~%7W.3Y+dG+: +[`#T-$Vo$nJ#;g$z_%j!$H%$+y i0$=E i0$i0$G'$YI$ox$KO%eO$nx$E'$&E Nt%GJ%GJ%Nt%&E Kv &E Kv Eu vR@vR@$4@$4@$4@mt@+~ ~~#`^#XJ$z4%z@%)($X~+%&$B$@f9@[!$ v$:V$+F$Sp$Ao$zb$zb$V>$V>$A6@*'$Z0@C&%M9&`0@%9$%9$!c@7e#Lm$F5&Kp$<{&7:$WC&e,%}z$UA%PG$L(#mD@mD@%#$-R$b`$6e# ~#vO@vO@B+$lD%(g&6x#M6#XC&1U#)v#*4$6g&73$YC&ZC&|e+`C& D&.D&+D&In&`{&@D&#D&$D&%D&MY%+j&J`%&D&*D&=D&-D&SB&ht@u{ 8q#kI@1f /|@6G@Du Du Fu Au VH%QL%Ms&.F%PW$;D&c3%uy%L#$rr%`&+bN#/H$'K@DM@:a$:a$*n#w)$H@@9G+9G+AD+RK++N+b^@K4#cZ.W[$e,$:v@@o+M/+MJ@8x$>D&j4#*v$3Q%,D&'D&)D&!D&~D&{D&]D&^D&/D&(D&M{.i+.i+.TI.!H._D&Af.Qo.Gk.:D&re+ne.'_.Va.-(.sA.W xd.OE oD&<^.GB.2Q+L}.H].e{+@9.)Z%pD&ns%qD&k9$s1$(l$}a$!b#}6$>/#BA$'Z#z9#=k$bN#Kq@46+5P#4R+8-%CU$7#%:^$K.%{B&rD&sD&rD&(6$=K@pk+pk+pk+pk+LF@LF@ih#MF@NF@+q++q++q++q+.q+%!@qe@cc@|T@uQ$6*$6*$fY# 7@qR$pR$pR$pR$pR$0S$0S$sQ$bC${`#{`#{`#{`#{`#{`#{`# 7@ 7@iR$iR$iR$iR$iR$ 7@Z4@N<@N<@`4@`4@8)$8)$8)$8s#8s#8s# q+.q++q+#q+#s+lm+!G+cr+Ft+Ft+cr+Jn+iD+Jn+ep+ep+ep+|$@|$@4X+4X+oy+vD+!w+!w+Rt+Il+J@@e^@Z.@Z.@mb#mb#,e%,e%,e%qg@4 @,B+*>+*>+;B+f^@[|+[|+or&DI+9e#YP$rr$rr$bq$Qj$yA#>+|k+sY$0)$N^&'N.)t@6O.7O.p<+A%@B6 <7 Sj *! :} :} bP@zC i'#{#.i'#>{ -)#WC@y&#)1 WH %p tD&uD&Ad _n&:n&S_+5^ 5^ 6e%z:.vD&Xb&g6&;X.=L G(.8g.6j+;~ Lh+9Y+PF+^b++d+Y@$X@$X@$X@$X@$%' %' %' %' &, &, 0, 0, {h&~h&~h&>S%.y&.y&+y&+y&Xw&Xw&Xw&Be+@d+@d+@d+z$$z$$mq+mq+mq+*Z+*Z+Pw%Pw%=|$2&$2&$2&$^b+^b+KE#Ae+Ae+PC#;>#_c$T3$Fc%#u%#u%]1%@g%]1%#u%S}%5e%]1%#u%O4%#u%#u%Fc%%P%S}%5e%]1%]1%]1%@g%5e%@g%]1%Fc%O4%O4%Fc%]1%@g%KE#KE#KE#KE#KE#KE#KE#KE#Ae+Ae+KE#KE#KE#NZ@NZ@NZ@'@+'@+'@+'@+'@+'@+'@+'@+BX@BX@+R@+R@cT@OZ@OZ@U/@]$@]! {! be+be+{! ]! Ea+]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.]! ]! ]! {! {! {! 5A.5A.5A.5A.5A.5A.5A.5A.]! ]! ]! ]! ]! ]! ]! ]! {! 5A.Ea+5A.{! 8g.be+]! )> )> )> )> )> )> )> )> jy.)> i~ Yt.]$@q9+6g+Yt.]! be+w8.be+Ea+xc+Ea+{! xc+{! gA gA be+]! ", "_j.6% i% 1% _j.(j.(j._j._j._j._j._j._j._j._j.H;@H;@H;@H;@H;@H;@H;@H;@P7.P7.P7.P7.P7.P7.P7.P7.4% %% d( +h.vk vk vk +h.5% 4% %% d( d( %% 4% 5% %% ~% d( +h.+h.~% 4% 5% 4% %% d( +h.+h.d( %% 4% r: r: r: r: %% %% %% %% 0' 0' != )= )= d= M= d= )= |% $% $% $% &) &) &) |% $% $% &) &_ ~_ ~_ n3 5% f% f% 4% d( +h.~% 4% v% 5% 4% 5% v% v% f% 4% d( d( d( ~% ~% %% %% %% 5% 5% 5% 5% 5% 5% 5% 5% 0c 0c 0c =_ -_ -_ -H.-H.1% 6% 8v.VW.9, VW.#9.|5+h% i% 6% 1% 1% 6% i% h% <4 <4 <4 h% h% i% i% i% VW.8v.Hu+Hu+Hu+VW.G6.hY.cp.#9.Hu+8v.8v.Hu+#9.cp.6% 6% 6% 6% 6% 6% 6% 6% <4 s3.;H.s3.h% i% h% <4 x3&x3&x3&x3&x3&x3&x3&x3&M/.<].<].x3&/0./0.M/.lI.s3.s3.s3.s3.s3.s3.s3.s3.6% i% h% s3.s3.h% i% 6% Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+#9.#9.#9.#9.#9.#9.#9.#9.v% v% af.af.af.af.v% u% ^{ i# <9.s[+wD&R]@xD&xD&yD&|> v*$zs zs 35 GS+GQ+J8 F[@TC@S8&zD&l-$D_+A:&)>+V,+Ar+@*+|f+|f+@*+@h+|f+|f+|f+9Z+9Z+R2@R2@R2@Z]$Z]$+B$wy+ns$~m$A+%Fx$:$%:$%L>%L>%B4#B4#Wy$Wy$!U#!U#Tj$ar$ar$]m$=c$=c$Hs$Hs$Hs$Hs$Gs$Gs$Gs$Hs$DP$DP$5G$^m$_a$@d$qw$&6$b9$c9$47$_8$d9$!l$5($u_%u_%fX@CI+BO@7V@gX@00$00$b8$Ej$%K$Rj$Rj$Rj$Rj$_a$ni$H_@v4#x_%v,$Y&+Iq@k1@o%&|0$P.$Lp# .&]A&j^#6_#vy+6c#rr%&c$C/%1/%WS@t{%FU.88%%L+gF AD&BD&CD&DD&tt&ED&IT.FD&.$ r)@GD&pK+HD&RT@9E%ID&Vn&JD&KD&LD&MD&ND&OD&PD&QD&RD&SD&TD&UD&VD&WD&XD&YD&ZD&`D& E&.E&+E&@E&#E&$E&%E&&E& r.1W 1E.No.7R hX.Q}@y1.4R *E&=E&-E&;E&>E&ky#5!#c2 {)#;K.[N.5e+zL.pZ.pZ.j6&+]%u{%`^@,E&/M$N]$F~%jZ.C~&/M$/k#!>+_ +U)@XJ.5P+Pp X]$;@#`=#Xv%^x%ML%ML%Y;$Y;$G'$tj%+F%+F%b!&@F%|f u1$u1$u1$u1$u1$u1$u1$&E &E Kv Eu vR@$4@<|@<|@$p@W:@Lc m>@${@)f#h+&HQ$CB&'E&rm+d9@,K$ v$+F$!x$Gt$E5&Et$|s$Ql$h>$B]&B]&gp%V=$)E&!E&!c@^c@~E&{E&W=$Jw$Jw$sk$rk$el$;@%w|$4H$Q1$,j&Z,%Z,%]E&]E&Ic$uO@pM@NQ@oR+g#$^E&N6#hZ@6p#CQ#GD$$^#/E&(E&_E&LN+:E&)#!)#!)#YA rG Fu 5G@V^#=^$Iv Jv PO$9E&0E&aE&@g&f*%7O$y7%90$5($/H$CO@Tm#]k#7&@7&@SQ@DO@H@@f^@3]+RK+]@;'$WE&`H@6*$uQ$EZ$qR$qR$qR$sQ$sQ$!O$!O$0S$0S$'O$'O$'O$)O$bC$bC$bC$bC$bC$bC$bC$bC$bC$bC$bC${`#{`#{`#{`#[!$41@Z4@`4@.:$+7@;'$;'$39@8s#%!@O3#+q+ q+.5@4k#gp+gp+gp+gp+cr+cr+cr+A$+A$+6X+ep+T{@WA+PK+y@@4X+oy+1R+@B+#B+tr+Jl+Z.@0=@K@@K@@qg@qg@n#$n#$n#$qg@O)@,B+my+Y.@/w+f[+BD+BD+~K@DI+}{#9e#0N$0N$!l$_P+1O#S;+S,+y_$1T+v4#Lq@S%~h&~h&0, >S%%' >S%&, ZQ.&, {h&)A&%z&%z&+y&Xw&Be+@d+@d+Be+Be+Be+@d+@d+@d+z$$z$$ME+ME+ME+*Z+u3$=|$=|$=|$/D.^b+KE#KE#Jb#3K@BX@KE#i|$Fc%Fc%Fc%Fc%Fc%Fc%Fc%Fc%#u%3]&`E&3]&#u%]1%@g%O4%Fc%5e%&0+&0+5e%Fc%O4%@g%@g%]1%]1%Fc%#u%#u%O4%Jb#oA+oA+)D+)D+U/@U/@U/@oA+)D+A_@ok.ok.A_@)D+oA+4!$':$':$&($c;@c;@nA+nA++$++$++$++$++$++$++$+d> i~ {! 5A.Ea+Ea+5A.{! be+]! Ea+T_+$(+Ea+{! be+{! Ea+xc+Ea+be+gA gA {! $(+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! 6g+]$@6g+)> ,v.ZY KB ZY 6g+6g+6g+6g+6g+6g+6g+6g+xc+xc+xc+xc+xc+$(+$(+$(+{! ]! Ea+xc+xc+Ea+", "_j.6% 6% WW._j.(j._j._j._j._j._j._j._j._j._j.H;@H;@H;@H;@H;@H;@H;@H;@P7.P7.P7.P7.P7.P7.P7.P7.d( d( +h.+h.+h.d( ~% ~% 5% 4% %% ~% ~% %% 4% 5% %% ~% d( +h.d( ~% 4% 5% 4% %% ~% d( d( ~% %% 4% r: r: r: r: %% %% %% %% 0' 0' )= )= )= d= M= d= )= |% $% $% $% &) &) &) &_ &_ &_ &_ &) &) &) &) 4% 5% f% 5% %% %% 5% I> f% 4% ~% %% 5% f% 5% %% d( d( ~% ~% ~% %% %% %% 5% 5% 5% 5% 5% 5% 5% 5% =_ =_ =_ -_ -_ ;_ -H.-H.<4 <4 #9.8v.9, G6.VW.Hu+h% i% 6% 1% 1% 6% i% h% h% h% h% i% i% 6% 6% 6% VW.VW.Hu+Hu+Hu+8v.9, G6.cp.#9.Hu+8v.8v.Hu+#9.cp.i% i% i% i% i% i% i% i% h% s3.;H.s3.i% 6% i% <4 x3&x3&x3&x3&x3&x3&x3&x3&x3&M/.M/.6e.o2$o2$x3&'K.s3.s3.s3.s3.s3.s3.s3.s3.6% i% h% <4 <4 h% i% 6% Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI.v% v% af.af.af.af.v% u% Q_ h# 9 +'!.wD&]) xD&S]@yD&|> v*$zs F&.F&s8 Ab J8 F[@TC@S8&zD&QD@Wx#A:&ue#W0+tc@@h+@*+@*+@h+@h+9Z+9Z+9Z+R2@R2@]v$]v$]v$4V+4V+wy+4w+~m$~m$A+%A+%:$%:$%L>%L>%B4#B4#Wy$Wy$Wk$Wk$ar$ar$]m$]m$%u$%u$nw$nw$nw$nw$,H$,H$,H$,H$S@%DP$5G$^m$Dj$_a$Ej$Ej$b9$c9$_8$_8$d9$!l$5($u_%}{#CI+CI+2R+2R+7V@hX+Wx$_8$_8$qn%bv$bv$90$90$,L$N;$H_@U4$Z&+_P+hF$8k#g^#^v@^v@QS#ds#+F& .&]A&0x$j %Ei$!U#sD$/a$A1#']$, $pZ%5w$w[#At&@F&#F&$F&Dr %F&>A&&F&w+ <# .Z ^_ H$Hj a~ *F&Gg&=F&-F&;F&>F&,F&'F&)F&!F&~F&{F&]F&~F&^F&/F&(F&_F&:F&%/Y.y'$VN+Ls&jZ.-Q+` @t{%+++pZ%o%$cv$3O#y=$OB@m8 n'%=;%`I$EG%Y;$Y;$G'$G'$DD%+F%@F%ED%|f u1$u1$u1$u1$u1$u1$u1$&E &E Kv Eu vR@$4@$4@<|@rG t! Lc _J$8v#.E#d_&y{$V[+a*+e2+sk+@a@lt$7S$5l$)r$E5&Et$|s$Ql$h>$B]&B]&W=$W=${E&{E&~c@~c@,i@Xt&>E$fF&gF&sk$7q%u;&k7%Q1$c`$m6$uF$K($N3&tM@N3&La$Bm#hF&MQ@Xu#_A#1A#pN$+~$B}$1U#JO#iF&jF&kF&lF&mF&nF&,}+oF&pF&qF&V#%rF&sF&tF&uF&vF&wF&xF&8T$+t#0+&QB&QB&yF&zF&it@]C@kI@kI@+~ tG Cu RC j@#=^$as )J .N$Y &AF&xA%88%6W.YX.8v$_8$%/$F@@Tm#6&@7&@8#%8#%6$@6$@cB@X.@hX@SK+TK+wW#tD@TX.BF&33@q1@P$+Tz$GY$f%%q~$%-#mQ CF&!x&DF&_t&EF&FF&GF&HF&IF&JF&KF&[t&LF&ew&e.Pc+W#.:6.}Z W#.MF&NF&OF&4A&8q PF&+y WA Xx QF&RF&SF&TF&UF&VF&WF&XF&YF&ZF&`F& G&.G&+G&@G&#G&$G&%G&&G&*G&=G&-G&;G&>G&,G&'G&)G&!G&~G&{G&]G&5O >s.OE ^G&uL l'.Wb#/G&(G&r3%Bh.-h S% !h&l< _G&tc+TO$v[#x[#Zk#6Q%/1&gZ.]B+ ^$pw$b>%-,$T!$=n#(Z$7#%uW#VE&7y%~r%#&$:G&:G&$v$Nx#L,@M)@mm+NF@.q+.q+8s#8s#;'$8)$.:$@r%@r%X=&W=&aP$tQ$EZ$qR$bC$bC$pR$pR$!O$!O$jQ$jQ$jQ$'O$]@O3#tG+tG+@q+.q+s9#.5@gp+gp+gp+gp+gp+cr+cr+cr+A$+Jn+iD+ep+WA+uI+y@@|$@=w+sr+#B+#B+Jl+Jl+Z.@0=@Z.@Z.@4e@4e@W6$W6$W6$9$@t<@K)@ny+my+(w+/w+<|+X&+W.@6G+BM@9e#tr$0N$!l$_P+gX@;($1O#1O#Z&+Z&+se#8Z+pX+D@+WF@ue#[-+l-$,'+,4+@{@Pp ]L$1L.=W@B6 h< p| c2 ,p z&#`V@p{ jX@i| jX@y&#sR#`V@8j#M1 (} q4&[G&}G&d^ 0k&)i&2l&%,+Lc&Mc&x_@x_@4/ g6&#$ aH@oh.{! x8.x8.9Y+Lh++d+Y@$Y@$3&$u3$u3$x*$X@$%' >S%~h&~h&0, >S%%' >S%&, Av&&, {h&.y&.y&+y&Xw&Xw&Be+@d+@d+Be+Be+Be+@d+@d+@d+z$$z$$*Z+*Z+*Z+*Z+=|$=|$2&$2&$PF++d+Ae+KE#Jb#Jb#+R@Ae+i|$Fc%Fc%Fc%Fc%Fc%Fc%Fc%Fc%Fc%#u%#u%Fc%]1%@g%@g%#u%Fc%]1%@g%@g%5e%5e%5e%@g%@g%@g%]1%]1%Fc%Fc%+d+oA+oA+oA+oA+oA+)D+U/@U/@U/@A_@ok.H0@H0@ok.A_@U/@c;@c;@c;@&($&($&($&($&($+$++$++$++$++$++$++$+d> ]! 5A.Ea+xc+xc+Ea+5A.]! be+5A.xc+xc+5A.{! {! {! 5A.Ea+Ea+{! w8.w8.{! Ea+5A.5A.5A.5A.5A.5A.5A.5A.]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! 6g+6g+6g+)> Yt.i~ ,v.i~ 6g+6g+6g+6g+6g+6g+6g+6g+Ea+Ea+Ea+5A.5A.5A.5A.5A.{! ]! 5A.Ea+Ea+5A.", "hY.VW.8v.9, hY.hY.hY.hY.hY.hY.hY.hY.hY.hY.hY.H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@vk vk vk vk +h.~% %% 4% 4% 4% %% ~% ~% %% 4% 4% ~% ~% d( d( ~% %% 4% 5% 4% %% ~% ~% ~% ~% %% 4% r: r: r: r: %% %% %% %% 0' |% )= )= d= d= M=.3{ )= |% $% $% $% &) &) &) n3 n3 ~_ &_ &) $% |% |% %% 5% f% 5% 4% 5% I> a, 5% %% d( ~% 4% 5% %% ~% d( ~% ~% ~% %% %% 4% 4% 5% 5% 5% 5% 5% 5% 5% 5% -_ -_ -_ ;_ ;_ ;_ l` l` h% <4 #9.Hu+9, G6.VW.Hu+PI.Hu+8v.VW.VW.8v.Hu+PI.Hu+Hu+Hu+8v.8v.VW.VW.VW.9, VW.8v.Hu+Hu+Hu+8v.8v.cp.#9.Hu+8v.8v.Hu+#9.cp.h% h% h% h% h% h% h% h% i% <4 s3.h% 6% 1% 6% i% x3&vK.vK.vK.vK.vK.vK.vK.bf.uK.vK.uK.~i+~i+uK.M/.h% PI.PI.PI.PI.PI.PI.PI.Hu+Hu+PI.#9.#9.PI.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+v% v% af.af.af.af.v% u% u% S$ 9 +wq |G&*z&xD&]) 1G&2G&p/@3G&.> M-@'6 i_@%L>%B4#B4#Wy$Wy$]m$]m$]m$ln$%u$%u$5F$5F$Ms$Ms$a8$a8$a8$a8$;u$a8$5G$8F$5G$5G$5G$5G$sS$sS$bq$b8$_8$_8$!l$!l$5($u_%}{#5&@5&@CI+2R+2R+WK+hX+d8$47$Rb$Rb$Rb$J$+J$+J3$<{#k7$B2${^#!k#WK+,2+0a@{<+'P%^v@ds#ds#T5+{t#YR#T4$B)+l~+M[#D#$|0#Z]$WS@, $n>#$J$E[#5++5[%4G&5G&6G&7G&n[ 8G&R@ <* s)@9G&~~#FN 0G&aG&bG&cG&dG&eG&fG&gG&hG&iG&jG&kG&lG&mG&nG&oG&pG&qG&rG&sG&tG&uG&vG&wG&xG&+E&yG&J(&zG&AG&BG&$G R}@~0+PT.'B@a #CG&DG&dm#'E@EG&FG&GG<@:0#Y:@Lc &S Qp 7O.Xg b9 $3 HG&*N.5++CR.WN+IG&JG&y{$t{%t{%t{%pZ%)2+u8+u8+2I.oZ.$Y.vv%*>#i!@m1#|h$Xv%j!$Y;$Nt%G'$3C%DD%ED%2C%u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Kv Eu vR@$4@$4@-! [f wb _J$*C+`8%FU$.9%Bo$j-+s_+rm+5(@w^@Gt$_a@)r$E5&KG&LG&Ql$h>$W=$W=$Eq$Eq$9&$9&$MG&MG&1e@Yt&Kl$NG&~r&tn&5q&lo&8u$l7%M$&CD$y9$n>$n6$2x&n6$Q*$G|#1*%XG#7p#WG#hZ@UG#UG#@F#p>$%J#yl&OG&PG&QG&RG&Qd&SG&TG&UG&VG&WG&XG&G7&YG&ZG&`G& H&T(&wy aj&a+&.H&+H&a+&i$#+W@1f @~ +~ r[@-E r_$cs xt Z{$Z{$;M 'n#[[%@H&z(@z@%N:+`]$im$bN$W.@6$@7$@O&$^=$^=${]$DM@&n%7G+8G+;K@#N+gi@,7$10#p'@ZO@[-+`@+A[#!`+r[#Cu+8V [e jq$#H&lw@$H&%H&&H&*H&=H&-H&;H&>H&[t&,H&'H&3+11+(d.9O 9O &c.H0.^d.)S.L` ]@+7@@r%.7@qH&= ${r%iQ%EZ$pR$bC$iR$iR$iR$)O$)O$jR$jQ$rH&rH&q$>q$MU#,:@WH@v~@v~@5X+[R+[R+T;@T;@T;@P3+ok+lm+!P+gp+gp+Ht+Ht+gp+gp+gp+cr+cr+!P+iD+G)@Jn+0y+WA+0y+|$@(|+=w+-w+up+Jl+Jl+a&@b=@0&@0&@8&@8&@8#%8#%8#%8&@t<@6o@0&@my+my+Y.@CD+^^#W.@6G+BM@9e#tr$tr$WL$_P+{^#oZ@e'#e'#_P+Z&+i[+(m@|_+;9@:v@v<@f>@k%+sH&h-+eR.#{@2c#OB@-K.O#@;[ S-@c2 Q} z&#`V@S%>S%~h&{h&~h&>S%~h&0, &, 0, ~h&Be+Be+Be+Be+Be+Be+Be+@d+Be+Be+Be+@d+@d+@d+z$$z$$Pw%Pw%Pw%;~@2&$2&$Eo+Eo+PF++d+Ae+KE#Jb#Jb#+R@Ae+i|$Fc%Fc%Fc%Fc%Fc%Fc%Fc%Fc%]1%@g%5e%5e%5e%5e%@g%Fc%#u%#u%#u%Fc%5e%&0+R`%5e%5e%5e%@g%@g%]1%]1%^b+)D+Yt.i~ ,v.i~ Yt.6g+]$@)> 6g+]$@]$@]$@]$@6g+)> ,v.i~ i~ Yt.)> 6g+]$@]$@i~ i~ i~ i~ i~ i~ i~ i~ 5A.Ea+xc+xc+xc+xc+Ea+5A.w8.{! 5A.5A.{! be+{! ]! ]! 5A.Ea+5A.{! be+be+]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+6g+6g+6g+6g+6g+6g+6g+)> 6g+6g+6g+6g+6g+6g+6g+6g+5A.]! ]! {! {! be+be+8g.be+{! ]! ]! ]! ]! ", "G6.VW.VW.G6.hY.hY.G6.hY.hY.hY.hY.hY.hY.hY.hY.H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@+h.+h.+h.+h.+h.d( ~% %% 4% %% %% %% %% %% %% 4% ~% ~% ~% ~% %% 4% 4% 5% %% %% %% %% %% %% %% %% r: r: r: r: %% %% %% %% |% |% )= d= d= 3{ M=.3{ )= |% $% $% $% &) &) &) ~_ ~_ &_ &_ &) &) $% $% %% 5% f% 5% 4% 4% f% fL.5% %% ~% %% 5% 5% 4% ~% ~% ~% ~% %% %% 4% 4% 4% 5% 5% 5% 5% 5% 5% 5% 5% ;_ ;_ ;_ ;_ ;_ ;_ -H.-H.n` 1% Hu+Hu+8v.8v.PI.[3+Hu+Hu+8v.8v.8v.8v.Hu+Hu+8v.8v.8v.VW.VW.9, 9, 9, 9, VW.VW.8v.Hu+Hu+PI.PI.cp.#9.Hu+8v.8v.Hu+#9.cp.<4 <4 <4 <4 <4 <4 <4 <4 6% h% <4 h% 1% WW.1% *_ uK.uK.uK.uK.uK.uK.uK.uK.~i+bf.vK.uK.~i+'J.bf.x3&h% PI.PI.PI.PI.PI.PI.PI.Hu+PI.PI.PI.PI.PI.PI.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+8v.8v.8v.8v.8v.8v.8v.8v.v% v% af.af.af.af.v% u% =] S$ k@&#+|G&xD&vH&Yw&1G&m9%p/@q/@g: YW fa =2@%L>%B4#B4#Wy$Wy$]m$ln$ln$ln$5F$5F$6F$6F$Ms$Ms$a8$a8$a8$a8$;u$a8$^m$Cj$5G$5G$S@%S@%tV$tV$bq$b8$_8$c9$!l$~l$d9$WK+BM@5&@5&@5&@5&@CI+WK+WK+jF$d8$-I$Rb$Rb$Rb$Rb$&6$x4#:{#AA#yU#]v#hX+Y&+Fe@H%%NG%cx@QS#/v@/v@{t#qn%'M$7F$l~+~I$4[%HK$+B$g~@N]+F!$J{$#f$yD%Ax#5[%V1 wH&1z Q[&xH&Gb wF yH&wU+'M b9&zH&AH&BH&CH&DH&EH&FH&GH&HH&IH&JH&KH&LH&MH&NH&OH&PH&QH&RH&SH&TH&UH&VH&WH& E&XH&YH&jA&ZH&#M.`H&`q.R>@ I&Ak#.I&+I&@I&#I&$I&nc.Vk&%I&&I&zX$Iz v! sG e7#n{ ]M$1/ Pd nT./N.AL.ez&)Q.*I&Y]+=I&( +pZ%sP$sP$sP$)2+EU.`@+e!@,4+Yx#S^$;S+Qe@h!@E<%P;%j!$uK Nt%Nt%FD%FD%7C%7C%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E Kv Eu vR@$4@tG )J DN gP@_J$`f%&c&}=&:g$M=%6*+h_+l4+&!@Y5+Tl$0X#2r$E5&KG&LG&Ql$h>$W=$W=$J*$J*$lo&Mm$MG&MG&1e@Yt&~r&~r&-I&Xt&;I&g|&>I& `#}J$X2$^A$#-$`E#i&$,#$6x#,I&l5$|U#YG#NO#5x#UG#z #Hk&OK#'I&m]$)I&Dp$AO%!I&~I&{I&]I&^I&eH /I&=k&(I&_I&:I&b@xt r_$!J @y bq 6r p[#^<%#J$o%$Y@+x1#`]$T@+iF$6G+G@@DM@{]$=Y$}I&|I&1I&:`#w)$&n%6G+DI+QU#u4#A;@UI#!5@`O@R]+d%%N~$r[#$g+DR@)M %R$] $2I&3I&4I&5I&*H&6I&7I&8I&9I&A@.0I&aI&bI&>3+11+Lt.Gk.fh.qe+%c.Z#.Q*.Q` +J.cI&cI&n!#c&.dI&eI&yu Tt&>b@#~ fI&gI&hI&iI&jI&kI&lI&mI&nI&oI&pI&qI&rI&sI&tI&uI&vI&wI&xI&yI&zI&AI&BI&CI&DI&EI&FI&GI&HI&II&JI&KI&~v&->.EA Qo+rF.$@@{.@4x +5._j.`+ 9# H# LI&['$MI&Nj#;{# .@Gn#w;%Fh&NI&`&&5v%<$&|0$w-$T!$T!$8-%:`#:^$K.%7y%~r%#&$:G&oH&oH&oH&pH&6Y#t9#ih# q+.q+O3#>]@+7@.:$@r%qH&OI&OI&PI&QI&QI&bC$iR$.O$.O$.O$.O$}&5P+`m+3j+.B#PM.O#@#9 t/@c2 Q} z&#`V@S%>S%~h&~h&~h&~h&{h&{h&{h&~h&@d+@d+@d+@d+@d+Be+Be+Be+Be+Be+Be+@d+@d+@d+z$$z$$Pw%;~@;~@;~@Eo+Eo+w*$w*$P~ PF+KE#NZ@3K@Hj.BX@NZ@i|$Fc%Fc%Fc%Fc%Fc%Fc%Fc%Fc%]1%5e%&0+&0+&0+5e%@g%]1%Fc%Fc%Fc%]1%@g%5e%S}%5e%5e%5e%5e%5e%5e%5e%PF+)D+Yt.,v.ZY ,v.i~ 6g+]$@,v.,v.,v.i~ i~ ,v.,v.,v.i~ {! Yt.{! )> 5A.6g+5A.i~ be+i~ be+i~ be+i~ be+5A.Ea+Ea+Ea+Ea+Ea+Ea+5A.gA 8g.{! {! be+be+{! 5A.{! ]! 5A.5A.]! {! be+be+{! {! {! {! {! {! {! {! ]! ]! ]! ]! ]! ]! ]! ]! Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+]$@6g+)> 6g+jy.q9+q9+jy.6g+6g+6g+6g+6g+6g+6g+6g+5A.5A.]! {! be+be+8g.8g.be+be+{! {! {! {! ", "G6.VW.9, hY.X)@hY.9, hY.hY.hY.hY.hY.hY.hY.hY.H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@H;@%% ~% d( +h.+h.+h.+h.+h.%% %% %% 4% 4% %% %% %% ~% ~% %% 4% 4% 4% 4% 4% %% %% 4% 4% 4% 4% %% %% r: r: r: r: %% %% %% %% |% |% d= d= 3{ 3{ ,;.2{ )= |% $% $% $% &) &) &) $% $% &) &) &_ &_ ~_ ~_ 5% f% f% 4% d( d( %% 5% v% 5% 4% 4% f% v% f% 4% ~% ~% %% %% 4% 4% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% ;_ ;_ ;_ ;_ -_ -_ R_ R_ _j.1% Hu+Hu+8v.8v.PI.cp.8v.8v.Hu+Hu+Hu+Hu+8v.8v.8v.8v.8v.VW.VW.9, 9, 9, VW.VW.8v.8v.Hu+PI.PI.#9.cp.#9.Hu+8v.8v.Hu+#9.cp.<4 af.af.af.af.af.af.af.R_ g% af.g% -H.l` -H.*_ uK.uK.uK.uK.uK.uK.uK.uK.'J.bf.vK.uK.~i+'J.~i+6e.h% PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.Hu+Hu+PI.PI.PI.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+8v.8v.8v.8v.8v.8v.8v.8v.v% v% af.af.af.af.v% u% si h# 9 ++m@wD&TI&UI&O]@VI&WI&XI&YI&sQ+ZI&`I&ii d{ l|@ J&re$|r$`O@ue#A'#|k+|k+|k+A'#5)#4W.D)+W_#4w+4w+4w+]8$]8$Qy$Qy$Qy$aw$aw$Ry$Qy$kn$~m$CM#CM#:$%:$%L>%L>%B4#B4#Wy$Wy$]m$ln$%u$%u$5F$5F$-J$-J$Gs$Gs$Gs$Gs$;J$;J$;J$Gs$Dj$Cj$^m$5G$S@%;;%tV$bs%ow$b9$c9$c9$~l$~l$d9$WK+BM@2 @2 @2 @2 @5&@DI+hF$kF$5($!H$!H$!H$!H$!H$qw$8D#Cr%os$%R#S[#7V@Y.+rg@p_+,]%PU#8k#ds#ds#n>%c8$y4#_{#/{#j<@f&@YJ#+B$Ub+%>#Wt+x[#3F$-W+[`#9<+.J&+J&wH&uT.@J&|3 MM+#S.#J&wb Xa&$J&%J&&J&*J&=J&-J&;J&>J&,J&'J&)J&!J&~J&{J&]J&^J&/J&(J&_J&:J&e.n5.!_.aJ&IO%[N%LZ$t! uR@XD#Ld Ld S: YG@GB%5z%fI.bJ&L8&=N.o>%J+@pZ%pZ%88$88$)2+EU.x=$`@+@++f<#D[#5O#1w$H!$o1#P;%j!$uK Nt%^G%9C%9C%`x y u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E Kv Kv Eu vR@b@Yr .~ !J $5$6'$^x%Ez%ev$*;%}(%N$+n~+ar$,p$I$+{K@&n%DM@{]$}I&CJ&DJ&EJ&EJ&FJ&8-%jq#Tv#n%$}_+8Z+rc@g,$:B@7J#@f$Vo$d]@.J$N3%-S yd%GJ&HJ&IJ&JJ&KJ&LJ&MJ&NJ&OJ&PJ&QJ&RJ&SJ&6*@@(.Gk.(d.Gk.fh.8O &c.G0.-(.R` V#.fr&P*.j4.TJ&UJ&VJ&WJ&:0 |u ]M ~*&XJ&YJ&ZJ&`J& K&.K&+K&@K&#K&$K&%K&&K&*K&=K&-K&;K&>K&,K&'K&)K&!K&~K&{K&]K&^K&/K&(K&_K&,x&Mh&:K&$T!$8-%8-%:`#:`#nH&/`#7y%~r%#&$:G&oH&4K&4K&5K&nW#s9#s9# q+%!@>]@8)$.:$Z4@+r%OI&PI&PI&{,&f}%f}%iR$yV#.O$#w$#w$.O$:@>:@%}@5}@I2@I2@I2@;'@;'@;'@:T+:T+l;@$w+Ln+kR+ >+%-+jV+H,+B$+B$+jD+Ht+]V+Ht+Ht+Ht+gp+gp+gp+!P+fp+)P+Jn+A$++w+A$+T{@&4+f~+=w+@k+fD+FD+P,@=9@0=@0=@9=@9=@6&@6&@6&@9=@a=@fz@0&@Z.@ny+ny+8$@cB@W.@7G+~K@zM@aq$aq$WL$_P+[_+I_@I_@o=#nq@fX@v,$}_+z)+[f+gm@,(@,[#rZ@!5@g>@x<@M_#3j+${@rV@O2+99 If c2 Q} z&#`V@b&d<@x_@x_@{l.s3&Xb&<# 9g.7P.be+Lh+Lh+'g@;~ 3&$3&$'W+'W+X@$X@$X@$X@$%' %' %' %' ~h&~h&~h&~h&>S%>S%>S%~h&@d+@d+@d+@d+@d+Be+Be+Be+Be+Be+Be+@d+@d+@d+z$$z$$Pw%;~@;~@;~@Eo+Eo+w*$w*$uq./D.Jb#3K@!3.!3.m`.Jb#i|$Fc%Fc%Fc%Fc%Fc%Fc%Fc%#u%]1%5e%&0+&0+S}%5e%@g%]1%@g%S}%S}%S}%@g%#u%3]&@g%5e%5e%5e%5e%5e%5e%/D.oA+i~ ,v.ZY ,v.i~ )> 6g+,v.,v.,v.ZY ZY ,v.,v.,v.5A.h]@5A.M8@{! ZW+{! f!+{! ZW+{! ZW+{! ZW+{! {! 5A.]! ]! ]! ]! ]! ]! 5A.w8.8g.{! {! 8g.be+]! Ea+]! ]! ]! 5A.5A.]! be+8g.be+be+be+be+be+be+be+be+]! ]! ]! ]! ]! ]! ]! ]! Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+]$@)> Yt.6g+q9+Ai.dl.jy.6g+6g+6g+6g+6g+6g+6g+6g+Ea+Ea+5A.5A.]! ]! {! {! {! {! be+be+be+be+", "G6.9, 9, hY.X)@hY.9, hY.hY.hY.hY.hY.hY.hY.hY.H;@H;@H;@H;@H;@H;@H;@H;@Y6.Y6.Y6.Y6.Y6.Y6.Y6.Y6.4% %% ~% +h.vk vk vk vk ~% %% 4% 4% 4% 4% %% ~% ~% ~% 4% 5% 5% 5% 5% 4% %% 4% 4% 5% 5% 4% 4% %% r: r: r: r: %% %% %% %% $% $% d= 3{ 3{ 2{ ,;.2{ )= |% $% $% $% &) &) &) |% |% $% &) &_ ~_ n3 n3 5% f% f% 4% d( +h.d( %% v% f% 4% 5% v% I> f% 4% %% %% %% 4% 4% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% -_ -_ -_ -_ =_ =_ *_ g% 6% h% cp.#9.8v.9, 9, VW.VW.8v.Hu+PI.PI.Hu+8v.VW.Hu+Hu+Hu+8v.8v.VW.VW.VW.Hu+Hu+8v.8v.8v.Hu+PI.#9.cp.#9.Hu+8v.8v.Hu+#9.cp.g% g% g% g% g% g% g% g% *_ af.QB@g% R_ -H.R_ *_ uK.uK.uK.uK.uK.uK.uK.uK.'J.uK.L/.L/.uK.~i+bf.6e.h% PI.PI.PI.PI.PI.PI.PI.#9.PI.Hu+Hu+Hu+Hu+PI.#9.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+v% v% af.af.af.af.v% u% si i# <9.&#+7K&9v+8K&Cv&9K&0K&XI&aK&r/@%r `I&=2@+3#bK&nb@cK&|r$:B@ue#A'#A'#A'#A'#A'#5)#D)+W_#@ +wy+wy+wy+4w+4w+]8$]8$]8$rS$rS$Qy$Qy$~m$ns$CM#CM#:$%:$%L>%L>%B4#B4#Wy$Wy$]m$]m$=c$%u$%u$%u$=J$=J$'H$'H$'H$'H$,M$,M$,M$'H$Dj$-c$^m$^m$5G$S@%hU$hU$ow$b9$c9$b8$~l$~l$!l$iX+BM@2 @2 @2 @5G+5G+DI+CM@kF$kF$ K$!H$!H$!H$!H$qw$9D#y,+0D#St$^N#oZ@[_+= +,]%'*&8k#w-$Sv#l`%k`%,p$1h$/{#/{#2z@e$@C1#2)#=1@O$+7 @+v@d%%T-$-{#0I.sE%dK&eK&fK&gK&hK&iK&jK&y*@Md 7T$kK&lK&mK&nK&oK&pK&qK&rK&sK&tK&uK&vK&wK&xK&yK&zK&AK&BK&CK&DK&EK&FK&GK&HK&IK&JK&KK&LK& m&MK&cm.BG&NK&OK&PK&QK&RK&SK&mt+EU ,}.Fk.TK&,0&K7+UK&wy VK&6F [`@_,@5, ]1 Dn (G <1 BL.JW.1W%WK&1(%+]%!>++++, $88$)2+)2+~b#~b#LD+U-$Uj$C[#_V#ZN+j4#TB$j!$r_$^G%]G%Vw *B%*z ){&gB u1$u1$u1$u1$u1$u1$u1$Nt%u1$u1$&E Kv Eu vR@+R;@6)$fJ&KG&LG&<)%fF&W=$W=$sl&sl&Yt&Yt&,i@,i@}e@}e@XK&YK&ZK&`K& L&.L&+L&@L&BH@f-$#L&WG#X%#5x#tI$KM#3x&1J#=F#~5$m&$@{$^8&lk$p>$%^#.1$)I&$L&%L&&L&*f&*L&=L&am&-L&;L&A&&,6#>L&,L&'L&=k&~m#R~#tR@&0@8u#-3#)L&-d@IR%om$ n@$p@7G@[f 2r@$5$]-%Xv%Va&ji$NB@Fm$9Z+6)#!U#5G$!k#BM@&n%G@@G@@Nm&!L&~L&3v%{L&JQ$rZ%[$&[$&5P#aN#=t@+o+D@+T6#sz@~f#L+@ n+ms+O~$p2%>k&]L&Sm&^L&/L&(L&gE&_L&:L&]@.:$.7@L2&.r%@-&PI&{,&f}%IL&A)&iR$yV#.O$#w$.O$iR$)O$)O$'O$'O$'O$,O$[T$kQ$kQ$rQ$)O$)O$bC$bC${`#{`#M<@>:@OS#WH@WH@WH@WH@F,@F,@F,@hp+hp+hp+$w+$w+Ln+Ln+Ln+kD+H,+jD+YM@YM@YM@YM@jD+Ht+]V+Ht+Ht+Ht+Ht+gp+gp+cr+!P+fp+!P++w+ay+(T+A$+&4+f~+=w+=w+z@@fD+0$@P,@0&@0&@8&@8&@7$@7$@7$@8&@0&@{k@Z.@K@@my+my+8$@cB@6$@7G+~K@AM@aq$aq$WL$_P+mJ#ii@ii@(K@y)+nq@Ab#[_+j~+.h++o+gm@f,$/O$CB@q=#9I.8a&XJ$+/#]L$p<+99 il >! Q} z&#`V@( y4&{! 9Y+9Y+Lh+'g@Y@$3&$3&$'W+X@$X@$X@$X@$%' %' %' %' >S%~h&{h&~h&%' X@$%' ~h&Be+Be+Be+Be+Be+Be+Be+@d+Be+Be+Be+@d+@d+@d+z$$z$$Pw%Pw%Pw%;~@2&$2&$Eo+Eo+uq./D.Jb#Jb#Hj.!3.m`.Jb#i|$Fc%Fc%Fc%Fc%Fc%Fc%Fc%#u%#u%Fc%]1%@g%@g%]1%]1%]1%5e%&0+%P%&0+]1%3]&#d+]1%]1%]1%@g%@g%5e%5e%/D.)i.,v.,v.i~ i~ Yt.Yt.Yt.6g+)> Yt.Yt.Yt.Yt.)> 5A.v]#q)@h]@OU+ZW+V!+f!+VS+ZW+]%@ZW+]%@ZW+]%@ZW+ZW+5A.]! {! {! {! {! ]! 5A.be+{! ]! {! 8g.8g.]! Ea+Ea+5A.{! {! ]! 5A.{! 8g.{! {! {! {! {! {! {! {! ]! ]! ]! ]! ]! ]! ]! ]! Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+jy.)> i~ )> q9+Ai.q9+6g+6g+6g+6g+6g+6g+6g+6g+6g+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+]! ]! {! be+be+{! ", "G6.9, G6.X)@X)@G6.VW.hY.hY.hY.hY.hY.hY.hY.hY.H;@H;@H;@H;@H;@H;@H;@H;@Y6.Y6.Y6.Y6.Y6.Y6.Y6.Y6.~% ~% d( +h.+h.+h.d( d( ~% %% 4% 5% 5% 4% %% ~% ~% %% 4% f% f% f% 5% 4% %% 4% 5% f% f% 5% 4% %% r: r: r: r: %% %% %% %% $% $% 3{ 3{ 2{ 2{ ,;.2{ )= |% $% $% $% &) &) &) &) &) &) &) &_ &_ &_ &_ 4% 5% f% 4% ~% ~% 4% f% f% 4% %% 4% f% v% 5% %% %% %% 4% 4% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% =_ =_ =_ 0c 0c A^.af.af.6% h% cp.#9.Hu+9, 9, 9, VW.8v.Hu+PI.PI.Hu+8v.VW.PI.PI.PI.Hu+Hu+8v.8v.8v.cp.#9.Hu+8v.8v.8v.PI.PI.cp.#9.Hu+8v.8v.Hu+#9.cp.*_ *_ *_ *_ *_ *_ *_ *_ g% QB@4=+QB@*_ R_ *_ af.bf.bf.bf.bf.bf.bf.bf.bf.~i+uK.EK%EK%vK.uK.uK.x3&s3.cp.cp.cp.cp.cp.cp.cp.#9.PI.Hu+8v.8v.Hu+PI.#9.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI.v% v% af.af.af.af.v% u% si ^. =8.&#+~e Lx+O' Cv&LL&ML&NL&OL&PL&mO+QL&w~ g_@~2@q^%RL&SL&m>&+<+'>+4W.5)#5)#5)#4W.W_#@ +3)#3)#3)#3)#wy+wy+4w+4w+4w+-o$-o$]8$4w+ns$ns$CM#CM#:$%:$%L>%L>%B4#B4#Wy$Wy$ar$>b$>b$>b$nw$nw$Hs$Hs$Gs$Gs$;J$;J$;J$;J$AU$;J$Dj$-c$Dj$^m$^m$^m$cN$cN$ow$b9$b8$b8$0N$0N$!l$iX+~K@R)@R)@8G+5G+;K@CM@CM@bN$iF$g>&g>&S!$S!$S!$$*$E4#TL&_f$ B$DA#gX@y)+Rb+Y&+}|+-,$-,$I$+pw$-I$qw$1h$[C#i)$2z@hB@C1#2)#g&@O]+0Z+m[+/B+i($g3#S^$8F./{+Uc$,N@UL&VL&WL&U/&/T.Mc 1U$XL&YL&ZL&`L& M&.M&+M&@M&#M&$M&%M&&M&*M&=M&-M&;M&>M&,M&]J&'M&)M&!M&~M&{M&]M&^M&/M&(M&_M&:M&[#_v@1Y+M/+Wt+3w$}=%E_#}_%n)$>P CM&DM&EM&FM&GM&HM&IM&JM&KM&gK.hK.LM&MM&Qo.(Z NM&8O fh.Ks.fh.8O %c.:6.k+.r].08.63.sA.{=+OM&i+.E{+PM&-b 9q /7 d$$QM&RM&SM&TM&UM&VM&WM&XM&YM&ZM&`M& N&.N&+N&@N&#N&$N&%N&&N&*N&=N&-N&;N&>N&,N&'N&)N&!N&~N&{N&]N&^N&/N&(N&s7@uA+1-. w.=m.W`%Ll 5.p0.xV@^Q.ds$~`+{-#rK@qL.7%%In#Fh&_N&:N&]@`4@Z4@4q&{x$@-&f}%z)&z)&3N&4N&iR$yV#yV#yV#iR$bC$pR$sQ$)O$)O$,O$,O$rQ$rQ$kQ$rQ$)O$bC$bC$bC${`#{`#M<@>:@|T@v~@29@[R+]V+Ht+oI+oI+Mn+Mn+Mn+q;@q;@q;@q;@gK@]G+qy+P0+P0+P0+u)+):@B$+Ht+]V+]V+]V+Ht+Ht+gp+gp+dr+gp+!P+cr+ay+}R+ay++w+u)+Q0+vr+vr+1V+1V+b~@0$@Z.@Z.@9$@8$@EM@EM@DM@8$@Z.@tr+e^@e^@_w+my+8$@H@@6$@7G+~K@AM@aq$aq$WL$_P+v,$S,+gi@gi@->+i~+L:+.o+[/+fi@)}@JL#5N&KA$wg@)>+6N&cW.`m+-v$NM..^+99 Ti >! Q} z&#`V@S%.y&.y&+y&Xw&Xw&Be+@d+@d+Be+Be+Be+@d+@d+@d+z$$z$$*Z+*Z+*Z+*Z+=|$=|$2&$2&$/D.^b+KE#KE#Jb#3K@BX@KE#i|$Fc%Fc%Fc%Fc%Fc%Fc%Fc%O4%3]&3]&3]&3]&O4%Fc%Fc%@g%@g%5e%5e%5e%]1%#u%O4%Fc%Fc%Fc%]1%]1%@g%@g%PF+[].KB i~ )> )> Yt.,v.ZY ]$@6g+)> Yt.Yt.)> 6g+Ea+OU+A) OU+A) OU+!>%]%@!>%OU+A) OU+A) OU+A) OU+OU+v]#5A.]! {! {! ]! 5A.Ea+5A.Ea+Ea+]! be+8g.]! xc+T_+5A.8g.8g.{! 5A.]! {! {! {! {! {! {! {! {! {! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! q9+)> ,v.Yt.q9+Ai.jy.Yt.6g+6g+6g+6g+6g+6g+6g+6g+]! ]! 5A.5A.Ea+xc+$(+$(+Ea+5A.]! {! {! ]! ", "n` WW.n` (j.(j.n` 1% _j._j._j._j._j._j._j._j.Lv.Lv.Lv.Lv.Lv.Lv.Lv.Lv.Ml Ml Ml Ml Ml Ml Ml Ml +h.vk vk vk +h.d( %% 4% d( %% 4% 5% &_ &) $% 0' d( %% 5% f% v% f% 5% 4% %% 4% 5% f% f% 5% 4% %% %% r: %% %% %% %% %% %% $% $% 3{ 3{ 2{ 2{ 2{ 5! |% |% $% $% $% &) &) &) n3 ~_ ~_ &_ &) $% $% |% %% 5% f% 5% 4% 5% v% w4.5% %% ~% ~% 4% 5% 4% ~% %% %% 4% 4% 5% 5% 5% f% 5% 5% 5% 5% 5% 5% 5% 5% 5% f% f% v% v% I> I> 4=+(j.WW.h% <4 h% i% i% h% VW.8v.Hu+PI.PI.Hu+8v.VW.#9.#9.#9.PI.PI.Hu+Hu+Hu+[3+cp.PI.8v.8v.8v.Hu+PI.cp.#9.Hu+8v.8v.Hu+#9.cp.R_ R_ R_ R_ R_ R_ R_ R_ af.QB@4=+QB@g% *_ g% af.bf.bf.bf.bf.bf.bf.bf.bf.~i+vK.GL.GL.L/.vK.uK.x3&s3.cp.cp.cp.cp.cp.cp.cp.cp.PI.Hu+8v.8v.Hu+PI.cp.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+#9.#9.#9.#9.#9.#9.#9.<4 af.af./0./0.af.af.v% u% -h %. tJ wq )$@8N&Mx+Cv&]) 9N&eO+U;$jO+.$$9`@w/@>2@0N&aN&m%+(8%`O@ue#V,+D)+4W.>4+5)#4W.W_#+B$wy++B$+B$+B$3)#k %8o@N@%N@%wy+wy+wy+wy+wy+ns$bE$bE$|C#:$%L>%L>%'7$Jx$5d$5d$S5+Sj$Rj$Ms$Ms$nw$nw$nw$a8$a8$;u$;u$;u$;u$;u$;u$Dj$Dj$Dj$Dj$Dj$Dj$a9$a9$SQ$bq$b8$!l$0N$0N$!l$kF$~K@2 @2 @5G+;K@;K@r8+nz#DI+DI+/'$/'$I$+hF$I$+|T+_/#T}+e&@_/#N+#{^#gX@Z&+!k#5($pw$S!$-I$!H$(^$Rb$ni$aD#x4#7G#.B$f&@k<&3z@|x@qq@mi@#++j8$RH#0&%Yx#I-+K_%bN&cN&dN&b+%a:&X} Nc fS$eN&fN&gN&hN&iN&jN&kN&lN&mN&nN&oN&pN&qN&rN&sN&tN&uN&vN&wN&xN&yN&zN&AN&BN&CN&DN&EN&FN&GN&HN&IN&JN&KN&LN&MN&NN&ON&PN&QN&$G X*@A .O@.^Z RN&3C&SN&TN&kf&h4#U~#UN&/c#8q Ti F`+@<@Xh NG.z +I-+VN&r)&+{@pD#EU.)2+i|#tD$Gz$-i#WS@, $o%$~f#_V#ZN+h!@DG%j!$i0$]G%*B%7M&WN&XN&cC%.y u1$u1$u1$u1$u1$u1$Nt%Nt%u1$&E d.#d.#q<$(0@%-#g>#+-#%-#_J$ U@g=&YN&68%( +B_+3:@Z<@K&+lR+jm+6)$fJ&go%9M&Pl$fF&Jw$Jw$Kw$Kw$yv$5q&Ur$ZN&ZN&XK&`N& O&.O&+O&fr%gM&@O&iM&#O&$O&%O&@F#8p&aS#aS#JO#s^$&O&S1$yQ#*S$=p%*O&=O&-O&_W#;O&oJ&>O&j3%yW.,O&'O&)O&!O&~O&{O&G-&vg#]O&V`%^O&vg#v! c~ -f#=f#@t#Wm@Ta&c7#EV#aB Zy v_$bs 0q 7'$Vv%fq$9d%k&%V{$i($K^$x4#c=@e'#2R+5G+R)@|#%6$@W.@+@%>M$7|%~t#/O&(O&_O&:O&' i+ ;7.IO&Q$+JO&!f#D9&0,%Uj$KO&dS%m6&LO&(O&MO&NO&OO&PO&cu%Uv#7G+w)$j)$:6$^k###$ea%(6$$v$5K&5K&2N&QO&QO&%`#%!@er+]V+ZM@%7@|T@fY# 7@#w$.O$:@29@5X+[R+oI+ZM+nI+Gt+/P+nI+^G+^G+^G+[T+[T+)B+)B+)B+_T+:V+}T+_T+P0+Ll+jD+Ht+]V+]V+]V+Ht+Ht+gp+gp+nI+#w+cr+Ft+}R+OK+}R+(T+A$+b$@}T+R0+uI+y@@d^@O,@L@@K@@my+8V@8V@I@@I@@8V@tr+Jl+Jl+g~+g~+_w+my+*>+x;@8G+R)@AM@On$]^#pZ@WK+nZ@BO@]-+->+yM@r8+<_+x'#7Z+b&u9&Ld&v n|.w5&xc+y{ y{ x8.9Y+^b+=|$+d+u3$%' %' %' %' X@$X@$X@$X@$%' {h&0, {h&X@$u3$X@$>S%)A&%z&%z&+y&Xw&Be+@d+@d+Be+Be+Be+@d+@d+@d+z$$z$$x*$ME+x*$u3$u3$=|$=|$=|$^b+Y@$_c$PC#KE#NZ@Ae+PC#Fc%Fc%Fc%Fc%Fc%Fc%Fc%Fc%3]&`E&TO&#d+TO&`E&O4%Fc%/D.PF+^b++d++d+^b+PF+/D.3&$Y@$Y@$+d+^b+^b+PF+PF+Xl KB i~ 6g+6g+)> ,v.KB )> Yt.i~ ,v.,v.i~ Yt.]! f!+V!+]%@]%@OU+PS@PS@q)@OU+OU+OU+OU+OU+OU+OU+OU+u]#xc+5A.]! ]! 5A.xc+$(+xc+$(+xc+5A.be+be+]! xc+G|@Ea+8g.gA be+]! 5A.{! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! dl.)> ,v.i~ jy.dl.]$@,v.6g+6g+6g+6g+6g+6g+6g+6g+be+be+{! ]! Ea+xc+$(+T_+xc+Ea+]! {! {! ]! ", ":j.oG.uk uk oG.:j.m` l` l` l` m` :j.:j.oG.oG.~% ~% d( d( d( +h.+h.+h.+h.+h.+h.d( d( d( ~% ~% ~% O~.O~.O~.~% ~% ~% ~% |% &_ $% 7c 5c d= 2{ )= $% $% $% $% $% $% $% $% |% |% |% |% |% |% |% |% 7c v% W_ $% 8c &) &_ 0' $% $% $% $% $% $% $% $% ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ A^.A^.0c =_ -_ ;_ ;_ 2b 5% 5% 4% 4% %% ~% ~% d( %% 4% 5% f% f% 5% 4% %% 5% 5% 5% 5% 5% 5% 5% 5% f% 5% 4% %% %% 4% 5% f% sS m3 *- *- Z^ m3 b/ 7% 4% 4% *_ g% QB@4=+6v@@[+w% j}+j}+j}+j}+j}+j}+j}+(s.j}+5!.P7.P7.5!.j}+(s.cp.#9.Hu+8v.8v.Hu+#9.cp.VW.8v.PI.#9.cp.#9.PI.Hu+QB@g% af.4=+g% m` l` af.4=+*_ m` l` af.QB@R_ :j.0c 0c 0c 0c 0c 0c 0c 0c A^.A^.A^.A^.A^.A^.A^.af.<4 #9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.[3+[3+cp.PI.Hu+8v.VW.9, PI.Hu+8v.VW.8v.PI.cp.UO&j0&VO&,J.0H.aH.X_ ~_ t% ed !. sM /= i3 WO&XO&Lr#YO&3M+nF+WU.eM+K8 %<@ZO&`O&C>&4I.>V.Eb#GB@){+sY$^F$t8+X@+5W.j|#>4+D)+@ +|0#ns$cD$dD$Vk$fE#Vk$CM#xC$Is%Is%Is%Is%Is%Is%Is%K^$dD$A+%dw$*I$DP$Hs$5G$Dj$Dj$Ej$Ej$Ej$,p$,p$,p$qw$,p$,p$,p$Ej$Ej$a9$a9$cN$cN$cN$cN$cN$cN$bq$bq$~l$!l$!l$lF$kF$jF$iF$iF$XK+XK+XK+BM@5&@R,+R,+R,+YK+2 @=>+zI+{-+yI+hX@RK+AD+P&,P&'P&)P&!P&~P&{P&]P&^P&/P&(P&_P&:P&#V-$}!$nP&B=@,'@Xp+V6$oP&fo%=r$|b$n7$'t$cp$Pr$Dq$wv$pP&qP&rP&sP&tP&uP&vP&&v%&v%dr%wP&xP&[Y#yP&Yr#%O&6A#I##zP&wn&oA#y &5g&|D#|D#T|#=S$*p%rY%C &-1$AP& R#BP&CP&B@$Uk#DP&EP&FP&GP&S%+HP&IP&JP&KP&LP&OH#Lz Lz ))#{Y@{Y@An#@t#C_#Iz L4$3`@m($a|$9;&MP&i^@NP&OP&yr%r!$h/+*,$}V+3G+[V+%27$T@+U@&PP&QP&GL&RP&I/+yB%}Y.m]&_V#_R#`f% N$+l&AK IN %l&SP&!D&TP&UP&JJ&VP&WP&XP&YP&,e.Yq.Z#.R` 63.1b.!2.=0.ZP&UA.UA.!n+!n+!n+${.-(.n!#gx.i]#`P&[3# Q&.Q&+Q&~8%u*@-! ke&@Q&#Q&$Q&%Q&&Q&*Q&=Q&-Q&;Q&>Q&,Q&'Q&)Q&BN&!Q&~Q&{Q&]Q&^Q&/Q&(Q&_Q&:Q&G$!E$_a@11@:a@5k@%7@]V+Ip#.5@hh#hh#yb#yb#Ft+!P+)P+fp+cr+~P+~P+Ft+!P+fp+!G+Ft+@w+uy#1N#/P+mQ&@7@>]@8)$tG+%!@.5@4k#.5@.5@t9#t9#M)@M)@M)@+w+fp+!P+cr+(T+ay+OK+K,@:&@&t@fz@{k@0&@0&@ny+ny+}=@gy+>w+>w+#B+1R+Rt+g~+Qt+/w+f^@lX+]K@ @%[H#)K@5$@4G+VK+#N+#N+{-+{-+3]+rd+Sx#4]+S%%' X@$~h&~h&~h&~h&~h&~h&~h&~h&.y&.y&+y&+y&Xw&Xw&Xw&Xw&+y&+y&Xw&Xw&Be+Be+@d+@d+Gc%Gc%]1%]1%Fc%#u%#u%O4%@g%@g%@g%@g%]1%]1%]1%]1%^b+2&$2&$2&$2&$2&$2&$2&$w*$=|$2&$w*$2&$x*$=|$l`.'g@;~ ;~ 6j+6j+;~ ;~ 'g@x8.Lh+'g@'g@9Y+x8.9Y+'g@8g.8g.8g.be+{! ]! ]! ]! Ea+5A.{! be+be+{! 5A.Ea+]! ZW+f!+f!+f!+f!+ZW+M8@M8@M8@M8@M8@M8@M8@M8@M8@Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.5A.5A.5A.5A.5A.5A.Ea+Ea+5A.{! {! 5A.$(+]! ]! ]! ]! ]! Ea+xc+$(+6g+6g+6g+6g+6g+6g+6g+6g+]$@]$@]$@]$@]$@jy.jy.jy.Ea+$(+T_+T_+Ea+]! ]! 5A.$(+xc+5A.]! ]! 5A.xc+$(+]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.5A.]! {! {! ", "ke le ie ie le ke he 2b 2b 2b he ke ke ke le |% |% |% 0' 0' 8c 8c 8c 8c 8c 8c 0' 0' 0' |% ~% ~% O~.O~.O~.~% ~% ~% ~% |% &_ d= 5c 5c d= ,;.)= d= $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% 9c &_ ~_ 0' 8c &) &_ 8c $% $% $% $% $% $% $% $% ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ 0c 0c 0c 0c =_ =_ =_ -_ 4% 4% 4% %% %% %% %% %% %% 4% 5% f% f% 5% 4% %% 5% 5% 5% 5% 5% 5% 5% 5% f% 5% 4% %% %% 4% 5% b/ sS 0Y+ni V[&z) 0Y+b/ Y^ 4% 4% =_ 0c A^.X_ X_ QB@x% l#@l#@l#@l#@l#@l#@l#@{t.j}+$9.6!.6!.$9.j}+{t.#9.PI.8v.VW.VW.8v.PI.#9.VW.8v.PI.#9.cp.#9.PI.Hu+af.*_ g% 4=+g% l` -H.QB@4=+*_ m` -H.af.QB@R_ :j.0c 0c 0c 0c 0c 0c 0c 0c A^.A^.A^.A^.A^.A^.A^.af.<4 #9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.cp.cp.#9.PI.PI.Hu+8v.8v.cp.#9.#9.PI.PI.PI.#9.J].sQ&tQ&uQ&vQ&aH.X_ 0c t% .* 8# c8 61 bi wQ&xQ&r($j, HC+BO+zO+Uy a2$yQ&q'+h~@&V.!Q.E9&HB@0]+){+PD@!V@c!$X@+X@+j|#>4+D)+@ ++*+N@%i%%i%%B;% v@C4#:$%cD$Js%Js%Js%C~%C~%C~%C~%K^$dD$A+%dw$*I$5F$Gs$,H$a9$a9$Ej$Ej$Ej$,p$,p$,p$,p$,p$Ej$Ej$a9$a9$a9$cN$cN$cN$cN$cN$cN$cN$bq$bq$0N$~l$hm$WL$lF$kF$jF$jF$WK+WK+WK+}{#5&@5&@AI+zI+zI+zI+1G+1G+1h#C@@C@@T.@S.@T.@=B+2G+}V+#/C@JQ&KQ&LQ&MQ&NQ&OQ&PQ&QQ&RQ&SQ&TQ&UQ&VQ&WQ&XQ&YQ&ZQ&`Q& R&.R&+R&@R&#R&$R&%R&&R&*R&=R&-R&GN&;R&>R&,R&'R&)R&!R&~R&{R&]R&,.+N#+N#+`F ^d.>e.fc.RB.hK.Cy&^R&/R&(R&_R&:R&$A@va If Bm G`+` #ob# Cm En n{ C;$y=$Wo$z[#E3$r}@2R&$<$Vi+Xp+.a@3R&fo%LG&1s$,o$C=%E=%E'%E'%uv$wv$4R&qP&5R&6R&^t$7R&lw%tL%I1&8R&9R&jM&0R&Dm#qT+J+#ZI#aR&oA#|D#bR&@Y#9h&-S$]w%sM%uf%cR&$0$dR&eR&fR&gR&Oa$[ %+g+W] hR&iR&MH#IP&JP&jR&kR&jR&O8#xy W~#Lz ]M vg#h@#L~ Q^#c~ W~#pI@g.#Gu Cz%lR&e3$mR&nR&oR&9/$q4$IL#oZ@dX+2G+6=@S&;R&,S&'S&Vg#)S&!S&~S&M`%{S&]S&1a&3w$h7#vx$-a$WS@W@+7X%AB%k!&1,$kx&^S&^S&_`#/S&_`#(`#ly+/w+&N+&N+b~@d^@z$+yb#t9#8s#;'$),&(S&_S&:S&tQ$L<@yT#h($h($=Z#;/+/+xd%xd%Pi$8G$*/+#w$:V$+F$+F$+F$!x$+O$w+wV$_x@%N+#B+#B+vD+S.@:w+P,+ZK+s;@S,@S,@>K@YK+3G+AI+@N+@N+>T@>T@~-+I:+_/+U,@U,@) +Xv+;[+tD@ap+#[S&}S&>-#aG#9Y Rg ;[ Qw#46 xb ry@8^ !o sd#WE q[ ^(#|S&e0&Jh 1S&o2&61&a~%|O$;1 W{ 2S&*6.w<+yH&3S&4S&@. @<.u=.5[ %.@8' 8' %.@Pw%*Z+ME+X`+%' %' >S%>S%>S%~h&~h&~h&~h&~h&~h&~h&~h&~h&~h&~h&.y&.y&+y&+y&Xw&Xw&Xw&Be+Be+@d+@d+@d+z$$mq+mq+mq+]1%]1%]1%Fc%Fc%Fc%Fc%Fc%#u%#u%Fc%Fc%]1%@g%@g%@g%2&$2&$2&$2&$2&$2&$2&$2&$Eo+=|$2&$vv+Eo+x*$=|$+C.9Y+be+{! ]! ]! {! be+be+{! ]! Ea+5A.{! be+]! Ea+be+be+be+{! {! {! {! {! {! be+8g.8g.8g.8g.be+{! 5A.]! ]! {! {! ]! ]! 5A.]! ]! ]! ]! ]! ]! ]! ]! Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.5A.5A.5A.5A.5A.]! 5A.Ea+5A.{! be+5A.xc+5A.]! {! {! {! ]! 5A.Ea+]$@]$@6g+6g+6g+6g+)> )> ]$@]$@]$@]$@6g+6g+6g+6g+]! Ea+$(+$(+5A.]! ]! 5A.Ea+Ea+5A.5A.5A.5A.Ea+Ea+]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.5A.]! ]! {! ", "ke le ie ie le ke he 2b 2b he he he ke ke ke $% |% |% |% 0' 0' 8c 8c 8c 8c 8c 0' 0' 0' |% ~% ~% O~.O~.O~.~% ~% ~% ~% |% &_ d= 5c 5c d= ,;.)= d= $% $% $% $% $% $% $% &) &) &) &) &) &) &) &) 0' $% |% 8c 0' &_ &) 8c $% $% $% $% $% $% $% $% ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ -_ -_ =_ =_ 0c 0c 0c 0c %% %% %% %% %% 4% 4% 4% %% 4% 5% f% f% 5% 4% %% 5% 5% 5% 5% 5% 5% 5% 5% f% 5% 4% %% %% 4% 5% b/ UV 0Y+ni ni z) ' .b/ Z^ 5% 5% =_ =_ =_ =_ =_ *_ j% $9.$9.$9.$9.$9.$9.$9.l#@l#@l#@l#@l#@l#@l#@l#@Hu+8v.8v.VW.VW.8v.8v.Hu+8v.8v.Hu+#9.#9.#9.PI.PI.*_ R_ *_ QB@af.-H.R_ 6v@4=+*_ l` -H.af.QB@*_ m` 0c 0c 0c 0c 0c 0c 0c 0c A^.A^.A^.A^.A^.A^.A^.af.<4 #9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.PI.PI.PI.PI.PI.PI.PI.|5+|5+|5+[3+[3+#9.PI.`d#@(&tQ&uQ&vQ&'J.X_ 0c t% m@ j$ 80+[U i3 li 5S&+K+gv+6S&BO+`Y+R&.wd@yQ&%'&HZ.&V.5I.E9&HB@0]+D_+PD@!V@c!$X@+X@+j|#>4+D)+@ +B%%k %i%%i%%B;% v@L>%$)%dD$K^$K^$K^$u-$u-$u-$u-$l7#dD$i%%/v$*I$5F$Gs$,H$a9$a9$Ej$Ej$Ej$,p$,p$,p$Ej$a9$a9$a9$cN$cN$sS$sS$cN$cN$cN$cN$cN$cN$bq$bq$rr$0N$tr$hm$WL$lF$kF$kF$5Z+5Z+XK+XK+2 @2 @=>+x)+>T@>T@3R+=B+xI+yD+yD+yD+A@@B@@3R+#bS&cS&|R&f%+dS&eS&cN&O<%fS&kI#gS&hS&iS&jS&kS&lS&mS&nS&oS&pS&qS&rS&sS&tS&uS&vS&wS&]K&xS&yS&zS&AS&BS&CS&DS&ES&FS&GS&HS&IS&JS&KS&LS&MS&NS&sk@OS&PS&QS&xI %b+S9+kO e|.e|.J>.MV.q!.RS&SS&XY@TS&Cx&`C%l.#:,@;z 7V YG@R_+(N.JW.US&WK&XN+VS&JG&Ls&7W.wp&f2%~}@Gz$LD+pZ%o%$N#$Th%qV$OK$NK${c$Z;$o($zz%Y!&yz%iy%VH%VH%-z -z ^G%^G%d.#b|$%B%$B%/$&aE%S&&c.#;E 7F {a 7F uG 8~ +/$]L$Wo$y[#2=$WS&r_+t=$y=@Xp+3s%XS&1s%YS&Ew$Or$Es%C=%E'%E'%uv$wv$4R&ZS&tP&vP&mw%~k$@8%!A%@j$z9$5[$1A#6p#Ur#@F#Hk&fG$+8$T*$u@&`S&:W#5g&}g&-t% s%%U${h%pS% T&.T&+T&@T&/Y.ty%}K |^#Pm@#T&MH#kR&$T&%T&#T& t#ew W~#W~#ew bj#OH#8.#$S#Ox@(|@}A oI@Mw Hv h8 &T&E;@mR&*T&=T&zV#V##2W.B2$6~@6~@2G+x)+x)+3 @3 @H@@X.@{K@CM@@#$v,$bN#-,$-T&;T&>T&r-+,T&'U+_ +;v$F'#Q-$l] }`@{s&'T&&b&)T&UP&`n&!T&~T&:u&{T&]T&^T&/:.xl.R` -(.j4.9;.;0.};+CR&/T&DR&r!.${.${.1..1.._..sA.d(#(T&`P&_T&:T&/+xd%xd%Pi$p)+Pi$#w$#w$$w$$w$$w$#w$.O$iR$7S$#w$iR$iR$#w$#w$iR$#F$Qi$I2$$ $oW$gc@3}@2+I:+RA+6y++>#zT&Xv+bZ.g)#Wv+]A#,W%AT&=T.'{#5K#pB.U!@Cn Ti _} 46 xb xb O^ #p ] WE 1^#^(#|S&|S&Eg zd [n&S_+oQ&Xe@BT&CT&DT&rQ&w<+E{.3S&U~%[. 2x+w5&5[ 8' %.@0@@c> X`+X`+X`+X`+=|$u3$x*$X@$>S%{h&0, &, ~h&~h&~h&~h&~h&~h&~h&~h&+y&+y&+y&Xw&Xw&Be+Be+Be+mq+mq+mq+>H%>H%>H%Gc%Gc%Fc%Fc%Fc%Fc%Fc%]1%]1%]1%`E&3]&O4%#u%Fc%@g%5e%5e%2&$2&$2&$2&$2&$2&$2&$2&$Eo+=|$2&$vv+Eo+x*$u3$+C.y{ w8.8g.be+be+8g.w8.w8.]! 5A.xc+Ea+]! {! 5A.xc+]! ]! {! {! {! {! be+be+be+{! {! ]! ]! {! {! be+Ea+Ea+5A.]! ]! 5A.Ea+Ea+]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.5A.5A.5A.5A.5A.5A.{! 5A.5A.]! be+be+]! Ea+5A.]! {! be+be+be+{! {! jy.]$@]$@6g+6g+)> )> Yt.]$@]$@]$@6g+)> Yt.Yt.Yt.8g.]! Ea+Ea+5A.]! ]! Ea+]! ]! 5A.5A.5A.5A.]! ]! Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.5A.]! ]! ", "ke le le le le ke ke he he he he he he ke ke $% $% |% |% |% 0' 0' 0' 8c 8c 8c 0' 0' 0' |% ~% ~% O~.O~.O~.~% ~% ~% ~% |% &_ d= 5c 5c d= ,;.)= d= $% $% $% $% $% $% $% &_ &_ &_ &_ &_ &_ &_ &_ $% 0' 8c 9c |% &) &) 0' $% $% $% $% $% $% $% $% ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ he 2b 2b ;_ =_ =_ 0c A^.d( ~% ~% %% 4% 4% 5% 5% %% 4% 5% f% f% 5% 4% %% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 4% 4% 4% 4% 5% Z^ m3 ' .z) z) ' .' .b/ Z^ f% f% =_ =_ -_ -_ ;_ -H.7% 5!.5!.5!.5!.5!.5!.5!.5!.$9.l#@{t.{t.l#@$9.5!.8v.VW.VW.VW.VW.VW.VW.8v.8v.Hu+Hu+PI.PI.#9.#9.#9.R_ -H.*_ QB@af.-H.*_ @[+4=+g% R_ R_ af.af.*_ l` 0c 0c 0c 0c 0c 0c 0c 0c A^.A^.A^.A^.A^.A^.A^.af.<4 #9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.Hu+PI.PI.PI.#9.cp.cp.cp.[3+|5+w7+ET&w7+[3+#9.2P 4]&FT&,J.vQ&~i+A^.~_ t% m@ L$ Zh@+2 St Rt mk @]$gv+6S&AO+kM+R&.wd@B1 GT&HZ.HT&5I.E9&HB@0]+D_+){+!V@c!$X@+X@+j|#>4+D)+@ +B%%k %CM#i%%B;% v@O@%$)%bE$l7#l7#l7#1)#1)#1)#1)#l7#bE$i%%/v$CO#%u$,H$,H$a9$a9$Ej$Ej$Ej$,p$,p$,p$a9$a9$cN$cN$sS$sS$sS$hU$cN$cN$cN$cN$cN$cN$bq$bq$rr$rr$tr$tr$hm$WL$lF$lF$5Z+5Z+5Z+1 @YK+2 @U&,U&'U&)U&!U&~U&{U&]U&^U&md&TT /U&(u&(U&_U&:U&zm@@M.M#+%b+&P.YP H@.i&.*'.o7.Jz&o$Es%Es% X$t9$Qr$hg$<}$qw%gt%7R&lw%/K%Ah$il%5U&bQ$RK#M6#RG#^8&Y%#fG$JO#ux#6U&7U&Y8&z:$)j&^w%$p%R<#bg%Cp%iO%8U&9U&0U&aU&+]%;{#bU&k| iR&MH#HY%cU&Aa@dU&]M e1#xy G5@dw ]M vg#bj#/M ]8@~8@[|@vR@Du bs .w%:x%eU&fU&gU&hU&S_#P@@+x@Tb+V=+Gl+Gl+H)@zI+>T@>T@3 @cB@X.@&n%{K@CM@}|+46+w-$vZ#vW#Zr&UL%iU&jU& @$L@%a6&Jt$%B%kU&lU&mU&nU&oU&pU&qU&rU&[t&A@.sU&R>@KB.yl.xj.:6.]@+7@x)&x)&qH&4}@;:@]]+^]+^]+;/+;/+2+I:+lK@6y++>#zT&hi@;[+tD@ap+&k@>V+BU.(W.p##5K#Tq@J4@#9 i< 46 L1 xb xb yb ={ ry@WE ^(#WE |S&*V&C4 zd ob 5^ BT&a~%pQ&W{ =V&-V&E{.rQ&;1 %S.h+ C.iS.`Y (D.8' 0@@c> X`+X`+ME+*Z+2&$=|$u3$X@$%' ~h&{h&0, {h&{h&~h&~h&~h&~h&>S%>S%+y&+y&Xw&Xw&Xw&Be+Be+Be+>H%>H%>H%>H%>H%>H%>H%>H%O4%#u%#u%Fc%]1%]1%@g%@g%`E&3]&3]&O4%#u%Fc%]1%]1%2&$2&$2&$2&$2&$2&$2&$2&$2&$=|$Eo+OJ.w*$x*$u3$(D..s.w8.8g.8g.8g.8g.w8.gA {! 5A.Ea+Ea+]! {! ]! Ea+5A.5A.5A.]! {! be+be+be+]! Ea+xc+T_+T_+xc+Ea+]! Ea+5A.]! ]! ]! ]! 5A.Ea+]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.5A.5A.5A.5A.5A.5A.{! ]! 5A.{! 8g.8g.{! Ea+5A.]! {! be+8g.8g.8g.be+jy.jy.]$@6g+6g+)> Yt.Yt.jy.]$@6g+)> Yt.i~ ,v.,v.gA be+5A.5A.]! {! ]! Ea+be+{! 5A.Ea+Ea+5A.{! be+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.5A.5A.5A.", "le ke ke ke ke le le ke ke he he he he he he $% $% $% |% |% |% 0' 0' 8c 8c 8c 0' 0' 0' |% ~% ~% O~.O~.O~.~% ~% ~% ~% |% &_ d= 5c 5c d= ,;.)= d= $% $% $% $% $% $% $% &_ &_ &_ &_ &_ &_ &_ &_ $% 0' 9c 0' |% $% &) &_ $% $% $% $% $% $% $% $% ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ le ke ke 2b ;_ -_ =_ 0c d( ~% ~% %% 4% 4% 5% 5% %% 4% 5% f% f% 5% 4% %% 5% 5% 5% 5% 5% 5% 5% 5% 4% 4% 5% 5% 5% 5% 4% Y^ Z^ z) ' .' .' .' .b/ b/ v% f% 0c =_ -_ ;_ ;_ l` 7% 5!.5!.5!.5!.5!.5!.5!.6!.$9.j}+{t.{t.j}+$9.6!.VW.VW.VW.8v.8v.VW.VW.VW.Hu+Hu+Hu+Hu+PI.PI.#9.#9.R_ -H.*_ QB@af.-H.*_ @[+QB@af.*_ g% g% af.*_ R_ 0c 0c 0c 0c 0c 0c 0c 0c A^.A^.A^.A^.A^.A^.A^.af.<4 #9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.Hu+Hu+PI.#9.cp.cp.[3+[3+PI.cp.|5+ET&ET&w7+|5+}n&>J.uQ&,J.,J.bf.0c &_ t% m@ L$ 2^ P6 J2 |> ;V&>V&hv+6S&BO+`Y+R&.wd@yQ&%'&9<+HT&5I.E9&0]+;A&GB@){+!V@c!$X@+X@+j|#>4+D)+@ ++*+k %i%%i%%B;% v@L>%:$%8o@}x@}x@}x@3z@3z@3z@3z@}x@bE$CM#{m$CO#%u$,H$a8$a9$a9$Ej$Ej$Ej$,p$,p$,p$a9$a9$cN$cN$sS$sS$sS$hU$cN$cN$cN$cN$cN$cN$bq$bq$rr$rr$tr$tr$hm$WL$lF$lF$zM@AM@V.@CO@w;@w;@lX+lX+f^@;B+P,+P,+$B+~w+~w+iy+[P+[P+Gn+AD+zI+[V+}{#_P+5($c9$!I$,V&'V&)V&)V&!V&)I$zM@iX+hX+c9$Ej$Dj$5d$m~+4[%+B$9Z+})#g&@T)@Gz$Qs%~V&{V&~v$]V&^V&/V&(V&ez&_V&:V&.R*.*'.TN.1b.tV&uV&vV&+LD+L6@Gz$LD+t{%/k#FU.=S+H9&Zm+JP#8v#u[$#I$@I$i0$+y +y +y +y 1C%1C%1C%1C%Kv &E %B%$B%$B%b|$S&&^A T^#0s v_$v_$U^#Yr ;z f]@`m+4w$In#xV&&&$qC$nw+Zr+2s%lp%|s%nt$Rp$Ds%Es%//%^U$L%%Q+%/a%R<$+j$~k$tL%Om$y9$ED$7#&E@%kw%&'$QG#yn%]#$(W$p6&pA#PN$o6$yV& 9$Kk&,d&|3$/w%i5$;Y%( &C.&zV&AV&BV&CV&)Q.y<@}z O} d1#QC e1#DV&EV&Pm@LZ$xy Lz xy d1#bj# t#/M dw {8@~8@<|@Eu =E +y ]*$FV&gq$||&GV&,q$Ow##o+W0+*1@V=+F6@5%$VK+TK+{-+^^#^^#7G+7G+&n%{K@T!$5P#5P#5P#PS#SF@TC%7)&B1%4a&,Q+zX@`~#X=#c$$HV&IV&Ai&JV&KV&LV&MV&(u&NV&NS&OV&bI&*_.mD &c.r].r].q].E>.PV&QV&RV&ZP&={.={.aw.aw.,u.,u.R` kc.9z.: #`P&SV&TV&UV&|/$U^#aB Gh@VV&WV&XV&YV&ZV&`V& W&.W&+W&@W&}Q&#W&$W&%W&}T&&W&ID&*W&=W&-W&;W&>W&,W&'W&)W&!W&~W&{W&]W&^W&/W&(W&_W&:W&uz.3$&G$% $ye@0i@3}@;:@|1@ 7@ 7@ 7@ 7@ 7@ 7@ 7@yV#Gt$yV#{`#{`#yV#yV#{`#}9@3}@xT#xT#,.$:a@S%>S%0, {h&{h&~h&~h&>S%>S%%' Xw&Xw&Xw&Be+Be+Be+@d+@d+mq+mq+mq+mq+z$$z$$z$$z$$O4%#u%#u%Fc%]1%]1%@g%@g%#u%#u%#u%#u%#u%#u%#u%#u%2&$2&$2&$2&$2&$2&$2&$2&$=|$=|$Eo+l`.vv+u3$u3$7g.x8.be+be+{! {! be+be+8g.8g.{! 5A.]! be+8g.{! ]! Ea+Ea+5A.]! ]! {! be+be+]! Ea+xc+T_+T_+xc+Ea+]! ]! {! {! be+be+{! {! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.5A.5A.5A.5A.5A.5A.{! 5A.5A.]! be+be+]! Ea+5A.]! {! be+8g.8g.8g.be+]$@]$@]$@6g+6g+)> )> )> jy.]$@6g+)> Yt.i~ ,v.,v.gA be+5A.5A.]! {! ]! Ea+be+{! 5A.Ea+Ea+5A.{! be+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.5A.5A.5A.", "le ke he he ke le ie ke ke ke he he he 2b 2b &) &) $% $% |% |% |% 0' 8c 8c 8c 0' 0' 0' |% ~% ~% O~.O~.O~.~% ~% ~% ~% |% &_ d= 5c 5c d= ,;.)= d= $% $% $% $% $% $% $% &) &) &) &) &) &) &) &) $% 0' |% &) |% 8c &) ;b.$% $% $% $% $% $% $% $% ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ke ke he 2b ;_ -_ =_ =_ %% %% %% %% %% 4% 4% 4% %% 4% 5% f% f% 5% 4% %% 5% 5% 5% 5% 5% 5% 5% 5% %% 4% 5% f% f% 5% 4% *- N~.z) 0Y+0Y+' .z) b/ m3 v% v% 0c 0c =_ -_ -_ R_ j% $9.$9.$9.$9.$9.$9.$9.5!.$9.j}+{t.{t.j}+$9.5!.VW.8v.8v.Hu+Hu+8v.8v.VW.PI.Hu+Hu+8v.Hu+PI.#9.s3.*_ R_ *_ QB@af.-H.R_ 6v@QB@af.af.af.g% g% *_ *_ 0c 0c 0c 0c 0c 0c 0c 0c A^.A^.A^.A^.A^.A^.A^.af.<4 #9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.PI.PI.#9.#9.cp.[3+[3+[3+PI.#9.cp.|5+w7+w7+w7+Te&;J.vQ&,J.bf.A^.~_ &_ U@ !. U# Qe+U& 1> 7V+v> 9W&j, HC+BO+AO+Uy a2$GZ.h +9<+@w&DG.E9&0]+;A&GB@D_+!V@c!$X@+X@+j|#>4+D)+@ +|0#ns$A+%A+% v@fE#C4#B;%bE$l7#l7#l7#1)#1)#1)#1)#}x@8o@CM#{m$CO#%u$a8$a8$a9$a9$Ej$Ej$Ej$,p$,p$,p$Ej$a9$a9$a9$cN$cN$sS$sS$cN$cN$cN$cN$cN$cN$bq$bq$rr$0N$tr$hm$WL$lF$kF$/H$AM@AM@'K@CO@!K@w;@ZK+ZK+*>+*>+P,+mX+$B+$B+$B+$B+$N+$N+Gn+Gn+hX@@N+r8+nz#I$+iF$V~$_H$0W&aW&aW&bW&%/$XK+WK+}{#d8$_8$@d$S5+~}%m~+km$3)#9Z+=1@~}@g~@o)%cW&dW&eW&}T$fW&gW&hW&QT&iW&jW&kW&lW&mW&nW&oW&pW&qW&rW&sW&tW&uW&vW&wW&xW&yW&zW&AW&BW&CW&DW&EW&FW&GW&HW&IW&JW&KW&LW&MW&NW&gE&OW&PW&QW&RW&SW&TW&UW&(X.Cg.Dg.nI lI D_.U` X#.fc.jc.{%.&D.6q.VW&WW&{J%=^$/t /,@@9 X t7 Wh &C+pT.Bt&tO.Ax#3#+XW&F)+)2+L6@Gz$tD$sP$t{%n~$`+$z'$=i&T/&IP#=v$7:%=o% J$H%$+y H%$+y ^,$1C%1C%1C%Kv &E %B%$B%$B%b|$S&&^A h.#YW&f.#g.#e.#^0@<,@Ho$7O#Iy$7R+L.+x/+xD$C$@Zr+2s%ZW&Ju$vo$vy%F=%//%mW$^U$j{%;5$9b%ef%fl$/K%/K%_I$oE$X2$RC$`E#'R$QG#PM#/W$`W& X&4F#o6$s^$G5&73$:2$.X&,d&|3$i5$xZ%,T$'Y%X&8v&,X&'X&)X&[t&!X&~X&sU&6%@i7+yl.Z#.G0.r].V#.~).().=0.{X&ZP&ZP&cm#cm#aw.!n+,u.,u./d.W#.=4.]X&^X&/X&(X&LY#yT%y]&g5%_X&:X&:@M<@+r%+r%+r%L2&$e&L2&Z4@w^@`0$E4@5}@;]@;]@%}@v~@WH@WH@%7@8i@pg%pg%qI+8s#Ip#9s#4k#$7@C`#XA#Lx#XA#Kx#Kx#Kx#c&@c&@c&@c&@OK+OK+OK+ N+7X+7X+:x@fh#&t@&t@#9@#9@{k@L)@L)@;w+.B+`K+%N+_x@hy+,w+'w+{w+Zp%N|%s;@Q)@S%>S%%' %' %' %' %' %' 0, 0, {h&~h&~h&>S%%' %' Xw&Xw&Xw&Be+Be+@d+@d+@d+z$$z$$z$$@d+@d+@d+Be+Be+Fc%Fc%Fc%Fc%Fc%]1%]1%]1%]1%]1%Fc%Fc%#u%#u%#u%#u%2&$2&$2&$2&$2&$2&$2&$2&$=|$u3$Eo+l`.vv+u3$u3$7g.9Y+{! ]! ]! ]! ]! {! be+8g.{! ]! {! 8g.8g.be+]! 5A.5A.5A.5A.]! ]! ]! ]! be+{! {! ]! ]! {! {! be+{! {! be+8g.8g.be+{! {! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.5A.5A.5A.5A.5A.5A.5A.Ea+Ea+5A.{! {! 5A.$(+5A.]! {! be+be+be+{! {! 6g+6g+6g+6g+6g+6g+6g+6g+]$@]$@]$@6g+)> Yt.Yt.Yt.8g.]! Ea+Ea+5A.]! ]! Ea+]! ]! 5A.5A.5A.5A.]! ]! Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.5A.Ea+Ea+", "9c 8c 0' 0' 8c 9c 7c 9c 8c 8c 8c 0' |% |% |% &) &) &) $% $% |% |% |% 8c 8c 8c 0' 0' 0' |% ~% ~% O~.O~.O~.~% ~% ~% ~% |% &_ d= 5c 5c d= ,;.)= d= $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% |% &_ n3 |% 7c &_ P~ $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% &) &) &_ ~_ ~_ n3 4% 4% 4% %% %% %% %% %% %% 4% 5% f% f% 5% 4% %% 5% 5% 5% 5% 5% 5% 5% 5% %% 4% 5% f% f% 5% 4% *- 3b ni !W+!W+' .z) b/ M2 v% v% A^.0c 0c 0c 0c g% x% x% x% x% x% x% x% x% j% j% x% x% x% x% j% j% 1% 6% h% <4 <4 h% 6% 1% h% i% 6% 6% 6% h% <4 ;H.af.*_ g% 4=+g% l` -H.QB@QB@QB@QB@af.g% g% g% g% g% g% g% g% g% g% g% g% af.af.af.af.af.af.af.af.<4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 s3.s3.s3.s3.;H.;H.;H.;H.s3.s3.s3.;H.5v@UO&zX&vQ&,J.bf.0c &_ &_ U@ !. /+ ZQ #@ 1> yG#XO&f!$0v+~A+aF+aF+iM+d|@2k%aT.^++@w&DG.E9&0]+;A&'{+D_+!V@c!$X@+X@+j|#>4+D)+@ +N@%~m$Fx$A+% v@d=@7I#fE#bE$l7#l7#l7#1)#1)#1)#1)#}x@8o@CM#{m$ln$=c$a8$%K$a9$a9$Ej$Ej$Ej$,p$,p$,p$,p$,p$Ej$Ej$a9$a9$a9$cN$cN$cN$cN$cN$cN$cN$bq$bq$0N$~l$hm$WL$lF$kF$jF$%/$AM@'K@'K@'K@,T@,T@P)@P)@0G+0G+,B+,B+!w+)w+)w+xD+mX+mX+3R+Gn+~-+'T@X&+J:+|{#or&zw$+@%-M$=@%=@%=@%BM@]-+]-+]-+hF$u_%*6$BT$,L$7F$!U#=7$1S#I4@@*+Z]$=h&E}%Mt%AX&cD$f>@BX&CX&DX&EX&xa#,D&FX&GX&HX&IX&JX&KX&LX&MX&NX&OX&PX&QX&RX&SX&TX&UX&VX&WX&XX&YX&[P&ZX&`X& Y&.Y&+Y&@Y& E&#Y&$Y&%Y&&Y&*Y&=Y&-Y&;Y&>Y&Jk.`j.Cg.7R `F Ua.T` (%.m4.Gs.$!.^,+Jz&T|.,Y&Zy qI@Tx (t Sr @9 g*$t[@G'#T1 AL.%K..g+tO.pL.+]%!>+i|#Gz$Gz$9M@9M@O]$R^$.Y.{~%Xm+:g%I_#jh$y_%$B$Xv%6r `I$H%$EG%ZI$+I$+I$E'$5'$u1$Nt%$B%b|$q<$^Y@rI@1U&k%&k%&xT%&$$qG +/$`>$xR#)M$'Y&)Y&v=$Xd+gw+Dt$uo$Qp$Rp$Fr%A-%RV$tX$Q`$/V$.4$x|$j7%Nm$Om$}J$oE$CD$X2$RC$@-$P$$$S$!Y&M ji$Wj$%@&P}$[w$S2@h/+:-+m~+_{#'@`p+h-$AT#AT#Z4@.7@L2&21@>:@u^@L<@3}@0i@0i@% $% $% $=L$',&DD@ve@:a@u^@2(@M<@fY#19@19@19@M<@Y4@4}@M<@19@uQ$uQ$19@fY#uQ$ai@<9@gr+hr+hr+ec@/a@u^@Ab$Y4@ 7@.r%WY%@-&@-&FY&WY%+r%31@>q$`0$Y4@>:@>:@5}@XH@OS#WH@29@4k@8i@qe@rI+8s#s9#.5@$7@C`#Lx#Lx#nD#Vv#Vv#Vv#G6@G6@G6@a$@G6@(P+(P+(P+(P+K,@K,@K,@K,@qr$qr$#9@#9@#9@<&@<&@;w+.B+`K+tp+%N+@B+@B+dB@~w+Zp%:s#s;@ZK+#+>#N@@UN#ug@}e%2W&GY&HY&'[#1 pQ&d] 3S&pQ&=V&eW E{.DT&;1 KY&z<.Q_.T_+{! 8' 8' 8' 8' ;~@Pw%ME+X`+>S%>S%>S%>S%>S%>S%>S%>S%&, 0, {h&{h&>S%>S%%' X@$Xw&Be+Be+Be+@d+@d+z$$z$$mq+z$$z$$@d+@d+Be+Be+Be+^b+^b+^b++d++d++d++d++d++d++d++d+^b+^b+^b+^b+PF+2&$2&$2&$2&$2&$2&$2&$2&$u3$u3$w*$xj+OJ.u3$x*$8' 9Y+{! ]! ]! ]! ]! {! be+be+]! 5A.]! be+be+{! 5A.]! ]! ]! 5A.5A.5A.5A.Ea+{! be+8g.8g.8g.8g.be+{! ]! ]! {! be+be+{! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.5A.5A.5A.5A.5A.Ea+xc+$(+xc+5A.]! xc+T_+5A.]! {! {! {! ]! 5A.Ea+Yt.Yt.)> 6g+6g+]$@jy.jy.]$@]$@]$@]$@6g+6g+6g+6g+]! Ea+$(+$(+5A.]! ]! 5A.Ea+Ea+5A.5A.5A.5A.Ea+Ea+]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.5A.Ea+Ea+xc+", "9c 8c 0' 0' 8c 9c 7c 9c 9c 8c 8c 0' |% |% |% &) &) &) $% $% $% |% |% 8c 8c 8c 0' 0' 0' |% ~% ~% O~.O~.O~.~% ~% ~% ~% |% &_ d= 5c 5c d= ,;.)= d= $% $% $% $% $% $% $% |% |% |% |% |% |% |% |% |% $% &5 W_ |% g~ &_ +d+$% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% ~_ ~_ ~_ n3 n3 &5 &5 &5 5% 5% 4% 4% %% ~% ~% d( %% 4% 5% f% f% 5% 4% %% 5% 5% 5% 5% 5% 5% 5% 5% %% 4% 5% f% f% 5% 4% *- Ll ni !W+@~.' .z) b/ M2 v% v% A^.A^.A^.A^.A^.A^.v% w% w% w% w% w% w% w% x% x% x% j% j% x% x% x% 6% i% <4 s3.s3.<4 i% 6% h% i% 6% 6% 6% h% s3.;H.QB@g% af.4=+g% m` l` af.af.QB@4=+QB@g% *_ g% af.g% g% g% g% g% g% g% g% af.af.af.af.af.af.af.af.<4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 s3.s3.s3.s3.s3.s3.s3.s3.>H..l.s3.h% h% h% <4 QB@bH.aH.~i+A^.0c &_ t% U@ !. m. |].$* LY&MY&NY&>V&=K+w3 cF+cF+Ve Ft 2k%^Y.^++K-+DG.E9&0]+-n#'{+GB@!V@c!$X@+X@+j|#>4+D)+@ +~m$kn$Ex$A+% v@f&@~I$f&@dD$K^$K^$K^$u-$u-$u-$u-$}x@8o@Vk${m$ln$=c$a8$%K$a9$a9$Ej$Ej$Ej$,p$,p$,p$qw$,p$,p$,p$Ej$Ej$a9$a9$cN$cN$cN$cN$cN$cN$bq$bq$~l$!l$WL$lF$kF$jF$iF$bN$qZ@'K@'K@'K@,T@,T@P)@P)@P)@>B+K)@,B+)w+)w+vD+S.@#a@#a@=B+Gn+~-+f[+y9#nX+6k#kq#_Z${]$!_$+W$OY&Uv#R,+->+->+yM@CM@DI+}{#_P+47$,L$Sj$Wk$L[#HK$@ +B%%E}%I3$||+Gx$PY&QY&sy#RY&SY&+a$TY&$w&UY&VY&WY&XY&YY&ZY&`Y& Z&.Z&+Z&@Z&#Z&Mv $Z&%Z&&Z&*Z&=Z&-Z&;Z&>Z&,Z&'Z&)Z&!Z&~Z&nT&{Z&]Z&^Z&6I&/Z&(Z&_Z&:Z&k$R`$V'$7:$w|$3Z&|Y#_I$/X$/X$n6$RC$@-$P$$$S$KK#)R$`W&Hl$Sb%4Z&5Z&6Z&1X$W0$7Z&@i%xZ%,T$px%8Z&!@&9Z&0Z&ST+aZ&bZ&:R@cZ&E8&Y=#Dd#Zo@ t#G5@/M vg#LZ$]M ]M /M /M e1#ew LZ$1r@$4@-! -! .~ ;M L2$Tk$#g+j4&Q}$zV#Ub+YJ#M[#)g$1h$u.|X.i+. ~+kZ&Z!&d9&lZ&mZ&Hj@nZ&oZ&pZ&qZ&rZ&sZ&tZ&uZ&vZ&wZ&xZ&yZ&zZ&AZ&BZ&CZ&DZ&EZ&FZ&GZ&HZ&IZ&JZ&KZ&LZ&MZ&NZ&OZ&PZ&QZ&zd#RZ&pX&SZ&TZ&UZ&VZ&WZ&>T.XZ&p~+TH#YZ&5!+z1#M{$|,$0~#]A&n%&ZZ&_`#`Z&~B&6C&rD& `&+5$ I@&q+N,@%q+/7@/7@,]@,]@#q+`p+h-$#1@X>$X>$Z4@.7@L2&[!$MU#(a@L<@hc@|9@ye@=L$=L$$F$xe@tB@og@q$>q$Y4@fY#>:@5}@`H@|T@WH@v~@%7@ZM@29@:R+8s#s9#4k#59@XA#Lx#nD#4L#Vv#Vv#G6@G6@G6@G6@a$@a$@Kl+Kl+Kl+(P+(P+(P+K,@K,@qr$qr$#9@#9@#9@<&@<&@;w+.B+`K+tp+tp+#B+#B+)w+$B+Zp%:s#Q)@ZK+S%>S%>S%~h&~h&{h&{h&{h&&, 0, 0, {h&>S%%' %' X@$Be+Be+Be+Be+@d+@d+z$$z$$>H%mq+mq+z$$z$$@d+Be+Be+PF+PF+^b+^b++d+Y@$Y@$3&$3&$Y@$+d+^b+PF+/D.P~ uq.2&$2&$2&$2&$2&$2&$2&$2&$u3$u3$w*$xj+OJ.u3$x*$8' 9Y+be+{! ]! ]! {! be+be+{! 5A.xc+Ea+]! {! 5A.Ea+{! {! ]! 5A.5A.Ea+xc+xc+Ea+5A.{! be+be+{! 5A.Ea+Ea+5A.5A.]! ]! 5A.5A.Ea+]! ]! ]! ]! ]! ]! ]! ]! Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.5A.5A.5A.5A.5A.xc+$(+T_+$(+Ea+5A.$(+G|@]! ]! ]! ]! ]! Ea+xc+$(+,v.i~ Yt.)> ]$@jy.q9+dl.]$@]$@]$@]$@]$@jy.jy.jy.Ea+$(+T_+T_+Ea+]! ]! 5A.$(+xc+5A.]! ]! 5A.xc+$(+]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.5A.Ea+xc+xc+", ",' 6c L_ L_ 6c ,' !% L_ 6c 6c 6c ,' ,' !% !% |% 0' 8c 8c 8c 8c 0' |% 0' 0' 0' 0' 0' 0' 0' d( ~% O~.O~.O~.~% ~% ~% ~% ~_ &_ 3{ )= 3c 3c yk 4c d= $% $% $% $% $% $% $% |% |% |% |% |% |% |% |% |% |% |% $% &) &) &_ &_ n3 &_ &) &_ n3 &5 ~_ &) #% #% T$ T$ T$ M$ M$ M$ t% t% t% t% t% t% t% t% f% 4% %% 4% 5% f% 5% %% 5% 5% 5% 5% 5% 4% 4% 4% 4% f% I> v% 5% 4% 5% v% 4% 5% f% v% f% 4% ~% 3b Z^ ' .' .0Y+0Y+!W+M2 UV I> v% 0c =_ -_ 2b he he f% f% f% f% f% f% f% f% ~% %% 4% 5% f% 5% 5% 5% m` *_ QB@QB@*_ R_ g% QB@g% g% g% g% g% g% g% g% R_ *_ g% R_ l` l` R_ af.4=+QB@QB@af.af.g% g% *_ i% i% i% i% i% i% i% i% ;H.5v@;H.h% 1% WW.1% i% *_ g% g% af.af.QB@QB@4=+4=+4=+QB@af.af.g% *_ *_ 4=+QB@QB@af.af.g% g% *_ 4=+4=+4=+QB@QB@QB@QB@QB@bH.bH.aH.X_ 0c &) T$ B. ^+ P6 @'+W> As J-@2/$f!$jv+CC+LQ+0F+.B wd@5I%h +8<+@w&!Q.eT.HB@0]+GB@'{+-{+-{+i[%!V@j|#5h#W_#@ +Ax$kn$i%%CM# v@fE#7I#f&@1S#k<&k<&}x@1)#1)#u-$u-$}x@bE$i%%dw$*I$5F$,H$%K$Ej$Ej$,p$,p$qw$qw$qw$&6$a9$a9$a9$a9$a9$a9$a9$a9$cN$cN$cN$cN$cN$cN$bq$bq$0N$0N$tr$hm$hm$WL$WL$~J$1 @1 @F@@F@@w;@w;@ZK+ZK+;B+;B+P,+P,+$B+~w+~w+~w+P,+*>+0G+;B+:|+e[+ly+I@@'_#UQ@!(%/t#EM@7$@O&$6$@>K@3G+yM@-K@[|+^^#{K@BM@I$+pw$37$J3$Tj$L[#CM#A+%Q'$3V+dH#>>+$)%>:%*7$U_#@`&#`&@4 N(%$`&%`&&`&*`&=`&-`&;`&>`&,`&'`&)`&y8&!`&~`&{`&]`&^`&/`&(`&_`&:`&<`&[`&}`&|`&1`&2`&3`&4`&5`&6`&7`&8`&9`&0`&a`&/X.`F FE FE nI pe.r(.r(.+ .[.._%.(%.T` jc.D@.P*.#e.^f@b`&3`@pI@;8 (} Lc Vj yy@kq+a%+NG.[K NR.[R&FG.Bp+C(%F!$|(%U-$fh${($h+&`+$0]@6=%a]@:J$-S+vd$m1#^*@m;%{x%Yv%6'$`I$|C%],$],$i0$=E .y .y Lv Ow no%;:$1Z&1Z&5K%k%&oI@'M :R#.E##B$2=$CB&B]+l4+Wd+*r$:n$wo$0p$6l$OG%B-%-Z$,k$R`$>5$|}$@7%0&$ `#v;&CD$/X$|;$Y!#h&$qL$c`&d`&RS$nZ$`h%>Q%e`&aZ$f`&g`&z}$W0$lx%2h%@_#- &Ww%Au%W9$h`&~H+i`&$$@]} j`&k`&l`&IP&LP&jR&m`&Zo@MH#SJ#O8#LH#vg#]M ew G5@X~#}A 6F -! -E 2r@}h$>1+/<%Bo&u1#4F$>9@A'#U`$T4$w4#z)+d$@d$@;>+o=#S@+Y&+,2+K:+zw$PS#n`&*>$..&T5+k $<6$W-&A2@[K#-T.L+@ls+y! 50&o`&p`&q`&r`&s`&t`&hZ&u`&;_@Ls.Ls.7O yl.>e.Va.'_./d._l+${.@'.y!.y!.nx.v`&cm#r!.#'.}r.aO Nr.,_.Sp.TM G0.w6.=4.B@.&)+w`&vW&x`&y`&z`&yW&A`&B`&C`&D`&E`&F`&G`&H`&I`&J`&K`&L`&M`&N`&O`&P`&Q`&R`&S`&T`&U`&V`&W`&X`&Y`&Z`&``& *~`&*a&X&.Cr&. *+ *@ *# *$ * }+$J$)]&;]%@/$X@+N:+#q%>Q#Q.$h^#% *4+$kY#6y%& * `&L:&*K@jK@xM@+I@ N@Hy+Hy+,]@,'@,'@#s+Zp+Zp+K2@G4@X>$BT#.7@x)&X=&W=&fK@4k@`H@6*$tQ$tQ$& $~O$* *{O$~O$tQ$19@>:@>:@%}@>:@MU#OS#|T@XH@|T@|T@|T@|T@|T@XH@`H@`H@cc@cc@5k@bi@Jt+Ol+l)+$!@t~@L<@K<@cs$.O$A)&f}%g'&g'&= *g'&#-&Gt$xo$3u$zb$>q$4}@M<@lt$5}@WH@WH@F,@:R+[R+^P+49@4k#t9#t9#gh#XA#4L#4N#pe#s<@s<@c&@b&@a$@a$@a$@&t@&t@&t@#9@#9@<&@fh#fh#,N$,N$Aq@fh#fh#:x@fh#:c@R0+-9@_x@_x@#B+1R+)w+~w+#r%0~@9G+9G+Q,+|V+>K@YK+(8$TK+zI+{-+'T@rd+>2+f^@:f+6y+6y+b=#Xv+c!@Ke@nK%- **i@33@ex@|&#v@+`D../@99 89 VE L1 L1 q[ #p wc ^(#IY&E8&; *Fg V] V] yd [n&5^ W{ oQ&W{ CT&DT&E{.gd%7W&3S&Z. :e.D~.xc+{! %.@%.@8' 8' Pw%ME+mh.>0+~h&~h&~h&~h&~h&~h&~h&~h&>S%~h&>S%X@$=|$=|$x*$>S%Xw&Xw&Xw&Xw&@d+>H%WD@t=+Gc%Gc%Gc%>H%Gc%z4$WD@t=+PF+x8.y{ x8.'g@;~ 'g@Lh+9Y+9Y+9Y+9Y+9Y+9Y+9Y+9Y+2&$2&$2&$2&$2&$2&$2&$2&$=|$=|$=|$=|$=|$=|$=|$0@@'g@]! ]! ]! ]! ]! ]! ]! 8g.5A.$(+$(+5A.{! ]! Ea+]! ]! ]! {! be+8g.8g.8g.be+be+be+be+be+be+be+be+]! ]! ]! {! be+8g.8g.8g.$(+xc+xc+Ea+]! {! {! be+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.5A.5A.5A.5A.5A.`Y 8g.]! ]! 8g.8g.{! xc+5A.Ea+xc+xc+Ea+5A.{! be+6g+6g+6g+6g+6g+6g+6g+6g+)> )> )> )> )> )> )> )> 8g.{! ]! {! 8g.8g.be+]! be+8g.8g.w8.8g.{! 5A.Ea+5A.5A.5A.5A.5A.5A.5A.5A.Ea+5A.{! ]! Ea+xc+", ",' 6c L_ L_ 6c ,' !% 6c 6c 6c 6c ,' ,' !% !% |% 0' 0' 8c 8c 0' 0' |% |% |% |% |% 0' 0' 0' d( ~% O~.O~.O~.~% ~% ~% ~% &_ &) d= != != 3c ~= != d= $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% |% |% |% $% &) &) &) &_ &5 ~_ &) &_ ~_ n3 &_ $% #% #% T$ T$ T$ M$ M$ M$ t% t% t% t% t% t% t% t% f% 4% %% 4% 5% f% 5% %% 4% 4% 4% 5% 5% 5% 5% 5% 4% 5% v% f% 4% %% 5% v% 5% f% v% v% f% 5% %% N~.Z^ z) z) ' .0Y+0Y+m3 M2 v% v% 0c 0c =_ -_ ;_ ;_ f% f% f% f% f% f% f% f% ~% ~% 4% 5% 5% 5% 5% 4% l` *_ QB@QB@g% *_ g% QB@g% g% g% g% g% g% g% g% *_ g% af.*_ -H.-H.*_ QB@QB@QB@QB@af.af.g% g% g% i% i% i% i% i% i% i% i% <4 s3.;H.<4 i% 1% 6% i% g% g% g% af.af.QB@QB@QB@QB@QB@af.af.af.af.g% g% QB@QB@QB@af.af.g% g% g% QB@QB@QB@QB@QB@4=+4=+4=+'J.'J.X_ A^.n3 Y_ U@ !. ^+ |* CN.$* XO&V]@)b#> *gM., *cF+0F+.B wd@v@%q'+8<+@w&!Q.eT.HB@0]+GB@'{+M]+M]+!V@'r%j|#ZR#@ ++B$kn$~m$CM#Vk$fE#d=@~I$f&@8o@}x@}x@l7#u-$u-$u-$C~%}x@bE$i%%dw$*I$5F$,H$%K$Ej$Ej$,p$,p$qw$qw$qw$qw$Ej$Ej$Ej$Ej$Ej$Ej$Ej$Ej$cN$cN$cN$cN$cN$cN$bq$bq$0N$0N$hm$hm$hm$WL$WL$WL$XK+1 @1 @1 @w;@w;@Q,+ZK+3 @3 @mX+mX+&B+&B+iy+%B+0G+>B+>B+ny+&N+L@+Ae@qg@pg@pg@pg@ci@n#$qg@W6$8$@x)+{-+^^#[|+<^#<^#TQ@%o%:`#8-%w-$Z.+.3%j %Ei$!U#oo%80$*c$>>+_K@E>#Pr#qz#xX@' *) *HM@! *kq$t%&:t&~ *{ *] *^ */ *( *_ *: *Un&Dc&< *[ *} *| *1 *2 *:`&wN&3 *4 *5 *6 *7 *8 *9 *iI&0 *a *b *c *d * p&/X.`F `F `F `F FE 5..5..e|.]}.D_.X#.;5.<..+ .<..Q'+_p&e *my#f *oI@b.#Sr Oe ]M$vK@!}+`x#WZ.i2 Q^%7v#>N.3/++v@8M@Uj$Uj$7%%8;&f*%`+$!U+6=%F2&F)${U+o1#ji$m;%Va&m;%Xv%lh$EG%@I$],$i0$=E .y .y Lv Ow no%;:$yT%1Z&5K%]{&oI@es :>$GS$IS$FC$R.$g *1:@9(@K2@zb$k$,k$0l$V'$7:$;@%l7%vF$z8$(I$CD$|;$%4_#t *gi$#R$l$+}F.H)+5r$O~$tR@u *v *w *x *y *9Q@jJ@z *A *TM 7O 7O }q.G0./d.^d.[q.`,._l+#'.@'.y!.nx.Mb@v`&r!.@'.z!.2).Oo.Uq.pi.;_@|H uj.ri.V,.B *C *K4$wV&D *E *F *G *H *I *J *K *L *M *N *O *P *Q *R *S *T *U *V *W *X *Y *Z *` * .*..*+.*@.*#.*$.*cV&%.*&.**.*=.*-.*;.*>.*,.*'.*9#+3Y+v;%CB$35%zp# l#Y(%1P+sy$k $r{$u$+).*!.*7y%r@$~.*.I@.I@@I@.I@SO@Mx#,]@,]@>'@#q+#s+M3+`r+h-$G4@J2@AT#N<@@r%X=&(S&_S&8i@qe@cc@`H@uQ$tQ$& $& $~O$& $tQ$19@>:@%}@%}@I2@;]@,:@OS#v~@|T@v~@|T@WH@|T@v~@|T@29@`H@%7@`H@ic@<9@0X+Ol+-:@u~@(a@K<@11@.O$.O$A)&f}%z)&z)&{.*IL&ot$7S$3u$K@2 @L4##N+{-+@N+rd+:f+f[+~-+:f+6y+6y+b=#Xv+c!@Ke@nK%].*|~@$N@~5@^.*w@+j>@MM.t7 89 VE L1 L1 q[ #p wc XQ@E8&E8&; *Fg V] Ih 1S&[n&:o&W{ oQ&W{ CT&DT&E{.gd%!i&BT&h r`.Q_.]! ]! %.@%.@8' 8' Pw%ME+mh.>0+~h&~h&~h&~h&~h&~h&~h&~h&~h&{h&~h&%' x*$u3$%' ~h&Be+Be+Xw&Be+@d+mq+Gc%WD@mq+mq+z$$z$$mq+>H%Gc%Eo+Lh+9Y+x8.9Y+;~ 6j+;~ Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh+Lh+2&$2&$2&$2&$2&$2&$2&$2&$=|$=|$=|$=|$=|$=|$=|$0@@'g@]! ]! ]! ]! ]! ]! ]! 8g.]! xc+xc+5A.{! {! 5A.{! {! {! {! {! be+be+be+{! {! {! {! {! {! {! {! {! {! {! {! {! be+be+be+$(+xc+Ea+Ea+]! ]! {! be+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.5A.5A.5A.5A.5A.8g.{! 5A.5A.be+be+]! Ea+5A.Ea+Ea+xc+Ea+5A.{! be+6g+6g+6g+6g+6g+6g+6g+6g+)> )> )> )> )> )> )> )> be+]! 5A.]! be+be+{! 5A.5A.]! {! be+be+{! ]! 5A.5A.5A.5A.5A.5A.5A.5A.5A.Ea+5A.{! ]! Ea+xc+", "i> Q% 9& 9& Q% i> k+ Q% Q% Q% i> i> k+ k+ !% |% |% 0' 8c 8c 0' |% |% &) &) $% $% |% |% 0' d( d( Lv.Lv.Lv.d( d( d( d( $% $% )= != != != V_ d= d= $% $% $% $% $% $% $% &) &) &) &) &) &) &) &) |% |% $% $% $% &) &) &) &5 ~_ &) &_ ~_ ~_ &) |% #% l& {@ {@ {@ m@ m@ m@ U@ U@ U@ U@ U@ U@ U@ t% f% 4% %% 4% 5% f% 5% %% %% 4% 4% 5% 5% f% f% v% ~% 4% f% 5% %% ~% 4% 5% f% v% v% v% v% f% 5% Y^ Y^ ni z) z) z) ' .b/ b/ f% f% 0c 0c 0c 0c 0c 0c ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ |% $% &) &_ &_ &_ &_ &) 2b =_ A^.A^.0c =_ 0c A^.0c 0c 0c 0c 0c 0c 0c 0c g% af.QB@g% R_ R_ g% 4=+QB@QB@QB@af.af.g% g% g% i% Hu+Hu+Hu+Hu+Hu+Hu+Hu+VW.PI.[3+[3+#9.Hu+Hu+h% g% 0c 0c A^.A^.X_ X_ X_ 0c 0c A^.A^.A^.A^.X_ X_ X_ X_ X_ A^.A^.0c 0c 0c 0c A^.A^.X_ 7v@7v@ l. l.bf.bf.A^.A^.n3 o3 .* j$ ^+ := N)+P6@3O+V]@/.*2; 3v+(.*cF+LQ+.B a2$v@%%'&8<+@w&!Q.eT.HB@0]+GB@'{+i[%!V@'r%c!$5h#Z]$+B$+B$ns$N@%Vk$=7$d=@d=@~I$f&@bE$l7#K^$K^$u-$C~%C~%C~%}x@bE$i%%dw$*I$5F$,H$%K$Ej$Ej$Ej$,p$,p$qw$qw$qw$,p$,p$,p$,p$,p$,p$,p$,p$cN$cN$cN$cN$cN$cN$bq$bq$0N$~l$hm$hm$WL$WL$lF$lF$iX+5Z+5Z+5Z+>K@>K@T,@2T+$SW._.*K%@:.* ` Fy$Tp@<.*[.*}.*|.*1.*2.*3.*vL&4.*5.*6.*7.*8.*9.*0.*a.*b.*c.*d.*e.*f.*g.*h.*i.*j.*k.*l.*m.*n.*o.*p.*Op&Dg.7R 7R 7R GE GE GE GE 1H zf.7R Ua.`F 5..pe.YP {-.q.*`Z@r.*Cb&mP%}r@$A@T-@Lc Pe yb .m$}^#kq+H3 6z%7F.{>+C[#uD$8M@|(%|(%aT+o%$o%${f#w<@G)+F[#iT$16$>1+2H%s.*m;%Xv%Xv%7'$`I$H%$i0$=E Jv Jv Lv Lv Pw Mv kP&kP&]{&]{&{A tG %-#A[%~U+=i#t.*}Y+u.*v.*3h+Na$Iu$8j$Rl$_]+u/%d;%-Z$>k$8l$,5$6f$j>$jS%3j$l7%W2$m6$2b$9x%g&$wM$_i%w.*AH$@z%Jx%>U$Uj&sA#2S$x.*wW%&U$y.*h5$#p%k *]&&z.*A.*B.*J'@5$&B-.C.*D.*E.*E.*F.*#8 LP&iR&m`& l&LH#OH#6q#e1#Lz 1r@yK }A Ux RC ds v~$DG%Gy$[H$RF#cv$N$+'m+g^@J$+5($iF$}|+u_%|T+|T+@#$-,$T!$T!$T!$[$&G.*H]$7|%$6$Vm#CB&E!$V##2+$v@+e~#*C+IT Ag&H.*I.*J.*K.*L.*iZ&M.*pQ@N.*Z#.n5.+*,+*'+*)+*!+*~+*{+*]+*^+*~Y@/+*(+*_+*_x$:+*<+*[+*'v$~V&}+*^ +Vl$E@+'($1P+aG+|+*cx@]v@~v@PF@'7@L:&iK@@I@%Y%%Y%$R#~P#~P#~P#28+>'@`p+Zp+`r+Yp+g-$g-$uG+#1@N<@.:$),&1+*2+*3+*4+*:V%1+*W=&- $iQ%QI&QI&PI&PI&WY%+r%41@AT#AT#uG+x=@S;@,:@F,@v~@:R+WH@F,@v~@:R+v~@:R+29@5X+29@1}@fr+1(@-:@2}@u^@L<@;:@0X#.O$iR$A)&f}%IL&IL&5+*4N&nt$xo$K@2 @/K@(8$@N+ib#:f+c~@I:+>2+:f+6y+6y+b=#Xv+c!@Ke@nK%,5@#wz@R_+89 VE L1 L1 q[ _: hr#%p M5$M5$; *Fg Ih Ih 1S&o2&:o&W{ oQ&CT&7+*DT&E{.gd%@8&CT&` yX&Q] w8.5A.%.@%.@8' 8' Pw%ME+mh.>0+~h&~h&~h&~h&~h&~h&~h&~h&~h&{h&0, ~h&%' X@$>S%{h&@d+@d+Be+Be+@d+z$$mq+>H%@d+Be+Be+Be+Be+@d+z$$=|$;~ ]! {! ]! Ea+xc+Ea+]! ]! ]! ]! ]! ]! ]! ]! 'g@2&$2&$2&$2&$2&$2&$2&$2&$=|$=|$=|$=|$=|$=|$=|$0@@'g@]! ]! ]! ]! ]! ]! ]! 8g.{! 5A.5A.{! be+be+{! be+be+{! {! {! {! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! be+be+{! {! {! {! ]! ]! xc+xc+Ea+5A.5A.]! {! {! ]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.5A.5A.5A.5A.5A.5A.]! Ea+xc+Ea+]! {! ]! 5A.5A.5A.Ea+Ea+Ea+5A.]! {! 6g+6g+6g+6g+6g+6g+6g+6g+]$@]$@]$@]$@]$@]$@]$@]$@{! 5A.xc+Ea+]! {! ]! Ea+$(+xc+Ea+]! {! {! {! {! 5A.5A.5A.5A.5A.5A.5A.5A.Ea+5A.{! ]! Ea+xc+", "i> Q% Q% Q% Q% i> i> Q% Q% i> i> k+ k+ l& l& $% |% 0' 0' 0' 0' |% $% &_ &_ &_ &) $% |% 0' d( +h.Ml Ml Ml +h.+h.+h.+h.|% 0' != != != )= M=.3{ d= $% $% $% $% $% $% $% &_ &_ &_ &_ &_ &_ &_ &_ $% $% $% $% $% $% &) &) &5 ~_ &) &) &_ &_ $% !% #% l& {@ {@ {@ m@ m@ m@ U@ U@ U@ U@ U@ U@ U@ U@ f% 4% %% 4% 5% f% 5% %% %% 4% 4% 5% f% v% v% I> ~% 4% 5% 4% ~% d( %% 5% v% v% v% v% v% v% v% b/ Y^ ni ni ni z) z) Z^ Z^ f% f% 0c A^.A^.X_ X_ 7v@~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ &) &_ ~_ n3 n3 n3 n3 ~_ ;_ -_ 0c A^.A^.0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c af.QB@QB@af.*_ *_ af.6v@af.af.af.af.af.af.af.<4 h% PI.PI.PI.PI.PI.PI.PI.G6.Hu+[3+w7+[3+#9.PI.<4 af.A^.A^.A^.A^.A^.A^.A^.=_ =_ 0c A^.A^.X_ 7v@7v@A^.A^.A^.A^.A^.A^.A^.A^.=_ 0c A^.X_ 7v@ l.)i+)i+~i+X_ X_ n3 o3 2% 2% 4. r+ b: Zs@6{ 8+*f=$9+*2; eW+>K+aF+LQ+R&.a2$p$>&8<+@w&!Q.eT.HB@0]+GB@'{+'r%'r%c!$X@+ZR#Z]$+B$+B$k %|0#D#$D#$d=@d=@~I$f&@cD$Js%Js%Js%C~%C~%C~%C~%}x@bE$i%%dw$*I$5F$,H$%K$a9$a9$Ej$Ej$,p$,p$qw$qw$qw$qw$qw$qw$qw$qw$qw$qw$a9$a9$a9$a9$a9$a9$b9$b9$~l$~l$hm$WL$WL$lF$lF$lF$iX+iX+iX+iX+gX+5$@7=@7=@T,@T,@r<@T_@{k#Rm#Rm#^w+t;@t;@5o@0=@0$@-(@s<@Vv#pe#yb#yb#z$+z$+d^@y;@6Z+ak@3a@;m+6T+d^@a~@SO@ N@0*$+5$OF@h1@0+*''$:3@m1@vy+-&$a+*ZO@@h+~=#1|&xX@Y>%bI#^T.dF.b+*;{ UT@c+*d+*e+*f+*g+*h+*i+*j+*k+*l+*m+*n+*o+*p+*q+*r+*nI&s+*t+*u+*v+*w+*x+*y+*z+*A+*B+*C+*D+*E+*F+*G+*]N@Dg.7R GE GE zf.|H |H |H GE GE 7R 7R FE pe.CU 3..g&.8O&H+*9s&I+*J+*u)&pI@@A@R} wa Ui Bm Re <0 K+*gT%vf@xO.[ +d%%A[#8R+aT+aT+o%$@++M#$_ +qL.w<@U{$H!$_R@V4+2H%@B%P;%DG%Yv%`I$H%$],$=E Jv Jv Lv Lv PC Pw 4`@4`@]{&i*$2`@5G@gP@h!@Hy$w<@Bb$j/+L+*3T@sf+g9@,i$Oc$o)+ek%[f$5 %B-%rF$mW$8l$;0%6f$:;$5:$C]&3H$4H$J($QC$*0%j`$:i%Me%M+*N+*@z%SS$rZ+vx#3x&4[$(K$2V%~h%Q6$$%]L$BD bj&`+* @*.@*+@*@@*#@*$@*Wf@WJ <:.@*,@*'@*)@*!@*~@*{@*]@*^@*/@*(@*_@*:@*<@*[@*}@*|@*1@*2@*3@*4@*5@*6@*7@*8@*9@*0@*a@*b@*c@*yh#d@*e@*f@*( +dj%g@*~1&$W$^A&h@*,($5p&O.+i@*{v@!v@j@*)7@ax@hz@$I@ z&k@*0!$xU#6Y#6Y#6Y#+q+@q+`p+Zp+`r+Yp+g-$w&@a{$4(@.:$),&1+*l@*m@*4+*n@*:V%o@*WE&{r%= $OI&PI&.~&.r%L2&[!$[!$AT##1@#1@S;@S;@G,@F,@:R+:R+F,@F,@:R+:R+:R+:R+:R+:R+:R+It+[1@J<@2}@dE#K<@K<@11@io@iR$iR$f}%f}%IL&p@*q@*,r$Ju$Sp$xo$zb$zb$`0$w^@48+F,@:o+Ht+gp+~G+cr+~P+}R+4v#gh#gh#yb#L,@L,@!B+z$+c&@b&@b&@a$@0$@L@@L@@L@@tr+tr+tr+Jl+|R+FD+FD+FD+(P+K,@7X+eh#3k#3k#3N#Y+$ur+`K+%N+tp+oy+oy+vD+$B+S##0~@lX+ZK+|V+|V+YK+5G+4]+L4#ib#T0+c~@_/+__+f[+:f+6y+6y+b=#Xv+c!@Ke@Fn+yg%SX.t##f>@g>@kh#!2+~%@R_+Q9 xb q[ L1 1^#_: Sk q4&; *)7&; *}8$Jh Ih 1S&o2&:o&CT&;1 CT&7+*2S&*6.yH&0+~h&~h&~h&~h&~h&~h&~h&~h&~h&0, &, 0, ~h&>S%{h&&, z$$@d+@d+@d+@d+@d+@d+@d+Be+Be+Xw&Xw&Xw&Be+z$$u3$y$$5A.]! 5A.xc+$(+xc+5A.5A.5A.5A.5A.5A.5A.5A.5A.2&$2&$2&$2&$2&$2&$2&$2&$=|$=|$=|$=|$=|$=|$=|$0@@'g@]! ]! ]! ]! ]! ]! ]! be+be+{! {! {! be+be+{! be+be+be+{! ]! 5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.be+be+be+{! ]! 5A.5A.5A.xc+Ea+Ea+5A.5A.]! ]! {! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.5A.5A.Ea+Ea+xc+$(+$(+xc+5A.5A.]! 5A.5A.5A.5A.5A.5A.5A.5A.]! 6g+6g+6g+6g+6g+6g+6g+6g+]$@]$@]$@]$@]$@]$@]$@]$@5A.Ea+$(+xc+5A.]! Ea+$(+$(+xc+xc+Ea+5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.Ea+5A.{! ]! Ea+xc+", "Q% i> i> i> i> Q% Q% i> i> i> k+ k+ l& l& l& $% $% |% 0' 0' |% $% $% &_ &_ &) &) $% |% |% ~% d( Lv.Lv.Lv.d( d( d( d( 0' 0' 3c != != d= M=.2{ d= $% $% $% $% $% $% $% &_ &_ &_ &_ &_ &_ &_ &_ &) &) $% $% $% $% $% $% n3 &_ $% &) &_ &_ $% !% #% l& {@ {@ {@ m@ m@ m@ U@ U@ U@ U@ U@ U@ U@ U@ f% 4% %% 4% 5% f% 5% %% 5% 5% 5% f% f% v% v% v% ~% 4% 5% 4% ~% d( %% 5% v% v% v% v% v% v% I> M2 Z^ z) z) z) ni ni Y^ Y^ 5% 5% 0c A^.A^.X_ 7v@7v@~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 &5 W_ W_ W_ W_ &5 -_ -_ =_ 0c A^.A^.0c 0c 0c 0c 0c 0c 0c 0c 0c 0c af.QB@QB@af.*_ *_ af.6v@af.af.af.af.af.af.af.<4 h% PI.PI.PI.PI.PI.PI.PI.G6.8v.[3+w7+|5+cp.#9.s3.af.A^.A^.A^.A^.A^.A^.A^.=_ =_ 0c A^.A^.X_ 7v@7v@A^.A^.A^.A^.A^.A^.A^.A^.=_ 0c A^.X_ 7v@ l.)i+)i+)i+ l.7v@&5 Y_ U@ m@ n+ r+ b: |r+Wx.8+*f=$r@*> *$A+s@*BO+LQ+R&.d|@t@*u@*8<+@w&!Q.eT.HB@0]+GB@'{+'r%c!$c!$X@+ZR#Z]$@ ++B$+*++*+D#$D#$d=@d=@7I#fE#cD$Js%Js%Js%C~%C~%C~%C~%}x@bE$i%%dw$*I$5F$,H$%K$a9$a9$a9$Ej$Ej$,p$,p$,p$qw$qw$qw$qw$qw$qw$qw$qw$a9$a9$a9$a9$a9$a9$b9$b9$~l$~l$WL$WL$lF$lF$kF$kF$vp#vp#vp#vp#nZ@fX+eX+eX+wp#wp#>}@,}@_s#_s#_s#{k#t;@t;@5o@0=@0$@-(@pe#Lx#@w+@w+9@3_+;I@v@*WB$)p$y!%A%@K1 `V@(7 w@*x@*y@*z@*A@*B@*C@*D@*E@*F@*G@*H@*I@*J@*K@*L@*M@*N@*O@*P@*Q@*R@*S@*T@*U@*V@*W@*X@*Y@*Z@*`@* #*.#*kD 7R 7R GE GE zf.|H |H Jk._X.Dg.Cg.`j.Jk.T++CU +#*23.c;.B!+9,+@#*##*{J%qI@(d@,p ZA Lc xb .4 xW+L`+T%&}c@0k#s=#Rs%m>#+v@C(%3|+Br+3|+ #+`J.rL.0G#8:@/)#o1#V4+Tv%Ss%P;%Xv%`I$H%$H%$r_$Jv Jv Nw Cu Kv Kv +z dB j*$j*$2`@5G@s! g>#ZN+rK@0]+k-$$#*%#*,u+Si+yP$=-+q)+v:+Hg+{`$LC$r6%H8%Es%)'%Bq$&#*Ml$Sr$8x%dp$`B$L*$T5%`N$m6%*#*.e%Ne%=#*MT$6y&3A#-#*JO#gG$*p%rY%;#*Y#&K6$j#&>#*VT+,#*'#*)#*!#*~#*{#*(f@Pm@E.*#8 ]#*m`&Dd#LH# t#6q#f1#Lz 1r@cN@}A 6F Ux RC {a ]-%26$,,$;{#cv$g<#YX.vy+bv$kF$V.@G@@^^#V.@XK+bN$TR$zw$jq#^#*[$&O.+/#*t *Q.$xV&VC%yB%3!+vL.<'$e]@Ug ` (#*_#*:#*<#*[#*C@.*n&uj.%c.'x.03.]7.ic.ic.ic.VA.E>.E>.UA.v5@v5@Bi@(M@(M@Bi@}#*_M@r7.r7.cL Is.Wi.Wi.|#*|#*;3+pI 1#*2#*E_.3#*f *zX$4#*5#*6#*7#*8#*9#*0#*a#*rG&b#*c#*d#*e#*f#*VF&g#*h#*i#*j#*k#*l#*m#*n#*>P&o#*p#*q#*r#*s#*t#*u#*v#*w#*x#*y#*z#*A#*st$B#*C#*Qt$MR%a>+_%+D#*/#*be$E#*lz@!v@kz@|H$qm+F#*FD@'3@iw+]7@.s++s+ 5@nW#.5@.5@+q+tG+`I+&E+h-$X5+#1@uG+8)$>]@),&7*$o@*l@*4+*G#*p.$8*$1+*),&= $qH&WY%WY%{x${x$M3&[!$41@BT#a{$a{$T;@,P+'P+km+:o+:o+km+km+:o+:o+:o+:o+:o+km+km+hp+X4@yT#dE#-Z#3}@3}@6k@7m@bC$bC$f}%f}%A)&H#*I#*ot${x$4}@4}@4}@5}@%}@;]@G,@km+~G+Ft++w+A$+0y+uI+Kl+L,@yb#yb#yb#L,@!B+!B+a~@b&@b&@a$@0$@L@@L@@Z.@Z.@ED+ED+tr+Jl+Jl+wI+FD+FD+Kl+(P+7X+eh#3N#3N#3P#-:#VH@`K+tp+ L+v)+v)+wD+xD+T###a@lX+Q)@S,@S,@YK+;K@4]+L4#ib#T0+c~@_/+__+f[+:f+6y+6y+b=#Xv+c!@Ke@Fn+Ux%SX.1p#ia@[-+T2@WQ@k>@t[@Q9 ry@q[ q[ 1^#Rk Sk d0&o5&)7&; *}8$Ih Ih yd ob 2l&CT&;1 7+*4S&2S&*6.E{.~i&J#*[y+yX& Z `Y ]! %.@%.@8' 8' Pw%ME+mh.>0+~h&~h&~h&~h&~h&~h&~h&~h&>S%{h&&, &, {h&~h&{h&&, @d+@d+@d+@d+@d+Be+Be+Xw&@d+@d+Be+Be+@d+z$$mq+=|$*$@xc+5A.Ea+xc+$(+xc+5A.5A.5A.5A.5A.5A.5A.5A.5A.2&$2&$2&$2&$2&$2&$2&$2&$=|$=|$=|$=|$=|$=|$=|$0@@'g@]! ]! ]! ]! ]! ]! ]! {! be+be+be+be+{! {! be+be+be+{! ]! ]! 5A.Ea+Ea+5A.5A.5A.5A.5A.5A.5A.5A.be+be+{! ]! ]! 5A.Ea+Ea+Ea+Ea+5A.5A.5A.5A.]! ]! ]! ]! ]! ]! ]! ]! ]! ]! {! ]! ]! 5A.5A.Ea+Ea+xc+T_+$(+xc+xc+Ea+Ea+5A.]! 5A.5A.5A.5A.5A.5A.5A.Ea+6g+6g+6g+6g+6g+6g+6g+6g+]$@]$@]$@]$@]$@]$@]$@]$@5A.xc+$(+$(+Ea+5A.Ea+$(+5A.5A.Ea+xc+xc+xc+$(+$(+5A.5A.5A.5A.5A.5A.5A.5A.Ea+5A.{! ]! Ea+xc+", "Q% i> k+ k+ i> Q% 9& i> i> k+ k+ l& l& l& {@ &) $% |% |% |% |% $% &) |% |% |% |% $% $% $% %% ~% O~.O~.O~.~% ~% ~% ~% 0' 0' != != != d= M=.2{ d= $% $% $% $% $% $% $% &) &) &) &) &) &) &) &) &) &) &) $% $% $% |% |% &_ $% |% $% &_ ~_ &) T$ #% l& {@ {@ {@ m@ m@ m@ U@ U@ U@ U@ U@ U@ U@ U@ f% 4% %% 4% 5% f% 5% %% v% v% v% f% f% f% f% f% ~% 4% f% 5% %% ~% 4% 5% f% f% 5% 5% 5% f% I> M2 b/ ' .' .z) z) z) Y^ Y^ 5% 5% =_ 0c A^.A^.X_ X_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 &5 W_ {_ W_ W_ W_ =_ -_ -_ 0c X_ X_ A^.=_ 0c 0c 0c 0c 0c 0c 0c 0c g% af.QB@g% R_ R_ g% 4=+g% g% g% af.af.QB@QB@s3.h% PI.PI.PI.PI.PI.PI.PI.VW.PI.[3+|5+[3+cp.cp.;H.QB@X_ X_ A^.A^.0c 0c 0c 0c 0c A^.A^.A^.A^.X_ X_ 0c 0c 0c A^.A^.X_ X_ X_ 0c A^.A^.X_ 7v@7v@ l. l.#y#)i+{_ &5 Y_ m@ B. 3. m. h= 5n+c* )t+)*$2; l/@fW+K#*BO+LQ+R&.Ft A{.WG%8<+@w&!Q.eT.HB@0]+GB@'{+'r%c!$c!$c!$5h#ZR#W_#W_#+*++*+D#$D#$fE# v@C4#B;%cD$Js%Js%K^$u-$u-$1)#1)#}x@bE$i%%dw$*I$5F$,H$%K$cN$a9$a9$a9$Ej$Ej$,p$,p$,p$,p$,p$,p$,p$,p$,p$,p$Ej$Ej$Ej$Ej$Ej$Ej$b8$b8$!l$!l$WL$lF$lF$kF$kF$5($00$L1#00$00${^#nZ@l#$l#$l#$eX+%1@>}@[g%[g%[g%r<@2T+Q)@Q,@0&@O,@z$+4v#YA#/P+Gt+Gt+~P+Ft+A$+T{@|$@{V+{V+VA+ep+.q+O3#8)$38+*^$o{$d9@!'@~'@p)%c*$L#*&9$[V#^9$):%)Z#sm#m!&5'&6K#2w&M#*o[#S-@36 .9 zz#N#*O#*P#*Q#*R#*S#*T#*U#*V#*W#*X#*Y#*Z#*`#* $*.$*+$*@$*#$*$$*%$*&$**$*=$*-$*;$*>$*,$*'$*)$*!$*$G lD `F `F `F `F 7R 7R 7R k=+_X.Cg. j.Dg.`j.`j.UP c<.~$*Mp.a;.{$*'a.]$*li&Tt&Tx #A@VH V-@vG _: I..p0 *<@g +w@%$$#4&#MJ@G[#+v@Wt+3|+Wt+Bp+3I.AF@9L#`D../@g!@o1#26$q~$P;%Xv%lh$H%$H%$r_$Jv Jv Nw Cu E'$E'$q<$+z .z j*$2`@oI@sG I!$t)%h|#NJ@g&@z'#fm@V}+$-+kR+~]+Gg+Ul+Bb+=y$yD$kK$uc%Er%pP%tP%^$*[)%}}$z|$~t$x|$|)%Z=$=0%i`$Da%;#$gW$Xh%sI$7S#wx#pZ+=0$A}$~Q$rm&-S$=t%/$*0J$($*_$*:$*qF#<$*Y&.[$*}$*|$*#8 JP&Qk@iR&Z+*SJ#6q#6q#/M dw =p@yK }A v! 5G@oI@;z$_e t1$Uk$rm#Yx#tz@;i#PX#`H%d9$/H$F@@^K@8$@F@@1 @UR$Uv#W~$:`#FJ&]t#[O&1$*2$*JD+#[@!*@t.*Z@+!2+_R@Pq 0V 3$*4$*5$*6$*7$*AS@8$*Ag.k[.TA.(S.rV.m!#d##ic.j4.yE.yE.VA.y!.YA.v5@Bi@Bi@Bi@Bi@}#*`L@*t.2+:f+6y+6y+b=#Xv+c!@Ke@Fn+ha@,5@e,$L$*q=#T2@g#@~%@xz#~o ry@q[ q[ 1^#Rk .<#d0&o5&)7&; *}8$Ih 8,@+`&ob 2l&7+*3S&7+*4S&-V&yH&eW M$*8) :e.'&@ Z be+8g.%.@%.@8' 8' Pw%ME+mh.>0+~h&~h&~h&~h&~h&~h&~h&~h&%' ~h&&, &, {h&~h&{h&&, Be+Be+@d+@d+@d+Be+Xw&Xw&z$$z$$@d+@d+@d+z$$>H%2&$|m.xc+5A.5A.xc+xc+Ea+]! ]! ]! ]! ]! ]! ]! ]! ]! 2&$2&$2&$2&$2&$2&$2&$2&$=|$=|$=|$=|$=|$=|$=|$0@@'g@]! ]! ]! ]! ]! ]! ]! Ea+{! 8g.8g.{! ]! ]! {! ]! ]! ]! ]! 5A.5A.5A.5A.]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.]! ]! ]! ]! ]! ]! ]! ]! {! {! ]! 5A.5A.Ea+xc+xc+$(+xc+5A.Ea+xc+xc+Ea+]! 5A.5A.]! ]! ]! 5A.Ea+xc+6g+6g+6g+6g+6g+6g+6g+6g+]$@]$@]$@]$@]$@]$@]$@]$@5A.xc+$(+xc+5A.]! Ea+$(+{! ]! 5A.xc+$(+$(+$(+$(+5A.5A.5A.5A.5A.5A.5A.5A.Ea+5A.{! ]! Ea+xc+", "Q% i> k+ k+ i> Q% 9& k+ k+ k+ l& l& l& {@ {@ &) $% $% |% |% $% $% &) 9c 8c 8c 0' |% $% $% 4% 4% 7% 7% 7% 4% 4% 4% 4% |% |% != != != )= M= 3{ d= $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% &_ &) &) &) $% |% |% |% $% 0' 0' |% &_ ~_ ~_ M$ #% l& {@ {@ {@ m@ m@ m@ U@ U@ U@ U@ U@ U@ U@ U@ f% 4% %% 4% 5% f% 5% %% fL.fL.I> v% f% f% 5% 5% 4% 5% v% f% 4% %% 5% v% 5% 5% 4% %% 4% 5% v% M2 M2 0Y+0Y+0Y+' .z) Z^ Z^ 5% 5% =_ =_ =_ 0c 0c 0c ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ &) &_ ~_ n3 &5 &5 n3 n3 =_ -_ ;_ =_ X_ 7v@A^.-_ 0c 0c 0c 0c 0c 0c 0c 0c *_ g% af.*_ -H.-H.*_ QB@g% g% g% af.af.QB@QB@s3.<4 #9.#9.#9.#9.#9.#9.#9.PI.cp.[3+[3+#9.#9.cp.5v@QB@X_ X_ A^.A^.0c 0c 0c X_ X_ A^.A^.A^.A^.0c 0c 0c 0c 0c A^.A^.X_ X_ X_ X_ X_ X_ X_ X_ 7v@7v@7v@ l.7v@W_ &5 Y_ U@ !. s# m. [I dn+k^ ^t+)*$N$*O$*%A+P$*AO+cF+R&.Ft A{.Q$*8<+@w&!Q.eT.HB@0]+GB@'{+'r%'r%'r%c!$j|#j|#D)+D)++*++*+D#$=7$ v@B;%O@%$)%cD$K^$K^$K^$1)#3z@3z@3z@}x@bE$i%%dw$*I$5F$,H$%K$cN$cN$a9$a9$a9$Ej$Ej$Ej$Ej$Ej$Ej$Ej$Ej$Ej$Ej$Ej$Ej$Ej$Ej$Ej$Ej$Ej$b8$b8$!l$!l$lF$lF$kF$kF$kF$5($N1#ni$N1#N1#zA#yA#Fj$Fj$%*,%*'%*)%*!%*&$*~%*{%*]%*R *^%*/%*(%*_%*:%*qA+PX D_.nI nI pe.pe.pe.pe.Jk.Dg. j.yf.FY.cK.#M.3H qx.`A.*$++G.)a.<%*DJ#[%*JT#'Y$RC VH 36 Sr T} j< ud 3=.*<@g +JB@} +t}@r!$NJ@rX+Ow#/n%0Z+ka@-T.*e#>N+G3 M+@a>&in$TB$Ss%Uv%Yv%bq H%$r_$bs bs Nw Cu E'$kQ H)$q<$.z j*$2`@oI@-! i4#g!@D:% Q$}%*R2@x'$6a@n0+jV+7~+@_+=k+YM$cE#;_+rV#wI$HH$|%*1%*2%*3%*hS%B'%i>$y|$dp$`B$sz%PC${@%|;$j&$4%*WI#F<#+^#$k#IX+GD$#C$qm&O9&Rj&W7$C|$5%*6%*7%*8%*9%*0%*a%*9`%b%*#T&#T&jR&Yo@;6#OH#]M ]M e1#Lz W~#}A ST@ST@5G@pI@Mw 0q L2$]L$'4+6N&;A&2=$3w+bK%jF$+@%6$@mq@k#$DO@W.@!_${]$_Z$(Z$4+$G.*H]$5R+a!$DT#F+@c%*2_+o>#b_#X^#ZE !8@d%*e%*f%*g%*hK.er&'m&5*@Vo.wE.;D.K_.^5+d##PV&QV&>0.>0.ox.ox.YA.h%*_M@Bi@i%*}#*}#*`L@z!.z!.Ht.Ht.pi.tj.ln+j%*Cg.me.k%*z>.`L.l%*0$*bC%m%*n%*o%*p%*q%*r%*s%*t%*u%*v%*w%*x%*y%*z%*A%*B%*C%*D%*E%*F%*G%*H%*1@*I%*J%*K%*L%*M%*N%*O%*P%*Q%*j2.R%*S%*T%*5H+U%*EJ%)($V%*W%*^Y+X%*BR+dL+^I$I$*6$$Y%*kE$3a+72+qB+Z8+*w&lq@&r$B6@!^#`I+O3#+q+@q+tG+8)$8)$8)$>]@>]@>]@;'$1+*1+*1+*1+*1+*1+*1+*1+*L9&*^$6_$*<$$e&$e&Z%*Z%*`%* &*.&*s`%+&*o@$@&*Ip#:o+~G+gp+#w+#w+#w+#w+gp+dr+dr+#w+#w+gp+gp+~G+ip+3}@wT#I2$V[$=L$=L$#F$Qi$bC$bC$PI&QI&QI&QI&#&*OI&= $OS#|T@XH@29@5X+:o+!G+)P+6X+A$+0y+VA+{V+*4+vI+[o+mm+M)@yb#z$+z$+y;@y;@a$@a$@L@@L@@Z.@Z.@Z.@Z.@|=@|=@|=@}=@L)@tr+:&@:&@(P+K,@eh#3N#3N#uy#/P+:V+-:#~i@tp+|]+)-+c[+rr+xD+K)@#a@ZK+s;@u;@S,@YK+-K@L4##N+{-+@N+rd+:f+f[+~-+:f+6y+6y+b=#Xv+c!@Ke@Fn+/p%k<@}k+./%q=#ZJ.pZ.2O.xz#~o ] 1^#m| XD#hr#.<#q4&; *M5$)7&}8$V] }8$`] ob Bj&7+*3S&4S&4S&-V&yH&7W&0)@h E~.FA+z<.Ea+YY %.@%.@8' 8' Pw%ME+mh.>0+~h&~h&~h&~h&~h&~h&~h&~h&x*$>S%0, &, {h&~h&{h&0, +y&Xw&Be+@d+@d+@d+Be+Xw&z$$@d+@d+@d+@d+z$$mq+2&$*$@Ea+5A.5A.Ea+Ea+5A.{! {! {! {! {! {! {! {! {! 2&$2&$2&$2&$2&$2&$2&$2&$=|$=|$=|$=|$=|$=|$=|$0@@'g@]! ]! ]! ]! ]! ]! ]! $(+]! 8g.8g.]! Ea+5A.]! Ea+5A.5A.5A.5A.]! ]! ]! {! {! {! {! {! {! {! {! Ea+5A.5A.5A.5A.]! ]! ]! 5A.5A.5A.5A.5A.5A.5A.5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+be+{! ]! ]! Ea+Ea+xc+$(+xc+]! {! ]! xc+$(+xc+]! 5A.]! ]! {! ]! 5A.xc+$(+6g+6g+6g+6g+6g+6g+6g+6g+)> )> )> )> )> )> )> )> ]! Ea+xc+Ea+5A.]! 5A.xc+{! ]! Ea+xc+xc+Ea+5A.]! 5A.5A.5A.5A.5A.5A.5A.5A.Ea+5A.{! ]! Ea+xc+", "Q% i> k+ k+ i> Q% 9& k+ k+ k+ l& l& {@ {@ {@ &) &) $% |% |% $% &) &) E7 7c 9c 8c 0' $% &) 4% 5% j% j% j% 5% 5% 5% 5% $% $% )= != != )= V_ d= d= $% $% $% $% $% $% $% |% |% |% |% |% |% |% |% &_ &_ &) &) $% |% |% |% 0' 8c 8c |% &_ n3 n3 t% #% l& {@ {@ {@ m@ m@ m@ U@ U@ U@ U@ U@ U@ U@ U@ f% 4% %% 4% 5% f% 5% %% w4.w4.fL.I> f% 5% 4% %% 4% f% I> v% 5% 4% 5% v% 5% 4% %% ~% %% 5% v% I> UV L2 M2 {2 m3 b/ b/ Q_ 5% 5% =_ -_ -_ -_ -_ -_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ |% $% &) &_ ~_ ~_ &_ &_ 0c -_ ;_ =_ X_ 7v@A^.-_ 0c 0c 0c 0c 0c 0c 0c 0c R_ *_ g% R_ l` l` R_ af.*_ g% g% af.af.QB@QB@4=+<4 <4 <4 <4 <4 <4 <4 <4 s3.;H.5v@s3.h% h% s3..l.fL.&5 &5 n3 n3 ~_ ~_ &_ W_ W_ &5 n3 n3 ~_ &_ &_ =_ 0c 0c A^.A^.X_ X_ 7v@7v@7v@7v@X_ X_ X_ X_ X_ A^.n3 n3 o3 .* .* j$ U# Y@ := vl+9_+]t+C%$$&*w#$1M+8F+AO+i|%R&.G{%]~.%&*hT.5I.>V.4<+Eb#%;$[-+:X@A:&^F$2_+2_+>4+5)#4W.4W.+*+|0#/a$Vk$CM#i%%Gx$Fx$dD$K^$l7#l7#3z@8I#8I#8I#3z@l7#dD$Gx$/v$CO#=c$Rj$nw$^m$^m$Dj$Dj$_a$Ej$Ej$a9$a9$a9$b9$b9$b9$b9$b9$Ej$Ej$Ej$Ej$b8$b8$b8$!l$!l$WL$lF$lF$kF$kF$/H$d8$N1#ni$ni$ni$N1#zA#yA#Fj$&*I^$,&*'&*`y&cs&V3@:x%PF&0|$Hz U^#)&*XJ&!&*~&*{&*]&*^&*/&*(&*_&*:&*p#*<&*[&*}&*|&*1&*2&*3&*4&*5&*6&*7&*8&*9&*0&*a&*b&*c&*d&*e&*2/@@ .r(.pe.lI lI i,.CU CU `F zf.1H |H Cg.Cg.zg.DU 4Z H>.F>.'C.@B.{$*%C&f&*g&*Zy 6M&5h .9 -! rG Qk 3q m.@Ue x-$#3 !%@sK@i($d%%~f#sZ@NJ@rX+Br+Wt+G[#]Q.%++)m$lx$n1#Ts%gq$Uv%io&bq H%$r_$=E u1$&E &E kQ kQ (0@Eu .z i*$2`@oI@6G@[f ^)#7e+s1#2E$m>#>D%V,@1Z+Dt+B$+by+jp+Kg+Ab+vT#H2$$1d%u %k&*(I$|;$>L%j&$>k#>k#{#$|e$0S#l&*m&*=O&n&*{j&ao+o&*/e&p&*5n#q&*r&*a%*s&*N,&4>&t&*t&*u&*;6#OH#6q#}c#f1#YA (|@[|@es %0x$LA&b/$|e%BW.3|+!`+sV@)M s{ /$&sg&v&*w&*x&*y&*z&*A&*jZ&1M.tY+Ns.B&*D!+d##PV&>0.Hz.a;.YA.v5@YA.Nb@v5@v`&Bi@h%*CJ@CJ@C&*D&*Rp.Oh.tj.Wj.Qh.|l.uj.^d.1e&DX ;x.E&*F&*G2&Y#%G&*H&*I&*J&*;B&K&*L&*M&*N&*O&*P&*Q&*R&*S&*T&*U&*V&*W&*X&*Y&*Z&*`&* **.**+**@**#**$**%**&*****=**-**;**Z^@>**<7&&{+[%+>K$/Y+rU#5+@I$*,9+~c+@9+8h+8h+uf+84+b4+EX+mV+up#P4&uU#*w&3g@-i@38+38+G,@`4@.:$.:$+7@),&@7@WE&7*$l@*o@*o@*1+*1+*7*$7*$39@>]@8)$8_$41@3U&M3&Z%*.r% &** $,**- $'**1+*)**49@er+gp+oI+ZM+ZM+ZM+ZM+oI+sI+sI+ZM+ZM+oI+Ht+Ht+ic@}9@$ $#F$% $*L$*L$$F$!E$+xD+#a@zD+ZK+|V+u;@v;@2 @r8+(8$TK+zI+{-+T0+;(@'T@hX@.@#6y+Q2@b=#;[+c!@Ke@Fn+[g@9Z.,m+Lu@q=#%N@} +B(@m9+xa q| 1^#m| XD#hr#.<#{o Hj ~m Hj }8$gC$Fg Bf IC.Bj&7+*3S&4S&!**-V&yH&~**oQ&O D/.P] 8}.G|@ti %.@%.@8' 8' 0@@{**>S%{h&~h&~h&~h&~h&~h&~h&~h&~h&u3$%' {h&0, {h&~h&~h&{h&%z&+y&Be+@d+z$$@d+Be+Xw&@d+Be+Be+Be+Be+@d+z$$=|$*$@Ea+]! ]! Ea+Ea+]! be+be+be+be+be+be+be+be+be+2&$2&$2&$2&$2&$2&$2&$2&$=|$=|$=|$=|$+d++d++d+'g@'g@]! ]! ]! ]! ]! ]! ]! T_+5A.be+be+5A.xc+Ea+5A.xc+xc+Ea+5A.5A.]! {! {! be+be+be+be+be+be+be+be+xc+xc+Ea+5A.5A.]! {! {! 5A.5A.5A.5A.5A.5A.5A.5A.Ea+Ea+]$@Ea+]$@Ea+]$@Ea+i~ {! Yt.]! ]$@xc+jy.$(+5A.ZW+8g.{! xc+T_+xc+]! 5A.]! {! {! ]! 5A.xc+q9+6g+6g+6g+6g+6g+6g+6g+6g+)> )> )> )> )> )> )> )> {! 5A.xc+Ea+]! {! 5A.Ea+5A.Ea+xc+xc+Ea+]! be+8g.5A.5A.5A.5A.5A.5A.5A.5A.Ea+5A.{! ]! Ea+xc+", "u& u& u& u& u& u& u& R% R% u& C& S& S& C& C& &) $% 0' 8c 8c 0' $% &) 0' 0' 0' 0' 0' 0' 0' d( ~% O~.O~.O~.~% ~% ~% ~% 8c 8c != )= )= != Wl 3c S_ ;_ ;_ 2b 2b he ke ke ;_ ;_ -_ -_ =_ =_ =_ 0c |% $% $% 0' 9c 8c |% &_ &_ &) |% 0' 0' |% &) t% M$ U@ 2% * * 2% U@ m@ k+ l& l& {@ m@ m@ U@ U@ &) &) &_ &_ ~_ n3 n3 &5 ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~% 4% 5% 4% %% %% f% fL.v% v% v% f% 5% 5% 4% 4% f% y% f% y% f% f% f% ~_ &_ &_ &_ &_ &_ &_ &_ &_ 4% 4% 5% 5% f% v% v% I> f% f% f% f% f% f% f% f% *_ g% g% af.af.QB@QB@4=+4=+QB@QB@af.af.g% g% *_ A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.QB@QB@QB@QB@QB@QB@QB@QB@4=+QB@QB@af.af.g% g% 5% o3 o3 o3 o3 o3 o3 o3 o3 =5 =5 =5 =5 =5 =5 =5 =5 5% g% QB@4=+4=+QB@g% *_ g% g% g% af.af.QB@QB@QB@W_ W_ W_ =5 * * j$ U# ]@ := r(#y_ JC#hQ+(M+NY&D_ =L+rF+nw DD W/&q!&]**^**/**l%+o>&l$+l$+rz@<8$43@[&#[&#Nu#'>+4W.4W.4W.5Z.n~+km$98$Z}&Z}&5v$5v$&c$|0#+B$3)#9Z+R2@})#})#|)#})#9Z++B$|0#/a$pr%{m$]m$]m$]m$]m$=c$%u$Hs$Hs$'H$Gs$;u$)H$)H$!I$Ls$Ks$b8$b8$b8$b8$!l$!l$!l$WL$kF$/H$/H$/H$/H$/H$GO$kF$ow$cN$a9$N1#00$Wx$*6$oZ@mZ@ui$} @} @eX+%1@>}@,}@R,@a=@0&@0$@-(@N)@M,@[o+Vv#Kx#4v#gh#L,@+w+LF@!P+gp+:o+/V+R;@*3@11@$}#'.$hc@u^@g9@::@lf+g9#52+(**_**:**<**[**}**8x$_z%{}@|**b; 1**1**1**bO&2**9;&/0@Ul&Hh&gj&3**4**5**6**7**8**I%*9**0**a**b**c**d**e**f**g**h**i**j**k**l**m**n**o**p**q**r**/H jD Tq.PX Pp.% .dZ @[.4W F0.@ .:%.z].l4.Q:.B}.U` V{.eL U9+pc.hx.TN..].E{+s**/f@t**u**C@$;f#(Y@Dv@u/@G`+V} *K.s| GB%83@SP.={#{Q#5Y+!U+M#$U-$t{%pD#3&#<.%ud$KB@LB@i~@HJ%v**Ez%6r uK Y;$PO$se%fQ%`!&5'$*E }g Du Pw Ux mP%mP%Tx Fu Zi@8V v'@./#gs#x<@L=%aa@1w+|w+28+t~@,.$I#$(/$vT#/6$$u$3v$@Z#4q$oQ$w**x**y**3%*z**A**U<${t$el$3H$W2$N3&.D#V]#La$!$%@k#1*%SK#LK#B**!+&Ws&C**D**E**F**G**H**I**J**K**L**M**N**9j&O**,6#.p@[c#J7&R~#%W@m$#4z+8E$36$|h$l,$-0@l8$a_#xO.B:&V,+4[%VH#'2+bN#n%$b>%b>%pw$37$.3%Jn#f'$/R#^R#8k#8k#^R#37$ea@.{@A:&P**r#$6&#NM.EN #~ C1&B1&E/&Q**1#.R**S**T**U**V**W**X**Y**(m.j4.PV&PV&PV&PV&PV&PV&PV&QV&Z**96#uU&r!.Z**v5@R8.Ik.dh.-_@:M@sj.Al.kI s9.l4.S,.)).`** =*.=*+}$+=*@=*So@~6%#=*$=*%=*&=**=*==*-=*;=*>=*,=*'=*)=*!=*~=*{=*]=*^=*/=*(=*_=*:=*<=*pe&[=*}=*MJ+|=*1=*2=*N7$3=*oM%lS$a&%4=*e*+5=*6=*ht$G^@3a++I@A&@/a+k(@Pi+9{$z|#{v#{:@BG+ep#H #7=*8=*jB+9=*lW#AT#>q$Ab$19@|T@XH@`H@cc@ZM@cc@ZM@qe@qe@4k@4k@ZM@%7@5X+5X+x=@%}@BT#5}@L2& 7@.~&iR$QI&EZ$* $uQ$X=&29@WE&[R+YM+[G+ip+ip+-]@S%>S%%' x*$X@$~h&&, >S%~h&{h&0, 0, ~h&%' X@$TO&TO&`E&`E&3]&3]&O4%O4%TO&TO&TO&`E&3]&O4%O4%3&$/{ $(+xc+5A.]! 5A.Ea+Ea+be+be+{! {! ]! 5A.5A.5A.2&$;~@Pw%*Z+u3$=|$2&$2&$+d++d+^b+^b+Jb#Jb#Jb#d> 'g@`Y ui YY 5A.T_+]! `Y 8g.8g.be+be+{! {! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! xc+Ea+]! {! {! ]! Ea+xc+ko.NM+NM+cI+l7 l7 }f.}f.=L @$+@$+@$+13+13+ko.ko.6g+6g+Fu#6g+Fu#6g+Fu#6g+QL+jy.QL+jy.(w.q9+(w.q9+h]@PS@h]@h]@h]@h]@h]@h]@$(+$(+q9+q9+q9+q9+q9+q9+]$@Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.be+be+5A.5A.be+be+5A.be+be+{! {! ]! 5A.5A.5A.Ea+Ea+Ea+5A.5A.]! ]! ]! @$+NM+cI+13+ko.}f.}f.NM+bH@}f.l7 cI+ko.13+", "C& C& C& C& C& C& C& R% R% u& C& S& S& C& C& &) $% 0' 8c 8c 0' $% &) 0' 0' 0' 0' 0' 0' 0' d( ~% O~.O~.O~.~% ~% ~% ~% 8c 0' != )= )= != ~= 3c T_ ;_ ;_ ;_ ;_ 2b 2b 2b ;_ ;_ -_ -_ =_ =_ =_ =_ |% $% $% |% 8c 8c $% &_ &_ &) |% 0' 0' |% &) t% M$ U@ 2% .* .* 2% U@ m@ {@ {@ {@ {@ {@ m@ m@ U@ &_ &_ &_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ %% 4% 5% 4% ~% ~% 5% v% v% v% v% f% 5% 5% 5% 4% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ &_ &_ &_ &_ &_ &_ &_ &_ 5% 5% 5% f% f% f% f% f% f% f% f% f% f% f% f% f% g% g% g% af.af.QB@QB@QB@QB@QB@QB@af.af.g% g% g% A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ A^.A^.0c 0c ~_ o3 .* .* .* .* .* .* .* .* .* .* .* .* .* .* o3 5% g% QB@4=+4=+QB@g% *_ g% g% g% af.af.QB@QB@QB@W_ W_ ed =5 * * j$ U# 3. V5 Z$+@< WO&As /M+NY&:m@2>$lw 3V SZ$$1 lb@,^.m%+B*+vh%l$+c=*c=*d=*e=*Q8%Pm&Pm&E>#'>+<-+4W.4W.5Z.n~+{l$98$nM%nM%~1&5v$A3%k %k %wy+R2@|)#|)#B1#|x@~=#]v$R2@wy+4w+&W#m9&*c$*c$*c$*c$]m$]m$nw$nw$'H$Gs$Ls$!I${J$}@T_@Q,@b=@=9@L@@b&@y;@ry+nm+z$+z$+yb#L,@L,@L,@hh#.5@]V+v~@u^@*3@Pi$/]+x:+pF$1H$n)+^7@Ti+Vy+/A#ZE$f=*g=*h=*i=*j=*k=*+4#},%l=*FV&m=*n=*o=*1**bO& ' 0;&YI$OH$p=*q=*tc&r=*s=*t=*u=*v=*w=*x=*y=*z=*A=*B=*C=*D=*E=*F=*G=*H=*I=*J=*K=*L=*9@*M=*N=*O=*P=*>y+}W EE PX ZF Pp.dZ @[.>}.>}.:%.N-./-.T*.D}.D}.`{.e~.Q=*O}@h,.rc.J>._@+L*.R=*S=*T=*/=&C@$Ua&/A 8q#fX#Sg k.@G`+yy@ (+ ^+M[$Y #Uk#a]@rF%gh$O]$y{$n~$G)++7#uz@O&#,0%'o U=*py%V=*6r H%$G'$UB&W=*X=*fQ%i!$*E Du Du 'Y$Ux mP%mP%Tx qI@sG H~ &W@n)$Y=*qs&0)$|Y+3h#v.*z=@:R+:a@V[$g($I#$g8$g8$G2$c%%Z=*`=* -*.-*+-*2%*@-*[)%#-*{Y${t$u;&3H$W2$K($tM@tM@t3#c$&@k#d&%W$$`G#L/$$-*<{$^s+%-*&-**-*=-*--*;-*>-*,-*|Q@'-*)-*=k&+]&og&Qj&40&KH#YT@F&# -#n'%26$TB$fq$n1#${#=[@YJ.ja@ki@(R#t!$1T+|T+|T+37$$*$N)$%*$`]$Cb#Jn#f'$aN#^R#8k#^R#qQ#_v@t.*!-*bT.dW.LZ@Oe Cd#~-*{-*2D&]-*L-.nw@qY+^-*/-*5Q#+@+(-*_-*:-*33#:6.QV&QV&QV&QV&>0.>0.>0.>0.QV&QV&PV&QV&QV&>0.|q.Lh@oi.<-*sj.ji.Eg.b<.S` f;+.].N8.: #[-*}-*|-*1-*2-*3-*4-*5-*Sy&6-*7-*8-*9-*0-*a-*b-*c-*d-*e-*f-*g-*h-*i-*j-*k-*l-*m-*n-*o-*p-*q-*r-*s-*t-*d&#u-*sJ+<7&v-*HW$L.+|'+'z@w-*l|+x-*D5$z|#Od+lk+b1@g9@:@>:@{`#{`#bC$bC$& $& $tQ$6*$dc@`H@%7@]V+xb#_G+ip+It+ic@<9@<9@fr+5k@5k@ue@ue@9i@S%>S%%' x*$X@$~h&&, >S%~h&{h&0, 0, ~h&%' X@$TO&TO&`E&`E&3]&3]&O4%O4%`E&`E&`E&3]&3]&3]&3]&'W+|m.xc+Ea+]! ]! ]! 5A.Ea+be+{! {! {! ]! 5A.5A.h]@2&$Pw%*Z+*Z+u3$u3$=|$2&$Y@$Y@$Ae+KE#KE#NZ@+R@oA+ok.Ea+]! 5A.Ea+xc+Ea+]! be+be+{! {! ]! ]! 5A.5A.]! ]! ]! ]! ]! ]! ]! ]! xc+Ea+5A.]! ]! 5A.Ea+xc+cI+cI+cI+cI+NM+NM+NM+NM+13+13+ko.ko.ko.NM+NM+NM+6g+Fu#Fu#Fu#Fu#Fu#Fu#Fu#(w.(w.QL+QL+^x#^x#^x#6g+v]#q)@PS@PS@h]@h]@M8@M8@xc+xc+jy.jy.jy.jy.QL+jy.]$@Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+{! {! Ea+Ea+{! {! Ea+{! {! {! ]! ]! 5A.5A.5A.xc+xc+Ea+Ea+5A.5A.]! ]! @$+cI+cI+13+ko.}f.}f.NM+l7 l7 cI+NM+NM+ko.", "S& S& S& S& S& S& S& R% R% u& C& S& S& C& C& $% |% |% 0' 0' |% |% $% 0' 0' 0' 0' 0' 0' 0' d( ~% O~.O~.O~.~% ~% ~% ~% 8c 0' )= )= )= )= ~= 3c T_ ;_ ;_ -_ -_ -_ -_ =_ ;_ ;_ ;_ -_ -_ =_ =_ =_ |% $% &) $% 0' 8c $% &_ &_ &) |% 0' 0' |% &) t% t% U@ 2% .* .* 2% U@ U@ 2% U@ {@ l& l& {@ m@ U@ ~_ ~_ ~_ ~_ ~_ &_ &_ &_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ 4% 5% 5% %% d( d( %% 5% v% v% f% f% f% 5% 5% 5% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ &_ &_ &_ &_ &_ &_ &_ &_ f% x% x% x% x% j% j% j% x% x% x% x% x% x% x% x% g% g% g% af.af.QB@QB@QB@QB@QB@QB@af.af.g% g% g% A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.0c 0c 0c 0c 0c 0c 0c 0c X_ X_ X_ A^.A^.0c 0c ~_ o3 .* .* .* .* .* .* .* 2% 2% 2% 2% 2% 2% 2% Y_ f% af.af.QB@QB@af.af.g% g% g% g% af.af.QB@QB@QB@W_ W_ ed =5 * * j$ U# s# V5 !M.s] xQ&WO&@K+NY&:m@4V gl e| SZ$$1 G-*H-*I-*l%+vh%l$+c=*c=*c=*J-*Q8%Pm&Pm&E>#'>+<-+4W.4W.n~+B%%{l$A3%m6&nM%!1&y7%Z}&N@%N@%4w+]v$/d$/d$~=#`P$`P$Ts@4Z.Qy$Ry$Mt%Mt%jm$*c$*c$*c$]m$]m$nw$nw$Gs$,H$Ls$!I$;*6I&,;*';*);*!;*.#*93+`j._X.nI pe.lI i,.YP 3..^%.(%.aR &'.,T oS.]-.Q}@hO l)@7<@t'.F!.UB.k7+l7+~;*{;*];*q *;f#%B%}|@H0 7V Rg Vj -K.7O. G@eq#vv%:J$5O#4P+4Y+L=&{($M#$XJ.uL.yO.,-#B2&^;*JJ%e3$V3@:x%H%$G'$Lv%$/&/;*(;*i!$*E Du Du 'Y$Ux mP%mP%Tx qI@sG Z:@eP@BR@9O#TS#N/+6T@,P%_;*L3+er+0.>0.Hz.a;.a;.g;*g;*Hz.a;.a;.g;*g;*a;.Hz.2r.:M@ln+j%*Zj..G pI e|.<..U*.~C.ql+aE.0M#h;*i;*>T#j;*k;*_1&3K%OE&l;*m;*n;*o;*p;*q;*r;*s;*t;*u;*v;*w;*x;*y;*z;*A;*B;*C;*D;*E;*F;*0u.G;*$.#x<&H;*{1$6/%35%1++d#@I/+5=*X%*CQ@2x#s #2e$jK$r3#T.%l(@nk+O)$9x@j(@J%%I;*J;*F #x;$R##K;*;W$Py+q$0X#Y4@>:@OS#|T@XH@`H@`H@`H@4k@ZM@ZM@%7@29@v~@WH@WH@G,@,:@MU#MU#qR$qR$pR$pR$~O$~O$bP$dc@dc@cc@ZM@]V+:G+_V+It+It+ip+-]@fr+1}@ec@ec@0x@X4@L<@K<@K<@K<@6*$tQ$tQ$sQ$0S$0S$)O$)O$x|%sQ$EZ$19@OS#v~@5X+er+q;@gK@gK@gK@gK@gK@gK@gK@]G+]G+]G+]G+]G+]G+]G+Ll+ep+y@@z@@z@@PK+PK+(P+fh#7X+ N+(t#(t#(t#(t#`M+`M+7h$`M+1N#eh#3k##9@&t@fz@6o@jb#>;%fz@:&@FD+K,@:c@VH@`n+~i@`K+@k+oy+vD+$B+mX+< @|V+m#$~g$wp#2R+]-+#N+#N+L4#/K@FM@FM@FM@9V@hi@hi@aZ.aZ.aZ.aZ.H_%H_%l9@Q3#TF@,[#43@9-##$#$V.gW.F( HW.T: 4 4 XQ@Sk =)#Bc Cc D-*7)@7)@u6 L: Az$Ld&!**W{ BT&4S&9< oQ&s<+`d.{! c;+{! gA $(+`Y w8.8g.{! 5A.Ea+xc+xc+xc+X@$%' >S%%' X@$X@$~h&0, >S%~h&{h&0, 0, ~h&%' X@$TO&TO&`E&`E&3]&3]&O4%O4%O4%O4%3]&3]&3]&3]&`E&{y%6j+Ea+5A.]! {! ]! ]! 5A.{! {! {! ]! ]! ]! 5A.h]@u3$*Z+ME+X`+X@$x*$u3$u3$3&$3&$PC#Ae+Ae+KE#cT@)D+ok.G|@Kh+T_+5A.{! 5A.xc+]! ]! ]! 5A.5A.5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+Ea+5A.5A.5A.5A.Ea+xc+l7 cI+cI+NM+ko.13+@$+@$+ko.NM+NM+NM+cI+cI+l7 l7 ]$@]$@]$@]$@]$@]$@]$@]$@jy.jy.]$@6g+6g+)> )> ]! :{+q)@q)@PS@h]@M8@M8@ZW+Ea+Ea+]$@]$@]$@]$@^x#]$@]$@Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+]! ]! xc+xc+]! ]! xc+{! ]! ]! ]! 5A.5A.5A.5A.xc+xc+xc+Ea+Ea+Ea+5A.5A.@$+cI+cI+13+13+l7 }f.ko.NM+NM+NM+NM+NM+NM+", "S& S& S& S& S& S& S& R% R% u& C& S& S& C& C& |% |% |% |% |% |% |% |% 0' 0' 0' 0' 0' 0' 0' d( ~% O~.O~.O~.~% ~% ~% ~% 0' 0' )= d= d= )= ~= != T_ ;_ -_ -_ =_ 0c 0c 0c 2b 2b ;_ ;_ -_ -_ =_ =_ |% $% &_ &) |% 0' $% &_ &_ &) |% 0' 0' |% &) t% t% 2% 2% 2% 2% 2% 2% U@ fd .* m@ l& k+ l& m@ U@ &5 n3 n3 ~_ &_ &_ &) &) ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ 4% 5% 5% %% d( +h.d( 4% f% f% f% f% f% f% 5% 5% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ f% l3 j}+w% l#@j% $9.7% 5!.x% l#@x% l#@x% l#@x% x% af.af.af.af.af.af.af.af.af.af.af.af.af.af.af.af.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.0c 0c 0c 0c 0c 0c 0c 0c A^.A^.A^.A^.A^.A^.A^.n3 o3 .* .* .* .* .* .* .* 2% 2% 2% 2% 2% 2% 2% Y_ v% af.af.af.af.af.af.af.g% g% g% af.af.QB@QB@QB@W_ W_ ed =5 * * j$ U# 4. 61 OF+t] xQ&WO&q($NY&@c$4V XH+@I+M*#$1 w{.cK&L;*l%+vh%rz@d=*c=*c=*aq@Q8%Pm&Pm&E>#'>+<-+4W.4W.n~+B%%98$A3%m6&m6&!1&y7%`}&ns$ns$]8$`o$.v@.v@|x@`P$`P$Py$Ts@Ry$Xz$Mt%Mt%RA$jm$jm$*c$]m$]m$=c$Ms$Gs$,H$Js$Ls$*.>*+>*@>*#>*$>*%>*&>**>*=>*->*;>*>>*,>*'>*)>*EI&!>*6`&6I&~>*{>*]>*^>*`B@nL _X.Dg.Dg.Dg.FE nI pe.^X.YP C_.aR ]-.4^.&'.o+.1k&Pi&p:@~n&M:.|v.%B.ql+/>*(>*_>*}<.:>*&3#<|@.<@wb n{ %S X uK@1L.rV@B(@b_#PA$T-$Fi$Lt$h+&aT+|(%w<@)(@uL.} +>-#<>*KJ%[>*V3@Dz%H%$oF%%R$cj&}>*pg&&E *E Du Du 'Y$Ux mP%mP%Tx oI@sG `:@T~#n)$8'$VP.Bp+z9#|>*A9%:u+ q+XH@K<@$}#;k+SR#SR#c0$8q$M.$8m$1>*2>*3>*4>*RG$=G$'E$Ol$<)%`0@I*$O4&G$$]E&t %e9#ZE#};*5>*.^#{#$vx#%J#6>*kL+7>*8>*9>*0>*a>*;t&,6#b>*c>*d>*+H@,T%+p@/Q#e>*(M =p@+~ TH R-$ji$q~$j&%4`$-r%rK@e!@O$+B%%''%}/+:8$*6$5($_8$c8$4($`H%17$N)$N)$&6$37$b>%|0$Sv#h^#CB&%-%f>*g>*.f&h>*i>*] $j>*k>*l>*m>*A@.n>*lb&.a;.a;.g;*0;.b;.b;.@B.g;*0;.@B.c;.@B.b;.g;*px.zl.j%*sj.Zi.pI + .. .T` /-.f;.h;.3X.&C&Ip.o>*Tt&p>*q>*9+%6h ^Q#QM&r>*s>*t>*u>*v>*w>*x>*y>*z>*A>*w>*B>*C>*D>*9P&E>*F>*G>*L6 hR J++H>*I>*J>*-M%l4&Y@+I>+K>*Rh%L>*w-*t+#M>*T%#t<#]C%N>*/C%E##YJ@1N+W/%%m%Fs@ZE#bp#D<#O>*F #P>*Q>*DS#e4$$#$aC$Iu$*3@31@5}@MU#|T@XH@XH@`H@`H@ZM@%7@%7@29@v~@WH@,:@,:@:R+:R+v~@|T@uQ$tQ$& $& $* *p'%p'%YH@cc@ZM@]V+]V+_V+(G+hp+hp+ip+ip+1}@t~@(a@u^@2(@Tl$*3@|1@K<@L<@6*$6*$uQ$EZ$pR$bC$iR$.O$sQ$EZ$19@|T@v~@5X+:o+~G+gK@gK@gK@gK@gK@gK@gK@gK@U_@U_@U_@U_@U_@U_@U_@P0+T{@y@@fD+FD+Kl+(P+fh#qr$7X+7X+uy#(t#(t#(t#`M+/P+{P+Gt+`M+7X+3k#&t@Bq@>;%jb#;I$$n%Rx#<&@:&@:x@+B+o;@`n+xV$~i@-w+oy+#B+~w+mX+zD+|V+v;@8=@wp#CI+]-+TK+#N+(8$/K@/K@b=#FM@FM@hi@hi@hi@aZ.aZ.aZ.H_%H_%l9@Q3#h|+23@;t@8-#C.+B[@&++}7 HW.Q-@=[ =[ WE .<#=)#Bc D-*pa 7)@}!#u6 02 h6&Ld&a=*CT&CT&R>*b=*BT&S>*&# $(+C/.5A.be+$(+w8.w8.be+]! Ea+xc+xc+Ea+5A.x*$%' ~h&>S%%' %' ~h&0, >S%~h&{h&0, 0, ~h&%' X@$TO&TO&`E&`E&3]&3]&O4%O4%#u%#u%#u%O4%3]&`E&`E&{y%'g@]! ]! {! {! {! ]! ]! {! {! ]! ]! ]! ]! ]! M8@u3$ME+X`+X`+X@$X@$x*$u3$3&$3&$Ae+Ae+KE#KE#cT@oA+)D+Ea+xc+5A.{! be+{! ]! Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.]! ]! ]! ]! 5A.5A.NM+NM+ko.ko.13+13+13+@$+ko.NM+NM+NM+cI+cI+l7 l7 ]$@]$@]$@]$@]$@]$@]$@]$@)> )> )> )> )> )> )> ]! :{+q(#q)@PS@h]@M8@ZW+ZW+5A.5A.6g+6g+6g+6g+Fu#6g+]$@Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+5A.5A.$(+$(+5A.5A.$(+]! ]! 5A.5A.5A.5A.5A.5A.$(+$(+xc+xc+Ea+Ea+Ea+5A.13+cI+l7 13+13+l7 l7 ko.ko.ko.ko.NM+NM+cI+", "u& u& u& u& u& u& u& R% R% u& C& S& S& C& C& |% |% |% |% |% |% |% |% 0' 0' 0' 0' 0' 0' 0' d( ~% O~.O~.O~.~% ~% ~% ~% 0' |% d= d= d= d= V_ != T_ ;_ -_ -_ =_ 0c 0c 0c 2b 2b 2b ;_ ;_ -_ -_ -_ |% &) &_ &_ $% |% $% &_ &_ &) |% 0' 0' |% &) t% Y_ 2% 2% U@ U@ 2% 2% 2% * .* U@ {@ {@ {@ m@ U@ &5 n3 n3 ~_ &_ &_ &) &) ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ 5% f% f% 4% d( +h.~% 4% 5% 5% f% f% f% f% f% f% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ f% {t.pD&j}+V^$$9.b #5!.Jc@l#@V^$l#@V^$l#@V^$l#@l#@<4 af.af.af.af.af.af.af.af.af.af.af.af.af.af.af.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.0c 0c 0c 0c 0c 0c 0c 0c A^.A^.A^.A^.A^.A^.A^.n3 o3 .* .* .* .* .* .* .* * * * * * * * =5 v% af.af.af.af.af.af.af.g% g% g% af.af.QB@QB@QB@W_ W_ ed =5 * * j$ U# U# +2 !M.1* WO&;V&@K+NY&ai 4V XH+@I+SZ$$1 w{.re$L;*l%+vh%vh%T>*d=*c=*aq@Q8%Pm&Pm&E>#'>+<-+4W.4W.B%%+*+98$A3%m6&m6&Z'%99$`}&ns$ns$]8$`o$.v@.v@|x@|x@aX#Ts@Ts@Ry$Ry$bw$m9&Zz$Zz$jm$jm$]m$ar$>b$Ms$,H$,H$Js$Js$Ls$!I$*41$y$@Fp$V>*W>*X>*Y>*Z>*`>* ,*},%Fz%Zv%hy%ly%ho&.,*.,*;)&1N%GJ%{$&RL%G/&+,*@,*#,*$,*4z&%,*&,**,*=,*-,*;,*>,*,,*',*),*!,*~,*{,*],*^,*#Y&/,*(,*_,*:,*<,*[,*},*z{@4<@M9@L9@L9@o}+I|@Zm.UP G Ym.8^.E@.E@.8^.{}.K3@5<@1k&AU t'.|v.%w.Y8.vV |,*1,*2,*`q uG 3,*:)@1A 1A k9$IT#;1+X]$MM.!m$b_#&$#~q$#f$~Q#pl%8R+8R+{f#qL.kh#$++K=& |$hS$sZ#WH%>&&6r ],$%R$4,*R-*5,*&E *E Du Du 'Y$Ux mP%mP%oI@Tx sG s[@T~#L-$8'$jq+d%%)>+hD@6,*qC$O<@v~@v^@yT#}1@dE#dE#11@gc@'O$*d>*#|#T(&^N%#S##S#_E$G5@W:@TH }h$Fz%s1$(l$%D%4w$@++GX%5h#rr%%*$'2+Wx$hX+5($c9$c8$%K$17$17$J$+_8$5($d8$>M$|0$H]$h@*P^$d,*e,*f,*g,*h,*ST&i,*ZU&j,*k,*xy&l,*zg.%E@=w.Oc+D1.K` .l7+m,*n,*o,*Tt&p,*76+E5 }C %W@`d&q,*r,*9r&s,*t,*u,*v,*w,*tf&x,*y,*z,*z,*8T$GN C&#A,*.:+Q% B,*]p#&g.(,.7d Y3@li$%;$cf%C,*vi%y##7b#%V%B=&D,*E,*.T%F,*#Y%am%G,*H,*{^%jl%W!#2b#I,*J,*O>*K,*L,*qP+pM@^z@G$$S2$Hu$J,+lt$I2@;]@WH@29@%7@%7@%7@ZM@%7@%7@29@v~@WH@,:@,:@5X+5X+29@XH@6*$6*$aP$aP$p'%p'%p'%YH@cc@ZM@]V+]V+(G+$w+l;@l;@It+It+:T+/V++>++>+J,+J,+K,+v^@hc@:a@XH@|T@OS#fY#M<@ 7@yV#yV#EZ$uQ$|T@29@5X+er+~G+!P+gK@gK@gK@gK@gK@gK@gK@gK@)B+)B+)B+)B+)B+)B+)B+b$@0y+1V+(P+K,@(P+K,@3k#$r%3P#3P#uy#uy#`M+/P+/P+/P+sI+nI+/P+ N+eh#&t@Bq@>;%jb#v)%$n%>;%#9@:&@fh#+B+o;@`n+xV$~i@-w+oy+#B+~w+P,+zD+2T+v;@8=@7=@CI+->+AI+{-+ib#L4#4]+4]+b=#b=#) +hi@hi@hi@aZ.aZ.aZ.aZ.k9@Q3#Y @23@;t@_M#C.+B[@ei j1 I..!m =[ O@$WE td#.|#Bc D-*pa }!#M,*N,*ly$w4&S%{h&>S%~h&{h&0, 0, ~h&%' X@$TO&TO&`E&`E&3]&3]&O4%O4%Fc%Fc%#u%O4%O4%3]&`E&{y%Lh+{! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! ]! {! ZW+u3$ME+X`+X`+X@$X@$x*$u3$+d++d+KE#NZ@NZ@Jb#BX@yj+oA+be+8g.be+]! Ea+5A.{! xc+xc+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+{! {! {! {! {! {! {! {! @$+13+13+13+ko.ko.NM+NM+13+13+ko.ko.NM+NM+NM+cI+jy.jy.jy.jy.jy.jy.jy.jy.ZY ,v.i~ Yt.)> 6g+]$@xc+v]#q)@q)@PS@h]@M8@M8@M8@5A.5A.6g+6g+6g+6g+Fu#6g+]$@Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+5A.5A.$(+$(+5A.5A.$(+Ea+Ea+5A.5A.5A.5A.5A.5A.xc+xc+xc+Ea+Ea+5A.5A.5A.ko.l7 l7 13+13+l7 cI+13+13+13+ko.NM+NM+cI+", "R% R% R% R% R% R% R% R% R% u& C& S& S& C& C& 0' |% |% $% $% |% |% 0' 0' 0' 0' 0' 0' 0' 0' d( ~% O~.O~.O~.~% ~% ~% ~% |% |% d= 3{ 3{ d= V_ )= T_ ;_ ;_ -_ -_ -_ -_ =_ he 2b 2b 2b ;_ ;_ -_ -_ 0' &) ~_ ~_ &) $% $% &) &_ &) |% 0' 0' |% &) &_ o3 2% U@ U@ U@ U@ 2% .* 2% 2% 2% U@ U@ U@ U@ M$ ~_ ~_ ~_ ~_ ~_ &_ &_ &_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ 5% f% f% 5% %% ~% 4% f% 5% 5% 5% f% f% f% v% v% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ f% l#@V^$V^$V^$V^$b #b #b #V^$V^$V^$V^$V^$V^$V^$l#@s3.QB@QB@af.af.g% g% g% g% g% g% af.af.QB@QB@QB@A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c A^.A^.X_ X_ &5 o3 .* .* .* .* .* .* .* * * * * * * * =5 I> af.af.g% g% af.af.QB@g% g% g% af.af.QB@QB@QB@W_ W_ ed =5 * * j$ U# 4. [U r(#t] O,*0S+P,*NY&Q,*2>$XH+@I+DD a[%w{.Ro$I-*B*+SL&SL&lB#T>*d=*J-*Q8%Pm&Pm&E>#'>+<-+4W.4W.+*++*+98$A3%m6&m6&Z'%L$+Z}&N@%N@%4w+]v$/d$/d$~=#~=#~=#4Z.Ts@Ry$Qy$&W#&W#Zz$Zz$jm$jm$]m$ar$Sj$Sj$Ms$,H$Js$Js$Ks$Ls$B+O)@O)@0&@Z.@Z.@K@@L@@P,@*9@H6@b&@-(@z$+!B+t9#29@6*$we@|9@wT#xd%=y$!7%xh$d(%V0@R,*w$@S,*T,*U,*V,*W,*X,*Y,*Z,*(.%~~%Ss%Zv%1C%GD%he&g`%f`%5>&5>&g`%5C%`,* '*.'*+'*@'* @*#'*$'*uL&%'*&'**'*='*-'*;'*>'*,'*''*)'*!'*~'*{'*6L&]'*^'*/'*('*_'*:'*<'*{^@,B@K3@U[@ll+M9@ym@I|@1l.Zm.Ym. G .d|.aZ G 4<@4<@J3@rI ,>.i=.}(+['*}'*|'*1'*2'*3'*/V#PF&'J CN =P vo@$c$q<+X]$2O.Z #Nj#%$#~q$T-$Xo$~Q#A[#8R+Uj$`@+ZJ.e=@n[+K=&qy#4'*D;@^*@$5$Y;$%B%eB py&py&&E *E Du Du 'Y$Ux mP%mP%qI@Tx rG cP@T~#h*$9O#8v#U{$~b#5'*3:@G6+z=@`I+31@2(@q)+Tl$K,+*3@0X# $Tj$,L$e;%_P+_P+5($_8$4($`H%+6$17$Rb$d8$jF$jF$>M$ .&N^$e'*f'*g'*h'*i'*j'*k'*l'*m'*n'*o'*Qo&p'*q'*r'*>3+uf.SM b<.W#.63.jc.4b.1b.e&.~2.~2.5b.5b.5b.5b.5b.5b.5b.~2.6b.3b.3b.3b.3b.fc.pI Qh.wf.pI zf.Ua.N-.j,.#{.>*.3J.s'*t'*u_@u'*3p&:x%F5 %S J!$n$# ~&v'*w'*x'*y'*z'*qq&CF&XR%$W@R5@}f A'*Zi@P@$B'*C'*{# d oa@^^.)I+j|@D'*yQ@'b@yz@E'*F'*G'*H'*I'*|1%J'*oD%K'*L'*M'*N'*O'*ch#P'*ch#Q'*::$Fs@uH@R'*9b#,C%S'*Dm#:@Y4@Y4@4}@19@|T@29@[R+er+~G+!P+fp+gK@gK@gK@gK@gK@gK@gK@gK@)B+)B+)B+)B+)B+)B+)B+b$@WA+z@@K,@K,@(P+K,@eh#tS$3P#3P#uy#uy#`M+/P+Gt+Gt+sI+nI+Gt+ N+eh##9@&t@Rx#jb#;I$$n%Rx##9@:&@fh#Y+$p;@f0#f0#XN#fy+@k+1R+!w+w)+mX+Q)@S,@v;@7=@R,+yM@zI+{-+@N+T0+4]+4]+4]+b=#) +) +hi@hi@hi@aZ.aZ.aZ.[/+Q3#]i@wg@:K@ZN%C.+]Y.2A.F%@&@.Gj O@$./$%p {o ud#~(#Cc pa M,*8)@L: 3[ J8&S%%' >S%~h&>S%~h&{h&0, 0, ~h&%' X@$TO&TO&`E&`E&3]&3]&O4%O4%#u%#u%#u%#u%O4%O4%O4%3&$9Y+{! ]! 5A.Ea+5A.5A.]! 5A.5A.]! ]! ]! {! {! %.@u3$*Z+ME+X`+X@$x*$u3$u3$+d+^b+NZ@NZ@Jb#Jb#'@+3K@A_@{! be+]! $(+G|@$(+Ea+xc+xc+xc+Ea+Ea+Ea+5A.5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+be+{! {! ]! ]! {! {! be+@$+@$+13+ko.NM+cI+cI+l7 13+13+ko.ko.NM+NM+NM+cI+jy.jy.jy.jy.jy.jy.jy.jy.,v.,v.i~ Yt.)> ]$@]$@xc+h]@PS@PS@PS@h]@h]@h]@h]@Ea+Ea+]$@]$@]$@]$@^x#]$@]$@Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+]! ]! xc+xc+]! ]! xc+xc+Ea+Ea+Ea+5A.5A.5A.5A.Ea+Ea+Ea+5A.5A.]! ]! ]! ko.}f.l7 13+13+cI+cI+@$+13+ko.ko.NM+NM+cI+", "u& u& u& u& u& u& u& R% R% u& C& S& S& C& C& 8c 0' $% &) &) $% 0' 8c 0' 0' 0' 0' 0' 0' 0' d( ~% O~.O~.O~.~% ~% ~% ~% |% $% d= 3{ 3{ d= M= )= T_ ;_ ;_ ;_ ;_ 2b 2b 2b he he 2b 2b 2b ;_ ;_ ;_ 0' &) n3 n3 &_ $% $% &) &_ &) |% 0' 0' |% &) &_ o3 Y_ t% M$ M$ t% Y_ o3 #% M$ Y_ =5 =5 o3 t% M$ &_ &_ &_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ 5% f% v% f% 4% 4% v% fL.4% 5% 5% 5% f% v% v% v% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 n3 n3 n3 n3 n3 n3 v% $9.b #b #V^$V^$V^$V^$V^$V^$V^$V^$V^$V^$V^$V^$l#@s3.QB@QB@af.af.g% g% g% g% g% g% af.af.QB@QB@QB@af.af.af.af.af.af.af.af.af.af.af.af.af.af.af.af.X_ X_ X_ X_ X_ X_ X_ X_ 0c 0c 0c A^.A^.X_ X_ &5 u% u% u% u% u% u% u% u% u% u% u% u% u% u% u% u% fL.QB@g% *_ *_ g% QB@4=+g% g% g% af.af.QB@QB@QB@W_ W_ ed =5 * * j$ U# /+ ig CN.t] P3$7V+T'*U'*V'*Xs@XH+e| 3r@Jc%G-*Ro$I-*W'*X'*X'*Y'*lB#T>*Z'*Q8%Pm&Pm&E>#'>+<-+4W.4W.+*+|0#A3%A3%m6&(1&7X%L$+A3%k %k %wy+R2@|)#|)#B1#~=#|x@Ts@Py$Xz$Ry$m9&&W#i%%CM#Zz$RA$*c$Wk$Tj$Sj$Ms$Ms$,H$Gs$Js$;u$)H$!H$b8$Ej$Ej$Ej$b8$b8$b8$b8$5($5($kF$kF$kF$kF$/H$/H$)I$)I$)I$-L$AM@AM@'K@'K@]K@,T@Q)@Q)@P)@P)@#a@#a@0G+0G+*>+ny+ny+ny+my+K@@Z.@P,@L@@L@@0$@b&@b&@Kx#5X+`H@9i@9i@9q$h($Bb+I>%em%`'*XM$0H# )*!V%.)*+)*@)*#)*$)*%)**O.F[@Vx&Zw j!$i0$*L%TL%W}&W}&&)*&)*f`%VK&VK&VK&I/&H/&E/&+'*c;**)*=)*gI&-)*KV&;)*>)*,)*')*))*!)*~)*{)*])*^)*/)*()*_)*:)*<)*[)*})*|)*y{@1)*)B@'B@J3@K3@4<@p}+I|@p}+[W [W Zm.UP P:.[W K3@J3@@M.nI z].qy.*a.2)*=T#3)*4)*5)*6)*ub hp y6 =M -M Yw Zw o9+D(@Z #n^#-@#%$#]l$}6$Rs%F[#k>#m>#Wt+)2+u8+Z<#aR.jm@>-#3j%I&#d9%S-$}f &E fB Xx 7)*Lv *E Du Du 'Y$Ux mP%mP%Ux pI@rG cP@eP@lI#Y=*O-%rP$sZ@''+8)*B|+!'@E6@w^@w^@+>+gn$gn$`0$21@.r%@-&z)&z)&IL&A)&.~&{x${x$[!$W>$F4@J2@w&@c1@Oi+l(@gq@/u%/u%/u%wH@lF@t3#A##/V@9)*0)*_++0++a)*yr&WE (d zz$P~#$b@vg#dj#b)*4X%ZC%6`@ n@5F 0> WH%D;@z7%M9#U-$}q%v{$Hz$S4$09$_8$pw$d8$d8$-I$qn%bK%@6$+6$n4&S!$iF$%/$jF$..&h^#c)*d)*e)*f)*g)*h)*i)*j)*k)*l)*m)*n)*o)*p)*q)*r)*kn+qI }p.4Z !).>0.Cm@s)*2y#_$#&0.Mz.Mz.Kz._@+8,+To+To+_@+_@+_@+Kz.Mz.#B..].p5.]}.zf.zf.GE kD 4W /.sd.wY ;u.T%.t)*:g+A6.u)*v)*H%$Lc &F)*G)*H)*I)*N~@..%J)*K)*L)*M)*L'*N)*O)*P)*Q)*R)*S)*}M$wH@-x@1'#bp#LQ@KQ@!v#tO@rM@A+#Ds@/L+!3@C5%48+Z5+F,@:o+]V+rI+^P+^P+^P+rI+4k@ZM@%7@29@v~@v~@5X+:o+5X+29@XH@6*$aP$aP$p'%bP$dc@`H@29@:R+:R+km+l;@%-+(V+:@>:@5}@OS#v~@5X+Ht+gp+cr+6X+Jn+gK@gK@gK@gK@gK@gK@gK@gK@)B+)B+)B+)B+)B+)B+)B+b$@uI+Kl+K,@K,@OK+OK+ N+eh#3N#3P#2N#1N#`M+/P+{P+{P+sI+Gt+/P+ N+7X+<&@#9@fz@6o@;I$>;%Rx#<&@|R+:x@-:#eK@p=$60#e0#vr+=w+sr+)w++x)+@N+T0+.@#5 @5 @5 @) +) +) +hi@hi@hi@hi@hi@j~+Q3#]i@wg@:K@G*$C.+yR.2A.o_ }i gr#./$Kj Jj {o fr#gZ#j%#pa M,*u6 ly$qb J8&Xb&a=*4S&7+*R>*Zd.6W&s<+t% !c.y$$.s.Lh+;~ ;~ 6j+6j+;~ ;~ ;~ 6j+y$$*$@u3$X@$~h&{h&~h&%' >S%~h&>S%~h&{h&0, 0, ~h&%' X@$TO&TO&`E&`E&3]&3]&O4%O4%O4%O4%O4%#u%#u%#u%#u%+d+Lh+'g@;~ y$$y$$y$$6j+;~ ;~ ;~ ;~ 'g@Lh+Lh+Lh+8' 2&$Pw%*Z+*Z+u3$u3$=|$2&$Y@$+d+KE#KE#NZ@NZ@BX@Jb#U/@y$$*$@*$@6j+6j+y$$|m.y$$y$$6j+6j+;~ ;~ 'g@'g@]! ]! ]! ]! ]! ]! ]! ]! ]! 5A.Ea+xc+xc+Ea+5A.]! NM+NM+NM+NM+cI+cI+cI+cI+NM+NM+NM+cI+cI+cI+l7 l7 xc+xc+xc+xc+xc+xc+xc+xc+5A.5A.5A.5A.]! ]! ]! ]! ZW+]%@OU+PS@h]@v]#:{+:{+xc+xc+jy.jy.jy.jy.QL+jy.]$@Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+{! {! Ea+Ea+{! {! Ea+xc+xc+xc+Ea+Ea+5A.5A.5A.5A.]! ]! ]! {! {! be+be+NM+}f.}f.ko.13+cI+cI+@$+ko.ko.NM+NM+NM+NM+", "S& S& S& S& S& S& S& R% R% u& C& S& S& C& C& 8c 0' $% &) &) $% 0' 8c 0' 0' 0' 0' 0' 0' 0' d( ~% O~.O~.O~.~% ~% ~% ~% |% $% 3{ 3{ 3{ 3{ M= )= S_ ;_ ;_ 2b 2b he ke ke he he he 2b 2b ;_ ;_ ;_ 0' &) n3 n3 &_ $% $% &) &_ &) |% 0' 0' |% &) &_ =5 Y_ t% M$ M$ t% Y_ =5 ,' T$ Y_ ed ac =5 Y_ M$ &) &) &_ &_ ~_ n3 n3 &5 ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ 5% f% v% v% 5% f% fL.a, 4% 4% 5% 5% f% v% v% v% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 n3 n3 n3 n3 n3 n3 v% 5!.Jc@b #b #V^$pD&pD&Zl@V^$V^$V^$V^$V^$V^$V^$l#@;H.QB@QB@af.af.g% g% *_ *_ g% g% af.af.QB@QB@4=+af.af.af.af.af.af.af.af.af.af.af.af.af.af.af.af.X_ X_ X_ X_ X_ X_ X_ X_ =_ 0c 0c A^.A^.X_ X_ 7v@v% u% u% u% u% u% u% u% y% y% y% y% y% y% y% f% 4=+QB@g% *_ *_ g% QB@4=+g% g% g% af.af.QB@QB@QB@W_ W_ ed =5 * * j$ U# s# 2x.N)+t] |> E1 T)*U'*U)*-;$g{ e| 5C E*+G-*Ro$m%+V)*W)*W)*X)*Y)*Z)*Z'*Q8%Pm&Pm&E>#'>+<-+4W.4W.+*+|0#A3%A3%m6&(1&7X%L$+98$|0#|0#3)#9Z+})#})#g&@~=#|x@Py$Wz$)U#Xz$m9&&W#i%%i%%Zz$RA$*c$Wk$Tj$,Z#Sj$Ms$,H$Gs$;J$;u$)H$qn%Ej$Ej$Ej$Ej$b8$b8$b8$b8$5($5($kF$kF$kF$kF$/H$/H$)I$)I$.@%.@%qZ@qZ@>p$>p$,T@,T@Q)@Q)@P)@P)@#a@#a@*>+*>+*>+;B+;B+my+my+my+K@@K@@K@@L@@P,@P,@P,@-_#er+cc@te@ng@%3@,.$*_+%_+`)*8H#sQ# !*.!*+!*1!@@!*#!*$!*%!*&!**!*5/+Vx&p!$j!$Nt%7C%TL%=!*=!*-!*W}&pM%8'&8'&9K%yz%X!& y &B%`x =z ;!*Xx 2D&>!*,!*'!*)!*!!*~!*{!*]!*^!*/!*Fp&k)*(!*_!*:!*$*C+#)%}6$, $z(#I:&&#@y&@uG+X>$E4@g9@g9@E4@7)$L2&OI&f}%f}%f}%@-&.~&.r%L2&L2&W>$F4@J2@uG+w&@c1@kk+e}@UH@`8@(~%KF@wH@ZE#J`$8!*.`+9!*0!*a!*]U+T&.1^#YD#Rr )d@8.#bj#dj#b)*NT#Fh@z]&}r@Yr @L@6g@b!*#8@LJ@O4$IQ$iq#c!*J$+c8$5($d8$iF$pw$ ^$J$+#/$/J%d!*/J%>M$bN$bN$g>&m`%9p$e'*e!*f!*g!*h!*i!*j!*k!*l!*m!*n!*o!*p!*%m&a+#q!*J3@qi.[q.4Z !).r!*s!*t!*u!*v!*X!+)).Mz.Kz.8,+To+5w.5w._@+8,+8,+8,+Kz.#B.n~.e;.5..FE `F 5..4W % .sc.@j.>*.dg+O>.w(.21+ot+w!*.y gB J~ Ss$x!*y!*z!*A!*B!*C!*D!*E!*F!*K9&G!*Hr 7%+u!&-V&H!*D^ mC !} `g#po #F~+J!*|Y+K!*L!*&&&M!*N!*=&&*&&O!*P!*Q!*R!*S!*iM%<:$j(@kF@T!*U!*qM@iW#7x#qM@2N+mZ+Y8+Vp+im+Y5+Z5+P3+'P+er+oI+ZM+pI+pI+^P+^P+4k@4k@ZM@%7@29@29@km+km+:R+:R+|T@|T@uQ$tQ$bP$dc@XH@29@v~@F,@'P+mI+kD+%-+(V++x=@Z5+x=@S;@;]@;]@>:@;]@WH@:R+er+gp+Ft+A$+T{@ep+qy+gK@gK@gK@gK@gK@gK@gK@U_@U_@U_@U_@U_@U_@U_@U_@ay+(P+K,@K,@}R+ay+OK+7X+3N#3N#2N#1N#`M+/P+{P+sI+{P+Gt+/P+ N+7X+<&@<&@{k@6o@jb#>;%fz@:&@|R+K,@-:#|G+Pn#p=$]/+_T+R0+@k+1R+ED+mX+P)@s;@|V+:P+5G+-K@S%~h&>S%~h&{h&0, 0, ~h&%' X@$TO&TO&`E&`E&3]&3]&O4%O4%3]&3]&O4%#u%#u%Fc%]1%]1%^b+'g@6j+*$@*$@*$@y$$6j+;~ ;~ ;~ 'g@Lh+Lh+9Y+8' 2&$;~@Pw%*Z+u3$=|$2&$2&$3&$3&$PC#Ae+Ae+KE#cT@KE#oA+|m. VS+V!+]%@OU+v]#:{+u]#d #$(+$(+q9+q9+q9+q9+(w.q9+]$@Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.be+be+5A.5A.be+be+5A.$(+$(+xc+xc+Ea+5A.5A.5A.]! {! {! {! be+be+8g.8g.NM+}f.}f.ko.13+cI+NM+@$+NM+NM+NM+NM+NM+NM+", "S& S& S& S& S& S& S& C& C& C& C& C& C& C& C& |% |% |% |% |% |% |% |% &) $% 0' 8c 8c 0' $% 4% d( O~.O~.r: %% ~% ~% d( 0' 0' != != != != ~= != ri 2b -_ ;_ he ke 2b ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ |% $% &) &_ ~_ ~_ &_ &_ &) ~_ n3 ~_ $% |% $% &_ &5 &5 &5 &5 &5 &5 &5 &5 %% %% %% %% %% %% %% %% ~% 4% v% v% v% v% w4.8H.~_ ~_ ~_ n3 n3 &5 &5 &5 ~_ ~_ ~_ ~_ ~_ ~_ ~_ f% 7% 5!.$9.$9.l#@j}+j}+j}+l#@l#@l#@l#@l#@l#@l#@l#@h% g% g% g% g% g% g% g% g% g% g% g% g% g% g% g% ;H.s3.s3.s3.s3.s3.s3.s3.<4 <4 <4 h% i% i% 6% R_ =_ =_ -_ ;_ ;_ -_ =_ =_ X_ X_ X_ X_ X_ X_ X_ X_ I> l3 l3 l3 l3 l3 l3 l3 ':+-J.w% x% x% w% -J.':+af.af.af.QB@4=+4=+6v@6v@g% g% g% g% g% g% g% g% {_ {_ ac ac 5[ 5[ ,_ E) 3. ^= Y[@Z* 7V+P3$r($T)*@~*lW+YH+|r (,.W/&nb@cK&I-*B*+#~*#~*Y)*lB#T>*Z'*$~*dq$(p%(p%<-+'>+5)#A'#ns$ns$Z}&Z}&nM%nM%{1&HW$Z}&ns$kn$Qy$]v$})#/d$aX#aX#aX#Ts@4Z.Qy$]8$&W#&W#=7$=7$=7$D#$M[#!U#Tj$Tj$%u$Ms$a8$,H$,M$,M$Js$im$cN$^m$cN$a9$a9$Ej$b8$b8$!l$!l$d9$d9$kF$kF$kF$jF$)I$)I$-L$-L$AM@AM@'K@'K@,T@,T@Q)@ZK+P)@P)@#a@#a@3 @3 @3 @3 @f^@;B+;B+;B+t<@O)@O)@0&@0&@0=@0=@TK$2N#YM+7k@5k@+}#$3@Mg+._+C]%'a$U0@%~*&~**-@*~*=~*-~*;~*>~*,~*x2&0T./)#m;%I5@*L%'~* '*QL%QL%)~*FD%4Q%my%iy%vt vt VH%9K%8'& O% O%aK%.y vR@=8@c~ 6T$!~*~~*{~*]~*^~*/~*(~*_~*UP&:~*<~*[~*}~*|~*1~*2~*3~*4~*Ne#A3@I7+'S.i5+O/@93+i,.Pp.`F eZ D_.@ .. .kO CU eZ s(.x6.[b.wV.5~*6~*7~*8~*9~*Lg >E X1@5q Ts$-0@1d$|##CO.#3 Q$+oZ.5O#Rs%d%%j8$/-#(-#LJ@[^#P]+l[+~b#/i@q##J$&>{#aI#BV#hx@Ss%v~$vR@@W@7)*Qv&Lv *E Du Du 'Y$Ux mP%mP%qI@qI@tG s[@T~#L-$9O#JE+7e+h|#Z@+*W+H$*jN+(u+x|#F4@F4@G4@G4@G4@!r&2s%$e&#-&#-&#-&#-&.~&.r%L2&L2&6)$p0$G4@G4@z;$c1@c1@01@+>+|c%5>%R'$(:@T!*J`$[h#+W+o>+e'+CR.NR.mb Rk XD#7C&)G 6u# t#_Q##S#FV#2K%2`@V^#ll Xj$0~*P=&kO@C'#sF%`&&}H$YR# ^$S!$pw$I$+5($d9$im$,H$-u$o4&h!&a~*{J$Tv#|0$>J$#W$9$$b~*c~*d~*e~*f~*g~*h~*i~*j~*k~*l~*m~*p!*rV&n~*q)*o~*o}+u].B>.DE.!-.p~*q~*q~*r~*F{+8,+_@+#B.n~.Lz.#B.8,+Kz.Kz.Kz.Kz.Kz.Mz.Mz.S,.z].4W >}.4W gZ /@.vY tc.]d.m[.o[.L7+yY je.s~*t~*:A Cg&QF&{t&u~*v~*w~*x~*y~*z~*A~*B~*C~*D~*E~*F~*P% G# T* G~*AB H~*I~*lT.a>&jR.c9 U#@(~.S&. ^+&-#B>%J~*K~*L~*B[+y+@lW%M~*N~*O~*P~*Q~*R~*Q!*S~*T~*0m%<:$wH@{z@e9#ZE#3V@>h#.`$(L+y6+lP+^a+}h+Ti+nk+!G+fp+!G+!G+!G+!G+:o+:o+[R+[R+%7@%7@`H@`H@`H@%7@'P+km+5X+[R+`H@XH@uQ$19@uQ$6*$`H@29@,:@S;@T;@mI+Ln+jV+kR+%-+Ln+-'@l;@&-+:T+:T+:T+;'@$!@u~@u~@/V+Z5+nk+Z5+T;@S;@S;@,:@,:@%7@:R+'P+!G+cr++w+0y+T{@qy+)B+:V+)B+]G+jD+jD+SA+|G+:V+U_@gK@]G+gK@U_@)B+OK+OK+OK+OK+tI+tI+tI+tI+`M+`M+7h$]P+]P+{P+qI+qI+sI+Gt+/P+7X+eh#<&@<&@tr+g~+|=@>;%Rx#:&@FD+(P+VH@|G+`+#sD+]/+ur+.B+-w+sr+}=@#a@R,@Q)@T@hX@'T@:f+; +U,@U,@X.+X.+5 @FM@9V@cp+9V@C,+Xv+k9@ti+h|+U~*m>&9-#C.+yR.3=.!8 &@.Q-@O@$O@$XQ@hr#!m h!$Bc O*#Ac W!*V~*Y'@x4&g6&oQ&pQ&-x W~*a)@X~*Y~*Y@$-~@'W+/D.O9.{y%3&$Y@$+d+^b++d+3&$'W+3&$Y@$>S%%' X@$X@$X@$>S%{h&0, {h&~h&>S%%' %' %' %' >S%`E&`E&O4%#u%#u%#u%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%+d++d++d++d++d++d++d++d+Y@$Y@$Y@$Y@$Y@$Y@$Y@$u3$=|$*Z+ME+*Z+Eo+w*$Eo+2&$+d+Y@$_c$xe#Z~*xe#@y#_c$KE#+d++d++d++d++d++d++d+3&$3&$3&$3&$3&$3&$3&$6j+$(+$(+xc+xc+Ea+5A.5A.]! ]! 5A.xc+$(+$(+xc+5A.]! cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@q(#q)@PS@OU+h]@v]#u]#d #5A.5A.6g+6g+6g+6g+Fu#6g+q9+$(+$(+$(+$(+$(+$(+$(+]! xc+$(+5A.Ea+$(+5A.gA be+{! 5A.Ea+Ea+5A.{! be+xc+5A.xc+7P.oh.T_+$(+Kh+NM+13+@$+13+NM+NM+ko.@$+13+ko.cI+l7 l7 cI+", "S& S& S& S& S& S& S& C& C& C& C& C& C& C& C& |% |% |% |% |% |% |% |% &) $% 0' 8c 8c 0' $% 4% d( O~.O~.r: %% ~% ~% d( |% |% )= )= )= )= V_ )= oj ;_ -_ -_ 2b he 2b -_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ $% $% &) &_ &_ &) $% $% &) ~_ n3 ~_ $% |% $% &_ n3 n3 n3 n3 n3 n3 n3 n3 5% 5% 5% 5% 5% 5% 5% 5% %% 5% v% v% f% f% I> w4.&_ &_ &_ ~_ ~_ n3 n3 n3 ~_ ~_ ~_ ~_ ~_ ~_ ~_ f% 7% $9.j% $9.x% j}+w% j}+x% l#@x% l#@x% l#@x% x% g% g% g% g% g% g% g% g% g% g% g% g% g% g% g% g% h% <4 <4 <4 s3.s3.;H.;H.;H.;H.;H.s3.s3.<4 <4 <4 g% 0c =_ -_ -_ =_ 0c 0c X_ X_ X_ X_ X_ X_ X_ QB@l3 l3 l3 l3 l3 l3 l3 l3 l3 l3 w% w% w% w% l3 l3 g% g% af.af.QB@QB@4=+4=+g% g% g% g% g% g% g% g% W_ W_ ed ed fd fd q$ &' s# Y@ ee@t] R@$DE#2/$`~*-| 4'$kQ#|r (,.W/&nb@cK&m%+V)*X'*#~*Y)*Z)*T>*Z'*C>#(p%(p%G>#<-+<-+4W.4W.N@%N@%A3%A3%m6&m6&~1&5v$A3%ns$kn$]8$]v$})#/d$aX#`P$`P$Ts@Ts@Qy$Qy$&W#&W#Vk$Vk$=7$=7$M[#K[#!U#,Z#%u$>b$Ms$,H$,M$,M$Js$%K$^m$^m$cN$a9$a9$Ej$b8$b8$!l$!l$d9$d9$kF$kF$kF$kF$)I$)I$)I$-L$AM@AM@'K@'K@!K@,T@Q)@ZK+P)@P)@#a@zD+>T@>T@>T@3 @3 @3 @3 @*>+>B+O)@4 @ny+ny+0&@0=@=9@eh#`M+:G+_G+WF#GZ@ei+._+;-+H2@&b$ {*.{*3!@+{*@{*#{*${*%{*wb.u1%0:&lT.YG@&W@Eu 5C%SL%{$&]$&-!*5C%]V%LL%my%iy%iy%my%LL%ho&GD%4Q%4Q%GD%Y;${*,{*BZ&'{*){*!{*~{*UT {{*/u&[B#]{*Si&OX@u3@i5+>Z+.D.!` fZ ^@.SX 9..]X O%.tY +[.]-.l&.~{.3[#*a.^{*/{*({*_{*DX%:{*Je V=*<{*,u$J5@wr$z<@^T.y-$6z%HG.{>+uD$~f#!~#MJ@[w$GK$,{#i>#.B%Y)+O]+P]+.x@h$+KK%B.+>-#_)#TB$#I$9~ /0@C1&9E%Lv *E Cu Du 'Y$Ux mP%mP%Ux Ux tG s[@T~#*W@$W>$F4@G4@z;$z;$z;$^7@Oc$`g$P)$s{%(:@T!*wm#t+# `+|{*1{*3#+JW.CL.=[ S} )G v{ c1#6q#c3&Az#DV#YC%Tx uG o[#y!%2x%)A#J$&-z@$ +2{*#W$ ^$S!$pw$d8$d8$5($c9$im$9v$3{*4{*5{*6{*($&I$+..&S!$s{$0*+L|+7{*8{*9{*0{*a{*b{*c{*d{*e{*f{*g{*h{*%m&i{*Lp&j{*,_.u].C>.b;.k{*l{*m{*n{*o{*E{+5w.To+Mz..].n~.UB.Mz.~C.r5.r5.qy.qy.f;.@1./-.+1.jZ @[.dZ h=.g=.#j.Ok.p9.m[.o[.^f.tK+n^+U%+p{*q{*r{*s{*^u&t{*u{*v{*w{*x{*y{*z{*ny bn&A{*B{*J'#H}@c$ , C{*P9#D{*]7+8P#pH Bx#N;#^r$Uh U@=C+/<%E{*F{*S2@G{*H{*I{*[@%&G%J{*V%%K{*L{*M{*N{*O{*O{*n.&}M$j(@Fs@Tu@5B@6B@(E%T!*YE#lP+W8+bB+kP+lw+br+Jn+fp+fp+fp+!G+!G+:o+:o+[R+[R+%7@%7@`H@`H@`H@%7@'P+lm+:o+[R+%7@XH@uQ$19@19@XH@`H@29@F,@,P+mI+lm+SA+H,+%-+kD+-'@{G+$w+(V+hp+hp+hp+:T+t~@$!@$!@;'@T;@P3+T;@,P+G,@F,@WH@WH@%7@5X+km+!G+cr++w+0y+T{@P0+:V+|G+)B+]G+jD+jD+SA+)B+U_@gK@]G+]G+gK@)B+:V+OK+OK+OK+OK+tI+tI+tI+tI+1N#1N#7h$7h$]P+]P+qI+qI+{P+Gt+/P+ N+7X+<&@#9@fz@Rt+|=@>;%Rx#<&@|R+K,@o;@|G+`+#v=@]/+eK@VH@.B+sr+}=@K)@R,@Q)@T@3]+rd+:f+; +; +; +X.+5 @4]+9V@9V@9V@C,+Xv+l9@ti+h|+/O$P{*8-#C.+D[@C%.!8 I..Q-@O@$./$%p Sk gr#V!*Dc j%#7)@8)@V~*Y'@x4&g6&;1 pQ&b~%a=*O~&X~*Q{*3&$-~@'W+/D.O9.'W+^b+3&$+d+^b++d+'W+{y%'W+Y@$>S%%' X@$X@$X@$>S%~h&0, ~h&>S%%' X@$X@$X@$X@$%' TO&`E&3]&O4%O4%O4%O4%3]&O4%O4%O4%O4%O4%O4%O4%O4%+d++d++d++d++d++d++d++d+'W+'W+'W+'W+{y%{y%{y%%' =|$ME+X`+ME+2&$Eo+2&$u3$+d+Y@$PC#_c$fd%_c$uV@Ae+KE#+d++d++d++d++d++d++d+3&$3&$3&$3&$3&$3&$3&$3&$6j+Ea+Ea+Ea+Ea+xc+xc+xc+]! 5A.xc+$(+$(+xc+5A.]! cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@q)@PS@OU+OU+M8@v]#:{+u]#Ea+Ea+]$@]$@]$@]$@^x#]$@]$@Ea+Ea+Ea+Ea+Ea+Ea+Ea+]! xc+xc+]! ]! Ea+5A.w8.be+{! 5A.Ea+Ea+5A.{! be+$(+5A.Ea+Kh+G|@Ea+]! xc+cI+ko.13+13+NM+cI+NM+13+ko.NM+cI+l7 l7 cI+", "S& S& S& S& S& S& S& [! [! [! [! [! [! [! [! |% |% |% |% |% |% |% |% $% |% |% 0' 0' |% |% %% d( O~.O~.r: %% ~% ~% d( $% $% d= d= d= d= M= d= >_ -_ 0c =_ ;_ 2b ;_ =_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ =_ =_ =_ =_ =_ =_ =_ =_ ;_ -_ -_ =_ =_ -_ ;_ 2b &) ~_ n3 ~_ $% |% $% &_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ f% f% f% f% f% f% f% f% 5% v% I> v% 5% 5% f% I> &_ &_ &_ ~_ ~_ n3 n3 n3 ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ 5% j% 5% x% f% x% v% w% I> l3 I> l3 I> l3 I> I> g% g% g% g% g% g% g% g% g% g% g% g% g% g% g% g% i% Hu+PI.PI.#9.#9.cp.cp.w7+w7+w7+|5+|5+|5+[3+;H.QB@A^.0c 0c 0c 0c A^.X_ X_ X_ X_ X_ X_ X_ X_ QB@s3.cp.cp.cp.cp.cp.cp.cp.PI.PI.#9.#9.#9.#9.PI.h% g% g% g% g% af.af.af.af.QB@QB@QB@QB@QB@QB@QB@QB@&5 &5 =5 =5 * * a# L$ U# r+ CN.is.R{*S{*M/ MY&:m@H[ ZH+3V (,.W/& J&re$T{*U{*W)*X'*Y)*Z)*d=*aq@V{*G>#G>#G>#<-+BM#D)+D)+|0#|0#98$98$(1&(1&Z'%99$98$N@%~m$]8$R2@})#/d$aX#`P$`P$Py$Ts@Ry$Ry$m9&m9&bE$bE$8o@1S#D#$K[#1r$1r$ln$>b$Ms$nw$'H$'H$,H$%K$^m$Cj$^m$Dj$Dj$_a$Ej$Ej$b8$b8$b8$c9$d9$5($5($5($lF$lF$lF$)I$zM@zM@AM@AM@>K@!K@2T+Q,+ZK+ZK+zD+zD+>T@{-+{-+>T@>T@>T@>T@3 @9G+0G+*>+;B+;B+ny+4 @0&@Aq@ N+}G+^G+u&@.}#>k+&k+Q3+x6@M_@W{*_C%X{*Y{*Z{*`{* ]*.]*+]*Fe#@]*dA Rp yz#(|@b|$TH%$B%6C%#]*pM%q_$1D&=c =c aq aq .,*q_$0K%ML%;)&$]*;)&0K%`I$-P |E%+A@*a&/Q#%]*&]**]*=]*-]*;]*>]*,]*']*:S )]*!]*~]*vH#{]*]@./1#$_@$ @=*.FA h=.FA Y..]>.#{.c3.pl+E_.@1.j5.]]*^]*/]*(]*_]*:]*<]*[]*>E 1u #p@-M tK d9%fq$},$FC.}]*|]*6I.U)@|(%Wt+rX+N4$Q_#P'$3K#2K#|K#}K#!=#k$+.x@,t@'t@C.+OP.Gh++{#kh$6E$H)$V.$+z u1$*E Cu Cu 'Y$'Y$mP%mP%Nw 'Y$-! cP@T~#*W@$i_&nm&nm&z]*A]*B]*a]+C]*D]*E]*F]*w+@G]*09#xZ#gZ%H]*I]*J]*K]*x %T]#gq@j(@j(@L^@jF@[]@]:@s3#W8+nf+qf+x^@_u+Hy+T{@6X+6X+6X+!P+!P+~G+~G+er+[R+%7@%7@`H@`H@`H@%7@'P+lm+:o+[R+%7@29@|T@OS#MU#|T@`H@29@:R+'P+!G+gp+gK@SA+jD+SA+{G+q;@{G+Ln+(G+(G+ip+It+It+hp+[1@hp+,P+'P+F,@F,@v~@v~@XH@29@ZM@5X+km+!G+Ft+(T+WA+T{@b$@:V+|G+U_@SA+jV+H,+jD+]G+]G+SA+]G+]G+U_@)B+:V+ N+ N+(t#(t#(t#(t#`M+`M+Wv#Wv#Wv#7h$YM+YM+NK+NK+]P+/P+Gt+OK+ N+#9@b3%$n%ED+|=@Rx#Rx##9@:&@:x@-:#}G+v=@v=@]/+p;@VH@#k+1R+}=@K)@R,@Q)@S%%' %' X@$%' >S%~h&{h&>S%%' X@$x*$x*$x*$x*$X@$#d+TO&`E&3]&O4%O4%3]&3]&O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%#u%O4%O4%3]&3]&`E&`E&+y&u3$X`+Nc&X`+=|$2&$=|$x*$Y@$Y@$PC#PC#PC#Ae+cT@NZ@i|$Fc%Fc%Fc%Fc%Fc%Fc%Fc%O4%O4%O4%O4%O4%O4%O4%3&$'g@]! 5A.Ea+xc+$(+$(+T_+]! 5A.xc+$(+$(+xc+5A.]! ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@OU+OU+]%@]%@M8@h]@v]#:{+Ea+Ea+]$@]$@]$@]$@^x#]$@)> ]! ]! ]! ]! ]! ]! ]! ]! xc+Ea+8g.8g.]! 5A.be+{! ]! 5A.5A.5A.5A.]! {! $(+]! 5A.$(+xc+be+w8.{! l7 NM+ko.NM+l7 l7 cI+ko.NM+cI+l7 l7 l7 l7 ", "S& S& S& S& S& S& S& [! [! [! [! [! [! [! [! |% |% |% |% |% |% |% |% |% |% |% |% |% |% |% ~% d( O~.O~.r: %% ~% ~% d( &) &) 3{ 3{ 3{ 3{ M=.3{ T_ =_ 0c 0c -_ ;_ -_ 0c ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ =_ =_ =_ =_ =_ =_ =_ =_ 2b ;_ =_ 0c 0c 0c 0c 0c &) ~_ n3 ~_ $% |% $% &_ &_ &_ &_ &_ &_ &_ &_ &_ 5% 5% 5% 5% 5% 5% 5% 5% f% I> fL.v% 5% %% 4% f% ~_ n3 n3 n3 &5 &5 W_ W_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ &_ 5% ~_ f% ~_ f% ~_ f% &5 I> &5 I> &5 I> &5 I> af.af.af.af.af.af.af.af.g% g% g% g% g% g% g% h% h% PI.PI.PI.PI.Hu+Hu+Hu+w7+w7+w7+|5+|5+|5+|5+5v@4=+X_ X_ A^.A^.X_ X_ 7v@X_ X_ X_ X_ X_ X_ X_ QB@s3.cp.cp.cp.cp.cp.cp.cp.8v.Hu+#9.cp.cp.#9.Hu+8v.*_ *_ *_ g% g% g% g% g% QB@QB@QB@QB@QB@QB@QB@QB@n3 n3 o3 o3 .* .* j$ U# U# m. CN.r] N]*P3$T)*O]*@c$m)$ZH+3V S;.W/& J&re$QL.TD.eP$X'*Y)*Z)*c=*aq@Q8%E>#E>#G>#BM#BM#W_#W_#B%%+*+{l$98$(1&^ +7X%|7${l$k %ns$4w+R2@})#/d$aX#.*$.*$Py$Py$Ry$Ry$bw$m9&dD$dD$bE$8o@D#$4[%m~+1r$ln$ar$>b$nw$'H$'H$,H$Rj$^m$Cj$^m$Dj$Dj$_a$Ej$Ej$b9$b9$b8$b8$d9$d9$5($5($d9$d9$lF$lF$9e#zM@zM@zM@>K@>K@T,@Q,+Q,+Q,+zD+6=@{-+{-+{-+{-+x)+x)+x)+x)+3 @3 @;B+Y.@Y.@;B+ny+ny+fz@:&@fy+}T+`+#oD+gi+Sl+o0+t)+hD+XE#ko%P]*DQ%Q]*R]*S]*T]*U]*{1$v<&+T#V]*3C WA q<$gB %B%GJ%2C%G'$q_$1D&1D&1D&X;*X;*.,*q_$ML%;)&$]*W]*X]*x]&1N%NL%q)$W7@4|@Lz ,T%yJ&Y]*Z]*`]* ^*.^*+^*@^*#^*$^*1y.z .U..63#Mc@)` !s.=C :a.[a.]:+p=+p=+]:+@R+F .,$+}(+%^*&^**^*=^*-^*;^*>^*l<$,^*f[@.' `r =P nI@#y >1+9d%z-$]Q.tE%'^*C>+p~+Gz$Gz$5w+p>#3d$Q_#73@73@rz#<)#j$+#h+im@.x@,t@-q%v@+tK@H!$A/% N$n!$H)$$W@u1$=E Cu Cu Nw 'Y$no%no%o($Nw -E cP@T~#*W@#~{ ]C@kI@C@$%p@7`@7G@:e 36$($%m4#TF##o+ZO@yI$$6$m`%k`% ^$5($c9$[{#N1#c9$%K$j3&zQ&^^*/^*(^*_^*3=&Rb$27$Q.$:^*n %LL+<^*[^*}^*|^*1^*2^*3^*4^*5^*6^*7^*8^*9^*0^*Tp&&E@`F KB.l+.S,.~2.G{+i&#a^*g=+i;+q/.FE._6.FE.FE.q/.q/.@G._6.FE.q/.r/.x6.22.sV (-.@j.Th.Th.~_.Th.n(+e,.J}.~t.o[.^f.1[#(C b^*6v.#*.c^*d^*8o&8o&Mq.e^*P{.oY &3+f^*|8.t]@L>@g^*h^*tt&i^*j^*9O#|i *tz%T]#gq@k(@K^@h}@::@L^@.K@n(@nf+qf+x^@k'@T1+%q+0y+0y+0y+A$+A$+cr+gp+gp+er+er+%7@%7@`H@`H@`H@%7@km+lm+:o+:o+5X+29@|T@|T@MU#|T@%7@[R+:o+!G+~G+~P+U_@gK@gK@gK@/G+/G+/G+q;@_V+_V+-]@-]@ip+ip+fr+It+:R+km+5X+5X+%7@%7@`H@cc@cc@29@:R+er+Ft+(T++w+6X+:V+:V+:V+gK@H,+$-+jV+H,+H,+jD+jD+]G+gK@)B+:V+|G+ N+ N+(t#(t#(t#(t#`M+`M+_t#_t#Wv#Wv#YM+YM+YM+NK+7h$/P+Gt+}R+ N+#9@z^*A^*|=@|=@fz@fz@#9@<&@Aq@Y+$jc@pD+pD+Pn#p;@o;@#k+up+L)@6o@Q,@R,@lX+x)+8G+R)@lX+9G+f^@>2+rd+:f+:f+.@#U,@; +5 @4]+4]+FM@FM@FM@[8+fi@TF@LD@~5@8-##$#y[@(T.F%@I..!m ./$r[ q4&$[ =)#:]#j%#pa W!*X!*ly$qb x4&Y7&pQ&7+*R>*oQ&B^*C^*<8.TO&M]*O4%@g%%P%#u%R`%`E&O4%#u%O4%TO&#d+TO&3]&%' %' %' %' >S%>S%~h&~h&%' %' x*$u3$u3$u3$x*$x*$#d+TO&`E&3]&3]&3]&3]&`E&O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%@g%@g%]1%]1%Fc%#u%O4%@d+u3$X`+Nc&X`+u3$=|$x*$X@$'W+'W+_c$PC#Ae+Ae+cT@NZ@z<$#u%#u%#u%#u%#u%#u%#u%O4%O4%O4%O4%O4%O4%O4%3&$;~ 5A.5A.Ea+xc+xc+xc+$(+]! 5A.xc+$(+$(+xc+5A.]! ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@]%@]%@]%@]%@M8@M8@h]@h]@]! ]! )> )> )> )> .d+)> i~ be+be+be+be+be+be+be+{! xc+Ea+w8.gA {! Ea+]! ]! 5A.5A.5A.5A.5A.5A.]! 5A.be+be+5A.]! w8.w8.{! }f.cI+NM+NM+l7 }f.l7 NM+cI+cI+l7 l7 l7 l7 ", "S& S& S& S& S& S& S& [! [! [! [! [! [! [! [! |% |% |% |% |% |% |% |% |% |% |% |% |% |% |% ~% d( O~.O~.r: %% ~% ~% d( &_ &_ 2{ 2{ 2{ 2{ ,;.2{ T_ =_ 0c 0c -_ ;_ -_ 0c ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ =_ =_ =_ =_ =_ =_ =_ =_ he 2b =_ A^.X_ 7v@ l. l.&) ~_ n3 ~_ $% |% $% &_ &) &) &) &) &) &) &) &) 4% 4% 4% 4% 4% 4% 4% 4% f% I> I> v% 4% %% %% 5% &5 &5 &5 W_ W_ {_ {_ {_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ 5! ~_ 5! ~_ 2{ &_ G{ &5 G{ &5 G{ &5 G{ &5 af.af.af.af.af.af.af.af.g% g% g% g% g% g% g% h% ;H.cp.#9.PI.Hu+8v.VW.VW.cp.cp.[3+[3+[3+[3+[3+;H.6v@7v@X_ X_ X_ X_ 7v@ l.X_ X_ X_ X_ X_ X_ X_ QB@s3.cp.cp.cp.cp.cp.cp.cp.8v.Hu+#9.cp.cp.#9.Hu+8v.g% g% g% g% g% *_ *_ *_ QB@QB@QB@QB@QB@QB@QB@QB@n3 n3 o3 o3 .* .* j$ U# U# E& #V+f|%Qt yG#M/ `~*@c$H[ ZH+f{ S;.a[%aN&cK&QL.wQ$eP$W)*Y'*Z)*d=*aq@Q8%E>#E>#G>#BM#BM#W_#W_#n~+B%%{l$98$(1&^ +[7&gZ.Z+$|0#N@%4w+R2@})#/d$aX#`P$`P$Py$Ts@Ry$Qy$m9&m9&dD$K^$bE$8o@=7$D#$K[#!U#ln$ar$>b$=c$=J$=J$,H$Rj$^m$Cj$Cj$-c$Dj$_a$_a$_a$a9$a9$b9$b8$b8$c9$d9$d9$!l$b8$!l$!l$!k#8e#8e#8e#5$@5$@7=@:P+:P+:P+6=@2G+@N+TK+TK+AI+zI+=>+=>+:P+>T@>T@f^@~-+~-+f^@*>+*>+K)@}=@sr+@k+e0#p=${/+-2+e~+s~@%s+_h$z$@D^*E^*F^*G^*H^*I^*J^*g4$K^*Gb#cZ&p{ a~ Eu ^G%GJ%4Q%~J%],$.,*X;*X;*L^*q_$.,*.,*.,*}:&}:&}:&}:&f`%g`%pM%H-&M^*zz&4h *E ^M O**N^*O^*P^*Q^*B=#R^*S^*T^*Yq@/g+i9.L}.-3+y0.wc.[q@U^*q=+Ee+_J.CK.C0@x@.w.@$$+0#.vX#V^*W^*X^*Y^*Z^*`^* /*./*+/*v6 Dz%$5$wb F&#@/*)q$q%$kA%A(@G4&#/*{{+vw%L{$0T+rV$iA%T_#63@g$+P8@<-#r9@=T._X@G*$ZN%q##qK@++@9x$h(%':%$R$nx$m!$x~$|f =E Jv Cu Nw Nw no%no%o($Nw -E cP@l$#L-$9O#Th YG@Pp ,v$L]$$/*%/*&/*oo$*/*=/*jp%-/*;/*;/*>/*go%L2&|1@*3@Ab$)x$uk$0j$Nc$0j$0j$0j$0j$y6@y6@y6@,i$Na$yb$.9@g}@v6+lV+'!@vZ+,/*'/*YF%L$&pH @9 Px@g1#]C@%~ H5@YA 1r@7`@cB tG +x+V4+)/*{!%|)#$>#x'$y'#|W&7|% ^$J$+_8$,p$N1#2h$Ej$%K$j3&k!&i!&/^*(^*/^*!/*#/$0~#8)*~/*{/*S/+^g&]/*^/*//*p-*(/*_/*AR&:/*4.}a.}a.K'+K'+2:.n[.xd.tD 4/*5/*u!+#=./G&K0.6/*7/*8/*-S.9/*Lq.OE (C (C l_#0/*p~#~.@Wq@a/*b/*c/*/} [,$d/*[,$G~ 8~ `I$e/*O=&4h NL%w]&|N%OL%f/*g/*h/*i/*>D&GR.j/*k/*l/*m/*n/*o/*p/*76%q/*>7%L`$y %]}$gq@k(@9x@ig@Pi+-v@mM@9{$ho@4m@k'@aB+~-@y^@4X+4X+4X+0y+A$+A$+cr+gp+er+er+%7@%7@`H@`H@dc@%7@:o+fp+lm+km+:R+v~@XH@XH@OS#XH@ZM@]V+er+~G+gp++~-+>2+I:+c~@c~@c~@U,@U,@U,@5 @5 @4]+4]+FM@[8+ti+TF@_-@~5@8-##$#%<@y-.o_ I..!m Kj r[ q4&$[ /*@Bc j%#D-*8)@r/*Y!*J< x4&Y7&CT&a=*a=*Xe@s/*S>*J@ /p.M]*#u%@g%&0+#u%g~#`E&O4%#u%O4%TO&#d+TO&3]&X@$%' %' >S%>S%~h&~h&~h&%' %' x*$u3$u3$u3$x*$x*$#d+TO&`E&3]&O4%O4%3]&3]&O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%@g%@g%]1%]1%Fc%Fc%#u%z$$=|$ME+Nc&X`+u3$u3$x*$%' B#@B#@fd%_c$PC#PC#uV@PC#z<$#u%#u%#u%#u%#u%#u%#u%O4%O4%O4%O4%O4%O4%O4%3&$*$@xc+xc+xc+Ea+5A.5A.5A.]! 5A.xc+$(+$(+xc+5A.]! ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.h]@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@V!+]%@]%@OU+M8@h]@h]@h]@{! {! Yt.Yt.Yt.Yt.a(+Yt.i~ be+be+be+be+be+be+be+be+xc+xc+8g.gA {! Ea+xc+Ea+5A.5A.5A.5A.5A.5A.Ea+{! gA gA {! ]! 8g.be+Ea+}f.cI+NM+NM+l7 }f.l7 NM+cI+cI+cI+cI+cI+cI+", "S& S& S& S& S& S& S& [! [! [! [! [! [! [! [! |% |% |% |% |% |% |% |% 0' |% |% $% $% |% |% d( d( O~.O~.r: %% ~% ~% d( &) &) 3{ 3{ 3{ 3{ M=.3{ >_ -_ 0c =_ ;_ 2b ;_ =_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ =_ =_ =_ =_ =_ =_ =_ =_ he 2b -_ A^.X_ 7v@ l. l.&) ~_ n3 ~_ $% |% $% &_ &_ &_ &_ &_ &_ &_ &_ &_ %% %% %% %% %% %% %% %% 5% v% I> f% 4% ~% %% 5% &5 &5 &5 W_ W_ {_ {_ {_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ 4{ 4{ +..5! +..2{ ,;.2{ 14 G{ 14 G{ 14 G{ 14 G{ X_ QB@QB@QB@QB@QB@QB@QB@g% g% g% g% g% g% g% h% 5v@[3+cp.#9.PI.Hu+8v.VW.PI.#9.#9.#9.cp.cp.cp.s3.4=+7v@X_ A^.A^.X_ 7v@7v@X_ X_ X_ X_ X_ X_ X_ QB@s3.cp.cp.cp.cp.cp.cp.cp.PI.PI.#9.#9.#9.#9.PI.PI.af.af.af.af.g% g% g% g% QB@QB@QB@QB@QB@QB@QB@QB@&5 &5 =5 =5 * * a# L$ E) /= ee@f|%v*$>m M/ 3O+-| 4'$ZH+f{ Px Jc%t/*H-*QL.TD.eP$W)*Y'*lB#T>*Z'*V{*G>#G>#G>#<-+BM#D)+D)+n~+B%%98$A3%m6&(1&[7&gZ.z1#+*+N@%wy+R2@})#/d$`P$aX#aX#Ts@4Z.Qy$]8$&W#~m$bE$l7#bE$8o@Vk$=7$L[#L[#ln$ar$>b$=c$=J$=J$,H$Rj$^m$Cj$Cj$-c$Dj$_a$_a$_a$cN$a9$b9$b9$b8$b8$d9$d9$b8$b8$b8$b8$!k#!k#!k#8e#gX+gX+7=@3G+3G+:P+2G+6~@#N+TK+TK+AI+=>+:P+:P+T,@x)+x)+3 @f^@f^@3 @0G+0G+ky+mX+S.@vD+%N+XN#RO@{/+N0+;2+In+L_@W}$fF@1+@u/*v/*w/*x/*y/*=N.6[%z/*A/*R &{Y@/|@6G@=E 4Q%1N%0K%aq aq X;*L^*q_$.,*ly%4Q%}:&f`%g`%5C%6C%6C%7C%2C%B/*C/*`I$+y Iv Yk@k[#+z&D/*E/*F/*G/*H/*I/*~O&J/*K/*qk@~6.rF.&=+3W+L/*7&+m;+b,+w.OF I .M/*iv&N/*O/*P/*Q/*R/*S/*T/*D> :x%'J Lc 1C W7@yd$o1#i3&XH$Yx#,V.U/*s +O-+ZX.1/%QB$T)@3_+9G#j #V/*)=#j #Ku@W/*(X@G*$i$+i$+>N.)t@jn$lT$ F%fO$s)$k!$G'$i0$Jv Jv Nw Nw Nv no%'Y$'Y$-E es fP@BR@A=$Mf Qe 4O.x1&w{$$/*X/*&/*Y/*Z/*`/*=/*jp%jp% (*.(*+(*L2&|1@|1@*3@Ab$Ab$J,+J,+Oc$Oc$Oc$0j$y6@]8%]8%5>%3(@z6@*'$'f&!k@oB+p/+@(*#(*t>+$(**i&oH S:@Qx@kf&lI@l] I~ =p@X~#D@$5G@.~ -z$,9%%(*SK$B%%X_@}_+u_% ^$%6$J$+qw$qw$@d$ni$ni$Dj$Rj$7G$i!&_^*&(**(*=(*7S&k^#Y)%8M& [%iN$-(*88%;(*>(*,(*'(*)(*!(*~(*{(*](*^(*/(*((*_(*0Q#Wl@_H 2E.iI }%.{7.|:.x6.sV 32.F1.U%.U%.py.W%.r$.r$.,$+W%.`T E .py.F1.U%.G!.i;.>4.dg+kA.1a.3:.G}.8r.`b.ud.G].>c.|1+K0.7,.$5.uL =G %i&V<.:(*<(*[(*+:+}(*l% |(*1(*um@qr&Xp&2(*Tk#TH ;E +y ]x%+y 0q hy%X;*3(*aq aq PF&4(*L^*^*$^x%xv&5(*6(*h/*()#Pe@aN.7(*8(*9(*0(*a(*Me%b(*(5%*d%l>$uM@l(@l(@}o@mk+Pi+ez@ez@vG+6i@9y+9>@K&+y^@+5@y@@y@@y@@y@@WA++w+Ft+Ft+er+er+%7@%7@`H@`H@dc@%7@er+fp+lm+mI+F,@:R+29@`H@XH@ZM@rI+oI+er+~G+cr+~P+P0+_T+|G+:V+)B+U_@[T+}G+69@69@_V+_V+-]@-]@-]@ip+5X+5X+%7@%7@cc@cc@YH@w)%w)%`H@29@[R+ZM+nI+~P+A$+U_@U_@gK@jD+jV+$-+jD+]G+H,+jD+]G+)B+:V+|G+|G+eK@uy#uy#uy#uy#1N#1N#1N#1N#7h$7h$YM+NK+NK+qI+jg@qI+YM+/P+Gt+}R+OK+:&@#9@fz@|=@ED+wI+wI+:&@#9@Aq@-:#rX@On#5=@4=@[a@-:#-:#;w+<&@6o@qt$R,@>B+9G+8G+R)@*>+;B+>2+I:+__+G$+_/+_/+; +U,@U,@U,@X.+5 @4]+FM@[7@ti+h|+U~*m>&9-#C.+yR.C%.!8 &@.Gj Kj r[ q4&$[ /*@~(#Dc Cc u6 L: Y!*J< ma Y7&4S&W~*a=*c(*B^*wc+5c d(*M]*]1%@g%S}%3]&R`%3]&#u%Fc%O4%`E&TO&`E&3]&X@$X@$%' ~h&~h&~h&>S%>S%>S%%' X@$x*$x*$x*$x*$X@$`E&`E&O4%#u%#u%#u%#u%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%z$$2&$*Z+X`+ME+u3$=|$x*$%' B#@B#@fd%_c$PC#_c$;>#fd%d7$O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%3&$|m.$(+$(+xc+Ea+5A.]! ]! ]! 5A.xc+$(+$(+xc+5A.]! ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.ko.-V@h]@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@V!+]%@OU+PS@v]#v]#h]@h]@{! {! Yt.Yt.Yt.Yt.a(+Yt.)> ]! ]! ]! ]! ]! ]! ]! 8g.xc+T_+]! 8g.]! xc+$(+xc+Ea+5A.5A.5A.5A.Ea+xc+]! w8.w8.{! ]! be+]! $(+l7 NM+ko.NM+l7 l7 cI+ko.cI+NM+ko.ko.ko.ko.", "S& S& S& S& S& S& S& C& C& C& C& C& C& C& C& |% |% |% |% |% |% |% |% 8c 0' $% &) &) $% 0' +h.d( O~.O~.r: %% ~% ~% d( &) &) 3{ 3{ 3{ 3{ M=.3{ oj ;_ -_ -_ 2b he 2b -_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ =_ =_ =_ =_ =_ =_ =_ =_ 2b ;_ -_ =_ =_ =_ =_ -_ &) ~_ n3 ~_ $% |% $% &_ &_ &_ &_ &_ &_ &_ &_ &_ 4% 4% 4% 4% 4% 4% 4% 4% 4% f% v% f% 4% %% 4% 5% ~_ ~_ ~_ n3 n3 n3 &5 &5 ~_ ~_ ~_ ~_ ~_ ~_ ~_ 5! p3 p3 j@.+..m++,;.m++M=.n+++..n+++..n+++..n+++..X_ QB@QB@QB@QB@QB@QB@QB@g% g% g% g% g% g% g% h% <4 #9.#9.#9.cp.cp.cp.cp.PI.PI.#9.#9.cp.cp.[3+;H.QB@X_ A^.A^.A^.A^.X_ X_ X_ X_ X_ X_ X_ X_ X_ QB@s3.cp.cp.cp.cp.cp.cp.cp.cp.cp.#9.#9.#9.#9.cp.cp.4=+4=+QB@QB@af.af.g% g% g% g% g% g% g% g% g% g% W_ W_ ed ed fd fd q$ &' sM ^= o! %^ Qt KI#T'*v> @~*lW+kQ#f{ K] Tu e(*f(*T{*TD.eP$W)*X)*Y)*lB#qz@C>#(p%(p%G>#<-+<-+4W.4W.n~+B%%A3%Z}&nM%m6&[7&gZ.YX.+*+k %wy+9Z+})#/d$`P$|x@~=#`o$`o$4w+4w+Fs%N@%1S#k<&8o@8o@Vk$CM#Zz$Zz$ln$ar$>b$=c$=J$=J$,H$Rj$^m$Cj$Cj$-c$Dj$_a$_a$_a$cN$cN$b9$b9$b9$b8$!l$!l$b9$a9$a9$a9$Qj$Qj$Qj$Qm#7V@7V@[ @}V+}V+3G+6~@6~@#N+UK+TK+AI+[V+3G+T,@T,@T@3 @9G+lX+lX+T_@6=@C@@xD+Wn+wV$X+$=m+8X+Tt+0y+9y+Nd+,-@g(*h(*i(*j(*k(*l(*gF m(*n(*o(*Nr p(*j$#/7 t! xt H%$6r ]*$^*$N=&q(*.,*ly%GD%1C% O%TL%TL%SL%SL%r(*r(*&)*s(*DG%'J ^d i.$%L%my%^,$ >$t(*u(*v(*w(*x(*y(*z(*]g+ui@A(*A<+yc.B(*C(*4|#D(*-$@[n.M_.AA 9^+,M.{4.E(*F(*G(*H(*I(*J(*K(*Ni :{*L(*M(*kl BR@}H%A~&h`%,9%O;%{-#tL.SZ.AW.F>+NZ.V-$>i#Z]$g~@P@@#h+[-#l!&!{#!{#1-#Ku@W/*(W.im@,t@sL.3&#pZ.`m+w+%m3%+W%{@$G'$i0$-z Jv o($Nw Nv Nv Ux qI@-! es fP@3h s1%ER@g*$zX@N(*w{$O(*P(*Q(*R(*`/*S(*=/*jp%.(*T(*U(*V(*4q&*3@*3@*3@*3@*3@K,+K,+K,+J,+Oc$0j$Nc$A;%nA$S'$K2&*'$Z0@(a+Gs@zG+E^@W(*;N%LL+X(*Y(*Vh 9 h5%JO%0~ [E@$S#FN yK cB 6G@2r@TL$Gi$%u%5V+6Z.cH#}{#Xx$qn%90$90$,L$,L$7o@7o@7o@-c$Sj$`H%6{*Z(*`(* _*=(*._*/A&;U+MX%+_*H4%n~$Vt&@_*#_*$_*%_*&_*^>**_*=_*-_*;_*>_*,_*K9@'_*c,.t7@sA+O-.3;.Z..Z..Z..sx.F1.F1.&:+O>.42.x!+x!+5).='.$1.$1.O>.O>.x!+x!+42.42.]{.;f.&B.bD.e[.e[.Pa.O2.|1+K0.w0.K0.)_*#x.fA.%=.!_*~T ~_*{_*F% mg ]_*`l@;g.^_*pb T] f] F`+G)$/x%3(*J-&a|$Cz%7>&/_*pE&(_*(_*uo __*:_*Tt&<_*2** ' [_*Ss%s.*Ws@fq$Rn$S$+}_*|_*1_*2_*$+%3_*4_*5_*6_*M1$3B@Vp+Oi+|o@Qi+'c@7_*0{$^a@W1+lI+%q+y^@~B+6T+vI+vI+1V+1V+uI+(T+~P+~P+er+er+%7@%7@`H@`H@dc@%7@er+fp+lm+mI+F,@:R+29@%7@ZM@qe@pI+ZM+Ht+~G+cr+~P+P0+_T+ur+}T+U_@gK@)B+|G+/G+/G+_V+_V+Mn+Mn+ip+ip+29@29@XH@`H@dc@YH@p'%YH@w)%cc@%7@]V+ZM+nI+~P+Ft+]G+]G+]G+H,+$-+jV+SA+U_@SA+gK@)B+|G+eK@eK@eK@|G+uy#uy#1N#1N#1N#1N#Wv#Wv#NK+qI+qI+qI+8i@8i@qe@^P+NK+/P+/P+OK+OK+FD+FD+wI+}=@g~+vI+5T+|R+<&@fh#o;@rX@On#t=@4=@@p$-:#-:#;w+<&@6o@qt$R,@>B+9G+8G+R)@;B+Y.@:|+R.+2V#2V#c^#c^#c~@_/++>#+>#>[+5 @4]+FM@S@+.h+Y @8_*ND@-$$4/+B[@y%@UY+}i Gj Kj L~#K1 td#.|#gZ#:]#j%#u6 02 3[ J< ma Y7&a=*b~%R>*|O$9_*iQ.5! 0_*/p.@g%5e%5e%TO&S}%O4%Fc%]1%Fc%3]&`E&3]&#u%x*$X@$>S%~h&{h&~h&>S%%' ~h&>S%%' X@$X@$X@$X@$%' 3]&O4%#u%Fc%]1%Fc%Fc%Fc%O4%O4%O4%O4%O4%O4%O4%O4%Fc%Fc%Fc%Fc%Fc%Fc%Fc%Fc%`E&3]&3]&O4%#u%Fc%Fc%>H%Eo+Pw%*Z+*Z+=|$=|$u3$X@$'W+'W+Ae+Ae+Ae+PC#@y#xe#d7$O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%3&$y$$xc+xc+Ea+Ea+Ea+Ea+Ea+]! 5A.xc+$(+$(+xc+5A.]! cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+f+#h]@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@]%@OU+PS@q(#:{+:{+v]#h]@5A.5A.6g+6g+6g+6g+Fu#6g+]$@Ea+Ea+Ea+Ea+Ea+Ea+Ea+gA $(+7P.$(+]! Ea+$(+T_+$(+xc+5A.]! ]! 5A.xc+$(+$(+]! be+5A.5A.{! ]! T_+cI+ko.13+13+NM+cI+NM+13+NM+ko.13+@$+@$+13+", "%. %. %. %. %. %. %. ~. ~. ~. ~. ~. ~. ~. C& #% |% |% |% |% |% |% |% 8c 0' $% &) &) $% 0' 8c d( O~.O~.r: %% ~% ~% d( $% $% $% $% d= d= d= d= 8c |% &) $% 0' 8c |% $% $% $% $% $% $% $% $% $% Q_ Q_ Q_ Q_ Q_ Q_ Q_ Q_ Q_ Q_ Q_ Q_ Q_ Q_ Q_ Q_ 5% *_ *_ *_ *_ *_ *_ *_ R_ R_ R_ R_ l` m` oG.uk 4% f% v% f% %% ~% %% 5% f% f% f% f% f% f% f% f% f% f% f% f% f% f% f% f% %% 5% f% 5% 4% %% 4% f% %% 4% 4% 4% 5% 5% f% f% f% f% f% f% f% f% f% ~_ 4{ p3 p3 +..,;.,;.M=.M=.+..+..+..+..+..+..+..5! X_ QB@QB@QB@QB@QB@QB@QB@g% g% g% g% g% g% g% g% 6% Hu+PI.cp.[3+|5+ET&ET&PI.#9.#9.cp.cp.[3+|5+5v@QB@A^.A^.0c 0c A^.A^.X_ X_ X_ X_ X_ X_ X_ X_ QB@s3.cp.s3.cp.cp.cp.cp.cp.|5+[3+#9.PI.PI.#9.[3+|5+6v@6v@4=+4=+QB@af.af.af.g% g% g% g% g% g% g% 0c {_ 24 K> ac 5[ 5[ ,_ E) 6=+E& !N+R7.N2$Q3$6>$-n+q`+ZH+|r rx Su !^.5/.a_*U{*U{*W)*W)*X)*Y'*Y)*lB#$~*$~*sy#s##ek@Nu#V,+A'#D)++*+C/%Os%Os%A3%^ +z1#5Z.B%%3)#9Z+9Z+R2@/d$8p$/d$|)#]v$4w+wy+N@%/a$/a$HK$1S#=7$Vk$Zz$Vy$/v$dw$ln$>b$>b$nw$=J$=J$,H$%K$Cj$5d$Cj$-c$-c$S5+_a$_a$^m$cN$cN$a9$b9$b8$b8$b8$a9$M1#a9$M1#Qj$Qj$Qj$Qj$7V@7V@[ @}V+}V+3G+[V+[V+#N+UK+TK+AI+3G+7=@T,@kX+Q,+*n_*Lr o_*p_*q_*r_*s_*t_*k_#u_*_j.#9.$0+6' x% iI.Ol `3.v_*e< +4@w_*w_*x_*y_*z_*X3 ]0 69 jp Qv $Fb&@3%M~$zG.^7%'`+1/+=W+1Y+z'#4W.li@Ne@1|&}-#e>$sz#sz#g$+j #W/*ZN%{5@}v@Q]+sL.,N.(>$8H+*`$m3%OQ$lh$`I$H%$r_$bs Iv Au Nv qI@qI@5G@cP@I5@CR@ {#U&&z=$&]&A_*Xa%B_*C_*D_*E_*F_*F_*F_*jp%jp%+(*G_*H_*2r$Ab$Ab$Ab$>q$>q$lt$lt$lt$`0$3(@7j$Hu$mt$f@%b-%z6@.9@f}@3B@[z@+k#$>@I_*47%J_*X(*K_*Hr 2C ^Q#Dj@Kz %0@zK ;8@_|@cP@=S E<%vd$[/%`J$5W.E]#~ +hX+HO$c9$,p$,p$,p$N;$x4#x4#x4#Cj$Sj$O#%/J%6{*_^*L_*M_*._*@L+N_*O_*w(@uw%gh$P_*Q_*R_*S_*B&$T_*U_*V_*W_*X_*Y_*Z_*`_*gM#J/@R}@sY uY n&.;*.sH.(@.`T U%.b3+H{+[^+v!+ :*R>.pt+*G.NK..:*+:*+:*+:*C+.C+.C+.C+.PV.kX.@:*@:*(l+HE.HE.Hg.r~#1-.;1.1[#yY.,N %=.(^+#:*$:*^l+;g@%:*`l@&:*g_ *:*=:*1)@)8 |-@ki$|h$nI@;b -:*UV&;:*8>&8>&7>&7>&f */_*uo o=*(_*o=*o=*PF&>:*{c$/x%,:*vr$':*}a$XB%):*!:*~:*WF${:*]:*=d%A,$PG$h}@Ui+kV+dh##}@$}@fJ#lR+iV+):@%>+4X+vI+O,@ED+H:+H:+vI+vI+1V+uI+(T+~P+~G+er+[R+%7@`H@`H@dc@`H@er+fp+lm+mI+'P+:R+5X+[R+^P+pI+{P+sI+gp+fp+!P+Ft+gK@_T+eK@|G+U_@gK@)B+eK@/G+/G+_V+Mn+Mn+(G+(G+ip+:R+5X+29@29@`H@`H@YH@YH@fK@cc@`H@ZM@^P+{P+sI+#w+!G+!G+!G+mI+P3+'G+!P+B+cB@cB@x;@Y.@/w+e[+16+2V#'v@'v@lK@c~@_/++>#6y+>[+X.+4]+FM@Ab#(m@Y @vs@RI&Oq@po@MD+*<@!y yW+gr#hr#L~#Jj td#C`+^:*6~ /:*8)@V~*Re&F/ ]a&Y7&R>*(:*R>*|O$_:*#d.;b.::*/p.5e%5e%@g%<:*5e%#u%Fc%]1%Fc%O4%3]&O4%#u%x*$X@$>S%~h&{h&~h&>S%%' {h&~h&>S%%' %' %' %' >S%3&$Y@$+d+^b+PF+^b+^b+^b+3&$3&$3&$3&$3&$3&$3&$3&$Fc%Fc%Fc%Fc%Fc%Fc%Fc%Fc%O4%#u%Fc%]1%@g%S}%&0+&0+w*$;~@Pw%Pw%2&$2&$u3$'W+Y@$+d+NZ@NZ@KE#OZ@;>#[R@O4%@d+O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%3&$'g@5A.5A.Ea+xc+xc+$(+$(+]! 5A.xc+$(+$(+xc+5A.]! cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+f+#PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@PS@]%@PS@q)@9&+u]#u]#:{+v]#xc+xc+jy.jy.jy.jy.QL+jy.q9+}f.$(+}f.$(+}f.$(+}f.`Y }f.y4&aH@Ea+l7 T_+T_+$(+xc+5A.]! ]! 5A.xc+$(+7P.xc+5A.xc+Ea+{! ]! $(+NM+13+@$+13+NM+NM+ko.@$+ko.13+@$+=L =L @$+", "@@ @@ 2. 2. V@ V@ V@ N+ n@ V@ |. V@ 2. 2. ^. !% 0' |% |% |% |% $% $% |% |% |% |% |% |% |% |% l` l` l` l` l` l` l` l` oG.:j.m` -H.;_ ;_ ;_ $% Q_ &- &% &% ^{ Q_ ^{ &% Q_ Q_ Q_ Q_ y% y% u% -^ {$ f# ]. f# g# {$ g# ]. {$ f# {. s$ s$ {. f# =^ b/ r: r: x% x% r: r: x% x% j% 7% r: r: 7% j% x% 1% 1% 6% 6% i% i% h% h% h% h% h% h% h% h% h% h% g% 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c g% j% j% j% j% j% j% j% j% j% j% j% x% x% x% w% w% *_ 0c X_ 7v@7v@X_ 0c =_ -_ -_ -_ -_ -_ -_ -_ -_ 0c A^.A^.X_ X_ A^.A^.0c A^.A^.A^.A^.A^.A^.A^.af.s3.cp.cp.cp.cp.cp.cp.cp.PI.PI.PI.PI.PI.PI.PI.h% 8H.n3 |% &) &5 ;b.&5 &) W_ W_ &5 n3 n3 ~_ &_ &_ v% w% v% w% w% w% w% w% $9.l#@pD&Zl@Zl@Zl@Zl@j}+QB@X_ X_ X_ X_ X_ X_ X_ X_ A^.A^.0c 0c A^.A^.X_ ;5 ;5 *5 4! m* .# j$ 4. v$ <] c(+VO |k b(.@h zm [:*Yd.}:*]]&D*+|:*f(*1:*2:*3:*X'*#~*Y)*lB#Uv+_)%37@W ##o+d_+li@li@li@Ar+Ar+D)+D)+D)+W_#B%%M$+W_#Ar+@h+@*+|f+R2@`o$4Z.4Z.R2@4w+wy++*+n~+A0%Fs%m9&Vy$/v${m${m$ln$ln$]m$=c$=c$Ms$09$%K$,H$Gs$;u$%K$'M$B)+(R#(R#(R#(R#'M$'M$Cj$_a$,L$,L$Ej$a9$a9$,p$N1#BA#M1#^N#zA#{^#gX@BO@fX+fX+jX+jX+jX+)K@)K@wp#3G+7~@7~@6~@2G+M `I$NL%OL%NL%+I$NL%1N%1N%~J%~J%UH%UH%UH%~J%~J%|N%ML%4Q%ly%8'&8'&4Q%4Q%}f !M [g I5@cK#WC@!1 qR#@' b:*c:*d:*A,*e:*f:*g:*h:*i:*j:*k:*!7&R3 u[ k8 iB D;$6h#,E 4<$l:*g8 RY#Iu Hv Cu Xw 7C%/$&NA$$>$w}%pC$Tz$DU.}T$L=%@<+E%%6T@v<@I4@})#P@@Z<#i>#GK$0&%0&%_-#sm#|p#aS%ts@}9$XQ%k$+mi@|v@S^$;v$9#%iq+/<%>1+36$]-%7r _e Iu Mw !A T^#RC ds I5@3h |i m:*n:*o:*p:*q:*r:*i2+s:*db#t:*oP&ho%ho%oP&Qs&Qs&*r$E5&xo$xo$Gt$M3&L2&M3&E5&u:*2s%V6$F5&V=$}7&&G$Z0@b-%v:*i*%Ds@D|#w:*dM@x:*/!+y:*z:*A:*6<%B:*Fv@GN lx&pf&>&$:|@Fc#C:*D:*E:*]q$|k+1Y+ *+Tj$'M$se#5($iX+hX+Wx$,p$@d$y4#y4#ar$,Z#vy+08$AB%F:*7v%^^*~t#9$$G:*H:*Uw+T/+w1&I:*`<&J:*K:*5a.TF Ti&OT. b#Xl@L:*IE !` FU fZ 4..y+.Qu.B0.B0.}(+3w.@&@>X+M:*N:*Fu+Q+&DI#:(+M7.~$+S+&S+&O:*P:*Q:*R:*ZX S:*T:*D+.;G.e8.!T O7+O7+(l.(l.O7+O7+Qm.U:*V:*!4.W:*X:*Y:*Z:*`:*ej. <*.<*+<*p5&Qh P3 wo En 'J @y !J cs iy%%L%@<*dC%dC%dC%@<*@<*o($&L%5A&7'&5A&#<*6M&he&GJ%$<*6E$G)$V$*V$*cX#%<*&<**<*=<*-<*;<*><*oR%{A$7_*|P#'a$:9@H2@S&+./+Y6@t)+h @G:+lr+sp+ L+ L+Tn+A@@k0+mB#mB#&>+oy+R0+P0+U_@[T+:G+7k@se@5k@ai@/a@'P+!G+gp+~G+!G+!G+gp+dr+#w+#w+#w+Ft+Ft++w+(T+~P+Ft+@w+`M+/P+dr+~G+#w+nI+#w+gp+gp+~G+~G+gp+gp+#w+~G+~G+gp+gp+Ht+Ht+]V+]V+8i@qe@fK@cc@%7@ZM@qe@8i@4(@8)$O3#tG+`I+`p+.q+t9#t9#L,@L,@z$+s<@c&@a$@G6@ N+VH@p;@u=@rX@:t#/Z$/Z$7k@xy#xc%Xv#Xv#p{%:t#rX@4=@f0#2=@C+%2=@XN#I6@}T+}T+VH@eh#7X+OK+OK+ N+3P#|G+}G+jc@p;@uy#eh#fh#)~#L@@Z.@9&@9=@mq@7$@7$@8$@Y.@Y.@/w+:|+e[+__+__+G$+c^#K_@R^@Gy++>#.@#;(@/K@[8+.h+@'<*d] CT&b~%W~*'1#;1 ]T Hs ZQ.Av&vv+Eo+x*$2&$=|$x*$x*$x*$x*$x*$x*$x*$x*$~h&~h&{h&{h&{h&~h&>S%%' NA.~h&vv+w*$X@$~h&=|$xj+'g@6j+6j+;~ 9Y+x8.9Y+Lh+6j+6j+6j+6j+6j+6j+6j+6j+Y@$#u%#u%#u%#u%#u%#u%#u%O4%#u%]1%@g%@g%]1%#u%O4%u3$u3$u3$u3$Y@$Y@$Y@$Ae+NZ@KE#OZ@uV@uV@MK b;@m`.Fc%lx@@d+Be+Xw&+y&.y&.y&Fc%#u%:b$)<*)<*:b$d7$Ae+A_@]$@]$@]$@]$@]$@]$@]$@jy.]$@6g+]$@dl.Ai.dl.$(+5A.h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@PS@PS@PS@PS@PS@PS@PS@PS@PS@q)@q(#q(#q)@PS@]%@VS+9&+q(#q)@OU+M8@v]#:{+u]#$(+$(+q9+q9+q9+q9+(w.q9+Ov+ks@l7 'U.l7 'U.cI+Zh@13+2^ cI+yM+}f.yM+l7 cI+Ea+xc+$(+T_+T_+$(+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+NM+Zh@Zh@Zh@Zh@Zh@Zh@Zh@2^ 2^ 80+80+5D+6=+", ":% V@ (% |. /% |. /% @@ (% l+ _% |. :% 2. %. #% |% |% |% |% |% |% |% |% |% |% |% |% |% |% |% l` l` l` l` l` l` l` l` :j.m` l` -H.-H.-H.-H.%% Q_ [! S& S& L) 6[ L) S& L) 6[ 6[ 6[ o^ o^ -^ {2 {$ 3!.u}+3!.Iu+!<*Iu+u}+~<*Iu+u}+`$+`$+u}+Iu+{<*U/ 6!.6!.l#@l#@6!.6!.l#@l#@$9.5!.6!.6!.5!.$9.l#@VW.VW.8v.8v.Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI.PI.h% R_ -_ -_ -_ -_ -_ -_ -_ 0c 0c 0c 0c 0c 0c 0c g% j% $9.$9.$9.$9.$9.$9.$9.$9.$9.$9.l#@l#@l#@j}+j}+*_ g% QB@4=+4=+QB@g% *_ *_ *_ *_ *_ *_ *_ *_ *_ 0c A^.A^.X_ X_ A^.A^.0c A^.A^.A^.A^.A^.A^.A^.af.s3.cp.cp.cp.cp.cp.cp.cp.PI.PI.PI.PI.PI.PI.PI.h% 8H.n3 $% &) &5 {_ &5 &) &5 &5 n3 n3 n3 n3 ~_ ~_ I> I> I> I> l3 l3 l3 l3 l#@l#@pD&Zl@l5+l5+o4@Zl@QB@X_ X_ X_ X_ X_ X_ X_ X_ A^.A^.0c 0c A^.A^.Q6 -5 -5 Y5 C, m* * j$ U# L$ <] FV.dn.K} 1}+gb%]<*UZ@-7#}U+^<*E4&+d$QL./<*se$(<*#~*SL&Y'*Y)*_<*:<*g>@fD@#o+&h#CU.CU.li@li@@h+@h+@h+@h+W_#D)+D)+Ar+Ar+li@h/+Ub+R2@]v$]8$Qy$4w+4w+ns$|0#A0%km$0r$cw$/v$*I$CO#CO#ln$%u$=c$=c$nw$Ms$4($%K$,H$Gs$a8$Rj$7F$l~+l~+l~+7F$7F$7F$7F$Cj$S5+,L$,L$_a$Dj$a9$L1#ni$BA#^N#^N#zA#DA#gX@BO@gX+gX+5$@5$@>K@>K@>K@>K@3G+7~@7~@6~@2G+2G+1G+1G+< @< @ky+ky+0~@0~@0~@ky+:P+3G+7~@6~@4:*<<*[<*[<**B+=:#R.+*t@Um#UR#;9+s/+{Y+}<*|<*1<*2<*3<*4<*5<*Xa+vm@6<*j:*7<*M:@8<*gQ CN [g 4h OL%NL%4h 4h 4h w]&OL%NL%NL%#F%#F%#F%|N%|N%4Q%4Q%4Q%4Q%4Q%4Q%4Q%GD%1C%i0$*E -! t! +L@{1 VH ^1 ^1 N1 N1 F> F> F> /V#6, 2k Zr Zr 2k 2k Ku y2$Xk@9<*VB$p$#jp Ju 0s Bu Nw PC Rw $B%/$&r<$.W%0<*a<*mF$V,+WF@6T@W-&b<*c<*,[#BM#J[#.+@mi@2k+iE$v[#v[#M~$4F$zV#'g$Pr#S8@Vs%. +vi+-T.sZ@iE$&i#WR$z/%MB@Wa&Tv%Uv%0A%^d 5;#V~#T^#j@#;E fP@BR@A=$r1%d<*e<*f<*g<*h<*i<*Q~+Py+ a@fo%KG&Et$fo%Kp$B6@A;$Ao$xo$:n$Ft$M3&M3&1s%KG&XS&XS&Ps& !%hp%sn&j<*I*$X0@v:*uM@kF@f(@g(*j[%k<*~V@R#%l<*m<*n<*i=$}E@=a&o<*4Y&W!&[|@ -#,Y$}Z$p<*Oy$3)#7_#B($ *+!U#,Z#w4#jF$XK+iX+hX+c9$_a$_a$S5+ar$,Z#K#$K#$K$+}0$hA%n4&}H$q<*ce$O_*Uw+T/+((&I:*r<*s<*t<*u<*v<*w<*x<*a3+SF+lt+2/@E0.a..,x.i&.]%.~{.Pq.y<*J{+A.@I7.,X@@9.VW._j.%x+fR z<*A<*E% B<*C<*=& D<*E<*F<*G<*H<*G<*I<*I<*J<*J<*J<*K<*K<*)5.L<*L<*X:*M<*}6.N<*O<*P<*Q<*R<*7k S<*g5 Zk j8 3k 5, 6, 7F `v%ly%q_$.,*.,*T<*U<*U<*U<*6M&6M&6M&V<*W<*W<*}N%X!&X!&[N%I/&TL%X<*F'$m^*z]*vd$Y<*Z<*`<* [*.[*+[*@[*#[*$[*rW%%[*|P#Sb$fT$%d$Bg+V}$n:+%f+=:@'k+ m+.m+@m+@m+@m+Tn+S.@4T+qd+!-+rr+oy+=w+Q0+U_@[T+[G+:G+7k@5k@ec@1}@'P+!G+gp+gp+!G+!G+cr+~P+cr+cr+cr+cr+A$+A$+A$+cr+#w+nI+/P+Gt+#w+~G+gp+dr+#w+gp+gp+~G+~G+gp+gp+#w+Ft+Ft+Ft+Ft+#w+#w+oI+oI+qI+^P+ZM@XH@OS#OS#19@|T@AT#8_$,K$,K$W5+y|#+s+xU#6Y#ZA#tW#Ox#X<#6~#x9#H6@K,@VH@p;@u=@jV@xb#Y5%Y5%se@lg@Y5%/Z$/Z$:t#rX@v=@4=@H`#&[*=6$&[*H`#60#p=$eK@p;@3P#uy#@w+@w+tI+uy#|G+|G+eK@p;@7X+fh#-_#)~#P,@Z.@9&@9=@6&@7$@7$@8$@ly+/w+:|+:|+e[+R.+G$+G$+c^#K_@R^@Gy++>#.@#;(@/K@[8+.h+@'<*a~%4S&(:*b~%a~%W{ & ({ Bv&Av&w*$2&$x*$=|$x*$x*$x*$x*$x*$x*$x*$x*$x*$%' %' >S%~h&~h&~h&>S%>S%0, %' =|$u3$%' >S%X@$0@@'g@Ea+xc+Ea+]! {! ]! 5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+6j+Y@$#u%#u%#u%#u%#u%#u%#u%O4%#u%]1%@g%@g%]1%#u%O4%x*$x*$x*$x*$3&$3&$PC#PC#PC#PC#uV@uV@~n#ks#MK +R@mq+fJ%lx@ps+@d+Be+Xw&Xw&#u%O4%:b$)<*)<*:b$IO@cT@A_@]$@]$@]$@]$@]$@]$@]$@jy.6g+)> ]$@q9+dl.q9+xc+Ea+v]#v]#v]#v]#v]#v]#v]#v]#v]#v]#v]#v]#v]#v]#v]#PS@PS@PS@PS@PS@PS@PS@PS@PS@q)@q(#q(#q(#q)@OU+]%@9&+q(#q)@PS@h]@v]#:{+u]#xc+xc+jy.jy.jy.jy.QL+jy.%U.ks@'U.yM+yM+'U.ks@ks@2^ Zh@ks@yM+yM+'U.ks@NM+Ea+xc+$(+T_+T_+$(+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+NM+Zh@Zh@ks@ks@ks@ks@ks@Zh@Zh@Zh@2^ 2^ 80+", "V@ ^. |. i# 1. i# l+ ^. l+ K$ r% ^. 2. ~. ~. M$ &) $% |% |% 0' 8c 8c |% |% |% |% |% |% |% |% -H.-H.-H.-H.-H.-H.-H.-H.m` m` l` -H.R_ R_ -H.%% Q_ [! S& S& L) 6[ L) S& L) L) L) 6[ 6[ o^ o^ =^ {$ W# V# W# X# WF+X# V# {<*WF+W# V# V# W# WF+0Y+U/ 6!.6!.l#@l#@6!.6!.l#@l#@$9.5!.6!.6!.5!.$9.l#@VW.VW.8v.8v.Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI.PI.h% R_ -_ -_ -_ -_ -_ -_ -_ X_ X_ X_ X_ X_ X_ X_ QB@j% $9.$9.$9.$9.$9.$9.$9.$9.$9.$9.l#@l#@l#@j}+j}+g% af.af.QB@QB@af.af.g% af.af.af.af.af.af.af.af.0c A^.A^.X_ X_ A^.A^.0c 0c 0c 0c 0c 0c 0c 0c g% s3.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.s3.w4.n3 $% &) &5 {_ &5 &_ ~_ ~_ n3 n3 n3 n3 &5 &5 fL.fL.fL.fL.-J.-J.-J.-J.{t.{t.Zl@l5+l5+l5+hP.$y#QB@X_ X_ X_ X_ X_ X_ X_ X_ A^.A^.0c 0c A^.A^.X_ 4{ 4{ l* =5 * .^ J$ G- r% P6 y!#[9 8= ;[*wK#>[*>;+,[*AO mX%'[*)[*![*wQ$3:*~[*SL&SL&Y'*Y'*}^@Uv+g>@fD@#o+&h#CU.MX.h/+h/+|f+|f+@*+@h+W_#D)+4W.tc@Ar+li@@*+|f+9Z+]v$]8$]8$~m$~m$~m$N@%&c$&c$&W#{[*/v$/v${m${m$jm$ln$]m$]m$=c$>b$09$Rj$nw$Hs$Ms$Rj$)g$4d$4d$4d$)g$)g$)g$)g$Cj$S5+,L$,L$_a$Dj$a9$L1#ni$AA#^N#^N#^N#zA#{^#gX@BO@BO@2R+2R+4G+4G+YK+YK+7=@7=@3G+3G+=>+=>+=>+zI+2T+2T+Q)@Q)@Q)@Q)@R,@Q)@3G+}V+7~@6~@O[$][*^[*^[*2h#C@@>2+-4+:a$uW#/[* >@([*6'@5:*UV+_[*:[*<[*[[*}[*|[*y<+1[*2[*3[*FC#wd#h< |C )M =H$4h =H$-P 1i w]&OL%OL%NL%NL%#F%#F%+I$|N%4Q%4Q%4Q%4Q%4Q%4Q%4Q%]V%4Q%GD%GD%GD%i0$-! hB qG 6, /V#(e ml 7F {a _e {a 7F j.$@, /V#6, 2k }C Yw hk@-0@D'$0A%Z{$_e ^d my%i0$}f E'$n!$CD%4[*~L$5[*xx$87$R3#WF@!_#6[*nK$FM$7[*J.+NX.l[+P]+3/+d%%!f#v[#M~$:0$f0$H[#[K#8[*8[*S8@MX.x=$3|+uD$4w$hh$A(%5=%#w&9[*Va&6'${a 0s U^#U^#6F rG +<@BR@]@$0[*a[*ld%~g&de%*-%WX+S<@Jy+B6@-'$Et$zb$-'$A;$A;$A;$>q$Sp$:n$Ft$4q&4q&KG&=r$2]*oP&Qs&Qs&=.&hp%{E&'y$X0@d,%wH@]:@EQ@b[*c[*+{+d[*k +&g&e[*f[*vz#'{ )&*g[*4Y&W!&cP@$B$>,$}w$$z$']$5Z.dH#|/+j %,Z#Sj$@d$iF$BM@WK+hX+b8$Dj$^m$Cj$]m$Tj$K#$po%}0$}0$o4&/J%k3&5_#xB%o>+KL+3%+h[*i[*D:&j[*k[*NH$[i&l[*m[*n[*i9.o[*p[*~.+mH.P%.;*.W*.M>.&:+s}+<(+2p%,X@(s.j}+Gu+'C+bv#ym.(s.{t.Jc@^#&V5.*o@q[*B.@he@r[*s[*t[*u[*v[*v[*v[*kg [7.,G.w[*x[*y[*z[*A[*B[*m`#C[*D[*E[*F[*G[*-> l i8 0|$H[*]x%aq q_$3(*PF&PF&3,*3,*I[*v)*J[*J[*J[*J[*v)*v)*3p&K[*L[*VK&VK&M[*N[*3p&O[*||@su&P[*h(%Q[*R[*S[*T[*U[*V[*W[*X[*RX#y+#`_%UI$W8@Y[*u6@C4@Y(+i)+i)+/|+Ob+|]+ L+ L+ L+ L+Tn+)w+A@@!-+&>+sr+-w+vr+Q0+U_@)B+[T+69@_G+<9@ic@ip+km+~G+#w+gp+~G+!G+cr+~P+!P+!P+!P+!P+!P+!P+!P+!P+#w+nI+Gt+nI+gp+~G+gp+#w+#w+gp+gp+~G+~G+gp+gp+#w+#.@#;(@/K@[8+.h+8Z+rc@e_+*2 y{ Bv&&, Eo+u3$X@$=|$X@$X@$X@$X@$X@$X@$X@$X@$X@$u3$x*$%' >S%~h&~h&>S%>S%=|$x*$%' >S%>S%>S%>S%zi.'g@Ea+xc+xc+5A.5A.Ea+$(+Ea+Ea+Ea+Ea+Ea+Ea+Ea+6j+Y@$#u%#u%#u%#u%#u%#u%#u%#u%#u%Fc%]1%]1%Fc%#u%#u%x*$x*$x*$x*$3&$3&$PC#PC#fd%fd%;>#uV@ks#ks#~n#uV@mq+fJ%lx@lx@z$$z$$z$$z$$3]&3]&)<*)<*:b$d7$PM@+R@)D+)> )> )> )> )> )> )> ]$@6g+Yt.6g+jy.q9+jy.5A.xc+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+q)@q)@q)@q)@q)@q)@q)@q)@PS@q)@q(#9&+9&+9&+q(#q)@q(#q(#q)@PS@h]@v]#:{+:{+Ea+Ea+]$@]$@]$@]$@^x#]$@%U.l7 }f.}f.}f.}f.l7 cI+cI+cI+l7 l7 l7 cI+NM+ko.Ea+xc+xc+$(+$(+xc+xc+Ea+]! ]! ]! ]! ]! ]! ]! ]! NM+NM+cI+cI+l7 }f.}f.}f.l7 l7 l7 cI+cI+cI+", "%. S& ^. [! ^. L) i# S& i# 6[ i# S& 5# C& [! t% &_ &) $% 0' 8c 9c 9c |% |% |% |% |% |% |% |% -H.-H.-H.-H.-H.-H.-H.-H.l` l` -H.R_ R_ R_ -H.~% Q_ [! S& S& L) 6[ L) S& L) L) L) 6[ 6[ 6[ o^ =^ {$ W# V# W# X# WF+X# V# {<*WF+X# W# W# X# WF+0Y+U/ 6!.6!.l#@l#@6!.6!.l#@$9.$9.5!.5!.5!.5!.$9.$9.VW.VW.8v.8v.Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI.PI.h% *_ =_ =_ =_ =_ =_ =_ =_ X_ X_ X_ X_ X_ X_ X_ QB@x% l#@l#@l#@l#@l#@l#@l#@$9.$9.$9.l#@l#@l#@j}+j}+af.af.af.af.af.af.af.af.QB@QB@QB@QB@QB@QB@QB@QB@0c A^.A^.X_ X_ A^.A^.0c =_ =_ =_ =_ =_ =_ =_ *_ s3.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.s3.fL.~_ &) &_ n3 W_ W_ n3 &_ &_ ~_ n3 n3 &5 W_ W_ w4.w4.w4.w4.':+':+':+':+aq.aq.l5+l5+l5+$y#SW#^n#QB@X_ X_ X_ X_ X_ X_ X_ X_ A^.A^.0c 0c A^.A^.X_ &_ ~_ Y_ u% .^ L2 df.,; >; vi ee@W2@hF+1- ,9 `[*}:*>;+^I@ }*_r%)[*T{*U{*.}*(8%+}*SL&Y'*X)*@}*#}*g>@fD@#o+CU.MX.V##Ub+Ub+R2@9Z+|f+@*+W_#D)+4W.5)#Ar+li@@*+|f+9Z+R2@4w+4w+~m$kn$kn$ns$/a$Fs%&W#{[*Vy$Vy${m$Zz$jm$jm$*c$]m$]m$>b$=k$Sj$nw$%u$Ms$Sj$5d$A4#A4#A4#5d$5d$5d$5d$Cj$S5+,L$,L$_a$Dj$a9$L1#,b$AA#zA#^N#^N#zA#{^#gX@BO@BO@2R+2R+4G+4G+4G+4G+7=@7=@7=@3G+:P+=>+=>+=>+|V+|V+s;@s;@s;@s;@r;@s;@[V+BI+6~@6~@O[$O[$$}*$}*Rm#~k#>T@CD+DM@_Z$VR#qn&&&*%}*&}**}*=}*-}*;}*>}*,}*DB.N!.'}*)}*!}*~}*{}*Xq W##0Y l$#!M 1i 1i 1i NL%NL%NL%NL%NL%#F%4h ^,$4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%]V%GD%i0$i0$4Q%]V%4Q%1C%;E ml ml ml j.$j.$j.$j.$3' 3' x, Zr 6, (e 7F 7r n[#}h$S-$>M @y @y @y @y ZI$j!$z_%=o%dO$HR$NX$Zf%ZJ$FC$es#T6#1_+s8+^k@'H%]}*^}*d!@BM#Y{@.+@s!$m[+i($U{$pS$ c$&J$q4#xD%/}*b@T~#n)$9m&VS#:}*<}*[}*$;%^~%CP+^L#ES#A6@Iu$3u$3u$Iu$7j$7j$7j$21@Sp$:n$Ft$2r$2r$LG&|b$<)%{^*Qs&Ps&}}*Rs&j<*'y$&r$4B@;x@/8$I%%o @&U+O_*0!*D ++f&WS#oI#Ev@a9&Wb&OE&ql&D@$'M |:&|}*8D$4O#.7#s8+2S#%*$N)$N)$90$,p$I$+}{#WK+vp#Ej$^m$8F$j%%]m$ar$po%c/$}0$}0$/J%#6$]A&sy$[n$1}*2}*&S+m&%3}*4}*Z^&PB%0V $] 1i&5}*LA@6}*7}*8}*9}*x0.n9.r}+Q>.v!+m3.n3.qK#+X+Hc%sv%A{$vC#EI#FI#ns%ns%6' l5+V^$/#&P7.=$.cd wv&nC&w[*0}*x[*a}*]_*b}*c}*d}*e}*f}*g}*h}*i}*6J@%[ l%# H@ ) i8 &B$L(*j}*0|$3k 3k xr$3(*k}*l}*q_$q_$q_$1q&1q&]V%8'&GD%VH%GD%8'&]V%J[*f`%aK%GJ%he&f`%he&m}*n}*6C%5'$o}*_G&z/%p}*x=$q}*r}*s}*t}*u}*Z~&wZ#lM@ J+*b$*b$G2@n<@G,+Z;+n0+o8+.B+.B+-w+-w+-w+-w+-w+@k+#B+sr+v)+oy+-w+.B+fy+_T+P0+U_@)B+[T+69@_V+_V+_V+!G+gp+#w+#w+~G+!G+cr+~P+Ft+Ft+Ft+cr+cr+cr+!P+!P+dr+dr+#w+gp+~G+~G+gp+gp+#w+gp+gp+~G+~G+gp+gp+#w+Gt+@w+Gt+nI+nI+nI+ZM+ZM+5X+:R+,:@I2@`0$Na$7j$yb$F4@X>$a{$4(@&E+tG+ q+gh#gh#pe#s<@c&@a$@H6@P,@<&@:x@VH@eK@}G+[G+_G+5k@5k@5k@te@te@7k@7k@ne#Q;@`+#4=@TY#H`#&[*=6$=6$C+%v}*eK@oe#uy#tI+~P+cr+Ft+~P+|G+|G+eK@p;@7X+fh#-_#)~#a&@0&@be#9=@6&@7$@EM@I@@-4+e[+e[+R.+16+&R#'v@'v@c^#K_@R^@Gy++>#.@#;(@/K@[8+.h+8Z+^k@M%#w}*8T@w@+%V.5=$~V.D%.<0 `{ O} Li Af *[**x *x }d la X{ u3&t3&a~%!**-x (:*7+*(:*E# Lh+Bv&0, 2&$X@$%' =|$>S%X@$X@$X@$X@$X@$X@$X@$X@$2&$=|$x*$%' >S%~h&~h&>S%u3$x*$>S%{h&{h&{h&~h&nh.'g@Ea+$(+$(+xc+xc+T_+Kh+Ea+Ea+Ea+Ea+Ea+Ea+Ea+6j+Y@$#u%#u%#u%#u%#u%#u%#u%#u%#u%#u%Fc%Fc%#u%#u%#u%X@$X@$X@$X@$'W+'W+_c$_c$xe#fd%uV@cT@:5@MK ~n#;>#@d+ps+ps+ps+z$$z$$z$$z$$TO&TO&)<*:b$d7$z<$PM@+R@)D+)> )> )> )> )> )> )> ]$@)> Yt.)> ]$@jy.]$@]! $(+u]#u]#u]#u]#u]#u]#u]#u]#u]#u]#u]#u]#u]#u]#u]#q)@q)@q)@q)@q)@q)@q)@q)@PS@q)@q(#9&+9&+x}*x}*x}*q(#q)@q)@q)@v]#v]#v]#:{+5A.5A.6g+6g+6g+6g+Fu#6g+jy.l7 $(+bH@T_+}f.xc+l7 $(+}f.xc+l7 Ea+NM+5A.]! Ea+Ea+xc+xc+xc+xc+Ea+Ea+]! ]! ]! ]! ]! ]! ]! ]! NM+cI+cI+l7 }f.bH@bH@aH@}f.}f.}f.}f.}f.l7 ", "u& ^* C& ^* S& &% S& l:.C& &% S& !1.u& &% ^{ &_ &_ &) $% 0' 8c 9c 9c |% |% |% |% |% |% |% |% R_ R_ R_ R_ R_ R_ R_ R_ -H.-H.R_ *_ R_ R_ -H.~% Q_ [! S& S& L) 6[ L) S& [! [! L) L) L) 6[ 6[ _& {$ W# V# W# X# WF+X# V# WF+WF+WF+X# X# WF+WF+' .U/ 6!.6!.l#@l#@6!.6!.l#@5!.5!.$9.$9.$9.$9.5!.5!.VW.VW.8v.8v.Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI.PI.h% af.A^.A^.A^.A^.A^.A^.A^.X_ X_ X_ X_ X_ X_ X_ QB@x% l#@l#@l#@l#@l#@l#@l#@$9.$9.$9.l#@l#@l#@j}+j}+af.af.af.af.af.af.af.af.4=+4=+4=+4=+4=+4=+4=+4=+0c A^.A^.X_ X_ A^.A^.0c 0c 0c 0c 0c 0c 0c 0c g% s3.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.s3.v% ~_ &) &_ n3 W_ W_ W_ &_ &_ ~_ n3 n3 &5 W_ W_ w4.w4.w4.w4.':+':+':+':+(s.aq.Zl@Zl@Zl@$y#SW#y}*QB@X_ X_ X_ X_ X_ X_ X_ X_ A^.A^.0c 0c A^.A^.X_ &_ 5% y% b/ {2 !W+ng.al+~<*tK.-+@%~.dv wO#cQ+(8 FX#>;+^I@ }*z}*A}*T{*V)*~[*|r$+}*SL&Y'*X)*B}*}^@g>@fD@#o+CU.V##V##=1@=1@R2@R2@9Z+|f+W_#D)+4W.4W.@h+@h+@*+@*++B$3)#N@%N@%ns$~m$m9&&W#pr%pr% p$cw$Vy$i%%Zz$CM#RA$RA$L[#*c$*c$ar$,Z#Tj$=c$ln$>b$Tj$'7$'7$'7$'7$Bj$Bj$Bj$Bj$Cj$S5+,L$,L$_a$Dj$a9$L1#BT$DA#zA#^N#^N#zA#yA#{^#BO@BO@BO@BO@2R+2R+2R+2R+eX+eX+[ @[ @3G+3G+=>+=>+kX+kX+|V+|V+s;@s;@s;@|V+[V+BI+Gl+Gl+}|$}|$C}*C}*_s#xp#=>+R)@W.@BU$_`#4+$KD@D}*E}*F}*G}*H}*I}*J}*,}*k3@*H.Zh+K}*L}*M}*N}*O}*P}*.l&~)#.<@es Z;$],$],$],$+I$+I$+I$+I$^,$],$4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%]V%1C%=E =E 1C%4Q%]V%4Q%3(*l}*.,*|A +y wt cs xt |A hy%r_$xt uG hB UH [f [,$[,$[,$2r@2r@)J )J v~$}h$36$kh$,x%;x%{M$R@&@g&!Q#X@+1/+.{@3w+,Z#eZ.7]@Q}*R}*D@+ki@']$l[+Br+#++Rs%]l$0&% c$>]$r##I[#XJ#8I#I4@W_#j|#X@+L#$A@$L=&g+&xA%n6&cE%wd$P;%,M Rx@wt ds rG +<@~M >S M%$S}*h[*Ng%gy$T}*[<+Yd+Uy+J2@zb$tV#tV#tV#tV#Rl$uk$zb$cs$Gt$Ft$Ft$4q&2r$LG&y+&Lp${^*Ps&U}*V}*t:*)E&^c@*w&N&$.J+o|+<'@H~@$S+y-+W}*_B&X}*a|%Dv@c3&@S#Y}*Z}*$L@6F n[#iF#`}*w1#DU.WF@dH#T4$,L$&6$Bb#T@+47$iF$}{#hX+00$a9$^m$DP$j%%ln$Wk$c/$qr%}0$K$+m4&k^#Kn#yx#'*@@[@ |*N:+.|*+|*_V%TY$HE+*v$U&&u)$G'$WT@}M#@|*#|*$|*(6 %|*Oo+M2.N7+,X@iM#p2@&|*Ih.V#+/e.j(+*|*xu#~~@~~@q,@A' a<@B' a:@Z^ Ll `n Fi+.5. f.e(.=|*Xh@e6&-|*;|*>|*,|*i_ Mg Ne v' gp v' =M !p$+, xr$]|%H[*`v%+w%L^*3(*.,*ly%GD%1C%1C%4Q%g`%f`%*L%*L%UH%*L%UH%pM%5>&f`%|f vR@R5@GJ%UH%&E 5'$pM%Nt%'|*lh$in$V$*~!%)|*!|*~|*{|*]|*^|*:s$F##wH@#s+bH#6i@Et+%s+$q+ep+0y+0y+fh#fh#:x@K,@K,@K,@K,@K,@#k+fy+vr+vr+.B+VH@}T+b$@P0+P0+P0+U_@U_@U_@)B+)B+!P+Ft+~P+Ft+!P+fp+cr+Ft+@w+@w+$a{$4(@&E+tG+s9#gh#4v#Kx#c&@G6@H6@*9@a&@#9@:x@VH@eK@}G+[G+_G+5k@5k@5k@5k@5k@bi@bi@:G+[G+`+#4=@TY#TY#H`#&[*&[*C+%v}*eK@oe#uy#tI+~P+cr+Ft+~P+|G+|G+eK@p;@7X+fh#-_#)~#a&@0=@be#9=@7$@EM@EO@<^#-4+e[+e[+R.+16+&R#'v@'v@c^#K_@R^@Gy++>#.@#;(@/K@<7@k9@J3+^k@BO#hn$r'@*[@}c@FC.1} CL.<0 !! d0&5W&wW+*[**x *x }d /|*Z[*Z[*(|*a~%4S&%S.-x a=*dW ,% 6j+ZQ.>S%Eo+%' X@$=|$~h&%' %' %' %' %' %' %' %' 2&$=|$x*$%' >S%~h&~h&>S%~h&%' X@$>S%&, &, %' %.@;~ xc+T_+$(+xc+xc+T_+Kh+Ea+Ea+Ea+Ea+Ea+Ea+Ea+6j+Y@$#u%#u%#u%#u%#u%#u%#u%#u%#u%#u%O4%O4%#u%#u%#u%x*$x*$x*$x*$3&$3&$PC#PC#fd%PC#cT@BX@b;@:5@MK OZ@Xw&_|*u{@u{@Be+Be+Be+@d+#d+TO&)<*d7$z<$i|$PM@cT@)D+)> )> )> )> )> )> )> jy.6g+Yt.)> ]$@]$@6g+{! $(+u]#u]#u]#u]#u]#u]#u]#u]#u]#u]#u]#u]#u]#u]#u]#:{+:{+:{+:{+:{+:{+:{+:{+v]#v]#v]#:{+u]#u]#d #';$q)@q)@q)@q(#:{+v]#v]#v]#5A.5A.6g+6g+6g+6g+Fu#6g+]$@xc+*$@$(+*$@$(+y$$Ea+*$@$(+y$$Ea+6j+5A.;~ 5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+]! ]! ]! ]! ]! ]! ]! ]! cI+cI+l7 l7 }f.}f.bH@bH@l7 l7 l7 }f.}f.}f.", "!1.+h.!1.d( ^* ~% &% .h.l:.d( !1.vk !1.%% 5% &) &) $% |% |% 0' 8c 8c |% |% |% |% |% |% |% |% R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ *_ *_ *_ R_ -H.~% Q_ [! S& S& L) 6[ L) S& [! [! [! L) L) 6[ 6[ 6[ =^ W# V# W# X# WF+X# V# X# X# X# X# X# X# X# z) U/ 6!.6!.l#@l#@6!.6!.l#@6!.5!.$9.l#@l#@$9.5!.6!.VW.VW.8v.8v.Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI.PI.h% QB@X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ QB@x% l#@l#@l#@l#@l#@l#@l#@$9.$9.$9.l#@l#@l#@j}+w% QB@af.af.g% g% af.af.QB@QB@QB@QB@QB@QB@QB@QB@QB@0c A^.A^.X_ X_ A^.A^.0c A^.A^.A^.A^.A^.A^.A^.af.s3.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.s3.f% ~_ &_ &_ n3 &5 W_ {_ ~_ ~_ n3 n3 n3 n3 &5 &5 fL.fL.fL.fL.-J.-J.-J.-J.(s.aq.pD&pD&pD&l5+SW#y}*QB@X_ X_ X_ X_ X_ X_ X_ X_ A^.A^.0c 0c A^.A^.QB@f% x% b/ U/ ' .41.p2.:|*<|*{+$k$@[|*{,$i`#FE#T`+FX#>;+^I@ }*_r%)[*T{*U{*.}*(8%+}*SL&Y'*X)*@}*#}*g>@fD@#o+CU.V##f$@})#})#9Z+9Z+9Z+|f+@ +W_#W_#D)+@h+@h+@h+@*++B$+B$k %k %N@%ns$m9&&W#pr%)]$/9$ p$i%%i%%CM#CM#Vk$Vk$L[#L[#*c$Wk$1r$Tj$]m$ln$ar$Tj$A4#A4#A4#A4#5d$5d$5d$5d$Cj$S5+,L$,L$_a$Dj$a9$,p$BT$DA#zA#^N#^N#^N#yA#yA#nZ@nZ@nZ@nZ@nZ@nZ@fX+fX+fX+eX+eX+[ @7=@3G+:P+:P+T,@T,@2T+2T+Q)@Q)@Q)@2T+AI+VK+&9@Gl+}|$*h%}|*}|*_s#_s#T,@YK+1 @+@%4:%Om&T!$t(@||*1|*S8$2|*3|*4|*5|* _@#5.6|*7|*8|*9|*0|*a|*b|*c|*d|*Y$f|*8u%4Y+z@%O4$b/$6Z.c/$>b$w4#8Z+pW$FJ$ {@!}@Z]$~}@'(@s!$rK@0L#Mu#GK$WJ#r##aX#XJ#9Z++B$+*+x1#Hw%'Q#]I$In#q9%x1&@g&Qv%}g$1c#8E$'M jQ Rx@I5@I5@Ad$0'$.>$$6#g|*%-%a>+r-+ >@[c+N3+K2&Sl$sV#sV#sV#-k$AM$Sl$Sl$cs$Gt$Ft$)r$M3&M3&fJ&LG&{^*2]*Ps&U}*h|*V}*i|*/c@u6+s6+,h#j|*rU#@W+5Z%k|*FE+l|*P_+{#.J`%U7@m|*n|*Fh@Tx .~ p[#Ns$xr%Us@OD@7_#`&+qw$c9$47$37$k`%b>%d8$hX+00$N1#Dj$Cj$Bj$j%%{m$*c$qr%7v$8v$K$+#6$i^#4_#uy+Vt+'*@bD#> $o|*p|*q|*Cz&r|*Fb&Np#1c#Pz$g*$MM$P-$MA${@$n$#{M +W@i@#s|*t|*u|*v|*%d.U$ )@ k3 w|*jg }q@x|*x|*nC&y|*z{$aV.%z@zE#z|*A|*@q&B|*V] C|*~(#Bg Qo#Fj 8s Ts$iq$[t 8s )m (g }t (g )E |>$z6 w_$3k `v%`v%0q 0q +y ly%GD%GD%GD%4Q%g`%f`%D|*~J%5>&#]*5>&#]*~J%oF%G'$E|*|f 5'$5>&5>&|f G'$F|*GJ%G|*Xv%fs$|c$'%+H|*I|*J|*]g%K|*L|*M|*n.&(:@ih#_u+0>@Vi+/7@=K@!B+Ox#s<@Q6#gY#Y|#c&@=b$G6@Y|#4L# N+|G+:V+:V+|G+ur+_T+P0+P0+P0+qy+u)+u)+f~+Q0+_T+A$+~P+#.@#;(@/K@d~@k9@J3+'5@U~*o*&LA$2&#]0%#3 Yg E%.Oc !! '1 5W&wW+kb *x *x }d /|*'<*N|*(|*6W&!**W~*b~%W~*O|*U% y$$&, x*$w*$%' x*$2&$~h&%' %' %' %' %' %' %' %' u3$x*$%' >S%~h&~h&>S%>S%Av&>S%x*$X@${h&{h&x*$7g.;~ xc+T_+$(+xc+Ea+$(+G|@Ea+Ea+Ea+Ea+Ea+Ea+Ea+6j+Y@$#u%#u%#u%#u%#u%#u%#u%#u%#u%O4%3]&3]&O4%#u%#u%u3$u3$u3$u3$Y@$Y@$Ae+Ae+PC#Ae+cT@+R@b;@:5@:5@+R@Be+u{@u{@_|*Xw&Xw&Xw&Xw&TO&`E&:b$d7$z<$z<$IO@OZ@)D+)> )> )> )> )> )> )> q9+]$@6g+6g+jy.jy.6g+{! xc+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+:{+v]#v]#v]#:{+u]#d #PS@q)@q(#q(#:{+:{+v]#h]@Ea+Ea+]$@]$@]$@]$@^x#]$@U/@6j+3&$y$$'W+6j+3&$;~ {y%y$$3&$;~ Y@$;~ 3&$y$$xc+Ea+5A.5A.5A.5A.Ea+xc+]! ]! ]! ]! ]! ]! ]! ]! l7 l7 l7 l7 l7 l7 l7 l7 NM+NM+cI+cI+cI+l7 ", "d( m` d( l` ~% -H.%% m` ~% -H.d( oG.+h.l` 5% |% |% |% |% |% |% |% |% |% |% |% |% |% |% |% |% 4% 4% 4% 4% 4% 4% 4% 4% 5% 5% 5% f% 5% 4% %% ~% Q_ &- &% &% ^{ Q_ ^{ &% &% &% &- &- ^{ ^{ ^{ 6[ =^ d& c& d& _& =^ _& c& c& d& d& _& _& d& d& c& b/ r: r: x% x% r: r: x% r: 7% j% x% x% j% 7% r: r: r: 7% 7% j% j% x% x% x% x% x% x% x% x% x% x% v% n3 n3 n3 n3 n3 n3 n3 ~_ ~_ ~_ ~_ ~_ ~_ ~_ f% w% w% w% w% w% w% w% w% j% j% j% x% x% x% w% w% 4=+QB@g% *_ *_ g% QB@4=+QB@QB@QB@QB@QB@QB@QB@QB@0c A^.A^.X_ X_ A^.A^.0c 7v@7v@7v@7v@7v@7v@7v@4=+s3.s3.s3.s3.s3.s3.s3.s3.h% h% h% h% h% h% h% h% 5% &_ ~_ ~_ ~_ &5 {_ ;b.&5 &5 n3 n3 n3 n3 ~_ ~_ I> I> I> I> l3 l3 l3 l3 aq.{t.V^$b #b #pD&hP.^n#s3.QB@QB@QB@QB@QB@QB@QB@QB@af.af.g% g% af.af.QB@w% j}+U/ q[*&R+P|*Q|*R|*S|*T5.T|*U|*u*$DE#1O+Bb o%+,[*^I@V|*W|*)[*![*TD.(<*~[*SL&SL&Y'*Y'*}^@_<*3+$fD@#o+MX.f$@g&@})#|)#|f+|f+|f+|f++B$+B$@ +@ +W_#W_#W_#@ ++*+|0#|0#|0#&c$Fs% p$ p$pr%sD$(a$/9$dD$dD$bE$bE$8o@8o@=7$=7$L[#M[#m~+!U#*c$jm$Wk$!U#4d$4d$4d$4d$)g$)g$)g$)g$Cj$S5+,L$,L$_a$Dj$a9$,p$:8$BT$L1#N1#M1#M1#Qj$[{#[{#[{#[{#[{#[{#[{#!k#M+#nZ@nZ@fX+fX+gX+gX+4G+4G+YK+YK+YK+YK+w;@w;@w;@YK+AI+VK+&9@Gl+}|$*h%}|*}|*L$/H$*&#(3@X|*1#@Y|*Z|*`|*]&% 1*^/@.1*aH 2`.H:.H:.+1*@1*#1*$1*%1*s_$Ut&b.# 9 r[@rG -! *E i0$1C%i0$=E 4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%1q&4Q%1C%1C%4Q%]V%4Q%GD%ly%ly%ly%ly%ly%|A |A |A UH UH uG ds r_$ly%l}*3,*u1$b|$q<$vR@/+>/+Ld$cs$Gt$)r$ v$+r%+r%3U&1s%3R&3R&Ps&U}*h|*h|*;1*8[$a3$Ry+>1*L~+@(*,1*r>+R/+Bp#N_+Q_+p{ aj&'1*)1*!6%%A@{a UB$p1#oC$ c$MX.{R@||+^f#37$_P+d9$d9$ K$pw$d9$00$[{#N1#Dj$Cj$5d$A4#{m$jm$7v$7v$8v$17$}v&5R+:3@`~@`~@U^@;`+8F#U`$Ax$!1*a<*bj%*;%%$#&{#Ns$.B#xd$n5&nv%Y=*&W@TH Xr _,@+' (1 R1 L~# ~ ~1*21&{1*]1*^1*/: /: ^1*^1*/1*_{+(1*_1*:1*<1*[1*}1*ns+=$#kB@4q _d@F5 HT#Ts$1d$J5@Qs$b1%HT#)E X7@zr$hk@WH%|1*3p&3p&3p&11*q_$ly%GD%4Q%g`%g`%f`%f`%21*21*21*4C%4C%31*4C%1(&$W@~8@,P {8@L~ Q~#0~ EN#0~ 1|@~J%i0$4(*,:*k&%U{$41*51*61*71*81*91*01*pO@Fs@l(@NF@Vi+A=@*K@om+->$X<#P&$_^#Sw&Y|#Pc$Ox#a1*i-$X|#,_#/P+^G+/G+/G+^G+:V+)B+qy+P0+f~+u)+O,+%>+/_+xp+=w++w+ay+}R+(T+cr+fp+!P+Ft+/P+/P+Gt+nI+dr+#w+gp+Ht+Q;@Mn+#.@#;(@/K@d~@ii@.h+d>@b1*z*+o>&xX@[I.Fh+Yg zb yW+E~ .4 5W&6^ kb *x kb }d (|*N|*=x ,<*3S&U~%%S.(:*-x c1*Q% *$@{h&2&$vv+X@$u3$w*$~h&>S%>S%>S%>S%>S%>S%>S%>S%%' %' >S%~h&~h&~h&>S%>S%{h&>S%%' x*$x*$x*$u3$y*$6j+$(+T_+$(+Ea+5A.Ea+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+6j+Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$+d+Y@$'W+{y%{y%'W+Y@$+d+2&$2&$2&$2&$^b+^b+NZ@NZ@Ae+Ae+uV@uV@ks#MK :5@+R@u3$*Z+*Z+ME+X@$%' %' %' {y%'W+PC#Ae+Ae+Ae+uV@;>#A_@]$@]$@]$@]$@]$@]$@]$@Ai.q9+]$@]$@jy.q9+]$@]! Ea+v]#v]#v]#v]#v]#v]#v]#v]#v]#v]#v]#v]#v]#v]#v]#:{+:{+:{+:{+:{+:{+:{+:{+u]#:{+h]@M8@M8@h]@v]#:{+PS@q)@q(#9&+u]#:{+v]#h]@xc+xc+jy.jy.jy.jy.QL+ok.KE#+d+#u%3&$O4%Y@$Fc%+d+3]&3&$#u%Y@$#u%3&$`E&B#@y$$Ea+5A.]! ]! 5A.Ea+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+xc+Ea+5A.]! ]! ]! be+{! {! ]! ]! 5A.", "l` l` -H.-H.R_ R_ R_ g% g% *_ -H.:j.:j.l` R_ 0' 0' |% |% |% |% $% $% |% |% |% |% |% |% |% |% 4% 4% 4% 4% 4% 4% 4% 4% 5% 5% f% f% 5% 4% %% ~% Q_ &- &% &% ^{ Q_ ^{ &% &% &% &- &- ^{ ^{ ^{ ^{ b/ d& c& d& _& =^ _& c& 9- c& d& d& d& d& c& N~.x% r: r: x% x% r: r: x% r: 7% j% x% x% j% 7% r: r: r: 7% 7% j% j% x% x% x% x% x% x% x% x% x% f% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ v% w% w% w% w% w% w% w% j% j% j% x% x% x% w% w% 4=+QB@g% *_ *_ g% QB@4=+af.af.af.af.af.af.af.af.0c A^.A^.X_ X_ A^.A^.0c l. l. l. l. l. l. l. l.QB@s3.s3.s3.s3.s3.s3.s3.h% h% h% h% h% h% h% g% &) &_ ~_ ~_ ~_ n3 {_ |x.W_ W_ &5 n3 n3 ~_ &_ &_ v% v% v% v% w% w% w% w% aq.j}+b #Jc@Jc@V^$o4@^n#s3.QB@QB@QB@QB@QB@QB@QB@QB@af.af.g% g% af.af.s3.{t.pD&d1*= @mX.e1*Rr&f1*g1*h1*i1*j1*eS+k1*2/$|A+a] ,[*AO mX%'[*)[*![*wQ$3:*~[*SL&SL&Y'*Y'*}^@Uv+3+$fD@#o+MX.f$@g&@|)#|)#@*+@*+|f+|f++B$+B$+B$3)#W_#W_#W_#@ ++*++*++*+|0#km$/a$/9$/9$)]$sD$(a$pr%dD$K^$bE$bE$8o@8o@=7$=7$L[#M[#m~+K[#*c$jm$Wk$!U#4d$4d$4d$4d$)g$)g$)g$)g$Cj$S5+,L$,L$_a$Dj$a9$,p$:8$BT$L1#N1#M1#M1#Qj$[{#Qj$Qj$Qj$Qj$Qj$M1#Qj$Qj$!k#nZ@fX+fX+gX+gX+4G+4G+2 @2 @2 @2 @R)@R)@R)@2 @TK+VK+H)@Gl+O[$=h%}|*l1*[g%&h.%C%%[g$vd$y_%}/%nJ#nJ#=z${I$l%&cF .P&B1*,($y/+%F$18+mm+&-+Qd$Ab+>_+=X$=X$rV#rV#rV#@F$#w$Gt$)r${x$qH&= $=d&3U&XS&XS&U}*U}*h|*C1*D1*+e&6[$Ty+E1*K6+CR+F1*U-&-(*At&]V.cv%jX@{Y@wy rl&6`@Yr ^*@5(*O;%v1#Us@Nu#BB@`&+IK$Ab#}{#WL$tr$2#%5($[{#N1#M1#2h$-c$)g$4d$A4#{m$jm$7v$&u$=u$`H%~t#N.+G1*!R@!R@H1*I1*%q%)'$DM#D)$VF@~v$UL$3/+/-#J1*'q$${@ms+D_#X^##y kl cq vo F> :m [r@#Pz$}/%7:%xd$ey%|:&TB$wr$d9%Qs$Mu ,z ]*@_d@,z y2$hk@/@T1*U1*V1*W1*X1*Y1*6+$kP+N3+Wp+!u+xM@;3@yv&(6$.z&P&$w9#Z1*Pc$Pc$WM$WM$`1* 2*X|#EO${P+69@Mn+Mn+[T+[T+U_@Ll+P0+f~+%>+O,+(f+)-+1]+oy+WA+ay+}R+ay+cr+!P+!P+Ft+Gt+Gt+nI+dr+#w+gp+er+:o+Q;@(G+(V+(V+l;@^V+^V+$w+_V+Mn+Mn+(G+(G+Mn+Mn+_V+:o+km+km+'P+T;@Z5+x=@48+F,@:R+5X+5X+5X+:R+G,@S;@WH@29@[R+5X+km+:o+gp+#.@#;(@/K@em@ii@.h+IK#W-&.2*<-@D2&bR.nh@d'.ae@D%.a< ;b&Af L[&kb *x kb }d (|*N|*=x X{ W{ b~%-x F{.F{.s-@k+ *$@~h&Eo+OJ.X@$=|$vv+>S%>S%>S%>S%>S%>S%>S%>S%>S%~h&~h&{h&{h&{h&~h&>S%%' x*$>S%~h&X@$w*$vv+u3$J> y$$$(+T_+$(+5A.{! ]! Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+;~ Y@$Y@$Y@$Y@$Y@$Y@$Y@$+d+Y@$'W+{y%{y%'W+Y@$+d+Eo+Eo+Eo+Eo+PF+PF+Jb#Jb#Ae+PC#@y#[R@-|&~n#MK +R@Eo+Ic%;~@Pw%x*$X@$%' %' 'W+3&$Ae+KE#Ae+PC#@y#f].]$@]$@]$@]$@]$@]$@]$@]$@1m.dl.jy.jy.q9+q9+]$@]! 5A.h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@h]@:{+:{+:{+:{+:{+:{+:{+:{+d #:{+h]@M8@ZW+ZW+M8@h]@OU+q)@q(#9&+u]#:{+v]#M8@$(+$(+q9+q9+q9+q9+(w.H0@NZ@]1%Fc%#u%#u%Fc%]1%]1%O4%#u%Fc%Fc%#u%3]&TO&`b&y$$Ea+]! {! {! ]! Ea+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+xc+Ea+]! {! be+8g.8g.8g.8g.be+{! {! ", "mI.'K.<].<].lI.mI.Mv.lI.mI.kb.lI.<].x3&M/.-H.&5 ~_ $% $% &) $% 0' 7c |% |% |% $% &) &) &_ &_ &- &% ^* ^* ^* &% &- &- Q_ Q_ ^{ ^{ &- &% &% &% ~% d( +h.+h.+h.~% 4% 5% 5% 5% 5% 5% 5% 5% 5% Q_ &- &- &- &- &- &- &- &- Q_ Q_ Q_ Q_ Q_ Q_ Q_ Q_ %% ~% +h.d( %% 4% ~% +h.v% v% v% v% v% v% v% v% Q_ Q_ Q_ Q_ Q_ Q_ Q_ Q_ =] Q_ &% &% ^{ y% y% Q_ Y_ Y_ Y_ Y_ Y_ Y_ Y_ Y_ =5 =5 =5 o3 o3 Y_ Y_ Y_ f% f% f% f% f% f% f% f% v% v% v% v% v% v% v% v% QB@af.*_ R_ R_ *_ af.QB@6v@4=+QB@g% g% QB@4=+6v@7v@X_ X_ A^.A^.0c 0c =_ =_ A^.7v@7v@X_ A^.7v@)i+6v@af.R_ *_ QB@@[+@[+6v@QB@QB@QB@QB@QB@QB@QB@QB@n3 n3 n3 n3 n3 n3 n3 n3 n3 &5 W_ {_ {_ W_ n3 ~_ f% v% v% I> -J.-J.':+':+5!.5!.b #V^$Zl@l5+hP.$y#PI.s3.;H.5v@5v@;H.s3.h% <4 ;H.5v@>H.>H.5v@;H.<4 $9.V^$d1*DM+[D++2*Rr&@2*#2*S5.$2*%2*&2**2*3O+n,$Yd.,[*AU%H}$e#++d$=2*V)*.}*.}*X'*X'*X)*Y'*B}*B}*3+$-z@MX.V##V##V##=1@|)#@h+|f+9Z+]v$4w+4w+wy+3)#+B$+B$|0#|0#|0#|0#&c$&c$)]$)]$)]$)]$(a$(a$(a$)]$YJ#I4@8o@dD$cD$dD$CM#Vk$Zz$RA$RA$L[#!U#1r$Ei$Ei$N[#4d$A4#'7$Bj$)g$7F$(R#-c$-c$_a$_a$_a$@d$,p$,p$Ej$Ej$Ej$a9$a9$cN$cN$cN$,p$qw$qw$,p$cN$5G$a9$BT$Qj$Qm#!k#!k#8e#9e#9e#9e#zM@5Z+~K@6G+~K@1 @'K@RQ@kX+7=@2G+H)@4:*(s#-2*N<%;2*[g%3G+5&@DI+bN$V~$GO$RQ@)K@Y&+>2*,2*'2*)2*!2*~2*{2*]2*{{@^2*/2*6/*(2*sF.>~@d/.jC&_2*u1*[C pR#O~#b.#+~ }g i0$=E *E =E 4Q%}:&e|*3,*e|*}:&]V%]V%GD%GD%GD%GD%GD%1C%1C%1C%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%GD%1C%1C%i0$Nt%gB Wx /0@<|@dP@EN X{$D_#$g+}=%{-#:0$BA$rV$QB$4V+'Q#.++9T+`]$k^#+l#8~#uy+<3@Vt+9k# *+z1#A1#0T+5w+b~#b]+T=$G!#MJ@G[#p>#}(%)=%6X%.++j5&8|%F:*3{*-1%)8&P,&,a&O]$4Y+xR#WR$cE%5=%SB$SB$70&:2*<2*=2%yW.[2*KD@RF@a*$%q+)P+hp+h8$y:+H2$*Z#A:+qV#%v4#K1#ni$eD$j%%f4%A4#7I#oz#!U#fZ.K#$Le&Le&~t#,($#@&22*32*42*52*62*_!@O%#72*HS#!_#[c@;t@ts@c_+82*>D&OA$.B#/7+$c$vo@#p@Oh Ku v6 z6 hp #; +4]+b=#Xv+W_@oK@W-&x2*(8%S8&'t#rO.6P+~V.mb RY+y2**{ mb z2*kb =[*t0 (|*Z[*Z[*N|*W~*4S&!**A2*dW TU ui _e.x*$vv+2&$X@$X@$x*$x*${h&{h&~h&~h&~h&~h&~h&>S%>S%>S%>S%>S%>S%>S%>S%>S%ZQ.&, >S%x*$u3$x*$%' nh.|m.xc+5A.{! {! {! ]! 5A.{! ]! ]! 5A.5A.Ea+Ea+Ea+;~ ;~ ;~ 6j+y$$y$$*$@*$@'g@;~ ;~ 6j+y$$y$$*$@*$@=|$=|$=|$u3$Y@$3&$PC#PC#PC#_c$@y#[R@e:&-|&d:&uV@0@@{**L8@5=+8' $.@c> 8' 6j+6j+A_@A_@A_@A_@4!$4!$q9+jy.]$@)> )> ]$@jy.q9+jy.]$@)> i~ i~ i~ Yt.]! 5A.h]@h]@v]#:{+:{+u]#u]#v]#v]#v]#v]#v]#v]#v]#v]#G|@G|@T_+T_+$(+$(+$(+$(+Ea+Ea+Ea+Ea+Ea+Ea+Ea+v]#pK+S>+9&+PS@M8@h]@:{+';$Ea+xc+q9+dl.dl.q9+QL+A_@PC#3]&`E&`E&`E&O4%#u%]1%#u%#u%#u%#u%#u%#u%#u%Y@$6j+$(+xc+{! {! xc+5A.8g.5A.5A.5A.5A.5A.5A.5A.5A.6j+'g@9Y+9Y+9Y+Lh+;~ ;~ *$@*$@y$$y$$6j+;~ ", "kb.mI.lI.'K.'K.'K.'K.M/.'K.lI.lI.<].<].'K.:j.A^.&_ $% |% &) &) |% 9c 0' 0' |% |% $% $% &) &) &- &% ^* ^* ^* &% &- &- Q_ ^{ ^{ ^{ &- &% &% &% %% ~% d( d( d( %% 5% f% 5% 5% 5% 5% 5% 5% 5% 5% &- &- &- &- &- &- &- &- Q_ Q_ Q_ Q_ Q_ Q_ Q_ Q_ 4% %% d( ~% 4% 5% %% d( v% v% v% v% v% v% v% v% Q_ Q_ Q_ Q_ Q_ Q_ Q_ Q_ =] Q_ &% &% ^{ y% y% Q_ Y_ Y_ Y_ Y_ Y_ Y_ Y_ Y_ =5 =5 o3 o3 Y_ Y_ t% t% f% f% f% f% f% f% f% f% v% v% v% v% v% v% v% v% QB@af.*_ R_ R_ *_ af.QB@6v@4=+QB@af.af.QB@4=+6v@X_ X_ X_ A^.A^.0c 0c 0c =_ A^.7v@7v@X_ A^.7v@)i+@[+QB@*_ *_ QB@6v@6v@4=+QB@QB@QB@QB@QB@QB@QB@QB@&5 &5 &5 &5 &5 &5 &5 &5 &_ ~_ &5 W_ {_ {_ W_ &5 I> I> I> I> l3 -J.-J.-J.j}+j}+pD&Zl@l5+$y#hP.$y##9.s3.;H.5v@5v@;H.s3.<4 s3.s3.;H.5v@5v@;H.s3.cp.l#@pD&B2*DM+C2*+2*D2*E2*F2*S5.G2*H2*I2*J2*`~*8}%Yd.,[*AU%^<*'[*)[*![*U{*.}*.}*X'*X'*X)*Y'*B}*B}*3+$-z@CU.V##MX.MX.=1@|)#@h+@*+|f+R2@wy+wy+3)#+B$+B$+B$|0#|0#|0#|0#&c$&c$pr%pr%pr%)]$(a$(a$(a$)]$YJ#HK$8o@dD$dD$dD$CM#Vk$RA$RA$RA$*c$Wk$!U#!U#!U#N[#4d$A4#'7$Bj$)g$7F$(R#-c$-c$Dj$_a$_a$@d$,p$,p$Ej$Ej$Ej$a9$a9$a9$cN$cN$Ej$,p$qw$_a$5G$5G$Dj$@d$Qj$Qm#!k#!k#8e#9e#9e#9e#zM@5Z+~K@6G+6G+~K@F@@!K@!K@Q,+6=@1G+1h#~k#K2*-2*xp#=h%=>+R,+BM@%/$(H$-L$|#%S,@4G+1V#L2*RN+M2*Do$N2*O2*bu.}8.;y&i9.[>#6U+Iq.Uw@Pm.~_*}(*P2*Q2*R2*O}*S2*j$#]|@>b@-! *E 1C%-! -E }g -E -! -E *E =E GD%GD%GD%GD%GD%GD%GD%GD%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%GD%GD%1C%1C%GJ%TH%Qw /0@<|@cP@8r @-#/7+Mj#Nj#iE$c7%]q$OX#4w+ns$(1&^ +gZ.`]$k^#+l#uy+uy+aa@Vt+9k#||+z1#A1#0T+5w+b~#b]+T=$qo@j2$MJ@NJ@p>#-a$L{$'Q#[7&8|%F:*3{*o4&j5&^ +lS$@/$fh$8R+=`$..@k8$XH$T2*U2*V2*W2*fz%X2*~i$bx@rn&@5@!+`2* 3*.3*K!#+3*@3*t|+#3*hm%=`+>`+(-@LD@B`#[W.*x%*e#tK@hN$KB@97@K&#'9@rq@b1%Ts$Sv Sv y~$q<+m8 l8$KJ%cb%z7%J&#@{#uC$+{#;y%fs$fs$.J$=v$l3%=>#nY#Q_+k.@Pk l8 Ok .G@o!$;g$Uv%Va&Wv%~x%M1*$3*02*%3*2q&|N%4Q%4Q%pM%pM%g`%D|*O[*&3*_M i_*i_**3*=3*0^&R-*#H&#H&~P -3*;3*>3*,3*'3*5,.,'.xx.JT.|(*u1*)3*Xq k9$^m&!3*a%$~3*{3*]3*^3*8f%sW%nn%/3*kP+6h+71$SO@ea%7y%o2*p2*q2*q2*r2*r2*(3*(3*_3*_3*:3*2$$<3*n{$oI+S%>S%>S%>S%>S%~h&~h&~h&>S%>S%>S%>S%>S%>S%>S%>S%&, {h&>S%X@$x*$x*$X@$$.@y$$Ea+5A.]! ]! ]! 5A.5A.{! {! ]! 5A.Ea+xc+$(+$(+;~ ;~ ;~ 6j+y$$y$$y$$*$@6j+6j+6j+6j+6j+y$$y$$y$$=|$=|$u3$u3$Y@$3&$PC#PC#PC#_c$@y#@y#-|&d:&~n#OZ@y*${**A<$5=+8' $.@c> 8' ;~ ;~ A_@A_@A_@A_@|3*|3*q9+jy.]$@6g+6g+]$@jy.q9+q9+jy.6g+)> )> )> ]$@Ea+5A.h]@h]@v]#v]#v]#v]#v]#v]#v]#v]#v]#v]#v]#v]#v]#$(+$(+xc+xc+Ea+Ea+5A.5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+u]#PS@]%@PS@u]#u]#M8@,&+5A.Ea+jy.q9+q9+jy.^x#U/@_c$'W+`E&B#@`E&'W+#u%+d+#u%Y@$#u%Y@$#u%Y@$#u%Y@$'g@xc+xc+{! {! xc+Ea+be+5A.5A.5A.5A.5A.5A.5A.5A.;~ ;~ ;~ Lh+9Y+Lh+;~ y$$y$$y$$6j+6j+;~ ;~ ", "Mv.Mv.kb.lI.'K.M/.x3&6e.M/.'K.lI.<].'K.mI.uk -_ $% 0' |% &) &) $% 0' 0' 0' 0' 0' |% |% |% |% &- [! S& C& C& C& S& [! L) L) L) [! [! [! S& &% 4% -H.-H.-H.-H.R_ *_ g% *_ *_ *_ *_ *_ *_ *_ 5% T$ T$ T$ T$ T$ T$ T$ T$ t% t% t% t% t% t% t% t% ~_ &) $% $% &_ ~_ &_ $% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ t% U@ U@ U@ U@ U@ U@ U@ * U@ {@ {@ U@ 2% 2% U@ 2% 2% 2% 2% 2% 2% 2% 2% .* .* 2% 2% 2% U@ U@ t% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 n3 n3 n3 n3 n3 n3 n3 QB@af.*_ R_ R_ *_ af.QB@4=+4=+QB@af.af.QB@4=+4=+X_ X_ X_ A^.A^.0c 0c 0c 0c X_ 7v@7v@A^.A^.7v@)i+)i+7v@A^.A^.X_ 7v@X_ A^.X_ X_ X_ X_ X_ X_ X_ X_ W_ W_ W_ W_ W_ W_ W_ W_ &) &_ n3 W_ {_ ;b.;b.;b.fL.fL.fL.I> l3 l3 l3 l3 aq.aq.l5+$y#$y#$y#hP.$y##9.cp.[3+[3+[3+[3+cp.#9.[3+cp.#9.#9.#9.#9.cp.[3+{t.Zl@Wh@XO+C2*-r&13*o`#23*S5.33*H| 43*J2*t$$I-@Yd.-7#}U+53*W|*VD.63*RY&.}*.}*X'*X'*X)*Y'*B}*B}*3+$-z@CU.MX.MX.MX.Ub+})#Ar+Ar+@*+|f++B$+B$+B$@ +|0#|0#|0#|0#&c$&c$sD$sD$/9$/9$4v$4v$7v$qr%qr%80$D#$=7$Vk$CM#CM#CM#RA$RA$jm$jm$*c$]m$]m$]m$]m$]m$N[#4d$A4#'7$Bj$)g$7F$(R#Cj$-c$Dj$Dj$_a$_a$,p$,p$c8$c8$im$im$a8$a8$a8$,H$Ms$Rj$Rj$>b$5F$5F$=c$S5+M1#Qj$[{#[{#!k#vp#9e#9e#9e#iX+XK+DI+6G+6G+6G+8G+DD+lX+=B+3R+C@@xI+d0#73*~k#<<*x)+5G+~K@FO$$K$.@%x;@Q)@,K@iX+yx#1}*KE%83*93*03*a3*b3*c3*A(*/G&$@@:^.Qm.(l.Qm.&=#U:*d3*R%+e3*f3*g3*c,*I,#|g $p@Fu *E =E i0$=E }g =E GD%1q&4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%*L%*L%*L%GJ%Xw Lv vR@<|@s[@x`#m>@X]$xc@tK@i($c7%Zo$zx$]8$ns$/1&(1&L$+vy+25%+l#uy+{B+oX+e~@ c%dH#z1#A1#0T+Y)+h$+{_&O8@qo@j2$MJ@~Q#pl%=i#c]%ZX.^ +cK%8v$9v$17$O#%J8%y7%}7$O:+>9@3|+sZ@[ %0,%h3*i3*j3*o=&si&v5%k3*(w$09@A=@#q+%.E#%l+OK$lT$'f#;n%o4#Yo$qX+ki@6 @J1#oZ@gX+7=@4G+5&@hF$}{#pw$&6$,b$z4#6d$B4#f4%C4#7I#f&@Zz$RA$&u$&u$VR$k^#m3*h_+n3*DQ%#|%B_%o3*MK%h4+p3*w|+]b#q3*r3*Ou@s3*bq@t3*V)*vO.Cr+H)+9x$,-#e<#5%%GT#97@},%vc+zg@tc+`F@${#,=%E*$TU%6K#BV#XI$:)#C(@Co+LZ@|0 /T#cv%n<+u3*Wi Sg Tj {Z#CN {c$6'$}C%^x%v3*w3*v3*w3*d3&x3*d3&O=&|N%*L%GJ%$B%FD%6C%W}&i_*aE%X.${ $X.$3$*8|&By@y3*5u@z3*A3*B3*C3*D3*E3*n_.J/*p;.8'%F3*G3*H3*[C ;p o<+I3*J3*Ob$K3*L3*M3*N3*O3*S~@/=%4m@sf+_u+qk+8m@^`#qt&FZ$FZ$,e%gx$.z&.z&P3*P3*a1*Q3*R3*2N&n{$^'$:o+^V+^V+^V+{G+q;@U_@b$@qy+u)+/_+/_+)-+c[+c[+c[+z@@z@@fD+FD+(P+}R+#U,@.@#;(@' +c)+aZ.Le@[3*S3*T3*Ro$v@*s@+/R@c_@3A #J&Af U3*k{ *[**x =[*t0 (|*Z[*'<*u3&W{ 7+*U~%c1*O|*=# 5A.=~@u3$vv+2&$u3$2&$w*$Eo+x*$X@$X@$%' >S%>S%~h&~h&>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%%' X@$x*$x*$u3$y*$'g@5A.Ea+Ea+xc+Ea+Ea+5A.]! 5A.5A.Ea+xc+$(+T_+T_+5A.5A.Ea+Ea+Ea+xc+xc+xc+xc+xc+xc+Ea+Ea+Ea+Ea+6j+=|$u3$u3$u3$3&$3&$_c$_c$PC#_c$;>#;>#~n#ks#MK +R@y*$q)@OU+VS+ZW+:{+:{+f!+]! ]! 6g+6g+]$@jy.QL+QL+jy.jy.]$@6g+6g+]$@jy.jy.jy.jy.]$@]$@]$@jy.q9+T_+Ea+v]#h]@h]@h]@h]@M8@M8@v]#v]#v]#v]#v]#v]#v]#v]#Ea+6g+6g+6g+)> )> Yt.Yt.]$@]$@]$@]$@]$@]$@]$@Ea+M8@VS+(4%PS@US+';$'> p: 5A.5A.]$@jy.jy.]$@Fu#6g+ok.*$@{y%*$@{y%y$$3&$;~ +d+'g@+d+'g@+d+'g@+d+'g@be+Ea+xc+{! {! xc+xc+]! 5A.5A.5A.5A.5A.5A.5A.5A.'g@y$$*$@6j+Lh+9Y+;~ |m.;~ ;~ ;~ ;~ 'g@'g@", ":j.kb.uk kb.m` <].*_ x3&-H.lI.m` <].-H.lI.oG.|% 0' 8c 0' &) &_ &) |% 8c 8c 8c 0' 0' 0' 0' !% ^{ [! S& C& C& C& S& S& L) L) [! [! [! [! [! &- 5% R_ R_ R_ R_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ $% T$ T$ T$ T$ T$ T$ T$ t% t% t% t% t% t% t% t% n3 &_ &) &_ n3 n3 ~_ &) ~_ ~_ ~_ ~_ ~_ ~_ ~_ Y_ t% U@ U@ U@ U@ U@ U@ U@ .* U@ m@ m@ 2% .* 2% m@ 2% 2% 2% 2% 2% 2% 2% 2% .* 2% 2% 2% U@ U@ m@ m@ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 n3 n3 n3 n3 n3 n3 n3 QB@af.*_ R_ R_ *_ af.QB@4=+QB@QB@QB@QB@QB@QB@4=+A^.A^.A^.A^.A^.A^.A^.A^.0c X_ l.7v@A^.A^.X_ l.)i+ l.7v@X_ X_ X_ A^.0c X_ X_ X_ X_ X_ X_ X_ X_ {_ {_ {_ {_ {_ {_ {_ {_ &_ ~_ n3 &5 W_ {_ {_ {_ w4.w4.fL.fL.l3 w% w% x% (s.(s.l5+l5+l5+l5+o4@s2@cp.cp.cp.[3+[3+cp.cp.cp.[3+cp.PI.Hu+Hu+PI.cp.[3+aq.aq.{b+Wh@V3*C2*W3*X3*23*Y3*Z3*`3* 4*Rt k%@|A+[:*UZ@AO mX%z}*.4*+4*/<*.}*.}*X'*X'*X)*Y'*B}*B}*g>@-z@CU.MX.CU.CU.h/+=1@tc@Ar+Ar+@h+W_#@ +@ +@ +|0#|0#|0#|0#&c$&c$sD$sD$/9$/9$4v$4v$7v$qr%c/$c/$L[#=7$L[#Vk$RA$RA$RA$*c$*c$]m$]m$]m$%u$ln$%u$ln$N[#4d$A4#'7$Bj$)g$7F$(R#Cj$Cj$Dj$Dj$Dj$_a$Ej$Ej$c8$c8$c8$im$%K$a8$a8$Ms$nw$>b$Sj$=c$6F$*I$ln$>b$a9$Qj$[{#[{#!k#vp#9e#9e#9e#iX+XK+BM@6G+{K@or&w)$mq@O)@,B+w)+xD+T.@3%$@4*C@@C@@3 @8G+W.@GO$$K$#@%+:$3 @R)@jX+37$h<##4*$4*%4*&4**4*>z+ o 2I%*;4*>4*^r@c,*|c#8v -! =E 4Q%4Q%GD%1C%]V%3,*GD%4Q%4Q%4Q%4Q%]V%]V%]V%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%*L%*L% O%-z -E tG :e kl $y QM.Gh+TO$NQ$SH#Uz$,]$a/$C/%;a$<7&99$3w+25%.l#=t@Tx#Tx#8Z+_v@7_#z1#A1#FC$Y_@h$+,4*O8@[8$*e#j2$F[#~Q#[3%7%%w;%'Q#y7%7v$Ms$09$09$>b$*c$M[#:-+ek@#o+&h#]q$):%'4*)4*!4*{1&R4${E$~4*)7@,v@Vi+#q+T;@58+dE#b~+>/+>/+EJ$;G$,O$IL&f}%iR$ 7@{x${x$M3&M3&3U&$e&=t$l3*{4*3s%}}*=.&)E&!E&Rs&!E&^m@pB+!!@l/+_%+gq#0T+Zk#UY$E:%YJ$YJ$YJ$GT$]4*U~$Yx%5Z.WX.<{#oZ@}V+7=@7=@4G+5&@}{#u_%47$,L$!g$Wy$B4#/^%C4#fE#d=@f&@>>+M[#4v$c/$0x$}!$B/+^4*VY%/4*[h#mA$m|+SJ@[a+B~@by$h4+1x#P8+(4*_4*:4*<4*[4*;q$~_$lH@>}&T2@|v@4&#Pw#0L#{Q#{Q#b]@a]@a]@5O#(B+Y`%OP.1-+0#&0#&&N@R$+NG.IW.y^&}4*8%+cv%Ij&s1%4z+2r@=H$ML%w]&$]*OL%;)&OL%;)&OL%;)&OL%$]*w]&x]&D|*g`%FD%$B%FD%7C%QL%QL%9^&3$*)P { $8|&jY&|4*14*24*34*44*54*64*t&.K#+Qo+jj+n;.bR#];*74*L}*'5.84*94*}_$04*a4*b4*c4*d4*e4*6>@PG+4m@Et+9>@ew+kc@Ae@/t#/t#W6$W6$,e%gx$.z&Q&$WM$`1*f4*5K&g4*n{$m{$^'$lm+Ln+$w+-'@{G+U_@)B+_T+qy+u)+f~+/_+/_+c[+(|+(|+fD+fD+fD+fD+Kl+Kl+}R+@w+dr+dr+sI+sI+pI+pI+qe@bi@GZ@lc#lc#fi+fi+Xl+Xl+Xl+Xl+ei+ei+ei+ei+ei+ei+gr+ec@XH@v~@v~@v~@v~@5X+5X+km+km+:o+:o+~G+~G+~G+er+hp+[1@hp+hp+^V+(G+/G+)B+|G+ur+#k++B+>w+>w+#B+up+vr+ur+p;@[a@rX@ne#5k@ec@te@te@te@bi@7k@xb#&n#pq#Pn#}&@}&@}&@}&@}&@p=$p=$eK@eK@tI+tI+tI+tI+tI+tI+eK@eK@p;@oe#7X+:x@gY#H6@0$@Z.@be#8&@EM@EM@6&@E+$8$@/w+R.+R.+e[+:|+I:+G$+_/+c^#+>#+>#U,@; +.@#;(@>P+k:+ug@n'@h4*i4*j4*k4*l4*uf@u|@3=.K`+#J&dF.U3*m4*kb =[**x }d /|*'<*'<*Z[*3S&7+*W~*TU Z4.7 xc+=~@x*$2&$u3$x*$2&$Eo+2&$=|$u3$x*$X@$%' >S%~h&~h&>S%>S%>S%>S%>S%>S%>S%>S%X@$X@$%' %' X@$x*$=|$%.@9Y+]! Ea+$(+$(+$(+xc+Ea+$(+$(+$(+$(+$(+xc+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+xc+xc+$(+$(+xc+xc+Ea+5A.5A.]! u3$u3$u3$x*$3&$'W+_c$_c$_c$_c$uV@uV@ks#MK :5@nA+y*$q(#OU+VS+ZW+u]#:{+ZW+{! {! )> 6g+]$@]$@QL+QL+jy.]$@]$@]$@]$@]$@]$@jy.6g+6g+]$@]$@jy.q9+q9+T_+xc+v]#v]#h]@M8@M8@ZW+ZW+v]#v]#v]#v]#v]#v]#v]#v]#6g+6g+6g+)> )> Yt.Yt.Yt.]$@]$@]$@]$@]$@]$@]$@Ea+f!+V!+V!+q)@u]#:{+'> _y 5A.5A.6g+6g+6g+6g+Fu#6g+jy.xc+y$$Ea+6j+5A.;~ ]! Lh+{! Lh+{! Lh+{! Lh+{! w8.5A.xc+]! {! xc+$(+Ea+5A.5A.5A.5A.5A.5A.5A.5A.'g@y$$/{ *$@'g@9Y+6j+/{ 'g@'g@'g@'g@'g@Lh+", "%% m` vk uk vk :j.d( l` d( :j.d( -H.4% -H.~% 0' 8c 9c 8c $% &_ &) |% 0' 0' 0' 0' 0' 8c 8c ,' Q_ L) S& C& C& C& C& C& [! [! [! [! [! [! L) ^{ 5% *_ *_ *_ *_ *_ R_ R_ *_ *_ *_ *_ *_ *_ *_ *_ $% $% $% $% $% $% $% $% &_ &_ &_ &_ &_ &_ &_ &_ &5 ~_ &) &_ n3 &5 ~_ &_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ Y_ t% U@ U@ U@ U@ U@ U@ U@ .* 2% m@ U@ .* * 2% m@ 2% 2% 2% 2% 2% 2% 2% 2% .* .* .* 2% 2% U@ U@ U@ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 n3 n3 n3 n3 n3 n3 n3 QB@af.*_ R_ R_ *_ af.QB@QB@QB@QB@4=+4=+QB@QB@QB@A^.A^.A^.A^.A^.A^.A^.A^.A^.7v@ l.7v@A^.0c X_ 7v@7v@ l. l.7v@X_ A^.0c A^.X_ X_ X_ X_ X_ X_ X_ X_ {_ {_ {_ {_ {_ {_ {_ {_ W_ W_ &5 &5 &5 &5 &5 &5 w4.w4.fL.fL.l3 w% w% x% {t.{t.Zl@Zl@pD&pD&Fv+Fv+[3+cp.cp.cp.cp.cp.cp.[3+[3+cp.PI.Hu+Hu+PI.cp.[3+':+aq.{b+B2*n2.[D+n4*o4*p4*q4*Z3*`3* 4*Rt }8%wF+r4*n;%^I@V|*z}*.4*+4*/<*.}*.}*X'*X'*X)*Y'*B}*B}*g>@-z@CU.MX.CU.&h#li@Ub+tc@tc@tc@Ar+D)+W_#W_#@ +|0#&c$&c$&c$sD$sD$sD$sD$^q$4v$&u$&u$7v$qr%}0$qr%jm$L[#*c$L[#*c$*c$*c$]m$ar$=c$=c$=c$nw$=c$Hs$%u$Di$4d$A4#'7$Bj$)g$7F$(R#Cj$Cj$^m$Dj$Dj$Dj$Ej$Ej$qn%qn%c8$c8$%K$%K$Ms$Ms$nw$>b$Sj$]m$*I$/v$jm$ar$Dj$a9$b8$b8$b8$c9$d9$d9$lF$lF$kF$jF$bN$/'$T!$w)$9=@=9@6o@|=@!w+)w+np+| %A@@B@@*>+x;@DO@_^$!_%_^$CD+~-+hX@2 @u_%Tx#*R#s4*t4*u4*v4*w4*x4*6! xk lo.3o.y4*z4*A4*!T D+.!T B4*>G.C4*D4*E4*F4*G4*F,#Ed#RT@;! tG *E }g -! -E =E 1C%1C%GD%4Q%4Q%]V%]V%]V%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%g`%g`%8'&iy%wt {a ll xo =l V2@PH#TO$VJ#:0$Tz$@B$)Q#6X%o)%<7&98$PX#`]$Jn#~ +=t@~ +i#Yx%Gz$7 @H4*1Z@{_&T=$H)+4&#IB$5O# .@aT+&K$@/$A3%)]$ar$y4#N;$ni$eD$B4#~I$IL#BM#K6@I4@xC$I4*J4*K4*k!&G@+i@*L4*M4*ax@e9@/u+Z5+x=@2(@=3@Ld$Ld$!x$~x$H#*8'*8'*@-& 7@{x$ v$M3&M3&=d&>c&l3*(b&4s%3s%V}*}}*i|*t:*oP&{^*H*$:+@4a+D|+['+]B+L$+<7&CB$Qs%T8&)X$Ng%.I%A1#B%%1|+2S#N;${^#gX+7=@T,@r<@3G+CI+_P+*6$,L$y4#6d$B4#B4#/^%C4#fE#fE#X_#W,@M[#4v$po%Vm#xN%N4*]Y+x_+vZ+O4*F^@F[+84+b4+P(#t3#C=@h2$P4*r6@Q4*R4*S4* G%T4*U4*V4*nb#v}%2_+o~+Y@+Z@+t{%t{%Ls&N]$-Q+/k#W4*.d$b~##$#eY.aT.~N.aF.J!%}N.lB !}+va#8m&(<%|g$w]&}:&X4*}:&X4*1q&E|*1q&X4*}:&X4*]V%5>&]V%5>&g`%Y4*W}&]$&]$&^$&=!*0^&Z4*`4* 5*#H&.5*+5*@5*#5*$5*%5*&5**5*k(.=5*p_.f/.LT.Vb.9k.]C.-5*;5*>5*,5*'5*)5*q~+c7%!5*~5* G$N3*q6#t$@6i@V1+&I@!-@*7@ED@8$@I@@8$@9$@9$@qg@pg@5~#y$+Ox#Px#6Y#xU# 5@_/$_/$ q+!G+SA+-'@]G+gK@)B+|G+ur+qy+u)+f~+f~+f~+(|+Q0+(|+fD+QK+5T+z@@PK+PK+}R+@w+nI+nI+ZM+^P+qe@qe@kg@se@GZ@lc#lc#fi+fi+Xl+Xl+Xl+*k+On+On+On+On+On+On+1(@/a@XH@|T@|T@v~@v~@5X+[R+:o+:o+~G+~G+~G+gp+cr+gp+hp+jp+N2@N2@by+rD+nD+Nb+sD+e0#~i@ew$SW$_x@Lt+ L+fy+ur+p;@u=@jV@:G+6m@ec@te@te@te@bi@7k@xb#&n#pq#Pn#}&@}&@}&@}&@}&@p=$p=$eK@eK@tI+tI+tI+tI+tI+tI+eK@eK@eK@eK@ N+:x@gY#*9@0$@Z.@be#8&@EM@EM@6&@E+$I@@/w+R.+R.+:|+/w+f[+I:+_/+_/++>#+>#U,@U,@; +.@#hg@F&+m9@n'@h4*{5*%E#]5*K5$^5*u|@3=.K`+hl k{ kb *[*=[*=[**x }d /|*'<*N|*][#oQ&!**-x F{.!g+9 Ea+S%u3$=|$x*$=|$u3$x*$X@$%' >S%~h&~h&>S%>S%>S%>S%>S%>S%>S%>S%x*$x*$X@$%' X@$x*$u3$0@@Lh+]! Ea+$(+T_+$(+xc+Ea+Kh+Kh+G|@$(+xc+Ea+5A.]! xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+xc+xc+Ea+5A.5A.]! u3$u3$x*$x*$'W+'W+fd%fd%_c$PC#uV@OZ@MK MK MK &($c> q(#PS@V!+M8@u]#u]#ZW+{! ]! )> )> 6g+]$@^x#^x#]$@]$@]$@jy.jy.]$@]$@]$@)> )> 6g+]$@]$@jy.jy.xc+xc+:{+v]#v]#h]@M8@M8@ZW+v]#v]#v]#v]#v]#v]#v]#v]#jy.jy.]$@]$@6g+6g+6g+6g+]$@]$@]$@]$@]$@]$@]$@Ea+ZW+q)@9&+q)@ZW+'> ZW+v]#5A.5A.6g+6g+6g+6g+Fu#6g+]$@NM+5A.ko.]! 13+{! 13+]! ko.]! ko.]! ko.]! ]! w8.Ea+$(+]! be+Ea+$(+xc+5A.5A.5A.5A.5A.5A.5A.5A.'g@'W+B#@{y%Y@$+d+3&${y%^b+^b+^b++d++d++d+", "4% ~% d( vk .h..h..h.d( +h.vk d( %% 5% 4% %% 0' 8c 9c 8c $% &) $% |% |% |% |% |% 0' 0' 0' !% Q_ L) [! C& C& u& C& C& S& S& [! [! [! L) L) ^{ 4% R_ *_ *_ *_ R_ -H.l` *_ *_ *_ *_ *_ *_ *_ *_ $% $% $% $% $% $% $% $% &_ &_ &_ &_ &_ &_ &_ &_ n3 &_ &) &_ n3 n3 ~_ &) &_ &_ &_ &_ &_ &_ &_ t% t% U@ U@ U@ U@ U@ U@ U@ .* 2% U@ 2% * fd 2% m@ 2% 2% 2% 2% 2% 2% 2% 2% * * * .* .* 2% 2% 2% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 n3 n3 n3 n3 n3 n3 n3 QB@af.*_ R_ R_ *_ af.QB@af.QB@4=+4=+4=+4=+QB@af.0c 0c 0c A^.A^.X_ X_ X_ X_ 7v@)i+7v@A^.0c A^.7v@A^.7v@)i+ l.X_ A^.A^.X_ X_ X_ X_ X_ X_ X_ X_ X_ W_ W_ W_ W_ W_ W_ W_ W_ {_ {_ &5 n3 n3 n3 &5 &5 fL.fL.fL.I> l3 l3 l3 l3 l#@l#@pD&pD&pD&pD&Fv+Fv+[3+[3+cp.#9.#9.cp.[3+[3+[3+cp.#9.#9.#9.#9.cp.[3+':+-J.M2 21.' .&R+p2.o4*p4*/5*c6+!Z+7V+fG+U}%wF+(5*.=+^I@V|*_r%@`&63*wQ$.}*.}*X'*X'*X)*Y'*B}*B}*g>@)m+CU.CU.&h##o+d_+h/+Ar+Ar+tc@tc@D)+W_#@ ++B$&c$&c$&c$&c$sD$sD$sD$sD$(a$(a$7v$7v$7v$7v$8v$8v$CO#jm$*c$Wk$!U#ar$ar$]m$>b$>b$Ms$Ms$Ms$Ms$Rj$Rj$Di$4d$A4#'7$Bj$)g$7F$(R#8F$8F$^m$^m$Dj$Dj$a9$Ej$qn%qn%qn%c8$4($%K$Rj$Rj$>b$Sj$Tj$ar${m${m$*c$Tj$Dj$a9$b8$b8$b8$c9$d9$d9$kF$lF$lF$lF$/H$%/$/'$&n%u!%TK$Bq@Rx#hy+@B+Xn+rp+wD+S.@4 @mq@Tm#)_$)_%+W$,T@9G+>T@zI+2R+1T+e~@z[+_5*:5*<5*[5*}5*|5*$L )= %x+y4*!T z4*;G.15*OK.25*y4*A4*74*35*45*55*65*75*85*Cv@;! sG -! -! }g 1C%=E i0$i0$1C%GD%4Q%4Q%]V%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%g`%g`%g`%f`%ho&(x%`v%0|$0A%Rv Ts$;1@Sq@h#@>I@C[#8M@'/#)=%)Q#0T+CA$}7$rr%K#$dN#^f#}/+}/+Ux#yI$d!@j|#~}@Gz$7 @95*^W._B@i2@n[+4&#{Q#-{#Fi$B[#{($f2%4V+=7$Wk$_{#a=#_m$%R#ps$a)#G1#D4#OA#2z@A4#B+%u$%Ks$;M$05*t@$rz%a5*hK@d9@{u+&E+x=@31@*3@io@#w$&w$I#*Pp$b5*uo$.r%yV#)r$)r$2r$M3&$e&>c&Y2*Y2*3s%U}*V}*V}*c5*}}*/n$9M&gp%ES#lN$F6+A]+dx@gi$(;%b!$G3$)($[#+d5*l+&DT#g^@dN#@d$!k#4Z+kX+|V+T_@T_@3G+}V+*6$BT$y4#Di$B4#/^%/^%F1# v@ v@Z_#Z_#=7$Zz$4v$K#$Vm#xN%N4*]Y+I~@XG+e5*x;#2A#@J+Om#m/$e&$x6#f5*4>%g5*h5*KU#i5*k<#'<+n_+j5*1$*0x$k~$R.$Vl$)($K]$K]$k5*k5*l5*)^*QD@m5*[-@-q$q^*n5*vW.HR.zL.LR.ck#nJ#+Q$gy%=f$7E$5>&pM%7C%GJ%7C%g`%21*Y4*5C%g`%5C%g`%6C%pM%6C%6C%21*5C%QL%^$&X<*=!*4,*X.$o5*Fo&p5*q5*r5*s5*t5*u5*v5*w5*Iu.L{.x5*y5*h<.uc.z5*A5*B5*C5*D5*E5*7M#F5*G5*H5*a4*I5*J5*K5*kM%W~@M_@Et+W1+VA+q8+&N++:$CD+<^#I@@8V@8V@ci@Ae@5~#y$+i-$Nx#6Y#nW#4_$_/$4_$Ip#cr+]G+]G+]G+gK@U_@_T+}T+qy+qy+f~+f~+f~+Q0+Q0+Q0+5T+5T+vI+[=@y@@uI+ay+ay+nI+dr+rI+rI+4k@4k@re@se@_1@fi+fi+fi+Xl+Xl+ei+ei+Gg+Gg+._+*k+*k+._+Gg+-:@X4@OS#MU#MU#,:@WH@:R+5X+er+er+~G+gp+gp+#w+Ft+/G+ip+gr+0X+Jt+rD+Nl+t&@sD+]/+e0#~i@ew$SW$SW$Lt+tp+#k+VH@eK@}G+69@2+f[+_/+_/++>#6y++>#+>#U,@; +H4@F&+m9@n'@|7@/o@L5*M5*N5*lb%$V.Pu Ue K`+k{ kb kb l5 l5 *x }d /|*'<*N|*'1#oQ&U~%Uh+b~%Uh+k xc+Bj.X@$X@$~h&~h&x*$x*$>S%x*$X@$X@$%' >S%>S%~h&~h&>S%>S%>S%>S%>S%>S%>S%>S%X@$X@$X@$X@$X@$X@$X@$$.@;~ Ea+xc+$(+$(+$(+xc+xc+Kh+G|@T_+$(+Ea+]! {! {! xc+xc+xc+Ea+Ea+Ea+5A.5A.xc+xc+xc+Ea+Ea+Ea+Ea+Ea+x*$x*$x*$X@$'W+{y%fd%fd%_c$PC#OZ@OZ@ks#ks#~n#|3*c> q(#PS@V!+M8@d #u]#ZW+5A.]! )> )> )> )> .d+.d+6g+]$@jy.jy.jy.jy.]$@6g+)> 6g+]$@]$@jy.]$@]$@5A.xc+:{+:{+:{+v]#v]#v]#v]#v]#v]#v]#v]#v]#v]#v]#Ea+q9+q9+q9+jy.jy.]$@]$@]$@]$@]$@]$@]$@]$@]$@]$@Ea+h]@x}*pK+q)@8e.9e.h]@23+xc+Ea+6g+6g+6g+6g+^x#jy.[y+cI+NM+ko.13+13+ko.ko.NM+NM+NM+NM+NM+NM+NM+NM+w8.xc+G|@5A.be+]! xc+xc+5A.5A.5A.5A.5A.5A.5A.5A.Y@$Y@$3&$3&$'W+3&$Y@$+d++d++d++d++d+Y@$Y@$", "&% &% &% ^* !1.l:.}9.&- ^* !1.^* &- ^{ &- ^* |% 8c 9c 8c |% $% |% 8c &) &) $% $% |% |% 0' !% y% 6[ [! S& u& u& u& u& S& S& S& [! L) L) L) Q_ %% -H.R_ *_ R_ -H.m` :j.*_ *_ *_ *_ *_ *_ *_ *_ $% $% $% $% $% $% $% $% &_ &_ &_ &_ &_ &_ &_ &_ ~_ &_ $% &) ~_ n3 &_ &) &_ &_ &_ &_ &_ &_ &_ t% t% U@ U@ U@ U@ U@ U@ U@ .* 2% 2% .* fd fd 2% m@ 2% 2% 2% 2% 2% 2% 2% 2% 5[ 5[ fd fd * * * .* ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 n3 n3 n3 n3 n3 n3 n3 QB@af.*_ R_ R_ *_ af.QB@af.QB@4=+6v@6v@4=+QB@af.0c 0c 0c A^.A^.X_ X_ X_ X_ l.)i+ l.A^.0c A^.X_ -_ A^.)i+)i+7v@A^.X_ 7v@X_ X_ X_ X_ X_ X_ X_ X_ &5 &5 &5 &5 &5 &5 &5 &5 W_ &5 n3 n3 n3 &5 {_ ;b.I> I> I> I> l3 -J.-J.-J.l#@l#@pD&Zl@Zl@l5+hP.hP.|5+[3+cp.#9.#9.cp.[3+|5+cp.cp.[3+|5+|5+[3+cp.cp.-J.l3 m3 `^ z) ng O5*:|*7H.V6.P5*Q5*R@$fG+-n+fl R5*E9+S5*mX%W|*A}*![*U{*.}*.}*X'*X'*X)*Y'*B}*B}*g>@)m+CU.CU.&h##o+d_+li@@*+@h+Ar+tc@D)+W_#+B$3)#&c$&c$&c$&c$sD$sD$80$80$Q'$Q'$qr%7v$*u$*u$8k&8k&CO#ln$ar$Tj$,Z#Sj$>b$>b$Ms$Ms$a8$%K$4($bv$bv$N)$Di$4d$A4#'7$Bj$)g$7F$(R#8F$8F$5G$^m$^m$Dj$a9$a9$qn%qn%qn%qn%4($4($Rj$Rj$Sj$=k$~}%Tj$jm$jm$M[#1r$Dj$a9$Ej$Ej$b8$c9$d9$d9$5($d9$WL$WL$~J$)I$/H$F@@k9&T5*U5*z^* 3%hy+Lt+rp+vD+xD+4 @mq@Tm#2%$CY&{]$,T@ZK+x)+zI+[V+fX@U4$U,+S)@W0+n'+HM$V5*W5*X5*UL Y5*e8.OK.;G.y4*;G.D+.e8.y4*25*O:*>G.74*Z5*`5* 6*.6*+6*ir#bP@ 9 Y:@sG i0$*E *E =E i0$1C%GD%GD%4Q%pM%6C%6C%6C%6C%6C%6C%6C%6C%6C%6C%5C%5C%W}&W}&f`%ly%9;&9;&9;&0;&&T&-0@oP%uo@(5@s'@Vs@XJ.M#$_T#&q&L{$6X%}7$km$oo%T4$J3$J3$w4#gm@Pj#Lu@t8+L6@^B+-T.(X@@6*_B@i2@n[+9x$={#gs$>v$5Y+Uj$tD$QB$k<&D#$/{#G4##6*$6*.p$Wi&%6*a)# A$E4#x4#BT$d9$GO$+W$J.%&6**6*=6*iK@#I@fb#`I+S;@5}@4}@4}@ v$ v$uo$-6*;6*>6*)r$Sp$`u$Ew$|s$E5&}2*$e&3R&3R&Qs&Qs&=.&=.&7e#-/*-.&BT%LG&C6@|h#/J+c(%j5*H:&g_+[n$1<+I/+e*+c)*s0&Vm#j[+4($!l$iX+YK+|V+uj%W{@< @3G+4%$BT$,b$Di$4d$Wy$}C#}C#OA# v@{M#|C#Y}&A+%Zz$Q'$fZ.,6*xN%'6*)6*Z(#!6*~6*Mm#hF&6e#!K$CD$9Z$]C%T!#S~@{6*]6*^6*/6*n3$c4+(6*%#@6$$ko&k3*)Y&_6*D#*:6*c)*`Z$<6*[6*}6*A*+>B#|6*16*V-+4|+u}@|6$[H$A[%26*!x%36*l_*-5%n!$FD%9C%`^&9C%RL%TL% '*46*r(*56*SL%TL%RL%8C%`^&`^&]$&/$&aE%aE%5,*{ $eS$a.#66*76*86*96*06*a6*b6*nY c6*d6*e6*2+_/+c^#6y+6y+,[+6y++>#+>#kI+hg@2X+4m+O{@h;@p6*q6*H3&wG.yX@Pu Ue K`+I5 kb =[*A*@l5 *x *;@/|*'<*][#a~%oQ&b~%Z4.b~%J#* . Kh+y$$u3$x*$~h&~h&x*$x*$~h&>S%>S%>S%>S%>S%~h&~h&~h&>S%>S%>S%>S%>S%>S%>S%>S%~h&>S%X@$x*$x*$X@$>S%zi.|m.$(+xc+xc+Ea+Ea+xc+xc+xc+xc+Ea+Ea+5A.5A.5A.5A.$(+xc+xc+xc+Ea+5A.5A.5A.Ea+Ea+Ea+Ea+Ea+xc+xc+xc+x*$x*$X@$X@${y%{y%fd%fd%PC#PC#OZ@OZ@~n#d:&e:&2]&$.@9&+q)@V!+M8@d #d #M8@Ea+Ea+6g+)> )> Yt.):+):+6g+]$@jy.q9+q9+jy.]$@6g+]$@jy.q9+dl.q9+jy.]$@5A.xc+:{+:{+u]#u]#u]#u]#d #v]#v]#v]#v]#v]#v]#v]#Ea+q9+(w.(w.QL+QL+^x#^x#^x#^x#^x#^x#^x#^x#^x#^x#]$@:{+x}*9&+PS@'> '> h]@';$$(+xc+]$@6g+6g+]$@QL+q9+J; yM+'U.Zh@Zh@Zh@ks@'U.'U.'U.'U.'U.'U.'U.'U.l7 8g.$(+Kh+Ea+8g.be+5A.Ea+5A.5A.5A.5A.5A.5A.5A.5A.3&$^b+PF++d+{y%B#@Y@$P~ +d++d+Y@$Y@$3&$3&$", "!1.^* &- &- &% !1.l:.y% &- ^* ^* &- &- ^* }9.~% d( vk +h.~% ~% d( vk 5% 5% 4% 4% %% ~% ~% &% y% 6[ [! S& u& u& u& u& S& S& S& [! L) L) 6[ Q_ ~% -H.R_ R_ -H.l` :j.uk *_ *_ *_ *_ *_ *_ *_ *_ $% $% $% $% $% $% $% $% &_ &_ &_ &_ &_ &_ &_ &_ ~_ &) $% $% &_ ~_ &_ $% &_ &_ &_ &_ &_ &_ &_ t% t% U@ U@ U@ U@ U@ U@ U@ .* 2% 2% * 5[ fd .* m@ 2% 2% +# 2% +# 2% +# 2% }| ui :] 5[ O) fd O) * ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 n3 n3 n3 n3 n3 n3 n3 QB@af.*_ R_ R_ *_ af.QB@g% QB@4=+6v@6v@4=+QB@g% =_ 0c 0c A^.A^.X_ X_ 7v@X_ l.)i+ l.A^.0c 0c X_ 2b 0c )i+)i+7v@A^.7v@)i+X_ X_ X_ X_ X_ X_ X_ X_ v% v% v% v% v% v% v% v% v% f% f% f% v% fL.8H.cl+f% w% v% l3 -J.-J.':+':+x% j}+{t.aq.(s.ym.y}*y}*|5+[3+cp.PI.PI.cp.[3+|5+#9.[3+|5+ET&ET&|5+[3+#9.-J.w% x% Y^ 4!.ni }D+r6*7H.IB +m@N!$s6*t6*T`+Ca u6*Rz lT@v6*w6*zC.V)*#~*.}*W)*T3*X'*X)*Y'*Y'*Y'*[-+#o+li@li@#*++x@tc@@h+@*+@*+D)+D)+D)+@ +3)#N@%&c$&c$&c$&c$&c$&c$sD$sD$PX#PX#Q'$7v$&u$8k&x6*jO$*I$Bj$)g$Di$y4#y4#S5+-c$^m$Dj$Ej$,p$qw$&6$37$Bb#S5+4d$5d$Bj$Bj$)g$7F$(R#8F$8F$5G$^m$^m$^m$Dj$a9$J$+qn%qn%qn%4($4($%K$Rj$09$90$90$=k$=c$%u$ar$T4$Dj$a9$Ej$Ej$b8$c9$c9$c9$d8$d9$!l$~l$tr$hm$WL$AM@'8%y6*z6*@o%$n%6o@)w+vD+w)+,B+O)@m5$6&@O&$^=$TQ@cB@x)+x)+zI+TK+5%$oZ@N;$gm@~I$4)#K>+A6*B6*C6*AE%T. *=.x% G6.Gr.In.Iq.D6*E6*[(*F6*G6*>5*H6*I6*|D&J6*K6*d:*{t L6*Ti@H,#Cj@Ux 'Y$Nw o($Pv yz%&L%aK%6C%6C%6C%6C%6C%6C%6C%6C%6C%6C%6C%g`%f`%f`%D|*1q&N=&0;&Y;*M6*nt&b; V3@d9%l8$:)#b_#pZ.9R+: +`+${($-i#1/%89$km$oo%,Z#y4#'M$'p$X_@Z|#Lu@t8+L6@Wt+-T.Vb+(X@Po#[^#q~+4&#-{#;{#T-$4P+_g$'(@qX+9Z+HK$C)+os$:m$$6*mn$;G+ B$St$ps$a=#e'#->+;K@6&@]k#x)$.z&:G&N6*q@$O6*@s+`I+N<@5}@M<@Y4@{x$ v$(n$P6**G$*G$LG&}b$|b$B'%|b$=r$ho%Q6*ho%ho%go%{^*`E$NG&>E$R6**Y%+O%1s$F4@:h+p4$B9%S6*#3*k|+*`+z]+/<+LK%T6*^#*^R#_P+YP$E@@2 @>T@W{@U6*T_@dX+}V+4%$N+#,b$z4#)7$d=@D1#X_#J_%Z_#|C#Y}&u)%i%%M[#fZ.a!$}!$dF%V6*W6*.H#~6*Ja${h#Vr#sM@5;$P*$M$%Q]#u #tQ#7N#X6*Gp#Y6*Z6*wG+|h#Wd+62+`6*/'@.>@TX+ 7*R=&c'&u+&!^*u9%`4%.7*+7*@7*#7*$7*SN#,&*q%$h/*%7*Va&{x%|C%;)&&7*3,* O%56*`,*`,*`,*56*TL%RL%SL%SL%SL%RL%`^&`^&*7**7*9^&5,*{ $`d&=j&)s&=7*-7*;7*>7*,7*'7*)7*fy ]6.#>.!7*~7*{7*]7*]7*^7*/7*q7@^.@(7*_7*OK.,$@QK.V3*W :7*<7*o6*[7*}7*l<#h8%9}@9y+lI+1V+L@@0=@^K@+:$nX+e[+;m+&N+(w+J@@b~@d^@z$+4L#XA#$7@.5@Ip#Ip#mQ&ZM+~G+]G+SA+jD+jD+jD+SA+SA+gK@gK@U_@U_@U_@)B+)B+b$@uI+y@@|$@ep+ep+6X++w+~P+dr+oI+er+5X+29@%7@4k@te@:1@<1@#}#<1@h8$|}@,.$&3@p)+q)+]]+2}@dE#0~+8G$q0+2(@lt$lt$w^@31@%}@S;@,P+Ht+gp+gp+#w+Ft+~P+~P+dr+_V+_V+_V+/G+)B+|G+ur+VH@:c@:c@:c@:c@+B+>w+gy+5e@x7%|t#:V+{G+It+fr+5k@te@Y5%Y5%lg@7k@:G+[G+Q;@}G+4=@TY#60#TY#60#60#60#60#=E#=E#3N#3N#3N#3N#3N#3N#p;@eK@|G+_T+ay+(P+H6@P,@L@@Z.@4 @8$@ly+Ln#-4++:$f^@>2+I:+I:+>2+f^@3]+'T@c^#6y+6y+,[+,[+,[+6y+6y+]T+cY#2X+}e%O{@17@x2*eP$re$v@*!#+nB.Ue K`+I5 S] N8 A*@l5 *x *;@/|*'<*][#|7*;1 F{.KY&-x O|*/. ]@+'g@8' 'g@nh.|m.y*$6j+zi.Bj.J> /{ zi./{ zi./{ nh.>S%>S%>S%>S%>S%>S%>S%>S%{h&~h&X@$x*$x*$%' {h&17*Bj.G|@$(+Ea+5A.Ea+xc+$(+{! {! ]! 5A.5A.Ea+xc+xc+$(+u]#xc+xc+Ea+5A.5A.5A.]! 5A.5A.Ea+xc+xc+$(+$(+c> c> $.@$.@x{ *$@*$@|m.6j+;~ U/@U/@4!$f].2]&.b.:{+Ru$v]#)g@M8@m|.d #-V@xc+l7 ]$@Rx.Yt.7}.,v. Z )> %U.jy.|f.q9+[y+]$@Rx.dl.J; Ai.Q] Ai.|f.]$@5A.xc+:{+u]#u]#d #';$';$US+v]#v]#v]#v]#v]#v]#v]#Ea+q9+jy.QL+jy.^x#]$@Fu#6g+^x#]$@^x#]$@^x#]$@^x#]$@d #q(#OU+]%@M8@h]@h]@h]@d #$(+xc+Ea+Ea+xc+q9+dl.9g.)&+bH@'U.l7 'U.}f.NU+}f.yM+}f.yM+}f.yM+}f.}f.=L T_+7P.Ea+w8.8g.]! 5A.5A.5A.5A.5A.5A.5A.5A.5A.y$$9Y+.s.9Y+|m./{ 'g@({ ;~ ;~ ;~ 6j+y$$y$$", "d( d( ~% ~% %% %% %% d( d( d( ~% ~% %% %% %% r: r: r: r: r: r: r: r: r: r: r: r: r: r: r: *- ^{ L) L) [! [! [! S& S& S& S& S& [! L) L) 6[ Q_ %% 4% 5% 5% 5% %% d( +h.+h.d( %% 5% 5% 5% %% %% m` l` l` -H.R_ R_ *_ *_ -H.-H.-H.-H.-H.-H.-H.-H.I> f% 5% 4% 4% 5% f% I> f% f% f% f% f% f% f% y% t% U@ U@ 2% 2% 2% .* .* {@ m@ m@ m@ U@ U@ 2% 2% ]+ j+ $& m* b) .# H. ]+ $& .# $& .# $& .# $& .# &5 I> I> I> I> I> I> I> %% I> a, fL.5% %% f% a, 7v@X_ X_ A^.A^.0c 0c =_ X_ A^.A^.7v@)i+)i+X_ =_ 7v@7v@X_ A^.A^.0c =_ =_ l. l. l. l. l. l. l. l.QB@af.g% g% af.4=+@[+>r+QB@QB@QB@QB@QB@QB@QB@QB@':+-J.w% x% x% w% -J.':+w% w% w% w% w% w% w% w% s3.cp.s3.cp.cp.cp.s3.s3.h% af.4=+6v@6v@4=+af.h% ym.(s.aq.{t.{t.aq.(s.ym.j}+j}+{t.{t.{t.aq.aq.aq.s3.s3.s3.j}+21.' .WF+!<*'; N) |].h|%Bb }k -~.ap Lu+O2$~(+>2%27*37*eP$47*57*j4*%E#67*Ag%e=*aq@x[+R3#Vx#A'#4W.W_#@ +@ +@ +D)+W_#|0#k %k %|0#B%%n~+W,@.*+YJ#HK$1S#HK$4)#K6@3W.,>+4[%M[#ln$ln$%u$%u$Jx$6d$6d$Oe$!g$1h$ni$,b$t!$K1#N1#N1#00$Wx$00$M1#S5+Tj$Sj$Sj$Sj$Sj$Sj$Sj$=c$=c$=c$=c$=c$=c$=c$nw$a8$a8$a8$a8$a8$a8$a8$;u$im$im$im$im$im$im$im$im$a9$cN$sS$sS$cN$a9$,p$&6$_8$_8$_8$_8$_8$_8$_8$iX+RQ@fm$DD+lX+9G+>B+P)@R,@>B+>B+mq@mq@9=@7&@7&@mq@+N$+x=$Bp+s!$P]+k$+dy%*J$3d$4F$-/#-/#G[#N4$F!$Y)+qX+V_#W_#_-+)g$!g$1h$1h$ni$DA#00$nZ@lZ@,K@!K@P)@'8%b=@a&@a$@~P#xU#$R#+s+>]@`4@Z4@+r%qH&.r%4q&Et$d6$B'%_{&Km$+S$9&$7q%7q%xv$x7*{n$y7*z7*S(*A7*Z/*B7*C7*xv$]n$D7*H8%ap$4c$c1@2h+Sd+Nd+~'@u=$*!@<:@w~@4~#Y|#*9@,B+=B+#a@#a@zD+zD+ky+< @T,@7=@o7#eh$DA#BA#GS#B4#3O#I.+2)#8I#}x@8o@bE$CM#RA$1r$te#)'$E7*F7*G7*M~@(V@M>*H7*J`$D=@T%#SX#SX#I7*Z~&J7*K7*K7*L7*M7*N7*b^#-x$}]@[]@i(@YE#{c+^c+rm+.>@K~+O7*)'+,!+P7*xR%Q7*R7*S7*+c%@E#T7*i^@hq$U7*n=*1D&J-&J-&7>&%L%%L%V7*#<*t**W<*}N%}N%he&56*^A Qw TH%TL%=!*^$&/$&3$*W7*X7*tR&Y7*Z7*`7* 8*.8*+8*J%.@8*0=./g+#8*#=.nO $8*%8*y5*&8**8**8*=8*nQ.G].wx.6% &- :] 1G.Y_.-8*;8*>8*,8*fF#'8*)8*!8*S1+6Z+6T+O,@L@@L@@0$@J@@6T+6T+Il+2V+5T+vI+1V+WA++w+OK+@w+nI+]P+YM+NK+^P+[R+er+~G+~G+gp+gp+#w+#w+#w+~G+!G+!G+!G+lm+lm+mI+mI+~G+cr+cr+gp+gp+gp+gp+gp+Ht+Ht+er+:o+:R+F,@G,@,:@+~-+>2+3]+.@#;(@;(@T0+T0+ib#ib#@N+.@#5 @>[+*E#*E#Q2@>[+X.+F&+q[$wX&TN#~8*Gk&8_*{8*|r$[-@xG.nh@c_@W: xW+2^#/:*7,@K: =[*t0 ]8*u!&^8*t^#O~&@.+O|*(:*/8*j$ >( $(+xc+jy.xc+jy.$(+q9+T_+8Y+Kh+dl.$(+q9+T_+1m.7P.0@@x*$%' >S%%' >S%{h&Av&%' %' %' %' %' %' %' x{ 6j+5A.]! ]! 5A.xc+T_+G|@Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+d #S>+d #:{+h]@M8@:{+';$Ea+Ea+]$@]$@]$@]$@]$@]$@R~$L*+L*+%]$%]$-V@)g@)g@0&+RO+V&${'$R~$R~$R~$R~$V&$&A#l7 Zh@ko.2^ NM+ks@@$+5D+@$+80+ko.Zh@NM+ks@}f.'U.cI+2^ ko.ks@l7 yM+bH@NU+}f.Zh@13+80+NM+}f.$(+$(+$(+$(+$(+$(+$(+$(+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+xc+jy.Ea+]$@Ea+]$@Ea+1m.G|@dl.$(+jy.Ea+6g+]! :{+q(#q)@PS@PS@OU+OU+]%@PS@h]@v]#u]#US+US+d #v]#Ea+cI+5A.NM+5A.NM+]! ko.xc+l7 xc+l7 xc+l7 xc+l7 cI+NM+NM+ko.ko.NM+NM+cI+cI+cI+cI+cI+cI+cI+cI+cI+Ea+Ea+5A.{! be+w8.gA gA 5A.5A.5A.5A.5A.5A.", "d( d( ~% ~% %% %% %% +h.+h.+h.d( d( ~% ~% O~.r: 6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.7!.Q_ 6[ L) L) [! S& S& C& S& S& S& [! L) L) L) 6[ %% 4% 5% 5% 5% %% d( +h.d( ~% 4% 5% f% 5% 4% 4% R_ R_ R_ R_ -H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.-H.v% f% 5% 4% 4% 5% f% v% f% f% f% f% f% f% f% y% t% U@ U@ 2% 2% 2% .* .* m@ m@ m@ m@ U@ U@ 2% 2% ]+ H. $& b) b) $& H. G. $& $& $& $& $& $& $& .# &5 I> I> I> I> I> I> I> 4% I> a, fL.5% %% f% w4.X_ X_ X_ A^.A^.0c 0c 0c A^.A^.0c X_ l. l.A^.=_ X_ X_ A^.A^.A^.A^.0c 0c 7v@7v@7v@7v@7v@7v@7v@7v@6v@4=+QB@af.af.af.QB@4=+QB@QB@QB@QB@QB@QB@QB@s3.':+aq.j}+l#@l#@j}+aq.(s.j}+j}+j}+j}+j}+j}+j}+j}+cp.cp.cp.cp.cp.cp.s3.s3.af.QB@7v@ l. l.7v@X_ af.Vl.(s.aq.{t.{t.aq.(s.ym.j}+j}+{t.{t.{t.aq.aq.aq.s3.s3.cp.j}+j}+' .' .!<*L; A* l*.y5.E.@]|.+u%>} (8*_8*7-@L}%P(@UB%:8*j4*L5*%E#%E#Fk&Ag%e=*J-*l^#Vx#z'#6)#5Z.B%%B%%B%%B%%n~+B%%|0#k %k %|0#B%%n~+W,@_-+YJ#1S#k<&k<&2)#NX.BM#K6@4[%L[#jm$ln$%u$8F$6d$(v$(v$9D#St$8D#AA#AA#k7$CA#^N#^N#yA#{^#{^#M1#_a$Sj$Sj$Sj$Sj$Sj$Sj$Sj$=c$=c$=c$=c$=c$=c$=c$nw$%K$%K$%K$%K$%K$%K$im$im$!I$!I$K@2 @5G+R)@R)@DD+x;@x;@x;@mq@mq@mq@9=@x;@=>+7=@wp#7=@BI+BI+}V+eX+D@@5%$]o+<8*[8*}8*}8*|8*18*28*38*48*58*68*~K.&H.78*({.(7*D5*88*ci.mu&98*EM+E+.mg 08*a8*b8*c8*d8*e8*f8*g8*h8*>J%,J%6K%-B%i8*WN%WN%~ $q<$$B%GJ%Kv pM%pM%4Q%4Q%ly%.,*.,*q(*v7*j8*w7*w7*M6*Y;*Y;*Y;*02*1H%q~$_R@${@eq#]V.<|$I+@`a$89$y1#PX#jm$Cj$'M$p=#ZJ#S)@'>+O$+/i@s!$>/#P]+O]+q>#Us@&X#&X#sm#sm#*J$*J$iA%Y)+qX+g~@ZR#B%%Wk$)g$S5+S5+N1#00$vp#zM@[H#fm$P)@O)@b=@=9@<&@(P+L,@hh#.5@Ip#;'$+7@= $qH&OI&WY%4q&Et$='${e%:u%k8*.`#MG&Ur$ok$~X$l8*m8*n8*o8*p8*q8*Z/*r8*B7*s8*P6*Fr%R;%>o$4c$^7@Xp+5h+U1+*s+~-@ew+[o+LF@@w+1N#=E#>w+mr+!w+~w+&B+bX+ky+dX+7=@[ @o7#eh$DA#^N#GS#Jx$3O#r>#J[#8I#}x@8o@Vk$Zz$*c$~}%w1*jE$t8*F7*u8*O~@v8*w8*;-%x8*y8*w6#z8*A8*B8*C8*P'*D8*E8*F8*G8*H8*k1&Z3#*g$N;*fV$nn%hF@X;@q|+s|+1>%R$*}'+7~$I8*J8*K8*L8*M8*eU$N8*BF@.6%O8*o=*-x&;:*P8*P8*P8*P8*Q8*ky%Pv Pv Pv Pv yz%aK%aK%46*56*TH%fB aE%WN%S&&X.$R8*S8*T8*U8*V8*W8*X8*Y8*Z8*/g+7%.nO 7%.6U+jj+La.`8*v0.y5* 9*&8* 9*.9*tL pP#HK@<| `f a:++9*@9*#9*$9*%9*&9**9*=9*P4*{-@eD+(w+_w+L@@L@@a$@b&@d^@y;@QK+QK+QK+5T+z@@PK+ay+ay+@w+nI+sI+{P+YM+NK+^P+[R+:o+:o+:o+er+er+Ht+Ht+Ht+:o+:o+:o+:o+km+km+'P+'P+:o+:o+er+er+er+er+er+er+er+:o+:o+km+'P+,P+T;@x=@19@EZ$EZ$qR${`#yV#cs$Gt$Gt$Gt$Gt$cs$cs$yV#yV#4}@I2@&}@g9@^7@g9@&}@T;@'P+!G+gp+~P+Ft+cr+!P+Ft+ay+z$+d^@X{@6T+6T+(w+(w+(w+K@@K@@*9@*9@4N#5N#-9*8d%uy#eK@[G+Mn+fr+ic@5k@te@se@te@bi@[+*E#*E#Q2@>[+zT&F&+q[$wX&TN#m6+;9*Mu@>9*sY$8T@uL.nh@t| {y 2^#/*@/:*Ac N8 D~ ,9*'9*)9*!9*t^#q^##=+Z4.(:*tq+/* RO+[y+[y+[y+[y+[y+|f.J; J; P] P] J; |f.|f.J; P] G|@;~ X@$>S%>S%%' %' ~h&0, %' %' %' %' %' %' %' x{ y$$Ea+5A.5A.5A.Ea+$(+T_+Ea+Ea+Ea+Ea+Ea+Ea+Ea+v]#u]#x}*x}*q)@M8@M8@v]#d #Ea+Ea+]$@]$@]$@]$@^x#]$@{'$nj$nj$nj$~9*~9*~9*~9*{9*]9*^9*~9*);$);$);$);$NU+yM+ks@Zh@Zh@Zh@ks@'U.ks@ks@Zh@Zh@Zh@Zh@Zh@Zh@yM+'U.ks@Zh@Zh@ks@'U.yM+'U.yM+yM+'U.2^ 80+Zh@l7 xc+xc+xc+xc+xc+xc+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+xc+$(+T_+T_+G|@$(+xc+xc+xc+xc+Ea+Ea+v]#:{+q(#q(#q)@q)@PS@PS@PS@9&+q)@q)@q(#x}*x}*q)@OU+5A.5A.5A.5A.5A.5A.5A.5A.xc+xc+xc+xc+xc+xc+xc+xc+l7 cI+NM+NM+NM+NM+cI+l7 cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+NM+NM+NM+ko.ko.ko.}f.l7 l7 cI+NM+NM+", "d( d( ~% ~% %% %% %% +h.+h.+h.d( d( ~% ~% O~.Lv.H;@H;@H;@H;@H;@H;@H;@6!.6!.6!.6!.6!.6!.6!.7!.y% o^ 6[ L) [! S& C& u& S& S& [! [! [! L) L) L) %% 4% 4% 4% 4% %% ~% d( %% 4% 5% f% f% f% f% 5% g% g% *_ R_ -H.l` l` m` R_ R_ R_ R_ R_ R_ R_ R_ v% f% 5% 5% 5% 5% f% v% f% f% f% f% f% f% f% y% t% U@ U@ 2% 2% 2% .* .* m@ m@ m@ U@ U@ 2% 2% 2% ]+ j+ .# m* m* .# j+ ]+ .# .# .# .# .# .# .# .# &5 I> I> I> I> I> I> I> 4% I> w4.fL.5% 4% f% w4.X_ X_ X_ A^.A^.0c 0c 0c A^.0c =_ A^.X_ 7v@0c -_ 0c 0c A^.A^.A^.A^.X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ >r+@[+4=+QB@af.g% af.af.QB@QB@QB@QB@QB@QB@QB@s3.':+aq.j}+l#@l#@j}+aq.(s.{t.{t.{t.{t.{t.{t.{t.{t.cp.cp.cp.cp.cp.cp.s3.s3.QB@4=+ l. l. l. l.7v@QB@':+aq.aq.{t.{t.aq.aq.(s.j}+j}+{t.{t.{t.aq.aq.aq.s3.s3.cp.j}+j}+' .' .!<*l~ X* Q( /9*N0 /8 (9*(}+;2%_9*[a%-N@:9*1n#'y#<9*%E#%E#%E#[9*EB@}9*Z'*Q8%|k+H!#6)#5Z.n~+n~+n~+5Z.n~+B%%|0#k %k %|0#B%%n~+_-+4[%HK$1S#k<&k<&8I#2)#BM#K6@D#$L[#jm$ln$%u$8F$6d$(v$(v$9D#St$8D#AA#AA#CA#BA#+z$+z$]N#{^#{^#M1#_a$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$4($4($4($4($4($4($c8$c8$)H$)H${J${J${J${J${J$)H$b8$a9$a9$cN$a9$Ej$,p$qw$Ej$Ej$Ej$Ej$Ej$Ej$Ej$[{#Xx$E@@jX+4G+5&@5G+5G+8G+R)@R)@R)@x;@x;@x;@mq@x;@=>+7=@wp#7=@[V+[V+3G+wp#~g$}V+cp+zT&cP$cP$&1@Q3#[s#|9*19*29*39*49*TN 59*~*%5`+Iq.25*69*T:*79*89*6!.ce q!#=& 99*09*.=*a9*b9*c9*d9*e9*f9*NT#U!&dB /A /$&{$&aE%%B%5C%f`%pM%g`%g`%]V%]V%.,*ly%ly%N=&g9*j8*w7*U7*M6*M6*Y;*Y;*02*L1*h9*^m&i9* n+9s%L8&j9*~($x1#7)#> $*c$8F$-c$8]+7P#W,@BM#2|+.+@Wt+rX+P]+O]+3_+q>#T_#T_#;/#;/#*J$*J$iA%Y)+qX+g~@ZR#B%%Wk$)g$S5+S5+N1#00$vp#zM@,K@,T@0G+4 @a&@a&@|R+Kl+yb#gh#4k#Ip#@7@+7@= $= $OI&.r%4q&Et$='${e%aC$Y0@F$$Ts&Ur$ok$k9*l9*m9*n9*o9*p9*s8*q9*r9*s9*t9*H_*YS&0p$|s$V>$K2@bm+y=@A=@y^@y^@nm+0y+(T+eK@[a@|t#>w+!w+$B+~w+#a@ky+ky+dX+7=@[ @7V@gX@DA#^N#Jc&Jx$3O#J[#8I#8I#k<&8o@Vk$RA$Wk$Cb#oc@u9*t8*#%@v9*w9*x9*y9*z9*A9*v6#;<*B9*C9*D9*C8*jn%P'*E9*F9*G9*H9*I9*3S#GR$3S#XO$gq%G5$by$g(*w/+TC%J9*K9*L9*M9*N9*O9*{[#C:*P9*g/*hk@D'$Q9*=c J-&R9*;:*eC%eC%eC%@<*5A&}N%}N%}N%}N%}N%56*56*S9*RL%fB T9*5}*-j&U9*V9*W9*X9*Y9*Z9*`9* 0*[#..0*t&.i<.G].!B&Ma.t0.&$.Ma.nQ.+0*+0*+0*y5*@0*64*+>.#0*=_ >= $0*%0*&0**0*=0*-0*;0**9*>0*p(@K_@16+e[+ny+ny+L@@L@@b&@d^@y;@ry+QK+QK+fD+fD+Kl+(P+OK+OK+@w+nI+ZM+sI+qI+qI+qe@[R+'P+km+km+km+:o+:o+er+er+:o+:o+:o+km+km+'P+'P+'P+km+km+km+km+'P+'P+'P+'P+'P+'P+,P+T;@T;@Z5+Y5+48+M<@{`# 7@ 7@yV#cs$Gt$Gt$cs$cs$yV#yV# 7@ 7@ 7@M<@;]@x=@48+&}@&}@48+T;@,P+lm+~G+cr+cr+!P+!P+cr+(T+z$+d^@b~@6T+J@@(w+(w+_w+Z.@Z.@*9@)~#4N#4N#,0*3,$3P#p;@Q;@69@<9@bi@se@se@te@te@<9@-]@-]@/G+[T+)B+jc@u=@[a@9F$9F$Y{%9F$9F$9F$9F$@p$@p$[a@[a@u=@p;@3P#7X+K,@K,@|R+|R+tr+}=@g~+w)+0~@0~@3R+h~+H,@+N+; +5 @5 @5 @4]+4]+4]+/K@4]+5 @>[+*E#*E#Q2@>[+zT&k:+q[$wX&Ke@bk@;9*Mu@>9*sY$B:&uL.w@%cF.m< Gh |!#Ac Ac D~ Q| ,9*e_#'0*px@*4#)0*!0*Z4.F{. Ma d%$%U.%U.[y+[y+|f.|f.J; J; |f.J; P] P] P] P] J; $(+y$$>S%~h&~h&%' X@$>S%~h&%' %' %' %' %' %' %' x{ *$@$(+Ea+5A.5A.5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+v]#v]#9&+9&+q)@ZW+ZW+h]@:{+5A.5A.6g+6g+6g+6g+Fu#6g+R~$&5$&5$&5$Ru$Ru$Ru$Ru$~0*{0*&5$L*+%]$%]$%]$%]$l7 cI+NM+NM+NM+cI+l7 }f.aH@bH@bH@}f.l7 cI+NM+NM+l7 l7 cI+NM+NM+cI+l7 l7 NM+l7 bH@}f.cI+ko.NM+cI+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+$(+G|@Kh+7P.7P.5A.5A.5A.5A.Ea+Ea+xc+:{+:{+q(#q(#q(#q)@q)@q)@PS@S>+9&+PS@OU+PS@q)@OU+]%@{! {! ]! 5A.5A.Ea+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+}f.l7 cI+cI+cI+cI+l7 }f.cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+l7 l7 }f.}f.}f.aH@aH@bH@l7 cI+NM+", "d( d( ~% ~% %% %% %% d( ~% ~% ~% %% %% 4% 7% Lv.H;@H;@H;@H;@H;@H;@H;@6!.6!.6!.6!.6!.6!.6!.7!.u% o^ 6[ L) [! C& u& u& [! [! [! [! [! [! L) L) %% %% 4% 4% 4% %% %% %% 4% 5% 5% f% f% v% v% v% g% *_ *_ *_ R_ -H.-H.-H.R_ R_ R_ R_ R_ R_ R_ R_ f% f% f% 5% 5% f% f% f% f% f% f% f% f% f% f% y% t% U@ U@ 2% 2% 2% .* .* m@ m@ U@ U@ 2% 2% .* .* ]+ j+ .# m* m* .# j+ ]+ .# .# .# .# .# .# .# .* n3 v% v% v% v% v% v% v% 5% v% fL.I> f% 5% v% fL.A^.A^.A^.A^.A^.A^.A^.A^.A^.=_ -_ =_ A^.X_ 0c -_ =_ =_ 0c A^.A^.X_ 7v@7v@A^.A^.A^.A^.A^.A^.A^.A^.6v@6v@4=+QB@QB@af.af.af.QB@QB@QB@QB@QB@QB@QB@s3.':+aq.j}+l#@l#@j}+aq.(s.{t.{t.{t.{t.{t.{t.{t.{t.cp.cp.cp.cp.cp.cp.s3.s3.4=+6v@ l. l. l. l. l.4=+-J.aq.{t.{t.{t.{t.aq.aq.j}+j}+{t.{t.{t.aq.aq.aq.s3.s3.cp.j}+j}+' .' .!<*L; $ := ]0*uF+N<.X4.^0*;2%q>&xh%7C /0*1n#'y#(0*%E#%E#%E#[9*EB@}9*Z'*_0*A'#H!#6)#5Z.5Z.5Z.6)#6)#n~+B%%|0#k %k %|0#B%%n~+4[%4[%HK$HK$k<&k<&8I#8I#K6@4)#=7$RA$jm$ln$%u$8F$Oe$9D#9D#9D#St$St$BA#BA#BA#P[#.(@Q[#S[#yA#yA#M1#Ej$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$bv$bv$bv$bv$bv$bv$qn%qn%)H$)H${J${J${J${J${J$)H$b8$Ej$Ej$Ej$Ej$Ej$Ej$,p$a9$a9$a9$a9$a9$a9$a9$Qj$/s#| @4Z+gX+CI+R,+yM@r8+2 @2 @2 @R)@R)@R)@R)@R)@[V+7=@wp#7=@[V+[V+3G+kX+v;@T,@zI+ib#.@#; +; +d~@Z5%(J%{u&:0*<0*[0*}0*|0*b3*NI+r;.%j.is@qt+10**o@4I%`d#T}%ve.p;.T>.20*30*40*50*60*{#*70*,6#j[#/Y@^Z#bE%^$&]$&5C%O[*m}*g`%g`%g`%]V%]V%ly%ly%ly%N=&g9*w7*U7*M6*M6*M6*M6*M6*FV&80*K1*WM.kc&OA$NU%5[%h%+F>+3N%@x@Ap+1r$8F$Cj$(R#B)+.*+K6@g~@O]+,/#mo%.+@.+@7 @S2@/n%/n%TI#TI#*J$*J$iA%Y)+qX+g~@ZR#B%%Wk$)g$S5+S5+ni$00$vp#9e#)K@R)@*>+my+Z.@L@@FD+PK+L,@hh#.5@8s#;'$.:$qH&qH&WY%.r%4q&Et$='$g>$aC$M(#Mm$Ts&]t$;@&zv$jt%90*00*4R&a0*b0*Ss&c0*Q(*d0*e0*f0*XS&Ps&A'%Iy+Xr+y=@&q+7(@{V+|$@u)+b$@sD+v=@e0#;w+)w+$B+~w+#a@ky+T_@r<@7=@o7#7V@gX@DA#BA#Jc&Jx$k<&iB@8I#k<&1S#=7$RA$jm$ar$j[+'*@>2*D}*g0*h0*v;#1+@i0*99#:b#69#j0*B9*k0*sW%7L#l0*jn%P'*m0*H9*2_#sQ#3S#2L#U~@8!@[o@B9%n0*u;#$x@vi%o0*p0*q0*r0*mA%k4#16$($%_G&K1*Vv%M(*3(*=c J-&J-&KL%@<*@<*v)&v)&}N%}N%&B%[N% y 0C%gB fB i8*5}*s0*=c&t0*zd#u0*v0*$5*w0*x0*y0*z0*CI #>.us.t&.[>#OE nO t0.La./{.^.@A0*B0*B0*+0*%8*`8*C0*y1%Qw.:5@D0*E0*F0*G0*H0*I0*J0*K0*>0*Sr+c~@~-+Y.@/w+my+K@@L@@0$@b&@-(@d^@y;@fD+QK+FD+FD+(P+K,@ N+(t#Gt+dr+oI+oI+pI+pI+4k@%7@G,@,P+'P+'P+km+km+km+:o+:o+:o+km+km+'P+'P+,P+,P+,P+,P+,P+,P+T;@T;@T;@T;@Z5+Z5+Z5+Y5+Y5+jm+jm+C5%4}@cs$cs$Gt$Gt$Gt$Gt$Gt$yV# 7@ 7@ 7@{`#{`#qR$fY#v~@F,@S;@x=@x=@S;@,P+,P+ok+lm+!P+!P+fp+fp+cr+(T+s<@-(@b~@J@@J@@(w+_w+_w+0&@0&@)~#)~#4N#3L#`k$2N#3P#oe#jV@Q;@7k@7k@lg@Y5%te@5k@<9@-]@-]@/G+/G+)B+u=@[a@@p$9F$Y{%Y{%Y{%9F$9F$9F$@p$@p$[a@[a@u=@p;@eh#7X+:x@:x@:&@:&@tr+}=@g~+w)+0~@0~@3R+h~+H,@+N+U,@X.+X.+X.+5 @5 @5 @5 @4]+5 @>[+*E#*E#Q2@>[+zT&k:+q[$c!@Op+c#@mV$Mu@>9*3!+B:&uL.RD@X} k{ Cg L0*7)@/:*&{ Ba#,9*M0*px@px@N0*IO&O0*TU F{.[@ Js m|.Ov+Ov+[y+|f.J; J; J; J; |f.P] Q] |.+|.+Q] P] $(+|m.~h&{h&~h&X@$x*$X@$>S%%' %' %' %' %' %' %' x{ |m.T_+$(+Ea+5A.5A.]! ]! Ea+Ea+Ea+Ea+Ea+Ea+Ea+v]#h]@q)@q(#q)@ZW+f!+M8@v]#5A.5A.6g+6g+6g+6g+Fu#6g+)g@$]$r)@%]$%]$L*+L*+&5$Ru$&5$L*+%]$r)@r)@r)@35+NM+NM+5A.cI+Ea+l7 $(+}f.G|@aH@G|@bH@T_+}f.$(+}f.xc+cI+Ea+cI+Ea+cI+Ea+l7 {! cI+T_+bH@xc+NM+5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+xc+xc+$(+T_+T_+G|@G|@5A.5A.5A.5A.5A.5A.5A.5A.v]#q)@q)@q)@PS@PS@PS@PS@S>+q(#]%@V!+OU+PS@PS@M8@be+be+{! ]! Ea+xc+$(+$(+xc+xc+xc+xc+xc+xc+xc+xc+bH@}f.l7 l7 l7 l7 }f.bH@cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+l7 l7 l7 }f.}f.}f.bH@bH@bH@}f.l7 l7 ", "d( d( ~% ~% %% %% %% %% %% %% 4% 4% 5% 5% j% Lv.H;@H;@H;@H;@H;@H;@H;@6!.6!.6!.6!.6!.6!.6!.7!.y% o^ 6[ L) [! S& C& C& L) L) [! [! [! [! [! [! %% %% %% %% %% %% 4% 4% 5% 5% 5% 5% f% f% v% v% -H.R_ R_ R_ *_ g% g% g% *_ *_ *_ *_ *_ *_ *_ *_ 5% f% f% f% f% f% f% 5% f% f% f% f% f% f% f% y% t% U@ U@ 2% 2% 2% .* .* U@ U@ U@ 2% 2% .* .* .* ]+ j+ .# m* m* .# j+ ]+ .# .# .# .# .# .# .# .* n3 v% v% v% v% v% v% v% f% v% I> I> f% f% v% I> A^.A^.A^.A^.A^.A^.A^.A^.X_ =_ -_ -_ 0c A^.0c =_ =_ =_ 0c A^.A^.X_ 7v@7v@A^.A^.A^.A^.A^.A^.A^.A^.af.af.QB@QB@4=+4=+4=+4=+QB@QB@QB@QB@QB@QB@QB@s3.':+aq.j}+l#@l#@j}+aq.(s.aq.aq.aq.aq.aq.aq.aq.aq.cp.cp.cp.cp.cp.cp.s3.s3.6v@4=+7v@7v@7v@7v@7v@6v@l3 {t.{t.{t.{t.{t.{t.{t.j}+j}+{t.{t.{t.aq.aq.aq.s3.s3.cp.j}+j}+' .' .!<*,; -$ #@ dz%uF+J] (}+P0*;2%q>&xh%7C /0*1n#'y#(0*%E#27@27@Q0*Fk&R0*qz@x4@|k+H!#6)#5Z.5Z.6)#6)#H!#n~+B%%|0#k %k %|0#B%%n~+4[%4[%YJ#YJ#I4@I4@8I#8I#I4@I4@=7$RA${m$ln$%u$Cj$Oe$9D#9D#9D#St$St$BA#BA#GS#P[#c6$.(@S[#yA#yA#M1#Ej$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$bv$bv$bv$bv$bv$bv$qn%qn%!H$!H$ K$ K$ K$ K$ K$!H$b8$,p$,p$,p$,p$Ej$Ej$Ej$a9$a9$a9$a9$a9$a9$a9$M1#Qj$mZ@M+#7V@BO@]-+i~+i~+5&@5&@5&@2 @2 @2 @2 @2 @[V+[ @eX+[ @[V+[V+:P+|V+Q,+2+e[+&R#6a@Eq@k1@1,$vp&}%+S0*T0*U0*V0*R6.uI.BW G, V$ Gr.hY.T}%W0*X0*f:.uL nO Y0*Z0*%i&`0* a*.a*+a*@a*#a*YC@0.#;k&W.$WN%b|$$B%&E vR@pM%pM%4Q%4Q%ly%|A |A ^*$x3*U7*U7*M6*M6*n=*nt&nt&U7*$a*=A&%7*kc&j4#]V.%a*&a*P-+vD$z9#-&$ *+y4#'M$7F$l~+m~+YJ#g~@Y_@C(%+v@.+@O]+7 @7 @0Z+Ow#9G#TI#*J$*J$iA%Y)+qX+g~@ZR#B%%M[#4d$Di$S5+ni$00$vp#9e#>K@R)@*>+my+K@@K@@QK+1V+LF@ih# q+O3#8)$N<@L2&L2&.r% v$E5&|s$g>${e%aC$M(#l_&F$$;@&8u$qw%jg$Qx%*a*[P%;v%=a*-a*;a*Vu@~x@>a*,a*|2$6[$'a*s6+V8+Sd+:u+T1+Hn+o8+h @O0+[]+_k+!k+tp+)w+w)+,B+0~@W{@2T+kX+5$@7V@7V@gX@L1#2h$Jc&B4#8o@3z@k<&k<&1S#=7$L[#*c$ar$j[+'*@-`+)a*H<%!a*]_%B_%Iv%~a*_b#{a*]a*^a*/a*(a*_a*7L#:a*[+*E#*E#Q2@>[+zT&k:+q[$hk++}@X @ra*Mu@>9*sY$8T@vL.RD@uv%I5 Dg >i&}!#/:*&{ &{ sa*ta*'0*!9*px@4Q.Ou+J#*Uh+@+ )g@{'$8}.Ov+%U.|f.J; P] J; J; P] Q] |.+'].'].|.+Q] G|@|m.{h&0, ~h&X@$x*$X@$%' %' %' %' %' %' %' %' x{ |m.T_+$(+xc+Ea+]! {! {! Ea+Ea+Ea+Ea+Ea+Ea+Ea+v]#M8@q)@9&+q(#M8@ZW+ZW+h]@5A.5A.6g+6g+6g+6g+Fu#6g+13+)g@-V@35+35+f+#f+#R~$R~$f+#35+-V@-V@-V@-V@35+]! 5A.;~ Ea+y$$xc+*$@$(+*$@$(+*$@T_+|m.G|@/{ G|@6j+Ea+6j+xc+y$$Ea+6j+Ea+9Y+5A.|m.T_+y$$Ea+;~ Ea+5A.5A.5A.5A.5A.5A.5A.5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+$(+xc+Ea+Ea+5A.5A.xc+xc+Ea+5A.]! {! {! be+M8@M8@M8@M8@M8@h]@h]@h]@:{+M8@f!+f!+M8@:{+:{+:{+be+be+{! ]! Ea+xc+$(+$(+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+bH@}f.l7 l7 l7 l7 }f.bH@cI+cI+cI+cI+cI+cI+cI+cI+l7 cI+cI+cI+NM+NM+NM+ko.cI+cI+l7 l7 }f.bH@", "d( d( ~% ~% %% %% %% %% %% %% 4% 4% 5% 5% j% Lv.H;@H;@H;@H;@H;@H;@H;@6!.6!.6!.6!.6!.6!.6!.7!.^{ L) L) [! [! [! S& S& L) L) L) [! [! [! S& S& %% %% ~% ~% ~% %% 4% 5% 5% 4% 4% 4% 4% 5% f% v% -H.-H.R_ *_ g% af.af.QB@*_ *_ *_ *_ *_ *_ *_ *_ 5% 5% f% v% v% f% 5% 5% f% f% f% f% f% f% f% f% t% U@ U@ 2% 2% 2% .* .* U@ U@ 2% 2% .* .* .* * ]+ j+ .# m* m* .# j+ ]+ .# .# .# .# .# .# .# o3 f% f% f% f% f% f% f% f% v% v% v% v% v% v% v% v% 0c 0c 0c A^.A^.X_ X_ X_ 7v@A^.-_ -_ 0c X_ A^.0c 0c 0c A^.A^.A^.A^.X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ *_ g% af.4=+6v@6v@6v@6v@QB@QB@QB@QB@QB@QB@QB@QB@':+aq.j}+l#@l#@j}+aq.(s.aq.aq.aq.aq.aq.aq.aq.aq.cp.cp.cp.cp.cp.cp.s3.s3.4=+4=+X_ A^.A^.X_ 7v@4=+w% j}+{t.aq.aq.{t.j}+j}+j}+j}+{t.{t.{t.aq.aq.aq.s3.s3.cp.j}+j}+' .' .!<*|U -$ Z* LC#CF+;9 (}+%(+;2%ua*yh%qK%/0*p!@va*L5*27@27@27@27@Q0*EB@R0*}9*Vx#'m+H!#6)#5Z.5Z.6)#6)#n~+B%%|0#k %k %|0#B%%n~+_-+_-+,>+,>+K6@4)#2)#8I#k<&k<&Vk$Zz${m$ln$%u$Cj$z4#0D#0D#9D#St$os$GS#GS#BA#%R#.(@Q[#S[#yA#]N#]v#Ej$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$4($4($4($4($4($4($c8$c8$!H$!H$ K$ K$ K$ K$ K$!H$c9$,p$qw$qw$qw$,p$Ej$a9$Ej$Ej$Ej$Ej$Ej$Ej$Ej$N1#L1#zA#{^#{^#gX@e'#y)+QU#fX@CI+CI+CI+5&@5&@5&@5&@BI+[ @eX+[ @[V+=>+Q,+s;@3 @*>+my+(w+6T+L@+wr+~B+OF@wa*T6*jo&{E$47%xa*ya*za*Aa*PS.Ba*zW J6 RD Bz@L>@}z.Ca*SE&Da**G p_.Ea*La.LT.&.+Fa*Ga*Ha*Ia*Ja*Ka*:v&*a&5=&'8@d.#&E Kv u1$Nt%i0$1C%hy%|A |A |A N=&P]$M6*M6*n=*La*nt&nt&Ma*Na*K1*Gz%Oa*(}*M[$Pa*'0$Qa*es#'m+K~$dH#U,+/-+(R#B)+m~+:-+g~@T)@,/#F!$Y_@Y_@7 @7 @0Z+Ow#9G#TI#*J$*J$iA%Y)+qX+g~@ZR#B%%M[#4d$Di$S5+ni$L1#00$9e#jX+R)@3 @;B+ny+K@@wI+1V+mm+MF@.q+tG+38+BT#M3&M3&)r$Ft$|s$d6${e%w,$:u%k8*+S$.`#2j$uP%+j$gM%so%Ra*=a*Sa*Ta*Ua*u0$8{$Va*%O&Wa*Xa*;W$,E+qH@]!%{c+t$@M_@7$h4+h/%54+G%%*b*=b*-b*;b*XG%WG%1v@||&>b*m1#Va&36*,b*]*$wt my%I[*&L%&L%9K%GJ%GJ%G'$%R$F'${$&`^&*7*eB /A 5}*m%*'b*)b*!b*~b*{b*]b*0a*^b*/b*(b*_b*H-.=N H-.:b*gA.Do.Lq.Kq.La.Wb.&$./{./{.q$4}@Y4@Y4@Y4@Y4@Y4@M<@M<@fY#MU#,:@G,@G,@F,@F,@F,@'P+'P+ok+lm+!P+cr+!P+cr+~P+}R+s<@b&@O,@J@@e^@_w+my+my+qt$a=@TK$)~#3L#4L#YA#`M+tI+eK@jV@jV@xy#xy#Y5%Y5%lg@se@bi@_G+_G+[T+^G+|G+oe#oe#|t#=E#=E#=E#|t#oe#=E#=E#|t#|t#oe#oe#p;@p;@7X+eh#Aq@Aq@#9@#9@L)@ED+g~+w)+0~@0~@3R+h~+H,@+N+; +5 @5 @X.+X.+X.+>[+>[+4]+5 @>[+*E#*E#Q2@>[+zT&k:+q[$Rr+Q{@j_&ra*Mu@>9*7b*:7& K.2k%7&#m4*Dg >i&}!#Ac Q| Q| 8b*ta*)9*I~*!9*9b*g| dW !g+v R~$f+#7}.Rx.%U.J; P] P] P] J; Q] FA+FA+|.+|.+FA+FA+Kh+|m.{h&{h&~h&X@$x*$X@$>S%%' %' %' %' %' %' %' x{ *$@$(+$(+$(+xc+5A.{! be+Ea+Ea+Ea+Ea+Ea+Ea+Ea+v]#M8@q(#x}*9&+v]#M8@M8@h]@Ea+Ea+]$@]$@]$@]$@^x#]$@l7 R~$R~$R~${'${'${'${'$f+#f+#35+-V@-V@-V@35+v]#'g@;~ 3&$y$$'W+y$$3&$6j+Y@$;~ 3&$y$${y%|m.B#@/{ Y@$6j+'W+y$$'W+y$$3&$;~ ^b+;~ {y%*$@3&$;~ 3&$*$@Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+T_+T_+$(+xc+5A.]! {! {! T_+T_+$(+Ea+5A.]! {! be+M8@M8@M8@h]@h]@v]#v]#v]#v]#M8@f!+ZW+v]#u]#u]#u]#{! {! ]! 5A.5A.Ea+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+}f.l7 cI+cI+cI+cI+l7 }f.cI+cI+cI+cI+cI+cI+cI+cI+cI+NM+NM+ko.ko.13+13+13+13+ko.NM+cI+l7 bH@", "d( d( ~% ~% %% %% %% d( d( d( ~% ~% ~% %% r: r: 6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.7!.&% S& [! [! [! L) L) L) 6[ L) L) L) [! S& S& S& %% %% ~% d( ~% %% 5% f% 4% 4% %% ~% %% 4% f% v% 5% 5% 5% 5% f% f% f% f% f% f% f% f% f% f% f% f% 4% 5% f% v% v% f% 5% 4% f% f% f% f% f% f% f% f% Q_ Q_ Q_ y% y% y% u% u% y% y% y% u% u% u% =] =] M$ t% o3 =5 =5 o3 t% M$ o3 o3 o3 o3 o3 o3 o3 o3 f% f% f% f% f% f% f% f% v% v% f% v% v% I> v% v% g% g% g% af.af.QB@QB@QB@@[+QB@*_ *_ af.4=+4=+QB@X_ X_ A^.A^.A^.A^.0c 0c 7v@7v@7v@7v@7v@7v@7v@7v@g% af.4=+6v@6v@4=+QB@af.QB@QB@QB@QB@QB@QB@QB@QB@':+-J.w% x% x% w% -J.':+-J.-J.-J.-J.-J.-J.-J.-J.{t.{t.{t.{t.{t.{t.l3 l3 I> v% ~_ &_ &_ ~_ n3 I> x% w% l3 -J.-J.l3 w% x% w% w% l3 l3 l3 -J.-J.-J.s3.s3.cp.j}+j}+' .' .!<*|U n# X@ FE#V9 N<.(9*P0*q>&0b*:n%Ba.iH#wC.<9*%E#27@ab*ab*27@Q0*Fk&R0*^8%T6#VF@z'#H!#5Z.5Z.5Z.5Z.n~+B%%|0#k %k %|0#B%%n~+_-+.*+3W.ki@<-+BM#NX.2)#}x@}x@CM#Zz${m$CO#%u$Cj$z4#z4#z4#Oe$!g$-b&Jc&Jc&N;$2h$9-%9-%]v#Qj$Qj$o&%Ej$Ej$Ej$Ej$Ej$Ej$Ej$Ej$cN$cN$cN$cN$cN$cN$cN$cN$Ej$Ej$Ej$Ej$Ej$Ej$b8$b8$d8$d8$jF$jF$jF$jF$jF$d8$c9$_8$47$47$47$c9$b9$bq$c9$c9$c9$c9$c9$c9$c9$L1#:8$a=#DA#DA#N+#B2$1O#y_$e'#fX@fX@fX@CI+CI+CI+CI+BI+[ @wp#7=@=>+=>+Q,+s;@ny+Z.@L@@0$@a$@a$@gY#gY#Px#`M@;3@w$+~v@bb*U_%cb*db*eb*fb*gb*hb*~Z.ib*jb*=.#{6.kb*|y.lb*.9*mb*A0*nQ.H:.nb*2`.Tu+ob*pb*qb*rb*sb*tb*{N%An#c~ <|@Eu Eu Eu }g *E +y hy%|A ly%N=&N=&N=&q(*L^*L^*L^*k}*k_*Na*ub*_}*vb*wb*>t#xb*yb*zb*i'+.7#.{@dH#U,+VH#(R#B)+>>+:-+']$L6@'/#5w+qq@Y)+3_+3_+0Z+Ow#TI#;/#*J$*J$iA%Y)+qX+g~@ZR#B%%D#$4d$Di$S5+ni$L1#00$9e#jX+w;@9G+*>+4 @Z.@Jl+z@@LF@MF@.q+O3#38+N<@L2&L2&:n$`u$d6$e6$l7$>y$t8$e,%I*$%G$3j$2:$gM%>h%kg$Ab*Bb*Cb*Db*Eb*Fb*Q##Jq$2{$;F#C #x;$Gb*Hb*@R#F=@Ib*{a$QL$%f+bs#hi+A5$B5$ji+sr+[#b{$X|*TC%$`+Jb*DQ%Kb*N3*Lb*Mb*Nb*Ob*Pb*7M%Qb*Rb*Sb*Tb*+b*Ub*+b*Vb*w8*Wb*Xb*^'#Yb*Zb*`b* c*.c*+c*)N.mm$+7$_m@@c*#c*}h$O=&$c*A'*|A -z 9K%}N%[N%Ww Xw $B%i!$zd%OO%gQ%#Q$3$*{ $=j&w@*7a*%c*&c**c*=c*-c*;c*>c*,c*y0*Y'&x5*7/*%8*q7@p7@p7@wB&+/w+(w+_w+K@@0$@b&@-(@z$+s<@Kx#G6@:&@|R+(P+Kl+ay++w+cr+cr+nI+oI+:R+:R+29@ZM@`H@29@WH@WH@WH@v~@v~@29@29@29@WH@WH@WH@,:@,:@,:@;]@;]@,:@,:@;]@%}@I2@w^@E4@E4@E4@E4@E4@E4@E4@E4@E4@E4@3(@zb$Iu$Iu$zb$>q$Y4@fY#4}@4}@4}@Y4@Y4@M<@M<@>:@%}@x=@S;@G,@F,@:R+km+km+ok+!G+cr+Ft+cr+Ft+[+*E#*E#Q2@>[+zT&k:+q[$Rr+_c*A^%:c*+S>+:{+h]@h]@h]@$(+$(+q9+q9+q9+q9+(w.q9+$(+u]#u]#u]#:{+:{+:{+:{+:{+v]#h]@h]@h]@h]@v]#:{+Y@$3&$3]&{y%`E&3&$#u%+d+#u%Y@$#u%Y@$#u%Y@$O4%3&$#u%3&$3]&{y%`E&'W+O4%Y@$Fc%3&$3]&3&$#u%Y@$3]&`b&y$$xc+xc+xc+xc+xc+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+T_+T_+$(+$(+xc+Ea+Ea+5A.$(+$(+$(+xc+Ea+Ea+5A.5A.v]#v]#:{+:{+u]#u]#d #d #:{+v]#h]@:{+d #d #:{+h]@5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.l7 cI+NM+NM+NM+NM+cI+l7 cI+cI+cI+cI+cI+cI+cI+cI+13+13+ko.ko.ko.NM+NM+NM+ko.ko.NM+NM+cI+l7 ", "d( d( ~% ~% %% %% %% .h.vk vk vk +h.+h.d( Lv.r: 6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.7!.^* C& S& [! L) 6[ 6[ o^ 6[ 6[ L) L) [! S& S& S& %% %% ~% d( ~% %% 5% v% 4% %% ~% d( ~% %% 5% f% I> v% v% f% 5% 5% 4% 4% f% f% f% f% f% f% f% f% 4% 5% f% I> I> f% 5% 4% f% f% f% f% f% f% f% f% Q_ Q_ Q_ y% y% y% u% u% y% y% y% u% u% =] =] =] M$ t% o3 =5 =5 o3 t% M$ o3 o3 o3 o3 o3 o3 o3 o3 f% f% f% f% f% f% f% f% I> v% f% f% I> I> v% f% *_ g% g% af.af.QB@QB@4=+>r+4=+g% g% af.4=+4=+4=+7v@7v@X_ A^.A^.0c =_ =_ l. l. l. l. l. l. l. l.QB@4=+6v@6v@6v@QB@g% R_ QB@QB@QB@QB@QB@QB@QB@QB@':+-J.w% x% x% w% -J.':+-J.-J.-J.-J.-J.-J.-J.-J.{t.{t.{t.{t.{t.{t.l3 l3 I> f% &_ &) &) &_ ~_ &5 5% x% l3 -J.-J.l3 x% j% w% w% l3 l3 l3 -J.-J.-J.s3.s3.cp.j}+j}+' .' .!<*@Z A* o# LC#1~ P(%>} 5< 2c*xh%3c*KF%_k%4c*L5*Q0*ab*ab*ab*ab*Q0*MD@DB@p9@;z@WF@'m+H!#5Z.n~+n~+n~+n~+B%%|0#k %k %|0#B%%n~+.*+W,@ki@J.+'>+<-+s[$NX.}x@}x@CM#Vy${m$CO#%u$=c$7F$z4#z4#Oe$!g$-b&Jc&mw$K1#,b$lw$9-%Qj$Qj$]v#o&%Ej$Ej$Ej$Ej$Ej$Ej$Ej$Ej$cN$cN$cN$cN$cN$cN$cN$cN$a9$a9$a9$a9$a9$a9$b9$b9$d8$d8$jF$jF$jF$jF$jF$jF$d9$_8$47$37$47$c9$b9$bq$_8$_8$_8$_8$_8$_8$_8$Wx$<{#H_@a=#CA#DA#N+#2O#Rs@e'#e'#fX@fX@fX@fX@CI+CI+BI+[ @wp#7=@=>+$vi$D`#4v#tW#x$+-T&+F&a~*5c*6c*7c*8c*9c*0c*58*ac*bc* F+<#.cc*ca*wB&%8*d5@t+.dc*ec*z5*fc*gc*e/.Qx&hc*ic*jc*kc*lc*#a*w! kI@<|@$4@-! }g r_$hy%|A ly%N=&N=&N=&X;*L^*L^*k}*k}*N=&v7*mc*m;%_G&nc*i,$oc*pc*qc*.7*gD@@x@f~@B)+8]+8]+7P#U`$,>+O:+g~@Gz$'/#iA%qq@S2@3_+0Z+/n%TI#;/#*J$*J$iA%Y)+qX+g~@ZR#B%%D#$7I#N[#Di$1h$,b$00$vp#E@@>K@x)+0G+4 @0&@Jl+fD+M)@t9#s9#%!@>]@`4@+r%+r%`u$Ew$5c$8a$>y$q0$8c$8c$U6$O4&3j$sz%(9%LQ%Ab*rc*sc*tc*mo&q]$}D#uc*(t$vc*'^#um&yf+SO#]=% T@I<%I1%&b$ue$Y6@bs#A5$B5$b$-t@&u%wc*j5*z]+G[+w;#xc*yc*zc*Ac*N3*Bc*Cc*Dc*Ec*Fc*Gc*Hc*Ic*Jc*Kc*Lc*u6#Mc*Nc*_s$Oc*Pc*Qc*Rc*Sc*Tc*} +Uc*Ts%'E MK$Vc*__*G|*X]**E Fu aK%u**}N%@D%&B% y {$&#Q$se%`!&A)*Wc*&P&Xc*=t&Yc*Zc*`c* d*.d*+d*@d*#d*$d*%d*Y'&7o&'C /7*/7*&d*A0*t+.t+.'4#^.@Y<.%}.Y0*&$.jX.t1.cD./{.I:.-S.OE hJ%j0&|4 4l%*d*=d*-d*;d*>d*,d*(c*8c#G/%)[+3]+Q)@Q)@;B+e[+(w+0&@=9@a&@a$@-(@z$+!B+yb#pe#:x@|R+(P+PK++w+A$+fp+!G+sI+Ht+:R+F,@29@%7@`H@XH@WH@v~@v~@v~@29@29@%7@%7@WH@WH@WH@,:@,:@;]@;]@;]@WH@,:@;]@%}@I2@w^@E4@E4@E4@E4@E4@E4@E4@E4@w^@w^@`0$zb$Iu$Iu$zb$21@M<@19@21@21@4}@4}@Y4@Y4@Y4@>:@w^@48+x=@G,@F,@:R+km+km+mI+!G+Ft+Ft+Ft+~P+@w+7X+c&@b&@0$@e^@e^@my+my+my+Ku$Ku$TK$,'$3L#Vv#C`#Gt+~P+:V+Q;@Q;@xy#8k@lg@se@xc%Y5%xy#ne#ne#jc@jc@p;@VH@VH@o;@o;@o;@VH@ur+ur+Y+$Y+$-:#-:#o;@o;@VH@VH@7X+eh#Aq@,N$Bq@#9@L)@ED+g~+w)+0~@0~@3R+h~+H,@+N+;(@/K@/K@4]+5 @5 @X.+X.+4]+5 @>[+*E#*E#Q2@>[+zT&k:+lT+Rr+_c*A^%:c*&6F.GZ.7&#I5 Cg 'd*M,*7)@S] K: )d*}c*I~*!d*)9*~d*1)&dW !g+C. d%$-V@z<.8}.%U.J; Q] Q] P] J; P] |f.[y+Ov+Ov+[y+|f.G|@y$$>S%~h&~h&%' X@$>S%~h&%' %' %' %' %' %' %' x{ 6j+Ea+$(+$(+$(+Ea+5A.{! Ea+Ea+Ea+Ea+Ea+Ea+Ea+v]#v]#9&+pK+pK+u]#v]#h]@v]#T_+T_+dl.dl.dl.dl.h)@dl.xc+v]#v]#h]@h]@M8@ZW+ZW+:{+v]#v]#h]@h]@v]#:{+x{ 3&$3]&`E&`E&`E&O4%Fc%]1%O4%#u%#u%Fc%]1%@g%@g%@g%Fc%O4%3]&`E&`E&3]&O4%Fc%#u%O4%O4%#u%]1%#u%`E&>n.*$@$(+$(+$(+$(+$(+$(+$(+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+$(+T_+T_+T_+T_+T_+xc+xc+xc+xc+$(+$(+$(+$(+u]#d #d #';$';$US+US+23+d #u]#u]#d #';$d #h]@f!+Ea+Ea+5A.5A.5A.5A.]! ]! 5A.5A.5A.5A.5A.5A.5A.5A.cI+NM+NM+ko.ko.NM+NM+cI+cI+cI+cI+cI+cI+cI+cI+cI+=L @$+13+ko.cI+l7 }f.bH@NM+NM+NM+NM+NM+NM+", "~% %% d( $~.$~.d( 5% ~% ~% ~% d( +h.+h.vk *=.j% 5!.5!.$9.j}+j}+5!.H;@H;@P7.P7.6!.5!.5!.$9.`^ &% [! L) 6[ o^ 6[ 6[ 6[ L) [! S& C& C& C& C& S& ~% ~% ~% ~% ~% ~% ~% ~% f% 5% 4% %% %% 4% 5% f% ^* &% &% &- ^{ ^{ Q_ Q_ Q_ Q_ Q_ y% y% y% u% u% f% f% f% f% f% f% f% f% f% f% f% f% f% f% f% f% x% x% x% x% x% x% x% x% 7% 7% j% x% l3 -J.':+':+v% v% v% v% v% v% v% v% v% v% v% v% v% v% v% v% I> I> I> v% v% f% f% f% d( d( ~% 4% 5% f% v% I> h% <4 ;H.5v@5v@;H.<4 h% <4 <4 <4 <4 <4 <4 <4 af.X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ af.af.af.QB@4=+4=+6v@6v@4=+4=+4=+QB@QB@QB@af.af.I> I> I> I> I> I> I> I> I> 4% 5% a, cl+w4.v% l3 ph#ph#ph#ph#ph#ph#{D {D si si ac ac ac ac ac ac f% v% fL.w4.w4.fL.v% f% v% v% v% v% v% v% v% v% .l.5v@cp.j}+l#@0Y+!W+al+); '!.j3 {d*Ba W9 X4.5< ]d*ua*:n%KF%_k%4c*p6*.2*^d*^d*ab*ab*^d*MD@DB@DB@;z@VF@z'#z'#'m+'m+H!#5Z.n~+n~+n~+n~+n~+n~+n~+n~+_-+_-+:-+YJ#4)#4)#2)#2)#l7#K^$i%%Vy${m$ln$=c$>b$Di$7F$7F$7F$'M$'M$J3$J3$^m$^m$sS$sS$SQ$SQ$RQ$RQ$[{#[{#Qj$Qj$Qj$Qj$]v#]v#o&%]v#]v#Qj$Qj$[{#00$00$BT$BT$BT$BT$BT$BT$Wx$Wx$!k#!k#9e#9e#iX+iX+WK+WK+pw$pw$d8$5($d9$!l$~l$~l$d9$d9$d9$d9$!l$!l$~l$Qj$N;$aD#8D#St$BA#AA#DA#N+#B2$B2$oZ@oZ@BO@BO@BO@2R+VK+[V+[V+[V+=>+B+4 @0&@*9@H6@G6@Kx#4v#$7@kh%qg%]P+59@tW#g9$e^#/d*l>+R4$Q7%(d*.$&_d*:d*@}d*b5@^.@v0.gV.|d*1d*2d*3d*4d*5d*B5*c[.ob*6d*7d*qb*8d*9d*rR#Si@h$#a~ tG -! xt hy%|A r_$uK $]*3(*.,*q_$0d*ad*3(*ML%e/*v3*gy%$R$bd*i`%qB cd*dd*zI$}T${P#f~@'7$U,+8]+B)+>>+_-+Z]$g~@tD$tD$O]+O]+3_+3_+Ow#Ow#9G#9G#T_#*J$)Z#iA%qX+g~@A1#N@%4[%7I#A4#Bj$eD$2h$00$hX+E@@)K@2T+>B+ny+_w+g~+QK+yb#ih#.q+O3#;'$+7@qH&M3&:n$`u$}b$5c$l7$q0$O1$T2$S.%M1$3H$8b%vj%dQ$pm%A=&4x#ed*nA#Rw$T7$v6&fd*gd*hd*id*k *jd*kd*s+#eF@ld*+}%W8@Y6@1P##v$@v$ki+St+|=@0G+>B+ZK+!K@)K@)K@4Z+u_%Z&+&6$,L$y4#S5+ar$Wk$L[#i%%i%%RA${m$>H$>b$Jn#9~#(v@-!+C[+S @{]@->@9)&md*nd*od*pd*pd*qd*YX#rd*NG$sd*ZX#td*6M%ud*L]#@G$vd*wd*xd*yd*zd*Ad*Bd*Cd*}_$_z%d9%0A%~a Dd*go&8>&VH%u1$u1$^G%Vw *B%Uw Sw 0E%Qv&Gb&Ed*OA&Wc*Fd*cG#Gd*Hd*Id*Jd*>7*Kd*+8*g$.Ld*Vq&Md*Nd*'q&Y'&Od*Pd*+0*Qd*Rd*A0*Sd*fV.I:.I:.-u.Vb.Hg.HE.HE.HE.*B.m;.Pa.7v.{n#M/.v.+Td*Ud*Vd*Wd*{c*Xd*S0@Yd*mc@}}@3$@m;@~-+f^@f^@;B+Y.@_w+J@@wr+X{@-(@z$+L,@L,@Kx#4L#PK+PK++w+A$+fp+Kn+ok+P3+km+:R+v~@WH@OS#OS#fY#MU#,:@,:@;]@;]@;]@%}@%}@%}@I2@I2@I2@I2@I2@I2@I2@I2@w^@w^@I2@I2@I2@w^@E4@E4@;]@w^@K2&z6@gn$w^@w^@E4@lt$`0$Na$7j$7j$Na$3(@`0$Hu$yb$7j$Na$3(@lt$31@31@I2@x=@G,@:R+5X+[R+er+er+!G+!G+!P+cr+Ft+Ft+~P+(T+z$+-(@0$@Z.@Z.@_w+;m+S.+e^@e^@*9@*9@3L#Vv#59@nI+fp+]G+69@Q;@xy#xy#lg@lg@wc%wc%/Z$:t#vy#jc@jc@|G+o;@o;@o;@o;@o;@o;@o;@o;@ur+VH@-:#Y+$15%Y+$o;@VH@7X+7X+:x@:x@:&@:&@tr+ED+|=@w)+P,+$N+h~+Hl+$t@V_@.@#/K@L4#L4#/K@5 @>[+*E#>[+X.+5 @5 @5 @5 @X.+N@@F&+lT+hk+E,@@N@:c*!r%Y-&6!+k>&8I.2k%uv%k{ Gh |#u6 U[ Q| Zd*`d*ta*|c*!9*MW#f~#Ou+_|.c1*#. 0&+zm.Ov+8}.8}.[y+Q] |.+Q] |f.P] P] P] P] P] P] P] G|@*$@%' %' %' %' %' %' %' >S%>S%%' %' X@$X@$X@$c> x8.8g.be+be+{! {! {! ]! xc+xc+$(+$(+T_+G|@G|@US+u]#q(#q)@q)@v]#u]#d #US+xc+Ea+)> )> 6g+]$@h)@Ai.9Y+9Y+Lh+'g@6j+y$$y$$*$@|m.*$@y$$6j+6j+y$$*$@|m.Y@$#u%#u%#u%#u%#u%#u%#u%#u%#u%#u%#u%#u%#u%#u%#u%O4%O4%O4%O4%O4%O4%O4%O4%#d+#d+#d+#d+#d+#d+#d+`b&Bj.Kh+G|@T_+$(+$(+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+$(+$(+$(+$(+$(+$(+5A.5A.5A.5A.5A.5A.5A.5A.$(+$(+$(+$(+$(+$(+$(+$(+5A.5A.5A.5A.5A.5A.5A.5A.$(+$(+$(+Ea+{! {! Ea+$(+w8.8g.be+]! Ea+$(+T_+G|@}f.}f.l7 l7 cI+NM+NM+NM+}f.}f.l7 cI+ko.13+@$+@$+13+ko.cI+l7 l7 cI+ko.13+l7 l7 l7 l7 l7 l7 ", "~% ~% d( vk +h.~% 4% %% %% ~% ~% d( d( +h.Ml 7% 6!.6!.$9.j}+j}+5!.P7.6!.6!.6!.6!.6!.5!.5!.4!.&% [! L) 6[ 6[ 6[ 6[ 6[ 6[ L) [! S& C& S& S& S& ~% ~% ~% ~% ~% ~% ~% ~% f% 5% 4% %% %% 4% 5% f% &- &- &- ^{ ^{ Q_ Q_ Q_ Q_ Q_ Q_ y% y% y% u% u% f% f% f% f% f% f% f% f% f% f% f% f% f% f% f% f% x% x% x% x% x% x% x% x% 7% j% j% x% w% w% l3 l3 v% v% v% v% v% v% v% v% v% v% v% v% v% v% v% v% fL.fL.I> I> v% v% f% f% %% 4% 4% 5% f% v% v% I> h% <4 ;H.5v@5v@;H.<4 h% <4 <4 <4 <4 <4 <4 <4 <4 QB@X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ af.af.af.QB@4=+4=+4=+6v@4=+4=+4=+QB@QB@QB@af.af.I> I> I> I> I> I> I> I> fL.5% 5% a, cl+w4.I> fL.{D ph#ph#ph#ph#ph#{D {D si si ac ac ac ac ac ac v% I> fL.w4.w4.fL.I> v% I> I> I> I> I> I> I> I> .l.5v@cp.j}+j}+0Y+!W+al+9u.s[+1* dQ+uF+Tc X4. e*U<%.e*+e*@e*#e*$e*%e*x2*^d*^d*ab*ab*^d*!5@DB@pz@z9#VF@z'#z'#'m+'m+H!#n~+n~+n~+n~+n~+n~+n~+n~+n~+_-+_-+:-+YJ#4)#4)#2)#2)#l7#l7#i%%Vy${m$ln$=c$>b$)g$Di$Di$Di$y4#y4#,L$,L$Dj$Dj$cN$cN$ow$ow$SQ$SQ$Qj$Qj$Qj$Qj$Qj$Qj$Qj$Qj$Qj$Qj$Qj$Qj$[{#[{#[{#[{#BT$BT$BT$BT$BT$BT$Wx$Wx$!k#!k#9e#9e#iX+iX+WK+WK+pw$pw$d8$5($d9$!l$~l$~l$5($d9$d9$d9$!l$!l$~l$Qj$,b$8D#St$os$GS#BA#zA#DA#B2$B2$oZ@oZ@BO@BO@BO@2R+3G+3G+3G+:P+Q,+ZK+P)@P)@O)@0&@a&@*9@gY#G6@Kx#XA#kh%/Z$YM+]P+@w+z$+-7@N3$[$&1=&-1%r{%&e**e*A@&=e*-e*Ub#)S&;e*hJ%>e*Z0*W<.,e*-d.;d.'e*)e*_I&!e*~e*1-.{e*r[.,N ]e*^e*/e*(e*GN#,d@@A@Y:@UH wt r_$xt :e cs r_$;z$;z$vt my%vt .,*G|*EG%wg&$|$_e*:e*(N +9G+9G+R)@YK+5$@gX+u_%:8$J3$'M$y4#Di$ar$Wk$L[#i%%Vy$jm$CO#6F$Ms$('$(v@be*3q&x+@/4*/4*('#ce*rd*de*ee*fe*ge*Nb*`a*he*ie*je*ke*le*me*ne*#|%oe*pe*qe*re*w/*se*>V.}6$ry%(z%wr$D'$.w%8>&te*ue*ve*K[*O[*`,*D[&we*G&*xe*&z ye*id&ze*Fo&Ae*=@.Be*Ce*De*Ee*Fe*O).G'+fA.GB.>1.>K CI Hu.+w.Nd*Ge**8*He*Rd*e5@A0*Sd*Sd*%$.^.@_(+8h.n;.p;.N2.5`+`e@Gg@Ie*0/*YL.0c m++Je*Ke*Le*Me*|q%mr%;%@Ee@q$@Pn+^/+sp+dp+f[+>2+~-+Y.@_w+J@@J@@X{@-(@c&@z$+M)@M)@yb#Kx#(T+WA+A$+6X+fp+Kn+ok+,P+:R+:R+v~@WH@OS#MU#fY#fY#MU#,:@;]@;]@;]@%}@%}@%}@I2@I2@I2@I2@I2@I2@I2@I2@w^@I2@I2@I2@I2@w^@E4@gn$%}@E4@K2&z6@gn$w^@w^@E4@lt$`0$Na$7j$yb$yb$7j$Na$T'$mt$Hu$7j$3(@`0$lt$I2@48+x=@G,@:R+5X+[R+er+er+!G+!G+!P+cr+Ft+~P+~P+ay+z$+-(@L@@Z.@0&@my+(w+&N+K@@K@@*9@)~#3L#4L#C`#Gt+!P+gK@69@Q;@xy#xy#lg@lg@wc%wc%Xv#:t#:t#u=@u=@p;@o;@o;@o;@o;@o;@o;@o;@o;@VH@o;@-:#Y+$-:#o;@VH@ur+7X+7X+:x@:x@:&@:&@tr+ED+|=@w)+P,+$N+h~+Hl+$t@V_@;(@/K@/K@/K@4]+X.+>[+Q2@>[+>[+X.+X.+X.+X.+>[+N@@F&+lT+hk+E,@@N@:c*!r%Y-&i%+k>&8I.2k%7&#I5 0j#'d*W!*(;#&{ 6)@Ne*M0*|c*!9*q^#4Q.st._|._|.#. V&$Tt Ov+Rx.8}.%U.P] FA+Q] J; P] P] P] P] P] P] P] G|@*$@%' %' %' %' %' %' %' %' %' X@$X@$X@$x*$x*$c> ;~ 5A.5A.Ea+Ea+xc+xc+xc+$(+$(+$(+T_+T_+T_+T_+d #:{+q)@PS@PS@h]@:{+u]#';$xc+Ea+]$@6g+]$@jy.QL+(w.oA+Lh+'g@;~ 6j+y$$*$@*$@|m.*$@y$$6j+6j+y$$*$@|m.Y@$Y@$#u%Y@$#u%Y@$#u%Y@$#u%Y@$#u%Y@$#u%Y@$#u%Y@$O4%3&$O4%3&$O4%3&$O4%3&$3]&'W+3]&{y%`E&{y%`E&{y%*$@$(+$(+$(+$(+$(+$(+T_+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+xc+xc+xc+xc+xc+xc+xc+5A.5A.5A.5A.5A.5A.5A.5A.xc+xc+xc+xc+xc+xc+xc+xc+5A.5A.5A.5A.5A.5A.5A.5A.$(+$(+$(+Ea+{! {! Ea+$(+]! ]! 5A.5A.Ea+xc+xc+xc+}f.l7 l7 l7 cI+NM+NM+NM+}f.l7 l7 cI+NM+NM+ko.ko.13+ko.cI+l7 l7 cI+ko.13+l7 l7 l7 l7 l7 l7 ", "%% d( d( ~% %% %% ~% %% %% %% %% ~% ~% ~% O~.O~.P7.P7.5!.l#@j}+l#@6!.5!.5!.5!.6!.6!.6!.6!.7!.&- [! [! L) L) 6[ 6[ 6[ o^ 6[ L) [! [! [! [! L) %% %% %% %% %% %% %% %% f% 5% 4% %% %% 4% 5% f% ^{ L) L) 6[ 6[ o^ o^ o^ 6[ 6[ 6[ o^ o^ o^ -^ u% f% f% f% f% f% f% f% f% f% f% f% f% f% f% f% f% h% PI.PI.PI.PI.PI.PI.PI.Hu+Hu+Hu+Hu+Hu+Hu+PI.h% af.af.af.af.af.af.af.af.af.af.af.af.af.af.af.af.fL.fL.fL.I> I> I> v% v% v% v% v% v% v% v% v% v% h% #9.[3+|5+|5+[3+#9.PI.#9.#9.#9.#9.#9.#9.#9.<4 QB@X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ af.af.QB@QB@QB@4=+4=+4=+4=+4=+4=+QB@QB@QB@af.af.&5 &5 &5 &5 &5 &5 &5 &5 ;b.~_ ~_ |x.6}%;b.W_ a, {D NQ.NQ.NQ.NQ.NQ.Zl Zl og og 5[ 5[ 5[ 5[ 5[ ac &5 W_ {_ {_ {_ {_ W_ &5 W_ W_ W_ W_ W_ W_ W_ fL..l.5v@[3+{t.j}+0Y+0Y+7H.zh.'!.f|%Oe*wF+Pe*X4.*h.Qe*h=&Re*@e*#e*$e*Se*Te*iX@iX@rZ@rZ@^d*!5@pz@pz@z9#VF@z'#H!#z'#z'#6)#n~+n~+n~+n~+n~+n~+n~+n~+n~+_-+_-+:-+YJ#4)#4)#2)#2)#}x@l7#CM#Vy${m$ln$=c$=c$]m$]m$]m$ar$>b$Sj$Rj$Rj$Rj$Rj$a8$a8$;u$Js$Js$bq$o&%R[#S[#]N#]N#yA#{^#{^#{^#{^#{^#yA#yA#yA#yA#]N#N+#N+#N+#N+#N+#N+#gX@gX@M+#M+#fX+fX+gX+gX+2R+WK+iF$iF$jF$kF$kF$lF$WL$WL$kF$kF$kF$lF$lF$WL$WL$!k#N1#BA#BA#GS#yU#^N#^N#zA#gX@gX@7V@7V@7V@7V@gX+gX+7=@T,@T,@2T+2T+Q)@R,@R,@t<@0=@0=@a&@P,@H6@gY#Vv#_t#_t#&n#[a@p;@OK+-(@6T+ce#jq#l`%^A&LO&Ue*Ve*We*Xe*Ye*{I.o`.k}+@[+Hu+dD.[(*Ze*`e* f*B5*1U.Bo.20*G-.,N qk@J/*z<+E-..f*+f*@f*#f*S2*VE@,p _t hB uG -E GD%]V%VH%-z 7'&6M&J[*}:&&7*=H$zz&56&KA&VU#N_+$f*%f*&f**f*VF@XX.l~+U,+k~+p=#''%>>+M$+']$-i#LD+O]+O]+3_+3_+Ow#Ow#9G#9G#dy%*J$}F$iA%~}@Y{@A1#k %4[%d=@Ss@'7$Jx$!g$L1#Wx$gX+4G+f*,f*DM%'f*)f*!f*~f*{f*]f*^f*/f*(f*me%TJ$:@>:@>:@5}@5}@5}@31@31@31@31@31@31@31@31@31@31@31@5}@31@lt$`0$3(@31@3(@7j$7j$3(@lt$`0$3(@w^@E4@K2&z6@oB$oB$oB$oB$kt$b-%B!%oB$z6@gn$w^@I2@48+x=@G,@:R+5X+[R+er+er+~G+~G+cr+Ft+~P+ I> I> v% w4.fL.fL.I> I> v% v% w% h% #9.[3+|5+|5+[3+#9.PI.#9.#9.#9.#9.#9.#9.#9.<4 QB@X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ QB@QB@QB@QB@QB@QB@4=+4=+4=+4=+4=+QB@QB@QB@af.af.&5 &5 &5 &5 &5 &5 &5 &5 |x.&5 n3 |x.6}%|x.{_ )O {D NQ.NQ.NQ.NQ.NQ.Zl Zl og og 5[ 5[ 5[ 5[ 5[ 5[ W_ {_ {_ {_ {_ {_ {_ W_ {_ {_ {_ {_ {_ {_ {_ w4.@[+5v@[3+{t.j}+0Y+0Y+~<*ze+wq a: o,$wF+Pe*j[ e*yf*k0.zf*Af*#e*Bf*Cf*Df*iX@iX@rZ@rZ@iX@!5@pz@pz@WF@'m+H!#H!#z'#z'#6)#n~+n~+n~+n~+n~+n~+n~+n~+n~+_-+_-+:-+YJ#4)#4)#2)#2)#}x@}x@CM#Vy${m$CO#%u$=c$ln$ln$ln$]m$=c$>b$Ms$Ms$Rj$Rj$%K$%K$im$im$im$b8$!<%3:%R[#S[#yA#{^#gX@gX@oZ@oZ@gX@{^#{^#yA#]N#]N#B2$B2$B2$B2$B2$B2$oZ@oZ@M+#M+#fX+fX+gX+gX+2R+2R+iF$iF$jF$jF$kF$kF$lF$lF$kF$kF$kF$lF$lF$lF$WL$!k#M1#BA#BA#GS#yU#^N#^N#]N#gX@gX@7V@7V@7V@gX+gX+5$@kX+|V+|V+|V+Q)@Q)@R,@R,@P)@t<@t<@O)@0=@0&@P,@*9@4N#3N#3P#|t#oe#VH@.B+Jl+6Z+Ln#|8+y/+FI+92&Ef*>+M$+Z]$L#$-i#L6@O]+3_+3_+Ow#Ow#9G#9G#dy%T_#}F$qq@~}@Y{@Z]$3)#YJ#d=@Ss@C4#Jx$!g$,b$Wx$BO@5&@zI+hX@>2+e[+d[+=4+yb#ih#.q+O3#;'$+7@qH&M3&)r$:n$}b$8a$s9$S)$u|$M`$+{$T0%L`$H$%r7$.~#RG#~Q$Rf*Sf*Tf*Uf*Vf*Wf*Xf*Yf*Zf*`f* g*.g*+g*@g*#g*~V+u6@&f+<]+Lb+N0+P0+vr+tr+*>+3 @cB@R)@YK+5$@iX+vp#47$&6$,L$y4#Tj$Wk$*c$*c$RA$Vy${m$ar$=c$-J$,H$27$+L+bj$G[+ay$F6#$g*%g*&g**g*=g*-g*;g*>g*Dc*,g*-9%'g*)g*!g*F^*~g*{g*]g*}a*^g*/g*A[#n4#bS%/G%n1#|/%(g*q_$LL%yz%@}$.D%+D%7E%ri&Gb&5,*py&kU&_g*:g*'@28+MF@G)@G)@iD+iD+)P+lm+km+km+F,@WH@OS#MU#fY#fY#M<@M<@fY#MU#>:@>:@>:@5}@5}@5}@31@31@31@31@31@31@31@31@31@5}@5}@5}@31@`0$3(@Na$`0$Na$7j$7j$`0$lt$`0$3(@w^@E4@K2&z6@oB$ 9@B!%b-%cl${o$b-% 9@Ma$K2&E4@w^@48+x=@G,@:R+5X+[R+er+er+gp+gp+Ft+~P+[+>[+X.+5 @*E#*E#ik+ik+ik+ik+*E#cP$F&+lT+hk+E,@@N@:c*!r%Y-&i%+k>&6F.yQ&ag*z2*C|*NM$U[ 9j#&{ 6)@bg*'9*AY$!9*q^#cg*g| _|.7 ,_ f+#Ks %U.Ov+Rx.Ov+[y+J; Q] FA+J; J; J; J; J; J; J; T_+*$@%' %' %' %' %' %' %' x*$x*$x*$u3$u3$=|$=|$0@@;~ 5A.5A.Ea+Ea+xc+xc+xc+Kh+G|@G|@T_+$(+$(+xc+:{+M8@OU+OU+OU+h]@h]@v]#:{+xc+$(+dl.Ai.dl.jy.Fu#a(+A_@A_@ok.ok.H0@H0@C! C! C! H0@ok.A_@A_@ok.H0@C! 6j+Ea+6j+Ea+6j+Ea+6j+Ea+6j+Ea+6j+Ea+6j+Ea+6j+Ea+6j+Ea+6j+Ea+6j+Ea+6j+Ea+Lh+]! 'g@5A.6j+xc+y$$$(+5A.5A.5A.Ea+Ea+xc+xc+$(+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.5A.5A.5A.5A.5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+6g+6g+6g+6g+6g+6g+6g+6g+]$@]$@]$@]$@]$@]$@]$@]$@Ea+$(+T_+xc+5A.]! 5A.xc+G|@T_+T_+$(+xc+Ea+Ea+Ea+l7 l7 cI+cI+cI+cI+cI+cI+l7 l7 l7 l7 }f.}f.}f.}f.NM+NM+NM+NM+NM+NM+NM+NM+l7 l7 l7 l7 l7 l7 ", "%% +h.~% 5% v% 4% +h.%% %% %% %% %% 4% 4% 7% O~.Y6.iI.H;@5!.l#@l#@$9.$9.$9.5!.5!.6!.P7.P7.&j.&- [! S& C& S& [! 6[ o^ -^ o^ 6[ L) [! [! L) L) 4% 4% 4% 4% 4% 4% 4% 4% 4% 4% 5% 5% 5% 5% 4% ^{ y% o^ o^ o^ o^ o^ o^ 6[ 6[ 6[ 6[ o^ o^ o^ -^ -^ f% f% f% f% f% f% f% f% f% f% f% f% f% f% f% x% h% PI.PI.PI.PI.PI.PI.PI.Hu+Hu+Hu+Hu+8v.8v.8v.8v.<4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 fL.fL.fL.I> I> v% v% v% a, w4.w4.fL.I> v% v% x% h% #9.[3+|5+|5+[3+#9.PI.#9.#9.#9.#9.#9.#9.#9.<4 QB@X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ 4=+4=+QB@QB@QB@QB@QB@QB@4=+4=+4=+QB@QB@QB@af.af.&5 &5 &5 &5 &5 &5 &5 &5 O9.&5 ~_ ;b.O9.;b.;b.uM {D NQ.NQ.NQ.NQ.NQ.Zl Zl og og 5[ 5[ 5[ 5[ 5[ 5[ {_ W_ W_ W_ W_ W_ W_ {_ {_ {_ {_ {_ {_ {_ {_ w4.@[+5v@|5+aq.{t.0Y+' .Iu+ d+Ei+h^ 6>$wF+N<.el dg*eg*k0.fg*(I%G'@gg*Se*hg*iX@LD@_-@rZ@iX@CB@pz@pz@WF@'m+H!#H!#H!#H!#5Z.B%%n~+n~+n~+n~+n~+n~+n~+n~+_-+_-+:-+YJ#4)#4)#2)#2)#k<&}x@CM#Zz$/v$CO#%u$%u$CO#CO#ln$ln$=c$=c$nw$Ms$Rj$Rj$%K$%K$c8$c8$c8$c9$ig*~(%P6#~^#M+#nZ@7V@7V@fX@fX@BO@7V@7V@nZ@M+#yA#B2$B2$B2$B2$B2$B2$oZ@oZ@M+#M+#fX+fX+gX+gX+2R+2R+iF$iF$jF$jF$jF$jF$kF$kF$jF$jF$kF$kF$kF$lF$lF$vp#Qj$^N#^N#zA#yA#]N#]N#mZ@nZ@nZ@fX+fX+fX+jX+jX+jX+S,@t;@s;@s;@Q)@Q)@ZK+ZK+ZK+P)@P)@>B+>B+>B+O)@0&@a&@)~#<&@:c@:c@`K+`K+tp+@B+jb#0G+6k#Hq@ds#G@+X,%k|#7)#z9#jg*kg*lg*mg*ng*(I '% Y+ 9c xn.xn.Mv.;4#g:&rF.{e*@x.,'.q;.[{.8'%lQ.'}*og*pg*qg*rg*6v /0#k[#mt@Fu 6G@oI@'Y$Pv Pv 8'&4Q%!M Mf*Nf*OW$sg*8H+tg*ug*vg*'m$4W.S)@7P#U,+k~+8]+j %>>+Z+$Z]$@/$-i#L6@O]+3_+3_+Ow#Ow#9G#9G#/n%T_#4O#qq@~}@2|+Z]$+B$YJ#d=@Ss@C4#Jx$!g$,b$Wx$BO@5&@zI+hX@>2+e[+d[+=4+yb#ih#.q+O3#;'$+7@qH&M3& v$)r$|s$5c$q0$ 4$v|$u|$/}$+{$ac$nD%m/$oT+vn&wg*xg*yg*zg*Ag*Bg*Cg*Dg*Eg*Fg*Gg*Hg*Ig*Jg*Kg*Lg*Mg*i)+kp+Lb+nD+U_@(T+c&@P,@mq@x;@w;@!K@AM@pZ@8e#Qm#_8$qw$09$Sj$Tj$Wk$(a$)]${m$/v$CO#ar$=c$-J$,H$ ^$/R#A]+S @Ng*[@%%g*Og*Pg*Qg*Rg*Sg*Tg*Ug*Vg*Wg*Xg*Yg*0f*Zg*`g*@*@ h*.h*+h*]{+%$#@h*#h*T7*$h*Wv%]*$4r ho&7'&Ww X!&Vw 9C%9C%4,*%h*$l&~s& b&uk&&h**h*q{*=h*-h*;h*>h*,h*'h*MA )h*~k.@(&AX$G^$pO M!.7v.qP# *.I/@H:.m3@!h*Rd*fV.I:.1`._(+Vb.|`.#4.N2.Zq@)1.`d#lI.RG.je 2b oj ~h*{h*]h*^h*/h*(h*_h*:h*'@#q+`p+28+M&+M&+'G+Kn+mI+mI+km+km+F,@WH@MU#MU#fY#M<@{`#M<@fY#fY#M<@M<@M<@Y4@Y4@Y4@4}@4}@4}@4}@4}@4}@4}@4}@Y4@Y4@Y4@Y4@4}@>q$zb$Iu$zb$Iu$4c$zb$>q$21@>q$Na$E4@E4@gn$z6@Ma$ 9@b-%b-%{o${o$b-% 9@Ma$K2&gn$E4@48+x=@G,@:R+5X+[R+er+er+#w+#w+~P+~P+w+;w+up+@k+@k+=w+vr+7X+7X+:x@:x@:&@:&@tr+ED+|=@w)+P,+$N+h~+Hl+$t@V_@@N+L4#4]+X.+>[+>[+X.+5 @Q2@*E#ik+bw+bw+ik+*E#&1@F&+lT+hk+E,@@N@:c*!r%Y-&8.&/**r#$B1 ag**[*mp NM$(;#6~ D~ J^ bg*]8*[h*)9*t^#}h*|h*c1*i s6 35+vn.Rx.Ov+%U.%U.[y+J; Q] FA+J; J; J; J; J; J; J; T_+*$@%' %' %' %' %' %' %' x*$x*$x*$u3$u3$=|$=|$0@@;~ 5A.Ea+Ea+xc+xc+xc+$(+Kh+G|@G|@T_+$(+$(+xc+:{+ZW+OU+OU+PS@v]#v]#v]#v]#xc+$(+Ai.Ai.Ai.q9+Fu#.d+ok._c$_c$_c$fd%fd%fd%fd%xe#fd%_c$PC#PC#_c$fd%C! xc+l7 xc+l7 xc+l7 xc+l7 xc+l7 xc+l7 xc+l7 xc+l7 Ea+cI+Ea+cI+Ea+cI+Ea+cI+5A.cI+Ea+l7 xc+}f.$(+$(+$(+xc+xc+Ea+Ea+5A.5A.5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.5A.5A.5A.5A.5A.xc+xc+xc+xc+xc+xc+xc+xc+6g+6g+6g+6g+6g+6g+6g+6g+jy.jy.jy.jy.jy.jy.jy.jy.Ea+xc+T_+$(+5A.]! 5A.Ea+xc+xc+xc+xc+$(+$(+$(+$(+cI+cI+cI+cI+cI+cI+l7 l7 l7 l7 l7 l7 }f.}f.}f.}f.NM+NM+NM+NM+NM+NM+NM+NM+cI+cI+cI+cI+cI+cI+", "~% ~% %% 4% 4% ~% +h.~% ~% ~% ~% %% %% %% r: r: H;@iI.Y6.6!.$9.$9.5!.5!.5!.5!.6!.6!.6!.6!.7!.&- S& C& u& C& S& L) o^ o^ 6[ L) [! [! [! [! L) 4% 4% 4% 4% 4% 4% 4% 4% %% 4% 5% f% f% 5% 4% &- y% o^ o^ 6[ 6[ L) L) L) 6[ 6[ 6[ o^ o^ o^ -^ -^ f% f% f% f% f% f% f% f% f% f% f% f% f% f% f% x% h% PI.PI.PI.PI.PI.PI.PI.Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.<4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 I> I> I> v% v% f% f% f% w4.w4.fL.fL.I> v% v% w% h% #9.[3+|5+|5+[3+#9.PI.#9.#9.#9.#9.#9.#9.#9.<4 QB@X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ 4=+4=+4=+QB@QB@QB@af.af.4=+4=+4=+QB@QB@QB@af.af.&5 &5 &5 &5 &5 &5 &5 &5 O9.n3 &_ {_ |x.{_ {_ uM {D NQ.NQ.NQ.NQ.NQ.Zl Zl og og 5[ 5[ 5[ 5[ 5[ 5[ W_ W_ &5 n3 n3 &5 W_ W_ W_ W_ W_ W_ W_ W_ W_ fL.@[+.l.w7+(s.aq.0Y+z) 3!.zh.+m@h^ 6>$N0 N<.gF.1h*2h*3h*4h*5h*$e*6h*%e*Df*LD@LD@_-@_-@iX@CB@pz@pz@VF@z'#6)#6)#H!#H!#5Z.B%%n~+n~+n~+n~+n~+n~+n~+n~+_-+_-+:-+YJ#4)#4)#2)#2)#k<&k<&Vk$Zz$/v$CO#5F$%u$ln$ln$ln$]m$=c$=c$Ms$Ms$Ms$Ms$%K$%K$im$c8$c8$c9$t}%P6#~^#mZ@mZ@M+#nZ@nZ@fX@BO@BO@BO@BO@7V@7V@gX@oZ@B2$B2$B2$B2$B2$oZ@oZ@M+#M+#fX+fX+gX+gX+2R+2R+iF$iF$iF$jF$jF$jF$jF$jF$jF$jF$jF$kF$kF$lF$lF$vp#Qj$zA#DA#{^#{^#{^#M+#mZ@nZ@fX+fX+fX+jX+jX+jX+)K@t;@t;@s;@Q)@ZK+ZK+lX+lX+lX+lX+lX+7 Oo+Gt& w.eh*Gg@`e@Pm.}(*fh*Tr gh*{t hh*I,#]J Yk@Tx Nw &L%7'&-z 4Q%}f l_*ih*|(&jh*1z+kh*(G.lh*+x@W_#S)@7P#VH#'p$(R#,Z#m~+{l$}7$6X%f2%L6@O]+3_+3_+Ow#Ow#9G#9G#/n%dy%4O#qq@g~@2|+ZR#+B$YJ#X_#fE#C4#B4#!g$,b$BT$7V@2R+[V+>T@~-+:|+_|+H:+z$+ih#.q+O3#;'$+7@qH&M3&.r%{x$E5&}b$w,$q0$O1$T2$]B$P<$B,$m6$m/$Nm#DQ#mh*nh*oh*ph*qh*rh*&K%sh*th*uh*vh*wh*xh*yh*u##/K@!-+h @si+s=@[T+~P+yb#Y|#lb#k#$DD+!K@)K@qZ@Xx$Xx$]v#_8$,L$09$Tj$ar$*c$)]$pr%{m$dw$CO#Sj$Ms$'H$Js$-I$Sv#zh*/4*n9#D3#Ah*pJ%Bh*Ch*Dh*gZ%Eh*-g*Vg* b*Fh*Gh*Hh*Ih*Jh*Kh*Lh*Z+$.|*m4#Z>%N8*+7$_m@v7*k}*=c Bu Pv X!&Xw 9C%$B%%B%QO$Sm&~p$Mh*Nh*Oh*Ph*Qh*Rh*Sh*Th*!7*7o&Uh*Vh*Wh*v]@[z.'K.'K.lI.AX$V>.5g*Jq.(C Y0*Wb.Xh*Yh*Sd*Zh*`h*^.@Kq.Vb.|`.].@hJ%q;.=G@=H.M/.vK.!i+Q6 01+}R@ i*.i*+i*@i*#i*VX.I4#W=+_s#$i*[(%&>+sr+tr+L@@:^#qg@(w+Y.@my+my+K@@K@@0$@O,@!B+!B+L,@mm+#q+M3+`p+@q+N&+br+'G+'G+ok+ok+,P+G,@WH@,:@MU#MU#M<@M<@ 7@ 7@fY#fY#M<@M<@M<@Y4@Y4@Y4@4}@4}@4}@4}@4}@4}@4}@4}@M<@M<@M<@Y4@4}@>q$zb$Iu$4c$zo$4c$zb$>q$21@>q$Na$gn$gn$gn$gn$z6@Ma$ 9@B!%b-%b-%B!% 9@Ma$z6@K2&K2&48+x=@G,@:R+5X+[R+er+er+#w+dr+~P+[+*E#ik+bw+bw+ik+*E#N@@F&+lT+hk+E,@@N@:c*!r%Y-&%i*}r$Du&VG%Yj z2*C|*>i&U[ #3#K: 9G&bg*`d*&i*)9*N0*r%$|h*c1*O @$+-V@-V@z<.Rx.[y+J; |f.J; P] Q] |f.|f.|f.|f.|f.|f.|f.$(+*$@%' %' %' %' %' %' %' X@$X@$x*$x*$u3$u3$u3$y*$*$@$(+$(+T_+T_+G|@G|@G|@T_+T_+T_+T_+T_+$(+$(+u]#ZW+OU+PS@q)@:{+:{+v]#v]#$(+$(+dl.dl.dl.q9+QL+QL+_c$_c$_c$_c$_c$_c$_c$_c$xe#fd%_c$PC#PC#_c$fd%C! xc+l7 l7 l7 l7 l7 l7 l7 l7 l7 l7 l7 l7 l7 l7 l7 cI+cI+cI+cI+cI+cI+cI+cI+bH@bH@}f.}f.}f.}f.}f.}f.T_+T_+$(+xc+Ea+Ea+5A.5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+xc+xc+xc+xc+xc+xc+xc+]$@]$@]$@]$@]$@]$@]$@]$@jy.jy.jy.jy.jy.jy.jy.jy.5A.xc+T_+$(+Ea+]! ]! 5A.]! ]! 5A.Ea+xc+$(+T_+G|@NM+NM+cI+cI+cI+l7 l7 l7 l7 l7 l7 l7 l7 l7 cI+cI+cI+NM+NM+ko.ko.NM+NM+cI+cI+cI+cI+cI+cI+cI+", "d( %% 4% ~% d( d( d( +h.+h.d( d( ~% ~% %% r: j% P7.Y6.Y6.P7.5!.5!.6!.6!.6!.6!.6!.6!.5!.5!.4!.^{ S& u& R% u& S& L) o^ 6[ L) [! S& C& S& S& S& 4% 4% 4% 4% 4% 4% 4% 4% %% 4% 5% f% f% 5% 4% &- Q_ 6[ 6[ L) L) [! [! [! 6[ 6[ 6[ o^ o^ o^ -^ -^ f% f% f% f% f% f% f% f% f% f% f% f% f% f% f% x% h% PI.PI.PI.PI.PI.PI.PI.8v.Hu+Hu+PI.#9.#9.cp.cp.<4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 v% f% f% f% 5% 5% 4% 4% I> I> I> I> v% v% v% w% h% #9.[3+|5+|5+[3+#9.PI.#9.#9.#9.#9.#9.#9.#9.<4 QB@X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ 6v@4=+4=+4=+QB@af.af.af.4=+4=+4=+QB@QB@QB@af.af.&5 &5 &5 &5 &5 &5 &5 &5 O9.~_ &) &5 {_ W_ W_ )O {D NQ.NQ.NQ.NQ.NQ.Zl Zl og og 5[ 5[ 5[ 5[ 5[ 5[ &5 n3 ~_ &_ &_ ~_ n3 &5 &5 &5 &5 &5 &5 &5 &5 I> @[+.l.w7+ym.aq.0Y+ni u}+zh.'!.S^ Oe*wF+*i*Ex ^0*=i*-i*;i*>i*va*p6*x2*Te*LD@LD@_-@_-@iX@CB@pz@pz@VF@z'#6)#6)#H!#H!#5Z.+*+n~+n~+n~+n~+n~+n~+n~+n~+_-+_-+:-+YJ#4)#4)#2)#2)#I4@k<&Vk$Zz$/v$*I$5F$5F$ln$ln$]m$]m$>b$>b$Rj$Rj$nw$nw$a8$a8$im$im$c8$c9$Qm#mZ@mZ@mZ@mZ@mZ@mZ@mZ@BO@BO@BO@BO@fX@fX@fX@e'#e'#2O#2O#2O#2O#2O#e'#e'#M+#M+#fX+fX+gX+gX+2R+2R+iF$iF$iF$iF$iF$iF$iF$iF$iF$iF$jF$jF$kF$kF$kF$vp#[{#{^#gX@BO@BO@7V@fX+4Z+4Z+E@@E@@E@@,K@,K@,K@,K@s;@r;@R,@P)@lX+9G+>T@>T@x)+x)+x)+zI+x)+zI+zI+zI+-K@^^#f^@2+S0+2V+z$+ih#.q+O3#;'$+7@qH&M3&WY%.r%M3&E5&V>${e%_u%t8$cl$G1$K(#nD%o>$7p#D:$yF$|i*N($1i*2i*3i*4i*PQ#PQ#bU#5i*@L 6i*7i*8i*S0@z+&G:+]_+t&@^G+hh#Nx#9i*h %6&@DD+F@@V.@AM@8e#hm$b9$qn%09$09$Tj$qr%(a$pr%pr%/v$>H$%u$=k$Rj$'H$;J$-I$/v@0i*->@m9#D3#ai*bi*sJ$ci*VK%di*ci*Tg*ei*rd*f=*z9%ME$fi*rH$z1#gi*dW&hi*s,$ii*Ts%&@&io&]|%Y{$Iu m($Nw Ow QC '8@Ox@Tn$]L&ji*ki*li*mi*ni*l~&oi*pi*qi*e6*ri*si*ti*ui*vi*gy tN%-_ g% QB@;H.PI.[{.*$..Q Xy&(7*Xb.rS.wi*Um.xi*Ma.cn.|`.].@].@hJ%9K.yc.RG.vK.)c t.+eH.Z%@>i.yi*zi*Ai*ts%44+d$@At+q$7j$K2&g9@C5%C5%g9@^7@,m$@1%(~%@1%@1%@1%,m$!3@!3@!3@48+x=@G,@:R+5X+[R+er+er+dr+nI+w+;w+up+;w+>w+gy+7X+7X+:x@:x@:&@:&@tr+ED+|=@w)+P,+$N+h~+Hl+$t@V_@;(@/K@/K@/K@4]+X.+>[+Q2@X.+Q2@ik+bw+bw+ik+Q2@zT&F&+lT+hk+E,@@N@:c*!r%Y-&zI$Bi*7<+;>%Yj z2*Dg L0*Ac /:*K^ Zf&Ne*Ne*j!@Ci**4#7Y+g| c1*.. ko.wn.)g@Y% 8}.J; Q] P] J; J; P] |f.|f.|f.|f.|f.|f.|f.$(+*$@%' %' %' %' %' %' %' %' %' X@$X@$X@$x*$x*$c> y$$xc+xc+$(+$(+T_+T_+T_+$(+$(+$(+T_+T_+T_+T_+d #M8@PS@q(#9&+d #u]#:{+v]#T_+$(+q9+jy.q9+dl.Di*Di*uV@uV@uV@uV@uV@uV@uV@uV@[R@@y#;>#uV@uV@;>#@y#C! l7 'U.'U.'U.'U.'U.'U.'U.'U.'U.'U.'U.'U.'U.'U.'U.ks@ks@ks@ks@ks@ks@ks@ks@)&+)&+)&+NU+yM+'U.ks@cI+T_+$(+$(+$(+$(+$(+$(+$(+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+jy.QL+QL+QL+QL+QL+QL+QL+QL+QL+QL+QL+QL+QL+QL+jy.]! xc+T_+T_+xc+]! ]! 5A.{! ]! ]! 5A.Ea+xc+$(+$(+NM+NM+NM+cI+l7 l7 l7 }f.}f.l7 l7 cI+NM+NM+ko.ko.l7 cI+ko.13+13+ko.cI+l7 NM+NM+NM+NM+NM+NM+", "d( 5% 4% d( .h.vk ~% vk vk +h.+h.d( ~% ~% ~% x% r: Ml *=.Lv.r: r: O~.Lv.O~.O~.6!.7% 5!.$9.Z^ ^{ S& u& R% R% S& L) o^ L) [! S& C& C& C& C& &% 4% 4% 4% 4% 4% 4% 4% 4% %% 4% 5% f% f% 5% 4% %% Z^ _& d& d& c& S& S& C& 6[ 6[ 6[ o^ o^ 2% .* .* ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ f% h% h% h% h% h% h% h% h% 6% 6% i% h% s3.;H.5v@5v@<4 #9.<4 #9.<4 #9.<4 #9.<4 #9.<4 #9.<4 #9.<4 <4 f% 5% 5% 5% 4% 4% %% %% v% v% v% v% v% v% v% w% h% #9.[3+|5+|5+[3+#9.PI.#9.#9.#9.#9.#9.#9.#9.<4 QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@6v@6v@4=+4=+QB@af.af.af.4=+4=+4=+QB@QB@QB@af.af.&5 &5 &5 &5 &5 &5 &5 &5 |x.~_ $% n3 W_ &5 W_ a, {D ph#{D ph#{D {D {D {D si si ac ac ac ac ac ac &5 ~_ &_ &) &) &_ ~_ &5 n3 n3 n3 n3 n3 n3 n3 v% .l..l.w7+ym.aq.0Y+ni gO. d+(= $^ n,$wF+}k Ex PC.Ei*Fi*@e*1n#Gi*<9*L5*%e*^d*iX@rZ@rZ@iX@!5@pz@G}$q'@z'#6)#6)#H!#6)#n~++*+n~+n~+n~+n~+n~+n~+n~+n~+_-+_-+_-+YJ#YJ#4)#I4@2)#I4@k<&8o@CM#/v$*I$*I$CO#]m$]m$]m$ar$>b$Sj$Rj$Rj$Hs$Hs$,H$a8$;u$im$im$c9$!k#M+#mZ@mZ@mZ@mZ@~^#~^#7V@7V@2R+CI+CI+]-+]-+y)+e'#e'#e'#e'#e'#e'#fX@fX@M+#4Z+fX+fX+gX+gX+2R+2R+WK+}{#}{#}{#}{#}{#}{#}{#}{#}{#WK+WK+iX+iX+iX+iX+nZ@7V@fX@nq@]-+CI+gX+fX+E@@E@@E@@E@@,K@,K@,K@,K@s;@R,@R,@P)@9G+3 @f^@f^@3 @3 @>T@x)+x)+x)+x)+zI+[|+3]+~-+:w+wD+mp+tp+Zn+Hi*IZ@Ob+>w+k1%>;%J@@[6+B$+I6@fy+a9@Ii*,[+[7@>[#M:+c%*Ji*Ki*Li*Mi*Ni*Oi*Vl GL.L/.x3&-H.oG.Pl ww 8v.PI.is@ge@Pi*qi Qi*Ri*Si*Ti*Ui*Vi*G,#zn#l1#Hv@j@#3(*EG%fy%Wi*|c${M$)B#+&j**j*P)@:&@[T+ne#ne#nI+yb#5~#W6$Tm#cB@8G+W.@1 @5Z+9e#d9$!l$c8$4($Rj$Sj$qr%7v$4v$&u$6F$jO$Hs$4($im$,M$sr$>J${v@H%%|+@=j*OU$-j*l#%;j*V%%>j*~C%3@%,j*Tg*oI$'j*)j*!j*~j*{j*`/@]j*!1*^j*/5@L&#Ts%=A&U7*{a Au /j*.D%#}$dB (Y@*a&yz&-D&(j*_j*:j*_*&M+{e*}{.pO ,'.Zq@N2.`+@Rm.!e.Vb.Wb.1j*2j*)e*rS.cR (7*(7*G1.1o.[{.xx.R_ -_ ;5 >8+<)+|G.3j*4j*5j*a#+H~+,m+u<@;>+oi$' +6j*%v$tD+Sn+oy+wI+b~@9k@ea%##$&N+dp+6T+2V+wr+*4+N,@5a@[o+6X+mm+)P+#s+nk+Zp+mI+ok+kD+ok+%-+T;@&-+x=@R;@,:@(a@>:@K<@M<@;:@ 7@ 7@qR$qR${`#{`#{`# 7@ 7@ 7@yV#yV#yV#yV#yV#yV#yV#yV#M<@M<@M<@Y4@21@Ao$Iu$4c$Tp$Tp$zo$-'$4q&[!$6)$A6@^7@hm+im+jm+im+hm+gm+a1@a1@a1@a1@a1@a1@a1@a1@,m$48+x=@G,@:R+5X+[R+er+er+nI+w+;w+<&@&t@Bq@b3%:x@:x@:x@:&@:&@tr+tr+ED+,B+P,+P,+Gn+h~+H,@$t@$t@.@#;(@T0+T0+;(@; ++>#,[+; ++>#,[+bw+Gy+*E#>[+5 @N@@&1@]o+rG+@N@7j*8j*fn$9j*0s%$7*SW.Zj z2*Q| (;#7)@7)@Zd*0j*`d*Ne*j!@|c*aj*bj*Ua+mH&m@ M8@hf.VS+Is 8}.P] |.+FA+J; |f.|f.|f.|f.|f.|f.|f.|f.|f.$(+*$@x{ x{ x{ x{ x{ x{ x{ nh.nh.x{ x{ $.@$.@$.@c> ]! ]! ]! 5A.5A.5A.Ea+Ea+xc+xc+$(+$(+T_+G|@G|@Kh+h]@q)@u]#d #';$d #u]#:{+T_+$(+jy.]$@jy.dl.1m.#uV@uV@;>#@y#f].[y+ls@GA+ls@GA+ls@GA+ls@GA+ls@GA+ls@GA+ls@GA+'U.ks@ks@cI+ks@cI+ks@cI+ks@Bz$P1.aH@yM+l7 ks@NM+ko.xc+xc+$(+$(+T_+G|@Kh+Kh+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+$(+$(+$(+$(+$(+$(+xc+xc+xc+xc+xc+xc+xc+xc+q9+(w.(w.(w.(w.(w.(w.(w.QL+QL+QL+QL+QL+QL+QL+jy.]! xc+T_+T_+xc+5A.]! 5A.]! ]! ]! 5A.5A.Ea+Ea+Ea+NM+NM+NM+cI+l7 l7 }f.}f.}f.}f.l7 cI+ko.13+@$+@$+l7 cI+ko.13+13+ko.cI+l7 NM+NM+NM+NM+NM+NM+", "~% ~% ~% ~% ~% ~% ~% 4% 4% %% ~% ~% %% 4% 4% |% )= )= )= |% |% |% 0' %% %% %% r: %% r: r: *- Q_ [! S& S& L) 6[ L) S& [! [! [! [! [! [! [! &- ~% -H.-H.l` :j.:j.l` R_ *_ *_ *_ *_ *_ *_ *_ j% 7!.vK+z) ' .' ._& d& c& [! -^ fd 2% 2% m* +# h. 4c d= 5! 4{ 5! 2{ 2{ 5! G{ G{ G{ 4{ 4{ 5! 5! 5! 0' ~% %% 4% 5% f% v% v% f% f% f% v% v% I> I> I> cp.N7.#9._r+PI.N7.#9.M7.cp.M7.cp.M7.cp.M7.cp.cp.l3 I> I> I> I> I> I> I> fL.fL.I> v% v% f% 5% j% l3 aq.(s.ym.ym.(s.aq.{t.(s.(s.(s.(s.(s.(s.(s.(s.<4 <4 <4 <4 <4 <4 <4 <4 5v@;H.;H.5v@.l..l.;H.<4 w4.w4.w4.w4.w4.w4.w4.w4.f% v% v% I> fL.fL.w4.w4.I> I> I> I> I> I> I> I> w4.w4.w4.w4.w4.w4.w4.w4.w4.-J.v% x% f% v% fL.w4.w4.w4.w4.w4.w4.w4.w4.w4.a, a, w4.w4.fL.fL.I> I> fL.I> v% I> a, 8H.a, w4.>H.5v@cp.{t.{t.0Y+V[&1i$ze+'!.r] i@@N0 *i*gF.5< vw$cj*zE%ok#dj*ej*fj*Ok$/8%gj*z*+hj*:-@G}$ij*(=$q'@tm#v<@J.+ki@ki@ki@ki@HK$YJ#:-+,>+3W.3W.3W.W,@XX.XX.U`$.*+:-+4)#4)#I4@l7#l7#bE$i%%Vy$dw$dw$dw$*c$*c$]m$ar$ar$Tj$Sj$Sj$nw$nw$nw$Ms$a8$%K$%K$Ej$]v#S[#P6#P6#~(%~(%W|#_/%| @4Z+jX+5$@4G+R,+yM@yM@CI+2R+gX+CI+i~+U0+U0+->+CI+5&@5&@4G+5$@5$@jX+jX+VK+UK+UK+BI+[ @eX+}V+VK+eX+[ @BI+}V+} @U.@eX+[ @fX+fX+fX+fX+jX+jX+jX+jX+4G+4G+5$@5$@jX+jX+jX+,K@Q,+ZK+lX+lX+9G+3 @f^@Y.@Y.@Y.@;B+;B+ny+ny+4 @0G+%C)+U`$Ei$Q'$(a$5v$~1&!1&JY$,8&`R$LD+.+@~b#~b#.+@Y_@B;@]q$mF$qX+qX+QB$Yx%4V+A1#A1#+*+km$rr%M[#ar$Cj$cN$]v#fX+4G++[V+}V+yM@2 @>K@E@@E@@gX+u_%v,$~l$b9$;u$a8$Ms$Ms$Ms$Ms$'H$;J$)H$S!$k*,k*'k*Z8*b5@)k*!k*~k*_b*&8*&8*Pd*Pd*{k*]k*B0*A0*&d*&d*A0*t+.wB&wB&H:.Ma.Kq.P++Dp.*.+!B&c[.^k*/k*o&#(k*ng L2 T@ *j _k*:k*+L,+u~@<1@X4@&3@X4@J<@(a@}1@K<@K<@sQ$sQ$pR$bC$iR$iR$.O$.O$bC$bC$bC$bC$bC$bC$bC$bC$=3@io@0X#0X#21@zb$5c$8a$g>$V>$W>$V6$Dt$!r&V6$1k*w&@Xp+Xp+~3@Wp+Wp+Vp+Vp+l(@l(@gq@gq@gq@l(@lk+kk+w^@%}@,:@,:@G,@G,@km+Ht+dr+~P++f^@~-+rd+:f+:f+I:+:|+/w+/w+>2+f[+I:+__+lK@lK@lK@6y+lK@6y+6y+6y+6y+$E+7e@(3@/L#5T@)'$Mu@cf%1F.2k*q'+!!%r0 j{@19$/| l{@Zd*3k*bg*M0*4k*s<&5k**l+ 3+6k*Y^ A' 2r%2r%ZW+]! Ea+$(+T_+G|@G|@T_+5A.5A.5A.5A.5A.5A.5A.5A.l7 cI+cI+NM+cI+}f.aH@Bz$cI+}f.bH@}f.cI+cI+l7 bH@Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+xc+xc+xc+xc+xc+xc+xc+be+:{+T_+xc+Ea+G|@G|@xc+$(+$(+$(+$(+$(+$(+$(+H0@[R@7k*7k*7k*8k*8k*9k*9k*9k*IO@PM@PM@PM@PM@IO@4!$#a+<.+7x.:P.7x.l;#=0+0k*7x.xY+7x.xY+7x.xY+7x.hS.NM+NM+5A.NM+5A.NM+5A.NM+]! cI+xc+cI+]! 13+]! Ea+T_+T_+T_+T_+T_+T_+T_+T_+5A.$(+Kh+oh.Kh+G|@Kh+7P.xc+5A.be+8g.8g.]! $(+Kh+T_+T_+$(+xc+Ea+5A.]! {! 6g+i~ i~ ]$@jy.)> )> q9+q9+jy.jy.]$@jy.q9+q9+dl.G|@T_+xc+5A.]! ]! 5A.Ea+{! ]! Ea+xc+xc+Ea+]! {! xc+xc+xc+xc+xc+xc+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.5A.5A.5A.5A.5A.{! ]! Ea+xc+xc+Ea+", "~% ~% ~% ~% ~% ~% ~% 4% %% ~% ~% ~% ~% %% &) d= M= M= M= )= )= )= )= $% $% %% %% %% %% r: *- Q_ [! S& S& L) 6[ L) S& [! [! [! [! [! [! [! &- ~% -H.R_ l` :j.:j.l` *_ *_ *_ *_ *_ *_ *_ *_ j% EY#ak*ng &R+' .z) d& c& C& o^ .* U@ j+ m* $& E. V_ ,;.p3 14 +..,;.p3 14 p3 p3 p3 p3 +..+..,;.2{ $% &) &) &_ ~_ ~_ n3 n3 ~_ ~_ ~_ n3 n3 &5 &5 I> cp.N7.N7._r+_r+N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.cp.l3 I> I> I> I> I> I> I> I> I> I> v% v% v% v% x% w% {t.aq.(s.(s.aq.{t.j}+aq.aq.aq.aq.aq.aq.aq.aq.#9.#9.#9.#9.#9.#9.#9.#9.cp.[3+|5+w7+|5+[3+[3+cp.fL.fL.fL.fL.fL.fL.fL.fL.I> I> I> I> I> fL.fL.fL.I> I> I> I> I> I> I> I> w4.w4.w4.w4.w4.w4.w4.w4.4=+4=+QB@af.af.QB@4=+4=+6v@6v@6v@6v@6v@6v@6v@6v@a, a, w4.w4.fL.fL.I> I> I> f% 5% v% fL.a, w4.I> ;H.s3.#9.j}+aq.!W+z) u}+Zn }].r] 5>$wF+*i*el e*bk*ck*zE%27*dk*ek*ej*dj*fk*gk*o*&gj*:-@hk*ij*(=$./%q'@v<@J.+ki@3W.3W.3W.YJ#:-+:-+,>+,>+,>+,>+.*+U`$''%>>+_-+4[%HK$I4@k<&}x@}x@8o@bE$Zz$Vy$/v$/v$*c$*c$]m$ar$ar$ar$Sj$Sj$nw$nw$nw$Ms$a8$%K$%K$Ej$]v#S[#P6#P6#~(%~(%W|#W|#J #E@@jX+5$@YK+5G+;K@;K@yM@5&@4G+5&@yM@h[+yM@R,+5&@5&@5&@4G+5$@5$@5$@jX+BI+W=+W=+&9@7^@%1@a^@&9@U{@7^@Gl+a^@7^@%1@7^@BI+5$@5$@5$@5$@5$@5$@5$@5$@5$@5$@5$@jX+jX+E@@E@@E@@2T+Q,+lX+9G+3 @f^@;B+;B+_w+_w+my+my+Z.@Z.@0&@|=@)w+)w+#B+tr+L@@0$@a$@a$@G6@G6@K,@-9@{k+*m+*m+%l#XF#@l#q=$}t#Q;@)B+ep+~-@tX@*5@ik*&&*3h#sy$}!$jk*kk*lk*mk*nk*ok*pk*qk*EH r. K& %# *# cW vK+= @j}+8t.rk*|P sk*tk*65*uk*vk*{d Oh M6@wk*xk*yk*Y@+zk*Ak*Bk*Ck*i)$N[#7P#''%m~+L$+y7%~1&nM%Y'%JY$Dk*`R$LD+.+@>9@>9@l[+T)@rV$'Z#QB$QB$Yx%Yx%A1#A1#A1#Z]$89${l$rr%sD$ar$>b$cN$]v#| @>K@%,3@|$$*d&Vk*g;&m@*9)$L)@AD+&(@#(@]-+4G+jX+J #| @fX+_P+|T+~l$~l$;u$;u$a8$a8$a8$a8$Wk*AU${J$g>&_H$Xk*f^%!_$d4+A9*Yk*!#$u|#v|#Zk*oR%`k* l*P~*.l*+l*@l*#l*$l**g*%l*&l**l*=l*H^*-l*;l*>l*cY.1j+Uo$,l*|H%TT@{-*Yx YA&'l*)l*!l*~l*{l*]l*^l*q~#pP#>e*uL K0.@>.nO /l*/l*/2*(l*_l*:l*7`.+_w+6T+0$@a$@c&@s<@yb#L,@hh#+w+uI+(|+f~+u)+&4+YM@B$+jD+SA+Ln+l;@$='$Kp$*r$Ps&Qs&A'%em+cm+1h+~3@DX+Wp+}h+Vp+::@lk+h}@l(@~k@l(@h}@Oi+fm+E4@5}@,:@WH@G,@F,@er+#w+~P+e@2G.7x.#G+n&+s|.5H.2G.7x.s|.7x.s|.7x.s|.7x.hS.cI+Ea+Ea+Ea+Ea+Ea+Ea+Ea+be+]! Ea+Ea+5A.5A.xc+T_+T_+T_+T_+T_+T_+T_+T_+T_+]! xc+T_+T_+xc+5A.5A.Ea+xc+Ea+]! {! {! 5A.xc+T_+G|@T_+$(+xc+Ea+5A.5A.]! ]$@Yt.Yt.jy.q9+6g+6g+dl.q9+q9+jy.]$@]$@]$@jy.jy.xc+Ea+5A.5A.5A.Ea+xc+$(+]! 5A.Ea+xc+xc+Ea+5A.]! xc+xc+xc+xc+xc+xc+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.5A.5A.5A.5A.5A.]! 5A.Ea+xc+xc+Ea+", "%% %% %% %% %% %% %% ~% ~% d( +h.+h.d( ~% |% d= M= M= M= d= d= d= d= $% $% %% %% %% %% r: *- Q_ [! S& S& L) 6[ L) S& [! [! [! [! [! [! [! &- ~% -H.R_ -H.m` :j.-H.*_ *_ *_ *_ *_ *_ *_ *_ j% 7!.vK+ng &R+' .z) d& c& R% L) U@ {@ ]+ .# .# {+ 5! 4{ G{ 4{ 2{ 5! G{ 24 5! 5! 5! 2{ 2{ 2{ 3{ 3{ ~_ ~_ ~_ ~_ ~_ n3 n3 n3 ~_ ~_ ~_ n3 n3 &5 &5 I> s3.#9.#9.PI.PI.#9.#9.cp.cp.cp.cp.cp.cp.cp.cp.cp.l3 I> I> I> I> I> I> I> v% v% v% v% I> I> I> l3 w% j}+{t.aq.aq.{t.j}+j}+{t.{t.{t.{t.{t.{t.{t.{t.#9.#9.#9.#9.#9.#9.#9.#9.Hu+[3+ET&ET&cp.PI.cp.w7+I> I> I> I> I> I> I> I> fL.fL.fL.I> I> I> I> I> I> I> I> I> I> I> I> I> w4.w4.w4.w4.w4.w4.w4.w4.af.QB@4=+4=+4=+4=+QB@af.6v@6v@6v@6v@6v@6v@6v@6v@w4.w4.w4.w4.fL.fL.fL.fL.v% f% 5% f% I> fL.I> f% s3.h% PI.j}+aq.@~.0Y+Iu+@Z Y* G[ 5>$wF+]|.(}+#m@cl*dl*zE%27*dk*ek*ej*dj*T3*gk*o*&gj*p1@hk*G}$(=$g,$./%tm#J.+3W.,>+,>+,>+,>+,>+,>+,>+:-+:-+:-+_-+>>+Ei$m~+4[%D#$1S#k<&}x@k<&k<&1S#8o@RA$Zz${m${m$jm$jm$]m$]m$ar$ar$>b$Sj$nw$nw$nw$Ms$a8$%K$%K$Ej$]v#S[#~^#P6#P6#~(%W|#W|#J #E@@jX+5$@YK+5G+;K@;K@h[+yM@5&@5&@yM@yM@R,+4G+5&@5&@4G+4G+4G+5$@5$@5$@BI+VK+UK+VK+}V+[ @}V+BI+} @}V+BI+BI+}V+}V+VK+.$#4G+4G+4G+4G+4G+4G+4G+4G+jX+jX+jX+jX+E@@E@@J #J #|V+2T+9G+f^@~-+f^@;B+*>+_w+_w+my+my+Z.@Z.@0&@0&@6o@6o@|=@0&@P,@mb#mb#:^#S6#H6@K,@fy+Yn+py+Mn#&l#cf#2f#3&@ZA+v=@}T+WA+y^@(h+}:@h/%el*W~+av$Kn#[n$fl*gl*hl*il*jl*kl*ll*ml*nl*#H.ol*pl*ql*1@ i+ P* >i.(K.;_ H) rl* )#sl*01#tl*x*@Lj#ul*B]*1K#vl*wl*xl*yl*o'@H1#8]+WX.''%!U#L$+y7%nM%<7&$f&]I$zl*n)%LD+.+@l[+l[+L6@T)@rV$rV$Yx%V_#V_#V_#Z]$Z]$ZR#ZR#B%%B%%km$rr%ar$>b$a9$]v#| @jX+M$(H$Ml*Lt%{]$Nl*Ol*t|#s<#nN$Pl*]C%u*%`k*Ql*Rl*Sl*Tl*Ul*L{*Vl*Lc*NG$Wl*Xl*Yl*Zl*`l* m*.m*+m*@m*'4+e|+7:%7K#!8@'b*NY%a%&#m*$m*%m*&m*`8*cn.K0.7,.cn.Pa.}-.({.Na.6U+nO cn.P++Ma.%$.Kq.r_.A0*Rd*v0.v0.La.Ma.Oa.#4.M!.Ay.`d#~(./0.>r+)i+o3 O4 Qe+61.cE sn.)s 4C.*m*=m*-m*K~$,Z#90$e;%w-$nz#2 @>T@~-+f^@*>+0G+my+J@@0$@a$@c&@s<@yb#hh#hh#Ft+A$+u)+qy+Ll+YM@jD+H,+Ml+-'@$w+l;@;'@/V+$!@$!@$!@J<@&3@&3@}1@0~+0~+J<@<1@}1@}1@}1@2}@2}@2}@0~+]]+yV#yV#iR${`#pR$qR$sQ$EZ$iR$ 7@iR$ 7@iR$ 7@iR$ 7@3}@3}@3}@11@21@Iu$e6$#x%g>$='$F5&Kp$ !% !%H*$tk$_o+Vp+fm+Vp+kk+Oi+kk+lk+b1@lk+/L+l(@b1@Oi+fm+c1@E4@I2@,:@v~@:R+5X+oI+Gt+@w+tI+ N+:x@:x@:&@:&@Jl+e^@_w+_w+(w+_w+my+ny+4 @O)@O)@4 @ny+ny+my+_w+e^@7X+uy#uy#(t# N+ N+OK+OK+ N+ N+7X+7X+fh#fh#Aq@Y+$oe#'b$3=@'b$oe#p;@-:#15%3k#3k#-_#gY#a$@a$@X<#X<#c&@gY#)~#)~#L@@L@@0&@t<@O)@0G+3 @f^@3]+rd+.@#:f+:|+&N+:|+:|+R.+16+'v@7a@kK@K_@K_@RA+6y+6y++>#+>#$E+$E+1w+-5@-@&A]%)'$Mu@Z6$n'+9!+-]$;>%4)@qo k{@M| OL@2e u0 ;m*>m*07@eA *Q ,m*Y~*o& ':+'m*]q%6;@x{ $(+T_+G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+aH@bH@}f.cI+NM+NM+NM+cI+NM+l7 bH@}f.cI+NM+l7 }f.xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+T_+7P.7P.$(+$(+7P.Kh+xc+G|@G|@G|@G|@G|@G|@G|@/{ fd%)<*)<*:b$:b$d7$d7$d7$z<$d7$)<*)m*)m*)<*d7$Ae+J; xM+GA+*; 0d.@A.0d.@A.Pj+hS.Pj+hS.Pj+hS.Pj+Pj+l7 xc+xc+xc+xc+xc+xc+xc+be+]! xc+xc+Ea+xc+T_+7P.$(+$(+$(+$(+$(+$(+$(+$(+5A.xc+T_+$(+5A.be+be+{! $(+xc+xc+xc+xc+Ea+Ea+Ea+G|@G|@T_+$(+$(+xc+Ea+Ea+jy.)> )> q9+dl.]$@]$@Ai.dl.q9+]$@6g+)> )> )> 6g+5A.5A.]! 5A.Ea+xc+T_+G|@5A.5A.Ea+xc+xc+Ea+5A.5A.:{+:{+:{+:{+:{+:{+:{+:{+v]#v]#v]#v]#v]#v]#v]#v]#5A.5A.5A.5A.5A.5A.5A.5A.Ea+Ea+xc+$(+$(+xc+", "%% %% %% %% %% %% %% ~% d( +h.+h.+h.+h.d( |% d= M= M= M= 3{ 3{ 3{ &) $% $% %% %% %% %% r: *- Q_ [! S& S& L) 6[ L) S& [! [! [! [! [! [! [! &- %% R_ R_ -H.m` m` -H.*_ *_ *_ *_ *_ *_ *_ *_ j% 7!.vK+ng &R+' .z) d& c& S% S& {@ k+ h. .# .# ]+ 4{ 4{ 4{ 2{ d= 3{ 4{ 24 5! 2{ 2{ 2{ 3{ 3{ d= d= &5 &5 n3 n3 n3 n3 n3 ~_ ~_ ~_ ~_ n3 n3 &5 &5 I> s3.<4 <4 h% h% <4 <4 s3.<4 <4 <4 <4 <4 <4 <4 <4 I> I> I> I> I> I> I> I> f% f% v% I> I> fL.w4.':+w% j}+j}+j}+j}+j}+j}+j}+j}+j}+j}+j}+j}+j}+j}+j}+#9.#9.#9.#9.#9.#9.#9.#9.VW.cp.6z+ET .8v.cp.6z+v% v% v% v% v% v% v% v% w4.w4.fL.fL.I> v% v% f% I> I> I> I> I> I> I> I> w4.w4.w4.w4.w4.w4.w4.w4.g% af.4=+6v@6v@4=+af.g% 6v@6v@6v@6v@6v@6v@6v@6v@w4.w4.w4.w4.fL.fL.fL.fL.fL.v% f% f% fL.fL.I> f% ;H.<4 PI.j}+aq.@~.' .u}+pS Y* q] )/ CF+/8 X4.#m@q2%!m*VB%27*37*ek*ej*ej*T3*57*~m*gj*p1@hk*G}$ij*{R@Lu@q'@J.+3W.,>+:-+:-+ki@3W.,>+:-+:-+YJ#YJ#4[%m~+1r$K[#D#$=7$1S#}x@}x@I4@I4@HK$1S#L[#RA$jm$jm$jm$jm$ln$]m$]m$ar$>b$>b$nw$nw$nw$Ms$a8$%K$%K$Ej$Qj$]N#~^#~^#P6#P6#W|#W|#J #E@@jX+5$@YK+5G+;K@;K@H$+r8+R,+R,+yM@R,+4G+jX+4G+4G+4G+4G+4G+4G+5$@5$@}V+VK+.$#UK+}V+[ @[ @BI+eX+}V+VK+VK+VK+VK+.$#FM@5&@5&@5&@5&@5&@5&@5&@5&@jX+jX+jX+E@@E@@J #J #J #S,@2T+9G+f^@~-+~-+*>+0G+_w+_w+my+my+Z.@Z.@0&@0&@a=@a=@a=@be#kb#lb#lb#lb#8%$S6#G6@(P+^/+kr+)k+M4#*l#b[+dy+{/+]/+I6@=w+vI+S1+Ut+sG+r(@1:@Ka%EA#['+@W$*W#/A&E@+*W+{m*]m*^m*/m*(m*_m*:m* y% D{ CH.|m*1m*2m*e$#96 3m*W)+R8%4m*5m*6m*r3*dZ.x4#'M$p=#~}%!U#L$+A3%<7&CA$}6%w;%Ng%&q&LD+.+@l[+L6@L6@T)@mF$mF$V_#V_#']$']$ZR#ZR#ZR#5h#W_#B%%B%%4[%!U#)g$2h$Qj$nZ@3G+AD+Gn+T.@S.@oy+Rn+7m*8m*J$..&V~$qm*g^%=>$@vm*wm*xm*ym*VD$zm*EB%Am*`t%|K%SB&9%&Bm*Cm*Dm*Em*c5@Co.La.cn.nO jj+Oa.({.({.cD.cD.U>.>'.o;.U>..:*o;.;'.{u.rx@@=.p;.M!.l=&~(.-H.f^ <| ]= '% [+ &h #n K- .~.X5.OD Fm*Gm*Hm*$='$+9@+9@gp%gp%M9&'f&'f&b1@g}@b1@g}@b1@g}@b1@X<@/L+X<@/L+g}@kk+R2$z;$E4@%}@WH@5X+5X+Ht+nI+`M+tI+ N+:x@fh##9@<&@<&@L)@K@@my+my+my+ny+ny+4 @4 @Q,@t<@t<@4 @ny+my+_w+e^@:x@uy#uy#(t# N+ N+OK+OK+eh#eh#eh#eh#fh#fh#fh#-:#p;@pq#'b$'b$oe#p;@o;@Y+$3k#3k#-_#-_#H6@a$@6~#6~#G6@-_#,'$)~#P,@L@@0&@t<@O)@0G+3 @f^@3]+rd+.@#:f+:|+&N+:|+e[+16+eD+S{@kK@|O#|O#K_@K_@,[+6y++>#+>#$E+7e@-5@rQ#Jm*A]%A[+m*`d*>[@$|&Nm*]1+Om*9$ A{$1<#~4.aM.zi.G|@Kh+Kh+Kh+G|@T_+$(+G|@G|@G|@G|@G|@G|@G|@G|@}f.}f.l7 cI+cI+cI+cI+cI+NM+l7 }f.l7 cI+NM+cI+}f.$(+$(+$(+$(+$(+$(+$(+$(+xc+xc+xc+xc+xc+xc+xc+xc+7P.y4&7P.$(+T_+7P.Kh+xc+T_+T_+T_+T_+T_+T_+T_+|m.fd%)<*:b$:b$d7$d7$z<$z<$i|$d7$)m*Pm*Pm*)m*d7$KE#jy.ks@%U.Zh@Rx.2^ Rx.2^ %U.ks@%U.ks@%U.ks@%U.cI+T_+T_+T_+T_+T_+T_+T_+T_+]! Ea+$(+$(+xc+xc+T_+Kh+$(+$(+$(+$(+$(+$(+$(+$(+Ea+$(+T_+$(+Ea+]! 5A.Ea+$(+$(+T_+G|@T_+xc+5A.]! G|@G|@G|@T_+T_+$(+xc+xc+q9+6g+6g+dl.Ai.jy.jy.1m.dl.q9+]$@6g+Yt.Yt.Yt.Yt.5A.5A.5A.Ea+Ea+xc+$(+$(+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+:{+:{+:{+:{+:{+:{+:{+:{+h]@h]@h]@h]@h]@h]@h]@h]@5A.5A.5A.5A.5A.5A.5A.5A.xc+xc+$(+$(+$(+$(+", "4% 4% 4% 4% 4% 4% 4% ~% d( +h.+h.+h.+h.d( |% )= V_ )= d= d= 3{ &) &_ $% %% %% %% r: r: r: *- Q_ [! S& S& L) 6[ L) S& [! [! [! [! [! [! [! &- %% R_ *_ R_ l` m` R_ g% *_ *_ *_ *_ *_ *_ *_ j% 7!.ni z) ' .' .z) d& c& R% [! {@ i> l& .* * U@ 5! 5! 5! 3{ )= )= 2{ G{ 5! 2{ 2{ 2{ 3{ 3{ d= d= &5 &5 n3 n3 n3 n3 n3 ~_ ~_ ~_ ~_ n3 n3 &5 &5 &5 QB@af.af.g% g% af.af.QB@af.af.af.af.af.af.af.af.I> I> I> I> I> I> I> I> v% v% v% I> fL.w4.w4.':+w% j}+j}+j}+j}+j}+j}+j}+j}+j}+j}+j}+j}+j}+j}+j}+#9.#9.#9.#9.#9.#9.#9.#9.G6.#9.ET&w7+#9.8v.cp.6z+v% v% v% v% v% v% v% v% w4.w4.fL.fL.I> v% v% f% l3 l3 l3 l3 l3 l3 l3 l3 ':+':+':+':+':+':+':+':+g% af.4=+6v@6v@4=+af.g% 6v@6v@6v@6v@6v@6v@6v@6v@fL.fL.fL.fL.w4.w4.w4.w4.a, fL.v% I> w4.a, fL.v% .l.;H.cp.{t.{t.0Y+ni `$+zh.(= $^ -n+i|%-9 X4.>*%Qm*Rm*VB%27*37*ek*ej*ej*gk*57*~m*gj*p1@KZ@ZO@G}${R@Lu@q'@J.+3W.,>+:-+:-+J.+ki@,>+:-+YJ#YJ#:-+_-+m~+1r$K[#D#$=7$1S#}x@}x@I4@I4@HK$1S#L[#RA$jm$jm${m${m$jm$jm$]m$]m$ar$ar$=c$=c$nw$Ms$Ms$Rj$%K$Ej$Qj$]N#]N#S[#~^#P6#P6#P6#| @4Z+jX+5$@4G+R,+;K@;K@f>$h[+R,+R,+yM@R,+4G+E@@5$@5$@4G+4G+4G+4G+4G+4G+[ @VK+.$#.$#BI+[ @[ @}V+eX+}V+UK+UK+VK+UK+cp+FM@5&@5&@5&@5&@5&@5&@5&@5&@5$@jX+jX+jX+E@@E@@J #J #|V+2T+x)+hX@f^@f^@f^@3 @Y.@Y.@my+my+ny+ny+0&@0&@Q,@m5$u!%ae#Ad%g %Sm*Sm*Tm*8%$S6#a$@fy+Ob+Ob+)k+bf#:f#Qn#ki+&m+-9@ L+v)+;I$t<@*>+-B+X&+{K@6G+|{#~8&(<+/<+bj$5p&Hj*Um*Vm*.-@Wm*Xm*Ym*Zm*`m* n*.n*+n*@n*.+ G h@ 3!.#n*$n*%n*v*$5e &n**n*;i*#9*=n*ys@R1+i[+N1#Dj$S5+,Z#1r$L$+A3%CA$0T+A@$wp&Y(&<>%i|#.+@L6@L6@T)@T)@qX+qX+V_#V_#']$']$ZR#ZR#ZR#5h#D)+D)+:-+_-+K[#N[#!g$M1#fX@TK++N+h~+T.@xD+Xn++m+7f#Q4#E`#Qc$=2+.4+&2+~6+4I#3I##2#1I##2#-}#t_%@5%$5%-n*;n*>n*,n*'n*)n*!n*;.&~n*{n*]n*^n*/n*(n*_n*:n*Qh%z'%nm*SJ@.sF.Ig.dD.Y6.iI.ce SU +n @n (j.r;.sk tk 0' .@ [$ `@ hn*94.~:$in*jn*kn*ln*mn*nn*on*pn*B+*>+Y.@my+ny+Z.@K@@O,@-(@s<@yb#L,@t9#ih#s9#~G+mI+Ml+Ml+Ml+q$>q$Ao$Ao$Ao$4}@4}@4}@4}@4}@4}@4}@4}@io@0X#0X#0X#4}@4}@4q&4q&V>$V>$+9@+9@V=$V=$M9&'f&M(#X<@aC$g}@.9@g}@.9@g}@:u%f}@:u%f}@aC$U>$A6@A;$w^@;]@:R+[R+]V+ZM+/P+2N#(t# N+fh#Aq@#9@#9@L)@L)@Z.@4 @4 @O)@O)@t<@t<@t<@Q,@t<@t<@4 @ny+my+_w+e^@:x@7X+7X+ N+ N+ N+OK+OK+eh#eh#eh#eh#7X+7X+7X+VH@p;@pq#'b$pq#p;@p;@o;@Y+$3k#eh#-_#-_#*9@H6@S6#S6#G6@-_#,'$,'$P,@P,@0=@Q,@O)@0G+3 @f^@3]+rd+.@#:f+f[+:|+:|+e[+G$+'v@S{@kK@|O#|O#Gy+G&+,[+,[+*E#Q2@+N@+N@-5@5]@Jm*U^@A[+X.l$ DU%1<#]Z@yn*zi.G|@Kh+Kh+Kh+G|@T_+$(+$(+$(+$(+$(+$(+$(+$(+$(+ko.NM+NM+cI+l7 l7 l7 l7 NM+cI+}f.l7 NM+ko.cI+l7 xc+xc+xc+xc+xc+xc+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+oh.oh.G|@Ea+xc+7P.Kh+5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+6j+_c$:b$:b$d7$d7$z<$z<$z<$i|$d7$)m*Pm*Pm*)m*d7$KE#{! -V@]! 35+Ea+f+#Ea+f+#Ea+f+#Ea+f+#Ea+f+#Ea+Ea+T_+T_+T_+T_+T_+T_+T_+T_+$(+T_+G|@T_+Ea+5A.Ea+xc+xc+xc+xc+xc+xc+xc+xc+xc+]! 5A.xc+Ea+5A.5A.xc+T_+xc+$(+G|@G|@G|@$(+5A.{! G|@G|@T_+T_+T_+$(+$(+$(+q9+6g+6g+dl.Ai.jy.jy.1m.dl.q9+]$@6g+Yt.Yt.Yt.Yt.xc+xc+xc+xc+Ea+Ea+5A.5A.xc+xc+Ea+Ea+Ea+Ea+xc+xc+v]#q)@q)@q)@q)@q)@q)@q)@PS@PS@PS@PS@PS@PS@PS@h]@5A.5A.5A.5A.5A.5A.5A.5A.$(+$(+xc+xc+xc+xc+", "4% 4% 4% 4% 4% 4% 4% ~% ~% d( +h.+h.d( ~% |% 3c 3c != != )= $% &) 4% %% %% %% r: r: r: r: r: Q_ [! S& S& L) 6[ L) S& [! [! [! [! [! [! [! &- %% *_ *_ R_ l` l` R_ g% *_ *_ *_ *_ *_ *_ *_ 5% *- ni z) ' .' .z) d& c& C& L) m@ k+ l& 2% * t% 2{ 5! 5! 2{ )= )= 3{ 5! 5! 5! 5! 2{ 2{ 2{ 3{ 3{ ~_ ~_ ~_ ~_ ~_ n3 n3 n3 ~_ ~_ ~_ n3 n3 &5 &5 &5 X_ A^.W5 0c [4 A^.W5 X_ [4 0c [4 0c [4 0c [4 0c I> I> I> I> I> I> I> I> I> I> fL.fL.fL.fL.w4.':+-J.{t.j}+j}+j}+j}+{t.aq.{t.{t.{t.{t.{t.{t.{t.{t.#9.#9.#9.#9.#9.#9.#9.#9.9, PI.|5+|5+#9.PI.cp..l.I> I> I> I> I> I> I> I> fL.fL.fL.I> I> I> I> I> l3 l3 l3 l3 l3 l3 l3 l3 ':+':+':+':+':+':+':+':+af.QB@4=+4=+4=+4=+QB@af.6v@6v@6v@6v@6v@6v@6v@6v@fL.fL.fL.fL.w4.w4.w4.w4.8H.w4.I> fL.w4.a, fL.v% >H.5v@cp.{t.{t.' .V[&1i$Yn }].zn*+,>+,>+ki@3W.:-+YJ#HK$YJ#,>+W,@>>+Ei$m~+4[%D#$1S#k<&}x@k<&k<&1S#8o@RA$Zz${m${m${m${m${m$jm$ln$]m$]m$]m$=c$=c$nw$Ms$Ms$Rj$%K$Ej$[{#]N#]N#]N#~^#~^#P6#P6#| @4Z+jX+5$@4G+R,+;K@;K@f>$r8+R,+R,+yM@R,+4G+jX+5$@5$@5$@4G+4G+4G+5&@5&@[ @VK+.$#.$#VK+[ @[ @[ @[ @BI+UK+UK+VK+VK+.$#9V@4G+4G+4G+4G+4G+4G+4G+4G+4G+4G+5$@5$@jX+jX+jX+E@@:P+Q,+%P.$cs%;L$)_$5C&)'@T!*Jc$%#$PG$^B$a`$&o*Q'**o*^a@X1+YM@B$+V/$-W#{U#=o*C8*)V%-o*;o*>o*,o*'o*)o*!o*~o*{o*]o*J-+^o*/o*-y&(o*yY.jj+Vb.Xh*Y<.fc*'c*T>.za@Jq.*$.x5.6!.l#@Y^ S& $. .. _. -. R =$ Q# _o*9! 6z :o*$-'$F5&+9@V=$V=$H*$tk$Z0@aC$aC$.9@.9@*'$*'$*'$:u%:u%:u%aC$.9@A6@F4@p0$;]@WH@[R+rI+oI+ZM+/P+3P#OK+ N+:x@<&@#9@#9@L)@}=@0&@4 @t<@Q,@Q,@Q,@t<@t<@O)@O)@4 @ny+ny+my+_w+e^@:x@7X+7X+ N+ N+ N+OK+OK+7X+ N+ N+ N+ N+ N+ N+p;@jc@4=@'b$pq#p;@eK@VH@-:#eh#eh#-_#-_#*9@*9@_^#_^#gY#u!$,'$,'$a&@P,@0=@Q,@O)@0G+3 @f^@3]+rd+.@#:f+f[+:|+:|+:|+__+G$+'v@RA+K_@K_@G&+G&+G&+G&+ik+ik++N@;Q#5]@2p#u.*U^@A[+7o*9l*0l*b#+y5&SW.bQ yW$&;@C9 9)@J: tn*e_#u!&8o* ~*Do+9o*0o*A{ Ic% X+B, ns%x{ $(+T_+G|@G|@G|@T_+T_+xc+xc+xc+xc+xc+xc+xc+xc+be+13+NM+cI+l7 l7 l7 l7 ko.cI+l7 l7 NM+ko.NM+l7 Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Kh+G|@5A.be+5A.Kh+G|@]! 5A.5A.5A.5A.5A.5A.5A.;~ _c$:b$d7$d7$z<$z<$z<$i|$z<$d7$)<*)m*)m*)<*d7$Y@$8' ]%@y*$q)@$.@q(#$.@q(#c> q)@c> q)@c> q)@c> v]#T_+T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@$(+5A.{! ]! 5A.xc+xc+xc+xc+xc+xc+xc+xc+8g.be+]! {! be+{! Ea+T_+Ea+xc+$(+T_+T_+xc+5A.]! $(+$(+$(+$(+$(+$(+$(+$(+jy.)> )> q9+dl.]$@]$@Ai.dl.q9+]$@6g+)> )> )> 6g+$(+$(+$(+$(+xc+5A.]! {! $(+xc+xc+Ea+Ea+xc+xc+u]#q)@q)@q)@q)@q)@q)@q)@q)@OU+OU+OU+OU+OU+OU+OU+OU+h]@5A.5A.5A.5A.5A.5A.5A.$(+xc+Ea+Ea+Ea+Ea+", "4% 4% 4% 4% 4% 4% 4% 4% %% ~% ~% ~% ~% %% &) 5c 5c 4c 8c 0' |% $% %% %% r: r: r: r: 6!.6!.r: Q_ &- &% &% ^{ Q_ ^{ &% &- &- &- &- &- &- &- &- 4% 5% f% 4% ~% ~% 4% v% 5% 5% 5% 5% 5% 5% 5% 5% *- Y^ Z^ b/ b/ Z^ Y^ *- ^{ u% y% &% &% y% =] Q_ &_ n3 &5 &5 &_ $% &) &_ n3 n3 n3 n3 ~_ ~_ &_ &_ $% &) &) &_ ~_ ~_ n3 n3 ~_ ~_ ~_ n3 n3 &5 &5 &5 Q6 W5 |4 [4 8M W5 |4 Q6 8M [4 8M [4 8M [4 8M [4 &5 I> I> I> I> I> I> I> w4.w4.w4.fL.fL.fL.fL.-J.':+aq.{t.j}+j}+{t.aq.(s.aq.aq.aq.aq.aq.aq.aq.aq.<4 <4 <4 <4 <4 <4 <4 <4 1% i% <4 s3.s3.;H.;H.;H.fL.fL.fL.fL.fL.fL.fL.fL.I> I> I> I> I> fL.fL.fL.l3 l3 l3 l3 l3 l3 l3 l3 ':+':+':+':+':+':+':+':+4=+4=+QB@af.af.QB@4=+4=+6v@6v@6v@6v@6v@6v@6v@6v@I> I> fL.fL.w4.w4.a, a, a, fL.I> I> fL.fL.I> f% 5v@;H.#9.{t.{t.0Y+ni gO.ze+}].$^ -n+i|%-9 (9*Z< g<@ao*An*27*bo*ek*Bn*Bn*57*Cn*%g$gj*p1@KZ@L$*ZO@./%q'@v<@J.+ki@3W.3W.3W.3W.,>+YJ#HK$HK$:-+3W.!}@U`$''%>>+_-+4[%HK$I4@k<&}x@}x@8o@bE$Zz$Vy$/v$/v$Zz$Zz$Zz$Zz$jm$jm$*c$*c$]m$]m$=c$>b$>b$Sj$Rj$_a$N1#N1#M1#M1#Qj$]v#]v#]v#Qm#!k#9e#iX+WK+hF$CM@CM@H$+r8+R,+R,+yM@yM@5&@5$@jX+5$@5$@5$@4G+5&@5&@5&@fX+CI+i~+U0+]-+2R+gX+gX+2R+CI+->+]-+CI+2R+]-+->+5$@5$@5$@5$@5$@5$@5$@5$@5&@5&@5&@4G+4G+5$@5$@5$@zI+=>+:P+T,@Q,+>T@3]+rd+~-+~-+;B+;B+*>+*>+4 @4 @9=@7&@}`$pr&co*co*do*eo*fo*Xs%8%$_^#*9@<&@#k+`K+8f#go*ho*ho*(f#io**w+mp+qe#(f+(_+=4+[=@*4+wr+b~@*9@-(@y$+pg@9k@j}@a*$Q.+RF@c*$o_+w9*h(*jo*8)&^>@ko*lo*mo*no*oo*po*qo*ro*=q >R+8C so*jN%to*uo*xs@em@Sx#,2+}{#c9$Ej$T4$''%{l$4V+FC$Gz$M#$cv$B@$8M@Br+O]+T)@X,@X,@T)@g~@Y{@QB$QB$Yx%Yx%A1#A1#A1#Z]$Ar+s##BM#,>+e$@l~+1h$zA#o7#[V+AD+C@@$B+mr+Xn+[w+/k+'d$U4#q7#>f+,6+v.$E~$W4$^b$;}#B+0G+0G+O)@R,@fm$!K@>K@YK+YK+5$@5Z+zM@lF$lF${J$)H$)H$)H$)H$c8$qn%Rb$l`%ds#*>$!_%+W$5+$^c+U]#{z@Mc$k8*dl$L1$H1$[T@C$+$>+'-+/f+Ob+):@n<@C^&Ho*R)*Io*jJ#Jo*Ko*Lo*Mo*No*Oo*Po*Qo*|a*Ro*So*To*>L.@m$Uo*yd.>'.Oa.~e*HE..:*{N@sN%x5.j}+Z^ u& ,5 @% 7. J! '@@q+,P+x=@58+58+58+v^@v^@v^@v^@hc@L<@K<@;:@;:@;:@11@K<@K,+2(@u^@u^@2(@Tl$2(@v^@(a@(a@(a@(a@u^@u^@v^@v^@31@I2@31@I2@31@w^@lt$w^@lt$w^@lt$w^@lt$w^@lt$lt$;:@11@11@11@Y4@M<@+r%qH&7)$6)$Kp$F5&V=$gp%H*$B6@Z0@g>$g>$g>$='$V>$V>$V>$='$='$='$V>$-'$6)$[!$BT#WH@[R+rI+^P+ZM+ZM+/P+uy#OK+OK+K,@:&@<&@L)@tr+ED+K@@ny+O)@t<@Q,@t<@O)@O)@my+my+my+my+my+my+my+e^@:&@:x@:x@K,@K,@K,@OK+OK+}R+}R+@w+tI+tI+tI+tI+eK@jc@4=@pq#4=@eK@eK@VH@-:#eh#eh#-_#-_#)~#)~#v9#v9#gY#u!$TK$TK$a&@a&@0=@Q,@O)@0G+3 @f^@3]+rd+.@#:f+f[+:|+f[+f[+f[+__+_/+c^#lK@,[+,[+G&+bw+Pp+Pp+>p*bi%bi%5]@~R@u.*@/%L+*7o*8~$]V&,p*'p*SW.h:&20 qo &;@)p*tn*/|*(|*X{ ,1+$7#Vq@9o*0o*4( ME+qK+ns%j4@y*$c> x{ nh.zi.zi.nh.nh.$.@$.@$.@$.@$.@$.@$.@:{+{! ]! Ea+xc+xc+Ea+5A.]! ]! Ea+xc+Ea+]! {! 5A.xc+5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.$(+Ea+8g.`Y be+T_+T_+{! Ea+Ea+Ea+Ea+Ea+Ea+Ea+6j+3&$3&$3&$Y@$Y@$Y@$+d++d+3&$3&$3&$3&$3&$3&$3&$3&$*Z+cQ#X`+q,@Nc&q,@X`+cQ#ME+cQ#ME+cQ#ME+cQ#ME+{**u]#$(+$(+$(+$(+$(+$(+$(+Ea+$(+T_+xc+]! {! ]! 5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+]! 5A.5A.]! be+be+5A.$(+]! 5A.Ea+Ea+xc+Ea+Ea+Ea+xc+xc+xc+xc+xc+xc+xc+xc+]$@Yt.Yt.jy.q9+6g+6g+dl.q9+q9+jy.]$@]$@]$@jy.jy.5A.Ea+xc+$(+$(+xc+5A.]! T_+$(+xc+Ea+Ea+xc+$(+d #PS@r,@r,@r,@r,@r,@r,@r,@A) A) A) A) A) A) A) OU+h]@5A.5A.5A.5A.5A.5A.5A.xc+Ea+5A.]! ]! 5A.", "4% 4% 4% 4% 4% 4% 4% 4% 4% %% ~% ~% %% 4% 4% E7 p} 7c 9c 8c 0' ~% ~% r: r: r: r: 6!.6!.6!.6!.Z^ &- &% &% ^{ Q_ ^{ &% &- &- &- &- &- &- &- &- 4% 5% f% 4% %% ~% 5% v% 5% 5% 5% 5% 5% 5% 5% 5% *- Y^ Z^ b/ b/ Z^ Y^ *- y% -h u% &% &% y% =] Q_ &_ &5 ;b.{_ &5 &_ &) &_ &5 &5 &5 n3 n3 ~_ ~_ ~_ 0' |% $% &) &_ ~_ n3 n3 ~_ ~_ ~_ n3 n3 &5 &5 &5 b3@|4 |4 8M 8M |4 |4 b3@8M 8M 8M 8M 8M 8M 8M [4 &5 I> I> I> I> I> I> I> a, a, a, w4.fL.I> I> l3 Vl.(s.aq.{t.{t.aq.(s.ym.(s.(s.(s.(s.(s.(s.(s.(s.<4 <4 <4 <4 <4 <4 <4 <4 6% 6% 6% <4 ;H..l.;H.s3.w4.w4.w4.w4.w4.w4.w4.w4.f% v% v% I> fL.fL.w4.w4.l3 l3 l3 l3 l3 l3 l3 l3 ':+':+':+':+':+':+':+':+6v@4=+af.g% g% af.4=+6v@6v@6v@6v@6v@6v@6v@6v@6v@I> I> fL.fL.w4.w4.a, a, w4.I> f% f% I> I> f% 4% s3.<4 PI.j}+aq.@~.0Y+3!.Zn f= q] t6*!p*Tc +u%;~.g<@ao*An*27*bo*dk*Bn*Bn*57*Ok$%g$o*&p1@KZ@L$*ZO@q'@tm#v<@J.+ki@ki@ki@ki@,>+:-+HK$1S#HK$:-+ki@dk@XX. *+U`$.*+_-+YJ#4)#I4@l7#l7#bE$dD$Vy$Gx$dw$dw$Vy$Zz$Zz$Zz$jm$jm$*c$*c$]m$]m$=c$>b$>b$Sj$Rj$Rj$Ej$N1#N1#M1#Qj$]v#]v#]v#Qm#!k#9e#iX+WK+hF$CM@CM@h[+yM@5&@5&@yM@yM@R,+4G+jX+jX+5$@5$@4G+5&@5&@5&@fX+CI+U0+U0+->+2R+fX+fX+2R+]-+->+]-+2R+gX+2R+]-+jX+jX+jX+jX+jX+jX+jX+jX+R,+R,+R,+5&@5&@4G+4G+4G+@N+zI+T,@kX+2T+x)+'T@c~@~-+~-+;B+;B+*>+*>+4 @4 @7&@7&@pr&pr&eo*eo*do*~p*fo*Xs%Tm*v9#v9##9@Aq@_x@{p*]p*^p*^p*9c#io*&w+&w+Tn+Tn+-w+;w+:&@Kl+(P+fh#iD+uI+,N$/p*&t@N)@+5@ci@GD+-4+yp+TG$y|+(p*y+@:H%_p*:p*%&6$%*$ *+{l$4V+FC$^B+M#$U)@0]@~f#Br+O]+T)@X,@X,@T)@g~@Y{@0/$QB$QB$QB$4V+4V+A1#|f+ek@sy#BM#IL#e$@/{#8D#Xk$ui$8~@*B+80#mr+Lt+sp+!k+b[+U4#i0# G#f8+wB#&^$et#]w#]l#RL#kV#Cw#Jt#'/%Mt#Dt#OB#G)%/-%E)%8p*9p*0p*t<%ap*.l%bp*<_&cp*dp*ep*0l$f6$t;&U>${u+a~@&7@U}+>2+3 @lX+lX+0G+ny+0&@t<@,T@!K@YK+2 @2 @YK+5Z+5Z+)I$lF${J${J$)H$)H$)H$)H$Rb$ ^$/R#/v@*>$!_%!_$5+$+5$r6+Tu@qj%aG$8x%Km$c1@iV+!7@<=@C$+6~+|]+.B+R0+):@):@lV@t'#fp*gp*hp*ip*jp*kp*lp*mp*U[*np*op*pp*qp*rp*(9.wk bf.UO&ts.Ig@9, G6.@n vk =] YY s% ct '@#q+Zp+T;@I2@2(@|1@|1@;:@;:@;:@;:@hc@L<@K<@;:@;:@;:@11@K<@J,+Tl$v^@v^@Tl$K,+Tl$2(@X4@X4@X4@(a@(a@u^@u^@u^@I2@I2@%}@%}@;]@,:@WH@WH@w^@w^@w^@w^@w^@w^@w^@lt$hc@3}@`6@11@Y4@Y4@L2&L2&[!$7)$*r$F5&gp%gp% a@1k*(;$g>$g>$='$V>$V>$-'$-'$-'$-'$-'$W>$7)$41@.7@.:$5X+]V+^P+sI+ZM+dr+tI+7X+}R+(P+|R+tr+tr+tr+tr+Rt+_w+my+4 @O)@t<@O)@4 @ny+_w+_w+_w+_w+_w+my+my+K@@:&@:x@:x@K,@K,@K,@OK+OK+(T+ay+2+>2+>2+rd+:f+; ++>#6y+,[+ik+bw+>p*Mp*;%@bi%nS$2p#]=#U^@;`+L+*7o*Np*Op*Pp*mA%%'&,H%20 K`%s0 {i&X>@X>@la (|*Qp*61&u^#Rp*Sp*w8 mh.,0+QU+Ic%L8@0@@c> x{ nh.zi.zi.nh.$.@$.@$.@$.@$.@$.@$.@$.@;~ Ea+xc+xc+Ea+5A.{! 8g.]! 5A.xc+Ea+]! {! 5A.xc+]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.5A.5A.5A.5A.5A.5A.5A.{! `Y ti 8g.$(+$(+be+xc+xc+xc+xc+xc+xc+xc+xc+6j+3&$3&$Y@$Y@$+d++d++d+3&$Y@$+d++d++d++d+Y@$x*$Nc&qK+qK+$' qK+ X+_($zM+1<#1<#1<#1<#1<#1<#1<#ME+$.@xc+xc+xc+xc+xc+xc+xc+{! 5A.Ea+Ea+]! {! 5A.xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+G|@Kh+G|@xc+5A.]! Ea+T_+{! ]! ]! ]! 5A.Ea+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+xc+xc+6g+i~ i~ ]$@jy.)> )> q9+q9+jy.jy.]$@jy.q9+q9+dl.be+]! Ea+$(+$(+$(+xc+Ea+T_+$(+xc+Ea+Ea+xc+$(+d #PS@r,@r,@r,@r,@r,@r,@r,@A) A) A) A) A) A) A) OU+h]@5A.5A.5A.5A.5A.5A.5A.xc+Ea+]! {! {! ]! ", "f% 5% %% ~% d( d( d( ~% ~% ~% ~% ~% ~% ~% ~% $% $% $% $% %% %% %% %% r: r: 6!.6!.6!.6!./#&6!.7% 4% 5% 5% 5% 5% 4% 4% 5% 5% 5% 5% 5% 5% 5% 5% y% Q_ ^{ &- &- ^{ Q_ y% ^{ ^{ Q_ y% u% u% u% y% f% f% f% f% f% 5% 5% 5% x% x% x% x% x% x% x% x% 4% 5% 5% 5% 4% 4% 4% 5% f% f% f% f% f% f% f% f% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 &5 W_ W_ &5 n3 &_ $% 'i.|4 eH.eH.b3@b3@]b+sD#8M 8M 8M |4 b3@]b+v.+;p.n3 5% 4% f% I> w4.fL.v% I> I> I> I> I> I> I> l3 j% (s.bv#j}+l#@{t.(s.{t.{t.{t.{t.{t.{t.{t.{t.{t.<4 af.af.af.af.af.af.af.af.af.QB@QB@QB@4=+4=+4=+%% f% w4.a, fL.I> fL.w4.v% v% v% I> fL.fL.w4.w4.':+(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.':+6v@6v@6v@6v@6v@6v@6v@6v@af.6v@Tp*Tp*>r+6v@6v@6v@a, w4.fL.I> v% v% v% v% w4.w4.w4.w4.w4.w4.w4.w4.h% <4 cp.aq.aq.0Y+' .3!.|U }].$^ n,$Ja+N<.+k Z< Qm*_D%An*Up*dk*Vp*Bn*Bn*Cn*Cn*o*&gj*:-@p1@ZO@L$*Lu@q'@v<@3W.:-+:-+:-+,>+3W.3W.,>+,>+:-+YJ#YJ#4[%m~+1r$K[#4[%D#$1S#}x@}x@k<&k<&8o@8o@Zz$Zz$/v$/v$Vy$i%%Vy$Vy$Vy$Vy$/v$/v$ln$ln$ln$]m$=c$=c$>b$>b$_a$_a$a9$a9$Ej$,p$_8$_8$d9$d9$5($5($jF$iF$iF$}{#jX+5$@5&@yM@yM@R,+5&@4G+E@@E@@E@@jX+5$@4G+4G+4G+iX+WK+hF$@#$@#$hF$WK+iX+8e#9e#9e#9e#iX+iX+WK+WK+yM@R,+R,+5&@5&@4G+4G+5$@4G+4G+5$@5$@jX+jX+jX+E@@wp#7=@:P+:P+kX+kX+T@>2+~-+f^@3 @0G+P)@P)@R,@7$@7$@O&$O&$Ws%Ws%Wp*Wp*co*Ue%Xs%mb#:^#tr+|R+ L+[&@Xp*AR#Yp*:T#tb+&w+*w+ L+|]+/|+G:+u)+P0+b$@_T+b$@fy++B+>w+up+fD+vI+6Z+z~@y~@S1+[:@[:@q(@p)%wk$Zp*`p*77* q*.q*+q*@q*#q*$q*%q*&q**q*Li+hg@Kd$:f+nX+X&+or&CM@w-$bN#cN#,Z#98$A1#f2%'(@f<#w<@;T.w<@C(%Y)+L6@l[+>9@l[+~}@qX+V_#V_#']$']$Z]$ZR#ZR#@h+s[$V{*yF@U##C)+Oe$BA#q*Q)$b1@2h+~-@6a@2V#c~@3]+lX+R,@Q,@0=@0&@fm$]K@!K@!K@>K@>K@AM@zM@/'$bN$ K$>J$>M$..&S!$-I$qn%6P#T5+P.$cs%5:%{]$5C&'@@q+`p+`p+,P+OS#hc@}9@3}@3}@`6@`6@`6@`6@11@|1@*3@*3@|1@;:@K<@31@31@31@31@31@31@31@31@lt$lt$31@31@5}@5}@>:@>:@I2@I2@I2@I2@I2@I2@I2@I2@;]@%}@I2@w^@w^@I2@%}@>:@L<@3}@3}@`6@M<@Y4@L2&L2&[!$[!$!r&!r&Ps&Qs& a@B6@fo%-'$-'$-'$-'$W>$7)$7)$6)$6)$7)$[!$41@Z4@.7@.:$]V+Ht+oI+ZM+sI+Gt+tI+OK+OK+:x@#9@L)@tr+Rt+}=@6o@4 @4 @4 @4 @4 @4 @4 @4 @my+my+my+my+my+my+my+K@@L)@<&@<&@#9@Aq@Aq@Aq@3k#7X+uy#uy#(t#/P+Gt+dr+/G+}G+`+#`+#`+#|G+:V+_T+_T+7X+7X+gY#gY#H6@H6@S6#S6#Nf%T5*y6*y6*Kt%b=@0&@ny+Q,@>B+9G+9G+z&h +v@%)S%N] pq*pq*bg*e_#,<*t3&IC.P8 qq*YE&rq*{D &c%A{$sv%Ic%X`+u.@6g.>0+sq*,0+u.@sq*;~@;~@Pw%*Z+*Z+ME+X`+$.@;~ y$$*$@y$$6j+6j+|m.h~ *$@*$@y$$y$$6j+;~ ;~ 'g@Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+5A.5A.5A.Ea+Ea+xc+xc+xc+$.@x{ zi.J> J> nh.x{ $.@%.@$.@$.@%.@%.@$.@$.@2&$ME+tq*Fu+Fu+,C+,C+uq*uq*Fu+tq*tq*$x+$x+)p#)p#;~@nh.T_+T_+$(+xc+Ea+Ea+5A.xc+Ea+]! {! {! ]! Ea+xc+]! ]! 5A.5A.5A.5A.5A.Ea+$(+$(+$(+T_+T_+G|@G|@G|@$(+$(+xc+Ea+]! {! be+be+{! {! ]! 5A.5A.Ea+xc+xc+1m.Ai.q9+jy.jy.q9+Ai.1m.q9+q9+q9+q9+q9+q9+q9+q9+]! 5A.5A.Ea+xc+xc+$(+$(+G|@T_+$(+xc+Ea+]! {! ZW+OU+OU+OU+OU+OU+OU+OU+OU+x}*9&+q(#q)@PS@PS@PS@PS@M8@Ea+xc+$(+$(+xc+Ea+]! xc+xc+Ea+5A.5A.]! ", "5% 4% ~% ~% ~% ~% ~% %% %% %% %% %% %% %% %% $% $% $% %% %% %% %% r: r: 6!.6!.6!.6!./#&/#&6!.7% 4% 5% 5% 5% 5% 4% 4% 5% 5% 5% 5% 5% 5% 5% 5% ^{ ^{ ^{ ^{ ^{ ^{ ^{ ^{ &- ^{ Q_ Q_ y% y% y% y% f% f% f% f% 5% 5% 5% 5% x% x% x% x% x% x% x% x% 5% 5% f% f% 5% 5% 5% f% f% f% f% f% f% f% f% f% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 &5 W_ &5 n3 ~_ &_ 'i.|4 eH.b3@|4 8M b3@]b+8M 8M 8M 8M |4 eH.]b+R6 &5 f% 5% f% I> fL.I> f% I> I> I> I> I> I> I> l3 j% (s.bv#j}+l#@{t.(s.{t.{t.{t.{t.{t.{t.{t.{t.l3 QB@QB@QB@QB@QB@QB@QB@QB@af.af.QB@QB@QB@4=+4=+4=+4% v% w4.a, fL.I> I> fL.v% v% v% I> fL.fL.fL.':+(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.5v@6v@6v@6v@6v@6v@6v@6v@QB@6v@Tp*Tp*@[+4=+6v@6v@w4.fL.I> v% v% v% I> I> w4.w4.w4.w4.w4.w4.w4.w4.i% h% #9.j}+j}+' .ni u}+Li.}].zn*vq*E.@/8 +k >*%q2%!m*zE%27*37*dk*ej*ej*Cn*57*gj*wq*p1@hk*L$*ia@./%q'@v<@3W.,>+:-+:-+,>+3W.3W.3W.,>+,>+,>+,>+_-+>>+1r$m~+4[%D#$1S#}x@}x@k<&k<&8o@8o@Zz$Zz$/v$Vy$i%%i%%Vy$Vy$Vy$Vy$/v$/v$CO#CO#CO#ln$=c$>b$>b$>b$_a$Dj$a9$a9$Ej$,p$_8$_8$d9$d9$5($5($jF$jF$iF$iF$zM@5$@5&@R,+yM@R,+5&@4G+5$@5$@5$@5$@4G+4G+4G+4G+iX+WK+}{#hF$hF$}{#WK+iX+9e#9e#9e#9e#iX+iX+WK+WK+R,+5&@5&@5&@4G+5$@5$@5$@4G+4G+5$@5$@jX+jX+jX+jX+wp#7=@:P+:P+kX+kX+T@3 @3 @3 @3 @0G+0G+0G+0G+^K@7$@O&$O&$Ws%Ws%Wp*Ws%co*Ue%x)$mb#L@@tr+-w+mp+[&@*:@xq*T1#tb+ B+mp+Xn+ L+^/+^_+;2+qy+P0+)B+:V+/|+sp+%N+_x@-w+xp+vI+5T+}6+}6+|a@|a@k}@Ut+k}@^3@YK+5&@CI+nq@y_$;>+;>+d$@}e%ug@N@@+>#Bt+3a@H:+d[+ly+^^#6G+DI+I$+e;%N)$,Z#98$A1#f2%'(@f<#w<@;T.< +C(%Y_@L6@>9@>9@>9@g~@~}@V_#V_#']$']$Z]$ZR#ZR#W_#s##E>##R$s,%i)$aD#H4#o7#2G+*B+1=@Xn+[w+~k+:k+dy+df# ;$'6+z0+,X#0($77$Cf#:l##o#Hc#-8#{}#Ze%Mf#Qq#jU$YX$hr$.Z$.Z$,`$ZK$ZK$1 %wn$vn$@y~@R.+I:+~-+3 @0G+4 @0&@Z.@,T@!K@!K@w;@w;@>K@V.@V.@/'$bN$(H$>J$>M$..&S!$-I$!H$6P#T5+P.$o%&!_%+W$=>$89@T8+uH@kF@bm+@a@o{$MF@FD+H:+}6+p8+2V+rr+oy+v)+@k+f~+YM@e~+cy+~]+d(%yq*zq*Aq*Bq*Cq*Dq*Eq*Fq*Gq*Hq*Iq*Jq*Kq*Lq*Mq*Nq*Oq*Pq*lM Qq*Rq*Sq*JS.Tq*Uq*Vq*Wq*Xq*Yq*Zq*`q* r*.r*+r*@r*A,+_/#9r+Lw##r*$r*%r*&r**r*=r*-r*;r*>r*,r*50#N:$F}$0e#xI+xI+yD+yD+xD+xD+ED+ED+Jl+wI+fD+fD+!B+L,@L,@M)@t9#LF@ih#ih#28+28+28+>'@@q+`p+`p+G,@fY#3}@3}@`6@`6@11@11@11@`6@;:@|1@*3@*3@|1@;:@u^@31@31@31@31@31@31@31@31@lt$lt$31@31@5}@5}@>:@>:@5}@%}@5}@%}@5}@%}@5}@%}@>:@%}@31@w^@lt$I2@5}@>:@K<@`6@`6@11@Y4@4}@M3&M3&[!$7)$!r&V6$Qs& !%H*$tk$F5&V>$='$V>$V>$W>$6)$7)$[!$[!$41@Z4@.7@@r%x)&+7@]V+oI+oI+dr+nI+@w+OK+OK+(P+:&@{k@L)@ED+Rt+}=@6o@ny+ny+ny+4 @4 @4 @4 @4 @ny+ny+ny+ny+ny+ny+ny+ny+|=@{k@#9@#9@Aq@fh#fh#fh#uy#uy#uy#(t#/P+Gt+ZM+69@^G+t&@t&@t&@:V+|G+}T+}T+7X+7X+gY#gY#H6@H6@S6#S6#pr$Nf%=r%=r%*w$=9@Z.@my+t<@0G+3 @9G+m*'9*,<*V[ ]G$P8 qq*!r*H2.sS Ic%A{$OJ.Eo+Nc&yi.6g.>0+Nc&sq*sq*X`+Pw%*Z+*Z+*Z+*Z+ME+ME+ME+y*$6j+y$$6j+;~ ;~ *$@Bj.*$@*$@*$@y$$y$$6j+6j+6j+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+Ea+Ea+Ea+xc+xc+$(+$(+$(+c> $.@x{ nh.zi.nh.x{ $.@0@@$.@$.@0@@0@@$.@$.@0@@ME+tq*u{@Fu+_|*,C+z9.uq*z9.,C+_|*,C+u{@tq*ps+ME+y*$Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+xc+5A.]! ]! 5A.xc+xc+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.xc+xc+xc+$(+$(+T_+T_+T_+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.Ea+Ea+5A.5A.5A.5A.5A.5A.dl.q9+]$@6g+6g+]$@q9+dl.q9+q9+q9+q9+q9+q9+q9+q9+Ea+Ea+Ea+Ea+Ea+xc+xc+xc+$(+$(+xc+xc+Ea+5A.]! ]! h]@PS@h]@PS@h]@PS@h]@PS@u]#9&+:{+q)@:{+q(#u]#d #Ea+xc+$(+T_+T_+$(+xc+Ea+Ea+Ea+Ea+5A.5A.5A.", "%% %% ~% ~% ~% %% %% 4% 4% 4% 4% 4% 4% 4% 4% %% %% %% %% %% r: r: r: r: 6!.6!./#&/#&/#&/#&/#&6% R_ R_ R_ R_ R_ R_ R_ *_ *_ *_ *_ *_ *_ *_ 5% ^* [! L) 6[ 6[ L) [! C& [! [! [! L) L) 6[ 6[ Q_ &_ =_ =_ =_ =_ =_ *_ *_ h% h% PI.PI.PI.PI.PI.h% f% f% f% f% f% f% f% f% f% f% f% f% f% f% f% f% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ &_ ~_ n3 &5 &5 &5 n3 n3 8M |4 eH.b3@'i.nq+'i.|4 'i.'i.'i.'i.8M |4 eH.X5 {_ I> f% v% I> fL.v% 5% I> I> I> I> I> I> I> l3 j% (s.bv#j}+l#@{t.(s.{t.{t.{t.{t.{t.{t.{t.{t.l3 4=+7v@7v@7v@7v@7v@7v@7v@A^.A^.X_ X_ X_ 7v@7v@7v@f% fL.a, w4.I> v% v% I> v% v% I> I> I> fL.fL.-J.(s.$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#(s.5v@6v@6v@6v@6v@6v@6v@6v@QB@6v@>r+>r+6v@4=+4=+@[+I> I> v% v% v% I> fL.w4.w4.w4.w4.w4.w4.w4.w4.w4.i% i% PI.l#@$9.ni V[&gO.Zn }].~r*U}%Kk /8 gv e*{r*dl*]r*ks%^r*37*xC.xC.57*gk*wq*/8%hk*KZ@ia@9e@q'@tm#J.+ki@,>+,>+,>+,>+3W.3W.3W.3W.3W.ki@ki@S)@>>+Ei$m~+4[%D#$1S#k<&}x@k<&k<&8o@8o@Zz$Zz$/v$Vy$i%%dD$i%%i%%i%%i%%Vy$Vy$dw$/v${m$jm$]m$ar$Tj$Tj$>b$>b$Rj$Rj$Rj$09$4($bv$c8$c8$qn%qn%!H$-I$-I$jF$zM@5$@4G+5&@R,+R,+5&@5&@R,+5&@5&@5&@5&@4G+4G+4G+iX+iX+WK+}{#}{#WK+iX+iX+9e#9e#9e#iX+iX+WK+WK+WK+4G+4G+4G+5$@5$@5$@jX+jX+4G+4G+4G+5$@5$@jX+jX+jX+eX+[ @3G+3G+wp#wp#=>+{-+x)+x)+x)+>T@3 @3 @f^@f^@cB@cB@7$@7$@O&$O&$Ws%Ws%eo*g'$W6$4e@tr+1R+1R+Xn+np+ }#uD+uD+Tn+Tn+-w+up+.B+vr+b$@P0+gK@U_@[T+:V+/|+BR#Lt+Lt+Tn+Pn+c[+1]+H:+H:+H:+H:+6Z+;m+L@+;m+Y.@Y.@>2+'T@T0+L4#L4#L4#=>+zI+h~+S0+2V+vI+z@@QK+I@@8G+1 @WK+pw$Bb#%*$!U#98$A1#f2%'(@M#$w<@;T.w<@Wt+O]+l[+>9@>9@>9@Y{@g~@V_#V_#']$']$Z]$ZR#ZR#W_#'>+yF@>o%=c@H1#a=#6%$VK+6=@yD+Xn+Yn+!k+-2+#4+E:+ ;$+K#|T#>X#VY#77$_l#Bf#$5#Fc#:o#/r*8E#(r*^C#35##'%|m$|m$}m$}m$1 %.Z$.Z$;,%kU$>,%kU$;,%;,%>,%ys$vS$_r*Y6%BZ$W!$Sk$$s+,G+dp+S0+/w+Y.@_w+my+qg@8V@k#$DD+DD+w;@w;@w;@1 @1 @TR$bN$(H$V~$>M$..&g>&-I$!H$n>%P.$Sv#V~$w/%'_$2%$K@+g9#61$lf+z=@SO@~P#tW#0$@&N+S.+;m+(w+:w+Rt+g~+wI+(|+P0+)B+}G+69@Nn+a0$:r*:@>:@M<@>:@M<@>:@M<@>:@M<@5}@4}@lt$21@31@Y4@M<@11@11@11@0X#4}@21@4q&4q&7)$6)$V6$*r$ !%gp%M9&'f&C&%.9@.9@.9@*'$A;$p0$X>$`4@`4@.:$.:$+7@),&WE&WE&rI+oI+dr+nI+Gt+@w+OK+OK+(P+:&@{k@L)@ED+Rt+w)+K)@my+my+ny+ny+4 @O)@O)@O)@4 @4 @4 @4 @4 @4 @4 @4 @jb#6o@fz@{k@<&@<&@:x@:x@uy#(t#`M+/P+{P+sI+pI+69@/G+nD+nD+s=@:V+|G+}T+}T+7X+7X+gY#gY#H6@H6@S6#S6#u!$u!$,'$,'$=9@a&@Z.@my+O)@*>+f^@f^@>T@>T@T0+; +c~@_/+c^#_/+; +; ++>#G&+Q2@Q2@&1@&1@&1@&1@tg@tg@z;@R0@2G$@N@U^@7j*HS#!r%'r*.7*8!+l6&ud@:.%qr*rr*sr*)r*>m*'9*,<*V[ Hm -|*tr*ur*vr*Bh.2&$xj+uq.Eo+_|*wr*#x+xr*tq*Fu+Fu+)p#tq*tq*tq*tq*$x+$x+$x+*Z+0@@6j+y$$6j+'g@'g@y$$|m.|m.|m.|m.*$@*$@y$$y$$y$$Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+xc+xc+xc+$(+$(+T_+T_+T_+M8@h]@v]#u]#u]#u]#u]#u]#h]@d #d #h]@h]@d #d #y*$X@$X`+X@$X`+%' Nc&%' Nc&~h&sq*~h&sq*>S%mh.>S%%' 9Y+{! ]! ]! 5A.Ea+xc+xc+$(+$(+xc+Ea+Ea+xc+$(+$(+T_+$(+$(+xc+Ea+Ea+5A.5A.Ea+Ea+Ea+xc+xc+$(+$(+$(+Ea+Ea+Ea+xc+xc+xc+$(+$(+$(+$(+xc+Ea+5A.]! ]! {! jy.]$@)> Yt.Yt.)> ]$@jy.q9+q9+q9+q9+q9+q9+q9+q9+xc+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+v]#Ea+v]#Ea+v]#Ea+v]#xc+:{+xc+:{+$(+d #Kh+7P.xc+$(+T_+T_+T_+T_+$(+xc+5A.5A.5A.5A.Ea+Ea+", "~% ~% d( d( ~% %% 4% 5% 5% 5% 5% 5% 5% 5% 5% %% %% %% %% r: r: r: 6!.6!.6!./#&/#&/#&/#&yr*/#&6% R_ -H.-H.-H.-H.R_ R_ *_ *_ *_ *_ *_ *_ *_ 5% !1.S& L) o^ o^ L) S& u& [! S& S& S& [! L) L) Q_ &) -_ -_ =_ =_ =_ *_ g% h% h% PI.PI.PI.PI.PI.PI.l3 v% f% f% I> I> v% f% f% f% f% f% f% f% f% f% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ &_ &_ ~_ n3 &5 &5 &5 &5 [4 Q6 b3@W5 nq+T_ nq+}4 'i.}4 nq+S_ 'i.[4 |4 Q6 ;b.fL.v% v% fL.fL.v% 5% I> I> I> I> I> I> I> l3 j% (s.bv#j}+l#@{t.(s.{t.{t.{t.{t.{t.{t.{t.{t.l3 6v@ l. l. l. l. l. l. l.A^.A^.X_ X_ X_ 7v@7v@7v@I> w4.a, w4.v% f% f% I> I> I> I> I> I> I> fL.-J.(s.$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#(s.5v@6v@6v@6v@6v@6v@6v@6v@QB@6v@>r+@[+4=+QB@4=+@[+v% v% v% v% I> fL.w4.a, w4.w4.w4.w4.w4.w4.w4.w4.<4 <4 PI.l#@$9.ni V[&u}+zh.f= bi I-@N0 /8 gv e*{r*dl*]r*ks%^r*37*xC.xC.gk*T3*/8%ND@KZ@f>@9e@9e@tm#tm#J.+ki@3W.,>+,>+,>+,>+3W.3W.ki@ki@J.+v<@dk@>>+Ei$m~+4[%4[%HK$k<&k<&k<&k<&8o@8o@Zz$Zz$/v$Vy$i%%dD$i%%i%%i%%i%%Vy$Vy$Hx$dw$/v${m$ln$ar$Tj$Tj$=c$>b$Rj$09$09$09$4($4($c8$c8$qn%qn%!H$!H$!H$5($zM@5$@5$@4G+5&@5&@5&@5&@r8+r8+yM@R,+R,+5&@5&@4G+iX+iX+WK+WK+WK+WK+iX+iX+9e#9e#iX+iX+WK+WK+}{#}{#5$@5$@5$@5$@jX+jX+jX+jX+5&@5&@4G+4G+5$@5$@jX+jX+eX+[ @3G+3G+wp#wp#=>+{-+>T@>T@>T@>T@3 @3 @3 @3 @9G+cB@^K@7$@7$@O&$pr&pr&g'$W6$4e@Z.@1R+Xn+Xn+Xn+wD+wD+Rt+sr+Jl+sr+|R+-w+K,@vr+b$@P0+gK@U_@[T+:V+vp+BR#Xn+Xn+Sn+Rn+(|+1]+vI+5T+5T+QK+O,@O,@0$@0$@q8+q8+}a@S.+R.+__+__+c~@>2+:|+d[+=4+[=@z@@(P+0$@I@@5G+BM@}{#b>%Bb#dN#Ei$98$A1#f2%tD$M#${f#0]@w<@3|+O]+l[+l[+>9@>9@Y{@Y{@V_#V_#']$']$Z]$ZR#ZR#W_#<-+U##=c@RU#:{#DA#4%$&>J$>J$|0$P.$*>$_H$bb%Lt%'_$TQ@Y<@(h+79@kc@8m@9k@pg@n#$/t#!(%UQ@8V@;B+my+&IQ%Er*%G%Fr*Gr*Hr*Ir*Jr*Kr*Lr*Mr*Nr*Or*Pr*Qr*Rr*Sr*Tr*i5*,d*]D%Ur*c_%|~#Vr*Wr*Xr*Yr*$f+Zl+`l+jr+kr+&m+ki+Mn#/k+&l#^|+^|+%l#af#ec#Zr*3%$3%$1=@| %rr+rr+tr+tr+|R+FD+s<@z$+z$+L,@.q+.q+%!@+q+O3#@q+@q+@q+`p+`p+`p+Zp+Zp+Zp+`r+x=@Y4@_a@_a@0X#io@*3@Ab$Ab$|1@2(@Tl$D4@D4@D4@R;@R;@[!$[!$[!$[!$[!$[!$[!$[!$[!$[!$[!$[!$41@41@41@41@M<@M<@M<@M<@M<@M<@M<@M<@Y4@Y4@4}@4}@4}@4}@Y4@Y4@0X#0X#0X#io@21@>q$2r$2r$6)$W>$*r$Kp$gp%V=$`0@U6$Y0@f}@aC$g}@A6@G4@X>$#1@.:$8)$+7@>]@),&;'$WE&@7@oI+oI+dr+nI+@w+tI+ N+K,@FD+:&@{k@}=@ED+Rt+w)+K)@my+my+ny+ny+4 @O)@t<@t<@O)@O)@O)@O)@O)@O)@O)@O)@;I$jb#fz@{k@<&@:&@K,@K,@(t#(t#/P+Gt+sI+sI+pI+:G+(G+mD+mD+s=@:V+|G+ur+ur+7X+7X+gY#gY#H6@H6@S6#S6#-_#-_#*9@*9@P,@P,@K@@my+4 @;B+~-+f^@>T@hX@;(@U,@c~@c^#lK@c^#; +U,@6y+bw+Q2@Q2@&1@&1@&1@&1@tg@tg@R0@rG+c#@@N@@/%7j*X $!r%'r*`r*uF%9!+C9& s*3W%.s*.c&+s*!d*'9*,<*Z!*Bd @s*#s*$s*%s*<*&u3$xj+ F.Eo+lx@&s*wr*,C+tq*Fu+Fu+$x+,C+,C+Fu+tq*tq*$x+)p#fJ%=|$;~ 6j+;~ Lh+Lh+;~ *$@|m.|m.|m.|m.|m.|m.|m.*$@Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+T_+T_+G|@G|@G|@M8@M8@h]@v]#:{+u]#u]#u]#v]#d #d #v]#v]#d #d #v]#$.@X@$'W+X@${y%%' {y%%' `b&~h&`b&~h&`b&>S%B#@|m.]! ]! 5A.5A.Ea+Ea+xc+xc+T_+T_+$(+$(+$(+$(+T_+T_+Kh+G|@T_+$(+xc+Ea+5A.5A.5A.5A.5A.Ea+Ea+xc+xc+xc+xc+xc+xc+$(+$(+$(+$(+$(+xc+xc+xc+Ea+Ea+5A.5A.5A.jy.]$@)> Yt.Yt.)> ]$@jy.q9+q9+q9+q9+q9+q9+q9+q9+$(+$(+xc+xc+Ea+5A.5A.]! 5A.5A.5A.Ea+xc+xc+xc+$(+xc+xc+jy.xc+jy.xc+jy.xc+jy.xc+]$@Ea+jy.$(+dl.G|@xc+xc+xc+$(+$(+xc+xc+xc+]! ]! 5A.Ea+Ea+xc+", "~% d( d( d( ~% %% %% 5% 5% 5% 5% 5% 5% 5% 5% %% %% r: r: r: r: 6!.6!.6!./#&/#&/#&yr*yr*yr*/#&6% R_ l` l` l` l` R_ R_ *_ *_ *_ *_ *_ *_ *_ 5% !1.S& 6[ -^ -^ 6[ S& u& [! [! S& S& S& [! 6[ y% $% T_ T_ S_ =_ =_ g% g% h% h% PI.PI._r+_r+_r+PI.-J.w% j% x% l3 -J.l3 j% x% x% x% x% x% x% x% f% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 &5 W_ W_ 0c X_ Q6 A^.S_ ;_ S_ =_ [4 =_ }4 =_ }4 0c W5 X_ 8H.w4.I> I> fL.fL.v% 5% I> I> I> I> I> I> I> l3 j% (s.bv#j}+l#@{t.(s.{t.{t.{t.{t.{t.{t.{t.{t.l3 6v@ l. l. l. l. l. l. l.A^.A^.X_ X_ X_ 7v@7v@7v@fL.w4.a, fL.v% 5% v% I> fL.fL.I> I> I> I> I> l3 (s.$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#(s.5v@6v@6v@6v@6v@6v@6v@6v@QB@6v@@[+6v@QB@af.4=+@[+v% v% v% v% I> fL.w4.a, w4.w4.w4.w4.w4.w4.w4.w4.5v@;H.cp.j}+l#@z) ni 3!.Zn Y* fg+]l+N0 /8 gv >*%q2%!m*zE%27*bo*dk*ej*dj*gk*T3*/8%ND@KZ@f>@9e@9e@v<@v<@J.+J.+ki@3W.,>+,>+,>+3W.3W.ki@ki@J.+v<@dk@U`$''%>>+_-+4[%HK$k<&k<&k<&k<&8o@8o@Zz$Zz$/v$Vy$i%%dD$dD$dD$i%%i%%i%%i%%Gx$Gx$/v${m$jm$*c$ar$ar$=c$>b$Sj$=k$90$09$09$Rj$bv$bv$c8$c8$c8$c8$)H$d9$5Z+5$@5$@5$@5$@4G+5&@5&@r8+r8+r8+yM@R,+R,+5&@5&@WK+jF$jF$jF$jF$jF$jF$jF$kF$kF$kF$jF$jF$iF$iF$}{#jX+jX+jX+jX+5$@5$@5$@5$@5&@5&@5&@4G+4G+5$@5$@5$@eX+[ @}V+}V+wp#wp#[V+TK+T0+T0+3]+hX@>T@x)+9G+lX+9G+9G+9G+cB@^K@7$@7$@7$@/t#8V@K@@ED+aX+ec#V1#V1#Jl+Jl+L@@:&@H6@:&@G6@K,@Vv#}R+(T++w+cr+Ft+~P+_T+Ob+sp+ L+sp+xp+/_+Q0+R0+uI+uI+z$+z$+pe#Kx#i-$c&@e^@:w+:w+k+/6+8[+cO$|T#CB#)X#M`#~X#:X#M7#Y`#Kq#[w#*s*gz#5E#{C# d#=s*-s*;s*>s*,s*'s*)s*!s*){%(-%/-%+Z$#p$#p$R[$>M#6V#4m$V_$J'%[|%9g$8G$[1@/G+uy#K,@O,@6T+ED@ED@'_#ly+^K@^K@x;@DD+DD+R)@7G+7G+TR$+@%>L$V~$o%&cs%;M$V~$V~$*>$]t#cs%_H$Ml*Mj*#@%w)$|8+ko@ 7#-4+-4+-4+!(%Ve%pr&O&$7$@EM@H@@8$@*>+(w+Il+z@@PK+@w+Q;@_G+v&@mi+,d$:]+~s*:L$<]$q*%J$$J(#P]#r<#{s*J]#]s*^s*/s*(s*(s*_s*:s*eE#MK+i&%7y+q$2r$2r$6)$W>$*r$Kp$gp%V=$`0@U6$M(#/L+g}@kk+z;$g-$a{$`I+>]@O3#>]@O3#;'$%!@;'$%!@ZM+dr+nI+Gt+@w+tI+ N+K,@FD+:&@{k@}=@ED+:w+w)+K)@my+ny+ny+ny+4 @O)@O)@O)@O)@O)@O)@O)@O)@O)@O)@O)@S##T##6o@|=@L)@:&@K,@K,@(t#tI+nI+ZM+^P+^P+8i@ne#Mn+mD+nD+s=@:V+|G+ur+VH@7X+7X+gY#gY#H6@H6@S6#S6#gY#gY#H6@H6@L@@L@@Z.@ny+4 @;B+~-+f^@>T@hX@;(@U,@c~@c^#6y++>#; +U,@Q2@bw+Q2@&1@&1@&1@tg@tg@tg@tg@rG+;c@@N@X @;`+u##X $2s*3s*`r*b3$Ob$%k*|K 3W%.s*.c&+s*!d*]8*,<*4s*5s*6s*'5*7s*j##x2%x*$xj+ F./D.%c%Fu+xr*Fu+tq*uq*xr*,C+,C+,C+,C+Fu+tq*$x+$x+lx@u3$3&$3&$Y@$^b+^b+Y@$'W+{y%B#@B#@B#@B#@B#@B#@|m.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+T_+T_+G|@G|@G|@h]@PS@PS@q)@q)@q(#9&+9&+q)@x}*x}*q)@q)@x}*x}*v]#*$@*$@H0@*$@ok.y$$ok.y$$H0@*$@H0@*$@H0@*$@H0@*$@$(+$(+$(+xc+xc+Ea+Ea+Ea+T_+T_+T_+T_+T_+T_+T_+T_+Kh+G|@T_+$(+xc+Ea+5A.5A.5A.5A.5A.Ea+Ea+xc+xc+xc+G|@G|@T_+$(+xc+Ea+5A.5A.5A.5A.Ea+Ea+xc+xc+$(+$(+dl.q9+]$@6g+6g+]$@q9+dl.q9+q9+q9+q9+q9+q9+q9+q9+$(+$(+xc+xc+Ea+5A.5A.]! ]! ]! 5A.Ea+xc+xc+$(+$(+q9+q9+(w.q9+(w.q9+(w.q9+(w.jy.^x#6g+.d+)> .d+6g+Ea+5A.5A.5A.5A.5A.5A.Ea+5A.5A.5A.Ea+xc+$(+", "~% d( +h.+h.d( d( ~% 4% 4% 4% 4% 4% 4% 4% 4% %% %% r: r: r: r: 6!.6!./#&/#&/#&/#&yr*yr*yr*/#&i% -H.l` m` m` l` -H.*_ *_ *_ *_ *_ *_ *_ *_ 5% &- L) 6[ -^ -^ 6[ L) [! 6[ L) S& S& S& L) o^ o3 )= >_ T_ T_ -_ =_ g% g% h% h% PI.PI._r+_r+_r+_r+aq.x% r: 7% l3 ':+w% 7% x% x% x% x% x% x% x% x% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 n3 ~_ ~_ ~_ n3 &5 W_ 0c A^.7v@X_ =_ -_ =_ A^.A^.A^.0c =_ 0c 0c A^.X_ a, fL.I> I> w4.w4.fL.v% I> I> I> I> I> I> I> l3 j% (s.bv#j}+l#@{t.(s.{t.{t.{t.{t.{t.{t.{t.{t.l3 4=+7v@7v@7v@7v@7v@7v@7v@A^.A^.X_ X_ X_ 7v@7v@7v@fL.w4.w4.I> f% f% I> w4.fL.fL.fL.I> I> I> v% w% (s.$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#(s.5v@6v@6v@6v@6v@6v@6v@6v@QB@6v@6v@4=+af.af.4=+@[+I> I> v% v% v% I> fL.w4.w4.w4.w4.w4.w4.w4.w4.w4.>H.5v@[3+j}+$9.z) z) Iu+|U A* St ]l+wF+N<.+k *h.q2%!m*zE%27*37*dk*ej*dj*57*gk*wq*/8%hk*KZ@ia@9e@ki@J.+J.+J.+J.+ki@,>+,>+3W.3W.3W.3W.3W.ki@ki@S)@U`$''%>>+_-+4[%YJ#I4@I4@k<&k<&8o@8o@Zz$Zz$/v$Vy$i%%dD$dD$dD$i%%i%%i%%i%%Vy$Vy$/v${m${m${m$ln$ln$%u$=c$Sj$T4$90$90$Rj$Ms$bv$bv$c8$c8$c8$im$!I$!l$5Z+jX+jX+jX+jX+5$@5&@5&@yM@yM@yM@R,+R,+R,+R,+5&@I$+I$+iF$jF$jF$iF$I$+I$+kF$kF$jF$jF$iF$iF$iF$hF$zM@jX+5$@5$@5$@4G+4G+4G+R,+5&@5&@5&@4G+4G+5$@5$@eX+[ @}V+}V+wp#wp#[V+TK+.@#;(@'T@3]+>T@x)+lX+lX+=B+=B+=B+9G+0G+^K@^K@^K@8V@my+ED+vD+aX+8s*{p*V1#Jl+H6@S6#*9@_^#H6@gY#G6@Vv#pe#L,@+w+cr+Ft+~P+ay+R0+^/+Yn+^/+b$@P0+b$@_T+~P+~P+hh#hh#4k#$7@9s*yb#J@@m;@m;@S0+W&+W&+f[+rd+f[+f[+:|+:|+&N+6T+9k@GD+:_+sd+}|+v,$se#}/+dN#1r$98$A1#L{$f2%&K${($R^$Uj$^B+Y_@X,@X,@T)@L6@g~@Y{@V_#V_#']$']$Z]$ZR#ZR#B%%e$@2z@i)$0D#^N#ui$7~@3R+rr+Yn+:k+gi+Nn#fd+Tx$4[+'X#)X#X4#~X#7V#J7#Y`#^E#]z#E.$0s*as*bs*nl#cs*ds*es*fs*gs*hs*is*js*ks*ls*ms*&)%n.%gd$o1$p1$!6$nT# 5#1X#3X#lK$8g$wT#L$-M$o%&cs%;M$V~$V~$*>$]t#*>$_H$Ha%H.%-L$6G+^8$$ns*os*j#$!_$%o%%o%H@@^K@ny+0$@(P+@w+Gt+NK+ w#oi+ni+(+@hr+$!@2(@`0$6)$*'$ti%yO@F##le#ps*qs*rs*ss*ts*us*`^+O2@7}@`g+G:+dh#H,+^G+[G+0X+N2@`J#vs* K# K# K#Un#Rn#df#Nn#ei+lc#WF#-E#_G+rI+rI+pI+u=@^/+%w+sp+sp+^/+Ob+b$@U_@nI+ZM+49@mQ&@&*o@$ws*ws*6_$8)$8)$38+38+4(@4(@&E+&E+h-$h-$h-$X5+X5+x&@&}@4}@0X#0X#|1@*3@Tl$K,++>++>+=-+*-+.>+.>+zP$yP$C5%AT#[!$[!$[!$[!$[!$[!$[!$41@41@41@41@[!$[!$[!$M3&yV#yV#.O$yV#.O$yV#.O$yV##w$yV#iR${`#bC$ 7@.O$cs$11@11@11@0X#4}@21@4q&4q&7)$6)$V6$*r$ !%gp%M9&'f&)c+Oi+fm+~3@g-$Zp+O3# q+%!@.q+%!@.q+%!@.q+%!@.q+dr+dr+nI+@w+tI+ N+K,@:x@FD+tr+|=@}=@+f^@f^@>T@>T@T0+; +c~@_/++>#U,@; +; +>[+ik+&1@&1@&1@&1@tg@tg@tg@c!@;c@|x#@N@xs*;`+u##*R#2s*3s*ys*zs*As*Bs*Cs*Ds*Es*Fs*+s*Gs*]8*,<*4s*Hs*Is*Js*B[*x|*KL$%' 6}%34./D.jb%tq*xr*Fu+tq*xr*&s*xr*,C+,C+Fu+Fu+Fu+Fu+tq*ps+x*$'W+{y%3&$+d+^b+Y@$'W+'W+'W+'W+{y%{y%B#@B#@|m.6j+Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+xc+xc+xc+$(+$(+T_+T_+d #u]#9&+q(#q)@q)@q)@q(#9&+PS@x}*x}*PS@PS@x}*x}*h]@*$@H0@H0@H0@ok.ok.ok.ok.A_@A_@A_@A_@ok.ok.ok.H0@G|@G|@T_+$(+xc+Ea+Ea+5A.$(+$(+T_+G|@G|@T_+$(+$(+T_+$(+$(+xc+Ea+Ea+5A.5A.Ea+Ea+Ea+xc+xc+$(+$(+$(+G|@G|@T_+xc+Ea+5A.]! {! 5A.5A.Ea+Ea+xc+$(+T_+T_+1m.Ai.q9+jy.jy.q9+Ai.1m.q9+q9+q9+q9+q9+q9+q9+q9+xc+xc+xc+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.Ea+xc+xc+$(+q9+QL+QL+5&%QL+5&%QL+5&%QL+;= QL+Gb$.d+,S+):+,S+a(+6g+5A.]! {! {! ]! 5A.5A.Ea+Ea+xc+xc+xc+xc+", "%% ~% +h.+h.vk +h.+h.%% %% %% %% %% %% %% %% %% %% r: r: r: r: 6!.6!./#&/#&/#&/#&yr*yr*yr*/#&i% -H.m` :j.:j.m` -H.*_ *_ *_ *_ *_ *_ *_ *_ 5% y% o^ o^ o^ o^ o^ o^ o^ o^ 6[ [! S& [! 6[ -^ ed != wk >_ T_ -_ =_ g% g% h% h% PI.PI._r+_r+PK._r+aq.7% Lv.r: w% -J.x% O~.x% x% x% x% x% x% x% x% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ W_ &5 n3 ~_ &_ ~_ n3 &5 *_ af.4=+QB@af.g% QB@6v@4=+QB@af.af.af.af.QB@QB@w4.I> v% I> w4.a, w4.fL.I> I> I> I> I> I> I> l3 j% (s.bv#j}+l#@{t.(s.{t.{t.{t.{t.{t.{t.{t.{t.l3 QB@X_ X_ X_ X_ X_ X_ X_ A^.A^.X_ X_ X_ 7v@7v@7v@I> fL.fL.I> f% f% fL.8H.w4.fL.fL.fL.I> v% v% w% $y#hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.$y#5v@6v@6v@6v@6v@6v@6v@6v@4=+4=+6v@QB@g% g% 4=+@[+w4.fL.I> v% v% v% I> I> w4.w4.w4.w4.w4.w4.w4.w4..l.5v@cp.$9.5!.V[&V[&3!.@Z n# Ks*]l+zF+Pe*`h ZU+{r*dl*]r*ks%^r*37*xC.xC.Cn*57*gj*wq*p1@hk*L$*ia@3W.ki@J.+v<@J.+ki@3W.:-+3W.3W.3W.,>+,>+,>+,>+_-+XX.''%U`$.*+_-+YJ#I4@I4@k<&k<&8o@8o@Zz$Zz$/v$Vy$i%%dD$dD$dD$i%%i%%i%%i%%Zz$Zz${m${m$/v$/v$*I$*I$%u$=c$=k$%*$N)$90$Rj$Ms$bv$bv$c8$c8$im$im$Ls$~l$5Z+jX+E@@E@@E@@5$@4G+5&@5&@5&@5&@5&@R,+R,+R,+R,+w-$-,$I$+iF$iF$I$+-,$w-$jF$jF$jF$iF$iF$iF$I$+hF$5Z+5$@5$@4G+5&@5&@5&@R,+R,+R,+5&@5&@5&@4G+4G+4G+eX+[ @}V+}V+wp#wp#[V+TK+T0+T0+3]+3]+hX@hX@3 @3R+1h#1h#xI+=B+9G+9G+0G+0G+_w+_w+0$Tw&Q6#P3#Y|#SR$pe#L,@M)@LF@M)@L,@ay+_T+Tt+I6@}]+U_@gK@dr+Gt+sI+sI+J$*J$*)**)**jQ&.5@a=@ky+6=@1G+x)+{-+@N+@N+X&+[|+X.@8G+H@@+:$:6$N3$- +! +Ab#x_%Bb#w4#=k$*c$99$}7$6X%f2%&K${($M=&{($^B+Y)+B;@{v$B;@X,@~}@g~@V_#V_#']$']$Z]$ZR#ZR#B%%.B$[x@E4#aD#]N#} @2G+[P+v)+}]+_k+(+@-f+7q$A0+>|+)X#K>%($$~X#I7#HB#D2$iT#St#.r#ml#Ms*fz#Ns*vo#Os*Ps*Qs*Rs*Ss*Ts*Us*Vs*Ws*Xs*Ys*Zs*Mi#<2#/z#Kx$jT#6T#@2#d %&;%6|$//$>c$9i@jg@7h$4L#)~#9&@9$@<^#<|+^K@k#$A%%r$%|#%fm$F@@7G+Uv#UR$>L$-M$o%&cs%;M$V~$-M$`s*]t#*>$(H$s$%~J$/H$5Z+nz#h[+5&@4G+yM@r8+6G+yT&M.%Ia%:a%'_%:`#:`#&n%DM@8$@ci@-(@yb#Gt+]P+&n#ZA+ni+3&@WF#ue@og@bP$aP$bP$4}@0j$)]% )% t*.t*+t*oD#1P#Yg+]_+-2+yb+`(+Rl+_1@WF#q=$q=$mg@V5%X5%@t*!6+gw$!w##t*,E#7,$$t*%t*#}#ec@cc@%7@),&),&`%$0s#P0+/|+^_+^_+)B+U_@gp+Ht+39@7*$'**k;&&t**t*=t*-t*t0&.:$.:$`4@`4@4(@4(@4(@a{$a{$X5+X5+g-$g-$g-$C5%Y4@11@;:@|1@|1@Tl$Tl$D4@I,+=-+*-+.>+.>+gD+P&+hm+AT#2s%2s%2s%2s%2s%2s%2s%=<$=<$u:*u:*2s%2s%Dt$4q&#w$#w$!x$#w$!x$#w$!x$#w$!x$.O$t*u##*R#2s*8~$,t*'t*)t*!t*~t*Ds*Es*Fs*+s*Gs*]8*{t*oa ]t*&)#A[*^t*wv&jk@>S%6}%34./D.Hc%,C+&s*,C+Fu+xr*&s*uq*Fu+Fu+Fu+Fu+Fu+,C+,C+_|*%' B#@B#@'W+Y@$+d+3&${y%3&$3&$3&$'W+'W+{y%{y%*$@6j+Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+Ea+Ea+Ea+xc+xc+$(+$(+u]#23+pK+x}*q(#q)@q)@q(#q(#OU+q(#q(#OU+OU+q(#q(#M8@dl.h)@(w.(w.QL+QL+^x#^x#Fu#Fu#^x#^x#QL+QL+(w.q9+xc+xc+xc+xc+Ea+Ea+Ea+Ea+Ea+xc+T_+G|@G|@T_+xc+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.xc+xc+xc+$(+$(+T_+T_+T_+xc+xc+xc+Ea+5A.5A.]! ]! xc+xc+xc+xc+xc+$(+$(+$(+1m.Ai.dl.jy.jy.dl.Ai.1m.q9+q9+q9+q9+q9+q9+q9+q9+Ea+Ea+Ea+Ea+Ea+xc+xc+xc+Ea+Ea+Ea+Ea+Ea+xc+xc+jy.5&%5&%15$5&%15$5&%15$5&%0= !*%',$CU#/t*CU#',$Gb$]$@Ea+]! {! {! ]! Ea+Ea+$(+$(+$(+xc+xc+xc+", "4% ~% +h.vk vk vk vk ~% ~% ~% ~% ~% ~% ~% ~% %% %% r: r: r: r: r: 6!.6!.6!.6!.6!.6!.6!.6!.6!.i% -H.m` oG.oG.m` -H.*_ *_ *_ *_ *_ *_ *_ *_ 5% =] .^ -^ o^ o^ -^ .^ .^ -^ o^ L) [! [! 6[ .^ ac 3c oj >_ T_ -_ =_ g% g% g% h% h% h% PI.PI._r+PI.l3 7% Ml O~.w% -J.j% Lv.x% x% x% x% x% x% x% f% f% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ;b.W_ n3 ~_ &_ &_ ~_ v% 5% w% fL.-J.I> l3 w4.B{$w4.-J.I> w% v% l3 I> fL.fL.I> v% I> a, 8H.a, w4.I> I> I> I> I> I> I> l3 j% (s.bv#j}+l#@{t.(s.{t.{t.{t.{t.{t.{t.{t.{t.l3 af.A^.A^.A^.A^.A^.A^.A^.A^.A^.X_ X_ X_ 7v@7v@7v@n3 I> &5 v% ~_ v% {_ cl+{_ w4.W_ fL.&5 v% n3 v% (s.$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#$y#$B#$B#$B#|5+5v@6v@6v@6v@6v@6v@6v@6v@4=+4=+4=+af.g% g% 4=+>r+a, w4.fL.I> v% v% v% v% w4.w4.w4.w4.w4.w4.w4.w4.5v@;H.PI.5!.P7.6,%0- gO.,; $ Ks*:A+E.@]|.`h $T+d/%^z$_D%!m%ok#>B#(t*_t*Cn*p6*.2*27@MD@pz@g|+33@3W.ki@J.+v<@v<@ki@3W.:-+3W.3W.,>+,>+:-+YJ#YJ#YJ#XX.XX.U`$.*+_-+YJ#HK$I4@1S#1S#8o@Vk$CM#Zz$Vy$Vy$i%%dD$dD$dD$i%%i%%i%%i%%L[#RA$jm${m$/v$dw$Ix$Ix$5F$=c$=k$%*$N)$90$Rj$Ms$bv$bv$c8$c8$im$;u$Ls$hm$5Z+jX+,K@J #,K@jX+YK+R,+>K@5$@YK+5&@2 @R,+5G+yM@Y&+}|+@#$hF$hF$@#$}|+,2+XK+XK+XK+BM@BM@DI+DI+DI+5$@4G+4G+5&@5&@R,+R,+yM@R,+R,+R,+5&@5&@4G+4G+4G+eX+[ @}V+}V+wp#wp#[V+{-+@N+hX@hX@~-+~-+~-+Y.@>2+1h#1h#xI+=B+9G+9G+0G+0G+_w+_w+0$Tw&Q6#P3#G6@Vv#pe#L,@+w+A$++w+(T+_T+8X+=m+RO@:k+mD+mD+/G+Q;@Q;@Q;@pI+pI+J$*mQ&1+*s9#wI+Hl+W&+-.$G$+c^#lK@lK@h9@)_#^^#8G+R)@X.@7k#^8$d~@! +x_%v4#w4#'M$]m$Vy$98$}7$L{$f2%A@$6/%Y(&6/%X,@B;@{v$]q${v$B;@T)@L6@g~@g~@Y{@']$']$ZR#ZR#B%%(-+I_%`u@Aw%X#tT#X4#($$7V#$K#{O#^6$UB#[5#=K#fT#Vt#:t*}r#4o#'%Z{%>p$F@@UR$Uv#{<%>L$V~$o%&cs%8t*V~$>L$`s*]t#*>$V~$:H$)I$bN$zM@hF$DI+fX+pZ@CI+CM@~K@_`#:Z$9t*z(%4:%1I&8-%W~$kq#lq#9k@`M@ih#.5@>'$:t#/+@W1#WF#S%$ue@og@tB@xe@* *`6@-Z#$3@kc#;E#0t*at*Of$Vg+g0#;E#_i#h0#nB#bt*A_$B_$W+$W+$e9$O{$Pj$57$}@$'>$'$$|@$B0+C0+-|+Ab+V[$|9@we@uQ$= $@r%X=&1+*(G+q;@q;@/G+_V+oI+]V+%7@W=&X=&k;&,**ct*-t*dt*et*@r%.:$.:$`4@`4@N<@N<@N<@BT#AT##1@#1@uG+uG+J2@E4@M<@K<@Y4@;:@31@2(@I2@D4@K2&--+&}@C5$Y5+zP$hm+^7@AT#2U&2s%2s%2s%2s%2s%2s%=<$=<$u:*u:*2s%2s%Dt$4q&Ju$$w$:V$$w$:V$$w$:V$$w$!x$.O$$!r&V6$*r$B6@em+~3@3h+4h+#s+28+t9#4v#XA#gh#gh#gh#hh#hh#hh#hh#hh#B+0G+9G+lX+t*rn**R#ft*)r%,t*'t*wD#Q:$gt*ht*it*Fs*+s*!d*]8*{t*n: ]t*jt*A[*^t*kg q,@sq*xj+6}%w*$lx@kt*PB@z9.u{@z9.VD@u{@ps+ps+ps+u{@_|*z9.z9.z9.>S%`b&`b&{y%Y@$+d+3&${y%+d+Y@$Y@$3&$'W+'W+{y%{y%6j+Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+5A.5A.5A.Ea+Ea+xc+xc+xc+x{+lt*';$9&+v]#q)@:{+q(#ZW+q(#:{+]%@ZW+q(#:{+ZW+dl.dl.(w.q9+QL+jy.^x#]$@^x#]$@^x#jy.(w.q9+h)@dl.{! {! ]! 5A.5A.Ea+xc+xc+Ea+xc+$(+T_+T_+$(+xc+Ea+]! ]! 5A.5A.5A.5A.5A.Ea+$(+$(+$(+T_+T_+G|@G|@G|@]! ]! ]! 5A.5A.5A.Ea+Ea+G|@T_+T_+$(+xc+Ea+Ea+5A.1m.Ai.q9+jy.jy.q9+Ai.1m.q9+q9+q9+q9+q9+q9+q9+q9+]! 5A.5A.Ea+xc+xc+$(+$(+Ea+Ea+Ea+Ea+Ea+Ea+Ea+]$@!*%!*%0= !*%0= !*%0= !*%',$Gb$',$Gb$0= 5&%mt*nt*q9+xc+5A.]! ]! 5A.xc+$(+T_+T_+T_+$(+xc+Ea+", "|% |% |% |% |% |% |% $% $% $% $% $% $% $% %% f% j% 7% 7% 4% 4% 5% f% %% 4% &_ ~_ ~_ &_ &) $% f% j% 7% 7% 7% 7% j% x% x% x% x% j% 7% r: r: %% Q_ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ t% &_ =_ =_ 0c 0c 0c A^.A^.=_ *_ *_ *_ R_ R_ R_ R_ 4% 4% 4% 4% 4% 4% 4% 4% v% v% f% f% f% 5% 5% 5% g% *_ *_ *_ *_ g% af.QB@g% g% g% g% g% g% g% f% {D ph#UV {b+M2 21.m3 U/ M2 )W+M2 )W+M2 )W+M2 M2 I> 4=+6v@@[+@[+6v@4=+QB@QB@QB@QB@QB@QB@QB@QB@s3.>H.w7+cp.PI.PI.PI.cp.[3+8v.8v.Hu+Hu+PI.#9.#9.<4 v% fL.w4.I> f% 4% 5% v% v% v% v% v% v% v% v% n3 &5 &5 G{ &5 G{ &5 G{ &5 $w ;b.$w |x.G7 O9.N/.O9.si {D {D {D ':+':+':+':+5v@.l.s3.i% ye#:W%}n&~(.6v@w4.w4.w4.w4.w4.w4.w4.I> w4.w4.fL.5% 4% 4% f% fL.fL.fL.fL.I> I> v% v% w4.w4.w4.w4.w4.w4.w4.w4.s3.5v@|5+{t.5!.0- 0- u}+|U X* St X! Kk Pe*+k *h.p^%ot*Lb.t1%37*pt*qt*p6*27@rt*st*tt*ut*B`#vt*vt*pK@%a@<-+<-+%a@%a@<-+K6@[c@%a@<-+K6@K6@K6@BM#3W..*+_-+D#$=7$D#$4[%_-+3W.D#$D#$=7$=7$Vk$Vk$Vk$Vk$cD$cD$i%%i%%i%%CM#Zz$Zz$*c$*c$jm$jm$CO#CO#*I$*I$8F$Cj$Dj$@d$,L$,L$qw$qw$_8$_8$_8$_8$5($5($5($kF$or&2 @]K@,K@!K@YK+w;@YK+w;@YK+w;@2 @R)@5G+8G+5G+R,+]-+R,+yM@r8+h[+h[+g[+5G+5G+5G+5G+8G+8G+8G+8G+2 @;K@-K@;K@5G+5G+g[+Sx#2 @2 @2 @2 @2 @2 @2 @5&@CI+2R+5$@5$@YK+2 @;K@[|+X.@H@@H@@8$@8$@8$@9$@*>+lX+6=@6=@B+my+Z#>Z#7k#|{#+@#~M#S,+c=@7]+7P#>>+:-+Z]$Yx%)Q#&q&HT$[0%,g&c]%rV$/d$|)#B1#g&@HK#HK#8G#Y)+O]+>9@Y{@L{$6X%ZX.y1#/{#(/#;G+wt*q<@V[#=:#3$@'k+Og+$a@~|+'6+>>$'$$E~$VY#^l#J`#P`#nT#xt*8d$yt*zt*At*Bt*Ct*|z#:t*Dt*Et*58#Ft*Gt*1t*Ht*It*Jt*Kt*Lt*Mt*)I#Nt*zw#5E#K0#hi#!}#Hq#+^K@H@@G@@6$@F@@_^$I.%#@%~]$-M$Co&Co&Co&Co&cA%eA%Co&Om&+@%GO$FO$TR$zw$+@%GO$TR$T!$8-%nz#+@%XK+FO$TR$Nm&4:%4:%5:%{<%FO$CU$_^$EO@FZ$5~#ZA##7@J$*l@*Kf%$3@%3@em$em$kw$@}#2t#w!$og@2t#2t#W4@%3@-X#Ey#1f#:i#{|+~|+.4+.4+~|+>f+tB#sq#u.$My#X3+Y3+Y3++K#Vy#&^$)>$et#et#E~$Wy#Wy#,|+|T#f8$f8$f9$b0$e8$e9$M>%|T@WH@,:@,:@WH@),&7*$'K$W=&X=&@r%qH&+r%>c&.&*x)&BT#48+gn$z6@z6@gn$w^@31@31@5}@>:@MU#M<@Y4@21@Ao$Y4@5}@[!$31@7)$`0$6)$3(@W>$gn$F4@gn$F4@gn$F4@F4@V6$x|#2U&-<$8_$8_$-<$-<$u:*u:*3U&3U&}2*1s%1s%)r${x$yV#.O$yV#.O$yV#.O$yV##w$cs$#w$yV#iR${`#bC${`#yV#yV#yV#yV#4}@4}@4}@4}@31@MU#%}@A;$A6@p0$J2@kk+Ot*JF@)G+cr+$Vv#pe#Kx#4L#-_#gY#b&@y;@O,@a&@a=@a=@0=@0=@a=@qt$qt$b=@0=@=9@0&@P,@Z.@=9@Z.@L@@Z.@=9@0=@a&@K@@jb#jb#jb#6o@{k@tr+K,@(P+}R+@w+/P+/P+]P+]P+]P+rX@`+#=m+RO@{k+X+$~i@~i@_x@sr+sr+Rt+Rt+:w+:w+[P+_w+0$@P,@a&@a&@P,@Z.@0=@Q,@4 @>B+>B+9G+3 @~-+>2+rd+I:+c~@2V#RA+RA+6y+c^#U,@+>#*E#ik+cP$>[+N@@&1@QA+QA+Rr+]k@Ou#A^%Pt*;d*Qf%Qt*Rt*St*.4*y{.f+%P-%BT Tt*Ut*j!@X{ {t*Vt*]t*Wt*<7.Xt*u#$WV#bv#aq. X+sv%Xw&Xw&Xw&+y&+y&+y&.y&.y&+y&+y&Xw&Xw&Be+Be+Be+@d+#u%3]&`E&#d+#d+`E&3]&#u%Fc%#u%#u%O4%3]&3]&`E&{y%Lh+Ea+$(+xc+]! 5A.G|@iS.w5&oh.$(+Ea+$(+Kh+oh.y4&T_+T_+$(+$(+xc+Ea+Ea+Ea+xc+xc+xc+xc+$(+$(+$(+$(+Ea+v]#Ea+v]#Ea+:{+xc+:{+G|@:{+5A.v]#T_+';$$(+5A.cI+cI+%U.cI+%U.cI+%U.cI+Ov+cI+|f.bH@|f.cI+Rx.13+Ea+xc+$(+T_+T_+$(+xc+Ea+G|@xc+]! 5A.xc+T_+G|@T_+7P.Kh+T_+$(+$(+T_+Kh+7P.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+xc+xc+Ea+5A.5A.5A.NM+NM+NM+cI+l7 l7 }f.}f.Bz$bH@l7 l7 }f.}f.cI+]! {! Lh+'g@;~ ;~ 6j+6j+y$$;~ Lh+x8.Lh+y$$|m.y$$)D+^x#^x#!*%^x#!*%^x#!*%^x#!*%^x#!*%^x#!*%^x#!*%^x#]$@Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.5A.5A.5A.", "$% $% $% $% $% $% $% $% $% $% $% $% $% $% %% 5% 7% r: r: %% %% 4% 5% $% &) 2{ 5! 5! 2{ M=.d= 5% 7% r: r: r: r: 7% j% j% j% j% j% 7% 7% 7% Y^ t% U@ U@ U@ U@ U@ U@ U@ m@ m@ m@ m@ m@ m@ m@ M$ &_ =_ =_ 0c 0c 0c A^.A^.=_ =_ =_ =_ =_ =_ 0c 0c 5% 5% 5% 5% 5% 5% 5% 5% v% v% f% f% f% 5% 5% 5% g% *_ *_ *_ *_ g% af.QB@g% g% g% g% g% g% g% x% M2 !W+!W+!W+0Y+0Y+0Y+0Y+!W+!W+!W+!W+!W+!W+!W+)W+I> 4=+6v@@[+@[+6v@4=+QB@QB@QB@QB@QB@QB@QB@QB@s3..l.|5+[3+cp.#9.#9.#9.cp.Hu+Hu+PI.PI.#9.#9.cp.cp.I> w4.a, w4.v% f% I> fL.v% v% v% v% v% v% v% v% &5 &5 G{ &5 G{ &5 G{ &5 24 {_ 24 ;b.$w |x.G7 |x.si si si si w4.w4.w4.w4.6v@@[+~k.6e.o2$1P ;J.<].6v@w4.w4.w4.w4.w4.w4.w4.fL.a, a, fL.f% 5% 5% v% w4.fL.fL.fL.I> I> v% v% fL.fL.fL.fL.fL.fL.fL.fL.s3.;H.|5+j}+5!.0- 0- u}+ d+Y* fg+]l+Kk ]|.Nu+`h p^%Yt*09.)1%bo*Zt*`t*p6* u* u*&k@.u*]A#C)@+u*vt*pK@%a@'>+'>+%a@[c@'>+BM#[c@%a@<-+K6@K6@K6@BM#<-+.*+_-+D#$D#$D#$4[%_-+.*+D#$D#$=7$=7$Vk$Vk$Vk$CM#cD$cD$i%%i%%i%%CM#Zz$Zz$*c$*c$jm$jm$CO#CO#*I$*I$Cj$-c$_a$@d$,L$J3$&6$qw$_8$_8$_8$_8$5($5($5($iX+{K@w;@RQ@RQ@!K@R)@R)@R)@w;@w;@w;@R)@R)@8G+8G+5G+TK+UK+TK+TK+TK+#N+@N+@N+x)+x)+x)+x)+9G+9G+9G+x)+R)@5G+;K@5G+2 @2 @-K@ov$5G+5G+5G+5G+5G+2 @2 @2 @5&@2R+5$@5$@>K@2 @8G+X.@H@@H@@8$@8$@9$@9$@4e@9$@9G+x)+x)+x)+9G+9G+9G+9G+R,@0G+my+my+ny+ny+e^@L@+pg@x9#H6@*9@*9@H6@K,@(P+ur+}T+}T+}T+8X+8X+Nb+]_+&l#:f#Z#>Z#re#h[+i~+r|$y_$k7$H1#j<@4[%4)#Z]$Yx%7R+&q&HT$[0%8p%Ng%0/$1)#})#g&@g&@8G#53@53@3_+O]+>9@g~@L{$CA$lS$km$`z$d)#@u*-}@}|$j0+8c#R.@%4+Kb+0[+.I#I`#'$$)$$y0#ci#5@$.o#P`#KR##u*$u*%u*&u**u*=u*-u*ZB#$r#;u*>u*,u*'u*Gt*)u*!u*~u*{u*]u*^u*/u*)I#(u*Oi#7E#Jf#Jf#Sf%Pc#5l#_u*3[%r=$q'$A0+Es$YN#oD+p;@|R+Rt+ny+>B+DM@G@@UR$CU$_^$I.%$K$~]$Co&Co&Co&Co&eA%eA%eA%cA%o%&FO$GO$FO$TR$zw$+@%GO$TR$jq#8-%zw$+@%GO$FO$TR${<%{<%-M$FO$GO$GO$I.%,_$EM@qg@=b$mD#%`#mQ&'K$ZH@og@@}#kw$9q$9q$9q$kw$kw$@}#@}#@}#@}#@}#2t#w!$B_$-l#W4#QL#QL#QL#d8+e8+f8++I#f8+'6+z0+}T#z0+UY#UY#et#ai##I##I#bi#^$$!X#VY#tT#L`#+2#6[+Z%$G2$f($e8$fY#.7@Z4@Z4@.7@x)&W=&(S&X=&x)&.7@Z4@41@Z4@.7@`4@%}@&}@gn$K2&z6@gn$lt$31@4}@Y4@M<@M<@{`#yV#cs$>q$4q&7)$7)$7)$7)$[!$[!$[!$W>$W>$W>$W>$W>$W>$W>$F4@V6$>j&x|#p[$-<$-<$2U&2U&u:*2s%3U&3U&}2*1s%|s%)r$yV#yV#yV#yV#yV#yV#yV#yV#yV#yV#yV#yV# 7@ 7@ 7@ 7@yV#yV#yV#yV#4}@4}@4}@4}@5}@MU#;]@gn$K2&w^@&}@gm+Cs%Pi+Kn+2+f[+I:+__+2V#'v@RA+lK@c^#_/++>#,[+ik+*E#>[+>[+&1@-u+QA+QA+nS$Ou#YO@Pt*:u*=q%Qt* 4=+4=+6v@6v@4=+4=+QB@QB@QB@QB@QB@QB@QB@QB@s3.s3.[3+[3+[3+[3+cp.#9.PI.#9.#9.#9.#9.cp.cp.cp.cp.v% fL.a, w4.fL.I> w4.8H.I> I> I> I> I> I> I> I> I> I> &5 I> &5 I> &5 I> &5 fL.W_ fL.{_ w4.;b.a, si si si si w4.w4.w4.w4.4=+@[+6g*6e.o2$1P zX&x3&6v@w4.w4.w4.w4.w4.w4.w4.w4.8H.8H.a, I> f% v% fL.w4.w4.w4.fL.fL.I> I> I> I> I> I> I> I> I> I> I> s3.;H.[3+j}+5!.0- V[&3!.a>$s[+i3 :A+Kk *i*+u%Nu+Uz 4u*Ca.QO.^r*5u*6u*6h* u* u*&k@.u*]A#C)@+u*vt*IG#[c@%a@%a@9e@9e@%a@<-+%a@'>+<-+BM#BM#BM#BM#<-+.*+_-+4[%D#$D#$4[%4[%_-+=7$=7$=7$Vk$Vk$CM#CM#CM#cD$cD$i%%i%%i%%CM#Zz$Zz$jm$jm$jm$jm$CO#CO#CO#CO#-c$S5+@d$J3$J3$w4#$*$&6$_8$_8$_8$_8$5($5($5($iX+~K@!K@RQ@]K@R)@X.@X.@8G+w;@w;@w;@R)@R)@8G+8G+5G+#N+.$#TK+TK+TK+TK+zI+zI+Q,+Q,+Q,+Q,+ZK+ZK+ZK+Q,+w;@2 @5G+2 @>K@YK+5G+g[+-K@-K@-K@;K@5G+5G+2 @2 @4G+5$@5$@5$@>K@YK+R)@8G+H@@H@@8$@8$@9$@9$@9$@8$@3 @>T@>T@>T@3 @3 @3 @3 @P)@0G+my+my+ny+ny+e^@6T+pg@x9#H6@H6@H6@H6@K,@(P+}T+}T+}T+_T+8X+Nb+Nb+]_+M4#Z#7k#|{#h[+]-+J4#e'#H_@_{#G1#D#$I4@Z]$Yx%7R+&q&HT$[0%8p%Ng%QB$R2@=1@f$@V##P@@vi+vi+Y_@.+@>9@g~@QB$a/$9v%&c$z4#G4##(@q<@][*}z@[(%ub+%4+Kb+~|+>6+v.$E~$y0#]l#ci#5@$.o#b@$KR##u*$u*%u*7u**u*=u*8u*>I#'g#9u*0u*au*bu*cu*du*eu*fu*gu*hu*iu*ju*ku*lu*mu*6E#O0#9E#Tf%Tf%Oc#=5#j:%l1$F7#C0+Es$YN#oD+eK@FD+Rt+ny+>B+G@@G@@Uv#UR$CU$_^$$K$$K$Co&Co&Co&Co&eA%eA%eA%cA%o%&%/$/H$/H$bN$/'$bN$/H$bN$Tv#T!$Tv#bN$/H$bN$/'$FO$FO$GO$GO$GO$AM@'K@fm$^K@4e@Y|#4v#49@rI+cc@YH@og@e8$>c$7|$V[$V[$V[$V[$e8$e8$e8$e8$e9$e9$Pj$1t#In$7q$Es$Es$Es$%2+X3++K#+G#+K#Y3+,|+,|+,|+'X#Wy#bi##G##G#DB#ci#M`#M`#K`#@2#d %A:+A:+A:+H2$U[$#F$Y4@[!$[!$41@41@.7@x)&x)&@r%.7@Z4@41@[!$[!$41@BT#I2@&}@gn$K2&K2&gn$lt$31@4}@Y4@Y4@Y4@ 7@yV#Gt$>q$E5&W>$6)$7)$[!$41@41@Z4@W>$W>$W>$W>$W>$W>$W>$F4@F4@G4@J2@uG+AT#AT#X>$X>$[!$[!$M3&4q&4q&4q&)r$)r$yV#yV#yV#yV#yV#yV#yV#yV# 7@ 7@ 7@ 7@yV#yV#yV#yV#yV#yV#yV#yV#4}@4}@4}@4}@>:@OS#,:@E4@gn$I2@x=@hm+|N+O3+cr+(t#3P#3N#3N#3N#2+f[+I:+__+G$+2V#lK@lK@c^#c^#+>#,[+ik+*E#>[+>[+&1@-u+QA+QA+nS$Ou#YO@Pt*:u*=q%nu* QB@4=+4=+4=+4=+QB@QB@QB@QB@QB@QB@QB@QB@QB@s3.h% cp.[3+|5+|5+[3+#9.PI.cp.cp.cp.cp.cp.[3+[3+[3+f% I> w4.w4.I> I> w4.8H.I> I> I> I> I> I> I> I> I> I> I> I> I> I> I> I> v% v% I> I> fL.fL.fL.w4.si si si si w4.w4.w4.w4.QB@@[+9H./0.o2$9H.H}+/0.6v@w4.w4.w4.w4.w4.w4.w4.a, 8H.cl+8H.fL.I> fL.w4.w4.w4.w4.fL.fL.fL.I> I> v% v% v% v% v% v% v% v% <4 s3.[3+j}+5!.0- V[&3!.^9*wq z4&I-@zF+J] X4.(9*Uz Fg%%^%.H%ok#vu*6u*6h* u* u*&k@.u*]A#C)@+u*vt*33@9e@[c@[c@9e@ia@[c@'>+<-+<-+<-+BM#BM#BM#<-+3W._-+_-+_-+4[%4[%4[%4[%4[%=7$=7$Vk$Vk$Vk$CM#CM#CM#cD$cD$i%%i%%i%%CM#Zz$Zz$jm$jm$jm$jm$CO#CO#CO#CO#-c$S5+,L$J3$w4#^f#$*$$*$_8$_8$_8$_8$5($5($5($iX+1 @]K@RQ@!K@8G+^^#^^#X.@w;@w;@w;@R)@R)@8G+8G+5G+#N+.$##N+TK+AI+[V+=>+=>+Q,+Q,+Q,+Q,+ZK+ZK+ZK+Q,+!K@YK+2 @YK+)K@)K@YK+;K@ov$g[+g[+-K@;K@5G+5G+2 @5$@5$@5$@5$@>K@>K@w;@w;@H@@H@@8$@8$@9$@9$@9$@8$@f^@hX@hX@hX@f^@f^@f^@f^@P)@*>+my+my+ny+ny+K@@6T+x9#x9#a$@H6@H6@a$@K,@K,@}T+}T+}T+_T+8X+8X+Nb+]_+Qn#B5$B5$A5$4f#hi+hi+hi+Yg+si+Nb+Mb+od+od+gK@b$@}T+R0+(|+(|+vI+vI+L@+;m+(w+/w+-B+-B+>Z#7k#|{#nz#]-+J4#e'#H_@7G#C)+4[%I4@Z]$Yx%)=%&q&HT$[0%8p%Ng%Yx%9Z+=1@V##V##Ne@uc@uc@Y_@l[+Y{@V_#a/$nF$Os%L[#St$Fj$;}@6~@F}$k0+Rn+jr+$4+=g$.I#'6+w.$s=$]l#]l#ci#5@$.o#`y#KR##u*wu*%u*&u**u*xu*yu*;I#'g#zu*Au*Bu*Cu*Du*Eu*Fu*Gu*Hu*Iu*Ju*Ku*Lu*}r#ez#Mu*R0#il#Nu*Uf%Qc#Oc#-o#OR#U!%T:%&2+L$>L$1W&Co&Co&Co&eA%eA%eA%cA%;M$%/$)I$/H$bN$/'$%/$/H$%/$/'$Tv#/'$%/$/H$bN$/'$FO$1 @FO$1 @1 @YK+w;@ZK+mq@0&@gY#@w+ZM+c$c0$oW$I2$-/+=Z#-/+c0$7|$c0$>c$!b$e9$)b$>c$I#$hd+hd+hd+hd+;|+;|+>|+,|+>|+>|+L`#L`#L`#tT#VY#J`#EB#Af#Af#6T#7T#7T#7T#M3$e<$K'%zD$lK$,_+6X#5l$>q$6)$6)$7)$[!$41@Z4@.7@41@41@[!$[!$7)$7)$7)$X>$E4@C5%gn$K2&gn$E4@lt$31@4}@4}@4}@4}@yV#cs$Gt$>q$2r$6)$6)$7)$[!$[!$[!$41@6)$6)$6)$6)$6)$6)$6)$p0$A;$G4@J2@uG+X>$X>$X>$p0$[!$[!$4q&4q&4q&4q& v$ v$yV#yV#yV#yV#yV#yV#yV#yV#{`#{`#{`# 7@yV#cs$cs$cs$yV#yV#yV#yV#4}@4}@4}@4}@>:@|T@WH@w^@w^@;]@S;@jm+Ui+'G+~P+uy#3N#3N#ab%5s%~P+~P+2+I:+__+__+G$+c^#c^#c^#c^#+>#,[+ik+*E#>[+>[+&1@-u+QA+QA+nS$Ou#YO@Pt*:u*=q%Ou*Pu*Qu*Ru*F4&v!&a:&2V Su*[u*p9+X{ ma JL&Ow&Tu*Uu*08*nj*o,@C<&^n#@u%&c%Xw&`E&`E&TO&TO&TO&#d+#d+#d+#d+TO&TO&`E&`E&`E&3]&`E&3]&#u%Fc%Fc%#u%3]&`E&`E&`E&3]&3]&O4%#u%#u%+d+ QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@s3.h% #9.[3+|5+|5+[3+cp.PI.[3+[3+[3+cp.cp.cp.cp.cp.4% f% I> I> v% v% fL.a, fL.fL.fL.fL.fL.fL.fL.fL.l3 l3 l3 l3 l3 l3 l3 l3 w% w% w% l3 l3 -J.-J.-J.si si si si w4.w4.w4.w4.af.@[+1P o2$o2$9H.Vu*~k.6v@w4.w4.w4.w4.w4.w4.w4.w4.8H.cl+8H.w4.fL.w4.8H.a, a, w4.w4.w4.fL.fL.fL.v% v% v% v% v% v% v% v% h% s3.[3+j}+5!.V[&ni Iu+nj$wq z4&I-@E.@;9 (}+X4.p^%Fg%%^%&P@ok#vu*6u*p6* u* u*&k@.u*]A#C)@+u*vt*$N@tm#v<@v<@tm#q'@v<@ki@,>+,>+3W.3W.3W.3W.3W.3W._-+_-+_-+_-+4[%4[%D#$=7$Vk$Vk$Vk$CM#CM#CM#i%%i%%cD$cD$i%%i%%i%%CM#Zz$Zz${m${m${m${m$ln$ln$ln$ln$-c$S5+,L$J3$w4#^f#$*$$*$_8$_8$_8$_8$5($5($5($iX+5Z+)K@)K@YK+;K@g[+-K@5G+YK+YK+YK+2 @2 @5G+5G+5G+#N+.$#TK+AI+AI+[V+:P+:P+Q,+Q,+Q,+Q,+ZK+ZK+ZK+Q,+!K@YK+2 @YK+,K@,K@>K@5G+g[+g[+-K@-K@;K@;K@5G+5G+YK+YK+YK+YK+YK+YK+!K@!K@cB@cB@^K@^K@^K@^K@^K@^K@f^@hX@hX@hX@f^@f^@f^@f^@>B+*>+_w+my+ny+4 @K@@J@@:^#x9#0$@0$@a$@a$@|R+:&@fy+fy+ur+}T+Tt+}]+8X+:k+Qn#B5$Qn#4f#4f#hi+:6+:6+od+N0+Nb+Mb+]G+SA+]G+P0+_T+Q0+(|+/_+[=@vI+L@+&N+&N+:|+-B+-B+>Z#7k#or&CM@]-+1O#Z&+<{#8]+.B$.*+K6@Z]$Yx%)=%kS$Qs%&q&GU$Sd&Yx%9Z+=1@V##V##Ne@Ne@Ne@g&@V##h/+|f+wy+ns$Fs%Wk$zA#eX+6~@yI+=:#mB#vp+-m+Xg+6+)E#et##I#4|%4|%ci#5@$zf#`y#KR##u*wu*yt*Wu*At*Xu*-I#dz#Dt*Yu*Zu*`u* v*.v*+v*@v*#v*$v*%v*&v**v*=v*-v*;v*7i%T0#0@$Nu*Uf%Qc#Oc#-o#OR#U!%51%)6+G$!E$JH$5l$;G$5l$>G$#F$xI$% $>v*',&V=&$ $vT#4[+4[+4[+4[+5[+5[+F2$&;%F2$F2$W_$W_$W_$rT#qT#8V#:X#`4#`4#{X#aV#f@$S[$z[%EM$EM$CM$'l$Mj$Ci$mK$xo$-'$W>$6)$7)$[!$[!$41@[!$[!$[!$7)$7)$6)$6)$F4@gn$g9@gn$gn$E4@w^@31@31@Y4@4}@4}@21@Gt$Gt$Gt$>q$L2&[!$[!$[!$7)$6)$6)$6)$6)$6)$6)$6)$6)$6)$6)$p0$A;$G4@p0$X>$X>$X>$7)$6)$4q&4q&4q&4q& v$ v${x${x$yV#yV#yV#yV#yV#yV#yV#yV#{`#{`#{`# 7@yV#cs$cs$cs$yV#yV#yV#yV#4}@4}@4}@4}@>:@|T@WH@I2@w^@,:@G,@Y5+O&+Kn+~P+tI+(t#uy#3N#5s%~P+~P+B+4 @0G+ny+*>+my+;B+O)@*>+my+*>+O)@>B+4 @my+Rt+Rt+tr+L)@<&@<&@:x@:x@7X+(t#/P+Gt+sI+ZM+rI+-]@v&@/+@/+@YA+ZA+V4@Pn#p=$-:#:c@fh#<&@<&@L)@L)@L)@0$@P,@a&@P,@e^@J@@my+ny+my+ny+*>+0G+3 @f^@~-+~-+__+__+__+__+c~@_/+c^#c^#+>#,[+ik+*E#>[+>[+&1@-u+QA+QA+nS$Ou#YO@Pt*:u*=q%,v* I> f% f% v% fL.fL.fL.fL.fL.fL.fL.fL.fL.l3 {t.l3 {t.l3 {t.l3 {t.w% j}+l3 {t.-J.aq.-J.-J.si si si si w4.w4.w4.w4.g% @[+_m%~k.o2$9H.Vu*9H.6v@w4.w4.w4.w4.w4.w4.w4.w4.a, cl+8H.w4.fL.w4.8H.a, a, a, w4.w4.fL.fL.fL.I> I> I> I> I> I> I> I> h% <4 cp.j}+5!.V[&ni !<*0>$s[+i3 I-@E.@;9 (}+X4.Fg%Yt*Ca.&P@ok#vu*`t*L5* u* u*&k@.u*]A#C)@+u*vt*C@+v<@J.+J.+tm#tm#J.+3W.:-+,>+3W.ki@ki@ki@3W.3W._-+.*+.*+.*+_-+D#$=7$Vk$Vk$Vk$Vk$CM#CM#i%%i%%i%%cD$cD$i%%i%%i%%CM#Zz$Zz${m${m${m${m$ln$ln$ln$ln$-c$S5+@d$J3$J3$w4#$*$&6$_8$_8$_8$_8$5($5($5($iX+XK+>K@>K@2 @-K@g[+;K@2 @YK+YK+YK+2 @2 @5G+5G+R,+VK+VK+AI+AI+[V+[V+=>+=>+Q,+Q,+Q,+Q,+ZK+ZK+ZK+Q,+w;@2 @5G+YK+)K@,K@>K@2 @;K@;K@;K@;K@;K@;K@;K@;K@2 @5G+5G+5G+5G+2 @w;@!K@cB@cB@^K@^K@^K@^K@^K@cB@>T@>T@>T@>T@3 @3 @3 @3 @0G+;B+_w+my+ny+4 @Z.@e^@:^#:^#0$@O,@b&@a$@:&@:&@#k+#k+o;@VH@e0#I6@]/+RO@M4#Z#j)$or&CM@]-+1O#Z&+<{#8]+/ %.*+BM#Z]$Yx%)=%kS$Qs%&q&GU$Sd&QB$})#=1@f$@P@@P@@P@@P@@B1#=1@@*+4)#k %=7$rr%'M$7V@[V+AD+h~+!-+1]+}]+{/+fi+;f+'6+UY#et##K#B}%B}%yf##G#zf#D2$ut#*z#wu*]v*^v*/v*Xu*=O#(v*uo#_v*Au*:v*G$SG$xI$JH$JH$JH$JH$SG$JH$;G$SG$>v*>v*>G$_+2u$hD$hD$&;%&;%d %X_$Y_$X_$|X#+ $+ $+ $mV#}X#^X#+5#^X#]X#]X#c($e($e($jr$z[%J'%CM$'l$Mj$Ci$mK$$W>$6)$7)$[!$[!$7)$7)$7)$[!$[!$7)$6)$W>$A;$K2&^7@gn$E4@E4@w^@31@31@Y4@4}@21@>q$Sp$Sp$Gt$Gt$+r%41@41@[!$7)$6)$W>$W>$7)$7)$7)$7)$7)$7)$7)$7)$F4@G4@p0$X>$AT#AT#7)$7)$2r$2r$4q&4q& v${x${x${x$yV#yV#yV#yV#yV#yV#yV#yV# 7@ 7@ 7@ 7@yV#yV#yV#yV#yV#yV#yV#yV#4}@4}@4}@4}@5}@OS#,:@w^@w^@,:@F,@Z5+nk+)P+Ft+B+0G+0G+*>+;B+Y.@Y.@>B+*>+;B+*>+>B+>B+0G+my+Rt+ED+tr+L)@<&@:&@K,@OK+tI+tI+Gt+nI+sI+ZM+rI+<9@WF#W1#oB#2&@By##l#t=@4=@|t#-:#eh#fh#fh#<&@<&@L)@0$@P,@a&@P,@e^@J@@_w+my+my+my+*>+0G+3 @3 @f^@~-+__+I:+I:+I:+:f+c~@c^#c^#+>#,[+ik+*E#>[+>[+&1@-u+QA+QA+nS$Ou#A^%Pt*:u*=q%bv*cv*}e*dv*D3&w($+c%ev*Qc&Fs*3} M0*'<*O8 fv*Tu*^t*kg tn.d3+l5+^n#EI#ME+Xw&`E&`E&TO&TO&TO&#d+#d+3]&O4%O4%O4%#u%#u%Fc%Fc%TO&`E&3]&3]&3]&3]&`E&TO&3]&3]&3]&O4%O4%O4%O4%3&$y$$Ea+Ea+$(+T_+T_+$(+Ea+xc+Ea+xc+$(+G|@G|@xc+]! T_+T_+T_+T_+T_+G|@G|@G|@]! 5A.Ea+xc+$(+T_+G|@Kh+G|@G|@T_+T_+$(+xc+xc+Ea+Ea+$(+T_+$(+xc+Ea+xc+T_+}f.}f.}f.}f.}f.}f.}f.}f.aH@aH@bH@}f.l7 l7 }f.}f.T_+$(+xc+Ea+Ea+xc+$(+T_+5A.]! ]! Ea+$(+T_+xc+]! 5A.Ea+xc+xc+xc+xc+Ea+5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+]! ]! ]! ]! ]! ]! ]! ]! 5A.5A.Ea+Ea+Ea+xc+xc+xc+l7 l7 l7 l7 cI+cI+cI+cI+}f.l7 NM+cI+bH@aH@}f.l7 $(+xc+xc+xc+xc+Ea+Ea+Ea+Ea+$(+T_+$(+Ea+5A.Ea+xc+M8@OU+M8@OU+M8@OU+M8@OU+v]#q)@v]#q)@v]#q)@v]#v]#Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+xc+xc+xc+xc+xc+", "$% $% $% $% $% $% $% $% $% $% $% $% $% $% %% 5% 7% r: r: %% %% 4% 5% ~_ &_ 3{ d= d= 3{ ,;.5! &_ 4% %% %% %% %% 4% 5% 5% 5% 5% 5% 4% 4% 4% ^{ t% U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% 2% 2% 2% 2% Y_ &_ &_ &_ ~_ ~_ ~_ n3 n3 &_ &_ &_ &_ &_ &_ ~_ ~_ 5% 5% 5% 5% 5% 5% 5% 5% v% v% f% f% f% 5% 5% 5% f% 5% 5% 5% 5% f% v% I> f% f% f% f% f% f% f% x% M2 !W+!W+!W+0Y+0Y+0Y+0Y+!W+!W+!W+!W+!W+!W+!W+)W+fL.I> v% f% f% v% I> fL.I> I> I> I> I> I> I> I> l3 w% w% w% l3 -J.':+Vl.l3 l3 w% w% x% x% j% j% v% fL.w4.fL.v% f% v% fL.fL.fL.fL.fL.fL.fL.fL.-J.{t.Zl@{t.Zl@{t.Zl@{t.Zl@{t.Zl@{t.l5+aq.$y#(s.(s.{D si si si w4.w4.w4.w4.*_ >r+gv*6g*o2$9H.7a.1P 6v@w4.w4.w4.w4.w4.w4.w4.I> w4.8H.a, fL.I> w4.8H.8H.8H.a, a, w4.w4.w4.fL.fL.fL.fL.fL.fL.fL.fL.fL.i% <4 cp.j}+$9.V[&z) !<*zh.Y* fg+I-@E.@;9 X4.+u%Yt*u<+Ca..H%ok#5u*$e*[9* u* u*&k@.u*]A#C)@+u*vt*FO@!}@S)@S)@!}@dk@S)@.*+4[%_-+W,@S)@!}@S)@W,@W,@_-+.*+.*+.*+_-+D#$Vk$CM#Vk$CM#CM#CM#i%%i%%A+%A+%cD$cD$i%%i%%i%%CM#Zz$Zz$/v$/v${m${m$ln$ln$]m$]m$Cj$-c$_a$@d$,L$J3$&6$qw$_8$_8$_8$_8$5($5($5($iX+BM@5&@5&@yM@h[+h[+R,+5$@4G+4G+4G+5&@5&@R,+R,+R,+}V+BI+[V+[V+[V+AI+zI+zI+x)+x)+x)+x)+9G+9G+9G+x)+R)@5G+;K@2 @)K@)K@>K@5G+YK+YK+YK+2 @5G+;K@-K@-K@8G+X.@^^#^^#^^#8G+R)@w;@x;@x;@x;@x;@x;@x;@x;@x;@x)+x)+x)+x)+9G+9G+9G+9G+0G+;B+_w+_w+4 @4 @Z.@e^@4e@qg@e^@J@@O,@0$@tr+L)@>w+>w+:c@:c@`K+`K+XN#{k+&l#&l#]_+]_+]_+[]+Mb+Mb+U_@)B+:V+)B+!P+fp+!P++w+_T+Q0+(|+(|+5T+QK+J@@_w+;m+e[+y9#y9#7k#j)${K@DI+WK+*6$47$,L$~}%m~+_-+K6@Z]$Yx%mF$rV$H{%kS$.I%0T+mF$|)#})#g&@HK#8G#ts@ts@[)#iB@NX.g<$4[%C)+''%^f#5&@>T@[P+dp+Pb+xp+sD+ZA+YN# ;$)E#Sy#2T##K#B}%B}%yf##G#zf#D2$ut#*z#wu*]v*hv*iv*;K#dz#jv*)g#>u*kv*lv*mv*nv*ov*pv*qv*rv*sv*tv*uv*vv*wv*V`#xv*yv*&Q#Mu*zv*Av*Bv*Cv*|*$zq#|@$z0+ ;$oq#Nl+U_@R0+:&@b=@8&@^K@^K@cB@G@@G@@G@@7G+CU$FO$-M$-M$-M$V~$Co&Co&>J$lF$WL$lF$jF$jF$kF$WL$WL$kF$iF$iF$kF$kF$iF$CM@2 @=>+zI+$zs$N)%(/%(/%(/%#<%-p$mK$$W>$7)$[!$[!$7)$7)$7)$7)$[!$41@[!$7)$W>$A;$z6@^7@gn$E4@w^@I2@31@31@Y4@4}@>q$Ao$xo$Sp$Gt$cs$M3&M3&M3&4q&4q&4q&4q&4q&4q&4q&4q&4q&4q&4q&4q&7)$E4@E4@lt$5}@5}@5}@4}@4}@Gt$Gt$Gt$cs$.O$.O$.O$iR$yV#yV#yV#yV#yV#yV#yV#yV#yV#yV#yV#yV# 7@ 7@ 7@ 7@yV#yV#yV#yV#4}@4}@4}@4}@31@MU#;]@E4@E4@;]@G,@Y5+ok+fp+cr+~P+~P++*>+*>+*>+;B+;B+;B+>B+*>+;B+*>+>B+>B+0G+my+ED+L)@<&@<&@:x@K,@}R+}R++*>+9G+3 @f^@f^@__+I:+f[+f[+rd+c~@_/+c^#+>#,[+ik+*E#>[+>[+&1@-u+QA+Rr+]k@Ou#A^%Pt*:u*Nu@Hv*Iv*Jv*Kv*Lv*Mv*Nv*[%@-Q Ov*Pv*AY$LI&s3&Qv*Rv*Sv*0g@Ie+sZ bv#FI#Ic%ME+%' {y%{y%B#@B#@B#@`b&`b&'W+'W+'W+3&$3&$Y@$Y@$Y@${y%B#@B#@`b&`b&B#@B#@{y%3&$3&$3&$3&$3&$'W+'W+'W+x8.'g@y$$*$@y$$6j+y$$y$$|m.*$@y$$*$@/{ /{ *$@6j+T_+T_+T_+$(+$(+$(+$(+xc+$(+$(+$(+$(+xc+xc+xc+xc+T_+T_+T_+T_+$(+$(+$(+$(+Ea+$(+G|@T_+Ea+5A.xc+T_+bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@aH@aH@bH@}f.l7 cI+T_+$(+xc+Ea+Ea+xc+$(+T_+5A.5A.5A.xc+G|@G|@$(+5A.5A.Ea+$(+T_+T_+$(+Ea+5A.xc+xc+xc+xc+xc+xc+xc+xc+5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.Ea+xc+xc+xc+$(+l7 l7 l7 }f.}f.}f.}f.bH@aH@}f.cI+l7 }f.bH@l7 NM+NM+NM+NM+cI+cI+cI+cI+cI+NM+l7 bH@l7 ko.13+ko.f+#PS@r,@PS@r,@PS@r,@PS@r,@PS@r,@PS@r,@PS@r,@PS@PS@v]#Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+", "|% |% |% |% |% |% |% $% $% $% $% $% $% $% %% f% j% 7% 7% 4% 4% 5% f% ~_ &_ 3{ d= d= 3{ ,;.5! ~_ 5% 4% 4% 4% 4% 5% f% f% f% f% 5% 4% %% %% &- t% U@ U@ U@ U@ U@ U@ U@ .* .* .* .* .* .* .* .* t% &_ &_ ~_ ~_ ~_ n3 n3 &_ &_ &_ &_ &) &) &) &) 4% 4% 4% 4% 4% 4% 4% 4% v% v% f% f% f% 5% 5% 5% f% 5% 5% 5% 5% f% v% I> f% f% f% f% f% f% f% b/ Zl NQ.@~.@~.!W+0Y+0Y+' .!W+!W+!W+!W+!W+!W+!W+!W+-h I> f% 5% 5% f% I> fL.I> I> I> I> I> I> I> I> -J.l3 x% x% x% l3 Vl.B{$w% w% w% x% j% j% 7% 7% w4.a, 8H.a, I> v% I> fL.fL.fL.fL.fL.fL.fL.fL.-J.{t.Zl@Zl@Zl@Zl@Zl@Zl@Zl@Zl@l5+l5+l5+$y#$y#^n#ym.{D si si si w4.w4.w4.w4.*_ >r+gv*6g*o2$9H.7a._m%6v@w4.w4.w4.w4.w4.w4.w4.v% fL.a, w4.fL.I> fL.a, 8H.8H.a, a, w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.i% <4 cp.j}+$9.ni z) !<*pS X* > @:A+Ja+;9 X4.>} u<+Y_+g<@QO.yC.Tv*Uv*Fk& u* u*&k@.u*]A#C)@+u*vt*PY$!}@W,@W,@!}@!}@W,@_-+D#$_-+W,@S)@!}@S)@W,@W,@_-+.*+W,@W,@_-+D#$Vk$CM#CM#CM#CM#CM#i%%i%%A+%A+%cD$cD$i%%i%%i%%CM#Zz$Zz$/v$/v${m${m$ln$ln$]m$]m$8F$Cj$Dj$@d$,L$,L$qw$qw$_8$_8$_8$_8$5($5($5($hX+DI+R,+R,+yM@h[+r8+5&@jX+4G+4G+4G+5&@5&@R,+R,+R,+[ @[ @3G+[V+[V+AI+{-+{-+x)+x)+x)+x)+9G+9G+9G+x)+8G+;K@;K@2 @>K@)K@YK+5G+,K@)K@>K@YK+5G+;K@-K@-K@X.@^^#[|+X&+[|+X.@R)@w;@x;@x;@x;@x;@x;@x;@x;@x;@+;B+(w+_w+4 @O)@Z.@K@@4e@qg@e^@6T+b~@0$@tr+L)@gy+gy++B++B+~i@~i@`n+`n+=m+/k+:k+:k+]_+]_+Nb+Mb+)B+:V+|G+:V+cr+!P+cr++w+_T+R0+(|+xp+5T+QK+e^@my+;m+e[+y9#y9#7k#j)${K@DI+9e#c9$c9$@d$Tj$K[#4[%@ +@ +Yx%mF$rV$H{%kS$)Q#0T+rV$/d$B1#B1#HK#HK#)/#ts@[K#w*,w*'w*zv*Av*)w*!w*~w*W%$v0#>>$e8+df#(+@nD+_T+:x@Rx#4 @^K@^K@^K@G@@G@@DM@DM@CU$CU$-M$-M$-M$-M$Co&V~$jF$lF$WL$lF$jF$jF$kF$WL$WL$kF$iF$jF$kF$kF$iF$@#$5$@:P+dX+2G+2G+%9X#9X#a>%rO$N)%jr$zs$U_$T_$4m$4m${b$_N$@Z$hd$hd$Y4$ys$ys$@{%KP$V_$N)%;~%;~%;~%Ci$-p$xV#Ew$V>$6)$7)$[!$[!$7)$7)$7)$[!$41@41@41@7)$6)$A;$Ma$!3@gn$E4@w^@I2@31@31@Y4@4}@>q$zb$xo$Sp$Gt$cs$E5&2r$2r$4q&M3&M3&L2&L2&4q&4q&4q&4q&4q&4q&4q&4q&`0$w^@31@5}@>:@>:@Y4@Y4@Gt$Gt$Gt$cs$.O$.O$iR$iR$yV#yV#yV#yV#yV#yV#yV#yV#cs$cs$cs$yV# 7@{`#{`#{`#yV#yV#yV#yV#4}@4}@4}@4}@lt$>:@%}@E4@E4@;]@G,@Y5+mI+!P+Ft+~P+~P++0G+0G+>B+>B+*>+;B+*>+>B+>B+0G+my+}=@L)@<&@<&@:x@(P+ay+~P+dr+dr+ZM+ZM+pI+pI+8i@se@Zv#+*>+9G+3 @f^@f^@__+I:+f[+>2+rd+:f+_/+lK@+>#,[+ik+*E#>[+>[+&1@QA+QA+Rr+]k@Ou#A^%Pt*]w*Nu@^w*;&&/w*ou*(w*D3&uE%aN._w*:w*x'@Ci*9_*Y7&n.>n.!D+B#@{y%+d+Y@$Y@$3&$'W+'W+{y%{y%({ 9Y+y$$*$@6j+'g@6j+|m.Bj.|m.y$$*$@|m./{ |m.*$@T_+T_+$(+$(+xc+Ea+Ea+Ea+Kh+Kh+G|@$(+xc+5A.]! ]! $(+$(+$(+T_+T_+T_+T_+T_+5A.$(+G|@T_+Ea+5A.xc+G|@bH@bH@bH@bH@bH@bH@bH@bH@}f.bH@aH@Bz$Bz$bH@l7 NM+T_+$(+xc+Ea+Ea+xc+$(+T_+Ea+5A.Ea+$(+Kh+Kh+$(+Ea+Ea+xc+$(+T_+T_+$(+xc+Ea+T_+T_+T_+T_+T_+T_+T_+T_+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.Ea+xc+xc+$(+$(+l7 l7 }f.}f.bH@aH@aH@Bz$Bz$bH@l7 l7 }f.}f.cI+ko.13+13+ko.NM+NM+cI+cI+l7 ko.l7 bH@l7 13+=L 13+35+x}*lC&lC&lC&lC&lC&lC&lC&A) A) A) A) A) A) A) OU+v]#Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.5A.5A.5A.", "|% |% |% |% |% |% |% |% |% $% $% $% &) &) 4% 5% j% j% j% 5% 5% 5% 5% 0' $% 5! 5! 2{ 3{ ,;.5! $% $% $% $% $% $% $% $% ~_ &) $% &) &_ ~_ &_ T$ t% U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% .* .* M$ M$ M$ M$ M$ M$ M$ M$ Y_ Y_ Y_ Y_ Y_ Y_ Y_ Y_ 4% f% f% 4% d( d( 5% fL.I> f% 5% 4% 4% 5% f% I> &- &- ^{ ^{ Q_ Q_ Q_ y% u% u% u% u% u% u% u% m3 *L @~.!W+0Y+0Y+' .z) z) V[&V[&ni z) ' .0Y+!W+@~.si si si si si si si si -h -h -h -h -h -h -h -h si -h =] y% y% =] -h si u% u% u% u% u% u% u% u% I> I> I> I> I> I> I> I> w4.w4.w4.w4.w4.w4.w4.':+(s.$y#$y#$y#$y#$y#$y#$y#Zl@Zl@Zl@Zl@Zl@Zl@Zl@{t.{D si si si w4.w4.w4.w4.6v@6v@6g*6g*6g*6g*zX&6g*QB@I> fL.fL.w4.w4.w4.a, a, a, a, a, a, a, a, a, 8H.8H.a, a, a, w4.w4.w4.w4.fL.fL.fL.I> v% v% v% i% <4 cp.j}+5!.V[&ni !<*9u.z* }w*]l+Kk ;9 +u% h u<+4u*|w*K}%yC.Zt*$e*L5*tt*st*qW#qW#&k@]A#1w*1W.PY$dk@dk@dk@!}@!}@S)@S)@_-+_-+.*+.*+W,@S)@S)@S)@S)@.*+4[%_-+.*+W,@_-+D#$CM#CM#CM#i%%i%%A+%A+%A+%cD$Sy$Ex$A+%Vk$D#$L[#RA$jm$jm$jm$jm$CO#CO#CO#CO#-c$-c$_a$_a$_a$@d$,p$,p$_8$_8$_8$_8$5($5($5($hX+BM@5&@5&@5&@5&@5&@5&@5&@R,+R,+R,+R,+R,+R,+R,+R,+.$#.$##N+#N+#N+#N+@N+@N+hX@3]+'T@'T@~-+3 @lX+2T+R)@2 @2 @2 @2 @2 @2 @2 @;K@;K@5G+2 @2 @5G+;K@;K@[|++:$CD+CD+H@@H@@cB@cB@!K@!K@w;@R)@R)@8G+X.@X.@hX@hX@hX@hX@3 @3 @3 @3 @;B+;B+my+my+my+my+K@@K@@m5$8&@K@@e^@J@@e^@tr+L)@up+;w+>w+gy+wV$~i@-9@Tt+]_+]_+]_+[]+Mb+Mb+N0+N0+)B+|G+tI+@w+Ft+cr+t9#ay+P0+f~+(|+(|+5T+5T+L@+&N+(w+:|+-B+-B+>Z#7k#|{#nz#iF$ ^$ ^$cN#j %>>+km$+B$@ +@*+Y{@g~@g~@~}@Yx%Yx%,]$'Z#B;@X,@HK#8G#r>#vD@L$>L$$K$_H$jF$5($d9$d9$d9$d9$5($d8$b>%d8$5($d9$d9$5($d8$hF$5$@T,@r<@,}@r<@dX+~k#xI+ow*aX+Yn+]/+2$@By#Ey#%3@>G$,%G+%/:%/:%LP$^:%&<%O^%#O$#O$#O$+o%Fr%m7$w,${e%='$V>$-'$W>$6)$W>$W>$W>$W>$W>$W>$W>$F4@z6@!3@K2&gn$w^@I2@31@5}@21@21@4}@4}@ 7@ 7@ 7@{`#Ft$Ft$Ft$Ft$Ft$Ft$Ft$Ft$:n$Ft$ v${x${x$ v$Ft$Et$31@2(@2(@2(@|1@|1@|1@|1@=3@Sl$tV#tV#tV#Ld$5l$6k@{`#{`#{`#{`#{`#{`#{`#{`#yV# 7@{`#qR${`#yV#Gt$Sp${`#{`#{`#{`#M<@M<@M<@M<@XH@|T@WH@;]@;]@WH@:R+:o+~G+Ft+B+>B+P)@P)@P)@*>+*>+*>+0G+0G+0G+0G+4 @Jl+:&@#9@Bq@qr$fh#OK+@w+#w+dr+{P+NK+qg%pg%jg@se@%3@Vl+-X#Tn#>$$kc#D<%Fv*{w*9F$3,$3P#uy# N+ N+K,@,'$a&@L@@O,@L@+6Z+S.+S.+my+my+;B+Y.@~-+~-+>2+>2+>2+I:+G$+__+:f+c~@lK@|O#R^@R^@bw+ik+*E#Q2@N@@UN#tg@Rr+Ou#Ou#j_&sw*]w*tw*uw*Ou*vw*ww*M[%Ob${1$cY.xw*:w*yw*I~*u!&s3&zX%E%#'5*jg A' [I+l3 Vl.x*$2&$y$$|m./{ |m.6j+;~ 6j+*$@*$@*$@*$@*$@*$@*$@*$@*$@*$@y$$6j+'g@'g@6j+y$$*$@*$@*$@*$@*$@*$@*$@*$@*$@Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$>n.!D+B#@{y%{y%B#@!D+h~ $(+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+$(+xc+Ea+Ea+Ea+$(+$(+$(+$(+$(+$(+$(+$(+Kh+T_+xc+xc+$(+$(+Ea+]! NM+NM+NM+NM+NM+NM+NM+NM+bH@}f.l7 cI+cI+l7 }f.bH@Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+]! 5A.5A.Ea+xc+xc+$(+$(+T_+G|@G|@Kh+G|@$(+Ea+5A.Ea+xc+$(+$(+$(+Ea+]! {! xc+xc+xc+xc+xc+xc+xc+xc+ko.NM+l7 }f.}f.l7 NM+ko.ko.NM+NM+cI+l7 l7 }f.}f.}f.l7 cI+ko.ko.cI+l7 }f.aH@aH@bH@}f.l7 cI+NM+35+q(# (&GJ@zw*zw*GJ@ (&p)@|7.r,@!>%!>%!>%r,@p)@9&+:{+]! be+{! Ea+$(+5A.{! xc+5A.be+{! Ea+xc+", "$% $% $% $% $% $% $% |% |% $% $% $% &) &) 4% 5% j% j% j% 5% 5% 5% 5% 0' $% 5! 5! 2{ 3{ ,;.+..d= $% $% $% $% $% $% $% ~_ &) $% &) &_ ~_ &_ T$ t% U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% .* .* t% t% t% t% t% t% t% t% Y_ Y_ Y_ Y_ Y_ Y_ Y_ Y_ 4% f% f% 4% ~% ~% 5% I> v% f% 5% 4% 4% 5% f% v% ^{ ^{ Q_ Q_ Q_ y% y% y% u% u% u% u% u% u% u% m3 L2 !W+0Y+0Y+0Y+0Y+' .' .z) z) z) ' .0Y+!W+!W+!W+-h -h -h -h -h -h -h -h -h -h -h -h -h -h -h -h si -h =] u% u% =] -h si u% u% u% u% u% u% u% u% I> I> I> I> I> I> I> I> fL.fL.fL.fL.fL.fL.fL.-J.aq.l5+aq.l5+aq.l5+aq.l5+{t.Zl@{t.Zl@{t.Zl@{t.{t.{D si si si w4.w4.w4.w4.6v@6v@6g*6g*6g*6g*zX&6g*4=+fL.w4.w4.w4.a, a, a, a, a, a, a, a, a, a, a, 8H.8H.a, a, a, w4.w4.w4.fL.fL.fL.I> I> I> I> I> i% <4 cp.j}+5!.V[&ni !<*pS Y* fg+|A+wF+J] (9*:T u<+u<+Ca..H%^r*Tv*qt*L5*st* u*qW#qW#D,@]A#Aw*>o%PX.dk@!}@!}@!}@S)@S)@S)@.*+.*+.*+W,@W,@S)@S)@S)@S)@.*+4[%_-+.*+W,@_-+D#$Vk$Vk$Vk$CM#CM#i%%i%%i%%dD$xC$Ex$A+%Vk$=7$RA$Zz${m${m${m${m$ln$ln$ln$ln$-c$-c$_a$_a$_a$@d$,p$,p$_8$_8$_8$_8$5($5($5($hX+WK+4G+4G+5&@5&@5&@5&@5&@yM@yM@R,+R,+R,+R,+5&@5&@UK+UK+TK+TK+TK+TK+{-+{-+>T@>T@hX@3]+~-+3 @9G+T@>T@>T@>T@3 @f^@f^@f^@;B+;B+my+my+my+my+K@@K@@m5$8&@K@@e^@J@@e^@tr+L)@up+;w+>w+gy+wV$~i@-9@^/+!k+:k+:k+]_+Nb+Mb+Mb+Mb+)B+:V+@w+& ^$ ^$cN#j %m~+km$@ ++B$|f+g~@g~@~}@~}@QB$QB$rV$rV$X,@X,@HK#8G#sp%S8@8[*5u%D1##E+U=+$RP#H~$*q%2*$Bf#Bf#Ec#Kq#;z##8#3w*Bw*iv*`B#Cw*so#Dw*Ew*Fw*Gw*Hw*Iw*Jw*Kw*Lw*Mw*ew*Nw*Ow*Pw*5v*6v*V`#hw*Qw*,w*&f%lw*mw*mw*Av*Lc#|*$xc#wq#!w#;f+6e@gi+t&@|G+.B+tr+4 @9=@mq@8$@I@@EM@6$@+W$UR$UR$CU$=@%>L$>L$(H$jF$5($d9$d9$d9$d9$5($d8$pw$d8$5($d9$d9$5($d8$}{#4G+:P+T,@r<@dX+2G+1G+xI+&B+aX+Yn+]/+pD+By#Ey#%3@0S$[T$>O$kQ$%KP$>,%JP$LR$b$%/:%m%%&<%)l$#O$kk%#O$kk%-O$Ds%5c${e%g>$='$='$V>$-'$-'$-'$-'$-'$-'$-'$-'$-'$A;$z6@!3@K2&gn$E4@w^@31@31@21@21@21@4}@yV# 7@ 7@ 7@Ft$Ft$Ft$Ft$Ft$Ft$Ft$Ft$Ft$)r$ v${x${x$ v$)r$Sp$4}@2(@2(@2(@|1@|1@|1@|1@io@=3@AM$AM$AM$7m@Qi$!E$bC${`#{`#{`#{`#{`#{`#{`#yV# 7@{`#{`#{`#yV#cs$Gt${`#{`#{`#{`#M<@M<@M<@M<@XH@|T@WH@,:@,:@WH@:R+:o+~G+Ft+B+O)@>B+t<@P)@4 @0G+4 @0G+4 @0G+4 @4 @wI+:&@#9@&t@Aq@7X+tI+$$kc#D<%([%y)$y)$2N#3P#uy#7X+7X+:x@)~#P,@L@@O,@6T+L@+;m+;m+my+my+;B+Y.@~-+>2+>2+>2+>2+I:+__+__+:f+c~@lK@K_@R^@R^@bw+ik+*E#Q2@N@@UN#]o+Je@Rw*Rw*A^%A^%Sw*]}*uw*Tw*Uw*ww*zs*Vw*Ww*cY.Xw*Yw*DY#|c*LI&6W&|m&Zw*tr*`w*B' [I+':+A{$x*$x*$*$@/{ Bj.|m.y$$6j+y$$*$@*$@*$@*$@*$@*$@*$@*$@*$@*$@y$$6j+;~ ;~ 6j+y$$*$@*$@*$@*$@*$@*$@*$@*$@*$@Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$>n.!D+B#@{y%'W+{y%B#@B#@|m.$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+xc+xc+xc+xc+$(+$(+$(+$(+$(+$(+$(+$(+G|@$(+Ea+xc+$(+T_+xc+5A.cI+cI+cI+cI+cI+cI+cI+cI+bH@}f.l7 cI+cI+l7 }f.bH@Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+xc+xc+xc+$(+$(+Ea+Ea+Ea+Ea+xc+xc+xc+xc+$(+T_+G|@G|@G|@T_+xc+Ea+Ea+xc+$(+$(+$(+Ea+]! {! xc+xc+xc+xc+xc+xc+xc+xc+NM+cI+l7 l7 l7 l7 cI+NM+cI+cI+cI+l7 l7 }f.}f.}f.}f.l7 cI+NM+NM+cI+l7 }f.bH@bH@}f.l7 cI+NM+NM+-V@]%@A) PS@|7.q)@r,@OU+!>%PS@r,@PS@r,@PS@|7.q(#9&+u]#5A.{! ]! xc+$(+Ea+]! 5A.{! 8g.{! Ea+xc+", "&) &) &) &) &) &) &) |% |% $% $% $% &) &) 4% 5% j% j% j% 5% 5% 5% 5% 0' $% 5! 5! 2{ 3{ ,;.+..3{ 3{ 3{ 3{ 3{ 3{ 3{ 3{ 5! 3{ d= 3{ 2{ 5! 2{ @ t% U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% .* .* 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% Y_ 5% f% f% 5% %% %% 5% v% v% f% 5% 5% 5% 5% f% v% Q_ 6[ o^ o^ -^ -^ -^ -^ -^ -^ -^ -^ -^ -^ -^ {2 =^ ' .0Y+0Y+0Y+0Y+!W+!W+0Y+0Y+0Y+0Y+!W+!W+!W+!W+.^ .^ .^ .^ .^ .^ .^ .^ p: p: p: p: p: p: p: p: fd fd * .* .* * fd fd * * * * * * * =5 fL.fL.fL.fL.fL.fL.fL.fL.I> I> I> I> I> I> I> I> l3 {t.l3 {t.l3 {t.l3 {t.l3 {t.l3 {t.l3 {t.l3 l3 si si si si w4.w4.w4.w4.6v@6v@6g*6g*6g*6g*zX&6g*6v@w4.a, a, 8H.8H.8H.8H.a, a, a, a, a, a, a, a, 8H.8H.a, a, a, w4.w4.w4.I> I> I> I> I> fL.fL.fL.i% <4 cp.l#@5!.V[&ni Iu+Zn (= > @[A+CF+*i*(9*+k Yt* x*'^+Y,&bo*5u*`t*L5*.x*i4*/o@/o@qW#.u*+u*}x#Tb+f~@f~@XX.XX.U`$U`$U`$>>+U`$U`$U`$XX.XX.XX.XX.S)@.*+4[%_-+.*+W,@_-+D#$=7$=7$=7$Vk$Vk$CM#CM#CM#bE$dD$Fx$A+%CM#Vk$Zz$Gx$/v$/v$/v${m$ln$]m$]m$]m$-c$-c$_a$_a$_a$@d$,p$,p$_8$_8$_8$_8$5($5($5($hX+iX+gX+gX+2R+CI+CI+]-+]-+->+->+->+]-+CI+CI+2R+2R+BI+BI+[V+[V+[V+[V+=>+=>+T@hX@f^@f^@3 @>T@8G+5G+5G+5G+5G+5G+5G+5G+2 @2 @YK+>K@>K@YK+2 @R)@CD+I@@8$@8$@8$@^K@cB@cB@8G+8G+2 @2 @2 @2 @YK+YK+T@3 @f^@~-+~-+;B+;B+my+my+my+my+K@@K@@m5$^K@my+_w+(w+_w+ED+}=@1R+#B+@B+hy+_x@%N+ L+^/+I6@]/+sD+sD+:V+:V+:V+)B+Ft+M$#W$#W$`.+K#$PX#km$@ +3)#9Z+=1@})#})#})#]v$]v$qX+T)@T)@T)@HK#HK#Pr#. +8[*]{#D4#+:#E4#Q;+T}+wW#;B+O,@z@@PK+}T+}G+.}#YN##w#+G#Vy#~>$RP#I~$JB#*q%Iq#Iq#,5#Kq#;z##8#3w*Bw*Xv*=O#Zt#{r#+x*@x*#x*$x*%x*&x**x*=x*-x*;x*>x*,x*'x*)x*!x*~x*V`#_E#(E#/e%{x*]x*mw*mw*Av*Bv*|*$Wn#w0#I`#In$Nn#ir+dy+t&@}T+Jl+w)+O)@4 @my+;B+8$@x;@6$@6$@6$@W.@CU$CU$CU$GO$jF$5($5($d9$d9$5($5($d8$pw$d8$5($5($5($5($d8$}{#5&@YK+YK+:P+:P+2G+1G+3R+#a@)w+fy+]/+pD+ w#S%$%3@)O$p@*4N&4N&p@*p@*>r$,r$4N&4N&4N&4N&4N&4N&4N&>O$bm$Ci$Ci$Ci$Ci$Ci$#<%#<%1q$2q$%p$%p$v/%(N$OP$ir$YQ$G]%LR$KV$KV$FS$P3%dm$#O$kk%kk%R;%-O$Fr%Fr%>o$d6$='$='$='$='$='$='$='$='$='$='$='$='$='$='$*'$z6@!3@K2&K2&gn$E4@lt$lt$>q$>q$21@21@yV#yV#yV# 7@&w$&w$&w$&w$&w$&w$&w$&w$Ju$Ju$&w$#-&#-&&w$Ju$Gt$4}@|1@|1@|1@0X#0X#0X#0X#_a@7m@@F$@F$@F$5l$JH$!E$iR$ 7@ 7@ 7@ 7@ 7@ 7@ 7@yV# 7@ 7@{`# 7@yV#cs$cs${`#{`#{`#{`#M<@M<@M<@M<@|T@|T@WH@,:@,:@WH@:R+km+~G+Ft+'$>'$59@59@C`#XA#XA#4v#pe#pe#Kx#c&@G6@G6@a$@Z.@ny+0&@4 @0=@O)@0=@t<@0&@4 @0&@4 @0&@4 @0&@Z.@FD+K,@:x@fh#7X+ N+@w+nI+7h$7h$YM+pg%Kf%re@cc@ec@;>$rq#rq#$$Dy#.w#On#&n#&n#1N#uy#3P#eh#eh#fh#*9@L@@0$@O,@6T+6T+(w+(w+my+my+Y.@Y.@>2+>2+>2+f[+>2+f[+__+I:+rd+:f+_/+RA+R^@R^@bw+ik+*E#Q2@N@@UN#QA+hR+XI+XI+AL$AL$=X&^x*y!&/x*(x*_x*:x*uF% I> I> fL.fL.fL.6% h% #9.l#@5!.0- V[&Iu+ d+f= > @3t !p*]|.X4.Nu+Yt*Nw%`c.}V 37*5u*6u*p6*i4*>z%h;@/o@qW#&k@M{@}x*Tb+f~@XX.XX.U`$U`$U`$>>+U`$U`$XX.XX.XX.XX.XX.XX.S)@.*+4[%_-+.*+W,@_-+D#$D#$D#$D#$=7$=7$Vk$Vk$Vk$8o@dD$A+%A+%CM#Vk$Vy$oz#Hx$dw$/v${m$ln$]m$ar$Tj$-c$-c$_a$_a$_a$@d$,p$,p$_8$_8$_8$_8$5($5($5($hX+9e#fX+gX+2R+2R+CI+]-+]-+->+->+]-+]-+CI+2R+gX+gX+}V+}V+3G+3G+3G+3G+:P+:P+2T+Q,+K@>K@>K@>K@YK+R)@H@@8$@8$@8$@^K@^K@cB@cB@X.@X.@5G+2 @2 @YK+>K@>K@2T+Q,+2+;B+;B+my+my+my+my+K@@my+m5$^K@my+_w+(w+_w+ED+}=@1R+#B+@B+hy+_x@%N+ L+^/+e0#p=$p=$]/+eK@|G+|G+|G+Ft+~P+gh#hh#ih#MF@$R#M)@}R+vr+=w+@k+wI+Jl+e^@_w+_w+/w+<|+<|+7k#j)$or&Tv#>M$#W$zw%@6$po%rr%km$@ +3)#R2@})#})#|)#|)#`o$/d$~}@L6@L6@L6@HK#)/#Pr#8[*N1+|x*m5&y,+ B$a)+*X&W=+;B+O,@PK+PK+eK@jc@`J#oq#W+$.K#UY#Zy$QP#RP#B}%C}%-5#Iq#)5#Y7#@8#8w#1x*1x*S`#2x*3x*!r#4x*5x*6x*7x*8x*9x*0x*ax*bx*cx*dx*ex*fx*gx*hx*ix*;v*jx*0@$9v*mw*]x*mw*kx*lx*)w*|*$Xn#)$$>>$d8+Nn#fi+(+@qD+8X+FD+ED+4 @4 @my+my+8$@mq@6&@6$@6$@6$@UR$UR$CU$FO$jF$d8$5($5($5($5($d8$d8$d8$d8$d8$5($5($d8$d8$jF$BM@2 @1 @YK+2 @zI+>T@Gn+>B+}=@(P+eK@jV@ w#te@9i@iR$H#*4N&ot$,r$;r$,r$Qp$,r$;r$,r$;r$,r$;r$,r$-G$CJ$Ci$Ci$Ci$Ci$Ci$#<%#<%2q$2q$2q$%p$v/%(N$OP$><%*#%uO$KV$vO$vO$n%%m>%m>%kk%R;%R;%;k$Ds%Ds%Ds%>o$|s$='$='$='$g>${e%{e%{e%g>$g>$g>$g>$g>$g>$g>$.9@Ma$!3@z6@K2&K2&gn$3(@`0$Ao$Ao$>q$>q$cs$cs$cs$yV#&w$&w$&w$&w$&w$&w$&w$&w$&w$&w$&w$&w$&w$&w$&w$cs$0X#|1@|1@|1@0X#0X#0X#0X#6k@_a@5l$5l$5l$Qi$JH$Qi$iR$ 7@ 7@ 7@ 7@ 7@ 7@ 7@yV# 7@ 7@ 7@ 7@yV#yV#yV#{`#{`#{`#{`#M<@M<@M<@M<@|T@OS#WH@WH@WH@WH@F,@km+!G+Ft+'$>'$D`#C`#YA#9)$nD#gh#gh#yb#pe#pe#c&@c&@c&@P,@P,@P,@a&@a&@=9@=9@=9@=9@a&@a&@a&@a&@P,@P,@P,@FD+(P+K,@:x@ N+tI+nI+dr+7h$YM+pg%pg%Kf%re@fK@5k@Zv#$$Dy#By# w#pD+rX@u=@(t#7X+eh#Aq@Aq@#9@P,@L@@0$@O,@J@@J@@_w+_w+_w+_w+Y.@/w+>2+>2+f[+f[+>2+I:+__+I:+rd+rd+_/+lK@R^@R^@bw+ik+*E#Q2@N@@UN#Je@mx*XI+-p*W @W @nx*ox*y!&/x*(x*px*se*M[%d{$qx*nX%rx*>S+}K&t^#pQ&4[ b/.sx*N~.A<$x2%l`.OJ.2&$zi./{ Kh+7P.Kh+T_+$(+T_+G|@$(+$(+$(+$(+$(+$(+$(+$(+xc+Ea+Ea+Ea+Ea+Ea+Ea+xc+$(+$(+$(+$(+$(+$(+$(+*$@3&$O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%O4%3]&3]&'W+|m.T_+$(+xc+Ea+]! ]! {! Ea+Ea+Ea+xc+$(+T_+T_+T_+$(+$(+$(+$(+$(+$(+$(+$(+xc+Ea+5A.Ea+T_+G|@T_+$(+}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.l7 l7 l7 l7 }f.}f.xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+$(+$(+T_+G|@Kh+Kh+T_+T_+$(+$(+xc+Ea+Ea+5A.Ea+Ea+xc+$(+$(+T_+T_+T_+Ea+Ea+xc+xc+xc+Ea+Ea+Ea+xc+xc+xc+xc+xc+xc+xc+xc+}f.l7 NM+ko.ko.NM+l7 }f.}f.bH@bH@bH@bH@bH@bH@bH@'U.ks@ks@ks@ks@ks@ks@'U.ks@ks@ks@Zh@Zh@2^ 2^ 80+cI+:{+xc+:{+xc+:{+xc+v]#]! v]#$(+d #G|@d #$(+xc+$(+xc+xc+xc+$(+$(+$(+xc+Ea+Ea+5A.5A.Ea+Ea+", "&_ &_ &_ &_ &_ &_ &_ |% |% $% $% $% &) &) 4% 5% j% j% j% 5% 5% 5% 5% 0' $% 5! 5! 2{ 3{ ,;.+..2{ 2{ 2{ 2{ 2{ 2{ 2{ 2{ 5! 3{ d= 3{ 2{ 5! 2{ @ t% U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% .* .* .* .* .* .* .* .* .* .* 2% 2% 2% 2% 2% 2% 2% 2% f% f% f% f% v% v% f% 5% 5% f% f% f% f% f% f% Q_ y% o^ o^ -^ -^ .^ .^ .^ -^ -^ -^ -^ -^ -^ -^ {2 _& z) ' .0Y+0Y+!W+@~.@~.@~.@~.@~.!W+!W+!W+!W+!W+-^ -^ -^ -^ -^ -^ -^ -^ .^ .^ .^ .^ .^ .^ .^ .^ * * * fd fd * * * fd fd fd fd fd fd fd fd w4.w4.w4.w4.w4.w4.w4.w4.v% v% v% v% v% v% v% v% v% v% v% v% v% v% v% v% I> I> I> I> I> I> I> I> si si si si w4.w4.w4.w4.6v@6v@6g*6g*6g*6g*zX&6g*@[+a, a, 8H.8H.cl+cl+cl+a, a, a, a, a, a, a, a, 8H.8H.a, a, a, w4.w4.w4.I> I> I> I> I> I> I> fL.6% h% #9.$9.6!.0- V[&Iu+ze+}].> @3t tx*Pe*(9*Nu+u<+Nw%Y^%}V dk*Tv*6u*6h*>z%>z%/o@qW#D,@.u*HY&Yf%yR#||+||+ *+ *+''%''%''%||+||+ *+ *+ *+ *+ *+XX.S)@.*+4[%_-+.*+W,@_-+D#$D#$D#$D#$=7$=7$Vk$Vk$Vk$8o@dD$A+%A+%CM#Vk$Vy$oz#Hx$dw$/v${m$ln$]m$ar$Tj$-c$-c$_a$_a$_a$@d$,p$,p$_8$_8$_8$_8$5($5($5($hX+vp#nZ@7V@7V@BO@BO@fX@fX@nq@nq@nq@fX@BO@BO@BO@7V@[ @[ @7=@7=@7=@7=@T,@T,@2T+2T+Q,+K@>K@>K@>K@YK+R)@^K@8&@8&@8&@^K@^K@cB@cB@X.@X.@5G+2 @5&@4G+5$@>K@2T+2T+Q,+Z#re#; $bA%2{*ux*o4&qr%sD$km$@ +3)#R2@})#})#l #l #u-$/d$g~@LD+L6@L6@f$@sp%+ +8[*vx*|1$^{#(/#=}@wx*^n%I,@_w+b~@uI+PK+|G+jc@u&@lc#TR#.K#UY#Zy$D+%2T#4|%C}%-5#-5#W7#Y7##8#8w#1x*hw*YY#2x*so#io#4x*xx*yx*zx*Ax*Bx*Cx*Dx*Ex*Fx*Gx*Hx*Ix*Jx*Kx*Lx*;v*Mx*(I#Nx*Ox*Px*Qx*Rx*)w*)w*Cv*r=$0,$'$$'6+;f+oq#(+@qD+Nb+fD+Rt+}=@}=@my+_w+ny+>B+mq@mq@6$@6$@6$@6$@Uv#TR$pw$47$47$_8$_8$47$47$37$_8$47$47$47$47$47$47$5($bN$1 @FO$1 @1 @2 @8G+3 @mq@Z.@c&@tI+]P+xb#re@YH@.~&.~&~x$nt$Rp$4U&Qp$nt$Qp$vo$Qp$vo$Qp$vo$Qp$_V$jk%/U$/U$/U$/U$/U$Yk%Yk%$<%lr$lr$Sx*Tx*&O$Ux*><%FS$YV$QP$d$%d-%b:%QV$QV$R;%;k$Ds%>o$>o$>o$-r$1s$|s$V>$='$g>${e%{e%w,$w,$g>$g>$g>$g>$g>$g>$g>$.9@Ma$,m$z6@z6@z6@K2&Na$Na$zb$Ao$Ao$Ao$Gt$Gt$cs$cs$&w$&w$&w$&w$&w$&w$&w$&w$#-&#-&&w$&w$&w$&w$#-&yV#0X#]]+^]+^]+^]+^]+=/+=/+=Z#=Z#=Z#=Z## $# $'$D`#D`#YA#9)$9)$hh#hh#gh#yb#pe#pe#pe#c&@gY#H6@*9@*9@)~#)~#,'$,'$,'$,'$,'$)~#*9@*9@H6@H6@K,@K,@ N+ N+tI+tI+Gt+nI+{P+qI+jg@8i@kg@Kf%Lf%V5%,$$>$$>$$Dy#Dy#ic#On#5=@u=@p;@(t#7X+eh#Aq@Aq@#9@P,@L@@0$@0$@J@@e^@_w+my+_w+_w+/w+/w+>2+f[+f[+f[+f[+__+G$+__+rd+rd+c~@lK@R^@R^@bw+ik+*E#Q2@N@@UN#Je@_c*XI+-p*W @W @nx*ox*Vx*Kv%fl*Wx*MG%'t*&a*Xx*Yx*Zx*`x*OW#67+ y*N~& H$.y*b/ x2%a:@OJ.l`. F./{ /{ Kh+7P.Kh+T_+$(+T_+G|@$(+$(+$(+$(+$(+$(+$(+$(+Ea+Ea+Ea+xc+xc+Ea+Ea+Ea+$(+$(+$(+$(+$(+$(+$(+*$@'W+3]&3]&3]&3]&3]&3]&3]&@g%]1%Fc%O4%3]&`E&`E&B#@|m.T_+$(+xc+Ea+]! ]! {! Ea+Ea+Ea+xc+$(+T_+T_+T_+$(+$(+$(+$(+$(+$(+$(+$(+xc+Ea+5A.Ea+T_+G|@T_+$(+}f.}f.}f.}f.}f.}f.}f.}f.l7 l7 }f.}f.}f.}f.l7 l7 $(+$(+$(+$(+$(+$(+$(+$(+xc+$(+$(+T_+T_+G|@G|@G|@G|@T_+T_+$(+xc+xc+Ea+Ea+Ea+Ea+Ea+xc+xc+$(+T_+T_+Ea+Ea+Ea+Ea+Ea+Ea+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+}f.l7 NM+ko.ko.NM+l7 }f.bH@bH@bH@bH@bH@bH@bH@}f.ks@`b@`b@ls@ls@`b@`b@`b@`b@`b@qK.qK.qK.F=+F=+2^ bH@T_+q9+$(+q9+$(+dl.T_+)> Ea+q9+T_+Ai.T_+q9+xc+xc+$(+$(+$(+xc+xc+xc+$(+G|@G|@T_+$(+Ea+5A.", "&) &) &) &) &) &) &) |% |% $% $% $% &) &) 4% 5% j% j% j% 5% 5% 5% 5% 0' $% 5! 5! 2{ 3{ ,;.+..2{ 2{ 2{ 2{ 2{ 2{ 2{ 2{ 5! 3{ d= 3{ 2{ 5! 2{ @ t% U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% .* .* 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% v% f% 5% v% I> I> f% 4% 5% 5% f% v% v% f% 5% Q_ Q_ 6[ o^ o^ -^ -^ -^ -^ -^ -^ -^ -^ -^ -^ -^ {2 =^ ' .0Y+0Y+0Y+0Y+!W+!W+0Y+0Y+0Y+0Y+!W+!W+!W+!W+.^ .^ .^ .^ .^ .^ .^ .^ .^ .^ .^ .^ .^ .^ .^ .^ .* * fd fd fd fd * .* fd fd fd fd fd fd fd fd w4.w4.w4.w4.w4.w4.w4.w4.I> I> I> I> I> I> I> I> I> I> &5 I> &5 I> &5 I> &5 I> &5 I> &5 I> &5 I> si si si si w4.w4.w4.w4.6v@6v@6g*6g*6g*6g*zX&6g*6v@w4.a, a, 8H.8H.8H.8H.a, a, a, a, a, a, a, a, 8H.8H.a, a, a, w4.w4.w4.w4.fL.fL.fL.I> v% v% v% 6% i% PI.$9.6!.6,%0- 3!.ze+}].fg+3t !p*Pe*(9*+k Y_+Y_+09.)1%dk*_t*qt*+y*>z%i4*qW#D,@&k@]A#M{@Yf%+h+dH#dH#dH#||+||+ *+ *+dH#||+||+||+ *+ *+ *+XX.XX..*+4[%_-+.*+W,@_-+D#$=7$=7$=7$Vk$Vk$CM#CM#CM#bE$dD$Fx$A+%CM#Vk$Zz$Gx$/v$/v$/v${m$ln$]m$]m$]m$-c$-c$_a$_a$_a$@d$,p$,p$_8$_8$_8$_8$5($5($5($hX+hX+7V@7V@7V@7V@7V@7V@7V@BO@BO@BO@BO@BO@BO@BO@fX@}V+}V+3G+3G+3G+3G+:P+:P+Q,+Q,+2T+Q,+lX+3 @f^@3]+X.@;K@;K@;K@;K@;K@;K@;K@2 @2 @YK+>K@>K@YK+2 @R)@mq@9=@9=@9=@^K@^K@cB@H@@8G+8G+2 @2 @5&@5&@4G+4G+:P+Q,+Q,+#J[#lq%Yx$@y*O;+7i+#y*^n%V4$]n%dp+wr+y@@WA+_T+}G+qD+lc#1=$ ;$wB#Vy#w.$s=$gs%H_$%G#-5#W7#Y7#9w#8w#hw*$y*YY#2x*so#fo#%y*&y**y*=y*-y*;y*>y*,y*n8#'y*)y*!y*~y*{y*]y*^y*;v*!C#^C#/y*(y*_y*Qx*:y*f+:i#oB#.}#Nb+xp+g~+ED+ED+_w+_w+ny+O)@mq@mq@6$@6$@G@@G@@Uv#zw$pw$37$47$_8$_8$47$37$37$_8$_8$47$37$37$47$_8$5($/H$GO$GO$-L$GO$1 @W.@cB@mq@4e@=b$XA#D`#NK+re@YH@WY%@-&.~&Ju$wo$wo$vo$Ju$vo$vo$vo$vo$vo$vo$vo$vo$_V$jk%/U$/U$/U$/U$Yk%Yk%%O$%O$$<%lr$Sx*Tx*Tx*;~%sU$*X$YV$ZW$b:%rF$B-%B-%;k$G=%>o$yo$yo$yo$1s$d6$='$='$g>$g>${e%w,$w,$w,$g>$g>$g>$g>$g>$g>$g>$.9@Ma$,m$Ma$Ma$Ma$Ma$yb$yb$Iu$zb$zb$zb$Sp$Sp$Gt$Gt$&w$&w$&w$&w$&w$&w$&w$&w$.~&#-&#-&&w$&w$#-&#-& 7@0X#]]+^]+^]+^]+^]+=/+=/+;/+;/+=Z#=Z## $/+.O$yV#yV#yV#yV#yV#yV#yV# 7@yV#yV#cs$yV# 7@{`#{`#{`#{`#{`#{`#M<@M<@M<@M<@MU#OS#v~@v~@v~@v~@F,@,P+lm+cr+@w+tI+@w+'$:V%>'$>'$>'$D`#C`#C`#gh#gh#gh#4v#pe#pe#Kx#Kx#gY#gY#gY#-_#-_#u!$u!$u!$Nf%Nf%pr$u!$-_#-_#gY#gY#:x@:x@ N+ N+tI+tI+/P+/P+qI+pI+8i@qe@kg@Kf%rg%W5%q=$cc#Dy#By#ic#Cy#t=@4=@oe#o;@7X+:x@fh#<&@<&@<&@=9@a&@L@@0$@e^@e^@_w+_w+_w+(w+/w+/w+f[+f[+I:+I:+__+G$+2V#G$+:f+:f+_/+RA+R^@R^@bw+ik+*E#Q2@N@@UN#Rr+Q{@XI+XI+AL$AL$=X&^x*}y*Kv%fl*Wx*|y*1y*&a*2y*3y*]S+`x*T(@Q[&2)&b)@`d.rq*sS PU+{D w*$OJ.|x.Bj.|m.Kh+7P.Kh+$(+xc+$(+G|@$(+$(+$(+$(+$(+$(+$(+$(+5A.Ea+xc+xc+xc+xc+Ea+5A.$(+$(+$(+$(+$(+$(+$(+*$@'W+3]&3]&3]&3]&3]&3]&3]&@g%]1%#u%3]&`E&`E&TO&{y%|m.T_+$(+xc+xc+Ea+5A.5A.xc+xc+xc+xc+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+xc+5A.Ea+T_+G|@$(+xc+l7 l7 l7 l7 l7 l7 l7 l7 cI+l7 }f.bH@bH@}f.l7 cI+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+$(+$(+$(+$(+xc+xc+xc+Ea+Ea+Ea+xc+$(+T_+Ea+Ea+5A.5A.5A.Ea+xc+$(+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+l7 l7 cI+NM+NM+cI+l7 l7 bH@bH@bH@}f.}f.l7 l7 'U.Zh@`b@ls@ls@ls@ls@`b@qK.`b@`b@`b@`b@`b@`b@qK.Zh@[y+jy.]$@6g+6g+]$@jy.jy.6g+6g+]$@jy.q9+q9+jy.jy.5A.xc+$(+$(+Ea+5A.Ea+$(+T_+G|@G|@$(+5A.]! ", "$% $% $% $% $% $% $% |% |% $% $% $% &) &) 4% 5% j% j% j% 5% 5% 5% 5% 0' $% 5! 5! 2{ 3{ ,;.+..+..+..+..+..+..+..+..+..+..M=.M= M=.,;.+..,;. @ t% U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% .* .* U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% 2% 2% 2% 2% 2% v% f% 5% v% w4.w4.v% %% 4% 5% f% v% v% f% 5% ^{ ^{ L) 6[ 6[ 6[ o^ o^ o^ -^ -^ -^ -^ -^ -^ -^ {2 L2 !W+0Y+0Y+0Y+0Y+' .' .z) z) z) ' .0Y+!W+!W+!W+p: p: p: p: p: p: p: p: -^ -^ -^ -^ -^ -^ -^ -^ .* * fd 5[ 5[ fd * .* fd fd fd fd fd fd fd fd a, a, a, a, a, a, a, a, fL.fL.fL.fL.fL.fL.fL.fL.W_ W_ H{ W_ H{ W_ H{ W_ G{ &5 G{ &5 G{ &5 G{ &5 si si si si w4.w4.w4.w4.6v@6v@6g*6g*6g*6g*zX&6g*4=+fL.w4.w4.w4.a, a, a, a, a, a, a, a, a, a, a, 8H.8H.a, a, a, w4.w4.w4.8H.a, w4.fL.I> f% 5% 5% 1% i% PI.$9.P7.6,%0- 3!.ze+}].fg+[A+Ba ]|.+u%`h Nw%Yt*q2%SB%37*=m$$e*gg*i4*i4*D,@.u*]A#C)@+u*}x*t##7Z.7Z.g^@g^@dH#dH#dH#dH#dH#dH#||+||+ *+ *+XX.XX..*+4[%_-+.*+W,@_-+D#$Vk$Vk$Vk$CM#CM#i%%i%%i%%dD$xC$Ex$A+%Vk$=7$RA$Zz${m${m${m${m$ln$ln$ln$ln$-c$-c$_a$_a$_a$@d$,p$,p$_8$_8$_8$_8$5($5($5($hX+u_%fX@BO@7V@nZ@M+#M+#M+#nZ@nZ@7V@BO@BO@fX@nq@nq@BI+BI+[V+[V+[V+[V+=>+=>++Z#re#; $bA%2{*]u&F:*l5&y7%&c$W_#+B$|f+J[#J[#iB@iB@3z@})#qX+Gz$O]+O]+V##vD@^M#4y*4y+:8+h1&5y*~|&6($*/$0[$d[++5@|$@0y+b$@^G+Nl+fi+oq#Ly#Uy#Vy#w.$^$$/O#+o#%G#%G#W7#Y7#9w#>G#hw*6y*XB#(u*so#io#7y*8y*9y*0y*ay*by*cy*dy*ey*fy*gy*hy*iy*jy*ky*ly*;v*Ar*$a#my*(y*_y*Qx*ny*oy*[y*Bv*||$W%$w0#Uy#'E#}f#2f#3&@t&@(|+g~+ED+ED+_w+_w+ny+t<@mq@mq@6$@G@@G@@DM@BU$zw$b>%37$47$47$47$47$37$e;%c9$_8$47$37$37$47$_8$d9$_H$$K$~]$.@%.@%-L$CU$DO@6&@4e@=b$5L#py*p.$'K$qy* &*ct*`%*|s%:D$_n$YS&ZW&YS&YS&YS&YS&YS&YS&YS&vo$_V$6l$jk%jk%jk%jk%/U$/U$Hn$Xk%Yk%bm$lr$lr$lr$Bi$r6%{`$c;%rF$rF$sh$G=%G=%>o$yo$yo$zo$d6$d6$d6$g>$g>$g>${e%{e%{e%{e%w,$w,$='$='$='$='$='$='$='$*'$Ma$,m$Ma$oB$oB$oB$Hu$Hu$Iu$Iu$Iu$zb$xo$Sp$Sp$Sp$nt$nt$nt$nt$nt$nt$nt$nt$@-&.~&#-&&w$&w$#-&.~&{`#0X#]]+^]+^]+^]+^]+=/+=/+8g$8g$;/+=Z#'$:V%:V%8*$0s#0s#$7@4k#$7@$7@4v#4v#Kx#Kx#Vv#Vv#4L#4L#4L#4L#3L#3L#4N#4N#ry*ry*5N#4N#3L#4L#4L#Vv#Aq@fh#7X+ N+(t#(t#`M+`M+YM+NK+jg@qe@re@kg@Lf%6d%[*$oB#cc#By#zy#1&@sy*'b$|t#-:#eh#fh#:x@:&@:&@tr+b=@=9@a&@L@@e^@J@@(w+(w+(w+(w+/w+:|+f[+I:+I:+I:+2V#'v@7a@2V#c~@c~@c^#K_@R^@R^@bw+ik+*E#Q2@N@@UN#hk++}@r3*r3*A^%A^%Sw*Q}*}y*Kv%fl*ty*uy*vy*wy*Cb$|a&xy*yy*65@8=$$S.&S.zy*OS@+C.8' =] =|$w*$;b.=~@*$@G|@Kh+T_+xc+Ea+xc+$(+$(+$(+$(+$(+$(+$(+$(+$(+5A.Ea+xc+$(+$(+xc+Ea+5A.$(+$(+$(+$(+$(+$(+$(+*$@'W+3]&3]&3]&3]&3]&3]&3]&O4%3]&`E&TO&`E&3]&O4%Y@$|m.$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+xc+xc+xc+xc+$(+$(+$(+$(+$(+$(+$(+$(+G|@$(+Ea+xc+$(+T_+xc+5A.cI+cI+cI+cI+cI+cI+cI+cI+cI+l7 }f.bH@bH@}f.l7 cI+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+$(+xc+xc+Ea+5A.5A.$(+$(+$(+$(+T_+T_+T_+T_+T_+$(+Ea+5A.5A.5A.Ea+xc+Ea+Ea+5A.]! 5A.Ea+$(+T_+5A.5A.5A.5A.5A.5A.5A.5A.NM+cI+l7 l7 l7 l7 cI+NM+}f.}f.}f.l7 l7 cI+cI+ks@Zh@`b@ls@M'$M'$ls@`b@qK.ls@ls@ls@ls@ls@ls@ls@'U.[y+^x#Fu#.d+.d+Fu#^x#QL+Fu#Fu#Fu#Fu#Fu#^x#QL+q9+]! Ea+$(+xc+]! {! 5A.$(+{! 5A.xc+Ea+]! {! ", "|% |% |% |% |% |% |% |% |% $% $% $% &) &) &) 5% j% j% j% 5% 5% 5% 5% 0' $% ~_ ~_ 2{ 3{ 2{ 5! 5! 5! +..5! +..5! +..5! +..3{ M= 3{ ,;.5! ,;.d= t% U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ 2% 2% 2% .* .* m@ m@ m@ m@ m@ m@ m@ m@ 2% 2% 2% 2% 2% 2% 2% 2% n3 ~_ &_ n3 {_ {_ v% %% 4% 5% f% I> I> x% 5% ^{ &- [! L) L) 6[ 6[ 6[ o^ -^ -^ -^ -^ -^ -^ -^ -^ *L *L L2 {2 {2 =^ _& _& c& c& d& _& =^ {2 L2 *L og og og og og og og og -^ -^ -^ -^ -^ -^ -^ -^ 2% * fd 5[ 5[ fd * 2% fd fd fd fd fd fd fd ed a, a, a, a, a, a, a, a, w4.w4.w4.w4.w4.w4.w4.{_ 24 24 24 24 24 24 24 24 G{ G{ G{ G{ G{ G{ G{ G{ ac si si si w4.w4.w4.w4.6v@6v@6v@6v@6g*6g*6g*6g*QB@I> fL.fL.w4.w4.w4.a, a, a, a, a, a, a, a, a, 8H.8H.a, a, a, w4.w4.w4.cl+8H.a, fL.v% f% 4% 4% 1% i% PI.$9.P7.6,%0- 3!. d+}].}w*m! CF+]|.>} *h.Ay*3}%vw$g:@37*fj*+y*Cf*i4*.x*&k@]A#C)@+u*+u*}x*sc@1p#hm@hm@hm@7_#7_#7_#g^@g^@dH#dH#||+ *+ *+XX.S)@,>+4[%_-+.*+W,@_-+D#$CM#CM#CM#i%%i%%A+%Gx$A+%A+%Ex$Ex$A+%Vk$D#$L[#RA$jm$jm$jm$ln$CO#CO#CO#CO#-c$-c$_a$_a$_a$@d$,p$,p$_8$_8$_8$_8$5($5($5($hX+|T+nq@fX@7V@nZ@M+#mZ@~^#mZ@M+#nZ@7V@2R+]-+->+->+BI+BI+[V+[V+[V+[V+=>+=>+x)+Z#=n#8-%*>$U@&6v%k!&>a$l5&y7%&c$B%%@ +@*+^M#J[#J[#iB@iB@=1@X,@X,@Y_@8G#MX.Nw#C>#*c@By*Cy*l=#=v@aK@%:#Dy*Ey*=4+|$@ep+Ll+U_@s=@v&@Xl+hf#tB#vB#{w#w.$0,$.(%=o#F[%[e%;o#Z7#a@$Tt#_E#T`#Fy*)I#3x*Gy*Hy*Iy*Jy*Ky*Ly*My*Ny*Oy*Py*Qy*Ry*Sy*Ty*Uy*Vy*ly*jx*Hi#;8#Wy*Xy*Yy*Qx*ny*oy*oy*Zy*3l#xc#dt#NP#tq# K#_i#bc#{/+Q0+fD+|R+tr+0$@e^@Z.@t<@9=@mq@6&@G@@DM@&n%W~$jq#I$+pw$pw$d8$d8$pw$pw$b>%d9$_8$47$e;%e;%47$_8$d9$&%G=%$d6$g>$(;$g>${e%{e%{e%{e%{e%{e%{e%{e%='$='$='$='$='$='$='$*'$Ma$@1%oB$oB$oB$oB$Hu$Hu$4c$Iu$Iu$Iu$xo$xo$Sp$Sp$7S$7S$nt$nt$nt$nt$nt$nt$@-&.~&#-&&w$&w$#-&s;&WY%0X#]]+0X#^]+0X#^]+_a@=/+Ld$/]+5l$;/+@F$>/+6l$Si$cs$cs$cs$cs$cs$cs$cs$cs$ 7@yV#cs$Gt$cs$ 7@qR$EZ${`#{`#{`#{`#M<@M<@M<@>:@>:@OS#v~@29@29@v~@F,@T;@mI+cr+@w+(t#tI+'$:V%8*$0s#49@.5@.5@.5@59@4v#4v#Kx#Kx#Vv#Vv#Vv#Vv#4L#4L#gY#-_#-_#u!$u!$T5*Nf%pr$u!$-_#4L#Vv#Vv#tS$3k#3P#uy#uy#1N#1N#Wv#=,$kh%NK+8i@4k@4k@re@te@WF#3&@2&@2$@Cy#'b$3=@C+%Y+$Y+$Aq@fh#:x@|R+|R+0$@Kt%a=@a&@K@@e^@J@@&N+&N+(w+(w+:|+:|+:|+I:+e[+I:+'v@7a@S{@'v@_/+_/+lK@K_@R^@R^@bw+ik+*E#Q2@N@@UN#c!@;c@ z* z*j_&A^%]w*.z*e=&Kv%fl*ty*+z*vy*@z*oF##z*%P&$z*%z*IO&UU JC.&z*+}.L8@2&$l3 X@$2&$8H._e.y$$T_+G|@T_+Ea+5A.Ea+$(+$(+$(+$(+$(+$(+$(+$(+$(+]! Ea+xc+$(+$(+xc+Ea+]! $(+$(+$(+$(+$(+$(+$(+*$@'W+3]&3]&3]&3]&3]&3]&3]&#d+#d+<:*#d+TO&O4%Fc%PF+*$@$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+$(+xc+Ea+Ea+Ea+$(+$(+$(+$(+$(+$(+$(+$(+Kh+T_+xc+xc+$(+$(+Ea+]! NM+NM+NM+NM+NM+NM+NM+NM+cI+l7 }f.bH@bH@}f.l7 cI+T_+T_+T_+T_+T_+T_+T_+T_+G|@T_+$(+xc+5A.]! {! {! xc+xc+$(+$(+T_+G|@G|@Kh+G|@T_+xc+5A.]! 5A.5A.Ea+Ea+Ea+5A.]! 5A.Ea+$(+G|@5A.5A.5A.5A.5A.5A.5A.5A.ko.NM+l7 }f.}f.l7 NM+ko.}f.}f.l7 l7 cI+NM+NM+2^ 2^ `b@=; M'$xM+ls@hS.F=+=; ls@=; ls@xM+M'$xM+r4@,W+QL+^x#Fu#Fu#^x#QL+(w.^x#Fu#a(+a(+a(+Fu#QL+(w.Yt.5A.$(+Ea+{! be+]! xc+pj w8.{! {! be+f!+", "2b 2b ;_ -_ -_ =_ =_ ;_ -_ =_ =_ =_ ;_ he ke *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ *_ g% 0c 0c A^.A^.=_ =_ }4 =_ }4 =_ }4 =_ }4 =_ }4 =_ }4 =_ }4 &_ Y_ * fd .* m@ {@ m@ 2% .* .* .* .* .* .* .* .* 2% 2% 2% 2% 2% 2% 2% 2% {@ {@ {@ m@ U@ U@ 2% 2% -5 p3 2{ 2{ 5! 5! &_ |% f% f% x% x% x% l#@x% b/ y% 2% 2% .* .* * * * * * * * * * * * o^ o^ o^ o^ o^ o^ o^ o^ -^ -^ -^ -^ -^ -^ -^ -^ -^ -^ -^ -^ -^ -^ -^ -^ .^ .^ .^ .^ .^ .^ .^ .^ fd .* U@ 2% * fd .* 2% * * * * * * * =5 w4.6v@6v@6v@6v@6v@6v@6v@4=+af.R_ g% 4=+6v@QB@=_ 2{ p3 -5 bl+bl+-5 p3 ,;.;5 ;5 ;5 ;5 ;5 ;5 ;5 24 &5 I> I> I> I> I> I> I> fL.w4.a, cl+Tp*@[+6v@4=+fL.a, cl+8H.fL.I> w4.cl+v% I> fL.w4.w4.fL.I> v% {_ {_ {_ {_ {_ {_ {_ {_ &5 &5 &5 n3 n3 ~_ ~_ f% s3.6% VW.$9.5!.U@.kh `s@zh.}].z4&I-@N0 /8 Nu+P0**z*%^%_D%VB%=z*_t*6h*x2*ut*.x*^=@-z*Aw*v'%;z*>z*}x*}x#_K@U###@##@#*1@Tb+m~+m~+6c#> $3V+3V+I3$> $6)#5)#5Z.n~+B%%+*+&c$&c$&c$Fs% p$/9$pr%)]$^q$^v$ p$ p$/9$/9$pr%pr%(a$(a$,z*,z*p4&8k&*u$*u$*u$=c$-c$-c$-c$-c$Dj$Dj$Dj$Dj$,p$,p$c9$c9$c9$c9$d9$vp#*6$oZ@oZ@oZ@BO@BO@BO@BO@2R+2R+2R+2R+4G+4G+4G+4G+BI+BI+[V+[V+[V+[V+=>+=>+2T+T@x)+ZK+Q)@lX+x)+x)+@N+ib#{-+=>+:P+=>+{-+zI+zI+zI+=>+=>+:P+:P+:P+>T@>T@>T@x)+x)+x)++=>+=>+zI+zI+zI+{-+{-+{-+Q,+Q,+Q,+B+ny+_w+_w+ny+0=@qt$4 @4 @4 @4 @4 @4 @4 @4 @my+Z#=n#[$&jx&m`%$6$@6$*u$p4&4v$)]$/a$k %@ +|f+Ub+=1@g&@g&@B1#B1#V##V##MX.vD@^M#J5$6u%Yx$'z*f2$CD@Q_@P[$V[#)z*[(%Q0+)B+[T+nD+Nl+ir+fi+6+C7#I`#w0#)$$Wn#l1$-o#{D%!z*Kc#~z*9v*{z*@r#]z*^z*/z*(z*_z*:z*&>M$ K$-I$S!$k`%S!$-I$c8$im$d9$lF$kF$kF$jF$}{#BM@~K@kq#8V@mb#-_#Lx#$7@J$*4k@Z4@[!$Et$='$d6$}b$Et$2r$:n$:n$vo$vo$vo$vo$vo$;o$-k$sV#sV#(]+rh$mE$mE$}5%}5%,/+kK$%.%%.%kK$,/+mE$sF$.h%>k$.h%-y$Q)$$+9@Ql$+9@}7&C&%z|$_D$Ql$(;$_D$t;&z|$t;&_{&_D$_D$_D$h>$h>$(;$.9@oB$QO@]8%]8%]8%y6@0j$0j$uk$uk$uk$)x$Sl$Sl$=3@=3@Sl$Sl$Sp$Sp$Sp$Sp$Ft$Ft$)r$)r$|s%ZW&lp%lp%iz*Z%*{`#`6@{`#`6@{`#`6@{`#`6@Gt$=3@$w$Ld$$w$Ld$$w$Gt$xo$Ao$>q$4}@Y4@fY#19@uQ$21@Y4@M<@Y4@4}@21@4}@M<@0X#11@;:@K<@hc@:a@0x@/a@v^@$!@t~@$!@w=@/V+:T+ip+,P+!G+nI+@w+@w+}R+(P+K,@PK+Kl+}R+tI+tI+`M+`M+Wv#0s#49@Ip# q+ q+s9#4k#gh#ih#LF@M)@L,@yb#s<@c&@c&@4L#4L#gY#H6@*9@P,@P,@Z.@0=@=9@a&@*9@H6@G6@Kx#Kx#`M+@p$@p$u=@^G+[G+rX@0]%[G+rX@jV@[+&1@QA+3^@YO@rt$rt$`'%jz*Sw*^x*kz*,i*lz*mz*nz*vl*oz*y2&:W+HJ+{1+pz*=V&qz*rq*H{.G' EI#N}.6z+jb%N}.ME+0@@ w4.cl+I> fL.w4.a, a, w4.fL.I> {_ {_ {_ {_ {_ {_ {_ {_ {_ {_ W_ W_ &5 &5 &5 v% af.6% VW.l#@5!.4K@U@.`$+Yn }].}w*]l+N0 N<.>} PC.wu.Qm*gi%}l%=z*sz*p6*.2*tt*i4*^=@-z*tz*C,@;z*&i@B`#uz*T8@A2@2W.2W.#@#*1@_-+_-+6c#> $3V+3V+Y(%9T+6)#5)#4W.D)+B%%+*+&c$&c$&c$Fs% p$/9$4v$(a$^q$7l* p$ p$/9$/9$pr%pr%(a$(a$p4&p4&*u$*u$*u$8v$8v$=c$Sj$S5+S5+S5+_a$_a$_a$_a$,p$,p$c9$c9$c9$c9$d9$vp#*6$oZ@oZ@oZ@BO@BO@BO@BO@2R+2R+4G+4G+4G+4G+YK+4G+[V+BI+[V+[V+[V+[V+=>+=>+Q,+x)+>T@>T@lX+ZK+lX+>T@x)+@N+ib#{-+=>+:P+=>+{-+{-+{-+zI+zI+=>+=>+=>+=>+{-+{-+{-+zI+zI+=>+=>+=>+=>+=>+=>+zI+zI+{-+{-+{-+Q,+Q,+f+>6+C7#w0#w0#xc#Wn#||$-o#!z*-f%~z*xz*cz*yz*U`#zz*Az*Bz*2E#Cz*$w*Dz*Ez*Fz*Gz*N`@dU@Hz*Iz*Jz*Kz*Lz*Mz*Nz*Oz*Pz*BV$J0#tt#J0#Mu*Qz*ez*kx*L$_H$(H$V~$;M$ K$>J$S!$k`%S!$-I$c8$im$d9$5($5($5($_P+u_%BM@~K@^^#8$@0&@*9@pe#.5@Ht+[R+Z4@41@7)$-'$V>$V>$Et$E5&:n$:n$vo$vo$vo$vo$vo$;o$6l$(]+(]+(]+(]+rh$rh$rh$rh$(]+sV#>/+>/+sV#(]+_]+G=%>&%>&%>&%zo$zo$d6$d6$g>$g>$+9@F5&V=$V=$`0@%[&t;&h>$Ql$Ql$h>$t;&t;&_{&_D$_D$h>$h>$h>$(;$(;$.9@oB$QO@]8%]8%]8%y6@0j$0j$uk$uk$uk$)x$Sl$Sl$=3@=3@=3@=3@=3@=3@Sp$Sp$Ft$Ft$)r$)r$|s%ZW&Sz*Sz*Sz*Z%*{x$yV#yV#yV#yV#yV#yV#yV#Gt$Gt$Gt$Gt$Gt$Gt$Gt$Gt$Ao$>q$21@4}@Y4@M<@fY#19@21@Y4@M<@Y4@4}@21@4}@M<@0X#11@;:@K<@L<@hc@0x@0x@u~@$!@t~@$!@w=@/V+:T+ip+'P+er+nI+@w+[+&1@QA+~R@YO@rt$rt$`'%{b#=C%^x* jy.Ai.1m.dl.jy.jy.q9+Ai.dl.q9+jy.jy.q9+dl.Ai.'W+'W+'W+'W+'W+'W+'W+'W+3&$3&$3&$3&$3&$3&$3&$6j+*$@$(+$(+$(+xc+xc+xc+xc+G|@T_+$(+xc+$(+T_+Kh+7P.T_+T_+T_+T_+T_+$(+$(+$(+xc+xc+xc+xc+xc+xc+xc+Ea+}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.bH@bH@bH@}f.}f.l7 l7 l7 Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.5A.5A.5A.5A.5A.5A.5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+$(+$(+xc+xc+xc+xc+cI+cI+NM+NM+ko.ko.ko.13+cI+l7 }f.bH@aH@bH@}f.'U.Pj+7x.7x.5H.hy.hy.hy.!:+7x.5H.5H.!:+=0+pz.JA.TY.]v.]v.]v.rz*rz*rz*rz*rz*Hb$Hb$xe+rz*rz*xe+Hb$Hb$^x#^x#]$@]$@]$@]$@Ea+Ea+v]#h]@M8@ZW+]%@OU+", "2b ;_ ;_ ;_ -_ -_ -_ he 2b ;_ -_ -_ -_ ;_ ;_ *_ *_ *_ *_ *_ *_ *_ *_ l` -H.R_ *_ g% af.QB@QB@=_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ &_ T$ U@ 2% U@ {@ l& {@ m@ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ U@ 5[ 5[ 5[ 5[ 5[ fd fd O) +..,;.M=.,;.4{ G{ n3 &_ f% f% x% x% x% x% l#@b/ y% 2% 2% .* .* * * * * * * * * * * * * * * * * * * * .* .* .* .* .* .* .* .* o^ o^ o^ o^ o^ o^ o^ o^ .^ .^ .^ .^ .^ .^ .^ .^ fd .* 2% .* fd fd * 2% .* .* .* .* .* .* .* o3 I> QB@QB@QB@QB@QB@QB@QB@4=+af.g% af.QB@4=+QB@0c 5! 4{ H{ 24 24 H{ 4{ 5! 24 24 24 24 24 24 24 24 ;b.a, a, a, a, a, a, a, w4.w4.a, 8H.8H.a, w4.w4.fL.a, 8H.8H.w4.fL.w4.8H.w4.w4.a, 8H.8H.a, w4.w4.{_ {_ {_ {_ {_ {_ {_ {_ ;b.;b.{_ {_ W_ W_ W_ I> af.1% VW.l#@$9.6,%6,%3!.0>$(= Ks*Yz*CF+N<.>} e*#B |w*Zz*`z*=z*sz*p6*27@st*i4* A*-z*tz*.A*;z*&i@ut*vt*|W.1W.2W.IL#hB@hB@_-+_-+6c#> $3V+3V+Y(%9T+6)#5)#4W.D)+B%%+*+&c$&c$&c$Fs% p$/9$4v$(a$^q$7l*/9$/9$/9$/9$pr%pr%4v$4v$&u$&u$8v$8v$}0$}0$}0$>b$=k$y4#y4#y4#@d$@d$@d$@d$,p$,p$c9$c9$c9$c9$d9$vp#*6$oZ@oZ@oZ@BO@BO@BO@BO@2R+2R+4G+4G+4G+4G+YK+4G+[V+BI+[V+[V+[V+[V+=>+=>+T@3]+hX@9G+lX+9G+hX@x)+@N+ib#{-+=>+:P+=>+{-+@N+@N+{-+{-+{-+zI+zI+zI+{-+{-+zI+zI+=>+=>+=>+:P+:P+=>+=>+=>+zI+zI+{-+{-+Q,++_w+(w+(w+_w+Z.@0&@4 @4 @4 @4 @4 @4 @4 @4 @ny+ny+ny+my+my+_w+_w+e^@tr+FD+z@@fD+(P+OK+@w+~P+dr+sI+pI+pI+8i@qe@4k@]V+69@[T+:V+ur+I6@sp+|]+tD+}P+W&+rd+re#; $*>$+A*2{*c!*K#$7v$&u$4v$sD$/a$N@%N@%R2@R2@=1@f$@f$@8G#8G#V##Ub+J[#^M#@A*@A*cr#'z*U=+{0%KK+VM+X=+#A*G/%Qn+}T+^G+u&@u&@/+@/+@df#>f+>6+C7#w0#w0#xc#Wn#||$-o#Wt%Z7#Mu*$A*yz*yz*Lx*zz*%A*&A**A*=A*]g#-A*;A*>A*,A*sY@'A*)A*!A*~A*{A*]A*^A*/A*(A*'w*V7#Kq#ot#)5#9v*_A*{x*lx*)w*:A*gz*S{$F~$p&%!l#|i#i0#q7#a[+F:+Nl+69@nI+@w+tI+K,@gY#P,@mb#9$@8&@cB@6$@W.@~K@FO$Nm&4:%{<%-M$>L$>L$(H$(H$>J$>J$g>&g>&S!$!H$)H$)H$5($5($5($d8$_P+_P+BM@~K@8G+mq@a=@*9@L,@.q+km+:R+@r%.7@Z4@[!$6)$W>$|s$|s$:n$:n$vo$vo$vo$vo$vo$;o$OG%rh$(]+(]+(]+(]+sV#sV#(]+sV#>/+>/+>/+>/+sV#vL$tV#Rl$Rl$Rl$Iu$Iu$|s$|s$V>$V>$Kp$Kp$gp%V=$%[&I*$_D$(;$f|&f|&h>$_{&_{&h>$h>$h>$h>$(;$(;$Ql$Ql$*'$oB$QO@]8%]8%]8%y6@0j$0j$uk$uk$uk$)x$Sl$Sl$=3@=3@0X#0X#io@io@Gt$Gt$Ft$Ft$)r$)r$ZW&ZW&[+&1@QA+~R@{'#}A*}A*G]#{b#=C%^x*|A*1A*2A*oK$3A*^I%4A*E4&B0%Ac+o!+j#+=V&sB.rq*,X.z<*+X+6z+6z+Gu+'C+X`+KL$Ui.7P.5A.5A.Kh+oh.T_+]! $(+$(+$(+$(+$(+$(+$(+$(+,v.]$@1m.8`#8Y+Ai.q9+q9+dl.dl.q9+jy.jy.q9+dl.dl.3&$3&$3&$3&$3&$3&$3&$3&$'W+'W+'W+'W+'W+'W+'W+y$$y$$xc+xc+xc+$(+$(+$(+$(+$(+$(+xc+xc+xc+$(+G|@G|@Kh+G|@G|@T_+$(+$(+xc+xc+G|@G|@T_+T_+$(+xc+Ea+Ea+}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.bH@bH@bH@bH@bH@bH@bH@bH@}f.}f.}f.l7 l7 cI+cI+cI+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+xc+xc+xc+$(+$(+$(+$(+}f.l7 l7 cI+cI+NM+NM+ko.cI+l7 l7 }f.l7 cI+NM+Zh@Pj+hS.hS.=; =; =; xM+xM+=; =; xM+xM+,M+,M+b%@=0+y'@Hb$Hb$Hb$Hb$xe+xe+xe+xe+xe+rz*]v.]v.rz*xe+xe+QL+QL+jy.jy.jy.jy.xc+xc+h]@h]@h]@h]@PS@q(#", ";_ ;_ ;_ ;_ ;_ -_ -_ he 2b 2b ;_ -_ -_ =_ =_ *_ *_ *_ *_ *_ *_ *_ *_ m` l` -H.R_ *_ af.QB@QB@=_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ &_ #% m@ U@ m@ l& k+ {@ m@ m@ m@ m@ m@ m@ m@ m@ m@ U@ U@ U@ U@ U@ U@ U@ U@ * * .* .* 2% U@ U@ U@ ,;.M=.M= M=.4{ H{ &5 ~_ f% f% x% x% x% x% l#@b/ y% 2% 2% .* .* * * * * * * * * * * * * * * * * * * * .* .* .* .* .* .* .* .* 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ .^ .^ .^ .^ .^ .^ .^ .^ fd * 2% .* fd 5[ * .* .* .* .* .* .* .* .* o3 v% af.af.af.af.af.af.af.QB@QB@af.QB@QB@4=+QB@QB@4{ G{ H{ 24 24 H{ G{ 4{ 24 24 24 24 24 24 24 {_ {_ w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, a, a, a, w4.w4.a, a, a, w4.w4.a, a, w4.w4.w4.a, a, w4.w4.w4.{_ {_ {_ {_ {_ {_ {_ {_ {_ {_ {_ W_ W_ &5 &5 I> af.1% 9, l#@l#@V[&V[&~<*a>$z* ([ Dl tx*/8 gv Z< #B |w*Zz*`z*=z*sz*L5*Q0* u*i4* A*-z*4W&;z*tz*&i@ut*B`#uz*T8@U##IL#e$@f&@_-+_-+6c#> $3V+3V+Y(%9T+6)#5)#4W.D)+B%%+*+&c$&c$&c$Fs% p$/9$4v$(a$^q$7l*/9$/9$/9$/9$pr%pr%4v$4v$7v$7v$8v$}0$}0$K$+K$+Sj$T4$'M$'M$'M$,L$,L$,L$,L$&6$&6$47$47$47$47$d8$_P+*6$oZ@oZ@oZ@BO@BO@BO@BO@2R+2R+4G+4G+4G+4G+YK+4G+[V+BI+[V+[V+[V+[V+=>+=>+x)+hX@3]+3]+3 @9G+3 @3]+x)+@N+ib#{-+=>+:P+=>+{-+ib#ib#@N+@N+{-+{-+{-+zI+zI+zI+zI+=>+=>+=>+:P+:P+:P+:P+=>+=>+=>+zI+zI+zI++;B+_w+(w+(w+_w+K@@Z.@4 @4 @4 @4 @4 @4 @4 @4 @4 @ny+ny+my+_w+(w+&N+6T+tr+FD+fD+fD+(P+K,@}R+~P+#w+#w+oI+rI+ZM@ZM@%7@[R+69@^G+:V+}T+Tt+sp+Tn+uD+A@@Hl+'T@,2+T!$..&_$&}H$*W#po%7v$4v$)]$sD$/a$ns$4w+4w+R2@})#=1@V##V##MX.h/+h/+J[#J[#@A*C1#g1&#E+1^@Wv+Z@@|~+0[$Qb+R%$qe#}T+}G+oD+u&@3&@/+@:i# G#>6+C7#w0#w0#xc#Wn#||$=5#LR#T0#5A*Mu*'w*{z*^y*6A*7A*8A**A*9A*]g#0A*aA*bA*cA*|z*dA*eA*fA*gA*hA*iA*jA*kA*lA*mA*P0#;o#qt#Lq#R0#nA*oA*Lc#Bv*pA*qA*F~$u0#A7#LL#i0#:i#h0#]|+(+@qD+69@dr+nI+@w+OK+gY#H6@mb#4e@9$@^K@G@@W.@W.@~K@}I&Nm&Om&{<%-M$>L$_H$_H$;M$g>&g>&>J$-I$!H$!H$)H$5($5($d8$d8$_P+_P+XK+1 @w;@E+$qt$H6@LF@Zp+Z5+G,@x)&@r%@r%.7@[!$6)$|s$}b$:n$:n$vo$vo$vo$vo$vo$;o$OG%rh$rh$(]+sV#>/+>/+>/+>/+>/+>/+>/+>/+>/+>/+xd%AM$Sl$Sl$Rl$zb$zb$|s$|s$W>$W>$*r$Kp$gp%}7&%[&I*$h>$Ql$fo%f|&h>$_D$h>$(;$h>$h>$(;$(;$Ql$Ql$Ql$A6@oB$QO@]8%]8%]8%y6@0j$0j$uk$uk$uk$)x$Sl$Sl$=3@=3@11@11@11@0X#cs$Gt$Ft$Ft$ v$ v$ZW&ZW&[+&1@QA+XO@{'#}A*}A*G]#{b#=C%ox*rA*1A*;&&oK$sA*tA*ws#z}*B0%Ac+uA*j#+7W&4[ rq*H{.)w$$x+6z+ET&(W%vA*Nc&KL$ur&y4&T_+$(+T_+G|@$(+5A.$(+$(+$(+$(+$(+$(+$(+$(+Yt.]$@Ai.1m.1m.Ai.Ai.8Y+q9+q9+q9+jy.jy.q9+q9+q9+3&$3&$3&$3&$3&$3&$3&$3&$'W+'W+'W+'W+'W+'W+'W+y$$6j+Ea+Ea+xc+$(+T_+T_+T_+xc+xc+xc+xc+xc+$(+T_+T_+7P.Kh+G|@T_+$(+xc+Ea+Ea+G|@G|@G|@T_+T_+$(+$(+xc+}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.bH@bH@bH@bH@bH@bH@bH@bH@l7 l7 l7 cI+cI+NM+NM+NM+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+$(+T_+T_+T_+l7 l7 l7 l7 l7 }f.}f.}f.l7 l7 cI+cI+NM+ko.13+13+Pj+hS.hS.hS.=; =; =; =; *; *; *; *; *; *; *; ,8+g*.ye+T/@T/@y'@Hb$Hb$Hb$rz*rz*]v.SF.SF.]v.rz*rz*(w.(w.q9+q9+q9+q9+$(+$(+h]@h]@h]@v]#9&+x}*", "-_ ;_ ;_ ;_ ;_ ;_ ;_ 2b 2b 2b ;_ ;_ -_ =_ =_ *_ *_ *_ *_ *_ *_ *_ *_ l` l` -H.R_ *_ g% af.af.=_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ &_ !% {@ U@ m@ l& l& {@ U@ m@ m@ m@ m@ m@ m@ m@ m@ m@ m@ m@ m@ m@ m@ m@ m@ .* 2% 2% U@ m@ m@ {@ {@ ,;.M=.d= 3{ 4{ H{ &5 ~_ f% f% f% f% x% x% x% b/ y% 2% 2% .* .* * * * * * * * * * * * * * * * * * * * .* .* .* .* .* .* .* .* o^ o^ o^ o^ o^ o^ o^ o^ .^ .^ .^ .^ .^ .^ .^ .^ 5[ * .* * fd 5[ fd .* .* .* .* .* .* .* .* o3 v% af.af.af.af.af.af.af.QB@4=+4=+4=+QB@QB@QB@4=+G{ G{ H{ H{ H{ H{ G{ G{ 24 24 24 24 24 24 24 {_ W_ fL.fL.fL.fL.fL.fL.fL.a, a, a, w4.w4.a, a, a, a, a, w4.w4.a, a, a, w4.fL.fL.fL.I> I> fL.fL.fL.{_ {_ {_ {_ {_ {_ {_ {_ W_ &5 &5 &5 n3 n3 ~_ f% af.1% 9, $9.$9.V[&ni al+Yn X* wA*ev i|%Tc `h ;~.wu.|w*Zz*}l%=z*sz*p6*27@i4*i4*xA*yA*=m@4W&4W&4W&B`#B`#uz*|W.O+#IL#f&@d=@_-+_-+6c#> $3V+3V+Y(%9T+6)#5)#4W.D)+B%%+*+&c$&c$&c$Fs% p$/9$4v$(a$^q$7l*pr%pr%pr%pr%/9$/9$^q$^q$7v$7v$8v$}0$}0$K$+K$+Sj$T4$'M$,L$,L$,L$,L$qw$qw$e;%e;%e;%e;%b>%b>%b>%|T+*6$oZ@oZ@oZ@BO@BO@BO@BO@2R+2R+4G+4G+4G+4G+YK+4G+[V+BI+[V+[V+[V+[V+=>+=>+x)+hX@3]+3]+3 @9G+3 @3]+x)+@N+ib#{-+=>+:P+=>+{-+ib#ib#@N+@N+{-+{-+{-+zI+zI+zI+=>+=>+=>+:P+:P+:P+:P+:P+:P+=>+=>+=>+zI+zI+f+>6+C7#w0#w0#xc#Wn#||$=5#(e%+8#BA*CA*DA*EA*ly*FA*GA*HA*IA*JA*KA*LA*MA*NA*OA*PA*QA*RA*SA*TA*UA*VA*WA*XA*YA*ZA*`A*;o#qt#Lq#Q7#K0#Oc#0v*Cv*Wn#)$$I`#I`#e8+Ly#:i#Tn#oB#/+@.}#[G+69@69@[T+L$_H$;M$;M$>J$>J$ K$ K$!H$!H$d8$d8$d8$d8$_P+_P+5Z+V.@!K@r$%Ku$a$@$Ql$h>$h>$h>$(;$(;$Ql$Ql$*'$oB$@1%Ma$Ma$Ma$z6@7j$7j$zb$zb$zb$Ao$Sp$Sp$Gt$Gt$11@11@0X#0X#cs$Gt$)r$)r${x${x$ZW&ZW&[+&1@QA+XO@rt$%x@%x@=`+N%#%q%ox*&x% B*xz%Uz*sA*.B*U]*c++fb%Ac+uA*+B*7W&&,+$d.|& 9%.tq*6z+ET&1p%Gu+mh.KL$h~ y4&iS.7P.xc+]! Ea+T_+$(+$(+$(+$(+$(+$(+$(+$(+]$@jy.q9+jy.]$@q9+8Y+~D.jy.jy.jy.q9+q9+jy.jy.jy.3&$3&$3&$3&$3&$3&$3&$3&${y%{y%{y%{y%{y%{y%{y%*$@6j+Ea+Ea+xc+$(+T_+T_+T_+Ea+Ea+xc+$(+$(+$(+$(+$(+7P.Kh+G|@T_+$(+xc+Ea+Ea+xc+$(+$(+T_+T_+G|@G|@G|@}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.bH@bH@bH@bH@bH@bH@bH@bH@l7 l7 l7 cI+cI+NM+NM+NM+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+$(+T_+T_+T_+NM+NM+cI+l7 }f.aH@aH@Bz$l7 cI+cI+NM+ko.ko.13+13+Pj+Pj+Pj+Pj+Pj+Pj+Pj+Pj+Pj+Pj+,8+,8+,8+0d.0d.0d.g*.g*.UH.UH.S|@$U.$U.$U.R}%R}%,W+LN.LN.,W+R}%R}%(w.(w.q9+q9+q9+q9+$(+$(+M8@h]@v]#u]#x}*S>+", "-_ -_ ;_ ;_ ;_ 2b 2b -_ ;_ 2b 2b 2b ;_ -_ =_ *_ *_ *_ *_ *_ *_ *_ *_ -H.-H.-H.R_ R_ R_ *_ *_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ &_ #% m@ U@ U@ {@ {@ m@ 2% U@ U@ U@ U@ U@ U@ U@ U@ m@ m@ m@ m@ m@ m@ m@ m@ * * .* .* .* .* 2% Y_ 5! 2{ 3{ 2{ 4{ G{ n3 &_ f% f% f% f% x% x% x% f% Y_ 2% 2% .* .* * * * * * * * * * * * * * * * * * * * .* .* .* .* .* .* .* .* -^ -^ -^ -^ -^ -^ -^ -^ .^ .^ .^ .^ .^ .^ .^ .^ 5[ fd .* * 5[ ui fd .* * * * * * * * =5 I> QB@QB@QB@QB@QB@QB@QB@QB@4=+6v@6v@QB@af.4=+6v@&5 G{ G{ G{ G{ G{ G{ G{ 24 24 24 24 24 24 24 {_ I> I> I> I> I> I> I> I> 8H.a, w4.w4.w4.w4.a, 8H.8H.w4.fL.w4.8H.8H.a, fL.fL.fL.I> v% v% I> fL.fL.{_ {_ {_ {_ {_ {_ {_ {_ &5 &5 &5 n3 n3 ~_ ~_ f% af.WW.G6.6!.5!.6,%V[&7H. d+X* ([ eF+V9 -9 `h #m@*z*%^%gi%}l%=z*6.&6h*x2*>z%>z%xA*yA*@B*&i@4W&4W&vt*vt*uz*|W.O+#2W.e$@f&@_-+_-+6c#> $3V+3V+Y(%9T+6)#5)#4W.D)+B%%+*+&c$&c$&c$Fs% p$/9$4v$(a$^q$7l*pr%pr%pr%pr%/9$/9$^q$^q$&u$&u$8v$8v$}0$}0$}0$>b$=k$y4#@d$@d$@d$@d$,p$,p$e;%e;%e;%e;%b>%b>%b>%b>%*6$oZ@oZ@oZ@BO@BO@BO@BO@2R+2R+4G+4G+4G+4G+YK+4G+[V+BI+[V+[V+[V+[V+=>+=>+T@3]+hX@9G+lX+9G+f^@x)+@N+ib#{-+=>+:P+=>+{-+@N+@N+{-+{-+{-+zI+zI+zI+zI+=>+=>+=>+:P+:P+T,@T,@T,@T,@:P+:P+=>+=>+=>+zI+x)+x)+x)+>T@3 @f^@f^@f^@;B+;B+my+my+my+my+K@@K@@4 @4 @4 @4 @4 @4 @4 @4 @O)@4 @4 @ny+_w+(w+(w+&N+L)@Jl+FD+FD+K,@:x@OK+ay+6+C7#w0#w0#xc#Wn#||$=5#(e%^p%/e%Wf%#B*$B*^y*%B*GA*&B**B*=B*-B*;B*>B*,B*'B*)B*!B*~B*{B*]B*^B*/B*(B*XA*_B*mA*`A*;5#Lq#P7#~2#6l#%K#j:%3[%)$$w.$)E#wB#Ly#C_$[*$[*$-E#:G+_G+Q;@[G+_V+_V+#w+L$o%&;M$>J$ K${J$ K$!H$-I$pw$pw$d8$d8$_P+hX+5Z+V.@w;@r$%Ku$a$@,'@Wp+hm+x=@x)&@r%.7@41@[!$6)$E5&Et$Ft$Ft$nt$nt$nt$nt$nt$7S$+F$-k$-k$-k$Ri$Ri$Ri$Ri$Ri$Ri$-k$6l$6l$-k$Ri$Ld$tV#Rl$uV#uV#4c$zo$5c$5c$='$='$+9@+9@}7&&G$I*$'y$(;$Ql$Ql$h>$_{&t;&_D$Ql$_{&_D$_D$_D$h>$h>$(;$C&%.9@@1%Ma$Ma$Ma$z6@7j$7j$zb$zb$zb$Ao$Sp$Sp$Gt$Gt$=3@=3@=3@=3@cs$cs$ v$ v${x${x$lp%ZW&[+&1@QA+T^@rt$%x@%x@=`+N%#%q%:B*&x%,i*lz*mz*3A*.B* Yt.6g+Ai.~D.]$@]$@jy.q9+q9+jy.]$@]$@{y%{y%{y%{y%{y%{y%{y%{y%{y%{y%{y%{y%{y%{y%{y%*$@y$$xc+xc+xc+$(+$(+$(+$(+Ea+xc+$(+T_+T_+T_+T_+$(+Kh+G|@G|@T_+$(+$(+xc+xc+Ea+Ea+xc+$(+T_+T_+G|@G|@}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.l7 l7 l7 l7 l7 l7 l7 l7 }f.}f.}f.l7 l7 cI+cI+cI+$(+$(+$(+$(+$(+$(+$(+$(+xc+xc+xc+xc+xc+xc+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+xc+xc+xc+$(+$(+$(+$(+ko.NM+cI+l7 }f.bH@aH@Bz$l7 cI+NM+ko.ko.ko.NM+NM+GA+Pj+Pj+Pj+,8+,8+,8+,8+6P.6P.6P.r4@r4@r4@r4@r4@S|@$U.$U.$U.$U./w./w./w./w./w.R}%,W+,W+R}%/w./w.QL+QL+jy.jy.jy.jy.xc+xc+M8@h]@:{+u]#x}*x}*", "&) &) &) $% |% |% |% ~_ &_ $% |% |% |% $% &) 5% 5% 5% 5% 5% 5% 5% 5% 4% 4% 4% 4% %% %% %% %% =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ &_ #% M$ Y_ Y_ M$ M$ Y_ =5 Y_ Y_ Y_ Y_ Y_ Y_ Y_ Y_ T$ T$ T$ T$ T$ T$ T$ T$ o3 o3 =5 =5 =5 ed ed ed &5 ~_ &) &_ n3 n3 &_ &) ~_ ~_ f% f% f% f% f% f% Y_ Y_ Y_ o3 o3 =5 =5 =5 =5 =5 =5 =5 =5 =5 =5 =5 2% 2% 2% 2% 2% 2% 2% 2% .* .* .* .* .* .* .* .* -h -h -h -h -h -h -h -h =] =] =] =] =] =] =] =] .o ed =5 =5 ac .o ac =5 ac ac ac ac ac ac ac ac fL.fL.fL.fL.fL.fL.fL.fL.v% w4.8H.a, I> v% fL.a, W_ &5 &5 &5 &5 &5 &5 W_ {_ {_ {_ {_ {_ {_ {_ {_ fL.fL.fL.fL.fL.fL.fL.fL.8H.a, w4.fL.fL.w4.a, 8H.cl+w4.I> fL.8H.cl+a, fL.a, w4.fL.I> I> fL.w4.a, {_ {_ {_ {_ {_ {_ {_ {_ W_ W_ W_ &5 &5 n3 n3 v% QB@WW.hY.P7.P7.Jg.0- !<*zh.Y* > @m! Ba Tc +k e*|B*Ca.1B*}l%2B*3B*gg*Se*)M%>z%-z*yA*@B*=m@&i@4W&|W.|W.uz*|W._K@U##hB@e$@_-+_-+6c#> $3V+3V+Y(%9T+6)#5)#4W.D)+B%%+*+&c$&c$&c$Fs% p$/9$4v$(a$^q$7l*)]$)]$pr%pr%/9$/9$96&96&p4&p4&*u$*u$*u$8v$8v$=c$Rj$_a$Ej$Ej$Ej$Ej$b8$b8$pw$pw$pw$pw$iF$iF$iF$pw$*6$*6$*6$*6$_P+_P+_P+_P+WK+WK+XK+XK+XK+XK+1 @4G+[V+BI+[V+[V+[V+[V+=>+=>+Q,+x)+>T@>T@lX+ZK+lX+3 @x)+hX@3]+>T@T@>T@>T@x)+x)++=>+=>+:P+:P+T,@T,@T,@T,@T,@T,@:P+:P+=>+=>+=>+x)+x)+>T@>T@f^@f^@f^@f^@;B+*>+ny+4 @4 @ny+Z.@K@@4 @4 @4 @4 @4 @4 @4 @4 @O)@O)@4 @ny+ny+my+_w+_w+{k@tr+wI+wI+:&@:x@OK+ay+tI+Gt+sI+oI+rI+rI+^P+pI+Q;@[G+[T+)B+^_+|]+Tn+| %C@@yI+TK+@#$b>%Rb$4=&+6$3w+rr%sD$sD$rr%km$N@%~m$3)#3)#9Z+9Z+9Z+})#})#})#@h+@ +I4@k<&X_#IL#=c@1^@Q1+tD@c)+> +Qb+}P+3$@2Z+U_@/G+rD+rD+>k+>k+Nn#QL#>6+C7#w0#w0#xc#Wn#||$=5#&q%4B*5B*/e%6B*7B*8B*9B*0B*8A*aB*bB*cB*dB*eB*fB*gB*hB*iB*jB*kB*lB*mB*nB*oB*pB*Pz*_A*nA*Jc#!5#,5#~2#%5#:l#z0#gs%E~$Sy#+G#+G#1t#w!$se@lg@7k@pI+:G+ne#`J#_V+Mn+q;@)B+OK+K,@H6@K@@my+;B+8$@H@@cB@G@@+W$!_$BU$W~$BU$Uv#+@%FO$Tv#bN$%/$)I$lF$lF$kF$jF$pw$pw$pw$d8$hX+hX+5Z+AM@R)@A%%Ku$b&@6(@Vp+hm+S;@x)&.7@41@6)$W>$W>$2r$4q&)r$)r$Ju$Ju$Ju$Ju$Ju$$w$!x$Ri$Ri$Ri$Ri$-k$-k$-k$Ri$-k$6l$OG%OG%6l$-k$Ld$AM$Sl$Rl$uV#4c$zo$5c$5c$w,$w,$Z0@C&%&G$&G$I*$'y$(;$(;$(;$_D$z|$z|$_{&(;$t;&t;&t;&_{&_{&_D$_D$B]&.9@g}@*'$*'$*'$A6@V>$V>$Et$Et$Et$E5&Ft$Ft$)r$Gt$uV#Rl$Rl$Sl$Gt$cs$ v${x$.r%{x$lp%lp%[+&1@QA+T^@rt$%x@rB*V @=C%sB*:B*rA*mM%xz%mz*Vz*tB*YG%*P@6{+&X.{1++B*DT&3}+ 5.NS@8v.uq*6z+ET&+X+1p%sq**Z+|m.h~ =~@ jy.Ai.6g+]$@jy.q9+q9+jy.]$@6g+B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@|m.*$@$(+$(+$(+xc+xc+xc+xc+xc+$(+T_+Kh+Kh+Kh+G|@T_+T_+T_+T_+T_+T_+$(+$(+$(+Ea+xc+xc+xc+xc+xc+xc+xc+}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.cI+cI+cI+cI+cI+cI+cI+cI+bH@bH@bH@}f.}f.l7 l7 l7 5A.5A.5A.5A.5A.5A.5A.5A.xc+xc+xc+xc+xc+xc+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+$(+$(+xc+xc+xc+xc+l7 l7 l7 l7 l7 l7 l7 cI+l7 cI+NM+ko.ko.cI+l7 }f.l7 cI+cI+cI+NM+ko.ko.ko.bH@bH@bH@bH@aH@aH@aH@aH@|f.|f.|f.[y+[y+[y+[y+[y+Ov+Ov+%U.[y+[y+%U.Ov+Ov+^x#^x#]$@]$@]$@]$@Ea+Ea+h]@v]#:{+u]#9&+9&+", "&_ &) &) $% |% |% |% n3 ~_ &) |% 0' 0' |% $% 5% 5% 5% 5% 5% 5% 5% 5% f% 5% 5% 4% %% ~% d( d( =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ $% t% o3 Y_ t% t% o3 ed o3 o3 o3 o3 o3 o3 o3 o3 T$ T$ T$ T$ T$ T$ T$ T$ t% t% Y_ Y_ o3 =5 =5 ed W_ n3 &_ &_ ~_ ~_ &_ |% ~_ ~_ f% f% f% f% f% f% Y_ Y_ Y_ o3 o3 =5 =5 =5 =5 =5 =5 =5 =5 =5 =5 =5 2% 2% 2% 2% 2% 2% 2% 2% .* .* .* .* .* .* .* .* si si si si si si si si =] =] =] =] =] =] =] =] .o ed =5 =5 ac .o ac =5 .o .o .o .o .o .o .o .o w4.w4.w4.w4.w4.w4.w4.w4.v% w4.8H.a, I> v% fL.8H.W_ W_ &5 n3 n3 &5 W_ W_ {_ {_ {_ {_ {_ {_ {_ {_ a, a, a, a, a, a, a, a, cl+a, w4.fL.fL.w4.a, cl+cl+w4.I> fL.8H.cl+a, fL.8H.a, w4.fL.fL.w4.a, 8H.{_ {_ {_ {_ {_ {_ {_ {_ ;b.{_ {_ {_ W_ W_ &5 I> QB@WW.hY.H;@H;@U@.Jg.Iu+zh.}].z4&I-@N0 /8 Nu+P0*p]%g<@]r*:k%2B*uB*Bf*Cf*)M%>z%-z*yA*vB*@B*&i@4W&1W.T8@|W.|W.FO@O+##@#hB@_-+_-+6c#> $3V+3V+Y(%9T+6)#5)#4W.D)+B%%+*+&c$&c$&c$Fs% p$/9$4v$(a$^q$7l*)]$)]$pr%pr%/9$/9$96&96&,z*,z*8k&8k&*u$*u$*u$=c$Ms$Dj$a9$a9$a9$a9$b9$b9$d9$d9$d9$d9$lF$lF$lF$lF$_P+*6$*6$*6$_P+_P+_P+_P+WK+WK+XK+XK+XK+XK+1 @XK+5&@BI+[V+[V+[V+[V+=>+=>+2T+T@x)+ZK+Q)@lX+9G+x)+hX@3]+>T@T@x)+x)+x)++=>+:P+:P+:P+T,@T,@T,@T,@T,@T,@:P+:P+:P+=>+=>+x)+x)+>T@>T@f^@f^@f^@~-+*>+*>+4 @O)@O)@4 @Z.@Z.@4 @4 @4 @4 @4 @4 @4 @4 @O)@O)@4 @4 @4 @ny+ny+ny+|=@tr+wI+wI+:&@:&@K,@}R+uy#(t#Gt+ZM+^P+^P+qI+qI+Q;@[G+[T+)B+^_+|]+mp+| %C@@yI+TK+v,$e;%J$+/J%+6$3w+rr%sD$&c$km$km$N@%kn$@ ++B$|f+9Z+R2@R2@]v$]v$W_#@ +HK$1S#X_#hB@up%uD@@>#bZ.cz@> +4T+rr+Sn+/|+gK@q;@#/+#/++_++_+ed+QL#>6+C7#w0#w0#xc#Wn#||$=5#^p%8v*7v*xg%wB*@r#yw#xB*ky*yB*;C#zB*AB*BB*CB*DB*EB*FB*GB*HB*IB*JB*KB*LB*MB*NB*OB*cz*nA*K0#!5#U7#Ec#Bf#:l#z0#bi#Wy#AB#+G#;6$2t#N>%se@Kf%jg@pI+pI+ w#`J#$4q&M3&)r$)r$Ju$Ju$Ju$Ju$Ju$Ju$+O$5l$@F$Ri$Ri$-k$6l$6l$-k$6l$OG%Si$Si$OG%6l$AM$Ld$=3@Sl$Rl$Iu$4c$d6$5c$>y$l7$B]&B]&&G$W=$I*$'y$h>$(;$h>$_{&y|$y|$_{&h>$z|$z|$t;&t;&t;&_{&_{&Km$.9@g}@*'$*'$*'$A6@V>$V>$Et$Et$Et$E5&Ft$Ft$)r$Gt$yo$>t$uV#Rl$Sp$cs${x${x$.r%.r%lp%lp%]@;'$@7@mQ&9s#8s#%!@O3#s9#s9#t9#hh#gh#4v#Kx#Kx#4L#gY#gY#H6@P,@Z.@Z.@ny+Q,@Q,@b=@=9@)~#)~#3L#eh#uy#jc@}G+[a@Y{%Y{%u=@[T+jc@u=@[a@9F$a]%[a@gD+PB*kl%!]+60#xV$-:#Y+$15%:c@fh#&t@TK$y6*y6*Kt%k9&a=@O)@K)@T##T##T##K)@,B+w)+dp+d[+T.+T.+_|+dp+_|+3a@16+G$+G$+2V#lK@RA+lK@c^#,[+Gy+Pp+bw+Q2@>[+&1@QA+T^@}A*rB*rB*V @=C%sB*:B*QB*Il*;&&GM$RB*Wz*dv*_r%_W+|'%rs.j#+2S&=6.f& G' Hu+xr*6z+ET&+X+1p%>0+*Z+/{ /{ /{ /{ Bj.Bj.|m.*$@*$@*$@*$@*$@*$@*$@*$@*$@Yt.]$@jy.jy.6g+Yt.)> 6g+)> ]$@jy.q9+q9+jy.]$@)> `b&`b&`b&`b&`b&`b&`b&`b&B#@B#@B#@B#@B#@B#@B#@|m.|m.T_+T_+$(+xc+Ea+Ea+Ea+xc+$(+G|@7P.7P.Kh+G|@T_+$(+$(+$(+T_+T_+T_+T_+T_+$(+$(+xc+xc+Ea+5A.]! ]! }f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.NM+NM+NM+NM+NM+NM+NM+NM+aH@aH@aH@bH@bH@}f.}f.}f.{! {! {! {! {! {! {! {! Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+T_+T_+T_+$(+xc+Ea+Ea+Ea+aH@bH@}f.l7 NM+ko.13+@$+cI+cI+NM+ko.NM+l7 bH@aH@l7 cI+cI+NM+NM+ko.ko.13+cI+cI+l7 l7 }f.}f.bH@bH@Q] P] P] J; J; |f.[y+[y+Rx.Ov+Ov+%U.%U.Ov+Ov+Rx.Fu#Fu#6g+6g+6g+6g+5A.5A.h]@v]#:{+u]#9&+q(#", "M$ t% M$ #% #% T$ t% t% Y_ o3 Y_ T$ #% T$ M$ u% y% ^{ &% &% &- Q_ y% &% &% &- &- &- ^{ ^{ 4% =_ =_ =_ =_ =_ =_ =_ =_ A^.A^.A^.A^.A^.A^.A^.A^.&5 ~_ &_ &) &) &_ ~_ &5 &_ &_ &_ ~_ ~_ ~_ n3 n3 n3 &_ |% 9c 9c |% &_ n3 ~_ &_ &) $% $% &) &_ ~_ f% f% f% f% f% f% ~_ ~_ &_ &_ ~_ n3 n3 &5 W_ W_ &_ ~_ ~_ n3 n3 &5 &5 W_ &5 &5 W_ {_ {_ ;b.;b..o pj 5[ 2% {@ {@ m@ .* fd m@ U@ .* fd fd * .* 2% si w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.|x.|x.|x.;b.{_ {_ W_ W_ ;b.{_ W_ &5 &5 W_ {_ ;b.-h -h -h -h -h -h -h -h y% u% u% =] -h -h si si w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, 8H.8H.fL.a, 8H.8H.w4.fL.w4.8H.l`.cl+w4.I> I> fL.a, 8H.&5 &5 &5 &5 &5 &5 &5 &5 ;b.;b.{_ W_ &5 n3 ~_ 5% af.i% VW.5!.5!.ni 6,%`s@zh.(= SB*X! /c Sc X4.9u #B g<@zE%[D%TB*uB*+y*%e*)M%>z%xA*-z*@B*=m@&i@4W&T8@|W.|W.|W._K@O+##@#hB@_-+.*+k[+[6$M:+;4+$ +9T+6)#5)#5)#4W.5Z.n~+y1#y1#/a$Fs%pr%pr%^q$^q$96&96&pr%/9$ p$cw$cw$ p$^q$4v$7v$7v$8v$}0$}0$K$+K$+Sj$nw$cN$cN$a9$b9$b8$b8$b8$!l$!l$lF$lF$kF$kF$%/$jF$b>%47$_8$c9$d9$5($d8$b>%jF$jF$%/$%/$%/$%/$FO$XK+4G+}V+3G+[V+[V+AI+zI+zI+Q,+x)+>T@>T@9G+lX+3 @~-+9G+3 @f^@f^@f^@9G+ZK+Q)@9G+9G+9G+lX+lX+ZK+ZK+Q,+zI+zI+zI+zI+zI+zI+zI+zI+:P+:P+:P+:P+:P+:P+:P+:P+Q,+Q,+Q,+k++_+Nn#W4#.G#!w#dt#w0#xc#xc#]$$VB*T0#RB#7v*/e%#B*6B*^y*6A*WB*XB*YB*ZB*`B* C*.C*+C*@C*#C*$C*%C*&C**C*=C*-C*^z*ZY#;C*cz*xz*nA*-f%iv%JB#Cc#EB#77$qT#@;$+2#/6$#L$l'$7d%kg@2+*l@*8*$pI+[t#2&@}t#oD+`+#sD+|G+vr+fD+QK+g~+:w+;B+*>+3 @cB@EM@DM@DM@G@@G@@7G+W.@~K@{K@6G+6G+BM@BM@XK+XK+iX+pw$pw$pw$pw$u_%u_%BM@~K@]K@k#$Z.@-(@mm+Zp+jm+g9@6)$7)$7)$7)$7)$6)$E5&Et$Ft$Ft$nt$Ju$Ju$&w$&w$&w$_V$_V$(V$(V$_V$+F$!x$!x$_V$_V$+F$+F$+F$+F$+F$7S$vV#uV#uV#uV#Iu$Iu$|s$|s${e%g>$+9@F5&gp%}7&I*$'y$t;&t;&t;&z|$z|$y|$y|$y|$y|$y|$z|$t;&_{&_D$_D$Z0@aC$X<@aC$.9@.9@*'$='$='$|s$|s$Et$Et$Ft$)r$)r$cs$3u$uV#Rl$Rl$Sp$Gt$)r$ v$)r$:n$_n$[V%'E$/n$iz*ct*.r%yV#Gt$Sp$xo$xo$Sp$Gt$yV#yV#cs$Gt$Gt$cs$yV#yV#$w$$w$#w$#w$#w$.O$.O$.O$bC$bC$bC$bC$bC$bC$bC$bC$Qi$Qi$6k@6k@6k@6k@11@11@hc@hc@:a@:a@/a@/a@/a@fr+v~@5X+]V+sI+Gt+tI+(t#(t#tI+tI+Gt+nI+ZM+rI+ZM@ZM@+7@+7@>]@>]@>]@;'$%!@%!@+q+.q+.5@$7@4v#gh#gh#hh#L,@c&@gY#H6@0$@e^@Z.@O)@t<@Q,@Kt%Kt%y6*TK$4N#eh#(t#p;@p;@p;@p;@p;@p;@p;@U_@=E#|G+)B+[A*|G+`6#>C*#>+)]+}]+XN#-:#+B+s6%b]%qr$&t@,'$=9@=9@=9@kb#0=@O)@T##S##S##S##S##T##K)@:w+:w+Qt+dp+_|+d[+d[+3a@:|+G$+7a@S{@lK@c^#c^#lK@+>#G&+>p*>p*ik+Q2@N@@tg@~R@}A*rB*{'#%#*=C%,C*^x*&x%mM%2A*oK$Vz*tB*'C*c++7/.tY.)C*j#+-V&n} e..n ET&1p%+X+vA*|r%Fu+sq*ME+!D+!D+>n.>n.!D+B#@'W+3&$3&$B#@!D+!D+B#@'W+{y%|m.jy.q9+Ai.1m.1m.Ai.q9+jy.jy.jy.jy.jy.jy.jy.jy.jy.B#@B#@B#@B#@B#@B#@B#@B#@3&$3&$3&$3&$3&$3&$3&$6j+*$@$(+xc+xc+Ea+5A.5A.5A.Ea+Ea+xc+xc+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+$(+$(+xc+Ea+xc+xc+$(+T_+ko.}f.9g.Bz$l7 NM+cI+}f.}f.l7 cI+NM+NM+cI+l7 }f.}f.}f.}f.}f.}f.}f.}f.}f.l7 l7 l7 l7 l7 l7 l7 l7 Ea+5A.5A.5A.5A.5A.]! ]! Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+8g.{! 5A.Ea+xc+xc+Ea+5A.5A.xc+$(+G|@Kh+G|@T_+T_+bH@bH@}f.l7 cI+NM+ko.13+NM+}f.Bz$aH@cI+ko.l7 Bz${'${'${'${'${'${'${'${'$-V@35+35+f+#f+#R~${'$}f.[y+|f.J; P] J; [y+Ov+Rx.%U.%U.%U.Ov+Ov+Rx.Rx.Rx..d+a(+i~ i~ i~ )> Ea+xc+:{+v]#v]#h]@PS@OU+", "M$ t% M$ #% #% T$ t% M$ t% o3 Y_ T$ #% M$ t% Q_ ^{ ^{ ^{ ^{ ^{ Q_ y% &% &% &- &- &- ^{ ^{ ^{ &_ =_ =_ =_ =_ =_ =_ =_ 0c 0c 0c 0c 0c 0c 0c 0c n3 ~_ &_ &) &) &_ ~_ n3 &_ &_ &_ ~_ ~_ ~_ n3 n3 n3 &_ $% |% |% $% &_ n3 ~_ &_ &) $% $% &) &_ ~_ f% f% f% f% f% f% ~_ ~_ ~_ ~_ n3 n3 n3 n3 &5 &5 ~_ ~_ ~_ n3 n3 &5 &5 &5 &5 &5 n3 &5 &5 W_ {_ ;b..o fd .* U@ m@ U@ .* * m@ 2% .* fd fd fd * o3 fL.fL.fL.fL.fL.fL.fL.fL.fL.fL.fL.fL.fL.fL.fL.fL.;b.;b.;b.{_ {_ W_ W_ &5 ;b.{_ W_ &5 &5 W_ {_ ;b.-h -h -h -h -h -h -h -h =] =] -h -h -h -h si si w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, a, a, a, a, a, w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, 8H.8H.fL.a, 8H.8H.w4.fL.w4.8H.xj+8H.w4.I> v% I> w4.a, &5 &5 &5 &5 &5 &5 &5 &5 W_ W_ W_ &5 n3 ~_ ~_ f% af.i% VW.6!.5!.ni 6,%pR.Zn z* bi Yz*vO+7= (9*PC.wu.g<@zE%[D%!C*uB*6h*x2*)M%>z%xA*-z*@B*=m@&i@4W&|W.|W.|W.|W._K@O+##@#hB@_-+.*+> $6Z.;4+;4+$ +9T+5Z.4W.4W.D)+n~+B%%A0%A0%/a$/a$)]$pr%4v$4v$^q$^q$pr%/9$ p$^v$^v$ p$^q$4v$&u$&u$8v$8v$}0$}0$}0$Ms$a8$a9$a9$Ej$b8$c9$c9$c9$!l$!l$lF$lF$kF$kF$%/$jF$pw$47$_8$c9$d9$5($d8$pw$jF$jF$%/$%/$%/$%/$FO$XK+4G+}V+3G+[V+[V+AI+zI+zI+Q,+x)+>T@>T@9G+lX+3 @~-+9G+3 @f^@f^@f^@9G+lX+Q)@9G+9G+9G+lX+lX+ZK+ZK+ZK+x)+zI+zI+zI+zI+zI+zI+zI+:P+:P+:P+:P+:P+:P+:P+:P+Q,+Q,+Q,+%re@'K$o@*J$*^P+[t#cc#[t#}t#oD+`+#|G+}T+Kl+FD+wI+Rt+my+*>+0G+9G+8$@EM@DM@G@@G@@G@@W.@W.@7G+~K@~K@~K@XK+5Z+5Z+iX+jF$d8$d8$d8$_P+_P+XK+1 @]K@k#$Z.@-(@LF@@q+Z5+&}@[!$[!$[!$[!$7)$7)$2r$E5&Ft$Ft$nt$Ju$Ju$Ju$&w$&w$:V$+F$+F$_V$+F$+F$:V$!x$+F$+F$+F$+F$+F$+F$+F$7S$vV#uV#uV#uV#Iu$Iu$|s$|s$g>$g>$+9@F5&V=$}7&I*$'y$_{&_{&t;&z|$z|$y|$|}$|}$y|$y|$z|$t;&_{&_D$_D$Z0@aC$X<@aC$.9@.9@*'$='$='$|s$|s$|s$Et$:n$Ft$Ft$Ft$xo$Rl$Rl$Sl$Sp$Sp$Ft$Ft$Ft$:n$7C*7C*P6*io%iz* &*.r%yV#Gt$Sp$xo$Sp$Sp$Gt$yV#cs$cs$Gt$Gt$cs$cs$yV#$w$$w$#w$#w$#w$.O$.O$.O$bC$bC$bC$bC$bC$bC$bC$bC$Qi$Qi$Qi$6k@6k@6k@6k@11@`6@K<@L<@L<@L<@X4@X4@X4@XH@%7@4k@pI+{P+Gt+tI+@w+@w+@w+nI+ZM+rI+]V+%7@%7@WE&WE&WE&@7@;'$;'$;'$%!@O3# q+.5@4k#$7@gh#gh#hh#L,@c&@gY#H6@0$@e^@Z.@O)@t<@t<@*w$Kt%=r%TK$4N#eh#(t#p;@p;@p;@p;@p;@p;@p;@U_@=E#p;@eK@8C*|t#9C*0C*H2@t)+^_+e0##k+#k+:c@>w+&t@&t@=9@=9@=9@=9@be#0=@t<@T##S##S##S##T##K)@K)@:w+Qt+Qt+dp+_|+d[+T.+3a@:|+G$+7a@7a@lK@c^#c^#lK@,[+Gy+>p*Pp+*E#Q2@&1@]o+XO@%x@rB*{'#%#*%q%aC*ox*n.>n.!D+`b&{y%'W+Y@$'W+B#@B#@'W+3&$3&${y%ok.q9+Ai.1m.1m.Ai.q9+jy.q9+q9+q9+q9+q9+q9+q9+q9+B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@|m.*$@$(+xc+xc+Ea+Ea+5A.5A.Ea+Ea+xc+xc+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+$(+xc+xc+Ea+xc+xc+$(+NM+}f.aH@aH@}f.l7 l7 l7 bH@}f.l7 cI+cI+l7 }f.bH@}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+]! 5A.Ea+xc+$(+xc+Ea+5A.]! 5A.xc+$(+T_+T_+$(+xc+}f.}f.l7 cI+NM+ko.ko.13+l7 l7 cI+cI+l7 }f.l7 cI+R~$R~$R~$R~$R~$R~$R~$R~$-V@-V@35+35+f+#f+#R~$R~$}f.J; J; P] J; |f.%U.Ov+%U.%U.%U.Ov+Ov+Ov+Rx.Rx.Fu#.d+Yt.Yt.Yt.6g+xc+$(+:{+:{+:{+v]#PS@PS@", "m@ U@ m@ l& l& {@ U@ l& m@ 2% U@ m@ {@ U@ .* S& S& L) 6[ o^ o^ o^ o^ S& S& [! [! [! L) L) ^{ &_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ =_ A^.0c =_ =_ =_ =_ 0c A^.=_ =_ =_ 0c 0c 0c A^.A^.0c 0c 0c =_ =_ 0c 0c 0c 0c =_ =_ -_ -_ =_ =_ 0c f% x% x% x% f% f% f% f% &5 &5 4{ 4{ 4{ 4{ 5! 5! 0c 0c 0c A^.A^.X_ X_ X_ X_ A^.0c =_ =_ A^.7v@{_ =5 * .* .* .* 2% 2% 2% U@ 2% .* * fd fd * =5 I> QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@7v@7v@7v@7v@X_ X_ X_ A^.)i+ l.7v@X_ X_ 7v@ l.;b.-h p: p: p: p: p: p: p: C' C' og og og og p: -h w4.w4.w4.w4.w4.w4.w4.w4.8H.8H.8H.8H.8H.8H.8H.8H.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, 8H.8H.fL.a, 8H.8H.w4.fL.w4.8H.8H.a, fL.v% v% v% fL.w4.&5 &5 &5 &5 &5 &5 &5 &5 n3 n3 n3 n3 ~_ ~_ ~_ f% af.i% VW.6!.5!.ni 0- 1i$zh.X* St eF+EQ+^8 +u%%(+*z*09.VB%[D%!C*3B*p6*.2*>z%>z%xA*-z*@B*=m@&i@&i@uz*uz*uz*|W._K@O+##@#hB@4[%_-+6c#> $I3$I3$Y(%gZ.n~+D)+D)+W_#B%%+*+km$km$&c$&c$sD$sD$(a$(a$4v$4v$pr%/9$ p$ p$ p$ p$^q$4v$p4&p4&*u$*u$*u$8v$8v$nw$%K$b8$c9$c9$5($5($5($d8$lF$lF$)I$)I$/H$/H$GO$/H$-I$Rb$qn%c8$)H$!H$-I$-I$>J$>J$V~$V~$V~$V~$-M$%/$4G+}V+3G+[V+[V+AI+zI+zI+Q,+x)+>T@>T@9G+lX+3 @~-+0G+*>+*>+;B+*>+0G+>B+P)@0G+0G+0G+>B+>B+P)@P)@ZK+Q,+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+Q,+Q,+Q,+%5k@fK@4k@mQ&rI+-E#oB#oB#3&@u&@t&@8X+}]+fy+@k+Jl+ED+w)+mX+>B+>B+8$@8$@8$@^K@cB@cB@x;@R)@w;@w;@YK+>K@>K@>K@jX+9e#kF$5($5($5($hX+hX+5Z+V.@!K@mq@Z.@b&@M)@.q+'P+S;@41@41@[!$[!$7)$7)$2r$2r$:n$:n$nt$nt$Ju$Ju$Ju$&w$H#*H#*~x$ot$;r$ot$ot$~x$ot$ot$;r$;r$;r$;r$;r$7S$vV#uV#uV#uV#Iu$Iu$|s$|s$g>$='$+9@+9@V=$}7&%[&I*$_D$_{&_{&t;&y|$|}$|}$V<$y|$y|$z|$t;&_{&_D$_D$Z0@Z0@M(#Z0@C&%C&%+9@Ql$Ql$=r$=r$=r$LG&7C*YS&YS&:n$Sp$Sl$Sl$Sl$Sp$xo$:n$:n$:n$Ft$(n$|s%[+cP$Li+T^@rB*H1*}A*G]#sB*z!&:B*rA*1A*2A*oK$Vz*tA*U]*s2%vC*}r wC*xC*rQ&JC. e..n (W%1p%Gu+'C+|r%tq*sq*sq*#d+#d+<:*<:*<:*#d+TO&`E&Fc%O4%`E&`E&O4%#u%#u%'W+ok.q9+Ai.1m.1m.Ai.q9+jy.dl.dl.dl.dl.dl.dl.dl.dl.B#@B#@B#@B#@B#@B#@B#@B#@!D+!D+!D+!D+!D+!D+!D+Bj.*$@$(+xc+xc+xc+Ea+Ea+Ea+Ea+Ea+xc+xc+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+G|@T_+$(+xc+Ea+Ea+Ea+xc+}f.l7 l7 }f.aH@aH@}f.cI+aH@bH@}f.}f.}f.}f.bH@aH@}f.}f.}f.}f.}f.}f.}f.}f.bH@bH@bH@bH@bH@bH@bH@bH@5A.Ea+Ea+xc+$(+$(+T_+T_+xc+xc+xc+xc+xc+xc+xc+xc+xc+$(+$(+T_+$(+xc+Ea+Ea+]! 5A.Ea+xc+xc+xc+xc+Ea+l7 l7 cI+NM+NM+ko.13+13+bH@NM+@$+13+}f.aH@l7 @$+v]#v]#v]#v]#v]#v]#v]#v]#M8@h]@h]@h]@v]#v]#v]#v]#bH@bH@aH@aH@aH@bH@l7 l7 l7 l7 cI+cI+NM+NM+NM+Rx.^x#^x#6g+6g+6g+]$@xc+$(+u]#u]#:{+:{+q(#q)@", "m@ U@ m@ l& l& {@ U@ k+ {@ U@ U@ m@ m@ 2% * R% C& L) o^ -^ -^ o^ 6[ S& S& [! [! [! L) L) ^{ &_ =_ =_ =_ =_ =_ =_ =_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ 0c 0c 0c =_ =_ 0c 0c 0c =_ =_ =_ 0c 0c 0c A^.A^.=_ 0c X_ 7v@7v@X_ 0c =_ 0c 0c =_ =_ =_ =_ 0c g% x% x% x% x% f% f% f% f% W_ W_ G{ 4{ 4{ 5! ,;.2{ W5 A^.A^.A^.A^.A^.A^.A^.X_ A^.=_ ;_ -_ =_ A^.W_ Y_ .* * fd fd * 2% U@ 2% .* .* * fd fd fd ed v% af.af.af.af.af.af.af.af.af.af.af.af.af.af.af.X_ A^.A^.A^.A^.A^.A^.A^. l. l.7v@7v@7v@7v@ l.{_ -h p: p: p: p: p: p: p: p] _y _y C' og og p: p: w4.w4.w4.w4.w4.w4.w4.w4.8H.8H.8H.8H.8H.8H.8H.8H.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, 8H.8H.fL.a, 8H.8H.w4.fL.w4.8H.a, w4.I> v% v% v% I> I> &5 &5 &5 &5 &5 &5 &5 &5 &_ &_ &_ ~_ ~_ ~_ ~_ f% af.6% 9, P7.6!.ni V[&`$+ze+n# yC*Dl DQ+Sc X4.%(+ot.Lb.VB%[D%TB*3B*L5*27@>z%i4*xA*-z*@B*=m@=m@&i@vt*vt*vt*uz*FO@O+##@#hB@4[%4[%PX#6c#3w+3w+ ++gZ.B%%W_#W_#@ ++*+|0#&c$&c$km$km$rr%sD$80$(a$(a$(a$pr%/9$/9$/9$/9$/9$^q$4v$,z*,z*8k&8k&*u$*u$*u$nw$4($_8$_8$_8$d8$d8$pw$pw$lF$lF$)I$)I$/H$/H$GO$/H$!H$qn%qn%c8$)H$!H$!H$!H$>J$>J$V~$V~$V~$V~$-M$%/$4G+}V+3G+[V+[V+AI+zI+zI+Q,+x)+>T@>T@9G+lX+3 @~-+*>+*>+*>+*>+0G+0G+>B+>B+0G+0G+0G+>B+>B+P)@P)@ZK+Q,+:P+:P+:P+:P+:P+:P+:P+=>+=>+=>+=>+=>+=>+=>+=>+Q,+Q,+Q,+>+WX.#>#JL#H5$,%@N@@Yv+3X+pd+/_+;2+N0+Ln+{G+rD+#/+@_+Fg+r:+QL#>6+C7#v0#1@$@R$x<%*o#5l#X7#MR#Mu*6E#~C#zC*AC*BC*ku*$u#CC*DC*EC*FC*GC*HC*IC*JC*KC*LC*MC*NC*OC*PC*C.${z*Nu*Tf%6E#yz*wB*/e%~2#$5#4|%&1%*1%,~%,/$+K#;6$@}#@}#6m@cc@ZM@]V+]V+[*$Tn#oB#oB#`J#u&@t&@8X+ur+-w+|R+tr+}=@,B+O)@>B+8$@8$@8$@^K@cB@cB@x;@x;@!K@!K@>K@>K@)K@)K@jX+jX+lF$d9$d9$d9$vp#vp#zM@AM@w;@mq@Z.@b&@L,@s9#:o+:R+[!$7)$6)$6)$W>$W>$E5&E5&:n$:n$vo$nt$nt$Ju$Ju$Ju$f}%A)&H#*~x$ot$ot$ot$ot$~x$ot$ot$ot$ot$;r$;r$7S$0p$uV#uV#uV#Iu$Iu$|s$|s$='$='$+9@+9@}7&&G$%[&I*$_D$_D$_{&t;&y|$|}$V<$V<$y|$y|$z|$t;&_{&_D$_D$Z0@Z0@M(#Z0@C&%C&%+9@Ql$Ql$=r$=r$=r$=r$:D$:D$:D$`u$cs$=3@=3@Sl$xo$xo$`u$`u$:n$Ft$ZW&Z%*iz*iz*Sz*ZW& v$Gt$Gt$Gt$Gt$Gt$Gt$Gt$cs$cs$Gt$Sp$Sp$Gt$cs$cs$:V$:V$!x$!x$!x$+O$+O$+O$)O$)O$)O$)O$)O$)O$)O$)O$JH$JH$Qi$Qi$Qi$Qi$6k@6k@_a@0X#0X#11@;:@K<@K<@K<@cc@fK@qe@^P+pI+ZM+dr+Ft+cr+gp+Ht+er+%7@29@XH@|T@2+*2+*o@*1+*1+*7*$@7@@7@;'$8s#Ip#9s#4k#$7@$7@gh#hh#c&@gY#H6@0$@e^@Z.@O)@t<@t<@b=@b=@,'$,'$4N#3k# N+VH@VH@VH@VH@VH@VH@VH@ur+15%b$@Ll+QC*15%6^@W0@H2@t)+Ob+~i@:c@.B+@k+=w+fz@fz@=9@=9@0=@0=@be#0=@Q,@{]%{]%{]%S##K)@,B+w)+Qt+dp+dp+_|+d[+T.+ak@3X+e[+G$+'v@'v@c^#_/+lK@RA+R^@hP+Pp+ik+>[+>[+-u+RC*q3*H1*SC*}A*G]#,C*z!&TC*|A*Il*UC*oK$3A*tA*VC*WC*7/.}r wC*C^ yH&JC.+}. n )p#1p%vA*6z+Gu+tq*>0+,0+#d+#d+#d+#d+#d+#d+#d+TO&Fc%3]&TO&TO&3]&#u%O4%'W+ok.q9+Ai.1m.1m.Ai.q9+jy.Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.B#@B#@B#@B#@B#@B#@B#@B#@!D+!D+!D+!D+!D+!D+!D+Bj.*$@$(+xc+xc+xc+xc+xc+xc+Ea+Ea+xc+xc+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+Kh+G|@$(+xc+Ea+Ea+Ea+Ea+aH@l7 NM+l7 Bz$9g.aH@cI+bH@}f.}f.}f.}f.}f.}f.bH@}f.}f.}f.}f.}f.}f.}f.}f.bH@bH@bH@bH@bH@bH@bH@bH@Ea+Ea+xc+$(+T_+G|@Kh+7P.xc+xc+xc+xc+xc+xc+xc+xc+G|@G|@G|@T_+T_+$(+xc+Ea+Ea+Ea+xc+xc+xc+xc+xc+xc+cI+cI+cI+NM+ko.ko.13+13+l7 ko.13+ko.cI+l7 NM+13+h]@h]@h]@h]@h]@h]@h]@h]@v]#v]#:{+:{+:{+:{+:{+:{+bH@bH@bH@bH@bH@bH@bH@}f.l7 l7 l7 cI+cI+NM+NM+NM+jy.QL+jy.jy.jy.jy.$(+$(+u]#u]#u]#u]#q(#q(#", "m@ U@ m@ l& l& {@ U@ k+ {@ U@ U@ m@ m@ 2% * R% C& L) o^ -^ -^ o^ 6[ S& S& [! [! [! L) L) ^{ &_ =_ =_ =_ =_ =_ =_ =_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ =_ 0c 0c 0c 0c 0c 0c =_ =_ =_ =_ 0c 0c 0c A^.A^.=_ 0c X_ l. l.X_ 0c =_ 0c 0c 0c 0c 0c 0c 0c g% x% l#@x% x% x% x% f% f% W_ W_ G{ 4{ p3 +..,;.2{ W5 A^.A^.A^.A^.A^.A^.A^.X_ 0c =_ -_ -_ =_ 0c n3 M$ 2% * fd 5[ * 2% U@ * * * * * fd 5[ ac v% af.af.af.af.af.af.af.af.af.af.af.af.af.af.af.0c 0c 0c A^.A^.A^.A^.A^.7v@7v@ l. l. l. l.7v@W_ =] .^ .^ .^ .^ .^ .^ .^ p] _y _y C' og og p: p: ':+':+':+':+':+':+':+':+':+':+':+':+':+':+':+':+w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, 8H.8H.fL.a, 8H.8H.w4.fL.w4.8H.w4.fL.fL.I> v% v% v% I> &5 &5 &5 &5 &5 &5 &5 &5 &_ &_ &_ ~_ ~_ ~_ ~_ f% af.6% G6.H;@6!.ni V[&gO.v~.X* yC*eF+*9 -9 +6.%(+ot.Lb.zE%HI.XC*uB*L5*27@i4*i4*-z*yA*vB*@B*=m@=m@B`#B`#vt*vt*FO@O+##@#hB@_-+_-+PX#PX#oo%3w+Y(%9T+B%%W_#W_#@ ++*+|0#&c$&c$km$km$rr%sD$80$(a$(a$(a$/9$pr%pr%pr%pr%pr%4v$^q$,z*,z*8k&8k&*u$*u$*u$nw$bv$_8$5($d8$d8$pw$iF$iF$/H$/H$/H$/H$-L$-L$-L$)I$)H$c8$c8$qn%!H$)H$)H$)H$>J$>J$V~$V~$V~$V~$-M$%/$4G+}V+3G+[V+[V+AI+zI+zI+Q,+x)+>T@>T@9G+lX+3 @~-+;B+*>+*>+0G+0G+>B+>B+>B+0G+0G+0G+>B+>B+P)@P)@ZK+Q,+:P+:P+:P+:P+:P+:P+:P+=>+=>+=>+=>+=>+=>+=>+=>+Q,+Q,+Q,++*>+my+my+my+my+K@@K@@ny+ny+ny+ny+ny+ny+ny+ny+my+my+my+my+ny+ny+ny+ny+D*,D*'D*sC*tC*Mu*nA*Tf%)D*tC*!D*6B*{2#Iq#7<$~D*vF%>w#,~%xB#+G#D_$@}#$3@6m@ic@-]@-]@Ey#:i#W1#W1#/+@dy+s=@Nb+ur+@k+-w+1R+}=@,B+,B+O)@9$@9$@8$@^K@^K@^K@x;@x;@]K@]K@]K@]K@>K@>K@>K@5$@lF$d9$d9$d9$vp#vp#zM@AM@R)@^K@K@@b&@yb#s9#:o+:R+6)$W>$-'$='$='$='$|s$Et$`u$`u$vo$vo$nt$nt$Ju$Ju$f}%A)&H#*~x$ot$ot$ot$ot$H#*H#*~x$~x$ot$;r$;r$7S$0p$uV#uV#uV#Iu$Iu$|s$|s$V>$='$+9@C&%&G$&G$%[&%[&_D$_{&_{&t;&y|$|}$|}$V<$y|$y|$z|$t;&_{&_D$_D$Z0@&G$%[&&G$}7&}7&V=$<)%<)%9M&Pl$Pl$Pl${D*{D*{D*:D$cs$=3@=3@Sl$xo$xo$`u$`u$:n$)r$lp%`%*et*iz*p*ik+Q2@Q2@>%@RC*q3*H1*SC*}A*G]#,C*z!&TC*QB*]D*H)*oK$3A*^D*b-@/D*=7#ee+wC*(D*_6%=6.&z* n Fu+(W%6z+'C+1p%tq*sq*u.@<:*<:*#d+#d+TO&TO&TO&TO&O4%`E&#d+#d+`E&3]&`E&B#@ok.q9+Ai.1m.1m.Ai.q9+jy.Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@|m.y$$xc+$(+$(+$(+$(+$(+$(+Ea+Ea+xc+xc+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+G|@T_+$(+xc+Ea+Ea+xc+xc+aH@l7 NM+l7 Bz$>( Bz$}f.cI+l7 l7 l7 l7 l7 l7 cI+}f.}f.}f.}f.}f.}f.}f.}f.bH@bH@bH@bH@bH@bH@bH@bH@Ea+Ea+xc+$(+G|@Kh+7P.7P.$(+$(+$(+$(+$(+$(+$(+$(+Kh+Kh+G|@T_+$(+$(+$(+$(+T_+T_+$(+$(+$(+$(+$(+$(+cI+cI+cI+NM+NM+NM+ko.ko.13+NM+l7 cI+ko.13+ko.l7 h]@KL$KL$KL$KL$KL$KL$KL$h^+h^+h^+r-@r-@r-@r-@9&+m|.{'${'${'${'$m|.m|.m|.{'${'$R~$R~$f+#f+#35+NM+q9+(w.q9+q9+q9+q9+xc+xc+:{+:{+:{+:{+9&+9&+", "m@ U@ m@ l& l& {@ U@ l& m@ 2% U@ m@ {@ U@ .* S& S& L) 6[ o^ o^ o^ o^ S& S& [! [! [! L) L) ^{ &_ =_ =_ =_ =_ =_ =_ =_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ ;_ =_ =_ 0c A^.A^.0c =_ =_ =_ =_ =_ 0c 0c 0c A^.A^.=_ 0c X_ 7v@7v@X_ 0c =_ =_ 0c A^.A^.A^.A^.0c *_ x% l#@x% x% x% x% f% f% &5 &5 4{ 4{ p3 p3 +..+..Q6 X_ X_ A^.A^.0c 0c 0c A^.A^.0c 0c 0c =_ =_ &_ M$ U@ .* fd fd * .* 2% fd * * * * fd 5[ .o I> QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@QB@0c 0c 0c A^.A^.X_ X_ X_ X_ 7v@ l.)i+)i+ l.7v@&5 =] .^ .^ .^ .^ .^ .^ .^ C' C' og og og og p: p: ':+':+':+':+':+':+':+':+-J.-J.-J.-J.-J.-J.-J.-J.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, 8H.8H.fL.a, 8H.8H.w4.fL.w4.8H.w4.w4.w4.fL.fL.I> I> I> &5 &5 &5 &5 &5 &5 &5 &5 n3 n3 n3 n3 ~_ ~_ ~_ f% af.6% G6.Y6.P7.ni ni 3!.0>$X* yC*3t 0K+Pe*el e*ot.09.1B*_D*6J%BX&p6*27@.x*.x*-z*yA*vB*@B*@B*@B*ut*ut*B`#vt*FO@O+##@#hB@.*+.*+PX#PX#oo%3w+$ +DA$n~+D)+D)+W_#B%%+*+km$km$&c$&c$sD$sD$(a$(a$4v$4v$/9$pr%)]$)]$)]$)]$4v$^q$p4&p4&*u$*u$*u$8v$8v$nw$bv$_8$5($5($d8$d8$iF$iF$/H$/H$/H$/H$-L$-L$-L$)I$!I$im$c8$qn%!H$)H$!I$!I$>J$>J$V~$V~$V~$V~$-M$%/$4G+}V+3G+[V+[V+AI+zI+zI+Q,+x)+>T@>T@9G+lX+3 @~-+;B+;B+*>+>B+>B+>B+0G+0G+0G+0G+0G+>B+>B+P)@P)@ZK+Q,+:P+:P+:P+:P+:P+:P+:P+zI+zI+zI+zI+zI+zI+zI+zI+Q,+Q,+Q,++*>+my+my+my+_w+e^@e^@ny+ny+ny+ny+ny+ny+ny+ny+my+my+my+my+ny+ny+ny+ny+#Ux#dZ.20#5]+X.+Bt+~V+O,+Ll+N0+Mb+-'@q;@Nl+#/+&k+@_+B)$QL#tB#)w#dt#v0#@R$x<%*o#gi#K0#|G#YC*]C#K@YK+YK+4G+kF$5($5($5($hX+hX+5Z+V.@R)@^K@K@@-(@L,@ q+km+F,@W>$-'$='${e%{e%{e%}b$|s$`u$`u$4U&vo$vo$nt$nt$nt$H#*H#*~x$ot$;r$ot$ot$~x$A)&A)&H#*~x$ot$;r$;r$nt$0p$uV#uV#uV#Iu$Iu$|s$|s$V>$='$C&%Z0@&G$&G$%[&`0@t;&t;&t;&z|$z|$y|$y|$y|$y|$y|$z|$t;&_{&_D$_D$Z0@&G$%[&&G$}7&}7&V=$<)%<)%go%go%go%9M&*G${D*{D*:D$Sp$Sl$Sl$Sl$Sp$xo$:n$:n$:n$)r$ZW&lp%iz*p*Pp+*E#*E#-u+RC*T^@rB*H1*}A*G]#sB*z!&:B*fD*gD*H)*hD*3A*.B*iD*jD*b[%>: uA*]p#kD*G{. e.Ml ,C+Gu+ET&|r%$x+Fu+mh.,0+/p.M]*<:*#d+`E&`E&`E&`E&O4%TO&<:*<:*TO&`E&`E&B#@ok.q9+Ai.1m.1m.Ai.q9+jy.dl.dl.dl.dl.dl.dl.dl.dl.B#@B#@B#@B#@B#@B#@B#@B#@{y%{y%{y%{y%{y%{y%{y%*$@y$$xc+$(+$(+$(+T_+T_+T_+Ea+Ea+xc+xc+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+$(+$(+xc+Ea+xc+xc+$(+T_+bH@}f.cI+l7 aH@9g.9g.9g.NM+cI+l7 l7 l7 l7 cI+NM+}f.}f.}f.}f.}f.}f.}f.}f.l7 l7 l7 l7 l7 l7 l7 l7 xc+xc+$(+$(+T_+G|@G|@Kh+$(+$(+$(+$(+$(+$(+$(+$(+G|@G|@T_+$(+$(+$(+T_+T_+Kh+G|@T_+$(+$(+$(+$(+T_+l7 l7 l7 cI+cI+cI+cI+cI+@$+l7 aH@}f.13+@$+NM+m|.c> {**{**{**{**{**{**{**h^+h^+h^+r-@r-@r-@jk@q(#:{+R~$f+#f+#R~$R~$m|.m|.{'${'${'$R~$R~$f+#f+#cI+jy.(w.q9+dl.q9+jy.Ea+5A.v]#v]#v]#:{+q(#q(#", "m@ U@ m@ l& l& {@ U@ m@ U@ .* 2% {@ l& m@ U@ 6[ L) L) L) L) L) 6[ o^ S& S& [! [! [! L) L) ^{ &_ =_ =_ =_ =_ =_ =_ =_ -_ -_ -_ -_ -_ -_ -_ -_ -_ =_ 0c A^.A^.0c =_ -_ =_ =_ =_ 0c 0c 0c A^.A^.0c 0c A^.A^.A^.A^.0c 0c =_ 0c A^.X_ X_ A^.0c *_ x% l#@l#@l#@x% x% f% f% ~_ ~_ 4{ p3 p3 p3 bT 14 Q6 X_ X_ A^.A^.0c 0c 0c 0c A^.X_ 7v@7v@A^.-_ $% t% 2% 2% .* * * * * 5[ fd * .* * fd ui Hs fL.4=+4=+4=+4=+4=+4=+4=+4=+4=+4=+4=+4=+4=+4=+4=+0c A^.A^.A^.X_ 7v@7v@7v@X_ 7v@ l.)i+)i+ l.7v@&5 u% -^ -^ -^ -^ -^ -^ -^ .^ .^ p: p: p: p: og og ':+':+':+':+':+':+':+':+':+':+':+':+':+':+':+':+w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, 8H.8H.fL.a, 8H.8H.w4.fL.w4.8H.a, a, a, a, w4.w4.fL.I> &5 &5 &5 &5 &5 &5 &5 &5 W_ W_ W_ &5 n3 ~_ ~_ f% af.6% hY.Y6.P7.ni z) Iu+v~.n# yC*[A+V9 J] ;: *h.*z*g<@gi%lD*mD*nD*+y*.2*.x*.x*-z*yA*vB*@B*@B*@B*tt*ut*ut*B`#C@+O+##@#e$@S)@W,@6c#PX#3w+I3$M{$b!$5Z.4W.4W.D)+n~+B%%A0%A0%/a$/a$)]$pr%4v$4v$^q$^q$/9$pr%)]$sD$sD$)]$4v$^q$&u$&u$8v$8v$}0$}0$}0$Ms$4($c9$d9$5($5($d8$jF$jF$%/$%/$/H$/H$-L$-L$.@%~J$Ls$im$c8$qn%!H$)H$!I$Ls$>J$>J$V~$V~$V~$V~$-M$%/$4G+}V+3G+[V+[V+AI+zI+zI+Q,+x)+>T@>T@9G+lX+3 @~-+Y.@;B+0G+>B+P)@>B+0G+*>+0G+0G+0G+>B+>B+P)@P)@ZK+x)+zI+zI+zI+zI+zI+zI+zI+zI+zI+zI+zI+zI+zI+zI+zI+Q,+Q,+Q,++*>+my+my+_w+_w+J@@J@@ny+ny+ny+ny+ny+ny+ny+ny+_w+_w+my+my+ny+ny+4 @4 @P,+P,+w)+,B+}=@ED+Jl+FD+(P+PK++w+(T+$9($uq#vB#[T#C_$Ey#S%$WF#.}#.}#oq#df#df#Pg+(+@gi+gi+[]+^_+Ob+xp+v)+rr+wD+$C&%Z0@W=$&G$`0@`0@y|$y|$y|$z|$z|$t;&t;&t;&y|$y|$z|$t;&_{&_D$_D$Z0@&G$%[&&G$}7&}7&V=$<)%<)%ho%ho%ho%go%P6**G$*G$7C*xo$Rl$Rl$Sl$Sp$Sp$Ft$Ft$Ft$Ft$|s%|s%io%io%/n$(n$`u$xo$Gt$cs$yV#cs$cs$Gt$Gt$Sp$Sp$xo$xo$Sp$Sp$$w$:V$9S$xV#xV#xV#rQ$rQ$rQ$'O$'O$'O$'O$'O$'O$'O$'O$SG$SG$SG$SG$#F$#F$#F$#F$fc@fc@3}@}9@}9@|9@:a@:a@19@|T@%7@rI+^P+ZM+dr+dr+~G+~G+er+er+ZM@ZM@cc@YH@X=&W=&W=&(S&1+*o@*o@*l@*39@39@8s#8s#Ip#49@59@XA#hh#c&@gY#H6@0$@e^@Z.@O)@Q,@t<@a&@P,@H6@*9@4N#3k#K,@.B+.B+.B+.B+.B+.B+.B++B+.B+*b$t'#Z;+.B+vr+#k+^/+-9@_x@_x@;w+up+@B+,w+fz@6o@0=@0=@O)@O)@9=@O)@ny+,B+K)@S##{]%{]%{]%S##w)+0+QD*RD*-.%TO&`E&3]&3]&3]&#u%`E&#d+#d+`E&O4%3]&{y%ok.q9+Ai.1m.1m.Ai.q9+jy.q9+q9+q9+q9+q9+q9+q9+q9+B#@B#@B#@B#@B#@B#@B#@B#@{y%{y%{y%{y%{y%{y%{y%*$@y$$xc+$(+$(+T_+T_+G|@G|@Ea+Ea+xc+xc+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+Ea+Ea+Ea+Ea+xc+$(+G|@Kh+}f.}f.bH@}f.}f.bH@9g.JI$cI+l7 }f.bH@bH@}f.l7 cI+}f.}f.}f.}f.}f.}f.}f.}f.cI+cI+cI+cI+cI+cI+cI+cI+$(+$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+T_+$(+xc+Ea+xc+$(+T_+G|@Kh+G|@$(+xc+Ea+Ea+xc+$(+}f.}f.}f.}f.}f.}f.}f.}f.cI+l7 }f.l7 cI+cI+l7 R~$$.@jk@jk@jk@jk@jk@jk@jk@jk@jk@jk@{**{**KL$KL$PS@v]#35+-V@-V@35+f+#{'$m|.{'${'${'${'$R~$R~$f+#cI+jy.QL+q9+dl.q9+jy.5A.]! M8@h]@h]@h]@q)@q(#", "m@ U@ m@ l& l& {@ U@ U@ 2% .* 2% {@ l& {@ m@ -^ o^ L) S& S& [! 6[ o^ S& S& [! [! [! L) L) ^{ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ -_ =_ 0c X_ X_ 0c =_ -_ =_ =_ =_ 0c 0c 0c A^.A^.~_ ~_ ~_ &_ &_ ~_ ~_ ~_ &_ ~_ &5 W_ W_ &5 ~_ 5% x% x% x% x% x% f% f% f% &_ &_ 5! 4{ p3 14 -5 -5 4z X_ X_ A^.A^.0c 0c =_ =_ A^. l.)i+)i+X_ -_ 0' Y_ 2% 2% 2% .* * fd fd 5[ fd * .* * fd ui )O w4.6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@A^.A^.A^.X_ 7v@7v@ l. l.X_ 7v@ l.)i+)i+ l.7v@&5 u% -^ -^ -^ -^ -^ -^ -^ o^ -^ -^ .^ p: p: og og w4.':+w4.':+w4.':+w4.':+8H.B{$8H.B{$8H.B{$8H.8H.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, 8H.8H.fL.a, 8H.8H.w4.fL.w4.8H.a, 8H.8H.8H.a, w4.fL.fL.&5 &5 &5 &5 &5 &5 &5 &5 ;b.;b.{_ W_ &5 n3 ~_ 5% af.6% hY.iI.P7.ni z) Iu+ze+-$ SD*[A+!p*;9 el ;~.wu.TD*UD*cj*VD*WD*XD*x2*.2*.x* u*yA*yA*yA*01%01%tt*tt*YD*Yf%C@+O+##@#e$@!}@S)@> $6c#> $k[+Hz$[s#6)#5)#5)#4W.5Z.n~+y1#y1#/a$Fs%pr%pr%^q$^q$96&96&/9$pr%)]$rr%rr%(a$4v$^q$7v$7v$8v$}0$}0$K$+K$+Rj$b8$b8$d9$d9$5($5($kF$jF$jF$jF$/H$/H$)I$)I$~J$WL$Ks$im$c8$qn%!H$)H$!I$Ks$>J$>J$V~$V~$V~$V~$-M$%/$4G+}V+4G+[V+5&@AI+5G+zI+w;@x)+X.@>T@cB@lX+H@@~-+~-+f^@0G+>B+P)@>B+0G+*>+0G+0G+0G+>B+>B+P)@P)@P)@x)+zI+zI+zI+zI+zI+x)+x)+x)+x)+x)+x)+x)+x)+x)+x)+Q,+:P+:P++*>+my+my+_w+(w+J@@J@@ny+ny+ny+ny+ny+ny+ny+ny+_w+_w+my+my+ny+ny+4 @4 @w)+w)+,B+,B+}=@ED+Jl+wI+FD+PK++w+(T+ay+@w+~P+gp+hp+It+(G+-'@t)+6~+Be@:D*30#2X+Fn+I1#'7$oz#ZD*Os%@ +3)#wy+4w+4w+wy+3)#@ +5)#4W.D)+B%%+*+/a$Fs%pr%ln$>b$'p$/-+#*%u4#[/+Rb+(8$H,@2]+(_+O,+&4+O0+N0+gK@/G+s=@Nl+Sl++_+@4+V4#tq##t*bt#dt#wc#@R$`D**o#Q[$6l#Ze% E*.E*-w*+E*@E*%u##E*$E*%E*&E**E*HC*=E*-E*;E*>E*,E*aD*'E*!K#V`#as*(I#xz*xz*Mu*{z*eD*$f%Q0#~C*~C*Cv*Xn#xc#dt#uq#'w#;X#sq#,l#Tn#oB#oB#oB#df#df#df#Pg+(+@(+@gi+-2+Mb+^_+(|+1]+v)+rr+Rt+:w+*>+8$@8$@^K@cB@cB@x;@x;@,T@w;@w;@=>+R)@zI+5G+yM@}{#pw$pw$pw$u_%}{#BM@~K@x;@^K@e^@d^@mm+@q+T;@x=@7)$6)$V>$g>${e%='$Et$E5&Ew$`u$4U&4U&vo$vo$nt$nt$GH$GH$)E*)E*GH$Op$I#*I#*KD*KD*K$*8'*I#*Pp$Op$Qp$0p$uV#uV#uV#3u$Iu$`u$|s$Et$|s$(;$_D$Jw$fF&}7&V=$8x%8x%dl$<{&<{&t;&_{&_{&y|$y|$z|$t;&_{&_D$_D$h>$&G$&G$fF&Lp$Lp$<)%Pl$Pl$6*>6*-.&)E$`u$3u$xo$xo$Sp$)r$)r$ v$Ft$Ft$Ft$YS&YS&YS&YS&Ft$3u$zb$Gt$21@yV#yV#cs$Gt$Gt$Sp$xo$xo$xo$xo$Sp$$w$:V$:V$xV#!x$xV#+O$rQ$+O$'O$)O$'O$)O$'O$)O$'O$)O$#F$#F$#F$#F$#F$fc@#F$fc@gc@gc@`6@3}@3}@}9@hc@hc@fY#OS#29@]V+ZM+nI+nI+nI+gp+gp+Ht+]V+ZM@YH@p'%w)%OS#v~@29@%7@4k@^P+8*$8*$mQ&Ip#8s# q+s9#4k#59@XA#L,@(P+H6@H6@0$@0$@Z.@O)@Q,@a=@a&@H6@H6@gY#,_#4N#K,@.B+.B+.B+VH@VH@VH@VH@o;@ur+;R@_&#o8+:c@.B+#k+.B+`K+;w+up+-w+-w+>w+E^%fz@6o@0=@0=@O)@O)@O)@O)@my+w)+K)@S##{]%#r%#r%#r%,B+w)+w)+p*ik+-u+QA+]=#mr%!E*AL$i<#=X&ox*~E*{E*]E*^E*!5*3A*.B*ND*/E*Q[%Uw.{^.kJ.zR$y:%L+ DU% X+ns%ET&vC#xr*mh.Nc&~h&(E*QD*M]*TO&3]&O4%O4%O4%Fc%O4%`E&`E&O4%#u%O4%'W+ok.q9+Ai.1m.1m.Ai.q9+jy.jy.jy.jy.jy.jy.jy.jy.jy.B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@|m.y$$xc+q9+$(+dl.G|@Ai.G|@]$@Ea+jy.xc+q9+$(+dl.T_+T_+T_+T_+T_+T_+T_+T_+T_+5A.5A.5A.Ea+xc+T_+Kh+7P.cI+bH@Bz$bH@l7 }f.>( f^+l7 }f.bH@aH@aH@bH@}f.l7 }f.}f.}f.}f.}f.}f.}f.}f.NM+NM+NM+NM+NM+NM+NM+NM+$(+$(+$(+$(+xc+xc+xc+xc+T_+T_+T_+T_+T_+T_+T_+T_+xc+xc+Ea+5A.Ea+$(+G|@Kh+G|@$(+xc+5A.]! 5A.Ea+Ea+}f.}f.bH@bH@bH@bH@bH@bH@Bz$l7 ko.cI+aH@Bz$}f.5A.u]#r-@x{ r-@x{ r-@x{ r-@y*$KL$y*$A<$%.@L8@8' f!+35+-V@13+)g@ko.35+l7 {'$bH@{'$}f.{'$l7 R~$cI+cI+]$@QL+q9+q9+q9+]$@)> {! {! ]! ]! 5A.h]@v]#", "S& [! [! [! L) L) L) S& L) 6[ L) S& S& [! 6[ S& S& S& [! L) L) 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ =5 Y_ M$ t% o3 o3 Y_ M$ T$ #% #% !% !% #% #% T$ f% g% g% g% g% g% g% g% :j.:j.m` -H.R_ *_ af.v% Q_ Q_ Q_ Q_ Q_ Q_ Q_ Q_ ^{ ^{ Q_ Q_ y% u% u% u% v% af.af.af.af.A^.A^.A^.A^.X_ X_ X_ W5 }4 >_ oj $w 4{ 3{ 3{ 4{ H{ G{ 4{ 2{ 5! G{ H{ H{ G{ 5! &_ =5 p: og C' og .^ o^ L) .^ .^ .^ .^ .^ .^ .^ =] fL.;H.;H.s3.s3.s3.s3.s3.6% 6% i% h% s3.;H.5v@5v@5% f% f% v% v% I> I> fL.w4.fL.v% f% f% v% fL.w4.Y_ .* * fd fd fd fd * 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ &5 I> W_ fL.{_ w4.;b.a, ;b.fL.n3 I> W_ fL.&5 f% %% f% w4.a, fL.I> fL.w4.v% I> a, 8H.8H.a, I> v% w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, a, a, a, a, a, ;b.;b.{_ {_ W_ &5 &5 &5 n3 n3 ~_ ~_ &_ &_ &_ 4% m` WW.VW.5!.$9.ni ni u}+Zn n# yC*Dl dM+N<.+6.Fy _E*jD*WB%:E*YG%q!@=m$Uv*p6*@GH@Tb+#@##@#Tb+_-+W,@7)#7)#y1#A0%9T+# +5Z.'>+%a@%a@ki@,>+4[%=7$Vk$CM#Vy$Gx$/v${m$*c$!U#Hx$dw$/v${m$jm$]m$ar$ar$Sj$6F$-i&Ms$09$Ms$Hs$a8$47$d8$d8$d8$d8$d8$d8$d8$d9$d9$lF$lF$lF$lF$lF$d9$im$c8$c8$c8$!H$!H$-I$-I$..&>M$V~$_H$_H$_H$-M$%/$5Z+gX+5Z+4G+XK+4G+~K@2 @7G+8G+7G+8G+G@@cB@G@@cB@Q)@2T+ZK+lX+lX+9G+3 @3 @R,@P)@O)@4 @4 @4 @O)@t<@lX+B+>B+>B+>B+O)@lX+zI+AI+AI+zI+zI+>T@>T@3 @0G+*>+_w+(w+6T+J@@0$@K@@my+;B+;B+;B+;B+;B+;B+;B+/w+Y.@;B+*>+0G+0G+*>+ny+my+K@@K@@K@@K@@K@@L@@L@@b&@b&@s<@s<@s<@yb#yb#+(K@~M#cp+I,@RK+}z@4T+&>+1]+vp+G:+G:+}T+:V+Nb+nD+$4+Xg+=g$=2+MP#Iy#at#z!$U:%v<%}E*l1$bV#:X#NR#hz#|E*1E*2E*3E*4E*qD*5E*6E*H/#7E*8E*9E*0E*aE*bE*cE*dE*eE*fE*YY#xg%S0#S0#R0#R0#~z*~z*K0#_u*0v*Cv*]$$W%$yc#rf#vq#xq##t*ML# G#>f+V4#$l7$>y$w,$|s$E5&1s$1s$wo$wo$wo$4U&4U&4U&Qp$Qp$Qp$Qp$Rp$Rp$Rp$Rp$~x$~x$~x$ot$ot$;r$;r$;r$$w$AM$vV#G=%ap$4P$-r$Ew$,t$1s$:D$7C**G$'E$]n$gE*C&%X0@G1$]B$G1$8c$8c$8c$T2$P1$>y$>y$V'$V'$#x%e6$_D$h>$y+&=r$LG&KG&(n$(n$QG$to$to$to$GH$)E*Np$*Y%)E$7C*YS&YS&(n$)r$)r$)r${x${x$ v$cs$cs$cs$cs$cs$8j$0j$uk$J,+*3@|1@|1@;:@Sl$Sl$AM$AM$AM$AM$AM$AM$#w$#w$+O$.O$0$,_#iE*5L#OK+(P+OK+ N+uy#1N#2N#_t#Wv##w+!G+ fL.fL.fL.a, w4.I> v% v% I> w4.Es Y_ .* * fd fd fd fd * 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ &5 &5 W_ W_ {_ {_ ;b.;b.;b.W_ n3 &5 W_ {_ &5 ~_ 5% I> a, a, w4.I> fL.w4.I> w4.8H.xj+xj+8H.w4.I> w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, a, a, a, a, a, ;b.;b.;b.{_ {_ W_ W_ W_ &5 n3 n3 n3 ~_ ~_ &_ 5% l` WW.VW.6!.6!.ni ni Iu+zh.X* Ks*Dl *9 N<.el ^i.yE*zE*AE*WB%YG%BE*CE*DE*p6*p6*.x* u*3W&xX&GY&GY&e>@e>@EE*y4@*1@hB@#@#*1@4[%.*+7)#1|+A0%km$z1#6)#5Z.'>+%a@%a@ki@,>+4[%=7$Vk$CM#Vy$Vy$/v$jm$*c$Wk$/v${m${m$jm$]m$]m$ar$ar$Sj$6F$-h&Hs$Rj$nw$Gs$%K$d8$d8$d8$d8$d8$d8$d8$d8$d9$d9$d9$d9$d9$d9$d9$d9$im$im$im$c8$)H$)H$!H$!H$>M$g>&(H$_H$:H$_H$>L$/H$/H$iX+5Z+XK+XK+XK+~K@~K@7G+7G+7G+7G+G@@G@@G@@cB@w;@Q,+B+>B+4 @ny+ny+4 @0=@O)@lX++*>+ny+ny+ny+ny+Z.@*>+zI+VK+AI+AI+zI+zI+x)+9G+>B+0G+my+_w+J@@e^@L@@K@@my+;B+;B+;B+;B+;B+;B+;B+Y.@;B+*>+0G+0G+0G+0G+ny+K@@K@@K@@K@@K@@K@@L@@L@@b&@b&@c&@s<@s<@z$+z$+ay+gp+Mn+-'@jD+'-+r=@Be@#f++3G+3G+7~@7~@7~@7~@7~@3G+iX+WL$hm$WL$WK+}{#XK+AM@|#%9=@O,@!B+ih# q+F,@S;@41@6)$='$l7$>y$l7$d6$|s$1s$1s$wo$wo$4U&vo$vo$nt$Qp$Qp$Qp$Qp$Qp$Qp$Qp$Qp$~x$~x$ot$ot$ot$;r$;r$+F$7S$tV#$I%G=%>o$>o$wo$4U&-r$-r$so$)E$=G$YE*z**x,$+9@W<@s|$vM@}s$ti%t8$8c$O1$8c$l7$l7$>5$>5$8a$5c$|b$|b$_n$:D$7C*YS&QG$to$GH$Op$Op$Op$ZE*`E*1%**Y%-.&P6*P6*P6*(n$|s%)r$)r${x${x$cs$cs$=3@=3@Sl$)x$9j$Nc$0j$Oc$J,+K,+*3@*3@Sl$Sl$AM$AM$AM$AM$AM$AM$#w$#w$.O$.O$iR$iR$bC$bC$.O$.O$.O$.O$.O$.O$.O$.O${`#yV#yV# 7@EZ$aP$tQ$EZ$EZ$EZ$EZ$EZ$EZ$EZ$EZ$19@|T@v~@5X+er+Ht+#w+Ft+~P+#w+ZM+^P+re@]O$ F*.F*=L$ic@rD+rD+#/+q;@/G+[T+^G+~P+~P+L,@L,@L,@L,@]`#!B+Kl+vr+@k+-w+tr+L)@Z.@0&@0=@a=@)~%;0$Tw&+F*iE*5L#Kx#(P+OK+ N+1N#1N#kh%j'$j'$ZM+er+@w+uy#OK+(P+:x@:x@:x@:x@:x@:x@:x@:&@:&@wI+{k@;I$v)%jb#6o@6o@jb#qt$qt$qt$qt$qt$qt$qt$qt$0=@0&@Z.@K@@e^@6T+L@+;m+&R#&R#&R#&R#G$+G$+_/+_/+|O#H&+Sr+hP+bw+ik+Pp+RC*;t*@F*#F*o#$=q%$F*%F*&F*Ai**F*RB*So$=F*VD*C]*-F*.H.]z$kF.;F*Xc B)*|$ zw*aM.os%l1+aM.{**wE*7P.h~ >n.<:*<:*#d+TO&`E&3]&O4%3]&3]&3]&3]&3]&3]&O4%3&$*$@$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+{y%{y%{y%B#@B#@B#@B#@B#@3&$3&$3&$'W+'W+{y%{y%*$@H0@(w.(w.(w.(w.(w.(w.(w.QL+QL+QL+QL+QL+(w.h)@Ai.$(+$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@cI+l7 bH@aH@aH@aH@bH@}f.l7 l7 l7 l7 l7 l7 l7 l7 }f.}f.}f.}f.}f.}f.}f.}f.bH@bH@bH@bH@bH@bH@bH@bH@NM+cI+l7 }f.bH@}f.l7 cI+}f.l7 cI+cI+l7 }f.aH@Bz$T_+T_+$(+xc+5A.Ea+xc+T_+Ea+xc+T_+G|@T_+xc+5A.{! $(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+[y+[y+[y+[y+[y+[y+[y+[y+%U.%U.%U.%U.%U.%U.%U.%U.,W+,W+,W+R}%/w./w./w.$U./w./w./w./w./w./w.", "S& [! [! [! L) L) L) S& L) o^ 6[ [! S& [! 6[ [! [! [! L) L) L) 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ U@ m@ {@ m@ .* fd * 2% .* .* 2% U@ U@ 2% .* o3 5% *_ *_ *_ *_ *_ *_ *_ QB@QB@af.af.g% g% *_ 5% Q_ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ o^ o^ o^ -^ u% n3 A^.A^.A^.A^.A^.A^.A^.A^.X_ X_ 7v@X_ X_ A^.0c H{ 4{ 2{ 2{ 4{ G{ G{ 4{ 5! 4{ 4{ G{ G{ 4{ 4{ Y_ =5 -^ -^ -^ -^ .^ p: p: .^ .^ .^ .^ .^ .^ .^ =] x% <4 <4 s3.;H.;H.5v@5v@s3.s3.;H.;H.;H.;H.;H.;H.I> I> I> fL.fL.fL.w4.w4.a, w4.w4.fL.fL.w4.w4.Es Y_ .* * fd fd fd fd * 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ W_ W_ W_ W_ {_ {_ {_ {_ ;b.W_ &5 &5 {_ {_ &5 ~_ I> a, cl+8H.w4.I> fL.w4.w4.a, cl+xj+xj+cl+a, w4.w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, a, a, a, a, a, |x.|x.;b.;b.;b.{_ {_ {_ W_ W_ &5 &5 n3 n3 n3 f% R_ 1% 9, H;@P7.V[&z) !<*Yn z* St Dl /c N<.gF.^y.r^%'2%>F*AE*,F*BE*CE*_t*p6*p6*.x* u*'F*[E*GY&GY&Q%$EE*Q%$St%#@#e$@hB@*1@4[%.*+1|+y1#km$&c${l$n~+5Z.'>+%a@%a@ki@,>+4[%=7$Vk$CM#Zz$Zz${m$jm$Wk$Wk$*c$*c$*c$*c$]m$ar$ar$ar$=k$6F$;h&=J$nw$Hs$,H$4($5($5($5($5($5($5($5($5($d9$d9$d9$d9$d9$d9$d9$d9$;u$;u$;u$;u$!I$!I$)H$)H$>J$ K$_H$:H$:H$:H$~]$)I$/H$iX+5Z+XK+XK+XK+~K@~K@F@@F@@F@@F@@DO@DO@DO@DD+8G+x)++ny+my+my+ny+0&@4 @lX++[V+[V+[V+=>+=>+B+0G+ny+K@@L@@L@@L@@Z.@my+my+my+my+my+my+my+my+my+ny+4 @O)@t<@O)@O)@O)@K@@K@@K@@K@@K@@K@@L@@L@@a$@b&@c&@c&@s<@s<@z$+ay+#w+Mn+{G+YM@'-+r=@Be@#f+)F*2X+6*P6*P6*/n$(n$(n$)r$)r$)r$)r$Gt$Sp$Sl$Rl$Rl$uk$vk$Nc$Nc$0j$Oc$J,+)x$Ab$Sl$Sl$AM$AM$AM$AM$AM$AM$#w$#w$.O$.O$iR$iR$bC$bC$.O$.O$.O$.O$.O$.O$.O$.O${`#yV#cs$ 7@EZ$tQ$tQ$qR$tQ$tQ$tQ$tQ$tQ$tQ$tQ$uQ$XH@29@[R+er+Ht+#w+~P+~P+dr+ZM+pI+kg@4F*5F*A]&DD@bi@Nl+Nl+Nl+/G+[T+^G+}G+~P+~P+L,@L,@L,@L,@]`#!B+Kl+vr+@k+-w+tr+L)@Z.@4 @0=@0=@kb#;0$Tw&+F*6F*6N#Kx#(P+ N+ N+`M+1N#kh%kh%j'$sI+oI+tI+uy# N+K,@fh#:x@:x@:x@:x@:x@:x@:&@:&@wI+{k@;I$v)%jb#6o@6o@jb#t<@t<@t<@t<@t<@t<@t<@t<@O)@4 @ny+my+_w+&N+;m+;m+&R#&R#2V#2V#'v@'v@lK@lK@Gy+R^@Sr+hP+bw+ik+Pp+b#@A^%Ou@7F*8F*9F*BL$0F*aF*Pk$# &bF*nz*=F*cF*dF*eF*fF*gF*hF*gP#Xf @$ ~@ (&=e@He+~4.{q%{**h^+G|@/{ `b&TO&TO&`E&3]&O4%O4%#u%`E&`E&3]&O4%#u%Fc%Fc%^b+*$@$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+B#@B#@B#@B#@B#@{y%{y%{y%'W+'W+'W+{y%{y%B#@B#@|m.H0@q9+q9+q9+q9+q9+q9+q9+]$@jy.q9+dl.dl.dl.dl.q9+$(+$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@}f.bH@aH@aH@aH@bH@}f.l7 bH@bH@bH@bH@bH@bH@bH@bH@}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.aH@aH@aH@aH@}f.l7 NM+ko.NM+NM+NM+NM+l7 }f.aH@Bz$]! $(+Kh+T_+]! {! $(+oh.xc+$(+G|@G|@G|@$(+Ea+5A.$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+[y+[y+[y+[y+[y+[y+[y+[y+%U.%U.%U.%U.%U.%U.%U.%U.[y+[y+%U.%U.%U.Ov+Ov+Ov+%U.%U.%U.%U.%U.%U.", "S& [! [! [! L) L) L) [! 6[ o^ 6[ [! [! L) o^ L) L) L) L) L) L) 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ m@ {@ l& m@ .* fd fd .* * .* 2% 2% 2% 2% .* =5 5% *_ *_ *_ *_ *_ *_ *_ af.af.af.g% g% g% *_ 5% y% o^ o^ o^ o^ o^ o^ o^ 6[ 6[ o^ o^ o^ o^ o^ y% n3 A^.A^.A^.A^.A^.A^.A^.A^.X_ X_ 7v@7v@7v@7v@7v@G{ 4{ 5! 5! 4{ 4{ 4{ 4{ 4{ 4{ 4{ 4{ 4{ 4{ 4{ o3 =5 -^ 6[ 6[ 6[ -^ og C' .^ .^ .^ .^ .^ .^ .^ =] j% h% <4 s3.;H.5v@.l..l.5v@5v@5v@5v@;H.;H.;H.;H.fL.fL.fL.fL.w4.w4.w4.w4.a, a, a, w4.w4.a, a, Es Y_ .* * fd fd fd fd * 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ W_ W_ W_ W_ {_ {_ {_ {_ |x.{_ &5 W_ {_ {_ W_ n3 a, cl+xj+cl+w4.I> fL.w4.w4.a, 8H.cl+cl+8H.a, w4.w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, a, a, a, a, a, ;b.;b.;b.;b.;b.;b.;b.;b.{_ W_ W_ W_ &5 &5 n3 v% *_ 6% G6.Y6.Y6.V[&' .7H.v~.Y* > @Dl uO+/8 Ex *g+Q[%v>&FF%AE*,F*16*DE*Zt*p6*p6*.x* u*'F*[E*GY&GY&GH@GH@GH@s4#hB@e$@hB@*1@4[%_-+y1#A0%&c$/a$98$B%%5Z.'>+%a@%a@ki@,>+4[%=7$Vk$Vk$RA$RA$jm$*c$Wk$Wk$!U#!U#Wk$Wk$ar$ar$ar$]m$T4$6F$;h&-J$nw$Hs$,H$4($5($5($5($5($5($5($5($5($d9$d9$d9$d9$d9$d9$d9$d9$Js$Js$Js$;u$Ls$!I$!I$!I$ K${J$_H$:H$:H$s$%T@>T@x)++;B+my+_w+my+ny+0&@4 @lX++*>+ny+ny+ny+ny+Z.@*>+x)+[V+[V+[V+=>+Q,+ZK+ZK+>B+O)@0&@0&@P,@P,@P,@P,@K@@my+my+my+my+my+my+my+ny+4 @O)@t<@t<@t<@t<@O)@K@@K@@K@@K@@K@@K@@L@@L@@a$@a$@c&@c&@c&@s<@s<@}R+dr+[T+/G+qy+`g+O2@[$@:D*@f+At+{}$x4#5d$RA$Z}&9v%k %3)#9Z+9Z+=1@=1@f$@f$@V##Ub+@*+@ +B%%A0%PX#!U#J1#^-+sg@C,+b=#4]+> +$t@Qb+k0+!-+Pb+Rn+Rn+2Z+2Z+xp+R0+^/+Yn+{k+}&@^i#Yt$!F*x7#oc#kf#rc#G~$S{$xc#.o#B0#*5#YC*2F*iF*jF*kF*lF*mF*nF*oF*pF*qF*rF*sF*tF*uF*vF*wF*xF*yF*VB#=K#(z#St#iT#:I#O7#Ic#Fc#hi#Cv*JD*Xn#W%$xc#yc#w0#ct#D7#!w#A7#LL# G# G#i0#mc#if#if#Pg+6e@6e@$a@Sl+Sl+mD+Mb+;2+^_+R0+vr+@k+wI+Y.@X.@R)@R)@o$G=%G=%$I%Aq$0p$vo$vo$wo$wo$so$so$YE*.F$.F$B'%+9@_:@d,%i*%S2$X0@t8$8c$t8$:u%g>${e%e6$e6$5c$}b$y+&y+&_n$:D$7C*7C*QG$QG$GH$GH$Op$Pp$3F*3F*ZE*)E*>6*P6*/n$/n$(n$(n$Ft$Ft$Ew$`u$3u$3u$Rl$Rl$Sl$)x$9j$0j$0j$Oc$Oc$J,+)x$Ab$=3@=3@Ld$Ld$Ld$Ld$Ld$Ld$#w$#w$.O$.O$iR$iR$bC$bC$.O$.O$.O$.O$.O$.O$.O$.O${`#yV#cs$ 7@qR$tQ$EZ${`#aP$aP$aP$aP$aP$aP$aP$6*$XH@29@[R+]V+oI+dr+dr+nI+dr+ZM+pI+Kf%4F*zF*5F*AF*bi@qD+Nl+Nl+[T+^G+}G+jc@~P+~P+L,@L,@L,@L,@]`#!B+Kl+vr+@k+-w+tr+}=@ny+4 @0&@0=@kb#kb#w9#R6#X|#SR$G6@K,@ N+ N+`M+`M+kh%kh%j'${P+sI+uy#3P#OK+K,@qr$:x@:x@:x@:x@:x@:x@:&@:&@wI+{k@;I$v)%jb#6o@6o@jb#O)@O)@O)@O)@O)@O)@O)@O)@O)@4 @ny+my+_w+&N+;m+;m+&R#eD+'v@'v@'v@RA+RA+RA+Gy+R^@Sr+>p*bw+ik+Pp+b#@{'#Pt*BF*CF*~E*W~&DF*EF*FF*GF*mz*oE*sA*HF*IF*E'*F)*gF*JF*_k.{[ M; T% B' YT#He+C<&YT#{**h^+T_+*$@{y%`E&3]&3]&O4%O4%#u%#u%O4%O4%O4%#u%#u%Fc%Fc%+d+*$@$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+!D+`b&`b&B#@{y%{y%'W+'W+{y%B#@B#@B#@B#@B#@B#@|m.*$@$(+q9+$(+q9+$(+q9+$(+6g+xc+dl.G|@1m.G|@dl.$(+$(+$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@aH@aH@aH@bH@bH@}f.l7 l7 aH@aH@aH@aH@aH@aH@aH@aH@}f.}f.}f.}f.}f.}f.}f.}f.cI+cI+cI+cI+cI+cI+cI+cI+9g.Bz$Bz$aH@bH@l7 cI+NM+NM+NM+NM+NM+cI+l7 }f.}f.]! xc+T_+$(+Ea+Ea+T_+7P.T_+T_+G|@G|@G|@T_+xc+Ea+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+[y+[y+[y+[y+[y+[y+[y+[y+%U.%U.%U.%U.%U.%U.%U.%U.Ov+NM+Ov+NM+Ov+NM+Ov+NM+%U.cI+%U.cI+%U.cI+", "S& [! [! [! L) L) L) [! 6[ o^ o^ L) [! L) o^ 6[ 6[ 6[ 6[ 6[ 6[ L) L) 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ m@ {@ l& m@ .* fd fd .* 2% U@ U@ m@ m@ U@ U@ Y_ 4% R_ R_ R_ R_ R_ R_ R_ R_ R_ *_ *_ *_ g% g% f% y% o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ 6[ Q_ n3 A^.A^.A^.A^.A^.A^.A^.X_ X_ X_ X_ X_ 7v@7v@7v@5! 4{ G{ G{ 4{ 4{ 4{ 4{ 4{ 4{ 4{ 4{ 4{ 4{ 4{ o3 o3 o^ 6[ L) 6[ -^ p: C' .^ .^ .^ .^ .^ .^ .^ =] 5% g% af.QB@4=+6v@@[+@[+6v@6v@6v@6v@4=+4=+4=+4=+w4.w4.w4.w4.fL.fL.fL.fL.w4.a, a, a, a, a, a, si Y_ .* * fd fd fd fd * 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ {_ {_ {_ {_ W_ W_ W_ W_ |x.{_ W_ W_ {_ ;b.W_ n3 8H.cl+cl+8H.fL.I> fL.a, fL.w4.w4.a, a, w4.w4.fL.w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, a, a, a, a, a, {_ {_ {_ {_ ;b.;b.;b.;b.{_ W_ W_ W_ &5 &5 n3 v% *_ 6% G6.Y6.Y6.V[&' .7H.Yn (= fg+eF+vO+KF*Ex 1{%Q[%v>&LF*MF*,F*BE*CE*_t*p6*p6*NF*ab*'F*[E*UI#UI#y4@GH@y4@s4##@#e$@hB@*1@4[%.*+1|+A0%&c$/a$98$+*+5Z.'>+%a@%a@ki@,>+4[%=7$CM#Vk$RA$L[#Wk$Wk$Wk$Wk$!U#!U#Wk$Wk$ar$ar$ar$]m$T4$5F$-h&Hs$Ms$nw$a8$4($d9$d9$d9$d9$d9$d9$d9$d9$!l$!l$!l$!l$!l$!l$!l$!l$Js$Js$Js$;u$Ls$!I$!I$!I${J${J$_H$_H$:H$:H$T@>T@x)+B+>B+O)@O)@O)@O)@0=@>B+>T@TK+zI+=>+B+O)@0=@0&@a&@P,@*9@L@@K@@my+my+my+my+my+my+my+ny+4 @O)@t<@t<@t<@t<@O)@K@@K@@K@@K@@K@@K@@L@@L@@a$@a$@G6@c&@c&@c&@s<@}R+/P+}G+^G+b$@G:+Qn+%v$Y[#>]+E&+A,+7o@A4#RA$Z}&9v%k %3)#9Z+9Z+=1@=1@f$@f$@Ub+Ub+|f+@ ++*+A0%6c#~}%z)+S,+|z@C,+FM@4]+> +ar+n;@qd+mB#V&+Rn+vp+vp+2Z+@k+-w+tp+`K+{k+RO@(k+qi+PL#OF*PF*jf#3i#rc#QF*xc#.o#B0#f+W4#${e%l7$>y$8a$8a$1s$1s$wo$4U&vo$nt$Ju$Ju$;r$;r$;r$ot$ot$~x$~x$H#*ot$ot$;r$;r$Qp$Qp$Rp$(V$ap$G=%G=%$I%0p$0p$vo$vo$4U&wo$so$BT%.F$.F$.F$|b$Z0@W<@d,%d,%S2$X0@t8$P1$t8$:u%g>$g>$e6$e6$d6$|s$y+&=r$=r$=r$:D$7C*7C*7C*QG$QG$Op$Pp$Pp$Pp$3F*GH$-6*/n$/n$/n$(n$(n$:n$:n$n7$m7$yo$q$>q$Gt$Gt$$w$$w$$w$$w$$w$$w$#w$#w$.O$.O$iR$iR$bC$bC$.O$.O$.O$.O$.O$.O$.O$.O${`#yV#cs$yV#qR$EZ$qR$ 7@aP$aP$aP$aP$aP$aP$aP$6*$|T@29@5X+[R+Ht+oI+ZM+ZM+oI+ZM+pI+kg@Lf%4F*%G*N>%bi@qD+Nl+Nl+[T+^G+}G+jc@~P+~P+L,@L,@L,@L,@]`#!B+}R+vr+@k+-w+tr+}=@ny+4 @4 @4 @be#kb#Z1*Tw&+F*W<#gY#:x@ N+ N+`M+`M+YM+YM+kh%{P+{P+uy#uy#}R+K,@,N$:x@:x@:x@:x@:x@:x@:&@:&@wI+{k@;I$v)%jb#6o@6o@jb#O)@O)@O)@O)@O)@O)@O)@O)@O)@4 @ny+my+_w+&N+;m+;m+&R#2V#2V#'v@RA+RA+K_@G&+Gy+R^@Mp*>p*bw+-u+5m+b#@{'#AL$mr%&G*ox*tA%*G*=G*-G*3Z%;G*oK$G)*>G*,G*K4&'G*gF*)G*]y.Z: R|@T% cQ#{q%He+C<&1M@jk@h^+|m.y$$'W+3]&O4%O4%O4%#u%#u%#u%Fc%Fc%Fc%#u%#u%O4%O4%3&$*$@$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+!D+`b&`b&B#@{y%{y%'W+'W+B#@B#@B#@B#@B#@B#@B#@*$@*$@u]#$(+u]#$(+u]#$(+u]#Ea+:{+T_+US+Kh+US+T_+$(+$(+$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@Bz$aH@aH@bH@}f.}f.l7 l7 aH@aH@aH@aH@aH@aH@aH@aH@}f.}f.}f.}f.}f.}f.}f.}f.cI+cI+cI+cI+cI+cI+cI+cI+aH@bH@bH@bH@}f.}f.bH@bH@}f.l7 l7 l7 cI+NM+NM+ko.xc+5A.]! Ea+G|@Kh+T_+xc+T_+G|@G|@G|@T_+$(+$(+xc+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.NM+35+NM+35+NM+35+NM+35+cI+f+#cI+f+#cI+f+#", "S& [! [! [! L) L) L) L) o^ -^ o^ L) [! 6[ -^ o^ o^ o^ 6[ 6[ 6[ L) L) 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ U@ m@ {@ m@ .* fd * 2% U@ m@ {@ {@ {@ {@ m@ t% 4% R_ R_ R_ R_ R_ R_ R_ R_ R_ R_ *_ *_ g% g% f% y% o^ o^ o^ o^ o^ o^ o^ -^ -^ o^ o^ o^ 6[ 6[ Q_ n3 A^.A^.A^.A^.A^.A^.A^.7v@X_ A^.A^.0c A^.X_ X_ 2{ 4{ H{ H{ 4{ 5! 5! 4{ G{ 4{ 4{ 5! 5! 4{ 4{ &5 Y_ o^ o^ 6[ o^ o^ -^ .^ .^ .^ .^ .^ .^ .^ .^ =] f% af.af.QB@4=+4=+6v@6v@QB@QB@4=+4=+4=+4=+4=+4=+w4.w4.fL.fL.fL.I> I> I> fL.w4.w4.a, a, w4.w4.fL.Y_ .* * fd fd fd fd * 5[ 5[ 5[ 5[ 5[ 5[ 5[ ac {_ {_ {_ {_ W_ W_ W_ W_ O9.;b.W_ W_ ;b.;b.{_ &5 w4.a, 8H.w4.I> v% fL.8H.fL.fL.fL.fL.fL.fL.fL.fL.w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, a, a, a, a, a, &5 W_ W_ W_ {_ {_ {_ {_ W_ W_ &5 &5 n3 n3 n3 f% 6% 1% 9, H;@P7.V[&z) !<*zh.z* }w*kF+vO+Tc ;: *g+Q[%!1%LF*MF*!G*~G*=m$DE*p6*p6*NF*ab*'F*[E*UI#UI#y4@GH@GH@St%#@#hB@*1@PX..*+W,@7)#y1#km$/a$98$+*+5Z.'>+%a@%a@ki@,>+4[%=7$CM#Vk$L[#M[#!U#!U#Wk$Wk$*c$*c$*c$*c$]m$ar$ar$ar$T4$%u$=J$Rj$N)$09$a8$4($d9$d9$d9$d9$d9$d9$d9$d9$!l$!l$!l$!l$!l$!l$!l$!l$;u$;u$;u$;u$!I$!I$)H$)H${J$ K$(H$(H$(H$_H$~]$gm$5Z+gX+5$@4G+4G+4G+2 @2 @w;@w;@w;@w;@DD+DD+DD+DD+x)+x)+B+>B+O)@O)@O)@O)@0=@O)@3]+#N+@N+{-+x)+G#$O#!6$hV#^K#HB#J7#Bf#$5#+o#i:%i:%Xn#Xn#)$$)$$v0#z!$6G*#t*'E#tB#>f+W4#Nn#Nn#.4+.4+Nn#B+lX+9G+9G+ZK+|V+:P+:P+3G+3G+3G+3G+}V+2R+hX+!l$~l$!l$_P+u_%WK+zM@w;@^K@e^@-(@yb#ih#,P+48+BT#7)$-'$g>${e%w,$e6$5c$1s$1s$wo$wo$wo$4U&4U&4U&Rp$Rp$Qp$;r$ot$~x$~x$~x$;r$;r$;r$Qp$Qp$Rp$Rp$(V$ap$G=%$I%vV#0p$0p$wo$wo$4U&wo$BT%gS%.F$.F$.F$y+&Km$AJ$i*%i*%S2$S2$P1$T2$t8$:u%g>${e%e6$e6$5c$}b$=r$=r$=r$=r$:D$:D$:D$7C*QG$QG$Op$Pp$I#*Pp$q@*Op$7G*io%/n$/n$(n$YS&:n$:n$n7$m7$yo$q$`0$`0$`0$`0$`0$>q$>q$cs$cs$#w$#w$#w$#w$#w$#w$#w$#w$.O$.O$iR$iR$bC$bC$.O$.O$.O$.O$.O$.O$.O$.O${`#yV#cs$yV#{`#qR${`#yV#tQ$tQ$tQ$tQ$tQ$tQ$tQ$uQ$OS#v~@:R+5X+[R+Ht+oI+oI+Ht+rI+qe@8i@kg@=e%^O$ng@_G+Nl+Nl+Nl+/G+[T+^G+}G+~P+~P+L,@L,@L,@L,@]`#!B+}R+}T+fy+-w+tr+}=@ny+4 @ny+4 @9&@be#7%$w9#R6#Q6#gY#:x@7X+ N+`M+`M+NK+NK+YM+sI+{P+uy#(t#ay+(P+,N$:x@:x@:x@:x@:x@:x@:&@:&@wI+{k@;I$v)%jb#6o@6o@jb#t<@t<@t<@t<@t<@t<@t<@t<@O)@4 @ny+my+_w+&N+;m+e[+__+G$+G$+c^#lK@RA+,[+G&+Gy+Pp+Mp*>p*>%@-u+5m+RC*T^@{'#rt$8G* G%TC*9G*0G*aG*bG*UC*^E*cG*dG*jg*vg*'G*eG*fG*!f%62 O|*C& ~~@~4.D<&C<&1M@Nc&wE*|m.*$@'W+3]&O4%O4%O4%O4%O4%O4%]1%Fc%Fc%#u%O4%3]&`E&{y%*$@$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+B#@B#@B#@B#@B#@{y%{y%{y%B#@B#@B#@{y%{y%'W+'W+y$$x{ 9&+u]#9&+u]#9&+u]#9&+:{+9&+d #S>+US+S>+';$';$$(+$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@Bz$aH@bH@}f.}f.}f.bH@bH@aH@aH@aH@aH@aH@aH@aH@aH@}f.}f.}f.}f.}f.}f.}f.}f.cI+cI+cI+cI+cI+cI+cI+cI+l7 l7 l7 l7 l7 bH@aH@Bz$bH@bH@bH@bH@l7 cI+ko.13+T_+Ea+{! Ea+Kh+7P.T_+]! T_+T_+T_+$(+$(+xc+xc+xc+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.cI+35+%]$35+L*+f+#L*+R~$&5$f+#L*+f+#L*+f+#L*+", "S& [! [! [! L) L) L) L) o^ -^ -^ 6[ L) 6[ -^ -^ -^ o^ o^ 6[ 6[ L) L) 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ u% Q_ ^{ Q_ u% =] y% Q_ Q_ ^{ &- &- &- &- ^{ Q_ %% %% %% %% %% %% %% %% v% v% v% v% f% f% f% f% u% -^ -^ -^ -^ -^ -^ -^ -^ -^ -^ o^ 6[ 6[ 6[ ^{ n3 n3 n3 n3 n3 n3 n3 n3 {_ W_ n3 &_ &_ &_ &_ ~_ 3{ 4{ 24 24 4{ 2{ 5! 4{ H{ G{ 5! 2{ 2{ 5! G{ W_ Y_ y% u% u% u% y% Q_ ^{ =] =] =] =] =] =] =] =] I> I> I> I> I> fL.fL.fL.f% f% v% v% I> fL.fL.w4.fL.fL.fL.I> v% v% v% f% v% I> w4.a, a, w4.I> v% Y_ o3 =5 ed ed ed ed =5 ac ac ac ac ac ac ac ac ;b.;b.{_ {_ W_ W_ &5 &5 O9.;b.W_ {_ ;b.|x.{_ &5 I> fL.w4.I> v% v% w4.cl+a, a, w4.w4.w4.w4.a, a, w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, a, a, a, a, a, v% v% v% I> I> fL.fL.fL.I> v% v% v% f% f% 5% 5% WW.WW.VW.6!.6!.ni ni Iu+|U A* }w*}A+uO+-9 +6.%(+*z*g<@ao*g:@:k%bo*eP$=m$~m*~m*NF*ab*_-@LD@13@13@GH@Q%$Q%$St%Tb+*1@Tb+PY$W,@!}@h3#7)#A0%&c$98$B%%5Z.'>+%a@%a@ki@,>+4[%=7$CM#Vk$M[#K[#1r$!U#Wk$*c$/v${m${m$jm$]m$]m$ar$ar$=k$%u$nw$.3%.l#N)$%K$4($!l$!l$!l$!l$!l$!l$!l$!l$~l$~l$~l$~l$~l$~l$~l$~l$b8$b8$b8$c9$d9$d9$5($5($kF$kF$%/$bN$%/$/H$.@%&$@[ @7=@3G+3G+3G+=>+=>+x)+x)+x)+x)+9G+9G+9G+9G+Q,+Q,++;B+my+ny+4 @O)@qt$5o@lX+T@x)+9G+>B+my+my+Z.@a&@*9@H6@b&@b~@K@@K@@K@@K@@K@@K@@K@@K@@e^@K@@Z.@0&@0&@0&@0&@Z.@K@@K@@K@@K@@K@@K@@L@@L@@H6@H6@gY#G6@G6@c&@c&@OK+$)>$'>$'>$,>$D7#vB#+I#tB#.G#-l#-l#df#df#W4#W4#;f+$V>$='$='$}b$}b$Ew$1s$-r$-r$Or$Or$Or$Or$ZQ%ZQ%Rp$Qp$;r$ot$ot$~x$;r$;r$Qp$Qp$Rp$Rp$Rp$(V$>o$$I%vV#tV#;o$Aq$-r$Or$vo$4U&BT%gS%z**.F$YE*y+&:{&i*%s|$s|$ti%ti%O1$Z!$8c$_u%{e%{e%8a$8a$5c$}b$Ql$Ql$Ql$Ql$=r$=r$=r$=r$7C*YS&to$uo$t`%t`%I#*Pp$7G*io%io%/n$YS&YS&:n$`u$Ew$Ew$3u$xo$Sl$=3@=3@*3@Ao$W>$W>$W>$W>$W>$E5&E5& v$ v$&w$&w$&w$&w$&w$&w$#w$#w$.O$.O$iR$iR$bC$bC$.O$.O$.O$.O$.O$.O$.O$.O${`# 7@cs$yV#{`#{`# 7@cs$EZ$EZ$EZ$EZ$EZ$EZ$EZ$19@MU#,:@WH@:R+5X+[R+[R+]V+5X+[R+ZM@4k@re@re@ZH@5k@-]@rD+rD+#/+q;@/G+[T+^G+~P+~P+L,@L,@L,@L,@]`#!B+}R+}T+fy+-w+tr+}=@ny+4 @*>+*>+8&@be#Ad%lb#w9#Q6#-_#:x@7X+7X+`M+/P+NK+NK+qI+sI+{P+(t#@w++w+Kl+qr$:x@:x@:x@:x@:x@:x@:&@:&@wI+{k@;I$v)%jb#6o@6o@jb#Q,@R,@R,@R,@R,@R,@R,@R,@>B+0G+*>+;B+Y.@:|+e[+e[+I:+:f+c~@_/+c^#6y+,[+,[+bw+Pp+Mp*b#@>%@-u+R{@RC*~R@e3%{'#mr%sB*wz%9G*0G*gD*xG*H)*^E*cG*yG*zG*,G*AG*BG*CG*DG*EG*A2*og |;@]Z@n4@p!#1M@mh.>0+/{ |m.'W+'W+'W+'W+'W+'W+'W+'W+3&$3&$'W+'W+'W+'W+'W+'W+*$@$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+{y%{y%{y%B#@B#@B#@B#@B#@{y%{y%{y%'W+'W+3&$3&$c> r-@ (&9&+ (&9&+ (&9&+ (&x}*lC&x}*lC&x}*GJ@pK+FG*u]#$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@aH@bH@}f.l7 l7 bH@aH@Bz$bH@bH@bH@bH@bH@bH@bH@bH@}f.}f.}f.}f.}f.}f.}f.}f.l7 l7 l7 l7 l7 l7 l7 l7 l7 l7 cI+NM+cI+l7 bH@aH@}f.bH@aH@aH@bH@}f.cI+NM+xc+xc+$(+T_+T_+T_+Ea+5A.T_+$(+xc+xc+Ea+Ea+Ea+Ea+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+%U.%U.%U.%U.%U.%U.%U.cI+%]$GG*L*+GG*&5$HG*Ru$HG*L*+GG*L*+GG*L*+GG*", "S& [! [! [! L) L) L) L) o^ -^ -^ 6[ L) 6[ -^ -^ -^ -^ o^ 6[ 6[ L) L) 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ =] y% ^{ Q_ u% u% y% ^{ Q_ Q_ ^{ &- &- ^{ Q_ Q_ %% %% %% %% %% %% %% %% 8H.a, w4.fL.v% f% 5% ^{ -^ -^ -^ -^ -^ -^ -^ -^ -^ -^ -^ o^ 6[ 6[ L) L) o3 n3 n3 n3 n3 n3 n3 n3 ;b.W_ n3 &) $% $% &) &) d= 4{ 24 24 4{ 2{ 5! 4{ H{ G{ 5! 2{ 2{ 5! G{ W_ t% y% =] =] =] y% &- &% =] =] =] =] =] =] =] =] fL.fL.fL.I> I> I> I> I> 4% 4% 5% f% I> fL.w4.w4.fL.I> I> v% v% f% f% 5% f% v% fL.w4.w4.fL.v% f% Y_ o3 =5 ed ed ed ed =5 ac ac ac ac ac ac ac ac ;b.;b.{_ {_ W_ W_ &5 &5 O9.;b.{_ {_ ;b.|x.{_ &5 v% I> I> v% f% v% w4.cl+cl+8H.8H.a, a, 8H.8H.cl+w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, a, a, a, a, a, 5% f% f% v% v% I> I> fL.v% v% f% f% 5% 5% 5% 4% n` WW.VW.5!.$9.ni ni u}+9u.X* }w*}A+uO+P(%j[ >*%wu.Ca.g:@g:@:k%37*W)*fj*~m*~m*NF*ab*_-@LD@13@13@GH@Q%$Q%$y4@Tb+Tb+PX.w=$S)@dk@1_+7)#A0%&c${l$B%%5Z.'>+%a@%a@ki@,>+4[%=7$CM#Vk$M[#m~+1r$!U#Wk$*c$Hx$dw$/v${m$ln$]m$ar$ar$=k$=c$Rj$.l#jh#.3%4($%K$!l$!l$!l$!l$!l$!l$!l$!l$~l$~l$~l$~l$~l$~l$~l$~l$b8$c9$c9$c9$5($5($d8$d8$kF$jF$bN$/'$bN$%/$-L$pZ@5$@[ @7=@3G+3G+3G+=>+=>+x)+x)+x)+x)+9G+9G+9G+9G+2T+2T+Q,++*>+ny+4 @O)@t<@Ku$ W$lX++*>+ny+ny+ny+ny+Z.@ny+:f+;(@T0+ib#hX@3 @0G+0G+_w+e^@P,@P,@*9@a$@-(@d^@L@@K@@K@@K@@K@@K@@K@@K@@J@@e^@K@@Z.@0&@0&@Z.@Z.@K@@K@@K@@K@@K@@K@@L@@L@@H6@H6@gY#G6@G6@G6@c&@OK+Ft+gK@Ll+):@5~+~7@0k@IG*F9#B,+V=+z4#'7$CM#9v%4V+9Z+9Z+9Z+9Z+=1@=1@f$@=1@@*+@ +|0#&c$Q'$K#$25%Jn#}_+QU#.$#.$##N+ib#H,@Hl+_f+ h+)-+)-+2Z+vp+/|+/|+O,+)-+Sn+ L+Zn+{k+/k+'i#,d$!i#n0#1i#b_%w|%JG*v<%J7#G0#KG*LG*MG*NG*OG*PG*QG*RG*SG*TG*UG*VG*WG*XG*YG*vG*ZG*(A*`G*5A*&8#CV$K_${O#~O#5T#WY#G7#H~$#K#vF% H*.H*.H*V%$V%$8t#~w#)E#,6+e8+.G#hf#hf#Rn#Rn# G# G#-l#;f+$-'$V>$V>$Et$Et$Ew$Ew$-r$Or$,o$bp$bp$'o$`Q%`Q%ZQ%Rp$Qp$;r$ot$ot$;r$;r$Qp$Qp$Rp$Rp$Rp$vy%Aq$vV#tV#tV#;o$Aq$Or$,o$vo$4U&BT%ro$z**.F$YE*=r$dl$s|$vM@s|$}s$}s$N1$v|$8c$_u%w,$w,$8a$#x%e6$d6$f|&f|&f|&Ql$=r$=r$=r$=r$7C*YS&to$t`%t`%t`%I#*t`%io%io%io%/n$YS&YS&`u$`u$)r$)r$Sp$Sp$Sl$Rl$Rl$uk$Et$-'$-'$-'$V>$V>$|s$|s$ v$ v$&w$&w$&w$&w$&w$&w$#w$#w$.O$.O$iR$iR$bC$bC$.O$.O$.O$.O$.O$.O$.O$.O${`# 7@cs$yV# 7@{`#yV#cs$qR$qR$qR$qR$qR$qR$qR$fY#>:@;]@,:@WH@v~@5X+29@[R+v~@29@%7@4k@4k@4k@fK@<9@-]@#/+#/+#/+{G+q;@/G+[T+~P+~P+L,@L,@L,@L,@]`#!B+}R+}T+fy+-w+tr+}=@ny+0G+;B+*>+8&@9=@Ad%l@%lb#_^#-_#fh#7X+7X+`M+/P+NK+NK+pI+ZM+sI+(t#B+0G+*>+;B+Y.@:|+e[+I:+rd+rd+:f+c~@U,@+>#6y+*E#bw+Pp+;%@b#@>%@-u+R{@RC*~R@XO@YO@}A*%q%wz%+H*0G*@H*]E*#H*0g*@i*yG*$H*%H*&H**H*=H*-H*;H*- (D.6,+,X@J7.p!#.X+z9.,0+!D+/{ 'W+'W+'W+'W+{y%{y%{y%{y%`b&B#@B#@{y%'W+3&$3&$6j+$(+$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+'W+'W+{y%{y%B#@`b&`b&!D+{y%{y%'W+'W+3&$Y@$Y@$0@@r-@ (& (& (& (& (& (& (&zw*GJ@ (& (& (&GJ@>H*lt*u]#$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@}f.l7 l7 l7 bH@Bz$9g.bH@bH@bH@bH@bH@bH@bH@bH@}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.l7 cI+ko.ko.NM+l7 }f.l7 }f.bH@Bz$Bz$aH@}f.l7 5A.T_+oh.7P.xc+]! 5A.xc+$(+$(+xc+Ea+5A.5A.5A.Ea+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+%U.%U.%U.%U.%U.%U.%U.cI+L*+GG*,H*,H*HG*'H*'H*'H*GG*GG*GG*GG*GG*GG*", "[! 6[ L) S& S& L) o^ .^ o^ 6[ L) L) 6[ o^ .^ [! [! L) L) 6[ 6[ o^ o^ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ Y^ 7% j% j% x% w% w% l3 j% j% j% j% j% j% j% j% ^{ Q_ Q_ Q_ y% y% u% u% !1.^* &- Q_ y% u% u% =] o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ t% ed ed t% t% ed ed t% =5 =5 o3 Y_ o3 ed ac Hs 4{ 4{ G{ G{ H{ H{ H{ 24 G{ G{ G{ G{ G{ G{ H{ W_ &_ f% I> w4.w4.w4.fL.I> fL.fL.I> v% v% f% 5% 5% t% Y_ Y_ o3 o3 =5 =5 ed Y_ o3 o3 =5 ed ed ac ac v% v% v% v% I> fL.w4.a, I> a, a, I> I> a, a, I> {_ {_ {_ {_ {_ {_ {_ {_ ;b.;b.;b.{_ W_ &5 &5 &5 {_ |x.6}%O9.;b.{_ |x.6}%;b.{_ {_ {_ {_ ;b.|x.O9.fL.fL.w4.w4.a, 8H.8H.cl+a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, Vl.Vl.':+':+-J.-J.l3 l3 l3 l3 l3 w% w% x% x% x% WW.1% Hu+j}+{t.!W+0Y+!<*Yn (= z4&|A+dM+W9 (9* e*q>&xh%3c*7C iH#PD.eP$_t*%g$~m*us@ij*!_#y[+u,$f,$Q%$GH@GH@y4@PY$PY$PX.PX.dk@!}@7)#1|+1|+1|+YX.6)#H!#%a@%a@'>+3W.,>+4[%D#$=7$=7$L[#L[#*c$jm$jm$jm${m$jm$Wk$1r$,Z#Tj$ar$]m$=k$=k$09$Rj$Rj$Rj$%K$%K$!l$d9$d9$d9$d9$!l$~l$0N$d9$5($d8$5($~l$rr$0N$!l$[{#[{#[{#[{#!k#!k#!k#!k#iX+iX+5Z+5Z+5Z+5Z+V.@5Z+4G+}V+3G+[V+[V+AI+zI+zI+hX@>T@B+>B+t<@t<@Q,@Q,@qt$5o@ZK++ny+ny+my+my+e^@_w+9G+x)+x)+x)+9G+9G+0G+4 @qt$qt$b=@,'$pr$u!$u!$*9@0$@0$@L@@L@@P,@P,@a&@a&@=9@=9@=9@=9@=9@=9@=9@=9@J@@L@+6Z+6T+e^@Z.@L@@O,@*9@*9@-_#-_#gY#c&@s<@ay+~P+gK@B$+F)@h)+2a@#f+)H*hx$*X&;G+)7$7I#D#$Os%IR$9Z+9Z+=1@=1@=1@=1@})#})#`o$3)#y1#k[+`]$*W#0x$9~#i[+y)+UK+UK+(8$.@#Yv+De@![+q$@)-+c[+lr+^/+I6@-9@(|+c[+vp+vp+kr+!k+&l#'i#ri+Tg+n0#i8%a_%jD$QF*wc#M7#~2#KG*!H*MG*~H*{H*PG*m2#]H*^H*/H*(H*_H*:H*w#9t#7t#vB#xB#%w#Ly# ;$Vl+1=$Wl+Nn#y0+&2+H#$H#$B)$ed+Xl+ir+#/+Nl+t&@Nb+]G+]G+b$@fy+v)+vD+@B+dB@K)@0~@Sm#Q1#x)+5G+5&@5&@}{#}{#u_%d8$!l$b8$c9$c9$Wx$Wx$_P+WK+[H#!K@*>+J@@z$+ih#mI+Y5+N<@41@7)$6)$-'$='$d6$5c$,t$,t$Or$Or$Or$Or$Or$Or$+O%.O%.O%`Q%`Q%ZQ%ZQ%Rp$Rp$Qp$Rp$.O%>q*3H*.O%vy%Aq$$I%vV#vV#;o$;o$vo$nt$bp$bp$Mp$Mp$[)%[)%[)%x,$B]&AJ$s|$}:$]B$H1$P1$8c$t8$:u%g>${e%e6$e6$d6$|s$Ql$C&%_D$_D$_D$(;$LG&KG&YS&YS&YS&(n$to$to$uo$uo$$-'$W>$E5&E5&`u$Ft$Ju$Ju$vo$4U&vo$Ju$$w$$w$#w$#w$#w$.O$.O$.O$.O$.O$.O$.O$.O$.O$.O$.O$yV#yV#yV#cs$cs$cs$Gt$Gt$yV# 7@ 7@ 7@{`#{`#qR$fY#MU#,:@WH@WH@WH@,:@>:@%}@MU#%7@jg@qg%pg%qI+jg@ne#69@qD+Nl+rD+q;@/G+[T+[T+~P+2+f[+f[+rd+c~@6y+6y+6y+,[+Pp+Mp*bw+>%@>%@>%@Li+Li+Li+Li+!R@!R@}A*%x@sB*wz%+H*0G*@H*bG*5H*Wd*'i*G{*6H*7H*8H*9H*0H*{y.l++E 7g.@u%eO@:^+j(#.X+ps+X`+3&$Y@$Bj./{ /{ |m.*$@*$@y$$y$$*$@*$@*$@|m.|m./{ /{ /{ G|@G|@G|@G|@G|@G|@G|@G|@T_+Kh+7P.Kh+T_+$(+T_+Kh+B#@B#@B#@B#@B#@B#@B#@B#@Y@$3&$3&$'W+{y%B#@B#@zi.{**p)@ (&lC&lC& (&p)@|7.>H*lC&|7.|7.GJ@aH*aH*pK+US+Kh+Kh+Kh+Kh+Kh+Kh+Kh+5A.$(+Kh+G|@$(+xc+G|@oh.aH@aH@aH@aH@aH@aH@aH@aH@}f.}f.}f.}f.}f.}f.}f.}f.bH@cI+cI+bH@bH@cI+cI+bH@bH@}f.l7 cI+cI+l7 }f.bH@}f.}f.}f.}f.}f.}f.}f.}f.bH@bH@bH@bH@bH@bH@bH@bH@ko.cI+bH@Bz$>( >( >( 9g.}f.}f.}f.}f.}f.}f.}f.}f.xc+T_+Kh+G|@$(+xc+$(+G|@$(+T_+G|@T_+Ea+5A.Ea+xc+oh.T_+Ea+5A.Ea+xc+xc+Ea+$(+$(+xc+xc+Ea+5A.5A.5A.Rx.Ov+[y+%U.Rx.8}.Ov+[y+|f.|f.|f.|f.|f.|f.|f.}f.Ru$HG*HG*HG*HG*HG*HG*HG*x>%]4%,H*,H*GG*]4%", "6[ o^ 6[ S& C& C& [! -^ o^ 6[ L) L) 6[ o^ -^ L) 6[ 6[ 6[ 6[ 6[ 6[ o^ 6[ 6[ 6[ 6[ 6[ 6[ 6[ Q_ 7% 7% 7% j% j% x% x% x% j% j% j% j% j% j% j% j% ^{ ^{ ^{ Q_ Q_ y% y% y% Q_ y% y% u% u% y% y% y% o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ t% ed ed t% t% ed ed t% =5 o3 Y_ Y_ Y_ =5 ed .o 5! 4{ 4{ 4{ G{ G{ H{ H{ G{ G{ G{ G{ G{ G{ G{ &5 &_ f% I> w4.w4.w4.fL.I> I> I> v% v% v% v% f% f% Y_ o3 o3 o3 =5 ed ed ed Y_ Y_ o3 o3 o3 o3 =5 =5 I> I> v% v% v% I> fL.w4.I> a, a, I> I> a, a, I> {_ {_ {_ {_ {_ {_ {_ {_ {_ {_ {_ {_ W_ W_ W_ W_ {_ ;b.O9.|x.W_ &5 {_ ;b.;b.{_ {_ {_ {_ ;b.|x.O9.w4.w4.w4.a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, Vl.Vl.':+':+-J.-J.l3 l3 l3 l3 l3 w% w% x% x% x% 1% 6% Hu+l#@j}+' .z) 3!.Yn (= z4&|A+bH*P(%(}+%(+q>&[a%3c*-N@PL.cH*eP$DE*XD*%g$!1$(=$!_#!_#D@+D@+,[#Q%$GH@y4@PY$PX.PX.PX.dk@!}@7)#1|+1|+1|+YX.6)#6)#'>+'>+'>+,>+:-+D#$=7$Vk$Vk$RA$L[#*c$*c$*c$*c${m$jm$*c$!U#Tj$Tj$ar$]m$Sj$Sj$Rj$Rj$Ms$Ms$a8$a8$d9$5($5($5($5($d9$!l$~l$!l$d9$5($d9$~l$0N$~l$d9$[{#[{#[{#[{#!k#!k#!k#!k#9e#9e#zM@zM@zM@zM@AM@jX+7=@[ @3G+3G+[V+[V+=>+=>+hX@>T@B+O)@O)@t<@t<@qt$Q,@lX+5#dH*eH*fH*gH*hH*MG*iH*jH*kH*lH*mH*nH*oH*pH*[H*}H*qH*ZG*_B*cD*(z#=z#)6$Z`#(w#y.$WY#zf#I~$E[%]l#ai#D+%7-%9t#9t#Ry#Uy#xB#%w#Ly# ;$Vl+1=$Wl+1=$7q$d8+Es$fd+fd+Nn#YN#fi+Jt+Nl+u&@s=@q;@gK@:V+ur+|]+Xn+@B+@B+}=@,B+T##Sm#cB@5G+2 @5&@WK+iX+5($5($b8$b8$c9$c9$Wx$Wx$_P+WK+5$@8G+Y.@6T+z$+L,@!P+'P+N<@41@7)$W>$V>$g>$e6$8a$m7$m7$,o$Or$Or$Or$Or$Or$+O%+O%.O%.O%`Q%`Q%ZQ%ZQ%`Q%ZQ%ZQ%.O%>q*>q*.O%(V$Aq$$I%vV#vV#;o$;o$vo$vo$,o$,o$ro$ro$z**z**z**B'%B]&AJ$i*%vM@]B$H1$P1$t8$t8$:u%g>${e%e6$e6$d6$V>$C&%Z0@h>$h>$h>$(;$=r$LG&YS&YS&YS&(n$to$to$uo$uo$$V>$V>$-'$-'$Et$Et$`u$Ft$Ju$Ju$vo$4U&vo$Ju$$w$$w$#w$#w$#w$.O$.O$.O$.O$.O$.O$.O$.O$.O$.O$.O$yV#yV#yV#cs$cs$Gt$Gt$Gt$yV#yV# 7@ 7@{`#{`#{`#fY#>:@;]@,:@WH@MU#MU#>:@5}@MU#`H@8i@pg%qI+pI+sI+Q;@[G+qD+qD+Nl+/G+[T+[T+^G+~P+B+9G+lX+DD+E+$X/$'~%'~%u!%)~#:x@OK+ N+1N#2N#YM+qI+YM+7h$]P+tI+(t#7X+fh#fh#:x@fh#fh#fh#Aq@qr$&t@&t@L)@L)@|=@|=@6o@6o@jb#T##P)@ZK+Q)@Q)@s;@s;@t;@t;@lX+lX+9G+3 @~-+>2+f[+I:+:f+_/+6y+,[+6y+Q2@bw+>p*>%@>%@>%@Li+Li+Li+Li+Li+q3*{'#rt$mr%%q%wz%tA%*G*LD*bG*UC*Wd*Me*G{*rH*sH*8H*tH*u2%uH*AB V =|$+X+bp.D6.j(#S`%u{@u{@3]&3&$|m.|m.|m.|m.*$@*$@*$@*$@y$$y$$y$$*$@*$@|m.|m.|m.T_+T_+T_+T_+T_+T_+T_+T_+$(+G|@Kh+G|@$(+xc+T_+Kh+B#@B#@B#@B#@B#@B#@B#@B#@{y%{y%{y%{y%{y%'W+'W+$.@{**p)@9&+lC&x}* (&q(#|7.pK+ (&PS@r,@x}*zw*pK+S>+d #T_+T_+T_+T_+T_+T_+T_+5A.xc+G|@T_+xc+xc+T_+7P.Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$}f.}f.}f.}f.}f.}f.}f.}f.aH@cI+cI+aH@aH@cI+cI+aH@Bz$aH@}f.l7 l7 }f.aH@Bz$}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.l7 }f.aH@Bz$Bz$aH@bH@}f.l7 l7 l7 l7 l7 l7 l7 l7 xc+$(+G|@T_+xc+Ea+$(+G|@xc+$(+G|@T_+Ea+5A.xc+$(+Kh+$(+Ea+5A.xc+$(+$(+xc+$(+xc+xc+xc+Ea+5A.5A.5A.Rx.%U.[y+%U.Rx.8}.Ov+[y+|f.|f.|f.|f.|f.|f.|f.}f.Ru$HG*Ru$HG*Ru$HG*Ru$HG*$]$]4%&5$,H*L*+]4%", "-^ -^ 6[ S& R% u& C& o^ o^ 6[ L) L) 6[ o^ o^ o^ o^ o^ o^ o^ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ Q_ r: VW.VW.8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+j% ^{ L) L) 6[ 6[ o^ o^ o^ og og p: .^ -^ 6[ L) L) o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ U@ fd fd U@ U@ fd fd U@ .* 2% 2% U@ 2% .* * =5 2{ 2{ 5! 5! 4{ 4{ 4{ G{ G{ G{ G{ G{ G{ G{ 4{ n3 0c af.QB@4=+4=+4=+4=+QB@g% g% af.af.af.af.QB@I> =5 m* m* O) O) O) :] :] .# .# .# +# +# +# +# t% w4.fL.I> v% v% v% I> I> I> a, a, I> I> a, a, I> l. l. l. l. l. l. l. l.7v@7v@7v@7v@ l. l. l. l.{_ ;b.|x.;b.&5 n3 &5 W_ ;b.{_ {_ {_ {_ ;b.|x.O9.a, a, a, a, a, w4.w4.w4.a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, Vl.ym.(s.(s.aq.aq.{t.{t.{t.{t.{t.j}+j}+l#@l#@l#@1% 6% 8v.$9.5!.V[&0- gO.v~.(= bi |A+x~ Tc el 9u az++YJ#D#$=7$CM#CM#RA$RA$*c$Wk$Wk$!U#/v${m$jm$*c$]m$]m$]m$ln$=c$=c$nw$nw$Ms$Ms$a8$a8$5($d8$d8$d8$d8$5($d9$!l$0N$!l$5($d9$~l$~l$d9$5($[{#yA#yA#yA#M+#M+#M+#M+#4Z+4Z+E@@E@@E@@E@@,K@E@@wp#%1@8~@8~@8~@7~@dX+dX+AD+1G+6=@6=@zD+zD+=B+3R+>T@>T@>T@>T@3 @3 @3 @3 @*>+*>+4 @4 @O)@O)@0=@t<@9G+B+>B+O)@O)@4 @4 @Z.@ny+9G+x)+9G+9G+0G+0G+4 @4 @K@@P,@*9@*9@-_#u!$4N#u!$a$@0$@L@@L@@P,@P,@a&@a&@a&@a&@a&@a&@a&@a&@a&@a&@Z.@e^@J@@e^@0&@0=@P,@L@@)~#)~#u!$u!$-_#G6@c&@Kl+6X+YM@n0+F)@f)+Cq@Y[#+<$V4$p<@Wi&D]%d=@1S#tp%OX#9Z+9Z+=1@=1@=1@=1@Ub+|f+4w+|0#> $`]$Z5%k3&|W&/R#S@++@#L4#/K@;(@'T@Hl+[P+mB#Pb+1]+(|+/|+;2+Mb+;2+R0+R0+Ob+}]+]_+_k+mi+p7#{|+|i#)l#p&%A!$~/$!/$zH*-5#;5#dH*AH*BH*CH*DH*EH*FH*GH*HH*IH*JH*KH*LH*MH*NH*aD*'E*Oz*`G*;v*_z#-z#)6$st#6@$IB#K7#I_$B}%xf#bi##I#et#D+%,/$,/$Vy#wB#xB#%w#1t#D_$Vl+1=$:1@1=$In$>6+7q$`-$-f+t$>t$4c$Et$fo%fo%fo%f|&f|&LG&LG&7C*(n$uo$uo$QG$)E$QG$Ju$$w$$w$#w$#w$#w$.O$.O$.O$.O$.O$.O$.O$.O$.O$.O$.O$yV#yV#cs$cs$Gt$Gt$Gt$Sp$cs$yV#yV#yV# 7@ 7@{`#M<@31@%}@>:@MU#fY#M<@M<@Y4@19@`H@8i@jg@pI+ZM+dr+^G+[G+qD+qD+Nl+/G+[T+[T+^G+~P+2+f[+I:+__+c~@+>#,[+,[+Q2@>[+*E#>%@b#@b#@RC*RC*RC*mx*mx*mx*e3%YO@rt$mr%nx*ox*OH*PH*{E*QH*UC*RH*Me*SH*TH*UH*VH*WH*XH*Rw.BB j+ %' )p#+9.t4.Q+&CI#YH*u{@O4%3&$y$$$(+$(+$(+$(+T_+T_+T_+Ea+Ea+Ea+xc+xc+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+Ea+$(+G|@T_+xc+xc+$(+G|@B#@B#@B#@B#@B#@B#@B#@B#@`b&`b&B#@B#@{y%'W+3&$6j+c> q(#u]#x}*d #9&+:{+q)@u]#q)@M8@OU+v]#9&+u]#:{+xc+xc+xc+xc+xc+xc+xc+xc+5A.xc+T_+$(+xc+xc+$(+G|@aH@aH@aH@aH@aH@aH@aH@aH@}f.}f.}f.}f.}f.}f.}f.}f.aH@l7 l7 aH@aH@l7 l7 aH@Bz$Bz$aH@bH@bH@aH@Bz$Bz$}f.}f.}f.}f.}f.}f.}f.}f.l7 l7 l7 l7 l7 l7 l7 l7 aH@aH@aH@bH@}f.cI+NM+13+cI+cI+cI+cI+cI+cI+cI+cI+5A.xc+T_+$(+Ea+5A.xc+$(+5A.xc+T_+$(+xc+Ea+$(+G|@T_+xc+5A.5A.$(+T_+T_+$(+xc+xc+xc+Ea+Ea+Ea+5A.5A.Rx.%U.[y+[y+Ov+Rx.Ov+[y+|f.|f.|f.|f.|f.|f.|f.}f.{'$Ru${'$Ru${'$Ru${'$Ru$-V@L*+R~$&5$35+%]$", "o^ o^ 6[ S& u& C& S& 6[ 6[ 6[ L) L) 6[ 6[ 6[ -^ -^ -^ o^ o^ o^ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ Z^ r: VW.VW.VW.VW.VW.VW.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+$9.Q_ 6[ o^ o^ -^ -^ -^ -^ og p: .^ -^ 6[ L) L) L) -^ -^ -^ -^ -^ -^ -^ -^ o^ o^ o^ o^ o^ o^ o^ o^ U@ fd fd U@ U@ fd fd U@ 2% 2% U@ U@ U@ 2% 2% 2% 3{ 2{ 2{ 2{ 5! 5! 4{ 4{ G{ G{ G{ 4{ 4{ 4{ 4{ ~_ X_ QB@QB@4=+4=+4=+QB@QB@*_ *_ g% af.af.QB@4=+fL.4! O) O) O) :] :] :] :] O) O) m* m* .# +# +# U@ ;b.w4.fL.I> v% v% v% v% I> a, a, I> I> a, a, I> l. l. l. l. l. l. l. l.X_ X_ X_ 7v@ l.)i+)i+)i+;b.|x.O9.;b.W_ n3 &5 W_ ;b.{_ {_ {_ {_ ;b.|x.O9.cl+8H.8H.a, w4.w4.fL.fL.a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, Vl.Vl.ym.(s.(s.aq.aq.{t.{t.{t.{t.{t.j}+j}+l#@l#@l#@6% 6% VW.6!.P7.6,%Jg.1i$0>$(= i3 m! 1~ /8 gF.5< az+R[%-.@FD 2K.ZH*X)*'y#`H*xH*Rv#=;&n5$n5$s}@$8$23@EE*Q%$y4@PY$PX.Tb+*1@!}@S)@1|+y1#y1#y1#z1#5Z.B%%K6@K6@K6@:-+YJ#=7$=7$i%%i%%Zz$RA$*c$Wk$!U#1r$/v$/v${m$jm$ln$ln$ln$ln$%u$%u$Hs$nw$nw$nw$,H$a8$d8$d8$pw$pw$pw$d8$d9$d9$rr$~l$d9$d9$!l$!l$d9$u_%[{#yA#yA#yA#M+#M+#M+#M+#4Z+4Z+E@@E@@E@@E@@,K@8=@u'%U{@>}@>}@8~@8~@r<@dX+1G+6=@6=@6=@zD+zD+zD+=B+hX@hX@hX@hX@f^@f^@f^@f^@;B+*>+ny+ny+4 @4 @0=@O)@9G+x)+I*,I*'I*)I*!I*~I*4G*{I*{I#:z##8#=z#ot#J_$'6$2*$-5#C}%Bc#DB#bi#s=$et#Zy$Zy$UY#)E#xB#%w#1t#D_$Vl+1=$:1@1=$ ;$'6+In$In$In$;f+oq#Ey#GZ@.}#u&@u&@^G+^G+:V+sD+!k+[w+`K+ L+@k+v)+Rt+P,+H@@8G+~K@5Z+lF$hm$Ks$;J$b8$Ej$,p$,p$BT$BT$*6$_P+yM@[|+:|+L@+-(@s<@(T+~G+BT#[!$6)$-'$g>$l7$>5$V'$n7$n7$,o$,o$Or$-r$wo$wo$+O%+O%+O%+O%+O%+O%+O%+O%;Z$>q*.O%+O%>q*>q*.O%(V$>o$G=%$I%$I%0p$0p$vo$vo$wo$wo$so$so$=G$=G$=G$=r$B]&W<@AJ$d,%}s$ti%8c$t8$_u%aC$g>$g>$e6$8a$5c$='$Km$Y0@C&%F5&F5&F5&(;$h>$KG&KG&KG&fJ&(n$(n$|s%|s%t$>t$>t$4c$E5&]p%]p%fo%f|&Ql$=r$=r$7C*(n$uo$uo$QG$)E$QG$uo$Ju$$w$#w$#w$#w$.O$.O$.O$.O$.O$.O$.O$.O$.O$.O$.O$cs$cs$cs$Gt$Gt$Gt$Sp$Sp$cs$cs$cs$cs$yV#yV# 7@Y4@lt$I2@5}@>:@fY#fY#fY#M<@uQ$dc@re@pI+ZM+#w+Ft+:V+[T+Nl+rD+rD+q;@q;@/G+[T+~P+[+>[+&1@-u+b#@RC*RC*RC*mx*mx*mx*mx*]=#A^%AL$]I*^x*^I*W~&/I*(I*mE*_I*yG*pn*CL$:I* ~h&+X++9.D6.b,+w{@qN%R4%#u%Y@$6j+Ea+xc+xc+$(+T_+T_+G|@5A.5A.5A.Ea+Ea+xc+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.xc+T_+$(+xc+Ea+$(+G|@B#@B#@B#@B#@B#@B#@B#@B#@`b&`b&B#@B#@{y%{y%'W+y$$y$$:{+$(+u]#$(+u]#xc+:{+5A.h]@]! M8@5A.h]@5A.5A.xc+xc+xc+xc+xc+xc+xc+xc+Ea+xc+$(+xc+xc+xc+xc+$(+}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.Bz$l7 l7 Bz$Bz$l7 l7 Bz$aH@aH@bH@bH@bH@bH@aH@aH@}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.bH@bH@}f.l7 cI+NM+ko.13+cI+cI+cI+cI+cI+cI+cI+cI+5A.xc+$(+xc+5A.]! Ea+$(+]! Ea+$(+$(+xc+xc+T_+Kh+$(+Ea+5A.Ea+$(+G|@G|@$(+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ov+%U.|f.[y+Ov+Rx.%U.[y+|f.|f.|f.|f.|f.|f.|f.|f.}f.{'$}f.{'$}f.{'$}f.{'$ko.f+#}f.R~$NM+35+", "[! 6[ L) S& S& [! 6[ L) L) L) 6[ 6[ L) L) L) o^ o^ o^ o^ o^ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ Z^ 7% VW.VW.VW.VW.VW.VW.VW.Hu+Hu+Hu+Hu+Hu+Hu+Hu+$9.u% -^ -^ .^ .^ p: p: p: -^ o^ 6[ L) L) L) 6[ o^ -^ -^ -^ -^ -^ -^ -^ -^ o^ o^ o^ o^ o^ o^ o^ o^ U@ fd fd U@ U@ fd fd U@ 2% 2% 2% 2% 2% 2% U@ U@ 3{ 2{ 2{ 2{ 5! 5! 4{ 4{ G{ G{ G{ 4{ 5! 5! 2{ &_ 7v@4=+QB@QB@QB@QB@QB@QB@*_ *_ g% af.af.QB@4=+fL.K> :] :] :] O) O) O) O) }| }| :] :] O) m* m* .* ;b.w4.fL.I> v% v% v% v% I> a, a, I> I> a, a, I> l. l. l. l. l. l. l. l.X_ X_ X_ 7v@ l.)i+)i+)i+|x.O9.6}%O9.{_ W_ {_ |x.;b.{_ {_ {_ {_ ;b.|x.O9.cl+8H.8H.a, w4.w4.fL.fL.a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, Vl.Vl.ym.(s.(s.aq.aq.{t.{t.{t.{t.{t.j}+j}+l#@l#@l#@6% 1% VW.P7.H;@6,%Jg.1i$);$(= }w*[A+1~ N<.Ex 5< az+n3%-.@FD oG+2I*X)*'y#3I*4I*Rv#gD@h3%h3%F+@$8$wg@EE*Q%$GH@PY$Tb+*1@*1@!}@S)@1|+y1#A0%A0%z1#n~++*+K6@K6@K6@:-+YJ#D#$=7$i%%i%%Zz$RA$*c$Wk$!U#1r${m${m${m${m$CO#ln$]m$]m$5F$5F$Hs$Hs$nw$Ms$a8$a8$d8$d8$pw$pw$pw$d8$d9$d9$rr$~l$d9$d9$!l$!l$d9$u_%[{#yA#yA#yA#M+#M+#M+#M+#4Z+4Z+E@@E@@E@@E@@,K@8=@u'%5I*+ny+ny+4 @4 @0=@O)@3 @>T@x)+3@N@+%>+u)+^_+^_+8X+sD+|G+|G+t&@u&@dy+/+@Pg+if#>6+C7#z!$v0#WP$@R$7I*0v*'c$Jc#8I*9I*0I*aI*bI*cI*dI*eI*fI*gI*hI*iI*jI*kI*lI*NH*mI*nI*oI*yF*VB#%Q#@8#{E#]E#ds%P7#;5#%G#pI*/O#bi#Xy#OP#Zy$Zy$@K#+K#>/$3t#1t#D_$%3@em$:1@1=$ ;$'6+.K#In$In$;f+oq#Ey#_1@v&@qD+u&@}G+}G+^G+Nb+]_+WN#{k+[w+|]+1]+g~+$N+H@@8G+~K@/H${J$2#%Ne&;J$b8$Ej$@d$@d$BT$BT$*6$_P+4G+;K@>2+&N+b~@!B+6X+lm+BT#[!$6)$V>$g>$w,$#x%>5$n7$m7$,o$,o$Or$-r$-r$-r$>q*>q*>q*>q*>q*>q*>q*>q* X$3H*+O%+O%>q*3H*+O%Ds%>o$G=%G=%$I%Aq$0p$4U&4U&4U&4U&)E$)E$-.&-.&-.&LG&Z0@_:@W<@AJ$S2$S2$t8$t8$:u%aC$='$g>$e6$8a$e6$g>$Km$Y0@U6$tk$F5&F5&C&%Z0@fo%fo%KG&fJ&fJ&fJ&|s%|s%t$>t$>t$Iu$fJ&oP&oP&2]*{^*<)%Pl$Pl$*G$/n$7G*7G*>6*-.&>6*uo$Ju$$w$#w$#w$#w$.O$.O$.O$.O$.O$.O$.O$.O$.O$.O$.O$cs$cs$Gt$Gt$Gt$Sp$Sp$Sp$Gt$Gt$Gt$cs$cs$cs$yV#4}@`0$w^@5}@>:@19@EZ$EZ$EZ$aP$w)%kg@pI+#w+cr+(T+_T+q;@rD+#/+by+-'@{G+q;@q;@~P++YK+>K@CO@CO@CO@k#$=9@fh#7X+7X+2N#3,$kh%NK+YM+7h$]P+tI+(t#7X+fh#fh#Aq@Aq@Aq@Aq@Aq@Aq@<&@<&@L)@L)@}=@|=@|=@6o@6o@K)@ZK+Q,+2T+2T+|V+|V+S,@S,@x)+>T@hX@3]+rd+:f+c~@_/+U,@Q2@ik+*E#>[+N@@&1@-u+RC*RC*RC*mx*mx*mx*_c*_c*X @sw*qI*rI*^I*W~&/I*sI*tI*uI*oK$SH*vI*wI*GE$xI*SY&yI*}I*E(+8- Ds ~h&|r%bp.U%+zI*7&+pN%FU%]1%^b+;~ Ea+Ea+xc+$(+$(+T_+T_+5A.5A.5A.Ea+Ea+xc+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+]! Ea+$(+$(+xc+xc+$(+G|@B#@B#@B#@B#@B#@B#@B#@B#@{y%{y%{y%B#@B#@`b&`b&/{ *$@$(+jy.xc+jy.xc+q9+$(+)> 5A.]$@Ea+6g+]! )> 5A.$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+xc+xc+$(+$(+xc+xc+cI+cI+cI+cI+cI+cI+cI+cI+}f.}f.}f.}f.}f.}f.}f.}f.aH@l7 l7 aH@aH@l7 l7 aH@}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.bH@bH@bH@bH@bH@bH@bH@bH@l7 cI+cI+cI+NM+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+cI+5A.xc+$(+xc+5A.]! Ea+$(+]! Ea+$(+$(+xc+xc+T_+Kh+xc+5A.5A.xc+T_+G|@T_+xc+Ea+Ea+Ea+Ea+Ea+Ea+xc+xc+Ov+[y+|f.[y+%U.Ov+%U.|f.|f.|f.|f.|f.|f.|f.|f.|f.|f.}f.|f.}f.|f.}f.|f.}f.Ov+l7 |f.l7 Ov+ko.", "[! L) L) [! S& L) o^ [! [! L) 6[ 6[ L) [! [! [! [! L) L) 6[ 6[ o^ o^ 6[ 6[ 6[ 6[ 6[ 6[ 6[ Z^ j% Hu+Hu+8v.8v.VW.VW.VW.Hu+Hu+Hu+Hu+Hu+Hu+Hu+$9.y% -^ -^ -^ .^ .^ p: p: 6[ L) [! S& [! L) -^ .^ .^ .^ .^ .^ .^ .^ .^ .^ o^ o^ o^ o^ o^ o^ o^ o^ U@ fd fd U@ U@ fd fd U@ 2% .* .* * .* 2% U@ m@ 2{ 2{ 5! 5! 4{ 4{ 4{ G{ G{ G{ G{ 4{ 5! 2{ 3{ &) l.4=+QB@af.af.af.QB@QB@g% g% af.af.af.af.QB@&5 K> :] O) O) O) m* m* m* }| }| }| :] :] :] :] :] {_ fL.I> v% v% v% I> I> I> a, a, I> I> a, a, I> l. l. l. l. l. l. l. l.7v@7v@7v@7v@ l. l. l. l.{_ |x.6}%O9.;b.;b.|x.6}%;b.{_ {_ {_ {_ ;b.|x.O9.a, a, a, a, a, w4.w4.w4.a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, Vl.Vl.ym.(s.(s.aq.aq.{t.{t.{t.{t.{t.j}+j}+l#@l#@l#@6% 1% 9, H;@H;@6,%0- gO.nj$(= > @3t x~ /8 ;: Y< az+HL zh%{I@oG+AI*wH*4c*3I*4I*yH*k-$Z)+/,%^,%$8$wg@e>@Q%$GH@PY$Tb+*1@#@#S)@W,@y1#A0%A0%A0%Z+$n~++*+K6@BM#BM#,>+:-+4[%4[%CM#CM#RA$RA$*c$Wk$Wk$!U#jm$jm${m${m$CO#ln$ar$ar$5F$%u$Hs$nw$Ms$Rj$%K$4($5($d8$d8$d8$d8$5($d9$!l$0N$!l$5($d9$~l$~l$d9$hX+[{#yA#yA#yA#M+#M+#M+#M+#gX+gX+5$@5$@5$@5$@>K@7=@>}@BI*[g%[g%[g%=h%(s#(s#{k#2h#~k#~k#*B+*B+bX+jy+>T@>T@>T@>T@3 @3 @3 @3 @*>+*>+4 @4 @O)@O)@0=@t<@3 @>T@x)+x)+lX+ZK+ZK+Q)@>B+>B+O)@O)@4 @4 @Z.@ny+0G+9G+9G+9G+0G+4 @0&@0&@L@@*9@-_#-_#3L#4N#4N#4N#G6@a$@H6@H6@*9@*9@)~#)~#*9@*9@*9@*9@*9@*9@*9@P,@b=@0&@Z.@Z.@0=@0=@P,@0$@*9@*9@-_#-_#gY#c&@s<@PK+A$+&4+):@U&+gz@%v$)z*6I*CI*@u*B<%/^%fE#k<&QB$OX#=1@=1@=1@Ub+h/+li@Ar+D)++*+y1#;4+R!$k3&U@&n%&Sv#XK+R,+@N+T0+:f+__+3a@T.+~[+U&+&4+u)+;2+}]+sD+sD+jc@}G+oD+`J#/+@lc#df#W4#'6+>>$v0#0,$@R$l1$3l#-o#>5#O0#DI*EI*wF*FI*GI*HI*II*JI*KI*LI*MI*NI*OI*PI*QI*RI*SI*TI*UI*2F*VI*5B*+8#Mq#=6%95%;o#;5#T7#7<$gs%#I#OP#~>$,/$,/$@G#+G#>/$3t#1t#D_$%3@em$:1@1=$In$'6+X3+X3+In$;f+-X#oq#gr+Jt+='@qD+}G+}G+[T+9X+[]+&l#&m+[w+^/+Sn+g~+w)+^K@8G++@%%/$ K$$e6$#x%e6${e%B]&M(#U6$'f&+9@+9@+9@C&%fo%fo%KG&fJ&fJ&fJ&|s%|s%6*-.&>6*uo$Ju$$w$#w$#w$#w$.O$.O$.O$.O$.O$.O$.O$.O$.O$.O$.O$cs$Gt$Gt$Gt$Sp$Sp$xo$xo$Sp$Sp$Sp$Gt$Gt$cs$cs$21@`0$w^@5}@MU#tQ$aP$~O${O$]O$=e%Kf%qI+dr++w+PK+}T+q;@rD+#/+by+-'@{G+q;@q;@~P+T@x)+=>+YK+>K@CO@CO@CO@k#$b=@Aq@7X+7X+3,$3,$j'$YM+YM+7h$]P+tI+(t#7X+fh#fh#qr$qr$Aq@Aq@Aq@fh#<&@<&@{k@{k@|=@6o@6o@jb#jb#T##ZK+Q,+2T+2T+|V+|V+S,@S,@x)+x)+>T@3]+'T@rd+:f+; +; +>[+*E#*E#&1@N@@cP$>%@RC*RC*mx*mx*mx*mx*_c*_c*;t*Ou@CF*WI*PH*DF*XI*YI*ZI*-m$!5*>G*`I* J*;b*pK$.J*[I*+J*cQ&4& 3K@.y&k<.aR#:{.zI*7&+6l%pN%]1%^b+6j+Ea+Ea+xc+xc+xc+xc+$(+Ea+Ea+Ea+xc+xc+$(+$(+$(+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.xc+T_+T_+$(+$(+G|@7P.B#@B#@B#@B#@B#@B#@B#@B#@'W+'W+{y%B#@`b&!D+!D+h~ C! q9+jy.]$@]$@jy.q9+dl.6g+jy.dl.q9+]$@6g+6g+]$@G|@G|@G|@G|@G|@G|@G|@G|@Kh+T_+$(+$(+G|@G|@$(+xc+cI+cI+cI+cI+cI+cI+cI+cI+}f.}f.}f.}f.}f.}f.}f.}f.bH@cI+cI+bH@bH@cI+cI+bH@cI+l7 }f.}f.}f.}f.l7 cI+}f.}f.}f.}f.}f.}f.}f.}f.bH@bH@bH@bH@bH@bH@bH@bH@cI+NM+NM+NM+cI+l7 }f.bH@}f.}f.}f.}f.}f.}f.}f.}f.5A.xc+T_+$(+Ea+5A.xc+$(+5A.xc+T_+$(+xc+Ea+$(+G|@xc+Ea+Ea+xc+G|@G|@$(+Ea+5A.5A.Ea+Ea+Ea+xc+xc+xc+Ov+[y+J; |f.%U.Ov+[y+|f.|f.|f.|f.|f.|f.|f.|f.|f.|f.|f.|f.|f.|f.|f.|f.|f.%U.[y+J; [y+Ov+Rx.", "L) 6[ L) S& C& S& L) S& [! L) 6[ 6[ L) [! S& u& u& C& S& L) 6[ o^ o^ 6[ 6[ 6[ 6[ 6[ 6[ 6[ Z^ x% PI.PI.Hu+Hu+8v.8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+$9.^{ L) 6[ 6[ o^ o^ -^ -^ -^ 6[ L) [! [! 6[ .^ p: .^ .^ .^ .^ .^ .^ .^ .^ o^ o^ o^ o^ o^ o^ o^ o^ U@ fd fd U@ U@ fd fd U@ .* * fd fd fd .* 2% U@ 5! 4{ 4{ 4{ G{ G{ H{ H{ H{ G{ 4{ 5! 2{ 3{ 3{ $% )i+6v@QB@af.g% af.QB@QB@QB@QB@af.af.af.af.g% ~_ 4! [] [] b) $& $& $& 9# [] [] [] [] !5 !5 !5 :] &5 I> v% v% v% I> fL.w4.I> a, a, I> I> a, a, I> l. l. l. l. l. l. l. l. l. l. l. l.7v@7v@7v@7v@n3 {_ |x.|x.{_ ;b.O9. F.;b.{_ {_ {_ {_ ;b.|x.O9.w4.w4.w4.a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, Vl.Vl.ym.(s.(s.aq.aq.{t.{t.{t.{t.{t.j}+j}+l#@l#@l#@6% 1% 9, H;@H;@V[&ni Iu+^9*(= St }A+dM+KF*+6.:h ns.SI @J*#J*f:@$J*:8*wC.3I*4I*i/+vD$b/$b/$%J*F+@LD@e>@EE*GH@PY$Tb+#@##@#S)@W,@y1#A0%km$A0%Z+$B%%B%%K6@BM#<-+3W.3W..*+_-+Vk$Vk$RA$L[#*c$*c$*c$*c$Wk$*c$jm${m$ln$]m$Tj$,Z#%u$%u$nw$Ms$Rj$09$bv$bv$d9$5($5($5($5($d9$!l$~l$!l$d9$5($d9$~l$0N$~l$vp#[{#yA#yA#yA#M+#M+#M+#M+#2R+2R+4G+4G+4G+4G+YK+3G+8~@%h%=h%=h%O[$O[$4:*4:*Rm#{k#~k#1h#xI+*B+jy+^w+x)+x)+x)+x)+9G+9G+9G+9G+0G+>B+O)@O)@t<@t<@qt$Q,@3 @>T@>T@>T@9G+9G+9G+9G+0G+0G+4 @ny+ny+ny+K@@my+0G+9G+0G+0G+4 @4 @0&@0&@=9@,'$pr$u!$4N#4N#9N$4N#G6@a$@H6@H6@*9@*9@)~#)~#*9@*9@*9@*9@*9@*9@*9@P,@b=@0&@K@@K@@0&@0&@L@@O,@a$@a$@G6@G6@c&@s<@!B+WA+(T+f~+&4+N@+W-$G/%&J**J*CI*X}&$M%*/%J_%k<&QB$OX#})#=1@Ub+h/+li@d_+Ar+4W.+*+> $]B+0x$k3&U@&n%&[$&nz#r8+@N+ib#'T@f[+2]+T.+l0+N@+&4+u)+;2+Mb+Nb+Nb+jc@jV@}t#`J#W1#oq#;f+e8+)6+E_$1@$9,$l1$=o#4l#5l#Sc#9E#=J*-J*;J*>J*,J*'J*)J*!J*~J*{J*]J*^J*/J*(J*_J*:J*$b,$!c$!c$yB#xB#>/$3t#2t#@}#%3@em$ec@em$7q$)6+%2+%2+Es$-f+Vl+YN#hr+N2@0X+Nl+}G+}G+q;@o0+si+M4#&m+[w+^/+Tn+ED+,B+^K@8G++@%bN$>J$ K$(^$qn%%K$_a$@d$@d$N;$BT$*6$_P+fX+2 @~-+&N+X{@a~@Jn+ok+X>$6)$6)$W>$V>$V>$}b$d6$Ew$Ew$-r$Or$,o$,o$bp$bp$>q*>q*3H*3H*;Z$;Z$E'%E'% X$3H*+O%+O%3H*E'%E'%.Y$ap$/g%G=%G=%>o$Aq$wo$wo$-r$-r$BT%BT%YE*YE*YE*y+&Z0@/L+/L+/L+X<@f}@_u%_u%aC$.9@='$g>$8a$#x%8a${e%C&%M(#M(#M(#Z0@C&%+9@F5&fo%fo%KG&fJ&fJ&fJ&|s%|s%6*-.&>6*uo$Ju$$w$#w$#w$#w$.O$.O$.O$.O$.O$.O$.O$.O$.O$.O$.O$Gt$Gt$Gt$Sp$Sp$xo$xo$xo$xo$xo$xo$Sp$Sp$Gt$Gt$>q$E4@I2@>:@OS#bP$p'%|J*|J*4F*rg%1J*NK+dr+(T+Kl+.B+[T+qD+Nl+Nl+/G+/G+[T+[T+~P++x)+x)+=>+YK+>K@V.@V.@CO@k#$b=@Aq@7X+eh#3,$8d%j'$YM+YM+7h$]P+tI+(t#7X+fh#fh#qr$qr$qr$Aq@fh#fh#<&@:&@fz@Rx#jb#jb#;I$;I$v)%{]%ZK+Q,+2T+2T+|V+|V+S,@S,@T@3]+'T@rd+.@#.@#X.+Q2@*E#&1@&1@Li+RC*Li+Li+Je@Je@+}@+}@+}@n9@jE*o#$2J*3J*0G*=G*EF*YI*ZI*-m$3A*4J*5J* J*6J*/V&7J*8J*9J**V 3$ Ae+%z&v7+@:+e{+@:+0J*FU%qN%ps%O4%y$$xc+xc+xc+Ea+Ea+Ea+Ea+xc+xc+xc+$(+$(+T_+T_+T_+xc+xc+xc+xc+xc+xc+xc+xc+5A.xc+G|@G|@T_+T_+Kh+oh.B#@B#@B#@B#@B#@B#@B#@B#@B#@B#@`b&`b&`b&`b&`b&/{ C! (w.QL+^x#^x#QL+(w.h)@QL+Di*^v.^v.h)@^x#^x#q9+G|@G|@G|@G|@G|@G|@G|@G|@y4&Kh+T_+T_+Kh+7P.G|@xc+}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.ko.ko.}f.}f.ko.ko.}f.l7 }f.bH@aH@aH@bH@}f.l7 }f.}f.}f.}f.}f.}f.}f.}f.cI+cI+cI+cI+cI+cI+cI+cI+l7 l7 cI+NM+cI+l7 bH@aH@bH@bH@bH@bH@bH@bH@bH@bH@xc+$(+G|@T_+xc+Ea+$(+G|@xc+$(+G|@T_+Ea+5A.xc+$(+$(+xc+xc+$(+G|@T_+xc+]! 5A.5A.5A.Ea+xc+xc+xc+$(+%U.|f.J; |f.%U.%U.[y+J; |f.|f.|f.|f.|f.|f.|f.|f.,W+,W+,W+,W+,W+,W+,W+,W+/w.,W+LN.,W+$U.S|@", "o^ -^ 6[ S& u& u& C& C& [! L) 6[ 6[ L) [! C& T% S% R% C& [! 6[ o^ -^ 6[ 6[ 6[ 6[ 6[ 6[ 6[ Q_ l3 w% w% x% j% j% 7% 7% j% j% j% j% j% j% j% j% &% S& [! [! L) L) L) L) og .^ o^ L) L) o^ .^ p: .^ .^ .^ .^ .^ .^ .^ .^ o^ o^ o^ o^ o^ o^ o^ o^ U@ fd fd U@ U@ fd fd U@ * fd 5[ 5[ 5[ * 2% U@ 4{ 4{ G{ G{ H{ H{ H{ 24 H{ G{ 4{ 5! 2{ 3{ d= $% |x.w4.I> v% f% v% I> I> fL.fL.I> v% v% f% 5% &_ 4! m* m* .# .# +# +# j+ +# .# .# m* O) O) :] :] n3 v% v% v% I> fL.w4.a, I> a, a, I> I> a, a, I> l. l. l. l. l. l. l. l.)i+)i+)i+ l.7v@X_ X_ X_ &_ n3 W_ {_ W_ {_ |x. F.;b.{_ {_ {_ {_ ;b.|x.O9.W_ fL.w4.w4.a, 8H.8H.cl+a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, Vl.Vl.ym.(s.(s.aq.aq.{t.{t.{t.{t.{t.j}+#9.PI.PI.PI.VW.VW.9, ^#&*o@vK+&R+~<*aJ*f= Ks*kF+*9 3O$j[ /i ns.-S%@J*bJ*vh#cJ*dJ*qt*eJ*`<*us@WF@@o+Ap+-&$E!$LD@e>@23@sc@PY$Tb+#@#hB@S)@W,@y1#A0%km$km$A0%A0%:-+BM#3W.ki@ki@3W.W,@.*+=7$=7$L[#L[#L[#RA$jm$jm$!U#Wk$*c$jm$]m$ar$,Z#~}%%u$=c$Ms$Rj$09$90$J$+J$+b8$c9$c9$c9$c9$b8$b9$bq$c9$_8$47$_8$b9$ow$bq$[{#[{#yA#yA#yA#M+#M+#M+#M+#CI+CI+5&@5&@5&@5&@2 @[V+7~@a^@7~@6~@6~@H)@B+>B+t<@t<@Q,@S##qt$5o@3 @3 @3 @3 @f^@;B+;B+;B+4 @ny+ny+Z.@K@@K@@e^@e^@0G+0G+0G+4 @4 @4 @0&@0&@*w$=r%TK$,'$pr$u!$4N#-_#G6@a$@H6@H6@*9@*9@)~#)~#*9@*9@*9@P,@*9@P,@*9@P,@jb#}=@ED+ED+}=@}=@Jl+QK+FD+FD+(P+(P+Kl+PK+WA+A$+:V+)B+u)+N@+W-$q=@]n%K3$L2@fJ* A$E1#Z_#k<&R2@`o$})#=1@Ub+h/+li@Ar+tc@<-+_-+XX.|/+.l#('$27$n>%5P#<_+/K@ib#@N+hX@h~+S0+,i#)-+)-+u)+/f+N0+N0+od+9X+v=@pD+}t#3&@Ey#df# ;$,6+E_$1@$9,$r=$j:%=5#5l#5l#;8#$a#gJ*hJ*iJ*jJ*kJ*lJ*mJ*nJ*oJ*pJ*qJ*rJ*sJ*tJ*uJ*vJ*wJ*xJ*yJ*pB*zJ*AJ*#f%^r%X7#Q0#Kc#Rc#S7#VB*ai#D+%b,$,~%;w#7t#pd$*w#xB#3t#3t#D_$@}#em$em$em$Es$&2+hd+gd+Es$`-$Wl+YN#On+*k+N2@rD+u&@t&@9X+7~+Lb+M4#=m+&m+Yn+ L+#B+T##0G+8G+~K@bN$iF$S!$S!$Rb$Ej$ni$,p$,b$BT$BT$*6$_P+4G+;K@/w+&N+-(@!B+MF@@q+J2@p0$p0$W>$W>$-'$Et$|s$`u$`u$wo$Or$,o$n7$'t$cp$>q*3H*fS%;Z$;Z$E'%E'% X$E'%3H*.O%+O%3H*d7%+Y$d7%7l$/g%/g%G=%>o$Aq$Aq$wo$-r$-r$BT%BT%BT%'E$YE*y+&X<@/L+b1@b1@X<@f}@_u%_u%aC$*'$='$g>$8a$#x%8a${e%+9@U6$Y0@Y0@B]&C&%F5&Kp$fo%fo%KG&E5&E5&E5&)r$)r$ZW&|s%(n$YS&YS&:n$:n$Ft$`u$`u$xo$xo$Sl$=3@=3@cs$=r$=r$=r$LG&KG&fJ&fJ&fJ&7C*(n$|s%|s%YS&7C*YS&|s%Ju$$w$#w$#w$#w$+O$+O$+O$+O$+O$+O$.O$.O$.O$.O$.O$Gt$Gt$Sp$Sp$Sp$xo$xo$xo$xo$xo$xo$Ao$Sp$>q$Gt$`0$w^@48+G,@v~@ZM@fK@re@re@pg%qg%kh%]P+K@V.@V.@CO@DD+b=@#9@fh#fh#3k#ab%2N#7h$7h$7h$/P+/P+(t#uy#eh#eh#qr$qr$qr$Aq@fh#<&@:&@:&@Rx#>;%;I$;I$v)%v)%Yp%#r%ZK+:P+2T+T,@|V+kX+S,@v;@Q,+:P+n.h~ !D+/{ `b&|m.{y%*$@dl.(w.QL+^x#^x#QL+(w.h)@(w.QJ*RJ*RJ*Di*QL+QL+dl.T_+T_+T_+T_+T_+T_+T_+T_+iS.7P.G|@G|@7P.oh.G|@xc+aH@aH@aH@aH@aH@aH@aH@aH@}f.}f.}f.}f.}f.}f.}f.}f.l7 13+13+l7 l7 13+13+l7 }f.bH@Bz$9g.9g.Bz$bH@}f.}f.}f.}f.}f.}f.}f.}f.}f.ko.ko.ko.ko.ko.ko.ko.ko.aH@bH@l7 cI+cI+l7 }f.bH@aH@aH@aH@aH@aH@aH@aH@aH@xc+T_+Kh+G|@$(+xc+$(+G|@$(+T_+G|@T_+Ea+5A.Ea+xc+T_+$(+$(+T_+G|@T_+Ea+be+5A.5A.5A.Ea+xc+xc+$(+$(+%U.|f.J; |f.%U.%U.[y+J; |f.|f.|f.|f.|f.|f.|f.|f.,W+,W+,W+,W+,W+,W+,W+,W+/w.,W+LN.,W+$U.S|@", "L) [! [! L) L) S& u& [! [! [! [! [! [! [! [! {@ {@ {@ {@ {@ {@ {@ {@ {@ {@ {@ {@ m@ U@ .* * ^{ ^{ ^{ ^{ ^{ ^{ ^{ ^{ u% y% y% y% y% u% =] -h -^ -^ -^ o^ 6[ 6[ L) L) [! [! [! [! [! [! [! [! L) 6[ -^ .^ .^ -^ 6[ L) p: .^ .^ -^ -^ o^ o^ 6[ U@ U@ U@ 2% 2% 2% 2% 2% 5[ fd * fd ui 5[ 2% {@ n3 ~_ &) &_ n3 n3 ~_ &_ n3 n3 n3 n3 n3 n3 n3 n3 o3 =5 ed =5 Y_ t% Y_ o3 .o ac ed =5 =5 ed ac .o .* .* .* .* .* .* .* .* .* .* .* * fd fd 5[ 5[ 8H.a, a, w4.fL.I> I> v% w4.w4.w4.w4.w4.w4.w4.w4. l. l. l. l. l. l. l. l.0c 0c A^.X_ 7v@7v@ l. l.N/.G7 24 H{ H{ 24 G7 N/.5! 4{ H{ 24 24 H{ 4{ ~_ O9.;b.{_ W_ W_ {_ ;b.O9.W_ W_ {_ ;b.;b.{_ W_ W_ fL.fL.w4.w4.a, 8H.8H.8H.w4.w4.w4.w4.w4.w4.w4.':+UV 21.21.)W+ym.bv#ym.(s.[3+[3+cp.#9.QI.$;&4I%4I%is@O7.N7.Fv+10*AH.ak*SJ*TJ*UJ*([ kF+x~ 3O$j[ 01.^C+z%+VJ*dQ.gB.WJ*XJ*dd@YJ*'M%{5*Q%$t4#!.$ty#}k+UF@23@d!@dk@!}@!}@dk@$>#!}@S)@S)@W,@W,@S)@S)@!}@_-+,>+W,@S)@W,@.*+4[%=7$=7$=7$=7$=7$=7$=7$L[#L[#!U#Wk$Wk$*c$ln$ln$CO#CO#=c$>b$Ms$Rj$09$09$bv$bv$,L$,L$,L$,L$,L$,L$,L$,L$_a$_a$_a$_a$_a$_a$_a$ni$Wx$gX@gX@oZ@BO@fX@fX@fX@gX+gX+5$@5$@5$@5$@>K@5$@3G+}V+3G+3G+3G+3G+:P+:P+x)+x)+x)+x)+9G+9G+9G+cB@R)@w;@CO@]K@,T@x;@3 @~-+Y.@*>+K)@T##S##{w+jb#K)@#a@#a@#a@#a@#a@K)@K)@K)@;I$6o@ED+wI+QK+wI+tr+L)@0&@4 @4 @0&@0&@0&@0&@0&@0&@a&@a&@a&@a&@a&@a&@)~#:&@:x@K,@K,@:x@fh##9@&t@fz@fz@fz@6o@fz@6o@fz@6o@!w+!w+)w+)w+vD+vD+sr+sr+_c@up+R0+Q0+Q0+R0+Q0+qy+by+#/+od+VF#e)+;<$m7#8i+Cr%^{#Y_#JO$k<&3z@}x@3z@+ +[)#l #l #1)#8I#K6@IL#/ %6 @GM@JL#T,+IK$x_%y)+(8$+N++N+J,@H,@W&+S0+!-+c[+Rn+/|+lp+]_+]_+_k+_k+V4@ZA+3&@/+@oq#Nn#d8+gw$51%k}%oT#!}#Ff#Jc#Wt%!w*ZJ*_8#`J*[z# K*.K*+K*@K*#K*$K*%K*&K**K*=K*-K*;K*>K*^A*^A*jA*,K*pB*'K*az*2H**f%)K*!K*S7#Rc#S7#VB*.H*~K*>w#>w#>w#}@$-w#Qy#wB#My#My# ;$D_$D_$D_$Vl+7q$H#$Tx$H#$-f+K@zM@iX+d8$5($b8$Wx$N+#Wx$N+#gX@gX@7V@gX+2 @X.@'_#-7@=K@Mx#O<@.q+&E+g-$G4@A;$W>$W>$|s$1s$-r$-r$,t$,t$,t$e6$e6$m7$)'%rP%{K*]K*K%%^K*E'%>q*;Z$;Z$9l$8l$8l$>k$N*%mW$7l$B-%B-%u/%;k$Si$$I%Aq$4P$4P$,t$,t$,t$|b$[V%h>$f}@gq@gq@l(@/L+/L+X<@aC$T2$s9$8a$d6$Ew$`u$`u$|s$+9@`0@&G$W=$B]&C&%='$V>$Et$Et$Et$Ao$Sp$Sp$Sp$Sp$&w$&w$&w$Ju$Ju$7S$7S$7S$$w$$w$$w$$w$$w$$w$$w$$w$Ft$:n$:n$:n$`u$`u$Ew$Ew$2r$2r$2r$2r$2r$2r$2r$2r$xo$q$`0$>q$`0$4}@,:@C5%lm+Gt+(t#~P+A$+ay+ N+}R+}R+OK+OK+}R+ay+~P+~P+@w+@w+B+lX+DD+w;@F@@CO@V.@,T@Q,@b=@b=@a&@*9@gY#Vv#Vv#Lx#Lx#YA#YA#YA#YA#YA#Lx#5N#pr$pr$pr$,'$,'$,'$=9@a&@=9@0=@a=@t<@O)@O)@0G+< @>}@I)@>}@r<@7~@r<@u'%I)@7~@b$>b$Rj$Rj$Rj$Rj$4($4($@d$y4#y4#y4#y4#y4#y4#y4#S5+S5+S5+S5+S5+S5+S5+ni$L1#{^#{^#gX@7V@BO@BO@BO@gX+gX+5$@5$@5$@5$@>K@5$@4G+2R+4G+4G+4G+4G+YK+YK+8G+8G+8G+8G+cB@cB@cB@cB@W.@W.@F@@F@@x;@cB@3 @f^@;B+*>+K)@T##{w+iy+dB@~w+K)@#a@K)@K)@K)@K)@6o@6o@Rx#{k@tr+wI+FD+|R+<&@{k@a&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@a&@:&@:x@K,@K,@:x@fh##9@#9@fz@fz@6o@6o@6o@6o@6o@dB@!w+mr+aX+aX+np+np+mp+mp+SW$tp+Ob+/|+/|+Ob+/|+O0+Jt+='@N0+7}@//+Kd$Ie@&X&^{#D1#JO$6u%8I#3z@}x@3z@+ +Pr#l #l #3z@I4@O@@hB@P0@ty#Q0@bK*d$@x_$Rs@J4#(8$+N++N+J,@Hl+W&+!-+!-+Rn+Rn+lp+lp+]_+]_+_k+_k+1$@1$@3&@(+@+;B+$Ew$,t$-r$-r$,t$,t$5c$e6$w,$e6$wK*xK*xK*yK*K%%^K* X$;Z$3H*3H*8l$N*%>k$Ti$Ti$Ti$QV$QV$B-%B-%;k$;k$$I%$I%yo$yo$1s$1s$d6$d6$y+&(;$/L+l(@l(@l(@/L+/L+X<@X<@s9$>y$e6$d6$Ew$`u$Ew$}b$gp%M9&}7&&G$B]&Z0@g>$='$Et$Et$zb$Ao$Sl$Sl$=3@=3@#w$#w$$w$$w$7S$7S$;o$;o$7S$7S$7S$7S$7S$7S$7S$7S$7S$7S$7S$;o$;o$;o$3u$3u$Ao$Ao$3(@3(@3(@3(@3(@3(@xo$3u$0p$#w$jQ$jR$w+gy+{k@L)@0&@O)@O)@>B+DD+DD+F@@CO@V.@!K@9=@0=@0&@0&@P,@L@@H6@G6@Vv#Vv#Lx#YA#vi$vi$vi$YA#5N#pr$pr$pr$,'$,'$=9@=9@a&@a&@0=@0=@O)@O)@4 @0G+dX+>}@u'%>}@8~@7~@8~@u'%u'%7~@H)@b^@H)@b^@<`#/K@Sx#:_+Gq@$E++N@Rk$Rk$Rk$(e@(e@/K*/K*/K*/K*3^@^-@o#$TG%zK*AK*EJ*BK*_K* fL.w4.a, 8H.8H.w4.w4.w4.w4.w4.w4.w4.w4. l. l. l. l. l. l. l. l.#y##y#)i+)i+ l.7v@X_ X_ N/.G7 24 H{ H{ 24 G7 N/.H{ 24 24 $w $w 24 24 H{ |x.;b.{_ {_ {_ {_ ;b.|x.W_ {_ {_ ;b.;b.{_ {_ W_ w4.w4.w4.a, a, a, 8H.8H.w4.w4.w4.w4.w4.w4.w4.':+QF+ZT#ph#ph#ym.ym.aq.j}+[3+[3+91+QI.QI.$;&)1.K@5$@4G+2R+4G+4G+4G+4G+YK+YK+8G+8G+8G+8G+cB@cB@cB@cB@F@@W.@7G+&n%H@@H@@3 @9G+;B+*>+,B+K)@iy+~w+dB@$B+,B+mX+,B+,B+,B+,B+|=@|=@{k@L)@Jl+wI+|R+:&@#9@fz@a&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@a&@:&@K,@K,@K,@K,@:x@<&@#9@{k@{k@|=@|=@|=@|=@|=@!w+!w+mr+aX+aX+np+np+mp+mp+SW$tp+^/+/|+Ob+Ob+G:+O0+Jt+='@U_@/_+3X+5i@sg@Q;+^{#D1#JO$6u%8I#3z@wy+R2@+ +Pr#+ ++ +8I#4)#O@@hB@Mw#5N&,5@Q0@@>#Rs@1O#5%$(8$+N++N+J,@Hl+W&+!-+!-+Rn+Rn+lp+lp+]_+]_+_k+_k+{/+{/+/+@ir+Nn#!|+;6+qD$OB$Y:%j:%0v*S7#Rc#LR#Qc#HK*wi#Fi#IK*JK*KK*>I#)a#LK*MK*NK*OK*PK*QK*RK*SK*TK*9z*UK*VK*pB*XA*lA*lA*WK*XK*YK*YK*ZK*`K* L*.L*uf#'>$'>$'>$,>$,>$D7#D7#wB#wB#My#My# ;$ ;$D_$D_$`-$fd+H#$fd+Nn#+Q,+RQ@J #pZ@vp#!l$]v#Wx$gX@gX@gX@gX@gX@gX+5$@>K@DD+9=@:^#Ox#~P#+s+.s+`r+Yp+uG+#1@[!$6)$Ew$m7$-r$-r$,t$,t$5c$e6$w,$e6$+L*yK*xK*xK*>Z$y$%+Y$ X$>q*>q*C=%Es%Ti$/g%/g%/g%QV$QV$rF$B-%7l$7l$G=%G=%$='$}b$}b$Ew$d6$ !%H*$V=$&G$Z0@B]&{e%{e%|s$Et$zb$zb$Sl$=3@=3@=3@$w$$w$7S$7S$7S$;o$;o$;o$7S$7S$7S$7S$7S$7S$7S$7S$$w$$w$$w$$w$7S$7S$xo$xo$zb$zb$Na$Na$Na$Na$Na$Na$xo$xo$;o$#w$'O$jQ$B+DD+DD+F@@CO@V.@!K@8$@ny+Z.@Z.@L@@L@@H6@gY#Vv#Vv#Lx#Lx#YA#YA#vi$YA#5N#pr$,'$,'$,'$,'$=9@=9@Z.@Z.@0&@0=@O)@4 @ny+*>+:P+wp#8=@wp#7=@3G+7=@8=@8=@3G+AI+TK+AI+TK+(8$/K@Sx#:_+Gq@$E++N@Rk$Rk$Rk$(e@(e@/K*/K*/K*/K*3^@^-@o#$@L*#L*AK*0G*{c*_K* I> fL.fL.w4.w4.a, a, w4.w4.w4.w4.w4.w4.w4.w4. l. l. l. l. l. l. l. l.#y##y##y#)i+)i+ l. l.7v@N/.G7 24 H{ H{ 24 G7 N/.24 $w $w $w $w $w $w 24 ;b.;b.;b.{_ {_ ;b.;b.;b.{_ {_ ;b.;b.;b.;b.{_ {_ w4.w4.a, a, a, a, a, a, a, a, a, a, a, a, a, Vl.a:@ZT#ph#ph#bv#bv#(s.{t.[3+[3+91+QI.QI.$;&)1.K@5$@4G+2R+4G+4G+4G+4G+YK+YK+R)@R)@R)@R)@x;@x;@x;@x;@F@@W.@&n%j)$+:$CD+9G+lX+*>+0G+,B+,B+$B+$B+!w+$B+,B+mX+,B+,B+,B+,B+|=@|=@tr+tr+Jl+Jl+:&@<&@&t@Rx#a&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@a&@|R+K,@(P+(P+K,@:x@<&@#9@{k@{k@|=@|=@|=@|=@|=@|=@!w+mr+aX+aX+np+np+mp+mp+_x@tp+^/+Ob+^/+Ob+G:+Zg+@/+#/+U_@/_+3a@5i@sg@'m%D4#4y+JO$6u%8I#3z@wy+R2@iB@sp%iB@2)#4)#K6@hB@/ %ty#-c@,5@yg%,7$;>+S,+|z@(8$+N++N+J,@Hl+W&+!-+!-+Rn+Rn+lp+lp+]_+]_+_k+_k+_k+_k+(+@>k+ed+!|+;6+Fb+P{$@R$i:%~w*`K*Rc#Z7#+f%-L*|l#Hi#&O#;L*>L*vo#(G*p2#,L*qJ*'L*)L*!L*~L*{L*]L*^L*,D*VK*pB*XA*lA*_B*tK*/L*(L*(L*_L*ZK*LB%:L*!>$2@$2@$2@$v.$v.$I`#I`#wB#wB#My#My# ;$ ;$D_$D_$-f+fd+H#$fd+$='$='$}b$d6$1s$d6$ !% a@gp%}7&Z0@B]&w,$l7$|s$|s$zb$zb$Sl$=3@io@io@$w$7S$7S$7S$;o$;o$0p$0p$;o$;o$;o$;o$;o$;o$;o$;o$#w$#w$#w$$w$$w$7S$Sp$Sp$Iu$Iu$7j$7j$7j$7j$7j$7j$Sp$Sp$7S$#w$rQ$,O$B+DD+DD+F@@CO@V.@!K@I@@my+K@@K@@L@@P,@*9@*9@G6@Vv#Lx#Lx#YA#YA#vi$YA#5N#pr$,'$,'$,'$=9@=9@=9@K@@Z.@0&@4 @4 @4 @ny+;B+:P+wp#8=@wp#7=@3G+7=@8=@8=@3G+AI+TK+AI+TK+(8$/K@Sx#:_+Gq@$E++N@Rk$Rk$bi%(e@(e@/K*/K*/K*/K*3^@^-@o#$}L*|L*1L*0G*0G*2L*3L*(I*S[*fW&4J*K4&'G*4L*uu.9/.Z[.e $S| ko.r-@QU+vA*@:+0J*0J*}d.qN%R4%@d+x*$*$@Ea+5A.Ea+$(+G|@T_+xc+$(+$(+$(+$(+$(+$(+$(+$(+Ea+xc+$(+T_+T_+$(+xc+Ea+xc+xc+xc+xc+xc+xc+xc+xc+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@dl.dl.dl.dl.dl.dl.dl.dl.]$@jy.q9+dl.Ai.Ai.Ai.Ai.aH@aH@aH@aH@bH@bH@bH@bH@aH@bH@}f.}f.}f.}f.bH@aH@T_+G|@$(+Ea+T_+oh.Kh+Ea+T_+G|@G|@$(+Ea+Ea+T_+7P.T_+T_+T_+$(+xc+Ea+Ea+Ea+T_+T_+T_+$(+xc+Ea+Ea+Ea+}f.}f.}f.}f.}f.}f.}f.}f.NM+NM+NM+cI+cI+l7 l7 }f.Bz$Bz$Bz$aH@aH@bH@bH@bH@l7 }f.}f.bH@bH@bH@bH@bH@Ea+G|@G|@Ea+Ea+G|@G|@Ea+xc+xc+xc+xc+xc+xc+xc+xc+iS.Kh+$(+$(+Kh+Kh+$(+]! ]! ]! 5A.Ea+xc+$(+$(+$(+}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.|f.J; P] P] P] J; |f.[y+[y+[y+|f.|f.J; P] ", "[! S& [! o^ .^ -^ 6[ [! [! [! [! [! [! [! [! U@ U@ U@ U@ U@ U@ U@ U@ m@ m@ {@ {@ m@ U@ 2% .* .* .* .* .* .* .* .* .* {@ l& l& l& l& {@ m@ U@ 6[ 6[ o^ o^ o^ o^ o^ o^ -^ -^ -^ -^ -^ -^ -^ -^ L) 6[ -^ .^ .^ -^ 6[ L) -^ -^ -^ -^ -^ -^ -^ -^ .* .* .* 2% U@ U@ m@ m@ 2% m@ {@ m@ .* * * 2% 8c &_ W_ ~_ 0' 9c $% &5 n3 n3 n3 n3 n3 n3 n3 o3 =5 5[ 5[ fd U@ m@ m@ 2% .* .* .* .* .* .* .* .* og og og og og og og og p: p: .^ .^ .^ .^ .^ .^ a, a, w4.w4.fL.fL.I> I> w4.w4.w4.w4.w4.w4.w4.w4. l. l. l. l. l. l. l. l.7v@ l. l.)i+)i+#y##y##y#N/.G7 24 H{ H{ 24 G7 N/.$w $w $w 24 24 $w $w $w {_ ;b.;b.;b.;b.;b.;b.{_ {_ ;b.;b.|x.|x.;b.;b.{_ a, a, a, a, a, a, w4.w4.a, a, a, a, a, a, a, Vl.sS {b+)W+{b+bv#6' bv#(s.[3+[3+91+QI.QI.$;&)1.K@5$@4G+2R+4G+4G+4G+4G+YK+YK+R)@R)@R)@R)@x;@x;@x;@x;@F@@W.@&n%w)$CD+H@@lX+ZK+0G+0G+,B+w)+xD+xD+)w+$B+w)+P,+w)+w)+w)+w)+}=@}=@Jl+Jl+Jl+tr+:&@<&@#9@fz@a&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@0&@a&@|R+(P+(P+(P+(P+K,@:&@<&@L)@L)@}=@}=@}=@}=@}=@}=@!w+!w+)w+)w+vD+vD+sr+sr+;w+-w+vr+vr+vr+vr+f~+YM@(V+$w+]G+(f+3X+' +g)#gB@D4#4y+JO$8I#9Z+R2@R2@R2@iB@J[#2)#s[$BM#BM##@#/ %9)#@@#bK*U+$,7$,7$I_@m9@(8$+N++N+J,@Hl+W&+!-+!-+Rn+Rn+lp+lp+]_+]_+_k+_k+_k+_k+(+@>k+ed+!|+;6+Fb+P{$Wn#{l#~w*`K*Rc#S0#|G#8L*Lc#%f%WP#&O#;g#9L*mG*0L*aL*bL*cL*dL*eL*fL*gL*hL*iL*,D*UK*pB*jL*YA*_B*tK*kL*lL*mL*LB% L*LB%nL*y0#)$$)$$)$$'$$'$$>>$>>$wB#wB#My#My# ;$ ;$D_$D_$-f+`-$fd+`-$q*>q*+O%+O%Es%F=%7l$;k$;k$;k$QV$QV$rF$B-%7l$;k$G=%G=%xo$xo$:n$:n$Et$Et$KG&fo%g}@b1@b1@/L+f}@f}@_u%_u%*'$*'$g>$g>$5c$5c$5c${e% !%H*$gp%V=$C&%B]&l7$l7$}b$}b$Iu$zb$Sl$=3@io@0X#$w$$w$$w$7S$7S$;o$;o$;o$7S$7S$7S$7S$7S$7S$7S$7S$#w$#w$#w$$w$$w$7S$Sp$Sp$Iu$Iu$7j$7j$7j$7j$7j$7j$Sp$Gt$$w$#w$xV#rQ$[T$q$lt$`0$Na$7j$Na$E4@Ht+dr+B+DD+DD+F@@CO@V.@!K@I@@my+my+ny+Z.@P,@*9@*9@G6@Vv#Lx#Lx#YA#YA#YA#Lx#pr$,'$,'$,'$=9@=9@=9@0=@Z.@0&@4 @O)@O)@0G+0G+3 @:P+wp#8=@wp#7=@3G+7=@8=@8=@3G+AI+TK+AI+TK+(8$/K@Sx#:_+x'#7e@+N@Rk$bi%bi%(e@/K*/K*/K*3^@3^@3^@^-@o#$}L*AK*qL**G**G*FJ*3L*rL*sL*G)*4J*tL*'G*4L*uu.`< $=@uL*n+ cI+{**&c%'C+@:+0J*0J*}d.qN%R4%@d+x*$*$@Ea+5A.xc+T_+G|@T_+xc+$(+$(+$(+$(+$(+$(+$(+$(+xc+xc+$(+$(+$(+$(+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@dl.dl.dl.dl.dl.dl.dl.dl.]$@jy.q9+dl.Ai.Ai.Ai.Ai.Bz$Bz$aH@bH@l7 cI+NM+NM+aH@bH@}f.}f.}f.}f.bH@aH@$(+G|@T_+Ea+xc+Kh+G|@5A.T_+G|@G|@$(+Ea+Ea+T_+7P.T_+T_+T_+$(+xc+Ea+Ea+Ea+T_+T_+T_+$(+xc+Ea+Ea+Ea+}f.}f.}f.}f.}f.}f.}f.}f.}f.l7 l7 cI+cI+NM+NM+NM+bH@bH@bH@aH@aH@Bz$Bz$Bz$bH@bH@}f.}f.}f.bH@bH@bH@Ea+T_+T_+Ea+Ea+T_+T_+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+oh.T_+Ea+xc+T_+G|@xc+{! 5A.5A.5A.5A.Ea+xc+xc+$(+}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.|f.J; P] P] P] J; |f.[y+[y+[y+|f.|f.J; P] ", "L) [! L) o^ -^ o^ L) [! [! [! [! [! [! [! [! U@ U@ U@ U@ U@ U@ U@ U@ {@ {@ {@ {@ m@ U@ .* * 2% 2% 2% 2% 2% 2% 2% 2% {@ {@ l& l& {@ m@ U@ U@ 6[ 6[ 6[ o^ o^ o^ -^ -^ -^ -^ -^ -^ -^ -^ -^ -^ L) 6[ -^ .^ .^ -^ 6[ L) o^ o^ o^ -^ -^ .^ .^ .^ * * .* 2% U@ U@ m@ m@ * 2% m@ m@ .* * * o3 0' &) n3 ~_ |% 0' $% ~_ n3 n3 n3 n3 n3 n3 n3 o3 o3 * fd * 2% U@ 2% .* .* .* * fd fd * .* .* p: p: p: p: p: p: p: p: p: p: p: .^ .^ .^ -^ -^ 8H.8H.a, w4.fL.I> v% v% w4.w4.w4.w4.w4.w4.w4.w4. l. l. l. l. l. l. l. l.X_ X_ 7v@ l.)i+)i+#y##y#N/.G7 24 H{ H{ 24 G7 N/.$w 24 24 H{ H{ 24 24 $w {_ {_ ;b.|x.|x.;b.{_ {_ {_ ;b.|x.|x.|x.|x.;b.{_ 8H.8H.a, a, a, w4.w4.w4.a, a, a, a, a, a, a, Vl.M2 21.U/ )W+ym.bv#bv#(s.[3+[3+91+QI.QI.$;&)1.+AU#{P#nb#E!$}V#I!#Y<#Y<#!_#y[+A($!}@W,@_-+W,@W,@.*+_-+_-+.*+W,@W,@_-+.*+W,@S)@W,@.*+4[%=7$=7$=7$=7$=7$=7$=7$=7$=7$jm$jm$jm$*c$]m$]m$]m$]m$>b$>b$Ms$nw$nw$nw$,H$,H$_a$_a$_a$_a$_a$_a$_a$_a$^m$^m$^m$^m$^m$^m$^m$lw$[{#yA#yA#{^#nZ@7V@7V@7V@gX+gX+5$@5$@5$@5$@>K@5$@4G+2R+4G+4G+4G+4G+YK+YK+w;@w;@w;@w;@DD+DD+DD+DD+W.@W.@7G+7G+cB@x;@ZK+Q)@>B+0G+w)+#@>#;>+,7$ii@UN#(8$+N++N+J,@Hl+W&+!-+!-+Rn+Rn+lp+lp+]_+]_+_k+_k+{/+{/+/+@ir+Nn#!|+;6+qD$P{$@R$3[%Cv*S7#Jc#S0#|G#Jc#YK*BL*+r#Oi#CL*DL*EL*FL*GL*HL*IL*JL*KL*LL*ML*NL*Jx*,D*UK*pB*zJ*_B*2H*tK*OL*PL*PL*LB% L*LB%wf#!>$2@$2@$2@$v.$v.$I`#I`#wB#wB#My#My# ;$ ;$D_$D_$;f+`-$fd+`-$df#:i#Pg+@4+@4+6e@F:+]|+b[+ni+*l#oi+*l#^|+$4+%4+}]+ L+up+vD+*>+Q,+RQ@J #pZ@vp#!l$]v#Wx$gX@gX@gX@gX@gX@gX+5$@)K@,T@8&@x9#Ox#ZA##7@nW#s9#+q+4(@a{$[!$7)$:n$1s$-r$-r$,t$,t$5c$e6$w,$e6$#-*QL*pL*pL*sP%tP%.O%ZQ%>q*>q*C=%Es%//%7l$7l$7l$c;%c;%B-%u/%;k$Si$$I%$I%3u$3u$`u$`u$|s$|s$LG&f|&U>$kk+b1@/L+f}@f}@_u%_u%.9@aC$w,$w,$8a$e6$5c${e%V=$M9&gp%V=$+9@Z0@w,$l7$d6$}b$Iu$zb$Sl$io@0X#0X##w$#w$#w$$w$$w$7S$7S$7S$$w$$w$$w$$w$$w$$w$$w$$w$$w$$w$$w$$w$7S$7S$xo$xo$zb$zb$Na$Na$Na$Na$Na$Na$Gt$cs$.O$#w$9S$9S$[T$rH&5P$5P$9S$:V$!x$#w$cs$cs$#w$#w$#w$#w$#w$#w$cs$cs$zb$>q$31@lt$3(@3(@`0$I2@er+gp+gp+Ft++w+uI+PK+z@@fD+fD+(P+OK+@w+B+DD+DD+F@@CO@V.@!K@^K@4 @4 @4 @0&@0&@a&@*9@G6@G6@Vv#Lx#YA#YA#YA#Lx#pr$,'$,'$=9@=9@=9@0=@0=@0&@O)@t<@t<@P)@P)@>B+9G+:P+wp#8=@wp#7=@3G+7=@8=@8=@3G+AI+TK+AI+TK+(8$/K@Sx#R@+x'#7e@+N@bi%bi%nS$/K*/K*/K*3^@3^@3^@3^@^-@RL*zK*qL*qL*PH*PH*FJ*3L*rL*sL*G)*wI*tL*SL*4L*'4%Ra+O<.$g%sM cI+x2%&c%6z+@:+0J*0J*}d.qN%R4%@d+x*$*$@xc+Ea+xc+T_+Kh+G|@$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@T_+$(+$(+T_+G|@G|@dl.dl.dl.dl.dl.dl.dl.dl.jy.q9+dl.Ai.Ai.Ai.dl.dl.Bz$aH@bH@}f.l7 cI+NM+ko.bH@}f.}f.l7 l7 }f.}f.bH@xc+Kh+G|@Ea+Ea+T_+T_+5A.$(+T_+G|@T_+xc+xc+T_+Kh+$(+$(+$(+$(+xc+xc+xc+xc+$(+$(+$(+$(+xc+xc+xc+xc+}f.}f.}f.}f.}f.}f.}f.}f.bH@bH@}f.l7 cI+cI+NM+NM+l7 l7 }f.bH@aH@Bz$Bz$9g.Bz$aH@bH@}f.l7 }f.}f.}f.5A.T_+T_+5A.5A.T_+T_+5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+5A.]! ]! 5A.$(+G|@G|@T_+$(+xc+Ea+5A.5A.Ea+xc+xc+}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.[y+[y+|f.J; J; J; |f.|f.[y+[y+|f.|f.|f.|f.", "o^ L) 6[ o^ -^ 6[ [! [! [! [! [! [! [! [! [! Y_ Y_ Y_ Y_ Y_ Y_ Y_ Y_ t% t% M$ T$ M$ M$ t% Y_ t% t% t% t% t% t% t% t% M$ T$ T$ T$ T$ M$ t% Y_ ^{ Q_ Q_ Q_ y% u% u% u% y% y% y% y% y% y% y% y% L) 6[ -^ .^ .^ -^ 6[ L) o^ o^ o^ -^ -^ .^ .^ .^ =5 =5 o3 Y_ t% M$ M$ T$ .o =5 Y_ t% o3 =5 =5 o3 ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 n3 n3 n3 n3 n3 n3 o3 t% .* * * 2% 2% .* fd .* * fd 5[ 5[ fd * .* .^ .^ .^ .^ .^ .^ .^ .^ og p: p: p: .^ -^ -^ -^ w4.w4.w4.w4.fL.fL.fL.fL.w4.w4.w4.w4.w4.w4.w4.w4. l. l. l. l. l. l. l. l.X_ 7v@7v@7v@7v@7v@7v@7v@N/.G7 24 H{ H{ 24 G7 N/.$w 24 G{ 4{ 4{ G{ 24 $w W_ {_ ;b.|x.|x.;b.{_ W_ ;b.;b.|x.O9.O9.|x.;b.;b.8H.8H.8H.a, w4.w4.w4.fL.8H.8H.8H.8H.8H.8H.8H.B{$UV 21.U/ 21.aq.(s.aq.j}+[3+[3+91+QI.QI.$;&)1.K@5$@4G+2R+4G+4G+4G+4G+YK+YK+w;@w;@w;@w;@DD+DD+DD+DD+7G+W.@F@@CO@fm$fm$Q)@Q)@P)@>B+w)+:w+A@@A@@vD+xD+w)+P,+w)+w)+w)+w)+}=@}=@L)@L)@L)@L)@<&@:&@:&@|R+a&@a&@a&@a&@a&@a&@a&@a&@a&@a&@a&@a&@a&@a&@a&@a&@FD+(P+Kl+Kl+Kl+K,@:&@:&@L)@L)@}=@}=@}=@}=@}=@}=@!w+!w+)w+)w+vD+vD+sr+sr+up+-w+fy+fy+.B+vr+u)+B$+ >+Ml+6X+[=@__+b=#@>#1^@D4#3O#8I#iB@=1@})#QB$R2@iB@^M#s##ek@'>+ki@*1@/ %qG+ +@d$@c=@Rs@y_$Rb+) +(8$+N++N+J,@Hl+W&+!-+!-+Rn+Rn+lp+lp+]_+]_+_k+_k+1$@1$@3&@(+@$2@$2@$2@$v.$v.$I`#I`#wB#wB#My#My# ;$ ;$D_$D_$;f+`-$fd+-f+df#:i#Pg+6e@Pg+Pg+]|+]|+b[+b[+ni+ni+*l#^|+$4+%4+}]+ L+up+vD+;B+$g}@X<@:u%_u%_u%t8$:u%_u%t8$t8$>y$l7$w,${e%&G$`0@V=$gp%+9@C&%{e%w,$d6$d6$Iu$zb$=3@io@0X#11@iR$iR$.O$.O$#w$#w$#w$$w$.O$.O$.O$.O$.O$.O$.O$.O$7S$7S$7S$;o$;o$;o$3u$3u$Ao$Ao$3(@3(@3(@3(@3(@3(@=3@io@_a@7m@BJ$BJ$IH$@u$IH$IH$;G$@F$@F$7m@io@=3@#w$#w$#w$#w$#w$#w$cs$cs$zb$>q$31@31@lt$lt$5}@,:@5X+lm+lm+fp+A$+uI+PK+PK+Kl+Kl+OK+OK+@w+nI+ZM+dr+hh#L,@L,@yb#pe#pe#pe#Kx#pe#yb#yb#yb#yb#yb#yb#ay+PK+fy+@k+@k+QK+wI+Z.@t<@O)@>B+DD+DD+F@@CO@V.@!K@,T@R,@t<@t<@0=@0&@a&@*9@G6@G6@Vv#Vv#Lx#Lx#YA#Lx#,'$=9@=9@=9@=9@0=@0=@0=@t<@t<@Q,@r;@r;@R,@ZK+Q,+YK+jX+E@@jX+5$@4G+5$@E@@E@@4G+R,+yM@R,+yM@h[+f>$/F$0a@Fe@(3@rQ#5]@5]@2p#~R@]=#]=#]=#]=#X @X @xs*>M*#L*,M*,M*PH*W~&=G*3L*rL*ZI*G)*wI*'M*SL*KJ*'4%Ra+O<.k9 ks@NM+QF+&c%6z+@:+0J*0J*}d.qN%R4%@d+x*$|m.y$$6j+y$$/{ Bj./{ *$@*$@*$@*$@*$@*$@*$@*$@*$@G|@G|@T_+T_+T_+T_+G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+$(+$(+$(+$(+$(+$(+$(+$(+G|@T_+$(+xc+xc+$(+T_+G|@Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.dl.dl.Ai.Ai.Ai.dl.q9+jy.}f.}f.}f.}f.bH@bH@bH@bH@}f.l7 l7 cI+cI+l7 l7 }f.xc+Kh+Kh+xc+5A.$(+$(+5A.Ea+T_+Kh+Kh+T_+xc+$(+T_+xc+xc+xc+xc+$(+$(+$(+$(+xc+xc+xc+xc+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+T_+$(+$(+$(+$(+$(+$(+$(+}f.}f.}f.}f.}f.}f.bH@bH@l}+9g.aH@}f.l7 cI+l7 l7 5A.$(+$(+5A.5A.$(+$(+5A.5A.5A.5A.5A.5A.5A.5A.5A.be+]! Ea+xc+xc+xc+G|@Kh+Kh+T_+$(+Ea+5A.5A.Ea+Ea+}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.)> 6g+]$@q9+q9+q9+q9+q9+q9+q9+jy.jy.jy.jy.", "-^ 6[ 6[ o^ o^ 6[ S& [! [! [! [! [! [! [! [! Y_ Y_ Y_ Y_ Y_ Y_ Y_ Y_ =5 o3 t% M$ T$ T$ T$ T$ M$ M$ M$ M$ M$ M$ M$ M$ M$ M$ M$ T$ M$ t% Y_ o3 ^{ ^{ Q_ Q_ y% u% u% u% y% y% y% y% y% y% y% y% L) 6[ -^ .^ .^ -^ 6[ L) 6[ o^ o^ -^ -^ .^ .^ p: ed =5 o3 Y_ t% M$ T$ T$ ]_ ac o3 Y_ o3 =5 =5 o3 W_ &5 n3 n3 W_ {_ W_ n3 n3 n3 n3 n3 n3 n3 n3 o3 T$ U@ .* * 2% .* fd ui * fd 5[ ui ui 5[ fd * -^ -^ -^ -^ -^ -^ -^ -^ og og p: p: .^ -^ -^ -^ v% I> I> fL.w4.a, a, 8H.w4.w4.w4.w4.w4.w4.w4.w4. l. l. l. l. l. l. l. l. l. l.7v@7v@X_ A^.0c 0c N/.G7 24 H{ H{ 24 G7 N/.24 H{ 4{ 5! 5! 4{ H{ 24 W_ {_ ;b.O9.O9.;b.{_ W_ ;b.|x.|x.O9.O9.|x.|x.;b.8H.8H.8H.a, w4.w4.fL.fL.8H.8H.8H.8H.8H.8H.8H.B{${D )W+U/ U/ {t.{t.l#@6!.[3+[3+91+QI.QI.$;&)1.#!}@S)@S)@W,@W,@S)@S)@!}@_-+.*+W,@S)@W,@.*+4[%=7$=7$=7$=7$=7$=7$=7$=7$=7$!U#Wk$Wk$*c$ln$ln$CO#CO#5F$5F$Hs$Hs$nw$Ms$a8$%K$qw$qw$qw$qw$qw$qw$qw$qw$Ej$Ej$Ej$Ej$Ej$Ej$Ej$N1#Wx$gX@gX@oZ@BO@fX@fX@fX@gX+gX+5$@5$@5$@5$@>K@5$@4G+2R+4G+4G+4G+4G+YK+YK+w;@w;@w;@w;@DD+DD+DD+DD+7G+W.@CO@>p$>'%|#%s;@Q)@P)@>B+w)+:w+}P+A@@vD+xD+w)+P,+w)+w)+w)+w)+}=@}=@{k@{k@{k@{k@<&@:&@|R+FD+a&@a&@a&@a&@a&@a&@a&@a&@a&@a&@a&@a&@a&@a&@a&@)~#(P+Kl+Kl+Kl+Kl+(P+|R+:&@L)@L)@}=@}=@}=@}=@}=@}=@!w+!w+)w+)w+vD+vD+sr+sr+up+-w+fy+fy+.B+vr+u)+B$+%-+Ln++w+5T+f[+9V@d$@I3+X_#I.+iB@iB@=1@})#QB$QB$=1@^M#s##'>+J.+!}@(-+7P# +@Sb+@>#^-+e'#e'#QU#9V@(8$+N++N+J,@Hl+W&+!-+!-+Rn+Rn+lp+lp+]_+]_+_k+_k+V4@1$@3&@/+@df#~|+d8+gw$P{$x<%fi#}l#+f%O0#Z7#MR#=I#0w#UP#(M*_M*:M*$'>$'>$'>$,>$,>$D7#D7#wB#wB#My#My# ;$ ;$D_$D_$;f+-f+`-$-f+df#:i#Pg+6e@h0#h0#]|+]|+b[+b[+b[+b[+oi+^|+Lb+%4+^_+ L+up+vD+Y.@x)+!K@jX+5Z+_P+5($[{#Wx$gX@gX@gX@gX@gX@gX+5$@>K@cB@ED@l $SO@~P#9*$9M*YA#.5@4(@J2@W>$6)$)r$)r$-r$-r$,t$,t$5c$e6$w,$e6$qo$[)%[)%#-*Bq$ R%.O%Qp$;Z$;Z$`j%`W$x-%RV$RV$RV$}5%,/+rh$rh$6l$6l$AM$AM$$.9@aC$:u%_u%t8$t8$_u%t8$8c$P1$8c$t8$w,$aC$I*$%[&}7&gp%F5&+9@g>${e%d6$d6$4c$zb$=3@io@0X#11@bC$bC$iR$iR$.O$.O$.O$#w$iR$iR$iR$iR$iR$iR$iR$iR$7S$;o$;o$;o$0p$0p$q$>q$`0$`0$`0$`0$`0$`0$=3@0X#6k@7m@jk%jk%IH$@u$nW$nW$xI$Qi$5l$7m@io@io@#w$#w$#w$#w$#w$#w$cs$cs$zb$>q$5}@5}@31@5}@MU#v~@F,@,P+,P+lm+!P+(T+PK+PK+Kl+Kl+OK+tI+Gt+nI+ZM+dr+t9#M)@M)@L,@yb#yb#pe#pe#yb#yb#yb#pe#pe#pe#pe#}R+Kl+fy+-w+@k+QK+wI+0&@Q,@O)@>B+DD+DD+F@@CO@V.@!K@|#%zU$5o@Q,@a=@0=@a&@P,@a$@G6@Vv#Vv#Lx#Lx#YA#Lx#,'$=9@=9@=9@0=@0=@0=@O)@Q,@Q,@r;@zU$zU$r;@Q)@2T+YK+jX+E@@jX+5$@4G+5$@E@@E@@4G+R,+yM@R,+yM@h[+f>$/F$0a@= +(3@rQ#5]@2p#2p#]=#]=#]=#]=#X @X @X @xs*>M*#L*,M*,M*W~&0M*=G*3L*aM*ZI*bM*wI*'M*SL*KJ*'4%<8%$=@z@ P1.NM+tS QU+6z+@:+0J*0J*}d.qN%R4%@d+@d+B#@y$$6j+y$$/{ Bj./{ *$@*$@*$@*$@*$@*$@*$@*$@*$@Kh+G|@G|@T_+T_+G|@G|@Kh+G|@G|@G|@G|@G|@G|@G|@G|@xc+xc+xc+xc+xc+xc+xc+xc+T_+$(+xc+Ea+Ea+xc+$(+T_+Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.dl.q9+jy.]$@cI+l7 }f.bH@Bz$9g.>( l}+l7 l7 cI+NM+NM+cI+l7 l7 xc+Kh+Kh+xc+5A.xc+$(+5A.5A.$(+Kh+7P.G|@$(+$(+$(+Ea+Ea+Ea+xc+$(+T_+T_+T_+Ea+Ea+Ea+xc+$(+T_+T_+T_+$(+$(+$(+$(+$(+$(+$(+$(+xc+xc+$(+$(+T_+G|@Kh+Kh+bH@bH@bH@}f.l7 cI+cI+NM+JI$>( Bz$}f.cI+NM+NM+cI+5A.$(+$(+5A.5A.$(+$(+5A.5A.5A.5A.5A.5A.5A.5A.5A.5A.$(+Kh+T_+5A.]! Ea+T_+oh.Kh+T_+Ea+5A.5A.5A.Ea+}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.i~ Yt.6g+jy.q9+q9+q9+q9+q9+q9+jy.jy.]$@6g+", "[! L) 6[ o^ .^ p: p: o^ 6[ 6[ 6[ L) L) [! [! =5 &) 0' |% &_ n3 &_ $% ~_ ~_ &_ &_ &) &) $% $% $% &) &_ ~_ ~_ &_ &) $% n3 n3 n3 n3 n3 n3 n3 n3 %% %% %% 4% 5% 5% f% f% I> v% f% 5% 4% %% ~% ^* L) o^ .^ -^ L) [! 6[ .^ 6[ o^ .^ og og og .^ .^ Y_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 n3 ~_ &_ ~_ W_ |x.~_ n3 n3 &5 W_ W_ {_ {_ n3 n3 n3 n3 n3 n3 n3 o3 o3 .* * * * fd fd fd fd fd 5[ 5[ ui ti ti pj og og og og og og og og p: .^ .^ -^ -^ o^ o^ 6[ w4.w4.w4.w4.w4.w4.w4.w4.fL.fL.w4.w4.a, 8H.8H.cl+X_ X_ X_ X_ X_ X_ X_ X_ A^.A^.A^.X_ X_ 7v@7v@7v@G{ G{ H{ H{ 24 24 24 $w H{ 24 $w N/.N/.$w 24 H{ O9.|x.|x.;b.{_ {_ W_ W_ |x.|x.|x.|x.|x.|x.|x.|x.w4.w4.a, 8H.8H.cl+xj+xj+xj+cl+a, fL.fL.fL.w4.Vl.sS un.un.un.ym.ym.ym.ym.#9.#9.$;&$;&4I%4I%)1.#W,@W,@W,@W,@W,@W,@W,@W,@W,@W,@.*+.*+_-+_-+4[%4[%=7$=7$=7$=7$=7$=7$=7$=7$Wk$Wk$Wk$Wk$ar$ar$ar$ar$>b$>b$Ms$Ms$Ms$Ms$a8$a8$b9$b9$b9$b9$b9$b9$b9$b9$b9$b9$b8$b8$c9$c9$c9$Wx$[{#yA#yA#{^#7V@BO@BO@BO@gX+gX+5$@5$@5$@5$@>K@5$@jX+fX+5$@5$@4G+5&@2 @5G+R)@R)@R)@w;@,T@,T@fm$fm$F@@F@@F@@F@@DD+DD+ZK+ZK+R,@P)@w)+Qt+!-+mB#&>+!-++S)@yR#6 @GM@A)+c=@20#I_@y)+->+9V@5 @> +J,@SK+h~+W&+,i#q$@Qn+Qn+'k+'k+si+[]+{/+{/+_k+_k+(+@ir+$,>$v.$I`#I`#}T#}T#%2+%2+7q$ ;$1t#C_$-l#`-$H#$-f+1f#ef#Pg+D:+Pg+h0#g0#g0#{_+{_+ni+oi+{_+Ng+1$@!k+^_+lr+@k+)w+:|+hX@R)@E@@]^#t}%0N$Qj$[{#yA#{^#{^#gX@gX@2R+4G+)K@DD+9$@pg@Ox#Px#9s*Cy$s9# q+8)$4(@41@[!$.r%.r%4U&vo$`u$m7$@4$W'$U2$>y$,E$LU$wv$Gw$Mp$gS%,o$3H*+O%u,%`W$SV$0=%g6%c-%jm%,/+,/+rh$mE$Si$Si$G=%G=%3u$3u$`u$`u$Et$Et$KG&KG&V>$A6@V>$*'$*'$*'$.9@.9@_u%_u%_u%:u%.9@g}@_u%}s$I*$%[&V=$gp%F5&+9@{e%w,$8a$d6$Ao$>q$Sl$=3@0X#`6@7S$$w$$w$#w$.O$.O$iR$iR$;o$;o$7S$$w$$w$#w$#w$.O$iR$.O$$w$;o$0p$0p$3u$3u$21@Ao$Na$3(@lt$31@lt$3(@`6@-Z#/]+xd%%.%5X#6X#qV#pV#pV#q$4}@5}@31@`0$3(@lt$I2@G,@,P+'P+lm+fp+6X+0y+0y+WA+PK+}R+M*@L*1L*vM*BK**G*=G*wM*rL*9h*xM*`I*K4&SL*4L*yM*<8%zG#F[ P1.aH@tS #0+$x+0J*0J*0J*0J*FU%FU%>H%>H%>n.B#@3&$3&${y%`b&`b&B#@;n.>n.!D+`b&B#@{y%{y%y$$G|@$(+xc+5A.5A.xc+$(+G|@G|@G|@G|@T_+$(+$(+xc+xc+T_+T_+$(+$(+xc+xc+Ea+Ea+T_+T_+T_+T_+T_+T_+T_+T_+Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.jy.q9+dl.Ai.dl.jy.6g+)> l7 l7 }f.}f.bH@aH@aH@Bz$bH@bH@bH@bH@bH@bH@bH@bH@Kh+G|@$(+xc+xc+$(+G|@Kh+T_+T_+$(+$(+xc+Ea+Ea+Ea+xc+xc+xc+xc+xc+xc+xc+xc+xc+xc+Ea+5A.Ea+$(+G|@Kh+Lh+;~ 6j+6j+'g@'g@;~ y$$Lh+Lh+'g@;~ ;~ 6j+y$$xc+Bz$Bz$bH@}f.l7 l7 }f.}f.ko.}f.bH@NM+ko.l7 }f.NM+$(+xc+Ea+$(+7P.oh.G|@xc+$(+Ea+5A.Ea+T_+G|@T_+xc+5A.5A.5A.Ea+xc+xc+$(+$(+T_+T_+T_+G|@G|@Kh+Kh+Kh+}f.l7 }f.Bz$aH@cI+l7 >( l7 cI+ko.13+13+ko.cI+l7 )> U/@U/@A_@ok.ok.H0@H0@yj+oA+U/@A_@A_@U/@", "L) L) 6[ o^ -^ -^ .^ 6[ 6[ 6[ 6[ L) L) [! &- n3 &) |% |% &_ ~_ &_ &) ~_ ~_ &_ &_ &) &) $% $% $% &) &_ ~_ ~_ &_ &) $% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ 4% 5% 5% 5% 5% f% f% f% v% f% f% 5% 4% 4% %% %% ^{ o^ .^ -^ L) [! 6[ .^ L) 6[ -^ .^ p: .^ -^ y% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 &5 ~_ &_ &_ &5 ;b.n3 n3 n3 n3 &5 &5 &5 &5 n3 n3 n3 n3 n3 n3 n3 o3 o3 .* * * * fd fd fd fd fd 5[ 5[ 5[ 5[ ui ui p: p: p: p: p: p: p: p: p: .^ .^ .^ -^ o^ o^ o^ w4.w4.w4.w4.w4.w4.w4.w4.fL.fL.w4.w4.w4.w4.a, a, X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ X_ 7v@7v@ l. l. l.H{ H{ 24 24 24 $w $w $w H{ 24 $w G7 G7 $w 24 H{ ;b.;b.;b.;b.;b.{_ {_ {_ ;b.;b.;b.;b.;b.;b.;b.;b.a, a, 8H.8H.8H.8H.cl+cl+xj+cl+a, fL.fL.fL.w4.Vl.sS un.un.un.ym.ym.ym.ym.|5+cp.4I%xx.T}%l=&Ay.<3+#k.[M@{$+a.+bW eI&AH.cM*zM*8z+yC*ev fg AM*BM*4u*dM*wE%WB%CK@)v*@`&CM*XL*Lm*V`$|e%IC$Z @ a$V,&a+*!_#y[+A($dk@!}@!}@dk@dk@W,@W,@W,@W,@W,@W,@W,@W,@W,@W,@.*+.*+_-+_-+4[%4[%=7$=7$=7$=7$=7$=7$=7$=7$Wk$Wk$Wk$Wk$ar$ar$ar$ar$>b$>b$Ms$Ms$Ms$Ms$a8$a8$b8$b8$b8$b8$b8$b8$b8$b8$b9$b9$b9$b8$b8$b8$c9$00$00${^#{^#{^#7V@7V@7V@7V@gX+gX+5$@5$@5$@5$@>K@5$@5$@gX+5$@4G+4G+4G+YK+YK+R)@R)@R)@w;@,T@,T@,T@fm$F@@F@@F@@F@@DD+DD+ZK+ZK+R,@>B+w)+:w+!-+!-+&>+!-++9V@; +V_@J,@+N+h~+W&+,i#q$@Rn+Qn+jr+jr+[]+]_+{/+1$@_k+_k+(+@ir+$,>$v.$I`#I`#}T#}T#%2+%2+7q$ ;$1t#C_$hf#`-$H#$-f+Rn#1f#@4+1/#6e@h0#g0#]|+{_+{_+b[+*l#b[+(k+V4@~k+^_+vp+@k+vD+;B+x)+!K@E@@&&#Qm#!l$00$[{#yA#{^#{^#gX@gX@2R+4G+YK+x;@8V@ze@tW#ZA##7@#7@ q+.q+38+a{$[!$7)${x${x$wo$4U&Ew$m7$V'$.4$s9$>y$gE*U<$wv$Gw$ R%ro$,o$'o$WM*u,%`W$`j%SP$g6%>5%;5%0d%}5%mE$mE$Si$Si$$I%vV#xo$xo$:n$:n$|s$|s$LG&LG&V>$V>$V>$='$='$*'$.9@.9@_u%t8$t8$f}@g}@g}@f}@ti%I*$%[&}7&V=$+9@C&%{e%w,$8a$d6$zb$Ao$Rl$Sl$io@11@#w$#w$#w$.O$.O$iR$iR$iR$$w$$w$$w$#w$#w$#w$#w$#w$.O$#w$7S$;o$0p$0p$xo$xo$21@>q$Na$`0$31@5}@31@K,+xT#h($=/+/]+5X#rV#qV#pV#pV#qV#q$4}@5}@31@`0$`0$lt$5}@WH@F,@km+!G+~G+cr+A$+WA+WA+ay+@w+M*TG%1L*XM*BK*PH*n*&YM*rL*9h*xM*`I*tL*ZM*4L*yM*G: r,$v8 O1.aH@tS B{$(W%0J*0J*}d.}d.FU%qN%mq+mq+`b&'W+Y@$Y@$'W+B#@{y%'W+'W+'W+'W+{y%{y%{y%B#@B#@*$@$(+xc+xc+xc+xc+$(+$(+G|@G|@G|@T_+$(+$(+$(+xc+T_+T_+T_+$(+xc+xc+xc+Ea+T_+T_+T_+T_+T_+T_+T_+T_+Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.jy.q9+dl.Ai.Ai.q9+jy.]$@}f.}f.}f.bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@G|@T_+$(+$(+$(+$(+T_+G|@7P.Kh+Kh+G|@G|@T_+T_+T_+$(+$(+$(+$(+$(+$(+$(+$(+$(+xc+5A.]! ]! 5A.Ea+xc+;~ y$$*$@y$$;~ 'g@;~ y$$6j+6j+6j+6j+6j+6j+6j+5A.G|@aH@}f.l7 l7 l7 l7 }f.NM+bH@bH@cI+NM+}f.bH@cI+T_+xc+Ea+xc+G|@Kh+T_+Ea+$(+Ea+5A.Ea+T_+G|@T_+xc+Ea+Ea+xc+xc+xc+xc+$(+$(+$(+$(+$(+T_+T_+G|@G|@G|@bH@l7 }f.Bz$bH@ko.cI+Bz$cI+cI+NM+NM+NM+cI+l7 l7 A_@A_@A_@A_@A_@ok.ok.ok.)D+U/@A_@ok.ok.A_@", "6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ L) L) [! [! &- n3 =_ ;_ ;_ -_ 0c =_ -_ =_ =_ =_ =_ -_ -_ -_ -_ ;_ -_ =_ 0c 0c =_ -_ ;_ =_ =_ =_ =_ =_ =_ =_ =_ af.af.af.g% g% g% g% g% g% *_ *_ *_ *_ *_ *_ 5% ^{ o^ -^ -^ 6[ L) 6[ -^ [! L) 6[ o^ -^ -^ o^ y% ~_ 0c 0c 0c 0c 0c 0c 0c A^.X_ 7v@A^.=_ -_ 0c 7v@n3 n3 n3 n3 ~_ ~_ ~_ ~_ n3 n3 n3 n3 n3 n3 n3 o3 o3 .* * * * fd fd fd 5[ 5[ fd fd fd fd * * .^ .^ .^ .^ .^ .^ .^ .^ p: .^ .^ .^ -^ -^ -^ -^ w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.fL.fL.fL.fL.I> I> 7v@7v@7v@7v@7v@7v@7v@7v@7v@7v@7v@ l. l.)i+)i+)i+24 24 $w $w G7 G7 G7 G7 24 24 $w G7 G7 $w 24 24 {_ {_ {_ ;b.;b.;b.;b.;b.{_ {_ {_ {_ {_ {_ {_ {_ cl+cl+8H.8H.8H.8H.a, a, cl+8H.a, w4.w4.w4.w4.Vl.sS un.un.un.ym.ym.ym.ym.ET&[3+l=&ts.ts.xx.6R@0q.<3+PK.{$+`M*, .Ur&AH.R|*TJ*8z+Ks*&s fg AM* N*Yt*_E*r^%^:$.N*;/@+N*/<*yL*rR$hn$Db#T6#cD#L=%a+*a+*d!@A($$>#!}@S)@S)@S)@!}@W,@W,@W,@W,@W,@W,@W,@W,@W,@W,@.*+.*+_-+_-+4[%4[%=7$=7$=7$=7$=7$=7$=7$=7$*c$*c$*c$*c$]m$]m$]m$]m$>b$>b$Ms$Ms$Ms$Ms$a8$a8$c9$c9$c9$c9$c9$c9$c9$c9$bq$bq$bq$b9$b9$b8$b8$[{#Wx$gX@gX@gX@nZ@nZ@nZ@nZ@gX+gX+5$@5$@5$@5$@>K@5$@4G+2R+4G+4G+4G+5$@>K@>K@R)@R)@w;@w;@DD+,T@,T@,T@F@@F@@F@@F@@DD+DD+ZK+ZK+P)@>B+w)+:w+}P+!-+&>+!-++!}@$>#ui+;9@JL#t!$^-+I_@! +y)+->+9V@.@#V_@J,@+N+Hl+W&+,i#q$@Rn+Rn+jr+jr+]_+:k+1$@V4@_k+_k+(+@ir+N*,N*'N*)N*!N*~N*{N*,D*]N*Kx*NB*^N*UM*#B*fs%Q0#/N*;M*G[%oA%VM*x6%(N*a,$x0#x0#'>$,>$v.$I`#I`#}T#}T#%2+%2+7q$ ;$1t#C_$hf#-f+H#$`-$df#df#/6+hT$@4+Pg+]|+]|+Kb+Kb+mi+ni+*l#^i#hc#~k+^_+vp+=w+wD+0G+y$3d%Sr$Hw$Hw$Fw$CT%bp$'o$WM*u,%&e%&e%f6%f6%}3%;5%sU$c;%u/%mE$OG%6l$tV#tV#Sp$Sp$Ft$:n$|s$}b$=r$=r$|s$|s$|s$='$='$='$.9@.9@_u%t8$S2$f}@g}@kk+/L+W<@'y$I*$&G$&G$Z0@Z0@w,$l7$8a$5c$Iu$Iu$uV#uV#Sl$0X#.O$.O$.O$iR$iR$bC$bC$bC$iR$.O$.O$.O$.O$#w$#w$#w$$w$$w$7S$;o$;o$;o$Sp$Sp$4}@>q$3(@lt$5}@>:@5}@2(@$}#m%$(/$x:+z:+z:+*Z#*Z#A:+A:+z:+ 5$ 5$Ab+Bb+Pi$7m@#w$#w$#w$#w$#w$cs$cs$>q$4}@5}@5}@lt$`0$31@>:@v~@5X+:o+~G+gp+Ft+(T+(T++w+ay+@w+B+ZK+Q)@s;@S,@u;@Vt%AM@pZ@pZ@pZ@&&#&&#]^#]^#pZ@5Z+BM@DI+BM@DI+nz#mo@EA#3_#be*.[@W~+<'+<'+<'+wc*H:&3:@wD$wD$$d&$d&oZ%ws@TG%AK*_N*EJ*0M*DF*3L*aM*9h*xM*5J*:N*$ v% v% f% 7v@7v@7v@7v@7v@7v@7v@7v@ l. l. l.)i+)i+#y##y##y#$w $w $w G7 G7 N/.N/.N/.24 $w $w $w $w $w $w 24 W_ W_ {_ {_ ;b.|x.|x.O9.W_ W_ W_ W_ W_ W_ W_ W_ xj+xj+cl+8H.8H.a, w4.w4.a, a, a, w4.w4.w4.a, Vl.sS un.un.un.ym.ym.ym.ym.|5+cp.4I%xx.T}%l=&Ay.<3+#k.c+#~$+T@., .eI&mX.o4*b $8z+St eF+pP$_T N*>*%d/%#B ^:$Lb.wh#27*~G*(t*se$gk*Db#KZ@>D%o1@a+*6T@A($$>#dk@!}@S)@S)@W,@W,@W,@W,@W,@W,@W,@W,@W,@W,@W,@W,@.*+.*+_-+_-+4[%4[%=7$=7$=7$=7$=7$=7$=7$=7$jm$jm$jm$jm$ln$ln$ln$ln$>b$>b$Ms$Ms$Ms$Ms$a8$a8$_8$_8$_8$_8$_8$_8$_8$_8$ow$bq$bq$bq$b9$b9$b8$[{#*6$oZ@oZ@gX@nZ@M+#M+#M+#2R+2R+4G+4G+4G+4G+YK+4G+R,+CI+5&@4G+5$@5$@)K@)K@w;@w;@w;@w;@DD+DD+,T@,T@W.@W.@W.@W.@x;@x;@lX+lX+>B+>B+,B++L4#;(@J,@J,@+N+Hl+-.$ h+q$@Pn+Rn+lp+lp+]_+:k+1$@V4@_k+_k+(+@ir+$,>$v.$I`#I`#}T#}T#%2+%2+7q$ ;$1t#C_$hf#-f+fd+fd+ed+ed+D:+hT$E:+6e@]|+]|+{_+Kb+{_+b[+oi+$l#|&@&m+^_+vp+xp+rr+*>+x)+w;@5$@zM@vp#d9$Wx$[{#yA#{^#{^#gX@gX@2R+4G+;K@CD+'_#9k@`M@Mx#@s+@s+`p+`p+a{$#1@6)$W>$Ft$:n$,o$,o$m7$n7$>5$>5$q0$q0$Sr$~t$Hw$Hw$;0%Fw$'o$'o$WM*u,%`>%`>%>5%>5%}3%;5%PR$QV$B-%u/%OG%6l$Ld$Ld$cs$Gt$Ft$:n$|s$}b$y+&|b$|s$|s$|s$}b$='$='$.9@.9@_u%t8$S2$X0@b1@fm+kk+/L+'y$'y$W=$W=$B]&B]&l7$l7$e6$5c$4c$4c$>&%>t$Rl$io@iR$bC$bC$bC$bC$bC$bC$bC$bC$bC$bC$iR$.O$.O$#w$#w$7S$7S$;o$;o$;o$7S$Gt$Gt$4}@>q$`0$lt$>:@MU#MU#v^@$}#RR#g($g($6|$6|$f<$f<$A:+A:+>_+ 5$ 5$Ab+=f+*/+Ld$$w$$w$$w$$w$$w$Gt$Gt$>q$4}@5}@5}@lt$lt$5}@MU#%7@%7@]V+oI+dr+~P+B+x;@DD+CO@CO@AM@)K@w;@Q)@Q)@Q)@R,@P)@t<@a=@=9@a&@H6@G6@Vv#Vv#4L#gY#a&@0=@a=@Q,@Q,@Q,@R,@P)@P)@ZK+Q)@Q)@|V+|V+S,@,K@5Z+zM@zM@zM@pZ@pZ@&&#&&#&&#zM@BM@BM@BM@BM@nz#^R#/v@3_#be*.[@['+<'+<'+b{$H:&H:&jE$jE$jE$jE$L+*R}*dN*eN*AK*_N*0G*fN*/I* v% v% f% l. l. l. l. l. l. l. l. l. l. l.)i+)i+#y##y##y#$w $w $w G7 G7 N/.N/.N/.$w $w $w 24 24 $w $w $w W_ W_ {_ {_ ;b.|x.|x.O9.W_ W_ W_ W_ W_ W_ W_ W_ xj+xj+cl+8H.8H.a, w4.w4.w4.w4.a, a, a, a, a, Vl.sS un.un.un.ym.ym.ym.ym.PI.PI.QI.QI.QI.$;&M}.8'%8'%~$+1.&T@.bW pN*[D+23*k=&8z+}w*3t .{ AM* N*>*%U<%q>&%^%qN*&P@rN*^r*UB%DE*<9*p1@^8%ZO@!5@o1@o1@$>#$>#$>#dk@!}@S)@W,@.*+W,@W,@W,@W,@W,@W,@W,@W,@W,@W,@.*+.*+_-+_-+4[%4[%=7$=7$=7$=7$=7$=7$=7$=7$*c$*c$*c$*c$]m$]m$]m$]m$>b$>b$Ms$Ms$Ms$Ms$a8$a8$_8$5($5($5($5($5($5($5($0N$0N$0N$~l$~l$!l$!l$!k#*6$oZ@oZ@gX@nZ@M+#M+#M+#2R+2R+4G+4G+4G+4G+YK+4G+R,+CI+5&@4G+5$@5$@)K@)K@!K@!K@w;@w;@DD+DD+DD+DD+W.@W.@W.@W.@x;@x;@lX+lX+0G+0G+,B+,B+xD+S.@wD+}P+%FC$9Z+I4@YJ#3W.!}@hm@ui+;9@JL#t!$y_$I_@! +->+yM@L4#ib#+N++N+J,@W&+dz@ h+q$@Rn+Rn+jr+jr+]_+:k+1$@V4@_k+_k+(+@ir+$,>$v.$I`#I`#}T#}T#%2+%2+7q$ ;$1t#C_$hf#;f+`-$fd+B)$B)$D:+1/#/6+6e@g0#bc#mi+{_+mi+b[+pi+#l%r.${k+}]+vp+=w+wD+/w+hX@X.@4G+zM@!k#~l$Qj$[{#yA#{^#{^#gX@gX@2R+4G+5G+H@@UQ@ze@]`#Mx#@s+.s+Zp+Zp+a{$#1@7)$W>$:n$`u$,o$bp$n7$'t$#x%#x%s9$U2$el$el$~t$[}$gg$Dq$cp$'o$u,%WM*nq%=O$]{%]{%OR$}3%PR$b:%B-%u/%OG%-k$Ld$7m@cs$Gt$Ft$:n$|s$}b$y+&|b$`u$`u$|s$}b$='$='$g>$.9@aC$f}@S2$X0@b1@kk+Oi+/L+I*$I*$sk$sk$Km$Km$w,$w,$5c$d6$4c$zo$ h%>&%Rl$io@bC$bC$bC$bC$bC$bC$bC$iR$bC$bC$bC$iR$.O$.O$#w$#w$7S$7S$;o$;o$;o$7S$Gt$Gt$21@>q$3(@lt$>:@OS#MU#u^@$}#RR#I#$I#$uT#uT#f<$f<$=X$=X$>_+ 5$ 5$Ab+w:+^]+Ld$$w$$w$$w$$w$$w$Gt$Gt$>q$4}@>:@5}@31@31@>:@OS#%7@ZM@]V+oI+dr+K@w;@Q,+ZK+ZK+P)@P)@t<@qt$=9@a&@*9@H6@gY#gY#4L#gY#0&@O)@t<@Q,@Q,@R,@R,@P)@t;@t;@s;@|V+2T+2T+:P+YK+BM@bN$%/$%/$/H$/H$/H$)I$gm$)I$bN$bN$bN$bN$T!$^R#/v@3_#IN*s$+['+<'+b{$b{$H:&jE$jE$jE$JN*JN*JN*'H%FM$TG%AK*_N*0G*fN*KN*LN*MN*hN*iN*gW&NN*ON*PN*cT%)x+f/%i; yK#NM+a:@&c%|r%0J*}d.}d.oN*YH*7l%Be+Xw&`E&3]&3]&TO&<:*<:*`E&#u%#u%O4%O4%3]&3]&`E&`E&B#@;~ xc+$(+G|@G|@$(+xc+5A.$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.dl.dl.dl.dl.Ai.1m.8Y+8Y+Bz$aH@aH@bH@}f.}f.l7 l7 bH@bH@bH@bH@bH@bH@bH@bH@xc+$(+G|@Kh+Kh+G|@$(+xc+xc+xc+xc+xc+xc+$(+$(+$(+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@Kh+7P.7P.oh.oh.oh.Bj.>n.;n.!D+'W+3&$3&$'W+{y%{y%{y%B#@B#@`b&`b&/{ xc+cI+cI+NM+NM+cI+l7 }f.bH@aH@}f.cI+}f.>( Bz$NM+xc+xc+xc+Ea+5A.5A.Ea+xc+T_+$(+xc+$(+G|@Kh+G|@T_+Ea+Ea+5A.5A.]! {! {! be+5A.5A.5A.Ea+Ea+xc+xc+xc+aH@l7 }f.aH@cI+=L @$+cI+ko.NM+}f.bH@aH@bH@}f.xc+H0@fd%_c$_c$PC#Ae+Ae+KE#PC#PC#PC#Ae+Ae+PC#", "6[ 6[ L) [! [! S& S& L) L) [! [! S& S& S& ^* &) =_ 0c -_ ;_ ;_ =_ A^.-_ -_ -_ -_ =_ =_ =_ =_ 0c =_ -_ ;_ ;_ -_ =_ 0c =_ =_ =_ =_ =_ =_ =_ =_ af.af.af.g% g% g% g% g% af.af.af.af.g% g% g% f% u% 6[ L) 6[ -^ -^ o^ L) .^ .^ -^ -^ .^ p: og Es ~_ 0c 0c 0c 0c 0c 0c 0c =_ X_ l.7v@A^.=_ 0c A^.n3 n3 n3 n3 ~_ ~_ ~_ ~_ n3 n3 n3 n3 n3 n3 n3 o3 o3 .* * * * fd fd fd 5[ 5[ fd fd fd fd * * .^ .^ .^ .^ .^ .^ .^ .^ .^ .^ .^ p: p: p: og og w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.fL.fL.fL.fL.I> I> l. l. l. l. l. l. l. l.7v@7v@7v@ l. l.)i+)i+)i+24 24 $w $w G7 G7 G7 G7 G7 $w 24 24 24 24 $w G7 {_ {_ {_ ;b.;b.;b.;b.;b.{_ {_ {_ {_ {_ {_ {_ {_ cl+cl+8H.8H.8H.8H.a, a, fL.w4.a, 8H.8H.8H.a, Vl.sS un.un.un.ym.ym.ym.ym.8v.PI.91+s[.91+$;&9K.[{.Tw@sN%sN%a.+1K*e1*P|*o4*^4%&J.z4&|A+DQ+3O$BM* e*;2%T<%[a%Eg%Ee# H%QN*1K.wC.RN*EB@p6@g|+tt*CB@CB@$>#A($A($$>#$>#!}@W,@W,@W,@W,@W,@W,@W,@W,@W,@W,@W,@W,@.*+.*+_-+_-+4[%4[%=7$=7$=7$=7$=7$=7$=7$=7$Wk$Wk$Wk$Wk$ar$ar$ar$ar$>b$>b$Ms$Ms$Ms$Ms$a8$a8$d9$d9$d9$d9$d9$d9$d9$d9$~l$~l$!l$!l$d9$d9$d9$hX+Wx$gX@gX@gX@nZ@nZ@nZ@nZ@2R+2R+4G+4G+4G+4G+YK+4G+4G+2R+4G+4G+4G+5$@>K@>K@!K@!K@!K@w;@DD+DD+x;@x;@7G+7G+7G+7G+cB@cB@9G+9G+0G+0G+,B+K)@$B+xD+vD+A@@%FC$|f+I4@:-+.*+XX.s8+#>#|_+dZ.IK$y_$! +sd+->+yM@L4#@N+SK++N+V_@-.$dz@ h+q$@Qn+qe#'k+'k+si+[]+{/+{/+_k+_k+(+@ir+$,>$v.$I`#I`#}T#}T#%2+%2+7q$ ;$1t#C_$-l#;f+-f+fd+B)$B)$/6+/6+E:+Pg+=l#=l#ni+mi+b[+b[+oi+$l#|&@{k+Tt+lr+@k+vD+/w+'T@^^#R,+5Z+!k#0N$o&%[{#yA#{^#{^#gX@gX@2R+4G+YK+x;@8&@:^#Ox#~P#+s+@s+Zp+Zp+4(@a{$[!$6)$:n$`u$Or$bp$'t$'t$8a$#x%U2$S)$dp$@7%~t$[}$MU$MU$u8$'o$u,%WM*pQ$pQ$Q3%Q3%OR$}3%PR$QV$B-%u/%OG%-k$Ld$Ld$Sp$Sp$Ft$:n$|s$}b$=r$=r$`u$`u$|s$}b$}b$='$g>$.9@A6@g}@X0@W<@/L+kk+lk+l(@%[&%[&W=$sk$Km$B]&{e%{e%}b$|s$Iu$4c$ h%>&%Sl$0X#bC$bC$bC$iR$iR$.O$.O$.O$iR$.O$.O$.O$.O$#w$#w$#w$$w$$w$7S$;o$;o$;o$Sp$Sp$>q$Ao$Na$`0$5}@MU#MU#u^@xT#RR#I#$I#$Z%$uT#f<$*Z#,_+,_+>_+ 5$ 5$-_+w:+^]+AM$7S$7S$7S$7S$7S$Sp$Sp$>q$4}@>:@>:@5}@5}@MU#|T@%7@%7@]V+oI+ZM+nI+K@w;@B+P)@Q,@5o@0&@a&@)~#*9@-_#-_#4L#gY#0&@O)@t<@Q,@R,@R,@R,@P)@Q1#R1#S,@|V+2T+Q,+=>+5G+DI+/'$bN$bN$%/$%/$%/$/H$~J$/H$bN$/'$bN$/'$T!$|P+/v@3_#IN*s$+['+<'+b{$b{$wD$wD$jE$jE$L+*JN*JN*'H%nK$@L*1L*XM*EJ*fN*KN*LN*$O*hN*iN*%O*&O*C3.*O*=O*)x+-O*xF [N*=L a:@Pw%(W%@:+@:+0J*OJ*R4%YH*Be+Xw&TO&`E&`E&TO&<:*<:*TO&3]&TO&TO&TO&`E&`E&`E&`E&{y%y$$xc+$(+$(+$(+$(+xc+xc+$(+$(+$(+T_+T_+T_+G|@G|@$(+T_+T_+T_+G|@G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.dl.q9+q9+q9+dl.Ai.1m.bH@bH@bH@bH@bH@}f.}f.}f.bH@bH@bH@bH@bH@bH@bH@bH@$(+$(+T_+G|@G|@T_+$(+$(+T_+T_+G|@G|@G|@Kh+Kh+Kh+T_+T_+T_+T_+T_+T_+T_+T_+5A.Ea+$(+T_+G|@G|@G|@G|@B#@!D+>n.`b&'W+3&$'W+{y%3&$'W+'W+{y%B#@`b&!D+Bj.xc+l7 cI+cI+cI+l7 }f.bH@bH@bH@l7 ko.}f.>( aH@ko.{! Ea+$(+T_+xc+xc+xc+T_+G|@$(+xc+$(+Kh+7P.Kh+T_+5A.5A.5A.]! ]! ]! ]! ]! 5A.5A.Ea+Ea+xc+xc+xc+xc+bH@l7 }f.aH@l7 @$+13+}f.cI+l7 l7 }f.}f.l7 cI+Ea+ok._c$_c$PC#PC#PC#PC#PC#_c$PC#Ae+Ae+Ae+Ae+", "L) L) L) [! [! [! [! [! [! [! S& S& S& C& ^* &) =_ 0c =_ 2b 2b -_ A^.;_ ;_ -_ -_ =_ =_ 0c 0c 0c =_ -_ ;_ ;_ -_ =_ 0c 0c 0c 0c 0c 0c 0c 0c 0c R_ *_ *_ *_ *_ g% g% g% 4=+QB@QB@af.g% g% *_ 5% =] 6[ [! L) -^ .^ o^ L) .^ -^ o^ 6[ o^ -^ p: si ~_ 0c 0c 0c 0c 0c 0c 0c ;_ 0c 7v@7v@X_ 0c A^.X_ n3 n3 n3 n3 &5 &5 &5 &5 n3 n3 n3 n3 n3 n3 n3 o3 o3 .* * * * fd fd fd fd fd 5[ 5[ 5[ 5[ ui ui p: p: p: p: p: p: p: p: .^ .^ .^ p: og og og C' w4.w4.w4.w4.w4.w4.w4.w4.fL.fL.w4.w4.w4.w4.a, a, )i+)i+)i+)i+)i+)i+)i+)i+X_ X_ X_ 7v@7v@ l. l. l.H{ H{ 24 24 24 $w $w $w G7 $w 24 H{ H{ 24 $w G7 ;b.;b.;b.;b.;b.{_ {_ {_ ;b.;b.;b.;b.;b.;b.;b.;b.a, a, 8H.8H.8H.8H.cl+cl+I> fL.a, 8H.cl+8H.a, Vl.sS un.un.un.ym.ym.ym.ym.PI.PI.QI.QI.QI.$;&M}.8'%[{.{$+c+#10*yH.pN*9J.;O*^4%N= %~.:A+uO+E2.Ne.%(+Oh+/p RI A).>O*U[.[V TB%,O*'O*)O*tz*B`#>z*)I%)I%w=$A($d!@d!@A($dk@S)@W,@W,@W,@W,@W,@W,@W,@W,@W,@W,@W,@.*+.*+_-+_-+4[%4[%=7$=7$=7$=7$=7$=7$=7$=7$1r$1r$1r$1r$,Z#,Z#,Z#,Z#>b$>b$Ms$Ms$Ms$Ms$a8$a8$!l$!l$!l$!l$!l$!l$!l$!l$d9$d9$d9$5($5($d8$d8$_P+00${^#{^#{^#7V@7V@7V@7V@CI+CI+5&@5&@5&@5&@2 @5&@5$@gX+5$@4G+4G+4G+YK+YK+]K@!K@!K@!K@DD+x;@x;@x;@7G+7G+7G+7G+cB@cB@9G+9G+*>+0G+K)@K)@~w+$B+vD+A@@+yM@L4#{-+SK++N+V_@dz@'}@ h+q$@O2@O2@=:@HZ@:6+si+-2+_k+_k+_k+(+@ir+$,>$v.$I`#I`#}T#}T#%2+%2+7q$ ;$1t#C_$-l#;f+-f+`-$B)$ed+@4+Pg+@4+h0#cf#;E#oi+ni+ni+ni+*l#^i#|&@{k+Tt+|]+up+!w+;B+hX@X.@R,+BM@hX+!l$Qj$[{#yA#{^#{^#gX@gX@2R+4G+)K@fm$t!%kb#P3#Nx# 5@+s+Zp+Zp+38+4(@41@7)$:n$`u$-r$,o$'t$'t$8a$#x%V2$K1$x|$@7%~t$[}$_a%_a%t9$'o$u,%WM*pQ$+o%O^%Q3%OR$}3%m>%c;%B-%mE$OG%6l$AM$AM$xo$xo$:n$:n$|s$|s$LG&LG&`u$`u$`u$}b$}b$}b$g>$.9@p0$R2$/L+_:@/L+lk+l(@gq@M9&`0@&G$W=$B]&Z0@g>$='$Et$E5&zb$4c$>&%>t$=3@11@iR$iR$iR$.O$.O$#w$#w$#w$$w$$w$$w$#w$#w$#w$#w$#w$.O$#w$7S$;o$0p$0p$xo$xo$zb$Iu$7j$3(@31@MU#>:@v^@h($m%$I#$I#$Z%$6|$*Z#=X$,_+,_+S`$ 5$;_+-_+w:+-Z#AM$7S$7S$7S$7S$7S$Sp$Sp$Ao$4}@>:@>:@5}@5}@MU#XH@29@29@[R+Ht+oI+dr+T@9G+>B+Q,@5o@0&@a&@)~#)~#u!$-_#gY#H6@0&@O)@t<@Q,@R,@R,@Q)@ZK+t;@t;@S,@|V+T,@:P+:P+YK+BM@bN$bN$%/$%/$/H$/H$/H$)I$%/$/'$Tv#Tv#Tv#8k#EA#/v@3_#IN*s$+['+<'+b{$b{$$d&$d&wD$wD$L+*L+*JN*'H%=q%zK*qL*vM*{c*0M*/I*( aH@@$+gA ]! G|@7P.Kh+T_+T_+G|@G|@$(+xc+T_+Kh+7P.Kh+G|@Ea+Ea+Ea+Ea+xc+xc+xc+xc+Ea+Ea+Ea+xc+xc+$(+$(+$(+bH@l7 }f.Bz$bH@ko.cI+Bz$bH@}f.l7 NM+ko.ko.ko.]! A_@PC#PC#PC#PC#_c$_c$_c$xe#fd%PC#Ae+Ae+PC#", "[! [! [! [! [! [! [! [! [! [! S& S& C& C& ^* $% =_ A^.=_ 2b he -_ X_ ;_ ;_ -_ -_ =_ =_ 0c 0c 0c =_ -_ ;_ ;_ -_ =_ 0c A^.A^.A^.A^.A^.A^.A^.A^.-H.-H.-H.R_ *_ *_ g% g% 6v@6v@4=+QB@g% *_ R_ 4% =] 6[ [! L) -^ .^ o^ L) o^ o^ L) L) L) o^ .^ -h ~_ 0c 0c 0c 0c 0c 0c 0c 2b =_ X_ 7v@X_ A^.A^.X_ ~_ n3 n3 &5 W_ W_ {_ {_ n3 n3 n3 n3 n3 n3 n3 n3 o3 .* * * * fd fd fd fd fd 5[ 5[ ui ti ti pj og og og og og og og og .^ .^ p: p: og og C' C' w4.w4.w4.w4.w4.w4.w4.w4.fL.fL.w4.w4.a, 8H.8H.cl+;b.;b.;b.;b.;b.;b.;b.;b.n3 n3 n3 &5 &5 W_ W_ W_ &5 &5 W_ W_ {_ {_ 24 $w N/.$w 24 H{ H{ 24 $w N/.O9.|x.|x.;b.{_ {_ W_ W_ |x.|x.|x.|x.|x.|x.|x.|x.w4.w4.a, 8H.8H.cl+xj+xj+v% fL.a, 8H.cl+8H.a, a, sS sS sS sS Vl.Vl.Vl.ym.[3+#9.$;&l=&l=&l=&)1.wx.F6.[M@I1.I1.yH.(k*TV.8O*k=&tK.$^ oM#*9 {X+F: PC.9O*M/%3K os.>O*xE%[V 0O*zK%aO*bO*cO*/@$tt*tt*YD*w=$d!@y[+y[+d!@$>#!}@S)@W,@W,@W,@W,@W,@W,@W,@W,@W,@W,@.*+.*+_-+_-+4[%4[%=7$=7$=7$=7$=7$=7$=7$L[#Ei$Ei$Ei$Ei$~}%~}%~}%~}%>b$>b$Ms$Ms$Ms$Ms$a8$;u$~l$~l$~l$~l$~l$~l$~l$~l$5($5($5($d8$d8$d8$pw$pw$!k#yA#yA#{^#7V@BO@BO@2R+CI+CI+5&@5&@5&@2 @2 @2 @jX+fX+5$@5$@4G+5&@2 @5G+)K@)K@!K@!K@w;@R)@R)@R)@7G+7G+7G+7G+cB@cB@9G+9G+*>+0G+K)@T##~w+$B+vD+A@@$N+$N+P,+,B+K)@K)@|=@|=@}=@tr+Jl+QK+fD+|R+:&@<&@s<@G6@gY#-_#-_#gY#G6@s<@gY#gY#gY#gY#gY#gY#gY#gY#Kl+Kl+Kl+Kl+Kl+FD+:&@L)@QK+Rt+}=@|=@6o@|=@}=@K@@Z.@9&@be#u!%kb#X6$S6#6~#v9#P3#=b$=b$Y|#S6#6~#=b$ZA#tW#ze@-4+re#e;%Tj$i%%Qy$rV$-a$@B$js$js$)M$)=%@ +4[%_-+m~+>>+B)+8]+*,$u4#y_$y)+sd+sd+yM@yM@T0+zI+yI++N+$t@dz@3a@ h+(_+U&+VF#h @ o+Yg+Lb+$4+-2+mi+mi+F:+6e@6+)6+>>$ (%j:%=5#Qc#+f%$A*cD*@r#dO*Kx*eO*eo#fO*gO*hO*iO*jO*kO*lO*mO*nO*[O*oO*pO*qO*TM*rO*sO*tO*BL*uO*[e%[e%F[%C}%4|%RP#E[%2[%&1%a,$x0#x0#dt#,>$I`#I`#I`#}T#!6+%2+Es$7q$ ;$1t#C_$ ;$;f+ ;$-f+`-$Nn#df#Qg+6e@Qg+;E#@l%pi+*l#*l#*l#ni+V4@TY#{k+I6@sp+;w+dB@mX+9G+8G+5G+5&@WK+hX+hX+M+#M+#nZ@nZ@7V@7V@2R+4G+[H# @%r$%'8%v9#=b$~P#-3@#s+ok+,P+38+N<@7)$E5&`u$wo$hS%iS%i>$x,$z|$fC%M&%K*$;@%el$[}$0b%vO*O+%3H*u,%nq%rn%Hn$Hn$dm$;5% R$c;%c;%u/%mE$OG%6l$tV#AM$0p$3u$4U&`u$:n$:n$YS&YS&`u$`u$`u$Ew$Ew$}b$d6$g>$AT#z;$X<@f}@_:@/L+_:@W<@H*$M9&&G$W=$B]&Z0@='$V>$E5&2r$Ao$Iu$>&%>t$=3@`6@iR$iR$.O$.O$#w$$w$$w$7S$;o$;o$7S$$w$$w$#w$#w$.O$iR$.O$$w$;o$0p$0p$3u$3u$Iu$4c$4c$Na$4}@>:@M<@;:@-Z#pF$g($I#$/6$6|$z:+>_+S`$S`$S`$ 5$-_+-_+=_+-Z#AM$AM$AM$AM$AM$AM$Sl$Sl$)x$|1@u^@u^@v^@u^@X4@/a@v~@5X+[R+er+Ht+#w+dr+~P+#w+nI+Gt+sI+ZM+rI+^P+{P+4v#yb#L,@M)@M)@L,@yb#pe#pe#pe#pe#4L#4N#5N#4L#Kx#fh#;w+<&@L)@{k@|=@0=@O)@R,@R,@,T@DD+w;@w;@F@@YK+T@>T@9G+lX+R,@ W$4 @0&@0=@=9@a&@P,@H6@L@@4 @O)@t<@R,@R,@Q)@Q)@ZK+Q)@2T+2T+T,@kX+kX+kX+jX+XK+%/$/H$/H$)I$)I$)I$~J$)I$bN$Tv#T!$Tv#T!$8k#Ka%+L+3_#IN*s$+['+<'+b{$b{$+[@q}@$d&wD$A[+L+*L+*'H%|q%wO*xO*yO*BK*W~&PH*zO*2O*3O*iN*4O*AO*BO*CO*=O*DO*t< 5H.O1.ui sS gJ%gm#aR#zI*7&+0J*FU%lx@@d+Be+#d+3]&Fc%]1%#u%3]&`E&3]&O4%O4%3]&3]&`E&`E&TO&B#@/{ $(+xc+5A.5A.xc+$(+G|@xc+xc+$(+$(+T_+G|@G|@G|@$(+T_+T_+G|@G|@Kh+Kh+7P.T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@Ai.G|@Ai.G|@Ai.G|@1m.G|@q9+Ea+6g+Ea+jy.xc+l7 l7 }f.}f.bH@aH@aH@Bz$bH@bH@bH@bH@bH@bH@bH@bH@Kh+G|@$(+xc+xc+$(+G|@Kh+Ea+Ea+Ea+xc+$(+$(+T_+T_+xc+xc+xc+xc+xc+xc+xc+xc+G|@Kh+7P.7P.Kh+G|@$(+Ea+;~ y$$|m.*$@y$$6j+*$@|m.|m.|m.|m.*$@y$$6j+6j+;~ $(+}f.l7 l7 }f.bH@Bz$Bz$}f.l7 ko.@$+l7 9g.bH@=L YY {! Kh+y4&oh.Kh+G|@Kh+G|@T_+$(+T_+Kh+7P.Kh+G|@xc+xc+$(+$(+T_+G|@G|@Kh+Ea+xc+xc+xc+$(+$(+T_+T_+$(+l7 $(+Bz$G|@cI+xc+>( Kh+bH@Ea+ko.be+@$+{! ]! )D+U/@U/@A_@ok.ok.H0@H0@>~ C! H0@ok.ok.H0@", "[! [! [! [! [! [! [! 6[ 6[ 6[ 6[ 6[ 6[ 6[ Q_ &_ &_ &_ &_ &_ &_ &_ &_ &5 &5 n3 &_ &) |% 0' 0' g% g% g% g% g% g% g% g% QB@QB@QB@af.af.g% g% g% v% 5% ~% %% 5% I> I> I> fL.fL.I> v% v% f% 5% 5% T$ {@ m@ m@ U@ U@ U@ 2% .* .* .* .* .* .* .* o3 ~_ 0c 0c 0c 0c 0c 0c 0c 2b ;_ -_ =_ 0c X_ 7v@7v@A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.n3 ac fd .* 2% 2% .* fd 5[ YY fd m@ .* pj `Y ui U@ og og og og og og og og og og og og og og og og v% I> a, 8H.cl+cl+a, w4.fL.fL.w4.w4.fL.I> f% f% y% =] si Es )O Es si -h u% u% u% =] -h -h si si w4.6v@6v@6v@6v@6v@ l. l.7v@)i+;p.;p.X5 4z ]b+;p.;b.;b.;b.;b.;b.;b.;b.;b.;b.;b.;b.;b.;b.;b.;b.;b.;b.;b.|x.O9.|x.{_ &5 n3 &5 O9.6}%{_ &5 ;b.|x.{_ uM Es -h =] v% I> fL.':+s3.s3.QI.$;&4I%l=&M}.M!.Zq@Gf.{N@c+#EO*FO*'$@GO*^4%!D zn*I'$1~ -~.MH.p^%Cg%xh%[a%qN*N'#rN*[l%HO*>i*4c*<9*[9*[9*Q0*DB@33@./%A($A($A($A($$>#$>#$>#$>#$>#dk@!}@W,@.*+_-+_-+f~@f~@XX.U`$>>+m~+m~+K[#K[#K[#K[#M[#M[#L[#L[#L[#Wk$Wk$!U#!U#,Z#,Z#,Z#,Z#=c$=c$nw$Ms$Ms$Rj$%K$im$!I$B+>B+,B+,B+xD+xD+)w+S.@$N+f^@f^@;B+;B+;B+my+my+ny+J@@L@+J@@P,@a&@L@@b~@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@,'$H6@-(@d^@-(@O,@O,@X{@L@@Z.@0=@t<@t<@O)@ny+my+e^@K@@P,@P,@)~#*9@gY#gY#G6@s<@!B+z$+b&@O,@b~@y;@tW#`M@+5$20$jq#c9$=c$RA$Bx$UH#H{%kS$&q&&q&IO*$w%A0%(-+yR#/ %4d$6d$1h$K1#u4#ii@5]+FM@(8${-+@N+'T@rd+:f+:f+__+3a@ak@}6+N@+O,+`g+Zg+od+9X+#/+Sl+#4+a[+!i#0[+.4+&2+z0+Wy#s=$4|%%5#:o#Ii#yz*{C*{I#JO*Kx*5G*KO*LO*MO*NO*OO*PO*QO*RO*SO*SO*TO*UO*LO*VO*~x*V`#tC*5A*Wf%Wt%/N* L*7<$/O#z0#DB#OP#~>$Sy#>X#E~$v0#v0#z!$E_$E_$E_$F_$~6+;6+Es$7q$In$-l#-X#C_$#w#1t#x!$1t#SR#X1#Wl+Tn#cc#oB#3&@2$@Cy#r.$hc#1$@_k+s=@Nb+}]+ur+up+>w+dB@K)@#a@ZK+Q,+:P+5$@5$@5$@)K@,K@J #E@@2R+CI+2R+gX+K #jX+R)@cB@8&@qg@Ae@y;@G)@ >+kR+T;@I2@7j$}b$2r$|s%'E$LU$po$Ml$X=$ro%#7%OC$z8$k&*Y=$hg$Q+%~{%ch%U1%rn%N^%sU$b:%=Z$mE$B-%B-%mE$sV#sV#6l$OG%6l$-k$+F$7S$Qp$vo$4U&4U&so$so$4U&4U&wo$-r$-r$,t$m7$e6$}b${e%w,$aC$*'$A6@*'$aC$`0@%[&I*$I*$B]&B]&aC$.9@V>$W>$21@21@)x$)x$io@11@$w$&w$#-&#-&#-&#-&&w$Ju$Ju$Ju$&w$&w$&w$#-&#-&#-&)r$)r$Ft$Ft$Ft$:n$:n$:n$n7$1s$)r$+r%* $= $WY%yV#kw$g8$(/$Ab+Ig+yD$'_+ 5$'_+'_+ 5$Ab+-_+-_+-_+x:+b~+b~+xd%/]+=/+-/+-Z#h($o)+8G$2}@0~+q)+0~+J<@jp+hp+:o+Ht+ZM+ZM+oI+Ht+~G+{P+{P+sI+sI+ZM+ZM+oI+oI+XA#Kx#Kx#Kx#Kx#Kx#Kx#Kx#Vv#Vv#4L#4L#3L#3L#3L#u!$)~#{k@a&@0&@0&@4 @4 @4 @>B+>B+ZK+ZK+ZK+2T+!K@2T+lX+lX+lX+lX+lX+lX+lX+>B+R,@P)@P)@>B+>B+0G+4 @*>+0G+P)@r;@zU$XL$t;@s;@2T+S,@S,@|V+kX+T,@7=@3G+4G+XK+jF$kF$kF$lF$lF$WL$WL$jF$I$+w-$w-$-,$-,$5P#|P+RS#}7@* +_3@A]%A]%A]%5T@DO#22+;`+;`+i|+i|+7j*rn*]}*^I*tA%tA%|A*D%&WO*XO*YO*ZO*`O* P*.P*+P*1D%@P*0;@c 3d.o{+P~ >H.EU%]n#7&+@:+0J*}d.qN%ps+Be+X@${y%'W+3&$+d++d+3&$'W+{y%Y@$Y@$Y@$Y@$Y@$Y@$Y@$Y@$y$$xc+$(+$(+T_+G|@G|@Kh+Kh+G|@$(+xc+xc+$(+G|@Kh+dl.Ai.8Y+1m.dl.q9+Ai.8Y+Ai.dl.q9+q9+dl.Ai.8Y+oh.$(+u]#xc+:{+Ea+h]@5A.M8@$(+d #G|@d #Ea+h]@Ea+xc+}f.yM+'U.'U.ks@Zh@Zh@Zh@'U.P1.GV.P1.'U.Zh@)&+[N*Bz$Bz$Bz$Bz$Bz$Bz$9g.9g.13+13+ko.NM+NM+cI+l7 l7 G|@G|@G|@T_+$(+$(+xc+xc+T_+T_+T_+T_+T_+T_+T_+T_+';$';$d #u]#:{+v]#v]#h]@M8@u]#23+US+u]#:{+d #23+xc+xc+xc+xc+xc+xc+xc+xc+Kh+G|@G|@T_+$(+$(+xc+xc+T_+T_+G|@Kh+Kh+Kh+G|@G|@Kh+Kh+Kh+$(+Ea+5A.$(+G|@Q] Rx.8}.|f.J; Ov+%U.|.+J; |f.[y+[y+[y+J; Q] 8Y+8Y+1m.C! ]$@U/@6g+A_@jy.A_@]$@A_@]$@A_@]$@A_@]$@]$@]$@]$@]$@]$@]$@jy.jy.Yt.6g+jy.jy.]$@]$@", "[! [! [! [! [! [! [! 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &) &) &) &) g% g% g% g% g% g% g% g% af.af.af.af.g% g% *_ *_ I> 5% %% %% f% I> I> I> I> I> v% v% v% v% f% y% M$ m@ U@ U@ U@ 2% 2% 2% .* .* .* .* .* .* .* o3 ~_ 0c 0c 0c 0c 0c 0c 0c -_ =_ =_ 0c A^.X_ X_ 7v@A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.n3 ac fd .* 2% 2% .* fd 5[ 5[ fd * * fd 5[ fd * og og og og og og og og og og og og og og og og v% I> fL.w4.w4.w4.w4.w4.fL.fL.w4.w4.fL.I> v% y% u% .^ p: C' C' C' og p: -^ -^ .^ .^ p: p: og si ':+5v@5v@5v@6v@6v@6v@6v@7v@)i+;p.;p.X5 4z ]b+;p.$w ;b.;b.;b.;b.;b.;b.;b.|x.|x.|x.|x.|x.|x.|x.|x.{_ ;b.|x.O9.O9.;b.{_ W_ &5 O9.6}%{_ &5 ;b.|x.{_ Hs .o ac =5 &5 &5 fL.w4.s3.s3.QI.$;&4I%l=&M}.M!.q;..Q {N@c+#wH.FO*3@+#P*x>%!D g^ I'$2K+tY.MH.p^%wu.Qm*g<@BK@ks%Up*^r*(t*$P*CE*gk*T3*wq*/8%p1@L$*q'@A($$>#$>#$>#dk@dk@dk@dk@dk@!}@S)@S)@W,@.*+.*+XX.XX.U`$U`$>>+m~+K[#K[#M[#M[#M[#M[#L[#L[#RA$RA$*c$*c$Wk$Wk$Tj$Tj$Tj$,Z#>b$>b$Ms$Ms$Rj$Rj$4($c8$!I$B+K)@K)@$B+$B+)w+xD+*>+3 @3 @3 @*>+*>+ny+ny+4 @_w+J@@e^@P,@a&@P,@O,@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@,'$H6@-(@-(@O,@L@@0$@O,@K@@Z.@O)@t<@t<@O)@*>+;B+e^@K@@P,@P,@u!$-_#4L#4L#Kx#pe#!B+d^@a$@0$@J@@X{@=b$tW#%P*kq#bN$b9$5F$Vy$JD%UH#CB$kS$n)%n)%&P*-y%A0%/ %yR#(-+7G#7G#J1##*%o=#I_@b=#FM@@N+{-+RK+H,@rd+:f+I:+R.+T.+ak@[6+O,+&4+Ll+od+9X+#/+#/+>k+$a@Ug+'f+~i#Gy#!6+Ty#Xy##K#B}%,5#`P#jx*{C*az**P*[r#(r#ED*=P*-P*;P*>P*,P*'P*)P*!P*~P*{P*]P*^P*/P*(P*6v*)u#jx*bz*V7#Kc#T7#VB*4|%gs%X%$^$$Sy#,/$@G#5V#v.$w0#u0#z!$>>$E_$F_$F_$;6+;6+Es$7q$`-$-f+Vl+Vl+:@$3t#4t#$w#W+$X1#Vl+Tn#cc#3&@3&@2$@|&@r.$hc#1$@s=@s=@Nb+}]+ur+up+>w+dB@6o@#a@P)@Q,+Q,+T,@>K@>K@!K@]K@[H#E@@4G+CI+gX+fX+| @fX+2 @8G+cB@8$@'_#6Z+YM@j)+%-+%'/+MC$u/%rh$>/+>/+6l$6l$6l$Ri$+F$+F$Qp$Qp$Rp$Rp$Np$Np$4U&4U&wo$wo$wo$-r$1s$1s$Et$}b${e%g>$V>$V>$='$aC$}7&%[&%[&I*$B]&Z0@aC$.9@V>$W>$21@21@)x$)x$io@11@&w$#-&#-&.~&.~&#-&#-&&w$Ju$Ju$&w$&w$&w$#-&#-&#-&)r$)r$)r$Ft$Ft$:n$:n$:n$Ew$:n$)r${x$.r%.r% v$Gt$>c$I#$x:+Jg+Hg+Hg+Ig+Jg+Ig+Jg+Jg+Jg+Ab+Ab+-_+-_+Jg+Jg+xd%Jg+/]+Ab+*/+=f+p)+r0+2}@Ul+0~+ad+J<@jp+hp+:o+Ht+ZM+ZM+oI+Ht+er+{P+{P+sI+sI+ZM+ZM+oI+#w+XA#Kx#Kx#Kx#Kx#Kx#Kx#Kx#Vv#Vv#4L#4L#3L#3L#3L#-_#a&@0&@0&@0&@4 @4 @4 @4 @>B+>B+lX+ZK+ZK+Q)@2T+2T+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+Q)@ZK+ZK+ZK+lX+9G+9G+9G+>B+P)@R,@zU$t;@t;@|V+2T+S,@S,@kX+kX+7=@7=@3G+4G+WK+jF$kF$kF$lF$lF$WL$WL$jF$I$+w-$w-$-,$-,$5P#|P+RS#}7@* +_3@8l*A]%8l*8l*5T@U^@>t*;`+@/%@/%7j*rn*]}*^I*TC*TC*e=&e=& =] t% U@ 2% 2% .* .* .* .* .* .* .* .* .* .* .* o3 &5 X_ X_ X_ X_ X_ X_ X_ A^.A^.A^.A^.X_ X_ X_ X_ A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.n3 ac fd .* 2% 2% .* fd 5[ 2% * 5[ fd 2% U@ .* 5[ og og og og og og og og og og og og og og og og I> I> v% v% v% I> fL.w4.fL.fL.w4.w4.w4.fL.I> u% u% .^ p: og C' C' og og .^ .^ .^ p: p: p: og si ':+5v@5v@5v@6v@6v@6v@6v@7v@)i+;p.;p.X5 4z ]b+;p.$w ;b.;b.;b.;b.;b.;b.;b.|x.|x.|x.|x.|x.|x.|x.|x.{_ ;b.|x.O9.O9.O9.|x.|x.&5 O9.6}%{_ &5 ;b.|x.{_ Hs .o ac ed &5 &5 fL.fL.s3.s3.QI.$;&4I%l=&M}.M!.M!.p;.sF.[M@1P*2P*B.@2l*x>%!D g^ I'$2K+tY.MH.p^%cl*ck*g:@!m%27*yC.>B#pt*Tv*sz*gk*/8%:-@:-@G}$ZO@tm#$>#dk@dk@!}@!}@S)@S)@S)@S)@S)@S)@S)@S)@S)@S)@U`$U`$>>+m~+K[#K[#M[#M[#L[#L[#L[#RA$RA$RA$Zz$Zz$jm$jm$jm$*c$]m$ar$ar$ar$Sj$Sj$Rj$09$09$09$bv$qn%!I$+;B+K@@K@@P,@a&@-_#-_#4L#Vv#Kx#pe#z$+-(@H6@P,@Z.@0$@S6#X<#T`$%o%)I$SQ$jO$oz#0w$zx$CB$H{%n)%n)%Wa%;a$A0%(-+}f++h+UX. +@dZ.)}@S,+(K@FM@9V@@N+{-+RK+.N+f[+I:+(/+2]+T.+ak@N@+O,+f~+;2+Mb+nD+gi+gi+(+@F:+)f+'f+*2+`3+E_$q'$s=$#K#C}%,5#`P#jx*{C*az**P*3P*^C*4P*5P*Yi#6P*7P*8P*9P*0P*aP*bP*cP*vG*dP*eP*|D*6v*)u#jx*bz*R0#P0#'c$~C*xf#]l#^$$s=$,/$,~%yB#UY#,>$dt#ct#u0#>>$>>$F_$F_$;6+&2+Es$Es$fd+fd+X1#X1#:@$$w#3t#$w#W+$TR#Vl+Tn#cc#3&@3&@2$@|&@r.$hc#1$@t&@t&@8X+}]+ur+up+;w+!w+6o@#a@P)@Q,+Q,+T,@>K@>K@R)@!K@,K@jX+5$@2R+fX+| @| @gX+2 @8G+cB@8$@'_#L@+P0+!]+%-+l;@S;@gn$|s$2r$io%'E$Ml$pP&fP*ZS&nw%Ed%DT%/X$sz%u %.j$Rr$>Z$dh%k*%jm%kk%b:%65%5 %XB$~A$mE$(]+8g$8g$Ri$-k$Ri$@F$+F$+F$Qp$Qp$Rp$Rp$Np$Np$wo$wo$4U&4U&vo$vo$:n$:n$2r$Et$='$='$V>$V>$g>$:u%}7&`0@%[&I*$B]&Z0@.9@.9@V>$W>$21@21@)x$)x$io@11@#-&.~&.~&@-&@-&.~&.~&#-&Ju$Ju$&w$&w$&w$#-&#-&#-& v$)r$)r$)r$Ft$Ft$:n$:n$ v$ v$ v$ v$)r$)r$)r$Gt$V[$vT# 5$yD$wL$wL$c %yD$c %c %yD$yD$'_+'_+'_+ 5$xd%xd%Ld$xd%AM$b~+Sl$ek%Ab$]]+u^@}1@v^@2}@(a@1}@:R+:o+Ht+ZM+ZM+oI+Ht+er+sI+sI+sI+sI+ZM+ZM+ZM+dr+XA#Kx#Kx#Kx#Kx#Kx#Kx#Kx#Vv#Vv#Vv#4L#4L#3L#3L#-_#)~#a&@0&@0&@0&@0&@4 @4 @0G+>B+>B+>B+ZK+ZK+Q)@Q)@Q)@Q)@Q)@Q)@Q)@Q)@Q)@Q)@Q)@ZK+ZK+ZK+lX+lX+lX+lX+>B+P)@Q)@s;@t;@t;@|V+|V+kX+kX+kX+kX+7=@7=@7=@5$@iX+kF$kF$kF$lF$lF$lF$lF$jF$I$+w-$w-$-,$-,$5P#|P+RS#}7@>5@p}@:3@8l*8l*8l*22+u(@pW$pW$;`+;`+u##:u*tw*^I*tA%tA%e=&e=&( Bz$l7 cI+aH@l}+aH@aH@bH@}f.}f.l7 cI+cI+9g.9g.Bz$aH@aH@bH@}f.}f.G|@G|@T_+T_+T_+$(+$(+$(+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+35+35+f+#f+#f+#R~$R~$R~${'$R~$R~$m|.d%$d%$V&${'$T_+T_+T_+T_+T_+T_+T_+T_+Ea+Ea+xc+xc+xc+xc+$(+$(+xc+xc+$(+T_+T_+$(+xc+Ea+xc+T_+T_+xc+5A.]! Ea+T_+J; Ov+Ov+|f.|f.%U.[y+Q] J; |f.|f.|f.|f.J; P] Q] w3&*~@C! H0@ok.ok.ok.ok.ok.ok.ok.ok.ok.ok.ok.jy.q9+|f.|f.|f.|f.|f.|f.|f.|f.J; P] |f.Ov+Rx.", "[! [! [! [! [! [! [! 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ &_ &_ &_ &_ &_ &_ &_ &_ 0' |% $% &) &_ ~_ n3 &5 g% g% g% g% g% g% g% g% g% *_ *_ *_ R_ R_ -H.-H.fL.v% 5% f% I> fL.I> v% 5% 5% f% v% v% I> fL.-h Y_ 2% 2% .* .* * * * .* .* .* .* .* .* .* o3 &5 X_ X_ X_ X_ X_ X_ X_ l. l.7v@7v@X_ A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.n3 ac fd .* 2% 2% .* fd 5[ 2% .* * .* .* 2% .* .* og og og og og og og og og og og og og og og og w4.fL.I> v% v% I> w4.a, fL.fL.w4.w4.w4.fL.fL.=] =] .^ p: og og og og og p: p: p: p: p: p: og si ':+5v@5v@5v@6v@6v@6v@6v@7v@)i+;p.;p.X5 4z ]b+;p.$w ;b.;b.;b.;b.;b.;b.;b.{_ {_ {_ {_ {_ {_ {_ {_ {_ ;b.;b.|x.O9.O9.6}%6}%&5 O9.6}%{_ &5 ;b.|x.{_ .o .o ac ed W_ W_ fL.fL.s3.s3.QI.$;&4I%l=&M}.M!.yd.L!.^C.[M@1P*`X lX.oP*x>%!D g^ I'$2K+tY.MH.p^%vw$cj*]r*pP*^r*>B#pt*5u*BX&te$gj*p1@p1@ij*G}$Lu@dk@dk@!}@!}@S)@W,@.*+.*+W,@W,@S)@S)@S)@S)@!}@!}@U`$>>+>>+m~+K[#M[#L[#L[#L[#RA$RA$RA$Zz$Zz$Vy$Vy$/v${m${m${m$ln$ln$]m$]m$Sj$=k$09$09$90$90$J$+Rb$!I$B+lX+lX+lX+>B+>B+O)@O)@O)@4 @0&@0&@a&@a&@P,@P,@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@)~#H6@a$@H6@=9@b=@b=@a&@K@@Z.@O)@t<@t<@O)@*>+;B+my+Z.@P,@a&@*9@gY#Vv#Vv#Kx#yb#z$+b&@P,@0=@0&@Z.@6~#X<#T`$DM@lF$hU$>H$Gx$*N$zx$H{%H{%n)%n)%Wa%<7&1|+(-+}f++h+@@#GM@[f+[f+y_$o=#9V@cp+{-+{-+RK+H,@f[+I:+(/+2]+T.+p8+N@+O,+G:+;2+nD+nD+gi+gi+(+@F:+)f+jd+Gy#`3+E_$q'$bi##K#C}%,5#`P#cD*{C*{I*>$F_$F_$&2+&2+Es$gd+H#$H#$;k+;k+$w#$w#$w##w##w#Vl+oq#Ey#cc#3&@YA+2$@|&@r.$hc#1$@t&@t&@8X+}]+ur+-w+;w+!w+6o@#a@P)@Q,+Q,+T,@>K@>K@8G+w;@)K@jX+5$@gX+4Z+lZ@4Z+gX+5G+8G+cB@8$@UQ@L@+P0+j)+ >+(V+S;@K2&}b$|s$io%'E$Ml$DP*qP&jt%ow%to%xy%wy%Ea%i7%4)%hg$Pr$E'%23%Hr%H8%c>%6 %d;%MC$)B$mE$sV#;/+;/+Ri$-k$Ri$5l$+F$+F$Qp$Qp$Rp$Rp$Np$Np$wo$wo$4U&vo$nt$Ju$ v$ v$M3&2r$-'$V>$-'$-'$g>$:u%V=$`0@%[&%[&Z0@Z0@.9@*'$V>$W>$21@21@)x$)x$io@11@.~&.~&@-&PI&PI&@-&.~&.~&Ju$Ju$&w$&w$&w$#-&#-&#-& v$ v$)r$)r$)r$Ft$Ft$Ft$.r%{x$ v$)r$)r$ v$.r%{`#=Z#;_+'_+c %wL$wL$wL$c %wL$c %c %c %yD$yD$'_+>/+7m@7m@$w$AM$;o$vV#t$>q$;:@MU#X4@MU#u^@OS#29@:R+:o+Ht+ZM+ZM+oI+Ht+er+sI+sI+sI+sI+ZM+ZM+ZM+dr+XA#Kx#Kx#Kx#Kx#Kx#Kx#Kx#Kx#Kx#Vv#Vv#4L#4L#3L#-_#)~#a&@0&@0&@0&@0&@4 @4 @4 @0G+>B+>B+lX+ZK+ZK+ZK+s;@s;@s;@s;@s;@s;@s;@s;@ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+P)@P)@Q)@s;@s;@|V+|V+|V+kX+kX+kX+wp#7=@7=@7=@5$@iX+kF$kF$kF$lF$lF$lF$lF$jF$I$+w-$w-$-,$-,$5P#|P+RS#}7@1V#* +<3@:3@8l*A]%U^@i<#]w*pW$>t*>t*rn*EP*tw*^I*tA%tA%QB*QB*a#%FP*GP*ZO*hP*HP*IP*JP*0H*KP*xH&+% LP*h~ uq.5v@MP*NP*7&+@:+0J*w{@qN%ps+X@$X@${y%'W+'W+'W+'W+'W+'W+{y%`b&`b&`b&`b&`b&`b&`b&/{ Bj.G|@G|@T_+$(+$(+xc+xc+xc+$(+G|@Kh+Kh+G|@$(+xc+]$@q9+dl.q9+]$@]$@jy.dl.dl.dl.dl.dl.dl.dl.dl.G|@T_+d #d #d #d #d #d #u]#:{+d #US+US+d #d #US+OP*9g.9g.9g.9g.9g.9g.9g.Bz$bH@Bz$9g.aH@}f.l7 aH@>( Bz$Bz$aH@bH@}f.cI+cI+NM+9g.9g.Bz$Bz$aH@aH@bH@bH@T_+T_+T_+T_+T_+T_+$(+$(+G|@G|@G|@G|@G|@G|@G|@G|@)g@-V@-V@35+f+#R~${'$m|.m|.R~$35+{'$RO+0&+V&$f+#G|@G|@G|@G|@G|@G|@G|@G|@]! 5A.5A.Ea+xc+xc+$(+$(+Ea+xc+xc+$(+xc+Ea+5A.5A.5A.xc+$(+xc+5A.]! Ea+$(+[y+%U.%U.[y+|f.[y+|f.P] J; J; |f.|f.|f.J; J; J; dl.H0@H0@ok.A_@A_@A_@A_@ok.ok.ok.ok.ok.ok.ok.jy.P] P] J; J; J; |f.|f.|f.[y+J; P] |f.%U.Ov+", "[! [! [! [! [! [! [! 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ &_ &_ &_ &_ &_ &_ &_ &_ &) &) &) &) &_ &_ &_ &_ g% g% g% g% g% g% g% g% g% *_ *_ *_ R_ R_ -H.-H.I> v% 5% f% I> fL.v% 5% 5% 5% f% v% v% I> fL.-h Y_ 2% 2% .* .* * * * .* .* .* .* .* .* .* o3 &5 X_ X_ X_ X_ X_ X_ X_ l. l. l.7v@X_ A^.0c 0c A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.n3 ac fd .* 2% 2% .* fd 5[ 5[ 2% {@ U@ fd ui * m@ og og og og og og og og og og og og og og og og cl+a, w4.I> I> fL.a, 8H.I> fL.w4.a, a, w4.w4.-h -h p: p: p: p: og C' C' og og og og og og p: -h ':+5v@5v@5v@6v@6v@6v@6v@7v@)i+;p.;p.X5 4z ]b+;p.$w ;b.;b.;b.;b.;b.;b.;b.W_ W_ W_ W_ W_ W_ W_ W_ {_ {_ ;b.;b.|x.O9.6}%6}%&5 O9.6}%{_ &5 ;b.|x.{_ ac ac ac ac {_ W_ I> I> s3.s3.QI.$;&4I%l=&M}.M!.8:.U>.sF.c+#wH.2P*PP*Q|*x>%!D g^ I'$2K+tY.MH.p^%QP*RP*SP*=z*(t*DE*Tv*BX&3I*{8*hj*G}$G}${R@{R@!_#dk@dk@!}@S)@W,@.*+_-+_-+W,@W,@S)@S)@S)@S)@!}@!}@U`$>>+>>+m~+K[#M[#L[#L[#L[#RA$RA$RA$Zz$Zz$Vy$Vy$/v$/v$/v${m$CO#ln$ln$ln$Sj$=k$09$09$90$90$J$+Rb$!I$K@4G+4G+5&@R,+R,+R,+R,+R,+5&@4G+5$@5$@4G+5&@R,+F@@F@@F@@F@@DD+DD+ZK+ZK+r;@R,@S##S##iy+iy+dB@~w+>B+lX+lX+lX+>B+>B+O)@O)@O)@O)@0=@0&@P,@L@@L@@P,@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@*9@H6@a$@*9@b=@*w$b=@a&@K@@Z.@O)@t<@t<@O)@*>+;B+ny+ny+0&@a&@*9@gY#Vv#Kx#Kx#yb#z$+b&@P,@0=@0&@Z.@5~#9k@lq#w)$lF$sS$CO#CM#a/$OX#H{%H{%*D%&D%zl*/1&7)#(-+yR#+h+@@#@@#T,+t!$y_$o=#9V@9V@@N+{-+.N+$t@W&+-.$(/+2]+ h+(_+N@+O,+G:+;2+-2+-2+gi+(+@Pg+{|+jd+;|%dF$o'$|@$W4$bi##G#l}%~2#/2#cD*{C*qO*TP*UP*VP*WP*XP*YP*ZP*`P* Q*.Q*+Q*@Q*#Q*AP*$Q*%Q**M*zJ*Lx*V`#cD*bz*R0#P0#;5#_u*xf#ai#s=$et#,/$,~%yB#Vy#{w#wq#ct#u0#>>$E_$qD$qD$&2+&2+Es$gd+H#$H#$;k+;k+$w#:@$W+$W+$D_$-X#Ey#Ey#cc#3&@YA+2$@|&@r.$}&@=m+`+#`+#8X+Tt+}T+-w+up+)w+6o@#a@P)@Q,+Q,+T,@>K@>K@8G+w;@)K@jX+5$@gX+4Z+lZ@4Z+2R+5G+X.@cB@^K@UQ@6T+Ll+N,+'c@.>+48+K2&d6$d6$/n$^n$LH%DP*qP&jt%ow%to%sB%&Q*fQ$hR$1)%/a%P+% X$^V$C=%7l$ue%6 %-Z$MC$)B$mE$sV#;/+;/+Ri$-k$Ri$5l$+F$+F$Qp$Qp$Rp$Rp$Np$Np$wo$wo$4U&vo$Ju$&w${x${x$M3&2r$-'$V>$-'$-'$g>$:u%V=$M9&}7&&G$Z0@C&%='$='$|s$E5&21@21@Sl$Sl$io@11@.~&.~&@-&PI&PI&@-&.~&.~&Ju$Ju$&w$&w$&w$#-&#-&#-& v$ v$ v$)r$)r$)r$Ft$Ft$WY%{x$ v$)r$ v$WY%* $aP$8g$'_+yD$c %wL$wL$wL$wL$wL$c %c %c %yD$yD$'_+>/+.O$.O$&w$7S$vo$0p$Ew$yo$2r$Y4@@r%|T@@r%OS#x)&29@:R+:o+Ht+ZM+ZM+oI+Ht+er+ZM+ZM+ZM+ZM+sI+sI+sI+nI+XA#Kx#Kx#Kx#Kx#Kx#Kx#Kx#Kx#Kx#Kx#Vv#Vv#4L#4L#gY#)~#a&@a&@a&@0&@0&@0&@4 @4 @4 @0G+>B+>B+>B+ZK+ZK+s;@s;@s;@s;@s;@s;@s;@s;@ZK+ZK+ZK+ZK+Q)@Q)@Q)@Q)@Q)@Q)@Q)@Q)@2T+|V+S,@v;@T,@T,@7=@7=@wp#eX+eX+fX+9e#lF$lF$lF$kF$kF$kF$kF$jF$I$+w-$w-$-,$-,$5P#|P+RS#}7@1V#>5@aa@:3@8l*A]%U^@i<#]w*pW$>t*>t*rn*EP*tw*~E*tA%9G*QB**Q*=Q*-Q*;Q*>Q*,Q*'Q*7J*lP*=H*)Q*l++uJ e5.y$$P~ >H.;e*!Q*7&+@:+0J*w{@qN%ps+X@$X@$'W+{y%{y%{y%{y%{y%{y%'W+{y%{y%{y%{y%{y%{y%{y%*$@Bj.G|@G|@T_+$(+$(+xc+xc+xc+$(+G|@Kh+Kh+G|@$(+xc+]$@q9+dl.q9+]$@]$@jy.dl.q9+dl.dl.dl.dl.q9+q9+$(+$(+d #d #d #d #d #d #d #:{+d #US+US+d #d #US+OP*aH@aH@Bz$Bz$Bz$Bz$Bz$Bz$aH@Bz$Bz$aH@}f.}f.aH@9g.9g.9g.Bz$aH@bH@}f.l7 cI+}f.}f.bH@bH@aH@aH@Bz$Bz$$(+$(+T_+T_+T_+T_+T_+T_+$(+$(+$(+$(+$(+$(+$(+$(+)g@-V@35+f+#R~${'$m|.V&$m|.R~$35+{'$RO+0&+V&$f+#G|@G|@G|@G|@G|@G|@G|@G|@]! 5A.5A.Ea+xc+xc+$(+$(+xc+xc+xc+xc+xc+5A.]! {! ]! Ea+$(+xc+Ea+5A.Ea+$(+Ov+[y+|f.[y+|f.J; J; |f.J; J; J; J; J; J; |f.|f.]$@]$@]$@]$@]$@6g+6g+)> q9+q9+q9+q9+q9+q9+q9+q9+P] P] P] J; J; |f.[y+[y+Ov+[y+J; |f.[y+[y+", "[! [! [! [! [! [! [! 6[ 6[ 6[ 6[ 6[ 6[ 6[ Q_ &_ &_ &_ &_ &_ &_ &_ &_ ~_ ~_ &_ &_ &) &) $% $% g% g% g% g% g% g% g% g% g% g% g% *_ *_ *_ R_ R_ v% f% 5% f% v% v% 5% ~% f% f% v% v% v% v% I> =] t% U@ 2% 2% .* .* .* .* .* .* .* .* .* .* .* o3 &5 X_ X_ X_ X_ X_ X_ X_ 7v@7v@X_ X_ A^.A^.0c 0c A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.A^.n3 ac fd .* 2% 2% .* fd 5[ pj .* l& m@ ui YY fd {@ og og og og og og og og og og og og og og og si cl+8H.a, w4.w4.w4.w4.a, I> fL.w4.a, a, a, a, si -h p: .^ .^ p: og C' _y C' C' C' og og og p: -h ':+5v@5v@5v@6v@6v@6v@6v@7v@)i+;p.;p.X5 4z ]b+;p.$w ;b.;b.;b.;b.;b.;b.;b.W_ W_ W_ W_ W_ W_ W_ W_ ;b.{_ {_ W_ {_ ;b.|x.|x.&5 O9.6}%{_ &5 ;b.|x.{_ ac ac .o .o {_ W_ I> v% s3.s3.QI.$;&4I%l=&M}.M!.8:.L!.{N@{$+15*FO*lX.Q|*x>%!D g^ I'$2K+tY.MH.$B ~Q*RP*TB*=z*_t*6.&3B*{Q**L*{8*(=$Lu@Lu@!_#Y<#Y<#$>#$>#dk@!}@W,@.*+_-+_-+S)@S)@S)@S)@S)@S)@S)@S)@U`$U`$>>+m~+K[#K[#M[#M[#L[#L[#L[#RA$RA$RA$Zz$Zz$/v${m${m${m$ln$ln$]m$]m$Sj$Sj$Rj$09$09$09$bv$qn%!I$K@4G+5&@R,+R,+R,+R,+5&@R,+5&@5$@jX+jX+5$@5&@R,+F@@F@@F@@F@@DD+DD+ZK+ZK+R,@R,@T##T##~w+~w+dB@$B+0G+9G+9G+9G+0G+0G+4 @4 @4 @O)@a=@0&@L@@O,@0$@L@@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@*9@H6@H6@)~#b=@b=@a&@L@@K@@Z.@O)@t<@t<@O)@*>+;B+4 @4 @0&@0&@*9@H6@c&@pe#Kx#s<@d^@b~@L@@Z.@ny+_w+8m@-7@^k#or&5($^m$jm$=7$tp%0/$H{%H{%]Q*&D%^Q*lS$> $/ %(-+}f+@@#@@#J1#K1#S,+(K@FM@FM@ib#ib#$t@M@@W&+-.$(/+d[+pd+(_+O,+`g+;2+Mb+-2+gi+(+@(+@Pg+{|+jd+w|%0_%DC$|@$X%$yf#C}%E4%Q7#i.%cD*{C*2F*/Q*(r#(Q*_Q*:Q*K@>K@R)@!K@,K@jX+5$@2R+fX+| @fX+2R+5G+X.@cB@^K@8V@J@@B$+@1@zj$yP$48+gn$d6$d6$P6*]n$LH%pP&fP*qP&:P*%z%k6%k6%vj%ve%@d%S0%]`$P+%O+%Es%Ds%mW$qY$rF$sh$~A$mE$(]+8g$8g$Ri$-k$Ri$@F$+F$+F$Qp$Qp$Rp$Rp$Np$Np$wo$wo$4U&vo$nt$Ju$ v${x$2r$Et$='$='$V>$V>$g>$w,$gp%M9&}7&}7&C&%C&%='$V>$|s$E5&21@21@Sl$Sl$io@11@#-&.~&.~&@-&@-&.~&.~&#-&Ju$Ju$&w$&w$&w$#-&#-&#-&{x${x$ v$ v$)r$)r$)r$Ft${x${x$ v$ v${x$WY%* $~O$>/+'_+'_+yD$yD$c %c %wL$c %c %yD$yD$'_+'_+'_+8g$.O$#-&&w$Ju$nt$vo$`u$`u$2r$+r%X=&W=&X=&x)&x)&),&:R+:o+Ht+ZM+ZM+oI+Ht+er+ZM+ZM+ZM+ZM+sI+sI+sI+nI+XA#Kx#Kx#Kx#Kx#Kx#Kx#Kx#pe#Kx#Kx#Kx#Vv#Vv#4L#gY#)~#a&@a&@a&@0&@0&@0&@0&@ny+ny+0G+0G+>B+>B+lX+ZK+Q)@Q)@Q)@Q)@Q)@Q)@Q)@Q)@ZK+ZK+ZK+Q)@Q)@Q)@s;@s;@Q)@Q)@ZK+Q,+2T+|V+v;@m#$T,@7=@7=@7=@eX+eX+eX+fX+9e#lF$lF$lF$kF$kF$kF$kF$jF$I$+w-$w-$-,$-,$5P#|P+}7@}7@}7@1V#qQ#<3@8l*A]%22+u(@pW$pW$;`+;`+u##:u*tw*~E*tA%9G**Q*w$%gP*7Q*8Q*>Q*9Q*0Q*aQ*bQ*)2%cQ*dQ*$U.LP*9Y+PF+$0+0v#!Q*7&+@:+0J*w{@qN%ps+X@$X@$'W+{y%B#@B#@B#@B#@{y%'W+'W+'W+'W+'W+'W+'W+'W+y$$|m.T_+T_+T_+T_+$(+$(+$(+$(+$(+T_+G|@G|@T_+$(+$(+jy.dl.Ai.dl.jy.]$@q9+Ai.q9+q9+dl.dl.dl.q9+jy.Ea+xc+:{+:{+u]#u]#d #d #d #:{+d #US+';$u]#u]#';$US+bH@bH@bH@aH@aH@aH@Bz$Bz$Bz$aH@aH@bH@bH@bH@aH@Bz$Bz$Bz$Bz$aH@bH@}f.}f.l7 cI+l7 l7 }f.bH@aH@Bz$Bz$$(+$(+$(+T_+T_+T_+G|@G|@xc+xc+xc+xc+xc+xc+xc+xc+35+35+f+#R~${'$m|.V&$d%${'$R~$R~$m|.d%$d%$V&${'$T_+T_+T_+T_+T_+T_+T_+T_+Ea+Ea+xc+xc+xc+xc+$(+$(+xc+$(+$(+$(+xc+5A.]! {! ]! Ea+T_+T_+xc+Ea+xc+$(+Rx.|f.J; [y+[y+P] P] %U.J; J; P] P] P] J; |f.[y+6g+6g+]$@jy.jy.]$@6g+)> q9+q9+q9+q9+q9+q9+q9+q9+P] P] J; |f.|f.[y+%U.%U.Rx.[y+J; J; |f.|f.", "&- &- &- &- &- &- &- Q_ Q_ Q_ Q_ Q_ Q_ Q_ Q_ &_ &_ &_ &_ &_ &_ &_ &_ ~_ ~_ &_ &_ &) &) $% $% f% f% f% f% f% f% f% f% v% v% v% v% f% f% 5% 5% f% 4% 4% 5% f% f% %% +h.I> I> v% v% v% v% f% y% M$ m@ U@ U@ U@ 2% 2% 2% .* .* .* .* .* .* .* o3 ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 n3 n3 n3 ~_ ~_ ~_ ~_ n3 n3 n3 n3 n3 n3 n3 n3 n3 n3 n3 n3 n3 n3 n3 n3 ac ed o3 Y_ Y_ o3 ed ac .o =5 Y_ o3 ac .o ed o3 si si si si si si si si si si si si si si si si w4.a, a, a, w4.fL.I> v% I> fL.w4.a, 8H.8H.a, Es si p: .^ .^ .^ og C' _y _y _y C' C' og og p: -h ':+':+':+':+w4.w4.w4.w4.W_ ;b.G7 G7 24 H{ ;5 G7 $w ;b.;b.;b.;b.;b.;b.;b.;b.;b.;b.;b.;b.;b.;b.;b.;b.{_ W_ &5 n3 &5 W_ {_ &5 O9.6}%{_ &5 ;b.|x.{_ ed ac .o .o ;b.W_ I> v% s3.s3.QI.$;&4I%l=&M}.M!.yd.p;.1o.sN%OK.(k*B.@oP*x>%!D g^ I'$2K+tY.MH.$B eQ*fQ*gQ*hQ*3B*6.&4I*iQ*jQ*kQ*o1@./%y[+D@+Pj#Pj#d!@A($$>#dk@S)@W,@_-+_-+dk@dk@!}@S)@S)@W,@.*+.*+XX.XX.U`$U`$>>+m~+K[#K[#M[#M[#M[#M[#L[#L[#RA$RA${m${m$jm$jm$ln$]m$]m$]m$>b$>b$Ms$Ms$Rj$Rj$4($c8$!l$WL$WL$WL$WL$WL$WL$WL$kF$kF$kF$kF$kF$kF$kF$kF$hX+7V@7V@7V@gX+gX+5$@5$@E@@4G+5G+5G+w;@w;@8G+g[+)K@5$@5&@R,+yM@R,+5&@5&@yM@5&@5$@E@@E@@5$@5&@yM@F@@F@@F@@F@@DD+DD+ZK+ZK+P)@>B+K)@K)@$B+$B+)w+xD+*>+3 @3 @3 @*>+*>+ny+ny+ny+O)@a=@0&@O,@X{@b~@0$@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@)~#*9@H6@)~#=9@=9@L@@b~@K@@Z.@O)@t<@t<@O)@*>+;B+0G+4 @0&@0&@*9@a$@c&@s<@c&@s<@y;@X{@0$@e^@(w+;m+-7@e1@ce#or&5($^m$*c$1S#4V+0/$kS$H{%]Q*&D%^Q*'Q#PX#C)+.B$}f+VQ@-c@#*%<{#o=#I_@b=#b=#;(@;(@ar+0i+W&+(/+mB#,i#pd+(_+7}@`g+Zg+:6+Lb+Sl+$a@$a@@4+~|+cF$iD$^g%U:% (%.(%H_$l}%E4%Y7#i.%{C*Pz*hJ*lQ*mQ*nQ*oQ*pQ*qQ*rQ*sQ*tQ*uQ*vQ*wQ*xQ*oO*yQ*zQ*AQ*BQ*CQ*wB*BA*CA*P0#Wt%T7#~C*4|%gs%X%$^$$Sy#,/$@G#5V#,>$w0#z!$A)$I~%_O#%:%-Q#;6+;6+Es$7q$`-$-f+Vl+Vl+D_$W+$RR#X1#-X#Tn#Tn#W1#2&@YA+YA+V4@|&@H`#}&@=m+v=@v=@sD+Tt+}T+@k+-w+vD+6o@#a@P)@Q,+Q,+T,@>K@>K@!K@]K@[H#E@@4G+CI+gX+fX+gX+CI+;K@X.@cB@^K@8V@J@@B$+R&+sz$yP$S;@w^@Et$|s$*G$]n$LH%pP&k9*_P*DQ*Vd$Kr%EQ*FQ*/5%^E%/E%F9%f#%#4$ap$Aq$Ti$mW$B-%u/%rF$u/%rh$>/+>/+6l$6l$6l$Ri$+F$+F$Qp$Qp$Rp$Rp$Np$Np$wo$wo$4U&vo$vo$nt$)r$)r$Et$}b${e%g>$V>$V>$='${e%gp%V=$<)%Lp$(;$Ql$}b$|s$`u$Ft$cs$cs$AM$AM$7m@6k@ v${x${x$.r%.r%{x${x$ v$)r$)r$ v$ v$ v${x${x${x${x${x${x$ v$ v$)r$)r$)r$ v$ v$ v$)r$)r$ v$ v$.O$Ri$5X#5X#5X#5X#%.%kK$kK$%.%5X#5X#5X#rV#rV#B+>B+>B+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+Q)@s;@s;@s;@t;@|V+2T+Q,+Q,+Q,+kX+v;@m#$3G+3G+7=@[ @eX+eX+oi$M+#8e#WL$lF$lF$kF$kF$jF$jF$jF$I$+w-$w-$-,$-,$5P#|P+}7@}7@RS#}7@oX+aa@8l*A]%5T@U^@>t*;`+@/%@/%7j*rn*tw*fN*PH**G*IQ*w$%FP*JQ*zk*KQ*LQ*MQ*NQ*OQ*PQ*CU%Ec%~c.&C.({ +d+gJ%*/.NP*7&+@:+0J*w{@qN%ps+X@$X@$'W+{y%B#@`b&`b&B#@{y%'W+'W+'W+'W+'W+'W+'W+'W+y$$*$@$(+$(+T_+T_+T_+T_+T_+G|@T_+$(+$(+$(+$(+T_+G|@q9+Ai.1m.Ai.q9+q9+dl.1m.q9+q9+dl.Ai.dl.q9+]$@5A.Ea+v]#v]#:{+:{+u]#u]#u]#:{+d #';$d #:{+v]#:{+d #T_+T_+T_+G|@Kh+Kh+Kh+7P.Kh+G|@T_+T_+T_+G|@Kh+Kh+}f.}f.}f.}f.}f.}f.}f.}f.}f.bH@bH@bH@bH@bH@bH@bH@xc+$(+$(+$(+T_+G|@G|@G|@xc+xc+xc+xc+xc+xc+xc+xc+R~$R~${'$m|.m|.V&$d%$d%$35+{'$V&$V&$m|.m|.m|.V&$$(+$(+$(+$(+$(+$(+$(+$(+T_+T_+$(+$(+$(+$(+xc+xc+T_+T_+T_+T_+xc+Ea+]! {! ]! xc+G|@G|@T_+$(+$(+T_+7}.|f.P] %U.[y+Q] P] Ov+J; J; P] Q] P] J; [y+%U.%U.[y+|f.J; J; J; [y+%U.J; J; J; J; J; J; J; J; P] J; |f.[y+%U.Ov+Ov+Rx.[y+|f.P] J; |f.[y+", "&- &- &- &- &- &- &- Q_ Q_ Q_ Q_ Q_ Q_ Q_ Q_ &_ &_ &_ &_ &_ &_ &_ &_ &) &) &) &) &_ &_ &_ &_ f% f% f% f% f% f% f% f% I> I> I> v% v% f% f% f% 5% 4% %% 4% f% 5% d( .h.fL.fL.I> v% v% f% 5% Q_ T$ {@ m@ m@ U@ U@ U@ 2% .* .* .* .* .* .* .* .* Y_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 n3 n3 n3 n3 n3 n3 n3 n3 n3 n3 n3 n3 n3 n3 n3 ac ed o3 Y_ Y_ o3 ed ac =5 ac .o .o ed =5 ed .o si si si si si si si si si si si si si si si si I> fL.w4.a, w4.I> f% 4% I> fL.w4.a, 8H.8H.8H.Es si p: .^ -^ .^ p: C' p] _y _y _y C' og og p: p: {D ':+':+':+w4.w4.w4.w4.W_ ;b.G7 G7 24 H{ ;5 G7 $w ;b.;b.;b.;b.;b.;b.;b.O9.O9.O9.O9.O9.O9.O9.O9.|x.;b.W_ n3 ~_ ~_ n3 &5 &5 O9.6}%{_ &5 ;b.|x.{_ ed ac .o Hs ;b.{_ I> f% s3.s3.QI.$;&4I%l=&M}.M!.yd.p;.Gf.1.&D+.pj*B.@oP*x>%!D g^ I'$2K+tY.MH.$B QQ*fQ*gQ*WD*uB*3B*`<*RQ*SQ*kQ*o1@./%:v@D@+Pj#Pj#d!@d!@A($dk@!}@W,@.*+_-+$>#$>#dk@!}@W,@.*+_-+_-+f~@f~@XX.U`$>>+m~+m~+K[#K[#K[#K[#M[#M[#L[#L[#L[#jm$jm$jm$*c$]m$ar$ar$ar$=c$=c$nw$Ms$Ms$Rj$%K$im$!l$WL$WL$WL$WL$WL$WL$WL$kF$kF$kF$kF$kF$kF$kF$iX+nZ@nZ@nZ@nZ@fX+fX+jX+jX+J #jX+2 @2 @R)@R)@^^#ov$)K@5$@5&@yM@yM@R,+5&@4G+yM@5&@5$@E@@E@@5$@5&@yM@F@@F@@F@@F@@DD+DD+ZK+ZK+>B+>B+,B+,B+xD+xD+)w+S.@;B+f^@f^@f^@;B+;B+my+my+my+4 @0=@Z.@b~@wr+X{@0$@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@)~#*9@H6@)~#=9@a&@O,@wr+K@@Z.@O)@t<@t<@O)@*>+;B+0G+>B+O)@0&@P,@a$@c&@s<@G6@-(@y;@X{@J@@(w+:|+R.+*t@26+6k#CM@c9$8F$RA$1S#4V+QB$kS$$-%]Q*&D%U8&^ +rr%7I#C)+}f+q$+d>@J3+T,+o=#I_@) +) +.@#.@#0i+)[+S0+qd+mB#,i#pd+qe#7}@=:@:6+Lb+Sl+#4+$a@$a@@4+~|+F0+A!$~/$X:%.(%z0#l}%E4%&G#Y7#i.%{C*Pz*wG*ED*mQ*TQ*UQ*VQ*WQ*XQ*YQ*ZQ*`Q* R*.R*+R*@R*Ty*#R*$R*%R*HD*$B*CA*Wf%Kc#Q0#T7#VB*4|%/O#0($X%$Sy#Zy$@K#Ty#v.$v0#A)$EC$_O#E0+=Q#=Q#;6+;6+Es$7q$-f+-l#-X#qq#D_$SR#-k+X1#oq#(@$oB#/+@ZA+YA+{/+RO@TY#H`#{k+~k+v=@v=@sD+Tt+}T+@k+-w+vD+6o@#a@P)@Q,+Q,+T,@>K@>K@]K@RQ@[H#E@@4G+CI+2R+gX+gX+CI+;K@X.@cB@^K@8V@J@@B$+R&+sz$zP$G,@;]@2r$E5&*G$A**LH%LH%,W$k9*sP&&R*=X%&7%EV%EV%*R*#d%i#%F9%6f$,t$3u$ap$mW$;k$mE$B-%B-%mE$sV#sV#6l$OG%6l$-k$+F$+F$Qp$Qp$Rp$Rp$Np$Np$wo$wo$4U&4U&vo$vo$:n$:n$}b$5c$w,${e%='$V>$='${e%gp%gp%<)%Lp$(;$Ql$|s$|s$`u$Ft$cs$cs$AM$AM$7m@6k@)r$ v${x${x${x${x$ v$)r$)r$)r$ v$ v$ v${x${x${x${x${x${x$ v$ v$ v$)r$)r$ v$ v$)r$)r$Ft$`u$`u$Aq$Ri$5X#rV#rV#rV#5X#%.%%.%5X#5X#rV#rV#c&'**lQ&HQ*+&*+&*WE&>]@:o+Ht+ZM+ZM+oI+Ht+er+oI+oI+ZM+ZM+sI+sI+{P+Gt+XA#Kx#Kx#Kx#Kx#Kx#Kx#Kx#pe#pe#pe#Kx#Kx#Vv#Vv#Vv#u!$)~#)~#a&@a&@a&@a&@0&@Z.@ny+ny+4 @4 @0G+>B+>B+lX+lX+lX+lX+lX+lX+lX+lX+ZK+ZK+Q)@Q)@s;@s;@t;@t;@|V+2T+Q,+R*el.+b..o 3&$ps+*/.U`%7&+@:+0J*w{@qN%ps+X@$X@$'W+{y%B#@!D+!D+B#@{y%'W+'W+'W+'W+'W+'W+'W+'W+y$$y$$xc+$(+$(+T_+G|@G|@Kh+Kh+G|@$(+xc+xc+$(+G|@Kh+dl.Ai.8Y+1m.dl.q9+Ai.8Y+jy.q9+dl.Ai.dl.jy.6g+]! ]! h]@h]@v]#:{+:{+u]#u]#u]#d #';$d #v]#h]@v]#:{+T_+G|@G|@Kh+Kh+7P.oh.oh.7P.G|@T_+T_+G|@Kh+Kh+G|@cI+cI+cI+cI+cI+l7 l7 l7 9g.9g.Bz$aH@bH@bH@}f.}f.xc+xc+$(+$(+T_+G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+m|.m|.m|.V&$V&$d%$d%$d%$-V@{'$RO+d%${'$R~$m|.RO+xc+xc+xc+xc+xc+xc+xc+xc+Kh+G|@G|@T_+$(+$(+xc+xc+G|@G|@G|@T_+$(+Ea+5A.]! ]! xc+G|@Kh+G|@T_+T_+G|@7}.J; P] %U.[y+FA+Q] Rx.J; J; P] Q] P] J; [y+Ov+|f.J; P] FA+FA+Q] P] J; J; J; J; J; J; J; J; J; J; J; |f.[y+%U.Ov+Rx.8}.J; Q] FA+P] [y+%U.", "%% ~% 4% v% fL.fL.v% f% 5% 4% %% %% 4% 5% f% &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ y% y% y% y% y% y% y% y% ^{ ^{ ^{ ^{ ^{ ^{ ^{ ^{ ~% 5% v% f% %% ~% 4% v% I> f% 4% 5% v% v% 5% &- ed * 2% U@ U@ 2% * fd 2% U@ m@ {@ {@ m@ U@ 2% #% #% T$ M$ t% Y_ o3 o3 t% Y_ =5 ed ed =5 Y_ t% o3 o3 o3 o3 o3 o3 o3 o3 M$ =5 .o =5 M$ #% o3 Hs &5 {_ ;b.W_ n3 ~_ n3 W_ ~_ ~_ ~_ ~_ ~_ &_ &_ &_ 4% f% I> I> f% f% I> w4.w4.w4.w4.w4.w4.w4.w4.w4.f% v% v% I> fL.fL.w4.w4.w4.w4.w4.w4.w4.w4.w4.si si og og og og og og og C' C' C' C' C' C' C' C' tS Bh.a:@a:@uM )O si =] ,' T$ 4! Xl [].Ds Lb 4! 24 {_ W_ &5 &5 W_ {_ {_ |x.|x.|x.;b.{_ {_ W_ W_ O9.|x.|x.;b.{_ {_ W_ W_ W_ {_ ;b.|x.|x.;b.{_ W_ .o .o .o .o ;b.;b.a, a, s3.<4 $;&l=&xx.xx.9K.M!.M!.L!.^C.PK.-G.`X lX.2l*)>%8f+71 cj++{ ee+,R*%B ~Q*'R*)R*WD*uB*sz*{8*{8*!R*>9*g,$q'@hm@u,$Pj#Pj#Y<#!_#y[+A($!}@W,@.*+_-+!}@!}@!}@S)@S)@W,@W,@W,@XX.XX.U`$>>+m~+K[#M[#M[#L[#RA$Zz$Zz$Zz$L[#K[#m~+*c$*c$*c$*c$]m$]m$]m$]m$5F$%u$Hs$Hs$nw$nw$a8$;u$!l$8e#8e#8e#8e#8e#8e#8e#WK+WK+WK+WK+WK+WK+WK+WK+nZ@nZ@nZ@nZ@fX+fX+jX+jX+jX+5$@>K@>K@w;@w;@R)@2 @;K@yM@R,+5&@5&@4G+4G+5$@yM@R,+4G+5$@5$@4G+R,+yM@F@@F@@F@@F@@DD+DD+ZK+ZK+0G+0G+,B+,B+$B+$B+!w+$B+0G+3 @3 @3 @;B+;B+_w+_w+my+my+K@@K@@L@@L@@L@@L@@H6@H6@H6@H6@H6@H6@H6@H6@,'$,'$,'$)~#)~#*9@*9@*9@-(@-(@b&@a$@O,@b~@wr++5@0=@0=@O)@O)@O)@O)@>B+>B+P)@0G+ny+Z.@a&@=9@*9@a$@a$@b&@-(@O,@K@@4 @*>+Y.@ly+CD+7G+}{#&6$7F$RA$Js%qS$yx$~R*~R*]Q*&D%zl*(1&PX#C)+.B$yR# +@GM@#*%#*%y_$S,+.$#cp+;(@.@#ar+dz@qd+ h+(_+W-$Rn+Pn+vp+'k+si+M0+mi+]|+h0#q7#if#'l#{R*]R*WP$Y:%j:%9<$@o#O7#J0#i.%as*{I#1H*^R*/R*(R*_R*:R*w+sD@|=@mX+*>+x)+K@4G+4G+2R+CI+CI+| @fX+YK+w;@DD+mq@UQ@L@+Ll+>-+W/%FZ@g9@I2@E5&5c${D*6u$bR*x.%,W$,W$DQ*~A%Kr%-X%rB%EV%vj%'U${5%Z.%N&%W'$DZ$$g>$g>$<)%<)%<)%Jw$i>$x,$}b$E5&{x$.r%#w$7S$6k@xe@$F$Ld$WY%+r%L2&L2&M3&M3&4q&4q&Et$Et$E5&2r$2r$4q&M3&M3&Ft$)r$)r$ v$ v$)r$)r$Ft$Ft$Ft$Ft$Ft$:n$Ew$1s$ap$>0%N^%CJ$wI$wV#wI$CJ$/U$IH$wI$CJ$wI$DJ$nW$DJ$xV#ot$uo$t`%t`%t`%GQ*lp%lp%=d&.&*'**lQ&cR*lQ&HQ*),&p.${P+ZM+oI+oI+ZM+sI+{P+{P+{P+ZM+ZM+ZM+{P+7h$1N#Lx#Kx#Kx#pe#yb#yb#L,@L,@Kx#Kx#Vv#Vv#Vv#4L#4L#4L#gY#H6@H6@H6@H6@L@@L@@K@@qt$a=@a=@O)@O)@4 @4 @*>+9G+ZK+Q)@Q)@ZK+lX+Q)@t;@3 @ZK+t;@t;@s;@Q)@s;@R1#5@>5@oX+oX+aa@8l*5T@u(@]w*Sw*]w*>t*u##=R*|q%BL$/I*DF*]D*LD*7Q*dR*Wd*eR*fR*.P*gR*=H*hR*v,@4 .)].QJ*=5 /D.N}.iR*s=+7&+@:+}d.CI#R4%ps+x*$x*${y%{y%{y%{y%{y%{y%{y%{y%+d+{y%{y%Y@$3&$`b&!D+y$$y$$xc+$(+T_+Kh+7P.oh.y4&$(+T_+T_+G|@G|@Kh+Kh+7P.Ai.1m.1m.dl.jy.jy.Ai.8`#dl.jy.]$@jy.dl.dl.q9+Ea+{! M8@M8@h]@h]@v]#:{+:{+23+d #v]#v]#u]#';$';$d #;~ 6j+*$@/{ Bj.Bj./{ |m.y$$y$$*$@*$@|m./{ /{ Kh+ko.l7 bH@}f.NM+NM+bH@>( }f.}f.}f.}f.}f.}f.}f.}f.$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+m|.{'${'$V&$d%$d%${'$35+V&${'$R~${'$V&$V&$m|.R~$5A.5A.5A.5A.5A.5A.5A.5A.7P.7P.Kh+G|@G|@T_+$(+$(+xc+xc+$(+$(+T_+G|@G|@G|@]! 7P.w5&oh.{! w8.xc+iS.|f.|f.|f.|f.|f.|f.|f.|f.Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+[y+[y+[y+%U.%U.%U.%U.%U.P] P] P] J; J; |f.|f.|f.|f.|f.|f.|f.|f.|f.|f.|f.%U.Ov+Ov+Ov+%U.J; ", "%% ~% 4% v% fL.I> v% f% 5% 4% %% %% 4% 5% f% &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ y% y% y% y% y% y% y% y% Q_ Q_ Q_ Q_ Q_ Q_ Q_ Q_ %% f% v% f% 4% %% 5% v% f% 4% %% 4% v% I> I> y% ed * 2% U@ U@ 2% * fd 2% U@ m@ {@ {@ m@ U@ 2% T$ T$ M$ t% Y_ o3 =5 =5 t% Y_ =5 ed ed =5 Y_ t% o3 o3 o3 o3 o3 o3 o3 o3 t% =5 .o =5 M$ T$ o3 .o &5 {_ ;b.W_ n3 ~_ n3 W_ ~_ ~_ ~_ n3 n3 n3 n3 n3 5% v% fL.I> v% v% fL.a, w4.w4.w4.w4.w4.w4.w4.w4.I> I> I> fL.fL.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.si si og og og og og og og C' C' C' C' C' C' C' C' {D sS tS Bh.uM )O si -h T$ Y_ K> Xl Ds Ds `z K> $w ;b.{_ W_ W_ {_ ;b.;b.|x.|x.|x.;b.{_ {_ {_ W_ ;b.;b.;b.;b.;b.{_ {_ {_ {_ ;b.|x.O9.O9.|x.;b.{_ .o .o .o .o ;b.;b.a, a, s3.<4 $;&l=&xx.xx.9K.M!.M!.L!.^C.PK.-G.`X lX.2l*25+b>$M( YC+&1 '} jR*%B eQ*'R*)R*hQ*uB*6.&xH*`<*kR*>9*g,$q'@A($u,$Pj#Pj#Y<#!_#d!@A($!}@S)@.*+_-+!}@!}@!}@S)@S)@W,@W,@W,@U`$U`$>>+m~+K[#M[#M[#L[#L[#RA$Zz$Zz$Zz$L[#K[#m~+*c$*c$*c$*c$]m$]m$]m$]m$%u$%u$nw$nw$Ms$Ms$a8$b8$!k#8e#8e#8e#8e#8e#8e#8e#9e#9e#9e#9e#9e#9e#9e#9e#7V@7V@7V@7V@gX+gX+5$@5$@5$@5$@YK+YK+R)@R)@R)@5G+2 @5&@5&@5&@4G+4G+4G+4G+yM@R,+4G+5$@5$@4G+R,+yM@F@@F@@F@@F@@DD+DD+ZK+ZK+0G+0G+,B+,B+$B+$B+!w+$B+0G+9G+9G+3 @*>+*>+my+my+my+my+K@@K@@L@@L@@L@@L@@H6@H6@H6@H6@H6@H6@H6@H6@)~#)~#)~#*9@*9@H6@H6@H6@a$@H6@H6@*9@L@@0$@b~@X{@0=@0=@O)@O)@O)@O)@>B+>B+P)@0G+ny+ny+0&@=9@*9@a$@H6@0$@O,@e^@ny+0G+*>+;B+-4+[|+6G+u_%w4#B)+=7$K^$^9$~v$~R*$-%`R$oM%lR*^ +rr%C)+.B$yR# +@@@##*%T,+S,+S,+cp+9V@;(@.@#ar+dz@qd+ h+gz@W-$Qn+vp+'k+vb+4f#Og+F:+]|+q7#{|+V4#'l#{R*mR*Wn#l1$9<$Iq#~2#O7#!5#S0#cD*nR*oR*pR*qR*rR*sR*tR*uR*vR*wR*xR*yR*zR*AR*BR*CR*5M*DR*ER*FR*GR*CQ*7B*BA*Wf%Kc#Wt%'c$=5#+o#z0#X%$^$$Wy#Sy#@G#Vy#'$$v0#A)$A)$E_$8,$qD$qD$d8+d8+7q$In$-f+-f+Vl+Vl+1=$Vl+-X#YN#Wl+Xl+/+@ZA+ZA+1$@=m+&m+&m+{k+{k+{k+60#Pn#sD+}]+}T+-w+>w+dB@|=@mX+0G+x)+%!K@!K@>K@4G+4G+2R+CI+CI+4Z+fX+YK+w;@DD+mq@8V@6T+qy+#>+sz$O)$C5%%}@E5&5c$*G$qo$x.%DP*~X$~X$HR*so%~A%we%vG%vG%we%eQ$P5%A %!@%X'$V'$R`$>o$Ld$-k$Si$(]+(]+(]+(]+6l$6l$6l$6l$vy%vy%ZQ%ZQ%Rp$Rp$)E*)E*-r$wo$nt$Ju$Ju$nt$Ew$1s$e6$e6$w,${e%{e%g>$g>$g>${^*{^*<)%fF&x,$B'%}b$2r${x$.r%.O$7S$_a@ye@#F$AM$WY%+r%L2&L2&M3&M3&4q&4q&E5&E5&2r$2r$2r$2r$4q&4q&Ft$)r$)r$ v$ v$)r$)r$Ft$Ft$Ft$Ft$Ft$:n$`u$Ew$-r$Er%N^%/U$CJ$CJ$CJ$/U$N^%wV#CJ$/U$CJ$IH$DJ$IH$9S$ot$uo$t`%t`%t`%GQ*lp%lp%>c&`y*HQ*cR*IR*cR*lQ&7*$pI+ZM+oI+Ht+Ht+oI+ZM+sI+sI+sI+ZM+oI+ZM+sI+]P+`M+XA#Kx#Kx#Kx#pe#pe#pe#pe#Kx#Kx#Vv#Vv#Vv#4L#4L#4L#gY#gY#H6@H6@H6@H6@L@@L@@=9@0=@0=@0&@4 @ny+ny+*>+0G+ZK+Q)@Q)@ZK+lX+Q)@t;@9G+ZK+t;@t;@s;@Q)@s;@t;@5@>5@oX+qQ#<3@8l*5T@u(@]w*Sw*]w*>t*rn*;d*|q%BL$/I*/I*aG*xG*-Q*dR*'i*JR*fR*.P*KR*LR*MR*0{+8>.!].RJ*.o P~ 5v@0v#Sp#NR*zI*@:+CI#YH*u{@%' %' {y%{y%{y%{y%{y%{y%{y%{y%Y@${y%B#@3&$3&$`b&!D+y$$y$$xc+$(+T_+G|@Kh+Kh+Kh+$(+$(+$(+T_+T_+G|@G|@G|@Ai.1m.1m.dl.jy.jy.Ai.8`#dl.jy.]$@jy.dl.dl.q9+Ea+xc+:{+:{+:{+u]#u]#u]#u]#23+d #v]#v]#u]#';$';$d #6j+y$$|m./{ /{ /{ |m.*$@y$$y$$*$@*$@*$@*$@|m.T_+Ea+}f.bH@}f.NM+NM+}f.Bz$}f.}f.}f.}f.}f.}f.}f.}f.$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+{'$R~$R~$m|.d%$d%$m|.f+#V&${'$R~${'$V&$V&$m|.R~$Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Kh+G|@G|@G|@G|@T_+T_+T_+Ea+Ea+Ea+xc+$(+$(+$(+T_+xc+G|@Kh+T_+]! {! 5A.T_+[y+[y+[y+[y+[y+[y+[y+[y+Ov+Ov+Ov+Ov+Ov+Ov+Ov+Ov+[y+[y+[y+[y+%U.%U.%U.%U.J; J; J; |f.|f.[y+[y+[y+|f.|f.|f.|f.|f.|f.|f.|f.[y+%U.%U.%U.%U.|f.", "-H.l` R_ af.QB@af.g% g% *_ R_ -H.-H.R_ *_ g% &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ y% o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ y% 5% v% I> v% 5% 5% f% I> 4% ~% ~% 4% v% w4.fL.=] =5 .* .* 2% 2% .* .* * 2% U@ U@ m@ m@ U@ U@ 2% U@ U@ 2% 2% .* * fd fd 2% .* .* * * .* .* 2% .* .* .* .* .* .* .* .* U@ * 5[ * m@ {@ .* .o &5 l.)i+7v@A^.0c A^.7v@0c 0c A^.X_ X_ 7v@ l. l.g% QB@6v@6v@QB@QB@4=+@[+6v@6v@6v@6v@6v@6v@6v@6v@fL.fL.fL.w4.w4.a, a, a, w4.w4.w4.w4.w4.w4.w4.si si og og og og og og og C' C' C' C' C' C' C' C' L2 *L Zl rS C' C' og og fd 5[ }| >5 '5 '5 hu 34 G7 |x.;b.{_ {_ ;b.|x.|x.|x.|x.;b.;b.;b.{_ {_ {_ {_ {_ {_ ;b.;b.;b.;b.;b.|x.|x.O9.6}%6}%O9.|x.|x..o .o .o .o ;b.;b.a, a, s3.s3.$;&4I%l=&xx.9K.yd.M!.L!.^C.PK.-G.`X lX.2l*([.,!.M( 0g i .}r OC.]C+OR*PR*XC*m]@Tv*3B*3B*`H*iQ*wj$G}$q'@./%!_#Y<#Y<#!_#y[+d!@$>#dk@S)@W,@.*+!}@!}@!}@S)@S)@W,@W,@W,@>>+m~+m~+K[#M[#L[#RA$RA$L[#RA$RA$RA$RA$L[#M[#K[#*c$*c$*c$*c$]m$]m$]m$]m$=c$>b$Ms$Ms$Rj$Rj$4($c9$vp#fX+fX+fX+fX+fX+fX+fX+fX+fX+fX+fX+fX+fX+fX+fX+BO@BO@BO@BO@2R+2R+4G+4G+4G+5&@2 @2 @8G+8G+X.@;K@>K@5$@5$@4G+4G+4G+4G+5&@R,+5&@5&@4G+4G+5&@5&@R,+F@@F@@F@@F@@DD+DD+ZK+ZK+0G+0G+,B+,B+$B+$B+!w+$B+>B+lX+lX+lX+0G+0G+ny+ny+my+my+K@@K@@L@@L@@L@@L@@H6@H6@H6@H6@H6@H6@H6@H6@*9@*9@*9@H6@H6@a$@a$@a$@*9@)~#)~#)~#a&@P,@L@@0$@0=@0=@O)@O)@O)@O)@>B+>B+ZK+9G+*>+ny+0&@0=@P,@0$@P,@L@@0$@K@@4 @>B+0G+3 @y9#g[+CM@1T+^f#7P#D#$K^$zx$'Z#H{%kS$&D%}6%W8&.++rr%.B$(-+yR#UX. +@T,+#*%S,+o=#cp+9V@;(@.@#ar+dz@qd+Ce@gz@gz@I(%`l+HZ@8d+li+^f+Vg+Vg+=2+V4#id+F0+QR*RR*zH*||$9<$Iq#,5#J0#b($$f%{z*{I*SR*TR*UR*VR*WR*XR*YR*ZR*`R* S*.S*+S*@S*#S*$S*%S*&S**S*=S*-S*;S*$B*CA*Wf%Kc#Kc#6l#5l#+o#/O#X%$^$$Wy#Sy#@K#Vy#E7#1@$EC$EC$I~%I~%Fb+Fb+d8+d8+7q$In$-f+-f+Vl+Vl+YN#oq#Ey#oq#Wl+fi+/+@2$@ZA+1$@=m+&m+&m+IZ@IZ@{k+60#Pn#]/+Tt+}T+-w+;w+!w+|=@mX+0G+%!K@!K@>K@4G+4G+2R+CI+CI+4Z+gX+YK+w;@DD+mq@8V@6T+b$@j)+Q&+EB$48+%}@2r$d6$P6*A**pP&pP&~X$~X$>S*mw%=a*9f$,S*nk%et%sB%|g%'S*A %a`$S)$'5$4P$.O$$g>$g>$g>$9M&go%go%Pl$[V%[V%`u$)r$.~&@-&$E5&Ft$)r$)r$ v$ v$)r$)r$Ft$:n$:n$Ft$Ft$Ft$:n$`u$wo$Er%qQ$8S$;O$8S$8S$qQ$-O$5P$;O$8S$;O$>O$kQ$>O$-G$ot$Ju$&w$&w$&w$#-&{x${x$= ${r%(S&'K$2+*'K$_S&1+*rI+Ht+Ht+er+er+Ht+oI+oI+ZM+oI+oI+oI+oI+ZM+sI+Gt+XA#Kx#Kx#Kx#Vv#Vv#Vv#Vv#Kx#Kx#Vv#Vv#Vv#4L#4L#4L#gY#gY#gY#gY#H6@H6@H6@L@@a&@P,@Z.@Z.@K@@K@@my+;B+0G+ZK+Q)@Q)@ZK+lX+Q)@t;@9G+Q)@t;@t;@s;@Q)@s;@t;@Q,+:P+:P+T,@7=@wp#wp#eX+[ @[ @o7#o7#o7#eh$eh$7V@Xx$hm$WL$WL$WL$lF$lF$lF$iF$I$+-,$w-$5P#^R#^R#|P+Jq@1V#* +* +qQ#qQ#<3@8l*22+i<#Sw*Sw*pW$>t*rn*Nu@kE*lE*KN*KN*-G*QH*-Q*)S*!S*)|*~S*VH*1D%Rv.&`.G{@P; !].^v.]_ P~ 5v@MP*]n#{S*NR*7&+w{@YH*_|*>S%~h&{y%{y%{y%{y%{y%{y%{y%{y%Y@$B#@B#@3&$'W+`b&!D+y$$*$@$(+$(+$(+$(+$(+$(+$(+xc+xc+xc+xc+$(+$(+$(+T_+dl.Ai.1m.dl.jy.jy.Ai.8Y+Ai.q9+]$@jy.dl.Ai.q9+xc+Kh+US+';$';$';$';$d #d #US+d #:{+:{+d #';$';$u]#*$@|m./{ /{ /{ |m.*$@y$$*$@*$@y$$y$$y$$y$$6j+Ea+$(+bH@bH@}f.cI+NM+l7 bH@}f.}f.}f.}f.}f.}f.}f.}f.$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+R~$f+#f+#{'$d%$RO+V&${'$V&${'$f+#R~$m|.V&$m|.R~$xc+xc+xc+xc+xc+xc+xc+xc+T_+T_+T_+T_+G|@G|@G|@G|@5A.5A.Ea+Ea+Ea+xc+xc+xc+G|@$(+xc+Ea+Ea+5A.]! {! %U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.GA+GA+GA+GA+GA+GA+GA+GA+r4@r4@r4@GA+GA+Pj+Pj+Pj+|f.|f.|f.|f.|f.|f.|f.|f.|f.|f.[y+%U.[y+[y+", "-H.l` -H.g% af.g% *_ *_ *_ R_ R_ R_ R_ *_ *_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ t% y% o^ o^ o^ o^ o^ o^ o^ -^ -^ -^ -^ -^ -^ -^ -^ v% v% I> v% v% v% v% I> 5% %% %% 4% v% fL.I> u% o3 .* .* .* .* .* .* .* 2% 2% U@ U@ U@ U@ 2% 2% .* .* .* * * fd fd 5[ .* .* .* .* .* .* .* .* .* .* .* .* .* .* .* .* 2% * fd .* U@ m@ .* ac &5 l.)i+7v@A^.0c A^.7v@0c A^.X_ 7v@ l.)i+#y##y#QB@6v@@[+6v@4=+QB@6v@@[+6v@6v@6v@6v@6v@6v@6v@6v@w4.a, a, a, a, a, a, a, w4.w4.w4.w4.w4.w4.w4.si si og og og og og og og C' C' C' C' C' C' C' C' {2 L2 *L *L og C' C' C' pj pj >5 }| }| >5 hu '5 N/.|x.|x.;b.;b.|x.|x.O9.;b.;b.;b.;b.;b.;b.{_ {_ W_ W_ {_ {_ ;b.|x.|x.O9.O9.O9.O9.6}%6}%O9.O9.O9..o .o .o .o ;b.;b.a, a, ;H.s3.$;&4I%l=&l=&M}.yd.yd.L!.^C.[M@1P*`X lX.oP*r).sJ M( .D+GQ+Ac+]S*Uz ^z$_D*SP*m]@$P*Tv*Tv*BX&xH*S&$p1@L$*ZO@{R@{R@Y<#y[+y[+d!@$>#dk@S)@W,@W,@!}@!}@!}@S)@S)@W,@W,@W,@K[#K[#M[#L[#RA$RA$Zz$Zz$L[#L[#RA$RA$RA$L[#L[#L[#*c$*c$*c$*c$]m$]m$]m$]m$>b$>b$Rj$Rj$09$09$4($_8$vp#fX+fX+fX+fX+fX+fX+fX+gX+gX+gX+gX+gX+gX+gX+gX+fX@fX@fX@fX@CI+CI+5&@5&@5&@5&@5G+5G+X.@X.@X.@-K@)K@jX+jX+5$@4G+4G+5&@5&@5&@5&@5&@5&@5&@5&@5&@5&@F@@F@@F@@F@@DD+DD+ZK+ZK+>B+>B+K)@K)@~w+~w+dB@~w+P)@ZK+ZK+lX+>B+0G+4 @4 @_w+_w+e^@e^@0$@0$@0$@0$@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@a$@a$@b&@b&@b&@*9@*9@)~#)~#a&@P,@P,@P,@0=@0=@O)@O)@O)@O)@>B+>B+ZK+9G+*>+*>+0&@0=@P,@0$@a&@L@@e^@ny+O)@P)@lX+x)+)_#ov$@#$IK$`&+/ %HK$1)#rV$rV$kS$)Q#oM%]I$^S*6R+6c#(-++h+t##@@#@@##*%[f+o=#(K@9V@FM@;(@.@#ar+c$@d&@[$@~7@}$@Yl+Yl+ o+2P#|/#(6+Of$=2+V4#~|+Gy#F0+/S*(S*||$-o#Iq#P7#)5#^5#(e%$f%EA*qO*Oz*4G*_S*:S*5#5l#H_$/O#^$$^$$Wy#Wy#@K#UY#|@$P{$EC$CC$I~%_O#:O#:O#d8+d8+7q$In$-f+-f+Vl+Vl+YN#oq#Ey#lc#fi+ir+YA+2$@{/+:k+~k+&m+[w+IZ@Zn+X+$60#4=@]/+I6@ur+-w+up+)w+}=@P,+0G+K@4G+4G+2R+CI+CI+fX+gX+2 @w;@DD+k#$9$@J@@_T+e~+kR+zP$x=@;]@2r$}b${D*qo$DP*DP*k9*,W$>S*bS*cS*dS*%v%$v%et%yi%k6%eS*1P$O$%M&%;5$m7$+O$'O$EJ$Ri$>/+>/+>/+Ri$Ri$Ri$Ri$_V$_V$Qp$Rp$Rp$Rp$)E*Np$wo$4U&vo$nt$nt$vo$`u$Ew$5c$5c$g>$g>$g>$g>$g>$g>$9M&go%ho%9M&_n$_n$:n$)r$#-&PI&)O$!x$@F$!E$xI$-k$+r%Z4@41@41@[!$[!$7)$7)$[!$[!$7)$6)$6)$W>$-'$-'$Ft$)r$)r$ v$ v$)r$)r$Ft$`u$:n$Ft$Ft$Ft$:n$`u$4U&Er%qQ$qQ$qQ$-O$-O$rn%rn%HH$8S$qQ$8S$5P$>O$5P$im%:V$$w$&w$#w$&w$.O${x$yV#qH&19@X=&cc@_S&fK@(S&ZM@5X+:o+:o+:o+er+er+Ht+Ht+Ht+Ht+Ht+oI+oI+ZM+ZM+nI+4v#Kx#Kx#Vv#4L#4L#3L#3L#Kx#Kx#Vv#Vv#Vv#4L#4L#4L#gY#gY#gY#gY#H6@H6@H6@H6@L@@L@@K@@K@@e^@e^@_w+_w+0G+ZK+Q)@Q)@ZK+lX+Q)@t;@lX+Q)@t;@t;@s;@ZK+Q)@|V+:P+:P+T,@7=@7=@wp#eX+eX+[ @o7#o7#o7#eh$eh$eh$gX@Qm#hm$WL$WL$WL$lF$lF$lF$iF$I$+-,$w-$5P#^R#|P+EA#RS#1V#* +* +qQ#qQ#<3@A]%U^@jz*Sw*Sw*pW$pW$:u*tw*kE*lE*BL$BL$KX%QH*hT%)S*fS*gS*hS*iS*bQ*jS*P,%r< & I(.QL+ll./D.N}._W%m;+NR*aR#@:+w{@YH*_|*>S%>S%{y%{y%{y%{y%{y%{y%{y%{y%3&$`b&`b&'W+'W+`b&!D+y$$|m.T_+$(+$(+xc+xc+Ea+Ea+Ea+Ea+Ea+Ea+xc+xc+xc+xc+q9+dl.1m.Ai.q9+jy.dl.1m.Ai.q9+jy.q9+dl.Ai.dl.xc+7P.23+23+US+';$';$d #d #US+d #:{+:{+d #';$d #u]#/{ /{ /{ |m.|m.*$@y$$y$$*$@*$@y$$y$$6j+;~ ;~ 'g@G|@aH@bH@l7 cI+cI+cI+l7 }f.}f.}f.}f.}f.}f.}f.}f.$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+R~$f+#35+{'$d%$RO+RO+V&$m|.R~$f+#R~$m|.m|.{'$f+#T_+T_+T_+T_+T_+T_+T_+T_+xc+xc+$(+T_+T_+G|@Kh+Kh+Ea+Ea+xc+xc+xc+xc+xc+xc+G|@T_+T_+$(+xc+5A.]! {! %U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.%U.Pj+GA+GA+GA+GA+r4@r4@r4@GA+GA+GA+Pj+Pj+,8+,8+,8+|f.|f.|f.|f.|f.|f.|f.|f.J; J; |f.[y+[y+[y+", "-H.l` -H.*_ g% *_ R_ R_ R_ *_ *_ *_ *_ R_ R_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ t% y% o^ o^ o^ o^ o^ o^ o^ -^ -^ -^ -^ -^ -^ -^ -^ I> v% v% v% v% I> v% v% v% f% 4% 5% v% v% f% ^{ o3 .* .* .* .* .* .* .* 2% 2% 2% 2% 2% 2% 2% 2% * * * * fd fd fd fd .* .* .* .* .* .* .* .* .* .* .* .* .* .* .* .* .* * * .* U@ U@ .* ed &5 l.)i+7v@A^.0c A^.7v@A^.A^.X_ 7v@ l.#y##y#g~#QB@6v@@[+@[+4=+QB@4=+@[+6v@6v@6v@6v@6v@6v@6v@6v@a, a, a, a, a, a, a, w4.w4.w4.w4.w4.w4.w4.w4.si si og og og og og og og C' C' C' C' C' C' C' C' L2 L2 L2 *L p: og C' _y `Y pj >5 }| :] }| hu '5 N/.|x.|x.;b.;b.|x.|x.O9.{_ {_ ;b.;b.;b.;b.;b.;b.W_ W_ {_ {_ ;b.|x.|x.O9.6}%O9.O9.O9.O9.O9.O9.6}%.o .o .o .o ;b.;b.a, a, ;H.s3.QI.$;&4I%l=&M}.8:.8:.U>.sF.c+#wH.2P*PP*Q|*r).N) ! .oM#Ab [B*F: Fg%q2%kS*]r*lS*ok#$P*$P*5u*sz*o*&ND@hk*p1@ij*ij*{R@y[+d!@A($$>#dk@!}@S)@W,@!}@!}@!}@S)@S)@W,@W,@W,@K[#M[#M[#L[#RA$Zz$Vy$Vy$L[#L[#L[#L[#L[#L[#RA$RA$*c$*c$*c$*c$]m$]m$]m$]m$>b$>b$Rj$Rj$09$09$4($_8$hX+gX+gX+gX+gX+gX+gX+gX+CI+CI+CI+CI+CI+CI+CI+CI+fX@fX@fX@fX@CI+CI+5&@5&@5&@5&@5G+5G+X.@X.@X.@-K@)K@jX+5$@4G+4G+5&@5&@R,+5&@5&@5&@5&@5&@5&@5&@5&@F@@F@@F@@F@@DD+DD+ZK+ZK+>B+>B+K)@K)@~w+~w+dB@~w+P)@ZK+ZK+lX+>B+0G+4 @4 @_w+_w+e^@e^@0$@0$@0$@0$@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@H6@a$@a$@b&@b&@b&@H6@H6@a$@a$@0$@L@@L@@L@@0=@0=@O)@O)@O)@O)@>B+>B+ZK+9G+*>+*>+0&@0=@P,@0$@a&@L@@e^@ny+O)@P)@lX+x)+J:+h[+v,$v4#`&+/ %HK$u-$rV$B;@)=%)Q#}6%mS*nS*sF%k[++h+JZ@f,$GM@@@#[f+)}@I_@I_@FM@FM@.@#.@#ar+n;@,i#W-$]R#]R#Yl+`l+5v#1P#|/#]f+Of$=2+,f+~i#Gy#F0+mR*{$$Lc#Oc#;5#;o#!5#]5#T0#/e%{z*yF*5G*qH*oS*pS*Vi#qS*rS*sS*tS*.Q*uS*vS*wS*xS*yS*zS*NC*AS*BS*CS*[J*6B*cN*cN*V7#R0#>5#=5#G_$gs%^$$^$$Wy#Wy#|T#5V#|@$P{$EC$CC$I~%_O#:O#:O#d8+d8+7q$In$-f+-f+Vl+Vl+Wl+oq#W1#lc#Xl+ir+dy+2$@_k+:k+!k+~k+IZ@Zn+#m+3V#60#4=@p=$e0#VH@-w+-w+vD+ED+P,+0G+Q,+2T+kX+,K@[H#!K@!K@>K@4G+4G+2R+CI+CI+fX+2R+2 @R)@,T@k#$9$@J@@}T+N0+kD+&-+S;@%}@E5&}b$^n$6u$x.%bR*qP&fP*sP&bS*=a*DS*,S*ES*yi%>B%v0%ZN$T5%Z=$Y'$v8$'t$~x$,O$BJ$Ri$>/+>/+>/+Ri$Ri$Ri$Ri$+F$+F$;r$Qp$Rp$Rp$Np$Np$4U&4U&vo$vo$vo$vo$`u$`u$}b$}b$g>$g>$g>$g>$g>$g>$9M&go%/n$P6*:D$:D$4U&Ju$~x${,&0S$!x$mK$xI$xI$@F$+r%Z4@41@41@[!$[!$7)$7)$[!$[!$7)$6)$6)$W>$-'$-'$Ft$)r$)r$ v$ v$)r$)r$Ft$`u$`u$:n$:n$:n$`u$Ew$-r$-O$+o%+o%pQ$pQ$pQ$+o%+o%lQ$6P$oR$6P$kR$FS*kR$;O$:V$Ld$#w$7m@#w$_a@yV#0X#Y4@K<@MU#X4@|T@/a@XH@29@:R+km+:o+:o+er+er+Ht+Ht+Ht+Ht+oI+oI+ZM+ZM+ZM+dr+4v#Kx#Kx#Vv#4L#4L#3L#3L#Kx#Kx#Vv#Vv#Vv#4L#4L#4L#4L#4L#gY#gY#gY#gY#H6@H6@0$@0$@0$@0$@e^@e^@e^@_w+0G+ZK+Q)@Q)@ZK+lX+Q)@t;@lX+s;@R1#R1#Q)@ZK+ZK+|V+T,@7=@7=@wp#wp#eX+} @} @o7#o7#o7#eh$eh$eh$[|$gX@Qm#hm$WL$WL$WL$lF$lF$lF$iF$I$+-,$w-$^R#|P+EA#Ka%RS#>5@p}@p}@aa@aa@:3@A]%i<#jz*Sw*]w*pW$pW$EP*]}*$F*%F*%F*%F*GS*QH*HS*IS*JS*KS*LS*PN*)2%~^$P,%6: &o.MS*):+y{ P~ >H.NS*m;+zI*7&+0J*CI#R4%ps+x*$x*${y%{y%{y%{y%{y%{y%{y%{y%{y%!D+!D+'W+'W+!D+`b&y$$/{ T_+T_+$(+xc+Ea+Ea+5A.Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+jy.dl.Ai.Ai.q9+jy.q9+Ai.Ai.dl.jy.q9+Ai.1m.dl.$(+Kh+US+US+';$d #u]#u]#u]#';$u]#:{+u]#';$US+d #:{+Bj.`b&`b&B#@{y%{y%'W+'W+{y%{y%'W+'W+3&$Y@$Y@$'g@Kh+bH@}f.l7 cI+l7 cI+cI+}f.}f.}f.}f.}f.}f.}f.}f.$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+{'$f+#35+R~$V&$RO+RO+d%$m|.R~$f+#f+#{'$m|.{'$f+#T_+T_+T_+T_+T_+T_+T_+T_+xc+xc+xc+$(+T_+G|@G|@G|@T_+T_+$(+$(+$(+$(+$(+$(+xc+Kh+y4&7P.xc+]! 5A.xc+%U.%U.%U.%U.%U.%U.%U.%U.[y+[y+[y+[y+[y+[y+[y+[y+Pj+hS.=; =; xM+,M+,M+,M+=; =; =; hS.hS.*; *; ,8+|f.|f.|f.|f.|f.|f.|f.|f.J; J; J; |f.[y+%U.", "-H.l` -H.*_ g% R_ -H.-H.R_ *_ g% g% *_ R_ -H.&_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ t% y% o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ o^ I> f% 5% 5% v% I> v% 5% I> f% 5% 5% f% v% 5% &- Y_ .* .* * * .* .* 2% U@ 2% .* .* .* .* 2% U@ * * * * * * * * * .* .* 2% 2% .* .* * .* .* .* .* .* .* .* .* * .* .* 2% 2% 2% .* =5 &5 l.)i+7v@A^.0c A^.7v@X_ X_ X_ 7v@ l.)i+)i+)i+QB@6v@@[+6v@QB@af.QB@4=+6v@6v@6v@6v@6v@6v@6v@6v@a, a, a, w4.w4.fL.fL.fL.w4.w4.w4.w4.w4.w4.w4.si si og og og og og og og C' C' C' C' C' C' C' C' rS Zl *L *L p: og C' _y pj ti }| :] :] }| d7 >5 G7 |x.;b.{_ {_ ;b.|x.|x.{_ {_ {_ ;b.;b.;b.|x.|x.{_ {_ {_ ;b.;b.;b.;b.;b.6}%O9.|x.|x.|x.|x.O9.6}%.o .o .o .o ;b.;b.a, a, 5v@;H.QI.$;&4I%4I%)1.8:.wx.U>.sF.{$+15*2P*PP*OS*lg.H! {] LI#z*@PS*&h.Yt*{r*dl*g:@!m%27*yC.pt*$P*CE*gk*QS*vX@:-@RI&(=$ij*./%d!@A($$>#dk@!}@S)@S)@!}@!}@!}@S)@S)@W,@W,@W,@K[#K[#M[#L[#RA$Zz$Zz$Vy$L[#L[#M[#M[#M[#L[#RA$Zz$*c$*c$*c$*c$]m$]m$]m$]m$=c$>b$Ms$Ms$Rj$Rj$4($c9$hX+gX+gX+gX+gX+gX+gX+gX+]-+]-+]-+]-+]-+]-+]-+]-+BO@BO@BO@BO@2R+2R+4G+4G+4G+5&@2 @2 @8G+8G+X.@;K@YK+5&@5&@5&@5&@R,+R,+R,+4G+5&@5&@R,+R,+5&@5&@4G+F@@F@@F@@F@@DD+DD+ZK+ZK+P)@P)@T##T##iy+iy+sD@iy+>B+lX+lX+lX+0G+0G+ny+ny+_w+_w+e^@e^@0$@0$@0$@0$@H6@H6@H6@H6@H6@H6@H6@H6@*9@*9@*9@H6@H6@a$@a$@a$@b&@b&@-(@-(@O,@0$@L@@L@@0=@0=@O)@O)@O)@O)@>B+lX+ZK+x)+3 @*>+4 @0=@P,@0$@P,@L@@e^@my+0G+lX+x)+{-+ov$i~+|T+<{#8]+C)+}x@s>#rV$B;@kS$)Q#oM%]I$^S*6R+k[+t##13@13@GM@ +@dZ.)}@ii@ii@b=#b=#.@#.@#ar+n;@Ce@gz@]R#]R#`l+jr+ii+li+ex$,d$=2+=2+,f+,f+id+p'$RS*!w*L0#Oc#;o#;o#{5#]5#E.$7i%{C**P*|H*SS*TS*US*DC*VS*WS*XS*YS*>A*ZS*`S* T*.T*+T*zS*@T*#T*$T*%T*U`#$B*cN*cN*V7#R0#6l#~C*G_$gs%^$$^$$Wy#Wy#|T#5V#E7#1@$EC$EC$I~%I~%Fb+Fb+d8+d8+7q$In$-f+-f+Vl+Vl+ @#YN#fi+fi++_++_+gi+1$@_k+]_+!k+~k+IZ@Zn+VA$3V#60#4=@60#e0#VH@-w+@k+rr+ED+P,+>B+2T+|V+v;@,K@,K@!K@!K@>K@4G+4G+2R+CI+CI+gX+CI+2 @R)@,T@k#$8&@e^@}T+Mb+Ln+$g>$g>$g>$Ol$9M&/n$P6*:D$_n$wo$vo$Qp$A)&0S$!x$mK$xI$SG$Qi$+r%Z4@41@41@[!$[!$7)$7)$7)$7)$6)$6)$6)$6)$W>$W>$Ft$)r$)r$ v$ v$)r$)r$Ft$`u$`u$`u$`u$Ew$,t$m7$bp$-O$pQ$pQ$pQ$pQ$+o%6P$6P$kR$mQ$6P$mQ$FS*am$FS*HH$Ri$xd%7m@/]+7m@=/+0X#^]+|1@dE#v^@}1@(a@&3@0x@[1@F,@km+:o+er+Ht+Ht+Ht+Ht+Ht+oI+ZM+sI+sI+sI+sI+dr+XA#Kx#Kx#Kx#Vv#Vv#Vv#Vv#Kx#Kx#Vv#Vv#Vv#4L#4L#4L#4L#4L#gY#gY#gY#gY#H6@H6@b&@O,@0$@0$@e^@K@@K@@my+0G+ZK+Q)@Q)@ZK+lX+Q)@t;@ZK+s;@R1#R1#Q)@ZK+ZK+2T+T,@7=@7=@wp#eX+} @} @} @o7#o7#eh$eh$eh$eh$[|$gX@Qm#hm$WL$WL$WL$lF$lF$lF$iF$I$+-,$5P#^R#EA#Ka%o}@}7@>5@p}@p}@aa@aa@:3@u.*jz*{b#Sw*]w*pW$pW$.z*~E*KN*0F*0F*%F*KX%=T*JQ*fS*JS*KS*h2.CO*=H*@.#-T*F=.;T*qz.)L.x8. F.;H.^0.$b#7&+@:+}d.CI#R4%ps+u3$u3${y%{y%{y%{y%{y%{y%{y%{y%B#@>n.>n.{y%'W+!D+`b&y$$/{ G|@T_+T_+$(+xc+xc+xc+xc+xc+xc+Ea+Ea+Ea+5A.5A.]$@q9+Ai.Ai.q9+jy.jy.dl.1m.dl.q9+q9+Ai.1m.Ai.$(+T_+d #d #d #u]#u]#u]#u]#d #u]#:{+d #US+US+d #v]#!D+`b&B#@{y%{y%{y%B#@B#@{y%{y%'W+'W+'W+'W+3&$6j+Kh+}f.cI+cI+l7 }f.}f.cI+}f.}f.}f.}f.}f.}f.}f.}f.$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+m|.R~$35+f+#m|.d%$d%$V&${'$f+#35+f+#{'$m|.R~$35+T_+T_+T_+T_+T_+T_+T_+T_+xc+xc+$(+$(+$(+$(+T_+T_+G|@G|@T_+T_+T_+$(+$(+$(+]! G|@iS.y4&$(+5A.Ea+G|@|f.|f.|f.|f.|f.|f.|f.|f.[y+[y+[y+[y+[y+[y+[y+GA+Pj+hS.=; xM+,M+,M+b%@b%@xM+xM+xM+=; =; hS.hS.hS.|f.|f.|f.|f.|f.|f.|f.|f.|f.J; J; J; |f.[y+", "-H.l` -H.R_ *_ R_ l` -H.R_ *_ g% g% *_ R_ -H.&_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ t% y% o^ o^ o^ o^ o^ o^ o^ 6[ 6[ 6[ 6[ 6[ 6[ 6[ 6[ v% 5% %% 4% f% v% f% %% f% 5% 4% 5% v% I> v% Q_ t% 2% * fd fd * 2% U@ U@ 2% .* * * .* 2% U@ * * * * .* .* .* .* fd * 2% U@ U@ 2% * fd .* .* .* .* .* .* .* .* * .* 2% 2% 2% .* * =5 &5 l.)i+7v@A^.0c A^.7v@X_ X_ X_ 7v@7v@7v@7v@7v@QB@4=+6v@4=+g% *_ g% QB@6v@6v@6v@6v@6v@6v@6v@6v@w4.w4.w4.fL.fL.I> I> I> w4.w4.w4.w4.w4.w4.w4.si si og og og og og og og C' C' C' C' C' C' C' C' Ah.7e.rS Zl og og C' _y fd 5[ :] :] }| }| d7 :] $w ;b.{_ W_ W_ {_ ;b.;b.W_ {_ {_ {_ ;b.|x.|x.|x.;b.;b.;b.;b.;b.{_ {_ {_ O9.|x.;b.{_ {_ ;b.|x.O9..o .o .o .o ;b.;b.a, a, 5v@;H.91+$;&4I%4I%)1.8:.wx.U>.sF.{$+15*2P*PP*OS*)>%H! P( Z[.K8 &X.y1 u<+d/%q2%g<@&P@27*>T*^r*>B#dj*W)*QS*QS*/8%wq*RI&ij*./%A($A($$>#dk@!}@!}@S)@!}@!}@!}@S)@S)@W,@W,@W,@m~+m~+K[#M[#L[#RA$Zz$Zz$L[#L[#M[#K[#M[#L[#Zz$Vy$*c$*c$*c$*c$]m$]m$]m$]m$%u$%u$nw$nw$Ms$Ms$a8$b8$_P+2R+2R+2R+2R+2R+2R+2R+CI+CI+CI+CI+CI+CI+CI+CI+7V@7V@7V@7V@gX+gX+5$@5$@5$@5$@YK+YK+R)@R)@R)@5G+;K@yM@yM@yM@R,+R,+R,+R,+5$@4G+R,+yM@yM@R,+4G+5$@F@@F@@F@@F@@DD+DD+ZK+ZK+P)@P)@T##T##iy+iy+sD@iy+0G+9G+9G+3 @*>+*>+my+my+(w+(w+J@@J@@O,@O,@O,@O,@H6@H6@H6@H6@H6@H6@H6@H6@)~#)~#)~#*9@*9@H6@H6@H6@a$@b&@-(@-(@b~@0$@L@@P,@0=@0=@O)@O)@O)@O)@>B+lX+ZK+x)+3 @*>+4 @0=@P,@0$@L@@0$@J@@_w+*>+9G+>T@@N+g[+->+*6$N;$(R#f&@l7#r4#'Z#{v$kS$6Q%oM%]I$W8&gq#6c#+h+f,$JZ@UX.D~$T,+J3+ii@ii@b=#b=#.@#.@#ar+n;@[$@8L#]R#6d+,T*^d$Mn#Qn#Zb$Wg+;p$Sg+j0#Hy#!l#of#'T*[y*Oc#Qc#;o#;o#{5#]5#X`#7i%{C*yF*|H*SS*oS*)T*!T*~T*{T*]T*^T*/T*(T*_T*:T*,E*[O*X#>X#,|+Ty#'$$v0#A)$A)$E_$8,$qD$qD$d8+d8+7q$In$-f+-f+Vl+Vl+Mg+ @#Xl+ei+&k+&k+Xg+_k+-2+]_+!k+~k+IZ@Zn+VA$pB$60#4=@60#XN#o;@-w+@k+&>+Rt+P,+>B+2T+S,@v;@,K@)K@!K@!K@>K@4G+4G+2R+CI+CI+2R+CI+5G+R)@,T@E+$8&@K@@_T+Mb+-'@l;@S;@E4@}b$5c$]n$LU$DP*bR*ZS&qP&[T*[T*}T*&T*|T*Mw$n7%il%Vk%M$$wy%N$%[5%N&%#4$ot$,O$BJ$jk%(]+(]+(]+6l$6l$6l$6l$!x$!x$ot$;r$Qp$Rp$Np$Np$vo$vo$4U&4U&4U&4U&:n$:n$|s$|s$V>$='$='$g>$g>$g>$R6*Pl$P6**G$_n$[V%-r$4U&`Q%H#*0S$!x$mK$xI$Aw$$F$+r%Z4@41@41@[!$[!$7)$7)$W>$W>$6)$6)$6)$6)$7)$7)$Ft$)r$)r$ v$ v$)r$)r$Ft$`u$`u$`u$Ew$,t$'t$,5$t9$rn%pQ$=O$pQ$+o%6P$lQ$FS*FS*lQ$mQ$lQ$am$0m$am$wI$>/+Jg+/]+Ab+/]+-_+^]+w:+dE#*f+}1@s:+J<@Lg+|}@hr+;'@km+er+oI+ZM+ZM+oI+oI+Ht+oI+sI+{P+]P+{P+sI+nI+XA#Kx#Kx#Kx#pe#pe#pe#pe#Kx#Kx#Vv#Vv#Vv#4L#4L#4L#4L#4L#4L#4L#gY#gY#gY#H6@a$@a$@0$@L@@L@@P,@Z.@ny+0G+ZK+Q)@Q)@ZK+lX+Q)@t;@ZK+t;@R1#R1#Q)@lX+ZK+2T+T,@wp#wp#wp#} @} @ui$ui$o7#o7#eh$eh$[|$[|$[|$gX@Qm#hm$WL$WL$WL$lF$lF$lF$iF$iF$-,$5P#|P+Ka%o}@=1#}7@>5@p}@_3@<3@<3@8l*u.*{b#N%#Sw*]w*>t*pW$.z*^I*DF*XI*sI*0F*-G*[K*dR*1T*2T*3T*4T*5T*6T*7T*2D+Dh%wP ,W+!5 x8.6}%s3.NS*$b#aR#7&+0J*CI#YH*u{@X@$X@${y%{y%{y%{y%{y%{y%{y%{y%B#@;n.>n.{y%{y%!D+`b&y$$/{ G|@G|@T_+T_+T_+T_+T_+$(+$(+$(+xc+xc+Ea+Ea+Ea+6g+jy.Ai.Ai.q9+jy.jy.q9+1m.dl.q9+dl.1m.8Y+Ai.$(+$(+u]#d #d #d #d #';$';$d #u]#u]#d #US+US+u]#v]#`b&B#@{y%'W+'W+B#@`b&!D+'W+'W+{y%{y%{y%{y%B#@|m.G|@l7 ko.NM+}f.aH@bH@l7 }f.}f.}f.}f.}f.}f.}f.}f.$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+d%$m|.f+#f+#{'$V&$V&$m|.{'$f+#35+35+R~${'$R~$35+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+xc+xc+xc+T_+T_+T_+$(+xc+xc+xc+Ea+]! Ea+T_+G|@G|@T_+xc+Ea+J; J; J; J; J; J; J; J; [y+[y+[y+[y+[y+[y+[y+GA+Pj+hS.=; xM+,M+b%@;b#;b#,M+,M+,M+xM+xM+=; =; =; |f.|f.|f.|f.|f.|f.|f.|f.[y+[y+J; J; J; |f.", "-H.l` l` R_ *_ -H.m` -H.R_ *_ h% g% i% R_ -H.5% &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ t% y% o^ o^ o^ o^ o^ o^ o^ L) L) L) L) L) L) L) L) v% 4% ~% %% f% v% 5% ~% 4% %% ~% 4% v% fL.fL.=] Q_ o^ * fd fd * 2% U@ U@ 2% * fd fd * 2% U@ .* .* .* .* .* .* .* 2% fd * 2% U@ U@ 2% * fd .* .* .* .* .* .* .* .* fd .* 2% 2% .* * * o3 &5 l.)i+7v@A^.0c A^.7v@7v@7v@7v@X_ X_ X_ X_ X_ af.4=+6v@QB@g% R_ *_ af.6v@6v@6v@6v@6v@6v@6v@6v@w4.w4.fL.fL.I> v% v% f% w4.w4.w4.w4.w4.w4.w4.si si og og og og og og og C' C' C' C' C' C' C' C' <*&a:@tS sS si si Es )O o3 =5 4! K> b, b, La *5 24 {_ H{ &5 G{ W_ 24 {_ H{ W_ 24 {_ $w |x.G7 |x.O9.|x.|x.;b.{_ {_ W_ W_ |x.;b.{_ W_ W_ {_ ;b.|x..o .o .o .o ;b.a, a, Vl.5v@[3+91+$;&$;&4I%)1.wx.o;.^C.sF.{$+1K*2P*mX.OS*j=&H! s] MI#9`@Rf UL+^i.Fg%wu.p]%>2%EA%8T*bo*(t*ej*W)*QS*QS*/8%gj*wq*:-@q'@q'@q'@tm#v<@J.+!}@!}@!}@!}@!}@S)@S)@W,@W,@W,@.*+m~+K[#K[#M[#L[#RA$RA$L[#L[#M[#K[#M[#L[#{m$dw$*c$*c$*c$*c$]m$]m$]m$=c$5F$%u$Hs$Hs$nw$,H$a8$b9$_P+2R+2R+2R+2R+2R+2R+2R+2R+4G+4G+4G+4G+4G+4G+4G+fX+nZ@fX+fX+fX+fX+jX+jX+jX+5$@>K@>K@YK+YK+R)@2 @h[+U0+h[+r8+yM@R,+R,+R,+5$@4G+R,+yM@yM@R,+YK+>K@w;@w;@F@@w;@DD+DD+ZK+ZK+P)@P)@0~@0~@T##iy+T##T##0G+3 @3 @3 @;B+;B+_w+_w+(w+(w+J@@J@@O,@O,@O,@O,@L@@L@@L@@L@@L@@L@@L@@L@@=9@=9@=9@a&@a&@P,@P,@P,@0$@O,@b~@b~@O,@e^@Z.@0=@0=@O)@9=@mq@mq@mq@mq@x;@DD+x)+3 @*>+4 @0=@P,@Jl+0$@O,@6T+(w+;B+9G+3 @g[+r8+|T+qw$y4#1r$HK$]8$~v${v$@B$@B$kS$o)%/1&hZ.|7$K[#yR#JZ@ty#D~$x4#J1#cZ.W_@hi@) +5 @.@#> +ar+n;@mc@(l%8L#I(%Kt+}w+*m+&l#Zb$Jn$Tg+Sg+z7#jf#s0#vc#{$$N0#Oc#Qc#Oc#Rc#P0#S0#jx*$B*uM*2F*9T*/R*0T*aT*bT*cT*dT*eT*HC*fT*gT*hT*iT*jT*kT*lT*mT*nT*'I#nR*UP#-l%^r%-f%Z7#R0#'5#2|%4|%]l##I#s=$!X#>X#>X#>X#w.$2@$)$$v0#E7#E7#E_$qD$)6+d8+7q$In$-f+-f+Vl+Vl+Lg+Mg+ei+On+*k+@_+Sl+gi+-2+]_+!k+~k+IZ@Zn+%N+wV$60#4=@f0#XN#o;@-w+=w+Il+Rt+$N+lX+2T+v;@,K@,K@)K@>K@>K@>K@4G+4G+2R+CI+CI+2R+5&@R,+2 @!K@,T@^K@my+xp+f~+YM@Kn+Z5+g9@.9@_D$R6*{Y$LH%DP*qP&fP*_P*oT*pT*vP&qT*@8%Ah$$F%&Q*`N$K`$ -$z %+4%#4$#w$'O$mK$rh$rh$rh$rh$rh$OG%OG%OG%+O$!x$ot$;r$Qp$Rp$ZQ%ZQ%QG$vo$)E$4U&)E$4U&YS&:n$KG&Et$LG&V>$=r$g>$y+&y+&,E$'E$*G$*G$_n$[V%Or$wo$.O%~x$)O$!x$Ri$!E$V=&=L$WY%+r%L2&L2&M3&M3&4q&4q&Et$Et$E5&2r$2r$4q&M3&M3&Ft$Ju$Ju$&w$&w$Ju$Ju$Ft$`u$`u$Ew$1s$n7$f6$h6$L%%Es%Es%Es%D7*Fr%im%xV#,O$kQ$5P$HH$5P$0m$9m$0m$wV#>/+Jg+Ab+Ab+Ab+-_+w:+w:+m%$-k+-k+=k+Lg+Mg+Wl+gr+;'@:R+[R+rI+^P+ZM+^P+oI+oI+ZM+{P+]P+7h$]P+{P+nI+Lx#Kx#Kx#pe#yb#yb#L,@L,@Kx#Kx#Vv#Vv#Vv#4L#4L#4L#4L#4L#4L#4L#gY#gY#gY#H6@a$@0$@L@@L@@P,@a&@0&@4 @0G+P)@R,@R,@P)@lX+R,@t;@Q)@t;@Q1#R1#Q)@lX+lX+Q,+kX+kX+kX+wp#8=@} @U.@U.@[ @o7#o7#eh$eh$eh$eh$gX@~l$hm$WL$WL$WL$lF$lF$lF$iF$iF$-,$5P#|P+Ka%o}@=1#}7@* +_3@_3@p}@<3@8l*u.*{b#N%#N%#]w*S%~h&{y%{y%{y%{y%{y%{y%{y%{y%`b&;n.;n.B#@{y%!D+`b&'W+G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+$(+xc+xc+Ea+Ea+]! xc+G|@G|@$(+xc+]$@jy.1m.Ai.q9+dl.1m.8Y+Ai.q9+}f.{'$m|.m|.V&$d%$d%$RO+{'${'${'$V&$RO+d%${'$h]@|m.*$@y$$y$$y$$|m.Bj.h~ y$$y$$*$@*$@|m./{ /{ Bj.bH@ks@13+NM+}f.Bz$aH@}f.}f.}f.}f.}f.}f.}f.$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+>( V&$R~$f+#{'$m|.m|.{'${'$f+#35+35+R~${'$R~$35+xc+xc+xc+xc+xc+xc+xc+xc+T_+T_+T_+$(+xc+Ea+Ea+Ea+$(+$(+xc+xc+Ea+5A.5A.5A.5A.be+be+Ea+7P.oh.$(+be+P] P] P] P] P] P] P] P] [y+[y+[y+[y+[y+[y+[y+GA+Pj+hS.=; xM+,M+b%@;b#@G+b%@b%@b%@,M+,M+xM+xM+r4@|f.|f.|f.|f.|f.|f.|f.|f.%U.[y+|f.J; J; |f.", "|% $% $% $% &) 4% 4% j% j% j% $9.j% $9.j% j% I> v% 5% 4% 4% 5% v% I> %% %% 4% 4% 5% 5% 5% y% y% 6[ L) L) L) L) 6[ o^ L) o^ .^ p: p: .^ o^ L) f% 4% 4% f% fL.fL.f% ~% f% v% v% I> fL.fL.w4.si y% {2 -^ .^ p: p: og og 2% 2% +# +# +# +# +# +# 2% 2% 2% 2% 2% 2% 2% 2% 5[ 5[ fd fd * .* 2% 2% o^ -^ .^ p: p: -^ 6[ L) o^ o^ o^ o^ o^ 6[ 6[ Q_ %% 4% 5% f% I> fL.w4.w4.v% v% I> I> I> fL.fL.fL.4% v% w4.8H.8H.w4.v% 4% f% f% f% v% v% I> I> I> w4.w4.w4.w4.w4.w4.w4.w4.I> I> fL.fL.w4.w4.a, Es ac 5[ 5[ 5[ 5[ 5[ 5[ 5[ * fd 5[ ui ti ti ui Es B{$B{$B{$B{$8H.8H.8H.8H.n3 n3 H{ 24 $w $w bl+;5 Q5.G7 Q5.$w ;5 24 -5 H{ bl+G7 Q5.N/.U6.34.9$+Y1.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.Es Es si si fL.-J.l3 l3 WW.VW.4I%#k.#k.2%EA%^r*(t*CE*57*T3*/8%gk*57*gk*/8%KZ@ia@[c@%a@'>+<-+ki@ki@J.+ki@W,@.*+.*+.*+>>+W,@A0%A0%km$&c$&c$/a$pr%pr%(a$(a$4v$4v$^q$^q$,z*,z*]m$]m$]m$]m$=c$=c$=c$nw$Ms$Rj$bv$J$+%6$Rb$qn%c9$Qm#4Z+fX+gX+4G+4G+4G+5$@4G+YK+>K@>K@)K@,K@RQ@,K@5$@gX+5$@5$@5$@5$@5$@5$@5$@5$@5$@4G+4G+4G+2 @5&@CI+nq@]-+2R+fX+gX+R,+h[+5$@4G+YK+2 @2 @5G+8G+X.@w;@ZK+DD+ZK+ZK+ZK+ZK+ZK+Q)@ZK+9G+3 @*>+mX+P)@R,@R1#t;@Q)@lX+*>+;B+my+my+;m+&N+e^@K@@L@@0$@b~@X{@J@@J@@J@@e^@e^@K@@K@@K@@Z.@K@@K@@K@@e^@J@@J@@J@@|=@|=@0&@0=@0=@t<@m5$k#$^K@^K@7$@6$@6$@DO@DO@DO@Y]%DD+8$@0G+ W$#o%Rx#sr+[=@vI+Il+_w+;B+CD++:$re#I$+bN#Jn#]B+9T+A1#6Q%js$=i#=i#5V+FC$Yx%A1#km$_-+~I$Ql&!.$ (@ +@1z@U+$tD@c!@C,+9V@D,+> +N:$Qb+V;+![+di@R%$]7%:T#R.@LP#ii+Qc$Oj$ae$Nf$jf#qc#rc#R{$0v*S7#Bv*Zy*ni#BT*nw*CT*DT*'K*'K*ET*TF*FT*GT*HT*IT*JT*KT*LT*MT*NT*OT*PT*MH*QT*RT*ST*AQ*TT*)u#1o#0w#>G#8w#/5#{5#A7%UT*F4%I_$+o#+o#/O#DB#^$$^$$^$$gs%gs%gs%gs%^$$^$$q'$E7#}T#)6+7q$In$-l#:i#Ey#Tn#ed+Nn#df#h0#h0#F:+Sl+~/+t&@]/+e0#I6@Ob+^/+.B++B+=E#=E#=E#Y+$3k#<&@<&@Z.@Z.@P)@|#% @%)K@V.@5Z+zM@K #E@@5$@5&@R,+R,+5&@4G+R,+4G+5$@jX+)K@>K@YK+x)+#a@:w+=4+%q+,'@M3+C6@F5&Lp$gE*po$d#%LH%X=$pk$Lw$KU$ J%+j$Ea%Ea%7Z$H$%Z'$V.%kZ%VT*#&%;y$-/+-/+sV#'_+'_+'_+'_+'_+>/+>/+>/+-k$6l$_V$_V$(V$(V$vy%ZQ%QG$(n$io%ZW&io%(n$*G$:D$io%YS&{D*|b$]n$|b${D*P6*{D*=G$=G$=G$so$BT%,o$bp$bp$wo$#w$sQ$xe@ye@#F$6k@@-&WY%.r%.r%{x${x$ v$ v$ v$)r$)r$)r$ v$WY%* $y)&ot$'r$ZQ%Rp$Qp$;r$Rp$-r$wo$4U&4U&wo$1s$n7$f6$@4$Y!$z6@w^@Hu$Tp$>q${`# 7@#w$(V$D7*Fr%HH$kQ$am$wI$kK$yD$yD$'_+Jg+Ab+-_+w:+m%$TR#1=$;k+;k+Vl+YN#|}@ZM@7*$7*$7*$1+*J$*&Y%p.$@7@@7@Ip#49@0s#D`#YA#Lx#L,@pk+pk+!B+c&@gY#gY#G6@gY#s<@!B+!B+s<@gY#gY#gY#-_#-_#-_#-_#-_#-_#*9@*9@b&@O,@0$@e^@e^@K@@K@@K@@9=@9=@m5$m5$m5$E+$t!%E+$E+$E+$fm$fm$|#%>'% @%`{%w;@]K@ @%,K@)K@)K@,K@K #E@@4Z+4Z+4Z+4Z+M+#M+#M+#0N$Ks$Ls$!I$)H$!H$!H$-I$S!$k`%n>%l`%/R#T5++L+}7@^R#Y.+j9@.o+>5@p}@:3@:3@3h#)*&>2*>2*J9*J9*bf%iI%^I*3J*WT*uo*Yq*XT*YT*ZT*`T* U*.U*+U*@U*#U*$U*P+ C! PF+xj+sv%|r%,X@%U*c3+v5.I7.Q+&yE#z9.VD@Xw&z$$M]*-.%<:*TO&TO&TO&TO&TO&TO&3]&O4%3]&#d+<:*#d+{y%$(+}f.}f.bH@bH@bH@aH@aH@bH@bH@bH@bH@bH@bH@bH@bH@:{+:{+v]#v]#:{+u]#T_+G|@G|@G|@Ai.Ai.Ai.Ai.Di*P] O1.w]#)&+NU+yM+NU+)&+P1.NU+NU+NU+NU+NU+NU+NU+NU+Q] Ai.Ai.dl.q9+q9+jy.jy.dl.dl.dl.dl.dl.dl.dl.J; iy.b%@M<+6P.6P.M<+P] Q] P] P] Ai.Ai.Ai.Ai.>~ Ai.]$@]$@]$@]$@]$@]$@]$@]$@jy.jy.q9+q9+dl.Ai.Ai.Kh+$(+T_+T_+G|@G|@Kh+7P.7P.G|@G|@G|@G|@G|@G|@G|@G|@Kh+G|@G|@T_+$(+$(+xc+xc+Kh+Kh+G|@T_+$(+$(+xc+xc+5A.xc+$(+xc+5A.5A.Ea+$(+xc+xc+$(+$(+T_+G|@G|@Kh+}f.}f.}f.}f.}f.}f.}f.}f.l7 l7 }f.}f.bH@aH@aH@M<+YQ.=0+!:+!:+pz.pz.=0+hy.pz.=0+=0+!:+hy.hy.5H.GA+Ov+5A.Ea+xc+$(+T_+T_+G|@$(+$(+$(+$(+$(+$(+", "|% $% $% $% &) 4% 4% j% j% $9.$9.$9.$9.$9.$9.v% f% 5% 4% 4% 5% f% v% 4% 4% 5% 5% 5% f% f% y% y% 6[ L) L) L) L) 6[ o^ o^ o^ 6[ 6[ 6[ 6[ o^ o^ f% 5% 4% f% fL.fL.f% ~% 5% f% f% f% v% I> I> =] m3 {2 {2 {2 .^ .^ .^ .^ 2% 2% +# +# +# +# 9# +# +# 2% 2% 2% 2% 2% 2% 2% * * * * * * * fd o^ -^ .^ p: p: -^ 6[ L) o^ o^ o^ o^ -^ -^ -^ -^ f% f% f% v% I> fL.w4.w4.v% v% I> I> I> fL.fL.fL.f% v% fL.a, a, fL.v% f% 5% 5% f% v% I> fL.fL.w4.w4.w4.w4.w4.w4.w4.w4.w4.I> I> fL.fL.w4.w4.a, Es ac 5[ 5[ 5[ 5[ 5[ 5[ 5[ fd 5[ ui ti ti ti ti Es 8H.>H.>H.>H.>r+>r+>r+>r+7v@7v@X5 R6 R6 R6 ]b+]b+]n.]n.Q5.Q5.bl+bl+;5 ;5 Q5.Q5.Q5.Q5.]n.]n.]n.N/.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.Es Es si si -J.-J.l3 l3 VW.8v.#k.v4.v4.#k.U>.sF.^C.[M@[M@10*EO*pN*ak*cM*zT*:' ^@ dQ+DQ+&U*A1@gv We >3%R~%h_#>2%EA%bo*CE*Ok$gk*/8%/8%wq*gk*T3*/8%KZ@f>@^i@[&#%a@'>+'>+%a@J.+ki@W,@.*+.*+.*+>>+W,@A0%B%%km$&c$&c$/a$pr%pr%(a$(a$4v$4v$p4&p4&,z*,z*]m$]m$]m$]m$=c$=c$nw$nw$nw$Ms$4($bv$qn%qn%c8$b8$Qm#4Z+fX+gX+4G+4G+5$@5$@YK+YK+w;@!K@!K@]K@fm$]K@>K@5$@5$@5$@5$@5$@5$@5$@5$@5$@5$@4G+4G+4G+5&@CI+]-+nq@nq@fX@fX+fX+5&@r8+4G+4G+YK+2 @R)@8G+8G+8G+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+Q)@ZK+lX+9G+9G+lX+ZK+Q)@R1#s;@Q)@lX+*>+;B+my+my+&N+(w+e^@K@@L@@0$@O,@6T+e^@_w+_w+my+my+ny+ny+ny+my+my+my+_w+_w+_w+_w+_w+}=@}=@ny+4 @4 @O)@mq@mq@G@@G@@G@@6$@UR$CU$CU$CU$Z{%DO@I@@0G+Ku$Yp%hy+sr+)-+1]+g~+J$%6$c!*`]$6R+6X%[0%is$y]%]J$<>%T)@V_#@ +:-+hB@C)+RU#9)#!.$i~$1z@g)#H_%]o+Xv+n7#5i@M:$Ey*n;@E,+E,+V;+di@Ce@_9@6d+o/#as#A5$Jn$*U*Nf$pc#pc#=U*]R*_u*'c$Bv*-U*;U*>U*,U*'U*sK*zJ*)U*jL*!U*~U*{U*]U*^U*/U*(U*_U*:U*G#*K#(5##8#`7#b($es%:}%l}%l}%H_$gs%bi##I#s=$#I#G_$G_$G_$gs%bi#^$$q'$E7#}T#)6+In$In$-l#df#Ey#Rn#ed+~|+'%`{%qZ@V.@5Z+zM@K #E@@5$@5&@R,+R,+5&@4G+5&@4G+5$@jX+jX+5$@4G+=>+x)+[P+S.+*7@%q+U;@Zr+tk$}7&_;$Hw$d#%pP&LH%pk$qk$zv$_P%ff%#7%L*$Z=$M*$s*%9y%kZ%6U*z*%Nd$*/+x:+Jg+'_+'_+'_+'_+'_+'_+>/+>/+Ri$-k$+F$+F$_V$_V$(V$4U&to$io%r$'r$7U*8U*'r$;r$Rp$-r$wo$wo$wo$Ew$,t$n7$,5$U2$8=%%m%|M$U0%i=% 9@MU#dc@ 7@$w$_V$(V$im%5P$kR$CJ$5X#'_+'_+'_+Ab+Ab+Ab+=f+pF$W+$TR#-k+-k+1=$YN#&3@`H@W=&W=&W=&7*$o@*l@*&Y%J$*J$*0s#0s#0s#0s#$7@gh#yb#!B+a~@!B+c&@gY#G6@s<@gY#s<@!B+!B+c&@gY#gY#G6@gY#gY#gY#gY#gY#gY#H6@H6@O,@O,@e^@e^@e^@K@@K@@K@@be#be#be#u!%m5$t!%t!%t!%E+$E+$fm$fm$fm$fm$RQ@RQ@DD+fm$ @%RQ@]K@]K@,K@X>%E@@E@@E@@E@@4Z+4Z+4Z+8e#~l$!I$!I$)H$!H$-I$S!$S!$S!$k`%n>%l`%/R#T5++L+}7@|P+j9@7Z+<7@* +_3@8l*8l*3h#L#*:Y+:Y+J9*J9*44%UL%ox*3J*9U*uo*0U*aU*bU*cU*`T*B3.dU*eU*fU*|P*gU*Q+ Z~*Gc%N}.'C+vA*)Z%%U*ws&Yl@I7.qK#yE#z9.VD@Xw&z$$#d+TO&`E&3]&O4%O4%3]&3]&`E&3]&O4%3]&TO&#d+TO&{y%$(+}f.}f.bH@bH@aH@aH@aH@bH@bH@bH@bH@bH@bH@bH@m|.:{+q(#q(#q)@:{+u]#d #';$G|@G|@Ai.Ai.Ai.Ai.Di*P] YQ.hU*e #M'$M'$M'$>b#e #>b#>b#>b#>b#>b#>b#>b#>b#|f.|f.|f.J; J; J; J; J; J; J; J; J; J; J; J; 6P.iy.b%@b%@,M+6P.M<+P] Q] J; J; dl.dl.C! C! C! C! jy.jy.jy.jy.jy.jy.jy.jy.jy.jy.jy.jy.q9+q9+q9+q9+T_+T_+T_+T_+T_+G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+$(+$(+$(+$(+$(+T_+T_+T_+T_+G|@G|@G|@G|@5A.xc+$(+xc+5A.5A.Ea+$(+xc+xc+xc+$(+$(+T_+T_+T_+}f.}f.}f.}f.}f.}f.}f.}f.l7 }f.}f.}f.bH@aH@aH@)&+[e.JA.=0+!:+=0+=0+5H.n&+!:+!:+hy.hy.hy.hy.5H.GA+aH@G|@T_+$(+$(+xc+Ea+Ea+xc+xc+xc+xc+xc+xc+", "|% $% $% $% &) 4% 4% j% j% $9.$9.$9.$9.$9.$9.v% f% 4% %% %% 4% f% v% 5% 5% f% f% v% v% v% u% y% 6[ 6[ L) L) 6[ 6[ o^ -^ o^ [! C& C& [! o^ -^ f% 5% 5% f% I> I> f% %% 5% 5% 5% 5% f% f% f% u% m3 {2 {2 {2 o^ o^ o^ o^ 2% 2% +# +# +# +# 9# +# +# 2% 2% 2% 2% 2% 2% 2% U@ 2% 2% .* * fd 5[ 5[ o^ -^ .^ p: p: -^ 6[ L) o^ o^ o^ -^ .^ p: p: p: fL.fL.fL.fL.fL.fL.fL.fL.v% v% I> I> I> fL.fL.fL.I> I> I> I> I> I> I> I> 5% 5% f% v% I> fL.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.I> I> fL.fL.w4.w4.a, Es ac 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ui ti pj pj pj pj )O 8H.>H.>H.>H.>r+>r+>r+>r+)i+#y#;p.;p.;p.R6 ]b+]b+N/.N/.N/.N/.G7 G7 G7 G7 G7 G7 G7 G7 $w $w $w $w |x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.Es Es si si -J.-J.l3 l3 PI.PI.v4.v4.v4.v4.o;.^C.sF.c+#c+#tS.yH.e1*mX.R|*zT*UJ*n. dQ+DQ+&U*A1@PC.i_.ow R~%GL SB%27*(t*=m$Cn*wq*p1@hk*:-@wq*/8%ND@hk*KZ@f>@^i@[c@%a@%a@[c@J.+ki@W,@.*+.*+.*+>>+W,@A0%B%%km$&c$&c$/a$pr%pr%(a$(a$4v$4v$p4&p4&,z*,z*]m$]m$]m$]m$=c$=c$nw$nw$Hs$nw$a8$%K$im$im$im$b9$!k#M+#fX+gX+2R+gX+5$@jX+2 @2 @YK+YK+w;@!K@!K@!K@>K@5$@5$@5$@5$@5$@5$@5$@5$@5$@5$@4G+4G+4G+5&@CI+->+y)+y)+fX@gX+fX+5$@R,+4G+4G+YK+2 @R)@8G+8G+8G+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+s;@Q)@ZK+ZK+ZK+ZK+Q)@s;@t;@s;@ZK+9G+*>+;B+my+my+_w+_w+K@@Z.@P,@L@@0$@e^@K@@my+my+ny+ny+4 @4 @4 @_w+_w+_w+_w+_w+my+my+my+Rt+ED+my+my+ny+ny+^K@^K@G@@G@@G@@6$@UR$CU$CU$CU$,_$6$@I@@*>+a=@;I$@B+oy+c[+1]+g~+w)+8&@mq@6$@~K@{J$4($@6$po%^ +CA$HT$is$is$[3%<>%T)@V_#W_#,>+#@#/ %up%qG+qG+`u@i~$tD@}e%]o+hi@D,+>P+Z=+Y=+c$@E,+E,+E,+0k@Be@#!@_&@iU*jU*cd%wy$/l%Nf$kU*kU*lU*/S*0v*_u*Zy*-U*;U*mU*nU*'U*oU*pU*iF*qU*iL*rU*sU*tU*uU*vU*wU*xU*yU*zU*AU*BU*pH*CU*DU*EU*FU*GU*bz*|G#E.$>G#(z#(5#]5#{5#&G#_}%C}%C}%G_$]l##I#et#et#2T#G_$G_$G_$gs%bi#^$$q'$E7#z0+)6+In$ ;$;f+-l#Ey#:i#B)$.4+Nn#df#Pg+F:+(+@gi+s=@sD+p=$e0#vr+vr+.B+:c@|t#=E#Y+$Y+$Aq@#9@)~#0&@t<@zU$7s%`{%qZ@V.@zM@pZ@K #E@@5$@5&@R,+R,+5&@4G+5&@4G+5$@5$@5$@5$@4G+=>+x)+[P+&N+wr+ry+,]@y&@'f&}7&_;$Hw$7f$pP&pP&pk$qk$zv$_P%ff%i7%.C$.C$c&$*G%|;%X$%6U*@Y%<+%ek%-_+Ab+ 5$ 5$ 5$ 5$ 5$ 5$8g$8g$@F$@F$!x$:V$:V$+F$+F$nt$uo$'$49@9s#s9#ih#Kx#z$+!B+z$+c&@G6@s<@!B+G6@s<@!B+z$+c&@gY#gY#G6@G6@G6@G6@G6@G6@G6@a$@a$@O,@O,@e^@e^@e^@K@@K@@K@@9&@be#be#be#m5$m5$t!%t!%A%%A%%,T@,T@,T@,T@w;@w;@w;@]K@ @%RQ@)K@)K@,K@X>%E@@E@@4Z+4Z+4Z+4Z+M+#!k#!l$)H$)H$!H$-I$S!$k`%k`%S!$k`%n>%l`%/R#T5++L+}7@EA#7Z+[8+Ge@_3@''$A]%u.*3:@)*&:Y+:Y+J9*J9*44%UL%ox*3J*9U*uo*HU*IU*JU*cU*KU*LU*MU*eU*fU*b:&NU*`@ Ib#Gc%N}.6z+6z+eO@J7.I7.I7.I7.qK#yE#z9.VD@Xw&z$$TO&TO&`E&3]&O4%O4%3]&3]&`E&3]&#u%3]&TO&#d+TO&{y%$(+}f.bH@bH@aH@aH@aH@Bz$bH@bH@bH@bH@bH@bH@bH@m|.u]#q(#q(#q(#:{+u]#d #';$G|@G|@Ai.Ai.Ai.Ai.Di*P] iy.e #>b#M'$M'$M'$M'$>b#>b#>b#>b#>b#>b#>b#>b#>b#%U.[y+[y+|f.J; P] Q] Q] J; J; J; J; J; J; J; 6P.M<+b%@b%@b%@M<+M<+P] P] |f.|f.q9+q9+H0@H0@H0@H0@dl.dl.dl.dl.dl.dl.dl.dl.jy.jy.jy.jy.jy.]$@]$@]$@T_+T_+T_+$(+$(+$(+$(+xc+$(+$(+$(+$(+$(+$(+$(+$(+xc+xc+xc+xc+$(+$(+$(+$(+xc+$(+$(+T_+G|@Kh+7P.7P.5A.xc+T_+$(+Ea+5A.Ea+$(+Ea+Ea+Ea+xc+xc+$(+$(+$(+}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.bH@bH@bH@aH@)&+ I> =] y% o^ 6[ 6[ 6[ 6[ o^ o^ -^ o^ L) [! [! L) o^ -^ f% 5% 5% f% f% f% f% 5% f% f% f% f% f% f% v% u% M2 {2 {2 =^ 6[ 6[ L) L) 2% 2% +# +# +# +# 9# +# .# .* .* .* .* .* .* .* 2% 2% 2% .* * * * fd o^ -^ .^ p: p: -^ 6[ L) 6[ o^ -^ .^ p: og C' C' a, a, w4.w4.fL.fL.I> I> v% v% I> I> I> fL.fL.fL.w4.fL.I> f% f% I> fL.w4.v% v% I> I> I> I> fL.fL.w4.w4.w4.w4.w4.w4.w4.w4.I> I> fL.fL.w4.w4.a, Es ac 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ui ti pj YY pj pj uM 8H.>H.>H.>H.>r+>r+>r+>r+g~#g~#sq.sq.sq.R6 ]b+eH.34.34.34.N/.N/.N/.N/.N/.N/.G7 G7 $w 24 24 H{ H{ |x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.Es Es si si -J.-J.l3 l3 cp.cp.<3+<3+v4.v4.o;.*B.{N@{$+{$+tS.yH.+2*P|*3K*zT*8z+T& 6>$DQ+{X+A1@PC.ux Lu+Dc@GL K}%pP*_t*Ok$o*&RI&hk*hk*G}$:-@p1@hk*p1@hk*KZ@^i@[c@[c@[c@[c@J.+ki@W,@.*+.*+.*+>>+W,@A0%B%%km$&c$&c$/a$pr%pr%(a$(a$4v$4v$p4&p4&,z*,z*]m$]m$]m$]m$=c$=c$nw$nw$=J$Hs$Gs$,H$;u$;u$;u$b9$!k#nZ@gX+gX+2R+gX+jX+jX+YK+YK+YK+YK+w;@w;@w;@YK+>K@5$@5$@5$@5$@5$@5$@5$@5$@5$@5$@4G+4G+4G+5&@CI+->+QU#QU#nq@gX+4Z+jX+4G+5&@5&@2 @2 @R)@R)@R)@R)@ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+s;@s;@Q)@Q)@Q)@Q)@s;@s;@s;@Q)@lX+9G+;B+;B+my+my+my+my+Z.@Z.@P,@P,@L@@K@@Z.@ny+ny+4 @4 @O)@O)@O)@(w+(w+_w+_w+_w+my+my+my+g~+g~+_w+_w+my+my+I@@8$@G@@G@@G@@6$@UR$CU$CU$CU$SQ@G@@I@@*>+0=@6o@#B+sr+v)+oy+Rt+w)+9=@k#$SQ@AM@2#%a8$VR$qr%m6&o)%HT$uy%'v$n>#)M$X,@V_#D)+3W.*1@(-+up%qG+D~$N[$c=@Fn+c!@]o+) +5i@!V+;<$M:$c$@E,+V;+V;+Cq@Be@9N#t^@OU*0:#bd%>d$n0#k0#-|%3i#Q{$0f%-o#=5#Zy*ni#>U*mU*8I*PU*UM*QU*RU*iJ*SU*TU*UU*VU*WU*XU*YU*ZU*`U* V*.V*+V*@V*#V*2U*=S*FU*GU*i.%|G#0@$8w#(5#Tc#]5#Y7#P7#>z#B}%4|%]l#ai#et#D+%D+%D+%gs%gs%gs%zq#^$$q'$E7#E_$z0+'6+In$ ;$;f+-l#oq#:i#B)$.4+Nn#6*>6*QG$)E$wo$wo$wo$vo$.O$sQ$ye@ye@fc@gc@@-&@-&.~&.~&#-&#-&&w$&w$.~&.~&#-&&w$&w$&w$Ju$Ju$Ju$vo$ZQ%4U&Qp$nt$4U&1s$1s$5c$5c$w,$8a$>y$>5$s9$$4$[:$$4$8=%K2&,:@fY#Y4@cs${`#!O$'$0s#49@.5@ih#4L#c&@z$+z$+s<@c&@z$+a~@G6@s<@!B+z$+G6@gY#gY#c&@c&@c&@c&@c&@c&@c&@b&@b&@O,@O,@e^@e^@e^@K@@K@@K@@9&@9&@be#be#9=@m5$m5$k#$A%%A%%,T@,T@DD+x;@R)@8G+w;@]K@ @%RQ@)K@)K@,K@K #E@@E@@4Z+4Z+4Z+4Z+M+#!k#!l$!I$)H$!H$-I$S!$S!$k`%S!$k`%n>%l`%/R#T5++L+}7@o}@<7@Ge@no@''$A]%u.*j|+3:@)*&:Y+J9*J9*J9*44%}y*ox*3J*%V*&V*LS#*V*=V*-V*KU*;V*Vg.>V*t^%,V*'V*a' 'I@mq+r3%'C+'C+)Z%n4@H8@I7.I7.qK#yE#z9.VD@Xw&z$$<:*<:*#d+TO&TO&#d+#d+<:*#d+`E&3]&`E&<:*-.%<:*B#@T_+bH@bH@aH@aH@aH@Bz$Bz$aH@aH@aH@aH@aH@aH@aH@V&$u]#9&+q(#q(#u]#d #';$US+G|@G|@Ai.Ai.Ai.Ai.Di*P] M<+e #>b#M'$M'$M'$M'$M'$>b#>b#>b#>b#>b#>b#>b#NU+[y+|f.|f.|f.J; P] P] P] J; J; J; J; J; J; J; 6P.6P.b%@b%@;b#iy.M<+P] J; [y+[y+jy.jy.ok.ok.ok.ok.Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.dl.dl.q9+jy.jy.]$@]$@T_+T_+$(+$(+xc+Ea+Ea+Ea+xc+xc+xc+xc+xc+xc+xc+xc+5A.Ea+Ea+xc+$(+$(+T_+T_+xc+xc+xc+$(+$(+T_+T_+G|@Ea+$(+T_+$(+Ea+Ea+xc+T_+Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.bH@bH@bH@bH@bH@bH@d; ;b#,M+,M+,M+,M+=; *; @A.*; *; hS.=; =; xM+r4@l7 xc+$(+T_+G|@G|@Kh+Kh+5A.5A.5A.5A.5A.5A.", "|% $% $% $% &) 4% 4% j% j% $9.$9.$9.$9.$9.$9.f% 5% %% ~% ~% %% 5% f% f% f% f% v% v% I> I> =] u% o^ o^ 6[ 6[ o^ o^ -^ 6[ o^ -^ .^ .^ -^ o^ 6[ f% f% f% f% 5% 5% f% v% I> I> I> I> I> I> v% u% M2 {2 {2 =^ 6[ 6[ L) L) 2% 2% +# +# +# +# 9# +# .# .* .* .* .* .* .* .* * * * .* 2% 2% 2% U@ o^ -^ .^ p: p: -^ 6[ L) 6[ o^ -^ .^ p: og C' C' 8H.a, a, w4.fL.I> I> v% v% v% I> I> I> fL.fL.fL.a, fL.v% f% f% v% fL.a, w4.w4.w4.fL.I> v% v% v% w4.w4.w4.w4.w4.w4.w4.w4.I> I> fL.fL.w4.w4.a, Es ac 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ 5[ ti pj pj pj ti )O 8H.>H.>H.>H.>r+>r+>r+>r+g~#g~#sq.sq.sq.R6 ]b+eH.N/.N/.N/.N/.N/.34.34.34.N/.G7 G7 $w 24 24 H{ H{ |x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.Es Es si si -J.-J.l3 l3 [3+[3+<3+v4.#k.#k.o;.*B.{N@{$+{$+tS.yH.+2*P|*3K*}i$&J.a* {d*EQ+E2.A1@P0*^y.Y_+p]%]I@VB%m]@3B*XD*z*+(=$ZO@ZO@g,$ij*G}$hk*p1@hk*KZ@^i@[c@[c@[c@[c@J.+ki@W,@.*+.*+.*+>>+W,@A0%B%%km$&c$&c$/a$pr%pr%(a$(a$4v$4v$p4&p4&,z*,z*]m$]m$]m$]m$=c$=c$nw$nw$Hs$Hs$Gs$Gs$;J$Js$;u$b9$vp#nZ@7V@BO@gX+gX+fX+4Z+5$@5$@>K@>K@YK+YK+w;@YK+>K@5$@5$@5$@5$@5$@5$@5$@5$@5$@5$@4G+4G+4G+5&@CI+]-+QU#gi@y)+2R+fX+jX+5$@5&@5&@2 @2 @R)@R)@R)@R)@ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+Q)@Q)@s;@s;@s;@s;@Q)@Q)@Q)@ZK+9G+3 @;B+;B+my+my+ny+ny+K@@K@@L@@L@@P,@Z.@Z.@ny+ny+4 @4 @O)@O)@O)@_w+_w+_w+_w+_w+_w+_w+my+g~+g~+(w+_w+_w+my+I@@I@@G@@G@@G@@6$@UR$CU$CU$CU$DO@G@@8$@*>+0&@|=@#B+sr+sr+sr+ED+w)+8&@k#$,_$AM@:/%,H$=u$&u$D~&@q%m|%is$'v$n>#)M$X,@V_#D)+3W.*1@(-+qG+VX.D~$N[$c=@Fn+c!@tg@) +5i@'[+kZ+c$@c$@V;+d&@_f+[$@Be@#!@ >#Jp#)V*bd%wy$n0#k0#b_%kD$!V*/:#-o#-o#Mc#ni#>U*~V*{V*Pz*CQ*]V*^V*/V*iy*(V*_V*:V*6*-6*to$to$vo$4U&nt$&w$bC$& $xe@xe@0i@fc@@-&@-&.~&.~&#-&#-&&w$&w$.~&.~&#-&#-&&w$Ju$nt$vo$Ju$:n$wo$`u$vo$Ft$`u$d6$d6$g>${e%:u%l7$t8$>y$t8$fq%8=%(~%x=@%7@%7@M<@>q$Sp$ 7@!O$0S$rQ$xV#'O$Aw$$ $g($(/$x:+=_+w:+=f+=f+*f+X1#Mg+s:+=k+Wl+Xl+1(@`H@W=&),&WE&7*$1+*8*$:V%:V%>'$>'$>'$59@59@59@4v#4L#c&@z$+z$+s<@s<@!B+pk+c&@z$+z$+s<@gY#-_#G6@s<@c&@c&@c&@c&@c&@c&@b&@b&@O,@O,@e^@e^@e^@K@@K@@K@@9&@9&@8&@9=@9=@9=@k#$k#$A%%fm$,T@,T@w;@R)@R)@8G+w;@]K@[H#,K@)K@)K@E@@K #E@@4Z+4Z+4Z+M+#M+#M+#!k#0N$Ls$Ls$!I$)H$!H$-I$-I$S!$k`%n>%l`%/R#T5++L+}7@>5@Ge@ei@no@A]%u.*j|+u(@3:@)*&J9*J9*J9*#x@aV*}y*^x*3J*xO*&V*bV*cV*dV*eV*fV*gV*hV*iV*b+%jV*OE+z8./b+z$$$0+|r%|r%'Z%g6@H8@I7.I7.qK#yE#z9.VD@Xw&#u%<:*#d+#d+TO&TO&#d+<:*<:*<:*TO&`E&#d+-.%M]*-.%!D+T_+bH@aH@aH@aH@Bz$Bz$Bz$aH@aH@aH@aH@aH@aH@aH@V&$d #9&+9&+9&+u]#d #';$US+G|@G|@Ai.Ai.Ai.Ai.Di*P] M<+)&+)&+)&+NU+yM+yM+'U.NU+NU+NU+NU+NU+NU+NU+NU+P] P] P] J; |f.|f.|f.[y+J; J; J; J; J; J; J; 6P.6P.,M+;b#;b#iy.iy.J; J; [y+[y+jy.jy.ok.ok.ok.ok.Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.8Y+1m.1m.Ai.dl.dl.q9+q9+T_+T_+$(+$(+xc+Ea+Ea+Ea+xc+xc+xc+xc+xc+xc+xc+xc+Ea+Ea+xc+xc+$(+T_+T_+G|@$(+$(+xc+xc+Ea+Ea+Ea+5A.Ea+$(+T_+T_+xc+Ea+xc+T_+xc+Ea+Ea+Ea+Ea+Ea+Ea+Ea+}f.}f.}f.}f.}f.}f.}f.}f.bH@bH@bH@bH@bH@bH@}f.}f.6P.r4@Pj+GA+M<+iy.6P.r4@0d.,8+,8+Pj+GA+GA+r4@r4@cI+xc+xc+$(+T_+G|@G|@Kh+5A.5A.5A.5A.5A.5A.", "|% $% $% $% &) 4% 4% j% j% $9.$9.$9.$9.$9.$9.f% 5% %% ~% ~% %% 5% f% 5% 5% f% f% v% v% v% v% u% -^ o^ 6[ 6[ o^ -^ -^ L) o^ .^ og og .^ o^ ^{ 5% f% v% f% 4% 4% f% I> fL.fL.fL.fL.I> I> I> v% m3 {2 {2 {2 o^ o^ o^ o^ 2% 2% +# +# +# +# 9# +# m* * * * * * * * fd * * .* 2% U@ m@ m@ o^ -^ .^ p: p: -^ 6[ L) o^ o^ o^ -^ .^ p: p: -h w4.w4.w4.fL.I> I> v% v% v% v% I> I> I> fL.fL.fL.w4.fL.v% f% f% v% fL.w4.a, a, w4.fL.fL.I> v% v% w4.w4.w4.w4.w4.w4.w4.w4.I> I> fL.fL.w4.w4.a, Es ac 5[ 5[ 5[ 5[ 5[ 5[ 5[ * fd 5[ ui ti ti ui Es 8H.>H.>H.>H.>r+>r+>r+>r+)i+#y#;p.;p.;p.R6 ]b+]b+G7 G7 G7 G7 N/.N/.N/.N/.G7 G7 G7 G7 $w $w $w $w |x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.Es Es si si -J.-J.l3 l3 [3+[3+v4.#k..^C.sF.c+#c+#tS.yH.e1*mX.R|*}i$kV*I{ FE#EQ+3O$Ex 9u p^%wu.09.BK@`z*lV*BX&{8*m #(=$g,$Lu@{R@o1@{R@G}$hk*KZ@f>@^i@[c@%a@%a@[c@J.+ki@W,@.*+.*+.*+>>+W,@A0%B%%km$&c$&c$/a$pr%pr%(a$(a$4v$4v$p4&p4&,z*,z*]m$]m$]m$]m$=c$=c$nw$nw$nw$Hs$Gs$Gs$;J$Js$;u$b8$vp#7V@7V@BO@gX+fX+4Z+4Z+E@@jX+)K@)K@>K@>K@!K@>K@5$@5$@5$@5$@5$@5$@5$@5$@5$@5$@5$@4G+4G+4G+5&@CI+2R+y)+QU#y)+CI+gX+5$@5$@R,+R,+5G+2 @R)@w;@w;@w;@ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+Q)@s;@s;@Q)@ZK+ZK+ZK+lX+3 @f^@;B+;B+my+ny+ny+my+e^@e^@0$@0$@L@@Z.@K@@my+my+ny+ny+4 @4 @4 @ny+my+my+my+_w+(w+(w+(w+g~+g~+_w+_w+my+my+I@@I@@G@@G@@G@@6$@UR$CU$CU$CU$DO@6$@mq@>B+0&@|=@#B+#B+#B+1R+ED+%T)@V_#W_#,>+/ %7P#qG+VX.VX.`u@c=@tD@m9@N@@4]+T;+W.+E,+c$@n;@^+@qd+d&@[$@gz@]R#Zl+5v#fx$]f+!i#o0#jf#rc#T6%]:#1l#4l#4l#Mc#If#dH*nV*oV*az*pV*qV*~F*rV*iy*sV*tV*uV*vV*wV*xV*yV*zV*AV*BV*|F*CV*DV*EV*1E*FV*VB#DM*Ii#MR#^p%`7#`7#Y7#!5#P7#Iq#G_$G_$gs%y0#s=$et#w.$w.$zq#zq#zq#0,$q'$E7#E7#E_$,6+,6+ ;$ ;$;f+;f+YN#'@D6@+9@<)%3d%7f$/a%ig$qk$pk$pk$_P%S<$u %j7%Q1$4H$&#$tz%q*%j=%0 %#&%<+%fk%Ab+x:+;_+;_+;_+;_+;_+;_+;/+;/+5l$5l$+O$!x$!x$!x$:V$$w$&w$|s%(n$YS&7C*7C*YS&YS&7C*7C*7C*7C*:D$:D$_n$_n$-.&>6*-6*7G*uo$uo$nt$nt$Ju$&w$bC$sQ$ye@ye@0i@fc@@-&@-&.~&.~&#-&#-&&w$&w$&w$#-&#-&#-&&w$Ju$nt$vo$)r$:n$Ew$`u$:n$E5&|s$g>$='$*'$aC$:u%:u%:u%:u%f}@^7@@1%,m$48+WH@>:@Y4@fY#Gt$yV#pR$!O$jQ$jQ$jR$% $oW$(/$(/$(/$pF$=_+=_+*f+-k+TR#Wl+Lg+Lg+YN#fi+jp+cc@7*$7*$7*$1+*J$*:V%D`#0s#0s#>'$59@C`#C`#YA#Lx#4L#c&@z$+z$+s<@c&@z$+a~@s<@z$+z$+c&@gY#-_#G6@s<@G6@G6@G6@G6@G6@G6@a$@a$@O,@O,@e^@e^@e^@K@@K@@K@@4e@9$@8&@8&@9=@mq@mq@DD+fm$fm$,T@!K@!K@!K@w;@w;@w;@]K@[H#,K@)K@)K@E@@K #4Z+4Z+4Z+4Z+M+#M+#M+#!k#0N$Ks$Ls$!I$)H$!H$!H$-I$S!$k`%n>%l`%/R#T5++L+}7@>5@[8+Ge@`~@8l*u.*u(@u(@3:@ I> I> v% f% f% f% m3 m3 m3 m3 =] =] =] =] Y_ Y_ J- J- J- J- 0# J- C, =5 =5 =5 =5 =5 =5 =5 Y_ Y_ Y_ Y_ Y_ Y_ Y_ t% y% u% =] -h -h u% Q_ ^{ y% y% y% y% u% u% u% u% I> I> I> I> I> v% v% v% v% v% I> I> I> fL.fL.fL.fL.fL.I> I> I> I> fL.fL.I> I> I> fL.w4.w4.a, a, w4.w4.w4.w4.w4.w4.w4.w4.I> I> fL.fL.w4.w4.a, Es ac 5[ 5[ 5[ 5[ 5[ 5[ 5[ .* * fd 5[ 5[ 5[ 5[ -h 8H.>H.>H.>H.>r+>r+>r+>r+7v@7v@X5 R6 R6 R6 ]b+]b+24 {_ ;b.;b.|x.|x.O9.O9.|x.|x.|x.|x.O9.O9.O9.O9.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.Es Es si si -J.-J.l3 l3 [3+cp.#k.F6.8'%8'%L!.sF.^C.[M@[M@10*EO*pN*ak*cM*}i$N= := LC#EQ+AM*Ex 9u p^%*z*Lb.VB%TB*NV*8J%RQ*0i$OV*Y<#Y<#6T@OV*o1@ij*KZ@f>@^i@[&#%a@'>+'>+%a@J.+ki@W,@.*+.*+.*+>>+W,@A0%B%%km$&c$&c$/a$pr%pr%(a$(a$4v$4v$p4&p4&,z*,z*]m$]m$]m$]m$=c$=c$nw$nw$Ms$nw$Gs$Gs$;J$;u$im$c9$Wx$Wx$_P+_P+hX+vp#8e#Xx$&&#&&#&&#pZ@qZ@AM@AM@AM@5Z+5Z+5Z+5Z+5Z+5Z+5Z+5Z+5Z+5Z+5Z+XK+XK+XK+BM@}{#fX+fX@QU#QU#CI+2R+4G+4G+R,+R,+5G+2 @R)@w;@w;@w;@ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+9G+lX+ZK+Q)@Q)@ZK+lX+9G+lX+9G+3 @f^@;B+;B+my+ny+my+_w+J@@6T+b~@O,@0$@K@@e^@_w+_w+my+my+ny+ny+ny+O)@4 @ny+my+_w+&N+;m+;m+Rt+Rt+_w+my+my+ny+8$@8$@G@@G@@G@@6$@UR$CU$CU$CU$DO@SQ@E+$P)@0=@|=@@B+hy+@B+#B+ED+:w+8V@8$@G@@~K@ K$4($VR$&u$^1&mV*Nt$'v$y]%]J$<>%T)@V_#@ +:-+.B$l~+D~$A)++$#c=@d$@g)#hi@) +/K@> +W.+E,+n;@k0+d&@d&@_f+mc@~7@]R#Yl+ii+B5$]f+!i#Nf$q0#mf#G~$O2%&5%4l#4l#Gf#Gf#PV*.f%)D*^N*QV*RV*~F*SV*TV*sV*_V*UV*VV*WV*XV*YV*ZV*`V* W*UE*.W*nB*+W*7A*$y*0w#i.%R7#_e%_e%Mq#{5#!5#!5#P7#-5#H_$H_$/O#zq#^$$E~$E~$E~$0,$0,$0,$1@$E7#E7#E7#E_$,6+,6+ ;$ ;$;f+;f+Vl+;f+1f#i0#df#Nn#E:+cd+>k+Sl+mD+8X+60#`n+#k+fy+fy+fy+VH@o;@o;@:c@#9@fz@a=@t<@;B+9G+R)@2 @DI+WK+8e#gb#K #E@@5$@5&@R,+R,+5&@4G+jX+5$@4G+5&@5&@4G+5$@|V+4 @Jl+y;@M,@28+Zp+>j&F5&<)%{Y$hg$Fa%lm%<}$pk$pk$qw%S<$u %:}$3H$3H$S]#1b$|;%y.%.%%`i$[+%ml%Ab+x:+;_+;_+;_+;_+;_+;_+;/+;/+5l$5l$!x$!x$:V$:V$+F$7S$PI&.r% v$Ft$`u$`u$`u$:n$`u$`u$`u$`u$`u$Ew$1s$[V%-.&>6*-6*7G*t`%t`%Ju$Ju$nt$Ju$.O$iR$gc@gc@gc@6k@@-&@-&.~&.~&#-&#-&&w$&w$nt$Ju$&w$#-&#-&Ju$nt$vo$)r$Et$}b$|s$Et$W>$V>$g>$-'$A6@.9@X<@X<@X<@g}@U>$!3@oB$K2&;]@>:@lt$4}@dc@qR${`#pR$sQ$hE*hE*!O$Qi$wT#wT#h($h($xT#xT#:C#:C#,.$$3@$3@|}@hr+WF#WF#fr+4k@1+*1+*mQ&J$*:V%p.$vi$>'$59@59@C`#C`#XA#Lx#Lx#Vv#s<@!B+z$+c&@c&@s<@!B+s<@z$+z$+c&@-_#-_#G6@z$+gY#gY#gY#gY#gY#gY#H6@H6@O,@O,@e^@e^@e^@K@@K@@K@@9$@9$@9$@^K@^K@mq@mq@x;@,T@!K@]K@]K@]K@)K@,K@,K@YK+)K@[H#,K@jX+jX+E@@K #4Z+4Z+M+#M+#M+#M+#yA#[{#~l$Ls$!I$)H$!H$-I$-I$S!$S!$k`%n>%l`%/R#T5++L+}7@oX+[k+>m+SL$:3@22+U^@U^@wD$( >( >( 9g.aH@bH@bH@bH@bH@bH@bH@bH@bH@bH@J; J; J; J; J; |f.|f.|f.J; J; J; J; J; J; J; 6P.GA+,M+;b#x$$d; iy.J; [y+J; J; dl.dl.C! C! C! C! dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.Ai.Ai.Ai.Ai.1m.1m.T_+T_+T_+T_+T_+G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+Kh+Kh+Kh+G|@G|@G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+xc+T_+G|@G|@$(+xc+$(+G|@T_+T_+T_+$(+$(+xc+xc+xc+}f.}f.}f.}f.}f.}f.}f.}f.aH@aH@aH@bH@}f.}f.}f.l7 }f.l7 cI+l7 bH@aH@bH@l7 bH@bH@}f.}f.}f.}f.l7 l7 $(+$(+xc+Ea+5A.5A.]! ]! xc+xc+xc+xc+xc+xc+", "|% $% $% $% &) 4% 4% j% j% $9.$9.$9.$9.$9.$9.5% 4% ~% d( d( ~% 4% 5% %% %% 4% 4% 5% 5% 5% f% =] u% u% y% y% u% u% =] u% y% ^{ &% &% ^{ y% u% 5% v% I> 5% ~% ~% f% w4.I> v% v% f% 5% 5% 4% 4% b/ m3 m3 M2 -h -h si si Y_ Y_ J- J- J- J- 0# J- C, =5 =5 =5 =5 =5 =5 =5 M$ M$ t% t% Y_ o3 =5 =5 y% u% =] -h -h u% Q_ ^{ y% y% y% y% y% Q_ Q_ Q_ v% v% v% v% v% v% v% v% v% v% I> I> I> fL.fL.fL.I> I> I> fL.fL.I> I> I> 4% 5% v% I> w4.8H.xj+l`.w4.w4.w4.w4.w4.w4.w4.w4.I> I> fL.fL.w4.w4.a, Es ac 5[ 5[ 5[ 5[ 5[ 5[ 5[ 2% .* * fd fd fd fd =] 8H.>H.>H.>H.>r+>r+>r+>r+A^.A^.4z X5 R6 R6 v.+X5 W_ W_ {_ {_ ;b.|x.|x.|x.;b.|x.|x.O9.6}%6}% F. F.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.Es Es si si -J.-J.l3 l3 [3+cp.W*}i$N= := LC#EQ+AM*Ex 5< $B *z*BK@VB%XC*,W*J4&kR*'W*M%#6T@Y<#)W*@<+OV*ij*L$*f>@+<+[&#'>+<-+'>+'>+J.+ki@W,@.*+.*+.*+>>+W,@A0%B%%km$&c$&c$/a$pr%pr%(a$(a$4v$4v$p4&p4&,z*,z*]m$]m$]m$]m$=c$=c$nw$nw$Rj$Ms$,H$Gs$Js$;u$c8$qn%_8$*6$_P+_P+hX+vp#8e#Xx$u9#]^#]^#&&#*&#qZ@qZ@AM@5Z+5Z+5Z+5Z+5Z+5Z+5Z+5Z+5Z+5Z+5Z+XK+XK+XK+BM@}{#4Z+BO@y)+QU#]-+2R+4G+5&@yM@R,+5G+2 @R)@w;@w;@!K@ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+3 @9G+ZK+Q)@Q)@ZK+9G+3 @9G+9G+3 @f^@Y.@;B+my+ny+my+_w+6T+L@+X{@b~@0$@K@@J@@(w+(w+_w+_w+my+my+my+t<@O)@4 @my+(w+&N+S.+S.+Rt+ED+my+my+ny+ny+^K@^K@G@@G@@G@@6$@UR$CU$CU$CU$SQ@,_$A%%R,@a=@6o@hy+,w+hy+@B+ED+:w+'_#<^#%o%{K@g>&J$+17$&u$!W*mV*~W*'v$Gn#aT+_T#T)@Yx%+B$YJ#C)+N[#H1#+$#Sb+d$@;>+Ie@C,+b=#L4#$t@Q@+V;+Qb+4T+qd+ai+//+~7@r=@.>#HZ@ii+`b$dx$)f+p0#{W*]W*tc#R{$74%4l#4l#Nc#Gf#PV*.f%yz*ly*QV*RV*~F*^W*/W*Ix*UU*(W*_W*:W*6*-6*5W*t`%t`%&w$&w$4U&vo$7S$#w$_a@_a@7m@7m@@-&@-&.~&.~&#-&#-&&w$&w$vo$nt$&w$#-&#-&&w$nt$:n$)r$Et$}b$|s$-'$W>$V>$g>$F4@A;$U>$g}@X<@g}@kk+R2$kt$B!%I2@qe@cc@31@4}@6*$bP$tQ$pR$& $^{&^{&)O$$w$6k@-Z#h($xT#xT#,.$,.$|}@|}@+}#+}#hr+gr+WF#-E#fr+qe@o@*J$*J$*8*$p.$vi$Hj$C`#C`#C`#C`#XA#XA#XA#Kx#c&@z$+!B+z$+c&@G6@s<@!B+z$+z$+z$+G6@-_#-_#G6@z$+-_#-_#-_#-_#-_#-_#*9@*9@O,@O,@e^@e^@e^@K@@K@@K@@9$@9$@8$@^K@^K@^K@x;@x;@!K@!K@]K@]K@,K@[H#[H#X>%YK+)K@[H#E@@jX+jX+E@@lZ@4Z+M+#M+#M+#M+#yA#yA#[{#!l$)H$)H$!H$-I$S!$k`%k`%S!$k`%n>%l`%/R#T5++L+}7@oX+l9@[k+>m+DO#5T@22+@/%wD$n.;n.'W+Y@$+d+Y@${y%B#@{y%6j+G|@aH@Bz$Bz$Bz$9g.9g.9g.Bz$Bz$Bz$Bz$Bz$Bz$Bz$d%$';$x}*x}*x}*d #';$US+23+G|@G|@Ai.Ai.Ai.Ai.Di*Ai.FA+>( l}+JI$l}+>( Bz$aH@bH@bH@bH@bH@bH@bH@bH@bH@[y+[y+|f.|f.J; P] P] Q] J; J; J; J; J; J; J; 6P.GA+,M+;b#x$$d; iy.J; [y+P] P] Ai.Ai.>~ >~ >~ >~ dl.dl.dl.dl.dl.dl.dl.dl.jy.jy.q9+q9+dl.Ai.Ai.1m.$(+T_+T_+G|@G|@Kh+7P.7P.G|@G|@G|@G|@G|@G|@G|@G|@oh.oh.7P.7P.Kh+G|@G|@T_+T_+T_+G|@Kh+7P.7P.oh.oh.xc+T_+G|@G|@$(+xc+$(+G|@Kh+G|@G|@T_+$(+$(+xc+xc+}f.}f.}f.}f.}f.}f.}f.}f.aH@aH@aH@bH@}f.}f.l7 l7 Bz$bH@l7 l7 }f.}f.l7 NM+Bz$aH@aH@bH@}f.}f.l7 l7 {! {! ]! 5A.5A.Ea+xc+xc+$(+$(+$(+$(+$(+$(+", "~_ &_ &_ &) &) %% %% x% x% l#@$9.5!.6!.6!.6!.5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% I> f% 5% 4% 4% 5% f% I> %% ~% d( d( ~% 4% f% v% I> v% 5% 4% 4% 5% v% I> v% v% f% f% f% 5% 5% 5% 7% 7% j% j% f% v% v% v% &) &_ 5! G{ G{ 5! ,;.3{ 3{ &_ ~_ n3 n3 ~_ &_ &) $% &_ n3 &5 &5 n3 &_ $% v% v% v% v% v% v% v% v% v% f% 5% 5% 5% v% fL.a, v% fL.w4.fL.v% v% I> w4.5% f% v% I> fL.w4.a, a, v% v% I> I> I> fL.fL.fL.8H.a, fL.I> v% I> fL.w4.w4.w4.w4.a, a, a, 8H.8H.v% I> I> fL.w4.a, a, )O ac 5[ 5[ 5[ 5[ 5[ 5[ 5[ * ui ui * * ui ui =] fL.;H.;H.;H.4=+4=+4=+4=+X_ X_ Q6 4z X5 X5 v.+R6 {_ cl+l`.cl+a, fL.a, xj+a, a, a, a, a, a, a, a, ;b.{_ W_ W_ W_ ;b.O9.6}%O9.|x.|x.;b.;b.|x.|x.O9.)O )O Es Es ':+':+':+':+#9.#9.#k.#k.#k..^C.^C.[M@[M@10*yH.e1*mX.R|*q' 8z+U& vZ dM+3O$+6.%(+%B ot.dl*aW*/I%bW*cW*iQ*p#$BO#!_#d!@y[+Y<#{R@ij*ij*KZ@+<+[&#[c@[c@%a@<-+ki@3W..*+_-+4[%4[%m~+_-+A0%B%%km$&c$&c$/a$pr%pr%4v$4v$4v$(a$7v$7v$qr%qr%]m$]m$ln$ln$%u$=c$Ms$Ms$Hs$Hs$Gs$,H$Js$Js$;u$;u$qw$qw$37$e;%37$47$d9$!l$WL$WL$WL$WL$~J$~J$~J$~J$~J$~J$~J$~J$~J$~J$~J$~J$%/$%/$%/$%/$%/$%/$%/$WK+CI+fX@fX@fX@CI+CI+5&@5&@5&@5&@2 @2 @R)@R)@R)@R)@ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+lX+lX+9G+3 @;B+Y.@(w+(w+_w+(w+J@@J@@0$@L@@P,@0&@0=@O)@O)@O)@O)@O)@O)@O)@(w+_w+my+_w+&N+;m+&N+(w+Rt+Rt+my+ny+4 @t<@k#$E+$6$@6$@6$@DO@_^$_^$I.%I.%DO@DO@k#$P)@a=@jb#,w+,w+1R+oy+Il+Qt+9$@^K@DM@|{#{J$4($17$7v$D~&$w%~W*6w$uy%|(%9M@>9@']$@ +:-+/ %7P#D~$A)+Sb+U+$20#bZ.C,+b=#4]+M@@M@@P8%ai+q$@//+q$@q$@gz@}$@.>#w'#}/#oj%]f+)f+1i#jf#3i#A!$<3%`D*JD*-o#8L*Wy*`e%]e%+r#sC*dW*eW*fW*gW*hW*5P*iW*jW*kW*lW*mW*nW*oW*pW*qW*rW*sW*tW*uW*vW*-l%i.%^5#!5#-f%LR#Y7#!5#A7%[e%Iq#*5#:l#z0#Yn#0,$q'$E7#E7#|@$OB$CC$EC$pD$_O#Fb+C7##t*)6+>6+In$ ;$;f+-l#qq#hf#df#V4#Nn#w+{k@|=@0=@>B+s;@2T+2 @R,+hF$}{#hX+vp#5$@5$@5$@4G+4G+4G+5&@5&@yM@yM@yM@4G+E@@K #E@@2T+e^@K,@G6@L,@+q+h-$!r&Zu${Y$po$7f$hg$qk$<}$ef% d%ht%qw%k7%lo&%G$5j$iF@]}$|:$G($.%%d@%<+%[z$Ig+-_+ 5$;_+y:+vT#vT#y:+;/+8g$-k$Ri$!x$+O$+O$+O$+O$.O$&w$ v$)r$)r$)r$)r$Ft$Ft$Ew$Ew$1s$,t$,t$,t$1s$Ew$wW*wW*wW*wW*s;&s;&.~&.~&.~&&w$$w$#w$gc@fc@gc@_a@&w$&w$&w$&w$&w$&w$&w$&w$Ju$nt$vo$vo$vo$vo$nt$)r$.r%M3&4q&2r$V>${e%l7$q0$F4@A6@f}@ti%ti%f}@c1@uG+K2&Na$`0$lt$Y4@fY#19@uQ$aP$aP$aP$tQ$sQ$pR$bC$bC$6k@`6@3}@hc@:a@'$>'$>'$9)$9)$Lx#XA#XA#4v#yb#yb#s<@s<@c&@c&@c&@c&@G6@G6@c&@c&@G6@G6@G6@gY#gY#gY#G6@G6@G6@G6@G6@G6@a$@a$@wr+wr+L@+6T+e^@K@@Z.@0&@9$@mq@k#$mq@H@@cB@DD+|#%!K@!K@>K@YK+YK+YK+4G+4G+5$@5$@jX+jX+jX+fX+gX+gX+CI+7V@nZ@]N#R[#R[#3:%o&%~l$!I$!H$-I$S!$-I$!H$)H$l`%Lp#T5+Lp#l`%n>%l`%Jq@{B+>m+bk@c#@DO#5T@@/%pW$jE$A[+g_+Xe%xW*GV*yW*Vx*zW*W~&FJ*AW*BW*CW*DW*EW*FW*GW*1&%Tw.#.#+c&8- HW*OZ@]1%S}%I}+>H.6z+'C+vA*1p%+X+lx@u{@Xw&TO&)m*)m*!D+/{ *$@*$@*$@/{ h~ ~ *~@Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.dl.dl.dl.dl.dl.dl.dl.dl.T_+G|@7P.oh.oh.7P.G|@T_+T_+$(+xc+Ea+Ea+xc+$(+T_+T_+xc+5A.]! 5A.xc+G|@7P.oh.oh.7P.7P.Kh+G|@G|@G|@T_+$(+$(+$(+xc+xc+Ea+Ea+T_+G|@Kh+7P.oh.7P.7P.7P.l7 l7 }f.}f.bH@aH@aH@Bz$aH@}f.l7 }f.aH@aH@bH@l7 m|.m|.m|.m|.m|.m|.m|.m|.{'$m|.V&$m|.f+#35+f+#R~$$(+$(+$(+$(+$(+$(+$(+$(+7P.7P.Kh+G|@$(+xc+", "~_ &_ &_ &) &) %% %% j% j% $9.$9.5!.5!.5!.5!.5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% v% f% 5% 4% 4% 5% f% v% f% 5% 4% %% ~% %% 4% 5% v% f% 5% 4% 4% 5% f% v% v% v% f% f% f% 5% 5% 5% 7% j% j% j% f% v% v% v% &) &_ 5! 4{ 4{ 5! ,;.3{ 2{ ~_ n3 &5 &5 n3 ~_ &_ &) &_ &5 W_ W_ &5 &_ &) v% v% v% v% v% v% v% v% v% v% f% f% f% v% I> fL.v% fL.w4.fL.v% v% I> w4.f% v% v% I> fL.fL.w4.w4.v% v% I> I> I> fL.fL.fL.a, w4.I> v% f% v% I> I> fL.fL.fL.w4.w4.a, a, a, w4.w4.w4.w4.fL.fL.fL.-h ac 5[ 5[ 5[ 5[ 5[ 5[ 5[ * ui ui * * ui ui =] w4.5v@5v@5v@6v@6v@6v@6v@7v@7v@4z X5 R6 R6 v.+;p.{_ 8H.xj+cl+a, w4.8H.xj+a, a, a, a, a, a, a, a, |x.;b.{_ {_ {_ ;b.O9.6}%O9.|x.|x.;b.;b.|x.|x.O9.)O )O Es Es ':+':+':+-J.#9.#9.#k.#k.#k..^C.^C.[M@[M@10*yH.e1*mX.R|*q' &J.U& vZ *9 3O$el PC.y{%|B*%^%kS*m]@D>@IW*RQ*>9*M%#Y<#!_#Y<#o1@{R@G}$p1@f>@[&#[&#[c@9e@[c@'>+ki@ki@W,@_-+_-+_-+>>+.*+A0%B%%km$&c$&c$/a$pr%pr%4v$4v$4v$(a$7v$qr%qr%qr%ar$ar$]m$ln$%u$%u$nw$nw$Hs$Hs$Gs$,H$Js$Js$;u$;u$Ej$,p$_8$47$47$47$d9$d9$WL$WL$WL$WL$~J$~J$~J$~J$~J$~J$~J$~J$~J$~J$~J$~J$%/$%/$%/$%/$%/$%/$%/$jF$}{#fX@fX@fX@CI+CI+5&@5&@5&@5&@2 @2 @R)@R)@R)@R)@ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+ZK+lX+lX+9G+3 @;B+Y.@(w+(w+_w+_w+J@@J@@O,@0$@L@@K@@0&@4 @4 @4 @4 @4 @4 @4 @(w+my+ny+_w+&N+;m+&N+(w+Rt+Rt+my+ny+ny+4 @mq@mq@G@@G@@6$@6$@CU$CU$_^$_^$DO@DO@k#$P)@a=@jb#,w+,w+1R+oy+Il+Qt+9$@^K@DM@|{# K$4($17$7v$D~&$w%Nt$6w$uy%|(%9M@>9@']$@ +:-+/ %ZJ#VX.+$#dZ.20#ii@Xv+b=#X.+U,@0i+'}@ai+ai+q$@q$@ h+q$@W-$O2@Zl+ o+1P#dk%{f+)f+2i#kf#nf#F~$}E*`D*JD*5l#8L*Ze%(r*Nx*{C*JW*KW*LW*MW*ww#'E*NW*OW*vR*PW*QW*RW*SW*TW*UW*VW*1U*WW*XW*YW*uM*5A*[w#Kq#Lq#A7%$Q#Y7#U7#'5#T7#%K#*5#RL#.(%9,$0,$E7#E7#E7#8,$AC$DC$DC$pD$:O#Fb+gw$)w#>6+>6+In$In$-f+;f+Vl+;f+w+{k@|=@O)@>B+t;@kX+4G+CI+}{#_P+vp#!k#gX+5$@5$@4G+4G+4G+5&@5&@R,+yM@yM@4G+E@@E@@5$@$G4@uG+`0$`0$lt$31@M<@fY#19@19@tQ$tQ$EZ$EZ$pR$pR$bC${`#3}@3}@L<@hc@:a@K@5$@5$@5$@jX+jX+5$@5$@gX+gX+fX+nZ@7V@nZ@yA#]N#S[#S[#yU#lw$~l$!I$!H$-I$S!$-I$!H$)H$n>%/R#Lp#Lp#l`%n>%/R#RS#{B+>m+bk@c#@DO#{=#@/%>t*L+*A[+g_+`W*xW*GV*yW* X*uw*Il*(I*.X*+X*CW*DW*lD.Ge.`>*1&%@X*#.##X*O% x*.+R@T3$k}+R`%Tp*N}.vA*|r%1p%+X+lx@Be+`E&TO&)m*xe#/{ |m.|m.|m.|m./{ Bj.h~ |m.|m.|m.|m.|m.|m.|m.T_+aH@aH@bH@bH@}f.}f.l7 l7 bH@bH@bH@bH@bH@bH@bH@m|.';$pK+FG*FG*23+';$d #u]#Kh+G|@dl.q9+q9+dl.Di*1m.P] bH@}f.l7 l7 }f.bH@aH@aH@bH@bH@bH@}f.l7 l7 l7 FA+FA+FA+FA+FA+FA+FA+FA+P] P] J; J; J; |f.|f.r4@iy.b%@b%@,M+6P.M<+P] Q] Q] P] dl.jy.ok.H0@C! >~ dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.$(+T_+G|@Kh+Kh+G|@T_+$(+G|@T_+$(+xc+xc+$(+T_+G|@T_+$(+Ea+5A.Ea+$(+G|@7P.7P.7P.Kh+Kh+G|@G|@T_+T_+T_+T_+T_+$(+$(+xc+xc+xc+5A.Ea+xc+$(+T_+T_+$(+$(+}f.}f.}f.bH@bH@bH@bH@bH@aH@}f.l7 }f.aH@aH@bH@l7 {'${'${'${'${'${'${'${'$R~${'$m|.{'$f+#-V@35+R~$$(+$(+$(+$(+$(+$(+$(+$(+G|@G|@T_+$(+$(+xc+", "~_ &_ &_ &) &) %% %% 7% 7% 5!.5!.$9.$9.$9.$9.5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% af.g% *_ *_ *_ *_ g% af.QB@af.g% R_ R_ -H.-H.R_ f% 5% 4% 4% 4% 4% 5% f% v% v% f% f% f% 5% 5% 5% i% i% i% h% g% g% af.af.=_ =_ [4 W5 W5 [4 'i.}4 [4 A^.A^.X_ X_ A^.A^.0c 0c A^.X_ l. l.X_ A^.0c af.af.af.af.af.af.af.af.af.af.QB@QB@QB@af.g% *_ v% fL.w4.fL.v% v% I> w4.I> I> I> I> I> fL.fL.fL.v% v% I> I> I> fL.fL.fL.fL.I> v% f% f% f% f% v% v% v% I> I> fL.fL.fL.w4.8H.8H.a, w4.fL.I> v% u% ac 5[ 5[ 5[ 5[ 5[ 5[ 5[ * ui ui * * ui ui =] a, .l..l..l.@[+@[+@[+@[+ l. l.R6 R6 R6 ;p.sD#;p.;b.8H.xj+cl+a, w4.8H.cl+cl+cl+cl+cl+cl+cl+cl+cl+6}%6}%O9.|x.;b.|x.|x.O9.O9.|x.|x.;b.;b.|x.|x.O9.Es Es Es si ':+-J.-J.-J.#9.#9.#k.#k.#k..^C.^C.[M@[M@10*yH.e1*mX.R|*gf.&J.a* $X*/c 3O$;: P0*Uz p]%g<@_D%pP*m]@bW*{8*!1$(=${R@o1@M%#M%#o1@ZO@KZ@^i@[&#[&#[c@ia@9e@[c@J.+J.+S)@W,@.*+.*+U`$W,@A0%B%%km$&c$&c$/a$pr%pr%4v$4v$(a$(a$qr%qr%qr%c/$Tj$Tj$ar$ar$=c$%u$Hs$=J$Hs$Hs$Gs$,H$Js$Js$;u$;u$Gs$,H$a8$%K$c8$c8$c8$c8$!I$!I$+;B+_w+_w+my+_w+J@@6T+b~@b~@O,@J@@Z.@ny+ny+ny+ny+ny+ny+ny+(w+my+ny+my+&N+;m+&N+_w+Rt+ED+my+my+my+my+I@@I@@G@@G@@G@@G@@UR$UR$UR$UR$6$@6$@mq@>B+0=@6o@hy+hy+1R+oy+Il+:w+9$@^K@DM@or&>J$bv$`H%7v$D~&mV*Nt$'v$uy%|(%9M@>9@']$@ +:-+/ %U,+A)+#*%[f+6]+W_@hi@) +Q2@6y+Q@+)[+ai+q$@(_+(_+pd+pd+Qn+qe#Yl+vb+gJ#bd%Of$!f+)l#s0#of#F~$}E*`D*_u*5l#Sf%Sf%Tf%nA*$B*CQ*%X*GA*qC*UP*&X**X*=X*-X*;X*>X*,X*'X*~N*)X*!X*~X*{X*(B*zJ*{z*Mu*^5#~5#]E#95%$Q#U7#U7#'5#T7#9<$[l#ei#j(% (%9,$E7#E7#8,$8,$pD$0_%0_%fF$^ %^ %`3+B7#>6+>6+In$7q$7q$7q$W+$fd+w+{k@|=@O)@>B+t;@kX+jX+gX+iX+vp#vp#!k#gX+5$@5$@4G+4G+4G+5&@5&@R,+R,+R,+4G+jX+jX+5&@f^@b&@cr+>'@Zp+4(@AT#fo%B'%A**6u$d#%7f$pk$qk$R<$ d%]X*Ir%u %3j$pm&.S$iF@]}$}:$[:$_]$}+%[+%Md$Ig+-_+ 5$;_+y:+vT#vT#y:+;/+8g$5l$5l$+O$$AT#31@Y4@Y4@Y4@M<@fY#fY#fY#qR$qR$qR$qR${`#{`#{`#{`#EZ$19@uQ$uQ$|T@|T@|T@|T@%7@%7@[R+]V+]V+rI+oI+oI+0s#0s#0s#0s#49@4k#4k#4k#59@4v#XA#Kx#Kx#Kx#Vv#G6@gY#gY#G6@c&@c&@s<@z$+z$+c&@c&@G6@G6@G6@gY#gY#gY#G6@G6@G6@G6@G6@G6@a$@a$@O,@O,@J@@e^@e^@e^@e^@_w+8$@x;@,T@DD+x;@8G+w;@]K@R)@2 @YK+4G+5$@jX+jX+4Z+E@@jX+gX+2R+2R+gX+nZ@M+#nZ@yA#]N#]N#^N#^N#zA#N1#!l$)H$!H$-I$-I$-I$-I$!H$S!$n>%/R#/R#l`%l`%Lp#}7@{B+fi@bk@bk@r$+r$+@/%u##JN*L+*4:@`W*xW*^X* X*K9*uw*Il*(I*.X*/X*(X*_X**W*xb.Z,*e/%:X*+pK+pK+';$d #u]#:{+7P.Kh+Ai.Ai.Ai.Ai.QJ*8Y+Ai.T_+$(+$(+$(+$(+T_+G|@G|@G|@G|@T_+T_+T_+$(+$(+P] P] P] P] P] P] P] P] P] P] P] J; |f.|f.[y+GA+iy.b%@b%@,M+6P.M<+P] Q] Q] Q] dl.q9+ok.ok.H0@H0@q9+q9+q9+q9+q9+q9+q9+q9+dl.dl.dl.dl.dl.dl.dl.dl.xc+$(+$(+T_+T_+$(+$(+xc+G|@G|@T_+$(+$(+T_+G|@G|@G|@T_+$(+xc+xc+T_+Kh+7P.G|@G|@T_+T_+T_+$(+$(+$(+G|@G|@T_+T_+$(+$(+$(+$(+]! 5A.Ea+xc+$(+xc+xc+xc+bH@bH@bH@bH@bH@}f.}f.}f.aH@}f.l7 }f.aH@aH@bH@l7 :{+:{+:{+:{+:{+:{+:{+:{+h]@:{+u]#:{+h]@ZW+h]@v]#$(+$(+$(+$(+$(+$(+$(+$(+xc+xc+xc+xc+xc+xc+", "~_ &_ &_ &) &) %% %% r: r: 6!.5!.$9.l#@l#@l#@5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% g% g% g% *_ *_ g% g% g% QB@af.g% g% *_ *_ *_ *_ 5% 4% 4% 4% 4% 4% 4% 5% v% v% f% f% f% 5% 5% 5% i% i% h% h% g% g% g% g% =_ 0c [4 [4 [4 [4 8M }4 W5 A^.A^.X_ X_ A^.A^.A^.A^.X_ 7v@ l. l.7v@X_ A^.af.af.af.af.af.af.af.af.af.QB@4=+4=+4=+af.*_ -H.v% fL.w4.fL.v% v% I> w4.fL.fL.fL.I> I> I> I> I> v% v% I> I> I> fL.fL.fL.fL.fL.I> v% v% v% v% v% f% f% f% v% v% I> I> I> a, a, w4.w4.fL.fL.I> =] ac 5[ 5[ 5[ 5[ 5[ 5[ 5[ * ui ui * * ui ui =] 8H.>H.>H.>H.>r+>r+>r+>r+#y##y#;p.;p.;p.;p.sD#;p.|x.8H.cl+8H.8H.a, 8H.8H.cl+cl+cl+cl+cl+cl+cl+cl+uq. F.6}%O9.O9.|x.|x.|x.O9.|x.|x.;b.;b.|x.|x.O9.Es Es si si ':+-J.-J.-J.#9.#9.#k.#k.#k..^C.^C.[M@[M@10*yH.e1*mX.R|*Mi.kV*|* LC#vO+3O$Ex 9u {Z+,Q GL ]I@>T*=z*|X*XD*RI&ij*(=$m #(h$m #(=$KZ@f>@+<+Nu#Nu#9e@ia@ia@9e@v<@J.+S)@W,@W,@W,@U`$S)@A0%B%%km$&c$&c$/a$pr%pr%(a$(a$(a$80$qr%qr%c/$c/$,Z#,Z#,Z#Tj$>b$%u$=J$-J$Hs$Hs$Gs$,H$Js$Js$;u$;u$=I$=I$Gs$,H$;u$im$c8$c8$!I$!I$+*>+my+my+my+my+J@@6T+X{@X{@b~@6T+e^@_w+_w+_w+_w+_w+_w+_w+_w+my+ny+my+(w+&N+(w+_w+ED+ED+my+_w+_w+_w+<^#<^#DM@DM@DM@G@@Uv#Uv#Uv#Uv#G@@G@@^K@0G+0&@|=@@B+@B+#B+sr+g~+:w+9$@mq@G@@or&>M$%6$`H%7v$D~&mV*Nt$'v$uy%|(%9M@>9@']$@ +:-+/ %VH#+$#dZ..h+W_@%`$zT&X.+G&+K_@De@+k+//+q$@(_+pd+V&+pd+Qn+wp+'k+,k+^f+,d$0[+~i#)l#t0#B!$~/$}E*3l#=5#>5#+f%Sf%Uf%`A*6B*dD*1X*2X*3X*4X*5X*6X*7X*8X*9X*0X*aX*bX*cX*dX*!X*eX*fX*VK*1H*cz*Mu*^5#xt#gX*95%$Q#U7#;o#T7#T7#9<$6+>6+7q$7q$Es$gd+RR#H#$;f+~|+ed+B+lX+S,@v;@E@@fX+vp#[{#[{#!k#gX+5$@5$@4G+4G+4G+5&@5&@5&@5&@5&@5$@jX+5$@yM@f[+-(@)P+x&@w&@AT#[!$=r$}}$A**LU$d#%7f$pk$jS%R<$Sd$hM%]X*i7%j7%Q1$pm&iF@T]#s|$[M$'$>'$0s#4k#.5@.5@t9#gh#gh#pe#Kx#Kx#Vv#gY#gY#-_#-_#gY#G6@s<@z$+!B+!B+c&@c&@G6@G6@G6@gY#gY#gY#G6@G6@G6@G6@G6@G6@a$@a$@L@@L@@K@@e^@e^@J@@J@@(w+8$@x;@,T@,T@w;@R)@w;@)K@5G+2 @4G+5$@jX+E@@| @| @J #E@@2R+CI+CI+2R+M+#mZ@yA#]N#]N#]N#^N#zA#N+#BT$c9$)H$!H$-I$-I$-I$-I$-I$-I$n>%/R#/R#l`%/R#T5+oX+Tx#fi@m6+ji@fm@r$+FJ$u##JN*HS#4:@`W*uw*^X* X*qH$+h%hX*iX*jX*kX*(X*SE.lX*ON*mX*s!&v,@nX*oX*>= pX*01+7$+$P%R`%%P%t=+%c%1p%1p%gJ%z$$Be+)<*)m*}X*xe#ok.$(+G|@7P.7P.7P.G|@T_+G|@G|@G|@G|@G|@G|@G|@G|@}f.}f.}f.}f.}f.}f.}f.}f.aH@aH@aH@aH@aH@aH@aH@V&$';$S>+S>+x}*d #u]#u]#:{+7P.Kh+1m.1m.1m.1m.QJ*8Y+dl.T_+T_+$(+$(+T_+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@J; J; J; J; J; J; J; J; |f.|f.J; J; J; J; J; 6P.iy.b%@b%@,M+6P.M<+P] Q] Q] Q] Ai.dl.H0@ok.ok.ok.jy.jy.jy.jy.jy.jy.jy.jy.dl.dl.dl.dl.dl.dl.dl.dl.$(+$(+$(+T_+T_+$(+$(+$(+G|@G|@G|@G|@G|@G|@G|@G|@Kh+G|@T_+T_+T_+G|@Kh+7P.$(+$(+$(+$(+$(+xc+xc+xc+G|@G|@G|@T_+T_+$(+$(+$(+Ea+Ea+$(+T_+T_+T_+$(+$(+Bz$aH@aH@bH@}f.}f.l7 l7 aH@}f.l7 }f.aH@aH@bH@l7 v]#v]#v]#v]#v]#v]#v]#v]#M8@v]#:{+v]#M8@ZW+M8@v]#$(+$(+$(+$(+$(+$(+$(+$(+5A.5A.5A.Ea+Ea+xc+", "~_ &_ &_ &) &) %% %% r: r: 6!.5!.$9.l#@l#@l#@5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% *_ g% g% g% g% g% g% *_ R_ *_ *_ g% g% af.af.af.4% 5% 5% 5% 5% 5% 5% 4% v% v% f% f% f% 5% 5% 5% h% h% h% h% g% g% *_ *_ 0c 0c [4 }4 }4 [4 8M [4 W5 A^.A^.0c 0c A^.A^.A^.X_ X_ 7v@7v@7v@7v@X_ X_ af.af.af.af.af.af.af.af.af.QB@4=+4=+4=+af.*_ -H.v% fL.w4.fL.v% v% I> w4.fL.fL.fL.I> I> I> I> I> v% v% I> I> I> fL.fL.fL.w4.w4.w4.w4.fL.I> I> v% 5% f% f% f% v% v% I> I> I> I> fL.fL.w4.w4.a, Es ac 5[ 5[ 5[ 5[ 5[ 5[ 5[ * ui ui * * ui ui =] 8H.>H.>H.>H.>r+>r+>r+>r+#y##y#;p.;p.;p.;p.sD#;p.8H.B{$Vl.B{$B{$A{$B{$B{$A{$A{$A{$A{$A{$A{$A{$cl+ F. F.6}%6}%O9.|x.|x.;b.O9.|x.|x.;b.;b.|x.|x.O9.si si si -h -J.-J.l3 l3 #9.#9.#k.#k.#k..^C.^C.[M@[M@10*yH.e1*mX.R|*}i$N= := FE#.{ 3O$ N*5< ^y.h_.J%+][@Y,&yC.WD*qX*wq*RI&hj*wj$ss%wj$:-@f>@f>@+<+Nu#Nu#9e@ia@ia@9e@v<@J.+S)@W,@W,@W,@U`$S)@A0%B%%km$&c$&c$/a$pr%pr%(a$(a$80$80$qr%c/$c/$c/$,Z#,Z#~}%,Z#Sj$=c$=J$-J$Hs$Hs$Gs$,H$Js$Js$;u$;u$=I$-J$=I$'H$Gs$a8$im$c8$!I$!I$!I$!I$+Z.@}=@#B+#B+#B+sr+g~+9@']$@ +:-+/ %/-+T,+u4#.h+W_@%`$zT&X.+G&+K_@De@+k+//+q$@(_+pd+pd+pd+Qn+wp+'k+%4+^f+,d$0[+~i#cF$p'$~/$X:%7I*3l#6l#{2#+f%O0#nA*%f%EA*[J*rX*sX*tX*uX*vX*wX*xX*yX*zX*AX*BX*CX*uG*DX*EX*FX*fX*tX*GX*CT*+f%^5#xt#gX*B7%Wt%;o#;o#T7#;M*Q[$=o#nd$nd$(O#PB$|@$8,$I~%Fb+HX*G0+dF$dF$j8+E#$l%$ 4+.I#.I#7q$7q$Es$gd+RR#H#$;f+.4+ed+Nn#Qg+=l#By#ZA+t&@8X+sD+I6@fy+.B+#k+#k+;w+;w+#B+@B+|=@,B+>B+lX+|V+v;@E@@4Z+!k#[{#[{#00$gX+5$@5$@4G+4G+4G+5&@5&@4G+5&@4G+jX+E@@5$@r8+I:+z$+mI+K2@c1@X>$7)$=r$i>$]n$LU$Hw$7f$:;$jS%4:$ff%hM%]X*i7%2:$4H$3H$iF@T]#i*%IX*_L$Z~$[+%th$Hg+x:+ 5$;_+y:+vT#vT#y:+;/+8g$!E$Qi$t$>t$>t$>t$>&%>&%>t$uV#Rl$Sp$uo$7G*7G*7G*uo$uo$Ju$Ju$&w$Ju$7S$$w$_a@6k@_a@7m@Ju$Ju$Ju$Ju$Ju$Ju$Ju$Ju$&w$Ju$nt$nt$nt$nt$Ju$&w$&w$#-&~x$&w$;r$4U&wo$1s$1s$}b$E5&7)$L2&Z4@+r%L2&fY#{`#{`#{`# 7@ 7@ 7@ 7@4}@4}@Y4@Y4@M<@fY#fY#19@6*$6*$XH@XH@XH@|T@v~@v~@%7@]V+rI+pI+sI+sI+ZM+oI+>'$>'$59@$7@4k#.5@t9#t9#gh#yb#pe#Kx#c&@G6@gY#gY#-_#-_#gY#G6@s<@z$+!B+!B+c&@c&@G6@G6@G6@gY#gY#gY#G6@G6@G6@G6@G6@G6@a$@a$@a&@P,@Z.@K@@e^@J@@J@@&N+I@@x;@]K@RQ@!K@w;@>K@)K@2 @5&@4G+5$@fX+4Z+| @lZ@4Z+fX+gX+2R+BO@7V@nZ@M+#]N#]N#^N#^N#zA#DA#H_@U4$_8$!H$!H$!H$-I$S!$S!$k`%-I$n>%/R#/R#l`%/R#T5+oX+Tx#)}@nK@nK@fm@7]@FJ$7j**R#X $4:@JX*uw*^X*qH$KX*Hv*hX*tI*jX*LX*MX*NX*OX*PX*F^+{E.{~@nX*w1@]Z.QX*8$+8$+$P%%P%&0+WD@%c%Hc%Hc%gJ%z$$Be+)<*)m*}X*xe#ok.$(+G|@7P.7P.7P.G|@T_+$(+$(+$(+$(+$(+$(+$(+$(+bH@bH@bH@bH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@V&$';$S>+x}*x}*u]#u]#u]#u]#Kh+Kh+1m.8Y+8Y+1m.QJ*1m.H0@|m.|m.|m.|m.|m.|m.*$@/{ /{ /{ /{ /{ /{ /{ G|@|f.|f.|f.|f.|f.|f.|f.|f.%U.%U.[y+|f.J; Q] Q] YQ.iy.b%@b%@,M+6P.M<+P] Q] P] P] Ai.dl.C! H0@ok.ok.jy.jy.jy.jy.jy.jy.jy.jy.dl.dl.dl.dl.dl.dl.dl.dl.G|@T_+T_+T_+T_+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+G|@G|@T_+G|@G|@G|@xc+xc+xc+xc+xc+xc+xc+$(+G|@G|@T_+T_+$(+$(+$(+xc+5A.Ea+xc+$(+T_+$(+$(+$(+Bz$aH@aH@bH@}f.}f.l7 l7 aH@}f.l7 }f.aH@aH@bH@l7 v]#{**{**{**{**{**{**{**L8@KL${**{**A<$L8@KL$$.@$(+$(+$(+$(+$(+$(+$(+$(+]! ]! 5A.Ea+xc+xc+", "~_ &_ &_ &) &) %% %% 7% 7% 5!.5!.$9.$9.$9.$9.5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% *_ *_ g% af.af.g% *_ *_ l` -H.R_ g% af.af.af.g% 5% 5% f% v% v% f% 5% 5% v% v% f% f% f% 5% 5% 5% <4 <4 h% h% g% *_ *_ *_ A^.0c }4 }4 }4 }4 8M W5 W5 0c =_ =_ =_ =_ 0c A^.X_ X_ X_ A^.A^.X_ X_ X_ af.af.af.af.af.af.af.af.af.af.QB@QB@QB@af.g% *_ v% fL.w4.fL.v% v% I> w4.I> I> I> I> I> fL.fL.fL.v% v% I> I> I> fL.fL.fL.w4.w4.a, a, w4.fL.I> v% f% f% f% v% v% I> I> I> v% v% I> fL.w4.a, 8H.)O ac 5[ 5[ 5[ 5[ 5[ 5[ 5[ * ui ui * * ui ui =] a, .l..l..l.@[+@[+@[+@[+#y##y#;p.R6 R6 R6 ]b+X5 cl+B{$':+Vl.A{$#0+B{$Vl.A{$A{$A{$A{$A{$A{$A{$A{$|x.O9.O9.6}%O9.O9.;b.;b.O9.|x.|x.;b.;b.|x.|x.O9.si si si -h -J.l3 l3 l3 #9.#9.#k.#k.#k..^C.^C.[M@[M@10*yH.e1*mX.R|*RX*,O.b: {d*pP$3O$BM*dg*W3.AT*b$Hs$=J$Hs$Hs$Gs$,H$Js$Js$;u$a8$'H$=J$'H$'H$'H$,H$;u$im$!I$!I$!I$!I$9@']$@ +:-+/ %`&+t!$V0+(m@ii@5]+) +5 @6y+lK@4a@4a@q$@q$@(_+(_+(_+(f+7}@7}@,k+:6+^f+Of$0[+id+F0+o'$U:%v<%7I*-o#Q7#^5#TX*+f%nA*9v*tC*Lx*ly*Kx*UX*VX*WX*XX*YX*ZX*`X* Y*.Y*+Y*&C*@Y*#Y*$Y*%Y*Oz*&Y*CT*+f%^5#*Y*=Y*B7%Wt%;o#'c$;M*VB*3[%=o#_K#U!%OB$PB$8,$I~%I~%Fb+-Y*;Y*dF$dF$j8+l%$j8+ 4+.I#.I#In$7q$7q$7q$W+$fd+;f+.4+B)$ed+Pg+g0#2&@YA+t&@8X+sD+I6@fy+.B+#k+#k+;w+;w+#B+!w+|=@mX+>B+t$>t$>&%>t$>t$Rl$Sl$Gt$t`%5W*5W*5W*t`%t`%&w$&w$&w$nt$;o$7S$_a@6k@_a@Ld$nt$nt$nt$nt$nt$nt$nt$nt$Ju$nt$vo$vo$vo$vo$nt$Ju$H#*H#*H#*~x$ot$Qp$ZQ%-r$4U&:n$Ft$4q&M3&L2&L2&L2& 7@ 7@ 7@yV#yV#yV#yV#yV#21@4}@Y4@M<@fY#19@uQ$6*$6*$6*$XH@XH@XH@XH@%7@%7@5X+[R+rI+pI+sI+sI+oI+Ht+0s#0s#$7@$7@4k#4k#hh#hh#pe#pe#Kx#Kx#c&@c&@G6@G6@gY#gY#G6@c&@c&@s<@z$+z$+c&@c&@G6@G6@G6@gY#gY#gY#G6@G6@G6@G6@G6@G6@a$@a$@a&@P,@Z.@K@@K@@e^@e^@(w+I@@x;@RQ@ @%]K@!K@>K@)K@4G+5$@5$@jX+4Z+4Z+| @| @gX+gX+fX+fX+nZ@nZ@7V@gX@yA#yA#zA#zA#zA#DA#H_@U4$47$-I$!H$!H$-I$S!$k`%n>%S!$n>%/R#/R#l`%l`%Lp#{B+=t@)}@9Z.nK@AB@7]@>`+7j*>Y*X $,Y*JX*uw*'Y*qH$UO$bv*5H*tI*jX*)Y*MX*!Y*OX*~Y*@`.WL&{Y*D1@&& NK N4%8$+8$+tq.%P%&0+WD@jb%jb%Hc%gJ%z$$Be+)<*)m*}X*[R@H0@T_+G|@Kh+Kh+Kh+Kh+G|@xc+xc+xc+xc+xc+xc+xc+xc+bH@bH@aH@aH@aH@Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$d%$23+pK+S>+x}*u]#u]#d #d #G|@G|@1m.8Y+8Y+1m.Di*Ai.H0@*$@|m./{ /{ |m.*$@*$@*$@*$@|m.|m.|m./{ /{ G|@dl.J; J; J; J; J; J; J; %U.%U.[y+|f.J; Q] Q] YQ.iy.b%@b%@,M+6P.M<+P] Q] |f.|f.dl.Ai.>~ C! C! H0@q9+q9+q9+q9+q9+q9+q9+q9+dl.dl.dl.dl.dl.dl.dl.dl.G|@G|@T_+$(+$(+T_+G|@G|@$(+T_+G|@G|@G|@G|@T_+$(+G|@G|@G|@G|@T_+T_+$(+$(+xc+xc+xc+xc+$(+$(+$(+$(+T_+$(+$(+$(+xc+xc+Ea+Ea+{! {! 5A.Ea+Ea+Ea+Ea+5A.bH@bH@bH@bH@bH@}f.}f.}f.aH@}f.l7 }f.aH@aH@bH@R~$$.@jk@jk@jk@jk@jk@jk@jk@L8@KL$jk@jk@KL$KL${**r-@$(+$(+$(+$(+$(+$(+$(+$(+5A.Ea+Ea+xc+xc+$(+", "~_ &_ &_ &) &) %% %% j% j% $9.$9.5!.5!.5!.5!.5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% R_ *_ g% af.af.g% *_ R_ l` -H.R_ *_ g% *_ R_ -H.f% v% I> fL.fL.I> v% f% v% v% f% f% f% 5% 5% 5% <4 <4 <4 h% *_ *_ *_ R_ A^.0c }4 S_ S_ }4 8M W5 [4 =_ -_ ;_ ;_ -_ =_ 0c A^.A^.0c 0c 0c 0c A^.A^.af.af.af.af.af.af.af.af.af.af.g% g% g% af.QB@4=+v% fL.w4.fL.v% v% I> w4.f% v% v% I> fL.fL.w4.w4.v% v% I> I> I> fL.fL.fL.I> fL.w4.w4.w4.I> v% f% v% v% v% I> I> I> fL.fL.fL.fL.fL.fL.w4.w4.w4.si ac 5[ 5[ 5[ 5[ 5[ 5[ 5[ * ui ui * * ui ui =] w4.5v@5v@5v@6v@6v@6v@6v@#y#)i+R6 R6 X5 4z eH.4z xj+B{$':+Vl.A{$#0+B{$':+Vl.Vl.Vl.Vl.Vl.Vl.Vl.Vl.W_ {_ |x.O9.O9.O9.;b.;b.O9.|x.|x.;b.;b.|x.|x.O9.si -h -h -h l3 l3 w% w% #9.#9.#k.#k.#k..^C.^C.[M@[M@10*yH.e1*mX.R|*7H.*#+|].6>$fg 3O$Ne.(}+&U*We t:%a| az%)1%:k%_t*sz*qX*%g$%g$%g$57*QS*~5@p1@f>@[&#[&#[c@9e@[c@'>+ki@ki@W,@_-+_-+_-+>>+.*+A0%B%%km$&c$&c$/a$pr%pr%80$80$80$Q'$c/$po%po%po%]m$ar$,Z#j %T4$=k$Ms$Hs$Hs$Hs$Gs$,H$Js$Js$;u$a8$a8$nw$Hs$=J$'H$Gs$a8$a8$im$im$!I$!I$!I$!I$B+>B+O)@O)@ny+ny+K@@K@@L@@P,@a&@0=@K@@my+my+my+my+my+my+my+my+4 @O)@4 @_w+(w+_w+ny+Rt+Rt+my+ny+ny+4 @mq@mq@SQ@SQ@DO@DO@UR$UR$Uv#Uv#%o%%o%I@@;B+K@@ED+1R+1R+@B+1R+Rt+9@']$@ +:-+/ %k~+J1#z)+u4#I_@KL#b=#4]+U,@_/+3a@3a@q$@(_+(_+(_+U&+U&+VF#VF#vb+Yg+|/#{f+0[+id+F0+DC$E|%v<%7I*0v*Q7#[w#TX*+f%xz*$A*]Y*,K#Lx*[r#^Y*/Y*(Y*_Y*:Y*B+$fJ&(n$^n$qo$Hw$[}$:;$5:$:}$2:$ht%ht%2:$u %tF$Q1$%#$T]#O<$7Y*_L$Z~$<+%8Y*Hg+g($ 5$;_+y:+vT#vT#y:+;/+8g$Qi$5l$:V$+F$:V$+O$)O$sQ$_a@io@io@=3@=3@Sl$Sl$Rl$>t$>&%>&%>t$uV#Rl$=3@cs$GQ*ZW*ZW*ZW*GQ*GQ*#-&#-&Ju$nt$;o$7S$7m@6k@_a@Ld$nt$nt$nt$nt$nt$nt$nt$nt$vo$vo$4U&wo$wo$4U&vo$Qp$>r$4N&4N&4N&>r$;r$Qp$4U&nt$nt$nt$)r$)r$ v${x${x$$w$$w$#w$#w$cs$cs$cs$cs$21@4}@Y4@fY#OS#XH@`H@cc@|T@|T@|T@XH@%7@ZM@ZM@ZM@:R+5X+oI+sI+sI+ZM+gp+~G+49@49@4k#4k#$7@$7@gh#gh#Vv#Vv#Kx#Kx#c&@c&@s<@s<@c&@c&@c&@c&@c&@c&@c&@c&@c&@c&@G6@G6@G6@gY#gY#gY#G6@G6@G6@G6@G6@G6@a$@a$@P,@P,@Z.@K@@K@@K@@K@@my+I@@DD+RQ@`{%RQ@!K@>K@>K@jX+jX+jX+jX+4Z+4Z+4Z+4Z+CI+gX+nZ@mZ@mZ@nZ@gX@e'#gX@DA#zA#zA#AA#CA#a=#:8$37$-I$!H$!H$!H$S!$k`%l`%n>%/R#Lp#Lp#l`%n>%/R#uy+=t@J3+9Z.9Z.AB@7]@]i@;m$>Y**R#,Y*9Y*/x*Hv*KX*UO$&j*5H*hT%'i*)Y*MX*0Y*xb.aY*bY*WL&{Y*D1@7+ cY*#B#7M 7$+k}+&0+&0+t=+$0+$0+Hc%gJ%z$$Be+)<*)m*}X*[R@>~ T_+T_+T_+T_+G|@Kh+7P.$(+$(+$(+$(+$(+$(+$(+$(+}f.}f.}f.bH@bH@aH@aH@aH@Bz$Bz$Bz$Bz$Bz$Bz$Bz$d%$OP*FG*pK+x}*d #d #';$US+$(+T_+Ai.1m.1m.Ai.h)@q9+ok.*$@|m./{ /{ |m.*$@y$$y$$y$$y$$*$@|m.|m.|m.G|@Ai.P] P] P] P] P] P] P] J; J; J; J; J; J; J; r4@iy.b%@b%@,M+6P.M<+P] Q] Ov+%U.q9+Ai.*~@*~@>~ C! dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.G|@T_+xc+Ea+Ea+xc+T_+G|@xc+$(+T_+G|@G|@T_+$(+xc+T_+T_+T_+T_+T_+$(+xc+Ea+xc+xc+xc+$(+T_+T_+T_+G|@xc+xc+xc+Ea+Ea+5A.5A.5A.{! ]! 5A.Ea+xc+xc+Ea+Ea+}f.}f.}f.bH@bH@bH@bH@bH@aH@}f.l7 }f.aH@aH@bH@R~$x{ r-@r-@r-@r-@r-@r-@r-@A<${**r-@jk@{**{**r-@wE*$(+$(+$(+$(+$(+$(+$(+$(+xc+xc+$(+$(+$(+$(+", "~_ &_ &_ &) &) %% %% x% x% x% $9.7% 6!.r: r: 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% R_ *_ g% QB@QB@g% *_ R_ -H.R_ *_ *_ *_ -H.m` oG.f% I> fL.w4.w4.fL.I> f% v% v% f% f% f% 5% 5% 5% af.<4 <4 h% *_ *_ R_ R_ QB@g% =_ -_ -_ =_ 0c X_ =_ R_ l` m` m` l` R_ *_ af.g% *_ *_ *_ *_ g% af.af.af.af.af.af.af.af.af.af.g% *_ *_ *_ af.4=+@[+v% fL.w4.fL.v% v% I> w4.5% f% v% I> fL.w4.a, a, w% w% l3 l3 l3 -J.-J.-J.x% w% l3 -J.-J.w% j% 7% v% v% I> I> fL.fL.fL.w4.8H.a, a, w4.fL.I> I> v% si si si si si si si si =] Es Es =] =] Es Es =] fL.;H.;H.;H.4=+4=+4=+4=+)i+)i+ l. l.4z Q6 Q6 X_ xj+Vl.-J.Vl.A{$DU%A{$':+Vl.Vl.Vl.Vl.Vl.Vl.Vl.a, v% &5 {_ |x.O9.|x.;b.;b.O9.|x.|x.;b.;b.|x.|x.cl+-h UV -h UV l3 l3 w% w% #9.#9.#k.#k.#k.B#Tv*6.&Ok$Cn*Cn*gk*FB@~5@:-@KZ@+<+[&#[c@[c@%a@<-+ki@3W..*+_-+4[%4[%m~+_-+_-+:-+4[%D#$D#$=7$RA$RA$Wk$Wk$!U#!U#Tj$,Z#,Z#,Z#ln$ar$,Z#j %%*$T4$Rj$nw$Hs$Hs$Gs$,H$Js$Js$;u$;u$Rj$>b$Hs$=J$=J$Gs$,H$a8$%K$im$im$!I$!I$!I$!I$B+>B+*>+ny+my+K@@Z.@0&@a=@qt$ny+w)+ny+ny+ny+ny+ny+ny+my+4 @O)@4 @_w+(w+UQ@ny+_w+_w+my+ny+4 @t<@k#$E+$,_$,_$SQ@SQ@DO@W.@+W$6$@*n#<^#<^#_w+e^@Rt+Jl+Jl+{k@ED+_w+;B+x;@F@@W.@CM@}7@+l#%*$(a$ZD*mV*;]%Zk#tF%7%%LD+Y{@@ +YJ#m~+7P#'p$<{#IK$V0+(K@! +sd+/K@.@#:f+2]+2]+T.+(_+(_+l0+Y}+m0+5~+'-+s~@Yg+(6+cd+V4#id+o'$EC$v<%Y:%7I*0v*^5#a@$TX*fY*oV*gY*hY*[r#*M*9z#iY*jY*kY*lY*mY*'B*nY*2#_K#nd$ (%PB$PB$_O#BC$tY*gE$G0+dF$Gy# 4+Gy#id+QL#.I#In$ ;$ ;$Ly#C_$[T#df#.4+r:+dd+E:+=g$gi+$4+t&@8X+Tt+Yn+fy+.B+#k+up+#B+#B+)w+!w+,B+mX+lX++5$@fX+vp#hX+Z&+|T+5$@5$@>K@4G+4G+4G+5&@5&@5&@XK+pZ@hb#uY*gb#5Z+H@@a~@gp+O3#a{$F4@-'$1s%lp%[V%iS%Hw$d#%[}$dp$Y=$ef%R<$R<$R<$`B$K*$M1$UA%s|$t|$~o$6c${B$#.%8Y*vL$g($8g$;_+=Z#vT#I2$=Z#;/+8g$Qi$@F$+F$;o$+F$#w$&%G=%>t$vV#Sl$Ld$#w$s;&s;&s;&s;&s;&.~&.~&.~&Ju$nt$;o$7S$7m@_a@7m@$w$nt$nt$nt$nt$nt$nt$nt$nt$4U&`u$Ew$1s$1s$Ew$`u$4U&Qp$'r$ot$~x$~x$~x$~x$ot$&w$Ju$nt$vo$nt$Ju$&w$#-&7S$7S$7S$$w$Gt$cs$cs$cs$4}@4}@M<@fY#|T@`H@cc@fK@OS#WH@|T@29@%7@ZM@4k@^P+F,@:o+Ht+dr+sI+dr+gp+!G+9s#9s#.5@4k#$7@4v#4v#4v#4L#4L#Vv#c&@c&@s<@z$+z$+s<@Kl+c&@c&@c&@c&@G6@G6@c&@c&@G6@G6@G6@gY#P3#gY#G6@G6@G6@G6@G6@a$@a$@0$@L@@K@@K@@K@@K@@Z.@Z.@ny+CD+w;@ @%`{% @%]K@>K@>K@E@@E@@E@@E@@E@@fX+jX+fX+]-+BO@M+#~^#~^#M+#BO@1O#oZ@gX@{^#{^#yA#{^#gX@Wx$b>%S!$-I$!H$!H$S!$n>%l`%l`%Lp#T5+Lp#l`%6P#l`%8~#u4#.h+Q3#9Z.ca@AB@>`+vY*kz**R#wY*9Y*Kv%Hv*KX*xY*&j*mE*yY*9h*zY*AY*0Y*BY*CY*bY*DY*EY*FY*5& @t.[R@7$+k}+&0+S}%WD@$0+|.&|.&Hc%gJ%z$$3]&`E&xe#}X*[R@*~@G|@$(+$(+$(+G|@7P.oh.G|@G|@G|@G|@G|@G|@G|@G|@cI+cI+l7 l7 }f.bH@bH@bH@Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$x{+lt*US+';$d #';$US+23+xc+$(+dl.Ai.Ai.dl.q9+jy.y$$*$@|m.Bj.Bj.|m.*$@y$$6j+6j+6j+y$$*$@*$@|m.T_+Ai.P] P] P] P] P] P] P] |.+FA+Q] P] |f.[y+Ov+Ov+iy.b%@b%@6P.6P.M<+P] Q] 8}.6g+q9+Ai.*~@*~@*~@>~ Ai.G|@Ai.G|@Ai.G|@Ai.G|@dl.T_+dl.T_+dl.T_+dl.T_+$(+xc+Ea+5A.5A.Ea+xc+$(+Ea+xc+$(+T_+T_+$(+xc+Ea+$(+T_+T_+T_+$(+xc+Ea+5A.xc+xc+$(+T_+T_+G|@G|@Kh+Ea+Ea+Ea+5A.5A.]! ]! ]! xc+$(+T_+G|@G|@G|@G|@T_+l7 l7 }f.}f.bH@aH@aH@Bz$aH@}f.l7 }f.aH@aH@bH@R~$d #h^+h^+h^+h^+h^+h^+h^+A<${**r-@r-@jk@jk@h^+J> $(+$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+T_+", "5% 5% f% f% f% v% v% 5% %% d( O~.4% j% 4% ~% 5% &_ &_ &_ &_ &_ &_ &_ ~_ ~_ &_ &_ &) $% $% $% %% 4% f% v% I> v% f% 5% 4% 4% %% ~% ~% %% 4% 4% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 n3 n3 n3 n3 n3 n3 v% g% g% g% g% h% h% h% h% <4 <4 PI.PI.PI.Hu+Hu+Hu+l3 l3 l3 l3 l3 l3 l3 l3 w% w% w% w% w% w% w% w% g% 0c 0c 0c 0c 0c 0c 0c =_ 0c 0c 0c 0c 0c 0c =_ X_ X_ X_ X_ X_ X_ X_ X_ 0c A^.A^.X_ X_ A^.A^.g% cp.N7._r+xX%xX%N7.%0+$B#N7.%0+$B#eO@eO@$B#%0+#9.l3 v% v% v% I> fL.w4.a, w4.w4.w4.w4.w4.w4.w4.w4.l3 -J.':+Vl.Vl.':+-J.l3 B{$Vl.-J.l3 l3 l3 ':+Vl.a, 8H.cl+xj+l`.xj+xj+xj+cl+8H.8H.8H.|x.|x.|x.8H.cl+8H.8H.a, a, 8H.8H.cl+a, a, a, a, a, a, a, a, 6v@6v@@[+>r+>r+Tp*I}+I}+>r+>r+>r+>r+>r+>r+>r+8H.sS ph#{D {b+{t.j}+l#@l#@cp.cp.91+QI.QI.$;&Ay.Ay.6R@QI.$;&_r+b #GY*ng X# q' [% |].V`+5o R-%.6.2r+{Z+Nw%c/%kT@f_.)1%>T*37*(t*fj*X'*fk*fk*fk*vX@m>&hk*f>@+<+[&#%a@%a@BM#4)#ki@ki@S)@S)@S)@S)@XX.S)@hB@O@@f&@d=@d=@d=@~I$C)+4d$4d$4d$4d$)g$)g$)g$)g$%u$=c$>b$Sj$09$90$N)$N)$,H$,H$Js$Js$Js$Js$Ks$Js$Dj$)g$-c$-c$-c$Dj$Dj$Dj$Dj$a9$Ej$c9$_8$47$37$b>%!l$!l$!l$!l$!l$!l$WL$WL$kF$kF$/H$/H$/H$/H$GO$/H$9e#nZ@7V@7V@2R+CI+5&@R,+4G+5&@5G+5G+R)@!K@RQ@ @%9G+0G+0G+0G+0G+0G+0G+0G+>B+>B+>B+>B+>B+>B+>B+lX+++ny+my+_w+J@@J@@e^@e^@be#t!%A%%F@@6G+T!$-,$u_%IK$<{#Di$RA$~m$zx$'Z#@B$@B$T)@O:+D)+.*+C)+7G#*,$cH#Lq@z)+z)+}_+! +em@x'#6y+_/+R.+3a@~V+$5@}6+[=@m0+o8+o8+)]+XA+Rl+~_+/6+.I#`3+CC$OB$Y:%l1$OR#Ff#]5#:z#!C#{V*HY*IY*/G*JY*KY*LY*MY*NY*OY*PY*QY*RY*SY*TY*UY*VY*SO*SM*WY*XY*{I*cz*Tf%Jf#]2#Jq#ot#Q_$F4%G[%_}%E4%P7#,5#Kq#Jq#~2#@o##o#Hq#&o#OR#(O#PB$(C#OB$CC$DC$F_$^H$id+id+^6+^6+fd+fd+7q$7q$:@$In$+:P+,K@J #&e#WK+BM@2 @2 @w;@YK+YK+>K@5Z+5Z+&&#~J$WL$hm$tr$d9$I$+7T+pg@mm+#s+`r+J2@.9@d6$E5&,t$'t$Qr$_a%_a%fC%Iw$5Z$3)%i#%S0%x|$@7%1}$gu%>y$#x%R)$DZ$-y$G=%vV#Ld$/]+Ri$;/+#F$I2$_a@7m@_a@6k@fc@fc@gc@11@_a@io@7m@Ld$.O$.O$!x$$w$:V$7S$_V$;o$vy%0p$(V$;o$+F$$w$!x$#w$&w$&w$#-&#-&.~&iR$bC$bC$;o$7S$$w$.O$.O$#w$$w$7S$ZQ%Qp$;r$ot$&w$Ju$Ft$:n${x$}b$e6$}b$-'$V>$A6@6)$cs$.O$iR$bC$bC$:@MU#OS#OS#+7@>]@),&@7@39@39@@7@8s#Ip#s9#.5@t9#4k#hh#hh#hh#$7@$7@$7@$7@gh#gh#gh#yb#yb#yb#z$+s<@s<@-(@b&@b&@uI+Q0+PK+PK+Kl+(P+c&@c&@-_#gY#Y|#Ox#Ox#Y|#Sw&Q6#a$@a$@a$@a$@a$@0$@0$@0$@X{@J@@Z.@ny+my+my+O)@R,@!K@,K@[H#[H#)K@>K@)K@[H#,K@,K@,K@,K@,K@E@@,K@E@@hX+Wx$00$00$!k#Qm#Qm#YP$WK+WK+zM@zM@zM@XK+6G+{K@)I$kF$kF$jF$I$+-,$46+46+Kq@Kq@Kq@8~#8~#Tx#uy+uy+mJ#mJ#[/+k9@oX+}3@}3@zr+L+*X $wY*JX*9Y*,G%UO$/x*xj$YI*YY*ZY*`Y*NX*OX* Z*.Z*&]%~n +Z*@Z*S 3H.Yt.+n+#Z*EU%,r+6l%6l%Hc%Hc%=|$x*${y%`b&`b&|m.fd%A_@T_+T_+T_+G|@G|@Kh+Kh+Kh+T_+G|@G|@Kh+Kh+G|@G|@T_+T_+$(+xc+xc+xc+T_+Kh+oh.$(+7P.Kh+xc+xc+G|@G|@Ea+$(+u]#T_+G|@G|@Kh+7P.7P.7P.7P.oh.y4&y4&oh.7P.7P.Kh+y4&]@+]@+oh.Kh+G|@G|@Kh+Kh+G|@T_+$(+$(+Kh+oh.T_+xc+Ea+Ea+$(+T_+$(+Ea+Kh+T_+xc+xc+$(+$(+Ea+ko.NU+NU+NU+bH@bH@bH@T_+T_+G|@/{ |m.|m.B#@{y%{y%*$@G|@';$G|@';$G|@';$G|@';$$(+d #T_+';$G|@US+7P.7P.T_+T_+T_+T_+T_+T_+T_+T_+Ea+Ea+$(+$(+$(+Ea+]! {! cI+cI+cI+cI+cI+cI+cI+cI+13+NM+l7 aH@9g.9g.Bz$aH@y4&7P.G|@T_+$(+$(+T_+G|@Kh+G|@G|@T_+$(+$(+xc+xc+m|.{'$R~$f+#f+#R~${'$m|.f+#f+#R~$R~${'${'$m|.m|.US+';$u]#:{+:{+u]#';$US+';$';$';$';$';$';$';$';$T_+$(+xc+Ea+Ea+xc+$(+T_+T_+G|@Kh+Kh+G|@$(+", "5% 5% f% f% f% v% v% 5% 4% ~% %% 5% f% 4% ~% &_ &_ &_ &_ &_ &_ &_ &_ ~_ ~_ ~_ &_ &_ &) &) &) %% 4% f% v% I> v% f% 5% 5% 4% 4% %% %% 4% 4% 5% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ n3 n3 n3 n3 n3 n3 n3 n3 g% g% g% g% h% h% h% h% #9.#9._r+_r+_r+xX%[M@[M@j}+j}+j}+j}+j}+j}+j}+j}+j}+j}+j}+j}+j}+j}+j}+w% g% 0c 0c 0c 0c 0c 0c 0c A^.A^.0c 0c 0c 0c A^.A^.X_ X_ X_ X_ X_ X_ X_ X_ 0c A^.A^.X_ X_ A^.A^.g% N7.I1.PK.[M@PK.I1.$Z*K7.L7.L7.$Z*K7.K7.$Z*L7.M7.l3 v% v% v% I> fL.w4.a, w4.w4.w4.w4.w4.w4.w4.':+<4 cp.[3+|5+|5+[3+cp.#9.w7+|5+[3+cp.cp.[3+|5+w7+w4.a, 8H.cl+xj+cl+cl+cl+a, a, a, a, a, a, a, a, 8H.8H.a, a, a, a, 8H.8H.a, a, a, a, a, a, a, a, @[+@[+>r+>r+>r+>r+Tp*Tp*>r+>r+>r+>r+>r+>r+>r+B{$Vl.un.ph#{b+{t.{t.j}+j}+[3+[3+91+QI.QI.$;&)1.)1.0R#0R#$;&PI.Hu+`^ `^ W# z|.[% +2 i+#60 AF+.6.%Z*4u*|B*>2%kT@)1%EA%Up*8T*(t*ej*X'*#~*fk*fk*vX@m>&p1@KZ@+<++<+[c@[c@<-+K6@ki@ki@S)@S)@S)@S)@XX.*1@hB@g1&gD#D4#OA#D4#D]%G1#)7$)7$)7$)7$Oe$Oe$Oe$Oe$%u$=c$>b$Sj$09$90$90$N)$,H$,H$Js$Js$Js$Js$Ks$Js$-c$)g$)g$)g$-c$-c$Dj$Dj$Dj$Dj$Ej$Ej$c9$_8$_8$47$b8$b8$b8$b8$!l$!l$!l$!l$kF$kF$/H$/H$/H$/H$GO$5Z+iX+7V@7V@BO@2R+2R+4G+4G+5$@4G+2 @2 @R)@w;@]K@RQ@0G+0G+0G+0G+0G+0G+0G+0G+0G+0G+0G+0G+0G+0G+0G+9G++=>+=>+=>+=>++0G+*>+m;@:w+A@@S.@S.@w)+w)+4 @4 @ny+O)@m5$9=@).$/t#).$8#%^K@^K@^K@^K@^K@^K@^K@^K@<^#I@@8$@^K@^K@8$@I@@Y.@O)@,B+ny+my+e^@e^@qg@qg@8#%Tm#SQ@1 @Tv#46+n%$v4#V0+i~$(R#7I#ns$`o$'Z#{v${v$qX+@h+,>+>>+7G#*,$x_$dZ.cH#V0+V0+j~+[7@d~@x'#+>#c~@e[+R.+~V+$5@}6+[=@m0+o8+B$+lD+XA+&k+/6+B)$>6+F_$CC$ (%r=$r=$=o#>5#%Q#_z#5E#]x*&Z**Z*=Z*-Z**C*;Z*>Z*,Z*'Z*)Z*!Z*~Z*{Z*]Z*^Z*/Z*(Z*_Z*:Z*qU*nR*)D*Pc#8L*Df#O7#$K#'6$2*$-5#>z#P7#Lq#Lq#~5#~5#)5#,5#~2#*5#*5#m1$l1$Y:%j(%(O# (%EC$E_$^H$^H$id+^6+^6+fd+fd+7q$7q$:@$In$K@5Z+5Z+gm$~J$y$g>$A;$*'$R2$F4@21@yV# 7@{`#bC$iR$+O$!x$!x$!x$xV#xV#>O$>O$>O$xV#+O$#w$$w$7S$$w$#w$ 7@{`#4}@4}@5}@5}@>:@MU#OS#WH@+7@>]@;'$@7@39@39@8s#8s#s9#s9#t9#t9#hh#hh#hh#gh#$7@$7@$7@$7@gh#gh#yb#yb#yb#yb#z$+s<@-(@b&@b&@FD+PK+R0+vr+vr+(P+(P+G6@G6@-_#gY#Y|#=b$Pc$/=$Sw&Q6#6~#a$@a$@a$@0$@0$@0$@0$@6T+e^@ny+4 @ny+ny+>B+Q)@!K@,K@[H#,K@>K@>K@)K@[H#,K@,K@,K@,K@,K@,K@,K@E@@vp#00$00$vp#vp#8e#8e#pZ@BM@1 @V.@'K@'K@F@@6$@7G+FO$%/$bN$iF$I$+-,$-,$46+aN#Kq@Kq@8~#8~#Tx#Tx#uy+mJ#Y.+[7@.o+qQ#aa@ba@fm@jE$JN*wY*`W*9Y*,G%UO$Tw*lE* v% v% v% I> fL.w4.w4.w4.w4.w4.w4.w4.w4.':+<4 #9.cp.[3+[3+cp.#9.#9.|5+|5+[3+cp.[3+[3+|5+w7+fL.fL.a, 8H.8H.8H.8H.a, w4.w4.w4.w4.w4.w4.w4.w4.a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, Tp*Tp*>r+>r+>r+>r+@[+@[+>r+>r+>r+>r+>r+>r+>r+B{$B{$ZT#un.un.(s.aq.{t.{t.|5+[3+s[.91+$;&4I%)1.M}.#0*#0*$;&Hu+Hu+4!.4!.W# z|.[% +2 i+#h{@AF+.6.%Z*Yt*|B*>2%kT@)1%EA%27*27*(t*ej*X'*#~*fk*fk*vX@m>&:-@hk*^i@^i@9e@9e@'>+BM#ki@ki@S)@S)@S)@S)@XX.*1@e$@H3+D4#OA#F1#F1#}C#}C#)7$)7$)7$)7$Oe$Oe$Oe$Oe$]m$]m$=c$>b$Sj$=k$90$90$%K$%K$%K$%K$im$im$im$%K$-c$)g$)g$)g$-c$-c$Dj$Dj$Dj$Dj$a9$Ej$b8$b8$b8$b8$b8$b8$b8$b8$!l$!l$!l$!l$kF$kF$/H$/H$/H$/H$GO$5Z+WK+BO@BO@BO@2R+gX+5$@5$@jX+5$@YK+2 @R)@R)@w;@!K@0G+0G+0G+0G+0G+0G+0G+0G+*>+*>+*>+*>+*>+*>+*>+3 @+=>+=>+=>+=>++[P+:w+A@@S.@S.@w)+w)+4 @4 @my+ny+9=@9=@).$/t#8#%]k#^K@^K@^K@^K@^K@^K@^K@^K@<^#I@@8$@^K@^K@8$@I@@Y.@P)@#a@4 @ny+K@@K@@4e@4e@).$7$@6$@6G+T!$aN#46+v4#u4#1z@p=#C)+k %]v$'Z#{v$]q$qX+@*+,>+U`$H1#I1#d$@[f+[f+(m@(m@ii@5]+,*@:/++>#c~@(/+2]+~V+51@N@+(f+m0+o8+)]+lD+XA+&k+/6+B)$e8+gw$EC$9,$Xn#i:%_u*>5#9w#_z#6E#K@5Z+5Z+gm$gm$2#%:/%Ks$!I$k`%=n#;7@/7@M3+Yp+K2@:u%l7$}b$'t$f6$#4$,5$V'$.4$_T$Q]%3)%i#%S0%z,$V<$fC%W'$#x%f6$'t$8l$N*%/g%vV#AM$Ld$_a@fc@ye@ye@fc@gc@gc@fc@6k@gc@3}@3}@`6@0X#=3@Rl$+F$+F$+F$+F$:V$:V$:V$:V$(V$(V$_V$+F$:V$!x$!x$+O$.O$.O$.O$.O$iR$iR$iR$iR$7S$$w$#w$#w$#w$$w$7S$7S$Qp$Qp$Qp$Qp$vo$wo$1s$,t$}b$#x%q0$g>$A;$A6@A6@6)$21@yV# 7@{`#bC$iR$+O$!x$+O$!x$xV#xV#>O$>O$>O$xV#!x$#w$$w$$w$$w$.O$ 7@ 7@4}@4}@5}@>:@MU#OS#OS#v~@+7@>]@;'$@7@39@39@8s#8s#.5@.5@t9#hh#hh#gh#gh#gh#$7@$7@$7@$7@gh#gh#yb#yb#yb#yb#s<@s<@b&@b&@b&@|R+(P+fy+fy+fy+K,@K,@G6@G6@gY#gY#Y|#=b$Pc$/=$Sw&P3#6~#a$@a$@a$@0$@0$@0$@0$@e^@Z.@O)@O)@4 @4 @P)@s;@w;@)K@,K@,K@>K@YK+>K@,K@)K@)K@)K@)K@)K@)K@)K@jX+9e#vp#vp#9e#iX+5Z+5Z+V.@6G+W.@F@@SQ@SQ@DO@Tm#6$@Uv#TR$TR$Tv#Tv#-,$-,$-,$5P#aN#aN#8~#8~#uy+uy+uy+[_+Y.+[7@[8+<3@:3@22+i|+jE$JN*wY*`W*9Y*,G%UO$Tw*%F*( 9g.aH@}f.l7 l7 cI+cI+G|@T_+$(+xc+xc+xc+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+m|.{'$R~$f+#f+#R~${'$m|.d%$d%$V&$V&$m|.{'$R~$R~$US+';$u]#:{+:{+u]#';$US+u]#u]#u]#u]#u]#u]#u]#u]#T_+$(+xc+Ea+Ea+xc+$(+T_+xc+$(+T_+G|@G|@G|@", "5% 5% f% f% f% v% v% v% 5% 4% 5% v% I> f% 4% &_ &_ &_ &_ &_ &_ &_ &_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ 4% 5% 5% f% f% v% v% v% v% f% 5% 5% 5% 5% f% v% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ g% g% g% g% h% h% h% h% #9.#9._r+_r+_r+xX%[M@[M@$9.$9.$9.$9.$9.$9.$9.$9.l#@l#@l#@l#@l#@l#@l#@x% g% 0c 0c 0c 0c 0c 0c 0c )i+7v@A^.0c 0c A^.7v@)i+A^.A^.A^.A^.A^.A^.A^.A^.0c A^.A^.X_ X_ A^.A^.g% PI._r+_r+_r+N7.M7.M7.%0+%0+M7._r+xX%xX%_r+M7.[3+-J.I> I> v% v% I> fL.w4.w4.w4.w4.w4.w4.w4.w4.':+<4 #9.#9.#9.#9.#9.#9.#9.[3+[3+[3+[3+[3+|5+|5+w7+v% I> fL.w4.a, a, w4.w4.fL.fL.fL.fL.w4.w4.w4.w4.w4.w4.a, a, a, a, w4.w4.a, a, a, a, a, a, a, a, I}+I}+Tp*>r+>r+@[+6v@6v@>r+>r+>r+>r+>r+>r+>r+B{$A{$i4@ZT#un.(s.aq.aq.{t.|5+|5+s[.91+$;&4I%M}.M}.#0*#0*4I%Hu+Hu+4!.4!.W# A|.[% +2 sq+6,@AF+.6.UC.Y_+q]%'^+!#&EA%EA%qZ*rZ*(t*ej*X'*#~*fk*fk*vX@m>&RI&p1@f>@f>@ia@9e@%a@<-+ki@ki@S)@S)@S)@S)@XX.S)@e$@H3+OA#F1#E1#E1#*/%/^%)7$)7$)7$)7$Oe$Oe$Oe$)g$]m$]m$=c$>b$Sj$Sj$09$09$%K$%K$%K$%K$im$im$im$%K$S5+Di$)g$)g$-c$-c$^m$^m$_a$Dj$a9$a9$b9$b9$bq$bq$b8$b8$b8$b8$!l$!l$!l$!l$kF$kF$/H$/H$/H$/H$GO$5Z+hF$fX@fX@BO@gX+gX+jX+jX+jX+jX+>K@YK+w;@R)@R)@R)@0G+0G+0G+0G+0G+0G+0G+0G+;B+;B+;B+;B+;B+;B+;B+f^@+=>+=>+=>+=>++P,+:w+A@@S.@S.@w)+w)+4 @4 @(w+ny+8&@8&@).$).$7&@'~%^K@^K@^K@^K@^K@^K@^K@^K@I@@I@@8$@8$@8$@8$@I@@;B+0G+mX+ny+my+e^@e^@qg@8V@TQ@DM@7G+{K@; $aN#Z.+v4##*%1z@p=#C)+k %`o$,]$Zo${v$qX+@*+,>+U`$D~$+$#H5$J3+J3+ti+l9@`.@`.@x'#+>#lK@G$+3a@ak@X}+0}@`v+<6+o8+B$+lD+lD+Rl+&k+/6+y0+A7#>>$P{$@R$Xn#i:%_u*6l#T0#E.$9v*sZ*tZ*uZ*vZ*qR*Mz*lB*wZ*xZ*yZ*zZ*AZ*BZ*CZ*DZ*EZ*FZ*%M*GZ*HZ*IZ*#r#~C#9E#8L*NR#Df#`y#)M#M7#@o#~2#~2#)5#)5#~5#~5#&G#P7#P7#%K#%K#l1$r=$Wn#.(% (% (%EC$E_$`3+^H$Gy#^6+^6+fd+fd+7q$7q$:@$In$Nn#0[+=g$=g${_+{_+-2+[]+N0+;2+/|+Ob+=w+-w+1R+vD+xD+T.@B@@B@@3R+=B+ZK+Q)@K@)K@AM@V.@XK+~K@R)@R)@w;@w;@YK+>K@5Z+5Z+aq$gm$2#%:/%AU$!I$S!$=n#-7@/7@M3+Yp+c1@_u%>y$5c$f6$,5$,5$f6$#x%@4$v8$Q]%2)%/9%i#%9b%fC%np%;5$V'$'t$'t$8l$O*%/g%vV#AM$Ld$gc@0i@xe@xe@0i@fc@fc@ye@_a@gc@3}@3}@3}@0X#Sl$tV#(V$(V$_V$+F$+F$:V$!x$!x$(V$_V$_V$+F$:V$!x$+O$+O$.O$.O$.O$.O$iR$iR$iR$iR$$w$#w$#w$#w$$w$$w$7S$7S$;r$;r$Qp$Rp$wo$-r$m7$m7$d6$>5$q0$='$p0$F4@p0$[!$4}@yV# 7@ 7@iR$iR$+O$+O$+O$+O$rQ$xV#>O$>O$>O$9S$:V$$w$$w$#w$#w$.O$yV# 7@4}@Y4@5}@>:@MU#OS#|T@v~@+7@>]@;'$@7@39@39@8s#8s#.5@.5@hh#hh#hh#gh#gh#gh#$7@$7@$7@$7@gh#gh#yb#yb#pe#pe#s<@c&@b&@b&@a$@|R+K,@.B+.B+.B+K,@:x@gY#gY#gY#G6@Y|#Y|#/=$/=$/=$P3#6~#a$@a$@a$@0$@0$@0$@0$@K@@0&@t<@t<@4 @4 @P)@s;@R)@>K@)K@)K@YK+2 @YK+)K@)K@)K@)K@)K@)K@)K@)K@)K@pZ@zM@zM@5Z+1 @1 @~K@W.@&n%G@@G@@6$@6&@6&@6&@6&@:`#8-%W~$jq#jq#T!$T!$-,$; $5P#5P#Jq@Jq@uy+RS#RS#Y.+Y.+.o+Ge@:3@A]%u(@>t*jE$JN*wY*`W*9Y*,G%UO$Tw*JZ*KZ*LZ*(X*MZ*NZ*OZ*5T*9j%Qv.$U*PZ*QZ*cT Q] gA :W%Sp#av#*T#8&+gm#$0+jb%X@$x*$Y@$+d+'g@6j+y$$|m.T_+T_+T_+G|@G|@Kh+Kh+Kh+T_+G|@G|@Kh+Kh+G|@G|@T_+G|@G|@T_+T_+$(+$(+$(+$(+xc+G|@G|@Ea+5A.$(+$(+]! 7P.7P.Kh+G|@G|@T_+$(+$(+$(+T_+T_+G|@G|@T_+T_+$(+xc+$(+$(+xc+Ea+xc+G|@y4&G|@T_+$(+$(+T_+G|@T_+$(+7P.G|@$(+T_+Kh+7P.G|@T_+Kh+T_+$(+T_+G|@Kh+G|@}f.bH@NU+bH@bH@bH@bH@T_+T_+/{ /{ |m.|m.B#@{y%{y%*$@J> ';$';$d #d #u]#u]#:{+d #d #u]#u]#:{+v]#v]#v]#T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+$(+$(+xc+xc+aH@aH@aH@aH@aH@aH@aH@aH@l}+9g.aH@l7 cI+cI+l7 }f.$(+$(+xc+xc+xc+xc+xc+xc+xc+xc+$(+$(+T_+G|@G|@Kh+m|.{'$R~$f+#f+#R~${'$m|.d%$V&$V&$V&$V&$V&$V&$V&$US+';$u]#:{+:{+u]#';$US+v]#v]#v]#v]#v]#v]#v]#v]#$(+$(+xc+xc+xc+xc+$(+$(+xc+xc+$(+T_+T_+G|@", "5% 5% f% f% f% v% v% v% 5% 4% 5% v% I> f% 4% &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ &_ ~_ ~_ ~_ ~_ 5% 5% 5% 5% f% f% v% v% v% f% 5% 5% 5% 5% f% v% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ g% g% g% g% h% h% h% h% #9.#9._r+_r+_r+xX%[M@[M@5!.5!.5!.5!.5!.5!.5!.5!.l#@l#@l#@l#@l#@l#@l#@x% g% 0c 0c 0c 0c 0c 0c 0c l.7v@X_ A^.A^.X_ 7v@ l.A^.A^.A^.A^.A^.A^.A^.A^.0c A^.A^.X_ X_ A^.A^.g% Hu+_r+_r+N7.M7.M7.M7.M7.%0+M7._r+xX%xX%_r+M7.[3+':+fL.I> v% v% I> I> fL.w4.w4.w4.w4.w4.w4.w4.':+<4 #9.#9.#9.#9.#9.#9.#9.cp.cp.[3+|5+|5+w7+w7+w7+v% I> fL.w4.w4.w4.w4.fL.I> I> fL.fL.w4.w4.a, a, w4.w4.a, 8H.8H.a, w4.w4.a, a, a, a, a, a, a, a, I}+I}+Tp*>r+>r+@[+6v@6v@>r+>r+>r+>r+>r+>r+>r+B{$A{$i4@ZT#un.(s.aq.aq.{t.|5+[3+s[.91+$;&4I%)1.M}.`7&`7&4I%8v.8v.4!.7!.V# A|.[% +2 $A#6,@vF+F: Q~%wu.%^%Lb.`c.)1%EA%ks%:k%(t*ej*X'*fk*/8%/8%vX@m>&RI&p1@f>@f>@ia@9e@%a@<-+ki@ki@S)@S)@S)@S)@XX.S)@e$@U=$d=@ v@B;%B;%L>%L>%4d$4d$4d$4d$)g$)g$)g$)g$]m$]m$]m$ar$>b$>b$>b$Sj$Rj$Rj$%K$%K$%K$%K$im$%K$y4#Di$Di$)g$-c$Cj$^m$5G$_a$Dj$a9$a9$b9$b9$bq$bq$b8$b8$b8$b8$!l$!l$!l$!l$kF$kF$/H$/H$/H$/H$GO$5Z+hF$fX@fX@BO@gX+gX+jX+jX+jX+jX+>K@>K@w;@R)@R)@8G+0G+0G+0G+0G+0G+0G+0G+0G+;B+;B+;B+;B+;B+;B+;B+f^@+=>+=>+=>+=>+B+0G+*>+;B+;B+P,+:w+A@@S.@S.@w)+w)+4 @4 @(w+ny+8&@8&@).$).$7&@'~%^K@^K@^K@^K@^K@^K@^K@^K@8$@8$@I@@I@@I@@I@@8$@*>+;B+$N+_w+&N+&N+&N+'_#'_#TQ@%o%7G+CM@w-$aN#Z.+v4#J1#`u@8]+~I$N@%4Z.~v$U~$B;@~}@@h+3W.U`$VX.JL#Ux%ti+ti+%`$%`$[++>#RA+)[+3X+$5@3~+X;+5~@F)@'-+)]+lD+lD+Rl+&k+/6+y0+A7#>>$P{$@R$Xn#Cv*=5#>5#^5#0@$9v*RZ*SZ*TZ*UZ*UR*VZ*WZ*XZ*YZ*ZZ*`Z* `*.`*+`*@`*#`*$`*%`*GZ*WP*&`*~K#bs*Sf%Jf#Ef#Df#`y#Y`#Ec#%5#,5#,5#Kq#Kq#+z#;z#&G#P7#P7#%K#%K#l1$r=$Wn#.(%9,$9,$EC$8,$`3+`3+ 4+^6+^6+fd+fd+7q$7q$:@$In$Nn#0[+$a@$a@Kb+Kb+-2+]_+N0+;2+/|+Ob+=w+-w+1R+vD+xD+S.@B@@T.@P,+#a@ZK+ZK+K@5Z+5Z+aq$aq$:/%sr$AU$Ls$S!$8-%-7@/7@#s+`r+K2@_u%q0$8a$,5$,5$,5$'t$#x%V'$+4$G&%S0%/E%i#%9b%fC%Iw$+4$V'$n7$n7$N*%O*%G=%tV#Ld$7m@gc@ye@tB@tB@ye@fc@0i@ye@6k@gc@fc@fc@gc@_a@Ld$tV#(V$(V$(V$_V$+F$:V$:V$:V$_V$_V$+F$:V$!x$+O$+O$$41@[!$[!$Z4@Y4@ 7@yV#yV#.O$.O$O$5P$5P$9S$:V$$w$#w$#w$.O$.O$yV#yV#Y4@Y4@>:@MU#OS#|T@|T@29@+7@>]@;'$@7@39@39@8s#8s#4k#4k#hh#gh#gh#gh#4v#4v#59@59@59@59@4v#4v#pe#pe#pe#pe#c&@c&@b&@a$@a$@|R+:x@#k+#k+.B+K,@K,@G6@G6@G6@G6@Y|#P3#Sw&/=$/=$Y|#6~#a$@a$@a$@0$@0$@0$@0$@Z.@0=@t<@t<@4 @4 @>B+Q)@8G+YK+)K@>K@2 @5G+2 @>K@>K@>K@>K@>K@>K@>K@>K@>K@)K@>K@>K@YK+R)@R)@8G+cB@H@@8$@8$@I@@9$@9$@9$@EM@(`#(Z$(`#(Z$:`#8-%8-%; $8-%; $; $^R#^R#RS#|P+|P+Y.+j9@.o+Ge@8l*u.*u(@>t*jE$JN*wY*`W*9Y*,G%UO$Tw*3Z%2Z%*`*`Y*tT*Uq*=`*-`*;`*>`*,`*Rc&z+ g*.P] ZW+:W%Sp#av#*T#8&+gm#$0+jb%{h&>S%'W+Y@$'g@'g@6j+y$$T_+T_+T_+G|@G|@Kh+Kh+Kh+T_+G|@G|@Kh+Kh+G|@G|@T_+xc+xc+$(+T_+T_+G|@G|@G|@xc+G|@G|@Ea+Ea+T_+$(+5A.7P.7P.Kh+G|@G|@T_+$(+$(+xc+$(+T_+T_+T_+T_+$(+xc+5A.Ea+Ea+5A.]! 5A.$(+7P.G|@$(+Ea+$(+G|@Kh+T_+Ea+7P.G|@$(+T_+Kh+7P.G|@T_+T_+xc+Ea+xc+T_+G|@T_+l7 bH@NU+bH@bH@bH@bH@T_+T_+/{ /{ |m.|m.B#@{y%{y%*$@$.@:{+u]#u]#d #d #';$';$d #d #u]#u]#:{+v]#v]#v]#T_+T_+T_+T_+T_+T_+T_+T_+$(+$(+xc+Ea+Ea+Ea+Ea+Ea+aH@aH@aH@aH@aH@aH@aH@aH@Bz$aH@}f.l7 l7 }f.bH@aH@xc+xc+xc+$(+$(+$(+$(+xc+xc+xc+$(+$(+T_+G|@G|@Kh+m|.{'$R~$f+#f+#R~${'$m|.R~${'${'$m|.d%$RO+0&+0&+US+';$u]#:{+:{+u]#';$US+v]#v]#v]#v]#v]#v]#v]#v]#xc+xc+$(+$(+$(+$(+xc+xc+xc+xc+$(+$(+T_+G|@", "5% 5% f% f% f% v% v% v% 5% %% 4% f% v% 5% 4% &_ &_ &_ &_ &_ &_ &_ &_ $% &) &) &) &_ &_ &_ &_ f% 5% 5% 4% 5% f% v% I> f% 5% 5% 4% 4% 5% 5% f% ~_ ~_ ~_ ~_ ~_ ~_ ~_ ~_ &_ &_ &_ &_ &_ &_ &_ &_ g% g% g% g% h% h% h% h% #9.#9._r+_r+_r+xX%[M@[M@$9.$9.$9.$9.$9.$9.$9.$9.$9.$9.$9.$9.$9.$9.$9.j% g% 0c 0c 0c 0c 0c 0c 0c A^.A^.X_ X_ X_ X_ A^.A^.0c 0c 0c 0c 0c 0c 0c 0c 0c A^.A^.X_ X_ A^.A^.g% Hu+_r+N7.M7.M7.M7.M7.N7.%0+M7.N7.N7.N7.N7.M7.[3+':+fL.I> v% v% v% I> I> w4.w4.w4.w4.w4.w4.w4.w4.;H.cp.#9.#9.#9.#9.cp.[3+PI.#9.[3+|5+w7+w7+w7+.l.v% I> fL.w4.a, a, w4.w4.I> I> fL.w4.a, a, 8H.8H.w4.a, cl+xj+xj+cl+a, w4.a, a, a, a, a, a, a, a, Tp*Tp*>r+>r+>r+>r+@[+@[+>r+>r+>r+>r+>r+>r+>r+B{$tS ZT#un.un.(s.aq.{t.{t.cp.cp.91+QI.QI.$;&Ay.Ay.`7&`7&4I%8v.8v.7!.7!.V# g{._% [U $A#ef vF+F: Q~%wu.|w*g<@Y^%)1%>T*pP*:k%(t*fj*T3*fk*/8%/8%vX@m>&:-@hk*^i@^i@9e@9e@'>+BM#ki@ki@S)@S)@S)@S)@XX.S)@#@#IL#f&@fE# v@B;%L>%L>%4d$4d$4d$4d$)g$)g$)g$)g$]m$]m$]m$]m$=c$=c$>b$>b$Rj$Rj$%K$%K$%K$%K$im$%K$y4#7F$Di$)g$-c$Cj$5G$5G$Dj$Dj$a9$Ej$b8$b8$b8$b8$b8$b8$b8$b8$!l$!l$!l$!l$kF$kF$/H$/H$/H$/H$GO$5Z+WK+BO@BO@BO@2R+gX+5$@5$@4G+4G+>K@>K@!K@w;@R)@8G+9G+0G+0G+0G+0G+0G+0G+0G+*>+*>+*>+*>+*>+*>+*>+3 @+=>+=>+=>+=>+K@5Z+5Z+0q$aq$:/%sr$Wk*Ls$S!$8-%;7@[o+#q+`p+w&@:u%q0$8a$f6$,5$,5$f6$#x%V'$;5$_T$3)%i#%S0%z,$V<$fC%W'$#x%m7$m7$ap$>o$vV#AM$_a@6k@gc@0i@xe@xe@0i@fc@fc@ye@fc@fc@gc@6k@_a@7m@Ld$Ld$(V$(V$_V$_V$_V$_V$+F$+F$_V$+F$+F$:V$!x$+O$O$5P$HH$-G$+F$$w$#w$.O$iR$.O$yV#cs$Y4@M<@>:@MU#OS#|T@XH@29@+7@>]@;'$@7@39@39@8s#8s#4k#4k#hh#gh#gh#4v#4v#4v#59@59@59@59@4v#4v#pe#pe#pe#Kx#c&@c&@a$@a$@H6@:&@K,@.B+.B+.B+(P+(P+c&@c&@c&@G6@P3#P3#Sw&Sw&/=$=b$6~#a$@a$@a$@0$@0$@0$@0$@Z.@0&@t<@O)@ny+ny+0G+ZK+X.@2 @>K@YK+5G+;K@2 @YK+>K@>K@>K@>K@>K@>K@>K@!K@w;@x;@x;@x;@x;@^K@^K@^K@8$@8V@UQ@'_#ED@ED@ED@'_#:a$(`#7#%7#%7#%^t#^t#.W$8-%8-%8-%8k#8k#|P+|P+|P+j9@7Z+[8+Ge@:3@A]%U^@;`+jE$JN*wY*`W*9Y*,G%UO$Tw*4`*5`*kX*|Z*6`*7`*8`*9`*0`*NJ*`} a`*q [y+}f.0@@b`*B(**T#8&+gm#{4%jb%%c%{h&~h&{y%'W+6j+6j+6j+y$$T_+T_+T_+G|@G|@Kh+Kh+Kh+T_+G|@G|@Kh+Kh+G|@G|@T_+5A.Ea+$(+T_+G|@Kh+G|@G|@$(+7P.Kh+xc+xc+G|@G|@Ea+Kh+Kh+G|@G|@G|@G|@T_+T_+$(+$(+T_+G|@G|@T_+$(+$(+Ea+xc+$(+xc+5A.5A.xc+G|@G|@xc+5A.xc+Kh+7P.$(+]! Kh+T_+$(+$(+G|@Kh+G|@$(+$(+Ea+5A.Ea+T_+G|@T_+l7 bH@NU+bH@bH@bH@bH@T_+T_+/{ /{ |m.|m.B#@{y%{y%*$@y*$h]@v]#:{+d #';$US+US+d #d #d #u]#u]#u]#u]#:{+T_+T_+T_+T_+T_+T_+T_+T_+Kh+G|@T_+$(+xc+$(+$(+T_+aH@aH@aH@aH@aH@aH@aH@aH@}f.}f.l7 }f.}f.bH@Bz$Bz$Ea+xc+$(+T_+T_+T_+T_+$(+$(+$(+$(+T_+T_+T_+T_+T_+m|.{'$R~$f+#f+#R~${'$m|.35+35+R~${'$V&$RO+0&+c`*US+';$u]#:{+:{+u]#';$US+v]#v]#v]#v]#v]#v]#v]#v]#Ea+xc+$(+T_+T_+$(+xc+Ea+T_+T_+$(+$(+$(+T_+", "5% 5% f% f% f% v% v% 5% 4% ~% %% 5% f% 4% ~% 5% 5% 5% 5% 5% 5% 5% 5% ~% ~% ~% %% %% 4% 4% 4% f% 5% 4% 4% 4% f% v% fL.5% 4% 4% %% %% 4% 4% 5% f% f% f% f% f% f% f% f% 5% 5% 5% 5% 5% 5% 5% 5% g% g% g% g% h% h% h% h% #9.#9._r+_r+_r+xX%[M@[M@$9.$9.$9.$9.$9.$9.$9.$9.$9.$9.$9.$9.$9.$9.$9.j% g% g% g% g% g% g% g% g% R_ *_ af.4=+4=+af.*_ R_ g% g% g% g% g% g% g% g% g% af.af.QB@QB@af.af.g% 8v.Hu+#9.cp.[3+cp.#9.#9.cp.cp.[3+|5+|5+[3+cp.cp.Vl.w4.fL.I> v% v% v% I> w4.w4.w4.w4.w4.w4.w4.w4.5v@;H.s3.<4 <4 s3.;H.5v@i% <4 ;H..l.>H.>H..l..l.I> fL.w4.a, a, a, a, w4.fL.fL.w4.a, 8H.cl+xj+xj+a, cl+l`.OJ.OJ.l`.cl+a, a, a, a, a, a, a, a, a, a, a, 8H.8H.8H.8H.cl+cl+8H.8H.8H.8H.8H.8H.8H.B{$sS un.ph#{b+{t.{t.j}+j}+PI.PI.$;&QI.QI.91+r3.r3.`7& 8&l=&8v.VW.7!.zT.L= 1U _% [U 8>$K8 vF+F: 1D+cl*^z$!m*SB%Up*8T*ok#m]@DE*fj*T3*/8%:-@:-@hk*KZ@p1@KZ@+<++<+[c@[c@<-+K6@ki@ki@S)@S)@S)@S)@XX.S)@*1@2W.e$@d=@fE# v@C4#C4#4d$4d$4d$4d$)g$)g$)g$)g$*c$*c$]m$]m$]m$]m$=c$=c$nw$nw$nw$nw$,H$,H$,H$nw$'M$7F$Di$Di$Cj$Cj$5G$S@%Dj$Dj$Ej$Ej$c9$_8$_8$47$b8$b8$b8$b8$!l$!l$!l$!l$kF$kF$/H$/H$/H$/H$GO$5Z+iX+7V@7V@BO@2R+2R+4G+4G+R,+5&@YK+)K@]K@!K@w;@R)@9G+9G+9G+9G+9G+9G+9G+9G+9G+9G+9G+9G+9G+9G+9G+9G++=>+=>+=>+=>+%bN#$*$BT$,b$aD#(R#C)+|0#R2@rV$]q$DU.87$V,+3W.U`$VX.JL#Ux%6]+>(@%`$J6@UN#zT&4]+;(@Yv+dz@,i#q$@a9@5~@<=@6~+)]+lD+<]+<]+Rl+~_+!|+y0+F_$CC$s[%OR#-o#=5#K0#]2#U7#R7#TX*%f%&f%d`*e`*UR*f`*g`*h`*i`*j`*k`*l`*m`*n`*o`*p`*q`*r`*s`*t`*iJ*HN*;C*Qc#Lc#[l#Fc#R`#!2#Ec#%5#P7#P7#Lq#&G#^z#^z#)5#,5#~2#*5#*5#m1$l1$Y:%Yn#9,$9,$EC$8,$i8+i8+j8+^6+^6+fd+fd+7q$7q$:@$In$ed++*$~_+~_+(6+Kb+_k+:k+N0+;2+/|+Ob+=w+-w+1R+vD+!w+$B+$B+$B+mX+mX+*>+f^@ZK+lX+R)@R)@W.@W.@~K@1 @R)@R)@w;@w;@YK+>K@5Z+5Z+0q$aq$:/%sr$Wk*Ks$-I$jq#;v@M,@28+@q+X5+aC$q0$8a$n7$f6$#4$#4$V'$V'$.4$;5$z,$4)%9b%Sr$t;&y|$>5$5c$1s$1s$Aq$0p$AM$7m@6k@fc@11@3}@we@|9@3}@`6@3}@}9@ye@0i@6k@7m@Ri$Ri$@F$5l$_V$_V$_V$_V$_V$(V$(V$(V$+F$+F$:V$!x$+O$+O$O$5P$HH$-G$_V$$w$#w$iR$iR$iR$yV#cs$M<@M<@MU#OS#|T@|T@XH@29@+7@>]@;'$@7@39@39@8s#8s#4k#$7@gh#gh#4v#4v#XA#XA#C`#C`#C`#C`#XA#XA#Kx#Kx#Kx#Kx#c&@G6@a$@H6@H6@:&@K,@.B+fy+fy+Kl+Kl+z$+z$+c&@G6@P3#Q6#R6#Sw&/=$=b$6~#a$@a$@a$@0$@0$@0$@0$@K@@0&@O)@4 @my+_w+*>+9G+X.@R)@w;@R)@X.@^^#8G+w;@w;@w;@w;@w;@w;@w;@w;@w;@*>+0G+0G+0G+0G+O)@O)@O)@ny+e^@6T+6Z+q8+&7@q8+e1@:a$nH&Rw&7#%jY#NU#NU#f^#:`#8-%8-%=n#=n#4R+4R+4R+7Z+7Z+[8+Ge@<3@:3@5T@{=#jE$JN*wY*`W*9Y*,G%UO$Tw*Ai*Wq*)Y*AY*KS*u`*v`*.Z*t]%+G+^8.GK%=. |.+Ea+8' 1n%]9#8&+gm#{4%e6#%c%Hc%X@$X@$B#@`b&/{ /{ /{ /{ T_+T_+T_+G|@G|@Kh+Kh+Kh+T_+G|@G|@Kh+Kh+G|@G|@T_+xc+$(+T_+G|@G|@G|@T_+$(+G|@oh.oh.T_+$(+Kh+Kh+xc+T_+T_+G|@G|@G|@G|@Kh+Kh+T_+T_+G|@G|@G|@G|@T_+T_+$(+G|@7P.7P.G|@$(+$(+G|@G|@Ea+]! xc+7P.7P.$(+{! G|@$(+Ea+xc+T_+G|@T_+xc+T_+xc+Ea+xc+G|@Kh+G|@}f.bH@NU+bH@bH@bH@bH@T_+T_+/{ /{ |m.|m.B#@{y%{y%*$@c> v]#:{+:{+u]#d #d #';$d #d #d #d #d #';$';$';$T_+T_+T_+T_+T_+T_+T_+T_+oh.7P.G|@T_+$(+T_+T_+G|@bH@bH@bH@bH@bH@bH@bH@bH@l7 l7 }f.bH@aH@aH@bH@bH@Ea+xc+T_+Kh+Kh+Kh+G|@T_+T_+T_+T_+T_+T_+$(+$(+$(+m|.{'$R~$f+#f+#R~${'$m|.35+f+#f+#{'$m|.V&$d%$d%$US+';$u]#:{+:{+u]#';$US+:{+:{+:{+:{+:{+:{+:{+:{+Ea+xc+$(+T_+T_+$(+xc+Ea+Kh+G|@T_+xc+xc+$(+", "5% 5% f% f% f% v% v% 5% %% d( ~% 4% 5% 4% ~% 5% 5% 5% 5% 5% 5% 5% 5% +h.d( d( ~% ~% %% %% 4% f% 5% 4% 4% 4% f% I> fL.4% 4% %% ~% ~% %% 4% 4% f% f% f% f% f% f% f% f% 5% 5% 5% 5% 5% 5% 5% 5% g% g% g% g% h% h% h% h% #9.#9._r+_r+_r+xX%[M@[M@l#@l#@l#@l#@l#@l#@l#@l#@$9.$9.$9.$9.$9.$9.$9.$9.h% g% g% g% g% g% g% g% l` R_ af.6v@6v@af.R_ l` g% g% g% g% g% g% g% g% g% af.af.QB@QB@af.af.h% 6% Hu+#9.[3+[3+cp.#9.PI.#9.[3+|5+ET&ET&|5+[3+<4 a, w4.fL.I> v% v% v% I> w4.w4.w4.w4.w4.w4.w4.w4..l.5v@;H.s3.s3.;H.5v@.l.i% h% ;H..l.>H.>H..l..l.fL.fL.a, 8H.8H.8H.a, a, fL.w4.w4.a, cl+xj+l`.l`.8H.cl+OJ.vv+vv+OJ.cl+8H.a, a, a, a, a, a, a, a, w4.w4.a, 8H.8H.cl+xj+xj+8H.8H.8H.8H.8H.8H.8H.B{$sS ph#ph#{b+{t.j}+l#@l#@Hu+Hu+$;&QI.QI.91+{n#{n# 8& 8&l=&8v.VW.7!.zT.L= 1U _% [U 8>$K8 vF+F: 1D+cl*w`*dl*K}%>T*37*pt*m]@DE*Cn*wq*/8%:-@:-@hk*KZ@hk*f>@+<+[&#%a@%a@BM#4)#ki@ki@S)@S)@S)@S)@XX.S)@Tb+U##hB@f&@d=@fE#C4#C4#4d$4d$4d$4d$)g$)g$)g$)g$*c$*c$]m$]m$]m$]m$%u$%u$nw$nw$nw$nw$,H$,H$,H$nw$'M$7F$7F$Di$Cj$8F$5G$S@%Dj$Dj$Ej$,p$_8$47$37$e;%b8$b8$b8$b8$!l$!l$!l$!l$kF$kF$/H$/H$/H$/H$GO$5Z+9e#nZ@7V@7V@2R+CI+5&@R,+yM@R,+YK+)K@]K@]K@!K@w;@9G+9G+9G+9G+9G+9G+9G+9G+lX+lX+lX+lX+lX+lX+lX++=>+=>+=>+=>+=>+B+*>+:|+R.+e[+[P+:w+A@@S.@S.@w)+w)+4 @4 @4 @t<@t!%9=@/t#!(%/t#).$^K@^K@^K@^K@^K@^K@^K@^K@^K@8$@I@@<^#<^#I@@8$@0G+3 @3R+;B+/w+(w+(w+UQ@<^#%o%7G+1 @WK+b>%e;%&6$L1#,b$:{#(R#.B$B%%|f+qX+X,@O$+B'#V,+ki@U`$D~$Sb+yg%20#6]+W_@m9@zT&5 @;(@H,@-.$k0+!-+V&+U&+!7@6~+'-+)]+kp+<]+n8+~_++*$y0+`3+EC$W:%/C#gi#5l#Oc#O0#GD*;5#I0#:o#9v*EA*yF*e`*/R*x`*y`*^a#z`*A`*B`*OK*C`*D`*E`*F`*G`*H`*I`*J`*K`*]z*;C*Oc#Bv*%K#@o#J7#!2#@5#@o#,5#P7#ds%es%L`*s'$Kq#~2#Jq##o#*5#OR#m1$Y:%zq#0,$0,$EC$8,$i8+i8+j8+^6+^6+fd+fd+7q$7q$:@$In$ed++*$m8+m8+(6+Kb+_k+:k+N0+;2+/|+Ob+=w+-w+1R+1R+dB@~w+~w+~w+,B+P,+;B+Y.@P)@lX+x;@8G+7G+W.@W.@1 @R)@R)@w;@w;@YK+>K@5Z+5Z+0q$aq$sr$M`*Wk*Ks$-I$jq#Ae@pk+NF@+q+h-$.9@>y$8a$m7$'t$#4$h6$@4$V'$@4$W'$~t$z,$[}$_;$h>$_{&5c$Et$Ew$Ew$0p$;o$Ld$_a@gc@}9@|1@L<@|9@|9@3}@`6@`6@3}@tB@0i@_a@AM$6l$-k$5l$!E$+F$+F$+F$_V$(V$vy%vy%vy%+F$+F$:V$!x$+O$O$5P$HH$im%_V$7S$#w$iR$iR$iR$yV#cs$M<@M<@MU#OS#|T@XH@XH@%7@+7@>]@;'$@7@39@39@8s#8s#$7@$7@gh#gh#4v#4v#XA#XA#C`#C`#C`#C`#XA#XA#Kx#Kx#Kx#Kx#G6@G6@a$@H6@H6@:&@(P+fy+fy+vr+PK+PK+!B+!B+s<@G6@P3#Q6#R6#Sw&/=$Ox#6~#a$@a$@a$@0$@0$@0$@0$@e^@Z.@4 @4 @_w+(w+;B+*>+CD+8G+w;@R)@X.@^^#X.@R)@w;@w;@w;@w;@w;@w;@w;@DD+my+my+Z.@ny+0&@0=@0=@a=@Z.@e^@L@+&7@*7@{3@{3@k}@!(%nH&Rw&iY#NU#e^#J@+J@+:`#:`#8-%=n#=n#.W$4R+4R+7Z+7Z+[8+Ge@aa@<3@ba@r$+jE$JN*wY*`W*9Y*,G%UO$Tw*N`*Wq*zY*MZ*KS*1Z*v`*Fm*gK&{y.^8.*6.t& n|.ZW+<*&#Z*m;+gm#{4%e6#e6#Hc%Hc%2&$u3${y%!D+ a, I> ~% +h.4% fL.~% ~% ~% %% 4% 4% 5% 5% r: j% x% j% 7% r: 7% x% 7% 7% 7% 7% 7% 7% 7% 7% +h.%% 5% 5% 4% 4% f% fL.5% 5% 5% 5% 5% 5% 5% 5% x% j% 7% r: r: 7% j% x% r: r: r: r: r: 7% 7% 7% R_ *_ af.QB@s3.<4 i% 6% cp.#9.xX%x5.is@x5.c+#[M@j}+$9.5!.$9.j}+j}+l#@5!.5!.l#@j}+j}+$9.5!.$9.j}+h% h% h% h% h% h% h% h% h% h% h% h% h% s3.;H.5v@<4 <4 <4 <4 <4 <4 <4 <4 s3.s3.s3.s3.s3.s3.s3.s3.<4 <4 <4 <4 <4 <4 <4 <4 i% h% <4 s3.;H.5v@.l..l.fL.fL.fL.fL.fL.fL.fL.fL.v% fL.w4.fL.v% v% I> w4.6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@8H.8H.8H.8H.8H.8H.8H.8H.fL.w4.a, cl+cl+a, w4.fL.xj+xj+cl+8H.8H.a, a, w4.8H.8H.cl+cl+cl+xj+xj+xj+)O )O )O )O )O )O )O )O uM uM uM )O )O Es Es sS Bh.un.ph#ph#bv#bv#(s.{t.#9.#9.$;&$;&$;&4I%)1.)1.`7&`7&4I%Hu+Hu+`^ `^ X# $]$HB +2 sq+XZ AF+O`*%Z*P`*w`*]r*27*pP*`z*lV*$P*DE*Cn*gj*wq*RI&:-@L$*[c@+<++<+[&#Nu#<-+<-+BM#BM#3W.ki@S)@!}@!}@S)@XX.W,@.*+:-+4[%=7$=7$Vk$RA$L[#*c$*c$*c$*c$]m$]m$]m$]m$*c$L[#*c$Wk$Wk$!U#Tj$Tj$>b$>b$Sj$Sj$Rj$09$09$09$y4#7F$Di$)g$-c$Cj$5G$5G$Dj$Dj$Ej$Ej$c9$c9$c9$_8$b8$b8$c9$c9$5($d8$d8$d8$kF$kF$/H$/H$/H$/H$GO$5Z+WK+BO@BO@BO@2R+2R+4G+4G+5&@5&@2 @YK+!K@!K@]K@]K@x)+x)+x)+x)+x)+x)+x)+x)+T@+@N+{-+:P+T,@Q,+x)+ZK+ZK+P)@>B+>B+0G+0G+mX+:w+S.@S.@S.@w)+w)+4 @4 @4 @4 @8&@8&@8#%8#%8#%8#%ly+<^#I@@8$@^K@^K@^K@8$@k#$^K@I@@<^#ly+<^#I@@*>+f^@AD+3 @f^@:|+e[+ly+8$@DM@&n%6G+}{#d8$47$qw$N;$,b$aD#7F$Ss@~m$4Z.rV$T)@,{+N$+tc@J.+7_#GM@A;@Ux%Fn+Ie@~M#C,+) +5i@V_@.N+dz@d&@,i#3{#qe#7}@'-+w'#dc#9d+xb+n8+cd+=2+>f+LL#z!$WP$@R$0v*5l#O0#|G#GD*Ic#&5#R7#i.%-l%Lx*[r#Q`*R`*S`*T`*U`*V`*nK*W`*X`*Y`*Z`*``*2G*mB* =. =+ =dD*DA*L0#Nc#*5#Fc#L7#2*$)2#-5#_}%E4%Lq#Kq#+z#~5#Kq#~2#,5#%K#9<$l1$m1$x<%a,$)$$(O#AC$I~%i8+i8+j8+^6+!|+fd+fd+7q$7q$-6$In$ed++4+cd+cd+Kb+{_+{/+=m+N0+;2+/|+Ob+=w+-w+1R+1R+wD+wD+vD+S.@w)+w)+4 @0G+0G+9G+cB@x;@6$@F@@F@@F@@w;@w;@!K@!K@)K@)K@zM@pZ@gm$gm$:/%sr$Wk*Ls$k`%=n#;v@!B+MF@`p+w&@*'$w,$#x%n7$'t$'t$,5$@4$.4$W'$W'$[}$z,$j>$Sr$y|$V<$#x%Et$,t$Ew$;o$;o$tV#AM$_a@3}@L<@(a@hc@hc@hc@:a@|9@|9@fc@6k@@F$5l$JH$JH$;G$mK$:V$:V$:V$:V$:V$:V$:V$:V$:V$_V$_V$:V$O$HH$im%+F$$w$.O$bC$pR$sQ$EZ$EZ$19@19@OS#MU#5}@>:@XH@4k@1+*mQ&mQ&mQ&mQ&J$*49@49@59@59@4v#4v#4v#gh#gh#gh#C`#59@$7@$7@gh#gh#pe#pe#pe#Kx#c&@G6@a$@b&@b&@fD+uI+R0+R0+vr+K,@:x@gY#-_#gY#G6@Ox#tW#WM$P3*/=$P3#6~#a$@a$@a$@0$@0$@0$@0$@qt$a=@4 @my+my+my+*>+0G+cB@,T@|#%fm$x;@cB@DD+fm$fm$,T@x;@H@@H@@cB@x;@k#$e^@K@@0$@J@@b~@0$@b=@@ =0=@e^@q8+9}@61@z~@q8+ED@).$uW#q{$Rw&(`#e^#QF@J@+OU#U5+.W$=n#.W$PS#g^#'*&<7@<7@.o+[8+qQ#<3@DO#{=#jE$JN*`W*q+#Kv%uw*qH$&j*N`*# =iN*$ =iP*MQ*1l%wT*% =HX@FY*O0*}| 7P.7g.Vl.6l%U`%e6#e6#e6#& =Hc%Hc%=|$x*${y%B#@/{ |m.*$@y$$T_+$(+xc+xc+$(+Kh+oh.iS.]@+y4&7P.Kh+7P.Kh+T_+Ea+y4&oh.Kh+G|@T_+G|@Kh+7P.Kh+Kh+G|@G|@G|@G|@T_+T_+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@T_+$(+$(+xc+xc+T_+T_+T_+T_+T_+T_+T_+T_+xc+xc+xc+xc+xc+xc+xc+xc+$(+T_+Kh+7P.7P.Kh+T_+$(+T_+T_+T_+T_+T_+T_+T_+bH@9g.w]#9g.9g.9g.9g.7P.7P.y$$y$$*$@*$@B#@`b&`b&/{ J> ';$';$d #d #';$';$US+d #d #d #d #d #d #d #d #T_+T_+T_+T_+T_+T_+T_+T_+Kh+T_+$(+xc+xc+$(+T_+Kh+aH@aH@aH@bH@}f.}f.l7 l7 }f.}f.bH@aH@aH@Bz$9g.9g.Kh+G|@G|@T_+T_+G|@G|@Kh+T_+T_+T_+T_+T_+T_+T_+T_+-V@-V@35+f+#R~$R~${'${'$f+#f+#f+#f+#f+#f+#f+#f+#M8@v]#u]#u]#:{+:{+d #US+23+US+US+d #u]#:{+v]#v]#7P.G|@$(+$(+T_+G|@$(+Ea+$(+$(+$(+$(+xc+xc+", "v% fL.f% d( vk %% v% ~% ~% ~% %% 4% 4% 4% 5% r: j% x% j% 7% r: 7% x% r: r: r: r: r: r: r: r: 4% f% v% f% %% ~% %% 5% 5% 5% 5% 5% 5% 5% 5% 5% x% j% 7% r: r: 7% j% x% 7% 7% 7% 7% 7% 7% 7% r: R_ *_ af.QB@s3.<4 i% 6% #9.PI.xX%x5.x5.x5.c+#[M@j}+$9.5!.$9.j}+j}+l#@5!.5!.l#@j}+j}+$9.5!.$9.j}+h% h% h% h% h% h% h% h% h% i% i% i% h% <4 s3.;H.h% h% h% h% h% h% h% h% s3.s3.s3.s3.s3.s3.s3.s3.<4 <4 <4 <4 <4 <4 <4 <4 h% h% <4 s3.;H.5v@5v@.l.fL.fL.fL.fL.fL.fL.fL.fL.v% fL.w4.fL.v% v% I> w4.6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@6v@8H.8H.8H.8H.8H.8H.8H.8H.fL.w4.a, 8H.8H.a, w4.fL.8H.8H.8H.a, a, a, a, a, 8H.8H.8H.cl+cl+xj+xj+xj+)O )O )O )O )O )O )O )O uM uM uM )O )O Es Es sS Bh.un.{b+{b+ym.ym.aq.j}+#9.#9.$;&$;&$;&4I%)1.)1.`7&`7&4I%Hu+Hu+`^ `^ X# ef. 6 61 sq+XZ AF+O`*%Z** == =1B*27*pP*`z*!C*5u*6.&Ok$o*&gj*hj*RI&ZO@9e@^i@^i@+<+[&#'>+'>+<-+<-+3W.3W.S)@!}@!}@S)@U`$W,@.*+:-+4[%=7$Vk$Vk$RA$RA$*c$*c$*c$*c$]m$]m$]m$*c$*c$L[#*c$Wk$Wk$Wk$Tj$Tj$>b$>b$>b$Sj$Rj$09$09$=k$'M$(R#7F$Di$Cj$8F$S@%S@%Dj$Dj$a9$Ej$b8$b8$c9$c9$b8$b8$b8$c9$d9$d9$d9$5($kF$kF$/H$/H$/H$/H$GO$5Z+WK+BO@BO@BO@2R+2R+4G+4G+5&@5&@YK+YK+!K@!K@]K@]K@x)+x)+x)+x)+x)+x)+x)+x)+x)+Q,+2T+Q,+x)+>T@x)+Q,+T,@zI+@N+@N+=>+:P+B+>B+0G+0G+*>+P,+(@aZ.bZ.C,+b=#' +' +ar+=:#_f+ h+3{#qe#7}@VF#7d+8d+9d+yb+!i$m8++*$.4+id+zC$U:%@R$||$Lc#Oc#K0#9v*+f%Ff#Ef#/2#0@$1x*- =; => =, =' =) =! =~ =ZX*'L*qJ*{ =] =^ =/ =2W*FX*( =_ =[J*EA*Oc#Nc#*5#*5#L7#2*$Bf#-5#E4%>z#)5#Kq#~5#^z#Lq#>z#E4%Q[$8<$Xn#Xn#Wn#a,$)$$(O#AC$I~%i8+i8+j8+l8+^6+H#$fd+7q$7q$:@$In$Nn#0[+cd+cd+#4+Kb+_k+:k+N0+;2+/|+Ob+=w+-w+1R+1R+wD+wD+vD+vD+w)+w)+4 @4 @0G+0G+cB@x;@6$@6$@F@@F@@w;@w;@!K@!K@)K@)K@zM@zM@gm$gm$:/%sr$Wk*Ls$k`%=n#;v@!B+MF@`p+w&@*'$w,$#x%'t$'t$f6$,5$V'$@4$.4$.4$~t$j>$[}${t$y|$V<$>5$|s$,t$Ew$;o$7S$tV#AM$_a@3}@L<@(a@L<@hc@hc@:a@|9@|9@0i@gc@5l$5l$xI$xI$JH$EJ$:V$:V$:V$:V$:V$:V$:V$:V$:V$+F$_V$:V$O$5P$im%:V$#w$iR$bC$pR$sQ$EZ$EZ$M<@19@|T@OS#>:@MU#|T@ZM@1+*mQ&J$*J$*8*$8*$0s#0s#$7@$7@gh#4v#4v#4v#4v#4v#$7@$7@$7@$7@4v#XA#Vv#4L#Kx#Kx#G6@G6@a$@a$@b&@FD+uI+R0+vr+vr+K,@K,@gY#-_#gY#G6@=b$Ox#WM$P3*Pc$Y|#6~#a$@a$@a$@0$@0$@0$@0$@a=@0=@4 @my+my+ny+0G+>B+cB@DD+fm$,T@x;@cB@DD+fm$fm$,T@x;@cB@H@@cB@x;@mq@e^@L@@L@@0$@O,@0$@b=@`]%a=@K@@6Z+{3@z~@|a@L@+'_#EM@iY#wa*7#%(`#e^#QF@f^#OU#PS#.W$=n#.W$Iq@g^#'*&<7@<7@[8+[8+aa@:3@5T@i|+jE$JN*`W*q+#Kv%uw*qH$: =;G*< =[ =gW&} =MQ*1l%| =1 =5 ';$7g.DU%gm#:m%{4%{4%e6#& =Hc%Hc%=|$x*${y%B#@/{ |m.*$@y$$$(+$(+$(+T_+G|@Kh+oh.y4&iS.oh.Kh+Kh+7P.7P.G|@$(+y4&oh.Kh+G|@T_+G|@Kh+7P.G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+T_+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+xc+xc+xc+xc+xc+xc+xc+xc+$(+T_+Kh+7P.7P.Kh+T_+$(+T_+T_+T_+T_+T_+T_+T_+bH@aH@)&+aH@aH@aH@aH@G|@G|@*$@*$@*$@|m.`b&`b&`b&Bj.zi.';$d #u]#u]#d #';$';$d #d #d #d #d #d #d #d #T_+T_+T_+T_+T_+T_+T_+T_+G|@T_+$(+xc+xc+$(+T_+G|@Bz$Bz$aH@aH@bH@bH@}f.}f.bH@bH@bH@aH@aH@aH@aH@Bz$G|@G|@T_+$(+$(+T_+G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+{'${'$R~$R~$R~$R~$R~$R~$R~$R~$R~$R~$R~$R~$R~$R~$v]#:{+d #d #:{+v]#u]#';$';$';$d #u]#u]#:{+v]#v]#7P.G|@$(+$(+T_+G|@$(+Ea+Ea+Ea+xc+xc+$(+$(+", "5% v% 4% +h.vk ~% f% ~% ~% %% %% %% 4% 4% 4% r: $9.l#@$9.5!.6!.5!.l#@P7.P7.P7.P7.P7.P7.P7.O~.v% fL.fL.f% %% +h.+h.~% 5% 5% 5% 5% 5% 5% 5% 5% x% $9.5!.6!.6!.5!.$9.l#@j}+j}+l#@$9.$9.5!.6!.r: R_ *_ af.QB@s3.<4 i% 6% PI.PI.xX%O7.x5.O7.c+#[M@j}+$9.6!.5!.l#@j}+l#@5!.5!.l#@j}+l#@5!.6!.$9.j}+PI.PI.PI.PI.PI.PI.PI.PI.Hu+Hu+8v.8v.8v.Hu+PI.#9.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+cp.cp.cp.cp.cp.cp.cp.cp.<4 <4 <4 <4 <4 <4 <4 <4 h% h% <4 s3.;H.;H.5v@5v@fL.fL.fL.fL.fL.fL.fL.fL.v% fL.w4.fL.v% v% I> w4. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l.a, a, a, a, a, a, a, a, w4.w4.a, 8H.8H.a, w4.w4.fL.w4.w4.w4.w4.a, a, a, a, 8H.8H.8H.cl+cl+xj+xj+)O _y _y _y _y _y _y _y p] p] p] _y _y C' C' rS tS ph#)W+)W+(s.(s.{t.l#@#9.#9.$;&$;&$;&4I%)1.)1.`7&`7&4I%Hu+Hu+`^ `^ X# B) n6 V5 sq+HQ+AF+O`*%Z*3 =~Q*[D%ok#=z*TB*NV*vu*3B*te$S&$z*+!1$us@g,$L$*KZ@f>@f>@^i@[c@%a@'>+'>+,>+3W.S)@S)@S)@S)@U`$.*+y1#B%%&c$/a$Fs%Fs%pr%pr%(a$(a$(a$(a$7v$7v$7v$(a$jm$RA$L[#L[#Wk$Wk$Wk$!U#]m$ar$>b$>b$Sj$Sj$09$=k$'p$(R#7F$Di$Cj$8F$S@%;;%^m$^m$cN$a9$b9$b8$b8$b8$b8$b8$b8$b8$!l$~l$~l$~l$kF$kF$/H$/H$/H$/H$GO$5Z+iX+7V@7V@7V@gX+gX+5$@5$@4G+4G+YK+>K@!K@!K@]K@]K@zI+zI+zI+zI+zI+zI+zI+zI+{-+=>+:P+:P+zI+zI+=>+T,@:P+zI+@N+@N+zI+=>+x)+>T@lX+lX+0G+0G+0G+*>+*>+P,+2+f[++:$H@@&n%6G+DI+u_%47$qw$@d$7o@K1#N[$(R#7I#~m$Ts@,]$B;@DU.87$Ar+3W.f~@@@#W[$6]+ug@hi@cz@k:+hg@hg@U;+Qb+ai+mc@gz@}$@.># >#w'#Y8@1P#3f#!i$m8+9[+^6+j8+DC$V:%x<%3l#Nc#Qc#nA*9v*O0#Hq#NR#`P#_z#4 =GE*]C*> =5 =6 =7 =8 =9 =0 =a =b =c =d =e =f ={X*#Y*g =h =^y*{z*Qc#Kf#*5#*5#Fq#JB#$5#Iq#P7#,5#J0#Kq#^z#L`*es%_}%:}%7<$7<$zc#zc#yc#a,$)$$(O#AC$I~%i8+i8+j8+3/#3/#8[+H#$7q$In$:@$ ;$+*>+^K@^K@6$@6$@6$@DO@w;@w;@w;@!K@>K@)K@zM@zM@gm$gm$:/%sr$Wk*Ls$k`%=n#;7@!B+MF@`p+w&@*'$w,$8a$f6$f6$f6$,5$V'$V'$V'$V'$Sr$[}$~t$3d%y|$gu%V'$d6$,t$`u$7S$$w$AM$Ld$_a@`6@u^@$!@(a@(a@hc@hc@|9@|9@ye@fc@Qi$xI$6q$6q$nW$;G$!x$!x$!x$!x$!x$!x$!x$!x$!x$:V$+F$:V$$V>$='$-'$W>$Et$|s$Ew$`u$4U&vo$nt$Ju$&w$&w$Sp$Gt$cs$yV#.O$.O$+O$!x$+O$+O$,O$,O$[T$kQ$>O$9S$!x$.O$iR$bC$pR$pR$qR$qR$4}@fY#|T@|T@OS#MU#OS#v~@1+*J$*J$*J$*8*$:V%>'$>'$4k#4k#gh#gh#4v#XA#XA#Lx#$7@$7@$7@$7@XA#Lx#3L#4N#Kx#Vv#gY#gY#H6@H6@a$@FD+PK+R0+vr+fy+(P+K,@gY#gY#-_#gY#Y|#Ox#P3*P3*P3*Ox#6~#a$@a$@a$@0$@0$@0$@0$@0&@0&@ny+ny+ny+4 @>B+P)@^K@k#$E+$E+$mq@^K@mq@E+$E+$k#$mq@^K@^K@^K@^K@9=@0$@:&@L)@tr+Jl+tr+6o@Yp%;I$,B+dp+ak@~V+3a@Qt+;B+7$@jY#e^#7#%(`#OU#vZ#EI+Hq@PS#.W$8k#4R+EA#o}@l1@= += +Ge@Ge@<3@8l*22+@/%jE$JN*`W*q+#Kv%uw*qH$: =GM$G)*vI*jN*xI*i =j =gK&k ={Y*&3 ]T ll.nh.7g.&c%*T#]9#8&+gm#e6#& =gJ%gJ%=|$x*${y%B#@/{ |m.*$@y$$xc+$(+T_+G|@Kh+7P.Kh+Kh+oh.Kh+G|@G|@7P.oh.Kh+G|@oh.oh.7P.G|@G|@G|@Kh+Kh+$(+$(+T_+G|@G|@Kh+7P.7P.T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@$(+$(+$(+$(+$(+$(+$(+$(+xc+xc+xc+xc+xc+xc+xc+xc+T_+G|@G|@Kh+Kh+G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+bH@}f.yM+}f.}f.}f.}f.$(+$(+|m.|m.|m./{ `b&!D+!D+Bj.nh.d #u]#:{+:{+u]#d #d #d #d #d #d #d #d #d #d #T_+T_+T_+T_+T_+T_+T_+T_+G|@T_+$(+$(+$(+$(+T_+G|@Bz$Bz$Bz$Bz$aH@aH@aH@aH@aH@aH@aH@aH@bH@bH@bH@bH@T_+T_+$(+xc+xc+$(+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+d%$d%$V&$m|.{'$R~$R~$f+#m|.m|.m|.m|.m|.m|.m|.m|.:{+d #';$d #:{+v]#:{+d #:{+:{+:{+:{+:{+:{+:{+v]#Kh+T_+$(+$(+G|@G|@$(+Ea+Ea+Ea+xc+xc+$(+$(+", "5% f% 4% d( d( %% f% %% %% %% %% %% %% 4% 7% r: $9.l#@$9.5!.6!.5!.l#@6!.6!.6!.6!.6!.6!.6!.6!.v% fL.fL.f% %% +h.+h.~% 5% 5% 5% 5% 5% 5% 5% j% j% $9.5!.5!.5!.5!.$9.$9.aq.{t.{t.l#@$9.5!.6!.6!.R_ *_ af.QB@s3.<4 i% 6% Hu+Hu+xX%O7.O7.O7.c+#[M@l#@5!.6!.5!.l#@l#@$9.6!.6!.$9.l#@l#@5!.6!.5!.l#@PI.PI.PI.PI.PI.PI.PI.PI.Hu+Hu+8v.VW.8v.8v.Hu+PI.8v.8v.8v.8v.8v.8v.8v.8v.#9.#9.#9.#9.#9.#9.#9.#9.<4 <4 <4 <4 <4 <4 <4 <4 <4 <4 <4 s3.;H.;H.5v@5v@fL.fL.fL.fL.fL.fL.fL.fL.v% fL.w4.fL.v% v% I> w4. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l.a, a, a, a, a, a, a, a, w4.a, a, a, a, a, a, w4.I> I> I> fL.w4.w4.a, a, a, a, 8H.8H.8H.cl+cl+uM )O _y _y _y _y _y _y _y p] p] p] _y _y C' C' rS sS {b+21.21.aq.aq.{t.l#@#9.#9.$;&$;&$;&4I%)1.)1.`7&`7&4I%Hu+Hu+`^ `^ X# Ki._% V5 sq+XZ BF+O`*@y$l =~Q*[D%ok#=z*TB*gQ*nD*{Q*xH*wj$S&$m #!1$o1@ZO@ZO@hk*KZ@f>@9e@[c@[c@%a@,>+3W.W,@S)@S)@W,@U`$.*+A0%+*+&c$/a$Fs%0r$/9$pr%(a$(a$(a$(a$7v$7v$7v$(a$RA$RA$RA$L[#*c$Wk$Wk$Wk$]m$]m$>b$>b$>b$Sj$Rj$Sj$p=#8]+(R#Di$Cj$DP$;;%m =5G$^m$cN$cN$b9$b9$b8$b8$c9$b8$b8$b9$~l$0N$rr$rr$kF$kF$/H$/H$/H$/H$GO$5Z+iX+7V@7V@7V@gX+gX+5$@5$@5$@5$@>K@>K@!K@!K@]K@]K@=>+=>+=>+=>+=>+=>+=>+=>+@N+zI+:P+:P+zI+zI+:P+kX+=>+zI+{-+@N+{-+zI+x)+x)+lX+9G+0G+0G+*>+*>+;B+$N+T@1G+x)+hX@>2+f[++:$H@@7G+6G+BM@_P+47$,L$y4#7o@K1#N[$(R#7I#~m$Py$,]${v$DU.2|+Ar+3W.f~@ +@JL#6]+wX&m9@c)+F&+H4@'[+Z=+n;@Cq@Be@r=@!7@ >#t^@|(@Y8@3f#3f#!i$K0+Eb+E#$QO%*e%m}%2l#Kf#Qc#nA*Nu*9v*O0#Gq#.O#:#3/#8[+H#$Es$7q$:@$ ;$df#=2+$a@cd+(6+(6+Lb+:6+N0+;2+/|+Ob+=w+-w+1R+1R+sr+sr+vD+vD+}=@}=@4 @4 @ny+*>+8$@^K@G@@6$@6$@6$@R)@R)@w;@w;@>K@>K@zM@zM@gm$gm$:/%sr$Wk*Ls$k`%=n#;7@a~@NF@`p+w&@A6@{e%8a$,5$,5$,5$f6$>5$>5$>5$>5${t$~t$Sr$_;$z|$gu%@4$5c$,t$`u$$w$#w$Ld$Ld$_a@`6@u^@u~@(a@(a@L<@hc@}9@}9@xe@$F$xI$xI$@u$@u$nW$IH$xV#!x$!x$!x$!x$!x$!x$!x$+O$!x$:V$!x$)O$0S$)O$+O$;o$7S$#w$$w$;o$ap$9l$B=%N*%.O$~O$bC$7S$#w$pR$tQ$4q&W>$='$='$V>$-'$|s$}b$Ew$`u$4U&vo$nt$Ju$&w$&w$Gt$Gt$cs$yV#iR$iR$+O$+O$+O$+O$,O$,O$[T$kQ$kQ$rQ$+O$iR$bC$pR$pR$pR${`# 7@>q$M<@|T@XH@|T@MU#MU#WH@WE&39@39@mQ&J$*J$*0s#0s#.5@.5@hh#gh#4v#XA#Lx#nD#C`#59@59@59@XA#Lx#4L#3L#Vv#Vv#gY#-_#*9@H6@a$@|R+PK+vr+vr+fy+(P+K,@G6@gY#-_#gY#Y|#=b$P3*P3*WM$tW#6~#a$@a$@a$@0$@0$@0$@0$@K@@K@@ny+ny+4 @O)@>B+P)@mq@mq@k#$k#$mq@mq@mq@k#$E+$k#$k#$mq@^K@^K@^K@4 @tr+<&@{k@L)@Jl+ED+6o@{]%{]%K)@:w+(/+2]+W&+$N+lX+G@@U5+e^#(Z$:`#Hq@P.+g^#Hq@Iq@4R+^R#|P+}7@o}@l1@= += +Ge@ei@:3@A]%u(@>t*jE$JN*`W*q+#Kv%uw*qH$: =GM$D =`I*K4&pK$7J*E =gK&1 =u^&F =# ;~ 17*PU+&c%k<.B(**T#gm#e6#& =gJ%fJ%=|$x*${y%B#@/{ |m.*$@y$$Ea+$(+G|@7P.7P.7P.G|@T_+Kh+G|@T_+G|@oh.y4&oh.Kh+oh.7P.7P.Kh+Kh+G|@G|@G|@xc+xc+$(+T_+Kh+7P.oh.oh.T_+T_+T_+T_+T_+T_+T_+T_+$(+$(+T_+T_+G|@Kh+Kh+7P.G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+bH@l7 'U.l7 l7 l7 l7 xc+xc+/{ /{ /{ /{ `b&!D+!D+Bj.x{ u]#:{+v]#v]#:{+u]#u]#d #d #d #d #d #d #d #d #T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+$(+$(+T_+T_+T_+9g.9g.9g.Bz$Bz$Bz$Bz$Bz$Bz$Bz$aH@bH@bH@}f.l7 l7 $(+$(+xc+Ea+Ea+xc+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+d%$d%$d%$V&$V&$m|.m|.{'$V&$V&$V&$V&$V&$V&$V&$V&$d #';$US+';$:{+v]#:{+u]#v]#v]#v]#v]#v]#:{+:{+:{+Kh+T_+xc+$(+G|@G|@T_+xc+$(+$(+$(+$(+xc+xc+", "f% f% 5% 4% 4% f% I> 4% 4% %% %% %% %% %% r: r: $9.l#@$9.5!.6!.5!.l#@l#@l#@l#@l#@l#@l#@l#@l#@5% f% v% f% %% ~% %% 4% 5% 5% 5% 5% 5% 5% 5% j% 7% 5!.$9.$9.$9.$9.5!.5!.aq.{t.{t.l#@$9.5!.6!.6!.R_ *_ af.QB@s3.<4 i% 6% 8v.8v.O7.xX%xX%xX%[M@c+#l#@5!.6!.6!.$9.l#@$9.6!.6!.$9.l#@$9.6!.6!.5!.l#@PI.PI.PI.PI.PI.PI.PI.PI.PI.Hu+8v.8v.VW.8v.Hu+Hu+8v.8v.8v.8v.8v.8v.8v.8v.#9.#9.#9.#9.#9.#9.#9.#9.<4 af.af.af.af.af.af.af.af.QB@QB@QB@QB@4=+4=+4=+I> I> I> I> I> I> I> I> v% fL.w4.fL.v% v% I> w4. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l.a, a, a, a, a, a, a, a, a, a, a, w4.w4.a, a, a, I> I> I> fL.w4.w4.a, a, a, a, a, 8H.8H.8H.cl+uM )O _y _y _y _y _y _y _y p] p] p] _y _y C' C' rS sS {b+21.21.aq.aq.{t.l#@#9.#9.$;&$;&$;&4I%)1.)1.`7&`7&4I%Hu+Hu+`^ `^ X# ~2 _% V5 sq+Ab G =OC.H =l =I =SP*yC.$P*!C*NV*nD*{Q*4I*0%$0i$(h$BO#o1@ZO@ZO@hk*KZ@KZ@ia@9e@[c@[c@,>+,>+W,@W,@W,@W,@>>+.*+A0%+*+/a$Fs%0r$0r$/9$/9$(a$(a$(a$(a$7v$7v$7v$(a$Zz$CM#RA$RA$L[#L[#Wk$Wk$]m$]m$]m$ar$>b$>b$Sj$Sj$8]+(R#7F$Di$Cj$8F$S@%;;%^m$^m$cN$a9$b9$b8$b8$b8$c9$b8$b8$b9$~l$0N$rr$rr$kF$kF$/H$/H$/H$/H$GO$5Z+9e#nZ@nZ@nZ@fX+fX+jX+jX+jX+jX+)K@)K@]K@]K@!K@!K@=>+=>+=>+=>+=>+=>+=>+=>+@N+zI+:P+:P+zI+zI+:P+kX+zI+zI+zI+{-+{-+{-+x)+B+0G+0G+*>+*>+P,+w)+xD+xD+$B+,B+K)@O)@O)@4 @4 @8&@8&@8#%8#%8#%8#%r$%E+$^K@<^#<^#I@@^K@mq@mq@mq@mq@mq@^K@8$@8$@f^@>T@2G+T@~-+>2+CD+cB@7G+DI+}{#*6$qw$@d$S5+1h$N;$N[$(R#7I#~m$Ts@,]$B;@O$+87$Ar+3W.f~@@@#W[$6]+c!@q[$k:+F&+)F*(&#Z=+c$@0k@(&@_&@=]@[/#|(@bs#bs#9H#n8+Jb+K0+Eb+E#$gE$*e%d4%7l#Jf#Pc#Nu*Mu*{z*+f%oT#.O#fd$J =K =L =TN*-r#M =N =O =P =Q =R =S =T =U =V =W =X =>J*Y =g =C =- =tC*Sf%Jf#Hq#*5#Dc#JB#I_$-5#P7#~2#^E#J0#^z#s'$es%E4%E4%9<$Q[$Xn#W%$yc#a,$)$$(O#AC$I~%i8+i8+j8+>:#3/#<[+8[+Es$7q$-6$In$K@5Z+5Z+gm$gm$:/%sr$Wk*Ls$k`%=n#-7@pk+NF@Zp+g-$A6@g>$e6$f6$f6$f6$f6$>5$#x%#x%#x%{t$~t${t$Jw$_{&V<$V'$5c$,t$`u$$w$.O$7m@7m@_a@`6@u~@/V+u~@$!@(a@L<@}9@}9@xe@$F$xI$xI$@u$M.$;l$IH$xV#!x$!x$!x$!x$!x$!x$!x$o$pR$* *pR$7S$$w$bC$qR$7)$F4@*'$*'$V>$-'$|s$}b$Ew$`u$4U&vo$;r$ot$~x$&w$cs$yV# 7@{`#pR$bC$)O$)O$q$Y4@|T@XH@OS#MU#MU#,:@.:$8)$>]@;'$@7@39@9s#9s#.5@.5@hh#gh#4v#XA#Lx#nD#9)$9)$C`#59@gh#gh#pe#pe#Kx#Vv#G6@gY#H6@a$@a$@FD+Kl+vr+fy+fy+(P+(P+G6@G6@G6@G6@Y|#Y|#Pc$P3*P3*tW#6~#a$@a$@a$@0$@0$@0$@0$@K@@K@@ny+4 @4 @O)@>B+>B+mq@mq@^K@^K@mq@mq@mq@^K@k#$k#$k#$k#$mq@^K@^K@ny+ED+@B+hy+@B+)w+)w+dB@{w+m@%&B+B@@=:#=:##A*xI+< @W.@.W$OU#=n#8-%Iq@g^#Ka%PU#EA#|P+Jq@RS#{B+>5@p}@= += +Ge@ei@:3@A]%u(@pW$jE$JN*`W*q+#Kv%uw*qH$: =GM$D =IF*;b*Z =` =E =gK& .=N%+Se@} Bj...=QU+|r%av#]9#8&+gm#e6# 4% 4% 4% %% %% %% ~% O~.r: $9.l#@$9.5!.6!.5!.l#@j}+j}+j}+j}+j}+j}+j}+j}+%% 4% f% 5% 4% %% 5% f% 5% 5% 5% 5% 5% 5% 5% j% r: 5!.$9.l#@l#@$9.5!.6!.j}+j}+l#@$9.$9.5!.6!.6!.R_ *_ af.QB@s3.<4 i% 6% VW.VW.O7.xX%_r+xX%[M@c+#$9.6!.P7.6!.$9.l#@5!.P7.P7.5!.l#@$9.6!.P7.6!.$9.PI.PI.PI.PI.PI.PI.PI.PI.#9.PI.Hu+8v.8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI.af.af.af.af.af.af.af.af.QB@QB@QB@QB@QB@QB@QB@4=+I> I> I> I> I> I> I> I> v% fL.w4.fL.v% v% I> w4. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l.w4.w4.w4.w4.w4.w4.w4.w4.8H.a, w4.w4.w4.w4.a, 8H.fL.w4.w4.w4.w4.a, a, a, w4.w4.a, a, 8H.8H.8H.uM )O _y _y _y _y _y _y _y p] p] p] _y _y C' C' rS tS ph#)W+)W+(s.(s.{t.l#@#9.#9.$;&$;&$;&4I%)1.)1.`7&`7&4I%Hu+Hu+`^ `^ X# df.n6 61 i+#z*@+.=MH.O/%@.=#.=`z*bo*>B#lV*bW*nD*{Q*xH*0i$m #BO#M%#o1@ZO@ZO@hk*KZ@f>@9e@[c@[c@%a@:-+,>+.*+W,@W,@.*+>>+_-+km$+*+/a$Fs%0r$&W# p$/9$(a$(a$(a$(a$7v$7v$7v$(a$Zz$CM#Zz$RA$RA$L[#*c$*c$ln$ln$]m$]m$>b$>b$>b$Sj$7F$7F$Di$)g$-c$Cj$5G$5G$Dj$Dj$Ej$Ej$c9$c9$c9$_8$b8$b8$b8$b8$!l$~l$~l$~l$kF$kF$/H$/H$/H$/H$GO$5Z+9e#nZ@nZ@nZ@fX+fX+jX+jX+E@@E@@,K@)K@]K@]K@!K@!K@:P+:P+:P+:P+:P+:P+:P+:P+{-+=>+:P+:P+zI+zI+=>+T,@=>+:P+:P+=>+{-+{-+B+>B+0G+0G+mX+w)+xD+$B+$B+K)@K)@O)@t<@4 @4 @8&@8&@8#%8#%8#%8#%E+$k#$^K@8$@I@@8$@mq@k#$mq@mq@k#$k#$mq@^K@8$@f^@x)+2G+T@~-+>2+CD+8G+~K@BM@WK+*6$qw$@d$S5+1h$,b$aD#7F$Ss@~m$4Z.rV$T)@,{+N$+V,+J.+7_#GM@A;@H_%wX&2X+k:+>P+(&#(&#^+@%v$mc@b9@_&@[/#fi$|(@oD#li+9H#n8+nd+Jb+k8+l%$QO%V:%&5%)}#Jf#Nx*Mu*$A*tC*7E#;2#Px$OB#$.=%.=&.=tN*-r#*.==.=-.=;.=Ly*>.=,.='.=).=!.=~.={.=>J*].=^.=0S*rX*C.$O0#Jf#Gq##o##5#2*$l}%%G#E4%,5#J0#^E#~5#]E#ds%>z#P7#[l#%K#l1$Xn#yc#a,$)$$(O#AC$I~%i8+i8+j8+l8+l8+8[+8[+gd+gd+I#$Es$Nn#+4+~_+~_+n8+(6+Lb+si+N0+;2+/|+Ob+=w+-w+1R+1R+sr+sr+1R+1R+}=@}=@0&@0&@my+my+I@@8$@EM@7$@G@@G@@8G+R)@R)@R)@YK+YK+5Z+5Z+gm$gm$:/%sr$Wk*Ls$k`%=n#~B+pk+28+Zp+g-$A;$g>$5c$'t$'t$'t$'t$#x%>5$>5$>5$~t$[}${t$fF&_D$y|$>5$d6$,t$`u$#w$iR$_a@_a@6k@`6@58+w=@u~@u~@(a@(a@3}@}9@% $#F$JH$nW$-l$-l$;l$IH$rQ$+O$+O$+O$+O$+O$+O$+O$)O$$Et$|s$Ew$`u$4U&vo$;r$ot$~x$~x$.O$yV#{`#qR$pR$pR$)O$)O$:@>:@MU#WH@N<@4(@38+>]@;'$@7@Ip#9s#4k#4k#gh#gh#4v#XA#XA#Lx#`k$9)$C`#$7@hh#t9#M)@M)@pe#pe#c&@G6@a$@b&@-(@fD+(P+fy+fy+fy+(P+(P+c&@c&@s<@s<@=b$Y|#/=$/=$Pc$Ox#6~#a$@a$@a$@0$@0$@0$@0$@K@@Z.@4 @O)@O)@O)@0G+*>+k#$^K@8$@8$@mq@k#$mq@8$@mq@k#$k#$k#$k#$mq@^K@ny+}=@hy+,w+dB@!w+xD+$B+%B+Pt+*B+C@@#A*#A*F}$~k#dX+~K@.W$Hq@; $T!$EA#o}@Ka%Ka%}7@RS#8~#uy+{B+qQ#<3@.o+7Z+[8+Ge@:3@A]%u(@>t*jE$JN*`W*q+#Kv%uw*qH$/.=Uz*(.=vg*6J*_.=NQ*:.=<.=[.=2 =n[ >% w4. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l. l.w4.w4.w4.w4.w4.w4.w4.w4.8H.a, w4.fL.fL.w4.a, 8H.8H.8H.8H.a, a, a, a, a, w4.w4.w4.a, a, 8H.8H.)O )O _y _y _y _y _y _y _y p] p] p] _y _y C' C' rS Bh.un.{b+{b+ym.ym.aq.j}+#9.#9.$;&$;&$;&4I%)1.)1.`7&`7&4I%Hu+Hu+`^ `^ X# 1U 6 [U i+#ef ;!%}.=S[%|.=1.=:k%dk*xC.m]@2.=9J%`H*xH*0i$m #BO#M%#{R@L$*L$*KZ@f>@^i@9e@[c@%a@%a@:-+:-+.*+W,@W,@.*+m~+_-+km$}7$A3%`}&=h&=h&E}%E}%7_%7_%7_%7_%k5&k5&k5&(a$Zz$CM#CM#CM#RA$RA$L[#L[#jm$jm$ln$]m$]m$ar$>b$>b$)g$)g$)g$)g$-c$-c$Dj$Dj$@d$@d$,p$qw$_8$47$47$47$b8$b8$b8$c9$d9$d9$d9$5($kF$kF$/H$/H$/H$/H$GO$5Z+8e#M+#M+#M+#4Z+4Z+E@@E@@J #J #,K@,K@]K@]K@!K@!K@:P+:P+:P+:P+:P+:P+:P+:P+zI+:P+T,@:P+zI+{-+zI+:P+:P+T,@kX+T,@zI+zI+2T+S,@s;@s;@R,@R,@P)@P)@P)@#a@,B+$B+$B+~w+K)@K)@t<@t<@4 @4 @8&@8&@8#%8#%8#%8#%^K@^K@^K@mq@mq@mq@mq@k#$^K@mq@k#$E+$k#$mq@8$@f^@x)+2G+Q,+x)+3]+3]+X.@R)@~K@BM@WK+Wx$,p$_a$S5+!g$2h$8D#Di$Ss@~m$`o$qX+l[+%>#B'#W0+v<@hm@VQ@o'@TN#UN#c)+(_%30#d)+d)+v@@G/%mc@8L#_&@[/#Kp#Jp#5v#4f#bd%dx$nd+nd+I0+j8+fF$U:%&5%ii#Jf#Nx*$A*3`*+r#!C#:K#Px$PB#3.=4.=5.=6.=-r#7.=8.=9.=0.=a.=C`*b.=x =c.=d.=e.=f.=g.=h.=i.=rV*JW*7B*O0#Pc#Gq#NR#/X#Bf#l}%F[%_}%>z#Kq#^E#;z#+z#es%>z#P7#[l#[l#l1$W%$yc#a,$)$$(O#AC$I~%i8+i8+j8+^6+^6+H#$8[+Tx$Tx$(/$cO$B)$9[+m8+m8+n8+(6+$4+[]+N0+;2+/|+Ob+=w+-w+1R+1R+-w+-w+1R+1R+L)@L)@0&@0&@my+my+8V@8V@EM@EM@7$@G@@8G+8G+R)@R)@2 @YK+XK+XK+gm$gm$:/%sr$Wk*Ls$k`%=n#~B+pk+28+Zp+g-$A;$g>$5c$m7$m7$n7$'t$#x%>5$V'$V'$[}$j>${t$Lp$h>$z|$#x%}b$m7$`u$.O$bC$6k@_a@6k@`6@58+w=@w=@u~@u^@(a@3}@3}@$F$!E$;G$IH$;l$;l$j.=zL$rQ$+O$+O$+O$+O$+O$+O$+O$0S$$6)$E5&Et$Ew$`u$4U&vo$;r$ot$4N&~x$#w$cs$yV#{`#bC$bC$:@31@5}@MU#29@N<@4(@38+>]@;'$39@9s#49@$7@$7@gh#4v#4v#4v#4v#4v#C`#59@$7@4k#t9#t9#M)@M)@L,@yb#s<@s<@-(@-(@d^@1V+(P+fy+fy+fy+(P+(P+c&@c&@a~@z$+Ox#Y|#Sw&Sw&/=$Y|#6~#a$@a$@a$@0$@0$@0$@0$@Z.@0&@O)@O)@O)@4 @;B+Y.@k#$^K@I@@8$@mq@k#$^K@I@@mq@mq@k#$E+$k#$mq@8$@my+}=@dB@'w+sD@!w+xD+$B+&B+%B+*B+C@@#A*#A**:#4:*7~@BM@8k#Iq@5P#w-$EA#o}@}7@1V#{B+uy+8~#uy+2w+}3@<3@[7@j9@[7@[8+<3@8l*U^@>t*jE$JN*`W*q+#Kv%uw*qH$/.=k.=l.=Qf*m.=n.=o.=p.=q.= M+2 =r.=!% >n.Pw%B{$tq*e6#U`%& =& =@f>@^i@[c@%a@'>+ki@:-+:-+.*+1|+1|+6c#PX#PX#89$}7$C/%`}&=h&=h&E}%E}%y7%7_%7_%7_%k5&k5&k5&(a$Vy$CM#CM#CM#RA$RA$L[#L[#jm$jm$ln$]m$]m$]m$>b$>b$Cj$5d$Cj$-c$-c$S5+_a$_a$,L$,L$qw$&6$&6$&6$37$37$b8$b8$c9$c9$5($d8$d8$d8$kF$kF$kF$kF$/H$/H$/H$/H$8e#4Z+4Z+4Z+4Z+E@@E@@E@@J #J #[H#,K@]K@]K@!K@>K@:P+:P+:P+:P+:P+:P+:P+:P+=>+T,@kX+:P+zI+@N+{-+=>+:P+kX+m#$kX+=>+zI+2T+Vt%S,@t;@s;@s;@Q)@Q)@Q)@P)@mX+mX+,B+#a@K)@P)@t<@P)@4 @0G+4 @^K@8&@^K@8&@^K@I@@H@@^K@k#$k#$k#$k#$k#$8&@mq@k#$E+$E+$mq@H@@f^@1G+6=@Q,+x)+hX@3]+X.@2 @BM@}{#_P+BT$@d$S5+)g$)g$Jx$Oe$4d$=7$ns$]v$~}@Y{@A:&^F$z'#$>#gm@A;@0Z.c!@k:+(_%SH@EZ@d)+t.=v@@50#_9@]R# >#Kp#Kp#as#hi+B5$dx$ze$+*$ld+*2+dF$A!$F~$u.=ii#Jf#Nx*zr*bs*]Y*&g#oT# z$gT#v.=w.=x.=dC*y.=z.=A.=;.=B.=C.=D.=E.=F.=G.=H.=I.=J.=K.=L.=M.=N.=O.=7i%BA*O0#Sc#Sc#&5#@o#%G#G[%F4%_}%)5#^E#iT#iT#UT*E4%P7#[l#%K#r=$y0#'>$a,$)$$F7#_O#I~%i8+i8+j8+!|+!|+H#$8[+Tx$cO$3[+YM$l8+Eb+K0+Jb+nd+$a@{_+mi+$4+[]+)k+Ob+^/+ L+Xn+1R+-w+-w+1R+1R+L)@}=@|=@0&@_w+my+8V@I@@8$@EM@7$@cB@cB@9G+9G+y$8a$|s$m7$3u$.O$gc@gc@6k@6k@`6@v^@58+v^@u^@K<@K<@3}@fc@#F$Qi$EJ$IH$DJ$DJ$,l$wI$rQ$+O$+O$+O$+O$+O$+O$+O$!O$)O$+O$$F4@-'$6)$7)$2r$Et$Ew$`u$4U&vo$;r$ot$4N&~x$7S$Gt$#w$.O$iR$.O$+O$+O$)O$'$59@4v#4v#4v#gh#gh#gh#hh#t9#.5@ih#ih#t9#L,@yb#M)@L,@z$+z$+z$+d^@!B+WA+(P+fy+ur+fy+OK+(P+Kx#c&@LF@a~@Nx#Y|#X|#R6#X|#P3#a$@|R+a$@0$@0$@0$@0$@e^@0&@O)@t<@t<@O)@*>+<^#ly+k#$8$@<^#I@@mq@k#$^K@I@@^K@mq@k#$E+$E+$mq@8$@;B+w)+K)@S##S###a@P,+mX+zD+zD+1G+RK++N+SK+b^@6~@3G+WK+^R#}7@aN#46+RS#1V#}7@oX+{B+uy+8~#uy+{B+qQ#<3@RS#Y.+[7@.o+aa@8l*U^@;`+jE$JN**R#>Y*Kv%uw*Hv*&j*hD*P.=MX*Q.=h2.R.=S7*% =S.=2 =Ua+l* B#@xj+fL.kt*FU%T.= I> I> 4% v% 5% +h.vk ~% ~% @n _j.PI.w7+|5+Hu+9, 8v.cp.PI.PI.PI.Hu+8v.VW.VW.r: 5% T$ #% #% &) &_ &) |% ;_ ;_ ;_ ;_ EK%EK%EK%<].1% VW.8v.8v.Hu+Hu+PI.PI.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+cp.#9.<4 PI.Hu+Hu+8v.8v.Hu+PI.#9.PI.8v.8v.PI.cp.cp.PI.Hu+8v.8v.Hu+PI.cp.PI.8v.9, 8v.cp.[3+cp.Hu+N7._r+x5.is@is@x5._r+N7.is@O7._r+M7.M7.N7._r+xX%Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.#9.#9.#9.#9.#9.#9.#9.#9.PI.PI.PI.#9.#9.cp.cp.cp.#9.#9.#9.#9.#9.#9.#9.<4 4=+7v@X_ A^.A^.0c =_ =_ X_ X_ 7v@7v@ l. l.)i+)i+{_ {_ {_ {_ {_ {_ {_ {_ &5 ;b.;b.&5 &5 ;b.;b.&5 8H.cl+xj+xj+cl+8H.w4.I> w4.xj+OJ.cl+8H.xj+a, y% -h p: og C' p] P9.9e.9e.C' _y _y p] p] _y _y rS M2 )W+)W+21.j}+l#@l#@l#@#9.#9.$;&$;&$;&4I%)1.)1.M}.M}.l=&O7.O7.lX.Vb@/0+25+H! ^= U.=h{@c| %h.}.=V.=%^%QO.EA%qZ*yC.pt*5u*6.&XD*z*+!1$BO#M%#o1@g,$!5@pz@pz@g|+q'@J.+5Z.y1#A0%y1#k[+H3$H3$$ + ++|7$89$@ +@ +|0#|0#k %/a$/a$Fs%pr%pr%pr%4v$4v$4v$pr%CM#8o@HK$YJ#4[%D#$Vk$CM#RA$RA$jm$*c$*c$*c$ar$>b$S5+S5+@d$@d$,L$,L$,L$J3$w4#J3$,L$,L$,L$,L$&6$$*$Js$Ls$!I$)H$)H$!H$)H$)H$!I$!I$!I$!I$K@>K@,K@,K@)K@)K@>K@>K@YK+YK+T,@[V+TK+AI+3G+7=@[V+AI+[V+[V+[V+[V+[V+[V+[V+[V+,K@,K@)K@)K@>K@>K@YK+YK+)K@]K@!K@!K@w;@R)@R)@8G+H@@H@@^K@x;@mq@ZK+R,@Q)@>B+lX+>B+zD+#a@zD+#a@zD+Q,+Q,+ZK+>B+>B+4 @4 @4 @0&@ny+ny+;B+Y.@>2+rd+rd+3R+$N+/w+f[+'T@>T@YK+jX+@#$1T+v4#*,$(R#l~+N[#~I$d=@_-+,>++*+wy+tp%;i#O4$KD+Z)+z(#W.=Vt+l9@KL#FM@SH@4d+<$@40#q=@U1#X.=Y.=Z.=iU*OU*jU*@}%`.=dk%=d$Ib+K:%I0+G0+0_%Zg%E|%}E*7I*|*$ne% +=~z*Mu*bz*$A*U0#gl#}z#%B*AQ*/W*.+=++=@+=#+=$+=%+=&+=*+==+=;E*-+=;+=>+=LY*TV*,+='+=)+=!+=;w*~+=$f%CA*BA*BA*V7#`K*T7#;o#Q7#^5#Y7#{E#^z#'6$G0#Ec#'2#Cf#.(%s=$&^$s=$q'$$;$T@%T@%c8+/>$)|+!|+^6+:[+%|+':#':#]6+c8+J0+ld+)f+)f+ld++4+0[+{|+$a@Kb+Og+[]+lp+ m+`A+Pn+Tn+mp+mp+Xn+)w+!w+dB@K)@w)+:w+/w+Y.@0G+x;@cB@CD+S0+$N+#a@ky+=B+>T@x)+YK+jX+5$@iX+9e#!k#hX+e;%L:+*n#GD+;Z#0>@3h+!3@yb$vk$o$,t$e6$i>$y|$V<$z|$fC%np%s9$l7$l7$e6$4c$G$V=&Aw$SG$q$>q$4}@5}@MU#Z4@+7@(S&7*$WE&@7@39@49@0s#$7@4v#4v#4v#4v#pe#pe#L,@L,@hh#L,@L,@L,@L,@L,@Kx#Kx#Kx#Kx#Kx#c&@Kx#OK+7X+o;@p;@ur+tI+}R+gh#yb#gh#yb#WA#i-${+=]+=6F*W<#z@@oy+Jl+Jl+wI+g~+Z.@t<@t<@t<@m5$mq@mq@cB@G@@cB@fm$fm$,T@,T@DD+x;@x;@x;@x;@fm$>'%|#%,T@cB@H@@cB@R,@R,@Q)@ZK+ZK+Q,+Q,+:P+=>+T,@v;@wp#7=@[ @eX+| @46+nI%(v@(v@4_#4_#_f*IN*3_#ID+ID+be*be*ID+3_#}7@Ka%^R#aN#RS#:3@u.*U^@i|+pW$rn*=R*;d*uA%^+=gD*~ T_+T_+T_+G|@G|@Kh+Kh+Kh+oh.7P.G|@$(+Ea+Ea+xc+$(+$(+7P.7P.$(+$(+7P.7P.$(+7P.7P.Kh+Kh+G|@T_+$(+$(+G|@G|@G|@Kh+7P.7P.oh.oh.T_+G|@7P.oh.7P.G|@xc+Ea+23+';$u]#u]#d #d #:{+h]@h]@v]#v]#:{+u]#d #d #d #T_+T_+T_+T_+T_+T_+T_+T_+G|@xc+]! Ea+Kh+y4&iS.oh.Ea+xc+$(+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@/{ G|@xc+l7 l7 l7 l7 l7 l7 l7 l7 l7 }f.}f.bH@aH@aH@Bz$]! Ea+$(+$(+xc+xc+T_+Kh+xc+xc+$(+$(+T_+G|@G|@Kh+cI+cI+cI+l7 }f.}f.bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@aH@aH@aH@aH@aH@aH@aH@aH@aH@bH@}f.l7 l7 }f.aH@Bz$bH@bH@bH@bH@bH@bH@bH@bH@l7 l7 }f.}f.bH@aH@aH@d%$%]$GG*L*+,H*Ru$'H*{0*4+=5+=4+=~0*'H*Ru$HG*&5$&5$v]#Ea+Ea+xc+$(+$(+T_+T_+xc+$(+T_+Kh+Kh+T_+", "4% ~% ~% 5% f% f% 5% 5% v% f% d( vk %% %% *=._j.Hu+|5+[3+8v.9, 8v.#9.Hu+Hu+Hu+Hu+8v.8v.8v.7% 5% T$ #% #% &) &_ &) |% ;_ ;_ EK%EK%EK%EK%u2&<].~(.VW.8v.8v.Hu+Hu+PI.PI.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.PI.PI.Hu+Hu+Hu+Hu+8v.Hu+Hu+8v.9, 9, Hu+#9.#9.PI.Hu+8v.8v.Hu+PI.#9.#9.Hu+VW.8v.#9.cp.#9.Hu+N7._r+x5.is@is@x5._r+N7.x5.O7.xX%_r+_r+_r+_r+xX%Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.cp.QB@X_ X_ A^.A^.A^.A^.0c X_ X_ 7v@7v@ l. l.)i+)i+{_ {_ {_ {_ {_ {_ {_ {_ &5 ;b.;b.&5 &5 ;b.;b.&5 w4.a, 8H.cl+cl+8H.w4.fL.w4.xj+l`.a, a, xj+cl+-h si og C' _y _y p] P9.P9._y _y p] p] p] p] _y lP M2 )W+)W+21.j}+j}+l#@l#@#9.#9.$;&$;&$;&4I%)1.)1.)1.)1.K@>K@YK+YK+7=@[V+TK+AI+3G+7=@3G+AI+3G+3G+3G+3G+3G+3G+3G+3G+>K@>K@>K@>K@>K@>K@>K@>K@YK+YK+YK+YK+2 @2 @2 @2 @G@@G@@6$@6$@x;@x;@ZK+ZK+lX+lX+zD+zD+*B+*B+*B+~k#2T+T,@ZK+ZK+O)@O)@0=@0=@0=@0&@4 @*>+;B+3]+'T@'T@P,+[P+/w+f[+'T@{-+4G+gX+u_%:8$K1#7G#7F$l~+~I$f&@HK$4)#@ +3)#a/$tp%`a$V-$;P%E]#JD+e~@oX+KL#f>$fB@bK@31$U}$40#6+=6+=7+=Y.=`;#iU*jU*jU*Tb$#}%=d$#*$8+=;Y*G0+dF$A!$^g%9+=74%*o#3l#L0#Oc#~z*Mu*bz*zr*Zc#0+=]C*1`*a+=%`*b+=c+=d+=e+=f+=g+=h+=i+=j+=k+=l+=pW*m+=n+=XY*^z*1X*SN*o+=Bw*,w*~+=p+=wB*EA*ZA*Q0#S7#;o#U7#Y7#Y7#~5#~5#pt#Ec#Ec#Cf#Af#X%$^$$E~$Xy#>X#$;$C0+T@%c8+/>$x0+!|+^6+x0+,:#-6+-6+{6+$`$k8+q+=~k%~k%I0+I0+~i#|i#0[+Of$Kb+Qn#ki+0c#.m+BR#Sn+Tn+Tn+mp+vD+)w+$B+$B+w)+:w+/w+Y.@9G+lX+cB@f^@:w+xD+&B+yD+3R+3R+o$4P$hS%t;&Sr$el$|}$np%I1$s9$w,$w,$Q)$4c$uV#Rl$Ld$_a@-/+wT#wT#wT#Qi$!E$#F$$F$$F$#F$Qi$Qi$#F$Qi$5l$!E$$F$=L$% $#F$:@Z4@x)&(S&1+*7*$@7@39@49@0s#$7@gh#gh#gh#gh#yb#yb#L,@L,@L,@L,@L,@L,@L,@L,@pe#pe#pe#pe#pe#pe#pe#}R+(t#eK@eK@eK@tI+@w+4v#4v#4v#4v#5L#5L#{+={+=iE*SR$z@@oy+sr+sr+g~+g~+ny+t<@t<@t<@k#$mq@6$@G@@G@@G@@,T@,T@,T@DD+DD+x;@x;@x;@H@@DD+|#%|#%,T@DD+DD+,T@DD+DD+w;@w;@w;@!K@>K@>K@R,+4G+jX+jX+2R+2R+gX+!k#bN#+l#yx#yx#9~#9~#(v@-1#3_#3_#;[# 4#;[#;[#t$+/v@Ka%|P+Jq@}7@:3@u.*U^@i|+pW$rn*=R*;d*9F*W~&=G*_N*8r%r+=s+=dV*&W*[+=+U*t+=u+=v+=BB @4#+P@U6.sD#^o%Aj+(&%P4%ms%9D%rN%O4%3]&_c$fd%fd%fd%f].f].3+=>~ dl.T_+T_+G|@G|@Kh+Kh+Kh+7P.Kh+T_+xc+Ea+Ea+Ea+xc+$(+7P.7P.$(+$(+7P.7P.$(+xc+$(+$(+T_+G|@Kh+Kh+7P.T_+T_+G|@G|@Kh+Kh+7P.7P.G|@T_+T_+$(+$(+$(+$(+$(+';$u]#:{+u]#';$US+';$u]#d #d #u]#u]#u]#u]#u]#u]#$(+$(+$(+$(+$(+$(+$(+$(+7P.T_+Ea+Ea+T_+Kh+Kh+T_+$(+$(+$(+$(+$(+T_+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@l7 l7 l7 l7 l7 l7 l7 l7 }f.}f.}f.bH@bH@bH@bH@bH@Ea+$(+T_+T_+$(+$(+T_+Kh+T_+T_+T_+T_+G|@G|@G|@G|@l7 l7 l7 }f.bH@bH@bH@aH@}f.}f.}f.}f.}f.}f.}f.}f.bH@bH@bH@bH@bH@bH@bH@bH@9g.aH@bH@l7 l7 l7 }f.bH@bH@bH@bH@bH@bH@bH@bH@bH@}f.}f.}f.bH@bH@bH@bH@m|.Ru$HG*Ru$HG*&5$,H*&5$,H*{0*'H*{0*'H*{0*HG*Ru$Ru$:{+xc+$(+$(+$(+$(+T_+T_+xc+$(+T_+G|@G|@T_+", "f% %% %% 4% 5% 4% %% 5% I> f% d( d( 4% 4% Lv._j.8v.cp.#9.VW.G6.VW.PI.8v.8v.8v.8v.Hu+Hu+Hu+j% 5% T$ #% #% &) &_ &) |% ;_ ;_ EK%EK%EK%EK%u2&<].^q%8v.8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+8v.Hu+Hu+Hu+Hu+PI.PI.PI.Hu+Hu+8v.G6.X)@hY.8v.#9.#9.PI.Hu+Hu+Hu+Hu+PI.#9.cp.PI.Hu+Hu+PI.#9.Hu+8v.N7.xX%O7.is@is@O7.xX%N7.O7.x5.x5.x5.x5.O7.xX%_r+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+N7.N7.M7.M7.M7.%0+%0+%0+%0+%0+%0+%0+[3+af.A^.A^.A^.X_ X_ X_ X_ X_ X_ 7v@7v@ l. l.)i+)i+{_ {_ {_ {_ {_ {_ {_ {_ &5 ;b.;b.&5 &5 ;b.;b.&5 I> fL.w4.a, a, a, w4.w4.w4.cl+cl+fL.fL.xj+l`.)O )O _y _y _y _y _y _y _y _y p] P9.P9.P9.P9.p] lP UV {b+)W+)W+j}+j}+j}+l#@#9.#9.$;&$;&$;&4I%)1.)1.Ay.Ay.#k._r+PK.= @= @OS*X# M) tM 8x+A7 0f %h.tv )f%|B*`c.!#&ks%qZ*$P*2B*3B*qX*S&$z*+M%#M%#{R@Lu@pz@pz@g|+33@tm#J.+1|+A0%km$A0%9T+DA$hq#g!&j5&L$+89$@ +@ ++B$|0#k %/a$/a$Fs%Fs%pr%pr%4v$4v$4v$pr%CM#8o@HK$YJ#4[%D#$Vk$CM#RA$RA$jm$*c$*c$*c$ar$ar$_a$_a$_a$@d$@d$,L$,L$,L$@d$@d$_a$Dj$Dj$_a$@d$,p$;J$Ks$Ks$Ks$Ls$Ls$Ls$Ls$!I$!I$!I$!I$!I$!I$!I$WL$pZ@E@@E@@E@@E@@J #J #J #E@@E@@jX+jX+5$@5$@4G+4G+7=@[V+AI+[V+7=@7=@3G+AI+7=@7=@7=@7=@7=@7=@7=@7=@>K@>K@>K@>K@>K@>K@>K@>K@5G+5G+5G+5G+2 @2 @2 @2 @DO@DO@6$@6$@x;@x;@9G+9G+lX+lX+zD+zD+*B+*B+*B+~k#|V+kX+Q)@Q)@Q,@t<@a=@a=@a=@a=@O)@0G+*>+hX@hX@3]+Gn+[P+/w+>2+3]+{-+5&@gX+vp#L1#,b$_{#Di$N[#~I$f&@HK$HK$+B$wy+a/$tp%W@+V-$;P%E]#gi$8Z+uy+! +f>$fB@bK@31$t.=t.=w+=w+=x+=y+=`;#`;#o[%jU*Tb$Tb$e}%#*$8+=Yg%G0+dF$G~$G~$z+=0f%)}#)}#Pc#Pc#9v*Mu*cD*gz#gl#4E#]C*A+=B+=C+=D+=E+=F+=G+=H+=I+=J+=K+=L+=M+=N+=O+=P+=7M*oB*]y*FV*GU*o+=Q+=xv*7v*!D*7B*{z*mA*Kc#Rc#;o#;o#W7#!5#+z#;z#Y`#!2#Ec#+o#yf#X%$X%$W4$!X#,X#$;$C0+C0+c8+c8+x0+.4+!|+)|+x0+c8+/>$Z3+i8+_[+K:%Hb+Hb+J0+J0+*2+,f++4+Of$Kb+M4#Mn#mq#@m+*w+Pn+Sn+Sn+Tn+wD+vD+xD+xD+w)+Z#20$j}@L&+4h+gm+Nc$vk$G=%$I%>o$yo$hS%_{&{t$6:$fC%X'$I1$q0$g>${e%Tp$4c$Sl$=3@7m@_a@-/+-/+-/+-/+5l$Qi$Qi$!E$!E$!E$Qi$5l$$F$!E$Qi$!E$$F$% $$F$!E$r$4N&4N&p@*0S$0S$)O$)O$:@5}@5}@.7@X=&1+*1+*7*$39@mQ&0s#49@4k#hh#hh#hh#hh#L,@L,@L,@L,@L,@L,@L,@L,@L,@L,@yb#yb#yb#yb#yb#yb#yb#ay+}R+}T+}T+}T+OK+OK+Kx#Kx#Vv#Vv#i-$i-$ 2* 2*a1*Ox#z@@oy+sr+sr+g~+g~+ny+t<@t<@t<@k#$mq@6$@G@@G@@G@@,T@DD+DD+DD+x;@x;@x;@x;@CD+x;@fm$fm$,T@,T@fm$>'%8G+R)@R)@w;@>K@>K@)K@)K@yM@5&@gX+2R+CI+CI+BO@vp#37$('$+l#+l#f'$+l#4_#_f*+L+3_#t$+;[#;[#;[#t$+/v@Ka%EA#RS#1V#<3@A]%U^@@/%pW$rn*=R*;d*9F*W~&=G*_N*R+=S+=s+=JV*LV* [+T+=U+=o^&V+=T* ,_&N4%01+RF%W+=Aj+(&%P4%ms%9D%rN%O4%3]&_c$_c$_c$fd%.y#f].f].C! dl.T_+T_+G|@G|@Kh+Kh+Kh+G|@G|@$(+xc+Ea+Ea+Ea+Ea+$(+7P.7P.$(+$(+7P.7P.$(+xc+xc+$(+$(+T_+G|@Kh+Kh+T_+T_+T_+T_+G|@G|@G|@G|@G|@$(+Ea+]! 5A.xc+T_+Kh+u]#:{+v]#u]#US+23+23+';$23+US+US+';$d #u]#:{+:{+$(+$(+$(+$(+$(+$(+$(+$(+y4&Kh+$(+xc+xc+$(+Ea+5A.G|@T_+xc+Ea+Ea+Ea+$(+T_+G|@G|@G|@G|@G|@G|@G|@G|@l7 l7 l7 l7 l7 l7 l7 l7 bH@bH@bH@bH@bH@}f.}f.}f.xc+T_+Kh+Kh+T_+T_+G|@7P.Kh+Kh+Kh+Kh+G|@G|@G|@G|@}f.}f.bH@bH@bH@aH@aH@aH@}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.Bz$Bz$bH@}f.l7 l7 }f.}f.aH@aH@aH@aH@aH@aH@aH@aH@bH@bH@bH@bH@bH@}f.}f.}f.V&$~0*m|.Ru$R~$L*+35+%]${'$Ru${'${0*m|.{0*m|.m|.T_+T_+T_+T_+T_+$(+$(+$(+xc+$(+T_+T_+T_+T_+", "5% %% %% 4% 5% 4% %% 5% I> v% ~% ~% 5% 5% O~.n` VW.PI.Hu+9, G6.VW.Hu+VW.VW.VW.8v.Hu+PI.PI.x% 5% T$ #% #% &) &_ &) |% ;_ ;_ EK%EK%EK%EK%u2&<].^q%8v.8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+VW.VW.8v.8v.Hu+PI.PI.#9.PI.PI.8v.G6.X)@G6.Hu+[3+PI.PI.PI.Hu+Hu+PI.PI.PI.cp.#9.PI.PI.PI.Hu+8v.VW._r+xX%O7.x5.x5.O7.xX%_r+O7.x5.is@Vh.Vh.x5.xX%N7.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+N7.N7.M7.M7.M7.$B#$B#$B#$B#$B#$B#$B#|5+g% 0c A^.X_ X_ 7v@ l. l.X_ X_ 7v@7v@ l. l.)i+)i+{_ {_ {_ {_ {_ {_ {_ {_ &5 ;b.;b.&5 &5 ;b.;b.&5 v% I> fL.fL.w4.a, a, a, a, cl+8H.I> I> xj+OJ.EV.uM p] _y _y _y _y C' C' p] p] P9.9e.9e.P9.p] 7e.UV {b+{b+)W+{t.j}+j}+j}+#9.#9.$;&$;&$;&4I%)1.)1.6R@6R@v4.N7.I1.zH.zH.n4*X# M) k*.7P+n0 0K+gt R= y{%q]%`c.`c.An*ks%=z*2B*3B*sz*S&$z*+M%#OV*{R@./%pz@g|+g|+33@tm#ki@y1#A0%km$A0%9T+DA$hq#g!&j5&L$+89$@ +@ ++B$|0#k %/a$/a$Fs%Fs%pr%pr%4v$4v$4v$pr%CM#8o@HK$YJ#4[%D#$Vk$CM#RA$RA$jm$*c$*c$*c$ar$ar$Dj$Dj$_a$_a$@d$@d$,L$,L$_a$_a$Dj$^m$^m$Dj$_a$Ej$Js$Ks$AU$AU$AU$Ks$Ks$Ls$!I$!I$!I$!I$!I$!I$!I$!l$9e#jX+E@@E@@J #K #K #IO$E@@E@@jX+jX+5$@5$@4G+4G+7=@3G+AI+[V+7=@wp#3G+[V+8=@8=@8=@8=@8=@8=@8=@8=@)K@)K@>K@>K@YK+YK+2 @2 @-K@-K@;K@;K@5G+2 @2 @YK+CO@SQ@DO@6$@x;@cB@3 @3 @lX+lX+zD+zD+*B+*B+*B+~k#v;@v;@s;@s;@Q,@Q,@qt$a=@qt$qt$t<@>B+0G+>T@>T@hX@h~+h~+~-+3]+hX@{-+5&@BO@Qj$M1#2h$!g$)g$N[#N[#~I$4[%1S#wy+]8$-o$4V+Hw%~)&[s#E]#9k#y'#j~+sd+/K@n7#bK@<$@2{##f+X+=X.=x+=Y+=J#$Jp#o[%@}%Tb$Tb$e}%G#$oU%Yg%eF$F0+G~$vc#mR*3@$Z+=!}#9E#+f%Mu*Mu*cD*!u#eK*)C#'D*;u#`+=%`* @=.@=+@=@@=#@=My*$@=%@=&@=*@==@=f =-@=7M*oB*]y*pV*sN*o+=Q+=;w*;@=B.$C.${C*mA*V7#Jc#;o#'5#A7%!5#;z#iT#}w#M7#G0#H_$#G#X%$0($F7#!X#,X#,X#B0+C0+c8+c8+:[+!|+!|+)|+)|+;6+;6+~6+i8+_[+K:%H0+H0+k8+k8+I0+~i#+*${f+Kb+M4#WN#nq##m+V1#Pn+Pn+Sn+Sn+rr+wD+S.@S.@,B+o$yo$[V%_{&3d%rk$np%5Z$I1$>y$='$g>$zo$Iu$io@io@_a@6k@-/+-/+=/+=/+@F$5l$5l$Qi$Qi$Qi$Qi$Qi$$F$!E$Qi$!E$$F$% $$F$!E$)O$)O$)O$)O$)O$)O$)O$)O$)O$)O$r$>r$>r$!O$0S$)O$:@31@@r%WE&o@*J$*mQ&mQ&49@>'$4k#4k#hh#t9#t9#t9#LF@LF@L,@L,@L,@L,@L,@L,@L,@L,@L,@L,@L,@L,@L,@L,@L,@(T+(T+b$@_T+}T+}R+OK+Vv#Vv#4L#4L#SR$i-$ 2*a1*`1*tW#z@@oy+sr+sr+g~+g~+ny+t<@t<@t<@k#$mq@6$@G@@G@@G@@DD+DD+x;@x;@x;@x;@x;@x;@cB@DD+fm$fm$,T@DD+fm$>'%X.@8G+R)@w;@>K@)K@,K@E@@r8+R,+2R+2R+]-+]-+BO@00$_8$%6$f'$f'$('$f'$nI%(v@T5++L+t$+;[#;[#;[#t$+t$+Ka%Ka%1V#>5@<3@8l*U^@;`+pW$rn*=R*;d*9F*W~&=G*_N*>@=,@='@=)@=!@=~@={@=]@=^@=/@=b% w^&+P@eT@eJ%|n%(@=_W%ms%ms%9D%rN%#u%O4%_c$_c$_c$fd%.y#.y#f].C! dl.T_+T_+G|@G|@Kh+Kh+Kh+Kh+G|@T_+T_+$(+$(+$(+$(+$(+7P.7P.$(+$(+7P.7P.$(+Kh+G|@G|@T_+$(+xc+xc+Ea+$(+$(+$(+T_+T_+T_+T_+T_+$(+xc+Ea+Ea+xc+$(+G|@Kh+';$u]#:{+d #US+23+US+';$US+US+US+';$';$d #d #d #xc+xc+xc+xc+xc+xc+xc+xc+Kh+G|@T_+xc+xc+Ea+5A.]! 7P.G|@xc+]! ]! 5A.xc+$(+G|@G|@G|@G|@G|@G|@G|@G|@bH@bH@bH@bH@bH@bH@bH@bH@Bz$aH@aH@bH@}f.}f.l7 l7 T_+Kh+oh.7P.G|@G|@Kh+oh.oh.oh.7P.7P.Kh+G|@G|@T_+aH@aH@aH@aH@aH@aH@aH@aH@l7 l7 l7 l7 l7 l7 l7 l7 l7 l7 l7 l7 l7 l7 l7 l7 bH@bH@}f.}f.}f.bH@bH@aH@aH@aH@aH@aH@aH@aH@aH@aH@Bz$aH@aH@bH@}f.}f.l7 l7 bH@m|.}f.{'$l7 R~$cI+f+#l7 R~$}f.{'$bH@V&$aH@Bz$Kh+Kh+G|@T_+T_+$(+$(+xc+xc+$(+$(+$(+$(+$(+", "4% ~% ~% 5% f% f% 5% 5% v% f% ~% ~% 5% f% r: 1% 8v.8v.8v.9, 9, VW.Hu+VW.VW.VW.8v.Hu+PI.PI.x% 5% T$ #% #% &) &_ &) |% ;_ ;_ EK%EK%EK%EK%u2&<].`d#Hu+Hu+Hu+8v.8v.8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+9, VW.VW.8v.Hu+Hu+PI.PI.#9.#9.PI.8v.9, 9, PI.[3+Hu+PI.PI.PI.PI.PI.PI.Hu+#9.#9.#9.PI.Hu+8v.8v.8v.xX%xX%O7.O7.O7.O7.xX%xX%O7.x5.is@Vh.Vh.x5.xX%N7.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+N7.N7.M7.M7.M7.$B#$B#$B#$B#$B#$B#$B#|5+af.A^.A^.X_ 7v@ l. l. l.X_ X_ 7v@7v@ l. l.)i+)i+{_ {_ {_ {_ {_ {_ {_ {_ &5 ;b.;b.&5 &5 ;b.;b.&5 I> I> I> fL.fL.w4.a, 8H.a, cl+8H.I> I> xj+OJ.EV.uM p] _y _y _y _y C' C' _y p] p] P9.P9.p] p] lP {D ph#{b+{b+{t.{t.j}+j}+#9.#9.$;&$;&$;&4I%)1.)1.6R@6R@v4.N7.I1.zH.zH.n4*kg.,++JB #(&AU+0K+5 .$E.Uz q]%Y^%Y^%VB%!m%2B*m]@uB*sz*S&$z*+M%#OV*g,$./%g|+g|+33@IG#v<@ki@y1#km$&c$km$gZ.9T+g!&MR%V@+99$89$@ +@ ++B$|0#k %/a$/a$Fs%Fs%pr%pr%4v$4v$4v$pr%CM#8o@D#$4[%4[%D#$RA$Zz$jm$jm$jm$*c$]m$]m$ar$ar$Dj$Dj$Dj$_a$_a$@d$@d$@d$_a$Dj$^m$^m$^m$^m$Dj$Ej$;u$;u$;J$,M$,M$;J$Js$;u$im$im$im$im$im$im$im$!l$9e#E@@E@@J #K #K #IO$IO$E@@E@@jX+jX+5$@5$@4G+4G+wp#3G+[V+3G+7=@wp#7=@[V+8=@8=@8=@8=@8=@8=@8=@8=@[H#[H#)K@>K@2 @5G+-K@-K@-K@-K@;K@;K@5G+2 @2 @YK+CO@CO@F@@W.@R)@8G+>T@>T@B+x)+>T@>T@h~+h~+~-+3]+hX@AI+CI+BO@]v#lw$Jc&!g$)g$4d$4d$7I#e$@X_#dD$kn$a/$Z]$>i#zp#K.+E]#9k#=t@j~+sd+/K@> +M:$U}$_@=:@=<@=*'@Y.=Y+=o/#Z;#o[%@}%Tb$[@=[@=F#$}@=|@=fF$F0+G~$B!$z+=RS*ii#~}#8E#GD*Mu*5A*jx*1@=4E#fz#^z*2@==C*VZ*3@=4@=5@=6@=7@=8@=9@=0@=a@=b@=c@=f =P+=d@=Uy*FA*FV*sN*o+=Q+=;w*Ut#B.$@r#{z*ZA*R0#K0#;o#'5#W7#Y7#]z#iT#}w#M7#Ec#+o#yf#X%$0($F7#VY#,X#,X#A0+B0+c8+c8+,:#^6+^6+)|+y0+&2+&2+~6+i8+_[+K:%H0+H0+l%$l%$ 4+~i#+*${f+#4+M0+&l#}w+#m+VA$Pn+Pn+Sn+Sn+rr+wD+S.@S.@,B+w)+;B+*>+lX+ZK+x;@9G+T##iy+yD+B@@Hl+h~+x)+kX+kX+8=@| @W|#I8%/s#Z&+S@+0N#d^#j}@ew+N3+hm+0j$vk$G=%G=%Aq$yo$_n$_D$_;$Lm$fC%5Z$K1$q0$g>$g>$zo$Iu$io@0X#6k@gc@wT#-/+-/+=/+@F$@F$@F$5l$5l$Qi$!E$!E$% $#F$Qi$!E$$F$% $#F$Qi$)O$)O$)O$)O$'%|#%DD+x;@DD+fm$X.@8G+2 @YK+>K@)K@E@@E@@r8+]-+2R+2R+nq@nq@BO@00$c9$J$+('$('$('$f'$nI%_f*Lp#T5+/v@t$+;[#;[#t$+t$+o}@o}@* +* +<3@:3@U^@;`+pW$rn*=R*;d*9F*W~&=G*_N*bV*e@=f@=g@=h@=i@==W*MR*v)@IX@K) #tq.^o%{f%(@=_W%6l%6l%9D%R+&z$$@d+3&$3&$_c$_c$ok.H0@.y#H0@dl.T_+T_+G|@G|@Kh+Kh+Kh+7P.7P.7P.7P.Kh+Kh+G|@G|@$(+7P.7P.$(+$(+7P.7P.$(+Kh+Kh+G|@T_+$(+$(+xc+xc+T_+T_+T_+T_+T_+$(+$(+$(+Ea+xc+T_+Kh+7P.Kh+G|@G|@OP*US+d #';$US+US+d #:{+d #d #d #';$';$US+US+US+$(+$(+$(+$(+$(+$(+$(+$(+xc+$(+$(+$(+xc+xc+xc+xc+oh.Kh+xc+5A.]! 5A.xc+T_+G|@G|@G|@G|@G|@G|@G|@G|@Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$aH@aH@bH@}f.}f.l7 l7 G|@7P.oh.oh.Kh+G|@Kh+oh.oh.oh.7P.7P.Kh+G|@G|@T_+aH@aH@aH@aH@aH@aH@aH@aH@}f.}f.}f.}f.}f.}f.}f.}f.l7 l7 l7 l7 l7 l7 l7 l7 NM+cI+l7 }f.aH@Bz$Bz$9g.aH@aH@aH@aH@aH@aH@aH@aH@Bz$aH@aH@bH@}f.}f.l7 l7 cI+cI+[y+l7 |f.}f.J; bH@[y+l7 |f.}f.J; aH@P] Bz$G|@G|@G|@T_+$(+$(+xc+xc+$(+xc+xc+xc+xc+xc+", "%% ~% ~% 5% v% f% 5% %% f% 5% d( d( 5% f% r: i% 8v.8v.VW.VW.VW.8v.Hu+8v.8v.8v.8v.Hu+Hu+Hu+j% 5% T$ #% #% &) &_ &) |% ;_ ;_ EK%EK%EK%EK%u2&<].`d#Hu+Hu+Hu+8v.8v.8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+VW.VW.VW.8v.8v.8v.8v.Hu+Hu+#9.#9.PI.8v.8v.PI.cp.Hu+Hu+PI.#9.#9.PI.Hu+Hu+Hu+#9.cp.#9.Hu+8v.Hu+PI.O7.O7.xX%xX%xX%xX%O7.O7.O7.x5.x5.x5.x5.O7.xX%_r+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+N7.N7.M7.M7.M7.%0+%0+%0+%0+%0+%0+%0+[3+QB@X_ 7v@7v@7v@7v@ l. l.X_ X_ 7v@7v@ l. l.)i+)i+{_ {_ {_ {_ {_ {_ {_ {_ &5 ;b.;b.&5 &5 ;b.;b.&5 a, w4.fL.fL.fL.w4.a, 8H.w4.cl+cl+fL.fL.xj+l`.8H.)O _y _y _y _y _y _y _y C' C' _y p] p] _y C' rS {D ph#ph#{b+aq.{t.{t.{t.#9.#9.$;&$;&$;&4I%)1.)1.Ay.Ay.#k._r+PK.= @= @OS*lg.H7%JB f|$Zv i|%j@=;l+p^%q]%Y^%>2%zE%An*2B*m]@BX&6.&wj$z*+M%#OV*g,$q'@g|+g|+33@IG#v<@3W.A0%km$&c$km$gZ.9T+g!&MR%V@+99$89$@ +@ ++B$|0#k %/a$/a$Fs%Fs%pr%pr%4v$4v$4v$pr%CM#8o@D#$4[%4[%D#$RA$Zz$jm$jm$jm$*c$]m$]m$ar$>b$^m$Dj$Dj$Dj$_a$_a$@d$@d$_a$Dj$Dj$^m$^m$Dj$Dj$_a$c8$im$Js$;J$,M$;J$Js$im$im$im$im$im$im$im$im$!l$Xx$J #J #K #K #K #K #K #E@@E@@jX+jX+5$@5$@4G+4G+wp#7=@[V+3G+wp#8=@7=@[V+8=@8=@8=@8=@8=@8=@8=@8=@[H#,K@)K@YK+2 @;K@-K@g[+5G+5G+5G+5G+2 @2 @2 @2 @F@@F@@W.@W.@R)@R)@x)+x)+B+0G+x)+>T@{-+H,@H,@3]+@N+{-+AI+CI+e'#[{#2h$2h$!g$)g$)g$4d$7I##@#X_#dD$cD$wy+5h#[V#;P%$[@JD+ c%u4#! +b=#5i@EZ@M:$t.=:@=k@=l@=(l%Y.=J#$v'#oD#m@=n@=[@=^$%[@=F#$}@=|@=F_%0_%^g%F~$9+=]$$-o#Ff#(I#TX*BA*5A*as*Ni#o@=]Y*6Q*p@=q@=VZ*r@=s@=t@=u@=v@=My*w@=x@=y@=z@=A@=f =P+=B@=XY*6A*TT*GU*Q+=Bw*;w*Ut#B.$C.$EA*kw*V7#K0#U7#U7#Y7#^5#]z#]z#D2$M7#!2#Cf#Af#0($0($`A$K`#,X#,X#A0+A0+/>$c8+,:#3/#3/#x0+)|+&2+;6+~6+$`$_[+K:%Hb+Hb+j8+j8+Gy#'l#!|++*$$a@Og+M4#WN#[w++m+Pn+Sn+Sn+Tn+wD+vD+xD+xD+K)@w)+;B+*>+ZK+Q)@DD+9G+K)@iy+&B+T.@h~+h~+>T@:P+T,@wp#| @U<#ig*Qm#1T+mJ#|8+(9$bm@ew+M3+im+0j$vk$G=%G=%Aq$$Jw$sk$|}$Iw$K1$U2$w,$w,$zo$zb$io@io@6k@gc@oW$oW$wT#wT#5l$5l$5l$5l$Qi$!E$#F$$F$% $#F$!E$!E$$F$$F$#F$Qi$)O$)O$)O$'$0s#0s#>'$vi$59@59@gh#hh#hh#t9#ih#ih#L,@L,@L,@L,@L,@L,@L,@L,@yb#yb#yb#yb#yb#yb#yb#ay+(T+b$@_T+_T+ay+ay+pe#pe#Vv#Vv#i-$i-$ 2* 2*a1*Ox#z@@oy+sr+sr+g~+g~+ny+t<@t<@t<@k#$mq@6$@G@@G@@G@@H@@cB@cB@cB@x;@x;@x;@x;@>'%7s%7s%|#%DD+x;@DD+fm$8G+R)@2 @YK+>K@>K@jX+jX+->+CI+gX+2R+fX@fX@BO@00$Ej$J$+('$f'$('$f'$4_#-1#/R#Lp#ds#/v@t$+t$+t$+t$+o}@=1#_3@p}@<3@:3@22+>t*pW$rn*=R*;d*9F*W~&=G*@W*D@=e@=E@=F@=G@=H@=I@=7T*n5 H~*P* /b+i|$$P%^o%J@=K@=^0.6l%6l%9D%R+&mq+z$$3&$3&$PC#_c$ok.H0@.y#H0@T_+T_+T_+G|@G|@Kh+Kh+Kh+7P.oh.oh.y4&y4&oh.7P.Kh+$(+7P.7P.$(+$(+7P.7P.$(+$(+$(+T_+G|@Kh+Kh+7P.7P.G|@G|@G|@G|@T_+T_+T_+T_+Ea+$(+Kh+oh.oh.7P.G|@$(+[f.23+';$';$US+US+d #:{+:{+:{+u]#d #';$US+US+23+T_+T_+T_+T_+T_+T_+T_+T_+]! xc+T_+G|@T_+$(+T_+G|@7P.G|@T_+xc+xc+$(+T_+G|@G|@G|@G|@G|@G|@G|@G|@G|@Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$bH@bH@bH@bH@bH@}f.}f.}f.Kh+7P.oh.7P.G|@T_+G|@7P.Kh+Kh+Kh+Kh+G|@G|@G|@G|@aH@aH@aH@bH@bH@bH@}f.}f.bH@bH@bH@bH@bH@bH@bH@bH@}f.}f.}f.}f.}f.}f.}f.}f.NM+cI+l7 bH@aH@Bz$Bz$Bz$bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@}f.}f.}f.Ov+Ov+%U.[y+|f.J; P] P] |f.|f.|f.J; J; J; J; J; $(+$(+$(+xc+xc+xc+xc+xc+$(+xc+Ea+Ea+Ea+Ea+", "5% %% %% 4% 5% 4% %% ~% 5% 4% +h.+h.4% 5% O~.<4 PI.8v.VW.8v.Hu+PI.PI.Hu+Hu+Hu+Hu+8v.8v.8v.7% 5% &- &% &% 4% 5% 4% ~% -H.-H.<].<].<].<].z^.<].2P PI.Hu+Hu+8v.8v.VW.VW.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+8v.8v.8v.8v.VW.VW.VW.VW.9, Hu+#9.#9.Hu+8v.8v.Hu+8v.Hu+PI.#9.#9.PI.Hu+8v.VW.PI.cp.#9.Hu+8v.PI.cp.O7.O7.xX%xX%xX%xX%O7.O7.x5.O7.xX%_r+_r+_r+_r+xX%Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.cp.5v@6v@6v@4=+4=+4=+4=+4=+QB@QB@4=+4=+6v@6v@@[+@[+w4.w4.w4.w4.w4.w4.w4.w4.I> a, a, I> I> a, a, I> xj+cl+a, w4.w4.w4.a, 8H.w4.xj+l`.a, a, xj+cl+fL.si si Es )O )O uM EV.EV.-h si Es Es Es Es si UV {D ph#ph#ph#aq.aq.{t.{t.#9.#9.$;&$;&$;&4I%)1.)1.)1.)1.b$>b$^m$^m$Dj$Dj$Dj$_a$_a$_a$@d$_a$Dj$Dj$Dj$Dj$_a$@d$Rb$qn%;u$;J$;J$Js$;u$c8$im$im$im$im$im$im$im$!l$HO$HO$YP$YP$YP$YP$Xx$Xx$8e#8e#9e#9e#iX+iX+WK+2R+8=@7=@3G+3G+wp#8=@wp#3G+wp#wp#wp#wp#wp#wp#wp#wp#YK+YK+YK+2 @2 @2 @5G+5G+YK+YK+YK+YK+2 @2 @2 @2 @7G+7G+W.@W.@R)@R)@Q,+Q,+B+0G+>T@hX@@N+J,@J,@ib#TK+AI+VK+nq@1O#Wx$,b$,b$1h$)g$)g$A4#Ss@=c@f&@dD$cD$k %6)#b/$Z)+G4%4h#jh#(m@KL#) +' +d)+M:$#f+jo@0Q%L@=M@=y+=J#$n=#5v#m@=oj%^$%^$%+|+@|+-Y*QO%pD$DC$U:%E|%}E*3l#~w*5l#GD*TX*CA*BA*VP#N@=O@=)u#%B*P@=Q@=R@=S@=T@=U@=V@=W@=X@=Y@=Z@=`@= #=.#=+#=-@=B@=XY*6A*TT*sN*Bw*@#=xv*;@=B.$7B*DA*tK*Kc#Jc#Q7#{2#[w#[w#;z#;z#Y`#M7#M7#SL#/K#^b$0($W4$K`#$;$,X#}T#A0+/>$-6+%|+h&%>:#:[+)|+;6+;6+Z3+^ %l%$H0+cF$cF$`3+`3+B7#Hy#!|++*$cd+^f+4f#ji+lp+Kt+Sn+Tn+Tn+mp+vD+)w+$B+$B+K)@w)+;B+0G+ZK+Q)@DD+lX+,B+~w+%B+&B+Gn+h~+hX@zI+=>+3G+4Z+U<#ig*Qm#x_%[7@*5@bs$bm@%q+#s+im+0j$vk$G=%G=%Aq$'$C`#59@$7@C`#YA#YA#C`#XA#4v#gh#hh#t9#ih#L,@L,@L,@L,@L,@L,@L,@L,@pe#pe#pe#pe#pe#pe#pe#}R+PK+R0+R0+R0+PK+uI+!B+!B+s<@s<@=b$=b$Pc$Pc$/=$Y|#z@@oy+sr+sr+g~+g~+ny+t<@t<@t<@k#$mq@6$@G@@G@@G@@H@@H@@H@@cB@cB@x;@x;@x;@|#%>'%>'%fm$DD+DD+fm$7s%w;@YK+YK+YK+4G+5$@5$@5$@]-+2R+nZ@nZ@BO@BO@gX@[{#,p$&6$'2+se#se#~ +{B+aa@46+aN#^R#EA#Ka%Ka%Ka%Ka%o}@l1@''$_3@aa@<3@22+>t*pW$rn*=R*;d*9F*W~&=G*@W*##=$#=%#=F@=&#=*F *#=K%+=#=-#=Kb ON.z1$ 4% %% 4% 4% ~% +h.d( 4% %% vk vk 4% 4% O~.s3.PI.8v.8v.Hu+PI.#9.#9.PI.PI.PI.Hu+8v.VW.VW.6!.j% &- &% &% 4% 5% 4% ~% -H.-H.<].<].<].<].z^.~(.$;&PI.Hu+Hu+8v.8v.VW.VW.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+8v.8v.VW.9, 9, G6.X)@9, PI.#9.Hu+VW.9, 9, 8v.Hu+PI.cp.cp.PI.Hu+8v.9, Hu+#9.#9.Hu+8v.#9.|5+O7.O7.xX%xX%xX%xX%O7.O7.is@O7._r+M7.M7.N7._r+xX%Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+N7.N7.M7.M7.M7.N7.N7.N7.N7.N7.N7.N7.#9..l.@[+@[+6v@4=+QB@QB@QB@QB@QB@4=+4=+6v@6v@@[+@[+w4.w4.w4.w4.w4.w4.w4.w4.I> a, a, I> I> a, a, I> OJ.xj+8H.a, w4.w4.a, 8H.w4.xj+OJ.cl+8H.xj+a, f% -h -h si Es uM EV.~I.~I.=] -h si si si si -h M2 sS ph#ph#ph#aq.aq.{t.{t.#9.#9.$;&$;&$;&4I%)1.)1.M}.M}.F6.O7.c+#lX.lX.oP*25+H7%JB :O+s8 uF+;T+}.=Fg%p]%Y^%]I@1B*VB%m]@/I%BX&6.&wj$S&$M%#o1@Lu@tm#33@33@IG#pK@J.+3W.A0%&c$/a$&c$|7$gZ.MR%j5&(J%y7%89$@ +@ ++B$|0#k %/a$/a$Fs%Fs%pr%pr%4v$4v$4v$4v$Zz$Vk$M[#K[#K[#M[#jm${m$ln$ln$ln$]m$=c$=c$>b$>b$^m$^m$^m$Dj$Dj$_a$_a$_a$@d$@d$_a$Dj$Dj$_a$@d$@d$T@+Rb$im$Js$;J$Js$im$c8$im$im$im$im$im$im$im$im$aN$gb#HO$HO$YP$Xx$Xx$8e#8e#8e#9e#9e#iX+iX+WK+WK+E@@7=@3G+3G+wp#8=@wp#3G+7=@7=@7=@7=@7=@7=@7=@7=@-K@;K@5G+2 @YK+>K@>K@)K@)K@)K@>K@>K@YK+2 @2 @5G+&n%&n%7G+W.@R)@w;@2T+2T++hX@hX@ib#V_@fB@(8$UK+VK+5%$nq@1O#:8$K1#x4#7o@Di$)g$A4#'7$t4#_:$:$%dD$|0#H!#Z)+tW%}V#W.=e~@k9@KL#X.+!V+kZ+$i*#f+P@+0Q%>#=9N#Y+=`;#n=#5v#dk%oj%^$%^$%+|+@|+-Y*QO%BC$pD$E|%W:%u.=ii#,#=_u*|G#|G#CA*BA*WP#-I#+C#YY#'#=)#=!#=BP*~#=T@={#=]#=^#=/#=(#=_#=`@=:#=<#=[#=}#=d@=XY*FA*FV*|#=@#=1#=,w*;@=2#=wB*#B*XK*Wt%Jc#{2#R7#/2#[w#;z#+z#)M#M7#Ct#[I#bV#=2#0($q'$5*$$;$,X#}T#}T#/>$-6+%|+v0+w0+,:#x0+;6+/>${6+^ %j8+Hb+)l#)l#^H$^H$B7#LL#y0++*$cd+|/#hi+ii+'k+ub+sp+mp+mp+Xn+)w+!w+~w+~w+K)@,B+*>+0G+ZK+Q)@DD+lX+w)+~w+Pt+%B+=B+Gn+3]+@N+zI+3G+fX+lZ@t}%!k#i[+.o+*5@bs$bm@%q+#s+jm+0j$vk$G=%G=%Aq$$gu%K1$S)$s9$q0$Tp$Ao$Rl$=3@_a@gc@V[$7|$7|$7|$!E$Qi$Qi$Qi$!E$$F$=L$',&=L$$F$!E$!E$$F$$F$!E$5l$)O$)O$K@>K@>K@4G+4G+4G+4G+2R+CI+7V@M+#nZ@7V@gX@{^#]N#L1#$*$se#~ +~ +=t@oX+<3@n%$46+^R#EA#Ka%Ka%Ka%Ka%o}@;5@Jm*''$aa@<3@22+pW$pW$rn*=R*;d*9F*W~&=G*@W*5#=5p*6#=_X*7#=+U*lF.wV@P[&Ha.X0.VN n5%J@=3r%;#=8#=NP*& =e6#pN%FU%fJ%fJ%u3$u3$3&$3&$y$$y$$ok.ok.|m.|m.|m./{ /{ Bj.Bj.Bj.|m./{ h~ fL.a, w4.a, 8H.cl+8H.a, fL.l3 UV {b+{b+)W+{t.{t.j}+j}+#9.#9.QI.QI.QI.QI.6R@6R@r3.r3.<3+N7.I1.= @= @OS*R,%,!.JB f|$.x bH*:K.UL+9#=|B*g<@Qm*VB%VB%TB*=z*uB*3B*0%$S&$OV*{R@Lu@q'@pK@IG#pK@yF@:-+1S#/a$&c$&c$/a$y7%99$j5&j5&(J%HW$C/%wy+wy+wy+ns$ns$&W#&W#/a$Fs%/9$ p$96&^q$4v$(a$RA$RA$RA$L[#*c$*c$Wk$Wk$]m$]m$=c$=c$=c$=c$nw$nw$_a$Dj$^m$5G$5G$Dj$@d$,L$_a$_a$_a$_a$_a$@d$@d$@d$4($4($4($%K$%K$%K$%K$%K$%K$%K$%K$%K$%K$%K$%K$im$~l$~l$~l$~l$~l$~l$~l$~l$d9$!l$~l$0N$~l$!l$5($WK+E@@wp#7=@7=@8=@8=@3G+AI+AI+[V+[V+3G+7=@7=@wp#wp#>K@2 @;K@5G+YK+>K@2 @5G+YK+YK+YK+YK+YK+YK+YK+YK+AM@V.@V.@1 @5G+;K@{-+@N+kX+:P+2G+dX+0#=a#=0#=xp#T,@T,@Q)@ZK+t<@t<@0=@0=@0=@0=@O)@0G+*>+>T@hX@@N+b^@W=+VK+VK+BI+4%$7V@gX@z)+[f+Sb+1h$j%%)g$7F$l~+*/%!7$f&@$)%.*+b#=c{$tW%DT# c%8Z+k9@em@X.+, +Z=+:=@:=@Cq@Cq@*'@4P#c#=o/#Kp#}/#oj%oj%e}%G#$@*$k8+eF$F0+t0#t0#~/$v<%zH*]$$oE%~C*V7#il#1o#Vt#[z#Vt#wB*yw#d#=2@=e#=f#=g#=h#=i#=j#=k#=l#=m#=n#=o#=p#=q#=r#=s#=^L*Uy*]y*O.=sN*@#=t#=jw*5B*!D*wB*EA*kw*P0#Rc#;o#Q7#[w#[w#+z#^z#'6$2*$2*$+o#Af#=2#Ye$=}#VY#$;$1I#g8+g8+-6+/>$)|+!|+l8+:[+,:#-6+c8+~6+`3+ 4+|@=u#=u#=i8+B7#A7#A7#x0+l8+D:+L0+3f#oD#HZ@Yl+|]+Sn+Tn+mp+vD+)w+xD+$B+Qt+Qt+Y.@*>+lX+ZK+,T@s;@T##{w+Pt+&B+Gn+Hl+'T@@N+m#$8=@fX+| @/s#/s#Wx$|T+0N#(9$bm@%q+>'@Z5+Oc$fm%$I%vV#;o$Sp$7C*h>$3d%6:$t;&y|$ 4$V2$U2$l7$Iu$21@io@0X#gc@0i@7|$7|$V[$V[$!E$#F$% $=L$=L$% $$F$#F$=L$$F$!E$!E$$F$$F$!E$5l$$5~#5T+oy+#B+#B+ED+ED+O)@Q,@O)@ny+I@@8$@6$@DO@G@@%o%CD+CD++:$+:$CD+H@@cB@x;@,T@DD+x;@cB@x;@DD+fm$RQ@[H#E@@5$@4G+4G+2R+fX+4Z+4Z+M+#nZ@{^#gX@gX@oZ@B2$BT$U4$IK$V0+u4#u4#}_+i[+[7@[7@j9@j9@7Z+7Z+7Z+7Z+l1@=1#>5@>5@aa@:3@22+@/%@/%u##Nu@tw*9F*W~&FJ*x#=y#=f@=z#=A#=7#={d+@P*B#=FY*#- 3+=C#=cH.vQ&=H%D#=B(*aR#n.>n.;n.;n.>n.>n.>n.>n.>n.>n.>n.h~ G|@G|@G|@G|@G|@G|@G|@G|@$(+$(+T_+G|@G|@Kh+7P.7P.5A.G|@7P.T_+G|@y4&]@+y4&T_+T_+T_+T_+T_+T_+T_+T_+v]#:{+';$x{+US+h]@v]#US+x{+OP*23+US+d #u]#:{+v]#y4&Kh+xc+xc+T_+Kh+Kh+Kh+xc+xc+$(+T_+T_+G|@G|@Kh+5A.xc+G|@oh.oh.G|@xc+5A.5A.xc+xc+5A.$(+y4&oh.$(+aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@G|@G|@G|@G|@G|@G|@G|@G|@5A.Ea+$(+G|@Kh+Kh+G|@T_+cI+l7 }f.bH@aH@aH@aH@bH@aH@aH@aH@bH@bH@}f.l7 l7 Bz$bH@l7 NM+ko.ko.NM+NM+bH@bH@bH@}f.}f.bH@bH@bH@13+ko.ko.cI+l7 }f.bH@bH@aH@aH@aH@aH@aH@aH@aH@aH@R}%R}%R}%R}%R}%R}%R}%R}%LN.LN.LN.LN.LN.LN.LN.J; 6g+5A.5A.5A.5A.5A.5A.5A.]! xc+G|@Kh+G|@T_+", "~% ~% ~% ~% ~% ~% ~% 5% 5% 5% 5% 5% 5% 5% j% i% PI.PI.8v.G6.hY.9, 8v.VW.8v.PI.PI.Hu+VW.hY.ce 7% Y^ Y^ Y^ 7% 7% 7% 7% WW.WW.jI.~(.~(.~(.yc.~(.4I%Hu+8v.VW.9, 9, VW.VW.8v.8v.8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+8v.8v.8v.8v.8v.8v.8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+8v.VW.VW.VW.VW.8v.PI.PI.x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%PI.Hu+Hu+8v.8v.Hu+Hu+PI.#9.Hu+VW.VW.Hu+PI.PI.Hu+_r+O7.x5.xX%N7.M7.N7.xX%M7.N7.N7.N7.N7._r+_r+_r+_r+_r+N7.N7.M7.M7.%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.#9.<4 <4 <4 <4 <4 <4 <4 s3.5v@.l.5v@s3.s3.;H..l.':+':+':+':+':+':+':+':+':+':+':+':+':+':+':+':+w4.w4.w4.w4.w4.w4.w4.w4.fL.w4.8H.cl+xj+cl+8H.a, a, 8H.cl+8H.fL.I> fL.a, w4.a, 8H.cl+8H.a, fL.l3 UV {b+{b+)W+{t.{t.j}+j}+#9.#9.QI.QI.QI.QI.6R@6R@r3.r3.<3+N7.I1.= @= @OS*25+IB tM h|%s8 0f OC#UL+nt.p]%Lb.%^%VB%VB%TB*=z*uB*6.&wj$S&$OV*o1@Lu@q'@pK@IG#IG#yF@:-+HK$&c$km$km$&c$y7%L$+MR%MR%V@+5v$}7$3)#3)#3)#N@%N@%0r$0r$/a$Fs%/9$ p$96&^q$4v$(a$RA$RA$RA$L[#*c$*c$Wk$Wk$]m$]m$=c$=c$=c$=c$nw$nw$_a$Dj$^m$5G$5G$Dj$@d$,L$_a$_a$_a$_a$Dj$Dj$Dj$Dj$a8$a8$a8$a8$a8$%K$%K$%K$%K$%K$%K$%K$%K$%K$%K$%K$b9$~l$~l$~l$~l$~l$~l$~l$!l$!l$~l$0N$~l$!l$5($_P+J #wp#7=@wp#8=@8=@7=@[V+3G+3G+3G+3G+3G+7=@7=@7=@>K@2 @;K@5G+YK+>K@YK+5G+YK+YK+YK+YK+YK+YK+YK+YK+AM@V.@1 @1 @5G+5G+{-+@N+T,@=>+B+0G+>T@>T@TK+&9@%9@BI+:/#4%$eh${^#DA#J1##*%A)+!g$j%%)g$(R#l~+C;%G1#fE#u)%.*+X-&c{$yI$pX+$)|+.4+!|+)|+:[+c8+c8+Z3+qD$`3+HX*QO%F_%`3+B7#B7#^H$/>$l8+D:+L0+9H#li+%4+jr+|]+Sn+Tn+mp+vD+vD+xD+xD+Qt+Qt+;B+*>+lX+ZK+,T@s;@,B+iy+Pt+&B+Gn+h~+hX@{-+kX+wp#4Z+lZ@ig*/s#Wx$v,$*N+d^#j}@N,@28+T;@J,+vk$$I%vV#;o$xo$7C*h>$3d%6:$y|$V<$S)$S)$ 4$l7$Iu$>q$io@0X#gc@0i@7|$7|$V[$V[$!E$#F$$F$=L$=L$% $$F$$F$=L$$F$!E$!E$$F$$F$#F$Qi$)O$+O$:V$!x$$5~#QK+sr+#B+#B+ED+ED+4 @t<@t<@4 @I@@8$@6$@6$@G@@%o%+:$CD+CD+H@@H@@H@@cB@cB@,T@DD+x;@cB@x;@DD+fm$RQ@,K@jX+5$@4G+2R+gX+fX+M+#M+#M+#{^#{^#gX@gX@B2$B2$BT$U4$IK$z)+V0+V0+}_+i[+mJ#mJ#j9@j9@7Z+7Z+<7@<7@l1@l1@* +* +<3@8l*U^@;`+>t*:u*]}*~E*fN*PH*2L*AW*y#=V#=W#=X#=Y#=-`*7T*Z#=8=$R. Ib#RD*5l%|'$=H% C%m;+7&+n.>n.>n.>n.>n.>n.>n.>n.Bj.Kh+Kh+Kh+Kh+Kh+Kh+Kh+T_+T_+G|@G|@G|@G|@Kh+Kh+Ea+Kh+7P.T_+T_+oh.y4&Kh+T_+T_+T_+T_+T_+T_+T_+T_+:{+:{+';$OP*US+h]@v]#US+d #d #d #d #u]#u]#u]#u]#7P.G|@$(+$(+G|@Kh+G|@T_+T_+T_+T_+T_+G|@G|@G|@G|@Ea+$(+G|@Kh+Kh+G|@$(+Ea+Ea+$(+xc+5A.$(+oh.7P.xc+aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@G|@G|@G|@G|@G|@G|@G|@G|@Ea+xc+T_+G|@G|@G|@T_+$(+l7 l7 bH@aH@aH@aH@aH@bH@aH@aH@bH@}f.}f.}f.}f.bH@Bz$aH@}f.cI+NM+NM+cI+cI+bH@bH@aH@aH@aH@aH@bH@bH@NM+cI+cI+l7 }f.}f.bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@|f.,W+,W+,W+,W+,W+,W+,W+LN.LN.LN.LN.LN.LN.LN.J; xc+xc+xc+xc+xc+xc+xc+xc+5A.$(+Kh+Kh+T_+$(+", "~% ~% ~% ~% ~% ~% ~% 5% 5% 5% 5% 5% 5% 5% j% WW.8v.8v.VW.G6.hY.VW.Hu+VW.8v.Hu+PI.Hu+VW.G6.iI.6!.7!.7!.7!.6!.6!.6!.6!.G6.9, T}%xx.l=&4I%Ay.$;&4I%Hu+8v.VW.9, 9, VW.VW.Hu+Hu+Hu+Hu+8v.8v.8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+VW.VW.VW.VW.VW.VW.VW.VW.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+8v.8v.8v.Hu+PI.#9.x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%Hu+8v.8v.VW.VW.8v.8v.Hu+PI.8v.9, 9, 8v.Hu+Hu+VW._r+O7.x5.xX%N7.M7.N7.xX%_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.M7.M7.M7.%0+%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.#9.#9.#9.#9.#9.#9.#9.#9.#9.[3+w7+|5+cp.#9.[3+|5+(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.':+w4.w4.w4.w4.w4.w4.w4.w4.fL.w4.a, 8H.cl+cl+8H.8H.6v@>r+Tp*>r+6v@QB@6v@@[+@[+@[+>r+>r+>r+6v@4=+-J.UV {b+{b+)W+{t.{t.j}+j}+#9.#9.QI.QI.QI.QI.6R@6R@r3.r3.<3+N7.I1.= @= @OS*r).sJ tM 7P+Aa Ba oq+UL+Kv+GL ]I@%^%VB%VB%XC*=z*uB*sz*S&$z*+M%#o1@Lu@tm#IG#33@33@#R$3W.YJ#km$A0%A0%km$99$|7$g!&g!&j5&y7%89$@ +@ ++B$|0#k %/a$/a$/a$Fs%pr%/9$^q$4v$4v$(a$jm$jm$jm$*c$]m$]m$ar$ar$=c$=c$nw$nw$nw$nw$,H$,H$_a$Dj$^m$5G$5G$Dj$@d$,L$_a$_a$_a$Dj$^m$5G$5G$5G$=J$=J$Hs$nw$nw$Ms$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$Rj$%K$;u$Ls$Ls$Ls$Ls$Ls$Ls$Ls$Ls$Ls$Ls$Ks$Ls$!I$)H$5($K #8=@wp#wp#~g$~g$wp#3G+7=@7=@7=@3G+3G+3G+3G+3G+>K@2 @5G+2 @>K@>K@YK+5G+YK+YK+YK+YK+YK+YK+YK+YK+5Z+5Z+XK+BM@5&@R,+TK+TK+3G+AI+b^@H)@[g%B+>B+x)+x)+AI+&(@F6@4%$eh$$=,$='$=)$=!$=~$=W =+#={$=9z*Uy*]y*O.=|#=@#=t#=jw*5B*!D*wB*EA*kw*Kc#S7#'5#;o#Y7#Y7#^z#t'$qt#2*$*q%H_$#G#X%$X%$`A$VY#$;$1I#g8+g8+-6+/>$)|+~|+~|+y0+)|+/>$/>$~6+qD$^H$0_%fF$F0+!w#!w#gw$i8+/>$x0+q:+m8+(6+4f#)k+kr+lr+Sn+Sn+Tn+wD+vD+xD+xD+Qt+:w+;B+*>+9G+ZK+,T@Q)@T@=>+T,@7=@| @W|#I8%t}%*6$S@+7k#^k#=7@nm+NF@'P+Tl$uk$vV#tV#;o$xo$7C*h>$_;$rk$gu%fC%I1$J1$V2$>y$4c$Ao$io@0X#6k@fc@V[$V[$V[$V[$!E$#F$$F$% $=L$=L$% $% $=L$$F$#F$#F$$F$% $#F$Qi$0S$$->$5~#Jl+1R+@B+#B+ED+Rt+ny+4 @Q,@O)@8$@8$@G@@6$@DM@*n#<|++:$H@@x;@x;@x;@H@@CD+DD+DD+x;@x;@x;@,T@fm$]K@)K@jX+gX+2R+gX+gX+nZ@M+#M+#yA#{^#{^#N+#N+#B2$B2$N+#B2$Rs@^-+;>+,7$o=#S,+gi@Rb+sd+n.Bj.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@T_+T_+$(+Kh+Kh+$(+$(+7P.Kh+$(+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+u]#:{+d #23+US+v]#v]#US+M8@h]@v]#:{+u]#d #';$US+G|@T_+$(+T_+Kh+7P.T_+xc+G|@G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+xc+T_+$(+5A.xc+7P.G|@5A.aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@G|@G|@G|@G|@G|@G|@G|@G|@$(+T_+G|@G|@G|@T_+$(+xc+l7 }f.bH@aH@aH@aH@aH@bH@aH@bH@}f.l7 l7 }f.aH@Bz$9g.Bz$bH@}f.l7 l7 l7 l7 bH@aH@Bz$9g.9g.Bz$aH@bH@}f.}f.}f.}f.bH@bH@bH@bH@}f.}f.}f.}f.}f.}f.}f.}f.J; J; J; J; J; J; J; J; J; J; J; J; J; J; J; J; G|@G|@G|@G|@G|@G|@G|@G|@xc+T_+Kh+Kh+T_+xc+", "4% 4% 4% 4% 4% 4% 4% 5% 5% 5% 5% 5% 5% 5% j% _j.G6.9, 9, hY.G6.VW.PI.VW.8v.Hu+Hu+8v.VW.G6.Y6.P7.zT.zT.zT.P7.P7.P7.P7.VW.VW.l=&l=&4I%4I%Ay.$;&4I%Hu+8v.VW.9, 9, VW.VW.PI.PI.PI.Hu+8v.VW.VW.VW.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+VW.VW.VW.VW.VW.VW.VW.VW.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.Hu+Hu+Hu+PI.#9.#9.x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%8v.8v.VW.9, 9, VW.8v.8v.PI.VW.G6.G6.VW.Hu+8v.VW._r+O7.x5.xX%N7.M7.N7.xX%O7.O7.xX%_r+_r+N7.M7.M7.N7.M7.M7.M7.%0+%0+$B#$B#N7.N7.N7.N7.N7.N7.N7.N7.#9.#9.#9.#9.#9.#9.#9.#9.#9.[3+|5+[3+cp.#9.cp.|5+(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.w4.w4.w4.w4.w4.w4.w4.w4.fL.w4.w4.a, 8H.8H.8H.8H.6v@@[+Tp*>r+6v@4=+6v@>r+>r+>r+>r+@[+@[+6v@6v@-J.-J.{b+{b+)W+{t.{t.j}+j}+#9.#9.QI.QI.QI.QI.6R@6R@r3.r3.<3+N7.I1.= @= @OS*ng.H7%tM Cz+#I+N0 ;$.;l+y{%][@'^+%^%zE%zE%XC*=z*uB*qX*hj*hj*M%#OV*Lu@tm#IG#33@33@pK@ki@:-+y1#1|+y1#A0%L$+gZ.hq#hq#MR%99$M$+W_#W_#@ ++*+|0#&c$&c$/a$/a$pr%pr%4v$4v$(a$(a$jm$jm$jm$*c$]m$]m$ar$ar$>b$>b$Ms$Ms$Ms$Ms$a8$a8$_a$Dj$^m$5G$5G$Dj$@d$,L$@d$_a$Dj$^m$5G$S@%;;%;;%-i&-i&-J$=J$Hs$nw$Ms$Rj$Ms$Ms$Ms$Ms$Ms$Ms$Ms$a8$im$!I$Ls$Ls$Ls$Ls$Ks$Ks$Ks$Ks$Ks$Ls$Ls$!I$!I$d9$U<#~g$wp#wp#8=@~g$8=@7=@wp#wp#7=@7=@3G+[V+[V+AI+>K@YK+5G+2 @>K@)K@YK+2 @YK+YK+YK+YK+YK+YK+YK+YK+5Z+XK+XK+BM@5&@R,+AI+TK+[V+AI+b^@H)@=h%[g%=h%O[$T,@T,@Q)@ZK+t<@t<@0=@0=@a=@a=@t<@>B+>B+$)|+!|+!|+y0+y0+&2+d8+)6+gw$B7#F0+F0+!l#NP#)w#gw$Fb+c8+x0+q:+~_+#4+^|+=m+[w+lr+Pn+Sn+Tn+wD+vD+S.@xD+:w+:w+;B+*>+9G+lX+DD+Q)@:w+xD+&B+yD+3R+3R++7=@| @_/%c9%t}%*6$[_+j)$:6$~B+nm+MF@km+v^@Ab$tV#AM$7S$xo$7C*h>$_;$Lm$np%np%I1$I1$V2$>y$zo$zb$io@0X#6k@gc@oW$V[$V[$V[$!E$!E$#F$$F$% $=L$=L$=L$*L$% $#F$#F$% $% $#F$Qi$x|%0S$)O$0S$!O$!O$)O$+O$+F$:V$:V$!x$+O$+O$$->$Q&$5~#tr+#B+hy+@B+Rt+g~+my+ny+Q,@O)@8$@8$@G@@G@@%o%kq#-B++:$cB@DD+,T@x;@H@@CD+x;@x;@x;@DD+DD+,T@,T@]K@>K@5$@gX+gX+gX+fX+nZ@M+#yA#yA#{^#{^#N+#N+#B2$B2$B2$B2$2O#Rs@^-+;>+S,+o=#QU#gi@+@#t*]w*.z*~E*^I*0M*W~&FJ*3L*^$=ZT*g$=h$=i$=wT*l~#Ov*j$= @ QD*k$=(@=Aj+<$=l$=OJ*~Z%Q+&j(#j(#Q+&)p#$x+*Z+ME+X`+Nc&x{ x{ x{ $.@<:*#d+#d+TO&`E&`E&3]&3]&-.%-.%-.%-.%-.%-.%-.%>n.h~ 7P.7P.7P.7P.7P.7P.7P.7P.7P.Kh+G|@G|@T_+$(+$(+T_+Kh+G|@xc+xc+Kh+T_+]! Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+';$:{+u]#US+US+:{+:{+US+h]@h]@v]#:{+d #';$US+US+$(+$(+$(+G|@7P.7P.$(+5A.G|@G|@T_+T_+$(+xc+xc+Ea+Kh+T_+$(+xc+xc+$(+T_+Kh+G|@Kh+G|@xc+$(+7P.Kh+5A.aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+$(+xc+xc+}f.bH@aH@Bz$Bz$aH@aH@bH@bH@}f.l7 cI+l7 bH@Bz$>( 9g.Bz$Bz$aH@bH@bH@bH@bH@bH@aH@9g.l}+l}+9g.aH@bH@aH@aH@aH@aH@aH@bH@bH@bH@l7 l7 l7 l7 l7 l7 l7 l7 aH@aH@P] aH@P] aH@P] aH@J; bH@J; bH@J; bH@J; bH@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+T_+G|@7P.G|@$(+Ea+", "5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% j% (j.G6.9, 9, hY.G6.8v.#9.8v.8v.8v.8v.8v.VW.9, P7.P7.zT.zT.zT.P7.P7.P7.P7.PI.PI.4I%4I%l=&l=&9K.xx.4I%Hu+8v.VW.9, 9, VW.VW.PI.PI.PI.Hu+8v.VW.VW.VW.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+VW.VW.VW.VW.VW.VW.VW.VW.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+#9.#9.PI.Hu+Hu+Hu+PI.PI.x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%8v.8v.VW.9, 9, VW.8v.8v.PI.VW.G6.G6.VW.Hu+8v.VW._r+O7.x5.xX%N7.M7.N7.xX%O7.O7.O7.xX%_r+N7.N7.N7.N7.N7.N7.M7.M7.%0+%0+%0+N7.N7.N7.N7.N7.N7.N7.N7.#9.#9.#9.#9.#9.#9.#9.#9.#9.cp.|5+[3+#9.PI.cp.[3+(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.w4.a, 8H.8H.4=+@[+>r+>r+6v@4=+@[+Tp*>r+>r+@[+@[+6v@6v@6v@':+-J.{b+{b+)W+{t.{t.j}+j}+#9.#9.QI.QI.QI.QI.6R@6R@r3.r3.<3+N7.I1.= @= @OS*X# H7%j*.Bz+rF+uF+%h.;l+Uz 2j.]I@Qm*]r*]r*XC*=z*uB*Ok$:-@:-@M%#M%#g,$v<@pK@IG#33@pK@ki@,>+y1#1|+y1#A0%L$+gZ.hq#hq#MR%99$x1#D)+W_#W_#+*++*+km$&c$/a$/a$)]$)]$(a$(a$(a$(a$jm$jm$ln$]m$]m$]m$>b$>b$Ms$Ms$Ms$Ms$a8$a8$a8$a8$_a$Dj$^m$5G$5G$Dj$@d$,L$@d$_a$Dj$^m$5G$S@%;;%;;%-h&-i&-i&=J$Hs$nw$Ms$Ms$Ms$Ms$Ms$Ms$Ms$Ms$Ms$a8$c8$im$im$;u$;u$Js$Js$;J$;J$Js$Js$;u$;u$im$im$!l$W|#~g$7=@3G+wp#8=@wp#7=@wp#wp#7=@7=@3G+[V+[V+AI+)K@YK+2 @YK+>K@)K@>K@2 @YK+YK+YK+YK+YK+YK+YK+YK+XK+XK+BM@BM@5&@5&@AI+AI+[V+AI+b^@H)@=h%[g%=h%O[$T,@T,@Q)@ZK+t<@t<@0=@0=@0&@0=@O)@>B+>B+$)|+3/#l8+)|+y0+>6+e8+,6+!w#B7#F0+p'$t0#~w#uq#>>$Fb+c8+x0+q:+~_+#4+^|+=m+&m+vp+Pn+Pn+Sn+rr+wD+S.@S.@+*>+9G+lX+DD+ZK+Qt+S.@yD+yD+3R+3R++7=@| @_/%c9%t}%*6$[_+w)$:6$=7@nm+MF@km+(a@|1@Ld$AM$7S$xo$:D$(;$Jw$sk$fC%fC%J1$S)$U2$l7$4c$zb$io@0X#_a@6k@wT#oW$V[$V[$!E$!E$#F$#F$$F$=L$*L$*L$*L$% $#F$$F$% $=L$$F$!E$x|%!O$0S$!O$x|%x|%)O$!x$+F$:V$:V$!x$+O$+O$t*:u*tw*]}*9F*0M*=G*( >( 9g.Bz$aH@Bz$Bz$Bz$aH@aH@aH@aH@aH@l7 l7 l7 l7 l7 l7 l7 l7 aH@V&$aH@V&$aH@V&$aH@V&$bH@m|.bH@m|.bH@m|.bH@bH@G|@G|@G|@G|@G|@G|@G|@G|@T_+Kh+Kh+G|@xc+Ea+", "5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% j% n` 9, VW.9, G6.9, 8v.#9.8v.VW.VW.VW.VW.VW.VW.6!.6!.7!.7!.7!.6!.6!.6!.6!.PI.PI.4I%l=&xx.T}%4x ts.4I%Hu+8v.VW.9, 9, VW.VW.Hu+Hu+Hu+Hu+8v.8v.8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+#9.PI.Hu+8v.8v.8v.Hu+Hu+x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%Hu+8v.8v.VW.VW.8v.8v.Hu+PI.8v.9, 9, 8v.Hu+Hu+VW._r+O7.x5.xX%N7.M7.N7.xX%O7.O7.xX%xX%xX%xX%_r+_r+_r+_r+_r+N7.N7.M7.M7.M7._r+_r+_r+_r+_r+_r+_r+_r+#9.#9.#9.#9.#9.#9.#9.#9.PI.cp.[3+[3+#9.PI.#9.[3+(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.w4.w4.w4.w4.w4.w4.w4.w4.w4.fL.fL.fL.fL.w4.8H.8H.QB@6v@>r+>r+6v@6v@@[+Tp*Tp*>r+@[+6v@4=+6v@6v@Vl.-J.{b+{b+)W+{t.{t.j}+j}+#9.#9.QI.QI.QI.QI.6R@6R@r3.r3.<3+N7.I1.= @= @OS*V# tK.D8+UV.Aa i|%OC#;l+)f%~(+09.q2%gi%1B*XC*=z*3B*Cn*p1@p1@M%#BO#g,$J.+#R$pK@IG##R$3W.:-+y1#1|+A0%km$99$|7$g!&g!&j5&y7%M$+W_#W_#@ ++*++*+&c$&c$Fs%/a$sD$sD$80$80$(a$4v$jm$jm$ln$]m$]m$]m$>b$>b$Rj$Rj$Rj$Rj$%K$%K$%K$%K$_a$Dj$^m$5G$5G$Dj$@d$,L$_a$_a$_a$Dj$^m$5G$5G$5G$-J$-J$-J$=J$Hs$nw$nw$nw$nw$nw$nw$nw$nw$nw$nw$nw$4($c8$im$;u$;u$Js$;J$;J$,M$;J$Js$;u$im$;u$;u$~l$U<#8=@[V+[V+3G+wp#7=@7=@7=@7=@7=@3G+3G+3G+3G+3G+)K@>K@2 @YK+)K@,K@>K@2 @YK+YK+YK+YK+YK+YK+YK+YK+BM@BM@BM@BM@5&@5&@[V+[V+3G+AI+b^@H)@[g%+0G+x)+x)+[V+N_@L2@[|$H4#G4#(m$GS#GS#eD$*,$7]+1h$Cj$y4#8]+_{#H$=T=+F1$Ql&t##13@oo@|/++o+J3+W_@zT&>P+;<$:=@0k@Be@Be@b9@f)+=]@$f+.$=jV$/|&^[+/[+/[+@|+@|+#|+$|+*e%CC$1@$P{$x<%&o#gi#5l#6l#U7#MR# 8#7v*Ut#1x*VI*)u#!I#I$==C*J$=K$=L$=M$=N$=O$=P$=Q$=R$=S$=T$=U$=V$=W$=X$=;J*Uy*]y*O.=Y$=@#=t#=jw*5B*!D*wB*EA*kw*|G#K0#'5#[e%A7%W7#^z#t'$qt#2*$*q%H_$#G#X%$X%$`A$VY#$;$1I#g8+g8+-6+/>$)|+>:#3/#x0+y0+d8+>6+'6+C7#^H$0_%DC$p'$D7#D7#>>$qD$Z3+x0+q:+m8+(6+Og+]_+!k+vp+Rn+Pn+Sn+rr+wD+A@@S.@+*>+9G+lX+x;@lX+:w+xD+&B+yD+3R+3R+y$w,$4c$zb$0X#io@7m@_a@-/+wT#V[$7|$!E$!E$!E$#F$$F$=L$',&&L$',&=L$$F$$F$=L$=L$$F$!E$x|%!O$0S$!O$hE*!O$ I> I> w4.a, 8H.QB@6v@>r+@[+6v@6v@>r+I}+I}+>r+@[+4=+4=+4=+6v@Vl.-J.{b+{b+)W+{t.{t.j}+j}+#9.#9.QI.QI.QI.QI.6R@6R@r3.r3.<3+N7.I1.= @= @OS*V# ~D =T+&i =J *9 OI#;l+#%=q]%%^%cl*Zz*1B*XC*$P*3B*57*KZ@hk*BO#(h$g,$J.+SU##R$#R$yF@,>+YJ#A0%1|+km$&c$y7%L$+MR%MR%V@+5v$M$+W_#@ +@ +|0#|0#/a$/a$Fs%/a$sD$rr%Q'$80$(a$4v$jm$jm$ln$]m$]m$]m$>b$>b$Rj$Rj$Rj$Rj$%K$%K$%K$%K$_a$Dj$^m$5G$5G$Dj$@d$,L$_a$_a$_a$_a$Dj$Dj$Dj$Dj$%u$%u$%u$%u$%u$=c$=c$=c$=c$=c$=c$=c$=c$=c$=c$nw$bv$c8$im$im$Js$Js$;J$,M$$%=,M$Js$;u$im$;u$Js$0N$lZ@wp#AI+TK+AI+3G+3G+3G+3G+3G+3G+3G+3G+7=@7=@7=@,K@>K@YK+YK+)K@,K@)K@YK+YK+YK+YK+YK+YK+YK+YK+YK+BM@}{#}{#}{#CI+CI+BI+BI+[ @BI+&9@a^@BI*5I*BI*[g%T,@T,@Q)@ZK+t<@t<@0=@0=@e^@e^@_w+;B+;B+>T@>T@AI+N_@=}@Aw%F4#F4#G4#St$St$!g$7]+A)+x4#S5+'M$'p$_{#%6*>h&%6*!.$BB@7[*rc@gm@+o+ti+W_@zT&>P+;<$#f+<@=mc@mc@~7@~7@lJ# >#Jp#bs#/|&^[+/[+/[+@|+#|+#|+$|+&:%AC$P{$P{$s[%&o#gi#5l#6l#Q7#T0#a@$Ut#1x*%%=2#=ew#%=,%='%=)%=!%=f.=~%={%=jA*Uy*]y*O.=Y$=@#=t#=jw*5B*!D*wB*EA*kw*il#O0#;o#'5#W7#W7#{E#]E#qt#2*$2*$H_$EB#^b$=2#*2#VY#$;$1I#g8+g8+-6+/>$)|+3/#l8+y0+y0+&2+;6+Z3+:O#`3+F_%BC$pD$E_$I`#I`#gw$Z3+x0+q:+D:+~_+|/#si+-m+vp+Rn+Pn+Pn+&>+rr+A@@A@@w)+w)+*>+0G+9G+9G+x;@lX+$Iu$zb$0X#io@7m@7m@=/+-/+oW$7|$!E$!E$Qi$!E$#F$=L$',&$L$',&=L$$F$% $=L$=L$% $#F$!O$0S$0S$!O$x|%!O$!x$_V$+O$+O$+O$!x$!x$!x$!x$!x$ v% I> fL.a, cl+QB@6v@>r+@[+6v@6v@>r+I}+I}+Tp*@[+4=+4=+4=+6v@a, UV {b+{b+)W+{t.{t.j}+j}+#9.#9.QI.QI.QI.QI.6R@6R@r3.r3.91+N7.I1.= @= @OS*:%=/5*lm#HE%3~ EQ+Eb.<%=%Z*Nw%ot.3}%!m*_D%[D%ok#Zt*W)*P{*vX@m #0i$G}$'>+cq$yF@#R$SU#:-+YJ#B%%n~+&c$/a$A3%98$[7&[7&Z'%`}&89$@ +@ ++B$|0#k %/a$/a$Fs%/a$rr%PX#oo%Q'$(a$4v$jm$jm$ln$]m$]m$]m$>b$>b$Rj$Rj$Rj$Rj$%K$%K$%K$%K$_a$-c$^m$5G$5G$Dj$@d$,L$_a$_a$_a$_a$_a$@d$,p$@d$=c$=c$=c$=c$=c$%u$%u$%u$=c$=c$=c$=c$=c$=c$=c$nw$bv$4($c8$%K$Js$Gs$;J$'H$$%='H$Js$a8$im$a8$Js$ow$| @7=@TK+(8${-+=>+=>+=>+zI+=>+=>+3G+7=@7=@wp#wp#,K@>K@YK+YK+)K@,K@)K@YK+YK+YK+YK+YK+YK+YK+YK+YK+BM@}{#BM@}{#5&@CI+[V+BI+wp#}V+[V+a^@u'%pm*u'%8~@r<@r<@Q)@ZK+t<@t<@0=@0=@J@@J@@(w+Y.@;B+hX@X.@TK+;($xW#B2$N+#DA#zA#AA#2h$ni$t!$T,+*,$@d$'M$J3$1h$C;%Gx#D]%QX.6[*6[*vg@,m+zp+ti+`.@zT&, +;<$0k@Be@gz@gz@O2@O2@6d+Yl+v'#5v#/|&^[+/[+([+#|+$|+$|+$)|+y0+!|+.4+QL#)|+,:#):#d6% 4+QO%c%=-Q#qD$I`#D7#!w#/>$x0+q:+D:+!i$9H#li+,k+ub+vp+vp+Pn+Sn+rr+wD+A@@w)+w)+*>+0G+9G+9G+9G+9G+$N+$B+%B+&B+3R+Gn+>T@=>+m#$8=@fX+| @/s#/s#Wx$hF$kq#*t@@5@&s+Kn+:T+(a@-Z#_a@7m@AM$0p$Ew$_n$Ol$(;$Ql$*'$g>$g>$g>$V>$zb$Ao$0X#io@Ld$Ld$7m@-/+#F$ye@!E$gc@Qi$gc@#F$xe@',&d%=',&xe@$F$ye@=L$tB@% $#F$0S$0S$0S$!O$x|%0S$:V$(V$'$0s#8s#8)$38+>]@),&WE&7*$WE&),&.:$Z4@qR$bC$iR$+O$+O$S%TO&#d+#d+<:*-.%-.%M]*M]*#d+#d+#d+#d+#d+#d+#d+`b&y$$xc+xc+xc+xc+xc+xc+xc+$(+$(+T_+G|@G|@Kh+7P.7P.oh.7P.T_+xc+7P.o{+y4&Ea+T_+T_+T_+T_+T_+T_+T_+T_+[f.:{+M8@:{+';$d #u]#';$:{+:{+:{+u]#u]#u]#u]#u]#Kh+$(+5A.]! Ea+$(+T_+$(+T_+G|@G|@Kh+7P.7P.oh.oh.$(+T_+T_+T_+T_+T_+T_+$(+{! 5A.5A.{! Ea+Kh+Kh+Ea+aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@G|@G|@G|@G|@G|@G|@G|@G|@T_+$(+xc+xc+xc+T_+Kh+7P.9g.9g.>( >( 9g.Bz$bH@bH@l7 bH@Bz$>( 9g.bH@cI+13+cI+}f.bH@aH@Bz$aH@}f.l7 >( aH@l7 NM+NM+l7 aH@>( cI+cI+l7 }f.bH@aH@Bz$9g.aH@aH@aH@aH@aH@aH@aH@V&$&5$&5$&5$&5$&5$&5$&5$&5${0*{0*{0*{0*{0*{0*{0*{0*';$G|@G|@G|@G|@G|@G|@G|@xc+$(+T_+$(+Ea+xc+", "H;@H;@H;@H;@H;@H;@H;@l#@$9.5!.6!.P7.P7.P7.P7.N7.xX%is@x5.xX%_r+xX%O7._r+_r+_r+xX%O7.O7.x5.x5.PI.$9.8v.8v.8v.PI.cp.[3+9, 9, VW.8v.8v.8v.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.h% 6% -H.1% *_ h% *_ 1% QB@<4 af.h% *_ i% R_ 6% PI._r+_r+xX%O7.x5.x5.x5.M7.N7._r+xX%O7.x5.is@Vh.is@is@is@x5.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%Hu+Hu+8v.8v.VW.9, 9, G6.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+xX%O7.x5.is@x5.O7._r+M7._r+_r+_r+_r+_r+_r+_r+_r+8v.8v.8v.8v.8v.8v.8v.8v.PI.PI.PI.#9.#9.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.|5+|5+|5+|5+|5+|5+|5+|5+PI.#9.#9.cp.[3+[3+|5+5v@l`.6}%O9.;b.;b.O9.6}% F.|x.W_ n3 &5 ;b.|x.{_ n3 ;b.;b.;b.;b.;b.;b.;b.;b.{_ O9. F. F.|x.&5 n3 f% UV U/ 4!.`^ aq.(s.{t.$9.#9.#9.$;&$;&4I%4I%)1.M}.#0*Ay.$;&_r+PK.= @= @OS*i%=j%=k%=l%={|$M#@j`+_^ ]X@}'%0(.%]%hF*r]%;N@m%=BE*QL.~[*~[**f**f*p]+^i@#R$#R$yF@SU#'>+<-+D)+D)+n~+n~+x1#x1#Hw%Hw%Hw%x1#Z]$@ +@ ++B$|0#k %/a$/a$Fs%Fs%pr%/9$4v$(a$80$Q'$*c$*c$*c$*c$]m$]m$]m$]m$>b$>b$nw$nw$nw$Hs$Gs$Hs$>N$I@%DP$8F$Cj$-c$_a$@d$5G$^m$cN$a9$a9$Ej$b8$,p$Rj$Sj$Sj$Sj$Sj$Sj$Sj$Sj$%u$5F$6F$6F$%u$>b$=k$T4$@d$@d$,p$@d$a9$^m$hU$;;%tV$S@%cN$Dj$Ej$Dj$cN$ow$lZ@E@@>K@2 @8G+8G+x;@DD+R)@R)@R)@2 @5&@CI+CI+CI+R,+YK+)K@,K@[H#,K@)K@>K@>K@>K@>K@>K@>K@>K@>K@>K@-K@yM@5G+4G+YK+4G+YK+4G+>K@5$@>K@7=@T,@7=@T,@T,@dX+(s#ky+zD+K)@,B+0&@0&@a=@0=@9=@^K@8$@X.@w)$nz#@#$u_%_P+vp#!k#Qm#Qj$b9$Bb#Bb#'2+}/+Bb#J3$,p$S5+:$%J_%U##LD@n%=3+%44+W[$fi@[8+- ++>#2V#4a@4a@l0+`v+6~+6~+6~+ >#.>#Z;#oD#/|&dY#O;$Eb+l%$i8+F_$E_$X/%*2#1I#=2#Ye$>2#*5#*5#R7#U7#Z7#D.$W`#2#=B.$)u#lu*o%=3o#p%=q%=xl#r%=s%=t%=u%=v%=w%=x%=%u#y%=K`*XY*mT*{y*{y*z%=A%=B%=[J*HD*vW*p+=$B*$B*DA*DA*CA*W7#&G#&G#Lq#!2#M7#Ec#~E#L7##5#7V#6T#8V#8T#|X#d<$L`#5[+sv$&y$'&%2[+cO$H#$H#$2/#!M#1/#D:+D:+hT$C%=w0+I0+.I#;6+Z3+)6+)6+{6+':#x0++4+Of$dk%o[%D%=v'#St+St+[w+@m+#m+Lt+Lt+mr+~w+$B+mX+mX+=B+zD+< @W{@T.@xD+T.@yD+=B+=B++:P+7=@fX+4Z+!k#vp#Wx$XK+8&@6~#]`#MF@er+[1@:C#=_+b~+>/+@F$!x$;r$Rp$)E$7C*l7$fq%{o$cl${o$T'$4c$zb$Gt$cs$iR$0S$!O$$F$jQ$)O$bC${`#bC${`#pR$qR$sQ$EZ${O$bP${O$aP$& $tQ$sQ$sQ$6k@6k@_a@_a@6k@gc@0i@0i@fc@fc@fc@fc@fc@fc@fc@#F$)O$,O$rQ$rQ$rQ$rQ$$Lx#XA#XA#4L#3L#Vv#pe#yb#M)@mm+pk+!B+z$+!B+pk+M,@a~@!B+!B+pk+pk+!B+s<@s<@s<@z$+z$+z$+s<@c&@b&@X{@2V+6Z+q8+q8+6Z+L@+L@+e^@e^@e^@J@@J@@6T+;v@6T+Il+dp+Il+(w+(w+_w+UQ@UQ@m5$]k#7&@7&@}`$2%$}`$7$@k#$mq@8$@I@@I@@8$@x;@DD+!K@!K@!K@YK+w;@YK+w;@YK+jX+fX+fX+fX+fX+fX+fX+nZ@M+#7V@fX@BO@7V@7V@BO@nq@i~+r8+r8+r8+i~+i~+i~+i~+U0+U0+Rb+KL#5]+Y*F%=2s*bv*hT%G%=Me*H%=`$='M*lN*F +Tw.I%=M0*J%=J> mh.(W%E#=@:+T.=@:+[(+Yl@A.@G8@(7.k1+H8@M|@l]#l]#l]#uq*uq*qK+xr*VD@Xw&TO&#d+<:*<:*<:*<:*#d+-.%<:*TO&#d+-.%M]*-.%`b&6j+xc+$(+T_+T_+$(+xc+Ea+T_+xc+Ea+$(+G|@7P.Kh+T_+]! xc+Kh+G|@Ea+{! {! 5A.G|@7P.oh.Kh+T_+xc+$(+G|@5A.xc+T_+Kh+7P.7P.7P.Kh+Kh+G|@G|@Kh+oh.7P.T_+Ea+v]#d #OP*x{+OP*US+23+OP*d #d #d #d #d #d #d #d #Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+T_+T_+$(+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+$(+T_+T_+G|@G|@Kh+Kh+7P.9g.Bz$bH@}f.}f.bH@Bz$9g.aH@aH@aH@aH@bH@}f.l7 cI+bH@bH@bH@bH@bH@bH@bH@bH@NM+cI+l7 }f.bH@Bz$9g.9g.T_+T_+T_+T_+T_+T_+T_+T_+$(+Ea+Ea+T_+7P.oh.G|@Ea+d%$m|.{'${'$m|.V&${'$f+#R~$R~${'${'$m|.V&$V&$d%$T_+G|@7P.Kh+T_+$(+G|@7P.xc+$(+$(+$(+xc+xc+", "*o@*o@*o@*o@*o@*o@*o@b #Jc@/#&/#&/#&/#&/#&/#&_r+O7.is@is@O7.xX%xX%x5.xX%O7.O7.O7.O7.x5.x5.x5.8v.8v.9, 9, 9, VW.Hu+PI.VW.VW.8v.8v.8v.VW.9, 9, VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.g% R_ -H.-H.*_ g% *_ -H.g% g% g% *_ *_ R_ R_ 6% Hu+xX%xX%xX%O7.O7.O7.O7.xX%xX%xX%xX%O7.O7.O7.O7.is@is@is@x5.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%Hu+Hu+Hu+8v.8v.VW.VW.VW.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+xX%O7.x5.is@x5.O7._r+M7._r+_r+_r+_r+_r+_r+_r+_r+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.PI.#9.cp.[3+[3+[3+cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.|5+|5+|5+|5+|5+|5+|5+|5+cp.cp.[3+[3+[3+[3+|5+5v@xj+O9.|x.;b.;b.|x.O9.6}%|x.{_ &5 W_ ;b.|x.;b.&5 ;b.;b.;b.;b.;b.;b.;b.;b.W_ |x. F. F.|x.W_ &5 I> UV U/ `^ U/ {t.aq.{t.$9.cp.#9.QI.QI.$;&$;&)1.)1.#0*#0*$;&_r+_r+= @= @OS*K%=L%=M%=N%=!)@|_@0x+Hd$O%=[B**7.*7.V|@$^%~$#,2%P%=,^.W'*W'*Q%=Q%=YF@~5@[c@#R$yF@SU#'>+<-+D)+D)+W_#W_#ZR#ZR#`a$`a$`a$ZR#Z]$@ +@ ++B$|0#k %/a$/a$/a$/a$pr%pr%(a$80$Q'$Q'$*c$*c$*c$*c$]m$]m$]m$]m$>b$>b$nw$nw$nw$Hs$Gs$Hs$DP$j%%Bj$Bj$Cj$-c$Dj$_a$^m$^m$cN$a9$b9$b8$b8$Ej$Rj$Sj$Sj$Sj$Sj$Sj$Sj$Sj$%u$5F$5F$5F$%u$>b$=k$T4$@d$@d$@d$@d$Dj$^m$S@%;;%;;%S@%^m$Dj$_a$Dj$^m$9-%YP$E@@>K@2 @cB@cB@mq@k#$x;@x;@R)@2 @5&@CI+fX@CI+5&@YK+>K@,K@,K@,K@)K@>K@>K@>K@>K@>K@>K@>K@>K@>K@5G+2 @YK+>K@>K@>K@YK+2 @>K@>K@>K@>K@>K@>K@>K@T,@dX+(s#bX+*B+K)@,B+0&@0&@0=@0=@9=@mq@7$@7G+7G+DI+bN$iF$kF$lF$WL$WL$!l$d9$37$e;%'2+'2+Bb#&6$,p$S5+8o@K6@q'@@<+6[*R%=IK#)}@[k+<7@- +h9@'v@6a@lc@51@lZ+$>+$>+$>+t^@t^@Kp#Kp#eY#dY#O;$3/#l%$Fb+I~%T%$1I#1I#+;$+;$(K#>2#'2#*5#R7#V7#Z7#jx*V`#7B*B.$UP#lu*S%=eO*T%=sD*U%=V%=W%=X%=Y%=Z%=`%= &=$)6+)6+{6+;6+y0++4+]f+t|%p[%+&=@&=!k+!k+St+[w+@m+#m+Lt+aX+!w+$B+mX+mX+=B+zD+< @W{@T.@xD+T.@yD+=B+=B++:P+7=@fX+4Z+!k#vp#Wx$XK+9&@Y|#L,@!P+:o+jp+:C#w:+Ig+'_+Ri$Ri$,r$Qp$)E*`u$:u%s{%fq%8=%kt$B!%zo$Iu$Sp$Gt$+O$)O$jQ$jQ$'O$)O$bC${`#qR$EZ$EZ$EZ$EZ$EZ$aP$aP$aP$tQ$EZ$EZ$EZ$qR$gc@6k@6k@6k@6k@gc@0i@0i@fc@fc@fc@fc@fc@fc@fc@fc@,O$,O$rQ$rQ$rQ$,O$)O$0S$)O$0S$pR$pR$sQ$& $& $tQ$W=&`%$cR*#&=#&=)**@&*L9&*^$:/$o{$@s+.s+@a@@a@&E+%}@M<@qR$EZ$sQ$0S$'O$,O$jR$jR$!O$& $tQ$uQ$6*$XH@^P+ZM+ZM+ZM+ZM+ZM+ZM+ZM+Ht+Ht+oI+oI+ZM+ZM+sI+sI+YA#C`#$7@59@Lx#nD#Vv#pe#yb#L,@pk+a~@d^@-(@y;@ry+pk+!B+z$+z$+a~@a~@z$+c&@G6@c&@s<@s<@z$+s<@s<@b&@b~@6T+L@+6Z+6Z+L@+6T+6T+e^@e^@e^@J@@J@@6T+6T+6T+dp+dp+(w+(w+(w+_w+UQ@UQ@8#%8#%8#%8#%pr&}`$}`$7&@Tm#mq@8$@I@@I@@8$@x;@DD+w;@w;@YK+YK+YK+>K@>K@5$@jX+fX+fX+fX+fX+fX+fX+fX+4Z+gX+CI+2R+gX+gX+2R+]-+-K@-K@-K@-K@r8+r8+r8+r8+U0+U0+Rb+KL#5]+&=,&='&=',@*< 6t+Lo+)&=Ac+z1 }'%V|@@B x2&FA%!&=zC.B*+B*+w}*T-+]R@~&=[c@#R$yF@SU#'>+<-+D)+D)+@ +@ +Z]$Z]$ZX.ZX.ZX.Z]$Z]$@ +@ ++B$|0#k %/a$/a$&c$/a$)]$)]$(a$80$Q'$oo%*c$*c$*c$*c$]m$]m$]m$]m$>b$>b$nw$nw$nw$Hs$Gs$Hs$8F$Bj$Bj$5d$Cj$Cj$^m$^m$^m$^m$cN$a9$b9$b8$b8$Ej$Rj$Sj$Sj$Sj$Sj$Sj$Sj$Sj$%u$5F$5F$5F$%u$>b$Sj$=k$_a$_a$@d$_a$_a$^m$5G$S@%S@%S@%5G$Dj$Dj$Dj$^m$lw$YP$E@@>K@2 @cB@cB@mq@k#$x;@x;@R)@2 @5&@CI+fX@CI+5&@2 @>K@)K@)K@)K@)K@>K@>K@>K@>K@>K@>K@>K@>K@>K@>K@>K@)K@)K@)K@>K@YK+2 @>K@>K@>K@>K@>K@>K@>K@T,@dX+(s#bX+*B+K)@,B+0&@0&@0=@0=@9=@mq@Tm#F@@F@@XK+%/$kF$lF$lF$WL$lF$5($5($37$e;%Bb#$*$&6$qw$Ej$-c$Vk$'>+iX@b1*7[*^k@IK#m6+W_@d~@+$>+T&+[/#$f+dm%dm%2P#dY#O;$3/#E#$%:%E0+X/%@;$@;$+;$+;$(K#>2#SL##o#R7#V7#S0#jx*V`#7B*B.$UP#lu*wv*{&=]&=^&=/&=(&=_&=:&=<&=[&=`%=}&=FD*|&=1&=6Q*%B*%B*%B*6A*]y*^y*ly*B.$B.$7B*7i%BA*CA*Wf%$Q#Y7#Lq#Lq#)5#M7#M7#Ec#*q%/X#:X#6T#~X#/l#5@$7d$CB#F2$F2$5[+5[+4[+4[+Nr$cO$8[+<[+2/#D:+E:+E:+m8+!_+9[+~|+.I#x0+/>$>6+'6+Z3+tB#V4#+4+]f+fx$k:%k:%2&=)k+)k+kr+St++m+@m+Xn+np+)w+xD+mX+mX+zD+zD+6=@ky+T.@xD+T.@yD+=B+=B++:P+7=@fX+4Z+!k#vp#Wx$XK+8&@6~#!B+6X+!G+Nn+}1@r0+B4%Ig+AM$Ld$ot$nt$QG$|s$.9@R'$s{%fq%kt$B!%Tp$4c$Sp$Sp$!x$K@>K@)K@jX+jX+fX+fX+fX+fX+fX+fX+fX+4Z+gX+CI+2R+gX+gX+2R+]-+-K@-K@-K@-K@r8+r8+r8+r8+U0+U0+Rb+KL#5]+G*5&='M*ON*wT*P,%*&=~i&E# 6&=^@+zM+w{@:(+@:+h;#pt+Ba@ws&,X+C!@^^@C{@C{@l]#l]#,C+uq*uq*uq*VD@VD@+y&#d+#d+#d+<:*<:*-.%-.%QD*/p.-.%-.%M]*M]*<:*B#@Bj.7P.7P.oh.oh.7P.7P.Kh+$(+Ea+5A.Ea+T_+G|@T_+xc+G|@7P.y4&y4&Kh+G|@G|@Kh+xc+T_+G|@G|@$(+xc+T_+Kh+xc+$(+T_+Kh+Kh+7P.Kh+Kh+7P.G|@T_+G|@7P.Kh+T_+Ea+d #US+OP*23+d #:{+:{+u]#d #d #d #d #d #d #d #d #T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@oh.oh.7P.Kh+T_+$(+xc+xc+xc+$(+$(+T_+G|@G|@Kh+Kh+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@Kh+Kh+Kh+9g.9g.Bz$aH@aH@Bz$9g.9g.bH@aH@Bz$Bz$9g.Bz$Bz$aH@Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$bH@bH@bH@bH@bH@bH@bH@bH@T_+T_+T_+T_+T_+T_+T_+T_+$(+xc+xc+T_+Kh+Kh+T_+xc+>( Bz$bH@bH@Bz$Bz$bH@l7 Bz$Bz$aH@bH@}f.l7 l7 cI+xc+T_+G|@T_+xc+Ea+$(+G|@7P.Ea+be+]! Kh+oh.", "/#&/#&/#&/#&/#&/#&/#&^#&^#&*o@Jc@Jc@b #b #Jc@O7.is@dD.dD.is@x5.x5.Vh.dD.dD.Vh.is@is@x5.x5.O7.VW.VW.9, G6.hY.hY.hY.hY.Hu+Hu+Hu+Hu+8v.9, hY.X)@VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.i% -H.l` -H.R_ *_ R_ l` R_ -H.-H.-H.-H.-H.-H.1% VW.x5.x5.O7.xX%_r+_r+_r+O7.O7.O7.O7.xX%xX%xX%xX%x5.x5.x5.x5.x5.x5.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%PI.PI.PI.PI.PI.PI.PI.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+xX%O7.x5.is@x5.O7._r+M7._r+_r+_r+_r+_r+_r+_r+_r+#9.#9.#9.#9.#9.#9.#9.#9.Hu+PI.#9.cp.[3+|5+w7+ET .#9.#9.#9.#9.#9.#9.#9.cp.cp.cp.cp.cp.cp.cp.cp.|5+|5+|5+|5+|5+|5+|5+|5+6z+ET&ET&w7+|5+|5+[3+;H.w4.{_ {_ W_ W_ {_ {_ {_ O9.|x.|x.|x.|x.O9.|x.|x.;b.;b.;b.;b.;b.;b.;b.;b.n3 {_ O9.O9.;b.{_ {_ a, M2 )W+21.21.j}+j}+l#@l#@|5+[3+s[.s[.91+91+6R@6R@#0*#0*$;&_r+_r+= @= @OS*OS*7&=M%=8&=lU+|_@*Y.Lo+w:.}r z1 }'%V|@@B x2&~>#a_*H-*l%+l%+w}*w}*:B@43@[c@#R$yF@SU#'>+<-+D)+D)++B$+B$A1#A1#1/%1/%1/%A1#Z]$@ +@ ++B$|0#k %/a$/a$&c$&c$)]$)]$80$Q'$oo%3w+Wk$Wk$Wk$Wk$ar$ar$ar$ar$>b$>b$nw$nw$nw$Hs$Gs$Hs$Cj$5d$5d$5d$Cj$8F$5G$5G$Dj$Dj$a9$a9$b9$b9$b9$a9$Ms$>b$>b$>b$>b$>b$>b$>b$%u$%u$%u$%u$=c$=c$>b$Sj$_a$_a$_a$_a$_a$Dj$5G$S@%S@%5G$5G$^m$^m$Dj$Dj$M1#YP$E@@>K@2 @8G+cB@mq@k#$x;@x;@R)@2 @2 @5&@CI+CI+5&@2 @YK+>K@>K@>K@>K@>K@>K@>K@>K@>K@>K@>K@>K@>K@)K@,K@,K@,K@)K@>K@YK+2 @>K@>K@>K@>K@>K@>K@>K@T,@dX+(s#bX+*B+K)@,B+0&@0&@0&@0=@9=@k#$X/$CO@'K@zM@/H$lF$lF$WL$lF$lF$5($d8$37$37$&6$&6$qw$,p$Ej$-c$A+%ki@_-@c<*rc@VQ@9Z.X @`.@d~@Gq@lK@d1@U}+V}+XM+m0+$>+T&+i)+$f+Be$iV$iV$2P#LU#O;$3/#$|+-Q#T:%51%$;$@;$5*$=2#(K#,2##o#Ef#:o#V7#BA*as*V`#C.$VI*UP#9&=-v*0&=a&=b&=U%=c&=d&=e&=f&=g&=bB*h&=!K#|E*TN*1X*%B*1X*6Q*- =rX*^y*B.$T`#_E#Tt#-l%S0#Wf%$Q#$Q#^5#)5#Lq#)5#M7#M7#G0#*q%Dc#Dc#J`#/l#5@$Zn#7d$ZA$W_$+2#L`#>|+>|+;|+7[+Nr$Tx$<[+<[+r:+Nn#@4+E:+dd+3/#!|+)|+:[+;6+.G#,6+;6+@w#i0#0[+,d$B5$ac#O4#or*-m+)k+lp+kr+.m++m+mp+rp+vD+xD+mX+mX+zD+zD+6=@zD+T.@xD+T.@yD+=B+=B++:P+7=@fX+4Z+!k#vp#Wx$WK+mq@x9#N)@T{@)P+k)+9~+&_+u:+qF$Rl$Sl$Ju$)r$YS&}b$.9@@1%R'$s{%b-%B!%Tp$Tp$xo$Sp$:V$!x$rQ$,O$,O$]@8)$4(@a{$a{$v~@|T@uQ$6*$aP$& $x|%x|%/{& F*|J*^O$=e%kg@Kf%jg@NK+]P+]P+]P+]P+]P+]P+]P+ZM+ZM+ZM+ZM+ZM+ZM+sI+sI+.5@s9# q+.5@4v#Lx#Vv#pe#Kx#yb#!B+z$+b&@a$@-(@y;@!B+s<@G6@G6@s<@s<@c&@gY#pr$u!$-_#G6@c&@s<@s<@-(@L@@e^@e^@J@@J@@e^@e^@K@@e^@e^@e^@J@@J@@6T+6T+6T+Qt+Qt+(w+_w+_w+my+8V@8V@lq#qt&!(%/t#Ve%pr&}`$7&@6&@mq@mq@^K@^K@mq@x;@x;@X.@8G+2 @YK+>K@)K@,K@E@@jX+fX+fX+fX+fX+fX+fX+fX+4Z+gX+CI+2R+gX+gX+2R+]-+-K@-K@-K@-K@r8+r8+r8+i~+U0+U0+Rb+KL#5]+( >( 9g.9g.Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$aH@aH@aH@bH@}f.}f.}f.l7 T_+T_+T_+T_+T_+T_+T_+T_+$(+$(+$(+T_+T_+G|@T_+$(+>( Bz$bH@aH@Bz$Bz$aH@}f.aH@aH@aH@bH@}f.}f.}f.l7 Ea+$(+T_+$(+Ea+Ea+xc+T_+G|@xc+5A.Ea+T_+G|@", "^#&^#&^#&^#&^#&^#&^#&Hf.^#&/#&Jc@b #b #Jc@Jc@O7.is@dD.dD.is@x5.x5.Vh.dD.dD.Vh.is@is@x5.x5.O7.8v.8v.8v.VW.VW.9, G6.G6.Hu+Hu+Hu+Hu+8v.9, hY.X)@VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.6% 1% n` WW.6% i% 1% WW.1% 1% 1% 1% 1% 1% 1% 6% VW.x5.x5.O7.xX%_r+_r+_r+N7.N7._r+xX%O7.x5.is@is@O7.O7.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%Hu+PI.PI.PI.PI.PI.PI.PI.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+xX%O7.x5.is@x5.O7._r+M7._r+_r+_r+_r+_r+_r+_r+_r+#9.#9.#9.#9.#9.#9.#9.#9.Hu+PI.#9.cp.[3+|5+|5+w7+#9.#9.#9.#9.#9.#9.#9.#9.cp.cp.cp.cp.cp.cp.cp.cp.|5+|5+|5+|5+|5+|5+|5+|5+6z+ET&ET&w7+|5+|5+[3+;H.fL.W_ W_ {_ {_ W_ W_ W_ |x.|x.O9.|x.|x.|x.|x.O9.;b.;b.;b.;b.;b.;b.;b.;b.&5 {_ |x.|x.;b.{_ ;b.8H.M2 )W+)W+)W+l#@l#@l#@l#@|5+[3+s[.s[.91+91+6R@6R@#0*#0*$;&_r+_r+= @= @OS*q&=r&=k%=N%=u*$n*@-t+s&=XU '} z1 *7.b[%$^%x2&~>#a_*H-*l%+l%+w}*w}*:B@43@[c@#R$yF@SU#'>+<-+D)+D)++B$+B$A1#A1#1/%1/%1/%A1#Z]$@ +@ ++B$|0#k %/a$/a$&c$/a$)]$)]$(a$80$Q'$oo%Wk$Wk$Wk$Wk$ar$ar$ar$ar$>b$>b$nw$nw$nw$Hs$Gs$Hs$Cj$5d$5d$5d$Cj$8F$5G$5G$Dj$Dj$a9$a9$b9$b9$b9$a9$Ms$>b$>b$>b$>b$>b$>b$>b$%u$%u$%u$=c$=c$=c$=c$=c$Dj$Dj$_a$_a$_a$Dj$^m$5G$5G$5G$5G$5G$^m$^m$Dj$M1#/s#4Z+5$@2 @8G+cB@mq@k#$mq@x;@R)@2 @2 @5&@CI+CI+5&@2 @2 @2 @YK+>K@>K@)K@>K@>K@>K@>K@>K@>K@>K@>K@)K@,K@,K@,K@)K@>K@YK+2 @>K@>K@>K@>K@>K@>K@>K@T,@dX+(s#bX+*B+K)@,B+0&@0&@0&@0=@9=@k#$X/$CO@'K@zM@/H$lF$lF$WL$lF$lF$5($d8$37$47$qw$,p$Ej$Ej$a9$-c$R5+#@#LD@BB@VQ@JL#nK@>m@+T&+i)+$f+Be$iV$iV$1P#LU#K0+3/#E#$%:%T:%51%$;$$;$^b$=2#(K#,2#Ef#Ef#:o#R0#5A*as*)u#C.$^y*~K#9&=t&=to#'r#do#u&=v&=w&=x&=y&=ZB*z&=A&='I#B&=C&=C&=1X*D&=TT*6y*$y*VI*_E#VB#:z#X`#0@$^5#Z7#!5#W7#[w#Y7#)5#Kq#Jq#Jq#G0#*q%H~$H~$#G##G#5@$/l#ci#ci#W_$+2#L`#>|+>|+;|+7[+Nr$Tx$<[+<[+r:+Nn#@4+E:+dd+h&%:[+:[+:[+&2+tB#e8+c8+ G#V4#0[+Wg+`b$ac#_f#_f#-m+)k+lp+kr+.m++m+mp+rp+wD+S.@P,+#a@zD+zD+1G+3R+T.@xD+T.@yD+=B+=B++:P+7=@fX+4Z+!k#vp#Wx$WK+x;@ci@M@+VA+iD+7~+p0+c~+%_+9G$8j$uk$ v$M3&fJ&='$.9@@1%(~%(~%B!%B!%Tp$Tp$Sp$Sp$:V$:V$xV#rQ$,O$)O$.O$ 7@qR$tQ$aP$aP$aP$tQ$qR$qR$qR$qR$qR$qR$qR$qR$ye@0i@fc@gc@gc@fc@fc@0i@fc@fc@fc@fc@fc@fc@fc@fc@0S$0S$)O$)O$0S$!O$x|%hE*hE*hE*hE*hE*x|%x|%x|%& $]$=Ij*-t$E&=E&=qy*:S&:S&:S&W=&X=&+7@.:$`4@N<@N<@29@29@XH@uQ$tQ$~O$~O$~O$ F*|J*%G*4F*Lf%lh%lh%YM+]P+/P+/P+/P+/P+/P+/P+/P+nI+nI+nI+nI+nI+nI+dr+dr+.5@ q+ q+.5@4v#Lx#Kx#pe#Kx#yb#!B+z$+b&@a$@-(@y;@z$+c&@G6@G6@c&@s<@G6@-_#pr$u!$-_#G6@c&@s<@s<@-(@P,@K@@e^@e^@e^@e^@K@@Z.@e^@e^@e^@J@@J@@6T+6T+6T+Qt+Qt+_w+_w+my+my+9$@9$@lq#qt&!(%/t#Ve%pr&}`$7&@6&@mq@mq@k#$k#$mq@x;@x;@X.@8G+2 @YK+>K@)K@,K@E@@E@@4Z+4Z+4Z+4Z+4Z+4Z+4Z+4Z+gX+CI+2R+gX+gX+2R+]-+-K@-K@r8+r8+r8+r8+i~+i~+U0+gi@Rb+KL#W_@J6@,%@/p%9Z.oK@ji@E+@22+22+U^@@/%jE$HS#v(@q]+UC*>Q*F&=k&=G&='R*:N*6O*wT*H&=4} !i&^% 5[.I&=FI#+9.<3+7&+<(+o3.#R+I7.M|@H8@k1+yE#iM#,C+,C+,C+uq*z9.z9.VD@VD@-.%<:*#d+#d+#d+-.%M]*/p.RD*M]*<:*-.%M]*M]*<:*B#@Bj.Kh+G|@G|@G|@G|@Kh+Kh+G|@$(+Ea+xc+T_+T_+$(+Ea+xc+Ea+Ea+Ea+xc+xc+xc+xc+Ea+$(+G|@G|@$(+$(+G|@7P.G|@T_+T_+T_+G|@G|@Kh+Kh+oh.Kh+T_+T_+G|@Kh+T_+$(+v]#u]#';$d #u]#u]#';$23+';$';$';$';$';$';$';$';$T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@$(+T_+T_+G|@G|@Kh+Kh+7P.xc+$(+T_+G|@Kh+7P.oh.oh.G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$bH@bH@Bz$9g.>( >( 9g.9g.Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$aH@bH@}f.}f.l7 l7 T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+$(+$(+T_+T_+9g.aH@bH@bH@Bz$Bz$bH@l7 l7 }f.}f.}f.bH@aH@aH@aH@Ea+$(+T_+$(+Ea+Ea+xc+T_+5A.$(+G|@T_+Ea+5A.", "^#&^#&^#&^#&^#&^#&^#&^#&*o@Jc@b #b #Jc@/#&*o@xX%x5.Vh.Vh.x5.O7.x5.is@is@is@is@x5.x5.x5.x5.x5.8v.8v.Hu+Hu+Hu+8v.VW.9, 8v.8v.Hu+Hu+8v.VW.G6.hY.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.6% WW.n` WW.6% 6% 1% n` 1% 1% 1% 6% 6% i% i% Hu+8v.O7.O7.O7.xX%xX%xX%xX%M7.M7.N7.xX%O7.is@Vh.Vh.O7.O7.O7.x5.x5.x5.is@is@xX%xX%xX%xX%xX%xX%xX%xX%8v.8v.8v.Hu+Hu+PI.PI.PI.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+xX%O7.x5.is@x5.O7._r+M7._r+_r+_r+_r+_r+_r+_r+_r+PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.#9.#9.#9.cp.cp.PI.PI.PI.PI.PI.PI.PI.PI.cp.cp.cp.cp.cp.cp.cp.cp.|5+|5+|5+|5+|5+|5+|5+|5+w7+w7+|5+|5+|5+|5+[3+;H.fL.W_ {_ ;b.;b.{_ W_ W_ {_ |x.O9.|x.{_ {_ ;b.O9.;b.;b.;b.;b.;b.;b.;b.;b.{_ |x.O9.|x.{_ W_ {_ 8H.M2 {b+ph#)W+l#@5!.$9.l#@[3+[3+91+91+QI.QI.6R@Ay.#0*#0*$;&_r+_r+= @= @OS*q&=J&=K&=L&=NM@n*@,t+x1$XU '} z1 1'%@B d.~$#~>#!&=zC.B*+B*+w}*T-+]R@~&=[c@#R$yF@SU#'>+<-+D)+D)+@ +@ +Z]$Z]$ZX.ZX.ZX.Z]$Z]$@ +@ ++B$|0#k %/a$/a$Fs%Fs%pr%/9$4v$(a$80$Q'$!U#!U#!U#!U#Tj$Tj$Tj$Tj$>b$>b$nw$nw$nw$Hs$Gs$Hs$8F$Bj$Bj$5d$Cj$Cj$^m$^m$_a$_a$Ej$a9$b9$bq$bq$cN$nw$=c$=c$=c$=c$=c$=c$=c$5F$%u$=c$>b$>b$=c$=c$%u$^m$Dj$_a$_a$_a$Dj$^m$^m$^m$5G$5G$S@%5G$^m$Dj$N1#/s#4Z+5$@5&@5G+8G+x;@k#$mq@mq@x;@R)@2 @5&@5&@5&@2 @2 @5G+5G+2 @YK+>K@)K@>K@>K@>K@>K@>K@>K@>K@>K@>K@>K@)K@)K@)K@>K@YK+2 @>K@>K@>K@>K@>K@>K@>K@T,@dX+(s#bX+*B+K)@,B+0&@0&@0=@0=@9=@mq@Tm#F@@F@@XK+%/$kF$lF$lF$WL$lF$5($5($37$47$,p$Ej$a9$cN$cN$Dj$'7$}f+^k@(-@W[$dZ.[g@-p*;Q#ik+K_@kK@Zv+Zv+W}+3~+6~+$>+$>+T&+[/#$f+dm%dm%1P#3f#Jb+l8+l%$Fb+I~%U%$,X#`A$^b$nd$>2#Hq#Ef#M&=Ii#9v*5A*;v*)u#U`#^y*|&=)K#5w*=r#a&=^&=N&=O&=P&=Q&=R&=zB*Cz*A&=S&=T&=1X*U&=V&=D&=W&=$y*hw*_E#VB#:z#_z#(2#Tc#[w#^5#Y7#Y7#/2#^5#Kq#J0#O7#Jq#G0#*q%H~$H~$#G#yf#/l#/l#M`#M`#W_$W_$W_$F2$F2$5[+5[+4[+$2+cO$cO$8[+`-$ed+r:+2/#a8+,:#:[+x0+>6+.G#;6+sh%3/#+*$Vg+)i#`b$A5$G`#P4#)k+)k+kr+St++m+@m+Xn+np+rr+A@@P,+#a@zD+zD+AD+Gn+T.@xD+T.@yD+=B+=B++:P+7=@fX+4Z+!k#vp#Wx$WK+x;@UQ@q8+{V+$q+x6@;:#X&=$_+I>%A;%Oc$[!$41@Zu$*'$X<@(~%(~%(~%oB$oB$zo$zo$cs$Gt$:V$:V$xV#,O$'O$0S$.O$yV# 7@{`#qR$tQ$aP$aP$qR$qR$qR$EZ$EZ$EZ$tQ$tQ$xe@ye@0i@fc@fc@fc@fc@0i@fc@fc@fc@fc@fc@fc@fc@fc@hE*x|%!O$0S$0S$!O$x|%x|%hE*hE*x|%x|%x|%!O$!O$!O$f'&Y=&f'&Y=&Y=&iQ%Y=&iQ%iQ%{r%{r%@r%= $@r%.7@`4@29@29@v~@OS#19@tQ$~O$~O${O$p'%]O$ZH@kg@jg@pg%YM+]P+/P+/P+/P+/P+/P+/P+/P+Gt+Gt+Gt+nI+nI+nI+dr+dr+4k#.5@s9#.5@4v#XA#Kx#yb#Kx#yb#a~@!B+-(@b&@d^@y;@!B+s<@G6@G6@s<@s<@G6@-_#-_#-_#G6@c&@s<@s<@s<@b&@L@@K@@e^@J@@J@@e^@K@@K@@e^@e^@e^@J@@J@@6T+6T+6T+:w+:w+_w+my+my+ny+9$@9$@!(%/t#/t#).$pr&pr&}`$7&@6&@mq@k#$E+$E+$k#$x;@x;@8G+R)@2 @YK+>K@>K@)K@jX+E@@4Z+4Z+4Z+4Z+4Z+4Z+4Z+4Z+gX+CI+2R+gX+gX+2R+]-+r8+r8+r8+r8+r8+i~+i~+QU#gi@gi@Rb+ii@W_@J6@,%@/p%9Z.oK@ji@#N@U^@U^@U^@@/% a, 8H.a, fL.I> w4.8H.a, a, a, a, a, a, a, a, 8H.cl+cl+8H.fL.I> fL.a, M2 ph#un.{b+$9.6!.5!.l#@cp.#9.QI.QI.$;&$;&)1.)1.#0*#0*$;&_r+_r+= @= @OS*oP*.*=k%=8&=h: n*@J' ='+XU '} }'%fr d.fb%+*=FA%P%=,^.W'*W'*Q%=Q%=YF@~5@[c@#R$yF@SU#'>+<-+D)+D)+W_#W_#ZR#ZR#`a$`a$`a$ZR#Z]$@ +@ ++B$|0#k %/a$/a$0r$0r$ p$ p$96&^q$(a$(a$!U#!U#!U#!U#Tj$Tj$Tj$Tj$>b$>b$nw$nw$nw$Hs$Gs$Hs$DP$j%%Bj$Bj$Cj$-c$Dj$_a$_a$_a$Ej$a9$b9$bq$bq$cN$nw$=c$=c$=c$=c$=c$=c$=c$5F$%u$>b$>b$>b$=c$%u$5F$^m$^m$Dj$_a$_a$_a$Dj$^m$^m$5G$S@%S@%S@%^m$Dj$L1#]v#M+#gX+5&@5G+8G+x;@DD+mq@mq@x;@R)@2 @5&@5&@5&@YK+2 @5G+;K@5G+2 @>K@)K@>K@>K@>K@>K@>K@>K@>K@>K@5G+2 @YK+>K@>K@>K@YK+2 @>K@>K@>K@>K@>K@>K@>K@T,@dX+(s#bX+*B+K)@,B+0&@0&@0=@0=@9=@mq@7$@7G+7G+DI+bN$iF$kF$lF$WL$WL$!l$d9$47$_8$Ej$cN$sS$sS$cN$Dj$ +@RX.Gk&/-@)}@6]+,%@{i@>p*R^@H&+hV+Zv+Ct+a9@`v+6~+$>+$>+$>+t^@t^@Kp#Kp#1P#3f#Jb+^6+ 4+F_$E_$E7#W4$W4$0($nd$>2#Gq#NR#M&=Ii#Mu*5A*]Y*UP#U`#sC*@*=)K#Cw*qw##*=.D*$*=%*=&*=**==*=CC*-*=uN*;*=p =>*=,*='*=Wv*o+=hw*SB#:z#:z#&8#(z#St#iT#:I#^E#^E#J0#`P#[w#^5#^5#O7#Jq#P7#_}%I_$I_$EB#EB#yf#yf#ci#ci#sT#rT#|X#X_$X_$d %5[+7[+;|+Nr$cO$8[+H#$H#$<[+&|+%|+/>$;6+;6+.I#QL#(j%)*=!*=78+a[+qi+Ul$cd%@v$:v$!k+!k+St+[w+@m+#m+Lt+aX+&>+A@@P,+#a@zD+=B+AD+h~+T.@xD+T.@yD+=B+=B++:P+7=@fX+4Z+!k#vp#Wx$WK+R)@<^#}a@51@lI+Y(+M,+j'%a0$~*=jo%y6@AT#N<@V6$U>$X0@R'$(~%@1%Ma$Ma$4c$4c$yV#yV#!x$!x$rQ$'O$jR$x|%.O$cs$Gt$Gt$yV#qR$aP$p'%qR$EZ$EZ$EZ$tQ$aP$aP$aP$xe@xe@0i@fc@fc@fc@fc@0i@fc@fc@fc@fc@fc@fc@fc@fc@DD@tB@xe@ye@0i@fc@$F$$F$% $% $Aw$>G$SG$SG$SG$xI$jR$0S$jQ$0S$0S$pR$0S$sQ$pR$qR$EZ$19@EZ$uQ$uQ$|T@5X+:R+WH@MU#fY#19@tQ$aP$tQ$aP$bP$YH@re@8i@qI+]P+Gt+Gt+Gt+Gt+Gt+Gt+Gt+Gt+/P+/P+Gt+Gt+nI+nI+dr+dr+59@$7@.5@4k#4v#XA#pe#L,@yb#L,@pk+a~@d^@-(@y;@ry+!B+s<@c&@c&@s<@z$+c&@gY#G6@c&@s<@s<@z$+s<@s<@b&@0$@e^@J@@J@@J@@J@@e^@e^@e^@e^@e^@J@@J@@6T+6T+6T+:w+:w+my+my+ny+ny+9$@9$@8#%8#%8#%8#%pr&}`$}`$7&@7$@mq@E+$A%%A%%E+$x;@cB@w;@w;@YK+YK+YK+>K@>K@5$@&&#Xx$Xx$Xx$Xx$Xx$Xx$Xx$8e#iX+}{#WK+iX+iX+WK+hF$r8+r8+r8+i~+i~+i~+i~+QU#gi@o=#(K@ii@W_@0Z./p%/p%9Z.oK@E+@xs*u(@u(@U^@i|+u9*X $v(@ZE%MD*1T*F&=4&=D =mD*{*=Y#=wT*#U* *=w<+i> 6&=>0+bv#b,+:(+zI*bp.o3.g6@g6@g6@qK#.X+iM#l]#,C+,C+_|*z9.z9.z9..y&.y&-~@>n.!D+`b&`b&>n.-~@]*=B#@{y%'W+{y%!D+;n.>n.`b&Bj.G|@T_+$(+$(+T_+G|@Kh+oh.Kh+T_+G|@Kh+Kh+T_+xc+7P.T_+Ea+xc+G|@7P.7P.Kh+Kh+oh.y4&oh.G|@T_+Kh+7P.7P.Kh+T_+$(+$(+T_+G|@Kh+y4&Kh+$(+$(+T_+G|@G|@T_+zi.J> J> zi.x{ x{ J> U*@J> J> J> J> J> J> J> J> Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@$(+$(+T_+G|@G|@Kh+7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@T_+T_+T_+l7 }f.bH@aH@aH@bH@}f.l7 bH@aH@aH@Bz$aH@bH@}f.}f.bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@}f.}f.}f.T_+T_+T_+T_+T_+T_+T_+T_+G|@Kh+Kh+T_+Ea+5A.$(+Kh+aH@}f.cI+cI+}f.}f.l7 NM+}f.}f.}f.bH@bH@bH@bH@bH@$(+G|@Kh+G|@$(+$(+T_+Kh+5A.$(+Kh+T_+Ea+]! ", "/#&/#&/#&/#&/#&/#&/#&*o@Jc@b #V^$V^$/#&^#&S,%N7.xX%is@x5.xX%_r+xX%O7._r+_r+_r+xX%O7.O7.x5.x5.hY.G6.VW.Hu+PI.Hu+8v.VW.9, 9, VW.8v.8v.8v.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.6% WW._j.n` 1% 6% WW.n` 6% 6% i% i% h% <4 <4 cp._r+_r+_r+xX%O7.x5.x5.x5.O7.O7.O7.O7.xX%xX%xX%xX%xX%xX%O7.O7.x5.is@is@is@xX%xX%xX%xX%xX%xX%xX%xX%G6.9, 9, VW.8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+xX%O7.x5.is@x5.O7._r+M7._r+_r+_r+_r+_r+_r+_r+_r+8v.8v.8v.8v.8v.8v.8v.8v.#9.PI.PI.Hu+8v.VW.VW.9, PI.PI.PI.PI.PI.PI.PI.PI.cp.cp.cp.cp.cp.cp.cp.cp.|5+|5+|5+|5+|5+|5+|5+|5+PI.#9.#9.cp.[3+[3+|5+|5+-J.w4.8H.cl+cl+8H.w4.fL.v% w4.8H.a, I> v% fL.8H.a, a, a, a, a, a, a, a, cl+xj+xj+8H.I> v% I> ':+)W+ph#un.{b+$9.6!.5!.l#@#9.#9.$;&$;&4I%4I%)1.M}.#0*#0*$;&_r+_r+= @= @OS*#P*.*=M%=^*=E_ |_@|a$/t+XU }r *7.Dy B0%=7#~>#,2%+N*,^.V)*V)*Q%=Q%='m$~5@[c@#R$yF@SU#'>+<-+D)+D)+D)+D)+5h#5h#2=$2=$2=$5h#Z]$@ +@ ++B$|0#k %/a$/a$&W#&W#^v$^v$7l*^q$4v$4v$!U#!U#!U#!U#Tj$Tj$Tj$Tj$>b$>b$nw$nw$nw$Hs$Gs$Hs$>N$I@%j%%Bj$Cj$-c$_a$@d$@d$_a$Ej$a9$b9$bq$bq$sS$nw$=c$=c$=c$=c$=c$=c$=c$5F$%u$>b$Sj$>b$=c$%u$6F$^m$^m$Dj$_a$_a$_a$Dj$^m$^m$5G$S@%S@%S@%^m$_a$L1#]v#M+#7V@CI+R,+5G+x;@DD+mq@mq@x;@x;@R)@2 @2 @5&@YK+2 @5G+;K@;K@2 @>K@)K@>K@>K@>K@>K@>K@>K@>K@>K@-K@;K@5G+YK+YK+YK+YK+YK+>K@>K@>K@>K@>K@>K@>K@T,@dX+(s#bX+*B+K)@,B+0&@0&@a=@0=@9=@^K@EM@&n%w)$nz#Tv#iF$jF$lF$WL$hm$~l$~l$47$_8$Ej$cN$sS$sS$cN$^m$/-@mV$:c*#N@0Z.%`$V,@>%@Sr+5^@i&%WM+Ct+Ct+~[+Y}+6~+$>+$>+$>+ >#.>#Z;#Z;#1P#3f#Jb+!|+Gy#C7#I`#v.$q'$W4$.(%nd$fi#Gq#M&=8E#gz#Mu*{C*{I#HN*U`#/*=@*=)K#Cw*qw#(*=_*=:*=<*=[*=}*=|*=1*=-*=ku*2*=>*=3*=xu*'*=Wv*o+=SB#SB#:z#:z#(z#(z#St#iT#:I#:I#}w#:I#`P#[w#^5#^5#O7#Jq#P7#_}%)2#)2#_l#Af#yf##G#@I#@I#X4#rT#g@$M3$M3$X_$F2$>|+>|+4[+3[+cO$Tx$8[+)_+1[+/>$&2+d8+d8+.I#x0+F(%4*=5*=_w$)i#'d$ex$ck%fx$:v$~k+~k+[w+IZ@#m+VA$Lt+mr+&>+}P+P,+#a@ky+=B+RK+h~+T.@xD+T.@yD+=B+=B++:P+7=@fX+4Z+!k#vp#Wx$_P+2 @+:$16+51@Dt+Y(+@1@sC$%k+e(%jo%y6@a{$4(@x|#U>$S2$s{%(~%@1%Ma$z6@Iu$Iu$ 7@yV#+O$+O$rQ$'O$0=*hE*.O$cs$xo$xo$Sp$ 7@aP$]O$EZ$EZ$tQ$tQ$aP$bP$bP$bP$tB@xe@ye@0i@fc@fc@fc@0i@fc@fc@fc@fc@fc@fc@fc@fc@d%=AF*tB@ye@0i@fc@#F$#F$% $$F$>G$SG$SG$xI$xI$JH$jQ$'O$,O$,O$,O$:@fY#uQ$aP$EZ$19@uQ$`H@4k@^P+sI+Gt+Gt+Gt+Gt+Gt+Gt+Gt+Gt+Gt+/P+/P+/P+Gt+nI+nI+dr+dr+YA#59@4k#$7@XA#XA#pe#L,@yb#M)@M,@pk+y;@d^@y;@ry+a~@z$+c&@s<@z$+z$+s<@G6@s<@s<@z$+z$+z$+s<@c&@b&@0$@J@@J@@6T+6T+J@@J@@e^@e^@e^@e^@J@@J@@6T+6T+6T+:w+:w+my+my+ny+ny+9$@8&@]k#]k#7&@7&@}`$}`$}`$8#%7$@mq@E+$A%%A%%E+$x;@cB@!K@!K@>K@YK+YK+YK+YK+4G+&&#Xx$Xx$Xx$Xx$Xx$Xx$Xx$8e#iX+}{#WK+iX+iX+WK+hF$r8+r8+i~+i~+i~+i~+QU#QU#o=#o=#(K@ii@>(@0Z./p%~8*o'@oK@E+@xs*u(@u(@U^@i|+mm**R#v(@ZE%MD*6*=F&=[ =D =mD*{*=Y#=wT*7T* *=rQ&U@ 5[.>0+bv#Q+&+9.NR*0q..9.C!@H8@I7.p!#2p%2p%qK#,C+,C+_|*z9.z9.z9..y&.y&-~@;n.!D+B#@`b&>n.}m.]*='W+Y@$Y@$'W+`b&>n.>n.Bj.7P.Kh+T_+$(+$(+T_+Kh+7P.y4&7P.Kh+Kh+7P.7P.G|@$(+Kh+xc+]! 5A.T_+Kh+Kh+G|@oh.y4&iS.y4&Kh+G|@Kh+7P.7P.Kh+G|@$(+$(+T_+G|@Kh+y4&Kh+$(+xc+T_+G|@G|@T_+U*@U*@xE*J> x{ x{ zi.xE*J> J> J> J> J> J> J> J> Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@7P.7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.Kh+Kh+G|@G|@T_+T_+$(+cI+l7 }f.bH@bH@}f.l7 cI+aH@aH@aH@aH@bH@}f.l7 cI+bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@T_+T_+T_+T_+T_+T_+T_+T_+G|@Kh+7P.T_+5A.]! $(+Kh+bH@l7 NM+NM+l7 l7 cI+ko.Bz$aH@aH@bH@}f.}f.l7 l7 T_+G|@7P.Kh+T_+$(+G|@7P.$(+xc+xc+xc+$(+$(+", "/#&/#&/#&/#&/#&/#&/#&Zl@pD&b #Jc@Jc@b #pD&Zl@x5.x5.x5.x5.x5.x5.x5.x5.is@is@x5.x5.x5.O7.O7.O7.VW.VW.VW.VW.VW.VW.VW.VW.Hu+8v.VW.G6.G6.VW.8v.Hu+Hu+VW.G6.X)@X)@G6.VW.Hu+hY.G6.VW.Hu+Hu+Hu+8v.VW.9, 9, 9, 9, 9, 9, 9, 9, #9.8v.9, 9, 8v.Hu+9, X)@x5.x5.x5.x5.x5.x5.x5.x5.xX%N7.N7._r+O7.O7._r+M7._r+_r+xX%xX%O7.O7.x5.x5.N7.N7.N7.N7.N7.N7.N7.N7.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+O7.O7.O7.O7.O7.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%Hu+PI.cp.[3+[3+cp.PI.Hu+8v.8v.8v.8v.8v.8v.8v.8v.#9.#9.#9.#9.#9.#9.#9.#9.|5+|5+[3+[3+cp.#9.#9.PI.cp.[3+[3+[3+|5+|5+w7+w7+w7+w7+w7+w7+w7+w7+w7+w7+':+':+Vl.B{$Vl.-J.w% x% w% w% w% w% w% w% w% w% B{$A{$A{$A{$A{$B{$Vl.':+DU%#0+#0+A{$Vl.-J.x% j% )W+U/ `^ 21.(s.ym.(s.aq.#9.cp.91+91+91+QI.Ay.)1.gk##0*4I%O7.O7.PP*= @q&=oP*7*=K&=F8+8*=n*@{@@K;.Y9 }r }'%1'%AK%fb%!1%kb@f(*,^.TD.TD.Q%=w}*q1@;t@<-+SU#yF@yF@'>+BM#@ ++B$3)#+B$A1#Z]$ZX.1/%1/%4V+Z]$@ ++B$3)#N@%ns$0r$&W#/a$/a$)]$)]$(a$(a$(a$(a$!U#!U#!U#!U#Tj$Tj$Tj$Tj$Sj$=c$Hs$Hs$nw$Ms$Gs$-J$>N$I@%j%%j%%8F$8F$5G$^m$Dj$Dj$a9$a9$b9$b9$b9$a9$Ms$%u$5F$%u$>b$>b$=c$5F$%u$%u$%u$%u$%u$%u$%u$%u$5G$^m$^m$Dj$Dj$_a$_a$@d$,L$@d$Dj$5G$5G$^m$Dj$ni$lw$S[#mZ@fX+5$@2 @cB@cB@8$@^K@^K@x;@R)@YK+>K@>K@5G+5G+5G+2 @2 @YK+YK+YK+,K@,K@,K@,K@,K@,K@,K@,K@YK+YK+YK+YK+YK+YK+YK+YK+YK+2 @2 @5G+5G+2 @2 @:P+dX+4:**B+xI+,B+K)@0=@a=@0&@0&@8&@mq@6&@F@@F@@XK+/H$kF$kF$kF$kF$kF$5($5($c9$b8$,p$,p$hU$9*=hU$Bb#E+@nK@ha@>(@%`$V,@>%@Pp+Gy+MK+3~@Zv+F,+F,+a9@`v+6~+$>+$>+$>+ ># >#Jp#Jp#li+|/#nd+!|+j8+Fb+I~%U%$)$$)$$y0#zq#j:%K@H@@e[+ak@{V+$>+`}+s)+d~+`H$Z8@Z8@G4@J2@em+kk+G4@^7@,m$(~%B!%B!%Tp$zo$3u$xo$_V$+F$xV#rQ$,O$G$$F$#F$fc@fc@fc@fc@3}@3}@(a@x=@T;@'P+5X+29@XH@uQ$19@w)%YH@`H@%7@rI+{P+Wv#8d%/P+tI+tI+tI+tI+tI+tI+tI+3N#3P#(t#tI+(@0Z.~8*~8*o'@oK@E+@E+@DO#DO#22+;`+gD%X $hD@q*=r*=1T*$&=3A*RB*Uq*NN*ON*s*=#U*t*=,z.5[ S%~h&X@$X@$0, 0, >S%{h&{h&{h&{h&{h&{h&{h&J> xc+xc+$(+$(+T_+G|@G|@Kh+G|@G|@G|@T_+$(+$(+xc+xc+xc+xc+$(+T_+T_+G|@G|@Kh+$(+$(+T_+Kh+7P.oh.y4&iS.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+$(+$(+$(+T_+T_+T_+G|@G|@bH@bH@bH@bH@bH@bH@bH@bH@ko.ko.NM+l7 }f.aH@Bz$Bz$l7 }f.aH@Bz$Bz$aH@}f.l7 >( >( 9g.9g.Bz$aH@aH@bH@Kh+7P.7P.G|@$(+xc+T_+Kh+G|@7P.oh.Kh+T_+xc+$(+G|@aH@aH@aH@bH@}f.}f.l7 l7 cI+}f.aH@Bz$Bz$aH@}f.l7 5A.Ea+xc+$(+$(+xc+5A.]! $(+$(+xc+xc+Ea+5A.", "/#&/#&/#&/#&/#&/#&/#&b #Jc@Jc@/#&/#&Jc@Jc@b #x5.x5.x5.x5.x5.x5.x5.x5.is@is@x5.x5.x5.O7.O7.O7.VW.VW.VW.VW.VW.VW.VW.VW.Hu+8v.VW.9, 9, VW.8v.Hu+PI.Hu+9, G6.G6.9, Hu+PI.G6.9, VW.Hu+Hu+8v.VW.9, 9, 9, 9, 9, 9, 9, 9, 9, PI.VW.G6.9, 8v.Hu+VW.G6.x5.x5.x5.x5.x5.x5.x5.x5.xX%_r+_r+xX%x5.x5.xX%N7._r+_r+xX%xX%O7.O7.x5.x5._r+_r+_r+_r+_r+_r+_r+_r+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%PI.PI.#9.cp.cp.#9.PI.PI.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+#9.#9.#9.#9.#9.#9.#9.#9.cp.cp.cp.cp.#9.#9.#9.#9.cp.cp.cp.[3+[3+[3+|5+|5+w7+w7+w7+w7+w7+w7+w7+w7+-J.-J.Vl.Vl.Vl.':+l3 w% l3 l3 l3 l3 l3 l3 l3 l3 B{$B{$B{$A{$B{$Vl.':+-J.B{$B{$B{$B{$':+-J.w% x% {b+21.U/ 21.aq.(s.aq.{t.cp.cp.91+91+QI.QI.Ay.)1.0R##0*4I%O7.O7.PP*= @n4*n4*v*=M%=t^+E_ C_ L#@Hd$w*=Ac+}'%*7.=7#B0%!1%kb@f(*,^.TD.TD.Q%=w}*q1@;t@'>+SU#yF@yF@'>+BM#@ ++B$+B$+B$Z]$ZR#`a$ZX.1/%A1#ZR#W_#@ ++B$k %N@%0r$0r$/a$/a$)]$)]$(a$(a$(a$(a$!U#!U#!U#!U#Tj$Tj$Tj$Tj$Sj$=c$Hs$Hs$nw$Ms$Gs$-J$DP$j%%Bj$Bj$8F$Cj$^m$^m$Dj$Dj$a9$a9$b9$b9$b9$a9$Ms$%u$5F$%u$>b$>b$=c$5F$%u$%u$%u$%u$%u$%u$%u$%u$^m$^m$^m$Dj$Dj$_a$_a$_a$,L$@d$Dj$^m$5G$^m$Dj$2h$lw$yU#]N#nZ@5$@2 @8G+cB@^K@^K@^K@^K@cB@R)@R)@2 @5G+5G+5G+2 @2 @YK+YK+YK+,K@,K@,K@,K@,K@,K@,K@,K@YK+YK+YK+YK+YK+YK+YK+YK+YK+2 @2 @5G+5G+2 @2 @:P+dX+4:**B+xI+,B+K)@0=@a=@0&@0&@9=@mq@6&@F@@F@@XK+/H$kF$kF$kF$kF$kF$5($5($b9$bq$a9$Ej$sS$bs%a9$~ +@N@`~@%`$ii@KL#zT&*E#R^@MK+3~@Zv+U.+F,+F,+a9@`v+6~+$>+$>+$>+ ># >#Jp#Jp#gJ#9H#nd+^6+j8+qD$8,$|@$0,$0,$Yn#l1$=o#4l#Pc#Nx*gz#cC*+E**P*Kx*NB*zz*@*=/G#^G#ku*x*=y*=:*=c*=z*=A*=B*=C*=g*=)I#xB*|N*|N*,*=/v*j*=j*=Xv*TP#_z#8w#&8#&8#[o#[o#H0#r'$:I#^E#-f%$Q#LR#S0#^2#R7#R7#R7#Hc#&5#'2#+o#+o#+o#(l#/K#.5#Y4# 5#mV#}X#|X#|X#X_$&;%hD$hD$;t$;t$3[+3[+3[+!:#)E#+I#d8+W4#i0#C%=D*=E*=F*=WI$0e$Ul$T4#G*=Qc$=m+{k+Zn+IZ@.m+Kt+Sn+rp+rr+A@@P,+#a@ky+ky+6=@zD+B@@S.@B@@T.@=B+=B+x)+=>+T,@3G+2R+2R+_P+_P+*6$hX+YK+CD+R.+~V+{V+$>+`}+s)+Eg+%k+Z8@--+J2@uG+)3@fm+G4@^7@,m$@1%oB$oB$4c$Iu$xo$xo$+F$:V$xV#rQ$,O$G$Aw$Aw$% $$F$0i@0i@0i@0i@0i@}9@X4@T;@mI+km+:o+[R+%7@XH@|T@ZH@fK@ZM@]V+oI+nI+`M+3P#tI+tI+tI+tI+tI+tI+tI+tI+tI+@w+@w+@w+@w+tI+(t#uy#C`#C`#YA#9)$Lx#XA#yb#L,@pe#M)@a~@s<@-(@ry+ry+d^@-_#c&@!B+!B+z$+c&@s<@z$+s<@s<@c&@c&@c&@c&@G6@a$@b~@6T+6T+J@@J@@e^@e^@e^@J@@J@@6T+6T+L@+6Z+6Z+q8+d[+Qt+my+my+my+my+8&@t!%).$8#%]k#7&@Ve%Ve%pr&]k#X/$E+$E+$E+$E+$E+$,T@,T@!K@!K@>K@)K@)K@,K@,K@pZ@)I$lF$WL$WL$WL$lF$kF$kF$jF$jF$jF$jF$jF$jF$jF$jF$}|+i~+i~+y)+y)+y)+y)+y_$o=#,7$cZ.6]+>(@@r*~8*~8*o'@oK@E+@E+@DO#DO#22+>t*gD%*R#,Y*Tw*r*=>Q*rH*Vz*RB*Uq*&O*C3.s*=H*=|+=Te@YY S%&, &, ~h&{h&{h&{h&{h&{h&{h&{h&{h&*$@$(+T_+T_+T_+T_+G|@G|@G|@G|@G|@T_+T_+$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+T_+G|@G|@Kh+Kh+Kh+7P.7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+$(+$(+$(+T_+T_+G|@G|@G|@bH@bH@bH@bH@bH@bH@bH@bH@l7 }f.}f.}f.bH@bH@bH@bH@l7 }f.aH@Bz$Bz$aH@}f.l7 aH@aH@aH@aH@Bz$Bz$Bz$Bz$G|@Kh+Kh+G|@xc+xc+$(+G|@T_+Kh+7P.Kh+T_+$(+T_+Kh+aH@aH@aH@bH@bH@bH@bH@bH@}f.bH@bH@aH@bH@bH@}f.l7 Ea+xc+xc+$(+$(+xc+Ea+Ea+T_+$(+$(+xc+xc+Ea+", "/#&/#&/#&/#&/#&/#&/#&*o@*o@/#&/#&/#&/#&*o@*o@x5.x5.x5.x5.x5.x5.x5.x5.is@is@x5.x5.x5.O7.O7.O7.VW.VW.VW.VW.VW.VW.VW.VW.8v.8v.VW.9, 9, VW.8v.8v.#9.Hu+8v.VW.VW.8v.Hu+#9.VW.VW.8v.8v.8v.VW.9, G6.x5.x5.x5.x5.x5.x5.x5.x5.O7.is@Vh.is@O7.xX%O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%O7.is@is@O7._r+xX%xX%xX%xX%O7.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+_r+_r+_r+_r+_r+_r+_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%#9.#9.PI.PI.PI.PI.#9.#9.PI.PI.PI.PI.PI.PI.PI.PI.#9.#9.#9.#9.#9.#9.#9.#9.PI.PI.PI.PI.#9.#9.#9.#9.#9.#9.#9.#9.cp.cp.[3+[3+|5+|5+|5+|5+|5+|5+|5+|5+{t.{t.(s.(s.ym.(s.(s.aq.aq.aq.aq.aq.aq.aq.aq.aq.(s.ym.ym.ym.ym.(s.aq.{t.aq.(s.(s.(s.(s.aq.j}+j}+ph#{b+21.21.aq.(s.{t.l#@cp.cp.91+QI.QI.$;&Ay.Ay.0R##0*4I%xX%xX%PP*= @n4*n4*h1*k%=%'+82 n*@J' ='+(8 ]X@}'%z1 B0% d.r2%kb@f(*,^.TD.TD.Q%=w}*q1@;t@'>+SU#yF@SU#<-+BM#@ ++B$@ +@ +ZR#5h#2=$`a$ZX.Z]$5h#D)+W_#@ +|0#k %Fs%Fs%/a$/a$)]$)]$(a$(a$(a$(a$!U#!U#!U#!U#Tj$Tj$Tj$Tj$Sj$=c$Hs$Hs$nw$Ms$Gs$-J$8F$Bj$5d$5d$-c$-c$Dj$Dj$Dj$Dj$a9$a9$b9$b9$b9$a9$Ms$%u$5F$%u$>b$>b$=c$5F$%u$%u$%u$%u$%u$%u$%u$%u$^m$^m$^m$Dj$Dj$_a$_a$_a$@d$_a$Dj$^m$^m$^m$^m$2h$Jc&yU#]N#nZ@5$@2 @8G+cB@^K@^K@^K@8$@H@@H@@H@@^^#5G+5G+5G+2 @2 @YK+YK+YK+)K@)K@)K@)K@)K@)K@)K@)K@YK+YK+YK+YK+YK+YK+YK+YK+YK+2 @2 @5G+5G+2 @2 @:P+dX+4:**B+xI+,B+K)@0=@a=@0&@0=@9=@mq@Tm#F@@CO@5Z+/H$kF$kF$kF$kF$kF$5($5($bq$ow$cN$Ej$cN$hU$qw$Vt+]=#z;@5]++@#9V@4]+Q2@am@MK+3~@U.+U.+F,+f)+f)+!7@6~+$>+$>+$>+ ># >#Jp#Jp#1P#3f#Jb+^6+j8+F_$E_$E7#(O#x<%m1$OR#fi#gi#Pc#Tf%zr*bs*{I#yF*NB*0z*$T*'u#I*=}E#rw#J*=K*=L*=M*=N*=O*=P*=Q*=R*=S*=xB*$N*T*=,*=V&=SN*SN*U*=Xv*_E#Ut#:z#:z#:2#gV#}5#*8#`P#/2#-f%cN*-f%$Q#V7#|G#:o#|5#&5#Fc#[l#%K#+o#Cf#>2#bV#`4#e@$e@$e0$e0$f@$S[$Y_$X_$/$%sv$tv$tv$tv$tv$tv$g8+)E#f8+d8+>f+ K#9[+6r#V*=W*=Co#`b$)i#qi+X*=T4#:k+&m+Zn+IZ@.m+Kt+Tn+np+rr+A@@P,+mX+zD+ky+6=@zD+B@@S.@B@@B@@3R+3R+>T@{-+:P+3G+2R+2R+_P+_P+*6$_P+YK+CD+R.+51@,G+$>+,-+Tl+R3+Pl+I,++>+uG+#1@>j&z;$z;$^7@!3@!3@K2&gn$>q$>q$Sp$Sp$:V$!x$rQ$rQ$,O$G$Aw$Aw$V=&V=&*L$*L$=L$xe@xe@we@we@we@we@/a@'P+)P+!G+er+]V+ZM@%7@%7@kg@qe@4k@rI+oI+nI+/P+uy#tI+OK+OK+OK+OK+OK+OK+OK++w++w+(T+ay+}R+7X+3k#ab%C`#YA#YA#YA#Lx#XA#pe#yb#3L#pe#z$+G6@b&@ry+ry+d^@G6@s<@!B+!B+s<@G6@G6@c&@G6@G6@c&@c&@c&@c&@s<@-(@b~@6T+6T+J@@J@@e^@e^@e^@L@+L@+L@+L@+6Z+6Z+6Z+6Z+_|+Qt+my+my+_w+_w+8V@8&@/t#8#%7&@8#%J.%K.%Ve%8#%6&@mq@mq@mq@mq@mq@x;@x;@w;@w;@YK+>K@>K@)K@)K@zM@gm$:/%:/%:/%2#%J$>M$>M$>M$>M$>M$>M$>M$I$+|T+nq@y)+y)+y)+y_$S,+S,+o=#,7$cZ.yg%Ux%@r*~8*`|@o'@oK@E+@#N@5T@5T@U^@>t*gD%*R#9Y*,v*r*=fS*6H*Vz*nz*Y*=AO*6O*Z*=m&=`*=iX be+a=+X`+{t.CI#CI#zy.j(#j(#qK#1p%+X+)p#$x+ps+ps+mq+@d+Xw&Xw&O4%O4%`E&`b&*$@$(+$(+$(+T_+G|@Kh+7P.7P.7P.7P.7P.7P.7P.7P.7P.Kh+Kh+G|@G|@G|@G|@T_+T_+oh.oh.oh.oh.oh.oh.oh.oh.7P.Kh+G|@G|@G|@G|@Kh+7P.y4&7P.G|@G|@Kh+Kh+T_+xc+Kh+Kh+Kh+Kh+Kh+7P.7P.7P.Kh+Kh+G|@G|@G|@G|@T_+|m.>S%)A& ==+y&.y&.==.==%z&+y&+y&+y&+y&+y&+y&+y&>S%/{ G|@G|@T_+T_+T_+T_+T_+G|@G|@G|@G|@T_+T_+T_+$(+Kh+Kh+Kh+Kh+G|@G|@G|@G|@oh.7P.7P.7P.Kh+G|@G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+$(+$(+T_+T_+G|@G|@G|@Kh+Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$aH@aH@bH@bH@}f.}f.bH@aH@aH@aH@aH@bH@}f.l7 l7 }f.bH@aH@Bz$Bz$9g.$(+G|@Kh+T_+xc+Ea+xc+T_+xc+T_+Kh+G|@T_+$(+G|@7P.bH@bH@aH@aH@aH@aH@Bz$Bz$Bz$aH@bH@}f.l7 l7 l7 l7 T_+$(+$(+xc+xc+$(+T_+T_+G|@T_+T_+T_+$(+$(+", "/#&/#&/#&/#&/#&/#&/#&^#&*o@Jc@b #b #Jc@*o@^#&x5.x5.x5.x5.x5.x5.x5.x5.is@is@x5.x5.x5.O7.O7.O7.VW.VW.VW.VW.VW.VW.VW.VW.8v.VW.VW.VW.VW.VW.VW.8v.Hu+Hu+VW.VW.VW.VW.Hu+Hu+Hu+Hu+8v.8v.VW.9, 9, G6.x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@x5.O7.xX%xX%xX%x5.x5.x5.x5.x5.x5.x5.x5.x5.O7.xX%x5.Vh.Vh.x5._r+xX%xX%xX%xX%O7.O7.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+_r+_r+_r+_r+_r+_r+_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%cp.#9.Hu+8v.8v.Hu+#9.cp.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.8v.8v.Hu+Hu+PI.#9.#9.cp.PI.PI.PI.#9.#9.cp.cp.cp.|5+|5+|5+|5+|5+|5+|5+|5+j}+{t.aq.(s.(s.ym.ym.ym.ym.ym.ym.ym.ym.ym.ym.ym.(s.(s.ym.ym.(s.aq.{t.j}+j}+{t.{t.aq.aq.aq.{t.j}+ZT#{b+)W+)W+aq.aq.j}+$9.[3+cp.QI.QI.$;&$;&Ay.Ay.#0*#0*$;&xX%xX%= @= @OS*oP*>&=M{+bo@p, YW /@@(t+u9+]X@z1 2'% d.$^%r2%kb@f(*,^.TD.TD.Q%=w}*q1@;t@%a@yF@SU#SU#<-+BM#W_#@ +W_#W_#5h#j|#~($2=$`a$ZR#j|#D)+D)+W_#+*+|0#/a$/a$/a$/a$)]$)]$(a$(a$(a$(a$Wk$Wk$Wk$Wk$ar$ar$ar$ar$Sj$=c$Hs$Hs$nw$Ms$Gs$-J$Cj$5d$5d$)g$-c$S5+_a$_a$Dj$Dj$a9$a9$b9$b9$b9$a9$Ms$%u$5F$%u$>b$>b$=c$5F$=c$=c$=c$=c$=c$=c$=c$=c$Dj$Dj$Dj$Dj$Dj$Dj$Dj$Dj$@d$_a$_a$Dj$^m$^m$^m$Jc&Jc&GS#^N#nZ@gX+2 @8G+cB@^K@^K@8$@8$@I@@+:$+:$+:$8G+5G+5G+2 @2 @YK+YK+YK+)K@)K@)K@)K@)K@)K@)K@)K@YK+YK+YK+YK+YK+YK+YK+YK+YK+2 @2 @5G+5G+2 @2 @:P+dX+4:**B+xI+,B+K)@0=@a=@0=@0=@9=@k#$Tm#CO@CO@5Z+/H$kF$kF$kF$kF$kF$5($5($b8$b9$a9$,p$cN$hU$&6$[k+/K*mK@*@3~@qE%U.+F,+f)+f)+f)+!7@6~+$>+$>+$>+ ># >#Jp#Jp#eY#LU#K0+^6+ 4+F_$>>$v0#U!%/C#&o#)}#}l#Jf#Tf%Tf%'w*OB*2F*2F*pB*pB*$T*+=='D*#$=)I#J*=@==#==$==%==&==*=====R*=S*=%A*T*=-==;==1X*SN*TT*U*=U*=VI*Ut#_E#_z#X`#.r#*8#*s*/2#BV$Wf%fs%-f%-f%Kc#R0#R7#=8#%5#%5#%K#%K#:l#'2#,2#==,=='==ex$Wg+dx$)i#`b$:k+&m+IZ@IZ@.m+.m+Tn+np+wD+S.@P,+mX+zD+zD+< @ky+B@@S.@B@@B@@Gn+Gn+hX@{-+:P+3G+gX+gX+hX+hX+*6$_P+YK++:$}a@X}+lI+T&+,-+Eg+: @Ql++>+D4@AT##1@x|#G4@z;$^7@g9@C5%w^@I2@Y4@M<@Gt$cs$!x$+O$rQ$,O$,O$)O$iR$ 7@ 7@ 7@ 7@qR$EZ$tQ$^O$]O$p'%bP$aP$EZ$qR$qR$fc@fc@gc@gc@gc@gc@gc@gc@ye@xe@tB@DD@AF*AF*AF*@}#em$Wl+TR#TR#SR#SR#I#$I#$Y1#G2$f<$A:+9X#oV#$Z#`1#Ze$Aw$Aw$V=&j;&',&',&AF*DD@og@og@og@og@og@og@6m@!G+!P+!P+gp+Ht+rI+4k@4k@jg@qI+pI+ZM+dr+K@>K@5Z+0q$sr$sr$sr$2#%J$>M$>M$>M$>M$>M$>M$>M$I$+u_%fX@fX@nq@y_$S,+S,+;>+,7$,7$U+$yg%Ux%@r*`|@`|@IK#/-@#N@#N@5T@5T@U^@>t*Y*Kv%bv*r*=!S*$H*RB*3A*Y*=)==Z&=;`*MR*Rc&x@ $(+-&=ME+bv#w{@CI#{S*b,+j(#qK#1p%+X+)p#$x+ps+ps+mq+@d+Be+Be+#u%#u%3]&B#@*$@xc+Ea+Ea+xc+G|@7P.y4&y4&y4&y4&y4&y4&y4&y4&y4&7P.7P.Kh+G|@G|@T_+$(+$(+7P.7P.7P.7P.7P.7P.7P.7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+7P.]@+oh.G|@T_+G|@Kh+Kh+G|@T_+G|@G|@Kh+7P.7P.oh.oh.7P.7P.Kh+G|@G|@T_+$(+*$@>S%)A&)A&+y&+y& == ==+y&+y&+y&+y&+y&+y&+y&+y&>S%h~ Kh+Kh+G|@T_+T_+$(+$(+G|@G|@G|@G|@G|@G|@T_+T_+iS.iS.iS.y4&oh.7P.7P.7P.7P.7P.7P.Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+G|@G|@G|@Kh+Kh+Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$9g.9g.9g.Bz$Bz$aH@aH@aH@bH@aH@aH@aH@aH@aH@aH@bH@l7 }f.}f.}f.bH@bH@aH@aH@xc+T_+G|@T_+xc+5A.Ea+xc+Ea+$(+G|@G|@$(+$(+G|@7P.}f.bH@bH@aH@Bz$Bz$9g.9g.9g.aH@}f.cI+NM+cI+l7 }f.G|@T_+xc+xc+xc+$(+G|@7P.G|@G|@G|@G|@G|@G|@", "/#&/#&/#&/#&/#&/#&/#&*o@/#&b #V^$V^$b #/#&*o@x5.x5.x5.x5.x5.x5.x5.x5.is@is@x5.x5.x5.O7.O7.O7.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.8v.8v.VW.VW.VW.VW.VW.9, 9, 9, 9, VW.VW.Hu+Hu+8v.VW.VW.9, 9, 9, O7.O7.O7.O7.O7.O7.O7.O7.Vh.is@x5.x5.x5.O7.xX%_r+x5.x5.x5.x5.x5.x5.x5.x5.x5.O7.xX%x5.Vh.Vh.x5._r+O7.O7.O7.O7.xX%xX%xX%xX%x5.x5.x5.x5.x5.x5.x5.x5.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+_r+_r+_r+_r+_r+_r+_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%cp.PI.Hu+VW.VW.Hu+PI.cp.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.8v.8v.Hu+Hu+PI.#9.#9.cp.PI.PI.PI.#9.#9.cp.cp.cp.[3+[3+[3+[3+[3+[3+[3+[3+{t.{t.{t.aq.aq.(s.ym.bv#ym.ym.ym.ym.ym.ym.ym.ym.(s.(s.ym.ym.(s.aq.{t.j}+l#@j}+{t.aq.aq.aq.aq.{t.ZT#{b+)W+)W+aq.aq.j}+$9.|5+[3+QI.$;&4I%$;&6R@6R@`7�*$;&_r+_r+= @= @Q|*OS*L%=M{+6z@82 oO+W]@(t+O0 Ac+z1 2'% d.$^%TD*Q(@f(*,^.TD.TD.Q%=w}*q1@;t@[c@yF@SU#cq$BM#K6@W_#W_#W_#W_#5h#j|#~($2=$`a$ZR#j|#D)+D)+W_#+*+|0#/a$/a$/a$/a$)]$)]$(a$(a$(a$(a$Wk$Wk$Wk$Wk$ar$ar$ar$ar$Sj$=c$Hs$Hs$nw$Ms$Gs$-J$Cj$5d$5d$)g$-c$S5+_a$_a$Dj$Dj$a9$a9$b9$b9$b9$a9$Ms$%u$5F$%u$>b$>b$=c$5F$=c$=c$=c$=c$=c$=c$=c$=c$Dj$Dj$Dj$Dj$Dj$Dj$Dj$Dj$_a$_a$_a$_a$Dj$^m$^m$mw$-b&GS#^N#{^#gX+2 @8G+cB@^K@^K@9$@8$@I@@<^#<^#+:$8G+5G+5G+2 @2 @YK+YK+YK+>K@>K@>K@>K@>K@>K@>K@>K@YK+YK+YK+YK+YK+YK+YK+YK+YK+2 @2 @5G+5G+2 @2 @:P+dX+4:**B+xI+,B+K)@0=@a=@0=@0=@m5$k#$X/$CO@'K@zM@/H$kF$kF$kF$kF$kF$5($5($37$_8$,p$,p$cN$hU$qw$l9@bi%Q2@4]+ib#ib#> +Yv+Ee@qE%U.+F,+2a@f)+f)+9N#_&@6~+$>+$>+$>+ ># >#Jp#Jp#eY#LU#K0+^6+ 4+F_$>>$v0#U!%/C#)}#Z+=~}#8L*Tf%Uf%mA*OB*2F*2F*pB*0z*%Y*!==^z*G#=)I#~=={==]==%v*B*=^==/==(==_==;*=%A*T*=)+=;==%B*TT*4W*- =- =^y*2#=!D*Ut#-l%-l%i.%5A*S0#CA*5A*BA*Wf%cN*Wt%Kc#V7#R0#;5#;5#%K#%K#[l#*5#TL#+3G+gX+fX+vp#hX+*6$}{#R)@ly+|a@Dt+W1+']+$k+R3+: @0d+K,+Tl$[!$AT#!r&F4@z;$g9@C5%48+%}@;]@fY#fY#yV#yV#+O$K@>K@5Z+0q$sr$sr$sr$2#%J$>M$>M$>M$>M$>M$>M$>M$I$+_P+BO@e'#1O#1O#y_$;>+;>+,7$@>#U+$yg%,5@Le@`|@`|@IK#/-@#N@#N@22+22+u(@pW$S%h~ 7P.Kh+Kh+G|@T_+T_+$(+G|@G|@G|@G|@G|@G|@Kh+Kh+y4&oh.oh.7P.7P.Kh+G|@G|@G|@G|@Kh+Kh+Kh+7P.7P.7P.G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+G|@G|@G|@Kh+Kh+Kh+Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$9g.9g.9g.>( Bz$aH@aH@aH@aH@aH@aH@Bz$aH@aH@bH@bH@}f.}f.}f.l7 Ea+$(+G|@G|@$(+Ea+Ea+Ea+5A.xc+T_+T_+$(+$(+G|@7P.}f.}f.bH@bH@aH@Bz$Bz$9g.Bz$bH@l7 NM+NM+cI+l7 }f.T_+$(+xc+Ea+xc+T_+Kh+7P.G|@G|@G|@G|@G|@Kh+", "/#&/#&/#&/#&/#&/#&/#&/#&Jc@Jc@b #b #Jc@Jc@/#&x5.x5.x5.x5.x5.x5.x5.x5.is@is@x5.x5.x5.O7.O7.O7.VW.VW.VW.VW.VW.VW.VW.VW.9, VW.8v.8v.8v.8v.VW.9, 9, 9, 9, 9, 9, 9, 9, 9, Hu+8v.VW.9, 9, 9, VW.8v.O7.O7.O7.O7.O7.O7.O7.O7.Vh.x5.O7.O7.x5.is@O7.xX%x5.x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%O7.is@is@O7._r+O7.O7.O7.O7.xX%xX%xX%xX%x5.x5.x5.x5.x5.x5.x5.x5.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+O7.O7.O7.O7.O7.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%PI.Hu+Hu+8v.8v.Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI.PI.#9.#9.#9.#9.#9.#9.#9.#9.PI.PI.PI.PI.#9.#9.#9.#9.#9.#9.#9.#9.cp.cp.[3+[3+[3+[3+[3+[3+[3+[3+[3+[3+(s.aq.aq.{t.aq.aq.ym.ym.ym.ym.ym.ym.ym.ym.ym.ym.(s.ym.ym.ym.ym.(s.aq.{t.{t.{t.aq.(s.(s.(s.aq.{t.ph#{b+21.21.aq.(s.{t.l#@|5+[3+QI.4I%4I%4I%6R@r3.`7&`7&$;&N7.N7.= @PP*Q|*K3.7*=M%=4==J2*M-@|a$='+>9 ee+2'%}'%fb% d.r2%Q(@f(*,^.TD.TD.Q%=w}*q1@;t@[c@yF@SU#OX.K6@K6@W_#W_#@ +@ +ZR#5h#2=$`a$ZX.Z]$5h#D)+W_#@ +|0#k %Fs%Fs%/a$/a$)]$)]$(a$(a$(a$(a$*c$*c$*c$*c$]m$]m$]m$]m$Sj$=c$Hs$Hs$nw$Ms$Gs$-J$8F$Bj$5d$5d$-c$-c$Dj$Dj$Dj$Dj$a9$a9$b9$b9$b9$a9$Ms$%u$5F$%u$>b$>b$=c$5F$=c$=c$=c$=c$=c$=c$=c$=c$_a$_a$_a$Dj$Dj$^m$^m$^m$Dj$_a$_a$_a$_a$Dj$^m$mw$-b&os$^N#{^#gX+2 @8G+cB@^K@^K@8&@9$@8$@8$@8$@CD+8G+5G+5G+2 @2 @YK+YK+YK+>K@>K@>K@>K@>K@>K@>K@>K@YK+YK+YK+YK+YK+YK+YK+YK+YK+2 @2 @5G+5G+2 @2 @:P+dX+4:**B+xI+,B+K)@0=@a=@a=@a=@m5$E+$X/$'K@'K@zM@/H$kF$kF$kF$kF$kF$5($5($bN#47$qw$,p$cN$hU$&6$>m+C)$X.+.@#;(@> +0i+De@3~@U.+U.+2a@2a@f)+f)+9N#_&@6~+$>+$>+$>+ ># >#Jp#Jp#1P#3f#Jb+^6+j8+F_$E_$1@$ (%x<%)}#Z+=Ze%Ze%Tf%{x*'w*OB*2F*yF*0z*=M*rP*5==.&=6==*C#7=={==#==8==9==^==/==0==a==b==Az*c==d=='+=%B*4W*4W*FA*FA*^y*[J*p+=!D*wB*7i%5A*BA*CA*Wf%5A*BA*CA*fs%Wt%Wt%Wt%Kc#;5#;5#[l#[l#*5#*5#,2#bV#Q`#. $. $G.$@Z$'J$VK$d,$S[$S[$Y_$KC$KC$<=%<=%<=%%2#2I#w'$Z3+QL#=2+p7#Qc$c}#e==@}&n@=]f+]f+U4#'d$[]+~k+IZ@IZ@.m+.m+mp+mr+vD+S.@$N+$N+3R+zD+< @W{@&B+~w+yD+yD+=B+3R+>T@{-+zI+[V+gX+fX+vp#hX+Z&+hF$R)@'_#{3@ w+%s+j)+8~+: @#_+zb+J,+K,+7)$[!$Zu$A;$G4@C5%&}@x=@;]@,:@fY#M<@{`#{`#)O$)O$'O$'O$'O$)O$pR${`# 7@yV#yV#yV# 7@ 7@EZ$EZ$qR$qR$qR${`#{`#{`#fc@0i@0i@0i@ye@ye@ye@ye@tB@tB@DD@AF*AF*AF*DD@kw$:1@Xl+ @# @#X1#X1#I#$I#$f($G2$c%%oV#nV#I.$h@$K>%3v$$u$c0$>c$e8$Pj$O{$w!$2t#W4@W4@W4@W4@+}#+}#v&@cr+T{@6X+!P+~G+Ht+rI+^P+pI+sI+sI+Gt+tI+OK+K,@K,@OK+OK+OK+OK+OK+OK+OK+OK+}R+}R+ay+(T+(T+(T+ay+}R+nD#YA#C`#59@4v#4v#pe#Kx#pe#M)@!B+G6@H6@b&@b&@)~#c&@s<@s<@G6@-_#-_#G6@s<@G6@G6@c&@c&@c&@c&@s<@-(@b~@6T+6T+J@@J@@e^@e^@e^@6T+6T+6T+6T+6T+6T+6T+L@+dp+K@>K@)K@)K@zM@gm$:/%:/%:/%2#%J$>M$>M$>M$>M$>M$>M$>M$I$+u_%fX@e'#e'#1O#1O#Rs@Rs@@>#@>#U+$yg%,5@Le@`|@`|@oK@;9*xs*xs*22+22+u(@pW$S%Bj.Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+7P.T_+$(+$(+$(+$(+xc+xc+xc+G|@G|@G|@Kh+7P.7P.7P.oh.T_+T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@Kh+Kh+7P.7P.Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$aH@aH@aH@Bz$9g.9g.9g.>( 9g.Bz$aH@aH@aH@aH@Bz$9g.9g.Bz$Bz$aH@bH@}f.l7 l7 Ea+T_+Kh+Kh+T_+xc+Ea+Ea+Ea+$(+T_+T_+xc+xc+$(+G|@}f.}f.}f.}f.bH@bH@bH@bH@l7 l7 cI+cI+cI+l7 l7 }f.xc+xc+Ea+xc+$(+T_+G|@Kh+T_+T_+T_+G|@G|@Kh+", "/#&/#&/#&/#&/#&/#&/#&/#&/#&*o@*o@*o@*o@/#&/#&x5.x5.x5.x5.x5.x5.x5.x5.is@is@x5.x5.x5.O7.O7.O7.VW.VW.VW.VW.VW.VW.VW.VW.9, VW.8v.Hu+Hu+8v.VW.9, 9, VW.VW.8v.8v.VW.VW.9, 8v.VW.9, 9, 9, VW.Hu+PI.O7.c+#c+#c+#c+#c+#c+#c+#~$+c+#PK.[M@~$+sN%~$+c+#x5.x5.x5.x5.x5.x5.x5.x5.xX%_r+_r+xX%x5.x5.xX%N7.x5.x5.O7.O7.xX%xX%_r+_r+O7.O7.O7.O7.O7.O7.O7.O7.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%8v.8v.Hu+PI.PI.Hu+8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+#9.#9.#9.#9.#9.#9.#9.#9.cp.cp.cp.cp.#9.#9.#9.#9.cp.cp.cp.[3+[3+[3+|5+|5+cp.cp.cp.cp.cp.cp.cp.cp.bv#ym.aq.{t.{t.{t.(s.(s.(s.(s.(s.(s.(s.(s.(s.(s.bv#bv#bv#6' bv#ym.(s.aq.(s.(s.ym.ym.ym.(s.aq.aq.{b+21.U/ 21.aq.(s.aq.{t.w7+[3+QI.4I%l=&4I%6R@r3. 8&`7&$;&N7.N7.= @PP*oP*k==7*=,&=Cd$l==M-@|a$Hd$ua.tY.8/.*7.AK%fb%r2%m==f(*,^.TD.TD.Q%=w}*q1@;t@9e@yF@cq$OX.K6@K6@W_#D)++B$+B$Z]$ZR#`a$ZX.1/%A1#ZR#W_#@ ++B$k %N@%0r$0r$/a$/a$)]$)]$(a$(a$(a$(a$*c$*c$*c$*c$]m$]m$]m$]m$Sj$=c$Hs$Hs$nw$Ms$Gs$-J$DP$j%%Bj$Bj$8F$Cj$^m$^m$Dj$Dj$a9$a9$b9$b9$b9$a9$Ms$%u$5F$%u$>b$>b$=c$5F$>b$>b$>b$>b$>b$>b$>b$>b$_a$_a$_a$Dj$Dj$^m$^m$^m$Dj$Dj$_a$@d$_a$Dj$5G$O[#-b&os$^N#{^#7V@5&@8G+cB@^K@8&@8&@8&@8&@9=@mq@x;@8G+5G+5G+2 @2 @YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+2 @2 @5G+5G+2 @2 @:P+dX+4:**B+xI+,B+K)@0=@a=@a=@a=@t!%E+$Y/$'K@'K@zM@/H$kF$kF$kF$kF$kF$5($5($37$_8$,p$,p$a9$cN$'2+2G$R@+; +c~@_/+Q@+W.+qE%qE%U.+U.+2a@2a@9N#9N#9N#_&@6~+$>+$>+$>+ ># >#Jp#Jp#gJ#9H#nd+^6+j8+qD$8,$P{$)$$@R$*o#Z+=Ze%Ze%Nx*n=='w*o%=yF**P*=M*o==p==nT*q==r==s==7==t==u==v==&==w==x==0==YB*xB*y==c==z==d#=qC*A==A==MB*MB*B==sX*dD*[J*TM*7B*{C*{z*EA*DA*C==#B*Wf%CA*%f%8M*Kc#Wt%;5#6l#5l#hi#*5#*5#fi#'2#b@$C!$. $. $@Z$@Z$VK$d,$g@$g@$X_$/$%/$%/$%sv$sv$1I#D0+#;$)6+.I#0[+Wg+'i#m@=D==b}#ex$]f+)i#E==PL#[]+!k+[w+[w++m++m+Xn+mr+)w+S.@$N+$N+3R+=B+< @c^@Pt+{w+%B+%B+zD+zD+x)+zI+zI+[V+gX+4Z+!k#hX+Z&+hF$x;@ED@z~@9y+$s+,-+8~+Fg+0d+&_+uk$)x$2r$7)$]p%A6@G4@C5%48+S;@;]@;]@M<@Y4@qR$qR$0S$0S$jQ$'O$'O$)O$pR$qR$ 7@yV#cs$cs$yV#yV#yV#yV#yV#yV# 7@ 7@ 7@{`#gc@gc@gc@fc@0i@0i@0i@ye@xe@tB@DD@DD@DD@DD@tB@9q$:1@Xl+ @# @#X1#X1#I#$I#$Z%$Z%$.2#c%%$Z#I.$S_$I.$U[$oW$V[$7|$e8$@}#2t#w!$@}#%3@%3@$3@$3@$3@$3@='@cr+T{@Jn+)P+!G+~G+oI+ZM+oI+ZM+sI+/P+(t#7X+:x@:x@(P+(P+(P+(P+(P+(P+(P+(P+Kl+PK+uI+uI+uI+uI+PK+}R+Y>$9)$C`#59@gh#4v#Kx#Kx#Vv#L,@!B+G6@a$@d^@d^@a$@gY#G6@c&@gY#-_#-_#c&@!B+s<@s<@c&@c&@c&@c&@G6@a$@b~@6T+6T+J@@J@@e^@e^@e^@K@@K@@e^@e^@J@@6T+6T+L@+dp+K@)K@)K@,K@,K@pZ@)I${J$J$>J$>J$>J$>J$>J$>J$jF$|T+nq@1O#e'#e'#e'#2O#B2$@>#@>#U+$yg%,5@Le@`|@`|@oK@;9*xs*xs*22+22+u(@]w*S% ==)A&Xw&Xw&%z&.y&Be+%z&%z&%z&%z&%z&%z&%z&{h&/{ G|@Kh+Kh+Kh+Kh+7P.7P.G|@G|@G|@Kh+Kh+7P.7P.7P.xc+xc+xc+$(+$(+$(+$(+T_+7P.7P.7P.Kh+Kh+Kh+G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@Kh+Kh+7P.7P.7P.bH@bH@bH@bH@bH@bH@bH@bH@Bz$Bz$Bz$Bz$aH@aH@aH@aH@>( 9g.aH@bH@bH@aH@9g.>( Bz$Bz$Bz$Bz$aH@aH@aH@aH@Ea+G|@oh.oh.Kh+$(+xc+xc+xc+T_+G|@T_+xc+Ea+xc+$(+}f.}f.}f.l7 l7 l7 l7 cI+13+ko.cI+l7 }f.}f.}f.}f.{! ]! Ea+xc+$(+T_+T_+T_+$(+$(+$(+T_+G|@G|@", "/#&/#&/#&/#&/#&/#&/#&/#&*o@Hf.S,%%j.dD.is@x5.x5.x5.x5.x5.x5.x5.x5.x5.is@is@x5.x5.x5.O7.O7.O7.VW.VW.VW.VW.VW.VW.VW.VW.G6.VW.8v.Hu+Hu+8v.VW.G6.8v.8v.Hu+Hu+Hu+Hu+8v.8v.VW.9, G6.G6.9, 8v.PI.N7.O7.c+#c+#c+#c+#c+#c+#c+#{$+[M@I1.[M@sN%1.&sN%c+#x5.x5.x5.x5.x5.x5.x5.x5.xX%N7.N7._r+O7.O7._r+M7.x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+is@is@is@is@is@is@is@is@xX%xX%xX%xX%xX%xX%xX%xX%9, 8v.Hu+#9.#9.Hu+8v.9, 8v.8v.8v.8v.8v.8v.8v.8v.#9.#9.#9.#9.#9.#9.#9.#9.|5+|5+[3+[3+cp.#9.#9.PI.cp.[3+[3+[3+|5+|5+w7+w7+cp.cp.cp.cp.cp.cp.cp.cp.6' bv#(s.{t.j}+{t.aq.aq.aq.aq.aq.aq.aq.aq.aq.aq.bv#6' 6' 6' 6' bv#ym.(s.ym.bv#bv#bv#bv#(s.aq.{t.{t.U/ $9.j}+(s.ym.(s.aq.w7+[3+QI.l=&l=&4I%QI.s[.^q%`d#$;&M7.M7.qt+PP*ak*I==CK*k%=kV*J==kO+K==Lo+,9 L==8/.1'%6{+=7#r2%m==f(*,^.TD.TD.Q%=w}*q1@+x@^i@#R$<-+K6@4)#K6@W_#D)+3)#+B$A1#Z]$89$}7$lS$C/%@ +@ ++B$k %N@%ns$0r$&W#/a$)]$)]$)]$(a$(a$(a$(a$*c$*c$*c$*c$]m$]m$]m$]m$Sj$=c$%u$%u$nw$Ms$Hs$-J$>N$I@%j%%j%%8F$8F$5G$^m$Dj$Dj$a9$a9$b9$b9$b9$a9$Ms$%u$5F$%u$>b$>b$=c$5F$>b$>b$>b$>b$>b$>b$>b$>b$@d$_a$_a$Dj$Dj$^m$^m$5G$^m$Dj$_a$@d$,p$a9$sS$S@%Jc&GS#^N#{^#7V@5&@5G+8G+8$@^K@^K@mq@mq@k#$E+$,T@8G+5G+5G+2 @2 @YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+YK+R)@R)@8G+8G+R)@R)@Q,+< @~k#*B+xI+mX+#a@O)@t<@t<@P)@E+$,T@,_$'K@AM@pZ@kF$5($!H$5($5($5($5($_8$_8$b8$b8$,p$b9$b8$8~#XO@f>$.@#_/+lK@K_@3~@hV+ -+U.+F,+F,+f)+!7@_&@_&@_&@$>+$>+$>+$>+ ># >#Jp#Jp#5v#|/#dx$+*$j8+$`$Fb+AC$rf#pA*`D*oi#Ze%fY*Nx*_A*Pz*nR**P**P*o==*M*tM*IZ*;*==C#*C#~==pQ*M==N==O==P==Q==R==bz#>u#y==S=='+=d#=qC*A==A==FA*FA*B==[J*[J*B.$C.$C.$tC*{C*5A*EA*/L*XK*8M*~z*9v*nA*Jc#Rc#6l#5l#hi#gi#fi#fi#$X_$]>$/$%%2##;$T%$}T#,6+W4#~|+Vg+qi+p*=bd%ex$Qc$bd%)i#!F*Kb+-2+!k+&m+[w+[w++m+tp+Wn+)w+S.@:@>:@>:@Y4@4}@fY#qR$qR$pR$0S$0S$0S$)O$0i@3}@11@0X#io@io@io@io@Sl$AM$Ld$7m@_a@6k@6k@gc@5l$;/+Qi$=Z#!E$$ $#F$V[$xe@e8$tB@e9$DD@e8$xe@'.$Wl+Wl+ @#TR#X1#SR#I#$//$uT# 2#.2#K>%K>%h@$7X#nV#=Z#wT#oW$7|$9q$@}#2t#w!$%3@%3@$3@$3@$3@$3@_1@-]@~G+fp+lm+lm+km+er+]V+^P+]V+oI+sI+/P+uy#3P#eh#eh#OK+OK+tI+OK+OK+OK+OK+OK+(T+(T++w++w+(T+PK+}R+OK+Y>$nD#C`#gh#gh#pe#Kx#G6@W<#Ox#tW#6~#X<#kc@om+y$+-_#gY#G6@gY#u!$-_#s<@a~@z$+z$+s<@c&@c&@a$@gY#H6@6T+6T+6T+J@@J@@e^@e^@e^@0&@0&@Z.@K@@e^@J@@6T+L@+&N+my+4 @O)@O)@t<@r!%T==]k#s!%s!%'~%8#%/t#J.%8#%mq@mq@mq@mq@mq@x;@x;@R)@]K@)K@)K@,K@,K@[H#[H#&&#jF$ K$ K${J$J$>J$>J$>J$>J$>J$>J$jF$v,$y)+1O#e'#e'#oZ@N+#N+#,7$@>#U+$yg%,5@Le@`|@`|@oK@;9*xs*xs*22+U^@i<#]w*JN*rA*U==s4*0g*yG*V==W==`I*Z}.X==Y==@P*Z==`==.# 3<@QU+6' DI#bp.b,+S`%bQ#(W%1p%Hc%gJ%fJ%lx@@d+@d+O4%`E&#d+#d+)<*)<*)m*Ib#/{ Kh+oh.y4&oh.7P.G|@T_+T_+T_+T_+T_+T_+T_+T_+T_+$(+u]#T_+G|@G|@Kh+7P.7P.T_+T_+T_+T_+T_+T_+T_+T_+xc+$(+T_+G|@G|@T_+$(+xc+T_+$(+xc+$(+G|@Kh+T_+xc+oh.oh.7P.7P.Kh+G|@G|@T_+$(+$(+T_+G|@G|@Kh+7P.h~ {h&Av&.==~h&+y&0, )A&%' %z&{h&%z&{h&%z&{h&%z&{h&|m.G|@G|@Kh+7P.7P.oh.oh.G|@G|@G|@Kh+7P.7P.oh.oh.T_+G|@G|@Kh+7P.7P.oh.oh.iS.y4&oh.7P.Kh+T_+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@Kh+Kh+Kh+7P.7P.7P.bH@bH@bH@bH@bH@bH@bH@bH@l}+>( 9g.Bz$bH@}f.l7 cI+>( 9g.aH@bH@bH@aH@9g.>( bH@aH@aH@Bz$9g.9g.>( >( xc+G|@y4&y4&7P.T_+$(+$(+$(+T_+G|@T_+Ea+5A.Ea+xc+}f.}f.l7 l7 cI+NM+NM+ko.=L @$+NM+}f.bH@bH@}f.}f.8g.{! 5A.$(+T_+T_+$(+xc+xc+xc+$(+$(+T_+G|@", "EY#}7.}7.*o@*o@^#&Hf.is@O7.xX%O7.[{.Tw@8'%+YJ#D#$Vk$Vk$RA$RA$L[#jm$jm$jm$CO#CO#*I$*I$ar$ar$ar$]m$ln$ln$CO#CO#CO#]m$Tj$]m$6F$-N$6F$=c$5d$5d$5d$)g$-c$S5+_a$_a$^m$^m$cN$a9$b9$b8$b8$Ej$Ms$nw$Hs$Hs$Hs$Hs$nw$Ms$=J$=J$Hs$Hs$nw$Ms$Ms$Rj$Sj$Sj$Sj$Sj$Rj$Rj$Rj$Rj$a8$a8$a8$a8$;u$;u$;u$b9$lw$^N#^N#yA#nZ@fX+5$@5$@w;@w;@DD+DD+DD+k#$k#$DD+Q,+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+-K@5G+YK+)K@,K@)K@!K@w;@w;@x;@cB@cB@x;@,T@|#%R1#zD+*B+*B+*B+zD+zD+lX+lX+#o/#UA#oD#gJ#bd%dx$md+I0+ 4+o'$'/$.-=ni#nV*(r*oV*'w*EA*ix*^N*+-=+-='K*o==3P*9z#@-=eC*#-=$-=%-=&-=*-==-=--=;-=>-=,-='-=yB*,+=iJ*6Q*6Q*4W*4W*- =- =sC*T`#2#=Ut#-l%-l%bz*bz*i.%$A*}#7T#^b$U%$CC$qD$gw$A7#Hy#y7#OF*{f+Vg+{_+^f+3f#LU#(6+gi+_k+_k+{/+:k+RO@X+$`n+wV$-w+#B+fz@jb#;I$S##T###a@%B+bX+bX+3R+~-+<|+&n%~K@GO$lF$~l$Qj$L1#<{#1z@U+$C,+D,+Yv++k+Dt+G)@l;@0x@;:@0X##w$$w$$w$#w$.O$iR$!O$)O$.O$cs$cs$Y4@fY#|T@`H@XH@|T@19@{`# 7@.O$7m@^]+^]+^]+^]+=/+=/+=/+=/+xd%>/+8g$8g$8g$;/+K@5$@jX+jX+E@@8e#lF$hm$tr$WL$jF$I$+iF$kF$I$+I$+I$+iF$iF$jF$jF$jF$v,$y)+y)+y)+S,+S,+S,+;>+^-+^-+U+$~8*P{@!-=2~@~-=xs*;t*sw*;t*@/%@/%>t*Sw*fD*WO*E%&UC*{-=D =lh*]-=JJ*mN*gR*^-=/-=yB P. O9.(-={4%av#j(#j(#u4.+9.=Z+Gu+j4@EI#vC#_($1<#X`+Nc&u3$>S%>n.>n.B#@'W+'W+B#@h~ oh.iS.]@+w5&]@+iS.y4&Kh+Kh+Kh+Kh+Kh+7P.7P.7P.23+FG*23+US+US+US+';$';$Kh+G|@q9+jy.jy.q9+Ai.1m.G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+Kh+G|@G|@T_+$(+$(+xc+xc+Kh+7P.oh.Kh+xc+5A.5A.Ea+zi.zi.~h&zi.~h&zi.~h&zi.>S%nh.>S%nh.>S%nh.>S%nh.G|@7P.Kh+Ea+Ea+Kh+7P.G|@oh.oh.oh.oh.oh.oh.oh.oh.Kh+Kh+Kh+Kh+Kh+T_+$(+xc+T_+$(+xc+xc+xc+T_+G|@7P.q9+q9+jy.jy.q9+dl.1m.1m.q9+dl.1m.8Y+8Y+1m.dl.q9+T_+G|@G|@G|@G|@G|@Kh+Kh+G|@xc+$(+7P.y4&Kh+7P.]@+y4&7P.G|@$(+$(+$(+T_+G|@T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@T_+$(+$(+xc+xc+xc+xc+$(+$(+T_+G|@G|@Kh+cI+}f.bH@}f.cI+cI+l7 bH@aH@}f.l7 }f.aH@aH@bH@l7 Ea+Ea+xc+xc+$(+$(+$(+T_+$(+]! ]! xc+xc+{! ", "EY#EY#}7./#&*o@*o@^#&is@x5.+4[%D#$Vk$Vk$RA$RA$*c$*c$*c$jm$ln$ln$CO#CO#ar$ar$ar$]m$ln$ln$ln$CO#*I$ln$ar$]m$>H$Ix$*I$ln$5d$5d$5d$)g$-c$S5+_a$_a$^m$^m$cN$a9$b9$b8$b8$Ej$a8$nw$nw$Hs$Hs$nw$nw$Ms$nw$nw$nw$nw$Ms$Ms$Ms$Ms$Sj$Sj$Sj$Sj$Rj$Rj$Rj$Rj$a8$a8$;u$;u$;u$;u$Ls$b9$9-%yU#S[#]N#nZ@7V@gX+2R+YK+YK+w;@w;@DD+DD+k#$DD+Q,+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+5G+2 @YK+>K@>K@>K@!K@!K@,T@DD+mq@mq@mq@k#$A%%zU$=B+xI+xI+xI+1G+1G+x)+x)+zI+zI+5&@4G+XK+XK+}{#pw$bv$@6$`H%17$4($bv$%6$Bb#47$_8$vp#vp#u_%S@+em@:/+Gq@h9@h9@8a@7a@S{@U}+V}+Q.@TA+[-=Y;+n0+o8+$>+T&+)]+Zg+/f+/f+Zl+.>#o/##<$oD#oD#bd%dx$ze$md+ 4+0_%)/$}-=BT*|-=1-=mZ*yz*{z*U`#U`#'K*fE*Kx*FD*3E#2-=TU*3-=$-=4-=5-=iu*6-=7-=8-=9-=aB*0-==u#a-=iy*z%=6Q*GE*TT*TT*- =rX*T`#T`#Ut#Ut#0@$0@$i.%i.%i.%TX*_+>_+>_+z:+A:+A:+.2#.2#<$$<$$ 2# :$6|$H2$'_+vT#f8$;6$g8$x:+Jg+B4%=_+*f+=_+pF$(/$g($uT#uT#.2#Ai$1X#7X#Bd%g,% $7X#SG$fc@0i@0i@ye@|9@|9@t*:u*QB*aG*5H*_I*!5*d-=lh* J> J> J> J> J> J> J> nh.nh.nh.nh.nh.nh.nh.nh.T_+Kh+G|@Ea+Ea+G|@Kh+T_+7P.7P.7P.7P.7P.7P.7P.7P.G|@Kh+Kh+7P.Kh+G|@T_+T_+G|@T_+$(+xc+$(+T_+Kh+7P.dl.dl.q9+q9+dl.Ai.1m.8Y+q9+dl.1m.8Y+8Y+1m.dl.q9+G|@G|@G|@T_+T_+T_+T_+T_+T_+Ea+Ea+G|@G|@xc+xc+Kh+7P.Kh+G|@T_+T_+T_+G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+oh.oh.7P.Kh+G|@T_+$(+$(+$(+$(+$(+T_+T_+T_+T_+T_+l7 bH@aH@bH@l7 cI+}f.aH@aH@}f.l7 }f.aH@aH@bH@l7 xc+xc+$(+$(+$(+T_+T_+T_+G|@xc+Ea+T_+T_+5A.", "Vb@Vb@Vb@/#&*o@*o@*o@Vh.x5.F6.F6.[{.Tw@ZL.F6.Tw@Vh.Vh.Vh.Vh.Vh.Vh.Vh.O7.O7.O7.O7.O7.O7.O7.O7.Vh.Vh.Vh.is@is@x5.x5.x5.Vh.is@x5.is@dD.dD.is@xX%O7.O7.O7.x5.x5.x5.is@is@x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5._r+_r+_r+_r+_r+_r+_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%F6.F6.F6.F6.F6.F6.F6.F6.[{.[{.[{.8'%8'%8'%8'%8'%xX%xX%xX%xX%xX%xX%xX%xX%xX%_r+_r+xX%is@is@O7._r+xX%xX%xX%xX%xX%xX%xX%xX%N7._r+xX%xX%xX%xX%_r+N7.O7._r+M7.N7.xX%O7.xX%N7._r+_r+_r+_r+_r+_r+_r+_r+[3+#9.PI.PI.cp.cp.#9.Hu+PI.PI.#9.#9.#9.#9.cp.cp.%0+M7.N7.N7.N7.N7.M7.%0+N7.N7.M7.M7.M7.%0+%0+%0+M7.M7.%0+%0+$B#$B#@9.@9.)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%@9.@9.@9.@9.@9.@9.@9.@9.eO@$B#N7.N7.%0+@9.$B#%0+@9.@9.@9.$B#%0+M7.M7.M7.N7.N7.N7.N7.N7.N7.N7.N7.j% x% PI.N7.N7.L7.o4@XO+B.@q&=i-=8z+_M+4M+N, $D+_i <-=a(.*7.=7#b[%j-=,2%re$cK&W'*V)*w}*k%+:B@`|#V,+ue#ue#W0+D)+@ +W_#D)+B%%B%%A0%km$km$km$sD$&c$.*+:-+4[%=7$=7$Vk$L[#L[#Wk$Wk$Wk$Wk$]m$]m$ln$ln$ar$ar$]m$]m$]m$ln$ln$ln$*I$ln$ln$CO#>H$Ix$>H$*I$5d$5d$5d$)g$-c$S5+_a$_a$^m$^m$cN$a9$b9$b8$b8$Ej$a8$Ms$nw$Hs$Hs$nw$Ms$Ms$Rj$Rj$Rj$Rj$Ms$Ms$Ms$Ms$Sj$Tj$Sj$Sj$Sj$Sj$Rj$Rj$,H$,H$,H$,H$Js$Js$Js$bq$Vx$Q[#R[#]N#nZ@7V@2R+CI+YK+YK+w;@w;@DD+DD+k#$DD+Q,+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+YK+YK+2 @2 @YK+YK+!K@]K@fm$,T@k#$mq@mq@mq@k#$R,@3R+C@@C@@C@@AD+AD+>T@>T@{-+zI+5&@4G+5Z+5Z+iX+5($4($17$%K$%K$%K$4($_8$47$5($hX+hX+_P+->++@#em@x'##o/##<$oD#oD#bd%dx$ze$md+ 4+0_%b4%l-=dH*RF*ZC*m-=3`*tC*U`#U`#Kx*]N*FD*; =3E#tw#a==$-=$-=4-=n-=o-=p-=q-=r-=/u*s-==u#t-=/W*t`*A==6Q*GE*TT*TT*rX*rX*VI*VI*Ut#Ut#0@$0@$i.%i.%i.%i.%8M*nA*Mu*Nu*K0#Qc#Ff#M&=5l#4l#=o#m1$j(%nd$_K#,}#(K#bV#[X#n1$n1$[X#bV#/K#bV#bV#(@Ux%Ux%yg%H5$Q1+1z@E+@#N@xs*#N@{=#{=#;`+rn*e=&]D*#H*^E*!5*pE*A6*b-@v-=|%%}I*w-=z<&x-=O_ mq+y-=:m%ns#zI*t4.u4.,X@iM#j4@EI#@u%vC#zM+1<#X`+X`+u3$X@$`b&`b&B#@B#@B#@Bj.*$@T_+G|@Kh+Kh+Kh+Kh+G|@7P.Kh+Kh+Kh+Kh+Kh+Kh+US+23+FG*pK+pK+';$';$';$d #G|@G|@1m.1m.1m.1m.Di*Ai.Ai.G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+T_+T_+T_+T_+T_+G|@G|@G|@5A.xc+T_+G|@T_+T_+7P.y4&J> {h&{h&{h&{h&{h&{h&{h&{h&{h&{h&{h&{h&{h&{h&J> $(+Kh+G|@Ea+Ea+G|@Kh+$(+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@Kh+7P.7P.7P.Kh+Kh+G|@T_+T_+T_+T_+G|@Kh+7P.1m.Ai.Ai.dl.Ai.1m.8Y+8Y+dl.Ai.Ai.1m.1m.Ai.Ai.dl.G|@G|@T_+T_+$(+xc+xc+Ea+Kh+xc+xc+G|@G|@Ea+5A.T_+$(+T_+G|@Kh+Kh+Kh+G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.7P.Kh+G|@T_+$(+xc+xc+T_+T_+T_+T_+T_+$(+$(+$(+}f.aH@Bz$aH@}f.}f.bH@Bz$aH@}f.l7 }f.aH@aH@bH@l7 $(+$(+T_+T_+G|@G|@G|@G|@7P.T_+$(+Kh+Kh+xc+", "GY*GY*Vb@/#&*o@*o@/#&Vh.x5.F6.8'%Tw@Tw@ZL.F6.Tw@Vh.Vh.Vh.Vh.Vh.Vh.Vh.O7.O7.O7.O7.O7.O7.O7.O7.Vh.Vh.Vh.is@is@x5.x5.x5.x5.O7.xX%x5.Vh.dD.Vh.x5.O7.O7.O7.x5.x5.x5.is@is@x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%F6.F6.F6.F6.F6.F6.F6.F6.ve.ve.Tw@[{.[{.8'%8'%F6.xX%xX%xX%xX%xX%xX%xX%xX%O7.xX%_r+xX%x5.is@O7._r+xX%xX%xX%xX%xX%xX%xX%xX%M7.N7.xX%O7.O7.xX%N7.M7.xX%_r+N7._r+O7.O7._r+M7.N7.N7.N7.N7.N7.N7.N7.N7.[3+#9.Hu+PI.cp.[3+#9.Hu+Hu+Hu+PI.#9.#9.cp.[3+[3+M7.N7.N7._r+_r+N7.N7.M7.N7.N7.M7.M7.M7.%0+%0+%0+M7.M7.%0+%0+$B#$B#@9.@9.)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%$B#$B#$B#$B#$B#$B#$B#$B#)Z%@9.%0+%0+@9.@9.$B#M7.)Z%eO@@9.$B#%0+M7.N7._r+N7.N7.N7.N7.N7.N7.N7.N7.7% j% Hu+_r+N7.L7.s2@XO+3@+z-=aJ*kV*A-=4M+:> MQ+_i <-=a(.}'%=7#V|@B-=FA%}3*}3*B*+V)*T-+H$>H$>H$>H$5d$5d$5d$)g$-c$S5+_a$_a$^m$^m$cN$a9$b9$b8$b8$Ej$%K$Ms$nw$nw$nw$nw$Ms$Rj$90$90$09$09$Rj$Ms$Ms$=c$>b$ar$>b$>b$>b$>b$Ms$Ms$,H$,H$,H$,H$Js$Js$Js$bq$C-=.(@3:%S[#M+#7V@CI+]-+YK+YK+w;@w;@DD+DD+k#$DD+Q,+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+)K@>K@2 @5G+5G+YK+!K@RQ@fm$fm$E+$k#$k#$mq@mq@>B+Gn+4$@4$@4$@RK+RK+hX@hX@@N+{-+5&@4G+zM@zM@9e#d9$a8$VR$a8$%K$%K$4($c9$_8$hX+hX+u_%|T+U0+sd+d~@x'#R@+G+WM+/T+Lu$eo%5~@@-+C$+ /+'-+Zg+/f+/f+Zl+.>#o/##<$oD#oD#bd%dx$ze$md+ 4+0_%D-=E-=F-=Z0#kz#G-=bs*+r#U`#Lx*~I#; =!I#2#,2#,2#bV#bV#[X#[X#[X#[X#bV#bV#J$!H$b8$a9$M1#,b$k7$T}+;($&9@.N+(/+|$@Kn+;]@Y4@.O$+O$rQ$xV#!x$+O$.O$+O$xV#xV#xV#.O$iR$19@6*$`H@ZM@%7@29@v~@fY#M<@ 7@0X#/]+Ab+Ab+Ab+ 5$ 5$ 5$>_+S`$S`$=X$=X$=X$9X#9X#9X#`1#`1#Z1#Z1#<$$ 2#uT#6|$Z%$57$&w#&w#-6$(/$-_+=f+B4%u:+Bb+Bb+Ab+Ab+ 5$z:+*Z#a>%c<$c<$T_$7X#4m$U_$4q$,l$IH$DJ$JH$xI$!E$gc@fc@3}@3}@L<@hc@X4@0x@0x@qR$EZ$uQ$dc@w)%=e%lh%1J*kg@8i@8i@8i@NK+NK+NK+NK+ZM@4k@4k@qe@qe@pI+pI+pI+]P+]P+]P+/P+/P+/P+tI+tI+4v#pe#pe#yb#Px#]`#]`#]`#->$->$N-=vd%vd%~r%s@$~r%Px#gh#L,@M)@M)@LF@pk+M,@y;@y;@y;@d^@b~@O,@0$@e^@;v@GD+*t@e1@e1@*t@GD+ED@GD+GD+GD+GD+ED@ED@'_#'_#9$@9$@9$@8&@8&@8&@9=@9=@8&@9$@9$@9$@8V@8V@UQ@<^#mq@DD+DD+DD+w;@!K@!K@!K@YK+YK+5$@5$@jX+jX+4Z+4Z+lF$hm$tr$WL$jF$I$+iF$kF$I$+I$+I$+iF$iF$jF$jF$WK+u_%nq@nq@y)+S,+o=#o=#(K@cZ.6]+Ux%yg%yg%@r*Le@,5@ji@E+@#N@E+@r$+r$+@/%u##|A*]D*O-=0g*!5*pE*A6*ND*P-=Q-=R-=S-=nX*T-=)= +y&U-=m;+ns#aR#D6.w5.,X@.X+EI#EI#@u%vC#zM+_($ME+X`+x*$X@${y%B#@B#@`b&`b&Bj.*$@$(+T_+G|@G|@G|@G|@G|@7P.7P.7P.Kh+Kh+Kh+Kh+';$US+pK+pK+S>+';$';$d #d #T_+G|@8Y+8`#8`#8Y+Di*dl.Ai.G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+$(+$(+T_+T_+G|@Kh+Kh+7P.5A.xc+G|@G|@T_+G|@7P.=~@0, 0, )A&0, )A&0, )A&0, %z&{h&%z&{h&%z&{h&%z&{h&*$@Kh+Kh+xc+xc+Kh+Kh+$(+T_+T_+T_+T_+T_+T_+T_+T_+T_+G|@Kh+7P.oh.oh.oh.7P.T_+T_+T_+G|@G|@Kh+Kh+7P.8Y+1m.1m.Ai.Ai.1m.8Y+8`#Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.G|@G|@T_+$(+xc+Ea+5A.]! 7P.T_+T_+7P.7P.T_+T_+7P.Ea+$(+G|@7P.7P.7P.Kh+G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Ea+Kh+G|@G|@T_+$(+$(+xc+xc+bH@aH@9g.Bz$bH@}f.aH@9g.aH@}f.l7 }f.aH@aH@bH@l7 T_+T_+T_+G|@G|@Kh+Kh+Kh+oh.T_+T_+7P.Kh+xc+", "GY*q[*GY**o@Hf.*o@Jc@dD.is@8'%8'%Tw@ve.q;.8'%Tw@Vh.Vh.Vh.Vh.Vh.Vh.Vh.x5.x5.x5.x5.x5.x5.x5.x5.Vh.Vh.Vh.is@is@x5.x5.x5.O7._r+N7._r+x5.Vh.is@x5.O7.O7.O7.x5.x5.x5.is@is@x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.O7.O7.O7.O7.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%H$5d$5d$5d$)g$-c$S5+_a$_a$^m$^m$cN$a9$b9$b8$b8$Ej$%K$Rj$Ms$nw$nw$Ms$Rj$Rj$90$90$09$09$Rj$Ms$Ms$=c$>b$ar$ar$ar$>b$>b$>b$>b$nw$nw$,H$,H$,H$,H$Js$bq$W-=c6$3:%S[#M+#7V@2R+CI+YK+YK+w;@w;@DD+DD+k#$DD+Q,+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+,K@>K@YK+5G+5G+2 @!K@]K@fm$fm$E+$E+$k#$mq@mq@0G+Gn+4$@4$@4$@RK+RK+hX@hX@@N+zI+5&@5$@zM@pZ@8e#!l$;u$a8$%K$%K$c9$c9$c9$c9$vp#_P+]-+U0+sd+em@X.+>[+R@+- +Q2@*E#G&+K_@>*@Ee@>G+2~+pX@.-+f)+!7@g)+Ag+'-+Zg+/f+/f+Zl+.>#o/##<$oD#oD#bd%dx$ze$md+ 4+0_%X-=E-=F-=oD*kz#nl#bs*+r#U`#ZY#FD*!I#_+>_+>_+=X$,_+,_+a>%a>%a>%1X#1X#1X#.2#`1#`1#`1#<$$ 2# :$6|$Z%$Y1#>/$;6$f9$y:+Ab+=f+qF$9G$B4%B4%Jg+Jg+'_+>_+A:+=X$K'%3X#1X#nV#.Z#V_$*p$*p$3q$4q$,l$>l$DJ$JH$Qi$6k@`6@K<@L<@L<@(a@(a@tQ$tQ$aP$p'%w)%ZH@ZH@re@re@kg@jg@jg@8i@jg@qI+NK+ZM@cc@cc@ZM@4k@4k@^P+^P+NK+]P+]P+]P+/P+/P+/P+tI+Ft+Ft+Ft+(T+L,@yb#tW#tW#]`#4~#(6$(6$~r%~r%~r%->$Px#gh#L,@M)@M)@LF@pk+M,@y;@y;@d^@d^@b~@O,@O,@J@@;v@GD+*t@e1@e1@*t@GD+ED@*t@GD+GD+ED@ED@'_#'_#'_#9$@9$@9$@8&@8&@8&@9=@9=@8&@9$@9$@9$@8V@8V@UQ@<^#mq@x;@x;@DD+!K@!K@]K@]K@YK+YK+5$@5$@jX+jX+4Z+4Z+lF$hm$tr$WL$jF$I$+iF$kF$I$+I$+I$+iF$iF$jF$jF$WK+u_%fX@nq@y)+S,+o=#(K@(K@^-+6]+Ux%@>#U+$~8*q6@,5@ji@E+@#N@E+@r$+r$+@/%u##|A*aG*#H*0g*fW&d-=%;=qE*&;=*;=R-==;=nX*-;=H{ %z&^0.m;+{S*NR*:^+:^+DI#/W%@u%@u%vC#vC#zM+_($ME+ME+%' %' 'W+{y%B#@`b&`b&/{ /{ G|@G|@G|@G|@Kh+7P.7P.oh.oh.7P.7P.Kh+G|@G|@';$US+pK+S>+S>+';$d #d #d #T_+G|@8Y+8`#8`#8Y+Di*dl.Ai.G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+$(+T_+T_+G|@Kh+Kh+7P.7P.$(+G|@7P.Kh+T_+T_+G|@h~ %z&%z&c1$%z&c1$%z&c1$%z&c1$%z&c1$%z&c1$%z&c1$%z&*$@7P.7P.T_+T_+7P.7P.$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+T_+G|@7P.7P.7P.7P.7P.$(+T_+T_+G|@G|@Kh+Kh+Kh+8`#8Y+1m.Ai.Ai.1m.1m.8Y+Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.G|@G|@T_+$(+xc+Ea+5A.]! T_+Ea+xc+Kh+7P.G|@G|@y4&Ea+$(+G|@7P.7P.7P.Kh+G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+{! {! ]! 5A.xc+$(+T_+G|@Kh+G|@G|@T_+$(+$(+xc+xc+bH@aH@9g.Bz$bH@}f.aH@9g.aH@}f.l7 }f.aH@aH@bH@l7 T_+T_+T_+G|@G|@Kh+Kh+Kh+Kh+xc+xc+G|@G|@Ea+", "Vb@q[*Vb@Hf.kf Hf./#&dD.is@8'%[{.ve.ve.q;.8'%ve.dD.dD.dD.dD.dD.dD.dD.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.is@is@x5.x5.x5.O7._r+M7.N7.O7.is@is@x5.O7.O7.O7.x5.x5.x5.is@is@x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7._r+_r+_r+_r+_r+_r+_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%H$5d$5d$5d$)g$-c$S5+_a$_a$^m$^m$cN$a9$b9$b8$b8$Ej$4($Rj$Ms$Ms$Ms$Ms$Rj$09$Rj$Rj$Rj$Rj$Ms$Ms$Ms$>b$]m$]m$]m$]m$=c$=c$=c$=c$Hs$Hs$Gs$Gs$Gs$Gs$;J$ow$C-=.(@3:%R[#mZ@nZ@gX+2R+YK+YK+w;@w;@DD+DD+k#$DD+Q,+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+)K@>K@YK+YK+2 @2 @w;@w;@DD+DD+E+$E+$E+$k#$mq@0G+3R+C@@C@@C@@AD+AD+>T@>T@zI+=>+4G+jX+zM@zM@9e#vp#;u$%K$4($bv$_8$_8$_8$00$vp#_P+i~+sd+em@d~@X.+X.+em@N@@*E#bw+R^@k;@MK+V.+E,+U.+2~+l:+~7@gz@r=@6~+'-+Zg+/f+/f+Zl+.>#o/##<$oD#oD#bd%dx$ze$md+ 4+0_%D-=E-=F-=Z0#kz#G-=bs*+r#Lx*HN*FD*; =!I#!I#(z*>;=9z#,;=-C#-C#Mt*';=);=!;=qP*~;=yB*ww#vw#$;=K`*6Q*GE*GE*TT*FV*PC*CQ*!D*!D*7v*7v*T0#T0#S0#S0#S0#S0##f%$f%{;=#f%a@$*s*Tc#[w#W7#U7#~2#Fc#M7#@5#)2#'2#}#PR#q[%*Q#AC$qD$gw$B7#'l#Un#i0#@4+cd+cd+(6+Rl+Dg+di+Rl+$4+{/+=m+=m+Tt+Ob+R0+xp+5T+QK+Rt+}=@K)@Pt+xI+90#cX+I)@)K@5$@lF$!l$!I$;u$sS$sS$M1#BT$Rs@sg@W=+AD+[P+2V+A$+'P+5}@cs$:V$xV#rQ$rQ$rQ$+O$#w$:V$xV#xV#rQ$iR$bC$19@19@|T@4k@ZM@%7@29@19@fY#{`#6k@8g$ 5$ 5$ 5$>_+>_+=X$=X$,_+,_+a>%a>%2X#1X#1X#1X#$Z#c%%.2#.2#.2# :$*Z#*Z#=X$6|$Z%$/6$;_+yD$c %Hg+qF$9G$B4%B4%Jg+Jg+'_+ 5$H2$=X$3X#3X#1X#nV#1X#2q$];=];=];=En$En$j.=>l$DJ$EJ$5l$6k@`6@3}@L<@K<@K<@tQ$aP$bP$bP$p'%dc@dc@6*$w)%re@Kf%8i@qe@4k@qe@jg@cc@`H@`H@`H@%7@ZM@4k@^P+NK+NK+]P+{P+{P+Gt+nI+nI+~G+!P+cr+Ft+L,@L,@Px#Ox#]`#]`#(6$(6$N-=vd%vd%->$Px#gh#yb#yb#yb#L,@!B+!B+b&@b&@b&@b&@b~@b~@b~@6T+;v@GD+*t@e1@e1@*t@GD+ED@*t@GD+ED@'_#UQ@UQ@'_#'_#9$@9$@9$@8&@8&@8&@9=@9=@8&@8&@8&@9$@9$@9$@8V@I@@8$@cB@cB@x;@w;@!K@!K@]K@YK+YK+5$@5$@jX+jX+4Z+4Z+lF$hm$tr$WL$jF$I$+iF$kF$I$+I$+I$+iF$iF$jF$jF$WK+_P+fX@nq@y)+S,+o=#(K@I_@^-+<8+Ux%c=@c=@@r*q6@bK*E+@#N@xs*#N@{=#{=#;`+rn**Q*aG*hX*^E*bM*4J*HJ$iD*^;=/;=$P&(;=z<&~x+34.%z&_W%:m%aR#aR#D6.t4.2p%/W%@u%vC#vC#vC#zM+_($*Z+*Z+{h&>S%'W+'W+B#@`b&B#@{y%Bj.Kh+G|@G|@Kh+7P.oh.y4&oh.oh.7P.7P.Kh+G|@T_+d #US+S>+S>+S>+d #d #u]#u]#G|@G|@1m.1m.1m.1m.Di*Ai.Ai.G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+7P.oh.7P.T_+$(+T_+Bj..y&k$=k$=k$=k$=k$=k$=k$=c1$c1$c1$c1$c1$c1$c1$%z&y$$Kh+7P.T_+T_+7P.Kh+xc+T_+T_+T_+T_+T_+T_+T_+T_+$(+T_+G|@Kh+Kh+Kh+G|@G|@Ea+xc+$(+T_+G|@G|@T_+T_+8Y+8Y+1m.Ai.dl.Ai.Ai.1m.1m.Ai.Ai.dl.dl.Ai.Ai.1m.G|@G|@T_+T_+$(+xc+xc+Ea+5A.be+{! $(+T_+xc+$(+7P.$(+T_+G|@Kh+Kh+Kh+G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+5A.Ea+xc+T_+G|@7P.oh.y4&T_+T_+T_+T_+T_+$(+$(+$(+}f.aH@Bz$aH@}f.}f.bH@Bz$aH@}f.l7 }f.aH@aH@bH@l7 $(+$(+T_+T_+G|@G|@G|@G|@G|@Ea+Ea+T_+$(+]! ", "}7.GY*EY#kf R4.S,%/#&%j.Vh.8'%[{.ve._;=q;.[{.ve.dD.dD.dD.dD.dD.dD.dD.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.is@is@x5.x5.x5.Vh.O7._r+_r+O7.is@is@x5.O7.O7.O7.x5.x5.x5.is@is@x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7._r+_r+_r+_r+_r+_r+_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%#k.#k.#k.#k.#k.#k.#k.#k.b$]m$*c$]m$]m$]m$]m$=c$=c$Hs$Hs$Hs$Hs$Gs$Gs$Gs$sS$Vx$Q[#3:%R[#mZ@M+#4Z+fX+YK+YK+w;@w;@DD+DD+k#$DD+Q,+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+>K@>K@>K@>K@>K@YK+R)@8G+cB@x;@k#$A%%A%%E+$k#$>B+=B+xI+xI+xI+1G+1G+x)+x)+:P+:P+5$@jX+zM@zM@iX+hX+;u$%K$_8$47$37$47$hX+hX+9e#2R+U0+em@>[+Q2@>[+X.+zT&&1@>%@`j+:;=eE#0m@<;=qE%jo@,]+l:+~7@_9@4P#lJ#'-+Zg+/f+/f+Zl+.>#o/##<$oD#oD#bd%dx$ze$md+ 4+0_%D-=l-=~V*RF*ZC*m-=3`*tC*ZY#HN*~I#FD*!K#; =(z*(z*dC*)I#(G#)I#[;=};=};=|;=1;=2;=%A*y==y==y=='+=3;=1X*GE*TT*pV*PC*CQ*p+=p+=7v*7v*T0#T0#S0#S0#S0#T0#4;=5;=qA%{;=+8#a@$.8#Mq#`7#^5#^E#O7#D2$M7#Ec#$5#[X#}#Rx$PR#q[%r[%Fb+F_$^H$id+mc#V4#/6+~_+$a@=g$~/+di+di+~/+-2+1$@RO@RO@Tt+Ob+vr+=w+5T+5T+Il+Rt+,B+&B+4$@73*3Z+I)@jX+2R+5($c9$Js$Gs$hU$hU$M1#:8$;>+~M#+N+}z@}P+xp+]G+:T+2(@Ld$;G$DJ$nW$SG$SG$!E$6k@5l$EJ$;G$JH$gc@fc@L<@L<@(a@<9@ic@fr+1}@:a@L<@`6@gc@>/+S`$S`$S`$,_+,_+,_+,_+3X#3X#2X#2X#2X#1X#T_$1X#I.$I.$$Z#c%%Ai$oV#9X#=X$lK$>_+H2$z:+S`$c %wL$Hg+a~+a~+a~+a~+xd%xd%8g$8g$# $l$wV#;G$!E$fc@}9@L<@K<@;:@{`#sQ$& $aP$bP$bP$aP$uQ$dc@re@kg@re@cc@%7@ZM@8i@6m@ai@/a@0x@/a@fr+<9@bi@xb#ne#ne#Q;@[G+69@69@[T+q;@q;@cr+cr+Ft++w+M)@M)@]`#]`#]`#y$+Q&$Q&$Q&$Pc$Nx#WA#Nx#i-$i-$i-$=b$Y|#_^#S6#S6#6~#pg@ze@ze@;7@;v@GD+*t@e1@e1@*t@GD+ED@GD+ED@'_#8V@8V@8V@UQ@'_#9$@9$@9$@8&@8&@8&@9=@9=@9=@9=@9=@9=@8&@8&@9$@8$@I@@CD+H@@cB@R)@w;@!K@!K@YK+YK+5$@5$@jX+jX+4Z+4Z+lF$hm$tr$WL$jF$I$+iF$kF$I$+I$+I$+iF$iF$jF$jF$WK+_P+BO@fX@y)+S,+(K@I_@I_@^-+0Z.@r*d$@H5$a;=b;=2~@#N@xs*;t*xs*i|+i|+>t*:u*Uk*Il*bv*c;=pn*jN*d;=VC*e;=f;=g;=(;=0W*x& Hj.+y&(&%s=+7&+aR#t4.v5./W%/W%vC#vC#vC#zM+zM+zM+*Z+*Z+Av&{h&'W+3&${y%B#@{y%3&$Bj.Bj./{ |m./{ Bj.+S>+x}*d #u]#u]#u]#G|@G|@dl.dl.dl.dl.Di*Ai.Ai.G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+7P.7P.Kh+Kh+Kh+Kh+G|@G|@Kh+7P.oh.7P.G|@T_+G|@Bj.Xw&p2$p2$p2$p2$p2$p2$p2$h;=h;=h;=h;=h;=h;=h;=+y&'g@T_+G|@xc+xc+G|@T_+]! G|@G|@G|@G|@G|@G|@G|@G|@$(+T_+T_+G|@T_+$(+xc+xc+]! Ea+xc+$(+T_+T_+$(+xc+8Y+1m.Ai.dl.q9+q9+dl.dl.8Y+1m.dl.q9+q9+dl.1m.8Y+G|@G|@G|@T_+T_+T_+T_+T_+Ea+{! ]! $(+$(+Ea+Ea+G|@7P.Kh+G|@T_+T_+T_+G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@Kh+Kh+7P.7P.$(+$(+$(+T_+T_+T_+T_+T_+l7 bH@aH@bH@l7 cI+}f.aH@aH@}f.l7 }f.aH@aH@bH@l7 xc+xc+$(+$(+$(+T_+T_+T_+G|@Ea+Ea+T_+$(+]! ", "|6.GY*}7.V5./l.kf *o@%j.Vh.8'%[{.ve._;=Zq@[{.ve.dD.dD.dD.dD.dD.dD.dD.is@is@is@is@is@is@is@is@Vh.Vh.Vh.is@is@x5.x5.x5.%j.is@O7.xX%x5.Vh.Vh.is@O7.O7.O7.x5.x5.x5.is@is@x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@is@is@is@is@O7.O7.O7.O7.O7.O7.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%#k.#k.#k.#k.#k.#k.#k.#k.#k.#k.#k.A.6M+Eo @D+OY 7A.]<*2'%=7#@B ^:$kb@i;=,^.l%+l%+w}*T-+YF@)>+Ar+V,+W0+tc@@ +3)#+B$@ +B%%B%%A0%km$km$km$sD$&c$4[%HK$=7$=7$=7$D#$K[#K[#*c$jm$jm$jm$CO#CO#*I$*I$CO#CO#ln$ln$]m$ar$ar$ar$~}%Tj$ln$]m$Tj$,Z#ar$CO#5d$5d$5d$)g$-c$S5+_a$_a$^m$^m$cN$a9$b9$b8$b8$Ej$4($09$Rj$Ms$Ms$Rj$09$09$=J$=J$Hs$Hs$nw$Ms$Ms$Sj$]m$*c$]m$]m$]m$]m$=c$=c$Hs$Hs$Hs$Hs$Gs$Gs$Gs$sS$mf&Q[#R[#R[#~^#mZ@| @4Z+YK+YK+w;@w;@DD+DD+k#$DD+Q,+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+YK+>K@)K@,K@)K@YK+8G+^^#H@@cB@k#$A%%A%%A%%E+$P)@zD+*B+*B+*B+6=@6=@[+X.+N@@cP$ZC#j;= k+a>@k;=l;=k@=0Q%m;=l:+8L#_9@4P#]R#'-+Zg+/f+/f+Zl+.>#o/##<$oD#oD#bd%dx$ze$md+ 4+0_%b4%l-=dH*RF*ZC*m-=3`*tC*HN*HN*]N*~I#~I#FD*>;=(z*}#Rx$PR#i~%r[%I~%F_$gw$B7#sB#~|+r:+dd+@4+F:+>k+Rl+di+~/+_k+V4@}&@}&@I6@Ob+fy+=w+5T+5T+Il+g~+%3X#lK$A:+6|$6|$>_+S`$'_+ 5$b~+a~+a~+Pi$xd%/]+8g$8g$U[$t*EP*x;=Il*Tw*;G*xM*%O*&D$+x}*x}*d #u]#u]#u]#Kh+G|@q9+jy.jy.q9+Di*1m.Ai.G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+oh.oh.7P.7P.Kh+G|@G|@T_+G|@Kh+oh.7P.G|@G|@Kh++]R@`|#V,+V,+tc@tc@4W.D)+D)+D)++*++*+km$km$km$km$rr%km$D#$HK$D#$D#$D#$D#$M[#M[#Ei$Ei$1r$1r$Tj$ar$ar$ar$CO#CO#ln$ln$]m$ar$ar$ar$ar$ar$ar$]m$ln$ln$CO#CO#I@%I@%j%%j%%8F$8F$5G$^m$^m$5G$hU$hU$SQ$bq$b8$,p$,H$nw$nw$Ms$Ms$Rj$Rj$Rj$Ms$09$90$09$Rj$Rj$N)$j[+1r$K[#Wk$*c$jm${m$*I$*I$%u$%u$%u$=c$nw$Ms$Ms$Dj$lw$yU#S[#]N#mZ@M+#4Z+4Z+YK+YK+w;@w;@DD+DD+k#$DD+Q,+:P+:P+:P+:P+:P+:P+:P+zI+=>+=>+:P+T,@T,@kX+kX+,K@,K@)K@>K@YK+5G+8G+X.@x;@x;@mq@mq@mq@mq@mq@>B+zD+*B+*B+*B+6=@6=@#=L@=r~@9N#Z.= >#'-+Zg+/f+/f+Zl+.>#o/##<$5v#ji+'i#,d$+|+88+l%$s0#)/$E;=BT*PV*mw*_A*yz*;v*~K#HN*]N*FD*!I#;=}#Px$j}%QR#r[%E0+Fb+C7#ML#.I#~|+Nn#@4+@4+cd++_++_+Sl+Sl+Lb+Lb+[]+]_+Tt+Yn+fy+@k+wI+Jl+ED+ED+w)+T.@2h#-2*8~@%1@M+#]N#^m$^m$-J$-i&P;=hU$N1#Z&+nq@AI+jy+or+tp+^_+k)+0~+Pi$>/+6X#@Z#Lj$/g$# $;/+I2$$u$Ds$3v$# $-/+wT#yT#]]+q0+-:@Z6@Z6@1(@,.$:C#xT#wT#57$f9$y:+'_+6-%6-%=X$A:+*Z#A:+9X#9X#2X#2X#c<$c<$U_$U_$2X#1X#nV#I.$c%%c%%A:+A:+A:+=X$>_+S`$S`$'_+xd%=3@7m@_a@6k@gc@gc@fc@@F$Qi$!E$xI$JH$;G$IH$,l$Q;=R;=S;=S;=Q;=T;=u;=6m$-l$@u$Aw$% $$F$fc@6k@7m@sQ$!O$sQ$& $~O$~O$bP$bP$ZH@ZH@w)%YH@`H@`H@XH@XH@:a@h8$h8$#}#<1@<1@<1@hr+hr+hr+Jt+='@v&@v&@qD+qD+q;@q;@/G+/G+Ft+~P+~P+(T+M)@M)@]`#]`#tW#tW#->$P3*]+=iE*]+=]+=]+=]+=/=$/=$P&$9%$Q&$->$hY#_6$gx$n#$=7@f1@f1@f1@e1@*t@GD+ED@ED@ED@'_#UQ@8V@8V@9$@9$@ED@8V@8&@8&@9$@8&@m5$r!%m5$m5$9=@9=@9=@9=@8&@^K@A%%,T@DD+x;@w;@!K@RQ@`{%>K@>K@5$@5$@jX+jX+fX+fX+$@%tr$WL$kF$iF$-,$w-$5P#I$+iF$kF$lF$lF$kF$iF$hF$_P+fX@nq@y)+S,+o=#(K@I_@,7$cZ.c=@H5$U;=!R#V;=b;=E+@E+@E+@#N@i|+i|+i|+vY*>Y*gD*O-=Iv*!5*gW&IF*YG%v-=Q-=S7*W;=X;=x& 'I@+y&2+=:m%7&+@:+o3.D6.)Z%eO@j4@EI#@u%vC#_($1<#X`+X`+&, &, >n.>n.!D+`b&`b&B#@!D+!D+!D+!D+!D+!D+!D+!D+-~@-~@;n.;n.>n.!D+!D+J> US+S>+S>+x}*u]#u]#:{+:{+be+Ea+dl.dl.q9+q9+QJ*~D.1m.$(+Ea+$(+7P.y4&7P.T_+oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.7P.7P.Kh+G|@T_+T_+oh.oh.oh.oh.oh.oh.oh.( Bz$bH@l7 l7 bH@Bz$>( aH@aH@aH@aH@aH@aH@aH@aH@7P.Kh+T_+xc+xc+xc+$(+T_+xc+xc+Ea+5A.5A.Ea+", "EY#Vb@EY#S,%kf S,%^#&x5.x5.8'%8'%8'%8'%M!.8'%Tw@x5.xX%O7.Vh.dD.is@O7.dD.Vh.is@x5.O7.x5.is@Vh.is@is@is@is@is@is@is@is@O7.is@Vh.is@O7._r+xX%x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.O7.xX%x5.Vh.Vh.x5._r+xX%O7.is@Vh.Vh.is@O7.xX%x5.x5.x5.x5.x5.x5.x5.x5.is@x5.xX%_r+_r+_r+O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.A.SC+)) 1A+{B `[*9` Z;=vu.$^%~$#x2&P%=Ro$wX@B*+`;=L>+'m$:B@V,+V,+tc@tc@4W.D)+D)+D)++*++*+km$km$km$km$rr%km$D#$HK$D#$D#$D#$D#$M[#M[#1r$1r$!U#!U#ar$ar$]m$]m$ln$ln$ln$]m$]m$ar$ar$ar$ar$ar$ar$]m$ln$ln$ln$CO#j%%j%%Bj$Bj$8F$Cj$^m$^m$Dj$^m$sS$hU$ow$bq$b9$Ej$,H$nw$nw$Ms$Ms$Rj$Rj$Rj$Ms$Rj$09$Rj$Ms$Ms$90$dN#!U#M[#Wk$*c$jm${m$*I$>H$5F$5F$5F$%u$Hs$nw$nw$^m$lw$yU#]N#]N#mZ@M+#4Z+4Z+YK+YK+w;@w;@DD+DD+k#$DD+Q,+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+T,@T,@T,@)K@)K@>K@YK+YK+2 @8G+8G+x;@x;@mq@mq@mq@mq@mq@>B+=B+xI+xI+xI+1G+1G+x)+x)+T,@kX+jX+jX+pZ@pZ@Xx$Xx$d8$_8$hX+hX+_P+_P+2R+gX+~g$#N+5 @4]+V_@, +'[+!V+hg@o.$ >=9^#|_#C;=6j*.>=P@+>#=L@=r~@r~@Z.=Z.=`;#7d+Zg+/f+/f+Zl+.>#o/##<$5v#ji+Qc$,d$+|+ 2+j8+!l#)/$E;=BT*PV*mw*_A*yz*;v*HN*ZY#]N*FD*!I#=h*=b==b==;*=q==2;=2;=F;=I;=WB*J;='+='#='#=L;=S==QV*pV*FV*FV*JW*;S*ID*@>=;@=;@=a@$T0#S0#Z7#Z7# 8#jw*M;=#>=N;=O;=$>=yt#QB#(5#(2#hT#iT#st#rt#pt#!2##5#_l#/K#bV#f++&B+Xn+Ob+e~+{]+o)+_]+}5%Ci$@ $#Z##Z#pV## $$ $c0$n@$3v$# $-/+oW$:C#yT#0~+[9@9~+-:@Z6@,.$,.$'.$'.$g8$I#$vT#;_+ 5$>_+>_+z:+>_+=X$=X$a>%a>%3X#3X#c<$U_$U_$.Z#1X#nV#I.$$Z#c%%oV#*Z#A:+A:+A:+>_+>_+8g$Ld$=3@7m@7m@7m@_a@_a@_a@Ri$@F$@F$5l$5l$5l$JH$DJ$0;=%>=t;=t;=t;=T;=u;=6m$-l$-l$Cs$Aw$Aw$$F$!E$Qi$!O$x|%x|%& $~O${O${O$bP$^O$w)%YH@dc@6*$|T@OS#X4@:C#:C#,.$,.$h8$|}@|}@|}@jp+jp+hr+Jt+='@v&@Nl+qD+Mn+q;@/G+/G+#w+~P+~P+~P+L,@L,@Px#tW#tW#Ox#Q&$P3*]+=iE*]+=]+=]+=]+=/=$/=$P&$9%$Q&$->$hY#_6$gx$n#$-7@*t@e1@e1@e1@*t@GD+GD+UQ@UQ@UQ@UQ@UQ@UQ@'_#'_#ED@UQ@9$@9$@9$@9$@9=@t!%9$@9$@8&@8&@9=@m5$m5$k#$E+$,T@DD+DD+!K@]K@RQ@ @%>K@>K@jX+jX+jX+E@@4Z+4Z+tr$hm$WL$kF$jF$I$+-,$w-$I$+iF$kF$lF$lF$kF$iF$hF$|T+nq@nq@y)+S,+o=#o=#o=#cZ.6]+@>#U+$&>=*>==>=~-=E+@E+@#N@#N@i|+@/%@/%vY*HS#1A*5H*Iv*bM*Q.=vg*->=Gm*f;=;>=W;=T(@f> ON. ==2+=:m%@:+@:+v5.o3.'Z%,X@j4@EI#@u%vC#_($1<#X`+Nc&~h&~h&`b&`b&!D+!D+!D+!D+!D+!D+!D+!D+!D+!D+!D+!D+;n.;n.;n.>n.>n.!D+!D+{h&zi.S>+S>+S>+d #d #d #d #$(+G|@8Y+1m.dl.q9+Di*8Y+Ai.$(+xc+$(+7P.oh.7P.G|@7P.7P.7P.7P.7P.7P.7P.7P.T_+T_+G|@Kh+Kh+7P.oh.oh.7P.7P.7P.7P.7P.7P.7P.h~ ~h&~h&.y&~h&.y&~h&+y&>S%.y&~h&+y&>S%Xw&X@$Be+x*$h~ 7P.Kh+G|@G|@Kh+7P.7P.Kh+Kh+G|@G|@T_+T_+$(+$(+G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+G|@G|@T_+T_+T_+1m.1m.1m.1m.1m.1m.1m.1m.8Y+8Y+8Y+8Y+8Y+8Y+8Y+8Y+Kh+Kh+G|@G|@G|@G|@T_+T_+Kh+Kh+G|@G|@G|@T_+T_+$(+G|@G|@G|@G|@G|@G|@G|@G|@$(+$(+T_+T_+G|@G|@Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@xc+xc+xc+xc+$(+$(+T_+T_+aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@7P.Kh+T_+$(+xc+$(+T_+T_+$(+$(+xc+Ea+Ea+xc+", "}7.EY#}7.Hf.S,%Hf.*o@Vh.Vh.Tw@Tw@Tw@Tw@q;.Tw@[{.O7.xX%O7.is@is@x5.xX%is@is@x5.x5.x5.is@Vh.dD.is@is@is@is@is@is@is@is@O7.is@Vh.is@O7._r+xX%x5.x5.x5.x5.x5.x5.x5.x5.O7.x5.O7.xX%x5.Vh.Vh.x5._r+xX%O7.is@Vh.Vh.is@O7.xX%x5.x5.x5.x5.x5.x5.x5.x5.O7.xX%xX%_r+xX%xX%x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.>=B~+Z#$,>=eK+_i Eq.2'%}'%V|@$^%x2&x2&a_*}3*6+*B*+`;=rR$j%+YF@V,+V,+tc@tc@4W.D)+D)+D)++*++*+km$km$km$km$rr%km$D#$HK$D#$D#$D#$D#$M[#M[#Wk$Wk$Wk$Wk$]m$]m$]m$]m$ln$]m$]m$]m$ar$ar$ar$ar$ar$ar$]m$]m$]m$ln$ln$ln$Bj$Bj$5d$5d$-c$-c$Dj$Dj$_a$Dj$cN$sS$ow$ow$bq$a9$,H$nw$nw$Ms$Ms$Rj$Rj$Rj$nw$Ms$Rj$Ms$Hs$nw$Rj$%*$*c$L[#RA$Zz${m$/v$dw$dw$*I$*I$6F$5F$5F$%u$Hs$5G$lw$^N#]N#]N#M+#M+#fX+fX+YK+YK+w;@w;@DD+DD+k#$DD+x)+zI+zI+zI+zI+zI+zI+zI+T,@T,@T,@:P+:P+:P+:P+:P+YK+YK+YK+YK+YK+2 @R)@R)@DD+DD+k#$k#$k#$k#$k#$P)@3R+C@@C@@C@@AD+AD+>T@>T@T,@T,@5$@jX+zM@pZ@8e#8e#_P+_P+_P+_P+2R+2R+2R+2R+wp#(8$T;+V_@> +!V+<;=(&#V(+V(+Y^+k;=(c*Z^+Z^+0Q%,]+r~@r~@'>=Z.=`;#J#$Z;# o+Zg+/f+/f+Zl+.>#o/##<$<&#ji+Qc$,d$G#$@|+j8+p&%b4%E;=BT*PV*mw*_A*;C*;v*HN*ZY#Kx*~I#; =!I#(z*+>=b==)>=!>=!>=!>=!>=~>=~>=|N*|N*$N*$N*c==c==c==;==QV*pV*FV*FV*JW*;S*ID*{>=7v*7v* 8# 8#LR#LR#LR#(e%5B*jw*]>=]>=^>=^>=QB#.8##8#Tc#St#^E#pt#qt#pt#!2#Dc#Af#_l#/K#bV#k+gi+dy+1$@V4@RO@=m+}]+/|+f~+/_+5T+QK+Rt+}=@,B+yD+2h#l1*7^@$1@zA#BA#5d$A4#]m$CO#>N$sS$[{#_P+5&@Q,+np+.m+vb+R3+!]%}#%5 %n%%CM$rO$1X#oV#*Z#6|$//$57$uT#6|$H2$(/$I#$X1#;k+s:+0d+0d+#_+Gg+;k+X1#W+$W+$m%$m%$I#$g($g($y:+;_+ 5$'_+S`$S`$,_+,_+,_+,_+a>%U_$.Z#.Z#T_$7X#I.$I.$c%%Ai$oV#oV#*Z#A:+A:+=X$rV#Ri$$w$$w$7S$7S$;o$;o$;o$;o$0p$Aq$Aq$;o$#w$=En$`=*`=*6m$6m$;l$-l$@u$Cs$Cs$Aw$>G$>G$0=*x|%hE*hE*hE*{O${O$bP$]O$p'%bP$uQ$19@M<@Y4@|1@-Z#=_+pF$Kg+-k+-k+Lg+Lg+Lg+*k+On+ei+>k+ir+ir+gi+rD+rD+Nl+nD+/G+[T+~P+~P+=hD#Le@E+@#N@#N@xs*@/%;`+;`+7j*7Y#ug%,v*;G*xM*KS*vg*dv*_>=-`*:>=<>=u<&:! y$.PN.2+=:m%@:+@:+n3.v5.2p%p!#EI#EI#@u%zM+_($1<#X`+Nc&X@$X@${y%B#@`b&!D+!D+>n.<:*<:*<:*<:*<:*<:*<:*<:*-.%-.%-.%-.%<:*<:*<:*~h&zi.S>+S>+S>+US+US+US+US+y4&iS.~D.8`#Ai.q9+h)@Ai.Ai.T_+$(+T_+Kh+7P.Kh+G|@G|@G|@G|@G|@G|@G|@G|@G|@$(+T_+T_+G|@Kh+7P.oh.oh.G|@G|@G|@G|@G|@G|@G|@G|@xE*17*0, J> ~h&nh.%' x{ ~h&zi.~h&nh.>S%nh.>S%nh.G|@Kh+7P.7P.7P.7P.Kh+G|@Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+G|@G|@T_+T_+T_+dl.dl.dl.dl.dl.dl.dl.dl.Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.xc+T_+G|@7P.7P.Kh+G|@T_+Kh+7P.oh.y4&y4&7P.G|@T_+G|@G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+7P.7P.7P.7P.T_+T_+T_+T_+T_+T_+T_+T_+xc+xc+xc+$(+$(+T_+T_+T_+}f.bH@Bz$9g.9g.Bz$bH@}f.aH@aH@aH@aH@aH@aH@aH@aH@7P.Kh+G|@T_+$(+$(+T_+T_+G|@T_+$(+$(+$(+$(+", "}7.}7.}7.^#&^#&^#&*o@Vh.Vh.Tw@Tw@Tw@Tw@q;.Tw@8'%O7.O7.O7.x5.x5.x5.O7.x5.x5.x5.x5.is@Vh.dD.dD.is@is@is@is@is@is@is@is@O7.is@Vh.is@O7._r+xX%x5.is@x5.x5.x5.x5.O7.O7.O7.x5.O7.xX%x5.Vh.Vh.x5._r+xX%O7.is@Vh.Vh.is@O7.xX%x5.x5.x5.x5.x5.x5.x5.x5._r+_r+_r+xX%xX%O7.x5.is@x5.x5.x5.x5.x5.x5.x5.x5.=db }>=_i 22 8/.*7.b[%$^%x2&+*=!&=re$z^&W'*rR$Q%=YF@]R@V,+V,+tc@tc@4W.D)+D)+D)++*++*+km$km$km$km$rr%km$D#$HK$D#$D#$D#$D#$M[#M[#*c$*c$*c$*c$]m$ln$ln$ln$]m$]m$ar$ar$ar$ar$ar$ar$]m$]m$]m$]m$]m$]m$ln$ln$5d$5d$5d$)g$-c$S5+_a$_a$@d$_a$Ej$a9$bq$bq$ow$sS$,H$nw$nw$Ms$Ms$Rj$Rj$Rj$Hs$nw$Ms$nw$=J$=J$nw$=k$jm$RA$Zz$Vy$/v$dw$dw$dw$>H$>H$jO$6F$6F$5F$=J$S@%M1#^N#]N#yA#M+#nZ@fX+fX+YK+YK+w;@w;@DD+DD+k#$DD+x)+zI+zI+zI+zI+zI+zI+zI+kX+kX+T,@T,@:P+=>+=>+zI+2 @2 @2 @2 @2 @YK+w;@w;@DD+DD+k#$k#$k#$k#$k#$P)@Gn+4$@4$@4$@RK+RK+hX@hX@T,@T,@5$@jX+zM@zM@8e#8e#vp#hX+_P+_P+fX+fX+gX+}V+[V+L4#> +V_@T;+kI+l;=V.+k;=k;=l;=Yd*k@=0Q%W(+|>=r~@=]@'>=`;#Jp#Z;#p[%oD# o+Zg+/f+/f+Zl+.>#o/##<$<&#ji+Qc$Wg+#*$@*$j8+F0+b4%l-=BT*nV*mw*cz*;C*]Y*ZY#Lx*NB*~I#; =!I#>;=~I#G#=G#=p =TN*TN*1&=6.=6.=-==;==$N*|N*1>=x.=c==2>=%X*TT*pV*3>=HD*HD*p+=p+=5B*~+=MR#MR#$Q#$Q#-f%_e%5B*,w*jw*jw*4B*^p%.8#`7#`7#[w#:I#J0#pt#'6$qt#!2#zf#EB#Af#_l#/K#bV#bV#=,E#,l#+vI+QK+Rt+}=@,B+&B+2h#l1*7^@#(@AA#St$A4#A4#Wk$jm$DP$sS$00$}{#2 @ZK+mp+jr+9d+a0$I>%'/+PV$vO$*#%J'%rO$a>%A:+6|$f9$;6$ :$H2$H2$(/$g8$1=$TR#Mg+._+._+Gg+Gg+-k+-k+RR#RR#=_+-k+SR#W+$W+$RR#pF$-_+Ig+yD$yD$yD$S`$S`$S`$=X$.Z#{b$T_$T_$7X#7X#I.$I.$I.$Ai$Ai$oV#*Z#A:+A:+o$>o$ap$ap$N*%9l$8l$>o$7S$.O$)O$-p$lr$3q$4q$>l$>l$;l$;l$;l$-l$@u$Cs$Cs$r;=N.$r;=({&({&hE*hE*hE*hE*~O$~O${O$aP$tQ$qR$Y4@4}@21@Ab$*/+w:+w:+=_+Kg+-k+-k+=k+=k+=k+*k+On+ei+>k+>k+ir+='@rD+Nl+Nl+/G+[T+dr+~P+@w+@w+pe#Kx#i-$Y|#Y|#SR$iE*iE*]+=]+=]+=]+=/=$/=$.z&.z&.z&.z&Dy$Dy$Dy$T`$ci@'_#GD+*t@e1@e1@*t@*t@UQ@'_#'_#ED@ED@GD+GD+GD+GD+'_#8V@8V@UQ@'_#8V@8&@UQ@8V@9$@9$@9=@9=@m5$E+$^K@DD+fm$|#% @%RQ@]K@!K@)K@)K@E@@J #J #K #U<#U<#WL$WL$lF$lF$kF$jF$jF$iF$I$+iF$kF$lF$lF$kF$iF$hF$Ab#QU#QU#QU#y_$y_$y_$y_$cZ.<8+ha@yg%@r*5>=~-=Le@#N@#N@xs*xs*;`+>t*pW$rn*HS#2s*Tw*c;=KQ*6>=d;=oz*7>=Nc.:>=bJ%0W*,* ON..==2+=s=+7&+@:+n3.n3./W%/W%EI#@u%vC#zM+_($ X+Nc&Nc&X@$%' {y%{y%B#@B#@`b&`b&#d+#d+#d+#d+#d+#d+#d+#d+<:*<:*<:*<:*#d+#d+#d+~h&nh.S>+S>+pK+23+23+OP*OP*]@+]@+~D.zc@8Y+1m.Di*Ai.Ai.G|@T_+G|@G|@Kh+G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+oh.7P.7P.Kh+G|@T_+$(+$(+T_+T_+T_+T_+T_+T_+T_+T_+US+';$zi.';$nh.u]#x{ u]#nh.';$zi.';$zi.';$J> US+xc+$(+G|@Kh+Kh+G|@$(+xc+7P.7P.7P.Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+G|@G|@T_+T_+T_+dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.5A.xc+G|@oh.oh.7P.G|@T_+G|@7P.y4&iS.iS.oh.G|@$(+G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+$(+$(+$(+$(+$(+$(+$(+$(+xc+xc+$(+$(+T_+T_+G|@G|@bH@aH@aH@Bz$Bz$aH@aH@bH@aH@aH@aH@aH@aH@aH@aH@aH@Kh+Kh+G|@G|@T_+T_+T_+T_+Kh+G|@T_+T_+T_+T_+", "}7.}7.}7./#&/#&/#&*o@Vh.Vh.Tw@Tw@Tw@Tw@q;.Tw@F6.x5.x5.x5.x5.O7.x5.x5.O7.O7.x5.is@Vh.Vh.Vh.Vh.is@is@is@is@is@is@is@is@O7.is@Vh.is@O7._r+xX%x5.is@is@is@x5.O7.O7.xX%xX%x5.O7.xX%x5.Vh.Vh.x5._r+xX%O7.is@Vh.Vh.is@O7.xX%x5.x5.x5.x5.x5.x5.x5.x5.N7._r+xX%O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.(#Eb.7A.L!%}'%b[%b[%u1%FA%+N*H-*l%+U{*Q%=H$>H$>H$*I$6F$5F$5F$S@%M1#^N#yA#yA#nZ@nZ@gX+gX+YK+YK+w;@w;@DD+DD+k#$DD+x)+zI+zI+zI+zI+zI+zI+zI+kX+kX+T,@T,@:P+=>+=>+zI+5G+5G+5G+2 @2 @2 @R)@R)@x;@x;@mq@mq@mq@mq@mq@>B+Gn+4$@4$@4$@RK+RK+hX@hX@:P+:P+5$@5$@5Z+zM@9e#9e#Qm#vp#2R+gX+4Z+| @8=@3G+{-+V_@> +V_@U;+l;=k;=V.+qE%qE%:@=9m@P@+8>=n:&9>==]@iU*Jp#Jp#as#as##v$5v# o+Zg+/f+/f+Zl+.>#o/##<$ii+ji+Qc$)i#Ae$md+ 4+0_%D-=l-=dH*nV*zv*cz*3`*]Y*HN*ZY#Kx*~I#; =!I#(z*FD*dO*!O*0>=a>=b>=c>=c>=d>=e>=#N*f>=g>=g>=h>=w.=i>=T*=GE*3>=j>=k>=l>=!D*VI*~+=~+=MR#(e%$Q#-f%-f%_e%~+=~+=5B*5B*+8# 8#{5#{5#Mq#Y7#J0#~2#G0#2*$G0#)2#EB#EB#Af#_l#/K#bV#bV#=,E#,l#k+(+@YA+V4@|&@TY#RO@^_+/f+u)+/_+vI+QK+Rt+}=@K)@%B+(s#&h%;}@wt*8D#9D#Ss@Ss@L[#jm$DP$^m$vp#}{#5G+0G+ L+%4+Y1+`5+9G$wL$AS$RR$!;%YQ$N)%3X#=X$6|$f8$>/$ :$6|$H2$g($-6$Vl+Vl+Wl+fi+ei+*k+Gg+*f+*f+=_+=_+*f+=k+TR#Vl+-X#1=$;k+pF$Bb+Jg+Jg+Jg+'_+'_+'_+S`$1X#4m$4m$4m$7X#7X#7X#nV#I.$nV#oV#oV#9X#9X#=X$rV#-k$;o$0p$Aq$>o$ap$O*%N*%DZ$N`$j{%N`$=N.$XY%0=*0=*0=*x|%x|%x|%& $& $sQ$qR${`#yV#cs$>q$)x$*/+-_+w:+=_+pF$-k+;k+X1#=k+=k+Lg+On+ei+Xl+Xl+ir+ir+ir+Nl+Nl+Nl+s=@[T+[T+@w+@w+@w+OK+Kx#Vv#Vv#SR$iE*u2*_3*_3*_3*_3*s2*s2*o>=o>=o>=o>=p2*p2*p2*T`$Ae@ED@GD+*t@e1@e1@e1@e1@*t@*t@GD+GD+ED@ED@ED@'_#ED@UQ@8V@8V@'_#'_#8V@8&@8&@8&@8&@8&@9$@9$@9$@8$@^K@DD+fm$|#% @%RQ@]K@!K@>K@)K@jX+J #K #IO$U<#W|#hm$WL$WL$lF$kF$kF$jF$jF$I$+iF$kF$lF$lF$kF$iF$hF$Ab#QU#QU#QU#y_$y_$y_$y_$,7$>(@ha@Ux%ha@!-=p>=p>=#N@#N@xs*;t*>t*pW$]w*:u*kz*ft*,v*0g*q>=r>=%;=T,&s>=t>=p.=H;*u>=%$ MV*@d+(&%s=+7&+@:+v5.n3./W%.X+@u%@u%vC#_($1<# X+Nc&mh.~h&~h&B#@B#@{y%{y%{y%'W+#d+#d+#d+#d+#d+#d+#d+#d+TO&TO&TO&TO&#d+#d+#d+~h&nh.S>+S>+pK+23+23+OP*OP*oh.oh.8Y+8Y+8`#8`#^v.8Y+Ai.G|@Kh+G|@G|@T_+G|@G|@$(+$(+$(+$(+$(+$(+$(+$(+7P.7P.Kh+G|@T_+$(+$(+xc+$(+$(+$(+$(+$(+$(+$(+$(+:{+R~$:{+{'$u]#m|.d #m|.d #V&$';$V&$';$V&$US+US+xc+$(+G|@Kh+Kh+G|@$(+xc+Kh+Kh+Kh+Kh+Kh+7P.7P.7P.G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+G|@G|@T_+T_+T_+dl.dl.dl.dl.dl.dl.dl.dl.q9+q9+q9+q9+q9+q9+q9+q9+5A.xc+G|@oh.oh.7P.G|@T_+T_+G|@oh.y4&oh.Kh+$(+Ea+G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+xc+xc+xc+xc+xc+xc+xc+xc+$(+$(+$(+T_+T_+G|@G|@G|@>( Bz$bH@l7 l7 bH@Bz$>( aH@aH@aH@aH@aH@aH@aH@aH@Kh+Kh+Kh+Kh+G|@G|@T_+T_+Kh+Kh+G|@T_+T_+G|@", "}7.|6.}7.Jc@b #Jc@*o@Vh.Vh.Tw@Tw@Tw@Tw@q;.Tw@8'%is@dD.Vh.x5.x5.is@Vh.O7.x5.is@Vh.Vh.Vh.is@is@is@is@is@is@is@is@is@is@O7.is@Vh.is@O7._r+xX%x5.Vh.Vh.is@x5.O7.O7.xX%xX%x5.O7.xX%x5.Vh.Vh.x5._r+xX%O7.is@Vh.Vh.is@O7.xX%x5.x5.x5.x5.x5.x5.x5.x5._r+_r+O7.O7.x5.O7.O7.xX%x5.x5.x5.x5.x5.x5.x5.x5.=!A&K' v9 HE#(Z.6< }'%b[%OD*r2%FA%i;=zC.W'*TD.T-+7T@`|#`|#V,+V,+tc@tc@4W.D)+D)+D)++*++*+km$km$km$km$rr%km$D#$HK$D#$D#$D#$D#$M[#M[#*c$*c$*c$*c$ar$ar$ar$ar$,Z#Tj$Tj$Tj$ar$ar$ar$ar$ln$ln$ln$]m$]m$]m$ar$ar$Bj$Bj$5d$5d$-c$-c$Dj$Dj$Dj$_a$,p$,p$c9$b8$b9$cN$,H$nw$nw$Ms$Ms$Rj$Rj$Rj$nw$Ms$Rj$nw$=J$-J$Hs$>b$Zz$CM#Zz$Zz$Zz$Zz${m${m$*I$*I$*I$CO#5F$%u$%u$8F$N1#zA#yA#{^#nZ@7V@gX+gX+YK+YK+w;@w;@DD+DD+k#$DD+x)+zI+zI+zI+zI+zI+zI+zI+T,@T,@T,@:P+:P+:P+:P+:P+2 @2 @2 @5G+5G+5G+8G+8G+H@@H@@8$@8$@8$@8$@8$@*>+3R+C@@C@@C@@AD+AD+>T@>T@:P+:P+4G+5$@5Z+zM@9e#9e#Qm#hX+]-+2R+4Z+lZ@wp#[V+J,@> +V_@J,@U;+k;=6j*qE%P2@F$+9m@,]+m;=X(+Ce$w6@`;#Jp#bs#oD#cd%t|%t|%li+ o+Zg+/f+/f+Zl+.>#o/##<$ji+ji+`b$)i#!i#ld+ 4+fF$D-=E-=dH*nV*zv*cz*3`*ez#~K#HN*]N*FD*!I#=a>=x>=x>=c>=c>=c>=d>=o =#N*f>=h>=h>=f>=&.=i>=$N*1X*3>=y>=k>=l>=2#=VI*~+=~+=MR#MR#$Q#$Q#-f%-f%$f%4;=~+=/e% 8#MR#Mq#W7#A7%U7#~2#,5#2*$l}%$5#Bf#Af#Af#_l#/K#bV#%H2$G2$;6$ 2#uT#6|$I#$:@$-X#Vl+Wl+oB#fi+On+Gg+*_+r0+=f+r0+s:+._+ @#oq#Ey#oq#Wl+X1#*f+=_+w:+w:+Ab+Ab+Jg+S`$1X#4m$4m$4m$7X#7X#7X#7X#1X#1X#9X#a>%a>%3X#,_+5X#6l$0p$0p$>o$ap$O*%N*%N*%DZ$/V$yZ$0l$3u$yV# 7@yV#gc@gc@gc@gc@!E$!E$xI$xI$6q$6q$;l$;l$6m$=l$7m$z>={8&jR$jR$jR$0S$0S$0S$)O$pR$bC${`# 7@yV#cs$21@Ab$=/+x:+pF$m%$SR#W+$1=$1=$Lg+Lg+Mg+ @#Xl+fi+fi+lc#ir+ir+Nl+Nl+Nl+qD+[T+[T+=o>=o>=r2*q2*p2*p2*^`#=B>=#N@xs*;t*sw*pW$Sw*Sw*.z*=4O*C>=)y#VH*no*| =rx*D>=^Y Ib#WD@_W%s=+7&+zI*o3.v5.qK#qK#@u%vC#zM+_($1<#SO+mh.mh.0, {h&!D+`b&B#@{y%'W+'W+TO&TO&TO&TO&TO&TO&TO&TO&`E&`E&`E&`E&TO&TO&TO&~h&zi.S>+S>+S>+US+US+US+US+G|@T_+q9+dl.8Y+8`#^v.1m.Ai.Kh+7P.Kh+T_+$(+T_+G|@T_+T_+T_+T_+T_+T_+T_+T_+xc+xc+$(+T_+G|@Kh+Kh+7P.T_+T_+T_+T_+T_+T_+T_+T_+f+#.k@R~$L'$m|.k##d%$CG#V&$k##V&$&A#m|.&A#m|.m|.G|@Kh+7P.7P.7P.7P.Kh+G|@G|@G|@G|@G|@Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+G|@G|@T_+T_+T_+dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.dl.xc+T_+G|@7P.7P.Kh+G|@T_+$(+T_+Kh+Kh+Kh+T_+xc+Ea+G|@G|@G|@G|@G|@G|@G|@G|@$(+$(+$(+xc+xc+xc+Ea+Ea+$(+$(+$(+$(+$(+$(+$(+$(+$(+$(+T_+T_+G|@G|@G|@Kh+l}+9g.}f.cI+cI+}f.9g.l}+aH@aH@aH@aH@aH@aH@aH@aH@Kh+Kh+7P.7P.Kh+G|@T_+$(+Kh+G|@G|@T_+T_+G|@", "|6.+) |6.b #V^$b #/#&x5.x5.8'%8'%8'%8'%M!.8'%[{.dD.Su$%j.is@x5.Vh.%j.x5.is@Vh.dD.Vh.is@x5.O7.is@is@is@is@is@is@is@is@O7.is@Vh.is@O7._r+xX%x5.Vh.Vh.is@x5.O7.xX%xX%_r+x5.O7.xX%x5.Vh.Vh.x5._r+xX%O7.is@Vh.Vh.is@O7.xX%x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%x5.x5.x5.O7._r+N7.x5.x5.x5.x5.x5.x5.x5.x5.=2n+f%$k, On _i X3.F>=*7.b[%vu.hi%+*=P%=H-*W'*TD.T-+7T@q1@:B@V,+V,+tc@tc@4W.D)+D)+D)++*++*+km$km$km$km$rr%km$D#$HK$D#$D#$D#$D#$M[#M[#*c$*c$Wk$Wk$Tj$Tj$,Z#,Z#,Z#,Z#,Z#Tj$Tj$ar$ar$ar$CO#ln$ln$ln$]m$ar$ar$ar$j%%j%%Bj$Bj$8F$Cj$^m$^m$^m$Dj$Ej$,p$_8$c9$b8$a9$,H$nw$nw$Ms$Ms$Rj$Rj$Rj$Ms$Rj$09$Ms$=J$=J$Hs$Sj$RA$Vk$Vk$Vk$RA$RA$RA$RA${m${m$CO#ln$ln$]m$=c$Cj$N1#zA#{^#{^#7V@7V@gX+gX+YK+YK+w;@w;@DD+DD+k#$DD+Q,+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+:P+T,@T,@T,@YK+YK+2 @5G+5G+;K@^^#^^#+:$+:$<^#<^#<^#<^#<^#Y.@=B+xI+xI+xI+1G+1G+x)+x)+=>+=>+4G+4G+5Z+5Z+iX+9e#fX+]-+U0+->+7=@8=@3G+#N+V_@T;+Ey*N:$Z=+6j*G>=k@=F$+F,+,]+X(+X(+m:+ $=[/#Jp#bs#oD#gJ#ex$ex$ex$|/#kp+Zg+/f+/f+Zl+.>#o/##<$ji+ji+`b$ri+Ug+)f+ 4+F_%D-=E-=~V*|-={V*)D*bs*ez#,K#,K#FD*; =dC*'I#tw#; =r==H>=I>=J>=iK*d>=K>=L>=M>=M>=f>=f>=w.=&.=L =i>=)+=TT*O.=N>=O>=O>=p+=!D*5B*5B* 8#MR#LR#$Q#$Q#$Q#P>=^r%$f%#f%MR#$Q#A7%95%95%;o#,5#Iq#l}%l}%I_$Cf#_l#_l#/K#bV#o$>o$ap$l$4q$En$En$`=*6m$rH&jQ$'O$'O$=r2*Q>=R>=q2*o2*=$@%tr$WL$lF$jF$iF$I$+I$+iF$kF$lF$lF$kF$iF$hF$|T+nq@nq@y)+S,+o=#o=#o=#cZ.,7$@>#H5$Ux%@r*q6@~-=#N@xs*;t*Pt*]w*Sw*nx*Q}*&x%,i*hX*'i*q>=%O*HJ$U]*iS*no*T>=Zx*U>=)1#V>=+n+^0.U`%zI*aR#D6.D6.DI#p!#@u%vC#zM+_($ X+SO+mh.sq*{h&{h&!D+!D+`b&`b&`b&`b&TO&TO&TO&TO&TO&TO&TO&TO&3]&3]&3]&`E&`E&TO&TO&>S%zi.S>+S>+S>+d #d #d #d #T_+Ea+6g+]$@dl.1m.h)@jy.Ai.7P.oh.7P.$(+xc+$(+G|@G|@G|@G|@G|@G|@G|@G|@G|@xc+xc+$(+T_+T_+G|@Kh+Kh+G|@G|@G|@G|@G|@G|@G|@aH@CG#lm#CG#lm#CG#Jr#QC#Jr#k##+h#&A#mm#L'$_Z@.k@3q@9g.7P.Kh+G|@G|@Kh+7P.7P.$(+$(+T_+T_+G|@G|@Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+G|@G|@T_+T_+T_+1m.1m.1m.1m.1m.1m.1m.1m.Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.Kh+Kh+G|@G|@G|@G|@T_+T_+G|@G|@G|@G|@T_+T_+$(+$(+G|@G|@G|@G|@G|@G|@G|@G|@$(+$(+$(+xc+xc+Ea+Ea+5A.$(+$(+$(+$(+$(+$(+$(+$(+T_+T_+T_+G|@G|@G|@Kh+Kh+9g.Bz$bH@}f.}f.bH@Bz$9g.aH@aH@aH@aH@aH@aH@aH@aH@Kh+Kh+7P.oh.7P.Kh+T_+$(+G|@G|@T_+$(+$(+T_+", "|6.Hf.^#&b #pD&b #/#&x5.x5.8'%8'%8'%8'%8'%8'%is@%j.3o.Su$Vh.is@dD.3o.is@Vh.dD.dD.Vh.is@O7._r+is@is@is@is@is@is@is@is@O7.is@Vh.is@O7._r+xX%x5.dD.Vh.is@x5.O7.xX%_r+_r+x5.O7.xX%x5.Vh.Vh.x5._r+xX%O7.is@Vh.Vh.is@O7.xX%x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.x5.is@x5.xX%N7.M7.x5.x5.x5.x5.x5.x5.x5.x5.=F2.>: .k Ht Tz r^%x2&X>=C*+I-*U{*(<*k%+`O@'m$+x@V,+tc@tc@tc@D)+D)+D)++*++*+km$km$km$km$km$km$HK$HK$HK$HK$D#$D#$D#$M[#M[#M[#Wk$!U#1r$1r$~}%~}%~}%~}%,Z#,Z#Tj$ar$ar$ar$CO#CO#ln$ln$]m$ar$ar$ar$I@%I@%j%%j%%8F$8F$5G$^m$5G$^m$Ej$qw$_8$_8$c9$b8$nw$nw$nw$>b$>b$Sj$Sj$Sj$Sj$,Z#,Z#ar$ln$CO#]m$!U#Vk$8o@1S#1S#=7$=7$=7$=7$RA$RA$jm$*c$*c$ar$qr%>b$ni$zA#{^#{^#7V@7V@gX+2R+4G+:P+Q,+Q,+ZK+ZK+P)@ZK+Q,+Q,+Q,+:P+:P+:P+:P+:P+zI+=>+=>+3G+7=@7=@wp#wp#7=@:P+YK+zI+X.@hX@+:$~-+ly+/w+ly+/w+ly+/w+ly+/w+#a@&B+&B+*B+zD+zD+lX++YK+YK+V.@5Z+5Z+5Z+WK+i~+#o/##<$LP#ji+B5$Qc$Tg+)f+I0+HX*a4%E-=li#F-=.f%oV*bs*ez#Y>=Z>='K#*u#`>=ku* ,=0*=.,=+,=@,=#,=$,=`B#x>=%,=&,=&,=EM*EM*i>=*,=*,==,=!+=6y*6y*6y*B.$!D*~+=$f%%Q#T0# 8# 8#!5#LR#!5#$Q#uO*-,=fs%LR#P0#Kc#[e%iv%;M*-5#%5#%K#l}%H_$+o#Cf#/K#/K#bV#k+Sl+gi+_k+sD+I6@#k+up+L)@L)@|=@K)@K)@ky+(s#%h%-}@H4#8D#)7$}C#fE#+'%Oi$;,=S[#2R+3]+S0+Pb+!k+L0+)-% _%Jg+5[+Ai$}X#XW$kU$LP$3|$K'%sv$/6$Y3+Y1#'|+//$%2+D_$Ly#Vl+`-$Vl+`-$-k+C:+w:+-|+(/$Tx$H#$B)$E:+6e@Pg+h0#Qg+oB#Xl+ @#Lg+-k+=_+=f+Jg+yD$*Z#oV#oV#oV#9X#9X#9X#9X#3X#3X#lK$lK$yL$yL$zD$kK$Si$$I%Aq$G=%yo$yo$Tp$Tp$Ao$yb$Hu$`0$XH@fK@XH@u^@$3@:1@#}#h8$$}#h($=Z#Qi$@u$-l$j.=3q$Sx**p$/>=En$;l$U[$JH$JH$5l$5l$@F$7m@_a@0X#0X#0X#11@;:@M<@K<@$}#g8$-6$:@$2t#w!$Zv#Zv##}#<1@:1@$3@GZ@GZ@WF#WF#ir+ir+(+@(+@gi+qD+qD+[T+_V+/G+dr+~P+=r2*A>=hY#bm@bm@18+|w+bm@sy+e1@*t@GD+GD+*t@*t@e1@f1@f1@sy+8$@mq@k#$mq@8$@I@@8$@mq@-4+ly+<^#I@@8$@^K@mq@k#$fm$!K@w;@R)@w;@>K@,K@X>%;K@R,+5&@gX+fX+| @lZ@U<#>,=S>=$@%hm$lF$jF$I$+-,$I$+iF$kF$lF$lF$kF$iF$|T+BO@e'#nq@y_$S,+o=#(K@I_@6]+;>+x_$@>#yg%Ux%@r*!-=xs*xs*;t*Pt*Sw*.z*Q}*~E*F%=,,=4`*LX*',=%O*),=!,=mN*no*~,=Zx*v^&x*.{,=t=+^0.@:+zI*NR*:^+:^+'Z%DI#vC#vC#zM+_($ X+SO+mh.sq*>S%~h&`b&!D+>n.>n.;n.;n.TO&+y&TO&+y&TO&+y&TO&+y&O4%@d+3]&Be+`E&+y&TO&>S%J> S>+';$d #u]#u]#:{+:{+T_+Ea+)> 6g+q9+dl.jy.)> T_+7P.y4&7P.$(+Ea+$(+Kh+G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+G|@T_+$(+$(+xc+xc+G|@G|@G|@G|@G|@G|@G|@aH@L}$g[$g[$h8.t#$t#$QC#QC#k##k##&A#L'$.k@3q@4q@;o@d%$';$u]#:{+:{+u]#';$US+:{+:{+u]#u]#d #';$';$';$G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+G|@G|@T_+T_+T_+1m.1m.1m.1m.1m.1m.1m.1m.Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.oh.7P.Kh+T_+$(+$(+T_+T_+7P.Kh+G|@T_+$(+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+$(+$(+xc+Ea+Ea+Ea+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@Kh+Kh+Kh+}f.bH@Bz$9g.9g.Bz$bH@}f.aH@aH@aH@aH@aH@aH@aH@aH@US+23+OP*OP*OP*US+d #u]#';$T_+$(+$(+$(+$(+", "^#&dD.Vh.x5.O7.x5.is@Vh.%j.%j.dD.O7.xX%xX%x5.is@is@is@is@is@is@is@is@x5.x5.x5.is@is@Vh.Vh.Vh.N7.N7._r+_r+_r+xX%xX%xX%x5.x5.x5.dD.Su$3o.dD.is@++J%#iq ],=S`+#^.X9 |'%PS*.k 0Q ^,=.c%X>=H-*=2*V)*(8%<-@g>@G~+G~++x@#*+d_+@h+@h+@*+@ +@ ++*++*++*++*++*++*+I4@k<&}x@}x@8o@8o@1S#D#$D#$4[%m~+>>+>>+m~+!U#Wk${m${m${m${m${m${m$CO#CO#CO#CO#ln$ln$=c$>b$>b$Tj$5d$A4#5d$5d$Cj$Cj$^m$^m$cN$a9$b9$b8$d9$d9$5($_8$N)$O#%K$+po%K#$vy+3w+Q'$sD$&c$&c$/a$N@%N@%4w+4w+8I#8I#8I#8I#k<&k<&1S#1S#Fs%Fs%pr%)]$)]$(a$J8%ar$,b$^N#yU#^N#eh$4%$[ @} @3G+dX+< @6=@zD+=B+xI+xI+Q)@lX+3 @3]+3]+>T@=>+T,@[V+7=@8=@eX+[ @}V+l#$ui$eX+>}@T,@T_@ZK+#a@4 @,B+O)@:w+&N++>B+E+$,T@SQ@'K@CO@F@@UR$TR$)I$CM@K:+DI+qZ@[H#-K@6y+:f+c~@G$+)[+)[+De@+k+//+5~+%f+%d$=U&=Wv*o+=2,=3,=#O#/E#gV#:2#(2#/5#]5#{5#W7#{5#!5#W7#W7#)5#Y7#J0#^2#Jc#Oc#Oc#=5#=5#=5#9<$9<$7<$G_$+o#ei#_l#77$di#DB#Af#_l#bV#[X#Ve$Mx$Mx$Nx$bV#/K#/K#/K#_l#_l#Af#Af#>2#Hq#oT#$o#|2%Rx$PR#q[%-Q#)w#m>=sB#.I#y0+^6+<[+RR#g8$W+$1=$oq#W1#}t#`+#P0+Q0+fD+ED+,B+P,+[P+$t@AI+:/#gX@N1#-b&oq@LB$k,%z4#%R#Yk$6~@`[#fc#9c#n=#n8+Eb+[[+H(% Y$}]%KP$,`$4,=|$%KR$us$e<$2I#'|+,6+X3+&2+Es$;6+gd+&2+7q$'6+u.$wB#Y3+^>$6[+$;$L`#Ty#E0+Fb+>6+ G#Un#+w#q7#F:+F:+@4+Mg+-k+-/+;/+rV#8g$!-%n)+8G$8G$o)+ek%b~+xd%(]+(]+%.%%.%5d%Nj$cm$0d%rh$b~+io@a~+9j$nA$]8%--+UH@O)$hm+jm+&}@x=@v~@ic@E:++*$r:+8[+cO$YM$;_+;/+/g$@Z#j.=En$5,=6,=7,=0X%c%%$;$5[+hD$B:+tv$Jg+Jg+x:+=_+-Z#dE#]]+0~+2(@]]+^]+'.$@}#kw$og@7d%ue@hc@fK@cc@`H@%7@WE&WE&7*$4k@3&@=g$m8+~_+$a@(+@>k+k)+.}#rD+^V+{G+/G+[T+gp+~G+cr+cr+Ft+@w+Lx#Lx#mD#Mx#Mx#~P#Px#a1* 2*a1*`1*$v$3~#wr+wr+6Z+X{@L@+L@+6T+}a@S.+S.+;m+:|+/w+Y.@Y.@cB@cB@cB@cB@cB@cB@cB@cB@cB@H@@H@@H@@H@@cB@x;@w;@8G+5G+5G+2 @2 @4G+4G+2R+4Z+4Z+4Z+mZ@mZ@~^#~^#~^#aN$rr$!l$5($5($5($5($d9$n%$pw$5($d8$b>%n%$pw$_P+oZ@_/#r|${}$_/#_/#0+,0+Av&Av&-~@;n.>n.>n.!D+!D+Xw&_|*+y&VD@.y&kt*)A&(-= ==PB@)A&(-=%z&VD@.y&>S%zi.';$G|@Kh+7P.7P.oh.oh.T_+G|@Kh+Kh+G|@T_+xc+5A.T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+G|@7P.7P.G|@T_+be+xc+G|@Ea+5A.T_+Kh+G|@bH@aH@9g.Bz$bH@}f.aH@Bz$9g.aH@}f.cI+cI+}f.aH@RO+9&+9&+x}*S>+pK+pK+FG*FG*x}*x}*x}*x}*x}*x}*x}*x}*d #G|@G|@Kh+7P.7P.oh.oh.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+aH@aH@aH@aH@aH@aH@aH@aH@9g.9g.Bz$aH@aH@bH@bH@}f.7P.7P.Kh+G|@G|@T_+$(+$(+T_+$(+xc+Ea+Ea+xc+$(+T_+7P.Kh+G|@Kh+7P.7P.Kh+Kh+T_+T_+T_+T_+T_+T_+T_+T_+G|@7P.oh.7P.G|@G|@Kh+oh.T_+T_+T_+T_+T_+T_+T_+T_+aH@aH@aH@aH@aH@aH@aH@aH@Bz$aH@aH@bH@}f.}f.l7 R~$q)@p)@ (&lC&S>+S>+S>+S>+9&+u]#u]#u]#u]#u]#", "%j.Su$%j.is@x5.is@dD.Vh.%j.%j.dD.O7.xX%xX%x5.is@is@is@is@is@is@is@is@x5.x5.x5.is@is@Vh.Vh.Vh._r+_r+_r+xX%xX%O7.O7.O7.x5.x5.x5.Vh.%j.%j.Vh.O7.=H-*=2*V)*W'*9]&g>@[-+)>+G~++x@#*+d_+@h+@h+@ +@ ++*++*++*++*++*++*+4)#2)#k<&}x@}x@}x@1S#1S#=7$D#$4[%_-+m~+K[#M[#L[#jm$jm$jm$jm$jm$jm$ln$ln$]m$]m$]m$]m$>b$>b$>b$ar$A4#A4#A4#5d$5d$Cj$Cj$^m$_a$Ej$Ej$b8$c9$c9$d9$c9$N)$O#%K$+po%K#$I3$3w+rr%&c$|0#|0#3)#wy+R2@R2@l #8I#iB@8I#8I#8I#k<&k<&1S#N@%Fs%Fs%)]$y7%J8%J8%qr%ni$yU#+z$^N#B+3 @~-+3]+>T@=>+:P+[V+7=@eX+eX+o7#4%$l#$ui$U{@>}@,}@< @zD+mX+}=@}=@|=@Rt+Il+Rt+T##Sm#mX+m;@g~+ED+|=@}=@my+_w+ny+O)@k#$k#$DO@SQ@DO@6$@Uv#BU$FO$Tv#nz#DI+V.@1 @g[+Gq@c~@_/+2V#7a@Ee@Ee@>G+e)+6~+5k#Cg+][+Dg+Rl+@_+Fg++_++_+~/+Lb+Lb+:6+%4+'k+7}@7}@wp+wp+I(%}}@v!$v!$VA#LP#G`#Qc$Jn$!i#~i#cF$e,=f,=1l#{o#75#g,=&g#Nu*Mx*Mx*mu*(v*uo#$d#h,=Vs*i,=j,=k,=l,=m,=lo#uo#6v*,K#XB#-K#Bt*Bt*n,=n,=p.%WL#;O#='E#.I#QL#!|+:[+/6$//$g8$#w#Vl+oq#-E#u&@U_@Q0+fD+ED+,B+mX+Gn+.N+jX+nZ@[{#M1#^m$8F$eD$cE$BA#o,=p,=[<*T1#q,=k:%@b$([+,:#@n%K<%vT$xn$$l$r,=s,= Z$$l$>6$ts$&M$C0+~6+;6+)|+y0+y0+d8+>6+'6+)E#Ry#UY#>X#$;$K`#K`#K`#,X#F7#EC$C7#LL#y7#Sg+a[+Vg+=g$$a@E:+;k+g($vT## $y:+'i$$_+[9@zb+m)+9G$1H$B4%vL$yD$sV#6-%5d%rU$)l$o!%r6%vL$xd%a~+`g$#/%>R@EB$<^$k+&k+='@Jt+^V+Mn+69@69@_V+{G+q;@gK@U_@|G+(t#(t#gh#MF@ih#t9#6Y#WA#Q3*Q3*f4*ZA#=K@ry+M@+M@+wr+X{@L@+6T+;m+;m+&N+(w+Y.@;B+;B+3 @cB@8G+8G+8G+8G+8G+8G+8G+X.@^^#^^#^^#^^#X.@8G+R)@5G+5G+5&@5&@5&@4G+2R+2R+M+#M+#M+#mZ@]N#]N#S[#S[#rr$0N$!l$5($d8$d8$5($5($b>%d8$5($5($pw$b>%pw$Wx$oZ@_/#{}${}$_/#_/#0+&, 0, >n.>n.>n.!D+!D+{h&+y&z9.VD@VD@VD@VD@kt*kt*(-=(-=(-=kt*kt*kt*kt*>0+|m.T_+G|@G|@Kh+Kh+7P.7P.G|@Kh+7P.7P.7P.G|@$(+xc+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+]! $(+7P.oh.Kh+G|@7P.iS.xc+oh.y4&T_+xc+T_+G|@T_+T_+G|@7P.Kh+T_+$(+G|@Kh+7P.G|@$(+Ea+Ea+$(+G|@23+pK+GJ@lC&lC&lC&lC&lC&GJ@lC&lC&lC&lC&lC&lC&lC&x}*';$G|@Kh+Kh+Kh+Kh+7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+9g.9g.Bz$aH@aH@bH@}f.}f.Bz$Bz$aH@aH@bH@bH@}f.}f.T_+T_+T_+T_+G|@G|@G|@G|@T_+T_+xc+Ea+Ea+xc+T_+T_+Kh+G|@G|@G|@Kh+Kh+Kh+G|@T_+T_+T_+T_+T_+T_+T_+T_+T_+Kh+7P.7P.G|@T_+G|@7P.T_+T_+T_+T_+T_+T_+T_+T_+aH@aH@aH@aH@aH@aH@aH@aH@}f.}f.}f.bH@bH@bH@bH@m|.p)@z,=A,=B,=GJ@GJ@GJ@GJ@9&+9&+u]#u]#u]#u]#", "Su$3o.Su$Vh.is@Vh.%j.Vh.dD.%j.Vh.x5.xX%O7.x5.is@is@is@is@is@is@is@is@x5.x5.x5.is@is@Vh.Vh.Vh.xX%O7.O7.O7.x5.x5.is@is@is@x5.O7.x5.Vh.Vh.O7._r+9 L==&X.z1 %]%AK%^,=.c%X>=H-*=2*V)*(8%<-@[-+`|#`|#)>+G~++x@#*+Ar+Ar+@ +@ ++*++*++*++*++*++*+K6@4)#I4@k<&8o@8o@8o@1S#Vk$=7$M[#M[#M[#M[#*c$jm$)g$)g$)g$)g$)g$)g$)g$)g$S5+S5+S5+S5+-c$-c$-c$)g$Ss@Ss@Ss@A4#A4#5d$5d$Cj$'M$@d$@d$,p$,p$Ej$b8$Ej$J$+09$Rj$=k$T4$j %~}%!U#M[#D#$=7$1S#1S#}x@}x@3z@k<&6u%JO$JO$k<&1S#1S#=7$Vk$RA$L[#*c$80$qr%qr%Sj$Dj$Jc&+z$yU#yA#{^#oi$U.@>}@>}@r<@r<@{k#2h#bX+bX+0~@>B+3 @f^@hX@>T@=>+:P+AI+3G+eX+eX+}V+4%$l#$ui$U{@u'%r<@< @=B+P,+ED+Rt+tr+QK+2V+g~+,B+0~@P,+S0+rr+1R+|=@}=@ED+Rt+ny+O)@^K@mq@mq@mq@6$@G@@%o%w)${K@CM@6G+6G+5G+-K@BD+36+G$+2V#De@Ee@Zv+WM+ -+F,+Z}+dc#&f+9d+~/+~/+@_+Fg++_++_+~/+Lb+Lb+:6+%4+'k+7}@wp+wp+wp+}}@}}@zR#zR##<$UA#q.$`b$*H$~f+*2+G0+C,=a/#<}#D,=E,=F,=Fi#Rc#Mx*FE*(v*,g#Dt*ro#G,=H,=I,=J,=K,=L,=M,=N,=O,=P,=Yt#cw#cw#cT#Q,=R,=S,=T,=WL#ll#ZP#*8#/2#[w#Y7#Y7#Y7#Y7#!5#!5#Y7#Y7#[w#^2#Jc#Oc#=5#=5#_u*_u*9<$Q[$4|%G_$H_$+o#Af#Af#EB#EB#Af#_l#/K#o#>o#h}%-[%~:#!w#,E#'E#.I#QL#.4+x0+g($/6$I#$W+$1=$fi+v&@s=@gK@R0+FD+}=@,B+#a@=B+1G+K #lZ@~^#S[#lw$2h$2h$2h$yU#si$9~@sb+8L#U,=jU*#[%bx$b8+b7%f_%fr$@l$VX$V,=WX$1v$_q$c($67$VP$3I#g8+-6+c8+&2+>6+,6+,6+)E#)E#UY#5V#,X#$;$5*$+;$5*$@;$I~%F_$B7#Hy#{|+a[+Of$,d$,d$Of$+4+ed+Es$%2+//$;|+Bb+s0+pF$YM$Jg+I#%Hg+'&%yD$&y$6-%S*%zD$q1$k_%RR$m>%r6%(]+b~+ml%!-%`g$.h$.h$8e$R;@58+v^@L<@we@%3@@4+{f++4+!|+r:+8[+m%$(/$c0$8q$6q$DJ$,l$4q$W,=@Z#X_$-}#-}#2G#'A$5I#k+='@='@0X+It+hp+:o+oI+sI+sI+oI+!G+q;@gK@gK@:V+tI+tI+hh#ih#ih#ih#6Y#mD#f4*f4*f4*ZA# N@N,@']@+5@M@+wr+L@+6T+(w+(w+_w+my+*>+0G+0G+lX+cB@8G+8G+8G+8G+8G+8G+8G+^^#[|+[|+[|+[|+^^#X.@8G+5G+2 @5&@5&@4G+4G+gX+gX+nZ@nZ@M+#M+#]N#]N#]N#S[#~l$!l$d9$d8$pw$pw$pw$d8$pw$5($!l$d9$d8$pw$d8$00$oZ@_/#{}${}$A,+A,+H*lC&p)@|7.p)@ (& (&lC&lC&lC&lC&lC&lC&lC&x}*US+Kh+Kh+Kh+Kh+G|@G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+>( >( 9g.Bz$bH@}f.l7 l7 aH@aH@bH@bH@bH@}f.}f.}f.Ea+xc+xc+$(+T_+G|@Kh+Kh+G|@T_+$(+$(+$(+$(+T_+G|@T_+G|@G|@G|@T_+T_+T_+G|@T_+T_+T_+T_+T_+T_+T_+T_+$(+G|@Kh+G|@$(+$(+T_+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+aH@aH@aH@aH@aH@aH@aH@aH@cI+l7 l7 }f.bH@aH@Bz$d%$ (&A,= (&lC&lC&lC&S>+S>+u]#u]#u]#u]#$(+$(+", "%j.Su$%j.Vh.is@Vh.dD.is@dD.%j.Vh.x5.xX%O7.is@is@is@is@is@is@is@is@is@x5.x5.x5.is@is@Vh.Vh.Vh.x5.x5.x5.is@is@Vh.Vh.Vh.Vh.x5.xX%xX%x5.x5._r+M7.+q1@`|#`|#)>+G~++x@tc@tc@@ +@ ++*++*++*++*++*++*+BM#K6@4)#k<&8o@8o@8o@1S#Vk$=7$L[#L[#L[#L[#*c$jm$Di$Di$Di$Di$Di$Di$Di$Di$'M$'M$y4#y4#S5+-c$-c$5d$7I#d=@7I#7I#4d$4d$)g$)g$8]+'p$'M$,L$@d$_a$_a$a9$J$+4($%K$09$90$%*$T4$Tj$*c$L[#L[#=7$=7$1S#8o@}x@JO$JO$JO$J_%1S#=7$=7$L[#L[#*c$]m$ar$>b$>b$17$Rj$Dj$mw$Q[#+z$yA#{^#oi$pi$} @u'%,}@,}@{k#{k#jy+bX+>B+0G+3 @f^@hX@>T@zI+=>+zI+3G+wp#[ @}V+BI+[ @} @u'%,}@T_@zD+P,+g#jv**'=<,=='=-'=;'=>'=,'=''=)'=!'=~'={'=]'=^'=Mi#eT#,I$/'=('=('==G#YP#ll#}5#`P#/2#^5#Y7#Y7#!5#W7#W7#W7#!5#Y7#Q7#Rc#L0#=5#_u*_u*_u*Q[$Q[$4|%G_$G_$H_$EB#EB#EB#EB#Af#_l#/K#bV#bV#/K#/K#_l#[X#[X#[X#o#,o#eh%_'=r<%C7#Ky#'E#.I#.I#~|+y0+g($g($I#$SR# @#Xl+='@mD+U_@R0+:&@|=@|=@K)@0~@W{@)<%K #lZ@~^#Qj$M1#M1#M1#S[#5h$T_@Cq@9>=:'=<'=['=F(%th%C4%6^%`t$|m$}'=|'=1'=F+%zi$]b$>6$}]%%/%:z$06%':#~6+'6+f8+Uy#)E#z0+Ty#^>$$;$@;$+;$&2#&2##2#qD$ 4+Gy#~i#0[+Of${f+dx$]f+{f+0[+~|+.I#>6+'6+z0+2u$5[+>|+5[+sv$&y${-%&y$KC$KC$KC$KC$T[$q1$tO$PP$QP$sU$,/+sV#vL$ml%!-%f3%n)+q0+;:@11@6k@gc@% $e8$ed++*$+*$9[+r:+8[+m%$m%$7|$$u$SG$JH$IH$wV#FS*6X#VP$21%1G#1G#g_%$1%4 %4 %*y$%>%Jg+=f+^]+dE#h($xT#^]+$}#we@}9@:a@ue@fK@|T@x)&x)&),&),&*^$*^$5_$>]@58+Gg+Z6@jp+Jt+='@-]@-]@hp+:R+:o+oI+>'$>'$9s#.q+cr+gK@gK@)B+@w+@w+hh#ih#ih#ih#xU#6Y#5K&5K&5K&ZA#%I@%q+y^@']@M@+wr+L@+L@+e^@my+my+ny+0G+>B+P)@P)@cB@8G+8G+8G+8G+8G+8G+8G+[|+[|+X&+X&+X&+[|+X.@X.@2 @2 @5&@4G+4G+5$@gX+gX+nZ@nZ@nZ@M+#yA#]N#]N#]N#!l$d9$5($d8$pw$pw$b>%b>%d8$d9$!l$!l$5($d8$5($[{#oZ@xW#A,+{}${}$t*EP*^x*PH*n*&2'=3'=4'=5'=6'=7'=8'=9'=0'=wR 8I+a'=HX@L b'=;n.$0+U`%@:+e{+e{+v5.v5.2p%2p%zM+_($_($1<# X+ X+Nc&Nc&%' %' B#@`b&`b&!D+!D+>n.)A&(-=kt*VD@VD@z9._|*_|*z9.VD@VD@kt*(-=(-=PB@&, *$@$(+$(+T_+T_+T_+T_+T_+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@Ea+G|@y4&iS.7P.7P.y4&w5&oh.o{+o{+7P.$(+G|@G|@xc+T_+G|@7P.Kh+T_+$(+G|@Kh+Kh+G|@T_+$(+$(+T_+G|@US+FG*zw* (&|7.|7.p)@ (&GJ@GJ@GJ@GJ@GJ@GJ@GJ@GJ@S>+23+7P.Kh+Kh+G|@T_+T_+$(+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+9g.Bz$Bz$aH@aH@bH@bH@}f.bH@bH@bH@bH@}f.}f.}f.}f.xc+xc+$(+$(+T_+T_+G|@G|@G|@G|@T_+T_+T_+T_+G|@G|@$(+T_+G|@T_+$(+xc+$(+G|@G|@G|@G|@G|@G|@G|@G|@G|@xc+T_+G|@G|@$(+xc+$(+G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+aH@aH@aH@aH@aH@aH@aH@aH@l7 }f.}f.}f.bH@aH@aH@V&$lC&B,= (& (& (&lC&x}*S>+d #d #d #d #T_+T_+", "dD.%j.dD.x5.O7.x5.Vh.x5.Vh.dD.Vh.x5.O7.x5.Vh.is@is@is@is@is@is@is@is@x5.x5.x5.is@is@Vh.Vh.Vh.x5.x5.is@is@Vh.Vh.Vh.dD.Vh.x5._r+_r+xX%O7._r+M7.+q1@`|#`|#)>+G~++x@tc@tc@@ +@ ++*++*++*++*++*++*+BM#K6@YJ#HK$1S#1S#=7$D#$L[#L[#L[#RA$jm$*c$*c$*c$7F$7o@7o@7o@7o@7o@7o@7o@x4#x4#7o@7o@1h$!g$!g$6d$D]%D4#D]%D]%D]%D]%)7$)7$I3+H1#H1#x4#7o@7o@1h$ni$47$c9$b8$,p$qw$J3$,L$S5+Bj$'7$A4#Ss@Ss@fE#fE#J_%J_%J_%J_%fE#fE#Ss@Ss@A4#5d$5d$-c$-c$Dj$_a$%K$Ej$2h$Jc&mw$Jc&zA#gX@nZ@ui$} @8=@,}@,}@T_@T_@{k#2h#9G+9G+3 @3 @>T@>T@x)+zI+{-+[V+7=@7=@[V+[V+7=@8=@8~@r<@6=@=B+P,+:w+g~+QK+fD+5T+5T+g~+ED+|%]8#e'=,s*f'=F5%Gi#hl#/I#)C#*g#'C#*'=g'=h'=i'=j'=k'=k'=l'=m'=n'=o'=p'=q'=r'=7$%{z#s'=t'=u'=v'=6G$fD$YP#ZP#*8#/2#[w#^5#!5#W7#A7%95%95%A7%W7#;o#Rc#L0#_u*_u*_u*~C*Q[$Q[$G_$G_$G_$G_$#G#yf#EB#EB#Af#Af#_l#/K#/K#/K#_l#_l#[X#[X#[X#o#eh%w'=p<%gw$Ky#'E#.I#W4#V4#QL#m%$I#$RR#X1# @#Xl+Jt+mD+U_@vr+<&@|=@}=@w)+#a@c^@t;@S,@,K@E@@Xx$Qm#Qm#Qm#lZ@8~@P8%x'=y'=z'=Zn*A'=B'=d:%2v$zS$>`$ Z$C'=D'=E'=F'=&#%zi$Y4$>6$b<$%2#4I#h8+C0+z0+wB#UY#5V#Ty#$;$$;$K`#5*$+;$&2#]>$%2#~6+)|+y0+.4++4+{f+ze$ze$ze$Ae$!f+,f+Hy#A7#C7#I`#5*$ci#^l#ci#7T#0T#$2#]>$]>$]>$]>$]>$$2#ts$DO$q1$k_%)l$0d%kK$%.%(]+9g$[z$ml%Pi$=/+;/+rV#qV##Z#Z%$8[+l8+q:+2/#<[+<[+=_+=_+V[$oW$=Z#rV#mK$mK$wI$pe%DO$1G#y|%y|%g_%$1%C-%4 %*y$I#%Ig+Jg+=/+-Z#wT#h($*/+xT#,.$yT#L<@ai@ec@(a@;]@,:@.:$.:$8)$8)$,K$4(@D4@2}@t~@1}@ic@ic@rI+rI+:o+%!@%!@Ip#9s*9s*nW#+s+Ft+]G+]G+gK@%n%$d8$d9$!l$!l$5($d8$5($[{#oZ@xW#_/#{}$g)#g)#n.)A&)A&%z&.y&.y&+y&Xw&Xw&+y&.y&.y&%z&)A&)A& ==&, |m.T_+T_+T_+T_+$(+$(+$(+T_+T_+T_+T_+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@y4&7P.G|@7P.iS.]@+7P.T_+T_+y4&iS.G|@xc+G|@Kh+T_+T_+G|@7P.Kh+T_+$(+G|@Kh+Kh+Kh+G|@G|@G|@G|@Kh+US+x}*lC&p)@p)@p)@lC&zw*>H*GJ@GJ@GJ@GJ@GJ@GJ@GJ@S>+23+Kh+Kh+G|@T_+T_+$(+$(+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+}f.bH@bH@aH@aH@Bz$Bz$9g.bH@bH@bH@bH@bH@bH@bH@bH@G|@G|@G|@T_+T_+$(+$(+$(+G|@G|@Kh+Kh+Kh+Kh+G|@G|@xc+T_+Kh+G|@xc+Ea+$(+Kh+G|@G|@G|@G|@G|@G|@G|@G|@xc+T_+G|@G|@$(+xc+$(+G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@bH@}f.}f.}f.R~$S>+GJ@ (&p)@q(#9&+x}*S>+d #d #T_+T_+T_+T_+", "Vh.dD.Vh.x5.xX%x5.is@x5.Vh.dD.Vh.x5.O7.x5.Vh.is@is@is@is@is@is@is@is@x5.x5.x5.is@is@Vh.Vh.Vh.x5.x5.x5.is@is@Vh.Vh.Vh.Vh.O7._r+_r+xX%O7.O7._r++G~++x@#*+Ar+Ar+@ +@ ++*++*++*++*++*++*+4)#4)#HK$HK$HK$HK$4[%_-+M[#M[#L[#RA$jm$*c$Wk$)g$1h$1h$1h$1h$1h$1h$1h$1h$1h$1h$1h$1h$!g$!g$!g$Oe$`z$G1#`z$`z$`z$`z$z4#z4#H1#H1#H1#x4#x4#x4#x4#,b$47$c9$b8$,p$qw$J3$,L$S5+Bj$'7$'7$Ss@Ss@fE#d=@X_#J_%J_%fE#fE#Ss@Ss@A4#A4#Cj$-c$Dj$Dj$Ej$Ej$c9$c9$,b$2h$Jc&2h$N+#B2$gX@M+#eX+eX+8~@r<@T_@< @2h#< @9G+9G+9G+9G+x)+x)+x)+x)+{-+=>+T,@3G+=>+[V+:P+kX+2G+1G+=B+P,+2#fi#&o#&o#$}%%o#h}%*)==[%F_$tq#tB#W4#W4#if#.I#SR#SR#X1# @#Xl+>k+#/+mD+)B+.B+#9@}=@g~+Qt+P,+M2@R,@s;@]K@)K@zM@9e#9e#fX+~g$$t@Mg*=)=-)=Co*;)=>)=,_%e:%iw$j.%,)=}'=E'=')=))=!)=~)=&#%YK$dh$67$$2#'A$3G#2I##;$^>$^>$$;$$;$$;$$;$VY#K`#5*$+;$]>$&M${6+/>$x0+)|+)|+!|+.4+ld+Ib+I0+cF$2i#s0#t0#p'$1@$Af#G7#Aq#5@$~X#8V#8T#7T#&2#&2#1I#1I##2#:z$3I#<=%pe%Ci$N^%,/+jk%(]+_]+#1%9g$vL$5X#pe%Mj$Mj$As$A:+2[+&|+&|+&|+W3+W3+Ab+Ab+=Z#;/+5X#%.%jk%jk%/U$4X#DO$1G#1G#1G#t_%t_%*Z$*Z$&y$'&%yD$Jg+8g$=/+;/+-/+a~+^]+dE#8G$*3@hc@:a@v^@`0$w^@BT#N<@4(@a{$x|#p0$31@(a@ec@<9@4k@4k@rI+J$*49@Ip#:/$^'$nW#2N&n{$+s+Ft+]G+SA+]G+~P+B+cB@cB@cB@cB@cB@cB@cB@cB@CD++:$+:$+:$+:$CD+H@@8G+w;@YK+4G+5$@5$@jX+fX+fX+7V@7V@7V@nZ@{^#yA#yA#yA#d9$!l$!l$d9$d9$d8$b>%b>%pw$5($!l$d9$d8$pw$d8$00$oZ@I4#xW#{}$tD@tD@*pq.q3 2D.B#@jb%:m%zI*zI*zI*o&=o&=DI#|r%vC#zM+_($1<# X+SO+mh.mh.~h&~h&`b&!D+!D+!D+!D+!D+%z&%z&.y&.y&.y&.y&+y&+y&%z&%z&%z&%z&%z&)A&)A&0, /{ G|@G|@G|@T_+T_+T_+T_+T_+$(+$(+xc+$(+T_+G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+o{+7P.$(+G|@]@+w5&Kh+]! Ea+Kh+7P.$(+xc+T_+Kh+T_+T_+G|@7P.Kh+T_+$(+G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+US+9&+ (&lC&GJ@zw*>H*>H*>H*zw*zw*zw*zw*zw*zw*zw*pK+';$G|@G|@T_+T_+T_+T_+T_+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+l7 l7 }f.bH@Bz$9g.>( >( bH@bH@aH@aH@aH@Bz$Bz$Bz$oh.7P.7P.Kh+G|@T_+$(+$(+G|@Kh+7P.7P.7P.7P.Kh+G|@xc+G|@oh.Kh+$(+Ea+T_+7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+$(+G|@Kh+G|@$(+$(+T_+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+aH@aH@aH@aH@aH@aH@aH@aH@Bz$Bz$aH@bH@}f.l7 l7 f+#FG*GJ@ (&p)@q(#q(#x}*S>+d #d #T_+T_+T_+T_+", "dD.%j.dD.is@x5.is@Vh.O7.is@dD.Vh.x5.O7.is@dD.is@is@is@is@is@is@is@is@x5.x5.x5.is@is@Vh.Vh.Vh.O7.O7.x5.x5.x5.is@is@is@Vh.O7.N7._r+O7.is@is@x5.+)>+G~++x@#*+d_+@h+@h+@ +@ ++*++*++*++*++*++*+HK$HK$1S#HK$D#$_-+.*+W,@m~+K[#Wk$*c$*c$Wk$Tj$7F$ni$AA#AA#AA#AA#AA#AA#AA#os$os$os$os$9D#9D#9D#9D#z4#z4#z4#z4#z4#z4#1h$1h$x4#x4#x4#N;$K1#K1#K1#K1#47$c9$b8$,p$qw$J3$,L$S5+j%%'7$'7$C4#Ss@d=@d=@X_#1S#k<&1S#1S#=7$L[#A4#A4#-c$-c$2h$N1#[{#00$vp#00$,L$S5+2h$,b$:8$U4$oZ@7V@[ @[ @3G+3G+2G+2G+6=@6=@3 @9G+9G+9G+x)+x)+x)+>T@>T@G+U.+6{%pX@pX@m;=O@+22%[/#w'#Y8@Z(+Y1+Dg+~/+~/+~/+_6+:6+,k+=:@'k+`l+2Z+2Z+vp+vp+`A+`A+N{$N{$0c#^d$ac#Qc$Jn$~f+I0+j8+pD$q[%12%,o#jw$~}#-8#|2#jz#jz#gl#R'=_)=:)=<)=[)=})=|)=1)=2)=3)=4)=5)=6)=7)=8)=9)= L$Y@%),%0)=a)=n.%b)=Mi#XP#@N*DM**s*i.%BV$S0#Z7#LR#$Q#LR#LR#P0#S7#S7#'c$T7#T7#;M*F[%F[%C}%B}%oA%oA%A0#H~$Cc#zf#yf#EB#_l#bV#2#fi#OR#OR#s[%$}%j}%u<%%2%qD$'E#tB#W4#>f+i0#V4#TR#TR#1=$Wl+Xl+ir+rD+N0+_T+#k+#9@ED+2V+d[+m;@#a@:s#Sm#r;@Q)@YK+5&@R,+5G+|V+3~@ub#c)=d)=e)=f)=g)=h)=%Z$nO$}!%i)=j)=k)=l)=m)=n)=o)=p)=#p$+O#Nx$3~%-}#&}#-}#=}#-2#-2#=2#=2#0($X%$^$$^$$DB#77$(K#]>$hD$;t$;t$Nr$$2+!6+)6+>6+i8+`3+zC$at#of#B!$~/$ (%Af#G7#Aq#Aq#J`#~X#qT#VY##2#2I#T@%C0+Z3+Z3+{6+Nr$c0$;G$_V$$I%0p$tV#Rl$>t$/g%$I%,/+Nj$)l$&<%><%Mj$wL$=y$wL$wL$wL$wL$lE$AD$6-%AD$Nj$Nj$Nj$Nj$Mj$zD$%/%^!%^!%^!%%/%%/%S*%S*%KC$<=%S`$'_+5X#>/+rV#8g$=y$Bb+Bb+qF$a~+dE#yT#0~+0j$Oc$E4@I2@I2@E4@A;$A6@5}@|T@re@kg@'K$1+*mQ&q)=r)=%`#F]$E]$F]$s)=s)=k@*Ft+]G+SA+SA+Ft+~P+hh#t9#t9#ih#-3@O<@k@*0!$5K&Px#tW#z$+!B+y;@y;@N)@N)@M@+X{@L@+6T+J@@e^@my+my+*>+cB@cB@cB@cB@cB@cB@cB@cB@H@@CD+CD+CD+CD+H@@cB@R)@w;@YK+5$@5$@jX+jX+fX+fX+7V@7V@7V@7V@{^#{^#yA#yA#!l$!l$~l$~l$!l$5($pw$b>%b>%d8$5($5($pw$b>%pw$Wx$oZ@I4#xW#{}$Fn+Fn+0+&, 0, >n.>n.>n.!D+!D+!D+>S%>S%~h&~h&~h&~h&{h&{h&0, 0, 0, {h&{h&{h&{h&{h&h~ 7P.Kh+Kh+G|@G|@T_+T_+G|@T_+$(+$(+$(+G|@7P.oh.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.G|@$(+G|@oh.y4&G|@Ea+Ea+Kh+oh.$(+Ea+T_+Kh+T_+T_+G|@7P.Kh+T_+$(+G|@Kh+G|@Kh+Kh+7P.7P.Kh+Kh+';$x}*S>+FG*b=+b=+lt*pK+S>+pK+pK+pK+pK+pK+pK+pK+pK+u]#$(+T_+T_+T_+T_+G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+}f.}f.bH@aH@aH@Bz$9g.9g.aH@aH@Bz$Bz$9g.9g.>( >( 7P.7P.7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+oh.y4&y4&oh.Kh+Kh+xc+Kh+iS.oh.$(+xc+G|@y4&Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+T_+Kh+7P.7P.G|@T_+G|@7P.T_+T_+T_+T_+T_+T_+T_+T_+aH@aH@aH@aH@aH@aH@aH@aH@bH@bH@bH@bH@bH@}f.}f.{'$lt*zw*x}*q(#q)@q(#d #';$G|@G|@G|@G|@Ai.Ai.", "Su$3o.Su$Vh.is@Vh.%j.O7.is@Vh.Vh.x5.x5.is@dD.is@is@is@is@is@is@is@is@x5.x5.x5.is@is@Vh.Vh.Vh.xX%O7.O7.O7.x5.x5.is@is@is@O7.N7._r+O7.Vh.Vh.Vh.>+m~+!U#Wk$Wk$!U#,Z#'M$2h$^N#BA#BA#BA#BA#BA#St$qs$Ut$Tt$Tt$(v$a)#a)#0D#1h$ni$ni$ni$ni$ni$ni$ni$,b$,b$N;$N;$K1#<{#<{#^f#&6$@d$Rj$y4#T4$8]+~}%N[#Zz$B;%Vk$Z_#1S#3O#I4@2)#9Z+9Z+9Z+3)#3)#1S#=7$Ss@4d$)g$_a$ni$N1#L1#00$L1#J3$y4#_a$N;$U4$v4#Z&+oZ@BO@}V+3G+[V+=>+T@>T@hX@x)+Q,+Q,+x)+x)+Q,+3Z+=:#4T+3T+A@@1R+up+#k+#k+R0+fy+#k+:c@up+1R+1R+Xn+sp+tp+>w+#B+1R+sr+L)@6o@0&@4 @O)@O)@9=@^K@I@@CD+X.@g[+BD+_/+c^#lK@S{@3~@4a@P2@U.+ -+W;+m;=m;=E$+22%[/#|(@%f+_9$Cg+yb+Sl+~/+_6+Yg+,k+,k+=:@`l+`l+2Z+2Z+vp+vp+`A+`A+N{$9c#(f#py+f+i0#if#Wl+Wl+YN#fi+ir+Xg+nD+Mb+_T+up+&t@ED+=4+ak@(/+w)+Zp%Zp%5o@P)@8G+-K@ov$'T@c^@U)=V)=W)=X)=Y)=Z)=`)= !=`!%F)%O>%.!=+!=@!=@!=#!=$!=%!=p)=hw$cV#<$%UQ$;}#|I#.z$.z$.z$|I#>}#Ye$X%$X%$^$$^$$DB#77$(K#aT#d<$A:+d<$&;%+2#,|+UY#Vy#A0+E_$I`#ct#ct#z!$CC$U!%7T#4*$7d$7d$tT#+2#>|+'|+-|+YM$<[+q:+r:+/6+dd+*k+w)%qH&Et$='$V>$Na$Na$7j$U'$ h%G=%u/%m>% R$dm$)l$r6%=Z$=Z$=Z$=Z$AS$AS$CM$EM$CM$%<%&<%&<%%<%(/%N)%$2#-}#-}#-}#&M$&M$/$%/$%/$%/$%,_+,_+pe%pe%pe%%.%{`$Ig+Ig+ *%_]+^]+-Z#p)+vk$Nc$3(@`0$`0$gn$='$g>$M<@dc@Lf%lh%2+*_S&kQ&q)=&!=*!=m{$^u+J:$=!=p@$k@*Ft+]G+jD+SA+cr+~P+hh#t9#t9#ih#-3@O<@O6*0!$5K&mD#i-$c&@s<@z$+y;@N)@N)@ry+M@+wr+6Z+L@+6T+J@@_w+_w+^K@cB@cB@cB@cB@cB@cB@cB@cB@H@@H@@H@@H@@cB@x;@DD+w;@YK+5$@5$@jX+jX+fX+4Z+BO@7V@7V@7V@{^#{^#yA#yA#!l$~l$0N$0N$~l$d9$d8$pw$n%$pw$5($d8$b>%n%$pw$*6$e'#I4#xW#{}$Fn+H_%!=#P%Gc+,!=,W+Ui.X@$jb%U`%U`%@:+@:+e6#e6#%c%%c%EI#@u%vC#_($ X+qK+>0+,0+Av&Av&-~@;n.>n.>n.!D+!D+%' %' >S%~h&~h&{h&0, 0, &, &, 0, 0, {h&~h&~h&nh.oh.oh.7P.7P.Kh+G|@G|@G|@Kh+G|@T_+T_+G|@Kh+oh.iS.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+xc+$(+G|@Kh+Kh+G|@Kh+Kh+$(+oh.y4&T_+xc+T_+G|@$(+T_+G|@7P.Kh+T_+$(+G|@Kh+G|@Kh+7P.7P.7P.7P.Kh+G|@US+lt*a1+YQ+'!=lt*x}*q(#pK+pK+pK+pK+pK+pK+pK+US+xc+xc+$(+$(+T_+G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+aH@aH@aH@aH@aH@aH@aH@aH@Bz$Bz$9g.9g.>( >( l}+l}+G|@Kh+Kh+7P.oh.y4&y4&iS.Kh+7P.oh.y4&y4&oh.7P.Kh+$(+7P.]@+y4&T_+xc+G|@iS.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@7P.oh.7P.G|@G|@Kh+oh.T_+T_+T_+T_+T_+T_+T_+T_+aH@aH@aH@aH@aH@aH@aH@aH@l7 l7 }f.}f.bH@aH@aH@d%$lt*zw*x}*q)@q)@q(#u]#';$G|@G|@G|@G|@Ai.Ai.", "Vh.x5.is@%j.Su$dD.x5.Vh.Vh.Vh.is@is@x5.x5.x5.is@is@is@is@is@is@is@is@Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.is@is@is@is@is@is@is@is@Vh.is@is@x5.x5.is@is@Vh._;=8'%v4.v4.F6.Tw@[{.F6.[{.[{.8'%8'%8'%F6.F6.F6.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%F6.D%OD@}T$q1@)>+G~++x@+x@V,+V,+W_#W_#B%%B%%B%%+*+|0#k %D#$_-+.*+.*+>>+f~@:v@Z|#''%1r$ar$Tj$,Z#,Z#>b$8F$O[#mw$mw$mw$-b&-b&!g$Oe$6d$B4#LB$k,%k,% :#/^%Wy$5G$cN$Ej$a9$cN$sS$a9$Ej$Ej$,p$&6$$*$&6$,p$a9$^m$6v#Cb#vy+''%;4+f~@> $_-++*+I4@+B$2)#|f+J[#=1@f$@>{+P$+~b#L6@qX+9Z+@ +,>+.*+C)+)g$)g$y4#,L$BT$N;$'p$8]+'M$'M$@d$ni$N1#]N#7V@nZ@4Z+} @7=@[V+{-+ib#'T@3]+hX@>T@9G+ZK+Q)@Q)@lX+ZK+ZK+ZK+ZK+lX+9G+3R+_f+G/%/f#np+Xn+tp+-9@I6@}]+Tt+I6@Yn+Ob+|]+tp+_x@SW$VA$sp+ L+tp+Wn+#B+vD+g~+Rt+}=@,B+4 @ny+my+Y.@f^@_/+7a@G$+I:+Bt+4a@3a@/T+2~+e)+mc@W-$W-$gz@8L#]R#Zl+HZ@HZ@Yg+Yg+_6+_6+<]+<]+kp+ o+vb+HZ@Zl+]R#VF#7}@wp+2Z+R.@`A+9c#9c#mq#^d$q.$`b$Oj$Tg+,f+Gy#*e%*Q#QR#k}% z$]u#Q>%|2#Mf#35#{!=]!=^!=/!=(!=_!=:!=f+V4#V4# @#ei+Xl+ir+ir+gi+s=@Nb+qy+xp+FD+Rt+Rt+>$I`#>>$A0+6|$Z%$57$f8$(/$=f+v:+&_+ei+: @%k+ci+&f+vb+,k+Ll+$R#F]$@a@am+(o+Yr+(o+Xp+fm+@1% 9@A;%>t$G=%A-%&X$kK$0d%sU$sU$0d%cm$RR$KV$b$%b$%/:%/:%ir$WK$WK$d,$xn$5^%[!%%9X#+Z#'l$c$%+R$6-%'&%yD$Hg+wL$=y$9g$fk%io@|1@|1@;:@M<@MU#19@19@w)%w)%w)%w)%_S&_S&jQ&o!=r)=py*R3*w2*s)=p!=p!=@I@~P+)B+U_@U_@Ft+Ft+t9#t9#MF@MF@-3@-3@k@*w2*5K&mD#Px#yb#z$+z$+z$+z$+d^@d^@']@']@+5@wr+L@+6T+J@@_w+I@@Ln#7~#26+I@@mq@k#$mq@<^#I@@I@@I@@8$@8$@^K@cB@]K@)K@jX+jX+5$@5$@gX+gX+mZ@mZ@M+#M+#yA#{^#{^#{^#~l$~l$0N$0N$rr$rr$rr$rr$5($d8$pw$b>%b>%b>%b>%Z&+y_${}$g)#Fn+Fn+tD@g)#( >( bH@cI+aH@aH@aH@aH@aH@aH@aH@aH@$(+T_+Kh+7P.7P.Kh+T_+$(+7P.7P.oh.y4&y4&oh.7P.7P.T_+G|@7P.oh.oh.7P.G|@T_+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@7P.oh.7P.G|@G|@Kh+oh.G|@Kh+7P.G|@xc+xc+G|@y4&bH@aH@aH@Bz$9g.9g.>( >( bH@bH@bH@bH@bH@bH@bH@m|.S>+x}*d #d #u]#u]#$(+$(+]$@jy.q9+dl.QJ*^v.", "Vh.x5.is@%j.Su$dD.x5.Vh.Vh.Vh.is@is@x5.x5.x5.is@is@is@is@is@is@is@is@Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.is@is@is@is@is@is@is@is@Vh.is@x5.x5.x5.x5.is@Vh.ve.8'%#k.#k.F6.[{.[{.F6.[{.[{.8'%8'%8'%F6.F6.F6.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%F6.D%OD@q1@`|#)>++x@#*+#*+tc@tc@W_#W_#B%%B%%B%%+*+|0#k %D#$_-+.*+_-+m~+>>+s8+:v@''%1r$ar$Tj$,Z#,Z#>b$%u$_a$ni$Dj$!g$-c$6d$5d$Wy$N[#D]%Ss@F1# v@OA#X_#~I$8F$,H$%K$a8$Gs$Gs$,H$Rj$90$90$N)$%*$90$=k$Sj$Tj$6Z.5Z.M$+W_#j|#tc@O:+Ub+T)@HK#Y)+Ni$q>#td+dy%TI#/B+C[#A[#~Q#NJ@,/#.+@h/+tc@BM#_-+f&@l~+7P#p=#p=#~}%~}%'M$'M$,L$,L$L1#L1#Wx$7V@fX+fX+7=@[V+{-+@N+3]+hX@hX@>T@9G+lX+lX+ZK+lX+lX+ZK+ZK+>B+9G+*>+$N+d&@R%$tD+Tn+sp+Yn+I6@]/+8X+sD+]/+Tt+^_+/|+Yn+tp+%m+Zn+sp+sp+tp+_x@#B+1R+wI+Rt+}=@|=@4 @ny+my+Y.@f[+lK@7a@G$+'}@Ee@WM+F$+pX@W;+2a@Be@gz@gz@8L#8L#]R#]R#Zl+HZ@vb+Yg+_6+_6+xb+wb+kp+ o+HZ@Yl+6d+6d+7}@wp+wp+2Z+R.@R.@N{$N{$&!%py+q.$Zb$Jn$!i#I0+l%$BC$QR#k}%k}%f+if#if#fi+ir+(+@gi+gi+-2+Nb+^_+u)+xp+wI+Jl+Rt+&%Ti$-Z$ue%rF$r6%Nj$BM$k_%b$%b$%YQ$G+%G+%#Z$#Z$>,%us$5^%[!%[!%ss$Zt$T[$T[$4|$3|$rO$rO$kr$%<%MR$!;%xL$xL$lE$lE$lE$AD$(]+(]+_a@_a@6k@gc@qR$EZ$EZ$tQ$^O$^O$^O$ZH@]r%'K$o@*)**E%=9s*2N&0!$%Y%iK@~.*.N@A$+gK@gK@gK@cr+cr+ih#ih#ih#ih#-3@-3@k@*0!$w2*6Y#ZA#L,@L,@!B+!B+!B+!B+y;@N)@M@+wr+wr+X{@6T+J@@J@@'_#Ln#7~#26+<^#^K@mq@^K@I@@I@@I@@I@@8$@8$@^K@cB@!K@>K@5$@5$@jX+jX+fX+fX+mZ@mZ@M+#M+#yA#{^#{^#{^#!l$!l$~l$~l$0N$0N$0N$rr$d9$5($d8$pw$b>%b>%pw$Z&+y_${}$n.`b&`b&>n.-~@]*=Bj.~=ns ~E.)G*vL*MF*,~=BE*wQ$~[*w}**f**f*p]+OD@`|#)>++x@#*+d_+d_+Ar+Ar+W_#W_#B%%B%%+*++*+|0#|0#D#$4[%m~+K[#M[#M[#1r$ *+j %,Z#ar$ar$=k$=k$Sj$=c$%*$'p$T4$7F$Tj$N[#Wk$7I#_-+U=$HK$X_#I4@3O#NX.:-+4v$}0$K$+}0$&u$p4&7v$Q'$I3$3w+oo%rr%Q'$rr%rr%M$+O:+l[+Gz$Y_@i|#P]+Wt+/n%m>#i>#j8$HL#(-#_0$s1@Or#TO$T@>T@>T@>T@3 @3 @3 @3 @0G+0G+>B+>B+O)@0G+my+z#_}%pA%pA%pA%JB#~E#Fq#L7#:X#Dc#Af#_l#/K#bV#bV#f+>f+i0#+w#3&@YA+YA+_k+_k+]_+Nb+^_+u)+xp+Jl+tr+ED+}=@T##{]%7~=[^%;I$#a@*>+f[+>*@Y~@8~=9~=0~=a~=b~=c~=d~=e~=f~=g~=h~=A)%i~=j~=k~=l~=m~=m~=n~=!N$WL#bh$*M#It#,z#'z#Gc#Hc#'z#_o#&5#%5#-5#8<$7<$8<$=o#fi#fi#Cf#^X#%l$l'%#~=g,%O3%}==o~=or$b0$we@6m@_G+69@]G+G)@N,@;Z#=7@j}@-!@=!@^3@zb#g[+<_+d~@5]+gi@e'#{^#[{#3#%p~=!/*ux*|W&N.+be*_3@,]%pt&=k@}N+>u+6i@kP+mk+_L$Z~$X!$@w$[z$ml%_]+u/%=Z$[|%PP$G]%c,$kU$kU$#l$:!%[!%5^%V!%67$9T#M3$M3$3|$e($jr$jr$`Q$^:%i_%YQ$:N$ss$q1$q1$xL$@*%lK$lK$%N>%ng@ZH@re@qe@J$*J$*.5@ 5@$R#Qx#.N@0*$`M@6X+]G+]G+]G+!P+!P+MF@MF@hh#hh#xU#$R#k@*0!$0!$xU#xU#M)@M)@M)@M)@a~@a~@N)@d^@d^@d^@X{@X{@X{@X{@L@+GD+*t@f1@*t@'_#9$@9$@9$@8V@8V@8V@9$@9$@8&@8&@^K@w;@YK+4G+5$@jX+E@@4Z+4Z+mZ@mZ@M+#M+#yA#{^#{^#{^#d9$d9$d9$!l$!l$~l$~l$~l$d9$d9$5($pw$pw$pw$d8$*6$1O#A,+{}$n.`b&!D+;n.-~@*~@8`#~D.~D.8Y+1m.1m.8Y+1m.1m.1m.1m.1m.1m.1m.1m.oh.oh.7P.7P.Kh+G|@T_+T_+T_+G|@G|@T_+$(+xc+Ea+5A.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@Kh+7P.7P.Kh+G|@G|@T_+T_+T_+T_+G|@7P.oh.y4&oh.Kh+G|@Kh+oh.oh.G|@$(+xc+Kh+7P.T_+T_+7P.Kh+xc+7P.7P.7P.7P.Kh+Kh+Kh+G|@T_+T_+T_+T_+T_+T_+T_+T_+y4&7P.T_+T_+G|@Kh+Kh+T_+7P.7P.7P.7P.7P.7P.7P.7P.G|@G|@G|@G|@G|@G|@G|@G|@9g.aH@}f.}f.aH@Bz$Bz$bH@aH@aH@aH@aH@aH@aH@aH@aH@T_+G|@G|@Kh+Kh+G|@G|@T_+G|@G|@Kh+7P.7P.Kh+G|@G|@G|@G|@Kh+7P.7P.Kh+G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+$(+G|@Kh+G|@$(+$(+T_+Kh+7P.oh.oh.7P.G|@G|@7P.y4&aH@aH@bH@bH@bH@}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.}f.h]@v]#u]#d #7P.y4&iS.]@+Ai.Ai.Di*Di*Di*Di*", "Vh.Vh.Vh.dD.dD.Vh.Vh.Vh.Vh.Vh.is@is@x5.x5.x5.is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@x5.x5.O7.O7.x5.x5.is@[{.8'%F6.F6.8'%8'%8'%8'%[{.[{.8'%8'%8'%F6.F6.F6.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%F6.[*&6.e)%Mb.dM*r2%UD*+N*63*W'*(8%Q%=*f*'m$q1@)>+G~++x@d_+li@li@@h+@h+D)+D)+B%%+*+|0#|0#|0#+*+D#$4[%m~+K[#RA$Zz$*c$!U#~}%Tj$ar$ar$=k$T4$Sj$=c$%*$j %vy+Ei$3w+m~+PX#_-+k %k<&9Z+8I#=1@iB@f$@=1@C/%^ +.++^ +<7&;a$6X%1/%ZX.@/$0T+6Q%6Q%kS$FC$'(@8M@d%%Xo$}6$kP%4&#Pw#ur$v}@bI#QK#FT#j1$BV#GT#Uk$vC$ms+e]@+/#*>#*{#}p#Rs%k>#TI#1f+HK#&a@`|#G}$s8+|/+|/+|/+`&+`&+^f#Bb#Z&+Z&+fX@CI+R,+yM@TK+#N+zI+x)+x)+>T@f^@f^@f^@~-+*>+0G+4 @4 @4 @ny+my+:w+3$@X-$I(%Yl+,k+[]+{/+1$@{/+1$@1$@_k+:6+vb+%4+lp+pB$Zn+St+[w+tp+%N+tp+ L+sr+sr+Rt+Rt+Rt+g~+(w+&N+eD+7a@'}@-.$+k+l1&t~=j/%8>=m;=E$+1a@9N#9N#lJ#lJ#]R#]R#Zl+Zl+HZ@vb+Yg+Yg+&f+9d+8d+HZ@Yl+}}@R.@`A+vp+vp+vp+2Z+}}@}}@v!$v!$(f#'B++v$Ul$wy$Ae$J0+$|+E0+E7#W4$^!%'/%l/%Cw#1w#]u#Q6%u~=v~=w~=x~=y~=z~=A~=B~=C~=D~=E~=F~=G~=H~=I~=am%J~=K~=L~=yo*M~=N~=4E#N@=O@=O~=O~=6~=8!=Ni#N@=N@=8!=Li#Ms*jx*bz*5A*Kc#Q0#iv%[e%;o#;o#>z#_}%pA%pA%JB#*q%K7#L7#J7#J7#Dc#Af#_l#_l#/K#bV#bV#bV#2#aV#mV#O3%@)%K>%`c%nr$',&bP$|T@tG+%k`%Z.+Kn#se#N)$_a$6F$Bj$Wk$7I#L[#$)%Dx$%{=&{=*{=={=-{=g@**N$A3%PX#1r$`&+(m@$>6$d,$d,$DM$DM$z[%EM$Bi$Bi$6X#qV#DJ$nW$xI$SG$',&e9$DD@og@9i@6m@cc@]V+Ht+ q+MF@mm+=K@3~#4~#tW#6X+]G+gK@gK@cr+Ft+t9#t9#4v#gh#6Y#$R#0!$0!$0!$$R#$R#ih#LF@LF@LF@LF@pk+pk+c&@-(@-(@d^@X{@wr+wr+6Z+~B+e1@e1@*t@ED@UQ@8V@8V@8V@8V@9$@9$@8&@8&@9=@mq@8G+2 @4G+5$@jX+E@@| @lZ@mZ@mZ@M+#M+#yA#{^#{^#{^#d8$5($5($5($d9$d9$!l$!l$!l$d9$5($d8$pw$pw$d8$*6$1O#_/#A,+{}${}${}${}${}${=7'=Fe.LU*GW*,{=$~@.Y A% U!+U*@&c%Hc%NP*NP*^0.^0.9D%9D%@g%Gc%*Z+_($1<# X+SO+qK+sq*sq*Av&&, >n.!D+`b&B#@{y%y$$*~@8`#~D.zc@8Y+1m.8Y+8`#1m.1m.1m.1m.1m.1m.1m.1m.oh.oh.7P.7P.Kh+G|@G|@G|@T_+G|@G|@G|@G|@T_+xc+xc+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.7P.Kh+Kh+Kh+y4&y4&7P.xc+Ea+T_+Kh+G|@oh.Kh+G|@Kh+oh.oh.Kh+T_+$(+7P.7P.T_+T_+7P.7P.$(+Kh+G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+7P.G|@T_+T_+Kh+7P.G|@T_+7P.7P.7P.7P.7P.7P.7P.7P.G|@G|@G|@G|@G|@G|@G|@G|@l}+Bz$l7 l7 bH@Bz$Bz$Bz$aH@aH@aH@aH@aH@aH@aH@aH@G|@G|@G|@G|@G|@G|@G|@G|@T_+G|@G|@Kh+Kh+G|@G|@T_+G|@G|@G|@Kh+Kh+G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+xc+T_+G|@G|@$(+xc+$(+G|@iS.y4&oh.7P.G|@$(+$(+$(+aH@bH@bH@}f.l7 l7 cI+cI+l7 l7 l7 l7 l7 l7 l7 l7 :{+:{+d #';$7P.y4&iS.]@+1m.1m.QJ*Di*Di*h)@", "Vh.dD.dD.Vh.Vh.Vh.dD.Vh.Vh.Vh.is@is@x5.x5.x5.is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@x5.x5.O7.O7.O7.O7.x5.x5.F6.8'%8'%8'%8'%F6.F6.8'%[{.[{.8'%8'%8'%F6.F6.F6.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%+G~++x@d_+li@li@@h+@h+4W.D)++*+|0#|0#|0#+*++*+4[%m~+>>+m~+*c${m${m$*c$,Z#Tj$=c$>b$=k$T4$09$>b$po%oo%KG%PX#|7$A0%M$+W_#QB$})#L6@f$@O]+8G#Y_@Y_@{($U-$pZ%U-$|(%aT+_g${f#uD$A[#Sz$~Z#~Z#3F$Xo$>I@-@#rm#.6$.6$rm#a_#PH#vc+&>$3L.P5@3=$|c@'{=`m@Ts$[f `:@[f Y~#GT @-#Uk$t)%}=%t[#!b#s1@-/#[^#K9#k%+1Y+z(#pX+te#6v#j[+^f#Bb#Z&+1T+|T+v,$->+->+yM@yM@zI+zI+>T@>T@f^@~-+/w+/w+my+ny+Z.@Z.@Z.@K@@e^@g~+Pn+R.@I(%Yl+,k+si+_k+YA+dy+YA+YA+-2+:6+vb+,k+)k+4V#5f#St+St+IZ@Zn+tp+ L+sr+sr+oy+v)+Il+2V+2V+_|+4a@'}@m;@[P+P2@|~#=w$s'#O@+O@+){=8N#=]@_&@Y+=c#=4P#4P#6d+Yl+=:@,k+:6+:6+9d+9d+ o+HZ@`l+}}@`A+`A+vp+vp+vp+2Z+}}@}}@v!$v!$VA#n=#as#ex$*H$!i#*2+j8+!:#UY#w.$@5%%{%m(%;)%Cw#]u#Q6%!{=~{={{=]{=^{=/{=({=_{=:{=<{=[{=}{=|{=1{=2{=3{=4{=5{=6{=dg#zi#Vc#=g#$r#fw#gw#7{=dz#Y>=ez#$r#$r#$r#Y>=:t*;v*tC*5A*LR#-f%95%95%W7#!5#Lq#ds%A}%F0#WA$'6$C0#Zy#Zy#J7#Dc#_l#_l#_l#_l#/K#/K#/K#bV#[X#n1$[X#_l#EB#Af#'2#RL#=o#m1$OR#/C#pT#i}%*)=q<%-Q#/>$&2+QL#.I#i0#Rg+#l#}&@RO@=m+=m+!k+}]+/|+/_+=w+tr+L)@}=@|=@S###r%[^%8{=~w+k0+dz@Yv+9{=0{=a{=b{=c{=d{=e{=f{=g{=h{=i{=j{=k{=3^%&~%l{=m{=S,=n{=${=~N$WL#;O#)N$Vq#9$%fd$hT#]z#^E#:I#I0#Jq#,5#%5#-5#9<$[l#Ef#NR#Gq#,}#=}#@;$L`#Z%$//$7|$9i@qe@s9#z=@Gv%o{=-[#av$@6$ b$f2&0w$p{=*N$-y%IR$q{=_^%r{=7{%My$}F$}(%NW$Yo$Ly$wA%N/&_V%_V%}|%b.%Ly$Yo$:G%JB$bE$C)+`&+#*%[k+z;@U,@W.+tb#^^%U)=%1#TI$JW$>-%~s*s{=t{=th%#6%C4%$1%%Z${=7'=x{=;V*la.F2.I)$k9 90+f^+x{ &c%jb%s=+U`%_W%^0.R+&$c%z<$#u%*Z+_($1<# X+SO+qK+sq*sq*u3$%' !D+;n.;n.!D+'W+'g@*~@8`#zc@8`#1m.1m.8`#~D.8Y+8Y+8Y+8Y+8Y+8Y+8Y+8Y+7P.7P.7P.Kh+Kh+Kh+Kh+G|@T_+T_+Kh+7P.7P.7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.Kh+Kh+Kh+Kh+Kh+Kh+7P.oh.iS.7P.]! ]! T_+7P.T_+oh.Kh+T_+G|@7P.oh.7P.G|@T_+7P.7P.$(+$(+7P.7P.T_+T_+T_+T_+G|@G|@G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+Kh+T_+$(+T_+Kh+7P.G|@$(+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@l}+Bz$l7 l7 bH@Bz$Bz$Bz$aH@aH@aH@aH@aH@aH@aH@aH@G|@G|@G|@G|@G|@G|@G|@G|@T_+G|@G|@Kh+Kh+G|@G|@T_+G|@G|@G|@T_+T_+G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+xc+T_+G|@G|@$(+xc+$(+G|@G|@T_+T_+T_+T_+T_+$(+xc+bH@bH@}f.}f.l7 cI+cI+NM+}f.}f.}f.}f.}f.}f.}f.}f.';$';$Kh+Kh+7P.7P.8Y+8`#^v.^v.QJ*Di*rE.nt*", "dD.%j.dD.is@is@Vh.%j.Vh.Vh.Vh.is@is@x5.x5.x5.is@is@is@is@is@is@is@is@x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@is@is@is@is@x5.O7.O7.xX%xX%O7.O7.x5.#k.8'%Tw@Tw@8'%F6.F6.8'%[{.[{.8'%8'%8'%F6.F6.F6.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%=cK&I-*V)*(<*(8%`O@`|#)>++x@#*+d_+d_+Ar+Ar+4W.D)++*+k %k %|0#+*+B%%m~+U`$XX.U`$!U#*c$jm$*c$,Z#ar$=c$>b$=k$%*$09$K$+KG%L$+7X%{l$(1&}7$6X%Yx%)=%X,@^B+7 @3|+0Z+rX+3/+K+@p%$|I.;W+,Q+5&#Uk#o~$;S+rm#)Q+Gh+@.@Gh+@.@)m$./@'<$z 5q hp w6 j8 ,&$9> {T#L4$z]&$L@Yk@7G@hB i4#Aj$)q$a>&z-$=-#QH#P%$bR.8T@WF@DT#te#te#6v#j[+^f#^f#Bb#x_%Ab#S@+U0+i~+yM@yM@zI+{-+>T@hX@~-+~-+/w+/w+_w+my+K@@K@@K@@e^@O,@QK+Pn+R.@ub+jr+%4+si+gi+gi+dy+YA+YA+gi+Lb+:6+[]+!k+4V#5f#kr+St+IZ@Zn+ L+sp+up+sr+v)+1]+H:+H:+H:+d[+4a@dz@$N+[P+U.+t~=MB%2a@E$+E$+8N#8N#=]@lJ#c#=>m%4P#4P#6d+6d+=:@=:@,k+:6+wb+ o+HZ@Yl+`l+}}@X-$:T#2Z+2Z+2Z+2Z+}}@R.@zR#zR##<$v'#as#ex$Jn$Tg+|i#id+!:#UY#W4$k~%z{=#(%;)%Cw#A{=B{=C{=D{=E{=F{=G{=H{=I{=J{=K{=L{=S~=M{=N{=O{=P{=2k#Q{=M<&R{=Wl#}8#S{=zC*Y>=fw#gw#7{=Wt#ez#+r#:t*Yt#Yt#Yt#:t*;v*tC*{z*LR#-f%95%A7%!5#!5#Lq#ds%WA$WA$qt#pt#Zy#Zy#C0#Fq##5#_l#_l#_l#_l#_l#_l#_l#/K#[X#Ve$#>$%8x$Q}$jA%qz#r4#Js%|C#C4#)7$mn$5s#aK@21$F9#>]+t{#0Q%n:&Bg+]=,]=F.$5T#6V#b@$. $'J$UW$@{%WK$|q$(N$1q$2q$+u$En$@ $uT#/6$/6$g($m%$:C#J<@Ol+(G+SA+fp+ep+T{@4X+[=@1V+P0+U_@)B+:V+@w+tI+XA#XA#4v#gh#6Y#xU#w2*w2*5K&6Y#xU#t9#t9#t9#M)@M)@M)@M)@!B+!B+N)@N)@ry+nm+']@']@j}@e1@ED@UQ@'_#'_#8V@9$@9$@9$@8&@8&@9=@9=@9=@k#$w;@YK+4G+5$@jX+E@@4Z+4Z+mZ@mZ@M+#M+#yA#{^#{^#{^#d8$5($5($5($d9$d9$!l$!l$5($d8$pw$b>%b>%b>%b>%Z&+S,+{}$A,+A,+A,+{}$g)#g)#Fn+}e%Ke@Ke@}e%}e%Ke@;c@c#@i<#nx*ox*ox*fN*$F*&F*v{=0,=^)=>{=7'=']=;V*20+`[*I)$n.]*=]*=-~@!D+*$@*~@8Y+8`#8Y+1m.1m.8`#D9.8Y+8Y+8Y+8Y+8Y+8Y+8Y+8Y+7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+T_+G|@Kh+oh.y4&y4&y4&oh.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.Kh+G|@G|@G|@G|@Kh+7P.xc+7P.G|@{! ]! oh.]@+Kh+Kh+T_+xc+$(+G|@7P.Kh+G|@T_+7P.Kh+xc+xc+Kh+7P.T_+T_+T_+T_+G|@G|@Kh+Kh+Kh+T_+T_+T_+T_+T_+T_+T_+T_+T_+$(+xc+T_+7P.7P.G|@$(+T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@9g.aH@}f.}f.aH@Bz$Bz$bH@aH@aH@aH@aH@aH@aH@aH@aH@Kh+G|@G|@T_+T_+G|@G|@Kh+G|@G|@Kh+7P.7P.Kh+G|@G|@G|@G|@T_+$(+$(+T_+G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+$(+G|@Kh+G|@$(+$(+T_+Kh+]! {! ]! xc+Kh+oh.7P.G|@}f.}f.}f.}f.l7 l7 l7 l7 bH@bH@bH@bH@bH@bH@bH@bH@23+23+Kh+Kh+G|@G|@dl.dl.^v.QJ*QJ*Di*rE.nt*", "dD.Su$%j.is@x5.Vh.%j.Vh.Vh.Vh.is@is@x5.x5.x5.is@is@is@is@is@is@is@is@x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@is@is@is@is@x5.O7.xX%xX%xX%xX%O7.x5.v4.8'%ve.ve.8'%b$=c$>b$90$N)$90$K$+MR%6R+hZ./1&>8&$w%Ot$ms$7w$TH#n>#NJ@pl%G[#Sz$i($b_#2O.M[$3O.zX@M+@NM.%c$f]@'z UJ#-p@$y F5 ({+({+tK fp +/$=l ET A6 1k l 3' Em Yy h.$!]=_1&J[&:l$~]={]={]=ql&I3&Zy hB Cm o[#1d$J&#j^&/l$g~$km@l>#4W.I3$I3$3V+Cb#{ +Jn#}/+'2+Z.+S@+[_+L:+Y&+->+yM@@N+@N+hX@hX@~-+~-+Y.@Y.@_w+_w+K@@K@@0$@O,@-(@z@@Pn+`A+Kt+kr+!k+]_+Xg+Xg+(+@/+@YA+dy+$4+si+:k+RO@4V#*m+Mn#Mn#[w+Zn+IZ@+m+tp+ L+v)+c[+)-+)-+=4+d[++k+2]+B@@4T+W;+]]=^]=[$@f)+r~@=]@=]@Z.=c#=Y;#v!$_9@_9@I(%I(%'k+'k+%4+%4+vb+vb+=:@Yl+`l+}}@`A#`A#7}@wp+wp+2Z+R.@R.@N{$N{$0c#LP#+v$Zb$Jn$Tg+,f+id+B0+Ty#6N$/]=(]=m~%Dw#Cw#Zb%^u#e'=_]=:]=<]=[]=}]=|]=1]=2]=3]=4]=5]=6]=7]=8]=Ko*9]=0]=a]=b]=c]=d]=e]=$r#7{=hw#f]=Wt#]Y*{C*+r#;v*ez#:t*ez#;v*{C*{z*Z7#$Q#95%A7%!5#Y7#Lq#&G#'6$qt#pt#)M#Zy#C0#IB#~E##5#_l#_l#_l#Af#Af#Af#Af#Af#2#z#-5#-5#@o#NR#&K#Gq#U!%`R%p:+D:+m8+k)+SA+!B+Ae@U5+3_#x]=F3$6W.h+&Xk#Rz$0-%%i#.E#.E#Kt$ks+J_#XJ$ks+X6%#{@KR.K@5$@5$@jX+jX+fX+fX+mZ@mZ@M+#M+#yA#{^#{^#{^#5($5($d9$d9$d9$!l$!l$!l$d8$pw$b>%n%$46+46+n%$x_%(K@n.;n.-~@-~@;n.h~ *~@^v.O^.^v.Di*QJ*RJ*&C.^v.^v.^v.^v.^v.^v.^v.8Y+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@Kh+Kh+7P.7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@T_+$(+$(+T_+G|@Kh+]! 7P.Kh+{! ]! y4&]@+T_+G|@$(+5A.Ea+$(+G|@Kh+G|@G|@7P.Kh+xc+xc+Kh+7P.G|@T_+G|@G|@G|@Kh+7P.7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+xc+xc+xc+T_+7P.7P.G|@xc+T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@Bz$bH@bH@aH@9g.9g.aH@}f.aH@aH@aH@aH@aH@aH@aH@aH@7P.Kh+T_+$(+$(+T_+Kh+7P.Kh+Kh+7P.oh.oh.7P.Kh+Kh+Kh+G|@$(+xc+xc+$(+G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+T_+Kh+7P.7P.G|@T_+G|@7P.Ea+5A.Ea+$(+7P.oh.Kh+$(+}f.}f.}f.}f.}f.bH@bH@bH@aH@aH@aH@aH@aH@aH@aH@aH@Kh+Kh+G|@G|@dl.dl.q9+q9+QJ*QJ*rE.rE.rE.rE.", "dD.Su$%j.is@x5.Vh.%j.Vh.Vh.Vh.is@is@x5.x5.x5.is@is@is@is@is@is@is@is@x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@is@is@is@is@x5.O7.xX%xX%xX%xX%O7.x5.v4.8'%ve.ve.8'%+G~++x@V,+V,+5)#5)#n~++*+k %N@%k %+*+,>+hB@up%t4#+h+yR#B)+Ei$Ei$Tj$]m$(a$Wk$~}%j %~}%rr%S]=C~&Ls&Y(&uy%f.%ZJ$G!$}|%&i#$Q$Vj$Vj$u[#t[#&{#OB@>f#0T@Ho$g9%$-#&S CV#;z 1k 3' /1 /1 }o -c =M o!$Y,@n1#J&#uo@PP.,/#QB$Yx%@*+4W.H!#1_+7_#dH##>#Ux#8Z+y'#V0+z)+1T+Y&+,2+|{#g[+g[+[|+[|++:$/w+_w+e^@0$@a$@FD+Kl+R0+vp+Kt+St+&m+=m+YA+ir+>k+fi+W1#oB#/+@(+@gi+ZA+|&@|&@bf#:k+:k+&m+{k+IZ@Yn+tp+-w+1]+)-+*4+*4+[=@=4+1Z+T.+A@@mB#Lu$U]=V]=4&@#!@_&@=]@=]@Z.=c#=#<$,T*I(%I(%`l+`l+'k+'k+%4+%4+,k+,k+'k+'k+`l+`l+I(%}}@VF#`g+/f+2Z+vp+Kt+.m+(f#nq#^d$Qn#`b$p7#;p$~i# 4+C7#_O#W]=8)=X]=o(%_K#p(%#5%N2%xo*Y]=Z]=`]= ^=.^=+^=@^=#^=$^=]6*%^=&^=*^==^=-^=;^=>^=,^=jK*'^=)^=!^=6~=1z#~^={^=N@=1o#5A*5A*bz*as*1o#1o#jx*bz*BA*V7#Kc#[e%'5#U7#Q7#,5#>z#Ec#Ec#)M#)M#$K#C0#$I#GB##5#_l#_l#Af#Af#Af#Af#Af#EB#>}#^g$>}#bi#QP#bi#(l#>2#OR#m1$Y:%s[%M3%h}%_'=p<%$:%06%*6+*6+,:#QL#+w#(+@-2+-2+]_+:k+!k+^/+^/+(|+@k+L)@{k@{k@6o@;I$#o%D^%]^=!-+l1&^^=/^=3;&(^=_^=kK%:^=<^=[^=}^=|^=1^=2^=3^=4^=h~=5^=6^=+{=u]=nT$7^=8^=9^=3$%:]%=)%Tq#6G$|o#hT#iT#St#hT#hT#r'$&G#E4%I_$'2##f)++k+36+aN# c%b/$o~+dG+Th%W&&TP.#i#a9 G@RN#]L$WP. G@pH 7O.:R#l>@:R#.^+xz#o<+:R#+/$W-@G0 S:@Yq '8 If >z X7@(R@9e+mm@v}@.{%%X#5J%0^=a^=b^=Us%B,@c^=d^=e^=f^=g^=h^=i1&*J*4d+%r*@m#i^=j^=#6%$6%f_%iw$vn$dh$]b$1m$zi$jV#,M#iV#k^=v'$4T#nt#nt#nt#nt#6V#6V#6V#6V#(X#d@$d@$%l$``#Eq#l'%g,%tT#>|+>|+;|+hd+gd+H#$Lg+ir+Sl+cy+e~+s~@s~@`g+O0+-'@{G+q;@/G+~P+%n%$46+aN#aN#46+Ab#I_@cZ.,7$;>+,7$cZ.6]+>(@0Z.[g@|x#P{@!-=~8*P{@^-@qI*&~=l^=8i*tA%fN*$F*lE*SQ*m^=n^=o^=1.=p^=BY*q^=r^=l1.:@ N^.$(+uM Hc%{4%NP*NP*^0._W%ms%5e%S}%S}%*Z+_($1<# X+SO+qK+sq*sq*Av&0, `b&{y%{y%`b&>n.=~@*~@8Y+8`#1m.Ai.1m.zc@rz.8Y+8Y+8Y+8Y+8Y+8Y+8Y+8Y+Kh+Kh+Kh+Kh+Kh+7P.7P.7P.Kh+Kh+7P.Kh+Kh+T_+$(+xc+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@T_+$(+xc+xc+$(+T_+G|@xc+iS.y4&]! {! 7P.7P.{! T_+Ea+]! ]! xc+T_+G|@T_+G|@7P.1m.Ea+]$@Kh+8Y+G|@Ai.G|@Ai.Kh+8Y+7P.8`#oh.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+xc+Ea+xc+T_+7P.7P.G|@xc+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@bH@bH@bH@Bz$>( >( bH@cI+aH@aH@aH@aH@aH@aH@aH@aH@7P.Kh+T_+$(+$(+T_+Kh+7P.7P.7P.oh.y4&y4&oh.7P.7P.Kh+G|@$(+xc+xc+$(+G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@7P.oh.7P.G|@G|@Kh+oh.iS.7P.G|@Kh+7P.Kh+Ea+be+l7 l7 }f.}f.bH@aH@aH@Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$T_+T_+T_+T_+T_+T_+q9+q9+Ai.Ai.Di*Di*Di*Di*", "is@x5.O7.xX%O7.O7.O7.Vh.Vh.Vh.is@is@x5.x5.x5.x5.is@is@is@x5.O7.xX%_r+xX%xX%xX%xX%xX%xX%xX%xX%x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.F6.F6.F6.F6.F6.8'%Tw@Tw@Tw@[{.[{.8'%F6.F6.$_J${Z#Lc ZA ZA _,@l.#2i z^=R&&:=&A^=Z(&l[#+' U:@+' O9 +' O9 +' (7 Qk#|g l.#8v $A@5h 5h ]J 1r@W~#X~#$p@>b@rG s[@s! s! 8~ 8~ E&#CV#n{ h>#;,$$X#SN#SN#.{%l4&TI#/n%Y_@V##Ar+'>+ki@!}@A($DM#5R+k $B^=+L+Lp#5P#8k#7T+^^#;B+e^@|R+K,@ur+|G+sD+}]+}]+Nb+nD+rD+_1@+}#W4@C_$C_$1t#-X#qq#Tn#(@$>$$ic#ic#5=@5=@Pn#p=$e0#.B+@k+z@@*4+,G+%q+N,@ry+vI+tr+sr+)-+4~+)d$)d$h)+O2@6d+Zl+J#$J#$J#$Y;#C^=,T*'k+'k+'k+'k+%4+%4+%4+%4+%4+%4+-m+-m+jr+lp+lp+lp+;2+b$@b$@^_+}]+Ob+^/+St+)k+M4#mi+F:+df#>f+e8+A7#D^=5/#E^=F^=G^=z|%_K#X#1I#%2#:z$-2#9,$@R$Y:%x<%s[%m}%QR#q[%q<%P:%h8+):#):#c8+e8+Vn#(@$W1#ir+dy+hc#TY#e0#Ob+;w+;w+:&@<&@<&@#9@Bq@b3%z6*K@@{3@UO@@/=#/=$/=%/=&/=*/==/=-/=;/=>/=,/='/=)/=!/=~/={/=.{=]/=^/=//=(/=_/=:/=r~%.{=G^%F5%Ox$Nt#Nt#!z#Gt#fd$}o#}o#}o#|w#!2##G#$;$'&%0G$'i$@>+X8@>#=:=@0[$N_@ps$j<&#kP%tK@Pp 8P#Vj Sg Mc =W@J4@u7 |##u7 |##.^+bk .^+J4@p<+}/ p<+}/ .^+kB@Oe ,! Md Md Md Oe ]M$+/$g9%g9%W4+f]@]L$rV@y=$ G@n9+n9+Ca+tc+`M$^l$-($X~%*/&7g$zq$r*& f$zA*3u#i:+l:+bi+[/=}/=g3%%/%d($ah$ r#~6$|/=1/=]O#Nq#~7%{7%G[%F[%-5#%5#~2#Jq#O7#O7#)5#'6$F0#R_$J_$J_$2/=D0#ci#>X#Wy#5V#5V#z0+!6+gd+;f+k+WF#GZ@-]@(G+~G++w+z$+-(@pg@ci@gx$T`$vd%EY&sD&|o+y;@Q0+WA+4X+4X+|$@|$@{V+y^@']@+5@&7@y^@*7@-7@ED@:6$kq#*n#%o%^^#X&+BD+)_#3 @3 @*>+0G+4 @4 @0=@9=@)_$bb%3/=4/=j3&8v$Q'$k[+m~+C)+_{#CA#%n%$n%$b>%i[+i[+}_+j~+u4#(m@J3+J3+[f+J3+)}@o'@oK@/-@;9*mV$rn*EP*Q}*ox*|A*rA*zW*ft*xz%0g*SH*wI*JJ*iS*/;=LR*`: P#$M@ dl.|x.Tp*5/=Sp#:m%7&+NP*8#=qN%mq+Fc%=|$mh.SO+ X+1<#1<# X+mh.sq*u3$x*$'W+B#@!D+;n.-~@C9.C9.iS.y4&y4&y4&oh.oh.oh.iS.y4&oh.7P.Kh+T_+$(+$(+G|@G|@G|@G|@G|@G|@G|@G|@7P.Kh+Kh+G|@G|@T_+T_+$(+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@$(+T_+Kh+oh.y4&iS.iS.iS.dl.dl.Di*8Y+O^.~D.1D.D9.^v.8Y+O^.8`#QJ*dl.^x#)> G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@Kh+7P.7P.oh.oh.Ov+%U.[y+J; Q] |.+'].'&@[y+|f.P] FA+FA+FA+P] J; T_+T_+T_+T_+T_+T_+T_+T_+xc+G|@7P.oh.Kh+T_+T_+G|@T_+G|@7P.Kh+T_+$(+G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.y4&y4&7P.Kh+7P.y4&Kh+7P.7P.G|@$(+xc+T_+Kh+}f.}f.}f.bH@bH@bH@bH@bH@9g.Bz$bH@}f.}f.bH@Bz$9g.OP*23+23+US+d #u]#xc+xc+Kh+7P.oh.oh.oh.Kh+", "Vh.is@x5.O7.O7.x5.x5.Vh.Vh.Vh.is@is@x5.x5.x5.is@is@Vh.Vh.is@x5.O7.xX%O7.O7.O7.O7.O7.O7.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.8'%8'%8'%8'%8'%[{.Tw@ve.8'%8'%8'%8'%8'%F6.F6.F6.xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.x5.is@is@x5.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.xX%xX%O7.O7.x5.x5.O7.xX%N7._r+x5.is@O7.xX%xX%N7.M7._r+O7.x5.O7.xX%x5.O7._r+N7.N7._r+O7.x5.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%_r+_r+_r+_r+_r+N7.xX%x5.O7._r+N7._r+Jc@Zl@B2*B2*B2*Zl@Zl@Zl@Zl@_r+_r+#k.#k.#k.#k.wx.#k.v4.M7.M7._r+O7.O7.N7.$B#N7.N7._r+_r+_r+N7.M7.%0+M7.M7.M7.M7.M7.M7.M7.M7.@9.$B#M7.N7._r+N7.M7.M7.E6.E6.E6.E6.E6.E6.E6.E6.N7+N7+N7+N7+N7+N7+N7+q3.v7+v7+v7+v7+v7+v7+v7+v7+91+91+91+91+91+91+91+91+%0+N7.xX%_r+M7.%0+M7._r+N7.N7.N7.N7.N7.N7.N7.N7.PK.PK.#k.#7/=x:&x:&8/=bY#g1&YJ#+*+Z]$V_#@/$2|+,{+1k+P@@Oe@A(@f'#]T.rV@h>#IT#=M w_$w_$Fn nl to ol yu vo ,J 8V A=$A=$*W@aP@aP@V:@]|@8v l1#h4#9/=_=&WW&WW&1K%(d@ 9 9 9 9 9 9 9 ]|@]|@]|@]|@;! ;! Y:@Y:@ <@H~ .<@Z:@+<@`:@`:@s[@.<@Z:@Z:@+<@Z:@.<@H~ wb [t ~4 P5@Dt )<$['%lm@ry#ik&kH@ET#im@7 @P@@&h#5)#u{$I]$0/=q<*M.+j^#Kn#RS#,2+X&+/w+g~+(P+ur+p;@p;@}]+}]+Nb+nD+='@_1@W4@W4@C_$1t#1t#1t#1t#qq#rq#$$yy#yy# w#pD+v=@eK@ur+uI+y@@4X+nm+nm+ry+N)@1V+-w+=w+%>+Y;+JK$JK$<=@VF#Yl+Yl+o/#J#$o/#Y;#C^=ho*%4+%4+%4+%4+%4+%4+%4+%4+%4+%4+-m+-m+-m+)k+)k+)k+)B+)B+)B+b$@}]+Ob+Tt+Tt+)k+]_+mi+F:+df#-l#e8+'l#a/=b/=c/=dg#Wn*41%U!%Qx$%o#d/=}}#e/=f/=g/=h/=i/=j/=k/=l/=m/=n/=o/=p/=q/=r/=s/=t/=u/=v/=w/=x/=y/=z/=%M#u~%9!%u~%&M#[2#|5#=8#|5#|5#|5#=8#:o#R7#]2#Oc#Lc#_u*VB*VB*VB*Q[$9<$oA%C}%$5#$5#K7#L7#'M#MB#{X#`4#7V#J`#/l#ci#ci#VY#!X#Wy#UY#^>$D0+:z$!:#T:%9,$Y:%Y:%x<%w<%m}%q[%q[%q<%r<%06%06%*6+-6+d8+'E#rq#oq#fi+/+@#l#H`#XN#Yn+-w+-w+|R+:&@<&@#9@,N$b3%A/=ze@~-@B/=C/=D/=E/=F/=G/=H/=I/=J/=K/=L/=M/=N/=O/=P/=~/=Q/=A)%R/=S/=S/=T/=T/=s~%U/=V/=W/=X/=22#l/%l/%2w#It#;O#|o#}o#}o#Et#bV#K`#4[+m)+Sk$jP+hD+V;+X6#D&+;G+q|$Y/=2Z.P8@mv%pB.J4@ZZ U-@7, .9 c2 Ok |/ `W d!+d!+`W |/ |/ |/ |/ |/ |/ |/ |/ |/ kB@0_$Th 9_$9_$9_$Tg FR@ER@#-#DR@_J$ER@Mf Mf Tg Oe 1C G0 |C G~ ]M$Ho$f]@zg@.6$M9#^-#2K#r1@Vb+im@@A*K4#ai+RI$Z/=N#%G#%@*%[X#Pt#Zq#hT#(2#i.%S0#%f%L0#@R$v<%Y:%x<%m1$m1$=o#=o#%K#%G#F[%E4%P7#)5#Lq#*q%qT#$;$>|+Ty#'|+}T#;|+~6+Es$y0+fd+y0+B)$.4+E:+E:+oq#+}#<9@_V+~P+ay+-(@O,@Ae@'_#qt&qt&5C&EY&'7@89@*4+%>+%>+%>+*4+[6+[6+[6+{3@&7@q8+&7@*7@*7@e1@ED@ce#>Z#7k#j)$^^#g[+ov$J:+>T@>T@3 @9G+0G+4 @K)@mq@j+&`/= (=n4& b$E}%-y%A1#']$@ +f&@_{#[|$7^@(s#dX+Xx$!l$d9$5($5($d9$!l$~l$5($5($pw$b>%n%$46+46+n%$Z.+Z.+Kq@8~#=t@Tx#e~@e~@e~@e~@8Z.8e@h|+Y @]i@oZ%=R*Nu@Q}*ox*|A*rA*Kv%.(=bv*@i*TH*vg*+(=@(=lP*@X*q!+@d.H. _*.uq.>H.C(*B(*zI*7&+NP*0+,0+X@$X@${y%B#@!D+>n.;n.g$|/%-M kp w_$Fn 6q ol 4n :m :m G> Pe 8'$h*$h*$1C 1C G0 /d@8v l1#g4#9/=9/=WW&WW&_=&|g (7 (7 (7 (7 (7 (7 (7 ;! ;! ;! Y:@Y:@Y:@W:@W:@H~ H~ H~ .<@Z:@+<@`:@`:@.<@.<@Z:@+<@+<@+<@Z:@s! gp UC e'$|c@|d cj vc+cI#FT#$X#67@k2$(-#:-#i>#q>#oM%%(='8&dU%MR%Y(%]B+-t@Kq@L:+7T+nX+L@+QK+(P+K,@R0+Ob+/|+;2+mD+rD+lc#oq#Vl+Vl+;f+Nn#(=,(='(=)(=!(=~(={(=](=^(=/(=((=_(=:(=<(=[(=}(=|(=1(=2(=3(=4(=z/=&M#$#%u~%##%&M#[2#=8#=8#=8#=8#:o#R7#{2#Q7#6l#L0#N0#~C*VB*VB*VB*8<$Q[$VM*C}%$5#)2#:X#:X#+5#]/$`4#7V#~X#J`#/l#^l#ci#VY#VY#Wy#5V#^>$D0+:z$!:#T:% (%Y:%x<%s[%m}%d4%s<%s<%q<%q<%@n%@n%=6+):#;6+e8+-X#YN#fi+/+@2$@H`#`n+`K+=w+v)+wI+Jl+:&@&t@sg%z^*;0$kc@ZI+0H#TN%5(=6(=7(=8(=9(=0(=a(=b(=c(=d(=e(=f(=P/=&'=Q/=%)%&~%g(=h(=g(=.!=6!%i(=V/=j(=k(=:}#l(=]u#Q>%m(=#M#YP#ll#*M#VL#|I#;t$r0+EB$vG+sf+I&+J4#P;+.:#n(=o(=g/+ii$XC#)<$@p 4q 2' 36 xn#k[#36 Ok `W d!+d!+d!+d!+`W |/ |/ `W d!+d!+d!+d!+`W kB@0_$Th Th Th Th Tg Mf FR@{L$ER@Mf Tg Th Tg Mf Pe gG#T:@@9 H0 0_$>f#X]$M+@Gh+;-#r1$)A#Q!%p(=SI#CF%q(=~g$$t@iR+2~#i/%!-%tv$@*%ts$3~%Px$>o#|2%41%[J%#|+([+([+3/#x0+x0+;6+~6+!:#T@%#;$@;$+;$+;$5*$VY#2u$;t$(/$hd+I#$gd+RR#gd+-k+8[+;k+r:+Mg+B)$ @#ei+_1@v&@69@}G+ur+.B+|R+Jl+L@+6T+;v@;v@^`#hY#ea%kc@nm+|$@[6+[6+[6+*4+*4+*4+']@M@+q8+&7@*7@*7@q8+ED@20$ce#-B++:$+:$^^#[|+[|+X.@X.@3 @9G+0G+0G+>B+x;@M`*r(=s(=j5&D~&cW&~V&K{$qX+9Z+HK$l~+H_@4%$6~@[V+Xx$!l$d9$d9$d9$d9$!l$~l$d8$pw$b>%46+aN#aN#aN#aN#Z.+Z.+Kq@8~#=t@Tx#e~@e~@e~@e~@8Z.AB@h|+]i@oZ%oZ%=R*Nu@]}*^I*|A*rA*uw*/x*bv*RH*`O*t(=u(=v(=1D%w(=EY*ql*a(+0+.+d+.l.8#=m;+zI*7&+NP*S%>S%B#@`b&`b&!D+!D+Bj.xE*23+23+23+US+US+';$';$US+US+US+US+US+US+US+US+G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+G|@G|@T_+T_+T_+xc+xc+xc+xc+xc+xc+xc+xc+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.oh.oh.7P.Kh+T_+$(+xc+zc@8`#8`#1m.Ai.dl.q9+q9+q9+q9+Ai.1m.1m.1m.1m.Ai.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+7P.P] P] P] Q] FA+FA+FA+|.+Q] P] P] P] P] Q] FA+|.+T_+G|@G|@Kh+Kh+7P.oh.oh.$(+G|@7P.7P.G|@T_+T_+G|@T_+G|@7P.Kh+T_+$(+G|@Kh+T_+T_+T_+T_+T_+T_+T_+T_+T_+Kh+7P.Kh+T_+$(+G|@7P.G|@7P.7P.G|@$(+xc+T_+Kh+Bz$Bz$Bz$Bz$aH@aH@aH@aH@Bz$aH@aH@bH@bH@aH@aH@Bz$23+23+US+US+US+US+US+US+d #d #';$';$';$d #", "%j.dD.Vh.is@is@Vh.Vh.Vh.Vh.Vh.is@is@x5.x5.x5.Vh.Vh.dD.dD.dD.dD.Vh.is@Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.+<6+@-+6G#JK$v6@<=@6~+Yl+Yl+Y;#Y;##<$#<$C^=C^=-m+-m+-m+-m+-m+-m+-m+-m+%4+%4+-m+-m+-m+)k+)k+)k+Q0+Q0+R0+xp+|]+Sn+sp+sp+lp+)k+^|+{_+F:+Pg+V4#,f+B(=C(=D(=U6%R:%r[%(C#j}%07%E(=F(=G(=H(=I(=J(=K(=L(=M(=N(=O(=P(=Q(=R(=S(=T(=U(=V(=W(=X(=Y(=`^=Z(=z/=@M#$M#%M#$#%&M#[2#:o#:o#:o#:o#R7#{2#U7#'5#T7#N0#N0#~C*VB*VB*VB*8<$8<$l}%$5#)2#@5#/X##5#Dc#zf#7V#~X#J`#ci#^l#^l#!X#VY#,X#>X#5V#^>$D0+:z$g8+X/% (%x<%x<%s[%m}%d4%s<%s<%q<%q<%@n%W6%,j%d6%c8+QL#1=$Wl+fi+/+@2$@TY#`n+_x@1]+1]+QK+wI+:&@&t@sg%`(=X6$18+6>@ _=._=E/=+_=@_=#_=$_=%_=&_=*_==_=-_=;_=f(=>_=,_={!=%)%%)%r~%'_=h(=)_=i(=V/=!_=,_=~_=65#{_={_=]_=^_=]I#m(=/}#Tq#z|%4I#&_+@>+kV@sX@$<$i9@L>%1C#/_=g/+(_=/w$#-%>=%OW@!d@2' _m g2 qI#4!#/,@ZZ d!+_d@_d@_d@_d@d!+`W `W d!+_d@-p@-p@_d@d!+Nz 0_$Tg Th Th Th Tg Tg Tg Tg 9_$Qe Sh Sh Qe Th Oe 1C fG#@9 Md XC%XC%;K.CJ.C(@8:@FT#t6%8|$@/#@/#%I>%=k%bx$_w$.v$[_=|(@g)+!7@5~+'-+)]+lD+XA+VJ$;:#{]+-:@yT#yT#h8$em$p)+&_+0~+#_+}1@Gg+-:@Gg+Z6@._+1(@@_+jp+ei+gr+Jt+#/+nD+|G+VH@;w+#B+tr+Rt+L@+L@+;v@;v@_6$Q&$Q&$y$+N,@{V+{V+[6+*4+[=@[=@[=@+5@M@+6Z+q8+*7@*7@q8+6T+*t@20$Ln#<|++:$CD+CD+X.@X.@X.@3 @9G+9G+9G+x;@BM@Le&]1&+L%`R$~V&}_=|_=ux$o>#{v$3)#m~+*,$e'#BI+[V+!k#!l$!l$d9$d9$!l$!l$!l$pw$b>%46+aN#Jq@Jq@Jq@Jq@Z.+Z.+Kq@8~#=t@Tx#e~@e~@e~@zp+8e@AB@Y @]i@oZ%;m$;d*Nu@]}*~E*|A*|A*'Y*Hv*bv*'i*1_=^V&PT&2_=XH*% =Rc&Eu.h)@B/.u3$>H.U`%]9#zI*7&+NP*0+,0+~h&~h&`b&`b&`b&`b&`b&/{ J> US+US+';$';$d #d #d #';$';$';$US+23+23+23+OP*G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@$(+$(+$(+$(+$(+$(+$(+$(+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.7P.7P.7P.G|@T_+xc+Ea+8`#8`#8Y+1m.dl.q9+jy.jy.dl.dl.Ai.Ai.1m.1m.1m.1m.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+FA+FA+FA+FA+FA+Q] Q] Q] |f.[y+%U.Ov+Ov+[y+J; Q] G|@G|@Kh+7P.oh.y4&y4&y4&$(+G|@7P.Kh+T_+$(+G|@Kh+T_+G|@7P.Kh+T_+$(+G|@Kh+T_+T_+T_+T_+T_+T_+T_+T_+xc+T_+Kh+G|@$(+xc+T_+G|@G|@Kh+7P.G|@$(+$(+G|@7P.9g.9g.9g.Bz$Bz$Bz$Bz$aH@aH@aH@aH@aH@aH@aH@aH@aH@US+US+US+US+23+23+23+23+u]#u]#u]#u]#u]#u]#", "%j.dD.Vh.is@is@Vh.Vh.Vh.Vh.Vh.is@is@x5.x5.x5.is@Vh.dD.dD.dD.dD.Vh.Vh.dD.dD.dD.dD.dD.dD.dD.dD.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.#k.#k.#y(=16*~G*RY&wQ$TD.U{*I-*/h$v^=fx@4Z@TU#s[$s[$:-+:-+W,@.*+_-+:-+YJ#K6@s##(p%4_=4_=5_=dq$h/+l[+U-$3Y+hE%;N+Rz$qx$;v$|6$z~$kA%Uo$Ih+fs$jx@q[#vo@=M 9> j8 ol Em Fm O1 3n _g Tj ,! }E%.X lI#gG#0Y U:@O9 /d@;8 Qx@g4#g4#9/=9/=g4#8v ]|@]|@]|@]|@]|@]|@]|@;! Y:@Y:@Y:@W:@W:@+~ +~ H~ H~ H~ .<@.<@.<@.<@Z:@ <@H~ .<@+<@+<@+<@+<@r[@/t -c -c Hz 2k y6 Ku 2A xo Sv )E W3@w8+Tv Nu vc+f7#c3%YJ$QK$g+&#B$[3%-a$Yx%89$3V+0~#_f* 4#C($*5@_|+Pb+c[+/_+O0+N0+-2+gi+=g$$a@$a@#4+,d$Zb$`b$ri+i0# G# G#i0#:i#h0#]|+dy+Xg+$4+od+s~@)]+x6@lV@n<@<6+F)@5#;5#T7#;M*N0#N0#_u*_u*~C*VB*8<$7<$H_$+o#:l#'2#/K#_l#EB##G#J`#ci#^l#@I#@I#Xy#!X#!X#,X#Wy#5V#Ty#w'$D0+D0+T%$ (%Y:%x<%s[%m}%d4%q[%s<%q<%r<%@n%b7%6i%=6+':#)|+TR#Wl+lc#YA+V4@{k+~i@SW$1]+1]+QK+Jl+<&@&t@z^*`(=ci@Q<@5!@v_=w_=x_=y_=z_=A_=B_=C_=D_=E_=F_=G_=H_=I_=J_={!={!=%)%3$%K_=L_=L_=)_=U/=3^%!_=M_=N_=O_=P_=N_=Q_=R_=!8#D)=a6%S_=T_=4i%ZH$M_@*!@j1@G.*% +k7#sz#h<$8|$B2&aU$U_=Y1@Z' r) V_={3 L9 |m ]t ^1 tK _d@-p@-p@-p@-p@_d@d!+d!+_d@_d@-p@-p@_d@_d@+^+0_$Tg Tg Tg Tg Tg Th Th 9_$g*$Qe Sh Sh g*$9_$Tg *W@h*$,! Ui YG@YG@-K.|L.n9+vc+:|$#8@#8@MX#MX#k+#}%*W_=X_=M[#d*$G1*=%@-*@cB+sX@sX@TA+X;+2~+(&@E,+9V@sg@K4#K4#.$#L4#rd+I:+d1@|a@&7@']@/7@Hy+-+$}@@1@$-+,-+jV+j)+Ml+o0+Ln+jD+P0+(|+@k+1R+}=@w)+ US+';$';$d #d #d #u]#d #d #';$US+23+23+OP*OP*G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.T_+G|@Kh+Kh+Kh+G|@T_+T_+Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.1m.1m.Ai.Ai.dl.dl.dl.dl.7P.7P.7P.7P.7P.7P.7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+FA+FA+FA+Q] Q] Q] P] P] |f.[y+%U.Ov+Ov+[y+J; Q] Kh+7P.7P.oh.oh.y4&y4&y4&T_+G|@7P.Kh+T_+$(+G|@7P.T_+G|@7P.Kh+T_+$(+G|@Kh+T_+T_+T_+T_+T_+T_+T_+T_+xc+T_+G|@T_+xc+xc+$(+G|@T_+G|@Kh+G|@$(+$(+G|@oh.>( >( 9g.9g.Bz$aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@aH@';$US+US+US+US+US+23+23+:{+:{+:{+:{+:{+:{+", "dD.Vh.is@x5.x5.is@is@Vh.Vh.Vh.is@is@x5.x5.x5.x5.x5.is@Vh.dD.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.#k.#Nw#>9@Wt+!U+;N+FU$qV$[.%Bo+d]@NB@dv$[=%$g+i!@i!@m8 ~}+IT#`r s) 4n ]d {d sa ^e ^e _g Tj ,! }E%.X lI#gG#0Y U:@U:@/d@;8 ;8 Qx@Qx@g4#h4#h4#8v ]|@]|@]|@]|@]|@]|@]|@;! ;! ;! Y:@Y:@Y:@W:@W:@H~ H~ H~ H~ H~ H~ .<@.<@ <@H~ .<@Z:@Z:@Z:@.<@t! mt@u! u! (t (t /t qG 6, 6, j8 s) z6 y6 W1@v' F5 g!@HE+)G%%l+$l+'Q+F)$!f#x[#M@%)Q#'Q#M{$@L+DB$&F$I:+mB#c[+/_+u)+O0+nD+-2+Xg+Kb+Kb+#4+Wg+`b$Qc$H[%y7#nc#nc#sB#sB#mc#Qg+g0#F:+Xg+Lb+kp+j)+x6@{[+{[+lZ+Y;+6G#6G#C$+Z}+5~+5~+Zl+Yl+#<$VA#,T*,T*C^=C^=)k+)k+)k+)k+)k+)k+)k+)k+%4+%4+-m+-m+-m+)k+)k+lp+1]+Pb+v)+&>+uD+/f#uD+rp+X-$R.@'B+ji+M0+{_+Vg+!i#L:%+:%@:=#:=tY*&:%r<%%2%$:=%:=w|%&:=*:==:=-:=;:=>:=,:=':=):=!:=~:={:=]:=^:=/:=(:=_:=::=<:=[:=}:=W0#15#^}#}2#Aw#Aw#|$=Sc#]2#]2#]2#]2#>5#6l#'c$T7#N0#L0#=5#=5#=5#_u*Q[$8<$xf#xf#xf#gs%_l#>}#/K#(l#ci#!X#@I#OP#OP#Xy#!X#!X#>X#Sy#Vy#5V#^>$#;$#;$E7#9,$@R$Y:%x<%w<%w<%*Q#q[%~:#~:#06%W6%6i%,j%):#x0+ @#fi+3&@ZA+1$@&m+`K+_x@sr+sr+Jl+tr+#9@Bq@z^*@o%-7@0(@|:=1:=|{=+_=2:=3:=4:=5:=6:=7:=8:=9:=0:=a:=b:=c:=45#{!=[]%r&%d:=)_=e:=5^=A)%L]%F,=f:=Kl#Ll#Et*g:=h:=i:=xo#j:=Bi#k:=Ao#l:=TI$4]@1w+Lp#YR#'Q#i($(5@to@uo@%y [t 8s xu #2@eI#C0 V_=kr#o| ^1 4, )m -p@]*@]*@]*@]*@-p@_d@-p@_d@d!+d!+d!+d!+_d@UJ#0_$Tg Mf Mf Mf Tg Th 9_$Th Th Tg Tg Tg Tg Tg Tg L-$^D%,! Ui YG@YG@kB@.^+'z P5@N6@P[%EJ.C8@2d$m:=SN#~!%pC$My$L#$t.*}V#n:=|V#oX+oX+k9@[/+,7$^-+&]t#{v@!v@vZ#Q^@Ii*EM#EM#EM#Ii*&g$iR+1Z+X}+X}+Dt+Dt+Dt+lI+Dt+_|+k0+m;@h~+h~+.N+H,@Hl+>2+:|+ED@;7@5~#Ox#i-$Y|#kc@}a@-7@S.+-7@L@+L@+L@+wr+X{@b~@wr++5@']@M@+L@+;v@ED@GD+ED@ED@<^#I@@H@@H@@X.@X.@6G+DI+hF$}{#dN#z@%Xk#Kg%o:=CT$6:%=x%ZN+WR$%u%Tz$Yx%U`$w4#*6$hX+c9$c9$b8$b9$b9$b8$c9$c9$37$e;%Z.+Kq@8~#8~#8~#8~#Z.+Z.+Kq@8~#=t@Tx#e~@e~@zp+zr+AB@7]@]i@oZ%;m$R}*Nu@Nu@tw*]}*|A*^+=p:=5H*;&&F'*9Q*xI*q:=bQ*wT*Sw. p S jy.6j+OJ.Gu+m;+zy.zI*7&+0J*w{@93#fJ%=|$Pw%1<# X+SO+qK+qK+SO+X`+X`+~h&~h&`b&`b&`b&`b&`b&`b&J> US+US+';$';$d #d #d #';$';$';$US+23+23+OP*OP*G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+G|@G|@Kh+Kh+Kh+7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.$(+T_+G|@Kh+7P.7P.7P.Kh+dl.dl.Ai.Ai.1m.8Y+8Y+8Y+8Y+8Y+Ai.dl.dl.dl.dl.Ai.7P.7P.7P.7P.7P.7P.7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+$(+P] P] P] P] P] P] J; J; Q] P] P] P] P] Q] FA+|.+oh.oh.oh.oh.7P.7P.7P.7P.G|@Kh+Kh+G|@$(+$(+G|@7P.T_+G|@7P.Kh+T_+$(+G|@Kh+T_+T_+T_+T_+T_+T_+T_+T_+xc+T_+Kh+G|@$(+xc+$(+G|@T_+G|@Kh+G|@$(+$(+Kh+oh.>( 9g.9g.Bz$aH@bH@bH@}f.bH@aH@aH@Bz$Bz$aH@aH@bH@';$';$';$';$';$';$d #d #u]#:{+:{+v]#:{+u]#", "Vh.is@x5.O7.O7.x5.x5.Vh.Vh.Vh.is@is@x5.x5.x5.xX%O7.x5.is@Vh.Vh.is@is@is@is@is@is@is@is@is@is@x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.F6.8'%Tw@ve.Tw@8'%m D!#4K+vK#Vf 9` @B u1%wh#r:=BE*/<*RY&wQ$U{*I-*/h$v^=fx@4Z@TU#s[$s[$:-+:-+.*+_-+_-+YJ#:-+BM#ek@ek@(p%s###o+P$+@++!U+O-&s:=NB%ls+)n#bL#D_#u'@u'@{}+Zx#Zx#Zx#Qp |-@>z A6 wo 3n 3n ^e /e k8 _g 1u Ld ,! .X .X lI#gG#gG#U:@U:@ 9 ;8 ;8 ;8 |g l1#l1#l1#|g (7 (7 (7 (7 (7 (7 (7 ]|@]|@]|@]|@;! ;! Y:@Y:@H~ H~ H~ H~ H~ H~ H~ H~ <@H~ H~ .<@H~ <@>8 >8 (|@/|@^|@@~ @~ W:@+~ qG qG /t y, 5, 2k ut to 5, o{ ER@ U@Ho$v'@Z^#t,%Hh+Qz$hh$#J$6w$n)%/ +& &@L+^8$_|+vI+/_+u)+O0+nD+-2+dy+(+@F:+{_+)i#ri+H[%t:=y7#oc#oc#nc#nc#nc#sB#mc#if#6e@(6+3f#wb+ o+HZ@`g+lZ++}P+/f#70# }# }#P;@X-$,T*LP#Qn#M0+Wg+*H$m<%u:=@:=}@=E#$$`$@n%v:=[_&w:=U6%x:=y:=z:=A:=ca#B:=6:#C:=-/=D:=E:=F:=G:=H:=I:=J:=K:=L:=M:=N:=vN*Y0#-8#M&=-8#/o#Tn*(o#Lf#Ff#Ff#Lf#Lf#Ff#hi#5l#=5#L0#Oc#hi#hi#hi#5l#j:%3[%ai#O:=vF%a,$DB#=2#(l#^b$Xy#Wy#OP#Sy#Sy#Sy#Wy#>X#Wy#Zy$Ry#Vy#5V#Ty#5V#v.$)$$Wn#Wn#@R$v<%W:%r[%r[%E0+E0+_C#@n%,j%=6+):#x0+Wl+W1#2&@1$@:k+!k+-9@_x@#B+)w+}=@|=@fz@>;%z^*@o%18+n3$P:=Q:=R:=S:=T:=3:=U:=V:=W:=X:=Y:=Z:=`:= <=.<=<)=+<={!=3^%@<=/-%i(=#<=$<=%<=&<=*<==<=-<=;<=><=,<='<=)<=!<=~<={<=]<=^<=/<=1k#(e@Tx#K#$~1&Hn#N_#t7 t7 99 Cn il .' O1 .l O1 3n _g _g Qg fp $y -p@-p@]*@nm@nm@]*@-p@-p@]*@_d@`W 3r 3r `W _d@$y 0_$Tg Mf FR@Mf Tg 9_$g*$Th Tg FR@ER@ER@Mf Th 9_$FR@Tg 9_$g*$Vj XC%UJ#$y -p@OW@*2@_Y@_Y@Dh #S (<=s$#zg@}=%iT$!f#uD${($FC$0T+tp%tp%tp%tp%4w+Qy$|x@4F$/-#%X#+cZ.I_@ii@QU#U0+U0+H$+f>$<_+Sx#:_+(8$0r+FM@FM@b=#b=#FM@/K@@N+3]+-4+GD+9k@5~#=b$Y|#Ae@-4+lq#-4+lq#GD+GD+GD+;7@;v@6T+L@+&7@*7@q8+L@+ci@Ae@;v@GD+ED@ly+TQ@%o%DM@&n%CM@I$+b>%e;%$*$k[+=S+%i#iq+XR$lh#}/%}/%o1#5=%f7#Ky$Gz$y1#%*$qw$b8$_8$c9$b8$b9$b9$b8$c9$_8$37$e;%bN#Z.+Kq@8~#8~#Kq@Z.+Z.+Kq@8~#=t@Tx#e~@e~@zr+zr+AB@ck@]i@oZ%;m$R}*=q%=q%|q%9F*D%&^+=U==H)*c;=pn* P*|<=1<=lP*wT*w(=2<=s% 1m.Lh+l`.|r%]9#ns#a,+k5+0J*w{@93#)p#Pw%Pw%zM+_($ X+qK+qK+qK+mh.Nc&>S%~h&`b&`b&`b&`b&`b&!D+17*17*J> J> J> zi.zi.zi.J> J> J> J> J> 17*17*17*G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+G|@G|@Kh+Kh+Kh+h~ h~ h~ h~ h~ h~ h~ h~ h~ h~ h~ h~ h~ h~ h~ h~ 7P.7P.7P.7P.7P.7P.7P.7P.G|@G|@Kh+oh.oh.oh.7P.7P.Kh+Kh+Kh+7P.7P.7P.oh.oh.Kh+G|@T_+$(+T_+G|@Kh+oh.7P.7P.7P.7P.7P.7P.7P.7P.T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+$(+$(+$(+|f.|f.|f.|f.J; J; J; J; P] Q] FA+|.+|.+|.+|.+FA+y4&y4&oh.7P.Kh+Kh+G|@G|@G|@Kh+Kh+T_+xc+$(+G|@oh.T_+G|@7P.Kh+T_+$(+G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+$(+G|@Kh+G|@T_+$(+T_+Kh+$(+G|@Kh+G|@$(+T_+Kh+y4&9g.9g.Bz$aH@bH@}f.l7 l7 }f.bH@Bz$9g.9g.Bz$bH@}f.';$';$';$d #u]#:{+:{+v]#u]#u]#:{+v]#:{+u]#", "is@x5.O7.xX%O7.O7.O7.Vh.Vh.Vh.is@is@x5.x5.x5._r+xX%O7.x5.is@is@is@x5.is@is@is@is@is@is@is@is@x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.[{.ve._;=2o.2o.Tw@8'%{+3I.|=&.@$x+%<=&9P#u[$|F$8E$J!$E&#gP@])#OM.OM.OM.P2+UJ#Qg _g k8 /e /e x' x' k8 _g Qg Ld Oe `;$.X .X gG#gG#T:@U:@T:@ 9 /d@;8 (7 8v 8v 8v (7 (7 (7 (7 (7 (7 (7 (7 (7 (7 (7 ]|@]|@;! ;! ;! H~ H~ H~ H~ H~ H~ <@ <@ <@H~ H~ H~ <@>8 +9 I~ zR@VT@WT@Ox@Ox@%W@4|@.<@t! W:@Y:@_t e{@{T#^t /t ;! G0 S:@,8 Lc ~~#ER@Ho$ /# n+RB$C%%3<=.9%|h&l~$EA#Ln#S.+M@+4X+qy+U_@nD+qD+/+@(+@F:+]|+U4#PL#4<=p0#q0#q0#q0#Iy#Iy#tq#Vn#W4#0[+~_+!i$kp+%4+St+IZ@lZ++!-+!-+4T+70#W/$W/$W/$P;@X-$zR#VA#ji+Qn#Zb$*H$.S%5<=ye$K:%*2+Gy#=6+6<=7<=8<=[u#9<=0<=a<=b<=c<=d<=e<=f<=g<=h<=i<=j<=k<=l<=m<=n<=o<=p<=FH*q<=c]=+<={}#Lf#{}#/o#Tn*(o#Ff#Ff#Ff#Lf#Lf#Lf#Ff#hi#5l#Oc#Qc#Ff#Lf#Ff#hi#=o#j:%z0#!>$r<=r<=et#q'$^$$w.$Wy#UY#Sy#Zy$Zy$Sy#Wy#>X#Sy#,/$7t#Ry#UY#5V#UY#{w#2@$xc#xc#Wn#X:%v<%AC$AC$_O#_O#_C#06%,j%=6+):#x0+YN#3&@2$@V4@:k+lp+sp+Lt+dB@dB@6o@6o@Rx#>;%z^*@o%eV$I^@k0*s<=t<=u<=v<=#_=w<=x<=y<=z<=A<=B<=C<=D<=E<=F<=`y${_=G<=@<=l.%.{=H<=I<=&<=J<=K<=L<=M<=N<=O<=Cl#P<=Q<=R<=S<=T<=U<=V<=W<=X<=P{@dH#C/%*D%82&gs#Sh zD -{ 8_@R} V-@:t cq ,J z UJ#uK@X]$X]$ak#]*@nm@nm@nm@nm@]*@-p@nm@_d@3r 9Y 9Y 3r _d@~t@0_$Tg Mf FR@Mf Tg 9_$Qe Qe 9_$Mf ER@FR@Th Qe 9_@Th 9_$g*$Qe XC%.G@({+IT#`i@!d@u*@H< u*@r*$*P hQ Ne X m>@[/$2c#XJ$;v$_l%%u%&R$E:%#J$Ky$Ky$0E$g3#@g+wz@D(@tc+`F@ZN+-S+.1%c3%=g%6p%-g%Y<=Z<=`<=*;&e.% [=Z[&.[=+[=z5${M#Z_# v@C4#A4#4d$7F$(R#'p$7]+i~$Q1+H5$,5@ha@ha@yg%6]+y_$i~+ov$y9#GD+;7@X<#Dy$EO@%o%_Z$kq#kq#6k#^k#Ln#-4+'_#(w+;m+|6+*7@q8+L@+qg@ci@Ae@;7@GD+ED@:a$*n#&n%CM@-,$e;%^f#`&+2S#V,+WQ@0+sq*>S%>S%B#@`b&`b&!D+!D+!D+xE*17*17*17*J> J> zi.zi.J> J> J> J> J> J> J> J> G|@G|@G|@G|@G|@G|@G|@G|@$(+T_+T_+G|@G|@Kh+Kh+7P.Bj.Bj.Bj.Bj.Bj.Bj.Bj.Bj.h~ h~ h~ h~ h~ h~ h~ h~ 7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.oh.y4&oh.oh.7P.Kh+oh.oh.oh.oh.oh.7P.7P.7P.$(+$(+xc+xc+T_+Kh+y4&]@+7P.7P.7P.7P.7P.7P.7P.7P.T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@T_+$(+$(+xc+xc+%U.%U.[y+[y+|f.|f.J; J; [y+|f.P] FA+FA+FA+P] J; iS.y4&oh.7P.G|@T_+$(+$(+G|@Kh+Kh+T_+xc+$(+G|@oh.T_+G|@7P.Kh+T_+$(+G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+T_+G|@7P.Kh+T_+$(+G|@7P.$(+T_+G|@G|@$(+T_+Kh+y4&9g.Bz$aH@bH@}f.l7 cI+cI+}f.bH@Bz$9g.9g.Bz$bH@}f.US+';$d #u]#:{+v]#h]@M8@d #u]#:{+:{+:{+d #", "is@%j.Su$Su$Vh.xX%M7.is@Vh.%j.%j.dD.Vh.Vh.Vh._r+_r+_r+xX%O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.is@is@x5.x5.x5.O7.O7.O7.is@x5.O7.xX%xX%O7.x5.is@0q.+,>+4[%4[%4[%YJ#YJ#4)#NX.^M#g&@.+@&[@06&+Y.W&&OK$NK$Z~#F&#~M T~#.<@<,@<,@n{ ;1+W4+f]@UJ#tK yy 2' f2 _m x' 2' w' Rh Rh )8 CD Ui 4C#X] Tk#fX#gG#fG#T:@_7 ~)#~)# 9 V:@;! ]|@/d@RT@.9 O9 O9 .9 .9 O9 /d@/d@(7 ]|@Y:@W:@W:@W:@W:@+<@.<@ <@+9 +9 <@.<@+<@.<@.<@ <@>8 +9 +9 +9 [e k[*#X #X aV aK#JT ,S 9V ~M eP@H~ >8 >8 y, W:@+~ u! G5@LZ$8v |g ]|@>8 ~~#Mf aL#jq++J$[[%68%cS&)X$k3&7k#J9#a*$;Z#a~@M)@gp+^V+='@W1#2f#Qg++w#+w##h$1i#i8%cF$2i#Iy#&[=Ky#tq#sB#~|+/6+Kb+RO@X+$kr+Zl+e4%+!-+k0+4T+70#sb+sb+W/$]7%:T#N{$0c#ki+M4#Qc$t7#*[==[=-[=ye$08+w0+#k%v(%;[=i]&>[=,[='[=)[=![=~[={[=][=^[=/[=M^=([=_[=:[=<[=[[=}[=|[=1[=2[=3[=4[=Wy*Lf#{}#/o#/o#25#{}#25#Lf#Lf#Ff#Ff#hi#hi#hi#hi#Rc#S7#T7#T7#_u*5l#Hq#Gq#zq#!>$a,$x0#w.$E7#E~$v.$Vy#wB#Vy#Vy#Vy#Vy#Vy#Vy#Ry#Ry#Ry#Vy#Vy#UY#UY#v.$ (%Wn#yc#xc#WP$X:%z!$ct#_O#_O#_C#@n%6i%6i%d6%%|+fi+2&@2$@{/+:6+'k+ L+Gt%vD+$B+Zp%S##g~+#o%5[=Jl+_h+J:%91*6[=7[=8[=9[=0[=a[=b[=c[=d[=e[=f[=g[=h[=i[=j[=D,=k[=l[=[]%5^=m[=n[=o[=p[=J<=q[=r[=N<=s[=t[=u[=v[=w[=x[=y[=z[=A[=B[=C[=go@5N&'m+WS@M=&c#&gB#dq#M-$J}%-C+'8 :7 P9 ET .G@uK@X]$NM.Co+@.@)m$|##`W |/ 3r |/ d!+-p@]*@,z ,z X7@X7@nm@nm@nm@$y ]M$FR@Mf Th 9_$g*$Qe Sh 9_$9_$9_$Th Th Th Th Th Vi Vi Qe g*$XC%.G@%S ({+Ne Qg 1u f[@k8 $2@f[@r4 7n Qk#(,@@9 Md Vj 09 6O.Hh+Hh+X6%X6%#{@SD@B(@9T@`i@If If ET .G@Ho$aL#ck#TP.D[=Ks&E[=F[=0e%G[=g2%I^$H[=I[=&7$!8$J[=td$rz#J^$gO$@N$qz#$N$pz#o]+K[=Ne$Y_#Z|@3u#GH@Q%$Mw# (@VX.dZ..o+0a@7k#G@@]k#X/$Uv#TR$`s*zw$BU$w)$%o%%o%<|+ly+:|+:|+S0+_|+_|+_|+&N+(w+8V@8&@8&@8V@:a$>Z#8-%I$+%6$ c%,`+!_#|0#%N$V{$=0@CN 0> .~ xt )J >M kh$d]@b]@pD#O4$3V+09$%K$sS$sS$sS$hU$sS$cN$a9$Ej$Bb#Bb#Bb#Bb#Bb#Bb#Bb#Bb#bN#Z.+8~#{B+2w+Tx#y'#cH#y'#zp+ck@>`+oZ%oZ%R}*=R*dN*ts%kE*BL$aG*gD*s4*MD*G%=L[=t(=pK$8J*6T*9B$-H*M[=FA+7P.7g.Pw%vA*7&+U%+e{+Q>.T`%h;#CI#yE#1<#1<#vC#_($ X+qK+$' $' mh.Nc&~h&~h&`b&`b&`b&`b&`b&`b&{h&{h&{h&{h&{h&{h&{h&{h&~h&>S%~h&&, Bv&Bv&{h&$.@Kh+Kh+Kh+G|@G|@T_+T_+T_+7P.$(+Ea+$(+7P.y4&7P.$(+/{ {y%'W+{y%>n.-~@}m.-~@!D+!D+!D+!D+!D+!D+!D+Bj.$(+$(+T_+G|@G|@Kh+Kh+7P.7P.7P.7P.7P.7P.7P.7P.7P.US+US+US+23+OP*OP*x{+x{+';$';$';$';$';$';$';$';$Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@oh.G|@$(+Kh+iS.w5&iS.Kh+$(+$(+T_+G|@G|@Kh+7P.7P.J; J; J; |f.[y+%U.%U.%U.|f.J; J; P] P] Q] Q] FA+7P.7P.Kh+G|@G|@Kh+7P.7P.Ea+$(+G|@oh.y4&y4&oh.7P.7P.7P.Kh+G|@G|@T_+$(+$(+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.T_+Ea+xc+G|@Kh+$(+5A.$(+xc+xc+$(+Kh+7P.G|@xc+Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$aH@aH@aH@aH@aH@aH@aH@aH@23+d #:{+:{+d #23+23+23+:{+:{+:{+:{+:{+:{+", "is@dD.%j.dD.is@O7._r+x5.is@Vh.dD.Vh.is@is@is@xX%xX%xX%O7.x5.x5.x5.is@x5.x5.x5.x5.x5.x5.x5.x5.is@is@x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.v4.F6.ve._;=[{.+,>+4[%4[%4[%YJ#YJ#4)#NX.^M#O]+-T.U)@9R+c]@X6%a6&Q-$n$#||@}|@(|@t! W:@va Dn Ho$uK@>n#Nz Ok w' Jc e2 e2 f2 2' w' Rh Pk )8 CD Md 4C#Tk#Tk#yz#0Y 0Y 0Y _C@WC@WC@~)#T:@S:@U:@.9 @A@+L@O9 O9 .9 .9 O9 /d@O9 9 (7 ]|@Y:@W:@+~ +~ Z:@H~ >8 V:@V:@>8 H~ Z:@.<@H~ <@>8 >8 >8 <@YT@Qm&N[=O[=P[=P[=P[=Q[=R[=!8&HT n)$&W@cK#&W@&6v$)H$..&=n#7#%K@+om+Dq@lm+(G+.}#cc#cc#Qg+h0#q7#;p$i8%jd+Hy#`H#&[=y4%'E#'E#Nn#/6+Kb+=m+[w+ub+!7@Y;+Y;+@-+F)@5~+VF#7}@wp+ m+ m+,T*,T*,T*,T*ho*ho*&m+&m+~k+~k+~k+!k+!k+!k+&m+~k+-m+%4+%4+-m+~k+[w+&>+!-+k0+4T+S[=sb+sb+W/$T1#tb+9c#0c#Mn#&l#Qc$t7#T[=U[=V[=>d$.v$Db+uy$W[=X[=Y[=c~=Z[=`[= }=.}=I^=+}=@}=#}=8d#$}=%}=&}=*}==}=-}=;}=>}=,}=b/='}=)}==q*M&=25#!}=!}=25#{}#-8#M&=M&=M&=Lf#Ff#hi#hi#hi#Jc#Rc#'c$'c$=5#5l#Hq#oT#Yn#2@$x0#wq#v.$'$$v.$D7#wB#wB#wB#wB#wB#Vy#Vy#Vy#Ry#Ry#Ry#Vy#Vy#UY#UY#v.$0,$xc#7i#yc#WP$X:%A)$u0#I~%I~%{6+h8+=6+=6+):#:[+ei+/+@2$@1$@si+jr+ L+Mt+S.@xD+#r%S##Rt+~}={}=Jl+~a+F(#]}=^}=/}=(}=_}=:}=<}=[}=}}=|}=1}=q]=2}=3}=)j#j[=D,=D,=!s*h~=V/=m[=4}=5}=6}=K<=Hl#7}=8}=9}=u[=0}=Qs*a}=b}=c}=d}=e}=f}=g}=R(+}x#G~+Br+N#$Xe&o!&za#h}=8[% >$g*$Qe Sh .G@>f#NM.Co+&l+XJ$6r$X:$%c$d!+`W `W `W d!+-p@]*@X7@X7@nm@nm@nm@]*@]*@$y .G@Mf Tg Th Th 9_$g*$g*$Th Th 9_$9_$9_$9_$9_$9_$Pq Pq Qe g*$hP@.G@%S n{ A6 A6 Qg _g k8 /e _g ^e |1&Qx@k1#;8 (,@V-@'8 Md Tg C;$C;$/G /G /G /G Uj VH l.#]|@_,@V:@W-@h*$FR@k;%QN#i}=;4%j}=a.%k}=Z8%!<$1d sZ.g9 #8@<>*{3%`}$1E$1E$AV#AV#SN#SN#s1@>'+qz#s4$'g$)/#ts@r>#J[#2)#U=$(-+X_@8Z+aN#-,$zw$zw$g>&g>&>M$>M$cs%T!$jq#or&j)$[|+3]+'T@Hl+W&+S0+S0+:|+Y.@9$@^K@8&@8$@*n#7T+-,$27$j[+-&$;z@+x@{v$*/#i#@`+FJ$oZ%;m$'H%nK$ts%l}=$F*KN*]D*]E*#H*m}=G%=L[=t(=n}=2_=MJ*Qv.o}=_l JI$US+QF+EI#)Z%k5+*1.&1.&1.T`%h;#CI#yE#1<#1<#zM+1<# X+qK+$' $' sq*mh.~h&~h&`b&`b&`b&`b&`b&`b&{h&{h&{h&{h&{h&{h&{h&{h&{h&~h&>S%{h&Av&&, ~h&x*$Bj.Kh+Kh+G|@G|@T_+T_+T_+7P.oh.y4&y4&oh.oh.y4&C9.!D+B#@'W+{y%!D+;n.;n.>n.!D+!D+!D+!D+!D+!D+!D+!D+/{ G|@G|@Kh+Kh+Kh+Kh+Kh+7P.7P.7P.7P.7P.7P.7P.7P.';$';$US+US+US+US+23+23+US+US+US+US+US+US+US+US+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.Kh+G|@G|@7P.oh.oh.7P.T_+T_+G|@G|@G|@G|@Kh+Kh+J; J; J; J; |f.|f.|f.|f.J; J; J; P] Q] Q] Q] FA+7P.7P.Kh+G|@T_+G|@G|@Kh+T_+G|@G|@Kh+7P.Kh+Kh+G|@Kh+Kh+G|@G|@G|@G|@T_+T_+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@Kh+Kh+G|@T_+$(+$(+T_+T_+$(+xc+T_+7P.7P.G|@$(+Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$aH@aH@aH@aH@aH@aH@aH@aH@US+d #:{+:{+';$OP*x{+OP*u]#u]#u]#u]#u]#u]#", "Vh.Vh.is@is@is@x5.x5.x5.x5.is@is@Vh.is@x5.O7.O7.O7.x5.x5.x5.is@is@is@Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.is@is@x5.x5.x5.O7.O7.O7._r+xX%x5.is@is@x5.xX%_r+F6.[{.ve.ve.8'%+,>+_-+_-+_-+:-+:-+K6@s[$Nw#P]+Z<#D[#=@#SD@.B#%-#DN %2@[|@_|@/|@W:@+9 H0 Uj Vj .^+-K.A%@Pk P3 R-@+l +l e2 w' w' <7 Pk A%@Vj ,! fX#aY aY yz#fX#fX#aY ;{ 3C 3C ;{ aY yz#4C y&#@A@+L@ 9 O9 +L@+L@O9 /d@O9 O9 9 (7 ]|@Y:@W:@W:@H~ <@+9 V:@V:@+9 <@H~ H~ <@ <@>8 <@ <@H~ mQ r}=s}=t}=,(*,(*O[=u}=jW&P-$o)$0'$L%$s1%n)$n)$eP@W:@}u 5h 5h Cj@Hv@Hv@]J t! H~ L-$s1%5y&mY#v}=W<&dj%w}=UB*VR$(^$*>$e^#%5@&q+mm+dr+jV@rX@ w#`J#F:+a[+!i#!f+if#sB#Ky#<@$sq#sq#YN#+_+$4+}]+vp+b9@O@+5~@F)@lZ+m0+7}@wp+2Z+vp+ub+ub+VA#VA#VA#VA#C^=C^=&m+&m+~k+~k+~k+!k+!k+!k+&m+!k+)k+%4+%4+)k+!k+[w+&>+!-+k0+4T+70#W/$W/$W/$*:@ey+x}=mq#WN#&l#'i#H[%6|%By$[f#wy$b%%Z1+lV$y}=*{&z}=A}=B}=C}=D}=E}=F}=G}=H}=I}=J}=K}=$}=L}=M}=N}=O}=P}=Q}=3:#R}=S}=!V*Of#Mf#12#T}=T}=%5%~}#Mf#;8#;8#Mf#~}#!}#}l#gi#hi#K0#K0#6l#6l#5l#hi#Hq#oT#.(%)$$'>$wq#,>$I`#D7#NP#,6+,6+,6+,6+,6+wB#wB#wB#Ry#Ry#Ry#Vy#Zy$Sy#Sy#w.$2@$7i#sf#yc#WP$v<%EC$z!$E_$E_$~6+]6+*6+*6+':#x0+._+ir+ZA+RO@!k+Kt+mp+mr+xD+S.@{]%T##w)+U}=V}=QK+M2%W}=X}=Y}=Z}=`}= |=.|=+|=@|=#|=$|=%|=&|=*|==|=z!=z!='~=,s*h~=G<=V/=-|=;|=>|=,|=!'='|=)|=[S*dw*^g#!|=~|={|=]|=^|=/|=R5#(|=_|=:|=B@+)m+>/#@f$dR.TS#o!&;t#(a -g&-g&Pq vK@>f#Cu+NM.Co+&l+XJ$.E#&l+2L.]*@-p@_d@_d@_d@-p@-p@nm@nm@]*@]*@-p@-p@-p@UJ#0_$Tg Tg Tg Tg Tg Th Th Tg Th Th 9_$g*$g*$Qe Qe Vj Vj Vj Vj hP@0_$ X %S %S jl If Ld il [} il [} #A@k1#k1#|g |g (7 G0 G0 1C H0 H0 H0 Oe Lf Lf W-@8v l1#Lz ]|@a~ V:@I~ |C >S s1%<|=m:*[|=S<%}|=) $G5 a3 +s@X4 Dh g[@||=||=1|=1|=cj cj SU%SU%yR$FT##/#'=%v1#,q$e>$=/#td$J^$r4$|)#K6@!}@|/+6v#9~#& +k3&k3&k3&('$6P#bN#46+}|+CM@yM@@N+@N+.N+.N+h~+Hl+>2+f^@*>+cB@^K@DM@W~$8k#k`%.l#DT#IC$%>#Ow#cX#'q$p~$G%$7F ;b =^$Hv ;z$2r@36$MX$s'@h-+^F$k[+T4$_a$_a$Dj$Dj$Dj$Dj$_a$,L$,L$}/+}/+}/+}/+}/+}/+}/+'2+Z.+Kq@8~#uy+Tx#Tx#8Z+y'#zp+fm@FJ$7j*R}*R}*=R*=q%l}=2|=BL$DF*xG*(I*3|=@i*IS*$ =4|=5|=[I*LR*~C+F{@mn s`.d #tS FI#@9.k5+&1.&1. c.Q>.m3.sQ@yE#_($1<#1<# X+SO+$' 5,+5,+>0+>0+{h&{h&!D+!D+!D+!D+!D+!D+%z&%z&%z&%z&%z&%z&%z&%z& ==%z&+y&+y&.y&.y&Xw&x*$Bj.Kh+Kh+G|@G|@T_+T_+T_+T_+oh.w5&]@+Kh+G|@y4&ur&;n.#d+`E&`E&#d+-.%<:*#d+<:*<:*<:*<:*<:*<:*<:*!D++,>+_-+_-+_-+:-+:-+K6@s[$/M#}v@qK@LJ@-[@7e+~}+|d$:e 7G@cN@X~#W:@V:@gG#:7 #9 G`+eF.eF.$9 X]@_)@Ea#Ea#3m *l w' >J B6 O#@p<+Vj ,! fX#aY aY yz#fX#aY ;{ ;{ 3C i'#3C 4C 4C 3C p{ _C@+L@ 9 9 +L@+L@ 9 (7 /d@/d@/d@/d@/d@(7 ]|@]|@ <@>8 +9 V:@V:@+9 >8 <@+9 +9 +9 +9 +9 <@H~ mQ 6|=7|=8|=,(*r}=jW&jW&JR%P-$o)$}1& {# {#s1%s1%n)$cK#>8 >8 Y:@}u ]J ]J ]J r[@t! <@)=bp* k%'o#35#^o#u|=v|=12#~}#~}#%5%35#;8#Mf#~}#}l#gi#gi#+f%O0#Ic#Ic#hi#gi#fi#'}#(O#1@$dt#vq#D7#!w#NP#Jy#e8+e8+e8+,6+,6+,6+wB#wB#Ry#Ry#Ry#Vy#Zy$Sy#Sy#w.$'>$sf#6i#7i#WP$v<%EC$A)$8,$E_$!6+{6+):#*6+':#:[+#_+Rl+{/+}&@&m++m+mp+np+xD+S.@S##S##K)@w|=x|={V+u|#y|=z|=A|=B|=C|=D|=E|=F|=G|=H|=I|=J|=K|=L|=M|=N|=O|=)~=P|=Q|=R|=-|=!_=S|=T|=U|=V|=W|=X|=Y|=Z|=`|= 1=&%=.1=+1=@1=#1=$1=%1=&1=*1=}X+3Z@Z<#[ +WQ@SS#TS#$i#gs#Fn#pH .x+Wj C;$C;$l>@]L$Co+Co+&l+Co+j9$X7@nm@]*@-p@-p@-p@-p@]*@]*@]*@-p@-p@_d@_d@@(+hP@Th Tg Tg Mf Mf FR@FR@Mf Mf Tg Th g*$Qe Sh Sh hP@XC%XC%XC%hP@0_$ET X CV#n{ X Uj Rg CD Cn :7 /,@#A@;8 Qk#(7 _,@;! ;! G0 G0 ,8 ,8 W-@G~ G~ ZA ;! LZ$YA a~ I~ 0~ 0~ (V#mQ ZT@>S ]@$3e%M%$.>$9_$Mz SH Cd SH u*@5q -h@BN 'E BN BN BN BN BN e'$,z GT#${#z-$&-#A4%FX$X}%j2@,q$1K#.B%L6@5W.H!#tW%}V#'Y&|,$k~$% +k^#Jn#T@+Bb#u_%nq@]-+VK+b^@b^@SK+SK+hX@>T@x)++,>+.*+.*+.*+,>+,>+BM#s##TU#4u#aR.t@+FT#+/@$c$CN UH $p@mt@]J ]|@gG#Sg Nd F`+Re R9 R9 w[ j_ Rj E> E> Ea#*l w' >J B6 O#@o<+t7 Ui fX#aY aY yz#yz#Tk#zy@Sk#Tk#X] Tk#4C#4C#X] {#.~)#O9 /d@ 9 O9 +L@ 9 (7 Y:@;! (7 /d@ 9 9 9 /d@>8 +9 +9 +9 +9 +9 +9 >8 V:@G0 G0 G0 V:@+9 >8 *0@@X bY bY ,S ``$``$}M#d)%HT 3h `~#BR@BR@o{ o{ 8V FR@Pe {Z#~~#:,@<,@+~ +~ r[@t! W:@H~ ~M Ad$q)$:[%A'$5r$+.@..@V,%2c%/1&`]$DB$'*&*5@xr+L@+5T+4X+$>+)k+4f##4+=g$Ey#rq#C_$@}#W4@GZ@_V+)B+(|+l0+7y+j/%Y}+m0+<6+%>+2Z+lr+|]+|]+ub+ub+VA#VA#VA#VA#C^=C^=&m+&m+~k+~k+~k+!k+!k+!k+!k+!k+)k+)k+)k+)k+!k+kr+v)+&>+&>+}P+/f# }# }# }#ec#*w+8f#nq#bf#Ng+qi+Oj$t7#>1=~a$B5$LU#|/#yb+vh$,1='1=)1=!1=~1={1=]1=^1=/1=(1=_1=:1=<1=[1=}1=|1=11=Q}=21=31=41=51=61=T_=~o#@a#S6%{_=k(=@a#Z+=Z+=#a##a#Nf#=q*qi#Z+=)}#}l#+f%|G#]2#]2#Ff#gi#n#l>@uK@X7@X7@X7@nm@nm@]*@-p@_d@]*@]*@]*@-p@-p@_d@_d@@(+hP@Tg Tg Mf FR@ER@ER@_J$FR@FR@Mf Tg 9_$g*$Qe Qe 0_$0_$hP@hP@hP@0_$Mf FR@{L$_J$FR@Tg 9_$g*$g*$Ui '8 T} V-@S-@Sr :t ,8 ,8 ,8 ,8 W-@W-@Lf Lf Lf W-@|C |C |C |C |C |C |C h*$L-$L-$*W@*W@^D%^D%9O#Lf X Qg Ok yy `i@z ~t@|-@p!$`w `w La@O%$QH#u}@j8$mo%/i@'{+|e%OJ@1++[#+[s#M:+Cb#dN#'p$U4$2O#e'#;($%9@&9@U[#W=+AI+zI+zI+=>+W.@6G+/'$b>%.3%K~$&LR*{E.E1=q+ *:.u]#QF+zM+h|.62.R>.Pz.Pz.&1.s4.h;#k1+1M@Yy&SO+SO+qK+qK+$' 5,+,0+u.@0, 0, >n.>n.>n.>n.>n.>n.%z&%z&%z&%z&%z&%z&%z&%z&)A&)A&.y&Xw&Be+@d+@d+X@$Bj.Kh+Kh+G|@G|@T_+T_+T_+T_+Ea+5A.Ea+T_+Kh+T_+y$$(b+RD*-.%-.%M]*M]*-.%<:*<:*<:*<:*<:*<:*<:*<:*!D+=~@y4&y4&oh.7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+x{+b=+lt*FG*FG*pK+S>+S>+pK+pK+pK+pK+pK+pK+pK+US+G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+T_+Kh+7P.T_+5A.]! xc+Kh+7P.7P.Kh+G|@G|@T_+$(+$(+P] P] Q] Q] FA+|.+|.+|.+FA+FA+FA+FA+Q] Q] Q] Q] Kh+G|@T_+$(+xc+xc+$(+$(+$(+xc+Ea+Ea+xc+T_+7P.oh.$(+$(+T_+G|@G|@Kh+7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+]@+oh.Kh+7P.y4&y4&7P.G|@Kh+G|@T_+Kh+y4&y4&7P.G|@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@bH@u!=x{+US+US+23+US+u]#v]#23+23+23+23+23+23+", "is@x5.O7.O7.is@dD.%j.Vh.O7.xX%x5.dD.%j.is@_r+is@is@is@x5.x5.x5.O7.O7.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.is@is@x5.x5.x5.O7.O7.O7.x5.is@Vh.%j.%j.Vh.is@x5.F6.8'%[{.8'%F6.F6.[{._;=Tw@Tw@Tw@Tw@Tw@Tw@Tw@Tw@x5.O7.xX%xX%xX%xX%O7.x5.Vh.is@is@is@x5.x5.x5.x5.is@xX%M7.M7.xX%x5.is@x5._r+_r+xX%x5.Vh.Vh.O7._r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%_r+xX%xX%O7.xX%_r+N7.M7.x5.O7.O7.O7.xX%xX%xX%xX%_r+_r+_r+_r+_r+_r+_r+V^$pD&d1*d1*d1*pD&pD&pD&pD&_r+_r+#k.#k.#k.#k.wx.#k.#k._r+_r+N7.N7.M7.M7.M7.N7.N7.N7.N7.N7.N7.N7.N7.x5._r+$B#@9.$B#%0+%0+$B#M7.M7.M7.%0+%0+%0+$B#|5+ye#o2$o2$o2$o2$o2$o2$o2$9H.9H.6g*6g*~k.~k.o2$ye#ye#91+91+91+91+91+91+91+91+91+91+91+91+91+91+91+eO@@9.$B#%0+M7._r+xX%xX%%0+%0+M7.M7.N7.N7.N7._r+I1.I1.v4.v4.:t@:t@6R@QI.J].-J.3b df.G- z* f= Bs 25 Vu vF+tB.-x+Tz kb@0N.UD.UD.RY&TD.U{*V)*m%+I-*%[=R8@W #Nq@s[$s[$,>+,>+.*+.*+.*+,>+,>+BM#s##TU#4u#p3$kO@<>*&b@Ts$[r@/t Hv@Cj@(7 U:@Mc Nc A9#Od U} U} j< <: 0P@0P@Ea#Ea#3m e2 >J Mz ep eF.:N..(+Sg aY 4C aY fX#fX#Tk#zy@4C#Sk#Tk#4C#-C+-C+AD Tk#~)#O9 /d@/d@O9 O9 /d@]|@+~ W:@]|@/d@ 9 9 /d@(7 >8 >8 >8 >8 >8 >8 >8 >8 +9 V:@V:@G0 V:@+9 >8 {M $S#PH$$S#Ox@Ox@%W@%W@%W@+2Z+lr+|]+|]+Kt+Kt+0c#0c#0c#0c#N4#N4#&m+&m+~k+~k+~k+!k+!k+!k+)k+)k+!k+!k+!k+!k+)k+lp+=w+v)+v)+rr+uD+ }# }#rp+V1##m+nq#*m+(k+mi+a[+a[+[f#Vb$A5$$sf#6i#sf#wc#WP$A)$u0#I~%8,$!6+Z3+':#):#):#,:#Pl++/+Lb+!k+IZ@*w+np+| %&B+T.@Sm#O|%Zp%U}=Il+2=,2='2=)2=!2=~2={2=Q|=k{=]2=^2=q'=6}=/2=(2=_2=:2=<2=[2=}2=2d#|2=12=22=32=Q5#42=52=62=72=82=0O*92=-q$s1&xL.>N+ E.fW.D6 J0 Fj >J w' w' 2' k8 k8 _g Qg Qg ]*@]*@nm@nm@nm@]*@-p@_d@nm@nm@]*@]*@-p@-p@-p@UJ#.G@Mf Mf FR@ER@ER@_J$_J$ER@FR@FR@Mf Tg Th Th Th ]M$.G@0_$0_$hP@0_$Tg Mf {L$:>$`T@Ug 02=z=$N(%Iw%XC%ZZ Rg Rg Rg Ld Ld S-@jl W-@W-@Lf Oe Th Th Th $''%8]+'p$k7$k7$xW#Q_@Q_@K3$K3$Gl+[V+=>+=>+~K@BM@iF$37$`]$H!#N]+/B+M9#j^&*a@55%wr$Xj$&@&#c*0A%s}%!p$iq$Y,@N&#s=#R]+V,+#@#x4#N;$@d$@d$_a$_a$@d$,L$J3$w4#Lq@Lq@Lq@Lq@Lq@Lq@Lq@Lq@=t@Kq@Kq@Kq@~ +=t@8Z+e~@fm@i|+u##rn*'H%R}*=R*nK$=1=lE*0F*EF*(I*tI*hT%yG*xM*gW&|<=+H.w>&a2=b2=l5%5. w{+v]#U[&'m*%U*R>.R>.-'.Pz.5J.C6.n3.H8@1M@1M@SO+SO+ X+SO+qK+$' ,0+u.@0, 0, >n.>n.>n.>n.>n.>n.%z&%z&%z&%z&%z&%z&%z&%z&.y&%z&)A&%z&Xw&Be+Be+>S%Bj.Kh+Kh+G|@G|@T_+T_+T_+oh.T_+Ea+$(+oh.iS.oh.*$@c2=RD*-.%-.%M]*/p.M]*<:*<:*<:*<:*<:*<:*<:*<:*!D++S>+S>+S>+S>+S>+S>+S>+T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@$(+G|@Kh+G|@$(+xc+$(+T_+Kh+Kh+G|@G|@G|@G|@T_+T_+P] Q] Q] Q] Q] FA+FA+FA+|.+|.+FA+FA+FA+Q] Q] Q] G|@G|@T_+$(+T_+T_+G|@Kh+xc+xc+xc+$(+T_+Kh+oh.y4&T_+T_+G|@G|@G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+w5&oh.T_+G|@iS.]@+7P.$(+G|@T_+T_+G|@oh.oh.Kh+T_+bH@bH@bH@bH@bH@bH@bH@bH@aH@aH@aH@aH@aH@aH@aH@aH@x{+OP*US+US+US+';$v]#ZW+US+US+US+US+US+US+", "x5.x5.x5.is@Vh.Vh.dD.%j.x5.xX%x5.Su$3o.Vh._r+is@x5.x5.x5.O7.xX%xX%xX%x5.x5.x5.x5.x5.x5.x5.x5.is@is@x5.x5.x5.O7.O7.O7.O7.O7.x5.x5.x5.x5.O7.O7.v4.+,>+W,@W,@W,@3W.3W.<-+ek@Nq@ww$d2=F!#}*%|d BN 5, 1j `O%Rw#7, Q} *@.;s@].$Wh *K.U} j< j_ _)@_)@+l +l +l _m Mz Mz ep 1/ U4+@<@u/@;{ ;{ aY fX#0Y Sk#zy@4C#Sk#BD J}%Y=*}E%Y=*c0&_7 9 /d@/d@ 9 O9 /d@]|@W:@Y:@(7 /d@/d@]|@Y:@W:@>8 <@ <@H~ H~ <@ <@>8 H~ H~ <@>8 >8 >8 <@@~ d$$C'$Y#%Y#%^M ^M =p@]J Y:@W:@Xr Xr :,@1k G> 7V sV@QQ$./#|w$=C+#-#e7#:)@+~ Y:@Y:@+~ Z:@`:@~M /|@e2=f2=g2=tI@kl /7+t[#0E$xx$4V+dH#y'#i[+nq@r8+$t@V&+/f+od+9X+v&@S%$9i@ai@`H@rI+/P+Vv#b~@&R#|O#_R+~[+m0+<6+%>+2Z+vp+lr+|]+.m+.m+(f#(f#(f#(f#go*go*&m+&m+~k+~k+~k+!k+!k+!k+)k+)k+!k+!k+!k+!k+)k+lp+=w+v)+v)+rr+uD+rp+rp+rp+*w+@m+}w+WN#^|+{_+Vg+Of$u7#$b$>$'6+)6+/>$-6+-6+:[+Pl+Y1+<]+-m+[w+V1#aX+1=@%B+T.@N|%D2=E2=F2=W}+G2=H2=I2=J2=Rl* l*K2=L2=M2=N2=O2=P2=Q2=R2=S2=T2=U2=,s*V2=~2=~2=W2=k{=X2=Y2=Z2=~'=`2= 3=.3=:2=r1=+3=@3=#3=$3=%3=&3=*3==3=-3=;3=>3=,3='3=)3=!3=~3=L4&S%&w@%oB.&++ud z5 [@@uI@]0@Z-@3C#^c#|m $8 V*#Gz /n _d@]*@nm@nm@nm@-p@-p@X7@X7@nm@nm@nm@]*@]*@$y ]M$FR@ER@ER@ER@ER@_J$_J$ER@ER@ER@FR@FR@FR@FR@FR@%S %S ET 7V hP@hP@Ug Ug 8m&`f%2e%`u&{3={3=i}=HP#F(@QM..^+.^+kB@Ok ro Mz =l X ET 0_$hP@Wj vK@.x+z=$=>#g=&HP#`t%`f%:>$:>$ U@Mf Mf Mf Lf Lf W-@Mf `f%(n%(n%IE+a6&*v$}_%8m&FR@Pe Pe Lc Lc :,@:,@_t }u 5h l1#|1&|1&$A@8q l `r )E Ag@GT#${#^l$&$#F[#_T#Sd&6X%1/%M$+n~+W,@(-+ZJ#I_%`u@R;+*X&}~+^n%^n%a^@a^@3G+[V+BM@XK+d8$&6$3w++B$p>#%X#FW$K4@Ta$42$Zm@V)@D;@]3=.6%.6%,u$hq$+/@6K#n[+}v@Nu##@#x4#N;$y4#S5+S5+S5+S5+y4#'M$'p$|_+|_+|_+|_+|_+|_+|_+cH#=t@8~#Kq@Z.+~ +=t@e~@zp+fm@i|+7j*u##R}*;m$'H%FM$=1=2|=0F*EF*]E*tI*r*=^3=pn*gW&n}=/3=(3=]@=_3=+| q} &a.ZW+ZT#Yy&%U*I!.Pz.-'.-'.Pz.C6.n3.H8@1M@1M@ X+ X+1<#1<# X+qK+>0+,0+0, 0, >n.>n.>n.>n.>n.>n.%z&%z&%z&%z&%z&%z&%z&%z&Be+%z&.==.==%z&+y&+y&~h&Bj.Kh+Kh+G|@G|@T_+T_+T_+7P.7P.Kh+7P.y4&y4&y4&~@dD.xX%x5.x5.O7.O7.xX%_r+_r+_r+x5.x5.x5.x5.x5.x5.x5.x5.is@is@x5.x5.x5.O7.O7.O7.xX%xX%_r+N7.N7._r+xX%xX%0q.#k.8'%8'%F6.+3W.5Z.1|+5Z.4W.tc@tc@)m+.*#}A.[3=EJ.3=$E5 G> Qk#=! 36 ,p l .F~ @s@Wh >K.U} j< w[ X]@X]@R-@P3 P3 P3 Jc yy Ok Pk M^ Od O^ *@.3C ;{ aY 0Y 0Y 4C#X] Sk#Tk#zD J}%}E%$%@3%#;%qq@Ub+k<&dD$B;%Oe$) +^+@//+O,+Mb+Nl+ic@1}@29@rI+C`#gY#'_#zb#-5@WO@Zv+~[+>3@l0+3{#Rn+Pn+Sn+BR#BR#mq#mq#mq#mq#13=mq#[w+&m+~k+~k+~k+!k+!k+!k+)k+)k+!k+!k+!k+!k+)k+lp+|]+=w+v)+Tn+Tn+rp+mp+&w+#m+nq#*m+&l#^|+Wg+Of$>d$L[%~a$s7#E`#t|%Qn#|/#23=33=43=m*=53=63=73=83=al#Wc#[D*93=03=a3=b3=c3=d3=e3=f3=g3=h3=Y[=i3=j3=G(%d/=:}#@a#22#Nf#ii#*o#jw$m1$OR#OR#&o#'}#oT#jw$Oq#Ff#Ff#Lf#}l#@_J$_J$ER@ER@ER@ER@ER@ER@ER@ER@ER@_J$_J$_J$_J$n{ %S X 7V 0_$hP@Ug Ug 8m&`t%2e%`u&`u&`u&0[*_>$8P#F(@PM.-K.=W@A%@Bm B6 %S X .G@hP@Wj vK@R_+ E#(a is#=>#HP#`t%*C+kk&wt$`T@`T@FR@Mf Lf Oe Oe Th QN#sV@8O#Z^#*v$u'@}_%+/$FR@ X Pe Dn ~~#;z <,@<,@X:@^|@}u 8v 8v }u qG 6, 1k %S |-@Uk$a>&NB@Qe@;v$Jy$RK$M@%5w+tD$DU.+x@[&#'>+U##=c@j7$1^@.4=.4=+4=Aw%[|$B2$2O#<{#'p$~}%.*+']$qq@pS$FX$p1#hq$>E >E Qs$H&#d9%hq$D'$s}%!p$l,$`w Gh+)t@4g@'>+7P#N;$N+#Ej$_a$Dj$Dj$Dj$_a$,L$,L$cH#cH#cH#cH#cH#cH#cH#cH#uy+8~#Kq@Z.+se#=t@e~@zp+fm@{=#7j*7j*;m$;m$R}*dN*l}=2|=%F*XI*xG*iX*@i*cG*SH*gW&n}=9H*uu.@4=CA+cG =L :b.5=+{b+{q%h|.+T+r4.*1.[(+5J.C6.M|@H8@YT#1M@ X+1<#_($_($1<#SO+sq*,0+0, 0, >n.>n.>n.>n.>n.>n.%z&%z&%z&%z&%z&%z&%z&%z&z$$.y&3P cl. ==.y&.y&{h&J> US+Kh+';$G|@d #T_+d #$(+23+iS.x{+Kh+';$oh._e.!D+B#@3]&'W+TO&`b&#d+{y%<:*!D+<:*!D+<:*!D+<:*!D+*$@$(+T_+G|@G|@Kh+Kh+7P.G|@G|@G|@G|@G|@G|@G|@';$u]#x}*x}*S>+S>+pK+FG*FG*q(#q(#q(#q(#q(#q(#q(#q(#T_+T_+T_+T_+T_+T_+T_+T_+xc+xc+xc+xc+xc+xc+xc+xc+xc+Ea+$(+7P.]@+]@+Kh+5A.$(+$(+T_+G|@G|@Kh+7P.7P.FA+Q] Q] P] P] LN.,W+,W+qz.qz.el.el.8x.8x.~c.~c.dl.T_+T_+G|@Kh+oh.iS.]@+G|@Kh+oh.y4&oh.7P.G|@$(+7P.7P.Kh+G|@G|@T_+$(+$(+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+T_+oh.iS.oh.T_+xc+T_+oh.$(+xc+xc+$(+Kh+7P.G|@xc+Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$>( >( >( >( >( >( >( >( h]@h]@h]@u]#US+US+d #v]#';$';$';$';$';$';$", "G6.G6.9, 9, VW.VW.VW.X)@hY.9, VW.VW.9, hY.X)@dD.O7.M7._r+Vh.%j.is@N7.O7.x5.Vh.dD.dD.Vh.x5.O7.8'%8'%8'%8'%8'%8'%8'%8'%Tw@[{.[{.8'%F6.F6.>=$4=D_ %4=0K+w*=L!%()=~$#!&=16*q!@%<*SD.rR$(<*.}*U{*k4*/z${7$fx@)m+&h#Ar+W_#4W.ZR#}7$Z]$5h#t8+X@+`@+%V.&++s$#;1@;1+.G@,! gG#;{ ZG@l .:: j< Fh k5 2[ Ag 2[ U: T[ }t P#@Rh Rh i< Ti Bm 89 ~o _1 a^ Bn@-{ u/@Sg Ui Ui Kf Sg Mc Mc ,! {Z#Oe u/@*@.Kf Lc _7 +L@+L@O9 O9 9 9 9 9 9 9 9 9 9 9 9 W:@W:@W:@W:@W:@Y:@Y:@Y:@;! ;! W:@+~ t! X:@t! t! }u 5h G5@*8@6F 6F *8@Y:@;! ;! Y:@Y:@W:@Xr +~ <,@&W@wb T~#fP@`:@`:@+<@X:@W:@+~ +~ t! t! X:@X:@r[@rG 7G@>b@[f x`#=0@$-#>g$l8$a>&8e+7=$u1@lm@lm@73@I.+&4=i:+cY#F$+<6+od+rD+_G+sI+Lx#mb#_Z$-[#>!+['+dm@De@^+@c$@n;@qd+[(%[(%4P#_9@R.@%w+mq#&!%&!%&!%lp+lp+lp+lp+lp+lp+lp+lp+lp+lp+jr+'k+'k+jr+lp+lp+|]+Sn+Sn+Tn+Tn+&w+@m+&!%mq#}w+WN#4=,4='4=~2=Gw#Wc#+a#.a#F<==|=)4=!4=~4={4=]4=^4=/4=(4=_4=:4=<4=d4% z$Kt#Ox$'}#m1$&o#Sx$_K#nd$=2#=2#=2#=2#Ye$;}#k}%/C#s[%v<%1@$u0#vq#bt#p'$!l#kf#q0#q0#jf#)l#dF$Gy#B7#A7#LL#z7#nc#`H#`H#`H#z7#'l#id+Gy#Gy#~i#,f+Gy#id+Hy#z7#z7#|i#~i#+4++4+9[+Eb+nd+Of$,d$K0+b%%#}%`.=[4=2&=Xp*8($4:*VK+U0+CI+8e#hb#aR*[|+|B@}4=|4=14=O~*24=34=44=54=64=74=84=94=04=a4=b4=b4=U2=9!%c4=d4=e4=p[=f4=6}=g4=h4=i4=j4=k4=l4=m4=n4=o4=p4=q4=r4=s4=t4=u4=v4=w4=x4=y4=z4=3E@A4=(C+4Y B4=C4=5r@`k@ss W}%sj@]p$xs or C2 Kd uI@C0 Wr i#N1 Y4 %4@Dh &2@5q s) z6 Zr ^1 ^1 :t s7 8s [t Y4 $S Uj {Z#gP@gP@8V Lf Oe Oe Lf Oe Oe {Z#o{ o{ {Z#Oe Th Mf Mf Qe s<$a^ 9_@Th FR@`T@ U@Ug Ug Ug U@`T@Ug C;$/G hP@XC%XC%9_$Vj Tg Mf FR@ER@ER@Mf Th Iw%Uh Uh Iw%JE+Ug U@`T@ER@FR@FR@Mf 9_$Sh Nf Qe ,! ET >z %S =l %S 4, :t t/@`;$h*$^D%*W@L-$n)$BR@gP@FR@ER@:>$}_%kk&*C+`f%QQ$ZN+D:%u[#_V#5O#rK@/B+Oe@Q]+uc@zF@D4=V{*l^#Q8%;$$uz*A2@g<$dq$:K@#o+7 @;/#]-#.I$dv$n1#R-$Qv 0q ^*$R-$;g$[,$2r@-E Fu 6G@.~ I!$y=$2Y.;A&6Z.^f#}{#E@@rr$ow$ow$SQ$ow$bq$b9$b8$bN#bN#Z.+Kq@8~#8~#Kq@Kq@nI%nI%4_#4_#& +& +>[#>[#n:='*@)'$A[+7Y#7Y#HS#E4=7o*,,=bG*]E*]E*[K*sL*|Z%AY*F4=G4=a9., @NC.ZG.r6 a1+_($B, ]Z@2p%p!#g6@H8@o3.g6@v5.I7.qK#qK#qK#qK#1<# X+qK+$' 5,+$' mh.Nc&>S%~h&`b&!D+>n.>n.;n.;n.Xw&Xw&+y&+y&+y&+y&Xw&Xw& ==@d+z$$%z&%z&Xw&.y&B9.xE*FG*US+S>+US+lt*[f.'!=d #S>+';$pK+23+FG*OP*OP*Bj.Bj.!D+Bj.!D+Bj.!D+Bj.!D+/{ `b&|m.{y%*$@'W+y$$xc+xc+$(+$(+T_+G|@G|@G|@$(+xc+Ea+xc+G|@7P.Kh+d #23+FG*FG*FG*S>+x}*q(#q)@S>+9&+q(#9&+S>+S>+x}*q(#Kh+7P.oh.7P.G|@T_+G|@7P.G|@G|@G|@G|@G|@G|@G|@G|@7P.7P.7P.Kh+Kh+Kh+G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Ai.Di*Di*Di*Di*rE.rE.rE.~Q+~Q+Q;$Q;$H4=H4=H4=Q;$zc@oh.7P.Kh+T_+$(+xc+xc+oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.G|@G|@G|@G|@G|@G|@G|@G|@oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.7P.7P.Kh+Kh+G|@G|@$(+T_+T_+G|@G|@Kh+Kh+7P.G|@$(+xc+$(+G|@G|@T_+xc+$(+$(+$(+T_+T_+T_+G|@G|@{! Ea+T_+T_+$(+xc+", "G6.G6.9, 9, VW.VW.VW.X)@hY.9, VW.VW.9, hY.X)@dD.O7.N7._r+Vh.%j.is@N7.x5.is@is@Vh.Vh.is@is@x5.8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%F6.F6.F6.xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.x5.x5.O7.O7.xX%x5.O7.xX%_r+_r+xX%O7.x5.Vh.x5.xX%_r+N7._r+xX%O7.N7.is@is@N7.N7.is@is@N7.O7.xX%xX%_r+_r+xX%xX%O7.PI.PI.PI.PI.PI.PI.PI.PI.cp.cp.cp.#9.PI.PI.PI.Hu+_r+xX%O7.O7.O7.O7.xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+N7._r+xX%O7.O7.xX%_r+N7._r+_r+_r+_r+_r+_r+_r+_r+'.wx.#k.#k.$y#zT.{<*g; N= RC#R)+),$I4=jF+(8 F>=~!=~$#!&=~G*1:*SD.`;=L>+Q%=T-+.}*k4*J4=K4=fx@)m+&h#li@@h+j|#ZR#ZX.L#$c!$9>+E)$F)+sX+;l bk %y C;$Wj AD BD g'#sd#sd#I..!m er#[Q@>O@zg BW+U: ;J Fj Fj [7 $9 F~ Q9 89 Q9 xb ry@xb Bn@-{ u/@Mc Sg Kf Sg Sg Sg -{ Kf Md Kf -{ *@.Sg @9 U:@O9 O9 9 9 /d@/d@/d@/d@/d@/d@/d@/d@/d@/d@/d@+~ W:@W:@W:@W:@W:@W:@W:@;! Y:@W:@+~ +~ +~ W:@W:@;! ;! Y:@t! rG rG X:@Y:@Y:@Y:@W:@W:@W:@W:@+~ +~ +~ t! r[@>b@>b@>b@X:@X:@t! t! t! X:@X:@r[@r[@+<@)M Jt$J!$J!$GT FT {)#{)##y |/%k9$({+)m 4q 4q )<$m6@Oo#L4=Ki+ZC#U.+u)+:V+^G+Gt+4L#W6$05*M4=J|+f~%C)$, +EZ@bK@Ey*Ey*N4=8c#[$@y6%X-$%w+(f#mq#(f#(f#lp+lp+lp+lp+lp+lp+lp+lp+kr+lp+lp+jr+jr+lp+lp+Kt+|]+Sn+Sn+Tn++m+@m+&!%&!%}w+}w+5=u9#:_+v|+v6#y|=,5='5=)5=!5=~5={5=]5=^5=/5=(5=_5=:5=<5=[5=}5=|5=15=25=35=45=6}=55=65=75=85=95=05=a5=~T*b5=1(=c5=d5=e5=f5=g5=h5=i5=j5=vA@Lr@k5=l5=KI@}t.m5=d .g0.d4@`s$wf@n5=+T.Iv.D2%/y%8w@X' u' Gn (1 7, T} Y4 %4@%4@&2@so hp x, }o Qk#Qk#^1 O1 Ne !d@*2@/n Rg Lf o{ o{ {Z#Lf Oe Oe Lf Lf Lf {Z#o{ gP@{Z#Lf Tg FR@ER@Th 9_@Nd g*$FR@FR@FR@Mf Tg Tg Tg Mf FR@Mf Mf Tg Tg Th Th Th 9_$Mf FR@ER@ER@ER@Mf Tg 9_$9_$9_$Th Tg Mf FR@ER@ER@FR@ER@FR@Th Qe Qe g*$7V jl 4, hp s) s) hp 4, 4, hp hp hp 4, 4, s7 s7 t/@Mf O(%O(%9[%V&&U&&o5=o5=9[%9[%9[%9[%9[%9[%9[%8m&e]@['$7e+*>#t@q##57@t@+u1@${#;y%m1#n[#'M Rx@xt r_${c${c$1i }g PC Vx z tG X{$dk#U.$Ap#3V+e;%~K@'K@tr$0N$0N$rr$0N$~l$!l$d9$n%$n%$46+aN#Jq@Jq@aN#aN#nI%nI%4_#4_#& +& +>[#n:=n:='*@)'$A[+7Y#7Y#HS#E4=!r%p5=QH*]E*(I*iX*ZI*< =AY*q5=n.>n.>n.%z&.y&Xw&Be+Be+Xw&.y&%z&3P +y&Xw&%z&%z&Be+Xw&Av&k#@FG*pK+S>+pK+FG*b=+a1+FG*FG*FG*FG*lt*lt*lt*lt*Bj.Bj.Bj.Bj.Bj.Bj.Bj.Bj./{ /{ /{ /{ |m.|m.|m.|m.T_+G|@G|@G|@G|@Kh+Kh+Kh+oh.Kh+G|@G|@7P.7P.Kh+d #23+FG*FG*FG*pK+S>+x}*9&+pK+x}*9&+x}*pK+pK+S>+9&+$(+G|@7P.7P.Kh+G|@7P.y4&7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@1m.QJ*QJ*QJ*QJ*1]&1]&RK <;@<;@<;@r5=r5=r5=s5=<;@8Y+Kh+Kh+G|@T_+$(+$(+xc+7P.7P.7P.7P.7P.7P.7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@7P.7P.7P.7P.7P.7P.7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+T_+T_+T_+G|@G|@Kh+Kh+Kh+G|@$(+xc+$(+G|@G|@T_+xc+$(+$(+$(+T_+T_+G|@G|@G|@]! Ea+T_+T_+$(+xc+", "G6.G6.9, 9, VW.VW.VW.hY.G6.9, 9, 9, 9, G6.hY.dD.O7.N7.xX%Vh.dD.x5._r+Vh.is@is@x5.x5.is@is@Vh.8'%8'%8'%8'%8'%8'%8'%8'%F6.F6.F6.8'%8'%8'%8'%8'%xX%xX%xX%xX%xX%xX%xX%xX%O7.xX%xX%_r+_r+xX%xX%O7.x5.O7.xX%_r+_r+xX%O7.x5.Vh.x5.xX%_r+N7._r+xX%O7._r+x5.x5._r+_r+x5.x5._r+x5.O7.O7.xX%xX%O7.O7.x5.PI.PI.PI.PI.PI.PI.PI.PI.#9.#9.#9.#9.PI.PI.PI.Hu+O7.xX%xX%_r+_r+xX%xX%O7._r+_r+_r+_r+_r+_r+_r+_r+N7._r+xX%xX%xX%xX%_r+N7.N7.N7.N7.N7.N7.N7.N7.N7.#k.v4.0q.<3+#k.+Q%=(<*.}*<3=t5=$E#u5=1k+CU.h/+@*+t8+5W.;i#]f#GX%0]+I+@~T%#3 ;l l< bk R_+.(+Vw&Vw&z! '! W] 7~ +|#-6#>O@>O@zg BW+Fh k< }: }: j< j< ={ _1 F~ F~ ] ] xb *@.-{ -{ -{ -{ -{ u/@Mc Sg -{ -{ *@.-{ -{ u/@Sg :7 T:@ 9 9 /d@/d@(7 (7 (7 ]|@]|@]|@]|@]|@]|@]|@]|@W:@W:@W:@W:@W:@W:@+~ +~ Y:@Y:@W:@W:@W:@Y:@;! ]|@]|@]|@;! +~ r[@r[@t! Y:@+~ +~ +~ +~ W:@W:@W:@W:@r[@r[@>b@>b@>b@r[@X:@t! X:@r[@r[@r[@>b@>b@>b@`:@)M (J$(J$Jt$J!$J!$GT #y {)##y k9$@^+>z `i@[t SU%v5=w5=(p%(-@mx*k;@p8+(P+ay+ N+*9@n#$U5+ 4#-1*zB@d~@5i@> +J,@#A*#A*}z@70#Ce@Ce@X-$:T#`A+R.@,T*VA#lp+lp+lp+lp+lp+lp+lp+lp+St+kr+kr+lp+lp+kr+kr+.m+|]+Sn+Sn+Tn++m+@m+&!%&!%}w+}w+%|O#O3*91*L5=M5=N5=O5=P5=Q5=R5=S5=T5=U5=V5=W5=X5=Y5=ro#Z5=`5=a4= 6=.6=+6=J_=is*@6=#6=$6=%6=&6=*6==6=-6=;6=>6=,6='6=)6=!6=~6={6=]6=^6=/6=(6=_6=:6=<6=[6=}6=,h.$6@|6=*n@0+>0+0, 0, >n.!D+!D+!D+!D+!D+ ==%z&Xw&z$$z$$Xw&%z& ==cl.%z&.y&)A&%z&Be+Be+{h&k#@FG*pK+pK+pK+FG*lt*b=+b=+b=+b=+lt*lt*lt*lt*lt*Bj.!D+!D+!D+!D+!D+!D+!D+`b&`b&`b&`b&!D+!D+!D+Bj.oh.oh.oh.7P.7P.7P.7P.7P.w5&iS.oh.oh.y4&y4&7P.d #US+FG*FG*lt*lt*FG*pK+S>+lt*pK+x}*S>+FG*lt*pK+S>+Ea+T_+Kh+7P.Kh+7P.y4&]@+y4&y4&y4&y4&y4&y4&y4&y4&7P.7P.7P.Kh+Kh+Kh+G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+7P.8Y+8Y+8Y+8Y+^v.^v.66=rE.rE.rE.)v )v )v 76=rE.dl.T_+T_+T_+T_+T_+T_+T_+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+T_+G|@G|@G|@G|@T_+T_+T_+G|@G|@Kh+Kh+Kh+G|@$(+xc+$(+G|@G|@T_+xc+$(+$(+T_+T_+G|@G|@G|@Kh+5A.xc+G|@G|@$(+xc+", "G6.G6.9, 9, VW.VW.VW.G6.9, 9, 9, 9, 9, 9, G6.Vh.O7._r+xX%is@Vh.x5.xX%dD.Vh.x5.O7.O7.x5.Vh.dD.8'%8'%8'%8'%8'%8'%8'%8'%'.o;.yd.8'%Tw@pD&7!.r).@Z ad.@a+o-$yD&m[@~*$w:.c'=tE*~$#w6*QL.wQ$3:*(<*Q%=Q%=(<*(<*%[=R8@v^=q9@&h#li@h/+@*+2_+87$Y@+E)+;V.3*+m]&FR.;$%]z -l -l !E @s@tR#iy#M~ |^#'! }i Gj _+#:@@:@@zg AW+k} Fh Fh Fh I..&@.wc #p q| q| sd#sd#ry@*@.*@.Bn@ry@ ] ry@xb -{ u/@u/@Bn@ry@Bn@Mc Ui Kf >! S:@/d@/d@(7 (7 ]|@]|@]|@;! ;! ;! ;! ;! ;! ;! ;! ;! ;! ;! Y:@Y:@Y:@W:@W:@W:@W:@W:@W:@Y:@]|@(7 /d@(7 ]|@;! W:@t! t! +~ W:@X:@X:@X:@t! +~ W:@W:@W:@rG rG >b@>b@r[@X:@X:@t! >b@>b@>b@>b@rG rG rG s[@)M (J$(J$(J$*S *S *S *S =0@{)#k9$IT#=l >z )E Tv d>$|=$'g$#R$oK@R1+2V#6T+fD+)~#=9@<^#_7@l1@&u%[3@b=#n7#J,@+N+F}$F}$4$@}z@%v$R%$X-$X-$R.@}}@#<$Y;#lp+lp+lp+lp+lp+lp+lp+lp+[w+St+kr+kr+kr+kr+St++m+|]+Sn+Sn+Tn++m+@m+&!%&!%}w+}w+:#}T%j}%Ew# z$$o#'}#&o#;2#Px$Ye$Ye$&2#&2#&2#+;$+;$@;$X/%AC$pD$DC$p'$t0#s0#s0#)l#2i#jf#oc#PF*k0#1i#i8%id+id+id+'l#Hy#|i#j0#Sg+Sg+;p$;p$Ug+Ug+Ug+Ug+a[+Qg+Qg+2f#bc#bc#bc#g0#b[+#4+|/#|/#|/#^f+hi+li+as#f6=g6=h6=i6=$i*j0+6~@a^@oi$ti$j6=k6=cX+l6=m6=n6=o6=p6=<'&['&s3=q6=r6=s6=t6=u6=v6=w6=N1=q2=x6=oo#y6=z3=35=z6=m1=A6=j,=B6=C6=D6=E6=F6=G6=H6=I6=J6=K6=L6=M6=N6=O6=P6=Q6=R6=S6=T6=zp@U6=bl@V6=6C@jr.`R.za.88@/b@(z.v@#!h+;L@`2#=q$<<@J5 &x G5 kB@kB@J4@V2@ak#@(+Ld T} V-@VH y, |u 3' s7 Qg u*@7s .s Cn ,! Lf Pe Oe ,! Oe Lf {Z#Lf Lf Pe 8V o{ 8V Pe Tg Mf FR@Mf Th Tg ER@DR@Mf Mf Tg Tg Tg Mf FR@ER@_J$_J$_J$ER@ER@FR@FR@FR@ER@ER@ER@ER@FR@Mf Mf Tg FR@FR@FR@ER@_J$_J${L${L$ER@_J${L$ER@Tg Th Mf X Dn hp s) z6 z6 s) hp hp 4, 4, 4, s7 s7 s7 wo If Pe *W@*W@L-$L-$n)$n)$BR@BR@L-$h*$.X .X h*$L-$DR@v'@h>#v'@h>#OM.Ca+tc+eU$`M$^l$M9#h|#tz#0G#n[+la@$@#oV@*[@H)+8x$UZ$rw$[=%in$E<%OO$z_%!M n.>n.!D+`b&`b&B#@)A&%z&+y&Xw&Xw&+y&%z&)A& ==)A&%z&%z&%z&.y&+y&{h&k#@pK+pK+pK+pK+FG*FG*FG*b=+b=+lt*lt*FG*pK+pK+zi.!D+!D+<:*!D+<:*!D+<:*!D+TO&`b&#d+!D+-.%>n.M]*;n._e.iS.iS.y4&y4&oh.7P.7P.]@+y4&7P.oh.y4&y4&oh.Kh+US+FG*lt*lt*b=+lt*lt*FG*b=+FG*pK+pK+lt*b=+lt*US+xc+T_+7P.7P.Kh+Kh+oh.iS.iS.iS.iS.iS.iS.iS.iS.iS.7P.7P.7P.Kh+Kh+Kh+G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+oh.oh.oh.oh.oh.8`#8`#8`#h)@h)@h)@nt*nt*nt*nt*nt*jy.xc+$(+$(+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@T_+$(+$(+xc+xc+G|@G|@G|@G|@G|@G|@G|@G|@G|@$(+xc+$(+G|@G|@T_+xc+T_+T_+T_+G|@G|@G|@Kh+Kh+Ea+$(+G|@G|@T_+xc+", "G6.G6.9, 9, VW.VW.VW.VW.9, 9, 9, 9, 9, 9, VW.is@x5.O7.O7.x5.is@x5.O7.dD.Vh.x5.O7.O7.x5.Vh.dD.8'%8'%8'%8'%8'%8'%8'%8'%'.o;.yd.8'%8'%$y#`^ r).@Z E>=U@@%'+P,*@! HJ.E.@q}=Z6=<`+;1=QL.wQ$3:*(<*(<*(<*(<*(<*+}*vh%3+$ja@&h#li@Y{@Y{@9>+N]+E)+zG.TZ.7I.FG.L9#,N+di e_@i&@Se rE%hy#L/%M~ '! '! 7~ Gj Qo#N#@v, zW+zg 1)@2[ 2[ 2[ 7~ 7~ )! ^3 #p ={ ~_#sd#ry@Bn@L1 q[ 1^#/} /} q[ VE vG P9 l .L1 l .:7 @9 '8 P9 S:@/d@/d@(7 (7 ]|@]|@]|@Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@(7 (7 ]|@]|@;! ;! Y:@Y:@+~ +~ +~ W:@;! ]|@/d@ 9 (7 ]|@Y:@W:@W:@+~ +~ t! r[@r[@r[@X:@t! +~ +~ +~ sG rG rG >b@r[@r[@X:@X:@rG rG rG rG rG rG rG s[@lQ lQ )M )M )M )M DN DN kl 1A 1A kl gp #AB@rg@ 7#&N+Q,@r;@-B+7e@ei@[k+%`$9V@(8$I,@b^@yI+AD+4$@4$@%v$[(%3$@3$@R.@I(%6d+Zl+lp+lp+lp+lp+lp+lp+lp+lp+[w+St+kr+kr+kr+kr+St++m+|]+Sn+Sn+Tn++m+@m+&!%&!%}w+}w+6+'6+8,$i~%K1%Q6%k[=Qq#R>%dd$a$%{N${N$3w#ch$/K#67$H+%g:%J=%):##2+:(%07%,o#>o#%o#$}%/C#k}%Rx$-2#-2#%2#%2#%2#1I#@;$#;$_O#Fb+qD$F_$^H$A7#LL#LL#Hy#Hy#j0#j0#j0#j0#;p$|i#.I#.I#.I#V4#V4#V4#V4#{|+{|+a[+a[+p7#p7#ri+ri+)i#bc#bc#bc#bc#bc#ni+ni+ni+#4+^f+^f+hi+hi+hi+4f#ii++&=U,=.7=+7=U}$]n%Gl+;}@8^@@7=#7=$7=b-=%7=&7=*7==7=-7=;7=>7=,7='7=)7=!7=~7={7=]7=F<=^7=^7=/7=Rl#(7=_7=:7=l1=<7=[7=}7=|7=17=27=8.=37=47=57=67=77=87=97=)6=07=a7=b7=c7=d7=e7=f7=g7=h7=in@i7=Cf@kh@A&.Bc%d0@.6#j7=k7=l7=i`@Y4.Fn.s= /8@zy iw }L.|L.{*@PM.l>@C;$Rg wa T:@/d@+~ Xr ,J hp A6 t*@*2@*2@CD Oe Pe Lf ,! Md ,! Lf Pe Lf ,! Oe {Z#8V {Z#Pe 9_$Th Tg Tg Tg Tg FR@_J$Tg Tg Tg Tg Tg Mf ER@_J${L${L${L$_J$_J$ER@ER@ER@_J$_J$ER@FR@FR@FR@FR@FR@ER@ER@ER@_J$_J$_J${L${L$FR@ER@{L$_J$FR@Tg Mf %S jl hp s) s) s) s) hp 4, 4, 4, s7 s7 s7 wo wo .r G~ aP@cK#cK#cK#&W@&W@&W@@%c$M+@zg@C(@Gh+a_#e~#lm@,I@qZ.5|+5|+Rq@`M$16$GC$bL#G)$ -#=S u)$kQ E'$E'$(0@1i 1i Z;$Z;$}g -E [g -#Np#!q$cv$O:+oo%47$%/$zM@kF$d9$d9$d9$d9$5($d8$pw$n%$n%$46+aN#Jq@Jq@aN#aN#(v@(v@(v@_f*|V#|V#da@da@da@m1@A[+L+*HS#HS#*R#F%=$F*sI*JX%m7=tI*IJ*'i*iN*Qf*n}=n7='4%o7= f et 'U.jS.yE#DI#2p%/W%p!#'Z%DI#qK#qK#qK#/W%/W%/W%.X+.X+_($_($1<#SO+qK+5,+u.@u.@&, &, >n.>n.!D+`b&`b&B#@Xw&+y&%z&)A&)A&%z&+y&Xw&+y&%z&%z&%z&)A& == ==0, J> US+US+US+US+US+US+';$23+23+US+US+';$d #d #x{ <:*<:*p7=<:*p7=<:*p7=<:*q7=#d+c_$<:*8g+-.%r7=M]*_e.iS.iS.y4&y4&oh.7P.7P.7P.G|@T_+Kh+oh.y4&oh.7P.US+23+OP*OP*x{+OP*OP*23+x{+23+US+23+x{+[f.OP*US+G|@7P.oh.7P.G|@T_+Kh+oh.oh.oh.oh.oh.oh.oh.oh.oh.7P.7P.7P.Kh+Kh+Kh+G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+OP*OP*OP*OP*OP*oh.oh.oh.q9+q9+q9+(w.(w.(w.(w.(w.jy.xc+$(+T_+T_+G|@Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@$(+$(+$(+$(+$(+$(+$(+$(+oh.7P.Kh+G|@$(+Ea+5A.]! G|@G|@G|@G|@G|@G|@G|@G|@G|@$(+xc+$(+G|@G|@T_+xc+T_+T_+G|@G|@G|@Kh+Kh+Kh+xc+T_+Kh+Kh+T_+xc+", "G6.G6.9, 9, VW.VW.VW.8v.VW.9, 9, 9, 9, VW.8v.x5.x5.x5.x5.x5.x5.x5.x5.Vh.is@is@x5.x5.is@is@Vh.8'%8'%8'%8'%8'%8'%8'%8'%F6.F6.F6.8'%8'%8'%8'%8'%xX%xX%xX%xX%xX%xX%xX%xX%O7.xX%xX%_r+_r+xX%xX%O7.x5.O7.xX%_r+_r+xX%O7.x5.Vh.x5.xX%_r+N7._r+xX%O7.x5._r+_r+x5.x5._r+_r+x5.x5.O7.O7.xX%xX%O7.O7.x5.PI.PI.PI.PI.PI.PI.PI.PI.8v.8v.Hu+Hu+Hu+PI.PI.PI._r+_r+N7.N7.N7.N7._r+_r+_r+_r+_r+_r+_r+_r+_r+_r+xX%xX%_r+N7.N7._r+xX%xX%O7.O7.O7.O7.O7.O7.O7.O7.<3+v4.! l .8_@wa @9 '8 R} T:@ 9 9 /d@/d@(7 (7 (7 ;! ;! ;! ;! ;! ;! ;! ;! /d@(7 (7 ]|@;! Y:@Y:@W:@+~ +~ +~ +~ Y:@;! (7 /d@]|@;! W:@+~ W:@W:@t! r[@r[@r[@r[@r[@X:@X:@X:@X:@sG rG >b@r[@r[@r[@>b@>b@sG sG rG rG rG >b@>b@>b@m$#m$#I5@I5@I5@)M DN DN 8~ 1A 1A iQ gp o#pT#/C#s[%0E#k}%-2#=}#&M$&M$%2#1I#$;$Ty#8,$qD$F_$gw$B7#A7#A7#Hy#Hy#Hy#|i#|i#|i#|i#;p$;p$~|+~|+~|+~|+~|+0[+=2+Vg+Vg+a[+p7#qi+qi+qi+ri+ri+*l#bc#g0#b[+b[+b[+ni+%l#^f+4f#Qn#4f#li+<&#ji+^d$Y;#'>={n%0Q%kZ+W[#Gl+$1@|l&@7=w7=x7=#^$y7=z7=Bq*A7=B7=C7=X)=D7=E7=8<=F7=_]={{=!~=G7=H7=I7=J7=K7=L7=E3=M7=N7=O7=P7=Q7=R7=S7=T7=U7=V7=W7=X7=Y7=Z7=`7= 8=.8=+8=@8=#8=$8=%8=&8=%u@*8==8=-8=;8=fl@nj@>8=he+,8=/A.'8=)8=xC NO.Z ++X.5'.lq 0|@qO.| +,N+$3 ^+RN#0T@g*$Kf 0Y G0 H~ Xr :,@hp 8 ;! V:@(7 G0 ]|@+9 >8 <,@<,@:,@va W-@7V hP@+^+/G ;K.1L.1L.LZ@LZ@6<$6<$2O.]($]($MM.f]@[/$;@#=C+Q-$F&#Jt$-S kQ $h%u~$H)$k$#[g 9~ 9~ 9~ [,$=S 1c#3j+b]@!>+j|#po%J$+jF$zM@lF$d9$!l$!l$d9$5($d8$pw$n%$n%$46+aN#Jq@Jq@aN#aN#(v@(v@(v@_f*|V#dx@da@da@nc@q}@L+*JN*HS#HS#*R#Qf%$F*sI*2'=rT*iX*IJ*Me*L[=Qf*7>=n7=!8=~8=Q/%}9 '&+7' .X+'Z%2p%.X+2p%DI#p!#qK#qK#qK#/W%/W%.X+.X+.X+ X+1<# X+ X+SO+$' ,0+u.@0, 0, >n.!D+!D+!D+!D+!D+Be++y&)A&3P 3P )A&+y&Be+Be+%z& ==%z&)A&3P 3P 0, zi.US+23+23+US+';$d #d #';$';$';$d #d #d #d #x{ <:*p7=p7=p7=p7=p7=p7=p7=c_$c_$c_$c_$p7=p7=p7=<:*H*FG*FG*FG*FG*23+23+d #T_+T_+T_+dl.dl.dl.dl.$(+T_+T_+G|@G|@Kh+7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.oh.oh.oh.oh.oh.oh.oh.G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+y4&oh.7P.G|@T_+xc+Ea+5A.Kh+Kh+Kh+G|@G|@T_+T_+T_+G|@$(+xc+$(+G|@G|@T_+xc+T_+G|@G|@G|@Kh+Kh+7P.7P.$(+G|@7P.7P.T_+$(+", "G6.G6.9, 9, VW.VW.VW.Hu+8v.9, G6.G6.9, 8v.Hu+O7.x5.x5.x5.O7.O7.x5.x5.x5.is@is@Vh.Vh.is@is@x5.8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%F6.F6.F6.xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.x5.x5.O7.O7.xX%x5.O7.xX%_r+_r+xX%O7.x5.Vh.x5.xX%_r+N7._r+xX%O7.is@N7.N7.is@is@N7.N7.is@O7.xX%xX%_r+_r+xX%xX%O7.PI.PI.PI.PI.PI.PI.PI.PI.VW.8v.8v.8v.Hu+PI.PI.PI.M7.N7._r+_r+_r+_r+N7.M7._r+_r+_r+_r+_r+_r+_r+_r+O7.xX%_r+N7.N7._r+xX%O7.xX%xX%xX%xX%xX%xX%xX%xX%0q.v4.'.wx.#k.#k.$y#7!.ng.); :9.:c$6z@{8=T( {++eF++7.]8=hF*d'=P%=~G*2:*/<*wQ$TD.U{*.}*j%+YF@O@FW+FW+Bg Bg [i H'$E~ q$$wc !o ={ ={ ~_#~_# ] xb L1 L1 VE vG l .l .vG vG wa P9 >! >! P9 :7 wa R} U:@O9 O9 9 9 /d@/d@/d@]|@]|@]|@]|@]|@]|@]|@]|@]|@;! ;! Y:@W:@+~ t! t! +~ +~ t! +~ +~ Y:@;! ]|@;! W:@t! t! W:@W:@X:@rG X:@X:@r[@r[@r[@r[@>b@>b@rG rG r[@r[@r[@>b@sG tG rG rG rG >b@>b@r[@r[@r[@~M ~M ~M m$#I5@I5@I5@DN x`#x`#1A iQ Dn t/@=.>=8 va va 4, so hQ Y1@Y1@n{ o{ o{ {Z#,! Md ,! Oe Oe Md Sg Kf Md Oe Oe Oe Th Th Th Tg Mf Mf Tg Tg Th Th Th Th Mf FR@_J${L$o{ o{ 8V 8V 8V {Z#{Z#{Z#gP@o{ {Z#Pe Lf Pe {Z#8V ER@ER@ER@ER@ER@ER@ER@ER@9_$Mf _J$_J$FR@Mf Mf Pe If .r :t G> G> :t .r .r :t :t :t .r .r S-@S-@S-@VH |g (7 |g (7 |g /d@;8 ]|@8v ]|@8v ]|@8v ]|@]|@Y:@Y:@;! ]|@V:@Sr @9 Ld Md Rg XC%XC%XC%XC%=$#=$#-K.Nz +^+Nz XC%Th Pe L-$Jt$m$#m$#wR@x~$G8=NA$)8@}|@s[@cP@es ,M {c$n'%,9%6r$E[#-n#N:+K#$J$+kF$~J$lF$!l$!l$!l$!l$d9$5($d8$n%$n%$46+aN#Jq@Jq@aN#aN#{B+oX+oX+oX+}3@}3@ca@ca@ca@{=#7j*u##'H%'H%=R*=q%lE*aF*HJ*2'=S[*ZI*G{*[ =;b*q:=-1=)Q*F{@=X._+ QH$$' qK#'Z%2p%yE#/W%2p%2p%qK#/W%/W%/W%.X+.X+yE#yE#qK+SO+ X+ X+SO+qK+>0+,0+{h&{h&!D+!D+!D+>n.>n.>n.>S%~h&0, &, &, 0, ~h&>S%%' Av&ZQ.{h&0, Bv&Av&>S%zi.US+23+23+US+';$u]#:{+d #d #';$';$';$';$US+J> <:*p7=p7=p7=p7=p7=p7=p7=c_$c_$c_$c_$q7=q7=q7=TO&|m.G|@G|@G|@G|@Kh+Kh+Kh+Kh+G|@$(+T_+7P.7P.Kh+T_+23+23+23+23+US+';$d #u]#OP*US+';$US+OP*OP*23+';$T_+Kh+oh.7P.G|@G|@7P.oh.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@G|@';$zw*H8=zw*zw*zw*zw*pK+pK+S>+';$';$';$G|@G|@G|@G|@Kh+Kh+Kh+Kh+7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.oh.oh.oh.oh.oh.oh.oh.oh.G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+Kh+G|@G|@G|@G|@Kh+Kh+Kh+G|@G|@T_+T_+T_+G|@$(+xc+$(+G|@G|@T_+xc+G|@G|@G|@Kh+Kh+7P.7P.7P.T_+Kh+oh.7P.T_+$(+", "G6.G6.9, 9, VW.VW.VW.Hu+8v.9, G6.G6.9, 8v.Hu+O7.x5.is@x5.O7.O7.x5.is@O7.x5.Vh.dD.dD.Vh.x5.O7.8'%8'%8'%8'%8'%8'%8'%8'%Tw@[{.[{.8'%F6.F6.; :9.@a+Z# ph$I8=J8=&s K8=]8=JF*x2&i;=BE*1:*2:*RY&TD.U{*.}*hn$p]+|e%9]+''+A:&9>+V@&^b&DR.FG.^Y.~N.FC.,N+3v@^z l.@|: m< -$#-$#j^*L8=z! {{ b6&2^#.|#/($j} >O@CW+CW+^:*^:*Bg H'$E~ q$$!o ={ q| q| ~_#~_# ] xb VE vG 8_@>! P9 >! 8_@l .:7 :7 P9 >! 8_@>! P9 R} +L@+L@+L@O9 O9 9 9 9 ]|@]|@]|@]|@]|@]|@]|@]|@Y:@W:@W:@+~ X:@r[@r[@>b@+~ +~ t! t! t! +~ Y:@Y:@;! +~ X:@t! W:@W:@r[@tG X:@X:@X:@r[@>b@>b@rG rG rG >b@r[@r[@r[@rG tG -! rG rG >b@>b@r[@X:@X:@X:@2|@>P >P ~M m$#fP@I5@I5@l$#Y~#x`#:g jl If jl 2#+5#Pt#+O#XX$1v$(q$/q$F]%UW$G+%P8=Q8=R8=j!%S8=${%B{=,o#pT#s[%x<% (%9,$-2#=}#&M$%/%&M$1I#,X#5V#E_$`3+^H$^H$B7#'l#'l#|i#j0#j0#|i#)f+)f+;p$Sg+q7#@4+@4+@4+$a@$a@$a@cd+(6+#4+Og+^|+(k+%l#/k+&l#M4#1$@{/+_k+-2+-2+]_+:k+~k+,k+-m+)k+jr+HZ@=:@kr+#m+_9@l:+T8=C;=am@|~+:/#Fj$U8=V8=W8=X8=s{#Y8=Z8=`8= 9=58=.9=+9=@9=#9=$9=%9=&9=*9==9=-9=;9=>9=,9='9=)9=!9=~9={9=]9=^9=/9=(9=_9=:9=<9=[9=}9=|9=19=29=39=49=59=rG@dy@69=%8=hy@KL@79=89=99=09=a9=b9=~y@c9=d9=e9=Yr@I`.I`.f9=2p@/6@g9=c%.,h.)y%|Z.h9=i9=5g@dW.7O#4O..x+Vi 9_$^D%1C ,8 :t :t A6 8s Y1@Y1@&S E&#gP@{Z#Oe Md Md Oe ,! Ui Mc Mc Ui ,! ,! ,! Mf Tg Tg Mf FR@FR@Mf Th Th Th Th Th Mf FR@_J${L$o{ 8V 8V 8V {Z#{Z#Pe Pe gP@o{ {Z#Pe Lf Pe {Z#8V ER@ER@FR@FR@FR@FR@FR@FR@g*$Tg ER@_J$FR@Tg Tg Lf Ld S-@.r :t :t .r S-@S-@:t :t .r .r .r S-@S-@(,@/d@;8 ;8 ;8 (d@(d@(d@(d@|g 8v 5h 5h 5h 5h 8v |g ;8 ;8 (d@(d@ 9 9 /,@Yq U-@wa wa wa wa Ui Kf Kf Sg Tj H0 @9 :7 :7 fG#&W@k$#n$#VT@yR@gQ%gQ%Fy$~8@3|@+<@`:@)M =S n'%Gy$^V%+B%f<#M/+h3#~}%J$+kF$WL$!l$!l$~l$~l$~l$!l$5($5($n%$n%$46+aN#Jq@Jq@aN#aN#oX+oX+oX+oX+}3@}3@ca@ca@ca@{=#7j*u##'H%'H%;d*=q%lE*JZ*HJ*j9=uI*m^=SH*:I*m6*k9=l9=)Q*m9=n9=0. Se&SO+2p%,X@2p%yE#.X+qK#qK#/W%/W%/W%/W%.X+.X+yE#yE#$' qK+SO+ X+ X+SO+sq*>0+>S%~h&`b&!D+>n.>n.;n.;n.0, 0, {h&{h&{h&{h&0, 0, ~h&Bv&B9.0, {h&ZQ.&, c> ';$US+23+23+US+';$u]#:{+d #';$';$US+23+23+OP*xE*<:*p7=p7=p7=p7=p7=p7=p7=p7=c_$c_$q7=o9=o9=p9=3]&y$$xc+$(+$(+T_+G|@G|@G|@iS.oh.Kh+Kh+7P.7P.G|@$(+23+23+23+23+';$d #:{+v]#OP*US+d #';$23+OP*23+';$xc+T_+Kh+7P.Kh+Kh+y4&]@+7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.Kh+Kh+Kh+G|@G|@T_+T_+T_+T_+T_+T_+T_+d #GJ@q9=q9=q9=GJ@GJ@GJ@GJ@S>+S>+';$';$';$';$G|@G|@oh.oh.oh.oh.oh.7P.7P.7P.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+G|@Kh+7P.oh.y4&y4&7P.Kh+Kh+G|@G|@T_+T_+$(+G|@$(+xc+$(+G|@G|@T_+xc+G|@G|@Kh+Kh+Kh+7P.7P.7P.T_+Kh+oh.7P.G|@$(+", "9, G6.9, 8v.PI.Hu+VW.9, 9, VW.VW.VW.9, G6.G6.x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7.+N]+E)+f5%ER.bT.v9=@+@.E.8O.D6 m.@J`+m4*=[*w9=x9=2(*L8=Z] b6&Li {_#=)#gZ#S[ SY@CW+DW+9j#Bg j'#1)@7~ q$$_1 _1 _1 F~ xb xb xb xb P9 Q} Qw#_} Qw#8j#Q} c2 Q} c2 c2 Q} Qw#8j#T-@Yq +L@.9 @A@+L@/d@(7 (7 9 Y:@W:@W:@;! /d@ 9 /d@]|@Y:@Y:@W:@+~ X:@r[@>b@rG >b@>b@>b@>b@>b@>b@>b@>b@t! t! t! t! t! t! t! t! W:@t! r[@r[@X:@X:@r[@rG r[@>b@sG -! -! tG sG rG sG sG rG rG >b@>b@>b@r[@||@UT@UT@}|@1|@1|@2|@Z:@`:@[f TH TH s! }C }C cq Yr }C X 7O.SS#9I.^b&sY$ns$f4%H1#4m+y9=fV+O.@hV@K4#QU#i~+UK+#N+(8$T0+$t@W&+Qb+k0+k0+!-+S1#tD+tD+}}@`A+BR#V1#V1#*w+BR#`A+BR#BR#%w+%w+%w+`A+`A+`A+Xn+Sn+Pn+Sn+VA$av%9f#&!%UA#^d$Q4#Q4#P4=z9=~a$T4=_8=A9=*U*/l%Ug+Ug+6e@f+.G#A7#t0#G~$G~$C2=ai#Dc#Pt#bT#XX$XX$B9=XX$. $FV$C9=JV$D9=E9=F9=G9=${%S_=M3%W:%W:%w<%OB$P{$&}#&}#3I#:z$D0+^>$UY#Uy#f8+.G#.G#.I#y0+y0+>f+Un#i0#q7#+w#+w#Rg+`N#`N#!F*$a@$a@$a@Kb+Kb+{_+{_+M0+^i#(i#bf#/k+/k+*m+*m+(i#H`#60#]/+8X+8X+Tt+I6@e0#^_+/|+G:+wp+wp+2Z+vp+Rn+~7@w@@`=+k;@ >=UN#;>+[|$:m$H9=I9=J9=K9=L9=M9=N9=O9=P9=Q9=R9=S9=!n*T9=>==3f$U9=V9=W9=X9=Y9=Z9=`9= 0=g_=.0=+0=@0=#0=$0=%0=&0=*0==0=3W@f7=-0=;0=>0=,0=4W@'0=)0=!0=~0={0=]0=^0=/0=&u@(0=_0=:0=<0=[0=}0=|0=10=20=30=40=U6=_6=50=60=co.70=RW 80=UI+&T.H +JB@`D.@g+MM.XP.l8 {Z#,! H0 t/@jl >z $S ~d@-p@Rg Lf {Z#Pe ,! Md Md ,! Pe Lf Lf Oe Oe Lf Lf Pe FR@FR@FR@FR@FR@FR@FR@FR@Tg Th 9_$Tg FR@ER@ER@FR@8V ~~#~~#~~#~~#Lc Lc Lc Lc ~~#e7#8~ 8~ e7#~~#{Z#ER@ER@FR@Mf Mf FR@ER@ER@Th Tg FR@ER@ER@FR@Tg ,! wa Yq V-@,8 va va :,@:,@V-@,8 va ZA Sr V-@,8 fw +L@(d@|g ;8 (d@/7 (d@|g ;8 ;8 ;8 ;8 |g |g |g |g `O%|1&$A@|u }u ]J }u Y:@;! >8 +9 S:@~)#4C aY _7 _C@R} _7 ~)#WC@A&#`Z Nx@%W@4|@{8@)8@H)$u~$TT@UT@(|@_|@`:@GT ;g$J@%A-$-r%3F$'(@''+Ap+dN#c8$5($I$+pw$5($!l$~l$~l$d9$d8$b>%RS#RS#RS#RS#RS#RS#RS#RS#[k+[k+[k+>m+Q3#m6+nK@nK@#N@E+@mV$Ou@CJ*90=CJ*BJ*6r%Dp*00=q!=ZI*# =xM*Qf*a0=b0=c0=#.#N%+d0=8}.l^.EI#p!#DI#'Z%'Z%p!#qK#/W%)Z%'Z%2p%.X+yE#iM#yE#yE#1<# X+ X+ X+SO+SO+mh.mh.>S%>S%B#@B#@B#@B#@B#@B#@nh.nh.nh.nh.nh.nh.nh.nh.xE*xE*xE*17*17*17*17*17*G|@G|@G|@G|@G|@G|@G|@G|@w8.]! G|@oh.oh.oh.y4&=~@^b+#u%`E&#d+-.%-.%<:*<:*-.%M]*RD*QD*RD*M]*#d+{y%|m.T_+T_+T_+T_+T_+T_+T_+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.y4&oh.Kh+$(+$(+G|@oh.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+xc+T_+Kh+y4&iS.iS.iS.y4&7P.7P.7P.7P.7P.7P.7P.7P.G|@7P.oh.iS.iS.oh.7P.G|@oh.oh.oh.7P.7P.7P.7P.23+q9=e0=e0=e0=q9=q9=GJ@GJ@zw*zw*pK+pK+US+US+US+US+T_+Kh+oh.oh.7P.7P.y4&]@+]@+y4&7P.G|@T_+T_+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.G|@Ea+]! 5A.xc+$(+xc+7P.Kh+Kh+G|@G|@T_+T_+$(+$(+T_+T_+G|@G|@Kh+Kh+7P.G|@G|@G|@Kh+Kh+7P.7P.7P.xc+$(+T_+Kh+Kh+T_+$(+xc+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@T_+$(+$(+", "9, G6.9, 8v.PI.Hu+VW.9, 9, 9, VW.VW.9, 9, G6.x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7.F6.F6.F6.F6.F6.F6.F6.F6.8'%8'%8'%8'%8'%8'%8'%8'%is@is@is@Vh.is@x5.O7.xX%_r+xX%O7.x5.x5.O7.xX%_r+_r+_r+xX%xX%O7.O7.x5.x5.xX%xX%xX%O7.O7.x5.x5.x5.Vh._r+N7.xX%_r+%0+M7.O7._r+_r+_r+_r+_r+_r+_r+_r+Hu+PI.#9.cp.cp.#9.PI.Hu+Hu+Hu+Hu+PI.PI.PI.#9.#9._r+_r+_r+_r+_r+_r+_r+_r+N7.N7._r+_r+_r+xX%xX%xX%N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+_r+=a_*~G*BE*q!@2:*QL.TD.Zc%r1&2!+D_+o~+V@&-n#7J#f5%ER.HZ.6z%6=$<,.D6 vd K`+rt z2**x T&.i0=2(*b^ iH Li $p Gh /*@Ed S[ S[ FW+CW+9j#Bg Ag 2[ }i q$$q| q| q| _1 xb xb Bn@vG Q} 8j#Qw#Qw#Qw#8j#8j#8j#Q} c2 c2 Q} 8j#8j#T-@Yq O9 +L@.9 +L@/d@]|@(7 /d@;! Y:@W:@;! (7 /d@]|@Y:@+~ +~ t! X:@r[@r[@>b@>b@r[@r[@r[@r[@r[@r[@r[@r[@t! t! t! t! t! t! t! t! r[@>b@rG rG r[@r[@rG tG r[@>b@sG -! -! tG sG rG sG sG sG rG rG rG >b@:|@!8@!8@!8@UT@}|@1|@1|@1|@`:@`:@[f TH TH s! [r@6, e{@qG ;z hP@qV@lY#6N&4a&H{%~m$.B$].*Ki+^R+.<$-R@r|$QU#->+->+#N+(8$T0+;(@ar+-.$qd+qd+mB#mB#3$@3$@}}@`A+BR#*w+V1#*w+BR#%w+BR#BR#%w+%w+%w+`A+`A+`A+Xn+Sn+Pn+Sn+#m+VA$8f#(f#LP#^d$Q4#:v$P4=z9=~a$*[=j0=A9=*U*/l%Ug+)f+f+e8+A7#t0#G~$G~$B!$y0#Af#{/$MB#NB#/q$k0=B9=l0=XK$)J$m0=n0=o0=p0=AO$ih%N2%d4%w<%m}%d4%QR#(C#51%51%2I#2I#w'$Ty#UY#Uy#,6+.G# G#W4#QL#QL#V4#mc#+w#+w#+w#+w#U4#PL#PL#PL#$a@#4+Kb+Kb+{_+M0+M0+M4#(i#bf#/k+WN#WN#*m+5f#X+$`n+60#]/+}]+}]+Tt+I6@-9@Ob+vp+2Z+2Z+wp+Qn+Qn+4&@w@@P2@Ee@Gy+>%@J6@c=@aD#q0=+y%r0=s0=t0=u0=v0=w0=x0=y0=z0=A0=SN%B0=TI$b:#C0=y'=o:&D0=E0=F0=Do*G0=H0=I0=J0=K0=L0=M0=N0=O0=P0=Q0=R0=S0=T0=U0=V0=W0=X0=Y0=Z0=KL@j5=`0= a=.a=+a=@a=#a=$a=%a=&a=*a==a=-a=;a=>a=,a=Nr@'a=)a=!a=~a=el@{a=Z7+^W@e:@gN%6d@!6@kB.z3%mB.1O.uo@-K.]M$XC%Rg Uj If fp fp _d@_d@Rg Oe Pe Pe ,! Md Md ,! Lf Oe Oe ,! ,! Oe Oe Lf FR@FR@FR@FR@FR@FR@FR@FR@FR@FR@ER@ER@ER@ER@ER@8V ~~#~~#~~#wb wb wb wb e7#Lc ~~#wb wb wb wb ~~#Lc {Z#FR@Tg Th Th Tg FR@ER@Th Tg FR@ER@ER@FR@Tg ,! '8 V-@Sr ZA ZA va ZA ZA V-@,8 va ZA Sr V-@Sr fw O9 ;8 8v |g (d@/7 ;8 8v (d@(d@(d@(d@(d@(d@/7 /7 #A@Qk#l.#$A@y, }u ;! ;! ;! Y:@;! (7 _7 ~)#]C@lI@@A@.9 .9 @A@bP@bP@`Z Nx@%W@%W@]8@!8@$W@H)$TT@'8@yK [|@s[@GT n'%($%ID%3r$+v@g~@H!#M:+90$im$5($b>%5($d9$~l$0N$~l$d9$d8$b>%RS#RS#RS#RS#RS#RS#RS#RS#l9@l9@[k+[k+Q3#Q3#9Z.9Z.E+@E+@ra*7F*WI*90=CJ*BJ*6r%Dp*00=q!=]a=^a=,G*Qf*/a=b0=Ge#(a=_a=2+ 6g+;].j4@p!#DI#'Z%DI#p!#qK#/W%DI#p!#qK#/W%yE#yE#iM#yE#qK+qK+qK+$' $' $' >0+>0+>S%>S%B#@B#@B#@B#@B#@B#@nh.nh.nh.nh.nh.nh.nh.nh.xE*xE*xE*xE*xE*xE*xE*xE*G|@G|@G|@G|@G|@G|@G|@G|@T_+7P.iS.iS.7P.G|@T_+/{ {y%B#@TO&`b&#d+`b&TO&B#@#d+!D+M]*-~@/p.>n.#d+B#@|m.T_+G|@G|@Kh+Kh+7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.oh.oh.Kh+$(+$(+G|@oh.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+T_+G|@7P.oh.y4&oh.7P.Kh+7P.7P.7P.7P.7P.7P.7P.7P.Kh+7P.oh.oh.oh.oh.7P.Kh+7P.7P.7P.7P.7P.oh.oh.OP*q9=e0=e0=e0=q9=q9=GJ@GJ@zw*zw*pK+pK+US+US+US+US+Kh+oh.y4&oh.Kh+G|@Kh+oh.T_+T_+$(+$(+$(+T_+T_+G|@G|@G|@G|@G|@Kh+Kh+Kh+Kh+iS.Kh+$(+Ea+$(+T_+G|@T_+Kh+Kh+Kh+G|@G|@T_+T_+T_+xc+xc+$(+$(+T_+T_+G|@G|@T_+T_+T_+T_+G|@G|@Kh+Kh+xc+$(+T_+G|@G|@T_+$(+xc+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+$(+$(+$(+T_+T_+T_+", "9, G6.9, 8v.PI.Hu+VW.9, 9, 9, 9, 9, 9, 9, 9, x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7.8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%is@is@Vh.Vh.Vh.is@x5.O7._r+xX%O7.x5.x5.O7.xX%_r+xX%xX%xX%xX%O7.O7.O7.O7._r+_r+_r+xX%xX%O7.O7.O7.is@_r+N7.xX%xX%M7.M7.O7._r+_r+_r+_r+_r+_r+_r+_r+8v.Hu+PI.PI.PI.PI.Hu+8v.Hu+Hu+Hu+PI.PI.PI.#9.#9.xX%xX%xX%xX%xX%xX%xX%xX%N7.N7._r+_r+_r+xX%xX%xX%N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.M7.#k.v4.v4.<3+<3+v4.v4.#k.<3+<3+<3+<3+<3+<3+<3+<3+N7.N7._r+_r+_r+N7.M7.%0+M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+%0+%0+%0+%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.s[.91+91+91+91+91+91+91+v7+v7+s[.91+QI.QI.91+91+%0+%0+%0+M7.M7.M7.N7.N7.M7.N7.N7.N7._r+_r+xX%[M@&o@86=#4=8M.K!.>'.8:.8'%F6.$y#4!.{<*U~ N= k$@s9=:a=WI&=a_*+4*~G*+4*63*![*U{*C2&0)$BW.HB@k1$I+@I+@m]&t +GG.}Z&^(%X} Yg >K.{y &6#r0 kb kb RV%-$#[a=j^*!G KE+KE+0j# |#Ed S[ S[ EW+FW+^:*[i 1)@k5 &@.7~ #p #p ={ q| ry@Bn@*@.l ._} <} :} :} :} <} <} 'p ,p n| 36 n| ,p ,p 7, /,@ 9 O9 +L@O9 (7 ;! ]|@(7 ;! Y:@W:@Y:@]|@;! W:@X:@>b@>b@>b@>b@>b@>b@>b@>b@r[@r[@r[@r[@r[@r[@r[@r[@X:@X:@X:@X:@X:@X:@X:@X:@rG rG rG r[@t! t! r[@sG r[@>b@sG -! -! tG sG rG tG tG tG sG sG rG rG [|@>8@W.$'8@'8@b~ b~ :|@:|@rG rG rG >b@UH Yr Yr Yr 2k 6, iQ m>@0T@M[$Xm+: +n>#'Z#,>+UI#}a=|a=1a=}_#y_$v,$y)+nq@->+r8+ib#T0+ar+-.$(/+(/+mB#mB#mB#[(%X-$:T# B+[&@[&@[&@ B+tb+ B+ B+tb+tb+tb+:T#:T#:T#mp+Tn+Pn+Sn++m+@m+(f#,T*LP#^d$:v$:v$Hk*z9=2a=v7=j0=3a=n0#n0#)f+)f+ fw ,8 ,8 V:@+9 +9 G0 lI@Nx@H5@I~ _C@~)#~)#WC@z&#z&#^J Nx@EN#EN#@~ _|@$4@Eu $4@[|@}A v! cP@i4#in$MI&h2%w1#8G#D)+f~@j %Rj$,H$c8$S!$~l$0N$0N$0N$~l$d9$pw$b>%RS#RS#RS#RS#RS#RS#RS#RS#k9@ii@W_@W_@>(@<8+ha@ha@P{@*k@B>=b;=5H#`a='I% b=6r%.b=5`*Wq*]a=^a=,G*6J*/a=+b=@b=#b=$b=I+ *$@%b=Gu+DI#DI#DI#DI#p!#2p%qK#/W%/W%/W%/W%.X+yE#iM#&b=5,+5,+5,+jM#jM#mO#u.@u.@{h&{h&!D+!D+!D+!D+!D+!D+J> US+US+US+US+US+US+US+OP*OP*OP*OP*OP*OP*OP*OP*Kh+1m.1m.1m.1m.1m.1m.1m.~D.D9.D9.zc@1m.dl.dl.Ai.=~@b=>b=#]%U7&U7&Dg |!#Ed S[ SY@:/ EW+[i j'#2[ k} I..&@.!o !o ={ q| xb Bn@-{ ZG@(} 'p ,p ,p :} 'p 'p 'p ,p 36 7, 7, n| n| 7, (,@/d@ 9 O9 /d@;! Y:@Y:@]|@;! W:@+~ W:@W:@W:@X:@rG tG tG sG sG rG rG >b@>b@r[@r[@r[@r[@r[@r[@r[@r[@r[@r[@r[@r[@r[@r[@r[@r[@r[@r[@X:@W:@;! ;! +~ r[@r[@>b@sG -! -! tG sG rG -! tG tG tG sG sG rG [|@>8@W.$>8@'8@'8@b~ :|@:|@[|@rG rG rG hB hB hB UH }C [r@1A @-#|w$i,$X8&*W$4w$M@%O:+g,$UI#,b=7i+a)+1O#|T+nq@fX@]-+->+#N+ib#:f+ar+-.$(/+mB#mB#mB#[(%4&@:T# B+ey+[&@ey+ B+ B+ B+ B+tb+tb+tb+:T#:T#:T#mp+Tn+Sn+Sn+.m+Kt+,T*VA#'B+py+:v$X#PR#A|%A|%{b={b=+j%s<%*Q#E_$E_$}T#z0+z0+)E#wB#f8+Es$;f+}f#}f#:i#(@>(@Ux%ha@P{@^-@xs@Fb=5H#5H#'I%Gb=6r%.b=5`*Wq*]a=dG*,G*Hb=Ib=Jb=Kb=Lb=T-= @ >n.>0+|r%DI#DI#DI#p!#2p%2p%qK#&b=yE#.X+/W%/W%yE#iM#l]#5,+5,+5,+jM#jM#mO#u.@u.@{h&{h&!D+!D+!D+!D+!D+Bj.J> US+US+US+US+US+US+US+23+23+OP*OP*OP*x{+x{+x{+1m.1m.1m.1m.1m.1m.1m.1m.Ai.8Y+8`#8Y+Ai.1m.8`#D9.]@+y4&h~ T_+*$@$(+|m.G|@y$$$(+|m.Kh+h~ 7P.Bj.G|@7P.7P.7P.7P.7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Ai.8Y+8`#8Y+Ai.dl.1m.8`#Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.Kh+Kh+Kh+Kh+G|@G|@T_+T_+7P.7P.7P.7P.7P.7P.7P.7P.y4&7P.Kh+T_+T_+Kh+7P.y4&T_+G|@G|@Kh+7P.oh.oh.x{+GJ@q9=q9=q9=GJ@GJ@GJ@S>+x}*x}*d #d #d #T_+T_+T_+G|@Kh+7P.Kh+T_+xc+$(+G|@$(+T_+Kh+oh.y4&oh.7P.Kh+xc+xc+xc+$(+T_+G|@Kh+Kh+y4&7P.T_+T_+Kh+7P.7P.Kh+G|@G|@G|@G|@G|@G|@G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+$(+$(+T_+T_+T_+G|@G|@G|@$(+T_+T_+T_+T_+T_+T_+$(+G|@G|@G|@G|@G|@G|@G|@G|@xc+$(+$(+$(+T_+G|@", "9, G6.9, 8v.PI.Hu+VW.9, G6.G6.hY.G6.9, 8v.Hu+x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.[{.[{.[{.[{.[{.[{.[{.[{.8'%8'%8'%8'%8'%8'%8'%8'%O7.x5.is@Vh.Vh.is@is@x5.O7.O7.xX%xX%xX%xX%O7.O7.O7.O7.O7.O7.xX%xX%xX%xX%N7.N7.N7._r+_r+xX%xX%xX%xX%M7.M7.O7.O7.N7.N7.O7._r+_r+_r+_r+_r+_r+_r+_r+Hu+Hu+8v.8v.8v.8v.Hu+Hu+Hu+Hu+Hu+PI.PI.PI.#9.#9._r+_r+xX%xX%O7.O7.x5.x5.N7.N7._r+_r+_r+xX%xX%xX%N7.N7.N7.N7.N7.N7.N7.N7._r+N7.N7.M7.%0+%0+$B#$B#v4.v4.v4.v4.v4.v4.v4.v4.#k.#k.#k.#k.#k.#k.#k.#k.N7.N7.N7.N7.N7.N7.N7._r+M7.M7.M7.M7.M7.M7.M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.%0+%0+%0+%0+%0+%0+%0+%0+v7+UO&}n&}n&ye#J].J].J].UO&UO&}n&ye#J].J].ye#91+M7.M7.M7.M7.M7.M7.%0+%0+N7.N7._r+_r+xX%xX%xX%c+#I1.-G.NK.8M.K!.`q@u*=v4.v4.l5+zT.kg.L; UJ*C8+s9=AK$Mb=Nb=U( Hg%X3.{C+BO .c%w6*a_*a_*,^.zC.H-*C*+BG.Ob=E9&B9&B9&f5%R^%t +cT.tO.cI.^(%Pb=5A H%@Qb=a,@Rb=*x kb T&.w9=Sb=Tb=Ub=b+*Vb=C|*|!#Ed SY@=6#zW+TY+H'$Ag k} U: HW.I..#p #p q| _1 Bn@*@.u/@8_@M1 <} n| 36 :} 'p 'p <} ,p 7, /,@/,@7, 7, +' (,@]|@/d@/d@(7 Y:@+~ W:@Y:@Y:@+~ t! t! t! X:@rG -! -E -! -! tG sG rG rG >b@>b@>b@>b@>b@>b@>b@>b@>b@>b@>b@>b@>b@>b@>b@>b@>b@r[@>b@r[@t! Y:@Y:@+~ X:@r[@>b@sG -! -! tG sG rG tG tG tG sG sG rG rG [|@>8@W.$^Z#^Z#b~ b~ b~ _|@:|@[|@rG rG rG rG hB Cm #p@o!$|/%Zw D_#E_#8e%}(&^J$z+%, $XF@L;#RU#(/#z,+Rs@Z&+u_%u_%CI+]-+yM@@N+rd+rd+W&+W&+S0+S0+!-+S1#3$@tb+ B+ B+ey+ey+ey+ey+ B+ B+tb+tb+tb+:T#:T#:T#Tn+Tn+Tn+Sn+Kt+ m+,T*,T*^d$py+:v$ac#z9='b=2a=T[=Wb=7_='f+'f+,f+~i#Nn#Nn#$&^$i}%{b=fh%fh%{b=B|%*Q#AC$E_$>>$z0+)E#wB#wB#Uy#f8+7q$-l#1f#nB#Rn#df#6e@Pg+_i#bc#bc#g0#mi+mi+{_+{_+_k+Nb+Nb+8X+8X+Tt+Tt+Tt+e0#-9@Yn+sp+ L+tp+%N+_x@:c@#k+fy+xp+xp+=w+@k+sr+oy+&>+Pb+V&+pd+,i#,i#,i#,i#2]+G$+c=,c='c=)c=!c=~c={c=]c=^c=/c=(c=_c=:c=8 +9 +9 G0 S:@T:@T:@G0 V:@G0 S:@T:@S:@V:@G0 ]|@+9 ]|@T:@O9 T:@/d@S:@/d@T:@O9 _7 .9 _C@Q} Ok 4q 4q /n tK ZZ Ok Cn Cn Md Md wa c0&fX#Rn&0V Sk#Tk#X] h] i| m] 4C wa T:@Yq /d@y, $p@j@#j@#V^# z Vx %RS#RS#RS#RS#RS#RS#RS#mJ#[/+I_@ii@ii@>(@>(@Ux%ha@!-=5>=hD#jc=`a=kc=lc=Gb=IU#mc=nc=Wq*|Z%dG*,G*Hb=oc=Jb=Kb=pc=n(*Y1.QD*fJ%vA*DI#DI#p!#2p%2p%2p%2p%&b=yE#.X+/W%/W%yE#iM#l]#qK+$' $' $' 5,+5,+,0+,0+{h&{h&!D+!D+!D+!D+!D+Bj.J> US+US+US+US+US+US+US+US+US+US+23+23+OP*OP*x{+8Y+8Y+8Y+8Y+8Y+8Y+8Y+8Y+jy.q9+Ai.Ai.dl.Ai.8`#D9.y4&>( Kh+aH@G|@Bz$7P.>( $(+}f.T_+aH@Kh+Bz$Kh+Kh+y4&oh.oh.Kh+G|@T_+$(+$(+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+dl.1m.8`#8`#1m.Ai.1m.8`#Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.T_+T_+T_+T_+G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.7P.G|@T_+T_+G|@7P.oh.G|@G|@G|@Kh+Kh+7P.7P.23+S>+GJ@GJ@GJ@S>+S>+S>+';$d #d #T_+T_+T_+dl.dl.dl.xc+T_+Kh+Kh+T_+T_+Kh+oh.Kh+7P.oh.y4&oh.Kh+T_+$(+xc+xc+$(+$(+T_+G|@G|@G|@Kh+T_+xc+xc+T_+Kh+G|@T_+G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@Kh+Kh+Kh+7P.7P.T_+T_+T_+$(+$(+T_+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@T_+$(+$(+", "9, G6.9, 8v.PI.Hu+VW.9, G6.hY.hY.hY.9, Hu+PI.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%8'%xX%xX%O7.x5.is@is@x5.x5.x5.O7.xX%_r+_r+xX%O7.x5.O7.O7.O7.O7.xX%xX%xX%xX%_r+_r+_r+xX%xX%O7.O7.O7._r+%0+M7.x5.x5.N7.N7.O7._r+_r+_r+_r+_r+_r+_r+_r+PI.PI.Hu+8v.8v.Hu+PI.PI.Hu+Hu+Hu+PI.PI.PI.#9.#9.N7.N7._r+_r+xX%O7.x5.x5.N7.N7._r+_r+_r+xX%xX%xX%N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.M7.<3+v4.v4.#k.#k.v4.v4.<3+#k.#k.#k.#k.#k.#k.#k.#k.N7.N7.M7.M7.M7.N7._r+xX%M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+%0+%0+%0+%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+%0+%0+%0+%0+%0+UO&UO&}n&}n&ye#J].2P 2P UO&UO&}n&ye#J].J].ye#91+#9.N7.M7.M7.M7.%0+%0+%0+M7.N7.N7.N7._r+_r+xX%[M@PK.1P*.:*8M.K!.72.<{.<3+<3+Zl@&j.cf.g; =a c6+s9=jO.qc=rc=sc=uF+`[*tc=B0%Q(@uc=!&=a_*f(*zC.H-*H-*b++mA%D9&vc=EG.EG.6a&&V.|j+tO.cI.}K (3 EO.);@]y Qb=s0 l5 =[*[,.wc=xc=N} yc=zc=b+*C|* |#V!*=6#>O@zg zW+Ag 2[ Fh k< j< HW.q| _1 F~ ~o *@.-{ u/@>! 46 ,p 7, 36 <} 'p <} n| n| 7, (,@(,@/,@+' /,@(,@;! ]|@(7 ;! +~ t! +~ W:@+~ X:@r[@r[@X:@r[@sG -E -! -! -! tG sG sG rG rG sG sG sG sG sG sG sG sG rG rG rG rG rG rG rG rG >b@sG tG sG >b@r[@>b@sG r[@>b@sG -! -! tG sG rG sG sG rG rG >b@>b@>b@_|@'8@HN HN HN -8@-8@=8@=8@_|@_|@r[@>b@>b@rG hB Cm o!$Mu HC$~}+vC$A'$2F$R@&S@&g+&@++Bb$G}$*1@[C#+Pb+Pb+V&+,i#mB#!-+!-+mB#qd+I:+R@+[/+{ +y7%!v$q{=Cc=7R+Dc=18*Ec=Fc=Gc=Hc=7:@d=gC@,d=ta='d=)d=!d=~d=Jl.{d=]d=k! 4n%AJ.f{@=W@Vj Th Th Tg Tg Ui ,! Lf Oe Md Kf Kf Ui Md Md Ui Kf Kf Ui Md Md Tg Tg Tg Tg Tg Tg Tg Tg Tg ER@{L$_J$Tg 9_$Mf 8V G~ ZA ZA ,8 ,8 ,8 ,8 ,8 ZA ,8 ,8 Sr Sr ,8 ,8 G~ Pe Tg g*$Sh Sh g*$Tg FR@FR@Mf Mf Tg Tg Mf Mf Pe aP@+9 +9 +9 +9 G0 S:@T:@T:@S:@V:@G0 T:@U:@S:@V:@S:@V:@V:@G0 U:@~)#_7 T:@T:@T:@U:@_7 _7 ~)#_C@>! 3r !4+!4+|##J4@3r p<+A%@t[@99 Sh Mc /,$X] cq# >$zD ^G a|%qd#tR#ry@-{ :7 R} R} +' /1 ^t /d 5r U^#i*$Pw %RS#RS#RS#RS#RS#RS#RS#mJ#k9@ii@W_@W_@>(@<8+ha@ha@!-=a;=eF#2^@`a=kc=lc=Gb=IU#mc=nc=^d=|Z%(.=,G*/d=(d=_d=:d= US+US+US+US+US+US+US+u]#d #d #';$US+23+23+oh.8Y+8Y+8Y+8Y+8Y+8Y+8Y+8Y+dl.1m.8Y+1m.dl.q9+dl.Ai.9g.w]#Bz$P1.9g.O1.l}+[N*aH@)&+aH@P1.Bz$P1.Bz$Bz$y4&oh.7P.Kh+G|@T_+$(+xc+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+q9+Ai.8`#8`#1m.Ai.1m.8`#1m.1m.1m.1m.1m.1m.1m.1m.G|@G|@T_+T_+G|@Kh+7P.oh.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@';$S>+GJ@GJ@S>+S>+S>+';$';$d #T_+T_+T_+dl.dl.dl.dl.xc+T_+Kh+Kh+G|@G|@7P.iS.G|@G|@G|@G|@T_+$(+Ea+5A.G|@G|@G|@G|@T_+T_+T_+T_+$(+Ea+5A.Ea+$(+G|@$(+xc+T_+T_+T_+G|@G|@Kh+Kh+Kh+oh.oh.oh.7P.7P.7P.Kh+Kh+G|@G|@Kh+Kh+7P.7P.7P.oh.G|@T_+$(+$(+$(+$(+T_+G|@T_+T_+T_+T_+T_+T_+T_+T_+Kh+Kh+G|@T_+$(+xc+", "9, G6.9, 8v.PI.Hu+VW.9, G6.X)@X)@hY.9, Hu+#9.x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@is@is@is@is@F6.F6.F6.F6.F6.F6.F6.F6.8'%8'%8'%8'%8'%8'%8'%8'%N7._r+xX%O7.O7.O7.O7.O7.x5.O7.xX%_r+_r+xX%O7.x5.x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%O7.O7.x5.x5.x5.N7.%0+M7.x5.is@_r+N7.O7._r+_r+_r+_r+_r+_r+_r+_r+cp.#9.PI.Hu+Hu+PI.#9.cp.Hu+Hu+Hu+PI.PI.PI.#9.#9.%0+%0+M7.N7._r+xX%O7.O7.N7.N7._r+_r+_r+xX%xX%xX%N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+_r+0q.<3+#k.@#^} xc=;C+zc=b+*C|*/*@/($>O@i} AW+zg 1)@k5 U: }: w[ j< Q9 Q9 Q9 89 u/@u/@Mc >! <} xn#l[#xn#7.#:c#26 m[#qI#l[#Qk#Qk##A@m[#m[##A@Y:@;! ]|@Y:@t! X:@t! +~ r[@>b@rG rG >b@>b@tG -E tG tG tG sG sG sG sG sG tG tG tG tG tG tG tG tG sG sG sG sG sG sG sG sG X:@rG -E }g -! sG sG sG r[@>b@sG -! -! tG sG rG >b@>b@>b@r[@r[@X:@X:@(|@a$$Ag&a$$gS$gS$iF%GN GN X~#X~#X~#yK $p@:C@:C@[f Ts$'9@!(@q<+|w$=v$8:%2d=3d=^h&zB%^7%>D%*1@[x@ +@:8$47$Wx$Wx$hX+WK+R,+R,+{-+>T@3 @3 @P,+P,+P,+xD+tD+tb+tb+tb+ B+ B+ey+[&@ B+ B+tb+tb+tb+:T#:T#:T#Pn+Tn+Xn+Xn+.m+.m+&!%9f#py+}w+$ >$Kf Md Oe Oe Ui Sg Kf Ui ,! Md Md Ui Ui Md Md ,! Tg Tg Tg Tg Tg Tg Tg Tg FR@FR@ER@ER@ER@ER@ER@8V ~~#:,@va va ZA ,8 Sr Sr V-@Sr ,8 ,8 ,8 ,8 Sr @9 Lf Tg 9_$g*$g*$9_$Tg Mf ER@FR@Tg Th Th Tg FR@{Z#|C V:@+9 +9 +9 V:@G0 S:@U:@S:@G0 G0 T:@U:@T:@G0 gG#1C 1C gG#yz#aY aY fX#yz#yz#aY aY aY aY aY Mc bk 4L.;h@t$#}L.9v {*@-l :N..(+wz#Nc py#qd#uR#^G Yd=^i&Q_+ns+Wi 0F -{ Jf v[ Sj (1 3n -c Dm !a 0s i*$Vx S%>S%B#@B#@B#@B#@B#@|m.nh.d #d #d #d #d #d #d #v]#v]#:{+u]#d #';$US+Kh+8Y+^v.^v.^v.^v.^v.^v.^v.QJ*O^.+b.RJ*QJ*(w.QL+[y+P1.)M.O1.x]#GV.x]#GV.x]#O1.$e=w]#hU*P1.hU*P1.w]#9g.7P.7P.7P.7P.7P.7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+jy.Di*O^.O^.^v.QJ*QJ*O^.O^.O^.O^.O^.O^.O^.O^.8`#y4&oh.7P.G|@G|@Kh+7P.7P.G|@G|@G|@G|@G|@G|@G|@G|@T_+G|@Kh+Kh+Kh+Kh+G|@T_+7P.7P.Kh+Kh+G|@T_+$(+u]#S>+S>+S>+';$';$';$G|@G|@Kh+1m.1m.1m.QJ*QJ*QJ*1m.G|@7P.oh.oh.Kh+G|@7P.y4&G|@T_+T_+$(+$(+$(+T_+T_+oh.7P.7P.Kh+G|@T_+T_+$(+Ea+5A.5A.Ea+T_+G|@$(+Ea+T_+T_+T_+G|@G|@Kh+Kh+Kh+oh.oh.7P.7P.Kh+Kh+G|@G|@T_+T_+G|@G|@Kh+Kh+Kh+Kh+G|@T_+$(+xc+xc+$(+T_+G|@T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+T_+$(+", "9, G6.9, 8v.PI.Hu+VW.9, G6.X)@X)@hY.9, PI.cp.x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@is@is@is@is@=w{.5/.x{.td@=e=^++9<+9<+-e=)Q.;e=xb*9Y.8++(3 4j+4j+>e=]y X: j^@t0 6)@Be ;;@,e=n] g] 'e=)e= ~ /*@](#.U#O: Qo#er#gr#!m <: X]@}} #[ Ti Ti 8_@8_@>! >! >! c2 ,p l[#m[#xn#jr#jr#xn#l.#qI#l[#Qk#l.##A@m[#m[##A@W:@;! ;! Y:@t! r[@X:@t! >b@sG tG sG >b@>b@tG -E sG sG sG sG sG sG sG sG -! -! -! -! -! -! -! -! sG sG sG sG sG sG sG sG ;! X:@tG -E -! sG >b@>b@r[@>b@sG -! -! tG sG rG r[@r[@r[@X:@X:@X:@t! /|@/Y@gS$/Y@GN GN FN FN 1r@1r@W~#W~#X~#$p@$p@:C@UH |/%Mu p!$|-@m>@wt$W{$)n#pV$2w$~>+!e=p]+O+#RU#@@#K1#BT$BT$Wx$Wx$BO@CI+AI+zI+zI+x)+=B+=B+=B+=B+xI+/f#T1#T1#T1#T1# B+ey+[&@ B+~e=AR#9c#9c#N{$N{$N{$Rn+sp+%N+tp++m+[w+7f#{e=WN#*m+n*07%w'=hh%*)=s<%*Q#~:#.m%=Q#]6+~6+'6++I#+I#;X#[T#rq#(@$Tn#lc#Xl+fi+oB#ic#2&@2$@2$@hc#|&@|&@H`#H`#Tt+Tt+Tt+Yn+Yn+-9@-9@ L+]e=,w+@B+1R+sr+rr+rr+rr+#B+1R+oy+1]+1]+&>+rr+wD+pd+ h+ h+d&@qd+4T+B@@T.@dp+m;@rd+f>$Kq@j %&W#Z!%^e=!8%X]+/e=(e=_e=z'${~%YN+X6%2c#NM..^+ep >J k8 /e _m qa qa Cd Cd T[ s*@=2 $s ^)@O-@SM.rq Pm ;} d4@!$#:e=h@px ;l x[ O2+l8 Nf Nf Qe Rg 7V Uj CD #9 Cn CD Oe Uj Md Rg 9_$XC%Th Tg Tg Tg Tg Tg Tg Tg Tg Tg Tg Th 9_$Tg FR@ER@ER@Pe 8~ :)@<,@:,@va ,8 Sr Sr Yq V-@,8 ZA ZA ,8 V-@'8 Lf Tg Tg Th Th Tg Tg Mf ER@FR@Tg Th Th Tg FR@{Z#1C G0 V:@+9 +9 V:@V:@G0 U:@S:@G0 G0 T:@U:@T:@G0 0Y fG#fG#gG#aY 4C 4C yz#;{ ;{ ;{ ;{ 4C 4C 4C u/@bk }L.}L.}L.n8 l< Xj (G U4+!E ^r$A9#ze=ze=]a uR#va#^i&Q_+de#Ae= 1#F`+Cn h< Gn Jc ^e ol Dm !a !a U^#xt mI@m8 %{#%b>%b>%pw$pw$RS#RS#RS#RS#RS#RS#RS#RS#[8+%`$[8+J6@>m+/p%m6+~8*nK@dq@Be=9U*3J*'I%8F*Gb=Ce=mc=.e=+e=|Z%(.=,G*Hb=(d=_d=:d=De=[9.Ee=[n.cp.,X@'Z%p!#qK#qK#2p%p!#DI#)Z%'Z%2p%.X+yE#iM#yE#yE#qK+mh.mh.sq*sq*>0+>0+{h&>S%>S%B#@B#@B#@B#@B#@B#@nh.d #d #d #d #d #d #d #h]@h]@v]#:{+u]#d #';$G|@8Y+^v.^v.^v.^v.^v.^v.^v.h)@O^.1D.&C.RJ*QJ*Di*J; w]#O1.[N*yK#yK#GV.O1.P1.[N*GV.O1.w]#P1.P1.P1.w]#G|@G|@Bj.oh.y4&]@+w5&w5&Kh+Kh+Kh+Kh+Kh+Kh+Kh+1m.^x#h)@~Q+RJ*66=QJ*66=O^.sE.RJ*sE.RJ*sE.RJ*sE.RJ*LA.]@+y4&7P.G|@G|@G|@Kh+G|@G|@G|@G|@G|@G|@G|@G|@$(+T_+Kh+7P.7P.Kh+T_+$(+y4&oh.7P.Kh+T_+$(+xc+xc+';$';$';$';$';$';$G|@G|@1m.1m.1m.1m.1m.1m.QJ*1m.oh.iS.iS.y4&Kh+G|@G|@7P.Kh+Kh+T_+T_+G|@7P.y4&]@+iS.y4&oh.7P.Kh+T_+$(+$(+Ea+5A.5A.xc+G|@G|@T_+xc+$(+T_+T_+G|@G|@Kh+Kh+7P.7P.Kh+Kh+G|@G|@T_+T_+$(+$(+$(+$(+T_+T_+G|@G|@G|@Kh+T_+$(+xc+xc+$(+T_+Kh+d #d #d #d #d #d #d #d #:{+:{+u]#u]#d #';$", "x5.x5.x5.x5.x5.x5.x5.is@Vh.dD.dD.dD.is@xX%_r+VW.VW.VW.VW.VW.VW.VW.VW.Hu+VW.9, 9, 8v.Hu+8v.9, 8'%8'%8'%8'%8'%8'%8'%8'%[{.F6.b@>b@rG sG sG tG tG -! tG tG tG tG tG tG tG tG >b@rG rG sG sG tG tG -! rG rG rG rG rG rG rG rG r[@>b@rG tG tG -! tG tG >b@r[@r[@X:@r[@r[@>b@rG _|@/|@^|@/|@:|@[|@:|@X:@r[@r[@r[@X:@X:@X:@t! t! TH :)@:,@va va :)@x`#.-#g!@}a$)t@c#+T3*33@Qe=p$+'m%$}_%Mf Nf Bn@u/@wa :7 :7 :7 :7 Kf Kf Kf Jf :f @($Z3=8<*=2 /)@rc [u@>4@`= Cq.78@^6@NL. f=c-.'n@.f=+f=@f=#f=$f=%f=&f=*f=a7==f=-f=;f=>f=,f='f=)f=!f=~f={f=]f=^f=/f=(f=_f=:f=J$ K$ K$>J$>M$..&|0$Sv#P.$ds#ds#ds#ds#ds#ds#ds#|P+^R#[_+^R#mJ#}7@[k+ba@bk@>t*BF*Q}*CJ*]}*bf=9F*#L*cf=df=ef=ff=< =>G*,G*gf=hf=if=11 jf=]_ I&=uC#k1+DI#DI#DI#p!#p!#2p%2p%2p%2p%qK#qK#/W%.X+yE#iM#tq*z9.+y&+y&.y&.y&%z&%z&<:*3]&3]&`E&`E&TO&#d+#d+`b&y$$xc+xc+xc+xc+xc+xc+xc+{! {! 5A.Ea+$(+G|@7P.7P.:e.'&@FA+P] J; |f.J; J; '].'].'].'].'].'].'].'].}f.V&$RO+d%$m|.{'$V&$d%$0&+0&+0&+0&+0&+0&+0&+OP*y$$|m.>n.=~@=~@Bj.y$$;~ G|@G|@aH@aH@aH@aH@aH@P] rE.rE.)v rE.)v rE.)v rE.RK rE.mt*nt*RK 66=)v ;= 8Y+7P.7P.7P.7P.G|@Ea+]! 5A.T_+y4&y4&Kh+T_+T_+G|@G|@Kh+7P.7P.Kh+G|@xc+Ea+oh.oh.7P.7P.Kh+G|@G|@T_+bH@aH@Bz$Bz$Bz$aH@aH@bH@l7 bH@Bz$Bz$bH@bH@Q] >( Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+y4&7P.Kh+Kh+oh.y4&oh.Kh+G|@$(+xc+T_+Kh+oh.7P.G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+y4&y4&y4&oh.7P.7P.Kh+Kh+oh.oh.7P.7P.Kh+G|@G|@T_+xc+$(+G|@Kh+7P.Kh+G|@T_+G|@G|@xc+5A.$(+oh.Kh+v]#q)@9&+S>+FG*FG*FG*pK+S>+FG*FG*pK+x}*9&+q(#", "x5.x5.x5.x5.x5.x5.x5.is@Vh.Vh.dD.Vh.is@is@x5.VW.VW.VW.VW.VW.VW.VW.VW.Hu+VW.9, 9, 8v.Hu+8v.9, 8'%8'%8'%8'%8'%8'%8'%8'%[{.8'%+r/*r/*uf=vf=c< NM$:;#C,#wf=R3 uy @|#M9 (m i@#UE@b.#i@#Cv@i@#[`@RT@bP@bP@RT@@A@.9 .9 @A@@A@+L@+L@.9 RT@uR@bP@.9 9 9 (7 ]|@;! ]|@/d@O9 .9 Y:@+~ r[@>b@r[@X:@r[@rG rG rG rG rG rG rG rG rG rG rG sG sG tG tG -! -! tG tG tG tG tG tG tG tG sG sG tG tG -! -! -E -E rG rG rG rG rG rG rG rG r[@>b@rG sG tG tG tG sG rG >b@r[@X:@X:@X:@r[@>b@X:@+~ W:@+~ r[@>b@r[@t! rG rG >b@r[@X:@t! +~ +~ r[@X:@]J }u }u u! s! CN q<+eU$1-+$g$SL&;#&^e@fk+5y+5y+/@Ff=5e+sV@02=-2%A=$BR@BR@h*$Sk#zy@Sk#lI#-C+-C+-C+-C+-C+-C+-C+wa .' r) uI@F; Kd Z3=8<*,m Gf=IE%E{%!b@C:%e0@+S.`D@Hf=If=Jf=Kf=Lf=Mf=Nf=Of=Pf=Qf=Rf=Sf=Tf=Uf=Vf=Wf=Xf=&;#Yf=Zf=`f= g=.g=+g=@g=FE@#g=$g=%g=A`@&g=*g==g=-g=;g=>g=,g='g=md@0C@)g=~b@|4%aj%;<@l.@J0 9Y U!@bk J4@3r }t Ej >J yy Mz >J A%@A%@7O.PM.y=$WP.Th `;$`;$`;$.X lI#-C+-C+-C+.X `;$`;$lI#lI#`;$cK#Lc ZA ,8 Sr Sr Sr ,8 ZA ,8 ,8 ,8 ,8 ,8 ,8 ,8 G~ ,! Th Tg Mf Mf Mf Tg Tg Tg Mf FR@Tg 9_$9_$Tg {Z#S:@(7 ;! Y:@Y:@;! (7 /d@(7 (7 (7 /d@/d@/d@/d@ 9 Sr Sr V-@Yq U-@R} T-@T-@Q} Q} c2 c2 T-@T-@R} :7 u/@9_@9_@9_@9_@9_@9_@9_@Nc s<$s<$a^ J$V~$%/$%/$%/$%/$ K$ K$>J$>M$..&Sv#P.$P.$ds#ds#ds#ds#ds#ds#ds#ds#EA#EA#EA#Ka%>5@<3@:3@5T@>t*EP*Q}*~E*9F*|q%fN*]g=^g=df=ef=ff=< =H%=vg*;b*/g=(g=(a=Eu.Lh+45++=@]0+p!#p!#p!#p!#2p%2p%qK#qK#2p%qK#qK#/W%.X+yE#iM#tq*Xw&`E&TO&TO&#d+#d+#d+#d+`E&`E&`E&TO&#d+#d+#d+!D+*$@$(+$(+$(+$(+$(+$(+$(+Ea+xc+xc+$(+T_+G|@G|@Kh+>( 9g.P] bH@|f.}f.J; bH@FA+9g.FA+9g.FA+9g.FA+9g.US+23+x{+OP*US+';$23+OP*23+23+23+23+23+23+23+23+`b&!D+>n.;n.( 9g.9g.Bz$bH@aH@9g.9g.aH@bH@Bz$>( Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.Kh+T_+G|@7P.oh.Kh+T_+Kh+G|@T_+G|@7P.oh.7P.G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.oh.oh.7P.Kh+Kh+Kh+G|@Kh+Kh+Kh+Kh+G|@G|@G|@G|@$(+T_+G|@7P.7P.7P.Kh+G|@G|@Kh+T_+Ea+$(+oh.7P.v]#9&+ (&GJ@zw*zw*zw*zw*zw*zw*zw*GJ@lC&lC& (&", "Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.is@is@is@Vh.dD.%j.VW.VW.VW.VW.VW.VW.VW.VW.Hu+VW.9, 9, 8v.Hu+8v.9, 8'%8'%8'%8'%8'%8'%8'%8'%[{.8'%b@rG >b@>b@sG tG tG tG tG tG tG tG tG tG sG sG tG tG tG -! -! -! tG tG tG tG tG tG tG tG tG tG -! -! -! -E -E -E >b@>b@>b@>b@>b@>b@>b@>b@>b@>b@rG sG tG sG sG rG rG >b@r[@X:@t! t! t! t! t! W:@Y:@W:@X:@r[@X:@+~ sG rG rG r[@X:@t! +~ +~ >b@X:@]J }u 5h ]J :)@1A q<+7e+,I@D2&R8@6g=7g=8g=qG+qG+B+*>+Y.@/w+CD+0G+S.@qp+80#3%$70#G/%N4=S[=q=@mq*mq*mq*X[#X[#X[#bK@:_+=5@K:+|T+#*%6d$0g=+<%hi$Qv#/B&yL.7O#ck#a6&ET$ {#3h BR@^D%4C#Tk#4C#.X lI#lI#lI#lI#lI#lI#lI#'8 S-@k8 w' 3) f[@r*$D^$1H#sm$ag=QC@;O@_X+od#|6=1d@&U@e3@bg=cg=dg=eg=fg=gg=hg=ig=jg=kg=lg=mg=ng='A*og=pg=qg=rg=sg=tg=ug=vg=wg=xg=yg=KG@zg=Ag=Bg=Cg=Dg=Eg=(##Fg=Gg=Hg=Ig=Jg=~`.#[#d8@l|@N[@Q>+bv &x V!@9v ~0@B/ }t Ej s t) >J <7 O#@eF.Xj DL.gs#6O.FR@h*$.X -C+c0&4C#4C#Sk#c0&lI#.X .X lI#-C+.X |C H0 Sr V-@V-@V-@Sr ,8 ZA Sr Sr Sr Sr Sr Sr Sr H0 Ui g*$9_$9_$Th Tg Tg Mf Tg FR@FR@Mf Th Th Mf {Z#G0 ]|@]|@;! ;! ]|@]|@(7 (7 (7 (7 (7 (7 ]|@]|@]|@Sr Sr V-@Yq U-@U-@R} R} T-@T-@T-@R} R} R} U-@wa Mc Nf 9_@9_@Nd Nc Nc s<$s<$s<$s<$a^ a^ a^ a^ J$V~$%/$%/$%/$%/$ K$>J$g>&>M$|0$Sv#P.$P.$ds#ds#ds#ds#ds#ds#ds#ds#=1#o}@o}@o}@* +<3@8l*22+>t*:u*Q}*~E*9F*9F*fN*Mg=Ng=Og=Pg=.e=^a=H%=vg*Qg=Rg=Sg=Tg=q Bj.vE**e@d@@2p%2p%2p%qK#qK#qK#/W%/W%2p%qK#qK#/W%.X+yE#iM#tq*Be+3]&`E&`E&`E&TO&TO&TO&TO&TO&TO&#d+#d+<:*<:*!D+|m.T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@aH@m|.}f.{'$}f.{'$bH@m|.Bz$d%$Bz$d%$Bz$d%$Bz$d%$23+x{+u!=[f.OP*23+x{+[f.US+US+US+US+US+US+US+US+;n.;n.;n.>n.h~ Bj.Bj./{ 7P.7P.9g.9g.9g.9g.w]#YQ.^v.^v.66=^v.66=^v.66=^v.~Q+QJ*rE.QJ*~Q+RJ*66=Di*1m.7P.oh.oh.oh.7P.Kh+Kh+Ea+$(+Kh+7P.G|@$(+xc+$(+$(+T_+Kh+7P.oh.y4&oh.oh.Kh+Kh+Kh+Kh+Kh+7P.7P.7P.aH@Bz$9g.>( l}+l}+l}+>( Bz$>( l}+>( Bz$aH@Bz$>( Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@$(+T_+Kh+7P.G|@$(+y4&7P.G|@Kh+oh.oh.7P.G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.7P.Kh+Kh+Kh+G|@G|@G|@T_+T_+T_+T_+G|@G|@G|@G|@T_+G|@Kh+7P.7P.7P.7P.Kh+G|@7P.Kh+$(+G|@y4&oh.u]#S>+GJ@lC&lC&lC&GJ@zw*>H*GJ@lC&lC&lC&lC&lC&", "Vh.Vh.Vh.Vh.Vh.Vh.Vh.dD.Vh.is@x5.is@dD.Su$>~@VW.VW.VW.VW.VW.VW.VW.VW.Hu+VW.9, 9, 8v.Hu+8v.9, 8'%8'%8'%8'%8'%8'%8'%8'%[{.8'%F6.b@>b@>b@>b@>b@>b@>b@>b@rG rG sG sG sG rG >b@r[@rG >b@r[@t! +~ W:@W:@W:@+~ Y:@;! Y:@t! X:@t! W:@>b@r[@r[@r[@r[@X:@X:@X:@>b@X:@W:@5h 5h }u <,@8~ ;@#/)#-[@-q%fx@l^#5_=,'%up%qG+'m%2#j_%Lt# ~%I+%!A$'&%-|+Nr$hd+X3+Ly#Es$-f+-l#-l#-f+Nn#df#Rn#fi+W1#Dy#By#2&@YA+1$@V4@=m+~k+[w+[w++m+@m+@m+@m+Xn+Xn+mp+mp+vD+)w+!w+$B+,B+K)@P)@0G+Y.@Y.@H@@lX+B@@qp+80#3%$70#G/%N4=S[=Y[#Y[#Y[#Y[#4d+4d+4d+XM@Gq@-5@Y.+Z&+<{#o'%Wg=Z[&Xg=@$#Yg=!2+7O#ck#s]&N-%3h 3h n)$`;$c0&Sk#-C+`;$`;$`;$`;$`;$`;$`;$`;$1C H0 T} [} _g wo xu Ct x8+vd+E!@-*+pl@Bl 2E@+j@9R.Zg=B4=.m.`g= h=-y@sN@.h=zr@+h=@h=z`@#h=$h=%h=&h=*h==h=-h=;h=>h=,h='h=)h=!h=~h={h=]h=^h=/h=>Q@(h=_h=:h=J$V~$%/$%/$%/$%/$>J$>J$g>&..&|0$Sv#P.$ds#ds#ds#ds#ds#ds#ds#ds#ds#=1#=1#o}@>5@* +<3@DO#5T@>t*:u*~E*^I*fN*fN*0M*XI*5h=6h=7h=])=^a=vI*GE$+(=8h=L8*9h=H. U*@q,@He+D<&2p%qK#qK#qK#/W%/W%.X+.X+2p%qK#qK#/W%.X+yE#iM#tq*@d+O4%3]&3]&`E&`E&`E&TO&#d+#d+#d+#d+#d+<:*<:*!D+/{ G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+{'${'${'$m|.m|.V&$d%$d%$d%$d%$d%$d%$d%$d%$d%$d%$23+x{+[f.[f.OP*23+OP*[f.';$';$';$';$';$';$';$';$]*=-~@;n.!D+Bj.Bj.h~ ( >( >( >( O1.O1.8`#8`#O^.8`#O^.8`#O^.8`#RJ*8Y+QJ*8Y+RJ*zc@O^.1m.G|@Kh+oh.oh.oh.7P.oh.iS.$(+T_+G|@G|@T_+$(+xc+xc+Kh+Kh+7P.oh.oh.oh.y4&y4&T_+G|@G|@Kh+7P.7P.oh.oh.bH@aH@Bz$>( >( l}+>( >( >( l}+JI$l}+Bz$aH@Bz$9g.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.G|@T_+T_+Kh+7P.Kh+T_+]@+y4&7P.7P.oh.oh.Kh+T_+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@xc+xc+$(+$(+T_+G|@G|@Kh+G|@G|@Kh+7P.7P.7P.7P.7P.T_+oh.oh.G|@G|@y4&oh.d #FG*zw*lC& (& (&lC&zw*>H* (&lC&lC&lC&GJ@zw*", "Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.is@x5.x5.x5.Vh.%j.3o.VW.VW.VW.VW.VW.VW.VW.VW.Hu+VW.9, 9, 8v.Hu+8v.9, 8'%8'%8'%8'%8'%8'%8'%8'%[{.8'%8'%F6.F6.F6.8'%8'%8'%8'%F6.F6. 3 +7Y =N@_7+Ma+I%&Iw /,.<*%!(#N[@g +5=$_Q.Bx#.(+9_@Bn@0h=Xx&aw _u ah=XE&bh=9k&{%@ly$Dj&}d$02 X!*pa O*#|!# |# H@^+$[]#Yk i[#i[#N9 `8 Y=#j$#i@#UE@Cv@Cv@UE@[`@RT@@A@.9 +L@+L@+L@+L@.9 O9 9 (7 /d@ 9 9 (7 Y:@(7 ]|@;! Y:@W:@W:@W:@W:@t! >b@tG -! tG tG -! }g tG tG tG tG tG tG tG tG tG tG tG tG tG tG tG tG sG sG sG sG sG sG sG sG rG rG rG rG rG rG rG rG r[@r[@r[@r[@r[@r[@r[@r[@rG sG sG sG rG >b@r[@X:@rG >b@X:@+~ W:@Y:@Y:@Y:@+~ Y:@;! Y:@t! X:@t! W:@+~ +~ t! t! X:@r[@r[@>b@TH qG Y:@;! 5h }u H~ 8~ $-#;y%t[#q~+f*$x[+[W.OA+up%qG+VX.I1#Rs@1O#nq@VK+#N+#N+I,@I,@I,@I,@9g=.^$+^$@^$`[#`[#s^@s^@fc#Te=x}=N{$ho*N4#fw$fw$O4=G`#St+^/+Tt+Tt+~k+~k+&l#&l#(k+(k+'i#'i#Oj$Jn$*H$*H$mi+F:+$a@cd+E:+@4+Pg+:i#:i#h@#1 Cr.9Q J$V~$%/$%/$jF$jF$>J$g>&>M$..&|0$P.$ds#ds#ds#ds#ds#ds#ds#ds#ds#ds#Ka%Ka%1V#1V#>5@aa@DO#5T@;`+:u*~E*^I*0M*0M*/I*EF*Dp*Lh=H'=u)=Mh=5J*6J*PT&#P&xy*D>=dt zi.EI#~4.He+2p%qK#qK#qK#/W%/W%.X+.X+2p%qK#qK#/W%.X+yE#iM#tq*@d+O4%3]&3]&`E&`E&`E&TO&#d+#d+#d+#d+#d+#d+#d+B#@/{ G|@G|@G|@G|@G|@G|@G|@T_+G|@G|@Kh+7P.oh.oh.y4&{'${0*~0*5+=Nh=Nh=Nh=,w$Nh=Nh=Nh=Nh=Nh=Nh=Nh=Nh=';$23+OP*OP*US+';$US+OP*';$';$';$';$';$';$';$';$]*=}m.>n.`b&/{ Bj.( >( >( >( O1.O1.oh.oh.8`#oh.8`#oh.8`#oh.zc@7P.1m.7P.zc@y4&8`#Kh+T_+Kh+oh.oh.Kh+Kh+y4&w5&G|@G|@G|@G|@G|@T_+xc+Ea+y4&y4&oh.7P.7P.7P.7P.7P.T_+G|@G|@Kh+7P.7P.oh.oh.}f.bH@aH@Bz$9g.9g.Bz$Bz$>( l}+JI$l}+Bz$aH@Bz$9g.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+y4&7P.G|@Kh+oh.y4&7P.Kh+]@+y4&7P.7P.oh.oh.Kh+T_+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@xc+xc+$(+$(+T_+G|@G|@Kh+G|@G|@G|@G|@Kh+7P.7P.oh.$(+oh.y4&Kh+Kh+oh.7P.d #FG*zw*lC& (& (&lC&zw*>H* (& (&lC&GJ@zw*zw*", "Vh.Vh.Vh.Vh.Vh.Vh.Vh.is@is@x5.x5.x5.is@Vh.Vh.VW.VW.VW.VW.VW.VW.VW.VW.Hu+VW.9, 9, 8v.Hu+8v.9, 8'%8'%8'%8'%8'%8'%8'%8'%[{.[{.8'%8'%8'%F6.F6.F6.[{.8'%8'%F6.b@>b@>b@r[@r[@r[@r[@r[@r[@r[@r[@r[@r[@r[@sG sG sG sG >b@r[@t! +~ r[@X:@+~ W:@Y:@Y:@Y:@W:@t! W:@Y:@W:@X:@r[@X:@+~ Y:@W:@W:@+~ t! t! X:@X:@:)@:,@;! ]|@8v ]J t! x`#@-#K2$%{#LJ@Uh=e*$Pm&T8@=c@up%qG+VX.x_$Rs@nq@]-+#N+#N+I,@I,@I,@*(@9g=.^$j0+@^$`[#`[#s^@s^@fc#fc#x}=N{$ho*N4#fw$fw$O4=G`#[w+Yn+Tt+Tt+~k+!k+&l#&l#Ng+Ng+'i#Qc$Oj$Jn$Jn$*H$Wg+Kb+#4+cd+cd+$a@6e@6e@Pg+>$>>$E_$E7#|@$X/%51%=}#-2#`A$E~$s=$'$$%2+-f+ ;$-f+`-$B)$-f+B+f^@f^@H@@ZK+$N+yD+yD+T.@=:#n;@Qb+N:$Y=+Y=+bK@bK@bK@bK@SH@D,+0a@o}@n%$qw$!g$Vh=Wh=Nw#tB*Xh=Yh=^(%5z%z=$p2%c0&1C gG#yz#4C ;{ aY gG#1C 1C 1C 1C 1C 1C 1C 1C 1C ^D%.X 0Y U-@U-@o| (1 *l r4 Z' H< 1' (( {4 96 zJ.zy h{@G{%R{ :l%tu /h z#+(V Zh=4f=`h= i=.i=+i=@i=#i=$i=!+#%i=&i=*i==i=-i=;i=>i=,i='i=)i=!i=~i={i=]i=^i=/i=(i=_i=0e=}y@:i=Xr@mf@Se.9'.s-.Bq./4@[C@_L.Yt+RU. j@0v |t 3u D%@;J T[ 1/ 1/ (+ (+a9 xz#Nd X] Tk#Sk#c0&lI#`;$^D%c0&`;$*W@L-$^D%h*$h*$aP@@9 Yq Yq U-@Yq V-@Sr Sr ,8 Sr Sr V-@Yq U-@U-@:7 Ui Qe Sh Sh Qe 9_$Tg Mf Th Tg Mf Tg 9_$g*$Tg Pe +9 ]|@]|@(7 (7 ]|@]|@;! (7 (7 (7 (7 (7 ]|@]|@]|@V-@V-@V-@V-@V-@V-@V-@V-@Yq Yq Yq U-@U-@U-@R} :7 Kf Sh Sh Nf 9_@9_@Nd Nd a^ a^ #P$+''+k[+K$+zw%.b$V~$V~$%/$jF$jF$jF$g>&g>&>M$..&Sv#P.$ds#/v@ds#ds#ds#ds#ds#ds#ds#ds#|P+RS#}7@oX+qQ#ba@5T@i|+7j*;d*~E*0M*0M*KN*DF*GJ* }m.-~@>n.`b&/{ /{ h~ h~ 7P.7P.9g.9g.9g.9g.w]#w]#7P.23+7P.23+7P.23+7P.23+oh.US+G|@US+oh.x{+7P.G|@$(+Kh+y4&7P.T_+T_+oh.w5&y4&7P.G|@G|@Kh+G|@T_+xc+iS.y4&oh.Kh+G|@G|@G|@G|@Kh+Kh+Kh+Kh+Kh+7P.7P.7P.bH@aH@aH@Bz$Bz$aH@bH@bH@Bz$>( l}+>( Bz$aH@Bz$>( Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+y4&7P.Kh+7P.y4&y4&oh.Kh+y4&7P.G|@Kh+oh.oh.7P.G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@Kh+Kh+Kh+7P.7P.T_+T_+T_+T_+G|@G|@G|@G|@G|@T_+T_+T_+T_+G|@Kh+7P.5A.7P.iS.7P.G|@7P.Kh+u]#FG*zw*GJ@lC&lC&lC&GJ@GJ@lC&lC&GJ@GJ@zw*>H*", "x5.x5.x5.x5.x5.x5.x5.O7.x5.x5.x5.x5.O7.xX%xX%VW.VW.VW.VW.VW.VW.VW.VW.Hu+VW.9, 9, 8v.Hu+8v.9, 8'%8'%8'%8'%8'%8'%8'%8'%[{.[{.[{.[{.8'%F6.b@rG rG tG -E -! sG >b@rG sG rG rG rG rG rG rG rG rG sG sG rG rG >b@>b@r[@r[@rG rG rG rG rG rG rG rG sG sG rG rG >b@>b@r[@r[@X:@X:@X:@X:@X:@X:@X:@X:@tG tG sG sG >b@X:@+~ W:@+~ +~ W:@Y:@Y:@Y:@W:@W:@X:@+~ W:@+~ r[@>b@r[@t! +~ +~ W:@W:@Y:@Y:@;! ;! va ZA ]|@(7 8v ]J r[@:e {)#)q$Uo$=[@1&#z^&~5@33@Tb+yR#qG+VX.J1#v4#nq@]-+#N+#N+#N+#N+*(@*(@*(@9g=j0+F}$`[#`[#x]$x]$fc#fc#x}=N{$,T*0c#fw$fw$>$>>$>>$>>$E_$8,$E0+T:%*}#U%$'$$,>$w.$>>$In$8 ;! (7 /d@/d@(7 ;! Y:@(7 (7 (7 /d@/d@/d@/d@ 9 V-@V-@V-@V-@Sr Sr Sr Sr Yq Yq U-@U-@R} R} T-@P9 Kf Sg Sg Sg Sg Sg Sg Sg xb xb ] sd#|^#W] {{ 9^ #56+I3$17$zw%.b$V~$V~$jF$jF$jF$d8$pw$pw$b>%46+aN#RS#}7@}7@RS#RS#RS#RS#RS#RS#RS#RS#RS#RS#}7@qQ#<3@22+u(@pW$7j*;d*~E*0M*W~&/I*n*&JX%Di=Ei=Fi=n^=`I*tL*5|=#P&c&#bN.P% yk.%' ns%iM#c3+p!#p!#p!#p!#2p%2p%qK#qK#2p%qK#qK#/W%.X+yE#iM#tq*_|*Xw&+y&+y&.y&.y&.y&.y&+y&Xw&Xw&Be+Be+@d+@d+x*$x{ x{ x{ x{ x{ x{ x{ x{ zi.zi.zi.zi.J> J> J> US+HG*Gi=Hi=Ii=4i=Ji=4+=Gi=Hi=Ji=Hi=Ji=Hi=Ji=Hi=Hi=9&+zi.J> zi.x{ x{ nh.J> 17*17*17*17*17*17*17*17*;n.>n.!D+`b&/{ /{ /{ /{ Kh+Kh+Bz$Bz$Bz$Bz$P1.P1.US+pK+US+pK+US+pK+US+pK+23+S>+d #S>+23+FG*US+d #$(+7P.y4&Kh+xc+Ea+Kh+]@+w5&y4&Kh+G|@7P.7P.G|@$(+oh.7P.G|@T_+T_+G|@Kh+7P.7P.7P.7P.Kh+Kh+Kh+Kh+Kh+9g.9g.>( 9g.9g.aH@bH@}f.bH@aH@9g.9g.aH@bH@Bz$>( Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.Kh+G|@Kh+oh.oh.7P.G|@Kh+G|@T_+G|@7P.oh.7P.G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@Kh+Kh+Kh+7P.oh.oh.oh.Kh+Kh+Kh+Kh+G|@G|@G|@G|@T_+$(+xc+xc+xc+$(+G|@Kh+{! Kh+iS.7P.T_+G|@G|@:{+pK+pK+pK+pK+pK+S>+9&+9&+S>+S>+pK+pK+pK+pK+", "x5.x5.x5.x5.x5.x5.x5.xX%O7.x5.is@x5.xX%N7.M7.VW.VW.VW.VW.VW.VW.VW.VW.Hu+VW.9, 9, 8v.Hu+8v.9, 8'%8'%8'%8'%8'%8'%8'%8'%[{.[{.[{.[{.8'%F6.=>3%vu p;%Px Yh A,#JW+rt H5 er#_: ]3 {1 K,#>6#N,&Li=75*Mi=Ni=^o Gm n9&Io$Oi=R>+u6 7)@Bc Ed =)#=)#P@$^+$[]#s[ (o (o +<#N9 j$#UE@bP@@A@@A@RT@@A@+L@@A@.9 +L@O9 O9 O9 O9 +L@RT@+L@/d@(7 /d@/d@(7 ;! ;! ;! Y:@W:@t! r[@rG sG sG -! -E -! rG r[@r[@>b@rG rG rG rG rG rG rG rG rG rG >b@>b@r[@r[@X:@X:@rG rG rG rG rG rG rG rG -! tG tG sG sG rG rG >b@X:@X:@X:@X:@X:@X:@X:@X:@tG tG tG rG >b@t! W:@Y:@W:@Y:@Y:@;! Y:@W:@W:@+~ r[@t! +~ t! >b@rG >b@X:@X:@X:@+~ Y:@]|@/d@ 9 O9 ZA ,8 (7 (7 5h u! >b@cP@GT n'%16$-@#;N.:7&`O@p1@J.+yR#WX.VX.I1#v4#1T+nq@i~+#N+#N+.$#.$#R_@R_@*(@SK+F}$4$@`[#x]$x]$| %fc#BR#N{$,T*0c#}w+fw$>$>>$>>$>>$E_$8,$E0+T:%E0+8,$,>$uq#'$${6+`-$Nn##;{ m] v{ P+#p{ ;{ 0Y fG#gG#gG#gG#gG#gG#gG#gG#gG#Rn&[M#mI#2C T:@ 9 /7 Rk#`O%,O@]t Wr *! P3 P3 Gn R1 Kc Q-@2[ P| ^c k[@EW$30@Ri=G<.Si=Ti=jN@7Y@Ui=Vi=Wi=Xi=Yi=Zi=OP@`i= j=.j=+j=@j=#j=$j=%j=&j=*j==j=-j=;j=>j=,j='J@'j=)j=!j=~j=+S@sN@wj@+m.{j=}d@38%qO.!<@wQ%1 +8 ;! (7 /d@/d@(7 ;! Y:@(7 (7 /d@/d@ 9 O9 O9 O9 V-@V-@V-@Sr Sr Sr Sr Sr Yq U-@U-@R} R} T-@c2 c2 P9 Kf Kf Kf Kf Kf Ui Ui xb xb ] ~_#W] [K@b6&]j=[i=^j=Ci=]j=Oc !o g< g< Q-@<: Cd .s _d@;1@Tv hS$0'&@;%m>#&[@^F$ l#K#$17$zw%cA%V~$V~$jF$d8$d8$d8$pw$b>%n%$46+aN#RS#}7@}7@RS#RS#RS#RS#RS#RS#RS#RS#RS#}7@oX+aa@5T@u(@]w*.z*R}*;d*fN*/I*/I*/I*EF*rT*j9=/j=|Z%n^=`I*JJ*(j=_j=Zx*:j=*$ cI ~h&j4@=Z+J7.DI#DI#DI#p!#p!#2p%2p%2p%2p%qK#qK#/W%.X+yE#iM#tq*z9.+y&+y&.y&.y&%z&%z&%z&Xw&Xw&Be+Be+@d+z$$z$$z$$X@$$.@$.@$.@$.@$.@$.@$.@17*17*J> zi.nh.x{ x{ jk@p)@ nh.x{ zi.J> xE*xE*xE*xE*xE*xE*xE*xE*!D+!D+!D+!D+/{ |m.|m.*$@G|@G|@aH@aH@aH@aH@)&+k##S>+S>+S>+S>+S>+S>+S>+S>+pK+S>+9&+x}*pK+FG*S>+9&+u]#7P.y4&Kh+Ea+5A.G|@iS.o{+iS.Kh+Kh+oh.oh.Kh+$(+G|@T_+$(+$(+T_+G|@7P.y4&oh.oh.7P.7P.Kh+G|@G|@T_+JI$JI$JI$l}+>( Bz$bH@}f.l7 bH@Bz$Bz$bH@bH@Bz$>( Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.G|@$(+T_+Kh+7P.G|@T_+G|@$(+xc+T_+Kh+oh.7P.G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.7P.oh.y4&y4&y4&oh.oh.7P.7P.Kh+G|@G|@T_+$(+xc+Ea+5A.Ea+xc+T_+G|@be+G|@y4&Kh+$(+T_+T_+Ea+';$pK+FG*FG*FG*S>+9&+q)@pK+pK+pK+pK+pK+pK+", "Vh.O7.xX%x5.is@is@x5.x5.O7.O7.O7.xX%xX%_r+_r+Hu+8v.9, G6.G6.9, 8v.Hu+8v.9, G6.9, 8v.PI.Hu+VW.#k.F6.8'%F6.#h_ ly$Ug=R>+}!##3#Ed Ed =)#=)#r[ r[ :u :u @|#i[#N9 `8 i@#UE@b.#[`@RT@.9 9 /d@O9 O9 9 9 9 O9 O9 +L@(7 /d@ 9 O9 9 (7 Y:@W:@(7 ;! W:@t! r[@>b@rG rG >b@>b@r[@X:@X:@r[@>b@>b@>b@>b@>b@>b@rG rG sG sG tG tG -! -! -! tG sG sG X:@>b@sG sG sG sG -! }g -! -! tG sG rG >b@>b@r[@t! t! X:@r[@>b@rG rG sG tG rG r[@r[@>b@>b@X:@+~ +~ t! t! W:@;! ;! +~ r[@sG >b@X:@X:@r[@r[@t! W:@t! t! +~ Y:@]|@(7 /d@ 9 va ,8 (,@/,@;8 5h /|@`:@Y~#n'%NO$+E#{>+N^&lH@G~+q'@t##8)##>#/-+IK$1T+nq@->+i~+i~+UK+BI+:/#K4#m7#+N+#A*}z@}z@3T+W/$ }#*:@&w+&w++m+mq#}w+}w+*m+WN#[w+Yn+I6@Tt+~k+!k+&l#&l#Og+^f+Ul$Zb$Oj$Oj$*H$>d$#}%Xb$[f#t7#*H$*H$Ug+ae$ze$ze$md+md+I0+I0+I0+ 4+]6+T@%C0+B0+B0+A0+A0+}T#A0+A0+A0+~6+A0+Z3+T@%_C#H#$r:+/6+/6+E:+E:+$a@$a@~_+Kb+b[+ni+^|+M0+M0+^|+#l#2$@YA+dy+dy+{/+RO@{k+{k+IZ@@m+&w+&w+ey+ey+ey+np+1=@1=@1=@$B+yD+&B+&B+#a@zD+9G+x)+>T@>T@X.@hX@W{@ky+3R+H,@$t@ar+$t@V_@+N+<`#<`#<`#<`#|~+cz@b=#p}@c8$Gs$T4$Hx$7j=NX.pE*8j=6T*QU% G@}_%A=$b>#[Q%)d@(d QF#! ZG@8_@wa H0 @9 @9 @9 W-@~~#~~#G~ @9 V:@]|@]|@(7 /d@/d@ 9 9 W:@Y:@]|@/d@O9 .9 .9 .9 va ZA ,8 Sr Sr Sr Sr ,8 Yq U-@T-@Q} Q} Q} c2 T-@:7 :7 :7 P9 P9 >! >! >! 8_@ZG@l .VE /} WE K1 '1 =J%4s$}1*Dj=Z{ !o g< ]3 Rj Pg t) )m %y %c$97@FW$Ej=GX$Bp+]b&_[%|7$O#%bK%($&'e%_H$_H$kF$5($5($_8$1T+x_%i[+}_+[/+k9@[k+[k+l9@k9@j~+}_+}_+j~+k9@l9@oX+oX+qQ#qQ#[3@ba@r$+ck@=R*;d*|q%BL$KN*sI*sI*aF*;!=Fj=@ &n^=K4&5|=Q-*Gj=55@Hj=b, ;].mh.|r%Q+&j(#/W%/W%/W%/W%/W%/W%/W%/W%DI#p!#2p%/W%yE#iM#l]#,C+kt*VD@_|*u{@u{@_|*z9.VD@(-=VD@ps+fJ%gJ%ps+z9.kt*ME+ME+X`+X`+Nc&Nc&Nc&mh.sq*sq*sq*sq*sq*sq*sq*wE*zw*Ji=[j=[j=[j=[j=Gi=Gi=Gi=[j=[j=Ji=Ii=Ii=a $aH*k#@0, 0, {h&{h&{h&~h&~h&>S%{h&0, &, &, 0, {h&>S%>n.{y%Y@$B#@!c.+~*H*>H*zw*GJ@>H*aH*Ij=16.16.Ij=aH*FG*US+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.oh.oh.oh.oh.oh.oh.oh.xc+T_+Kh+Kh+T_+T_+Kh+oh.y4&oh.7P.Kh+Kh+7P.oh.y4&Bz$9g.>( >( >( >( 9g.Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$Kh+oh.iS.]@+]@+iS.oh.Kh+7P.Kh+Kh+G|@G|@T_+T_+$(+xc+$(+T_+G|@G|@T_+$(+xc+G|@G|@G|@G|@G|@G|@G|@G|@iS.oh.Kh+Kh+oh.y4&oh.7P.oh.oh.7P.7P.Kh+G|@G|@T_+T_+T_+T_+T_+T_+T_+T_+T_+y4&oh.7P.Kh+G|@G|@G|@Kh+23+23+23+23+OP*OP*OP*OP*23+23+US+';$';$d #", "Vh.O7.O7.x5.is@is@x5.x5.x5.x5.O7.O7.O7.xX%xX%Hu+8v.9, G6.G6.9, 8v.Hu+8v.9, G6.9, 8v.PI.Hu+VW.#k.F6.8'%F6.b@rG sG sG sG rG >b@r[@r[@r[@r[@>b@rG r[@>b@>b@>b@rG rG sG sG rG sG tG tG -! tG tG sG rG tG -! tG rG >b@rG tG -E -! -! tG sG rG >b@>b@X:@X:@r[@>b@>b@rG sG sG tG >b@X:@X:@r[@r[@t! W:@W:@+~ t! +~ Y:@Y:@+~ X:@>b@X:@+~ t! X:@r[@t! W:@+~ +~ W:@Y:@;! (7 (7 /d@Lc ZA Sr VH 8v }u /|@_|@fP@8E$lh#I_#oZ.TZ.4<+'{+.7#A($+h+8)#/-+}/+v4#1T+v,$i~+i~+nq@4%$4%$S;+|z@+N+.N+}z@}z@3T+3T+ }# }#mp+&w++m++m+py+py+Mn#Mn#^/+^/+Tt+}]+!k+)k+M4#M4#Og+^f+Ul$Zb$Oj$Oj$*H$>d$Vb$Xb$[f#Jn$wy$>d$~f+Ug+ze$md+md+md+I0+I0+I0+ 4+{6+C0+B0+B0+A0+A0+}T#}T#B0+Z3+~6+~6+Z3+c8+]6+':#H#$r:+/6+/6+E:+E:+$a@$a@~_+Kb+b[+ni+^|+M0+M0+^|+#l#2$@YA+_k+_k+:k+&m+{k+IZ@@m+&w+&w+ey+ey+ey+ey+1=@1=@qp+qp+yD+&B+&B+*B+zD+zD+L@c`@Tj=8f@#5+Uj=Vj=Wj=Xj=Yj=Zj=`j= k=.k=+k=@k=#k=$k=%k=&k=*k==k=-k=;k=>k=,k=HW@,j='k=)k=!k=~k=20={k={A@Yw.s{.06@>p@`k@#n@6e 5|@`G@`u gw gw M^ O#@t7 t[@AX@Jh=O^ F~ I0 Cn Rg Uj Rg CD Cn Rg 7V 7V Uj Uj ET Dn '8 U-@R} T-@R} Yq Sr ,8 Sr Sr ,8 ,8 ,8 ,8 Sr Sr '8 @9 '8 :7 >! >! '8 W-@H0 @9 H0 G~ ~~#wb G~ Sr ;! ;! ]|@]|@(7 (7 /d@/d@W:@Y:@;! (7 9 9 9 9 ,8 Sr V-@Yq Yq V-@V-@Sr Yq U-@T-@c2 Q} c2 T-@T-@P9 P9 P9 >! >! 8_@8_@8_@8_@ZG@l .L1 /} WE K1 b6&=J%4s$]k=Dj=!! _: 4 ]3 Qh Pg .s _d@%c$hs%eU$oC$GY$c7%Z@+;{+N:+m3&VR$1=&'e%'e%_H${J$kF$5($_8$_8$1T+1T+x_%}_+j~+k9@l9@l9@l9@k9@j~+}_+}_+j~+k9@l9@qQ#qQ#aa@[3@ba@r$+>`+]i@;d*=q%$F*0F*sI*XI*XI*YI*YI*j9=]a=CL$6J*(j=^k=+ %`N+/k=d7.NA.u{@6z+o&=b,+/W%/W%/W%/W%/W%/W%/W%/W%p!#2p%qK#/W%.X+iM#&b=&b=uq*_|*u{@ps+ps+u{@z9.VD@VD@_|*ps+lx@lx@u{@z9.kt*X`+X`+Nc&Nc&Nc&mh.mh.mh.sq*sq*sq*sq*sq*sq*sq*~~@GJ@[j=4+=[j=4+=[j=4+=[j=Hi=Ji=4i=Ii=4i=Ii=5i=aH*k#@0, 0, {h&{h&{h&~h&~h&~h&{h&0, &, &, 0, {h&~h&!D+{y%'W+`b&=~@C9.Bj.y$$Kh+Kh+9g.9g.9g.9g.O1.t#$9&+lC&zw*>H*>H*>H*zw*GJ@zw*>H*(k=Ij=Ij=(k=>H*pK+US+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.oh.oh.oh.oh.oh.oh.oh.$(+G|@7P.Kh+G|@G|@7P.y4&y4&oh.7P.Kh+Kh+7P.oh.y4&aH@Bz$Bz$9g.9g.Bz$Bz$aH@Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$T_+G|@oh.y4&y4&oh.G|@T_+T_+T_+G|@G|@G|@G|@Kh+Kh+$(+T_+G|@Kh+Kh+G|@T_+$(+G|@G|@G|@G|@G|@G|@G|@G|@oh.Kh+T_+G|@7P.y4&oh.7P.7P.7P.7P.Kh+Kh+Kh+Kh+Kh+T_+T_+T_+T_+G|@G|@G|@G|@oh.7P.Kh+G|@T_+T_+G|@G|@OP*OP*OP*23+US+US+';$';$US+US+';$';$';$';$", "Vh.x5.O7.is@Vh.is@O7.is@is@is@is@x5.x5.O7.O7.Hu+8v.9, G6.G6.9, 8v.Hu+8v.9, G6.9, 8v.PI.Hu+VW.#k.F6.8'%F6.b@>b@sG tG tG tG tG sG rG rG >b@r[@r[@>b@rG rG r[@r[@r[@>b@>b@rG rG rG r[@r[@rG sG tG tG tG sG -E }g }g -! >b@X:@X:@r[@-E -E -! tG sG rG rG >b@X:@r[@r[@>b@rG sG tG tG sG r[@t! t! X:@X:@+~ Y:@;! +~ X:@X:@+~ Y:@W:@+~ t! W:@Y:@W:@X:@r[@t! +~ W:@W:@Y:@Y:@;! ]|@]|@]|@W-@G> ZA y, ]J u! 1r@/|@fP@ -#lh#H_#.@$UZ.B9&0]+.7#A($7_#g^@/-+}/+Bb#1T+v,$Ab#QU#nq@7V@{^#6%$5%$SK+RK+Gn+Gn+B@@B@@S.@| %Xn+mp+@m+.m+kr+lp+ji+ji+Ob+Ob+}]+^_+)k+-m+Qn#Qn#Og+^f+Ul$Zb$Oj$Oj$*H$>d$=d$>d$*H$!i#ze$#*$Ib+md+md+I0+I0+I0+ 4+ 4+ 4+`3+B0+6[+;|+;|+;|+'|+%2+%2+Nr$Nr$$2+Tx$Tx$<[+YM$)_+B)$B)$B)$B)$E:+E:+E:+cd+cd+=g$b[+b[+mi+{_+^|+Ng+#l#2$@{/+_k+_k+:k+&m+{k+IZ@@m+&w+&w+ey+ey+*:@*:@qp+qp+80#ow*&B+%B+bX+bX+ky+< @Q,++zI+5G+5G+Q,+T@3]+T0+;(@;(@;(@/K@/K@FM@b=#b=#b=#hi@5]+ ^$YR#}0$3k=4k=4)#5k=_1.WH*6k=6e+xz#l;%R &S &]m#:f@Y=#i@#bP@.9 9 /d@/d@.9 @A@@A@.9 O9 O9 .9 A&#-C+ >$-C+fX#_7 a7#k[#g1#vK vK k[#k[#.9 .9 ~)#.9 ))#))#@A@Q} :: 6Y.!8 Lw 4e 0O.xI@[ [7 Pk )8 Ok ZZ ZZ ZZ `i@fp fp tK tK `i@jl @9 U-@c2 Q} Q} R} V-@ZA ZA ZA ZA ZA ZA ZA ZA ZA V-@Sr Sr Yq R} R} V-@ZA ,8 Sr Sr ZA :,@<,@va ,8 ;! ;! ;! ;! ]|@]|@]|@]|@W:@Y:@;! (7 (7 (7 (7 ]|@Yq Yq U-@U-@U-@Yq V-@V-@Yq U-@R} T-@c2 c2 T-@T-@c2 c2 c2 Q} Q} 8j#8j#8j#8j#8j#_} (} m| $, :&$b6&^j=4s$]k=tk=,m#_: 4 vb Si 56 4m %y hs%C(@O#$dX#A[#i|#o~+A2$9T+AB%9v$X&&uk=0W&_H${J$kF$5($47$&6$U4$Rs@^-+;>+,7$20#6]+6]+>(@6]+cZ.,7$,7$cZ.6]+ti+[3@[3@ba@DO#5T@i|+FJ$;m$Nu@|q%BL$sI*EF*HJ*2'=2'=4`*S[*yG*[ =@[=vk=wk=xk=}K&=@@y$$8P.fJ%Rz.B(*e6#/W%/W%/W%/W%/W%/W%/W%/W%qK#/W%/W%/W%.X+yE#yE#yE#tq*tq*tq*tq*Fu+,C+uq*xr*tq*tq*Fu+,C+,C+uq*xr*xr*,C+,C+uq*uq*xr*xr*xr*xr*uq*uq*uq*uq*uq*uq*uq*qK+ (&HG*{0*4+=~0*Hi=Nh=4i=yk=zk=,w$5i=,w$5i=Nh=FG*0, )A&)A&%z&%z&%z&.y&.y&.y&%z&)A&)A&)A&)A&%z&.y&`b&!D+!D+!D+Bj.Bj.|m.|m.y4&y4&>( >( >( >( w]#QC#pK+FG*lt*lt*lt*FG*pK+S>+pK+FG*FG*lt*lt*FG*FG*pK+US+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.oh.oh.oh.oh.oh.oh.oh.T_+Kh+oh.oh.Kh+Kh+7P.y4&oh.7P.7P.Kh+Kh+7P.7P.oh.bH@bH@aH@Bz$Bz$aH@bH@bH@aH@aH@aH@aH@aH@aH@aH@aH@xc+$(+G|@Kh+Kh+G|@$(+xc+$(+$(+T_+G|@G|@Kh+7P.7P.G|@G|@Kh+7P.7P.Kh+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@Kh+T_+$(+T_+7P.oh.7P.Kh+Kh+Kh+Kh+Kh+Kh+7P.7P.7P.T_+T_+G|@G|@Kh+Kh+7P.7P.Kh+Kh+G|@T_+$(+T_+T_+T_+y4&oh.7P.Kh+T_+$(+xc+xc+T_+T_+G|@G|@G|@G|@", "Vh.x5.x5.is@Vh.x5.O7.Vh.Vh.Vh.is@is@x5.x5.x5.Hu+8v.9, G6.G6.9, 8v.Hu+8v.9, G6.9, 8v.PI.Hu+VW.#k.F6.8'%F6.I+Ek=4A k{ $3#P: e5 e5 K,#N9 2j=[k=Pm@Js&Fk=Gk=`] 51&Hk=t3&4g=Ik=7)@(;#~(#~(#/*@.|#1!# H@R3 []#Zp {1 7.#26 .9 +L@O9 O9 9 9 O9 O9 O9 9 /d@(7 (7 (7 (7 /d@]|@;! +~ X:@r[@r[@X:@t! sG sG tG -! -! tG sG rG rG >b@>b@r[@r[@>b@>b@rG r[@r[@r[@>b@>b@>b@rG rG t! X:@r[@rG sG tG tG tG -E }g }g -! >b@X:@X:@r[@-E -E -! tG sG rG >b@>b@r[@r[@>b@rG sG sG tG tG rG r[@t! +~ t! t! W:@;! ]|@W:@X:@r[@t! W:@W:@W:@W:@Y:@;! Y:@t! X:@X:@+~ Y:@Y:@Y:@;! ;! ;! ;! fw H0 jl :,@Xr mt@u! =p@@~ `:@4z+=z$lT$h,$<|$5a&HB@R3#q'@$>#7_#VH#/-+Bb#e;%v,$Ab#QU#nq@gX@yA#d$xy$~f+!i#~f+Ib+V+$@|+_[+I0+I0+ 4+ 4+ 4+ 4+`3+`3+A0+>|+;|+;|+'|+'|+%2+%2+3[+YM$cO$<[+<[+<[+C:+)_+fd+B)$B)$B)$ed+E:+E:+E:+E:+=g$]|+mi+{_+Kb+mi+ni+#l#2$@{/+_k+]_+:k+&m+IZ@@m+@m+&w+ey+ey+ey+*:@*:@qp+qp+ow*ow*%B+%B+bX+jy+T_@< @Q,+Q,+=>+=>+5G+5G+z =l =l fp `i@>z gp G~ V-@T-@Qw#Qw#Q} U-@Sr ZA ,8 ,8 Sr Sr ,8 ,8 ZA Sr ,8 ZA Sr Yq Yq ,8 va ZA ,8 Sr ZA :,@<,@:,@ZA Y:@Y:@Y:@;! ;! ;! ;! ;! ]|@]|@(7 /d@(7 (7 ]|@;! Yq Yq U-@U-@U-@Yq V-@Sr U-@U-@R} R} T-@T-@T-@T-@Q} Q} Q} 8j#8j#Qw#Qw#Qw#Qw#Qw#_} (} m| ~1 :&$`{ +,7$cZ.20#20#>(@6]+cZ.,7$,7$cZ.6]+>(@ba@DO#DO#{=#i|+vY*R}*R}*|q%BL$0F*XI*2'=JX%JX%JX%4`*sL*F'*=l=-l=;l=-P@OW#eA [# &, A9.l=,l=,l=yk=,w$,w$Nh=FG*0, )A&)A&%z&%z&%z&.y&.y&%z&%z&%z&)A&)A&%z&%z&%z&!D+-~@]*=-~@/{ *$@/{ h~ ]@+iS.JI$l}+>( >( w]#w]#x{+b=+b=+lt*lt*FG*pK+S>+pK+pK+pK+FG*FG*pK+pK+US+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.oh.oh.oh.oh.oh.oh.oh.Kh+oh.y4&oh.7P.Kh+oh.y4&7P.7P.Kh+Kh+Kh+Kh+7P.7P.bH@aH@Bz$Bz$Bz$Bz$aH@bH@aH@aH@aH@aH@aH@aH@aH@aH@$(+T_+G|@Kh+Kh+G|@T_+$(+G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+7P.7P.Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@Kh+G|@T_+G|@Kh+7P.G|@xc+T_+G|@G|@Kh+7P.7P.oh.oh.T_+T_+G|@Kh+7P.oh.oh.oh.G|@T_+$(+$(+$(+$(+T_+T_+Kh+Kh+G|@T_+$(+xc+xc+Ea+$(+$(+T_+G|@G|@Kh+", "Vh.x5.is@Vh.Vh.x5.xX%Vh.Vh.Vh.is@is@x5.x5.x5.Hu+8v.9, G6.G6.9, 8v.Hu+8v.9, G6.9, 8v.PI.Hu+VW.#k.F6.8'%F6.b@>b@r[@X:@rG sG sG tG sG rG >b@>b@>b@r[@r[@X:@X:@r[@r[@>b@X:@X:@r[@r[@r[@>b@>b@>b@t! X:@r[@rG sG tG tG tG sG -! -E tG rG r[@>b@sG -! -! tG sG rG >b@>b@r[@X:@r[@r[@>b@rG sG tG tG rG r[@t! +~ t! t! W:@;! ]|@W:@X:@r[@t! W:@W:@W:@W:@Y:@;! Y:@t! X:@X:@+~ Y:@Y:@Y:@;! ;! ;! ;! fw H0 jl :,@qG mt@u! G5@YA 1|@4z+=z$$I$X8&aI.1(%^b&9]+VF@$>#7_#|/+j[+Bb#e;%|T+Ab#S@+v,$oZ@{^#DA#o7#{-+>T@3R+3R+P,+P,+xD+xD+Lt+Lt+ L+sp+kr+lp+%4+%4+/|+/|+^_+;2+-m+%4+4f#4f#Og+^f+Ul$Zb$Oj$Oj$*H$>d$ye$~k%'f+~k%Yg%}@=+2+-Y*G0+G0+0_%0_%0_%0_%o'$F_$A0+>|+>|+>|+;|+;|+hd+hd+YM$YM$cO$8[+8[+q:+2/#C:+`-$`-$`-$`-$fd+B)$B)$/6+@4+Pg+h0#]|+=g$=g$]|+ni+#l#V4@{/+_k+]_+:k+&m+IZ@@m+@m+&w+ey+ey+*:@*:@*:@80#80#80#ow**B+bX+bX+bX+< @< @:P+=>+=>+zI+R,+5G+x)+x)+zI+zI+{-+@N+(8$L4#4]+b=#) +zT&m9@hi@Xv+I_@bv$'($po%/l=kn$(l=%;=D5&Mm*sX+(Q.xj&_l=&h@a+&6`%XC@bP@RT@@A@@A@RT@uR@[`@@A@bP@bP@RT@.9 .9 RT@z&#>! Mc Mc >! T-@36 xn#xn#b4#@A@+L@U:@gG#lI#Y=* >$Ui Kf Sh k.@F`+*K.2r m.@~z 6m u[@u[@>y.[o%;4@* %4j#%c=/l@A&.:l=[ $9 Pk ro ZZ `i@>z ({+({+>z >z =l `r e7#ZA U-@8j#_} Qw#c2 R} Sr V-@Yq U-@U-@Yq V-@Sr ,8 ZA va ZA Sr Sr ,8 :,@va ,8 V-@Sr va :,@:,@ZA ;! ;! ;! ;! ;! Y:@Y:@Y:@/d@/d@ 9 9 9 /d@(7 ]|@Sr V-@Yq Yq Yq V-@Sr Sr U-@U-@U-@U-@R} R} T-@T-@Q} Q} Q} 8j#8j#Qw#Qw#Qw#Qw#_} _} (} m| ~1 UE `{ +,7$,7$cZ.20#20#>(@6]+cZ.,7$,7$cZ.6]+>(@DO#DO#{=#i|+@/%vY*R}*R}*9F*BL$sI*EF*2'=JX%2Z%2Z%4`*@i*rH*=l=+(=il=(;=xV@jl=Y_ B9._|*& =8&+m;+E#=w{@/W%/W%/W%/W%/W%/W%/W%yE#yE#.X+.X+.X+/W%/W%/W%tq*Fu+,C+uq*xr*&s*=^@=^@+X+$x+,C+&s*=^@=^@&s*xr*uq*uq*uq*xr*xr*&s*&s*&s*uq*uq*uq*uq*uq*uq*uq*qK+q(#R~${'$m|.d%$RO+0&+0&+$3.kl=kl=c`*0&+0&+RO+23+0, )A&)A&%z&%z&%z&.y&.y&)A&%z&%z&%z&%z&%z&%z&)A&>n.]*=(b+}m.Bj.*$@Bj.C9.]@+iS.JI$l}+>( >( w]#w]#[f.x{+OP*OP*23+US+US+US+23+US+US+US+US+US+US+23+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.oh.oh.oh.oh.oh.oh.oh.Kh+oh.y4&y4&7P.Kh+7P.y4&Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Bz$9g.9g.>( >( 9g.9g.Bz$aH@aH@aH@aH@aH@aH@aH@aH@G|@G|@Kh+Kh+Kh+Kh+G|@G|@oh.7P.7P.Kh+T_+$(+$(+xc+7P.Kh+Kh+Kh+Kh+Kh+Kh+7P.G|@G|@G|@G|@G|@G|@G|@G|@oh.7P.Kh+Kh+7P.G|@xc+]! T_+G|@G|@Kh+7P.7P.oh.oh.G|@G|@G|@Kh+7P.7P.oh.oh.T_+T_+$(+$(+$(+$(+T_+G|@$(+$(+$(+$(+$(+T_+T_+T_+$(+$(+T_+G|@G|@Kh+", "is@x5.is@dD.Vh.x5._r+is@is@is@is@x5.x5.O7.O7.Hu+8v.9, G6.G6.9, 8v.Hu+8v.9, G6.9, 8v.PI.Hu+VW.#k.F6.8'%F6.b@>b@>b@>b@>b@rG rG sG rG rG >b@r[@X:@X:@t! +~ +~ t! X:@X:@X:@X:@X:@r[@r[@>b@>b@>b@r[@r[@rG sG tG tG tG sG >b@sG tG tG rG rG sG -! sG sG rG >b@r[@r[@X:@t! t! t! X:@r[@>b@rG rG sG sG r[@t! t! X:@X:@+~ Y:@;! +~ X:@X:@+~ Y:@W:@+~ t! W:@Y:@W:@X:@r[@t! +~ W:@W:@Y:@Y:@;! ]|@]|@,8 H0 t/@va _t W:@}u LZ$xy _|@lQ (<%J4%48%Xm+Bp#)%@9]+VF@$>#7_#dH#j[+^f#Bb#37$v,$S@+Ab#e'#gX@N+#oZ@{-+>T@3R+3R+P,+P,+xD+xD+#B+Lt+tp+ L+[w+kr+)k+)k+Ob+Ob+}]+^_+)k+-m+Qn#Qn#Og+^f+Ul$Zb$Oj$Oj$*H$Ae$q+=jd+i8%jd+;Y*}@=-Y*|@=0_%0_%0_%o'$o'$o'$o'$E_$^>$>|+6[+6[+7[+4[+Nr$Nr$YM$<[+8[+r:+r:+r:+r:+q:+7q$7q$7q$`-$fd+fd+fd+B)$+zI+{-+#N+(8$FM@b=#) +zT&m9@Xv+~M#}_+bK%iq#qr%ol=z'#oE*pl='^.xO.Fh+lT.M/&k| Si@GL#Fa#QT@+L@@A@bP@[`@b.#UE@i@#@A@RT@bP@@A@.9 +L@RT@z&#>! Mc >! P9 T-@36 7, =! RT@_C@U:@gG#.X Y=*gF%) $Wj -K. E#m9+S1 y[ l.@m.@k .=y 2A.4k+@I.TE@ih 8|@ql=rl=sl=+5+tl=ul=vl=8h@wl=[A@xl=yl=&f=zl=pE@Al=xg=)h=Bl=Cl=Dl=El=Fl=Gl=Hl=Il=Jl=~k=Kl=mr@=l@Yw. S.;A 7f=Ux@Ll=|f@=2@6L.96 V!@G5 O#@^r$wz#za#Pq l8 Pk [7 $9 $9 [7 B6 )8 Ok `i@>z >z fp fp =l #p@e7#va Yq c2 8j#8j#c2 T-@Yq U-@T-@c2 c2 T-@U-@Yq Sr ZA va va ,8 Sr ,8 va ZA Sr Yq V-@,8 va va ZA ]|@]|@]|@]|@;! ;! ;! ;! /d@ 9 9 O9 O9 9 /d@(7 ZA ,8 Sr Yq Yq Yq Yq V-@U-@U-@Yq Yq U-@R} T-@c2 c2 c2 c2 Q} Q} 8j#8j#8j#_} _} 46 (} m| YD#UE [K@4s$];@4s$]j=wc =[ t[ Yk _)@Pg 3r '<$*>#Vo$S^$U)@E-%2=$6R+MR%eU%4=&(^$Of%Ml=hl=:H${J$5($&6$$*$J1#V0+,7$,7$cZ.cZ.20#20#6]+>(@6]+cZ.,7$,7$cZ.6]+>(@ba@DO#r$+{=#FJ$vY*R}*3+%9F*BL$sI*XI*2'=JX%2Z%2Z%UC*Wd*rH*GE$Nl=Ol=+ %MW#Pl=8' 9P.Hc%( 0&+>( 0&+9g.23+0, )A&)A&%z&%z&%z&.y&.y&)A&)A&%z&.y&.y&%z&)A&)A&;n.}m.]*=-~@/{ /{ h~ _e.y4&y4&>( >( >( >( w]#w]#x{+OP*23+US+US+US+23+23+OP*23+23+US+US+23+23+OP*Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.oh.oh.oh.oh.oh.oh.oh.Kh+oh.y4&oh.Kh+G|@Kh+7P.G|@G|@Kh+7P.7P.Kh+G|@G|@9g.9g.>( l}+l}+>( 9g.9g.Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$7P.7P.7P.7P.7P.7P.7P.7P.iS.y4&oh.Kh+T_+xc+Ea+5A.7P.Kh+G|@G|@G|@G|@Kh+7P.G|@G|@G|@G|@G|@G|@G|@G|@oh.7P.7P.7P.oh.Kh+$(+]! Kh+Kh+Kh+Kh+Kh+7P.7P.7P.Kh+Kh+Kh+Kh+G|@G|@G|@G|@T_+T_+T_+$(+T_+G|@Kh+Kh+$(+$(+$(+T_+T_+T_+G|@G|@T_+T_+G|@G|@G|@G|@", "is@is@Vh.dD.dD.x5._r+x5.x5.x5.O7.O7.O7.xX%xX%Hu+8v.9, G6.G6.9, 8v.Hu+8v.9, G6.9, 8v.PI.Hu+VW.#k.F6.8'%F6.b@rG sG sG sG rG rG t! +~ W:@W:@W:@W:@+~ t! t! t! X:@X:@r[@r[@r[@>b@rG sG tG tG -! tG tG sG rG sG -! tG rG >b@sG tG rG >b@>b@r[@X:@t! +~ +~ +~ +~ t! t! X:@r[@>b@>b@tG >b@X:@X:@r[@r[@t! W:@W:@+~ t! +~ Y:@Y:@+~ X:@>b@X:@+~ t! X:@r[@t! W:@+~ +~ W:@Y:@;! (7 (7 V-@H0 t/@,8 _,@]|@8v *p@Kz _|@lQ (<%v+%72&zD%eF&xW.2!+VF@@o+Ap+dH#j[+.3%Bb#47$bN#}_+}_+x_%Z&+2O#1O#zI+x)+9G+9G+mX+mX+,B+$B+#B+#B+%N+tp+-9@-9@&m+&m+^/+^/+Tt+}]+!k+)k+M4#M4#Og+^f+Ul$Zb$Oj$Oj$*H$Ae$;Y*cF$)l#cF$G0+HX*F_%fF$o'$o'$o'$A)$A)$A)$A)$E_$6[+uT#6|$6|$y:+y:+-_+-_+pF$-k+;k+Mg+ @#ei+On+Mg+In$In$7q$7q$Es$fd+H#$r:+! Bm ;[ ;[ p| ]1 +' +' c2 T-@'8 ,! k;%N(%Xl=H%&[N.wz@_a ^T.]b W} s'+s'+d_@bT+^z ya {z FJ.js T$+y|@kB#:)&Yl=Td..5+Zl=`l= m=.m=+m=@m=#m=$m=%m=pE@&m=*m==m=-m=;m=>m=,m='m=)m=!m=~m=ih=en@Mk={m=Xv.C).Kx :A.Ux@L5@|f@s~+.I.hb p_ jB eF.Vh A9#a|%lX%l8 Pk [7 [7 [7 [7 [7 Pk [7 B6 Ok ZZ ZZ tK fp gp G~ ,8 Yq R} T-@R} U-@U-@Yq U-@T-@Q} Q} T-@U-@Yq V-@,8 va va ,8 Sr ,8 ZA ,8 V-@R} U-@V-@,8 ,8 ,8 /d@/d@(7 (7 ]|@]|@;! ;! ]|@(7 /d@/d@ 9 /d@/d@(7 ZA ,8 V-@U-@R} T-@T-@T-@U-@U-@Yq V-@Yq U-@T-@c2 T-@T-@T-@c2 c2 Q} Q} Q} _} _} 46 (} m| YD#$, [K@4s$];@4s$]j=Rk =[ t[ 16 *l Jc |/ '<$*>#!q$Yx#m]&i+&W@+[7&NI&n4&3=&'V&`/=Ml=Ml=s$%{J$5($$*$Bb#J1#(m@20#20#20#6]+6]+6]+>(@>(@6]+cZ.,7$,7$cZ.6]+>(@ba@ba@r$+{=#>`+FJ$;m$^}*|q%$F*0F*XI*HJ*2'=j9=j9=UC*Wd*6H*vg*]m=xh#7:&f~#p0.U*@wv+'C+( >( 9g.Bz$Bz$>( >( >( >( >( >( >( >( oh.7P.7P.Kh+Kh+7P.7P.oh.oh.oh.7P.Kh+T_+$(+xc+xc+Kh+G|@T_+$(+$(+T_+G|@Kh+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@Kh+oh.iS.iS.Kh+$(+7P.7P.7P.Kh+Kh+Kh+Kh+Kh+7P.Kh+Kh+G|@T_+$(+$(+xc+G|@G|@T_+T_+G|@Kh+7P.oh.G|@G|@G|@G|@T_+T_+T_+T_+Kh+Kh+G|@G|@G|@G|@", "is@is@Vh.%j.dD.x5._r+x5.O7.O7.O7.xX%xX%_r+_r+Hu+8v.9, G6.G6.9, 8v.Hu+8v.9, G6.9, 8v.PI.Hu+VW.#k.F6.8'%F6.b@>b@rG tG tG tG tG sG +~ W:@Y:@Y:@Y:@Y:@W:@+~ t! t! X:@X:@r[@r[@r[@r[@tG tG -! -! -! tG sG sG sG -! -E tG rG r[@>b@sG r[@r[@X:@X:@t! +~ W:@W:@W:@W:@+~ +~ t! X:@r[@r[@tG rG r[@r[@>b@>b@X:@+~ +~ t! t! W:@;! ;! +~ r[@sG >b@X:@X:@r[@r[@t! W:@t! t! +~ Y:@]|@(7 /d@/,@t/@If Sr (,@/d@/d@dw 1f 1|@(J$(<%hs#8e%9a&*N.D9&){+f>@Vx#$>#dH#|/+.3%Bb#47$bN#[_+j~+i[+x_%^-+S,+R,+x)+x)+9G+=B+mX+mX+,B+)w+#B+Lt+%N+`K+`K+Zn+Zn+Yn+Yn+I6@Tt+Tt+!k+:k+&l#Og+^f+#4+Wg+p7#Tg+!i#ld+J0+Gy#'l#'l# 4+j8+i8+`3+F_$F_$E_$E_$E_$E_$E_$E_$4[+vT#H2$y:+;_+-_+Ab+=f+-k+;k+Mg+ @#Xl+Xl+Xl+ @#1=$In$TR#`-$fd+fd+H#$H#$a$[m=w}=Hw%uy*}m=|m=,N.Q$+PU.V} sd#! ;[ P9 p| R} U-@/,@/,@T-@R} '8 Oe [ Pk )8 )8 ro tK jl Yq Yq Yq Yq Yq V-@Sr Sr V-@U-@T-@Q} Q} T-@U-@V-@V-@,8 va va ,8 V-@Sr ZA ,8 Yq T-@T-@Yq Sr ,8 Sr 9 9 /d@/d@(7 ]|@]|@]|@Y:@;! ]|@(7 (7 (7 (7 ]|@ZA ,8 Yq R} c2 Q} Q} 8j#U-@Yq V-@V-@V-@U-@T-@c2 R} R} R} T-@T-@c2 c2 c2 46 46 46 (} m| YD#WE {{ im=]k=jm=b6&Rk =[ =[ Q3 Rh Dj QM.KB@t[#!f#2I.j9*2=$z1#KG% I%o4&-u$km=lm=`/=mm=2#%)H$_8$$*$^f#}/+J3+6]+6]+6]+>(@>(@>(@>(@>(@6]+cZ.,7$,7$cZ.ii@W_@>m+[3@ba@r$+{=#FJ$FJ$;m$=q%kE*%F*sI*mE*N`*uI*uI*_I*^3=%H*nm=om=pm=( >( G|@T_+$(+$(+T_+G|@7P.y4&]@+iS.oh.7P.7P.oh.iS.]@+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.oh.oh.oh.oh.oh.oh.oh.G|@7P.oh.Kh+T_+xc+$(+G|@$(+T_+Kh+7P.7P.Kh+T_+$(+bH@aH@aH@Bz$Bz$aH@aH@bH@l}+l}+l}+l}+l}+l}+l}+l}+7P.7P.Kh+Kh+Kh+Kh+7P.7P.Kh+Kh+G|@G|@G|@G|@T_+T_+G|@T_+$(+xc+xc+$(+T_+G|@G|@G|@G|@G|@G|@G|@G|@G|@xc+$(+G|@y4&w5&o{+iS.7P.oh.oh.7P.7P.Kh+G|@G|@T_+7P.7P.1m.T_+q9+xc+]$@5A.1m.G|@Ai.G|@1m.7P.8`#y4&oh.oh.7P.Kh+T_+$(+xc+xc+7P.7P.Kh+G|@G|@T_+", "xX%xX%_r+_r+N7.N7.N7.xX%_r+_r+_r+xX%O7.x5.is@Hu+Hu+8v.8v.VW.9, 9, 9, PI.Hu+8v.VW.VW.8v.Hu+PI.x5.xX%_r+xX%O7.x5.O7._r+_r+xX%O7.x5.x5.O7.xX%_r+[{.F6.#k.#k.#d~ sm=tm=um=vm=wm=uD&zc J< Ik=!`@xm=9@#~S#~S#x&#+U#ym=B0 4##7v d2 36 +' 9 9 ]|@(7 9 O9 O9 9 /d@(7 ]|@;! ;! Y:@W:@+~ t! t! X:@t! +~ +~ t! r[@rG sG sG sG rG rG rG >b@>b@>b@W:@;! ]|@;! +~ t! +~ Y:@X:@t! +~ X:@r[@t! ;! /d@r[@>b@sG -E }g }g -E -! tG tG tG tG tG tG tG tG sG sG rG >b@r[@X:@t! t! t! t! t! X:@r[@r[@>b@>b@r[@r[@r[@r[@X:@X:@t! t! W:@W:@W:@W:@Y:@Y:@Y:@Y:@X:@X:@t! t! t! t! t! +~ +~ W:@W:@Y:@;! ]|@(7 VH ^1 N1 (,@(,@S:@G0 [E@x! HT F<%=z$9E$,,$O#$v8+R~&L;*Z)*P{*IG#w=$X_@}/+e;%n%$v,$@#$v,$1T+1T+U4$e'#r8+-K@@N+hX@hX@f^@$N+$/>$]6+{6+C0+B0+B0+A0+^>$}T#7[+Nr$;t$-|+2[+2[+2[+s0+<[+<[+r:+B)$B)$B)$B)$Mg+ei+ei+:1@Wl+ @#Mg+r:+q:+;f+;f+.I#.I#QL#Gy#QL#!|+U4#ni+ni+mi+Kb+Og+]_+&m+XN#-9@|]+Pn+Pn+tD+wD+np+rp+ }#| %x]$xD+T.@yD+xI+Gn+1G+ZK+T@@N+X.@[V+D&+RH@C&+zm=Am= }&hx$&:#c)+b=#[_+uy+yx#Q.$F@+[v&Bm=Cm=Dm=3%+E$*xs#Em=vv%Aa+=K.Ti T-@l[#Px@Px@nx dw !)#XC@{Y@XC@w! XC@{Y@!)#QT@B_#')#kI@')#')# 9 T:@Yq T:@/,@/d@/d@/d@/d@/d@(7 G0 _7 AC 4C wa Cn ro B6 w[ }i fr#Hn !< HW.w) Q-@w) YQ@k_ m_ Fj YP.OU.S$+nB.F[@[4@6r@}Z.Fm=B$#@X.!l@Gm=Hm=Im=Jm=Km=Lm=Mm=Nm=Om=!m=EN@Pm=Qm=Rm=Sm=Tm=(6=Um=5C@hr.`>+{,.{j=Vm=50@-(#QY@E2%ts Xu a} C( Gi 86 3q T[ j< w[ w[ >[ [7 Pk Pk B6 B6 )8 ro Ok ZZ tK `i@If ,8 (7 /d@/d@/d@/d@(7 ]|@ 9 9 /d@/d@(7 ]|@;! ;! (7 ]|@;! (7 O9 .9 +L@O9 ]|@(7 /d@(7 ;! Y:@;! ]|@]|@]|@]|@(7 /d@/d@ 9 9 /d@(7 ;! Y:@;! (7 O9 .9 (7 ]|@(7 +L@uR@bP@O9 ;! +L@ 9 /d@ 9 +L@@A@@A@.9 n| n| n| 36 36 36 T-@T-@P9 ZG@vG VE L1 1^#W] b6&b6&U7&Vb=IY&Rk g< 6Y.3q -l &>$A4%j,%cX#mo%i|#V_#> $K#$O#%K$+VR$Ms$a8$%K$im$c8$bv$J$+T@+Jn#.l#cH#t!$d$@U+$yg%Ux%Ux%>(@>(@I_@I_@I_@I_@ii@%`$*-7#$'&.n=Pd ^3 |^#~_#h] Y] -t +n=/u GY%um=@n=II$Fe Vt*5m&Q[ #n=8i 5.&x&#$n=G[*Pj 4##,3 `3 *! 36 +' 9 /d@(7 (7 9 O9 O9 9 /d@(7 ;! ;! Y:@Y:@W:@+~ t! t! X:@X:@t! t! X:@>b@sG tG sG sG sG rG rG >b@>b@>b@t! +~ W:@+~ X:@r[@X:@t! W:@Y:@;! Y:@W:@W:@;! /d@X:@r[@rG tG -! -! -! tG tG tG tG tG tG tG tG tG sG sG rG >b@r[@X:@t! t! t! t! t! X:@r[@r[@r[@>b@r[@X:@X:@X:@t! t! +~ +~ W:@W:@W:@W:@Y:@Y:@Y:@Y:@+~ +~ +~ +~ +~ t! t! t! +~ W:@W:@Y:@;! ]|@(7 VH 7n Xy (,@(,@fG#1C 0V 9V U&&U=%{I$GC$Re@`M$| +S%&%n=#}*e=*.`&w=$8)#}/+bN#Ab#@#$@#$v,$|T+v4#U4$U4$i~+-K@@N+@N+hX@hX@Gn+$N+A@@A@@rr+oy+|]+|]+|]+lr+vr+vr+vr+R0+^_+^_+nD+nD+dy+gi+6e@@4+ed+ed+.4+~|+fd+fd+fd+H#$gd+gd+Tx$Tx$Nr$$2+7[+7[+;|+'|+,|+'|+4[+Nr$3[+-|+-|+-|+s0+YM$8[+8[+r:+B)$ed+ed+ed+E:+1(@N2@hr+gr+Xl+ei+ed+B)$-l#;f+W4#W4#B7#B7#^H$Gy#q7#U4#g0#]|+Kb+Kb+{/+}&@XN#e0#^/+lr+xp+v)+sr+1R+rp+rp+| %| %xD+xD+yD+yD+Gn+3R+lX+9G+hX@3]+X.@[V+aK@&n=*n={|&=n=-n=;n=hx$c)+Xv+j~+yx#1P+>n=,n='n=)n=!n=-]&~n={n=]n=Xm#LZ@!E Q9 Qw#:} 26 %f#(0#(0#]M XC@8.#{Y@w! ))#+W@w! !)#!)#QT@B_#')#')#B_#B_#+L@O9 O9 9 9 /d@/d@(7 /d@(7 (7 O9 @A@RT@+L@/,@.r _g P3 >3 f< ZV#3g >3 0P@0P@Rj Qh Rj 0P@R-@Pg l8 (G |} l.@C%..j@pt@R_%P!%l7=wv f1.W2+&O+9U.^n=/n=(n=_n=:n=[ >[ $9 [7 Pk B6 )8 )8 )8 ro Ok ZZ tK tK If ZA ;! ;! ;! ]|@]|@]|@]|@]|@]|@]|@]|@(7 (7 (7 (7 (7 ;! ;! ]|@ 9 +L@O9 9 ]|@(7 /d@(7 ;! Y:@;! ]|@]|@]|@]|@(7 (7 /d@/d@/d@(7 ]|@Y:@W:@Y:@]|@ 9 O9 ]|@ 9 +L@O9 /d@ 9 RT@UE@b.#bP@+L@ 9 O9 +L@+L@O9 xn#xn#36 36 36 36 T-@c2 8_@ZG@vG VE ry@~_#[K@Li IY&R8 'e=b2 hr#I..D/ D6 aG#e<#dV$Z:$Yu$Y_@l[++B$~}%09$Rj$Ms$nw$nw$Ms$Ms$09$09$90$N)$.3%Jn#.l#cH#+$#Q1+U+$yg%Ux%Ux%>(@>(@I_@I_@I_@I_@KL#`.@S%~h&{h&0, 0, {h&~h&nh. Ea#d2 Q1 +' /,@/d@/d@(7 /d@ 9 9 9 /d@(7 (7 ;! Y:@Y:@W:@+~ t! X:@X:@r[@r[@r[@r[@>b@sG tG -! tG sG sG sG rG rG >b@>b@>b@X:@t! X:@rG sG rG r[@;! (7 9 /d@]|@Y:@;! ]|@X:@r[@>b@rG sG tG sG sG tG tG tG tG tG tG tG tG sG rG rG >b@r[@X:@X:@t! t! t! X:@X:@X:@r[@r[@r[@t! t! t! +~ +~ W:@W:@W:@Y:@Y:@Y:@Y:@W:@W:@W:@W:@;! Y:@Y:@W:@+~ +~ t! t! +~ W:@W:@Y:@;! ]|@(7 VH ^1 N1 (,@(,@fG#1C 0V 9V 9[%N3%&W$o1#16$#{#42 +U@K5${7$T>*'[#PY$6 @}/+bN#Ab#}|+}|+v,$v,$v4#Rs@Rs@i~+r8+@N+@N+hX@hX@Gn+$N+S.@S.@vD+wD+mp+Tn+sp+sp+.B+.B+fy+vr+^_+;2+mD+mD+dy+gi+6e@E:+B)$r:+^6+^6+fd+fd+fd+H#$gd+gd+Tx$Tx$hd+hd+;|+'|+'|+'|+|T#Y3+;t$3[+-|+-|+-|+3[+cO$Tx$H#$fd+B)$B)$ed+ed+ed+E:+Z6@Nn+jp+gr+Xl+fi+f+>f+A7#A7#A7#id+V4#q7#g0#]|+{_+{_+1$@TY#e0#I6@Yn+|]+=w+@k+oy+sr+rp+rp+| %| %xD+xD+yD+yD+Hl+Gn+9G+3 @3]+'T@^^#TK++f+in=*n={|&jn=kn=ln=V4$E&+! +j~+yx#@L+J]$mn=f'%nn=1o%4*&on=pn=oc*G~&0T@Nc l ._} {1 WE@Xm@7q#7q#SJ# p@ p@{Y@))#QT@!)#+W@))#!)#QT@B_#B_#B_#B_#QT@@A@.9 .9 O9 9 /d@(7 (7 /d@(7 (7 /d@O9 O9 /d@_,@cq s7 P3 Q3 ZV#f< Si P3 P3 P3 R-@R-@R-@P3 Gn <7 ro A%@e_@]z f_@uW.y^%Lt s@#80@.l@Ew QZ Vw.qn=rX.rn=sn=tn=!u@un=vn=wn= (#{w@~u@xn=yn=zp@zn=Bj=tN@~A@bz+TR An=1b@58@EW$yp pd#}> z- j&@B( X' B%@1t $9 [7 [7 Pk B6 )8 )8 ro )8 )8 ro Ok ZZ ZZ tK Ld ZA Y:@W:@+~ W:@;! (7 /d@Y:@Y:@;! ]|@(7 /d@/d@ 9 ]|@;! Y:@;! /d@O9 9 (7 ]|@(7 /d@(7 ;! Y:@;! ]|@]|@]|@]|@]|@(7 (7 (7 /d@]|@;! Y:@W:@W:@;! (7 /d@]|@.9 bP@/d@t! Y:@UE@u_$VE@Cv@RT@O9 9 9 9 /d@l[#l[#7, 7, 36 n| c2 Q} l .vG vG vG xb ~_#b6&KE+E8&'e=Bn=Hj )! I..I^ YP.Pp@6%%@;%cX#dy%.+@MX.+B$Tj$Rj$Ms$nw$Hs$nw$nw$nw$09$09$90$cN#.3%.l#-t@cH#+$#Q1+U+$yg%Ux%Ux%>(@6]+ii@I_@I_@ii@5]+`.@V,@V,@rg@rg@no@6]@u.*>t*pW$=R*rA*1A*3n=2A*2A*;G*/w*+z*pE*}K*Cn=Dn=7T*En=~**v@ hf.zX#Fn=1P*Gn=6).K7+$:+v5.Q+&w{@CI#CI#CI#CI#w{@w{@w{@CI#CI#S`%S`%S`%S`%Fu+Fu+tq*$x+$x+tq*Fu+Fu+uq*uq*uq*,C+,C+Fu+Fu+Fu+$x+Fu+,C+uq*uq*,C+Fu+$x+,C+,C+,C+uq*uq*uq*xr*sq*%' /{ h~ Bj./{ /{ Bj.|*n: Mn=Nn=On= A@x&#DX%Pn=Pj e@#+l *l Q1 ]1 /,@(,@/d@/d@/d@/d@/d@/d@/d@(7 (7 ]|@Y:@Y:@W:@+~ t! X:@r[@r[@>b@>b@>b@rG sG tG -! -E tG tG sG sG sG rG rG rG >b@r[@X:@r[@rG tG rG >b@Y:@(7 O9 9 ]|@W:@+~ +~ X:@X:@r[@>b@>b@rG rG rG sG sG sG sG sG sG sG sG rG rG >b@>b@r[@r[@X:@X:@X:@X:@X:@X:@X:@X:@r[@r[@+~ +~ W:@W:@Y:@Y:@Y:@;! Y:@Y:@Y:@Y:@W:@W:@W:@W:@(7 ]|@;! Y:@W:@+~ t! t! +~ W:@W:@Y:@;! ]|@(7 VH VH N1 (,@(,@fG#1C 0V 9V > Q3 R-@2' Gn Gn Gn Jc Jc w' 2' yy Ok =W@G5 e_@]z 2A.v[@>h@R_%Ux@7(%2b@Tn=su ,~.cz+vt@|W@Un=Vn=Wn=~k=Xn=)u@Yn=Zn=Vn=`n=zn= o=.o= q#25@>l.00@6)+90@38@0j=U'%d,=O-@q.@j&@%; +s@1t }t Pk Pk B6 B6 )8 )8 ro ro ro ro ro Ok ZZ ZZ tK Ld ,8 ;! W:@+~ W:@;! /d@O9 ]|@(7 (7 /d@/d@ 9 9 9 ]|@Y:@W:@;! (7 9 /d@]|@]|@(7 /d@(7 ;! Y:@;! ]|@]|@]|@]|@]|@]|@]|@(7 (7 ;! Y:@W:@+~ +~ W:@;! ;! 9 RT@bP@/d@X:@W:@UE@85*N~#C&#bP@O9 /d@ 9 9 9 #A@m[#+' 7, 36 n| Q} Q} vG vG l .l .Bn@~_#'1 U7&; *+o=(: ~ E~ &7 i&@*y qy#6%%^-#i>#mi@x=$li@+B$ar$nw$Hs$Hs$Hs$Hs$nw$nw$09$90$N)$cN#Jn#.l#-t@y'#Sb+FH@H5$yg%Ux%Ux%6]+6]+ii@ii@ii@ii@5]+`.@V,@z;@rg@ei@ei@`~@22+@/%u##=R*D%&1A*E%&;&&Iv*Iv*/w*+z*d-=6n=5|=H==|P*@o=Zd.~ h^+i^+p&=*G.*1.V2.Ra.52.T`%Q+&CI#S`%S`%S`%CI#CI#CI#CI#CI#S`%S`%sX%sX%sX%Fu+tq*tq*tq*tq*tq*tq*Fu+uq*uq*uq*uq*uq*uq*uq*,C+$x+Fu+uq*xr*xr*uq*Fu+$x+,C+,C+,C+uq*uq*uq*xr*VD@%' /{ Bj.Bj./{ |m.Bj.b@>b@>b@>b@rG sG tG -! -! -! tG tG tG sG sG sG rG rG r[@X:@t! X:@>b@rG >b@r[@+~ Y:@]|@]|@+~ r[@>b@>b@r[@r[@r[@r[@r[@>b@>b@>b@sG sG sG sG sG sG sG sG >b@>b@>b@>b@r[@r[@r[@r[@r[@r[@X:@X:@X:@X:@X:@X:@W:@W:@W:@Y:@Y:@;! ;! ;! ;! ;! Y:@Y:@W:@W:@+~ +~ (7 ]|@;! Y:@W:@+~ t! t! +~ W:@W:@Y:@;! ]|@(7 VH VH N1 (,@(,@fG#(V#0V 9V Q@&U&&NK$es$o1#@{#.p $V.v@*-o=R8@~5@J.+XX./-+=t@S@+S@+i~+QU#QU#y_$^-+S;+i~+r8+#N+#N+@N+hX@Gn+Gn+yD+$B+!w+)w+Lt+Xn+Xn+tp+:c@:c@.B+fy+}]+^_+mD+mD+YA+gi+@4+/6+r:+q:+3/#3/#fd+fd+fd+H#$gd+gd+Tx$Tx$X3+X3+Y3+Y3+'|+'|+,|+'|+;t$3[+3[+3[+3[+$2+gd+Es$-f+`-$B)$r:+r:+B)$ed+E:+9~+Ol+jp+gr+lc#W1#:i#Rn#,l#hf# G# G#LL#LL#A7#'l#.4+=2+Qg+g0#]|+b[+V4@|&@]/+I6@Yn+Yn+@k+@k+@k+oy+rp+rp+| %| %xD+xD+yD+yD+Hl+Gn+3 @f^@'T@rd+[|+{-+&(@CI*CI*CI*kn= }&C2$K3$B,+cZ.Ux#gi$#q%!($>g%T8&` &,T.eI.;o=:i$Fn#v'@89 Qw#<} uR@|c#@A@.9 B_#')#8.#8.#8.#w! !)#!)#w! 8.#))#!)#QT@B_#B_#B_#B_#QT@RT@@A@.9 O9 9 (7 ]|@;! /d@/d@(7 ]|@Y:@Y:@Y:@y, ,J hp wo Jc _)@_)@Gn 2' R-@P3 Gn w' k8 _g .' .' s Dj }t jB gw av @;@OD+8|@[C@Ll=`3@lP@a4@78@Fw @X.>o=tN@Ft@8l@,o=up@'o=)o=!o=~o={o=]o=^o=wt@ q#.g.yC 00@6)+1b@38@EW$yp JA@/o=q.@Bh Ch B%@}t }t B6 B6 )8 )8 )8 ro ro ro ro Ok Ok Ok Ok ZZ ZZ Tj V-@(7 ;! W:@Y:@]|@ 9 +L@+L@O9 O9 O9 9 9 /d@/d@(7 ;! Y:@;! (7 /d@(7 ;! ]|@(7 /d@(7 ;! Y:@;! ]|@]|@]|@]|@]|@]|@]|@;! ;! Y:@Y:@W:@W:@W:@W:@W:@W:@+L@@A@@A@/d@Y:@(7 bP@C&#VE@i@#@A@/d@/d@ 9 +L@+L@#A@#A@/,@+' 7, 36 c2 Q} l .l .ZG@ZG@Bn@~_#'1 U7&Ih Ji (o=Ih a< m{ e_@Tq@FT#-[@t}@Oe@0e@)m+li@k %]m$nw$Hs$Hs$Hs$Hs$nw$Ms$90$90$N)$.3%Jn#-t@<6$y'#Sb+FH@H5$yg%yg%yg%6]+20#W_@ii@ii@W_@`.@% d;+[o=H8@}o=&1.Q>.J}.&1.T`%Q+&CI#S`%S`%S`%CI#CI#CI#CI#CI#S`%S`%sX%sX%sX%tq*tq*tq*Fu+Fu+tq*tq*tq*,C+uq*uq*uq*uq*uq*uq*uq*,C+uq*xr*&s*&s*xr*uq*,C+,C+,C+,C+uq*uq*uq*xr*VD@X@$B#@!D+`b&B#@B#@`b&>n.>n.!D+!D+!D+!D+!D+!D+>n.~h&~h&~h&~h&~h&~h&~h&~h&&, {h&%' x*$x*$%' {h&xE*Bj.Kh+Kh+7P.7P.Kh+Kh+Kh+]@+y4&Kh+T_+$(+T_+G|@7P.';$';$';$';$';$';$';$';$u]#d #';$US+US+';$d #u]#Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+y4&Kh+T_+G|@7P.oh.7P.G|@w5&y4&Kh+$(+$(+Kh+y4&w5&oh.oh.oh.oh.y4&y4&y4&y4&G|@G|@Kh+Kh+Kh+Kh+G|@G|@y4&oh.oh.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.Kh+G|@T_+T_+T_+G|@Kh+Kh+oh.7P.7P.Kh+G|@G|@T_+T_+Ai.Ai.Ai.1m.8Y+8Y+8Y+8`#jy.Ai.Ai.jy.jy.Ai.Ai.jy.Ai.Ai.Ai.Ai.Ai.Ai.Ai.Ai.1m.Ai.dl.q9+q9+dl.Ai.1m.y4&7P.G|@Kh+oh.y4&oh.7P.oh.oh.oh.oh.oh.oh.", "Vh.Vh.is@is@x5.x5.x5.Vh.is@x5.O7.O7.O7.x5.is@9, 9, VW.VW.VW.8v.8v.8v.VW.8v.Hu+PI.PI.Hu+8v.VW.x5.xX%_r+xX%O7.x5.O7._r+x5.O7.xX%_r+_r+xX%O7.x5.ve.[{.F6.F6.8'%F6.#k.<3+ *! Q1 (1 o| +' +' +' +' O9 9 (7 ]|@;! ;! ;! ;! +~ +~ t! X:@r[@>b@>b@rG r[@r[@rG tG tG -! -! tG -! -! tG tG sG sG sG rG X:@t! +~ t! r[@rG r[@X:@>b@X:@+~ X:@rG tG tG sG >b@>b@r[@X:@r[@r[@>b@rG rG rG rG rG rG rG rG rG >b@>b@>b@>b@r[@r[@r[@r[@r[@r[@r[@X:@X:@X:@t! t! +~ +~ W:@W:@Y:@Y:@Y:@;! ]|@;! ;! Y:@W:@+~ +~ t! ;! Y:@Y:@W:@+~ +~ t! t! +~ W:@W:@Y:@;! ]|@(7 (7 VH N1 (,@S:@H5@(V#0V 9V 8K#|i M-%bL#_R@K2$9e+7o=Ic=$g$9]&ex@'>+U`$VH#Tx#}_+S@+U0+QU#QU#S;+A,+S;+i~+r8+#N+#N+@N+@N+RK+Gn+yD+T.@xD+)w+Xn+Xn+mp+mp+:c@#k+.B+fy+Tt+}]+s=@nD+dy+gi+6e@E:+B)$r:+^6+^6+fd+fd+fd+H#$gd+gd+Tx$Tx$X3+X3+'|+'|+'|+;|+>|+;|+7[+Nr$Nr$3[+Nr$Nr$Tx$gd+-f+`-$r:+2/#2/#q:+r:+/6+-:@Nn+hr+_1@lc#W1#Rn#Rn#hf#hf#>f+>f+A7#A7#A7#id+.4+{|+2f#2f#g0#]|+YA+V4@sD+]/+I6@-9@.B+@k+@k+v)+mp+rp+| %| %xD+xD+yD+yD+Hl+Gn+9G+3 @3]+'T@^^#{-+Gl+C&+C2$C2$ln=ln=K3$D&+#X_@-&$Z)+S]=,a&c>&Xm+oT.}Q.j4 JH@YG@Rg h2 <} 26 k[#/7 /d@(7 a~ a~ +W@w! XC@w! ))#))#w! {Y@!)#QT@B_#')#kI@')#')#')#.9 +L@O9 9 /d@(7 ]|@;! (7 /d@(7 ]|@W:@+~ Y:@_,@.r s7 s7 _g Jc P3 Gn w' _)@R-@Gn w' 2' k8 k8 k8 SH P#@P#@Ej n_ F( |7 6m j|@y^%-s@pt@[4@~2@,A Gw g1.$X.%;+8o=~n@pP@eg=9o=0o=0o=ao=1n=bo=ZV.(A@Nl. g.yC TR f0@@g$.6@t;%k[@m0 Pt 3o B( n_ B%@Ej Ej B6 B6 )8 )8 )8 )8 )8 )8 Ok Ok Ok Ok Ok Ok Ok Tj Yq /d@(7 ]|@;! ]|@/d@ 9 .9 +L@+L@O9 9 /d@(7 (7 /d@]|@;! ]|@/d@ 9 (7 ]|@]|@(7 /d@(7 ;! Y:@;! ]|@]|@]|@]|@]|@;! ;! ;! Y:@Y:@Y:@Y:@Y:@W:@W:@W:@W:@ 9 9 9 /d@/d@ 9 +L@@A@UE@RT@ 9 ]|@(7 9 O9 O9 #A@m[#/,@+' 7, 7, T-@T-@>! 8_@8_@ZG@Bn@~_#b6&KE+V] Ki _1*co=Ae ,[ }L.9e+6K#^5@KK%AF@f*$#o+@h+|0#]m$nw$nw$Hs$nw$Ms$Rj$Rj$90$N)$cN#.3%.l#-t@<6$8Z+JL#bK*yg%yg%yg%yg%20#20#W_@W_@W_@W_@`.@n.>n.>n.!D+`b&`b&!D+>n.>n.~h&~h&~h&~h&~h&~h&~h&~h&0, ~h&X@$x*$x*$X@$~h&0, /{ Kh+7P.7P.7P.7P.Kh+G|@iS.oh.Kh+G|@T_+T_+Kh+Kh+d #d #d #d #d #d #d #d #US+23+[f.u!=u!=[f.23+US+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+iS.Kh+$(+$(+7P.y4&7P.G|@iS.y4&Kh+G|@G|@Kh+y4&iS.7P.7P.7P.7P.7P.7P.oh.oh.T_+T_+G|@Kh+Kh+G|@T_+T_+7P.7P.Kh+Kh+Kh+7P.oh.oh.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.G|@G|@T_+T_+T_+G|@Kh+7P.Kh+Kh+Kh+Kh+G|@G|@G|@G|@dl.dl.Ai.1m.8Y+8`#8`#zc@q9+1m.1m.q9+q9+1m.1m.q9+1m.1m.1m.1m.1m.1m.1m.1m.8Y+1m.dl.q9+q9+dl.1m.8Y+oh.G|@$(+T_+Kh+oh.oh.7P.G|@G|@G|@G|@G|@G|@", "dD.Vh.is@x5.xX%_r+_r+O7.O7.xX%xX%xX%O7.x5.is@9, 9, 9, VW.8v.8v.8v.Hu+VW.8v.Hu+PI.PI.Hu+8v.VW.x5.xX%_r+xX%O7.x5.O7._r+x5.O7.xX%_r+_r+xX%O7.x5.8'%b@>b@rG rG t! r[@rG sG tG tG tG sG -! -! -! tG tG sG sG sG r[@t! +~ t! >b@rG >b@X:@rG >b@>b@sG -E }g -! sG sG rG >b@r[@r[@r[@rG sG rG rG rG rG rG rG rG rG r[@r[@r[@r[@>b@>b@>b@>b@>b@r[@r[@r[@X:@t! t! t! +~ +~ +~ W:@W:@W:@Y:@Y:@]|@]|@;! Y:@W:@+~ t! t! +~ +~ +~ +~ +~ t! t! t! +~ W:@W:@Y:@;! ]|@(7 (7 VH (,@S:@S:@H5@0~ Fv@nQ Rn&|i `~#;@#{}+h^@Uv 3J@R%&qo=/h$3+$ek@.*+VH#8Z+j~+[_+U0+gi@K4#r|${}$S;+QU#i~+#N+#N+@N+@N+RK+Gn+T.@T.@S.@S.@np+rp+mp+mp+.B+.B+.B+fy+Tt+Tt+t&@t&@dy+gi+6e@@4+ed+ed+.4+~|+fd+fd+fd+H#$gd+gd+Tx$Tx$%2+%2+'|+;|+7[+7[+6[+4[+;|+hd+$2+Nr$Nr$Nr$Tx$Tx$-f+fd+2/#RL$RL$!M#q:+dd+1(@N2@hr+_1@lc#W1#:i#:i#-l#;f+W4#W4#B7#B7#^H$Gy#~|+i0#_i#_i#g0#]|+dy+{/+8X+sD+e0#`K+#k+.B+=w+1]+mp+rp+| %| %xD+xD+yD+yD+Gn+3R+lX+9G+hX@3]+X.@=>+&9@$9@U[#9g=hx$%:#VM+D&+bp+Sb+,(@@x@OZ.E)$H0%82&SS#&K.rs%N^ F~ S: Qw#<} b4#k[#;8 5h WA EN#0~ H5@QT@))#w! w! ))#!)#!)#+W@B_#B_#kI@1f 1f 1f kI@kI@ 9 /d@/d@(7 (7 ]|@]|@;! ]|@(7 /d@]|@W:@+~ ;! (,@[} _g _g w' P3 R-@P3 Jc P3 Gn Jc w' w' Jc P3 R-@SH SH .;@P#@Y' n_ }7 |7 ,o 2A.=<@ND+%<@N[@0[%b2@{6@UR RW E@ro=7C@nj@,A@Nv@5C@Ft@so=to=/A@/A@pf@ g.!h.Wc.=A EC uo=sy@u;%S#@Pt 3o B( n_ B%@Fj T[ B6 B6 B6 B6 B6 B6 B6 B6 Ok Ok Ok Ok Ok Ok Ok il Yq /d@(7 (7 ]|@;! Y:@Y:@(7 (7 (7 (7 (7 (7 (7 (7 9 /d@]|@(7 9 9 /d@]|@]|@(7 /d@(7 ;! Y:@;! ]|@]|@]|@]|@;! ;! Y:@Y:@Y:@;! ;! ;! ;! ;! Y:@W:@+~ W:@Y:@]|@]|@]|@(7 9 .9 @A@O9 ]|@;! ]|@/d@/d@(7 m[#l[#+' +' +' +' U-@U-@'8 :7 >! ZG@Bn@sd#[K@$p Oe&vo=3g=wo=D%.x[ .p #{#bI#xo=qK@R]+-z@d_+4)#D#$ar$Ms$nw$nw$Ms$Rj$09$90$N)$N)$cN#Jn#.l#-t@<6$8Z+JL#W[$J3+J3+J3+J3+(m@u4#l9@l9@l9@l9@[8+ei@no@/L#6]@2G$`~@bk@22+>t*EP*9F*Il*-G*;&&Iv*Uz*{-=yo=l.=6J*+H.il=8{+u)@lR A2*ZW+3,+C<&o&=h;#:{.78*wc.zo=7&+j(#Q+&w{@w{@w{@w{@Q+&Q+&Q+&w{@w{@w{@CI#CI#CI#$x+tq*Fu+,C+,C+Fu+tq*$x+tq*tq*tq*Fu+Fu+,C+,C+,C+&s*xr*,C+Fu+Fu+,C+xr*&s*,C+,C+,C+uq*uq*uq*xr*VD@x*$%' ~h&~h&%' %' ~h&0, &, 0, {h&~h&~h&{h&0, &, ~h&~h&~h&~h&~h&~h&~h&~h&{h&~h&>S%%' %' >S%~h&{h&/{ Bj.h~ LU@8w@J8#I-@67 Ca J>*.=+<]&*_&E<&mJ%6=$cF.ob#2z+Co=nH Do=Eo=Dj=Rp e0&Ih Fo=Go=6j=Ho=Io=2g Jo=Q*#:u 7v *! Q1 (1 ]1 7, 36 n| n| +L@ 9 (7 ;! Y:@Y:@Y:@;! t! t! X:@r[@>b@rG rG sG +~ X:@>b@sG tG tG sG rG -! -! -! tG tG tG sG sG >b@X:@t! X:@rG sG rG r[@sG rG sG -! *E *E -! rG tG sG >b@r[@r[@>b@rG sG rG rG rG rG rG rG rG rG r[@r[@r[@r[@>b@>b@>b@>b@>b@>b@r[@r[@X:@t! t! t! t! t! t! +~ +~ W:@W:@W:@]|@]|@;! Y:@W:@+~ t! t! X:@X:@t! t! t! t! t! +~ +~ W:@W:@Y:@;! ]|@(7 (7 VH (,@S:@S:@H5@0~ Fv@nQ Ko=d)% {#DR@@-#Zw `w [L.UJ.Lo==8&z^&#*+,>+6 @e~@j~+[_+U0+cp+K4#D&+Mo=D&+K4#i~+#N+#N+@N+@N+RK+RK+4$@B@@S.@A@@rp+uD+Tn+Tn+-w+fy+fy+fy+I6@I6@`+#`+#dy+gi+6e@@4+Nn#Nn#V4#V4#fd+fd+fd+H#$gd+gd+Tx$Tx$%2+hd+;|+7[+7[+4[+5[+;t$Y3+%2+hd+Nr$Nr$Nr$cO$cO$`-$H#$2/#t0+t0+RL$!M#D:+jp+0X+gr+_1@lc#W1#:i#df#;f+;f+.I#.I#^H$^H$^H$`3+W4#mc#nB#_i#Qg+F:+(+@dy+t&@sD+p=$XN#o;@.B+vr+xp+mp+rp+| %| %xD+xD+yD+yD+Gn+=B+ZK+lX+>T@hX@X.@=>+TK+W=+9g=hx$&:#I<&b)+ 8> 3) 3) +s u' Hi }7 &x ;l |} d'.H`+Rw%Zj 0[%-6@g8@-^.cQ.No=aC@Oo=fG@Po=Qo=Ro=So=qf@To=Uo=g9=17+Bc%Te.7'.}k.3B _<@{- AU+-( /( %; n_ B%@T[ ;J B6 B6 B6 B6 Pk Pk Pk Pk ZZ ZZ ZZ Ok Ok Ok Ok il Sr (7 (7 (7 ;! W:@t! X:@W:@W:@Y:@Y:@;! ]|@(7 (7 +L@ 9 (7 /d@ 9 O9 9 (7 ]|@(7 /d@(7 ;! Y:@;! ]|@]|@]|@]|@;! Y:@Y:@W:@W:@]|@]|@]|@]|@;! Y:@W:@+~ rG t! ;! ;! W:@Y:@ 9 bP@O9 /d@;! ;! ]|@]|@;! W:@l[#l[#+' +' +' /,@Yq Yq W-@'8 >! ZG@Bn@sd#{{ gl=[,.gI.3g==[*|: di PH#FW$ry#[8$l>#f*$#o+s##YJ#M[#Sj$Ms$Ms$Ms$Rj$09$90$N)$N)$N)$cN#Jn#.l#<6$jh#jh#S%{h&&, 0, {h&>S%>S%{h&0, &, ~h&~h&~h&~h&~h&~h&~h&~h&0, {h&{h&{h&{h&{h&{h&0, |m.Bj.h~ *I +/Q+v!&vd@v@%0F.jB@)T@.p=(a 7<%]a ]j=+p=aj#!! +|&h_ 84*@p=1g @p=;c Fz /m ,p 4' <} 36 +' ]1 Q1 Q1 n| /d@/d@(7 ]|@;! ;! Y:@Y:@t! t! X:@r[@>b@rG sG sG tG -! -! -! -E -E }g }g }g *E *E *E }g tG rG r[@sG sG sG sG sG sG sG sG >b@rG sG tG -! -E }g }g sG sG rG rG rG >b@>b@>b@r[@r[@r[@r[@r[@r[@r[@r[@rG rG rG >b@r[@r[@X:@X:@X:@r[@r[@r[@X:@+~ Y:@]|@(7 ]|@Y:@W:@W:@Y:@]|@(7 t! +~ W:@Y:@;! ;! Y:@Y:@;! ;! ;! ;! ;! ;! ;! ;! ;! ;! ;! ]|@]|@(7 (7 (7 T:@U:@Nx@H5@K!$$S#|E@.A@Fv@[e L-$gP@R-$UB$oP%@p QP.wG.S8&dn$)>+v<@WX.'M$IK$v,$i~+cp+C,+9i+j:+(8=|z@gi@cp+cp+(8$(8$+N+.N+=:#4$@T.@B@@/f#S1#rp+Lt+;w+#k+#k+#k+e0#e0#v=@v=@Sl+Sl+6e@6e@ -> Ri '3 O3 m_ Fj 9Y 3q kB C6 ae@~V.:a c9 h9%$p=[8@)#&!|.za.9'.k!+25@%p=pf@pf@sf@&p=mP@mP@TE+RW 7V.SW V9#!~.3B F..*J Zv #+@{4 1t Fj }t [7 j< j< $9 B6 )8 B6 B6 )8 Ok Pk Pk )8 ZZ >z >z tK Jf Sr (7 ]|@;! Y:@W:@W:@+~ X:@W:@;! ;! Y:@;! (7 9 @A@.9 +L@ 9 /d@/d@/d@/d@;! W:@t! t! Y:@;! ;! Y:@/d@W:@W:@(7 9 ]|@Y:@;! ;! ]|@]|@]|@;! Y:@W:@+~ ;! ;! ;! ;! ;! Y:@Y:@Y:@;! ]|@(7 /d@(7 ]|@Y:@W:@|u |u fw VH (,@/,@U-@U-@wa P9 >! 8_@-{ ry@W] gl=$u%B*@kx@sa*S&.aG#PH#Q&#eY.b~#9G#q4$|)#2)#YJ#~I$=k$Ms$Hs$=J$Hs$Ms$09$N)$cN#N)$N)$N)$cN#Jn#-t@jh#8e@8Z.y'#cH#Lq@y'#2w+Vt+oX+oX+qQ#<3@_3@''$Jm*2:@{'#2G$bk@A^%Sw*:u*Nu@9F*,i**p=;&&;G*Uz*!5*=p=IF*7J*-p=_j='.%ua@4Q.}# `%@Nc&+X+o&=aR#0}+RA.@b#;p=@:+Q+&Q+&Q+&w{@w{@CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%tq*tq*tq*tq*tq*tq*tq*tq*Fu+uq*uq*Fu+)p#)p#,C+&s*Fu+uq*xr*=^@=^@&s*xr*uq*=^@=^@&s*xr*xr*uq*,C+,C+u{@_|*VD@(-=(-=kt*VD@z9.kt*VD@_|*z9.kt*(-=VD@z9.>S%>S%>S%>S%>S%>S%>S%>S%~h&~h&~h&~h&~h&~h&~h&~h&`b&`b&`b&`b&`b&`b&`b&`b&;n.`b&`b&;n.;n.`b&`b&p=Li.,p='p=i1$)p=|A+P0 X9 !p=o;%~p=q^&{p=X/&sd@T~&zO.GW. x+gB#Gr nH Cj=tk=D`+)! Gh _n ]p=^p=k`&/p=(p=Zq cw /0#4' <} 36 +' o| (1 (1 ]1 /d@/d@(7 ]|@;! Y:@Y:@W:@X:@X:@r[@>b@rG sG sG tG -! -! -! -! -E -E }g }g }g *E *E *E *E -E tG sG tG tG tG tG tG tG tG tG sG sG sG sG tG tG tG tG sG sG rG rG rG >b@>b@>b@>b@>b@>b@>b@>b@>b@>b@>b@>b@>b@>b@r[@X:@X:@X:@t! t! X:@r[@r[@X:@+~ Y:@;! ]|@;! Y:@W:@W:@Y:@;! ]|@+~ W:@Y:@;! ;! ;! ;! Y:@;! ;! ;! ;! Y:@Y:@Y:@Y:@;! ;! ;! ]|@]|@(7 (7 (7 S:@T:@Nx@H5@K!$$S#|E@Tn$ -> Ri q) m_ Fj Ej 1/ U} 0$.C6 >K.+}6=lp.lp. 5+)$.+m.[ HW.6Y.>[ B6 )8 )8 B6 B6 )8 ro )8 ro tK fp `i@Ok h< V-@(7 (7 ]|@;! Y:@W:@W:@+~ Y:@]|@]|@;! ]|@/d@O9 .9 +L@O9 /d@/d@(7 (7 /d@Y:@+~ X:@t! Y:@]|@]|@;! /d@W:@W:@/d@O9 (7 Y:@;! ;! ]|@(7 (7 (7 ]|@;! Y:@;! Y:@Y:@Y:@W:@W:@W:@W:@Y:@Y:@]|@(7 (7 ]|@;! Y:@l.#l.#VH VH VH VH V-@V-@wa :7 >! >! -{ ry@W] ;b&dF.|p=[c*1d=Ue 2v@OK#,B$l4&D]$s4$s>#I4@e$@C)+=k$Ms$nw$Hs$Hs$Ms$90$N)$.3%cN#cN#cN#.3%.l#<6$jh#+o+S%>S%>S%>S%>S%>S%>S%>S%~h&~h&~h&~h&~h&~h&~h&~h&!D+!D+!D+!D+!D+!D+!D+!D+;n.`b&`b&;n.;n.`b&`b&;n.J> US+US+US+US+US+US+US+u]#US+x{+x{+23+';$';$US+oh.oh.oh.oh.oh.oh.oh.oh.7P.7P.7P.7P.7P.oh.y4&iS.oh.oh.7P.T_+Ea+Ea+T_+7P.G|@oh.oh.G|@G|@oh.oh.G|@y4&oh.7P.Kh+Kh+Kh+7P.7P.T_+G|@Kh+7P.7P.Kh+G|@T_+xc+$(+T_+xc+5A.5A.xc+G|@$(+T_+Kh+7P.oh.7P.7P.Kh+y4&y4&7P.Kh+Kh+Kh+Kh+Kh+7P.7P.7P.7P.7P.7P.7P.7P.8Y+8Y+8Y+1m.1m.1m.1m.1m.8Y+8Y+8Y+8Y+8Y+8Y+8Y+7P.y4&23+d #d #US+23+23+US+u]#u]#u]#u]#u]#u]#u]#u]#$(+T_+G|@Kh+Kh+G|@T_+$(+G|@G|@G|@G|@G|@G|@", "is@is@is@is@is@is@is@Vh.is@x5.O7.O7.O7.O7.x5.9, 9, 9, 9, 9, 9, 9, 9, G6.9, 9, 9, VW.VW.8v.8v.xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.O7.xX%xX%xX%O7.F6.8'%8'%F6.F6.#k.v4.<3+#k.#k.g&~T.H%&oH ;s@l;%E`+4#+,m#R: bw 85*Um@0p=Nk@(X%pR#VE@S} 'p 36 /,@F> o| o| F> /d@(7 (7 ]|@;! Y:@W:@W:@r[@>b@>b@rG sG tG -! -! -! -! -! -E -E }g }g }g }g *E *E =E =E *E }g }g -E -E -E -E -E -E -E -E -! -! tG sG rG >b@r[@X:@sG sG rG rG rG >b@>b@>b@rG rG rG rG rG rG rG rG r[@r[@X:@X:@X:@t! t! t! +~ +~ t! X:@t! t! +~ W:@;! Y:@W:@W:@W:@W:@Y:@;! +~ W:@Y:@;! ]|@]|@;! ;! ]|@]|@;! Y:@Y:@W:@W:@+~ ;! ;! ;! ]|@]|@(7 (7 (7 S:@T:@Nx@'{ ap=PT@&P&bp=cp=Ev@Q~#;{ @9 1A =M X7@PH#UJ.!W%^**D_+A'#f~@U,+V0+o=#|z@VM+:f$I<&21$21$|z@gi@|z@|z@cp+(8$+N++N+F}$C@@&B+yD+| % }#1=@pp+-w+fy+fy+fy+Tt+Tt+t&@t&@ZA+YA+h0#Pg+Nn#ed+!|+^6+-f+`-$fd+H#$gd+Es$7q$In$3[+Nr$4[+4[+7[+7[+6[+7[+4[+Nr$3[+3[+-|+-|+s0+W3+8[+8[+2/#2/#!M#2/#q:+dd+1(@Jt+_1@gr+lc#cc#:i#r:+`-$`-$QL#.I#B7#B7#A7#A7#W4#sB#}f#1f#df#@4+>k+ir+u&@t&@8X+sD+}T+}T+ur+fy+Tn+uD+/f#/f#A@@A@@B@@B@@3R+3R+3 @3 @hX@hX@^^#^^#rd+'T@hX@{-+H)@W=+sg@f)#({#dp=#o+3F.ep=Pa*ks+a%+sd#{1 n| m[#l1#Hv@pm$om$_N%GV#+t#(M !8@~8@BK +i#-)#{Y@w! ))#QT@B_#')#')#YA YA YA WA WA WA @~ @~ ;! ;! ;! ]|@]|@(7 (7 (7 /d@(7 (7 ]|@]|@(7 /d@/,@[} 2' w' Jc Gn P3 R-@_)@Rj 0P@_)@P3 Jc 2' _g .' _g k8 w' Jc Pg Pg [7 [7 jB 3q I^ D/ ~y vd ia o8 K8 (c kb%3B N&.;g su mK jG d .D).Y*+v++F'@<7+.u%N8+fp=sl=!$#Zw.u:%8] 5o bn .s@t'+Ii Fj [7 F~ !o I..w[ B6 Ok ro Pk [7 [7 ZZ Ok Ok ZZ `i@tK ro Ti V-@/d@(7 ]|@;! ;! Y:@Y:@W:@;! (7 (7 ]|@]|@/d@O9 O9 9 /d@]|@;! ;! ;! ;! W:@t! X:@t! Y:@(7 (7 ]|@]|@W:@Y:@O9 .9 (7 W:@W:@]|@]|@(7 /d@/d@/d@(7 (7 W:@W:@W:@+~ +~ t! t! X:@t! +~ W:@;! ]|@]|@]|@]|@#A@#A@VH VH _,@_,@,8 ,8 wa :7 P9 >! u/@ry@W] ;b&H%@z[ gp=hp=vz@}-@mm@ry#h<$~8$}%*zq$Gs%X_#hB@7P#=k$Rj$Ms$nw$nw$Rj$90$N)$Jn#Jn#.3%Jn#Jn#-t@<6$jh# c%9k#.l#Jn#Jn#.l#9~#yx#_f*_f*-1#oz@.[@W~+;!+2:@e3%m6+fi@xs*rn*'H%FM$=1=xj$FF*;G*Uz*oE*3A*&f*ip=3a*Ol=jp=kp=67+1c*)i.NA.gJ%& =s=+{Z%lp=lp=mp=np=0J*Q+&Q+&w{@w{@CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%tq*tq*tq*tq*tq*tq*tq*tq*,C+uq*xr*uq*Fu+Fu+uq*&s*xr*xr*xr*uq*,C+tq*)p#+X+tq*tq*Fu+,C+uq*xr*xr*&s*E#=F#=yT*4|#op=op=4|#4|#op=4|#F#=yT*op=y9.4|#z9.{h&{h&{h&{h&{h&{h&{h&{h&~h&~h&~h&~h&~h&~h&~h&~h&-.%-.%-.%-.%-.%-.%-.%-.%M]*#d+#d+M]*M]*#d+#d+;n.J> US+US+US+US+US+US+US+d #US+OP*OP*US+';$';$23+oh.oh.oh.oh.oh.oh.oh.oh.G|@G|@Kh+7P.7P.7P.7P.Kh+7P.7P.7P.G|@$(+$(+Kh+y4&G|@y4&y4&G|@G|@y4&y4&G|@Kh+7P.oh.y4&y4&y4&oh.oh.Kh+Kh+7P.oh.oh.7P.Kh+Kh+Ea+xc+$(+xc+5A.]! xc+T_+$(+T_+G|@Kh+Kh+Kh+G|@G|@Kh+7P.7P.7P.7P.Kh+G|@T_+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+1m.1m.1m.1m.1m.8Y+8Y+8Y+8Y+8Y+8Y+8Y+8Y+8Y+8Y+7P.y4&US+d #d #US+OP*23+US+u]#u]#u]#u]#u]#u]#u]#u]#G|@G|@Kh+7P.7P.Kh+G|@G|@G|@G|@G|@G|@G|@G|@", "is@is@is@is@is@is@is@Vh.is@x5.O7.O7.O7.O7.x5.8v.8v.8v.8v.8v.8v.8v.8v.9, 9, 9, VW.VW.8v.8v.8v.xX%xX%xX%xX%xX%xX%xX%xX%_r+O7.x5.O7.xX%_r+xX%x5. F> F> N1 VH (7 ]|@;! ;! Y:@W:@W:@rG rG sG tG -! -! -E -E -! -! -E -E }g }g *E *E }g *E *E =E i0$i0$i0$i0$*E *E *E *E *E *E *E *E }g }g -! sG >b@t! +~ W:@sG sG rG rG rG >b@>b@>b@rG rG rG rG rG rG rG rG t! t! t! t! t! t! t! t! W:@W:@+~ +~ +~ +~ +~ +~ Y:@W:@W:@W:@W:@W:@W:@Y:@W:@Y:@;! ]|@(7 (7 ]|@]|@]|@]|@;! ;! Y:@W:@+~ +~ ;! ;! ]|@]|@(7 (7 (7 /d@T:@Nx@tR@Q^#.W@ap= W@sp=d>#-f#u{ sR#Qw#G> xo zr$GT#rO.WG%WD.lH@ue#1_+VH#u4#Ie@|z@VM+%:#*/$tp=6($|z@gi@|z@|z@cp+cp+<`#+N+F}$1h#bX+&B+1=@| %1=@pp+@k+fy+vr+vr+}]+}]+t&@s=@YA+dy+Pg+Pg+Nn#Nn#.4+!|+-f+`-$fd+H#$gd+Es$7q$In$Nr$Nr$7[+7[+7[+7[+6[+7[+;t$-|+-|+-|+2[+2[+#2+#2+)_+C:+2/#2/#!M#!M#2/#dd+jp+='@GZ@hr+Xl+W1#T@>T@X.@X.@__+I:+>2+3]+SK+*(@sg@Q1+}C#S3*se$As*2a&jB@`>$Wh VE :} +' $A@]J n@xK pm$_0#]Q#+z Rw UT@Gv@up=c>#9u#h@#w! QT@kI@1f 1f 1f YA WA WA WA @~ @~ ^|@^|@;! ;! ;! ]|@]|@(7 (7 (7 (7 (7 (7 (7 (7 /d@/d@(,@S-@_g k8 w' Gn P3 R-@_)@0P@_)@Gn 2' _g _g _g _g .' .' yy >J <7 Pg $9 T[ 9Y V: J0 F( ,[ K0 n.@T9 I.iO@CR$f .(r tC kt a'.O;.ya.:B Py O&.ps.FD #g.vp=!*#wp=u{.9Q Hw RY@OD+`G@Sk@t'+Dj [7 [7 ~o ={ &@.w[ )8 ZZ ro Pk $9 >[ Ok ro ro Ok `i@`i@ZZ ;[ Yq /d@/d@(7 ]|@;! Y:@Y:@+~ Y:@]|@;! Y:@Y:@]|@/d@]|@;! Y:@+~ t! t! t! t! +~ X:@r[@t! Y:@(7 /d@(7 ;! +~ W:@O9 .9 (7 W:@+~ ;! ]|@(7 /d@ 9 9 9 9 +~ +~ t! t! X:@r[@>b@>b@r[@X:@t! W:@Y:@;! ]|@(7 l.#l.#_,@_,@_,@_,@,8 ,8 '8 :7 P9 >! u/@xb '! D`+C*@z[ xp=~_&5=$42 mv%so@Qw&|=$yp=zq$zp=d=@.B$7P#=k$09$Rj$Ms$Rj$09$N)$cN#.l#.l#.l#.l#-t@<6$<6$jh# c%9k#.l#.l#.l#-t@yx#yx#_f*_f*-1#oz@.[@W~+;!+u.*i<#ji@nK@:c*;d*FM$nK$2|=Ap=GF*mz*oE*Vz*sA*d;=II.Bp=Cp=o5 $z*Dp=1+ C! B9.z4$6l%{Z%tX%lp=Wg#Ep=Zd#0J*Q+&w{@w{@CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%tq*tq*tq*tq*tq*tq*tq*tq*uq*uq*uq*uq*,C+,C+uq*xr*uq*,C+,C+Fu+tq*$x+)p#)p#tq*tq*Fu+Fu+,C+,C+uq*uq*E#=F#=F#=yT*4|#4|#4|#4|#op=4|#F#=yT*op=y9.4|#uq*%z&{h&{h&{h&{h&{h&{h&{h&~h&~h&~h&~h&~h&~h&~h&~h&<:*<:*<:*<:*<:*<:*<:*<:*M]*#d+#d+M]*M]*#d+#d+;n.J> US+US+US+US+US+US+US+d #US+OP*OP*US+';$US+23+G|@G|@G|@G|@G|@G|@G|@G|@$(+T_+Kh+7P.7P.Kh+G|@$(+Kh+7P.oh.7P.G|@Kh+y4&w5&Kh+y4&y4&Kh+Kh+y4&y4&Kh+G|@Kh+y4&]@+]@+]@+y4&y4&7P.7P.oh.oh.oh.oh.7P.7P.G|@Kh+7P.G|@$(+$(+G|@oh.G|@G|@G|@Kh+Kh+Kh+Kh+G|@T_+G|@7P.oh.oh.7P.G|@$(+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+dl.Ai.Ai.1m.8Y+8Y+8`#8`#8Y+8Y+8Y+8Y+1m.1m.1m.Kh+OP*US+d #';$23+OP*23+';$';$';$';$';$';$';$';$';$Kh+Kh+Kh+7P.7P.Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@", "is@is@is@is@is@is@is@Vh.is@x5.O7.O7.O7.O7.x5.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+9, 9, VW.VW.8v.8v.Hu+Hu+xX%xX%xX%xX%xX%xX%xX%xX%_r+O7.is@x5._r+N7.xX%x5.v4.v4.v4.#k.#k.$_= Ks*J=$Fp=~*$u9+Y9 }<@K%+>.@;q%az%Gp=H3&Hp=&'&'Q.+q%Ke=Ip=}0 z=$lX%b@>b@>b@rG rG rG rG rG rG rG rG t! t! t! t! t! t! t! t! W:@W:@W:@W:@W:@+~ +~ +~ W:@Y:@Y:@Y:@Y:@Y:@Y:@W:@Y:@;! ]|@(7 /d@/d@(7 (7 (7 ]|@]|@;! ;! Y:@Y:@Y:@(7 (7 (7 /d@/d@ 9 9 9 Nx@2C s{ L~ bp=bp=sp=Mp=NN#u{ ]m#ir#Zp F> ;> Q+#eq$42 g+%/B&P:$OD@@o+VH#V0+sg@|z@VM+V4$;n=tp=tp=sg@o=#|z@|z@cp+cp+<`#+N+F}$1h#bX+*B+3%$x]$1=@pp+@k+fy+vr+vr+}]+}]+t&@s=@Xg+Xg+6e@6e@T@>T@X.@X.@nX+y9#f[+'T@ib#cp+,7$Q1+_:$p1@VD*Np=Q$+B(@b9 @<@-{ >! T:@;! ]J xK ]Q#Iz c3& $o$A#$:2 }E$7| ,f 6l /h w%.79.7'. H%^h.q:.Ah%Qp=vp=Rp=^b@oe$Q;.e{ w9 RM.E( B/ }t [7 B6 Bm Q9 I..>[ ro ZZ Ok Pk $9 >[ B6 Pk Pk ro `i@>z fp Ld V-@/d@(7 ]|@;! Y:@Y:@W:@X:@+~ W:@W:@t! t! W:@;! W:@+~ X:@r[@>b@rG rG >b@+~ X:@r[@t! Y:@(7 /d@(7 ;! t! +~ /d@O9 ;! +~ +~ Y:@;! ]|@(7 /d@/d@/d@/d@+~ +~ t! X:@r[@>b@rG sG rG >b@r[@X:@+~ Y:@]|@]|@(t |u y, fw _,@VH V-@V-@'8 wa :7 P9 u/@xb '! D`+Sp=8@@Tp=Up=#3 42 so@xo=73@Pn$AM#*7${M#f&@/{#7F$=k$09$09$09$90$90$N)$cN#.l#.l#.l#-t@-t@-t@-t@-t@ c% c%<6$<6$<6$jh#& +|V#_f*_f*-1#oz@.[@W~+;!+u.*{b##N@E+@Ou@tw*=q%|q%%F*Ap=Pk$Uz*Vp=Vz*sA*d;=Qg=Wp=Gj=<>=Xp=FY*0% z$.0, t=+6l%tX%tX%XF%VF%Yp=Zp=}d.w{@w{@CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%tq*tq*tq*tq*tq*tq*tq*tq*uq*,C+,C+uq*uq*uq*uq*,C+tq*tq*tq*tq*tq*tq*tq*tq*uq*uq*,C+,C+Fu+Fu+tq*tq*F#=F#=F#=F#=F#=yT*4|#4|#op=4|#F#=yT*op=y9.4|#uq*%z&{h&{h&{h&{h&{h&{h&{h&~h&~h&~h&~h&~h&~h&~h&~h&TO&TO&TO&TO&TO&TO&TO&TO&M]*#d+#d+M]*M]*#d+#d+;n.J> US+US+US+US+US+US+US+';$23+OP*23+';$d #US+OP*G|@G|@G|@G|@G|@G|@G|@G|@$(+T_+Kh+7P.7P.G|@T_+xc+G|@7P.oh.oh.7P.7P.iS.w5&Kh+iS.iS.Kh+Kh+iS.iS.Kh+G|@Kh+y4&]@+]@+]@+y4&y4&oh.oh.7P.7P.7P.7P.oh.oh.7P.oh.y4&7P.G|@G|@7P.iS.oh.7P.7P.7P.7P.7P.7P.7P.T_+G|@7P.oh.y4&oh.Kh+G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+dl.Ai.Ai.1m.8Y+8Y+8`#8`#8`#8Y+8Y+1m.1m.Ai.Ai.T_+23+pK+S>+pK+lt*lt*pK+x}*FG*FG*FG*FG*FG*FG*FG*23+7P.Kh+Kh+Kh+Kh+Kh+Kh+7P.G|@G|@G|@G|@G|@G|@", "is@is@is@is@is@is@is@Vh.is@x5.O7.O7.O7.O7.x5.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+VW.VW.VW.8v.8v.Hu+Hu+Hu+xX%xX%xX%xX%xX%xX%xX%xX%N7.O7.Vh.x5._r+M7.xX%is@#k.v4.v4.v4.#k.F6.8'%[{.#k.#k.$ad.SB*KI#`p=SM.O%=P0 p=K%+>.@w!&Y,& q=92=N5*Nb$HZ.}Z&Xm#.q=+q=(a Vi wz# _,@]|@;! ;! Y:@W:@+~ +~ rG rG sG tG -! -E -E }g -E -E }g }g *E *E *E =E =E *E *E *E =E i0$1C%GD%=E =E =E =E =E =E =E =E }g }g -! sG >b@r[@t! t! sG sG rG rG rG >b@>b@>b@r[@r[@r[@r[@r[@r[@r[@r[@t! t! t! X:@X:@X:@r[@r[@t! +~ W:@Y:@Y:@Y:@W:@+~ Y:@Y:@;! ]|@]|@;! Y:@Y:@;! ]|@(7 /d@ 9 /d@/d@/d@(7 (7 (7 (7 (7 (7 (7 (7 9 9 9 O9 O9 +L@+L@+L@k] P^#>)#Ev@){ )Y@$q=%q=Op=OT@jj#,d@Z=#]1 /V#VB$K2$(5@}c@T8%AG.:B@.{@VH#z)+r|$K4#V4$V4$;n=&q=*q=sg@o=#|z@|z@cp+cp+<`#<`#j0+0e#*B+xI+x]$W/$1=@pp+-w+fy+fy+fy+Tt+Tt+t&@t&@Sl+Sl+@4+6e@q=8u#h@#!)#YA (|@_|@(|@/|@YA YA YA WA WA WA @~ @~ ;! ;! ;! ]|@]|@(7 (7 (7 Y:@;! ]|@/d@ 9 9 9 (,@S-@.' _g k8 w' Jc Gn Gn k8 _g .' wo .' k8 w' <7 Cn Cn Cn Cn B6 Pk V: 3q |t _( av )y `u `u .w ,q='q=)q=!q=~q=q,+dC.Jp@tn 94@^h <7+n3%:`+xT ,6@Y[&{q=]q=UI+{6@)6@)4@4r@Ab +;@4u G5 Fj $9 )8 #9 I0 j< [7 Ok ZZ Ok B6 [7 [7 Pk [7 [7 )8 tK >z >z jl Sr (7 ]|@;! Y:@W:@W:@+~ r[@t! +~ +~ X:@r[@t! +~ +~ t! r[@>b@rG rG rG rG W:@t! X:@t! Y:@(7 (7 ]|@Y:@X:@r[@Y:@]|@+~ X:@t! W:@W:@Y:@;! ]|@;! ;! Y:@+~ +~ t! X:@>b@rG sG sG rG rG rG >b@X:@+~ Y:@;! /t /t _t fw _,@VH V-@Yq @9 wa :7 P9 Mc Bn@|^#Z{ ^q=Y} yt&6=$/R@QP.K=&9I# x@r9@AO#kq%J_%C)+/{#z4#90$90$90$N)$N)$cN#cN#cN#Jn#Jn#.l#-t@-t@-t@.l#Jn#9k# c%<6$jh#>[#n:=|V#dx@_f*_f*-1#oz@.[@W~+;!+u.*N%#xs*mV$7F*]}*|q%$F*0F**p=# &Uz*Vp=3A*D =&D$HM$/q=b:&bJ%g3@G}@9# y$.@d+~4%_W%tX%np=(q=FE%Yp=WF%T.=w{@CI#CI#S`%S`%S`%sX%S`%S`%S`%S`%S`%S`%S`%S`%tq*tq*tq*tq*tq*tq*tq*tq*,C+Fu+tq*,C+uq*uq*Fu+$x+tq*tq*$x+$x+$x+Fu+,C+,C+&s*xr*xr*uq*,C+Fu+tq*tq*F#=E#=E#=E#=E#=F#=4|#4|#op=4|#F#=yT*op=y9.4|#yT*%z&{h&{h&{h&{h&{h&{h&{h&~h&~h&~h&~h&~h&~h&~h&~h&`E&`E&`E&`E&`E&`E&`E&`E&M]*#d+#d+M]*M]*#d+#d+;n.J> US+US+US+US+US+US+US+US+23+OP*US+d #d #US+x{+oh.oh.oh.oh.oh.oh.oh.oh.G|@G|@Kh+Kh+Kh+G|@T_+$(+T_+Kh+oh.oh.7P.7P.y4&]@+Kh+iS.iS.Kh+Kh+iS.iS.Kh+Kh+7P.oh.y4&y4&y4&oh.oh.oh.7P.Kh+Kh+Kh+Kh+7P.oh.G|@Kh+7P.Kh+T_+T_+Kh+oh.iS.y4&oh.7P.Kh+7P.7P.oh.Kh+Kh+7P.oh.y4&y4&oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.1m.1m.1m.1m.1m.8Y+8Y+8Y+8`#8Y+8Y+1m.Ai.dl.dl.$(+23+S>+S>+pK+lt*lt*pK+x}*lt*lt*lt*lt*lt*lt*lt*lt*7P.Kh+G|@G|@G|@G|@Kh+7P.G|@G|@G|@G|@G|@G|@", "is@is@is@is@is@is@is@Vh.is@x5.O7.O7.O7.O7.x5.VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.8v.8v.Hu+Hu+Hu+Hu+xX%xX%xX%xX%xX%xX%xX%xX%M7.O7.Vh.is@N7.M7.xX%Vh.8'%F6.$Y;=%^ EE#_q=U$++.=NI#3,%7p=TW.zA%t1%js%RL&N5*y5&ud@1W%z +:q=b@>b@rG sG tG -! -E -E }g }g }g *E *E *E =E =E =E =E }g }g }g *E i0$1C%*E *E *E *E *E *E *E *E -E -E -! tG sG rG rG >b@sG sG rG rG rG >b@>b@>b@X:@X:@X:@X:@X:@X:@X:@X:@t! X:@X:@X:@r[@>b@>b@>b@X:@t! W:@Y:@;! ;! Y:@Y:@;! ]|@(7 /d@/d@(7 ]|@;! ]|@(7 /d@ 9 9 9 9 /d@]|@(7 (7 /d@ 9 O9 O9 +L@+L@+L@+L@.9 .9 @A@@A@@A@~{ b>#&0@c>#y`#$q=%q=4u@=t&hj#jj#5`%VE@(1 {T#p$#Y,@PH#PP.w@+M4&]R@@x@ZJ#J1#J4#wW#K3$V4$*/$1q=2q=sg@o=#sg@sg@|z@cp+<`#<`#0[$F}$xI+C@@W/$70#x]$1=@up+#k+.B+.B+I6@I6@v=@`+#gi+gi+6e@6e@[ I0 Sg I0 [7 )8 ZZ ZZ ro B6 B6 B6 )8 Pk Pk )8 tK fp >z t/@,8 ;! ;! Y:@W:@+~ t! t! X:@+~ W:@+~ X:@r[@t! +~ Y:@W:@t! X:@r[@>b@r[@r[@Y:@+~ X:@t! Y:@]|@]|@;! ;! >b@sG r[@t! r[@r[@+~ t! +~ +~ W:@+~ +~ t! X:@W:@W:@+~ X:@r[@rG sG sG >b@rG rG rG >b@X:@+~ Y:@(t |u y, fw fw _,@,8 Sr @9 '8 :7 :7 Mc Bn@|^#Z{ ,;@Tp=T-&c!+>1#0#&K=&>{#]5@td+xD%I5$U=$2z@/{#z4#90$90$N)$cN#cN#cN#cN#cN#.3%Jn#.l#-t@.l#Jn#.3%cN#j[+6v#-t@<6$jh#>[#& +& +_f*_f*-1#oz@.[@W~+;!+u.*{b##N@;9*Ou@tw*=q%kE*0F**p=# &oK$!5*3A*eq=&D$HM$fq=gq=hq=u<&GO..d+iq=z4$P4%_W%tX%Zd#jq=jq=kq=lq=!Q*CI#CI#S`%S`%S`%sX%sX%S`%S`%S`%S`%S`%S`%S`%S`%tq*tq*tq*tq*tq*tq*tq*tq*tq*$x+)p#tq*uq*uq*tq*1p%uq*,C+Fu+tq*$x+tq*Fu+,C+xr*xr*xr*uq*uq*uq*uq*uq*F#=mq=Q4%Q4%Q4%fm#nq=PA.83#PA.fm#nq=83#oq=PA.yT*+y&>S%>S%>S%>S%>S%>S%>S%~h&~h&~h&~h&~h&~h&~h&~h&TO&TO&TO&TO&TO&TO&TO&TO&M]*#d+#d+M]*M]*#d+#d+;n.J> US+US+US+US+US+US+US+US+23+23+US+d #d #23+x{+oh.oh.oh.oh.oh.oh.oh.oh.oh.7P.Kh+G|@G|@G|@G|@G|@T_+Kh+oh.oh.Kh+Kh+7P.oh.7P.iS.iS.7P.7P.iS.iS.7P.y4&oh.7P.Kh+Kh+Kh+7P.7P.7P.Kh+G|@T_+T_+G|@Kh+7P.T_+Kh+Kh+G|@$(+$(+G|@7P.iS.oh.7P.G|@G|@G|@Kh+7P.y4&oh.oh.oh.oh.iS.]@+]@+y4&y4&y4&y4&y4&y4&y4&y4&8Y+8Y+8Y+1m.1m.1m.1m.1m.8`#8Y+8Y+1m.Ai.dl.q9+$(+US+S>+S>+FG*b=+b=+pK+9&+pK+pK+pK+pK+pK+pK+pK+pK+Kh+G|@T_+$(+$(+T_+G|@Kh+G|@G|@G|@G|@G|@G|@", "is@is@is@is@is@is@is@Vh.is@x5.O7.O7.O7.O7.x5.G6.G6.G6.G6.G6.G6.G6.G6.VW.VW.8v.8v.Hu+Hu+Hu+PI.xX%xX%xX%xX%xX%xX%xX%xX%M7.O7.dD.is@N7.%0+xX%Vh._;=Tw@8'%z&9<+1W%MG.sc+T1 <1 Xj -K.(G #p b@>b@>b@t! t! t! t! t! t! t! t! X:@X:@r[@r[@>b@rG rG rG r[@X:@+~ ;! ]|@]|@;! ;! ;! (7 /d@ 9 9 /d@(7 ;! ]|@(7 /d@ 9 O9 O9 9 9 ]|@VH /d@ 9 O9 .9 @A@@A@.9 .9 @A@@A@RT@RT@RT@A&#b>#77#O;#@] _r@CQ$W &Op=hj#MN#0+&Rm@Z=#36 {T#o$#Mu vc+(5@n6#P/+C2&;z@U`$'p$2O#J4#$:#V4$%:#2q=_p=sg@o=#sg@sg@|z@|z@Mz$<`#W[#j0+0e#4$@S[=8c#W/$1=@#B+up+up+up+-9@e0#]/+v=@{/+YA+]|+Pg+@4+ed+!|+!|+-f+`-$fd+H#$H#$Es$7q$In$X3+)6+'|+}T#A0+B0+B0+B0+C0+{6+T@%]6+g8+_C#-|+2[+uq=.*%)_+)_+#n%*|+[[+Kg+2}@gr++}#&3@s:+Mg+YN#;f+`-$`-$QL#.I#>6+B7#A7#A7#)6+'6+My# ;$-f+df#Dy#Ay#sy*sy*pq#f0#oe#oe#p;@VH@mp+np+| %| %T.@T.@yD+=B+ky+zD+9G+3 @f^@+:$ly+-4+8#%).$EO@j)$L:+u4#GM@sc@4I*ND*8I.>D&jR.r| hP@Sg n)$*W@aP@|C EN#^|@_|@}A #W@9C%FN vq=8=.~O&@t&5T$8q#QT@WA :|@<|@:|@^|@YA 1f 1f 1f a~ a~ YA YA YA ;! ;! ;! ]|@]|@(7 (7 (7 W:@Y:@]|@/d@O9 O9 9 (,@T} T} T} [} [} [} [} [} Sj Sj X-@X-@X-@X-@X-@Sj l .-{ u/@Bm Bm Pk 1/ 3q gw F( G( 4u yi+yi+eG+u> wq=xq=z3 yq=zq=3%%nC$.1 (r u-.zv ]4@|2@:4@Kt Kt v{.2m=ql=^4@pt Aq=$;@RM.td ZW |t ;J w[ 89 I0 Q9 Bm Jf Tj Tj Jf h< ;[ Jf il ;[ h< ;[ Tj If If Ld ZA Y:@Y:@W:@+~ t! X:@X:@t! W:@Y:@W:@t! X:@+~ W:@]|@;! W:@+~ t! t! t! t! ;! W:@t! t! Y:@;! ;! Y:@;! >b@-! sG >b@rG >b@+~ t! t! t! t! X:@r[@>b@rG Y:@W:@+~ t! r[@>b@sG sG >b@rG rG sG rG r[@t! W:@]|@fw +9 ZA fw y, y, va V-@Yq U-@:7 >! Bn@|^#Z{ ,;@R:$N9#ud$o~$0L#t}@r1@td+I[#C~%Z_#j<@[x@7G#1h$,L$N)$cN#.3%.3%.3%.3%cN#cN#.3%Jn#.l#.l#Jn#cN#N)$cN#T@+f'$+l#9~#yx#4_#4_#_f*_f*-1#oz@.[@W~+;!+u.*{'#;c@!-=a;=Bq=o#$TG%N]=Cq=*F*Vp==F*^D*Dq=Eq=Fq=1}%+J&Gq=na@T. MN.O0.+n+6l%NP*{Z%Hq=_%=ny.Iq=Jq=!Q*CI#CI#S`%S`%sX%sX%sX%S`%S`%S`%S`%S`%S`%S`%S`%tq*tq*tq*tq*tq*tq*tq*tq*$x+)p#+X+$x+,C+,C+$x+(W%wr*&s*uq*tq*$x+$x+tq*tq*,C+,C+uq*xr*xr*&s*=^@=^@F#=E#=Q4%`#=Q4%E#=nq=op=83#4|#fm#yT*83#y9.PA.Kq=+y&>S%>S%>S%>S%>S%>S%>S%~h&~h&~h&~h&~h&~h&~h&~h&#d+#d+#d+#d+#d+#d+#d+#d+M]*#d+#d+M]*M]*#d+#d+&, J> pK+pK+pK+pK+US+US+US+23+23+23+';$u]#T_+7P.iS.G|@G|@G|@G|@G|@G|@G|@G|@iS.y4&Kh+G|@T_+G|@Kh+7P.T_+Kh+oh.oh.Kh+G|@G|@7P.7P.iS.iS.7P.7P.iS.iS.7P.iS.y4&Kh+T_+T_+T_+Kh+Kh+7P.Kh+T_+$(+$(+T_+Kh+7P.Kh+7P.oh.Kh+T_+T_+Kh+y4&y4&7P.G|@T_+$(+$(+T_+G|@iS.y4&oh.oh.oh.iS.w5&u=.iS.iS.iS.iS.iS.iS.iS.iS.8`#8`#8Y+8Y+1m.Ai.Ai.dl.8`#8Y+8Y+1m.dl.q9+q9+xc+US+S>+';$FG*x{+b=+US+9&+d #x}*d #x}*d #x}*d #d #G|@T_+$(+xc+xc+$(+T_+G|@G|@G|@G|@G|@G|@G|@", "O7.O7.O7.xX%xX%_r+_r+is@is@x5.x5.x5.O7.O7.O7.xX%xX%O7.O7.x5.is@is@Vh.is@is@is@x5.x5.O7.O7.O7._r+_r+xX%xX%O7.O7.x5.x5._r+_r+xX%xX%O7.O7.x5.x5.[{.F6.&~Q.5F.iT.`O&vf@c_#JR@Vv RU.y[ h] ky&ky&;)#hw@}g=gH Rq=_u Fz Sq=8;*Tq=Uq=Vq=[A%R&&Cj@u! mt@1r@1r@W~#yK [|@'8@>8@c.#q<$d.##Q$F'$vR@}g *E *E -E -! -E *E *E *E *E }g -E -E -! -! Nt%Nt%u1$&E &E Kv Kv Eu Kv Kv Eu Eu vR@vR@vR@$4@sG sG rG rG rG >b@>b@>b@>b@>b@>b@>b@r[@r[@r[@r[@rG >b@>b@>b@r[@r[@X:@X:@>b@r[@X:@t! W:@;! ]|@]|@]|@;! Y:@Y:@;! ]|@/d@O9 (7 /d@ 9 O9 O9 9 /d@(7 /,@o| 7, n| ,p ,p ,p ,p bP@bP@w! w! w! w! +W@Q~#;{ X] 3C m] p{ v{ QF#QF#C&#Z=#Z=#Y=#+<#N9 l[#(e =M y2$'<$%++h~@DG.|!+6)#7Z.|_+#*%,7$sg@sg@b)+b)+B2$2O#xW#_/#S;+wW#R_@*(@.^$j0+j0+F}$@^$`[#`[#x]$iy+xD+wD+rr+Tn+|]+/|+Zg+]_+-2+#4+cd+E:+@4+if#i0#ed+ @#Nn#Nn#Nn#-f+.I#.I#/>$$`${6+:O#%:%%:%%:%T:%E0+T:%&}#q<%2G#r<%g8+T@%T@%B0+7[+B:+'&%'&%;_+I#$9q$6+'6+)E#Ry#*w#%w#-l#:i#ic#$o%`+#]/+60#`n+-:#o;@ur+vr+-w+wD+A@@3T+h~+.N+.N+3]+b@X:@t! X:@r[@X:@W:@;! (|@_|@:|@[|@<|@$4@$4@<|@(|@[|@<|@/|@a~ 1f ^|@<|@(|@/|@^|@(|@[|@$4@<|@[|@$4@vR@Eu vR@$4@[|@_|@3|@>P BR@mQ n.>n.>n.!D+!D+`b&~h&7' H8=lC&p)@p)@q(#9&+9&+d #';$Kh+7P.oh.8`#8Y+1m.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+y4&7P.Kh+7P.iS.]@+iS.oh.>].HV.OP*d #u]#d #23+OP*OP*OP*OP*OP*OP*OP*OP*OP*T_+G|@Kh+7P.oh.oh.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.G|@G|@G|@G|@G|@G|@G|@G|@oh.oh.oh.oh.oh.oh.oh.oh.OP*OP*23+23+US+';$';$d #[f.[f.[f.x{+OP*OP*23+23+oh.7P.Kh+G|@G|@Kh+7P.oh.G|@Kh+7P.7P.7P.G|@$(+xc+T_+d #T_+d #T_+d #T_+d #T_+';$G|@';$G|@';$G|@G|@$(+Kh+y4&y4&7P.G|@G|@Kh+T_+T_+T_+T_+G|@Kh+", "x5.x5.O7.O7.O7.xX%xX%is@is@x5.x5.x5.O7.O7.O7.O7.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.xX%xX%xX%_r+_r+xX%xX%O7.O7.x5.x5._r+_r+xX%xX%O7.O7.x5.x5.[{.F6.#k.r=,r=,(#|m%'r=)r=S[@+a$!r=~r=6!+V`$Zc%HB%U-+P:$[-@F9&{r=]r=uf@C$$F*$~<@U;.A9#^r=^r=Vw&oI#tR#=!%;C+Xp /r=<;#(r=_r=:r=8@>8@~ $V.$S&&WN%pg&QO$Eu *E =E *E -E -E }g =E =E =E *E *E }g }g -E -E &E &E &E &E Kv Kv Kv Kv Kv Kv Eu Eu vR@vR@vR@vR@sG sG sG rG rG >b@>b@>b@>b@>b@>b@>b@r[@r[@r[@r[@>b@>b@>b@>b@r[@r[@X:@X:@X:@t! t! W:@Y:@;! ]|@]|@]|@]|@;! Y:@;! ]|@/d@ 9 /d@ 9 O9 +L@+L@O9 9 (,@+' ]1 (1 *! :} :} :} :} bP@bP@w! w! w! w! 8q#Dv@3C Bn@VE L1 q[ /} YD#YD#(o @|#uy kx F0 M9 qI#5F |+hD$sv$sv$H2$f9$e8$ve@kw$kw$kw$kw$#w#W+$Es$Es$Es$Es$d8+d8+>6+'6+5V#Vy#xB#%w#;f+h0#By#s.$]/+I6@e0#XN#o;@VH@ur+fy+-w+wD+A@@3T+h~+.N+ib#ib#{-+x)+cB@I@@T`$_6$P&$Z1*|r=DY&05*{t#iq#KD+|Y.GZ$1r=ob#Z^#ER@lI#h*$IT [E@4|@(|@:|@:|@(|@^|@/|@_|@Eu _|@5`%RF+2r=iC&w! WA WA WA @~ @~ WA a~ a~ 1f QT@B_#')#1f a~ a~ a~ a~ ]|@/d@ 9 /d@;! Y:@;! (7 9 /d@(7 ]|@]|@]|@/d@ 9 +L@+L@+L@.9 .9 .9 @A@@A@uR@bP@bP@bP@RT@RT@@A@n| 26 P1 ]1 ]1 Q1 *! v[ [} ;[ h< Ti i< ~o F~ _1 m{ 1: Q>+3U$^b zy g{@y9 ;z.~#.K8 <<@9`@{8 {8 hk J8#3r=Pt Pt {p q.@a} Fv G( _( E( 3u 2u }/ 3r 3r )8 R} O9 9 9 9 9 9 9 +L@/d@]|@]|@(7 /d@(7 ]|@;! Y:@W:@Y:@]|@;! W:@t! +~ Y:@]|@;! +~ X:@t! +~ W:@+~ X:@X:@+~ +~ X:@r[@X:@t! t! X:@>b@rG r[@+~ _|@:|@[|@<|@$4@vR@vR@$4@_|@[|@[|@^|@kI@B_#a~ /|@(|@/|@^|@(|@[|@$4@<|@[|@<|@$4@$4@$4@$4@[|@_|@2|@ZT@ZT@>S YT@ <@Y:@5h $A@l.#l.#]1 #, i< Ti &@.U3*D4 $(&Q^%.K.;T.aT+5V+Z]$km$!U#y4#@d$L1#DA#zA#zA#$*$Bb#'2+se#se#'2+Bb#$*$,p$qw$&6$&6$Bb#Bb#'2+Z.+>M$cs%*>$[$&ds#/v@t$+ID+ID+ID+IN*oz@s$+['+b{$6]@j;=t)#3c$fq*4r=5r=<4*6r=uK%7r=8r=9r=pk#0r=pm=>S+7[%ar=br=cr=~4% R.93#bp.n3.v5.b,+b,+{4%e6#FU%93#`#=sX%&r=&r=sX%w{@b,+bQ#Q+&Q+&w{@w{@CI#S`%S`%sX%S`%S`%sX%sX%sX%&r=&r=&r=*r=&r=S`%CI#CI#S`%&r=*r=dr=l]#yE#yE#iM#l]#=Z+l]#l]#l]#l]#l]#&b=&b=&b=&b=xr*xr*xr*xr*xr*xr*xr*xr*uq*uq*uq*uq*uq*,C+,C+_|*.y&#d+TO&TO&TO&#d+<:*-.%#d+#d+#d+TO&TO&TO&TO&TO&`b&`b&`b&`b&`b&`b&`b&`b&>n.>n.!D+!D+`b&`b&`b&nh.WV#e0=B,=A,=p)@ (&x}*S>+[f.23+T_+xc+jy.Ai.RJ*rz.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+y4&7P.Kh+7P.iS.]@+iS.oh.HV.[f.OP*';$';$';$23+OP*23+23+23+23+23+23+23+23+$(+T_+G|@Kh+7P.7P.7P.Kh+7P.7P.7P.7P.7P.7P.7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.oh.oh.oh.oh.oh.oh.oh.23+23+23+US+US+US+US+US+x{+x{+x{+OP*OP*23+23+US+7P.Kh+G|@T_+T_+G|@Kh+7P.T_+G|@Kh+Kh+Kh+T_+$(+xc+T_+T_+T_+T_+T_+T_+T_+T_+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+T_+Kh+y4&y4&7P.Kh+Kh+7P.T_+G|@G|@Kh+7P.7P.", "is@is@is@x5.x5.O7.O7.is@is@x5.x5.x5.O7.O7.O7.x5.x5.x5.x5.x5.O7.O7.O7.O7.O7.O7.xX%xX%_r+_r+_r+_r+_r+xX%xX%O7.O7.x5.x5.xX%xX%xX%xX%O7.O7.O7.O7.F6.b@>b@rG rG >b@>b@r[@r[@X:@X:@>b@>b@>b@r[@r[@X:@X:@X:@W:@W:@Y:@Y:@;! ]|@]|@]|@(7 ]|@]|@;! ]|@(7 /d@ 9 9 O9 +L@+L@+L@+L@O9 /,@7, (1 *! d2 <} <} <} <} bP@bP@w! w! w! w! An#W=#m] VE L1 1^#XD#YD#~1 $, @|#z, `p `p d'*d'*9J@#A@En k9$Qp 2O.)V.6I.)U+9]+K~$te#|_+#*%o=#o=#|z@sg@,7$,7$sg@sg@K4#K4#*(@I,@][*<<*1h#1h#8($80#80#80#&B+T.@}P+}P+Tn+Tn+/|+/f+[]+si+Kb+#4+@4+6e@V4#if#Mg+Mg+B)$B)$B)$B)$y0+y0+`3+`3+qD$qD$pD$pD$pD$BC$OB$(C#i~%PR#&}#*}#X/%U%$#;$^>$>|+6[+5[+5[+Z%$f8$Pj$2t#@}#kw$W+$SR#SR#SR#Es$Es$&2+d8+d8+>6+B7#C7#}T#UY#xB#Ly#;f+Pg+ZA+|&@p=$I6@Yn+^/+vr+fy+ur+.B+sr+wD+A@@3T+h~+.N+ib#ib#ib#hX@H@@I@@T`$Dy$8%$Z1*rr=DY&|I&m`%iq#1/+{{+sr=IQ& ^+Y^#Lf -C+1C x! lI@/|@:|@<|@<|@_|@^|@@~ ^|@[|@))#Rm@|B&8'%tr=^|@))#(|@^|@a~ ')#QT@!)#!)#))#w! +W@!)#')#1f a~ a~ YA ;! ]|@(7 ]|@Y:@+~ Y:@;! /d@(7 (7 ]|@]|@(7 /d@ 9 .9 @A@@A@@A@RT@RT@bP@bP@bP@bP@RT@RT@@A@@A@@A@36 26 P1 o| o| ]1 ]1 T} .r il Jf ;[ h< 89 Q9 ~o M^ ae@I`+^b Aa#y-.(T.zy y9 K8 ef 6,@ef {8 {8 5O$J8#F6 x2$q.@3o Fi g3 _( E( C/ C/ C/ |t 9Y G5 3r Ok V-@/d@/d@/d@ 9 9 9 9 9 (7 Y:@Y:@;! ]|@;! Y:@Y:@W:@+~ Y:@]|@(7 ;! +~ +~ Y:@]|@]|@W:@+~ +~ W:@Y:@+~ X:@X:@+~ +~ X:@>b@t! +~ +~ X:@rG sG rG r[@_|@:|@<|@$4@vR@vR@vR@vR@_|@:|@_|@@~ ')#!)#')#YA _|@/|@^|@(|@[|@<|@<|@:|@:|@[|@[|@<|@<|@[|@:|@1|@>P HT BR@M$cs%|0$Sv#ds#/v@3_#ID+ID+IN*IN*oz@g *+[@b{$6]@ur=#m#vr=wr=xr=Zq=<4*yr=zr=Ar=Br={M*Cr=Dr=SL.`x*7[%Er=Fr=Gr=JA%1.@ Jr=-m Kr=(k.Lr=22$M[%Lm*Mr=!'$q#$N4&_=$6_&8T@W4*;8&;1#AQ@$@#E2&S~&)T@Oq {b ].$bk#a9 a9 [0 Nr=n] =p Yp Or=Pr=Uo@my#-8 jr#k[#(d@|g 5h 1r@yK /0@/0@/0@c.#V.$S&&S&&d.#Kv =E i0$=E }g }g *E i0$i0$i0$i0$=E =E =E =E =E vR@vR@vR@Eu Kv Kv &E &E &E &E Kv Kv Eu Eu vR@vR@tG tG sG sG sG rG rG rG sG rG rG >b@r[@X:@X:@t! >b@>b@r[@r[@X:@X:@t! t! ;! ;! ;! ]|@]|@]|@]|@]|@(7 (7 (7 (7 (7 (7 (7 /d@+L@+L@+L@+L@+L@+L@+L@7, 36 Q1 d2 #, 'p {1 'p 'p bP@bP@w! XC@XC@XC@An#{Y@p{ q[ 1^#/} ~1 $, UE uy uy |n Qr=Qr=)p M,#=8 26 }C {)#>g$zX@o^#1(%)U+'`+b/$7Z.9k#cH#}_+o=#gi@|z@ii@I_@bZ.~M#|z@cp+I,@SK+<<*1h#1h#xI+80#80#80#80#yD+B@@}P+}P+Tn+Tn+Ob+G:+si+si+Kb+Kb+6e@6e@V4#V4#Mg+Mg+B)$r:+r:+r:+x0+x0+^H$`3+F_$F_$DC$DC$pD$pD$OB$(C#i~%PR#&}#*}#X/%U%$#;$^>$>|+,|+,|+,|+Y1#;6$;/$w!$2t#@}#W+$SR#m%$Tx$Es$Es$d8+d8+>6+>6+A7#!w#A0+z0+My#Ly# F> F> F> .r 1k Ld Tj il Jf #9 I0 89 eF.y[ s'+H`+3=.y-.(T.C%.X!@Ay h{@60 6,@ef <<@i_@GJ.#x Pt -( q.@a} iP@4u E( C/ gw F( F( V: 9Y 3r ZZ ,8 ]|@(7 /d@ 9 9 9 9 /d@;! +~ +~ Y:@;! Y:@+~ W:@+~ +~ Y:@(7 /d@]|@Y:@t! W:@]|@]|@Y:@W:@Y:@;! W:@t! X:@X:@+~ +~ t! r[@X:@t! +~ X:@rG rG >b@t! _|@:|@[|@$4@vR@vR@vR@vR@(|@_|@_|@^|@1f kI@a~ WA :|@(|@/|@_|@[|@$4@<|@:|@_|@:|@:|@[|@[|@[|@[|@||@n$#m$#l$#Z:@t! ]J |u |u [u }m F> Sj 56 6Y.yW++GX%v}%1_+oo%=k$@d$Ej$00$00$gX@oZ@Bb#Bb#Bb#'2+'2+Bb#Bb#Bb#qw$&6$&6$$*$$*$Bb#Bb#bN#>M$cs%|0$Sv#ds#/v@3_#ID+IN*IN*oz@s$++[@b{$b{$X @ur=Tr=fq*Ur=&q*Vr=zK*G'=IW*VD*Wr=Xr=Yr=Yh=H;*Zr=`r=br= s=SG.Ce+QN.Q+&:^+o3.o3.j(#j(#& =6#NH#yn#'p n| +' 9 /d@;! +~ :|@[|@'8@>8@/0@c.#V.$q<$Eu *E i0$=E }g -E }g =E =E =E =E =E =E i0$i0$i0$vR@vR@Eu Kv Kv &E &E u1$&E &E &E Kv Kv Eu Eu Eu tG tG tG sG sG sG rG rG sG sG rG >b@r[@X:@t! t! r[@r[@r[@X:@X:@t! t! t! ]|@]|@]|@]|@]|@(7 (7 (7 (7 /d@/d@/d@/d@(7 (7 (7 +L@+L@+L@+L@+L@+L@+L@7, n| *! d2 `3 {1 {1 {1 {1 bP@bP@w! XC@{Y@{Y@9.#8.#jX@v{ QF#sR#(d )d@P~#ir#N~#V8 V8 V8 7;*Rk@d>*:c#jl $-#jx@${@@{@2Y.)%@i-+Rc$7Z.9k#cH#}_+o=#gi@gi@KL#KL#C,+FM@9V@(8$<`#SK+1h#xI+xI+yD+80#qp+qp+qp+yD+3T+!-+!-+mp+mp+^/+G:+si+si+Kb+Kb+6e@6e@V4#V4# @# @#B)$r:+r:+q:+x0+x0+^H$`3+F_$F_$DC$DC$pD$pD$PB$OB$QR#i~%*}#51%U%$T%$#;$#;$>|+,|+@K#@G#7N$;6$;/$;/$3t#$w#-6$I#$$2+Nr$X3+)6+)6+'6+C7#!w#!w#!w#A0+)E#%w#hf#h0#]|+1$@}&@XN#-9@^/+lr+xp+=w+.B+up+sr+wD+A@@3T+h~+.N+3]+3]+c~@'T@CD+CD+TQ@qt&n#$l@%`Z&/S&DJ&5_#'Y&'r%_ +WQ@*>#h>#Pe V-@(7 @~ ,8@zK ^|@(|@:|@(|@WA 1f kI@kI@(|@gt@{Y@1f YA YA ')#_|@@~ ')#XC@ p@8.#w! ))#))#))#QT@')#a~ WA ^|@^|@/|@W:@;! ]|@Y:@+~ t! +~ W:@;! ]|@(7 (7 /d@/d@/d@/d@O9 O9 +L@+L@.9 .9 .9 .9 @A@@A@.9 .9 .9 +L@+L@+L@xn#l[#(,@(,@(,@(,@,8 :,@H0 H0 @9 '8 Kf Sg Mc k.@(G ;l l.@1: 1: jw k .YZ YZ J5 J5 4,@AU+AU+4,@9O.oS@-( -( q.@/( Fv F( C/ gw gw J0 J0 1/ ep =W@Rg ,8 (7 /d@O9 O9 O9 O9 9 (7 Y:@+~ t! W:@Y:@W:@t! Y:@W:@W:@;! (7 /d@]|@Y:@r[@+~ Y:@;! Y:@W:@Y:@]|@t! r[@>b@X:@+~ Y:@W:@t! >b@X:@t! X:@>b@r[@t! Y:@(|@_|@[|@<|@$4@$4@$4@$4@_|@:|@:|@_|@/|@/|@(|@:|@<|@:|@_|@:|@$4@vR@<|@[|@[|@[|@:|@:|@[|@[|@<|@<|@es es cP@>b@Yr 5F /t {J [u }m ^e w' w[ yW+W!@#s=[R&C:&=`$z[#E-%i[%zp#M:+08$09$Ej$b8$00$hX+fX@1O#'2+Bb#Bb#Bb#Bb#Bb#Bb#'2+&6$&6$$*$$*$$*$$*$Bb#e;%k`%..&|0$Sv#T5++L+3_#ID+IN*oz@zB@g *+[@b{$wD$X @qc@fq*Ur=$s=%s=:P#&s=*s=,W*!,=[k%Cr=QW.lN#`x*=s=-s=;s=~N 9H.>s=yT*Q+&t4.:^+ :*t4.o3.j(#Q+&H*lt*lt*M8@u]#oh.w5&w5&y4&G|@xc+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.Kh+G|@Kh+oh.iS.y4&7P.d #US+OP*[f.[f.x{+23+US+';$';$';$';$';$';$';$';$G|@G|@Kh+Kh+Kh+G|@T_+T_+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.d #';$';$US+23+23+OP*OP*d #d #d #';$';$';$';$';$$(+T_+T_+T_+T_+T_+T_+$(+T_+T_+T_+T_+T_+T_+T_+G|@G|@G|@G|@G|@G|@G|@G|@G|@y4&y4&oh.oh.7P.7P.Kh+Kh+xc+T_+G|@T_+xc+Ea+$(+G|@$(+T_+G|@Kh+Kh+G|@", "is@is@is@x5.x5.O7.O7.is@is@x5.x5.x5.O7.O7.O7.x5.x5.x5.x5.x5.O7.O7.O7.O7.O7.O7.xX%xX%_r+_r+_r+_r+_r+xX%xX%O7.O7.x5.x5.O7.O7.O7.O7.xX%xX%xX%xX%F6.b@r[@X:@t! +~ r[@r[@X:@X:@t! t! t! +~ Y:@;! ;! ]|@]|@(7 (7 /d@/d@/d@ 9 9 9 /d@(7 ]|@+L@+L@O9 9 9 O9 +L@7, n| *! d2 #, 'p {1 {1 'p bP@bP@w! XC@{Y@8.#f@#f@#7u#v{ QF#sR#(d )d@P~#ir#:s=V8 V8 c,*$&V&FJ&+F&q<*!($wp&{q$L@%.B#+/$G~ ;! G5@^M FN FN ^|@/|@/|@@~ 1f ')#')#kI@XC@')#B_#h@#{Y@YA [|@vR@a~ !)# p@h$#8.#!)#B_#B_#kI@1f YA @~ ^|@^|@^|@^|@W:@;! ]|@;! +~ t! +~ Y:@Y:@;! ]|@/d@ 9 9 9 /d@/d@/d@ 9 9 O9 O9 O9 +L@.9 .9 .9 +L@+L@O9 O9 O9 =! m[#VH VH (,@(,@Sr va W-@H0 @9 '8 Ui Sg Mc l8 O2+f=@y[ 1: p0 p0 Pc o0 jw RM.6m ZP.J5 4,@9O.Xu a} a} a} Fi Fv ZW C/ |t F( F( 3q V: O#@A%@kB@Rg Sr /d@O9 .9 .9 +L@O9 9 (7 Y:@t! t! W:@W:@W:@t! ;! Y:@Y:@;! /d@/d@]|@Y:@rG r[@+~ W:@W:@W:@Y:@]|@t! X:@r[@X:@+~ W:@+~ t! sG >b@r[@r[@>b@>b@t! Y:@_|@:|@<|@$4@vR@vR@vR@vR@<|@$4@$4@$4@$4@vR@vR@vR@Eu $4@<|@<|@Eu Eu vR@<|@vR@$4@<|@[|@[|@[|@<|@$4@-! -! sG 7G@^0@5F 6h n@#}m N1 _g >J &7 IR.k{ uv%x<@z[#vx$5w+c!$N:+$ +`]$90$4($b8$!l$vp#_P+nq@v,$bN#'2+Bb#$*$$*$Bb#'2+'2+$*$$*$$*$$*$$*$$*$$*$37$k`%..&|0$Sv#T5++L+3_#-1#oz@oz@g *+[@b{$3:@wD$;`+_c*eq*$s=&q*z2&}s=&F*cW*So$&;=fo=Yr=Zx*@]*g3@*|&|s=;s=rj*h;=Wn.w{@v5.v5.(r+}o=D6.o3.Q+&Q+&& =& =w{@w{@w{@CI#CI#CI#CI#CI#w{@w{@w{@CI#CI#CI#CI#CI#S`%S`%sX%sX%sX%&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%iM#l]#=Z+l]#&b=iM#&b==Z+&b=&b=&b=&b=l]#l]#l]#l]#,C+,C+,C+,C+,C+,C+,C+,C+,C+,C+,C+uq*uq*uq*uq*z9.)A&<:*#d+TO&TO&TO&#d+#d+3]&`E&`E&`E&`E&TO&TO&TO&`b&`b&`b&`b&`b&`b&`b&`b&!D+`b&`b&`b&B#@B#@{y%%' jk@ (&lC&zw*>H*aH*lt*lt*OP*US+T_+$(+T_+Kh+oh.iS.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.G|@T_+Kh+oh.y4&oh.7P.US+23+x{+[f.x{+OP*US+';$US+US+US+US+US+US+US+US+Kh+7P.7P.oh.7P.Kh+G|@T_+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.7P.7P.7P.7P.7P.7P.7P.oh.oh.oh.oh.oh.oh.oh.oh.US+US+US+US+US+23+23+23+d #d #d #';$';$US+US+US+$(+T_+G|@G|@G|@G|@T_+$(+G|@G|@T_+T_+T_+G|@Kh+7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+y4&y4&oh.7P.Kh+Kh+G|@G|@7P.oh.y4&7P.G|@G|@7P.iS.Kh+Kh+G|@G|@G|@T_+", "x5.x5.O7.O7.O7.xX%xX%is@is@x5.x5.x5.O7.O7.O7.O7.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.xX%xX%xX%_r+_r+xX%xX%O7.O7.x5.x5.x5.x5.O7.O7.xX%xX%_r+_r+[{.F6.#k.#^R@{r=vO.5F.1Y.x<@WJ.,T.s:=6|&j}=Jw%4s=D/*5s=6s=/X%^+$/} (} l .Q} U:@G0 EN#EN#@~ /|@b~ >8@/0@c.#$4@-E }g -E tG sG -! }g -E -E }g }g *E *E =E =E Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$&E &E &E Kv Kv Kv -! -! -! tG tG sG sG sG tG tG sG >b@r[@t! +~ +~ X:@X:@X:@t! t! t! +~ +~ +~ W:@W:@;! ]|@(7 /d@/d@/d@ 9 O9 O9 O9 /d@]|@;! +L@O9 9 /d@/d@ 9 O9 7, 36 Q1 *! #, 'p 'p 'p 'p RT@bP@XC@{Y@8.#h@#f@#e>#6u#7u#`o@+z&Si@'d@:f@:f@Qm@Y+**)&2j=N,&7s=9j&WE@>! +/$Pz$/<%`F@pZ.+]%DW.9]+.{@7Z.|_+V0+}_+gi@gi@U0+h[+(8$(8$ib#T0+H,@Hl+}z@3T+A@@wD+rp+mp+mp+rp+S.@3T+!-+!-+mp+mp+^/+Ob+Yg+:6+{_+mi+h0#Pg+~|+.4+oq#YN#/$>/$57$Y3+'|+;|+;|+)E#)E#I`#D7#D7#D7#vq#uq#!6+f8+|f#ef#=l#%l#}&@]k+tp+Xn+Lt+Wn+@B+#B+1R+1R+wD+A@@A@@3T+h~+h~+3]+3]+:f+3]+X.@X.@j)$6k#6k#^t#T6*r{$8s=,Q#~($7%%3w$[H$W4+n{ <,@mt@%p@ S#X#%_E$W~#/|@^|@YA ')#')#1f WA p@:|@(|@1f ^|@<|@Eu :|@a~ ))# p@h$#w! B_#kI@')#WA @~ ^|@^|@^|@@~ WA YA Y:@]|@(7 ;! W:@+~ W:@;! W:@Y:@]|@/d@ 9 9 9 /d@/d@/d@/d@ 9 9 O9 O9 O9 +L@+L@+L@O9 O9 9 9 9 l[##A@VH VH /,@+' V-@,8 W-@H0 @9 '8 Ui Sg Mc l8 =K.V} r| zb ia ia |: n.@K0 av av |7 bv $x w .w G( B( w/ w/ 86 s*@Hi n_ k< }: [7 B6 ro Ok Rg Tj U-@+L@@A@RT@RT@.9 O9 /d@(7 Y:@+~ t! W:@Y:@W:@+~ (7 ]|@;! ]|@/d@/d@;! W:@-! rG t! +~ t! +~ W:@;! ;! W:@t! t! t! t! r[@rG tG rG rG sG -! -! rG r[@<|@$4@Eu Kv &E &E &E &E Kv Kv Kv Kv &E Kv Eu vR@&E Eu vR@Eu &E &E Kv vR@&E Kv vR@<|@<|@<|@$4@$4@tG 6F W^#^0@5F {J 1j 1j 7n /e yy B6 zb O9#4A AO.~f#TH#K{$']$56+DA$] +`.+qn%)H$!l$hm$9e#WK+@#$S@+Z.+'2+Bb#$*$$*$Bb#'2+se#$*$$*$$*$$*$$*$$*$$*$37$k`%..&l`%/R#T5++L+_f*-1#oz@zB@g *+[@$d&wD$jE$;`+^-@9s=&q*'I%Gb=6r={)=,W*CX&pk#0s=kr=-Q `N+NW#as=bs=ar=cs=ds=D(*bQ#t4.C6.It&}o=[(+n3.w{@CI#93#S%r-@h^+4,+k#@o2@o2@k#@4,+..=17*nh.$.@$.@zi.U*@1.+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.G|@T_+G|@oh.y4&oh.Kh+x{+x{+x{+x{+OP*23+US+';$23+23+23+23+23+23+23+23+oh.y4&y4&y4&y4&7P.Kh+G|@G|@G|@G|@G|@G|@G|@G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.oh.oh.oh.oh.oh.oh.oh.23+23+23+US+US+US+US+US+d #';$';$';$US+23+23+23+T_+G|@Kh+7P.7P.Kh+G|@T_+7P.Kh+G|@G|@G|@7P.oh.iS.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.oh.7P.Kh+G|@T_+$(+$(+7P.oh.oh.7P.G|@G|@7P.iS.]@+iS.7P.G|@G|@Kh+", "O7.O7.O7.xX%xX%_r+_r+is@is@x5.x5.x5.O7.O7.O7.xX%xX%O7.O7.x5.is@is@Vh.is@is@is@x5.x5.O7.O7.O7._r+_r+xX%xX%O7.O7.x5.x5.x5.x5.O7.O7.xX%xX%_r+_r+[{.F6.4+87$as$ms=K9#K9#zG.}-+0]@%L+ba&W<&_.$ns=os=ps=]I&D/*Vb=~m `{ ^(#L1 ZG@fX#S:@H5@0~ YA ^|@=8@'8@/0@vR@sG -! -E -! sG rG tG -E -! -! -E -E }g *E *E *E *L%*L%*L%GJ%Nt%u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv -! -! -! tG tG tG sG sG -! tG sG >b@r[@t! +~ W:@X:@X:@X:@t! t! +~ +~ +~ X:@t! +~ Y:@]|@(7 /d@ 9 /d@ 9 O9 +L@O9 /d@]|@;! O9 9 /d@(7 (7 /d@ 9 +' 7, (1 *! d2 <} <} <} <} RT@bP@XC@{Y@8.#h@#e>#e>#6u#6u#7u#B&#gt@Si@'d@Zo@Qm@u&**)&Wm@u&*@b@qs=cj#A&#Lf u[$}/%OA$3c#VZ.E9&|!+3N%K~$te#cH#V0+}_+gi@->+yM@#N+#N+ib#T0+Hl+Hl+4T+4T+rr+rr+Tn+Tn+Tn+uD+S.@4T+!-+!-+mp+mp+Yn+Ob+Yg+:6+{_+mi+h0#Pg+~|+.4+Ey#oq#/$>/$;6$+K#Y3+'|+'|+A0+)E#I`#I`#D7#D7#vq#vq#vq#gw$tB#Sn#`2%;E#^i#X+$3V#Xn+Lt+Vn+op+,w+hy+#B+vD+A@@A@@3T+3T+h~+h~+~-+3]+rd+3]+8G+X.@7k#^8$.L+Iq@rs=1$*/A&l~$6W.8R+;v$OA$m>@~~#X:@+n@:&%&p@sp&#~v$tp%6)#[s#vy+@6$J$+-I$)H$WL$hm$9e#WK+@#$S@+Z.+'2+Bb#&6$&6$Bb#'2+se#$*$$*$$*$$*$$*$$*$$*$37$k`%n>%l`%/R#T5+(v@_f*dx@zB@g *g *q}@$d&wD$jE$;`+^-@ss='I%(K*ts=v{=us=So$vs=ws=xs={W%P;$=s=>[@ys=.x&'b Ek$S^.kH.:(+:^+C6.}o= :*C6.m3.<(+sX%`#=`#=sX%S`%CI#w{@w{@w{@w{@w{@j(#j(#Q+&w{@CI#S`%sX%&r=S`%S`%sX%sX%sX%&r=&r=&r=uG#*r=S`%w{@w{@S`%*r=uG#m}+l]#/W%/W%iM#=Z+=Z+l]#=Z+=Z+=Z+l]#&b=iM#iM#iM#,C+,C+,C+,C+,C+,C+,C+,C+&s*xr*xr*uq*,C+,C+Fu+Fu+z9.+y&+y&+y&+y&%z&)A& ==)A&)A&%z&.y&.y&+y&+y&Xw&~h&~h&~h&~h&~h&~h&~h&~h&&, 0, 0, 0, {h&{h&~h&~h&r-@wE*4,+o2@o2@o2@4,+4,+nh.zi.J> 17*xE*xE*17*J> Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.G|@T_+G|@oh.y4&oh.Kh+u!=[f.x{+OP*23+US+';$';$OP*OP*OP*OP*OP*OP*OP*OP*y4&iS.iS.iS.y4&oh.7P.Kh+G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@G|@oh.oh.oh.oh.oh.oh.oh.oh.OP*OP*23+23+US+';$';$d #';$';$';$US+23+23+OP*OP*G|@Kh+7P.oh.oh.7P.Kh+G|@oh.7P.Kh+G|@Kh+oh.iS.]@+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.7P.7P.Kh+T_+$(+xc+xc+T_+G|@G|@$(+Ea+Ea+T_+7P.Z7&o{+y4&Kh+Kh+7P.", "is@x5.x5.x5.O7.O7.O7.Vh.is@is@x5.O7.O7.xX%xX%Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.x5.O7.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%O7._r+N7._r+x5.is@x5.xX%[{.[{.[{.[{.[{.[{.[{.[{.#k.#k.#k.#k.#k.#k.#k.#k.N7.xX%O7.xX%N7.N7._r+O7.M7.N7.xX%O7.O7.xX%N7.M7.N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+_r+_r+_r+_r+_r+_r+_r+xX%xX%O7.O7.x5.x5.O7.O7.xX%xX%_r+N7.N7.M7.%0+M7._r+xX%xX%_r+M7.%0+_r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.N7.N7._r+_r+_r+}&>{+Z@+pD#(,%88%k3%Gs=Hs=Is=Js=Ks=K/%1g=Xi&;;@e0&wc #[ l .l .y&#_7 W:@r[@yK W~#=p@G5@>b@tG }g }g tG rG >b@rG }g }g }g *E *E *E =E =E *L%*L%GJ%Nt%u1$Nt%Nt%Nt%&E &E &E &E &E &E &E &E *E *E }g }g }g -E -E -E rG sG sG >b@t! W:@W:@+~ X:@X:@t! t! t! t! +~ +~ Y:@+~ t! Y:@ 9 @A@@A@.9 bP@RT@.9 +L@O9 9 9 9 O9 ;! W:@(7 O9 9 O9 :} +' ^1 F> 7v i[#4' <} <} [`@[`@XC@w! XC@8.#e>#MN#Si@Si@Si@Si@Si@Dd#;6#;6#Zo@u&*N,&Ls=Ls=Ms=O**KN#j$#>! 8V u'@h!@V{$pZ.*'&Ns=7b*VF@7_##>##*%i[+v,$i~+yM@AI+[V+zI+@N+Hl+W&+3T+3T+wD+vD+Lt+Wn+Wn+mr+xD+3T+!-+!-+mp+mp+^/+/|+si+[]+mi+Kb+/6+dd+^6+.4+Wl+Wl+Nn#Nn#Nn#Nn#.I#.I#`3+^H$C7#C7#o'$pD$*e%Q:%v0#1@$PB$(C#51%51%51%51%D0+w'$>|+|T#@G#pd$V>%q,%Os=*w#+K#'|+7[+A0+}T#)E#A0+E_$I`#vq#bt#bt#vq#at#Iy#Vn#nB#_i#*l#bf#IZ@@m+Vn+pp+mr+qp+)w+)w+)w+)w+A@@3T+3T+3T+[P+h~+~-+~-+c~@'T@-K@;K@|{#mo@mo@Jq@j^#Ps=Qs=0T+Z<%GY$o=$f]@ET :,@mt@]Q#Jz ^Q#>F$B'$C@$YA a~ 1f kI@')#B_#B_#YA WA a~ a~ /|@<|@/|@B_#')#))#{Y@h@#{Y@!)#a~ ^|@(|@@~ @~ @~ 1f !)#!)#1f Y:@Y:@Y:@(7 O9 /d@W:@rG t! W:@;! /d@O9 +L@O9 O9 /d@(7 ]|@]|@(7 9 +L@@A@@A@.9 +L@ 9 /d@/d@/d@/d@|g |g ]|@]|@(7 /d@T:@T:@0Y fG#1C |C .X -C+Tk#*@.wz#yy@@<@Od @<@=K.o<+bk l< l< x[ K0 n.@6s S9 ZW w/ eQ 76 76 76 v) w) Qo#X]@Pg <7 <7 Ti Ti ;[ il _C@O9 uR@ir#Z=#O9 ;! +L@ 9 /d@(7 ]|@;! Y:@W:@W:@]|@;! Y:@W:@+~ +~ W:@W:@>b@>b@rG sG sG rG >b@>b@W:@+~ X:@rG tG -! -! -! =E =E =E =E =E =E =E =E GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%u1$Eu Eu &E &E Kv Eu Kv Kv Kv &E &E &E &E &E Eu Eu vR@$4@<|@[|@[|@:|@:C@^t (t [u }m Xy $l x' Qg F5 |##lT.PW#3W%9F.G)+X,@+B$y1#U`$3w+T4$J$+27$)H$tr$$@%tr$vp#|T+v,$v,$37$$*$&6$&6$qw$qw$qw$,p$&6$&6$&6$$*$$*$Bb#Bb#e;%S!$k`%n>%av$nI%4_#(v@& +yx#da@q}@wD$wD$A[+JN*EP*Ou@ e=(K*}L*-!=jQ*Rs=Ss=Ts=cY.fK&>S+4@@Us=Vs=Ws=v[$Xs=ms%)c.e6#bQ#g|.*G.}>#Gn= :*+T+sQ@sQ@j(#+9.Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&w{@w{@w{@CI#CI#CI#S`%S`%sX%sX%&r=&r=*r=*r=*r=uG#CI#S`%S`%sX%&r=&r=*r=*r=iM#iM#iM#iM#iM#iM#iM#iM#=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+&s*xr*,C+Fu+Fu+,C+xr*&s*&s*&s*&s*&s*&s*&s*&s*&s*(-=kt*kt*z9._|*u{@ps+ps+kt*VD@_|*z9.kt*(-=VD@z9.>0+sq*Nc&mh.>0+,0+sq*mh.,0+,0+>0+>0+>0+>0+>0+>0+%' %' >S%{h&0, &, Av&ZQ.sq*sq*sq*sq*sq*sq*sq*zi.Kh+oh.Kh+$(+G|@iS.oh.$(+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+';$US+23+US+u]#d #23+HV.23+d #:{+d #x{+u!=OP*';$7P.7P.7P.7P.7P.7P.7P.7P.oh.oh.oh.oh.oh.oh.oh.oh.T_+G|@7P.y4&iS.y4&oh.oh.oh.iS.w5&]@+y4&oh.iS.]@+US+US+23+23+OP*OP*x{+x{+ZW+:{+23+[f.x{+OP*OP*OP*T_+G|@Kh+7P.oh.7P.7P.7P.iS.oh.G|@Kh+oh.y4&oh.7P.Kh+G|@T_+$(+$(+G|@7P.oh.G|@G|@G|@G|@G|@G|@G|@G|@oh.Kh+G|@G|@7P.oh.Kh+G|@G|@G|@G|@G|@G|@G|@", "is@x5.x5.x5.O7.O7.O7.x5.x5.x5.x5.x5.O7.O7.O7.is@is@is@is@is@is@is@is@x5.x5.x5.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%O7._r+N7._r+x5.is@x5.xX%F6.F6.F6.F6.F6.F6.F6.F6.#k.#k.#k.#k.#k.#k.#k.#k.N7.xX%O7.xX%N7.N7._r+O7.M7.N7.xX%O7.O7.xX%N7.M7._r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+xX%O7.O7.O7.x5.xX%xX%xX%_r+_r+_r+_r+_r+%0+M7._r+xX%xX%_r+M7.%0+_r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.N7.N7._r+_r+_r+#k.#k.v4.v4.<3+<3+<3+<3+#k.#k.#k.#k.v4.v4.v4.v4.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+%0+%0+%0+%0+%0+_r+M7.$B#@9.eO@@9.$B#%0+$B#M7.N7.N7.%0+$B#%0+N7.$B#$B#$B#$B#$B#$B#$B#$B#q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#xX%N7.%0+%0+M7.N7.%0+@9.M7.M7.M7.M7.M7.M7.M7.M7.M7.N7.pD&n2.L3.Lq=zs=Ys=Zs=EH+j0$VM.01$1'%mt.|&%CK@pu*VD..4*,B#ls=2F.XL*Zc%Bb$Bb$|e%+37@:X@ja@,{+O$+, $+++gh$hE%k3%`s= t=i+%.t=Cp#6k&6^ Oe&=;@a_$*V&{{ ^(#3C _C@ 9 (7 Lz LZ$=p@X~#X:@>b@tG -! tG sG tG -E sG sG tG -! -E -E }g *E GJ%GJ%Nt%Nt%u1$Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$*E *E *E }g }g -E -E -E sG -! -! sG r[@+~ t! X:@r[@r[@X:@X:@X:@t! t! t! ;! W:@+~ ;! 9 .9 .9 +L@RT@@A@.9 +L@O9 9 9 9 (7 Y:@;! O9 @A@O9 O9 n| <} Q1 *! `3 <} ,p 'p i[#UE@b.#{Y@{Y@8.#h@#MN#i$#gt@Si@Si@'d@;6#Zo@Zo@Wm@2j=4>&+t=Ms=@b@7U%7j&O**Ti@`V@H0 gP@g>#g!@Y #8F.6<+_=$3!+WF@7Z.Ux#y'#[/+U0+r8+TK+AI+zI+{-+.N+Hl+4$@B@@S.@vD+aX+Lt+Lt+aX+xD+3T+!-+!-+mp+mp+Yn+Ob+:6+[]+mi+Kb+E:+dd+!|+~|+Wl+Wl+Nn#Nn#Nn#Nn#.I#.I#`3+`3+gw$gw$o'$DC$BC$*e%1@$P{$PB$(C#51%51%51%51%D0+w'$6[+,|+@K#yB#8N$V>%6t#xB#Y3+;|+B0+B0+}T#>>$8,$E_$u0#vq#bt#bt#4i#at#Jy#Un#2f#=l#%l#(i#IZ@*w+pp+nr+qp+qp+xD+xD+xD+S.@3T+3T+3T+3T+[P+[P+~-+~-+I:+3]+;K@yM@,2+Y.+Y.+Tx#_'$h3%i[%TH#l %EB%zg@h>#Dn W:@=p@Iz b@>b@>b@>b@r[@r[@>b@rG sG sG sG rG rG r[@>b@rG tG -E -E -E -E =E =E =E =E =E =E =E =E GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%*L%Nt%Kv Kv &E u1$&E Kv u1$&E &E &E &E &E &E &E $4@$4@<|@[|@[|@:|@:|@r[@5F /t 8q [u }m N1 /e >J )m |##/T.@t=#t=8<+2Y.{f#QB$4[%U`$''%T4$09$J$+ ^$5($hm$tr$~l$_P+x_%i[+x_%Bb#$*$$*$$*$&6$&6$qw$qw$&6$&6$&6$$*$$*$Bb#Bb#Bb# ^$k`%6P#av$nI%4_#& +|V#>[#nc@$d&wD$A[+L+*$<+Nu@#F*BJ*}L*lE*SQ*Rs==m*$t=%t=hL##4 Gq=&t=qD#%F&*t==t=r#@R4%kH.bQ#D6.l3.Sx&U'#}>#+T+s4.<(+<(+Q+&o&=w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@CI#CI#CI#S`%S`%sX%sX%&r=&r=*r=*r=*r=*r=sX%sX%sX%sX%sX%&r=&r=&r=iM#iM#iM#iM#iM#iM#iM#iM#=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+xr*uq*,C+Fu+Fu+,C+uq*xr*xr*xr*xr*xr*xr*xr*xr*xr*(-=(-=kt*kt*VD@z9.z9._|*kt*VD@_|*z9.kt*(-=VD@z9.>0+sq*Nc&mh.>0+,0+sq*mh.>0+>0+>0+>0+>0+>0+>0+>0+>S%>S%~h&{h&{h&0, &, &, >0+>0+>0+>0+>0+>0+>0+>0+J> 7P.Kh+$(+G|@iS.oh.$(+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+';$US+23+US+d #d #23+u!=';$';$US+';$d #';$US+OP*7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.xc+$(+G|@Kh+7P.Kh+G|@G|@Kh+oh.y4&y4&7P.Kh+7P.y4&US+US+23+23+OP*OP*x{+x{+v]#';$OP*x{+OP*23+OP*x{+Kh+Kh+7P.y4&y4&y4&oh.oh.]@+oh.Kh+Kh+oh.y4&y4&oh.Kh+G|@T_+T_+T_+Kh+7P.oh.G|@G|@G|@G|@G|@G|@G|@G|@7P.G|@T_+G|@7P.oh.7P.G|@Kh+Kh+Kh+Kh+Kh+Kh+", "is@x5.x5.x5.O7.O7.O7.O7.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@x5.x5.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%O7._r+N7._r+x5.is@x5.xX%#k.#k.#k.#k.#k.#k.#k.#k.#k.#k.#k.#k.#k.#k.#k.#k.N7.xX%O7.xX%N7.N7._r+O7.M7.N7.xX%O7.O7.xX%N7.M7.xX%xX%xX%xX%xX%xX%xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+xX%xX%xX%O7.O7._r+_r+_r+_r+_r+xX%xX%xX%M7.N7.N7._r+_r+N7.N7.M7._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.N7.N7._r+_r+_r+v4.v4.<3+<3+0q.0q.0q.q3.<3+<3+<3+<3+v4.v4.v4.v4.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7._r+M7.$B#@9.eO@@9.$B#%0+$B#M7.N7.N7.%0+$B#%0+N7.$B#$B#$B#$B#$B#$B#$B#$B#q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#_r+M7.%0+%0+N7.N7.%0+@9.M7.M7.M7.M7.M7.M7.M7.M7.<3+M7.pD&B2*n2.Q4.=J.}d=-t=#q&u; ;t=>t=uu c[%q^=v>&,t=VD.@`&T,&}r$2F.fM*HB%Zc%|F.sY$3!+9]+9]+OD@)>+W #G~++x@N$+87$]f#t{%( +L/&z'$$g&}(&#C%h+%dk#7O.:1 mb e] Oe&V] Ih (n WE M1 RT@O9 ;8 8v G5@1r@;! W:@t! X:@X:@>b@-! *E X:@X:@r[@>b@rG sG tG -! u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%=E *E *E *E }g }g -E -E -! -E }g -! >b@X:@r[@>b@>b@>b@>b@r[@X:@X:@X:@t! ]|@;! ;! ]|@ 9 +L@O9 9 @A@@A@.9 +L@+L@O9 9 9 ]|@Y:@]|@+L@+L@]|@;! VH 36 (1 #, Vr :} 36 <} (o i@#i@#h@#h@# p@ p@i$#i$#{m#0+&Cd#6`%'t=Jw&F-&)t=F-&!t=~t=2>&{t=]t=]t=:X%Or=&3#n| va #y Aj$M+@!%@7F.W4*C2&p]+y[+ui+8Z.m6+Rb+U0+.$#UK+TK+{-+SK+RK+C@@T.@T.@xD+| %np+np+np+xD+3T+}P+}P+mp+Xn+Yn+Ob+:6+si+{_+Kb+E:+/6+.4+V4#Wl+Wl+Nn#Nn#Nn#Nn#.I#.I#i8+i8+F_$F_$o'$DC$pD$pD$1@$P{$PB$(C#51%51%51%X/%2I#D0+5[+>|+|T#@G#7N$8N$yB#@K#Ty##;$w'$w'$T%$|@$E7#v0#w0#wq#qf#qf#qf#vq#z7#i0#Qg+ni+(i#af#VA$V1#qp+80#80#3%$T.@B@@B@@B@@3T+}z@3T+3T+[P+[P+Y.@~-+>2+hX@5G+yM@[_+k9@k9@b@>b@rG sG tG tG sG sG >b@rG sG tG -! -! -! -! -! -E }g *E *E *E *E *E =E =E =E =E =E =E =E =E Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%pM%Nt%&E &E u1$Nt%u1$&E Nt%Nt%u1$u1$&E Kv Kv Eu :|@:|@_|@_|@_|@_|@(|@X:@fw x, x, x, O1 k8 >J Pk l< /T.nJ%Je=bT.5c#8R+'/#|0#.B$ZJ#p=#'M$@d$qw$47$d8$d9$!l$d9$37$se#se#se#'2+'2+Bb#Bb#$*$$*$$*$&6$&6$&6$&6$$*$$*$Bb#Bb#Bb#27$27$6P#Kn#9~#yx#& +|V#n:=m1@A[+JN*L+*JN*>Y*&x%=q%kE*lE*Ap=^t=h==lh*/t=(t=_t=:t=81&m4 0+.y&<:*<:*<:*<:*<:*%z&%z&(-=(-==^@=^@=^@=^@=^@,0+zi.7P.Kh+$(+G|@y4&oh.xc+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+';$US+23+US+';$';$23+[f.';$OP*x{+US+v]#h]@';$[f.7P.7P.7P.7P.7P.7P.7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+$(+T_+G|@Kh+Kh+Kh+G|@G|@T_+G|@7P.Kh+T_+$(+G|@Kh+23+23+23+23+OP*OP*OP*OP*US+OP*[f.x{+23+US+OP*[f.7P.7P.y4&iS.iS.iS.y4&y4&iS.oh.Kh+Kh+oh.y4&y4&7P.7P.Kh+Kh+Kh+Kh+7P.oh.y4&Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+T_+T_+G|@oh.y4&oh.Kh+7P.7P.7P.7P.7P.7P.", "is@x5.x5.x5.O7.O7.O7.xX%xX%O7.O7.x5.is@is@Vh.O7.O7.O7.O7.O7.O7.O7.O7.Vh.Vh.Vh.is@is@x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%O7._r+N7._r+x5.is@x5.xX%v4.v4.v4.v4.v4.v4.v4.v4.#k.#k.#k.#k.#k.#k.#k.#k.N7.xX%O7.xX%N7.N7._r+O7.M7.N7.xX%O7.O7.xX%N7.M7.O7.O7.O7.O7.O7.O7.O7.O7._r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+xX%xX%xX%xX%M7.N7.N7._r+xX%xX%O7.O7.N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.N7.N7._r+_r+_r+v4.v4.v4.<3+<3+<3+0q.0q.q3.q3.0q.0q.<3+v4.v4.#k.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.N7.N7.N7.N7.N7.N7._r+M7.$B#@9.eO@@9.$B#%0+$B#M7.N7.N7.%0+$B#%0+N7.$B#$B#$B#$B#$B#$B#$B#$B#q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#_r+M7.$B#%0+N7.N7.M7.$B#M7.M7.M7.M7.M7.M7.M7.M7.<3+<3+N7.d1*n2.Zm='s=1t=-t=m1+a.@2t=3t=:8@@y$W{+hi%Ds=VD.VD.^M*}r$$k*2F.T&$HB%C2&ZF@r1&PD@2!+2!+G~+G~++x@+x@t8+t8+X@+]f#Ap#y'$r)&9R+,Q+Qz$6r$X:$LZ@PM.DL.=K.}^#;b&=;@21&4t=O^#WH +L@;8 ;8 ew ew 9 (7 ]|@;! ;! +~ rG -E r[@r[@r[@r[@>b@>b@>b@>b@Eu Kv &E u1$u1$Nt%Nt%Nt%*L%*L%*L%*L%*L%*L%*L%*L%=E =E *E *E *E }g }g }g -! }g }g -! rG r[@r[@>b@sG rG rG >b@r[@X:@X:@t! (7 (7 (7 /d@ 9 O9 9 /d@.9 .9 .9 .9 +L@O9 9 9 O9 (7 ]|@/d@;! X:@t! fw /,@F> *! e5 4' <} :} {1 i@#i@# p@ p@h$#h$#i$#i$#i$#{m#P8#6`%Jw&nq&)t=/=&&)&!t=5t=~t=6t=7t=6j&XG&8t=7;*yn#m[#En l,$Zw 9e+rO.s1&9t=T-+ZO@A($}k+oK@(m@Rb+|z@.$#.$#TK+b^@yI+1h#xI+xI+T.@x]$ }# }# }#yD+B@@}P+}P+Xn+Xn+Yn+Ob+:6+si+mi+{_+@4+E:+~|+if#Wl+Wl+Nn#Nn#Nn#Nn#.I#.I#$`$i8+qD$qD$o'$o'$o'$DC$P{$PB$OB$(C#51%51%X/%X/%2I#D0+5[+6[+,|+|T#d0$d0$|T#,|+^>$w'$w'$w'$U%$T%$1@$v0#w0#dt#yq#qf#qf#bt#Hy#{|+g0#ni+(i#7f#$m+QX$qp+80#3%$3%$T.@B@@B@@4$@}z@}z@3T+3T+[P+[P+Y.@Y.@~-+>T@5G+->+[_+.h+(m@ui+M/+s!$ c$h9$nV$(R@~t@,J qG }u *p@%0@iF%]Z#0t=at==8@(|@/|@/|@^|@@~ @~ @~ /|@<|@$4@:|@_|@:|@@~ B_#$b@ p@{Y@B_#WA /|@/|@@~ @~ ))#8.#w! ')#kI@kI@a~ (7 ;! W:@+~ +~ W:@Y:@Y:@X:@t! +~ W:@W:@Y:@Y:@Y:@/d@/d@ 9 9 O9 +L@.9 @A@O9 9 (7 ]|@;! Y:@;! ;! xy xy a~ a~ 1f kI@lI@lI@%~ Un$l] (V#7K#7K#Rn&+X J}%AD BD /,$ZE Nc Nd 9_@Nd k.@G`+M^ m{ &7 m{ ;J Cd Kd Kd Kd x) x) P3 P3 P3 Jc v[ Sj Q} 8j#Q} T-@O9 9 bP@j$#i@#@A@.9 uR@@A@.9 O9 (7 ;! +~ X:@r[@>b@rG sG tG tG tG tG sG tG -! -E }g *E *E *E *E =E =E i0$i0$i0$i0$=E *E i0$i0$i0$i0$i0$i0$i0$i0$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%pM%Nt%&E Kv u1$Nt%u1$Kv Nt%Nt%u1$&E Eu vR@$4@$4@(|@(|@(|@(|@(|@(|@/|@t! _,@3' 1k :t k8 Pg w[ kB :a BO./8=s)&0]@f.%js$@/$_-+7P#U,+U,+,L$@d$c9$_8$pw$d8$5($47$'2+cH#cH#Lq@se#'2+'2+'2+Bb#Bb#$*$$*$&6$&6$&6$$*$$*$Bb#Bb#Bb#27$6P#av$Kn#9~#& +|V#n:=nc@q}@L+*JN*JN*JN*>Y*zW*=1=lE*Ap=bt=Rs=ct=dt=et=ft=CR%gt=Us=Ws=,1 ^7$xu&2,.YH*Xn.:(+o&=C6.ht=J{+|t=|t=U'#TF+r4.u5.<(+sQ@S`%S`%S`%S`%S`%S`%S`%S`%w{@w{@w{@CI#CI#CI#S`%S`%S`%S`%sX%sX%&r=&r=*r=*r=*r=*r=&r=&r=sX%S`%S`%CI#iM#iM#iM#iM#iM#iM#iM#iM#l]#l]#l]#l]#l]#l]#l]#l]#xr*uq*Fu+tq*tq*Fu+uq*xr*,C+,C+,C+,C+,C+,C+,C+,C+xr*xr*xr*&s*&s*&s*&s*&s*&s*xr*,C+uq*&s*=^@xr*uq*5,+$' SO+qK+5,+jM#$' qK+qK+$' $' $' $' 5,+5,+>0+)A&<:*<:*<:*#d+TO&+y&+y&PB@PB@wr*wr*wr*wr*wr*u.@zi.7P.G|@$(+T_+y4&7P.xc+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+';$';$US+US+US+US+23+OP*x{+[f.x{+US+u]#:{+US+x{+7P.7P.7P.7P.7P.7P.7P.7P.G|@G|@G|@G|@G|@G|@G|@G|@7P.7P.oh.oh.oh.oh.oh.oh.$(+G|@Kh+G|@$(+$(+T_+Kh+23+23+23+23+OP*OP*OP*OP*[f.u!=u!=x{+US+US+OP*[f.Kh+7P.oh.y4&iS.y4&y4&y4&oh.Kh+T_+T_+Kh+7P.7P.G|@7P.7P.7P.7P.7P.oh.y4&y4&Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+T_+$(+G|@oh.y4&oh.7P.7P.7P.7P.7P.oh.oh.", "is@x5.x5.x5.O7.O7.O7.xX%xX%O7.O7.x5.is@is@Vh.xX%xX%xX%xX%xX%xX%xX%xX%Vh.Vh.Vh.is@is@x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%O7._r+N7._r+x5.is@x5.xX%+V@&^8=f5%1Y.,N.9x$,I@(5@6<$D(@b@r[@X:@X:@X:@<|@$4@Eu &E u1$Nt%Nt%u1$*L%*L%*L%*L%*L%*L%*L%*L%=E =E =E *E *E *E }g }g -! -E -E tG >b@X:@X:@>b@sG sG rG >b@r[@X:@t! t! (7 /d@O9 O9 O9 9 /d@/d@+L@+L@.9 @A@.9 +L@O9 9 @A@ 9 ]|@]|@Y:@W:@O9 /0#|n e5 *! `3 S} /0#'p <} b.#UE@ p@h$#$b@B&#{m#{m#FL#Bd#e4&d5&st=a3&tt=ut=V}&C-&'=&vt=wt=xt=yt=zt=[%*@H@N**Tw#}o +, D'$Ym@JR@UJ.L4&V)*vX@tm#1p#q$+dZ.(K@Ie@~M#|z@.$#b^@yI+<<*1h#1h#C@@x]$W/$W/$W/$yD+B@@}P+A@@Xn+Lt+-9@^/+si+[]+b[+{_+@4+E:+~|+if#Wl+Wl+Nn#Nn#Nn#Nn#.I#.I#i8+i8+qD$qD$DC$DC$o'$o'$P{$PB$OB$(C#X/%X/%X/%U%$D0+D0+5[+>|+,|+|T#Y1#Y1#L`#,X#$;$@;$F7#F7#F7#F7#)$$)$$xc#yc#7i#sf#At=pf#Hy#{|+g0#(k+5f#8f#RX$}(@3%$@4*@4*`[#4$@4$@}z@}z@}z@#A*}z@3T+[P+:w+_w+Y.@f^@>T@5G+i~+j~+(m@JL#PY$4g@ik&[a$Bt=},$X7@gp 5, 5F Cj@xy V7@}O&yp&Ct=Eo&~8@_|@(|@(|@(|@/|@/|@/|@:|@_|@^|@^|@[|@$4@YA 8.#Dt=h$#kI@/|@@~ YA YA @~ ^|@1f ')#kI@')#QT@kI@@~ (7 ;! W:@t! X:@t! W:@;! +~ t! t! t! t! +~ +~ W:@(7 (7 /d@ 9 O9 +L@+L@.9 9 /d@(7 ;! Y:@Y:@Y:@Y:@xy xy a~ a~ 1f kI@lI@lI@%~ Un$Un$l] Rn&Rn&Rn&+X eK#vz#dK#zy@{#.{#.{#.Bn@*@.89 I0 Q9 _1 6Y.j< ;J P#@SH SH SH Jc Jc w' w' -[ Sj T-@T-@8j#8j#WC@~)# 9 O9 @A@[`@bP@+L@O9 @A@O9 9 (7 ;! +~ X:@>b@rG sG tG -! -E }g -E -E -E }g *E =E i0$1C%1C%i0$i0$=E i0$i0$1C%i0$=E *E }g 1C%1C%1C%1C%1C%1C%1C%1C%u1$u1$u1$u1$u1$u1$u1$u1$GJ%&E Eu vR@Kv &E Kv vR@Kv Kv Eu vR@$4@[|@[|@:|@/|@/|@/|@/|@^|@^|@^|@W:@Sr G> so 1u $9 L^ 2q Qd Et=9F.C:&w[#n&%v;%n)%>i#C)+[x@VX.VX.K1#,b$Wx$*6$1T+*6$47$Bb#Lq@Ux#|_+/-+Lq@'2+'2+'2+Bb#Bb#$*$$*$&6$&6$&6$$*$$*$Bb#Bb#Bb#6P#6P#f'$9~#yx#& +n:=da@'*@V^@JN*$<+X $X $*R#Qf%,,=Ap=Ft=@Gt=Bp=rB R[&Ht=oJ#A/*FY%It=o_*Jt=Kt=3D.,H.CI#r4.&G.Lt=Mt=Nt=|t=U'#s4.m3.sQ@.9.S`%S`%S`%S`%S`%S`%S`%S`%w{@w{@w{@CI#CI#CI#S`%S`%S`%S`%S`%sX%sX%&r=&r=&r=*r=*r=&r=&r=sX%S`%S`%CI#iM#iM#iM#iM#iM#iM#iM#iM#&b=&b=&b=&b=&b=&b=&b=&b=uq*,C+tq*$x+$x+tq*,C+uq*Fu+Fu+Fu+Fu+Fu+Fu+Fu+Fu+uq*uq*uq*uq*uq*xr*xr*xr*&s*xr*,C+uq*&s*=^@xr*uq*5,+$' SO+qK+5,+jM#$' qK+SO+SO+qK+qK+$' 5,+5,+>0+-.%Ot=Pm*66$TO&TO&Xw&Xw&PB@PB@wr*wr*m}+m}+m}+mO#nh.Kh+G|@xc+T_+oh.7P.xc+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+';$';$';$US+23+OP*23+23+>].[f.US+US+OP*x{+OP*US+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@G|@G|@G|@G|@G|@G|@oh.oh.oh.7P.7P.7P.7P.oh.T_+Kh+7P.Kh+G|@T_+G|@7P.OP*OP*OP*OP*23+23+23+23+u!=u!=u!=x{+US+';$23+x{+G|@G|@Kh+7P.oh.oh.7P.7P.Kh+T_+xc+xc+T_+G|@G|@$(+Kh+Kh+7P.oh.oh.oh.oh.oh.7P.7P.7P.7P.7P.7P.7P.7P.Kh+G|@T_+G|@oh.y4&oh.Kh+Kh+Kh+7P.7P.oh.oh.", "is@x5.x5.x5.O7.O7.O7.O7.O7.O7.x5.x5.x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7.is@is@is@is@x5.x5.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%O7._r+N7._r+x5.is@x5.xX%F6.F6.F6.F6.F6.F6.F6.F6.#k.#k.#k.#k.#k.#k.#k.#k.N7.xX%O7.xX%N7.N7._r+O7.M7.N7.xX%O7.O7.xX%N7.M7.xX%xX%xX%xX%xX%xX%xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+xX%_r+_r+_r+N7.N7.N7.N7._r+_r+_r+_r+_r+xX%xX%xX%_r+N7.N7.M7.M7.N7.N7._r+_r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.N7.N7._r+_r+_r+F6.&zD&zD&Vt=l-$M/+''+i[%i[%A2$A2$i[%;{+9>+;A&fT.-q$yG.pV@r~+fk@PH#D(@]L$OB@OM.uK@YG@89 b6&Wt=;p Zq Xt=hh*#|#7q#@A@+L@/d@(7 ]|@Y:@X:@rG rG rG rG >b@r[@X:@X:@X:@_|@[|@vR@&E u1$Nt%u1$u1$*L%*L%*L%*L%*L%*L%*L%*L%i0$i0$=E =E *E *E *E }g -! -E }g -! >b@X:@r[@>b@sG sG rG r[@X:@t! +~ W:@;! /d@+L@.9 O9 9 9 9 9 O9 .9 @A@@A@.9 O9 9 +L@/d@(7 9 O9 @A@VE@Fz t|*Q*#Vr Q1 <} {1 /0#4' [`@UE@h$#B&#Si@'d@Yt=Yt=Zt=Zt=6r&V &tt=`t=`t=1>&1>&lg& u=.u= u=+u=@u=#u=$u=%u=ln&'-*}r=k@#xr$,u$N6@[O.A|@V-+7T@f>@A($,(@Sb+cZ.Ie@bZ.~M#|z@*(@I,@V[#*:#0e#0e#`[#x]$x]$x]$&B+T.@A@@A@@Lt+Lt+-9@^/+]_+:k+ni+mi+@4+/6+.4+V4#Wl+Wl+Nn#Nn#Nn#Nn#.I#.I#^H$`3+qD$Fb+pD$DC$DC$o'$PB$OB$(C#(C#X/%X/%U%$U%$w'$#;$6[+>|+|T#|T#Y1#@G#+2#$;$$;$$;$`A$`A$`A$ (%2@$)$$xc#xc#yc#sf#At=pf#z7#p7#b[+(k+5f#8f#V1#$^$3%$@4*@4*`[#4$@}z@}z@}z@#A*#A*}z@}z@:w+:w+_w+Y.@Y.@>T@;K@i~+j~+dZ.+$#SU#kH@77@@E#yR$-p@E5 5, }o xK Hv@V7@zK Eo&,D&&u=*u=~8@_|@(|@(|@(|@(|@(|@(|@_|@^|@1f YA <|@Eu a~ $b@Dt=8.#/|@<|@@~ ')#a~ /|@(|@^|@^|@/|@YA B_#kI@^|@;! ;! Y:@+~ X:@X:@+~ ;! W:@W:@+~ t! X:@t! t! +~ ;! ]|@(7 9 O9 O9 O9 O9 9 /d@(7 ]|@;! Y:@Y:@;! xy xy a~ a~ 1f kI@lI@lI@Un$Un$%~ %~ y! y! y! y! dK#Y] Y] Y] zy@{#.{#.{#.Bn@-{ I0 89 F~ _1 w[ X]@ s SH SH SH Jc w' 2' k8 X-@v[ R} T-@8j#Qw#A&#_C@]|@.9 i@#Y=#i@#@A@(7 Y:@;! ;! W:@t! r[@rG tG -! }g *E =E i0$1C%1C%i0$i0$=E =E i0$i0$i0$i0$=E *E }g }g *E *E *E }g -E -E =E =E =E =E =E =E =E =E Eu Eu Eu Eu Eu Eu Eu Eu &E vR@[|@[|@$4@$4@$4@[|@[|@[|@:|@_|@_|@(|@/|@/|@^|@^|@@~ WA YA a~ 1f G0 wa Ld 1u Pk 2/ _N.3A uv%=u=0I.G!$-u=~V&2z%$f& l#C)+U=+VX.I1#<{#N;$:8$Z&+Z&+:8$&6$^f#|_+X_@VH#p=#}/+'2+Bb#Bb#$*$$*$$*$&6$&6$&6$&6$$*$$*$Bb#Bb#Bb#6P#av$+l#9~#yx#|V#da@da@d*$V^@L+*JN*HS#HS#X $F%=L~*bt=;u=>u==m*,u='u=Pa$Qa$)u=!u=~u={u=ml=.8 q_*X+@3D.]u=:(+):.l3.Tx&|t=Xq&Nt=|t=|t=U'#s4.<(+0+<:*Pm*66$66$TO&`E&Xw&Xw&(-=(-==^@=^@^u=^u=^u=jM#nh.Kh+T_+xc+T_+oh.Kh+Ea+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+';$d #d #US+OP*x{+23+';$HV.OP*';$US+[f.HV.OP*d #Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.Kh+G|@T_+T_+T_+T_+G|@G|@7P.oh.7P.G|@G|@Kh+oh.OP*OP*OP*OP*23+23+23+23+OP*[f.u!=x{+23+';$US+OP*T_+G|@Kh+7P.7P.7P.7P.Kh+Kh+T_+Ea+xc+T_+G|@T_+$(+G|@G|@7P.oh.oh.oh.7P.7P.7P.7P.7P.7P.7P.7P.7P.7P.oh.Kh+G|@G|@7P.oh.Kh+G|@G|@G|@Kh+Kh+7P.oh.", "is@x5.x5.x5.O7.O7.O7.x5.x5.x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.x5.x5.x5.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%O7._r+N7._r+x5.is@x5.xX%F6.F6.F6.F6.F6.F6.F6.F6.#k.#k.#k.#k.#k.#k.#k.#k.N7.xX%O7.xX%N7.N7._r+O7.M7.N7.xX%O7.O7.xX%N7.M7._r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+xX%_r+_r+_r+N7.M7.M7.M7.xX%xX%xX%_r+_r+_r+_r+_r+xX%_r+M7.%0+%0+M7._r+xX%_r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.N7.N7._r+_r+_r+#k.#k.#k.#k.v4.v4.<3+<3+#k.#k.#k.#k.v4.v4.v4.v4.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+%0+%0+%0+%0+%0+_r+M7.$B#@9.eO@@9.$B#%0+$B#M7.N7.N7.%0+$B#%0+N7.$B#$B#$B#$B#$B#$B#$B#$B#q3.q3.q3.q3.q3.q3.q3.q3.<3+<3+<3+<3+<3+<3+<3+<3+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#M7.$B#@9.$B#N7._r+N7.M7.M7.M7.M7.M7.M7.M7.M7.<3+u*=u*=v4.V^$&R+:|*/u=(u=_u=vz+f3+Sx+EM.:u=^4@$B {+B:&$g${r=kB.O[@>Q.2v@k>@;n#9T@X]$;1+|-@=l I0 R1 YD#Bv@2u=2u=[s=G,#Z=#j$#[`@@A@+L@ 9 ;! W:@t! t! X:@X:@r[@r[@>b@>b@/|@_|@$4@Kv Nt%Nt%u1$u1$GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%i0$i0$i0$=E =E *E *E *E }g *E =E -E sG >b@>b@sG sG rG >b@X:@t! +~ Y:@Y:@W:@(7 .9 @A@+L@ 9 O9 +L@/d@O9 .9 @A@RT@.9 O9 9 9 /d@O9 @A@@A@[`@N~#^m /|$po=[]#7v 'p <} {1 S} b.#i@#B&#:f@5`%,d@+H&+H&3u=3u=16&16&4u=5u=0`%0`%,=&6u=7u=8u=yt=9u=0u=au=bu=cu=du=eu=fu==%OP.;1#|r$ND@./%+h+A)+@>#g)#tD@bZ.C,+:f$Mz$.^$.^$j0+F}$m:&@4*@4*@4*&B+T.@A@@S.@Lt+Lt+`K+Yn+=m+RO@*l#b[+@4+/6+!|+.4+Wl+Wl+Nn#Nn#Nn#Nn#.I#.I#A7#B7#F_$Fb+BC$pD$pD$DC$PB$OB$(C#(C#X/%X/%U%$T%$^>$^>$,|+|T#|T#@K#d0$@G#+2#$;$W4$W4$W4$W4$9,$ (%2@$yc#xc#xc#RS*gu=hu=84%y7#PL#ni+bf#}w+io*ey+fc#3%$`[#@^$@^$#A*#A*=:#=:##A*#A*}z@}z@:w+:w+_w+Y.@/w+3]+r8+gi@u4#Sb+VX.(p%3K##8@:|$*4@4m Oh 8q 1j Cj@Hv@(M ,P iu=ju=ku=lu=AR@(|@(|@(|@(|@(|@(|@(|@@~ @~ YA @~ [|@$4@a~ p@h$#B_#(|@:|@WA 1f @~ :|@:|@^|@^|@:|@:|@@~ a~ WA +~ Y:@;! W:@X:@r[@t! Y:@;! Y:@+~ t! X:@X:@t! +~ W:@Y:@]|@/d@ 9 9 /d@/d@O9 9 /d@]|@;! ;! ;! ;! xy Kz XA XA KH#jt@Q^#Q^# ` ` ^C@(C@Dn#m .m .m .gI#gI#dK#dK#vz#vz#X] X] Bn@-{ u/@u/@~o F~ F~ 56 s SH x) x) Jc w' [} T} X-@v[ R} T-@A&#z&#A&#_C@+L@[`@C&#C&#b.#.9 ;! t! X:@X:@>b@rG tG -! -E }g *E =E i0$1C%1C%1C%1C%i0$*E *E *E *E }g -E -! tG rG sG tG -! -! -! tG sG -! -! -! -! -! -! -! -! :|@:|@:|@:|@:|@:|@:|@:|@$4@:|@(|@(|@_|@:|@_|@(|@@~ @~ @~ @~ @~ WA WA WA WA YA a~ kI@B_#QT@))#_C@i< B6 [7 &7 vU+I5 zQ%6++1j+!f#,X$n&%n)%EJ%Z'%|7$4d$({#'m%#WX.(R#^f#$*$$*$$*$&6$&6$qw$qw$&6$&6$&6$$*$$*$Bb#Bb#Bb#('$f'$+l#9~#>[#n:=da@nc@d*$V^@7Y#HS#7Y#zU#F+$!r%fn$SQ*GM$nz*mu=nu=qx*{>#ou=)u=M~%pu=zv&qu=ru=su=}n&Wn.yT*+9.):.l3.Sx&Lt=_p&tu=uu=Lt=U'#TF+ 9.dO@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@CI#CI#CI#S`%S`%CI#CI#S`%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=iM#iM#iM#iM#iM#iM#iM#iM#iM#iM#iM#iM#iM#iM#iM#iM#,C+Fu+tq*$x+$x+tq*Fu+,C+,C+,C+,C+,C+,C+,C+,C+,C+=^@&s*&s*xr*uq*uq*,C+,C+&s*xr*,C+uq*&s*=^@xr*uq*5,+$' SO+qK+5,+jM#$' qK+1<# X+ X+SO+qK+$' 5,+,0+66$ZB%)m*)m*TO&TO&Xw&Xw&kt*kt*&s*&s*o!#o!#vu=uC#nh.G|@T_+Ea+$(+7P.Kh+Ea+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+';$d #d #US+x{+[f.23+d #d #d #US+OP*x{+OP*US+d #G|@G|@G|@G|@G|@G|@G|@G|@7P.7P.7P.7P.7P.7P.7P.7P.oh.7P.G|@T_+$(+$(+T_+G|@G|@Kh+oh.7P.G|@T_+Kh+oh.x{+x{+OP*OP*23+23+US+US+d #23+[f.[f.OP*US+';$US+G|@Kh+7P.oh.oh.oh.oh.7P.oh.Kh+$(+T_+Kh+7P.Kh+G|@$(+T_+Kh+7P.oh.7P.Kh+G|@7P.7P.7P.7P.7P.7P.7P.7P.iS.oh.Kh+Kh+7P.7P.G|@$(+$(+$(+T_+G|@Kh+7P.", "is@x5.x5.x5.O7.O7.O7.Vh.is@is@x5.O7.O7.xX%xX%x5.x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%O7._r+N7._r+x5.is@x5.xX%F6.F6.F6.F6.F6.F6.F6.F6.#k.#k.#k.#k.#k.#k.#k.#k.N7.xX%O7.xX%N7.N7._r+O7.M7.N7.xX%O7.O7.xX%N7.M7.N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+_r+_r+_r+_r+_r+xX%_r+_r+N7.N7.M7.M7.%0+O7.O7.xX%xX%_r+N7.N7.M7.xX%_r+M7.%0+%0+M7._r+xX%_r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.N7.N7._r+_r+_r+v4.v4.v4.<3+<3+0q.0q.0q.F6.F6.b@r[@X:@+~ W:@;! ;! +~ (7 .9 @A@.9 O9 O9 .9 /d@ 9 .9 RT@RT@.9 O9 9 9 9 .9 +W@))#))#B&#tq=;c Bu=uy @|#Zp <} RT@[`@UE@h$#Si@Qm@.H&Cu=Du=Eu=Fu=Fu=Gu=Gu=Hu=Hu=pw@pw@Iu=Ju=Ku=v-&Lu=Mu=Nu=Ou=Pu=Qu=Ru=Su=Tu=Uu=4i 79 Vu=-B$IR@R%&Wu=2F.k%+9e@WX.+$#U+$20#6]+;[+C,+0r+<`#]n%X=+j0+7($^[*[<*[<**B+T.@3T+S.@)w+Wn+tp+Yn+e0#TY#hc#b[+$a@dd+dd+/6+Xl+Xl+@4+Nn#Nn#Nn#.I#.I#LL#A7#F_$Fb+BC$BC$AC$CC$_O#_O#X/%E0+X/%_O##;$B0+Ty#}T#|T#Y3+@K#+G#d0$yB##;$,X#W4$q'$q'$q'$W4$9,$2@$2@$v0#v0#B!$4i#pf#ZN#qB#PL#*l#%l#*m+mq#ey+Vl=`[#`[#@^$@^$#A*#A*=:#=:##A*X=+#A*}z@A@@Rt+Rt+:w+:|+3]+Y&+}_+ c%7_#5Z.~b#^l$Nu _d@T[ Pg /1 -c 2i |g =p@/|@]8@2$&#X Xu=(T%{8@(|@(|@(|@(|@(|@(|@_|@1f @~ /|@/|@_|@:|@a~ XC@')#YA /|@/|@WA WA (|@$4@[|@WA a~ _|@Eu [|@WA kI@t! Y:@]|@Y:@t! r[@t! W:@]|@;! W:@t! X:@X:@t! +~ +~ W:@;! (7 /d@/d@(7 (7 +L@O9 /d@(7 ]|@]|@]|@a~ xy Kz XA XA KH#jt@Q^#Q^#'{ Q^#(C@$] 0q#0q#c>#0q#77#b>#4C aY yz#yz#yz#>! VE ZG@8_@8_@S: }} :: S: w' SH Gn P3 Gn v[ [} T} Sj T-@R} ~)#A&#z&#A&#RT@UE@j$#i@#RT@/d@]|@;! Y:@rG sG tG -! -E }g *E *E -! -E }g *E =E =E *E *E }g }g }g -E tG sG >b@r[@X:@r[@>b@rG sG sG rG rG rG rG rG rG rG rG rG rG ^|@^|@4|@^|@^|@^|@^|@^|@[|@(|@^|@@~ /|@(|@/|@@~ 1f ]|@a~ ]|@a~ a~ YA YA a~ 1f ')#QT@))#w! X=#`V@_1 R9 U} D%.HC.zY$[1 )V._G$g7#wx$FC$Hw%{l$7_%(a$5d$0)#7]+[#n:=da@nc@da@F]#A[+7Y#zU#}Y+p+#7o*-m*0+,0+TO&)m*TO&TO&+y&+y&+y&+y&VD@VD@VD@VD@xr*xr*dr=$' nh.G|@T_+Ea+$(+7P.Kh+Ea+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+';$d #d #US+[f.[f.23+u]#,&+v]#OP*x{+US+u]#u]#';$G|@G|@G|@G|@G|@G|@G|@G|@oh.oh.oh.oh.oh.oh.oh.oh.]@+iS.oh.Kh+G|@Kh+7P.oh.T_+Kh+7P.Kh+T_+$(+G|@7P.x{+x{+OP*OP*23+23+US+US+v]#';$x{+[f.OP*US+';$';$Kh+7P.oh.y4&iS.iS.y4&y4&iS.oh.G|@Kh+oh.y4&oh.7P.xc+$(+G|@Kh+7P.Kh+G|@T_+7P.7P.7P.7P.7P.7P.7P.7P.]@+y4&7P.Kh+7P.Kh+T_+Ea+xc+xc+$(+T_+Kh+7P.", "x5.Vh.Vh.x5.xX%O7.x5.N7.N7.N7.N7.N7.N7.N7.N7.$B#M7.xX%x5.is@is@x5.O7.x5.x5.x5.x5.x5.x5.x5.x5._r+x5.Vh.Vh.x5.xX%O7.x5.Vh.x5.xX%_r+N7._r+xX%O7.8'%8'%8'%8'%8'%8'%8'%8'%<3+<3+<3+v4.v4.v4.#k.#k.N7.N7.N7.N7.N7.N7.N7.N7.xX%N7.M7.%0+%0+M7._r+O7.8'%$%`M$)m$hs%n9+'z >n#kB@O#@M^ Z{ y2*xc P^ *V&!! hr#~1 8j#Q} .9 O9 ;8 l1#8v l.#:)@CN nI@nI@CN 0> >M ]*$N=&q(*X;*aq +w%`v%(x%4r GD%GD%GD%1C%i0$=E }f 9~ Y;$Y;$Y;$Y;$-P }f [g es E'$R5@||@1|@3|@3|@3|@3|@H5@lI@Nx@Nx@]C@Nx@Nx@T:@O9 7, 36 36 .9 +L@B_#B_#a~ ')#))#@t#@t#An#MN#]m#!1 :&$.l&!1 VE@C&#h$#h@#zg#Cd#Jw&/=&MA@]%%-v=-k*;v=>v=,v='v=)v=!v=~v={v=]v=^v=/v=(v=_v=:v=>$B7#Hy#j0#y7#qB#@w# K#]i#oi+(i#8f#[&@s^@N4=7c#@^$m:&C@@4$@4T+Qb+.^$.^$+^$`[#| %1R+up+1R+Qt+X.@n%$a!$NZ.M=%7u%@J$TL$~~#T-@8j#U:@;! Y:@5h 1f a~ WA ^|@{8@{8@VT@~8@<|@:|@_|@:|@<|@$4@[|@_|@^|@/|@(|@_|@_|@/|@@~ WA @~ @~ ^|@/|@(|@(|@_|@_|@Eu vR@$4@$4@<|@[|@:|@:|@/|@/|@/|@/|@/|@/|@/|@/|@^|@^|@^|@/|@/|@(|@(|@(|@_|@/|@WA 1f ')#B_#')#')#kI@B_#))#))#B_#kI@kI@kI@kI@kI@B_#QT@QT@QT@QT@B_#QT@))#W=#W=#Dv@^J ^J Q~#_7 T-@c2 Q} Q} c2 R} [} Sj p| [} p| X-@R1 h2 R1 *! e2 d2 d2 *! n| 36 7, :} .9 +L@+W@h@#B&#$b@h@#b.#|c#/7 5h u! *8@*8@*8@$p@5G@Cu Jv Du Fu 6G@6G@Fu Fu Fu 6G@5G@6F 6F 6F $p@$p@$p@$p@*8@u! }u 5h 5h }u ]J }u |g ;8 |g 8v |g |g |g |g |g |g |g (7 <@ <@cK#+9 V:@G0 S:@S:@(7 (7 (7 (7 (7 (7 |g |g 9 +' O9 +' +L@+L@~)#~)#~)#_C@Q~#W=#c1#6u#%] P+#`<#rs%0e+G).X} `+oZ%;m$3+%6v='U+7v=8v=.a$9v=0v=av=S[&B*@bv=yd cv=dv=ev=9H@is@33+;Z+b,+D6.t4.D6.}o=[(+m3.u5. 9.l3.r4.h;#<(+.9.*r=*r=&r=&r=sX%S`%S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#sX%sX%sX%&r=&r=sX%w{@b,+w{@w{@CI#sX%&r=*r=uG#N:**r=*r=&r=&r=sX%S`%S`%CI#sX%sX%sX%sX%sX%sX%sX%sX%iM#iM#iM#iM#iM#iM#iM#iM#l]#l]#l]#l]#l]#l]#l]#l]#.X+&b=dr=dr=l]#&b=iM#&b=yE#&b==Z+dr=dr=l]#iM#.X+=Z+=Z+=Z+=Z+=Z+=Z+uq*uq*kt*(-=PB@PB@PB@kt*+y&_|*VD@z9._|*_|*_|*VD@(-=A9. == ==)A&)A&%z&.y&.y&~h&J> x{+US+M8@v]#OP*OP*:{+';$US+OP*[f.x{+23+d #:{+x{+OP*23+US+';$';$';$';$d #d #d #';$US+OP*[f.u!=$(+T_+T_+G|@G|@Kh+7P.7P.$(+T_+T_+G|@G|@Kh+Kh+7P.y4&y4&y4&y4&y4&y4&y4&y4&T_+T_+T_+T_+T_+T_+T_+T_+US+US+US+US+US+US+US+US+u]#u]#d #US+23+OP*x{+[f.l}+9g.Bz$Bz$>( l}+>( Bz$9g.>( >( >( l}+l}+JI$JI$$(+xc+Ea+5A.Ea+$(+G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@T_+T_+T_+$(+$(+xc+xc+T_+Kh+", "x5.Vh.Vh.x5.xX%O7.x5.xX%_r+_r+N7.N7._r+_r+xX%N7.N7.xX%O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5._r+O7.is@is@O7.xX%xX%x5.x5.O7.xX%_r+_r+_r+_r+_r+8'%8'%8'%8'%8'%8'%8'%8'%@o>&9]&as$|&#|&#}F.}F.nv=nv=nv=AF@;I@h&@Cr+4|+0G#=[@D]#rm#;,$PH#9e+hs%%c$CJ.QM.DL.U4+>K.JR._N.lb .4 /m&q4&:&$)1 i@#.i#zn#g1#=! t/@({+k9$=M xo =M @L@s}%F%$+, xr$xr$3k :0 ~a (x%+y i0$i0$i0$i0$=E Z;$Z;$],$],$4h 4h 4h @I$=H$=H$E'$R5@%2@}|@2|@2|@2|@2|@EN#I~ 0~ H5@lI@H5@H5@G0 +L@36 36 n| .9 +L@B_#B_#kI@QT@$~ $~ )a&}`@]N%Yt='G !1 .l&!1 'd@gt@$b@h$#Jw&nq&a3&`t=4u=ov=H7&pv=qv=qv=rv=sv=tv=uv=vv=wv=J(&xv=yv=zv=Av=Bv=Cv=Dv=Ev=Fv=Gv=Hv=c9*2v=Iv=0B Gv ]x%|/%e_@_Q.T-&Jv=6I.;z@oo@_v@ c%y'#Kq@S@+U0+TK+(8$fB@]n%][*Kv=5v=rb+2G+6=@zD+zD+w)+X#>X#!X#!X#>X#>X#^>$}T#)6+.I#if#p7#U4#PL#@w#@w#nB#cf#(i#7f#[&@s^@N4=7c#@^$m:&C@@4$@4T+Qb+.^$9g=+^$`[#np+Xn+tp+1R+_w+^^#av$zx#f>*Lv=4|&: %-S @~ QT@+W@B_#YA WA YA a~ YA @~ /|@(|@_|@:|@:|@<|@:|@(|@_|@[|@<|@:|@_|@/|@/|@(|@_|@(|@/|@@~ WA ^|@^|@/|@(|@_|@:|@:|@[|@vR@vR@$4@<|@[|@:|@_|@_|@^|@^|@^|@/|@/|@(|@(|@(|@^|@^|@/|@/|@(|@(|@_|@_|@_|@/|@@~ a~ kI@')#')#')#1f B_#!)#!)#B_#1f 1f kI@kI@kI@')#B_#QT@QT@B_#B_#!)#))#+W@w! w! w! w! uR@n| *! d2 d2 *! Q1 ]1 o| (1 o| F> o| Q1 #, `3 #, *! d2 #, #, <} :} ,p n| @A@.9 ))#XC@h@# p@e>#h@#]M a7#|g u! $p@7G@7G@:C@6F Fu -z -z Cu 6G@5G@5G@Fu 6G@6F 7G@$p@mt@]J ]J }u ]J ]J }u 5h 8v ;8 (d@a7#(d@;8 (d@k[#'m#k[#a7#k[#a7#a7#a7#/7 /7 (d@ 9 S:@fG#gG#0Y _7 ~)#_C@_C@+L@+L@+L@+L@+L@+L@a7#a7#qI#qI#,p ,p :} :} A&#z&#z&#y&#c1#>{ %] Qp@Mv=z! Ci=;b=:Q.5Y.,t#5&#NQ$ww%My$/d$W_#.*+4d$5d$7o@I1#'M$'M$'M$'p$J3$w4#w4#w4#'2+$*$37$e;%Z.+Z.+b>%47$N)$%*$%*$T4$T4$T4$=k$=k$T4$T4$T4$%*$%*$dN#dN#dN#25%R!$0x$Q.$t *&u%oz@s$+['+b{$22+FJ$oZ%Nv=6[*'W*Ov=st$Pv=Qv=Rv=j2 6@@[c*Sv=Xi&j2&Tv=Uv=Vv=Q%+pD&{e.( l}+>( Bz$Bz$Bz$9g.9g.9g.>( >( >( Kh+G|@T_+$(+T_+G|@Kh+7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@T_+T_+T_+G|@G|@T_+T_+T_+G|@", "x5.Vh.Vh.x5.xX%O7.x5.x5.O7.xX%N7.N7.xX%O7.x5.O7.xX%xX%xX%xX%xX%O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.N7.xX%x5.x5.xX%_r+_r+xX%_r+_r+xX%xX%_r+N7.M7.M7.F6.F6.F6.F6.F6.F6.F6.F6.[{.[{.8'%=w6*H-*H-*=2*m%+B*+l%+9]&<-@`O@q1@`|#q=#q=#3+$o>&o>&fD@6+*6+*|&#|&#}F.}F.}F.Qv#h>@1&#xX@sL.Cr+u@+(B+ZD.,-#(5@~*@Pp@vc+E(@MX$MX$'<$|L.e_@:1 &7 <0 .4 Hj C,#Wt=z, VE@JN#6!#i[#R1 Ti il If If .r :t 3' ^1 5, @, 5r 5r 5;#Iu a|$as Cu =E =E i0$i0$i0$1C%=E =E ],$^,$+I$^,$^,$],$E'$(0@dP@||@}|@1|@1|@1|@4|@%W@{M I~ I~ I~ I~ +9 @A@n| n| n| @A@.9 QT@B_#!)#!)#S~#S~#'a&oi&ij#a+&'G !1 !1 !1 :f@Si@gt@B&#&h&&h&26&4u=]%%-v=+w=@w=#w=#w=$w=m[*%w=&w=*w==w=-w=;w=>w=,w='w=)w=!w=~w={w=Kb@]w=^w=/w=cu=(w=ZD#9q ^*$L2$|##;n#C;@QB%6I.|e%z(#_v@ c%y'#Kq@S@+U0+TK+ib#J,@]n%][*O[$4v=xf=yI+AD+=B+3R+w)+:w+oy+v)+G:+G:+]_+]_+gi+Xg+>k++_+Sl+Lb+#4+(6+cd+/6++*$!|+ 4+ 4+`3+F_$o'$A)$A)$E_$]6+3[+Nr$$2+hd+%2+X3+X3+%2+X3+.K#My#%w#My#My#.K#^>$^>$^>$^>$,X#,X#,X#,X#Ty#}T#)6+.I#if#p7#U4#U4#Un# K#_i#*l#(i#nq#*w+fc#8c#S[=`[#@4*C@@4$@4T+Qb+j0+.^$F}$B@@| %Xn+1R+vD+f^@,2+1P+F3$>1%_w=}.%r]&n$#@~ B_#!)#')#YA WA WA WA @~ /|@(|@:|@:|@[|@:|@:|@_|@/|@(|@:|@[|@_|@/|@/|@(|@(|@(|@(|@/|@^|@@~ /|@(|@_|@_|@:|@[|@<|@<|@$4@$4@<|@[|@:|@_|@_|@(|@^|@^|@^|@/|@/|@(|@(|@(|@/|@/|@(|@(|@(|@_|@_|@_|@:|@(|@^|@WA a~ 1f kI@kI@1f ')#QT@QT@kI@1f 1f kI@1f kI@')#B_#QT@QT@B_#B_#!)#!)#!)#+W@XC@{Y@8.#[`@'p `3 `3 #, d2 Q1 ]1 o| o| F> ^1 F> (1 d2 d2 d2 #, #, `3 7v {1 {1 'p <} +L@RT@{Y@8.#XC@w! 8q#w! 1f ;! +~ >b@sG -! -! tG -E *E i0$=E -! rG >b@>b@>b@r[@t! Y:@(7 9 +L@@A@+L@O9 O9 O9 +L@@A@RT@bP@[`@bP@RT@bP@b.#UE@b.#uR@[`@uR@uR@bP@bP@RT@RT@@A@AC z&#y&#`V@%47$%6$cN#cN#cN#N)$N)$90$90$90$90$90$N)$cN#cN#.3%.3%cN#.3%f'$yx#_f*oz@.[@''$u.*U^@U^@FJ$Ck*:w=( 9g.aH@Bz$>( l}+9g.aH@aH@aH@aH@Bz$Bz$9g.9g.9g.y4&y4&7P.7P.Kh+7P.7P.oh.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@T_+T_+T_+Kh+Kh+Kh+Kh+Kh+G|@", "x5.Vh.Vh.x5.xX%O7.x5.Vh.is@O7._r+_r+O7.is@Vh.is@x5.xX%N7.N7._r+O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.M7._r+O7.O7._r+N7.N7.xX%M7.N7.xX%xX%xX%N7.%0+$B#F6.F6.F6.F6.F6.F6.F6.F6.[{.[{.8'%F6.&[-+g>@fD@6+*6+*|&#as$|&#E_+K9#K9#h>@`J.kh#++@xG.9x$PP.!%@&N@gk@;,$Qe@t)%['$E(@M+@n9+f]@>n#t7 G`+wc hr#WE UE .l&O~#Ut&}n Q@$.<#_: 4 4 Yk s[ []#`3 P1 [u l@#9s k@#0s Mw Fu Fu -E }g =E i0$GD%4Q%*E *E =E i0$],$=E Y;$Z;$5'$E'$(0@R5@dP@%2@||@||@3|@4|@%W@{M EN#EN#EN#+9 @A@n| ,p ,p @A@.9 QT@B_#w! ))#S~#:r@'a&g@#{N%6E&[Q%)d@!1 !1 :f@:f@:f@Zo@Du=Du=5u=]%%-v=t~*aw=bw=cw=dw=ew=fw=gw=hw=iw=,:&jw=kw=lw=mw=nw=Bv=ow=pw=qw=Ou=rw=sw=tw=uw=vw=ww=m[#@y Yv%{}+.B#6e+-9$hT.|e%tW%oo@pX+<6$Kq@S@+Y&+;K@ib#J,@+N+<<*O[$^[*j0+RK+RK+Gn+Gn+$N+:w+&>+v)+vp+/|+!k+:k+_k+dy+(+@gi+-2+-2+Og+#4+(6+~_+Jb+9[+I0+ 4+ 4+`3+0_%o'$o'$F_$]6+3[+Nr$hd+%2+X3+.K#My#X3+.K#.K#My#My#My#.K#.K#B0+#;$#;$#;$$;$$;$$;$$;$Ty#z0+)6+.I#if#p7#ri+U4#Un#Un#=l#*l#bf#nq#&w+*:@8c#S[=`[#@4*C@@4$@4T+Qb+#A*X=+}z@3T+A@@wD+wD+[P+g[+uy+4h#8%%t.&xw=yw=<[%~M WA ')#B_#1f WA @~ WA ^|@/|@(|@:|@[|@[|@[|@[|@:|@(|@^|@/|@_|@:|@_|@/|@(|@(|@(|@(|@/|@^|@^|@@~ _|@:|@:|@[|@<|@$4@vR@vR@$4@<|@<|@[|@:|@_|@(|@(|@^|@^|@^|@/|@/|@(|@(|@(|@/|@(|@(|@(|@_|@_|@:|@:|@:|@_|@/|@@~ YA a~ 1f kI@kI@')#QT@B_#1f a~ 1f kI@kI@')#B_#QT@QT@QT@QT@B_#!)#!)#!)#+W@XC@8.#8.#b.#4' Vr 7v `3 d2 *! (1 ]1 o| N1 ^1 F> (1 d2 d2 d2 `3 7v Vr e5 4' 4' /0#/0#.9 uR@ p@8.#))#kI@KH#kI@/|@X:@rG tG -! -E -E -E sG -! -E tG X:@Y:@;! ;! ]|@(7 9 +L@@A@uR@[`@b.#uR@bP@bP@bP@uR@[`@b.#UE@i@#b.#[`@b.#i@#Cv@UE@b.#b.#b.#b.#b.#b.#b.#b.#b.#WH v{ P} QF#QF#sR#sR#sR#QF#QF#j$#j$#j$#j$#QF#Zp Z8 RL@0J@^7 ^7 +<#(o ~1 XQ@'! s:%TD@zw=Wi Aw=)}+_R#SP.jn$u[#F)$Xo${f#EU.g~@D)+S)@ *+y4#@d$N;$J1#'p$'p$'p$k~+w4#w4#^f#^f#'2+$*$37$e;%Z.+Z.+b>%47$T@+.3%.3%cN#cN#N)$N)$N)$90$90$N)$N)$cN#.3%Jn#Jn#cN#Bb#f'$uy+-1#p}@''$Jm*A]%22+i|+vY*Bw=;z%;z%ss%Cw=Pv=Qv=3y*Dw=Ew=Fw=|*Gw=Hw=Hw=Iw=+'&uC#N:*n3.:^+o3.n3.n3.h;#.9.h;#sQ@.9.<(+h;#n3.sQ@<(+w{@w{@w{@w{@w{@Q+&Q+&Q+&CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#Q+&j(#w{@sX%*r=*r=&r=&r=&r=sX%S`%S`%S`%CI#S`%S`%sX%&r=&r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%iM#iM#iM#iM#iM#iM#iM#iM#l]#l]#l]#l]#l]#l]#l]#l]#iM#l]#=Z+=Z+&b=iM#&b==Z+/W%.X+iM#l]#=Z+dr=dr==Z+C{@C{@=Z+=Z+=Z+=Z+uq*uq*z9.z9.z9.z9.+y&+y&Xw&_|*_|*uq*&s*=^@=^@&s*z9._|*%z&%z&#d+#d+#d+#d+#d+`b&xE*23+US+';$OP*[f.x{+23+23+23+US+';$';$US+23+OP*';$d #d #d #';$US+23+OP*[f.x{+OP*23+US+US+US+23+y4&y4&oh.7P.7P.Kh+G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.oh.oh.oh.oh.oh.oh.oh.7P.7P.7P.7P.7P.7P.7P.7P.US+US+US+US+US+US+US+US+OP*23+23+23+US+';$';$';$>( Bz$aH@Bz$9g.>( 9g.aH@Bz$Bz$Bz$Bz$9g.9g.>( >( iS.iS.y4&oh.7P.7P.7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@T_+T_+T_+T_+G|@Kh+7P.7P.G|@", "x5.Vh.Vh.x5.xX%O7.x5.Vh.is@O7.xX%xX%O7.is@Vh.is@x5.xX%N7.N7._r+O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.M7._r+O7.O7._r+N7.N7.xX%M7.N7.xX%xX%xX%N7.%0+$B#=H-*H-*=2*m%+B*+l%+<-@`O@XF@XF@>D%Db#Db#:B@q1@sH&`|#q=#[-+g>@fD@6+*fD@6+*)m+f*$r=#Qv#Qv#h>@`J.;N.[ +|-+YD.YD.'4+o~$e~#.6$>$%8:@`M$_)#dv$a>&g!@W4+-K.A%@k.@~o ] WE K1 O^#Xk Wt=Q@$p$$Q@$A_#6v L6*f>#K,#qI#`O%2i 5`$0B ! $7G@rG rG sG 6G@Cu -z 9K%-z -z VH%VH%i0$Jv *E }g 5'$5'$5'$E'$(0@R5@R5@dP@2|@3|@4|@{M EN#EN#EN#+9 +L@36 36 n| @A@@A@!)#QT@XC@))#:r@:r@)a&yz&'t&a+&[Q%)d@'d@:f@FN#Rm@Ao&Ao&Pw=5u=ov=Qw=-u&Rw=vo&Sw=Tw=Uw=Vw=Ww=Xw=Yw=Zw=`w= x=.x=+x=@x=#x=$x=ow=%x=&x=*x==x=-x=;x=>x=,x='x=_o cq /x%r<+o1#5e+-9$)x=|e%tW%z(#pX+<6$~ +S@+Y&+;K@ib#H,@.N+1h#4:*1h#F}$.N+RK+RK+Gn+$N+:w+rr+v)+|]+^/+!k+:k+{/+{/+YA+YA+]_+]_+Qn#Og+|/#n8+v-$Jb+md+I0+I0+ 4+G0+0_%0_%F_${6+Nr$$2+hd+%2+X3+.K#.K#X3+X3+.K#.K#.K#.K#X3+%2+B0+B0+#;$#;$$;$$;$$;$$;$5V#)6+>6+V4#=2+a[+ri+ri+Rg+Rg+bc#%l#bf#}w+@m+ey+S1#70#`[#@4*T.@B@@4T+k0+h~+h~+3T+A@@A@@:w+Y.@[|+^R#>[#Z)+E-%z4%#C%8:%`~#YT@WA 1f 1f a~ WA @~ @~ /|@(|@_|@:|@[|@[|@[|@[|@:|@(|@^|@/|@_|@:|@_|@/|@_|@(|@(|@/|@^|@^|@^|@^|@:|@:|@[|@<|@$4@vR@Eu Eu $4@$4@<|@[|@:|@:|@_|@_|@/|@/|@/|@/|@/|@/|@/|@/|@/|@/|@/|@(|@(|@_|@_|@_|@_|@_|@/|@^|@WA a~ kI@')#')#B_#QT@B_#1f a~ 1f ')#')#B_#QT@!)#))#))#!)#!)#))#w! 8.#h@#8.#{Y@{Y@b.#S} 4' /0#'p :} ,p n| 36 36 +' /,@+' ,p <} 'p <} Vr e5 vb vb Zp S} 4' 4' bP@b.#h@#w! 1f /|@=8@(|@[|@rG sG tG tG tG tG tG +~ X:@X:@W:@(7 O9 +L@+L@@A@RT@RT@bP@uR@[`@[`@b.#uR@uR@bP@bP@uR@uR@[`@b.#b.#uR@bP@bP@[`@b.#uR@RT@RT@RT@bP@uR@b.#UE@i@#i@#WH WH WH P} P} P} QF#QF#P} P} P} P} P} P} v{ S} !x=!r@}+#RL@1m 16 Yk _: #p N^ Se Wg Cp#Ot%~x= x+ih$-S+.1%3w$Fi${f#Wm#;{+Z]$A0%>>+,Z#_a$Ej$L1#:8$J3$'p$w4#w4#w4#^f#Bb#Bb#bN#37$37$e;%46+46+b>%47$T@+.3%.3%cN#cN#N)$N)$N)$09$90$N)$cN#.3%Jn#.l#.l#Bb#x_%Kq@mJ#>5@rg@rQ#2p#SL$bk@E+@Ck*{x=]x=^x=kR*/x=2U%(x=_x=:x=0A ( Bz$aH@9g.9g.>( >( l}+l}+l}+l}+oh.oh.oh.oh.7P.Kh+G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@T_+T_+T_+xc+$(+G|@7P.7P.Kh+", "x5.Vh.Vh.x5.xX%O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.O7.xX%xX%xX%xX%xX%O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.N7.xX%x5.x5.xX%_r+_r+xX%_r+_r+xX%xX%_r+N7.M7.M7.D%Db#R3#`|#q1@q1@`|#q=#[-+g>@g>@fD@)m+)m+P$+0e@0e@R]+3I.P/+G)+,N.uL.vL.HG.VJ.g#@s'@rP$rP$.6$&{#&-#-;%NB@Zx#f]@f]@>f#hP@YG@k.@*@.xb XQ@$, UE $, kx uy A_#2u=`p M9 9J@};#_c#Sw#}r=4!#Y:@Y:@Y:@Y:@+~ $p@5G@Fu -z -z VH%VH%VH%VH%-z Jv u1$|f G'$G'$|f 5'$E'$(0@}|@1|@3|@4|@{M {M EN#+9 (7 (,@+' 7, .9 @A@!)#!)#+W@!)#S^#R~#jE#hj#{N%jj#[Q%VE@'d@:f@FN#Y+*&h&M,&4u=]%%Qw=8x=Rw=vo&9x=9x=0x=In&ax=bx=cx=dx=ex=fx=gx=+1&hx=ix=jx=kx=lx=mx=;S.nx=ox=px=qx=E&*BJ&rx=sx=m| GT P;%wd$zX@}Q.9<+i-+1Y+tW%DT# c%+l#aN#Y&+yM@g[+'T@.N+1G+~k#1h#F}$.N+RK+AD+AD+3R+$N+A@@wD+mp+Yn+~k+]_+_k+_k+dy+_k+]_+)k+ji+4f#hi+|/#dx$dx$ze$md+md+I0+G0+G0+0_%`3+Z3+$2+$2+$2+hd+hd+hd+%2+%2+%2+X3+X3+%2+%2+$2+$2+A0+A0+^>$^>$,X#,X#,X#^>$)E#'6+>6+V4#=2+)i#)i#)i#U4#U4#ni+(k+bf#}w++m+&w+S1#70#x]$3%$T.@B@@4T+k0+[P+[P+A@@:w+[P+Y.@[|+,2+9~#E]#F:%[C%TY$WJ$}_%^D%{M YA YA YA YA WA @~ ^|@/|@(|@_|@:|@[|@[|@:|@:|@:|@_|@/|@(|@:|@[|@_|@/|@_|@(|@/|@^|@^|@^|@^|@/|@:|@[|@[|@<|@$4@vR@Eu Eu Eu vR@vR@$4@<|@[|@:|@:|@_|@_|@(|@/|@/|@^|@@~ @~ ^|@^|@^|@/|@/|@(|@(|@(|@(|@/|@/|@^|@WA 1f ')#B_#QT@!)#!)#B_#kI@1f ')#QT@!)#!)#))#w! w! w! +W@+W@XC@B`%Rm@$b@{Y@{Y@UE@i@#/0#'p <} ,p ,p ,p ,p :} n| 36 n| <} /0#4' /0#t[ t[ t[ t[ Zp S} /0#/0#uR@bP@))#kI@^|@:|@>8@$4@[|@>b@>b@r[@r[@X:@X:@X:@(7 ;! ;! (7 +L@@A@@A@.9 bP@RT@RT@RT@@A@@A@.9 .9 .9 .9 +L@+L@+L@+L@.9 @A@@A@+L@O9 O9 .9 .9 O9 9 9 O9 +L@.9 @A@RT@bP@uR@WC@WC@A&#A&#A&#A&#A&#A&#z&#z&#zC 3C 3C 3C <} ~7 tx=ux=:+#|6 &l Kc #[ xa S1 2z+^L$F~&:g%:g%[(&C%%&R$4w$pl%Uj$)2+:'$5h#km$rr%ar$>b$a9$Ej$00$BT$J3$k~+w4#w4#^f#^f#'2+'2+bN#37$37$e;%46+46+b>%47$%6$cN#cN#cN#N)$N)$90$90$09$90$N)$cN#.3%.l#-t@~ +}_+gi@mJ#KL#<7@rg@(3@/L#>m+m6+/-@Bw=vx=^x=6r=wx=nu=+D Rv=dK&av=e,@( >( >( l}+l}+JI$JI$JI$Kh+Kh+7P.7P.7P.Kh+G|@T_+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@T_+T_+T_+$(+$(+G|@Kh+Kh+Kh+", "x5.Vh.Vh.x5.xX%O7.x5._r+xX%x5.is@is@x5.xX%_r+N7.N7.xX%O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5._r+O7.is@is@O7.xX%xX%x5.x5.O7.xX%_r+_r+_r+_r+_r+#k.#k.#k.#k.#k.#k.#k.#k.#k.#k.#k.#k.#k.v4.v4.v4._r+_r+_r+_r+_r+_r+_r+_r+_r+_r+N7.M7.M7.M7.N7.N7.F6.#k.v4.#k.F6.F6.6+V4#=2+)i#)i#`b$qi+qi+b[+(k+/k+}w++m+BR#tD+/f#| %3%$T.@B@@4T+k0+Qt+Qt+Qt+m;@>2+X&+K:+8~#_'$5h#uy%g2%4G$|w$Pe T:@I~ YA WA WA WA @~ @~ ^|@/|@/|@_|@:|@:|@:|@_|@_|@<|@:|@(|@_|@[|@<|@:|@_|@:|@_|@/|@^|@@~ ^|@/|@/|@:|@:|@[|@<|@$4@vR@vR@Eu Kv Kv Eu vR@$4@<|@<|@[|@<|@[|@:|@(|@^|@WA YA a~ WA WA @~ @~ ^|@^|@^|@/|@^|@^|@^|@@~ YA 1f B_#!)#))#))#))#QT@')#kI@QT@))#+W@+W@XC@{Y@{Y@{Y@XC@XC@h$#Dt=l`&Nk@Rm@8.#8.#j$#b.#'p <} ,p n| ,p ,p :} {1 <} :} <} 4' Zp i[#Zp Yk Yk Yk Yk S} 4' {1 'p RT@O9 WA /|@_|@:|@>8@$4@1|@Z:@H~ <@>8 +9 V:@V:@S:@G0 V:@S:@U:@_7 T:@G0 T:@T:@S:@G0 G0 V:@V:@V:@V:@V:@+9 >8 >8 +9 +9 V:@T:@G0 +9 +9 G0 G0 +9 <@G0 V:@V:@V:@V:@V:@V:@V:@Sr Sr Sr ,8 ,8 ,8 W-@W-@'8 '8 '8 Md Md Md Md Yq {7 %y=&y=&8 dI#_m <7 ep DL.k>@M[$@{@1c%6>%8u%=`$y[#[3%|(%U-$sP$L#$1/%A3%PX#c/$=c$nw$Ej$c9$d8$47$$*$w4#$*$Bb#Bb#'2+bN#bN#n%$pw$pw$b>%w-$w-$I$+d8$Rb$J$+J$+bv$bv$bv$4($4($4($bv$J$+%6$('$f'$+l#=t@! +FM@y=4U%) *Pe=,y=21&Wp ev=H> gh*Q2*>~@&b=XT#h;#o3.v5.sQ@h;#t4.t4.h;#v5.h;#sQ@sQ@n3.v5.n3.sQ@Q+&Q+&Q+&w{@CI#CI#CI#S`%CI#CI#CI#CI#CI#CI#CI#CI#o&=CI#&r=sX%j(#o&=j(#S`%&r=&r=&r=sX%sX%sX%sX%sX%&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%iM#iM#iM#iM#iM#iM#iM#iM#l]#l]#l]#l]#l]#l]#l]#l]#l]#l]#=Z+&b=yE#yE#l]#o!#l]#&b=&b=&b=&b=l]#l]#=Z+C{@C{@=Z+=Z+=Z+=Z+uq*uq*kt*VD@z9.z9.+y&%z&)A&A9.(-==^@xr*uq*uq*uq*z9.z9.Xw&Xw&`E&TO&TO&#d+#d+`b&zi.y*$c> xE*3<@17*zi.xE*x{ nh.J> xE*xE*xE*J> J> U*@xE*17*17*J> 17*xE*xE*..=..=U*@xE*17*xE*xE*U*@G|@G|@Kh+Kh+Kh+Kh+7P.7P.y4&oh.oh.oh.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.7P.7P.7P.7P.7P.7P.7P.US+US+US+US+US+US+US+US+23+23+23+US+US+US+US+US+9g.aH@}f.bH@Bz$9g.Bz$bH@9g.9g.9g.>( >( >( l}+l}+T_+G|@7P.oh.oh.oh.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@T_+T_+T_+7P.Kh+G|@T_+T_+T_+", "x5.Vh.Vh.x5.xX%O7.x5.%0+_r+x5.Vh.Vh.x5._r+%0+$B#M7.xX%x5.is@is@x5.O7.x5.x5.x5.x5.x5.x5.x5.x5._r+x5.Vh.Vh.x5.xX%O7.x5.Vh.x5.xX%_r+N7._r+xX%O7.#k.#k.#k.#k.#k.#k.#k.#k.F6.F6.D%.7#Vx#}T$}T$q1@q1@`|#`|#q=#[-+[-+:X@#o+&h#P$+P$+>{+>}&tz@3I.+{@+{@F)+2I.: +G)+'N.++@'N.i>@Pw#}p#*{#*{#eX#`F@tc+t,%]L$rV@ G@XP.Qe Tk#i'#3C yz#0Y _7 ~)#bP@RT@RT@bP@WE@WE@.i#n| _} 46 L1 (} 46 :} 7, /,@(,@l.#(t ^0@V^#Mw Hv as =E G'$UH%UH%UH%oF%|f 5'$E'$R5@%2@}|@1|@2|@3|@.<@t! _t fw (,@+L@.9 ))#+W@B_#kI@jt@:r@0.#hj#]N%hj#]m#Si@Cd#'t=nq&&h&4u=c4&{y=Ck&aw=9x=]y=^y=/y=(y=_y=:y=y/&6+W4#V4#=2+Wg+`b$`b$'i#'i#Ng+/k+WN#WN#[w++m+Sn+uD+np+1=@T.@B@@4T+k0+g~+g~+Qt+/w+X&+K:+8~#pX+56+&K$Vt&{j%9E$DR@V:@+L@1f YA @~ @~ @~ @~ @~ ^|@^|@/|@(|@_|@_|@_|@(|@(|@<|@:|@_|@:|@<|@$4@[|@_|@:|@_|@/|@@~ @~ ^|@/|@(|@_|@:|@:|@[|@<|@$4@vR@vR@&E &E Kv Eu vR@$4@<|@<|@$4@<|@[|@(|@^|@YA a~ 1f YA YA WA WA @~ @~ @~ ^|@@~ @~ @~ @~ YA kI@QT@))#+W@+W@+W@!)#')#')#!)#+W@w! XC@{Y@8.#8.#8.#8.#{Y@gt@Pk@gy=HN#Dt=h@#h@#Si@[`@<} ,p n| n| ,p :} <} 4' {1 'p {1 Zp (o kx (o []#s[ s[ Yk S} /0#<} :} +L@;! :|@$4@[|@_|@b~ <|@3|@H~ >8 V:@S:@T:@U:@U:@S:@V:@+9 V:@G0 G0 +9 H~ <@H~ H~ H~ H~ .<@.<@.<@H~ .<@.<@Z:@Z:@Z:@.<@.<@V:@>8 H~ <@>8 >8 H~ Z:@V:@+9 >8 <@.<@Z:@+<@`:@:)@:)@:)@:)@:)@s! 8~ 8~ Lc Lc {Z#{Z#{Z#{Z#ER@Lc #E hy=p%#,O@sa _g ZZ |##2O.vv%PA$_V#=`$#J$G0%:>%_T#Gz$wp&;i#`a$M$+98$sD$po%K$+nw$a8$c9$47$pw$e;%$*$w4#Bb#Bb#Bb#'2+bN#bN#n%$pw$pw$b>%w-$w-$I$+d8$Rb$bv$bv$bv$4($4($%K$%K$4($bv$J$+%6$('$+l#9~#8~#KL#) +) +) +zT&m9@=*y=iy=jy=ky=6u*$P*{1$ly=my=Vc$ny=S%0@@y*$xE*3<@J> nh.17*zi.17*U*@..=U*@J> x{ c> zi.zi.zi.zi.J> 17*xE*U*@..=U*@xE*xE*xE*xE*U*@..=Kh+Kh+Kh+7P.oh.oh.y4&y4&y4&y4&oh.oh.7P.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+US+US+US+US+US+US+US+US+US+US+US+US+US+US+US+US+9g.aH@}f.bH@Bz$9g.aH@bH@aH@aH@Bz$Bz$9g.9g.9g.>( T_+G|@7P.y4&iS.y4&oh.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+G|@G|@T_+T_+T_+]@+y4&Kh+T_+xc+xc+", "x5.x5.x5.x5.x5.x5.x5._r+O7.is@Vh.dD.dD.Vh.is@dD.Vh.x5.xX%xX%xX%O7.x5.xX%xX%xX%xX%xX%xX%xX%xX%_r+xX%O7.O7.x5.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%8'%8'%8'%8'%8'%8'%8'%8'%F6.F6.8'%8'%F6.=![*=2*B*+)]=7T@]R@;z@z9#z9#WF@T6#.7#.7#.7#R3#R3#q1@:B@:B@]R@7T@7T@43@43@W #4Z@ja@#o+#o+)m+%;$>}&7J#&[@`@+Bp+f<#{f#YJ.AF@sL.sL.h&@la@s=#4&#h|#Nj#rm#wC$#)%#)%6<$]L$Vi Sh Sh Sh Sh Sh Sg Sg >! P9 U-@Sr ,8 ,8 Sr V-@:7 ;[ #9 h< Ti -[ u[ #, d2 *! (1 ]t [u {T#0s =^$*E |f oF%~J%~J%~J%UH%UH%oF%|f (0@%2@}|@2|@4|@H~ sG hB Yr _t ]|@O9 !)#+W@QT@QT@R~#:r@'a&0.#hj#ij#TJ#Fa#Cd#nq&`t=4u=5u=4u=yy=+w=^y=Lx=Kx=zy=Ay=v~&By=Cy=Dy=Ey=Fy=Gy=Hy=Iy=]2&Jy=yv=Ky=Ly=My=8o&8o&#w.Ny=Oy=e5@Py=Qy=Ry=dy=ey=uM&Mk@ 8 F&#-z$Ug 3j+-1@HB%n'+p]+@o+7Z..l#47$Y&+h[+^^#hX@3 @3R+=B+1G+SK+H)@dX+3Z+c^@ky+$B+vD+mp+ L+[w+~k+:k+]_+_k+[]+ o+7d+Z;#Z;#gJ#gJ#bd%bd%xy$xy$md+Ib+;Y*;Y*HX*l%$,6+2[+3[+5t#%w#%>%I#%X3+%>%cE#-|+-|+2[+cE#%>%cE#h8+]6+Z3+~6+}T#}T#A0+B0+~6+&2+.I#+4+nd+]f+`b$E`#E`#E`#bf#5f#af#4V#3V#$m+sp+Tn+uD+/f#4T+4T+4T+4T+Rt+Qt+Y.@hX@DI+e;%6_#/,%z@%y[#f+&$I$g9%W-@(7 5h ')#kI@1f a~ WA ^|@/|@/|@(|@/|@^|@^|@/|@_|@[|@<|@:|@:|@:|@:|@_|@_|@_|@_|@(|@(|@^|@@~ WA WA @~ @~ /|@/|@(|@:|@<|@$4@vR@Eu u1$&E Kv Eu vR@Eu Eu Eu :|@:|@_|@(|@/|@@~ @~ WA @~ @~ ^|@^|@^|@^|@^|@^|@(|@/|@^|@/|@(|@/|@YA kI@))#XC@{Y@+W@')#B_#XC@$b@XC@h$#B&#h$#h$#$b@ p@w! gt@5`%5`%B&#h@#B&#FN#5`%VE@j$#[`@uR@b.#Cv@Cv@i@#j$#Cv@i@#UE@i@#Cv@j$#i[#[]#2k=[]#7v i[#A_#Zp fw (7 X:@Eu Kv [|@@~ zK ^|@lI@gG#gG#0Y 0Y 0Y 0Y 0Y @+/$]M$Ho$ET }m ,O@eI#f2 2' )8 8O.PU.SP.={#IB$A[#aT+7%%6/%f2%c!$j|#35%x1#Z+$PX#Q'$c/$&u$=c$Ms$%K$c8$qn%d8$47$Bb#Bb#Bb#Bb#e;%e;%e;%e;%5($5($kF$jF$jF$jF$%/$jF$!I$qn%27$27$qn%;u$;u$;u$c8$qn%Rb$ ^$6P#Kn#nI%8~#Xv+cz@) +) +UN#]o+rG+|x#A;@Bw=Sy=O0@Bf*#e*=z*+N*PU%Ty=|Q.Uy=Ne=<1*Ji 11&Vy=/i*Wy=Xy=#z@l]#w{@S`%t4.o3.v5.h;#sQ@<(+<(+sQ@h;#n3.o3.t4.t4.o3.n3.h;#CI#CI#CI#CI#CI#CI#CI#CI#S`%CI#CI#CI#CI#w{@w{@w{@S`%S`%S`%sX%&r=&r=*r=*r=CI#*r=*r=CI#CI#*r=*r=CI#*r=sX%S`%S`%&r=*r=&r=S`%S`%S`%S`%S`%S`%S`%S`%S`%iM#iM#iM#iM#iM#iM#iM#iM#l]#=Z+dr==Z+iM#yE#iM#&b=iM#iM#&b=&b=l]#l]#l]#=Z+l]#l]#&b=&b=iM#yE#yE#yE#C!@^^@l]#dr=dr=l]#Fu+$x+_|*_|*_|*z9.+y&+y&.y&VD@ps+=^@#x++v=+v=#x+(-=ps++y&+y&TO&TO&TO&TO&TO&TO&0, 0, {h&~h&~h&>S%>S%%' {h&{h&0, 0, &, &, Av&Av&{h&{h&{h&{h&{h&{h&{h&{h&{h&{h&{h&{h&{h&{h&{h&J> oh.oh.oh.oh.oh.oh.oh.oh.w5&w5&]@+iS.oh.7P.Kh+G|@G|@G|@Kh+Kh+7P.7P.7P.7P.7P.7P.7P.Kh+Kh+Kh+G|@G|@23+23+OP*[f.u!=[f.US+:{+OP*OP*x{+[f.[f.x{+OP*OP*JI$>( Bz$aH@bH@bH@aH@Bz$9g.9g.Bz$aH@aH@Bz$9g.9g.{! $(+7P.Kh+xc+5A.T_+y4&Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.7P.7P.Kh+Kh+Kh+Kh+Kh+oh.oh.7P.7P.Kh+G|@", "x5.x5.x5.x5.x5.x5.x5.xX%O7.is@Vh.Vh.is@x5.O7.dD.is@x5.xX%xX%xX%O7.x5.xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.x5.O7.O7.xX%_r+xX%xX%xX%xX%xX%xX%xX%xX%=zC.=2*|r$)]=`O@:B@;z@z9#z9#T6#T6#.7#.7#R3#R3#q1@q1@:B@:B@`O@7T@7T@}&#}&#}&#W #:X@ja@ja@ja@%;$$*+-n#Z@+`@+u8+M#$3|+P]+/i@Q]+ka@rL.#++/B+[ +>I@Pw#={#6&#tK@@{@vv%!m$#i#Mp#}0 E#}0 E#oH R_+wz#l8 Qe XC%Th Uj 9_$XC%Vj YG@YG@YG@#9 #9 ;[ v[ Sj Sj Sj (1 F> 7n }o /t sG R5@5'$oF%UH%oF%|f 5'$|f 5'$(0@R5@%2@}|@}|@+<@rG UH e{@_t (7 O9 !)#))#w! ))#S~#S~#)a&oi&:v&{N%Jw&nq&G-&M,&c4&6;*Qw=,=&2r&`y= z=.z=Kx=+z=@z=Bl@#z=$z=%z=&z=*z=r[&=z=-z=;z=>z=,z=Wx='z=)z=HD#wt.!z=~z=ga*{z=]z=^z=/z=(z=_z=:z=T@3 @=B+1G+yI+6~@r<@,}@T_@zD+T.@A@@uD+Tn+.m+St+!k+]_+-2+[]+vb+HZ@v'#5v#li+li+ex$]f+xy$ze$md+Ib+;Y*;Y*HX*$`$!6+Nr$-|+2[+2[+2[+cE#cE#H#%#4%#4%#4%I#%cE#-|+Nr${6+Z3+~6+!6+}T#A0+C0+]6+!6+d8+W4#0[+{f+Ul$f#C;$C;$:R#hP@T} ]1 w' >J =W@n8 G3 v8+g#@D[#_g$^B+f2%V_#A1#Z]$x1#y1#z1#PX#rr%Q'$c/$qr%>b$Ms$Rj$4($qn%Rb$47$37$e;%Bb#Bb#Bb#e;%e;%e;%e;%d8$d8$jF$jF$jF$jF$%/$jF$)H$Rb$27$27$Rb$im$im$c8$c8$qn%Rb$ ^$6P#av$nI%8~#Xv+cz@) +m9@UN#R0@;c@mV$-c@n%=[4*`H*%<*BE*uc=[z=}z=`u=Uy=ny=|z=vo=dn=1z=t|*2z=3z=4z=is@xE#w{@Q+&t4.o3.v5.h;#sQ@sQ@sQ@sQ@sQ@h;#v5.o3.o3.v5.h;#sQ@CI#CI#CI#CI#CI#CI#CI#CI#w{@w{@CI#CI#S`%S`%sX%sX%S`%S`%S`%sX%&r=&r=&r=*r=CI#*r=*r=CI#CI#*r=*r=CI#*r=sX%S`%S`%&r=*r=&r=S`%sX%sX%sX%sX%sX%sX%sX%sX%iM#iM#iM#iM#iM#iM#iM#iM#&b=l]#=Z+l]#iM#yE#iM#l]#iM#iM#&b=&b=l]#l]#l]#l]#l]#&b=&b=&b=iM#yE#yE#yE#^^@^^@l]#l]#l]#l]#Fu+Fu+_|*_|*_|*z9.+y&+y&.y&VD@fJ%uq*&s*uq*uq*&s*z9.fJ%+y&+y&TO&TO&TO&TO&TO&TO&{h&{h&~h&~h&>S%>S%%' %' ~h&~h&{h&{h&0, 0, &, &, >S%>S%>S%>S%>S%>S%>S%>S%~h&~h&~h&~h&~h&~h&~h&~h&=zC.=2*|r$<-@`O@:B@Db#;z@;z@T6#T6#R3#R3#q1@`|#`|#q1@sH&`O@<-@<-@)]=rz@d=*l$+l$+37@37@fD@fD@$*+$*+>{+sz@EU.)2+i|#i|#~b#Ne@&a@&a@4g@/i@-T.YJ./B+/B+Vs@)t@)t@pZ.pZ.(>$8a&Pt%}`#^L$}`#^L$~T.LR.`/+w'@a9 ^+Fn#7O.Fn#XP.7O.PM.PM.PM.u7 u7 Nz ZZ Ok Mz >J Jc Jc _m _m (1 G0 {M 1|@R5@5'$|f |f 5'$5'$5'$E'$(0@(0@R5@dP@es r[@e{@Xr y, (7 9 QT@!)#8.#XC@$~ S~#)a&oi&ij#;t&3u=16&4u=c4&7z=Ck&8z=aw=0%&9z=0z=az=bz=cz=dz=P(&ez=:6&fz=gz=hz=iz=jz=kz=lz=mz=nz=oz=pz=sx&qz=*K xv#xv#rz=sz=tz=uz=vz=wz=xz=yz=zz=Az=Bz=')#|f FR@rm#xG.2k*ls=|F.;z@u,$_v@~ +S@+r8+-K@>T@>T@x)+zI+H)@Gl+7~@r<@< @=B+B@@A@@tD+Sn+Kt+lp+-m+-m+si+si+,k+,k+<&#hi+hi+^f+,d$,d$ze$md+md+J0+eF$eF$F_%$`$_C#hd+-|+Q*%I=%cE#2[+g3%Q*%I=%I=%Q*%H#%cE#Nr$%2+&2+&2+!6+!6+A0+B0+]6+_C#)6+W4#if#a[+Wg+Zb$:f#Q4#7m*7m*8f#nq#nq#nq#&m+[w+Yn+sp+Tn+uD+}P+4T+4T+4T+(/+[P+>T@}|+9~#z(#A2$JG&N(*}=&!G%U&&|C S:@8v }u YA WA @~ ^|@/|@_|@:|@:|@<|@[|@:|@(|@/|@/|@/|@/|@_|@_|@:|@:|@[|@<|@<|@$4@(|@(|@^|@^|@@~ @~ ^|@^|@_|@:|@[|@<|@$4@vR@Eu Kv Eu vR@$4@<|@<|@<|@<|@$4@<|@<|@[|@[|@:|@_|@(|@(|@@~ @~ @~ @~ @~ @~ @~ @~ ^|@@~ YA WA @~ WA 1f B_#!)#XC@h$#$b@ p@ p@B&#:f@gt@FN#Rm@'d@'d@FN#'d@h$#w! B&#FN#gt@$b@gt@:f@:f@gt@B&#B&#gt@'d@'d@gt@$b@FN#$b@8.#h$#:f@FN#B&#[`@{1 vb 7v d2 S} |n @|#,p -E *E &E $4@WA B_#:r@B_#Un$fG#fG#1C |C |C aP@aP@b$Rj$09$09$90$J$+%6$%6$27$e;%e;%e;%e;%b>%b>%b>%b>%jF$jF$%/$%/$%/$%/$FO$/H$!H$ ^$6P#27$Rb$c8$qn%Rb$qn%qn%Rb$27$6P#av$Kn#8~#! +Xv+5]+`.@,%@bk@;9*oZ%Z|#p#$Cz=Dz=VD.'[*zA% s*`u=Ez=k4 Ne=Fz=;T%Gz=/|$Wy=Hz=Iz=Jz=n3.w.@@:+zI*t4.o3.n3.h;#sQ@sQ@sQ@sQ@sQ@h;#h;#n3.n3.h;#h;#sQ@S`%S`%S`%S`%S`%S`%S`%S`%Q+&Q+&w{@S`%sX%*r=uG#uG#S`%S`%sX%sX%sX%&r=&r=&r=CI#&r=&r=CI#CI#&r=&r=CI#*r=sX%S`%S`%&r=*r=&r=S`%&r=&r=&r=&r=&r=&r=&r=&r=iM#iM#iM#iM#iM#iM#iM#iM#yE#&b=l]#l]#iM#iM#&b==Z+iM#iM#iM#&b=&b=l]#l]#l]#&b=&b=&b=iM#iM#iM#yE#yE#9<@9<@&b=&b=&b=&b=,C+,C+_|*_|*_|*z9.+y&+y&.y&VD@lx@uq*uq*$x+$x+uq*z9.lx@+y&+y&TO&TO&TO&TO&TO&TO&.y&.y&+y&+y&+y&Xw&Xw&Xw&+y&+y&.y&.y&.y&%z&%z&%z&.y&.y&.y&.y&.y&.y&.y&.y&.y&.y&.y&.y&.y&.y&.y&~h&( 9g.Bz$9g.9g.>( Bz$Bz$Bz$Bz$Bz$Bz$Bz$Bz$xc+G|@oh.7P.T_+$(+Kh+y4&Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+T_+G|@Kh+7P.oh.y4&iS.]@+7P.7P.7P.Kh+Kh+Kh+", "x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.O7.xX%xX%_r+N7.is@is@x5.x5.O7.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%x5.x5.x5.x5.O7.xX%N7.M7.xX%xX%xX%xX%xX%xX%xX%xX%&o>&9]&<-@vh%vh%Z)*rz@rz@l$+l$+3+$g>@$*+$*+>{+sz@Z@+EU.)2+~b#MX.li@li@&h#&h#P$+0e@R]+Bp+YJ.G)+3&#{>+{>+{>+[`#WJ.~.$Ym+~.$Ym+#Y./b&4c#cW.o^#PR.n^#Pt%{`+Pt%^L$qV@qV@KR.`>$[N.F(@;K.;K.UJ#`i@tK yy Mz Jc Gn X-@A&#^J lI@{M 1|@R5@|f oF%5'$5'$5'$5'$E'$(0@R5@A=,A='A=)A=!A=v! P9 d_#**+CC.~A=pt=|F.>D%Z|#|_+~ +Ab#r8+;K@{-+x)+zI+I,@W=+H)@6~@2G+6=@xI+T.@S1#3$@Kt+ m+jr+%4+:6+:6+si+si+4f#Og+Og+Kb+Wg+Vg+md+I0+I0+j8+eF$fF$F_%Fb+06%3[+3[+I#%{A=]A=E_%R*%I=%{A=E_%I=%H#%cE#3[+3[+&2+&2+!6+!6+A0+B0+Z3+{6+>6+>f+i0#p7#)i#n#1L.F(@ G@iR. ^+ ^+a9 /T#LR.LR.RP.g#@bU%~T%N/+%>#2_+5Z.1|+>>+Ei$Ei$Wk$Wk$Wk$ar$ar$ar$>b$>b$90$90$N)$cN#cN#.3%T@+T@+e;%e;%e;%e;%b>%b>%b>%b>%iF$jF$%/$%/$%/$/H$GO$/H$-I$27$6P#27$Rb$qn%Rb$27$qn%Rb$ ^$27$6P#av$Kn#Kq@I_@ii@W_@>m+m6+r$+]i@Z>$&`#ys*}i*>&*O9*Cs*=u=Zi 4@@5~%6~%(A=c^ _A=t|*:A=;4*( >( >( 9g.9g.>( >( Bz$Bz$9g.9g.9g.9g.Bz$Bz$T_+Kh+oh.oh.G|@T_+Kh+y4&Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+oh.y4&y4&iS.iS.]@+]@+w5&7P.7P.Kh+Kh+Kh+Kh+", "x5.x5.x5.x5.x5.x5.x5.is@x5.O7.xX%xX%_r+_r+_r+is@is@is@x5.x5.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.x5.x5.O7.xX%_r+N7.xX%xX%xX%xX%xX%xX%xX%xX%F6.F6.F6.F6.F6.F6.F6.F6.v4.#k.#k.#k.#k.v4.<3+0q._r+_r+_r+_r+_r+_r+_r+_r+M7.N7.xX%O7.O7.xX%N7.M7.F6.F6.&AA%;1=a_*![*(8%|r$7T@`O@]R@]R@Db#:B@:B@sH&sH&o>&[-+g>@3+$z^&LA$dn$9]&1A=1A=#}*#}*_<*R8@Fs=Fs=Fs=fD@fD@>{+sz@sz@P$+EU.DU.d_+s[$s[$s[$s##d_+&h#)m+.+@P]+Bp+#++#++|v@|v@w<@N#$N#$hE%N#$hE% @$q0& @$yD%Yx#nZ.5P++Y.oZ.@Y.#Y.PR.SS#' $Pt%[Q.KR. G@[N.f]@P2+$y fp `i@Qg Qg T} _7 `Z ^J `Z H5@4|@%2@E'$E'$5'$5'$5'$5'$(0@R5@cP@r[@e{@qG _t ;! (7 ')#B_#{Y@w! S~#:r@'a&0.#:v&d4&2A=16&3A=Hu=C&&-u&Kx=.z=4A=5A=6A=Oz=pw=7A=8A=9A=0A=aA=bA=cA=dA=eA=fA=gA=hA=iA=gx=jA=kA=lA=8o&s5@mA=nA=Oj@oA=pA=qA=rA=sA=tA=uA=vA=wA=f&.xA=j*$'|*Ps$qy#g4@L5$y2&qt='m$OV*,(@cH#i[+QU#yM@yM@zI+AI+0r+Mz$I,@b^@2G+< @bX+%B+S1#3$@Kt+ m+jr+'k+,k+:6+si+$4+Og+Kb+Kb+=g$Vg+=2+I0+ 4+ 4+i8+fF$DC$pD$Fb+{6+%>%Nr$My#Q*%yA=yA=bq%R*%I=%I=%R*%%>%2[+cE#I#%;6+)|+;6+;6+~6+!6+)6+)6+e8+ G#mc#p7#)i#+~ +tW%i[%gh$@rV@y=$KR.qV@[Q.L_#Pt%PR.L$&nZ.mZ.We&)%@GX%2_+6)#U`$Ei$l~+7F$Di$)g$)g$)g$-c$-c$-c$-c$-c$%*$dN#dN#dN#dN#{ +.3%.3%Bb#e;%b>%b>%b>%b>%I$+I$+bN$bN$bN$%/$GO$GO$-L$)I$>J$S!$k`%k`%-I$!H$S!$n>%-I$-I$S!$k`%n>%n>%l`%Z.+j~+(m@ti+nK@r$+V^@Yc%CA=ys*y]$u*+r#$U2@DA=3@@C*@D*@D*@yr&EA==p FA=GA=HA=IA=]O&JA=r1.CK.C0@aR#7&+v5.v5.n3.h;#sQ@h;#h;#n3.h;#sQ@sQ@sQ@sQ@sQ@sQ@h;#S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=sX%sX%sX%sX%sX%sX%w{@&r=&r=w{@w{@&r=&r=w{@*r=sX%S`%S`%&r=*r=&r=S`%*r=*r=*r=*r=*r=*r=*r=*r=iM#iM#iM#iM#iM#iM#iM#iM#/W%yE#&b=&b=yE#yE#&b==Z+yE#yE#yE#iM#iM#&b=&b=&b=iM#iM#iM#iM#iM#iM#&b=&b=Fn=9<@&b=yE#yE#&b=,C+xr*_|*_|*_|*z9.+y&+y&.y&VD@VD@=^@xr*$x+$x+xr*(-=VD@+y&+y&TO&TO&TO&TO&TO&TO&+y&+y&+y&+y&+y&+y&+y&+y&+y&+y&+y&+y&Xw&Xw&Xw&Xw&.==.==.==.==.==.==.==.== == == == == == == ==&, ( >( >( 9g.9g.aH@Bz$9g.>( >( 9g.Bz$aH@Kh+7P.oh.7P.Kh+G|@Kh+7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+iS.y4&y4&oh.oh.7P.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+", "x5.x5.x5.x5.x5.x5.x5.is@x5.O7.xX%xX%xX%O7.x5.x5.x5.is@is@is@O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%_r+xX%O7.O7.x5.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%8'%8'%8'%8'%8'%8'%8'%8'%#k.#k.b.KA=5 +r($V( LA=I4=Dl XU PS*@,+;A$m%=P%=63*.}*(8%k%+k%+]R@]R@]R@`O@`O@o>&o>&o>&g>@wX@wX@.4#.4#dn$dn${7$#}*#}*_<*_<*Fs=Fs=Fs=Fs=fD@fD@>{+>{+sz@sz@Z@+O$+tc@BM#K6@K6@4)#s[$li@&h#l[+.+@3|+s!$>/#m[+m[+rX+|(%7%%L=&7%%gh$|(%gh$|(%B@$f<#: +U)@: +XJ.;T.Yx#IG.b#&#l+cW.SS#_R#^L$LR.rV@1L.>n#UJ#$y >z >z t/@ <@I~ Nx@^J ^J ]C@0~ {M ||@%2@R5@E'$E'$(0@dP@cP@sG hB Yr qG Y:@]|@kI@')#))#!)#S~#S~#jE#g@#:v&d4&MA=5u=C&&Kz=NA=t-&d;*OA=PA=QA=RA=RA=SA=TA=%x=UA=VA=WA=*f@XA=YA=ZA=`A= B=.B=+B=Ux=@B=#B=$B=m5@#M.Uc@%B=&B=*B==B=-B=;B=>B=,B='B=)B=!B=Y,.8b.~B=}r@WH%Ja%JM.v|@y{.ot=+yM@AI+AI+0r+0r+<`#I,@l#R*%{B=]B=^B=cE#H#%Q*%g3%%>%-|+2[+1[+;6+x0+/>$/>$~6+)6+'6+e8+e8+if#q7#p7#)i##P2+NM.LZ@y=$KR.[Q.n!&9a&Ym+c#&^M$Xx#=I&^8=BW.t8+5Z.>>+B)+7F$1h$1h$1h$-c$)g$-c$S5+S5+S5+y4#y4#dN#dN#dN#dN#dN#dN#dN#cN#Bb#e;%b>%b>%b>%b>%I$+I$+/'$/'$bN$%/$GO$GO$-L$)I$ K$-I$S!$-I$)H$!H$S!$l`%S!$S!$S!$k`%n>%n>%n>%av$~ +[f+WH#7]@V^@W^@ |**9$o5$_B=@w&cI.jB@(~.4=.[,.[,.:B=EA=( >( 9g.aH@bH@Kh+Kh+Kh+Kh+G|@G|@G|@G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.Kh+G|@T_+$(+Ea+Ea+5A.G|@G|@Kh+Kh+Kh+7P.", "x5.x5.x5.x5.x5.x5.x5.is@x5.O7.O7.O7.x5.Vh.dD.O7.x5.is@Vh.is@x5.xX%_r+xX%xX%xX%xX%xX%xX%xX%xX%M7.N7.xX%O7.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%F6.F6.F6.F6.F6.F6.F6.F6.&o>&LA$wX@nV@nV@nV@.4#m5*R8%Q8@3B=4B=3B=5B=5B=Pn*v^=v^=6+*6+*as$as$>{+sz@sz@#o+'>+2W.O@@C1#I4@2)#@*+h/+V##P@@.+@7 @3|+>/#>/#Wt+5V+)=%7R+)=%_T#5V+_T#5V+{($'(@o%$u8+@++Br+f<#w<@U.$yj&I4%$y&K$&]V.]V.f'#`]+w'@DL.-K.Nz Nz Nz Rg cK#EN#0~ Nx@]C@`Z `Z `Z EN#%W@1|@%2@(0@E'$(0@9~ -E ds uG Yr W:@;! kI@')#B_#QT@$~ An#g@#]N%{N%d5&6r&4u=Ck&6B=bw=0x=7B=9z=8B=9B=0B=0B=~w=%x=aB=bB=cB=;p#dB=eB=fB=gB=hB=iB=jB=kB=lB=@B=mB=nB=`b#qN.oB=pB=qB=rB=sB=tB=uB=vB=wB=xB=yB=zB=AB=BB=CB=1K%Rs$IJ%GQ$ND+w!&y2&|r$Db#A($X_@T,+i[+y)+->+]-+VK+&9@W=+W=+I,@SK+SK+C@@T.@/f#uD+%w+.m+kr+lp+-m+[]+_6+~/+cd+cd+E:+E:+.4+QL# 4+`3+F_$qD$EC$P{$PB$I~%)6+cE#-|+My#%>%DB=EB=FB=X3+2[+Q*%I=%#4%Nr$hd+gd+d8+QL#;6+;6+~6+!6+)6+>6+>6+V4#q7#)i#Zb$B5$z =l P2+P2+]L$rV@`>$[Q.#6#8a&aW.KB=VS&7H+y'$LB=E)$!V@x1#y1#1r$7F$y4#,b$ni$AA#!g$1h$1h$1h$7o@x4#'M$'M$8]+8]+j %j %j %j %j %%*$Bb#e;%b>%b>%b>%b>%I$+I$+/'$/'$bN$%/$GO$-L$-L$~J${J$!H$!H$)H$!I$)H$S!$l`%S!$S!$k`%k`%k`%n>%n>%6P#~ +8Z+zr+F]#}Y+Lh*B_+P-+k6&j +WK&fI.MB=E*@f] Jh :B=>@#NB=Xp OB=Nj=(i*PB=QB=rx=RB=<^+/` e{+NR*}d.n3.n3.h;#sQ@h;#h;#n3.v5.o3.v5.h;#sQ@sQ@h;#v5.o3.Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&CI#CI#CI#CI#S`%S`%S`%S`%*r=&r=&r=&r=sX%S`%S`%S`%Q+&sX%sX%Q+&Q+&sX%sX%Q+&*r=sX%S`%S`%&r=*r=&r=S`%sX%sX%sX%sX%sX%sX%sX%sX%iM#iM#iM#iM#iM#iM#iM#iM#.X+iM#&b=iM#.X+/W%.X+iM#.X+.X+yE#yE#yE#iM#iM#iM#yE#yE#yE#iM#&b=&b=&b=l]#^^@^^@l]#l]#l]#l]#Fu+Fu+_|*_|*_|*z9.+y&+y&.y&VD@u{@xr*uq*tq*tq*uq*VD@u{@+y&+y&TO&TO&TO&TO&TO&TO&.y&.y&%z&%z&)A&)A& == ==%z&%z&.y&.y&+y&+y&Xw&Xw&+y&+y&+y&+y&+y&+y&+y&+y&%z&%z&%z&%z&%z&%z&%z&{h&{+>{+sz@#o+%a@3W.K6@I4@k<&9Z+9Z+|f+h/+MX.l[+l[+tD$'(@'(@^B+kS$OX#6Q%OX#kS$rV$kS$rV$5V+L6@LD+~b#, $~b#'(@Wt+|=&^M$^M$YR%IG.aI.+K.Eh+#K.zL.@6#PU.jR.8O.jR.m9+YG@Ui ,! Lf Oe Md Kf aY yz#gG# <@`:@C=,C='C=cm.sU&i+.)C=*E@!C=~C={C=]C=^C=/C=(C=_C=:C=&ia@t##+$#d$@y_$S;+nq@5%$[ @a^@&9@*(@+N+H,@Hl+k0+A@@wD+sp+^/+Ob+^_+Nb+Mb+<]+Rl+n8+n8+&k+On+B)$B)$y0+&2+&2+qD$8,$P{$PB$PB$C0+!:#h8+{6+Z3+s0+W3+<[+}f#C:+K#%D/%!7%Kg+-X#}f#.G#A7#^H$i8+Fb+~6+;6+&2+QL#V4#a[+)i#Zb$A5$ac#Vt$-/$Te=/B=&!%nq#5f#RO@RO@]/+I6@Yn+oy+}P+Hl+H,@fB@cp+>(@h|+Y<#Y@+4w$MA&f_&U&&d)%#] $S#4|@mQ eP@.<@:|@:|@:|@:|@[|@[|@[|@[|@[|@<|@$4@$4@<|@:|@(|@/|@(|@/|@/|@/|@/|@/|@^|@^|@(|@/|@/|@/|@(|@_|@:|@[|@:|@:|@:|@[|@[|@[|@[|@[|@$4@<|@[|@:|@:|@:|@:|@[|@[|@[|@<|@<|@<|@<|@<|@<|@vR@$4@<|@[|@:|@_|@(|@(|@_|@^|@a~ 1f a~ YA a~ 1f w! w! {Y@h$#Si@FN#FN#FN#Dt=HY%Dt=Z+*'d@ l&FN#zg#B&#Qm@Dt=Zo@$b@Ed#Si@zg#wh&1C=2C=3C=Ka*3C=4C=]v&5C=#q=9d*6C=0+&QT@EN#@~ _t @, ;E hB qG y, /,@,p O9 9 kI@YA ^|@(|@/|@4|@cK#*W@^D%^D%^D%^D%^D%^D%L-$n)$3h CR@CR@3h n)$L-$n)$wb n)$gP@BR@Eh E&#*W@ER@A=$ER@A=$ER@A=$ER@ER@{Z#Pe Lf Lf Pe {Z#{Z#o{ o{ {L$o{ s1%o{ s1%wb TH 6, 5, G> :t t/@ X $y P2+X]$LZ@y=$M_#RP.8a&.@$lZ.VN+-(*7C=T*%E3$Hw%Z+$oo%,Z#=k$@d$,p$L1#00$L1#ni$1h$@d$7o@,L$'p$J3$'p$'p$'p$%*$%*$%*$T4$T4$90$e;%b>%b>%b>%b>%b>%I$+I$+-,$I$+iF$WK+/H$zM@~J$WL$!l$c9$c8$im$;u$im$Rb$6P#27$27$k`%27$k`%n>%m`%6P#-t@_v@}V# |*K/+A^$!%+D>+_e=I-+8C=Fb#im=g] 9C=;p g] (m&*p OB=0C=aC=S%; ,++IB c6+Pt=C; cC=dC=~z$-y Pw.iZ#%]%XR $y$Bn*$e*%e*)I%IG#k%+_=$l-$P:$P:$:7&Vt==8&1u=S8&{r=s9@E2&s9@eC=K5$/h$1A=+}*fC=(8%~[*~[*.}*<-@3+$-z@1k+&a@1k+)m+ja@)>+G~+#*+li@h/+O:+t8+2_+V_#V_#V_#Yx%Yx%QB$QB$QB$0/$|)#mF$|)#qX+})#qX+})#qX+})#qX+g&@qX+g&@T)@T)@i|#Br+Br+Br+Bp+Bp+YJ.sL.sL.w@+bR.2*+wc@Xt+P:+qZ.;$%.E.~%@MM../@QM.n8 O2+U} $9 Mz so En 'J 0q 7'$TL$fO$ET$d'$m$#3|@@~ WA FN ^Q#J7&fj#GL#Bd#WB=gC=hC=iC=jC=kC=lC=mC=nC=oC=pC=qC=rC=sC=tC=sC=uC=vC=wC=xC=BB=yC=zC=AC=BC=CC=Lj@DC=EC=A%#'6&FC=qY+cg&cg&P>.3j&GC=HC=xk#R{& A=IC=JC=KC=C@.X` LC=MC=NC=OC=PC=QC=#r 96 G{%eY+]5*V{*s,%uD@b)#f)#%[#e&@A,+K4#K4#.$#.$#@N+hX@f^@$N+}=@Jl+Kl+}R+tI+@w+#w+-'@$4+^f+_6+<]+by+rD+.}#}t#_1@Mg+YM$_C#_O#EC$1@$1@$k}%*}#T:%%:%^ %l8+9[+dx$(6+|/#_6+~/+#/+v&@`J#cc#^H$p'$p'$zC$p&%B7#'l#,f+,f+;p$p7#Wg+^f+Og+&l#5f#*w+*:@&w++m+}w+WN#/k+&l#X+$-9@|]+Pb+f[+T0+U0+}_+/-+D@+L=%]b&~Q#{}%XR$1F$n)$mQ ]8@]8@mQ >S IT x! {M /|@:|@[|@:|@:|@[|@$4@$4@$4@$4@<|@<|@[|@[|@[|@:|@/|@WA @~ (|@<|@<|@:|@^|@/|@/|@(|@_|@_|@:|@:|@<|@<|@<|@<|@<|@<|@<|@<|@Eu vR@[|@_|@(|@_|@_|@:|@[|@[|@[|@<|@<|@$4@$4@$4@[|@[|@[|@[|@[|@:|@:|@:|@^|@@~ YA WA @~ WA 1f B_#w! h@#B&#Si@'d@:f@Rm@Sm@Ao&M,&jR&7s=Zo@T8#zg#>6#&3#;3#JN#d>*&3#@<#yn#=3#RC=SC=TC=UC=VC=&c*WC=>3*XC=YC=ZC=`o@`Z +9 l$#f#`T@Ho$`t%`^#l3%`^#h>#~t@~t@~t@~t@~t@+/$+/$]M$]M$Ho$]M$`T@]M$`T@Pe &W@%W@{M {M +9 |C Lf .G@v'@NM.Pp vv%:J$S^$nZ.|=&^7%vD$1/+@o+[6$`]$S4$bK%27$n>%k`%!H$2#%$@%0N$!l$cN$^m$%K$@d$4($90$4($09$N)$N)$N)$cN#cN#.3%.3%T@+b>%-,$-,$-,$n%$b>%u_%_P+hX+hX+_P+fX@u_%nq@|T+x_%BT$K1#&6$$*$$*$Bb#('$('$('$('$|W&$6$]A&h^#`C=h@*|,$h3% D=%8$.D=u*+|j+d3$+D=JH@L8=O} 4`%%h@@D=jR&;c #D=y' $D=5j=%D=&D=*D==D=-D=E6.[v.sQ@D6.~Z%k5+o&=j(#w{@CI#S`%CI#w{@Q+&w{@w{@w{@CI#CI#CI#S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%uG#*r=&r=sX%sX%&r=*r=uG#uG#&r=S`%sX%&r=&r=S`%w{@N:*&r=CI#w{@S`%&r=&r=&r=&r=*r=uG#N:*uG#&r=S`%CI#*r=sX%S`%S`%&r=*r=sX%CI#sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=E#=E#=E#=E#=F#=F#=dr=dr=dr=dr=dr=dr=dr=xr*Fu+tq*$x+$x+tq*,C+&s*wr*SO+qK+5,+jM#jM#5,+qK+SO+$' $' $' $' $' $' $' $' &, ;n.>n.>n.!D+`b&`b&B#@;n.;n.;n.;n.;n.;n.;n.;n.|m.Kh+7P.7P.Kh+7P.iS.o{+oh.oh.oh.7P.oh.y4&iS.]@+xc+$(+G|@7P.oh.y4&y4&y4&xc+y4&]@+Kh+$(+G|@oh.7P.u!=[f.x{+23+';$u]#:{+v]#OP*OP*23+23+US+';$';$G|@|f.P] 8x.FA+~c.Q] 8x.'&@3d.Q] 8x.|.+qz.'].el.|.+7P.7P.Kh+G|@G|@T_+$(+$(+y4&y4&7P.7P.7P.y4&iS.w5&oh.oh.oh.oh.7P.7P.7P.7P.y4&y4&oh.oh.7P.7P.", "sN%{$+c+#c+#{$+sN%1.&S+&sN%[M@PK.c+#{$+c+#PK.is@is@is@x5.O7.O7.O7.xX%xX%xX%xX%xX%O7.O7.O7.O7.8'%F6.D=,D='D=)D=!D=e3#wI@>^$~D=fr AK%)1%(t*gg*.x*e>@}x*k%+_=$l-$P:$P:$:7&Vt==8&V-+S8&{r=v@*v@*Lo=eC=W-+.4#o>&o>&<-@)]=|r$(8%(8%<-@3+$fD@1k+&a@1k+)m+-z@'{+%>#,{+O$+87$87$5W.5W.O:+O:+Z]$Z]$}7$}7$C/%4V+R2@})#})#})#})#})#})#})#})#})#})#})#})#})#})#})#L6@L6@L6@L6@L6@O]+O]+7 @-T.Z<#Z<#vc@[^#KK%/)&57@wc@Xt+Qq@lm@mm@HR@Sq@aG#x[ jB Ej (g wo z6 w_$;M TL$PW$oV$|F$2g$1|@^|@G5@Jz Jz /Q#30&a`%ut=1C={D=]D=^D=/D=(D=_D=:D=.%w.Qq.lD=Jz#mD=nD=x_*{( GQ+;;+J4=J-*|W.oD=Fl+b)#pD=yg+}_#r|$K4#.$#.$#@N+hX@f^@my+Z.@a$@s<@pe#C`#59@9s#!G+_k+hi+wb+!]+-'@-'@$w+$[e YA c~ XA (V#Rn&Rn&Rn&%W@(|@[|@[|@:|@:|@[|@$4@vR@$4@$4@<|@[|@:|@_|@(|@(|@@~ YA WA (|@[|@[|@:|@:|@:|@:|@:|@:|@:|@_|@_|@<|@<|@<|@<|@<|@<|@<|@<|@<|@[|@:|@_|@_|@:|@<|@$4@[|@[|@<|@<|@<|@$4@$4@$4@$4@<|@<|@[|@[|@:|@:|@_|@/|@@~ WA WA @~ WA a~ ')#w! h@#B&#Si@Si@'d@FN#Qm@Ao&M,&Vm@N,&=3#NH#KN#=3##|#$|#G,#d>*qD==8 rD=sD=tD=uD=vD=wD=xD=9a*yD=zD=Uu&AD=S &+z&p{ fG#8r uK &o%&;M$(H$w_%BD=:/%Ls$Js$a8$%K$4($4($4($4($4($J$+J$+J$+%6$%6$T@+T@+27$b>%-,$-,$-,$n%$b>%u_%_P+hX+hX+7V@gX@BO@oZ@BO@oZ@K1#K1#K1#K1#J3$w4#cN#cN#cN#cN#YR#c!*M.+^A&9p$@L+%J*3<+U]+v*+CD=DD=5#+G).Cj={{ 'G 5`%&h&3>&5u=sD=<;#ED=FD=+)#5j=GD=&D=HD=(i*ID=sQ@JD=sQ@t4.T`%a,+b,+j(#Q+&CI#CI#CI#w{@Q+&w{@w{@w{@CI#CI#CI#S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%*r=&r=sX%S`%S`%sX%&r=*r=uG#&r=S`%sX%&r=&r=S`%w{@uG#&r=CI#CI#sX%&r=&r=sX%sX%&r=*r=uG#uG#*r=sX%S`%&r=sX%CI#S`%&r=*r=&r=S`%sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=*r=*r=*r=*r=&r=&r=&b=&b=&b=&b=&b=&b=&b=&b=iM#iM#iM#iM#&b==Z+dr=o!#5;@KD=,S#uC#uC#,S#KD=5;@,S#,S#,S#,S#,S#,S#,S#$' {h&!D+!D+!D+`b&`b&`b&`b&>n.>n.>n.>n.>n.>n.>n.h~ |m.G|@7P.Kh+G|@Kh+y4&w5&oh.oh.7P.7P.oh.y4&iS.]@+G|@Kh+7P.y4&iS.iS.iS.y4&$(+y4&iS.Kh+$(+Kh+oh.7P.OP*OP*OP*23+23+US+US+';$OP*23+23+23+US+';$';$G|@J; ~c.el.8x.~c.3d.8x.qz.~c.~c.8x.el.el.el.el.|.+Kh+Kh+G|@G|@G|@G|@T_+T_+oh.oh.7P.7P.7P.y4&]@+w5&7P.7P.7P.7P.7P.7P.7P.7P.y4&y4&oh.oh.7P.7P.", "is@is@x5.x5.is@is@Vh.dD.x5.xX%xX%O7.is@x5.O7.is@is@x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.xX%xX%xX%xX%8'%F6.+-8&wX@g>@3+$o>&<-@)]=)]=|r$<-@3+$fD@)m+1k+1k+)m+-z@,{+,{+%>#%>#N$+87$2|+2|+5W.5W.5h#ZR#ZR#Z]$89$Z]$R2@})#})#})#})#})#})#})#})#})#})#})#})#})#})#})#qX+qX+qX+T)@T)@Y_@Y)+S2@3_+0Z+0Z+Oe@ET#[^#ET#[^#4|+n[+s=#9x$ZD.,-#~*@Tq@|L.U!@Ej +r Gn k8 .l ,J X{$u[$d'$u)$!M cP@yK %p@^Q#xW$_E$DL%)u&Fu=QD=RD=SD=TD=UD=VD=WD=.o&+n&XD=YD=$N sz=ZD=Vu.dL `D= E=.E=&f.+E=@E=#E=$E=%E=&E=*E==E=-E=/X.;E=A@.0I&>E=,E=<@.'E=)E=!E=nj&#x=~E={E=]E=^E=/E=+&+l{+8E.(E=_E=:E=W@}V Y)*/@$|E=7r+.4={0%}_#}~+r|$K4#.$#.$#@N+hX@f^@my+Z.@a$@s<@pe#C`#59@9s#!G+-2+li+wb+lD+]G+SA+ok+jm+^V+Nn+=k+H#$&2+F_$CC$QR#&o#&o#s[%{:#QO%Yg%#*$=d$ex$hi+M0+_k+YA+/+@ir+Nn#F0+A!$p'$zC$p&%cF$'l#,f++4+Vg+a[+Wg+|/#^f+M0+/k+ L+mp+@m+[w+*m+/k+(k+/k+&m+ L+wD+$N+-K@Y&+8~#Ux#BO#'m$-n#~Q#~`+5=%U=%3h %W@YA KH#S^#Nx@%~ lI#fG#4|@_|@<|@<|@[|@[|@<|@$4@vR@vR@<|@[|@_|@/|@^|@@~ @~ YA a~ WA /|@:|@[|@:|@$4@$4@<|@[|@:|@:|@_|@(|@[|@[|@[|@[|@[|@[|@[|@[|@_|@_|@_|@_|@:|@<|@$4@vR@[|@<|@<|@<|@$4@$4@vR@vR@vR@vR@$4@<|@[|@:|@_|@(|@/|@^|@WA @~ ^|@@~ a~ ')#w! h@#B&#Si@gt@gt@Si@;6# l&N,&4>&2j=T8#gy#g%&KN#jy#Ez#*3#7;*1E=2E=Xo@3E=4E=vD=5E=6E=7E=8E=9E=0E=aE=6E&-f#+z&W##gG#,M !J +<@+~ ]|@O9 O9 (7 W:@X:@+~ t! t! t! X:@X:@X:@Z:@&W@L-$L-$L-$L-$L-$L-$L-$L-$L-$L-$n)$n)$n)$n)$o{ {Z#;z n{ CV#CV#n{ m>@+/$$-#$-#.{#Y^#v'@Cu+0T@C;$@(+Ne `i@Ne `i@`i@7V 7V X ]M$]M$]M$FR@FR@FR@^D%[e $S#{M EN#EN#V:@Lf Mf C;$LZ@SD@;S+;{#E[#~T%3a&}T$q'@7_#dH#{ +J$+Rb$!H$>J$>J$V~$:H$sr$M`*sr$Ls$;u$a8$%K$%K$%K$4($4($4($J$+J$+J$+%6$%6$T@+T@+27$b>%-,$-,$-,$-,$I$+}{#WK+iX+iX+iX+hX+9e#vp#fX+nZ@:8$:8$:8$BT$,L$,L$,L$@d$90$%*$Z5%25%% +6_#'($R.$3<+k6&bE=E9&bT.LG.JW.Te l;%Jj 'Y@,d@&h&3>&4u=b%*cE=oE&dE=+)#eE=fE=&D=aC=HA=&=#w.@e6@n3.o3.T`%U%+b,+j(#Q+&w{@CI#CI#w{@w{@w{@w{@w{@CI#CI#CI#S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%&r=sX%S`%S`%S`%S`%sX%&r=uG#&r=S`%S`%&r=&r=sX%CI#uG#sX%CI#CI#sX%*r=&r=sX%S`%sX%&r=*r=*r=*r=&r=&r=sX%CI#w{@S`%*r=uG#*r=&r=sX%sX%sX%sX%sX%sX%sX%sX%sX%&r=*r=uG#uG#*r=&r=sX%&b=&b=&b=&b=&b=&b=&b=&b=.X+yE#&b=l]#=Z+=Z+=Z+=Z+5;@KD=,S#,S#,S#,S#KD=5;@,S#,S#,S#,S#,S#,S#,S#$' >S%B#@B#@B#@`b&`b&`b&`b&!D+!D+!D+!D+!D+!D+!D+Bj.*$@G|@Kh+G|@T_+G|@oh.iS.oh.oh.7P.7P.7P.oh.iS.iS.y4&iS.iS.]@+]@+]@+iS.y4&T_+y4&iS.Kh+T_+7P.oh.Kh+US+US+23+OP*OP*x{+[f.[f.23+23+23+US+US+US+';$G|@Q] |.+'].|.+Q] P] Q] |.+Q] Q] FA+FA+|.+|.+'].'].T_+T_+G|@G|@G|@G|@Kh+Kh+Kh+Kh+Kh+7P.oh.y4&]@+w5&7P.7P.7P.7P.7P.7P.7P.7P.y4&y4&oh.oh.7P.7P.", "is@is@is@is@is@is@is@x5.O7.O7.O7.x5.x5.is@x5.x5.x5.x5.x5.x5.x5.O7.O7.x5.x5.x5.O7.xX%_r+_r+_r+F6.F6.@3+$o>&<-@)]=|r$|r$<-@o>&g>@-z@)m+)m+-z@-z@O$+,{+%>#'{+A:&N$+2|+g~@5W.5W.ZR#ZR#ZR#Z]$89$Z]$9Z+=1@=1@=1@})#})#})#})#})#})#})#})#})#})#})#})#mF$mF$0/$mF$rV$B;@B;@qq@qq@q>#S2@S2@0Z+0Z+mi@Z<#3/+/B+{>+i>@s=#ZD.;[@to@hs%%c$`W 4m >J 2' k8 _g gP@#-#F&#EN }f }g z D@$xW$V!&:&%c3&d5&Pw=Id&RD=jE=kE=lE=mE=nE=oE=pE=qE=rE=sE=Yb#7`+tE=uE=vE=wE=xE=Sq.yE=zE=AE=sI BE=CE=DE=EE=FE=4n.)X&u7&GE=HE=IE=JE=KE=_z=LE=ME=wv=NE=,z=La@OE=aQ@C@.hK.PE=QE=(0&RE=SE=PC=l*$6O$~3%~>#Bn*Q0*Yf%uD@gB@R;+A,+D&+r|$K4#.$#.$##N+hX@f^@;B+Z.@0$@s<@pe#XA#59@9s#!G+9d+kp+od+e~+H,+$-+O3+Ri+%-+$/+Z6@B)$.I#^H$pD$QR#&o#&o#s[%w<%BC$HX*Yg%G#$>d$Wg+ri+ni+bc#Pg+@4+!|+F0+A!$p'$p&%p&%cF$,f+,f++*$Of$)i#Wg+^f+|/#M0+:k+Yn+sp+[w+&m+RO@bf#%l#RO@&m+ L+w)+f^@K:+oX+}3@bD#J>+QD@rX+GY$^<%/<%+-#&W@:|@X~#C@$%0@1f I~ cK#&W@2|@:|@$4@$4@<|@[|@<|@vR@Eu vR@<|@:|@/|@@~ YA a~ a~ a~ a~ WA /|@_|@:|@:|@<|@[|@[|@[|@:|@:|@_|@_|@[|@[|@[|@[|@[|@[|@[|@[|@_|@_|@_|@:|@[|@<|@$4@$4@<|@<|@<|@$4@$4@vR@vR@vR@Kv Eu vR@$4@[|@_|@(|@(|@(|@/|@@~ ^|@/|@^|@YA kI@+W@{Y@$b@gt@B&#$b@$b@O8#Z+*2j=Wm@=3#g%&cj#cj#gy#*3#;3#TE=7;*F,#vj*;3#LN#UE=VE=WE=j5@XE=$X+YE=ZE=`E=$~ K!$-)#v{ &W@,M s! G0 /d@ 9 9 (7 Y:@X:@>b@r[@r[@r[@r[@r[@r[@r[@+<@cK#*W@*W@*W@*W@*W@*W@*W@*W@*W@L-$L-$n)$BR@BR@3h 8V n{ ^)#CV#CV#CV#m>@m>@])#])#^)#m>@+/$]M$Ho$.G@Ld .' S-@.' Ld Ld Ld Uj X X X ]M$FR@FR@FR@^D%(V#0~ 0~ G0 G0 H0 ,! hP@1L../@SD@rP$;{#< +DR.!-*OD@$>#s8+||+dN#J$+qn%!H${J$ K$(H$2#%M`*Lj*sr$Ls$c8$%K$%K$%K$%K$%K$4($4($J$+J$+J$+%6$%6$T@+T@+27$b>%-,$-,$-,$-,$I$+}{#WK+}{#}{#WK+iX+iX+9e#8e#8e#*6$:8$BT$BT$@d$_a$_a$S5+T4$j %`]$M:+E]#-&$#q%1/+k6&5<+EG.s)&cI.kT.y +rs%{{ p$$5`%Sm@Gx= F=Pw=.F=Sq=7>#+F=+)#aC=@F=fE=#F=f8.L7.H|@-Z+o3.v5.T`%:{.j(#j(#Q+&w{@w{@w{@w{@w{@w{@w{@w{@CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%*r=sX%S`%S`%&r=*r=sX%CI#*r=sX%CI#S`%&r=*r=&r=S`%CI#S`%sX%&r=&r=*r=*r=*r=S`%w{@w{@S`%*r=N:*uG#*r=sX%sX%sX%sX%sX%sX%sX%sX%S`%sX%uG#N:*N:*uG#sX%S`%dr=dr=dr=dr=dr=dr=dr=dr=.X+yE#&b==Z+dr==Z+l]#&b=KD=KD=KD=KD=KD=KD=KD=KD=,S#,S#,S#,S#,S#,S#,S#$' X@$'W+{y%{y%B#@`b&`b&!D+`b&`b&`b&`b&`b&`b&`b&/{ *$@T_+G|@G|@$(+T_+Kh+y4&oh.7P.7P.7P.7P.oh.y4&iS.iS.]@+]@+]@+]@+y4&oh.7P.G|@y4&iS.Kh+G|@oh.y4&Kh+23+23+OP*OP*x{+[f.[f.u!=23+23+US+US+US+US+US+US+|.+'].'&@'].Q] J; P] FA+FA+FA+FA+FA+FA+|.+'].'].$(+$(+T_+G|@G|@Kh+7P.7P.G|@G|@Kh+7P.oh.iS.]@+]@+Kh+Kh+Kh+Kh+7P.7P.7P.7P.y4&y4&oh.oh.7P.7P.", "is@is@is@is@is@is@is@xX%O7.x5.x5.x5.x5.x5.x5.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.O7.xX%_r+_r+_r+D=&x+$F=%F=-%+:B+KQ+tY.|{%'^+dk*=m$&F==L*ij*j%+Zc%r1&QD@Eb#Eb#Eb#r'@r'@8T@8T@[-@[-@[-@W4*6_&z^&3+$o>&<-@)]=|r$(8%(8%<-@o>&3+$fD@-z@-z@-z@-z@P$+sz@>{+$*+'{+,{+2|+g~@2|+2|+']$']$A1#A1#A1#A1#@*+Ub+Ub+=1@=1@})#})#|)#})#})#})#})#})#})#})#})#0/$0/$a/$OX#OX#'Z#'Z#]q${v$B;@B;@Y)+Y_@O]+7 @P]+,/#>/##++e=@D[#s=#,I@bI#eU$97@j9$,z E5 xu _g k8 W-@H0 G~ s! -! Jv Nw mP%4`@2`@B'$^Q#f5&{m#SB&*F==F=-F=;F=>F=,F='F=)F=!F=~F={F=]F=^F=/F=C@.(F=Az.wS@Ct._F=:F=.2F=3F=Vo+PV.4F=`Y.5F=6F=t[&7F=8F=9F=0F=aF=bF=cF=dF=s6.eF=fF=gF=hF=iF=7i Dh T$+D*+ek*j4*YD*p$+i~$T}+A,+r|$r|$r|$K4#.$##N+hX@f^@;B+Z.@0$@s<@pe#XA#4v#.5@!G+>-+wb+O0+']+W0@jF=lM@YJ@7_*'a$@>+!_+.4+Gy#F_%*Q#OR#4l#*o#`D*V:%mD$I5%Yg%q+=!f+;p$+w#+w#if#.4+j8+F0+p'$F0+p&%B7#id+V4#V4#+*$Of${_+{_+$4+Lb+[]+:k+Yn+Yn+Yn+&m+RO@V4@RO@&m+Yn+1R+P,+ib#[8+DO#m1@D)$Zc%T2@pS$l4#,Y$1c#FT <@v! q%&d$$C@$G5@@~ Z:@+<@_|@<|@vR@vR@$4@<|@<|@vR@Eu vR@<|@_|@/|@WA a~ 1f 1f a~ WA ^|@/|@(|@_|@:|@/|@(|@(|@(|@_|@_|@:|@:|@:|@:|@:|@:|@:|@:|@:|@:|@:|@:|@[|@[|@[|@[|@[|@[|@<|@<|@$4@$4@vR@vR@Eu Eu Kv Kv Eu $4@[|@:|@_|@(|@_|@(|@^|@/|@(|@/|@WA 1f QT@w! p@$b@$b@ p@ p@SJ#zg#-3#T8#g%&!m#)m#!m#cj#Pv#Pv#Ia#Li=(f@kF=lF=mF=nF=oF=l-@pF=qF=Xb#WC=vz&}`@=8@UT@`Z yz#I5@I5@_7 ~)#O9 /d@;! +~ X:@r[@r[@>b@>b@>b@>b@>b@>b@>b@`:@&W@&W@&W@&W@&W@&W@&W@&W@cK#cK#&W@&W@%n%$n%$n%$-,$I$+iF$jF$/'$/'$/'$bN$%/$/H$/H$5Z+_P+oZ@Wx$BT$,b$ni$S5+Di$''%XX.s8+A($WF@T6#VF@2!+vc=h~@8F.#K.bF.Xh rE%^3 UE Bv@Sm@Yo@+H&.H&HB=#T&3!#rF=sF=+F=aC=tF=fE=5B&uF=H8@H|@T*DE*9J%RQ*:-@j%+Zc%|F.PD@Eb#Eb#Eb#Eb#%;$,'+,'+8T@r'@6_&r'@r'@3+$o>&o>&<-@)]=|r$(8%(8%o>&o>&3+$g>@fD@fD@-z@)m+sz@sz@>{+>{+,{+O$+2|+2|+2|+2|+']$']$A1#A1#A1#Yx%li@h/+h/+Ub+=1@})#})#|)#})#})#})#})#})#})#})#R2@tp%tp%tp%a/$-o$zx$UH#,]$OX#rV$mF$mF$qX+qX+L6@L6@5V+Gz$'(@3|+f<#D[#4&#Qq@hN$KB@(R@!(@zr$BN so Qg Ld U-@R} _,@$p@Ux no%mP%Y!&4`@q%&FN c~ R~#d>#AF=BF=CF=DF=DF=EF=FF=R**GF=)o&Is#Me#0^.HF=IF=*$+9b.$!._/@JF=aK.KF=C@.V^.F7@LF=MF=NF=Kn@OF=1E.PF=Ek.#c.j]#QF=RF=SF=TF=UF=VF=lz=WF=XF=YF=ZF=`F= M@ G=.G=+G=@G=fo&m<$A5 ;B$RW.(r%W)*!5@QX.GM@@>#;>+r|$r|$r|$K4#.$##N+@N+hX@;B+ny+0$@-(@s<@Kx#4v#.5@!G+>-+dc#x6@KW$am%#G=$G='Q%wZ#}'#%G=,-%!/+l8+E#$&:%s[%-o#3l#`D*W:%V:%mD$I5%v|%G0+dF$)l#'l#cF$Gy#0_%F0+F0+F0+cF$id+~i#V4#=2+{f+Wg+b[+Ng+_k+[]+]_+!k+Tt+^/+Tt+]/+RO@}&@}&@e0#=w+ED+3 @sd+[3@F]#kv%vD$e!@Pw#k[$C:*y_%Q-$T~#/|@:&%d$$Y#%_E$1r@W~#r[@>b@[|@$4@Eu Eu $4@<|@$4@vR@Eu vR@<|@:|@/|@@~ YA a~ a~ WA /|@(|@/|@/|@(|@_|@^|@^|@/|@(|@_|@_|@:|@[|@:|@:|@:|@:|@:|@:|@:|@:|@:|@[|@[|@<|@<|@[|@:|@:|@$4@$4@$4@vR@vR@Eu Eu Eu Kv Eu vR@$4@<|@[|@:|@:|@:|@(|@/|@(|@_|@(|@@~ a~ 1f !)#8.#h$#h$#h@#h@#OH#SJ#gy#cj#)m#07#07#)m#!m#g%&KN#*)&Bz=;=&kF=&G=#t&*G=ca*z .28./g+=G=-G=hj#K~ c.#%2@0~ |C I5@eP@A&#U:@/d@Y:@X:@>b@>b@r[@X:@rG rG rG >b@>b@>b@r[@r[@$}_%wt$wt$wt$DR@{L$_J$Lf Lf Lf G~ G~ va va va Qk#Qk#(7 VH (7 VH Sr Sr '8 '8 '8 '8 Md Md Md Md 4C#fX#c0&:7 Ui CD Vj .^+./@to@Nj#ur$Xo$m[+zG.ZF@5)#XX.''%j %90$bv$c8$)H${J$ K$ K$%n%$n%$n%$-,$I$+iF$jF$/'$/'$/'$bN$bN$bN$+@%%/$WK+oZ@*6$BT$N;$x4#(R#l~+S)@J.+9e@f>@q1@q=#:X@E_+7F.{N.bF._Q.Of 2/ ^3 L~#@|#c,*;G=;G=+H&+H&HB=Pk@>G=+F=,G=sF=%D=&D=fE='G=)G=S%B#@B#@B#@`b&`b&`b&`b&!D+!D+!D+!D+!D+!D+!D+!D+/{ Kh+7P.Kh+T_+T_+Kh+oh.7P.Kh+Kh+Kh+Kh+7P.oh.y4&7P.7P.7P.7P.7P.G|@T_+$(+oh.iS.oh.Kh+7P.]@+iS.G|@u!=[f.[f.x{+23+US+US+';$';$';$US+US+US+23+23+23+9g.'].'&@'].FA+Q] FA+'].|.+FA+Q] P] Q] FA+'].:e.T_+T_+G|@G|@G|@G|@Kh+Kh+G|@Kh+7P.oh.oh.oh.7P.7P.$(+T_+T_+G|@Kh+7P.7P.oh.y4&y4&oh.oh.7P.7P.", "VW.G6.hY.hY.G6.VW.8v.Hu+9, X)@hY.VW.PI.PI.Hu+xX%O7.O7.O7.x5.is@is@is@xX%xX%xX%xX%O7.O7.O7.O7.#k.#$*+%;$r'@Eb#P:$Eb#Eb#g>@g>@3+$o>&<-@)]=)]=|r$o>&o>&o>&3+$g>@fD@-z@)m+>}&E_+sz@P$+P$+P$+O$+O$+87$87$87$2|+O:+']$']$']$li@li@h/+Ub+=1@})#})#|)#})#})#})#})#})#})#})#R2@A1#C/%9v%9v%nF$-o$IR$UH#a/$0/$0/$0/$QB$QB$QB$QB$QB$QB$~}@L6@'(@>/#|v@u@+qZ.c~#.p DJ.=$$3=$F5 so jl [} 8j#n| $A@sI@~A rI@.D%4`@{A v! '8@Ox@(C@Z7*(G=_G=:G=_@fG=gG=hG=iG=jG=kG=lG=mG=nG=oG=pG=qG=rG=sG=tG=uG=P8*9;&i~@| +vG=V)*RI&LD@-c@H5$,7$S,+{}$r|$K4#.$##N+@N+hX@;B+ny+0$@-(@s<@Kx#4v#.5@!G+$-+$d$2~#Z6#wG=,Q%xG=yG=,Q%I~=zG=AG=BG=_w$88++$=x<%-o#3l#3l#`D*Ac=N1%!V*!V*mD$nD$T6%0_%kD$F0+F0+F0+^H$^H$id+.I#~|+V4#=2+$a@{_+2$@V4@1$@]_+8X+Tt+}T+}T+sD+]/+]/+p=$p=$-9@1]+m;@g[+[/+d*$s}@6:@sP$pS$%{#i3&Sn&Pz$E&#Z:@cN@_E$ S#xW$C'$7`@cN@7G@sG <|@vR@Kv Kv vR@$4@$4@vR@Eu vR@<|@:|@(|@^|@WA YA WA /|@:|@:|@(|@^|@/|@(|@_|@_|@_|@_|@_|@_|@:|@:|@:|@:|@:|@:|@:|@:|@:|@:|@/|@(|@:|@<|@$4@$4@<|@[|@$4@$4@vR@vR@Eu Eu Eu Eu Eu vR@vR@$4@$4@<|@<|@[|@[|@_|@(|@(|@_|@_|@^|@YA WA ')#XC@ p@ p@h@#8.#vg# t#)m#^0#87#^0#97#/i&~m#3>&sD=b%*K&&xd#dj#tt=3<.CG=J#+tL DG=EG=FG=GG=K~ ^Z#/0@}|@I~ fG#aP@cK#G0 H~ t! X:@>b@>b@rG >b@>b@rG rG rG >b@r[@r[@r[@X:@eP@eP@eP@eP@eP@eP@eP@eP@J${J$Ls$Js$im$bv$%6$J$+%K$,H$Gs$,H$%K$4($J$+J$+J$+%6$%6$T@+T@+T@+b>%v,$v,$v,$-,$I$+iF$jF$ K$ K$V~$V~$V~$V~$;M$g>&_P+*6$:8$K1#'p$p=#XX.S)@<-+Nu#:X@g>@B:&Qv#AF@Cr+;$%s| r| &7 !o hr#:&$z, &3#V8 HY%HY%+H&HG=IG=JG=@p=+F=,G=KG=%D=LG=fE=MG=S+&w$.JD=tF.t4.n3.72.~Z%w{@Q+&j(#j(#j(#w{@CI#S`%w{@w{@w{@CI#CI#CI#S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%&r=*r=*r=&r=sX%S`%sX%S`%CI#S`%*r=uG#*r=sX%sX%S`%S`%&r=uG#uG#sX%w{@*r=sX%S`%CI#CI#CI#S`%sX%&r=sX%CI#S`%&r=*r=&r=S`%sX%sX%sX%sX%sX%sX%sX%sX%N:**r=&r=S`%S`%&r=*r=N:*&b=&b=&b=&b=&b=&b=&b=&b==Z+l]#&b=&b=&b=&b=l]#l]#KD=5;@!G='m*'m*!G=5;@KD=,S#,S#,S#,S#,S#,S#,S#$' >0+{h&{h&{h&~h&~h&~h&~h&0, 0, 0, 0, 0, 0, 0, 0, 17*xE*xE*17*zi.zi.17*U*@J> J> zi.zi.J> 17*xE*U*@';$US+US+23+US+US+';$d #x{+[f.OP*US+OP*u`.u!=';$x{+x{+OP*23+US+US+';$';$';$';$';$US+23+23+23+OP*Bz$>( JI$l}+>( 9g.l}+n|.l}+>( Bz$aH@aH@9g.JI$n|.Kh+Kh+G|@G|@G|@G|@T_+T_+Kh+7P.oh.oh.oh.7P.G|@T_+$(+$(+T_+G|@Kh+7P.7P.oh.y4&y4&oh.oh.7P.7P.", "VW.G6.hY.hY.G6.VW.8v.8v.G6.9%.X)@8v.#9.#9.PI.xX%xX%O7.O7.x5.is@is@is@_r+_r+_r+xX%O7.x5.x5.x5.#k.#'{+%;$Eb#lH@lH@lH@Eb#-z@fD@fD@g>@3+$o>&<-@<-@o>&o>&o>&o>&3+$fD@-z@)m+,'+>}&sz@x=$~b#x=$,{+%>#B'#B'#N$+N$+5W.5W.5W.O:+d_+li@li@h/+=1@})#})#|)#})#})#})#})#})#})#})#R2@A1#}7$C/%9v%Os%nF$IR$IR$tp%tp%tp%tp%a/$a/$a/$Os%9v%tp%tp%QB$tD$'(@Bp+h&@cR.uz@%++}-@pB.3L.;1@X7@#p@T} Qw#<} l[#{J %E aB {A Vx PC &E $W@]8@ ` QG=RG=SG=TG=UG=VG=WG=XG=YG=ZG=`G=UA&5.. H=.H=+H=@H=#H=$H=!>.hK.%H=oj.Uc@&H=*H==H=Ln@Lu.I-.^:.-H=;H=AI#P'+>H=,H='H=)H=!H=~H={H=]H=^H=/H=(H=oG=[t@_H=:H=+{}${}$r|$K4#.$##N+hX@f^@ny+e^@b~@s<@Kx#4v#.5@fp+iV+KW$|H=R)*1H= _=2H=3H=Kc*Jo*4H=zG=5H=6*%ty$6H=W:%3l#3l#3l#`D*u.=7H=M1%M1%M1%{:#H5%lD$Zg%A!$G~$F0+^H$Gy#id+~|+~|+=2+Vg+#4+mi+hc#}&@RO@:k+Tt+I6@_T+}T+sD+]/+]/+e0#e0#up+T.+rd+S@+jh#F+@OZ.wp&y[#4r$07$5(*Tv%J!$H~ (|@cB S#xW$OH%W!&{A qI@Fu Fu <|@Eu &E Kv vR@$4@$4@vR@vR@vR@<|@[|@_|@/|@^|@@~ @~ _|@<|@<|@(|@^|@^|@(|@$4@<|@<|@[|@:|@:|@_|@_|@:|@:|@:|@:|@:|@:|@:|@:|@WA ^|@_|@<|@vR@vR@vR@vR@$4@$4@vR@vR@Eu Eu Eu Kv vR@vR@vR@$4@$4@$4@$4@$4@[|@_|@(|@_|@:|@_|@^|@YA ^|@kI@w! h@# p@h@#8.#vg#6q#^0#]0#nx 87#97#/i&~m#EL#/=&b4&b4&4u=#t&8H=Qo+9H=$4.0H=Xx _x&&7&V.$]Z#'8@b~ 2|@I~ aY aY |C s[@es sG >b@r[@r[@>b@rG sG rG rG >b@>b@r[@X:@X:@X:@Z:@T~#T~#T~#T~#T~#T~#T~#T~#eP@eP@#l[+tc@.*+Ei$~}%T4$09$4($)H$)H$ K$>J$>J$!H$;u$a8$4($J$+T@+J$+%K$,H$Gs$,H$%K$4($J$+J$+J$+%6$%6$T@+T@+e;%b>%v,$v,$v,$-,$I$+iF$jF$1#YP.1/ _1 g< ./$:u `p rD=TE=aH=iR&HY%yF&HG=sm=JG=6U%+F=,G=bH=%D=aC=fE=cH=c3+dH=M:*^C.v5.n3.>'.~Z%w{@Q+&j(#b,+j(#Q+&CI#sX%w{@w{@w{@CI#CI#CI#S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%&r=*r=uG#uG#*r=&r=sX%sX%CI#CI#S`%*r=uG#*r=sX%sX%S`%S`%&r=uG#uG#sX%w{@uG#&r=S`%CI#w{@w{@CI#S`%*r=sX%S`%S`%&r=*r=sX%CI#sX%sX%sX%sX%sX%sX%sX%sX%vu#uG#sX%CI#CI#sX%uG#vu#dr=dr=dr=dr=dr=dr=dr=dr=dr==Z+&b=yE#yE#iM#l]#=Z+KD=5;@!G='m*'m*!G=5;@KD=,S#,S#,S#,S#,S#,S#,S#$' u.@&, 0, 0, {h&~h&~h&>S%&, &, &, &, &, &, &, &, xE*U*@U*@xE*J> zi.17*..=J> J> zi.zi.J> 17*xE*xE*';$US+US+23+23+23+US+';$x{+[f.OP*';$OP*u`.u!=';$23+23+23+US+US+US+';$';$';$';$';$US+23+23+OP*OP*aH@>( l}+l}+>( >( JI$f^+l}+>( Bz$bH@aH@9g.JI$n|.7P.7P.Kh+G|@G|@T_+$(+$(+7P.7P.oh.y4&oh.Kh+T_+xc+xc+$(+$(+T_+Kh+7P.7P.oh.y4&y4&oh.oh.7P.7P.", "6% 6% 6% 6% 6% 6% 6% ;H.<4 6% WW.n` WW.6% Hu+x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%.IB Xn eH=e|#d<#sj@fH=gH=}%%i;=/M*=9$uX$Mr=q#$N4&HB%C2&ZF@PD@PD@PD@PD@PD@PD@PD@PD@PD@r1&o>&fD@1k+&a@-z@3+$o>&o>&o>&o>&o>&o>&3+$fD@-z@)m+,'+>}&r=#4g@x=$x=$P$+sz@O$+DU.g~@~}@g~@Y{@O:+t8+G~++x@#*+d_+li@Ub+=1@=1@Ub+Ub+Ub+=1@=1@})#})#R2@4V+4V+tp%tp%Os%Os%Os%nF$9v%9v%9v%9v%9v%9v%9v%Z}&m9&0r$C/%Z]$']$l[+'(@>/#< +cR.YD.rO.R$+!t@uo@n9+|-@IT#n{ Ld d2 B4 l[#{J :C@5G@Cu i0$|f %2@YT@~p$hH=iH=jH=kH=lH=mH=Ce&S**[s&nH=oH=pH=qH= h@rH=sH=tH=uH=3[@;_@ M@75+vH=Tx=wH=xH=nj&$*.A@.yH=zH=AH=P*.A7.BH=CH=DH=EH=FH=GH=HH=IH=JH=KH=LH=MH=NH=OH=PH=QH=RH=D7&SH=f *v7*{c )-#yG.yL*{8*f,$D~$J1#cZ.{}$A,+;($4%$BI+#N+rd+__+ny+K@@0$@c&@yb#M)@ih#cr+X1+u6@G,*6L#TH=UH=;-@VH=WH=]n*XH=V)=YH=ZH=FB$`H=*Q#x<%Y:%Y:%x<%x<%pA*mR*}E*}E*74%<3%!/$!/$ I=A!$fF$ 4+y0+QL#~|+V4#Pg+F:+gi+Xg+$4+]_+]/+e0#Tt+^_+b$@}T+VH@-:#xV$`n+up+wD+>2+h[+Tx#kv%.I=vw%t.&)f#f%%Tv%Ss%=;%2r@sG X~#_E$2U$wW$V!&W!&{A qI@qI@Fu vR@vR@vR@vR@Eu Eu Eu Eu <|@<|@[|@:|@_|@(|@/|@/|@:|@:|@:|@:|@:|@:|@:|@:|@[|@[|@:|@:|@_|@_|@_|@(|@_|@_|@_|@_|@(|@(|@/|@/|@@~ ^|@/|@_|@:|@<|@$4@vR@<|@<|@$4@$4@$4@vR@vR@vR@Kv Kv Eu vR@$4@<|@[|@:|@<|@[|@:|@_|@/|@^|@@~ @~ YA a~ ')#QT@))#+W@w! 6q#WE@zn#Px@k1#]0#07#dj#ej#Qw=~*&+I=_v&B1&F:.Ey@.@@@I=30&.w&~*&gS$iF%]Z#'8@zK XA Nx@`Z k] l] [e 3|@Z:@>b@sG -! -! sG >b@X:@sG rG X:@+~ Y:@Y:@W:@W:@ <@H~ Z:@`:@`:@`:@+<@Z:@+<@`:@+<@.<@>8 >8 H~ l$#V&&PB%PB%o5=o5=s1%|i L-$1C G0 G0 /d@ 9 (d@/7 /7 dw S^#')#lI@lI@Un$lI#lI#Tg Iw% u%xz#a9 ^+gs#dk#|0 |0 |0 G@ G@wz@!m$;[@qZ.H)+2k+dy%iA%g&@Ar+[c@XX.2S#2S#%*$90$bv$)H$)H$#TI#HG#tz#so@[O.42 QU.M^ :: 46 4' +<##I=d>*N**N**0+>0+>0+sq*sq*mh.mh.mh.yi.,0+sq*Nc&X`+ME+ME+ME+>0+,0+u.@yi.yi.u.@,0+4,+S>+pK+FG*lt*lt*FG*pK+S>+pK+pK+pK+pK+pK+pK+pK+pK+US+US+US+US+US+US+US+US+OP*OP*OP*OP*OP*OP*OP*OP*$3.$3.kl=0&+RO+V&$m|.m|.RO+RO+RO+0&+0&+0&+0&+0&+$(+$(+T_+G|@G|@Kh+Kh+7P.y4&oh.7P.Kh+G|@G|@G|@G|@oh.oh.oh.oh.oh.oh.oh.oh.G|@G|@G|@G|@G|@G|@", "6% 6% 6% 6% 6% 6% 6% s3.h% 6% WW.WW.1% i% PI.8v.O7.O7.O7.O7.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%&fD@1k+1k+-z@3+$o>&o>&<-@<-@<-@<-@o>&g>@fD@-z@,'+>}&r=#0e@x=$P$+sz@sz@O$+DU.Y{@g~@g~@Y{@O:+5W.+x@+x@#*+d_+d_+li@h/+h/+Ub+Ub+Ub+=1@=1@})#})#})#Yx%4V+4V+tp%tp%Os%Os%Os%9v%9v%9v%9v%9v%9v%Z}&Z}&/9$/9$Z}&C/%A1#V_#tD$'(@f<#G)+,N.cR.g#@6&#rm#Gh+E(@>g$;@# X Jf X-@7, _,@>b@rG tG tG dP@%2@n$#@l&>I=,I=#**iH='I=VG=)I=!I=~I=ZG={I=]I=5|.^I=/I=(I=_I=:I=#A,+;($6%$:/#VK+ib#'T@*>+my+0$@b&@z$+L,@t9#cr+Ll+G,+`7%lI=mI=nI=X{*iD#oI=pI=gF#qI=rI=.t*sI=ze$&:%w<%OB$s[%k}%pT#/C#`D*`D*7I*7I*}E*<3%<3% I=kD$eF$j8+y0+.4+~|+=2+=g${_+gi+$4+si+)k+I6@XN#I6@}]+_T+vr+ur+.B+`K+up+sr+[P+-K@}_+4h#mH@|Y.r)&Q;%+3%>1+}h$>M )J -! v! /Y@Y#%.[&wW$|$&cB {A qI@v_$;z$Eu Eu Eu vR@vR@vR@vR@vR@<|@[|@:|@:|@(|@(|@/|@^|@:|@:|@:|@:|@:|@:|@:|@:|@:|@:|@:|@_|@_|@(|@(|@(|@:|@_|@_|@_|@(|@(|@/|@/|@^|@^|@(|@_|@:|@<|@$4@vR@<|@<|@$4@$4@$4@vR@vR@vR@Kv Eu Eu vR@$4@<|@[|@[|@$4@<|@[|@:|@(|@/|@^|@^|@YA 1f ')#QT@))#+W@w! 6q#I,#(0#Px@Qx@]0#07#~m#dj#Q8#`t=yg#,s&h$.tI=Ey@uI=vI=@D%Qv&d$$Wx #~ =8@,8@jt@S^#]C@]C@%~ [E@YT@2|@Z:@>b@sG tG tG sG >b@X:@r[@X:@t! +~ +~ t! X:@r[@.<@Z:@`:@s[@s[@s[@`:@+<@`:@s[@`:@.<@>8 V:@>8 #dy%q4$.v@}x@,>+dk@ *+2S#%*$N)$bv$qn%)H$)H$#r!$i($=[@lm@Rq@3v@di ]z I^ :: {1 UE@K,##|#*3#9;*N**wI=xI=iR&;G=yI=4`%bn=c/*/p=zI=AI=KG=@F=%D=&D=BI=0+>0+sq*sq*sq*sq*,0+,0+,0+,0+,0+,0+,0+,0+>0+,0+u.@yi.yi.u.@,0+>0+4,+FG*lt*b=+b=+lt*FG*pK+pK+pK+pK+pK+pK+pK+pK+pK+US+US+US+US+US+US+US+US+OP*OP*OP*OP*OP*OP*OP*OP*c`*c`*c`*0&+0&+RO+RO+RO+0&+0&+0&+RO+RO+d%$d%$d%$G|@G|@Kh+Kh+7P.7P.oh.oh.y4&y4&7P.Kh+Kh+Kh+Kh+7P.oh.oh.oh.oh.oh.oh.oh.oh.Kh+Kh+Kh+Kh+Kh+Kh+", "6% 6% 6% 6% 6% 6% 6% h% i% 1% WW.1% 6% h% #9.8v.O7.O7.O7.O7.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%&fD@)m+)m+fD@3+$o>&o>&)]=)]=)]=)]=<-@3+$g>@fD@,'+B:&K9#Qv#0e@0e@sz@sz@P$+x=$DU.>9@Y{@Y{@2|+87$#*+#*+#*+#*+#*+#*+#*+#*+h/+h/+h/+Ub+Ub+=1@=1@=1@V_#V_#Yx%Yx%QB$tp%tp%a/$9v%9v%9v%9v%Z}&Z}&Z}&Z}&pr%RA$Fs%N@%N@%3)#g~@>9@i|# #+rL.h&@< +kP%i($&$#o=$OA$h!@Uk$>f#CD il T} ,8 _t X:@rG J=,J=ZC%Jv =;%#D%.6$yG.eM*0%$rZ@f,$VQ@Q1+e&@_/#6%$4%$BI+zI+>T@*>+my+0$@b&@s<@!B+M)@+w+b$@n0+MQ$'J=)J=!J=~J=cJ#{J=i5*]J=^J=L{=/J=*}%WI$ Rx@-! $4@#W@#~ gS$$]Y@v! ST@6G@RC ;z$Kv Kv Eu vR@vR@$4@<|@<|@:|@:|@:|@_|@(|@/|@^|@^|@:|@:|@:|@:|@:|@:|@:|@:|@_|@_|@_|@_|@(|@(|@/|@/|@:|@:|@:|@_|@_|@(|@(|@(|@/|@/|@(|@_|@[|@<|@$4@$4@<|@<|@$4@$4@$4@vR@vR@vR@Eu Eu vR@vR@$4@<|@[|@[|@vR@vR@$4@[|@:|@_|@(|@/|@a~ 1f ')#!)#+W@w! w! bj#|c#g1#k1#k1#]0#97#DL%5r&(J=}d&%b&_J=:J=Ey@b@sG tG tG sG >b@r[@+~ +~ +~ t! X:@r[@rG sG >b@rG rG sG rG >b@r[@r[@r[@>b@r[@+~ ;! (7 ]|@>8 9V ]@$9'$ZT@ZT@mQ mQ mQ }|@1|@3|@@~ a~ kI@B_#B_#Un$Rn&3e%8'$9[%`t%_>$,n#eq#SP.$Y.A(@0I.HG.uL.2Y.(>$(>$(>$eR.gU$=@#Pw#t}@-/#*J$aX#C~%cD$ v@.B$6 @j %%*$N)$90$bv$qn%)H${J$&fD@)m+-z@g>@o>&o>&3+$|r$|r$|r$|r$)]=o>&3+$wX@B:&B:&K9#K9#r=#r=#sz@sz@P$+P$+O$+DU.2|+2|+2|+2|+d_+d_+d_+#*+#*++x@+x@G~+li@li@h/+h/+h/+Ub+Ub+Ub+Y{@Y{@g~@g~@Yx%Yx%Yx%tp%tp%9v%9v%9v%Z}&Z}&Z}&Fs%sD$=7$0r$&W#ns$3)#']$2|+88$88$)2+u8+M#$8M@pl%-W+6>%$l+GS$Gi$E_#Ho$0_$7V vG T-@>8 rG 9~ :#Z3+!6+A0+w'$*2#F7#.(%_K#OR#s[%w<%V:%!V*/,=nD$l%$l8+^6++*$E:+$a@Sl+Xg+$4+:6+O0+}]+:c@5e@+B+;w+@k+v)+xp+)-+c[+_|+>2+h[+Tx#D@+|e%P.%C7%OK$=z$lh$s! Yr rG <|@#W@#W@Ua&8@ST@$4@6G@ds xt *E Kv Eu vR@$4@<|@[|@:|@_|@_|@_|@(|@(|@/|@/|@^|@:|@:|@:|@:|@:|@:|@:|@:|@_|@_|@_|@(|@(|@/|@/|@/|@:|@:|@:|@_|@_|@_|@(|@(|@(|@(|@_|@:|@[|@<|@$4@$4@<|@<|@$4@$4@$4@vR@vR@vR@Eu Eu vR@vR@$4@<|@<|@<|@Eu Eu vR@$4@[|@:|@_|@(|@a~ 1f ')#!)#))#w! w! 6q#b4#vK k1#k1#]0#^0#0C#0C#4r&Pj&3y&CI b@rG sG sG rG >b@r[@t! t! t! X:@r[@>b@rG rG >b@>b@>b@>b@r[@X:@t! t! ;! W:@+~ Y:@]|@(7 ]|@Y:@YT@mQ >P ~M m$#m$#m$#m$#||@}|@1|@3|@%W@YA I~ (V#9m&9[%PB%mY#yA%`8%cJ&hq+(>$p%$Yx#tL.qL.h-+h-+h-+E[#WJ.>T.F2&F2&Rs%j8$sm#f0$r4$C~%Y}&O@%Bj$y4#`&+T4$T4$90$bv$qn%!H${J${J$Q =H*XJ=f;%YJ=ZJ=zu=]**'^.|u=1u==8&:7&:7&P:$r'@r'@%;$%;$$*+$*+o>&g>@-z@fD@3+$<-@o>&3+$|r$|r$|r$|r$)]=o>&3+$wX@B:&^R@B:&B:&K9#K9#r=#r=#sz@sz@sz@P$+O$+DU.>9@>9@h/+li@li@d_+#*++x@+x@G~+d_+d_+li@li@h/+h/+h/+h/+DU.>9@>9@>9@g~@g~@~}@Yx%QB$tp%tp%tp%9v%9v%Z}&Fs%&c$=7$CM#dD$ns$k %@ +@h+O:+O:+WS@-i#f2%Gz$<>%Gn#` &:g$*h&Qv%GS$OA$Z^#m>@-{ >! U-@,8 <@.<@+<@}|@s0*Tm&lw@DF&3O&`J= K=.K=+K=@K=#K=$K=%K=&K=M-.*K=OT.=K=-K=;K=>K=,K='K=)K=+x=iJ=,m&>9#!K= $.~K=_.@[X.%D.hK.9w.{K=]K=^K=/K=(K=_K=:K=k+Xg+Xg+mD+N0+P0+}T++B+s6%&t@<&@sr+rr+1]+V&+T.+(/+;(@Rb+TF@cD#E)+IB$G_#x'%!M -E *8@*8@:C@}A >8@W.$] $] $hP%~ $TT@$4@R5@-! .~ ds }g Kv Eu vR@<|@[|@:|@:|@_|@_|@_|@_|@(|@(|@(|@(|@[|@[|@[|@[|@[|@[|@[|@[|@:|@_|@_|@_|@(|@(|@/|@/|@[|@[|@:|@:|@:|@_|@_|@_|@_|@_|@:|@[|@[|@<|@$4@$4@<|@<|@$4@$4@$4@vR@vR@vR@vR@vR@vR@$4@$4@$4@$4@<|@Kv Eu vR@$4@<|@:|@_|@_|@YA a~ kI@QT@))#+W@+W@]M 'm#4!#Px@:0#^0#^0#Qj&/Q#hK=iK=jK=)k*O>@kK=lK=mK=.z Pv l1# n@mt@.i#+L@.9 ')#kI@I~ {M *0@*0@[e EN#`:@>b@rG rG rG rG >b@>b@r[@r[@r[@r[@X:@X:@t! t! X:@t! +~ W:@W:@Y:@Y:@Y:@+L@/d@;! ;! ;! ;! W:@t! :|@[|@%2@dP@R5@R5@R5@dP@}|@}|@~M >P >P 3|@YT@>S s]&8:%SY$nK=8e%%i#oK=a]@mZ.U)@u8+~b#~b#V##f$@O]+8R+B[#4P+4P+5w$z[#Tz$NW$k7#Ts@bE$L>%j%%Jc&L1#$*$09$09$4($4($c8$)H$ K$ K$!I$!I$im$%K$%K$Rj$Sj$Sj$Ms$a8$%K$%K$%K$4($4($4($J$+J$+J$+%6$%6$T@+T@+b>%~K@R)@6G+CM@I$+37$90$=k$KG%z1#~($F:%/M$( +^g&lZ.Th%:J$TY$;H$GS$SB$ls+|w$FR@Lf @9 U-@.9 b4#H,#bj#6u#ky&u{ i$#P8#,6#T &F-&N,&4>&HY%iR&Ok@Pn&Kr pK=b:*,G=KG=zI=GD=qK=RU rK=H*>H*zw*zw*>H*>H*>H*zw*zw*zw*zw*zw*zw*zw*zw*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*,l=yk=yk=yk=,w$,w$,w$,w$Ru${0*~0*5+=Nh=,w$yk=kl=iS.iS.iS.iS.iS.iS.iS.iS.y4&y4&oh.oh.oh.y4&iS.iS.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.oh.", "-H.-H.-H.-H.-H.-H.-H.R_ R_ R_ R_ *_ *_ *_ i% VW.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%@fD@g>@o>&)]=<-@3+$)]=)]=)]=)]=<-@3+$g>@6+*B:&^R@8T@8T@B:&K9#r=#0e@sz@>{+>{+>{+,{+DU.>9@l[+h/+h/+h/+li@d_+d_+#*+#*+#*+#*+d_+d_+li@li@li@MX.P$+x=$x=$DU.>9@>9@g~@g~@QB$QB$tp%tp%9v%9v%Z}&Fs%Fs%8o@8o@8o@N@%k %+B$@ +Z]$Z]$1/%1/%6X%CA$oM%Sd&d>&` &r$&V<&&g%Bo+ls+ms+DR@Lf >! 46 y&#U:@.<@$4@@W@s0*yK=zK=AK=BK=CK=DK=EK=FK=GK=HK=IK=Ez@*_.jI JK=KK=LK=MK=NK=OK=PK=QK=RK=SK=TK=&x.UK=A@.VK=jK.WK=B@.<..Lk.XK=YK=ZK=`K= L=.L=*J=!2&+L=@L=#L=$L=%L=&L=EC=*L==L=-L=%)&v! j!$q~$nV$tz#^R@W'*FB@T8@+f^@;B+my+0$@b&@c&@pe#pe#ep+Hn+)-@;L=>L=d'@c'@,L='L=)L=!L=~L={L=]L=^L=/L=(L=^;%0G$Bb+Ab+B:+5[+,X#+;$*2#U%$AC$pD$nD$XL%eF$^6+B)$E:+E:+>k+ir+gi+-2+s=@Nb+_T+VH@+B+s6%&t@L)@wD+wD+rr+!-+(/+$t@f>$(m@^k@W0+N4$z~$xJ+[g $4@cB 7`@%A@cN@]Y@W.$~ $x!*x!*x!*Oz$ ~&R5@R5@.~ .~ .~ -E vR@vR@$4@<|@[|@[|@[|@:|@:|@:|@:|@:|@:|@_|@_|@[|@[|@[|@[|@[|@[|@[|@[|@[|@[|@:|@:|@_|@_|@_|@(|@[|@[|@[|@:|@:|@_|@_|@_|@:|@:|@[|@[|@<|@<|@$4@$4@<|@<|@$4@$4@$4@vR@vR@vR@vR@$4@$4@$4@$4@$4@$4@$4@Kv Eu vR@$4@[|@:|@_|@(|@@~ WA 1f ')#QT@!)#))#'m#'m#Rk#vK g1#07#97#Qj&_L=:L=b@>b@r[@r[@t! W:@;! ]|@Y:@;! ]|@(7 (7 (7 ]|@]|@.9 /d@Y:@+~ t! X:@>b@6F QC QC PC &E Kv Kv (0@R5@}|@}|@m$#~M ~M >P HT o)$J4%1L= t=48%FU$Th%q0&=S++{@Z@+DU.Ub+R2@1)#Js%4Z.tF%hs$hs$[3%[3%}(%4O#]q$`o$8o@7I#)g$Jc&lw$!k#hX+Ej$Rj$%K$4($)H$)H$ K$ K$!I$!I$im$%K$Rj$Sj$Tj$Sj$Ms$a8$%K$%K$%K$4($4($4($J$+J$+J$+%6$%6$T@+T@+b>%1 @x;@&n%CM@-,$37$90$po%z1#2=$i+&/k#FU.0]@%L+,T..E#wJ+WJ$A'$9P#It$wt$n)$|C 0~ ')#e1#97#2L=b)*DL%+i#3L=&4>&;G=iR&JG=4L=5L=ml=6L=KG=Av@zI=:A=7L=tS.#].C{@k1+t4.D6.o3.h;#T`%k5+w{@w{@w{@w{@w{@w{@w{@w{@Q+&Q+&w{@S`%S`%S`%CI#CI#Q+&w{@w{@w{@CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%&r=sX%S`%CI#S`%S`%sX%sX%CI#CI#CI#S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%S`%S`%S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#&r=&r=sX%S`%S`%sX%&r=&r=S`%S`%S`%S`%S`%S`%S`%S`%Q+&w{@sX%*r=uG#uG#*r=*r=S`%&r=*r=&r=S`%S`%sX%*r=sX%*r=uG#*r=&r=sX%&r=uG#iM#iM#iM#iM#iM#iM#iM#iM#iM#iM#&b=l]#l]#=Z+dr=dr=KD=KD=KD=KD=KD=5;@5;@5;@KD=KD=KD=5;@5;@5;@5;@!G=$' $' $' $' $' $' $' $' mO#mO#jM#jM#jM#5,+5,+5,+wr*+v=#x+#x+#x+wr*&s*xr*+v=wr*=^@&s*&s*=^@wr*k4@-x#>H*zw*GJ@GJ@zw*>H*>H*zw*zw*zw*zw*zw*zw*zw*zw*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*yk=yk=,w$,w$Nh=Nh=5+=5+={0*~0*5+=Nh=,w$yk=,l=>l=iS.y4&y4&y4&oh.oh.oh.oh.oh.oh.7P.7P.7P.oh.y4&iS.oh.oh.oh.oh.oh.oh.oh.oh.7P.7P.7P.7P.7P.7P.", "l` l` l` l` l` l` l` *_ *_ *_ *_ *_ R_ R_ 1% 9, is@is@is@is@is@is@is@xX%xX%xX%xX%xX%xX%xX%xX%K+t~ 8L=$1 9L=0L=aL=Y[+a[$zU%bL=BC.D*+wK=|u=xK=1u=1u=zD&Vt=P:$r'@,'+,'+3+$g>@fD@3+$<-@)]=<-@3+$<-@<-@<-@<-@o>&g>@fD@as$B:&^R@[-@W4*8T@B:&r=#0e@E_+E_+$*+$*+%>#O$+>9@L6@Ub+Ub+h/+h/+h/+h/+li@li@+x@#*+#*+#*+d_+d_+li@CU.P$+0e@0e@x=$x=$~b#>9@>9@qX+QB$tp%tp%9v%9v%9v%N@%ns$bE$8o@1S#|0#|0#k %k %}7$}7$/1&/1&<7&<7&Y'%$f&,g&-N+q9%b>&PK$@J$d]@i!@Pz$&S '8 ZG@_} c2 ]|@+~ v! @ML=fF#NL=OL=PL=QL=RL=SL=TL=UL=VL=WL=XL=5S%em%Qd$1H$xd% 5$hD$@;$@;$`A$T%$CC$DC$fF$G0+I0+.4+ed+@4+6e@(+@/+@qD+t&@v=@sD+}T+VH@qr$,N$#9@L)@Rt+:w+b@>b@rG rG rG X:@X:@X:@X:@+~ Y:@]|@/d@8v |g ;8 (d@(d@|g 8v 5h |g ]J $p@6F 6F 5G@6G@Du Ow aC%aC%gB Rw +z c.#/0@)8@)8@yR@+l&8+%|E%+M=3E%y1&@M=#M=zD%$c&$M=J+@pD#-n#N$+@h+I4@8o@:$%+'%xC$~R*uy%tF%!Q#=i#5V+mF$QB$k %4[%B)+'M$N1#Qm#4Z+vp#a9$Ms$%K$%K$)H$)H$ K$ K$!I$!I$im$%K$Rj$Sj$Tj$Sj$Ms$a8$%K$%K$%K$4($4($4($J$+J$+J$+%6$%6$T@+T@+b>%F@@x;@X.@or&-,$37$T4$Q'$M$+;i#pZ%`+$r0&>v$K/&ih$J4%W{$NK$U=%M-%p2%BR@4|@YA Kz H*zw*zw*>H*aH*(k=zw*zw*zw*zw*zw*zw*zw*zw*x{+x{+x{+x{+x{+x{+x{+x{+OP*OP*OP*OP*OP*OP*OP*OP*~0*~0*~0*5+=5+=5+=Nh=Nh=yk=yk=yk=yk=yk=yk=yk=yk=oh.oh.7P.7P.Kh+Kh+G|@G|@7P.Kh+Kh+Kh+Kh+7P.y4&y4&oh.oh.oh.oh.oh.oh.oh.oh.Kh+Kh+Kh+Kh+Kh+Kh+", "WW.WW.WW.WW.WW.WW.WW.h% h% h% h% i% 6% 1% WW.G6.Vh.Vh.Vh.Vh.Vh.Vh.Vh.xX%xX%xX%xX%xX%xX%xX%xX%;+;M=>M=,M='M=r^&wh%BC.)^.D*+)M=WD.!M=P**k>&_=$P:$Eb#Eb#g>@3+$g>@g>@3+$)]=)]=<-@3+$o>&o>&o>&o>&3+$fD@-z@)m+B:&[-@6_&6_&6_&>}&r=#0e@>{+>{+$*+'{+%>#O$+Y{@~}@Ub+Ub+Ub+Ub+Ub+Ub+Ub+Ub++x@V,+tc@tc@Ar+Ar+Ar+li@,{+P$+P$+P$+DU.DU.Y{@Y{@qX+QB$tp%tp%9v%9v%9v%N@%Qy$l7#k %+*++*+|0#k %N@%98$A3%nM%nM%~1&~1&!1&Y'%e'%T8&`X.M=&b>&hh$h%%H!$i!@>g$])#%S If [} c2 RT@(|@-8@{ $~M={M=md&]D&]M=^M=/M=(M=_M=:M=&$#W@/0@V.$NA$se%gQ%gQ%x~$w~$;P b@>b@>b@>b@rG sG W:@+~ t! t! +~ Y:@(7 /d@(7 /d@ 9 9 9 |g 5h }u mt@7G@Fu }g }g }g *E .y aC%Uw aC%Rw d.#c.#lQ n$#k!$r)$( %[H%q]&PB%,f%w+%^h&*K$8;&( +k1$2Y+!V@_[%N:+1|+m~+M[#'7$f4%yC$Vy$rS$`k#CB$)Q#QB$Yx%|0#km$m~+''%k~+$*$00$Qm#Xx$9e#b9$a8$a8$im$)H$)H$ K$ K$!I$!I$im$Ej$Rj$_a$Sj$_a$a9$a9$Ej$Ej$Ej$,p$,p$4($J$+J$+J$+%6$%6$k3&k3&27$/H$~K@CM@46+f'$*W# ++'Q#z@%FU.z'$@Y.h,$J_#lT$)n#( %HB$(J$(J$fP@l$#3|@/|@WA %0@e>*_Q#IO%,T%GM=dj#r{ HM=IM=r{ 8u#[Q%&D& l&iR&HY%iR&]#*rp=,G p *^|$qy=6>#JM=bH=tF=KM=Z2.LM=c3+I7.h;#h;#v5.o3.k5+e{+w{@w{@w{@w{@w{@w{@w{@w{@j(#Q+&CI#S`%sX%S`%CI#w{@S`%S`%S`%sX%sX%&r=&r=&r=S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%CI#Q+&j(#Q+&CI#sX%CI#CI#CI#S`%S`%sX%sX%sX%sX%sX%&r=&r=&r=sX%sX%S`%*r=*r=&r=&r=sX%S`%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%*r=&r=sX%CI#CI#sX%&r=*r=sX%sX%sX%sX%sX%sX%sX%sX%j(#w{@S`%&r=*r=&r=S`%w{@S`%&r=*r=&r=S`%S`%sX%*r=sX%*r=uG#*r=&r=sX%&r=uG#l]#l]#l]#l]#l]#l]#l]#l]#&b=&b=&b=iM#iM#iM#iM#iM#&b=!G=5;@5;@KD=,S#,S#uC#5;@KD=KD=,S#,S#uC#=)+=)+$' $' $' $' $' $' $' $' 5,+5,+5,+$' $' qK+qK+qK+uq*uq*,C+Fu+Fu+,C+uq*xr*+v=wr*=^@&s*&s*=^@wr*k4@jS.b=+lt*FG*FG*lt*b=+a1+pK+pK+pK+pK+pK+pK+pK+pK+x{+x{+x{+x{+x{+x{+x{+x{+OP*OP*OP*OP*OP*OP*OP*OP*f+#&5$Ru${0*5+=Nh=,w$yk=MM=.q$NM=>l=yk=,w$Nh=d%$7P.Kh+Kh+G|@G|@T_+$(+$(+G|@G|@G|@G|@Kh+7P.oh.y4&}&>}&$*+>{+>{+O$+O$+O$+87$87$87$5W.87$d_+d_+d_+d_+d_+d_+Ar+Ar+@*+@ +@ +@ +@ +@ +@ +@ +Ar+@*+R2@R2@@*+Ar+Ar+Ar+|f++B$+B$+B$+B$+B$+B$+B$k %k %C/%C/%A3%A3%A3%A3%y7%5v$HW$HW$b2&b2&6v$HX$(1&6X%oM%&q&tF%x[##f$~q$r[#dv$ev$1d$@^+Qg w' X-@*0@oQ r<$3$*SM=Tm&TM=UM=VM=WM=XM=YM=ZM=`M= N=.N=+N=|t&@N=#N=$N=jJ=^2&%N=&N=*N==N=-N=;N=>N=hK.B@.OI=<<#PX &$>8@dP@{@$(<%hs#QW$}g$'f#h%%1w$6&#!2+3&#O:+PX#3w+3w+vy+*W#cN#cN#bv$4($,p$_a$^m$5G$8F$j%%Gx$i%%Zz$RA$L[#K[#,Z#,Z#'p$J3$qw$_8$d9$d9$!l$!l$!I$im$im$!I$!I$!I$!l$!l$5($5($_8$Wx$qw$BT$qw$BT$gX@eh$gX@oZ@*6$*6$Z&+37$+l#T@+bK%bK%YR#~t#~t#}v&#/$`.+*W#fZ.H3$2=$7R+Yk#:g$FT$cJ&jq+a6&p2%;S m$#fP@`:@`:@`:@+<@.<@W:@Y:@(7 B_#/M ]M ]M 6q# t# p@>{ 0h=d~ d~ `o@)1 5`%tq=5N=6N=7N=8N=Mj=9N=0N=5j=aN=Av@bN=bH=tF=cN=xV dN=g6@g6@v5.v5.v5.n3.T`%T`%j(#j(#b,+o&=b,+j(#w{@S`%w{@w{@w{@CI#CI#CI#S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%&r=sX%sX%S`%S`%CI#CI#w{@CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#N:*S`%w{@&r=*r=&r=*r=;Z+j(#w{@S`%sX%&r=&r=sX%S`%CI#CI#CI#CI#CI#CI#CI#CI#*r=&r=sX%CI#CI#sX%&r=*r=*r=*r=&r=&r=sX%S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#CI#&r=sX%&r=uG#vu#N:*&r=CI#sX%S`%S`%sX%&r=sX%w{@b,+*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=l]#&b=&b=&b=&b=&b=&b=&b=&b==Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+&s*=^@=^@=^@wr*wr*+v=+v=&s*,C+tq*Fu+xr*&s*uq*Fu+1<#SO+5,+k4@IV.j(+IV.k4@k(+IV.5,+SO+SO+$' k4@I&=1.+x{+US+US+x{+x{+US+u]#[f.[f.[f.[f.[f.[f.[f.[f.7P.y4&]@+iS.oh.7P.oh.iS.oh.oh.oh.oh.oh.oh.oh.OP*US+US+23+23+OP*OP*x{+x{+u]#u]#';$23+OP*[f.u!=HV.7P.7P.oh.y4&oh.Kh+T_+xc+G|@Kh+7P.7P.oh.y4&y4&=~@`b&`b&`b&!D+>n.>n.;n.;n.;n.>n.`b&{y%{y%{y%", "x5.x5.x5.x5.x5.x5.x5.xX%O7.is@Vh.Vh.is@O7.xX%is@is@is@is@is@is@is@is@O7.xX%_r+_r+_r+O7.x5.is@#k.L !A&E[$Yj${++z3&&m>&D_+D_+D_+D_+D_+D_+D_+D_+%>#'{+D_+){+PD@){+D_+Eb#%;$,'+,'+>}&$*+$*+%>#%>#O$+O$+87$87$5W.5W.5W.5W.li@li@li@li@li@li@@h+@h+@ +@ ++*++*++*++*++*++*+D)+@ +wy+wy+@ +D)+D)+D)++B$+B$+B$+B$+B$+B$+B$+B$C/%C/%C/%C/%A3%A3%A3%A3%y7%5v$b2&b2&b2&b2&l5&7_%99$98$/1&o)%kS$L~$[3%F[#~q$>$%()#hx@z<@F5 t*@Tj En#Ko=WT@fN=^Z#-G=gN=Oj&pc&hN=iN=jN=kN=lN=mN=nN=oN=pN=qN=rN=sN=Ls#tN=uN=:^&vN=wN=xN=yN=Go@1u&%M.zN=uH+ f@&E&'6&vv#Yx=bD=AN=<#*BN=CN=DN=EN=FN=GN=oL=HN=IN=JN=KN=LN=MN=:y=NN=%p@g`%j!$+-#g9%S1 ON=B*+MD@pz@>o%t4#b@[|@$4@Eu Kv Kv Eu Eu $4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@[|@[|@[|@[|@[|@[|@[|@[|@<|@<|@<|@<|@<|@<|@<|@<|@vR@vR@vR@$4@<|@<|@<|@[|@$4@$4@$4@<|@<|@[|@[|@[|@<|@<|@<|@<|@<|@<|@<|@<|@[|@[|@<|@<|@<|@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@vR@$4@<|@:|@_|@(|@^|@^|@^|@^|@^|@^|@WA a~ ')#f1#d1#07#)m#cj#O8#Z+*$b@!)#B_#(|@E'$E'$;P w~$;P lQ l] P^#;)#~{ 0~ 3|@_|@/|@_|@:|@}A }A D@$D@$+n@7`@_|@:|@[|@[|@:|@(|@@~ WA a~ a~ a~ a~ a~ WA @~ 4|@;S p)$;S m$#lQ vR@Kv .y Jv Jv *E Z;$-P -P e6%=H$$B%Rw c.#R5@k!$fO$QW$Zf%Qv%aA%RF#0E$j8$a]+e=@.+@m~+,L$qw$qw$d8$pw$iF$iF$jF$kF$d9$b8$b9$cN$^m$8F$Bj$Bj$5d$5d$)g$S5+@d$@d$&6$&6$_8$_8$d9$d9$!l$!l$)H$c8$c8$c8$c8$c8$c9$c9$_8$_8$BT$BT$BT$BT$BT$N+#eh$-}@eh$6%$oZ@B2$Z&+$*$f'$cN#@6$@6$#6$F@+TN=p%&$ +gZ.Z+$'Q#w;%<>%*K$^J$58%`8%CP$=C+;S ||@>8@<|@rG rG rG >b@X:@+~ Y:@;! /d@O9 @A@RT@RT@bP@b.#i@#P+#)G W##)G sR#)d@Ut&pR#5N=pR#Xt=UN=VN=WN=XN=YN=aC=}J=}J=Av@ZN=He+rK=i)@g6@g6@v5.v5.v5.n3.T`%T`%Q+&j(#b,+b,+b,+Q+&w{@CI#w{@w{@w{@CI#CI#CI#S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=sX%S`%S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#;Z+sX%S`%&r=*r=S`%sX%N:*w{@CI#S`%sX%&r=sX%S`%CI#CI#CI#CI#CI#CI#CI#CI#CI#*r=&r=sX%S`%S`%sX%&r=*r=&r=&r=&r=sX%sX%sX%sX%sX%CI#CI#CI#CI#CI#CI#CI#CI#uG#&r=S`%S`%&r=*r=&r=sX%sX%S`%S`%sX%*r=*r=S`%Q+&*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=l]#l]#l]#l]#l]#l]#l]#l]#=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+xr*&s*&s*&s*=^@=^@wr*wr*=^@xr*,C+uq*=^@wr*&s*,C+5,+jM#mO#mO#mO#mO#jM#jM#5,+qK+ X+ X+SO+5,+k4@3,+U*@7P.G|@Kh+y4&iS.oh.Kh+iS.iS.iS.iS.iS.iS.iS.iS.7P.oh.iS.y4&7P.Kh+oh.iS.oh.oh.oh.oh.oh.oh.oh.oh.US+US+23+23+OP*OP*x{+x{+d #d #';$23+OP*x{+[f.u!=7P.oh.y4&y4&y4&oh.Kh+G|@7P.7P.Kh+7P.7P.oh.y4&C9.B#@B#@#d+`b&<:*!D+-.%>n./p.;n.<:*B#@TO&B#@", "x5.x5.x5.x5.x5.x5.x5.xX%O7.is@Vh.Vh.is@O7.xX%x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%_r+_r+xX%O7.x5.is@v4.#k.8'%[{.[{.8'%#k.v4. `N= O=O/ ws p;#u$#Q3$8}%qt k[ ^[@^[@RB%y{.C^$:_%o@%FW.bE=QD@){+sH&m>&m>&GB@GB@GB@GB@GB@GB@GB@GB@'{+GB@D_+){+PD@PD@){+lH@%;$,'+,'+>}&$*+$*+%>#%>#O$+O$+87$87$5W.5W.5W.5W.h/+h/+h/+h/+h/+h/+@*+@*+@ +@ ++*++*++*++*++*++*+D)+@ +wy+wy+@ +D)+D)+D)+@ +@ +@ +@ +@ +@ +@ +@ +4V+4V+C/%C/%C/%C/%A3%A3%y7%5v$5v$HW$b2&6v$6v$7_%99$A3%A3%9v%0T+5V+'/#3/+'N.qZ.}a$R1%hx@'9@HT#@^+{#.dK#2C K!$=8@HN Ag&gN= b&DM=.O=+O=@O=#O=$O=%O=&O=*O=LV&=O=-O=jJ=;O=>O=,O='O=)O=!O=~O={O=(g.]O=^O=/O=(O=XP&(O=_O=~F=~F=:O=b@:|@<|@$4@vR@vR@vR@vR@$4@$4@$4@$4@$4@$4@$4@$4@[|@[|@[|@[|@[|@[|@[|@[|@:|@:|@:|@:|@:|@:|@:|@:|@<|@<|@<|@<|@<|@<|@<|@<|@Eu Eu vR@vR@vR@$4@$4@$4@$4@$4@$4@<|@<|@[|@[|@[|@<|@<|@<|@<|@<|@<|@<|@<|@[|@<|@<|@<|@$4@$4@vR@vR@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@<|@[|@_|@(|@/|@/|@^|@^|@^|@@~ WA a~ 1f dw ]M cj#gy#g%&Dd# l>@XC@YA [|@|f G'$tj%YI$lQ *0@b>#;)#77#%~ 4|@dP@vR@<|@[|@[|@v! v! cB cB D@$+n@/|@_|@[|@[|@:|@^|@1f B_#kI@1f 1f YA @~ /|@:|@||@-S MA$-S ;P w~$&E i0$VH%Jv Jv r_$r_$uK j!$ J$e6%],$Z;$!M 8E$=z$*z$[g$~U+7a&z+%[3%Wt+u8+4g@x=$@h+Ei$,L$qw$&6$d8$d8$iF$iF$iF$jF$d8$_8$c9$Ej$_a$Dj$S5+S5+y4#y4#y4#@d$@d$,p$47$47$5($5($lF$lF$WL$!l$c8$4($4($4($4($4($4($4($,L$,L$,L$,L$,L$,L$'M$N;$N+#[|$N+#B2$:8$K1#$*$w4#.3%*W#U@+}<=IQ$IQ$mn=j5&>i#V_#6Q%ms$n&%f<%0O=T2*-H$+N$NK$X{$k$#R5@$4@$4@sG rG rG r[@t! Y:@]|@(7 /d@+L@RT@bP@bP@uR@b.#Cv@7C&7C&7C&W##(d l| tq=^T#5N=5N=E,#aO=bO=WN=XN=cO='G=Av@dO=JM=Qi*0<@0<@eO=g6@g6@v5.v5.v5.n3.T`%T`%Q+&j(#j(#j(#j(#Q+&w{@CI#w{@w{@w{@CI#CI#CI#S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=&r=&r=&r=sX%sX%sX%CI#CI#CI#CI#CI#CI#CI#CI#sX%sX%sX%sX%sX%sX%sX%sX%;Z+*r=sX%*r=&r=w{@CI#*r=S`%S`%sX%sX%sX%S`%CI#w{@CI#CI#CI#CI#CI#CI#CI#CI#&r=&r=sX%S`%S`%sX%&r=&r=sX%sX%sX%sX%sX%&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%N:*&r=w{@Q+&CI#sX%&r=&r=sX%S`%S`%&r=uG#uG#&r=S`%*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r==Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+uq*uq*uq*xr*xr*&s*&s*&s*wr*&s*xr*&s*=^@wr*=^@xr*j(+IV.mO#jM#$' $' $' $' SO+SO+ X+ X+SO+qK+$' 4,+J> G|@G|@Kh+y4&iS.iS.y4&y4&y4&y4&y4&y4&y4&y4&y4&G|@7P.y4&oh.Kh+G|@7P.oh.oh.oh.oh.oh.oh.oh.oh.oh.23+23+23+23+OP*OP*OP*OP*US+US+US+23+23+OP*OP*OP*Kh+7P.oh.y4&iS.y4&y4&oh.oh.7P.Kh+G|@Kh+7P.y4&iS.|m.|m.B#@|m.`b&/{ `b&/{ -~@n.Bj.!D+Bj.", "x5.x5.x5.x5.x5.x5.x5.xX%O7.is@Vh.Vh.is@O7.xX%x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%O7.x5.x5.0q.#k.8'%ve.ve.8'%#k.0q.&m>&GB@GB@GB@'{+'{+'{+%>#%>#GB@D_+){+){+PD@PD@PD@QD@%;$,'+,'+>}&$*+$*+%>#%>#O$+O$+87$87$5W.5W.5W.5W.Ub+Ub+Ub+Ub+Ub+Ub+|f+|f+@ +@ ++*++*++*++*++*++*+D)+@ +wy+wy+@ +D)+D)+D)+@ +@ +@ +@ +@ +@ +@ +@ +A1#A1#}7$}7$}7$}7$98$98$y7%y7%5v$5v$6v$6v$7_%7_%6v$5v$5v$Z}&CA$0T+Gz$Wt+1Y.|-+-@#}a$#{#d_#l8$Tk$YG@u/@zy@yz#I~ ;8@gS$50&Ya&Ya&gO=hO=iO=jO=kO=lO=mO=nO=oO=V{&pO=qO=rO=Mg@Lj@}s@sO=tO=EN=uO=vO=wO=xO=yO=zO=AO=BO=CO=DO=EO=FO=ME=:O=GO=HO=IO=JO=KO=LO=wL=MO=NO=OO=EA&uH=Mu=;u&Ia#(|@Y;$v3*Va&O-%@6#wK=(t*Ok$g|+yR#A)+}_+r8+CD+my+tr+tr+1R+up+%N+~i@y)$vy#{P+dr+$R#71$fB++J+ZE#6X@PO=QO=']%: @@4+!f+K:%9O=Yg%eF$F0+zC$I`#>>$Uy#Uy#Uy#+I#[T#,l#,l#Rn#Tn#cc#cc#2&@pD+v=@p=$-9@@k+sr+xD+yD+*B+2h#6=@6~@&(@bp+RX.dp=b@:|@[|@<|@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@[|@[|@[|@[|@[|@[|@[|@[|@_|@_|@_|@_|@_|@_|@_|@_|@<|@<|@<|@<|@<|@<|@<|@<|@Eu Eu Eu Eu vR@vR@vR@vR@$4@$4@$4@<|@<|@[|@[|@[|@<|@<|@<|@<|@<|@<|@<|@<|@<|@<|@<|@$4@$4@vR@vR@vR@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@<|@[|@:|@_|@(|@(|@/|@^|@^|@@~ WA YA a~ xy d1#Pv#T8#-3#Dd#zg#8.#')#:|@Kv UH%UH%PL%YI$>P 2C ;)#77#k] x! ||@(0@Eu vR@<|@<|@ST@ST@{A cB D@$+n@(|@_|@_|@(|@^|@YA ')#QT@kI@1f a~ WA (|@[|@vR@E'$k!$Nz$k!$kQ 5'$Nt%VH%VH%Jv vt +y +y H%$uK v~$#I$-z$u[$bL#.J$+3%Qv%c3%ZJ$7%%A@$;i#>4+v}%A'#4W..*+(R#,L$&6$47$d8$d8$jF$jF$iF$iF$jF$d8$_8$qw$@d$@d$w4#w4#J3$J3$,L$,p$,p$c9$47$d8$5($5($lF$lF$WL$!l$qn%bv$90$90$90$90$90$T4$'M$(R#'M$(R#(R#(R#(R#(R#a=#N+#N+#H_@K1#'p$k~+dN#fZ.$ +$ +P4$G3$RO=fq#]I$Gz$o>#K8%pC$e<%f=&SO=cE%':%es$8E${c$(0@vR@$4@$4@sG rG >b@r[@+~ ;! /d@ 9 9 .9 bP@uR@uR@[`@UE@j$#Gq&j| 7C&7C&.l&zz$5N=S2*(X%^T#UN=et@TO=G4*XN=UO=VO=bN=AI=WO=hP.XO={z&eg+g6@g6@v5.v5.v5.n3.T`%T`%Q+&Q+&Q+&Q+&Q+&Q+&w{@w{@w{@w{@w{@CI#CI#CI#S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=*r=*r=&r=&r=&r=&r=S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%uG#sX%&r=uG#&r=w{@CI#*r=sX%sX%sX%sX%S`%CI#w{@w{@S`%S`%S`%S`%S`%S`%S`%S`%&r=sX%sX%sX%sX%sX%sX%&r=CI#S`%S`%sX%&r=&r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%*r=S`%w{@Q+&CI#sX%sX%S`%&r=sX%S`%&r=uG#N:*uG#*r=*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=&r=&r=&r=&r=&r=&r=dr=dr=dr=dr=dr=dr=dr=dr==Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+,C+,C+,C+uq*uq*xr*xr*xr*&s*&s*xr*xr*&s*&s*&s*xr*p2@IV.jM#$' qK+qK+$' $' jM#jM#jM#$' qK+ X+_($A<$17*Kh+Kh+7P.oh.y4&y4&oh.y4&y4&y4&y4&y4&y4&y4&y4&G|@7P.oh.7P.G|@T_+Kh+oh.oh.oh.oh.oh.oh.oh.oh.oh.23+23+23+23+OP*OP*OP*OP*23+23+23+23+US+US+US+US+T_+G|@Kh+7P.oh.y4&y4&iS.iS.oh.Kh+G|@G|@7P.y4&iS.$(+$(+*$@T_+|m.T_+|m.T_++EW.ZF@PD@`O@m>&m>&D_+D_+GB@'{+'{+%>#%>#%>#D_+D_+D_+D_+D_+){+PD@QD@%;$,'+,'+>}&$*+$*+%>#%>#O$+O$+87$87$5W.5W.5W.5W.Ub+Ub+Ub+Ub+Ub+Ub+|f+|f+@ +@ ++*++*++*++*++*++*+D)+@ +wy+wy+@ +D)+D)+D)+W_#W_#W_#W_#W_#W_#W_#W_#A1#A1#A1#A1#}7$}7$}7$}7$98$A3%y7%5v$5v$y7%7_%J8%96&96&d2&HW$Os%tp%FC$^B+cv$D[#kP%sK@Nj#8:@&-#p1#m8 ]M$Sh u/@_7 ]|@G5@LZ$F$-j&*j&`O= P=.P=+P=@P=#P=pN=$P=%P=&P=*P=Mg@=P=-P=;P=>P=,P='P=)P=!P=~P={P=]P=^P=/P=(P=_P=|I=:P=&oF%n!$k$#[E@;)#P^#2C [E@>P dP@(0@vR@<|@$4@$4@ST@ST@{A cB +n@+n@:|@(|@@~ YA 1f 1f 1f a~ a~ a~ WA /|@:|@vR@&E G'$bQ%s)$l!$n!$|f u1$-z -z Iv Iv bs 0q @y 'J mI@I!$g!@3j+o=$'Q+&R$ZJ$T_%6Q%89$z1#;4+Mq@Mq@VH#8]+y4#J3$J3$&6$47$d8$jF$/H$/H$bN$iF$iF$d8$47$&6$,L$,L$Bb#Bb#Bb#$*$&6$_8$c9$d9$d8$jF$kF$kF$)I$)I$~J$WL$4($09$09$09$=k$=k$=k$,Z#~}%Ei$~}%Ei$Ei$Ei$Ei$B)+x4#N;$N;$*,$'p$8]+ *+3V+[6$ l#m~$0M@Ps%=N+a,%)M$Ky${F$h9$wr%k4#i9$[=%/<%es$;g$=S ,M R5@$4@<|@}A rG rG r[@X:@W:@]|@ 9 O9 O9 @A@bP@uR@uR@[`@i@#C&#Gq&j| j| Wp&TE bw (X%(p=(X%S2*6i=g3*9P=G4*0P=aP=SJ=bN=6>#zv@He+0<@D0@eO=g6@g6@v5.v5.v5.n3.T`%T`%w{@w{@w{@w{@w{@w{@Q+&Q+&w{@w{@w{@CI#CI#CI#S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=&r=*r=*r=*r=*r=S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%CI#w{@sX%uG#&r=w{@S`%vu#&r=&r=sX%S`%CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%&r=&r=sX%sX%sX%CI#S`%S`%sX%&r=&r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%S`%CI#CI#sX%*r=&r=S`%Q+&*r=sX%S`%sX%uG#N:*N:**r=*r=*r=*r=*r=*r=*r=*r=*r=S`%S`%S`%S`%S`%S`%S`%S`%dr=dr=dr=dr=dr=dr=dr=dr==Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+Fu+Fu+,C+,C+uq*uq*uq*xr*uq*uq*xr*xr*uq*uq*uq*xr*k4@jM#$' qK+qK+$' jM#mO#k4@k4@k4@mO#jM#qK+ X+KL$xE*y4&y4&oh.7P.Kh+Kh+7P.y4&y4&y4&y4&y4&y4&y4&y4&G|@7P.oh.7P.G|@T_+Kh+oh.oh.oh.oh.oh.oh.oh.oh.oh.OP*OP*OP*OP*23+23+23+23+23+23+23+US+US+';$';$';$xc+$(+$(+T_+Kh+7P.oh.y4&iS.y4&7P.Kh+Kh+7P.oh.y4&T_+bH@T_+bH@T_+}f.$(+}f.7P.9g.oh.>( oh.>( ", "x5.x5.x5.x5.x5.x5.x5.xX%O7.is@Vh.Vh.is@O7.xX%O7.O7.O7.O7.O7.O7.O7.O7.N7._r+xX%O7.x5.x5.O7.O7.v4.#k.8'%[{.[{.8'%#k.v4.8'%=cP=*7./h.Q~&'M=dP=C^$z5&eP=1!$U-+QD@`O@P{*m>&){+){+D_+GB@GB@'{+%>#%>#GB@GB@'{+'{+GB@D_+){+QD@%;$,'+,'+>}&$*+$*+%>#%>#O$+O$+87$87$5W.5W.5W.5W.h/+h/+h/+h/+h/+h/+@*+@*+@ +@ ++*++*++*++*++*++*+D)+@ +wy+wy+@ +D)+D)+D)+W_#W_#W_#W_#W_#W_#W_#W_#Z]$Z]$Z]$Z]$89$89$89$89$98$98$y7%5v$5v$y7%J8%J8%,z*,z*fP=b2&`}&Os%)Q#)=%=i#8M@`R#{>+oZ.={#iT$97$07$i#@uK@kB@Cn [} /,@;8 1r@.n@]Y@]Y@5=&*a&Ay@gP=hP=iP=iP=jP=kP=lP=mP=@x=dQ@nP=[4&oP=pP=HN=qP=rP=sP=tP=uP=vP=wP=xP=yP=wL=zP=AP=BP=CP=}P=DP=EP=FP=GP=HP={v=IP=AP=JP=KP=eJ=LP=MP= l&/d@1i NP=OP=V4+c~#]r=d#+Q%=@x@.l#; $TQ@x)$_^#)~#{k@|=@xD+B@@S.@vr+:V+%jo%0~+X1#W+$%2+!6+I0+~k%i8%i8%Gy#^H$'6+f8+;X#'E#sq#}f#(@$Dy#Dy#By#=l#=l#cf#oi+|&@X+$`K+Lt+mr+yD+*B+2G+H)@W=+K4#e&@N{@PP=c=*aF@u@+/5@xz@r<+R-$Zi@hB UH [f :e ll 2r@tG $4@<|@<|@<|@<|@$4@vR@$4@$4@$4@$4@$4@$4@$4@$4@[|@[|@[|@[|@[|@[|@[|@[|@:|@:|@:|@:|@:|@:|@:|@:|@<|@<|@<|@<|@<|@<|@<|@<|@$4@$4@$4@vR@vR@vR@Eu Eu $4@$4@$4@<|@<|@[|@[|@[|@<|@<|@<|@<|@<|@<|@<|@<|@$4@$4@$4@vR@vR@Eu Eu Eu $4@$4@$4@$4@$4@$4@$4@$4@$4@$4@<|@<|@[|@[|@:|@:|@[|@:|@(|@@~ YA a~ 1f xy bj#>6#t&*N,&O8#/M ^|@Kv u1$pM%~J%(0@~M YT@Un$77#(V#[e >P lQ R5@dP@[|@_|@<|@$4@ST@ST@cB +n@7`@.n@_|@^|@YA kI@kI@a~ @~ /|@@~ ^|@/|@_|@<|@Eu u1$oF%#h%s)$~@$YI$|f u1$Jv Cu Au Y{$Y{$_e Qv =M iQ ;1+>$%_V#F[#uD$5w+)=%C/%L$+`]$.3%6P#Z.+n%$|T+_P+Wx$$*$$*$47$47$jF$kF$/H$/H$%/$%/$jF$d8$d8$47$qw$qw$e;%e;%pw$37$d8$5($5($kF$jF$jF$kF$kF$)I$)I$~J$WL$im$%K$%K$Rj$Rj$Sj$Sj$Tj$~}%~}%~}%Ei$Ei$>>+6c#Ei$'M$x4#'M$8]+7P#U`$7)#N:+v}%c!$z@%7W.M=&8;&y+%#J$4r$/l$qy%QP=LB@K2$q[#Aj$i4#R-$'M es tG [|@cN@yK r[@r[@X:@+~ Y:@]|@ 9 O9 +L@RT@uR@[`@[`@b.#Cv@Y=#7C&7C&j| .] RP=SP=^T#(X%^T#]T#Mj=Mi=WN=G4*0P=TP=aC=Av@WO=UP=D0@VP=i)@i)@g6@g6@v5.v5.v5.n3.T`%T`%w{@CI#CI#CI#CI#w{@Q+&j(#w{@w{@w{@CI#CI#CI#S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%j(#Q+&sX%N:*&r=Q+&S`%vu#&r=sX%S`%CI#CI#CI#S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%S`%sX%&r=&r=&r=&r=sX%S`%sX%sX%sX%sX%sX%&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%CI#CI#S`%*r=N:*uG#S`%j(#uG#sX%CI#S`%&r=uG#*r=&r=*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+,C+,C+,C+uq*uq*uq*xr*xr*Fu+uq*xr*uq*,C+Fu+,C+xr*$' $' qK+qK+$' 5,+jM#mO#$' 5,+jM#mO#k4@k4@k4@o2@U*@iS.iS.y4&Kh+G|@G|@Kh+oh.oh.oh.oh.oh.oh.oh.oh.G|@7P.y4&oh.Kh+G|@7P.oh.oh.oh.oh.oh.oh.oh.oh.oh.OP*OP*OP*OP*23+23+23+23+US+US+US+US+';$';$';$';$xc+xc+xc+$(+T_+G|@7P.oh.oh.oh.oh.oh.7P.7P.7P.Kh+aH@aH@aH@aH@bH@bH@bH@bH@aH@Bz$9g.>( >( >( ", "x5.x5.x5.x5.x5.x5.x5.xX%O7.is@Vh.Vh.is@O7.xX%O7.O7.O7.O7.O7.O7.O7.O7.N7._r+xX%x5.x5.x5.O7.xX%#k.+U-+ZF@<-@<8$<8$r1&PD@PD@){+D_+GB@'{+%>#'{+'{+%>#,{+%>#'{+D_+lH@%;$,'+,'+>}&$*+$*+%>#%>#O$+O$+87$87$5W.5W.5W.5W.li@li@li@li@li@li@@h+@h+@ +@ ++*++*++*++*++*++*+D)+@ +wy+wy+@ +D)+D)+D)+W_#W_#W_#W_#W_#W_#W_#W_#']$']$Z]$Z]$Z]$Z]$89$89${l$98$A3%A3%y7%y7%99$m3&7v$7v$7v$4v$5v$Z}&9v%QB$)=%'/#Uj$U)@,4+Vs@!f#u[#&-#()#d_#Nu _d@.s w' (1 /t ^t 7G@ST@>8@=8@c~ ZP=`P= Q=.Q=+Q=@Q=#Q=$Q=%Q=pL=&Q=pL=*Q==Q=-Q=;Q=>Q=,Q='Q=)Q=!Q=~Q={Q=]Q=^Q=/Q=w[&(Q=_Q=EP=:Q=Q#[$&=>$lb#Tz*,'$fz@K)@P,+#A*=:#fD+ay+ay+OK+tI++|1@kw$4t#f9$>|+)E#Gy#;p$j0#|i#QL#y0+d8+.G#sq#sq#rq#(@$cc#2&@pD+2$@oi+oi+^i#/i#X+$3V#Lt+1=@%B+2h#dX+BI+5%$r|$cZ.SX.}9*7Q=Po#9I#6%%QP=2H%}h$'M cP@rG rG uG uG Zi@Zi@}g Eu $4@<|@<|@$4@vR@Eu $4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@[|@[|@[|@[|@[|@[|@[|@[|@<|@<|@<|@<|@<|@<|@<|@<|@[|@<|@<|@<|@$4@vR@vR@vR@$4@$4@$4@<|@<|@[|@[|@[|@<|@<|@<|@<|@<|@<|@<|@<|@$4@$4@vR@vR@Eu Eu Eu Eu $4@$4@$4@$4@$4@$4@$4@$4@$4@$4@<|@<|@<|@[|@[|@[|@vR@<|@_|@@~ YA 1f kI@dw t#Wm@4>&Ia#]M LZ$[|@u1$Eu GJ%|f 1|@(V#l] l] %~ mQ ~M lQ ;P R5@%2@:|@_|@<|@<|@v! v! D@$7`@.n@%p@YA a~ a~ 1f YA @~ (|@_|@:|@:|@:|@[|@$4@Kv u1$G'$bQ%4[*CD%Lv%oF%Nt%Jv Cu ;z$^d {a o$#=M )E `i@Tq@.{%T_#.+@87$n~+6c#T4$bv$46+@#${K@X.@cB@cB@x;@2 @u_%$*$37$47$kF$kF$/H$-L$GO$/H$kF$5($5($_8$qw$qw$pw$pw$jF$d8$jF$jF$kF$/H$%/$%/$/H$/H$)I$)I$~J$WL$hm$~l$;u$;u$;u$a8$a8$Ms$@6$08$08$K#$K#$3w+ ++3w+~}%B)+Ei$U`$W,@5Z.>4+'r%V@&pZ%4Y+Xk#7a&^J$8Q=WR$+{#Zm@d9%d9%M4$k9$=M =P :e Zi@cP@tG sG 7G@cN@cN@t! t! +~ W:@Y:@]|@/d@ 9 .9 RT@[`@b.#b.#UE@j$#Y=#P+#)G j| 9Q=~t 8 (X%qR#^T#0Q=}k=9N=G4*G4*0P=aQ=aC=,G=bQ== @Q/@Q/@*e@=g@g6@g6@v5.v5.v5.n3.T`%T`%w{@CI#S`%S`%S`%w{@Q+&j(#w{@w{@w{@CI#CI#CI#S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%CI#S`%S`%S`%sX%&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%CI#CI#CI#CI#CI#CI#CI#CI#Q+&w{@*r=vu#sX%b,+Q+&uG#sX%S`%CI#w{@CI#S`%sX%&r=sX%sX%sX%sX%sX%sX%sX%sX%S`%sX%&r=*r=*r=&r=sX%S`%&r=&r=&r=sX%sX%sX%sX%sX%CI#CI#CI#CI#CI#CI#CI#CI#*r=sX%S`%sX%*r=uG#&r=S`%uG#&r=CI#w{@S`%sX%sX%S`%*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=l]#l]#l]#l]#l]#l]#l]#l]#=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+,C+,C+uq*uq*xr*xr*&s*&s*,C+xr*=^@&s*,C+Fu+uq*=^@SO+qK+$' 5,+5,+5,+5,+5,+$' 5,+5,+jM#mO#IV.j(+y{+J> oh.iS.y4&Kh+G|@7P.y4&oh.oh.oh.oh.oh.oh.oh.oh.7P.oh.iS.y4&7P.Kh+oh.iS.oh.oh.oh.oh.oh.oh.oh.oh.x{+x{+OP*OP*23+23+US+US+';$';$';$';$';$US+US+US+/{ |m.*$@*$@|m./{ h~ +k>&_=$<-@<8$<8$|F.r1&PD@){+D_+GB@'{+'{+'{+%>#,{+O$+O$+%>#GB@Eb#%;$,'+,'+>}&$*+$*+%>#%>#O$+O$+87$87$5W.5W.5W.5W.d_+d_+d_+d_+d_+d_+Ar+Ar+@ +@ ++*++*++*++*++*++*+D)+@ +wy+wy+@ +D)+D)+D)+W_#W_#W_#W_#W_#W_#W_#W_#']$']$Z]$Z]$Z]$Z]$89$89${l$98$98$A3%y7%99$99$m3&c/$K$+c/$qr%J8%y7%A3%C/%@/$f2%6/%fh$o%${f#Lt$3F$h|#t6%P=&&/&cj t'+}t Gn 4n 5, e{@UH rG r[@W:@KH#%l&fQ=gQ=hQ=sc&iQ=jQ=O#*lP=kQ=lQ=mQ=nQ=oQ=pQ=qQ=rQ=sQ=tQ=uQ=vQ=;Q=wQ=3P=q~&xQ=yQ=zQ=AQ=BQ=$D@<6&CQ=}Q=DQ=EQ=FQ=ae&xo&GQ=HQ=IQ=D-&gy#YA 9~ 4h {x%_m@Vv JQ=Lv*H4%E@+d/$v_%g %KQ=)~%a=@#a@AD+0[$Ey*Il+fD+Kl+K,@7X+/P+Ht+:T+ic@}1@-Z#7|$f9$H2$L`#Os=W4#Sg+qB#j0#QL#)|+d8+e8+[T#,l#Tn#oB#2&@ZA+v=@]/+hc#(i#/i#Zn+VA$Lt+1=@xI+_s#>}@o7#oZ@J1#Sb+W[$23@$E#O8@A.+--#q{%5(*m;%DN 6#cj#G5@v! Kv Nt%[|@&E (0@{M k] 2C [E@[e ~M lQ ;P w~$R5@%2@:|@_|@[|@[|@}A }A +n@.n@%p@^M B_#')#a~ WA ^|@(|@_|@:|@<|@<|@<|@$4@vR@Kv &E |f mx$CD%DD%2C%UH%GJ%i0$r_${a +, o$#J5@y2$N6@bk 1v@TF#1)#BM#dk@6 @w4#47$iX+|{#+:$8$@4 @0&@0&@0&@H@@}{#$*$37$d8$kF$/H$-L$-L$-L$-L$)I$lF$5($_8$_8$_8$kF$jF$jF$jF$jF$jF$%/$%/$%/$%/$/H$/H$)I$)I$~J$~J$aq$aq$:/%:/%Ks$Ks$Js$Js$bK%@6$@6$eU%eU%] +LO& ++6c#y1#y1#5Z.j|#t8+V@&)`+F)+0]@>v$K/&&g%R@&;D&NO$Yw q$#o$#F%$x6 9> @, (e hB uG sG tG 5G@6F }A cN@W:@W:@W:@W:@Y:@]|@/d@ 9 .9 bP@[`@b.#b.#UE@j$#Z=#v{ P+#j| es&LQ=_u 5N=85*^T#k`&Mi=MQ=G4*G4*NQ=aQ=SJ=OQ=PQ=QQ=Z2.i)@He+10*g6@g6@v5.v5.v5.n3.T`%T`%CI#CI#S`%sX%S`%CI#Q+&b,+w{@w{@w{@CI#CI#CI#S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%w{@CI#CI#S`%S`%sX%sX%&r=sX%sX%sX%sX%sX%sX%sX%sX%CI#CI#CI#CI#CI#CI#CI#CI#w{@S`%N:*vu#sX%bQ#b,+&r=S`%CI#w{@w{@CI#S`%&r=uG#sX%sX%sX%sX%sX%sX%sX%sX%CI#sX%&r=*r=*r=&r=sX%CI#*r=*r=&r=&r=sX%S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#CI#;Z+*r=S`%CI#sX%*r=uG#uG#N:*&r=w{@w{@CI#S`%CI#w{@*r=*r=*r=*r=*r=*r=*r=*r=N:*N:*N:*N:*N:*N:*N:*N:*&b=&b=&b=&b=&b=&b=&b=&b==Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+uq*uq*uq*xr*xr*&s*&s*&s*uq*=^@+v=wr*xr*uq*&s*wr*SO+qK+5,+jM#jM#5,+qK+SO+k4@k4@jM#5,+5,+jM#mO#o2@x{ Kh+y4&y4&Kh+Kh+y4&w5&oh.oh.oh.oh.oh.oh.oh.oh.7P.y4&]@+iS.oh.7P.oh.iS.oh.oh.oh.oh.oh.oh.oh.oh.x{+x{+OP*OP*23+23+US+US+d #d #d #';$';$US+US+US+h~ Bj./{ |m./{ Bj.( O1.w]#w]#P1.)&+)&+)&+ks@yM+)&+P1.w]#w]#", "x5.x5.is@is@Vh.Vh.dD.xX%O7.x5.Vh.Vh.x5.O7.xX%N7.xX%O7.is@is@O7.xX%N7._r+N7.M7.M7.N7._r+O7.is@+$k*qt=V)*+}*rz@PD@PD@){+D_+GB@'{+%>#%>#D_+D_+D_+D_+D_+D_+D_+Eb#$*+r'@l-$P:$Eb#Eb#PD@|F.GB@'{+B'#N$+5W.O:+']$']$#*+#*+d_+d_+li@li@@h+@*+3)#3)#k %k %k %k %k %k %+B$+B$+B$+B$+B$+B$+B$+B$4W.D)+W_#@ +@ +W_#D)+4W.t8+N$+5W.5W.O:+O:+Z]$Z]$}7$}7$}7$}7$98$98$98$99$7v$=c$]m$]m$(a$)]$)]$/a$C/%tp%0T+FC$5V+'/#=i#8M@Y!%3K##W#GW$=A$SU%P[%_Y@ s _g 4, 2k UH hB [f }|@YQ=ZQ=`Q= R=.R=+R=@R=#R=$R=%R=lP=&R=*R==R=-R=;R=>R=,R='R=)R=vQ=!R==Q=~R={R=]R=^R=/R=(R=_R=$D@yo&:R=hy&$7&@r!%zU$W{@yI+g2$bK@+HL#GW$8R=gU&d!$r<+#I$)M `:@:|@:|@rG 7G@7G@hB hB Kv u1$u1$Kv $4@[|@<|@$4@Eu Kv Kv Eu <|@<|@vR@Kv vR@vR@vR@vR@vR@vR@vR@vR@:|@[|@$4@vR@vR@$4@[|@:|@<|@<|@<|@<|@<|@<|@<|@<|@_|@_|@:|@:|@[|@<|@<|@<|@[|@<|@<|@$4@vR@vR@Eu Eu :|@[|@$4@vR@vR@$4@[|@:|@$4@vR@Kv Kv Kv Eu $4@<|@$4@$4@$4@$4@$4@vR@vR@vR@$4@vR@vR@vR@Eu Eu Kv Kv [|@:|@/|@@~ a~ 1f kI@dw f1#mx @p@%p@}A PC Nt%*L%pM%Eu %W@]C@~{ Un$>P w~$w~$;P lQ n$#1|@1|@(|@(|@/|@(|@X~#yK .n@%p@^M ]Q#a~ a~ YA /|@<|@vR@vR@$4@Kv Kv Kv &E &E u1$u1$|f DD%#/&PO$i!$5'$5'$Y;$uK 6r l,$Yw z<@L&#)<$}-@u@+l #(-+ty#@@#T,+S@+CM@w;@^K@4 @0&@a&@a&@{k@{k@4 @@#$bN#b>%d8$kF$)I$.@%P^%FO$FO$%/$kF$d9$b8$b8$b8$kF$/H$/H$/H$/H$/H$/H$/H$gm$gm$hm$hm$hm$hm$hm$gm$.@%f^%9R=0R=w_%_H$'e%'e%Z&&]u&3{*aR=._*s(=bR=MR%C/%']$5W.87$EU.Uj$z[#4w$g2%*h&;H$RW$3G$ F%kT$1F$ll !a 0s Gv Gv k@#W^#W^#^0@SC 7G@6F 7G@:C@*8@u! Y:@Y:@Y:@Y:@]|@(7 9 O9 bP@uR@[`@UE@i@#Cv@Cv@Cv@j| j| Wp&rt&SP=_u (X%qR#0Q=+6*g3*9N=0P=cR=cR=aQ=%D=dR=r[*o,@4;@=g@Yj@N|@g6@g6@o3.o3.o3.o3.k5+k5+CI#CI#Q+&Q+&Q+&CI#sX%&r=S`%S`%sX%sX%sX%&r=&r=&r=w{@w{@CI#S`%S`%sX%sX%&r=sX%sX%sX%sX%sX%sX%sX%sX%S`%S`%S`%S`%S`%S`%S`%S`%S`%w{@Q+&w{@S`%sX%CI#Q+&&r=&r=sX%S`%S`%sX%&r=&r=*r=j(#b,+sX%uG#S`%CI#&r=uG#uG#*r=*r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%S`%sX%&r=*r=uG#uG#*r=*r=S`%S`%S`%sX%&r=&r=*r=*r=&r=&r=&r=&r=&r=&r=&r=&r=uG#uG#*r=*r=&r=sX%sX%sX%N:*N:*N:*N:*N:*N:*N:*N:*l]#l]#l]#l]#&b=&b=&b=&b==Z+&b=iM#l]#dr=o!#dr=l]#uq*uq*uq*uq*uq*uq*uq*uq*=^@&s*&s*xr*xr*uq*uq*,C+$' $' 5,+5,+5,+jM#jM#jM#$' jM#mO#IV.IV.mO#jM#wE*17*7P.Kh+Kh+7P.oh.y4&iS.w5&iS.7P.7P.oh.oh.G|@$(+7P.7P.oh.oh.y4&iS.iS.]@+7P.7P.Kh+G|@G|@T_+$(+$(+US+US+23+23+OP*OP*x{+x{+u]#u]#d #';$';$US+23+23+n.`b&!D+-~@}m.;n.>n.!D+!D+!D+!D+!D+!D+!D+Bj.l}+GV.GV.GV.GV.GV.O1.O1.eR='U.5D+yM+[N*yK#", "xX%O7.O7.x5.x5.is@is@xX%O7.x5.is@is@x5.O7.xX%xX%xX%O7.O7.O7.O7.xX%xX%O7.xX%_r+N7._r+xX%O7.x5.A#Ig%X3.*X..=+,q%Ds*Sr=c3$eQ=an*/**qt=V)*SL&rz@PD@PD@){+D_+GB@'{+'{+%>#GB@GB@GB@GB@GB@GB@GB@%;$>{+,'+P:$P:$%;$%;$){+r1&GB@GB@A:&B'#t8+5W.O:+O:+d_+d_+d_+li@li@h/+@*+@*+3)#3)#k %k %k %k %k %k %+B$+B$+B$+B$+B$+B$+B$+B$4W.D)+W_#@ +@ +W_#D)+tc@t8+87$5W.5W.O:+']$Z]$Z]$}7$}7$}7$}7$98$98$98$sD$]m$]m$]m$]m$(a$(a$)]$)]$A3%C/%6X%0T+0T+FC$7R+5V+.B%[-#2K#)A#8|$E*$yR$9~%0_@t) 1u wo 1k }C [f cP@ ~&zp&z!*hR=.b&iR=jR=kR=lR=mR=6v&nR=oR=pR=qR=rR=sR=tR='R=~Q=uR=vR=wR=xR=Qx=s~&yR=zR=AR=(R=AQ=BR=CR=DR=ER=FR=zQ=Iy@GR=HR=IR=IR=JR=KR= t#WA Eu |N%>M Ss%g!@o^#=V.+6~@O[$4:*;B+K@@Jl+FD+ur+`+#u&@oB#oq#Ly#3t#;6$;6$Y1#Y1#.K#i0#Tg+q7#{|+if#W4#;f+n.;n.-~@>n.!D+!D+!D+!D+!D+!D+!D+!D+Bj.9g.w]#w]#O1.GV.[N*[N*[N*X-.P1.'U.P1.[N*GV.", "xX%xX%xX%O7.O7.O7.O7.O7.O7.x5.is@is@x5.O7.O7.O7.O7.xX%xX%xX%xX%O7.O7.is@x5.O7.xX%xX%xX%O7.O7.{+,'+r'@r'@$*+$*+GB@){+D_+D_+M/+M/+^F$2_+t8+t8+li@li@li@li@h/+h/+|f+|f+3)#3)#k %k %k %k %k %k %+B$+B$+B$+B$+B$+B$+B$+B$D)+W_#W_#@ +@ +W_#W_#Ar+5W.87$2|+2|+O:+']$']$']$A1#A1#}7$}7$}7$}7$98$sD$*c$5d$]m$*c$*c$*c$)]$)]$98$}7$}7$A1#6X%6X%CA$QB$f$@)/#td+l+#73@h~$@E#M8%&y t'+4m >J il jl 1A DN mh$oQ yr$=j&`R=iK= S=.S=+S=@S=#S=$S=%S=&S=*S==S=-S=;S=vQ=>S=,S='S=)S=xR=+F+@Y)%oX+j9@h[+TK+7~@[g%_s#*>+my+tr+|R+}T+8X+YA+h0#df#>f+Ly#My#$w#:@$e8$#w#Qg+U4#+w#+w#:i#:i#Ey#oq#cc#By#5=@pq#-:#:c@;w+#B+!-+B@@&B+< @b@r[@t! t! Y:@Y:@Y:@;! ]|@/d@O9 +L@@A@RT@[`@UE@j$#C&#Y=#Y=#7C&j| O} rt&~t LQ=(X%pR#+6*0p=MQ=0N=G4*G4*NQ=RR=%D=08*os%bS=V[@]q%]q%*e@I7.I7.v5.v5.v5.v5.e{+e{+Q+&Q+&j(#j(#Q+&w{@CI#S`%CI#S`%S`%S`%sX%sX%&r=&r=S`%S`%S`%CI#CI#CI#CI#w{@CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%sX%CI#w{@w{@S`%sX%S`%w{@CI#S`%&r=*r=*r=&r=S`%CI#uG#CI#w{@&r=N:**r=&r=*r=*r=*r=&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%S`%sX%&r=*r=*r=*r=*r=&r=S`%S`%sX%sX%sX%&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=N:*N:*uG#uG#uG#*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=&b=&b=&b=&b=l]#l]#l]#l]#=Z+&b=iM#l]#dr=o!#dr=l]#xr*xr*xr*xr*xr*xr*xr*xr*&s*&s*&s*xr*xr*uq*uq*uq*$' $' 5,+5,+5,+jM#jM#jM#mO#mO#jM#jM#jM#jM#mO#o2@zi.G|@G|@T_+G|@Kh+7P.oh.y4&oh.Kh+7P.oh.y4&7P.Kh+y4&y4&y4&y4&y4&oh.oh.oh.y4&y4&y4&y4&iS.iS.iS.iS.[f.x{+x{+OP*23+US+US+';$OP*OP*OP*23+23+23+23+17*]*=/p.-.%-.%M]*M]*<:*TO&-.%-.%-.%-.%-.%-.%-.%>n.G|@aH@Bz$>( l}+JI$n|.f^+s`.JI$>( JI$l}+Bz$", "O7.O7.O7.O7.O7.O7.O7.O7.x5.x5.x5.x5.x5.x5.O7.is@O7.xX%N7.N7.xX%O7.is@Vh.Vh.is@x5.O7.O7.xX%xX%}&r'@,'+>{+>{+'{+D_+){+){+Wx#Wx#''+^F$^F$^F$li@li@li@h/+h/+Ub+|f+|f++B$+B$|0#|0#|0#|0#|0#|0#@ +@ ++B$+B$+B$+B$3)#3)#W_#W_#@ +@ +@ +@ +W_#@h+2|+2|+2|+2|+']$']$']$']$A1#A1#}7$}7$}7$}7$98$&c$Wk$4d$Wk$Wk$Wk$M[#sD$sD${l${l$89$}7$lS$/1&/1&4V++B$2)#f$@!=#63@73@J2$@E#},%N6@`W =W@Vj 7V m>@Eh ZT@XT@]8@Ss$iF%dz&YA&={*hS=iS=jS=kS=lS=mS=nS=qR=oS=pS=qS=qS=rS=wO=EO=sS=sS=~:&OO=tS=uS=vS=wS=xS='1&]:&yS=be&zS=}S=AS=BS=CS=DS=2+Y.@Q,@Q,@S##M2@M2@W{@W{@T,@WK+d8$jF$jF$FO$FO$CU$CU$#@%#@%.@%)I$/H$jF$d8$d8$kF$/H$/H$kF$kF$kF$kF$5($5($_8$_8$qw$qw$qw$qw$_8$iX+8e#tr$~l$c8$bv$`H%AB%HS=a2&QR=Fh&5a%si&IS=|h&F2&6&#rP$O#$r[#SB$Ih+.J$Pf%OQ$( %MA$-S xR@xR@TT@Fu Mw 6G@6G@5G@5G@5G@6F $p@$p@r[@r[@r[@X:@t! t! W:@Y:@Y:@;! (7 9 +L@.9 @A@RT@[`@i@#C&#Z=#VE@VE@j| Gq&.] es&(u SP=^T#(X%s|*s|*Mi=9N=XN=NQ=NQ=UO=SJ=u[*JS=KS=i)@]q%*e@i)@I7.I7.v5.v5.v5.v5.e{+e{+j(#j(#j(#Q+&Q+&w{@w{@CI#CI#CI#S`%S`%S`%sX%sX%sX%&r=&r=&r=sX%S`%CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%sX%CI#w{@CI#sX%sX%S`%w{@w{@S`%*r=uG#uG#*r=S`%w{@*r=sX%S`%&r=uG#uG#*r=*r=&r=&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%CI#S`%sX%&r=*r=*r=&r=&r=sX%sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=uG#uG#uG#uG#uG#uG#uG#uG#sX%sX%sX%sX%sX%sX%sX%sX%&b=&b=&b=&b=l]#l]#l]#l]#=Z+&b=iM#l]#dr=o!#dr=l]#xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*$' $' 5,+5,+5,+jM#jM#jM#IV.mO#jM#$' $' jM#mO#jS.zi.T_+T_+T_+T_+G|@Kh+7P.oh.7P.G|@Kh+y4&iS.oh.7P.]@+iS.iS.y4&oh.oh.7P.7P.oh.oh.y4&y4&iS.]@+]@+]@+OP*OP*OP*OP*23+23+23+23+[f.[f.[f.x{+OP*OP*23+17*c2=RD*-.%-.%M]*M]*#d+`E&-.%-.%-.%-.%-.%-.%-.%>n.Kh+Bz$7P.9g.oh.l}+y4&l}+iS.>( iS.n|.oh.}f.", "is@is@is@x5.x5.x5.x5.x5.x5.x5.O7.O7.x5.x5.x5.is@O7.xX%N7.N7.xX%O7.is@is@is@is@is@x5.O7.xX%xX%{+,'+r'@,'+>{+sz@'{+GB@){+){+Wx#Wx#es#''+''+''+d_+li@li@li@h/+h/+|f+|f++B$+B$|0#|0#|0#|0#|0#|0#W_#@ +@ ++B$+B$3)#3)#wy+@ +@ +@ +@ +@ +@ +@ +@*+Y{@>9@Y{@Y{@Y{@Y{@']$']$A1#A1#A1#A1#}7$}7$}7$&c$M[#7I#7I#7I#M[#D#$D#$D#$km$km${l$98$98$A3%m6&A3%Fs%Fs%3)#=1@qq@63@iE$!b#`M$},%n9+P2+>f#0_$C;$0_$Tg .X 1C <@_|@}A q%&7i&5V$QS=RS=SS=TS=US=w{*VS=WS=XS=V{&YS=ZS=`S= T=KL=ME=GO=.T=+T=@T=#T=tS=$T=%T=]=&]=&&T=*T=tF&=T=-T=1S=;T=>T=IQ=,=&,T=_Q#X~#YI$'T=B/*g5&xJ+&l+sO.0~$U-+p1@JZ@i~$BO@3G+RK+-.$0G+ny+ED+sr+^/+:k+ri+;p$,f+,f+V4#V4#YN#YN#_1@ir+bc#bc#2f#2f#cc#cc#cc#cc#}t#pD+p;@o;@up+sr+Rt+m;@.@#(8$CI+e'#J1##>#7_#[V#i[%)`+FU.,v$P_*)T=!T=s,$~T={T=nc*]T=HR$^T=.F%OO%UB&QO$d.#+z z `y e.#e.#}A $4@Eu vR@$4@<|@vR@Kv vR@Kv u1$u1$Eu $4@$4@vR@vR@vR@vR@vR@vR@vR@vR@vR@Eu Eu vR@vR@vR@vR@Eu Eu <|@<|@<|@<|@<|@<|@<|@<|@$4@$4@$4@$4@$4@$4@$4@<|@vR@$4@$4@<|@[|@[|@:|@:|@Eu Eu vR@vR@vR@vR@Eu Eu _|@:|@:|@[|@<|@vR@Eu Eu Kv Kv Eu vR@$4@<|@[|@:|@[|@[|@[|@<|@<|@$4@$4@$4@$4@<|@[|@_|@_|@_|@_|@yK }A Vx X!&Ww .y cN@1f ))# p@!)#%W@||@n$#m$#m$#n$#mQ YT@[e [e {M 3|@:|@<|@:|@(|@1r@G5@Iz ^M 7`@D@$:|@:|@:|@$4@&E Nt%u1$Kv vR@vR@Eu Eu Kv Kv &E &E eB eB gB %B%5'$!M -#xJ+Gi$EB%aE$o>#mF$@ +1_+;9@o=#5i@D,+2G+T_@=B+~-+~-+r;@s;@s;@|V+kX+wp#wp#fX+|T+b>%iF$jF$GO$-L$I.%g^%g^%#@%.@%)I$/H$jF$d8$d8$kF$kF$kF$kF$kF$5($5($_8$_8$qw$qw$,L$,L$,L$,L$,L$N;$ni$Dj$S5+,Z#Ei$rr%A3%o)%Sd&jZ.7W._y%/T=7_&;N+ /@M+@/)#a>&GC$_R@bL#N3%-z$|F${@$yd%yd%XR%XR%TT@vR@-! vR@$4@$4@<|@sG sG >b@r[@+<@Z:@.<@.<@:)@:)@W:@W:@Y:@;! /d@O9 .9 RT@RT@bP@b.#Cv@Y=#VE@P~#P~#Gq&O} 9Q=wu&(u SP=(p=h_*(T=s|*Mj=7i=]r@'x=]r@_T=:T=DM+{+'{+GB@D_+D_+Wx#Wx#''+''+''+''+#*+#*+d_+d_+li@li@@h+@*+@ +@ ++*++*++*++*++*++*+W_#W_#@ ++B$+B$3)#wy+wy++B$+B$@ +W_#W_#@ ++B$|f+g~@l[+g~@g~@Y{@Y{@']$O:+A1#A1#A1#A1#}7$}7$}7$|0#4[%f&@~I$f&@4[%4[%4[%4[%&c$&c$98$98$A3%A3%nM%5v$7l*96&pr%3)#qX+,/#uD$4&#*{#X:$&$^%%5V$5T=xk&UC=6T=7T=8T=9T=0T=aT=bT=cT=dT=eT=lA=fT=*L=gT=hT=iT=jT=kT=lT=d%&mT=6K=np&&T=HR=nT=oT=pT=qT=3R=rT=.u=sT=LN#j[#xR@ox$nm&ih*wg&TB$MM.2k%9p=rq=MD@ (@oZ@wp#zD+[P+mq@0G+ny+sr+^/+M4#)i#!i#~k%jd+~i#=2+6e@(+@Nl+gi+3&@g0#Qg+2f#cc#cc#Dy#By#u&@`+#eK@.B+up+vD+{+'{+D_+GB@GB@M/+M/+''+''+''+''++x@+x@+x@#*+#*+d_+Ar+Ar+@ +@ ++*++*++*++*++*++*+D)+W_#@ +@ +3)#3)#wy+4w+3)#+B$@ +W_#W_#@ ++B$9Z+~}@L6@L6@l[+Y{@Y{@Y{@2|+V_#V_#A1#A1#A1#A1#}7$|0#U=$H3+f&@U=$U=$U=$4[%4[%/a$/a$/a$Fs%Z}&Z}&`}&HW$bv%,z*b2&Z}&CA$Gz${f#{>+=@#Y #4O.OB@ /#aL#8O#/G Nz =W@ro Tj ,J SC 6F {A U!&7i&8C#3y&KT=;0<=MT=NT=OT=PT=QT=RT=dx&ST=TT=UT=VT=kx=WT=XT=uO=YT=/Q=ZT=z-&Hy@`T=&T=*T=AS= U=.U=;T=+U=>s&@U=wt=L,&ZC@,S 'f$}H%OL%>:*^x%M4$[L.g4@l4*fk*e>@;>+:P+0~@,B+mq@0G+ny+sr+St++U4$w4#k~+ *+y1#CA$Zk#$U=%U=jd%-K$&U=*U==U=m_*is#F_#v+%m3%=U=-U=;U=>U=df%G8=b|$[A #}$;:$;:$,U=Lv u1$Nt%&E Eu $4@vR@Kv vR@Kv u1$&E <|@(|@@~ @~ vR@vR@vR@vR@vR@vR@vR@vR@vR@$4@<|@[|@[|@<|@$4@vR@<|@<|@<|@<|@<|@<|@<|@<|@<|@<|@[|@[|@:|@:|@_|@_|@:|@:|@[|@[|@[|@[|@<|@<|@vR@$4@<|@[|@[|@<|@$4@vR@Eu vR@$4@<|@<|@$4@Eu Kv vR@vR@vR@$4@$4@$4@$4@$4@$4@$4@$4@vR@vR@vR@Eu Eu $4@$4@<|@<|@<|@<|@$4@^Y@^Y@ z {A +n@W~#Lz QT@))#a~ /|@dP@R5@m$#YT@[e *0@YT@mQ >P ~M 1|@1|@(|@/|@@~ ^|@X~#cN@cB z Pw Pw Nt%u1$&E u1$Nt%Nt%Kv vR@vR@vR@vR@vR@Eu Eu Kv Qw G=$E=$dB +z vR@I5@=C+${@Wo$w[#<>%4V+J8%17$qn%pw$~g$2G+1G+3Z+u;@2T+K@5$@gX+7V@gX@N+#N;$N;$37$pw$iF$%/$GO$_^$'_$'_$@@%@@%_^$GO$)I$lF$d9$d9$5($5($5($5($5($_8$_8$qw$Ej$_a$S5+Di$Di$Di$Di$~I$4y+5u%8[*. +vD@{5@Ow#;/#C[#>I@&$#L@%GS$iq+&f$Gy$Zw #L@#L@@L@mI@mI@'M EN ;P R5@$W@Oz$hP%hP%hP%XN%,.%>f$Ad$Ad$;S m$#W7@~M fP@l$#eP@n.<:*`b&#d+`b&<:*`b&-.%]*=RD*`b&", "x5.x5.O7.xX%xX%_r+_r+Vh.x5.O7.xX%xX%O7.x5.Vh.N7.xX%O7.is@is@O7.xX%N7.%0+M7._r+O7.O7.O7.xX%_r++(U=Xv=_U=:U=(x#Ge=+y$wO+(D*go=:w*zO B|@>/@[u=P%=37*+g#@6&#b_#@.@zg@2c#.B#n9+@p |/ 4q so 6, hB 6F cB ]A c$$_L=w@*oc&`O=[U=}U=|U=1U=1U=2U=3U=4U=5U=6U=7U=ST=8U=9U=EO=3P=2P=0U=aU=6^&bU=cU=dU=GR=eU=fU=pT=2S=gU=hU=iU=0`%Gx=jU=+M=#B%X4*}:&X;*Dz%55%!<$xg@}3*z*+,m+S@+;K@CD+x;@x;@ny+sr+St+M4#0|=LK$kd+~k%~f+!i#Kb+M0+Mb+Nb+(+@Pg+Pg+W1#oB#oB#}t#oD+t&@eK@#k+@B+6o@0~@W{@7=@U4$H1#7P#S)@5)#Y{@!Q##B$8Q=[[%D:&A8&yT=LM$kU=lU=#$@mU=/.$j}=nU=oU=pU=<,$jU%s)$w~$E'$PC Du Hv =^$i0$oF%oF%G'$(0@vR@vR@Eu $4@Eu Lv QC cN@=p@Lz xy vR@vR@R5@vR@R5@vR@vR@vR@vR@$4@[|@:|@:|@[|@$4@vR@<|@<|@<|@<|@<|@<|@<|@<|@:|@:|@_|@_|@(|@/|@/|@/|@_|@_|@:|@:|@[|@<|@<|@$4@vR@$4@[|@:|@:|@[|@$4@vR@&E Kv c.#$4@/0@$4@q<$Kv /0@$4@/0@$4@/0@vR@c.#vR@$4@vR@vR@vR@Eu Eu Kv Kv <|@<|@[|@[|@[|@<|@$4@^Y@^Y@cB 7`@^M Lz ew e1#d1#(|@(|@_|@:|@}|@3|@EN#H5@%W@3|@m$#||@||@}|@/|@@~ ^|@/|@cN@v! ^Y@Vx PC PC pM%^,$G'$i0$Nt%=E QC 6F 5G@6G@6G@-! -E -E }f Kv #W@@W@R5@;P HB$W{$Bo+M7%~Q#-a$A1#!U#>b$cN$/s#| @3h$wp#:P+m#$)<%kX+:P+kX+4G+2R+2R+BO@oZ@B2$H_@H_@Wx$hX+iX+XK+1 @FO$CU$UR$CU$CU$CU$>L$_H$:H$$%Qe@g!@jx@n'%E<%-z${c$=P Cm 0> 0> Rx@.~ P >P fP@+<@eP@ <@~~#<,@:)@e{@W:@W:@Y:@]|@ 9 .9 RT@uR@UE@i@#j$#Y=#Z=#VE@VE@Z=#zz$hH 'U=9C=LQ=_u +6*0p=s_$rU=sU=tU=9P=9P=cR=PB=cN=@].}@.N|@Q/@*e@I1.k1+M|@M|@n3.n3.n3.n3.T`%T`%w{@S`%sX%*r=*r=*r=&r=sX%w{@w{@w{@CI#CI#CI#S`%S`%j(#j(#j(#Q+&w{@CI#CI#CI#sX%sX%sX%sX%sX%sX%sX%sX%S`%S`%S`%S`%S`%S`%S`%S`%*r=sX%CI#S`%&r=*r=&r=S`%&r=&r=sX%S`%S`%sX%&r=&r=Q+&sX%S`%j(#w{@N:*uG#Q+&w{@CI#CI#S`%S`%sX%sX%&r=sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%w{@CI#S`%sX%sX%sX%sX%S`%*r=*r=&r=&r=sX%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%w{@CI#CI#S`%S`%sX%sX%&r=*r=*r=*r=*r=*r=*r=*r=*r=yE#yE#iM#&b=l]#=Z+dr=dr==Z+&b=iM#l]#dr=o!#dr=l]#tq*tq*tq*tq*tq*tq*tq*tq*,C+uq*uq*xr*xr*&s*&s*=^@$' $' 5,+5,+5,+jM#jM#jM#$' jM#mO#IV.IV.mO#jM#wE*17*7P.Kh+Kh+7P.oh.y4&iS.w5&iS.7P.7P.oh.oh.G|@$(+7P.7P.oh.oh.y4&iS.iS.]@+y4&y4&oh.oh.7P.Kh+Kh+Kh+23+23+23+23+OP*OP*OP*OP*US+US+US+23+OP*OP*x{+U*@;n.-.%#d+<:*/p.RD*M]*-.%/p..==.==.==.==.==.==.=={h&{h&{h&{h&{h&{h&0, 0, Bv&&, &, B9.B9.0, ", "x5.is@Vh.dD.dD.%j.%j.x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.O7.O7.O7.O7.O7.O7.xX%xX%O7.x5.x5.O7.xX%xX%%0+M7._r+xX%O7.O7.xX%xX%_r+_r+xX%xX%O7.x5.x5.x5._r+_r+_r+_r+_r+_r+_r+_r+xX%_r+_r+N7.N7.M7.M7.%0+#k.#k.#k.#k.#k.#k.#k.#k.v4.v4.v4.v4.v4.v4.v4.v4._r+_r+_r+N7.N7.M7.M7.M7.O7.xX%xX%xX%_r+_r+N7.N7._r+N7.N7.M7.%0+%0+$B#$B#is@O7._r+_r+xX%xX%N7.%0+@9.$B#N7.xX%xX%N7.$B#@9.$B#$B#%0+%0+M7.N7.N7.N7.<3+<3+<3+<3+<3+<3+<3+<3+<3+v4.<3+q3.bp.bp.,H.<3+^.yU=WJ*zU=AU=mb@C*+I-*9]&o>&q=#[-+q1@q1@R3#q1@q1@q1@sH&sH&r1&QD@PD@){+D_+D_+GB@GB@,{+%>#GB@){+PD@){+Wx#D_+3+$37@q9@a~#a~#Nq@4Z@43@Nw#Nw#s[$NX.NX.NX.4)#NX.@*+@*+@ ++B$+B$3)#k %k %k %k %/a$/a$/a$/a$/a$k %V_#g~@V_#V_#V_#V_#A1#A1#Z]$89$89$89${l${l${l${l$/a$Vk$Vk$Vk$0r$0r$&W#&W#Fs%Fs%Fs%/a$/a$/a$/a$)]$(a$(a$(a$)]$k %tp%qX+Y_@7 @TI#:-#(-#Mu#67@ci%GW$4%%aU$DJ.@p d!+t*@so 1k hB 6F v! #W@+(;%m4&1,$-L$Y]% W$ED+sp+{k+`b$TU=UU=kd+;p$#*$L0+Og+s=@cy+lc#Ey#Tn#[*$[t#[t#-]@l;@$-+uI+>;%#r%ZK+>T@TK+;($*/%@A*43@37@9i$b~#} +j>@eq#Mp#*1*G!*k=$VU=WU=XU=dF YU=ZU=l*+`U= V=AW#cF .V=o]&BP$dO$:N%BG%-z$ -#KR%KR%4h -P EN cP@tG }g 5G@5G@qI@qI@`y rI@J3&}r@Kv E'$w~$(0@;P R5@R5@dP@||@||@<|@$4@vR@Eu Eu Kv [|@[|@[|@[|@[|@[|@[|@[|@[|@:|@_|@(|@^|@WA YA YA $4@$4@vR@Eu Kv Eu Eu vR@[|@_|@(|@_|@$4@Eu Eu vR@c.#c.#V.$c.#V.$c.#V.$c.#S&&b|$aE%c.#HN =8@HN /0@Eu Eu Kv Kv Eu vR@$4@<|@&E Eu vR@vR@Eu $4@:|@W~#cN@7`@]Q#mx ^0#^0#nx @p@X~#X~#W~#W~#1r@W~#W~#W~#<|@<|@||@:|@_|@(|@(|@/|@:|@_|@_|@_|@[|@^Y@Kv u1$-P #I$-P !J *E =^$'Y$Hv nP%Gu Au bs r_$uK v~$jQ Jt$Z~#*v$ls+9#%^J%iq%ms$+*+K[#1h$G4#Fj$P_@+V=8^@} @4Z+fX+fX+gX+gX+2R+2R+}V+}V+}V+[ @l#$oi$oi$oi$o7#o7#gX+gX+5$@5Z+5Z+/H$-L$$K$$K$0W&0W&!V&KT&i#j|#;i#-i#L6@S2@T_#bX#/-#h|#Q&#KB@o9+q[#i4#*S )M %2@%2@)8@%2@sG sG sG sG sG sG <|@<|@$4@$4@$4@/0@/0@/0@c.#vR@(0@8 ;! <@+~ +~ W:@X:@u! }u ;8 k[#|c#WE@J,#WE@yn#6!#JN#6!#6!#&3#P~#yI=+] #V=$V=JG=JG=l`&Ri@HN#%V=q *&V=QB=*V=*V==V=H8@d1+=Z+@9.yE#yE#+9.&r=w{@w{@CI#S`%S`%CI#w{@w{@j(#j(#Q+&S`%&r=&r=S`%Q+&S`%S`%S`%S`%S`%S`%S`%S`%S`%&r=uG#&r=w{@j(#w{@S`%S`%S`%S`%S`%S`%S`%S`%S`%*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#N:*N:*vu#vu#vu#*r=&r=S`%CI#CI#S`%&r=*r=S`%S`%S`%sX%&r=&r=*r=*r=*r=&r=sX%CI#CI#sX%&r=*r=CI#sX%&r=*r=*r=&r=sX%CI#*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#*r=&r=&r=sX%sX%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%&r=&r=*r=uG#uG#uG#&r=&r=&r=&r=&r=&r=&r=&r=S`%S`%S`%S`%S`%S`%S`%S`%l]#l]#l]#l]#l]#l]#l]#l]#dr=dr=dr==Z+l]#l]#&b=&b=tq*tq*tq*Fu+,C+,C+uq*uq*&s*&s*&s*&s*&s*&s*&s*&s*5,+5,+5,+$' $' qK+qK+qK+SO+qK+qK+ X+_($_($ X+wE*17*23+OP*OP*x{+[f.[f.u!=OP*OP*OP*OP*x{+x{+[f.[f.7P.Kh+T_+$(+$(+T_+Kh+7P.7P.oh.oh.y4&oh.7P.7P.Kh+u!=[f.OP*23+23+OP*[f.u!=d #OP*OP*d #d #OP*OP*|m.'I@-V=-V=-V=M]*M]* == == ==PB@PB@PB@wr*wr*m}+mO#xu#4,+4,+4,+4,+4,+4,+4,+k#@o2@d;+o2@wE*r-@", "x5.x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%_r+_r+xX%O7.O7.xX%_r+_r+N7.N7._r+xX%xX%xX%_r+_r+N7._r+_r+_r+xX%O7.O7.O7._r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+N7.N7.M7.M7.M7.#k.#k.#k.#k.#k.#k.#k.#k.v4.v4.v4.v4.v4.v4.v4.v4._r+_r+_r+N7.N7.M7.M7.M7.xX%xX%_r+_r+N7.N7.N7.M7.%0+%0+%0+M7.M7.M7.M7.M7.O7._r+M7.N7._r+xX%N7.%0+$B#%0+N7._r+_r+N7.%0+$B#$B#%0+%0+%0+M7.N7.N7.N7.<3+<3+<3+<3+<3+<3+<3+<3+v4.v4.v4.0q.:(+:(+q3.v4.v4.<3+0q.q3.q3.0q.<3+v4.,H.,H.q3.q3.0q.0q.<3+<3+N7._r+xX%N7.$B#@9.@9.%0+$B#$B#$B#$B#$B#$B#$B#$B#0q.q3.:(+bp.bp.:(+q3.0q.,H.,H.,H.,H.,H.,H.,H.,H.:(+,H.q3.0q.0q.q3.,H.:(+<3+,H.bp.:(+q3.0q.,H.bp.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.0q.0q.<3+<3+<3+q3.q3.q3.q3.q3.q3.q3.q3.v4.<3+q3.,H.,H.q3.<3+v4.0q.0q.q3.q3.q3.0q.<3+<3+q3.q3.q3.q3.q3.q3.q3.$B#Ak=4B&Zl@pD&N7.M7.q3.,H.@9.$y#l5+n2.L3.<|*fr=W6.;V=>V=,V=Ew&]_$'V=H8&JL&Dg@)V=q^&AA%!V=[V WJ*y@+~V=e1&{V=re$L;*LA$q=#q=#OD@OD@OD@OD@`|#`|#q=#q=#D_+D_+D_+){+){+){+){+){+%>#'{+D_+){+){+){+GB@%;$o>&v^=fx@3Z@a~#a~#Nq@4Z@/M#/M#Nw#Nw#NX.NX.NX.2)#@*+@*+@ ++B$+B$3)#k %k %/a$/a$/a$/a$)]$)]$)]$/a$A1#V_#V_#V_#A1#A1#A1#A1#89$89${l${l${l${l$L$+L$+/a$/a$/a$Fs%Fs%Fs%0r$0r$/a$Fs%Fs%Fs%Fs%Fs%Fs%Fs%pr%pr%pr%Fs%k %3)#9Z+=1@V##9!$j$+r9@mi$)=#V/*f$+1E$m:=:|$Dt $8@OW@/n 1u .r y, t! cN@]Y@#~ Ss$5=&Ss$bj&'P J7&DU=]V=^V=8!&PU=J&&OU=YB=/V=(V=Y9*_V=[K&:V=n#vK@dq#.>$5V=6V=7V=8V=9V=3e+6%+qc+qc+8C=0V=o*+aV=bV=O_+o!&_>$9P#QY$KA&( %|F$yd$u)$D&#[g Z;$i0$-! 6G@qI@3`@3`@k%&k%&`y Kv E'$w~$(0@;P R5@R5@R5@%2@%2@<|@<|@$4@$4@$4@$4@[|@[|@[|@[|@[|@[|@[|@[|@<|@[|@:|@_|@(|@/|@^|@@~ $4@vR@Eu Kv Kv Kv Eu Eu $4@[|@_|@:|@$4@Eu Eu vR@V.$V.$V.$V.$V.$V.$V.$V.$S&&WN%aE%S&&W.$HN W.$q<$d.#Kv Eu Eu Eu vR@$4@$4@$4@[|@[|@<|@<|@[|@/|@G5@=p@vy ]0#^0#^0#nx @p@]Q#.n@%p@^M ]Q#]Q#^M .n@7`@:|@:|@:|@:|@_|@_|@_|@_|@:|@:|@:|@[|@$4@Eu u1$],$@I$ J$j!$!J as Hv Gu nP%I%$k($Iu ;b 'J ;M R-$G)$nJ#+N$+J$&g%c'%cV=8w$ p$Tj$ni$Xk$P_@+V=dV=dV=+V=M+#!k#vp#vp#7V@7V@BO@BO@[ @[ @[ @[ @eX+eX+>}@%1@7^@7^@[ @[ @gX+gX+iX+iX+)I$_H$eV='e%fV=aS&gV=aW&]K@cX+m#$'I$lZ@yA#,b$(R#1r$A0%ZR#:'$sP$Uj$aT+8R+sx$,q$*;%q!$${#MX$~}+p[#'M ;E $4@$4@@W@@W@{G$@W@>8@<|@<|@<|@<|@<|@<|@<|@$4@$4@$4@$4@$4@$4@$4@$4@-! tG rG r[@t! t! +~ +~ >b@t! Y:@Y:@W:@t! +~ W:@u! }u 8v (d@'m#.i#J,#5!#WE@yn#6!#JN#6!#6!#&3#ir#jx XH 3`%#V=R1*2($|q=,G Lp=hV=iV=jV=kV=(f@u)*lV=&r={e.&r=,H.S`%S`%bQ#sX%Q+&Q+&Q+&w{@w{@Q+&Q+&Q+&CI#Q+&Q+&CI#sX%sX%CI#Q+&S`%S`%S`%S`%S`%S`%S`%S`%S`%&r=*r=&r=CI#w{@S`%&r=S`%S`%S`%S`%S`%S`%S`%S`%&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=*r=*r=*r=uG#uG#uG#sX%sX%CI#w{@w{@CI#sX%sX%S`%S`%S`%sX%&r=&r=&r=*r=*r=&r=sX%S`%S`%sX%&r=*r=S`%sX%&r=*r=*r=&r=sX%S`%&r=&r=&r=&r=&r=&r=&r=&r=*r=*r=*r=&r=sX%sX%sX%S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%&r=&r=&r=&r=*r=&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=l]#l]#l]#l]#l]#l]#l]#l]#dr=dr=dr==Z+l]#l]#l]#&b=Fu+Fu+Fu+,C+uq*uq*uq*xr*&s*&s*&s*&s*&s*&s*&s*&s*5,+5,+5,+$' $' qK+qK+qK+qK+$' $' SO+ X+ X+$' 7' 17*23+OP*OP*OP*OP*x{+x{+23+OP*OP*OP*x{+x{+[f.[f.7P.7P.G|@T_+T_+G|@7P.7P.7P.7P.oh.y4&y4&y4&oh.oh.x{+OP*OP*23+23+OP*OP*x{+';$x{+x{+';$';$x{+x{+/{ 'I@mV=-V=-V=M]*M]* == ==PB@PB@wr*wr*m}+m}+2;@[o=xu#zw*zw*zw*zw*zw*zw*zw*lC&zw*aH*>H*GJ@GJ@", "x5.O7.xX%_r+N7.N7.M7.O7.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+N7.N7._r+xX%xX%_r+N7.N7._r+_r+xX%xX%xX%_r+N7.N7.N7.N7.N7._r+_r+_r+xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+N7.N7.M7.M7.M7.#k.#k.#k.#k.#k.#k.#k.#k.v4.v4.v4.v4.v4.v4.v4.v4._r+_r+_r+N7.N7.M7.M7.M7._r+N7.N7.N7.M7.M7.%0+%0+@9.$B#$B#%0+M7.N7._r+_r+N7.%0+$B#%0+_r+xX%N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+M7.M7.M7.N7.N7.<3+<3+<3+<3+<3+<3+<3+<3+v4.#k.#k.<3+q3.q3.<3+#k.0q.0q.q3.,H.,H.q3.0q.0q.q3.q3.q3.q3.0q.0q.0q.0q.N7._r+xX%N7.$B#@9.$B#%0+$B#$B#$B#$B#$B#$B#$B#$B#0q.q3.:(+bp.bp.:(+q3.0q.q3.q3.q3.q3.q3.q3.q3.q3.,H.q3.0q.0q.0q.0q.q3.,H.q3.:(+bp.:(+q3.0q.q3.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.0q.0q.0q.,H.,H.,H.,H.,H.,H.,H.,H.0q.q3.q3.,H.,H.q3.q3.0q.bp.:(+,H.q3.0q.0q.0q.0q.q3.q3.q3.q3.q3.q3.q3.$B#$y#4B&$y#$y#$B#$B#q3.q3.%0+l5+$y#J3.bM.<|*T5.=J.nV=oV=pV=qV=rV=j.@D!@$q&sV=ri@}:*6{+&P@vh#4b@tV=~V=e1&{V=re$L;*9]&sH&q=#OD@OD@OD@OD@`|#`|#q=#q=#'{+GB@GB@D_+){+PD@r1&r1&GB@D_+D_+){+D_+D_+'{+$*+o>&z^&wX@as$)m+1k+#o+#o+&h#&h#d_+li@@h+@*+@*+|f+@*+@*+@ ++B$+B$3)#k %k %/a$/a$/a$/a$)]$)]$)]$/a$4V+Yx%Yx%Yx%4V+4V+4V+4V+89$89${l${l${l${l$L$+L$+&c$&c$&c$&c$/a$/a$Fs%Fs%/a$/a$Fs%0r$0r$&W#m9&m9&&W#0r$0r$N@%k %3)#|f+Ub+CU.P@@k$+1|&1|&i$+Vb+ x@tz#5K#{3%BV#:)#$8@|##A%@89 P9 G0 +~ :|@$4@^A c.#/0@-8@1i&Xa&/Q#(Q#&]*2X%uV=vV=wV=pw@kb&*c*xV=yV=zV=AV=yk&cz&BV=BV=$7&lq&CV=DV=DV=20&EV=FV=GV=.p@s{ #] H)$GJ%aK%&L%5A&T<*k_*K1*i9*%I$rF%` @HV=}++IV=T5+i9@29#JV=KV=LV=MV=NV=A`%@<$HZ@6~+5~@N@+up+Q0+VH@p;@_T+}R+qr$z^*=9@qt$8$@)_#f%OK$QV=RV=vR#SV=,1%%6#TV=Le=FO%FO%UV=wa#VV=@>$P-$MA$t)$ox$~@$n!$n!$G'$R5@vR@ST@{A z i*$Mv Pw Kv Kv E'$Eu (0@vR@vR@vR@<|@<|@<|@<|@[|@[|@[|@:|@$4@$4@$4@$4@$4@$4@$4@$4@<|@<|@<|@[|@:|@:|@_|@_|@$4@vR@Eu Kv Kv Kv Kv Kv Kv $4@[|@<|@vR@Eu Eu vR@V.$V.$V.$V.$V.$V.$V.$V.$V.$WN%aE%WN%V.$~ $V.$d.#d.#Kv Eu vR@$4@vR@vR@vR@[|@[|@[|@$4@vR@<|@(|@G5@ew 07#gy#Pv#87#Iz %p@.n@%p@^M Iz @p@Iz ^M 7`@D@$(|@_|@_|@_|@:|@:|@:|@:|@[|@[|@<|@$4@Eu &E GJ%GD%^,$ZI$H%$r_$=^$Mw /*$/*$I%$|/$jp F%$vo@HC$>g$g!@Gi$}=%Qz$!f#7r$H{%9v%Q'$>b$2h$^N#T[#%(@WV=WV=%(@yA#[{#{^#{^#7V@7V@2R+2R+fX+fX+wp#wp#7=@7=@T,@7=@8~@8~@8~@8~@7=@5$@5Z+5Z+lF${J$'e%($&XV=XV=XV=dA%WK+o7#M+#S[#Jc&-c$!U#y1#k %Yx%Gz$aT+pl%{q$Jy$G!$2E$wr%Ej=0'&_z%ev$ki$^*@.~ ds vR@^Y@c.#c.#V.$c.#>8@<|@<|@<|@<|@<|@<|@<|@$4@$4@$4@$4@$4@$4@<|@<|@tG sG >b@r[@t! t! t! t! rG X:@+~ W:@t! t! +~ W:@;! ]|@ 9 .9 bP@b.#i@#Cv@UE@j$#Y=#Z=#Y=#Z=#ir#O~#jx XH $I=#V=2($Dz Lp=hV=(B=DP#%T&YV=ZV=`V=bC=D6*6w=kS.CI#,H.CI#sX%j(#CI#j(#j(#j(#j(#j(#j(#j(#j(#&r=CI#Q+&Q+&CI#S`%CI#Q+&S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%*r=&r=sX%sX%&r=uG#S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=*r=*r=*r=S`%S`%CI#w{@w{@CI#S`%S`%S`%S`%sX%sX%sX%&r=&r=&r=&r=&r=sX%S`%S`%sX%&r=&r=S`%sX%&r=&r=&r=&r=sX%S`%sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=sX%sX%sX%S`%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%S`%S`%S`%&r=&r=&r=&r=&r=&r=&r=&r=*r=*r=*r=*r=*r=*r=*r=*r=l]#l]#l]#l]#l]#l]#l]#l]#dr=dr==Z+=Z+=Z+l]#l]#l]#,C+,C+uq*uq*uq*xr*xr*xr*uq*uq*uq*uq*uq*uq*uq*uq*5,+5,+5,+$' $' qK+qK+qK+qK+5,+jM#5,+$' 5,+mO#|;@xE*OP*23+23+23+23+US+US+23+23+23+OP*OP*x{+x{+x{+oh.oh.7P.Kh+Kh+7P.oh.oh.Kh+7P.y4&iS.]@+]@+]@+iS.US+23+23+OP*OP*23+23+US+US+[f.[f.US+US+[f.[f.Bj.'I@-V=-V=-V=M]*M]* == ==PB@PB@wr*wr*m}+m}+m}+[o=-x#>H*>H*>H*>H*>H*>H*>H*p)@GJ@>H*>H*zw*zw*", "O7.xX%xX%_r+_r+_r+N7.O7.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%N7.N7.N7.N7.N7.N7.N7.N7.M7.N7.N7._r+_r+N7.N7.M7.xX%xX%O7.O7.xX%_r+M7.%0+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4._r+_r+_r+N7.N7.M7.M7.M7.N7.N7.M7.M7.%0+%0+%0+$B#$B#%0+%0+%0+M7.N7.N7.N7.%0+$B#@9.$B#N7._r+_r+M7.N7.M7.%0+%0+%0+%0+M7.N7.%0+%0+M7.M7.M7.M7.M7.M7.<3+<3+<3+<3+<3+<3+<3+<3+<3+#k.+)>+[-+[-+GB@D_+D_+D_+){+PD@PD@PD@){+){+){+D_+D_+GB@'{+>{+<-@LA$z^&6+*-z@)m+&h#&h##o+#o+d_+d_+@h+@*+|f+|f+@*+@*+@ ++B$+B$3)#k %k %/a$/a$/a$/a$)]$)]$)]$/a$4V+Yx%Yx%Yx%4V+4V+4V+4V+}7$}7$98$98$98$98$99$99$km$km$km$&c$&c$/a$/a$/a$/a$/a$Fs%0r$&W#bw$bw$Mt%kn$kn$~m$4w+wy+9Z+|f+h/+h/+V##P@@P@@vi+uc@.x@,t@po@W,+67@r1$/5@`M$9e+CJ.o<+#9 :7 S:@ <@:|@^Y@&E $W@!8@&W=1i&b9&)&*5V$*W==W=-W=;W=>W=,W=rv='W=Oh*)W=14*!W=!b*KT=~W=,u&_v&R8#7^&{W=]W=HO%f9*^W=#(-+e$@2)#<)#2K#I^$k4&5W=i/*+p Ps$Ws@UB$36$gy%wg& N$:N%60&6W=6W=7W=8W=YR$fU$fU$;K${3=;t#Jw%9W=0W=0W=aW=bW=cW=}1&Nz$a!&a!&ox$l!$kQ w~$R5@$4@<|@v! ST@^Y@QC Lv Lv Kv Kv Eu Eu vR@vR@$4@$4@<|@[|@:|@_|@(|@(|@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@<|@<|@<|@<|@<|@<|@<|@$4@vR@Kv Kv &E Kv Kv u1$Eu $4@$4@vR@Kv Eu $4@c.#V.$V.$V.$V.$V.$V.$V.$V.$S&&WN%aE%WN%WN%WN%d.#Kv Eu vR@$4@$4@vR@Eu Kv $4@vR@Eu u1$Nt%&E <|@/|@]M g%&-3#g%&]0#^M 7`@.n@%p@]Q#@p@vy Iz %p@+n@ST@/|@(|@(|@_|@[|@[|@<|@$4@<|@$4@vR@Eu &E Nt%*L%4Q%GD%hy%vt as Hv 5;#0s Gv 5r i8 F%$vo@~}++/@OA$V{$iT$rx$F[#_g$Gz$6X%km$Ei$-c$a9$Qj$]N#T[#%(@%(@%(@yA#[{#{^#{^#7V@7V@2R+2R+4Z+4Z+8=@wp#T,@:P+YK+:P+r<@r<@r<@r<@T,@7=@5$@iX+lF$d9$)H$Hm$ux*ux*6v%#/$J3$x4#'M$7F$K[#D#$3)#QB$K{$o>#%J$=`$g2%aA%Qv%9u%bS%,&*LJ%QP=y!%hk@o[#;M xt xt QC QC c.#c.#V.$c.#<|@<|@<|@<|@<|@<|@<|@<|@$4@$4@$4@<|@<|@<|@<|@[|@rG >b@r[@X:@t! t! t! X:@rG r[@t! +~ X:@X:@+~ Y:@ 9 O9 .9 RT@[`@UE@Cv@j$#i@#j$#Y=#Z=#Z=#VE@N~#Ut&Q &+] 3`%$V=4L=3($%V=H*>H*>H*>H*>H*>H*>H* (&GJ@>H*>H*zw*GJ@", "xX%xX%O7.O7.x5.x5.is@xX%xX%xX%xX%O7.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%N7.N7.N7.N7.N7.N7.N7.N7.M7.N7.N7._r+_r+N7.N7.M7.xX%xX%O7.O7.xX%_r+M7.%0+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4._r+_r+_r+N7.N7.M7.M7.M7.N7.N7.M7.M7.%0+%0+%0+$B#N7.N7.N7.M7.%0+%0+%0+$B#%0+$B#@9.$B#N7._r+_r+M7.N7.M7.%0+%0+%0+%0+M7.N7.M7.M7.M7.M7.M7.M7.%0+%0+<3+<3+<3+<3+<3+<3+<3+<3+0q.v4.&Y^%DA%kW=HO*+;&e1&{V=cK&I-*B*+7T@7T@OD@OD@OD@OD@`|#`|#q=#q=#PD@PD@PD@){+D_+D_+D_+GB@PD@){+D_+GB@GB@'{+'{+$*+o>&LA$z^&wX@fD@-z@#o+&h#:X@ja@#*+d_+@h+@*+|f+|f+@*+@*+@*+|f++B$3)#3)#3)#k %k %/a$/a$/a$/a$)]$/a$4V+Yx%Yx%Yx%4V+4V+4V+4V+}7$}7$98$98$98$98$99$99$km$km$km$&c$&c$/a$/a$/a$/a$/a$Fs%0r$&W#bw$bw$Bx$Ry$Qy$]8$]v$R2@9Z+|f+|f+R2@=1@Ub+V##V##V##MX.&a@mi@ET#kH@Oj#s1@J2$eX#,,$hs%;K.Vj Sg U-@;! *8@sG k$#lQ yR@~8@GN Y#%^%%Ek&%]*lW=mW=83&nW=mw@u0*oW=pW=qW=rW=sW=tW=uW=vW=vW=gj#xd#ej#T(&Cz##S#h5%#%J$&R$~-#Hy$~_%+3%vd$XR$.q%($%Os$-8$Ts%wr$l,$Qv 7F cs =^$QC QC c.#c.#TT@TT@<|@<|@<|@<|@<|@<|@<|@<|@$4@$4@$4@<|@[|@[|@:|@:|@>b@r[@X:@t! t! t! X:@X:@rG r[@t! t! X:@t! W:@]|@+L@.9 RT@uR@b.#i@#Cv@j$#Cv@C&#Z=#Z=#Z=#P~#0u#85*gH gH #V=Yx&Dz sq=%V=VA %V=Lp=YV=Iz=(f@u)*XW=t/.kS.sX%b,+b,+j(#S`%sX%j(#S`%CI#w{@Q+&Q+&w{@CI#S`%uG#sX%Q+&j(#Q+&CI#w{@w{@S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%&r=*r=uG#uG#uG#S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%&r=&r=&r=*r=*r=uG#uG#uG#&r=&r=&r=*r=*r=&r=&r=&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=sX%sX%sX%&r=sX%sX%sX%sX%sX%sX%&r=S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%&r=&r=&r=&r=&r=&r=&r=&r=&r=sX%sX%S`%S`%CI#w{@w{@sX%sX%sX%sX%sX%sX%sX%sX%S`%S`%S`%S`%S`%S`%S`%S`%l]#l]#l]#l]#l]#l]#l]#l]#l]#l]#=Z+=Z+=Z+=Z+=Z+=Z+xr*xr*xr*xr*xr*xr*xr*xr*uq*uq*uq*uq*uq*uq*uq*uq*5,+5,+5,+$' $' qK+qK+qK+qK+jM#k4@IV.k4@k4@j(+]o&xE*OP*23+23+US+';$';$d #US+US+23+23+23+OP*OP*OP*y4&y4&y4&y4&y4&y4&y4&y4&Kh+7P.y4&iS.w5&w5&w5&w5&d #';$23+OP*OP*23+';$d #23+u!=u!=23+23+u!=u!=17*;n.M]*M]*M]*M]*M]* == ==PB@PB@wr*wr*wr*wr*wr*mO#7' aH*aH*aH*aH*aH*aH*aH*zw*aH*(k=>H*GJ@lC&", "O7.O7.x5.is@Vh.dD.dD.xX%xX%xX%xX%O7.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+N7.N7._r+xX%xX%_r+N7.N7._r+_r+xX%xX%xX%_r+N7.N7.xX%xX%_r+_r+_r+N7.N7.N7._r+_r+_r+_r+_r+_r+_r+_r+M7.M7.M7.N7.N7._r+_r+_r+<3+<3+<3+<3+<3+<3+<3+<3+v4.v4.v4.v4.v4.v4.v4.v4._r+_r+_r+N7.N7.M7.M7.M7._r+N7.N7.N7.M7.M7.%0+%0+_r+_r+N7.M7.%0+$B#$B#@9.N7.%0+$B#%0+_r+xX%N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.M7.M7.M7.%0+%0+%0+<3+<3+<3+<3+<3+<3+<3+<3+,H.0q.#k.#k.v4.<3+<3+#k.<3+v4.#k.#k.#k.#k.v4.<3+0q.0q.0q.0q.q3.q3.q3.q3.%0+M7._r+N7.%0+$B#%0+N7.$B#$B#$B#$B#$B#$B#$B#$B#0q.q3.:(+bp.bp.:(+q3.0q.0q.0q.0q.0q.0q.0q.0q.0q.q3.q3.,H.:(+:(+,H.q3.q3.bp.,H.q3.q3.,H.:(+q3.0q.,H.,H.,H.,H.,H.,H.,H.,H.0q.0q.0q.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.0q.0q.q3.q3.,H.bp.:(+,H.q3.0q.0q.0q.0q.q3.q3.q3.q3.q3.q3.q3.$B#Zl@Wh@^n#eO@:(+,H.0q.<3+q3.$B#%0+Wh@31.|j=p4*@Q.YW=ZW=`W= X=5j ^_$r*$ge#~p#(h..X=~^.;A$.H%PL.!V=+;&_]&{V=cK&m%+B*+k%+k%+R3#R3#R3#R3#q1@q1@sH&sH&r1&r1&PD@){+D_+GB@GB@'{+){+){+GB@GB@'{+GB@GB@Eb#g>@wX@z^&z^&3+$g>@:X@ja@[-+:X@+x@#*+Ar+@*+|f+|f+@*+@*+@*+|f++B$3)#3)#3)#k %k %/a$/a$/a$/a$)]$/a$tp%QB$QB$QB$tp%tp%tp%tp%C/%C/%A3%A3%A3%A3%y7%y7%&c$&c$&c$&c$/a$/a$Fs%Fs%/a$/a$Fs%0r$0r$&W#m9&kn$4Z..v@`o$`o$]v$R2@R2@9Z+]v$R2@|f+|f+9Z+9Z+|f+@h+l[+.+@P]+mi@!~#_-#3r$~`+eX#zg@1L.=W@Cn [} ^1 ZA CR@Ad$-S xR@'8@(Y@q%&wW$hF%~-*+X=@X=EU=ZL=%c*#X=$X=%X=&X=*X==X=-X=-X=Op=jE#6C#;f#wy X=,X='X=)X=!X=~X=~X={X=]X=^X=/X=Jh*(X=_X=:X=/#-/#{F$z/%A[%fs$GC$26$s1$&@&hq$V3@42$3X=4X=5X=6X=7X=X$*Wv%/x%v3*d3&d3&OP=zz&Nf*=7&8X=8X=P7&-U=9X=kU=0X=aX=pF&bX=cX=M-$<|=+d&i_&nx$KO%i_&a!&}H%|u%ox$n!$.y Ow Ow Ow PC PC QC QC vR@vR@$4@<|@[|@:|@1|@1|@$4@$4@$4@$4@$4@$4@$4@$4@<|@<|@<|@[|@:|@:|@_|@_|@(|@_|@[|@$4@vR@Eu Eu Eu Kv $4@[|@<|@vR@Eu Eu vR@c.#c.#c.#c.#c.#c.#c.#c.#q<$c.#q<$d.#%B%b|$c.#'8@<|@$4@vR@Eu Kv Eu Eu vR@_|@[|@vR@&E u1$$4@@~ B_#vg#OH#vg#d1#LZ$X~#W~#=p@X~#X~#X~#X~#yK cN@}A v! [|@[|@<|@$4@vR@Eu Kv Kv Eu Kv &E u1$Nt%Nt%u1$Jv no%Gu nP%/*$Gv Dm x6 +$$o!$Y,@>u$Ns$k4#j,%{-# I$DU.tc@'>+ki@m~+Wk$ar$Sj$_a$Ej$[{#[{#[{#[{#N1#N1#zA#zA#{^#{^#gX@gX@BO@2R+jX+jX+)K@AM@CO@CO@CO@!K@W{@{k#T_@r<@T,@7=@gX+Wx$qw$@d$=k$Tj$Q'$sD$99$A1#B;@S2@Wt+>/#~f#3F$$Q$-r%~_%SB$jh$px$7:%Du+BD%P;%Gz% ;n.M]*M]*M]*M]*M]* == ==PB@PB@wr*wr*wr*wr*wr*mO#7' aH*aH*aH*aH*aH*aH*aH*>H*(k=(k=aH*GJ@ (&", "x5.x5.x5.is@is@is@is@_r+_r+xX%xX%O7.O7.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%_r+_r+xX%O7.O7.xX%_r+_r+N7.N7._r+xX%xX%xX%_r+_r+O7.O7.O7.xX%_r+_r+_r+N7._r+_r+_r+_r+_r+_r+_r+_r+M7.M7.M7.N7.N7._r+_r+_r+<3+<3+<3+<3+<3+<3+<3+<3+v4.v4.v4.v4.v4.v4.v4.v4._r+_r+_r+N7.N7.M7.M7.M7.xX%xX%_r+_r+N7.N7.N7.M7.M7.M7.M7.M7.M7.%0+%0+%0+O7._r+M7.N7._r+xX%N7.%0+$B#%0+N7._r+_r+N7.%0+$B#N7.N7.N7.M7.%0+%0+%0+$B#<3+<3+<3+<3+<3+<3+<3+<3+bp.q3.v4.v4.<3+0q.0q.v4.q3.0q.v4.#k.#k.v4.0q.q3.<3+<3+0q.0q.q3.q3.,H.,H.$B#M7.N7.N7.%0+$B#M7._r+$B#$B#$B#$B#$B#$B#$B#$B#0q.q3.:(+bp.bp.:(+q3.0q.<3+<3+<3+<3+<3+<3+<3+<3+,H.:(+bp.+9.+9.bp.:(+,H.:(+q3.<3+0q.:(+bp.:(+q3.q3.q3.q3.q3.q3.q3.q3.q3.<3+<3+<3+0q.0q.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.,H.q3.<3+v4.v4.<3+q3.,H.0q.0q.q3.q3.q3.0q.<3+<3+q3.q3.q3.q3.q3.q3.q3.$B#Zl@l5+%0+$B#q3.0q.<{.u*=:(+$B#%0+d1*&R+p2.p4*kX=lX=h1*mX=nX=oX=x&#$; vd# e#+I+,: x.fb%`c.Up*>T*e(*_]&{V=C*+m%+W'*{+>}&,'+P:$lH@Eb#GB@GB@GB@GB@A:&N$+5W.']$V_#V_#h/+h/+h/+Ub+|f+9Z+9Z+9Z+3)#3)#k %k %k %k %/a$k %tp%QB$QB$QB$tp%tp%tp%tp%C/%C/%A3%A3%A3%A3%y7%y7%/a$/a$/a$Fs%Fs%Fs%0r$0r$/a$Fs%Fs%Fs%Fs%Fs%Fs%N@%`o$~=#/d$/d$|)#|)#]v$]v$]8$k %+*+|0#Fs%0r$&c$B%%W_#Ar+tc@d_+>9@,/#N4$3F$g3#*{#Gh+hs%@(+ZZ >J h< Th V&&N-%-S dP@[|@v! ]A B'$.[&b$$vl@J7&c`%vz&pX=qX=rX=sX=tX=uX=cG#nk&9q#bp=XA FN B'$+n@+n@.n@FN )k&Sm&zp&] $3$*bE%bE%F'$G'$4h 6E$-z$xd$wd$AD%$l+Iy$_ +CG.vX= P*wX=xX=0r*1T*yX=zX=AX=BX=CX=DX=4r*EX=FX=GX=HX=GX=IX=JX=$&=KX=LX=Wt+ c$NQ$!b#.I$<'$o1#bL#g>#g>#.-#|/%Sv -h@AN ()@R:@ 6$MX=NX=OX=PX=v7*,b*Ma*Na*Na*f/*o}*B/**7&QX=RX=SX=TX=UX=VX=Do&WX=XX=YX=ZX=`X=XX=N%$ Y=lF%K9&.Y=+Y=@Y=#Y=+Y=CD%u1$cC%Lv Lv Lv PC PC PC vR@vR@vR@$4@<|@[|@||@||@[|@[|@[|@[|@[|@[|@[|@[|@<|@[|@:|@_|@(|@/|@^|@@~ ^|@/|@_|@[|@<|@$4@vR@vR@$4@[|@_|@:|@$4@Eu Eu vR@vR@vR@vR@vR@vR@vR@vR@vR@Eu vR@vR@Kv &E Kv <|@(|@:|@<|@Eu u1$u1$&E vR@$4@^|@(|@[|@Eu vR@(|@')#{Y@B&#h@#!)#YA (|@_|@(|@/|@_|@:|@[|@<|@<|@<|@[|@:|@vR@vR@Eu Eu Kv &E &E u1$&E u1$Nt%Nt%Nt%&E Kv Fu `y y'%m=$n=$k@#x6 ;> Ts$`w q{%ry%Wx%FX%#;%N4$O]+J.+}f+WX.8]+Di$Cj$Dj$@d$qw$qw$qw$qw$qw$qw$qw$qw$ni$AA#DA#DA#gX@gX@_P+_P+iX+iX+5Z+/H$-L$-L$-L$AM@2T+T_@2T+T,@gX+7V@Wx$N;$'M$Ei$PX#|0#4V+QB$)Q#5w+F[#={#&$#TO$h(%,,$SB$Ih+xJ+Pz$-z$z_%1i }f 9~ .~ 7'$Ez%s}%xr$ w% w%Au Mw Ux Ux ^Y@ST@>8@!8@zR@zR@%2@<|@<|@<|@<|@<|@<|@<|@vR@$4@<|@[|@:|@_|@_|@(|@t! +~ +~ +~ t! X:@r[@>b@X:@+~ W:@+~ +~ Y:@(7 +L@WC@A&#A&#y&#`V@+FG*lt*FG*S>+x}*", "Vh.is@x5.O7.O7.xX%xX%_r+_r+xX%xX%O7.O7.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.O7.O7.O7.O7.O7.O7.xX%xX%O7.x5.x5.O7.xX%xX%%0+M7._r+xX%O7.O7.xX%xX%x5.x5.x5.O7.xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+%0+M7.M7.N7.N7._r+_r+xX%<3+<3+<3+<3+<3+<3+<3+<3+v4.v4.v4.v4.v4.v4.v4.v4._r+_r+_r+N7.N7.M7.M7.M7.O7.xX%xX%xX%_r+_r+N7.N7.$B#$B#%0+%0+M7.N7.N7._r+is@O7._r+_r+xX%xX%N7.%0+@9.$B#N7.xX%xX%N7.$B#@9.N7.N7.N7.M7.%0+%0+$B#$B#<3+<3+<3+<3+<3+<3+<3+<3+bQ#,H.<3+v4.<3+q3.0q.<3+,H.q3.0q.<3+<3+0q.q3.,H.<3+<3+0q.0q.q3.q3.,H.,H.)Z%@9.%0+$B#eO@eO@@9.%0+$B#$B#$B#$B#$B#$B#$B#$B#0q.q3.:(+bp.bp.:(+q3.0q.<3+<3+<3+<3+<3+<3+<3+<3+,H.bp.+9.bQ#bQ#+9.bp.,H.,H.0q.v4.0q.bp.+9.bp.q3.0q.0q.0q.0q.0q.0q.0q.0q.#k.v4.v4.<3+0q.0q.q3.q3.0q.0q.0q.0q.0q.0q.0q.0q.q3.0q.v4.#k.#k.v4.0q.q3.#'{+D_+PD@ZF@P$+E_+,'+P:$QD@QD@){+D_+D_+GB@A:&B'#5W.']$V_#V_#h/+h/+h/+Ub+|f+9Z+9Z+9Z+3)#3)#k %k %k %k %/a$k %tp%QB$QB$QB$tp%tp%tp%tp%C/%C/%A3%A3%A3%A3%y7%y7%/a$Fs%Fs%Fs%0r$0r$&W#&W#Fs%Fs%Fs%/a$/a$/a$/a$k %|)#B1#B1#~=#/d$`o$`o$]8$ns$&c$A0%rr%pr%^q$(a$PX#6c#1|+7)#6)#5)#5W.2|+)2+mo%Oj#!-#O%$GT#&y 2u J0 Bx#-t#U&&N-%Jt$||@[|@v! FN B'$|$&8h&40&36&0.#Ay@-Y=;Y=>Y=,Y='Y=9l&)Y=>k&#] ]8@'8@QC QC {A cN@GN !Y=rQ ~Y={Y=(;*,k&G8=bQ%#h%i_& N$:[%}_%*v$nJ#A[%l4#*;%NQ$[ +gT.]Y=^Y=Tc*CG./Y=(Y=_Y=:Y=D&Re@+{#)q$U=%+-#%-#E&#CV#fp B6 76 n#5Y=Bp 6Y=;,@7Y=8Y=d]+G; V=*M(*0;&P]$^x%}C%|g$B/*9Y=0Y=c!&z~&z~&TX=aY=+Y= Y=_J ]I&gq&G@&VW=bY=5V=cY=VB&pU=dY=eY=fY=jU%|f .y u1$&E &E Kv Kv Kv vR@vR@vR@vR@$4@$4@%2@%2@[|@[|@[|@[|@[|@[|@[|@[|@[|@:|@_|@(|@^|@WA YA YA WA ^|@(|@:|@[|@<|@$4@$4@[|@_|@(|@_|@$4@Eu Eu vR@vR@vR@vR@vR@vR@vR@vR@vR@Kv vR@$4@Eu &E Eu :|@@~ (|@[|@Kv Nt%GJ%u1$vR@[|@^|@(|@<|@Eu vR@/|@QT@h@#'d@h@#')#/|@:|@:|@:|@_|@:|@[|@vR@Eu Eu $4@:|@(|@Kv Kv Kv &E &E u1$u1$u1$u1$u1$Nt%Nt%u1$Kv vR@6F _l$_l$4i 9s 9> ;> Ts$J&#_)#}_$gY=hY=iY=j7#l[+[c@6 @c=@J1#N;$2h$lw$Ej$&6$&6$&6$&6$&6$J$+J$+J$+&6$ni$AA#DA#DA#gX@gX@*6$_P+_P+_P+jF$kF$)I$~J$:H$pZ@5$@7=@7=@7V@gX@N;$x4#B)+>>+n~+@*+l[+Y_@C(%F!$d%%SP.Pp .B#fs$1c#E<%n'%X{$=S !M }f }f Eu ^Y@v! 7G@0q +, 5r 5;#1/$.}$nP%f.#mP%3`@^Y@$4@!8@zR@8+%VT@%2@<|@<|@<|@<|@<|@<|@<|@vR@$4@<|@[|@:|@_|@(|@(|@+~ +~ W:@+~ +~ X:@r[@>b@t! +~ W:@W:@W:@;! 9 .9 WC@A&#z&#y&#`V@+FG*FG*pK+pK+", "O7.x5.is@is@Vh.dD.dD.is@O7.xX%N7.N7.xX%O7.is@x5.O7.xX%_r+_r+xX%O7.x5.xX%xX%xX%xX%xX%xX%xX%xX%is@x5.x5.O7.xX%_r+_r+N7._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.x5.O7.xX%_r+_r+xX%O7.x5.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.N7.N7.N7.N7.N7.N7.#k.#k.#k.v4.v4.<3+<3+<3+v4.v4.v4.v4.v4.v4.v4.v4.N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.N7.N7._r+_r+_r+$B#%0+M7._r+_r+M7.%0+$B#_r+_r+_r+N7.N7.M7.M7.M7.%0+%0+%0+M7.M7.M7.N7.N7._r+_r+_r+N7.N7.M7.M7.M7.q3.0q.0q.0q.<3+v4.v4.v4.<3+<3+<3+<3+<3+<3+<3+<3+#k.<3+q3.q3.0q.0q.,H.bp.v4.v4.v4.<3+<3+0q.0q.0q.M7.%0+$B#@9.@9.$B#%0+M7.$B#$B#$B#$B#$B#$B#$B#$B#<3+0q.q3.,H.,H.q3.0q.<3++9.+9.bp.:(+:(+,H.,H.q3.:(+:(+:(+:(+:(+:(+:(+:(+0q.0q.q3.q3.,H.:(+:(+bp.bp.,H.0q.q3.+9.bQ#+9.,H.bp.:(+q3.0q.0q.q3.:(+bp.,H.,H.,H.,H.,H.,H.,H.,H.:(+,H.q3.0q.<3+<3+<3+0q.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.q3.q3.q3.q3.q3.@9.%0+<3+0q.}[#zy.3W+u*=}[#q3.$B#$y#4B&J3.bM.bM.L3.Jj=lY=mY=>p=nY=Hd W4 +S M2$zn l[ ~^.oY=jD*pY=XR qY=mb@re$m%+W'*#%>#'{+'{+'{+'{+GB@D_+){+PD@r1&C2&3a&4<+4<+4<+3a&3a&|!+|!+CW.]b&;{+o~+c!$X@+X@+O:+h/+MX.h/+Ub+Ub+=1@9Z+9Z+3)#3)#3)#3)#k %k %k %k %tp%QB$QB$QB$tp%tp%tp%tp%nF$nF$`}&`}&Z}&Z}&5v$y7%&c$&c$&c$/a$Fs%Fs%0r$0r$Fs%Fs%Fs%Fs%Fs%Fs%Fs%N@%})#g&@})#})#R2@R2@wy+N@%k %/a$)]$80$80$c/$c/$c/$~}%j %2S#g^@B($E!$rY$mH@O$+r=#sL.xo=--#=A$2d$4L. ^+0|%_>$`T@Mf *W@Z:@sG ^G%.y Lv ^A ]Y@FN XA bp=rY=sY=tY=r}=aK##X uY=8+%wR@||@||@vR@&E Jv }g c.#qQ vY=wY=)S dQ%xY=yY=2E%cY=*c&&3%m3%mY#*C+Z^#.B#b_#rP$rP$-@#=@#s'@gU$:J$Uk#p^#c%+zY=AY=BY=CY=:_%0~$l6&{Q.tL.uD$~Z#aE$RF#}Z$/V%x@%NB@E(@h>#|-@&S E q$#,b*P]$S-$e/*'T=l_*FY=GY=HY=IY=aY=#]&JY=3h&KY=0K#LY=MY=NY=OY=PY=QY=RY=SY=TY=UY=VY=WY=~@$E'$(0@R5@R5@E'$G'$~J%(0@(0@Kv &E Kv Eu vR@$4@<|@$4@$4@$4@$4@<|@[|@:|@$4@<|@[|@:|@:|@:|@:|@[|@:|@:|@_|@_|@_|@:|@[|@[|@<|@[|@_|@(|@(|@:|@$4@Eu Kv Kv Kv Kv Kv Kv Kv Kv vR@vR@vR@vR@vR@vR@vR@vR@u1$&E &E Kv Kv Kv &E u1$$4@vR@Kv Eu [|@a~ {Y@gt@ p@))#YA (|@:|@[|@vR@&E $4@<|@<|@<|@$4@Eu &E Nt%Nt%u1$Kv Eu Eu Kv &E u1$GJ%Nt%Nt%u1$Kv Eu vR@6G@U~#!@$zu (e #L@Zw +/@${#j,%Q}$9/$XY=8p$+B$5)#t##[f+r|$e'#{^#]N#^N#N1#L1#qw$qw$,p$,p$%K$a8$a8$a9$+z$:m$yU#^N#^N#zA#L1#00$b8$b9$;u$c8$-I$S!$(^$!l$!k#]N#yU#2h$7o@B)+C)+YJ#ue#DU..B%bX#GX$GY$g0$s1#Uk$@-#J!$*S =S jQ v~$Y;$Z;$&E Lv Lv [A [A [A Ow vt Y{$=^$v_$g.# D%yT%;:$`y `y ST@<|@%2@n$#Ad$n$#||@[|@[|@[|@[|@[|@[|@[|@$4@<|@<|@[|@:|@:|@_|@_|@t! W:@Y:@+~ r[@sG sG rG +~ W:@Y:@;! (7 /d@ 9 O9 ~)#yz#aY 4C 3C m] v{ P+#)G )G W##7C&Wp&9Q=hH st&3`%$V=eX=YY=$Y=fH VA %V= x{+[f.OP*';$US+[f.,].>].HV.[f.x{+OP*OP*x{+[f.7P.7P.7P.7P.7P.7P.7P.7P.Kh+7P.oh.y4&y4&oh.7P.Kh+OP*OP*OP*OP*OP*OP*OP*OP*US+US+US+US+US+US+US+US+k#@k#@k#@4,+wE*k#@d;+y{+..=xE*zi.$.@$.@zi.xE*..=u!=[f.[f.x{+OP*OP*23+23+OP*OP*OP*OP*OP*OP*", "x5.x5.x5.O7.O7.O7.O7.O7.O7.xX%xX%xX%xX%O7.O7.x5.O7.xX%_r+_r+xX%O7.x5.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.O7.O7._r+_r+_r+_r+xX%xX%xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+O7.xX%_r+N7.N7._r+xX%O7.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.N7.N7.N7.N7.N7.N7.#k.#k.#k.v4.v4.<3+<3+<3+v4.v4.v4.v4.v4.v4.v4.v4.N7.N7.N7.N7.N7.N7.N7.N7.%0+%0+M7.M7.N7.N7.N7.N7.$B#%0+M7.N7.N7.M7.%0+$B#N7.M7.M7.M7.%0+%0+$B#$B#%0+%0+%0+M7.M7.M7.N7.N7.N7.N7.N7.N7.M7.M7.%0+%0+,H.q3.q3.0q.<3+v4.#k.#k.<3+<3+<3+<3+<3+<3+<3+<3+v4.0q.q3.q3.0q.0q.q3.:(+<3+<3+<3+0q.0q.q3.q3.q3.M7.%0+$B#@9.@9.$B#%0+M7.$B#$B#$B#$B#$B#$B#$B#$B#0q.q3.:(+bp.bp.:(+q3.0q.:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.:(+q3.<3+q3.bp.+9.bp.,H.bp.:(+q3.0q.0q.q3.:(+bp.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.q3.0q.0q.0q.0q.q3.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.q3.q3.q3.q3.q3.@9.%0+<3+0q.}[#zy.3W+5x 3W+}[#q3.$B#$y#4B&J3.J3.31.6) J3.3b+`Y= Z=.Z=#r |) Q!@dU+tO#-_&+Z==3%mX%RO.qY=mb@cK&m%+W'*#%>#'{+'{+'{+'{+GB@D_+){+PD@r1&ZF@3a&4<+4<+4<+3a&3a&|!+|!+|!+CW.;{+o~+'r%c!$c!$87$>9@MX.h/+h/+Ub+Ub+|f+|f+3)#3)#3)#3)#k %k %k %3)#QB$QB$QB$QB$tp%tp%tp%tp%Os%Os%Z}&Z}&Z}&A3%y7%y7%&c$&c$&c$/a$Fs%Fs%Fs%0r$Fs%Fs%Fs%Fs%Fs%Fs%Fs%N@%R2@})#})#R2@R2@wy+N@%Fs%/a$)]$(a$80$qr%c/$K$+K$+T4$N)$cN#.l# c%ea@bD#`/$VF@YF@)]=ms=Me$qs@wM#m:=X:$`8%jq+(n%Ug FR@8~ cP@*E Lv PC QC ST@#~ ;8@Ox@@Z=#Z=xK$xK$xK$oq&>f$,.%n$#n$#||@dP@}f *E }f R5@$Z=%Z=&Z=*Z==Z=-Z=;Z=>Z=,Z=y%&'Z=`E%<=&QQ$jq++/#b_#hN$>$%>$% /@Hh+-v$HE+)Z=DT$pV$X!%9#%w}%SO=w}%~`+3x%d3%Ej=}Z$gf*!Z=~Z={U+%l%j4#fs$>g$=l If '8 G0 I~ gG#Bn@$p wd ;1 X[@{Z=]Z={M+,d ^Z=/Z=#t+Z#$or (Z=_Z=k<$4X=iq$2A x3*f!&KR%KR%=)&@F%@]&/g&Ms&#/&@]&,r&3h&xK$c+&uJ&:Z=+<-+li@P@@7 @!~#0&%!-#z~$&-#g%%o1#J!$s[@cP@-! -E }g *E Jv Lv Lv Ow Ow bC%bC%bC%Ow Jv as Du v_$3`@k%&yT%;:$`y `y v! <|@%2@n$#Ad$n$#||@[|@[|@[|@[|@[|@[|@[|@[|@[|@[|@[|@:|@:|@:|@:|@X:@+~ W:@+~ r[@rG >b@r[@W:@Y:@;! ]|@/d@ 9 O9 +L@yz#aY aY ;{ i'#p{ v{ P+#)G W##W##j| O} rt&hH st&3`%$V=eX=YY=$Y=fH hV=%V=4Z=5Z=iV=hR&=V=r4.:@. 9.bQ#o&=o&=b,+j(#j(#Q+&Q+&Q+&Q+&w{@w{@CI#CI#CI#S`%w{@w{@CI#CI#S`%S`%sX%sX%w{@CI#sX%&r=&r=sX%CI#w{@sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=*r=*r=*r=*r=*r=*r=uG#&r=S`%sX%*r=*r=&r=S`%w{@S`%&r=&r=sX%S`%&r=uG#&r=&r=&r=&r=&r=&r=&r=&r=sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=sX%sX%sX%S`%S`%uG#uG#*r=*r=*r=&r=sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%w{@CI#S`%sX%sX%S`%CI#w{@sX%sX%sX%sX%sX%sX%sX%sX%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%S`%&r=*r=&r=S`%S`%sX%*r=yE#&b=l]#&b=.X+.X+iM#=Z+^u=o!#=Z+l]#&b=l]#l]#=Z+uq*uq*uq*uq*uq*xr*xr*xr*uq*uq*uq*uq*uq*uq*uq*uq*qK+qK+$' $' 5,+5,+jM#jM#mO#jM#5,+$' $' $' 5,+xu#J> 23+OP*23+23+23+x{+u!=HV.u!=x{+OP*OP*OP*x{+[f.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.oh.y4&y4&oh.7P.Kh+OP*OP*OP*OP*OP*OP*OP*OP*US+US+US+US+US+US+US+US+o2@k#@k#@4,+4,+k#@d;+y{+U*@17*zi.nh.nh.zi.17*U*@x{+x{+OP*OP*OP*OP*23+23+OP*OP*OP*OP*OP*OP*", "x5.x5.O7.xX%_r+N7.N7.xX%xX%O7.O7.O7.O7.xX%xX%x5.O7.xX%_r+_r+xX%O7.x5.xX%xX%xX%xX%xX%xX%xX%xX%N7.N7._r+xX%O7.x5.is@is@N7.N7._r+_r+xX%O7.O7.x5.xX%xX%xX%xX%xX%xX%xX%xX%xX%_r+N7.N7.N7.N7._r+xX%_r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.#k.#k.#k.v4.v4.<3+<3+<3+v4.v4.v4.v4.v4.v4.v4.v4.N7.N7.N7.N7.N7.N7.N7.N7.$B#$B#%0+%0+%0+M7.M7.M7.%0+%0+M7.N7.N7.M7.%0+%0+M7.%0+%0+%0+$B#$B#@9.@9.%0+%0+%0+M7.M7.M7.N7.N7.M7.M7.M7.%0+%0+%0+$B#$B#,H.q3.q3.0q.<3+v4.#k.#k.<3+<3+<3+<3+<3+<3+<3+<3+v4.0q.,H.q3.0q.<3+q3.:(+0q.0q.0q.q3.q3.,H.,H.,H.M7.%0+$B#@9.@9.$B#%0+M7.$B#$B#$B#$B#$B#$B#$B#$B#,H.:(+bp.bp.bp.bp.:(+,H.0q.q3.q3.q3.q3.,H.,H.,H.q3.q3.q3.q3.q3.q3.q3.q3.bp.bp.:(+,H.q3.0q.0q.<3+q3.0q.<3+0q.,H.:(+:(+q3.bp.:(+q3.0q.0q.q3.:(+bp.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.0q.0q.0q.q3.,H.:(+,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.q3.q3.q3.q3.q3.@9.%0+<3+<{.3W+lY+Lv&5x 3W+}[#q3.$B#$y#4B&J3.J3.Wh@4B&vK+/U=6Z=R5.7Z=AC#8Z=wI@DY+9Z=0Z=>.@aZ=bZ=RO.qY=(r%C*+m%+W'*k%+7T@XF@}T$ue#ue#q1@q1@sH&[-+){+D_+GB@'{+'{+'{+'{+GB@'{+'{+GB@D_+){+){+PD@QD@3a&4<+4<+4<+3a&3a&|!+|!+BW.|!+}Y.2/+i[%!V@!V@B'#>9@Ne@MX.MX.MX.MX.li@li@9Z+9Z+9Z+9Z+3)#3)#3)#3)#QB$QB$QB$QB$tp%tp%tp%tp%9v%9v%A3%A3%98$98$99$99$&c$&c$/a$/a$/a$Fs%Fs%Fs%Fs%Fs%Fs%Fs%Fs%Fs%Fs%N@%wy+R2@R2@wy+wy+N@%N@%Fs%)]$(a$(a$qr%}0$K$+K$+K$+90$&6$$*$se#8~#2w+}3@ca@n1@cZ=dZ=Ok$$E#>m#eZ=NX#4r$4G$3j+jq+aL#v'@=0@Zi@ds -E Fu Fu -E vR@$4@)8@XN%fZ=OO%_g%m!$zd%zd%x~$lQ n$#I5@EN 1i Z;$[,$-S gZ=hZ=iZ=jZ=kZ=lZ=mZ=nZ=oZ={&%pZ=qZ=Sc&9a&X8&Vo$Nj#;-#&{#${#V{$,f#jh$kT$v+%J4%z1&y[%%W$CT$rZ=A(%] &] &5H%5H%nc&sZ=`x$~p%%l+-v$ /#`^#+/$ET Ld U-@T:@Dv@Gq&Sp tZ=J++uZ=-k @E.HL.yw vZ=L(@@F.Ws+Ts+5t+.> {p wZ=xZ=yZ=Ta$cs&80*2q&O=&OL%l^*zZ=AZ=BZ=2h&31*CZ=DZ=EZ=(T%FZ=GZ=HZ=IZ=JZ=KZ=LZ=MZ=NZ=OZ=PZ=QZ=F:&0E&RZ=c'$KO%nm&l!$kQ R5@$4@ST@ST@^Y@^Y@Eu Eu Eu Eu vR@<|@:|@_|@Eu vR@$4@<|@[|@<|@<|@<|@<|@[|@:|@(|@/|@/|@(|@(|@:|@_|@(|@/|@(|@_|@[|@$4@sG sG sG sG sG sG sG sG -! -! -! -! -! -! -! -! &E &E &E u1$Nt%Nt%GJ%GJ%GJ%*L%u1$(|@))#h@#XC@B_#0~ EN#4|@4|@4|@3|@1|@||@|f |f 5'$5'$5'$5'$|f G'$&E &E &E &E u1$Nt%GJ%*L%vR@vR@$4@<|@<|@[|@:|@>b@xt g$o1#+@$-{#__%,{+tc@,>+/ %ZJ#VX.+$#@>#K4#VK+}V+oi$]N#]N#zA#AA#,b$,b$,b$N1#Ej$b8$b9$Qj${^#b@X:@+~ ;! ;! ]|@/d@ 9 O9 +L@.9 yz#aY 4C 3C m] jX@v{ P+#W##W##j| Wp&k| es&)t st&$I=dX=tm=YY=.8 -7 hV=%V=H*>H*>H*>H*(k=a1+a1+23+23+7P.7P.7P.7P.7P.7P.Kh+Kh+7P.7P.7P.7P.oh.oh.oh.oh.oh.oh.oh.oh.", "x5.x5.O7.O7.xX%xX%xX%N7.xX%O7.is@is@O7.xX%N7.x5.O7.xX%_r+_r+xX%O7.x5.xX%xX%xX%xX%xX%xX%xX%xX%_r+_r+xX%xX%O7.O7.x5.x5.N7.N7._r+xX%O7.O7.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7.N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.#k.#k.#k.v4.v4.<3+<3+<3+v4.v4.v4.v4.v4.v4.v4.v4.N7.N7.N7.N7.N7.N7.N7.N7.@9.@9.$B#$B#%0+%0+%0+M7.%0+M7.M7.M7.M7.M7.M7.%0+M7.M7.M7.%0+%0+$B#$B#$B#%0+%0+%0+M7.M7.M7.N7.N7.M7.%0+%0+%0+$B#$B#@9.@9.<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+q3.,H.q3.0q.<3+0q.,H.q3.q3.q3.,H.,H.:(+:(+:(+%0+%0+$B#$B#$B#$B#%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#,H.,H.:(+:(+:(+:(+,H.,H.<3+<3+<3+0q.q3.q3.,H.,H.0q.0q.0q.0q.0q.0q.0q.0q.:(+:(+:(+,H.q3.q3.q3.0q.0q.<3+<3+0q.q3.,H.,H.q3.bp.:(+q3.0q.0q.q3.:(+bp.,H.,H.,H.,H.,H.,H.,H.,H.q3.0q.0q.0q.q3.,H.:(+bp.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.@9.0q.u*=<{.3W+lY+Lv&Wb#3W+}[#}[#$B#$y#4B&J3.4B&$y#l5+}7.n2.TZ=UZ=VZ=WZ=R@@yF=M2$D)*@o=SO.]S+Lr=v6*6/.5/.H-*T{*V)*9@Ne@MX.CU.CU.&h#d_+d_+|f+|f+|f+|f++B$+B$+B$+B$Yx%Yx%Yx%Yx%4V+4V+4V+4V+C/%C/%A3%98$98${l$L$+L$+/a$/a$/a$/a$/a$/a$Fs%Fs%Fs%Fs%Fs%Fs%Fs%Fs%Fs%Fs%N@%N@%N@%N@%N@%Fs%Fs%pr%(a$(a$7v$qr%}0$K$+K$+Sj$,L$&6$37$46+Jq@EA#>5@* +5T@jE*=1=GK*47*rl=XZ=P8@EB%;H$Bo+3j+8v#.{#{)#CN Rx@;E tG 6G@-! -! $4@$4@c.#r<$#Q$1(&3C%%R$F'$n!$k$#lQ )M EN 1i 7E$=S %>$YZ=ZZ=`Z= `=.`=+`=@`=#`=$`=%`=&`=*`==`=Q-&ez%xR#t1@@5$FX$&-#5r$+N$)n#&W$m3%m3%RY$v+%-`=-H$;H$L@%&{#`M$&{#&{#t[#|6$Vo$jn$J_#y=$Mp#xz#99 CD Ld V-@;{ wu&;`=ut&t2&>`=rp.Q,%^k.qv.,`=P}%'`=|V.)`=R9#qe d.+dv+FS+Zu !`=$:$(i@~`=Wv%Zv%ZI$|N%f`%m}*u7*^$&r(*^$&)~*1$&,r&z~&{`=]`=^`=/`=(`=_`=_`=:`=<`=[`=}`=|`=1`=2`=3`=0E&O7&t)$k!$R5@$4@ST@{A z Vx PC Kv Kv Kv vR@$4@[|@:|@vR@vR@$4@<|@[|@[|@<|@<|@$4@<|@:|@_|@/|@/|@/|@/|@_|@_|@(|@(|@(|@_|@[|@<|@rG rG rG rG rG rG rG rG -! -! -! -! -! -! -! -! Kv Kv u1$Nt%GJ%GJ%GJ%GJ%g`%Nt%[|@kI@XC@XC@B_#WA 4|@4|@4|@4|@4|@2|@}|@||@(0@(0@(0@(0@E'$E'$5'$|f u1$u1$u1$u1$u1$u1$Nt%Nt%$4@$4@<|@<|@[|@[|@:|@`:@jQ i4#ix@Ih++@$$Q$f<#BW.v}%dk@WX.I1#J1#x_$Rs@J4#]-+BI+[ @oi$]N#^N#BA#St$,b$,b$ni$ni$[{#[{#!k#!k#nZ@$%NB@l8$m1#n[#,M 2r@!J i0$Lv Lv Lv Lv Ow Ow Ow Lv PC PC Qw Qw Qw Qw Qw PC E'$E'$Eu QC ^Y@ z z i*$5`@cB v! }A ||@}|@m$#m$#}|@:|@:|@:|@:|@:|@:|@:|@(|@(|@_|@_|@:|@[|@[|@<|@>b@X:@t! t! r[@X:@+~ Y:@]|@]|@(7 9 O9 .9 @A@_C@aY 4C 3C m] jX@v{ P+#P+#7C&j| Gq&.] rt&hH st&'U=3`%6s=4`=5`=.8 $Y=%V=hV=#f*gy=E.*6`=*G.y(._}.It&Q+&Q+&j(#j(#j(#j(#b,+b,+Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&w{@w{@CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=*r=*r=*r=*r=*r=*r=uG#&r=S`%S`%S`%S`%w{@b,+CI#sX%*r=&r=S`%S`%sX%*r=N:**r=S`%w{@w{@S`%*r=N:*CI#CI#S`%sX%&r=&r=*r=*r=&r=&r=&r=sX%sX%sX%S`%S`%w{@uG#fW=N:*CI#Q+&sX%;Z+sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=*r=*r=&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=*r=*r=*r=*r=*r=*r=S`%&r=*r=&r=S`%S`%sX%*r=&b=&b=iM#iM#yE#yE#&b=l]#&b=&b=iM#iM#iM#iM#iM#iM#)p#$x+tq*Fu+,C+uq*xr*xr*&s*&s*&s*&s*&s*&s*&s*&s*1<# X+ X+SO+qK+$' 5,+5,+$' $' $' $' 5,+jM#mO#vE*U*@23+23+[f.u`.>].x{+';$US+US+US+23+23+OP*x{+[f.Kh+Kh+Kh+Kh+Kh+Kh+Kh+Kh+7P.7P.oh.oh.oh.oh.7P.7P.OP*OP*OP*OP*OP*OP*OP*OP*23+23+23+23+23+23+23+FG*(k=>H*zw*>H*(k=Ij=a1+b=+';$23+oh.y4&y4&oh.7P.G|@T_+G|@G|@Kh+7P.7P.oh.oh.oh.oh.oh.oh.oh.oh.", "O7.x5.x5.is@is@Vh.Vh.N7.xX%O7.is@is@O7.xX%N7.x5.O7.xX%_r+_r+xX%O7.x5.xX%xX%xX%xX%xX%xX%xX%xX%x5.x5.O7.O7.xX%xX%_r+_r+_r+xX%xX%xX%O7.x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7.N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.#k.#k.#k.v4.v4.<3+<3+<3+v4.v4.v4.v4.v4.v4.v4.v4.N7.N7.N7.N7.N7.N7.N7.N7.@9.@9.$B#$B#%0+%0+%0+M7.M7.M7.M7.%0+%0+M7.M7.M7._r+_r+N7.N7.M7.M7.M7.%0+%0+%0+%0+M7.M7.M7.N7.N7.M7.%0+%0+%0+$B#$B#@9.@9. %F=8`=`u #{ 9`=-Q 0`=a`=b`=XR w6*f(*QL.TD.w}*7T@p]+}T$ue#ue#q1@:B@sH&[-+PD@){+D_+GB@GB@GB@GB@D_+'{+GB@GB@GB@GB@D_+D_+Eb#3a&)%@)%@)%@j9*j9*n@%n@%'%@'%@7C=PO%G+@G+@T*%2/+O$+1k+1k+1k+&h#&h#&h#&h#Ub+Ub+|f+|f+|f+|f++B$+B$Yx%Yx%Yx%Yx%4V+4V+4V+4V+C/%C/%A3%98$98${l$L$+L$+Fs%Fs%/a$/a$/a$/a$/a$/a$Fs%Fs%Fs%Fs%Fs%Fs%Fs%Fs%Fs%Fs%Fs%Fs%Fs%pr%pr%4v$(a$(a$7v$qr%qr%c/$c/$Sj$,L$:8$Z&+Ab#K:+/F$}8+Fe@(3@]k@ra*:N+tt*c`=y>#K<$i($!q$6r$}=%$g+ix@HC$2A 0> j.$hB hB UH UH >b@cN@.z C1&[A 0C%TH%gB &E E'$E'$[g EN D&#{c$8E$Q-$s]&d`=e`=f`=g`=h`=i`=j`=k`=l`=m`=n`=o`=p`=[q%q`=(1%Z:$Ey$x!%i9$Gi$+N$PQ$r]&RW=0E&r`=Y &D:&-H$9#%y@%s[#O%$s[#eX#D:%|6$1w$Vo$XJ$#{@KR.Xj .(+Re ^3 {o +M#$~f#g3#r1$.I$GB$z-$()#ev$>1+`=#S-$)J =^$Ux mP%#}$zz%aC%gB gB gB Rw Rw Lv Kv Eu Eu Eu Eu (0@(0@(0@(0@k!$bQ%x~$H)$c.#^A ]A ]A cB cB }A }A }|@}|@~M ~M 1|@_|@_|@_|@_|@_|@_|@_|@/|@(|@(|@_|@:|@:|@[|@[|@r[@X:@t! X:@r[@X:@W:@]|@]|@(7 /d@ 9 +L@.9 @A@WC@aY Tk#{#.5u#g'#d=#M~ d=#*~ i] Z] T`=A! _l=Ub=yc=gH /u U`=qu=$Y=$Y=hV=4Z=4Z=GN#q *V`=u5.y(.3;@ :*Q+&Q+&Q+&Q+&j(#j(#j(#j(#CI#w{@Q+&j(#b,+o&=bQ#+9.w{@w{@w{@CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=*r=*r=*r=*r=*r=*r=uG#&r=S`%S`%S`%S`%w{@b,+S`%&r=*r=&r=S`%CI#sX%&r=uG#&r=S`%w{@w{@S`%&r=uG#S`%S`%S`%sX%&r=&r=&r=*r=&r=&r=&r=sX%sX%sX%S`%S`%CI#S`%sX%sX%S`%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=*r=&r=&r=*r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=&r=&r=*r=*r=*r=*r=*r=*r=*r=*r=S`%&r=*r=&r=S`%S`%sX%*r=l]#&b=yE#yE#iM#iM#&b=&b=yE#yE#iM#iM#iM#iM#iM#iM#)p#$x+tq*Fu+,C+uq*xr*xr*&s*&s*&s*&s*&s*&s*&s*&s*qK+qK+qK+qK+qK+qK+qK+qK+$' $' $' $' 5,+jM#mO#vE*1.+[f.x{+u!=,].,].[f.US+';$US+23+23+OP*x{+x{+x{+y4&y4&y4&y4&y4&y4&y4&y4&oh.oh.7P.7P.7P.7P.oh.oh.OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*lt*(k=W`=H8=X`=16.k^.a1+lt*';$23+y4&iS.~D.zc@8Y+Ai.T_+G|@G|@Kh+7P.7P.oh.oh.oh.oh.oh.oh.oh.oh.", "O7.x5.is@Vh.Vh.dD.%j.xX%xX%O7.O7.O7.O7.xX%xX%x5.O7.xX%_r+_r+xX%O7.x5.xX%xX%xX%xX%xX%xX%xX%xX%is@is@x5.O7.xX%_r+N7.N7.O7.O7.O7.O7.O7.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%N7.N7._r+xX%xX%_r+N7.N7._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.#k.#k.#k.v4.v4.<3+<3+<3+v4.v4.v4.v4.v4.v4.v4.v4.N7.N7.N7.N7.N7.N7.N7.N7.$B#$B#%0+%0+%0+M7.M7.M7.N7.M7.%0+%0+%0+%0+M7.N7._r+_r+_r+N7.N7.M7.M7.M7.%0+%0+%0+M7.M7.M7.N7.N7.M7.M7.M7.%0+%0+%0+$B#$B#F6.#-z@-z@)m+#o+&h#&h#CU.h/+h/+@*+@*+@*+@*+@ +@ +Yx%Yx%Yx%Yx%4V+4V+4V+4V+9v%9v%A3%A3%98$98$99$99$Fs%Fs%Fs%/a$/a$/a$&c$&c$Fs%Fs%Fs%Fs%Fs%Fs%Fs%Fs%pr%pr%4v$pr%4v$4v$4v$4v$(a$(a$7v$qr%qr%c/$c/$Sj$,L$*6$u_%}|+re#*N+HD+h9@9a@,*@>(@SX.p$+1w*,W%_<*/B+~.$Uk# /@OA$m8 +(+@^+nI@Cm Yr e{@qG qG t! mt@;f$. -C=$-f$-f$@D%PC Eu }f Z=+ -@ -# -$ -% -& -* -= -- -; -> -, -^Q*' -) -ww%lm$Qn$k4#+3%$I$&`$m3%.d&=U=! -~ -{ -[.%[[%y@%97$FW$%{#eX#|6$rP$@{@3c#%i#`m+`>$_a !}+:B=] -Z7 ~! ^ -'= H$ / - '&( -_ -: -< -[ -} -| -40.1 -`O+{9.2 -3 -4 -5 -6o 6 -_m@[>*|**M6*La*4r dC%dC%7 -8 -&z 9 -0 -a -=3*b -c -d -e -f -g -h -i -j -k -l -m -n -o -oZ=p -q -r -_,$r)$kQ Nt%Xw G2&if*t7*PC Kv &E &E &E Kv Eu vR@Eu vR@$4@<|@[|@<|@<|@<|@Eu vR@<|@[|@:|@:|@:|@[|@:|@:|@:|@[|@[|@<|@<|@sG sG uG uG uG uG uG uG uG ds ds ds ds ds ds ds ds Eu Kv u1$Nt%Nt%u1$Kv Eu vR@WA +W@w! kI@(|@:|@_|@>P mQ >P m$#;P kQ kQ w~$kQ kQ n!$kQ w~$;P lQ %2@dP@$4@vR@vR@vR@$4@<|@[|@vR@vR@vR@$4@$4@$4@$4@EN NK$}g$FB%.1%` &t{%2=$|7$*W#Bb#i[+gi@cp+0r+Mz$cp+4Z+!k#[{#^N#BA#os$(v$Tt$9D#Cr%d)#G4#Fj$l#$eX+eX+U.@ui$Fj$Xk$,b$7G#/ %2W.D)+h/+'(@>/#`R#C[#!f#Vj$<'$LB@(l$Wj$Ts%ji$Ez%^*$xt Du Nv JG%5K%y8&s -mP&[A Rw Rw Rw Rw b|$&E E'$(0@w~$w~$w~$w~$u)$u)$u)$kU%kU%bQ%x~$H)$c.##W@>&$D@$D@$}A cN@}|@1|@~M 1|@1|@_|@_|@_|@_|@_|@_|@_|@(|@(|@(|@_|@_|@_|@_|@:|@t! t! +~ X:@r[@X:@Y:@(7 ]|@(7 /d@ 9 O9 .9 @A@_C@aY X] h] g'#M~ M~ M~ M~ IM@e~ t -u -_l=Ub=yc=;C+$V=tm=It=0w -7 -7 VA iX=Lp=rp=DV&v -<^+3;@<^++T+j(#Q+&Q+&Q+&Q+&Q+&Q+&Q+&CI#w{@Q+&j(#b,+o&=bQ#+9.CI#CI#CI#S`%S`%sX%sX%sX%sX%S`%S`%CI#CI#S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=*r=*r=*r=*r=*r=*r=uG#&r=S`%S`%sX%sX%CI#Q+&sX%&r=uG#&r=S`%CI#S`%&r=&r=sX%S`%CI#CI#S`%sX%&r=sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=sX%sX%sX%S`%S`%sX%w{@j(#Q+&sX%*r=sX%w{@sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=&r=sX%sX%&r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=S`%&r=*r=&r=S`%S`%sX%*r==Z+iM#.X+.X+iM#&b=&b=iM#.X+yE#iM#&b=&b=&b=&b=iM#tq*Fu+Fu+,C+uq*uq*xr*xr*&s*&s*&s*&s*&s*&s*&s*&s*5,+$' $' $' qK+qK+SO+SO+5,+5,+$' $' $' 5,+jM#7' 1.+u!=[f.u!=HV.HV.[f.OP*US+23+OP*x{+x{+x{+OP*OP*iS.iS.iS.iS.iS.iS.iS.iS.y4&oh.7P.Kh+Kh+7P.oh.y4&OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*lt*Ij=W`=H8=X`=w -#~+'!=FG*US+23+y4&iS.~D.zc@8Y+1m.Kh+Kh+7P.7P.7P.7P.oh.oh.oh.oh.oh.oh.oh.oh.", "x5.x5.x5.x5.x5.x5.is@O7.O7.xX%xX%xX%xX%O7.O7.x5.O7.xX%_r+_r+xX%O7.x5.xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.O7.O7.xX%xX%xX%xX%Vh.is@is@x5.O7.xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+N7._r+xX%O7.O7.xX%_r+N7.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.N7.N7.N7.N7.N7.N7.#k.#k.#k.v4.v4.<3+<3+<3+v4.v4.v4.v4.v4.v4.v4.v4.N7.N7.N7.N7.N7.N7.N7.N7.%0+%0+M7.M7.N7.N7.N7.N7.N7.M7.%0+$B#$B#%0+M7.N7.N7.N7.N7.M7.M7.%0+%0+%0+%0+%0+%0+M7.M7.M7.N7.N7.N7.N7.N7.N7.M7.M7.%0+%0+v4.v4.<3+<3+<3+0q.0q.0q.<3+<3+<3+<3+<3+<3+<3+<3+0q.,H.:(+,H.<3+v4.<3+q3.<3+<3+<3+0q.0q.q3.q3.q3.@9.$B#%0+M7.M7.%0+$B#@9.$B#$B#$B#$B#$B#$B#$B#$B#:(+,H.q3.0q.0q.q3.,H.:(+:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.,H.,H.,H.,H.,H.<3+,H.bp.:(+q3.q3.:(++9.bp.:(+q3.0q.0q.q3.:(+bp.,H.,H.,H.,H.,H.,H.,H.,H.bp.bp.:(+,H.,H.,H.:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+,H.0q.u*=<{.3W+&/.Lv&Wb#Lv&3W+}[#q3.$B#4B&4B&4B&ET&Hu+ W=sZ 0J.q4*x -uU=y -uX+z -hj o< n5 >S+Zx*A -^,=wh#:3=16*1:*L>+w}*B -p]+}T$}T$]R@YF@7T@`O@r1&PD@){+D_+GB@GB@D_+D_+GB@GB@GB@GB@'{+'{+'{+$*+j9*)%@)%@)%@j9*j9*n@%n@%f#@f#@(v#(v#T*%T*%T*%2/+D_+g>@fD@-z@#o+&h#CU.MX.h/+h/+@*+@*+@*+@*+@ +@ +V_#V_#V_#V_#A1#A1#A1#A1#Os%Os%Z}&Z}&Z}&A3%y7%y7%0r$Fs%Fs%Fs%/a$&c$&c$&c$Fs%Fs%Fs%Fs%Fs%Fs%Fs%pr%4v$4v$&u$4v$&u$&u$&u$&u$(a$(a$(a$80$80$Q'$Q'$Tj$,L$*6$u_%}|+ov$)_#yp+ 7#Eq@+>#C,+e&@C -o$+D -E -m[+VJ.+K.$Y.B(@Ca+Qp @^+CN En 6, Zr Xr qG e{@%A@GG&F -G -G -H -i*$Vx PC -E es GT E&#{L$`T@09 %6#&1+I -J -K -L -M -N -O -P -Q -R -S -T -U -V -O4$3_+i>#^-#dX#}=%lT$G<%=U=W -X -r -Y -Z -` - .-SO=D:%^l$M9#v)$={#g#@A(@)V.c]@' 2% 9# 1# Pd.@.-#.-$.-%.-&.-*.-=.--.-;.->.-,.-'.-).-!.-EF@3 -g)%~.-U$+3e #S C5 &B$o=*7+5.-g9+6.-r<*g2&l=$>P $4@Pw Mv JG%kP&QC Eu Kv &E u1$u1$&E &E u1$&E Kv Eu vR@vR@Eu Eu Eu vR@$4@<|@<|@$4@$4@vR@[|@[|@<|@$4@$4@$4@$4@tG -! ds ds ds ds ds ds ds ds ds ds ds ds ds ds ds Eu Kv u1$u1$u1$Eu $4@[|@WA kI@!)#QT@YA (|@:|@_|@n$#m$#n$#;P YI$tj%n!$;P n!$kQ w~$k$#~M *0@(V#Nx@%W@^|@(|@:|@[|@<|@[|@[|@$4@$4@$4@$4@$4@$4@$4@EN v+%R@&%@#$h[+(8$<`#I,@W=+Xx$~l$b9$M1#!g$6d$ A$ A$@z$Cr%mn$X}&#(@$1@%1@7^@%1@$1@8@]Y@}A }A cN@cN@1|@1|@l$#+<@2|@(|@(|@(|@(|@(|@(|@(|@_|@_|@_|@_|@(|@(|@(|@(|@+~ W:@+~ X:@r[@X:@W:@(7 ;! ]|@(7 /d@O9 +L@.9 _C@aY X] 5u#d=#z! z! z! M~ i] Z] T`=A! &] yc=;C+;C+6s=b.-c.-d.-q@%fH @GB@fD@$*+fD@$*+$*+4<+4<+4<+4<+3a&3a&3a&3a&]b&]b&]b&]b&2/+2/+2/+CW.PD@o>&3+$fD@#o+CU.MX.V##MX.h/+h/+h/+h/+h/+@*+@*+V_#V_#V_#V_#A1#A1#A1#A1#nF$nF$`}&`}&Z}&Z}&5v$A3%0r$0r$Fs%Fs%/a$&c$&c$&c$Fs%Fs%Fs%Fs%pr%pr%pr%pr%&u$&u$&u$&u$&u$&u$&u$&u$7v$7v$7v$qr%qr%c/$c/$Sj$,L$:8$u_%i~+ov$:f+G$+2V#i}@RA+b=#r|$$iU+:v#EC#h5 O1 Dm Y{$Bu P.-Q.-`x 9E%eB {$&-!*R.-,r&z~&S.-T.-U.-V.-W.-X.-Y.-Z.-`.- +-!%%.+-++-@+-u3*Vw&y! {M (|@X~#%p@]Q#^Y@Eu Kv &E u1$Nt%%B%%B%FD%3C%F'$i!$i!$i!$F'$%B%Eu 6G@^Y@ST@^Y@^Y@+z Qw ]Y@#W@@W@^Y@^Y@^Y@^Y@^Y@}g }g }f }g }f }g }g }g -! -! -! -! -! -! -! -! Fu 'Y$Jv Jv *E -! >b@Z:@_7 T:@G0 V:@>8 H~ Z:@>b@vR@@W@^A &E *L%GJ%E'$%2@!M [g I5@BR@`;$u/@ry@)G U:@(7 WA mt@cN@Tx cB Tx cB Tx v! sG <|@cP@k$#HB$Zf%68%hE%#+-z]%Og% I%j3&!H$%/$BM@5G+zI+2G+7~@[ @YP$/s#b9$Qj$lw$Jc&ps$qs$(m$(m$_m$F[&l#$%1@7^@7^@;($2O#N;$1h$A4#CM#Qy$aX#F!$r!$+B%|6$ZN+$g+Gy$r<+t1$0A%6r Z{$ds j@#v_$no%#}$Az%$+-lP&%+-&+-*+-=+-.z q<$q<$q<$E'$E'$5'$n!$!M !M u)$u)$u)$u)$|F$|F${V%kU%(T%bQ%x~$TT@>8@b~ }A }A cN@:|@_|@1|@+<@Z:@(|@(|@(|@(|@(|@(|@(|@(|@:|@:|@_|@_|@(|@/|@/|@^|@Y:@Y:@W:@X:@>b@r[@W:@]|@;! ;! ]|@/d@ 9 O9 +L@~)#Sk#zy@qd#M~ s7=*~ XE M~ b^ Z] 3o=#]%rf=;C+Qq ;C+Yx&5L=Nr -+-;+-fH iX=>+-Ui*VA ,+-cO@_}.u5.(r+u5.o&=b,+j(#Q+&w{@CI#S`%sX%j(#Q+&w{@CI#sX%&r=*r=uG#sX%&r=&r=&r=*r=*r=uG#uG#&r=sX%CI#w{@w{@CI#sX%&r=sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=*r=*r=*r=*r=*r=*r=*r=&r=S`%sX%uG#N:**r=&r=sX%*r=uG#*r=S`%CI#CI#sX%CI#S`%sX%sX%sX%sX%S`%CI#N:*uG#*r=&r=sX%CI#w{@w{@&r=&r=&r=sX%sX%sX%S`%S`%CI#S`%sX%sX%sX%&r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%*r=&r=S`%CI#CI#S`%&r=*r=sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=&r=&r=S`%S`%S`%S`%S`%S`%S`%S`%S`%&r=*r=&r=S`%S`%sX%*r==Z+iM#/W%.X+&b=l]#&b=yE#.X+yE#&b==Z+dr==Z+l]#&b=&s*&s*xr*xr*xr*xr*xr*uq*uq*uq*uq*uq*uq*uq*uq*uq*SO+qK+qK+5,+jM#mO#k4@IV.k4@mO#jM#5,+$' $' $' ~~@17*x{+[f.US+:{+v]#';$x{+[f.u!=HV.HV.u!=[f.OP*US+oh.oh.oh.oh.oh.oh.oh.oh.y4&oh.7P.Kh+Kh+7P.oh.y4&OP*OP*OP*OP*OP*OP*OP*OP*x{+x{+x{+x{+x{+x{+x{+b=+16.W`=zw*(k=#~+a=+'!=pK+x{+x{+y4&oh.oh.zc@zc@zc@]@+iS.iS.y4&oh.oh.7P.7P.oh.oh.oh.oh.oh.oh.", "is@is@x5.x5.is@is@Vh.x5.x5.x5.O7.xX%_r+_r+_r+x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.xX%xX%xX%xX%O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.is@x5.O7.xX%_r+M7.%0+%0+_r+xX%xX%xX%xX%_r+N7.M7.N7.xX%O7.xX%N7.N7._r+O7.$B#M7.N7.N7.%0+$B#%0+N7.#k.#k.#k.#k.#k.#k.#k.#k.&37@fD@37@3+$Fs=3+$Fs=z^&Fs=z^&z^&6+*>}&>}&>}&>}&>}&>}&>}&lH@lH@lH@QD@QD@ZF@ZF@ZF@3+$3+$3+$3+$g>@-z@1k+&a@&a@CU.CU.CU.MX.MX.MX.MX.~}@g~@V_#V_#V_#V_#Z]$Z]$nF$nF$Os%Os%Z}&Z}&A3%A3%0r$ns$ns$ns$0r$0r$0r$0r$PX#rr%)]$/9$^q$^q$4v$7v$,z*x6*x6*x6*x6*x6*x6*Vf&Vf&Vf&Jd&Is$-u$9v$j3&09$7]+aD#yU#Fj$UK+>P+0m@_R+5q%^o+>[+gi@<{#7F$4d$CM#NX.Nq@q9@8_#x@+O8@NP.2-+[3=Vv l^&_|$M6@K4@V)@Ps$oP%$c${}+ix@fs$g%%FB%SO=(V%{+-]+-^+-/+-(+-_+-:+-<+-JQ$C/+)6*[+-*x$}+-Gp$xJ%|+-1+-2+-3+-4+-5+-6+-7+-8+-9+-0+-a+-b+-c+-!}$*7$d+-e+-f+-f+-g+-h+-jq%i+-j+-Br%k+-l+-*@&Ic=S~&m+-b,=n+-o+-p+-q+-r+-$_ Os iz.;&@lv 3(.s+-t+-*m*u+-*D$v+-w+-x+-y+-z+-A+-B+-C+-D+-E+-F+-(n#G+-#0 ]Z=H+-2n&jQ#D'$Ez%1A Fq&$c*$<*~J%~J%I+-'|*X4*5'$X4*6>&J+-K+-L+-M+-N+-O+-+W%~G%a!&{@$L-$c0&~_#$p Li KE+iH i| mI#Rn&Ko=#] {8@/0@b|$$B%i!$u~$#Q$2h&1(&#/&P+-$/&$/&$/&/;*QO$7G@e.#~A 5`@2`@;&$F=$F=$=;$7i&Ek&U!&-f$7E%#}${A Kv |f tj%G'$n!$E'$F'$%R$4C%%R$WN%WN%/$&{$&bE%Qw +}$Q+-+=*(*${T#/V#}C t/@Rg CD 7V %S ET 7V kl r_$&;$R+-FG&lP&C=$2`@cB :C@.~ jl #9 ep C6 I5 ~V.@(+'8 e{@5G@V~#J3&mn&e2=S+-s7*|Z&`y V^#s[@GT M-%+N$xR#8M@Ap#8%%dU%AB%ux*4w&!_%_^$CO@]K@)K@wp#eX+fX+gX+gX+9e#fX+E@@J #J #K #4G+jX+J #} @gX+}V+eX+yA#]m$rr%Z+$89$L{$tF%ZJ$%u%n6&+3%hs#TL$7E$1i (0@vR@}g }g }g }g }g }g Du PC .y ^G%X!&X!&X!&aC%@D%dB ^G%&E Kv Kv &E Kv $4@}|@R5@R5@R5@R5@R5@R5@R5@R5@(0@R5@$W@%2@||@:|@_|@_|@_|@_|@_|@_|@:|@:|@:|@:|@:|@_|@/|@^|@^|@/|@_|@:|@:|@:|@_|@_|@(|@/|@/|@/|@t! X:@r[@r[@X:@W:@(7 9 /d@/d@ 9 O9 .9 @A@RT@WC@-C+zD ]a hy#Eo=s7=T+-b^ %|$j^*wG jH U+-Sb=V+-xc=Kr ix -+-YY=-7 ;+-hX=DP#p(*W+-Iq.-Z+2w.+T+s4.m3.Q+&b,+bQ#o&=Q+&w{@w{@Q+&j(#j(#Q+&w{@CI#S`%sX%&r=S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%CI#S`%S`%sX%&r=&r=*r=*r=S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%&r=*r=uG#uG#N:*S`%CI#S`%*r=vu#vu#uG#sX%uG#&r=S`%CI#w{@w{@CI#S`%sX%sX%sX%sX%sX%sX%sX%sX%&r=sX%sX%S`%S`%CI#CI#w{@&r=&r=sX%S`%S`%CI#w{@w{@sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%S`%S`%S`%S`%S`%S`%S`%S`%*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%&r=&r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#=Z+1<#1<#1<# X+qK+5,+jM#k4@qK+5,+jM#mO#mO#jM#5,+o)@xE*OP*OP*OP*OP*OP*OP*OP*HV.HV.u!=[f.[f.x{+x{+OP*oh.y4&]@+w5&w5&]@+y4&oh.]@+]@+]@+]@+]@+]@+]@+]@+[f.x{+OP*23+US+US+US+23+US+US+23+23+OP*OP*x{+x{+b=+FG*pK+FG*lt*x{+OP*US+d #';$';$US+23+7P.oh.oh.7P.oh.iS.]@+]@+iS.oh.7P.oh.7P.Kh+G|@G|@Kh+", "is@x5.O7.O7.x5.is@is@O7.O7.O7.O7.xX%xX%xX%xX%x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.O7.O7.O7.xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+xX%xX%xX%_r+_r+_r+N7.N7._r+xX%xX%xX%xX%_r+N7.M7.N7.xX%O7.xX%N7.N7._r+O7.%0+N7._r+N7.%0+%0+M7._r+#k.#k.#k.#k.#k.#k.#k.#k. $U#>;+q^&}U+W9#n%+w{.mb@/z$<3=lB#Z)*cO*cO*;z*PP=;t@}&#vh%rz@37@e*$37@l$+l$+Fs=Fs=Fs=Fs=K4=Fs=Fs=6+*6+*6+*6+*6+*6+*6+*6+*LA$LA$LA$9]&9]&9]&l%+l%+o>&o>&o>&o>&3+$fD@-z@)m+)m+)m+1k+1k+&a@&a@Ne@Ne@g~@g~@V_#V_#Yx%Yx%4V+4V+nF$Os%Os%Os%Z}&A3%A3%A3%N@%N@%N@%N@%Fs%Fs%Fs%Fs%PX#sD$(a$^q$^q$^q$&u$7v$,z*,z*x6*x6*x6*x6*x6*Vf&Le&Jd&Is$-u$0v$1=&!]$4($7o@aD#[|$S;+cz@H4@V.+V.+^T+kI+f>$y)+&6$'M$c/$M[#f&@zA*F>#D>#AT& @-H4*,4*dr#q$&aI#77@^l$=-#GB$GB$&{#&{#D:%iT$&i#IS$.@-l)%+@-@@-#@-$@-%@-&@-*@-10%=@-Ye%}@%5M%-@-n3#2n*Ko*;@->@-,@-'@-@^=)@-!@-~@-{@-]@-^@-/@-(@-_@-:@-gk+.4=>h&<@-a)#Ql&2z@j<@,'%L4=[@-ed@}@-UB%di%|@-1@-lF.7/$2@-3@-v3+4@-/9.c7*5@-BV.6@-7@-&,.8@-9@-0@-a@-b@-c@-d@-e@-f@-g@-h@-i@-j@-k@-l@-m@-n@-o@-k-.]Z=~r*p@-Ug=b1%Vv%vo@q@-wg&KR%-5%@I$+I$]V%4Q%1C%]V%4Q%#F%#F%ih*s(*Nf*l_*FD%Vy&M[*Xw Cu cs 0> :g S: ={ TD@]a ]G ^a %*&r@-0q#Nx@EN#Ox@1M#WT@zR@XN%jP%Wc*s@-A)*'S t@-u@-OO%VH%8>&ky%t)&X!&*B%Qv&*z kU&7V$b$$6A&aC%G2&cC%Fu 5'$tj%#B%tj%n!$n!$Lv%2C%3C%i!$Oz$~ $NA$S&&XR%}A I%$v@-w@-@X#.l -h@|-@%y PM.CJ.W4++/@OM.n8 p<+If QH%x@-y@-Iy&rl&bB Yk@hB Dn B6 ,[ v7 H`+%P g +.p $y CN xt 5r i.##$$z@-A@-B@-YW&v_${a +x+g>#!G%$l+~Q#tD$E3$# +eU%1=&Of%4:%os*j#$Tm#DO@!K@jX+4Z+M+#fX+fX+jX+jX+)K@RQ@RQ@RQ@!K@qZ@pZ@9e#_P+*6$L1#-c$A3%L{$c]%<>%7r$LG%f+&{j%OX$8{%r)$kQ b|$Rw 7)*@D%Qw Kv Kv Kv Kv Kv Kv Kv u1$u1$Nt%GJ%Nt%u1$Kv Eu u1$&E Kv Kv &E &E vR@[|@vR@vR@vR@vR@vR@vR@vR@vR@vR@vR@$4@<|@[|@:|@_|@_|@:|@_|@_|@_|@_|@_|@_|@_|@:|@_|@/|@^|@^|@/|@_|@:|@/|@/|@/|@^|@^|@@~ @~ @~ W:@+~ t! t! +~ ;! 9 +L@/d@/d@ 9 O9 .9 @A@RT@WC@AD a|%ze=Eo=Eo=Eo=%|$T+-%|$sK$wG [,%Ir C@-V+-xc=Kr -+-d.-qu=D@-E@-hX=DP#hV=F@-:^+$$+<^++T+C6.C6.w{@j(#b,+b,+w{@CI#CI#w{@j(#Q+&Q+&w{@CI#S`%sX%sX%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=sX%sX%N:**r=&r=&r=*r=*r=S`%Q+&uG#*r=sX%S`%S`%S`%&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=&r=&r=sX%sX%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%&r=&r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#=Z+xr*qK+SO+SO+SO+qK+$' $' $' 5,+jM#mO#mO#jM#5,+~~@xE*OP*OP*OP*OP*OP*OP*OP*[f.[f.[f.x{+x{+x{+x{+x{+oh.y4&iS.]@+]@+iS.y4&oh.iS.iS.iS.iS.iS.iS.iS.iS.[f.[f.OP*23+23+23+23+OP*US+US+23+23+OP*OP*x{+x{+x{+23+US+23+OP*x{+OP*US+US+US+23+23+23+23+OP*OP*oh.oh.y4&y4&y4&y4&oh.oh.7P.7P.G|@T_+T_+G|@", "x5.O7.xX%xX%O7.x5.x5.xX%xX%xX%xX%O7.O7.O7.O7.x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.x5.is@x5.xX%N7.M7._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7._r+xX%xX%xX%O7._r+xX%xX%xX%xX%_r+N7.M7.N7.xX%O7.xX%N7.N7._r+O7.M7._r+xX%xX%N7.M7.N7.xX%#k.#k.#k.#k.#k.#k.#k.#k.&3+$fD@-z@fD@fD@-z@)m+1k+Ne@Ne@P@@Y{@g~@g~@~}@QB$QB$0/$0/$a/$a/$9v%9v%9v%C/%A3%A3%k %3)#k %k %k %k %/a$/a$rr%sD$)]$pr%^q$4v$4v$(a$^q$^q$p4&p4&p4&p4&p4&8k&*u$=u$=u$VR$j3&7G$7G$bv$2h$CA#_/#C,+H4@kI+Z=+c$@>*@Kd$r8+fX@&6$'p$vy+Ei$N[#2z@*1@2W.s[$r>#Bg%9-#%N@l>#vc@/)&k>#MJ@F[#F[#Fi$w[# .@Lt$tF%)M$`R$FJ%J@-ER$&h$K@-#9%GT+mN+tZ+8b#89#8@%L@-M@-;<*n2*N@-O@-P@-Q@-R@-S@-T@-U@-V@-W@-X@-Y@-Z@-`@- #-.#-+#-@#-##-fP%$#-%#-&#-*#-=#--#-;#->#-,#-'#-)#-!#-s+-~#- J {#-]#-^#-w4*^m%/#-(#-_#-:#-<#-[#-j=*}#-u+-|#-1#-2#-3#-4#-5#-5#-6#-7#-8#-9#-0#-a#-b#-c#-gm 7O*+< V% Zb&y2$=A&wr$92*d3&NP=q@-mr&$]*.,*l}*0d*Q9*PF&d/*O=&OP=d#-P9*xv&zZ=e#-Y4*pM%|N%Fq&Na*$a*Uv%I!$wt$,f%f#-g#-h#-i#-/,$Sk#c0&y! 8K#M%$9'$kF%lF%GL$j#-k#-l#-m#-f -.Y=DN j.$0> uG cP@<|@!8@'8@Fy$-8@]8@_|@es xt Rx@[f )M 4z+4z+Jt$3h CR@(J$!M tj%n!$w~$R5@w~$R5@lQ `:@ut St&-h@_Y@J4@$8@['$`M$o=$|6$L@%|6$RP.sX+GW.Aa++~ xW$_E$Iz ;! Sr @9 XC%=K.1} OI GZ.g+%n#-%`.,I@E(@Tk$36$@L@j.$ip 0s 0>&zu Dm 'J ji$es$${@Ks&Th%fh$O:+56+3V+`H%X&&Co&Nm&!j%O&$7$@G@@R)@5$@U.@D@@eX+eX+wp#wp#5$@>K@V.@5Z+zM@lF$c9$&6$k~+p=#1r$/a$)Q#)M$8r$<0#5[*0<*-a&6:%kT$1F$~@$|f $B%TH%=z 0C%gB u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%u1$&E Kv Eu &E Eu Eu Kv u1$u1$Eu $4@$4@$4@$4@$4@$4@$4@$4@$4@<|@<|@<|@[|@:|@_|@(|@(|@:|@:|@_|@_|@(|@/|@/|@^|@_|@(|@/|@/|@/|@/|@(|@_|@@~ @~ WA WA WA YA YA YA ;! Y:@W:@W:@;! (7 O9 .9 (7 /d@ 9 O9 .9 @A@RT@A&#X] pI#hy#XE XE hy#XE s7=s7=j^*qf=jH /s=Sb=^} o#-Kr o_*Nr 0w C-.uj*(B=(B=p#-Hc@[v.$$+ 9.[(+C6.s4.CI#Q+&j(#Q+&S`%sX%S`%w{@Q+&Q+&w{@w{@CI#S`%sX%sX%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%&r=&r=&r=S`%S`%S`%S`%S`%S`%S`%S`%*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=&r=&r=*r=*r=&r=sX%S`%CI#CI#w{@N:**r=S`%CI#S`%sX%S`%w{@*r=&r=&r=sX%&r=*r=uG#uG#sX%sX%sX%sX%sX%sX%sX%sX%uG#*r=*r=*r=&r=&r=&r=&r=w{@CI#CI#S`%sX%&r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=&r=&r=*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%&r=&r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#=Z+wr*jM#5,+qK+SO+ X+ X+ X+$' 5,+jM#jM#jM#jM#5,+~~@xE*OP*OP*OP*OP*OP*OP*OP*23+OP*OP*OP*OP*x{+x{+x{+7P.oh.y4&y4&y4&y4&oh.7P.oh.oh.oh.oh.oh.oh.oh.oh.u!=[f.x{+OP*OP*OP*OP*x{+23+23+23+23+OP*OP*OP*OP*x{+23+US+23+OP*x{+OP*US+x{+x{+OP*OP*OP*OP*23+23+y4&y4&oh.7P.7P.oh.y4&y4&y4&oh.oh.7P.7P.oh.", "O7.xX%_r+_r+xX%O7.O7._r+_r+_r+xX%O7.x5.x5.x5.x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.is@is@is@xX%N7.%0+O7.O7.O7.O7.O7.O7.O7.O7.N7.N7._r+_r+_r+xX%xX%xX%_r+xX%xX%xX%xX%_r+N7.M7.N7.xX%O7.xX%N7.N7._r+O7.N7.xX%O7.xX%N7.N7._r+O7.#k.#k.#k.#k.#k.#k.#k.#k.#k.#k.#k.v4.v4.v4.<3+<3+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7._r+N7.%0+$B#$B#%0+N7._r+N7.N7.N7.N7.N7.N7.N7.N7.$B#M7._r+N7.%0+$B#M7._r+'Z%)Z%%0+N7._r+N7.%0+$B#$B#$B#%0+%0+%0+%0+$B#$B#$B#eO@)Z%eO@%0+M7.%0+$B#q3.q3.q3.q3.q3.q3.q3.q3.<3+<3+0q.0q.q3.q3.,H.,H.eO@eO@eO@eO@eO@eO@eO@eO@M7.%0+%0+$B#@9.eO@eO@)Z%,H.,H.,H.,H.,H.,H.,H.,H.v4.:(+bp.<3+#k.0q.,H.q3.,H.,H.q3.q3.,H.,H.,H.q3.,H.,H.:(+bp.bp.bp.:(+,H.+9.bp.bp.:(+,H.,H.,H.,H.q3.,H.bp.:(+q3.0q.q3.:(+&3+$g>@g>@fD@-z@)m+&a@P@@8G#8G#>9@Y{@g~@~}@QB$0/$OX#zx$tp%tp%9v%9v%C/%C/%A3%C/%+B$+B$|0#|0#|0#|0#&c$&c$sD$sD$)]$)]$4v$4v$4v$4v$/9$/9$/9$^q$^q$^q$^q$p4&qr%}0$}0$K$+O#%`H%@6$90$2h$DA#e'#C,+, +Q@+P8%Qb+Ee@_/+r8+u_%$*$dN#`]$j %-c$x4#8]+7P#_-+YJ#s[$#*++x@,{+,{+O$+:'$:'$6W.6W.`X.jZ.,a&/ +}q%Gm$mn=|K&JQ$MY$VX+~'+=#@u#-2A#4e#;-%v#-)#$w#-Eh*W}=x#-Rg*y#-Rg*z#-A#-B#-C#-D#-E#-F#-G#-dZ%2r*dZ% b*H#-I#-J#-K#-L#-M#-N#-^3*Wl*O#-P#-Q#-R#-S#-T#-U#-V#-W#-X#-B5+Y#-Y#-Z#-`#- $-.$-+$-@$-#$-$$-.m*%$-&$-*$-=$--$-;$->$-,$-'$-)$-!$-~$-{$-]$-^$-/$-($-v2.j@@$h.z#.j; )x#N6@K1*~(@wr$/x%^x%g9*A'*k}*]x% w%(x%X;*k}*g9*/x%Va&_$-_$-C/*$<*F|*5>&Y;$`I$:$-=A&,:*>b*h9*Wi*fU$&`$Zu&<$-nU=(a .x+ u%va#va#H%&Xl={3= d& d&r<*[$-}$-|$-1$-2$-vC$~}+~}+;@#wt$o5=3Q%3Q%+d&wT%P-$M-%u[$n'%Pz${}+g>#.-#g>#])#Y^#m>@;@#I!$])#])#])#])#])#])#^)#|-@P5@cj j1$P&#-[@[a$g0$l %'G%sx$uD$2I.vc=gT.ER.(>$*C+BR@3h {L$C;$ (+BL.8Y.{N.U2@=e=y5&b++^**[-@/B+TO$,,$[=%+{#p~$&@&hq$Q+#M4$Qs$n1#[=%}=%!q$|I.(,%N$+6)#k[+~}%j3&7&xW=;x%ey%+Q$|u%G'$FD%9C%RL%8C%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Kv Eu vR@vR@Eu &E u1$Kv $4@[|@[|@[|@[|@[|@[|@[|@[|@[|@:|@:|@_|@_|@(|@(|@/|@[|@:|@_|@(|@/|@^|@@~ WA (|@/|@/|@/|@/|@/|@/|@(|@WA WA WA WA WA YA YA YA Y:@Y:@Y:@Y:@;! (7 9 O9 ]|@(7 /d@O9 .9 RT@bP@z&#m] g'#z! *~ z! M~ z! *~ IM@iH u -_l=Ub=;C+3$-Mr U`=Nr 0w d.-4$-;+-Ui*Lp=5$-@g>@3+$3+$o>&o>&<-@<-@<-@)]=)]=)]=)]=<-@o>&3+$fD@fD@-z@1k+Ne@P@@8G#HK#DU.DU.Y{@g~@qX+mF$OX#OX#4V+4V+4V+4V+C/%C/%C/%C/%+B$+B$+B$+B$|0#|0#|0#|0#&c$&c$sD$)]$)]$pr%4v$/9$Fs%Fs%Fs%pr%pr%pr%pr%4v$80$c/$c/$c/$c/$O#%O#%=k$qw${^#7V@VK+$t@'}@3a@2]+EM#7a@J:+@#$e;%.3%*W#08$Rj$,p$J3$'M$Tj$!U#6c#7)#1|+7)#DA$DA$l+&l+&ER$ER$b$-b$-c$-7x%d$-e$-f$-TM$|I&g$-QG+cp#JQ@[=#$9$h$-h*%aZ@p3#3@%i$-i$-j$-k$-l$-m$-n$-o$-p$-Eh*q$-p$-`d%$&>$&>$uo@O&#-($We%*%-ww%]4*a<*[0#`k#CB$ZX.O4$'`+P-+Hc=M]+=i#f+&h+%`m+a#&JG.I-+)x==%-DR.4<+C2&k%+w}*j%+q1@&h#+v@M~$3r$[a$}_$lI%lI%'&*{[%i^&oC${-#3F${f#/k#9>+H!#||+2S#@d$Ls$~J$CU$7$@8#%8&@8$@cB@w;@wp#'I$6h$|l&8^@oi$l#$7V@gX@:8$J3$j %6c#M$+:'$EU.cv$!U+-W+&v$sy%sZ=-%-|}*;%-;x%|:&$|$gy%tj%G'$FD%9C%8C%8C%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv Kv vR@$4@<|@vR@Kv Kv vR@<|@:|@:|@:|@:|@:|@:|@:|@:|@(|@(|@(|@(|@/|@/|@/|@/|@:|@_|@(|@/|@^|@@~ WA YA ^|@/|@/|@/|@/|@/|@/|@^|@@~ @~ @~ @~ @~ @~ ^|@^|@+~ +~ +~ W:@Y:@;! ]|@]|@]|@(7 /d@O9 .9 RT@bP@uR@WH )G 7C&7C&W##)G 7C&j| Wp&k| wu&st&9C=cn=_m=Rq=qu=Nr 0w -+-C-.gX=|q=hV=.f*w{@1w.):.+T++T+C6.k3.CI#w{@w{@S`%*r=*r=sX%CI#w{@w{@w{@CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%&r=&r=&r=S`%S`%S`%S`%S`%S`%S`%S`%*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=&r=&r=sX%S`%S`%CI#*r=*r=*r=*r=*r=*r=*r=*r=CI#CI#CI#S`%S`%sX%sX%sX%sX%CI#j(#j(#CI#&r=*r=*r=w{@CI#S`%S`%sX%&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%S`%S`%S`%S`%sX%sX%sX%sX%*r=*r=&r=&r=sX%sX%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%&r=&r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#=Z+=^@5,+$' qK+qK+$' $' 5,+jM#5,+5,+5,+5,+5,+5,+-x#xE*OP*OP*OP*OP*OP*OP*OP*US+US+US+23+OP*OP*x{+x{+oh.oh.7P.7P.7P.7P.oh.oh.y4&y4&y4&y4&y4&y4&y4&y4&x{+x{+OP*OP*OP*OP*x{+[f.OP*OP*OP*OP*23+23+23+23+x{+23+US+23+OP*x{+OP*US+u!=[f.[f.x{+OP*OP*23+23+y4&oh.Kh+G|@G|@Kh+oh.y4&y4&y4&iS.iS.iS.iS.", "x5.O7.xX%xX%O7.x5.x5.xX%xX%xX%xX%O7.O7.O7.O7.x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.O7.M7.M7.M7.M7.M7.M7.M7.M7.O7.xX%xX%xX%_r+N7.N7.N7._r+xX%xX%xX%xX%_r+N7.M7.N7.xX%O7.xX%N7.N7._r+O7.M7._r+xX%xX%N7.M7.N7.xX%#k.#k.#k.#k.#k.#k.#k.#k.#k.v4.v4.v4.<3+<3+0q.0q.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7._r+N7.%0+$B#$B#%0+N7._r+M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+%0+%0+%0+%0+%0+@9.$B#%0+M7.M7.%0+$B#eO@M7.%0+$B#@9.@9.$B#%0+M7.M7.$B#@9.%0+N7.xX%_r+M7.q3.q3.q3.q3.q3.q3.q3.q3.<3+<3+0q.0q.q3.q3.,H.,H.@9.@9.@9.@9.@9.@9.@9.@9.eO@eO@eO@@9.@9.@9.@9.@9.,H.,H.,H.,H.,H.,H.,H.,H.<3+bp.bp.<3+v4.q3.:(+,H.0q.,H.:(+:(+q3.0q.q3.:(+:(+:(+bp.bp.bp.:(+,H.q3.,H.:(+:(+bp.:(+,H.q3.0q.<3+q3.:(+:(+q3.q3.,H.bp.<3+q3.:(+:(+,H.q3.,H.:(+:(+:(+,H.,H.,H.q3.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.0q.q3.,H.:(+bp.+9.bQ#bQ#<3+0q.q3.,H.:(+:(+:(+u4.I1.^U=WN.X+-o4@zH.d1*n2.L3.Bo=_-=|! >%-.q ,%-}_@'%-)%-@~*!%-hF+8K+Ye.E*+e1&mb@=2*rq=FB@m>&P{*P{*)>+`|#q1@`|#G~++x@`|#:B@`|#`|#`|#`|#`|#`|#OD@`|#:X@fD@fD@fD@fD@fD@fD@fD@g>@g>@g>@3+$3+$o>&o>&o>&o>&<-@)]=)]=)]=<-@o>&o>&fD@fD@-z@)m+1k+Ne@Ne@P@@DU.DU.Y{@Y{@g~@~}@Yx%QB$A1#A1#A1#A1#C/%C/%C/%9v%3)#3)#3)#3)#k %k %k %k %/a$/a$sD$sD$sD$pr%^q$/9$N@%N@%N@%N@%Fs%Fs%Fs%pr%sD$sD$80$80$Q'$Q'$c/$Sj$$*$hX+fX+4G+3]+3a@$5@$5@6q%kK@Sx#w-$27$Z5%U@+O#%%K$,p$qw$@d$>b$ar$po%3V+po%K#$U@+#6$~%-{%-]%-^%-/%-(%-_%-:%-2K&<%-|N&qR&[%-o>=}%-ES#)c@k8*8x%M1$V.%v %j*&|%-#l*1%-2%-3%-4%-5%-6%-7%-$G%[d%[d%s0%8%-~b%9%-4z$0%-a%-b%-gK$wJ$Ff%c%-d%-e%-ZX%f%-2f*g%-h%-i%-j%-k%-l%-m%-n%-o%-p%-q%-8r*zp*r%-Sc*s%-t%-0n*u%-v%-c@-w%-x%-y%-f@-z%-'$-A%-B%-C%-D%-E%-F%-G%-H%-I%-J%-K%-8@-y5+L%- Iw&N%-Na*O%-Ux&ii*07$Ca+HM@A9#lX%>f#in$h2*,l*5a*#h*|}*^<%CT$80&P%-}.%a^&Q%-y/%aA%~U+T2*R%-S%-T%-U%-V%-W%-X%-Y%-Y%-Z%-`%-D1&yU% &-=g%.&-+&-@&-#&-$&-:(&:(&%U=Vt&E:%E:%aE$Mu#67@Or#67@tz#B.+7M@$`.&/#%&-%,&&&-/;$m4$%,&*&-XY=g+-W_=KB$&W#sD$]B+Y)%WS&WS&Y)%8T+8)*=&-Bz& l#I6%GU.-&-;&->&-,&-h'+o~+3N%IC${P#6T@Z|#13@1p#$>#2_+L6@4O#%N$'&-@<%)&-Ar%!&-24%&J$iA%g~@5W.j|#1|+ *+'p$,L$b8$WL$AM@SQ@6&@^K@mq@k#$,T@kX+8=@U.@pi$|l&%(@Fj$yA#zA#,b$7F$m~+5Z.']$7%%B[#Th%6O#K_#&l+/G%C:*($%h4&~&-9[*@B%kh$fy%|g$YI$|f %B%$B%TH%9C%u1$u1$u1$u1$u1$u1$u1$u1$Nt%u1$&E Kv Eu Eu Kv Kv $4@[|@[|@<|@vR@vR@[|@_|@_|@_|@_|@_|@_|@_|@_|@_|@^|@^|@^|@^|@^|@^|@^|@^|@(|@/|@/|@^|@@~ @~ WA WA @~ ^|@/|@/|@/|@/|@^|@@~ ^|@^|@^|@^|@/|@/|@/|@(|@X:@t! t! +~ +~ W:@W:@W:@;! ]|@/d@O9 .9 RT@uR@[`@Cv@Y=#(d Z=#)1 Y=#)d@ir#TE 85*(u ^T#_u k`&ll={l=Nr d.-o_*ix {&-3($,G RE Ie*]&-43+sQ@r4.s4.}o=k3.w{@w{@w{@sX%*r=*r=sX%w{@w{@CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=&r=&r=w{@CI#CI#S`%sX%&r=*r=*r=N:**r=S`%CI#S`%sX%S`%w{@w{@CI#S`%sX%sX%sX%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%CI#CI#CI#S`%S`%S`%sX%sX%uG#uG#*r=&r=sX%sX%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=&r=&r=*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%&r=&r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#=Z+xr*$' qK+qK+$' 5,+jM#mO#jM#jM#5,+$' $' 5,+jM#-x#xE*OP*OP*OP*OP*OP*OP*OP*23+OP*OP*OP*OP*x{+x{+x{+y4&y4&oh.7P.7P.oh.y4&y4&y4&y4&y4&y4&y4&y4&y4&y4&23+23+US+US+23+23+x{+x{+OP*OP*OP*OP*23+23+23+23+x{+23+US+23+OP*x{+OP*US+x{+x{+OP*OP*OP*OP*23+23+oh.7P.Kh+Kh+Kh+Kh+7P.oh.T_+G|@Kh+Kh+Kh+Kh+", "is@x5.O7.O7.x5.is@is@O7.O7.O7.O7.xX%xX%xX%xX%x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%O7.xX%N7.N7._r+O7.is@dD.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7._r+_r+_r+xX%xX%xX%_r+xX%xX%xX%xX%_r+N7.M7.N7.xX%O7.xX%N7.N7._r+O7.%0+N7._r+N7.%0+%0+M7._r+#k.#k.#k.#k.#k.#k.#k.#k.v4.v4.v4.<3+<3+0q.0q.0q._r+_r+_r+_r+_r+_r+_r+_r+M7.M7.M7.M7.M7.M7.M7.M7._r+N7.%0+$B#$B#%0+N7._r+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+$B#$B#%0+%0+%0+$B#N7.M7.M7.%0+$B#@9.@9.eO@M7.%0+$B#@9.@9.$B#%0+M7.M7.$B#@9.$B#M7.N7.M7.$B#q3.q3.q3.q3.q3.q3.q3.q3.<3+<3+0q.0q.q3.q3.,H.,H.$B#$B#$B#$B#$B#$B#$B#$B#,X@,X@)Z%eO@@9.@9.$B#$B#,H.,H.,H.,H.,H.,H.,H.,H.0q.+9.+9.q3.<3+,H.bp.:(+0q.,H.bp.:(+0q.<3+q3.bp.:(+bp.bp.bp.bp.:(+q3.q3.q3.,H.:(+:(+:(+q3.0q.v4.<3+q3.:(+,H.q3.q3.:(++9.,H.:(+bp.,H.0q.<3+q3.:(+:(+:(+:(+,H.q3.q3.q3.0q.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.0q.0q.q3.,H.:(+:(+bp.bp.0q.q3.,H.:(+:(+:(+,H.N7+#:+86=WN.X+-o4@zH.q[*41.:%=r6*^&-{+$F^$/&-(&-.q _&-:&-H@-<&-35 ZC+9K+0] 1V Xz*^**m%+|r$`O@sH&q=#ja@GB@PD@){+M/+A:&M/+Wx#es#es#es#es#es#es#y(#es#:X@:X@:X@:X@:X@:X@:X@:X@[-+[-+[-+[-+q=#q=#sH&sH&3+$o>&<-@<-@<-@<-@o>&3+$3+$g>@g>@fD@fD@-z@-z@)m+DU.DU.DU.DU.Y{@Y{@Y{@Y{@']$']$Z]$A1#4V+4V+C/%9v%wy+R2@wy+wy+wy+wy+N@%N@%Fs%/a$&c$km$sD$)]$/9$&W#3)#3)#3)#3)#k %k %k %/a$&c$&c$sD$sD$)]$)]$(a$]m$37$WK+4G+;K@__+d1@W}+4~@{-@7a@J:+-,$ ^$Z5%0$$po%Rj$09$09$>b$*u$&u$c/$K#$}0$17$bK%.b$[&-av*}&-|&-1&-1&-2&-3&-4&-5&-6&-9`$7&-iE*F]$x|#.9@q0$+4$j-%s#%8&-9&-N~*0&-a&-b&-P>&c&-d&-e&-f&-g&-h&-i&-j&-k&-l&-m&-n&-o&-p&-q&-Ow$49%yq%r&-s&-t&-u&-v&-w&-x&-y&-z&-A&-B&-C&-D&-E&-F&-G&-H&-I&-J&-K&-L&-M&-N&-=$--$-O&-y%-P&-Q&-R&-S&-)$-T&-U&-C%-Kh%V&-W&-X&-~5*Y&-H^*Z&-u%-`&- *-.*--n +*-T .QY XU .|$w(#@*-#*-(&-$*-Z' Id Ic a; %*-PX=E;@9~%BJ.f_@Zj rr*&*-**-=*-5@@5e+Z>%hf*-*-;*-XH$;{#>v$/h&<(&@v&/h&>*-[ %ZJ$V,%xj*Lg%,*-Dh&'*-'*-'*-)*-!*-!*-~*-!*-{*-]*-^*-/*-/+-(*-_*-:*-<*-[*-}*-!c%|*-1*-{V&2*-3*--g$4*-4*--g$:h$Xg=e2$N0@o(=i+-~[%o(=aY#5*-Z[&(-+=k$90$+l#ID+nz@r_+N[+^<+M[+ko&mz@Zr&=!+B]+N.+$ +5:@% &6*-7*-MX%I~+3V+He@He@ca@fm@[3@.h+u4#[f+_v@[6$A0%N@%J!*8*-*o%9*-e.%Ts@wy+B%%> $I3$po%Sj$,L$L1#[{#8e#zM@>K@,T@,T@x;@,T@RQ@X>%IO$lZ@oi$ 17*xE*U*@xE*J> J> J> 17*17*17*17*xE*xE*Kh+Kh+7P.7P.7P.7P.Kh+Kh+T_+G|@Kh+7P.7P.Kh+", "is@is@x5.x5.is@is@Vh.x5.x5.x5.O7.xX%_r+_r+_r+x5.x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%O7._r+M7.%0+M7.O7.dD.3o._r+_r+_r+_r+_r+_r+_r+_r+%0+%0+M7._r+xX%O7.x5.is@_r+xX%xX%xX%xX%_r+N7.M7.N7.xX%O7.xX%N7.N7._r+O7.$B#M7.N7.N7.%0+$B#%0+N7.#k.#k.#k.#k.#k.#k.#k.#k.v4.v4.<3+<3+<3+0q.0q.0q._r+_r+_r+_r+_r+_r+_r+_r+M7.M7.M7.M7.M7.M7.M7.M7._r+N7.%0+$B#$B#%0+N7._r+$B#$B#$B#$B#$B#$B#$B#$B#%0+$B#$B#$B#%0+%0+%0+$B#xX%_r+M7.$B#@9.eO@eO@eO@M7.%0+$B#@9.@9.$B#%0+M7.%0+@9.eO@eO@$B#%0+$B#eO@q3.q3.q3.q3.q3.q3.q3.q3.<3+<3+0q.0q.q3.q3.,H.,H.%0+%0+%0+%0+%0+%0+%0+%0+'Z%'Z%,X@)Z%@9.$B#%0+M7.,H.,H.,H.,H.,H.,H.,H.,H.q3.bQ#bQ#q3.<3+:(++9.bp.0q.,H.bp.:(+0q.<3+q3.bp.bp.bp.bp.bp.bp.,H.q3.0q.0q.q3.,H.,H.,H.0q.<3+#k.<3+q3.:(+,H.q3.q3.:(++9.bp.+9.bp.q3.v4.v4.q3.bp.:(+:(+:(+,H.q3.q3.0q.0q.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.0q.0q.0q.0q.q3.q3.q3.,H.q3.q3.,H.:(+:(+,H.q3.N7+#:+6J.WN.]U=$Z*qt+q[*q[*&9]&lH@Eb#sz@GB@PD@r1&){+M/+A:&M/+es#es#es#es#y(#y(#y(#es#G~+:X@:X@:X@:X@:X@:X@:X@:X@[-+[-+[-+q=#q=#sH&sH&g>@3+$o>&<-@<-@o>&o>&3+$o>&o>&o>&o>&o>&3+$3+$3+$DU.DU.DU.DU.87$87$87$87$O:+']$Z]$A1#A1#4V+C/%tp%]v$]v$4w+4w+4w+4w+ns$ns$Fs%/a$&c$km$sD$)]$/9$&W#3)#9Z+3)#3)#3)#3)#k %k %/a$/a$/a$/a$)]$pr%pr%ln$Rb$jF$6G+BD+^3@cw+m<@/T+U}+yp+or&iF$Rb$S4$0$$KG%po%,Z#po%(a$^q$^q$(a$po%8v$VR$!]$(^$Co&tg%h*-i*-bu%bu%=w%j*-k*-M.%%@%l*-+F*f4*o{$x|#*'$Gu$:T$C#%jZ%q6%'S*m*-n*-o*-y=&p*-q*-r*-s*-#a%t*-u*-v*-w*-x*-y*-z*-x*-A*-B*-C*-D*-E*- 0%Lr%Bf%F*-G*-H*-I*-J*-K*-L*-Vg%M*-N*-O*-P*-Q*-R*-S*-T*-U*-V*->$-g@-P$-W*-X*-Q$-Q&-Y*-Z*-`*- =-=E$.=-+=- V%@=-M %#=-$=-%=-o0*&=-*=-Z&-==--=-;=->=-,=-o#+'=-F.@9G@)=-E$$}) 9F#]| !=-2!$b%$vd#|H#}) )y BQ+HK%k++c:&~=-{=-]=-^=-uT./=-=[@m4#(=-%X#ER.:p=_=-0#+z>+:=-<=-[=-AW.fd=U]+e'+3%+}=-|=-1=-aq+2=-3=-4=-5=-6=-6=-7=-8=-9=-0=-`a%a=-b=-c=-d=-e=-f=-Rw+g=-h=-O_*}u%ts%i=-7[*12+$qQ#=t@.3%'M$>H$n=-o=-+'%m~+B)+''%p=#N)$,p$a8$ow$Qj$Qm#Xx$8e#jX+>K@]K@RQ@R)@)K@K #_/%@2%R[#zA#a=#8D#9D#Oe$Wy$C4#8o@0/$5V+`+$b]@%l+PQ$HB$R5@Qw .y !J >&&$5$$5$6r 6r H%$H%$Y;$Z;$(0@R5@c.#q<$d.#b|$Kv Kv Kv Kv Kv Kv Kv Kv Nt%u1$Kv vR@vR@vR@Eu Kv <|@:|@_|@_|@:|@_|@^|@YA /|@/|@/|@/|@/|@/|@/|@/|@WA WA WA WA @~ @~ @~ @~ WA WA WA WA @~ @~ @~ @~ WA @~ /|@(|@(|@/|@@~ WA WA WA @~ ^|@^|@/|@/|@(|@t! t! +~ W:@W:@W:@+~ +~ Y:@;! (7 O9 .9 bP@[`@b.#Ag#Ed#JN#JN#JN#&3#:s=hh*Vi*7N=E,#UN=aO=g3*MQ=GA=;+--+-p=-q=-C-.sq=xD '}*bQ##_.g|.u4.<^+l3.6J.`8.j(#j(#Q+&S`%*r=&r=CI#j(#CI#CI#CI#CI#CI#w{@w{@w{@S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%&r=&r=&r=uG#uG#uG#uG#uG#uG#uG#uG#*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%CI#S`%S`%sX%&r=&r=*r=*r=S`%S`%S`%S`%S`%S`%S`%S`%N:*uG#uG#*r=&r=sX%sX%sX%S`%CI#S`%*r=vu#vu#uG#sX%&r=*r=uG#N:*uG#&r=S`%CI#sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%&r=*r=*r=uG#uG#S`%sX%sX%&r=*r=uG#uG#N:*sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%S`%S`%S`%S`%S`%S`%S`%S`%*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%&r=&r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#=Z+=^@jM#5,+$' $' 5,+5,+jM#mO#jM#5,+qK+qK+5,+jM#7' xE*OP*OP*OP*OP*OP*OP*OP*HV.HV.u!=[f.[f.x{+x{+OP*HV.u!=x{+OP*OP*x{+u!=HV.US+US+US+US+US+US+US+US+d #d #d #d #d #US+23+OP*x{+x{+OP*OP*23+23+US+US+U*@17*J> 17*xE*U*@xE*J> nh.zi.zi.J> 17*17*xE*xE*T_+G|@7P.oh.oh.7P.G|@T_+7P.oh.y4&]@+]@+y4&", "xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.O7.O7._r+_r+_r+xX%O7.O7.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.xX%xX%N7.%0+$B#@9._r+_r+_r+_r+_r+_r+_r+_r+is@xX%_r+_r+xX%xX%N7.%0+M7.N7.xX%O7.O7.xX%N7.M7.%0+M7.N7._r+xX%O7.x5.x5._r+N7.%0+M7._r+xX%N7.M7.v4.v4.v4.v4.v4.v4.v4.v4.#k.v4.v4.<3+<3+v4.v4.#k.N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.N7.N7.N7.N7.N7.N7.$B#%0+N7._r+_r+N7.%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.@9.)Z%,X@eO@%0+M7.%0+$B#@9.@9.@9.@9.@9.@9.@9.@9.:(+,H.,H.bp.bQ#bQ#:(+0q.,H.,H.,H.,H.,H.,H.,H.,H.q3.:(+bQ#bp.q3.0q.,H.+9.q3.,H.bp.+9.+9.bp.,H.q3.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.q3.0q.<3+<3+0q.q3.,H.+9.bp.,H.q3.q3.,H.bp.+9.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.u4.N7+#4=NK.86=%U*0M.d1*|6.-g@r=-Jl Mi.^1$z~+nM#i$$s=-br t=-u=-v=-kU+r`+/b qH e+%:]&/B&WD.ot=w=-BG.;V.0]+3a&3a&3a&]b&GX%N]+}!+}!+PZ.-{+Qb$Qb$A2$''+)>+:X@:X@ja@ja@#o+#o+&h#[-+[-+[-+[-+[-+[-+[-+[-+<-@<-@<-@<-@<-@<-@<-@o>&|r$)]=<-@o>&3+$g>@fD@fD@>{+>{+sz@sz@,{+O$+O$+O$+2|+2|+O:+O:+']$']$A1#A1#@h+h/+9Z+]v$]v$]v$wy+3)#k %k %k %k %/a$/a$/a$k %wy+R2@R2@R2@wy+wy+wy+wy+~m$N@%&c$/a$Fs%Fs%)]$Tj$Rb$I$+7T+Fq@Mi+!:@m<@V}+g1@zb#mo@Jq@+l#]B+ ++98$98$km$Z+$|0#ns$~m$&W#pr%80$qr%VR$1=&'e%V~$x=-ZZ&1W&8t*y=-x=-z=-A=-B=-C=-D=-.N@-3@+s+b1@}s$~o$]9%mY$E=-F=-G=-H=-I=-J=-K=-L=-M=-N=-O=-P=-Q=-R=-S=-T=-U=-V=-W=-X=-Y=-Z=-`=- --.--+t%+--@--#--$--%--+z%&--[2%*--=-----;-->--,--'--)--)--'--TE$!--~--xG$X*-xG$xG${--r=&]--^--/--(--#+%E1%_--]K%^K%:--In*S$-<--[--}--|--1--2--3--4--[ -&i.5--kv Z;=/1%6--#+@> #7--'%-8--^g 9--4V an $m.#h jr=0--xR a--b--c--d--e--fq=>/@qK@Y~%VL*iD*f--g--h--i--19*j--k--l--m--(z+Tw+n--o--ci&GB+p--q--r--s--/#$t--u--v--w--x @Bf+ca+$e+x--y--3}$z--Q9&y}$Z#&A--B--Jh%C--D--KW=ph%E--F--G--H--[W=I--J--K--L--M--N--fp%,-@)]@*z%(c+Vd+V8+X8+fw+ES#gw+fw+L+#uB+eX@!'@ax$O--fy$fy$#v&P--`;@)v@J9#J9#yp+7~#7~#7~#R.+R.+nX+or&CM@I$+_P+47$:8$&6$:8$,p$L1#Ej$Qj$~l$8e#lF$9e#9e#fX+4Z+| @K #IO$u9#hb#YP$8e#[{#lw$Ux$dE$6d$i)$F1#D1#U=$4)#9Z+,]$='>$v$%pV$hs#l!$%B%0C%<:&1R&Nw Y{$as as as as *E *E =E =E u1$&E &E Kv Kv Kv Kv Kv &E &E &E &E &E &E Eu Eu vR@$4@$4@<|@[|@[|@_|@(|@/|@^|@^|@^|@^|@/|@WA WA WA WA WA WA WA WA WA WA WA WA WA WA WA WA ^|@^|@^|@@~ WA WA YA YA ^|@^|@^|@^|@^|@^|@^|@^|@YA WA @~ @~ ^|@/|@(|@(|@>b@>b@X:@t! +~ W:@W:@W:@Y:@]|@/d@O9 +L@bP@i@#Y=#Ed#JN#&3#&3#&3#%3#hh*Vi*Vi*Q--aO=0*-}k=Mi=0N=R--$Y=S--p=-o_*fH -7 @f*u&.]&-;Z+sQ@n3.u5.l3.m3.[(+Q+&Q+&w{@w{@CI#S`%S`%S`%Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&CI#CI#CI#S`%S`%sX%sX%sX%CI#sX%&r=*r=*r=&r=sX%CI#uG#sX%CI#CI#sX%*r=&r=sX%sX%&r=*r=uG#uG#*r=&r=sX%*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#*r=*r=&r=&r=sX%sX%&r=sX%CI#w{@w{@CI#sX%&r=CI#S`%&r=*r=*r=&r=S`%CI#CI#sX%*r=&r=S`%sX%vu#~U.sX%sX%sX%sX%sX%sX%sX%sX%CI#S`%S`%sX%&r=&r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%&r=&r=*r=*r=*r=uG#CI#S`%&r=*r=*r=&r=S`%CI#*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=sX%S`%S`%CI#*r=*r=&r=&r=sX%S`%S`%CI#CI#CI#CI#S`%S`%sX%sX%sX%uG#uG#uG#*r=&r=sX%sX%sX%uG#uG#uG#uG#uG#uG#uG#=Z+xr*$' 5,+5,+jM#jM#jM#mO#5,+5,+jM#jM#mO#k4@k4@vE*xE*x{+u!=u!=u!=x{+US+';$OP*OP*23+US+';$';$';$d #a1+lt*FG*S>+S>+FG*lt*a1+a1+b=+b=+lt*FG*pK+pK+S>+d #23+[f.[f.23+d #d #d #US+US+US+US+US+23+23+23+3<@Av&0, ~h&~h&{h&0, &, Av&Av&Av&&, 0, 0, {h&J> Ea+T_+7P.7P.G|@G|@y4&w5&oh.7P.oh.y4&iS.y4&", "O7.O7.O7.O7.O7.O7.O7.x5.O7.O7.xX%xX%_r+_r+N7.xX%xX%O7.O7.O7.O7.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.O7.O7.xX%_r+M7.%0+_r+_r+_r+_r+_r+_r+_r+_r+O7.xX%N7.N7.xX%O7._r+M7.M7.N7.xX%O7.O7.xX%N7.M7.M7.N7.N7._r+xX%xX%O7.O7.xX%N7.M7.M7._r+_r+N7.%0+v4.v4.v4.v4.v4.v4.v4.v4.#k.v4.v4.<3+<3+v4.v4.#k.N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+%0+%0+%0+%0+%0+$B#%0+N7._r+_r+N7.%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.$B#eO@)Z%eO@$B#%0+$B#@9.@9.@9.@9.@9.@9.@9.@9.@9.,H.q3.q3.:(++9.+9.,H.<3+,H.,H.,H.,H.,H.,H.,H.,H.0q.,H.bp.:(+0q.<3+q3.:(+q3.,H.bp.+9.+9.bp.,H.q3.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.q3.0q.<3+<3+0q.q3.,H.bp.:(+,H.q3.q3.,H.:(+bp.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.,H.,H.,H.,H.u4.N7+#4=8M.6J.p3.%U*pD&|6.i..T--{* q' U--tK.V--p) W--X--Y--f*-F| g/@6f $}$E3 _,.0[%-]$p'+/B&O9*WD.3F.3F.S]+S]+4<+HB@;A&V@&|!+}Y.}Y.M]+Qb$A2$A2$^F$M/+:X@:X@:X@ja@#o+#o+#o+[-+[-+[-+[-+[-+[-+[-+[-+<-@<-@<-@<-@<-@<-@<-@<-@)]=<-@<-@o>&3+$3+$g>@g>@>{+>{+>{+sz@,{+O$+O$+O$+87$2|+O:+O:+']$']$A1#V_#li@h/+9Z+R2@]v$R2@3)#3)#k %k %k %k %/a$/a$/a$k %wy+R2@R2@R2@wy+wy+wy+wy+~m$N@%&c$/a$Fs%Fs%)]$c/$qn%iF$8k#1w+Z--Q8+`--{-@yp+^8$5P#Kn#0x$Hz$6R+lS$1/%']$O:+V_#QB$`o$4w+N@%km$Q'$qr%Rj$c8$ K$V~${<%V~$V~$8t*Om&4:%v_%=>$J.%,e% I@$v$Px#y&@/a+/L+K(#M$&=7% ;-Hb%.;-+;-@;-#;-$;-%;-&;-*;-=;--;-;;->;-,;-';-);-!;-~;-{;-];-^;-/;-(;-_;-:;-!w%<;-[;-Vr%cY$};-.G%jC%|;-1;-2;-pL%3;-sH$*l*4;-(X=(X=5;-6;-7;-7;-7;-8;-9;-0;-T&-^--.=-@=-M %9*&a;-9*&^K%b;-c;-d;-e;-f;-g;-xG$X*-h;-i;-0n*&.-mn*-8*j;-@8+=m jZ#=a@k;-l;-z4&$^ R7.m;-n;-l1.1 ./%@8_.`I o;-p;-q;-r;-[5*s;-t;-4T*'M*5&=u;-v;-w;-x;-y;-z;-A;-B;-C;-D;-E;-F;-G;-H;-I;-J;-V&@]s+K;-L;-M;-fh+N;-O;-P;-Q;-R;-8'#S;-T;-U;-V;-W;-X;-Y;-Z;-&t%}J#|J#Q0%`;- >-2f*Vg*Gc*aM%.>-Dq*+>-S~*F8*H8*@>-#>-$>-*o*of+y6+X8+L+#A!%-k@M9& a@ !% a@ a@!i@L:$)u+iw+s$@Vd+g9#b}@[c+-R+-#}$Au Nw Au Nw Nw Cu Cu Jv Jv u1$u1$&E &E Kv Kv &E &E &E &E &E &E &E &E vR@vR@$4@$4@<|@[|@:|@:|@(|@/|@^|@@~ WA @~ @~ @~ WA WA WA WA WA WA WA WA WA WA WA WA WA WA WA WA @~ @~ @~ WA YA YA YA a~ @~ @~ @~ @~ @~ @~ @~ @~ YA WA WA @~ ^|@/|@(|@(|@>b@r[@X:@t! +~ +~ +~ +~ Y:@]|@ 9 O9 .9 bP@i@#Y=#JN#&3#Ti@Ti@Ti@c,*ft@7N=7N=&>-6i=g3*7i=sx=tU=GA=q@%p=-o_*0w ;+-4$-*>-v4.=>-N:*sQ@n3.u5.l3.r4.+T+Q+&w{@w{@w{@CI#S`%S`%S`%w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@CI#CI#S`%S`%sX%sX%S`%sX%&r=*r=*r=&r=sX%S`%uG#sX%CI#S`%&r=*r=&r=sX%sX%&r=*r=uG#uG#*r=&r=sX%&r=&r=&r=&r=&r=&r=&r=&r=uG#uG#*r=*r=&r=&r=sX%sX%&r=sX%S`%CI#CI#S`%sX%&r=CI#S`%&r=*r=*r=&r=S`%CI#Q+&CI#S`%CI#Q+&w{@&r=vu#sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=sX%sX%&r=&r=*r=*r=*r=*r=S`%sX%&r=&r=&r=&r=sX%S`%*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=&r=sX%sX%sX%sX%sX%&r=&r=&r=sX%sX%sX%sX%sX%S`%S`%S`%S`%sX%sX%&r=&r=*r=*r=*r=*r=&r=&r=&r=&r=uG#uG#uG#uG#uG#uG#uG#=Z+uq*$' $' $' 5,+5,+jM#jM#$' 5,+5,+5,+jM#mO#mO#7' U*@x{+[f.[f.x{+OP*23+US+OP*OP*x{+x{+[f.x{+x{+x{+lt*lt*FG*FG*FG*FG*lt*lt*FG*FG*FG*FG*lt*lt*lt*lt*US+OP*x{+x{+US+d #';$US+OP*OP*OP*OP*x{+x{+x{+U*@Bv&ZQ.Av&0, 0, 0, 0, 0, &, &, &, 0, 0, {h&{h&{h&6j+T_+7P.7P.G|@G|@7P.y4&7P.oh.y4&y4&oh.7P.", "x5.x5.x5.x5.x5.x5.x5.is@x5.O7.xX%_r+M7.%0+%0+x5.x5.x5.x5.x5.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.x5.x5.O7.xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+xX%N7.M7.N7.xX%O7.xX%_r+M7.N7.xX%O7.O7.xX%N7.M7._r+_r+_r+_r+_r+xX%xX%xX%O7._r+M7.M7._r+_r+M7.$B#v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#$B#%0+N7._r+_r+N7.%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.%0+$B#eO@eO@$B#%0+@9.)Z%@9.@9.@9.@9.@9.@9.@9.@9.,H.0q.0q.q3.:(+:(+q3.<3+,H.,H.,H.,H.,H.,H.,H.,H.<3+q3.,H.q3.0q.<3+0q.,H.,H.:(+:(+bp.bp.:(+:(+,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.q3.q3.0q.0q.q3.q3.,H.:(+,H.q3.q3.q3.q3.,H.:(+,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.,H.,H.,H.,H.u4.72.9).S>.6J.w5.&o@pD&}7.E+.RK.V# q' w~.a>$w_ ->-;>->>-,>-'>-)>-g/@mW+#5 BQ+V.AG.;V.-n#0]+]b&;{+;{+!V@!V@!V@2_+M/+G~+G~+G~++x@+x@+x@+x@)>+)>+)>+)>+)>+)>+)>+[-+o>&o>&o>&o>&o>&<-@<-@<-@o>&o>&o>&o>&o>&3+$3+$3+$>}&E_+>{+>{+sz@sz@O$+O$+87$87$87$2|+O:+']$']$']$li@h/+Ub+=1@R2@R2@9Z+9Z+3)#3)#k %k %k %k %/a$k %wy+R2@wy+wy+wy+wy+N@%N@%&W#Fs%&c$/a$pr%pr%)]$c/$4($jF$; $1w+n6+=k@=*@-*@*N+K:+n%$.3%]B+H3$Hw%L#$-i#:'$, $>9@T)@B;@|)#R2@W_#A0%!U#>b$a8$b8$d9$kF$kF$kF$>J$bN$/'$zw$W~$=Y$5+$,7@p2*9%$z&@_+@eB+}h#!>-~>-{>-]>-^>-/>-(>-_>-:>-<>-[>-}>-|>-1>-2>-3>-4>-5>-6>-7>-8>-9>-0>-a>-b>-c>-d>-e>-f>-g>-h>-i>-j>-k>-l>-Pb%*F%m>-n>-0#$o>-p>-q>-r>-s>-t>-Q]*Z{*T$-T$-T$-e;-u>-v>-W&-(--#+%w>-x>-x>-y>-y>-z>-b;-A>-B>-C>-D>-E>-F>-Z*-G>-H>-yX=I>-J>-K>-A5+#;&Ul.L>-8} nn+m1.+^.$g%-N>-O>-P>-Q>-R>-S>-T>-U>-V>-W>-X>-3--Y>-Z>-`>- ,-!:*.,-cf*+,-@,-#,-.u&HZ+y @$,-%,-&,-*,-ba+=,--,-;,->,-,,-',-),-!,-~,-{,-],-^,-/,-(,-_,-:,-<,-[,-},-|,-1,-/K$)`%ic%2,-3,->+%4,-m$-5,-M{*6,-it$'V%7,-8,-yq*9,-2i%C]%Wp+x6+v6+ES#0,-`0@fF&{^*<)%<)%V=$M9&K@>K@YK+5&@iX+vp#vp#00$00$Ej$_a$S5+CO#L[#_-+K6@4)#2)#h/+CU.dy%m>#Y]$[ %}|%`_=gE%%W$f_&OW$|u%$B%9E%a,-+A&b,-JG%no%Mv no%Pw Pw Pw Pw ^G%^G%.y .y Lv Lv &E Kv &E &E &E &E Kv Kv Kv Kv $4@$4@<|@[|@:|@_|@(|@(|@^|@@~ WA YA a~ a~ YA YA YA YA YA YA YA YA YA YA WA WA WA WA WA WA WA WA WA WA YA YA YA a~ a~ a~ @~ @~ @~ @~ @~ @~ @~ @~ YA WA WA @~ ^|@/|@(|@(|@X:@X:@X:@X:@t! t! t! t! Y:@(7 O9 .9 @A@uR@Cv@Y=#&3#Ti@c,*V8 V8 hh*6N=Q--E,#^r@Mj=7i=sx=MQ=>4*.6*;+-d.-o_*0w E@-c,-Gg@S`%;Z+&r=n3.n3.r4.l3.u5.s4.w{@w{@w{@CI#CI#CI#S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#w{@w{@w{@CI#CI#CI#S`%S`%S`%sX%&r=&r=&r=&r=sX%S`%*r=sX%S`%sX%*r=uG#&r=S`%sX%&r=*r=uG#uG#*r=&r=sX%sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=*r=*r=&r=&r=&r=&r=&r=sX%S`%S`%S`%S`%sX%&r=CI#S`%&r=*r=*r=&r=S`%CI#CI#S`%sX%S`%w{@w{@S`%&r=sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=*r=*r=*r=&r=&r=sX%S`%S`%sX%&r=&r=*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%sX%sX%sX%&r=&r=&r=sX%sX%sX%sX%sX%&r=&r=&r=sX%sX%sX%&r=&r=&r=*r=*r=&r=&r=&r=&r=*r=*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#=Z+,C+SO+qK+qK+$' $' $' 5,+$' $' $' 5,+5,+5,+jM#-x#..=x{+OP*23+23+23+OP*OP*';$US+OP*[f.u!=u!=[f.x{+FG*>H*aH*aH*aH*aH*>H*>H*GJ@GJ@zw*>H*aH*(k=Ij=a1+23+OP*x{+23+';$d #US+OP*u!=u!=u!=u!=u!=u!=[f...=Bv&cl.cl.3P .==)A&%z&.y&)A&)A&)A&%z&%z&%z&.y&~h&*$@G|@oh.y4&7P.G|@G|@Kh+7P.iS.]@+y4&G|@$(+", "is@is@is@is@is@is@is@O7.O7.xX%_r+N7.M7.M7.%0+Vh.Vh.is@x5.x5.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%N7.N7.xX%O7.O7.O7.O7.O7._r+_r+_r+_r+_r+_r+_r+_r+_r+M7.%0+N7.O7.x5.O7.xX%M7.N7.xX%O7.O7.xX%N7.M7.xX%xX%xX%_r+_r+_r+_r+_r+x5._r+M7.M7._r+_r+M7.@9.v4.v4.v4.v4.v4.v4.v4.v4.<3+v4.v4.#k.#k.v4.v4.<3+N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+%0+%0+%0+%0+%0+$B#%0+N7._r+_r+N7.%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.N7.$B#@9.@9.$B#$B#eO@,X@@9.@9.@9.@9.@9.@9.@9.@9.,H.0q.<3+0q.,H.,H.q3.<3+,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.q3.q3.0q.q3.q3.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.q3.q3.q3.q3.,H.,H.,H.,H.q3.q3.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+0q.0q.0q.0q.0q.0q.0q.0q.,H.,H.,H.,H.,H.,H.,H.u4.-1.;'.9).;'.N7+N7+_r+/#&EY#4B&' .lg.ef.);$ d+d,-e,-f,-g,-Y--h,-i,-j,-k,-yS+p8 Y7 ^b x-$Rw%Rw%0F.e{$/B&b++mA%~Q.N^&fT.N/+N/+-n#V@&9>+9>+'r%'r%'r%A:&G~+G~+G~+G~+G~+G~+G~+)>+)>+)>+)>+)>+)>+)>+)>+q=#3+$o>&o>&o>&o>&<-@<-@3+$3+$3+$o>&o>&o>&o>&o>&>}&>}&>{+>{+>{+sz@,{+,{+87$87$87$2|+O:+O:+']$']$h/+h/+Ub+Ub+9Z+9Z+9Z+9Z+3)#3)#k %k %k %k %/a$k %wy+wy+wy+wy+wy+N@%N@%N@%&W#Fs%&c$)]$pr%pr%)]$c/$4($-I$w-$k1@|:@uu&sG+lo@re#}|+ ^$S4$$ +m~$7O$z@%WS@, $Y@+)2+T)@X,@|)#9Z+D)+B%%K[#ar$^m$cN$~l$~l$vp#vp#iX+iF$/'$zw$W~$_Z$iY#l,-rr=m,-c}@.k#n,-ZZ#o,-p,-q,-r,-s,-t,-u,-v,-w,-x,-y,-z,-A,-B,-C,-D,-E,-F,-G,-H,-6>-I,-J,-K,-0>-L,-M,-N,-O,-P,-Q,-R,-S,-@a%bc%Pw$~Q$*p%6L$vk%T,-U,-V,-W,-X,-Y,-Z,-`,- '-S$-.'-+'-~:*@'-#'-3;- V%+=-/D$z>-y>-x>-:--$'-%'-AG$&'-*'-='--'-;'-9;-}-->'-,'-''-)'-!'-~'--y'-z'-4J$A'-B'-.j%h*&C'-D'-E'-F'-U%%K&%VE%R+%h/$Yi$g/$G'-H'-Mf$)3@v6+)c@;i@ a@W=$Jw$Pl$R6*fF&&G$%[&)c@-k@Iy+L:$cm+cm+cm+Yr+bm+0m+5(@71$Pm#%I@ N@}o+om+om+3~#kc@e1@26+-4+<^#CD+H@@H@@H@@8G+R)@YK+YK+YK+4G+2 @R,+hX+Wx$_8$qw$,L$=k$1r$PX#|0#@h+87$sz@x=$P]+>/#3/++B%u[#Hy$9u%CT$I'-J'-f_&KA&a!&DD%{$&=z K'-SX&L'--f$Mv Pw Pw Pw Pw Pw Pw ^G%^G%.y .y Lv Lv &E Kv Kv Kv Kv Kv Eu Eu Eu Eu <|@[|@:|@_|@(|@^|@@~ @~ WA YA a~ 1f kI@kI@1f 1f a~ a~ a~ a~ a~ a~ a~ a~ YA YA YA YA YA YA YA YA a~ a~ a~ a~ a~ a~ a~ a~ WA WA WA WA WA WA WA WA WA WA @~ ^|@/|@(|@(|@_|@X:@X:@X:@r[@r[@X:@X:@t! ;! /d@+L@@A@bP@[`@Cv@Z=#Z=#Ti@0u#hh*Ut&ft@pR#E,#]T#et@Js&sx=O}*0N=R--[C ;+-d.-ix -+-E@-M'-<3+=>-*r=CI#v5.n3.r4.l3.u5.r4.w{@w{@CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%Q+&Q+&w{@w{@CI#CI#CI#S`%sX%sX%sX%&r=&r=sX%sX%sX%*r=&r=sX%&r=uG#uG#&r=S`%sX%&r=*r=uG#uG#*r=&r=sX%sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=*r=*r=&r=&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%CI#S`%&r=*r=*r=&r=S`%CI#uG#uG#uG#*r=&r=sX%sX%&r=sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=&r=&r=sX%S`%S`%CI#S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%&r=&r=*r=*r=*r=&r=S`%CI#CI#S`%&r=*r=*r=*r=*r=*r=*r=*r=*r=*r=CI#S`%S`%sX%&r=&r=*r=*r=CI#S`%S`%sX%&r=&r=*r=*r=sX%&r=&r=&r=*r=*r=uG#uG#sX%sX%sX%&r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#=Z+Fu+SO+SO+SO+qK+qK+$' $' $' $' $' $' $' $' $' ~~@..=x{+23+US+US+23+OP*[f.:{+d #US+OP*x{+OP*US+S>+S>+>H*aH*Ij=Ij=aH*>H*GJ@zw*zw*>H*>H*aH*aH*(k=(k=OP*x{+OP*US+d #d #23+[f.HV.HV.u!=u!=u!=[f.[f...=ZQ.cl.PN.PN.cl. ==.y&+y&%z&%z&%z&%z&%z&%z&%z&{h&Bj.oh.iS.]@+iS.7P.G|@T_+7P.iS.w5&oh.xc+Ea+", "is@is@is@is@is@is@is@_r+_r+_r+_r+_r+xX%xX%xX%is@is@is@x5.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%$B#%0+N7._r+xX%xX%xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+M7.%0+N7.O7.x5.O7.xX%M7.N7.xX%O7.O7.xX%N7.M7.xX%xX%xX%_r+_r+_r+_r+_r+O7._r+M7.M7._r+_r+M7.$B#v4.v4.v4.v4.v4.v4.v4.v4.<3+<3+#k.#k.#k.#k.<3+<3+N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.N7.N7.N7.N7.N7.N7.$B#%0+N7._r+_r+N7.%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.N7.$B#@9.@9.$B#$B#eO@,X@@9.@9.@9.@9.@9.@9.@9.@9.,H.0q.<3+<3+q3.,H.q3.<3+,H.,H.,H.,H.,H.,H.,H.,H.:(+,H.,H.,H.:(+:(+:(+,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.,H.,H.,H.,H.u4.-1.{u.;'.;'.E6.tF._r+Jc@d1*Wh@!W+r).{$ r)@je$F^$N'-w2 93 8|+O'-p[+-< :v#s' (9#E^ E/ m< #J&ia 1} B>&=e=&'&a%$6F.ER.DR.DR.+{@9]@Wm#Ap#Ap#E)$E)$9>+^F$W0+W0+W0+ue#ue#ue#ue#W0+W0+W0+W0+W0+W0+W0+G~+[-+g>@3+$3+$o>&o>&<-@<-@3+$3+$3+$o>&o>&o>&o>&o>&>}&>}&>}&E_+>{+>{+sz@sz@,{+,{+87$87$87$2|+O:+O:+h/+MX.h/+h/+Ub+Ub+9Z+9Z+3)#3)#3)#3)#k %k %k %k %N@%N@%N@%N@%N@%Fs%Fs%Fs% p$pr%sD$(a$4v$4v$(a$K$+7G$-I$-,$PU#yr+=5@Gq@Sx#Y.+x_%N)$3w+YX.~($i+&t{%z@%i+&]f#, $~}@mF$qX+9Z+D)+_-+Wk$=c$5G$sS$t}%t}%4Z+4Z+jX+XK+6G+zw$W~$_`#&V&P'-Q'-R'-S'-T'-U'-V'-W'-X'-Y'-Z'-`'- )-.)-+)-@)-#)-$)-%)-&)-*)-*)-=)--)-;)->)-,)-,)-')-))-!)-~)-{)-])-^)-/)-()-_)-:)-<)-[)-})-|)-R/$sN$]w%53$7J$1)-2)-3)-4)-5)-6)-7)-T=@8)-8)-Vm*^>@ '-9)-0)-a)-U&-OE$ V%b)-V&-p>-c)->8*d)-e)-f)-g)-h)-i)-j)-0;-k)-l)-m)-n)-o)-p)-Hq q)-!&.r)-s)-s)-9>.t)-u)-v)-w)-x)-y)-z)-y&&A)-B)-C)-D)-l/*E)-F)-G)-H)-I)-J)-K)-L)-M)-N)-O)-P)-OG&Q)-R)-S)-T)-U)-V)-W)-X)-Y)-Z)-`)- !- !-.!-+!-@!-#!-$!-%!-&!-*!-=!--!-;!->!-,!-'!-)!-!!-~!-{!-]!-Ca%Ne%Me%^!-/!-3%-(!-Ul*y %[s$T+%Zi$g/$M#%_!-+h$em+;k@S $+`#!E&sl&yv$oo$gF&tn&Tr${E&^c@^m@04+gB+em+c1@fm+Wp+dm+(o+bm+0m+V5+z=@jK@*K@ I@+5$ea%##$*t@Ln#ly+I@@^K@mq@x;@x;@8G+8G+2 @YK+4G+CI+R,+hF$47$qw$90$T4$,Z#PX#B%%ZR#87$P$+e!@sL.< +rK@U{$Vj$5r$.J$':%](%:e*:e*jT$:,$h_&~G%Lv%/$&=z Zx W(&vg&dB dB +z +z +z +z +z +z .y .y Lv Lv PC PC PC QC Eu Eu vR@vR@$4@$4@<|@<|@:|@_|@(|@/|@@~ WA a~ a~ a~ 1f kI@')#')#')#')#kI@a~ a~ a~ a~ a~ a~ a~ a~ YA YA YA YA YA YA YA YA a~ a~ a~ a~ a~ a~ a~ a~ @~ @~ @~ @~ @~ @~ @~ @~ @~ ^|@^|@/|@(|@_|@:|@:|@X:@r[@>b@>b@>b@r[@t! +~ ;! /d@.9 bP@uR@b.#j$#Z=#Y=#P~#!t Ut&Rr 85*(u ^T#:!-T8 Fk=O}*+>H*aH*Ij=Ij=aH*>H*GJ@(k=(k=aH*aH*>H*>H*zw*zw*OP*x{+OP*23+';$';$x{+HV.u!=u!=[f.[f.x{+OP*OP*xE*Av&3P cl.cl.3P ==.y&+y&%z&%z&%z&%z&)A&)A&)A&0, _e.]@+]@+w5&]@+iS.7P.G|@7P.iS.w5&oh.xc+Ea+", "x5.x5.x5.x5.x5.x5.x5._r+xX%xX%xX%O7.O7.x5.x5.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%$B#%0+M7._r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+xX%N7.M7.N7.xX%O7.xX%_r+M7.N7.xX%O7.O7.xX%N7.M7._r+_r+_r+_r+_r+xX%xX%xX%_r+M7.%0+M7._r+xX%_r+M7.v4.v4.v4.v4.v4.v4.v4.v4.0q.<3+#k.@3+$3+$o>&<-@<-@o>&o>&o>&o>&o>&3+$3+$3+$,'+,'+>}&>}&>{+>{+>{+sz@,{+,{+N$+87$87$2|+O:+2|+MX.MX.li@li@h/+Ub+9Z+R2@3)#3)#3)#3)#k %k %k %k %N@%N@%N@%N@%Fs%Fs%Fs%Fs% p$pr%80$(a$4v$4v$7v$K$+j3&Hm$n>%EA#(3@-5@x'#<_+.o+~ +dN#6c#x1#g<#E-%sP$>)&2P+c!$;i#L{$QB$tp%+B$+*+M[#]m$8F$hU$SQ$t}%U<#U.@~g$jX+>K@~K@&n%/S&&V&qR&8!-9!-0!-a!-b!-c!-d!-e!-f!-g!-h!-i!-j!-k!-l!-m!-n!-o!-p!-q!-r!-r!-s!-t!-u!-v!-w!-x!-y!-z!-A!-B!-C!-D!-E!-F!-F!-G!-H!-I!-J!-<)-K!-L!-M!-k|&n&*N!-O!-Tc%J/$@|%5)-6)-I{*P!-Q!-Q!-<1%R!-B%-In*S!-C%-T!-U!-OE$ V% V%p>-~g*V!-W!-X!-H--Y!-Wl*Z!-~g*_2%`!- ~-.~-+~-@~-!3$#~-$~-0G %~-PD u)-=4 ^C$&~-]m%*~-=~-z)--~-;~->~-,~-'~-2#-1--)~-!~-~~-{~-]~-^~-/~-(~-_~-r>-jI$7'@5u+f'-:~-<~-[~-}~-[~-|~-1~-2~-3~-4~-5~-6~-7~-8~-9~-0~-a~-b~-c~-d~-e~-f~-g~-h~-i~-j~-k~-l~-m~-n~-o~-xq%p~-sM${:*q~-r~-86%Zk*R]#s~-G($F($t~-e/$#/%}T@/a+2o@M2&~c@~c@Mm$7q%>E$Tr$Zt&Zt&~c@D+$a4+s6+t6+_o+U>$kk+kk+b@>b@rG rG >b@X:@+~ Y:@;! 9 @A@uR@b.#i@#C&#Z=#sR#!1 TE d|*d|*bw ~t LQ=Ez ll={l=H*aH*aH*aH*aH*>H*>H*Ij=Ij=(k=aH*>H*zw*GJ@GJ@23+OP*x{+OP*US+23+x{+HV.[f.[f.x{+OP*23+23+US+J> 0, == == == ==)A&%z&.y&)A&)A&)A&)A& == == ==Av&ur&]@+iS.y4&]@+]@+y4&7P.7P.iS.]@+y4&G|@$(+", "O7.O7.O7.O7.O7.O7.O7.is@is@x5.x5.x5.x5.O7.O7.N7.N7._r+_r+_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%M7.N7._r+xX%xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+O7.xX%N7.N7.xX%O7._r+M7.M7.N7.xX%O7.O7.xX%N7.M7.M7.N7.N7._r+xX%xX%O7.O7.M7.%0+$B#M7._r+O7.xX%_r+v4.v4.v4.v4.v4.v4.v4.v4.q3.<3+#k.F6.F6.#k.<3+q3.N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.$B#%0+N7._r+_r+N7.%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.$B#eO@)Z%eO@$B#%0+$B#@9.@9.@9.@9.@9.@9.@9.@9.@9.+9.:(+0q.0q.,H.:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.,H.bp.,H.0q.q3.:(+bp.,H.0q.+9.bp.,H.q3.q3.,H.bp.+9.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+q3.,H.:(+bp.bp.:(+,H.q3.:(+bp.+9.bQ#bQ#+9.bp.:(+,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.u4.oO [-.m;.;'.#:+^C.xX%b #V^$Ak=' .7S.Ki.qS B~-dH@6z@m/@k&@v2 cr C~-M@$N[ 7l&D~-j%#PL@e< f< >> k} 5=$RD@<.%,Q.GR.+7#FR.FG.~T%P.%P.%p~+I+@^8=}s#;{+^F$W0+W0+ue#OD@OD@OD@R3#V,+V,+V,+V,+V,+V,+V,++x@ja@-z@fD@g>@3+$o>&<-@<-@)]=<-@<-@o>&3+$3+$g>@g>@,'+8T@,'+>}&>}&E_+>{+>{+%>#%>#,{+,{+87$87$87$2|+MX.MX.CU.&h#li@h/+=1@})#9Z+9Z+3)#3)#3)#3)#k %k %Fs%Fs%Fs%Fs%pr%pr%pr%pr%96&4v$qr%7v$&u$&u$8v$K$+9v$!]$27$1V#5]@E~-5]@(3@Ge@Tx#Cb#y1#5h#Y@++++n~$/ +fq#{-,{-'{-){-!{-~{-{{-]{-^{-/{-({-+'$oo&hk$2f%jo$+R#_{-:{-<{-5)-P!-[{-[{-Q!-<1%R!-xd*9'@C%-}{-jI$T!-U&-#'-3;-B>-`@-|{-1{-2{-3{-4{-7f*5{-6{-7{-8{-9{-0{-a{-b{-F3.c{-ch*d{-e{-KI.f{-g{-h{-!3$i{-j{-0{-k{-l{-8a%m{-n{-o{-p{-q{-r{-s{-97*P#-t{-u{-v{-w{-x{-y{-z{-A{-B{-C{-D{-E{-E{-F{-G{-H{-I{-7~-J{-K{-L{-M{-N{-O{-P{-Q{-R{-S{-5>-T{-U{-5>-V{->;-W{-S=-X{-Y{-Z{-`{-<;-qO%zn%Nh%en% ]-.]-f9#nN$u #{A$+]-qB*`,%d(%D($Ds@P4&no$N2&F$$4j$Mm${E&Zt&~c@~c@~m@[=#lV+&T@eB+[h+g}@)c+)c+/a+Pd+Od+:h+z&@s$@c9@|o+#5@'7@$&$j~$20$6k#*n#DM@6$@SQ@SQ@SQ@W.@W.@1 @5Z+iX+_P+u_%Z&+cN#*W#K#$PX#}7$QB$'/#mo%d%%_V#-r%r[#+@$r1##w&'x%=H$|f tj%|u%ox$.F%4[*4[*.F%CD%$h%i!$aE%fB eB eB /A S&&S&&S&&q<$q<$+z +z ^Y@^Y@ z {A {A cB Tx 6F [|@[|@:|@_|@(|@/|@^|@^|@/|@^|@@~ YA 1f ')#B_#QT@a~ 1f kI@')#B_#B_#')#')#kI@kI@kI@kI@kI@kI@kI@kI@a~ a~ a~ a~ a~ a~ a~ a~ a~ YA YA YA WA @~ @~ @~ /|@/|@/|@/|@/|@/|@/|@/|@_|@:|@:|@[|@<|@$4@vR@vR@rG sG tG tG rG X:@Y:@]|@;! 9 RT@b.#UE@Cv@C&#Z=#(d Wp&rt&hH )t st&9C=Qr @]-RJ=ml=#]-#]-#]-$]-%]-|!-c.-&]-*]-=]-& =-]-w{@b,+j(#n3.n3.s4.s4.s4.s4.S`%S`%S`%CI#w{@w{@w{@Q+&w{@w{@w{@w{@w{@w{@w{@w{@S`%sX%sX%sX%&r=&r=*r=*r=*r=&r=sX%S`%S`%sX%&r=*r=&r=&r=*r=N:*;Z+vu#*r=S`%sX%&r=*r=uG#uG#*r=&r=sX%uG#uG#uG#uG#uG#uG#uG#uG#sX%sX%&r=&r=*r=*r=uG#uG#sX%&r=*r=uG#uG#*r=&r=sX%CI#S`%&r=*r=*r=&r=S`%CI#sX%CI#CI#S`%*r=&r=CI#j(#sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=CI#CI#S`%S`%S`%sX%sX%sX%S`%sX%&r=&r=&r=&r=sX%S`%*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=&r=sX%sX%sX%sX%sX%&r=&r=&r=sX%sX%sX%sX%sX%S`%S`%S`%S`%sX%sX%&r=&r=*r=*r=*r=*r=&r=&r=&r=&r=uG#uG#uG#uG#uG#uG#uG#=Z+uq*$' $' $' 5,+5,+jM#jM#mO#mO#mO#jM#5,+5,+5,+~~@nh.';$US+23+OP*OP*23+23+HV.[f.OP*23+US+OP*x{+'!=lt*aH*>H*>H*>H*>H*aH*aH*aH*aH*aH*aH*>H*>H*>H*>H*';$23+[f.[f.x{+OP*x{+u!=u!=[f.x{+OP*23+US+US+zi.{h&%z&.y&.y&.y&%z&)A& == == == ==.==.==3P 3P ZQ.ur&y4&G|@G|@7P.y4&y4&oh.7P.oh.y4&y4&oh.7P.", "xX%xX%xX%xX%xX%xX%xX%%j.%j.dD.Vh.x5.O7.xX%xX%%0+%0+M7.N7.N7._r+xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.O7.O7.xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+is@xX%_r+_r+xX%xX%N7.%0+M7.N7.xX%O7.O7.xX%N7.M7.%0+M7.N7._r+xX%O7.x5.x5.%0+$B#@9.%0+xX%x5.O7.xX%v4.v4.v4.v4.v4.v4.v4.v4.q3.<3+#k.F6.F6.#k.<3+q3.N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+%0+%0+%0+%0+%0+$B#%0+N7._r+_r+N7.%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.@9.)Z%,X@eO@%0+M7.%0+$B#@9.@9.@9.@9.@9.@9.@9.@9.bQ#:(+q3.0q.,H.bp.bp.:(+,H.,H.,H.,H.,H.,H.,H.,H.:(+0q.v4.<3+,H.:(+q3.v4.+9.bp.,H.q3.q3.,H.bp.+9.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+q3.,H.bp.+9.+9.bp.,H.q3.bp.+9.bQ#o&=o&=bQ#+9.bp.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+bp.bp.bp.bp.bp.bp.bp.bp.,H.,H.,H.,H.,H.,H.,H.,H.J!.vi@-1.`q@*B.^C.xX%_r+V^$ W=4!.un.0Y+0- V!+q' ;h+;]- E >]-oS+'| ,]-r#-']-)]-l: +U#ym=s4 s4 er#^z =<@b_@b_@u|@w@%%V.8F.tB s)&s)&1(%5a&/Y.R^%^b&'{+:X@[-+)>+`|#`|#q1@q1@V,+V,+V,+V,+5)#5)#5)#V,+ja@-z@$*+g>@Eb#sH&PD@`O@|F.]R@3!+q1@Wx#)>+A:&'{+,'+8T@,'+>}&>}&>}&>{+>{+%>#%>#,{+,{+87$87$87$87$MX.CU.&h#&h#d_+h/+=1@})#9Z+9Z+9Z+9Z+3)#3)#3)#k %Fs%pr%pr%pr%pr%pr%pr%pr% p$pr%sD$)]$pr%pr%(a$c/$Is$0v$k`%;[#2R&K3+el*S^@;5@oX+j[+> $5h#]f#EU.sP$/ +Og%Og%fq#(1&nM%A3%&c$RA$jm$j%%cE$mf&!<%o&%lZ@IO$)<%,K@!K@6$@EM@J.%!]-~]-{]-]]-c!-^]-/]-(]-_]-:]-<]-[]-}]-|]-1]-2]-3]-4]-5]-6]-7]-8]-9]-0]-a]-b]-c]-d]-e]-f]-g]-h]-i]-j]-k]-l]-m]-n]-o]-p]-q]-r]-s]-t]-u]-v]-w]-x]-y]-z]-A]-B]-cS#C]-D]-D]-E]-F]-G]-G]-H]-B--I]-([$J]-K]-F]*0(*p|%y{-L]-M]-h)-G--N]-O]-P]-Q]-Fh*R]-S]-T]-++%W|$U]-V]-W]-X]-Y]-Z]-`]- ^-.^-+^-@^-#^-lk*$^-%^-&^-*^-=^--^-;^->^-,^-'^-@-@Kr*Kr*)^-/~-!^-QF$~^-B>-{^-+R#]^-^^-/^-(^-_^-:^-<^-[^-}^-|^-1^-2^-3^-4^-5^-6^-7^-8^-9^-0^-a^-b^-c^-d^-e^-f^-g^-g^-h^-i^-j^-k^-l^-m^-n^-o^-_d%m&*RM#9%@B%q^-6Q=u1$gB %B%i!$i!$PO$PO$PO$+F%Lv%F'$u~$WN%/A Wx Wx S&&q<$S&&q<$q<$q<$+z +z ST@ST@ST@cB v! D@$7G@7G@:|@:|@_|@(|@/|@@~ @~ WA ^|@@~ WA a~ kI@B_#!)#!)#a~ 1f kI@')#B_#')#')#')#kI@kI@kI@kI@kI@kI@kI@kI@a~ a~ a~ a~ a~ a~ a~ a~ YA YA WA WA @~ ^|@^|@^|@(|@(|@(|@(|@(|@(|@(|@(|@[|@[|@<|@$4@vR@Eu Eu Kv tG tG -! tG rG t! ;! (7 ;! O9 bP@b.#i@#Cv@C&#Z=#)d@O^#wu&~t 'U=LQ=cn=P}*@]-c|*ml= xE*U*@xE*17*J> xE*J> x{ $.@x{ J> U*@3,+Ij=aH*>H*GJ@GJ@>H*aH*Ij=GJ@zw*zw*>H*aH*(k=b=+a1+u]#23+[f.u!=[f.x{+x{+[f.HV.u!=[f.x{+OP*23+US+J> ~h&+y&Xw&Be+Xw&.y& ==.== ==.==.==3P 3P cl.cl.B9.!c.7P.xc+Ea+T_+7P.oh.oh.oh.7P.oh.y4&iS.y4&", "x5.O7.O7.xX%xX%_r+_r+x5.x5.x5.x5.x5.x5.x5.x5.Vh.is@x5.O7.xX%_r+N7.M7._r+xX%O7.O7.O7._r+M7.%0+_r+xX%O7.O7.O7._r+M7.%0+N7.M7.%0+M7._r+xX%_r+N7.N7.N7.N7.N7.N7.N7.N7.N7.O7.xX%xX%xX%_r+_r+N7.N7._r+_r+_r+_r+_r+_r+_r+_r+xX%_r+M7.%0+%0+M7._r+xX%N7._r+N7.$B#M7.O7.xX%$B#_r+_r+_r+_r+_r+_r+_r+_r+_r+N7.%0+$B#$B#%0+N7._r+$B#%0+M7._r+_r+M7.%0+$B#M7.M7.M7.M7.M7.M7.M7.M7.xX%N7.%0+M7._r+xX%N7.M7.0q.0q.0q.0q.0q.0q.0q.0q.<3+<3+<3+<3+<3+<3+<3+<3+_r+M7.%0+$B#$B#%0+M7._r+M7.%0+$B#$B#$B#M7._r+xX%<3+0q.0q.0q.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.bp.0q.v4.q3.bQ#o&=,H.3 1[ 2o 86 F( K0 ^z v7 66+/~.bF.GW.3Y.4~%eI.eI.5++ZJ.R]+K9#,'+r'@Eb#%;$GB@M/+''+''+v}%[V#[V#[V#v}%GB@$*+-n#$*+CW.2!+M]+''+OZ.Rc$Wt&b/$}n$[s#v{$[V#$*+nV@nV@nV@nV@^.*as$f*$-z@-z@ja@ja@ja@ja@ja@ja@A:&N$+2|+Y{@g~@Y{@2|+87$87$2|+2|+2|+']$']$V_#A1#99$J8%7_%6v$b2&E}%f2&ZD*A3%9v%Os%-o$a/$4V+Z]$PX#t$%F^-G^-`s*H^-o6+d'&NU#I^-G.*Kn#%*$sD$wy+V##DU.~($/-,/-'/-)/-!/-~/-{/-]/-^/-n]-//-(/-_/-:/-(-,(-'(-)(-!(-~(-{(-*[&A=&'A%8:$lq@Mc$mD@W!#W!#/:@[]@]:@7.%,k#8B@ul&dG$ab#;i$N2&1o@1o@$#$w<#%9$&r$%9$%9$.`#.`#9&$+S$Km$aC$*'$z6@K2&C5%a{$tG+^'$w2*5K&Px#!B+FD+*9@a&@Z.@UQ@I@@%o%j)$+@%~J$:/%Ls$im$1=&qr%A:&3I.e!@3/+}6$u[#ZN+H!$lh#Pz$8E$u)$E'$&E u1$TH%TH%=z *7**7**7**7**7**7*bE%eB fB Wx Wx 7)*0E%fB /0@$4@/0@$4@$4@$4@vR@vR@[|@[|@[|@}A :|@cN@:|@:|@t! t! +~ W:@;! (7 9 O9 /d@ 9 O9 .9 .9 O9 9 /d@QT@QT@QT@QT@QT@QT@QT@QT@B_#')#')#')#kI@kI@1f 1f kI@kI@1f a~ YA WA WA @~ @~ @~ @~ ^|@^|@/|@/|@/|@/|@/|@(|@(|@_|@_|@_|@:|@:|@:|@[|@<|@<|@$4@vR@vR@}g -! tG sG rG X:@;! 9 +L@RT@b.#i@#Cv@j$#Z=#P~#/m *[ Xq Fz Wk [n ]p={t ll=rU=gX=(B=3($,G $Y=#f*xD RE >+-](-+9.^(-.9.):.n3.v5.o3.o3.v5.h;#.9. >S%~h&0, Av&ZQ.Av&&, 0, %' %' {h&ZQ.Av&>S%~h&Av&Bj.Kh+7P.7P.oh.oh.y4&y4&y4&iS.iS.]@+w5&w5&", "x5.O7.O7.xX%xX%_r+_r+x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.O7.xX%_r+_r+_r+N7._r+xX%O7.O7._r+N7.M7._r+xX%O7.O7.O7._r+N7.%0+_r+M7.%0+M7.xX%O7.xX%N7.N7.N7.N7.N7.N7.N7.N7.N7.xX%xX%_r+_r+N7.N7.N7.M7._r+_r+_r+_r+_r+_r+_r+_r+xX%_r+N7.M7.M7.N7._r+xX%N7._r+N7.$B#M7.O7.xX%$B#_r+_r+_r+_r+_r+_r+_r+_r+_r+N7.%0+$B#$B#%0+N7._r+$B#%0+M7.N7.N7.M7.%0+$B#M7.M7.M7.M7.M7.M7.M7.M7._r+M7.%0+%0+N7._r+N7.%0+0q.0q.0q.0q.0q.0q.0q.0q.<3+<3+<3+<3+<3+<3+<3+<3+N7.M7.%0+$B#$B#%0+M7.N7.%0+$B#$B#@9.$B#%0+N7._r+0q.0q.0q.0q.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.bp.0q.v4.q3.bQ#bQ#,H.#k.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.q3.q3.q3.q3.q3.bp.q3.v4.v4.q3.:(+,H.0q.,H.,H.,H.,H.,H.,H.,H.,H.bp.,H.q3.,H.bp.+9.bp.,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.bp.:(+,H.q3.,H.:(+bp.+9.,H.:(+:(+:(+bp.bp.+9.+9.bp.bp.bp.bp.bp.bp.bp.bp.:(+:(+:(+:(+:(+:(+:(+:(+v4.0q.,H.q3.<3+#k.v4.<3+,H.q3.<3+<3+0q.,H.+9.]Z@_(-:(-<(-[(-}(-|(-1(-2(-3(-4(-5(-6(-7(-8(-*[ A0 9(-h5 Gd Gd 1o 86 }: V: :1 U4+<1 Lw%mU=1z+%C++q%)N.AQ@wO.-q$N^&6_&AG.,'+]b&GB@i[%''+A2$[V#6:@i[%GX%tz@&[@7J#]b&CW.;{+!V@A2$6:@!($}n$G3$ti&R4$F3$'{+nV@nV@nV@nV@^.*as$f*$-z@-z@ja@ja@ja@ja@ja@ja@B'#N$+87$2|+2|+2|+2|+2|+2|+2|+Y{@Y{@Y{@g~@g~@A1#99$7_%k5&6v$b2&HW$=h&nF$9v%a/$OX#rV$rV$T)@g~@Z]$}0$AU$:/%*>$qn&6$$H=@LQ$05*]t#av$%*$M[#I4@Nw##o+c!$HQ$}q%}q%W@+M$+89$+*+=7$fE# v@E1#.:#%M%SA$6d$a9$!I$)I$1 @W.@^K@/t#C=-0(-a(-b(-c(-d(-e(-f(-g(-h(-i(-j(-k(-l(-m(-n(-o(-p(-p(-q(-q(-r(-r(-Z~-s(-t(-u(-t(-v(-w(-x(-y(-z(-A(-B(-C(-D(-E(-F(-G(-H(-I(-J(-p]-K(-L(-M(-N(-O(-P(-Q(-R(-S(-T(-U(-V(-W(-X(-X(-Y(-Z(-`(-jx# _-._-+_-@_-#_-$_-%_-%-@&_-*_-=_-L@--_-;_-2r*i.&*--k/->_-,_-'_-s`$s`$yk%yk%)_- E$!_-~_-{_-'^-Kr*]_-^_-/_-j%-(_-__-:_-<_-[_-}_-B>-B>-|_-A&-1_-2_-%'-~g*3_-4_-5_-6_-7_-8_-iA#9_-0_-a_-b_-c_-d_-e_-f_-g_-h_-i_-j_-k_-l_-m_-n_-`/-o_-p_-q_-r_-s_-t_-u_-u_-v_-w_-x_-y_-z_-A_-B_-C_-D_-E_-F_-j&-G_-,@&v8%Ts&~c@O4&lq@=x@5B@mF@i(@-7$xb$vO@i#$i#$i#$ul&no$P4&6j$6j$4B@Ph%Ph%w<#w<#$#$M2&jq@.`#O4&k8*aC$yb$7j$Oc$+>+48+tG+^'$xU#5K&Px#uI+FD+<&@=9@0&@8&@x;@F@@/'$>J$!H$#/$YR#m4&AB%nM%mo%0G#=[@-[@eX#Uo$GC$in$-z${c$kQ Kv Rw aC%9E%8E%=z =z =z =z =z =z =z =z =z 9E%0E%7)*C1&C1&C1&@D%>8@<|@<|@$4@$4@$4@$4@$4@[|@[|@[|@:|@_|@_|@(|@(|@Y:@W:@Y:@Y:@]|@(7 9 O9 /d@ 9 O9 +L@+L@O9 9 /d@QT@QT@QT@QT@QT@QT@QT@QT@')#')#')#')#kI@kI@1f 1f kI@kI@1f 1f a~ YA WA WA @~ @~ ^|@^|@/|@/|@/|@(|@(|@_|@_|@_|@:|@:|@[|@[|@<|@<|@<|@$4@$4@$4@vR@vR@}g -! sG rG >b@t! ]|@ 9 +L@RT@UE@Cv@j$#C&#VE@z, /m *[ &[ Q*#1g /p=[n {t Js&O}*%V=(B=Ui*gy=H_-GP&QE I_-dU&@1*g|.JD=n3.v5.h;#h;#h;#h;#sQ@<(+.9.):..9..9..9..9..9..9..9..9.<(+<(+sQ@sQ@sQ@sQ@h;#h;#w{@sX%uG#uG#&r=S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=&r=*r=*r=*r=*r=uG#uG#*r=*r=&r=&r=sX%sX%*r=*r=*r=&r=&r=sX%sX%sX%uG#uG#uG#uG#uG#*r=sX%sX%*r=*r=*r=*r=&r=&r=&r=&r=S`%S`%S`%S`%S`%S`%S`%S`%):.):..9..9..9.):.S%>S%U*@Bj.Kh+7P.7P.oh.oh.y4&y4&iS.iS.iS.iS.iS.]@+", "x5.O7.O7.xX%xX%_r+_r+O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.xX%xX%xX%xX%M7.N7._r+xX%xX%xX%_r+_r+_r+xX%xX%O7.xX%_r+N7.M7.xX%N7.M7._r+O7.x5.O7.xX%N7.N7.N7.N7.N7.N7.N7.N7._r+N7.N7.N7.M7.M7.%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.xX%xX%_r+N7.N7._r+xX%xX%N7._r+N7.$B#M7.O7.xX%$B#_r+_r+_r+_r+_r+_r+_r+_r+_r+N7.%0+$B#$B#%0+N7._r+%0+%0+M7.N7.N7.M7.%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.N7.%0+@9.$B#M7.N7.M7.$B#0q.0q.0q.0q.0q.0q.0q.0q.<3+<3+<3+<3+<3+<3+<3+<3+N7.M7.%0+%0+%0+%0+M7.N7.$B#$B#@9.@9.@9.$B#%0+M7.0q.0q.0q.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.:(+q3.<3+q3.+9.+9.,H.v4.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.:(+q3.<3+<3+q3.,H.,H.q3.,H.,H.,H.,H.,H.,H.,H.,H.+9.:(+,H.,H.bp.bp.:(+q3.q3.q3.q3.q3.q3.q3.q3.q3.:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.+9.bp.:(+,H.,H.,H.:(+:(+q3.q3.,H.,H.:(+:(+:(+bp.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+<3+q3.,H.q3.v4.#k.v4.<3+bp.,H.q3.0q.0q.q3.:(+ W=J_-K_-ND=L_-y^-2G@M_-N_-O_-P_-9; Oi Q_-Q_-&[ A0 Fd#Ok#Zk O3 O3 l_ $9 eF.t[@xz# (+Co=.p=+q=~x=oT.A(@v@++7#,%+8I.vO.TZ.4F.p~+7J#Ap#V@&E)$9>+Ps%Ap#p~+06&qL.06&cU%4a&I+@7:@E)$[>%S]=8%%bG+HI+#L+OZ.$*+[-@8T@8T@8T@B:&E_+r=#>{+>{+>{+>{+%>#%>#%>#%>#d_+tc@tc@tc@tc@Ar+@h+@*+@*+@*+@*+|f+|f+9Z+9Z+4V+A3%!1&HX$~1&~1&nM%<7&o)%CA$)Q#kS$-a$5V+^B+tD$Yx%rr%K$+`H%YR#H]$r{$%*/%TA$TA$ A$6d$a9$Ls$~J$V.@F@@mq@8#%g'$R_-S_-T_-U_-V_-W_-X_-Y_-Z_-`_- :-.:-+:-@:-#:-$:-%:-&:-*:-=:--:-`~-;:->:-t(-u(-,:-$/-':-):-A(-A(-!:-!:-~:-{:-]:-^:-/:-(:-_:-::-<:-o]-[:-}:-|:-1:-f(-2:-3:-4:-5:-6:-7:-8:-9:-0:-a:-b:-c:-d:-6/-e:-#{$cS#f:-#_-:{-u/*g:-_-,_-'_-l/-m:-cZ$cZ$n:-o:-[--p:-8'-q:-r:-s:-d;-*l*6;-(X=t:-u:-v:-w:-x:-y:-z:-A:-B:-C:-$'-D:-E:-F:-G:-H:-I:-J:-K:-f'-L:-M:-N:-O:-O:-P:-f_-Q:-R:-h_-X/-S:-T:-U:-`/-V:-`/-W:-X:-Y:-r_-Z:-`:- <-.<-+<-@<-#<-$<-%<-&<-B_-C_-*<-=<-F_-})--<-;<-><-jq@~c@$#$1o@1%$]z@ D#};*Z(%La$F,$F,$F,$F,$ul&X!#wO@>i$>i$Tu@mD@mD@Mc$Mc$1%$bB@Xr#bB@&K@3B@l(@e}@a1@EB$yP$O&+>'@Mx#`M@$v$4~#wr+J@@0&@9=@x;@F@@5Z+WL$qn%`.+*W#Hz$(;%dU%D~&ks$3r$.I$kx${[%q%$3H%9[*r<+BG%j!$|f u1$gB aC%9E%=z =z =z =z =z =z =z =z =z =z 9E%0E%C1&a|&G=$G=$]A >8@<|@<|@<|@<|@[|@[|@[|@[|@[|@:|@_|@/|@^|@@~ @~ (7 (7 ]|@]|@(7 /d@ 9 O9 9 9 O9 +L@+L@O9 9 9 B_#B_#B_#B_#B_#B_#B_#B_#')#')#')#kI@kI@1f 1f 1f ')#kI@1f 1f a~ YA WA WA ^|@^|@/|@/|@(|@(|@(|@_|@[|@[|@[|@[|@<|@<|@$4@$4@Eu Eu Eu Eu vR@vR@$4@$4@}g tG rG r[@X:@+~ ]|@O9 +L@bP@UE@j$#C&#Y=#P~#Bv@/m Bu=,<-J~#1g /p=/p=/p=yD [!-hV=DP#Ui*Lp='<-)<-$T&dU&HP&#'#JD=[v.t4.h;#sQ@sQ@<(+.9..9..9.<(+<(+sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@<(+<(+<(+CI#sX%*r=*r=sX%S`%S`%&r=&r=&r=&r=&r=&r=&r=&r=&r=sX%sX%&r=&r=*r=*r=uG#uG#uG#uG#*r=*r=&r=&r=sX%sX%uG#uG#uG#*r=*r=&r=&r=&r=uG#*r=&r=sX%sX%sX%&r=&r=&r=&r=&r=&r=*r=*r=*r=*r=uG#*r=&r=sX%S`%CI#w{@Q+&cO@g|.S%%' {h&ZQ.&, %' >S%U*@h~ 7P.7P.7P.oh.oh.oh.oh.iS.iS.y4&y4&y4&oh.", "x5.O7.O7.xX%xX%_r+_r+O7.O7.O7.O7.O7.O7.O7.O7.xX%xX%xX%xX%O7.O7.O7.O7.M7.N7.N7._r+xX%xX%O7.O7.xX%xX%xX%xX%_r+_r+N7.N7.O7._r+N7._r+x5.is@x5.xX%M7.M7.N7.N7.N7.N7._r+_r+N7.N7.M7.M7.%0+%0+%0+$B#M7.M7.M7.M7.M7.M7.M7.M7.xX%xX%_r+_r+_r+_r+xX%xX%N7._r+N7.$B#M7.O7.xX%$B#N7.N7.N7.N7.N7.N7.N7.N7._r+N7.%0+$B#$B#%0+N7._r+%0+M7.M7.M7.M7.M7.M7.%0+M7.M7.M7.M7.M7.M7.M7.M7.M7.$B#@9.@9.%0+M7.%0+@9.0q.0q.0q.0q.0q.0q.0q.0q.<3+<3+<3+<3+<3+<3+<3+<3+M7.M7.M7.%0+%0+M7.M7.M7.@9.@9.@9.@9.@9.@9.$B#$B#0q.0q.q3.q3.,H.,H.:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.:(+q3.0q.q3.:(+bp.,H.<3+,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.q3.0q.q3.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.bQ#bp.,H.,H.bp.bp.,H.0q.q3.q3.q3.q3.q3.q3.q3.q3.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.+9.+9.bp.:(+,H.,H.,H.,H.0q.q3.q3.q3.,H.,H.:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+0q.q3.q3.0q.#k.#k.v4.0q.+9.bp.,H.q3.0q.0q.q3.^n#R5.it=6f+~<-{<-=%+]<-5T.^<-'>-/<-(<-_<-:<-&[ s[ PW@Ok#Pk#'3 3m _)@Pg Bm 99 Sh Vi u%Gr }0 Gr #i#{`+&>#'4+1j+sO.HG.}H#9I.%*+k]%J+@J+@ B# B#JG& B#1Y.+7#)N.uL.FG.ER.__%F)+cU%^8=}s#f#@(v#PO%G+@n@%N/+[-@8T@8T@8T@B:&E_+r=#>{+>{+>{+>{+%>#%>#%>#%>#Ar+tc@V,+W0+V,+tc@@h+|f+@*+@*+|f+|f+9Z+9Z+9Z+wy+<7&nM%nM%nM%<7&<7&CA$0T+FC$FC$5V+'/#'/#Wt+Wt+^B+4V+&c$L$+oo%+6$`.+}v&j^#^A&>Q#'Y&1_+t8+&h#E_+%;$<<-HQ$2P+2P+W@+W@+{l$km$RA$RA$L>%LB$LB$Ut$Tt$eD$b9$Ls$WL$AM@CO@k#$7&@Ad%[<-a(-}<-|<-1<-2<-3<-4<-5<-`_-6<-7<-8<-9<-0<-a<-b<-c<-d<-e<-f<-g<-h<-i<-t(-,:-j<-,:-k<-l<-m<-n<-B(-o<-p<-p<-q<-r<-s<-t<-u<-_:-_:-v<-w<-x<-y<-z<-A<-B<-C<-D<-r'-E<-F<-G<-H<-I<-J<-K<-L<-M<-N<-O<-P<-um&hk$Q<-f:-R<-S<-T<--w&|@%nZ$H1%Xu%8F%Wu%/3%U<-EH%V<-W<-X<-Y<-Z<-qz$`<- [-.[-+[-@[-#[-#'-$[-p>-%[-%[-&[-*[-*[-=[--[-;[->[-WI%I2%,[-'[-t.-)[-6g&Z2$D &@)$![-~[-{[-][-^[-N:-N:-/[-Q:-R:-f_-([-_[-X/-:[-<[-[[-}[-V:-|[-1[-2[-3[-4[-5[-6[-7[-8[-+<-+<-@<-9[-0[-d^-d^-a[-b[-c[-n~-d[-e[-f[-Vu@g[-h[-~m@Oh%A+#6B@2b#2e$`!#%K@%K@%K@F,$i#$ul&X!#X!#e9#e9#6X@6X@lF@nD@5B@T!*P(#~v#=T@hF@kF@IQ@ez@Pi+dh#bH#6(@ew+}o+ea%%P*Um#-4+CD+W.@~K@bN$pw$bv$>b$3w+z1#Hw%X@+6W._T#m&%@A$}_$nr&kI%i[-j[-6(*Gz%m;%}C%EG%oF%Nt%TH%TH%*7*=z 9E%9E%9E%9E%9E%9E%9E%9E%=z 9E%7)*a|&H=$}>$}>$]Y@[|@[|@[|@:|@:|@:|@_|@_|@:|@_|@(|@/|@@~ YA a~ 1f +L@O9 9 /d@/d@ 9 9 O9 9 O9 O9 O9 O9 O9 O9 9 B_#B_#B_#B_#B_#B_#B_#B_#')#')#kI@kI@1f 1f a~ a~ kI@kI@1f a~ YA WA @~ @~ (|@(|@(|@_|@_|@_|@:|@:|@$4@$4@$4@vR@vR@Eu Eu Eu u1$u1$&E Kv Eu vR@$4@$4@-E sG r[@t! +~ Y:@/d@+L@.9 uR@i@#C&#Y=#VE@N~#A_#cw &[ $)#y' /o {t [n [n rU=(T=VA DP#gy=DP#GP&k[-6`=l[-m[-u4.e6@cO@o3.H*>H*lt*lt*lt*lt*OP*OP*x{+x{+x{+x{+x{+OP*OP*23+23+23+23+23+23+OP*x{+[f.[f.[f.B9.Bv&Bv&Bv&ZQ.Av&&, &, 0, {h&&, Bv&Av&~h&{h&3<@h~ 7P.7P.7P.oh.oh.oh.oh.iS.y4&y4&oh.7P.7P.", "x5.O7.O7.xX%xX%_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.O7.O7.N7.N7.N7._r+_r+xX%O7.O7.O7.xX%xX%_r+_r+N7.N7.N7.O7._r+N7._r+x5.is@x5.xX%%0+M7.M7.N7.N7._r+_r+xX%N7.N7.M7.M7.%0+%0+%0+$B#M7.M7.M7.M7.M7.M7.M7.M7._r+_r+_r+_r+_r+_r+_r+_r+N7._r+N7.$B#M7.O7.xX%$B#N7.N7.N7.N7.N7.N7.N7.N7._r+N7.%0+$B#$B#%0+N7._r+M7.M7.M7.%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.$B#@9.@9.%0+M7.%0+@9.<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+%0+M7.M7.M7.M7.M7.M7.%0+@9.@9.$B#$B#@9.@9.@9.eO@q3.q3.q3.,H.,H.:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.:(+,H.0q.q3.,H.:(+,H.q3.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.q3.q3.q3.,H.:(+,H.,H.,H.,H.,H.,H.,H.,H.bQ#bp.,H.,H.bp.bp.,H.0q.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.bp.bp.bp.bp.:(+,H.q3.q3.0q.q3.q3.q3.,H.,H.:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+0q.q3.q3.<3+#k.r&So#`D#Z3 B4 #, -[ >! P9 4C#AD AD M-$8[%f#-) $ G@2O.~%@Z #83@n^#,t#+g+@K.bI.IG.YR%1I.1I.1I.YR%yL.Fh+>N+HR.]Q.8F.}H#0I.VN&0<+5a&5a&/Y./Y.*S+f5%M4&4F.4F.4F.fT.M4&zG.3I.7J#7J#-n#-n#-n#-n#V@&%>#Ar+ek@[&#[&#[&#ek@s[$NX.NX.NX.NX.2)#2)#8I#8I#9Z+CA$EJ%oM%&D%.I%.I%&q&<>%7%%{($Uj${f#{f#_g$`R#3/+,/#O]+88$Y{@1/%M$+~)&zx#F3$Z)+OZ.''+E)+4g@T2@zG.7:@$L+7O$7O$`a$W@+{l$km$L[#RA$f4%oq@oq@cE$ps$Jc&b9$!I$WL$zM@CO@k#$m5$Ad%[<-a(-y[-z[-A[-B[-C[-D[-E[-F[-G[-H[-I[-J[-K[-Z^-L[-M[-N[-f<-O[-P[-Q[-R[-$/-&/-S[-T[-U[-V[-W[-m<-X[-Y[-~:-p<-p<-Z[-C(-`[- }-.}-+}-@}-#}-$}-%}-&}-*}-=}--}-;}->}-,}-'}-)}-!}-~}-{}-5~-]}-^}-/}-(}-_}-X;-:}-<}-_W#[}- _#N|#p6&/W#GZ#K3#>Q%mL$pO%}}-ym%uk%:2%:--[1%c;-Kh%|}-1}-1}-2}-3}-4}-5}-6}-I/-3_-U,-N %7}-8}-7}-9}-0}-ym%a}-;U$}}-.+%aZ$9K$|J#TM#b}-3=#E;#c}-d}-e}-f}-g}-h}-i}-P:-j}-j}-i_-k}-T:-l}-m}-n}-o}-p}-q}-V:-3[-r}-s}-t}-u}-v}-w}-x}-y}-y}-z}-A}-B}-C}-D}-E}-F}-G}-H}-I}-J}-K}-L}-M}-]8&-0$Zg$7B@6Z$!W$R*$2x&X2$oE$%K@F,$i#$ul&xb$xb$x<#x<#N}-O}-(E%h*%uH@TJ@P}-`~%P}-X}$lD@ci$z^$#d$4m@hD+T1+bm@##$Um#Rw&^t#T!$I$+pw$%6$c!*`]$gZ.89$;i#&K$h+&{q$7a&g2%#A$A(%LB@V)@Z,@%X&%X&1H%=;%S-$EG%ZI$GJ%GJ%FD%TH%TH%TH%gB gB gB gB gB gB gB gB gB Rw +z #W@]Y@#~ (Y@(Y@:|@:|@:|@_|@(|@(|@/|@/|@(|@/|@^|@WA a~ 1f kI@')#.9 +L@O9 9 9 9 O9 O9 O9 O9 O9 9 9 O9 O9 O9 B_#B_#B_#B_#B_#B_#B_#B_#kI@kI@kI@1f 1f a~ a~ a~ 1f a~ YA YA WA @~ ^|@^|@_|@_|@:|@:|@:|@[|@[|@[|@vR@vR@Eu Eu Kv Kv Kv Kv Nt%Nt%u1$&E Eu vR@$4@$4@-! rG t! W:@Y:@]|@ 9 +L@@A@[`@Cv@Y=#VE@ir#0u#}n 6v $)#y' I~#@p=/p=6U%0C=O}*[!-%V=DP#DP#4Z=>G Q}-$T&6`=v -dO@$$+):.o3.<(+v5.h;#sQ@<(+<(+sQ@n3.o3.sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@h;#sQ@sQ@<(+.9..9.):.):.S`%&r=*r=&r=S`%CI#sX%*r=*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%&r=&r=*r=*r=uG#uG#uG#uG#*r=*r=&r=&r=sX%sX%N:*N:*N:*uG#uG#*r=*r=*r=*r=&r=S`%CI#CI#sX%&r=uG#sX%sX%sX%&r=*r=uG#uG#uG#&r=&r=&r=&r=sX%sX%sX%sX%rQ@dO@g|.#+x@Nu#Nu#[&#Nu#ek@s##s[$s##s[$s[$s[$NX.NX.2)#|f+0T+c]%7R+<>%)M$tF%M@%n>#8R+uD$~f#@f$@f$rK@Rs%>I@)t@u@+3&#YJ.cv$EU.Ap#2/+i+&N]+)`+tz@qL.h&@'N.)(@VN+/M$-Q+7O$>)&`a$'Q#{l$sD$L[#]m$Bj$8F$-b&Jc&M1#4($c8$d9$5Z+F@@k#$m5$7%$`}- |-.|-+|-@|-#|-$|-%|-&|-*|-=|--|-;|-5]-7]->|-L[-M[-,|-'|-)|-!|-!|-~|-{|-]|-^|-/|-(|-U[-_|-m<-X[-:|-q<-Z[-~:-Z[-q<-{:-<|-[|-}|-||-1|-2|-3|-%}-4|-5|-6|-7|-8|-8|-9|-0|-a|-b|-5^-c|-d|-e|-f|-g|-h|-i|-d:-j|-e:-k|-#{$xn&2{$Iq$wn&SC$l|-vZ%x:$m|-6Z&n|-o|-nJ$p|-q|-q|-r|-s|-[3$[3$t|-}S$u|-v|-T1$73$63$1S$6Z&5Z& i%w|-1G%zf%aR$^P$x|-l|-yQ#+8$ai&'~#y|-z|-A|-B|-C|-D|-E|-F|-G|-H|-I|-J|-U/-K|-L|-T:-m}-M|-N|-V:-O|-O|-P|-}[-}[-Q|-R|-S|-T|-U|-V|-W|-X|-y}-Y|-A}-Z|-`|- 1-.1-+1-@1-#1-$1-%1-&1-xP&(z@8B@jW#D,$2x&mD%Q$$OG#,Q$ED$X2$%K@F,$i#$La$La$!W$z<#GQ@3e$gM@0Z@^_%*1-q|+q|+G=@/A#61$N^@{a$F2@hD+K&+18+G]$^k#(`#1I&kx&$6$*W#vy+I3$YX.2=$w;%7%%4Y+T-$.1%{j%y[%AD%{I$B(%hk@iq$.6%#c*>&&D'$'J Qv H%$],$Nt%Nt%FD%FD%9C%9C%gB gB gB gB gB gB gB gB +z ^A @W@]Y@#~ (Y@(Y@(Y@:|@_|@_|@(|@/|@^|@^|@@~ WA WA YA a~ kI@')#B_#B_#.9 +L@O9 O9 9 O9 O9 +L@+L@O9 9 9 9 9 O9 +L@')#')#')#')#')#')#')#')#kI@kI@1f 1f a~ a~ a~ YA WA WA @~ ^|@/|@/|@(|@(|@:|@[|@[|@[|@<|@<|@$4@$4@Eu Eu Eu Kv Kv &E &E &E Nt%u1$&E Kv Eu vR@$4@$4@tG >b@+~ ;! ]|@(7 O9 .9 RT@[`@j$#VE@P~#O~#u_$>p D,#J~#=1--1-/p=[n @' b:*SE O}*Lp=DP#VA (e*)<-k[-;1->1-1o.gX.*u..9.t4.w5.v5.n3.n3.h;#h;#h;#n3.n3.sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@<(+<(+<(+.9..9..9..9..9.sX%&r=*r=sX%CI#CI#sX%uG#*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=&r=&r=uG#uG#*r=*r=&r=&r=sX%sX%uG#uG#uG#*r=*r=&r=&r=&r=&r=&r=sX%sX%sX%&r=*r=uG#&r=&r=&r=&r=*r=*r=*r=*r=S`%sX%sX%&r=&r=*r=*r=uG#cO@g|.0+,1-R}-W`=W`=W`=W`=zw*GJ@lt*lt*FG*FG*23+US+US+US+x{+x{+OP*OP*23+23+US+US+x{+x{+x{+x{+[f.[f.[f.[f.Bv&ZQ.Av&&, &, &, Av&ZQ.B9.ZQ.ZQ.B9.ZQ.{h&&, 8P.k&i>*gG#@9 H0 Lf Lf Tg 9_$Uh lX%oH oH }0 o!&o!&o!&}0 o<+}/ =W@U!@O2+YP.Xj ;n#10 PU.f'#]N.)T@kT.fI.dI.~#+6F.7I.7I.7I.ER.FG.~T%__%P.%P.%P.%p~+p~+p~+-n#[-+43@;t@:K@:K@:K@:K@:K@:K@:K@:K@sy#sy#Nw#Nw#li@6/%M=&Gn#h+&Yk#z+%#B$Jy$:V#T-$5O#-{#;{#%$#L+@hN$!t@Ou !t@0#&pZ.i>@E[#~f#w[#A[# @${>+oZ.$$#A(@0I.T.$VN+` @E-%6W.;i#ZX.89$km$K[#ar$5d$Cj$2h$N1#N1#bv$qn%d8$WK+1 @x;@9=@7%$l*-}1-|1-11-21-31-41-51-61-71-81-91-01-a1-b1-c1-8]-8]-9]--:-d1-~|-e1-f1-g1-W[-h1-i1-j1-k1-l1-m1-Y[-Y[-{:-{:-C(-C(-C(-C(-n1-<|-o1-p1-q1-r1-s1-t1-u1-v1-w1-x1-y1-z1-A1-B1-@(-}[-C1-D1-D1-3^-E1-4~-F1-G1-H1-I1-`(-J1-jx#K1-L1-M1-N1-s]$q]$aq&6U&O1-RU$O|#O|#>w&>w&F:-F:-P1-Ws&Q1-R1-S1-T1-S1-Kq$%~#p]$O9&Vg$VS$)+&=S$*p%&p%P##5J$ZO$j|&no&SC$U1-s]$%v#V1-2/-W1-X1-Y1-)}-Z1-`1- 2-.2-+2-@2-#2-$2-%2-&2-*2-=2--2-;2->2-,2-P|-N|-'2-o}-;2-)2-!2-~2-{2-]2-f1-w(-^2--)-*(-/2-(2-_2-:2-<2-[2-}2-|2-12-iM&22-q9#RC$>L%N$$32-D$&*-$ m%}s%$F%DD$X2$*N%Ka$W]#iK$z<#GQ@HM#+T@FQ@M2%EQ@:a+:a+X;@dB+U8+nf+x^@sf+T1+!-@j}@K@+(`#}I&!L&_$&Hz$N:+2=$;i#9M@|(%y[#8u%}(&d]@':%B(%=o%jQ Z;$uK xr$h8 h8 h8 Z{$Z{$wt wt *E *E u1$u1$$B%FD%FD%7C%&E &E &E &E &E &E &E &E $4@<|@[|@:|@_|@_|@_|@_|@_|@_|@(|@/|@^|@@~ WA WA 1f 1f kI@kI@')#B_#B_#B_#O9 O9 9 9 9 O9 +L@.9 +L@O9 9 /d@/d@ 9 O9 +L@')#')#')#')#')#')#')#')#1f 1f 1f a~ a~ a~ YA YA ^|@^|@/|@(|@_|@:|@:|@[|@[|@<|@<|@<|@$4@$4@vR@vR@Eu Eu Eu Kv Kv Kv &E &E &E &E Kv Eu Eu vR@$4@$4@tG r[@Y:@]|@(7 /d@+L@@A@RT@b.#C&#P~#N~#0u#85*D,#Fz po=2g Io=6U%0C=b:*rg*SE s|*HN#(B=#f*p#-42-42-l[-V`=D6.XY.rQ@v5.h;#p3.n3.n3.n3.n3.h;#sQ@<(+.9..9..9..9..9..9..9..9..9.):.):..9..9..9..9.<(+<(+sX%&r=&r=sX%CI#CI#&r=uG#uG#uG#uG#uG#uG#uG#uG#uG#N:*uG#uG#*r=&r=sX%sX%S`%uG#uG#*r=*r=&r=&r=sX%sX%*r=*r=*r=&r=&r=sX%sX%sX%sX%sX%*r=uG#uG#uG#uG#uG#*r=*r=*r=*r=&r=&r=&r=&r=sX%sX%&r=&r=*r=*r=*r=*r=):.):..9..9..9.):.K./3 IW.zO.7v#h~@7v#h~@~#+s)&FR.UZ.FG.+]%__%+]%__%+]%zG.Eb#}&#ja@TU#&h#TU#ja@W #ja@4Z@#o+Nq@#o+TU#&h#P$+{f#0]@r0&5Y+z4%v[#hh$F)$Qz$*{#jn$rm#wC$Gh+*>#},%-p@Y1@nm@N6@MM.to@ /@D:%-S+u[#KP#o~${`+v8+@6#q1&e2-|R& B# B#Ls&6W.L#$ZX.Z+$PX#!U#ar$-c$_a$L1#,p$J$+J$+ ^$}{#~K@x;@8&@X6$f2-g2-h2-i2-j2-k2-l2-m2-n2-o2-p2-q2-r2-s2-t2-r(-8]-8]-8]-;:-u2-v2-x}-w2-x2-b]-y2-i1-z2-A2-B2-C2-o<-B(-{:-r<-]:-D2-D2-D2-E2-F2-^:-G2-E(-H2-I2-s1-J2-K2-L2-M2-N2-O2-P2-Q2-R2-S2-Q|-[[-T2-U2-V2-W2-X2-Y2-Z2-`2- 3-.3-+3-@3-#3-$3-:A$%3-&3-.P$}D#@&#O9&S6$S6$73$!+&*3-*3-R6$=3--3-;3--3->3-,3-'3-)3-!3-~3-{3-]3-^3-^3-nu%/3-(3-(3-~(-v^$~(-v^$_3-(3-:3-1/-<3-[3-C<-}3-|3-13-23-33-43-43-53-63-73-83-*2-*2-=2-93-,2-03-,2-a3-=2-b3-c3-,2-d3-U|-{2-e3-f3-g3-h3-i3-j3-k3-l3--(-Y_-m3-n3-o3-p3-q3-r3-s3-t3-@D#3S$wM$:i%0Z$h&$G V`=+e.h;#JD=p3.u4.g|.sQ@sQ@h;#n3.n3.h;#.9.].u`.u`.u`.HV.HV.u!=u!=HV.HV.u!=[f.[f.x{+OP*OP*0, 0, {h&~h&{h&&, ZQ.Bv&ZQ.0, {h&0, ~h&x*$%' ZQ.=~@=~@ .r .r S-@.r G> ,J Tj Ld Tj Rg Cn #9 I0 (G 6e+!2+o^#1j+JG.&*+Dh+8F.*N.Z_@eF&s)&pL.s)&3#+ER.zG.|&#K9#|&#K9#|&#K9#|&#R]+Uh=R]+}F.Qv#}F.Qv#`J.2Y.IG.Xm+b]@Q;%'Q+;H$}=%Bo+V{$OA$lx$i!@l8$ix@1d$F%$=L%i8 q$#L2$Qs$jx@a>&j4#NB@2c#C(@LZ@wz@w'@t'@@Y.{~%b^&Xx#T!&pZ%-i#L{$N:+km${m$ln$S5+,L$qw$Ej$Ms$cN#Kn#v,$zM@RQ@O)@x9#P&$(3*H3-I3-J3-K3-L3-M3-N3-O3-P3-Q3-R3-e1-.{-S3-0]- {-T3-U3-v2-~|-V3-W3-o<-X3-Y3-Z3-y2-`3- 4-.4-X3-+4-~:-q<-C(-r<-r<-r<-@4-#4-$4-%4-&4-*4-*4-=4--4-;4-;4->4->4-,4-,4-'4-)4-!4-!4-~4-{4-]4-^4-a|-/4-3^-J{-(4-_4-:4-:4-<4-[4-}4-|4-14-24-34-44-54-z]-nA#64-xn&p]$|]$S6$8;$~,-74-74-74-84-84-94-04-a4-b4-e>-c4-d4-d4-e4-L!-(;-(;-f4-L!-g4-h4-i4-j4-k4-N,-l4-C<-m4-n4-o4-p4-q4-63-r4-s4-t4-u4-v4-w4-93-x4-y4-z4-z4-A4-B4-C4-D4-D4-a3-z4-E4-F4-G4-H4-I4-J4-K4-L4-W3-M4-N4-O4-P4-Q4-R4-S4-T4-!!-5b$U4-gl%3M$>p%~a%pc%pk%Bi%-7% m%j`$-7%-7%u0%,R$|;$Ka$!W$N(#(E%nO@GQ@GQ@0Z@]:@;k@^c@)c@'@SO@3~#S%;n.;n.;n.;n.;n.;n.;n.;n.;n.;n.>n.>n.!D+`b&", "xX%xX%xX%xX%xX%xX%xX%_r+xX%xX%xX%N7._r+x5.dD._r+xX%xX%O7.O7.xX%xX%_r+xX%xX%xX%xX%xX%xX%xX%xX%xX%x5.is@x5._r+N7._r+O7._r+_r+_r+_r+_r+_r+_r+_r+%0+%0+%0+M7.M7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.%0+M7.M7.M7.N7._r+_r+_r+%0+M7.N7._r+_r+N7.M7.%0+_r+_r+_r+_r+_r+_r+_r+_r+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+%0+%0+%0+%0+%0+v4.v4.v4.v4.v4.v4.v4.v4.q3.q3.q3.q3.q3.q3.q3.q3.M7.M7.M7.M7.M7.M7.M7.M7.$B#%0+M7.%0+@9.eO@@9.$B#:(+:(+:(+,H.q3.q3.q3.0q.q3.q3.0q.0q.0q.q3.,H.:(+,H.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.:(++9.bp.,H.<3+,H.,H.bp.+9.+9.bp.:(+,H.bp.+9.+9.+9.bp.,H.0q.<3+,H.q3.0q.<3+<3+0q.q3.,H.,H.,H.,H.,H.:(+bp.bp.+9.<3+,H.bp.bp.,H.,H.bp.o&=+9.bp.,H.q3.q3.,H.bp.+9.,H.,H.,H.,H.,H.,H.,H.,H.bp.<3+v4.,H.+9.,H.q3.:(+:(+:(+,H.,H.,H.:(+bp.+9.bp.bp.bp.bp.bp.bp.bp.bp.<3+,H.,H.q3.:(+o&=bp.v4.<3+:(+bp.0q.0q.bp.+9.,H.+9.<3+8'%[{.#k.,H.bp.bp.,H.,H.,H.,H.,H.,H.,H.@9.$y#Ak=sZ J3.S<+Ck=@5-#5-V}-rW+$5-%5-Hg &5-no=T=#*5-=5-]7 -8 1;#Xm@7q#zn#d1#d1#[c#;f#R~#S^#jt@Kz +t#wy +t#+t#+t#+t#jt@jt@KH#jt@R~#:r@s{ S~#L~ B_#xn#]t ^1 ^1 N1 N1 /1 5, /1 /1 :t .r S-@[} p| #9 ^+Z #83@eW.dW.f!@g$v'@uK@C;$u7 R_+10 cW.+Y.IG.U.$1e%(,%pZ%-i#'r%M$+pr%jm$Sj$@d$@d$Ms$O#%25%+l#46+XK+!K@4 @O,@6~#;5->5-,5-'5-)5-!5-~5-{5-]5-^5-/5-(5-_5-:5-a]-<5-S3-S3-[5-}5-v(-z}-|5-Z[-15-25-25-35-`3-`3-45-55-X3-p<-Z[-q<-{:-{:-{:-65-@4-75-#4-&4-&4-D(-*4-85-95-95-;4-05-;4-05-a5-b5-c5-d5-e5-;2-V:-f5-g5-h5-i5-j5-k5-l5-m5-n5-o5-p5-q5-r5-s5-t5-u5-v5-w5-~,->3-x5-y5-y5-54-z]-,3-z5-A5-A5-A5-B5-B5-C5-C5-D5-E5-d>-F5-G5-G5-G5-H5-I5-I5-!!-!!-J5-K5-L5-M5-N5-O5-P5-Q5-R5-S5-T5-U5-V5-W5-r4-X5-u4-Y5-Z5-`5-93- 6-.6-A4-A4-+6-@6-#6-$6-x4-A4-%6-&6-*6-=6--6-I4-;6->6-,6-t!-'6-)6-!6-~6-{6->(-]6-^6-/6-i4-(6-_6-_B$Co%3b%Ke%|d%VN$Wb%&0%j`$j`$j`$ m%'@]`#_6$/`#05*:6-<6-n+%[6-L/&gU$h%%%l%iq+xJ+7:%BG%=H$u1$aC%=B%_:&}6-}6-d9&nr%jy%Ov n($@}$@}$Nw Nw Cu Cu u1$u1$G'$G'$oF%oF%&E Kv Eu $4@[|@:|@_|@(|@_|@_|@(|@/|@^|@@~ @~ WA ^|@@~ YA 1f kI@')#')#')#')#B_#B_#QT@QT@!)#!)#!)#O9 /d@(7 /d@+L@.9 O9 9 .9 +L@+L@+L@O9 O9 9 9 ')#kI@kI@kI@1f 1f 1f 1f YA YA WA WA WA @~ @~ @~ /|@(|@_|@:|@<|@$4@vR@Eu Eu Eu Eu Eu Eu Eu Eu Eu vR@vR@vR@Eu Kv Kv Kv &E &E &E &E &E Kv vR@$4@<|@rG t! Y:@(7 /d@O9 RT@[`@i@#Y=#N~#O~#N~#Ut&(X%1g Yp 2g Ho=|6-b:*Z4-b:*Nj=rU=[C iX=xD @f*@f*42-16-26-Z`+JD=o3..9.h;#u4.n.>n.>n.>n.", "xX%xX%xX%xX%xX%xX%xX%xX%O7.x5.xX%_r+_r+O7.is@O7.O7.O7.O7.O7.O7.O7.O7._r+_r+_r+_r+_r+_r+_r+_r+xX%x5.is@x5._r+N7._r+O7._r+_r+_r+_r+_r+_r+_r+_r+%0+%0+M7.M7.N7.N7.N7._r+N7.N7.N7.N7.N7.N7.N7.N7.%0+%0+%0+%0+M7.M7.M7.N7.N7.N7._r+xX%xX%_r+N7.N7._r+_r+_r+_r+_r+_r+_r+_r+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#<3+<3+<3+<3+<3+<3+<3+<3+q3.q3.q3.q3.q3.q3.q3.q3.%0+%0+%0+%0+%0+%0+%0+%0+%0+M7.N7.M7.$B#@9.$B#%0+:(+:(+,H.,H.,H.q3.q3.q3.bp.:(+,H.q3.q3.q3.,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.q3.,H.bp.bp.,H.0q.<3+0q.,H.:(+bp.bp.bp.:(++9.+9.+9.+9.bp.,H.0q.<3+,H.q3.q3.0q.0q.q3.q3.,H.bp.:(+,H.q3.q3.:(++9.bQ#q3.:(++9.bp.,H.q3.:(++9.bp.:(+:(+,H.,H.:(+:(+bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.<3+v4.,H.+9.,H.q3.:(++9.bp.:(+,H.,H.,H.:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.,H.bp.:(+q3.,H.bQ#:(+#k.0q.:(+:(+0q.q3.+9.+9.,H.bp.v4.[{.8'%q3.+9.+9.:(+,H.,H.,H.,H.,H.,H.,H.,H.)Z%$y#4B&&R+bM.s^+36-46-W--Of@2m*56-66-76-&5-86-67#96-N,# r &l :c#7.#26 b4#'m#d1#e1#f1#ew ew +t#Kz Kz Kz Kz Kz Kz %0@%0@%0@Kz C_#;f#S~#}c#$~ /M a7#m[#Qk#Qk##A@#A@l.#|u $A@|u y, y, fw _,@VH S-@;K.F(@F(@7O.iR. ^+_a w'@K8#K8#f'#M;#M;#/N.9s%zL.1j+JB@JB@JB@JB@JB@JB@JB@}c@}c@<.%,Q.,Q.JB@uz@{[##6#G~&UP.,n#_8%=v$bL#G)$G)$I!$R-$n[#S-$7r @y Z{$a|$.}$n($a|$Au ;b ;E 0> 8r kl 8V X Pe 7V g*$R_+`]+oT.9s%@K.y^=6'&}-+EU.9>+ZR#&c$L[#ar$Sj$Ms$Hs$08$R!$9~#Kq@DI+R)@;B+L@+X<#$v$06-a6-b6-c6-d6-e6-f6-y!-v!-g6-h6-{|-i6-j6-k6-.{-.{-l6-s!-m6-n6-o6-p6-q6-q6-r6-s6-t6-u6-v6-Z3-55-+4-p<-!:-o<-!:-p<-w6-x6-y6-65-75-&4-%4-z6-A6-B6-B6-95-C6-95-C6-D6-E6-F6-G6-v}-v}-5[-O|-H6-I6-J6-K6-L6-L6-M6-N6-m5-O6-P6-Q6-Q6-R6-S6-A5-T6-U6-V6-W6-X6-X6-Y6-{,-Z6-Q6-`6- 7- 7-.7-.7-+7-+7-@7-#7-$7-%7-&7-&7-*7-=7-=7-=7-=7-=7--7-;7->7-,7-O5-'7-)7-!7-~7-{7-]7-]7-v4-v4-u4-^7-/7-]7-(7-_7-C4-+6-:7-:7-<7-[7-}7-|7-17-'4-27-%6-37-47-57-67-77-87-97-n<-07-a7-b7-c7-d7-e7-f7-g7-h7-i7-j7-k7-lu%l7-Ao%@0%Ke%'B%qc%5b%wM$0Z$&0%Vk%8 >8 WA a~ 1f ')#B_#QT@QT@QT@!)#!)#!)#!)#))#))#))#+W@@A@+L@O9 O9 .9 .9 +L@ 9 @A@@A@.9 .9 +L@+L@+L@O9 ')#')#')#kI@kI@1f 1f a~ WA WA @~ @~ ^|@^|@/|@/|@:|@:|@[|@<|@vR@Eu Kv Kv Eu Eu Eu Eu Eu Eu Eu Eu Eu Eu Kv Kv Kv &E &E &E Kv Kv &E Kv Eu vR@<|@[|@X:@W:@]|@ 9 O9 @A@uR@UE@j$#VE@0u#Ut&Ut&tq=S2*@p=1g $D=Y4-o7-b:*Z4-Z4-Z4-rU=p7-xD q7-r7-s7-42-t7-Gf.-Z+rQ@:^+):.):.D6..9.<(+sQ@sQ@h;#h;#sQ@<(+.9..9..9..9..9..9..9..9..9.<(+.9.):.):.):.):..9.<(+&r=&r=*r=*r=*r=&r=sX%S`%&r=&r=*r=*r=uG#N:*vu#vu#uG#uG#uG#uG#uG#uG#uG#uG#N:*sX%sX%N:*N:*sX%sX%N:**r=&r=sX%sX%sX%&r=&r=*r=&r=uG#vu#N:*&r=S`%S`%sX%*r=*r=*r=*r=*r=*r=*r=*r=CI#&r=N:*uG#S`%CI#sX%N:*8 G~ fG#Qe ` #GB%K8#/N.q1&y^=%*+F)+E)+]f#Z]$&c$80$]m$%u$5F$0$$]B+0~#Kq@CM@X.@Y.@L@+X<#y7-z7-A7-B7-c6-C7-D7-E7-m]-F7-G7-H7-I7-/|-j6-k6-k6-l6-:5-u(-J7-K7-L7-15-M7-M7-r6-N7-O7-P7-Q7-R7-55-X3-X3-S7-C2-C2-55-T7-U7-U7-w6-@4-#4-%4-%4-%4-z6-z6-V7-V7-V7-V7-W7-E6-X7-Y7-Z7-6[-`7-03-O|- 8-.8-+8-@8-#8-i5-$8-$8-m5-8~-%8-(4-&8-&8-*8-=8-7~-Q6--8--8-Q6-;8->8-,8-E1-3^-'8-'8-)8-)8-!8-~8-{8-]8-^8-/8-(8-_8-:8-:8-];-];-:8-<8-[8-}8-|8-L,-'7-)7-!7-~7-`5-(7-18-18-28-u4-^7-U5-38-(7-_7-48-+6-58-<7-@6-68-78-88-98-08-'4-:7-a8-b8-c8-d8-e8-f8-g8-h8-i8-m1-j8-k8-l8-m8-n8-o8-p8-q8-r8-s8-t8-u8-p0%tZ%zo%wo%'B%vY%xj%C %wM$ m%8 +9 +9 kI@')#B_#!)#))#))#))#))#+W@+W@+W@+W@+W@w! w! w! bP@@A@+L@+L@@A@@A@+L@ 9 RT@@A@@A@@A@.9 .9 +L@+L@B_#B_#')#kI@1f 1f a~ a~ @~ ^|@^|@/|@(|@(|@_|@_|@<|@$4@vR@Eu Kv &E &E u1$Eu Eu Eu Eu Eu Eu Eu Eu &E &E &E &E &E &E &E &E Kv Kv Kv Eu vR@<|@[|@_|@+~ ;! 9 +L@.9 bP@b.#j$#j$#VE@0u#u_$tq=5N=h_*@p=@p=x8-|6-Ur b:*Z4-@' Z4-R--Wy=p#-`4-`4-xD Q}-y8-sQ@^(-.9.p3.):.g|.n3.<(+.9.<(+<(+<(+sQ@sQ@sQ@<(+.9..9..9..9..9..9..9..9..9..9..9.):.):..9..9..9.uG#uG#*r=*r=&r=sX%sX%S`%&r=&r=*r=*r=uG#N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*vu#&r=&r=vu#vu#&r=&r=vu#*r=sX%S`%S`%&r=&r=&r=sX%*r=N:*vu#N:*&r=S`%S`%sX%*r=*r=*r=*r=*r=*r=*r=*r=S`%*r=N:*uG#sX%S`%&r=uG#):..9.<(+.9.g|.cO@g|.S%~h&0, &, {h&>S%Av&&, 0, {h&0, Av&Bv&B9.M]*M]*M]*M]*M]*M]*M]*M]*-.%-.%M]*M]*/p.RD*", "xX%xX%xX%xX%xX%xX%xX%_r+O7.is@x5.xX%_r+_r+O7.is@x5.O7.xX%xX%O7.x5.is@N7.N7.N7.N7.N7.N7.N7.N7.xX%x5.is@x5._r+N7._r+O7._r+_r+_r+_r+_r+_r+_r+_r+M7.M7.N7.N7.N7._r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+_r+_r+_r+N7.N7.xX%_r+_r+_r+_r+_r+_r+xX%N7.N7.N7.N7.N7.N7.N7.N7.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#%0+%0+%0+%0+%0+%0+%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.N7.N7.N7.N7.N7.N7.0q.0q.0q.0q.0q.0q.0q.0q.q3.q3.q3.q3.q3.q3.q3.q3.$B#$B#$B#$B#$B#$B#$B#$B#M7.N7._r+N7.%0+@9.$B#M7.q3.q3.,H.,H.,H.,H.,H.,H.bQ#+9.bp.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(++9.:(+q3.,H.bp.+9.bp.,H.<3+<3+0q.q3.,H.:(+bp.+9.0q.0q.q3.,H.:(++9.bQ#o&=,H.,H.,H.,H.,H.,H.,H.,H.+9.bp.,H.q3.q3.,H.:(+bp.bp.+9.bQ#bp.,H.0q.q3.,H.:(+:(+:(+:(+:(+:(+:(+:(+bp.bp.bp.bp.bp.bp.bp.bp.bp.<3+v4.,H.+9.,H.q3.:(+bQ#+9.bp.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.+9.bQ#bp.q3.,H.bQ#bp.<3+,H.bp.,H.0q.:(+b,+bQ#q3.#k.8'%[{.v4.+9.b,++9.q3.,H.,H.,H.,H.,H.,H.,H.,H.q3.M7.'Z%j$&RQ=z8-s^+fr=A8-7B Kg=B8-C8-D8-E8-F8-F[*6o=<]#U3 >> A0 Qh 7v 7v 'p ,p 36 +L@+' O9 O9 1f 1f 0~ a~ a~ YA YA WA YA a~ 1f kI@f1#d1#/M ]M +L@ 9 /d@/d@O9 O9 /d@]|@(7 ]|@5h }u }u }u 5h fw 1k G> jl t/@If Ld Uj Rg XC%Vj Vj YG@t7 t[@t[@.(+eF.eF.eF.eF.eF.eF.eF.eF.1/ eF.O#@ep A%@=W@kB@Vj C;$ U@ER@DR@FT *S ,M 2r@hB uG V^#j@#v_$Mw Gu Gu t)&yz%Ww yz%]G%Nw Pw Ux v! $p@^|@W:@@~ +9 0~ 0Y G`+F`+V} U4+CO.zL.HG.)(@`@+, $O:++*+)]$4v$CO#CO#] +`]$k^#'2+@#$;K@Y.@6T+6~#%Y%v2*G8-H8-I8-J8-K8-L8-M8-N8-O8-P8-Q8-/|-R8-S8-S8-T8-l6-,:-U8-K7-V8-W8-X8-Y8-Z8-`8-s6- 9-.9-R7-Y3-X3-X3-S7-C2-C2-55-p6-r6-15-+9-@9-#9-s<-$9-%4-%4-%4-z6-z6-z6-z6-%9-&9-*9-=9-Y7--9-v}-03-O|- 8-;9->9-,9-'9-9^-)9-V2-!9-~9-{9-]9-]9-]9-^9-'8-'8-'8-^9-^9-/4-/9-(9-_9-:9-:9-:9-:9-/4-/4-<9-<9-[9-}9-|9-{8-19-19-29-29-^8-^8-/8-39-39-#7-]8-49-59-69-79-w4-89-99-09-99-a9-^7-b9-c9-d9-e9-f9-g9-h9-[7-68-i9-j9-k9-l9-m9-08-g9-h9-n9-o9-p9-q9-r9-s9-t9-u9-v9-b]-Q8-k8-w9-x9-y9-z9-A9-B9-C9-D9-E9-F9-gx%l7-xp%cx%jf%sZ%E@%+e%_i%;#$X]#,Q$FD$w0%fQ$hQ$,@%fC%t;&y+&7C*7C*:D$/n$/n$1s%Dt$CT#6}@}o+e1@_7@{B+M:+5h#fh$ .@T@&Qv%[=%Wj$J@%Gz%f3&P;%z_%jQ oF%GJ%FD%9C%Qv&Qv&G9-Qv&$B%$B%$B%%B%%B%%B%b|$b|$u1$u1$u1$u1$u1$u1$u1$5'$3 Qh ]3 7v d2 n| 7, +' 7, 7, T:@lI@H5@0~ I~ YA EN#YA a~ YA YA a~ 1f ew e1#!)#+L@ 9 S:@/d@O9 +L@ 9 (7 /d@(7 8v 5h }u }u }u 5h |u 3' 3' /1 /1 ^1 .r .r If Ld Tj CD Cn Bm I0 I0 i< -[ 8j#-[ 8j#-[ 8j#-[ c2 Sj T-@v[ R} [} U-@'8 Lf Lf {Z#wb 8~ [f :e uG ^0@&$$&$$h.#e.#`C% D%k%&cC%cC%^G%]G%cC%Ow Pw Pw cB +n@1r@=p@WA a~ lI@~)#ZG@i< [7 eF.D6 $3 1j+,N.XJ.)2+2|+ZR#/a$/9${m$ln$m3&po%08$&6$}{#zI+;B+ED+H6@%Y%v2*N9-H8-O9-P9-Q9-R9-S9-T9-U9-V9-+{-W9-X9-Y9-Z9-S8-$/-`9- 0-Q3-.0-s6-+0-+0-@0-`8-#0-$0-N7-R7-Y3-+4-p<-!:-o<-!:-p<-n1-%0-25-&0-@9-s<-s<-#9-%4-%4-%4-%4-%4-z6-z6-V7-&9-*0-*9-=0--0--0->2->2-;0-R2->0-,0-J6-+8-@8-'0-j5-k5-k5-k5-)0-!0-~0-a|-C1-C1-C1-{0-]0-<[-^0-:[-Y/-/0-(0-/0-D1-D1-_0-:0-<0-[0-}0-|9-|0-10-20-&!-30-40-50-/8-50-50-40-|9-69-60-V5-*2-70-80-90-00-a9-^7-c9-a0-b0-e9-c0-f9-68-i9-78-98-l9-l9-l9-l9-68-@6-d0-e0-f0-g0-h0-h0-i0-j0-k0-l0-m0-l1-n0-(5-o0-p0-q0-r0-s0-t0-u0-v0-w0-x0-y0-wq%TN$-8%om%}V%F8%uM$N$$X]#,Q$ED$Ea%hR$,@%3)%(a%Fw$BT%Op$3F*)E*Sz*Y2*u:*CT#@s+=K@*t@J:+oX+7Z.@h+mo%U{$o=$Ih+in$Ps$fq$2H%r<+m;%DG%#I$z_%4h oF%3C%3C%{$&{$&Z4*{$&1(&Lv%Lv%PO$PO$F'$i!$i!$5'$&E &E Kv Kv Kv Eu -E .~ DN Y~#8~ wb wb e7#8~ G~ G~ W-@W-@H0 @9 '8 Yq `Z ))#+W@w! XC@XC@w! w! XC@XC@XC@XC@w! w! w! +W@RT@.9 +L@+L@@A@RT@.9 O9 @A@@A@.9 .9 +L@+L@+L@O9 ')#kI@1f a~ WA @~ ^|@^|@(|@(|@_|@:|@<|@$4@vR@vR@Kv Kv Kv &E &E u1$u1$Nt%Kv Kv Kv Kv Kv Kv Kv Kv &E &E &E Kv Kv Kv Eu Eu Eu Eu Eu vR@<|@:|@(|@^|@Y:@(7 +L@@A@RT@[`@i@#Y=#C&#VE@O~#tq=(X%h_*k`&@p=6U%Ho=Y4-Ho=@' Z4-rg*/|$R2*z0-/e*p#-/e*A0-B0-Dr#JD=):.v5.n3.sQ@<(+.9.):.sQ@<(+.9.):.):..9..9.<(+):.):.):.):.):.):.):.):.):.):..9.<(+<(+.9.):.):.N:*uG#*r=&r=&r=&r=*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#N:*sX%sX%N:*N:*sX%sX%N:*uG#sX%CI#sX%N:*vu#&r=w{@w{@sX%*r=*r=sX%S`%sX%&r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=3 Qh R-@Sj p| [} ]1 36 U:@0Y gG#fG#1C V:@|C +9 V:@+9 >8 Y:@;! ]|@/d@ 9 ]C@lI@l] lI@]C@]C@Nx@H5@')#kI@a~ WA @~ @~ =p@]J |u |u |u $A@$A@l.#_,@_,@Sr V-@Yq wa P9 >! 8_@8j#:} &f#|c#&f#|c#&f#|c#&f#'m#qI#'m#qI#'m#qI#'m#.9 fG#1C |C >8 H~ t! X:@$p@}r@L4$L4$I0-N.%J0-K0-xT% z ^A d.#Qw [A [A -f$-f$;&$V!&d$$kt@V7@Kz :r@+W@:} *! Jc B6 -l Ba+v8+$$#@f$3|+DU.O:+k %/9${m$*c$6v$7v$8v$Ej$iX+=>+>B+6o@)~#~P#:3*L0-M0-N0-O0-P0-Q0-R0-S0-T0-U0-V0-B2-W[-W0-X0-l<-l<-Y0-Z0-`0- a-N7-.a-+0-+a-Z8-#0-$0-q6-Y3-25-p<-Z[-@a-Y[-Y[-{:-#a-$a-%a-&a-*a-=a--a-;a-;a-;a-#4-&4-&4-&4-&4->a-n9-*0-,a-,a-27-'a-)a-!a-~a-{a-]a-^a-/a-/a-(a-_a-i5-:a-*q@*Pa-4Y#&<$@s+=K@-7@X&+o=#VH#4)#Nk$fY.#{#h^@l,$Ez%hq$Xj$gq$8 <@W:@Y:@]|@(7 ]C@lI@l] lI@]C@`Z Nx@lI@kI@1f YA @~ ^|@/|@W~#mt@xK {J {J ~J ~J ~J $A@$A@Qk#(,@/,@7, 36 ,p :} :} .i#7q#.i#7q#.i#7q#.i#7q#b4#zn#|c#H,#|c#H,#|c#.i#T:@S:@G0 V:@Y:@W:@u! mt@}r@%A@L4$Zy N.%&@%xT%`y }A <|@/0@Eu Qw Pw @D%Pw .z D@$d$$G5@%0@dw S~#w! |c#26 (1 v[ )8 l< Ba+!%@4&#m[+`@+2|+4V+0r$pr%sD$HW$E}%^q$Cj$[{#gX+Q,+M2@a=@4~#Za-`a- b-.b-+b-P0-@b-#b-$b-%b-e]-&b-*b-v9-=b--b-W0-g1-':-|5-;b->b-,b-'b-)b-!b-N7-$0-$0-q6-25-15-+9-q<-C(-r<-r<-&b-~b-{b-%a-]b-^b-/b-/b-(b-_b-_b-;a-;a-D(-D(-*4-:b-$(I$a&$4H$$-&[}$gg$Bq$)E*5+*{.*K$*.c-FS#$I@ I@$~=.W$av$dH#@*+dy%fY.()#hk@!p$.w%_x%D'$^*@UB$Vv%/x%mc*f!&}C%#F%#F%PL%ED%ED%ED%ED%ED%1u%1u%1u%CD%PO$YI$$h%5'$(0@(0@vR@vR@$4@<|@6F sG TH TH 8~ :)@~~#,8 @9 U-@@9 Yq wa U-@:7 T-@>! _C@))#+W@w! w! XC@w! w! +W@XC@XC@XC@w! +W@+W@))#))#+L@ 9 /d@O9 .9 RT@@A@+L@+L@+L@O9 O9 9 9 9 /d@a~ a~ YA @~ /|@(|@_|@:|@_|@:|@[|@<|@vR@Eu &E &E Kv Kv Kv &E &E &E &E u1$&E &E &E &E &E &E &E &E Kv Kv Eu Eu vR@$4@$4@$4@Eu Eu vR@$4@[|@(|@^|@@~ W:@]|@O9 @A@RT@uR@i@#C&#P~#N~#u_$^T#k`&T8 0p=6U%Z4-Ho=x8-$D=/p=Z4-qy=gh*+c-@c-H9-#c-@f*Jf*u*=(J.g|.w5.v5.cO@v5.:^+.9.cO@v5.h;#<(+):.g|.g|.c-,c-'c-)c-!c-~c-{c-i]-]c-55-h8-^c-/c-(c-_c-Qb-:c-d-,d-w(-78-'d-f^-)d-*|-!d-~d-{d-]d-^d-/d-(d-_d-:d-Yq%(U#gz&ym#`E#j`${@%M$%{C%]C%p3#b@X:@t! +~ >8 ]|@S:@O9 ~)#@A@_C@@A@WC@RT@A&#uR@z&#[`@!)#))#+W@w! XC@XC@XC@XC@))#))#))#!)#!)#QT@QT@QT@w! +W@+W@+W@))#))#!)#!)#B_#B_#')#')#kI@1f 1f a~ YA WA @~ ^|@(|@_|@[|@[|@u1$u1$Nt%Nt%Nt%u1$&E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$*E *E =E =E =E *E }g -E }g tG >b@X:@X:@+~ ;! (7 /d@+L@bP@[`@b.#i@#Y=#P~#VE@0u#5N=h_*0Q=+6*t_$6U%b:*x8--1--1-@' qy=gh*|x=1d-1d-@f*q7-5$-u&./f.Dr#n3.h;#h;#h;#sQ@sQ@<(+<(+h;#<(+):..9.sQ@h;#<(+.9.0+sq*xE*OP*OP*x{+x{+x{+[f.[f.OP*OP*x{+[f.[f.u!=HV.HV.B9.8P.8P.Bv&0, >S%>S%~h&{h&&, ZQ.B9.8P.B9.ZQ.Av&Av&Av&Av&Av&Av&Av&Av&Av&~h&Av&B9.Bv&{h&X@$", "F6.F6.8'%8'%[{.[{.Tw@F6.F6.F6.b@rG sG tG tG tG tG tG tG tG tG -! sG r[@W:@]|@ 9 +L@k[#Pv#T(&!m#I,#UE@(} ~o O2+w'@&N@S^$uD$5w+mF$tp%4V+A@$LD+V_#I4@ v@P1+CA#;($T,@-B+^`#`]#8d-9d-0d-ad-bd-cd-dd-h]-ed-fd-gd-hd-id-/c-jd-kd-Aa-ld-md-md-Ba-Qb-Qb-nd-od-pd-qd-rd-sd-td-ud-%a-vd-wd-xd-yd-zd-Ad-Bd-Cd-Dd-Dd-Dd-Ed-Dd-dc-Fd-Gd-Hd-Id-Jd-Kd-ic-Ld-%d-$d-ta-Md-*6-{2-Nd-Nd-Od-Od-Pd-Qd-Rd-Sd-Y7-Td-Ud-Td-`7-Vd-Vd-6[-Ud-Ud-S|-Wd-Xd-Xd-uc-uc-Yd-Zd-`d- e-.e-+e-@e-#e-$e-fb-%e-Ec-&e-*e-1a-=2-=e--e- 6- 6-48-e9-na-N2-;e-`c- d->e->e->e- d-,e-'e-)e-!e-!e-Wc-'e-~e-{e-]e-]e-K2-K2-^e-t1-#d-#d-/e-/e-85-(e-_e-:e-87-6-_5-V|-A4-[e-Z_-}e-|]-|e-1e-2e-3e-4e-5e-6e-7e-8e-(s%9e-MO#SE%O$$;7%M$% -$*G%/C%HQ@5X@aZ@XO$tH@^:@kF@ 9+/a+[h+*r$7_$$`#F#*kz@0e-_6*}6*ae-gz%2*&be-0.%M-%D&#=E VH%ky%ky%Jv =E =E =E =E =E =E =E i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$=E *E }g }g -E -E }g tG rG rG sG rG r[@t! W:@W:@;! (7 9 +L@.9 @A@bP@bP@bP@bP@uR@uR@uR@uR@+W@+W@w! w! XC@XC@w! w! +W@+W@))#))#))#!)#!)#!)#+W@+W@+W@))#))#!)#!)#!)#')#')#kI@1f a~ a~ YA YA @~ @~ ^|@(|@_|@[|@<|@<|@&E &E u1$Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$*E =E =E =E =E *E }g -E -E sG r[@X:@t! +~ ;! /d@/d@+L@bP@[`@UE@Cv@Z=#ir#ir#u_$(X%]T#k`&s_$T8 6U%@' Io=-1-$D=b:*d:*`q ce-1d-z0-de-5$-c*-q3./J.ee-h;#h;#sQ@sQ@<(+<(+<(+.9.sQ@.9.S%", "b@sG sG sG sG sG sG sG sG sG rG r[@+~ ]|@ 9 +L@k[#gy#cj# t#WE@i@#m| #[ 1/ DL.gk@-@#iE$c7%L~$L6@Y{@9M@, $O:+@ +fE#P1+CA#6%$kX+<|+T`$VM$le-me-ne-oe-pe-qe-re-j]-&b-se-t9-hd-id-/c-hd-kd-Aa-md-md-md-te-ue-ve-we-xe-ye-ze-Ae-Be-35-Ce-ud-De-Ee-ec-zd-Fe-Ge-He-Ie-Je-Ke-Le-Me-Ne-Cd-yd-9c-Hd-Oe-Pe-Qe-Re-Re-&d-$d-Lb-95-Se-Te-Ue-Ue-Ve-We-Xe-Ye-Ze-`e- f-.f-T|-.f-+f-u_-u_-@f-.f-.f-T|-)2--0-'a-#f-Wd-$f-%f-&f-*f-=f--f-;f-#e-$e-fb-%e-Ec-&e-*e-*e->f-(7-=e-,f-,f-_7-b0-e9-_7-'f-'f-`c-L2-L2-L2- d-]e-'e-)e-'e-'e-'e-~e-)f-)f- d-K2-K2-K2-J2-J2-J2-J2-I2-!f-*4-]:-~f-ye-{f-]f-^f-':-_5-/f-(f-_f-:f-b@>b@r[@+~ Y:@]|@]|@(7 9 +L@.9 RT@RT@[`@[`@[`@[`@uR@uR@uR@uR@XC@XC@XC@XC@w! w! w! w! w! +W@+W@+W@))#))#!)#!)#))#))#))#!)#!)#QT@QT@QT@kI@kI@1f a~ YA WA @~ @~ (|@(|@_|@:|@<|@$4@vR@vR@Eu Kv u1$Nt%GJ%GJ%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$=E =E i0$i0$=E *E }g -E -! rG X:@t! +~ W:@]|@ 9 9 .9 uR@UE@i@#C&#P~#O~#0u#qR#S2*+6*s_$t_$T8 0C=6U%$D=2g x3-t|*gh*e:*qg*a|*8f-5$-r7-`e@*r=aP.Dr#sQ@<(+<(+<(+.9..9.):.):..9.b@X:@+~ ;! 9 +L@@A@OH#vg#vg#J,#j$#Zp ]3 F~ -K.MM.Gh+!-#NQ$r!$>/#u8+pZ%E-%]f#W_#d=@Wy$AA#eh$kX++:$,e%VM$cf-df-ef-ff-gf-hf-if-jf-kf-lf-t9-mf-nf-/c-of-pf-l0-md-md-qf-i8-nd-rf-sf-tf-lf-75-65-td-sd-Ce-uf-vf-wd-ec-wf-xf-He-yf-zf-Af-Bf-Cf-Df-Ne-xd-xd-Ef-g]-Ff-Gf-Hf-=4-=4-&d-If-Jf-Lb-Kf-37-Lf-Mf-Nf-Of-Pf-Pf-Qf-Pf-Rf--9-T|-.f-+f-u_-u_-u_-+f-+f-Sf--9-T|-)2--0-Ud-Tf-&f-`d-Uf-Vf-Wf-Xf-ab-3a-Yf-Dc-~4-Zf-1a-1a-=2-*2-`f- g- g-e9-b0-_7-48-.g-+g-@g-`c-L2-L2- d-]e-~e-)e-'e-'e-~e-#g-$g-%g-&g-&g->e- d-*g-*g-=g--g-;g->g-]:-{:-T7-se-g8-{f-,g-':-'g-)g-!g-~g-{g-]g-^g-/g-(g-_g-:g-x@lP+Rd+q6+}c+O--Z;@ko&+[@4h#DA$6X%m|%VY$|g-1g-2g-fO$=f$@I$^,$GD%hy%hy%i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$=E }g -E -! tG sG -! sG r[@X:@t! +~ ;! (7 O9 +L@.9 @A@RT@bP@uR@uR@UE@UE@b.#b.#[`@uR@uR@bP@8.#{Y@XC@w! +W@+W@+W@+W@w! w! w! +W@+W@))#))#))#!)#QT@QT@QT@B_#B_#')#')#kI@kI@1f a~ WA @~ ^|@^|@[|@[|@<|@$4@vR@Eu Kv Kv vR@Eu &E Nt%GJ%GJ%GJ%GJ%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$i0$i0$i0$i0$=E *E -E -! tG >b@t! W:@W:@Y:@/d@O9 O9 RT@b.#i@#j$#Z=#N~#Ut&tq=^T#k`&t_$T8 T8 0p=0C=[n $D=x8-o7-Ra-ce-yx=g:*@c-3g-A0-.f*bp.kS.lO#OJ*<(+<(+.9..9.):.):.):.b@>b@>b@>b@>b@>b@>b@>b@r[@X:@t! +~ ;! /d@+L@@A@h@#8.#8.#i@#Ag#i[#vb Kc ro |##vc+z2$QH#h|#s=#G)+3Y+Ls&]f#5W.HK$Wy$BA#{^#,K@H@@lb#7g-cf-8g-ef-oe-9g-0g-ag-bg-cg-q<-g8-^c-dg-nf-of-pf-l0-qf-qf-qf-m0-Qb-we-eg-fg-l0-w6-65-Y3-Y3-ud-ud-vf-gg-Cd-hg-yd-Fd-ig-zf-jg-kg-lg-mg-Dd-cc-ng-og-g]-Ff-Gf-Qe-Qe-Qe-Hf-r1-pg-pg-qg-f-Jg-b3-b3-`f-`f-48-O2-O2--e-'f-na-L2-L2-L2-,e-~e-~e-Kg-Kg-Lg-$g-Mg-Ng-Og-Pg-Qg-Rg--g-Sg-Tg-Ug-Vg-#a-n1-p6-Wg-Xg-Yg-g8-Zg-x2-l<-Q3-y_-`g- h-h-,h-q[-'h-)h-)`@D^-x&#hn=@l g$#[]#t[ /0#'p uR@uR@RT@@A@.9 O9 /d@(7 ;! Y:@Y:@Y:@W:@W:@W:@+~ +~ +~ W:@Y:@Y:@Y:@;! ;! ]|@]|@(7 /d@ 9 O9 O9 O9 9 9 5h 5h 5h }u }u }u ]J ]J u! mt@mt@mt@mt@]J }u 5h (7 /d@ 9 +L@@A@RT@uR@uR@[`@[`@[`@b.#b.#b.#UE@UE@b.#UE@UE@b.#[`@uR@RT@@A@ 9 /d@(7 ]|@Y:@W:@+~ t! r[@r[@r[@r[@r[@r[@r[@r[@t! t! t! +~ ;! /d@.9 RT@8.#{Y@{Y@UE@Ag#+<#N9 Vr Sj Ok -p@M&#},%6K#h#@s'@hE%_y%t{%2|+|0#Ss@-b&yA#jX+cB@!h-~h-le-8g-{h-]h-^h-/h-(h-_h-h]-~:-{f-gd-dg-nf-^c-pf-l0-:h-qf-qf-b@>b@+~ Y:@(7 /d@/d@ 9 +L@RT@uR@uR@uR@[`@[`@[`@[`@[`@[`@[`@[`@[`@uR@uR@uR@uR@w! +W@!)#QT@QT@QT@))#+W@))#))#))#!)#!)#QT@QT@QT@')#')#kI@kI@1f 1f 1f a~ 1f 1f YA WA ^|@(|@_|@:|@Eu Eu Kv Kv &E &E u1$u1$Eu Kv u1$Nt%GJ%GJ%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$*E *E *E *E -E tG sG rG >b@t! Y:@;! ]|@(7 O9 @A@@A@uR@Cv@Y=#VE@N~#85*pR#(p=0Q=T8 Js&0p=T8 T8 [n [n x3-Ur Wh-Xh-5' K6*Yh-Lf*Zh-*>-_;=6w={e.Dr#lO#sQ@<(+<(+<(+.9..9.):.):.):.g|.cO@cO@S%{h&Av&Bv&Bv&ZQ.&, {h&Av&Av&Av&Av&Av&Av&Av&Av&Av&0, ~h&{h&&, ZQ.", "F6.F6.F6.8'%8'%8'%8'%[{.[{.[{.8'%8'%F6.F6.F6.<3+[{._;=[{.i-,i-'i-)i-!i-d]-lf-wa-~i-dg-^c-k0-od-.4-{i-.4-]i-^i-^i-ve-tf-Aa-qd-Ae-sd-td-uf-ud-/i-vf-(i-(i-_i-ng-Ed-:i-lg-7h-b@X:@t! +~ (7 9 +L@.9 +L@+L@@A@uR@bP@bP@bP@bP@RT@RT@RT@RT@bP@bP@bP@bP@uR@uR@uR@uR@))#QT@')#kI@')#B_#))#+W@!)#!)#QT@QT@B_#B_#B_#')#kI@kI@1f 1f a~ a~ a~ YA WA @~ ^|@(|@:|@<|@$4@vR@Kv Kv Kv &E &E &E u1$u1$&E &E u1$Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$}g }g }g -E tG rG r[@X:@r[@+~ ;! ]|@(7 /d@+L@RT@RT@[`@j$#Z=#ir#0u#tq=(X%S2*k`&T8 Js&0p=t_$s_$/p=6U%Y4-Ui-Vi-g:*K6*/i*Yh-Wi-Xi-lQ.w{@;Z+N:*Dr#i(#h;#h;#sQ@sQ@<(+<(+<(+.9.):.#A&#b.#Cv@Ag#@<#9J@`D#[m ]1 wo so F5 $y NM.@j-((&.Y.U-$~}@8o@A4#2h$9e#W.@#j-$j-8d-%j-&j-*j-=j--j-;j->j-,j-U0-ye-f8-'j-dg-^c-k0-pf-.4-.4-.4-v9-ue-)j-eg-!j-lf-y6-U7-~j-Q7-{j-]j-^j-/i-/j-/j-_i-bc-Dd-Ke-mg-lg-(j-(j-_j-Df-:j-+WC%We&oZ.a_#Uv )o }) UC 9F j.$xt Fu Fu aK%*L%1C%^,$EG%}C%~x%mc*+I$GD%GD%GD%GD%GD%GD%GD%i0$i0$i0$i0$i0$i0$i0$i0$-! tG rG r[@t! W:@Y:@;! O9 .9 RT@RT@@A@@A@bP@[`@@A@@A@@A@.9 .9 .9 +L@+L@@A@@A@RT@RT@bP@uR@uR@[`@QT@')#kI@1f 1f B_#!)#+W@QT@QT@B_#B_#')#')#')#')#1f 1f 1f a~ a~ YA YA YA /|@/|@_|@[|@$4@Eu Kv &E Kv Kv Kv &E &E &E &E u1$u1$u1$Nt%Nt%Nt%u1$&E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$-E -E -E -! sG >b@X:@t! X:@+~ ;! (7 (7 9 .9 bP@RT@b.#j$#VE@ir#Ut&qR#^T#h_*+6*0p=Js&T8 s_$s_${t 0C=|6-Ij-T^$Jj-/i*/i*Yh-Kj-Lj-[{.kS.*r=j(#R#.@:+n3.h;#h;#h;#sQ@sQ@<(+<(+.9.S%0, ZQ.ZQ.", "e-&g-[k-}k-|k-1k-2k-2k-2k-ri-3k-Ug-4k-o1-vi-]:-F2-F2-5k-gg-6k-7k-8k-9k-0k-ak-bk-xe-ck-j<-81-dk-ek-fk-gk-hk-ik-jk-kk-lk-mk-nk-(K$4F#nZ$P!#,W#NU$>W#C|#z<#2x&|'#uU#Zu@Z2*ok-pk-qk-rk-BM&^Q*7r$;v$C(@~t@BN -|@'&$8f=!a |/$nP%mP%i*$]G%]G%Nt%],$`I$lh$m;%m;%1N%4Q%GD%1C%i0$i0$1C%1C%1C%i0$=E i0$1C%i0$-E sG X:@t! +~ ;! (7 9 +L@.9 .9 @A@RT@bP@bP@RT@.9 +L@RT@.9 O9 9 9 O9 +L@@A@@A@@A@.9 +L@+L@O9 9 9 kI@kI@kI@kI@kI@')#')#')#')#')#')#kI@kI@kI@kI@kI@')#1f YA WA YA YA @~ (|@/|@(|@[|@vR@Kv &E Kv Kv &E &E Kv Kv Kv &E u1$Nt%Kv &E u1$Nt%GJ%Nt%Nt%Nt%&E &E &E &E &E &E &E &E *L%GJ%GJ%Nt%u1$&E Kv Kv -! tG rG >b@r[@r[@>b@>b@W:@;! /d@ 9 9 +L@bP@b.#uR@UE@j$#Z=#ir#85*^T#0Q=0Q=s_$Js&s|*Js&T8 t_$[n @' Ij-T^$3'*Jj-/i*sk-sk-a|*>n+S`%tk-j(#o&=R#.OJ*sQ@sQ@sQ@<(+<(+.9..9..9.sQ@<(+.9.):.S%u3$x*$>S%Bv&ZQ.&, 0, 0, &, ZQ.Bv&>S%>S%~h&{h&0, 0, ", "-xk-yk-zk-+j-Kh gn=86-8>#z_#R3 uy (o i@#uR@bP@bP@bP@bP@RT@.9 9 /d@ 9 (7 ;! Y:@Y:@Y:@t! r[@X:@X:@t! t! +~ +~ W:@W:@t! +~ W:@Y:@;! ]|@]|@(7 Y:@]|@(7 (7 ;! Y:@;! (7 ;! ;! ;! Y:@Y:@W:@W:@W:@+~ +~ W:@W:@Y:@;! ]|@]|@ 9 O9 +L@.9 @A@bP@uR@uR@bP@bP@bP@uR@uR@[`@[`@[`@bP@RT@@A@.9 O9 9 (7 (7 W:@W:@W:@+~ t! X:@X:@r[@r[@X:@+~ ;! /d@.9 uR@`V@v{ v{ v{ Cv@Cv@Ez#@<#!x=ZD#Uw#};#W8 $l ^1 1k 8V v}=Ak-@M=xR#8M@l[+I4@A4#Jc&8e#_^$Bk-Ck-Dk-Ek-Fk-Gk-Hk-Ik-Jk-Kk-Lk-`[-pd-h8-Ob-of-k0-u9-pd-.4-45-97-Mk-ue-Nk-!j-1c-2c-Ae-&0-&0-%a-Ok-/i-/i-/j-Pk-l-2k-2k-,l-hj-'l-o1-Vg-vi-*a-@9-n1-n1-)l-4h-!l-8k-~l-{l-]l-^l-/l-@k-&/-(l-_l-:l-Q$2e$(A#.`$@J+>E+T(#8l-/v%%.&9l-^Q*0l-Q;%VP..G@va -c al-oR#w@-/*$,U=;:$JG%JG%zz%]G%^G%i0$@I$lh$m;%m;%0K%1C%1C%i0$i0$i0$i0$1C%GD%1C%=E =E =E *E tG r[@+~ W:@;! (7 9 +L@.9 @A@@A@RT@bP@bP@RT@@A@+L@O9 +L@O9 O9 9 9 9 O9 +L@ 9 9 9 9 9 /d@/d@/d@')#')#')#')#')#')#')#')#')#')#kI@kI@1f a~ a~ a~ a~ WA ^|@/|@^|@^|@(|@:|@:|@[|@$4@Kv &E &E &E Kv u1$&E Kv Eu Eu Eu Kv &E Eu Kv &E u1$Nt%Nt%u1$u1$&E &E &E &E &E &E &E &E GJ%Nt%Nt%u1$&E Kv Eu Eu sG sG sG rG >b@r[@X:@X:@Y:@]|@/d@ 9 O9 .9 uR@UE@b.#i@#Y=#P~#O~#tq=(p=k`&]T#s_$0p=Js&0p=T8 T8 6U%6L=Wh-C[*bl-Yh-/i*/i*K6*Q2*>~@uG#N:*w{@Q+&}d.OJ*<(+<(+<(+.9..9.):.):.):..9..9.):.):.8 <@+9 V:@V:@V:@+9 +9 >8 >8 >8 >8 +~ +~ +~ +~ +~ W:@W:@W:@;! ]|@(7 /d@ 9 +L@.9 .9 bP@bP@bP@uR@uR@[`@[`@b.#uR@bP@RT@@A@.9 +L@O9 O9 9 /d@]|@Y:@+~ X:@>b@rG r[@X:@+~ ;! 9 @A@[`@l-Tl-Vl-Wl-Xl-3k-Yl-Zl-`l- m-.m-@9-+m-)l-Bh-@m-#m-De-vf-Z8-M7-$m-%m-&m-kd-*m-u(-=m--m-;m->m-,m-'m-)m-!m-~m-{m-]m-^m-/m-~R$gz&O3&j&$Sj#Ip$=#$N(#ZE#p|+_E+BV+L~+('+(m-O^$K]$_m-:m-xw=i,$ U@,8 W:@! $RY#*c 5;#Gu pF%or%Az%=B%7E%0C%^G%i0$@I$lh$m;%Yv%uK =E =E i0$i0$i0$i0$i0$4Q%1C%*E }g -E sG X:@Y:@]|@(7 /d@ 9 +L@.9 RT@RT@bP@bP@bP@RT@@A@+L@ 9 /d@(7 /d@/d@ 9 9 9 /d@(7 ]|@]|@]|@]|@(7 (7 (7 (7 ')#')#')#')#')#')#')#')#')#kI@1f a~ YA WA @~ @~ ^|@(|@:|@:|@_|@_|@[|@$4@vR@Eu Kv u1$u1$u1$u1$&E u1$&E Eu vR@$4@$4@$4@vR@vR@Eu Kv &E u1$u1$&E &E &E &E &E &E &E &E &E &E u1$u1$&E Kv Eu Eu vR@$4@>b@rG sG sG rG r[@t! W:@;! (7 9 O9 +L@@A@[`@i@#i@#C&#P~#O~#u_$pR#S2*+6*]T#+6*T8 0p=T8 T8 Js&@' py=Vi-3'*i:*/i*K6*5' 5' _2*2p%fW=j(#S`%sX%zI*OJ*.9..9.):.):.0+,0+k4@mO#jM#mO#j(+k(+_b+_b+_b+_b+PN.3P .== ==)A&)A&)A&)A& == == == ==4p=B9.ZQ.ZQ.Bv&Bv&Av&0, B9.ZQ.Av&ZQ.Bv&B9.Bv&ZQ.Av&ZQ.ZQ.Bv&Bv&ZQ.ZQ.Av&Bv&Bv&ZQ.Av&&, 0, ", "8 V:@+9 <@H~ >8 +9 V:@V:@V:@+9 +9 >8 >8 >8 W:@+~ +~ t! t! X:@X:@X:@W:@W:@Y:@]|@(7 /d@ 9 O9 @A@RT@RT@bP@uR@[`@[`@b.#uR@uR@bP@bP@RT@@A@@A@.9 O9 9 (7 ;! +~ X:@>b@rG r[@X:@+~ ;! 9 RT@b.#WH m] m] p{ i@#j$#Ed#;3#0;*ky#i%&Xm@|c#k[#/,@(7 aP@+M=1E%jk&3j+Vj$k>#Ne@SU#Ss@ni$d9$$K$9t*2m-3m-4m-pl-=j-5m-,i-6m-7m-g]-p<-g8-Ob-mf-pf-pf-od-8m-y2-Qb-ue-^i-ue-Aa-#k-2c-9m-Be-35-uf-&a-wd-fc-cc-ng-:j-wl-0m-am-bm-cm-&k-yl-dm-%k-em-Ke-xd-0c-og-fm-&{-&{-Bl-Bl-}i-Cl-)/-)/-Pe-Gf-%d-%d-;k-gm-hm-y(--/--/--/-im-im-Re-Re-Re-Re-Re-=4-/e-I2-}j-jm-zh-km-lm-Hl-mm-nm-l9-om-;4-Kb-Kb-pm-pm-qm-qm-qm-qm-rm-rm-sm-sm-tm-tm-um-um-vm-wm-xm-ym-zm-zm-zm-zm-Vl-,l-Wl-Xl-]/-~/-!/-Am-Bm-Cm-Bh-+m-+m-)l-Dm-#m-`8-&a-Z8-q6-Dh-Em-u9--b-Fm-Gm-Hm-Im-Jm-Km-Lm-Mm-Nm-Om-Pm-Qm-Rm-Sm-5J$A &+~$Q*$`!#|'#b`$t %>i$oM@*#@!!@F|+l/+q-+}D$0M@O]$N7%j+%!G%9[%aP@YA GN cN@RC ;b =^$Au Pv zz%*B%*B%7E%0C%^G%i0$],$Zv%Yv%Yv%uK =E i0$1C%1C%1C%1C%1C%4Q%=E -E sG >b@t! ;! 9 O9 O9 +L@.9 @A@@A@RT@RT@bP@RT@RT@.9 +L@ 9 (7 ]|@W:@;! (7 /d@ 9 /d@]|@;! ;! ;! ;! ]|@(7 (7 /d@/d@B_#B_#B_#')#')#')#kI@kI@kI@1f a~ WA @~ /|@(|@_|@(|@:|@<|@<|@:|@:|@<|@vR@u1$u1$Nt%Nt%Nt%u1$u1$u1$&E Kv Eu $4@<|@[|@[|@[|@$4@vR@Eu Kv &E &E Kv Kv &E &E &E &E &E &E &E &E &E &E Kv Eu vR@$4@$4@<|@r[@>b@sG sG rG X:@W:@]|@]|@/d@+L@.9 .9 RT@b.#Cv@Y=#P~#0u#85*qR#(X%]T#+6*]T#k`&t_$T8 T8 0p=yD rg*Tm-Um-Vm-Wm-K6*Jj-5' /i*JE.}3.tk-q3.sX%uG#NR*OJ*):.n-,n-,n-'n-bm-)n-!n-dm-_j-mg-~n-dc-5h-og-{n-]n-^n-Bl-Bl-Bl-j]-}i-}i-/n-(n-Jd-Gf-%d-Ld-ic-_n-im-ui-ui-ui-ti-ti-!f-!f-!f-;g-H2-H2-q1-Ah-Ah-zh-:n-i$rA&rA&lq@92+j|*j_+x_+D]+`}%9>+B[#PA$+/#Y^#n)$*0@$S#,8@HN $W@-P v~$uK =E Nt%Xw y `x 0C%0C%^G%i0$],$Zv%Zv%Zv%uK i0$1C%GD%GD%GD%1C%i0$*E -! >b@+~ W:@]|@O9 @A@.9 .9 .9 @A@@A@@A@@A@@A@@A@.9 +L@ 9 (7 ]|@;! ;! +~ W:@;! (7 /d@(7 ]|@;! ]|@]|@(7 /d@/d@ 9 O9 O9 B_#')#')#kI@kI@1f 1f 1f YA YA @~ ^|@(|@_|@[|@[|@(|@:|@<|@<|@:|@:|@[|@$4@GJ%Nt%Nt%u1$u1$u1$u1$u1$&E Kv vR@$4@[|@[|@[|@[|@$4@vR@Eu Kv &E &E Kv Kv &E &E &E &E &E &E &E &E &E Kv Kv Eu vR@$4@<|@<|@r[@>b@rG sG >b@t! ;! (7 /d@O9 .9 @A@@A@uR@UE@C&#VE@O~#85*pR#5N=(p=]T#+6*0Q=+6*t_$T8 T8 s|*[!-^|$e:*C[*bl-i:*Jj--h-vn-1[*%0+W!+~U.<3+sX%N:*NR*OJ*S%&, Av&Bv&B9.B9.Bv&Av&&, Av&Av&ZQ.ZQ.Bv&Bv&", "F6.k&An-XT@o)$O~$t)%8x$mi${5@C1#2z@J3$>J$tg%Bn-Cn-Dn-En-Fn-Gn-Hn-In-Jn-c]-C(-ye-h8-mf-Kn-;n-Aa-45-Ln-Mn-nd-^i-^i-Aa-Aa-qd-1h-td-35-Nn-]j-vf-4h-/j-On-Pn-Pn-Qn-Qn-Rn-Sn-Tn-)n-zl-%k-%k-Je-:i-yd-5h-%{-Un-^n-Bl-Bl-Bl-Bl-|i-|i-Vn-/n-(n-Jd-Ld-%d-%d-=4-ui-ui-ui-ti-ti-!f-!f-!f-;g-H2-q1-Ah-Wn-Wn-Ah-Ah-Xn-km-[n-C6-qg-qg-&d--4-%d-%d-}n--k-|n-1n-2n-2n-Yn-1|-1|-Zn-`n- o-.o-+o-@o-#o-$o-%o-&o-&o-*o-=o-8n-zm-Yl--o-Ge-Ad-<|-*a-bn-Bh-cn-dn-fn-;o->o-,o-bn-'o-+9-p<-fd-i8-)o-!o-R[-~o-{o-]o-^o-/o-(o-_o-2l-:o-K$)r&'r%A[#Vo$OM.%S _t W~#GN 5=&]Z#hP%df% N$gy%@Q$=H$G'$FD%RL%}o-0C%0C%^G%-z +y bq io&bq r_$i0$1C%GD%GD%i0$*E -E rG t! ;! /d@ 9 O9 @A@bP@@A@@A@.9 .9 +L@+L@O9 O9 O9 9 (7 ;! Y:@W:@W:@W:@+~ W:@Y:@]|@(7 (7 (7 (7 9 9 9 9 9 O9 O9 O9 ')#kI@kI@1f a~ YA YA WA ^|@/|@/|@_|@:|@[|@<|@<|@_|@[|@<|@<|@:|@_|@[|@<|@u1$u1$&E Kv Kv Kv &E &E Kv Eu vR@$4@<|@<|@<|@<|@vR@Eu Kv &E u1$u1$&E &E &E &E &E &E &E &E &E &E &E &E Kv Eu vR@$4@<|@<|@>b@>b@>b@>b@X:@W:@]|@/d@ 9 +L@@A@RT@bP@[`@Cv@Y=#ir#0u#qR#5N=^T#(p=]T#k`&k`&s_$t_$T8 Js&O}*.6*gh*qg*3'*|o-i:*-h--h-rl*&A&l]#$)+uG#,H.S`%*r=7&+oN*S%&, &, Av&Av&Av&Av&&, &, &, &, Av&Av&ZQ.Bv&", "F6.b@>b@>b@>b@>b@>b@>b@>b@T~#g->g->g-Vg-o1-p1-4k-po-4k-p1-q1-qo-ro-[n-so-95-ah-Ld-ic-_n-ic-to-Kd-tm-sm-|n-4n-`n- o- o- o-.o-+o-+o-uo-vo-wo-xo-yo-zo-yo-Ao-Bo-Co-{/-Do- }-=a-~b-(b-(b-cn-cn-,o-Dm-Eo-Eo-Fo-,o-p6-]c-p<-X3-pd-@k-Go-Ho-Io-Jo-Ko-Lo-Kh-Mo-No-Oo-Po-Qo-Ro-So-To-:b&3x#|A#dG$kW#%9$`0@U6$M(#U6$X8+5J#Uo-m>+[V#p>#!-#(R@`r 8q j.#I3&V!&b@Y:@/d@.9 @A@@A@@A@bP@uR@@A@.9 +L@O9 9 /d@(7 (7 ]|@;! W:@+~ t! t! +~ W:@Y:@Y:@Y:@Y:@;! (7 /d@ 9 O9 O9 O9 9 9 9 9 9 1f 1f a~ YA WA @~ ^|@^|@_|@_|@:|@[|@[|@<|@<|@$4@[|@<|@vR@$4@[|@:|@[|@$4@Kv Eu vR@$4@$4@vR@Kv &E Eu Eu vR@$4@$4@$4@vR@Eu Eu Kv &E u1$Nt%Nt%u1$u1$&E &E &E &E &E &E &E &E u1$&E &E Kv Eu vR@$4@$4@rG >b@r[@t! W:@;! ]|@(7 O9 .9 RT@bP@uR@b.#j$#Z=#ir#Ut&pR#(X%^T#(p=h_*0Q=s_$t_$T8 0p=s|*[!-Wo-ce-yx=Vm-Wm-Wm-qg*g:*_^.C<&J1.^u=Q+&b,+CI#S`%OJ*oN*):.):.):.b@>b@>b@rG rG rG rG rG Z:@.<@&W@H~ T~#+<@eP@ <@b@>b@r[@t! +~ W:@Y:@;! Y:@;! ]|@/d@ 9 +L@.9 @A@.9 @A@@A@RT@bP@uR@uR@[`@b.#[`@bP@@A@+L@ 9 (7 (7 ]|@]|@]|@/d@O9 .9 RT@uR@XD#XD#m| S} Cv@yn#5!#5!#MH#h$#h@#X=#b>#P^#mI#^C@PH$c~ {M E&#{}+d_#r1$HL#53@2)#m~+Rj$,V&#p-$p-%p-&p-*p-=p--p-;p->p-T0-,p-{:-h8-kd-^i-^i-Ba-'p-V[-B2-)p-k1-k1-)p-B2-:c-:c-Ln-!p-~p-{p-]p-2h-2h-^p-/p-(p-_p-Pn-:p-Sn-Sn-ko-!n-yl-%k-_j-/-;/-im-=4-kf-kf-D2-vi-vi->g->g->g-Vg-o1-p1-4k-po-1p-p1-q1-2p-=d-qo-3p-4p-5p--/-El-El-El-6p-Jd-Pe-um-Qe-7p-6n-8p-8p-8p-9p-9p-0p-0p-vo-wo-Bo-yo-ap-bp-Ao-Bo-&o-cp-Fe-dp-(b-(b-ep-fp-dn-;o-Dm-gp-gp-gp-hp-ip-%0-&a-25-Z3-m0-S8-jp-kp-lp-~d-mp-np-op-pp-xj-qp-rp-sp-tp-up-vp-wp-_A#/z@tl&5j$#8$v6+Z8+mZ+s6+)9+xp-yp-A@%H0%3w$H!$o!$-c j.#3K%4K%;f$G=$V.$(;*Vo-O7&zp-.N$nx$ox$Lv%2C%6C%TH%TH%^G%-z +y +y bq H%$-E }g *E *E -E sG X:@+~ 9 .9 uR@[`@uR@bP@bP@[`@.9 .9 +L@ 9 /d@]|@;! Y:@Y:@+~ t! r[@r[@X:@t! +~ ;! ;! Y:@W:@;! (7 9 +L@O9 O9 O9 9 /d@/d@(7 (7 a~ a~ YA WA @~ ^|@/|@/|@[|@[|@[|@<|@<|@<|@<|@<|@<|@vR@Eu vR@<|@[|@<|@vR@vR@$4@<|@[|@<|@$4@Eu Kv Eu vR@vR@$4@vR@Eu Kv Kv Kv &E u1$Nt%GJ%Nt%Nt%Nt%&E &E &E &E &E &E &E &E u1$u1$&E Kv Eu vR@vR@$4@sG rG X:@+~ Y:@]|@]|@]|@+L@@A@bP@uR@uR@b.#j$#VE@N~#u_$pR#^T#^T#(p=h_*]T#t_$T8 0p=0p=yD R--Wy=Lf*Jj-5' vn-sk-qg*5' Pm.#)+v`./W%bQ#CI#w{@w{@i(#oN*.9..9.):.):.0+6g.%b=6g.yi.yi.6g.Rj.h%=PN.3P .==.==3P cl..==.==.== ==)A&)A&%z&{h&B9...=xE*xE*U*@U*@17*zi.x{ 17*..=..=17*17*..=2.+&, 0, ~h&>S%>S%~h&0, &, Bv&ZQ.ZQ.Av&&, &, ", "b@rG sG tG r[@r[@Z:@t! .<@+~ <@W:@H~ W:@>8 Y:@>8 +~ Z:@r[@t! t! t! t! t! t! t! t! t! t! t! +~ +~ W:@W:@W:@;! ;! ]|@(7 /d@ 9 9 O9 +L@+L@.9 @A@RT@bP@bP@uR@uR@uR@uR@bP@RT@.9 O9 9 9 9 9 9 O9 .9 RT@bP@uR@UE@i@#i@#UE@UE@Cv@C&#C&#j$#Cv@UE@y&#WC@_7 Nx@lI@H5@V:@Lc :g y~$qZ%FW$LJ@Ow#']$80$3#%`/=`b%UM$Gp-Hp-Ip-Jp-Kp-Lp-Mp-Np-mj-p6-h8--b-Op-T8-[5-$/-Pp-Qp-Rp-Rp-Sp-Tp-Up-l8-Vp-(5-V8-Rb-l1-:c-Z3-Wp-e]-Xp-Yp-Zp-`p- q-.q-+q-@q-#q-#q-$q-%q-&q-*q-=q-Bl--q-F7-;q->q-x!-}i-um-Pe-Pe-kj-,q-kj-ui-(e-'q-5k-5k-75-;a-;a-;a->g->g-q1-q1-)q-)q-)q-Yn-)q-)q-;g-!q-~q-{q-;g-ti-ti-ui-,q-hc-V0-]q-]q-^q-hc-Id->q-|p--q--q-&{-Bl-/q-(q-_q-_q-:q-+tq-uq-vq-wq-Uj-xq-a6&T~#:C@~A F&*H -kP&[A gB $B%3C%YI$YI$YI$G'$oF%oF%*L%*L%Nt%u1$u1$&E *E *E =E i0$:|@[|@<|@[|@:|@/|@WA a~ QT@QT@QT@!)#!)#))#))#+W@1f YA YA a~ 1f a~ ^|@_|@:|@_|@_|@/|@^|@@~ WA WA (|@/|@^|@YA 1f ')#QT@!)#')#B_#B_#QT@B_#kI@a~ WA WA @~ /|@_|@:|@:|@:|@:|@&E Eu $4@<|@[|@<|@$4@$4@Eu vR@vR@$4@[|@:|@:|@_|@$4@vR@vR@vR@Eu Eu Kv Kv Kv Eu vR@vR@vR@Kv u1$Nt%u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%u1$&E Kv Kv Eu Eu Eu Eu vR@$4@$4@<|@[|@[|@t! Y:@;! ;! Y:@Y:@]|@/d@.9 RT@b.#i@#i@#j$#Z=#ir#O~#tq=5N=5N=^T#k`&+6*]T#0Q=0Q=+6*T8 O}*p7-yq-z0-8f-zq-8f-pg*yq-Aq-o&=Bq-sX%sX%S`%S`%sX%&r=*r=*r=sQ@<(+.9.):.b@>b@>b@>b@>b@r[@r[@r[@r[@r[@t! +~ W:@Y:@W:@+~ t! X:@t! t! t! t! t! t! t! t! t! t! t! +~ +~ W:@W:@W:@W:@Y:@Y:@;! ]|@(7 /d@/d@O9 +L@+L@.9 @A@RT@bP@bP@bP@bP@uR@bP@bP@@A@.9 +L@ 9 9 9 O9 +L@.9 RT@bP@[`@UE@Cv@Cv@UE@UE@Cv@C&#C&#j$#j$#i@#b.#bP@@A@.9 T:@S:@V:@:,@cq kl +(++/@e~#kP%tD$98$Iq-Jq-Kq-yT&vX&|`$Lq-Mq-Nq-Oq-Pq-^n-Qq-Cm-Rq-)o-Sq-T3->:-u(-Tq-Uq-Vq-Wq-Xq-Yq-Zq-`q- r- r-.r-+r-@r-^|-#r-$r-(n-%r-Lk-&r-*r-`p-=r--r-;r->r-,r-'r-)r-)r-!r-~r-{r-]r-|p-F7->q-[j-|i-}i-Ff-Oe-,q-hc-hc-hc-X[-r<-y6-^r-65-@4-5k-5k-vi-vi-/r-q1-)q-)q-Yn-Yn-Yn-Yn->g-(r-_r-po->g-kf-kf-&b-,p-lj-:r-]c-]c-:r-lj-f]->q-n.;n.;n.-~@}m.}m..== ==)A&%z&)A& ==.==3P .==)A&%z& ==3P cl.3P &, $3.h8.t#$t#$g[$L}$g[$t#$CG#CG#CG#QC#QC#t#$t#$c`*-~@/p./p./p./p./p./p./p./p.M]*M]*-.%-.%M]*", "8'%8'%F6.F6.s-p1-kf-kf-`[-,p-,p-lj-:r-]c-]c-:r-lj-f]-[j-]r-jf-jf-j]-jf-,s-'s-[r-[r-:q-)s-!s-!s-|r-}r-~s-{s-]s-~r-Le-Dd-^s-dn-ip-/s-(s-_s-bq-bq-0r-dg-/s-T7-97-:s-@0s-as-bs-cs-6]*ds-es-S`=4E%ZT@(|@7`@2`@]{&4`@Mv .y Nt%oF%oF%GJ%GJ%GJ%*L%*L%*L%pM%pM%*L%GJ%u1$Kv Eu vR@vR@vR@:|@(|@@~ a~ ')#!)#))#+W@))#!)#B_#kI@a~ WA ^|@^|@YA @~ /|@/|@/|@(|@[|@vR@$4@$4@<|@:|@_|@/|@^|@^|@WA WA YA 1f ')#B_#QT@!)#1f 1f 1f 1f a~ YA @~ ^|@(|@_|@:|@<|@$4@$4@$4@<|@$4@$4@$4@$4@vR@Eu &E u1$Kv Kv Eu vR@vR@$4@<|@<|@<|@<|@<|@<|@$4@$4@vR@vR@Kv Kv Eu Eu Kv &E u1$Nt%u1$u1$u1$u1$u1$u1$u1$u1$Nt%u1$u1$&E Kv Eu vR@vR@Kv Kv Eu vR@$4@<|@[|@[|@+~ ;! (7 (7 ]|@]|@/d@+L@@A@uR@UE@Cv@C&#Z=#ir#0u#qR#(p=h_*S2*0Q=t_$T8 +6*0Q=]T#+6*yD %1*Lf*Wi-Wi-RE Kf*fs-#c-iC&+9.tk-6w=CI#CI#CI#S`%S`%sX%sX%sX%):.):.):.):.#&[ cw >p :u :u kx i[#Zp 4' b.#b.#XC@XC@+W@!)#R~#S^#jt@1f 1f ]|@;! Y:@+~ t! X:@r[@r[@r[@r[@r[@X:@X:@X:@X:@>b@>b@rG rG sG tG tG tG >b@r[@r[@X:@t! t! +~ +~ X:@X:@X:@X:@X:@X:@X:@X:@r[@r[@X:@X:@X:@t! t! t! r[@X:@X:@t! +~ W:@Y:@Y:@(7 (7 /d@ 9 O9 +L@.9 .9 @A@@A@bP@uR@uR@uR@uR@uR@bP@RT@RT@RT@RT@uR@[`@b.#b.#i@#j$#Cv@UE@UE@i@#j$#j$#j$#j$#j$#Cv@i@#UE@b.#+L@(d@Qk#|u -c 6, 2A Mu NB@N~$Sz$)=%m6&8|%]u&;M$=Y$#j-ms-ns-os-ps-qs-rs-ss-ts-5c-pd-us-k6-S3-j<-vs-Vq-ws-xs-ys-zs-As-Bs-Cs-Ds-Es-&)-Fs-Fs-Gs-Hs-`0-Is-Js-Ks-+k-Ls-Ms-Ns-Os-Ps-Qs->r-Rs-@q-&s-Ss-Ts-Us-Vs-Ws-Xs-Ys-Ys-Qq-7c-ac-$a-'o-'o-Bm-+9-+9-@m-@m-;s-8q-Zs-5k-<|-<|-`s-o1-!/-si-Zn-Zn-Zn-Zn-vi-po- t-o1-kf-kf-kf-,p-,p-lj-:r-]c-]c-:r-lj-f]-.t-jf-+t-+t-jf-jf-(q-@t-[r-_q-#t-:q-2q-2q-1r-Ts-$t-$t-%t-&t-*t-xl-=t--t-;t-gp-dq->t-,t-,t-0r-'t--6-)t-!t-~t-{t-]t-^t-/t-(t-_t-:t-P :|@D@$4`@4`@Mv Ow u1$G'$#B%PL%UH%*L%*L%*L%*L%*L%*L%*L%*L%Nt%&E Eu $4@[|@[|@[|@^|@WA kI@QT@))#+W@+W@+W@')#kI@1f YA @~ (|@_|@:|@@~ /|@:|@[|@:|@<|@Eu &E Eu vR@$4@[|@_|@(|@^|@^|@a~ 1f 1f kI@')#B_#B_#QT@a~ YA YA WA @~ ^|@/|@/|@:|@[|@<|@$4@vR@vR@vR@$4@Eu Eu vR@vR@Eu Eu Eu Kv Eu vR@vR@$4@$4@<|@<|@[|@[|@[|@[|@<|@<|@$4@$4@$4@Kv Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E Kv Kv Eu vR@vR@Kv Kv Eu $4@<|@[|@:|@_|@W:@;! /d@/d@(7 /d@O9 @A@RT@[`@Cv@C&#Y=#P~#O~#u_$pR#S2*]T#h_*]T#t_$t_$k`&0Q=0Q=t_$(T=R2*z0-a|*z0-H9-9t-RE p#-u&.]&-tk-sX%w{@w{@CI#S`%sX%sX%S`%S`%b@>b@>b@>b@X:@X:@r[@>b@>b@rG sG sG >b@>b@>b@r[@r[@X:@t! t! X:@X:@X:@X:@X:@X:@X:@X:@>b@>b@r[@r[@X:@X:@X:@X:@>b@>b@r[@X:@t! +~ +~ W:@;! ;! ]|@(7 /d@ 9 O9 O9 +L@.9 RT@bP@uR@uR@uR@uR@[`@[`@uR@uR@uR@[`@b.#UE@b.#i@#Cv@i@#b.#[`@UE@i@#Cv@Cv@j$#j$#j$#j$#Cv@i@#'m#vK Rw#2i n@#Hz Ku zr$K2$s[#pS$p>#)Q#99$ b$Hm$1 @Tm#co*ft-gt-ht-it-jt-kt-lt-mt-Y3-m0-nt-ot-pt-qt-rt-rt-st-Zq-tt-sj-ut-vt-wt-p0-xt-yt-zt-At-Bt-=|-Ct-Dt-Et-Ft-O8-Gt-Ht-It--r-Qs-Jt-;r-Kt-Rs-#q-Lt-Lt-Lt-Mt-Nt- q-Ot-Pt-wl-wl-gg-gg-wd-{b-Bh-Bh-;s-;o-fn-^r-Qt-_b-(b-~b-=a-Vg-Rt-Rt- o-`n-`n-`n->g-St-St-~b-#a-<|-<|- m- m-mj-'o-Bm-Bm-'o-mj-9h-Tt-Ut-9p-9p-Ut-Ut-Vt-vo-Wt-Xt-Yt-Xt-Zt-Zt-`t-~r- u- u-.u-+u-@u-#u-$u-oj-%u-%u-Eh-&u-*u-ya-nf-=u--u-;u->u-,u-'u-)u-!u-~u-{u-]u-^u-/u-(u-_u-:u-!@3T@b{$$8$2/+cv$Wk#s:=|u-1u-%w&1E%!8&||@ST@ z Ow Ow cC%.y G'$#B%a!&=)&UH%*L%*L%*L%GJ%GJ%GJ%GJ%Nt%&E Eu <|@:|@(|@/|@/|@kI@')#QT@!)#!)#QT@')#kI@WA @~ ^|@/|@(|@_|@:|@:|@(|@:|@$4@vR@$4@vR@Kv u1$vR@vR@<|@:|@(|@^|@@~ WA kI@kI@kI@')#')#')#')#')#WA @~ ^|@/|@(|@(|@_|@_|@<|@$4@vR@Eu Eu Eu vR@vR@&E &E Kv Eu vR@$4@<|@[|@<|@<|@[|@[|@[|@:|@:|@:|@[|@[|@[|@<|@<|@$4@$4@$4@Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E Kv Eu vR@$4@$4@Eu Eu vR@<|@[|@_|@(|@/|@Y:@]|@ 9 9 9 O9 .9 bP@bP@UE@j$#Z=#VE@N~#u_$qR#pR#S2*h_*(p=h_*+6*+6*h_*]T#+6*yD %1*2u-$1*$1*a|*](-de->+-3u-S`%4u-uG#j(#w{@CI#S`%sX%&r=sX%sX%S`%b@>b@rG >b@>b@r[@X:@r[@r[@r[@r[@r[@r[@r[@r[@rG rG >b@>b@r[@r[@r[@X:@rG >b@>b@r[@X:@t! +~ +~ W:@Y:@Y:@;! ]|@(7 /d@/d@+L@.9 @A@RT@bP@bP@RT@RT@[`@[`@uR@uR@uR@uR@[`@b.#[`@UE@i@#UE@uR@bP@[`@b.#b.#UE@i@#j$#j$#j$#j$#Ag#7q#zn#4!#`O%1j n@# l #p@h^@()#iT$tx$!Q#0T+(1&K$+Xx$DM@CY&9u-0u-au-$n-bu-cu-du-eu-fu-:h-^i-gu-'p-hu-iu-ju-ku-lu-mu-dk-nu-ou-pu-qu-ru-su-tu-uu-vu-wu-xu-yu-n!-Zq-zu-Au-Bu-Cu-Du-Eu-Fu-Qs-+q-Gu-Hu-Iu-Ju-Ku-Ku-Kt-Hu-Lu-.q-:p-0m-Mu-Nu-Ou-fc-dn-dn-fn-fn-en-en-5r-Qt-Pu-Pu-(b-<|-8c-Am-8p-8p-8p-8p-<|-`s-/b-*a-wi-#a-Pu-mj-Qu-mj-6c-Bm-]b-'o-{b-9h-0c-mo-[p-Ut-Ru-[p-uo-Su-Xt-Tu-Uu-Uu-5q-5q-Vu- q-Wu-Xu-Jt-.q-Sn-am-Yu-Zu-8k-Ai-Bi-Ci-*u-^c-Ob-`u- v-.v-+v-@v-#v-$v-%v-&v-*v-=v--v-;v->v-,v-'v-)v-!v-~v-{v-]v-^v-U(#/v-o{={8%fm@@x@,{+w<@5&# n+A'$v}=*c&(v-!8&n$#dP@QC Pw cC%.y ^G%Nt%#B%}H%_v-nm&oF%GJ%GJ%GJ%Nt%Nt%Nt%u1$Eu $4@[|@(|@^|@@~ WA WA B_#B_#B_#')#1f YA @~ ^|@(|@(|@_|@_|@_|@:|@:|@:|@:|@$4@Kv Kv Eu Eu Kv &E $4@<|@:|@(|@^|@YA a~ 1f ')#')#')#kI@1f 1f a~ a~ ^|@/|@(|@:|@[|@[|@[|@[|@$4@$4@vR@Eu Eu vR@vR@$4@&E &E Kv Eu $4@[|@_|@(|@:|@:|@:|@:|@:|@:|@:|@:|@<|@<|@<|@<|@$4@$4@vR@vR@Eu Kv &E u1$Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Kv Eu vR@$4@$4@vR@$4@<|@:|@(|@/|@@~ @~ Y:@(7 O9 +L@O9 +L@RT@[`@[`@i@#Y=#P~#ir#0u#tq=5N=pR#(p=h_*^T#(p=0Q=]T#^T#h_*T8 GA=v1*a|*$1*$1*:v-b@>b@rG sG sG tG r[@r[@r[@r[@r[@X:@X:@X:@X:@r[@rG sG sG rG >b@r[@r[@r[@r[@r[@r[@r[@r[@r[@sG rG rG rG >b@>b@r[@r[@rG >b@>b@r[@X:@t! +~ +~ +~ +~ W:@Y:@;! ]|@]|@(7 O9 +L@.9 @A@@A@@A@.9 .9 bP@RT@@A@@A@@A@@A@RT@RT@uR@[`@b.#[`@bP@@A@RT@uR@uR@[`@UE@Cv@j$#j$#j$#Ag#1;#'O@}r=3v-4v-1j 4n s) oP%J&#s[#$Q${q$=i#A@$98$SQ$re#@@%5v-ft-6v-7v-8v-9v-0v-av-bv-ud-qd-cv-dv-qt-ev-fv-gv-hv-iv-jv-kv-lv-mv-nv-ov-pv-qv-rv-sv-tv-uv-vv-wv-ut-Et-xv-Qp-yv-zv-Av-@s-Os-Bv-Fu-Gu-Cv-Dv-Ev-Fv-Gv-Hv-,r-,r-Iv-Sn-Jv-Kv-Lv-Nu--t-nj-Mv-Mv-Nv-Nv-^s-cn-Ee-Qu-^b-^b-Ov-Pv-mo-mo-mo-mo-wi-Pu-6q-6c-vd-Qu-Ee-]b-Ee-{b-vd-]b-4h-6c-wd-0c-ng-Qv-Rv-Ru-Sv-Sv-Tv-Xt-Tu-Uu-Xs-Xs-Uv-Uv-`p-Vv-Wv-Wv-Qs-Xv-'n-:p-Yv-Zv-~l-M7-`v-4c- w-u9-Pb-`u-.w-+w-@w-#w-$w-%w-&w-*w-=w--w-;w->w-,w-'w-)w-!w-~w-{w-]w-^w-/w-:J+AZ+y/+<6$7)#T)@j2$;[@%c$@^+GT p2%P-$p)$lQ (0@Kv Lv Ow ^G%^G%GJ%oF%=)&nm&_v-nm&G'$Nt%Nt%u1$u1$&E &E &E [|@_|@/|@@~ YA a~ a~ a~ ')#kI@YA @~ /|@_|@:|@:|@_|@_|@_|@:|@:|@[|@[|@[|@<|@Eu u1$u1$Kv vR@Eu Kv :|@_|@/|@@~ YA kI@')#B_#B_#')#kI@1f a~ YA WA WA /|@(|@:|@<|@$4@$4@<|@<|@$4@$4@vR@Eu vR@vR@$4@<|@$4@vR@vR@vR@$4@[|@(|@/|@:|@[|@[|@[|@[|@[|@[|@[|@$4@$4@$4@vR@vR@vR@Eu Eu Eu Kv u1$Nt%GJ%Nt%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Eu vR@$4@$4@<|@<|@[|@:|@(|@^|@WA YA a~ ;! /d@O9 .9 .9 @A@uR@b.#[`@Cv@Z=#ir#O~#u_$pR#^T#5N=S2*h_*(p=(p=]T#h_*(X%(p=s|*Wy=z0-$1*:v-:v-$1*`4-RE (w-w{@{e.vu#CI#b,+CI#sX%*r=N:*vu#N:**r=sX%.9..9..9.):.n.>n.;n.", "#t4 T3 S3 f5 :u 7J@s[ Yk S} S} i@#UE@uR@@A@B_#kI@+L@O9 O9 9 /d@(7 (7 ]|@+~ t! X:@r[@>b@rG sG tG rG rG >b@>b@r[@X:@X:@X:@t! X:@>b@sG tG sG rG rG r[@r[@r[@r[@r[@r[@r[@r[@sG sG rG rG >b@>b@>b@r[@rG >b@r[@r[@X:@t! +~ +~ t! +~ +~ W:@Y:@;! ]|@]|@O9 +L@+L@.9 .9 +L@O9 O9 .9 .9 +L@O9 O9 O9 +L@+L@bP@[`@[`@uR@@A@.9 @A@bP@bP@uR@b.#i@#Cv@j$#C&#Ed#-8 fB#gK#=M%p%#S!@]d hp k9$z<@t)%t[#6>%6=%B@$L{$>N$mJ#P^%:w-~p*Hp-o--t-nj-6k-vd-Ee-Qu-0c-0c-Gw-%{-%{-Gw-gg-Ee-gg-vf-vf-gg-vd-3h-Ee-wd-vd-4h-4h-vd-wd-Ee-ng-Xs-Sv-Sv-Xs-Sv-Tv-Yt-Tv-Rv-Ys-*r-`p-`p-Hw-Iw-Ps-Jw-Qs-Qs-'n-:p-Kw-Lw-M7-$0-R7-od-xe-v9-Mk-Mw-Nw-Ow-]t-Pw-Qw-Rw-Sw-jw-Tw-Uw-Vw-Ww-Xw-Yw-J;#1)$Zw-`w- x-.x-+x-AT+v_+'(${l${v$/-#6K#%y s7 8q 5F EN 2g$k$#(0@&E .y .y Ow Xw GJ%oF%PL%=)&nm&_v-nm&G'$u1$u1$&E &E Kv Kv Eu (|@/|@@~ YA a~ 1f 1f 1f 1f YA ^|@:|@<|@<|@<|@<|@(|@(|@_|@:|@[|@<|@$4@$4@$4@Kv Nt%u1$Kv vR@$4@vR@_|@(|@^|@YA 1f B_#!)#))#B_#')#kI@1f YA WA @~ ^|@(|@_|@[|@$4@vR@vR@$4@<|@$4@$4@vR@vR@vR@$4@<|@<|@:|@[|@<|@$4@<|@[|@_|@(|@[|@<|@<|@<|@<|@<|@<|@<|@$4@vR@vR@vR@Eu Eu Kv Kv Eu Kv u1$GJ%GJ%GJ%Nt%u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Eu vR@$4@<|@<|@[|@:|@_|@/|@@~ YA 1f kI@;! /d@+L@.9 .9 @A@uR@UE@b.#Cv@VE@N~#0u#85*5N=(p=(X%h_*]T#(p=(p=]T#]T#^T#(p=rU=yq-$1*$1*a|*:v-@c-tk*H9-u&.{e.6w=CI#&r=j(#S`%&r=uG#vu#;Z+vu#uG#&r=sQ@<(+.9.):.b@r[@r[@X:@>b@r[@t! +~ t! X:@>b@rG tG sG sG rG >b@>b@r[@r[@>b@>b@>b@rG rG rG sG sG -! tG tG rG >b@r[@X:@X:@r[@X:@t! +~ W:@Y:@;! ;! ;! ]|@/d@O9 O9 O9 9 /d@ 9 O9 O9 +L@.9 RT@uR@[`@bP@bP@RT@RT@@A@@A@.9 .9 9 .9 uR@b.#b.#UE@Cv@Ed#@<#ZD#fB#gK#|m *x-7n s7 #p@p!$e]@,,$X!%Qz$b]@M#$Vy$,L$b>%/H$z(%=x--x-;x->x-,x-'x-)x-!x-~x-R7-W9-{x-]x-^x-/x-(x-_x-:x-r-lo-lo-bm-zx->n-yx-uf-Ax-{i-C2-A(-Bx-S8-Cx-Dx-Ex-Fx-.:-Gx-Hx-Ix-:f-Jx-Kx-Lx-Mx-Nx-]K$Ox-Px-Qx-Rx-Sx-Tx-Ux-Vx-0*+F3$xx$:G$s[#bj 4, 1j O.%k%&X~#||@dP@vR@vR@PC .y aK%u1$Nt%oF%PL%-)&*7&_v-nm&R5@Eu &E u1$Kv $4@(|@@~ ^|@YA ')#))#+W@))#QT@')#^|@/|@:|@<|@$4@$4@$4@<|@Eu Eu Eu Eu Eu vR@vR@vR@Kv Kv Kv Nt%*L%GJ%Kv $4@:|@_|@/|@@~ a~ kI@B_#QT@YA a~ a~ a~ YA ^|@(|@:|@$4@vR@vR@Eu vR@[|@_|@/|@[|@<|@$4@vR@vR@<|@[|@_|@[|@[|@<|@<|@[|@:|@_|@_|@[|@[|@[|@<|@<|@$4@$4@$4@[|@[|@<|@$4@vR@Eu Eu Kv Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$Nt%Nt%Kv Eu Eu vR@$4@<|@[|@[|@[|@:|@(|@/|@@~ YA a~ 1f /d@/d@ 9 .9 bP@b.#UE@UE@Cv@j$#Z=#ir#Ut&pR#^T#h_*h_*h_*h_*S2*(p=(p=S2*]T#]T#R2*$1*:v-Q2*u1*Zh-Zh-q7-fs-F6.#_.vu#bQ#S`%S`%&r=CI#b,+o&=j(#w{@w{@Q+&b@rG sG sG sG rG rG >b@>b@>b@rG >b@X:@t! t! X:@r[@>b@rG rG rG rG rG >b@>b@>b@>b@>b@>b@rG rG sG sG sG tG tG sG rG rG >b@r[@r[@>b@r[@r[@X:@t! +~ W:@Y:@;! ]|@/d@ 9 O9 O9 O9 9 O9 O9 O9 +L@.9 @A@RT@bP@.9 .9 .9 .9 .9 .9 +L@+L@/d@+L@RT@bP@bP@uR@UE@Ag#@<#ZD#fB#_c#|m ]t ^1 :t L$ns*`x- y-.y-+y-@y-#y-$y-%y-&y-*y-=y--y-;y->y-,y-'y-)y-[x-!y-~y-{y-]y-^y-/y-(y-_y-:y-n-ny-oy-py-qy-ry-sy-ty-Y0-Kr-Es-G[-uy-vy-wy-xy-yy-zy-Ay-By-Cy-Dy-Ey-Fy-Gy-<%$A-*Hy-Iy-Jy-Ky-Ly-My-%-%6/%Iy$t[#o9+2A 8q 0B Ny-1Z&+n@$4@Eu Eu ^Y@^Y@PC .y u1$Nt%oF%#B%=)&}H%a!&|u%(0@Kv Kv Eu $4@:|@^|@WA 1f kI@')#B_#')#1f YA @~ _|@:|@<|@$4@vR@vR@$4@$4@Eu Eu Eu Kv Kv Kv Kv Kv u1$u1$u1$Nt%GJ%Nt%Eu [|@(|@(|@^|@WA a~ 1f ')#B_#WA WA WA @~ ^|@_|@[|@$4@Eu Eu Eu vR@$4@<|@:|@_|@<|@$4@vR@vR@vR@$4@[|@:|@[|@[|@[|@[|@[|@:|@_|@_|@:|@:|@[|@[|@<|@<|@<|@<|@[|@[|@<|@$4@vR@Eu Kv Kv Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$Eu Eu vR@$4@<|@[|@[|@:|@:|@_|@(|@^|@WA a~ 1f kI@ 9 9 O9 @A@uR@b.#UE@i@#j$#C&#VE@N~#u_$pR#^T#S2*h_*h_*h_*h_*]T#h_*(p=(X%s_$R2*a|*z0-8f-Kj-a|*:v-5$-Hg@&r==>-CI#Q+&&r=CI#S`%&r=uG#*r=sX%sX%uG#;Z+0+u.@yi.yi.,0+,0+u.@6g.3<@3<@..=..=..=..=U*@U*@..=..=..=..=..=..=..=..=3<@3<@3<@3<@3<@3<@3<@3<@17*17*xE*xE*xE*U*@U*@U*@=~@=~@b@rG rG rG sG sG sG sG sG rG >b@r[@X:@X:@X:@X:@>b@>b@>b@rG rG rG rG rG >b@>b@rG rG sG sG sG tG sG sG sG rG rG rG rG rG rG rG >b@>b@r[@X:@t! t! Y:@;! (7 9 O9 O9 O9 O9 +L@+L@+L@+L@+L@+L@+L@+L@ 9 9 9 9 O9 O9 O9 O9 /d@ 9 O9 O9 O9 +L@uR@J,#@<#S*#|6 [m kr#o| N1 .r Tj Uj +/$;@#D_#E_#,n#:J$!Q#M$+6Z.T4$)H$UR$g %Sy-Ty-Uy-Vy-Wy-Xy-Yy-Zy-`y- z-uu-.z-+z-@z-#z-$z-%z-&z-*z-=z--z-;z->z-,z-'z-)z-!z-~z-]y-{z-]z-^z-Ei-`q-c7-/z-(z-_z-Tq-:z-dx-r-%s-Rs-lo-ko-cy-1z-2z-3z-4z-5z-6z-hy-hy-hy-gy-jy-7z-$u-Yu-Yu->n-yx-8z-8z-8z-8z-fq-Kw-9z-Yv-0z-Kw-az-$u-az-Kw-0z-bz-0z-Yv-9z-$u-Cw-Lv-Kv-Lv-Kv-=t-$u-$u-Nu-ly-6k-!l-De-De-De-yx-Qn-cz-cz-,n-Pn-dz-ez-fz-e]-gz-a7-/5-hz-iz-jz-kz-lz-mz-nz-h^-oz-pz-qz-rz-sz-tz-uz-vz-wz-xz-^w-!P#yz-zz-Az-Bz-26%r9%Mt$&R$6r$Zx#G&#[f tI@JT#J0-JG% z QC Lv PC ^Y@ST@vR@Kv Nt%Nt%oF%oF%#B%tj%ox$n!$(0@vR@$4@:|@(|@@~ YA a~ !)#B_#kI@YA ^|@_|@<|@$4@$4@$4@vR@Eu Eu Eu vR@vR@Kv Kv Kv &E u1$u1$Nt%Nt%*L%Nt%u1$u1$u1$Kv [|@(|@^|@^|@@~ WA YA YA a~ a~ /|@/|@/|@_|@[|@vR@Kv &E &E &E Eu vR@$4@$4@$4@$4@vR@vR@vR@Eu vR@$4@<|@[|@[|@[|@:|@:|@_|@_|@_|@(|@_|@_|@:|@:|@:|@[|@[|@[|@[|@<|@<|@$4@vR@Eu Kv Kv Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$&E &E Eu vR@vR@$4@<|@[|@:|@:|@_|@(|@/|@@~ YA 1f kI@')# 9 O9 .9 RT@uR@b.#i@#Cv@Y=#Z=#P~#0u#85*5N=^T#S2*S2*h_*h_*0Q=0Q=]T#(p=(X%(T=2u-a|*a|*8f-Zh-Wi-$1*a@)h-{1-Dz-B3- j-Sj-B8-2v-On=Hq-gn=Q_-=o=8(-U3 ub 4##s[ Yk t[ e5 /0#'p <} <} .9 .9 +L@O9 9 /d@/d@(7 (7 (7 ]|@;! Y:@W:@+~ +~ r[@r[@>b@rG sG tG -! -! -! tG sG rG r[@X:@X:@X:@r[@r[@>b@>b@rG sG sG tG rG rG rG sG sG sG tG tG rG rG rG sG sG sG sG sG tG tG sG sG rG >b@>b@>b@W:@Y:@;! (7 /d@ 9 O9 O9 +L@+L@+L@+L@+L@O9 9 /d@]|@]|@]|@(7 (7 (7 /d@/d@]|@(7 ]|@;! Y:@]|@+L@:} `8 ua %l d2 Q1 p| [} Tj Bm Cn .G@])#X^#g>#O-%>t#,v$z@%E3$3w+4($XK+Tm#Ez-Fz-Gz-Hz-Iz-Jz-Kz-Lz-Mz-Nz-Oz-qu-Pz-Qz-Rz-Sz-Tz-Uz-Vz-Vz-Wz-Xz-Yz-Zz-`z- A-.A-Wz-+A-@A-#A-$A-%A-%)-0x-Qr-7w-&A-*A-=A-Lr--A-;A->A-,A-rw-Eu-Xv-Lu-cm-'A-cy-1z-2z-3z-4z-4z-)A-)A-)A-!A-qx-qx-ox-px-9z-Yu->n->n-~A-{A-{A-~A-]A-^A-0z-az-0z-0z-9z-px-/A-/A-/A-/A-0z-0z-az-9z-Cw-Cw-Kv-Kv-Cw-Cw-7z-$u-=t-ux-6k-!l-De-vf-3h-Lw-(A-(A-Qn-_A-_p-:A-b@rG sG tG -! -! -! tG sG rG >b@X:@X:@r[@r[@>b@>b@rG sG sG tG rG rG sG sG sG tG tG tG sG sG sG sG sG tG tG tG -! -! tG tG tG sG sG sG t! +~ W:@Y:@]|@(7 9 9 O9 +L@+L@+L@O9 9 (7 ]|@;! ;! ;! ;! ;! ;! ;! ;! Y:@Y:@Y:@+~ t! +~ (7 7, ,p *! *! Sj Sj ;[ P9 Sg -{ Mc 9_$_J$+-#Q-$#-#IE+Gs=8W.7:@x1#,Z#*6$Q,+`]%kA-lA-mA-nA-oA-pA-qA-rA-sA-tA-uA-vA-wA-xA-yA-zA-gr-AA-BA-CA-DA-EA-hr-FA-GA-HA-IA-JA-KA-mn-vv-LA-yu-MA-Bs-%)-Bs-Ih-y_-!6-NA-OA-PA-QA-Ms-RA-Iw- q-*t-@u-ox-ey-2z-2z-SA-SA-TA-UA-UA-UA-VA-WA-Bw-Kv-7z-9z-:p-Pn-~A-+s-+s-XA-YA-ZA-`A-`A- B-`A-ey-Jv-.B- B- B-`A-+B-+B-+B-+B-@B-ox-Jv-Bw-Bw-Kv-Kv-=t-$u-$u-6k-!l-De-3h-2h-^j-#B-#B-#B-(p-/p-$B-%B-&B-*B-=B--B-;B->B-,B-'B-)B-!B-~B-{B-]B-}8-^B-/B-(B-_B-:B-+,G$2%+}s#`+$>v$J_#ck#N3%)M &pM%*L%*L%GJ%u1$PC ^Y@v! (|@^|@YA kI@B_#')#kI@1f YA @~ _|@vR@&E u1$u1$u1$Nt%u1$u1$u1$&E &E &E u1$Nt%Nt%Nt%GJ%GJ%*L%*L%pM%Nt%Kv $4@<|@[|@(|@WA 1f WA WA @~ ^|@/|@(|@_|@_|@<|@$4@vR@Kv u1$GJ%*L%pM%Nt%u1$Kv vR@vR@Eu Kv &E Kv Kv vR@$4@<|@[|@[|@[|@:|@_|@(|@/|@^|@/|@/|@(|@(|@(|@_|@_|@:|@:|@:|@[|@<|@$4@$4@vR@Eu Kv &E &E Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$&E Kv Kv Eu Eu $4@<|@<|@[|@:|@_|@(|@(|@^|@@~ WA a~ kI@')#QT@!)#O9 @A@[`@b.#b.#UE@C&#VE@P~#N~#Ut&tq=5N=^T#(p=(p=^T#+6*T8 h_*tq=qR#T8 %1*@c-Kj-$1*:v-Zh-1d-:v-_2*,H.FQ kS.Q+&&r=S`%bp.w{@S`%sX%&r=uG#uG#*r=sX%CI#g|.g|.cO@cO@cO@dO@dO@dO@g|.g|.g|.g|.g|.g|.g|.g|.*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#*r=*r=uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*N:*):.b@rG sG tG tG -! -! tG rG >b@r[@>b@>b@>b@rG rG rG rG rG rG sG sG sG tG tG -! -! tG tG tG tG tG sG sG sG -! -! tG tG tG tG tG tG r[@r[@X:@t! +~ ;! (7 /d@/d@ 9 O9 +L@O9 /d@]|@;! ;! ;! ;! Y:@Y:@W:@W:@W:@+~ W:@W:@t! r[@X:@W:@_,@/,@F> [} p| ;[ h< u/@u/@u/@u/@Sh Oe o{ FT 3h PB%U^&2|&5B-:'$m~+k7$[V+Sm#,'$6B-L0-ne-7B-8B-9B-0B-aB-bB-cB-.:-dB-eB-+h-fB-AA-gB-hB-iB-jB-kB-lB-mB-nB-oB-pB-qB-^y-rB-sB-tB-uB-vB-nu-wB-nu->B-xB-yB-st-Nr-zB-AB-dx-BB-Zp-=q-wl->n-az-`A-3z-3z-SA-SA-TA-TA-UA-UA-VA-VA-Bw-Bw-@B-9z-:p-,n-+s-XA-XA-Av-CB-ZA- B-`A- B- B-+B-ox-.B- B-`A-+B-ey-ey-+B-+B-dy-dy-nx-Bw-Bw-Bw-Kv-Cw-Yv-Yv-Zu-Zu-De-3h-2h-^j-DB-DB-DB-EB-FB-GB-HB-Up-!6-IB-z_-xB-,B-JB-KB-LB-MB-NB-OB-2/-w]-PB-QB-RB-SB-TB-UB-VB-WB-BZ+ko&<'+h3%CW.@++uD$6Y+ks+Cu+Mf EN b@>b@>b@sG sG sG tG tG -! -! -! -E -E -! tG tG sG rG rG tG tG tG tG tG tG tG tG rG sG rG >b@X:@+~ ;! (7 ]|@(7 9 O9 O9 /d@]|@Y:@(7 (7 ]|@Y:@W:@+~ t! X:@X:@t! W:@+~ r[@r[@X:@Xr :,@1k t/@Ld Cn Bm Nd Nc Sh Nf Sk#c0&h*$C-,C-'C-)C-!C-~C-~C-{C-]C-^C-/C-(C-_C-tv-:C-uB-/#M~$!-#*>#f]@^)#8~ -E Eu q<$u~$$h%CD%1u%CD%5'$Nt%oF%oF%|f 5'$G'$UH%&E Kv QC v! 7`@_N%lt@h5%dw kI@a~ YA ^|@(|@[|@<|@Kv Kv &E u1$u1$u1$u1$&E u1$&E &E Kv &E Nt%*L%pM%pM%pM%*L%GJ%Nt%Nt%u1$u1$Eu <|@:|@_|@:|@[|@_|@/|@(|@_|@:|@[|@<|@vR@Eu Eu vR@Eu &E Nt%Nt%Nt%u1$&E vR@vR@Eu Kv Kv Eu Eu vR@Kv vR@<|@:|@(|@(|@(|@(|@:|@(|@^|@WA YA WA ^|@(|@:|@:|@[|@[|@<|@<|@<|@<|@$4@$4@vR@Eu Kv &E u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$&E Kv Eu vR@vR@$4@[|@[|@:|@_|@(|@/|@/|@^|@WA YA a~ kI@B_#!)#))#+W@+L@uR@Cv@Cv@UE@i@#Z=#O~#0u#u_$qR#(X%(p=(p=(p=^T#(X%S2*h_*(p=S2*0p=wj&a|*a|*a|*2u-z0-:v-a|*f(.=Z+tk-sX%w{@w{@j(#*r=vu#Q+&*r=uG#uG#uG#*r=*r=N:*;Z+cO@cO@cO@dO@dO@rQ@rQ@rQ@rQ@rQ@rQ@rQ@rQ@rQ@rQ@rQ@*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=N:*uG#*r=&r=&r=*r=uG#N:*N:*N:*N:*N:*N:*N:*N:*N:*cO@g|.b@>b@r[@r[@sG sG tG tG tG -! -! -! }g }g -E -! tG rG rG >b@tG tG tG tG tG tG tG -! tG tG tG sG >b@t! Y:@]|@Y:@]|@/d@O9 O9 9 ]|@;! /d@/d@]|@;! W:@t! X:@r[@>b@t! W:@+~ X:@>b@>b@r[@s! :)@:,@H0 wa 8_@*@.xb -C+4C#;{ aY gG#+9 D-{z-,D-'D-]z-)D-!D-!D-~D-~D-{D-]D-^D-^D-/D-(D-_D-vs-bx-:D-Gt-io-n->n-~A-XA-Av-2D-3D-4D-5D-Qn-Qn-6D-6D-7D-+B-`A-+B-dy-ox-Jv-ox-@B-ey-cy-cy-ox-@B-9z-0z-fq-8D-9D-wx-~l-vf-`8-q6-N7-$0-{j-Nn-0D-aD-bD-cD-dD-eD-fD-}A-gD-hD-iD-jD-kD-lD-mD-D #EC-nD-,s#oD-pD-qD-rD-sD-[6*tD-G3$>4+})#f0$Cr+,I@&{#t)%;1+n{ [f -E Du QC Eu Kv F'$tj%1u%ox$|f Nt%oF%|f (0@R5@R5@E'$vR@$4@}A yK ]Q#*p@kf&^0#ew 1f YA /|@[|@vR@Kv &E u1$u1$u1$u1$u1$u1$u1$u1$&E Kv Kv Kv &E Nt%*L%g`%g`%pM%*L%GJ%Nt%&E Kv Kv vR@<|@:|@:|@<|@$4@$4@[|@:|@:|@[|@$4@vR@Eu Kv Kv Eu Kv &E u1$Nt%u1$Kv Eu <|@$4@Eu Kv &E Kv vR@$4@Eu vR@[|@(|@/|@^|@/|@/|@:|@(|@@~ YA YA WA ^|@/|@[|@[|@[|@<|@<|@$4@$4@$4@$4@vR@vR@Eu Kv &E u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$&E Kv Eu vR@$4@$4@[|@:|@:|@_|@(|@/|@^|@^|@YA a~ 1f ')#QT@!)#+W@w! +L@[`@j$#j$#i@#i@#Z=#0u#Ut&85*pR#^T#S2*S2*(p=^T#^T#Zq 5N=(p=T8 GA=v1*Wi-z0-z0-Wi-@c-8f-Q2*Vw@RF+fW=CI#&r=w{@,H.;Z+FQ j(#Q+&sX%N:*&r=w{@w{@N:*=>-cO@cO@dO@dO@dO@rQ@rQ@rQ@Z`+Z`+Z`+Z`+Z`+Z`+Z`+Z`+*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=vu#uG#*r=&r=&r=*r=uG#vu#N:*N:*N:*N:*N:*N:*N:*N:*dO@cO@S%>S%~h&0, &, ZQ.Bv&Bv&ur&w5&iS.y4&y4&iS.w5&o{+7P.7P.7P.7P.7P.7P.", "E-,E-'E-)E-!E-dd-~E-{E-]E-^E-Bu-:D-/E-(E-7C-:D-Ls-Yp-.s-_E-:E-].>].>].u`.HV.u!=[f.x{+xE*X@$.y&.==3P .== == ==.==3P )A&+y&.y& == ==%z&%' ;~ $(+7P.]@+w5&]@+y4&7P.]@+iS.iS.y4&oh.oh.", "-*c-Yx-2m*zE-6(-D^-%i-&i-v4 G[*Pj Pj kj#ub t[ Vr `3 d2 uR@uR@bP@@A@.9 O9 9 9 9 (7 ;! Y:@;! ;! W:@t! W:@+~ +~ +~ t! t! t! t! rG sG sG sG tG tG -! -! [|@<|@$4@vR@vR@$4@<|@[|@[|@:|@:|@:|@[|@$4@vR@Eu Eu Eu Eu Eu vR@vR@vR@vR@<|@$4@$4@$4@$4@vR@vR@vR@Kv Kv Eu Eu vR@$4@<|@<|@_|@/|@@~ a~ 1f kI@kI@kI@1f 1f a~ YA @~ (|@:|@[|@(|@:|@<|@[|@_|@_|@:|@<|@[|@<|@[|@[|@_|@^|@YA a~ 1f ')#!)#+W@+W@))#B_#>k&AE-BE-CE-DE-rF%)2+s[$f&@7G#^-+BM@BU$UM$EE-FE-GE-HE-:8->!-pb-m}-IE-JE-KE-LE-ME-NE-OE-PE-QE-RE-SE-TE-UE-VE-WE-XE-YE-ZE-Lh-`E- F-.F-+F-(g-@F-#F-$F-%F-&F-*F-=F--F-yu-MA-;F->E->F-,F-'F-)F-!F-~F-{F-]F-^F-/F-(F-/F-_F-;q-;q-:F-b@>b@rG rG sG sG sG tG $4@$4@vR@Eu Eu vR@vR@$4@<|@<|@[|@:|@:|@[|@<|@$4@vR@vR@vR@vR@Eu Eu Eu Eu Kv Kv Eu Eu Eu vR@vR@vR@Kv Kv Kv Kv Kv Eu Eu Eu [|@:|@/|@@~ YA 1f 1f 1f 1f 1f 1f a~ WA ^|@(|@_|@:|@<|@$4@<|@:|@_|@[|@<|@vR@vR@vR@vR@$4@[|@:|@_|@@~ YA 1f B_#!)#!)#!)#(C@BF-CF-DF-)1&Rz$N4$B1#JO$RU#+$#47$g>&gQ&EF-FF-GF-HF-R(-IF-!8-JF-hb-KF-LF-MF-NF-OF-PF-QF-RF-SF-TF-UF-VF-WF-XF-YF-ZF-`F- G-.G-+G-@G-@G-#G-$G-%G-&G-*G-=G--G-]o-;G->G-uB-,G-'G-)G-!G-~G-{G-]G-^G-/G-(G-_G-:G-S%_e.]@+iS.y4&oh.Kh+G|@G|@y4&y4&y4&y4&y4&iS.", "b@>b@r[@>b@>b@>b@rG rG sG sG $4@vR@vR@Eu Eu Eu Eu Eu vR@$4@<|@[|@:|@:|@[|@[|@<|@<|@$4@vR@Eu Kv &E &E u1$u1$u1$&E Kv Kv Eu Eu Eu Kv Kv &E &E u1$u1$u1$$4@<|@:|@(|@^|@WA a~ a~ 1f 1f 1f a~ YA @~ ^|@/|@<|@$4@vR@$4@[|@:|@[|@$4@vR@Eu Eu Eu Eu Eu vR@vR@:|@(|@^|@YA kI@B_#QT@$] CG-DG-EG-%c&Qz$%X#Nk$Pr#OX.Tb+7F$J$+<$&FG-GG-HG-IG-JG-KG-LG-8^-MG-IE-NG-OG-PG-KE-QG-RG-SG-TG-UG-VG-WG-XG-YG-ZG-fr-`G- H-.H-+H-@H-#H-$H-%H-&H-%H-*H-/g-=H--H-;H-=G->H-,H-'H-)H-!H-~H-'G-{H-]H-fD-^H-Fi-;F-;F-^H-/H-$)-$)-(H->E->E-_H-O3-:H-:H--ve.=>-w@.{S*S`%S`%S`%sX%sX%&r=&r=&r=sX%&r=uG#N:*vu#N:**r=&r=M:*Z`+rQ@dO@cO@cO@dO@dO@dO@dO@dO@cO@cO@cO@cO@g|.fW=vu#uG#&r=sX%&r=*r=uG#*r=&r=sX%S`%S`%sX%&r=*r=*r=&r=&r=&r=&r=*r=&r=sX%uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*uG#uG#*r=*r=&r=&r=uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*N:*&r=&r=&r=&r=&r=&r=*r=*r=N:**r=&r=*r=N:*N:*uG#&r=*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#vu#vu#vu#N:*N:*vu#vu#vu#uG#uG#uG#*r=&r=sX%sX%sX%uG#uG#uG#*r=*r=uG#uG#uG#*r=uG#uG#uG#uG#uG#uG#*r=uG#uG#uG#uG#uG#uG#uG#uG#sX%sX%sX%&r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#N:**r=&r=*r=N:*N:*uG#&r=&r=&r=*r=uG#*r=*r=&r=sX%uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*N:*xr*xr*&s*&s*=^@=^@=^@=^@=^@=^@=^@wr*wr*+v=+v=A9.Bv&]*=]*=]*=]*=]*=]*=]*=-~@-~@-~@-~@-~@-~@-~@=~@J> 23+x{+[f.u!=[f.OP*23+23+23+23+OP*OP*OP*OP*xE*B9.PN.cl..==%z&%z&.==cl.h%=_b+cl.3P .== ==)A&{h&ur&w5&iS.7P.Kh+Kh+7P.7P.oh.oh.y4&y4&iS.]@+", "b@rG rG r[@>b@>b@>b@rG rG sG sG $4@$4@vR@vR@Eu Eu Kv Kv Kv Eu $4@<|@[|@[|@[|@[|@[|@<|@$4@vR@Eu Kv &E u1$Nt%Nt%Nt%u1$&E Kv Kv Kv Eu Eu Kv &E u1$Nt%Nt%Nt%vR@vR@$4@[|@_|@/|@@~ WA a~ a~ a~ a~ YA WA @~ ^|@[|@$4@vR@$4@[|@:|@[|@$4@vR@vR@vR@vR@vR@Eu Kv Kv $4@$4@[|@_|@^|@YA kI@tR@BK N%$<1&is#X:$8x$,{#(X@)/#sy#1S#rr%R4$vH-wH-xH-yH-zH-AH-BH-CH-!0-hb-DH-EH-FH-FH-GH-MD-HH-IH-JH-KH-LH-=H-MH-NH-OH-PH-QH-RH-SH-TH-TH-UH-VH-WH-XH-YH-ZH-`H- I-.I-+I-=H-Lo-2e-@I-#I-$I-%I-&I-*I-=I-'D--I-;I->I->I-;I-tB-xu-}C-,I-wB-2C->B-'I-'I-)I-(G-xs-Or-!I-+k-7C-BB-8C-H-:I--mI-@:+S`%S`%sX%sX%&r=&r=*r=*r=S`%&r=uG#vu#vu#vu#uG#*r=dO@dO@cO@cO@dO@rQ@Z`+M:*dO@dO@dO@cO@g|.g|. u]#US+OP*x{+x{+OP*23+23+23+23+23+23+OP*OP*xE*ZQ.cl.3P )A&.y&+y&)A&3P _b+_b+PN.cl..== == ==&, !c.iS.oh.7P.Kh+oh.iS.]@+oh.y4&y4&iS.]@+]@+", "b@rG >b@>b@rG rG sG sG sG tG $4@<|@<|@<|@$4@Eu Kv &E &E Kv Eu $4@$4@$4@$4@$4@<|@<|@$4@vR@Eu Kv &E &E u1$u1$u1$u1$u1$&E &E &E Eu Kv Kv &E &E u1$u1$Nt%vR@vR@vR@$4@<|@:|@(|@/|@WA WA YA YA YA WA @~ @~ (|@:|@<|@<|@[|@:|@<|@vR@$4@$4@$4@<|@$4@vR@Eu Kv Eu Kv Kv Eu <|@_|@@~ YA nQ .A@y! 9_$X]$N&#>-#X[&R_#1|&qq@rV$HQ$W8&rI-sI-tI-uI-vI-W(-wI-1^-i}-xI-yI-zI-AI-BI-CI-DI-DI-EI-FI-GI-HI-II-JI-KI-LI-MI-NI-OI-PI-QI-RI-SI-TI-UI-VI-WI-XI-YI-ZI-`I- J-.J-+J-@J-#J-$J-%J-&J-*J-=J--J-;J->J-,J-'J-)J-(y-!J-|x-~J-{J-]J-^J-/J-|y-1C-(J-_J-zs-:J-b@>b@rG sG sG sG tG tG -! -! <|@[|@[|@[|@<|@vR@Kv &E u1$&E Kv Eu Eu Eu Kv Kv $4@$4@$4@vR@Eu Kv Kv Kv &E &E &E &E &E u1$u1$u1$Kv Kv Kv Kv Kv &E &E &E $4@vR@Eu Eu Eu $4@<|@:|@^|@^|@@~ WA WA WA @~ ^|@@~ (|@:|@[|@:|@:|@$4@Eu vR@vR@$4@<|@<|@vR@Eu Kv Kv &E Nt%Nt%u1$Eu [|@_|@-8@;8@{M W-@UJ#ak#)<$TU%7D$qo@MJ@tx$8;&c>&yJ-zJ-AJ-BJ-CJ-DJ-EJ-FJ-GJ-HJ-6a-IJ-JJ-KJ-Cc-~4-pc-LJ-MJ-NJ-OJ-XC-PJ-QJ-RJ-SJ-TJ-UJ-VJ-WJ-XJ-YJ-ZJ-`J- K-.K-+K-@K-#K-$K-%K-&K-*K-=K--K-;K->K-,K-'K-)K-!K-~K-{K-YF-]K-^K-/K-(K-/C-JA-_K-:K- ~h&&, ZQ.ZQ.Av&&, &, ZQ.{h&Av&Bv&ZQ.&, &, ZQ.B9.U*@x{+x{+x{+x{+[f.u!=HV.HV.HV.u!=u!=u!=u!=", "b@sG sG tG tG -! -! -! -E [|@:|@:|@:|@[|@$4@Eu &E u1$&E Kv Kv Kv &E &E u1$$4@vR@vR@vR@Eu Eu Eu Kv Eu Eu Kv &E &E u1$u1$Nt%Kv Kv Kv Kv Kv Kv Kv Kv $4@vR@Eu Kv Kv Eu $4@<|@(|@/|@^|@@~ @~ @~ @~ ^|@YA ^|@(|@_|@_|@:|@$4@Kv Kv Eu $4@<|@<|@vR@Eu Kv Kv u1$GJ%pM%*L%Nt%Eu $4@^A v! $p@_t jl fp 3=$cj 3j%c~#tK@Vj$gs$PK$/h&0_&Dk*FK-GK-HK-IK-JK-KK-LK-MK-NK-[[-{4-&e->f-ph-q}-OK-PK-QK-RK-SK-TK-UK-VK-WK-XK-YK-ZK-`K- L-.L-+L-@L-#L-#L-$L-%L-&L-*L-=L--L-;L->L-,L-'L-)L-!L-)L-~L-{L-]L-^L-/L-(L-_L-:L-_t-S%0, ZQ.ZQ.&, 0, ZQ.`%@[f.[f.[f.[f.[f.[f.[f.x{+u`.u`.HV.HV.u!=[f.", "#k.F6.8'%[{.8'%F6.M-,M-'M-)M-!M-~M-{M-~M-]M-^M-/M-/M-(M-_M-:M-#S3 2k=7J@t[ Vr j$#Cv@i@#b.#[`@uR@RT@RT@+L@+L@O9 /d@(7 ]|@;! Y:@;! Y:@Y:@W:@+~ t! X:@X:@t! X:@>b@tG -! -! -! -! $4@$4@vR@vR@Eu Eu Kv Kv Kv Kv Kv &E &E u1$u1$u1$&E &E &E &E &E &E &E &E &E &E &E &E &E &E &E &E u1$u1$&E &E Kv Kv Eu Eu Kv Kv Kv Kv Kv Kv Kv Kv Eu $4@[|@(|@^|@^|@^|@^|@^|@^|@^|@^|@(|@_|@[|@<|@<|@<|@$4@vR@Eu Kv &E &E Eu Eu Eu Kv Kv &E &E Lv cC%.D%'Y$Fu j@#(e N-,N-'N-)N-!N-~N-~N-{N-]N-^N-/N-(N-_N-:N-b@sG tG -! -! -! $4@$4@vR@vR@Eu Eu Kv Kv Kv Kv Kv &E &E u1$u1$u1$&E &E &E &E &E &E &E &E &E &E &E &E &E &E &E &E Nt%Nt%Nt%u1$u1$u1$&E &E &E &E &E &E &E &E &E &E u1$&E vR@<|@:|@(|@/|@/|@@~ @~ @~ ^|@/|@_|@[|@<|@<|@<|@$4@vR@Eu Kv &E &E Eu Eu Kv Kv &E &E &E .y Pv Pv Jv Cu =^$cs xt Qv 0> CN {)#FT GT %-#_J$5O.6r$rx$z4%UN-VN-WN-XN-YN-ZN-`N- O-.O-+O-@O-#O-$O-%O-&O-*O-=O--O-;O->O->O-,O-'O--N-)O-!O-~O-{O-]O-^O-/O-(O-_O-:O-(N-].u`.u!=[f.x{+x{+x{+[f.[f.x{+23+US+';$US+OP*x{+pK+>H*aH*(k=(k=(k=(k=aH*16.Ij=Ij=(k=aH*>H*", "#k.F6.8'%[{.8'%F6.P-,P-'P-)P-!P-~P-{P-]P-^P-/P-RF-(P-_P-:P-.D-].u`.HV.[f.x{+x{+x{+HV.[f.OP*US+';$US+23+lt*FG*>H*>H*aH*aH*aH*aH*>H*>H*>H*>H*>H*>H*aH*", "#k.F6.8'%[{.8'%F6.Q-,Q-'Q-)Q-!Q-~Q-{Q-]Q-^Q-/Q-^Q-(Q-_Q-:Q-!M-].>].u`.HV.u!=[f.x{+OP*u`.HV.[f.OP*OP*OP*x{+a1+lt*aH*>H*>H*>H*>H*>H*>H*lC&lC&GJ@>H*aH*(k=", "#k.F6.8'%[{.8'%F6.b@sG -! -E $4@$4@vR@vR@Eu Eu Kv Kv Kv Kv Kv &E &E u1$u1$u1$&E &E &E &E &E &E &E &E &E &E &E &E &E &E &E &E Nt%Nt%Nt%Nt%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%*L%*L%*L%GJ%Nt%&E Eu vR@[|@[|@:|@_|@_|@:|@[|@[|@<|@<|@$4@vR@Eu Kv &E &E Kv &E &E &E u1$u1$Nt%i0$Z;$!J -P Y;$],$],$G'$oF%UH%oF%Nt%GJ%*L%*L%u1$-E _e o$#lp -M Aj$_R@$g+,,$RB$K/&x1&EQ-WN-FQ-GQ-HQ-IQ-JQ-KQ-LQ-MQ-NQ-OQ-PQ-QQ-RQ-SQ-,P-+Q-TQ-UQ-VQ-WQ-XQ-YQ-ZQ-`Q- R-.R-+R-@R-#R-Xz-$R-%R-&R-*R-=R--R-;R->R-,R->R-'R- I-)R-!R-~R-OH-{R-]R-^R-/R-(R-_R-:R-H*>H*>H*aH*aH*lC&GJ@zw*>H*(k=16.", "#k.F6.8'%[{.8'%F6.#6J@$)#&[ wf=:u C&#C&#j$#j$#j$#Cv@Cv@Cv@b.#[`@bP@@A@+L@/d@]|@]|@;! Y:@Y:@W:@+~ t! X:@X:@X:@t! t! t! r[@rG tG -E $4@$4@vR@vR@Eu Eu Kv Kv Kv Kv Kv &E &E u1$u1$u1$&E &E &E &E &E &E &E &E &E &E &E &E &E &E &E &E &E u1$u1$u1$Nt%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%Nt%GJ%*L%*L%GJ%Nt%&E Kv Eu Eu $4@<|@[|@:|@:|@[|@<|@<|@$4@vR@Eu Kv &E &E &E &E &E u1$u1$Nt%Nt%],$=H$`I$lh$@I$@I$#B%DD%DD%4C%2C%FD%7C%5C%g`%Xw Cu Iv Iu Ju 7F l,$t1$H&#hx@/G%x@%WR$~U+sR-00&tR-1.%uR-vR-wR-wR-xR-yR-zR-AR-BR-CR-DR-ER-FR-GR-HR-IR-JR-KR-LR-MR-NR-OR-PR-QR-RR-SR-TR-UR-VR-WR-XR-YR-4M-ZR-7Q-7Q-`R- S-.S-+S-@S-9Q-#S-S-,S-1R-hP-eM-pN-'S-)S-!S-~S-{S-]S-^S-/S-(S-_S-:S-].>].u`.u!=a1+YQ+16.(k=aH*>H*aH*(k=(k=aH*aH*(k=(k=Ij=Ij=", "#k.F6.8'%[{.8'%F6.#eS-$)#Bu=|n C&#C&#C&#j$#j$#j$#j$#Cv@UE@b.#uR@@A@+L@/d@(7 ]|@;! Y:@Y:@W:@+~ t! X:@X:@X:@t! t! t! X:@rG tG -E $4@$4@vR@vR@Eu Eu Kv Kv Kv Kv Kv &E &E u1$u1$u1$&E &E &E &E &E &E &E &E &E &E &E &E &E &E &E &E Kv &E &E u1$u1$Nt%GJ%GJ%*L%*L%*L%*L%*L%*L%*L%*L%u1$Nt%GJ%*L%*L%GJ%u1$&E u1$&E Eu $4@[|@[|@:|@:|@<|@<|@$4@vR@Eu Kv &E &E &E &E u1$u1$u1$Nt%Nt%G'$4h EG%4h 4h PL%UH%ED%2C%#]*4C%7C%6C%5C%5C%aK%Jv Pv m($Iu ^d Z{$0A%.6%d9%Ps$07$MB@C:*Fb&I'-Rv%fS-gS-'*-hS-hS-iS-jS-kS-lS-mS-nS-oS-pS-qS-rS-sS-tS-uS-vS-wS-xS-yS-zS-AS-BS-XR-CS-DS-ES-FS-GS-HS-IS-JS-KS-LS-MS-NS-OS-PS-QS-RS-SS-}R-TS-US-US-VS-;S-WS-XS-YS-ZS-`S->S-1R- T-.T-+T-@T-#T-$T-%T-&T-*T-=T--T-;T-r'->T-,T-'T-)T-!T-~T-{T-]T-^T-/T-(T-_T-:T-k[*JT zd$UR%@F%#B%n!$dP@5'$Nt%&E Lv ^G%PC +n@7K%Bz%+D%cC%E'$l!$.N$|(&(<%HB$4z+Zi@6F h.#N.%I0-oI@6G@Fu Du Jv -z 9K%9K%Cu -z 9K%8'&v)&8'&9K%VH%Nt%GJ%GJ%GJ%*L%*L%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%*L%*L%*L%GJ%GJ%GJ%*L%*L%*L%pM%pM%g`%g`%g`%*L%*L%*L%*L%*L%*L%*L%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$&E Kv Eu vR@$4@$4@<|@[|@_|@(|@(|@_|@:|@[|@<|@[|@:|@_|@_|@:|@<|@$4@[|@[|@[|@[|@[|@[|@[|@[|@[|@[|@:|@:|@_|@(|@(|@(|@(|@:|@<|@vR@Kv u1$Nt%Nt%GJ%*L%*L%pM%pM%*L%GJ%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$&E Kv vR@<|@_|@^|@@~ /|@@~ YA YA WA WA a~ ')#;! ]|@/d@+L@RT@uR@b.#UE@i@#Cv@C&#VE@N~#0u#u_$85*u_$tq=(u ^T#S2*S2*^T#pR#]T#5N=u_$pR#+6*tU=p7-Wo-rg*sk-sk-lI-Jj-}(*2p%d=+0q.=>-sX%<{.Dr#Dr#7&+~e..9.b@sG tG -! $4@$4@vR@Eu Kv u1$u1$Nt%Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%&E &E Kv Eu vR@$4@<|@<|@vR@Eu Eu Kv Kv &E &E &E u1$u1$Nt%Nt%GJ%GJ%GJ%*L%oF%^,$oF%UH%UH%*L%~J%pM%*L%*L%*L%*L%*L%*L%*L%GD%Jv bs bs r_$r_$0q 6r 6r $5$$5$=;%=;%=;%P;%P;%>9%^V%`}*`x$SO=i[*[T-}T-|T-1T-2T-3T-4T-5T-6T-7T-8T-9T-0T-aT-bT-cT-dT-eT-fT-gT-hT-iT-jT-kT-QQ-lT-mT-nT-oT-pT-qT-rT-sT-tT-uT-vT-wT-xT-xT-WC-yT-zT-zT-AT-cL-bH-WC-BT-BT-CT-@T-DT-ET-FT-GT-HT-IT-JT-KT-LT-MT-NT-OT-PT-QT-zL-RT-ST-TT-UT-VT-WT-_(&,O&yw=:[%2g$-S k!$~@$tj%#B%PL%YI$YI$oF%oF%oF%|f E'$Eu .y ]G%Xw Xw Nt%|f kQ w~$n$#}|@}|@rG <|@Fu .y ^G%Xw GJ%GJ%GJ%GJ%GJ%GJ%GJ%pM%pM%pM%pM%pM%pM%pM%pM%*L%*L%*L%*L%*L%*L%*L%*L%pM%pM%pM%pM%pM%pM%pM%pM%Nt%Nt%GJ%GJ%*L%pM%pM%pM%pM%pM%*L%*L%GJ%GJ%GJ%Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%GJ%Nt%u1$&E &E u1$GJ%pM%g`%&E &E u1$&E Kv $4@:|@(|@_|@_|@_|@_|@_|@(|@/|@^|@(|@_|@:|@:|@:|@:|@_|@_|@:|@:|@:|@:|@[|@[|@<|@<|@$4@$4@<|@[|@:|@:|@_|@_|@:|@$4@Eu Kv Kv Kv Nt%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$Nt%Nt%Nt%u1$&E Kv -! tG rG X:@+~ W:@Y:@Y:@+~ ;! /d@ 9 (7 ;! ]|@]|@]|@/d@O9 +L@.9 RT@b.#Cv@VE@VE@ir#O~#Ut&85*qR#pR#(u SP=r3$ 8 SP=SP=^T#S2*(X%(X%&>-Mj=tU=XT-*sF.dO@[v.k]#!Z%vj&`T-`T-l;+3*@ U-w!+`8.`8.`8.`8.`8.`8.`8.<^+[^+'Z+2w.s}+`8.s}+2w.g|.cO@dO@cO@S%{h&&, Av&ZQ.Av&&, 0, &, Av&Bv&B9.B9.Bv&Av&xE*2.+u`.HV.[f.OP*US+';$d #x{+x{+x{+x{+x{+x{+x{+x{+Kh+Kh+7P.7P.oh.oh.x{+x{+lt*b=+b=+Ij=a1+16.YQ+YQ+2.+`%@B9.3<@ZQ...=ZQ.3<@B9.`%@4p=1.+&, J> ", "#k.b@rG sG tG tG $4@$4@vR@Eu Eu Kv &E &E Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$&E Kv Eu vR@$4@$4@$4@$4@vR@Eu Kv &E u1$u1$u1$u1$Nt%Nt%GJ%GJ%GJ%GJ%GJ%GJ%GJ%*L%*L%*L%pM%pM%*L%*L%*L%*L%*L%*L%*L%GD%i0$+y +y +y +y +y +y +y r_$r_$r_$r_$r_$r_$r_$6'$s1$Rn$-8$07$NO$y[%-`=@U-#U-$U-%U-&U-*U-=U--U-;U->U-,U-'U-)U-!U-~U-{U-]U-^U-]U-/U-(U-_U-:U-N AU-U^*r}+52.B6.Dv+t5.A6.%:+q4.q4.q4.z6.j3.g{+%:+A6.%:+g{+cO@rQ@Z`+rQ@g|.n.", "p cw 0u#ir#Z=#Y=#Y=#Y=#j$#i@#C&#i@#[`@bP@bP@RT@+L@/d@]|@]|@;! W:@+~ t! X:@r[@>b@>b@>b@rG sG sG tG tG $4@vR@vR@vR@vR@vR@vR@vR@Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%Nt%Nt%u1$&E Kv Kv Eu <|@$4@vR@Eu Kv &E &E u1$u1$u1$u1$Nt%Nt%GJ%GJ%GJ%GJ%GJ%GJ%*L%*L%*L%pM%pM%*L%*L%*L%*L%*L%*L%*L%GD%GD%|A |A |A |A |A |A |A hy%hy%hy%hy%hy%hy%hy%]*$io&CU-CU-Fz%DG%BD%HR$jT$DU-EU-FU-[.-GU-HU-IU-JU-KU-LU-MU-NU-OU-PU-QU-RU-SU-TU-UU-VU-WU-XU-YU-'U-ZU-`U- V-.V-+V-@V-#V-$V-%V-&V-*V-=V--V-*V-;V->V-|U-,V-'V-)V-!V-~V-{V-]V-^V-/V-(V-_V-:V--_w-D3-6o-IH#kl-@p-eS-D,#}n Ut&N~#Z=#Y=#Y=#Y=#j$#i@#j$#i@#b.#[`@[`@bP@.9 9 9 /d@(7 ;! W:@t! X:@r[@rG sG sG sG sG sG tG tG vR@vR@vR@$4@$4@$4@$4@$4@Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%*L%GJ%GJ%Nt%Nt%u1$u1$u1$Eu Eu Eu Eu Eu Eu Eu Eu &E &E u1$u1$Nt%Nt%GJ%GJ%GJ%GJ%GJ%*L%*L%*L%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%4Q%ly%ly%ly%ly%ly%ly%ly%ly%ly%ly%ly%ly%ly%ly%ly%+w%+w%]x%^*$0K%#F%KR%nm&O7&+Y=bV-cV-dV-dV-eV-<.-fV-fV-gV-gV-hV-iV-jV-jV-kV-kV-lV-mV-nV-oV-pV-qV-rV-sV-tV-uV-uV-vV-wV-xV-yV-zV-AV-BV-CV-DV-8T-EV-FV-GV-HV-IV-JV-KV-LV-MV-NV-OV-PV-QV-RV-SV-TV-UV-VV-WV-XV-YV-ZV-`V- W-.W-`s=NB%9E$kh$/x%^x%]*$r_$],$tj%tj%tj%tj%tj%tj%tj%YI$YI$tj%tj%#B%#B%#B%oF%Nt%Nt%GJ%GJ%GJ%Nt%Nt%Nt%GJ%GJ%GJ%GJ%GJ%*L%*L%*L%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%g`%g`%g`%g`%g`%g`%g`%g`%g`%g`%g`%g`%g`%f`%f`%f`%*L%pM%pM%pM%g`%g`%g`%g`%*L%*L%*L%*L%GJ%GJ%GJ%GJ%GJ%Nt%u1$&E Kv Eu Eu Eu <|@:|@(|@^|@@~ ^|@/|@(|@@~ @~ ^|@^|@(|@_|@[|@<|@[|@[|@<|@<|@<|@[|@:|@_|@_|@_|@_|@:|@:|@:|@[|@[|@:|@[|@[|@<|@$4@vR@Eu Eu $4@Eu &E &E Kv &E Nt%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%*L%*L%*L%*L%GJ%Nt%u1$&E -! tG rG r[@t! +~ +~ +~ Y:@]|@ 9 9 /d@/d@ 9 +L@O9 .9 RT@bP@uR@b.#Cv@Z=#0u#0u#Ut&u_$u_$85*tq=tq=st&9C=Qr r3$LQ=LQ=(p=h_*h_*k`&0*-0*-VN=G4*xU-F4*;4*+W-@W-W:*o3.$$+BK.a,+,^@`T-l;+3*@#W-U^*>N dy l;.J{+/:+B6.t5.A6.%:+q4.q4.z6.j3.g{+%:+A6.%:+2w.dO@rQ@Z`+rQ@cO@S%>S%~h&{h&0, &, 0, {h&{h&0, Av&Bv&`%@17*23+23+23+23+23+23+23+u!=u!=u!=u!=u!=u!=u!=u!=oh.oh.oh.oh.y4&y4&x{+x{+b=+b=+aH*aH*>H*zw*zw*pK+U*@;n.>n.>n.>n.>n.;n.;n.>n.-~@]*=]*=-~@-~@", "F6.F6.F6.#Zq 6v Ut&N~#Z=#Y=#C&#C&#Cv@UE@Cv@UE@[`@[`@[`@uR@.9 9 +L@O9 9 (7 Y:@+~ t! X:@rG sG sG sG sG sG tG tG vR@vR@vR@$4@$4@$4@$4@$4@Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%*L%*L%*L%GJ%GJ%GJ%Nt%Nt%GJ%Nt%u1$&E Eu vR@$4@$4@&E &E &E u1$u1$Nt%Nt%Nt%GJ%GJ%GJ%*L%*L%*L%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%]V%]V%]V%]V%]V%]V%]V%v)&t)&t)&t)&&L%&L% O% O%pM%|f YI$ox$CD%.F%.F%+Y=+Y=3h&%W-&W-&W-gZ=*W-d -=W--W--W-f -f -f -F`=;W-g ->W-,W-,W-'W-IU-)W-!W-~W-JU-{W-]W-^W-/W-/W-(W-_W-:W-N dy $:+ 9. 9. 9.k3.k3.`8.`8.<^+[^+'Z+2w.s}+`8.s}+2w.g|.dO@rQ@cO@S%>S%~h&0, &, ZQ.Av&0, 0, 0, Av&Bv&`%@17*23+23+23+OP*OP*OP*x{+u!=u!=u!=u!=u!=u!=u!=u!=y4&y4&y4&y4&y4&y4&x{+x{+b=+b=+aH*aH*>H*zw*zw*pK+xE*h~ h~ Bj.Bj.h~ p u_$O~#VE@Y=#Y=#C&#Cv@b.#i@#UE@b.#b.#UE@[`@@A@ 9 .9 +L@O9 /d@]|@Y:@+~ t! >b@>b@>b@rG sG sG tG tG $4@vR@vR@vR@vR@vR@vR@vR@Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%pM%*L%GJ%Nt%&E Kv vR@vR@Kv &E &E &E u1$u1$Nt%Nt%GJ%GJ%GJ%*L%*L%*L%pM%pM%g`%g`%g`%g`%g`%g`%g`%g`%4Q%4Q%4Q%4Q%4Q%4Q%4Q%4Q%]V%]V%]V%]V%]V%]V%]V%he&gW-hW-7M&XN&){&G2&Ww Ww Xw GJ%oF%^,$^,$4h 4h #B%5C%W}&=!*5C%{$&3C%iW-#]*UB&Lv%#/&+F%/g&@F%,r&aY=VR%jW-jW-F!*e -e --W-kW-lW-mW-;W-nW-dV-eV-oW-pW-qW-rW-sW-tW-uW-vW-wW-xW-yW-yW-zW-AW-BW-U%&G[=DE-CW-Z^&nK=l%&J4%)n#8{% -# J$!J wt =^$as Iv Bu ky%&E 5'$|f G'$oF%UH%~J%~J%UH%oF%|f 5'$5'$5'$5'$|f u1$u1$&E &E &E u1$Nt%GJ%u1$Nt%GJ%*L%pM%pM%pM%*L%*L%*L%*L%*L%*L%*L%*L%*L%pM%pM%pM%pM%pM%pM%pM%pM%g`%g`%g`%g`%g`%g`%g`%g`%f`%f`%f`%f`%f`%f`%f`%f`%g`%g`%g`%g`%pM%pM%pM%pM%pM%pM%*L%*L%GJ%GJ%Nt%Nt%u1$&E &E Kv Eu vR@vR@$4@$4@vR@vR@$4@<|@:|@_|@(|@@~ @~ WA WA WA @~ ^|@/|@_|@(|@/|@^|@^|@(|@:|@[|@[|@[|@[|@[|@:|@_|@/|@^|@(|@(|@(|@_|@_|@:|@:|@:|@<|@<|@$4@vR@Eu Kv &E u1$Eu &E Nt%u1$&E &E Nt%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%*L%GJ%GJ%u1$&E Eu vR@>b@r[@t! +~ W:@Y:@Y:@Y:@]|@/d@ 9 9 9 O9 @A@uR@@A@uR@b.#UE@UE@Cv@Z=#N~#Ut&Ut&u_$85*tq=pR#pR#5N='U=r3$cn=Qr 8 8 S2*]T#+6*s_$Mj=}k=G4*'x=F4*DW-EW-YT-v -rQ@$$+v5.U%+C0@`T-dy l;+q=+AU-AU-AU-q=+tK+`8.`8.`8.`8.`8.`8.`8.<^+[^+'Z+2w.s}+`8.s}+2w.b@rG sG tG tG $4@$4@vR@Eu Eu Kv &E &E Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%*L%*L%GJ%GJ%Nt%Nt%Nt%u1$Kv Kv &E &E &E u1$u1$u1$GJ%GJ%GJ%*L%*L%*L%pM%pM%g`%g`%g`%g`%g`%g`%g`%g`%*L%*L%*L%*L%*L%*L%*L%*L%pM%pM%pM%pM%pM%pM%pM% O%U(&i<&i<&i<&*z ){& y X!& O%8'&4Q%|A |A 0K%0K%|A cC%Y!&){&.D%B=$ z @D%]G%+z QC Qw Kv d.#&E b|$&E u1$u1$Kv Kv G'$UH%oF%|f #B%#B%}H%|u%ox$~@$t)$c'$GW-PZ=PZ=3Z=HW-IW-A8&JW-KW-/J$*z$i5& y$ y$i5&GC$|h$[,$[,$jQ jQ v~$uK H%$|A |A iy%vt vt vt vt vt u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$Eu $4@<|@<|@<|@<|@vR@vR@$4@<|@$4@vR@Kv &E Eu Kv u1$GJ%*L%pM%*L%*L%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%g`%g`%g`%g`%g`%g`%g`%g`%f`%f`%f`%f`%f`%f`%f`%f`%g`%g`%pM%pM%*L%*L%GJ%GJ%g`%pM%*L%GJ%Nt%&E Kv Kv vR@vR@$4@<|@[|@:|@:|@_|@_|@:|@[|@[|@:|@(|@/|@@~ a~ YA WA @~ ^|@^|@^|@@~ @~ WA YA YA WA /|@:|@<|@:|@:|@:|@_|@(|@/|@@~ WA /|@/|@(|@(|@_|@_|@_|@:|@$4@vR@vR@Eu Kv Kv &E &E Kv u1$Nt%Nt%&E &E Nt%GJ%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%Nt%u1$&E Eu $4@<|@X:@t! W:@Y:@;! ;! ;! ;! (7 /d@ 9 9 9 O9 RT@[`@bP@[`@UE@i@#Cv@C&#P~#O~#0u#Ut&u_$tq=qR#5N=(X%^T#'U=r3$cn=cn= 8 8 h_*0Q=t_$s_$0*-Mi=cR=PB=[6.LW-MW-NW-u4.$$+e6@v5.a,+mz l;+l;+dy dy >N AU-U^*3*@w!+`8.`8.s}+<^+<^+2w.2w.<^+[^+'Z+2w.s}+`8.s}+2w.g|.dO@rQ@dO@b@sG tG -! $4@$4@vR@Eu Kv u1$u1$Nt%Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%GJ%Nt%Nt%Nt%GJ%*L%pM%g`%g`%Kv Kv Kv &E &E u1$u1$u1$GJ%GJ%GJ%*L%*L%*L%pM%pM%g`%g`%g`%g`%g`%g`%g`%g`%*L%*L%*L%*L%*L%*L%*L%*L%pM%pM%pM%pM%pM%pM%pM%TL%H/&E/&3L&3L&`x `x 8C%Xw pM%4Q%0K%0K%^*$^*$7'$+w%t)&XH%./&]J%Az%Nv Y!&5A&X!&yz%]G%-z ^G%Jv u1$Jv 7'&%L%o($Hv Jv my%9K%as -E r_$^,$H%$Z;$!J 4h OL%Mf*s(*=f$d'$|F$OO$OO$|h$Va&Fz%#5$ji$N U^* U-$:+ 9.`8.s}+2w.'Z+f|.>X+<^+[^+'Z+2w.s}+`8.s}+2w.dO@Z`+M:*rQ@cO@g|.cO@dO@g|.g|.g|.g|.g|.g|.g|.g|.uG#*r=&r=sX%sX%&r=*r=uG#*r=uG#vu#;Z+;Z+vu#uG#*r=uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*N:*&r=uG#N:*N:**r=&r=*r=N:*vu#uG#*r=&r=&r=*r=uG#vu#vu#N:*N:*uG#*r=*r=&r=&r=uG#uG#uG#uG#uG#uG#uG#uG#vu#N:**r=&r=&r=*r=N:*vu#N:*N:*N:*N:*N:*N:*N:*N:*uG#N:*N:*N:*N:*N:*vu#vu#sX%CI#S`%*r=&r=S`%uG#tk-&r=&r=&r=&r=&r=&r=&r=&r=uG#uG#uG#*r=&r=sX%sX%sX%&r=uG#vu#N:*&r=sX%*r=vu#N:*uG#*r=*r=*r=*r=uG#N:*uG#uG#uG#*r=&r=sX%sX%sX%CI#S`%*r=N:*vu#vu#vu#N:*uG#N:**r=sX%*r=fW=vu#S`%&r=uG#N:*N:**r=&r=*r=N:**r=&r=sX%S`%sX%*r=N:*vu#uG#uG#*r=*r=&r=sX%sX%sX%uG#uG#uG#uG#uG#uG#uG#uG#vu#N:*uG#*r=uG#N:*;Z+fW=uq*uq*uq*xr*xr*&s*&s*&s*&s*xr*uq*&s*+v=lh.lh.+v=%' ~h&&, Bv&8P.4p=8P.8P.4p=NA.NA.NA.4p=Bv&Av&17*`%@HV.HV.HV.u!=u!=[f.[f.x{+x{+x{+x{+x{+x{+x{+x{+!c._e._e.C9.C9.=~@U*@xE*o2@d;+vE*ZQ+ZQ+|;@45+3,+xE*-+c %x-;h-DQ-2v-SW-{}*^p=;c (X%qR#Ut&N~#ir#VE@j$#UE@UE@UE@UE@UE@b.#b.#b.#b.#bP@@A@O9 /d@]|@;! ]|@]|@;! W:@X:@X:@X:@r[@rG tG [|@[|@<|@vR@Eu Kv &E u1$&E &E &E &E &E &E &E &E Kv &E Nt%u1$Kv Eu &E u1$GJ%GJ%Nt%Nt%u1$&E &E Kv &E &E &E u1$u1$Nt%Nt%Nt%*L%*L%*L%*L%*L%*L%*L%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%GJ%GJ%*L%pM%pM%g`%u1$u1$u1$u1$u1$u1$u1$u1$pM%pM%pM%pM%pM%pM%pM%pM%g`%pM%pM%pM%pM%pM%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%g`%g`%g`%g`%g`%g`%g`%5C%0^&`4*`4*0^&]$&]$&4C%~J%~J%|N%|C%|C%^x%W;*Wv%7'$%L%#L%t)&$L%Ov Bu Pv bs -z vt -z +y =E r_$Z;$wt ky%8>&ky%-6w=N:*&r=S`%&r=uG#vu#;Z+vu#vu#N:*N:*uG#*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=&r=&r=sX%S`%S`%S`%&r=&r=*r=*r=uG#N:*N:*vu#sX%*r=uG#*r=&r=sX%&r=uG#vu#N:*N:*uG#*r=*r=&r=&r=*r=*r=*r=*r=*r=*r=*r=*r=sX%&r=*r=*r=*r=*r=&r=sX%&r=uG#vu#N:**r=&r=*r=N:*uG#*r=&r=sX%sX%&r=*r=uG#&r=uG#N:*N:**r=&r=*r=N:**r=*r=uG#N:*N:*vu#;Z+;Z+;Z+;Z+vu#N:*N:*uG#uG#*r=*r=vu#6w=6w=;Z+N:*N:*vu#uG#uG#uG#uG#uG#uG#uG#uG#CI#sX%*r=*r=&r=&r=uG#vu#*r=*r=*r=*r=*r=*r=*r=*r=CI#CI#S`%&r=*r=N:*vu#vu#uG#N:*N:**r=sX%sX%uG#;Z+&r=sX%&r=uG#vu#N:*&r=CI#w{@S`%*r=vu#fW=6w=fW=fW=&s*&s*&s*&s*&s*&s*&s*&s*+v=+v=+v=+v=+v=wr*wr*wr*ZQ.ZQ.Bv&Bv&B9.B9.B9.B9.8P.8P.B9.B9.Bv&ZQ.ZQ...=zi.OP*u!=u!=[f.OP*OP*OP*u]#';$23+[f.u!=u!=u!=[f.!c.]*=]*=}m.}m.-~@&, &, ^@+v.@IV.IV.p2@%u.k(+3,+J> oh.iS.]@+w5&w5&]@+iS.]@+]@+]@+]@+]@+]@+", "8'%F6.F6.p=RW-VW-WW-PF#,>-'>-%x-5g-CQ-Zx-no=RJ#1g Yp (X%qR#Ut&N~#ir#VE@j$#UE@i@#i@#UE@UE@UE@b.#b.#b.#RT@.9 O9 /d@(7 (7 (7 (7 ;! W:@t! X:@X:@X:@rG tG [|@<|@$4@vR@Kv &E u1$Nt%&E &E &E &E &E &E &E &E Kv &E Nt%u1$Kv Eu &E u1$Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%GJ%GJ%GJ%*L%*L%*L%*L%*L%*L%*L%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$GJ%GJ%GJ%GJ%*L%*L%*L%*L%u1$u1$u1$u1$u1$u1$u1$u1$GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%pM%pM%pM%pM%g`%g`%g`%g`%*L%*L%*L%*L%*L%*L%*L%*L%g`%g`%g`%g`%g`%g`%g`%5C%a2*XW-XW-YW-%]&%]&ZW-6>&-)&E[&v3*f!&/x%Wv%s.*7'$my%%L%ky%ky%vt vt vt +y hy%+y H%$H%$uK j!$v~$!J w%i.$i.$i.$ w% w% w%`v%`v%`v%bq bq bq bq Zv%bq (x%7>&7>& x{+HV.HV.[f.OP*OP*x{+US+23+x{+u!=u!=u!=u!=..=}m.}m.}m.-~@-~@-~@Av&&, %b=yi.mO#k4@j(+j(+IV.u.@OP*y4&iS.]@+]@+iS.oh.7P.]@+]@+]@+]@+]@+]@+", "8'%F6.F6.b@sG <|@$4@vR@Eu Kv u1$Nt%Nt%&E &E &E &E &E &E &E &E Kv &E Nt%u1$Kv Eu &E u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%*L%*L%*L%GJ%GJ%GJ%GJ%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$*L%pM%pM%g`%f`%f`%D|*D|*5C%5C%5C%5C%5C%5C%5C%5C%5C%5C%5C%5C%5C%5C%5C%#]*$X-%X-%X-%X-EZ=EZ=&X-J+-QX=ih*C/*C/*~x%~x%Va&{x%|A my%my%iy%hy%+y +y H%$ZI$ZI$EG%`I$`I$ J$ J$j!$0q .w%.w%.w%0q 0q 0q 6r 6r 6r 6'$6'$6'$6'$Xv%6r _x%8>&8>&X4-X4-.}$.}$.}$l($l($l($*X-l($LR%k($k($'Y$Pw QC ^Y@^Y@$4@<|@%2@||@n$#Ad$;S !8&0'$9'$IT ^|@G5@LZ$LZ$G5@G5@xy f1#vg#vg#OH#SJ#SJ#SJ#OH#vg#')#1f WA /|@[|@$4@Eu Eu u1$u1$Nt%GJ%*L%*L%pM%pM%*L%*L%*L%*L%*L%*L%*L%*L%g`%g`%g`%g`%g`%g`%g`%g`%pM%pM%g`%g`%g`%f`%f`%f`%f`%f`%f`%g`%g`%g`%pM%pM%Nt%Nt%Nt%u1$u1$u1$&E &E Nt%&E Eu Eu Eu $4@:|@/|@YA @~ /|@:|@[|@[|@:|@:|@/|@^|@@~ WA YA a~ 1f kI@1f kI@kI@1f WA WA YA kI@kI@1f 1f a~ YA WA @~ @~ @~ @~ @~ @~ @~ @~ ^|@^|@_|@_|@_|@_|@:|@:|@:|@:|@[|@<|@$4@vR@Kv &E u1$Nt%u1$u1$u1$u1$u1$u1$u1$u1$*L%*L%pM%pM%*L%GJ%Nt%Nt%GJ%Nt%Nt%u1$Kv vR@<|@:|@t! Y:@]|@]|@;! ;! (7 9 O9 O9 +L@.9 RT@bP@uR@[`@UE@i@#j$#Y=#VE@ir#O~#0u#tq=tq=tq=tq=pR#(X%^T#(p=cn=cn=Qr Qr S8 TW-+6*t_$+6*0Q=9N=Hz=PW-=X-.X--X-{$+)~@-Z+sQ@sQ@):.PJ*vj&,^@`T-`T-dy >N AU-AU-3*@JP-uG#N:*N:*vu#vu#;Z+;Z+sX%uG#vu#vu#N:*uG#uG#vu#rQ@rQ@rQ@rQ@dO@cO@g|.0+[f.JI$n|.JI$l}+>( Bz$aH@n|.n|.n|.n|.n|.n|.", "8'%F6.F6.X-GY=GY=FY=k^*'T=E[&v3*v3*/x%f!&|C%ML%ly%|A |A ZI$ZI$H%$H%$EG%EG%}C%lh$lh$lh$BG% J$r_$bs r_$r_$r_$r_$uK uK j!$j!$j!$j!$ J$ J$ J$uK vt X4-Bu .}$Iv m($Au m($Mw nP%Mw nP%v_$g.#v_$v_$QC Eu vR@$4@<|@:|@}|@1|@1|@~M ~M ~M ZT@>S IT x! WA Lz xy xy Lz Lz ew d1#vg#vg#vg# t#bj#]M /M d1#1f YA ^|@:|@$4@Eu Kv &E u1$u1$Nt%GJ%*L%pM%g`%g`%pM%pM%pM%pM%pM%pM%pM%pM%g`%g`%g`%g`%g`%g`%g`%g`%g`%g`%g`%g`%g`%g`%f`%f`%D|*D|*f`%f`%g`%g`%g`%pM%Nt%Nt%Nt%u1$u1$&E &E &E Nt%&E Eu vR@Eu vR@[|@(|@WA ^|@(|@:|@:|@_|@/|@^|@WA WA YA a~ 1f kI@')#')#kI@B_#B_#')#a~ YA 1f ')#1f a~ YA WA WA YA a~ 1f YA YA YA WA WA WA WA @~ :|@:|@_|@_|@_|@:|@:|@[|@<|@<|@$4@Eu Kv u1$Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$*L%pM%pM%pM%pM%*L%GJ%Nt%*L%GJ%Nt%u1$Eu <|@:|@(|@+~ Y:@]|@]|@;! ;! (7 O9 .9 .9 @A@bP@uR@[`@b.#UE@j$#j$#Y=#VE@ir#O~#0u#Ut&u_$85*tq=pR#(X%(p=h_*]T#Qr Qr Qr Qr P}*:!-s_$t_$k`&s_$[B=;4*PW-}B=,X-O:*C!@ =@rQ@o3.sQ@.9.PJ*k]#dy dy l;+l;+AU-AU-U^*3*@~e.;Z+vu#vu#vu#vu#vu#vu#w{@&r=N:*vu#N:*uG#uG#N:*cO@dO@dO@dO@cO@g|.( 9g.9g.JI$JI$JI$JI$JI$JI$", "8'%F6.F6.b@<|@<|@$4@Eu Kv u1$Nt%Nt%&E &E &E &E &E &E &E &E Kv &E Nt%u1$Kv Eu &E u1$Kv &E &E u1$Nt%Nt%GJ%GJ%GJ%GJ%GJ%*L%*L%pM%pM%pM%*L%*L%*L%*L%*L%*L%*L%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%*L%*L%GJ%GJ%Nt%u1$u1$&E GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%*L%pM%f`%D|*m}*m}*5C%^$&^$&^$&^$&^$&^$&^$&^$&^$&^$&^$&^$&^$&^$&31*~X-{X-HY={X-GY={X-{X-]X-6>&OL%OL%NL%NL%e!&+I$+I$4Q%8'&8'&9K%GD%1C%1C%1C%+I$+I$4h 4h 4h @I$|g$@I$=E Jv Jv Jv Jv Jv =E =E Y;$Y;$=H$=H$=H$=H$=H$Y;$-z Bu -z Iv Jv Nw Cu Nw Du Ux Fu qI@^Y@{A ST@ST@Eu R5@dP@%2@||@}|@_|@_|@:|@}|@||@}|@}|@2|@3|@^|@1r@Iz @p@@p@Iz Iz *p@]0#^0#^0#^0#87#nx *p@@p@G5@WA @~ (|@[|@vR@Kv &E &E Nt%Nt%GJ%*L%*L%pM%g`%g`%pM%pM%pM%pM%pM%pM%pM%pM%g`%g`%g`%g`%g`%g`%g`%g`%f`%f`%g`%g`%g`%g`%g`%g`%f`%f`%f`%g`%g`%pM%pM%pM%GJ%GJ%Nt%Nt%u1$u1$u1$&E GJ%&E Eu vR@Eu Eu $4@:|@(|@(|@_|@_|@/|@@~ YA 1f a~ a~ 1f kI@kI@')#B_#B_#kI@B_#!)#QT@kI@1f kI@')#a~ a~ YA YA a~ 1f kI@')#1f 1f a~ a~ YA WA WA WA :|@_|@(|@(|@(|@_|@[|@<|@<|@$4@vR@Eu &E u1$Nt%GJ%u1$u1$u1$u1$u1$u1$u1$u1$*L%*L%pM%pM%*L%GJ%Nt%u1$GJ%Nt%u1$Kv $4@:|@/|@^|@+~ ;! (7 (7 ]|@]|@/d@O9 @A@RT@bP@uR@b.#UE@i@#i@#C&#Y=#Z=#P~#N~#O~#Ut&Ut&0u#Ut&tq=5N=(p=]T#k`&+6*Qr Qr cn=GY%TW-ah=t_$T8 t_$yD HA=MW-PW-F4*^X-1P*].u`.HV.u!=u!=[f.[f...=}m.QD*QD*b_$b_$(E*h%=h%=A9.A9.lh.'0+xi.-$@#x+,0+OP*>( >( >( l}+JI$JI$n|.JI$JI$JI$JI$JI$JI$", "8'%F6.F6.p=!+-er=zd+33*7d-02-Xx-0f-66-76-(X-_X-@' 1g ]T#(p=5N=tq=85*0u#ir#Z=#Y=#C&#j$#Cv@i@#UE@b.#[`@@A@@A@RT@RT@@A@.9 +L@O9 9 ]|@Y:@W:@Y:@W:@t! r[@[|@[|@<|@vR@Eu Kv &E u1$&E &E &E &E &E &E &E &E Kv &E Nt%u1$Kv Eu &E u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%Nt%Nt%Nt%Nt%u1$u1$u1$GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%*L%*L%pM%g`%g`%f`%^$&^$&^$&^$&^$&^$&^$&^$&^$&^$&^$&^$&^$&^$&^$&^$&&)*&)*&)*&)*&)*&)*f`%f`%f`%f`%]V%]V%4Q%4Q%8'&9K%5A&7'&7'&8'&9K%9K%VH%1C%GD%+I$+I$^,$^,$@I$@I$],$Xw X!&Xw X!&Xw Xw Xw GJ%GJ%oF%oF%oF%#B%oF%#B%oF%GJ%VH%GJ%-z Nt%.y u1$.y b|$Rw d.#Qw q<$^A ~ $/0@H)$R5@R5@dP@%2@<|@[|@}A ST@ST@^Y@^Y@ST@v! }A +n@+n@.n@%p@%p@.n@.n@]Q#vy mx mx *p@*p@@p@Iz ^M %p@@~ ^|@_|@<|@vR@Kv &E &E Nt%Nt%GJ%*L%pM%g`%g`%f`%g`%g`%g`%g`%g`%g`%g`%g`%g`%g`%g`%g`%g`%g`%g`%g`%f`%f`%f`%g`%g`%g`%pM%pM%g`%g`%g`%pM%pM%*L%*L%*L%Nt%Nt%Nt%u1$u1$u1$&E &E Nt%Kv $4@<|@$4@vR@<|@[|@:|@_|@/|@@~ YA 1f kI@')#1f 1f kI@kI@')#')#B_#B_#kI@B_#!)#QT@')#1f 1f kI@1f 1f 1f kI@kI@')#')#')#kI@1f 1f a~ YA WA WA @~ /|@/|@^|@^|@/|@_|@[|@$4@$4@$4@vR@Kv &E Nt%GJ%GJ%u1$u1$u1$u1$u1$u1$u1$u1$GJ%GJ%GJ%*L%GJ%Nt%u1$&E &E &E Kv vR@[|@(|@^|@WA W:@;! (7 (7 ]|@]|@/d@+L@RT@RT@bP@[`@b.#UE@i@#Cv@Y=#Z=#VE@P~#N~#O~#0u#Ut&0u#u_$qR#(X%S2*0Q=k`&+6*Qr cn=GY%c/*Ez :X-0p=0p=yD .6*f8.eW-PW-( l}+JI$n|.~f$s`.l}+l}+l}+l}+l}+l}+", "8'%F6.F6.0+t`.'&+yK#[N*[N*yK#eR=8=+GV.GV.GV.GV.GV.GV.", "8'%F6.F6.#2k=R3 7J@7J@kx i[#{1 ,p bP@RT@RT@@A@.9 +L@O9 O9 /d@/d@(7 (7 ]|@;! Y:@Y:@t! X:@r[@>b@rG tG -! -! *E =E i0$i0$i0$i0$=E *E Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%Nt%Nt%u1$&E &E Kv Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Kv &E &E &E &E &E &E &E Kv &E &E u1$Nt%Nt%GJ%GJ%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Kv &E %B%Nt%FD%*L%6C%g`%7C%*L%7C%*L%7C%*L%7C%*L%pM% O%g`%he&f`%VK&VK&VK&he&he&he&he&he&he&he&he& O% O% O% O% O% O% O%pM%pM%pM%pM%pM%pM%pM%pM%pM% O% O% O% O% O% O% O%pM%*L%*L%*L%*L%*L%*L%*L%*L%^G%^G%^G%^G%^G%^G%^G%^G%8C%8C%9C%9C%TH%TH%TH%gB Lv Lv &E Lv Lv Lv Lv Lv ^G%]G%cC%Ow Ow Pw Vx Vx Pw Pw Vx Vx z z z {A %p@%p@%p@.n@7`@7`@+n@cN@-! 2r@}f uK ],$0K%|N%ML%1N%;)&1N%;)&1N%;)&1N%1N%UH%UH%UH%UH%UH%UH%UH%UH%g`%g`%g`%g`%he&he&he&g`%g`%5>&5>&5>&#]*#]*#]*#]*4C%)~*)~*iW-2h&1(&cj&bE%/0@ST@ST@ST@v! }A cN@yK }A W~#G5@Lz LZ$G5@LZ$Lz ew ew f1#e1#f1#dw Lz LZ$ew ew ew f1#f1#f1#e1#e1#e1#d1#d1#/M /M /M /M /M /M d1#d1#bj#OH#OH#6q#e1#))#kI@^|@(|@@~ YA WA ^|@kI@YA ^|@(|@_|@[|@vR@&E Kv Kv Kv &E &E u1$u1$u1$*L%GJ%u1$&E Kv &E u1$Nt%}g }g }g }g }g -E -E -E -E -E tG sG >b@X:@+~ +~ ]|@(7 /d@ 9 +L@.9 @A@@A@bP@bP@uR@b.#UE@Cv@j$#j$#Y=#P~#O~#0u#O~#O~#Ut&85*pR#5N=(X%S2*]T#]T#h_*S2*aX-Ij tD&_A=]p=]p=Z4-rg*wj&1d-I_-#h@bX-C6.*)+2w.h;#sQ@<(+.9.):.0+5,+6g.IV.6g.mO#>0+mO#I&=V-.3<@[f.[f.x{+x{+[f.[f.u!=OP*x{+u!=HV.HV.u!=x{+xE*B9.Bv&Bv&Bv&Bv&Bv&Bv&B9.0, 0, 0, ,0+0, ,0+0, 0, =~@b@rG tG -! -! *E =E =E i0$i0$=E =E *E &E &E &E &E u1$u1$Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$&E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%GJ%Nt%Nt%u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%&E u1$u1$Nt%GJ%GJ%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%pM%pM%g`%g`%g`%f`%g`%g`%g`%g`%g`%g`%g`%g`%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%*L%*L%*L%*L%*L%*L%*L%aK%Xw X!&X!&X!&X!&X!&X!&X!&Ww Ww X!&X!&]G%]G%]G%]G%.y .y .y .y .y .y .y .y ^G%^G%.y .y .y .y Lv Lv Ow Ow Pw Pw Vx Vx Vx z D@$D@$D@$D@$cB cB cB v! -! 2r@)J !J H%$ZI$0K%ML%;)&;)&;)&;)&;)&;)&;)&1N%UH%UH%UH%UH%UH%UH%UH%UH%g`%g`%g`%g`%g`%he&he&g`%pM%~J%~J%~J%4C%4C%4C%4C%iW-iW-GJ&cj&fX-fX-gX-5,*^A ST@v! }A cN@yK X~#X~#yK =p@Lz xy Lz Lz Lz dw ew f1#e1#e1#e1#f1#dw xy e1#e1#e1#d1#d1#/M /M /M d1#d1#e1#d1#d1#/M ]M 6q#]M /M /M bj#vg#vg#]M f1#kI@YA @~ @~ WA YA YA WA 1f WA /|@_|@_|@:|@$4@Kv Kv Kv &E &E &E u1$u1$u1$*L%GJ%u1$&E Kv &E u1$Nt%*E *E *E }g }g }g -E -E -! tG sG >b@X:@+~ W:@Y:@(7 (7 /d@ 9 +L@.9 @A@RT@bP@uR@[`@b.#i@#Cv@j$#C&#Z=#P~#O~#0u#O~#0u#u_$tq=5N=5N=^T#S2*h_*h_*S2*;c +o=Ij bh=dn=]p=FA=Nj=/|$R2*Lf*hX->1-iX-s}+H{+52.sQ@<(+<(+.9.):.):.n.;n.-~@]*=c2=}m.}m.}m.}m.}m.]*=", "xX%xX%_r+_r+N7.N7.N7.@9.%0+_r+O7.x5.xX%N7.M7.is@x5.O7.xX%_r+_r+xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+4I%4I%$;&QI.QI.$;&4I%4I%l=&l=&l=&l=&l=&l=&l=&l=&#k.#k.#k.#k.#k.&6>&6>&6>&5>&5>&5>&5>&5>&5>&5>&g`%g`%g`%g`%g`%GD%GD%GD%GD%*L%*L%GJ%GJ%FD%$B%/$&bE%aE%WN%Y.$V.$^A ST@}A yK W~#1r@=p@=p@=p@Lz dw ew dw xy ew f1#f1#f1#e1#d1#/M d1#d1#e1#/M /M /M ]M ]M 6q#6q#6q#d1#e1#e1#e1#d1#]M t#vg#bj#6q#6q#bj# t#6q#d1#dw @~ YA 1f 1f a~ YA a~ 1f WA ^|@_|@:|@_|@:|@<|@Eu Kv &E &E &E u1$u1$Nt%Nt%GJ%GJ%Nt%&E &E &E u1$u1$=E =E =E *E *E }g }g -E sG rG >b@X:@+~ Y:@;! ]|@(7 /d@ 9 O9 .9 @A@RT@bP@uR@[`@b.#UE@i@#j$#C&#C&#Z=#ir#O~#0u#0u#0u#85*qR#(X%^T#(p=(p=(p=(p=^T#J[$Xp *A&bh=[G&FA=Gz=qy=Ra-yq-+c-$T&nX-pt+t/.b3+I!..9..9..9..9..9.):.):.):.g|.g|.g|.g|.g|.g|.g|.g|.&r=*r=N:*vu#vu#N:**r=&r=uG#uG#uG#uG#uG#uG#uG#uG#*r=uG#N:*N:*N:*N:*uG#*r=S`%sX%*r=N:*vu#vu#;Z+vu#*r=*r=*r=*r=&r=&r=&r=&r=sX%sX%&r=&r=*r=*r=uG#uG#&r=*r=*r=uG#*r=&r=sX%S`%*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#&r=N:*fW=vu#sX%S`%uG#6w=N:*uG#*r=*r=*r=*r=uG#N:**r=*r=uG#uG#uG#*r=&r=&r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#*r=*r=*r=*r=*r=*r=*r=*r=N:*N:*N:*N:*uG#uG#uG#uG#N:*N:*uG#uG#uG#*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#*r=*r=*r=uG#vu#vu#*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#*r=*r=&r=&r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#dr=dr=o!#^u=^u=m}+xE#xE#xE#m}+^u=o!#o!#o!#^u=^u=k4@IV.IV.IV.IV.j(+j(+j(+j(+p2@p2@IV.mO#k4@k(+Ym=3<@[f.[f.x{+x{+[f.[f.u!=u!=HV.HV.u`.u`.HV.HV.u!=&, Av&ZQ.Bv&Bv&ZQ.Av&&, Av&Av&Av&Av&Av&Av&Av&Av&}m.-~@-~@-~@-~@}m.]*=c2=>n.>n.;n.;n.-~@}m.", "O7.xX%xX%_r+_r+_r+_r+M7.N7.xX%O7.x5.O7.xX%_r+is@is@x5.O7.O7.O7.O7.O7._r+_r+_r+_r+_r+_r+_r+_r+4I%$;&$;&$;&$;&$;&$;&4I%4I%4I%4I%4I%4I%4I%4I%4I%<3+v4.v4.#k.b@sG tG tG }g *E =E =E =E =E *E }g u1$Nt%Nt%Nt%GJ%GJ%*L%*L%Kv Kv Kv Kv Kv Kv Kv Kv &E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%*L%*L%*L%*L%*L%*L%*L%GJ%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%GJ%GJ%Nt%Nt%Nt%Nt%GJ%GJ%Nt%Nt%u1$&E &E Kv u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%u1$Nt%Nt%Nt%GJ%GJ%*L%*L%pM%pM%pM%pM%pM%pM%pM%pM%f`%f`%f`%f`%f`%f`%f`%f`%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%he&}N%}N%}N%}N%}N%}N%}N%[N%[N%Ww Ww X!&X!&]G%^G%*L%*L%*L%*L%*L%*L%*L%*L%Nt%Nt%GJ%GJ%*L%pM%pM%pM%Xw X!&X!&]G%]G%cC%cC%cC%]G%cC%cC%Ow Ow Pw Vx QC Eu -E Kv *E u1$i0$GJ%1C%g`%]V%g`%]V%g`%]V%g`%g`%6>&6>&6>&6>&5>&5>&5>&5>&~J%~J%~J%~J%~J%pM%~J%pM%4Q%GD%GD%GD%GD%GJ%GJ%GJ%FD%$B%%B%aE%WN%V.$~ $~ $@W@}A X~#G5@Lz xy Lz Lz xy ew e1#e1#f1#ew e1#/M e1#e1#d1#/M ]M ]M ]M 6q#/M /M ]M ]M 6q#6q#6q#bj#/M d1#e1#e1#/M bj#OH#LH#vg# t#bj#bj#]M d1#ew xy @~ kI@))#!)#')#YA YA 1f /|@_|@[|@[|@:|@:|@<|@vR@&E &E &E u1$u1$Nt%Nt%Nt%GJ%Nt%Nt%u1$u1$&E &E &E i0$i0$=E =E *E }g }g -E sG rG r[@X:@+~ Y:@;! ]|@/d@ 9 O9 +L@@A@RT@bP@bP@[`@[`@b.#i@#Cv@C&#Y=#Y=#VE@N~#0u#0u#0u#Ut&qR#5N=^T#(p=S2*S2*^T#(X%^T#;c 8C&bh=dn=[G&Vy=c:*Ra-gh*Wy=wj&pX-M2.2w.Y:.M7+=1.):.):.):..9..9..9..9..9.g|.g|.g|.g|.g|.g|.g|.g|.&r=*r=N:*vu#vu#N:**r=&r=uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*vu#;Z+;Z+vu#N:*N:*&r=&r=*r=N:*vu#;Z+fW=fW=*r=*r=*r=*r=&r=&r=&r=&r=sX%sX%&r=&r=*r=*r=uG#uG#*r=*r=*r=*r=*r=*r=*r=&r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#vu#;Z+N:**r=&r=N:*fW=uG#uG#uG#*r=*r=uG#uG#uG#&r=&r=*r=*r=*r=*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*N:*&r=&r=&r=&r=&r=&r=&r=&r=vu#vu#N:*uG#uG#*r=&r=&r=N:*N:*uG#uG#uG#*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*N:*N:*N:*vu#vu#&r=&r=&r=&r=&r=&r=&r=&r=uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*N:*uG#uG#*r=*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#&r=&r=&r=*r=*r=*r=*r=uG#l]#=Z+dr=o!#^u=m}+xE#XT#m}+m}+^u=o!#dr=dr=dr=dr=5,+5,+5,+jM#mO#mO#k4@k4@j(+p2@k(+j(+k4@k4@p2@qX-3<@[f.[f.x{+x{+[f.[f.u!=u!=u!=u!=u!=u!=u!=u!=u!={h&&, ZQ.Bv&Bv&ZQ.&, {h&ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.-~@-~@-~@}m.}m.]*=]*=c2=!D+>n.>n.>n.;n.;n.", "x5.x5.x5.O7.O7.xX%xX%x5.O7.xX%_r+xX%O7.is@Vh.is@is@is@is@x5.x5.O7.xX%_r+_r+_r+_r+_r+_r+_r+_r+$;&$;&$;&4I%4I%$;&$;&$;&QI.QI.QI.QI.QI.QI.QI.QI.<3+v4.v4.#k.b@rG sG tG }g }g *E =E =E *E }g }g u1$Nt%Nt%Nt%GJ%GJ%*L%*L%Kv Kv Kv Kv Kv Kv Kv Kv &E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%*L%*L%*L%*L%*L%*L%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%*L%*L%GJ%GJ%Nt%Nt%u1$u1$GJ%GJ%Nt%Nt%u1$&E &E Kv u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%u1$u1$u1$u1$&E &E Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$Nt%Nt%GJ%GJ%GJ%pM%pM%pM%pM%pM%pM%pM%pM%g`%g`%g`%g`%g`%g`%g`%g`%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%VK&VK&VK&VK&VK&VK&VK&VK& O% O% O%aK%aK%Xw Xw Xw *L%*L%*L%*L%*L%*L%*L%*L%Nt%GJ%GJ%*L%*L%pM%g`%g`%aK%aK%aK%Xw Xw ^G%^G%^G%^G%^G%.y .y Lv PC PC QC &E &E %B%u1$$B%GJ%FD%*L%5C%g`%5C%g`%5C%g`%5C%g`%6>&6>&6>&6>&6>&6>&6>&6>&H-&H-&H-&H-&H-&~J%H-&|N%ly%ly%ly%|A |A 1C%1C%i0$Nt%Nt%u1$d.#q<$/0@>8@'8@cN@W~#LZ$ew d1#e1#f1#ew f1#d1#/M d1#e1#e1#/M 6q#/M /M /M /M ]M 6q#bj#bj#d1#d1#d1#/M /M /M ]M ]M /M d1#d1#/M ]M t#SJ#LH#vg#vg# t#6q#d1#f1#dw xy 1f !)#XC@w! B_#YA WA YA (|@:|@<|@<|@[|@:|@<|@vR@&E &E u1$u1$Nt%Nt%GJ%GJ%Nt%Nt%Nt%Nt%u1$u1$&E &E 1C%i0$=E *E }g -E -! -! sG rG >b@X:@+~ W:@;! ]|@ 9 O9 +L@.9 @A@bP@uR@uR@b.#b.#UE@Cv@j$#Y=#Z=#Z=#P~#N~#0u#0u#0u#u_$pR#(p=(p=h_*]T#S2*^T#(X%(p=^m XE&dn=dn=tH&tX-uX-py=gh*.6*yq-,+-u4.Z*@Z*@w!+Q>.):.):.):..9..9..9..9..9.g|.g|.g|.g|.g|.g|.g|.g|.&r=*r=N:*vu#vu#N:**r=&r=uG#uG#uG#uG#uG#uG#uG#uG#vu#;Z+;Z+fW=fW=;Z+;Z+vu#N:*N:*N:*N:*N:*N:*vu#vu#&r=&r=&r=&r=*r=*r=*r=*r=sX%sX%&r=&r=*r=*r=uG#uG#N:*uG#uG#uG#uG#N:*N:*N:*uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#fW=N:*&r=*r=N:*;Z+vu#uG#*r=uG#uG#uG#uG#uG#uG#*r=&r=&r=&r=&r=&r=&r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*N:*&r=&r=&r=&r=&r=&r=&r=&r=N:*N:*N:*uG#*r=&r=&r=&r=N:*N:*uG#uG#uG#*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*uG#&r=&r=&r=&r=&r=&r=&r=&r=uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*N:*uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#sX%sX%sX%&r=&r=*r=uG#uG#l]#l]#=Z+dr=^u=m}+xE#xE#m}+m}+^u=^u=o!#dr==Z+=Z+5,+5,+5,+jM#mO#mO#k4@k4@j(+p2@k(+p2@k4@k4@j(+]o&3<@[f.[f.x{+x{+[f.[f.u!=x{+x{+x{+x{+x{+x{+x{+x{+0, &, Av&ZQ.ZQ.Av&&, 0, ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.;n.-~@-~@}m.}m.]*=]*=]*=-~@;n.;n.>n.>n.!D+", "is@is@x5.x5.O7.O7.O7.is@O7._r+N7.N7.O7.is@dD.x5.x5.is@is@x5.O7.xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+QI.$;&4I%4I%4I%4I%$;&QI.QI.QI.QI.QI.QI.QI.QI.QI.#k.#k.#k.#k.#k.b@rG sG sG -E }g *E *E *E *E }g -E u1$u1$u1$Nt%Nt%Nt%GJ%GJ%Kv Kv Kv Kv Kv Kv Kv Kv &E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%*L%*L%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%*L%*L%GJ%Nt%u1$u1$&E &E Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Eu Eu Eu Eu Eu Eu Eu Eu &E &E &E &E u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$Nt%Nt%Nt%GJ%GJ%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%g`%g`%g`%g`%g`%g`%g`%g`%he&he&he&he&he&he&he&he&he& O% O% O%aK%aK%Xw Xw *L%*L%*L%*L%*L%*L%*L%*L%GJ%GJ%GJ%*L%*L%*L%*L%*L%*L%aK%aK%Xw Xw ^G%^G%^G%.y .y .y .y .y Lv Lv Lv $B%$B%FD%FD%7C%7C%6C%6C%5C%5C%5C%5C%5C%5C%5C%5C%5>&6>&6>&6>&6>&6>&6>&6>&PL%PL%PL%PL%PL%PL%PL%#F%ly%]x%|A hy%+y r_$=E *E u1$&E Kv vR@>8@b~ -8@=8@1r@Lz e1#bj#vg#bj#/M e1#d1#]M ]M /M e1#e1#/M bj#]M ]M /M /M /M ]M 6q#bj#f1#f1#e1#e1#d1#d1#d1#/M /M /M ]M bj# t#vg#OH#OH#vg#vg#vg#6q#e1#dw xy dw B_#!)#+W@))#')#YA ^|@/|@_|@[|@$4@$4@<|@[|@$4@Kv u1$u1$u1$Nt%Nt%GJ%GJ%GJ%u1$Nt%Nt%GJ%Nt%u1$&E Kv i0$=E =E }g -E -! tG sG sG rG >b@X:@+~ Y:@;! ]|@O9 +L@.9 @A@RT@uR@[`@[`@UE@UE@i@#j$#C&#Y=#Z=#VE@ir#O~#0u#0u#Ut&85*(X%h_*(p=]T#k`&]T#^T#^T#h_*@p=XE&dn=[G&@n=zX-oy=Ra-Ra-wj&u1*Jn.n.;n.-~@}m.}m.-~@-~@}m.}m.-~@;n.>n.!D+", "x5.O7.O7.O7.xX%xX%xX%N7.N7.N7.N7._r+_r+xX%O7.O7.O7.x5.is@x5.O7._r+N7._r+_r+_r+_r+_r+_r+_r+_r+QI.$;&4I%l=&l=&4I%$;&QI.$;&$;&$;&$;&$;&$;&$;&$;&p cw z, @|#VE@Z=#C&#Cv@[`@[`@uR@bP@RT@@A@.9 .9 +L@O9 O9 9 /d@(7 ]|@]|@W:@W:@+~ X:@r[@rG sG sG -E }g }g *E *E }g }g -E &E &E &E &E u1$u1$Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$&E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$Nt%Nt%GJ%GJ%GJ%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%Nt%u1$&E Kv Eu Eu u1$u1$u1$u1$u1$Nt%Nt%Nt%&E &E &E &E &E &E &E &E $4@$4@$4@$4@$4@$4@$4@$4@Eu Kv Kv &E u1$u1$Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%GJ%GJ%GJ%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%*L%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%g`%g`%g`%g`%g`%g`%g`%g`%pM%pM%pM%pM%pM%pM%pM%pM%g`%g`%pM%pM%pM%*L%*L%*L%oF%oF%oF%oF%oF%oF%oF%oF%UH%UH%oF%oF%oF%oF%G'$Nt%*L%*L%GJ%GJ%GJ%Nt%Nt%Nt%u1$u1$Nt%Nt%Nt%Nt%GJ%GJ%8C%RL%SL%SL%SL%r(*r(*r(*r(*r(*r(*r(*r(*r(*r(*5C%*L%UH%UH%UH%UH%UH%PL%PL%PL%PL%=)&=)&=)&=)&=)&#F%+y .w%.w%Y{$=^$;z$RC RC 6G@5G@v! cN@X~#1r@(M C@$xy e1# t#LH#MH#SJ#bj#/M ]M ]M 6q#/M e1#e1#/M bj#bj#6q#]M d1#d1#/M ]M 6q#f1#f1#e1#e1#d1#d1#d1#/M /M ]M t#OH#SJ#OH# t#bj# t#vg#vg#]M ew xy xy ew ')#kI@1f 1f 1f YA /|@:|@(|@[|@$4@$4@<|@$4@Eu &E u1$u1$Nt%Nt%GJ%GJ%GJ%GJ%u1$Nt%GJ%GJ%GJ%u1$&E Eu =E *E }g -E tG sG rG >b@>b@r[@X:@+~ Y:@]|@(7 /d@+L@+L@.9 RT@bP@uR@[`@b.#UE@i@#Cv@j$#Y=#Z=#VE@P~#N~#O~#0u#Ut&Ut&tq=^T#0Q=(p=0Q=+6*0Q=(p=(p=k`&0C=XE&dn=Ln=1k=uX-ev=^|$/|$:v-}(*o3.-Z+[^+ 9.52.%1.sQ@<(+<(+.9.):.):.S%{h&0, &, Av&Av&&, 0, Av&Av&Av&&, &, &, ", "xX%xX%xX%_r+_r+N7.N7.eO@$B#M7._r+xX%_r+M7.%0+xX%O7.x5.x5.x5.xX%_r+M7._r+_r+_r+_r+_r+_r+_r+_r+91+$;&4I%l=&l=&4I%$;&91+4I%4I%4I%4I%4I%4I%4I%4I%F6.F6.b@rG sG -E -E }g *E *E }g -E -E Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Kv &E &E u1$Nt%Nt%GJ%GJ%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%Nt%Nt%u1$Kv Eu vR@vR@Kv &E &E u1$Nt%Nt%GJ%GJ%&E &E &E &E &E &E &E &E <|@<|@<|@<|@<|@<|@<|@<|@vR@vR@Eu Kv u1$Nt%GJ%GJ%u1$u1$u1$u1$u1$u1$u1$u1$GJ%GJ%GJ%*L%*L%pM%pM%pM%*L%*L%*L%*L%*L%*L%*L%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%pM%g`%g`%g`%g`%g`%g`%g`%g`%pM%pM%pM%pM%pM%pM%pM%pM%g`%g`%g`%pM%pM%*L%*L%*L%G'$G'$G'$G'$G'$G'$G'$G'$UH%UH%oF%oF%G'$|f |f |f *L%GJ%GJ%GJ%Nt%Nt%u1$u1$Nt%Nt%Nt%GJ%*L%pM%pM%pM%SL%r(*r(*r(*r(* '* '* '*r(*r(*r(*r(*r(*r(*r(*56*8C%*L%*L%*L%*L%UH%UH%PL%PL%PL%=)&=)&=)&=)&=)&#F%cs ^d ;b Ju j@#V^#W^#SC 7G@:C@yK W~#=p@LZ$Kz Kz f1#]M SJ#zg#Dd#MH# t#/M ]M 6q#6q#/M f1#e1#/M bj# t#bj#]M d1#e1#d1#/M /M e1#e1#e1#d1#d1#/M /M /M /M 6q#vg#LH#LH#OH#bj#]M bj#vg#vg#]M ew Lz dw f1#a~ @~ /|@/|@WA WA /|@[|@(|@:|@$4@$4@$4@vR@Kv u1$u1$u1$Nt%Nt%GJ%GJ%GJ%*L%u1$Nt%GJ%GJ%GJ%u1$Kv Eu *E *E }g -! sG rG >b@r[@X:@X:@+~ Y:@]|@(7 9 9 +L@.9 @A@RT@bP@[`@b.#b.#i@#i@#Cv@C&#Y=#VE@P~#P~#N~#0u#Ut&Ut&Ut&qR#(p=0Q=(p=0Q=s_$k`&S2*h_*s_$b:*XE&dn=tH&en=ev=ev=qy=Nj=5k&Su$rQ@e6@<^+l3.52.l;.h;#sQ@<(+.9.):.S%{h&&, &, &, 0, {h&0, 0, &, &, Av&ZQ.", "x5.x5.x5.x5.x5.x5.x5.O7.xX%_r+M7.M7.N7.xX%O7._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7._r+xX%xX%O7.O7.QI.QI.QI.QI.QI.QI.QI.QI.4I%4I%4I%QI.91+91+4I%T}%b@>b@sG sG tG -! -E }g }g *E &E &E &E &E &E &E &E &E &E &E &E &E &E &E &E &E Kv &E Nt%u1$Kv Eu &E u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$&E Kv Eu Eu &E Nt%GJ%Nt%Nt%Nt%u1$u1$u1$&E &E Eu vR@<|@:|@:|@[|@<|@$4@[|@<|@$4@Eu &E u1$GJ%*L%Nt%u1$u1$&E Kv Kv Eu Eu *L%*L%*L%*L%*L%*L%*L%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%*L%*L%*L%pM%pM%pM%pM%pM%pM%pM%*L%*L%g`%g`%g`%g`%g`%g`%g`%g`%pM%pM%pM%pM%pM%pM%pM%pM%g`%g`%g`%g`%g`%g`%g`%g`%*L%*L%*L%*L%*L%*L%*L%*L%UH%PL%PL%PL%PL%PL%PL%PL%PL%PL%PL%PL%PL%PL%PL%UH%pM%pM%pM%pM%pM%pM%pM%pM%*L%*L%*L%*L%*L%*L%*L%*L%r(*H/&}o-}o-`x `x `x Qv&}o-}o-}o-`x `x `x `x Vw [A Xw VK&M[*VK&pM%*L%UH%UH%G'$n!$n!$YI$YI$l!$EN W^#9s &$$T^#v_$v_$pI@}r@^M ^M ]Q#@p@^Q#e>*zz#_Q# t#OH#LH#zg#zg#O8#LH#SJ#O8#O8#MH#OH#]M d1#d1#/M /M /M ]M 6q#6q#bj#bj# t#/M d1#e1#e1#e1#d1#]M ]M SJ#OH#OH#OH#vg#vg# t# t#d1#d1#/M d1#e1#dw Lz G5@B_#kI@a~ @~ ^|@^|@@~ @~ _|@:|@[|@<|@vR@Kv &E &E Kv &E &E u1$Nt%Nt%GJ%GJ%Nt%Nt%Nt%u1$u1$u1$&E &E *E -E -! -E -E -! >b@+~ X:@t! Y:@]|@/d@/d@(7 ]|@.9 RT@uR@[`@uR@uR@b.#i@#Cv@j$#C&#Y=#VE@P~#ir#ir#Ut&Ut&Ut&u_$qR#(X%S2*]T#]T#0Q=k`&+6*s_$t_$T8 6U%_A=11&II$r! KX-c:*qg*Tm-ry=m}+gX.<(+`8.u5.&1.^U.0+u.@6g.%b=6g.yi.yi.u.@u.@yi.%b=I&=v.@", "x5.x5.x5.x5.x5.x5.x5.xX%_r+N7.N7.N7._r+xX%O7._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7._r+xX%xX%xX%O7.$;&$;&$;&$;&$;&$;&$;&$;&$;&4I%4I%QI.s[.s[.$;&xx.8'%[{.Tw@[{.8'%*zz#DL%og&ej#SJ#LH#O8#Dd#Dd#O8#LH#SJ#LH#MH#LH#vg#]M d1#/M ]M ]M ]M ]M 6q#6q#6q#6q#6q#]M ]M 6q#6q#6q#6q#6q#6q#OH#vg#vg#vg# t# t#bj#bj#d1#d1#d1#d1#f1#dw Lz G5@kI@1f YA @~ ^|@@~ @~ WA :|@:|@<|@$4@vR@Kv &E u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$&E &E &E }g -E -! -! -E tG r[@+~ +~ W:@;! (7 /d@ 9 9 9 @A@bP@[`@[`@uR@uR@b.#i@#Cv@j$#C&#Y=#VE@P~#ir#N~#0u#0u#Ut&u_$tq=(X%S2*h_*]T#]T#0Q=k`&s_$t_$T8 [n _A=[G&MX-MX-Rh=NX-qg*/i*JE.J1.e6@t4.`8.s}+Q>.@R+):.):.):.):.):.):.):.):.g|.g|.g|.g|.g|.u&Ga#_v&XX-ZL=3r&nq& l& l&Z+*;6#O8#LH#OH#6q# t# t#bj#]M /M bj#vg# t# t#bj#bj#6q#]M ]M /M t#vg#SJ#LH#LH#vg#6q#/M 6q#6q#6q#]M ]M /M /M /M d1#d1#e1#f1#dw xy Lz LZ$^|@^|@^|@^|@^|@@~ @~ WA $4@$4@vR@Eu Kv &E u1$u1$GJ%GJ%Nt%Nt%u1$&E &E Kv u1$u1$u1$&E &E &E Kv Kv }g -! sG rG sG rG X:@+~ ]|@]|@;! ]|@/d@O9 RT@bP@RT@uR@b.#UE@b.#b.#i@#j$#j$#C&#Y=#Z=#VE@ir#N~#N~#O~#O~#Ut&85*qR#(X%(p=S2*S2*h_*]T#k`&s_$t_$0p=6U%]l=r! YX-_n NX-ZX-rl*Jc@Y`+|w.<(+N7+ 9.[^+v!+52.<(+<(+<(+<(+<(+<(+<(+<(+):.):.&6>&6>&6>&6>&6>&6>&6>&H-&H-&H-&H-&H-&H-&H-&H-&=)&=)&=)&=)&=)&=)&=)&=)&-)&-)&-)&-)&-)&-)&-)&H-&#B%#B%#B%#B%#B%#B%#B%#B%H-&H-&H-&H-&H-&H-&H-&~J%[N%{J%t7*{J%t7*{J%t7*{J%.D%@}$#}$Nv Mv no%Mv kP&+Y-@Y-#Y-$Y-;J%~6%%Y--J%I3&6w&GV#*p@Lz LZ$LZ$xy wy U7@Cz#/:&/:&tp&S(&mW=&Y-*Y-Q**bz&=Y--Y--Y-;Y-Gx=Y+*Qm@Z+*;6#O8#LH#SJ#]M bj# t#bj#]M 6q# t#SJ#vg#vg#vg# t#bj#bj#6q#6q# t#vg#SJ#SJ#OH#bj#/M e1#]M ]M ]M /M /M d1#d1#d1#d1#e1#f1#ew xy Lz LZ$LZ$/|@/|@^|@^|@^|@^|@^|@^|@vR@vR@Eu Kv &E &E u1$u1$GJ%GJ%Nt%Nt%u1$&E &E Kv u1$u1$&E &E &E Kv Kv Kv }g tG >b@>b@>b@>b@X:@+~ ;! ;! Y:@;! (7 O9 @A@uR@bP@[`@UE@UE@b.#UE@Cv@C&#C&#C&#Y=#VE@P~#ir#N~#O~#O~#0u#u_$qR#5N=^T#(p=S2*S2*h_*0Q=+6*t_$0p=Js&@' ]l=>Y-[G&_n ev=,Y-E% Yy&XT#m}+sQ@t4.l3.k3.v!+v!+<(+<(+<(+<(+<(+<(+<(+<(+):.):.W=>W=cY-dY-'$&_W&eY-eY-fY-gY-hY-[Y-2A=Y+* l&Zo@Dd#O8#MH#LH# t#OH#SJ#OH# t# t#SJ#MH#SJ#SJ#SJ#LH#LH#LH#LH#MH#LH#LH#OH# t#6q#/M d1#e1#]M ]M ]M /M /M /M d1#d1#/M e1#ew xy LZ$LZ$LZ$LZ$/|@/|@^|@^|@/|@(|@:|@[|@&E &E &E u1$u1$u1$Nt%Nt%u1$u1$u1$u1$u1$Nt%Nt%Nt%&E &E &E Kv Kv Eu Eu Eu -E sG X:@t! t! X:@t! W:@W:@;! (7 O9 .9 RT@bP@uR@[`@UE@Cv@Cv@i@#i@#j$#Y=#C&#Y=#Z=#VE@ir#N~#O~#0u#Ut&85*pR#^T#h_*]T#]T#]T#0Q=k`&s_$T8 Js&rU=O}*rg*]l=*A&[G&cv=iY-Y5*!G=i^+o!#DI#v5.g|.l3.r4.$:+$:+):.):.):.):.):.):.):.):.g|.g|.g|.g|.g|.b@>b@rG rG sG tG -! -! &E &E &E &E &E &E &E &E &E &E &E &E &E &E &E &E Kv &E Nt%u1$Kv Eu &E u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%&E &E &E &E &E &E &E &E Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$Nt%Nt%Nt%vR@Eu &E Nt%Nt%u1$&E Kv &E &E Kv Kv Kv Eu Eu Eu vR@Eu Kv &E Kv Eu $4@[|@<|@<|@$4@$4@vR@vR@vR@Eu [|@[|@[|@:|@_|@_|@(|@(|@[|@[|@[|@[|@[|@[|@[|@[|@:|@:|@:|@:|@:|@:|@:|@:|@/|@/|@(|@(|@_|@_|@_|@:|@<|@<|@$4@vR@Eu Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%F'$F'$F'$F'$F'$F'$F'$F'$F'$F'$F'$F'$F'$F'$F'$PO$ED%@F%@F%ED%@F%ED%ED%ED%PO$PO$PO$PO$PO$PO$PO$F'$3C%GJ%3C%GJ%3C%GJ%3C%GJ%F'$u1$F'$u1$F'$u1$F'$.y Nv -:$lP%|Z&mn&jY-hP&kY-lY-mY-nY-oY-pY-qY-rY-sY-tY-uY-vY-wY-xY-yY-zY-AY-BY-CY-DY-EY-FY-FV=GY-MY%hx&HY-IY-mT=JY-JY-KY-LY-MY-NY-OY-OY-PY-fY-QY-[L=MA=Y+*Z+*;6#zg#O8#MH#LH#OH#SJ#LH#SJ#vg#vg#SJ#O8#SJ#LH#LH#MH#O8#O8#zg#zg#zg#MH#SJ# t#6q#/M /M d1#6q#6q#]M ]M /M /M /M d1#/M e1#ew Lz LZ$G5@LZ$LZ$/|@^|@^|@^|@/|@_|@<|@$4@&E u1$u1$u1$u1$Nt%Nt%Nt%Kv &E &E u1$Nt%Nt%GJ%GJ%&E &E Kv Kv Kv Eu Eu Eu -E sG X:@+~ t! t! +~ W:@W:@]|@ 9 @A@uR@[`@[`@[`@[`@UE@Cv@Cv@i@#Cv@C&#Z=#Y=#Y=#Z=#VE@ir#N~#O~#0u#u_$tq=5N=S2*]T#0Q=0Q=0Q=k`&+6*t_$0p=yD O}*[!-t|*RY-SY-6j=Zy&TY-V^$1;@1;@fX.,X@D6.cO@ 9.u5.tK+w!+S%{h&Av&Bv&B9.8P.0, Av&Bv&Bv&Av&Av&Bv&v.@yi.mO#jM#jM#jM#k4@j(+p2@k4@k4@k4@k4@k4@k4@", "q[*q[*q[*q[*q[*q[*q[*}7.EY#Vb@GY*q[*B2*Wh@Wh@l#@PI.PI.PI.PI.PI.PI.PI.#9.#9.#9.#9.#9.#9.#9.#9.v7+91+4I%$;&QI.91+QI.4I%l=&4I%$;&91+91+$;&4I%l=&O7.xX%xX%_r+M7.%0+$B#$B#M7.M7.M7.M7.M7.M7.M7.M7._r+N7.N7.N7.N7.N7.N7.M7._r+_r+_r+N7.M7.%0+@9.eO@eO@eO@eO@%0+_r+_r+M7.@9.N7.N7.N7.N7.N7.N7.N7.N7.'Z%)Z%@9.M7.N7.N7.N7.M7.$B#$B#$B#$B#$B#$B#$B#$B#cp.cp.cp.cp.cp.cp.cp.cp.|5+w7+ET&w7+cp.#9.cp.[3+[3+|5+w7+6z+6z+w7+|5+[3+w7+ET&'C+vA*vA*'C+ET&w7++9.,H.<3+0q.bp.bQ#+9.:(+bQ#:(+0q.0q.,H.bp.bp.bp.|r%|r%|r%vA*'C+'C+6z+6z+vA*vA*vA*vA*vA*vA*vA*vA*'Z%'Z%,X@,X@)Z%eO@eO@@9.p!#p!#DI#'Z%,X@)Z%)Z%eO@,X@)Z%)Z%)Z%)Z%)Z%)Z%,X@'Z%,X@eO@@9.@9.eO@,X@'Z%)Z%,X@'Z%'Z%'Z%)Z%@9.$B#eO@'Z%2p%2p%p!#'Z%'Z%DI#,H.:(++9.o&=b,+o&=bQ#+9.:(+:(+:(+bp.bp.+9.+9.+9.b,+o&=o&=bQ#+9.bp.bp.:(++9.+9.bQ#o&=b,+b,+o&=o&=b,+b,+b,+o&=bQ#bQ#+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.b,+o&=bQ#+9.bp.+9.+9.+9.+9.+9.bQ#bQ#o&=b,+b,+j(#bQ#bQ#bQ#bQ#+9.+9.+9.+9.CI#w{@Q+&j(#o&=bQ#+9.bp.j(#j(#b,+b,+b,+b,+o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+,H.bp.bQ#bQ#+9.+9.o&=j(#o&=b,+Q+&w{@w{@Q+&b,+o&=zI*7&+0}+0}+=3+ib.=3+0}+aR#0q.y}*!5.r=-wr-UY-ke-VY-WY-XY-YY-3'*D[*o7-py=]p=-p S8 8 'U=)t q{ .] l| ir#VE@Y=#h$#h@#{Y@XC@w! @t#@t#$~ S~#:r@'P R~#B_# 9 (7 ]|@Y:@+~ t! X:@X:@>b@sG sG rG sG -! }g &E &E &E &E &E &E &E Kv u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%Nt%&E Kv Kv &E Nt%GJ%&E &E Kv Kv Kv Eu Eu Eu Kv Kv Kv Kv Kv Kv Kv Kv Eu vR@<|@[|@[|@<|@vR@Eu $4@$4@$4@<|@<|@[|@[|@[|@_|@_|@_|@_|@(|@(|@/|@/|@$4@[|@(|@(|@_|@:|@_|@(|@<|@[|@[|@[|@[|@(|@YA ')#LZ$LZ$LZ$LZ$G5@1r@W~#X~#X~#W~#W~#W~#yK v! QC Lv ^A ^A +z +z +z Qw Qw Qw Qw Qw +z +z +z Qw Rw gB ]$&bE%V.$~ $S&&aE%aE%S&&]$&]$&bE%^$&i_*W.$Ss$X<*Ms& ~&1$&ZY-UB&QO$iW-QO$QL%QL%QL%QL%RL%SL%SL%SL%C1&Uw we*`Y-`x ;&$H=$-f$>F$ Z-0E%6A&.Z- /&b$$-B%nY-+Z-uG=uG=@Z-#Z-$Z-%Z-Gi@&Z-*Z-=Z--Z-;Z->Z-,Z-'Z-)Z-!Z-~Z-{Z-]Z-^Z-/Z-(Z-be&_Z-:Z-0+k4@j(+IV.jM#5,+k4@p2@%u.k(+j(+j(+p2@p2@", "&R+q[*&R+q[*&R+q[*&R+GY*ng GY*&R+q[*&R+q[*q[*l#@PI.PI.PI.PI.PI.PI.PI.#9.#9.#9.#9.#9.#9.#9.#9.91+$;&l=&l=&QI.s[.s[.s[.l=&4I%$;&QI.QI.$;&4I%l=&O7.O7.xX%_r+N7.M7.%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.@9.$B#%0+M7._r+xX%O7.x5.N7._r+_r+N7.M7.%0+@9.eO@$B#$B#$B#M7._r+_r+M7.@9.M7.M7.M7.M7.M7.M7.M7.M7.)Z%eO@$B#M7.M7.M7.M7.%0+$B#$B#$B#$B#$B#$B#$B#$B#cp.cp.cp.cp.cp.cp.cp.cp.[3+w7+ET&w7+[3+cp.[3+|5+[3+|5+w7+ET&ET&w7+|5+[3+vA*'C+ET&w7+w7+ET&'C+vA*+9.,H.0q.q3.bp.bQ#+9.:(+j(#bQ#:(+,H.bp.+9.bp.:(+vA*'C+'C+'C+'C+6z+6z+6z+vA*vA*vA*vA*vA*vA*vA*vA*,X@,X@,X@,X@)Z%)Z%)Z%)Z%eO@eO@)Z%,X@,X@'Z%DI#DI#)Z%)Z%,X@,X@,X@,X@)Z%)Z%'Z%,X@)Z%eO@eO@)Z%,X@'Z%)Z%,X@'Z%DI#'Z%,X@)Z%eO@eO@'Z%2p%2p%DI#'Z%'Z%DI#:(+bp.bQ#o&=b,+o&=o&=bQ#bp.bp.bp.+9.+9.bQ#bQ#bQ#bp.bp.+9.bQ#o&=o&=b,+b,++9.+9.bQ#o&=b,+b,+o&=o&=b,+b,+b,+o&=bQ#bQ#bQ#+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#j(#b,+o&=bQ#+9.+9.bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#Q+&Q+&j(#b,+b,+o&=bQ#bQ#b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+bp.bQ#o&=o&=bQ#bQ#o&=j(#o&=b,+Q+&w{@w{@Q+&b,+o&=7&+7&+0}+0}+=3+=3+DX-@:+0J*,X@R]$z,=Jj=0Z-i1* j-aZ-bZ-cZ-WY-SX-H~#=h-tH-:n SV%dZ-Up 9C=)t !G .] .l&P~#Z=#C&#h$#h@#{Y@{Y@An#8q#jE#)a&'a&R^#eZ-KA@QT@O9 /d@]|@Y:@+~ X:@r[@X:@>b@sG sG rG rG tG }g &E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%Nt%&E Kv Kv &E Nt%GJ%&E &E Kv Kv Kv Eu Eu Eu Kv Kv Kv Kv Kv Kv Kv Kv Kv Eu $4@<|@<|@$4@Eu Kv vR@vR@vR@$4@$4@<|@<|@<|@[|@:|@:|@:|@_|@_|@(|@(|@[|@_|@^|@^|@/|@(|@/|@^|@(|@/|@/|@(|@_|@/|@YA ')#f1#f1#e1#e1#f1#f1#ew dw G5@G5@G5@1r@W~#cN@v! ST@@W@]A @W@]A @W@]A @W@]A @W@]A @W@]A @W@.z +z +z `G${G${G$`G$Wx fB fB Wx eB SL%eB fB '*SL%fB RL%fN=]8@Fy$i!$Fy$>8@S&&]Y@{G$@W@`G$dB 7)*bC%0E%Uw fZ-gZ-SH%(%%(%%;f$&;$QH%u**0$*RH%EL%`V%hZ-+b@ql&iZ-jZ-@Z-kZ-lZ-mZ-nZ-Q7@oZ-pZ-qZ-rZ-sZ-tZ-uZ-vZ-wZ-xZ-yZ-zZ-AZ-BZ-N}&TF= )&eu@CZ-DZ-EZ-FZ-Q}&FZ-Q}&GZ-HZ-HZ-IZ-1Z-JZ-!v=*h**h*6Z-_W&KZ-LZ-6T=8a*MA=Jw&P8#Fa#TJ##b@wg#aj&#b@Ic&wg#wg#wg#wg#Ic&Ic&vg#OH#SJ#LH#MH#LH#SJ#OH# t#LH#zg#LH#6q#f1#e1#/M QT@))#+W@))#!)#QT@!)#+W@B_#')#1f a~ YA YA a~ 1f WA @~ ^|@(|@:|@<|@$4@vR@&E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%&E &E Kv Eu $4@<|@<|@[|@r[@X:@t! +~ Y:@;! ]|@(7 /d@+L@RT@bP@bP@uR@UE@j$#[`@b.#UE@i@#Cv@j$#C&#C&#VE@P~#N~#0u#Ut&Ut&0u#0u#D,#Fz ^p=^p=^p=^m 1g @p=@p=0C=6U%@p=[n rg*qy=6L=dE=%I=MZ-m7*tS.0<@LM=D0@C!@p&=):.b@sG sG rG rG tG -E Kv Kv Kv Kv Kv &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%GJ%Nt%&E Kv Kv &E Nt%GJ%&E &E Kv Kv Kv Eu Eu Eu Eu Eu Eu Eu Eu Eu Eu Eu Kv Eu Eu vR@vR@Eu Eu Kv Kv Eu Eu Eu vR@vR@$4@$4@<|@<|@<|@[|@[|@:|@:|@:|@_|@/|@WA WA @~ ^|@@~ WA WA YA YA WA ^|@@~ 1f B_#]M 6q#6q#6q#bj#bj#bj#bj#e1#f1#dw Lz G5@=p@1r@1r@B'$U!&B'$U!&B'$U!&B'$U!&B'$U!&q%&V!&q%&W!&|$&|$&%p@7`@D@$cB D@$D@$cB cB .n@D@$%p@Iz 7`@Vx cB =p@r[@e{@r[@UH rG j@#5G@V~#oI@U^#qI@g.#mP%WZ-mP%yT%yT%XZ-vW&!J%QN-Bz%5K%*M%>E&*M%T]=5K%YZ-I9&T]=ZZ-`Z- `-.`-+`-@`-#`-$`-%`-&`-*`-oG==`--`-;`->`-,`-'`-)`-!`-~`-Uz={`-]`-^`-vS=/`-FQ=(`-yQ=_`-:`-yQ=yQ=<`-[`-[`-EQ=|Z-}`-QU=:V=KY-|`-'$&1`-2`-3`-4`-MA=nq&Cd#ZC@ZC@Fa##b@wg##b@Ic&Ic&wg#wg#Ic&#b@#b@ t#vg#SJ#LH#MH#MH#MH#MH#bj#SJ#MH#OH#]M f1#e1#/M !)#))#w! +W@!)#QT@!)#+W@QT@B_#kI@a~ YA WA WA YA @~ ^|@/|@_|@[|@$4@vR@Eu &E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$&E Kv vR@$4@[|@:|@_|@X:@t! +~ W:@;! ]|@(7 /d@ 9 .9 RT@bP@bP@uR@UE@Cv@uR@[`@b.#i@#j$#C&#Z=#Z=#P~#ir#N~#0u#Ut&Ut&Ut&Ut&D,#Fz ^p=^p=^p=^p=1g @p=@p=[n 6U%[n @' t|*^|$/|$dO=n7*5`-6`-.0.|@.eg+i)@C!@C!@.9.):.):..9.vj&vj&&f`-f`-f`-g`-h`-i`-i`-N-&p7*oY-Ny-e2=gP&nY-4Y-j`-AG%|3=M&&k`-l`-m`-n`-2Q@o`-dd&p`-q`-5I=Nb@r`-pG=-P=s`-t`-u`-v`-w`-w`-x`-y`-z`-A`-B`-C`-D`-E`-^Z-F`-/`-(`-yQ=<`-yQ=2Z-FR=[R=EQ=[`-[`-EQ=FR=}`-QU=:V=G`-H`-dY-2`-[L=8a*!W=V &'t=P8#Fa#ZC@Fa#TJ#Ic&#b@Ic&Ic&wg#Ic&#b@TJ#TJ#OH#SJ#SJ#LH#LH#LH#LH#SJ#bj#vg#OH# t#/M f1#f1#d1#!)#+W@w! +W@!)#QT@!)#))#QT@B_#')#1f YA WA @~ ^|@^|@/|@_|@:|@<|@vR@Eu Kv &E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$&E Kv vR@[|@_|@(|@/|@+~ +~ W:@;! ]|@(7 /d@ 9 O9 @A@bP@uR@uR@uR@UE@Cv@uR@[`@UE@Cv@C&#Z=#VE@P~#ir#N~#O~#0u#Ut&Ut&u_$u_$Zq J[$^p=^m ^p=^m 1g {t @p=/p=6U%@' rg*/|$^|$^|$;r&I`-zv@3@+|@.{z&SW#+=@C!@C!@<(+<(+<(+<(+vj&vj&p=RW-J`-K`-L`-M`-N`-O`-c`-P`-Q`-d2-eX-,|*R`-S`-P*#~m P@$:&$uy @|#kx Y=#j$#j$#Cv@h@#8.#9.#YC@An#8q#)a&@t#))#.9 O9 /d@;! W:@t! X:@t! r[@rG rG >b@>b@sG -! vR@vR@Eu Eu Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$GJ%Nt%&E Kv Kv &E Nt%GJ%&E &E Kv Kv Kv Eu Eu Eu vR@vR@vR@vR@vR@vR@vR@vR@Eu Kv Kv Kv Kv Kv Kv Eu &E &E &E Kv Kv Eu Eu Eu Eu Eu vR@vR@vR@$4@$4@$4@<|@_|@/|@^|@(|@_|@(|@^|@^|@WA 1f kI@')#QT@w! 8.#vg# t# t#vg#OH#LH#O8#zg#MH#SJ#vg#bj#6q#bj# t#Pv#[I&T`-f9*U`-V`-W`-NT#MT#'1*X`-4X%n|*4X%Y`-V`-c7#{6%Z`-``- ;. ; ;+ ;hy=@ ;<+#A^=YW&{6%# ;A^=A6%|,@59 @X#},@*b $ ;% ;& ;* ;= ;- ;; ;1:&1:&> ;, ;4A%' ;) ;! ;~ ;{ ;] ;^ ;z@-/ ;S+-( ;_ ;: ;< ;[ ;f&.&R.43.}l+-P={n+} ;| ;[r.1 ;`D=2 ;3 ;4 ;5 ;6 ;7 ;8 ;8 ;C`-F`-(Z-9 ;0 ;a ;FQ=2Z-[R=2Z-|Z-ZT=%T=ZT=b ;c ;d ;c ;b ;KY-JY-LY-e ;H`-dY-2`-f ;f ;nW=d4&P8#TJ##b@#b@TJ#Ic&wg#Ic&Ic&Ic&Ic&Ic&#b@Fa#ZC@O8#MH#LH#SJ#vg#vg# t# t#6q#bj#bj#]M e1#f1#f1#e1#!)#))#+W@))#QT@')#B_#!)#B_#')#kI@1f YA @~ ^|@/|@(|@_|@:|@<|@vR@Eu &E u1$&E &E u1$u1$u1$Nt%Nt%Nt%GJ%Nt%Nt%u1$u1$&E &E Kv &E Kv Eu $4@:|@(|@/|@^|@W:@Y:@;! ]|@(7 9 O9 O9 +L@RT@uR@[`@uR@uR@UE@Cv@[`@b.#i@#j$#Y=#VE@P~#ir#N~#N~#O~#O~#0u#Ut&u_$85*Fz ;c Yp Yp Yp Yp @p=/p={t /p=0C=rg*qy=qy=^|$d:*I`-dR=D<*JS=Z2.D<&]q%i)@C!@C!@<(+<(+<(+<(+vj&vj&c#k ;l ;l ;b.$76-Lh 4o=I_ r4&m ;'d*n ;wf=|n Bv@uy Z=#Y=#C&#j$#8.#8.#YC@An#8q#8q#)a&@t#QT@+L@ 9 /d@]|@Y:@W:@+~ +~ X:@>b@rG >b@>b@sG -! $4@$4@vR@Eu Eu Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$GJ%Nt%&E Kv Kv &E Nt%GJ%&E &E Kv Kv Kv Eu Eu Eu vR@vR@vR@vR@vR@vR@vR@vR@vR@Eu Eu Kv Kv Eu Eu vR@&E &E Kv Kv Eu Eu Eu Eu Eu Eu Eu vR@vR@$4@$4@$4@$4@[|@(|@(|@:|@:|@:|@(|@_|@@~ a~ ')#B_#!)#XC@h@#SJ#OH#OH#vg#SJ#MH#zg#;6#MH#MH#LH#LH#MH#MH#O8#-3#o ;p ;q ;EY-/N%r ;ge&U`-r ;s ;s ;r ;T`-t ;q ;Jb@Mm@u ;v ;w ;PU@x ;qr=x ;y ;z ;y ;~ ;A ;) ;B ;C ;D ;E ;F ;G ;H ;I ;J ;K ;L ;L ;gC#M ;N ;O ;P ;Q ;R ;yb&[ ;S ;T ;U ;V ;W ;X ;Y ;Z ;` ; .;..;+.;hK.@.;Y9+1d&V9+Pp.#.;$.;JP=%.;&.;_>&x/&*.;=.;|O=-.;;.;>.;,.;/`-'.;uS={S=).;a ;|Z-2Z-2Z-|Z-d%&}`-}`-d%&%T=KY-!.;G`-G`-G`-G`-e ;e ;|`-H`-1`-f ;~.;ZL=FL##b@wg#f5&wg#Ic&wg#f5&Ic&Ic&Ic&Ic&#b@TJ#ZC@P8#O8#MH#SJ#vg#bj#6q#]M ]M 6q#]M /M e1#f1#ew f1#f1#QT@!)#))#!)#')#1f kI@')#1f kI@kI@1f a~ WA ^|@/|@_|@:|@[|@$4@Eu &E u1$Nt%&E &E u1$u1$u1$Nt%Nt%Nt%GJ%Nt%Nt%u1$&E Kv Kv Eu Eu vR@$4@[|@:|@(|@/|@^|@Y:@;! ]|@(7 9 O9 +L@.9 @A@bP@[`@[`@uR@uR@UE@Cv@UE@i@#Cv@C&#Y=#VE@P~#ir#O~#O~#O~#O~#0u#u_$85*tq=;c Yp /o @p=/o @p=/p=6U%[n /p=Z4-qy=Ra-^|$qy=d:*;r&5`-DM+:<.{z&=g@{z&*e@^^@p&=<(+<(+<(+<(+!Z%k]#b@>b@r[@r[@rG -! <|@<|@$4@vR@Eu Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E &E &E &E &E &E &E GJ%Nt%&E Kv Kv &E Nt%GJ%&E &E Kv Kv Kv Eu Eu Eu $4@$4@$4@$4@$4@$4@$4@$4@<|@$4@Eu Kv Kv Eu $4@<|@Kv Kv Kv Eu Eu vR@vR@vR@Eu Eu vR@vR@$4@$4@$4@<|@vR@[|@_|@(|@:|@[|@:|@(|@_|@^|@a~ kI@')#B_#))#XC@OH# t#bj#6q#bj#vg#LH#O8#LH#MH#zg#Dd#Zo@Z+*Z+*Wm@_.;:.;YV%<.;ef&[.;}.;|.;[.;}.;}.;ef&YV%1.;2.;DS=2v=3.;4.;5.;6.;7.;8.;9.;0.;a.;2v=uS@4.;b.;c.;d.;e.;f.;g.;h.;i.;j.;k.;l.;m.;n.;o.;p.;q.;r.;s.;t.;u.;v.;w.;x.;y.;z.;A.;B.;z!+ M@C.;D.;E.;jJ@F.;G.;H.;Tq.-.+I.;J.;JZ-K.;L.;M.;M.;N.;O.;P.;Q.;9U=JN=<2&R.;|2&Iy@zQ=S.;S.;9e&:S=J&&T.;J&&Q(&FU=FU=U.;V.;V.;W.;mT=W.;X.;Y.;Z.;`.;X.;Y.;Y.;>$& +;ZL=_v&GL#Ic&aj&aj&wg#Ic&wg#f5&Ic&Ic&Ic&Ic&#b@Fa#ZC@P8#LH#OH# t#6q#]M /M ]M ]M 6q#/M f1#ew ew ew ew ew B_#QT@!)#B_#1f YA a~ 1f YA a~ 1f 1f a~ YA @~ ^|@:|@[|@<|@vR@Kv u1$Nt%GJ%&E &E u1$u1$u1$Nt%Nt%Nt%GJ%Nt%Nt%u1$&E Kv Eu Eu $4@<|@<|@[|@_|@(|@/|@/|@;! ]|@(7 /d@O9 +L@.9 @A@@A@uR@b.#b.#uR@[`@UE@Cv@Cv@j$#C&#Y=#Z=#VE@P~#P~#0u#0u#O~#O~#0u#u_$tq=qR#^m /o {t /p={t /p=6U%@' 0C=6U%b:*Ra-gh*qy=/|$d:*MZ-l7*.+;++;{z&eO=i)@+=@9<@^^@.9.<(+<(+.9.k]#zU-0+,0+,0+>0+,0+6g.%b=u.@mh.Nc&u.@[3.B9.B9.Bv&Bv&Bv&Bv&ZQ.ZQ.8P.ZQ.0, {h&&, ZQ.Bv&ZQ.0, 0, &, &, Av&Av&Av&ZQ.{h&0, Av&ZQ.Bv&ZQ.Av&Av&%b=yi.,0+u.@6g.%b=yi.>0+yi.yi.yi.yi.u.@,0+", "wx.wx.wx.wx.wx.wx.wx.:t@wx.wx.wx.wx.8:.8:.b@>b@r[@r[@rG tG <|@<|@$4@vR@Eu Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E &E &E &E &E &E &E GJ%Nt%&E Kv Kv &E Nt%GJ%&E &E Kv Kv Kv Eu Eu Eu $4@$4@$4@$4@$4@$4@$4@$4@[|@<|@vR@Eu Eu vR@<|@[|@Kv Eu Eu Eu vR@vR@$4@$4@vR@vR@vR@$4@$4@<|@<|@<|@$4@[|@(|@(|@_|@:|@_|@(|@(|@@~ 1f kI@kI@kI@B_#!)#6q#/M e1#f1#f1#d1#6q# t#OH#LH#zg#Z+*Qm@Y+*Y+*)t=-+;:.;:.;:.;:.;:.;:.;:.;:.;:.;:.;2S=+U=>T=`G&|r&;+;$z=>+;,+;Kn&'+;)+;!+;~+;~+;{+;]+;^+;/+;{+;V8.(+;|>#_+;:+;<+;.`@[+;}+;|+;uT@0R@1+;2+;3+;4+;5+;6+;7+;8+;9+;hL 0+;a+; M@b+;c+;Gt.d+;d+;e+;f+;g+;h+;i+;j+;k+;l+;m+;(N&n+;m+;o+;p+;q+;r+;s+;t+;q+;/>&0e&/R=u+;/R=v+;w+;x+;RU=Q(&A/&|w&HY-y+;HY-cz&Y.;`.;yk&cY-cY-yk&X.;Z.;yk&`.;Z.;Z.;z+; +;XX-Ga#GL#Ic&aj&f5&wg##b@Ic&wg#Ic&Ic&Ic&Ic&TJ#Fa#P8#Cd# t#bj#6q#/M /M ]M 6q#bj#]M d1#ew dw dw ew ew ew ')#B_#QT@')#a~ WA WA a~ WA YA a~ 1f a~ YA WA ^|@[|@<|@$4@Eu &E u1$GJ%*L%&E &E u1$u1$u1$Nt%Nt%Nt%GJ%Nt%Nt%u1$Kv Eu Eu vR@[|@[|@[|@:|@_|@_|@(|@(|@]|@(7 /d@ 9 O9 .9 @A@@A@RT@uR@b.#b.#[`@[`@UE@Cv@C&#C&#Y=#Y=#Z=#VE@VE@P~#Ut&0u#O~#O~#0u#u_$tq=qR#1g @p=/p=[n /p=[n 0C=b:*Z4-6U%Nj=zQ-lI-qy=t|*^|$bQ={U=o,@QQ=V[@eO=0M.VP=C{@9<@):..9..9.):.zU-cX-0+u.@yi.yi.6g.I&=I&=,0+X`+Nc&yi.`W+8P.8P.B9.B9.Bv&ZQ.ZQ.Av&4p=ZQ.~h&>S%{h&Av&Bv&Bv&{h&{h&0, 0, &, &, &, Av&~h&0, Av&ZQ.Bv&ZQ.Av&Av&6g.u.@>0+,0+6g.I&=6g.,0+I&=6g.u.@u.@yi.yi.", "wx.8:.8:.8:.8:.wx.:t@8:.yd.M!.ZL.M!.8:.:t@<3+QI.PI.Hu+PI.cp.[3+cp.#9.PI.PI.PI.PI.PI.PI.PI.PI.s[.QI.$;&$;&91+91+QI.4I%$;&$;&$;&$;&$;&$;&$;&$;&$B#$B#%0+%0+M7.N7.N7.N7.xX%_r+M7.%0+%0+M7._r+xX%O7.O7.xX%_r+M7.%0+$B#$B#@9.%0+N7.M7.%0+%0+M7._r+M7.M7.M7.M7.M7.M7.M7.M7.@9.@9.@9.$B#%0+M7.M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#@9.@9.@9.@9.@9.@9.@9.@9.cp.cp.cp.cp.cp.cp.cp.cp.|5+|5+|5+w7+w7+w7+ET&ET&w7+'C+|r%vA*ET&w7+6z+|r%w7+w7+w7+w7+w7+w7+w7+w7+,H.,H.,H.,H.,H.,H.,H.,H.bp.bp.bp.bp.bp.bp.bp.bp.ET&ET&ET&ET&ET&ET&ET&ET&ET&vA*Gu+|r%6z+ET&'C+Gu+)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%,X@)Z%eO@@9.eO@)Z%'Z%DI#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%qK#p!#'Z%'Z%DI#p!#'Z%)Z%p!#'Z%,X@'Z%2p%qK#DI#)Z%bp.bp.:(+:(+bp.bQ#j(#Q+&bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.+9.bQ#o&=b,+bQ#bp.bQ#w{@*r=bp.+9.bQ#bQ#bQ#bQ#+9.bp.o&=o&=o&=o&=o&=o&=o&=o&=+9.o&=j(#j(#o&=o&=j(#w{@b,+bQ#+9.bQ#b,+b,+o&=+9.Q+&Q+&j(#b,+b,+o&=bQ#bQ#+9.+9.bQ#bQ#o&=b,+b,+j(#j(#j(#j(#j(#j(#j(#j(#j(#Q+&j(#o&=bQ#bQ#o&=j(#Q+&j(#b,+b,+o&=bQ#bQ#+9.+9.b,+b,+b,+b,+b,+b,+b,+b,+l]#!G=/W%'Z%,H.,H.NR*7&+oN*b,+p!#{q%=e@T--J9-A+;B+;C+;D+;E+;[(#F+;%+;G+;H+;I+;b.$J+;NC-Kh 6o=g5 86-t4 wf=wf=z_#2k=i[#'p UE@UE@b.#[`@w! +W@))#))# 9 9 9 9 /d@/d@/d@/d@+~ +~ t! r[@>b@sG tG tG <|@<|@$4@vR@Eu Kv &E &E Kv Kv Kv &E &E u1$u1$u1$&E &E u1$u1$u1$Nt%Nt%Nt%&E &E &E &E &E &E &E &E &E &E &E &E &E &E &E &E Kv &E &E u1$Nt%Nt%GJ%GJ%&E &E &E &E &E &E &E &E u1$&E Kv Eu vR@$4@<|@[|@vR@vR@vR@vR@vR@vR@vR@vR@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@vR@vR@vR@$4@$4@$4@$4@$4@$4@$4@$4@vR@$4@<|@:|@_|@/|@^|@@~ a~ a~ YA YA a~ kI@B_#!)#6q#f1#dw e1#e1#f1#/M OH#SJ#MH#;6#m`&~l=#T&jR&M,&gU=K+;L+;L+;K+;&T=M+;`T=&T=N+;O+;P+;tH=Q+;R+;z/&AP=KO=1O=@;)O=,@;'@;)@;!@;~@;{@;]@;^@;/@;(@;p~&t+;_@;p~&:@;1!&<@;[@;}@;|@;#)&94&1@;2@;Q+;6K=6K=3@;qp&z-&z-&yy=(v&93&(v&=k*,s&=k*ny&=k*,s&4@;mg&mg&)$&mg&4@;Hx=2r&1w&83&ng&d4&Fa#Ic&wg##b@TJ#TJ##b@wg#Ic&#b@TJ#TJ##b@Ic&wg#6q#bj# t# t#bj#]M d1#e1#ew ew ew ew dw dw dw dw B_#')#kI@')#B_#B_#1f YA WA WA YA YA @~ /|@:|@[|@Eu Eu Eu Eu Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$&E &E &E &E Kv Eu $4@<|@$4@<|@[|@_|@/|@@~ WA YA ;! ;! ]|@/d@ 9 +L@.9 .9 uR@[`@UE@i@#Cv@i@#UE@b.#UE@i@#C&#VE@P~#ir#P~#P~#Ut&0u#0u#0u#u_$tq=5N=(X%^p=1g {t /p={t {t [n 6U%^m d:*gh*Tm--h-t|*Z4-K6*r[*TR=o,@{U=Q/@]q%o4@V[@C!@C!@.9.):.S%{h&&, 0, &, ZQ.Bv&Bv&ZQ.&, 0, ZQ.&, {h&0, ZQ.8P.8P.B9.B9.B9.Bv&ZQ.&, 0, {h&~h&0, ZQ.Bv&Av&{h&>S%~h&&, Bv&ZQ.&, 0, 0, &, Av&ZQ.Av&Av&&, &, 0, 0, ", "wx.wx.8:.8:.wx.wx.:t@wx.8:.yd.M!.M!.yd.wx.v4.#9.PI.Hu+PI.cp.[3+cp.#9.PI.PI.PI.PI.PI.PI.PI.PI.QI.4I%l=&$;&91+v7+s[.QI.$;&$;&$;&$;&$;&$;&$;&$;&$B#%0+%0+%0+M7.N7.N7.N7.xX%_r+M7.%0+%0+M7._r+xX%_r+_r+N7.N7.M7.%0+%0+$B#@9.%0+N7.N7.M7.M7._r+O7.M7.M7.M7.M7.M7.M7.M7.M7.$B#$B#$B#$B#%0+%0+%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#@9.@9.@9.@9.@9.@9.@9.@9.cp.cp.cp.cp.cp.cp.cp.cp.|5+|5+|5+w7+w7+w7+ET&ET&w7+6z+vA*'C+w7+|5+ET&'C+ET&ET&ET&ET&w7+w7+w7+w7+:(+:(+:(+:(+:(+:(+:(+:(+bp.bp.bp.bp.bp.bp.bp.bp.6z+6z+6z+6z+6z+6z+6z+6z+6z+vA*Gu+|r%6z+ET&'C+|r%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%,X@)Z%eO@eO@eO@,X@'Z%DI#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%p!#'Z%,X@,X@DI#DI#'Z%)Z%DI#,X@)Z%'Z%p!#2p%'Z%eO@+9.bp.bp.bp.bp.bQ#b,+j(#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.bQ#o&=o&=b,+j(#j(#+9.o&=b,+bQ#+9.+9.j(#S`%+9.bQ#o&=o&=o&=o&=bQ#+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.o&=j(#j(#o&=o&=j(#w{@j(#o&=bQ#bQ#b,+j(#b,+bQ#j(#j(#b,+b,+b,+b,+o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+j(#j(#j(#j(#j(#j(#j(#j(#Q+&j(#o&=bQ#bQ#o&=j(#Q+&j(#j(#j(#b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+p!#Yy&Yy&.X+2p%o&=o&=@:+OJ*oN*@:+o&=qK#C<&Ie+6) g1*5@;6@;#+;7@;8@;9@;0@;N`-a@;I+;P`-b@;ls-4) *o=_<-u4 8>#z_#z_#Bu=*[ @|#S} i@#UE@b.#[`@XC@+W@+W@))#O9 O9 O9 9 /d@/d@(7 (7 W:@+~ t! X:@>b@rG sG tG <|@<|@$4@vR@Eu Kv Kv &E Eu Eu Kv Kv &E &E &E &E &E &E u1$u1$u1$Nt%Nt%Nt%&E &E &E &E &E &E &E &E &E &E &E &E &E &E &E &E &E &E u1$u1$u1$u1$Nt%Nt%&E &E &E &E &E &E &E &E Kv Kv Kv Eu vR@$4@$4@$4@vR@vR@vR@vR@vR@vR@vR@vR@$4@$4@$4@$4@$4@$4@$4@$4@<|@<|@<|@<|@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@$4@[|@:|@_|@/|@^|@@~ YA YA WA WA YA 1f ')#QT@/M ew xy f1#d1#e1#6q#SJ#MH#zg#Z+*;G=#T&]#*~l=3>&gU=K+;&T=&T=tH=tH=M+;M+;&T=N+;O+;c@;M+;np&R+;d@;e@;f@;g@;h@;i@;j@;k@;3M=l@;m@;n@;o@;p@;q@;r@;SK=s@;t@;C@.Zf@u@;-P=v@;w@;x@;y@;z@;Tj@hu@pG=A@;B@;C@;D@;E@;F@;G@;Vx=H@;I@;J@;K@;L@;M@;]N=N@;O@;pL=P@;Q@;R@;S@;T@;U@;V@;W@;V@;X@;X@;Y@;Z@;`@; #;.#;+#;@#;94&##;73&)=&)=&$#;^=&2r&ix&%#;1w&03&$7&=k*,s&=k*wz&$7&wz&ny&ny&ny&I7&mg&7z=-k*&#;(v&83&V}&Bd#TJ#wg#wg#Ic&TJ##b@Ic&f5&wg#Ic&Ic&Ic&wg#f5&aj&6q#bj#bj#bj#6q#]M d1#e1#ew ew ew ew ew ew ew ew ')#kI@1f kI@')#')#a~ WA WA WA WA WA ^|@(|@:|@<|@Eu Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E &E &E Kv Eu $4@<|@<|@<|@:|@_|@/|@@~ YA YA ;! ]|@(7 /d@O9 +L@.9 @A@uR@[`@b.#i@#i@#UE@b.#b.#i@#j$#Y=#VE@ir#N~#ir#ir#0u#O~#0u#Ut&85*qR#(X%(p=^m 1g {t {t {t @p=/p=6U%Nj=py=qy=qy=zQ-b:*d:**#;lX.=#;TR=os%V[@D0@SW#Q/@C!@C!@.9.):.#;,#;'#;P/*)#;!#;EH#;T#~#;{#;SZ-]#;^#;oo=6J@6J@l%#T3 t4 ,<-&[ wf=[]#S} 4' UE@b.#uR@bP@+W@))#.9 .9 +L@O9 /d@(7 ]|@]|@W:@W:@+~ X:@r[@>b@rG sG <|@<|@$4@$4@vR@Eu Kv Kv vR@vR@Eu Eu Eu Kv Kv Kv &E &E u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$&E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$&E &E &E &E &E &E &E &E &E &E &E Eu Eu Eu Eu vR@vR@vR@vR@vR@vR@vR@vR@vR@vR@vR@vR@$4@$4@$4@$4@$4@$4@$4@$4@<|@<|@<|@<|@[|@[|@[|@[|@<|@<|@<|@<|@<|@<|@<|@<|@<|@<|@[|@:|@(|@/|@^|@^|@WA @~ @~ @~ WA a~ 1f kI@e1#Lz Lz f1#d1#/M t#O8#Dd#Zo@Y+*iR&LP&Qk@#T&mF=qp&A/&]=&J&&J&&J&&]=&A/&Q(&]:&/#;RU=J&&T.;(#;_#;:#;<#;[#;}#;|#;1#;2#;3#;4#;5#;6#;7#;8#;9#;0#;a#;b#;c#;d#;e#;f#;g#;h#;i#;j#;k#;l#;m#;n#;o#;p#;q#;r#;s#;t#;u#;v#;w#;!!*x#;y#;z#;A#;]N=}#;B#;<#;C#;P@;P@;D#;E#;F#;G#;H#;I#;J#;K#;VE=L#;M#;M#;M#;=c* z=N#;O#;pA&P#;Q#;aU=&#;|6&4@;=k*ny&=k*R#;1C=S#;1C=S#;T#;WB=Kj&*t&*t&*t&03&4@;-k*@w={y=(v&83&U#;Bd#TJ#Ic&wg##b@TJ##b@wg#f5&f5&f5&f5&f5&J`%.t#}c#6q#6q#bj#6q#]M /M e1#f1#dw dw ew ew f1#e1#e1#d1#kI@a~ a~ a~ kI@kI@YA ^|@@~ @~ @~ ^|@/|@_|@[|@<|@&E &E &E u1$u1$Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$&E &E &E &E Kv vR@$4@<|@[|@[|@_|@(|@^|@WA a~ a~ ]|@(7 /d@ 9 O9 .9 @A@@A@bP@uR@[`@UE@UE@UE@UE@b.#C&#Y=#VE@P~#N~#N~#O~#N~#N~#O~#0u#u_$qR#(X%S2*h_*Yp /o {t {t @p=@p=/p=6U%d:*Ra-/|$qy=/|$@' qg*&A&2b+V#;TR=os%Q/@dN=eg++=@C!@p&=.9.):.n.>n.-~@c2=}m.]*=c2=]*=-~@;n.-~@}m.&, &, 0, 0, 0, 0, &, &, Bv&ZQ.ZQ.Bv&8P.B9.Av&{h&ZQ.ZQ.ZQ.ZQ.ZQ.Av&Av&Av&&, ZQ.Bv&Bv&Av&Av&ZQ.B9.c2=]*=}m.-~@;n.;n.-~@-~@-~@-~@-~@;n.;n.>n.", "_r+v4.N7.v4.N7.#k._r+<3+N7.#k.xX%b@rG rG [|@[|@<|@$4@vR@Eu Kv Kv $4@$4@vR@vR@Eu Eu Eu Kv &E &E u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$&E &E &E &E &E &E &E &E Nt%Nt%u1$u1$&E Kv Kv Eu &E &E &E &E &E &E &E &E vR@vR@vR@vR@Eu Eu Eu Eu vR@vR@vR@vR@vR@vR@vR@vR@$4@$4@$4@$4@$4@$4@$4@$4@<|@[|@[|@[|@[|@:|@:|@:|@[|@[|@[|@[|@[|@[|@[|@[|@[|@[|@:|@_|@(|@/|@^|@^|@^|@@~ @~ @~ WA WA YA a~ dw G5@G5@ew /M 6q#SJ#;6# l&Qm@Yo@~l=IP&IP&]#*sD=qp&A/&@$;T.;a%&J&&mT=Q(&|w&u-&wV=6^&@$;PU=#$;$$;%$;&$;*$;=$;-$;;$;>$;,$;'$;)$;!$;,$;~$;{$;]$;6#;^$;/$;($;_$;:$;<$;[$;}$;|$;1$;2$;~2&>q@3$;4$;5$;6$;7$;8$;9$;0$;a$;b$;C#;c$;d$;e$;f$;g$;h$;i$;j$;]Q=k$;l$;m$;/@;GO&p+;H#;n$;o$;p$;q$;r$;r$;s$;t$;u$;v$;w$;_y=x$;P#;H7&{y=Hx=I7&ny&ny&5;*F>*R#;T#;y$;T#;y$;z$;A$;A$;Kj&'u&S#;,s&Gu=B$;&#;1w&93&V}&'6#ZC@TJ#TJ#Fa#ZC@TJ##b@f5&f5&f5&aj&aj&J`%.t#}c#bj#6q#6q#]M d1#e1#f1#ew xy xy dw ew e1#d1#/M /M 1f YA WA YA 1f a~ WA /|@^|@^|@/|@(|@_|@[|@<|@$4@u1$u1$Nt%Nt%GJ%GJ%GJ%*L%u1$u1$u1$u1$u1$u1$u1$u1$Kv Kv &E Kv Eu vR@<|@[|@:|@_|@(|@^|@WA a~ 1f kI@(7 (7 /d@O9 +L@@A@RT@RT@uR@uR@[`@b.#UE@UE@i@#i@#Z=#VE@P~#ir#N~#O~#0u#0u#ir#N~#0u#85*5N=(p=]T#k`&1g @p=/p=/p={t {t 6U%@' 6L=qy=gh*Tm-^|$rg*QO-$y#KS=++;@~+os%dN=+=@eO=+=@p&=p&=):.):.n.>n.>n.;n.;n.-~@}m.}m.}m.}m.-~@-~@;n.;n.", "pD&M7.l5+%0+Zl@N7.V^$N7.pD&N7.pD&_r+b #O7.O7.#9.PI.Hu+PI.cp.[3+cp.#9.cp.cp.cp.cp.cp.cp.cp.cp.s[.QI.4I%$;&91+s[.QI.4I%QI.QI.QI.QI.QI.QI.QI.QI.M7.M7.M7.M7.M7.M7.%0+%0+N7.N7.N7.N7.N7.N7.N7.N7.$B#$B#$B#$B#%0+%0+%0+%0+@9.%0+N7.N7.M7.N7.xX%x5.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+$B#@9.@9.@9.$B#$B#$B#$B#$B#$B#$B#$B#@9.@9.@9.@9.@9.@9.@9.@9.|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+w7+w7+w7+ET&ET&w7+w7+|5+|5+w7+w7+w7+|5+vA*vA*'C+'C+6z+ET&ET&ET&bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bp.bp.bp.bp.bp.bp.bp.bp.vA*vA*vA*vA*vA*vA*vA*vA*vA*'C+'C+'C+vA*vA*vA*'C+,X@,X@,X@,X@,X@,X@,X@,X@)Z%,X@,X@'Z%'Z%DI#DI#DI#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%)Z%@9.$B#eO@'Z%DI#'Z%,X@eO@)Z%,X@,X@,X@)Z%)Z%)Z%bQ#bQ#bQ#bQ#bQ#+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+o&=o&=bQ#bQ#+9.+9.bp.+9.+9.bQ#bQ#o&=bQ#+9.:(+o&=b,+b,+j(#j(#b,+b,+o&=b,+b,+b,+b,+b,+b,+b,+b,++9.o&=j(#j(#o&=o&=j(#w{@w{@j(#b,+b,+Q+&w{@Q+&b,+bQ#bQ#o&=b,+b,+j(#Q+&Q+&w{@w{@Q+&Q+&j(#b,+b,+o&=b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,++9.bQ#bQ#o&=b,+b,+j(#j(#b,+b,+b,+b,+b,+b,+b,+p!#d3+ho=$c-'m*yE#w{@0J*}d.R#.@:+o&=p!#DI#^n#Ak=VF+C$;D$;E$;F$;G$;ZX@^|#[Q#H$;I$;J$;K$;L$;Av@M$;7>#eS-Q_-T3 T3 8>#l%#*[ R3 (o i[#Zp 4' b.#uR@bP@RT@RT@RT@.9 +L@ 9 /d@]|@]|@;! ;! Y:@+~ t! r[@>b@>b@[|@[|@<|@$4@$4@vR@Eu Eu $4@$4@vR@vR@Eu Eu Eu Kv &E &E u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$&E &E &E &E &E &E &E &E Nt%u1$u1$&E Kv Kv Eu Eu &E &E &E &E &E &E &E &E vR@vR@vR@vR@Eu Eu Eu Eu vR@vR@vR@vR@vR@vR@vR@vR@$4@$4@$4@$4@$4@$4@$4@$4@<|@<|@<|@[|@:|@:|@_|@_|@:|@:|@:|@:|@:|@:|@:|@:|@:|@:|@_|@(|@(|@/|@^|@^|@^|@^|@@~ @~ WA WA WA WA Lz 1r@=p@ew /M bj#LH#Z+*Y+*m`&iR&]#*s *s *]#*sD=yy=N$;X.;pw@Y.;V.;,$&|w&>W=y+;BV=|w&X.;@$;Y.;O$;P$;Q$;R$;S$;T$;e$;OJ&U$;V$;W$;V$;iM=X$;iM=Y$;Z$;7#;2#;3#;`$; %;.%;+%;@%;#%;$%;5$;%%;&%;*%;=%;-%;qO=cx&;%;>%;,%;'%;)%;!%;~%;{%;m$;wL=]%;^%;/%;(%;mC=_%;:%;wO=<%;8y=[%;}%;|%;'v=1%;2%;3%;J**B3*4%;Sw=5%;6%;;s&jq&jq&B&&-v=7%;MA@)u&)u&tb*QD=Id&,t&8%;9%;*D&9%;8%;;t&,t&2A=Pw=V &a`%tt=1>&L,&0%;GY-7`%6`%P8#Cd#6`%6`%P8#Fa#wg#wg#f5&aj&aj&J`%J`%J`%bj#6q#]M d1#e1#ew ew dw xy xy dw ew f1#e1#d1#/M a~ YA WA YA a~ a~ @~ /|@^|@/|@(|@:|@[|@<|@$4@$4@Nt%Nt%Nt%GJ%GJ%*L%*L%*L%u1$u1$u1$u1$u1$u1$u1$u1$Kv Kv Kv Kv Eu $4@<|@[|@_|@(|@/|@@~ YA 1f kI@')#/d@/d@ 9 +L@.9 RT@bP@bP@[`@[`@[`@b.#UE@i@#Cv@j$#P~#P~#P~#ir#N~#O~#0u#0u#ir#O~#u_$qR#^T#h_*k`&+6*@p={t [n [n /p=[n Z4-rg*6L=^|$e:*Xh-qy=lI--& U^$KS=o,@a%;{U=D0@Q/@dN=+=@^^@^^@):.):.S%~h&~h&{h&0, &, &, Av&0, {h&{h&0, Av&ZQ.ZQ.Av&'W+'W+B#@!D+;n.-~@]*=]*=}m.}m.}m.-~@-~@;n.", "d1*l5+4B&$y#Wh@pD&q[*V^$d1*pD&B2*pD&q[*b #b ##9.PI.Hu+PI.cp.[3+cp.#9.cp.cp.cp.cp.cp.cp.cp.cp.v7+91+$;&$;&91+91+$;&l=&91+91+91+91+91+91+91+91+N7.N7.M7.M7.M7.%0+%0+%0+M7.N7.N7._r+_r+N7.N7.M7.M7.M7.%0+%0+%0+%0+%0+%0+@9.%0+N7.M7.%0+$B#M7._r+M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#@9.@9.@9.@9.@9.@9.@9.@9.|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+w7+w7+w7+ET&ET&6z+w7+|5+w7+ET&6z+ET&|5+ET&ET&ET&ET&6z+6z+6z+6z++9.+9.+9.+9.+9.+9.+9.+9.bp.bp.bp.bp.bp.bp.bp.bp.'C+'C+'C+'C+'C+'C+'C+'C+|r%'C+6z+'C+vA*|r%vA*6z+)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%,X@'Z%DI#DI#DI#DI#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%)Z%eO@)Z%'Z%DI#'Z%)Z%eO@,X@DI#DI#,X@)Z%)Z%,X@bp.+9.bQ#bQ#o&=bQ#+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#j(#b,+o&=bQ#+9.:(+:(+,H.o&=bQ#bp.+9.o&=b,+o&=+9.bQ#o&=b,+b,+b,+b,+o&=bQ#j(#j(#j(#j(#j(#j(#j(#j(#+9.o&=j(#j(#o&=o&=j(#w{@Q+&b,+o&=b,+Q+&Q+&j(#o&=o&=o&=b,+b,+b,+b,+j(#j(#j(#j(#j(#j(#b,+b,+b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+j(#j(#b,+b,+o&=bQ#bQ#bQ#bQ#o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+p!#l1+ho=$c-$c-qK#p!#7&+@:+oN*@:+o&=j(#p!# W=y}*b%;c%;d%;e%;f%;g%;h%;i%;j%;k%;l%;m%;n%;o%;VO=5j=p%;9>#Mh t4 T3 8>#l%#*[ R3 @|#kx i[#S} UE@[`@bP@RT@RT@@A@.9 +L@O9 9 /d@(7 ]|@;! Y:@W:@+~ X:@r[@r[@:|@[|@[|@<|@$4@vR@Eu Eu vR@vR@Eu Eu Eu Kv Kv Kv &E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%&E &E &E &E &E &E &E &E &E &E &E Kv Kv Kv Kv Kv &E &E &E &E &E &E &E &E Eu Eu Eu Eu vR@vR@vR@vR@vR@vR@vR@vR@vR@vR@vR@vR@$4@$4@$4@$4@$4@$4@$4@$4@vR@$4@$4@<|@[|@:|@:|@_|@_|@_|@_|@_|@_|@_|@_|@_|@_|@_|@(|@(|@/|@/|@^|@^|@^|@@~ WA YA YA WA @~ @~ LZ$W~#1r@ew /M bj#MH# l&Yo@;G=jR&LP&s *s *]#*Du=4@;yk&>$&`.;z+;yk&q%;}V=l[**Y-XX-cY-z+;W.;>$&|`-r%;s%;KC&t%;u%;v%;w%;x%;y%;#m&z%;z%;A%;A%;#m&A%;iM=B%;C%;d$;D%;E%;F%;w#;G%;H%;I%;J%;K%;L%;M%;N%;O%;0U=P%;Q%;3Z-R%;IU=!.;S%;0U=T%;Ay=U%;9B=V%;U%;W%;X%;Y%;Z%;}<&`%;gl& &;.&;+&;@&;#&;$&;#&;%&;&&;*&;+u==&;8x=9`%jq&Px&-v=7%;U &MA@2A=Id&Id&>t&*D&-&;;&;>&;*D&,&;,&;>t&`E=Fu=d5&xg#b`%GY-V}&0%;GY-F-&'t=6`%'t=nq&Jw&6`%ZC@f5&aj&J`%J`%J`%aj&f5&f5&bj#6q#/M e1#ew dw xy xy Lz xy xy dw ew ew f1#f1#a~ YA WA YA 1f a~ WA /|@/|@(|@:|@<|@$4@vR@vR@vR@u1$u1$Nt%Nt%GJ%GJ%GJ%*L%u1$u1$u1$u1$u1$u1$u1$u1$Eu Eu Kv Eu vR@$4@[|@:|@/|@/|@@~ YA 1f kI@B_#B_# 9 9 O9 .9 @A@RT@bP@uR@b.#b.#b.#UE@i@#j$#Y=#Z=#ir#ir#P~#P~#ir#N~#O~#0u#N~#0u#tq=(X%S2*0Q=k`&+6*{t /p=6U%6U%6U%Z4-t|*d:*gh*py=ce-`q qy=Tr R]$c#.({@a%;1r%1r%*e@+=@Q/@dN=^^@^^@):.):.S%~h&~h&{h&{h&0, &, &, Av&&, {h&~h&{h&&, Av&&, 0, Y@$'W+B#@>n.-~@}m.]*=]*=]*=}m.}m.}m.-~@-~@", "41.Wh@XN.Ak=31.d1*ng Vb@&R+d1*n2.B2*n2.d1*q[*j}+PI.Hu+PI.cp.[3+cp.#9.PI.PI.PI.PI.PI.PI.PI.PI.91+$;&4I%$;&91+s[.91+$;&91+91+91+91+91+91+91+91+N7.N7.N7.M7.%0+%0+%0+$B#%0+M7._r+xX%xX%_r+M7.%0+_r+_r+N7.N7.M7.%0+%0+$B#$B#%0+M7.%0+@9.eO@@9.%0+M7.M7.M7.M7.M7.M7.M7.M7.$B#$B#$B#$B#%0+%0+%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#@9.@9.@9.@9.@9.@9.@9.@9.w7+w7+w7+w7+w7+w7+w7+w7+|5+|5+|5+w7+w7+w7+ET&ET&'C+ET&|5+w7+'C+vA*6z+w7+[3+|5+|5+w7+ET&6z+6z+'C++9.+9.+9.+9.+9.+9.+9.+9.bp.bp.bp.bp.bp.bp.bp.bp.6z+6z+6z+6z+6z+6z+6z+6z+|r%'C+ET&6z+|r%Gu+vA*6z+,X@,X@,X@,X@,X@,X@,X@,X@)Z%,X@'Z%p!#p!#p!#DI#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%p!#'Z%,X@,X@DI#DI#'Z%)Z%eO@'Z%2p%p!#'Z%)Z%,X@DI#,H.:(++9.o&=o&=o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+b,+b,+o&=bQ#+9.+9.+9.j(#bQ#:(+bp.o&=Q+&Q+&j(#+9.bQ#o&=o&=o&=o&=bQ#+9.b,+b,+b,+b,+b,+b,+b,+b,++9.o&=j(#j(#o&=o&=j(#w{@j(#o&=bQ#bQ#b,+j(#b,+bQ#j(#j(#b,+b,+b,+b,+o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=bQ#o&=j(#Q+&Q+&j(#o&=bQ#b,+b,+b,+b,+b,+o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+p!#T--ho=2r%6;@2p%p!#@:+}d.oN*@:+o&=Q+&2p%R]$]Z@1r%'&;)&;^q&!&;$0#~&;{&;]&;^&;/&;(&;_&; X-PB=>4*Ni={}*6o=Q_-g5 VO-VO-t4 f5 :u 7J@(o Zp /0#'p bP@RT@.9 .9 .9 +L@O9 O9 9 9 (7 ]|@;! Y:@+~ t! X:@r[@:|@:|@[|@<|@$4@vR@vR@Eu Eu Eu Kv Kv &E &E &E &E &E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%&E &E &E &E &E &E &E &E Eu Eu Kv Kv Kv Kv &E &E &E &E &E &E &E &E &E &E Kv Kv Kv Eu vR@$4@$4@$4@vR@vR@vR@vR@vR@vR@vR@vR@$4@$4@$4@$4@$4@$4@$4@$4@Eu Eu vR@$4@<|@[|@:|@:|@_|@_|@_|@_|@_|@_|@_|@_|@(|@(|@(|@/|@/|@/|@^|@^|@@~ WA YA a~ a~ YA @~ ^|@LZ$1r@1r@ew /M bj#MH# l&;G=HY%jR&LP&s *IP&#T&Cu=;v=:&;=]*mw@4`-q%;!W= +;<&;[&;KT= +;u0*mw@4`-1`-}&;|&;1&;2&;3&;2&;3&;aT=ZS=4&;ZS=5&;6&;7&;8&;9&;0&;a&;b&;y%;c&;d&;e&;f&;]N=g&;h&;i&;j&;k&;l&;m&;d<&n&;o&;p&;q&;r&;Ox=7u=s&;*k&t&;u&;v&;*k&w&;x&;JN=XT=hT=KN=y&;z&;A&;B&;C&;a%&Y.;Ck&=u&B&&Qw=B&&kp&>-*>-*kp&Qw=B&&B&&6;*7%;7%;D&;QD=>t&,t&*D&-D&E&;;q==D&>&;SB&Jj&,t&tb*MA@e4&xg#Dk&%)&%)&NN=L,&T &'t=6`%Jw&nq&nq&6`%ZC@.t#}c#[c#[c#}c#J`%f5&wg# t#6q#d1#f1#dw xy xy xy Lz xy xy xy xy xy xy xy 1f a~ YA a~ 1f 1f WA ^|@/|@_|@[|@$4@Eu Eu Eu Eu u1$u1$u1$Nt%Nt%Nt%GJ%GJ%u1$u1$u1$u1$u1$u1$u1$u1$Eu Eu Eu Eu vR@<|@[|@:|@^|@^|@WA a~ kI@')#QT@QT@ 9 O9 +L@.9 RT@bP@uR@[`@i@#i@#i@#i@#j$#Y=#VE@ir#ir#ir#P~#VE@VE@ir#N~#O~#0u#u_$qR#^T#h_*k`&k`&+6*{t [n 0C=0C=Z4-6L=Ra-lI-|x=py=`q lI-e:*F&;VV#$U a%;{U=1r%G&;*e@dN=Q/@D0@9<@9<@n.>n.;n.c,=]*=-~@-~@c2=c2=}m.>n.Av&ZQ.Bv&Bv&Bv&Bv&ZQ.Av&8P.Bv&Av&Av&Bv&Bv&Av&0, &, &, Av&Av&Av&Av&ZQ.ZQ.Bv&Av&0, 0, ZQ.ZQ.&, {h&`b&!D+;n.}m.]*=]*=}m.}m.]*=]*=}m.}m.}m.-~@", "d1*Wh@Ak=Ak=Wh@d1*GY*EY#GY*d1*B2*Wh@Wh@B2*d1*j}+PI.Hu+PI.cp.[3+cp.#9.PI.PI.PI.PI.PI.PI.PI.PI.4I%l=&xx.4I%s[.Rz.v7+s[.91+91+91+91+91+91+91+cp.N7.pD&N7.M7.%0+%0+$B#$B#%0+M7._r+xX%xX%_r+M7.%0+F6.O7.xX%_r+M7.%0+$B#$B#$B#M7.M7.%0+eO@R]$)Z%y}*Zl@Zl@Zl@Zl@Zl@Zl@Zl@M7.@9.@9.@9.$B#%0+M7.M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#@9.@9.@9.@9.@9.@9.@9.@9.w7+w7+w7+w7+w7+w7+w7+w7+|5+|5+|5+w7+w7+w7+ET&ET&|r%6z+w7+ET&vA*|r%'C+w7+#9.cp.[3+|5+w7+6z+'C+'C+)Z%)Z%bp.)Z%bp.)Z%bp.)Z%bp.)Z%bp.)Z%bp.)Z%bp.bp.k<.k<.k<.k<.k<.k<.k<.k<.{4%*T#k<.av#gm#{4%8&+k<.DI#DI#DI#DI#DI#DI#DI#DI#)Z%,X@DI#p!#2p%p!#DI#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%qK#p!#'Z%'Z%DI#p!#'Z%)Z%)Z%DI#qK#2p%'Z%,X@'Z%p!#q3.,H.+9.o&=b,+b,+o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+b,+b,+b,+b,+b,+b,+b,+Q+&bQ#,H.:(+o&=w{@CI#CI#bp.+9.bQ#bQ#bQ#bQ#+9.bp.o&=o&=o&=o&=o&=o&=o&=o&=+9.o&=j(#j(#o&=o&=j(#w{@b,+bQ#+9.bQ#b,+b,+o&=+9.Q+&Q+&j(#b,+b,+o&=bQ#bQ#+9.+9.bQ#bQ#o&=b,+b,+j(#o&=o&=o&=o&=o&=o&=o&=o&=bQ#o&=j(#Q+&Q+&j(#o&=bQ#w{@w{@Q+&Q+&j(#b,+b,+o&=b,+b,+b,+b,+b,+b,+b,+p!#l1+aM.6;@YT#2p%Q+&CI#R#.oN*7&+b,+Q+&qK#DI#DI#]q%H&;}4#I&;$0#J&;K&;L&;M&;N&;O&;P&;WJ&Q&;l%;bH=D~#+p-c@#:<-_<-Mh 86-8>#@l ) 7J@[]#Zp 4' 'p :} ,p .9 7, +L@+L@+L@+L@O9 O9 (7 (7 ]|@Y:@W:@t! X:@(|@:|@:|@[|@<|@$4@$4@vR@vR@Kv Kv Kv &E &E u1$u1$u1$&E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%&E &E &E &E &E &E &E &E vR@vR@Eu Eu Kv &E &E u1$&E &E &E &E &E &E &E &E u1$&E Kv Eu vR@$4@<|@[|@vR@vR@vR@vR@vR@vR@vR@vR@$4@$4@$4@$4@$4@$4@$4@$4@Kv Kv Eu vR@$4@<|@[|@:|@(|@(|@(|@(|@(|@(|@(|@(|@(|@(|@/|@/|@/|@/|@^|@^|@WA YA a~ 1f 1f YA WA @~ LZ$1r@=p@ew /M bj#MH# l&;G=HY%jR&LP&s *IP&~l= F=Pw=F>*5;*R#;1C=1C=R#;R#;xz&v8&,u&1C=;v=5;*1C= +;R&;5Z-O$;S&;T&;k>*U&;RT=n+;V&;W&;X&;Y&;W&;Z&; T=`&; *;pO=.*;[^&+*;@*;#*;$*;%*;&*;ZH&**;=*;-*;zP=;*;>*;,*;XG&'*;)*;!*;hi&+y='*;~*;~*;{*;zJ&]*;yt=^*;Qx=/*;^*;(*;_*;c ;:*;<*;}6&2r&t8&]%%b%*]%%-v=t~*uo&[*;t~*Qw=B&&}*;|*;7%;1*;2*;IN#3*;Yt=9+&HG=4*;5*;QB&-D&Jj&:v&'t&3*;V &e4&09&R8#09&C/&DV=6*;7`%6`%6`%'t=nq&Jw&Cd#TJ#;f#j[#j[#j[#;f#.t#aj&wg# t#6q#d1#ew xy Lz Lz Lz xy Lz Lz Lz Lz Lz LZ$LZ$kI@a~ YA a~ kI@kI@YA ^|@(|@_|@<|@vR@Kv Kv Eu Eu &E &E &E u1$u1$Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$Eu Eu Eu Eu vR@<|@[|@:|@^|@@~ WA a~ kI@B_#QT@!)#O9 O9 +L@@A@RT@uR@[`@[`@Cv@Cv@i@#Cv@j$#Z=#ir#N~#ir#P~#'d@Z=#'d@P~#Rm@O~#Sm@85*tr=(p=l`&k`&rp=k`&{t [n 0C=@' b:*/|$zQ-|x=lI-qy=lI-ce-u1*DI#Z:.U^$*e@N|@*e@{z&D0@D0@C{@H8@9<@9<@S%>n.}m.}m.;n.!D+!D+>n.(b+}m.;n.-~@]*=c2=-~@!D+Av&ZQ.B9.8P.8P.B9.ZQ.Av&4p=Bv&&, &, ZQ.Bv&ZQ.Av&Bv&Bv&Bv&Bv&Bv&Bv&Bv&Bv&4p=Bv&&, Av&Bv&B9.Av&{h&}m._e.(b+ur&(b+_e.}m.b@rG tG -! }g }g -E -E -E }g }g }g *E *E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E &E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$$4@$4@$4@$4@$4@vR@vR@vR@sG sG sG sG sG sG sG sG tG tG tG tG tG tG tG tG $4@$4@$4@$4@$4@$4@$4@$4@[|@[|@:|@:|@_|@_|@(|@(|@_|@_|@(|@/|@/|@^|@@~ @~ YA YA WA WA @~ @~ ^|@^|@WA YA 1f ')#QT@w! h$#'d@,d@_f@.Y-Pk@Pk@tr=_f@,d@Cu=2A=V &6r&Zt=Zt=Zt=d5&e4&d5&d5&d4&e4&d4&V &2A=2y&H`-e ;i*;[K&C&;j*;k*;l*;m*;n*;o+;o*;8U=p*;9U=q*;q*;_v=.T=hT=NO=nC=r*;O%;2P=s*;t*;u*;v*;w*;0U=0x=2>&x*;y*;z*;A*;B*;MP=C*;~*;3#*D*;~B=E*;F*;G*;7!&ax=H*;I*;^y=J*;K*;s&*sT=0`%t8&5t=~t=L*;M*;N*;1*;O*;P*;Q*;U &7%;R*;Ka*==&}q=S*;$h@6C=h$#{Y@:f@wh&Kj&A$;T*;T*;xz&xz&%7&xz&xz&%7&*t&WB=3r&03&u8&6`%Qm@ l&O8#OH#SJ#LH#OH#]M d1#ew dw f1#d1#d1#e1#e1#f1#xy LZ$=p@=p@G5@G5@LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$1f YA @~ @~ WA WA ^|@_|@:|@<|@vR@&E u1$Nt%u1$u1$&E &E &E u1$Nt%Nt%GJ%GJ%Nt%Nt%Nt%u1$u1$u1$&E &E Kv &E &E Kv vR@[|@(|@/|@WA YA a~ kI@')#QT@!)#))#.9 .9 RT@bP@[`@b.#i@#i@#RT@b.#C&#Z=#VE@VE@P~#N~# l&Qm@Ao& l&6`%;6#Jw&Qm@G-&;G=U*;Qk@V*;s *A&&hR&M$;+)#+)#W*;aC=aN=VO=@F=MQ=8V-+W-X*;:^.w.@w.@.9.<(+C!@p&=p&=p&=^^@):.):.S%&, ZQ.0, %' %' Av&Y*;.==3P cl.PN.PN.3P ==)A&3P 3P 3P 3P 3P 3P 3P ZQ.17*[f.`%@,].2.+u!=17*d #U*@HV.Z*;>]...=23+", "8v.VW.8v.PI.PI.Hu+VW.cp.cp.cp.cp.cp.cp.cp.cp.PI.PI.PI.PI.PI.PI.PI.PI.cp.cp.cp.cp.cp.[3+[3+[3+xX%_r+M7.%0+%0+M7._r+xX%_r+N7.N7.N7.N7.M7.M7.Zl@aq.{b+{b+{b+aq.aq.aq.aq.#9.cp.s[.v7+v7+91+6R@Ay.6R@6R@QI.QI.91+91+[3+[3+(s.(s.(s.(s.ph#ph#ph#ph#J3.J3.J3.J3.J3.J3.4B&4B&^n#$y#M7.N7.N7.M7.$B#@9.[3+w7+ET&ET&|5+[3+|5+ET&w7+w7+w7+w7+w7+w7+w7+w7+ym.bv#6' B, 6' ym.(s.{t.ym.ym.ym.ym.ym.ym.ym.ym.bv#bv#bv#bv#bv#bv#bv#bv#ns%B, 6' 6' 6' B, FI#j4@FI#ns%B, 6' 6' B, ns%FI#6' 6' 6' 6' 6' 6' 6' 6z+m;+Hq=^1#Hq=^1#Hq=^1#Hq=:1+9*;`*;Hq=`*;8*;1J=ms#+9.%U*%U*J7.g6@g6@n4@%U*J7.J7.n4@n4@n4@n4@c3+c3+'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%DI#DI#DI#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%DI#DI#DI#DI#DI#DI#DI#DI#:(++9.o&=bQ#bp.:(++9.bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.o&=o&=o&=o&=o&=o&=o&=o&=j(#b,+o&=bQ#bQ#o&=b,+j(#o&=o&=o&=o&=o&=o&=o&=o&=+9.o&=b,+b,+bQ#+9.bQ#b,+o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+j(#j(#j(#j(#Q+&Q+&Q+&Q+&+9.bQ#o&=o&=j(#j(#Q+&w{@j(#j(#j(#j(#b,+b,+b,+b,+j(#j(#j(#j(#j(#j(#j(#j(#b,+b,+b,+b,+b,+b,+b,+b,+Q+&b,+o&=b,+Q+&Q+&j(#o&=b,+j(#w{@CI#S`%CI#w{@Q+&&r=S`%CI#Q+&Q+&Q+&w{@k1+*e@ =;.=;ys&+=;@=;1l*#=;$=;i ;%=;&=; a+*=;==;fy#D3-iA-(<-{C@Ry-Ry-g5 =o=8(-ym=s4 ub t[ Vr 7v `3 #, d2 Q1 (1 +' /,@/,@(,@(7 ]|@YA @~ ^|@(|@-8@:|@_|@r[@>b@rG sG -! -! -E -E -E -E }g }g }g *E *E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E &E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$vR@vR@vR@vR@vR@vR@vR@$4@tG tG tG tG tG tG tG tG tG tG tG tG tG tG tG tG $4@$4@$4@$4@$4@$4@$4@$4@[|@[|@:|@:|@_|@_|@(|@(|@_|@(|@(|@/|@^|@@~ @~ WA YA YA WA WA @~ @~ ^|@^|@@~ YA a~ a~ kI@))# p@'d@5`%Sm@%h@Pl&Pk@tr=rR#Dt=Gx=Ao&'t=Cd#Cd#P8#P8#P8#6`%'t=nq&Jw&Jw&nq&&h&Pw=}d&-=;X.;+&;sv=.&;;=;]s@l*;l*;>=;,=;P.;P.;'=;)=;[P=!=;[P=~:&~=;+)&{=;1Q=$$;]=;]=;^=;Xp@*h*Xp@sv=5u=/=;(=;_=;{#*:=;,*;{#*<=;[=;3#*}=;}=;|=;1=;2=;t&;3=;Rw=8z=9x=4=;5=;jq&6=;70*70*M*;:X%L*;/f@70*}*;7=;8=;9=;R*;1*;4C=U &IN#Du=p(*hR&Pk@MH#[`@zg#d5&%7&xz&,u&'s&'s&,u&,u&%7&%7&%7&%7&%7&%7&xz&e4&6`%Qm@Qm@zg#SJ#LH#MH#OH#6q#d1#ew dw ew e1#f1#ew f1#dw Lz LZ$G5@G5@LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$kI@YA @~ @~ WA WA ^|@(|@:|@<|@vR@&E u1$Nt%u1$u1$&E &E &E u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$&E &E &E Kv Kv Kv Eu $4@:|@(|@^|@YA YA a~ 1f ')#B_#QT@QT@@A@RT@bP@uR@[`@b.#UE@i@#uR@i@#C&#Z=#Z=#Z=#P~#ir# l&Ao&Ao&Jw&6`%6`%Jw&G-&Gx=Cu=/I&0=;V*;a=;A&&E.*b=;7>#+)#,G=GD=:A=fE=@F=[B=HA=I_-c=;:^+JD=cX-a,+<(+<(+.9..9..9.):.):.):.S%%' &, 4p=3P 3P cl.PN.cl.3P ==)A&3P 3P 3P 3P .==.==.==Av&..=[f.[f.[f.x{+x{+x{+OP*OP*u!=>].u`.x{+US+", "Hu+VW.8v.PI.#9.Hu+8v.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.[3+[3+[3+cp.cp.cp.cp.cp._r+N7.N7.M7.M7.N7.N7._r+M7.M7.M7.M7.N7.N7.N7.pD&aq.{b+{b+{b+aq.aq.aq.aq.PI.#9.91+s[.s[.s[.r3.r3.r3.r3.91+s[.s[.s[.|5+|5+(s.(s.(s.(s.ph#ph#ph#ph#J3.J3.J3.J3.J3.J3.4B&4B&^n#$y#$B#%0+%0+$B#$B#@9.w7+ET&ET&|5+cp.cp.w7+'C+|5+|5+|5+|5+|5+|5+|5+|5+bv#bv#ym.ym.ym.(s.(s.(s.6' 6' 6' 6' 6' 6' 6' 6' bv#bv#bv#bv#bv#bv#bv#bv#FI#ns%B, 6' 6' 6' B, B, B, B, 6' bv#bv#6' B, B, B, B, B, B, B, B, B, 'C+m;+m;+Hq=m;+Hq=m;+Hq=m;+9*;m;+Hq=:m%Hq=]9#8*;Sp#bp.eO@eO@,X@p!#2p%DI#,X@'Z%'Z%,X@,X@,X@,X@)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%,X@,X@'Z%DI#DI#p!#p!#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%+9.bQ#b,+o&=+9.bp.bQ#b,++9.+9.bQ#bQ#bQ#bQ#o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=bQ#+9.+9.bQ#o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=+9.o&=b,+b,+bQ#+9.bQ#b,+j(#j(#j(#j(#j(#j(#j(#j(#b,+b,+b,+b,+b,+b,+b,+b,+bQ#bQ#o&=b,+j(#Q+&Q+&w{@bQ#bQ#o&=b,+b,+j(#Q+&Q+&o&=o&=o&=o&=b,+b,+b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+j(#o&=bQ#bQ#b,+j(#b,+bQ#o&=b,+j(#Q+&w{@w{@Q+&Q+&sX%S`%CI#w{@Q+&w{@w{@k1++=@d=;Jt&ys&Kt&e=;f=;g=;_`@h=;i=;Es&j=;fy#k=;l=;Xx-#i-$i-m=;%i-%i-Q_-v4 G[*8(- ) kj#Yk e5 Vr 7v #, d2 *! Q1 7, +' /,@/,@;! ;! WA @~ ^|@/|@;8@(|@:|@>b@>b@rG sG sG tG tG -E -E -E }g }g }g *E *E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E &E &E &E &E &E &E &E &E Kv Kv Kv Kv Kv Kv Kv Kv u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Eu Eu vR@$4@$4@-! -! -! -! -! -! -! -! tG tG tG tG tG tG tG tG $4@$4@$4@$4@$4@$4@$4@$4@[|@[|@:|@:|@_|@_|@(|@(|@_|@(|@/|@^|@@~ WA WA YA YA YA WA WA @~ @~ ^|@^|@WA WA WA WA a~ !)# p@'d@5`%Sm@rR#.Y-tr=%h@_f@Dt=Jw&6`%P8#TJ##b@Ic&#b@TJ#'t=nq&G-&Gx=Gx= F=.F=|*;+I=Gu=`.;Z.;uz&n=;;=;Ww=A&;bu@T%;IU=o=;o=;p=;nC=H,&CP=CP=q=;rw@r=;<>&[`-d ;d ;i*;G`-JY-s=;'$&`.;)$&t=;Qw=]%%u=;5=;1>&v=; u=8u=w=;x=;y=;z=;rw=A=;B=;.z=Mx=I*;Nx=B=;u$;8u=a4&xt=6j&C=;<=;99&D=;E=;B&&F=;7=;+I=G=;Px&H=;b4&Du=M,&#T&>d@~l=T8#WE@MH#Bd#'s&v8&c`%c`%c`%c`%v8&%7&%7&xz&,u&'s&v8&v8&GL#6`%Y+*Y+*Dd#LH#MH#MH#SJ#6q#d1#ew dw dw ew xy LZ$xy Lz LZ$G5@G5@LZ$Lz Lz xy xy xy xy xy xy xy xy kI@a~ WA WA YA YA ^|@(|@[|@<|@vR@Kv &E u1$u1$u1$&E &E &E &E u1$u1$u1$Nt%Nt%Nt%u1$u1$&E &E &E Kv Eu Eu Eu vR@<|@_|@/|@^|@a~ a~ a~ 1f kI@kI@')#')#bP@uR@uR@[`@[`@b.#UE@UE@UE@j$#Z=#VE@Z=#Y=#VE@P~#FN#Rm@FN#:f@Si@'d@Rm@Sm@Dt=.Y-U8 p(*l`&Um@GN#T8 I=;J=;rF=Av@qK=qK=fE=HD=f3*sU=K=;N7+^(-dO@~Z%a,+<(+<(+.9..9..9.):.):.):.S%&, B9.3P cl.cl.cl.cl.3P .== ==3P 3P 3P .== == ==)A&0, 3<@x{+US+d #';$23+[f.u`.OP*[f.u!=u!=OP*US+", "Hu+8v.Hu+PI.#9.PI.8v.PI.PI.PI.PI.PI.PI.PI.PI.#9.#9.#9.#9.#9.#9.#9.#9.|5+|5+[3+[3+cp.#9.#9.PI.N7.N7.N7.N7.N7.N7.N7.N7.$B#$B#%0+M7.M7.N7._r+V^$aq.{b+{b+{b+aq.aq.aq.aq.PI.#9.QI.91+s[.s[.$b#$b#r3.{n#s[.s[.v7+v7+w7+w7+(s.(s.(s.(s.ph#ph#ph#ph#J3.J3.J3.J3.J3.J3.4B&4B&^n#^n#@9.$B#$B#@9.@9.@9.ET&ET&w7+[3+#9.cp.ET&vA*[3+[3+[3+[3+[3+[3+[3+[3+bv#ym.(s.aq.aq.(s.ym.ym.6' 6' 6' 6' 6' 6' 6' 6' bv#bv#bv#bv#bv#bv#bv#bv#FI#ns%B, 6' 6' bv#bv#bv#B, B, B, 6' 6' B, B, B, ns%ns%ns%ns%ns%ns%ns%vA*8&+8&+m;+8&+m;+8&+m;+8&+:m%gm#:m%gm#:m%gm#m;+8&+6z+eO@ET&,X@Gu+2p%|r%,X@vA*'Z%'C+,X@6z+eO@ET&@9.eO@eO@eO@eO@eO@eO@eO@eO@@9.@9.eO@)Z%'Z%DI#p!#p!#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%+9.o&=j(#b,+bQ#+9.bQ#b,++9.+9.+9.bQ#o&=b,+b,+b,++9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#+9.+9.+9.+9.bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=+9.o&=b,+b,+bQ#+9.bQ#b,+j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#bQ#bQ#bQ#o&=o&=b,+b,+b,+bQ#o&=o&=b,+b,+j(#j(#Q+&+9.+9.bQ#bQ#o&=b,+b,+j(#o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+b,+bQ#+9.bQ#b,+b,+o&=+9.o&=o&=b,+b,+j(#j(#j(#j(#S`%S`%CI#CI#w{@w{@w{@/W%i)@Jt&d=;d=;L=;M=;N=;F2*O=;P=;@f#Q=;&=;fy#k=;R=;Gq-il-)`@$i- A@gn=Mh g5 =o=G[*f5 s4 s[ t[ e5 Vr #, #, d2 *! n| 7, +' /,@Y:@Y:@WA @~ @~ @~ ,8@^|@:|@>b@rG rG rG rG sG sG -E -E -E }g }g }g *E *E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E &E &E &E &E &E &E &E &E Kv Kv Kv Kv Kv Kv Kv Kv u1$u1$u1$u1$u1$u1$u1$u1$Nt%u1$u1$Kv Eu vR@$4@$4@-E -E -E -E -E -E -E -E sG sG sG sG sG sG sG sG <|@<|@<|@<|@<|@<|@<|@<|@[|@[|@:|@:|@_|@_|@(|@(|@(|@(|@/|@^|@WA YA a~ a~ YA YA WA WA @~ @~ ^|@^|@YA a~ YA YA 1f ))#h$#FN#Sm@Dt=_f@_f@_f@Sm@,d@Rm@Cd#P8#Fa#Ic&f5&f5&Ic&TJ#nq&G-& F=Du=Du=.F=0=;a=;+I=Hx=yk&`.;X.;uz&S=;Ww=T=;U=;V=;W=;s*;s*;t*;DQ=X=;(Q=Y=;xQ=<>&Ij@[`-:`-DR=b ;G`-Z=;#dO=.)#MG=qK=VO=SJ=;4*X*;@1*M:*^(-h;#vj&vj&<(+<(+.9..9..9.):.):.):.H.'C+jb%Gu+$0+'C+|.&vA*r3%'C+N}.ET&>H.w7+,X@,X@,X@,X@,X@,X@,X@,X@%0+$B#@9.eO@)Z%,X@'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%,X@,X@,X@,X@,X@,X@,X@,X@+9.o&=j(#b,+bQ#+9.bQ#b,++9.+9.bQ#o&=o&=b,+j(#j(#+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#bQ#bQ#+9.+9.o&=o&=o&=o&=o&=o&=o&=o&=+9.o&=b,+b,+bQ#+9.bQ#b,+j(#j(#j(#j(#j(#j(#j(#j(#Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&b,+b,+o&=o&=bQ#bQ#+9.+9.o&=o&=b,+b,+b,+b,+j(#j(#+9.+9.bQ#bQ#o&=b,+b,+j(#o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+b,+bQ#+9.bQ#b,+b,+o&=+9.o&=o&=o&=o&=b,+b,+j(#j(#S`%S`%S`%CI#CI#w{@w{@qK#D<&N|@os%os%*-;g.-=-;--;;-;1.#>-;,-;'-;[*+)-;!-;~-;(1-&x-u7-c@# A@:<-_<-7(-v4 @l g$#7J@Yk t[ vb #, #, `3 #, :} 36 +' /,@Y:@Y:@WA WA WA WA zK @~ :|@>b@>b@>b@rG rG rG rG -E -E -E }g }g }g *E *E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E &E &E &E &E &E &E &E &E Kv Kv Kv Kv Kv Kv Kv Kv u1$u1$u1$u1$u1$u1$u1$u1$Nt%u1$u1$Kv Eu vR@$4@$4@-E -E -E -E -E -E -E -E sG sG sG sG sG sG sG sG <|@<|@<|@<|@<|@<|@<|@<|@[|@[|@:|@:|@_|@_|@(|@(|@(|@/|@^|@@~ YA a~ 1f kI@YA YA WA WA @~ @~ ^|@^|@1f 1f kI@kI@B_#w! B&#Rm@_f@Dt=Sm@,d@Rm@:f@Si@Si@ZC@P8#ZC@Ic&aj&f5&TJ#6`%G-& F=@D=U*;U*;/I&0=;a=;Gu=4@;,s&4@;yk&X.;Ak&#m*{-;;=;]=;^=;]-;]-;GP=^-;$T=yQ=:`-:`-[`-[`-/-;/-;G`-KY-Z=;Z=;e ;(-;(-;(-;wY&-=;2y&>$&_-;bz&:-;<-;|w&#$;}>&(#;[-;Lu=}-;zB&|-;1-;2-;3-;Ku=`{&4-;5-;6-;7-;8-;Im&-*>-*kp&M*;D-&qs=;d@8j&@A&dB#=3##b@Ov#e5&a-;36&36&a-;a-;Ov#Ov#Ov#gj#gj#GL#GL#Ad#Cd#Qm@Y+*;6#MH#MH#LH#vg#6q#/M f1#ew ew xy G5@W~#1r@=p@=p@G5@LZ$Lz Lz Lz xy xy xy xy xy xy xy xy 1f YA @~ @~ WA @~ /|@_|@vR@vR@vR@Eu Kv &E u1$u1$&E &E &E &E &E &E Kv Kv u1$u1$&E &E &E Kv Kv Kv vR@$4@[|@_|@/|@^|@@~ WA 1f 1f 1f 1f kI@kI@kI@kI@b.#b.#UE@UE@UE@UE@UE@i@#Y=#Z=#VE@VE@Y=#C&#Z=#P~#FN#FN#FN#'d@Si@FN#Dt=.Y-.Y-U8 l`&rp=Ri@Ri@$h@Js&b-;p%;OQ=L$;@F=&D=LG='G=+W-c-;tF.*u.g|.v5.cX-vj&<(+<(+.9..9..9.):.):.):. US+US+23+23+OP*x{+[f.x{+OP*23+23+23+23+", "PI.Hu+Hu+#9.cp.#9.Hu+PI.PI.PI.PI.PI.PI.PI.PI.cp.cp.cp.cp.cp.cp.cp.cp.[3+[3+[3+cp.cp.cp.cp.cp.M7.N7.N7._r+_r+N7.N7.M7.$B#$B#%0+%0+%0+%0+M7.Zl@{t.)W+)W+)W+{t.{t.{t.{t.[3+cp.QI.QI.QI.91+{n#$b#r3.r3.91+s[.s[.s[.|5+|5+(s.(s.(s.(s.ph#ph#ph#ph#J3.J3.J3.J3.J3.J3.4B&4B&l5+$y#$B#@9.@9.$B#$B#%0+w7+ET&ET&|5+cp.cp.w7+'C+|5+|5+|5+|5+|5+|5+|5+|5+ym.ym.bv#bv#bv#6' 6' 6' 6' 6' 6' 6' 6' 6' 6' 6' bv#bv#bv#bv#bv#bv#bv#bv#bv#6' 6' B, 6' 6' bv#ym.ns%ns%FI#j4@j4@FI#ns%ns%B, B, B, B, B, B, B, B, ns%ns%vA*ns%vA*ns%vA*ns%|r%ns%vA*ns%vA*FI#Gu+%c%|.&r3%Tp*|.&t=+jb%I}+>H.+n+|.&I}+r3%I}+r3%Tp*N}.vA*'Z%'Z%'Z%'Z%'Z%'Z%'Z%@9.@9.@9.eO@)Z%,X@,X@'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%,X@,X@,X@,X@,X@,X@,X@,X@+9.bQ#b,+o&=+9.bp.bQ#b,+o&=o&=o&=o&=b,+b,+b,+b,+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.bQ#o&=o&=o&=o&=bQ#+9.o&=o&=o&=o&=o&=o&=o&=o&=+9.o&=b,+b,+bQ#+9.bQ#b,+j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#b,+o&=bQ#+9.+9.bp.b,+b,+b,+b,+b,+b,+b,+b,+o&=o&=o&=o&=b,+b,+b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+j(#o&=bQ#bQ#b,+j(#b,+bQ#b,+o&=o&=o&=o&=b,+j(#Q+&CI#CI#S`%S`%S`%w{@Q+&qK#n4@Yj@os%d-;^0+e-;f-;g-;23*h-;i-;/.;j-;k-;l-;m-;%x-zk-2m*#i-Kh Hq-U=#x[-g5 7(-T3 f5 :u []#Yk t[ `3 `3 7v 7v <} ,p 7, /,@;! ;! YA WA WA WA zK @~ (|@r[@r[@>b@>b@rG rG sG -E -E -E }g }g }g *E *E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E &E &E &E &E &E &E &E &E Kv Kv Kv Kv Kv Kv Kv Kv u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Eu Eu vR@$4@$4@-! -! -! -! -! -! -! -! rG rG rG rG rG rG rG rG [|@[|@[|@[|@[|@[|@[|@[|@[|@[|@:|@:|@_|@_|@(|@(|@(|@/|@^|@WA a~ 1f ')#')#YA YA WA WA @~ @~ ^|@^|@a~ kI@')#QT@!)#{Y@B&#FN#Dt=,d@Rm@'d@gt@B&#$b@$b@Fa#ZC@ZC@#b@f5&Ic&Cd#G-& F=@D=/I&/I&U*;.F=/I&n-;26&$7&03&ny& +;,$&o-;!l*p-;q-;r-;]-;]-;]-;s-;1Z-EQ=yQ=:`-:`-:`-:`-t-;t-;:V=KY-Z=;KY-LY-sv=sv=sv=zV=rv=u-;AV=j(.v-;_W&-Y-w-;x-;y-;z-;JZ-0U=^*;A-;1-;uH=B-;yB&C-;D-;Xk&E-;53&F-;7-;1r&G-;DS=H-;I-;}6&aU=Hu=c5&jq&6u=*&;4j&J-;lm&@A&)L&}Q%K-;+H@VC&.p@e5&a-;36&w8&w8&36&36&a-;e5&e5&Ov#gj#GL#Ad#Fa#ZC@ l&Qm@;6#MH#LH#SJ#bj#6q#/M e1#f1#f1#dw LZ$W~#W~#1r@G5@LZ$LZ$LZ$LZ$LZ$xy xy xy xy xy xy xy xy YA @~ /|@/|@^|@^|@(|@:|@Eu Eu vR@vR@Eu Kv &E u1$&E &E &E &E Kv Kv Kv Eu u1$&E &E &E Kv Kv Eu Eu $4@<|@:|@/|@@~ WA WA WA 1f 1f kI@kI@')#B_#B_#B_#b.#b.#UE@i@#i@#Cv@Cv@j$#Y=#VE@VE@Z=#Y=#Y=#VE@N~#Rm@Rm@FN#:f@:f@5`%%h@Pk@Pl&Nk@rp=GN#GN#GN#$h@Js&5B&AI=%I=dR=HD=GD=LG=VO=3z=d3*-Z+1w.):.sQ@k]#a,+<(+<(+.9..9..9.):.):.):.b@sG sG tG -E -E -E }g }g }g *E *E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E &E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$vR@vR@vR@vR@vR@vR@vR@$4@tG tG tG tG tG tG tG tG rG rG rG rG rG rG rG rG [|@[|@[|@[|@[|@[|@[|@[|@[|@[|@:|@:|@_|@_|@(|@(|@(|@/|@@~ YA 1f kI@B_#QT@YA YA WA WA @~ @~ ^|@^|@@~ a~ B_#!)#+W@{Y@$b@Si@:f@'d@gt@h$# p@h$#$b@B&#Ic&TJ#Fa##b@f5&#b@Jw&Du=@D=U*;n-;n-;.F=Du=Cu=Du=d5&e4&xz&03&$7&ny&z+;:-;~v&M-;C&;C&;N-;S&;]=;DQ=Ij@e<&e<&J,&}>&}>&}>&}>&O-;e%&Y.;Y.;+&;n=;zk&UE=P-;Q-;IJ&R-;S-;e^*T-;U-;V-;W-;X-;U=;u*;Y-;oC=Z-;`-; ;;9A=LN=.;;+;;.;;Em&@;;#;;$;;%;;&;;*;;dc&=;;x-&!=&c5&-;;@U=;;;4j&PA@>;;,;;Ta&|Q%Ta&Jb@Uo@FR%ej#e5&36&w8&w8&w8&36&36&Ov#Ov#Ov#gj#gj#gj#gj##b@TJ#Zo@ l&Dd#LH#SJ#vg#]M 6q#/M d1#d1#d1#f1#Lz =p@W~#1r@G5@LZ$LZ$LZ$G5@=p@LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$WA /|@_|@_|@(|@(|@:|@<|@Kv Kv Eu vR@vR@Kv &E u1$&E &E &E Kv Kv Eu Eu Eu &E &E &E Kv Kv Eu Eu Eu $4@[|@_|@^|@WA YA YA YA 1f 1f kI@')#QT@!)#))#))#[`@b.#UE@i@#Cv@j$#C&#Y=#Y=#Z=#VE@Z=#Y=#Y=#ir#0u#!t !t l| .l&.l&zz$~t P}* 8 P}*ah=:X-:X-:X-ll=s|*Ni=bH=;r&n7*fE='G=&D=*D=e3*h|.43+M:*h;#sQ@~Z%T`%<(+<(+.9..9..9.):.):.):.H..l.}n&J].2P 2P 0R#gk#Ay.Ay.$;&QI.QI.91+cp.cp.(s.(s.(s.(s.ph#ph#ph#ph#J3.J3.J3.J3.J3.J3.4B&4B&V^$pD&%0+$B#$B#%0+N7._r+cp.w7+6z+6z+w7+[3+|5+w7+ET&ET&ET&ET&ET&ET&ET&ET&':+B{$DU%QU+&c%QU+DU%A{$Vl.Vl.Vl.Vl.Vl.Vl.Vl.Vl.B{$B{$B{$B{$B{$B{$B{$B{$l3 ':+B{$A{$#0+#0+A{$B{$bv#6' B, ns%ns%B, 6' bv#bv#bv#bv#bv#bv#bv#bv#bv#QF+QF+QF+QF+QF+QF+QF+QF+QF+a:@Bh.tS Bh.QF+5=+7g.PF+S}%%P%%P%&0+%P%)i+7v@R`%R`%%P%%P%&0+S}%S}%z4$vA*'Z%'Z%'Z%'Z%'Z%'Z%'Z%2p%p!#p!#p!#p!#p!#DI#DI#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%:(++9.bQ#+9.:(+,H.bp.bQ#Q+&Q+&j(#b,+b,+o&=bQ#bQ#b,+b,+b,+b,+b,+b,+b,+b,+bQ#o&=j(#Q+&Q+&j(#o&=bQ#o&=o&=o&=o&=o&=o&=o&=o&=+9.o&=b,+b,+bQ#+9.bQ#b,+o&=o&=o&=o&=o&=o&=o&=o&=bp.bp.bp.bp.bp.bp.bp.bp.bQ#bQ#o&=b,+b,+j(#Q+&Q+&b,+b,+b,+b,+b,+b,+b,+b,+w{@w{@Q+&Q+&j(#b,+b,+o&=j(#j(#j(#j(#j(#j(#j(#j(#b,+b,+b,+b,+b,+b,+b,+b,+w{@j(#b,+b,+Q+&w{@Q+&b,+Q+&j(#b,+o&=b,+j(#w{@CI#w{@CI#S`%sX%S`%CI#Q+&j(#&b=~4.YT#Yy&C<&9V-h.-}j=';;Kj=zk-5(-AG-Fq-Qy- j-`m-c2-zk-B8-On=kl-qI-6o=_<-Q_-t4 S3 R3 7J@[]#s[ `3 7v Vr Vr {1 :} 36 +' (7 (7 a~ YA WA @~ J~ ^|@@~ +~ t! r[@>b@sG tG -! -E -E -E }g }g }g *E *E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E &E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$$4@$4@$4@$4@$4@vR@vR@vR@sG sG sG sG sG sG sG sG rG rG rG rG rG rG rG rG [|@[|@[|@[|@[|@[|@[|@[|@[|@[|@:|@:|@_|@_|@(|@(|@/|@/|@@~ YA 1f ')#B_#QT@YA YA WA WA @~ @~ ^|@^|@(|@WA ')#!)#+W@XC@ p@$b@B&#h$# p@8.#h@#h$#B&#Si@f5&#b@TJ#Ic&f5&#b@nq&.F=.F=/I&0=;n-;@D=&h&Gx=Gx=FL#GL#'s&*t&3r&03&mw@);;!;;'v=C&;M-;T&;~;;{;;0U=[-;];;^;;J,&E&&E&&E&&E&&(y=/;;Y.;Y.;+&;o-;,v=,W=(;;_;;:;;<;;[;;<@;};;|;;1;;1;;2;;3;;n+;4;;mM=5;;6;;7;;8;;9;;0;;a;;b;;/z=c;;~+;d;;e;;f;;&;;g;;h;;pp&i;;)=&Hy@Jm&G*;j;;XV%WV%k;;>E&xM&l;;m;;Mm@-d@ej#e5&36&w8&w8&w8&36&36&Ad#Ad#GL#gj#gj#Ov#e5&wg#SJ#;6#Z+*zg#SJ#OH# t#/M ]M /M d1#/M /M d1#dw G5@1r@=p@G5@LZ$LZ$G5@=p@1r@LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$^|@(|@:|@:|@_|@_|@[|@$4@&E Kv Eu vR@vR@Eu &E u1$&E &E &E Kv Eu Eu vR@vR@&E &E Kv Kv Kv Eu Eu Eu <|@[|@(|@@~ YA a~ a~ YA 1f 1f ')#B_#!)#))#w! w! [`@[`@UE@i@#j$#C&#Z=#Z=#Y=#Z=#VE@Z=#Y=#Z=#N~#Ut&TE TE !t l| l| Rr LQ=TW-_u TW-Ez :X-:X-Rl=ll=KX-|6-6>#n7*WO=&D=LG=@F=Wr&d3*].[f.US+23+[f.HV.", "#9.#9.#9.#9.#9.#9.#9.[3+[3+#9.PI.PI.PI.PI.PI.cp.#9.Hu+PI.cp.[3+#9.Hu+8v.8v.Hu+Hu+#9.[3+|5+w7+@9.eO@@9._r+Vh.dD.xX%@9.%0+N7._r+N7.%0+@9.$B#{t.-J.-h -h -h fL.fL.fL.fL.g% af.~k.6g*6g*~k.4]�*]n#$b#v7+s[.91+QI.PI.PI.5!.l#@{t.(s.un.ph#{b+)W+31.31.31.31.J3.J3.4B&4B&y}*y}*@9.@9.@9.$B#$B#$B#w7+6z+6z+ET&[3+cp.[3+w7+cp.[3+[3+[3+|5+|5+w7+w7+Vl.a, a, 8H.8H.cl+cl+cl+fL.fL.fL.fL.fL.fL.fL.fL.8H.8H.8H.8H.8H.8H.8H.8H.a, 8H.8H.cl+cl+8H.8H.Vl.ym.6' FI#FI#ns%B, ns%FI#bv#bv#bv#6' 6' B, B, B, tS P9.8e.'> '> '> 8e.9e.C' p] 9e.9e.P9.P9.8e.7g.|x.g~#R`%%P%S}%5e%@g%]1%5e%5e%5e%5e%5e%5e%5e%z4$vA*'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%2p%p!#'Z%,X@,X@'Z%p!#2p%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%q3.q3.,H.:(+:(+bp.+9.+9.Q+&j(#o&=bQ#bQ#o&=j(#Q+&bQ#b,+Q+&j(#o&=bQ#b,+j(#bp.Q+&CI#b,+bQ#j(#j(#o&=j(#b,+bQ#o&=j(#Q+&b,+bQ#j(#b,+b,+o&=bQ#bQ#+9.+9.bp.bQ#b,+Q+&Q+&b,+bQ#bp.:(+bp.+9.bQ#o&=j(#Q+&Q+&bQ#Q+&b,+q3.q3.j(#CI#b,++9.b,+Q+&w{@j(#o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+b,+j(#b,+bQ#bQ#bQ#b,+Q+&w{@bp.+9.bQ#o&=o&=bQ#+9.bp.o&=o&=o&=o&=b,+j(#Q+&Q+&o&=o&=o&=b,+b,+j(#j(#j(#b,+b,+b,+b,+b,+b,+b,+b,+yE#.X+/W%{q%C<&aM.Ao=Jj=Ji=s^+n;;qW+#b 6u-WW-lX-7Z=Y}-xn-(1-2v-IH#qI-Mh x[-_<-t4 S3 z_#2k=7J@Yk e5 7v #, `3 'p <} n| 7, ]|@;! YA YA YA WA zK WA ^|@+~ t! X:@r[@rG tG -E -E -E -E -E }g }g *E *E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E &E &E &E &E &E &E &E &E Nt%Nt%Nt%u1$u1$u1$&E &E u1$&E Eu vR@vR@Eu &E u1$Kv Kv Kv Kv Kv Kv Kv Kv -E -! -! tG rG >b@>b@r[@r[@>b@rG sG sG rG >b@r[@:|@:|@:|@[|@[|@[|@[|@[|@:|@:|@:|@:|@_|@/|@^|@@~ @~ @~ WA YA 1f kI@')#')#kI@a~ WA WA YA a~ WA ^|@/|@@~ a~ B_#+W@h@#$b@B&#h$#$b@$b@$b@$b@B&#B&#B&#Ic&Fa#ZC@TJ#wg#Fa#Gx=/I&U*;U*;.F=@D= F=Ao&6`%P8#e>#{m#d4&d4&d4&)u&}d&&&;o;;Jx=:-;:-;ax=p;; &;B&;q;;D&&73&6K=}6&aU=c5&$#;{y=Hu=)$&)$&)$&7z=9=;r;;5E=s;;t;;u;;v;;w;;w;;v;;bx&bx&x;;y;;z;;^O=eT=6U=A;;B;;B;;8;;C;;D;;E;;F;;G;;~+;H;;$z=I;;CS=qT=,J=J;;x-&73&!=&K;;L;;>s&&I&WV%k;;M;;N;;M;;M;;O;;'T%~m#J`%.t#.t#.t#.t#J`%aj&J`%f5&Ic&#b@TJ##b@Ic&wg#bj#vg#OH#SJ#OH# t#]M d1#e1#ew ew f1#e1#f1#Lz =p@LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$G5@G5@G5@/|@(|@:|@<|@vR@&E u1$Nt%Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv &E &E Kv Eu vR@$4@<|@<|@_|@_|@/|@@~ WA a~ kI@kI@1f kI@')#QT@))#w! {Y@8.#uR@b.#i@#j$#C&#C&#C&#j$#VE@VE@P~#P~#ir#ir#ir#N~#:&$q4&d0&d0&d0&E8&4t=aX-&p +o=8C&_A=P;;RX-Wp NX-Ui-L$;L$;bH=GD=|J=:7.ZN=^^@^^@):..9..9..9.!Z%!Z%sQ@h;#<(+cO@].>].HV.x{+", "#9.#9.#9.#9.#9.#9.#9.cp.#9.#9.PI.PI.#9.#9.cp.[3+#9.PI.#9.[3+[3+cp.PI.PI.PI.Hu+PI.PI.cp.[3+|5+%0+@9.@9.N7.is@is@_r+@9.%0+N7._r+N7.%0+@9.$B#{t.-J.-h -h -h fL.fL.fL.fL.g% af.~k.6g*6g*~k.4]&fl+0R#6R@91+91+91+s[.[3+[3+j}+j}+aq.(s.ph#ph#ph#ph#31.31.31.31.J3.J3.4B&4B&y}*y}*@9.@9.@9.$B#$B#$B#w7+ET&6z+ET&[3+cp.[3+w7+[3+[3+[3+[3+|5+|5+w7+.l.w4.w4.a, a, 8H.8H.8H.8H.w4.w4.w4.w4.w4.w4.w4.w4.8H.8H.8H.8H.8H.8H.8H.8H.a, 8H.cl+cl+cl+cl+8H.a, Vl.6' FI#FI#ns%B, ns%FI#6' 6' 6' B, B, ns%ns%DU%uM p] 9e.8e.8e.8e.8e.8e._y P9.8e.9e.P9.p] 9e.(D.l`.+n+%P%+n+%P%+n+%P%+n+S}%WD@S}%WD@S}%WD@S}%WD@vA*'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%p!#DI#'Z%,X@,X@'Z%DI#p!#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%:(+:(+bp.bp.bp.bp.+9.+9.j(#b,+o&=bQ#bQ#o&=b,+j(#bQ#b,+Q+&j(#o&=bQ#o&=j(#bp.j(#w{@bQ#bp.o&=j(#o&=b,+bQ#+9.+9.o&=b,+o&=+9.o&=o&=o&=o&=o&=bQ#bQ#bQ#bp.bQ#b,+j(#j(#b,+bQ#bp.bQ#bQ#bQ#o&=o&=o&=o&=o&=bQ#j(#o&=,H.,H.j(#w{@b,++9.b,+Q+&w{@j(#o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+o&=o&=o&=o&=b,+j(#Q+&+9.bQ#o&=b,+b,+o&=bQ#+9.bQ#o&=o&=b,+j(#j(#j(#j(#o&=o&=o&=b,+b,+j(#j(#j(#Q+&Q+&Q+&Q+&Q+&j(#j(#j(#.X+/W%/W%qK#C<&C<&aM.Ao=a $b@sG tG -! -E -E -E }g }g *E *E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$&E &E u1$&E Eu vR@vR@Eu &E u1$Kv Kv Kv Kv Kv Kv Kv Kv -E -! -! tG sG rG >b@>b@>b@rG sG tG tG sG rG >b@[|@[|@[|@[|@[|@:|@:|@:|@_|@:|@:|@_|@_|@/|@^|@@~ WA WA YA a~ a~ 1f kI@kI@kI@a~ WA WA a~ a~ WA ^|@^|@WA 1f B_#+W@8.# p@$b@h$#h$#h$#$b@$b@$b@B&#B&#Fa#ZC@Fa#Ic&wg#P8#Du=-=&.F=.F=@D=Cu=Gx=nq&Cd#ZC@f@#{m#'t&d4&d5&MA=S;;Tw=T;;0%&U;;:-;p-;{-;ax=Mx=V;;W;;x-&)=&}6&}6&c5&X;;|6&|6&mg&mg&Y;;Gu=9=;;$&Z;;s;;`;; >;;+>;bx&@>;/w&#>;8&;$>;%>;lx=&>;*>;=>;->;;>;C;;>>;,>;'>;)>;Vd@$z=GQ=fU=!>;~>;x-&!=&}6&73&iU=Jm&vt=&I&10&p ;Ta&>E&Ta&>E&my#L&&)m#.t#}c#}c#}c#}c#.t#J`%J`%aj&f5&Ic&Ic&Ic&wg#f5&OH#SJ#LH#LH#OH#bj#/M e1#e1#f1#ew f1#e1#f1#Lz =p@LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$Lz LZ$LZ$G5@=p@=p@1r@1r@_|@:|@[|@$4@Eu &E u1$Nt%Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv &E Kv Kv Eu vR@$4@<|@<|@_|@(|@/|@@~ YA a~ kI@')#')#B_#QT@))#+W@XC@{Y@8.#[`@b.#i@#j$#C&#C&#C&#j$#VE@VE@VE@P~#P~#P~#ir#ir#%p q4&IY&/X%/X%M5$4t=Up 'e=dZ-tD&P;;{>;RX-Wp NX-Wh-JM=L$;JM=SJ=@F=J6*mh ;fl+ 8&)1.$;&QI.s[.Rz.ET&6z+(s.(s.aq.aq.{b+ph#un.ZT#J3.J3.J3.J3.31.31.Wh@Wh@y}*y}*@9.@9.@9.$B#$B#$B#|5+ET&6z+ET&|5+cp.|5+w7+[3+[3+[3+|5+|5+w7+w7+.l.fL.W_ {_ {_ {_ ;b.;b.;b.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.|x.O9.6}%6}%O9.|x.8H.':+6' ns%FI#B, 6' B, FI#B, B, B, ns%ns%FI#FI#sv%EV.({ ]_ ]_ ]_ ({ ll..s.({ ll.y{ .s.]_ Hs ({ ~I.vv+jb%t=+|.&Tp*>H.@[+.l.t=+$0+t=+$0+t=+$0+t=+$0+vA*'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%p!#DI#,X@)Z%)Z%,X@DI#p!#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%bQ#bQ#bQ#+9.+9.+9.+9.+9.o&=o&=bQ#+9.+9.bQ#o&=o&=bQ#b,+j(#b,+bQ#bQ#o&=j(#+9.j(#j(#bp.,H.+9.b,+b,+o&=+9.bp.bp.bQ#o&=bQ#bp.bQ#bQ#bQ#o&=o&=o&=o&=o&=+9.bQ#b,+j(#j(#b,+bQ#+9.b,+b,+o&=o&=o&=bQ#bQ#bQ#bQ#b,+o&=:(+:(+b,+Q+&b,+bQ#b,+Q+&Q+&b,+o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+b,+bQ#o&=b,+j(#j(#j(#j(#b,+bQ#o&=b,+b,+b,+b,+o&=bQ#+9.bQ#b,+Q+&Q+&j(#b,+o&=o&=o&=o&=b,+b,+j(#j(#j(#S`%S`%CI#CI#w{@Q+&Q+&j(#& =& =1p%(W%EI#EI#a<@/^@'H*x>%^>;/>;GI#(>;H| _>;:>;<>;c2-MC-DQ-@Y@+p-Kg F[**o=6J@VO-&[ *[ R3 s[ t[ e5 7v `3 'p 'p ,p 36 (7 (7 1f a~ a~ YA c~ WA @~ W:@W:@+~ t! r[@>b@sG -! -! -! -E -E }g }g }g =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$&E &E &E &E Kv Eu Eu Kv &E &E Kv Kv Kv Kv Kv Kv Kv Kv -E -! -! tG sG rG rG >b@sG sG tG -! -! tG sG sG $4@<|@<|@[|@:|@:|@_|@_|@_|@_|@_|@_|@(|@/|@@~ WA a~ a~ a~ a~ a~ a~ a~ a~ kI@a~ WA YA a~ 1f YA @~ WA a~ kI@B_#))#XC@8.#h@# p@ p@ p@h$#h$#$b@$b@B&#Cd#P8#Fa#Ic&Ic&6`%.F=[>;Du=Du=Cu=&h&Ao&'t=P8#Fa#9.#i$#]m#jj#wh&3u=}*;#t&Tw=cw=}>;<-;|>;1>;p-;Mx=q;;W;;P#;aU=}6&}6&Hu=3A=4@;I7&,s&,s&F>*Q*;P*;;-*ax&Z;;2>;3>;4>;OY-5>;n$;6>;{@;9v&7>;8>;X&;9>;0>;8U=9>;a>;b>;~w=pw=c>;d>;e>;f>;C-;_I=sF&np&M+;np&}6&c5&&#;$#;6=;wt=0`%A-&KR=EV=g>;)L&h>;FR%j%&i>;97#/M d1#e1#e1#d1#/M /M /M ]M 6q#bj# t# t#bj#bj#MH#MH#MH#LH#OH#6q#d1#f1#e1#f1#ew ew f1#ew Lz G5@LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$Lz LZ$G5@=p@1r@W~#X~#yK <|@$4@vR@Eu Kv &E &E u1$Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv Kv Kv Eu vR@$4@$4@<|@<|@_|@(|@/|@@~ YA 1f kI@')#!)#))#+W@w! XC@{Y@8.#8.#b.#UE@Cv@j$#C&#C&#C&#C&#Z=#Z=#Z=#VE@VE@P~#P~#P~#WE q4&/X%)7&)7&; *&p Up +o=Xp _A={>;RX-Vp ]l=zX-T^$JM=bN=j>;VO=MG=I<*+=@ =@;fl+ 8&)1.$;&QI.s[.Rz.ET&6z+6' ym.(s.aq.{b+ph#ZT#i4@J3.J3.J3.J3.31.31.Wh@Wh@y}*y}*@9.@9.@9.$B#$B#$B#|5+w7+6z+ET&|5+[3+|5+ET&[3+[3+|5+|5+w7+w7+ET&>H.I> &5 W_ W_ {_ {_ {_ ;b.O9.O9.O9.O9.O9.O9.O9.O9.|x.|x.|x.|x.|x.|x.|x.|x.|x.O9.O9.6}%6}%O9.O9.8H.':+bv#ns%ns%B, 6' B, ns%ns%ns%ns%FI#FI#j4@j4@QU+~I.({ Hs .o .o ]_ ({ .s.ll..s.y{ .s.]_ Hs ]_ xj+$0+|r%|.&'C+N}.w7+.l.|5+|.&vA*|.&vA*|.&vA*|.&vA*'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%p!#DI#,X@)Z%)Z%,X@DI#p!#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%b,+b,+b,+o&=bQ#bQ#+9.+9.bQ#bQ#+9.+9.+9.+9.bQ#bQ#bQ#o&=j(#b,+bQ#+9.o&=b,++9.j(#b,+,H.0q.bp.b,+b,+o&=bQ#bp.+9.o&=b,+bQ#bp.+9.+9.bQ#bQ#o&=b,+b,+j(#+9.bQ#o&=b,+b,+o&=bQ#+9.o&=o&=o&=o&=o&=o&=o&=o&=bQ#o&=bQ#+9.+9.o&=j(#j(#bQ#b,+Q+&j(#o&=bQ#b,+j(#b,+b,+b,+b,+b,+b,+b,+b,++9.bQ#b,+Q+&Q+&Q+&b,+o&=b,+b,+b,+b,+b,+b,+b,+b,++9.o&=j(#Q+&w{@j(#o&=bQ#o&=o&=o&=b,+b,+j(#j(#j(#S`%S`%CI#w{@w{@Q+&j(#j(#e6#e6#(W%1p%(W%EI#a<@a<@/4%mg.k>;RX*(>;l>;m>;@b n>;$5-Y}-pI-=Y=Zx-&o=4) 4) F[*9>#6J@$)#Bu=2k=7J@[]#t[ Vr `3 {1 'p :} n| 9 9 kI@1f a~ a~ c~ YA WA Y:@Y:@Y:@+~ t! r[@>b@-! -! -! -E -E -E }g }g *E *E *E *E *E *E *E *E =E =E =E =E =E =E =E =E GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%Nt%Nt%Nt%u1$u1$u1$&E &E &E &E &E Kv Kv &E &E &E Kv Kv Kv Kv Kv Kv Kv Kv -E -! -! tG tG sG sG rG tG tG tG -! -! tG tG tG vR@$4@<|@[|@:|@_|@(|@(|@_|@_|@_|@_|@(|@^|@@~ WA 1f 1f a~ a~ a~ a~ YA YA kI@a~ WA YA 1f 1f a~ WA a~ 1f kI@B_#!)#+W@w! XC@8.#8.#h@# p@h$#h$#$b@$b@Cd#P8#ZC@#b@#b@Cd# F=n-;&h&&h&G-&nq&'t=P8#Fa#TJ#it@!{ {m#jj#!u&QD=}*;o>;%&;Tw=p>;q>;|>;0%&r>;s>;t>;J;;Q#;aU=}6&}6&Hu=Hu=Y;;mg&I7&4@;u>;P*;v>;w>;ax&x>;wD=vD=y>;5>;y>;z>;A>;m+;9v&dx&7>;s+;B>;o*;P.;B>;C>;D>;E>;;G>;H>;yB&x&;`{&I>;J>;-;;-;;|6&2r&ix&2r&t8&0`%C-&6*;8^&0!&}Q%h%&K>;-k&i>;zn#d1#d1#e1#f1#f1#e1#d1#d1#d1#/M /M ]M 6q#6q#6q#6q#LH#LH#LH#SJ#vg#bj#]M d1#d1#f1#dw dw ew ew xy G5@LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$G5@1r@X~#yK cN@}A Eu Eu Eu Kv Kv Kv &E &E Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv Kv Kv Eu vR@$4@<|@[|@[|@(|@(|@^|@WA YA 1f ')#')#w! w! XC@XC@{Y@8.#8.#h@#i@#Cv@Cv@j$#C&#C&#C&#C&#Y=#Z=#Z=#Z=#VE@VE@P~#!1 WE q4&M5$o5&4t=4t='e=aX-Xp tD&{>;Vp Wp Gk=L>;oy= Y-;r&bN=.)#HD=:7.tS.rK=2;@vu= =5 =5 =5 &5 &5 &5 &5 0c A^.'J.aH.aH.'J.]>;fl+0R#6R@QI.91+s[.s[.|5+|5+6' bv#(s.aq.{b+ph#un.i4@XN.XN.J3.J3.31.31.B2*B2*y}*y}*@9.@9.@9.$B#$B#$B#[3+w7+ET&ET&|5+[3+w7+6z+|5+|5+|5+w7+w7+ET&ET&>H.I> &5 W_ W_ {_ {_ {_ ;b.6}%6}%6}%6}%6}%6}%6}%6}%|x.|x.|x.|x.|x.|x.|x.|x.O9.O9.6}%6}%6}%6}%O9.cl+-J.bv#B, ns%6' bv#6' ns%ns%ns%ns%FI#FI#j4@j4@QU+OJ.6}%O9.;b.;b.|x.6}% F. F.uq.P~ uq.O9.|x.O9.xj+'C+,X@6z+)Z%6z+)Z%6z+)Z%'C+,X@'C+,X@'C+,X@'C+,X@'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%DI#'Z%)Z%eO@eO@)Z%'Z%DI#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%j(#j(#b,+o&=o&=bQ#bQ#+9.+9.+9.bQ#bQ#bQ#bQ#+9.+9.+9.o&=b,+o&=bQ#+9.bQ#b,++9.j(#b,+,H.0q.bp.b,+b,+j(#o&=bQ#o&=j(#j(#b,+bQ#+9.+9.bQ#bQ#o&=b,+b,+j(#bQ#bQ#o&=o&=o&=o&=bQ#bQ#bp.+9.+9.bQ#o&=b,+j(#j(#o&=+9.+9.bQ#o&=o&=o&=j(#o&=b,+Q+&j(#o&=bQ#b,+Q+&b,+b,+b,+b,+b,+b,+b,+b,++9.bQ#b,+Q+&Q+&Q+&b,+o&=b,+b,+b,+b,+b,+b,+b,+b,+o&=b,+j(#Q+&Q+&j(#o&=bQ#o&=o&=o&=b,+b,+j(#j(#j(#w{@w{@w{@Q+&Q+&j(#j(#b,+{4%6l%pN%gJ%gJ%Ic%PU+5=+(4%z|.w~. d+qm=S:$-3 M>;b2-%5-<>;c2-UO-DQ-S<*4) 7u-6k 8u-N^##D=,<-z_#R3 :u s[ e5 7v {1 'p :} ,p O9 O9 ')#kI@1f a~ c~ YA WA Y:@Y:@Y:@W:@+~ X:@X:@tG tG -! -! -! -E -E -E *E *E *E *E *E *E *E *E =E =E =E =E =E =E =E =E GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%Nt%Nt%Nt%u1$u1$u1$&E &E &E &E &E u1$u1$&E &E &E Kv Kv Kv Kv Kv Kv Kv Kv -! -! -! -! tG tG tG tG -! tG tG tG tG tG tG -! vR@$4@<|@[|@:|@_|@(|@(|@(|@(|@_|@(|@/|@^|@WA YA 1f 1f a~ a~ a~ a~ YA YA 1f a~ WA YA 1f kI@1f YA 1f kI@')#B_#QT@))#+W@+W@{Y@{Y@8.#h@# p@h$#$b@$b@ZC@ZC@ZC@Fa#TJ#Fa#Cd#'t=G-&Ao&Jw&Cd#ZC@TJ##b@Ic&X=#-)#9u#(r@a+&IB=4C=iq&7=;%&;#&;Tw=}>;@&;o-;o-;c5&wt=wt='=&v=;v=;N>;6=;b4&]%%U &Fu=G=;%h&O>;(x&q$;ax&P>;Q>;uT&R>;R>;R>;w-;T=;S>;m*;U%;T>;U>;Z-;dx&o+;1!&V>;il&E>;W>;X>;Y>;QA=9z=v-&(y=]=&Z>;`>;lq&$7&$7&ny&`t=26&ut=a3&LN#DL#gy#cj#07#97#g1#(0#d1#e1#f1#f1#f1#f1#e1#d1#d1#d1#d1#d1#/M ]M ]M 6q# t# t# t#vg# t# t#bj#6q#/M f1#dw dw ew ew xy LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$G5@=p@1r@X~#cN@}A v! Kv Kv Kv Kv Kv Kv Kv Kv Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv Eu Eu vR@$4@$4@<|@[|@[|@(|@/|@^|@WA a~ kI@')#B_#XC@XC@{Y@{Y@8.#h@#h@# p@j$#j$#j$#j$#j$#C&#C&#Y=#Z=#Z=#Z=#VE@VE@P~#P~#!1 WE .4 C4 Ih V] 8,@}8$(m&21&(1*yd +`&`] }l& ,;.,;KM-WO=j>;Av@2z=Qi*+=@0<@k1+k1+<(+.9..9..9.vj&vj&sQ@h;#.9.cO@-tk-~U.fW=;Z+N:*uG#uG#N:*N:*uG#uG#uG#*r=*r=*r=;Z+uG#uG#fW=fW=uG#uG#;Z+N:*N:*N:*uG#uG#*r=*r=*r=*r=sX%CI#S`%&r=*r=&r=S`%;Z+;Z+vu#N:*N:*uG#uG#*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#N:*uG#uG#uG#*r=*r=*r=&r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#*r=*r=uG#N:*uG#uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*N:*N:*vu#vu#uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*uG#uG#*r=*r=*r=&r=&r=&r=&r=&r=&r=&r=&r=&r=*r=*r=*r=&r=&r=&r=&r=&r=&r=*r=*r=uG#uG#N:*N:*m}+m}+m}+m}+m}+^u=^u=^u=o!#o!#o!#o!#o!#o!#^u=^u=+v=+v=+v=+v=+v=+v=+v=+v==^@wr*wr*+v=lh.&u.'0+'0+Bv&Bv&B9.B9.8P.8P.8P.4p=&, 0, {h&~h&{h&0, Av&3<@..=[f.[f.[f.[f.[f.[f.[f.OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*x{+[f.[f.u!=HV.HV.HV.u`.>].u`.[f.x{+", "#9.#9.#9.#9.#9.#9.#9.[3+|5+|5+|5+cp.Hu+9, G6.|5+cp.#9.cp.|5+w7+[3+#9.|5+[3+cp.PI.PI.PI.PI.PI.xX%%0+)Z%)Z%%0+_r+N7.%0+%0+N7._r+N7.%0+@9.$B#{t.I> =5 =5 =5 &5 &5 &5 &5 0c A^.'J.aH.aH.'J.]>;fl+*/.{n#91+91+91+91+cp.cp.bv#ym.(s.aq.{b+{b+ph#ph#RK.XN.XN.J3.31.n2.B2*d1*y}*y}*@9.@9.@9.$B#$B#$B#cp.|5+ET&ET&|5+|5+w7+6z+|5+|5+w7+w7+ET&ET&ET&N}.fL.W_ {_ {_ {_ ;b.;b.;b.O9.O9.O9.O9.O9.O9.O9.O9.|x.|x.|x.|x.|x.|x.|x.|x.O9.6}%6}% F. F.6}%6}%cl+-J.ym.B, B, 6' bv#6' B, B, B, B, ns%ns%FI#FI#sv%OJ. F.6}%O9.O9.O9.6}%6}%6}% F.P~ uq.O9.|x.6}%l`.ET&)Z%)Z%,X@,X@'Z%'Z%DI#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%DI#'Z%)Z%eO@eO@)Z%'Z%DI#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%o&=o&=o&=o&=o&=bQ#bQ#bQ#+9.bQ#o&=o&=o&=o&=bQ#+9.+9.bQ#b,+o&=+9.bp.bQ#b,++9.j(#j(#bp.,H.+9.b,+b,+Q+&b,+bQ#o&=j(#Q+&b,+o&=bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=:(+bp.+9.bQ#o&=j(#Q+&Q+&o&=bp.+9.b,+j(#bQ#bQ#j(#b,+j(#j(#b,+bQ#bQ#b,+Q+&b,+b,+b,+b,+b,+b,+b,+b,+bQ#o&=b,+j(#j(#j(#j(#b,+b,+b,+o&=bQ#bQ#o&=b,+b,+j(#j(#b,+b,+b,+o&=o&=o&=o&=o&=o&=b,+b,+j(#j(#j(#Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&,r+6l%FU%qN%lx@fJ%;~@x2%PS@OU+15+ d+zh.+,;Ca#@,;#,;56-F3-Y}- n-=Y=F8-+p-7u-6k 8u-N^#J~#$)#Bu=wf=2k=[]#vb 7v {1 'p <} :} .9 +L@QT@')#kI@1f XA YA @~ W:@W:@W:@W:@+~ t! X:@tG tG tG -! -! -E -E -E }g }g }g }g }g }g }g }g =E =E =E =E =E =E =E =E Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$&E &E &E &E u1$Nt%Nt%u1$&E &E Kv Kv Kv Kv Kv Kv Kv Kv -! -! -! -! -! -! -! -! -! tG sG sG sG sG tG -! $4@<|@<|@[|@:|@:|@_|@_|@(|@(|@(|@(|@/|@@~ WA YA a~ a~ a~ a~ a~ a~ a~ a~ 1f a~ WA a~ kI@')#kI@a~ 1f 1f kI@B_#QT@!)#))#+W@w! XC@XC@8.#h@# p@h$#$b@TJ#Fa#Fa#Fa#TJ##b@Ic&wg#Jw&'t=P8#Fa##b@Ic&wg#wg#X=#c1#!{ ht@Yt=.H&3C=4C=Q*;9=;+I=+I=2y&>$&yk&ix&qp&A-&LY%B-&C-&1>&sT=0`%ov=]%%U &Fu=G=;$,;%,;&,;*,;p$;P-;=,;-,;;,;>,;!v&J.;w-;T%;,,;',;dz=rz&dz=p+;r+;1;;(w&),;!,;~,;OF={,;],;^,;/y=U.;wV=/,;mW=_v&(J=,u&oy&6r&a3&Zt=b3&Ic&.p@vg#)m#d1#]0#/7 k[#d1#e1#e1#f1#f1#e1#e1#d1#/M d1#d1#d1#d1#/M ]M 6q#]M ]M 6q#6q#6q#bj#bj#bj#/M e1#dw xy dw dw xy Lz LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$G5@G5@=p@1r@X~#yK cN@cN@vR@vR@Eu Eu Eu Eu Kv Kv Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv Eu Eu vR@$4@<|@[|@[|@:|@/|@/|@@~ WA a~ kI@B_#B_#w! w! XC@{Y@8.# p@ p@h$#Y=#C&#j$#j$#j$#C&#Y=#Y=#VE@VE@P~#P~#ir#ir#ir#Q@$Jj 5W&Eg Ih 8,@(,;(m&(o=21&_,;JY&:,;}l&<,;yc [,;Vi-I`-dR=L$;}6.He+0<@Q/@c3+I7.sQ@):.;fl+gk#r3.91+91+91+91+cp.cp.(s.(s.(s.(s.ph#{b+21.21.RK.RK.XN.J3.31.n2.d1*d1*y}*y}*@9.@9.@9.$B#$B#$B#cp.|5+ET&w7+|5+|5+ET&'C+w7+w7+w7+ET&ET&ET&6z+N}.w4.{_ ;b.;b.|x.|x.|x.|x.O9.O9.O9.O9.O9.O9.O9.O9.|x.|x.|x.|x.|x.|x.|x.|x.O9.6}% F. F. F. F.6}%cl+-J.ym.B, B, bv#bv#bv#B, 6' 6' 6' B, B, ns%ns%DU%t=+&0+&0+&0+&0+%P%g~#g~##y#R`%&0+%P%R`%g~#%P%WD@,X@J7.J7.n4@n4@c3+c3+c3+n4@n4@n4@n4@n4@n4@n4@n4@'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%,X@)Z%eO@eO@)Z%,X@'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%+9.+9.bQ#bQ#bQ#bQ#o&=o&=bQ#o&=b,+j(#j(#b,+o&=bQ#bp.bQ#o&=o&=+9.bp.+9.o&=bp.j(#w{@bQ#bp.o&=j(#o&=j(#o&=+9.bQ#b,+j(#o&=bQ#o&=o&=o&=o&=o&=bQ#bQ#bQ#o&=o&=o&=bQ#bQ#o&=o&=o&=+9.+9.bQ#bQ#o&=b,+b,+b,+o&=:(+bp.j(#Q+&+9.+9.Q+&b,+j(#j(#o&=+9.bQ#b,+w{@b,+b,+b,+b,+b,+b,+b,+b,+b,+o&=o&=o&=o&=b,+j(#Q+&b,+o&=bQ#+9.+9.bQ#o&=b,+CI#Q+&b,+bQ#+9.bQ#b,+j(#o&=o&=o&=b,+b,+j(#j(#j(#j(#j(#Q+&w{@CI#CI#S`%S`%(&%^0.qN%YH*u{@ps+Pw%L8@q)@]%@z|.ze+B~-jj },;|.#|,;C0-R;;1,;x7-Hg eX-&o=+p-Kg @p-N^#J~##D=,<-*[ z_#:u vb 7v {1 {1 'p :} @A@@A@QT@B_#')#1f XA YA ^|@+~ +~ W:@+~ t! X:@X:@sG sG tG tG -! -! -! -E }g }g }g }g }g }g }g }g =E =E =E =E =E =E =E =E u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$&E &E Kv &E Nt%GJ%GJ%Nt%&E Kv Kv Kv Kv Kv Kv Kv Kv Kv -! -! -! -! -! -! -! -! tG sG rG >b@>b@rG sG tG [|@[|@[|@[|@[|@:|@:|@:|@/|@(|@(|@/|@^|@@~ WA YA WA WA YA a~ a~ 1f kI@kI@1f YA WA a~ kI@B_#')#1f a~ 1f kI@')#QT@!)#))#+W@+W@+W@XC@{Y@8.# p@h$#$b@TJ#TJ##b@Ic&Ic&Ic&Ic&wg#6`%P8#Fa#Ic&f5&f5&f5&f5&X=#X=#c1#7u#jj#6E&f%&HB=3u=3u=I7&I7&4@;mg&cY-%#;|V=2,;C-&1>&U#;GY-st=a3&3u=3u=3u=MA@Ka*R*;]v&O*;;-*rv=tD=tD=}g*m[*3,;ew=;=;;=;4,;5,;cz=cz=Px=6,;m+;WS=7,;8,;8,;n$;ey&ey&9,;0,;p-;e ;bz&*]*a,;b,;zd#FG=-t&v8&{N%d4&{N%FL#YC@wg#8.#]M B_#dw 9 a7#'m#k[#a7#a7#a7#a7#k[#'m#b4#'m#k[#a7#k[#'m#|c#.i#]M ]M /M /M /M /M /M /M ]M e1#xy Lz xy dw xy Lz LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$=p@=p@=p@1r@W~#W~#X~#X~#<|@<|@$4@vR@vR@Eu Eu Kv Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv Eu vR@vR@$4@<|@[|@:|@:|@/|@^|@@~ YA 1f ')#B_#QT@))#+W@w! {Y@8.# p@h$#$b@Z=#Y=#C&#j$#j$#C&#Y=#Z=#ir#ir#ir#N~#N~#O~#O~#O^#d0&*V&Eg Jh V] }8$(o=(1*21&_,;JY&`] c,;}G&d,;e,; Y-n7*MZ-bQ=h...=@0<@]q%H8@k1+<(+.9..9..9.vj&PJ*<(+sQ@.9.cO@;66- n-h,;F8-4) F[*@p-N^#J~#Q*#,<-Bu=T3 ) A0 7v 7v 7v `3 <} ,p @A@.9 +L@ 9 1f a~ a~ t! t! +~ +~ +~ t! X:@r[@sG sG tG tG -! -! -! -! }g }g }g }g }g }g }g }g =E =E =E =E =E =E =E =E &E &E &E &E &E &E &E &E Nt%Nt%Nt%u1$u1$u1$&E &E Kv &E Nt%GJ%GJ%Nt%&E Kv Kv Kv Kv Kv Kv Kv Kv Kv -! -! -! -! -E -E -E -E sG rG >b@r[@r[@>b@rG sG :|@:|@:|@[|@[|@[|@[|@[|@/|@/|@(|@/|@^|@@~ YA a~ @~ @~ WA YA 1f kI@')#')#1f YA YA a~ ')#B_#')#1f YA a~ 1f ')#QT@!)#+W@+W@))#+W@w! XC@8.# p@h$#h$#ZC@#b@f5&aj&wg##b@Fa#Fa#Cd#ZC@#b@wg#aj&J`%aj&XC@{Y@y&#X=#6u#Si@a+&+H&.H&Gx=V &6r&ny&;v=Hx=Hx=mg&L,&!t=16&K&&a`%S8#09&P8#Zt=Jw&Zt=nq&3*;.H&QD=`E==]*mw@tD=);;i,;0%&i,;:-;m[*<-;j,;zy=CA&d;*qw@G`-k,;5>;l,;R&;TS=m,;UE=sv=,W=U;;nF=yk&;Y-bz&my&yg#n,;}`@0.#g@#:v&0+&:v&MN#An#YC@{Y@+W@')#1f /d@+L@'m#'m#k[#a7#a7#k[#'m#'m#b4#'m#k[#k[#k[#b4#|c#I,#bj#)m#]M d1#e1#f1#f1#f1#]M e1#xy Lz xy dw dw Lz LZ$LZ$LZ$LZ$LZ$LZ$LZ$LZ$=p@=p@=p@1r@1r@1r@1r@1r@[|@[|@<|@$4@vR@Eu Eu Kv Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv vR@vR@$4@$4@<|@[|@:|@:|@/|@^|@@~ YA 1f ')#B_#QT@!)#!)#+W@XC@8.# p@$b@B&#VE@Z=#C&#j$#j$#j$#Y=#Z=#N~#N~#N~#O~#O~#O~#0u#TE IY&,7&'7&Jh Vb=}8$21&zd 21&_,;JY&I1 o,;1l&m2&p,;.) j>;I`-q,;D<&xV .=@]q%C{@9<@.9.<(+sQ@<(+!Z%!Z%r+w% 21.21.21.21.21.21.j}+{t.aq.|5+[3+cp.{t.w7+6' ns%6' ym.aq.aq.aq.(s.ym.{b+{b+{b+{b+{b+{b+{b+{b+(s.(s.(s.ym.ym.ym.bv#bv#j4@B, bv#bv#B, ns%bv#-J.8H.|x.|x.|x.|x.|x.|x.|x.|x.|x.O9.O9.O9.6}%6}%6}%6}%W_ &_ ~_ |x. F.6}%;b.PF+/D.uq.6}%6}%6}% F.OJ.DU%B, 6' bv#6' ns%j4@EI#ns%ns%B, B, 6' bv#bv#Vl.+n+g~##y#g~#&0+S}%&0+R`%R`%&0+S}%&0+g~##y#g~#+n+w7+eO@ET&)Z%'C+,X@vA*'Z%Gu+2p%1p%2p%|r%'Z%|r%p!#'Z%'Z%,X@,X@)Z%eO@eO@@9.'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+b,+b,+b,+b,+b,+b,+b,+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+j(#b,+bQ#bp.bp.bQ#j(#+9.+9.+9.+9.+9.+9.+9.+9.o&=o&=o&=bQ#+9.bp.bp.bp.bQ#+9.bp.:(+bp.bQ#b,+j(#o&=b,+bQ#q3.q3.bQ#b,+o&=o&=o&=o&=o&=o&=o&=o&=o&=bQ#o&=o&=o&=o&=o&=o&=bQ#Q+&Q+&j(#b,+b,+o&=bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+b,+j(#Q+&Q+&j(#b,+bQ#bp.@:+OJ*!Q*j(#e6#.X+zM+aM.a<@n2.GG*`Y=}i$A3-r,;#b u7-n>;OW-7Z=yn-UO-F8-d2-&o=+p-HX-{}*Jo=po=J~#VO-G[*ym=Pj kj#kj#A0 Ea#d2 Q1 n| 36 7, +' /d@]|@;! W:@t! X:@t! W:@;! Y:@+~ ;! W:@X:@rG -! -! -E -! }g }g }g *E *E =E =E =E =E =E =E =E =E =E =E =E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$&E &E &E &E &E &E &E &E &E &E }g }g -E -E -! -! tG tG -E -! sG >b@>b@rG sG tG <|@<|@<|@[|@[|@:|@:|@:|@(|@(|@(|@/|@/|@^|@^|@^|@Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@+~ Y:@]|@;! Y:@Y:@]|@/d@a~ 1f 1f kI@')#B_#QT@QT@QT@))#XC@{Y@{Y@8.#h$#gt@h@#8.#{Y@XC@XC@{Y@{Y@8.#$b@h$# p@8.#{Y@XC@XC@{Y@/d@7, [`@C&#P~#5`%,d@,d@,d@+H&.H&2A=>t&)u&6r&d5&6`%Zo@'t=Dd#TJ#OH##b@$b@]m#'d@Yt=Rm@6E&5`%6E&6E&5;*;v=K@&Q*;r;;}d&r;;7z=jy&cw=p>;dw=p>;cw=@&;s,;s,;:&;%c*ZL=t,;:&;u,;@&;v,;Gu=u0*)$&u>;ng&zd#zd#MN#9.#An#f@#0+&'d@{m# p@XC@B&#gt@))#WA WA B_#+W@B_#!)#))#))#!)#QT@))#w! w! w! w! w! w! w! w! 6q#^0#_0#^0#^0#^0#97#97#97#d1#e1#B_#kI@a~ YA WA @~ a~ a~ a~ a~ a~ a~ a~ 1f ^|@^|@@~ @~ @~ ^|@/|@/|@<|@$4@$4@vR@Eu Kv &E &E u1$u1$u1$u1$u1$Nt%Nt%Nt%vR@vR@vR@vR@Eu Eu Eu Eu Kv vR@<|@[|@<|@<|@:|@(|@+~ W:@;! ]|@/d@O9 +L@.9 RT@RT@bP@[`@b.#UE@i@#Cv@j$#C&#C&#C&#Y=#Y=#Z=#Z=#Z=#ir#0u#0u#O~#ir#ir#l| es&es&wu&4t=r3$=p bh=Ln=k2&h_ h_ o9&S-&g_ w,;W7&x,;y,;y,;t[*z,;.0.yr*dN=C!@C!@<(+<(+<(+<(+vj&vj&cO@.9.n3.<(+cO@Z`+g|.<(+cO@cO@cO@cO@cO@cO@cO@cO@[v.rQ@g|.cO@rQ@Z`+dO@ +l Q1 Q1 (1 ]1 +' (,@VH _,@Y:@+~ t! +~ W:@Y:@W:@t! W:@t! r[@sG -! -! -! -! }g }g }g *E *E =E =E =E =E =E =E =E =E =E =E =E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$&E &E &E &E &E &E &E &E &E &E }g }g -E -E -! -! tG tG -E -! sG >b@>b@rG sG tG [|@[|@[|@:|@:|@_|@_|@_|@_|@_|@(|@(|@/|@/|@/|@/|@Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@+~ Y:@;! ;! W:@W:@Y:@]|@YA YA a~ 1f kI@')#')#B_#QT@))#XC@XC@XC@XC@h@#h$#{Y@XC@XC@w! w! w! XC@{Y@h$# p@8.#{Y@XC@w! XC@uR@@A@<} 4' kx ir#O~#5`%5`%5`%,d@#a*#a*,t&wh&'t&]m#0+>@B&#h$#8.#8.# p@B&#B&#gt@'d@:f@FN#FN#FN#&D&MA=5;*F>*C,;u>;u>;C,;C,;;v=u>;Q*;>v=Q*;C,;R#;S#;R#;wz&*t&%7&WB=1C=C,;Q*;%&;S;;>v=Dy@9=;R#;%7&e4&MN#8.#{Y@h@#gt@'d@gt@ p@8.#Si@Si@+W@YA YA B_#))#B_#!)#))#))#!)#QT@))#w! +W@+W@+W@+W@+W@+W@+W@]M 97#=g&=g&_0#^0#^0#^0#^0#e1#f1#')#kI@1f a~ EN#{M YA YA YA YA YA YA YA YA ^|@^|@@~ @~ @~ ^|@/|@(|@<|@<|@$4@vR@vR@Eu Kv Kv u1$u1$u1$u1$u1$u1$u1$u1$vR@vR@vR@vR@vR@vR@vR@vR@Eu $4@:|@:|@[|@[|@_|@/|@W:@Y:@;! (7 9 O9 .9 @A@RT@RT@bP@[`@b.#i@#Cv@Cv@C&#C&#C&#C&#Y=#Y=#Z=#Z=#Z=#ir#0u#0u#O~#ir#N~#O~#ty XH hH st&Qr c/*XE&tH&11&D,;Go=Io$*:*E,;u4&J_ F,;G,;q,;d-;@].{z&eg+eO=p&=p&=.9..9..9..9.!Z%!Z%dO@):.sQ@.9.dO@Z`+cO@.9.dO@dO@dO@dO@dO@dO@dO@dO@M:*rQ@g|.cO@rQ@Z`+cO@;56-nY=A,;mX-&5-F8-&o=RJ#{}*=1-po=Q*#VO-x[-&i-8(-lj#I,;e@#E> 3m *! Q1 (1 ]1 +' (,@VH VH ]|@Y:@+~ +~ W:@W:@t! r[@X:@r[@rG sG -! -! -! -! }g }g }g *E *E =E =E =E =E =E =E =E =E =E =E =E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$&E &E Kv Kv Kv Kv Kv Kv Kv Kv }g }g -E -E -! -! tG tG -E -! sG >b@>b@rG sG tG :|@:|@:|@_|@_|@(|@(|@(|@:|@:|@_|@_|@_|@(|@(|@(|@Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@+~ Y:@;! Y:@+~ t! +~ Y:@@~ @~ WA YA a~ 1f kI@kI@QT@))#w! w! ))#))#+W@XC@w! +W@))#))#))#+W@+W@w! h@#8.#XC@w! +W@+W@+W@RT@b.#4' i[#@|#N~#O~#Rm@Rm@Rm@Rm@a+&&D&'t&ij#]N%e>#e>#h$# p@8.#XC@XC@ p@B&#h$#$b@gt@Si@'d@:f@'d@jj#V &S#;1C=1C=R#;1C=S#;S#;%7&%7&*t&*t&%7&xz&'s&v8&,u&,u&,u&xz&*t&wz&5;*;v=%&;P*;Dy@O*;P*;C,;S#;6r&i$#h@#{Y@h@#gt@:f@gt@h$#$b@:f@'d@w! a~ YA ')#QT@B_#!)#))#))#!)#QT@))#w! !)#!)#!)#!)#!)#!)#!)#d1#07#2L==g&=g&^0#87#87#]0#f1#ew ')#kI@1f 1f I~ I~ WA WA WA WA WA WA WA WA ^|@@~ @~ @~ ^|@/|@(|@_|@[|@[|@<|@$4@vR@Eu Eu Kv Nt%u1$u1$u1$u1$u1$u1$u1$vR@vR@vR@vR@vR@vR@vR@vR@$4@[|@_|@_|@:|@_|@/|@@~ Y:@Y:@]|@(7 9 +L@.9 @A@RT@bP@uR@[`@UE@i@#Cv@Cv@C&#C&#C&#Y=#Y=#Z=#Z=#Z=#VE@ir#0u#0u#O~#N~#O~#Ut&ty &h@(u LQ=P}*Ez FA= 23+x{+u!=u`.>].,].,].u!=23+23+u!=u!=23+23+u!=HV.HV.u!=[f.x{+x{+OP*OP*u!=[f.x{+[f.u!=[f.", "PI.PI.PI.PI.PI.PI.Hu+PI.PI.PI.PI.PI.PI.PI.PI.8v.8v.Hu+Hu+PI.PI.PI.#9.cp.cp.cp.cp.cp.cp.cp.[3+ET&w7+cp.PI.PI.PI.cp.[3+cp.cp.cp.cp.cp.cp.cp.s3.6v@ l.7v@7v@X_ A^.0c 0c 0c 0c 0c 0c A^.X_ 7v@fL.sS #) #) #) #) #) un.un.5!.{t.ET&6z+ET&|5+[3+[3+#9.#9.#9.cp.cp.[3+aq.(s.ZT#ZT#7S.7S.7S.7S.7S.7S.(s.(s.(s.ym.ym.ym.bv#bv#aq.aq.aq.(s.ym.bv#bv#B{$8H.|x.|x.|x.|x.|x.|x.|x.|x.|x.O9.O9.O9.6}%6}%6}%uq.O9.{_ {_ |x.O9.;b.&5 |x.|x.O9.O9.6}% F. F.OJ.DU%B, B, B, B, ns%ns%ns%FI#FI#FI#FI#FI#FI#FI#DU%WD@&0+%P%&0+5e%@g%5e%S}%R`%&0+S}%&0+g~##y#g~#+n+%c%Gu+Gu+|r%vA*vA*'C+'C+vA*|r%Gu+|r%'C+6z+'C+vA*,X@,X@'Z%'Z%DI#p!#p!#2p%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=b,+j(#b,++9.bp.bQ#o&=b,+b,+b,+b,+b,+b,+b,+b,+bp.bp.bp.+9.bQ#o&=o&=o&=b,+j(#Q+&w{@Q+&b,+bQ#bp.o&=Q+&j(#bp.bp.j(#Q+&o&=o&=o&=o&=o&=o&=o&=o&=o&=j(#b,+bQ#bp.bp.bQ#b,+j(#bQ#bQ#o&=b,+b,+j(#Q+&Q+&b,+o&=o&=o&=o&=bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+b,+j(#Q+&w{@w{@CI#CI#CI#@:+`a.OJ*@:+j(#.X+.X+C<&9V-6'%R,;J9-Zm=wr-S}-aI+c2-'`@*c-OW-S,; n-H0-dX-eX-F8-#X-HX-Jo=I~#J~#86-qI-Ry-8(-d5 e@#Qj Ea#+l d2 *! Q1 ]1 /,@(,@(,@(,@ 9 ]|@Y:@W:@W:@W:@X:@>b@>b@rG rG sG tG tG -! -! }g }g }g *E *E =E =E =E =E =E =E =E =E =E =E =E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$&E &E Kv Kv Kv Kv Kv Kv Kv Kv }g }g -E -E -! -! tG tG -E -! sG >b@>b@rG sG tG _|@_|@_|@(|@(|@/|@/|@/|@[|@[|@:|@:|@_|@_|@_|@(|@Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@W:@Y:@;! Y:@t! r[@X:@+~ ^|@^|@@~ WA YA a~ a~ 1f QT@))#+W@))#B_#')#B_#!)#!)#QT@QT@QT@QT@!)#))#+W@XC@XC@+W@))#))#))#))#@A@b.#4' Zp kx P~#ir#Rm@Rm@FN#:f@jj#0+&]N%g@#oi&YC@@t#{Y@ p@ p@h@#8.#h@# p@h$#$b@B&#gt@Si@'d@'d@]m#6r&'u&'u&WB=WB=*t&%7&%7&'s&'s&v8&c`%c`%c`%v8&v8&FG=c`%xz&*t&'u&S#;5;*;v=7=;Dy@S;;Dy@Dy@T,;R#;V &{m#h@#XC@8.#B&#'d@Si@$b@Si@Rm@:f@XC@1f a~ ')#')#B_#!)#))#))#!)#QT@))#w! QT@QT@QT@QT@QT@QT@QT@e1#)m#7~%2L==g&^0#87#]0#nx ew ew ')#kI@kI@kI@H5@H5@WA WA WA WA @~ @~ @~ @~ ^|@@~ @~ @~ ^|@(|@_|@:|@[|@[|@<|@<|@$4@vR@Eu Eu Nt%Nt%Nt%u1$u1$u1$u1$&E vR@vR@vR@vR@$4@$4@$4@$4@[|@_|@/|@/|@(|@(|@^|@WA Y:@;! (7 /d@O9 .9 @A@RT@bP@bP@uR@b.#UE@i@#Cv@j$#C&#C&#Y=#Y=#Z=#Z=#VE@VE@P~#N~#0u#0u#O~#O~#Ut&85*rR#%h@~t S2*:!-t_$FA=Z4-U,;k:*V,;mt&W,;X,;;|*7k Y,;u[*KS=2A&i)@He++=@dN=C{@C{@g|.g|.g|.g|.cX-cX-rQ@cO@].>].u!=23+23+u!=u!=23+23+u!=u`.HV.HV.u!=u!=[f.[f.[f.OP*x{+[f.u!=u!=[f.", "PI.PI.Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.Hu+Hu+Hu+PI.PI.#9.#9.#9.cp.[3+[3+[3+[3+cp.cp.cp.ET&w7+cp.PI.PI.PI.cp.[3+cp.cp.cp.cp.cp.cp.cp.s3.6v@7v@7v@7v@X_ A^.A^.A^.A^.A^.0c =_ 0c A^.X_ fL.sS #) #) #) #) #) un.un.5!.{t.ET&6z+ET&|5+[3+[3+[3+[3+[3+[3+cp.cp.j}+l#@ZT#ZT#7S.7S.7S.7S.7S.7S.(s.(s.(s.ym.ym.ym.bv#bv#{t.aq.(s.ym.ym.ym.bv#A{$8H.|x.|x.|x.|x.|x.|x.|x.|x.|x.O9.O9.O9.6}%6}%6}% F.O9.|x.|x.O9.O9.;b.W_ O9.6}%6}% F.uq.uq.P~ vv+#0+ns%ns%ns%ns%B, B, B, ns%FI#FI#FI#FI#FI#FI#sv%WD@&0+%P%&0+5e%@g%5e%S}%R`%&0+S}%&0+g~##y#g~#+n+%c%Gu+Gu+|r%vA*vA*'C+'C+|r%(W%1p%(W%vA*'C+vA*Gu+,X@,X@'Z%'Z%DI#p!#p!#2p%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+j(#b,+bQ#bp.+9.o&=b,+b,+b,+b,+b,+b,+b,+b,+bp.bp.bp.+9.bQ#o&=o&=o&=b,+j(#Q+&w{@Q+&b,+bQ#bp.+9.b,+o&=bp.bp.o&=b,++9.o&=o&=o&=o&=o&=o&=o&=o&=j(#o&=bQ#+9.+9.bQ#o&=j(#bQ#bQ#o&=b,+b,+j(#Q+&Q+&b,+b,+b,+o&=bQ#bQ#+9.+9.o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+j(#j(#j(#Q+&w{@w{@CI#S`%@:+OJ*OJ*@:+j(#.X+.X+C<&aM.Ao=ho='+-|j=6$-q#-Ck=Z,;B8-iA-56-M9-x7-`,;yX-E8-Jg no=zn--1-=1-@)#6J@qI-jA-G[*d5 {0@Qj 3m +l #, d2 Q1 ]1 /,@/,@/,@/,@O9 (7 ;! Y:@Y:@W:@X:@>b@>b@>b@rG rG sG tG -! -! }g }g }g *E *E =E =E =E =E =E =E =E =E =E =E =E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$&E &E Eu Eu Eu Eu Eu Eu Eu Eu }g }g -E -E -! -! tG tG -E -! sG >b@>b@rG sG tG _|@_|@_|@(|@(|@/|@/|@/|@[|@[|@:|@:|@_|@_|@_|@(|@Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@W:@Y:@;! Y:@t! r[@X:@+~ ^|@@~ @~ WA YA a~ 1f 1f QT@))#))#!)#')#1f kI@')#B_#')#')#')#B_#QT@!)#))#w! +W@))#!)#!)#!)#))#@A@bP@<} /0#Zp Y=#VE@FN#FN#Si@gt@i$#e>#oi&}`@jE#@t#R~#w! h$#gt@B&# p@8.#{Y@ p@h$#$b@gt@Si@Si@Si@]m#d5&d4&e4&Bd#Bd#FL#FL#FL#FL#Ad#GL#GL#GL#Ad#FL#Bd#Ov#Bd#V &2A=3u=MA@Eu=7%;iq&iq&H=;}*;}*;|*;Pw=V &i$#8.#w! {Y@$b@Si@gt@h$#:f@5`%'d@w! 1f 1f kI@kI@B_#!)#))#))#!)#QT@))#w! QT@QT@QT@QT@QT@QT@QT@e1#)m#7~%2L==g&^0#87#]0#nx ew ew ')#')#')#kI@H5@H5@YA YA WA WA @~ @~ ^|@^|@@~ @~ @~ ^|@/|@(|@:|@[|@[|@[|@<|@$4@vR@Eu Eu Kv GJ%GJ%Nt%Nt%u1$&E &E &E Eu vR@vR@$4@$4@<|@<|@[|@:|@(|@^|@^|@/|@/|@@~ YA ;! ]|@(7 9 +L@@A@RT@bP@bP@uR@[`@b.#UE@Cv@j$#j$#Y=#Y=#Y=#Z=#Z=#VE@VE@VE@ir#O~#0u#Ut&0u#0u#85*qR#pR#Xt=(p=^r@s_$g3*0C=Ni=2g bH=KM- ';&)#.';+';@';#';G&;TR=2b+{z&D0@0M.VP=C{@C{@g|.g|.g|.g|.cX-cX-dO@cO@cO@dO@rQ@Z`+Z`+rQ@Z`+Z`+Z`+Z`+Z`+Z`+Z`+Z`+dO@dO@dO@cO@g|.g|.g|.g|.dO@dO@dO@dO@dO@dO@dO@dO@vu#vu#vu#vu#vu#vu#vu#vu#N:*N:*N:*N:*N:*N:*N:*N:*uG#N:*N:*vu#N:**r=sX%S`%N:*N:*N:*N:*N:*N:*N:*N:*;Z+vu#vu#vu#vu#vu#vu#;Z+N:*N:*uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*vu#N:**r=uG#vu#;Z+N:*uG#N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*uG#uG#uG#*r=*r=*r=uG#uG#uG#*r=*r=uG#uG#uG#&r=&r=&r=&r=&r=&r=&r=&r=N:*N:*uG#uG#uG#*r=*r=*r=uG#uG#*r=*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#N:**r=sX%sX%*r=uG#uG#&r=vu#N:*N:*uG#*r=*r=&r=&r=N:**r=&r=*r=N:*N:*uG#&r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#&r=&r=&r=&r=&r=&r=&r=&r=vu#N:*N:*uG#uG#N:*N:*vu#uG#uG#uG#uG#uG#uG#uG#uG#*r=*r=*r=*r=*r=*r=*r=*r=N:*N:*N:*N:*N:*N:*N:*N:*uG#uG#uG#N:*N:*vu#vu#vu#N:*N:*N:*N:*N:*N:*N:*N:*vu#vu#vu#vu#N:*N:*N:*N:*wr*wr*wr*+v=+v=wr*wr*wr*xr*&s*+v=lh.lh.lh.+v=wr*Bv&Av&0, &, ZQ.ZQ.Av&0, 0, 0, 0, &, Av&ZQ.Bv&3<@17*x{+u!=u`.>].u`.HV.u!=u!=23+23+u!=u!=23+23+u!=HV.HV.HV.HV.u!=u!=u!=u!=';$23+x{+u!=[f.[f.", "PI.Hu+Hu+Hu+Hu+PI.#9.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.#9.#9.cp.cp.cp.[3+[3+|5+|5+|5+[3+cp.#9.|5+[3+cp.#9.#9.#9.cp.cp.cp.cp.cp.cp.cp.cp.cp.s3.QB@X_ X_ X_ X_ X_ X_ X_ 7v@X_ A^.0c 0c A^.7v@w4.sS #) #) #) #) #) un.un.$9.{t.w7+ET&w7+[3+[3+|5+|5+w7+w7+|5+|5+cp.j}+l#@un.un.#) #) #) #) #) #) (s.(s.(s.ym.ym.ym.bv#bv#aq.ym.6' bv#ym.(s.bv#A{$8H.|x.|x.|x.|x.|x.|x.|x.|x.|x.O9.O9.O9.6}%6}%6}%O9.O9.O9.6}%6}%O9.|x.;b.6}% F.uq.P~ P~ P~ uq.OJ.#0+ns%ns%FI#ns%B, 6' 6' B, B, B, ns%ns%FI#FI#sv%WD@%P%R`%%P%5e%@g%5e%&0+R`%&0+S}%&0+g~##y#g~#+n+$0+|r%vA*vA*vA*vA*'C+'C+Gu+(W%+X+(W%|r%vA*|r%Gu+,X@,X@'Z%'Z%'Z%'Z%DI#DI#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.b,+Q+&j(#o&=+9.+9.bQ#o&=o&=o&=o&=o&=o&=o&=o&=+9.+9.+9.+9.bQ#bQ#bQ#bQ#o&=b,+b,+b,+b,+o&=bQ#bQ#bp.o&=o&=bp.bp.o&=o&=bp.o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+j(#j(#j(#j(#b,+o&=bQ#bQ#+9.+9.o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+Q+&Q+&j(#j(#j(#Q+&w{@CI#@:+OJ*OJ*@:+j(#CI#.X+C<&y}*l1+aM.6) RQ=S<+r=-cl-at-1,;b5 MC-G0-M9-$';%';B,;E8-_X-SW-$D=-1-I~#9>#qI-jA-=o=U3 d5 e@#E> +l `3 #, Q1 o| /,@/,@/,@+' O9 (7 ;! Y:@Y:@Y:@t! r[@r[@r[@r[@r[@>b@sG tG -E }g }g }g *E *E =E =E =E =E =E =E =E =E =E =E =E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$&E &E Eu Eu Eu Eu Eu Eu Eu Eu }g }g -E -E -! -! tG tG -E -! sG >b@>b@rG sG tG :|@:|@:|@_|@_|@(|@(|@(|@:|@:|@_|@_|@_|@(|@(|@(|@Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@+~ Y:@;! Y:@+~ t! +~ Y:@WA YA YA a~ 1f kI@')#')#QT@!)#))#QT@kI@a~ 1f kI@kI@kI@kI@kI@')#B_#!)#))#+W@))#))#!)#!)#!)#))#RT@RT@,p <} /0#Cv@Y=#'d@:f@B&#$b@e>#YC@}`@jE#)a&@t#S^#+W@h$#gt@B&#h@#XC@w! {Y@8.# p@h$#$b@B&#$b@$b@FL#Ad#GL#gj#Ov#Ov#Ov#gj#gj#gj#gj#gj#GL#Ad#FL#Bd#Ad#Zt=3u=Eu=Pw=Eu=7%;G=;6=&%h&$,;H=;H=;}*;Fu=G-&MN#{Y@))#+W@h@#B&#$b@ p@'d@FN#gt@+W@1f 1f kI@1f B_#!)#))#))#!)#QT@))#w! QT@QT@QT@QT@QT@QT@QT@e1#07#2L==g&=g&^0#87#87#]0#e1#e1#B_#B_#')#kI@H5@0~ a~ a~ YA YA WA @~ ^|@^|@@~ @~ @~ ^|@/|@_|@[|@<|@<|@$4@$4@vR@Eu Kv &E &E GJ%GJ%Nt%Nt%u1$&E Kv Kv Eu vR@vR@$4@<|@[|@[|@:|@:|@(|@^|@^|@/|@/|@@~ a~ ]|@(7 /d@O9 .9 RT@bP@uR@uR@uR@[`@b.#i@#Cv@j$#C&#Y=#Y=#Z=#Z=#VE@VE@VE@P~#N~#O~#Ut&Ut&0u#Ut&tq=5N=E,#&>-^r@et@Mj=}k=5B&5B&W*;JM=n7*5`-I`-.$;%I=3u*B.@&';o,@8J.4;@Q/@o4@Z2.C{@C{@g|.g|.g|.g|.cX-cX-cO@cO@cO@dO@rQ@rQ@rQ@rQ@rQ@rQ@rQ@rQ@rQ@rQ@rQ@rQ@g|.dO@rQ@cO@r+6v@QB@g% g% QB@6v@a, {D NQ.NQ.NQ.NQ.NQ.ph#ph#j}+aq.w7+|5+[3+cp.|5+ET&[3+|5+w7+ET&w7+|5+aq.{t.ph#ph#NQ.NQ.NQ.NQ.NQ.NQ.':+':+':+Vl.Vl.Vl.B{$B{$Vl.#0+DU%#0+Vl.':+Vl.#0+8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.cl+cl+cl+xj+xj+xj+w4.8H.xj+l`.xj+xj+cl+cl+xj+l`.OJ.OJ.OJ.l`.xj+8H.#0+ns%FI#FI#FI#B, 6' bv#6' 6' 6' B, B, ns%ns%DU%+n+I}+Tp*I}+t=+z4$WD@+n+I}+t=+WD@t=+Tp*>r+Tp*+n+N}.6z+'C+'C+'C+'C+vA*vA*|r%Gu+(W%Gu+vA*'C+vA*|r%'Z%'Z%,X@,X@,X@,X@)Z%)Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.o&=Q+&Q+&o&=+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.+9.bQ#bQ#+9.+9.+9.bQ#o&=b,+bp.b,+b,++9.+9.b,+b,+bp.o&=o&=o&=o&=o&=o&=o&=o&=bp.bQ#b,+j(#j(#b,+bQ#bp.j(#j(#b,+b,+b,+b,+o&=o&=j(#j(#b,+o&=bQ#+9.+9.bp.o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+w{@Q+&b,+o&=o&=b,+j(#Q+&@:+OJ*OJ*@:+j(#CI#.X+C<& W==e@aM.c1&Ao=RQ=Yo=[j=*';=';iA-u7-nY=-';;';>';7k ,';0X-M^#x8-$D=Jo=8u-*o=gn=Q_-v4 8(-Pj A0 E> 7v #, Q1 o| /,@/,@+' 7, 9 (7 ;! Y:@;! Y:@+~ X:@+~ +~ +~ t! r[@rG -! -E }g }g }g *E *E =E =E =E =E =E =E =E =E =E =E =E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$&E &E Eu Eu Eu Eu Eu Eu Eu Eu }g }g -E -E -! -! tG tG -E -! sG >b@>b@rG sG tG [|@[|@[|@:|@:|@_|@_|@_|@_|@_|@(|@(|@/|@/|@/|@/|@Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@+~ Y:@;! ;! W:@W:@Y:@]|@1f 1f kI@')#B_#QT@QT@!)#B_#!)#))#QT@kI@1f kI@')#kI@kI@kI@kI@')#QT@!)#))#+W@))#))#!)#!)#))#+W@RT@uR@<} 'p {1 i@#Cv@B&#gt@h$# p@9.#An#)a&)a&jE#8q#:r@w! 8.#h@#{Y@w! w! XC@))#+W@XC@{Y@8.#h@#8.#8.#e5&a-;36&w8&J7&w8&36&a-;a-;e5&Ov#gj#GL#Ad#Ad#FL#Bd#6r&Pw=Eu=MA@MA@Fu=}*;iq&%h&$,;G=;1*;G=;Eu=Jw&e>#w! QT@!)#{Y@h$#h$#h@#Si@'d@$b@!)#1f kI@kI@a~ B_#!)#))#))#!)#QT@))#w! !)#!)#!)#!)#!)#!)#!)#d1#97#=g&=g&_0#^0#^0#^0#^0#/M d1#QT@B_#')#kI@0~ I~ kI@kI@1f a~ YA WA @~ @~ @~ @~ @~ ^|@(|@:|@<|@$4@vR@vR@Eu Kv &E &E u1$u1$*L%GJ%GJ%Nt%u1$&E Kv Kv Eu vR@vR@$4@<|@[|@:|@:|@[|@(|@^|@^|@/|@/|@@~ YA (7 /d@ 9 +L@@A@bP@uR@[`@uR@uR@[`@UE@i@#j$#C&#C&#Z=#Z=#Z=#VE@VE@VE@P~#P~#N~#0u#Ut&Ut&0u#u_$pR#^T#UN='';Xo@)';VN=bO=uk*uk*TP=!';~';{';]';^';/';(';52-]z&@~+^0++=@V[@eO=dN=9<@9<@r+Tp*@[+4=+af.af.QB@6v@B{${b+@~.@~.@~.@~.@~.{b+{b+{t.aq.|5+[3+cp.cp.w7+6z+#9.cp.|5+ET&6z+6z+bv#ym.{b+{b+@~.@~.@~.@~.@~.@~.':+':+':+Vl.Vl.Vl.B{$B{$A{$DU%QU+DU%Vl.':+Vl.#0+8H.8H.8H.8H.8H.8H.8H.8H.8H.8H.cl+cl+cl+xj+xj+xj+fL.a, xj+l`.l`.xj+xj+xj+cl+xj+l`.l`.l`.cl+a, ':+B, ns%FI#j4@FI#B, bv#ym.ym.bv#bv#6' B, B, ns%ns%|.&Tp*>r+Tp*t=+WD@t=+I}+I}+t=+WD@t=+Tp*>r+Tp*|.&w7+ET&ET&6z+'C+'C+vA*vA*'C+|r%Gu+|r%6z+ET&6z+vA*'Z%'Z%,X@,X@)Z%eO@eO@@9.'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.o&=Q+&Q+&o&=+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.o&=o&=o&=bQ#+9.bp.bp.bp.bQ#+9.bp.:(+bp.bQ#b,+j(#+9.j(#Q+&o&=o&=Q+&j(#+9.o&=o&=o&=o&=o&=o&=o&=o&=:(++9.b,+w{@w{@b,++9.:(+Q+&Q+&j(#b,+b,+o&=bQ#bQ#Q+&j(#b,+o&=bQ#+9.bp.bp.o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+CI#Q+&b,+o&=bQ#bQ#o&=b,+@:+OJ*OJ*@:+j(#CI#.X+2p%C<&'m*{q%T[&aM.n2.q[*|o=_';aI+$5-'V=Lh xX-;';:';%';dX-1X-!X-Ho=Io=2g oo=*o= A@:<-Q_-g5 G[*kj#4##Vr #, Q1 o| /,@/,@+' 7, /d@]|@Y:@Y:@;! ;! W:@t! W:@Y:@Y:@W:@X:@rG -! -E }g }g }g *E *E =E =E =E =E =E =E =E =E =E =E =E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$&E &E Eu Eu Eu Eu Eu Eu Eu Eu }g }g -E -E -! -! tG tG -E -! sG >b@>b@rG sG tG <|@<|@<|@[|@[|@:|@:|@:|@(|@(|@(|@/|@/|@^|@^|@^|@Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@+~ Y:@]|@;! Y:@Y:@]|@/d@')#')#B_#QT@!)#!)#))#))#B_#!)#))#QT@')#1f kI@B_#kI@kI@kI@kI@B_#QT@))#+W@+W@+W@))#))#))#))#+W@bP@i@#/0#/0#/0#UE@i@#h$#h$# p@h@#YC@8q#)a&jE#jE#An#@t#w! w! ))#QT@QT@+W@{Y@B_#QT@))#+W@w! w! w! w! .t#6C#5C#46&46&5C#J7&w8&36&a-;Ov#GL#FL#FL#FL#FL#Bd#6r&MA@Pw=2A=2A=U &G=;G=;6=&H=;Fu=U &Fu=2A=Fa#h@#+W@B_#QT@XC@ p@ p@8.#gt@Si@ p@QT@a~ kI@kI@a~ B_#!)#))#))#!)#QT@))#w! !)#!)#!)#!)#!)#!)#!)#d1#^0#_0#_0#_0#^0#97#97#97#]M /M !)#QT@')#1f I~ EN#')#')#kI@1f YA WA WA @~ @~ @~ @~ ^|@(|@:|@<|@$4@Eu Eu Kv &E u1$u1$Nt%Nt%*L%*L%GJ%Nt%u1$&E Kv Eu Eu vR@vR@$4@[|@:|@:|@_|@[|@_|@/|@/|@(|@/|@@~ YA (7 /d@ 9 +L@@A@bP@uR@[`@uR@[`@b.#UE@i@#j$#C&#C&#Z=#Z=#Z=#VE@VE@P~#P~#P~#O~#0u#Ut&Ut&0u#u_$pR#&>-^r@Xo@75*VN=bO=VN=<';<';)U=_&;~';[';(&;}';45*&e@~U=a%;G&;a%;eg++=@.=@eO=^^@^^@):.):.):.):.k]#k]#-N:*N:*N:*N:*N:*N:*N:*N:*fW=;Z+vu#uG#uG#vu#;Z+fW=uG#*r=&r=&r=&r=uG#vu#;Z+N:*N:*N:*N:*N:*N:*N:*N:*vu#N:**r=uG#vu#;Z+N:*uG#uG#*r=&r=sX%sX%&r=*r=uG#&r=&r=&r=&r=&r=&r=&r=&r=N:*N:*uG#uG#uG#*r=*r=*r=vu#uG#*r=&r=&r=*r=uG#vu#N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*uG#uG#uG#*r=*r=*r=uG#*r=&r=sX%sX%&r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#vu#uG#&r=&r=uG#N:*uG#*r=&r=&r=*r=*r=uG#N:*N:*vu#N:**r=&r=*r=N:*N:*uG#&r=uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*uG#*r=*r=&r=&r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#*r=*r=&r=sX%sX%&r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#vu#vu#vu#vu#vu#vu#vu#vu#&r=&r=&r=&r=&r=&r=&r=&r=S`%S`%sX%sX%sX%&r=&r=&r=;Z+vu#uG#*r=*r=uG#vu#;Z+S`%S`%sX%&r=*r=uG#N:*vu#xr*&s*=^@wr*wr*=^@&s*xr*'0+lh.+v==^@&s*=^@wr*+v=4p=B9.Bv&Bv&B9.B9.ZQ.&, Bv&Bv&Bv&Bv&Bv&Bv&Bv&Bv&xE*17*J> zi.J> 17*..=3<@3<@17*17*3<@3<@17*17*3<@x{+[f.[f.[f.[f.[f.[f.[f.u`.u`.u!=23+u]#u]#", "cp.cp.#9.#9.PI.PI.PI.Hu+PI.#9.PI.8v.8v.PI.[3+Hu+Hu+8v.8v.PI.cp.w7+ET&ET&[3+#9.#9.[3+|5+#9.8v.$9.U/ 21.)W+{b+ph#un.un.ph#4!.yT.zT.)W+i4@un.j}+5v@<4 i% h% 5v@.l.5v@s3..l..l..l..l..l..l..l.Vl.U/ 0Y+0Y+!W+@~.@~.ph#ph#aq.aq.cp.cp.[3+|5+w7+ET&|5+|5+w7+ET&ET&6z+B, B, yn*U[&/4%};@/4%7;@OQ.#) ':+a, cl+xj+xj+cl+a, w4.a, xj+OJ.xj+w4.I> w4.cl+Vl.Vl.Vl.B{$B{$A{$A{$A{$QU+sv%A{$B{$B{$A{$sv%QU+A{$A{$A{$A{$A{$A{$A{$A{$l3 ':+B{$#0+DU%#0+B{$':+bv#bv#bv#6' 6' B, B, B, ns%ns%ns%ns%ns%ns%ns%ns%%c%$0+r3%N}.>H.N}.r3%|.&%c%jb%jb%$0+|.&|.&r3%r3%|r%vA*'C+6z+6z+'C+vA*|r%vA*vA*vA*vA*vA*vA*vA*vA*DI#DI#DI#DI#DI#DI#DI#DI#'Z%'Z%'Z%DI#DI#DI#DI#DI#DI#DI#DI#'Z%,X@)Z%)Z%)Z%2p%DI#,X@)Z%eO@)Z%,X@'Z%bQ#bQ#bQ#bQ#+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bp.+9.bQ#o&=o&=bQ#+9.bp.bp.+9.+9.o&=b,+o&=+9.:(+0q.:(+bQ#j(#Q+&b,++9.:(+b,+b,+b,+b,+b,+b,+b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=#k.q3.+9.bQ#bQ#+9.bQ#o&=b,+b,+b,+b,+b,+b,+b,+b,+bQ#j(#j(#+9.+9.b,+b,+bp.o&=o&=o&=o&=o&=o&=o&=o&=+9.+9.bQ#bQ#o&=b,+b,+j(#b,+bQ#+9.bQ#b,+j(#o&=+9.o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,++9.bQ#o&=b,+j(#j(#j(#j(#bQ#o&=j(#Q+&Q+&j(#DI#'Z%2p%~4.]Z@j$&C<&=e@~4.T--J_-Y`=ke@B8-Pn=A,;ej.|';`,;H0-h}*!X-|6-k:*Ho=@p-F[*Hq-x[-Mh Q_-=o=s4 A0 7v 7v `3 #, n| 7, /,@VH +L@O9 9 /d@(7 ;! Y:@Y:@W:@+~ t! +~ W:@+~ r[@tG sG tG -! -E }g =E i0$i0$GD%1C%i0$=E =E i0$1C%GD%&E &E &E u1$Nt%Nt%GJ%GJ%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%&E &E &E &E &E &E &E &E &E &E Kv Kv Kv Eu Eu Eu =E =E =E *E *E }g }g }g tG tG tG sG sG rG rG rG :|@_|@/|@(|@[|@<|@:|@_|@_|@_|@_|@(|@(|@(|@/|@/|@W:@W:@W:@W:@W:@W:@W:@W:@;! ;! ;! ]|@]|@(7 (7 (7 ')#')#')#')#B_#B_#QT@QT@kI@1f 1f ')#QT@QT@kI@YA kI@kI@')#')#')#')#')#')#')#')#')#')#QT@))#+W@bP@@A@,p ,p :} [`@b.#8.#h@#h@#{Y@8q#$~ R^#KA@'P R~#An#+W@))#+W@w! w! !)#')#!)#QT@B_#QT@+W@w! +W@!)#Kz Kz Kz Kz +t#j[#;f#[c#.t#.t#J`%aj&f5&f5&wg#wg#'t='t=Jw&nq&Ao&G-&Gx=&h&@D=A&&1';V*;Cu=&h&nq&Fa#w! ))#!)#+W@8.#h$#$b@h$#Rm@gt@8.#+W@!)#!)#B_#kI@kI@kI@')#B_#!)#))#+W@w! +W@))#QT@B_#B_#QT@))#]M 87#_0#=g&=g&97#97#^0#87#dw dw kI@kI@')#')#lI@lI@YA WA @~ @~ ^|@@~ @~ WA a~ YA @~ /|@:|@<|@$4@vR@vR@vR@Eu Kv &E &E Kv Kv u1$Nt%Nt%u1$&E Kv vR@$4@vR@vR@$4@<|@[|@[|@:|@:|@^|@^|@^|@^|@@~ YA a~ 1f 9 9 O9 .9 @A@RT@bP@uR@uR@b.#Cv@Cv@Cv@Cv@Y=#VE@Z=#Z=#VE@P~#ir#N~#N~#O~#N~#0u#u_$85*85*qR#(X%8N=^r@75*bO=)';Wo@Wo@bO=XN=[6.=X-F4* X-PW- 6*S@.2';+=@G&;QQ==d+]q%*e@D0@i)@C{@C{@g|.g|.g|.g|.cX-cX-):.g|.cO@cO@#F[*Hq-U=#:<-_<-v4 ) B0 Vr Vr 7v #, ,p 7, /,@(,@+L@+L@O9 /d@(7 ;! Y:@Y:@Y:@+~ +~ +~ W:@+~ r[@sG sG sG tG -E }g =E i0$i0$1C%i0$=E *E *E =E i0$1C%&E &E &E u1$Nt%Nt%Nt%GJ%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%&E &E &E &E &E &E &E &E &E &E Kv Kv Kv Eu Eu Eu *E *E *E }g }g -E -E -E tG tG tG sG sG rG rG rG [|@:|@(|@_|@:|@[|@_|@(|@_|@_|@_|@(|@(|@(|@/|@/|@W:@W:@W:@W:@W:@W:@W:@W:@;! ;! ;! ]|@]|@]|@(7 (7 1f kI@kI@kI@')#')#B_#B_#1f a~ a~ kI@B_#B_#1f WA 1f 1f 1f kI@kI@')#')#')#QT@B_#B_#')#B_#QT@!)#.9 .9 n| n| ,p bP@uR@{Y@{Y@{Y@XC@@t#S~#KA@'P 'P R~#S~#QT@B_#QT@))#))#B_#kI@QT@B_#kI@')#QT@!)#QT@')#%0@%0@%0@%0@Kz C_#j[#;f#;f#[c#}c#J`%f5&wg#Ic&#b@ZC@P8#Cd#'t=Jw&Ao&G-&Gx=U*;7';8';A&&/I&Du=Ao&ZC@XC@+W@!)#+W@{Y@ p@ p@h@#Si@ p@w! QT@QT@B_#')#1f kI@kI@')#B_#QT@!)#!)#!)#+W@))#QT@B_#B_#QT@))#]M 87#F5@_0#=g&97#^0#87#87#dw dw kI@kI@')#')#lI@lI@a~ YA WA @~ @~ @~ @~ WA WA @~ ^|@(|@:|@<|@$4@vR@vR@Eu Kv &E u1$u1$&E &E Nt%Nt%Nt%Nt%u1$&E Eu vR@$4@$4@<|@[|@:|@_|@_|@(|@^|@^|@^|@^|@@~ YA a~ 1f 9 9 O9 .9 @A@bP@uR@uR@uR@b.#Cv@Cv@Cv@j$#Y=#VE@Z=#VE@VE@P~#ir#N~#O~#O~#0u#Ut&85*85*tq=pR#(p=0Q=et@VN=TO=VN=4j=)';G4*65*[6.9';`W-JA=Lk@0';+T+_}.*e@2b+2b+2b+D0@i)@dN=+=@9<@9<@b@rG sG tG -! -E *E =E =E *E *E *E *E *E *E *E *E u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%&E &E &E &E &E &E &E &E &E &E Kv Kv Kv Eu Eu Eu -E -! -! -! tG tG sG sG tG tG tG sG sG rG rG rG vR@<|@_|@_|@:|@:|@/|@@~ _|@_|@_|@(|@(|@(|@/|@/|@W:@W:@W:@W:@W:@W:@W:@W:@Y:@Y:@Y:@;! ;! ]|@]|@]|@WA WA WA YA YA a~ a~ a~ YA @~ ^|@@~ YA a~ WA ^|@^|@@~ WA a~ kI@B_#QT@!)#QT@B_#')#kI@kI@')#B_#O9 O9 +' 7, 7, .9 .9 ))#))#+W@))#:r@R~#*a&*a&*a&jt@KH#a~ a~ kI@B_#QT@')#1f kI@a~ WA WA a~ a~ YA @~ LZ$LZ$LZ$LZ$LZ$Lz dw dw xy xy ew f1#d1#/M ]M 6q#]M 6q# t#OH#MH#zg#;6#Zo@HY%LP&F.*q *Pm@s *;G=Dd# p@8.#XC@XC@8.#h@#8.#{Y@XC@))#B_#')#B_#B_#')#kI@B_#B_#')#')#kI@kI@1f 1f !)#QT@QT@QT@QT@QT@QT@d1#]0#kf&F5@_0#^0#87#]0#]0#ew ew ')#')#kI@kI@H5@H5@1f a~ YA @~ @~ ^|@@~ @~ :|@:|@[|@[|@[|@<|@<|@<|@&E u1$Nt%GJ%*L%GJ%GJ%GJ%GJ%GJ%GJ%GJ%Nt%u1$Kv Eu _|@(|@(|@/|@^|@@~ WA WA WA WA WA WA YA 1f kI@')#O9 O9 +L@@A@RT@bP@uR@[`@[`@UE@j$#j$#j$#j$#Z=#P~#P~#P~#ir#N~#O~#0u#0u#Ut&85*tq=qR#qR#pR#S2*s_$s|*/p=b=;[n b=;Js&tU=Wy=eW-H9-@W-8d*h';l_#i';j';T`%He+=d+QQ=.+;Q/@+=@dN=i)@^^@^^@):.):.):.):.k]#k]#cO@rQ@Z`+rQ@cO@cO@dO@Z`+dO@dO@cO@cO@cO@cO@cO@cO@#@l :u []#t[ 7v :} n| 36 36 .9 .9 +L@ 9 /d@(7 ]|@;! (7 Y:@+~ +~ W:@W:@t! r[@rG rG sG -! -E }g *E =E *E *E *E *E *E *E *E *E Nt%Nt%u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%&E &E &E &E &E &E &E &E &E &E Kv Kv Kv Eu Eu Eu -! -! -! tG tG sG sG sG tG tG tG sG sG rG rG rG vR@<|@_|@_|@:|@:|@/|@@~ _|@_|@_|@(|@(|@(|@/|@/|@+~ +~ +~ +~ +~ +~ +~ +~ W:@W:@Y:@Y:@;! ;! ]|@]|@@~ @~ WA WA WA YA YA YA YA @~ /|@^|@WA YA @~ ^|@^|@@~ WA a~ ')#QT@!)#))#kI@kI@kI@kI@')#QT@))#@A@O9 +' +' +' +L@+L@QT@QT@!)#!)#R~#S^#*a&*a&*a&jt@jt@1f 1f ')#QT@!)#B_#kI@a~ WA @~ @~ YA a~ WA ^|@Lz Lz LZ$LZ$LZ$Lz xy dw dw dw dw dw ew ew ew ew d1#/M 6q# t#SJ#MH#zg#Dd# l&m`&#T&F.*q *#8 ;G=;6#B&# p@8.#8.#h@# p@h@#8.#w! !)#B_#B_#!)#!)#QT@')#QT@B_#B_#')#kI@1f 1f a~ B_#QT@QT@QT@QT@QT@QT@f1#]0#F5@_0#_0#^0#^0#87#]0#f1#f1#')#')#kI@kI@0~ 0~ 1f a~ WA @~ ^|@/|@/|@/|@<|@<|@$4@$4@$4@$4@$4@$4@u1$u1$GJ%*L%*L%*L%GJ%GJ%GJ%GJ%GJ%GJ%Nt%&E Kv Eu /|@/|@^|@@~ WA WA YA YA YA YA YA YA a~ 1f ')#B_#O9 +L@.9 @A@RT@uR@[`@[`@[`@i@#j$#C&#j$#C&#Z=#ir#ir#ir#N~#O~#0u#Ut&Ut&u_$85*qR#pR#5N=^T#]T#T8 rU=/p=/p=OB=[n Fk=.6*m';H9-n';8d*o';p';9*;$e@q';R#.D0@a%;G&;[T=Q/@dN=i)@*e@9<@9<@ _1-t';Q<*u';v';k:*x3-x3-no=7u-E^-:1-Z}-*o=U=#VO-t4 wf=:u Yk Vr <} ,p n| n| @A@.9 +L@O9 /d@(7 ]|@]|@/d@;! +~ t! +~ W:@+~ X:@>b@rG sG tG -E }g *E *E *E *E =E i0$i0$=E *E *E Nt%Nt%Nt%u1$u1$u1$&E &E Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%&E &E &E &E &E &E &E &E &E &E Kv Kv Kv Eu Eu Eu -! -! -! -! tG tG sG sG tG tG tG sG sG rG rG rG $4@[|@_|@_|@:|@:|@(|@^|@_|@_|@_|@(|@(|@(|@/|@/|@+~ +~ +~ +~ +~ +~ +~ +~ W:@W:@W:@Y:@Y:@;! ;! ;! @~ @~ @~ WA WA YA YA YA YA @~ /|@/|@@~ WA WA ^|@@~ WA a~ kI@B_#!)#))#+W@')#')#')#')#QT@))#w! uR@O9 +' +' +' O9 O9 QT@QT@!)#QT@R~#S^#e`%e`%e`%S^#R~#')#kI@B_#!)#!)#B_#kI@YA @~ ^|@WA a~ 1f a~ YA xy xy Lz Lz Lz Lz xy dw ew ew ew ew dw dw dw xy /M ]M 6q# t#SJ#MH#O8#zg#;6#Dd#Y+*s *Pm@s *Yo@Dd#$b@ p@{Y@{Y@h@# p@ p@8.#w! ))#QT@!)#))#+W@!)#B_#QT@QT@B_#B_#')#kI@kI@kI@')#B_#QT@QT@QT@QT@B_#ew 87#_0#=g&=g&97#97#^0#87#e1#f1#B_#')#kI@1f 0~ I~ a~ YA @~ /|@(|@_|@_|@_|@$4@$4@vR@vR@vR@vR@Eu Eu &E u1$Nt%GJ%*L%*L%GJ%GJ%u1$u1$Nt%u1$&E Kv vR@$4@/|@^|@^|@@~ WA YA a~ a~ a~ a~ a~ a~ 1f kI@B_#QT@+L@+L@.9 @A@bP@uR@[`@b.#b.#i@#C&#C&#C&#C&#VE@ir#N~#N~#O~#0u#Ut&u_$u_$85*0u#85*5N=^T#h_*k`&0p=rU=OB=OB=OB=FA=v~-w';p_*q_*x';y';z';W[&q';QA.A';d6#&b=.+;.+;.+;+=@dN=i)@D0@C{@C{@g|.g|.g|.g|.cX-cX-g|.dO@rQ@rQ@cO@g|.cO@rQ@ 23+23+OP*x{+[f.u!=u!=HV.HV.HV.HV.HV.HV.", "cp.cp.#9.#9.PI.PI.PI.[3+|5+|5+#9.8v.VW.Hu+#9.8v.Hu+#9.cp.[3+[3+cp.#9.#9.[3+w7+|5+#9.PI.#9.aq.ph#NQ.NQ.NQ.NQ.NQ.NQ.NQ.@~.0Y+z) !W+#) #) 0Y+7!.{t.[3+[3+#9.Hu+PI.|5+'C+cp.cp.cp.cp.cp.cp.cp.{t.)W+!W+@~.@~.@~.@~.ph#ph#ym.ym.|5+|5+[3+[3+cp.cp.[3+[3+[3+|5+|5+|5+(s.(s.un.un.#) #) #) 7S.OQ.Ah.8H.;b.{_ W_ W_ {_ ;b.|x.|x.{_ W_ {_ 6}% F.6}%8H.Vl.ym.ym.bv#bv#6' 6' 6' ym.ym.bv#bv#bv#bv#ym.ym.6' 6' 6' 6' 6' 6' 6' 6' bv#bv#bv#bv#bv#6' B, ns%6' 6' 6' B, B, ns%ns%ns%ns%ns%ns%ns%ns%ns%ns%ns%'C+vA*|r%|r%|r%'C+6z+ET&|r%|r%|r%|r%|r%vA*vA*vA*|r%vA*'C+6z+6z+'C+vA*|r%vA*vA*vA*vA*vA*vA*vA*vA*DI#DI#DI#DI#DI#DI#DI#DI#DI#DI#'Z%,X@)Z%eO@@9.@9.'Z%'Z%'Z%'Z%,X@,X@,X@,X@,X@'Z%DI#DI#DI#,X@)Z%eO@:(+:(+bp.+9.bQ#o&=b,+b,+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.:(+,H.,H.:(++9.+9.bp.o&=j(#bQ#,H.q3.+9.Q+&+9.+9.+9.+9.+9.bQ#o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=b,+j(#j(#o&=+9.bp.o&=Q+&b,+b,+b,+b,+b,+b,+b,+b,++9.b,+b,++9.+9.j(#j(#+9.o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#bQ#o&=o&=o&=o&=o&=w{@j(#o&=b,+Q+&w{@j(#b,+j(#j(#j(#j(#j(#j(#j(#j(#o&=o&=o&=o&=o&=o&=o&=o&=w{@j(#o&=bQ#bQ#b,+Q+&CI#p!#DI#bQ#+9.+9.bQ#o&=b,+@:+7&+aR#zI*0}+a}+DX-o&=O4.Xo-wJ-wJ-Mj-+X-*o=_<-X,;4';b}*B';=h-k:*o7-zn-7u-IH#Kg :1-Z}-qI-u4 8>#*[ 2k=s[ e5 <} ,p ,p ,p @A@@A@.9 O9 9 (7 ]|@]|@ 9 ]|@+~ t! +~ W:@+~ t! >b@>b@rG tG -! }g *E *E *E =E i0$1C%1C%i0$=E *E GJ%Nt%Nt%Nt%u1$&E &E &E Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%&E &E &E &E &E &E &E &E &E &E Kv Kv Kv Eu Eu Eu -E -E -E -! -! tG tG tG tG tG tG sG sG rG rG rG [|@:|@(|@_|@:|@[|@_|@(|@_|@_|@_|@(|@(|@(|@/|@/|@t! t! t! t! t! t! t! t! W:@W:@W:@W:@Y:@Y:@;! ;! @~ @~ WA WA YA YA YA a~ a~ WA /|@/|@@~ WA WA @~ a~ a~ kI@')#QT@))#+W@+W@!)#!)#QT@QT@!)#))#+W@bP@+L@7, 7, 7, +L@+L@QT@QT@!)#!)#:r@R~#e`%'P 'P R~#:r@')#')#B_#QT@QT@')#a~ WA @~ @~ YA kI@B_#')#kI@(d@;8 |g |g |g |g ;8 (d@/7 a7#a7#a7#a7#a7#a7#k[#|c#.i#I,#WE@5!#Ag#Ed#Ed#:s=6!#%3#&>-0*-8N=:s=Ag#h@#{Y@w! w! {Y@h@#8.#{Y@+W@))#QT@!)#))#))#QT@kI@QT@QT@QT@B_#B_#B_#B_#B_#kI@')#QT@!)#!)#QT@')#dw 97#=g&2L=7~%)m#07#97#97#e1#e1#B_#')#kI@1f I~ I~ WA @~ /|@_|@:|@[|@[|@[|@$4@vR@vR@Eu Eu Kv &E &E &E &E u1$Nt%GJ%GJ%Nt%Nt%&E &E &E &E Kv vR@$4@<|@/|@/|@^|@@~ WA YA a~ a~ 1f a~ a~ 1f kI@')#QT@QT@+L@+L@.9 RT@bP@[`@b.#b.#b.#Cv@C&#Y=#C&#Y=#VE@ir#N~#O~#O~#0u#Ut&u_$85*85*ir#Ut&5N=S2*0Q=s_$0p=yD Rh=_A=P;;Gk=Vq C';,t D';E';>t @3+F';G';H';lq=I';&b=G&;a%;a%;dN=dN=+=@Q/@Fn=Fn=cO@cO@cO@cO@mz mz b@>b@rG tG -! -E }g *E =E i0$1C%GD%GD%1C%i0$=E GJ%GJ%Nt%Nt%u1$&E &E &E Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%&E &E &E &E &E &E &E &E &E &E Kv Kv Kv Eu Eu Eu }g }g -E -E -! -! -! tG tG tG tG sG sG rG rG rG :|@_|@/|@(|@[|@<|@:|@_|@_|@_|@_|@(|@(|@(|@/|@/|@t! t! t! t! t! t! t! t! +~ W:@W:@W:@Y:@Y:@;! ;! WA WA WA YA YA a~ a~ a~ 1f WA /|@/|@@~ YA YA WA kI@kI@')#B_#!)#))#+W@w! w! w! +W@))#!)#))#))#+W@.9 36 +L@+L@+L@+L@QT@QT@))#!)#:r@R~#R~#R~#KA@:r@QT@')#kI@')#B_#B_#1f WA WA @~ @~ a~ ')#!)#!)#QT@/7 (d@;8 ;8 |g ;8 (d@(d@a7#a7#k[#'m#b4#|c#.i#.i#I,#Xm@WE@J,#yn#Ag#Ed#Ed#M';JN#&3#E,#et@Q--%3#i@#XC@+W@!)#))#w! {Y@{Y@XC@+W@!)#QT@QT@))#!)#')#1f QT@QT@QT@QT@QT@QT@QT@QT@kI@')#QT@!)#!)#QT@')#dw 07#07#)m#!m#!m#)m#]M ]M e1#e1#B_#')#kI@1f I~ I~ WA ^|@(|@:|@[|@<|@$4@$4@$4@$4@vR@Eu Kv &E u1$u1$Kv &E u1$Nt%Nt%Nt%Nt%u1$Kv Kv Kv Kv Eu $4@<|@[|@/|@/|@^|@@~ WA YA YA a~ 1f 1f 1f 1f kI@')#QT@!)#+L@.9 @A@RT@bP@[`@b.#b.#b.#Cv@C&#Y=#C&#Y=#VE@N~#O~#O~#0u#Ut&u_$85*85*tq=VE@0u#5N=]T#k`&s_$0p=Js&FA={>;Vp L>;N';O';P';Q';x~-R';S';T';U';V';W';]0.iM#i)@D0@D0@i)@+=@vu=2;@vu=vu=dO@dO@dO@dO@/X-/X-):.g|.cO@cO@b@rG tG -! sG rG [|@[|@[|@:|@_|@(|@(|@(|@(|@(|@(|@(|@(|@(|@(|@(|@(|@/|@^|@@~ @~ @~ @~ ^|@_|@/|@@~ @~ ^|@/|@@~ YA ;! ;! ;! ;! ;! ;! ;! ;! ]|@]|@]|@]|@]|@]|@]|@]|@a~ a~ 1f ')#QT@!)#))#+W@8.#XC@+W@!)#QT@QT@!)#))#+W@@A@))#QT@B_#')#kI@kI@')#kI@1f a~ 1f kI@R~#!)#f1#dw xy xy dw dw Lz G5@G5@Lz W~#LZ$ t#d1#LZ$/M G5@dw dw LZ$Lz e1#6q#]M t#bj# t#OH#MH#MH#SJ# t#NH#g>;KN#-3#=3#>6#Wm@Wm@Qm@Yo@rR#.Y-U8 U8 ,d@8.#w! +W@))#w! XC@w! QT@kI@QT@QT@QT@QT@QT@QT@QT@QT@!)#QT@B_#B_#B_#QT@QT@!)#QT@QT@QT@QT@QT@QT@QT@QT@]M ]M ]M ]M ]M ]M +W@+W@QT@QT@B_#')#kI@1f a~ a~ @~ ^|@/|@_|@:|@<|@$4@vR@$4@$4@vR@vR@Eu Eu Eu Kv pM%*L%Nt%&E Kv Kv &E u1$Kv Kv Kv Kv Eu vR@<|@[|@r[@X:@t! W:@Y:@Y:@Y:@Y:@/d@(7 ]|@]|@(7 9 +L@@A@.9 @A@RT@bP@[`@b.#UE@i@#i@#i@#Cv@C&#Y=#VE@P~#P~#O~#Ut&u_$u_$0u#0u#u_$tq=Ut&85*5N=h_*s_$0p=Js&0p=Wk >b RY-84*Z';`'; );.);+);r0.op=@);nq=Q4%#);Q4%vu#C{@C!@C!@^^@9<@-~U.;Z+N:*uG#N:*;Z+fW=uG#uG#uG#uG#uG#uG#uG#uG#*r=uG#uG#N:*N:*vu#vu#;Z+fW=fW=;Z+;Z+vu#N:*N:*N:*tk-~U.6w=fW=;Z+vu#N:*uG#;Z+*r=sX%&r=vu#;Z+N:*sX%N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:**r=uG#vu#;Z+;Z+vu#uG#*r=dO@<^+cO@`8. fL.a, 8H.cl+8H.a, w4.v% w4.cl+cl+a, I> v% w% -J.aq.(s.(s.(s.ym.ym.ym.6' 6' bv#bv#ym.ym.(s.':+6v@ l. l.)i+#y##y##y#g~#&0+%P%#y# l. l.)i+#y#I}+N}.6z+6z+6z+6z+6z+6z+6z+ET&ET&ET&ET&6z+6z+'C+'C+ns%B, bv#ym.ym.bv#6' B, ns%FI#j4@j4@j4@ns%B, 6' B, B, ns%ns%ns%ns%FI#FI#ns%ns%ns%ns%ns%ns%ns%ns%'C+'C+vA*vA*vA*vA*|r%|r%vA*vA*vA*vA*vA*vA*vA*vA*DI#DI#DI#DI#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%DI#DI#DI#DI#DI#2p%DI#@9.$B#'Z%DI#,X@'Z%)Z%eO@)Z%DI#p!#DI#,X@eO@,X@DI#'Z%)Z%eO@)Z%DI#'Z%'Z%'Z%'Z%DI#DI#DI#DI#+9.:(+,H.:(+bQ#o&=+9.:(++9.+9.bQ#bQ#bQ#bQ#+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+o&=bQ#+9.bp.bp.+9.+9.)Z%'Z%DI#'Z%,X@)Z%,X@DI#,X@'Z%DI#p!#p!#DI#'Z%,X@+9.bQ#o&=b,+b,+o&=bQ#+9.b,+b,+o&=o&=bQ#bQ#+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=bp.+9.bQ#o&=o&=bQ#+9.bp.+9.+9.+9.o&=Q+&Q+&o&=+9.o&=b,+j(#Q+&j(#b,+o&=bQ#w{@Q+&j(#j(#b,+j(#j(#Q+&b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+j(#j(#j(#j(#j(#j(#j(#j(#n3.v5.o3.t4.t4.t4.o3.o3.v5.v5.v5.v5.v5.v5.v5.v5.jX-<{.CI#{q%XN.82-x -<(-Nj-$);,h-js-*c-pI-DQ-CQ-il-zE-~`@iA-IH#Kh *o=U=#Mh v4 s4 4##e5 7v #, d2 RT@.9 O9 O9 +L@+L@ 9 (7 (7 ;! Y:@Y:@;! Y:@+~ r[@+~ X:@rG tG -E -E -! -! *E *E =E =E =E i0$i0$i0$=E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E i0$i0$i0$=E =E =E *E *E =E =E =E *E *E }g }g }g }g }g -E -E -! -! tG tG tG sG >b@rG tG -! sG rG :|@:|@:|@:|@_|@_|@_|@_|@(|@(|@(|@(|@(|@(|@(|@(|@/|@^|@@~ WA WA WA WA @~ (|@^|@WA WA ^|@^|@WA a~ ;! ;! ;! ;! ;! ;! ;! ;! ]|@]|@]|@]|@]|@]|@]|@]|@1f kI@')#B_#!)#))#+W@w! {Y@XC@+W@!)#QT@QT@QT@!)#))#))#!)#QT@B_#')#kI@kI@kI@kI@1f 1f kI@')#B_#B_#ew xy Lz Lz xy xy Lz G5@=p@G5@cN@v! G5@Lz xy bj#dw d1#d1#ew f1#6q#vg# t#OH#OH#OH#MH#zg#Dd#O8#NH#T8#VC&8j&;d@Ia#>6#Wm@Wm@ l&m`&rR#.Y-U8 U8 yI=6u#XC@+W@))#+W@w! +W@B_#1f !)#!)#!)#!)#!)#!)#!)#!)#))#!)#QT@B_#B_#B_#QT@!)#QT@QT@QT@QT@QT@QT@QT@QT@))#))#))#))#))#))#))#))#QT@QT@B_#')#kI@a~ a~ YA ^|@/|@(|@_|@[|@<|@$4@vR@vR@vR@Eu Eu Kv Kv Kv &E pM%*L%Nt%&E Kv Kv &E &E Kv Kv Kv Kv vR@$4@[|@:|@X:@t! +~ Y:@;! ;! ;! ;! /d@(7 (7 (7 /d@ 9 +L@@A@.9 .9 @A@bP@uR@b.#UE@UE@i@#Cv@j$#C&#Z=#VE@P~#ir#N~#Ut&85*85*Ut&Ut&u_$85*tq=qR#^T#]T#t_$0p=Js&0C=FA=RY-%);HD&&);`';*);,Y-=);G6.'p#QN.-^@`#=fm#lO#cO@):.sQ@sQ@):. a, cl+cl+a, I> I> l3 ':+(s.ym.ym.bv#bv#bv#bv#6' 6' 6' 6' bv#bv#bv#B{$4=+7v@ l. l. l.)i+)i+)i+g~##y##y##y#)i+)i+)i+@[+N}.6z+6z+6z+6z+6z+6z+6z+6z+6z+6z+'C+'C+'C+vA*vA*ns%B, 6' ym.ym.ym.ym.ym.ns%FI#FI#FI#FI#ns%B, 6' bv#6' 6' B, B, ns%ns%FI#ns%ns%ns%ns%ns%ns%ns%ns%vA*vA*'C+'C+'C+'C+6z+6z+vA*vA*vA*vA*vA*vA*vA*vA*eO@)Z%)Z%'Z%DI#p!#2p%2p%DI#DI#DI#'Z%'Z%'Z%'Z%,X@,X@p!#p!#)Z%eO@DI#'Z%eO@'Z%)Z%eO@)Z%DI#p!#DI#,X@@9.)Z%,X@,X@eO@@9.eO@,X@DI#DI#DI#'Z%'Z%'Z%'Z%,X@bQ#+9.:(+bp.+9.+9.bp.,H.bQ#bQ#+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=bQ#+9.bp.bp.)Z%'Z%DI#DI#)Z%)Z%,X@DI#'Z%DI#p!#p!#p!#p!#DI#'Z%bQ#bQ#o&=b,+b,+o&=bQ#bQ#Q+&j(#j(#j(#b,+b,+b,+b,++9.bQ#bQ#o&=b,+b,+j(#j(#+9.bQ#bQ#o&=o&=bQ#bQ#+9.bQ#+9.+9.o&=j(#Q+&b,++9.j(#Q+&Q+&j(#j(#o&=bQ#+9.Q+&j(#j(#b,+j(#j(#Q+&w{@Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&b,+b,+b,+b,+b,+b,+b,+b,+j(#j(#j(#j(#j(#j(#j(#j(#o3.o3.t4.t4.t4.o3.v5.n3.v5.v5.v5.v5.v5.v5.v5.v5.b}+u*=CI#YT#Wh@[j=at-hE=@i-HL-yD--);g,;xn-76-CQ- p-+j-'`@iA-IH#Kh Z}-6o=:<-7(-g$#ub vb e5 `3 d2 .9 O9 /d@ 9 +L@+L@O9 /d@(7 ;! Y:@;! ]|@;! +~ r[@+~ X:@rG tG -E -E -! -! *E *E =E =E =E i0$i0$i0$=E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E i0$i0$i0$=E =E =E *E *E =E =E =E *E *E }g }g }g }g }g -E -E -! -! tG tG tG sG >b@rG tG -! sG rG _|@_|@_|@_|@:|@:|@:|@:|@^|@^|@^|@^|@^|@^|@^|@^|@^|@@~ WA YA YA YA YA WA ^|@WA a~ YA WA @~ YA 1f ]|@]|@]|@]|@]|@]|@]|@]|@;! ;! ;! ;! ;! ;! ;! ;! kI@')#B_#QT@!)#+W@w! w! w! +W@))#QT@B_#B_#B_#B_#QT@QT@QT@B_#')#kI@1f 1f a~ 1f kI@')#')#')#')#kI@dw Lz G5@LZ$Lz xy LZ$=p@yK Lz f1#e1#]M t#bj#6q#/M bj#bj#]M bj#LH#O8#SJ#MH#MH#MH#zg#Zo@Z+*Zo@=3#>6#qs=qs=qs=>6#>6#>6#>6#Zo@Y+*_f@rR#Pl&U8 ty EP#8.#XC@+W@+W@+W@))#')#a~ !)#!)#!)#!)#!)#!)#!)#!)#+W@))#!)#QT@B_#B_#QT@QT@QT@QT@QT@QT@QT@QT@QT@QT@!)#!)#!)#!)#!)#!)#!)#!)#!)#QT@B_#')#1f a~ WA WA (|@(|@_|@[|@<|@$4@vR@Eu Kv Kv Kv &E &E u1$u1$u1$pM%*L%Nt%u1$&E Kv &E &E &E Kv Kv Eu vR@[|@_|@(|@t! +~ Y:@;! ]|@]|@]|@]|@/d@(7 (7 /d@ 9 O9 .9 @A@+L@.9 @A@RT@uR@[`@b.#b.#Cv@j$#C&#Y=#Z=#P~#ir#ir#ir#0u#tq=tq=85*u_$u_$85*pR#(X%S2*k`&s_$0p=Js&@' rg*Wh-D[*AQ-sk--h-yx=dS-Vh./W%~U.uG#Q+&S`%JP-JP-):.<(+h;#sQ@):.g|.g|.);F3-.p-9X-2m*il-'`@iA-E^-Kh *o=6o=U=#Q_-@l s4 s[ vb 7v #, +L@ 9 /d@ 9 O9 +L@O9 /d@(7 ]|@;! ;! ]|@;! +~ X:@+~ X:@rG tG -E -E -! -! *E *E =E =E =E i0$i0$i0$=E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E i0$i0$i0$=E =E =E *E *E =E =E =E *E *E }g }g }g }g }g -E -E -! -! tG tG tG sG >b@rG tG -! sG rG (|@(|@(|@_|@:|@[|@[|@[|@^|@^|@^|@^|@^|@^|@^|@^|@@~ @~ YA a~ a~ a~ YA YA WA a~ 1f 1f YA WA a~ kI@]|@]|@]|@]|@]|@]|@]|@]|@;! ;! ;! ;! ;! ;! ;! ;! kI@kI@')#B_#QT@!)#))#+W@))#))#!)#QT@B_#')#')#kI@B_#')#')#kI@kI@1f 1f a~ WA a~ kI@')#B_#')#kI@1f xy LZ$=p@G5@Lz Lz LZ$=p@G5@LZ$e1#]M ]M SJ#MH#]M bj#OH#OH# t#LH#;6#Zo@O8#Dd#zg#O8#Dd#Z+* l&Z+*>6#2j=O**9j&qs=Ia#Ia#=3#=3#zg# l&,d@Dt=%h@Pl&ty [Q%$b@h@#{Y@XC@w! +W@QT@kI@))#))#))#))#))#))#))#))#w! +W@!)#QT@B_#B_#B_#B_#QT@QT@QT@QT@QT@QT@QT@QT@QT@QT@QT@QT@QT@QT@QT@QT@))#!)#QT@')#a~ WA @~ ^|@:|@:|@[|@<|@$4@vR@Eu Eu &E &E &E u1$u1$Nt%Nt%Nt%*L%GJ%Nt%u1$&E &E Kv Kv Kv Kv Eu vR@$4@:|@(|@/|@+~ W:@;! ]|@(7 /d@(7 (7 (7 /d@/d@ 9 O9 +L@.9 .9 +L@+L@.9 RT@bP@[`@b.#b.#j$#j$#C&#Z=#VE@ir#N~#N~#ir#Ut&tq=qR#tq=u_$u_$u_$5N=^T#]T#k`&+6*t_$0p=@' 6L=bN=3'*Xt*sk-qK=Jj-I<*=Z+b@rG tG -! sG rG (|@(|@(|@_|@:|@[|@[|@[|@^|@^|@^|@^|@^|@^|@^|@^|@@~ @~ YA a~ a~ a~ YA YA YA 1f kI@1f YA WA a~ 1f ]|@]|@]|@]|@]|@]|@]|@]|@;! ;! ;! ;! ;! ;! ;! ;! 1f 1f kI@kI@')#B_#B_#QT@QT@QT@QT@B_#')#kI@1f a~ 1f 1f 1f 1f a~ a~ a~ a~ WA YA 1f ')#')#')#1f a~ Lz G5@=p@G5@Lz xy LZ$G5@/M yK =p@xy W~#ew SJ#]M t#OH#OH#OH#Dd#Y+*Y+*;6#Zo@Dd#O8#zg#Zo@Z+*Zo@Ia#2j=9j&qs=');=3#T8#KN#KN#LH#;6#FN#FN#,d@_f@yI=[Q%gt@$b@8.#{Y@{Y@XC@))#QT@!)#!)#!)#!)#!)#!)#!)#!)#))#!)#QT@B_#')#')#B_#B_#QT@QT@QT@QT@QT@QT@QT@QT@QT@QT@QT@QT@QT@QT@QT@QT@+W@))#QT@kI@a~ @~ /|@(|@<|@<|@$4@vR@vR@Eu Kv Kv &E u1$u1$u1$Nt%Nt%GJ%GJ%GJ%GJ%GJ%Nt%u1$&E Kv Eu vR@vR@vR@$4@<|@:|@(|@/|@W:@Y:@;! (7 /d@/d@/d@/d@(7 /d@ 9 O9 +L@.9 .9 .9 +L@.9 @A@RT@uR@[`@b.#UE@C&#C&#Y=#VE@P~#N~#O~#O~#N~#Ut&qR#qR#tq=u_$85*tq=5N=(p=]T#0Q=k`&+6*0p=b:*eE=));G,;!);~);(&;7L=8k.L|@n)@cO@r4.sQ@k3.zU-!Z%<(+h;#h;#<(+b@rG tG -! sG rG _|@_|@_|@_|@:|@:|@:|@:|@^|@^|@^|@^|@^|@^|@^|@^|@^|@@~ WA YA YA YA YA WA YA 1f kI@1f YA WA YA a~ ;! ;! ;! ;! ;! ;! ;! ;! Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@a~ a~ 1f 1f kI@')#')#')#')#')#')#')#kI@1f YA WA YA YA YA YA YA YA YA YA WA YA a~ 1f kI@kI@1f 1f Lz G5@=p@G5@xy dw xy LZ$ew yK Z+*q *m`&bj# t#ew bj#vg#OH#LH# l&iR&iR&Qm@Qm@Zo@zg#zg#;6#Zo@;6#-3#Ia#');;d@VC&KN#g%&gy#gy# t#MH#gt@B&#gt@FN#'G +z>@h$#8.#XC@XC@XC@+W@))#QT@QT@QT@QT@QT@QT@QT@QT@B_#')#kI@kI@kI@')#')#B_#QT@QT@QT@QT@QT@QT@QT@QT@!)#!)#!)#!)#!)#!)#!)#!)#w! ))#QT@kI@YA ^|@(|@_|@vR@vR@vR@Eu Kv Kv &E &E &E &E u1$u1$u1$Nt%Nt%Nt%GJ%GJ%GJ%GJ%Nt%&E Kv Eu <|@<|@<|@<|@[|@:|@(|@/|@W:@Y:@;! ]|@(7 /d@/d@(7 (7 /d@ 9 +L@.9 .9 .9 .9 @A@@A@RT@bP@[`@b.#UE@i@#Y=#Y=#Z=#P~#ir#N~#O~#0u#Ut&85*tq=tq=u_$u_$tq=pR#5N=S2*k`&+6*k`&s_$yD %D=^);/);();_);:);<);+f.xA+G .D7.l3.TF+l3.t5.$:+52..9.<(+<(+):.cO@dO@g|.):.g|.g|.;n>;$5-xn-Yx-il-#i-On=IH#Kg :1-:1-6o=86-t4 wf=7J@vb `3 UE@uR@@A@.9 @A@.9 9 ]|@ 9 (7 ]|@]|@(7 (7 Y:@t! +~ X:@rG tG -E -E -! -! *E *E =E =E =E i0$i0$i0$=E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E i0$i0$i0$=E =E =E *E *E =E =E =E *E *E }g }g }g }g }g -E -E -! -! tG tG tG sG >b@rG tG -! sG rG :|@:|@:|@:|@_|@_|@_|@_|@(|@(|@(|@(|@(|@(|@(|@(|@/|@^|@@~ WA WA WA WA @~ YA 1f kI@1f WA @~ WA YA W:@W:@W:@W:@W:@W:@W:@W:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@1f kI@kI@kI@')#')#')#')#kI@kI@')#')#kI@a~ WA @~ WA WA WA WA WA WA WA WA a~ a~ YA YA a~ 1f kI@kI@xy LZ$G5@LZ$dw ew dw Lz LZ$G5@jV=cU&jV=vg#6q#/M bj#vg#SJ#zg#Yo@Qk@LP&;G=;G=Qm@Zo@Dd#;6#;6#Dd#-3#T8#@A&g>;}Q%gy#cj#cj#!m#]M OH#h$#8.#8.#$b@`o@-)#h$#8.#w! +W@+W@w! +W@))#')#')#')#')#')#')#')#')#a~ a~ a~ a~ 1f kI@')#B_#QT@QT@QT@QT@QT@QT@QT@QT@))#))#))#))#))#))#))#))#w! +W@QT@kI@WA /|@_|@[|@Eu Eu Kv Kv &E &E &E &E Kv Kv &E &E u1$u1$Nt%Nt%Nt%GJ%GJ%GJ%Nt%u1$Kv vR@_|@:|@:|@[|@[|@:|@_|@_|@+~ W:@Y:@]|@(7 (7 (7 (7 (7 /d@O9 .9 @A@@A@.9 .9 RT@RT@bP@[`@b.#i@#Cv@Cv@Y=#Z=#VE@P~#N~#O~#0u#Ut&}n 6v 6v cw A_#/m >p J[$J[$Yp /p=/p=/p=6U%6L=:A=});|);1);2);3);4);T:*n_#P/@5);J{+uu=B6.{0+Sa.='.`8.-;Z+&r=vu#vu#vu#vu#vu#vu#vu#vu#;Z+vu#uG#*r=*r=uG#vu#;Z+N:*N:*uG#*r=*r=uG#N:*N:*uG#uG#uG#uG#uG#uG#uG#uG#&r=*r=N:*vu#vu#N:**r=&r=&r=&r=&r=*r=*r=*r=*r=*r=&r=*r=uG#N:*N:*uG#*r=&r=&r=*r=N:*vu#vu#N:**r=&r=S`%*r=N:*N:**r=&r=N:*;Z+&r=uG#N:*uG#&r=sX%&r=uG#sX%&r=&r=*r=uG#uG#N:*N:*&r=&r=*r=*r=uG#N:*vu#vu#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#*r=*r=*r=*r=*r=*r=*r=*r=&r=*r=N:*uG#&r=sX%*r=N:*uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*N:**r=uG#N:*vu#vu#N:*uG#*r=vu#vu#vu#N:*uG#*r=&r=&r=*r=uG#vu#N:**r=&r=*r=N:*&r=uG#vu#vu#uG#uG#vu#fW=fW=;Z+vu#N:*N:*vu#;Z+m}+uq*5,+mO#IV.j(+IV.mO#jM#jM#jM#mO#k4@k4@k4@mO#mO#Av&Bv&B9.Bv&&, 0, &, Av&Bv&ZQ.Av&&, Av&ZQ.Bv&B9.8P.B9.ZQ.Av&Av&Av&Bv&Bv&&, &, &, &, &, &, &, &, 1.+HV.u!=[f.x{+OP*23+US+[f.[f.[f.[f.[f.[f.", "$9.l#@{t.{t.{t.{t.{t.{t.l#@6!.Y6.H;@6!.l#@aq.[3+cp.#9.PI.#9.cp.|5+w7+[3+|5+|5+w7+|5+|5+[3+cp.j}+U/ `^ U/ )W+{b+)W+21.21.ph#un.un.ph#ph#ZT#B, Hu+Hu+PI.#9.#9.cp.[3+[3+cp.[3+|5+w7+w7+|5+[3+cp.a, w4.fL.fL.fL.a, cl+xj+cl+xj+xj+8H.w4.fL.a, cl+l3 l3 -J.-J.':+':+':+Vl.-J.-J.':+':+Vl.B{$B{$8H.6}%O9.O9.|x.|x.;b.;b.{_ |x.|x.|x.O9.O9.6}% F.l`.A{$6' 6' 6' 6' 6' 6' 6' ym.ym.ym.bv#bv#6' 6' 6' A{$DU%sv%QU+&c%QU+sv%DU%sv%DU%A{$B{$Vl.B{$A{$#0+@u%@u%EI#j4@ns%B, 6' bv#ns%ns%ns%ns%ns%ns%ns%ns%'C+'C+vA*vA*|r%Gu+Gu+(W%vA*vA*vA*vA*vA*vA*vA*vA*)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%@9.eO@eO@)Z%,X@,X@'Z%'Z%,X@p!#p!#)Z%eO@'Z%'Z%eO@'Z%)Z%eO@)Z%DI#p!#DI#,X@p!#,X@eO@)Z%DI#p!#'Z%eO@@9.eO@eO@)Z%,X@,X@'Z%'Z%0q.:(+bQ#+9.:(+:(++9.b,+:(++9.bQ#b,+b,+bQ#+9.:(+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.bp.:(+bp.bQ#b,+j(#DI#p!#2p%DI#)Z%@9.eO@)Z%DI#'Z%,X@)Z%)Z%,X@'Z%DI#j(#o&=bQ#+9.+9.bQ#o&=j(#+9.+9.bQ#bQ#o&=b,+b,+b,+bQ#bQ#bQ#bQ#+9.+9.+9.+9.Q+&j(#o&=bQ#bQ#o&=j(#Q+&j(#bQ#bp.bp.bQ#b,+j(#b,+CI#Q+&b,+o&=bQ#bQ#o&=b,+j(#j(#o&=bQ#+9.+9.+9.bQ#b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+j(#j(#j(#j(#j(#j(#j(#j(#h;#n3.v5.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.,H.S`%2p%$B#,X@R]$4B&6) Gi=s^+6);&x-7);zk-,);C0-*c-pI-2m*&x-Tj-NC-+p-6k :1-qI-u4 8>#z_#:u vb `3 Cv@b.#bP@RT@@A@.9 9 ]|@ 9 (7 ]|@]|@(7 (7 Y:@t! +~ X:@rG tG -E -E -! -! *E *E =E =E =E i0$i0$i0$=E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E i0$i0$i0$=E =E =E *E *E =E =E =E *E *E }g }g }g }g }g -E -E -! -! tG tG tG sG >b@rG tG -! sG rG [|@[|@[|@:|@_|@(|@(|@(|@(|@(|@(|@(|@(|@(|@(|@(|@(|@/|@^|@@~ @~ @~ @~ ^|@YA a~ 1f a~ @~ ^|@@~ WA +~ +~ +~ +~ +~ +~ +~ +~ Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@')#')#')#B_#B_#B_#B_#B_#1f 1f kI@kI@1f YA @~ ^|@@~ @~ @~ @~ WA WA WA WA 1f a~ WA WA WA a~ kI@')#xy Lz LZ$Lz ew f1#ew dw d1#LZ$&V=8);~l=^Y@ew Z+* t#OH#LH#Dd#iR&JP&s *jR&jR&Yo@ l&;6#;6#;6#Dd#T8#g%&}Q%h>;h%&cj#!m#)m#07#d1# t#8.#w! +W@8.#-)#W=#h@#w! !)#QT@!)#))#))#!)#kI@kI@kI@kI@kI@kI@kI@kI@WA @~ WA WA a~ kI@')#QT@QT@QT@QT@QT@QT@QT@QT@QT@+W@+W@+W@+W@+W@+W@+W@+W@w! +W@QT@kI@WA /|@:|@[|@Kv Kv Kv &E &E &E u1$u1$Kv Kv Kv &E &E u1$u1$u1$Nt%GJ%GJ%*L%GJ%u1$Eu vR@/|@(|@_|@:|@[|@[|@:|@:|@t! +~ Y:@;! ]|@]|@]|@]|@(7 /d@O9 .9 @A@@A@.9 .9 bP@bP@uR@b.#UE@Cv@j$#j$#Z=#Z=#VE@ir#N~#0u#Ut&Ut&>p >p }n A_#|n /m D,#;c ;c /o 6U%0C=6U%Z4-^|$HD=/);9);0);]&;a);b);c);8M#q~.d);e);Lt=f);3[#Fo.Sa.s}+g|.g|.dO@Z`+rQ@g|..9.rQ@dO@cO@-kS.fW=&r=vu#vu#vu#vu#vu#vu#vu#vu#;Z+vu#uG#*r=*r=uG#vu#;Z+;Z+vu#uG#*r=*r=uG#vu#;Z+uG#uG#uG#uG#uG#uG#uG#uG#&r=*r=N:*vu#vu#N:**r=&r=*r=*r=*r=*r=&r=&r=&r=&r=CI#sX%&r=*r=*r=&r=sX%CI#&r=*r=N:*vu#vu#N:**r=&r=S`%*r=N:*N:**r=&r=N:*fW=uG#vu#;Z+N:*&r=sX%&r=*r=CI#S`%sX%&r=*r=uG#N:*N:*S`%sX%&r=*r=uG#vu#;Z+;Z+uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#&r=&r=&r=&r=&r=&r=&r=&r=&r=uG#vu#N:**r=&r=*r=N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:*N:**r=uG#vu#;Z+;Z+vu#uG#*r=6w=fW=;Z+vu#uG#*r=&r=&r=S`%&r=uG#uG#*r=*r=N:*;Z+&r=uG#vu#vu#uG#uG#vu#fW=6w=fW=;Z+vu#vu#;Z+fW=xE#xr*jM#k4@j(+p2@j(+k4@jM#IV.IV.IV.IV.k4@mO#jM#5,+ZQ.B9.8P.Bv&Av&0, &, ZQ.&, 0, 0, 0, Av&Bv&4p=Y*;NA.4p=B9.ZQ.Av&ZQ.Bv&Bv&Av&Av&Av&Av&Av&Av&Av&U*@[f.[f.[f.[f.[f.[f.[f.[f.[f.[f.[f.[f.[f.[f.", "j}+j}+j}+j}+j}+j}+j}+{t.{t.{t.{t.{t.{t.{t.{t.Hu+PI.cp.|5+|5+|5+[3+cp.cp.cp.cp.cp.cp.cp.cp.cp.l#@l#@l#@l#@l#@l#@l#@l#@$9.l#@aq.ym.bv#bv#ym.ym.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.[3+|5+w7+w7+w7+fL.fL.I> I> fL.w4.a, 8H.a, a, a, a, a, a, a, a, 8H.8H.8H.8H.8H.8H.8H.8H.v% cl+Eo+w*$8H.I> I> a, Hs .o ]_ ({ .o o3 ac y{ ac ed ed ed ac .o ]_ EV.{D un.i4@yn*yn*i4@ph#{b+i4@ZT#un.ZT#TE&TE&ZT#{b+B{$cl+l`.OJ.l`.l`.l`.OJ.l`.l`.xj+cl+cl+xj+l`.DU%ns%ns%ns%ns%ns%ns%ns%ns%6' bv#bv#B, FI#FI#6' (s.|r%vA*'C+6z+ET&ET&ET&6z+6z+6z+6z+'C+vA*|r%|r%|r%p!#p!#p!#DI#DI#'Z%'Z%'Z%'Z%'Z%,X@,X@)Z%eO@eO@@9.DI#'Z%'Z%'Z%,X@,X@)Z%)Z%,X@,X@,X@)Z%)Z%eO@eO@eO@p!#p!#p!#DI#'Z%'Z%,X@,X@)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%+9.bp.:(+,H.:(+bp.bQ#o&=b,++9.,H.,H.+9.o&=b,+o&=bp.:(+q3.,H.bp.+9.:(+q3.bQ#+9.bp.:(+bp.+9.o&=j(#'Z%DI#2p%qK#qK#2p%DI#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%+9.bQ#o&=j(#j(#o&=bQ#+9.bQ#o&=j(#w{@w{@j(#o&=bQ#o&=o&=bQ#bQ#+9.bp.bp.bp.+9.+9.+9.+9.+9.bQ#bQ#bQ#b,+b,+b,+b,+b,+b,+b,+b,++9.+9.bQ#bQ#o&=b,+b,+j(#Q+&j(#j(#b,+b,+o&=o&=bQ#+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#o&=b,+b,+j(#j(#b,+b,+j(#Q+&j(#bQ#:(+t4.o3.o3.v5.v5.o3.o3.t4.t4.t4.t4.t4.t4.t4.t4.t4.bQ#bQ#bQ#'Z%'Z%]Z@]Z@d3+T[&g);r=-76-B`+Sj-Qj-h);1,;*c-MC-il-Tj-On=6k Kg Kg Z}-N^#VO-*[ R3 7J@[]#RT@RT@RT@RT@@A@+L@O9 9 /d@/d@(7 (7 ]|@;! Y:@Y:@t! X:@r[@rG tG -E }g *E }g }g }g *E *E =E =E =E *E *E =E =E =E i0$i0$i0$=E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E }g }g *E *E *E *E =E =E -! -! -! tG tG tG sG sG sG sG sG sG sG sG sG sG <|@<|@[|@[|@:|@:|@:|@:|@^|@^|@^|@^|@^|@^|@^|@^|@YA YA YA YA YA WA WA WA kI@1f a~ YA WA @~ ^|@^|@Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@]|@]|@;! Y:@Y:@Y:@;! ;! YA a~ a~ 1f kI@kI@')#')#1f a~ a~ YA YA a~ a~ 1f @~ @~ WA WA YA a~ a~ 1f 1f 1f kI@kI@')#')#B_#B_#ew dw dw dw xy xy Lz Lz ]M t#SJ#LH#LH#LH#MH#zg# l&;6#MH#;6#~l=E.*r *~l=IP&jR&Qm@;6#Dd#Dd#Dd#-3#=3#}Q%2L=kf&87#97#07#07#d1#/M ))#))#+W@+W@Dv@Dv@w! w! ))#!)#B_#')#kI@1f kI@kI@1f 1f a~ YA YA WA YA a~ a~ 1f kI@')#')#B_#kI@')#')#B_#!)#))#))#+W@w! w! XC@h@#h$#h$#{Y@+W@XC@))#kI@YA @~ /|@[|@$4@Kv Kv Kv Kv Kv Kv Kv Kv &E &E &E u1$Nt%Nt%GJ%GJ%Nt%GJ%pM%g`%pM%Nt%Kv vR@$4@<|@<|@$4@<|@[|@/|@@~ t! +~ W:@Y:@]|@(7 /d@/d@(7 /d@/d@ 9 O9 +L@.9 .9 uR@[`@b.#UE@Cv@j$#C&#C&#Y=#Z=#VE@ir#N~#0u#Ut&u_$6v ,<-,<-,<-#)#$)##D=Q*#y' -1-Ho=Ho=x8-|6-Wh-n7*bt@i);j);k);l);5[#m);n);n=+o);e);3[#|3.Z8.+c.,f.l3.):. fL.w4.a, 8H.a, a, a, a, a, a, a, a, w4.w4.w4.w4.w4.w4.w4.w4.v% 8H.vv+vv+8H.fL.w4.8H.Hs .o Hs ({ Hs =5 ac .s.Hs Hs Hs Hs .o .o .o Es {D ZT#TE&yn*yn*TE&un.ph#un.ph#{b+un.i4@TE&ZT#{D a, 8H.xj+l`.l`.xj+xj+xj+l`.l`.xj+cl+cl+xj+l`.l`.DU%ns%ns%ns%ns%ns%ns%ns%B, 6' 6' ns%j4@FI#B, ym.|r%vA*'C+6z+ET&ET&ET&6z+'C+'C+'C+'C+vA*vA*vA*vA*DI#DI#DI#'Z%'Z%,X@,X@,X@,X@,X@,X@,X@)Z%)Z%)Z%)Z%'Z%'Z%'Z%'Z%,X@,X@)Z%)Z%'Z%'Z%'Z%,X@,X@)Z%)Z%)Z%p!#p!#DI#DI#'Z%'Z%,X@,X@)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%+9.bp.:(+,H.:(+bp.bQ#o&=b,++9.,H.,H.+9.o&=b,+o&=o&=+9.bp.+9.o&=o&=bQ#bp.bQ#+9.bp.bp.bp.bQ#o&=b,+'Z%DI#p!#2p%2p%p!#DI#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%+9.bQ#o&=b,+b,+o&=bQ#+9.b,+b,+o&=o&=o&=o&=b,+b,+b,+o&=o&=o&=bQ#+9.+9.+9.o&=o&=o&=bQ#bQ#bQ#bQ#bQ#b,+b,+b,+b,+b,+b,+b,+b,+bQ#bQ#bQ#o&=o&=o&=o&=o&=j(#j(#j(#b,+b,+o&=o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=b,+b,+b,+b,+j(#b,+o&=j(#Q+&Q+&o&=bp.t4.o3.o3.v5.v5.o3.o3.t4.t4.t4.t4.t4.t4.t4.t4.t4.bQ#bQ#bQ#bQ#'Z%'Z%'Z%]Z@{q%WV#p);ej.Pi m=;BG-8X-:>;v7-xJ-(1-ls-Kh F[*6k 6k F[*9>#u4 Bu=wf=:u 7J@uR@uR@bP@RT@@A@+L@ 9 /d@ 9 /d@/d@(7 ]|@;! Y:@Y:@+~ t! X:@>b@sG -! -E }g }g }g }g *E *E =E =E =E *E *E =E =E =E i0$i0$i0$=E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E *E *E *E *E *E *E *E *E -! -! -! tG tG tG sG sG sG sG sG sG sG sG sG sG <|@<|@[|@[|@:|@:|@:|@_|@^|@^|@^|@^|@^|@^|@^|@^|@WA WA WA WA YA YA YA YA kI@1f 1f a~ YA WA @~ ^|@Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@;! ;! Y:@W:@Y:@Y:@;! ]|@1f 1f 1f kI@kI@kI@kI@kI@kI@1f a~ a~ a~ a~ 1f kI@YA YA YA a~ a~ a~ a~ a~ 1f kI@kI@kI@kI@kI@kI@')#Lz xy xy dw dw ew ew ew dw d1# t#SJ#LH#O8#;6#Z+*Yo@iR&jR&iR&]#*#8 F.*JP LP&iR&m`&Y+*Qm@Z+*Ia#Ia#g>;7~%_0#^0#97#07#07#e1#e1#QT@!)#!)#))#^J ^J ))#))#!)#B_#')#1f a~ a~ a~ a~ a~ YA YA WA WA WA @~ WA YA a~ 1f kI@')#B_#')#B_#B_#QT@!)#))#+W@w! w! w! XC@8.#h$# p@XC@))#))#')#YA /|@(|@:|@$4@Kv Kv Kv Kv Kv Kv Kv Kv Kv &E &E u1$u1$Nt%Nt%GJ%GJ%u1$GJ%*L%pM%*L%u1$Eu vR@$4@<|@<|@<|@[|@:|@/|@@~ t! +~ W:@Y:@]|@(7 /d@ 9 /d@/d@ 9 O9 +L@.9 .9 @A@[`@[`@b.#UE@Cv@j$#C&#Y=#VE@VE@P~#N~#O~#Ut&u_$}n Bu=Bu=Bu=&[ #)##D=Q*#y' =1-$D=Y4-o7-Ur =h-Vi-WO=q);|);1);r);,5*nu&}'*:4#UF+o);t5.{0+B6.3[#Sa.Sa.`8.g|.g|.cO@dO@rQ@Z`+Z`+M:*Z`+Z`+rQ@dO@cO@g|. nh.u`.x{+OP*u!=u!=OP*x{+u`.[f.[f.[f.[f.[f.[f.", "j}+j}+j}+j}+j}+j}+j}+l#@l#@l#@l#@l#@l#@l#@l#@PI.#9.cp.[3+[3+[3+[3+cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.Hu+PI.#9.[3+|5+|5+|5+[3+cp.cp.cp.cp.cp.cp.cp.cp.|5+|5+|5+|5+[3+[3+[3+[3+w4.w4.fL.fL.fL.w4.a, 8H.a, a, a, a, a, a, a, a, W_ W_ W_ W_ W_ W_ W_ W_ n3 ;b.uq.uq.|x.{_ ;b.O9.]_ ui ti `Y pj fd 5[ `Y pj YY `Y `Y YY ti 5[ .^ lP OQ.7) 7;@7;@6S.OQ.7S.NQ.@~.!W+@~.7S.7) OQ.sS a, ;b.|x.O9.6}%6}%O9.O9. F.6}%6}%O9.O9.6}%6}%l`.DU%ns%ns%ns%ns%ns%ns%ns%ns%B, B, ns%j4@j4@ns%6' vA*'C+6z+ET&ET&ET&6z+6z+vA*vA*vA*vA*'C+'C+'C+'C+'Z%'Z%'Z%,X@,X@)Z%)Z%)Z%)Z%)Z%)Z%,X@,X@,X@,X@'Z%'Z%'Z%'Z%,X@,X@)Z%)Z%)Z%DI#DI#DI#'Z%'Z%,X@,X@,X@DI#DI#DI#'Z%'Z%'Z%,X@,X@)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%bp.bp.:(+:(+:(++9.bQ#bQ#b,++9.,H.,H.+9.o&=b,+o&=o&=+9.bp.+9.o&=o&=bQ#bp.+9.+9.bp.bp.+9.bQ#o&=b,+,X@'Z%DI#DI#DI#DI#'Z%,X@'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%bQ#bQ#o&=b,+b,+o&=bQ#bQ#j(#o&=+9.:(+:(++9.o&=j(#b,+b,+b,+o&=o&=o&=bQ#bQ#j(#j(#b,+b,+o&=bQ#bQ#bQ#b,+b,+b,+b,+b,+b,+b,+b,+o&=o&=o&=o&=o&=bQ#bQ#bQ#j(#j(#j(#b,+b,+o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+j(#j(#j(#j(#b,+b,+b,+b,+b,+o&=bQ#b,+Q+&w{@j(#bQ#t4.o3.o3.v5.v5.o3.o3.t4.t4.t4.t4.t4.t4.t4.t4.t4.'Z%'Z%bQ#bQ#bQ#bQ#bQ#'Z%p!#YT#s);/U=Tj-Lj 6o-.i-E3-F3-*c-pI-Va-Kh F[*S<*4) Kg 8u-eS-#)#*[ 2k=:u i@#UE@[`@bP@@A@+L@ 9 /d@ 9 9 /d@(7 ]|@;! ;! Y:@W:@+~ t! r[@rG sG -! -E }g }g }g *E *E =E =E =E *E *E =E =E =E i0$i0$i0$=E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E i0$i0$=E *E *E }g -E -E -! -! -! tG tG tG sG sG sG sG sG sG sG sG sG sG [|@[|@[|@:|@:|@_|@_|@_|@^|@^|@^|@^|@^|@^|@^|@^|@^|@@~ @~ WA YA YA a~ a~ kI@1f 1f a~ YA WA WA @~ Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@W:@W:@W:@W:@Y:@;! ]|@(7 ')#')#')#')#kI@kI@kI@kI@')#kI@1f 1f 1f 1f kI@')#kI@kI@kI@1f 1f 1f a~ a~ kI@kI@kI@1f 1f 1f 1f 1f LZ$Lz xy dw f1#e1#d1#/M xy e1# t#SJ#MH#O8#Dd#Zo@;G=s *hR&s *#T&]#*#8 F.*r *s *]#*jR&iR&;G=Qm@>6#Ia#@A&-k&=g&97#97#97#^0#ew ew ')#B_#B_#QT@]C@]C@QT@B_#')#kI@1f YA YA WA WA WA WA WA @~ @~ @~ @~ /|@^|@@~ YA a~ kI@')#')#QT@!)#!)#))#+W@w! w! XC@w! +W@w! 8.#h@#8.#+W@QT@kI@YA (|@:|@<|@$4@Kv u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%GJ%GJ%u1$u1$Nt%GJ%Nt%&E vR@$4@<|@$4@<|@<|@:|@(|@^|@@~ +~ +~ W:@;! ]|@(7 /d@ 9 /d@ 9 9 O9 +L@.9 @A@@A@[`@b.#UE@i@#j$#C&#Y=#Z=#ir#N~#N~#0u#Ut&u_$85*6v z_#S3 T3 8>#VO-6J@N^#@p-zn-CX-M^#(X-h}*UZ-t);u);v);w);W*#x);$R+y);z);A);A.@UF+s}+A6.r4.ot+%1.k;.rQ@rQ@rQ@rQ@rQ@rQ@rQ@rQ@Z`+Z`+rQ@dO@cO@g|.g|.g|.uG#uG#uG#N:*N:*vu#vu#vu#&r=*r=N:*;Z+;Z+vu#N:*uG#*r=*r=uG#N:*N:*uG#*r=*r=N:*N:*N:*N:*N:*N:*N:*N:*uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#N:*vu#;Z+vu#uG#*r=uG#vu#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*vu#vu#vu#op=y9.y9.y9.y9.op=4|#4|#op=op=op=op=op=4|#4|#4|#vu#N:*N:*uG#uG#N:*N:*vu#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*uG#uG#uG#*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#sX%*r=N:*uG#*r=*r=uG#vu#uG#*r=&r=sX%sX%&r=*r=uG#uG#uG#uG#uG#N:*N:*N:*N:*N:*vu#;Z+N:*&r=S`%S`%&r=*r=*r=uG#N:*N:*uG#uG#*r=uG#uG#uG#uG#uG#uG#uG#uG#vu#vu#N:*N:*N:*N:*uG#uG#*r=N:*vu#N:**r=*r=uG#vu#uG#uG#N:*N:*uG#*r=sX%sX%S`%uG#N:*&r=&r=N:*uG#S`%vu#vu#N:*uG#*r=*r=&r=&r=uG#uG#uG#uG#uG#uG#uG#uG#N:*uG#*r=*r=*r=*r=uG#N:**r=uG#uG#uG#N:*N:*N:*N:**r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*vu#vu#;Z+^u=uq*5,+jM#jM#5,+5,+jM#k4@j(+IV.k4@j(+k(+k(+j(+mO#0, 0, &, Av&Av&ZQ.Bv&Bv&B9.B9.B9.8P.8P.8P.8P.4p=..=x{+OP*OP*OP*OP*x{+[f.u`.u`.u`.u`.u!=OP*';$u]#[f.23+OP*HV.HV.OP*23+[f.x{+x{+x{+x{+x{+x{+", "j}+j}+j}+j}+j}+j}+j}+l#@l#@l#@l#@l#@l#@l#@l#@cp.cp.cp.[3+[3+[3+cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.[3+[3+[3+[3+[3+[3+[3+[3+PI.PI.#9.cp.[3+[3+[3+[3+cp.cp.cp.cp.cp.cp.cp.cp.w7+w7+w7+|5+[3+cp.cp.cp.a, a, w4.fL.w4.w4.a, 8H.a, a, a, a, a, a, a, a, {_ {_ {_ {_ {_ {_ {_ {_ n3 {_ 6}%6}%|x.;b.O9.({ ]_ 5[ ui `Y YY 5[ 5[ YY ti pj `Y w8.gA YY ui p: lP OQ.6S.7;@7;@7;@6S.7) 7S.NQ.!W+@~.#) 7S.#) Zl a, {_ {_ |x.6}%6}%O9.;b.6}%6}%O9.O9.O9.O9.6}%xj+DU%ns%ns%ns%ns%ns%ns%ns%j4@ns%B, ns%j4@EI#FI#B, vA*'C+6z+ET&ET&6z+6z+'C+|r%|r%|r%vA*'C+6z+6z+6z+,X@,X@,X@)Z%)Z%eO@eO@eO@eO@)Z%)Z%,X@'Z%'Z%DI#DI#'Z%'Z%,X@,X@)Z%)Z%eO@eO@p!#p!#p!#DI#DI#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%,X@,X@)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%:(+:(+:(+bp.bp.+9.+9.bQ#b,++9.,H.,H.+9.o&=b,+o&=bp.:(+q3.,H.bp.+9.:(+q3.+9.+9.+9.+9.+9.bQ#o&=o&=,X@,X@'Z%'Z%'Z%'Z%,X@,X@'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%bQ#o&=o&=o&=o&=o&=o&=bQ#o&=bQ#+9.bp.bp.+9.bQ#o&=b,+b,+b,+b,+b,+b,+b,+b,+Q+&Q+&j(#b,+b,+o&=bQ#bQ#b,+b,+b,+b,+b,+b,+b,+b,+j(#b,+b,+o&=bQ#bQ#+9.+9.b,+b,+b,+b,+b,+b,+b,+b,+j(#j(#j(#j(#j(#j(#j(#j(#w{@w{@Q+&Q+&j(#b,+b,+o&=o&=bQ#+9.o&=Q+&w{@Q+&b,+t4.o3.o3.v5.v5.o3.o3.t4.t4.t4.t4.t4.t4.t4.t4.t4.'Z%'Z%bQ#bQ#bQ#bQ#bQ#bQ#,H.j$&B);Ii=!+$pW+C3-`i-C);%5-`m-pI-MP-On=+p-F8-7u-4) HX-@p-Q*#&[ z_#2k=C&#j$#UE@uR@@A@+L@ 9 /d@ 9 9 /d@(7 (7 ]|@;! ;! Y:@Y:@+~ t! r[@rG tG tG }g }g }g *E *E =E =E =E *E *E =E =E =E i0$i0$i0$=E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E 1C%1C%i0$=E }g -E -! -! -! -! -! tG tG tG sG sG sG sG sG sG sG sG sG sG [|@[|@:|@:|@:|@_|@_|@_|@^|@^|@^|@^|@^|@^|@^|@^|@/|@/|@^|@@~ WA YA a~ 1f 1f 1f a~ a~ YA WA WA WA Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@+~ +~ +~ +~ W:@;! (7 /d@QT@B_#B_#')#kI@kI@1f 1f B_#')#kI@kI@kI@kI@')#B_#B_#B_#')#')#kI@1f 1f a~ kI@kI@1f 1f 1f a~ a~ a~ xy xy dw f1#e1#d1#/M ]M d1#bj#SJ#MH#MH#LH#MH#MH#m`&IP&hR&IP&iR&jR&Qk@JP&r *s *Qk@LP&#T&iR&Y+*>6#Ia#@A&K>;2L=07#97#87#nx xy xy kI@kI@')#')#lI@Nx@')#kI@1f a~ YA WA WA @~ @~ @~ @~ @~ @~ @~ @~ @~ /|@/|@@~ WA a~ kI@')#B_#))#))#+W@+W@w! w! XC@XC@w! +W@w! {Y@8.#XC@!)#kI@YA ^|@:|@$4@$4@vR@&E Nt%u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%GJ%GJ%&E &E u1$u1$&E Eu $4@<|@<|@$4@$4@[|@(|@@~ @~ @~ +~ W:@Y:@;! ]|@/d@ 9 9 9 O9 O9 +L@.9 @A@RT@RT@b.#UE@i@#Cv@C&#Y=#Z=#Z=#O~#0u#0u#u_$85*tq=tq=>p 2k=@l S3 8>#86-N^#8u-{}*SW-SW-M^#JX-UZ-l';f}*D);WO=E);G,;F);!~@G);Q/@1b+H8@t}+;xn-=Y=@Y@7u-4) 7u-+p-zn-oo=y' #)#*[ wf=VE@Y=#Cv@[`@RT@+L@O9 O9 O9 O9 9 /d@(7 ]|@;! ;! ;! Y:@W:@t! r[@rG sG tG }g }g }g *E *E =E =E =E *E *E =E =E =E i0$i0$i0$=E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E 1C%1C%i0$=E }g -E -! -! -! -! -! tG tG tG sG sG sG sG sG sG sG sG sG sG :|@:|@:|@_|@_|@_|@(|@(|@^|@^|@^|@^|@^|@^|@^|@^|@(|@/|@^|@@~ WA YA a~ a~ YA YA YA WA WA WA WA @~ Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@t! t! t! +~ W:@;! ]|@(7 B_#B_#')#')#kI@1f 1f a~ B_#')#kI@kI@kI@kI@')#B_#QT@B_#B_#')#kI@kI@1f 1f kI@kI@kI@1f 1f 1f 1f 1f f1#e1#e1#e1#d1#/M /M /M ]M vg#O8#;6#Dd#zg#zg#zg#Qm@~l=IP&]#*jR&#T&LP&LP&r *#8 JP&s *IP&]#*HY%*)&Ia#VC&h>;-k&)m#97#]0#*p@xy xy kI@kI@')#')#lI@Nx@kI@kI@1f a~ YA YA WA WA WA WA WA WA WA WA WA WA @~ @~ WA a~ 1f ')#B_#QT@+W@+W@w! w! w! XC@XC@XC@+W@+W@+W@w! XC@+W@')#YA WA (|@[|@$4@$4@vR@Kv u1$u1$u1$u1$u1$u1$u1$u1$u1$GJ%GJ%GJ%GJ%GJ%GJ%Nt%Nt%&E &E &E &E Kv vR@$4@<|@[|@$4@$4@:|@@~ a~ YA @~ W:@W:@Y:@]|@(7 /d@ 9 O9 O9 +L@+L@.9 @A@RT@bP@bP@UE@i@#Cv@j$#C&#Z=#VE@VE@Ut&Ut&u_$85*85*tq=qR#>p 2k=@l T3 l%#6J@@p-HX-zn-no=SW-BX-+<*v';G~#G~#l';Um-MZ-J);^0+`Q+!~@1M@dN=&b=C!@w{@<(+*r=cO@lO#!Z%[v.M:*M:*Z`+rQ@dO@dO@cO@dO@cO@cO@cO@cO@g|.g|.g|.N:*N:*N:*N:*N:*N:*N:*uG#&r=*r=N:*;Z+;Z+vu#N:*uG#uG#uG#uG#*r=*r=uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*N:*uG#uG#uG#uG#uG#uG#uG#uG#N:*uG#*r=&r=&r=*r=uG#N:*&r=uG#;Z+;Z+N:*uG#uG#N:*uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*N:*uG#uG#uG#N:*N:*vu#vu#vu#op=K);>s=L);>s=}t=Kq=7l%K);}t=}t=Ce+Ce+Kq=5/=F#=vu#N:*N:*uG#uG#N:*N:*vu#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*uG#uG#uG#*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#sX%*r=N:*uG#*r=*r=uG#vu#uG#*r=&r=sX%sX%&r=*r=uG#&r=&r=&r=*r=uG#N:*N:*N:*j(#CI#*r=uG#*r=*r=uG#vu#N:*N:*N:*N:*uG#*r=&r=sX%uG#uG#uG#uG#uG#uG#uG#uG#;Z+vu#vu#N:*uG#uG#*r=*r=uG#N:*;Z+vu#uG#*r=N:*;Z+uG#uG#*r=&r=&r=sX%sX%sX%*r=vu#vu#&r=&r=vu#vu#*r=*r=*r=*r=&r=&r=&r=sX%sX%uG#uG#uG#uG#uG#uG#uG#uG#vu#N:**r=&r=&r=*r=N:*vu#*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*vu#o!#uq*qK+SO+qK+$' 5,+5,+$' k4@mO#mO#IV.p2@p2@k4@5,+>S%~h&~h&0, &, Av&ZQ.ZQ.>S%~h&~h&{h&{h&0, &, xE*xE*x{+x{+x{+x{+x{+x{+OP*x{+x{+[f.[f.u!=[f.[f.[f.OP*US+OP*u`.u`.OP*US+OP*x{+x{+x{+x{+x{+x{+", "j}+j}+j}+j}+j}+j}+j}+l#@l#@l#@l#@l#@l#@l#@l#@|5+[3+cp.#9.#9.#9.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.[3+[3+[3+[3+[3+[3+[3+[3+|5+|5+[3+[3+[3+[3+|5+w7+cp.cp.cp.cp.cp.cp.cp.cp.|5+|5+|5+|5+[3+[3+[3+[3+cl+cl+8H.a, w4.w4.a, a, a, a, a, a, a, a, a, a, |x.|x.|x.|x.|x.|x.|x.|x.;b.;b.|x.|x.|x.|x.O9.]_ ]_ fd 5[ `Y w8.pj 5[ 5[ * 5[ ti YY `Y `Y YY p] lP 7S.OQ.OQ.7) 6S.7;@7;@/^@OQ.NQ.@~.#) 7S.7S.lP cl+;b.W_ |x.uq.P~ 6}%{_ 6}%O9.|x.|x.|x.|x.O9.xj+DU%ns%ns%ns%ns%ns%ns%ns%EI#ns%6' 6' ns%FI#FI#ns%6z+6z+ET&ET&ET&6z+'C+vA*vA*vA*vA*vA*'C+'C+'C+'C+'Z%'Z%'Z%,X@,X@)Z%)Z%)Z%,X@'Z%'Z%'Z%'Z%DI#DI#DI#,X@,X@)Z%)Z%eO@eO@eO@@9.DI#DI#DI#'Z%'Z%,X@,X@,X@)Z%)Z%)Z%,X@,X@,X@'Z%'Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%,H.:(+bp.+9.bQ#+9.+9.bp.b,++9.,H.,H.+9.o&=b,+o&=o&=+9.bp.+9.o&=o&=bQ#bp.:(+bp.+9.bQ#o&=o&=bQ#bQ#DI#DI#'Z%,X@,X@'Z%DI#DI#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%b,+o&=bQ#bQ#bQ#bQ#o&=b,+:(++9.o&=j(#j(#o&=+9.:(+bQ#bQ#o&=o&=o&=b,+b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+o&=o&=o&=o&=o&=bQ#bQ#bQ#o&=o&=o&=b,+b,+j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#b,+b,+b,+b,+Q+&o&=+9.bQ#b,+Q+&j(#b,+t4.o3.o3.v5.v5.o3.o3.t4.t4.t4.t4.t4.t4.t4.t4.t4.'Z%'Z%bQ#bQ#aR#aR#L0.L0.7&+l]#Zl@RQ=*';VZ=~C@;);b2-OW-M);Y}-Lh DQ-&o=qI-7u-7u-zn-HX-@)#$)#*[ 2k=ir#Z=#j$#b.#bP@@A@.9 .9 O9 O9 9 /d@(7 (7 ]|@]|@;! Y:@+~ t! r[@rG sG tG }g }g }g *E *E =E =E =E *E *E =E =E =E i0$i0$i0$=E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E i0$i0$=E *E *E }g -E -E -! -! -! tG tG tG sG sG sG sG sG sG sG sG sG sG :|@:|@:|@_|@_|@(|@(|@(|@^|@^|@^|@^|@^|@^|@^|@^|@/|@/|@^|@^|@@~ WA WA YA @~ @~ @~ @~ @~ @~ ^|@^|@Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@+~ +~ t! t! +~ Y:@;! ]|@kI@kI@kI@1f 1f 1f a~ a~ ')#kI@1f 1f 1f 1f kI@')#')#')#')#')#kI@kI@kI@kI@1f 1f kI@kI@')#')#B_#B_#d1#d1#d1#/M /M ]M ]M ]M d1# t#Dd# l&Qm@Qm@Y+*m`&Y+*jR&]#*#T&]#*IP&IP&#T&F.*r *#8 #8 #8 IP&#T&t&*Wm@');VC&g>;gy#!m#87#*p@ew ew ')#B_#B_#QT@]C@]C@')#')#kI@kI@1f 1f a~ a~ YA YA a~ a~ a~ 1f 1f 1f 1f kI@kI@')#B_#QT@QT@!)#+W@+W@w! w! w! w! w! w! +W@+W@))#+W@+W@!)#1f @~ ^|@_|@<|@vR@$4@vR@Eu &E u1$u1$u1$u1$u1$u1$u1$u1$*L%*L%*L%GJ%GJ%GJ%Nt%Nt%u1$u1$&E Kv Eu vR@vR@$4@[|@$4@$4@_|@YA kI@a~ @~ W:@Y:@;! ]|@(7 9 O9 O9 +L@.9 .9 @A@RT@bP@uR@uR@i@#Cv@j$#C&#Y=#VE@P~#P~#u_$u_$u_$85*85*tq=tq=>p z_#T3 8>#86-N^#oo=zn-CX-no=M^#%)#x,;t);G~#f}*l';C[*N);E+.!5.+5-!G={q%'m*=Z+yE#Q+&S`%N:*fW=Dr#R#.Z`+Z`+Z`+rQ@dO@dO@cO@cO@cO@cO@g|.g|.g|.g|.g|.g|.N:*uG#uG#uG#*r=*r=*r=*r=&r=*r=N:*;Z+;Z+vu#N:*uG#N:*uG#*r=*r=*r=*r=uG#N:*N:*N:*N:*N:*N:*N:*N:*N:**r=*r=*r=*r=*r=*r=*r=*r=vu#N:**r=&r=&r=*r=N:*vu#sX%uG#;Z+fW=vu#N:*N:*N:*uG#uG#uG#uG#uG#uG#uG#uG#vu#vu#vu#vu#vu#vu#vu#vu#uG#uG#uG#N:*N:*vu#vu#vu#}t=K);K);K);K);}t=Ce+Ce+}t=}t=}t=}t=}t=Ce+Ce+4|#op=N:*N:*uG#uG#N:*N:*vu#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*uG#uG#uG#*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#sX%*r=N:*uG#*r=*r=uG#vu#uG#*r=&r=sX%sX%&r=*r=uG#&r=&r=*r=*r=*r=*r=uG#uG#bQ#Q+&sX%uG#uG#uG#N:*;Z+uG#N:*N:*N:*uG#*r=&r=sX%uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#*r=*r=*r=*r=*r=N:*vu#N:**r=*r=uG#vu#uG#*r=*r=&r=&r=*r=uG#uG#uG#;Z+vu#&r=&r=vu#;Z+uG#*r=*r=*r=*r=&r=&r=&r=&r=uG#uG#uG#uG#uG#uG#uG#uG#N:*uG#*r=*r=*r=*r=uG#N:**r=&r=&r=&r=sX%sX%sX%sX%*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#N:*N:*N:*o!#xr*qK+SO+qK+5,+jM#5,+$' mO#jM#jM#mO#IV.IV.mO#5,+{h&{h&{h&0, &, Av&Av&Av&0, 0, 0, 0, &, &, &, xE*xE*OP*x{+[f.[f.x{+OP*OP*23+23+23+OP*x{+[f.[f.u!=[f.23+OP*HV.HV.OP*23+[f.OP*OP*OP*OP*OP*OP*", "j}+j}+j}+j}+j}+j}+j}+{t.{t.{t.{t.{t.{t.{t.{t.w7+|5+cp.#9.PI.#9.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.[3+[3+[3+[3+[3+[3+[3+[3+6z+ET&w7+|5+[3+|5+ET&ET&cp.cp.cp.cp.cp.cp.cp.cp.[3+[3+[3+[3+|5+|5+|5+|5+xj+cl+8H.a, a, a, a, a, a, a, a, a, a, a, a, a, ;b.;b.;b.;b.;b.;b.;b.;b.6}%O9.|x.;b.|x.|x.|x..o ]_ fd fd `Y 8g.YY 5[ fd ui ui ui ui ti ti ti _y rS #) #) 7S.OQ.7) 6S.7;@6S.7S.@~.@~.OQ.7;@/^@VS+l`.|x.{_ |x.P~ PF+ F.;b.O9.O9.|x.;b.;b.|x.O9.cl+DU%ns%ns%ns%ns%ns%ns%ns%j4@B, bv#ym.6' ns%ns%B, 6z+ET&ET&ET&6z+'C+vA*|r%'C+'C+'C+'C+vA*vA*vA*vA*DI#DI#DI#'Z%'Z%,X@,X@,X@DI#DI#DI#DI#'Z%'Z%'Z%'Z%)Z%)Z%)Z%eO@eO@eO@@9.@9.'Z%'Z%'Z%,X@,X@)Z%)Z%)Z%eO@eO@)Z%)Z%,X@,X@'Z%'Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%q3.:(+bp.bQ#bQ#bQ#+9.bp.b,++9.,H.,H.+9.o&=b,+o&=o&=+9.bp.+9.o&=o&=bQ#bp.:(+bp.+9.o&=o&=o&=bQ#+9.2p%p!#DI#'Z%'Z%DI#p!#2p%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%b,+o&=bQ#+9.+9.bQ#o&=b,+o&=o&=b,+b,+b,+b,+o&=o&=+9.+9.+9.bQ#o&=o&=o&=b,+bp.bp.+9.bQ#o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#o&=o&=o&=o&=b,+b,+b,+b,+CI#j(#bQ#bQ#o&=j(#b,+o&=t4.o3.o3.v5.v5.o3.o3.t4.t4.t4.t4.t4.t4.t4.t4.t4.'Z%'Z%bQ#bQ#aR#L0.[1+L0.0J*bQ#eO@l1+O);wF-Gq-ZB-&x-56-C);C0-76-HH#Jg :1-7u-+p-#X-HX-po=$)#*[ 2k=ir#VE@j$#b.#bP@RT@RT@bP@+L@O9 O9 9 /d@(7 ]|@]|@Y:@W:@+~ X:@>b@sG tG -! }g }g }g *E *E =E =E =E *E *E =E =E =E i0$i0$i0$=E =E =E =E =E =E =E =E =E =E =E =E =E =E =E =E *E *E *E *E *E *E *E *E -! -! -! tG tG tG sG sG sG sG sG sG sG sG sG sG :|@_|@_|@_|@(|@(|@/|@/|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@@~ @~ @~ @~ /|@/|@/|@/|@/|@/|@/|@/|@Y:@Y:@Y:@Y:@Y:@Y:@Y:@Y:@W:@+~ +~ t! +~ +~ W:@Y:@YA YA YA a~ a~ a~ a~ a~ kI@1f a~ a~ a~ a~ 1f kI@1f 1f 1f kI@kI@kI@kI@kI@1f 1f kI@')#QT@!)#))#))#e1#e1#d1#/M 6q#bj# t# t#6q#LH# l&;G=HY%HY%HY%HY%Qm@jR&LP&#T&~l=]#*]#*jR&s *Qk@]#*LP&Qk@LP&~l=Vm@4>&P);9j&qs=-3#g%&07#]0#e1#e1#QT@!)#!)#))#^J ^J QT@B_#B_#B_#')#')#')#')#kI@kI@kI@')#')#B_#B_#QT@!)#!)#))#))#))#))#))#))#+W@+W@+W@+W@+W@+W@+W@+W@+W@))#))#))#))#B_#YA /|@(|@[|@vR@Eu Eu Eu Kv u1$Kv Kv Kv Kv Kv Kv Kv Kv pM%pM%*L%*L%GJ%GJ%Nt%Nt%Nt%Nt%u1$Kv Eu Eu Eu Eu [|@$4@$4@(|@1f B_#1f @~ W:@Y:@;! ]|@/d@ 9 O9 +L@.9 .9 @A@RT@bP@uR@uR@[`@Cv@Cv@j$#Y=#Z=#VE@P~#ir#u_$u_$u_$85*85*85*tq=6v &[ l%#VO-6J@@p-HX-CX-no=M^#%)#h}*Q);l';G~#f}*D);R);x|*@) -x#$' X+1<#vC#Fu+Fu+E#=F#=4|#op=83#|X-dO@dO@dO@dO@dO@cO@cO@cO@g|.g|.g|.g|.g|.g|.g|.g|.uG#*r=*r=&r=&r=sX%sX%sX%&r=*r=N:*;Z+;Z+vu#N:*uG#N:*uG#*r=&r=&r=*r=uG#N:*N:*N:*N:*N:*N:*N:*N:*N:**r=*r=*r=*r=*r=*r=*r=*r=vu#N:**r=sX%sX%*r=N:*vu#S`%*r=;Z+fW=;Z+N:*N:*N:*uG#uG#uG#uG#uG#uG#uG#uG#vu#vu#vu#vu#vu#vu#vu#vu#uG#uG#uG#N:*N:*vu#vu#vu#}t=}t=Ce+Ce+Ce+}t=K);>s=}t=}t=}t=K);K);K);K);'p#op=N:*N:*uG#uG#N:*N:*vu#uG#uG#uG#uG#uG#uG#uG#uG#vu#vu#vu#vu#vu#vu#vu#vu#N:*N:*uG#uG#uG#*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#sX%*r=N:*uG#*r=*r=uG#vu#uG#*r=&r=sX%sX%&r=*r=uG#*r=*r=*r=*r=*r=&r=&r=&r=bQ#Q+&&r=uG#uG#*r=uG#N:**r=uG#N:*N:*N:*uG#*r=&r=uG#uG#uG#uG#uG#uG#uG#uG#sX%&r=&r=&r=&r=*r=*r=*r=&r=uG#N:*uG#&r=sX%*r=N:*uG#*r=&r=&r=*r=N:*;Z+fW=N:*;Z+vu#sX%sX%vu#;Z+N:**r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#*r=*r=uG#N:*N:*uG#*r=*r=*r=*r=&r=&r=sX%sX%S`%S`%*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#N:*N:*dr=&s*qK+SO+qK+jM#k4@jM#$' IV.mO#5,+5,+mO#k4@k4@jM#&, &, &, &, &, Av&Av&Av&Av&&, &, &, &, 0, 0, 17*17*OP*x{+[f.[f.x{+OP*23+23+23+23+US+23+23+OP*OP*u`.x{+OP*u!=u!=OP*x{+u`.OP*OP*OP*OP*OP*OP*", "j}+j}+j}+j}+j}+j}+j}+{t.{t.{t.{t.{t.{t.{t.{t.ET&|5+cp.#9.PI.#9.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.'C+6z+ET&|5+|5+w7+ET&6z+cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.[3+|5+w7+w7+.l.l`.xj+cl+a, a, a, a, a, a, a, a, a, a, a, a, a, {_ {_ {_ {_ {_ {_ {_ {_ F.6}%|x.;b.;b.|x.;b.ac ]_ fd fd `Y 8g.YY 5[ fd YY pj ui 5[ fd fd fd og Zl NQ.NQ.#) 7S.OQ.6S.7;@7S.NQ.!W+@~.7) };@r,@{**OJ.|x.{_ O9./D.^b+uq.;b.O9.|x.|x.;b.;b.|x.|x.cl+DU%ns%ns%ns%ns%ns%ns%ns%FI#B, ym.(s.bv#B, B, B, 6z+ET&ET&ET&6z+'C+vA*|r%6z+6z+6z+'C+vA*|r%|r%|r%p!#p!#p!#DI#DI#'Z%'Z%'Z%2p%p!#p!#DI#'Z%'Z%,X@,X@)Z%)Z%)Z%eO@eO@@9.@9.@9.,X@,X@,X@)Z%)Z%eO@eO@eO@eO@eO@eO@)Z%,X@,X@'Z%'Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%q3.,H.bp.bQ#bQ#bQ#+9.bp.b,++9.,H.,H.+9.o&=b,+o&=bp.:(+q3.,H.bp.+9.:(+q3.,H.bp.bQ#o&=b,+o&=bQ#+9.qK#2p%DI#'Z%'Z%DI#2p%qK#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%j(#o&=bQ#+9.+9.bQ#o&=j(#w{@j(#o&=bQ#bQ#o&=j(#w{@bp.bp.bp.+9.bQ#bQ#o&=o&=,H.,H.:(++9.bQ#o&=b,+j(#b,+b,+b,+b,+b,+b,+b,+b,++9.+9.bQ#bQ#o&=b,+b,+j(#bQ#o&=o&=b,+b,+j(#j(#Q+&b,+b,+b,+b,+b,+b,+b,+b,++9.+9.bQ#bQ#o&=b,+b,+j(#S`%Q+&o&=bQ#o&=b,+b,+o&=t4.o3.o3.v5.v5.o3.o3.t4.t4.t4.t4.t4.t4.t4.t4.t4.'Z%'Z%bQ#bQ#aR#L0.L0.L0.zI*Vh.{q%z,=cl-&Ia#Vm@Li=[k=4>&4>&7s=;G=jR&HY%Yo@Yo@HY%HY%;G=m`&XE@[J=4>&u&*2j=-3#cj#^0#d1#/M ))#))#+W@+W@w! w! !)#!)#!)#QT@QT@QT@QT@B_#')#B_#B_#QT@QT@!)#!)#))#XC@XC@w! w! w! +W@+W@+W@+W@+W@+W@+W@))#))#))#))#+W@))#))#))#))#B_#WA (|@:|@$4@Kv &E Kv Kv &E Nt%Kv Kv Kv Kv Kv Kv Kv Kv pM%pM%pM%*L%GJ%GJ%Nt%Nt%GJ%Nt%u1$&E Kv Eu Eu Eu :|@$4@$4@(|@kI@QT@kI@@~ Y:@Y:@;! ]|@/d@ 9 O9 +L@.9 @A@@A@RT@bP@uR@[`@[`@Cv@j$#C&#Y=#Z=#P~#ir#ir#u_$u_$u_$u_$85*85*85*}n #)##)##D=y' I~#2g x8-Ho=|6-}J=D[*MZ-U);V);V);bl-QO-Hf.mO#=)+_($,S#uq*p!#)p#l]#y9.vu#yT**r=oq=$t.cO@cO@cO@cO@cO@cO@cO@cO@s=L);L);QN.vu#N:*N:*uG#uG#N:*N:*vu#uG#uG#uG#uG#uG#uG#uG#uG#vu#vu#vu#vu#vu#vu#vu#vu#N:*N:*uG#uG#uG#*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#sX%*r=N:*uG#*r=*r=uG#vu#uG#*r=&r=sX%sX%&r=*r=uG#uG#uG#uG#*r=&r=sX%sX%sX%o&=w{@*r=N:*uG#&r=&r=*r=*r=*r=uG#N:*N:*uG#*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#CI#S`%S`%sX%&r=&r=*r=*r=sX%*r=uG#*r=sX%sX%&r=uG#*r=*r=&r=*r=uG#vu#6w=~U.N:*;Z+vu#sX%sX%vu#;Z+N:**r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#&r=*r=N:*vu#vu#N:**r=&r=uG#uG#*r=*r=&r=sX%sX%sX%*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#N:*dr=jM#$' SO+$' mO#IV.mO#$' p2@k4@5,+5,+jM#k4@IV.yi.Av&Av&Av&Av&Av&&, &, &, &, &, 0, {h&{h&~h&~h&nh.17*OP*x{+u!=u!=x{+OP*23+x{+OP*23+US+';$';$';$';$Z*;..=U*@3<@3<@U*@..=Z*;xE*xE*xE*xE*xE*xE*", "#9.[3+cp.PI.Hu+#9.[3+w7+|5+cp.PI.PI.#9.[3+|5+l#@j}+{t.aq.aq.aq.aq.aq.ym.aq.j}+l#@$9.$9.l#@j}+j}+aq.(s.bv#bv#(s.aq.j}+aq.(s.(s.(s.ym.ym.bv#bv#{t.{t.{t.{t.{t.{t.{t.{t.6' (s.j}+j}+(s.bv#6' A{$a, {_ W_ &5 &5 W_ {_ ;b.{_ ;b.O9.6}%6}%O9.;b.{_ W_ {_ &5 ~_ &5 O9.O9.W_ ;b.O9.6}%|x.W_ &5 W_ ac ed fd 5[ ui pj YY `Y `Y ui ti pj YY `Y gA w8.'> hf.6S.6S.6S.7) 7) 7) 7) 7) 7) OQ.OQ.7) 6S.7;@5=+OJ.%P%R`%g~#g~#R`%%P%&0+#y#&0+&0+#y##y#R`%R`%6v@N}.w7+w7+vA*(W%(W%6z+#9.Gu+vA*'C+ET&ET&'C+vA*Gu+DI#p!#p!#,X@%0+M7.@9.,X@p!#'Z%)Z%eO@)Z%DI#2p%/W%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%,X@,X@)Z%eO@eO@@9.@9.$B#)Z%)Z%,X@,X@'Z%DI#DI#DI#)Z%)Z%,X@,X@'Z%'Z%DI#DI#eO@eO@eO@eO@eO@eO@eO@eO@+9.+9.bp.:(+:(+,H.q3.q3.<3+0q.,H.:(++9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b@rG rG sG sG tG tG -! sG sG rG rG rG >b@>b@>b@/|@/|@/|@/|@/|@/|@/|@/|@(|@_|@:|@:|@:|@(|@^|@@~ WA @~ ^|@/|@/|@^|@@~ WA ^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@:|@:|@_|@_|@(|@/|@/|@^|@t! W:@;! (7 /d@/d@/d@(7 (7 (7 /d@/d@/d@(7 ]|@]|@1f 1f 1f 1f 1f kI@kI@kI@1f 1f kI@')#B_#!)#))#))#.9 .9 @A@RT@uR@UE@yn#Ag#;3#b>*7;*vj*d>* !;Rk@[J=P);!t=5t=~t=D-&,T=D-&3>&M,&3>&Cu=&h&Ao&nq&Ao&Gx=Qm@*)&Y+*Yo@Yo@Qm@O8#vg#e1#d1#]M 6q#6q#6q#/M !)#))#))#))#+W@))#!)#QT@B_#))#))#))#))#+W@+W@+W@+W@XC@XC@w! w! +W@+W@+W@))#+W@))#!)#!)#QT@!)#!)#))#+W@w! w! +W@QT@1f ^|@(|@Eu Eu Eu Kv Kv Kv &E &E $4@$4@vR@Eu Kv &E u1$Nt%u1$u1$u1$u1$u1$u1$u1$u1$i0$i0$=E *E }g }g -E -E tG sG rG r[@t! W:@Y:@;! ]|@/d@O9 O9 9 9 +L@RT@+L@.9 @A@bP@[`@UE@i@#Cv@Y=#Y=#Z=#P~#ir#N~#O~#0u#ir#O~#85*qR#qR#85*0u#N~#n3&Uk J[$^m 1g /p=Ni=aC=LG=(&;MG={';.!;=C&+!;@!;#!; =@d=+n4@yE#vu=o&=n3.S`%<(+sX%):.*r=g|.N:*cO@dO@dO@dO@cO@cO@g|.g|.g|.cO@cO@cO@cO@cO@cO@cO@cO@vu#N:*N:*uG#uG#N:*N:*vu#N:*N:*N:*N:*N:*N:*N:*N:*uG#uG#uG#uG#uG#uG#uG#uG#;Z+vu#vu#N:*N:*uG#*r=*r=vu#uG#*r=&r=&r=*r=uG#vu#;Z+;Z+vu#vu#N:*uG#*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*N:*fW=;Z+N:*uG#uG#N:*;Z+fW=*r=vu#fW=;Z+*r=&r=uG#;Z+uq*uq*uq*uq*uq*uq*uq*uq*uq*xr*xr*&s*=^@=^@wr*wr*;Z+;Z+;Z+;Z+fW=fW=fW=fW=6w=;Z+uG#*r=N:*N:*uG#*r=o!#o!#o!#o!#o!#o!#o!#o!#=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+sX%sX%&r=&r=*r=*r=uG#uG#~U.;Z+vu#vu#;Z+;Z+N:**r=N:*N:*N:*uG#*r=*r=&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=uG#*r=&r=sX%sX%&r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#CI#sX%*r=*r=&r=&r=uG#vu#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*N:*uG#uG#uG#uG#uG#uG#uG#uG#&r=&r=&r=&r=&r=&r=&r=&r=sX%uG#vu#vu#uG#&r=*r=uG#vu#uG#&r=&r=*r=*r=sX%CI#*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=&r=&r=&r=&r=&r=&r==Z+dr=o!#o!#o!#dr==Z+=Z+dr=dr=dr=dr=dr=dr=dr=dr=5,+qK+SO+ X+ X+SO+qK+5,+k4@mO#jM#5,+5,+jM#mO#yi.&, >n.!D+B#@B#@`b&>n.;n.>n.;n.-~@]*=]*=-~@;n.h~ 17*[f.u`.,].,].u`.[f.23+HV.[f.OP*x{+u!=HV.[f.U*@Av&Av&Av&Av&Av&Bv&B9.8P.0, %' x*$0, 4p=Y*;", "cp.|5+[3+#9.PI.#9.[3+cp.#9.#9.#9.#9.#9.cp.[3+l#@j}+{t.aq.aq.aq.aq.aq.(s.aq.j}+l#@$9.l#@j}+j}+j}+{t.{t.aq.aq.{t.{t.j}+{t.{t.aq.aq.aq.(s.(s.(s.{t.{t.{t.{t.{t.{t.{t.{t.(s.{t.l#@j}+(s.ym.ym.':+a, {_ W_ &5 &5 W_ {_ ;b.{_ ;b.|x.|x.|x.|x.;b.{_ ;b.|x.{_ ~_ &5 |x.|x.n3 {_ |x.O9.|x.{_ W_ {_ Hs ac 5[ ui ti ti pj YY YY ti ti ti pj YY `Y `Y 8e.7e.OQ.7) 7) 7) 7) 7) 7) 7) 7) OQ.OQ.7) 6S.7;@<*&l`.R`%#y#)i+)i+#y#R`%%P%g~#&0+%P%)i+)i+R`%R`%@[+>H.ET&6z+'C+|r%vA*6z+|5+vA*vA*'C+'C+'C+'C+vA*vA*'Z%DI#DI#)Z%$B#%0+eO@'Z%DI#,X@)Z%@9.eO@)Z%DI#p!#'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%,X@,X@,X@,X@)Z%)Z%)Z%)Z%eO@)Z%)Z%)Z%,X@'Z%'Z%'Z%,X@,X@,X@,X@,X@)Z%)Z%)Z%eO@eO@eO@eO@eO@eO@eO@eO@:(+:(+:(+bp.bp.bp.bp.bp.q3.,H.:(+bp.+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#q3.bp.o&=b,+o&=bQ#bQ#o&=o&=+9.:(+bp.o&=b,+bQ#bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#j(#o&=+9.bQ#b,+b,+bQ#+9.bQ#o&=b,+j(#j(#b,+o&=bQ#+9.bQ#o&=bQ#bp.:(++9.o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+w{@Q+&b,+o&=o&=b,+Q+&w{@w{@Q+&b,+o&=o&=b,+Q+&w{@j(#j(#Q+&Q+&w{@w{@w{@w{@w{@o&=bQ#b,+b,++9.+9.j(#o&=o&=bQ#bQ#b,+j(#w{@S`%j(#j(#j(#j(#j(#j(#j(#j(#v5.v5.v5.o3.a,+:{.D6.D6.%U*nj*)!=A+;S5.$!;nV=%!;{|@v4 HH#!+$E3-4X-zD-+j-NC-On=CX-Io=/p=0Q=Pl&rR#R3 ) ub 4##Ea#+l d2 *! ,p ,p @A@+L@O9 /d@(7 (7 ]|@]|@Y:@t! r[@rG tG -! -E -E }g =E =E =E *E *E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$GJ%GJ%Nt%u1$&E Kv Eu Eu rG rG rG sG tG tG tG -! sG sG rG rG rG >b@>b@>b@(|@(|@(|@(|@(|@(|@(|@(|@/|@(|@_|@:|@_|@(|@/|@^|@@~ ^|@/|@(|@(|@/|@^|@@~ ^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@_|@_|@(|@(|@(|@(|@/|@/|@t! W:@Y:@]|@(7 (7 ]|@;! ;! ]|@]|@(7 (7 (7 ]|@]|@a~ a~ a~ 1f 1f 1f kI@kI@')#B_#B_#B_#B_#QT@QT@QT@~)#~)#@A@bP@b.#Cv@6!#&3#vj*F,#1E=;;8U%D-&2>&mF=sD=.F=Du=&h&Gx=&h&Cu=Yo@m`&Yo@Yo@Yo@ l&O8#vg#e1#e1#/M /M /M d1#e1#f1#QT@!)#!)#!)#!)#QT@B_#')#!)#!)#))#))#+W@+W@w! w! {Y@XC@XC@XC@w! w! +W@+W@+W@))#!)#QT@QT@QT@QT@!)#+W@+W@+W@))#B_#a~ ^|@_|@Eu Eu Eu Kv Kv &E &E &E $4@vR@vR@Eu Kv &E u1$Nt%u1$u1$u1$u1$u1$u1$u1$u1$i0$i0$=E *E }g -E -E -! tG sG rG r[@t! W:@Y:@;! ]|@/d@O9 O9 9 O9 .9 RT@+L@.9 @A@bP@[`@UE@i@#Cv@Y=#Y=#Z=#P~#ir#O~#0u#0u#N~#0u#u_$tq=tq=85*u_$0u#RP=~t S2*]T#k`&T8 9N=>4*wU-PB=9';DW-*!;*!;=!;-!;T%+43+gX.t4.):.rQ@n3.n.;n.-~@}m.}m.-~@;n.h~ xE*[f.HV.u`.u`.HV.[f.OP*u!=x{+OP*OP*[f.u!=[f.xE*ZQ.3P .==.==.==3P cl.PN..y&Xw&Xw&)A&PN._b+", "cp.|5+[3+#9.PI.#9.[3+8v.8v.PI.#9.cp.cp.cp.cp.j}+j}+{t.{t.aq.aq.aq.aq.(s.aq.{t.j}+l#@j}+j}+{t.{t.j}+j}+l#@l#@j}+j}+{t.j}+j}+j}+{t.{t.aq.aq.aq.aq.aq.aq.aq.aq.aq.aq.aq.j}+l#@l#@{t.(s.ym.aq.w% a, {_ W_ &5 &5 W_ {_ ;b.;b.;b.{_ W_ W_ {_ ;b.;b.O9.6}%;b.n3 &5 |x.;b.~_ W_ ;b.O9.|x.{_ {_ |x.({ Hs ti ti ti ti ti ti ti ti ti ti ti ti ti pj p] rS #) 7S.7S.OQ.7) 7) 6S.7) OQ.OQ.OQ.OQ.7) 6S.<*&cl+#y#)i+)i+)i+)i+#y#g~#%P%S}%%P% l.7v@R`%%P%>r+>H.6z+vA*'C+6z+ET&6z+'C+'C+'C+vA*vA*vA*vA*'C+'C+)Z%,X@'Z%)Z%@9.@9.)Z%'Z%'Z%,X@eO@@9.$B#@9.)Z%,X@'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%,X@,X@,X@,X@'Z%'Z%'Z%'Z%eO@eO@eO@)Z%)Z%)Z%,X@,X@'Z%'Z%,X@)Z%eO@eO@@9.@9.)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%,H.:(+:(+bp.+9.bQ#o&=o&=:(+bp.+9.bQ#bQ#+9.+9.bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+Q+&j(#o&=bp.bp.+9.o&=+9.bp.+9.bQ#o&=bQ#bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=bQ#+9.bQ#b,+j(#b,+bQ#+9.bQ#o&=o&=o&=o&=bQ#+9.bp.bQ#o&=bQ#+9.bp.+9.o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+Q+&j(#b,+b,+b,+b,+j(#Q+&Q+&j(#b,+b,+b,+b,+j(#Q+&j(#j(#j(#Q+&Q+&w{@w{@w{@j(#bQ#o&=w{@w{@b,+o&=Q+&bQ#bQ#bQ#bQ#o&=b,+Q+&w{@j(#j(#j(#j(#j(#j(#j(#j(#M|@M|@v5.o3.a,+:{.:^+:^+%U*0M.s~=;!;7*=>!;,!;'!;@Y@Qj hn=C8-n;;F3-F3-(1-@Y@Tj-CX-Io=[n +6*U8 pR#wf=g$#kj#A0 E> 3m d2 d2 n| n| .9 +L@ 9 /d@(7 ]|@(7 ]|@Y:@+~ X:@>b@sG tG -! -E }g *E =E =E *E *E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%u1$u1$&E Kv Eu Eu vR@sG sG sG sG tG tG tG -! sG sG rG rG rG >b@>b@>b@_|@_|@_|@_|@_|@_|@_|@_|@^|@/|@(|@_|@_|@(|@(|@/|@/|@/|@(|@_|@_|@(|@/|@/|@(|@(|@(|@(|@(|@(|@(|@(|@^|@^|@^|@^|@^|@^|@^|@^|@/|@/|@/|@(|@(|@(|@(|@(|@+~ +~ W:@Y:@Y:@Y:@W:@W:@+~ W:@Y:@;! ]|@]|@]|@]|@YA YA YA a~ a~ 1f 1f kI@!)#!)#!)#QT@QT@B_#B_#B_#^J Q~#w! {Y@h$#gt@Zo@ l&2j=t&*[k=7s=Ms=+t=@b@Ls=)!;10&>;;{t={t=>;;!t=2>&mF=sD=.F=@D=Cu= F=Cu=@D=jR&iR&HY%;G=Yo@Z+*MH# t#e1#e1#d1#d1#e1#f1#dw xy ')#B_#B_#B_#B_#')#kI@1f B_#QT@!)#))#+W@w! XC@{Y@8.#8.#{Y@{Y@XC@XC@XC@w! ))#))#QT@B_#B_#B_#B_#QT@))#))#!)#QT@kI@WA (|@:|@Eu Eu Kv Kv &E &E &E u1$vR@vR@Eu Kv &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$i0$=E =E *E }g -E -! -! tG sG >b@r[@t! W:@Y:@;! ]|@ 9 +L@+L@O9 O9 .9 RT@+L@.9 @A@bP@[`@UE@i@#Cv@Y=#Z=#VE@P~#N~#O~#0u#0u#Ut&Ut&u_$u_$85*85*tq=tq=(u LQ=]T#k`&t_$s|*tU=[B=}B=`W-DW-'5.!!;~!;{!;]!;v5.XY.-Z+p3..9.g|.h;#rQ@.9..9.):.n.!D+`b&`b&!D+!D+;n.;n.-~@}m.}m.-~@;n.H.'C+|r%'C+|5+|5+6z+Gu+ET&'C+vA*Gu+Gu+vA*'C+ET&)Z%)Z%)Z%)Z%)Z%)Z%,X@'Z%DI#'Z%)Z%eO@@9.@9.eO@eO@'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%eO@eO@)Z%,X@,X@'Z%DI#DI#eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@@9.)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%bp.bp.+9.+9.bQ#bQ#o&=o&=+9.bQ#bQ#o&=bQ#bQ#+9.bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+j(#b,++9.bp.bp.+9.bQ#+9.+9.+9.bQ#bQ#bQ#+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.bp.+9.b,+Q+&j(#o&=+9.+9.bQ#bQ#bQ#bQ#+9.+9.:(++9.o&=o&=+9.+9.bQ#o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=+9.+9.+9.+9.+9.+9.+9.+9.j(#b,+b,+b,+b,+b,+b,+j(#j(#b,+b,+b,+b,+b,+b,+j(#b,+b,+j(#j(#Q+&Q+&w{@w{@o&=+9.o&=S`%sX%j(#b,+w{@+9.bQ#bQ#bQ#o&=o&=b,+j(#Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&M|@I7.o3.t4.:{.62.w5.w5.n4@He+o2.k==^!;/!;(!;_!;:!;U=#+/*76-b@>b@>b@[|@[|@[|@[|@[|@[|@[|@[|@^|@^|@/|@/|@(|@(|@(|@(|@(|@(|@(|@_|@_|@(|@(|@(|@(|@(|@(|@(|@(|@(|@(|@(|@/|@/|@/|@/|@/|@/|@/|@/|@@~ ^|@^|@/|@(|@(|@_|@_|@+~ +~ +~ +~ +~ t! t! X:@X:@t! +~ Y:@;! ]|@]|@]|@WA WA YA YA a~ 1f 1f kI@!)#!)#!)#!)#!)#!)#!)#!)#X=#X=#h@# p@B&#'d@ l&Qm@Ia#N,&t&*7s=+t=L*;7U%Ms=)!;&!;8U%{t=KY%{t=2>&!t=/=&M,&@D=.F=@D=@D=U*;n-;Qk@#T&iR&;G=m`&Zo@MH# t#]M /M /M d1#e1#ew dw dw kI@')#')#')#')#kI@1f a~ kI@')#QT@!)#w! XC@8.#h@#h@#8.#8.#8.#{Y@{Y@XC@XC@+W@))#QT@B_#')#')#')#B_#!)#QT@B_#')#a~ ^|@_|@[|@Kv Kv Kv &E &E &E u1$u1$Eu Eu Kv Kv &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$=E =E *E }g }g -E -! -! sG rG >b@X:@+~ Y:@;! ]|@(7 9 +L@+L@O9 O9 .9 bP@.9 .9 RT@uR@[`@UE@Cv@Cv@Z=#Z=#VE@ir#N~#O~#0u#Ut&85*u_$Ut&Ut&u_$tq=pR#5N=LQ=S8 k`&t_$Js&O}*[B=X*;UW-PW-LW-'5.!!;!!;}!;|!;M:*e6@sQ@u4.<(+.9.v5.cO@):.):. 8P.PN.cl..==.==.==.==.==@d+.y& == ==%z&.y&", "Hu+#9.PI.8v.VW.Hu+PI.G6.9, Hu+#9.cp.cp.#9.#9.{t.{t.j}+j}+j}+{t.(s.ym.{t.{t.{t.aq.aq.aq.aq.{t.ym.(s.{t.j}+j}+{t.(s.ym.aq.aq.(s.(s.ym.ym.ym.ym.(s.(s.(s.(s.(s.(s.(s.(s.{t.{t.aq.ym.B, B, ym.l3 fL.W_ {_ {_ {_ {_ W_ W_ |x.{_ W_ n3 n3 W_ {_ |x.W_ {_ W_ n3 {_ uq.uq.|x.W_ ;b.O9.O9.|x.|x.O9..s.]_ pj ti ti ti ti ui ui ui ui ui ui 5[ 5[ 5[ og *L @~.NQ.#) OQ.7) 6S.6S.OQ.7S.7S.7S.7S.OQ.7) QF+xj+R`%R`%R`%R`%R`%R`%R`%R`%S}%%P% l. l.R`%%P%>r+>H.'C+|r%'C+|5+|5+6z+Gu+ET&'C+vA*Gu+Gu+vA*'C+ET&)Z%eO@)Z%)Z%,X@,X@,X@)Z%DI#DI#'Z%,X@)Z%eO@eO@)Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%@9.@9.@9.eO@)Z%,X@,X@,X@eO@eO@eO@eO@eO@eO@eO@eO@%0+%0+$B#@9.)Z%,X@,X@'Z%,X@,X@,X@,X@,X@,X@,X@,X@o&=o&=bQ#bQ#+9.+9.bp.bp.+9.bQ#bQ#o&=bQ#bQ#+9.bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#:(++9.bQ#+9.bp.:(++9.o&=+9.bQ#bQ#bQ#+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.bp.+9.b,+Q+&j(#o&=bQ#bQ#+9.+9.+9.+9.bQ#bQ#q3.bp.o&=b,+bQ#+9.bQ#o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=+9.+9.+9.+9.+9.+9.+9.+9.o&=b,+b,+b,+b,+b,+b,+o&=o&=b,+b,+b,+b,+b,+b,+o&=b,+b,+b,+j(#j(#Q+&Q+&Q+&o&=+9.o&=S`%sX%j(#b,+w{@+9.bQ#bQ#o&=o&=o&=o&=o&=j(#j(#j(#j(#j(#j(#j(#j(#c3+c3+D6.:^+62.J!.-1.u4.h|.]q%8J.VF+1!;2!;3!;4!;q(+d`-bO&c5 dJ.,);Ep-WW-2m*ls-6k HX-$D={t ]T#Fz &[ T3 f5 kj#4##E> `3 #, ,p n| .9 +L@ 9 /d@(7 ]|@(7 (7 ;! Y:@+~ X:@r[@>b@tG -! -E }g *E *E }g }g &E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E Kv Kv Kv Kv Eu Eu Eu -! -! -! -! tG tG tG tG sG sG rG rG rG >b@>b@>b@[|@[|@[|@[|@[|@[|@[|@[|@/|@/|@^|@^|@^|@/|@/|@/|@_|@(|@(|@(|@(|@(|@(|@_|@(|@(|@(|@(|@(|@(|@(|@(|@/|@/|@/|@/|@/|@/|@/|@/|@@~ @~ ^|@^|@/|@(|@(|@_|@t! t! t! X:@X:@X:@X:@X:@r[@X:@+~ Y:@;! ;! ;! ;! @~ WA YA a~ 1f kI@')#')#B_#QT@QT@!)#))#+W@w! w! 7u#7u#$b@B&#gt@:f@ l&Qm@t&*5!;6!;[k=7!;!A=/f@[J=10&9U%JR={t=6t=KY%2>&!t=/=&M,&U*;n-;0=;V*;a=;A&&s *LP&iR&Yo@Qm@;6#LH# t# t#bj#6q#]M d1#d1#e1#e1#')#')#B_#B_#')#kI@1f a~ kI@')#B_#!)#w! {Y@8.#h@#h@#8.#8.#8.#{Y@{Y@XC@XC@w! +W@!)#QT@B_#')#')#')#B_#B_#kI@a~ @~ (|@[|@<|@Kv Kv &E &E &E u1$u1$u1$Kv &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$=E =E *E }g -E -! tG tG sG rG >b@X:@+~ Y:@;! ]|@(7 O9 .9 .9 +L@+L@@A@bP@@A@RT@bP@[`@UE@Cv@j$#C&#Z=#VE@P~#ir#N~#0u#Ut&Ut&tq=85*u_$Ut&u_$qR#(X%^T#_u TW-t_$s|*O}*R--X*;+W- X-[6.LW-.X-8!;9!;H6*0s&[v.g|.D6.t4.):..9.h;#g|. h~ =~@_e.ur&+~*Ui.MA.=~@=~@=~@ 8P.PN.cl..==.==.==.==.==Be+%z&3P .==.y&Xw&", "Hu+#9.PI.8v.VW.Hu+#9.8v.8v.PI.#9.cp.cp.cp.cp.aq.{t.j}+l#@l#@{t.(s.ym.j}+{t.aq.(s.(s.(s.aq.aq.ym.(s.aq.aq.aq.aq.(s.ym.(s.(s.(s.ym.ym.bv#bv#bv#(s.(s.(s.(s.(s.(s.(s.(s.(s.aq.aq.ym.6' B, bv#':+I> W_ {_ ;b.;b.{_ W_ &5 ;b.;b.{_ W_ W_ {_ ;b.;b.&5 W_ &5 n3 ;b.P~ /D.6}%{_ |x.6}%6}%|x.;b.O9. F.Hs ti ti ti ti ti ti ti 5[ 5[ ui ui ui ui ui C' rS #) 7S.7S.OQ.7) 7) 6S.7S.7S.#) #) 7S.OQ.7) QF+xj+R`%%P%&0+&0+%P%R`%R`%g~#&0+&0+#y#)i+R`%R`%6v@>H.6z+vA*'C+6z+ET&6z+'C+'C+'C+vA*vA*vA*vA*'C+'C+,X@)Z%eO@,X@'Z%'Z%)Z%$B#'Z%'Z%,X@,X@,X@,X@)Z%)Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%@9.@9.@9.eO@eO@eO@eO@)Z%,X@,X@)Z%)Z%)Z%eO@eO@eO@M7.%0+$B#eO@,X@'Z%p!#p!#,X@,X@,X@,X@,X@,X@,X@,X@o&=o&=bQ#+9.bp.:(+:(+,H.:(+bp.+9.bQ#bQ#+9.+9.bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#q3.,H.bp.bp.:(+bp.o&=j(#bp.bQ#o&=bQ#+9.bp.+9.o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=bQ#+9.bQ#b,+j(#b,+bQ#o&=o&=bQ#+9.+9.bQ#o&=o&=0q.:(+o&=b,+o&=bQ#bQ#o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+bQ#o&=b,+b,+b,+b,+o&=bQ#bQ#o&=b,+b,+b,+b,+o&=bQ#o&=b,+b,+b,+j(#j(#Q+&Q+&j(#bQ#o&=w{@w{@b,+o&=Q+&bQ#o&=b,+b,+j(#b,+o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+n4@n4@:^+:^+U%+62.62.62.tF.M|@hP.b%;_k=P4.J`-0!;TZ=a!;p7 b!;F3-c!;lX-lX-MC-il-IH#Kg #X-x8-/o ;c #)#8>#S3 s4 B0 ,3 7v `3 :} ,p @A@.9 O9 9 /d@/d@/d@(7 ]|@Y:@W:@t! X:@X:@tG -! -E }g }g }g }g -E Kv Kv Kv Kv Kv Kv Kv Kv u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E &E &E Kv Kv Kv Kv -E -E -! -! -! tG tG tG sG sG rG rG rG >b@>b@>b@[|@[|@[|@[|@[|@[|@[|@[|@_|@(|@/|@^|@@~ @~ ^|@^|@_|@(|@/|@/|@/|@/|@(|@_|@(|@(|@(|@(|@(|@(|@(|@(|@(|@(|@(|@(|@(|@(|@(|@(|@^|@^|@^|@^|@^|@/|@/|@/|@t! X:@X:@r[@r[@X:@t! +~ t! t! W:@Y:@;! ;! ;! ;! WA YA YA 1f kI@')#B_#QT@B_#QT@!)#))#+W@XC@{Y@{Y@7u#`o@$b@gt@'d@FN#Qm@m`&(f@X+*`V=3j=d!;L**!A=7U%{t=JY%JY%{t=KY%KY%2>&D-&3>&e!;WG&-=&A&&A&&7';f!;JP&LP&HY%Y+*Z+*Dd#LH#vg#OH#vg#bj#6q#]M ]M ]M 6q#QT@QT@!)#!)#QT@B_#')#kI@kI@')#B_#!)#w! {Y@8.#h@#8.#8.#{Y@{Y@XC@XC@XC@w! {Y@XC@+W@!)#QT@B_#B_#B_#')#kI@a~ @~ /|@:|@<|@$4@Kv &E &E &E u1$u1$Nt%Nt%&E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$*E *E }g }g -E -! tG tG rG >b@r[@t! W:@Y:@]|@(7 /d@O9 .9 .9 +L@+L@@A@uR@bP@uR@[`@UE@Cv@C&#Y=#Z=#VE@VE@P~#ir#O~#0u#Ut&u_$tq=85*u_$85*tq=pR#^T#(p=TW-Ez Js&O}*(T=p7-g!;4z=DW-55*.X-'5.9!;A0@h!;i!;cO@sQ@h;#):.g|.g|.g|.g|.g|.g|.g|.g|.g|.cO@cO@cO@dO@dO@dO@cO@cO@g|.g|.g|. h~ =~@!c.+~*MA.MA.MA.C9.=~@ W_ {_ ;b.;b.{_ W_ &5 {_ ;b.|x.|x.|x.|x.;b.{_ W_ ;b.{_ n3 ;b.P~ P~ O9.|x.6}% F.6}%|x.;b.|x.6}%si si Es )O )O uM EV.EV.si si si Es )O uM uM uM Bh.i4@TE&TE&TE&TE&TE&TE&ZT#ZT#un.un.un.i4@TE&a:@8H.Tp*I}++n++n+I}+Tp*>r+6v@+n+WD@I}+I}++n+Tp*QB@>H.ET&6z+'C+|r%vA*6z+|5+vA*vA*'C+'C+'C+'C+vA*vA*DI#,X@)Z%,X@DI#'Z%@9.M7.@9.eO@eO@)Z%)Z%)Z%)Z%)Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%,X@,X@)Z%)Z%)Z%)Z%eO@eO@'Z%'Z%'Z%,X@)Z%)Z%)Z%eO@@9.@9.eO@)Z%,X@DI#DI#p!#,X@,X@,X@,X@,X@,X@,X@,X@bp.bp.bp.bp.bp.:(+:(+:(+q3.,H.:(+bp.+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#:(+bp.+9.bp.:(+bp.b,+w{@bp.bQ#b,+o&=bp.:(++9.o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#j(#o&=+9.bQ#b,+b,+bQ#+9.j(#b,+o&=bQ#bQ#o&=b,+j(#<3+:(+o&=b,+b,+bQ#bQ#o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,++9.bQ#b,+j(#j(#b,+bQ#+9.+9.bQ#b,+j(#j(#b,+bQ#+9.o&=o&=b,+b,+b,+j(#j(#j(#w{@o&=bQ#b,+b,++9.+9.j(#o&=b,+j(#Q+&Q+&j(#b,+o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#n4@n4@D6.t4.a,+k5+k5+k5+u4.C!@SW#d-;j!;1!;A+;k!;F'.L3.E8-Mj [);R;;VZ=Qj-%x-2m*On=4) no=Y4-Io==1-86-l%#T3 g$#ub 4##Vr 7v <} <} bP@@A@.9 O9 9 9 /d@(7 ]|@;! Y:@+~ t! t! tG tG -! -E }g }g -E -E Kv Kv Kv Kv Kv Kv Kv Kv u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E &E &E u1$u1$u1$u1$}g -E -E -E -! tG tG tG sG sG rG rG rG >b@>b@>b@:|@:|@:|@:|@:|@:|@:|@:|@[|@_|@/|@@~ WA YA WA WA (|@/|@^|@@~ @~ ^|@/|@(|@^|@^|@^|@^|@^|@^|@^|@^|@(|@(|@(|@(|@(|@(|@(|@(|@/|@/|@^|@^|@^|@^|@@~ @~ X:@X:@r[@r[@X:@t! W:@Y:@W:@W:@Y:@;! ;! ;! Y:@Y:@YA a~ 1f kI@B_#QT@!)#))#))#))#))#+W@w! w! XC@XC@it@,)#e>#{m#Yt=6E& F=Du=l!;x*;/=;(=;yJ&E=;yJ&5t=!*;]t=KY%{t={t=KY%2>&D-&b%*m!;-=&A&&-=&WG&WG&WG&JP&]#*Yo@ l&;6#O8#SJ#vg#vg# t#bj#6q#6q#6q# t# t#))#+W@+W@+W@+W@))#!)#QT@')#B_#QT@))#+W@XC@{Y@8.#{Y@XC@XC@XC@w! w! +W@+W@h@#{Y@XC@+W@!)#QT@QT@QT@kI@1f YA ^|@_|@<|@$4@vR@&E &E &E u1$u1$Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$*E *E }g -E -! tG tG sG rG >b@r[@t! W:@;! ]|@(7 /d@O9 .9 @A@.9 .9 RT@uR@[`@b.#UE@Cv@C&#Z=#VE@P~#VE@VE@P~#N~#O~#Ut&u_$u_$85*85*85*tq=pR#(X%^T#(p=ah=Rl=yD [!-GA=Wo-f3*;4* X-n!;o!;,X-p!;q!;'y+G7.h;#n3.g|.dO@.9. W_ {_ ;b.;b.{_ W_ &5 {_ ;b.O9.6}%6}%O9.;b.{_ |x.O9.;b.&5 {_ uq. F.;b.6}% F.uq. F.|x.{_ ;b.O9.-h -h si Es uM EV.~I.~I.-h si si Es uM EV.~I.QF+yn*yn*yn*yn*TE&TE&TE&TE&ZT#un.un.un.un.ZT#i4@B, 5v@@[+Tp*I}+I}+Tp*@[+6v@4=+I}+WD@t=++n+t=+>r+h% 6z+w7+w7+vA*(W%(W%6z+#9.Gu+vA*'C+ET&ET&'C+vA*Gu+p!#'Z%)Z%,X@DI#'Z%$B#_r+M7.%0+$B#@9.eO@eO@eO@eO@'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%DI#DI#'Z%'Z%,X@)Z%)Z%)Z%DI#DI#DI#'Z%,X@,X@)Z%)Z%,X@,X@,X@,X@'Z%'Z%'Z%'Z%,X@,X@,X@,X@,X@,X@,X@,X@q3.q3.,H.:(+:(+bp.+9.+9.<3+0q.,H.:(++9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=bQ#bp.+9.b,+w{@:(+bQ#b,+o&=bp.:(++9.b,+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#Q+&b,+bQ#bQ#o&=o&=bQ#:(+Q+&j(#o&=bQ#bQ#o&=j(#Q+&v4.,H.o&=j(#b,+o&=bQ#o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=+9.+9.+9.+9.+9.+9.+9.+9.+9.bQ#b,+j(#j(#b,+bQ#+9.+9.bQ#b,+j(#j(#b,+bQ#+9.o&=o&=o&=b,+b,+j(#j(#j(#CI#o&=+9.o&=bQ#:(+bp.j(#b,+j(#Q+&w{@w{@Q+&b,+o&=+9.+9.+9.+9.+9.+9.+9.+9.c3+c3+o3.v5.T`%~Z%~Z%PJ*e{+rQ@%U*eO=e-;q&=i%=r!;p);H8=s!; A@0f=MC--h+lX-'h-;h-zE-On=F8-%)#M^#RJ#u4 VO-t4 g$#ub 4##Vr 7v 'p 'p uR@RT@@A@+L@O9 O9 /d@(7 ]|@;! Y:@W:@+~ +~ sG tG -! -E }g }g -E -E Kv Kv Kv Kv Kv Kv Kv Kv u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%}g }g -E -E -! -! tG tG sG sG rG rG rG >b@>b@>b@_|@_|@_|@_|@_|@_|@_|@_|@<|@[|@(|@@~ YA a~ YA YA /|@^|@@~ WA WA @~ ^|@/|@^|@^|@^|@^|@^|@^|@^|@^|@(|@(|@(|@(|@(|@(|@(|@(|@(|@/|@/|@^|@@~ @~ WA WA X:@r[@r[@r[@X:@+~ Y:@]|@Y:@;! ]|@]|@]|@;! Y:@W:@a~ a~ 1f ')#QT@!)#))#+W@XC@w! w! w! w! +W@+W@+W@>)#,{ 9.#i$#Yt=.H&@D=/I&t!;u!;v!;W#%M*;E=;w!;J-;ii&!*;x!;JY%{t={t=!t=5R=b%*_=;WG&WG&n-;@D=Du=Cu=s *#T&m`&Zo@Dd#O8#SJ#vg# t#bj#6q#]M ]M bj# t#vg#w! w! XC@XC@XC@w! ))#))#B_#QT@!)#))#+W@w! XC@{Y@XC@XC@w! w! +W@+W@+W@))# p@h@#{Y@w! ))#!)#!)#!)#kI@a~ WA /|@:|@$4@vR@Eu &E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$*E *E }g -E -! tG sG sG rG >b@r[@t! W:@;! ]|@(7 /d@+L@@A@@A@.9 .9 RT@uR@UE@UE@Cv@j$#Y=#VE@ir#ir#VE@P~#ir#N~#O~#Ut&u_$u_$u_$85*tq=pR#5N=^T#(p=(p=Ez ll=rU=(T=[C Wy=4z=MW-9';,X-y!;y!;z!;Hr&F7.)y+t4.n3.rQ@dO@o3.<(+Z`+):.cO@cO@cO@cO@cO@cO@cO@g|.dO@dO@dO@cO@cO@g|.g|.g|.cO@cO@cO@cO@cO@cO@cO@cO@vu#N:*N:*uG#uG#N:*N:*vu#*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#sX%sX%&r=&r=*r=*r=uG#uG#&r=*r=uG#vu#vu#uG#*r=&r=N:*vu#vu#;Z+fW=6w=6w=~U.uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*N:*&r=*r=N:*vu#vu#N:**r=&r=uG#&r=sX%*r=;Z+6w=fW=vu#&s*&s*&s*&s*&s*&s*&s*&s*=^@=^@wr*wr*+v=#x+#x+lh.;Z+;Z+;Z+;Z+fW=fW=fW=fW=6w=;Z+uG#*r=N:*N:*uG#*r==Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+;Z+vu#vu#N:*N:*uG#uG#*r=;Z+N:**r=*r=uG#N:**r=sX%&r=&r=*r=*r=uG#N:*N:*N:*&r=&r=&r=&r=&r=&r=&r=&r=uG#*r=&r=sX%sX%&r=*r=uG#vu#vu#vu#vu#vu#vu#vu#vu#sX%&r=*r=sX%CI#Q+&w{@CI#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*N:*uG#uG#uG#uG#uG#uG#uG#uG#&r=&r=&r=&r=&r=&r=&r=&r=sX%uG#vu#vu#uG#&r=*r=uG#&r=S`%S`%sX%uG#N:*N:**r=*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=&r=&r=&r=&r=&r=&r=yE#iM#l]#dr=^u=m}+m}+m}+dr=dr=dr=dr=dr=dr=dr=dr=qK+$' jM#mO#mO#jM#$' qK+mO#k4@j(+p2@p2@j(+k4@mO#o2@U*@..=3<@..=U*@17*J> 3<@U*@xE*17*17*xE*U*@3<@u!=u!=u!=HV.HV.u!=u!=u!=HV.[f.OP*x{+u!=HV.[f.U*@Av&.==.==.==.==cl.PN._b+PN.cl..==.==.==3P ", "PI.PI.#9.#9.cp.cp.[3+#9.#9.#9.#9.#9.#9.#9.#9.':+w4.fL.v% f% I> 8H.OJ.I> I> I> I> I> I> I> I> 4% f% I> w4.a, w4.fL.I> I> I> v% v% I> w4.cl+#0+bv#bv#bv#bv#bv#bv#bv#bv#bv#ym.ym.6' ns%B, bv#-J.I> n3 n3 ~_ n3 W_ ;b.|x.uq.uq.uq. F.O9.{_ n3 &_ {_ &5 n3 &5 ;b.|x.;b.W_ |x.O9.O9.|x.{_ {_ |x. F.w4.':+':+':+':+Vl.A{$#0+#0+A{$A{$A{$#0+DU%sv%QU+ns%6' ym.aq.aq.ym.6' ns%FI#ns%ns%B, 6' bv#ym.(s..l..l..l..l..l.N}.r3%|.&N}.>H.5v@.l.N}.r3%>H..l.|5+w7+6z+vA*vA*vA*'C+6z+vA*'C+6z+w7+w7+6z+'C+vA*,X@,X@,X@,X@,X@,X@,X@,X@eO@$B#%0+@9.)Z%'Z%,X@eO@$B#@9.)Z%,X@'Z%'Z%,X@,X@@9.@9.@9.eO@eO@)Z%)Z%)Z%,X@,X@,X@)Z%)Z%)Z%eO@eO@$B#@9.)Z%,X@,X@)Z%@9.$B#)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%DI#'Z%)Z%eO@@9.eO@)Z%,X@bQ#+9.:(+,H.,H.:(++9.bQ#o&=bQ#+9.bp.bp.+9.bQ#o&=b,+bQ#+9.bQ#b,+b,+o&=+9.bp.bp.bp.bp.bp.bp.bp.bp.j(#b,+o&=bQ#+9.bp.:(+,H.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.+9.bQ#bQ#bQ#o&=bQ#+9.bp.,H.,H.bp.+9.bQ#+9.+9.+9.b,+Q+&Q+&o&=bp.bQ#bQ#bQ#o&=o&=o&=b,+b,+o&=o&=o&=o&=o&=bQ#bQ#bQ#j(#o&=bQ#+9.+9.bQ#o&=j(#j(#j(#j(#j(#j(#Q+&Q+&Q+&j(#j(#j(#j(#j(#j(#j(#j(#b,+b,+o&=o&=o&=bQ#bQ#bQ#bQ#o&=o&=b,+b,+j(#j(#Q+&b,+b,+o&=o&=o&=bQ#bQ#bQ#c3+=g@c3+t4.a,+a,+A!;a,+:{.o3.g6@=g@@=@VF+b%;B!;R,;C!;O5*=Y=@2@z`+Qj-~<-X}-Xx-a5 Sj-IH#7u-E[*@p-8u-eS-l%#S3 g$#ub e5 `3 {1 'p bP@RT@bP@@A@O9 (7 /d@/d@]|@Y:@W:@t! r[@r[@sG sG tG tG tG -! -! -! Kv Kv Kv &E &E u1$u1$u1$pM%*L%u1$&E &E u1$*L%pM%GJ%GJ%Nt%u1$u1$Nt%GJ%GJ%GJ%u1$&E &E Nt%GJ%Nt%&E tG tG tG tG tG -! -! -! -E -! sG >b@r[@r[@r[@r[@[|@[|@:|@:|@_|@_|@(|@(|@(|@^|@@~ @~ ^|@/|@@~ YA WA @~ /|@_|@_|@_|@/|@^|@/|@/|@/|@/|@/|@/|@/|@/|@^|@^|@^|@^|@^|@^|@^|@^|@(|@/|@@~ YA a~ YA WA @~ Y:@W:@+~ X:@X:@+~ W:@Y:@]|@]|@]|@;! Y:@Y:@W:@W:@a~ a~ 1f kI@')#B_#QT@QT@QT@!)#))#QT@B_#QT@+W@{Y@,{ CQ$oi&]N%wh&Id&Pw=U &]%%6;*Qw=ov=sT=sT=lg&kp&!*;7t=99&]t=]t=99&w!;E=;sD=3>&&h&Gx=Gx= F=Du=.F=LP&jR&Yo@Qm@Zo@zg#SJ#bj#LH#LH#LH#SJ#OH# t#6q#]M +W@w! {Y@8.#8.#{Y@w! +W@!)#!)#QT@B_#QT@))#w! XC@8.#{Y@{Y@XC@XC@w! w! +W@+W@+W@))#!)#B_#')#kI@kI@a~ WA (|@_|@:|@<|@Eu u1$&E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$=E =E *E -E -! sG rG rG r[@t! Y:@;! ;! ]|@ 9 +L@O9 +L@@A@bP@uR@uR@bP@RT@bP@UE@Y=#P~#VE@Z=#VE@VE@VE@ir#0u#0u#0u#0u#85*qR#85*pR#^T#^T#^T#(p=k`&T8 Fk=D!;R--%1*2X-2u-8V-E!;9';35*F!; X-G!;n,*G7.;&=D6.<(+dO@rQ@ fL.fL.I> f% v% w4.xj+I> I> I> I> I> I> I> I> v% v% I> fL.w4.fL.fL.I> fL.I> I> I> I> w4.8H.cl+B{$bv#bv#bv#bv#bv#bv#bv#bv#ym.ym.bv#B, B, ym.-J.fL.&5 n3 n3 n3 &5 {_ ;b.;b.|x.O9.O9.|x.;b.W_ &5 O9.;b.W_ W_ {_ {_ W_ n3 ;b.|x.O9.;b.W_ W_ ;b.xj+Vl.Vl.Vl.Vl.Vl.B{$A{$#0+#0+A{$A{$A{$#0+DU%sv%QU+ns%6' ym.aq.aq.ym.6' ns%FI#ns%B, 6' ym.(s.aq.{t.N}.>H.>H.>H.>H.N}.r3%r3%N}.>H.5v@.l.N}.r3%>H..l.|5+ET&6z+vA*vA*vA*'C+6z+vA*'C+6z+ET&ET&6z+'C+vA*,X@,X@,X@,X@,X@,X@,X@,X@)Z%eO@@9.eO@,X@'Z%,X@eO@eO@eO@)Z%,X@,X@,X@)Z%)Z%eO@eO@eO@eO@)Z%)Z%,X@,X@,X@,X@,X@)Z%)Z%)Z%eO@eO@@9.eO@)Z%,X@,X@)Z%eO@@9.)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%DI#'Z%)Z%eO@@9.eO@)Z%,X@bQ#+9.:(+,H.,H.:(++9.bQ#bQ#+9.bp.:(+:(+bp.+9.bQ#b,+bQ#+9.bQ#b,+b,+o&=+9.bp.bp.bp.bp.bp.bp.bp.bp.b,+o&=o&=bQ#+9.bp.bp.:(+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.bQ#bQ#bQ#o&=o&=o&=bQ#+9.bp.:(+:(+bp.+9.bQ#+9.bp.bp.bQ#b,+j(#o&=+9.bQ#bQ#bQ#o&=o&=o&=b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=b,+o&=bQ#+9.+9.bQ#o&=b,+j(#j(#j(#j(#b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+o&=o&=bQ#bQ#bQ#o&=o&=o&=b,+b,+j(#j(#j(#b,+b,+o&=o&=o&=bQ#bQ#'Z%c3+=g@c3+c3+a,+a,+A!;A!;:{.a,+t4.n4@0M.QK.^0+*-;B,=W`=Ii=G0-V3 5o-.j-H!;H!;fl-EK-L@$'V=Tj-Lh &o={}*N^#l%#@l ) kj#t[ e5 S} /0#[`@[`@[`@bP@.9 9 9 /d@]|@;! W:@t! X:@r[@sG sG tG tG tG -! -! -! Kv Kv Kv &E &E u1$u1$u1$*L%GJ%u1$Kv Kv u1$GJ%*L%GJ%GJ%Nt%u1$u1$Nt%GJ%GJ%Nt%&E Kv &E Nt%Nt%u1$Kv -! -! -! -! tG tG tG tG -! tG rG >b@r[@r[@>b@>b@[|@[|@:|@:|@_|@_|@(|@(|@(|@^|@@~ @~ ^|@/|@@~ YA WA @~ ^|@/|@/|@/|@/|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@(|@/|@@~ WA YA WA @~ @~ Y:@W:@+~ t! t! +~ W:@Y:@]|@]|@]|@;! Y:@Y:@Y:@W:@a~ a~ 1f kI@')#B_#QT@QT@B_#QT@!)#QT@')#B_#))#XC@y`#t{ oi&]N%;t&3*;MA@Pw=c4&b4&6;*]%%C-&C-&6=;0-;7t=<=;]t=]t=]t=]t=yJ&w!;b%*mF= F=&h&Gx= F=Du=@D=HY%m`& l&Zo@;6#zg#SJ# t#LH#SJ#SJ#OH# t#bj#]M /M +W@w! XC@{Y@{Y@XC@w! +W@!)#QT@B_#B_#B_#!)#+W@w! {Y@{Y@{Y@XC@w! w! w! +W@+W@+W@))#QT@B_#')#kI@1f a~ @~ (|@:|@:|@<|@Eu u1$&E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$=E *E }g -E -! sG rG rG >b@t! W:@Y:@Y:@;! /d@+L@+L@.9 RT@uR@[`@[`@uR@bP@uR@i@#Z=#P~#VE@Z=#VE@P~#VE@N~#0u#Ut&0u#Ut&85*pR#tq=pR#^T#(p=(p=h_*s_$Js&I!;w~-%1*Wy=v1*zq-;4*EW-E4*3X-^X-35*)y+r~.0s&J!;o3..9.rQ@rQ@H.ET&w7+w7+w7+ET&6z+'C+'C+'C+6z+6z+6z+'C+vA*|r%'C+6z+w7+|5+|5+w7+6z+'C+|r%vA*'C+6z+w7+|5+[3+cp.vA*'C+'C+'C+'C+6z+6z+6z+6z+ET&|5+w7+6z+'C+ET&w7+w7+ET&6z+'C+vA*'C+'C+6z+'C+'C+6z+ET&ET&6z+'C+'C+,X@,X@,X@,X@,X@,X@,X@,X@DI#,X@eO@)Z%'Z%'Z%,X@eO@)Z%)Z%,X@,X@,X@)Z%eO@eO@)Z%)Z%)Z%,X@,X@,X@'Z%'Z%,X@,X@,X@)Z%)Z%)Z%eO@eO@)Z%)Z%,X@'Z%'Z%,X@)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%'Z%'Z%,X@eO@eO@eO@)Z%)Z%bQ#+9.:(+,H.,H.:(++9.bQ#+9.bp.:(+:(+:(+:(+bp.+9.b,+bQ#bp.+9.o&=b,+o&=+9.:(+:(+:(+:(+:(+:(+:(+:(+bQ#bQ#bQ#bQ#+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#o&=o&=b,+b,+b,+b,+bQ#+9.bp.bp.bp.bp.+9.bQ#bQ#bp.,H.:(++9.o&=o&=bQ#bQ#bQ#bQ#o&=o&=o&=b,+b,+bQ#o&=o&=o&=o&=o&=o&=o&=b,+o&=bQ#bQ#bQ#bQ#o&=b,+j(#j(#j(#b,+o&=bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=j(#b,+b,+b,+o&=o&=bQ#bQ#o&=o&=o&=b,+b,+j(#j(#j(#b,+b,+o&=o&=o&=bQ#bQ#'Z%c3+=g@c3+c3+a,+a,+A!;A!;78*:{.:{.:^+h|.Yj@@=@{U=!5.6) K!;<|*Kh ~C@qW+Fq-L!;M!;Y--3d-ke-B8-uH-@Y@6k 9>#l%#f5 ) s4 []#s[ (o Zp i@#i@#UE@b.#RT@+L@ 9 /d@(7 ;! W:@t! X:@r[@sG sG tG tG tG -! -! -! Kv Kv Kv &E &E u1$u1$u1$GJ%Nt%&E Kv Kv &E Nt%GJ%GJ%Nt%Nt%u1$u1$Nt%Nt%GJ%u1$Kv Eu Eu &E u1$&E Eu }g -E -E -! tG tG sG sG sG sG rG >b@>b@>b@rG rG [|@[|@:|@:|@_|@_|@(|@(|@(|@^|@@~ @~ ^|@/|@@~ YA WA WA WA WA WA @~ ^|@/|@@~ @~ @~ @~ @~ @~ @~ @~ (|@(|@(|@(|@(|@(|@(|@(|@(|@(|@^|@@~ @~ @~ ^|@^|@Y:@W:@+~ +~ +~ +~ W:@Y:@]|@]|@;! ;! ;! Y:@Y:@Y:@a~ a~ 1f kI@')#B_#QT@QT@')#B_#QT@B_#')#')#!)#+W@cp=t{ oi&]N%'t&,t&2A=MA@4u=c4&]%%4u=6*;1>&v=;9`%99&]t=]t=N!;N!;]t=,*;70*e!;b%*Du= F=&h&&h&Cu=Cu=Qm@Zo@Dd#zg#zg#O8#LH#vg#SJ#OH#vg# t#6q#]M /M d1#+W@+W@w! XC@XC@w! +W@+W@QT@QT@B_#B_#B_#QT@!)#))#XC@XC@XC@XC@w! w! w! +W@+W@+W@))#QT@B_#kI@1f 1f YA ^|@_|@:|@[|@<|@Eu u1$&E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$=E *E }g -E tG sG rG >b@>b@X:@W:@Y:@Y:@;! /d@O9 .9 @A@RT@uR@[`@[`@[`@[`@b.#Cv@Z=#P~#VE@VE@VE@P~#P~#N~#Ut&Ut&Ut&Ut&tq=pR#qR#5N=^T#(p=h_*k`&0p=rU=O!;>c Wy=R2*Lf*1d-8V-YT-y!;)4.99*Ev+Dq&/>*UF+UF+h;#):.rQ@rQ@H.w7+w7+|5+|5+w7+ET&6z+'C+'C+6z+ET&6z+6z+'C+vA*6z+6z+w7+w7+w7+w7+6z+6z+'C+'C+6z+6z+6z+ET&ET&ET&|r%|r%|r%|r%vA*'C+6z+ET&6z+ET&|5+w7+6z+'C+ET&w7+ET&ET&6z+6z+'C+'C+'C+'C+'C+6z+6z+6z+6z+6z+6z+'C+,X@,X@,X@,X@,X@,X@,X@,X@2p%DI#,X@,X@'Z%'Z%)Z%@9.,X@,X@'Z%'Z%,X@)Z%@9.$B#)Z%,X@,X@,X@'Z%'Z%DI#DI#,X@,X@,X@)Z%)Z%)Z%eO@eO@,X@,X@'Z%'Z%'Z%'Z%,X@,X@)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%'Z%,X@,X@)Z%)Z%eO@eO@eO@bQ#+9.:(+,H.,H.:(++9.bQ#:(+:(+:(+:(+:(+:(+:(+:(+o&=+9.bp.+9.o&=o&=bQ#bp.:(+:(+:(+:(+:(+:(+:(+:(+bp.bp.+9.+9.bQ#bQ#o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=b,+b,+j(#j(#j(#bQ#+9.+9.+9.+9.+9.+9.bQ#o&=bp.q3.q3.:(+bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=b,+b,+bQ#bQ#bQ#o&=o&=o&=o&=b,+o&=o&=o&=bQ#bQ#o&=o&=o&=Q+&j(#b,+o&=bQ#+9.bp.bp.o&=o&=o&=o&=o&=o&=o&=o&=j(#j(#b,+b,+b,+o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+o&=o&=o&=bQ#bQ#'Z%=g@=g@c3+c3+a,+a,+A!;A!;78*_{.Q!;62.u4.&o@0M.{U=$c-XN.s);Y+-G0-{e `b+R!;S!;T!;Qy-U}-3d-Xx-Sj-Fp-+p-8u-VO-@l g$#g$#R3 :u kx i[#Cv@i@#i@#b.#RT@+L@ 9 9 (7 ;! Y:@+~ X:@X:@sG sG tG tG tG -! -! -! Kv Kv Kv &E &E u1$u1$u1$u1$&E Kv Kv Kv Kv &E u1$Nt%Nt%u1$u1$u1$u1$Nt%Nt%&E Eu vR@Eu &E &E Kv vR@*E *E }g -E -! tG sG rG rG rG >b@>b@>b@rG sG sG [|@[|@:|@:|@_|@_|@(|@(|@(|@^|@@~ @~ ^|@/|@@~ YA WA YA a~ 1f a~ YA @~ /|@WA WA WA WA WA WA WA WA (|@(|@(|@(|@(|@(|@(|@(|@(|@(|@/|@/|@/|@/|@/|@/|@Y:@W:@W:@W:@W:@W:@W:@Y:@;! ;! ;! ;! ;! ;! Y:@Y:@a~ a~ 1f kI@')#B_#QT@QT@1f ')#QT@B_#')#kI@QT@$~ y`#d>#hj#ij#'t&!u&MA=3u=26&16&16&`t=L,&6*;0`%lg&]t=]t=N!;N!;N!;N!;,*;,*;W#%b%*Du=Cu=&h&&h&&h& F= l&;6#zg#zg#zg#zg#LH#OH#OH#vg# t#6q#]M /M d1#d1#+W@+W@+W@+W@+W@+W@+W@+W@QT@QT@B_#B_#B_#QT@QT@QT@w! w! w! w! w! w! w! w! w! +W@))#QT@')#1f a~ YA @~ /|@:|@[|@<|@$4@Kv u1$&E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$*E *E }g -! tG rG >b@>b@>b@X:@W:@Y:@Y:@;! /d@+L@+L@.9 @A@bP@uR@[`@b.#b.#i@#C&#VE@P~#VE@VE@P~#ir#ir#O~#u_$u_$u_$u_$qR#5N=5N=(X%^T#S2*0Q=T8 rU=(T=w~-O!;wj&v1*1d-$1*c-;U!;V!;,5.=G.G .i!;'y+W!;3I+.9.g|.rQ@dO@H*4i=5i=zk=zk=P!;X!;X!;zk=P!;P!;P!;zk=5i=4i=Hi=OP*OP*OP*OP*OP*OP*OP*OP*';$US+OP*OP*x{+[f.u!=1.+0, PN._b+ ==.y& ==.==)A&.==.==.==.==.==.==", "#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.<4 5% n3 W_ W_ n3 &_ ~_ n3 &5 &5 &5 &5 &5 &5 &5 &5 6}%|x.{_ &5 n3 &5 W_ {_ {_ {_ {_ {_ {_ W_ W_ fL.Vl.ym.ym.ym.ym.ym.ym.ym.bv#(s.aq.aq.ym.bv#ym.-J.a, ;b.;b.{_ {_ W_ &5 &5 W_ W_ W_ W_ W_ {_ {_ ;b.|x.;b.W_ {_ |x.O9.;b.{_ W_ {_ ;b.W_ n3 n3 W_ 8H..l.w7+|5+[3+[3+|5+|5+w7+'C+'C+6z+ET&ET&ET&6z+'C+6z+ET&ET&w7+w7+ET&ET&6z+ET&ET&6z+6z+'C+vA*|r%|r%vA*|r%|r%|r%|r%'C+ET&w7+6z+ET&|5+w7+6z+'C+ET&w7+ET&ET&ET&6z+6z+'C+'C+vA*6z+6z+6z+'C+'C+6z+6z+6z+)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%2p%DI#,X@,X@'Z%'Z%)Z%@9.,X@,X@'Z%'Z%,X@)Z%@9.$B#)Z%,X@,X@,X@'Z%'Z%DI#DI#,X@,X@,X@)Z%)Z%)Z%eO@eO@'Z%'Z%,X@,X@,X@,X@'Z%'Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%,X@,X@,X@,X@)Z%)Z%eO@eO@bQ#+9.:(+,H.,H.:(++9.bQ#:(+:(+:(+:(+:(+:(+:(+:(+o&=+9.bp.bp.bQ#o&=bQ#bp.:(+:(+:(+:(+:(+:(+:(+:(+:(+bp.bp.+9.bQ#o&=o&=b,+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.+9.+9.+9.+9.+9.o&=o&=o&=b,+b,+j(#j(#j(#+9.bQ#bQ#bQ#bQ#bQ#bQ#+9.o&=bp.q3.q3.:(+bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=b,+b,++9.+9.bQ#bQ#o&=b,+b,+b,+bQ#o&=o&=o&=o&=o&=o&=bQ#Q+&j(#b,+o&=bQ#+9.bp.bp.j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#b,+b,+b,+o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+o&=o&=o&=bQ#bQ#'Z%=g@=g@c3+c3+a,+a,+A!;4/*bw._{.Q!;62.u4.&o@%U*=g@aM.ho=Y!;)1-R5.#5-f *Z!;Fl `!;^<- ~;P_-_w-3d-~`@S<*HX-u4 T3 @l f5 2k=2k=kx i[#i@#UE@UE@[`@@A@ 9 O9 9 /d@]|@Y:@+~ t! X:@sG sG tG tG tG -! -! -! Kv Kv Kv &E &E u1$u1$u1$u1$&E &E Kv Kv &E &E u1$Nt%u1$u1$&E &E u1$u1$Nt%&E Eu vR@Eu &E &E Kv vR@=E *E }g -E -! tG sG sG rG rG >b@>b@>b@rG sG sG [|@[|@:|@:|@_|@_|@(|@(|@(|@^|@@~ @~ ^|@/|@@~ YA WA YA 1f 1f 1f YA @~ ^|@WA WA WA WA WA WA WA WA (|@(|@(|@(|@(|@(|@(|@(|@^|@/|@/|@/|@/|@/|@/|@/|@W:@Y:@Y:@Y:@Y:@Y:@Y:@W:@Y:@Y:@;! ;! ;! ;! ;! ;! a~ a~ 1f kI@')#B_#QT@QT@1f ')#QT@QT@')#')#B_#S~#y`#6}*Lj&A$;Kj&z$;S#;5;*ny&ny&$7&03&(v&lq&ix&v=;x!;x!;x!;N!;N!;x!;J-;J-;b%*sD=Du= F=&h&Gx=Gx=Gx=Y+* l&;6#Dd#;6#Dd#MH#SJ#OH#vg#bj#]M d1#d1#d1#d1#))#))#))#))#))#))#))#))#QT@QT@!)#!)#QT@QT@QT@B_#+W@+W@+W@+W@w! w! w! w! w! +W@!)#QT@kI@1f YA WA ^|@_|@<|@$4@<|@$4@Kv u1$&E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$*E }g -E -! sG rG >b@r[@r[@t! Y:@;! ;! ]|@ 9 .9 +L@+L@.9 @A@bP@[`@b.#UE@j$#Z=#P~#ir#P~#VE@ir#N~#N~#0u#85*85*85*85*pR#(X%^T#^T#^T#S2*s_$yD R--[C )3*>c +c-Lf*a|*Xi-H3*.~;V!;Y2.;$@<@.+~;J!;UF+J!;H*4i=4i=5i=zk=P!;P!;P!;P!;P!;P!;P!;zk=5i=Hi=Hi=23+23+23+23+23+23+23+23+US+US+23+OP*[f.u!=u!=3<@X@$)A&.==.y&+y&)A&.==)A&.==.== == == == ==", "cp.cp.#9.#9.PI.PI.PI.#9.#9.#9.#9.#9.#9.#9.<4 v% W_ {_ W_ ~_ &_ n3 &5 &5 &5 &5 &5 &5 &5 &5 &5 |x.;b.{_ W_ W_ W_ {_ {_ &5 W_ {_ {_ ;b.{_ W_ fL.':+(s.(s.(s.(s.(s.(s.(s.6' (s.{t.{t.(s.ym.ym.':+w4.{_ ;b.;b.;b.{_ W_ &5 |x.;b.{_ W_ W_ W_ {_ ;b.|x.{_ W_ {_ O9.6}%O9.;b.{_ ;b.|x.{_ &5 &5 {_ cl+N}.ET&w7+|5+|5+|5+|5+w7+'C+'C+6z+ET&w7+ET&ET&6z+ET&ET&ET&ET&ET&ET&ET&ET&|5+w7+ET&6z+'C+vA*|r%|r%6z+'C+vA*|r%|r%'C+ET&w7+6z+ET&|5+w7+6z+'C+ET&w7+6z+6z+ET&ET&ET&'C+vA*vA*ET&6z+'C+'C+'C+'C+6z+ET&)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%DI#,X@eO@)Z%'Z%'Z%,X@eO@)Z%)Z%,X@,X@,X@)Z%eO@eO@)Z%)Z%)Z%,X@,X@,X@'Z%'Z%,X@,X@,X@)Z%)Z%)Z%eO@eO@'Z%,X@)Z%)Z%)Z%)Z%,X@'Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%,X@,X@'Z%,X@)Z%eO@@9.bQ#+9.:(+,H.,H.:(++9.bQ#:(+:(+bp.+9.+9.bp.:(+:(+bQ#bp.:(+bp.bQ#o&=+9.:(+bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.+9.bQ#bQ#o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bp.bp.bp.bp.bp.bp.bp.bp.bQ#bQ#o&=o&=b,+b,+b,+b,++9.bQ#o&=o&=o&=o&=bQ#+9.bQ#bp.,H.:(++9.o&=o&=bQ#bQ#bQ#bQ#o&=o&=o&=b,+b,++9.+9.bQ#bQ#o&=b,+j(#j(#bQ#bQ#o&=b,+b,+o&=bQ#bQ#j(#j(#j(#b,+o&=bQ#bQ#bQ#j(#j(#j(#j(#j(#j(#j(#j(#Q+&Q+&j(#j(#b,+b,+b,+o&=j(#j(#j(#b,+b,+o&=o&=o&=b,+b,+o&=o&=o&=bQ#bQ#'Z%=g@{U=c3+c3+a,+a,+4/*4/*bw.y0.Q!;_{.J!.w5.:^+c3+j$&B,=6'%9n=82-.i-3f+Ai+@~;`!;rR-#~;]1-P_-3d-2m*F8-zn-N^#l%#T3 S3 2k=R3 kx Zp i@#b.#b.#bP@+L@/d@O9 O9 /d@]|@Y:@W:@t! t! sG sG tG tG tG -! -! -! Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%u1$&E &E &E &E u1$Nt%u1$Kv Eu Eu &E u1$&E Eu *E *E }g }g -E -! -! tG sG sG rG >b@>b@>b@rG rG [|@[|@:|@:|@_|@_|@(|@(|@(|@^|@@~ @~ ^|@/|@@~ YA YA YA a~ a~ YA WA @~ @~ @~ @~ @~ @~ @~ @~ @~ @~ (|@(|@(|@(|@(|@(|@(|@(|@WA @~ ^|@/|@/|@/|@/|@^|@W:@Y:@;! ;! ;! ;! Y:@W:@Y:@Y:@Y:@;! ;! ;! ]|@]|@a~ a~ 1f kI@')#B_#QT@QT@1f ')#!)#!)#QT@B_#QT@S~#cp=6}*vz&Kj&A$;T*;WB=S#;03&3r&oy&oy&93&1w&%#;sT=A-&JY%{t=KY%KY%{t=2>&2>&3>&M,& F=&h&Gx=Gx=G-&G-&Y+* l&Zo@;6#Zo@Zo@Dd#MH#SJ#OH#bj#]M d1#d1#/M /M ))#))#!)#QT@QT@!)#))#))#!)#))#))#+W@))#!)#QT@B_#))#))#+W@+W@+W@w! w! w! w! +W@!)#B_#kI@a~ WA @~ (|@:|@$4@vR@$4@vR@Kv Nt%&E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$}g }g -E tG sG >b@r[@r[@t! W:@]|@(7 (7 /d@+L@@A@.9 .9 .9 RT@bP@b.#i@#Cv@Y=#VE@ir#ir#P~#VE@ir#O~#O~#Ut&tq=tq=tq=tq=5N=^T#S2*^T#^T#h_*T8 [!-p7-wj&b|*+);Lf*Wi-@c-Q2*-D=$~;L}*Yl@H*4i=5i=5i=5i=5i=zk=zk=P!;P!;X!;X!;P!;zk=5i=4i=OP*OP*OP*OP*OP*OP*OP*OP*OP*23+US+OP*[f.u!=u!=U*@x*$%z& ==.y&+y&)A&3P ==.== == ==)A&)A& ==", "cp.cp.#9.#9.PI.PI.PI.#9.#9.#9.#9.#9.#9.#9.<4 a, ;b.;b.&5 ~_ &_ &5 ;b.&5 &5 &5 &5 &5 &5 &5 &5 W_ {_ {_ ;b.|x.;b.;b.{_ ~_ n3 W_ ;b.;b.;b.;b.w4.':+(s.(s.(s.(s.(s.(s.(s.6' (s.j}+j}+aq.ym.ym.':+I> W_ ;b.|x.|x.|x.;b.{_ O9.|x.;b.{_ {_ ;b.|x.O9.6}%|x.{_ ;b.O9.O9.|x.{_ ;b.|x.O9.;b.W_ W_ ;b.xj+$0+vA*'C+6z+ET&ET&ET&6z+vA*'C+6z+ET&w7+w7+w7+ET&w7+ET&ET&6z+6z+ET&ET&w7+w7+w7+w7+w7+w7+w7+w7+w7+[3+w7+6z+vA*vA*'C+ET&w7+6z+ET&|5+w7+6z+'C+ET&w7+'C+6z+ET&w7+ET&6z+vA*|r%ET&6z+'C+vA*vA*'C+6z+ET&eO@eO@eO@eO@eO@eO@eO@eO@)Z%eO@@9.eO@,X@'Z%,X@eO@eO@eO@)Z%,X@,X@,X@)Z%)Z%eO@eO@eO@eO@)Z%)Z%,X@,X@,X@,X@,X@)Z%)Z%)Z%eO@eO@,X@)Z%eO@@9.@9.eO@)Z%,X@)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%,X@'Z%'Z%'Z%)Z%eO@$B#bQ#+9.:(+,H.,H.:(++9.bQ#:(+bp.+9.bQ#bQ#+9.bp.:(+bQ#bp.:(+:(++9.bQ#+9.:(+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#bQ#o&=o&=o&=+9.bQ#o&=b,+b,+o&=bQ#+9.+9.bp.bp.bQ#b,+j(#o&=+9.bQ#bQ#bQ#o&=o&=o&=b,+b,+bp.+9.+9.bQ#o&=b,+j(#j(#+9.bQ#o&=b,+b,+o&=bQ#+9.j(#j(#j(#j(#b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+Q+&Q+&Q+&j(#j(#b,+b,+b,+j(#j(#j(#b,+b,+o&=o&=o&=b,+b,+o&=o&=o&=bQ#bQ#'Z%=g@{U=c3+c3+a,+a,+4/*4/*y0.4/*A!;Q!;62.p3.D6.g6@j$&#o=6) FW-[v-%~;&~;*~;=~;-~;;~;>~;#~;,~;P_-Gq-E[*SW-8u-6J@l%#T3 R3 []#kx i[#i@#UE@b.#bP@+L@/d@+L@O9 9 (7 ;! W:@+~ t! sG sG tG tG tG -! -! -! Kv Kv Kv &E &E u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$&E Kv Kv &E u1$u1$Nt%&E Kv &E Nt%Nt%u1$Kv }g }g }g }g -E -E -E -E -! tG rG >b@r[@r[@>b@>b@[|@[|@:|@:|@_|@_|@(|@(|@(|@^|@@~ @~ ^|@/|@@~ YA a~ YA WA @~ @~ @~ @~ WA ^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@^|@a~ YA @~ ^|@/|@/|@^|@@~ W:@Y:@;! ]|@]|@;! Y:@W:@W:@Y:@Y:@Y:@;! ]|@]|@]|@a~ a~ 1f kI@')#B_#QT@QT@1f B_#))#+W@!)#QT@!)#$~ Cn@Rp@Lj&T*;Lj&=t&,u&WB=ng&_v&Ga#Ga#NY%(v&'~;1>&)~;9U%lm&8U%8U%lm&8`%E-&/=&/=&G-&Gx=G-&G-&Ao&Ao&Z+*;6#Dd#;6#Z+* l&Zo@;6#MH#SJ# t#]M d1#d1#/M ]M ))#!)#QT@B_#B_#QT@!)#))#+W@+W@w! XC@w! +W@!)#QT@!)#))#))#))#+W@w! w! w! w! +W@!)#B_#1f YA @~ ^|@_|@<|@vR@vR@vR@vR@&E Nt%&E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$}g -E -! tG rG >b@r[@r[@+~ ;! /d@ 9 9 O9 .9 bP@bP@bP@bP@uR@b.#Cv@C&#Z=#VE@ir#N~#ir#P~#P~#N~#0u#O~#u_$tq=qR#tq=qR#5N=(p=]T#(p=^T#]T#Js&GA=Wy=2X-!~;~~;1d-@c-pg*5k&{~;]~;15*f6@f6@#R+W!;G7.'y+E7.g|.S%3P cl.)A&.y& ==3P ==.== ==)A&%z&%z&)A&", "cp.cp.#9.#9.PI.PI.Hu+#9.#9.#9.#9.#9.#9.#9.<4 cl+O9.;b.&5 &_ ~_ W_ |x.&5 &5 &5 &5 &5 &5 &5 &5 n3 &5 ;b.|x.O9.O9.;b.{_ &_ ~_ W_ ;b.|x.|x.;b.a, ':+(s.(s.(s.(s.(s.(s.(s.6' (s.j}+j}+aq.ym.ym.':+v% I> w4.8H.cl+8H.8H.a, 8H.a, w4.w4.a, 8H.xj+OJ.P~ 6}%|x.|x.|x.|x.{_ n3 |x.O9.O9.|x.{_ {_ |x.l`.%c%(W%|r%vA*'C+'C+vA*vA*vA*'C+6z+w7+w7+w7+w7+w7+w7+ET&ET&6z+6z+ET&ET&w7+ET&w7+|5+[3+cp.PI.Hu+Hu+#9.[3+ET&'C+vA*'C+ET&w7+6z+ET&|5+w7+6z+'C+ET&w7+'C+6z+ET&w7+ET&6z+vA*|r%w7+6z+'C+vA*vA*'C+6z+w7+eO@y}*eO@eO@eO@eO@eO@eO@eO@$B#%0+@9.)Z%'Z%,X@eO@$B#@9.)Z%,X@'Z%'Z%,X@,X@@9.@9.@9.eO@eO@)Z%)Z%)Z%,X@,X@,X@)Z%)Z%)Z%eO@eO@,X@)Z%@9.$B#$B#@9.)Z%,X@)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%,X@'Z%'Z%'Z%)Z%@9.$B#bQ#+9.:(+,H.,H.:(++9.bQ#bp.+9.bQ#o&=o&=bQ#+9.bp.bQ#bp.:(+:(++9.bQ#+9.:(+o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#bQ#bQ#+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=bp.bp.+9.+9.bQ#bQ#bQ#o&=+9.bQ#o&=j(#j(#o&=bQ#+9.+9.+9.+9.b,+Q+&Q+&o&=bp.bQ#bQ#bQ#o&=o&=o&=b,+b,+bp.bp.+9.bQ#o&=b,+j(#Q+&+9.bQ#o&=j(#j(#o&=bQ#+9.j(#j(#j(#j(#j(#Q+&Q+&Q+&o&=o&=o&=o&=o&=o&=o&=o&=Q+&Q+&Q+&j(#j(#j(#b,+b,+Q+&j(#j(#b,+b,+o&=o&=bQ#b,+b,+o&=o&=o&=bQ#bQ#'Z%=g@=g@c3+t4.t4.a,+A!;A!;Q!;[d.[d.a,+U%+U%+t4.I7.]Z@T[&ho=(~;J_-Y3*_~;r[-1G@8; 'D=T!;5d-Pj-BU-il-eX-no={}*N^#86-T3 :u Yk uy (o S} i@#UE@uR@.9 /d@+L@O9 9 (7 ;! W:@+~ t! sG sG tG tG tG -! -! -! Kv Kv Kv &E &E u1$u1$u1$Nt%Nt%GJ%GJ%GJ%GJ%Nt%Nt%u1$&E &E Kv Kv &E &E u1$GJ%u1$&E &E Nt%GJ%Nt%&E -E -E -E }g }g }g }g }g -E -! sG >b@r[@r[@r[@r[@[|@[|@:|@:|@_|@_|@(|@(|@(|@^|@@~ @~ ^|@/|@@~ YA 1f YA @~ ^|@/|@^|@@~ WA /|@/|@/|@/|@/|@/|@/|@/|@^|@^|@^|@^|@^|@^|@^|@^|@1f a~ WA ^|@/|@^|@@~ WA W:@Y:@;! (7 (7 ;! Y:@W:@W:@W:@Y:@Y:@;! ]|@]|@]|@a~ a~ 1f kI@')#B_#QT@QT@kI@QT@+W@w! ))#!)#!)#$~ .W@y`#hj#:v&yz&oi&GL#e4&b3&R8#b`%b`%%)&GY-L,&6*;:~;)!;&a&&!;&!;&a&=k&8^&T &F-&)t=)t=G-&)t=Ao&Ao&zg#O8#MH#zg#Z+*Qm@ l&Z+*O8#SJ# t#]M /M /M ]M 6q#))#!)#B_#')#')#B_#!)#))#w! w! XC@{Y@XC@w! ))#QT@!)#!)#))#))#+W@+W@w! w! w! +W@!)#B_#1f YA @~ ^|@:|@<|@vR@Eu vR@vR@&E Nt%&E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$}g -E -! tG rG >b@r[@X:@W:@]|@ 9 O9 O9 +L@@A@uR@[`@[`@[`@b.#i@#C&#VE@ir#P~#ir#N~#ir#P~#uy N~#A_#0u#cw qR#qR#qR#qR#(X%(p=]T#(p=^T#]T#s|*[C +c-v1*+c-v1*Wi-Xi-5k&og*-4*<~;(7.[&+(7.1P*H7.0s&ws&b@@g|. Av&h%=Rj.3P )A&.==3P ==.== ==)A&%z&%z&)A&", "Hu+#9.PI.Hu+Hu+#9.[3+PI.PI.PI.#9.#9.cp.cp.s3.v% &5 W_ &5 &_ ~_ W_ 6}%&) &_ n3 &5 W_ &5 n3 ~_ &) &_ n3 &5 W_ &5 n3 ~_ &5 &5 W_ W_ W_ W_ &5 v% B{$(s.{t.aq.(s.ym.aq.j}+ym.(s.{t.j}+l#@j}+{t.aq.w% Vl.DU%DU%Vl.l3 -J.':+Vl.Vl.Vl.Vl.Vl.Vl.Vl.Vl.>r+#y##y##y##y##y##y#)i+ l.)i+)i+#y##y#g~#R`%I}+Vl.ym.ym.bv#bv#6' 6' 6' bv#bv#bv#bv#bv#bv#bv#bv#w7+w7+w7+w7+w7+w7+w7+w7+ET&ET&ET&ET&ET&ET&ET&ET&ET&ET&ET&ET&ET&ET&ET&ET&'C+ET&|5+ET&vA*Gu+vA*ET&)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%$B#$B#$B#$B#eO@)Z%'Z%DI# W=tn. W=y}*y}*^n#^n#^n#M7.M7.0q.q3.,H.:(+bp.+9.bp.bp.bp.bp.bp.bp.bp.bp.,H.:(+:(+q3.0q.q3.+9.b,+eO@eO@eO@eO@eO@eO@eO@eO@'Z%'Z%,X@,X@)Z%eO@eO@@9.'Z%)Z%eO@eO@,X@'Z%,X@eO@@9.)Z%'Z%,X@eO@eO@)Z%'Z%q3.,H.bp.bQ#bQ#bQ#+9.bp.bp.bp.bp.+9.bQ#o&=o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#S`%b,+:(+bp.b,+Q+&bQ#,H.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#S`%w{@b,+bQ#+9.bQ#b,+j(#<3+,H.o&=Q+&w{@j(#+9.,H.bp.bp.bp.bp.bp.bp.bp.bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+o&=bQ#+9.bp.+9.+9.+9.+9.+9.+9.+9.+9.b,+o&=o&=o&=o&=b,+j(#Q+&o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+o&=o&=bQ#bQ#bQ#+9.b,+b,+b,+b,+b,+b,+b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=bp.bp.bp.bp.bp.bp.bp.bp.n4@n4@D6.D6.D6.D6.:{.:{.:{.:{.:{.D6.D6.D6.D6.D6.%U*]q%QK.}~;|~;1~;2~;3~;wV&4~;5~;6~;7~;8~;9~;Jx@Zx-F8-7u-:1-U=#g5 @l g$#[]#Yk t[ Zp S} /0#:} 7, ]|@(7 (7 (7 ]|@Y:@t! X:@X:@r[@r[@>b@rG sG tG tG Eu Kv &E u1$u1$u1$u1$&E u1$Nt%Nt%Nt%GJ%GJ%*L%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%&E &E Kv Kv Kv Eu Eu Eu -! -! -! -! -E -E -E -E tG tG tG sG sG rG rG rG sG sG rG rG rG >b@>b@>b@+~ t! X:@X:@t! W:@;! (7 ]|@;! W:@+~ t! X:@X:@X:@W:@+~ +~ t! t! X:@X:@r[@(|@/|@/|@^|@@~ @~ WA WA ^|@@~ YA YA YA WA ^|@/|@@~ @~ @~ @~ WA a~ kI@')#1f 1f a~ WA /|@/|@WA 1f kI@kI@kI@kI@kI@kI@kI@kI@))#))#))#!)#!)#!)#!)#!)#Ev@_r@e>#MN#e>#9.#Ic&#b@EL#EL#DL#LN#0!&0!&8^&8^&%)&%)&%)&%)&%)&7^&7^&7^&%)&%)&20&20&Q8#%)&R8#S8#zg#O8#MH#O8#zg#Zo@Y+*Yo@MH#SJ#bj#/M e1#e1#d1#/M !)#!)#QT@QT@QT@!)#))#+W@+W@))#!)#QT@QT@!)#))#+W@w! +W@!)#!)#!)#))#w! XC@XC@))#B_#')#kI@1f WA /|@/|@(|@[|@$4@Eu &E &E u1$&E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$*L%GJ%GJ%Nt%u1$&E Kv Kv *E }g -E tG rG r[@X:@t! ]|@(7 /d@O9 .9 RT@bP@uR@!)#w! 8.#h$#$b@gt@P~#O~#A_#Bv@uy @|#@|#R3 |n *[ cw ,<-Zq J[$J[$;c Yp @p=h_*+6*Um@Ui*>+->+-iX=RE /e*>1-@W-HP&0~;EV&a~;o3.rQ@ {h&)A& ==.== ==%z&+y&Be+)A&)A&)A&)A&)A&)A&", "Hu+#9.#9.Hu+Hu+#9.[3+PI.PI.#9.#9.cp.cp.[3+;H.v% &5 W_ &5 ~_ ~_ W_ O9.&_ ~_ &5 W_ {_ W_ &5 n3 &_ ~_ &5 W_ {_ W_ &5 n3 n3 n3 &5 W_ W_ W_ W_ I> ':+aq.j}+{t.ym.bv#(s.aq.ym.(s.{t.j}+j}+{t.(s.ym.j}+aq.ym.bv#ym.ym.bv#6' ym.ym.ym.ym.ym.ym.ym.Vl.>r+>r+#y#>r+#y#>r+#y#>r+)i+@[+)i+@[+)i+>r+#y#>r+Vl.ym.ym.bv#bv#bv#6' 6' bv#bv#bv#bv#bv#bv#bv#bv#w7+w7+w7+w7+w7+w7+w7+w7+ET&ET&ET&ET&ET&ET&ET&ET&6z+6z+6z+6z+6z+6z+6z+6z+'C+ET&|5+ET&vA*|r%vA*6z+eO@eO@eO@eO@eO@eO@eO@eO@$B#$B#$B#$B#eO@)Z%'Z%j$&R]$Ie+tn.tn.y}*y}*y}*y}*$B#$B#q3.,H.:(+bp.{S*{S*bp.bp.bp.bp.bp.bp.bp.bp.,H.:(+bp.bp.,H.,H.+9.b,+)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%,X@,X@,X@)Z%)Z%)Z%)Z%)Z%'Z%)Z%eO@eO@,X@'Z%,X@eO@eO@)Z%'Z%,X@eO@eO@)Z%'Z%q3.:(+bp.bQ#bQ#bQ#+9.bp.+9.+9.+9.+9.bQ#bQ#bQ#bQ#+9.+9.+9.+9.+9.+9.+9.+9.CI#o&=:(+:(+b,+Q+&o&=:(+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+bQ#bp.,H.,H.:(++9.bQ#q3.:(+bQ#j(#j(#b,++9.bp.+9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+o&=bQ#+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=bQ#bQ#o&=b,+j(#j(#o&=o&=o&=o&=o&=o&=o&=o&=j(#b,+b,+b,+o&=o&=bQ#bQ#b,+b,+b,+b,+b,+b,+b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.h|.eO=SW#B!;W);b~;8`-jW=c~;d~;e~;f~;>`@Q`-g~;h~;DQ-Zx-&o=Kg 6o=_<-T3 @l 7J@s[ t[ t[ Zp /0#:} 7, /d@/d@/d@/d@(7 Y:@+~ t! X:@r[@r[@>b@rG sG tG tG Eu Eu Kv u1$u1$u1$&E &E u1$u1$u1$Nt%Nt%Nt%GJ%GJ%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%&E &E &E Kv Kv Eu Eu Eu -! -! -! -! -E -E -E -E tG tG tG sG sG rG rG rG sG sG rG rG rG >b@>b@>b@t! X:@X:@X:@t! +~ Y:@]|@]|@;! W:@+~ t! X:@X:@t! W:@+~ +~ +~ t! X:@X:@X:@^|@^|@^|@^|@^|@@~ @~ @~ /|@^|@WA WA WA @~ ^|@/|@@~ ^|@^|@@~ WA YA 1f kI@a~ 1f kI@a~ WA @~ YA 1f kI@kI@kI@kI@kI@kI@kI@kI@QT@QT@!)#!)#!)#!)#!)#!)#^J W=#h@#h@#8.#XC@ t#vg#g%&g%&g%&g%&}Q%}Q%}Q%h>;C/&C/&C/&C/&C/&C/&C/&C/&]W=]W=C/&{W=7^&7^&7^&8^&P8#zg#Dd#;6#;6#;6#;6#;6#OH# t#]M e1#f1#f1#e1#d1#!)#!)#QT@QT@QT@!)#+W@+W@+W@))#!)#QT@QT@!)#))#+W@+W@))#QT@QT@QT@!)#))#+W@XC@))#B_#kI@kI@a~ @~ /|@/|@_|@[|@$4@Eu &E &E u1$&E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$GJ%GJ%Nt%u1$&E Kv Kv Eu }g }g -! tG rG r[@t! t! ]|@(7 /d@O9 .9 @A@bP@uR@S~#8q#h@#h$#$b@gt@P~#O~#|n z, uy @|#:u 2k=z_#Bu=Bu=#)#Q*#J~#J[$;c Yp /o h_*s_$GN#(B=ZY=#c-i~;42-hX-hX-8);,+-j~;cU&Aa@rQ@cO@):.<(+<(+H.>r+>H.@[+.l.@[+5v@6v@5v@6v@;H.(s.(s.ym.ym.bv#bv#bv#6' bv#bv#bv#bv#bv#bv#bv#bv#6z+6z+6z+6z+6z+6z+6z+6z+ET&ET&ET&ET&ET&ET&ET&ET&6z+6z+6z+6z+6z+6z+6z+6z+6z+ET&w7+ET&'C+vA*vA*6z+eO@eO@eO@eO@eO@eO@eO@eO@@9.@9.$B#@9.@9.)Z%,X@]Z@]Z@d3+Ie+Ie+R]$ W= W= W=eO@eO@:(+:(+bp.bp.{S*{S*bp.bp.bp.bp.bp.bp.bp.bp.q3.bp.bQ#bQ#+9.bp.+9.bQ#,X@,X@,X@,X@,X@,X@,X@,X@)Z%)Z%)Z%)Z%)Z%,X@,X@,X@'Z%)Z%eO@eO@,X@'Z%,X@eO@eO@,X@'Z%,X@eO@@9.)Z%,X@,H.:(+bp.+9.bQ#+9.+9.bp.bQ#bQ#bQ#bQ#+9.+9.+9.+9.bp.bp.bp.bp.bp.bp.bp.bp.j(#+9.,H.:(+o&=j(#b,++9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.bp.,H.q3.,H.:(++9.bQ#:(+bp.+9.bQ#o&=bQ#bQ#+9.o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+o&=o&=o&=bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#+9.+9.+9.o&=b,+b,+j(#j(#j(#j(#j(#j(#j(#j(#Q+&Q+&j(#j(#b,+b,+b,+o&=b,+b,+b,+b,+b,+b,+b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.&o@eO=SW#k~;r!;l~;m~;nX=2.&Zs#n~;o~;p~;P`-{#;q~;CQ-Va-_1-4) *o=:<-8>#S3 R3 []#Yk t[ Zp /0#:} 36 O9 O9 O9 9 (7 ;! W:@+~ X:@r[@r[@>b@rG sG tG tG vR@Eu Kv &E u1$u1$&E &E &E &E &E &E u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$&E &E &E Kv Kv Eu Eu -E -E -E -E -! -! -! -! tG tG tG sG sG rG rG rG sG sG rG rG rG >b@>b@>b@X:@r[@r[@X:@X:@+~ Y:@Y:@;! Y:@W:@+~ t! t! t! t! W:@+~ +~ +~ t! t! t! t! @~ @~ @~ ^|@^|@^|@^|@^|@(|@/|@^|@@~ @~ ^|@^|@/|@^|@^|@^|@^|@@~ WA a~ 1f a~ kI@B_#')#1f YA YA a~ kI@kI@kI@kI@kI@kI@kI@kI@')#')#B_#QT@!)#!)#))#))#^J Dv@{Y@{Y@+W@))#/M ]M gy#Pv#Pv#cj#-k&7~%2L=2L=x~&x~&x~&62&62&62&62&62&r~;S(&x~&62&]W=C/&{W=8^&P8#;6#Z+* l&Z+*;6#O8#LH# t#6q#/M f1#ew ew ew f1#!)#QT@QT@QT@!)#))#+W@w! +W@+W@))#!)#!)#))#+W@+W@))#!)#QT@B_#B_#QT@!)#!)#w! !)#')#kI@1f a~ @~ (|@(|@:|@<|@vR@Kv &E &E &E &E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$GJ%Nt%Nt%u1$&E Kv Eu Eu }g -E -! sG >b@X:@t! +~ ;! ]|@/d@ 9 +L@@A@RT@bP@@t#YC@ p@$b@B&#gt@ir#0u#z, uy @|#@|#R3 wf=Bu=&[ &[ #)#Q*#J~#J[$;c ^m /o k`&0p=Ui*4Z=/e*RE s~;)<-$T&$T&t~;v -Qi@+:+[v.e6@):..9..9.H.ET&.l.w7+5v@|5+;H.cp.s3.cp.(s.(s.(s.ym.ym.bv#bv#bv#bv#bv#bv#bv#bv#bv#bv#bv#6z+6z+6z+6z+6z+6z+6z+6z+ET&ET&ET&ET&ET&ET&ET&ET&'C+'C+'C+'C+'C+'C+'C+'C+ET&ET&ET&6z+'C+'C+'C+'C+,X@,X@,X@,X@,X@,X@,X@,X@@9.@9.@9.@9.@9.eO@,X@]Z@j$&l1+d3+d3+R]$R]$R]$ W=,X@,X@+9.bp.bp.bp.{S*{S*bp.bp.bp.bp.bp.bp.bp.bp.,H.+9.b,+j(#o&=+9.+9.+9.'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%@9.eO@eO@)Z%,X@,X@'Z%'Z%'Z%)Z%eO@eO@,X@'Z%,X@eO@)Z%,X@'Z%,X@eO@@9.eO@,X@:(+:(+bp.bp.+9.+9.+9.+9.o&=o&=o&=bQ#+9.bp.bp.bp.:(+:(+:(+:(+:(+:(+:(+:(+o&=bp.,H.:(+bQ#j(#b,+o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.bp.bp.+9.bQ#b,+j(#bQ#bQ#+9.+9.+9.+9.bQ#o&=b,+b,+b,+b,+b,+b,+b,+b,+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=b,+o&=o&=bQ#bQ#bQ#o&=o&=b,+b,+b,+b,+b,+b,+b,+b,++9.+9.bp.bp.+9.bQ#o&=b,+j(#j(#j(#j(#j(#j(#j(#j(#w{@Q+&Q+&Q+&j(#j(#b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.h|.H8@0M.{U=VF+u~;v~;w~;x~;y~;z~;A~;B~;C~;D~;E~;MP-DQ-F8-+p-Z}-x[-8>#T3 wf=:u s[ Yk Zp 4' <} n| .9 .9 +L@O9 /d@]|@Y:@W:@X:@r[@r[@>b@rG sG tG tG vR@Eu Kv &E &E &E &E Kv Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E &E Kv Kv Kv -E -E -E -E -! -! -! -! tG tG tG sG sG rG rG rG sG sG rG rG rG >b@>b@>b@r[@r[@r[@X:@t! +~ W:@W:@;! Y:@W:@+~ t! t! t! +~ +~ +~ +~ +~ +~ +~ +~ +~ WA WA @~ @~ ^|@/|@/|@(|@(|@(|@/|@/|@/|@^|@^|@/|@@~ ^|@^|@^|@@~ WA YA a~ a~ ')#!)#!)#')#1f a~ a~ kI@kI@kI@kI@kI@kI@kI@kI@1f kI@kI@B_#QT@!)#))#))#`Z Q~#w! +W@QT@')#f1#e1#07#07#07#97#=g&_0#_0#_0#T(&r~;S(&S(&S(&x~&x~&x~&r~;r~;r~;S(&x~&62&9!&DL#Zo@Z+* l& l& l&Z+*;6#Dd# t#bj#]M d1#f1#f1#f1#f1#QT@QT@QT@QT@!)#))#+W@w! w! +W@+W@+W@+W@+W@+W@w! +W@))#))#!)#!)#!)#!)#!)#+W@QT@kI@1f a~ YA ^|@_|@_|@:|@<|@vR@Kv &E &E &E &E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$Nt%u1$u1$&E Kv Eu vR@vR@-E -! tG rG r[@t! +~ W:@]|@]|@/d@O9 +L@@A@bP@bP@8q#9.#h$#B&#B&#Si@ir#0u#uy @|#uy uy 2k=z_#&[ ,<-&[ #)#Q*#J~#J[$;c Yp @p=T8 SE %V=>+-H9-p#-'<-.5-IA=HP&W:*W:*t~;tF.e1+Z`+<(+.9.-6w=uG#&r=*r=*r=&r=&r=&r=&r=*r=*r=<(+<(+):.b@rG sG tG tG $4@vR@Eu Kv &E &E Kv Kv Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E &E Kv Kv }g }g -E -E -! -! tG tG tG tG tG sG sG rG rG rG sG sG rG rG rG >b@>b@>b@>b@r[@X:@t! +~ W:@W:@W:@Y:@W:@+~ t! t! t! +~ +~ +~ +~ +~ +~ W:@W:@W:@W:@WA WA @~ @~ ^|@/|@/|@(|@(|@(|@(|@(|@/|@^|@^|@@~ WA @~ @~ @~ @~ WA YA a~ a~ ')#!)#!)#B_#1f 1f 1f 1f 1f 1f 1f 1f 1f 1f 1f a~ 1f kI@')#B_#QT@!)#!)#]C@`Z ))#QT@kI@1f dw f1#]0#]0#]0#87#F5@_0#_0#_0#~m#~m#~m#dj#ej#ej#.p@.p@ej#dj#~m#/i&/i&~m#dj#ej# l&Z+*Z+*Zo@Z+*Qm@m`&;G=SJ#OH# t#6q#/M d1#e1#f1#B_#B_#B_#QT@!)#))#w! XC@w! w! w! XC@XC@w! w! w! XC@XC@XC@w! w! +W@))#))#))#B_#1f a~ YA WA /|@:|@:|@<|@$4@Eu Kv &E &E &E &E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Eu vR@$4@$4@-! tG sG >b@X:@+~ W:@Y:@(7 (7 9 O9 .9 RT@uR@uR@YC@f@#$b@gt@gt@Si@ir#0u#@|#uy uy Bv@wf=*[ &[ ,<-&[ $)#J~#y' ^p=^m @p=/p=O}*p7-5Z=xD s7-(e*Ia*.5-M~;N~;j~;O~;Gf.cO@b@rG sG tG tG $4@vR@Eu Kv Kv Kv Kv Eu &E &E &E &E u1$u1$Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%u1$u1$&E &E &E Kv *E }g }g -E -! tG tG sG tG tG tG sG sG rG rG rG sG sG rG rG rG >b@>b@>b@r[@X:@t! W:@Y:@Y:@Y:@Y:@W:@W:@+~ t! t! +~ +~ W:@+~ +~ +~ W:@W:@W:@Y:@Y:@@~ @~ @~ ^|@^|@^|@^|@^|@/|@(|@(|@(|@/|@@~ WA YA a~ YA WA WA WA YA a~ a~ 1f ')#QT@QT@kI@a~ 1f kI@1f 1f 1f 1f 1f 1f 1f 1f a~ 1f 1f kI@')#')#B_#B_#lI@Nx@QT@')#1f a~ dw e1#nx nx ]0#]0#F5@_0#=g&=g&/i&/i&~m#dj#ej#.p@.p@.p@EL#.p@dj#~m#/i&~m#dj#ej#Z+*Zo@;6#;6#Z+*m`&HY%~l=zg#O8#LH#vg#bj#/M e1#f1#B_#B_#B_#QT@!)#+W@XC@{Y@w! XC@{Y@{Y@{Y@{Y@XC@w! {Y@{Y@{Y@{Y@XC@w! ))#!)#!)#')#a~ YA WA @~ (|@[|@<|@$4@vR@Kv &E &E &E &E &E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$&E Kv Kv Eu vR@$4@<|@<|@tG sG rG r[@t! W:@Y:@;! /d@ 9 O9 .9 RT@uR@[`@b.#9.#MN#gt@Si@Si@'d@N~#0u#uy z, Bv@|n z_#*[ Bu=&[ &[ $)#y' po=Yp @p=6U%Z4-R--R2*ZY=#c-#c-4Z=V~;16-8);0~;W~;,+-):.e6@o3..9.):.cO@dO@dO@g|. a, 8H.fL.f% I> v% f% f% f% I> fL.w4.I> v% f% f% f% I> fL.w4.cl+a, I> f% 5% f% v% fL.':+aq.j}+{t.ym.bv#(s.aq.{t.aq.(s.ym.(s.aq.{t.l#@{t.(s.bv#bv#ym.(s.ym.bv#ym.ym.ym.ym.ym.ym.ym.ym.N7.I1.L7.$Z*K7.&o@h|.h|.&o@&o@&o@&o@&o@h|.h|.eO@aq.aq.aq.aq.(s.(s.ym.ym.bv#bv#bv#bv#bv#bv#bv#bv#w7+w7+w7+w7+w7+w7+w7+w7+ET&ET&ET&ET&ET&ET&ET&ET&|5+|5+|5+|5+|5+|5+|5+|5+|5+6z+vA*'C+ET&ET&'C+|r%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%eO@@9.@9.@9.eO@ W=R]$Ie+tn.tn.y}*y}*y}*y}*$B#$B#q3.,H.:(+bp.{S*{S*bp.bp.bp.bp.bp.bp.bp.bp.+9.bQ#bQ#bp.,H.q3.:(++9.)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%,X@,X@,X@)Z%)Z%)Z%)Z%)Z%'Z%)Z%eO@eO@,X@'Z%,X@eO@,X@DI#DI#'Z%eO@$B#@9.eO@+9.bp.:(+,H.:(+bp.bQ#o&=+9.+9.+9.+9.bQ#bQ#bQ#bQ#+9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#+9.bp.:(+:(+bp.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.+9.+9.bp.bp.:(+o&=o&=bQ#bQ#bQ#+9.bp.bp.:(+:(+:(+:(+:(+:(+:(+:(+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=b,+o&=+9.bp.+9.o&=j(#w{@bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=bQ#bQ#o&=b,+j(#j(#o&=o&=o&=o&=o&=o&=o&=o&=j(#b,+b,+b,+o&=o&=bQ#bQ#b,+b,+b,+b,+b,+b,+b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.J7.o4@2b+VF+q&=X~;.*=Y~;Z~;5.#]0 `~;U~; {;.{;B,;Hg d2-E[*7u-F[*9>#6J@#)#*[ :u s[ Zp 4' {1 <} uR@RT@+L@(7 ;! Y:@W:@W:@X:@r[@r[@>b@rG sG tG tG $4@$4@vR@Eu Kv Kv Eu Eu u1$u1$u1$Nt%Nt%Nt%GJ%GJ%&E &E &E &E &E &E &E &E Nt%Nt%Nt%u1$u1$&E &E &E *E *E }g -E -! tG sG sG tG tG tG sG sG rG rG rG sG sG rG rG rG >b@>b@>b@X:@t! W:@;! ]|@]|@;! ;! W:@+~ +~ t! t! +~ W:@W:@+~ +~ +~ W:@Y:@Y:@Y:@;! ^|@^|@^|@^|@^|@@~ @~ @~ ^|@/|@/|@/|@^|@WA a~ 1f kI@1f a~ YA YA a~ 1f 1f kI@')#B_#kI@a~ YA 1f ')#a~ a~ a~ a~ a~ a~ a~ a~ 1f 1f 1f kI@kI@kI@kI@kI@H5@lI@')#kI@a~ 1f f1#d1#87#87#87#^0#_0#_0#_0#_0#07#07#)m#!m#cj#Pv#Pv#gy#NH#gy#cj#!m#!m#Pv#g%&KN#zg#zg#Dd#;6#Z+*Y+*Yo@;G=Zo@;6#O8#SJ#bj#d1#ew xy ')#')#B_#QT@!)#+W@XC@{Y@w! XC@{Y@8.#8.#{Y@XC@w! XC@XC@{Y@{Y@XC@+W@!)#QT@QT@')#a~ WA WA ^|@_|@<|@<|@$4@Eu Kv &E &E &E &E &E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$Kv Kv Eu vR@$4@<|@<|@[|@sG sG >b@X:@+~ W:@;! ;! O9 +L@.9 RT@uR@b.#UE@i@#f@#i$#Si@'d@'d@'d@N~#Ut&Bv@Bv@|n A_#*[ *[ *[ *[ &[ $)#y' =1-@p=[n b:*6L=.6*2u-q7-ZY=>+-hV=s~;{O&,+-m[-@1*#:+[v.Z`+sQ@g|.dO@rQ@Z`+dO@):..9. 8H.8H.fL.5% I> v% f% 5% 5% v% fL.w4.I> v% f% 5% 5% v% fL.w4.l`.8H.fL.f% 5% 5% f% l3 bv#(s.{t.aq.(s.ym.aq.j}+5!.$9.j}+aq.ym.(s.(s.aq.6!.{t.6' B, bv#(s.bv#ns%ym.ym.ym.ym.ym.ym.ym.^n#N7.I1.L7.$Z*K7.&o@h|.h|.K7.&o@&o@h|.h|.%U*J7.J7.{t.aq.aq.aq.(s.(s.ym.ym.bv#bv#bv#bv#bv#bv#bv#bv#w7+w7+w7+w7+w7+w7+w7+w7+ET&ET&ET&ET&ET&ET&ET&ET&[3+[3+[3+[3+[3+[3+[3+[3+|5+6z+vA*vA*ET&w7+'C+Gu+@9.@9.@9.@9.@9.@9.@9.@9.)Z%)Z%eO@@9.@9.@9.eO@ W= W=tn.tn.sZ y}*^n#^n#^n#M7.M7.0q.q3.,H.:(+{S*NR*bp.bp.bp.bp.bp.bp.bp.bp.+9.bQ#+9.,H.<3+<3+,H.+9.eO@eO@eO@eO@eO@eO@eO@eO@'Z%'Z%,X@,X@)Z%eO@eO@@9.'Z%)Z%eO@eO@,X@'Z%,X@eO@'Z%DI#p!#'Z%eO@$B#$B#eO@+9.bp.:(+,H.:(+bp.bQ#o&=bp.bp.bp.+9.bQ#o&=o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bp.,H.,H.:(+bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#j(#j(#Q+&j(#j(#o&=bQ#bQ#bQ#bQ#o&=o&=bQ#+9.bp.:(+,H.,H.,H.,H.,H.,H.,H.,H.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=b,+bQ#+9.bp.bp.o&=j(#w{@+9.+9.+9.+9.+9.+9.+9.+9.b,+o&=o&=o&=o&=b,+j(#Q+&o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+o&=o&=bQ#bQ#bQ#+9.b,+b,+b,+b,+b,+b,+b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=j(#j(#j(#j(#j(#j(#j(#j(#D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.D6.N7+[M@]q%^0+s~=+{;@{;|~;^!;a`-#{;9h bZ-9J.${;7k n-5X-&5-_1-4) oo=9>#$)#Bu=:u s[ Zp S} {1 <} bP@@A@O9 (7 Y:@W:@+~ +~ X:@r[@r[@>b@rG sG tG tG <|@$4@vR@Eu Kv Kv Eu Eu u1$Nt%Nt%Nt%GJ%GJ%*L%*L%&E &E &E &E &E &E &E &E Nt%Nt%Nt%u1$u1$u1$&E &E *E *E }g -E -! tG sG sG tG tG tG sG sG rG rG rG sG sG rG rG rG >b@>b@>b@t! +~ Y:@]|@(7 (7 ]|@;! W:@+~ +~ t! t! +~ W:@Y:@+~ +~ W:@W:@Y:@Y:@;! ;! (|@/|@/|@^|@@~ @~ WA WA ^|@^|@/|@/|@^|@WA 1f kI@')#kI@1f a~ a~ 1f 1f kI@')#')#')#a~ WA WA 1f B_#a~ a~ a~ a~ a~ a~ a~ a~ kI@kI@kI@1f 1f 1f 1f 1f 0~ H5@')#kI@a~ 1f e1#]M )m#07#07#97#_0#F5@F5@kf&^0#97#97#07#!m#cj#cj#Pv#gy#Pv#cj#cj#Pv#NH#-3#Ia#SJ#MH#Dd#Z+* l& l&Z+*Zo@Z+*;6#zg#SJ#bj#e1#xy LZ$')#')#B_#B_#!)#+W@XC@{Y@w! XC@8.#h@#h@#8.#XC@w! w! w! XC@XC@w! ))#B_#')#QT@kI@YA WA @~ ^|@_|@<|@$4@vR@Eu Kv &E &E &E &E &E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$Kv Eu Eu vR@$4@<|@[|@[|@sG rG >b@X:@+~ Y:@;! ]|@+L@.9 @A@bP@[`@UE@i@#Cv@e>#{m#Si@'d@'d@:f@N~#Ut&|n |n A_#/m *[ *[ z_#z_#Bu=$)#@)#Jo=/p=@' rg*qy=[C Wi-5$-tk*5Z=%V=>G %{;&{;a~;Jn.*u.Z`+v5.cO@cO@Z`+M:*M:*cO@.9.sQ@):.dO@ xE*..=1.+1.+1.+3<@..=&, Av&Bv&Bv&ZQ.Av&{h&~h&0, 0, 0, 0, 0, 0, ", "PI.PI.PI.PI.PI.PI.PI.8v.8v.8v.Hu+Hu+Hu+Hu+Hu+j% x% w% l3 l3 l3 l3 w% Vl.-J.w% 7% 7% j% w% -J.j% j% 7% 7% 7% x% l3 ':+-J.l3 w% l3 ':+':+l3 x% {t.aq.(s.ym.ym.(s.aq.{t.6' bv#(s.{t.j}+{t.aq.(s.{t.{t.{t.{t.{t.{t.{t.{t.bv#ym.ym.(s.aq.{t.{t.pD&@9.I1.c+#[M@$Z*%U*%U*h|.K7.&o@&o@h|.h|.%U*%U*J7.aq.aq.{t.j}+{t.(s.bv#6' ym.ym.ym.ym.ym.ym.ym.ym.ET&ET&ET&ET&ET&ET&ET&ET&6z+ET&|5+[3+[3+|5+ET&6z+[3+[3+|5+|5+w7+ET&ET&ET&w7+|5+|5+|5+[3+[3+cp.cp.eO@eO@eO@eO@eO@eO@eO@eO@eO@)Z%)Z%eO@@9.eO@'Z%C<& W=tn.tn.tn. W= W= W= W=)Z%)Z%bp.bp.bp.bp.{S*{S*,H.,H.,H.,H.,H.,H.,H.,H.bp.bp.bp.bp.bp.bp.bp.bp.eO@eO@eO@eO@eO@eO@eO@eO@%0+$B#$B#@9.)Z%,X@,X@'Z%eO@eO@)Z%)Z%)Z%,X@,X@,X@p!#DI#'Z%'Z%'Z%'Z%DI#p!#bQ#+9.:(+,H.,H.:(++9.bQ#+9.bQ#o&=b,+o&=+9.:(+,H.,H.:(++9.bQ#bQ#+9.:(+,H.b,+o&=+9.:(+:(++9.bQ#b,+,H.+9.o&=o&=bp.bp.bQ#j(#bp.+9.bQ#o&=o&=bQ#+9.bp.,H.bp.+9.bQ#bQ#+9.bp.,H.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=Q+&j(#j(#b,+b,+o&=o&=bQ#j(#Q+&w{@CI#w{@j(#o&=+9.o&=o&=o&=o&=o&=o&=o&=o&=j(#b,+bQ#o&=j(#Q+&b,+o&=j(#j(#b,+b,+b,+b,+b,+o&=o&=b,+Q+&w{@w{@Q+&b,+o&=+9.+9.+9.+9.+9.+9.+9.+9.v5.t4.D6.:^+:^+D6.t4.v5.t4.t4.t4.t4.t4.t4.t4.t4.:{.:^+c3+He+{U=v!=K3.@{;*{;k!;={;-{;{H&;{;2u*>{;>';x7-H0-z0@&o=_1-M^#eS-,<-wf=[]#[]#z, uy Zp 'p [`@bP@@A@@A@@A@O9 ;! +~ W:@+~ X:@>b@rG sG sG sG Eu Eu Eu Eu Kv Kv &E &E &E &E u1$u1$Nt%Nt%Nt%GJ%u1$u1$u1$&E &E Kv Kv Kv &E &E &E &E &E &E &E &E }g }g -E -E -! -! tG tG }g }g -E -E -! -! -! tG rG rG >b@>b@r[@r[@r[@X:@t! +~ Y:@;! ]|@;! Y:@W:@X:@X:@X:@X:@X:@X:@X:@X:@r[@r[@X:@t! t! +~ W:@W:@@~ /|@_|@:|@:|@/|@@~ YA WA WA WA WA @~ @~ @~ @~ @~ @~ WA WA YA a~ a~ 1f 1f 1f 1f a~ a~ YA YA YA a~ a~ a~ a~ a~ a~ a~ a~ ')#kI@1f WA @~ @~ a~ kI@Nx@Nx@B_#')#kI@kI@xy xy ]0#]0#]0#]0#kf&kf&kf&kf&^0#e1#e1#e1#d1#]M t#OH#e1#d1#]M t#SJ#O8#Dd#;6#SJ#O8#;6#;6#O8#O8#;6# l&Dd#Zo@Zo@zg#OH#]M e1#e1#kI@')#QT@!)#+W@w! w! w! XC@{Y@8.#8.#8.#8.#{Y@XC@+W@w! w! XC@w! ))#QT@')#a~ WA /|@/|@/|@/|@:|@<|@<|@vR@Kv Eu vR@$4@Eu &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv Kv vR@<|@[|@<|@<|@:|@(|@X:@X:@X:@t! +~ Y:@]|@(7 (7 O9 bP@[`@[`@[`@b.#UE@e>#{m#:f@Rm@Rm@Rm@O~#0u#Bv@A_#/m /m z_#*[ ,<-#D=I~#=1-=1-Jo=/p=Nj=Ra-|x=Lf*Lf*tk*W+-(e*/e*,{;'{;m[-N~;D6.1w.dO@Z`+e1+n3.[v.Z`+cO@):..9.<(+.9.):.g|.g|.g|.g|.g|.g|.g|.g|.cO@cO@g|.g|.g|. xE*xE*xE*xE*xE*xE*", "PI.PI.PI.PI.PI.PI.PI.#9.#9.PI.PI.PI.PI.Hu+Hu+j% x% w% w% l3 l3 l3 l3 Vl.-J.w% j% 7% j% w% l3 -J.l3 x% j% j% x% w% l3 l3 w% w% -J.Vl.Vl.l3 j% {t.aq.(s.ym.ym.(s.aq.{t.bv#ym.(s.{t.{t.{t.aq.(s.{t.{t.{t.{t.{t.{t.{t.{t.aq.aq.aq.aq.(s.(s.(s.(s.@9.L7.PK.L7.&o@%U*%U*&o@K7.K7.K7.&o@h|.h|.h|.)Z%6' bv#ym.(s.ym.bv#6' B, ym.ym.ym.ym.ym.ym.ym.ym.ET&ET&ET&ET&ET&ET&ET&ET&6z+ET&|5+[3+[3+|5+ET&6z+|5+|5+w7+w7+ET&ET&6z+6z+ET&w7+w7+w7+|5+|5+[3+[3+)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%eO@)Z%)Z%eO@$B#@9.)Z%j$& W=tn.tn.tn. W= W= W= W=)Z%)Z%bp.bp.bp.bp.{S*{S*,H.,H.,H.,H.,H.,H.,H.,H.bp.bp.bp.bp.bp.bp.bp.bp.eO@eO@eO@eO@eO@eO@eO@eO@%0+$B#@9.@9.)Z%)Z%,X@'Z%eO@eO@)Z%)Z%)Z%,X@,X@,X@)Z%eO@@9.@9.@9.@9.eO@)Z%+9.+9.bp.:(+:(+bp.+9.+9.bp.+9.+9.bQ#+9.bp.,H.q3.:(+bp.+9.+9.+9.+9.bp.:(++9.+9.bp.bp.bp.+9.bQ#bQ#,H.+9.o&=o&=bp.bp.bQ#j(#bp.+9.bQ#o&=o&=bQ#+9.bp.:(+bp.+9.bQ#bQ#+9.bp.:(+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=j(#j(#j(#b,+o&=o&=o&=bQ#+9.+9.bQ#o&=o&=o&=bQ#+9.o&=o&=o&=o&=o&=o&=o&=o&=j(#b,+bQ#o&=j(#Q+&b,+o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+j(#j(#j(#j(#b,+b,+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o3.t4.D6.:^+:^+D6.t4.o3.:^+:^+:^+:^+:^+:^+:^+:^+:{.62.D6.I7.=g@v!=v!=Bk=*{;){;i%=SZ-Fn ta 6>#!{;d';66-dX-E8-_1-_1-M^#8u-Q*#Bu=7J@s[ @|#@|#Zp {1 [`@bP@RT@@A@@A@O9 ]|@+~ W:@+~ X:@>b@rG sG sG sG vR@Eu Eu Eu Kv Kv &E &E Kv &E &E &E u1$u1$Nt%Nt%u1$u1$u1$&E &E Kv Kv Kv &E &E &E &E &E &E &E &E }g }g -E -E -! -! tG tG -E -E -! -! -! tG tG tG rG rG >b@>b@r[@r[@r[@r[@X:@t! W:@Y:@Y:@Y:@W:@+~ X:@X:@X:@X:@X:@X:@X:@X:@X:@X:@t! t! t! t! +~ +~ ^|@/|@_|@:|@_|@/|@@~ YA WA WA WA WA WA WA YA YA WA YA YA YA YA a~ a~ a~ 1f 1f a~ a~ YA YA WA WA a~ a~ a~ a~ a~ a~ a~ a~ kI@1f a~ YA WA YA kI@')#lI@lI@')#kI@1f 1f xy Lz nx nx nx nx JO%JO%JO%nx f1#f1#f1#f1#e1#/M ]M 6q#d1#d1#]M bj#vg#LH#MH#O8#SJ#O8#Dd#Dd#zg#O8#;6# l&Dd#;6#Zo@zg#OH#]M d1#d1#B_#B_#QT@))#))#+W@+W@+W@{Y@{Y@8.#h@#h@#8.#{Y@{Y@+W@w! w! w! +W@))#QT@')#a~ WA /|@/|@/|@(|@:|@<|@<|@vR@Kv Eu vR@vR@Eu &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv Kv vR@<|@<|@$4@$4@[|@_|@X:@X:@X:@t! +~ Y:@]|@(7 (7 +L@bP@[`@[`@[`@b.#i@#MN#0+&FN#Rm@Rm@Rm@O~#0u#A_#cw }n }n Bu=&[ #D=y' po==1-2g Io=@' t|*zQ-ce-Lf*a|*q7-(e*>+-`4-D#+~{;c=;#:+rQ@rQ@M:*-Z+rQ@ xE*xE*xE*xE*xE*xE*", "PI.PI.PI.PI.PI.PI.PI.[3+[3+cp.#9.#9.PI.PI.Hu+l#@l#@l#@j}+j}+{t.{t.{t.(s.aq.j}+$9.$9.$9.j}+{t.ym.ym.aq.{t.j}+l#@l#@j}+j}+j}+{t.(s.bv#ym.j}+5!.{t.aq.(s.ym.ym.(s.aq.{t.ym.ym.(s.aq.{t.aq.aq.(s.aq.aq.aq.aq.aq.aq.aq.aq.j}+j}+{t.aq.(s.ym.bv#bv#@9.$B#$B#@9.)Z%)Z%eO@$B#%0+%0+$B#$B#$B#@9.@9.@9.B, 6' bv#ym.ym.ym.bv#bv#ym.ym.ym.ym.ym.ym.ym.ym.ET&ET&ET&ET&ET&ET&ET&ET&6z+ET&|5+[3+[3+|5+ET&6z+ET&ET&ET&ET&6z+6z+6z+6z+6z+6z+6z+ET&ET&w7+w7+w7+)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%eO@)Z%)Z%eO@%0+%0+@9. W=^n#Ak=Ak=Ak=^n#^n#^n#^n#@9.@9.,H.,H.,H.,H.zy.zy.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.eO@eO@eO@eO@eO@eO@eO@eO@$B#$B#@9.eO@eO@)Z%,X@,X@eO@eO@)Z%)Z%)Z%,X@,X@,X@@9.@9.$B#$B#$B#$B#@9.@9.:(+bp.+9.+9.+9.+9.bp.:(+:(+:(+bp.bp.bp.:(+,H.q3.+9.+9.bp.:(+:(+bp.+9.+9.q3.,H.:(+bp.+9.+9.+9.+9.:(++9.bQ#bQ#+9.+9.bQ#b,+bp.+9.bQ#o&=o&=bQ#+9.bp.:(+bp.+9.+9.+9.+9.bp.:(+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+o&=o&=o&=bQ#:(+:(+:(+:(+bp.bQ#o&=b,+o&=o&=o&=o&=o&=o&=o&=o&=j(#b,+bQ#o&=j(#Q+&b,+o&=bp.+9.+9.bQ#o&=o&=b,+b,+b,+b,+o&=o&=o&=o&=b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=o3.t4.D6.D6.D6.D6.t4.o3.p3.p3.p3.p3.p3.p3.p3.p3.U%+62.D6.I7.eg+o2.o2.Bk={{;]{;^{;/{;6n /d `p 3u*Q<*xX-B,;d2-eX-F8-SW-zn-I~#$)#2k=s[ (o (o S} /0#b.#uR@RT@@A@.9 O9 ]|@W:@Y:@W:@t! r[@rG rG sG sG vR@vR@vR@Eu Eu Kv Kv Kv Eu Eu Kv Kv &E &E &E u1$u1$u1$u1$&E &E Kv Kv Kv &E &E &E &E &E &E &E &E }g }g -E -E -! -! tG tG -! -! tG tG sG sG sG sG rG rG rG >b@>b@r[@r[@r[@r[@X:@t! +~ +~ +~ +~ t! +~ +~ +~ +~ +~ +~ +~ +~ +~ +~ t! t! t! t! X:@X:@^|@/|@_|@_|@_|@/|@@~ WA @~ WA WA YA a~ a~ 1f 1f 1f a~ a~ a~ a~ YA YA YA a~ a~ YA YA YA WA WA WA YA YA YA YA YA YA YA YA 1f a~ a~ a~ 1f ')#B_#QT@H5@H5@1f 1f 1f a~ Lz Lz nx nx nx nx JO%JO%JO%nx (d@O9 +L@+L@+L@+L@O9 O9 .9 .9 @A@bP@uR@b.#UE@UE@SJ#MH#zg#zg#O8#zg#Dd#Zo@zg#;6#;6#zg#OH#6q#]M ]M ))#))#))#))#))#))#))#))#{Y@8.#h@#h@#h@#h@#8.#{Y@+W@w! w! w! +W@!)#QT@B_#a~ @~ /|@(|@/|@(|@:|@$4@<|@vR@Kv Kv vR@vR@Kv u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv &E Eu $4@$4@vR@vR@<|@_|@t! t! t! +~ W:@;! (7 /d@ 9 .9 bP@[`@[`@[`@UE@Cv@{m#]m#Rm@5`%Rm@Rm@O~#Ut&cw 6v >p >p #)#$)#J~#po=po=-1-x3-o7-/|$Ra-`q e:*1d-z0-p#-#c-de-*>-%|*({;&{;*u.gX.h;#[v.-Z+sQ@rQ@sQ@<(+):.b@rG rG rG vR@vR@vR@Eu Eu Eu Kv Kv vR@Eu Eu Eu Kv Kv &E &E u1$u1$u1$&E &E Kv Kv Kv &E &E &E &E &E &E &E &E }g }g -E -E -! -! tG tG tG tG tG sG sG rG rG rG sG sG rG rG >b@>b@r[@r[@>b@r[@r[@X:@t! t! t! t! +~ +~ +~ +~ +~ +~ +~ +~ W:@W:@+~ t! t! X:@r[@r[@/|@/|@(|@_|@(|@/|@@~ WA @~ @~ WA YA 1f kI@')#')#')#kI@kI@1f a~ a~ YA YA a~ YA YA YA WA WA @~ @~ WA WA WA WA WA WA WA WA a~ YA a~ kI@QT@))#!)#!)#I~ I~ a~ a~ a~ a~ Lz Lz mx mx mx mx IR%IR%IR%mx /7 +L@.9 @A@.9 +L@/d@(7 .9 .9 @A@RT@RT@bP@uR@uR@OH#SJ#LH#MH#MH#O8#zg#Dd#O8#zg#Dd#O8#OH#bj#bj# t#w! w! +W@))#!)#!)#!)#!)#8.#8.#h@# p@ p@h@#8.#8.#+W@+W@+W@))#!)#QT@B_#')#YA @~ (|@(|@(|@(|@[|@$4@$4@Eu &E Kv Eu vR@Kv u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv &E Eu $4@$4@vR@vR@<|@:|@+~ +~ +~ W:@Y:@]|@/d@ 9 O9 @A@uR@[`@[`@b.#i@#C&#]m#Yt=5`%5`%Rm@Rm@0u#u_$cw 6v D,#D,#$)#Q*#@)#=1-I~#$D=Ur Ij-zQ-`q e:*qg*z0-+c-5Z=5$-:{;'}*]e*<{;p3.gX.43+ 23+23+OP*OP*x{+x{+x{+OP*OP*OP*OP*OP*OP*", "PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.Hu+Hu+8v.8v.VW.j}+j}+l#@$9.l#@j}+aq.(s.aq.{t.j}+j}+l#@l#@l#@l#@{t.aq.aq.(s.(s.ym.ym.ym.j}+j}+{t.(s.bv#ym.j}+5!.{t.aq.(s.ym.ym.(s.aq.{t.aq.aq.aq.(s.(s.(s.(s.aq.(s.(s.(s.(s.(s.(s.(s.(s.ym.ym.(s.(s.aq.aq.{t.{t.|5+ET&r3%vA*r3%ET&.l.|5+5v@|5+5v@|5+;H.[3+;H.[3+ym.ym.ym.(s.aq.{t.{t.j}+ym.ym.ym.ym.ym.ym.ym.ym.ET&ET&ET&ET&ET&ET&ET&ET&6z+ET&|5+[3+[3+|5+ET&6z+'C+'C+'C+6z+6z+6z+6z+6z+vA*vA*'C+'C+6z+6z+6z+ET&)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%@9.eO@,X@eO@$B#M7.%0+$y#^n#Ak=Ak=Ak=^n#^n#^n#^n#@9.@9.,H.,H.,H.,H.zy.zy.bp.bp.bp.bp.bp.bp.bp.bp.:(+:(+:(+:(+:(+:(+:(+:(+eO@eO@eO@eO@eO@eO@eO@eO@@9.@9.eO@eO@eO@eO@)Z%)Z%eO@eO@)Z%)Z%)Z%,X@,X@,X@DI#DI#'Z%,X@,X@'Z%DI#DI#,H.:(++9.bQ#bQ#+9.:(+,H.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#+9.:(+,H.,H.:(++9.bQ#<3+q3.:(++9.+9.+9.:(+,H.+9.bp.bp.+9.bQ#o&=o&=bQ#bQ#bQ#+9.+9.+9.+9.bQ#bQ#+9.bp.bp.bp.bp.bp.bp.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#bQ#bQ#o&=o&=o&=o&=Q+&j(#o&=+9.bp.+9.o&=b,+o&=o&=o&=o&=o&=o&=o&=o&=j(#b,+bQ#o&=j(#Q+&b,+o&=,H.:(+bp.+9.bQ#o&=b,+b,+j(#b,+bQ#+9.+9.bQ#b,+j(#b,+b,+b,+b,+b,+b,+b,+b,+D6.t4.t4.t4.t4.t4.t4.D6.D6.D6.D6.D6.D6.D6.D6.D6._{.J!.U%+g6@eg+XO+s~=VF+Q|*Bk=[{;b%;bQ=I9 ^0@ r L';-';}{;B,;,';E[*oo=SW-Ho=Jo=,<-7J@Zp S} S} S} i@#[`@RT@.9 .9 +L@/d@;! ;! W:@+~ X:@>b@>b@rG rG $4@$4@vR@vR@vR@Eu Eu Eu vR@Eu Eu Eu Kv Kv &E &E u1$u1$u1$&E &E Kv Kv Kv &E &E &E &E &E &E &E &E }g }g -E -E -! -! tG tG tG tG tG sG sG rG rG rG sG sG sG rG rG >b@>b@>b@r[@r[@r[@r[@r[@X:@t! t! +~ +~ +~ +~ +~ +~ +~ +~ W:@W:@+~ t! t! X:@r[@r[@(|@(|@(|@(|@/|@/|@^|@@~ @~ @~ WA YA 1f kI@')#')#B_#')#')#kI@1f 1f a~ a~ a~ a~ a~ YA YA WA WA WA YA YA YA YA YA YA YA YA a~ YA a~ B_#+W@XC@+W@QT@I~ I~ a~ a~ a~ a~ Lz Lz nx nx nx nx JO%JO%JO%nx k[#36 ,p ,p n| 7, /,@VH 7, 36 36 n| n| ,p ,p RT@vg#vg#vg#OH#LH#MH#MH#MH#LH#MH#MH#SJ# t#bj# t#OH#{Y@XC@+W@))#!)#!)#!)#))#{Y@8.#h@#h@#h@#h@#8.#{Y@))#!)#QT@B_#')#')#kI@kI@YA ^|@(|@_|@(|@_|@[|@vR@$4@Eu &E &E Eu Eu &E Nt%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv &E Eu $4@$4@vR@$4@[|@_|@W:@W:@W:@Y:@;! (7 9 O9 .9 RT@[`@[`@[`@UE@j$#Y=#Yt=a+&,d@5`%Rm@5`%Ut&85*cw 6v D,#Zq #D=Q*#po=Jo=Jo=x3-=h-CK-|x=e:*qg*-h-zq-%1*#c-3u-|{;|{;y8-{S**u.):.Z`+e6@sQ@sQ@Z`+.9.h;#<(+):.g|.cO@g|.H.@[+.l.@[+5v@6v@5v@4=+;H.bv#bv#6' 6' 6' bv#ym.(s.ym.ym.ym.ym.ym.ym.ym.ym.ET&ET&ET&ET&ET&ET&ET&ET&6z+ET&|5+[3+[3+|5+ET&6z+6z+6z+6z+6z+ET&ET&ET&ET&'C+'C+'C+6z+6z+6z+ET&ET&eO@eO@eO@eO@eO@eO@eO@eO@$B#eO@,X@,X@@9.$B#$B#^n#^n#Ak=Ak=Ak=^n#^n#^n#^n#@9.@9.,H.,H.,H.,H.zy.zy.bp.bp.bp.bp.bp.bp.bp.bp.,H.,H.,H.,H.,H.,H.,H.,H.eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@)Z%)Z%)Z%,X@,X@,X@,X@,X@)Z%eO@eO@)Z%,X@,X@:(+bp.+9.+9.+9.+9.bp.:(+bQ#+9.+9.bp.+9.bQ#o&=b,++9.+9.bp.:(+:(+bp.+9.+9.:(+bp.bp.+9.+9.bp.:(+:(+bQ#bp.:(+bp.o&=b,+o&=+9.o&=bQ#+9.bp.bp.+9.bQ#o&=+9.+9.bp.:(+:(+bp.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=+9.+9.bQ#bQ#bQ#o&=o&=o&=b,+o&=bQ#bp.:(+:(+:(+:(+o&=o&=o&=o&=o&=o&=o&=o&=j(#b,+bQ#o&=j(#Q+&b,+o&=bp.+9.+9.bQ#o&=o&=b,+b,+b,+b,+o&=o&=o&=o&=b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=D6.D6.t4.o3.o3.t4.D6.D6.t4.t4.t4.t4.t4.t4.t4.t4.78*oO U%+o3.J7.XO+XO+VF+z-=1{;2{;VF+3{;JM=|u ;b _1-M9-4{;%';7k h,;HX-M^#Y4-2g #D=2k=i[#S} S} Zp Cv@b.#RT@.9 .9 +L@ 9 ]|@;! Y:@+~ X:@r[@>b@>b@>b@$4@$4@$4@vR@vR@Eu Eu Eu Eu Eu Kv Kv &E &E &E u1$u1$u1$u1$&E &E Kv Kv Kv &E &E &E &E &E &E &E &E }g }g -E -E -! -! tG tG -! -! tG tG sG sG sG sG tG sG sG sG rG rG >b@>b@X:@r[@r[@r[@r[@X:@t! +~ +~ +~ +~ +~ +~ +~ +~ +~ +~ +~ t! t! t! t! X:@X:@(|@(|@(|@/|@/|@^|@^|@^|@@~ WA WA YA a~ a~ 1f 1f ')#')#')#')#kI@kI@kI@kI@1f 1f 1f a~ a~ YA YA YA a~ a~ a~ a~ a~ a~ a~ a~ 1f a~ 1f !)#{Y@h@#w! B_#I~ I~ a~ 1f 1f 1f dw dw ]0#]0#]0#]0#kf&kf&kf&:0#k[#n| n| n| 36 7, +' /,@7, 7, 36 36 n| ,p ,p :} bj#]M ]M bj#vg#SJ#OH#vg#vg#OH#OH#vg#6q#6q# t#OH#8.#XC@+W@))#!)#!)#+W@+W@XC@{Y@{Y@8.#8.#{Y@{Y@XC@QT@B_#kI@1f a~ a~ a~ a~ WA ^|@_|@_|@_|@_|@<|@vR@vR@Kv &E &E Kv Eu &E Nt%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv Kv vR@[|@[|@<|@<|@:|@(|@W:@W:@Y:@Y:@]|@/d@O9 +L@@A@bP@[`@b.#b.#UE@C&#VE@a+&#a*Sm@,d@Rm@5`%Ut&tq=}n >p Zq Fz Q*#y' =1-2g Io=o7-HP-KM-e:*Xh--h-yx=+c-v1*r7-c*-r+#y#>r+)i+6v@ l.6v@':+ym.bv#B, B, 6' bv#ym.ym.ym.ym.ym.ym.ym.ym.ym.ET&ET&ET&ET&ET&ET&ET&ET&6z+ET&|5+[3+[3+|5+ET&6z+6z+6z+ET&ET&w7+w7+|5+|5+'C+'C+6z+6z+ET&ET&w7+w7+$B#$B#$B#$B#$B#$B#$B#$B#%0+eO@,X@'Z%)Z%eO@eO@ W= W=tn.tn.tn. W= W= W= W=)Z%)Z%bp.bp.bp.bp.{S*{S*,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@)Z%)Z%)Z%,X@,X@,X@)Z%)Z%eO@@9.@9.eO@)Z%)Z%+9.+9.bp.:(+:(+bp.+9.+9.+9.bp.:(+:(+:(++9.bQ#b,+:(+bp.+9.+9.+9.+9.bp.:(+b,+o&=bQ#bp.:(+:(+:(+bp.bQ#bp.:(+bp.o&=b,+o&=+9.o&=bQ#+9.bp.bp.+9.bQ#o&=bQ#+9.bp.:(+:(+bp.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=bp.+9.+9.+9.bQ#o&=o&=o&=+9.bQ#o&=o&=o&=bQ#+9.+9.o&=o&=o&=o&=o&=o&=o&=o&=j(#b,+bQ#o&=j(#Q+&b,+o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+j(#j(#j(#j(#b,+b,+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#:^+D6.t4.o3.o3.t4.D6.:^+D6.D6.D6.D6.D6.D6.D6.D6.78*yy.62.t4.J7.DM+XO+5{;k==1{;e0=*-;8J.6{;:c#RC Ri S,;ej.6';d`-B,;SW-_X-Ho=2g J~#*[ kx Zp S} Zp j$#UE@RT@.9 .9 +L@ 9 (7 ;! Y:@+~ t! r[@>b@>b@>b@<|@<|@$4@$4@vR@vR@vR@Eu Kv &E &E &E u1$u1$Nt%Nt%u1$u1$u1$&E &E Kv Kv Kv &E &E &E &E &E &E &E &E }g }g -E -E -! -! tG tG -E -E -! -! -! tG tG tG tG tG sG sG sG rG rG rG t! X:@r[@r[@r[@t! +~ W:@X:@X:@X:@X:@X:@X:@X:@X:@X:@X:@t! t! t! t! +~ +~ _|@(|@/|@/|@^|@^|@^|@^|@WA WA WA WA WA WA YA YA ')#')#')#')#')#B_#B_#B_#')#')#kI@kI@1f 1f 1f a~ kI@kI@kI@kI@kI@kI@kI@kI@')#kI@')#+W@ p@ p@w! ')#I~ 0~ 1f 1f kI@')#ew ew 87#87#87#87#F5@F5@F5@vK .9 R} U-@Yq Yq Yq U-@U-@U-@R} T-@c2 Q} 8j#Qw#<} ]M d1#f1#d1#bj#vg# t#6q#6q#bj# t#6q#]M ]M t#SJ#8.#XC@+W@!)#!)#))#w! XC@w! w! XC@{Y@{Y@XC@w! w! ')#kI@a~ WA @~ @~ WA WA WA /|@_|@:|@_|@:|@<|@vR@vR@Kv u1$u1$Kv Kv &E Nt%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv vR@<|@:|@:|@[|@[|@_|@/|@Y:@Y:@Y:@;! (7 /d@O9 +L@bP@uR@b.#b.#b.#i@#Y=#P~##a*+H&Sm@,d@Rm@5`%u_$qR#>p Zq J[$;c @)#I~#2g x8-Y4-tH-PO-T^$e:*Xh--h-yx=2X-a|*r+WD@I}+Tp*Tp*>r+>r+@[+@[+6v@x% j}+aq.ym.bv#ym.(s.aq.ym.ym.ym.ym.ym.ym.ym.ym.ET&ET&ET&ET&ET&ET&ET&ET&6z+ET&|5+[3+[3+|5+ET&6z+ET&ET&ET&w7+|5+|5+[3+[3+6z+6z+6z+ET&ET&w7+w7+w7+%0+l5+%0+%0+%0+%0+%0+%0+M7.@9.'Z%DI#,X@)Z%,X@'Z% W=tn. W= W= W= W= W= W=)Z%)Z%bp.bp.bp.bp.bp.bp.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@)Z%)Z%)Z%,X@,X@,X@,X@,X@)Z%eO@eO@)Z%,X@,X@bQ#+9.:(+,H.,H.:(++9.bQ#:(+,H.q3.q3.,H.:(++9.o&=,H.:(++9.bQ#bQ#+9.:(+,H.w{@j(#o&=bp.:(+:(+:(+bp.o&=bp.,H.bp.o&=j(#o&=bp.o&=bQ#+9.bp.bp.+9.bQ#o&=bQ#+9.bp.,H.,H.bp.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=bp.bp.+9.+9.bQ#bQ#o&=o&=+9.o&=j(#w{@CI#w{@Q+&j(#o&=o&=o&=o&=o&=o&=o&=o&=j(#b,+bQ#o&=j(#Q+&b,+o&=j(#j(#b,+b,+b,+b,+b,+o&=o&=b,+Q+&w{@w{@Q+&b,+o&=+9.+9.+9.+9.+9.+9.+9.+9.:^+D6.t4.v5.v5.t4.D6.:^+p3.p3.p3.p3.p3.p3.p3.p3.78*yy.62.t4.J7.s2@XO+5{;5{;-#;7{;j!;_{@8{;:o Gz L(*AX-9{;5';6';mt&!X-bH=5B&I=;>G=M,#F0 (m (m (m i[#/0#RT@.9 +L@+L@ 9 /d@]|@Y:@W:@t! r[@r[@>b@:|@<|@<|@$4@$4@vR@vR@vR@vR@&E &E u1$u1$Nt%Nt%Nt%GJ%u1$u1$u1$&E &E Kv Kv Kv &E &E &E &E &E &E &E &E }g }g -E -E -! -! tG tG }g }g -E -E -! -! -! tG tG tG tG sG sG rG rG rG +~ t! X:@r[@X:@t! W:@Y:@X:@X:@X:@X:@X:@X:@X:@X:@r[@r[@X:@t! t! +~ W:@W:@_|@(|@/|@^|@^|@^|@^|@/|@WA WA WA WA @~ @~ @~ @~ kI@kI@')#')#B_#QT@QT@!)#B_#B_#')#')#kI@kI@kI@1f ')#')#')#')#')#')#')#')#B_#')#B_#w! h$#h$#+W@1f 0~ 0~ kI@kI@')#B_#f1#f1#d1#^0#d1#^0#^0#^0#^0#d1#+L@Yq S:@,8 G0 V-@U:@R} U:@U-@_7 c2 WC@Qw#y&#[`@!)#f1#dw f1#]M bj#6q#/M ]M 6q#6q#]M d1#/M bj#OH#{Y@XC@))#!)#!)#+W@XC@8.#+W@+W@w! XC@XC@w! +W@+W@kI@a~ WA ^|@/|@/|@^|@@~ WA /|@_|@:|@_|@:|@<|@Eu vR@Kv u1$u1$Kv Kv u1$GJ%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv $4@[|@_|@_|@:|@:|@(|@^|@;! ;! ;! ;! (7 9 +L@.9 bP@[`@b.#b.#b.#i@#Y=#ir#Sm@Dt=Rr 0u#O~#O~#u_$qR#D,#J[$^p=^m Yp 0{;[n Z4-rg*qy=gh*|x=e:*Xh-zq-1d-zq-@c-A0-H.5v@5v@.l..l.5v@<4 ym.ym.ym.ym.ym.ym.ym.ym.ym.ym.ym.ym.ym.ym.ym.ym.[3+[3+|5+|5+w7+ET&ET&6z+w7+ET&ET&|5+cp.cp.w7+'C+w7+w7+w7+w7+w7+w7+w7+w7+ET&ET&ET&ET&ET&ET&ET&ET&y}*Ak=$y#$y#^n#y}*R]$]Z@@9.@9.,H.,H.:(+bp.+9.+9.@9.$y#%0+%0+%0+%0+$B#@9.eO@eO@)Z%'Z%DI#'Z%)Z%,H.,H.,H.,H.:(+:(+bp.bp.bp.:(+:(+:(+:(+:(+:(+:(+:(+@9.eO@eO@)Z%,X@,X@'Z%'Z%,X@eO@%0+M7.M7.%0+eO@,X@DI#)Z%@9.@9.)Z%)Z%@9.M7.eO@eO@eO@)Z%,X@,X@'Z%'Z%+9.bp.bp.:(+:(+,H.,H.q3.:(+:(+:(+:(+:(+:(+:(+:(+eO@@9.@9.)Z%DI#2p%2p%p!#eO@,X@'Z%p!#p!#'Z%,X@eO@bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.bQ#o&=j(#j(#Q+&bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+b,+b,+o&=o&=bQ#bQ#bQ#bp.bp.+9.+9.bQ#bQ#o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=bQ#b,+Q+&j(#o&=bQ#b,+j(#b,+b,+b,+b,+b,+b,+b,+b,++9.+9.bQ#o&=o&=b,+b,+j(#b,+bQ#+9.bQ#b,+b,+o&=+9.o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#+9.+9.bp.:(+:(+,H.L0.L0.aR#aR#bQ#'Z%]Z@d3+XN.J9-WU+Ck=a{;es=.p-Qi 11*:.#R<*b{;c{;;r&5B&RR=0P=WN=ww=d{;1+#1+#|+#7## r 7v :} ,p n| 36 /,@_,@(7 ;! ^|@/|@/|@(|@[|@$4@[|@rG rG sG sG tG tG tG -E -E -E }g }g }g *E *E &E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$*E *E }g }g }g -E -E -E -E -! -! -! tG tG sG sG sG sG rG rG rG >b@>b@>b@r[@r[@r[@r[@r[@r[@r[@r[@r[@X:@+~ W:@W:@+~ X:@r[@W:@W:@+~ t! t! X:@r[@r[@/|@/|@/|@/|@/|@/|@/|@/|@1f a~ a~ a~ a~ a~ a~ a~ G5@xy f1#e1#f1#dw ew ew f1#ew dw dw dw f1#d1#/M QT@B_#')#kI@1f 1f 1f kI@B_#B_#B_#B_#B_#')#')#')#1f kI@kI@kI@')#')#')#')#))#/M +W@6q#bj#bj#6q#w! Dv@~)#lI@V:@EN#V:@H5@T:@lI@T:@lI@U:@]C@_C@Q~#XC@+W@]M ]M ]M ]M ]M ]M ]M bj#bj#6q#6q#]M ]M ]M ]M e1#d1#d1#f1#dw ew e1#]M /M ]M t#OH#OH# t#6q#]M YA WA @~ @~ ^|@@~ @~ WA /|@/|@(|@_|@:|@[|@<|@<|@Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$pM%GJ%u1$u1$u1$&E $4@:|@<|@[|@_|@(|@/|@^|@/|@/|@Y:@;! ]|@/d@ 9 +L@.9 @A@bP@[`@UE@i@#i@#j$#VE@O~#Xq Xq M5$;p ;p rt=D,#D,#pR#^T#UN=aO=6i=)';e{;&V=R--.6*1d-Xi-2u-Lf*q7-#c-RE ](-p#-c*-]&-NM-CI#&r=):.):..9.<(+<(+sQ@h;#h;#.9..9.):.):.S%&, Bv&Bv&ZQ.U*@x{+OP*OP*23+US+US+US+x{+OP*23+23+US+23+", "PI.PI.PI.PI.PI.PI.PI.8v.Hu+PI.PI.PI.PI.Hu+8v.{t.{t.{t.{t.{t.{t.{t.{t.$9.{t.(s.(s.j}+$9.$9.$9.PI.PI.PI.PI.PI.#9.[3+[3+[3+cp.#9.PI.PI.PI.PI.#9.cp.cp.#9.#9.cp.[3+|5+|5+[3+[3+[3+[3+[3+[3+[3+[3+cp.cp.cp.cp.cp.cp.cp.cp.|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+[3+[3+[3+[3+[3+6z+w7+[3+|5+ET&ET&|5+[3+ym.ym.ym.ym.ym.ym.ym.ym.ym.ym.ym.ym.ym.ym.ym.ym.|5+|5+|5+w7+w7+w7+w7+w7+ET&ET&ET&|5+cp.cp.|5+6z+w7+w7+w7+w7+w7+w7+w7+w7+ET&ET&ET&ET&ET&ET&ET&bv#y}*Ak=Ak=4B&^n#y}*R]$]Z@$B#@9.,H.:(+bp.bp.{S*bp.bp.eO@@9.@9.@9.@9.eO@)Z%@9.eO@)Z%,X@,X@,X@eO@@9.,H.,H.,H.:(+:(+bp.bp.bp.:(+:(+:(+:(+:(+:(+:(+:(+eO@eO@)Z%)Z%)Z%)Z%,X@,X@)Z%eO@@9.$B#$B#@9.eO@)Z%)Z%@9.%0+$B#,X@'Z%)Z%@9.eO@eO@eO@)Z%,X@,X@,X@'Z%+9.+9.+9.bp.:(+:(+:(+,H.bp.bp.bp.bp.bp.bp.bp.bp.DI#,X@)Z%)Z%DI#DI#'Z%)Z%,X@,X@'Z%'Z%'Z%'Z%,X@,X@bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.bQ#bQ#o&=b,+b,+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.+9.+9.+9.+9.+9.o&=o&=o&=bQ#bQ#+9.+9.+9.bp.bp.+9.+9.bQ#bQ#o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=bQ#b,+Q+&j(#o&=bQ#o&=j(#+9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#o&=o&=b,+b,+j(#j(#b,+bQ#+9.bQ#b,+b,+o&=+9.o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#+9.+9.+9.+9.bp.bp.L0.L0.aR#aR#bQ#'Z%'Z%d3+4B&Ao=/0+Ck=f{;q4*.i-LP-k}*o$$}o&:';g{;y,;VO=cR=h{;,L&TV%i{;j{;k{;l{;!r@ r Vr #, *! ,p 36 /,@_,@/d@;! ^|@/|@/|@(|@b~ $4@[|@rG rG sG sG tG tG tG -E -E -E }g }g }g *E *E &E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$*E *E }g }g }g -E -E -E -! -! tG tG sG sG sG rG sG sG rG rG rG >b@>b@>b@r[@r[@r[@r[@r[@r[@r[@r[@r[@X:@t! +~ +~ t! X:@r[@+~ +~ t! t! t! t! X:@X:@/|@/|@/|@/|@/|@/|@/|@/|@YA YA YA YA YA YA YA YA LZ$dw e1#e1#f1#ew ew f1#f1#ew dw dw dw f1#e1#/M QT@B_#')#kI@kI@1f kI@kI@')#')#')#kI@kI@kI@kI@kI@1f 1f kI@')#B_#QT@QT@!)#))#))#+W@w! XC@XC@w! w! ^J `Z Nx@lI@lI@Nx@]C@`Z Nx@Nx@Nx@]C@`Z ^J Dv@XC@]M ]M ]M ]M ]M ]M ]M ]M bj#bj#6q#6q#]M ]M ]M /M e1#d1#d1#e1#ew ew d1#]M d1#/M bj#vg#vg#bj#]M d1#YA WA @~ ^|@/|@/|@^|@^|@/|@(|@(|@_|@:|@[|@<|@<|@Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$GJ%Nt%&E &E u1$&E vR@[|@[|@:|@_|@(|@/|@^|@^|@/|@Y:@Y:@]|@(7 9 +L@.9 @A@bP@[`@i@#i@#Cv@C&#P~#|n E8&b2 b2 ~m ;p rt=D,#D,#5N=^T#s *#8 m{;n{;u!;o{;5Z=#c-5$-H9-xD tk*5$-/e*p{;p#-F@-b,+4u-*r=bQ#6w=<(+<(+<(+<(+<(+<(+<(+<(+.9..9.):.):.4*tU=0P=VN=M**G3-~ #t{;mr#8J@Vr #, d2 ,p n| +' VH /d@]|@@~ ^|@^|@/|@b~ <|@[|@rG rG sG sG tG tG tG -E -E -E }g }g }g *E *E &E &E &E &E &E &E &E &E Kv Kv Kv Kv Kv Kv Kv Kv *E *E }g }g }g -E -E -E tG sG sG sG rG rG >b@>b@sG sG rG rG rG >b@>b@>b@r[@r[@r[@r[@r[@r[@r[@r[@r[@X:@t! t! t! t! X:@r[@X:@X:@t! t! t! t! +~ +~ /|@/|@/|@/|@/|@/|@/|@/|@WA WA WA WA WA WA WA WA LZ$dw f1#e1#ew dw ew f1#ew ew dw dw dw ew f1#e1#')#')#')#')#kI@kI@kI@kI@1f 1f kI@kI@kI@kI@kI@kI@kI@kI@')#B_#QT@!)#))#+W@))#))#+W@w! XC@XC@w! w! !)#!)#!)#!)#))#))#+W@+W@!)#!)#QT@!)#!)#+W@w! XC@]M ]M ]M ]M ]M ]M ]M ]M 6q#6q#6q#]M ]M /M /M /M e1#d1#/M d1#f1#ew d1#]M f1#d1#]M bj#bj#]M d1#f1#YA WA @~ /|@(|@_|@_|@_|@(|@(|@_|@:|@[|@[|@<|@<|@Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%&E Kv &E u1$u1$Eu <|@[|@:|@_|@/|@^|@^|@^|@^|@W:@Y:@;! (7 9 +L@.9 @A@uR@b.#Cv@Cv@j$#Y=#ir#A_#/X%R: b2 ~m ;p rt=D,#D,#(X%S2*JP&F.*`V=jY=o{;u{;ZY=5$-`4-p#-xD q7-r7-@f*`4-/e*_;=Vi.a@@,H.j(#fW=h;#h;#sQ@<(+<(+.9.):.):..9..9.):.):.b@>b@>b@r[@sG sG rG rG rG >b@>b@>b@r[@r[@r[@r[@r[@r[@r[@r[@X:@X:@X:@X:@X:@X:@X:@X:@r[@r[@X:@t! t! +~ W:@W:@/|@/|@/|@/|@/|@/|@/|@/|@@~ @~ @~ @~ WA WA WA WA G5@Lz dw dw xy Lz dw ew ew ew dw dw dw ew ew ew kI@')#')#')#')#')#kI@kI@kI@kI@kI@')#')#')#')#B_#QT@QT@!)#!)#!)#))#))#))#))#))#+W@w! XC@XC@w! w! QT@!)#))#w! w! w! +W@))#))#!)#!)#QT@!)#!)#))#+W@]M ]M ]M ]M ]M ]M ]M ]M 6q#6q#]M ]M ]M /M /M /M e1#d1#]M /M e1#f1#d1#]M ew e1#/M 6q#]M d1#ew dw YA WA ^|@(|@:|@[|@[|@[|@(|@(|@_|@:|@[|@<|@$4@$4@Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E Kv Eu Kv u1$u1$Eu $4@[|@:|@(|@/|@^|@@~ ^|@^|@+~ W:@;! (7 9 +L@@A@RT@[`@i@#j$#C&#C&#Z=#N~#cw /X%R: b2 Hj rt=Uk Zq Fz (p=]T#F.*Pm@X+**V=u{;A{;p#-A0-H9-ZY=H9-fs-r7-`4-(e*Hg@~U.FQ CI#Q+&uG#S`%sQ@sQ@sQ@<(+<(+.9..9..9..9..9.):.):.b@>b@>b@r[@sG sG rG rG rG >b@>b@>b@r[@r[@r[@r[@r[@r[@r[@r[@X:@X:@r[@r[@r[@r[@X:@X:@r[@r[@X:@t! t! +~ W:@W:@/|@/|@/|@/|@/|@/|@/|@/|@^|@^|@@~ @~ WA WA YA YA =p@G5@Lz LZ$G5@G5@Lz dw dw dw ew ew ew dw dw dw 1f kI@')#B_#B_#')#kI@1f ')#')#B_#B_#QT@!)#!)#!)#w! +W@+W@))#!)#QT@QT@QT@))#))#+W@w! XC@XC@w! w! !)#))#+W@w! w! +W@))#))#+W@))#!)#QT@QT@QT@!)#!)#]M ]M ]M ]M ]M ]M ]M ]M ]M ]M ]M /M /M /M d1#d1#e1#/M ]M ]M d1#e1#d1#]M ew e1#/M ]M /M e1#dw Lz YA @~ /|@_|@:|@[|@<|@<|@_|@_|@:|@[|@[|@<|@$4@$4@Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E Eu Eu Kv &E &E Eu <|@:|@_|@(|@^|@@~ @~ @~ @~ W:@W:@;! /d@O9 @A@RT@bP@UE@Cv@C&#Y=#Z=#P~#0u#}n E8&b2 ~m ~ Uk Au=J[$;c h_*k`&Pm@e{;*V=w!*A{;F{;p#-`4-p#-ZY=p{;r7-ZY=ZY=r7-;Z+4u-bQ#j(#uG#Q+&S`%.9..9..9.<(+<(+sQ@sQ@sQ@.9..9.):.):.S%>S%~h&&, ZQ.Av&xE*xE*x{+x{+[f.[f.u!=HV.HV.23+23+US+US+23+OP*", "PI.PI.PI.PI.PI.PI.PI.#9.#9.PI.Hu+Hu+PI.#9.#9.l#@l#@l#@l#@l#@l#@l#@l#@l#@j}+{t.j}+$9.$9.{t.(s.#9.#9.cp.cp.cp.#9.PI.Hu+#9.cp.cp.cp.cp.#9.PI.Hu+cp.cp.#9.#9.cp.[3+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+w7+ET&6z+6z+'C+'C+w7+|5+[3+|5+ET&6z+ET&|5+ym.ym.ym.ym.ym.ym.ym.ym.aq.aq.aq.aq.aq.aq.aq.aq.w7+w7+w7+w7+w7+|5+|5+|5+cp.|5+6z+6z+w7+|5+|5+w7+w7+w7+w7+w7+w7+w7+w7+w7+ET&ET&ET&ET&ET&ET&ET&bv#y}*sZ tn.tn. W=y}*^n#$y#)Z%)Z%:(+:(+:(+,H.zy.,H.:(+eO@@9.$B#$B#@9.eO@eO@$B#)Z%,X@eO@%0+M7.@9.'Z%,H.,H.,H.:(+:(+bp.bp.bp.:(+:(+:(+:(+:(+:(+:(+:(+eO@eO@eO@@9.@9.@9.@9.@9.)Z%)Z%eO@eO@eO@eO@)Z%)Z%)Z%'Z%'Z%)Z%@9.%0+%0+@9.,X@,X@,X@)Z%)Z%)Z%eO@eO@bp.bp.bp.+9.+9.+9.bQ#bQ#+9.+9.+9.+9.+9.+9.+9.+9.,X@)Z%eO@)Z%DI#p!#DI#'Z%'Z%'Z%,X@,X@,X@,X@'Z%'Z%bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bp.bp.bp.bp.bp.bp.bp.bp.bQ#bQ#bQ#+9.+9.bp.bp.bp.bp.bp.+9.+9.bQ#bQ#o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=+9.bQ#b,+o&=+9.bp.bQ#b,++9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#+9.+9.+9.bp.bp.bp.b,+bQ#+9.bQ#b,+b,+o&=+9.o&=o&=o&=o&=o&=o&=o&=o&=+9.+9.bQ#bQ#bQ#bQ#o&=o&=aR#aR#aR#aR#bQ#bQ#'Z%]Z@R]$tn.Ak=6) vK+S<+F'.gO.G{;KY+C{;UC f_ ;g.H{;*);}!-I{;oy=x8-Q*#t4 f5 kj#[]#t[ Vr 7v 'p <} n| +' +L@ 9 a~ YA YA WA ;8@_|@[|@rG rG sG sG tG tG tG -E -E -E }g }g }g *E *E &E &E &E &E &E &E &E &E Kv Kv Kv Kv Kv Kv Kv Kv *E *E }g }g }g -E -E -E tG sG sG sG rG rG >b@>b@sG sG rG rG rG >b@>b@>b@r[@r[@r[@r[@r[@r[@r[@r[@X:@r[@r[@>b@>b@r[@r[@X:@X:@X:@t! t! t! t! +~ +~ /|@/|@/|@/|@/|@/|@/|@/|@^|@^|@@~ WA YA YA a~ a~ =p@G5@LZ$G5@=p@=p@Lz dw dw dw ew ew ew dw xy Lz a~ 1f ')#B_#QT@B_#kI@1f B_#B_#QT@QT@!)#))#+W@+W@+W@+W@))#))#!)#QT@QT@B_#))#))#+W@w! XC@XC@w! w! !)#!)#))#+W@w! w! XC@XC@XC@w! +W@!)#!)#QT@!)#!)#]M ]M ]M ]M ]M ]M ]M ]M ]M ]M ]M /M /M d1#d1#d1#f1#/M 6q#6q#/M d1#d1#/M f1#e1#/M ]M /M f1#xy LZ$WA @~ /|@_|@:|@:|@:|@:|@_|@_|@:|@[|@<|@$4@$4@vR@Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E Kv Eu Eu &E Kv vR@[|@:|@_|@/|@^|@@~ @~ @~ @~ Y:@;! (7 9 .9 bP@[`@b.#i@#j$#Z=#VE@VE@ir#Ut&6v M5$Hj ~ (n J{;K{;^m ^m 0Q=s_$kR&&V=ZV=kV=F{;L{;RE `4-#c-tk*+f*RE hV=/e*[{.[H.]&-:(+vu#CI#S%%' ~h&&, Av&Av&0, U*@x{+x{+x{+x{+[f.[f.[f.US+US+US+US+23+OP*", "8v.8v.8v.8v.8v.8v.8v.8v.Hu+PI.PI.PI.PI.Hu+8v.{t.{t.{t.{t.{t.{t.{t.{t.l#@j}+j}+l#@$9.$9.aq.ym.[3+[3+#9.PI.PI.PI.PI.PI.[3+cp.#9.PI.PI.PI.PI.#9.cp.cp.#9.#9.cp.[3+|5+|5+w7+w7+w7+w7+w7+w7+w7+w7+w7+w7+w7+w7+w7+w7+w7+w7+|5+|5+|5+|5+|5+|5+|5+|5+w7+w7+w7+w7+w7+ET&ET&ET&6z+w7+[3+|5+ET&ET&|5+[3+ym.ym.ym.ym.ym.ym.ym.ym.{t.{t.{t.{t.{t.{t.{t.{t.|5+|5+|5+w7+w7+w7+w7+w7+PI.[3+ET&6z+ET&w7+ET&6z+w7+w7+w7+w7+w7+w7+w7+w7+ET&ET&ET&ET&ET&ET&ET&bv#y}*tn.tn.Ie+ W=y}*$y#l5+DI#,X@:(+q3.0q.q3.ns#bp.:(+eO@@9.$B#$B#@9.eO@eO@@9.,X@DI#)Z%%0+M7.eO@p!#,H.,H.,H.:(+:(+bp.bp.bp.:(+:(+:(+:(+:(+:(+:(+:(+$B#$B#@9.@9.@9.@9.eO@eO@)Z%eO@@9.$B#$B#@9.eO@)Z%)Z%'Z%DI#,X@$B#M7.%0+@9.'Z%,X@,X@,X@)Z%eO@eO@eO@,H.:(+:(+:(+bp.+9.+9.+9.bp.bp.bp.bp.bp.bp.bp.bp.'Z%)Z%eO@)Z%DI#p!#DI#,X@,X@,X@'Z%'Z%'Z%'Z%,X@,X@bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.bQ#bQ#o&=b,+b,+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.+9.+9.+9.+9.+9.o&=o&=o&=bQ#bQ#+9.+9.+9.bp.bp.+9.+9.bQ#bQ#o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=bp.bQ#o&=o&=+9.bp.+9.o&=+9.+9.+9.+9.+9.+9.+9.+9.b,+b,+b,+o&=o&=bQ#bQ#bQ#b,+bQ#+9.bQ#b,+b,+o&=+9.o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#+9.+9.+9.+9.bp.bp.aR#aR#aR#aR#bQ#bQ#'Z%]Z@]Z@Wh@tn.z,=ng XN.M{;}i$N{;O{;P{;M%-u6 Q{;.y*)X@R{;S{;v_* <#e< z0 7J@Yk e5 7v {1 <} n| 7, .9 9 1f a~ a~ YA ,8@_|@[|@rG rG sG sG tG tG tG -E -E -E }g }g }g *E *E &E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$*E *E }g }g }g -E -E -E -! -! tG tG sG sG sG rG sG sG rG rG rG >b@>b@>b@r[@r[@r[@r[@r[@r[@r[@r[@X:@r[@>b@rG rG >b@r[@X:@+~ +~ t! t! t! t! X:@X:@/|@/|@/|@/|@/|@/|@/|@/|@@~ @~ WA YA a~ 1f kI@kI@LZ$Lz xy Lz G5@LZ$dw e1#xy dw ew ew ew xy Lz G5@YA a~ ')#QT@QT@B_#')#1f kI@')#B_#QT@!)#))#))#+W@B_#B_#QT@QT@!)#!)#))#))#))#))#+W@w! XC@XC@w! w! e1#e1#d1#/M bj#OH#O8#Dd#SJ#OH# t#6q#]M ]M ]M ]M ]M ]M ]M ]M ]M ]M ]M ]M ]M /M /M /M d1#d1#e1#e1#f1#/M bj#bj#]M d1#d1#/M f1#d1#/M ]M /M f1#xy LZ$@~ ^|@/|@(|@_|@_|@_|@(|@_|@:|@:|@[|@<|@$4@vR@vR@Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E Eu Eu Kv Eu <|@_|@_|@(|@/|@@~ @~ WA WA @~ ;! ]|@/d@+L@RT@[`@UE@i@#Cv@C&#VE@P~#P~#N~#u_$>p ; *T{;(n U{;Vk V{;1g /o k`&T8 iV=jV=]O&@h@W{;fy=RE `4-ZY=/e*0+sq*>0+,0+u.@yi.6g.6g.6g.6g.6g.6g.6g.6g.&, &, &, &, 0, 0, 0, 0, &, 0, ~h&{h&&, Av&&, {h&U*@U*@U*@xE*xE*xE*xE*17*J> J> J> J> 17*U*@", "VW.VW.VW.VW.VW.VW.VW.9, 8v.Hu+#9.#9.Hu+8v.9, {t.{t.{t.{t.{t.{t.{t.{t.l#@j}+j}+l#@$9.$9.aq.bv#w7+[3+#9.Hu+Hu+Hu+PI.#9.|5+[3+#9.Hu+Hu+Hu+#9.cp.cp.cp.#9.#9.cp.[3+|5+|5+ET&ET&ET&ET&ET&ET&ET&ET&w7+w7+w7+w7+w7+w7+w7+w7+|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+[3+cp.cp.#9.PI.PI.'C+ET&|5+|5+w7+w7+|5+#9.ym.ym.ym.ym.ym.ym.ym.ym.{t.{t.{t.{t.{t.{t.{t.{t.[3+[3+|5+|5+w7+ET&ET&6z+8v.#9.w7+6z+ET&ET&6z+'C+w7+w7+w7+w7+w7+w7+w7+w7+ET&ET&ET&ET&ET&ET&ET&bv#y}*tn.Ie+Ie+ W=y}*$y#l5+2p%'Z%,H.<3+<3+0q.ns#+9.bp.eO@@9.@9.@9.@9.eO@)Z%@9.'Z%p!#,X@%0+M7.)Z%qK#,H.,H.,H.:(+:(+bp.bp.bp.:(+:(+:(+:(+:(+:(+:(+:(+%0+%0+$B#$B#@9.eO@eO@)Z%,X@eO@%0+M7.M7.%0+eO@,X@@9.,X@'Z%,X@$B#%0+$B#)Z%'Z%'Z%,X@,X@)Z%eO@eO@eO@q3.,H.,H.:(+:(+bp.bp.+9.:(+:(+:(+:(+:(+:(+:(+:(+DI#,X@)Z%,X@'Z%DI#'Z%)Z%eO@,X@'Z%p!#p!#'Z%,X@eO@bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.bQ#o&=j(#j(#Q+&bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+b,+b,+o&=o&=bQ#bQ#bQ#bp.bp.+9.+9.bQ#bQ#o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=bp.bQ#o&=o&=+9.bp.+9.o&=b,+b,+b,+b,+b,+b,+b,+b,+w{@w{@Q+&Q+&j(#b,+b,+b,+b,+bQ#+9.bQ#b,+b,+o&=+9.o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#+9.+9.bp.:(+:(+,H.aR#aR#aR#aR#bQ#bQ#'Z%'Z%]Z@V^$R]$*|*4B&RK.6[.x>%8z+X{;~( Y{;7s Z{;:{ )X@R{;`{;>Y-j2&F8&:]#/($!< z0 Yk e5 Vr {1 'p ,p 7, .9 O9 1f a~ a~ YA ,8@(|@[|@rG rG sG sG tG tG tG -E -E -E }g }g }g *E *E &E &E &E &E &E &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$*E *E }g }g }g -E -E -E -E -! -! -! tG tG sG sG sG sG rG rG rG >b@>b@>b@r[@r[@r[@r[@r[@r[@r[@r[@X:@r[@>b@rG rG >b@r[@X:@W:@W:@+~ t! t! X:@r[@r[@/|@/|@/|@/|@/|@/|@/|@/|@@~ WA WA YA 1f kI@')#')#dw ew ew xy Lz xy f1#/M xy dw ew ew ew xy LZ$G5@WA a~ ')#QT@!)#QT@')#1f 1f 1f kI@')#B_#QT@!)#))#a~ 1f kI@B_#!)#+W@w! XC@))#))#+W@w! XC@XC@w! w! f1#f1#e1#/M t#O8# l&Yo@O8#MH#SJ#vg# t#bj#bj#bj#]M ]M ]M ]M ]M ]M ]M ]M /M /M /M /M d1#d1#e1#e1#f1#/M bj#bj#]M d1#d1#/M e1#d1#]M 6q#/M e1#xy LZ$@~ ^|@/|@(|@(|@(|@/|@/|@:|@:|@[|@[|@<|@$4@vR@vR@Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%&E Kv Eu Kv vR@[|@(|@_|@(|@/|@@~ WA WA WA WA ]|@(7 9 .9 bP@b.#i@#Cv@j$#Y=#VE@P~#ir#O~#85*D,#o5&(n )e=]o /r= ];@p={t +6*0p=%T&KP&[A=.];L{;+];p#-A0-RE `4-F@-#c-r7-uG#kS.sX%sX%CI#:(+sX%fW=bp.h;#h;#sQ@<(+<(+.9.):.):..9..9.):.):.0+sq*mh.mh.sq*>0+u.@6g.6g.6g.6g.6g.6g.6g.6g.6g.Av&Av&Av&&, 0, {h&{h&{h&8P.ZQ.&, &, Av&Av&0, ~h&U*@U*@xE*xE*17*J> J> J> J> zi.zi.J> 17*U*@", "#9.#9.#9.#9.#9.PI.PI.PI.8v.8v.Hu+PI.PI.8v.G6.j}+{t.aq.(s.(s.aq.j}+l#@$9.j}+{t.{t.l#@l#@j}+aq.Hu+Hu+PI.#9.#9.cp.[3+[3+cp.cp.cp.cp.cp.cp.cp.cp.|5+[3+cp.PI.PI.cp.[3+|5+|5+|5+|5+|5+[3+[3+[3+[3+ET&|5+#9.cp.|5+w7+|5+[3+ET&|5+[3+|5+ET&ET&w7+[3+cp.cp.[3+[3+|5+|5+w7+w7+cp.cp.cp.[3+|5+w7+w7+w7+(s.ym.6' ns%ns%6' (s.aq.{t.{t.{t.aq.(s.(s.ym.ym.|5+|5+|5+|5+|5+|5+|5+|5+|5+|5+w7+ET&ET&6z+'C+'C+'C+'C+'C+'C+6z+6z+ET&ET&'C+ET&|5+|5+w7+ET&|5+{t.y}*sZ sZ sZ y}*y}*y}*y}*%0+$B#,H.,H.0q.0q.ns#+9.:(+eO@@9.@9.@9.$B#$B#$B#)Z%eO@$B#@9.)Z%,X@eO@$B##k.v4.<3+0q.q3.,H.:(+bp.:(+,H.q3.,H.bp.+9.bp.:(+@9.@9.@9.@9.@9.@9.@9.@9.,X@,X@'Z%DI#DI#'Z%,X@,X@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@bQ#bQ#+9.+9.bp.:(+:(+:(+0q.0q.q3.,H.bp.+9.+9.bQ#,X@,X@,X@,X@,X@,X@,X@,X@,X@,X@,X@)Z%)Z%)Z%)Z%)Z%,H.:(++9.bQ#bQ#+9.:(+,H.bp.+9.bQ#o&=o&=bQ#+9.bp.bp.:(+,H.,H.,H.:(+bp.bp.:(+bp.+9.bQ#bQ#+9.:(+,H.,H.,H.:(+bp.+9.bQ#bQ#o&=bp.bp.bp.+9.bQ#o&=o&=o&=+9.bp.bp.bp.+9.bQ#o&=b,+b,+b,+b,+b,+b,+b,+b,+b,++9.bQ#b,+j(#j(#b,+bQ#+9.b,+b,+b,+b,+b,+b,+b,+b,+o&=j(#Q+&b,++9.bp.b,+CI#j(#o&=bQ#+9.+9.bQ#o&=j(#w{@w{@Q+&Q+&j(#b,+b,+b,+j(#j(#j(#j(#j(#j(#j(#j(#b,+b,+b,+o&=bQ#bQ#+9.+9.bp.+9.bQ#o&=o&=bQ#+9.bp.bQ#bQ#bQ#bQ#bQ#bQ#'Z%'Z%eO@y}*^n#^n# W=l1+YT#r,@Di+@];#]; ,$v**;3 yX%$=+JL$MX-uD&uD&!a&}!#8)@!< f< []#Yk t[ Zp 4' <} n| bP@.9 ')#1f a~ @~ =8@[|@:|@>b@>b@rG rG rG rG rG -E }g =E *E -E -! -E *E Eu Kv Kv &E &E u1$u1$Nt%Nt%u1$u1$&E &E Kv Kv Eu }g }g }g }g }g }g }g }g -! -! -! tG tG tG sG sG sG sG sG rG rG >b@>b@>b@X:@t! t! +~ +~ t! t! X:@X:@X:@X:@X:@X:@r[@r[@r[@+~ X:@r[@>b@>b@r[@X:@+~ /|@/|@^|@^|@^|@@~ @~ @~ WA WA WA WA WA WA WA WA G5@G5@LZ$LZ$Lz xy dw dw ]M /M f1#dw xy dw dw ew YA a~ kI@B_#QT@QT@B_#')#kI@B_#QT@B_#1f a~ 1f ')#a~ a~ 1f kI@')#B_#QT@QT@QT@+W@XC@XC@+W@!)#!)#))#d1#07#)m#!m#Pv#KN#Wm@4>&*)&Ia#NH#Pv#Pv#Pv#Pv#cj#SJ#SJ#OH#vg# t#bj#6q#]M d1#d1#/M /M ]M ]M ]M 6q#d1#d1#d1#d1#d1#d1#d1#d1#e1#e1#e1#f1#ew xy LZ$G5@^|@^|@/|@(|@_|@:|@:|@[|@$4@vR@vR@vR@Eu Eu Kv Kv u1$u1$u1$u1$u1$u1$u1$u1$Kv &E &E &E &E &E &E &E &E Eu $4@$4@vR@vR@[|@_|@<|@:|@/|@/|@/|@^|@WA a~ /d@O9 RT@b.#i@#i@#i@#UE@j$#Y=#P~#O~#Ut&85*tq=>p o5&U{;_n (: ];-p [n @' +6*s|*YV=C.*.];jX=$];+];fs-p#-r7-+f*#f*ZY= w.fW=uG#*r=&r=sX%CI#w{@Q+&j(#h;#S%>S%~h&0, &, 0, 0, 0, 0, &, &, &, &, B9.Bv&Av&&, 0, 0, &, &, 0, 0, 0, 0, 0, 0, ", "PI.#9.#9.#9.#9.#9.#9.8v.VW.VW.Hu+cp.cp.#9.8v.j}+{t.aq.(s.(s.aq.j}+l#@$9.j}+aq.{t.l#@$9.j}+aq.PI.PI.PI.#9.#9.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.cp.|5+[3+cp.#9.#9.cp.[3+|5+[3+[3+[3+[3+[3+|5+|5+|5+w7+[3+#9.#9.[3+|5+|5+cp.w7+[3+#9.cp.|5+w7+|5+cp.cp.cp.[3+[3+|5+|5+w7+w7+[3+[3+[3+[3+|5+|5+|5+|5+aq.ym.6' B, B, 6' ym.aq.aq.aq.aq.(s.ym.ym.ym.bv#w7+w7+w7+w7+w7+w7+w7+w7+w7+w7+w7+ET&ET&ET&ET&6z+'C+6z+6z+6z+ET&ET&w7+w7+'C+ET&|5+|5+w7+ET&|5+{t.y}*sZ sZ sZ y}*y}*y}*y}*%0+$B#,H.,H.0q.0q.ns#+9.:(+eO@@9.@9.@9.$B#$B#$B#)Z%@9.$B#@9.)Z%,X@eO@$B#0q.q3.q3.q3.q3.,H.,H.,H.:(+q3.0q.,H.bp.+9.bp.:(+@9.@9.@9.@9.@9.@9.@9.@9.)Z%)Z%,X@'Z%'Z%,X@)Z%)Z%eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@bp.bp.bp.bp.bp.:(+:(+:(+q3.q3.,H.:(+bp.+9.bQ#bQ#)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%,X@,X@,X@:(+bp.bQ#o&=o&=bQ#bp.:(+:(+bp.+9.bQ#bQ#+9.bp.:(+o&=o&=+9.bp.:(+:(+:(+bp.,H.:(+bp.bQ#bQ#bQ#+9.bp.bp.bp.bp.bp.+9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#bQ#bQ#+9.+9.bp.bp.+9.bQ#o&=b,+o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#o&=b,+b,+o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=b,+bQ#:(+:(+bQ#Q+&b,+o&=bQ#+9.+9.bQ#o&=b,+Q+&Q+&Q+&j(#j(#b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+o&=bQ#bQ#bQ#+9.:(+bp.+9.bQ#bQ#+9.bp.:(+bQ#bQ#bQ#bQ#bQ#bQ#'Z%'Z%,X@)Z%eO@^n#eO@R]$p!#ho=%];Ir='| xC#&];!< -o@=V@*];II$<,;zc 02 X!*OL@!< ZV#7J@Yk t[ Zp 4' 'p ,p bP@.9 ')#1f a~ WA =8@[|@:|@>b@>b@>b@rG rG rG sG -! }g =E *E -E -! -E *E Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv }g }g }g }g }g }g }g }g -! -! -! tG tG tG sG sG rG rG rG >b@>b@r[@r[@r[@r[@X:@t! t! t! t! X:@r[@X:@X:@X:@X:@X:@X:@X:@X:@+~ t! X:@r[@r[@X:@t! +~ /|@/|@^|@^|@^|@@~ @~ @~ WA WA WA WA WA WA WA WA G5@LZ$LZ$Lz xy dw ew ew t#bj#/M f1#ew dw dw dw a~ 1f kI@B_#B_#')#kI@kI@kI@B_#QT@B_#1f a~ 1f ')#a~ a~ 1f kI@')#B_#QT@QT@B_#))#w! XC@+W@!)#!)#/M ]M )m#cj#cj#gy#KN#Wm@N,&*)&Ia#NH#gy#gy#gy#Pv#cj#OH#OH#vg# t#bj#6q#]M ]M e1#e1#e1#d1#d1#/M /M /M d1#d1#d1#d1#d1#d1#d1#d1#e1#e1#e1#e1#ew xy Lz LZ$^|@/|@/|@(|@_|@:|@[|@[|@vR@vR@vR@vR@Eu Eu Kv Kv u1$u1$u1$u1$u1$u1$u1$u1$&E &E &E &E &E &E &E &E &E Eu <|@<|@$4@$4@[|@_|@[|@(|@^|@@~ ^|@@~ YA 1f /d@O9 RT@b.#i@#Cv@i@#i@#Y=#Z=#ir#0u#u_$tq=qR#D,#o5&U{;_n (: Wk SV%6U%Z4-s|*SE DV&=];^O&-];W{;;];/e*];,];#n=Z);W1@V7&'];)];j:*B'*Fe Vt*!];OL@h!$e< :u s[ t[ Zp 4' 'p ,p uR@@A@')#kI@1f YA ,8@_|@_|@r[@r[@>b@>b@rG rG sG -! }g *E *E -E -! }g *E Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv }g }g }g }g }g }g }g }g -! -! -! tG tG tG sG sG >b@>b@>b@r[@r[@X:@X:@X:@>b@r[@X:@X:@X:@X:@r[@>b@r[@X:@X:@X:@X:@X:@X:@X:@W:@W:@+~ t! t! +~ W:@W:@/|@/|@^|@^|@^|@@~ @~ @~ WA WA WA WA WA WA WA WA LZ$Lz Lz xy dw ew f1#f1#vg# t#6q#d1#f1#dw dw xy kI@kI@')#')#')#kI@1f a~ kI@B_#QT@B_#1f a~ 1f ')#a~ a~ 1f kI@')#B_#QT@QT@B_#!)#+W@+W@!)#QT@!)#/M bj#cj#gy#gy#g%&T8#Wm@N,&*)&Ia#KN#g%&g%&g%&gy#Pv# t# t#bj#6q#]M ]M /M /M f1#f1#f1#e1#e1#d1#d1#d1#d1#d1#d1#d1#d1#d1#d1#d1#/M /M d1#e1#f1#dw Lz LZ$/|@/|@(|@_|@:|@[|@[|@<|@vR@vR@vR@Eu Eu Kv Kv Kv u1$u1$u1$u1$u1$u1$u1$u1$&E &E &E Kv Kv Kv Kv Kv Kv vR@<|@<|@$4@<|@:|@(|@:|@(|@@~ @~ @~ @~ a~ kI@ 9 +L@RT@b.#i@#j$#j$#Cv@Z=#P~#N~#Ut&85*qR#pR#D,#o5&U{;~1*Ij -p OB=@' Nj=R--[C QE I_-T=*|B=;];V+*xD |{;r7-(B=n.>n.>n.>n.!D+!D+;n.-~@]*=]*=]*=}m.;n.!D+ZQ.Av&&, &, &, &, Av&ZQ.ZQ.ZQ.Av&&, &, 0, {h&{h&.==.== == == ==.==3P 3P .==.==.==.==.==.==", "VW.8v.Hu+#9.cp.[3+[3+Hu+8v.8v.#9.|5+w7+[3+#9.l#@l#@j}+j}+{t.{t.{t.{t.l#@{t.aq.{t.l#@$9.l#@{t.|5+[3+[3+cp.PI.Hu+Hu+8v.#9.#9.#9.#9.#9.#9.#9.#9.[3+cp.cp.cp.cp.cp.cp.[3+Hu+PI.#9.cp.[3+|5+w7+ET&[3+#9.Hu+Hu+#9.cp.cp.PI.|5+cp.#9.cp.|5+|5+[3+#9.cp.cp.[3+[3+|5+|5+w7+w7+w7+w7+w7+|5+[3+cp.cp.cp.aq.(s.ym.bv#6' bv#ym.ym.bv#bv#bv#bv#bv#bv#bv#bv#ET&ET&ET&ET&ET&ET&ET&ET&6z+6z+ET&w7+w7+|5+[3+[3+w7+w7+|5+|5+[3+[3+[3+cp.6z+w7+[3+|5+ET&ET&w7+aq.y}*sZ sZ sZ y}*y}*y}*y}*%0+$B#,H.,H.0q.0q.ns#+9.:(+eO@@9.@9.@9.$B#$B#$B#eO@@9.%0+$B#eO@)Z%@9.$B#:(+:(+:(+:(+:(+:(+:(+:(+,H.q3.0q.q3.:(+bp.:(+,H.)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%@9.eO@eO@)Z%)Z%eO@eO@@9.eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@q3.q3.,H.,H.:(+bp.bp.+9.bp.bp.+9.+9.bQ#bQ#o&=o&=eO@eO@eO@eO@eO@eO@eO@eO@$B#@9.eO@)Z%,X@'Z%DI#DI#bQ#o&=o&=o&=o&=o&=o&=bQ#:(+:(+:(+:(+:(+:(+:(+:(+b,+o&=bQ#bp.bp.bp.bp.bp.+9.+9.bQ#bQ#bQ#+9.+9.bp.b,+b,+o&=bQ#+9.bp.:(+:(+o&=o&=o&=bQ#+9.bp.bp.bp.bQ#bQ#+9.bp.+9.+9.bQ#o&=+9.+9.+9.+9.+9.+9.+9.+9.j(#b,+bQ#+9.+9.bQ#b,+j(#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.+9.bp.bp.+9.bQ#o&=o&=o&=bQ#bQ#o&=o&=o&=j(#j(#b,+b,+b,+b,+b,+b,+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=+9.bp.:(+:(+:(+:(++9.R]$~];{];]];^];S/*O8*d5 /];}q@(];4f &! &! 4m&`i&gZ#n ;2k=[]#Yk Zp S} {1 :} uR@@A@B_#kI@kI@a~ J~ (|@(|@X:@r[@r[@>b@rG sG sG tG -E *E *E -E -E }g =E &E &E &E &E &E &E &E &E &E &E &E &E &E &E &E &E }g }g }g }g }g }g }g }g -! -! -! tG tG tG sG sG r[@r[@r[@X:@X:@t! t! t! rG >b@r[@r[@r[@r[@>b@rG r[@r[@r[@X:@X:@X:@X:@t! Y:@W:@W:@W:@W:@W:@W:@Y:@/|@/|@^|@^|@^|@@~ @~ @~ WA WA WA WA WA WA WA WA Lz xy xy dw ew f1#e1#e1#]M ]M d1#e1#f1#ew dw dw B_#B_#B_#')#kI@1f a~ YA kI@B_#QT@B_#1f a~ 1f ')#a~ a~ 1f kI@')#B_#QT@QT@')#QT@))#))#QT@QT@!)#]M Pv#gy#NH#NH#NH#T8#Ia#*)&Wm@=3#NH#g%&g%&g%&gy#cj#6q#6q#6q#]M /M /M d1#d1#f1#f1#e1#e1#d1#d1#d1#/M d1#d1#d1#d1#d1#d1#d1#d1#]M /M /M d1#f1#dw Lz LZ$(|@(|@_|@:|@[|@<|@<|@$4@vR@vR@Eu Eu Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv Kv Eu Eu Eu $4@[|@[|@<|@<|@:|@/|@[|@(|@^|@@~ ^|@@~ YA kI@O9 .9 bP@b.#Cv@C&#C&#Y=#VE@P~#O~#Ut&85*qR#qR#>p 4t=]o (: 11&OB=FA=Nj=t|*p7-+c-I_-l[--];^O&W{;L{;A0-Sa-Ui*iX=6w=4u-n.>n.!D+`b&`b&B#@;n.-~@]*=(b+c2=]*=-~@>n.ZQ.ZQ.ZQ.Av&Av&ZQ.ZQ.ZQ.B9.Bv&ZQ.Av&&, 0, {h&~h& == ==)A&)A& ==.==cl.PN.3P 3P 3P 3P 3P 3P ", "VW.8v.Hu+PI.#9.cp.[3+cp.PI.PI.#9.[3+[3+#9.8v.l#@l#@l#@l#@j}+j}+{t.aq.j}+aq.(s.{t.l#@5!.$9.j}+|5+|5+[3+cp.PI.Hu+8v.8v.#9.#9.#9.#9.#9.#9.#9.#9.cp.cp.cp.[3+[3+cp.cp.cp.Hu+Hu+PI.#9.[3+|5+w7+w7+[3+#9.Hu+Hu+#9.cp.cp.PI.ET&|5+[3+[3+w7+ET&w7+[3+cp.cp.[3+[3+|5+|5+w7+w7+w7+w7+w7+|5+[3+cp.cp.cp.{t.aq.(s.ym.ym.bv#bv#ym.bv#bv#bv#bv#bv#bv#bv#bv#|5+|5+|5+|5+|5+|5+|5+|5+ET&ET&ET&w7+|5+[3+[3+[3+|5+|5+|5+[3+[3+cp.cp.cp.ET&|5+[3+|5+ET&6z+w7+(s.y}*sZ sZ sZ y}*y}*y}*y}*%0+$B#,H.,H.0q.0q.ns#+9.:(+eO@@9.@9.@9.$B#$B#$B#eO@$B#%0+$B#@9.eO@@9.%0+q3.q3.,H.:(+bp.+9.+9.bQ#,H.0q.<3+0q.:(+bp.:(+q3.)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%@9.eO@eO@)Z%)Z%eO@eO@@9.eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@q3.,H.,H.:(+bp.bp.+9.+9.+9.+9.+9.+9.bQ#bQ#bQ#bQ#,X@,X@,X@,X@,X@,X@,X@,X@$B#@9.eO@)Z%,X@'Z%DI#DI#o&=o&=o&=bQ#bQ#o&=o&=o&=:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.,H.:(+bp.+9.bQ#j(#j(#o&=bQ#+9.bp.:(+:(+j(#j(#b,+bQ#+9.bp.:(+,H.o&=o&=o&=bQ#+9.bp.bp.bp.o&=bQ#+9.+9.bp.+9.bQ#bQ#+9.+9.+9.+9.+9.+9.+9.+9.j(#b,+bQ#+9.+9.bQ#b,+j(#b,+b,+b,+b,+b,+b,+b,+b,+bQ#bQ#bQ#bQ#o&=o&=bQ#+9.bQ#o&=o&=o&=o&=o&=o&=bQ#o&=o&=b,+b,+b,+b,+b,+b,++9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#o&=o&=o&=o&=o&=o&=b,+b,+o&=o&=o&=o&=b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=ns#ns#ns#ns#{S*NR*zI*=g@_];:];<];Ru&!6#[];g8 Jg }];|];1];Mn=2];|o&gk&3## <#z_#7J@Yk Zp S} {1 <} uR@@A@B_#')#')#1f zK ^|@^|@t! X:@r[@>b@rG sG sG tG -E *E }g -E -E *E i0$&E &E &E &E &E &E &E &E &E &E &E &E &E &E &E &E }g }g }g }g }g }g }g }g -! -! -! tG tG tG sG sG r[@r[@r[@X:@X:@t! t! t! rG >b@r[@r[@r[@r[@>b@rG >b@>b@r[@r[@X:@t! t! t! W:@Y:@Y:@Y:@Y:@Y:@Y:@W:@/|@/|@^|@^|@^|@@~ @~ @~ WA WA WA WA WA WA WA WA Lz xy xy dw ew f1#e1#e1#dw dw dw ew ew ew ew ew ))#!)#QT@')#kI@1f a~ a~ kI@B_#QT@B_#1f a~ 1f ')#a~ a~ 1f kI@')#B_#QT@QT@B_#!)#))#))#QT@QT@+W@bj#gy#g>;@A&@A&g>;@A&8j&qs=');VC&}Q%}Q%}Q%}Q%h%&!m#]M ]M ]M /M /M /M d1#d1#d1#d1#d1#/M /M ]M ]M ]M d1#d1#d1#d1#d1#d1#d1#d1#]M ]M /M d1#f1#xy LZ$=p@_|@_|@:|@[|@<|@$4@$4@vR@Eu Eu Eu Kv Kv &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Kv Eu Eu vR@vR@vR@<|@:|@:|@[|@[|@_|@^|@[|@_|@^|@^|@^|@^|@YA 1f +L@.9 bP@b.#Cv@Y=#Z=#VE@P~#ir#O~#Ut&85*tq=qR#>p &p _n 11&dn=FA=Gz=/|$d:*wj&Lf*IA=l[-JA=JA=fy=3];0+&, ;n.>n.>n.!D+`b&`b&B#@;n.-~@]*=c2=c2=]*=}m.-~@ZQ.ZQ.ZQ.Bv&Bv&ZQ.ZQ.ZQ.B9.B9.Bv&ZQ.&, 0, {h&{h& == ==)A&)A& ==.==cl.PN.3P 3P 3P 3P 3P 3P ", "VW.8v.Hu+Hu+PI.#9.#9.cp.#9.PI.#9.cp.cp.Hu+VW.$9.$9.$9.$9.l#@j}+aq.(s.{t.aq.(s.{t.l#@5!.$9.l#@|5+[3+[3+cp.PI.Hu+Hu+8v.PI.PI.PI.PI.PI.PI.PI.PI.#9.cp.[3+[3+[3+[3+cp.#9.PI.PI.PI.#9.cp.[3+[3+|5+|5+cp.PI.PI.cp.[3+cp.#9.ET&w7+[3+|5+ET&6z+w7+[3+cp.cp.[3+[3+|5+|5+w7+w7+|5+|5+|5+|5+[3+[3+[3+[3+{t.{t.aq.(s.(s.ym.bv#bv#bv#bv#bv#ym.ym.ym.(s.(s.[3+[3+[3+[3+[3+[3+[3+[3+w7+w7+|5+|5+|5+|5+[3+[3+w7+w7+|5+|5+[3+[3+[3+cp.w7+|5+cp.|5+ET&6z+ET&(s.y}*sZ sZ sZ y}*y}*y}*y}*%0+$B#,H.,H.0q.0q.ns#+9.:(+eO@@9.@9.@9.$B#$B#$B#eO@$B#M7.%0+@9.eO@$B#%0+<3+<3+0q.,H.:(+bp.+9.bQ#q3.0q.<3+0q.,H.:(+,H.q3.)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%eO@eO@)Z%,X@,X@)Z%eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@bp.bp.bp.bp.+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.'Z%'Z%'Z%'Z%'Z%'Z%'Z%'Z%@9.eO@eO@)Z%,X@,X@'Z%'Z%o&=bQ#bQ#+9.+9.bQ#bQ#o&=+9.bp.:(+:(+:(+:(+bp.+9.q3.0q.q3.q3.:(+bp.bQ#o&=Q+&j(#b,+bQ#+9.bp.bp.bp.j(#j(#b,+o&=bQ#+9.bp.:(+bQ#bQ#bQ#bQ#+9.+9.+9.+9.o&=o&=bQ#+9.bp.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+o&=bQ#bQ#bQ#bQ#o&=b,+b,+b,+b,+b,+b,+b,+b,+b,+bQ#+9.+9.bQ#b,+b,+bQ#bp.bQ#bQ#o&=b,+b,+o&=bQ#bQ#bQ#o&=o&=o&=b,+b,+b,+b,+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=b,+b,+b,+b,+o&=bQ#bQ#o&=b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=ns#ns#{S*NR*aR#zI*7&+D<&4];5];6];7];8];9r >T#^m#9];0];}{;U' M,;Nn=-3 a$#86-*[ :u s[ Zp S} /0#'p uR@RT@QT@B_#B_#')#XA @~ @~ +~ t! X:@r[@rG sG sG sG -! }g }g -E -E *E i0$u1$u1$u1$&E &E Kv Kv Kv Kv Kv Kv &E &E u1$u1$u1$}g }g }g }g }g }g }g }g -! -! -! tG tG tG sG sG >b@>b@>b@r[@r[@X:@X:@X:@>b@r[@X:@X:@X:@X:@r[@>b@>b@>b@r[@r[@X:@t! +~ +~ +~ W:@Y:@Y:@Y:@Y:@W:@+~ /|@/|@^|@^|@^|@@~ @~ @~ WA WA WA WA WA WA WA WA LZ$Lz Lz xy dw ew f1#f1#G5@LZ$Lz dw ew f1#f1#f1#w! ))#!)#B_#')#')#')#')#kI@B_#QT@B_#1f a~ 1f ')#a~ a~ 1f kI@')#B_#QT@QT@QT@))#+W@))#!)#))#XC@vg#gy#g>;VC&@A&g>;}Q%@A&8j&VC&g>;h>;h%&h>;h>;K>;7~%]M ]M ]M ]M /M /M /M /M d1#/M /M /M ]M ]M 6q#6q#d1#d1#d1#d1#d1#d1#d1#d1#/M /M d1#f1#dw LZ$=p@1r@:|@:|@[|@<|@$4@vR@vR@Eu Eu Eu Kv Kv &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Eu Eu vR@$4@$4@$4@[|@_|@_|@:|@:|@(|@@~ :|@(|@@~ @~ @~ @~ a~ kI@.9 @A@bP@b.#Cv@Z=#P~#ir#N~#O~#Ut&85*tq=qR#pR#D,#aX-(: dn=tH&|k=c:*Ra-lI-R2*2u-IA=dU&.];JA=5M&a];(e*HN#JT.[H.N:*&r=lz o&=S`%CI#CI#CI#w{@Q+&Q+&Q+&n3.n3.h;#h;#sQ@.9.):.n.>n.>n.>n.!D+!D+;n.-~@-~@-~@-~@}m.}m.}m.Av&ZQ.ZQ.Bv&Bv&ZQ.ZQ.Av&Bv&Bv&Bv&ZQ.Av&&, &, 0, .==.== == == ==.==3P 3P .==.==.==.==.==.==", "8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+8v.VW.Hu+#9.cp.PI.8v.$9.5!.5!.5!.$9.j}+aq.(s.{t.(s.(s.aq.$9.5!.5!.l#@[3+[3+cp.#9.#9.PI.Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI.#9.cp.[3+|5+|5+[3+cp.#9.#9.#9.#9.#9.#9.#9.cp.cp.w7+[3+#9.#9.[3+|5+|5+cp.w7+[3+cp.[3+w7+ET&|5+cp.cp.cp.[3+[3+|5+|5+w7+w7+[3+[3+[3+[3+|5+|5+|5+|5+{t.{t.{t.aq.(s.ym.bv#6' bv#ym.ym.ym.(s.aq.aq.aq.|5+|5+|5+|5+|5+|5+|5+|5+[3+[3+[3+|5+|5+|5+|5+|5+w7+w7+w7+|5+|5+|5+[3+[3+w7+[3+cp.[3+ET&6z+ET&ym.y}*sZ sZ sZ y}*y}*y}*y}*%0+$B#,H.,H.0q.0q.ns#+9.:(+eO@@9.@9.@9.$B#$B#$B#@9.%0+M7.%0+@9.@9.$B#M7.0q.0q.0q.q3.,H.,H.:(+:(+q3.<3+v4.<3+,H.:(+,H.0q.@9.@9.@9.@9.@9.@9.@9.@9.)Z%)Z%,X@'Z%'Z%,X@)Z%)Z%eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@o&=bQ#bQ#bQ#bQ#+9.+9.+9.bp.bp.bp.bp.bp.bp.bp.bp.,X@,X@,X@,X@,X@,X@,X@,X@)Z%)Z%)Z%)Z%)Z%,X@,X@,X@o&=bQ#bp.:(+:(+bp.bQ#o&=bQ#+9.bp.:(+:(+bp.+9.bQ#:(+:(+,H.:(+:(++9.bQ#o&=b,+o&=bQ#+9.+9.bQ#o&=b,+b,+b,+b,+o&=bQ#+9.+9.+9.+9.+9.+9.+9.bQ#bQ#bQ#bQ#b,+o&=bQ#+9.bp.bp.+9.+9.o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#o&=b,+b,+o&=bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=+9.bp.:(++9.b,+b,++9.q3.+9.bQ#o&=b,+b,+o&=bQ#+9.bQ#bQ#bQ#o&=o&=b,+b,+b,+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.bQ#bQ#bQ#o&=b,+b,+b,+o&=bQ#+9.bp.bp.+9.bQ#o&=p!#p!#b,+b,+b,+b,+b,+b,+aR#zI*zI*7&+DX-@k.@k.c3+b];c];d];e];f];g];h];{0#i];c{;PJ#H0-9X-HH#)]-7m&u4 &[ R3 s[ Zp S} 4' {1 [`@RT@QT@QT@QT@B_#KH#WA @~ W:@+~ X:@r[@rG sG sG sG -! }g }g -E }g =E 1C%u1$u1$u1$&E &E Kv Kv Kv Kv Kv Kv &E &E u1$u1$u1$}g }g }g }g }g }g }g }g -! -! -! tG tG tG sG sG rG rG rG >b@>b@r[@r[@r[@r[@X:@t! t! t! t! X:@r[@rG >b@>b@r[@X:@t! +~ +~ t! +~ W:@Y:@Y:@W:@+~ t! /|@/|@^|@^|@^|@@~ @~ @~ WA WA WA WA WA WA WA WA G5@LZ$LZ$Lz xy dw ew ew LZ$Lz dw f1#f1#f1#f1#ew XC@w! ))#QT@B_#QT@QT@!)#kI@B_#QT@B_#1f a~ 1f ')#a~ a~ 1f kI@')#B_#QT@QT@!)#+W@w! +W@))#+W@8.#LH#gy#g>;VC&@A&}Q%h>;h>;g>;}Q%h%&K>;K>;h%&h%&7~%=g&]M ]M ]M ]M ]M ]M ]M ]M e1#d1#d1#d1#/M /M ]M ]M d1#d1#d1#d1#d1#d1#d1#d1#d1#d1#e1#ew xy G5@W~#X~#:|@[|@[|@<|@$4@vR@Eu Eu Kv Kv Kv &E &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Eu vR@$4@<|@<|@$4@:|@(|@(|@_|@_|@/|@@~ /|@@~ YA a~ a~ a~ ')#QT@.9 @A@bP@b.#j$#Z=#ir#O~#Ut&85*tq=pR#(X%(X%(X%Fz dZ-11&Ln=j2&c:*oy=lI-ce-1d-1d-@W-I_-^O&|B=5M&j];hV=@f*S`%4u-n.;n.;n.;n.;n.-~@-~@-~@;n.!D+!D+!D+;n.}m.c2=&, Av&ZQ.Bv&Bv&ZQ.Av&&, ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.Av&Av&3P 3P .== == == ==.==.== == == == == == ==", "Hu+Hu+Hu+8v.8v.8v.8v.9, G6.G6.8v.#9.cp.#9.Hu+$9.5!.6!.6!.$9.j}+aq.(s.{t.(s.(s.aq.$9.5!.5!.l#@cp.cp.cp.#9.#9.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.cp.[3+|5+|5+[3+cp.PI.cp.cp.#9.#9.#9.#9.#9.PI.bv#(s.j}+{t.(s.ym.(s.aq.(s.{t.j}+j}+aq.(s.aq.j}+cp.cp.[3+[3+|5+|5+w7+w7+cp.cp.cp.[3+|5+w7+w7+w7+j}+j}+{t.{t.aq.ym.bv#6' ym.ym.(s.(s.aq.{t.{t.{t.ET&ET&ET&ET&ET&ET&ET&ET&cp.cp.cp.[3+|5+w7+w7+w7+ET&ET&ET&w7+w7+|5+|5+|5+w7+[3+cp.[3+ET&6z+6z+w7+y}*sZ y}*y}*y}*y}*y}*y}*%0+$B#,H.,H.0q.0q.:(++9.:(+eO@@9.@9.@9.$B#$B#$B#@9.%0+M7.%0+@9.@9.$B#M7.q3.q3.q3.q3.0q.0q.0q.0q.q3.<3+v4.<3+,H.:(+,H.0q.@9.@9.@9.@9.@9.@9.@9.@9.,X@,X@'Z%DI#DI#'Z%,X@,X@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@j(#b,+b,+o&=bQ#bQ#+9.+9.:(+:(+:(+:(+:(+:(+:(+,H.eO@eO@eO@eO@eO@eO@eO@eO@,X@,X@,X@)Z%)Z%)Z%)Z%)Z%bQ#+9.:(+,H.,H.:(++9.bQ#o&=bQ#+9.bp.bp.+9.bQ#o&=o&=bQ#+9.+9.bp.+9.bQ#bQ#+9.bp.bp.bp.bQ#b,+w{@CI#b,+b,+o&=o&=o&=bQ#bQ#bQ#bp.bp.bp.+9.bQ#o&=o&=o&=b,+o&=bQ#+9.bp.bp.bp.+9.b,+b,+b,+b,+b,+b,+b,+b,++9.bQ#b,+j(#j(#b,+bQ#+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bp.,H.q3.:(+bQ#o&=:(+<3++9.bQ#o&=j(#j(#o&=bQ#+9.+9.+9.bQ#bQ#o&=b,+b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=+9.+9.bQ#bQ#o&=b,+b,+b,++9.bp.,H.q3.q3.,H.bp.+9.p!#p!#b,+b,+b,+b,+b,+b,+0J*0J*0J*@:+7&+zI*L0.J7.k];l];m];n];o];p];q];%c 47#r];:]*sX-IX-3n&4g D~-s];C,#^+$./$=[ S} M1 {1 [`@RT@!)#QT@QT@B_#kI@YA Y:@W:@+~ t! r[@rG sG sG rG -! }g }g -E }g =E 1C%Nt%u1$u1$&E &E Kv Kv Eu Eu Kv Kv &E &E u1$u1$Nt%}g }g }g }g }g }g }g }g -! -! -! tG tG tG sG sG sG sG sG rG rG >b@>b@>b@X:@t! t! +~ +~ t! t! X:@rG rG >b@r[@X:@t! +~ W:@X:@t! W:@Y:@Y:@W:@t! X:@/|@/|@^|@^|@^|@@~ @~ @~ WA WA WA WA WA WA WA WA G5@G5@LZ$LZ$Lz xy dw dw dw ew f1#e1#d1#e1#ew dw XC@w! ))#!)#QT@!)#))#+W@kI@B_#QT@B_#1f a~ 1f ')#a~ a~ 1f kI@')#B_#QT@QT@))#w! w! w! +W@w! h@#MH#gy#g>;T8#@A&gy#K>;Pv#h>;gy#K>;!m#-k&cj#K>;07#^0#]M ]M 6q#6q#6q#6q#6q#6q#f1#f1#f1#e1#e1#d1#d1#d1#d1#d1#d1#d1#d1#d1#d1#d1#d1#e1#f1#dw Lz =p@X~#cN@[|@[|@<|@$4@vR@Eu Eu Kv Kv Kv Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Eu vR@$4@<|@<|@<|@:|@(|@(|@_|@_|@/|@WA @~ a~ kI@')#kI@')#QT@+W@@A@RT@uR@b.#j$#VE@N~#0u#tq=pR#5N=^T#(p=S2*S2*S2*=p tD&RX-]l=t];I{;2X-Lf*$1*1d-hX-I_-u];v];w];W{;pX-CI#a@@sX%~U.CI#F6.w{@j(#Q+&w{@CI#sX%&r=*r=uG#sQ@sQ@.9.n.;n.;n.-~@}m.}m.]*=}m.;n.`b&{y%B#@>n.]*=(b+0, &, Av&ZQ.ZQ.Av&&, 0, Av&Av&ZQ.ZQ.ZQ.ZQ.ZQ.Bv&PN.cl..== ==)A&)A& == ==)A&)A&)A&)A&)A&)A&", "VW.VW.8v.Hu+PI.PI.PI.8v.#9.#9.8v.8v.#9.#9.8v.X)@G6.VW.PI.#9.#9.PI.PI.Hu+PI.PI.#9.#9.cp.cp.[3+cp.#9.Hu+Hu+Hu+#9.[3+|5+cp.#9.PI.Hu+Hu+#9.[3+|5+w7+cp.Hu+PI.[3+|5+[3+#9.cp.cp.cp.cp.cp.cp.cp.{t.ph#un.ZT#un.)W+21.)W+{b+ph#ph#ph#ph#ph#ph#ph#ph#pD&N7.M7.M7.M7.%0+%0+%0+$B#@9.$B#M7._r+N7.@9.,X@%0+$B#eO@)Z%)Z%eO@$B#%0+)Z%eO@$B#%0+%0+$B#eO@)Z%@9.@9.@9.eO@eO@)Z%)Z%)Z%'Z%eO@$B#%0+@9.)Z%)Z%eO@$B#$B#$B#$B#$B#$B#$B#$B#@9.%0+M7.$B#eO@)Z%eO@$B#eO@y}*eO@eO@eO@eO@eO@eO@@9.@9.@9.@9.@9.@9.@9.,H.F6.v4.q3.,H.,H.:(+bQ#b,++9.bp.,H.q3.0q.0q.q3.q3.$B#$B#%0+M7.%0+@9.)Z%'Z%'Z%eO@%0+$B#eO@eO@$B#N7.eO@eO@eO@eO@eO@eO@eO@eO@DI#)Z%@9.eO@'Z%DI#,X@@9.,X@)Z%@9.$B#$B#@9.)Z%,X@DI#)Z%@9.@9.)Z%'Z%,X@)Z%bp.bp.bp.bp.bp.bp.bp.bp.bp.,H.q3.:(+bQ#o&=bQ#+9.)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%q3.,H.,H.:(+:(+bp.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+o&=o&=bQ#+9.bp.bp.:(+bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.:(+:(+bp.+9.bQ#o&=o&=+9.bp.+9.bQ#o&=bQ#bp.bp.bp.bp.bp.bp.bp.bp.bp.o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.bp.+9.bQ#b,+b,++9.,H.:(++9.b,+b,+o&=bQ#o&=j(#o&=o&=o&=o&=o&=o&=o&=o&=t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.o3.o3.v5.v5.v5.o&=o&=o&=o&=o&=o&=o&=o&=bQ#o&=b,+o&=bp.:(+:(++9.j(#o&=+9.+9.bQ#bQ#bp.,H.bp.bp.bp.bp.bp.bp.{S*%U*7J.Nu&`q&x];y];z];&8@A];B];pI-C0-np C];H8&D];p9&'d*b< i_ ud#i_ O@$g< O@$(} Qw#@A@.9 .9 +L@(d@8v /d@Y:@r[@rG rG >b@>b@rG -E -E }g *E =E =E i0$i0$pM%*L%GJ%u1$Kv vR@$4@<|@$4@vR@Eu Kv &E &E &E Kv Nt%u1$Kv Eu Eu Kv u1$Nt%Eu vR@vR@$4@[|@:|@_|@_|@rG rG >b@>b@r[@r[@X:@X:@r[@X:@+~ Y:@Y:@+~ r[@>b@^|@^|@/|@/|@/|@/|@/|@(|@WA @~ /|@_|@_|@(|@/|@^|@/|@/|@^|@^|@^|@@~ @~ @~ WA WA WA YA YA YA YA YA dw xy Lz LZ$Lz xy ew f1#f1#f1#f1#f1#f1#f1#f1#f1#d1#d1#d1#f1#xy Lz dw f1#d1#f1#dw dw ew ew dw LZ$Lz dw ew dw xy dw e1#/M d1#d1#/M 6q#vg#LH#O8#zg#O8#T8#O8#KN#MH#NH#LH#NH#OH#cj#6q#)m# t#cj#6q#/M t# t# t# t#bj#6q#]M ]M /M /M /M /M ]M ]M ]M ]M ))#+W@w! XC@XC@w! w! +W@QT@!)#QT@B_#a~ ^|@:|@<|@[|@$4@Eu Eu vR@vR@Kv u1$u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$&E &E Kv Eu Eu vR@$4@<|@[|@[|@tG >b@X:@X:@r[@>b@r[@X:@t! Y:@]|@(7 (7 /d@+L@RT@uR@[`@UE@Cv@Y=#VE@ir#N~#N~#qR#]T#k`&h_*(p=h_*+6*um=Rq=Tq ml=v~-)3*ZY=H9-s7-`4-IA=E];2B=u];QB=@h@N7+.9.JD=^(-.9.t4.n3.S%>S%Av&cl.3P ==.==cl.PN.3P ==%z&)A& == == ==%z&", "8v.8v.8v.Hu+Hu+Hu+Hu+Hu+cp.cp.Hu+Hu+cp.cp.Hu+VW.8v.Hu+#9.#9.PI.Hu+8v.PI.PI.PI.#9.#9.cp.cp.cp.#9.PI.PI.PI.PI.#9.cp.[3+#9.#9.PI.Hu+PI.#9.[3+|5+w7+cp.PI.PI.[3+|5+[3+#9.cp.cp.cp.cp.cp.cp.cp.{t.{b+NQ.#) NQ.!W+0Y+!W+NQ.NQ.NQ.NQ.NQ.NQ.NQ.NQ.ph#pD&N7.M7.M7.M7.%0+%0+%0+$B#@9.$B#N7.xX%_r+%0+eO@$B#$B#@9.@9.@9.@9.$B#$B#eO@@9.$B#%0+%0+$B#@9.eO@@9.@9.@9.eO@eO@eO@)Z%)Z%,X@eO@%0+%0+@9.eO@eO@@9.$B#$B#$B#$B#$B#$B#$B#$B#@9.%0+M7.$B#eO@)Z%eO@$B#$B#$B#$B#$B#$B#$B#$B#$B#@9.@9.@9.@9.@9.@9.@9.@9.v4.0q.,H.,H.q3.q3.:(++9.:(+:(+,H.q3.q3.q3.,H.,H.)Z%)Z%@9.$B#$B#@9.eO@)Z%,X@eO@%0+$B#eO@eO@$B#N7.eO@eO@eO@eO@eO@eO@eO@eO@,X@eO@$B#@9.,X@'Z%)Z%@9.,X@)Z%@9.$B#$B#@9.)Z%,X@DI#)Z%@9.@9.)Z%'Z%,X@)Z%bp.bp.bp.bp.bp.bp.bp.bp.+9.:(+,H.:(++9.bQ#+9.bp.)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%bp.bp.bp.bp.+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#bQ#bQ#bp.bp.bp.bp.bp.bp.bp.bp.bp.:(+:(+:(+:(+bp.+9.bQ#o&=+9.bp.+9.bQ#o&=bQ#bp.bp.bp.bp.bp.bp.bp.bp.bp.o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.bp.bQ#b,+b,++9.,H.:(++9.b,+b,+o&=bQ#o&=j(#o&=o&=o&=o&=o&=o&=o&=o&=t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.o3.o3.o3.v5.v5.o&=o&=o&=o&=o&=o&=o&=o&=bp.bQ#o&=bQ#bp.:(+bp.+9.b,+bQ#bp.bp.+9.bQ#bp.,H.bp.bp.bp.bp.bp.bp.bp.p3.L7.G8@F];G];*-;p~;DX%i5 H];OY+I];_) Z( J];n: !];gC$0j#C`+C`+i_ Q-@M~#g< (} Qw#@A@.9 .9 +L@(d@8v /d@Y:@r[@rG >b@r[@>b@rG -! -! -E }g *E *E =E =E GJ%GJ%Nt%u1$Kv Eu vR@vR@vR@Eu Kv &E u1$u1$&E &E Nt%u1$Kv Eu Eu Kv u1$Nt%Eu Eu vR@$4@<|@[|@:|@:|@rG rG >b@>b@r[@r[@X:@X:@>b@r[@+~ W:@W:@+~ X:@r[@(|@(|@(|@(|@/|@/|@/|@/|@WA @~ /|@_|@_|@(|@/|@^|@/|@/|@^|@^|@^|@@~ @~ @~ @~ @~ WA WA YA a~ a~ a~ dw xy Lz Lz Lz dw ew f1#f1#f1#f1#f1#f1#ew ew ew dw f1#d1#e1#f1#ew e1#/M /M e1#f1#f1#e1#e1#f1#dw dw f1#e1#f1#ew ew d1#6q#d1#d1#/M 6q# t#OH#SJ#MH#O8#O8#O8#MH#MH#LH#LH#LH#vg#bj#6q#6q# t# t#6q#/M t# t#bj#6q#]M ]M ]M ]M ]M ]M ]M ]M /M /M /M /M ))#+W@w! w! XC@w! +W@+W@))#!)#QT@kI@YA ^|@_|@:|@[|@$4@Eu Eu vR@vR@Kv Nt%u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$&E &E Eu Eu vR@vR@$4@<|@[|@[|@sG >b@X:@X:@r[@>b@r[@t! t! Y:@(7 /d@/d@ 9 +L@RT@bP@[`@UE@j$#Z=#ir#O~#0u#0u#pR#h_*]T#(p=(p=0Q=t_$4`=U`=qu=0w D@-C-.RE H9-fs-/e*DV&M~;K];]O&dW=q1.^(--Z+dO@sQ@D6.D6.h;#S%~h&Av&3P ==)A&)A&.==3P .==)A&.y&%z& ==.==.== ==", "Hu+Hu+Hu+8v.8v.8v.8v.Hu+[3+[3+Hu+Hu+[3+[3+Hu+PI.#9.#9.cp.#9.PI.Hu+8v.PI.PI.PI.#9.#9.cp.cp.cp.Hu+PI.#9.cp.cp.cp.cp.#9.#9.PI.PI.PI.PI.#9.cp.[3+w7+cp.PI.PI.cp.[3+[3+cp.cp.cp.cp.cp.cp.cp.cp.{t.21.@~.NQ.NQ.!W+!W+@~.#) NQ.NQ.NQ.NQ.NQ.NQ.NQ.ph#pD&N7.M7.M7.M7.%0+%0+%0+$B#@9.$B#N7.O7.O7.N7.%0+@9.@9.$B#%0+%0+$B#@9.@9.eO@@9.%0+M7.M7.%0+@9.eO@$B#$B#@9.@9.eO@eO@eO@)Z%)Z%$B#M7.M7.$B#eO@@9.$B#$B#$B#$B#$B#$B#$B#$B#$B#@9.%0+M7.$B#eO@)Z%eO@$B#M7.M7.M7.M7.M7.M7.M7.M7.@9.@9.@9.@9.@9.@9.@9.@9.0q.,H.bp.:(+q3.0q.q3.:(+,H.,H.q3.q3.q3.,H.:(+:(+DI#'Z%)Z%eO@@9.@9.@9.@9.)Z%@9.$B#$B#@9.eO@$B#%0+eO@eO@eO@eO@eO@eO@eO@eO@)Z%@9.$B#@9.eO@)Z%eO@$B#)Z%eO@eO@@9.@9.eO@eO@)Z%DI#)Z%@9.@9.)Z%'Z%,X@)Z%bp.bp.bp.bp.bp.bp.bp.bp.bQ#+9.:(+:(++9.bQ#bp.,H.)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%bQ#bQ#bQ#bQ#+9.+9.+9.+9.bp.bp.bp.bp.bp.bp.bp.bp.:(+:(+bp.+9.bQ#o&=b,+b,+bp.bp.bp.bp.bp.bp.bp.bp.:(+,H.,H.,H.,H.:(+bp.+9.o&=+9.bp.+9.bQ#o&=bQ#bp.+9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.bp.bQ#b,+b,++9.:(+:(+bQ#b,+j(#o&=bQ#o&=b,+b,+b,+b,+b,+b,+b,+b,+b,+t4.t4.t4.t4.t4.t4.t4.t4.D6.D6.t4.t4.o3.o3.o3.v5.o&=o&=o&=o&=o&=o&=o&=o&=,H.bp.bQ#+9.bp.:(++9.o&=bQ#bp.:(+:(++9.+9.:(+q3.bp.bp.bp.bp.bp.bp.bp.p3.h|.#R+d@@L];e0=M];CQ-[);3f+hs-|.#N];eQ#c $S-&!];Xi&mp 2^#2^#i_ Q-@#[ M~#(} _} RT@@A@@A@.9 (d@8v (7 Y:@X:@>b@r[@r[@>b@rG sG tG tG -! -E }g *E *E u1$u1$u1$&E &E Kv Kv Kv Kv Kv &E u1$Nt%u1$u1$u1$u1$&E &E Kv Kv &E &E u1$Kv Kv Eu vR@$4@$4@<|@<|@rG rG >b@>b@r[@r[@X:@X:@sG >b@X:@+~ W:@+~ t! X:@:|@:|@_|@_|@(|@/|@/|@^|@WA @~ /|@_|@_|@(|@/|@^|@/|@/|@^|@^|@^|@@~ @~ @~ ^|@^|@@~ WA YA 1f 1f kI@dw dw xy xy dw ew f1#e1#e1#e1#e1#f1#ew ew dw dw G5@dw d1#/M /M /M ]M 6q#bj#]M d1#/M ]M 6q#/M e1#e1#d1#/M d1#f1#f1#/M 6q#/M ]M ]M 6q#bj# t#vg#vg#MH#MH#MH#LH#LH#SJ#SJ#SJ#vg#bj#]M 6q#bj#bj#6q#/M t#6q#/M d1#d1#d1#]M 6q#6q#6q#]M ]M /M /M d1#d1#))#+W@w! w! w! +W@+W@))#+W@!)#B_#1f WA ^|@/|@(|@[|@$4@Eu Kv Eu Eu &E Nt%u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$&E &E Eu Eu vR@$4@<|@[|@[|@:|@rG r[@t! X:@r[@r[@X:@+~ +~ ;! (7 /d@/d@ 9 .9 bP@bP@[`@UE@C&#VE@O~#Ut&85*u_$pR#(p=(p=^T#S2*+6*Js&5`=It=c.-p=-m';O];H9-H9-p{;(e*QE 8);u];X+*P];[^+XY.-Z+h;#p3.D6.n3.<(+<(+<(+sQ@sQ@.9.S%{h&0, {h&>S%%' >S%{h&{h&>S%0, ZQ.Av&~h&~h&ZQ..==)A&%z&%z& ==.== ==%z&)A&)A& ==.==.==.==", "PI.PI.Hu+8v.VW.VW.VW.PI.[3+[3+PI.PI.[3+[3+PI.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.8v.Hu+#9.[3+[3+[3+#9.PI.PI.PI.PI.PI.#9.cp.cp.[3+|5+[3+#9.#9.cp.cp.[3+[3+cp.cp.cp.cp.cp.cp.cp.{t.`^ 0Y+@~.@~.!W+!W+NQ.7S.NQ.NQ.NQ.NQ.NQ.NQ.NQ.ph#pD&N7.M7.M7.M7.%0+%0+%0+$B#$B#$B#N7.O7.x5.xX%N7.eO@@9.%0+M7.M7.%0+@9.eO@eO@@9.%0+M7.M7.%0+@9.eO@$B#$B#$B#@9.@9.eO@eO@eO@@9.%0+M7.M7.$B#@9.$B#M7.$B#$B#$B#$B#$B#$B#$B#$B#@9.%0+M7.$B#eO@)Z%eO@$B#M7.M7.M7.M7.M7.M7.M7.M7.@9.@9.@9.@9.@9.@9.@9.@9.0q.,H.:(+:(+q3.0q.,H.:(+q3.q3.0q.0q.q3.,H.bp.+9.'Z%'Z%,X@)Z%)Z%eO@eO@eO@eO@@9.$B#@9.@9.@9.@9.$B#eO@eO@eO@eO@eO@eO@eO@eO@@9.@9.$B#$B#@9.@9.@9.$B#eO@eO@eO@eO@eO@eO@eO@eO@DI#)Z%@9.@9.)Z%'Z%,X@)Z%bp.bp.bp.bp.bp.bp.bp.bp.b,++9.bp.bp.+9.+9.:(+q3.)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%o&=o&=bQ#+9.+9.bp.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+bp.bp.+9.+9.bQ#bQ#o&=o&=bp.bp.bp.bp.bp.bp.bp.bp.,H.,H.,H.q3.,H.:(+bp.+9.o&=+9.bp.+9.bQ#o&=bQ#bp.+9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=+9.bp.+9.o&=o&=bQ#bp.bp.bQ#j(#j(#o&=bQ#bQ#b,+b,+b,+b,+b,+b,+b,+b,+b,+t4.t4.t4.t4.t4.t4.t4.t4.D6.D6.D6.t4.t4.o3.o3.o3.o&=o&=o&=o&=o&=o&=o&=o&=:(++9.o&=o&=+9.+9.o&=j(#+9.:(+q3.,H.bp.bp.:(+q3.bp.bp.bp.bp.bp.bp.bp.p3.c3+Ba@WO+L];L{+o4*w7-~`@Q];o=*Hc M>;'S#`( G8&R];{%@gC${_#C`+ud#gr#Qk Qk M1 _} RT@@A@@A@.9 (d@|g (7 Y:@t! r[@X:@X:@r[@rG rG rG sG tG -! -E -E }g &E &E &E &E &E &E &E &E &E u1$Nt%Nt%Nt%Nt%u1$u1$&E &E &E &E &E &E &E &E Kv Kv Eu Eu vR@vR@$4@$4@rG rG >b@>b@r[@r[@X:@X:@sG rG r[@t! +~ +~ +~ +~ <|@[|@:|@_|@(|@/|@^|@^|@WA @~ /|@_|@_|@(|@/|@^|@/|@/|@^|@^|@^|@@~ @~ @~ /|@/|@^|@WA a~ 1f kI@')#dw dw dw ew ew f1#f1#e1#d1#d1#e1#e1#f1#ew dw dw LZ$ew ]M bj#bj#]M ]M 6q#OH# t#bj#bj#vg#OH# t#6q#/M ]M 6q#/M e1#e1#/M 6q# t# t# t#vg#vg#vg# t# t#LH#LH#LH#SJ#SJ#SJ#OH#OH#vg#bj#]M ]M bj#bj#]M d1#6q#]M d1#f1#f1#e1#/M 6q#bj#6q#6q#]M /M d1#d1#e1#+W@+W@w! w! w! +W@))#!)#+W@!)#kI@YA ^|@/|@/|@/|@<|@vR@Kv Kv Eu Eu &E Nt%u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$&E &E Eu vR@vR@$4@<|@[|@:|@:|@>b@X:@t! t! r[@r[@t! Y:@W:@]|@/d@ 9 9 O9 @A@uR@uR@b.#i@#Y=#ir#Ut&tq=pR#tq=pR#(X%(X%^T#]T#T8 rU=S];S];Nr a*-O];T];de-q7-RE (e*K=;I_-Li=T=*s4.t/.dO@<(+o3.v5..9.S%X@$%' ~h&~h&%' >S%&, &, ~h&{h&ZQ..== ==%z&)A&.==3P ==%z&3P 3P 3P 3P .== ==", "PI.PI.Hu+8v.VW.VW.VW.Hu+[3+[3+Hu+Hu+[3+[3+Hu+Hu+Hu+Hu+PI.#9.cp.[3+|5+#9.#9.#9.#9.#9.#9.#9.#9.8v.Hu+#9.[3+[3+[3+#9.PI.Hu+PI.PI.#9.cp.cp.cp.cp.[3+[3+cp.cp.#9.#9.[3+|5+cp.cp.cp.cp.cp.cp.cp.{t.`^ 0Y+@~.@~.0Y+0Y+@~.#) NQ.NQ.NQ.NQ.NQ.NQ.NQ.ph#pD&N7.M7.M7.M7.%0+%0+%0+%0+$B#$B#M7.xX%x5.O7._r+@9.$B#M7.N7.N7.M7.$B#@9.@9.$B#M7.N7.N7.M7.$B#@9.%0+%0+$B#$B#@9.@9.eO@eO@@9.%0+M7.%0+@9.@9.$B#M7.$B#$B#$B#$B#$B#$B#$B#$B#@9.%0+M7.$B#eO@)Z%eO@$B#$B#$B#$B#$B#$B#$B#$B#$B#@9.@9.@9.@9.@9.@9.@9.@9.v4.0q.,H.,H.q3.q3.:(++9.q3.q3.0q.0q.q3.,H.bp.+9.eO@eO@)Z%)Z%,X@,X@,X@,X@$B#@9.@9.@9.@9.$B#@9.eO@eO@eO@eO@eO@eO@eO@eO@eO@$B#@9.@9.@9.$B#$B#@9.@9.eO@eO@eO@eO@eO@eO@eO@eO@DI#)Z%@9.@9.)Z%'Z%,X@)Z%bp.bp.bp.bp.bp.bp.bp.bp.b,++9.bp.bp.+9.+9.:(+q3.)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%+9.+9.+9.bp.:(+,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+o&=o&=bQ#bQ#+9.+9.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.:(+:(+,H.,H.,H.:(++9.+9.o&=+9.bp.+9.bQ#o&=bQ#bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=+9.bp.bp.bQ#o&=bQ#bp.+9.o&=j(#j(#o&=+9.bQ#o&=b,+b,+b,+b,+b,+b,+b,+b,+t4.t4.t4.t4.t4.t4.t4.t4.:^+:^+D6.D6.t4.t4.o3.o3.o&=o&=o&=o&=o&=o&=o&=o&=bp.bQ#b,+b,+o&=o&=j(#w{@bp.,H.q3.,H.bp.+9.bp.,H.bp.bp.bp.bp.bp.bp.bp.p3.M|@^U=X+-G];!<-U]; Z=xJ-~C@3f+3h=M3 V];W];S-&X];l2&xd 2^#C`+.|#i_ Sk Sk M1 46 bP@RT@RT@@A@/7 |g (7 Y:@t! X:@t! t! r[@rG rG rG sG sG tG -! -E -E Kv Kv Kv &E &E u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%u1$&E &E &E &E &E &E &E &E &E Eu Eu Eu Eu vR@vR@vR@vR@rG rG >b@>b@r[@r[@X:@X:@sG rG >b@X:@t! t! +~ +~ [|@[|@:|@_|@/|@^|@@~ @~ WA @~ /|@_|@_|@(|@/|@^|@/|@/|@^|@^|@^|@@~ @~ @~ /|@/|@^|@WA a~ 1f kI@')#ew ew f1#f1#e1#e1#e1#e1#/M /M d1#d1#e1#e1#f1#f1#f1#/M t#vg#bj#]M /M /M LH#OH#vg#OH#LH#MH#LH#OH#6q#bj#bj#]M d1#e1#d1#]M SJ#SJ#LH#LH#LH#SJ#vg# t#SJ#SJ#SJ#SJ#OH#OH#vg#vg# t#6q#/M ]M 6q#bj#]M d1#/M d1#e1#f1#f1#e1#/M ]M 6q#6q#]M ]M /M /M d1#d1#+W@+W@w! w! +W@))#!)#QT@!)#B_#a~ @~ /|@(|@(|@(|@<|@vR@Kv Kv Kv Kv u1$GJ%u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$&E &E vR@vR@$4@<|@[|@:|@:|@_|@X:@t! +~ t! r[@X:@W:@;! Y:@]|@ 9 O9 O9 +L@RT@[`@b.#UE@j$#VE@O~#85*pR#(X%5N=5N=(X%^T#S2*+6*s|*[!-0w Nr -+-|!-Ti*T];5$-s7-W+-fs-#y=]#*[A=NK.:@.f|.D6.t4.v5.sQ@):.):.<(+n3.sQ@n3.o3.v5.sQ@<(+sQ@h;#N:*uG#*r=*r=&r=&r=sX%S`%uG#uG#uG#uG#N:*N:*vu#vu#vu#N:**r=&r=&r=&r=*r=*r=*r=vu#;Z+uG#uG#;Z+;Z+*r=*r=&r=&r=&r=&r=&r=*r=*r=&r=&r=&r=&r=*r=*r=*r=*r=&r=&r=*r=*r=uG#N:*N:*vu#uG#uG#uG#uG#uG#uG#uG#uG#uG#&r=sX%&r=*r=uG#*r=sX%*r=*r=*r=*r=*r=*r=*r=*r=N:**r=&r=*r=N:*N:*uG#&r=*r=&r=&r=sX%sX%S`%S`%S`%CI#S`%sX%&r=*r=uG#N:*vu#N:*N:*N:*N:*N:*N:*N:*N:*o!#o!#o!#o!#o!#o!#o!#o!#^u=m}+m}+m}+xE#xE#XT#XT#k(+k(+p2@p2@j(+IV.IV.IV.IV.IV.IV.IV.IV.IV.k4@k4@Av&Av&ZQ.ZQ.ZQ.Bv&Bv&Bv&ZQ.ZQ.ZQ.ZQ.Av&&, &, ,0+kt*&s*=^@=^@wr*wr*+v=+v=&s*&s*&s*&s*&s*&s*&s*&s*=Z+dr=o!#^u=^u=m}+m}+m}+m}+^u=^u=^u=o!#dr=dr=dr=o!#o!#dr=dr=dr=dr=dr=dr==Z+=Z+=Z+=Z+l]#l]#l]#=Z+vu#N:*uG#*r=&r=&r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#S`%sX%sX%&r=*r=*r=uG#uG#*r=*r=*r=*r=*r=*r=*r=*r=&r=uG#N:*uG#&r=sX%*r=N:**r=*r=*r=*r=*r=*r=*r=*r=uG#sX%sX%uG#uG#sX%sX%uG#*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=CI#S`%&r=uG#N:*uG#&r=sX%.X+iM#l]#l]#&b=&b=l]#dr=o!#dr=dr==Z+=Z+dr=dr=o!#jM#5,+5,+5,+5,+5,+5,+5,+IV.mO#5,+$' $' 5,+mO#IV.+y&.y&)A& ==.==.==.==.==3P 3P 3P .==.== == == ==&, Av&ZQ.Av&{h&>S%~h&0, 0, %' %' 0, &, {h&{h&ZQ.cl..== ==.==cl.cl.3P ==h%=_b+cl..== ==%z&", "Hu+Hu+Hu+8v.8v.8v.8v.8v.#9.#9.8v.8v.#9.#9.8v.8v.8v.8v.Hu+PI.cp.|5+w7+cp.cp.cp.#9.#9.PI.PI.PI.Hu+PI.#9.cp.cp.cp.cp.#9.Hu+PI.#9.cp.cp.cp.cp.#9.cp.[3+[3+cp.PI.PI.cp.w7+cp.cp.cp.cp.cp.cp.cp.{t.`^ 0Y+@~.!W+0Y+' .!W+NQ.NQ.NQ.NQ.NQ.NQ.NQ.NQ.ph#pD&N7.M7.M7.M7.%0+%0+%0+M7.$B#@9.%0+_r+xX%_r+N7.$B#%0+M7.M7.M7.M7.%0+$B#@9.$B#M7.N7.N7.M7.$B#@9.%0+%0+%0+$B#$B#@9.@9.@9.@9.%0+%0+$B#eO@eO@$B#M7.$B#$B#$B#$B#$B#$B#$B#$B#@9.%0+M7.$B#eO@)Z%eO@$B#eO@eO@eO@eO@eO@eO@eO@eO@@9.@9.@9.@9.@9.@9.@9.@9.v4.0q.,H.,H.q3.,H.bp.bQ#,H.,H.q3.q3.q3.,H.:(+:(+%0+$B#eO@)Z%,X@,X@,X@,X@%0+$B#eO@@9.$B#$B#@9.)Z%eO@eO@eO@eO@eO@eO@eO@eO@$B#eO@)Z%eO@@9.$B#@9.)Z%@9.eO@eO@)Z%)Z%eO@eO@@9.DI#)Z%@9.@9.)Z%'Z%,X@)Z%bp.bp.bp.bp.bp.bp.bp.bp.bQ#+9.:(+:(++9.bQ#bp.,H.)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%bp.:(+:(+:(+:(+,H.,H.,H.bp.bp.bp.bp.bp.bp.bp.bp.b,+b,+o&=bQ#+9.bp.:(+:(+bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.:(+:(+bp.+9.bQ#o&=o&=+9.bp.+9.bQ#o&=bQ#bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+bQ#:(+:(++9.o&=bQ#+9.+9.o&=j(#j(#o&=+9.+9.bQ#o&=o&=o&=o&=o&=o&=o&=o&=t4.t4.t4.t4.t4.t4.t4.t4.:^+:^+:^+D6.D6.t4.t4.t4.o&=o&=o&=o&=o&=o&=o&=o&=+9.o&=j(#b,+o&=bQ#b,+Q+&bp.:(+q3.:(++9.bQ#+9.:(+bp.bp.bp.bp.bp.bp.bp.p3.M|@9M.X+-Y];Z];`];tq@56-vW++i-4G@Gc `( V];g_ q3&f0&31&{_#C`+=)#b< td#td#m| 46 bP@RT@RT@@A@/7 ;8 (7 Y:@+~ t! +~ t! r[@rG rG rG sG tG -! -E -E }g &E &E &E &E &E &E &E &E u1$u1$u1$Nt%u1$&E Kv Kv Kv &E &E u1$u1$&E &E Kv vR@vR@vR@vR@vR@vR@vR@vR@rG rG >b@>b@r[@r[@X:@X:@rG rG >b@r[@r[@X:@t! t! _|@(|@(|@/|@^|@^|@@~ @~ WA @~ /|@_|@_|@(|@/|@^|@/|@/|@^|@^|@^|@@~ @~ @~ ^|@^|@@~ WA YA 1f 1f kI@ew f1#e1#d1#d1#d1#d1#e1#]M ]M ]M ]M ]M ]M ]M ]M 6q# t#SJ#OH#bj#/M d1#/M MH#LH#SJ#LH#O8#zg#O8#LH#OH#SJ#OH# t#]M d1#]M bj#LH#MH#O8#zg#O8#LH#OH#vg#SJ#OH#OH#OH#vg#vg# t# t# t#6q#/M /M 6q#6q#/M e1#e1#e1#d1#d1#/M /M /M /M /M /M /M /M ]M ]M ]M ]M +W@+W@+W@+W@))#!)#QT@B_#kI@1f WA ^|@(|@_|@:|@:|@$4@Eu &E &E Kv Kv u1$GJ%u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$&E &E vR@$4@$4@<|@[|@:|@_|@_|@+~ W:@W:@t! X:@t! Y:@(7 ;! (7 O9 +L@+L@.9 bP@[`@Cv@j$#Z=#ir#Ut&tq=5N=(X%(X%(X%^T#S2*k`&0p=SE R---+-p=-a*- ^;.^;q_*H9-/e*s7-iC&]#*Yo@6J.+^;+T+'Z+n3.h;#h;#v5.o3.v5.h;#.9.sQ@n3.o3.v5.h;#<(+<(+sQ@N:**r=sX%&r=*r=uG#&r=S`%N:*vu#vu#vu#;Z+;Z+fW=fW=~U.6w=;Z+N:*N:*vu#;Z+fW=sX%N:*vu#*r=uG#;Z+vu#&r=N:*uG#*r=&r=sX%sX%&r=&r=&r=&r=&r=&r=*r=*r=*r=*r=&r=&r=*r=*r=*r=*r=uG#uG#sX%sX%sX%sX%sX%sX%sX%sX%uG#&r=sX%&r=*r=uG#*r=sX%*r=*r=*r=*r=*r=*r=*r=*r=N:**r=&r=*r=N:*N:*uG#&r=&r=&r=&r=&r=&r=&r=&r=&r=S`%sX%sX%*r=uG#N:*vu#vu#uG#uG#uG#uG#uG#uG#uG#uG#o!#o!#o!#o!#o!#o!#o!#o!#o!#o!#^u=^u=m}+m}+m}+xE#p2@j(+j(+j(+IV.IV.IV.IV.j(+j(+p2@p2@p2@j(+k4@k4@Av&Av&Av&Av&Av&ZQ.ZQ.ZQ.Bv&Bv&Bv&Bv&ZQ.Av&0, >0+VD@xr*&s*=^@wr*+v=#x+#x+&s*&s*&s*&s*&s*&s*&s*&s*dr=o!#^u=m}+m}+m}+^u=^u=o!#o!#o!#o!#o!#o!#o!#o!#=Z+=Z+dr=dr=o!#^u=^u=^u==Z+o!#^u=o!#l]#&b=l]#dr=N:*uG#*r=&r=&r=&r=&r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#sX%sX%sX%&r=&r=&r=&r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#*r=sX%sX%*r=vu#*r=*r=*r=*r=*r=*r=*r=*r=uG#sX%sX%uG#uG#sX%sX%uG#*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=S`%S`%sX%&r=*r=*r=&r=&r=yE#&b==Z+=Z+l]#l]#dr=^u=o!#dr=dr==Z+=Z+dr=dr=o!#mO#mO#mO#jM#jM#5,+5,+5,+p2@k4@5,+SO+SO+$' jM#IV..y&%z&)A& ==.==.==.== ==cl.cl.3P .== ==)A&)A&%z&&, ZQ.Bv&ZQ.&, 0, &, ZQ.ZQ.~h&%' 0, Av&0, 0, Av&PN.3P ==.==cl.PN.3P .==_b+PN.3P ==%z&.y&", "8v.8v.8v.Hu+Hu+Hu+Hu+9, PI.PI.9, 9, PI.PI.9, Hu+8v.8v.VW.8v.PI.#9.cp.cp.cp.cp.#9.#9.PI.PI.PI.#9.PI.PI.PI.PI.#9.cp.[3+8v.Hu+#9.cp.[3+cp.#9.#9.#9.[3+|5+[3+PI.PI.cp.w7+cp.cp.cp.cp.cp.cp.cp.{t.U/ )W+{b+)W+U/ `^ U/ )W+ph#ph#ph#ph#ph#ph#ph#ph#pD&pD&Zl@Zl@Zl@l5+l5+l5+pD&l5+^n#$y#Zl@pD&Zl@l5+M7.M7.%0+%0+%0+%0+M7.M7.$B#%0+M7.N7.N7.M7.%0+$B#%0+%0+%0+%0+$B#$B#@9.@9.@9.$B#$B#eO@,X@,X@@9.M7.$B#$B#$B#$B#$B#$B#$B#$B#@9.%0+M7.$B#eO@)Z%eO@$B#)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%@9.@9.@9.@9.@9.@9.@9.@9.0q.,H.:(+:(+q3.0q.,H.:(+:(+:(+,H.q3.q3.q3.,H.,H.%0+$B#eO@)Z%)Z%eO@@9.$B#N7.$B#eO@eO@$B#%0+eO@,X@eO@eO@eO@eO@eO@eO@eO@eO@@9.)Z%'Z%,X@@9.$B#eO@,X@$B#@9.)Z%,X@,X@)Z%@9.$B#DI#)Z%@9.@9.)Z%'Z%,X@)Z%bp.bp.bp.bp.bp.bp.bp.bp.+9.:(+,H.:(++9.bQ#+9.bp.)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%:(+:(+bp.bp.bp.bp.+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#bQ#bQ#+9.+9.+9.+9.bp.bp.bp.bp.bp.bp.bp.bp.bQ#+9.+9.+9.+9.bQ#o&=b,+o&=+9.bp.+9.bQ#o&=bQ#bp.o&=o&=o&=o&=o&=o&=o&=o&=bp.bp.bp.bp.bp.bp.bp.bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#j(#bQ#:(+:(++9.o&=bQ#bQ#bQ#b,+Q+&j(#bQ#+9.+9.bQ#+9.+9.+9.+9.+9.+9.+9.+9.t4.t4.t4.t4.t4.t4.t4.t4.:^+:^+:^+:^+D6.D6.t4.t4.o&=o&=o&=o&=o&=o&=o&=o&=+9.bQ#o&=bQ#bp.:(+bp.bQ#+9.:(+,H.bp.bQ#o&=bQ#+9.bp.bp.bp.bp.bp.bp.bp.p3.g6@1P*'X+@^;b%;#^;R5.46-6o-86+3h=q[@`!@Z-+ _ $^;Aj&zj&0j#2^#=)#b< .<#.<#m| 46 uR@bP@bP@RT@a7#;8 (7 ;! W:@+~ W:@+~ r[@sG sG sG tG -! -! -E }g }g u1$&E &E &E &E &E &E Kv &E &E u1$u1$&E Kv Eu vR@Eu Kv u1$Nt%Nt%u1$Kv Eu $4@$4@$4@$4@$4@$4@$4@$4@rG rG >b@>b@r[@r[@X:@X:@r[@r[@>b@>b@>b@r[@r[@X:@^|@^|@^|@^|@@~ @~ @~ @~ WA @~ /|@_|@_|@(|@/|@^|@/|@/|@^|@^|@^|@@~ @~ @~ @~ @~ WA WA YA a~ a~ a~ ew f1#d1#/M ]M /M d1#e1#]M ]M 6q#6q#bj# t#vg#vg#vg#OH#SJ#vg#6q#/M ]M 6q#O8#LH#SJ#MH#zg#Dd#zg#O8#zg#zg#zg#LH# t#bj# t#OH#OH#LH#MH#zg#O8#LH#OH# t#OH#OH#vg#vg# t# t# t#bj#bj#]M /M /M ]M 6q#/M e1#ew e1#/M 6q#bj#6q#/M d1#e1#d1#d1#/M ]M 6q#6q#bj#+W@+W@+W@+W@))#QT@B_#')#WA @~ @~ ^|@(|@:|@<|@vR@$4@Eu &E &E Kv Kv u1$*L%u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$&E &E $4@$4@<|@[|@:|@:|@_|@_|@W:@W:@W:@t! X:@t! ;! /d@;! /d@+L@.9 .9 @A@uR@b.#Y=#Z=#P~#O~#u_$qR#5N=(X%^T#^T#S2*0Q=T8 O}*R--.6*B-.|!- ^;Et&O];O];q7-H9-`4-/e*kR&Qi@ex.ex.6J.k3..9.<(+sQ@h;#h;#sQ@<(+.9.):.<(+n3.n3.<(+):.):.):.uG#sX%S`%sX%uG#N:*uG#sX%vu#vu#vu#;Z+;Z+fW=fW=fW=tk-6w=;Z+N:*uG#N:*;Z+6w=w{@*r=N:**r=*r=vu#vu#sX%;Z+vu#uG#&r=S`%S`%S`%sX%sX%sX%&r=&r=*r=*r=uG#uG#*r=*r=&r=&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%uG#&r=sX%&r=*r=uG#*r=sX%*r=*r=*r=*r=*r=*r=*r=*r=N:**r=&r=*r=N:*N:*uG#&r=sX%sX%&r=*r=*r=uG#N:*N:*N:*N:*uG#uG#uG#uG#uG#uG#*r=*r=*r=*r=*r=*r=*r=*r==Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+dr=dr=dr=o!#o!#^u=^u=^u=jM#jM#mO#k4@IV.j(+p2@p2@p2@p2@k(+%u.k(+p2@IV.k4@Av&Av&Av&&, &, &, &, &, Bv&Bv&B9.B9.Bv&Av&0, >0+(-==^@=^@=^@wr*wr*wr*wr*&s*&s*&s*&s*&s*&s*&s*&s*o!#^u=m}+xE#xE#m}+o!#dr==Z+=Z+dr=o!#^u=^u=m}+m}+dr=dr=dr=o!#o!#^u=^u=^u=dr=^u=xE#^u==Z+&b==Z+o!#N:*uG#*r=&r=sX%&r=&r=&r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#&r=&r=&r=&r=sX%sX%sX%sX%*r=*r=*r=*r=*r=*r=*r=*r=&r=*r=*r=sX%CI#CI#&r=N:**r=*r=*r=*r=*r=*r=*r=*r=uG#sX%sX%uG#uG#sX%sX%uG#*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%S`%S`%sX%&r=*r=uG#yE#&b=dr=dr==Z+=Z+o!#m}+o!#dr=dr==Z+=Z+dr=dr=o!#k4@k4@k4@mO#mO#jM#jM#jM#jM#5,+$' $' $' 5,+mO#k4@{h&0, &, &, Av&&, &, 0, &, &, &, &, &, &, &, &, 0, Av&Bv&ZQ.Av&&, ZQ.B9.4p=0, >S%0, Av&0, 0, Av&Bv&Av&0, &, ZQ.Bv&Av&&, Av&&, 0, {h&~h&{h&", "VW.VW.8v.Hu+PI.PI.PI.G6.Hu+Hu+G6.G6.Hu+Hu+G6.#9.PI.8v.VW.9, VW.8v.Hu+[3+cp.cp.#9.#9.PI.PI.Hu+cp.#9.Hu+Hu+Hu+#9.[3+|5+8v.Hu+#9.[3+[3+cp.#9.PI.#9.[3+|5+[3+PI.Hu+cp.w7+cp.cp.cp.cp.cp.cp.cp.cp.j}+{b+ph#)W+U/ 4!.`^ 21.ph#ph#ph#ph#ph#ph#ph#ph#pD&pD&Zl@Zl@Zl@l5+l5+l5+pD&l5+^n#^n#$y#l5+l5+^n#_r+N7.%0+$B#$B#%0+N7._r+$B#%0+N7._r+_r+N7.%0+$B#M7.%0+%0+%0+$B#$B#@9.@9.eO@@9.@9.)Z%'Z%'Z%eO@%0+$B#$B#$B#$B#$B#$B#$B#$B#@9.%0+M7.$B#eO@)Z%eO@$B#eO@eO@eO@eO@eO@eO@eO@eO@@9.@9.@9.@9.@9.@9.@9.@9.:(+bp.+9.:(+0q.<3+<3+q3.+9.bp.,H.q3.0q.0q.q3.q3.@9.eO@)Z%)Z%eO@$B#M7.N7.N7.$B#eO@eO@$B#%0+eO@'Z%eO@eO@eO@eO@eO@eO@eO@eO@@9.,X@DI#'Z%eO@@9.)Z%DI#$B#@9.)Z%,X@,X@)Z%@9.$B#DI#)Z%@9.@9.)Z%'Z%,X@)Z%bp.bp.bp.bp.bp.bp.bp.bp.bp.,H.q3.:(+bQ#o&=bQ#+9.)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%bp.bp.bp.+9.bQ#bQ#o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#:(+bp.bp.+9.bQ#o&=o&=b,+bp.bp.bp.bp.bp.bp.bp.bp.o&=bQ#bQ#bQ#bQ#o&=b,+j(#o&=+9.bp.+9.bQ#o&=bQ#bp.o&=o&=o&=o&=o&=o&=o&=o&=bp.bp.bp.bp.bp.bp.bp.bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#j(#bQ#:(+:(++9.bQ#o&=bQ#bQ#b,+Q+&j(#bQ#bp.+9.bQ#bp.bp.bp.bp.bp.bp.bp.bp.t4.t4.t4.t4.t4.t4.t4.t4.p3.:^+:^+:^+D6.D6.t4.t4.o&=o&=o&=o&=o&=o&=o&=o&=:(++9.bQ#bp.,H.0q.q3.:(++9.bp.:(+bp.o&=b,+o&=bQ#bp.bp.bp.bp.bp.bp.bp.p3.n4@wH.WO+%^;)!=#^;)1-Z,;@; m.#7|+{4+iB s5&P& &^;1l&ik@Cg 2^#=)#ud#Sk hr#m| 46 uR@bP@bP@RT@a7#;8 (7 ;! W:@W:@W:@+~ r[@sG sG tG tG -! -E }g *E *E u1$u1$u1$&E &E Kv Kv Kv Kv &E &E &E Kv Eu vR@$4@Eu Kv u1$Nt%Nt%u1$Kv Eu [|@<|@<|@<|@<|@<|@<|@<|@rG rG >b@>b@r[@r[@X:@X:@X:@r[@r[@>b@>b@>b@>b@r[@WA WA WA WA @~ @~ @~ @~ WA @~ /|@_|@_|@(|@/|@^|@/|@/|@^|@^|@^|@@~ @~ @~ WA WA WA YA YA YA YA YA ew f1#d1#]M ]M ]M d1#d1#]M ]M 6q#bj#vg#OH#SJ#LH#vg#OH#OH# t#6q#]M bj#vg#O8#LH#LH#MH#Dd#;6#Dd#O8#Zo@Z+*Zo@zg#SJ#OH#OH#LH# t#OH#LH#O8#MH#LH#vg# t#OH#vg#vg#vg# t# t#bj#bj#bj#]M d1#/M ]M 6q#/M e1#dw e1#]M t#vg#bj#/M e1#f1#e1#d1#/M ]M 6q#bj# t#+W@+W@+W@+W@))#QT@')#kI@/|@/|@^|@^|@(|@[|@vR@Kv $4@Eu &E &E Kv &E Nt%*L%u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$&E &E $4@$4@<|@[|@:|@_|@_|@(|@Y:@Y:@W:@t! X:@t! ;! 9 ]|@/d@+L@.9 .9 @A@uR@UE@Z=#VE@ir#0u#u_$qR#5N=(X%^T#(p=h_*+6*s|*[!-GA=[C |!-*^;y~-y~-s^-s^-q7-`4-de-p(*O~;e6@[^+r4.[^+It&n3.n3.sQ@S%>S%~h&0, ", "Hu+VW.8v.Hu+PI.8v.VW.8v.8v.8v.8v.8v.8v.8v.8v.#9.Hu+8v.Hu+#9.cp.PI.8v.[3+[3+cp.#9.#9.PI.Hu+Hu+8v.8v.Hu+Hu+PI.#9.#9.#9.PI.#9.cp.cp.cp.#9.PI.PI.PI.#9.cp.[3+[3+[3+[3+cp.cp.cp.cp.cp.cp.cp.cp.cp.{t.{t.{t.j}+j}+l#@l#@l#@l#@aq.bv#bv#(s.aq.{t.aq.4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&$y#@9.@9.eO@eO@eO@eO@)Z%)Z%$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#,X@,X@)Z%eO@eO@@9.$B#$B#$B#eO@eO@M7.x5.O7.$B#p!#N7.M7.%0+$B#@9.)Z%,X@,X@@9.@9.@9.@9.@9.@9.@9.@9.$B#@9.eO@@9.M7.N7.M7.%0+:(+:(+,H.,H.,H.q3.q3.q3.,H.:(+:(+:(+,H.q3.0q.<3+N7.$B#@9.@9.$B#$B#eO@,X@@9.%0+%0+@9.,X@'Z%'Z%)Z%eO@eO@eO@eO@eO@eO@eO@eO@@9.eO@)Z%)Z%@9.@9.eO@)Z%eO@eO@eO@eO@eO@eO@eO@eO@'Z%,X@eO@@9.$B#$B#@9.eO@q3.q3.,H.:(+:(+,H.q3.q3.bQ#+9.bp.:(+:(+bp.bp.+9.@9.@9.eO@eO@eO@eO@)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%bp.bp.bp.:(+:(+,H.,H.,H.q3.,H.,H.:(+:(+bp.bp.+9.bp.:(+q3.,H.bp.+9.:(+,H.:(+:(+bp.bp.bp.+9.+9.+9.,H.:(+:(+bp.+9.+9.bQ#bQ#bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.bQ#o&=j(#j(#Q+&bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.+9.o&=+9.bp.bQ#b,+j(#b,+bQ#+9.+9.bQ#bQ#o&=b,+b,+j(#h;#n3.v5.o3.D6.p3.w5.u4.t4.t4.t4.D6.:^+p3.p3.p3.b,+o&=bQ#bQ#bQ#bQ#o&=b,+Q+&b,+bQ#bQ#o&=o&=+9.:(++9.+9.bp.:(+:(+,H.q3.q3.j(#o&=+9.bp.+9.bp.,H.tF.n4@OK.CM+%^;mX.){;J_-Wx-Qj-a5 #($$; A5 5l&P& =^;P8 _{+Hh 2^#b< =)#$[ Sk YD#M1 [`@bP@bP@bP@'m#a7#+L@]|@W:@Y:@/d@/d@W:@rG r[@>b@rG tG }g *E i0$1C%&E &E u1$u1$u1$Nt%Nt%Nt%&E &E &E &E &E &E &E &E Nt%u1$&E Kv Eu vR@$4@$4@vR@vR@vR@vR@vR@vR@vR@vR@-! -! tG sG sG rG >b@>b@X:@X:@X:@X:@X:@X:@X:@X:@/|@/|@^|@^|@@~ @~ @~ @~ /|@/|@/|@(|@_|@_|@:|@:|@(|@/|@/|@^|@^|@/|@/|@(|@_|@^|@a~ 1f a~ YA a~ 1f xy dw f1#e1#d1#/M /M /M vg# t#bj#bj# t#OH#LH#O8#bj# t# t# t# t#bj#6q#]M t#OH#LH#LH#SJ#SJ#O8#Dd#Zo@;6#O8#MH#LH#MH#O8#zg#OH#OH#OH#OH#OH#vg#vg# t#bj#vg#SJ#OH#bj#/M /M ]M bj#]M d1#f1#ew f1#d1#]M vg#bj#/M f1#ew f1#e1#d1#]M ]M ]M ]M ]M ]M ]M ]M w! +W@w! XC@XC@))#1f ^|@^|@^|@/|@_|@:|@<|@$4@$4@vR@Kv u1$u1$Kv Kv u1$GJ%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$Kv Eu vR@_|@_|@_|@(|@(|@(|@/|@/|@Y:@W:@+~ t! W:@]|@ 9 +L@ 9 O9 .9 RT@uR@b.#i@#i@#P~#ir#ir#O~#Ut&tq=5N=^T#pR#(p=+6*0p=yD SE R--[C a*-ix ^;hC&-^;O];tk*r7-l`&p#-w5.gX. :**G.u5. :*v5.h;#<(+sQ@h;#h;#sQ@.9..9..9.):.):. J> xE*3<@1.+..=xE*&, 0, ~h&>S%>S%~h&0, &, ~h&0, &, 0, >S%X@$%' >S%x{ 17*U*@zi.y*$y*$zi.3<@J> J> J> 17*xE*xE*", "PI.Hu+PI.#9.cp.#9.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+cp.PI.Hu+Hu+PI.#9.Hu+VW.cp.cp.#9.#9.#9.#9.PI.PI.8v.Hu+Hu+Hu+PI.#9.#9.#9.PI.#9.cp.cp.cp.#9.PI.PI.PI.#9.cp.[3+[3+[3+[3+cp.cp.cp.cp.cp.cp.cp.cp.cp.{t.{t.{t.j}+j}+j}+l#@l#@l#@{t.ym.ym.aq.{t.{t.aq.4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&^n#@9.@9.$B#%0+%0+M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#%0+%0+%0+%0+eO@)Z%$B#xX%xX%$B#DI#%0+%0+$B#$B#@9.eO@)Z%)Z%@9.@9.@9.@9.@9.@9.@9.@9.%0+$B#eO@@9.M7.N7.%0+$B#:(+:(+,H.,H.,H.q3.q3.q3.,H.:(+:(+:(+,H.q3.0q.<3+%0+$B#eO@eO@$B#%0+@9.)Z%$B#%0+M7.$B#)Z%'Z%,X@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@)Z%eO@eO@@9.eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@'Z%,X@eO@@9.$B#@9.@9.eO@q3.,H.:(+:(+:(+:(+,H.q3.+9.bp.bp.:(+:(+bp.+9.bQ#eO@eO@eO@eO@eO@eO@eO@eO@)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%bp.bp.bp.:(+:(+,H.,H.,H.,H.,H.,H.:(+bp.bp.bp.+9.bp.:(+q3.,H.bp.+9.:(+,H.:(+:(+bp.bp.bp.+9.+9.+9.bp.bp.bp.bp.bp.+9.+9.+9.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.bQ#bQ#o&=b,+b,+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.+9.bQ#bQ#bQ#bQ#o&=+9.bp.bQ#b,+j(#b,+bQ#b,+b,+b,+o&=o&=o&=o&=o&=p3.p3.:^+D6.t4.o3.v5.v5.D6.D6.D6.D6.:^+:^+:^+:^+bQ#bQ#+9.bp.bp.+9.bQ#bQ#o&=+9.bp.+9.o&=b,+o&=+9.bp.bp.bp.:(+:(+:(+:(+,H.b,+bQ#bp.bp.+9.+9.:(+N7+c3+wH.d@@@^;P|*k!;;^;oX->^;.j-E%@]&$(|$gk&,^;Xb@VB@zc zj&mp /*@b< td#{o ~1 m| [`@bP@bP@bP@'m#a7#+L@(7 W:@Y:@/d@(7 +~ rG r[@>b@rG tG -E *E i0$i0$&E &E &E u1$u1$Nt%Nt%Nt%&E &E &E &E &E &E &E &E u1$u1$&E Kv Eu vR@vR@$4@vR@vR@vR@vR@vR@vR@vR@vR@-! -! tG sG sG rG >b@>b@X:@X:@X:@X:@X:@X:@X:@X:@(|@(|@/|@/|@^|@^|@^|@@~ /|@/|@/|@(|@(|@_|@_|@_|@(|@/|@^|@^|@^|@^|@/|@(|@(|@@~ a~ 1f 1f a~ 1f kI@ew ew e1#d1#/M /M /M d1# t#bj#6q#6q#bj#vg#SJ#MH#bj#bj#bj#bj#bj#6q#]M ]M 6q#vg#SJ#LH#SJ#OH#LH#O8#;6#;6#zg#O8#O8#O8#O8#O8#OH#OH#OH#OH#vg#bj#]M /M ]M t#vg# t#6q#/M /M ]M bj#6q#d1#f1#f1#e1#d1#]M OH# t#]M d1#e1#e1#/M ]M ]M ]M ]M ]M ]M ]M ]M ]M XC@+W@+W@+W@+W@!)#1f @~ ^|@/|@(|@_|@[|@<|@$4@vR@Eu &E u1$u1$Kv Kv u1$GJ%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$&E Kv Eu vR@_|@_|@_|@(|@(|@/|@/|@/|@Y:@W:@+~ +~ W:@]|@ 9 +L@O9 O9 .9 RT@[`@UE@i@#Cv@P~#ir#O~#Ut&85*qR#5N=(X%(X%h_*t_$yD SE R--p7-wj&Z;.B-.,t Et&4$-t^-fs-GN#5Z=Gg@rQ@M:*l3.C6.C6.u5.v5.h;#<(+sQ@h;#h;#sQ@.9.sQ@sQ@<(+<(+<(+.9..9..9.&r=&r=&r=&r=*r=*r=uG#uG#uG#uG#N:*N:*N:*N:*vu#vu#uG#uG#uG#uG#uG#*r=*r=*r=&r=&r=&r=&r=*r=*r=*r=*r=sX%&r=*r=*r=*r=*r=&r=sX%&r=&r=&r=&r=&r=&r=&r=&r=sX%sX%&r=*r=*r=uG#N:*N:*S`%sX%*r=uG#uG#*r=sX%S`%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%&r=uG#N:*N:*N:*N:*uG#uG#*r=*r=*r=&r=N:*uG#*r=&r=&r=*r=uG#N:*N:*uG#*r=&r=&r=*r=uG#N:*uG#uG#uG#uG#uG#*r=*r=*r=dr=dr=dr=dr=dr=dr=dr=dr=o!#o!#o!#o!#o!#o!#o!#o!#k4@k4@k4@k4@k4@IV.j(+j(+IV.IV.IV.k4@k4@mO#mO#mO#Bv&Av&&, Av&Bv&Bv&ZQ.&, ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.6g.sy=#x+#x+#x+#x++v=wr*wr*#x+#x++v=+v=+v=wr*wr*wr*m}+m}+^u=dr=l]#=Z+^u=fX.m}+o!#dr=dr=^u=m}+^u=dr=dr=dr=dr=dr=o!#o!#o!#o!#dr=o!#^u=^u=^u=o!#=Z+l]#fW=N:*&r=&r=uG#N:*N:*uG#*r=*r=*r=*r=*r=*r=*r=*r=&r=*r=uG#uG#*r=&r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#*r=uG#uG#N:*N:*uG#*r=&r=*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=&r=&r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=uG#*r=&r=sX%sX%&r=*r=uG#*r=*r=*r=*r=*r=*r=*r=*r=sX%&r=*r=uG#uG#*r=&r=sX%*r=*r=*r=*r=*r=*r=*r=*r=l]#l]#l]#=Z+=Z+=Z+dr=dr==Z+dr=^u=m}+m}+^u=dr==Z+qK+qK+$' $' $' 5,+5,+5,+$' 5,+5,+5,+5,+jM#jM#jM#U*@U*@U*@U*@xE*xE*xE*xE*U*@xE*17*xE*..=..=xE*zi.Av&&, {h&~h&~h&{h&&, Av&0, &, &, 0, >S%%' ~h&0, zi.xE*3<@U*@nh.x{ 17*1.+17*17*17*xE*U*@U*@", "cp.PI.#9.[3+|5+[3+#9.PI.PI.PI.PI.PI.PI.PI.PI.[3+#9.Hu+Hu+PI.#9.Hu+VW.PI.PI.#9.#9.#9.#9.cp.cp.Hu+Hu+Hu+PI.PI.PI.#9.#9.PI.PI.#9.cp.cp.cp.#9.PI.PI.#9.cp.[3+[3+[3+[3+cp.PI.PI.PI.PI.PI.PI.PI.PI.[3+[3+cp.cp.#9.#9.#9.PI.Hu+cp.|5+|5+cp.PI.#9.{t.4B&J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.4B&^n#@9.$B#M7.N7._r+xX%O7.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#N7.N7.N7.N7.M7.M7.M7.M7.N7.@9.)Z%eO@M7.N7.%0+)Z%@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.N7.%0+@9.$B#%0+M7.$B#eO@:(+:(+,H.,H.,H.q3.q3.q3.,H.,H.:(+:(+:(+,H.q3.0q.$B#eO@)Z%eO@$B#%0+$B#@9.$B#M7.N7.%0+eO@)Z%eO@@9.eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@,X@)Z%eO@@9.@9.@9.eO@eO@:(+:(+bp.+9.+9.bp.:(+:(+:(+:(+:(+:(+bp.+9.bQ#o&=,X@,X@)Z%eO@eO@@9.$B#$B#)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%bp.bp.bp.:(+:(+,H.,H.,H.:(+:(+:(+:(+bp.bp.bp.+9.bp.:(+q3.,H.bp.+9.:(+,H.:(+:(+bp.bp.bp.+9.+9.+9.+9.+9.+9.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bp.bp.+9.+9.bQ#bQ#o&=o&=o&=+9.bp.bQ#b,+j(#b,+bQ#Q+&Q+&j(#b,+o&=o&=bQ#bQ#u4.w5.p3.D6.o3.v5.h;#h;#:^+:^+:^+:^+D6.D6.D6.D6.+9.+9.bp.:(+:(+bp.+9.+9.bp.:(+,H.bp.bQ#b,+o&=bQ#:(+:(+:(+:(+bp.bp.bp.bp.bQ#bp.:(+:(++9.bQ#bp.w5.c3+=G.]0+@^;P|*`];;^;q4*-h+#x-#; (&$3X=N#@'^;kM#)^;!^;yo UE&L0*ud#.<#R: ~1 m| b.#uR@uR@uR@b4#k[#+L@/d@;! ;! (7 (7 +~ >b@r[@>b@rG tG -E *E =E i0$Kv &E &E &E u1$u1$Nt%Nt%&E &E &E &E &E &E &E &E u1$u1$&E Kv Eu Eu vR@vR@vR@vR@vR@vR@vR@vR@vR@vR@-! -! tG sG sG rG >b@>b@t! t! t! t! t! t! t! t! _|@_|@_|@(|@(|@/|@/|@/|@/|@/|@/|@/|@(|@(|@(|@_|@/|@/|@^|@@~ @~ ^|@/|@/|@^|@YA 1f kI@1f a~ kI@')#e1#e1#d1#/M /M /M d1#d1#6q#]M /M /M ]M bj#vg#OH#bj#bj#bj#6q#6q#]M ]M ]M /M bj#SJ#LH#SJ#OH#OH#SJ#Dd#Dd#;6#;6#Dd#Dd#zg#O8#LH#MH#MH#MH#SJ# t#]M d1#/M bj#vg# t#6q#/M ]M 6q#bj#6q#/M e1#e1#e1#/M ]M OH#vg#6q#/M d1#/M ]M 6q#]M ]M ]M ]M ]M ]M ]M ]M {Y@+W@!)#QT@QT@B_#1f WA /|@(|@_|@:|@[|@$4@vR@vR@Eu &E Nt%u1$&E &E u1$GJ%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$&E Eu vR@$4@_|@_|@(|@(|@/|@/|@/|@^|@Y:@W:@+~ W:@Y:@(7 9 +L@O9 +L@@A@bP@b.#i@#j$#C&#VE@ir#0u#tq=pR#5N=5N=5N=^T#0Q=Js&[!-GA=%1*Wy=R2*&]-~^;Et&|!-q_*f2*>+-U8 {^;=>-1w.v5.k3.k3.}o=`8.v5.h;#<(+sQ@h;#h;#sQ@.9.n3.n3.n3.h;#h;#sQ@sQ@sQ@&r=&r=&r=*r=*r=uG#uG#uG#vu#vu#N:*N:*N:*N:*uG#uG#*r=*r=*r=uG#uG#uG#N:*N:**r=*r=*r=*r=&r=&r=&r=&r=&r=sX%sX%S`%S`%sX%sX%&r=sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=&r=&r=&r=*r=*r=uG#uG#*r=*r=&r=&r=&r=&r=&r=&r=&r=&r=&r=*r=&r=S`%CI#S`%*r=vu#fW=N:*N:*uG#uG#*r=&r=&r=&r=N:*uG#*r=*r=*r=*r=uG#N:*N:*N:*uG#*r=*r=uG#N:*N:**r=*r=*r=uG#uG#uG#uG#uG#dr=dr=dr=dr=dr=dr=dr=dr=^u=^u=^u=^u=^u=^u=^u=^u=k4@k4@k4@IV.IV.j(+j(+j(+IV.IV.IV.IV.k4@k4@k4@mO#8P.Bv&Av&ZQ.B9.8P.Bv&ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.6g.=$@&u.'0+-$@'0+lh.#x+wr*#x+#x++v=+v=+v=wr*wr*wr*dr=o!#o!#=Z+&b=&b=dr=m}+m}+o!#dr=dr=^u=m}+^u=dr=dr=dr=dr=dr==Z+=Z+=Z+=Z+l]#l]#=Z+dr=o!#dr=dr==Z+;Z+N:**r=uG#vu#;Z+;Z+vu#uG#uG#uG#uG#uG#uG#uG#uG#vu#uG#&r=*r=vu#;Z+N:*&r=uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*N:*uG#*r=&r=sX%*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=&r=&r=*r=*r=*r=*r=*r=*r=*r=*r=uG#*r=&r=sX%sX%&r=*r=uG#*r=*r=*r=*r=*r=*r=*r=*r=sX%&r=*r=uG#uG#*r=&r=sX%uG#uG#uG#uG#uG#uG#uG#uG#l]#l]#l]#=Z+=Z+=Z+dr=dr=dr=dr=o!#^u=^u=o!#dr=dr= X+ X+ X+SO+SO+qK+qK+qK+jM#5,+5,+5,+$' $' qK+qK+..=[f.x{+x{+OP*23+23+US+[f.OP*23+23+OP*OP*';$$.@Av&&, &, 0, 0, &, &, Av&Av&Av&Av&0, >S%>S%0, ZQ.J> [f.u`.HV.OP*23+OP*u!=OP*OP*x{+x{+x{+[f.", "#9.PI.#9.[3+|5+[3+#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.Hu+8v.Hu+#9.cp.PI.Hu+Hu+Hu+PI.#9.#9.cp.[3+[3+Hu+Hu+PI.PI.PI.PI.PI.PI.Hu+PI.#9.cp.cp.cp.#9.#9.PI.#9.cp.[3+[3+[3+[3+cp.PI.PI.PI.PI.PI.PI.PI.PI.[3+[3+[3+cp.cp.#9.#9.#9.Hu+#9.[3+cp.PI.Hu+PI.{t.4B&J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.4B&$y#$B#%0+M7.N7._r+xX%xX%$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#_r+_r+_r+N7.M7.M7.%0+%0+N7.$B#)Z%,X@@9.%0+%0+@9.eO@eO@eO@@9.$B#$B#$B#%0+@9.@9.@9.@9.@9.@9.@9.@9._r+M7.$B#$B#%0+%0+@9.)Z%:(+:(+,H.,H.,H.q3.q3.q3.q3.,H.,H.:(+:(+,H.q3.0q.@9.)Z%,X@eO@%0+M7.%0+$B#%0+M7.N7.M7.@9.eO@@9.$B#eO@eO@eO@eO@eO@eO@eO@eO@)Z%eO@@9.@9.)Z%)Z%eO@@9.eO@eO@eO@eO@eO@eO@eO@eO@)Z%eO@eO@eO@eO@eO@eO@eO@:(+bp.+9.+9.+9.+9.bp.:(+,H.,H.,H.:(+bp.bQ#o&=b,+'Z%'Z%,X@)Z%@9.$B#%0+%0+)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%bp.bp.bp.:(+:(+,H.,H.,H.bp.bp.bp.bp.bp.bp.bp.bp.bp.:(+q3.,H.bp.+9.:(+,H.:(+:(+bp.bp.bp.+9.+9.+9.bQ#bQ#+9.+9.bp.:(+:(+,H.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.+9.+9.bp.bp.bp.bp.bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#:(+bp.bp.+9.bQ#o&=o&=b,+o&=+9.bp.bQ#b,+j(#b,+bQ#Q+&j(#j(#j(#b,+b,+o&=o&=o3.o3.t4.t4.t4.D6.D6.D6.p3.p3.p3.:^+D6.t4.t4.t4.bQ#+9.bp.bp.bp.bp.+9.bQ#bp.:(+,H.:(++9.o&=bQ#bp.,H.,H.:(+bp.bp.+9.bQ#bQ#bp.:(+,H.:(+bQ#o&=bQ#p3.J7.]U=]0+Jt&P|*U];2B-Y`=x -ge-Q[ Jd 3X=76+y0 ]^;|+ ^^;_{+9k&c< b< .<#R: $, XD#UE@[`@[`@[`@|c#'m#+L@ 9 ]|@]|@(7 ]|@+~ >b@>b@>b@rG tG -! }g *E *E Kv Kv &E &E &E u1$u1$u1$&E &E &E &E &E &E &E &E &E &E &E Kv Eu Eu vR@vR@vR@vR@vR@vR@vR@vR@vR@vR@-! -! tG sG sG rG >b@>b@t! t! t! t! t! t! t! t! [|@:|@:|@:|@_|@_|@(|@(|@/|@/|@/|@/|@/|@/|@(|@(|@/|@^|@^|@@~ @~ ^|@^|@/|@WA a~ kI@kI@1f 1f kI@B_#d1#/M /M ]M /M /M d1#e1#d1#d1#e1#f1#e1#/M bj# t#bj#6q#]M ]M /M /M /M /M d1#bj#SJ#LH#SJ#OH#OH#SJ#O8#zg#;6#Zo@Zo@;6#zg#O8#zg#Dd#;6#;6#zg#MH#SJ#vg#6q# t#OH#OH# t#bj#bj# t#bj#6q#/M d1#d1#d1#/M /M t#bj#6q#/M /M /M ]M ]M ]M ]M ]M ]M ]M ]M ]M ]M {Y@+W@B_#1f 1f 1f a~ YA (|@(|@_|@[|@<|@vR@Eu Eu Eu &E Nt%Nt%&E &E Nt%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$Kv Eu $4@<|@(|@(|@(|@/|@/|@/|@^|@^|@W:@W:@W:@Y:@;! (7 9 +L@+L@.9 RT@uR@UE@j$#Y=#Z=#VE@N~#u_$pR#^T#^T#(X%5N=(p=+6*yD GA=%1*Wy=v1*Lf*a*-/^;*^;(^;_^;;+-Pl&](-j(#wi.JD=D6.m3.u5.[(+s4.v5.h;#<(+sQ@h;#h;#sQ@.9.n3.n3.n3.h;#h;#sQ@sQ@sQ@&r=&r=*r=*r=uG#uG#N:*N:*;Z+;Z+vu#N:*N:*uG#*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#*r=&r=sX%sX%sX%uG#*r=sX%S`%S`%sX%*r=uG#sX%sX%sX%sX%sX%sX%sX%sX%*r=&r=&r=sX%sX%S`%S`%S`%*r=uG#uG#uG#uG#uG#uG#*r=N:*N:*N:*N:*N:*N:*N:*N:*vu#N:**r=sX%S`%sX%sX%&r=&r=&r=*r=*r=*r=*r=*r=*r=uG#uG#uG#*r=*r=uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*N:*&r=&r=*r=*r=uG#N:*N:*vu#dr=dr=dr=dr=dr=dr=dr=dr=^u=^u=^u=^u=^u=^u=^u=^u=jM#mO#mO#k4@IV.IV.IV.IV.IV.IV.IV.IV.IV.IV.k4@k4@4p=B9.Bv&Bv&8P.4p=8P.Bv&ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.6g.sy=lh.'0+-$@'0+lh.+v==^@#x+#x++v=+v=+v=wr*wr*wr*dr=o!#o!#dr=l]#l]#dr=m}+m}+o!#dr=dr=^u=m}+^u=dr=o!#dr=dr==Z+l]#l]#&b=&b=iM#&b=l]#=Z+=Z+dr=dr=dr=vu#uG#*r=uG#;Z+fW=fW=vu#N:*N:*N:*N:*N:*N:*N:*N:*vu#N:*uG#N:*N:*vu#N:*N:*uG#uG#uG#uG#uG#uG#uG#uG#vu#vu#vu#N:*uG#&r=sX%S`%*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#*r=&r=sX%sX%sX%*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=&r=&r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=*r=*r=*r=*r=&r=&r=N:*N:*N:*N:*N:*N:*N:*N:*l]#l]#l]#=Z+=Z+=Z+dr=dr=dr=dr=dr=o!#o!#dr=dr=dr= X+ X+ X+SO+SO+qK+qK+qK+jM#jM#jM#5,+5,+5,+5,+xu#3<@[f.x{+OP*23+US+';$';$OP*23+US+US+OP*OP*';$:{+Av&Av&Av&&, &, Av&Av&Av&ZQ.ZQ.Av&0, ~h&{h&Av&1.+J> x{+u`.u`.[f.OP*OP*x{+[f.[f.[f.[f.[f.[f.", "8v.VW.Hu+#9.[3+cp.PI.#9.#9.#9.#9.#9.#9.#9.#9.8v.VW.9, 8v.#9.[3+[3+#9.Hu+Hu+PI.#9.#9.cp.[3+[3+PI.PI.PI.PI.PI.PI.Hu+Hu+8v.Hu+#9.cp.cp.cp.cp.cp.PI.#9.cp.[3+[3+[3+[3+cp.PI.PI.PI.PI.PI.PI.PI.PI.|5+|5+[3+[3+cp.cp.#9.#9.PI.#9.[3+cp.PI.Hu+#9.aq.4B&J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.4B&l5+%0+%0+%0+%0+%0+%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#N7.N7.M7.%0+%0+$B#@9.@9.N7.$B#)Z%,X@)Z%@9.$B#$B#)Z%)Z%eO@@9.$B#$B#%0+%0+@9.@9.@9.@9.@9.@9.@9.@9._r+M7.$B#$B#%0+%0+@9.)Z%:(+:(+,H.,H.,H.q3.q3.q3.0q.q3.,H.:(+:(+,H.,H.q3.@9.)Z%,X@eO@%0+M7.%0+$B#$B#M7.N7.M7.@9.eO@@9.%0+eO@eO@eO@eO@eO@eO@eO@eO@,X@eO@$B#@9.)Z%,X@eO@$B#eO@eO@eO@eO@eO@eO@eO@eO@@9.eO@eO@eO@eO@eO@eO@eO@:(+bp.+9.+9.+9.+9.bp.:(+,H.,H.,H.:(+bp.bQ#o&=b,+'Z%'Z%,X@)Z%@9.$B#%0+%0+)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%bp.bp.bp.:(+:(+,H.,H.,H.+9.+9.+9.+9.bp.bp.bp.bp.bp.:(+q3.,H.bp.+9.:(+,H.:(+:(+bp.bp.bp.+9.+9.+9.bQ#bQ#+9.+9.bp.:(+:(+,H.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.+9.+9.bp.bp.bp.bp.bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bp.bp.+9.+9.bQ#bQ#o&=o&=o&=+9.bp.bQ#b,+j(#b,+bQ#bQ#o&=o&=b,+b,+j(#j(#j(#n3.n3.v5.t4.D6.:^+p3.w5.p3.p3.p3.:^+D6.t4.t4.t4.o&=o&=bQ#+9.+9.bQ#o&=o&=o&=+9.:(+:(++9.+9.:(+q3.:(+:(+:(+bp.+9.bQ#bQ#bQ#bp.,H.q3.:(+bQ#o&=bQ#:^+&o@WN.4I+:^;[D+P4.)1-@x-1o-]*+19 HI#pb#42$!< <^;-@ C'*[^;ik@c< |#$[ {o UE YD#i@#b.#b.#b.#.i#b4#.9 O9 /d@/d@(7 ;! +~ r[@>b@>b@rG sG -! -E }g }g Kv Kv Kv &E &E &E u1$u1$&E &E &E &E &E &E &E &E &E Kv Kv Kv Kv Eu Eu Eu vR@vR@vR@vR@vR@vR@vR@vR@-! -! tG sG sG rG >b@>b@t! t! t! t! t! t! t! t! [|@[|@[|@:|@:|@_|@_|@_|@/|@/|@/|@/|@/|@/|@^|@^|@^|@^|@@~ @~ @~ @~ ^|@^|@YA 1f kI@kI@a~ a~ kI@B_#d1#d1#/M /M /M d1#e1#f1#e1#f1#ew ew f1#d1#]M bj#bj#6q#/M d1#e1#d1#/M /M /M bj#SJ#LH#SJ#OH#SJ#LH#MH#O8#Dd#Zo@Zo@;6#zg#O8#O8#zg#zg#Dd#Dd#Dd#zg#zg#OH#LH#O8#MH#SJ#vg#vg#SJ#bj#6q#]M /M /M /M /M /M ]M ]M /M d1#d1#d1#d1#d1#]M ]M ]M ]M ]M ]M ]M ]M {Y@))#kI@YA YA a~ YA WA _|@_|@:|@<|@$4@Eu Kv Kv Kv u1$GJ%Nt%u1$&E Nt%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$&E Kv vR@<|@[|@(|@(|@/|@/|@/|@^|@^|@^|@W:@W:@Y:@;! ]|@/d@O9 +L@.9 @A@bP@b.#Cv@Y=#VE@P~#ir#O~#tq=(X%(p=(p=(p=^T#S2*s_$O}*[C wj&2X-yq-zq-x~-Et&}^;^6 m';R1*W+-<3+Vi.*r=h;#.9.}o=C6. 9.It&v5.h;#<(+sQ@h;#h;#sQ@.9.h;#h;#sQ@sQ@<(+<(+<(+.9.*r=*r=*r=uG#uG#N:*N:*N:*;Z+;Z+vu#N:*N:*uG#*r=*r=vu#vu#N:*uG#*r=&r=&r=sX%uG#uG#uG#*r=&r=sX%sX%sX%N:*uG#&r=sX%sX%&r=uG#N:*sX%sX%sX%sX%sX%sX%sX%sX%*r=*r=&r=&r=sX%S`%CI#CI#uG#uG#uG#*r=*r=uG#uG#uG#N:*N:*N:*N:*N:*N:*N:*N:**r=uG#uG#N:*uG#&r=S`%CI#CI#S`%S`%&r=*r=uG#N:*N:**r=uG#uG#uG#uG#uG#uG#*r=N:*N:*N:*N:*N:*N:*N:*N:*&r=&r=*r=*r=uG#N:*N:*vu#dr=dr=dr=dr=dr=dr=dr=dr=m}+m}+m}+m}+m}+m}+m}+m}+mO#k4@j(+p2@k(+p2@j(+j(+IV.IV.IV.IV.IV.IV.j(+j(+4p=B9.Bv&B9.4p=NA.8P.Bv&ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.6g.PB@+v=#x+lh.lh.+v==^@&s*#x+#x++v=+v=+v=wr*wr*wr*o!#m}+xE#m}+o!#dr=^u=xE#m}+o!#dr=dr=^u=m}+^u=dr=o!#dr=dr==Z+l]#l]#&b=&b=&b=&b=l]#l]#=Z+dr=dr=o!#uG#&r=&r=*r=vu#;Z+vu#uG#N:*N:*N:*N:*N:*N:*N:*N:*&r=vu#6w=;Z+*r=sX%uG#fW=uG#uG#uG#uG#uG#uG#uG#uG#vu#vu#vu#N:*uG#&r=sX%S`%*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#*r=&r=sX%sX%sX%*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=*r=*r=*r=*r=&r=&r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=&r=&r=*r=*r=N:*N:*N:*N:*N:*N:*N:*N:*l]#l]#l]#=Z+=Z+=Z+dr=dr=dr=dr=dr==Z+=Z+dr=dr=dr=SO+SO+qK+qK+$' $' $' 5,+5,+5,+jM#mO#k4@IV.j(+|;@..=[f.x{+OP*23+US+';$d #';$d #d #US+OP*x{+23+';$&, Av&Av&Av&Av&Av&Av&&, Av&ZQ.ZQ.&, {h&0, ZQ.`%@zi.23+[f.u!=x{+OP*23+23+[f.[f.[f.[f.[f.[f.", "9, G6.VW.PI.#9.PI.Hu+PI.PI.PI.PI.PI.PI.PI.PI.8v.VW.9, 8v.#9.[3+[3+#9.PI.PI.#9.#9.#9.#9.cp.cp.#9.#9.PI.PI.PI.Hu+Hu+Hu+8v.Hu+PI.cp.cp.[3+cp.cp.PI.#9.cp.[3+[3+[3+[3+cp.PI.PI.PI.PI.PI.PI.PI.PI.|5+|5+|5+[3+[3+cp.cp.cp.#9.cp.[3+cp.PI.PI.cp.(s.4B&J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.4B&l5+%0+$B#$B#@9.@9.@9.eO@$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#@9.@9.@9.%0+@9.eO@)Z%)Z%eO@@9.$B#eO@eO@eO@@9.$B#$B#%0+%0+@9.@9.@9.@9.@9.@9.@9.@9.N7.%0+@9.$B#%0+M7.$B#eO@:(+:(+,H.,H.,H.q3.q3.q3.0q.q3.,H.:(+:(+:(+,H.,H.$B#eO@)Z%eO@$B#%0+$B#@9.@9.$B#M7.%0+@9.eO@@9.%0+eO@eO@eO@eO@eO@eO@eO@eO@'Z%@9.%0+$B#,X@'Z%)Z%%0+eO@eO@eO@eO@eO@eO@eO@eO@$B#@9.eO@)Z%)Z%)Z%eO@eO@:(+:(+bp.+9.+9.bp.:(+:(+:(+:(+:(+:(+bp.+9.bQ#o&=,X@,X@)Z%eO@eO@@9.$B#$B#)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%bp.bp.bp.:(+:(+,H.,H.,H.bQ#bQ#+9.+9.+9.bp.bp.bp.bp.:(+q3.,H.bp.+9.:(+,H.:(+:(+bp.bp.bp.+9.+9.+9.+9.+9.+9.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.+9.o&=+9.bp.bQ#b,+j(#b,+bQ#bp.+9.+9.bQ#o&=b,+j(#j(#t4.t4.t4.t4.t4.t4.t4.t4.:^+:^+:^+:^+D6.D6.D6.D6.b,+o&=bQ#bQ#bQ#bQ#o&=b,+j(#o&=+9.bp.+9.+9.:(+q3.bp.bp.+9.+9.+9.+9.bQ#bQ#bp.,H.,H.:(+bQ#o&=bQ#p3.&o@Ev+WO+b@>b@rG sG tG -! -E -E Eu Eu Kv Kv &E &E &E u1$&E &E &E &E &E &E &E &E Kv Kv Kv Kv Kv Kv Kv Eu vR@vR@vR@vR@vR@vR@vR@vR@-! -! tG sG sG rG >b@>b@X:@X:@X:@X:@X:@X:@X:@X:@[|@:|@:|@:|@_|@_|@(|@(|@/|@/|@/|@/|@^|@^|@^|@@~ ^|@@~ @~ WA WA @~ @~ ^|@a~ 1f kI@a~ YA YA 1f ')#ew f1#e1#d1#d1#d1#e1#f1#f1#f1#ew dw ew e1#]M 6q#6q#]M d1#f1#f1#e1#d1#/M /M 6q# t#vg# t# t#OH#LH#LH#MH#O8#zg#zg#zg#zg#O8#MH#LH#OH#OH#SJ#MH#zg#;6#MH#zg#;6#zg#LH#OH#OH#SJ#6q#6q#6q#]M ]M ]M /M /M d1#d1#d1#d1#d1#d1#d1#d1#]M ]M ]M ]M ]M ]M ]M ]M w! QT@1f YA YA YA @~ ^|@:|@:|@[|@$4@vR@Eu Kv &E Kv u1$GJ%GJ%u1$u1$GJ%pM%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$&E Eu $4@[|@_|@(|@/|@/|@/|@^|@^|@@~ @~ W:@Y:@;! ]|@(7 9 O9 O9 .9 RT@uR@UE@j$#Z=#ir#N~#O~#Ut&tq=(X%(p=S2*S2*S2*0Q=0p=R--wj&2X-v1*Lf*2u-}^;o_*^6 Q';+z&.8 bp.&r=n!.:(+p3.Z`+[(+s4.[^+}o=v5.h;#<(+sQ@h;#h;#sQ@.9.<(+<(+<(+.9..9.):.):.):.*r=*r=uG#uG#N:*N:*N:*vu#vu#vu#N:*N:*N:*N:*uG#uG#;Z+;Z+vu#uG#*r=&r=sX%S`%*r=*r=*r=*r=&r=&r=&r=&r=N:*uG#uG#*r=*r=uG#uG#N:**r=*r=*r=*r=*r=*r=*r=*r=uG#*r=*r=&r=&r=sX%sX%S`%uG#*r=*r=&r=&r=*r=*r=uG#&r=&r=&r=&r=&r=&r=&r=&r=Q+&CI#&r=N:*vu#N:**r=&r=CI#CI#S`%sX%&r=uG#uG#N:**r=*r=uG#N:*N:*uG#*r=*r=*r=uG#N:*N:*N:*N:*uG#*r=*r=*r=*r=uG#uG#uG#uG#uG#dr=dr=dr=dr=dr=dr=dr=dr=m}+m}+m}+m}+m}+m}+m}+m}+j(+p2@%u./@+/@+/@+%u.k(+IV.IV.IV.IV.j(+j(+j(+p2@4p=B9.Bv&Bv&8P.4p=8P.Bv&ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.6g.A9.wr*wr*=^@=^@&s*&s*&s*#x+#x++v=+v=+v=wr*wr*wr*m}+xE#fX.XT#m}+^u=xE#XT#m}+o!#dr=dr=^u=m}+^u=dr=dr=dr=dr=dr==Z+=Z+=Z+=Z+dr==Z+=Z+l]#=Z+=Z+o!#o!#uG#*r=*r=uG#vu#;Z+N:**r=uG#uG#uG#uG#uG#uG#uG#uG#CI#N:*~U.fW=sX%w{@*r=6w=uG#uG#uG#uG#uG#uG#uG#uG#N:*N:*N:*N:*uG#*r=&r=sX%*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=&r=&r=*r=*r=*r=*r=*r=*r=*r=*r=sX%&r=*r=uG#uG#*r=&r=sX%*r=*r=*r=*r=*r=*r=*r=*r=uG#*r=&r=sX%sX%&r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#l]#l]#l]#=Z+=Z+=Z+dr=dr=dr=dr==Z+l]#l]#=Z+dr=dr=$' $' $' 5,+5,+jM#jM#jM#5,+jM#mO#k4@IV.p2@k(+]o&U*@OP*OP*23+US+US+';$';$';$d #d #US+x{+[f.x{+23+0, &, &, Av&Av&&, &, 0, {h&&, ZQ.ZQ.&, &, Av&3<@J> US+23+OP*23+23+US+US+[f.[f.[f.x{+x{+x{+", "G6.G6.9, Hu+#9.PI.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+#9.PI.8v.Hu+#9.#9.PI.8v.cp.cp.#9.#9.#9.#9.PI.PI.#9.#9.#9.PI.Hu+Hu+Hu+8v.VW.8v.PI.#9.[3+[3+[3+[3+PI.#9.cp.[3+[3+[3+[3+cp.cp.cp.cp.cp.cp.cp.cp.cp.|5+|5+|5+|5+[3+[3+cp.cp.[3+|5+|5+cp.PI.PI.[3+bv#4B&J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.J3.4B&^n#@9.@9.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#@9.@9.@9.$B#$B#$B#$B#$B#eO@@9.eO@eO@)Z%)Z%eO@@9.@9.@9.@9.@9.@9.$B#$B#$B#@9.@9.@9.@9.@9.@9.@9.@9.%0+$B#eO@@9.M7.N7.%0+$B#:(+:(+,H.,H.,H.q3.q3.q3.<3+0q.q3.,H.:(+:(+:(+,H.%0+$B#eO@eO@$B#%0+@9.)Z%)Z%@9.$B#$B#eO@)Z%@9.$B#eO@eO@eO@eO@eO@eO@eO@eO@'Z%@9.M7.$B#,X@DI#)Z%%0+eO@eO@eO@eO@eO@eO@eO@eO@%0+$B#eO@)Z%,X@)Z%)Z%eO@q3.,H.:(+:(+:(+:(+,H.q3.+9.bp.bp.:(+:(+bp.+9.bQ#eO@eO@eO@eO@eO@eO@eO@eO@)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%bp.bp.bp.:(+:(+,H.,H.,H.o&=bQ#bQ#bQ#+9.bp.bp.bp.bp.:(+q3.,H.bp.+9.:(+,H.:(+:(+bp.bp.bp.+9.+9.+9.bp.bp.bp.bp.bp.+9.+9.+9.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.bQ#bQ#o&=b,+b,+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+o&=o&=bQ#+9.bp.bp.:(+o&=+9.bp.bQ#b,+j(#b,+bQ#+9.+9.+9.+9.+9.+9.bQ#bQ#:^+:^+D6.D6.t4.o3.o3.v5.D6.D6.D6.D6.:^+:^+:^+:^+o&=bQ#+9.+9.+9.+9.bQ#o&=b,+bQ#+9.+9.o&=o&=bQ#bp.bQ#bQ#bQ#+9.+9.+9.+9.+9.+9.:(+,H.:(++9.bQ#+9.w5.h|.ws&'X+3^;VF+1!;Q4.VW-b@>b@rG sG tG tG -! -! Eu Eu Eu Kv Kv &E &E &E &E &E &E &E &E &E &E &E Kv Kv Kv Kv Kv Kv Kv Kv vR@vR@vR@vR@vR@vR@vR@vR@-! -! tG sG sG rG >b@>b@>b@>b@>b@>b@>b@>b@>b@>b@:|@:|@_|@_|@_|@(|@(|@(|@/|@/|@/|@^|@^|@@~ @~ @~ ^|@@~ WA WA WA WA @~ ^|@a~ 1f 1f YA @~ @~ a~ kI@xy xy ew f1#e1#e1#e1#f1#e1#f1#ew ew ew d1#]M 6q#6q#]M e1#ew ew f1#e1#/M d1#/M /M d1#e1#/M t#SJ#LH#LH#LH#LH#LH#MH#zg#zg#Dd#O8#OH#bj#bj#SJ#zg#Zo@zg#;6#Zo@Dd#LH#vg# t#vg#6q#6q#6q#6q#6q#]M /M /M d1#/M /M ]M ]M ]M /M /M ]M ]M ]M ]M ]M ]M ]M ]M !)#')#a~ YA YA WA ^|@(|@:|@[|@<|@$4@Eu Kv &E u1$&E Nt%GJ%GJ%Nt%u1$GJ%pM%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$&E Eu <|@:|@_|@/|@/|@/|@^|@^|@@~ @~ @~ W:@Y:@;! (7 /d@ 9 O9 O9 @A@RT@[`@i@#C&#P~#N~#O~#u_$85*qR#5N=^T#h_*]T#0Q=t_$O}*p7-R2*Lf*zq-2u-Wi-,t *^;,t YY=2($I{.4u-*r=fW=b,+t4.<(+l3.l3. 9.s4.v5.h;#<(+sQ@h;#h;#sQ@.9.<(+<(+<(+.9..9.):.):.):.uG#uG#uG#N:*N:*N:*vu#vu#uG#uG#N:*N:*N:*N:*vu#vu#N:*N:*N:*uG#*r=*r=&r=&r=&r=&r=&r=&r=*r=*r=*r=*r=&r=&r=*r=uG#uG#*r=&r=&r=uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#*r=*r=*r=*r=&r=&r=uG#*r=sX%S`%S`%sX%*r=uG#sX%sX%sX%sX%sX%sX%sX%sX%S`%S`%sX%*r=uG#uG#uG#uG#&r=&r=&r=&r=sX%sX%sX%sX%&r=*r=uG#N:*N:*uG#*r=&r=&r=*r=uG#N:*N:*uG#*r=&r=uG#uG#uG#uG#uG#*r=*r=*r=dr=dr=dr=dr=dr=dr=dr=dr=xE#xE#xE#xE#xE#xE#xE#xE#mO#IV.p2@%u.6,+%u.p2@j(+IV.IV.IV.j(+j(+p2@p2@p2@8P.Bv&ZQ.Bv&8P.8P.B9.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.6g.=$@+v==^@xr*uq*xr*=^@wr*#x+#x++v=+v=+v=wr*wr*wr*^u=xE#fX.fX.xE#m}+xE#XT#m}+o!#dr=dr=^u=m}+^u=dr=dr=dr=dr=dr=o!#o!#o!#o!#m}+^u=dr==Z+=Z+=Z+o!#o!#vu#N:*N:*vu#fW=fW=N:*&r=*r=*r=*r=*r=*r=*r=*r=*r=sX%uG#vu#N:*&r=sX%*r=N:*uG#uG#uG#uG#uG#uG#uG#uG#*r=uG#uG#N:*N:*uG#*r=&r=*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=&r=&r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=sX%&r=*r=uG#uG#*r=&r=sX%*r=*r=*r=*r=*r=*r=*r=*r=uG#*r=&r=sX%sX%&r=*r=uG#*r=*r=*r=*r=*r=*r=*r=*r=l]#l]#l]#=Z+=Z+=Z+dr=dr=o!#dr=l]#&b=&b=l]#dr=o!#$' $' $' 5,+5,+jM#jM#jM#jM#jM#mO#mO#k4@IV.IV.|;@17*23+23+23+US+US+US+US+OP*23+US+OP*[f.[f.OP*US+~h&{h&&, Av&Av&&, {h&~h&%' {h&ZQ.Bv&ZQ.&, &, xE*xE*23+US+';$US+23+23+23+[f.x{+x{+x{+OP*23+", "9, G6.VW.PI.cp.#9.PI.8v.8v.8v.8v.8v.8v.8v.8v.w7+[3+PI.PI.PI.Hu+VW.hY.[3+[3+cp.#9.#9.PI.Hu+Hu+#9.#9.#9.PI.Hu+Hu+8v.8v.VW.8v.PI.#9.[3+[3+[3+[3+PI.#9.cp.[3+[3+[3+[3+cp.cp.cp.cp.cp.cp.cp.cp.cp.w7+|5+|5+|5+[3+[3+cp.cp.|5+w7+w7+[3+#9.#9.|5+6' 4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&4B&4B& W=eO@@9.$B#%0+M7.N7._r+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#@9.@9.@9.$B#%0+%0+M7.M7.)Z%eO@@9.@9.eO@)Z%eO@eO@@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.$B#@9.eO@@9.M7.N7.M7.%0+:(+:(+,H.,H.,H.q3.q3.q3.<3+0q.q3.,H.:(+:(+:(+,H.N7.$B#@9.@9.$B#$B#eO@,X@,X@eO@@9.@9.)Z%,X@eO@$B#eO@eO@eO@eO@eO@eO@eO@eO@DI#@9.M7.$B#,X@DI#)Z%M7.eO@eO@eO@eO@eO@eO@eO@eO@%0+$B#eO@)Z%,X@,X@)Z%eO@q3.q3.,H.:(+:(+,H.q3.q3.bQ#+9.bp.:(+:(+bp.bp.+9.@9.@9.eO@eO@eO@eO@)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%)Z%bp.bp.bp.:(+:(+,H.,H.,H.o&=o&=bQ#bQ#+9.+9.bp.bp.bp.:(+q3.,H.bp.+9.:(+,H.:(+:(+bp.bp.bp.+9.+9.+9.,H.:(+:(+bp.+9.+9.bQ#bQ#bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.bQ#o&=j(#j(#Q+&bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#j(#o3.o&=D6.:^+p3.w5.u4.o&=+9.bp.bQ#b,+j(#b,+bQ#bQ#bQ#+9.+9.bp.:(+,H.,H.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.D6.:^+p3.p3.p3.+9.+9.bp.:(+:(+bp.+9.+9.bQ#+9.bp.+9.b,+Q+&j(#o&=o&=o&=o&=bQ#+9.bp.bp.bp.bQ#bp.:(+:(++9.bQ#bp.w5.:^+#R+]U=xH.os%5{;p2.)+-3';aI+::+5^;nW+1s#6^;&P 7^;8^;D# q3&D-*s];9^;K~#^+$Kj Zp 4' 4' 4' WE@7.#.9 n| .9 O9 ]|@W:@t! X:@>b@>b@rG sG sG tG -! vR@Eu Eu Eu Kv Kv Kv &E &E &E &E &E &E &E &E &E &E Eu Eu Eu Kv Kv Kv Kv Kv vR@vR@vR@vR@vR@vR@vR@vR@-! -! tG sG sG rG >b@>b@rG rG rG rG rG rG rG rG _|@_|@_|@(|@(|@/|@/|@/|@/|@/|@/|@^|@@~ @~ WA WA ^|@@~ WA WA WA WA @~ ^|@YA a~ a~ WA ^|@^|@YA 1f G5@LZ$xy ew f1#e1#e1#e1#e1#f1#ew ew f1#d1#]M bj#6q#/M e1#ew dw ew e1#/M e1#e1#f1#dw xy ew ]M OH#NH#g%&gy#gy#gy#NH#T8#=3#N,&Wm@KN#cj#bj#SJ#Dd# l&zg#;6#;6#zg#SJ#bj#6q#bj#6q#6q#bj#bj#6q#]M /M /M /M ]M 6q#6q#bj#6q#6q#]M ]M ]M ]M ]M ]M ]M ]M ]M QT@kI@a~ YA YA WA /|@:|@[|@[|@<|@vR@Eu &E u1$u1$&E Nt%*L%GJ%Nt%u1$GJ%pM%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$&E vR@<|@:|@(|@/|@/|@^|@^|@^|@@~ @~ @~ W:@Y:@;! (7 9 O9 O9 O9 @A@bP@[`@i@#Y=#P~#O~#0u#tq=6v qR#pR#^T#h_*0Q=+6*s|*(T=Wy=Lf*1d-1d-Wi-H9-D@-_^;0^;'Y@/^+]&-uG#fW=Tw@;Z+sQ@E6.s}+`8.It&l3.v5.h;#<(+sQ@h;#h;#sQ@.9.sQ@sQ@sQ@<(+<(+.9..9..9.uG#uG#uG#N:*N:*vu#vu#vu#*r=*r=uG#N:*N:*vu#;Z+;Z+*r=*r=*r=uG#uG#uG#uG#N:*sX%sX%sX%&r=*r=uG#uG#uG#CI#S`%&r=*r=*r=&r=S`%CI#N:*N:*N:*N:*N:*N:*N:*N:*uG#uG#uG#uG#uG#uG#uG#uG#*r=&r=S`%CI#CI#S`%&r=*r=*r=*r=*r=*r=*r=*r=*r=*r=;Z+N:**r=S`%S`%S`%&r=*r=N:*N:**r=&r=sX%CI#w{@Q+&&r=*r=uG#vu#vu#uG#*r=&r=sX%&r=*r=uG#uG#*r=&r=sX%vu#N:*N:*uG#*r=*r=&r=&r=dr=dr=dr=dr=dr=dr=dr=dr=xE#xE#+v=+v=+v=+v=+v=+v=SO+$' mO#IV.IV.k4@jM#5,+IV.IV.IV.j(+p2@p2@k(+k(+8P.Bv&Av&ZQ.B9.8P.B9.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.6g.:b+#x+&s*uq*,C+xr*wr*#x+#x+#x++v=+v=+v=wr*wr*wr*^u=xE#fX.fX.xE#^u=m}+xE#m}+o!#dr=dr=^u=m}+^u=dr==Z+dr=dr=o!#^u=^u=m}+m}+XT#xE#^u=dr==Z+dr=o!#o!#6w=fW=;Z+6w=~U.6w=N:*&r=&r=&r=&r=&r=&r=&r=&r=&r=uG#&r=sX%sX%*r=uG#*r=sX%uG#uG#uG#uG#uG#uG#uG#uG#&r=*r=uG#N:*N:*uG#uG#*r=*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%sX%&r=*r=uG#uG#uG#*r=*r=*r=*r=*r=*r=*r=*r=sX%&r=*r=uG#uG#*r=&r=sX%*r=*r=*r=*r=*r=*r=*r=*r=uG#*r=&r=sX%sX%&r=*r=uG#&r=&r=&r=&r=&r=&r=&r=&r=l]#l]#l]#=Z+=Z+=Z+dr=dr=o!#dr=l]#&b=&b=l]#dr=o!#qK+qK+qK+$' $' 5,+5,+5,+mO#mO#mO#mO#jM#jM#jM#-x#J> US+US+US+US+23+23+23+u!=[f.x{+x{+[f.[f.23+d #>S%~h&0, &, &, 0, ~h&>S%u3$~h&ZQ.B9.Bv&&, 0, 17*..=OP*US+';$US+23+OP*x{+x{+x{+OP*OP*23+US+", "xX%O7.x5.O7._r+M7.$B#N7.N7.M7.M7.%0+%0+%0+%0+PI.PI.PI.PI.PI.PI.PI.PI.8v.8v.Hu+Hu+PI.#9.#9.#9.|5+|5+[3+[3+cp.#9.#9.PI.PI.PI.PI.#9.#9.cp.cp.cp.[3+cp.cp.#9.#9.PI.PI.Hu+cp.#9.#9.PI.PI.#9.#9.cp.aq.aq.aq.aq.aq.aq.aq.aq.(s.{t.j}+j}+aq.(s.aq.j}+l5+l5+$y#^n#^n#$y#l5+l5+y}*$y#Zl@pD&V^$pD&Zl@Zl@@9.$B#%0+M7.M7.%0+$B#@9._r+N7.N7.M7.M7.N7.N7._r+%0+%0+%0+%0+%0+%0+%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#@9.@9.@9.@9.@9.@9.@9.@9.@9.%0+N7._r+N7.%0+eO@,X@eO@%0+N7.M7.eO@,X@)Z%@9.q3.q3.q3.q3.q3.q3.q3.q3.F6.#k.<3+,H.:(+:(+:(+,H.@9.@9.@9.@9.@9.@9.@9.@9.eO@eO@eO@eO@eO@eO@eO@eO@%0+$B#@9.eO@eO@@9.$B#%0+$B#$B#@9.eO@eO@)Z%,X@,X@,H.:(++9.bp.,H.q3.:(+bp.:(+bp.+9.+9.bp.:(+q3.0q.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+<3+0q.q3.,H.:(+:(+:(+,H.0q.q3.q3.q3.,H.,H.:(+:(+bp.bp.bp.bp.bp.bp.bp.bp.v4.bp.o&=bp.:(+bQ#o&=+9.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.:(+:(+:(+:(+:(+:(+:(+:(++9.+9.bp.:(+:(+,H.,H.q3.bp.+9.bQ#o&=j(#Q+&w{@w{@,H.bp.+9.bQ#bQ#+9.bp.,H.av#av#bp.bp.bp.bp.p3.p3.:^+ :*o3.C6.+T+ :*(r+gP.p3.bQ#o&=bQ#+9.bp.+9.o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#Q+&j(#o&=bQ#bQ#o&=j(#Q+&o&=o&=o&=o&=o&=o&=o&=o&=+9.bQ#+9.:(+q3.,H.+9.b,+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bp.bp.+9.+9.bQ#o&=o&=t4.D6. :*}o=}o=%U*Yj@sZ XN.z3-Oy->D=a^;b^;c^;d^;e^;NY+C];f^;g^;6m&F[*r4&f5 f5 ) []#s[ []#Yk 4' `3 'p #, ,p 7, (,@_,@y, _t Y:@+~ (|@:|@<|@<|@<|@[|@Kv Kv Kv &E &E u1$u1$u1$vR@Kv u1$&E Eu vR@Eu &E Nt%Nt%Nt%u1$u1$u1$&E &E Kv Kv Eu Eu vR@vR@$4@$4@rG rG sG tG -! -E -E }g r[@r[@r[@r[@r[@r[@r[@r[@<|@<|@[|@:|@_|@(|@/|@/|@(|@/|@^|@@~ WA YA a~ 1f kI@YA @~ @~ WA a~ YA WA YA YA YA a~ a~ 1f 1f 1f xy dw ew f1#f1#ew dw xy dw ew ew f1#d1#/M /M ]M /7 ;8 8v ;8 k[#b4#k[#/7 |g (d@k[#'m#k[#'m#.i#oy#Cb&|Q%|Q%|Q%FR%Ta&h^;ki&Ls=9j&P);[J=u&*T8#=3#7s=Zo@;6#;6#zg#MH#SJ# t#bj#6q#6q#6q#6q#]M /M d1#e1#f1#d1#]M 6q#bj#6q#]M /M bj#6q#]M 6q# t#bj#]M d1#a~ 1f kI@kI@1f WA (|@:|@<|@<|@$4@vR@Eu Kv &E &E =E =E =E =E =E =E =E =E =E =E =E =E =E =E i0$i0$=E }g tG sG sG rG X:@+~ t! t! +~ W:@Y:@;! ]|@]|@Y:@]|@/d@/d@(7 (7 9 +L@.9 uR@i@#C&#Y=#VE@ir#0u#Zq #)#6v D,#J[$1g /p=[n %1*SE tk*de->+-p#-p{;q7-`4-xD p(*W+-j(#H|@.9.w5.t4.o3.v5.n3.h;#n3.n3.n3.):..9.<(+sQ@<(+.9.].,].,].,].>].u`.HV.u!=x{+OP*OP*0, 0, 0, 0, &, &, &, &, &, &, Av&Av&&, 0, {h&J> xE*x{+u!=HV.HV.u!=x{+OP*u]#US+x{+x{+US+d #", "xX%O7.x5.x5.x5.O7.xX%_r+_r+N7.N7.M7.M7.M7.%0+PI.PI.PI.PI.PI.PI.PI.PI.8v.Hu+Hu+Hu+PI.#9.#9.#9.cp.cp.cp.#9.#9.#9.#9.#9.PI.PI.PI.#9.#9.cp.cp.cp.[3+[3+[3+cp.#9.#9.#9.PI.#9.#9.PI.PI.PI.PI.#9.#9.aq.aq.aq.aq.aq.aq.aq.aq.(s.{t.j}+j}+aq.(s.aq.j}+M7.M7.%0+$B#$B#%0+M7.M7.@9.$B#M7.N7._r+N7.M7.M7.@9.$B#%0+M7.M7.%0+$B#@9.N7.N7.M7.%0+%0+M7.N7.N7.%0+%0+%0+%0+%0+%0+%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+M7.M7.M7.$B#@9.eO@eO@%0+N7.M7.@9.)Z%)Z%@9.q3.q3.q3.q3.q3.q3.q3.q3.v4.<3+0q.,H.:(+:(+:(+,H.@9.@9.@9.@9.@9.@9.@9.@9.$B#$B#@9.@9.@9.@9.$B#$B#$B#@9.eO@)Z%)Z%eO@@9.$B#@9.@9.eO@eO@eO@eO@)Z%)Z%,H.:(++9.bp.,H.q3.:(+bp.:(+bp.bp.+9.bp.:(+q3.0q.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+0q.q3.,H.:(+bp.bp.:(+:(+q3.q3.,H.,H.:(+:(+:(+bp.bp.bp.bp.bp.bp.bp.bp.bp.q3.bQ#b,+bp.:(+bQ#b,+o&=+9.+9.+9.+9.+9.+9.+9.+9.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.+9.+9.+9.bp.bp.bp.bp.bp.bp.+9.bQ#o&=o&=b,+b,+:(+bp.+9.bQ#bQ#+9.bp.:(+av#av#bp.bp.bp.bp.p3.p3.It&}o=[(++T+}>#Gn=Sx&pt+p3.bQ#o&=bQ#+9.bp.+9.o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#j(#b,+o&=bQ#bQ#o&=b,+j(#o&=o&=o&=o&=o&=o&=o&=o&=bp.+9.bQ#+9.:(+,H.bp.o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bp.bp.bp.+9.+9.bQ#bQ#D6.U%+=1.=1.R>.p3.p3.)Z%tn.6'%cl-%%+pW.i^;j^;k^;l^;&L@zk-m^;OW-DQ-c@#Z}-_<-8(-U3 kj#ub s[ Yk e5 `3 `3 #, *! ]1 (,@fw _t Xr W:@+~ _|@[|@<|@$4@>8@>8@Kv Kv Kv &E &E u1$u1$u1$vR@Kv u1$&E Eu vR@Kv &E Nt%Nt%Nt%u1$u1$u1$&E &E Kv Kv Eu Eu vR@vR@$4@$4@sG sG sG sG tG tG tG tG r[@r[@r[@r[@r[@r[@r[@r[@[|@[|@:|@_|@(|@/|@/|@^|@(|@(|@(|@/|@^|@@~ @~ @~ a~ YA @~ WA 1f kI@a~ WA YA YA YA a~ a~ 1f 1f 1f xy dw ew f1#f1#ew dw xy e1#e1#e1#e1#e1#d1#d1#d1#/7 ;8 |g ;8 a7#'m#k[#(d@(d@a7#'m#b4#'m#b4#.i#oy#GR%n^;o^;Bb&N;;Sa&m;;p^;li&q^;/f@r^;L**Ms=Ia#Wm@Zo@Zo@;6#Dd#O8#LH#vg# t#6q#6q#6q#6q#]M /M d1#e1#e1#d1#/M 6q#6q#6q#]M /M bj#]M ]M 6q#bj#bj#/M e1#YA a~ 1f 1f a~ @~ (|@:|@<|@$4@$4@vR@Eu Kv &E &E =E =E =E =E =E =E =E =E i0$i0$i0$i0$i0$i0$i0$i0$=E -E tG sG sG rG X:@W:@t! +~ +~ W:@Y:@;! ]|@]|@;! (7 9 9 /d@/d@O9 .9 @A@uR@Cv@Y=#VE@ir#0u#}n Fz #D=#D=Q*#^m {t 0C=Z4-R--GA=5$-fs-#c-/e*s^;16-@W-r *wD eR [v.g|.n3..9.t4.o3.v5.n3.h;#h;#n3.n3..9.<(+sQ@sQ@sQ@.9.):.#Gr&tH.It&p3.bQ#o&=bQ#+9.bp.+9.o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+b,+o&=bQ#bQ#o&=b,+b,+o&=o&=o&=o&=o&=o&=o&=o&=,H.+9.o&=o&=+9.:(+bp.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#:(+:(+bp.bp.bp.+9.+9.:^+62.R>.R>.R>.p3.:^+,X@R]$Yo=s^+T|*jO.9=$V#$t^;u^;v^;AD-OW-n;;66-Kh U=#*o=G[*U3 kj#B0 Yk t[ Vr `3 #, d2 Q1 ]1 (,@fw _t Xr +~ t! _|@[|@<|@$4@/0@/0@Kv Kv Kv &E &E u1$u1$u1$Eu &E u1$&E Eu Eu Kv u1$Nt%Nt%Nt%u1$u1$u1$&E &E Kv Kv Eu Eu vR@vR@$4@$4@sG sG sG sG rG rG rG >b@r[@r[@r[@r[@r[@r[@r[@r[@:|@:|@_|@(|@/|@^|@^|@^|@_|@_|@_|@(|@(|@(|@(|@(|@WA WA WA 1f B_#B_#kI@YA YA YA YA a~ a~ 1f 1f 1f xy dw ew f1#f1#ew dw xy d1#d1#d1#d1#e1#e1#e1#e1#f1#ew dw ew e1#d1#e1#ew e1#/M 6q#6q#]M /M 6q#cj#GR%o^;w^;x^;Jb@Jb@m;;mi&li&ki&d!;y^;z^;[J=>6#>6#Z+*Z+*Z+*;6#Dd#MH#SJ#OH# t#bj#bj#6q#]M /M d1#e1#e1#e1#/M ]M ]M ]M ]M /M bj#]M /M ]M 6q#6q#d1#f1#YA YA a~ a~ WA ^|@_|@[|@$4@$4@vR@Eu Kv Kv &E &E =E =E =E =E =E =E =E =E 1C%1C%1C%1C%i0$i0$i0$i0$*E -E sG rG rG >b@t! W:@+~ +~ W:@Y:@;! ;! ]|@]|@]|@/d@O9 +L@O9 O9 .9 RT@RT@b.#C&#P~#N~#0u#tq=Zq J[$J~#y' po=@p=6U%Nj=6L=.6*Wy=A0-@f*s7-r7-^e*Q}-%T&F.*A^;w`.[v.u4.h;#<(+o3.o3.n3.h;#h;#h;#n3.n3.sQ@sQ@h;#h;#sQ@<(+.9.):.S%%' x{ nh.';$US+23+OP*OP*OP*23+23+OP*[f.x{+23+23+", "xX%O7.O7.x5.x5.x5.x5.x5.O7.O7.O7.xX%xX%_r+_r+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.PI.PI.PI.PI.VW.VW.8v.8v.Hu+PI.PI.#9.PI.PI.PI.#9.#9.cp.cp.cp.|5+|5+|5+|5+[3+[3+[3+[3+PI.PI.Hu+8v.8v.Hu+PI.PI.aq.aq.aq.aq.aq.aq.aq.aq.(s.{t.j}+j}+aq.(s.aq.j}+_r+N7.N7.M7.M7.N7.N7._r+%0+%0+M7.M7.M7.M7.M7.M7.%0+%0+M7.M7.M7.M7.%0+%0+%0+%0+$B#@9.@9.$B#%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#%0+%0+%0+%0+%0+%0+%0+%0+_r+M7.$B#eO@eO@@9.%0+N7.@9.$B#%0+M7.%0+$B#@9.@9.q3.q3.q3.q3.q3.q3.q3.q3.o&=+9.:(+q3.q3.q3.:(+bp.@9.@9.@9.@9.@9.@9.@9.@9.N7.%0+@9.eO@eO@@9.%0+N7.)Z%)Z%)Z%,X@,X@)Z%)Z%)Z%,X@,X@)Z%eO@eO@@9.$B#$B#,H.:(++9.bp.,H.q3.:(+bp.:(+:(+:(+:(+:(+:(+:(+,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+bp.+9.+9.+9.+9.bp.bp.:(+:(+bp.bp.+9.+9.+9.bQ#,H.,H.,H.,H.,H.,H.,H.,H.+9.b,+o&=q3.0q.bp.b,+b,+bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#:(+:(+bp.+9.+9.bQ#o&=o&=bQ#bQ#bQ#+9.+9.bp.bp.:(+bp.bp.bp.+9.+9.bp.bp.bp.av#av#bp.bp.bp.bp.p3.p3.pt+(r+}o= :*Gr&Gr&Gn= :*p3.bQ#o&=bQ#+9.bp.+9.o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=,H.+9.b,+b,+bQ#bp.bp.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bp.bp.bp.bp.bp.bp.bp.p3.-1.vi@vi@R>.:^+:^+'Z%]Z@41.)1-B^;C^;D^;E^;F^;G^;H^;A`+v7-n;;-';Zx-Mh Z}-v4 8(-kj#ub Yk t[ e5 `3 `3 d2 Q1 ]1 (,@fw _t Xr t! X:@_|@[|@<|@$4@c.#c.#Kv Kv Kv &E &E u1$u1$u1$Eu &E u1$u1$Kv Eu Kv u1$Nt%Nt%Nt%u1$u1$u1$&E &E Kv Kv Eu Eu vR@vR@$4@$4@tG tG sG rG >b@r[@X:@X:@r[@r[@r[@r[@r[@r[@r[@r[@(|@(|@(|@/|@/|@^|@^|@@~ /|@(|@(|@(|@(|@(|@_|@_|@@~ @~ YA ')#!)#!)#')#a~ YA YA YA a~ a~ 1f 1f 1f dw dw ew ew ew ew dw dw e1#e1#d1#d1#d1#d1#/M /M e1#e1#f1#f1#f1#f1#f1#ew d1#]M 6q#6q#/M d1#]M !m#|Q%I^;J^;K^;%a&m;;m;;m;;J+*L^;L*;L*;Ms=9j&Wm@N,& l& l&Z+*Z+*;6#zg#MH#LH#vg#vg#bj#6q#/M d1#d1#d1#e1#e1#d1#/M /M /M /M /M 6q#]M /M /M ]M ]M e1#dw WA WA WA WA ^|@(|@:|@[|@$4@$4@vR@Eu Kv &E u1$u1$=E =E =E =E =E =E =E =E GD%GD%1C%1C%1C%i0$i0$i0$}g -! rG >b@>b@r[@+~ Y:@+~ +~ W:@Y:@;! ]|@(7 (7 (7 9 .9 .9 +L@.9 RT@[`@uR@i@#Z=#O~#Ut&tq=(X%^p=Zq J~#po=Jo=/p=Z4-t|*d:*v1*zq-q7-q7-`4-S%&, v.@%b=5,+$' k4@p2@k4@mO#IV.p2@p2@p2@j(+IV.mO#jM#5,+,S#=)+[o==)+,S#KD=uC#[o=A{+[o==)+uC#uC#,S#'m*YT#wr*&s*,C+Fu+Fu+,C+&s*wr*&s*&s*&s*&s*&s*&s*&s*&s*N:*N:*N:*N:*N:*N:*N:*N:*sX%sX%&r=*r=uG#N:*;Z+;Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+^u==Z+&b=&b==Z+dr==Z+l]#S`%S`%S`%S`%S`%S`%S`%S`%*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#*r=*r=*r=*r=*r=*r=*r=*r=*r=sX%S`%S`%&r=*r=&r=S`%*r=*r=*r=*r=*r=*r=*r=*r==Z+=Z+=Z+l]#l]#&b=iM#yE#l]#dr=o!#dr=&b=iM#&b==Z+l]#=Z+=Z+=Z+=Z+=Z+=Z+l]#o!#o!#o!#o!#o!#o!#o!#o!#5,+5,+5,+5,+5,+5,+5,+5,+$' $' $' $' $' $' $' ~~@xE*23+23+23+23+23+US+US+';$';$US+US+23+23+OP*OP*Av&Av&Av&Av&&, &, &, &, Av&&, 0, ~h&>S%%' X@$$.@17*23+OP*x{+[f.u!=u!=u!=x{+x{+x{+OP*OP*OP*", "O7.xX%xX%_r+_r+_r+_r+x5.x5.x5.O7.O7.xX%xX%xX%8v.8v.8v.8v.8v.8v.8v.8v.PI.PI.PI.PI.PI.PI.Hu+Hu+9, VW.VW.8v.Hu+Hu+PI.PI.PI.PI.PI.#9.#9.cp.cp.cp.[3+[3+[3+[3+|5+|5+|5+|5+#9.PI.PI.Hu+Hu+PI.PI.#9.{t.{t.{t.{t.{t.{t.{t.{t.(s.{t.j}+j}+aq.(s.aq.j}+_r+N7.N7.M7.M7.N7.N7._r+M7.M7.M7.%0+%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+$B#@9.@9.$B#%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#_r+M7.@9.)Z%)Z%@9.M7._r+$B#$B#$B#%0+M7.M7.%0+$B#q3.q3.q3.q3.q3.q3.q3.q3.o&=bQ#:(+q3.q3.q3.,H.:(+@9.@9.@9.@9.@9.@9.@9.@9.$B#@9.eO@)Z%)Z%eO@@9.$B#,X@)Z%)Z%)Z%)Z%)Z%)Z%,X@,X@,X@)Z%eO@eO@@9.$B#$B#,H.:(++9.bp.,H.q3.:(+bp.:(+:(+:(+:(+:(+:(+:(+bp.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+bp.bp.+9.+9.+9.+9.bp.:(+:(+:(+bp.bp.+9.+9.+9.bQ#,H.,H.,H.,H.,H.,H.,H.,H.:(+o&=bQ#<3+#k.,H.bQ#bQ#,H.,H.,H.,H.,H.,H.,H.,H.bp.bp.bp.bp.bp.bp.bp.bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#,H.,H.,H.:(+bp.+9.+9.+9.b,+b,+o&=bQ#bQ#+9.bp.bp.+9.bp.bp.bp.bp.bp.bp.+9.av#av#bp.bp.bp.bp.p3.p3.(r+It&}o= :*Gn=Gr&Gr&[(+p3.bQ#o&=bQ#+9.bp.+9.o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=,H.+9.b,+j(#o&=+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.+9.bp.bp.bp.p3.u4.(r+vi@R>.:^+:^+'Z%]Z@}7.lY=v^-%%+l'#O^;P^;Q^;|C=D0-iA-`o-:!;)X-:<-qI-Q_-=o= ) ub s[ Yk vb Vr `3 #, *! (1 /,@_,@y, _t t! X:@(|@_|@[|@<|@c.#q<$Kv Kv Kv &E &E u1$u1$u1$Kv u1$Nt%u1$Kv Kv &E Nt%Nt%Nt%Nt%u1$u1$u1$&E &E Kv Kv Eu Eu vR@vR@$4@$4@-! -! tG rG >b@r[@X:@t! r[@r[@r[@r[@r[@r[@r[@r[@(|@(|@/|@/|@/|@^|@^|@^|@@~ ^|@^|@^|@^|@^|@/|@/|@@~ @~ YA ')#!)#!)#')#a~ YA YA YA a~ a~ 1f 1f 1f ew ew dw dw dw dw ew ew dw ew f1#d1#/M 6q#bj# t#/M /M /M d1#e1#f1#f1#f1#e1#/M 6q#]M d1#d1#/M )m#>E&w^;mi&R^;mi&m;;S^;S^;Ms=[J=+t=O**-3#-3#Wm@N,& l& l& l&Z+*Zo@Dd#O8#MH#SJ#OH# t#]M /M d1#d1#d1#e1#e1#e1#e1#d1#/M /M ]M 6q#/M d1#d1#/M d1#ew xy @~ @~ @~ ^|@(|@:|@[|@<|@vR@vR@Eu Kv Kv &E u1$u1$=E =E =E =E =E =E =E =E GD%GD%1C%1C%i0$=E =E =E -E tG >b@r[@r[@X:@W:@;! W:@W:@Y:@;! ;! ]|@(7 (7 (7 O9 .9 @A@@A@@A@uR@b.#b.#j$#ir#Ut&tq=pR#(p=Yp >p J~#=1-2g 6U%b:*qy=zQ-1d-1d-tk*q7-+f*r7-Ia*T^;=];o3.4S ):.:^+n3.o3.o3.v5.v5.n3.h;#sQ@sQ@h;#h;#n3.h;#h;#sQ@sQ@<(+<(+<(+):.<(+h;#sQ@.9.S%Av&8P.Bv&{h&>S%&, v.@v.@mO#5,+IV.j(+mO#5,+mO#p2@p2@p2@p2@j(+k4@jM#5,+,S#=)+[o==)+,S#KD=uC#[o=U^$[o==)+[o=U^$U^$uC#5;@wr*=^@uq*Fu+Fu+uq*=^@wr*&s*&s*&s*&s*&s*&s*&s*&s*N:*N:*N:*N:*N:*N:*N:*N:**r=*r=uG#uG#uG#uG#uG#uG#=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+o!#=Z+iM#&b==Z+dr=dr==Z+~U.~U.~U.~U.~U.~U.~U.~U.*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#*r=*r=*r=*r=*r=*r=*r=*r=*r=sX%S`%S`%&r=*r=&r=S`%*r=*r=*r=*r=*r=*r=*r=*r=dr==Z+l]#&b=&b=iM#iM#iM#=Z+dr=o!#dr=l]#&b=l]#=Z+=Z+=Z+=Z+l]#l]#=Z+=Z+=Z+o!#o!#o!#o!#o!#o!#o!#o!#5,+5,+5,+5,+5,+5,+5,+5,+$' $' $' $' $' $' $' ~~@U*@x{+OP*OP*OP*OP*23+23+US+US+23+OP*x{+x{+[f.[f.Bv&ZQ.ZQ.Av&Av&&, &, 0, Av&&, {h&>S%%' %' %' nh.o2@lt*lt*lt*b=+b=+a1+a1+'!=b=+lt*FG*lt*b=+", "x5.xX%_r+N7.M7.N7.N7.x5.O7.O7.O7.xX%xX%_r+_r+8v.8v.8v.8v.8v.8v.8v.8v.#9.#9.PI.PI.PI.Hu+Hu+Hu+8v.8v.8v.8v.Hu+Hu+Hu+Hu+PI.PI.PI.#9.#9.cp.cp.cp.cp.cp.cp.[3+[3+[3+|5+|5+cp.cp.#9.PI.PI.#9.cp.cp.{t.{t.{t.{t.{t.{t.{t.{t.(s.{t.j}+j}+aq.(s.aq.j}+N7.N7.M7.%0+%0+M7.N7.N7._r+N7.M7.%0+%0+%0+%0+M7.N7.N7.M7.%0+%0+M7.N7.N7.M7.M7.%0+$B#$B#%0+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#@9.@9.@9.@9.@9.@9.@9.@9.M7.%0+@9.)Z%eO@$B#N7._r+%0+$B#$B#%0+N7._r+M7.$B#q3.q3.q3.q3.q3.q3.q3.q3.+9.bp.:(+,H.q3.q3.q3.q3.@9.@9.@9.@9.@9.@9.@9.@9.eO@eO@eO@eO@eO@eO@eO@eO@,X@)Z%eO@eO@eO@eO@)Z%,X@)Z%)Z%eO@eO@eO@eO@@9.@9.,H.:(++9.bp.,H.q3.:(+bp.:(+:(+,H.,H.,H.:(+bp.+9.bp.bp.bp.bp.bp.bp.bp.bp.:(+:(+:(+:(+:(+:(+:(+:(+bp.bp.bp.+9.bp.:(+,H.,H.,H.:(+:(+:(+bp.bp.+9.+9.,H.,H.,H.,H.,H.,H.,H.,H.,H.bQ#+9.0q.#k.q3.bp.:(+,H.,H.,H.,H.,H.,H.,H.,H.bp.bp.bp.bp.bp.bp.bp.bp.+9.+9.+9.+9.+9.+9.+9.+9.,H.,H.,H.:(+:(+:(+:(+bp.b,+b,+o&=o&=bQ#+9.+9.bp.+9.+9.bp.:(+:(+bp.+9.+9.av#av#bp.bp.bp.bp.p3.p3.}o=}o=}o=}o=Gn=Gn=Gn= :*p3.bQ#o&=bQ#+9.bp.+9.o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.bQ#bQ#o&=o&=bQ#bQ#+9.o&=o&=o&=o&=o&=o&=o&=o&=bp.bQ#b,+b,+bQ#+9.+9.o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=bQ#bQ#bQ#+9.+9.+9.:^+p3.It&R>.R>.p3.:^+,X@R]$}7.S<+vF=%%+U^; .$V^;W^;X^;q>*0; `m-Y^;J';F[*Z}-:<-g5 f5 s4 []#s[ Yk vb Vr 7v #, Q1 +' (,@_,@fw t! t! /|@(|@_|@[|@/0@c.#Kv Kv Kv &E &E u1$u1$u1$Kv u1$Nt%Nt%&E Kv &E Nt%Nt%Nt%Nt%u1$u1$u1$&E &E Kv Kv Eu Eu vR@vR@$4@$4@-! -! tG sG rG >b@r[@r[@r[@r[@r[@r[@r[@r[@r[@r[@(|@(|@(|@(|@(|@(|@/|@/|@@~ @~ WA WA WA WA WA WA WA WA WA 1f B_#B_#kI@YA YA YA YA a~ a~ 1f 1f 1f f1#ew dw xy xy dw ew f1#xy dw f1#d1#]M bj#vg#OH#bj# t# t#6q#d1#f1#e1#d1#e1#/M 6q#6q#]M /M 6q#cj#M;;x^;mi&p^;mi&th&S^;S^;qs=[J=:X%@b@Wm@>6#Wm@>6#Z+*Z+*Z+*Zo@;6#Dd#O8#MH#MH#SJ# t#]M /M d1#d1#/M e1#e1#f1#f1#e1#d1#/M ]M 6q#/M e1#d1#d1#e1#dw LZ$@~ ^|@/|@(|@:|@[|@<|@$4@vR@vR@Eu Kv &E u1$u1$Nt%=E =E =E =E =E =E =E =E 1C%1C%i0$i0$=E *E }g }g -! sG r[@X:@X:@t! Y:@]|@W:@W:@Y:@;! ]|@(7 (7 /d@(7 9 .9 @A@@A@RT@uR@UE@Cv@Z=#O~#85*qR#5N=S2*1g 6v J~#-1-x8-Z4-6L=py=Tm-zq-1d-s7-A0-+f*(e*T^;T^;Jn.1w.$$+v5.):.v5.N7+Z`+v5.n3.h;#sQ@sQ@sQ@sQ@h;#n3.h;#sQ@<(+.9..9.<(+<(+):.<(+h;#h;#.9.S%>S%>S%{h&0, k#@pK+S>+x}*x}*S>+pK+pK+'!=b=+pK+S>+FG*b=+", "O7.xX%_r+_r+_r+xX%O7.O7.O7.xX%xX%xX%_r+_r+_r+VW.VW.VW.VW.VW.VW.VW.VW.#9.#9.#9.PI.Hu+Hu+Hu+8v.PI.PI.PI.Hu+Hu+Hu+Hu+Hu+PI.PI.PI.#9.#9.cp.cp.cp.PI.#9.#9.#9.cp.[3+[3+[3+|5+[3+cp.cp.cp.cp.[3+|5+j}+j}+j}+j}+j}+j}+j}+j}+(s.{t.j}+j}+aq.(s.aq.j}+M7.M7.%0+$B#$B#%0+M7.M7.xX%_r+M7.$B#$B#$B#%0+M7._r+N7.M7.%0+%0+M7.N7._r+N7.N7.M7.%0+%0+M7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#%0+$B#@9.@9.@9.%0+M7._r+%0+@9.@9.%0+_r+xX%N7.$B#q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.q3.0q.0q.@9.@9.@9.@9.@9.@9.@9.@9.)Z%eO@$B#%0+%0+$B#eO@)Z%)Z%eO@@9.$B#$B#@9.eO@)Z%@9.@9.eO@eO@eO@eO@)Z%)Z%,H.:(++9.bp.,H.q3.:(+bp.:(+,H.,H.q3.,H.:(++9.bQ#bp.bp.bp.bp.bp.bp.bp.bp.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+bp.bp.:(+,H.q3.0q.q3.q3.,H.,H.:(+:(+:(+bp.bp.bp.bp.bp.bp.bp.bp.bp.q3.bQ#o&=,H.0q.,H.:(+q3.+9.+9.+9.+9.+9.+9.+9.+9.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.+9.bp.bp.bp.bp.:(+:(++9.+9.+9.+9.+9.bp.bp.bp.bQ#+9.bp.:(+:(+bp.+9.bQ#av#av#bp.bp.bp.bp.p3.p3.[(+ :* :*}o=tH.tH.tH.}o=p3.bQ#o&=bQ#+9.bp.+9.o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bp.+9.bQ#o&=o&=bQ#+9.bp.o&=o&=o&=o&=o&=o&=o&=o&=bQ#o&=b,+o&=+9.bp.o&=j(#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+b,+b,+o&=o&=bQ#bQ#D6.:^+}o=}o=It&p3.p3.)Z% W=q[*T--0I+Z^;`^; /;./;+/;@/;{&$$W=zE-Y^;#/;E[*&o=6o=Mh S3 g$#:u 7J@[]#Yk vb e5 7v d2 36 /,@VH _,@+~ W:@@~ ^|@/|@_|@>8@/0@Kv Kv Kv &E &E u1$u1$u1$&E u1$GJ%Nt%&E Kv u1$GJ%Nt%Nt%Nt%u1$u1$u1$&E &E Kv Kv Eu Eu vR@vR@$4@$4@-! -! -! tG sG rG rG rG r[@r[@r[@r[@r[@r[@r[@r[@_|@_|@_|@_|@_|@_|@_|@_|@^|@^|@@~ WA WA YA a~ a~ a~ YA @~ WA 1f kI@a~ WA YA YA YA a~ a~ 1f 1f 1f f1#ew dw xy xy dw ew f1#ew f1#e1#d1#]M bj# t#vg#ej#EL#EL#ej#DL%c3&zz#DL%zz#/i&dj#dj#dj#dj#.p@+]&li&th&q^;q^;h^;$/;;d@');=3#t&*5!;4>&Zo@Zo@Zo@O8#;6#Zo@Zo@Zo@;6#zg#O8#MH#O8#LH#vg#]M d1#d1#/M /M d1#e1#f1#ew f1#e1#/M ]M 6q#/M e1#e1#e1#f1#xy G5@^|@/|@(|@:|@[|@<|@$4@$4@vR@Eu Eu Kv &E u1$Nt%Nt%=E =E =E =E =E =E =E =E i0$i0$=E *E }g -E -! -! -! rG X:@t! t! +~ Y:@(7 W:@Y:@Y:@;! ]|@(7 /d@/d@]|@ 9 +L@@A@@A@RT@uR@UE@C&#P~#0u#tq=qR#5N=(p=Yp 6v @)#x8-|6-rg*qy=`q qg*yq-$1*de-`4-s7-|q=#q=%/;^(-^(-g|.<(+<(+v5.o3.0+>0+>0+>0+>0+>0+>0+,0+,0+,0+,0+,0+,0+,0+k#@17*23+23+OP*x{+[f.[f.[f.x{+x{+x{+x{+[f.[f.[f.[f.B9.B9.Bv&ZQ.Av&&, &, 0, &, 0, ~h&>S%>S%{h&Av&ZQ.d;+o2@4,+h^+r-@r-@h^+h^+y{+o2@h^+r-@4,+o2@", "O7.xX%_r+xX%x5.Vh.%j.xX%xX%xX%_r+_r+N7.N7.N7.VW.VW.VW.VW.VW.VW.VW.VW.#9.#9.#9.PI.Hu+Hu+8v.8v.cp.#9.#9.PI.Hu+Hu+8v.8v.PI.PI.PI.#9.#9.cp.cp.cp.Hu+PI.PI.#9.#9.cp.cp.[3+w7+|5+[3+[3+[3+[3+|5+w7+j}+j}+j}+j}+j}+j}+j}+j}+(s.{t.j}+j}+aq.(s.aq.j}+%0+%0+$B#@9.@9.$B#%0+%0+xX%_r+M7.$B#$B#$B#%0+M7.xX%_r+M7.%0+%0+M7._r+xX%_r+N7.N7.M7.M7.N7.N7._r+N7.N7.N7.N7.N7.N7.N7.N7.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#M7.M7.M7.M7.M7.M7.M7.M7.@9.@9.@9.$B#$B#%0+M7.N7.%0+@9.@9.%0+xX%O7.N7.$B#q3.q3.q3.q3.q3.q3.q3.q3.v4.<3+q3.:(+:(+q3.0q.v4.@9.@9.@9.@9.@9.@9.@9.@9.,X@@9.M7._r+_r+M7.@9.,X@eO@@9.$B#%0+%0+$B#@9.eO@$B#$B#@9.eO@eO@)Z%,X@,X@,H.:(++9.bp.,H.q3.:(+bp.:(+,H.q3.q3.,H.:(++9.bQ#bp.bp.bp.bp.bp.bp.bp.bp.:(+:(+:(+:(+:(+:(+:(+:(+,H.:(+:(+:(+,H.q3.0q.<3+0q.q3.q3.q3.,H.,H.:(+:(+bp.bp.bp.bp.bp.bp.bp.bp.,H.o&=j(#+9.,H.bp.bp.q3.o&=o&=o&=o&=o&=o&=o&=o&=bp.bp.bp.bp.bp.bp.bp.bp.:(+:(+:(+:(+:(+:(+:(+:(+o&=o&=bQ#bQ#+9.bp.bp.bp.:(+:(+:(+:(+:(+:(+:(+:(+bQ#+9.bp.,H.,H.bp.+9.bQ#av#av#bp.bp.bp.bp.p3.p3.+T+[(+ :*}o=Sx&Sx&Sx&It&p3.bQ#o&=bQ#+9.bp.+9.o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bp.+9.bQ#o&=o&=bQ#+9.bp.o&=o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+bQ#bp.bp.o&=Q+&bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#Q+&j(#j(#b,+b,+o&=o&=D6.D6. :*}o=}o=p3.w5.eO@@9.$y#Ao=q' M{+:m+&/;*/;=/;/&$-/;Kg=7);;/;:!;5X-h,;*o=:<-T3 f5 R3 :u 7J@s[ t[ vb Vr #, n| 7, /,@VH W:@W:@WA WA ^|@(|@'8@>8@Kv Kv Kv &E &E u1$u1$u1$&E Nt%GJ%Nt%&E Kv u1$GJ%Nt%Nt%Nt%u1$u1$u1$&E &E Kv Kv Eu Eu vR@vR@$4@$4@-! -! -! -! tG tG sG sG r[@r[@r[@r[@r[@r[@r[@r[@_|@_|@_|@_|@:|@:|@:|@:|@/|@/|@^|@@~ WA YA a~ 1f kI@YA @~ @~ WA a~ YA WA YA YA YA a~ a~ 1f 1f 1f f1#ew dw xy xy dw ew f1#e1#d1#d1#/M ]M 6q#6q#bj#EL#LN#LN#EL#/i&zz#_Q#/i&DL%~m#.p@EL#EL#EL#S8#=k&$/;m;;^f@^f@$/;li&8j&');>6#t&*t&*=3#SJ#O8#;6#Dd#;6#;6#;6#;6#Dd#zg#O8#MH#zg#MH#vg#]M d1#d1#/M /M d1#e1#f1#ew ew e1#/M ]M ]M /M e1#e1#e1#f1#Lz =p@^|@/|@_|@[|@<|@$4@$4@$4@Eu Eu Kv Kv &E u1$Nt%Nt%=E =E =E =E =E =E =E =E i0$=E *E }g -E -! tG tG tG rG X:@t! t! +~ ;! (7 Y:@Y:@;! ;! ]|@(7 /d@/d@;! /d@+L@.9 .9 @A@uR@UE@Y=#ir#Ut&tq=qR#5N=^T#^m >p I~#Ho=k:*/|$Ra-ce-g:*2u-Kj-@f*s7-%V=Pl&>/;,/;gX.h;#<(+<(+E6..9.-Z+#:+n3.n3.h;#sQ@<(+<(+sQ@sQ@h;#<(+.9.0+6g.$' qK+k4@p2@IV.k4@j(+jM#mO#k4@IV.IV.k4@k4@mO#=)+U^$+5-A{+[o==)+[o=A{+=)+,S#,S#uC#[o=U^$uC#KD=xr*&s*=^@=^@=^@=^@&s*xr*&s*&s*&s*&s*&s*&s*&s*&s*uG#uG#uG#uG#uG#uG#uG#uG#&r=*r=uG#vu#vu#N:**r=&r==Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+dr=&b=iM#iM#=Z+o!#o!#dr=uG#uG#uG#uG#uG#uG#uG#uG#*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#*r=*r=*r=*r=*r=*r=*r=*r=*r=sX%S`%S`%&r=*r=&r=S`%*r=*r=*r=*r=*r=*r=*r=*r=&b=&b=iM#yE#iM#l]#dr=o!#&b==Z+dr==Z+iM#yE#iM#l]#o!#=Z+l]#&b=&b=l]#=Z+o!#=Z+=Z+=Z+=Z+=Z+=Z+=Z+uq*>0+>0+>0+>0+>0+>0+>0+>0+u.@u.@u.@u.@u.@u.@u.@o2@zi.';$US+23+OP*x{+[f.u!=x{+x{+x{+x{+x{+x{+x{+x{+8P.B9.B9.Bv&Av&&, &, 0, &, 0, ~h&>S%~h&&, Bv&8P.c=+y{+d;+k#@wE*wE*wE*4,+y{+k#@jk@jk@wE*o2@", "xX%N7._r+x5.is@O7.N7.xX%xX%xX%xX%xX%xX%xX%xX%cp.#9.Hu+VW.9, VW.8v.Hu+cp.#9.#9.[3+w7+w7+cp.Hu+cp.#9.Hu+8v.8v.Hu+#9.cp.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.w7+[3+#9.PI.PI.#9.[3+w7+j}+j}+{t.{t.{t.aq.aq.aq.{t.{t.{t.{t.{t.{t.{t.{t._r+N7.%0+$B#$B#%0+N7._r+N7.N7.M7.M7.M7.%0+%0+%0+_r+M7.$B#%0+M7.N7.M7.$B#M7.N7._r+_r+N7.M7.$B#eO@$B#$B#$B#$B#$B#$B#$B#$B#$B#%0+N7._r+_r+N7.%0+$B#eO@$B#%0+N7.N7.%0+$B#eO@eO@@9.$B#%0+M7.M7.M7.%0+$B#$B#$B#$B#$B#$B#$B#$B#M7.M7.%0+%0+$B#$B#@9.@9.q3.0q.v4.#k.#k.v4.0q.q3.:(+q3.v4.F6.F6.v4.q3.:(+@9.@9.@9.@9.@9.@9.@9.@9.)Z%eO@eO@@9.$B#$B#%0+%0+'Z%p!#2p%p!#'Z%,X@'Z%p!#M7.%0+@9.eO@)Z%eO@@9.$B#,H.,H.:(+bp.bp.bp.:(+,H.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.+9.bp.:(+:(+,H.,H.q3.0q.:(++9.bQ#bp.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.:(++9.bp.,H.q3.:(+bp.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+0q.0q.0q.0q.0q.0q.0q.0q.bp.bp.bp.bp.bp.bp.bp.bp.bp.q3.<3+0q.:(+bp.,H.<3+0q.q3.q3.q3.,H.,H.:(+:(+,H.bp.bQ#bQ#bp.:(+:(++9.*T#av#bp.:(+:(+,H.N7+N7+[(++T+C6.C6.}>#Gn=Sx&(r+t4.:(+0q.q3.bp.o&=o&=bQ#o&=bQ#+9.bp.bp.+9.bQ#o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#:(+:(+:(+bp.bp.+9.+9.+9.b,+b,+o&=o&=bQ#bQ#bQ#bQ#j(#b,+b,+o&=bQ#bQ#+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.:^+%U*WN.pt+pt+w5.:^+o&=p!# W=l1+ng.j=&U@@kt=MS='/;#r D0-L9-g.@F0-C8-5';_1-6o=U=#VO-@l R3 R3 7J@Yk Yk t[ e5 `3 :} 36 +' /,@Y:@+~ (|@_|@(|@(|@'8@/0@<|@$4@Eu Kv &E &E &E &E u1$Nt%Nt%Nt%GJ%GJ%*L%*L%Eu Kv u1$Nt%Nt%u1$Kv Eu Kv Kv Eu Eu vR@vR@vR@$4@-E -! tG tG -E -E sG >b@r[@>b@rG tG tG rG >b@r[@_|@:|@:|@:|@:|@(|@@~ WA ^|@^|@@~ @~ WA WA YA YA YA a~ a~ 1f 1f a~ a~ YA YA a~ 1f kI@kI@kI@kI@1f xy ew f1#f1#dw xy ew e1#e1#/M 6q#6q#]M 6q# t#SJ#ej#%)&20&S(&$0@x~&C/&]W=]W={W=20&GY-U#;L,&L,&8`%J+*^f@S^;S^;qs=');8j&@A&-3#-3#Dd#;6#;6#Zo@:f@FN# l&Z+*;6#zg#zg#zg#Dd#;6#zg#SJ#bj#]M ]M ]M ]M /M e1#e1#e1#e1#e1#e1#e1#e1#d1#f1#ew ew f1#ew Lz =p@_|@:|@[|@<|@vR@Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$i0$i0$i0$i0$i0$i0$i0$i0$*E *E *E *E }g -E -! tG rG >b@X:@+~ W:@W:@+~ +~ Y:@;! ]|@/d@ 9 +L@.9 @A@+L@@A@bP@bP@bP@[`@Cv@Y=#ir#0u#tq=pR#pR#5N=(p=^m {t 2g x3-Ui-lI-e:*yx=K6*z0-@c-0+>S%>S%~h&&, Av&&, 0, {h&&, Av&&, 0, {h&0, U*@xE*x{+[f.x{+US+';$US+23+>].>].u`.u`.HV.HV.u!=u!=&, Av&Bv&8P.8P.8P.B9.Bv&&, &, &, &, &, &, &, &, yi.5,+ X+ X+$' IV.k(+%u.k4@mO#mO#jM#5,+$' ", "xX%N7._r+x5.is@O7._r+xX%xX%xX%xX%xX%xX%xX%xX%#9.PI.Hu+VW.VW.VW.8v.Hu+#9.PI.PI.cp.|5+|5+#9.8v.cp.#9.Hu+8v.8v.Hu+#9.cp.PI.PI.PI.PI.PI.PI.PI.PI.#9.#9.#9.#9.#9.#9.#9.#9.|5+[3+PI.Hu+Hu+PI.[3+|5+j}+j}+{t.{t.{t.aq.aq.aq.j}+j}+j}+j}+j}+j}+j}+j}+N7.N7.M7.M7.M7.M7.N7.N7.N7.N7.M7.M7.M7.%0+%0+%0+N7.M7.%0+M7._r+_r+M7.$B#$B#%0+M7.N7.M7.%0+$B#@9.$B#$B#$B#$B#$B#$B#$B#$B#$B#%0+N7._r+_r+N7.%0+$B#$B#%0+M7.M7.M7.M7.%0+$B#@9.@9.$B#%0+M7.%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#M7.M7.%0+%0+$B#$B#@9.@9.q3.0q.0q.<3+<3+0q.0q.q3.,H.q3.<3+v4.v4.<3+q3.,H.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.$B#$B#$B#@9.)Z%,X@)Z%eO@@9.)Z%'Z%M7.%0+@9.eO@)Z%eO@@9.$B#,H.,H.:(+bp.bp.bp.:(+,H.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.bp.bp.bp.bp.:(+:(+:(+0q.:(++9.bQ#bp.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.:(++9.bp.,H.q3.:(+bp.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.,H.0q.q3.bp.+9.:(+q3.q3.q3.,H.,H.:(+:(+:(+bp.,H.bp.bQ#bQ#bp.:(+:(++9.av#av#bp.bp.bp.:(+w5.w5.It&}o= :*[(+}>#Gr&Gn=}o=t4.:(+q3.q3.bp.o&=o&=bQ#o&=bQ#+9.bp.bp.+9.bQ#o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bp.bp.bp.+9.+9.bQ#bQ#bQ#b,+b,+o&=o&=bQ#bQ#bQ#+9.o&=o&=o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.+9.bQ#bQ#bQ#D6.J7.Ba@(r+(r+w5.p3.bQ#o&=eO@T[&@~.j=&:c$!/;CP.~/;y/@^_$6T.E0-c@#S,;a!;B,;*o=6o=l%#@l R3 R3 :u []#s[ Yk vb 7v :} 36 +' /,@;! W:@(|@(|@(|@(|@b~ /0@$4@vR@Eu &E u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%GJ%GJ%Kv &E u1$Nt%Nt%u1$&E Kv Kv Kv Eu Eu vR@vR@vR@vR@-! tG sG sG -! -! rG r[@r[@>b@rG sG sG rG >b@r[@_|@_|@:|@:|@_|@/|@@~ WA ^|@^|@@~ @~ WA WA YA YA YA a~ 1f 1f 1f 1f a~ YA WA YA a~ kI@')#B_#B_#B_#dw f1#e1#e1#f1#f1#d1#]M d1#]M 6q#6q#6q#bj#SJ#-3#C/&20&7^&x~&62&GY-1>&1>&1>&C-&C-&sT=C-&1>&{/;,T=lm&q^;h^;h^;9j&9j&;d@VC&=3#=3#;6#;6#Zo@Zo@FN#FN#;6#Dd#zg#O8#O8#Dd#;6#Zo@MH#OH#bj#6q#6q#6q#/M e1#e1#e1#e1#e1#e1#e1#e1#e1#d1#f1#ew ew f1#ew Lz =p@:|@:|@<|@$4@vR@Kv &E u1$u1$u1$u1$u1$u1$u1$u1$u1$i0$i0$i0$i0$i0$i0$i0$i0$*E =E =E =E *E -E -! tG rG r[@t! W:@W:@W:@W:@+~ ]|@]|@(7 /d@ 9 +L@+L@.9 +L@@A@bP@uR@uR@b.#j$#Z=#N~#u_$5N=^T#^T#(p=h_*1g {t Io=|6-=h-gh*|x=yx=K6*Wi-u1*>+-rR#%V=.4.]/;]/;h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#.9..9..9..9.<(+<(+<(+<(+<(+<(+.9..9.):.):.):.8@vR@Eu Kv &E u1$Nt%Nt%u1$&E &E &E &E u1$u1$Nt%Nt%u1$u1$Nt%GJ%GJ%Nt%u1$u1$Kv Kv Kv Eu Eu vR@vR@vR@-! sG >b@>b@sG sG >b@X:@r[@>b@rG rG rG rG >b@r[@_|@_|@_|@_|@(|@/|@@~ WA ^|@^|@@~ @~ WA WA YA YA a~ a~ 1f kI@kI@1f a~ a~ @~ WA a~ kI@B_#QT@!)#!)#dw f1#/M /M d1#/M 6q# t#6q#bj#bj#bj#bj#OH#zg#2j=DV=NN=:~;Km&)~;hU=xt=}r&//;}r&a4&4j&hU=LY%2,;8U%D-&P);O**9j&2j=2j=>6#=3#;6#;6#:f@:f@:f@FN#'Y@FN#MH#MH#LH#MH#MH#zg#Dd#;6#OH#vg#bj#bj# t#bj#/M f1#e1#e1#e1#e1#e1#e1#e1#e1#/M e1#f1#ew f1#dw LZ$1r@[|@<|@<|@vR@Eu Kv &E u1$u1$u1$u1$u1$u1$u1$u1$u1$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$=E *E }g -! tG r[@X:@t! W:@Y:@Y:@Y:@Y:@(7 /d@/d@ 9 9 O9 O9 +L@+L@@A@uR@[`@b.#i@#Y=#P~#0u#tq=(p=]T#0Q=]T#0Q=/o {t Y4-Ui-HP-gh*|x=g:*/i*Q2*Wi-U8 .Y-(/;wi.WF.oN*v5.v5.v5.v5.v5.v5.v5.v5.h;#h;#h;#h;#h;#h;#h;#h;#g|.n.>n.-~@}m.}m.}m.}m.-~@Av&ZQ.ZQ.Bv&Bv&ZQ.ZQ.Av&Av&Av&Av&Av&Av&Av&Av&yi.6g.IV.IV.k4@k4@k4@mO#mO#mO#k4@IV.IV.IV.IV.k4@mO#A{+U^$[o==)+=)+=)+[o=[o=uC#uC#uC#,S#,S#,S#,S#,S#&s*&s*&s*&s*&s*&s*&s*&s*=^@=^@&s*xr*xr*&s*=^@=^@N:*N:*N:*N:*N:*N:*N:*N:*vu#vu#vu#N:*N:*uG#uG#uG#l]#l]#l]#l]#l]#l]#l]#l]#^u=^u=o!#dr==Z+l]#&b=iM#*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=N:*N:*N:*uG#uG#*r=*r=*r=sX%*r=*r=&r=S`%S`%&r=uG#uG#*r=*r=&r=&r=*r=*r=uG#*r=uG#*r=&r=S`%S`%*r=vu#&b=&b=&b=iM#iM#yE#yE#yE#l]#l]#l]#=Z+=Z+=Z+dr=dr=l]#=Z+dr=dr=dr=dr==Z+l]#dr=dr=dr=dr=dr=dr=dr=xr*Bv&-~@>n.>n.-~@}m.;n.!D+!D+;n.-~@;n.>n.!D+>n.=~@17*OP*[f.[f.OP*23+x{+u!=OP*OP*OP*23+23+US+US+US+~h&~h&{h&{h&{h&~h&>S%%' &, &, &, &, &, &, &, u.@lh.m}+^u=^u=m}+m}+^u=dr=o!#o!#o!#^u=^u=^u=", "xX%xX%xX%O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%Hu+Hu+Hu+8v.8v.8v.8v.Hu+PI.8v.VW.8v.PI.#9.Hu+VW.cp.#9.Hu+8v.8v.Hu+#9.cp.8v.8v.8v.8v.8v.8v.8v.8v.PI.PI.PI.PI.PI.PI.PI.PI.#9.PI.Hu+8v.8v.Hu+PI.#9.j}+j}+{t.{t.{t.aq.aq.aq.l#@l#@l#@l#@l#@l#@l#@l#@M7.N7.xX%O7.O7.xX%N7.M7.N7.N7.M7.M7.M7.%0+%0+%0+%0+%0+M7._r+O7.O7.N7.$B#)Z%)Z%eO@@9.$B#$B#%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#%0+N7._r+_r+N7.%0+$B#xX%_r+M7.%0+%0+M7._r+xX%%0+M7.M7.M7.%0+$B#@9.eO@$B#$B#$B#$B#$B#$B#$B#$B#M7.M7.%0+%0+$B#$B#@9.@9.0q.q3.:(+bp.bp.:(+q3.0q.0q.q3.:(+bp.bp.:(+q3.0q.@9.@9.@9.@9.@9.@9.@9.@9.%0+%0+$B#$B#@9.eO@eO@)Z%x5.xX%M7.M7.N7.M7.$B#eO@%0+$B#$B#@9.@9.eO@eO@eO@:(+:(+bp.bp.bp.:(+,H.q3.:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.,H.:(+bp.bp.bp.q3.:(++9.bp.,H.q3.:(+bp.:(+:(+:(+:(+:(+:(+:(+:(+,H.:(++9.bp.,H.q3.:(+bp.bp.bp.bp.bp.bp.bp.bp.bp.,H.,H.:(+:(+:(+:(+bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bQ#+9.+9.+9.bQ#bQ#+9.+9.:(+:(+bp.bp.+9.+9.+9.bQ#,H.bp.bQ#bQ#bp.:(+:(++9.av#av#+9.+9.bQ#o&=t4.t4.pt+(r+It&It&tH.tH.tH.}o=D6.+9.bp.+9.+9.bQ#bQ#bQ#bQ#bQ#+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=b,+b,+b,+o&=o&=bQ#bQ#bQ#+9.+9.+9.bp.bp.+9.+9.bQ#o&=o&=b,+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#:(+bp.bp.+9.bQ#o&=o&=o3.n4@!y+}o=It&62.J!.:(+:(++9.{q%ZT#)>%zh.b>$r9=Y##_/;b5 ^_$]_$Hw&Tj-:/;5';Jg 6k u4 8>#*[ wf=2k=wf=R3 :u s[ e5 <} 36 /,@(,@/d@;! @~ ^|@^|@/|@b~ >8@vR@Eu Kv u1$Nt%Nt%Nt%Nt%Kv Kv Kv &E &E u1$u1$u1$Nt%Nt%GJ%GJ%GJ%GJ%Nt%Nt%&E &E Kv Kv Eu Eu vR@vR@tG rG X:@X:@>b@>b@r[@X:@r[@>b@>b@>b@>b@>b@>b@r[@_|@_|@_|@(|@/|@^|@@~ WA ^|@^|@@~ @~ WA WA YA YA a~ 1f 1f kI@kI@1f 1f a~ YA a~ kI@B_#QT@QT@QT@QT@dw f1#/M ]M /M ]M t#OH# t# t#vg#vg#vg#MH#Z+*6#Zo@Zo@:f@:f@FN#FN#'Y@FN#h$#LH#LH#LH#LH#MH#MH#MH# t#bj#bj# t#vg#bj#d1#ew e1#e1#e1#e1#e1#e1#e1#e1#]M d1#f1#ew ew xy =p@X~#$4@$4@vR@Eu Kv &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$i0$i0$i0$i0$i0$i0$i0$i0$1C%1C%1C%i0$=E }g -! tG X:@t! +~ W:@Y:@;! ;! ;! 9 9 9 9 O9 O9 O9 O9 .9 RT@[`@b.#i@#j$#P~#O~#Ut&pR#h_*k`&+6*k`&k`&@p=/p=k:*PO-D[*`q qg*5' /i*Q2*h_*Nk@c*-b,+{e.aP.aR#o3.o3.o3.o3.o3.o3.o3.o3.sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@n.0t-uE.-~@'W+{y%>n.-~@`b&!D+>n.;n.-~@-~@;n.;n.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.6g.6g.IV.IV.IV.IV.IV.IV.IV.IV.IV.IV.IV.IV.IV.IV.IV.A{+A{+U^$[o=[o=[o=U^$U^$=)+=)+[o=[o=U^$U^$A{+A{+&s*&s*&s*xr*xr*uq*uq*,C+=^@&s*&s*&s*&s*&s*&s*=^@N:*N:*N:*N:*N:*N:*N:*N:*vu#vu#vu#N:*N:*uG#uG#uG#&b=&b=&b=&b=&b=&b=&b=&b=m}+m}+^u=o!#=Z+l]#&b=&b=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#uG#*r=*r=&r=&r=sX%&r=*r=sX%CI#CI#sX%uG#uG#uG#uG#*r=*r=uG#uG#uG#*r=uG#*r=&r=S`%S`%*r=vu#l]#l]#&b=&b=iM#iM#iM#iM#l]#l]#l]#=Z+=Z+=Z+dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=xr*Bv&;n.>n.>n.;n.;n.!D+B#@!D+;n.-~@;n.>n.!D+>n.=~@J> OP*[f.[f.OP*OP*[f.HV.u`.HV.u!=x{+23+';$d #u]#{h&~h&~h&~h&>S%%' X@$X@$&, &, &, &, &, &, &, u.@wr*^u=^u=m}+XT#xE#o!#l]#dr=dr=o!#^u=m}+xE#", "O7.O7.O7.xX%xX%xX%O7.xX%xX%xX%xX%xX%xX%xX%xX%8v.8v.8v.Hu+Hu+Hu+Hu+8v.PI.8v.9, VW.Hu+PI.Hu+VW.cp.#9.Hu+8v.8v.Hu+#9.cp.8v.8v.8v.8v.8v.8v.8v.8v.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.Hu+Hu+Hu+Hu+PI.PI.j}+j}+{t.{t.{t.aq.aq.aq.{t.{t.{t.{t.{t.{t.{t.{t.M7.N7.xX%O7.O7.xX%N7.M7.N7.N7.M7.M7.M7.%0+%0+%0+%0+%0+%0+_r+O7.x5._r+M7.eO@eO@eO@eO@@9.$B#%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#%0+N7._r+_r+N7.%0+$B#xX%_r+M7.%0+%0+M7._r+xX%%0+M7.M7.M7.%0+$B#@9.eO@$B#$B#$B#$B#$B#$B#$B#$B#M7.M7.%0+%0+$B#$B#@9.@9.0q.q3.:(+bp.bp.:(+q3.0q.<3+q3.:(+bp.bp.:(+q3.<3+@9.@9.@9.@9.@9.@9.@9.@9.%0+%0+$B#$B#@9.eO@eO@)Z%O7._r+%0+%0+M7.%0+@9.)Z%$B#$B#$B#$B#@9.@9.eO@eO@bp.bp.bp.bp.bp.:(+q3.0q.:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.<3+<3+0q.q3.q3.,H.,H.:(+,H.:(++9.bp.,H.q3.:(++9.:(+:(+:(+:(+:(+:(+:(+:(+,H.:(++9.bp.,H.q3.:(+bp.,H.,H.,H.,H.,H.,H.,H.,H.q3.,H.,H.:(+:(+bp.bp.+9.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.bQ#bQ#bQ#bQ#+9.bQ#bQ#:(+:(+bp.bp.+9.+9.+9.bQ#,H.bp.bQ#bQ#bp.:(+:(++9.av#av#+9.+9.bQ#o&=t4.t4. :*}o=}o=It&Sx&ht=ht=(r+:^+bQ#o&=bQ#bQ#+9.+9.+9.+9.+9.bQ#bQ#bQ#bQ#+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=b,+b,+b,+bQ#bQ#bQ#+9.+9.+9.bp.bp.:(+bp.bp.+9.bQ#bQ#o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bp.bp.+9.+9.bQ#bQ#o&=t4.n4@!y+}o=}o=62.J!.ns#,H.o&=/W%bv#7;@qS ,!.3!$;D={0 xn-E0-%A$St&Ry-|';4';yX-E[*9>#86-,<-wf=2k=z_#2k=R3 []#vb 'p n| +' /,@ 9 (7 WA @~ @~ ^|@-8@>8@$4@vR@Kv &E u1$Nt%u1$u1$Kv Kv Kv &E &E u1$u1$u1$GJ%GJ%Nt%Nt%Nt%Nt%GJ%GJ%&E &E &E Kv Kv Eu Eu Eu tG >b@X:@t! r[@>b@r[@X:@>b@r[@r[@r[@r[@r[@r[@>b@:|@_|@(|@/|@^|@@~ @~ @~ ^|@^|@@~ @~ WA WA YA YA 1f 1f kI@kI@kI@kI@1f 1f B_#B_#QT@QT@QT@B_#')#')#dw f1#/M ]M /M ]M t#OH#vg#OH#SJ#SJ#LH#zg#Qm@M,&GY-}/;Fy@X;;t>;K*;pA&K*;Lz=|/;K*;t>;#7&c5&z-&B-&2>&@b@u&*u&*N,&N,&Qm@Z+*:f@:f@:f@:f@'G 'G 'G :f@B&#O8#MH#LH#SJ#OH#vg# t#bj#6q#6q#bj# t#bj#d1#ew e1#e1#e1#e1#e1#e1#e1#e1#]M d1#ew dw xy LZ$W~#}A vR@vR@Eu Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$i0$i0$i0$i0$i0$i0$i0$i0$1C%1C%i0$i0$*E -E tG sG +~ +~ +~ W:@Y:@;! ]|@(7 9 9 O9 O9 O9 O9 +L@+L@.9 bP@b.#i@#j$#Z=#O~#85*85*5N=h_*k`&+6*+6*s_$/p=6U%OO-T^$ Y-Xh-Jj-Yh-g:*O}*UE@H9-~U.uG#+9.lO#{S*n3.n3.n3.n3.n3.n3.n3.n3.sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@<(+<(+<(+.9..9.):.):.):.):.):.):.n.`b&!D+>n.;n.;n.;n.;n.>n.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.6g.6g.IV.IV.IV.IV.IV.IV.IV.IV.IV.IV.IV.IV.IV.IV.IV.U^$U^$[o=[o=[o=U^$A{+A{+=)+=)+[o=U^$A{+A{++5-+5-=^@=^@&s*xr*xr*uq*,C+,C+&s*&s*&s*=^@=^@&s*&s*&s*N:*N:*N:*N:*N:*N:*N:*N:*vu#vu#vu#N:*N:*uG#uG#uG#&b=&b=&b=&b=&b=&b=&b=&b=m}+^u=^u=o!#dr==Z+l]#&b=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=sX%sX%sX%sX%sX%&r=*r=sX%CI#CI#sX%uG#*r=uG#uG#uG#uG#uG#uG#*r=*r=uG#*r=&r=S`%S`%*r=vu#=Z+=Z+=Z+=Z+l]#l]#&b=&b=l]#l]#l]#=Z+=Z+=Z+dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=xr*Av&!D+`b&`b&!D+!D+B#@'W+!D+;n.-~@;n.>n.!D+>n.=~@zi.23+x{+x{+OP*OP*[f.HV.x{+x{+OP*OP*23+US+';$';$&, 0, 0, {h&~h&~h&>S%>S%&, &, &, &, &, &, &, u.@xr*dr=o!#xE#fX.fX.m}+dr==Z+dr=o!#^u=m}+XT#", "O7.x5.O7.xX%_r+xX%x5.xX%xX%xX%xX%xX%xX%xX%xX%VW.VW.8v.Hu+PI.Hu+Hu+8v.#9.Hu+9, VW.8v.PI.Hu+8v.cp.#9.Hu+8v.8v.Hu+#9.cp.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.PI.#9.#9.PI.PI.PI.j}+j}+{t.{t.{t.aq.aq.aq.{t.{t.{t.{t.{t.{t.{t.{t.N7.N7._r+_r+_r+_r+N7.N7.N7.N7.M7.M7.M7.%0+%0+%0+N7.M7.%0+M7.xX%x5.O7.xX%$B#$B#@9.@9.@9.$B#%0+M7.$B#$B#$B#$B#$B#$B#$B#$B#$B#%0+N7._r+_r+N7.%0+$B#N7.N7.M7.%0+%0+M7.N7.N7.$B#%0+%0+M7.%0+$B#@9.@9.$B#$B#$B#$B#$B#$B#$B#$B#M7.M7.%0+%0+$B#$B#@9.@9.0q.q3.q3.,H.,H.q3.q3.0q.<3+0q.,H.:(+:(+,H.0q.<3+@9.@9.@9.@9.@9.@9.@9.@9.$B#$B#$B#@9.@9.@9.@9.@9.N7.%0+@9.@9.$B#$B#eO@,X@@9.$B#$B#%0+$B#@9.eO@)Z%bp.bp.+9.bp.bp.,H.q3.0q.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.0q.0q.q3.q3.q3.q3.,H.,H.:(+bp.bp.:(+q3.q3.:(++9.:(+:(+:(+:(+:(+:(+:(+:(+,H.:(++9.bp.,H.q3.:(+bp.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.,H.:(+:(+bp.+9.+9.o&=o&=o&=o&=o&=o&=o&=o&=bp.bp.bp.bp.bp.bp.bp.bp.bp.bQ#o&=bQ#+9.bp.+9.o&=,H.:(+:(+:(+bp.bp.+9.+9.,H.bp.bQ#bQ#bp.:(+:(++9.av#av#bp.+9.+9.+9.:^+D6.+T+[(+ :*It&ht=ht=ht=It&:^+o&=j(#b,+bQ#+9.+9.+9.bp.+9.bQ#o&=o&=bQ#+9.bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.bQ#bQ#o&=o&=o&=bQ#bQ#bQ#+9.+9.bp.bp.bp.bp.bp.bp.+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#+9.+9.+9.:^+%U*Ba@}o=}o=U%+62.ns#zy.b,+qK#(s.6S.df.@Z e[$gE=1/;[!;0; L9--|@Mj d2-2/;b{;,';RJ#9>##D=wf=R3 z_#2k=R3 []#t[ {1 :} 36 7, +L@/d@YA WA @~ ^|@-8@>8@<|@$4@Eu Kv &E &E &E &E &E &E &E &E u1$u1$Nt%Nt%GJ%Nt%u1$u1$u1$u1$Nt%GJ%u1$&E &E &E Kv Kv Eu Eu -! rG X:@t! X:@>b@>b@r[@>b@r[@X:@X:@X:@X:@r[@>b@:|@_|@/|@^|@@~ @~ @~ @~ ^|@^|@@~ @~ WA WA YA YA 1f kI@kI@')#')#kI@kI@1f !)#))#))#))#!)#B_#')#kI@f1#d1#]M 6q#]M ]M t#OH#vg#SJ#MH#O8#zg#Dd# l&K&&GY-}/;PB&Q#;3/;t>;x$;t>;`y=pA&4/;5/;Q#;}6&c5&'=&~t=@b@u&*u&*N,&N,&Qm@Z+*:f@:f@'d@'d@[Q%Xx&Xx&Si@gt@zg#O8#MH#SJ#vg#bj#6q#bj#6q#]M ]M bj#6q#/M f1#e1#e1#e1#e1#e1#e1#e1#e1#/M f1#dw Lz LZ$1r@cN@^Y@Kv Kv Kv &E &E u1$u1$Nt%u1$u1$u1$u1$u1$u1$u1$u1$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$i0$*E }g tG rG >b@W:@W:@W:@W:@Y:@]|@(7 /d@ 9 9 9 O9 +L@+L@.9 .9 @A@uR@UE@j$#Y=#ir#u_$pR#pR#^T#]T#k`&+6*s_$T8 0C=Nj=CK-.) .) yx=5' qg*Ra-ir#S2*ve.~H o&=q3.$t.aR#h;#h;#h;#h;#h;#h;#h;#h;#sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@n3.h;#h;#sQ@<(+.9.):.):.):.):.):.n.;n.-~@-~@;n.;n.Bv&ZQ.ZQ.Av&Av&ZQ.ZQ.Bv&Bv&Bv&Bv&Bv&Bv&Bv&Bv&%b=u.@mO#k4@k4@k4@IV.IV.IV.IV.IV.k4@mO#mO#k4@IV.IV.[o=[o==)+=)+=)+[o=U^$A{+,S#,S#uC#uC#=)+[o=[o=U^$=^@=^@=^@&s*xr*xr*uq*uq*xr*&s*=^@=^@=^@=^@&s*xr*N:*N:*N:*N:*N:*N:*N:*N:*vu#vu#vu#N:*N:*uG#uG#uG#l]#l]#l]#l]#l]#l]#l]#l]#dr=dr=dr==Z+=Z+=Z+l]#l]#*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=&r=sX%sX%S`%S`%S`%sX%*r=*r=&r=S`%S`%&r=uG#&r=*r=*r=uG#uG#*r=*r=&r=*r=uG#*r=&r=S`%S`%*r=vu#dr=dr=dr==Z+=Z+l]#l]#l]#l]#l]#l]#=Z+=Z+=Z+dr=dr=dr=dr==Z+l]#l]#=Z+dr=dr=dr=dr=dr=dr=dr=dr=dr=xr*{h&B#@{y%{y%`b&!D+B#@'W+!D+;n.-~@;n.>n.!D+>n.=~@zi.23+x{+OP*23+US+OP*[f.v]#v]#:{+d #';$US+23+OP*ZQ.Av&&, 0, 0, 0, &, &, &, &, &, &, &, &, &, u.@&s*dr=o!#m}+fX.fX.m}+o!#dr=o!#^u=m}+xE#XT#", "O7.is@x5._r+N7.xX%x5.xX%xX%xX%xX%xX%xX%xX%xX%9, VW.8v.PI.PI.PI.Hu+8v.cp.PI.VW.VW.Hu+PI.PI.Hu+cp.#9.Hu+8v.8v.Hu+#9.cp.PI.PI.PI.PI.PI.PI.PI.PI.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+#9.#9.cp.cp.cp.cp.#9.#9.j}+j}+{t.{t.{t.aq.aq.aq.j}+j}+j}+j}+j}+j}+j}+j}+N7.N7.M7.M7.M7.M7.N7.N7.N7.N7.M7.M7.M7.%0+%0+%0+xX%M7.$B#$B#N7.O7.is@is@N7.M7.%0+$B#@9.$B#%0+M7.$B#$B#$B#$B#$B#$B#$B#$B#$B#%0+N7._r+_r+N7.%0+$B#$B#%0+M7.M7.M7.M7.%0+$B#@9.@9.$B#%0+M7.%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#M7.M7.%0+%0+$B#$B#@9.@9.q3.0q.0q.<3+<3+0q.0q.q3.<3+0q.0q.q3.q3.0q.0q.<3+@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.$B#$B#$B#%0+@9.)Z%eO@$B#$B#@9.)Z%@9.$B#%0+%0+%0+@9.eO@,X@+9.+9.+9.+9.:(+,H.0q.<3+,H.,H.,H.,H.,H.,H.,H.,H.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.:(+:(+:(+:(+:(+:(+bp.bp.,H.0q.q3.:(+bQ#:(+:(+:(+:(+:(+:(+:(+:(+,H.:(++9.bp.,H.q3.:(+bp.:(+:(+:(+:(+:(+:(+:(+:(+0q.q3.,H.,H.bp.bp.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bp.bp.bp.bp.bp.bp.bp.bp.:(++9.o&=bQ#:(+,H.bp.o&=q3.q3.,H.,H.:(+:(+:(+bp.,H.bp.bQ#bQ#bp.:(+:(++9.av#av#bp.bp.bp.:(+w5.w5.+T+[(+ :*}o=Sx&tH.Gn=[(+p3.b,+Q+&Q+&o&=bp.bp.+9.bp.+9.bQ#o&=o&=bQ#+9.bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bp.bp.bp.+9.+9.bQ#bQ#bQ#bQ#+9.+9.+9.bp.bp.:(+:(++9.+9.+9.+9.bp.bp.bp.bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+o&=o&=bQ#+9.bp.bp.w5.&o@'X+Ba@ :*:{.U%+{S*ns#o&=DI#{t.U[&rS pS e[$(*&1! 6/;D^-W3 b!;Hw&_<-c';Z:*X,;M^#{}*J~#wf=7J@wf=R3 :u []#t[ /0#<} ,p n| .9 9 a~ YA WA ^|@-8@'8@[|@<|@$4@Eu Kv Kv Kv Kv u1$u1$u1$Nt%Nt%Nt%GJ%GJ%Nt%u1$&E Kv Kv &E u1$Nt%u1$u1$&E &E &E Kv Kv Kv -E sG X:@t! X:@>b@rG >b@>b@r[@X:@t! t! X:@r[@>b@:|@_|@/|@@~ WA WA @~ @~ ^|@^|@@~ @~ WA WA YA YA 1f kI@')#')#')#')#kI@1f !)#!)#))#))#))#!)#QT@B_#/M 6q# t# t#bj#bj# t#OH#vg#LH#Dd#;6#;6#;6#Zo@F-&GY-^V=qp&Q#;5/;Q#;#7&4/;`y=pA&4/;x$;#7&Q#;Q#;@U=2>&@b@u&*u&*N,&N,&Qm@Zo@'d@'d@Si@Si@EP#EP#+z&B&#$b@O8#O8#O8#MH#SJ# t#bj# t#6q#d1#d1#]M 6q#]M d1#e1#e1#e1#e1#e1#e1#e1#e1#d1#ew Lz G5@=p@yK ST@Lv &E &E &E u1$u1$u1$Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$i0$i0$i0$i0$i0$i0$i0$i0$=E =E *E }g -! sG r[@X:@;! Y:@Y:@Y:@Y:@]|@/d@O9 /d@/d@ 9 O9 +L@@A@@A@RT@@A@uR@i@#C&#Z=#N~#tq=(X%S2*]T#k`&+6*+6*t_$yD rg*qy= Y-AQ-.) yx=g:*d:*Yp s|*P2*;Z+kS.bQ#b,+JP-}d.h;#h;#h;#h;#h;#h;#h;#h;#<(+<(+<(+<(+<(+<(+<(+<(+h;#h;#h;#h;#sQ@sQ@sQ@sQ@):.n.;n.-~@-~@-~@-~@;n.B9.Bv&Av&&, &, Av&Bv&B9.Bv&Bv&Bv&Bv&Bv&Bv&Bv&%b=,0+jM#jM#mO#k4@k4@k4@IV.IV.k4@mO#jM#jM#mO#k4@IV.=)+uC#uC#uC#uC#=)+U^$U^$uC#=)+=)+=)+=)+[o=[o=[o==^@=^@=^@=^@=^@&s*&s*&s*xr*&s*=^@wr*wr*=^@&s*xr*N:*N:*N:*N:*N:*N:*N:*N:*vu#vu#vu#N:*N:*uG#uG#uG#=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+&b=&b=l]#l]#l]#=Z+=Z+=Z+*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=&r=sX%sX%*r=uG#uG#*r=sX%sX%*r=N:*S`%sX%*r=uG#uG#*r=sX%S`%*r=uG#*r=&r=S`%S`%*r=vu#=Z+=Z+l]#l]#l]#&b=&b=&b=l]#l]#l]#=Z+=Z+=Z+dr=dr=dr==Z+l]#&b=&b=l]#=Z+dr=dr=dr=dr=dr=dr=dr=dr=xr*{h&B#@{y%B#@!D+>n.!D+B#@!D+;n.-~@;n.>n.!D+>n.=~@zi.23+OP*23+';$d #';$23+u]#u]#d #d #';$';$US+US+ZQ.Av&&, 0, 0, Av&ZQ.Bv&&, &, &, &, &, &, &, u.@xE#2;@)~@)~@ V3 2v-.U-}{;_X-zn-@)#wf=Kj wf=R3 :u []#t[ 4' 'p :} ,p @A@O9 (7 ;! WA @~ _|@[|@:|@[|@<|@vR@Eu Eu Eu Eu u1$Nt%Nt%Nt%GJ%GJ%*L%*L%Nt%u1$Kv Eu Eu Kv u1$Nt%u1$u1$u1$&E &E Kv Kv Kv }g tG r[@t! r[@rG rG rG >b@r[@X:@+~ +~ X:@r[@>b@:|@_|@^|@WA WA WA WA @~ ^|@^|@@~ @~ WA WA YA YA 1f kI@')#')#')#')#kI@1f B_#B_#!)#))#))#))#))#))#bj#vg#SJ#OH# t# t#vg#SJ# t#LH#;6#Z+*Zo@;6#;6#,6#`>;8/;|w&73&e%&3@;/;;I>;9/;y-&Mx=##;:*;i;;O-;P#;2>&@b@u&**)&u&*u&* l&Zo@Si@Si@gt@gt@+z&+z&`o@$b@ p@LH#MH#O8#O8#LH#SJ#vg#vg#6q#e1#e1#d1#]M ]M /M e1#e1#e1#e1#e1#e1#e1#e1#e1#dw LZ$=p@W~#cN@QC ^G%&E u1$u1$u1$u1$Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$i0$i0$i0$i0$i0$i0$i0$i0$=E *E *E -E tG rG X:@t! ;! ;! Y:@Y:@;! (7 9 O9 (7 (7 9 O9 .9 @A@bP@bP@@A@[`@i@#C&#VE@O~#qR#^T#k`&+6*s_$s_$s_$0p=SE qy=zQ-.) Vm-.) -h-Xh-Z4-z, _2*m}+=>-bQ#uG#Q+&:t@JP-h;#h;#h;#h;#h;#h;#h;#h;#<(+<(+<(+<(+<(+<(+<(+<(+<(+sQ@sQ@h;#n3.v5.v5.o3.n.>n.-~@}m.}m.}m.-~@-~@B9.Bv&Av&&, &, Av&Bv&B9.Bv&Bv&Bv&Bv&Bv&Bv&Bv&%b=>0+5,+5,+jM#mO#mO#k4@k4@k4@mO#jM#5,+5,+jM#mO#k4@,S#,S#,S#,S#uC#=)+[o=U^$A{+A{+A{+A{+A{+A{+A{+A{+=^@=^@=^@wr*wr*wr*wr*wr*uq*&s*=^@wr*wr*=^@&s*uq*N:*N:*N:*N:*N:*N:*N:*N:*vu#vu#vu#N:*N:*uG#uG#uG#dr=dr=dr=dr=dr=dr=dr=dr=yE#yE#iM#&b=l]#=Z+=Z+dr=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=N:*N:*uG#uG#*r=*r=*r=&r=*r=N:*N:*uG#&r=&r=uG#vu#CI#S`%&r=*r=*r=&r=S`%CI#*r=uG#*r=&r=S`%S`%*r=vu#l]#&b=&b=&b=iM#iM#yE#yE#l]#l]#l]#=Z+=Z+=Z+dr=dr==Z+l]#&b=iM#iM#&b=l]#=Z+dr=dr=dr=dr=dr=dr=dr=xr*{h&B#@{y%`b&;n.-~@;n.>n.!D+;n.-~@;n.>n.!D+>n.=~@';$23+OP*US+d #:{+u]#';$u`.HV.u!=x{+23+';$u]#$.@Av&&, 0, 0, &, Av&Bv&8P.&, &, &, &, &, &, &, u.@#)+F8@m}+)~@^u=)~@dr=9<@m}+2;@m}+#+T+p3.bQ#o&=o&=+9.bp.+9.o&=,H.bp.+9.bQ#bQ#+9.bp.,H.bQ#bQ#+9.+9.bp.:(+:(+,H.+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.bp.+9.bQ#o&=o&=bp.bp.+9.+9.bQ#bQ#o&=o&=+9.+9.+9.+9.+9.+9.+9.+9.bp.bp.+9.+9.bQ#o&=o&=DI#)Z%0M.,X@,X@aR#aR#@k.@k.jX-NR*NR*bp.)Z%y}*ZT#9n=0/;a/;b/;c/;d/;Ew&e[@6(-R<*6);e/;xt$_;#B,#=)#K~#R3 uy @|#(o S} /0#'p <} n| +' VH fw ;! ;! W:@t! X:@r[@>b@sG -! }g *E =E =E =E =E =E =E =E =E =E &E &E u1$u1$u1$Nt%Nt%Nt%GJ%GJ%Nt%u1$Kv Eu vR@vR@vR@$4@<|@[|@[|@[|@[|@<|@$4@$4@$4@<|@<|@[|@[|@[|@r[@t! +~ t! r[@X:@+~ ;! +~ W:@W:@Y:@;! ]|@(7 (7 xy ew e1#e1#ew ew f1#d1#/M ]M 6q#bj# t# t# t# t#J`%f5&Ic&TJ#Fa#Fa#TJ##b@aj&Fa#Jw&nq&P8#TJ#Fa#Q8#f/;yS=32&[Z-g/;~=&%T=h/;_*;OB&Q%;e<&_*;z/&Q%;!=&]t=7U%Ls=Ls=4>&7s=*)&=3#zg#zg#gt@gt@B&#B&#+z&B&#$b@O8#O8#MH#LH#SJ#OH#vg#6q#]M /M d1#e1#e1#e1#d1#))#!)#QT@')#')#B_#QT@!)#QT@kI@@~ :|@vR@Kv Kv Kv &E &E &E &E &E &E &E &E Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%=E i0$1C%1C%GD%1C%i0$i0$*E }g -E tG rG r[@X:@t! +~ W:@;! (7 /d@/d@(7 (7 Y:@ 9 RT@[`@[`@uR@uR@[`@b.#i@#C&#Z=#P~#0u#pR#(p=s_$k`&t_$O}*O}*Js&SE gh*GD=V);JM=MZ-i/;j/;f>#:7.vu=vu=g|.h;#D6.:^+~Z%zU-h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#sQ@sQ@sQ@<(+<(+<(+<(+<(+.9.):.):.S%{h&&, ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.6g.,0+k4@IV.IV.mO#jM#k4@j(+jM#k4@IV.IV.mO#jM#mO#IV.jM#jM#jM#jM#jM#jM#jM#jM#mO#qK+$' j(+p2@5,+$' IV.=^@wr*#x+lh.lh.#x+wr*=^@uq*xr*=^@wr*wr*=^@xr*uq*fX.XT#m}+o!#dr=o!#^u=m}+dr=dr=dr=dr=dr=dr=dr=dr==Z+dr=o!#dr=l]#iM#&b==Z+iM#&b=l]#=Z+=Z+l]#&b=iM#&r=uG#N:*N:**r=&r=*r=N:*uG#uG#uG#uG#uG#uG#uG#uG#yE#l]#o!#o!#dr=l]#l]#l]#l]#l]#l]#l]#l]#l]#l]#l]#*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=*r=*r=uG#N:*N:*vu#iM#iM#&b=l]#=Z+dr=o!#^u=&b=&b=l]#l]#=Z+dr=dr=o!#l]#l]#l]#=Z+=Z+=Z+dr=dr=dr=o!#o!#dr=l]#l]#dr==^@u.@xE*17*17*J> zi.zi.nh.U*@xE*17*J> 17*U*@3<@`%@OP*OP*OP*OP*OP*OP*OP*OP*OP*';$:{+:{+d #US+US+J> ~h& ==cl.PN.cl.3P 3P PN.3P 3P .==)A&+y&+y&%z&A9.wr*m}+wr*m}+wr*m}+wr*m}+xr*dr=xr*dr=xr*dr=", "is@x5.O7.O7.O7.O7.O7.xX%x5.dD.dD.x5.xX%xX%xX%9, 8v.PI.Hu+8v.VW.Hu+#9.8v.Hu+Hu+Hu+PI.PI.#9.#9.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+8v.8v.Hu+Hu+Hu+PI.PI.PI.<4 <4 <4 <4 <4 <4 <4 <4 s3.<4 i% h% s3.s3.<4 i% #9.#9.#9.#9.#9.#9.#9.#9.PI.PI.PI.PI.#9.#9.cp.cp.N7.M7.$B#M7._r+_r+M7.@9.N7._r+O7.xX%N7.M7._r+c+#L7.15*15*86=WN.86=9M.86=86=9M.-G.9M.86=]U=^U==G.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+$B#$B#_r+M7.$B#%0+N7._r+M7.%0+$B#$B#$B#$B#$B#$B#$B#$B#@9.@9.$B#$B#%0+%0+M7.M7.M7.%0+$B#$B#M7.M7.%0+$B#$B#%0+M7.M7.M7.$B#@9.eO@@9.%0+M7.%0+@9.eO@@9.%0+q3.:(+bp.:(+q3.<3+0q.,H.:(+:(+:(+:(+:(+:(+:(+:(+bp.bp.bp.:(+,H.q3.<3+v4.,H.,H.,H.,H.,H.,H.,H.,H.<3+q3.,H.,H.0q.0q.,H.bp.bp.bp.bp.:(+,H.,H.,H.q3.bp.:(+q3.0q.0q.q3.:(+bp.:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.,H.:(+:(+bp.bp.bp.bp.:(+:(+,H.,H.:(+:(+bp.bQ#bp.q3.,H.bp.+9.,H.0q.bp.bp.bp.bp.bp.bp.bp.bp.eO@eO@@9.$B#$B#@9.eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@:(+:(+:(+:(+:(+:(+:(+:(++9.bQ#bQ#bp.,H.,H.+9.b,++9.+9.+9.bp.bp.bp.bp.bp.+9.+9.+9.+9.+9.+9.+9.+9.s[.*T#j(#b,+:(+0q.u4.:^+It&It&It&It&Sx&Sx&Sx&}o=w5.+9.o&=bQ#bp.:(+bp.bQ#:(+bp.+9.bQ#bQ#+9.bp.:(++9.+9.+9.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.bQ#b,+j(#bp.bp.+9.+9.bQ#bQ#o&=o&=+9.+9.+9.+9.+9.+9.+9.+9.:(+bp.bp.bp.+9.bQ#bQ#'Z%)Z% W=)Z%,X@aR#aR#L0.@k.L0.L0.NR*+9.+9.)Z% W=k==k/;l/;m/;n/;o/;p/;hs-sW+D8-9~*r{;Ig q/;NM$=)#](#Q@$z, @|#(o Zp /0#{1 'p :} 36 (,@VH VH _,@y, Xr X:@r[@>b@sG -! }g *E =E =E =E =E =E =E =E =E =E &E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%u1$&E &E Kv Eu Eu Eu vR@$4@<|@[|@<|@<|@<|@$4@$4@$4@<|@<|@[|@[|@[|@X:@W:@Y:@Y:@W:@+~ Y:@]|@W:@W:@Y:@Y:@;! ]|@(7 (7 xy ew e1#e1#f1#f1#e1#]M /M ]M t#OH#SJ#OH#vg# t#aj&f5&Ic&TJ#Fa#Fa#TJ##b@wg#ZC@Jw&Jw&Cd#ZC@6`%a3&r/;s/;F&&[Z-t/;s/;u/;v/;[`-OB&d@;^;;d@;zB&<>&73&99&L*;Ms=P);4>&7s=2j==3#O8#O8#B&#B&#$b@$b@7u#h$#h$#LH#MH#LH#SJ#OH# t#bj#6q#]M /M d1#e1#e1#e1#d1#))#!)#B_#')#')#')#B_#QT@B_#1f ^|@[|@vR@Kv Kv Kv &E &E &E &E &E &E &E &E Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%=E i0$1C%1C%1C%1C%i0$i0$}g }g -! tG rG r[@t! t! +~ Y:@;! (7 /d@/d@/d@(7 ]|@ 9 @A@bP@RT@RT@uR@[`@UE@j$#Z=#ir#0u#tq=(p=0Q=0p=s_$t_$yD yD Js&[!-lI-*D=;r&n7*P<*%D=F0 LG=N|@n}+)~@.9.v5.t4.t4.k5+k5+h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#sQ@sQ@sQ@<(+<(+):.):.):..9..9..9..9..9.):.):.S%~h&0, Av&Bv&ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.ZQ.6g.u.@k4@j(+IV.mO#jM#mO#IV.jM#k4@IV.IV.mO#jM#mO#IV.mO#mO#mO#mO#mO#mO#mO#mO#j(+5,+$' k4@k4@$' $' IV.&s*=^@+v=#x+#x++v==^@&s*uq*xr*=^@wr*wr*=^@xr*uq*XT#xE#^u=o!#dr=dr=o!#^u=dr=dr=dr=dr=dr=dr=dr=dr=dr=^u=m}+^u==Z+l]#=Z+o!#&b=l]#=Z+dr=dr==Z+l]#&b=&r=uG#N:*N:**r=&r=*r=N:*uG#uG#uG#uG#uG#uG#uG#uG#.X+&b=dr=dr=l]#iM#iM#&b=l]#l]#l]#l]#l]#l]#l]#l]#&r=&r=&r=&r=&r=&r=&r=&r=&r=&r=*r=*r=*r=*r=uG#uG#iM#&b=&b=l]#=Z+dr=o!#o!#l]#l]#l]#=Z+=Z+=Z+=Z+=Z+l]#l]#l]#=Z+=Z+=Z+dr=dr=dr=o!#o!#dr=l]#l]#dr=jM#,0+17*17*J> J> J> J> J> zi.zi.nh.nh.nh.zi.J> J> OP*OP*OP*OP*OP*OP*OP*OP*x{+US+d #';$US+OP*23+J> ~h& ==cl.cl.3P ==.==3P .==3P 3P ==%z&.y&)A&A9.PB@wr*wr*wr*wr*wr*wr*wr*xr*xr*&s*&s*&s*&s*", "is@x5.x5.O7.O7.O7.O7.xX%is@dD.Vh.x5.xX%xX%O7.hY.VW.PI.#9.PI.8v.8v.Hu+8v.8v.8v.Hu+Hu+PI.PI.PI.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.#9.#9.#9.#9.<4 <4 <4 <4 <4 <4 <4 <4 <4 i% 6% i% <4 s3.h% 6% #9.#9.#9.#9.#9.#9.#9.#9.8v.Hu+Hu+Hu+PI.PI.#9.#9.O7._r+M7.%0+M7.M7.%0+$B#M7._r+xX%xX%N7.M7.N7.[M@K7.wH.w/;-G.=G.-G.-G.=G.86=9M.-G.9M.86=]U=^U==G.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.N7.N7.M7.M7.%0+%0+xX%N7.%0+M7._r+xX%N7.M7.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#%0+%0+%0+%0+@9.$B#%0+%0+@9.@9.$B#%0+$B#%0+%0+M7.%0+$B#@9.@9.)Z%eO@$B#$B#eO@)Z%@9.%0+q3.:(+bp.:(+q3.<3+0q.,H.,H.,H.,H.,H.,H.,H.,H.,H.o&=bQ#bp.,H.0q.<3+v4.v4.,H.,H.,H.,H.,H.,H.,H.,H.0q.,H.:(+:(+,H.q3.:(++9.:(+,H.,H.,H.q3.q3.q3.q3.:(+:(+,H.q3.q3.,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.,H.:(+:(+bp.bp.bp.bp.:(+:(+,H.,H.:(+:(+bp.+9.bp.,H.,H.bp.bp.,H.q3.,H.,H.,H.,H.,H.,H.,H.,H.,X@)Z%eO@eO@eO@eO@)Z%,X@eO@eO@eO@eO@eO@eO@eO@eO@,H.,H.,H.,H.,H.,H.,H.,H.:(+bp.+9.bp.,H.,H.bp.bQ#bp.bp.bp.bp.bp.+9.+9.+9.bp.bp.bp.bp.bp.bp.bp.bp.*T#{4%w{@Q+&+9.,H.w5.D6.[(+[(+ :*}o=Sx&uH.uH.gP.u4.bp.+9.+9.:(+,H.:(++9.:(+bp.+9.+9.+9.+9.bp.:(+bp.bp.bp.bp.bp.+9.+9.+9.:(+:(+:(+:(+:(+:(+:(+:(+bp.:(+:(+bp.+9.o&=b,+j(#bp.bp.+9.+9.bQ#bQ#o&=o&=+9.+9.+9.+9.+9.+9.+9.+9.:(+:(+:(+bp.bp.bp.+9.,X@)Z% W=)Z%,X@NR*NR*L0.L0.@k.L0.aR#bQ#+9.,X@ W=k==x/;y/;z/;A/;B/;C/;D/;~C@Zx--';E/;N,;a2 F8& |#](#O^#Bv@uy kx i[#4' /0#{1 <} n| +' (,@(,@(,@_,@y, X:@r[@>b@sG -! -E *E =E =E =E =E =E =E =E =E =E &E &E u1$u1$u1$Nt%Nt%Nt%&E &E &E &E &E &E &E &E Kv Eu vR@$4@$4@$4@$4@vR@$4@$4@$4@<|@<|@[|@[|@[|@t! Y:@(7 /d@(7 ;! ;! ]|@W:@W:@Y:@;! ]|@(7 (7 /d@xy ew e1#e1#f1#e1#/M 6q#d1#6q#OH#MH#O8#MH#SJ#vg#f5&wg##b@TJ#Fa#Fa#Fa#Fa#ZC@6`%nq&Jw&6`%6`%Ao&26&Fy@U}&]=&.]&]:&F/;A/&73&}>&##;G/;W;;G/;63&GA&6K=99&:X%@b@Ms=4>&N,&>6#T8#MH#MH#h$#h$# p@ p@-)#h@# p@SJ#SJ#SJ#OH# t#bj#6q#]M /M d1#e1#e1#e1#d1#d1#!)#!)#B_#')#')#')#')#')#1f YA /|@[|@vR@Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%=E i0$i0$1C%1C%i0$=E =E }g -E -! sG >b@X:@t! +~ W:@Y:@]|@(7 /d@/d@/d@/d@ 9 +L@.9 .9 .9 @A@uR@b.#j$#Z=#N~#Ut&qR#^T#k`&T8 yD T8 t_$0p=Js&rU=[C ce-~);y,;H/;j>;`p L6*RU @+.0+J> J> J> J> 17*17*17*nh.nh.zi.zi.zi.nh.x{ $.@OP*OP*OP*OP*OP*OP*OP*OP*x{+OP*23+x{+[f.u!=x{+J> {h& ==3P 3P ==%z&%z&)A&)A&.==cl.3P ==%z&)A&PB@PB@wr*wr*wr*wr*wr*wr*wr*xr*xr*xr*&s*=^@=^@", "is@is@is@x5.O7.xX%xX%O7.is@Vh.is@O7._r+xX%x5.X)@VW.#9.cp.#9.Hu+8v.8v.8v.8v.8v.Hu+Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.#9.#9.cp.cp.cp.<4 <4 <4 <4 <4 <4 <4 <4 <4 i% 6% i% <4 s3.<4 h% #9.#9.#9.#9.#9.#9.#9.#9.Hu+Hu+PI.PI.PI.#9.#9.#9.is@O7.N7.%0+$B#%0+%0+%0+M7._r+xX%_r+M7.M7.N7.xX%h|.1P*w/;wH.-G.wH.1P*9M.86=9M.-G.9M.86=]U=^U=L7.M7.M7.M7.M7.M7.M7.M7.M7._r+_r+_r+N7.N7.M7.M7.M7._r+M7.%0+M7._r+_r+N7.%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#%0+%0+%0+%0+)Z%$B#M7.%0+)Z%,X@@9.M7.$B#%0+%0+%0+%0+$B#$B#$B#'Z%)Z%@9.@9.)Z%)Z%@9.%0+q3.:(+bp.:(+q3.<3+0q.,H.q3.q3.q3.q3.q3.q3.q3.q3.:(+,H.0q.<3+0q.q3.:(++9.,H.,H.,H.,H.,H.,H.,H.,H.0q.,H.bp.bp.,H.,H.bp.bQ#:(+:(+,H.,H.,H.,H.,H.,H.:(+:(+:(+,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.,H.:(+:(+bp.bp.bp.bp.:(+:(+,H.,H.:(+:(+bp.+9.bp.:(+:(+:(+:(+,H.q3.,H.,H.,H.,H.,H.,H.,H.,H.,X@,X@)Z%eO@eO@)Z%,X@,X@eO@eO@eO@eO@eO@eO@eO@eO@,H.,H.,H.,H.,H.,H.,H.,H.,H.:(++9.bp.,H.q3.:(++9.,H.:(+:(+bp.+9.+9.bQ#bQ#:(+:(+:(+:(+:(+:(+:(+:(+*T#{4%Q+&b,++9.:(+:^+t4.[(+[(+ :*}o=Sx&uH.uH.gP.N7+:(++9.bp.,H.q3.:(+bp.bp.bp.bp.+9.+9.bp.bp.bp.,H.:(+:(+bp.+9.+9.bQ#bQ#:(+:(+:(+:(+:(+:(+:(+:(+bQ#+9.+9.bp.+9.bQ#o&=o&=bp.bp.+9.+9.bQ#bQ#o&=o&=+9.+9.+9.+9.+9.+9.+9.+9.:(+:(+:(+:(+:(+:(+:(+eO@)Z% W=)Z%)Z%NR*NR*jX-jX-@k.@k.zI*bQ#bQ#,X@R]$i%=;V=I/;J/;K/;L/;M/;)z$Of@i.@sX-N/;e/;Go=k2&L0*Tk Wt=|n Bv@@|#(o Zp 4' /0#<} n| +' (,@(,@(,@_,@y, t! X:@r[@rG tG -E }g *E =E =E =E =E =E =E =E =E &E &E u1$u1$u1$Nt%Nt%Nt%Kv Kv &E &E &E &E u1$u1$&E Kv Eu vR@$4@$4@vR@vR@$4@$4@$4@<|@<|@[|@[|@[|@X:@Y:@/d@ 9 /d@]|@;! ;! W:@Y:@Y:@;! ]|@(7 /d@/d@xy ew d1#d1#e1#d1#]M t#d1#bj#LH#Dd#;6#Dd#LH#OH##b@TJ#Fa#ZC@P8#Cd#Cd#Cd#Ao&G-&Ao&Jw&6`%'t=G-&3>&Nl&.]&-;;U}&$)&K,&.]&x-&x-&D&&O/;O/;P/;63&pp&>s&M*;L*;+t=Ms=N,&2j==3#NH#LH#LH# p@h@#h@#8.#X=#{Y@8.#vg#vg#vg# t#6q#]M /M ]M /M d1#e1#e1#d1#d1#/M QT@QT@B_#')#kI@kI@1f 1f YA @~ (|@<|@vR@Kv &E &E u1$u1$u1$u1$u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%=E i0$i0$1C%i0$=E *E *E -E -! tG rG r[@t! +~ W:@Y:@;! ]|@(7 /d@ 9 9 9 .9 .9 .9 +L@O9 .9 uR@i@#C&#P~#Ut&qR#(X%]T#T8 yD yD 0p=s_$t_$s|*R--2X-g:*tF=G,;MZ-ED=2u=Q/;dN=Z2.H8@g6@:^+D6.v5.sQ@PJ*~Z%h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#sQ@sQ@sQ@<(+<(+):.):.):..9..9..9..9..9.<(+.9.):. 17*17*xE*xE*xE*U*@..=..=..=xE*zi.nh.OP*OP*OP*OP*OP*OP*OP*OP*x{+x{+x{+u!=u`.u`.[f.17*{h& ==.== ==.y&+y&+y&%z&.y& ==cl.cl..==)A&)A&(-=PB@wr*wr*wr*wr*wr*wr*wr*,C+uq*uq*xr*&s*=^@", "x5.is@is@is@x5.xX%_r+x5.is@Vh.is@xX%_r+O7.x5.X)@VW.#9.cp.#9.Hu+8v.8v.VW.VW.8v.8v.8v.Hu+Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.#9.#9.cp.cp.cp.#9.#9.#9.#9.#9.#9.#9.#9.cp.PI.Hu+PI.[3+|5+[3+cp.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.cp.cp.cp.[3+[3+is@x5.xX%M7.$B#$B#%0+N7.%0+N7._r+_r+M7.%0+M7._r+h|.[M@~$+c+#PK.c+#[M@I1.$Z*I1.PK.I1.$Z*&o@K7.L7.M7.M7.M7.M7.M7.M7.M7.M7._r+_r+_r+N7.N7.M7.M7.M7.M7.%0+@9.$B#M7.N7.%0+@9.$B#$B#$B#$B#$B#$B#$B#$B#%0+%0+%0+%0+$B#$B#$B#$B#)Z%$B#M7.%0+)Z%,X@@9.M7.%0+$B#$B#$B#$B#%0+%0+%0+'Z%)Z%@9.@9.)Z%)Z%@9.%0+q3.:(+bp.:(+q3.<3+0q.,H.0q.0q.0q.0q.0q.0q.0q.0q.0q.0q.<3+<3+0q.:(+bQ#o&=,H.,H.,H.,H.,H.,H.,H.,H.0q.,H.bp.bp.,H.,H.bp.bQ#:(+:(+bp.bp.bp.bp.bp.bp.:(+:(+:(+bp.bp.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.,H.:(+:(+bp.bp.bp.bp.:(+:(+,H.,H.:(+:(+bp.bp.bp.bp.bp.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,X@,X@)Z%eO@eO@)Z%,X@,X@eO@eO@eO@eO@eO@eO@eO@eO@bp.bp.bp.bp.bp.bp.bp.bp.q3.:(++9.bp.,H.q3.,H.bp.,H.:(+:(+bp.+9.+9.bQ#bQ#:(+:(+:(+:(+:(+:(+:(+:(+k<.av#+9.+9.bp.bp.D6.o3.}o=}o=It&It&Sx&Sx&Sx&It&N7+:(++9.bp.,H.q3.:(+bp.+9.bp.bp.bp.bp.bp.bp.+9.,H.:(+:(+bp.+9.+9.bQ#bQ#+9.+9.+9.+9.+9.+9.+9.+9.b,+b,+bQ#+9.bp.bp.bp.+9.bp.bp.+9.+9.bQ#bQ#o&=o&=bp.bp.bp.bp.bp.bp.bp.bp.:(+:(+:(+:(+:(+:(+:(+eO@)Z% W=)Z%)Z%{S*{S*B<+B<+@k.L0.aR#bQ#+9.,X@ W=5{;R/;S/;T/;U/;fq V/;]4+oI-W/;CQ-Df X/;fn=Fo=(n a> Xq /m |n z, @|#i[#Zp S} :} 36 /,@VH VH VH fw _t t! X:@r[@rG tG -E }g *E =E =E =E =E =E =E =E =E &E &E u1$u1$u1$Nt%Nt%Nt%Kv Kv &E &E &E &E u1$u1$&E Kv Eu vR@$4@$4@vR@vR@$4@$4@$4@<|@<|@[|@[|@[|@>b@+~ ]|@/d@]|@Y:@W:@Y:@Y:@Y:@;! ]|@(7 /d@/d@ 9 ew e1#/M /M d1#/M 6q# t#d1#bj#LH#;6#Zo@;6#O8#SJ#P8#P8#Cd#Cd#6`%Jw&nq&nq& F=&h&G-&Jw&6`%6`%Ao&b@X:@+~ W:@Y:@;! ]|@]|@(7 /d@ 9 O9 O9 @A@@A@.9 +L@O9 @A@b.#j$#C&#ir#u_$5N=(p=k`&0p=yD Js&0p=t_$T8 SE +c-z0-sk-tF=y,;67#8J@cH=+=@.0.0M.%U*c3+v5.v5.o3.v5.PJ*k]#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#sQ@sQ@sQ@<(+<(+h;#sQ@<(+.9.):. OP*OP*OP*OP*OP*OP*OP*OP*x{+x{+x{+u!=u`.u`.[f.17*0, ==.==)A&+y&Xw&+y&%z&Xw&%z&.==3P ==%z&%z&(-=PB@wr*wr*wr*wr*wr*wr*wr*,C+,C+uq*uq*xr*xr*", "x5.is@Vh.Vh.x5.xX%_r+is@Vh.Vh.x5.xX%_r+O7.is@hY.VW.PI.#9.PI.8v.8v.Hu+VW.VW.VW.8v.8v.Hu+Hu+Hu+PI.PI.PI.PI.PI.PI.PI.PI.Hu+Hu+PI.PI.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.cp.PI.Hu+#9.|5+w7+w7+[3+#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.cp.cp.[3+[3+[3+|5+xX%O7.O7._r+M7.%0+M7._r+%0+N7._r+N7.%0+%0+M7._r+K7.c+#~$+PK.L7.PK.PK.L7.$Z*I1.PK.I1.$Z*&o@K7.L7.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.N7.N7.M7.M7.%0+%0+M7.$B#@9.@9.%0+M7.%0+@9.$B#$B#$B#$B#$B#$B#$B#$B#%0+%0+%0+%0+$B#$B#$B#$B#@9.$B#%0+%0+@9.@9.$B#%0+%0+$B#$B#@9.$B#%0+M7.M7.)Z%eO@$B#$B#eO@)Z%@9.%0+q3.:(+bp.:(+q3.<3+0q.,H.q3.q3.q3.q3.q3.q3.q3.q3.:(+,H.q3.q3.q3.q3.,H.:(+,H.,H.,H.,H.,H.,H.,H.,H.0q.,H.:(+:(+,H.q3.:(++9.:(+bp.bp.bp.+9.+9.+9.+9.:(+:(+bp.+9.+9.bp.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.,H.:(+:(+bp.bp.bp.bp.:(+:(+,H.,H.:(+:(+bp.:(+bp.+9.bp.,H.q3.,H.:(+,H.,H.,H.,H.,H.,H.,H.,H.,X@)Z%eO@eO@eO@eO@)Z%,X@eO@eO@eO@eO@eO@eO@eO@eO@bp.bp.bp.bp.bp.bp.bp.bp.q3.bp.bQ#bQ#bp.,H.:(+bp.bp.bp.bp.bp.bp.+9.+9.+9.bp.bp.bp.bp.bp.bp.bp.bp.Rz.Rz.,H.,H.:(+bp.D6.t4.(r+(r+(r+It&tH.tH.Gn= :*u4.bp.+9.+9.:(+,H.:(++9.+9.+9.bp.:(+:(+bp.+9.+9.bp.bp.bp.bp.bp.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#b,+b,+bQ#+9.bp.bp.bp.+9.bp.bp.+9.+9.bQ#bQ#o&=o&=bp.bp.bp.bp.bp.bp.bp.bp.+9.+9.bp.bp.bp.:(+:(+eO@,X@ W=)Z%)Z%ns#ns#b}+b}+jX-jX-NR*bp.bp.eO@y}*)!= (;.(;+(;@(;#(;Kv#92-$(;Rt&AD-Y( e6&Ow&wC#(n G9 n3&cw /m Bv@uy kx i[#Zp :} 36 (,@VH VH _,@y, Xr +~ t! r[@>b@sG -! -E }g =E =E =E =E =E =E =E =E &E &E u1$u1$u1$Nt%Nt%Nt%&E &E &E &E &E &E &E &E Kv Eu vR@$4@$4@$4@$4@vR@$4@$4@$4@<|@<|@[|@[|@[|@>b@t! Y:@;! Y:@+~ W:@W:@Y:@;! ;! ]|@(7 /d@ 9 9 e1#/M 6q#]M /M d1#]M bj#/M bj#LH#Dd#;6#;6#zg#MH#6`%6`%6`%6`%'t=Jw&Ao&G-& F=Gx=nq&'t=6`%'t=nq&)t=8U%%(;&(;WV%0U%_.;>s&F*;L;;*(;`/;$-;`/;#-;rT={t=L*;L*;L*;7U%4>&*)&Ia#T8#LH#LH# p@h@#{Y@XC@Dv@+W@{Y@ t# t# t#bj#]M /M d1#d1#d1#e1#e1#e1#d1#/M ]M ')#B_#')#')#1f a~ WA @~ _|@:|@[|@$4@vR@Kv &E u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%i0$i0$i0$i0$=E *E -E -! tG sG rG r[@t! W:@Y:@;! (7 ]|@]|@]|@(7 9 O9 +L@.9 @A@@A@@A@@A@uR@Cv@Z=#Z=#O~#tq=^T#h_*+6*0p=yD 0p=s|*yD O}*%1*1d-Zh-sk-n7*J=;%l dO=Fv+#].!~@]q%n4@M|@.9.<(+o3.:^+a,+~Z%h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#sQ@sQ@sQ@<(+<(+n3.n3.sQ@<(+):.g|.cO@dO@0+{h&{h&{h&{h&0, 0, 0, &, &, Av&Av&Av&&, 0, 17*xE*OP*OP*OP*OP*OP*OP*OP*x{+OP*23+x{+[f.u!=x{+J> 0, == ==%z&+y&+y&%z& ==Be+.y&)A&)A&%z&.y&.y&)A&PB@wr*wr*wr*wr*wr*wr*wr*xr*xr*xr*xr*xr*xr*", "x5.is@dD.Vh.x5.xX%N7.is@Vh.Vh.O7._r+_r+O7.Vh.9, 8v.PI.Hu+8v.VW.Hu+#9.9, 9, VW.VW.8v.8v.8v.Hu+#9.#9.#9.#9.#9.#9.#9.#9.8v.8v.Hu+Hu+Hu+PI.PI.PI.N7.N7.N7.N7.N7.N7.N7.N7._r+xX%O7._r+%0+@9.$B#M7.#9.#9.#9.#9.#9.#9.#9.#9.PI.PI.#9.#9.cp.cp.cp.cp.M7.xX%x5.O7._r+M7.N7.xX%$B#M7._r+N7.%0+$B#M7.N7.M7.x5.x5.%0+eO@%0+N7.%0+%0+N7._r+N7.%0+@9.$B#M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+$B#$B#N7.%0+$B#$B#M7.N7.M7.$B#$B#$B#$B#$B#$B#$B#$B#$B#M7.M7.%0+%0+$B#$B#@9.@9.M7.%0+$B#$B#M7.M7.%0+$B#%0+$B#@9.@9.@9.%0+M7.N7.@9.%0+M7.%0+@9.eO@@9.%0+q3.:(+bp.:(+q3.<3+0q.,H.q3.q3.q3.q3.q3.q3.q3.q3.:(+:(+:(+:(+,H.q3.0q.<3+,H.,H.,H.,H.,H.,H.,H.,H.<3+q3.,H.,H.0q.0q.,H.bp.,H.,H.,H.:(+bp.bp.bp.+9.,H.:(++9.bQ#bQ#+9.:(+,H.:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.,H.:(+:(+bp.bp.bp.bp.:(+:(+,H.,H.:(+:(+bp.,H.bp.bQ#+9.q3.0q.,H.bp.bp.bp.bp.bp.bp.bp.bp.bp.eO@eO@@9.$B#$B#@9.eO@eO@eO@eO@eO@eO@eO@eO@eO@eO@:(+:(+:(+:(+:(+:(+:(+:(+,H.bp.o&=o&=+9.bp.bp.+9.+9.+9.+9.bp.bp.bp.bp.bp.+9.+9.+9.+9.+9.+9.+9.+9.*T#av#,H.q3.,H.bp.:^+:^+(r+(r+It&It&Sx&tH.tH.}o=w5.+9.o&=bQ#bp.:(+bp.bQ#bQ#+9.bp.:(+:(+bp.+9.bQ#+9.+9.+9.bp.bp.bp.bp.bp.+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.bp.bp.+9.bQ#o&=b,+bp.bp.+9.+9.bQ#bQ#o&=o&=:(+:(+:(+:(+:(+:(+:(+:(+bQ#bQ#bQ#+9.bp.bp.bp.eO@,X@ W=)Z%)Z%ns#zy.lY+lY+B<+B<+ns#:(+,H.@9.^n#o2..*==(;-(;;(;>(;,(;'(;)(;]4+!(;5m&e/;-o@4f U{;~(;;p }n cw |n z, @|#(o i[#'p n| +' (,@(,@(,@_,@y, +~ t! X:@>b@sG -! -E }g =E =E =E =E =E =E =E =E &E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%u1$&E &E Kv Eu Eu Eu vR@$4@<|@[|@<|@<|@<|@$4@$4@$4@<|@<|@[|@[|@[|@X:@+~ Y:@Y:@+~ +~ W:@;! ;! ;! ]|@(7 /d@/d@ 9 9 ]M 6q# t#6q#/M d1#/M 6q#]M bj#OH#MH#zg#Dd#Dd#zg#Cd#Cd#P8#P8#Cd#'t=nq&Ao&Jw&'t=Cd#Cd#6`%Jw&nq&)t=2>&7j&lm&^f@&!;7j&<=;{(;]t=](;7t=^(;<=;/(;<=;((;7!;/f@'L&/f@[k=7s=u&*2j=MH#LH# p@h@#{Y@XC@Dv@+W@{Y@ t# t# t#bj#6q#/M d1#d1#e1#e1#e1#d1#/M ]M 6q#')#')#')#')#1f YA @~ /|@[|@<|@<|@$4@vR@Kv &E u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%i0$i0$i0$i0$=E }g -E -! sG sG >b@X:@+~ W:@;! ;! (7 (7 ]|@]|@(7 9 +L@.9 O9 .9 RT@bP@uR@UE@Y=#P~#z, cw Fz ^m 1g {t 6U%Z4-0C=rg*/|$^|$|x=/i*vn-5' ,G=:o sF=u#$Z2.4;@V[@i)@I7.M|@sQ@<(+h;#v5.k5+a,+h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#sQ@sQ@sQ@<(+<(+h;#sQ@sQ@.9.):. {h&)A& ==%z&.y&.y& ==cl.Be+Xw&+y&Xw&Be+Be+.y&)A&u.@u.@u.@u.@u.@u.@u.@u.@6g.yi.yi.u.@,0+>0+", "x5.Vh.dD.Vh.x5.xX%N7.is@Vh.is@O7._r+_r+O7.Vh.VW.8v.Hu+8v.VW.VW.PI.cp.9, 9, VW.VW.8v.8v.8v.8v.#9.#9.#9.#9.#9.#9.#9.#9.VW.VW.8v.8v.Hu+Hu+Hu+PI.N7.N7.N7.N7.N7.N7.N7.N7.O7.x5.is@O7.N7.%0+%0+N7.#9.#9.#9.#9.#9.#9.#9.#9.Hu+Hu+Hu+PI.PI.#9.#9.#9.@9.N7.x5.is@xX%N7.N7.xX%$B#M7._r+N7.%0+$B#%0+N7._r+x5.O7.@9.,X@@9.%0+$B#%0+N7._r+N7.%0+@9.$B#M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+$B#$B#@9.@9._r+N7.%0+M7._r+xX%N7.%0+$B#$B#$B#$B#$B#$B#$B#$B#M7.M7.%0+%0+$B#$B#@9.@9._r+%0+@9.$B#_r+xX%M7.@9.%0+$B#@9.eO@@9.%0+N7._r+%0+M7.N7.M7.@9.eO@@9.$B#q3.:(+bp.:(+q3.<3+0q.,H.,H.,H.,H.,H.,H.,H.,H.,H.<3+q3.:(+bp.bp.:(+q3.0q.,H.,H.,H.,H.,H.,H.,H.,H.v4.0q.q3.q3.0q.<3+q3.:(+0q.0q.q3.q3.,H.:(+:(+bp.,H.:(++9.bQ#bQ#+9.:(+,H.:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.,H.:(+:(+bp.bp.bp.bp.:(+:(+,H.,H.:(+:(+bp.,H.+9.bQ#+9.q3.0q.q3.bp.bp.bp.bp.bp.bp.bp.bp.bp.eO@@9.$B#$B#$B#$B#@9.eO@eO@eO@eO@eO@eO@eO@eO@eO@,H.,H.,H.,H.,H.,H.,H.,H.,H.+9.b,+b,+bQ#+9.bp.+9.bQ#bQ#+9.+9.bp.:(+:(+,H.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#e6#8&+bp.,H.,H.:(+w5.w5.It&It&It&It&Sx&Sx&Sx&It&p3.bQ#o&=o&=+9.bp.+9.o&=bQ#+9.bp.,H.,H.bp.+9.bQ#bQ#bQ#+9.+9.bp.:(+:(+,H.:(+:(+:(+:(+:(+:(+:(+:(+q3.,H.,H.bp.bQ#b,+Q+&CI#bp.bp.+9.+9.bQ#bQ#o&=o&=:(+:(+:(+:(+:(+:(+:(+:(+o&=o&=o&=bQ#+9.+9.bp.)Z%,X@ W=)Z%eO@ns#zy.lY+3W+b}+b}+zy.,H.q3.$B#$y#%R+1!;_(;:(;<(; X=[(;Nj-3G@*> e[@Gc }(;E%#Ge _n H9 rt=6v cw A_#z, @|#kx (o {1 :} 7, +' +' /,@(,@_,@+~ t! X:@>b@sG -! -E }g =E =E =E =E =E =E =E =E &E &E u1$u1$u1$Nt%Nt%Nt%GJ%GJ%Nt%u1$Kv Eu vR@vR@vR@$4@<|@[|@[|@[|@[|@<|@$4@$4@$4@<|@<|@[|@[|@[|@+~ W:@Y:@W:@t! +~ ;! (7 ;! ;! ]|@(7 /d@ 9 9 O9 bj# t#vg#bj#/M d1#d1#]M 6q#bj#vg#LH#O8#zg#Dd#Dd#P8#ZC@ZC@Fa#ZC@Cd#'t=nq&Fa#Fa#Fa#P8#'t=nq&G-&/=&7U%L^;q^;h^;J+*ji&|(;1(;2(;D=;^(;UV%2(;](;^(;((;/f@!A=tM&tM&lF=[k=t&*4>&O8#MH#h$#h@#8.#XC@Dv@w! 8.#vg#vg#vg# t#6q#]M /M d1#e1#e1#e1#d1#/M ]M 6q#kI@')#')#')#1f WA ^|@(|@$4@<|@$4@$4@vR@Kv &E u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%i0$i0$i0$i0$*E }g -! tG sG rG >b@X:@+~ Y:@;! ]|@/d@(7 ]|@]|@(7 9 +L@@A@ 9 .9 bP@[`@b.#Cv@Z=#N~#A_#6v ;c 1g @p=/p=0C=Z4-Z4-/|$py=gh*qg*vn-sk--h-I9 I9 D<*3(;!~@He+VP=SW#g6@c3+t4.h;#S%Av&&, 0, {h&0, Av&Bv&8P.xE*OP*OP*OP*OP*OP*OP*OP*OP*';$:{+:{+d #US+US+J> {h&)A& ==%z&.y&%z&3P _b+@d+Be+Be+@d+z$$@d++y& ==u.@u.@u.@u.@u.@u.@u.@u.@v.@v.@I&=%b=yi.u.@", "O7.xX%xX%xX%xX%O7.O7.is@O7._r+_r+xX%O7.O7.xX%VW.VW.VW.8v.Hu+PI.PI.PI.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+VW.VW.8v.8v.Hu+Hu+PI.PI.cp.#9.Hu+VW.9, VW.8v.8v._r+_r+_r+N7.N7.M7.M7.M7.xX%xX%xX%_r+_r+_r+N7.N7.#9.#9.#9.#9.#9.#9.#9.#9.cp.#9.#9.PI.PI.#9.#9.cp.N7.N7.N7.N7.N7.N7.N7.N7.xX%_r+M7.%0+%0+M7._r+xX%M7._r+O7.xX%N7.%0+%0+M7.xX%xX%_r+M7.%0+$B#@9.eO@$B#M7.N7.N7.%0+$B#%0+N7.M7.M7.M7.M7.M7.M7.M7.M7._r+_r+_r+N7.N7.M7.M7.M7.M7.M7.%0+%0+$B#@9.@9.@9.M7.M7.M7.M7.M7.M7.M7.M7.@9.@9.$B#$B#%0+%0+M7.M7.@9.@9.eO@eO@eO@@9.%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#<3+<3+<3+0q.q3.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+o&=:(+<3+<3+q3.:(+,H.0q.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+<3+q3.:(+bp.+9.+9.bp.:(+,H.:(++9.bp.,H.q3.:(+bp.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+o&=bp.,H.:(+bQ#o&=+9.,H.$B#)Z%,X@)Z%%0+N7.%0+@9.,X@'Z%'Z%,X@@9.$B#eO@'Z%:(+:(+:(+:(+:(+:(+:(+:(+bQ#+9.bp.+9.o&=bQ#,H.<3+<3+0q.q3.,H.bp.+9.bQ#o&=:(+0q.0q.bp.+9.,H.:(+bQ#k<.k<.:(+:(+:(+:(+w5.w5.It&It&It&It&Sx&Sx&Sx&It&u4.bp.o&=j(#j(#o&=bp.,H.+9.+9.+9.+9.+9.+9.+9.+9.o&=bQ#+9.bp.:(+:(+:(+bp.:(+:(+:(+:(+:(+:(+:(+:(+bQ#+9.bp.,H.,H.bp.+9.bQ#,H.:(++9.bQ#bQ#+9.:(+,H.:(+,H.q3.q3.q3.q3.,H.:(+bp.bp.bp.bp.bp.bp.bp.)Z%)Z% W=)Z%eO@ns#zy.lY+lY+B<+B<+{S*:(+:(+@9.^n#8J.v!=4(;f=;5(;6(;7(;D; 9P@)(;8(;{4+6m&c #wo@_n ]p=Au=cw Bv@Bv@z, (o i[#uy 4' 'p n| 7, 7, 7, (,@_,@]|@W:@X:@r[@>b@rG -! *E *E *E =E =E =E i0$i0$i0$Nt%Nt%u1$&E &E u1$Nt%Nt%GJ%Nt%Nt%u1$Kv Eu vR@vR@<|@[|@(|@/|@/|@(|@[|@<|@Eu $4@[|@[|@$4@$4@[|@_|@X:@t! W:@W:@+~ W:@]|@ 9 /d@(7 (7 (7 /d@ 9 O9 +L@bj#bj# t# t# t#bj#6q#]M ]M vg#zg#;6#;6#zg#O8#O8#TJ#ZC@P8#Cd#Cd#P8#ZC@Fa#f5&'t=Ao&Cd#P8#Gx=@D=mF=[J=9j&8j&Ls='L&vM&L**/f@7!;:X%:X%:X%7!;'L&!A=d!;vM&8t=d!;/f@[k=XE@XE@XE@Z+*;6#$b@h@#{Y@{Y@-)# p@w! 6q#]M ]M /M /M d1#d1#e1#e1#e1#e1#e1#e1#e1#e1#QT@')#kI@kI@kI@YA /|@[|@$4@vR@vR@Eu Kv &E u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$1C%1C%1C%1C%i0$*E }g -E tG sG rG r[@t! W:@Y:@;! W:@;! /d@O9 O9 +L@RT@[`@bP@bP@RT@bP@[`@Cv@Z=#ir#|n Q*#2g Io=Io=x3-|6-Ur Y4-Y4-Vi-AQ-|o-z[*Uu*J~#O,#9(;G&;52-N|@N|@He+0M.g6@g6@v5.v5.v5.n3.T`%T`%t4.<(+<(+o3.D6.n3..9..9.sQ@sQ@sQ@<(+<(+.9..9..9.g|.g|.g|.g|.g|. nh.zi.17*xE*", "xX%O7.O7.O7.O7.xX%xX%xX%O7.O7.O7.O7.xX%O7.O7.8v.8v.8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+VW.VW.8v.8v.Hu+Hu+PI.PI.#9.PI.8v.VW.VW.VW.Hu+Hu+_r+_r+_r+N7.N7.N7.M7.M7.xX%xX%xX%_r+_r+_r+N7.N7.#9.#9.#9.#9.#9.#9.#9.#9.#9.#9.PI.Hu+Hu+PI.#9.#9.N7.N7.N7.N7.N7.N7.N7.N7.xX%_r+M7.%0+%0+M7._r+xX%M7._r+O7.xX%N7.%0+%0+M7._r+_r+N7.M7.%0+%0+$B#$B#$B#M7.N7.N7.%0+$B#%0+N7.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.N7.N7.M7.M7.%0+%0+M7.M7.M7.%0+%0+%0+%0+$B#M7.M7.M7.M7.M7.M7.M7.M7.@9.@9.$B#$B#%0+%0+M7.M7.$B#@9.@9.@9.@9.$B#%0+M7.$B#$B#$B#$B#$B#$B#$B#$B#0q.0q.0q.0q.q3.q3.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.o&=:(+0q.<3+q3.:(+,H.0q.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+q3.q3.,H.:(+:(+bp.+9.+9.:(+:(+:(+:(+:(+:(+:(+:(+q3.,H.:(+bp.bp.:(+q3.0q.,H.:(++9.bp.,H.q3.:(+bp.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(++9.:(+q3.,H.+9.bQ#bp.,H.$B#)Z%,X@)Z%$B#%0+$B#)Z%)Z%,X@'Z%)Z%$B#$B#eO@,X@:(+:(+:(+:(+:(+:(+:(+:(++9.bp.bp.+9.o&=bQ#:(+0q.q3.q3.,H.:(+:(+bp.+9.+9.:(+0q.0q.bp.+9.,H.,H.bQ#Rz.Rz.:(+:(+:(+:(+p3.p3.It&It&It&It&Sx&Sx&Sx&It&w5.bp.bQ#o&=o&=bQ#bp.:(++9.+9.+9.+9.+9.+9.+9.+9.o&=bQ#+9.bp.:(+:(+:(+bp.:(+:(+:(+:(+:(+:(+:(+:(+bQ#+9.bp.:(+:(+bp.+9.bQ#,H.:(++9.bQ#bQ#+9.:(+,H.bp.bp.:(+,H.,H.:(+bp.bp.bp.bp.bp.bp.bp.bp.bp.)Z%,X@R]$)Z%)Z%ns#ns#b}+b}+B<+B<+{S*:(+:(+@9.^n#SW#nj*0(;a(;lX#7*=b(;br c(;d(;+i-]&$]: Ee !;+dv=KX-Vk 6v A_#A_#|n kx (o @|#S} {1 ,p 36 36 7, /,@VH ]|@Y:@t! r[@r[@rG -! *E *E *E *E =E =E i0$i0$i0$GJ%Nt%Nt%u1$u1$Nt%Nt%GJ%GJ%GJ%Nt%u1$&E Kv Eu Eu $4@<|@:|@(|@(|@:|@<|@$4@Eu $4@[|@[|@$4@$4@[|@_|@X:@+~ W:@+~ t! +~ ;! (7 /d@/d@(7 (7 /d@ 9 O9 +L@6q#bj# t# t#vg# t#bj#bj# t#SJ#zg#;6#Dd#O8#O8#zg#ZC@P8#Cd#6`%Cd#P8#ZC@Fa#Ic&6`%nq&'t=Jw&Cu=.F=mF=/=&qs==k&P);70*vM&E=;7!;J-;7!;J-;7!;J-;/f@70*d!;L**tM&'L&7!;[k=[k=[k=5!;Y+* l&Si@h$#8.#{Y@W=#XC@w! 6q#]M ]M /M /M d1#d1#e1#e1#e1#e1#e1#e1#e1#e1#!)#B_#kI@1f 1f WA _|@<|@vR@vR@Eu Eu Kv &E u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$i0$i0$i0$i0$=E }g -E -! tG sG rG r[@t! W:@Y:@;! ;! /d@O9 +L@+L@.9 RT@[`@[`@[`@uR@[`@i@#Y=#ir#A_#Bu=y' $D=Ho=Y4-o7-k:*k:*@)#.) KM-3'*[7.z[*#)#e5 WO=e@@++; 17*U*@xE*J> nh.zi.J> J> ", "xX%x5.is@is@x5.xX%_r+M7.O7.dD.dD.O7._r+xX%x5.Hu+Hu+Hu+Hu+8v.8v.8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+8v.8v.8v.8v.Hu+Hu+Hu+Hu+Hu+8v.8v.VW.8v.8v.PI.PI.xX%[M@PK.PK.I1.I1.I1.L7.[M@[M@[M@PK.PK.PK.I1.N7.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.Hu+8v.8v.Hu+PI.PI.N7.N7.N7.N7.N7.N7.N7.N7._r+N7.N7.M7.M7.N7.N7._r+cp.PI.8v.Hu+#9.[3+[3+cp.cp.cp.cp.cp.cp.cp.cp.cp.$B#M7.N7.N7.%0+$B#%0+N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+$B#$B#M7.M7.M7.M7.M7.N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.$B#$B#$B#$B#%0+%0+%0+%0+%0+$B#$B#$B#$B#%0+M7.N7.$B#$B#$B#$B#$B#$B#$B#$B#q3.q3.q3.q3.0q.0q.0q.0q.q3.q3.q3.q3.q3.q3.q3.q3.+9.:(+0q.0q.q3.,H.,H.q3.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+0q.0q.q3.,H.bp.+9.bQ#bQ#:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.0q.<3+v4.,H.:(++9.bp.,H.q3.:(+bp.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.,H.:(+:(+bp.bp.bp.,H.q3.,H.:(+bp.:(+q3.@9.eO@,X@)Z%eO@@9.)Z%'Z%eO@)Z%)Z%eO@%0+%0+@9.)Z%:(+:(+:(+:(+:(+:(+:(+:(+bp.:(+:(+bp.bQ#o&=+9.,H.:(+:(+:(+:(+:(+:(+:(+:(+bp.0q.q3.+9.+9.,H.,H.bQ#v7+Rz.,H.:(+:(+bp.p3.:^+It&It&It&It&Sx&Sx&Sx&It&p3.bp.bp.bp.bp.bp.bp.bp.+9.+9.+9.+9.+9.+9.+9.+9.bQ#+9.bp.:(+:(+:(+bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.+9.bp.:(+:(+bp.+9.+9.,H.:(++9.bQ#bQ#+9.:(+,H.+9.+9.bp.:(+:(+bp.+9.+9.bp.bp.bp.bp.bp.bp.bp.)Z%'Z%]Z@,X@,X@NR*{S*B<+B<+B<+B<+{S*:(+:(+@9.^n#SW#Yj@CM+%^;e(;A+;f(;6d-WD#Gb@Gw&g(;wd#B'*$=+!B@{l= ];Zq cw }n cw z, kx @|#i[#/0#:} n| n| 36 /,@VH (7 Y:@t! X:@r[@>b@tG }g }g *E *E *E =E =E i0$i0$*L%GJ%GJ%Nt%Nt%GJ%GJ%*L%*L%*L%GJ%Nt%u1$u1$&E &E vR@$4@<|@:|@:|@<|@$4@vR@Eu $4@[|@[|@$4@$4@[|@_|@X:@t! W:@+~ t! +~ ;! (7 9 /d@/d@(7 /d@ 9 O9 O9 ]M 6q#bj#vg#OH#OH#OH#vg#LH#O8#Dd#zg#O8#MH#O8#Dd#Cd#6`%6`%6`%Cd#P8#ZC@Fa#TJ#Cd#Jw&nq&&h&.F=.F=;J-;v=;M*;6=;70*!A='L&/f@7!;[k=[k=5!;5!;Yo@Y+*Rm@Si@h$#{Y@Q~#))#w! 6q#]M ]M /M /M d1#d1#d1#d1#d1#d1#d1#d1#d1#d1#))#B_#kI@a~ YA ^|@[|@vR@vR@vR@Eu Kv &E u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$*E =E =E *E }g -E tG sG sG rG >b@X:@+~ Y:@;! ]|@/d@+L@@A@@A@.9 @A@bP@[`@UE@UE@b.#UE@C&#P~#Ut&6v J~#8u-#X-!X-(X-(X-(X-(X-_X-l';v';Wt*FX-no=e2 oo=i(;G&;2A&({@N|@He+D0@D<&g6@g6@v5.v5.v5.n3.T`%T`%o3.<(+<(+v5.o3.sQ@.9.<(+sQ@sQ@sQ@<(+<(+.9..9..9..9.):.):.S%%' ~h&0, !D+`b&{y%B#@!D+>n.>n.!D+;n.-~@}m.]*=]*=-~@>n.{h&yi.j(+p2@j(+mO#5,+5,+jM#jM#jM#jM#mO#mO#k4@k4@k4@=^@=^@wr*wr*wr*wr*=^@=^@=^@=^@=^@=^@=^@=^@=^@=^@o!#o!#o!#o!#o!#o!#o!#o!#l]#o!#xE#xE#^u=dr=dr=o!#dr=&b=.X+iM#o!#XT#xE#^u=^u=dr=l]#l]#dr=o!#o!#dr=uG#uG#uG#*r=*r=&r=&r=&r=sX%&r=*r=uG#uG#*r=&r=sX%l]#l]#l]#l]#l]#l]#l]#l]#l]#dr=o!#dr=&b=.X+.X+yE#*r=*r=*r=*r=*r=*r=*r=*r=vu#N:**r=&r=sX%sX%sX%sX%iM#&b=&b=l]#l]#&b=&b=iM#l]#l]#l]#l]#&b=&b=&b=&b=iM#&b=l]#=Z+=Z+=Z+=Z+l]#o!#o!#o!#o!#o!#o!#o!#&s*Ce+k$=k$=k$=h;=h;=h;=h;=c1$c1$k$=k$=k$=c1$j(;)A&nh.';$US+23+OP*OP*OP*OP*HV.u!=x{+OP*OP*23+OP*xE*{h&%z&%z&%z&%z&.y&.y&.y& == ==)A&)A&%z&%z&%z&~h&h~ oh.y4&oh.G|@T_+T_+Kh+y4&Kh+G|@G|@Kh+Kh+", "xX%is@Vh.Vh.is@xX%_r+@9.O7.3o.Su$x5.N7._r+is@PI.PI.PI.Hu+8v.VW.VW.VW.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+8v.8v.8v.8v.Hu+Hu+Hu+Hu+VW.VW.VW.8v.8v.Hu+PI.N7.[M@[M@[M@PK.PK.I1.I1.I1.[M@[M@[M@PK.PK.PK.I1.I1.xX%Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+8v.VW.VW.8v.Hu+Hu+N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.cp.PI.8v.Hu+#9.[3+[3+cp.|5+[3+[3+[3+cp.#9.#9.#9.$B#M7.N7.N7.%0+$B#%0+N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+$B#$B#@9.@9.%0+M7.M7.N7.N7._r+xX%xX%M7.M7.M7.M7.M7.M7.M7.M7.$B#$B#$B#$B#%0+%0+%0+%0+M7.%0+%0+%0+%0+M7.N7._r+$B#$B#$B#$B#$B#$B#$B#$B#,H.,H.,H.q3.0q.<3+<3+<3+0q.0q.0q.0q.0q.0q.0q.0q.:(+,H.q3.q3.,H.,H.,H.q3.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+q3.,H.,H.:(+:(+bp.bp.+9.:(+:(+:(+:(+:(+:(+:(+:(+q3.q3.q3.q3.q3.0q.<3+<3+,H.:(++9.bp.,H.q3.:(+bp.0q.0q.0q.0q.0q.0q.0q.0q.0q.0q.q3.,H.,H.:(+bp.bp.,H.,H.q3.q3.,H.,H.,H.q3.@9.eO@)Z%)Z%)Z%,X@'Z%DI#@9.eO@)Z%@9.M7.M7.$B#eO@:(+:(+:(+:(+:(+:(+:(+:(+bp.,H.,H.:(+bQ#o&=bQ#bp.bp.bp.bp.:(+:(+,H.,H.,H.bp.q3.q3.+9.+9.q3.,H.+9.v7+v7+,H.:(+:(+bp.:^+:^+It&It&It&It&Sx&Sx&Sx&It&p3.:(+,H.,H.,H.,H.:(+bp.+9.+9.+9.+9.+9.+9.+9.+9.bQ#+9.bp.:(+:(+bp.bp.+9.bp.bp.bp.bp.bp.bp.bp.bp.+9.bp.bp.bp.bp.bp.bp.+9.,H.:(++9.bQ#bQ#+9.:(+,H.+9.bp.:(+:(+:(+:(+bp.+9.bp.bp.bp.bp.bp.bp.bp.)Z%DI#j$&'Z%'Z%NR*NR*jX-B<+B<+B<+{S*:(+:(+@9.^n#SW#&o@WN.d@@k(;l(;m(;LC-n(;Y';o(;n$$Ic /*@p(;2.@}!--p Zq cw 6v 6v A_#uy uy kx S} 'p :} ,p n| +' (,@/d@;! +~ t! X:@r[@sG -E }g }g *E *E *E =E =E =E pM%*L%GJ%GJ%GJ%GJ%*L%pM%*L%*L%GJ%GJ%Nt%Nt%u1$u1$Eu Eu vR@$4@$4@vR@Eu Eu Eu $4@[|@[|@$4@$4@[|@_|@r[@t! W:@W:@W:@;! /d@+L@ 9 9 /d@(7 /d@/d@ 9 O9 /M ]M bj#vg#OH#SJ#SJ#SJ#Dd#Dd#Dd#O8#LH#LH#zg#;6#'t='t=6`%6`%Cd#P8#ZC@ZC@Cd#Cd#6`%Ao&Cu=@D=&h&'t=R8#%)&U#;t8&9`%kp&9`%6=;lg&lg&6=;N>;N>;N>;6=;6=;,*;/f@7!;:X%XE@XE@Vm@Vm@m`&Y+*Rm@:f@B&#h@#Dv@))#w! 6q#]M ]M /M /M d1#d1#d1#d1#d1#d1#d1#d1#d1#d1#))#B_#1f WA @~ (|@$4@Kv vR@Eu Eu Kv &E u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$}g }g }g }g -E -! sG rG rG >b@r[@t! W:@;! ]|@(7 +L@@A@bP@bP@RT@RT@uR@b.#UE@UE@UE@Cv@Y=#O~#85*Zq -1-HX-SW-%)#JX-(X-%)#(X-F,;JX-tu*LX-zn-4n N^#FX-d-;52-({@QK.s2@=g@eO=N|@g6@g6@v5.v5.v5.n3.T`%T`%o3.sQ@<(+v5.v5.<(+.9.sQ@sQ@sQ@sQ@<(+<(+.9..9..9.<(+<(+.9.):.S%~h&0, }m.!D+'W+'W+!D+-~@-~@>n.-~@-~@}m.}m.}m.-~@>n.{h&>0+mO#IV.mO#5,+$' $' jM#mO#k4@k4@k4@k4@k4@k4@k4@&s*=^@+v=#x+#x++v==^@&s*&s*&s*&s*&s*&s*&s*&s*&s*o!#o!#o!#o!#o!#o!#o!#o!#=Z+^u=XT#XT#m}+o!#o!#^u=o!#l]#&b=l]#o!#m}+^u=dr=^u=o!#dr=dr=o!#o!#o!#o!#N:*N:*uG#uG#*r=*r=&r=&r=&r=&r=*r=*r=*r=*r=&r=&r=l]#l]#l]#l]#l]#l]#l]#l]#l]#dr=o!#dr=&b=.X+.X+yE#*r=*r=*r=*r=*r=*r=*r=*r=vu#N:**r=sX%S`%sX%&r=*r=iM#iM#iM#&b=&b=iM#iM#iM#=Z+=Z+=Z+l]#&b=iM#iM#iM#yE#iM#&b=l]#=Z+=Z+l]#l]#o!#o!#o!#o!#o!#o!#o!#&s*}t=k$=k$=h;=p2$p2$t3$t3$c1$c1$k$=k$=k$=k$=k$=.y&c> u]#US+OP*x{+x{+OP*23+u!=u!=[f.x{+OP*23+23+17*{h&.y&.y&.y&.y&%z&%z&)A& == == == == == == ==&, h~ oh.y4&7P.T_+xc+xc+T_+oh.Kh+G|@Kh+oh.y4&", "O7.is@Vh.Vh.is@O7.xX%$B#x5.3o.3o.x5.N7.xX%is@PI.PI.PI.Hu+8v.VW.VW.VW.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+8v.8v.8v.8v.9, VW.8v.Hu+Hu+PI.PI._r+c+#wH.1P*1P*-G.-G.9M.9M.1P*1P*1P*-G.-G.-G.9M.I1._r+PI.PI.PI.PI.PI.PI.PI.Hu+Hu+8v.VW.VW.8v.Hu+Hu+N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.cp.h% 6% i% <4 ;H.;H.s3.5v@5v@;H.;H.s3.<4 h% PI.$B#M7.N7.N7.%0+$B#%0+N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+$B#$B#@9.@9.%0+M7.M7.N7.N7._r+xX%xX%M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+%0+$B#$B#$B#$B#M7.%0+%0+%0+%0+M7.N7._r+$B#$B#$B#$B#$B#$B#$B#$B#,H.,H.,H.q3.0q.<3+<3+<3+0q.0q.0q.0q.0q.0q.0q.0q.q3.q3.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(++9.bp.bp.:(+:(+,H.,H.q3.:(+:(+:(+:(+:(+:(+:(+:(+<3+<3+0q.0q.0q.q3.,H.,H.,H.:(++9.bp.,H.q3.:(+bp.0q.0q.0q.0q.0q.0q.0q.0q.0q.0q.q3.q3.,H.,H.:(+:(+q3.,H.,H.,H.q3.q3.,H.,H.eO@eO@eO@)Z%,X@'Z%'Z%'Z%@9.eO@)Z%@9.M7.M7.$B#eO@:(+:(+:(+:(+:(+:(+:(+:(+bp.:(+q3.:(++9.o&=bQ#+9.+9.+9.bp.:(+:(+,H.q3.q3.+9.,H.q3.+9.+9.q3.q3.bp.Rz.Rz.,H.:(+:(+bp.p3.p3.It&It&It&It&Sx&Sx&Sx&It&p3.:(+,H.,H.,H.,H.:(+bp.bp.bp.bp.bp.bp.bp.bp.bp.+9.bp.bp.:(+:(+bp.+9.bQ#+9.+9.+9.+9.+9.+9.+9.+9.bp.bp.bp.+9.+9.bp.bp.bp.,H.:(++9.bQ#bQ#+9.:(+,H.:(+:(+,H.q3.q3.,H.:(+:(+bp.bp.bp.bp.bp.bp.bp.)Z%DI#j$&'Z%'Z%NR*NR*jX-B<+B<+B<+{S*:(+:(+@9.^n#&o@E6.gP.WO+Y];f-;8`-q(;r(;s(;t(;*2 r*$1u dv=2.@~~;]p=J[$cw }n 6v /m Bv@Bv@uy i[#/0#<} :} ,p 7, /,@ 9 ]|@W:@+~ t! X:@rG -! }g }g }g *E *E *E =E =E pM%*L%GJ%GJ%GJ%GJ%*L%pM%GJ%GJ%GJ%GJ%Nt%Nt%Nt%Nt%Kv Eu Eu vR@vR@Eu Eu Kv Eu $4@[|@[|@$4@$4@[|@_|@rG r[@+~ Y:@;! /d@@A@uR@O9 9 /d@/d@(7 /d@ 9 9 e1#/M 6q# t#OH#SJ#LH#LH#Dd#Dd#zg#MH#SJ#SJ#O8#Zo@6`%6`%Cd#P8#P8#P8#ZC@ZC@Jw&Cd#Cd#nq&&h&G-&6`%Fa#Q8#03&mg&+I=F=;F=;pv=B$;B$;+I=}d&7z=)$&)$&)$&ov=,*;'L&/f@:X%Vm@7s=N,&u&* l&Z+*FN#'d@B&#h$#c1#XC@w! 6q#]M ]M /M /M d1#d1#/M /M /M /M /M /M /M /M !)#')#YA ^|@(|@:|@vR@&E Eu Eu Kv &E u1$Nt%Nt%GJ%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$}g }g }g }g -E tG sG rG >b@r[@X:@+~ Y:@;! (7 /d@.9 RT@uR@uR@bP@bP@uR@UE@UE@UE@UE@Cv@VE@0u#qR#J[$Y4-CX-M^#0X-0X-!X-_X-1X-l';f}*|];)Y-+l *l jt*Ao=o,@KS=.+;{U=D<&dN=+=@]q%g6@g6@v5.v5.v5.n3.T`%T`%v5.sQ@<(+n3.h;#):.):.h;#sQ@sQ@sQ@<(+<(+.9..9..9.sQ@<(+.9.):.n.0, >0+jM#k4@mO#jM#jM#k4@j(+k4@k4@k4@k4@k4@k4@k4@mO#xr*&s*wr*+v=+v=wr*&s*xr*uq*uq*uq*uq*uq*uq*uq*uq*o!#o!#o!#o!#o!#o!#o!#o!#o!#m}+XT#xE#^u=o!#^u=xE#^u=o!#dr=dr=o!#dr==Z+&b=o!#^u=^u=^u=^u=o!#o!#^u=N:*N:*N:*uG#uG#*r=*r=*r=*r=*r=&r=&r=&r=&r=*r=*r=l]#l]#l]#l]#l]#l]#l]#l]#yE#l]#dr=dr=&b=iM#iM#l]#*r=*r=*r=*r=*r=*r=*r=*r=N:*uG#&r=sX%S`%sX%*r=uG#&b=iM#iM#iM#iM#iM#iM#&b==Z+=Z+=Z+l]#&b=iM#iM#iM#yE#iM#&b=l]#=Z+=Z+l]#l]#o!#o!#o!#o!#o!#o!#o!#&s*}t=k$=k$=h;=p2$p2$t3$t3$k$=k$=k$=k$=k$=k$=h;=+y&c> u]#';$OP*x{+x{+OP*23+OP*OP*OP*23+23+US+';$zi.&, )A&%z&.y&%z&)A& ==.==)A&)A& ==.==3P cl.PN.B9.Bj.oh.oh.Kh+$(+Ea+xc+$(+7P.G|@G|@7P.iS.w5&", "x5.x5.x5.x5.x5.x5.is@N7.x5.%j.%j.is@xX%O7.is@Hu+Hu+Hu+Hu+8v.8v.8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+8v.8v.8v.8v.VW.VW.Hu+Hu+PI.Hu+Hu+O7.c+#wH.wH.1P*1P*-G.-G.-G.1P*1P*1P*-G.-G.-G.9M.I1.N7.#9.#9.#9.#9.#9.#9.#9.PI.PI.Hu+8v.8v.Hu+PI.PI.N7.N7.N7.N7.N7.N7.N7.N7.M7.N7.N7._r+_r+N7.N7.M7.s3.h% 6% i% <4 ;H.;H.s3.5v@5v@;H.;H.s3.<4 <4 #9.|5+M7.N7.N7.%0+$B#%0+N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+$B#$B#M7.M7.M7.M7.M7.N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+%0+$B#$B#$B#$B#%0+$B#$B#$B#$B#%0+M7.N7.$B#$B#$B#$B#$B#$B#$B#$B#q3.q3.q3.q3.0q.0q.0q.0q.q3.q3.q3.q3.q3.q3.q3.q3.v4.q3.:(+:(+,H.q3.,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+bQ#bQ#+9.bp.,H.q3.0q.0q.:(+:(+:(+:(+:(+:(+:(+:(+0q.0q.<3+0q.q3.,H.bp.+9.,H.:(++9.bp.,H.q3.:(+bp.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.:(+bp.:(+,H.q3.,H.bp.)Z%eO@@9.eO@,X@,X@)Z%eO@eO@)Z%)Z%eO@%0+%0+@9.)Z%:(+:(+:(+:(+:(+:(+:(+:(+bQ#bp.,H.,H.bp.bQ#bQ#+9.+9.bp.bp.:(+:(+,H.,H.q3.bQ#,H.,H.+9.+9.q3.0q.bp.k<.k<.:(+:(+:(+:(+w5.w5.It&It&It&It&Sx&Sx&Sx&It&p3.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.:(+:(+:(+bp.+9.bQ#+9.+9.+9.+9.+9.+9.+9.+9.:(+bp.+9.+9.+9.+9.bp.:(+,H.:(++9.bQ#bQ#+9.:(+,H.:(+,H.q3.q3.q3.q3.,H.:(+bp.bp.bp.bp.bp.bp.bp.)Z%'Z%]Z@,X@,X@NR*{S*B<+B<+B<+B<+{S*:(+:(+@9.^n#&o@`q@8).^U= =;W);u(;v(;w(;x(;9P@#r Ct =M 'e=EJ@.);}!-@p=6v }n >p cw |n |n Bv@kx S} {1 <} :} 36 /,@O9 (7 Y:@W:@+~ t! >b@tG -E -E }g }g *E *E *E =E *L%GJ%GJ%Nt%Nt%GJ%GJ%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Eu Eu Eu Eu Eu Eu Eu Eu Eu $4@[|@[|@$4@$4@[|@_|@sG r[@+~ Y:@;! /d@@A@[`@O9 O9 9 /d@(7 /d@/d@ 9 e1#d1#]M bj#vg#OH#OH#OH#MH#O8#O8#LH#OH#SJ#O8#;6#P8#P8#ZC@Fa#Fa#ZC@P8#Cd#nq&Cd#Cd#nq&Ao&6`%ZC@Bd#$7&4@;);;F=;wY&@w=}>;@w=2c&-k*);;7z=2y&)$&-=;)$&M*;/f@7!;L*;t&*N,&*)&Wm@;6#;6#Si@B&#$b@h$#6u#h@#w! 6q#]M ]M /M /M d1#d1#/M /M /M /M /M /M /M /M QT@1f @~ (|@_|@[|@vR@Kv Eu Kv Kv &E u1$Nt%GJ%GJ%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$}g }g }g }g -E -! sG rG r[@X:@t! W:@;! ]|@/d@/d@+L@@A@bP@uR@bP@bP@b.#i@#UE@UE@i@#C&#P~#u_$(X%^m Ur no=!X-JX-(X-no=0X-)Y-Wt*y(;+<*w_$4##l';uS.~5.@~+.+;d-;{U=He+]q%eO==g@g6@g6@v5.v5.v5.n3.T`%T`%n3.sQ@sQ@h;#<(+g|.):.n3.sQ@sQ@sQ@<(+<(+.9..9..9.<(+<(+.9..9.):.n.;n.}m.]*=]*=]*=}m.}m.-~@-~@;n.;n.;n.&, ,0+k4@IV.IV.k4@k4@p2@6,+k4@k4@k4@mO#mO#jM#jM#jM#xr*&s*&s*=^@=^@&s*&s*xr*uq*uq*uq*uq*uq*uq*uq*uq*o!#o!#o!#o!#o!#o!#o!#o!#o!#m}+xE#m}+o!#o!#^u=xE#m}+^u=^u=^u=dr==Z+&b=yE#=Z+o!#m}+m}+o!#dr=dr=o!#vu#N:*N:*N:*uG#uG#*r=*r=uG#*r=&r=sX%sX%&r=*r=uG#l]#l]#l]#l]#l]#l]#l]#l]#/W%iM#=Z+=Z+l]#&b=l]#dr=*r=*r=*r=*r=*r=*r=*r=*r=uG#*r=&r=&r=&r=&r=*r=*r=l]#&b=&b=iM#iM#&b=&b=l]#l]#l]#l]#l]#&b=&b=&b=&b=iM#&b=l]#=Z+=Z+=Z+=Z+l]#o!#o!#o!#o!#o!#o!#o!#&s*Ce+k$=k$=k$=h;=h;=h;=h;=p2$p2$h;=k$=k$=k$=h;=+y&x{ d #';$US+23+23+23+23+u]#d #';$US+US+';$d #nh.Av& ==%z&.y&.y&%z&)A& ==%z&%z&)A&.==3P cl.PN.8P.Bj.7P.oh.Kh+T_+xc+$(+G|@Kh+G|@G|@7P.iS.w5&", "Vh.x5.xX%xX%x5.Vh.dD.x5.is@is@is@is@x5.is@is@8v.8v.8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.Hu+Hu+8v.8v.VW.VW.8v.8v.PI.PI.PI.Hu+VW.is@c+#wH.wH.wH.1P*1P*-G.-G.1P*1P*1P*-G.-G.-G.9M.I1.%0+[3+[3+[3+[3+[3+[3+[3+#9.#9.PI.Hu+Hu+PI.#9.#9.N7.N7.N7.N7.N7.N7.N7.N7.%0+M7._r+xX%xX%_r+M7.%0+s3.h% 6% i% <4 ;H.;H.s3.;H.;H.;H.s3.s3.s3.s3.cp.|5+M7.N7.N7.%0+$B#%0+N7.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.N7.N7.M7.M7.%0+%0+M7.M7.M7.%0+%0+%0+%0+$B#M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+$B#$B#@9.@9.$B#@9.@9.@9.@9.$B#%0+M7.$B#$B#$B#$B#$B#$B#$B#$B#0q.0q.0q.0q.q3.q3.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.#k.0q.bp.bp.,H.q3.,H.bp.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(++9.+9.bp.:(+:(+,H.q3.q3.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+q3.q3.q3.,H.:(+bp.,H.:(++9.bp.,H.q3.:(+bp.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+,H.q3.0q.<3+<3+<3+,H.bp.bQ#+9.,H.q3.:(++9.,X@eO@$B#$B#)Z%)Z%@9.%0+)Z%,X@'Z%)Z%$B#$B#eO@,X@:(+:(+:(+:(+:(+:(+:(+:(+b,++9.,H.,H.bp.+9.+9.bp.bp.bp.:(+:(+:(+:(+,H.,H.bQ#,H.,H.+9.bp.0q.0q.:(+*T#*T#bp.:(+:(+,H.N7+N7+It&It&It&It&Sx&Sx&Sx&It&w5.bp.bQ#o&=o&=bQ#bp.:(+:(+:(+:(+:(+:(+:(+:(+:(+bp.:(+:(+:(+bp.+9.bQ#o&=+9.+9.+9.+9.+9.+9.+9.+9.:(+bp.+9.bQ#bQ#+9.bp.:(+,H.:(++9.bQ#bQ#+9.:(+,H.bp.:(+,H.,H.,H.,H.:(+bp.bp.bp.bp.bp.bp.bp.bp.)Z%,X@R]$)Z%)Z%ns#ns#b}+b}+B<+B<+{S*:(+:(+@9.^n#&o@72.[-.gP.X+-_:+J`-;r=z(;A(;B(;V4 w*@#L@l .C(;D(;g2*6L=^p=D,#>p cw |n |n |n uy Zp /0#'p :} 36 +' +L@/d@;! W:@W:@t! >b@sG -E -E -E }g }g *E *E *E GJ%Nt%Nt%u1$u1$Nt%Nt%GJ%u1$u1$u1$u1$u1$u1$u1$u1$vR@Eu Eu Eu Eu Eu Eu vR@Eu $4@[|@[|@$4@$4@[|@_|@rG r[@t! +~ +~ ;! /d@.9 +L@O9 9 /d@(7 (7 /d@/d@f1#e1#/M 6q#bj# t# t# t#vg#SJ#LH#LH#OH#SJ#MH#Dd#TJ#TJ##b@#b@TJ#ZC@P8#6`%'t=P8#6`%Ao&nq&P8#Cd#MA=:&;,v=1%;E(;F(;G(;F(;H(;I(;2c&J(;,v=,W=-=;K(;Gu=5t=L*;L*;L*;t&*N,&*)&Wm@Zo@Dd#B&#h$#h@#h@#6u# p@w! 6q#]M ]M /M /M d1#d1#/M /M /M /M /M /M /M /M ')#YA (|@:|@[|@[|@$4@Eu Kv Kv &E u1$Nt%Nt%GJ%GJ%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$*E *E *E *E }g -! tG sG r[@X:@+~ W:@;! (7 /d@ 9 9 .9 RT@bP@bP@uR@b.#Cv@Cv@Cv@C&#Z=#O~#pR#h_*/o o7-no=_X-+<*%)#M^#x,;Wt*6)*jt*,3 w_$Q);&R+A,=l,.d-;@=@nj*@=@eg+0M.Yj@0M.g6@g6@v5.v5.v5.n3.T`%T`%n3.sQ@sQ@h;#.9.cO@):.v5.sQ@sQ@sQ@<(+<(+.9..9..9..9..9..9..9.):.):.):.):. ';$';$d #d #';$US+23+v]#:{+d #US+US+US+US+zi.ZQ. ==%z&Xw&Xw&Xw&.y&%z&%z&%z&%z&)A& == ==.==Av&/{ Kh+oh.7P.G|@T_+G|@7P.oh.Kh+T_+G|@7P.oh.", "dD.O7._r+_r+O7.dD.Su$dD.is@O7.O7.is@Vh.Vh.is@VW.VW.VW.8v.Hu+PI.PI.PI.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+PI.PI.Hu+Hu+8v.8v.VW.VW.Hu+Hu+PI.#9.PI.8v.9, Vh.{$+c+#c+#c+#[M@[M@PK.PK.[M@[M@[M@PK.PK.PK.I1.I1.$B#|5+|5+|5+|5+|5+|5+|5+cp.#9.#9.PI.PI.#9.#9.cp.N7.N7.N7.N7.N7.N7.N7.N7.%0+M7._r+xX%xX%_r+M7.%0+cp.PI.6% Hu+<4 [3+;H.cp.s3.cp.s3.cp.s3.cp.s3.cp.$B#M7.N7.N7.%0+$B#%0+N7.M7.M7.M7.M7.M7.M7.M7.M7._r+_r+_r+N7.N7.M7.M7.M7.M7.M7.%0+%0+$B#@9.@9.@9.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+$B#$B#@9.@9.@9.@9.eO@eO@eO@@9.%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#<3+<3+<3+0q.q3.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+b@X:@t! X:@X:@X:@W:@]|@+L@O9 9 /d@(7 (7 (7 /d@f1#e1#/M ]M 6q#6q#6q#6q#6q# t##b@#b@#b@#b@Fa#P8#Ic&Ic&wg#wg##b@Fa#Cd#6`%6`%S8#,6#/=&F-&Ha#F-&]%%)$&U;;|>;1>;U(;r>;V(;W(;$w=I(;J(;UE=,W=K(;K(;-=;&u&**)& l&;6#$b@h@#{Y@{Y@8.#h@#6q#6q#]M ]M /M /M d1#d1#/M /M /M /M /M /M /M /M 1f WA _|@[|@[|@<|@$4@Eu Kv Kv &E u1$Nt%GJ%GJ%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$u1$u1$u1$u1$u1$*E *E =E *E }g -E tG sG X:@t! +~ Y:@]|@(7 9 O9 /d@O9 @A@bP@bP@uR@UE@j$#C&#C&#Z=#ir#u_$(X%k`&/p=|6-Ho=k:*HP-tH-o7-Um-X(;Vm-F> 2k Y-q[*/(-/(-aM.He+eg+=g@D0@i)@]q%k1+9<@g6@g6@v5.v5.v5.n3.T`%T`%n3.sQ@sQ@h;#):.dO@n.-~@]*=}m.-~@;n.;n.;n.;n.&, sq*$' $' X+zM+zM+1<#qK+mO#mO#jM#jM#5,+$' $' qK+&s*xr*,C+Fu+Fu+,C+xr*&s*+v=+v=+v=+v=+v=+v=+v=+v=o!#o!#o!#o!#o!#o!#o!#o!#o!#^u=m}+o!#=Z+=Z+o!#m}+&b==Z+o!#^u=o!#dr==Z+=Z+iM#dr=m}+m}+dr=l]#=Z+dr=vu#vu#vu#N:*N:*uG#uG#uG#uG#*r=&r=sX%sX%&r=*r=uG#l]#l]#l]#l]#l]#l]#l]#l]#yE#l]#dr=dr=&b=iM#&b=l]#*r=*r=*r=*r=*r=*r=*r=*r=S`%sX%*r=N:*N:*uG#&r=sX%o!#dr=l]#&b=&b=l]#dr=o!#iM#iM#iM#&b=l]#=Z+=Z+=Z+l]#=Z+dr=o!#o!#o!#o!#dr==Z+=Z+=Z+=Z+=Z+=Z+=Z+uq*Kq=k$=k$=c1$j(;j(;Y(;Y(;rN%JA%p2$k$=c1$c1$c1$.y&xE*US+d #u]#u]#d #';$23+h]@v]#d #US+23+OP*23+17*ZQ.&, >S%X@$u3$x*$X@$>S%{h&{h&~h&~h&~h&~h&>S%>S%|m.Kh+oh.7P.G|@G|@7P.oh.y4&7P.T_+T_+T_+$(+", "x5.O7.O7.O7.x5.is@is@is@x5.O7.xX%xX%O7.is@Vh.x5.x5.x5.x5.x5.x5.x5.x5._r+_r+_r+xX%O7.x5.x5.x5.is@x5.O7.O7.O7.O7.x5.is@O7.xX%N7.M7.M7.N7.xX%O7.x5.O7.xX%_r+_r+xX%O7.x5.xX%_r+_r+N7.N7.M7.M7.%0+#k.v4.v4.<3+<3+0q.q3.q3.F6.F6.G=RU {z&=_;@].He+g6@g6@g6@g6@g6@g6@o3.o3.t4.h;#<(+n3.:^+p3.v5.):..9.<(+sQ@h;#sQ@<(+):. 17*17*J> zi.$.@c> xE*xE*xE*xE*xE*xE*xE*xE*';$US+OP*x{+[f.u!=u!=u!=';$';$';$US+23+23+", "x5.O7.O7.O7.O7.x5.is@is@x5.O7.xX%xX%O7.is@Vh.x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%O7.O7.O7.O7.x5.O7.O7.xX%xX%O7.O7.x5.x5.O7._r+N7.N7._r+O7.x5.VW.8v.Hu+PI.PI.Hu+8v.VW.Hu+PI.PI.PI.#9.cp.cp.cp.#k.#k.#k.#k.v4.v4.v4.v4.#k.#k.#k.#k.v4.v4.v4.v4.<3+v4. jA--_;;_;Kx@>_;Lx@,_;'_;)_;9n 8n 8n 2n `8 26 xn#xn#Q1 (1 F> 3' _t Xr qG qG tG -! vR@Eu Kv &E b|$%B%u1$u1$Nt%Nt%GJ%GJ%GJ%GJ%u1$u1$u1$&E &E &E Kv Kv u1$u1$u1$&E &E Kv Kv Kv $4@$4@$4@$4@$4@$4@$4@$4@[|@:|@_|@(|@^|@@~ WA YA 1f 1f kI@')#B_#QT@!)#!)#a7#a7#d1#/M /M ]M J`%J`%6C#J7&36&e5&FG=FG=FG=e5&e5&#b@TJ##b@#b@TJ#'6#T &KR=8^&EV=&a&&!;&a&lm&6t=!_;sh&$-;;;;t>;~_;)v=~;;{_;>,;]_;W(;F(;jy&;$&S;;Du=;G=Y+*Qm@Qm@Qm@Z+*Zo@Zo@MH#vg#vg#LH#MH#OH#]M /M /M /M /M /M /M /M /M ]M /M d1#]M 6q#6q#f1#xy a~ @~ _|@<|@vR@vR@$4@<|@vR@Eu &E u1$Nt%Nt%u1$u1$i0$i0$i0$i0$i0$i0$i0$i0$}g *E i0$1C%1C%i0$=E *E *E }g -E tG rG >b@X:@t! +~ ;! (7 (7 ]|@]|@ 9 +L@n| ,p ,p <} {1 4' S} S} (o uy A_#}n Fz 1g 0C=rg*=D=Xy=[B=>4*Hz=^_;Hz=JN#b4#7i=/_;g6@^^@Fn=Fn=M|@v5.v5.v5.v5.v5.v5.v5.v5.D6.h;#S%>S%{h&0, ~h&x{ 3<@x{+US+d #u]#u]#d #';$US+US+US+US+US+US+US+US+';$US+23+OP*x{+OP*23+US+23+23+23+23+23+23+23+23+d #';$23+OP*x{+[f.[f.x{+US+US+23+23+23+23+", "x5.O7.O7.O7.O7.x5.x5.is@x5.O7.O7.O7.O7.x5.is@x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%x5.O7.O7.xX%xX%O7.O7.x5.VW.8v.Hu+PI.PI.Hu+8v.VW.Hu+PI.PI.PI.#9.#9.#9.#9.#k.#k.;;d9*:_;=;;&t&J;;}>&t-;Q%;<_;[_;}_;r>;[K&X.;>$&5u=@D=Yo@ l&Zo@Z+*Z+*Zo@;6#Dd#MH#OH#OH#MH#O8#SJ# t#d1#d1#d1#d1#d1#d1#d1#d1#/M ]M 6q#bj# t#]M ew LZ$@~ /|@:|@<|@vR@Eu vR@vR@Kv &E u1$u1$Nt%u1$u1$&E i0$i0$i0$i0$i0$i0$i0$i0$*E *E =E i0$i0$=E *E }g =E *E -E -! sG >b@r[@X:@W:@;! (7 /d@ 9 O9 .9 RT@,p :} <} 'p {1 /0#4' S} (o z, cw D,#^p={t Z4-t|*=D=3z=HA=HA=MW-EW-E,#VH%6N=<~;UJ=F8@H8@c3+g6@M|@n3.n3.n3.n3.n3.n3.n3.n3.:^+h;#dO@Z`+g|.sQ@n3.n3.h;#h;#n3.n3.n3.h;#<(+<(+h;#h;#sQ@sQ@<(+<(+<(+.9..9..9..9..9..9.):.):.):..9..9..9..9..9..9..9..9.sX%sX%S`%S`%S`%&r=*r=*r=*r=*r=&r=&r=&r=sX%sX%sX%&r=&r=&r=&r=&r=&r=&r=&r=*r=&r=&r=sX%&r=*r=uG#uG#*r=*r=*r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%uG#uG#*r=*r=&r=&r=sX%sX%S`%sX%&r=&r=&r=&r=sX%S`%sX%sX%&r=&r=*r=*r=uG#uG#Fn=C{@l]#=Z+^u=m}+&s*xr*=$@=$@sy=sy=.==.==.== ==Av&Av&Av&Av&Av&Av&Av&Av&ZQ.ZQ.Av&&, 0, 0, {h&{h&)A&)A&)A& ==.==.==.==3P )A&)A&)A&)A&)A&)A&)A&)A&4p=8P.Bv&Av&Av&Av&Bv&B9.Av&Av&&, 0, 0, &, Av&yi.u.@jM#5,+5,+jM#5,+qK+1<#j(+k4@mO#mO#IV.IV.mO#5,+mO#mO#mO#mO#mO#mO#mO#mO#k4@$' $' mO#mO#qK+qK+jM#=^@=^@=^@&s*&s*&s*xr*xr*&s*&s*&s*&s*&s*&s*&s*&s*uq*uq*uq*uq*uq*uq*uq*uq*Fu+Fu+Fu+Fu+Fu+Fu+Fu+Fu+l]#l]#l]#l]#l]#l]#l]#l]#=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+l]#l]#l]#=Z+=Z+=Z+dr=dr=l]#=Z+dr=dr=dr=dr==Z+l]#uG#*r=&r=&r=&r=&r=*r=uG#uG#uG#uG#uG#uG#uG#uG#uG#iM#iM#&b=l]#=Z+dr=dr=o!#l]#l]#=Z+=Z+=Z+dr=dr=dr=,C+xr*=^@&s*xr*xr*&s*wr*&s*&s*xr*xr*xr*xr*uq*uq*{h&{h&{h&{h&{h&{h&{h&{h&{h&~h&%' >S%0, &, 0, zi.U*@x{+OP*23+US+US+';$';$US+US+US+US+US+US+US+US+';$US+OP*x{+[f.u!=[f.[f.US+US+US+US+US+US+US+US+u]#d #US+23+OP*OP*OP*OP*OP*OP*OP*23+23+23+", "is@x5.O7.O7.O7.O7.x5.is@is@x5.x5.O7.O7.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.O7.xX%_r+_r+_r+_r+_r+_r+xX%xX%_r+_r+_r+x5.x5.x5.O7.O7.x5.x5.x5.8v.8v.Hu+Hu+Hu+Hu+8v.8v.PI.PI.PI.PI.PI.PI.PI.PI.v4.v4.#k.#k. /1 y, Xr e{@e{@rG sG $4@vR@Eu &E %B%%B%&E &E u1$u1$Nt%Nt%GJ%GJ%Nt%Nt%Nt%u1$u1$&E &E &E u1$u1$u1$&E &E Kv Kv Kv Eu Eu Eu Eu vR@vR@vR@vR@[|@:|@_|@(|@^|@@~ WA YA a~ 1f 1f kI@')#B_#QT@QT@/7 /7 e1#e1#d1#/M .t#.t#e5&e5&e5&e5&[i&n,;n,;a-;Ov#TJ#ZC@P8#ZC@P8#7`%F-&,T=8^&Oz&o ;9U%9U%10&R^;2_;3_;6.;I-;&t&J;;GA&0U=G`-4_;5_;U;;X.;%#;'~;`t= F=Qm@Zo@Z+*Qm@Y+*Z+*Dd#O8#LH#SJ#LH#O8#O8#LH#vg#d1#d1#d1#d1#d1#d1#d1#d1#d1#]M t#vg# t#/M xy =p@/|@(|@:|@<|@vR@Eu Eu Eu u1$u1$Nt%Nt%Nt%u1$&E Kv i0$i0$i0$i0$i0$i0$i0$i0$=E =E =E =E *E *E }g }g *E *E -E tG sG >b@X:@X:@+~ Y:@]|@/d@O9 .9 RT@uR@,p <} 'p {1 {1 {1 4' S} kx |n >p ^p=/o 0C=6L=^|$tU=sU=f8.H3*eW-M';k[#&3##!;M|@ =@I7.I7.M|@%U*c3+h;#h;#h;#h;#h;#h;#h;#h;#D6.h;#g|.dO@g|.<(+n3.n3.n3.n3.n3.n3.n3.h;#sQ@sQ@n3.h;#h;#h;#sQ@sQ@<(+<(+sQ@<(+<(+.9.):.):.S%~h&0, &, &, &, 0, {h&{h&0, &, u.@>0+$' $' 5,+5,+$' SO+ X+IV.mO#jM#jM#k4@IV.mO#5,+mO#mO#mO#mO#mO#mO#mO#mO#IV.5,+5,+mO#mO#SO+SO+5,+=^@=^@&s*&s*&s*&s*&s*&s*&s*&s*&s*&s*&s*&s*&s*&s*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+l]#l]#=Z+=Z+=Z+=Z+=Z+=Z+dr=dr=dr=dr=dr=dr=dr=dr=&r=S`%CI#Q+&Q+&CI#S`%&r=*r=*r=*r=*r=*r=*r=*r=*r=iM#&b=&b=&b=l]#=Z+=Z+=Z+dr=dr=dr=dr=dr=dr=dr=dr=,C+xr*&s*&s*xr*uq*&s*wr*=^@=^@=^@&s*xr*xr*uq*uq*{h&{h&{h&{h&{h&{h&{h&{h&{h&>S%%' ~h&0, Av&&, J> 17*OP*x{+[f.x{+23+US+d #US+US+US+US+US+US+US+US+23+23+OP*x{+x{+[f.[f.[f.';$';$';$';$';$';$';$';$u]#u]#';$US+US+US+US+US+OP*23+23+US+';$';$", "is@x5.O7.xX%xX%O7.O7.is@is@is@x5.x5.O7.xX%xX%x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.O7.xX%_r+_r+_r+N7._r+xX%O7.O7.xX%_r+N7.O7.x5.x5.x5.x5.x5.x5.O7.Hu+Hu+8v.8v.8v.8v.Hu+Hu+PI.PI.PI.PI.Hu+Hu+Hu+Hu+<3+<3+v4.v4.#k.#eS-&[ *[ wf=:u (o 4' <} n| (1 ]1 o| N1 _,@_t qG e{@>b@rG <|@$4@Eu &E %B%%B%&E &E &E u1$u1$Nt%Nt%Nt%GJ%GJ%Nt%Nt%u1$u1$&E &E u1$u1$u1$&E &E Kv Kv Kv Kv Kv Eu Eu vR@vR@$4@$4@[|@:|@_|@(|@^|@@~ WA YA a~ a~ 1f kI@')#B_#B_#QT@/7 /7 e1#d1#/M ]M .t#J`%e5&e5&e5&e5&FG=zd#c`%Ad#Ov#TJ#P8#P8#ZC@ZC@'6#7`%&)&+]&GV=)!;9U%9U%10&p^;T3@T ;6_;7_;8_;[6&zB&5^&q;;+-;7!&Lx=5/;'=&A-&2>&Ia#O8#MH#;6#Qm@Y+*;6#SJ#LH#LH#LH#MH#O8#MH#SJ#vg#d1#d1#d1#d1#d1#d1#d1#d1#d1#]M vg#vg#6q#f1#LZ$1r@:|@:|@:|@[|@<|@vR@Eu Kv u1$Nt%Nt%GJ%Nt%Nt%u1$&E i0$i0$i0$i0$i0$i0$i0$i0$i0$=E *E *E }g }g }g }g }g }g -! tG rG r[@t! t! +~ +~ Y:@]|@O9 @A@RT@bP@,p 'p /0#4' /0#/0#Zp (o Bv@}n ;c {t 0C=Nj=qy=Ra-0N=Hz=uF=YT-UN=7G@6!#)G=H8@ =@p&=K7.k1+M|@$Z*n4@h;#h;#h;#h;#h;#h;#h;#h;#v5.h;#sQ@<(+h;#n3.n3.h;#v5.v5.n3.h;#h;#h;#h;#h;#n3.h;#h;#h;#sQ@sQ@<(+<(+sQ@<(+<(+.9.):.):.S%%' >S%~h&{h&&, &, 0, {h&{h&0, &, u.@sq*5,+jM#jM#5,+$' qK+qK+mO#5,+$' 5,+mO#k4@jM#5,+mO#mO#mO#mO#mO#mO#mO#mO#IV.5,+5,+mO#mO#SO+SO+5,+&s*&s*&s*&s*&s*&s*=^@=^@=^@=^@=^@=^@=^@=^@=^@=^@xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*xr*=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+l]#l]#dr=dr=dr=dr=dr=dr=dr=dr=&r=sX%CI#w{@w{@CI#sX%&r=&r=&r=&r=&r=&r=&r=&r=&r==Z+l]#l]#l]#&b=iM#iM#iM#dr=dr=dr=dr=dr=dr=dr=dr=Fu+uq*&s*xr*uq*uq*xr*=^@&s*&s*&s*xr*uq*,C+,C+,C+{h&{h&{h&{h&{h&{h&{h&{h&{h&~h&>S%~h&&, Av&&, 17*J> 23+x{+[f.[f.OP*US+d #23+23+23+23+23+23+23+23+OP*OP*23+US+US+US+US+US+';$';$';$';$';$';$';$';$u]#d #';$';$US+US+';$';$US+US+';$';$d #u]#", "Vh.is@O7.xX%xX%xX%O7.is@is@is@is@x5.O7._r+_r+x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.O7.O7.xX%xX%xX%xX%N7._r+O7.x5.x5.O7._r+N7.xX%O7.O7.x5.x5.O7.O7.xX%PI.Hu+8v.VW.VW.8v.Hu+PI.PI.PI.PI.Hu+Hu+Hu+8v.8v.v4.v4.v4.v4.#k.#k.#k.#k.<3+<3+<3+<3+v4.v4.v4.v4.<3+v4.^;Dp-[);W3 H:@{&$J}$E^-6';H0-+p-qI-8u-@p-$)#&[ z_#2k=uy i[#/0#:} Q1 Q1 (1 o| (,@fw _t qG r[@>b@[|@$4@Eu Kv %B%%B%Kv &E &E &E u1$u1$Nt%Nt%GJ%GJ%GJ%Nt%Nt%u1$u1$u1$u1$u1$u1$&E &E Kv Kv Kv Kv Kv Eu vR@$4@$4@<|@<|@[|@:|@_|@(|@^|@@~ WA YA YA a~ a~ 1f kI@')#B_#B_#a7#k[#d1#/M ]M 6q#aj&aj&e5&e5&Ov#Ov#c`%'s&xz&%7&GL#ZC@6`%Cd#P8#Fa#S8#Ha#=k&y~&Oz&&a&lm&9U%9U%0_;vb&Pa&#a&a_;b_;c_;4E&}-;Ju=v~&+-;P/;4j&B-&10&8^&T8#OH# t#SJ#;6#Zo@MH#bj#OH#SJ#LH#MH#LH#SJ# t#bj#]M ]M ]M ]M ]M ]M ]M ]M d1#6q# t#bj#d1#Lz =p@W~#[|@:|@_|@_|@:|@<|@vR@Kv &E u1$Nt%GJ%GJ%GJ%Nt%u1$i0$i0$i0$i0$i0$i0$i0$i0$1C%i0$*E }g -E -E -E -E -E -! tG rG r[@t! +~ W:@W:@W:@W:@]|@+L@RT@RT@RT@n| {1 Zp Zp 4' S} kx Bv@}n J[${t Z4-6L=qy=d:*zQ-Xy=d_;yU-E,#'m#I,#eW-2;@q2@ =@9<@k1+C!@%U*L7.c3+n3.n3.n3.n3.n3.n3.n3.n3.h;#n3.o3.t4.t4.o3.n3.h;#v5.n3.h;#sQ@sQ@sQ@sQ@h;#h;#h;#sQ@sQ@<(+<(+<(+.9..9..9..9..9..9.):.):.):..9..9..9..9..9..9..9..9.CI#S`%sX%&r=*r=&r=&r=sX%sX%sX%sX%&r=&r=&r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%sX%&r=*r=*r=uG#*r=*r=&r=&r=&r=sX%sX%S`%S`%S`%CI#&r=&r=&r=&r=&r=&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#*r=*r=&r=&r=sX%sX%&r=&r=sX%S`%S`%sX%&r=&r=sX%sX%&r=&r=*r=*r=uG#uG#vu=9<@iM#iM#l]#dr=&s*xr*z9._|*_|*_|*+y&)A&.==cl.Av&Av&Av&Av&Av&Av&Av&Av&&, Av&Av&ZQ.Bv&B9.8P.8P.3P .==.==.== ==)A&)A&)A& == == == == == == == ==Av&Av&Av&Av&&, &, 0, 0, Av&Av&&, 0, 0, &, Av&Av&sq*jM#k4@k4@jM#5,+5,+jM#jM#$' qK+$' jM#mO#jM#5,+mO#mO#mO#mO#mO#mO#mO#mO#k4@$' $' mO#mO#qK+qK+jM#xr*xr*&s*&s*&s*=^@=^@=^@=^@=^@=^@=^@=^@=^@=^@=^@&s*&s*&s*&s*&s*&s*&s*&s*Fu+Fu+Fu+Fu+Fu+Fu+Fu+Fu+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+dr=dr==Z+=Z+=Z+l]#l]#l]#dr=dr==Z+l]#l]#=Z+dr=dr=N:*uG#uG#*r=*r=uG#uG#N:*sX%sX%sX%sX%sX%sX%sX%sX%=Z+=Z+l]#&b=iM#yE#yE#.X+dr=dr=dr==Z+=Z+=Z+l]#l]#Fu+uq*xr*xr*uq*,C+xr*=^@uq*uq*uq*uq*,C+,C+,C+,C+{h&{h&{h&{h&{h&{h&{h&{h&&, {h&~h&{h&&, Av&&, {h&zi.US+OP*x{+x{+23+US+';$OP*OP*OP*OP*OP*OP*OP*OP*OP*23+US+d #u]#u]#u]#u]#US+US+US+US+US+US+US+US+d #d #';$US+US+US+';$d #';$';$';$d #d #d #", "Vh.is@O7.xX%xX%xX%xX%is@is@Vh.Vh.is@O7._r+N7.x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%O7.O7.O7.O7.N7.xX%x5.Vh.Vh.x5.xX%N7.N7._r+O7.x5.x5.O7._r+N7.PI.Hu+8v.VW.VW.8v.Hu+PI.PI.PI.PI.Hu+8v.8v.8v.VW.F6.F6.s&10&y~&N,&zg# t# t#MH#Dd#MH# t#vg#SJ#MH#MH#SJ# t#]M /M 6q#6q#6q#6q#6q#6q#6q#6q#d1#6q#bj#/M dw =p@W~#W~#[|@:|@(|@/|@(|@:|@$4@Eu Kv &E Nt%GJ%*L%*L%*L%GJ%i0$i0$i0$i0$i0$i0$i0$i0$1C%i0$*E -E -! -! -! -E tG sG rG r[@t! W:@Y:@;! (7 ;! ;! /d@@A@uR@bP@RT@n| {1 i[#(o i[#i[#Bv@}n Fz 1g @' /|$d:*Ra-zQ-gh*f3*d_;0N=|g hh*e3*~$+m_;2;@C!@p&=^^@n4@J7.M|@c3+v5.v5.v5.v5.v5.v5.v5.v5.h;#v5.t4.D6.t4.o3.n3.n3.n3.h;#sQ@.9..9..9.<(+sQ@sQ@<(+<(+<(+.9..9.):.):.):.):.):..9..9..9..9..9..9..9..9..9..9..9..9..9.w{@S`%sX%*r=*r=*r=&r=sX%CI#S`%S`%S`%sX%&r=&r=&r=S`%S`%S`%S`%S`%S`%S`%S`%&r=*r=uG#uG#uG#*r=sX%S`%sX%sX%sX%S`%S`%S`%CI#CI#&r=&r=&r=&r=&r=&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%sX%S`%S`%S`%S`%S`%S`%S`%S`%*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#*r=*r=&r=&r=sX%sX%*r=&r=sX%S`%S`%sX%&r=*r=sX%sX%&r=&r=*r=*r=uG#uG#)~@Fn==Z+=Z+^u=m}+wr*=^@(-=kt*z9._|*+y&%z&.==3P &, &, &, &, &, &, &, &, &, &, &, &, Av&Av&Av&Av&&, &, Av&Av&Av&ZQ.ZQ.ZQ.Av&Av&Av&Av&Av&Av&Av&Av&Av&ZQ.B9.8P.8P.Bv&&, 0, ZQ.ZQ.Av&&, &, Av&ZQ.ZQ.,0+yi.I&=I&=yi.u.@yi.%b=,0+>0+sq*>0+u.@6g.yi.,0+u.@u.@u.@u.@u.@u.@u.@u.@,0+mh.mh.u.@u.@sq*sq*yi.xr*xr*xr*&s*=^@=^@=^@wr*=^@=^@=^@=^@=^@=^@=^@=^@&s*&s*&s*&s*&s*&s*&s*&s*Fu+Fu+Fu+Fu+Fu+Fu+Fu+Fu+dr=dr=dr=dr=dr=dr=dr=dr==Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+dr=dr=dr==Z+l]#l]#l]#&b=dr==Z+l]#&b=&b=l]#=Z+dr=N:*N:*vu#vu#vu#vu#N:*N:*&r=&r=&r=&r=&r=&r=&r=&r=&b=&b=&b=&b=iM#iM#iM#iM#dr==Z+=Z+=Z+l]#&b=&b=&b=tq*,C+xr*xr*,C+,C+xr*=^@,C+,C+uq*uq*uq*uq*xr*xr*{h&{h&{h&{h&{h&{h&{h&{h&Av&&, {h&{h&&, Av&0, ~h&zi.zi.J> J> J> J> J> zi...=..=..=..=..=..=..=..=US+';$d #u]#u]#u]#';$';$23+23+23+23+23+23+23+23+zi.J> J> 17*17*J> zi.zi.J> J> J> J> 17*17*", "dD.is@O7.xX%xX%xX%xX%is@is@Vh.Vh.is@O7._r+M7.x5.x5.x5.x5.x5.x5.x5.x5._r+_r+_r+xX%O7.x5.x5.x5._r+O7.is@dD.dD.is@O7._r+M7.N7.xX%O7.O7.xX%N7.M7.PI.Hu+8v.VW.VW.8v.Hu+PI.PI.PI.Hu+Hu+8v.8v.VW.VW.[{.[{.[{.8'%F6.F6.d@Yo@LH# t#LH#;6#Dd#MH#vg#SJ#MH#LH#OH#6q#d1#e1#bj#bj#bj#bj#bj#bj#bj#bj#d1#]M 6q#e1#LZ$X~#yK X~#[|@_|@/|@@~ ^|@_|@$4@Eu Eu Kv u1$GJ%*L%pM%pM%pM%i0$i0$i0$i0$i0$i0$i0$i0$1C%i0$*E -E tG tG -! -E sG rG >b@X:@+~ Y:@;! ]|@O9 /d@(7 O9 bP@[`@[`@bP@n| {1 (o @|#(o kx A_#D,#^p=/p=rg*d:*py=zQ-gh*gh*EW-;4*Ag#*8@eW-M|@2;@)~@H8@I1.K7.h|.PK.C!@UJ=c3+o3.o3.o3.o3.o3.o3.o3.o3.n3.v5.o3.o3.v5.n3.n3.v5.n3.h;#<(+):.):..9.<(+sQ@<(+<(+.9..9.):.):.):.S%{h&0, &, Av&Bv&B9.8P.4p=Av&Av&Av&Av&Av&Av&Av&Av&0, Av&B9.4p=4p=Bv&0, ~h&Bv&ZQ.ZQ.Av&Av&ZQ.ZQ.Bv&u.@%b=[3.[3.%b=yi.%b=v.@u.@,0+>0+,0+6g.%b=6g.yi.u.@u.@u.@u.@u.@u.@u.@u.@>0+Nc&Nc&u.@u.@>0+>0+6g.xr*xr*xr*&s*=^@=^@wr*wr*=^@=^@=^@=^@=^@=^@=^@=^@&s*&s*&s*&s*&s*&s*&s*&s*xr*xr*xr*xr*xr*xr*xr*xr*dr=dr=dr=dr=dr=dr=dr=dr==Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+dr=dr=dr==Z+l]#l]#&b=&b==Z+l]#&b=iM#iM#&b=l]#=Z+&r=*r=N:*vu#vu#N:**r=&r=uG#uG#uG#uG#uG#uG#uG#uG#.X+yE#yE#iM#&b=&b=l]#l]#=Z+=Z+l]#l]#&b=iM#iM#iM#tq*,C+xr*xr*,C+,C+uq*&s*,C+,C+uq*uq*xr*&s*&s*=^@{h&{h&{h&{h&{h&{h&{h&{h&Bv&Av&0, 0, &, &, {h&>S%zi.zi.zi.zi.zi.zi.zi.J> 3<@3<@3<@3<@3<@3<@3<@3<@';$d #u]#u]#d #';$23+x{+OP*OP*OP*OP*OP*OP*OP*OP*J> J> 17*17*17*J> J> zi.17*17*xE*xE*U*@..=", "Vh.x5.O7.O7.x5.Vh.dD.dD.dD.dD.dD.is@x5.xX%_r+xX%xX%O7.O7.x5.is@is@is@Vh.is@O7._r+N7._r+xX%O7.xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.O7.x5.x5.x5.x5.x5.PI.PI.Hu+Hu+8v.8v.VW.VW.PI.PI.PI.PI.PI.PI.PI.PI.8'%F6.*C5 `, m_ vf=$^;u_;Fo=M: Bn=)e=Hj b2 /X%d0&Jj ~1 e5 `3 *! Q1 n| n| 7, /,@Y:@t! [|@$4@vR@Kv $B%6C%&E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$&E &E Kv Kv Kv Kv Kv Kv Kv Kv Kv Eu $4@[|@:|@:|@[|@[|@[|@[|@_|@(|@^|@@~ WA YA QT@')#1f a~ a~ kI@B_#!)#;8 ;8 f1#d1#6q# t#Ic&Ic&gj#FL#d4&d4&xz&,u&%7&*t&R#;;v=C,;R#;xz&zd#>u&(J=v_;CV=qp&PB&`>;Z>;P#;}=;w_;x_;V ;y_;b_;z_;eJ=A_;5,;ff&v~&8O=B_;xt=+y= c.G1.Y+*v! Dd#zg#bj#zg#SJ#vg#LH#zg#MH#vg#]M ]M 6q#6q#OH#MH#OH#/M f1#/M t#6q#/M t#e1#cN@1r@ew 1r@(|@:|@(|@a~ 1f (|@vR@Eu u1$u1$u1$u1$u1$u1$u1$u1$i0$i0$i0$=E =E =E *E *E *E *E }g -E -! tG sG sG r[@r[@X:@t! t! +~ W:@W:@+~ ]|@+L@RT@bP@bP@[`@UE@Zp Zp Zp S} Zp uy 6v J[$J[$Z4-t|*@' rg*e:*5' qg*8V-|c#a7#4z=O7+C!@n}+9<@J7.n4@g6@M|@M|@M|@g6@c3+o3.o3.o3.o3.o3.o3.o3.o3.:^+D6.o3.h;#sQ@sQ@h;#n3.v5.v5.n3.n3.h;#h;#h;#sQ@<(+<(+<(+<(+<(+<(+<(+<(+g|.):.<(+<(+):. nh...=U*@xE*17*J> 17*17*17*{h&0, &, Av&Av&&, 0, {h&ZQ.Av&ZQ.Bv&8P.B9.Av&{h&Av&Av&Av&Av&Av&Av&Av&Av&ZQ.ZQ.Av&Av&Av&&, &, &, ZQ.0, {h&Av&Av&~h&~h&&, %' X@$x*$X@$~h&0, {h&mh.Fu+&s*=^@xr*&s*lh.&u.+v=&s*wr*+v=wr*xr*uq*xr*=^@=^@&s*xr*,C+,C+uq*xr*&s*wr*&s*xr*xr*=^@wr*=^@xr*=Z+dr=dr=o!#^u=^u=m}+m}+dr=dr=dr=dr=dr=dr=dr=dr==Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+dr=dr==Z+=Z+=Z+l]#l]#l]#*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%l]#l]#l]#l]#l]#l]#l]#l]#xE#m}+^u=o!#=Z+l]#&b=iM#,C+,C+,C+,C+,C+,C+,C+,C+,C+uq*xr*&s*=^@wr*+v=+v=&, {h&~h&%' %' >S%~h&{h&ZQ.ZQ.ZQ.Av&&, &, 0, 0, Av&0, ~h&~h&&, Av&Av&&, u3$>S%Av&Av&~h&x*$u3$c> 23+US+';$US+x{+[f.x{+OP*x{+23+';$d #d #';$23+x{+..={h&x*$x*$>S%{h&0, {h&{h&0, &, Av&Av&&, ", "is@x5.O7.O7.x5.is@Vh.dD.dD.dD.dD.is@x5.xX%_r+xX%O7.O7.O7.x5.is@is@is@Vh.is@O7._r+_r+_r+xX%O7.xX%xX%xX%xX%xX%xX%xX%xX%x5.x5.x5.x5.x5.x5.x5.x5.PI.PI.Hu+Hu+8v.8v.VW.VW.PI.PI.PI.PI.PI.PI.PI.PI.8'%F6.*5;*wz&,u&,u&$7&mg&ix&yy=qp&PB&^=&}6&lp&w=;Qu=w_;Km@5.;&t&mp&#)&R%;@z=z-;Ww=Tk&C_;DY.88.qY+E6*jR&Lz Zo@zg#SJ#Zo@MH#OH#MH#zg#O8#OH#6q#6q#bj#6q#vg#LH#vg#/M f1#/M t#f1#Lz f1#Lz cN@ew MH#vg#/|@[|@:|@@~ WA :|@vR@Eu u1$u1$u1$u1$u1$u1$u1$u1$i0$i0$i0$=E =E *E *E *E *E }g }g -E -! tG sG sG r[@X:@X:@t! +~ W:@Y:@Y:@;! /d@.9 bP@bP@uR@[`@UE@i[#i[#i[#i[#kx |n Zq ^m {t 0C=t|*py=Tm-e:*-h-yx=%3#J,#=D=(l.p&=Fn=k1+c+#n4@c3+g6@I7.I7.I7.I7.g6@o3.o3.o3.v5.v5.v5.v5.v5.:^+t4.v5.n3.sQ@sQ@h;#h;#n3.n3.h;#h;#h;#sQ@sQ@sQ@.9..9..9..9..9..9..9..9..9.sQ@sQ@<(+ J> ..=U*@J> J> U*@3<@..=U*@xE*17*17*xE*xE*{h&0, &, Av&Av&&, 0, {h&Av&&, &, Av&Bv&B9.ZQ.0, &, &, &, &, &, &, &, &, ZQ.ZQ.Av&Av&Av&&, &, &, ZQ.0, {h&Av&Av&~h&~h&&, 0, ~h&%' >S%{h&{h&~h&%' z9.=^@wr*xr*&s*#x+lh.wr*xr*=^@wr*=^@uq*,C+uq*&s*&s*xr*uq*,C+uq*xr*&s*=^@wr*&s*xr*xr*=^@wr*=^@xr*dr=dr=dr=dr=o!#o!#o!#o!#dr=dr=dr=dr=dr=dr=dr=dr==Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+dr=dr==Z+=Z+=Z+l]#l]#l]#*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=l]#l]#l]#l]#l]#l]#l]#l]#dr=dr==Z+=Z+=Z+=Z+=Z+=Z+,C+,C+,C+,C+,C+,C+,C+,C+,C+uq*xr*&s*=^@wr*wr*+v=0, {h&~h&>S%>S%~h&0, &, Av&&, &, &, 0, {h&{h&{h&ZQ.&, ~h&~h&0, &, &, {h&X@$~h&0, {h&>S%X@$>S%{h&xE*US+d #';$US+23+';$u]#OP*23+d #u]#u]#d #23+xE*Av&{h&X@$x*$>S%{h&{h&{h&{h&0, &, Av&Av&&, ", "is@x5.O7.O7.x5.is@is@Vh.Vh.dD.Vh.Vh.x5.O7.xX%O7.O7.O7.x5.x5.x5.is@is@is@x5.O7.xX%xX%xX%O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%x5.x5.x5.x5.x5.x5.x5.O7.PI.PI.Hu+Hu+8v.8v.VW.VW.PI.PI.PI.PI.PI.PI.PI.PI.8'%F6.].u!=[f.x{+OP*23+23+OP*xE*{h&0, &, Av&Av&&, 0, {h&Av&0, ~h&{h&Av&Bv&Bv&ZQ.;n.;n.;n.;n.;n.;n.;n.;n.}m.}m.-~@-~@-~@;n.;n.;n.}m.>n.!D+-~@-~@`b&`b&;n.}m.;n.!D+!D+>n.!D+B#@X@$kt*+v=+v=&s*&s*+v=+v=&s*uq*&s*=^@&s*,C+Fu+,C+xr*uq*uq*,C+uq*uq*&s*=^@wr*wr*&s*xr*xr*=^@wr*=^@xr*dr=dr=dr=dr==Z+=Z+=Z+=Z+dr=dr=dr=dr=dr=dr=dr=dr==Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+dr=dr==Z+=Z+=Z+l]#l]#l]#*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#l]#l]#l]#l]#l]#l]#l]#l]#yE#iM#iM#l]#=Z+dr=o!#o!#,C+,C+,C+,C+,C+,C+,C+,C+uq*uq*uq*xr*&s*=^@wr*wr*~h&~h&>S%>S%~h&0, &, Av&0, 0, 0, {h&{h&{h&~h&~h&cl..==%z&.y&)A&)A&%z&+y&%z&%z&%z&+y&Xw&+y&)A&Av&17*';$u]#u]#d #d #:{+h]@US+';$d #:{+:{+d #';$J> &, %z&Xw&Be++y&%z&%z&%z&%z&)A&)A& == ==)A&", "x5.x5.x5.x5.x5.x5.x5.Vh.Vh.Vh.Vh.Vh.is@O7.xX%O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.O7.O7.x5.xX%xX%xX%xX%xX%xX%xX%xX%is@x5.x5.x5.x5.O7.O7.O7.PI.PI.Hu+Hu+8v.8v.VW.VW.PI.PI.PI.PI.PI.PI.PI.PI.F6.F6..W_;&V=iR&;G=;6#Dd#Qm@zg#O8#O8#O8#LH#OH#vg# t#bj#]M bj#vg#bj#d1#f1#e1#/M d1#Lz Lz =p@}A ew MH#vg#/|@vR@Kv $4@<|@Kv &E Eu u1$u1$u1$u1$u1$u1$u1$u1$=E =E =E *E *E *E }g }g }g }g -E -! tG sG rG rG t! t! +~ W:@;! ]|@(7 (7 @A@bP@[`@b.#[`@uR@b.#i@#Zp (o @|#Bv@/m Zq /o 0C=qy=Tm-lI-d:*/i*%=+py=7, 6N=X_;C!@9<@&o@g6@Fn=C!@I7.g6@n4@n4@n4@g6@M|@H8@o3.v5.v5.n3.h;#sQ@sQ@<(+o3.v5.n3.n3.h;#h;#h;#h;#sQ@sQ@sQ@<(+<(+.9..9..9.S%0, ZQ.Bv&Bv&>n.>n.>n.>n.>n.>n.>n.>n.}m.}m.-~@-~@-~@;n.;n.;n.}m.>n.!D+-~@-~@`b&`b&;n.}m.;n.!D+>n.;n.;n.>n.>S%(-=#x+#x+&s*xr*wr*wr*uq*,C+xr*&s*xr*Fu+tq*Fu+uq*Fu+,C+,C+uq*xr*=^@wr*wr*wr*&s*xr*xr*=^@wr*=^@xr*o!#dr=dr==Z+l]#l]#&b=&b=dr=dr=dr=dr=dr=dr=dr=dr==Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+dr=dr==Z+=Z+=Z+l]#l]#l]#*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=l]#l]#l]#l]#l]#l]#l]#l]#.X+yE#iM#&b=l]#=Z+dr=o!#uq*uq*uq*uq*uq*uq*uq*uq*uq*uq*uq*xr*&s*&s*=^@=^@X@$X@$%' %' ~h&{h&0, &, 0, 0, 0, 0, 0, 0, {h&{h&PN..==%z&.y&%z&%z&.y&Xw&)A&)A&)A&%z&.y&.y&%z&0, J> d #:{+u]#';$';$d #:{+';$d #u]#:{+:{+u]#d #zi.0, .y&+y&Xw&+y&.y&%z&%z&%z&%z&)A&)A&)A&)A&", "O7.x5.x5.x5.x5.O7.O7.is@is@Vh.Vh.Vh.is@x5.O7.x5.x5.x5.x5.x5.x5.O7.O7.O7.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%is@is@is@x5.O7.O7.xX%xX%PI.PI.Hu+Hu+8v.8v.VW.VW.PI.PI.PI.PI.PI.PI.PI.PI.^;%x-AC#ZQ@Y4 F5 F5 U: V~*pb [^;yd (1*Ji }8$b+*U7&Li K1 ./$vb `3 d2 ,p n| 7, /,@+L@/d@WA ^|@/|@_|@>8@q<$&E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$&E &E u1$u1$u1$u1$u1$u1$u1$u1$&E Kv Kv Eu vR@$4@<|@<|@(|@(|@/|@^|@^|@@~ WA WA WA WA WA YA a~ 1f ')#')#|g (d@e1#/M t#OH#TJ#ZC@GL#Bd#d5&Zt=WB=WB=wz&1C=<&;RC=P_;t,;%c*!W=:&;-=;*]*>W=@$;/;;O-;(y=Mx=|/;7u=}r&Q#;+&;.&;Y_;y>;s;;Z_;`_; :;.:;+:;@:;#:;$:;xJ&SZ=JP&~l=Z+*zg#Dd#MH#zg#O8#LH#SJ#OH#vg# t#bj#]M 6q#bj#]M d1#f1#e1#d1#e1#Lz dw LZ$}A LZ$e1#1r@(|@Eu u1$Kv Eu &E u1$Kv u1$u1$u1$u1$u1$u1$u1$u1$=E =E *E *E *E }g }g }g -E -E -! tG tG sG rG rG t! +~ W:@;! ]|@/d@ 9 9 bP@[`@UE@b.#[`@[`@UE@Cv@S} (o z, A_#6v ^p=[n Nj=d:*Xh-Yh-Jj-qg*py=;c {1 ;4*[M@%:;vu=I7.^^@C!@h|.I7.g6@n4@n4@n4@g6@M|@H8@v5.v5.n3.n3.h;#h;#sQ@sQ@n3.n3.n3.n3.h;#h;#sQ@sQ@sQ@sQ@sQ@<(+<(+.9..9..9.S%0, ZQ.Bv&Bv&;n.;n.;n.;n.;n.;n.;n.;n.}m.}m.-~@-~@-~@;n.;n.;n.}m.>n.!D+-~@-~@`b&`b&;n.;n.!D+`b&>n.-~@}m.-~@&, PB@lh.#x+&s*xr*wr*=^@uq*,C+xr*&s*xr*Fu+tq*Fu+uq*Fu+Fu+,C+xr*&s*=^@=^@wr*wr*&s*xr*xr*=^@wr*=^@xr*o!#dr=dr==Z+l]#l]#&b=&b=dr=dr=dr=dr=dr=dr=dr=dr==Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+dr=dr==Z+=Z+=Z+l]#l]#l]#*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=&r=&r=&r=&r=&r=&r=l]#l]#l]#l]#l]#l]#l]#l]#&b=&b=&b=&b=l]#l]#l]#l]#uq*uq*uq*uq*uq*uq*uq*uq*uq*uq*uq*xr*xr*xr*xr*&s*u3$u3$x*$%' >S%~h&~h&{h&&, &, &, &, &, &, Av&Av&cl..==%z&.y&.y&%z&+y&Be+)A& ==.==.==.==%z&Xw&u3$zi.u]#u]#d #OP*x{+x{+23+d #d #u]#u]#u]#u]#d #nh.~h&.y&.y&.y&+y&+y&.y&%z&%z&%z&%z&%z&%z&%z&", "O7.O7.x5.x5.O7.O7.xX%x5.is@Vh.Vh.Vh.is@x5.x5.is@is@x5.x5.x5.O7.O7.O7.xX%O7.x5.is@Vh.is@is@x5.xX%xX%xX%xX%xX%xX%xX%xX%Vh.Vh.is@x5.O7.O7.xX%xX%PI.PI.Hu+Hu+8v.8v.VW.VW.PI.PI.PI.PI.PI.PI.PI.PI.#k.:;,:;':;):;!:;~:;jV=#8 #T&m`&O8#OH#O8#zg#MH#vg# t# t# t#bj#]M ]M ]M ]M /M d1#e1#f1#f1#Lz 1r@Lz LZ$yK G5@Lz QC _|@Eu u1$Kv Eu u1$Nt%&E u1$u1$u1$u1$u1$u1$u1$u1$=E *E *E *E }g }g -E -E -E -E -! tG sG rG rG >b@+~ W:@Y:@]|@/d@ 9 +L@+L@uR@[`@b.#[`@uR@[`@i@#j$#Zp kx |n 6v J[$@p=Nj=qy=`q Xh-QO-{:;Nj=<} |n Xh--m.2;@UJ=c3+g6@^^@I7.h|.g6@c3+c3+c3+c3+g6@I7.M|@n3.n3.n3.n3.n3.n3.n3.n3.sQ@h;#h;#n3.n3.h;#sQ@sQ@h;#h;#sQ@sQ@<(+<(+<(+<(+):.):.):.):.):.):.):.):.g|.):.<(+.9.):.):..9.sQ@<(+<(+<(+<(+sQ@h;#v5.o3.sX%sX%sX%sX%sX%sX%sX%sX%S`%sX%sX%CI#Q+&Q+&S`%*r=S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#CI#S`%sX%&r=S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%vu#N:*uG#*r=&r=sX%S`%CI#*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=&r=sX%sX%sX%S`%S`%S`%S`%S`%S`%sX%sX%&r=&r=S`%sX%&r=&r=&r=&r=sX%S`%*r=*r=uG#N:*N:*uG#*r=*r=9<@9<@l]#l]#=Z+dr==^@wr*(-=(-=(-=(-= == == == ==Av&&, &, 0, &, Av&ZQ.ZQ.Av&Av&Av&Av&Av&Av&Av&U*@..=US+';$OP*OP*u]#u]#US+OP*23+US+';$d #d #';$';$Av&&, 0, {h&{h&0, &, Av&Av&0, ~h&{h&Av&Bv&Bv&ZQ.-~@-~@-~@-~@-~@-~@-~@-~@}m.}m.-~@-~@-~@;n.;n.;n.}m.>n.!D+-~@-~@`b&`b&;n.>n.`b&B#@!D+-~@]*=}m.&, (-=lh.#x+&s*xr*wr*wr*uq*uq*&s*=^@&s*,C+Fu+,C+xr*Fu+,C+uq*&s*&s*=^@&s*&s*wr*&s*xr*xr*=^@wr*=^@xr*dr=dr=dr=dr==Z+=Z+=Z+=Z+dr=dr=dr=dr=dr=dr=dr=dr==Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+dr=dr==Z+=Z+=Z+l]#l]#l]#*r=*r=*r=*r=*r=*r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%l]#l]#l]#l]#l]#l]#l]#l]#dr=dr==Z+=Z+l]#&b=&b=&b=uq*uq*uq*uq*uq*uq*uq*uq*uq*uq*uq*uq*uq*uq*xr*xr*u3$x*$X@$>S%>S%~h&>S%>S%&, &, &, Av&Av&Av&ZQ.ZQ.3P )A&.y&+y&.y&%z&.y&Xw&.y&.y&)A&.==3P )A&Be+2&$zi.d #u]#US+[f.HV.HV.u!=d #d #d #';$';$d #d #nh.>S%.y&)A&%z&+y&Xw&.y&%z&)A&%z&.y&.y&.y&.y&", "xX%O7.x5.x5.O7.xX%_r+x5.x5.is@Vh.Vh.Vh.is@x5.is@is@is@x5.O7.O7.O7.xX%xX%O7.is@Vh.dD.Vh.is@is@xX%xX%xX%xX%xX%xX%xX%xX%Vh.Vh.is@x5.O7.xX%xX%_r+PI.PI.Hu+Hu+8v.8v.VW.VW.PI.PI.PI.PI.PI.PI.PI.PI.#k.8@c.#&E &E u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$u1$&E &E Kv Kv Kv Kv Kv Kv Kv Kv vR@vR@Eu Eu vR@<|@:|@_|@:|@_|@_|@_|@(|@(|@(|@(|@@~ WA a~ kI@')#B_#QT@QT@k[#k[#]M 6q# t#vg#Ic&#b@e5&GL#e4&d4&%7&*t&'u&S#;RC=P_;%c*!W=4`-F_;l[*^:;cz&+&;^y=9/;I*;<*;H*;/:;E(;);;r;;(:;_:;`_;&O=::;<:;[:;}:;|:;1:;2:;3:;4:;5:;hR&#T&~l=jR&O8#bj#;6#zg#SJ#bj#6q#bj#bj#6q#/M ]M /M d1#d1#e1#e1#ew ew LZ$X~#G5@G5@cN@=p@G5@.y :|@Kv u1$vR@$4@&E Nt%u1$u1$u1$u1$u1$u1$u1$u1$u1$*E *E *E }g }g -E -E -E -E -! -! tG sG rG >b@>b@W:@Y:@;! (7 9 +L@.9 @A@bP@uR@[`@uR@uR@[`@i@#Y=#(o z, }n J[$/o Z4-^|$lI-g:*vn-6:;|x=Bv@n| qy=V5.)~@m_;k1+~$+%U*I7.J7.C!@n4@c3+g6@I7.I7.I7.I7.g6@h;#h;#n3.v5.o3.t4.t4.t4.<(+sQ@h;#n3.n3.h;#sQ@<(+n3.n3.h;#h;#h;#sQ@sQ@sQ@.9..9..9..9..9..9..9..9.):.<(+sQ@<(+):.n.!D+-~@-~@`b&`b&;n.;n.!D+`b&!D+;n.-~@>n.{h&kt*#x+#x+&s*&s*+v=+v=xr*xr*=^@wr*=^@uq*,C+uq*&s*,C+uq*xr*&s*=^@&s*xr*uq*wr*&s*xr*xr*=^@wr*=^@xr*dr=dr=dr=dr=o!#o!#o!#o!#dr=dr=dr=dr=dr=dr=dr=dr==Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+dr=dr==Z+=Z+=Z+l]#l]#l]#*r=*r=*r=*r=*r=*r=*r=*r=&r=&r=&r=&r=&r=&r=&r=&r=l]#l]#l]#l]#l]#l]#l]#l]#dr=dr=dr=dr==Z+=Z+l]#l]#xr*xr*xr*xr*xr*xr*xr*xr*uq*uq*uq*uq*uq*uq*uq*uq*%' >S%{h&0, 0, {h&~h&>S%{h&0, 0, 0, &, Av&Av&Av& ==%z&Xw&Xw&.y&%z&%z&+y&Xw&Be+Be++y& == ==%z&%' J> ';$';$US+[f.HV.u!=[f.';$';$US+US+US+US+';$zi.%' .y&)A&)A&+y&Xw&+y&%z&)A&%z&.y&+y&+y&.y&", "xX%O7.x5.x5.O7.xX%_r+x5.x5.is@Vh.Vh.Vh.is@x5.is@is@is@x5.O7.O7.xX%xX%_r+O7.is@Vh.dD.dD.Vh.is@xX%xX%xX%xX%xX%xX%xX%xX%dD.Vh.is@x5.O7.xX%_r+_r+PI.PI.Hu+Hu+8v.8v.VW.VW.PI.PI.PI.PI.PI.PI.PI.PI.#k.8@q<$&E *E =E =E =E i0$Nt%Nt%Nt%Nt%Nt%u1$u1$u1$&E &E Kv Kv Kv Kv Kv Kv Kv Kv $4@$4@vR@vR@$4@[|@_|@(|@:|@:|@:|@:|@_|@_|@_|@_|@WA YA 1f ')#B_#QT@!)#!)#'m#b4#6q#6q#bj# t#wg#Ic&f5&EL#R8#b3&b3&b3&st=tt=wz&wz&S#;!W=4`-F_;;Y-XX-z+;.&;p-;j,;5_;8:;)v=Vw=G(;);;UE=F(;9:;wD=0:;a:;b:;c:;d:;e:;f:;g:;h:;i:;$,;Li=Yo@jR&]#*O8#]M Qm@zg#OH#6q#/M 6q#bj#]M d1#]M /M d1#e1#e1#e1#ew dw ew 1r@G5@=p@}A 1r@=p@^G%[|@Kv &E $4@<|@Kv GJ%Nt%u1$u1$u1$u1$u1$u1$u1$u1$*E *E }g }g }g -E -E -E -! -! tG tG sG rG >b@>b@W:@Y:@;! (7 9 +L@@A@RT@RT@bP@uR@uR@bP@[`@Cv@(o uy A_#D,#Yp [n 6L=zQ-ce-j:;fh*j:;cw (7 ]T#P2*,X@C{@n}+g6@$Z*^^@g6@[M@g6@J7.n4@g6@M|@M|@M|@g6@c3+h;#h;#n3.v5.t4.D6.:^+p3..9.<(+h;#n3.n3.h;#sQ@<(+v5.v5.n3.n3.h;#h;#h;#sQ@<(+<(+<(+<(+<(+<(+<(+<(+sQ@h;#h;#<(+S%>S%~h&{h&0, 0, 0, 0, 0, 0, 0, 17*..=23+23+[f.[f.23+23+u!=HV.u!=[f.x{+x{+x{+x{+[f.Av&&, 0, {h&{h&0, &, Av&ZQ.Av&ZQ.Bv&8P.B9.Av&{h&]*=]*=]*=]*=]*=]*=]*=]*=}m.}m.-~@-~@-~@;n.;n.;n.}m.>n.!D+-~@-~@`b&`b&;n.}m.;n.!D+!D+>n.>n.`b&%' kt*+v=+v=&s*&s*+v=+v=&s*&s*wr*+v=wr*xr*uq*xr*=^@uq*xr*&s*=^@=^@xr*uq*,C+wr*&s*xr*xr*=^@wr*=^@xr*=Z+dr=dr=o!#^u=^u=m}+m}+dr=dr=dr=dr=dr=dr=dr=dr==Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+dr=dr==Z+=Z+=Z+l]#l]#l]#*r=*r=*r=*r=*r=*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#l]#l]#l]#l]#l]#l]#l]#l]#dr=dr=dr=dr=dr=dr=dr=dr=xr*xr*xr*xr*xr*xr*xr*xr*uq*uq*uq*uq*uq*uq*,C+,C+{h&0, Av&Av&Av&&, {h&~h&~h&~h&~h&{h&0, 0, &, &, )A&.y&Xw&Xw&.y&)A&%z&.y&Be+mq+Gc%z$$.y&.==3P Av&xE*23+';$US+x{+[f.x{+23+';$US+23+23+23+23+US+zi.X@$.y& ==)A&+y&Xw&+y&%z&)A&%z&+y&Xw&Xw&+y&", "9, VW.VW.8v.8v.8v.Hu+VW.VW.VW.VW.VW.VW.VW.VW.Vh.is@O7.x5.Vh.dD.is@O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.is@Vh.Vh.is@O7.xX%O7.O7.O7.x5.x5.x5.is@is@x5.is@Vh.Vh.x5.xX%xX%xX%_r+_r+xX%xX%O7.O7.x5.x5.#k.#k.#k.#k.#k.#k.#k.#k.F6.F6.#k.v4.v4.v4.#k.#k.l=&$;&91+91+$;&$;&91+v7+$;&l=&xx.T}%l=&$;&s[.Rz.xX%_r+_r+N7.N7.M7.%0+%0+xX%_r+_r+N7._r+_r+xX%O7.v4.<3+0q.0q.0q.0q.<3+v4.v4.v4.v4.v4.v4.v4.v4.v4.M7.M7.M7.M7.M7.M7.M7.M7.@9.%0+N7.xX%xX%N7.%0+@9.q3.0q.<3+#k.#k.<3+0q.q3.#k.<3+0q.q3.q3.0q.<3+#k.%0+%0+%0+M7.M7.M7.M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#M7.M7.M7.%0+$B#$B#@9.@9.M7.M7.M7.%0+$B#@9.@9.@9.xX%%0+)Z%,X@eO@%0+M7.M7.$B#$B#$B#$B#%0+%0+%0+%0+:(+:(+:(+:(+:(+:(+:(+:(+#k.v4.v4.<3+0q.0q.q3.q3.$B#$B#$B#@9.@9.@9.@9.@9.%0+$B#@9.eO@@9.%0+N7._r+q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.:(+,H.0q.<3+0q.q3.bp.+9.q3.:(+bp.:(+q3.<3+0q.,H.DI#,X@eO@@9.$B#$B#@9.eO@@9.@9.@9.@9.@9.@9.@9.@9.<3+0q.:(++9.bQ#+9.:(+,H.,H.:(+:(+q3.<3+<3+,H.+9.bQ#+9.:(+,H.,H.:(++9.bQ#o&=bQ#+9.bp.,H.q3.0q.<3+bQ#bp.,H.,H.bp.bp.,H.0q.q3.q3.,H.:(+:(+bp.+9.+9.:(+:(+:(+:(+:(+:(+:(+:(+,H.o&=Q+&o&=q3.v4.q3.bQ#:(++9.bQ#+9.:(+:(+bp.bQ#,H.:(++9.bQ#bQ#+9.:(+,H.,H.bp.+9.bQ#bQ#+9.bp.,H.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=+9.bp.bp.bQ#o&=bQ#bp.,H.,H.,H.,H.,H.,H.,H.,H.N7+u4.p3.D6.D6.D6.:^+p3.p3.w5.N7+u4.p3.:^+w5.N7+p3.p3.p3.w5.J!.-1.-1.u4.h|.s2@8J.i%=.*=_!;k:;,h-Xx-9@#@($3, Ct o*$:f `}#Ie l:;Ie 0>#Gm o3&m:;xt$g5 G[*lj#A0 4##Vr #, *! :} 36 /d@]|@WA /|@b~ vR@-! xt cs r_$r_$r_$=E =E i0$i0$Nt%Nt%Nt%Nt%$B%$B%u1$u1$u1$&E &E Kv Kv Kv $4@$4@$4@$4@$4@vR@vR@vR@[|@:|@_|@(|@/|@/|@(|@(|@YA YA a~ kI@')#QT@!)#!)#f1#d1#]M 6q#]M 6q#cj#g%&07#K>;HO%y~&+]&8^&E-&D-&MA=tb*QD=n:;*t&%7&%c*:&;zV=R&;6Z-NY-o:;{_;p:;tv=n=;aw=1>;0%&~v&p-;P>;Z;;0:;q:;r:;s:;t:;u:;v:;w:;6;*[J=*)&u&*2j=-3#KN#T8#LH# t#+W@XC@ p@h$#{Y@QT@]M e1#ew dw ew f1#ew xy Lz LZ$=p@W~#cN@v! ^Y@QC Eu Kv &E u1$Nt%GJ%*L%*L%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E Kv Eu vR@vR@$4@$4@<|@[|@:|@_|@(|@/|@+~ W:@y, _,@(,@+' 36 n| ,p n| ,p :} :} <} {1 i[#uy 3!#:o 8n x:;eE=fE=2z=7L=yU-NW-ft@Tt&HY%m[-eR -Z+o3.v5.n3.o3.:^+p3.p3.D6.:^+v5.sQ@n3.p3.N7+p3.v5.j(#w{@CI#CI#Q+&j(#Q+&CI#bQ#o&=Q+&CI#S`%S`%CI#CI#sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@<(+.9.<(+sQ@n3.o3.h;#.9. zi.J> 17*3&$!D+-~@;n.{y%3&$B#@-~@}m.}m.}m.}m.}m.}m.}m.C9.xE*23+';$d #d #US+23+OP*OP*x{+x{+[f.[f.u!=HV.HV.ZQ.Av&&, 0, {h&{h&{h&0, &, ZQ.B9.Bv&Av&&, ZQ.Bv&cl.3P 3P .== == ==)A&)A& == ==)A&)A&%z&.y&.y&+y&/p./p./p.RD*RD*QD*QD*QD*M]*-.%#d+TO&TO&#d+-.% ==,0+mO#k4@IV.k4@mO#5,+$' 5,+5,+jM#jM#mO#mO#k4@k4@=^@&s*uq*,C+,C+uq*&s*=^@xr*xr*xr*xr*xr*xr*xr*xr*^u==Z+iM#iM#l]#dr=dr==Z+o!#l]#dr=fX.m}+iM#yE#o!#=Z+l]#l]#l]#&b=&b=iM#iM#dr=l]#&b=yE#yE#&b=l]#dr=*r=*r=*r=*r=*r=*r=*r=*r=*r=uG#vu#;Z+;Z+vu#uG#*r=m}+=Z+yE#yE#&b=l]#&b=yE#iM#dr=dr=iM#iM#=Z+=Z+yE#$' $' $' qK+SO+SO+ X+ X+jM#jM#jM#5,+5,+5,+5,+5,+0, 0, {h&~h&~h&>S%%' %' Av&0, {h&{h&&, Av&&, {h&0, &, 0, ~h&%' %' {h&Av&ZQ.{h&x*$u3$X@$~h&0, 0, 17*US+US+';$';$d #u]#u]#US+US+US+US+US+US+US+J> %' Xw&+y&.y&.y&%z&)A&)A&3P .y&+y&)A&)A&%z&", "9, 9, 9, VW.VW.8v.8v.VW.VW.VW.VW.VW.VW.VW.VW.is@O7.xX%xX%x5.is@x5.xX%O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.x5.is@is@x5.O7.O7.O7.O7.O7.x5.x5.x5.is@is@x5.is@is@is@x5.O7.xX%xX%xX%xX%xX%xX%xX%O7.O7.O7.#k.#k.#k.#k.#k.#k.#k.#k.8'%F6. ra 86-JX-)Y-(X-:1-F[*Kg Hq-jA-$n=U3 d5 A0 4##7v d2 :} 36 /d@]|@YA @~ -8@<|@ds {a _e Z{$r_$r_$r_$r_$i0$i0$Nt%Nt%Nt%Nt%$B%$B%u1$u1$u1$&E &E Kv Kv Kv vR@vR@vR@$4@$4@$4@$4@$4@:|@_|@(|@/|@^|@^|@/|@/|@WA YA a~ 1f ')#B_#QT@QT@f1#/M 6q#bj#6q#bj#Pv#NH#g>;8j&h^;^f@^f@q^;IY%[J=Ao&Yt=ij#ij#%7&wz&4`-:&;A:;=,;B:;C:;D:;E:;F:;G:;IY-c5&/;;/;;/;;/;;LY-|`-_V=H:;I:;J:;K:;L:;mO=7Z-c4&Ms=9j&Ls=2j=-3#g%&NH#LH# t#+W@XC@ p@h$#W=#QT@w! d1#f1#ew f1#f1#ew xy LZ$G5@=p@X~#cN@v! ^Y@QC Kv Kv &E u1$Nt%GJ%GJ%*L%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$&E &E Kv Eu vR@$4@$4@<|@<|@[|@:|@(|@/|@^|@W:@Y:@fw _,@(,@+' 36 n| ,p n| :} <} <} <} /0#(o z, E{;Mx@M:;bH=&D=VO=N:;M<*O:;Vi*f1#]#*>1-1o.BK./X-D6.o3.v5.o3.D6.p3.D6.t4.D6.v5.sQ@n3.:^+w5.:^+v5.b,+Q+&CI#w{@j(#b,+j(#w{@bQ#b,+Q+&CI#S`%S`%CI#CI#h;#h;#h;#sQ@sQ@sQ@sQ@sQ@sQ@sQ@<(+.9.<(+sQ@n3.v5.n3.sQ@.9..9.sQ@h;#<(+n.{y%3&$B#@-~@>n.;n.;n.-~@}m.}m.]*=_e...=x{+23+US+';$US+23+23+x{+x{+x{+x{+x{+[f.[f.[f.ZQ.Av&&, 0, {h&{h&0, 0, {h&&, Av&Av&0, {h&0, Av&.==.==.== == ==)A&)A&)A&)A&)A&)A&%z&%z&%z&%z&%z&-.%-.%M]*/p./p.RD*QD*QD*/p.M]*<:*#d+#d+<:*M]*.==u.@mO#k4@IV.k4@mO#5,+$' 5,+5,+5,+jM#mO#mO#mO#k4@=^@&s*xr*uq*uq*xr*&s*=^@xr*xr*xr*xr*xr*xr*xr*xr*^u=dr=&b=&b==Z+o!#dr=dr=dr=l]#dr=xE#^u=yE#yE#dr=l]#l]#l]#&b=&b=iM#iM#iM#=Z+l]#&b=&b=&b=&b=l]#=Z+*r=*r=*r=*r=*r=*r=*r=*r=*r=uG#N:*vu#vu#N:*uG#*r=^u=l]#yE#yE#&b==Z+l]#iM#iM#dr=dr=iM#&b=dr=dr=&b=jM#jM#jM#5,+$' $' $' qK+$' $' 5,+jM#mO#k4@IV.j(+~h&~h&~h&{h&{h&{h&{h&{h&0, {h&>S%~h&0, &, {h&>S%~h&{h&0, {h&~h&~h&Av&B9.Bv&0, >S%%' ~h&0, 0, J> J> US+US+US+US+';$';$';$US+US+US+US+US+US+US+J> >S%.y&.y&.y&.y&%z&%z&%z&)A&+y&+y& ==.==)A&", "hY.G6.G6.9, 9, 9, VW.VW.VW.VW.VW.VW.VW.VW.VW.x5.xX%_r+_r+O7.x5.O7._r+x5.x5.x5.x5.x5.x5.x5.x5.is@x5.O7.O7.O7.O7.x5.is@O7.O7.O7.x5.x5.x5.is@is@x5.x5.x5.is@is@x5.O7.xX%xX%xX%xX%xX%xX%xX%xX%_r+#k.#k.#k.#k.#k.#k.#k.#k.[{.8'%F6.6#KN#gy#gy#SJ# t#w! XC@h@# p@W=#!)#w! /M e1#f1#e1#e1#ew xy G5@=p@W~#yK }A ST@QC PC Kv Kv &E u1$Nt%Nt%GJ%GJ%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%&E &E Kv Eu vR@$4@$4@<|@<|@[|@:|@_|@/|@^|@@~ Y:@]|@_,@(,@/,@7, n| ,p :} :} <} 'p 'p 'p S} @|#A_#67#J=;sF=zI=N}*5>#i/;`:;9N=-z LZ$>1-Cp.sQ@CK.62.p3.D6.o3.o3.D6.D6.t4.v5.t4.n3.sQ@h;#t4.:^+t4.n3.o&=j(#Q+&Q+&b,+o&=b,+Q+&o&=b,+Q+&w{@CI#CI#CI#CI#n3.n3.h;#h;#sQ@<(+<(+<(+sQ@sQ@<(+<(+<(+sQ@h;#n3.v5.h;#sQ@sQ@h;#h;#sQ@.9..9.):.):.n.B#@'W+`b&;n.`b&`b&!D+;n.-~@}m.]*=!c.3<@[f.x{+23+23+23+23+23+x{+x{+x{+OP*OP*OP*OP*23+Av&Av&&, 0, {h&0, 0, &, >S%{h&0, 0, ~h&>S%~h&0, == == ==)A&)A&%z&%z&%z&%z&%z&%z&%z&%z&)A&)A&)A&#d+#d+<:*-.%M]*/p.RD*QD*/p.M]*M]*-.%-.%M]*M]*.==u.@mO#k4@k4@k4@mO#5,+5,+5,+5,+5,+jM#jM#jM#mO#mO#=^@&s*xr*xr*xr*xr*&s*=^@&s*&s*&s*&s*&s*&s*&s*&s*m}+o!#l]#=Z+dr=^u=o!#dr==Z+l]#dr=^u=dr=yE#yE#=Z+l]#l]#l]#&b=&b=&b=iM#iM#&b=l]#l]#=Z+=Z+l]#l]#&b=*r=*r=*r=*r=*r=*r=*r=*r=&r=*r=uG#uG#uG#uG#*r=&r==Z+&b=yE#yE#&b==Z+=Z+l]#iM#=Z+dr=&b=l]#^u=m}+=Z+k4@mO#mO#mO#jM#jM#jM#jM#jM#jM#jM#mO#k4@k4@IV.IV.>S%~h&~h&{h&0, &, Av&Av&{h&~h&%' >S%{h&0, ~h&%' >S%~h&0, 0, {h&0, ZQ.8P.Bv&Av&0, 0, Av&Av&0, zi.J> US+US+23+23+23+23+OP*US+US+US+US+US+US+US+J> {h&%z&%z&%z&.y&.y&.y&.y&.y&Xw&+y&.==3P )A&", "hY.hY.hY.G6.G6.9, 9, VW.VW.VW.VW.VW.VW.VW.VW.x5.O7._r+xX%x5.is@O7._r+is@is@is@is@is@is@is@is@Vh.is@O7.xX%xX%O7.is@Vh.O7.O7.O7.x5.x5.x5.is@is@x5.O7.O7.x5.is@is@O7._r+xX%xX%xX%xX%_r+_r+_r+_r+#k.#k.#k.#k.#k.#k.#k.#k.Tw@[{.8'%F6.F6.F6.F6.8'%4I%$;&QI.$;&xx.T}%xx.l=&$;&4I%l=&l=&4I%$;&91+s[.N7.N7.N7.N7.N7.N7.N7.N7.xX%_r+N7.M7.M7.M7.M7.N7.;}Q%8j&=3#g%&!m#cj#vg#bj#w! XC@8.#8.#Dv@!)#w! ]M d1#d1#d1#e1#ew Lz 1r@W~#X~#cN@v! ^Y@PC PC &E &E &E u1$Nt%Nt%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%GJ%Kv Kv Eu vR@$4@<|@<|@[|@[|@:|@_|@/|@^|@WA YA ]|@/d@(,@/,@7, 36 ,p :} <} <} 'p {1 {1 4' (o A_#>p M:;,G=,G=sF=~);L<**_;Sq=Cu J,#%T&c=;:^+):.62.72.w5.:^+t4.t4.D6.t4.v5.h;#o3.n3.sQ@h;#o3.t4.v5.h;#bQ#b,+Q+&j(#o&=bQ#b,+j(#j(#j(#Q+&w{@w{@CI#CI#CI#n3.n3.h;#h;#sQ@<(+.9..9.sQ@sQ@sQ@sQ@sQ@sQ@h;#h;#h;#h;#sQ@sQ@sQ@sQ@<(+.9..9..9.):.):.):.):..9..9.*r=&r=S`%CI#CI#S`%&r=*r=sX%sX%sX%sX%sX%sX%sX%sX%sX%CI#CI#sX%sX%CI#CI#sX%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%sX%sX%&r=&r=&r=j(#j(#Q+&w{@w{@CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%S`%uG#&r=S`%w{@Q+&w{@CI#S`%sX%sX%sX%sX%sX%&r=&r=&r=S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#CI#CI#S`%sX%&r=*r=S`%&r=*r=*r=sX%sX%*r=dr=[T=_{@B,=q9=q9=H8=zw*zw*pK+lt*b=+b=+US+US+23+x{+B#@!D+;n.>n.`b&B#@!D+;n.!D+!D+!D+>n.;n.;n.-~@=~@U*@x{+OP*OP*x{+x{+x{+[f.x{+x{+OP*OP*23+US+US+US+Av&&, 0, 0, {h&0, &, &, >S%{h&0, {h&>S%>S%~h&0, )A&%z&%z&%z&%z&%z&%z&%z&+y&.y&.y&%z&)A&)A& == ==`E&TO&#d+<:*-.%M]*/p.RD*/p./p./p.M]*M]*/p./p..==,0+jM#jM#jM#5,+$' $' qK+5,+5,+5,+5,+jM#jM#jM#jM#&s*&s*&s*&s*&s*&s*&s*&s*&s*&s*&s*&s*&s*&s*&s*&s*m}+o!#=Z+dr=^u=m}+^u=dr=&b=l]#=Z+dr=&b=yE#yE#l]#dr=dr=dr==Z+=Z+l]#l]#l]#iM#l]#=Z+o!#o!#=Z+l]#iM#uG#uG#uG#uG#uG#uG#uG#uG#&r=&r=*r=*r=*r=*r=&r=&r=iM#iM#iM#iM#l]#=Z+=Z+=Z+yE#=Z+dr=l]#=Z+xE#xE#o!#mO#mO#mO#jM#jM#jM#jM#jM#j(+j(+IV.mO#5,+$' qK+SO+>0+{h&0, 0, &, &, Av&Av&0, ~h&>S%>S%{h&0, {h&>S%~h&0, &, &, 0, 0, Av&Bv&Bv&ZQ.Av&ZQ.Bv&ZQ.0, nh.J> US+23+23+OP*x{+x{+x{+US+US+US+US+US+US+US+J> &, ==)A&%z&%z&.y&+y&+y&%z&+y&%z&3P 3P %z&", "hY.hY.hY.G6.G6.9, 9, VW.VW.VW.VW.VW.VW.VW.VW.Vh.x5.O7.x5.Vh.Vh.is@O7.is@is@is@is@is@is@is@is@Vh.is@O7.xX%xX%O7.is@Vh.O7.O7.O7.x5.x5.x5.is@is@x5.O7.xX%O7.Vh.dD.x5._r+_r+_r+_r+_r+_r+_r+_r+_r+#k.#k.#k.#k.#k.#k.#k.#k.Tw@[{.8'%F6.F6.F6.F6.8'%4I%$;&QI.$;&xx.T}%xx.l=&4I%4I%4I%4I%4I%$;&QI.QI.N7.N7.N7.N7.N7.N7.N7.N7.O7.xX%_r+N7.M7.M7.M7.N7.v4.v4.<3+0q.0q.<3+v4.v4.<3+<3+<3+<3+<3+<3+<3+<3+M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+M7.M7.M7.M7.%0+%0+<3+<3+<3+0q.0q.<3+<3+<3+0q.<3+<3+<3+<3+<3+<3+0q.O7.xX%xX%N7.M7.%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#eO@eO@eO@@9.$B#$B#%0+%0+@9.@9.@9.$B#%0+M7.M7.M7.%0+$B#@9.%0+N7.N7.$B#eO@_r+N7.M7.%0+$B#@9.eO@)Z%,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.q3.,X@)Z%eO@@9.$B#%0+M7.M7.@9.@9.@9.@9.@9.@9.@9.eO@,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.<;,<;$<;'<;Q];e,-H:@J}$r) g$#no=Vi-lI-6L=0C=#X-8u-VO-f5 kj#B0 e5 7v {1 :} .9 +L@+L@ 9 ]|@Y:@hB j.$7F _e wt r_$r_$+y i0$i0$Nt%Nt%Nt%Nt%$B%$B%u1$u1$u1$&E &E Kv Kv Kv Kv Kv Eu vR@$4@<|@[|@:|@(|@/|@^|@@~ WA @~ @~ @~ ^|@@~ WA YA 1f kI@')#B_#d1#6q# t#vg# t#vg#g%&KN#VC&');J+*J+*^f@li&)<;VC&ej#Fa#d5&6r&3r&oy&^:;XX-U-;2Y-!<;~<;{<;p:;kP=1&;3U=]<;^<;/<;(<;(S=[V=O-;$#;^=&N>;N>;M,&b%*e!;=3#VC&h%&K>;}Q%NH#cj#07#)m# t#bj#XC@XC@{Y@{Y@Dv@))#w! /M d1#d1#d1#e1#xy G5@X~#yK cN@v! ^Y@QC Lv Lv &E u1$u1$u1$u1$Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Eu Eu vR@$4@<|@[|@[|@:|@:|@_|@(|@^|@WA a~ 1f /d@O9 +' 7, 36 ,p :} <} <} 'p /0#4' S} (o |n Zq Yp dO=AI=Av@n7*7L=~);cE=bs $p@n.;n.>n.!D+`b&!D+;n.-~@-~@;n.;n.>n.!D+!D+Bj.zi.US+23+x{+[f.u!=u!=HV.x{+x{+OP*OP*23+US+US+US+&, &, 0, {h&0, 0, &, Av&~h&0, Av&&, {h&~h&0, &, %z&%z&%z&%z&%z&%z&%z&)A&+y&.y&.y&%z&)A&)A& == ==`E&TO&TO&#d+<:*-.%M]*/p.M]*/p./p./p./p./p./p. ==sq*$' qK+qK+SO+SO+SO+SO+5,+5,+5,+5,+5,+5,+5,+5,+&s*&s*=^@=^@=^@=^@&s*&s*=^@=^@=^@=^@=^@=^@=^@=^@^u=o!#dr=o!#m}+m}+^u==Z+&b=dr=dr=l]#yE#yE#&b=&b=^u=^u=^u=o!#o!#dr=dr=dr=&b=l]#dr=o!#o!#dr=l]#&b=uG#uG#uG#uG#uG#uG#uG#uG#*r=*r=&r=&r=&r=&r=*r=*r=yE#iM#&b=l]#l]#l]#=Z+=Z+yE#=Z+dr=l]#=Z+xE#xE#o!#$' $' $' $' $' $' 5,+5,+k4@k4@mO#5,+qK+SO+ X+1<#yi.yi.u.@u.@,0+,0+>0+>0+yi.,0+sq*>0+u.@yi.,0+>0+0, Av&ZQ.Av&{h&~h&~h&0, Av&&, Av&ZQ.B9.Bv&0, x{ J> US+23+23+OP*x{+x{+x{+US+US+US+US+US+US+US+J> &, == ==)A&%z&.y&.y&.y&.==%z&)A&cl..==Xw&", "hY.G6.G6.9, 9, 9, VW.VW.VW.VW.VW.VW.VW.VW.VW.dD.is@O7.x5.Vh.dD.is@x5.x5.x5.x5.x5.x5.x5.x5.x5.is@x5.O7.O7.O7.O7.x5.is@O7.O7.O7.x5.x5.x5.is@is@is@xX%N7.O7.dD.%j.is@_r+M7.M7.N7.N7._r+_r+xX%xX%#k.#k.#k.#k.#k.#k.#k.#k.[{.8'%F6.;li&li&K-;Ta&[<;g>;~m#ZC@)u&MA=03&oy&XX-=Y-R&;MY-}<;|<;p:;V:;1<;3&;s*;2<;3<;5U=t~&/-;A/&LY%>;;M*;'L&4<;5<;6<;d{;8j&K>;2L=K>;cj#07#97#)m#bj#bj#XC@XC@XC@w! Q~#))#+W@d1#e1#d1#d1#f1#LZ$1r@cN@}A v! ST@QC PC Lv .y u1$u1$u1$u1$u1$u1$u1$Nt%u1$u1$u1$u1$u1$u1$u1$u1$vR@vR@$4@<|@[|@:|@:|@_|@_|@_|@/|@@~ YA kI@')#O9 .9 36 n| ,p :} <} 'p 'p {1 4' S} (o z, >p /o Z4-Av@AI=WO=#';~);(m =^$^t sU=EW-p3.43+D6.o3.x@.72.u4.:^+t4.t4.D6.t4.v5.h;#t4.o3.o3.o3.v5.v5.v5.n3.o&=j(#Q+&Q+&b,+o&=b,+Q+&w{@w{@Q+&j(#Q+&Q+&w{@CI#sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@h;#h;#h;#h;#sQ@<(+.9..9.<(+sQ@<(+):.g|.+FG*b=+lt*23+US+OP*..=>n.>n.>n.>n.>n.>n.>n.>n.c2=]*=}m.-~@;n.!D+`b&`b&nh.';$23+OP*[f.[f.[f.[f.x{+x{+x{+OP*OP*OP*OP*17*&, 0, 0, {h&0, &, Av&Av&0, Av&ZQ.Av&0, 0, &, ZQ.%z&%z&%z&)A&)A& == == ==%z&%z&%z&%z&%z&)A&)A&)A&#d+#d+<:*<:*<:*-.%-.%-.%-.%M]*M]*/p./p.M]*M]*)A&>0+$' qK+SO+ X+SO+SO+SO+jM#5,+5,+5,+$' $' $' $' &s*=^@=^@wr*wr*=^@=^@&s*=^@=^@=^@=^@=^@=^@=^@=^@o!#dr==Z+o!#m}+m}+dr=l]#&b=^u=^u=&b=.X+&b==Z+l]#m}+^u=^u=^u=o!#o!#dr=dr==Z+=Z+dr=dr=dr=dr==Z+=Z+uG#uG#uG#uG#uG#uG#uG#uG#uG#uG#*r=&r=&r=*r=uG#uG#.X+&b==Z+=Z+l]#&b=&b==Z+iM#=Z+dr=&b=l]#^u=m}+=Z+SO+SO+SO+SO+qK+qK+qK+qK+SO+SO+SO+qK+qK+$' $' 5,+yi.yi.u.@,0+>0+sq*sq*mh.yi.,0+>0+,0+yi.yi.u.@>0+0, Av&ZQ.Av&~h&%' X@$%' {h&~h&{h&&, ZQ.Av&{h&%' J> US+US+23+23+23+23+OP*US+US+US+US+US+US+US+J> &, ==)A&)A&)A&)A&%z&%z&cl.)A&)A&.==)A&Be+", "9, 9, 9, VW.VW.8v.8v.VW.VW.VW.VW.VW.VW.VW.VW.Vh.x5.xX%O7.is@Vh.x5.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.x5.is@is@x5.O7.O7.O7.O7.O7.x5.x5.x5.is@is@is@_r+M7.xX%dD.Su$is@_r+$B#$B#%0+N7._r+xX%O7.x5.#k.#k.#k.#k.#k.#k.#k.#k.8'%F6. #, D,#Js&VA 5Z=^|$|6-=1-$)#z_#R3 7J@s[ i[#4' 'p ,p n| 7, VH y, /V#@, j.${a wt r_$+y +y i0$i0$Nt%Nt%Nt%Nt%$B%$B%u1$u1$u1$&E &E Kv Kv Kv vR@vR@vR@$4@$4@$4@$4@$4@:|@_|@(|@/|@^|@^|@/|@/|@WA YA a~ 1f ')#B_#QT@QT@f1#/M 6q#bj#6q#bj#Pv#NH#h%&}Q%K-;)<;K-;K-;li&');'6#'t=tt=16&Hx=7z=o-;:-;d<;zL&e<;%w=f<;w&*g<;h<;3P=Qx=i<;j<;E;;P(&9e&i;;k<;d9*@H@l<;m<;n<;o<;p<;q<;h%&=g&2L=07#^0#^0#)m#6q#bj#{Y@XC@w! +W@^J ))#!)#e1#f1#e1#e1#dw =p@yK v! v! ST@^Y@PC Lv .y ^G%u1$u1$u1$u1$u1$u1$u1$u1$&E &E &E &E &E &E &E &E vR@$4@$4@<|@[|@:|@_|@_|@_|@(|@^|@WA 1f ')#QT@.9 @A@n| ,p :} <} 'p 'p {1 /0#4' i[#@|#/m ^p=Z4-^|$y,;dR=H/;H/;2!#RC l.#5B&R%+V:*o3.dO@u4.p3.~Z%U>.w5.:^+t4.t4.D6.D6.o3.n3.D6.D6.D6.t4.o3.v5.v5.o3.b,+Q+&CI#w{@j(#b,+j(#w{@CI#w{@Q+&j(#j(#Q+&w{@CI#.9..9.<(+sQ@h;#h;#n3.n3.sQ@h;#n3.n3.n3.sQ@.9.):..9.sQ@n3.sQ@):. 17*xE*U*@xE*17*J> zi.U*@U*@U*@U*@U*@..=..=..=0, 0, {h&{h&0, &, Av&ZQ.0, Av&ZQ.Av&0, 0, &, ZQ.0, 0, 0, &, &, Av&Av&Av&0, 0, 0, {h&{h&{h&{h&{h&&, &, &, 0, 0, {h&{h&{h&~h&{h&&, Av&Av&&, {h&~h&u.@jM#5,+qK+qK+qK+$' 5,+jM#5,+5,+5,+$' qK+qK+qK+&s*=^@wr*+v=+v=wr*=^@&s*=^@=^@=^@=^@=^@=^@=^@=^@=Z+l]#l]#dr=^u=^u==Z+iM#l]#xE#m}+&b=.X+=Z+o!#=Z+o!#o!#dr=dr==Z+=Z+l]#l]#o!#dr==Z+=Z+=Z+=Z+dr=o!#N:*N:*N:*N:*N:*N:*N:*N:*vu#N:*uG#*r=*r=uG#N:*vu#yE#l]#o!#dr=l]#yE#iM#&b=iM#dr=dr=iM#&b=dr=dr=&b= X+X`+X`+Nc&Nc&mh.mh.sq*X`+X`+Nc&mh.>0+,0+,0+u.@>0+>0+>0+>0+>0+sq*sq*sq*u.@>0+sq*>0+u.@u.@,0+sq*>S%{h&&, &, ~h&%' X@$%' %' X@$x*$%' {h&0, {h&>S%J> J> J> J> J> zi.zi.zi.J> J> J> J> J> J> J> J> 0, 0, 0, 0, 0, &, &, &, Av&~h&>S%{h&{h&X@$", "9, VW.VW.8v.8v.8v.Hu+VW.VW.VW.VW.VW.VW.VW.VW.x5.xX%_r+xX%x5.x5.O7._r+xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.is@Vh.Vh.is@O7.xX%O7.O7.O7.x5.x5.x5.is@is@is@_r+M7.xX%%j.Su$Vh._r+eO@@9.$B#M7._r+O7.x5.is@#k.#k.#k.#k.#k.#k.#k.#k.F6.F6.#k.v4.v4.v4.#k.#k.l=&$;&91+91+$;&$;&91+v7+4I%$;&$;&QI.$;&$;&4I%l=&%0+%0+M7.N7.N7._r+_r+xX%%j.dD.is@x5.xX%xX%xX%xX%;_0#_0#^0#]0#87#)m#]M bj#{Y@{Y@w! +W@^J ))#QT@f1#f1#f1#f1#xy 1r@cN@v! ST@^Y@QC PC Lv .y ^G%Nt%Nt%Nt%u1$u1$u1$u1$u1$Kv Kv Kv Kv Kv Kv Kv Kv $4@$4@<|@[|@:|@_|@_|@(|@_|@(|@^|@YA 1f B_#QT@.9 RT@,p :} <} <} 'p {1 {1 /0#S} (o z, 6v /o 6L=gh*SR=m7*SR=ED=SC 5F b=;Q/;U:*dH=^(-1o. xE*U*@U*@..=..=3<@1.+1.+0, {h&{h&{h&0, &, Av&ZQ.{h&&, Av&Av&0, {h&0, Av&0, 0, &, &, Av&ZQ.ZQ.Bv&&, &, 0, 0, {h&~h&~h&>S%ZQ.ZQ.Av&&, 0, {h&{h&~h&>S%~h&0, &, &, 0, ~h&mh.j(+k4@jM#5,+$' 5,+jM#mO#jM#5,+5,+$' $' qK+qK+SO+&s*=^@wr*+v=+v=wr*=^@&s*=^@=^@=^@=^@=^@=^@=^@=^@l]#l]#l]#dr=o!#o!#l]#yE#=Z+XT#XT#&b=.X+dr=^u==Z+=Z+l]#l]#l]#&b=&b=iM#iM#^u=o!#=Z+l]#l]#=Z+o!#^u=N:*N:*N:*N:*N:*N:*N:*N:*;Z+vu#uG#*r=*r=uG#vu#;Z+yE#=Z+^u=o!#&b=yE#yE#iM#iM#dr=dr=iM#iM#=Z+=Z+$x+X`+X`+Nc&Nc&mh.sq*sq*sq*,0+,0+>0+>0+>0+>0+>0+>0+Nc&Nc&mh.sq*sq*>0+,0+,0+,0+sq*Nc&mh.>0+,0+sq*mh.u3$%' {h&{h&~h&%' %' >S%x*$=|$=|$u3$>S%{h&{h&~h&17*J> J> zi.zi.nh.x{ x{ J> J> J> J> J> J> J> J> {h&{h&{h&0, &, Av&Av&Av&0, X@$x*$>S%~h&>S%", "9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, _r+xX%O7.O7.O7.O7.xX%xX%x5.x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@is@Vh.Vh.O7.is@Vh.dD.Vh.is@x5.is@xX%xX%O7.O7.x5.is@is@is@xX%xX%xX%xX%xX%xX%xX%xX%8'%#-c RC 1n cH=tS.F8@9<@v5.t4.v5.n3.a,+J!.N7+w5.:^+o3.v5.n3.v5.v5.D6.t4.t4.o3.o3.v5.v5.n3.CI#w{@Q+&j(#j(#Q+&w{@CI#S`%S`%w{@Q+&j(#j(#j(#Q+&g|.):.sQ@sQ@sQ@h;#v5.D6.sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@h;#sQ@.9.0+>0+>0+>0+>0+>0+>0+>0+,0+,0+u.@u.@yi.6g.6g.%b=Av&ZQ.ZQ.Bv&Bv&ZQ.ZQ.Av&B9.0, ~h&ZQ.Bv&Av&0, Av&Av&Av&&, &, 0, {h&{h&~h&0, {h&>S%%' %' >S%{h&0, J> 17*xE*xE*xE*J> zi.x{ xE*J> zi.J> U*@..=U*@17*jS.jS.jS.d;+d;+o2@o2@o2@y{+k#@h^+wE*d;+jS.o2@h^+5,+5,+5,+5,+5,+5,+5,+5,+j(+k4@jM#jM#mO#mO#5,+qK+wr*xr*,C+,C+&s*wr*+v=wr*uq*uq*uq*uq*uq*uq*uq*uq*=Z+dr=o!#o!#=Z+=Z+dr=o!#dr=l]#yE#iM#l]#=Z+l]#&b=yE#&b==Z+dr=o!#dr==Z+=Z+&b==Z+o!#=Z+iM#.X+iM#l]#N:*N:*uG#uG#uG#*r=*r=*r=&r=&r=&r=&r=&r=&r=&r=&r=&b=&b=l]#l]#=Z+dr=dr=o!#iM#iM#&b=&b=l]#l]#l]#uq*sq*>S%X@$x*$x*$%' {h&&, 0, {h&~h&%' %' >S%~h&>0+Nc&qK+5,+mO#mO#mO#jM#5,+$' $' $' $' $' $' $' sq*ZQ.Bv&Av&{h&&, B9.ZQ.>S%~h&%' X@$>S%&, Av&{h&%' {h&{h&{h&{h&{h&{h&{h&{h&{h&&, Bv&8P.B9.ZQ.{h&>S%$.@..=Z*;3<@17*J> J> nh.17*J> nh.x{ x{ nh.", "9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, x5.x5.x5.x5.x5.O7.xX%_r+O7.O7.O7.O7.O7.O7.O7.O7.is@is@is@x5.x5.x5.x5.x5.O7.x5.is@Vh.is@x5.x5.x5.xX%O7.O7.O7.x5.is@is@is@xX%xX%xX%xX%xX%xX%xX%xX%8'%[;,[;'[;)[;![;86+0+%:m (,@Y=#S2*p7-Tm-lI-6L=6U%@p=Fz z, R3 []#vb 7v #, Q1 F> /1 5, Zr 6, @, ;E xt cs wt *E *E u1$u1$u1$Nt%$B%$B%*L%GJ%GJ%Nt%u1$&E Kv Kv Kv Kv Kv Kv Eu Eu Eu Eu _|@_|@(|@/|@/|@^|@@~ @~ a~ 1f 1f kI@')#B_#QT@QT@f1#/M bj# t#bj#6q#)m#cj#h%&@A&S^;S^;li&S^;ki&((;5R=3>&t8&6=;H7&+w=(y=:*;S&;W=;W<;~[;^Q=Y%; *;,P=i@;{[;][;^[;/[;([;_[;#D@:[;a_;<[;[[;}[;|[;tw&1[;2[;VC&2L=2L=!m#07#^0#^0#]M ]M +W@))#))#!)#`Z !)#+W@f1#Lz =p@1r@W~#yK }A ^Y@^Y@QC PC Lv .y ^G%^G%Nt%Nt%Nt%u1$u1$u1$&E &E u1$&E &E &E Kv Kv Kv Kv <|@<|@[|@[|@:|@_|@(|@(|@/|@^|@@~ YA 1f ')#B_#+L@RT@,p ,p <} {1 4' Zp (o Zp Zp 6v @' 6L=Nj=Tm-3[;bN=4[;-c ]t #F=`:;mh dN=)~@p&=t4.D6.o3.n3.a,+62.D6.t4.o3.v5.v5.o3.t4.D6.t4.o3.o3.o3.v5.n3.n3.n3.w{@Q+&j(#b,+b,+j(#Q+&w{@CI#w{@Q+&j(#j(#j(#Q+&Q+&<(+h;#v5.n3.sQ@<(+h;#v5.sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@n3.h;#<(+):.):.):..9.<(+sQ@sQ@<(+<(+<(+<(+.9..9.Q+&S`%*r=uG#*r=&r=&r=*r=S`%S`%S`%sX%sX%sX%&r=&r=sX%CI#w{@w{@S`%sX%S`%w{@S`%S`%S`%S`%sX%sX%sX%sX%&r=&r=&r=sX%sX%sX%sX%sX%&r=S`%CI#S`%&r=&r=sX%CI#S`%S`%S`%sX%sX%&r=&r=&r=sX%S`%S`%CI#CI#S`%S`%sX%&r=&r=&r=sX%S`%S`%S`%CI#S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%&r=&r=*r=*r=*r=*r=S`%S`%S`%sX%&r=&r=&r=*r=sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=*r=*r=uG#uG#uG#Fn=V[@KD=KD=,S#=)+k4@IV.u.@u.@u.@u.@&, 0, {h&~h&,0+,0+,0+,0+,0+,0+,0+,0+u.@u.@u.@u.@yi.yi.yi.yi.ZQ.Av&0, {h&{h&0, Av&ZQ.8P.&, {h&Bv&8P.ZQ.&, ZQ.Av&Av&Av&Av&&, &, &, &, 0, 0, ~h&>S%>S%~h&0, 0, J> 17*xE*xE*xE*J> zi.nh.J> nh.x{ zi.xE*U*@xE*17*d;+d;+d;+o2@o2@k#@k#@k#@wE*k#@o2@o2@o2@k#@k#@o2@mO#mO#mO#mO#mO#mO#mO#mO#k4@jM#$' 5,+mO#mO#jM#$' =^@xr*Fu+,C+xr*=^@wr*=^@uq*uq*uq*uq*uq*uq*uq*uq*dr=dr=o!#dr=dr==Z+dr=dr=dr=l]#iM#iM#l]#=Z+l]#&b=iM#&b==Z+dr=o!#dr==Z+=Z+&b==Z+o!#=Z+iM#yE#iM#l]#N:*N:*uG#uG#uG#*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=l]#l]#l]#=Z+=Z+=Z+=Z+=Z+&b=&b=l]#l]#l]#=Z+=Z+uq*>0+>S%%' X@$X@$>S%0, &, >S%%' X@$x*$X@$%' >S%~h&qK+$' jM#mO#mO#jM#5,+$' $' $' $' 5,+5,+5,+5,+5,+yi.Bv&Av&~h&0, ZQ.&, %' {h&~h&>S%{h&Av&ZQ.&, ~h&0, 0, 0, 0, 0, 0, 0, 0, ~h&{h&&, Av&&, 0, >S%%' x{ U*@3<@xE*J> 17*J> x{ J> zi.zi.nh.nh.zi.", "9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, Vh.Vh.is@is@x5.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.is@is@x5.x5.O7.xX%xX%_r+xX%O7.O7.x5.x5.x5.O7.xX%O7.O7.O7.x5.x5.x5.is@is@xX%xX%xX%xX%xX%xX%xX%xX%8'% +l x' O1 x, 5, 2k /V#uG ds cs wt *E *E u1$u1$u1$Nt%$B%$B%GJ%GJ%Nt%Nt%u1$&E Kv Kv &E &E Kv Kv Eu vR@$4@$4@_|@_|@(|@/|@/|@^|@@~ @~ WA YA YA a~ 1f kI@')#')#e1#]M t#vg#bj#]M 07#)m#7~%}Q%li&S^;$/;^f@7j&&2>&0`%v=;c5&$#;@$;@$;]-;]=;hw=Yw=^%;{%;MK=a[;g&;b[;c[;d[;e[;f[;g[;h[;i[;j[;k[;l[;m[;n[;o[;p[;w`&@A&7~%-k&!m#97#87#^0#]M ]M ))#))#!)#!)#]C@QT@+W@f1#Lz G5@=p@W~#yK v! PC PC Lv .y ^G%^G%Xw Xw Nt%Nt%Nt%u1$u1$u1$&E &E &E &E &E Kv Kv Eu Eu vR@<|@[|@[|@:|@_|@(|@/|@^|@@~ WA YA 1f ')#QT@!)#@A@bP@:} <} 'p /0#S} (o kx Bv@Bv@^p=d:*|x=`q g:*1x=AI=[m 5r q[;L<*qi `M*=g@^^@M|@:^+:^+o3.v5.k5+U%+h;#h;#h;#n3.v5.t4.:^+p3.v5.v5.v5.n3.n3.n3.h;#h;#Q+&j(#b,+b,+b,+b,+j(#Q+&Q+&j(#b,+b,+b,+j(#Q+&w{@o3.t4.D6.o3.sQ@<(+<(+sQ@<(+<(+<(+<(+<(+<(+<(+<(+n3.h;#sQ@<(+<(+<(+sQ@sQ@.9..9.<(+<(+<(+<(+sQ@sQ@Q+&S`%&r=&r=S`%CI#S`%sX%sX%sX%sX%sX%S`%S`%S`%S`%&r=S`%CI#S`%&r=&r=sX%CI#S`%S`%S`%S`%CI#CI#CI#CI#*r=*r=&r=&r=sX%S`%S`%CI#*r=sX%S`%sX%*r=uG#&r=S`%CI#S`%S`%S`%sX%sX%&r=&r=sX%S`%S`%CI#CI#S`%S`%sX%*r=*r=&r=&r=&r=sX%sX%sX%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%&r=&r=*r=*r=*r=S`%S`%sX%sX%sX%&r=&r=&r=&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=*r=*r=*r=C{@C{@=Z+=Z+dr=^u=wr*+v=PB@PB@(-=(-=)A&%z&%z&%z&,0+jM#jM#jM#jM#jM#jM#jM#k4@k4@k4@mO#mO#mO#mO#,0+3P )A&+y&Be+Be++y&)A&3P _b+ ==)A&cl._b+3P .==cl.Av&Av&ZQ.ZQ.ZQ.ZQ.Bv&Bv&&, &, 0, {h&{h&0, &, &, 17*23+OP*OP*OP*23+';$';$d #u]#:{+d #23+x{+OP*23+lt*aH*aH*>H*>H*zw*zw*zw*r,@GJ@16.16.>H*GJ@>H*ZQ+k4@k4@k4@k4@k4@k4@k4@k4@5,+$' qK+$' jM#mO#jM#$' &s*uq*Fu+Fu+xr*&s*&s*xr*&s*&s*&s*&s*&s*&s*&s*&s*dr=dr=dr=dr=dr=dr=dr=dr=o!#l]#iM#iM#l]#=Z+=Z+l]#&b=l]#=Z+dr=dr=dr==Z+=Z+l]#=Z+dr==Z+&b=iM#&b=l]#N:*N:*uG#uG#uG#*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#=Z+=Z+=Z+=Z+=Z+l]#l]#l]#l]#l]#=Z+=Z+dr=dr=dr=xr*{h&`b&B#@{y%B#@`b&>n.-~@{y%{y%{y%{y%B#@`b&!D+0, 5,+uC#=)+=)+=)+uC#,S#,S#,S#,S#uC#uC#=)+[o=[o=mO#yi.ZQ.&, >S%~h&&, {h&u3$&, 0, 0, &, ZQ.Bv&Av&0, )A&)A&)A&)A&)A&)A&)A&)A&.y&.y&+y&+y&+y&Xw&Xw&X@$zi.23+US+u]#d #OP*US+v]#d #';$';$US+US+';$", "9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, is@is@is@x5.is@is@Vh.Vh.xX%xX%xX%xX%xX%xX%xX%xX%is@is@x5.O7.xX%_r+N7.M7.xX%xX%xX%O7.x5.x5.xX%N7.O7.O7.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%8'%];r[;s[;t[;u[;v[;sv&'<;]_$w6 vo ^1 .9 t_$Wi-Wi-%1*[!-6U%^m Bu=wf= ) kj#A0 Ea#f2 O1 /1 3' 5, 6, UH ;E xt cs *E *E u1$u1$u1$Nt%$B%$B%GJ%GJ%Nt%Nt%u1$&E &E &E Nt%u1$&E Kv vR@$4@[|@[|@_|@_|@(|@/|@/|@^|@@~ @~ @~ @~ WA YA a~ 1f 1f kI@e1#6q#vg#vg#bj#]M 97#97#-k&}Q%$/;S^;S^;^f@vh&;K>;cj#97#]0#^0#]M /M ))#!)#QT@B_#Nx@')#))#f1#Lz G5@=p@W~#cN@v! .y .y .y ^G%Xw Xw aK%aK%Nt%Nt%Nt%u1$u1$u1$&E &E &E &E Kv Eu Eu vR@$4@$4@[|@[|@:|@(|@/|@^|@@~ WA YA a~ kI@')#QT@))#+W@bP@bP@<} <} {1 4' i[#kx uy >p J[$^m b:*Yh-1[*g:*/o }o 8q 16 P<*s2@He+eg+!~@M|@c3+p3.p3.t4.v5.k5+:{.sQ@sQ@h;#n3.v5.o3.D6.D6.n3.n3.n3.n3.h;#h;#h;#h;#b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+Q+&w{@CI#t4.D6.D6.o3.h;#<(+sQ@h;#<(+<(+<(+<(+<(+<(+<(+<(+n3.n3.h;#h;#h;#h;#h;#h;#):.):..9.<(+<(+sQ@h;#h;#w{@S`%sX%S`%w{@Q+&w{@CI#N:*uG#uG#*r=*r=&r=sX%sX%*r=sX%S`%S`%&r=*r=&r=S`%sX%S`%S`%CI#w{@w{@Q+&Q+&uG#uG#*r=&r=sX%S`%CI#w{@uG#&r=sX%&r=uG#uG#*r=sX%CI#CI#S`%S`%S`%sX%sX%sX%sX%S`%S`%CI#CI#S`%S`%sX%*r=*r=*r=*r=&r=&r=&r=&r=S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%&r=&r=*r=*r=sX%sX%sX%sX%sX%sX%&r=&r=*r=*r=&r=&r=sX%S`%S`%CI#S`%S`%S`%sX%sX%&r=&r=&r=9<@9<@=Z+=Z+dr=o!#=^@wr*(-=(-=kt*kt*%z&%z&%z&(-=u.@mO#mO#mO#mO#mO#mO#mO#IV.k4@k4@mO#jM#jM#5,+5,+)A&%z&.y&Xw&Xw&.y&%z&)A&PN.)A&.y&3P PN..==)A&.==Av&Av&ZQ.ZQ.Bv&B9.B9.B9.Av&Av&&, &, &, &, Av&U*@xE*OP*OP*OP*23+23+US+US+';$u]#u]#';$OP*[f.[f.lt*FG*>H*>H*zw*zw*GJ@GJ@GJ@A) (&aH*Ij=aH*>H*aH*(k=mO#mO#mO#mO#mO#mO#mO#mO#$' SO+ X+qK+5,+mO#jM#$' xr*,C+Fu+Fu+uq*xr*uq*,C+&s*&s*&s*&s*&s*&s*&s*&s*o!#dr==Z+=Z+o!#o!#dr==Z+o!#=Z+iM#&b==Z+dr==Z+l]#l]#l]#=Z+=Z+=Z+=Z+=Z+=Z+l]#=Z+=Z+=Z+l]#l]#l]#=Z+N:*N:*uG#uG#uG#*r=*r=*r=N:*N:*N:*N:*N:*N:*N:*N:*o!#dr=dr==Z+l]#l]#&b=&b==Z+=Z+=Z+dr=dr=o!#o!#&s*{h&!D+`b&`b&`b&!D+;n.-~@`b&`b&!D+>n.;n.-~@}m.Bv&jM#=)+=)+=)+uC#uC#,S#,S#,S#uC#uC#=)+[o=U^$U^$IV.u.@Av&0, %' >S%0, >S%=|$0, 0, 0, &, Av&Av&&, {h& == == == == == == == ==%z&.y&Xw&Be+@d+Be+Xw&>S%J> US+:{+M8@u]#OP*US+h]@u]#d #US+23+23+US+", "9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, O7.O7.O7.O7.x5.Vh.%j.3o.O7.O7.O7.O7.O7.O7.O7.O7.is@is@x5.O7.xX%_r+N7.M7.O7.xX%_r+xX%is@is@xX%N7.x5.x5.x5.x5.x5.x5.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%8'%;VC&h^;h^;S^;h^;L^;g&*yJ&5t=2,;LY%$#;X;;w[;G/;6,;}Q=r*;r*;MK&X%;MK=V[;W[;X[;Yz=Y[;Z[;`[; };{Z-.};+};@};#};$};%};&};*};^f@@A&h%&}Q%Pv#^0#]0#87#/M /M !)#QT@B_#')#H5@kI@QT@ew Lz G5@=p@W~#}A ^Y@^G%^G%^G%Xw Xw Xw aK%aK%Nt%Nt%Nt%u1$u1$u1$&E &E &E Kv Kv Eu $4@<|@<|@[|@:|@:|@_|@/|@@~ WA YA a~ 1f kI@')#QT@))#w! XC@[`@bP@<} 'p /0#Zp @|#Bv@|n Fz /o Z4-`q Tr LM-Yp ds Ju R*#V);t[*He+*e@eg+eO=c3+J7.p3.:^+t4.o3.k5+a,+n3.n3.v5.v5.v5.v5.v5.v5.h;#h;#h;#h;#n3.n3.n3.n3.b,+b,+b,+b,+b,+b,+b,+b,+j(#b,+b,+b,+j(#Q+&w{@CI#n3.o3.t4.o3.n3.h;#n3.o3.<(+<(+<(+<(+<(+<(+<(+<(+h;#h;#n3.n3.n3.n3.n3.n3.):.):..9.<(+<(+sQ@h;#h;#w{@CI#S`%CI#Q+&j(#w{@S`%uG#uG#*r=*r=&r=sX%sX%sX%*r=sX%S`%S`%&r=*r=&r=S`%sX%S`%S`%CI#w{@w{@Q+&Q+&uG#uG#*r=&r=sX%S`%CI#w{@uG#&r=sX%&r=uG#uG#*r=sX%CI#CI#CI#S`%S`%S`%sX%sX%sX%S`%S`%CI#CI#S`%S`%sX%&r=&r=&r=&r=*r=*r=*r=*r=S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%&r=&r=&r=&r=&r=sX%sX%sX%sX%sX%sX%*r=*r=&r=&r=sX%S`%S`%CI#S`%S`%S`%sX%sX%&r=&r=&r=^^@9<@=Z+dr=o!#o!#=^@=^@(-=kt*VD@VD@.y&%z&)A&PB@,0+jM#jM#jM#jM#jM#jM#jM#k4@k4@mO#mO#jM#5,+5,+$' .y&%z& ==.==.== ==%z&.y&.==+y&Xw&)A&.==%z&.y&%z&&, &, Av&Av&ZQ.Bv&Bv&Bv&Av&Av&Av&Av&Av&Av&Av&U*@U*@x{+OP*OP*23+23+23+23+23+US+';$23+[f.HV.u!=a1+FG*>H*>H*zw*zw*GJ@GJ@GJ@ (&p)@ (&zw*Ij=16.aH*GJ@jM#jM#jM#jM#jM#jM#jM#jM#$' SO+ X+qK+5,+mO#jM#$' xr*,C+Fu+,C+xr*xr*uq*Fu+&s*&s*&s*&s*&s*&s*&s*&s*^u=dr=l]#=Z+o!#^u=dr=l]#o!#=Z+&b=&b==Z+dr=dr==Z+=Z+=Z+=Z+l]#l]#l]#=Z+=Z+=Z+=Z+l]#=Z+=Z+dr==Z+=Z+N:*N:*uG#uG#uG#*r=*r=*r=N:*N:*N:*N:*N:*N:*N:*N:*o!#dr=dr==Z+l]#l]#&b=&b==Z+=Z+=Z+dr=dr=o!#o!#&s*{h&!D+`b&`b&!D+>n.;n.;n.B#@`b&!D+>n.-~@}m.}m.ZQ.jM#=)+uC#uC#uC#uC#uC#uC#uC#uC#=)+=)+[o=[o=U^$k4@,0+&, {h&X@$%' 0, ~h&=|$>S%~h&{h&{h&{h&~h&>S%>S%)A&)A&)A&)A&)A&)A&)A&)A& ==%z&+y&Be+Be+Xw&+y&{h&zi.';$v]#M8@:{+OP*23+h]@u]#d #US+23+23+US+", "9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, O7.xX%xX%xX%O7.is@%j.Su$x5.x5.x5.x5.x5.x5.x5.x5.is@is@x5.x5.O7.xX%xX%_r+is@xX%N7.xX%Vh.dD.O7.M7.is@is@x5.x5.x5.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%8'%};,};'};U[;)};Gb@H:@q7 O9 @~ w! $h@a|*@c-|x=qy=x8-=1-u4 T3 U3 e@#'3 8> /e F> /1 5, e{@hB ;E ds *E *E u1$u1$u1$Nt%$B%$B%Nt%u1$u1$u1$u1$u1$u1$u1$u1$&E Kv Eu $4@[|@:|@:|@_|@_|@(|@/|@/|@^|@@~ @~ ^|@^|@@~ WA YA YA a~ 1f ew /M vg#SJ#vg#6q#97#97#@A&;d@^f@^f@S^;h^;ki&((;,*;!t=2,;hU=#7&aU=}>&ff&!};IP=Yw=r*;MK&~};oP=6M=r/&{};]};^};/};(};_};:}; M@<};[};}};|};1};2};3};$/;g>;}Q%g>;gy#^0#nx ]0#/M d1#!)#B_#')#kI@0~ a~ ')#xy G5@=p@1r@yK ST@PC ^G%^G%^G%^G%Xw Xw Xw Xw Nt%Nt%Nt%u1$u1$u1$&E &E &E Kv Eu vR@<|@[|@:|@:|@:|@_|@(|@^|@WA a~ 1f kI@1f kI@B_#QT@))#w! XC@[`@uR@'p /0#i[#uy A_#6v D,#^p=6U%qg*dS-K6*Fz _t r_$67#zv@4};%R+D0@dN=hP.cN=J7.n4@D6.D6.t4.o3.k5+k5+o3.o3.t4.t4.o3.v5.n3.h;#h;#h;#n3.n3.n3.v5.v5.v5.b,+b,+j(#Q+&Q+&j(#b,+b,+w{@Q+&Q+&Q+&Q+&w{@CI#CI#<(+h;#v5.v5.h;#h;#v5.t4.sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@<(+sQ@h;#n3.v5.n3.n3.h;#.9..9.<(+<(+<(+<(+sQ@sQ@w{@CI#S`%CI#Q+&Q+&CI#&r=S`%S`%S`%CI#CI#CI#CI#w{@&r=S`%CI#S`%&r=&r=sX%CI#S`%S`%S`%S`%CI#CI#CI#CI#*r=*r=&r=&r=sX%S`%S`%CI#*r=sX%S`%sX%*r=uG#&r=S`%w{@w{@CI#CI#S`%S`%S`%sX%sX%S`%S`%CI#CI#S`%S`%sX%sX%sX%sX%&r=&r=&r=*r=*r=S`%S`%S`%S`%S`%S`%S`%S`%CI#S`%S`%S`%sX%sX%&r=&r=&r=&r=&r=sX%sX%sX%S`%S`%&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%&r=&r=*r=*r=*r=p&=^^@l]#dr=o!#o!#&s*&s*(-=kt*z9._|*+y&.y&)A&A9.>0+5,+5,+5,+5,+5,+5,+5,+mO#jM#jM#jM#jM#5,+5,+5,++y&)A&3P PN.PN.3P )A&+y& ==Xw&@d+%z&)A&.y&Xw&.y&{h&0, 0, 0, 0, &, &, &, &, &, Av&ZQ.ZQ.Av&&, xE*..=[f.OP*23+23+23+OP*OP*[f.OP*23+OP*u!=HV.u!=b=+lt*aH*aH*>H*>H*zw*zw*zw*>H* (&r,@ (&aH*16.aH*lC&5,+5,+5,+5,+5,+5,+5,+5,+5,+$' qK+$' jM#mO#jM#$' &s*xr*uq*xr*&s*&s*uq*tq*&s*&s*&s*&s*&s*&s*&s*&s*m}+=Z+&b=l]#^u=m}+o!#&b=^u==Z+&b=&b==Z+o!#dr==Z+o!#dr==Z+l]#l]#l]#l]#=Z+dr=l]#&b=l]#dr=o!#o!#=Z+N:*N:*uG#uG#uG#*r=*r=*r=uG#uG#uG#uG#uG#uG#uG#uG#=Z+=Z+=Z+=Z+=Z+l]#l]#l]#l]#l]#=Z+=Z+dr=dr=dr=xr*>S%B#@`b&`b&!D+!D+>n.>n.3&$'W+{y%`b&!D+!D+`b&~h&5,+,S#,S#,S#uC#=)+[o=U^$=)+=)+=)+=)+=)+=)+=)+jM#>0+0, {h&X@$>S%&, {h&x*$x*$%' ~h&~h&%' x*$x*$X@$%z&%z&%z&%z&%z&%z&%z&%z& ==)A&.y&Xw&Xw&+y&.y&{h&$.@d #d #v]#u]#23+23+:{+d #';$';$US+US+';$", "9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, Vh.x5.xX%_r+_r+xX%x5.is@is@is@is@is@is@is@is@is@is@is@is@x5.x5.x5.x5.x5.dD.O7._r+O7.%j.Su$is@N7.is@is@is@x5.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%8'%;;d@q^;^f@S^;h^;IY%ji&N!;JY%wt=8u=By=##;b};+-;3<;c};d};d};X%;e};a[;<^&f};g};h};g};i};j};k};-P=l};m};n};o};p};.7&q};EG&EV=g>;g>;VC&gy#^0#mx ]0#/M d1#QT@B_#kI@1f I~ YA 1f LZ$=p@1r@W~#cN@QC ^G%^G%^G%^G%^G%^G%^G%^G%^G%Nt%Nt%Nt%u1$u1$u1$&E &E Kv Kv Eu $4@<|@:|@_|@_|@_|@(|@/|@@~ YA 1f kI@')#1f kI@B_#QT@))#w! XC@[`@UE@4' i[#z, cw Fz ^m /o [n lI-Tr sk-^m _t _,@A_#bN=FY#QK.@=@i)@VP=Q/@*e@n4@c3+o3.o3.o3.o3.k5+k5+o3.t4.D6.D6.D6.o3.v5.n3.n3.n3.n3.v5.o3.o3.o3.t4.b,+j(#Q+&w{@w{@Q+&j(#b,+sX%S`%CI#w{@w{@w{@CI#CI#.9.sQ@n3.n3.sQ@sQ@n3.o3.n3.n3.n3.n3.n3.n3.n3.n3..9.<(+h;#n3.v5.n3.h;#h;#sQ@sQ@<(+<(+<(+<(+.9..9.w{@CI#CI#CI#Q+&w{@sX%uG#w{@w{@w{@CI#CI#CI#CI#S`%sX%CI#w{@w{@S`%sX%S`%w{@S`%S`%S`%S`%sX%sX%sX%sX%&r=&r=&r=sX%sX%sX%sX%sX%&r=S`%CI#S`%&r=&r=sX%CI#w{@w{@w{@CI#CI#S`%S`%S`%sX%S`%S`%CI#CI#S`%S`%sX%CI#S`%S`%S`%sX%&r=&r=&r=S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#S`%S`%S`%sX%sX%sX%*r=&r=&r=&r=sX%S`%S`%S`%sX%sX%sX%sX%sX%&r=&r=&r=&r=&r=&r=*r=*r=uG#uG#uG#C!@p&=l]#dr=o!#o!#xr*xr*kt*VD@_|*u{@Xw&.y&)A&A9.sq*$' $' $' $' $' $' $' 5,+5,+5,+5,+jM#jM#jM#jM#%z&)A&.==3P 3P .==)A&%z& ==Xw&Be+%z& ==.y&+y&.y&~h&~h&~h&~h&>S%>S%>S%>S%{h&0, Av&ZQ.ZQ.Av&0, J> 3<@[f.x{+23+23+23+OP*x{+u!=x{+OP*OP*[f.[f.OP*pK+b=+(k=(k=aH*aH*>H*>H*>H*aH*zw* (&p)@ (&GJ@>H*>H*jM#jM#jM#jM#jM#jM#jM#jM#k4@jM#$' 5,+mO#mO#jM#$' =^@&s*xr*&s*wr*=^@uq*tq*uq*uq*uq*uq*uq*uq*uq*uq*m}+=Z+iM#l]#^u=xE#o!#&b=^u=dr=l]#l]#dr=o!#o!#=Z+^u=o!#=Z+&b=&b=&b=l]#=Z+dr=l]#&b=l]#o!#m}+o!#=Z+N:*N:*uG#uG#uG#*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=*r=l]#l]#l]#=Z+=Z+=Z+=Z+=Z+&b=&b=l]#l]#l]#=Z+=Z+uq*%' {y%B#@`b&`b&`b&`b&`b&3&$'W+{y%`b&`b&B#@{y%X@$KD=Q/@Q/@Q/@V[@Z2.4;@.=@Z2.Z2.!~@{z&V[@Q/@Q/@KD=sq*{h&~h&%' ~h&ZQ.Av&%' x*$%' {h&~h&X@$=|$u3$X@$.y&.y&.y&.y&.y&.y&.y&.y&)A&%z&.y&+y&+y&+y&+y&>S%%.@';$OP*';$d #23+US+u]#US+';$';$d #d #';$", "9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, Su$dD.O7.N7.M7.M7.N7._r+Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.x5.is@is@is@is@is@Vh.Vh.%j.x5._r+x5.Su$3o.Vh.N7.is@is@is@x5.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%8'%s&Jm&>s&##;z};A};#)&r=;d<&B};C};D};+T=NO=Qx=a<&E};F};G};H};I};jz=J};K};L};M};N};O};P};Q};R};S};T};(h&g>;@A&8j&g%&^0#mx ]0#/M d1#QT@')#kI@a~ EN#{M YA G5@1r@W~#X~#}A PC Xw ^G%^G%.y .y .y .y .y .y Nt%Nt%Nt%u1$u1$u1$&E &E Kv Kv vR@$4@[|@:|@_|@(|@yK *8@1r@}u Lz ;8 ')#O9 1f /d@')#+L@))#bP@XC@[`@P} YD#!1 Xk R8 V{;/p=0C=t|*Tr N<*&-;^t ^0@3!#tF=I<*eO=}@.]q%SW#L7.&o@H8@D6.o3.v5.e{+k5+k5+k5+k5+v5.o3.D6.:^+:^+D6.t4.o3.n3.v5.v5.o3.o3.t4.t4.D6.j(#Q+&w{@CI#CI#w{@Q+&j(#*r=&r=sX%CI#CI#CI#CI#CI#<(+h;#n3.h;#<(+.9.sQ@h;#v5.v5.v5.v5.v5.v5.v5.v5.):..9.sQ@n3.n3.n3.h;#sQ@h;#h;#sQ@<(+<(+.9.):.):.Q+&CI#CI#CI#w{@CI#*r=vu#S`%S`%S`%sX%&r=&r=*r=*r=S`%w{@Q+&w{@S`%S`%CI#Q+&CI#S`%S`%sX%&r=&r=*r=*r=sX%sX%sX%sX%sX%&r=&r=&r=sX%S`%w{@CI#sX%&r=S`%w{@w{@w{@w{@CI#CI#CI#S`%S`%sX%S`%S`%CI#CI#S`%S`%sX%w{@CI#CI#S`%S`%sX%sX%&r=S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#CI#S`%S`%sX%sX%sX%*r=*r=&r=&r=sX%S`%S`%S`%CI#S`%S`%sX%&r=&r=*r=*r=*r=l]#F#=uq*uq*xr*xr*dr=yE#iM#l]#dr=o!#o!#xr*uq*kt*VD@_|*u{@_|*VD@ ==A9.qK+qK+qK+qK+qK+qK+qK+qK+qK+$' $' 5,+jM#jM#mO#mO# == ==)A&)A&)A&)A& == ==.==+y&Xw&)A&.==%z&.y&)A&>S%>S%>S%%' X@$x*$x*$x*${h&0, &, Av&Av&&, 0, {h&1.+[f.x{+23+23+23+OP*x{+u!=x{+23+23+OP*OP*US+x}*a1+Ij=Ij=(k=(k=aH*aH*aH*>H*aH*>H* (&A) r,@GJ@16.k4@k4@k4@k4@k4@k4@k4@k4@j(+k4@jM#jM#mO#mO#5,+qK+wr*=^@&s*=^@+v=wr*uq*tq*uq*uq*uq*uq*uq*uq*uq*uq*xE#=Z+iM#l]#^u=xE#o!#iM#^u=dr=l]#l]#dr=o!#o!#=Z+^u=o!#=Z+&b=&b=&b=l]#=Z+o!#l]#iM#l]#^u=xE#^u==Z+N:*N:*uG#uG#uG#*r=*r=*r=&r=&r=&r=&r=&r=&r=&r=&r=&b=&b=l]#l]#=Z+dr=dr=o!#iM#iM#&b=&b=l]#l]#l]#uq*X@$'W+{y%B#@`b&`b&B#@B#@B#@`b&!D+>n.>n.`b&B#@%' SO+5;@5;@KD=,S#[o=+5-tC#[o=[o==)+uC#KD=5;@!G=1<#mh.{h&~h&%' {h&Bv&ZQ.~h&x*$>S%{h&~h&X@$=|$u3$X@$+y&z9.+y&z9.+y&z9.+y&z9..y&VD@.y&z9.+y&_|*Xw&X@$7g.';$[f.OP*';$US+US+';$23+US+d #u]#u]#d #", "VW.G6.G6.VW.VW.G6.X)@8v.VW.G6.hY.hY.G6.VW.8v.x5.x5.x5.x5.x5.x5.x5.x5.N7.N7.xX%O7.x5.x5.x5.O7.x5.x5.x5.x5.x5.x5.x5.x5._r+_r+xX%is@%j.dD.x5._r+xX%x5.Vh.is@O7.xX%x5.is@x5.is@is@is@is@is@Vh.Vh.8'%F6. gn=Yx--c-@; et-'`@ A@&i-U3 E> {1 .9 (7 _,@_t (e ml (e 7F cs i0$Nt%b|$WN%3$*aE%$B%Nt%Nt%Nt%Nt%Nt%Nt%Nt%&E &E Kv vR@<|@[|@:|@_|@WA /|@:|@_|@@~ YA YA @~ kI@1f a~ a~ a~ 1f ')#B_#;8 g1#H,#j%&!m#7~%T(&.|;:~;$)&|X%'1&r/;~=&ZT=:S=+|;@|;#|;$|;:>&%.;/Q=1^&%|;&|;@T=*|;=|;-|;;|;>|;,|;'|;)|;!|;~|;{|;]|;jJ@^|;/|;(|;_|;:|;<|;[|;8e&o ;VC&@A&VC&gy#^0#]0#^0#dw dw ')#kI@kI@a~ EN#{M 1f a~ WA ^|@_|@<|@Eu &E u1$u1$Nt%Nt%GJ%GJ%*L%*L%$B%$B%%B%b|$d.#d.#q<$q<$>8@/0@/0@/0@>8@-8@;8@=p@%A@tI@ n@$E Qx@`O%(d@m[#a7#xn#@A@,p RT@<} WH sR#i] GO%o]%}|;um=vm=D!;[C GL-c-;||;sI@eC%Uw#1|;2|;3|;%U*M|@M|@n4@w5.:^+v5.e{+a,+:{._{._{.Q!;A!;4|;a,+t4.D6.t4.t4.v5.n3.h;#t4.t4.o3.h;#.9.):.sQ@n3.w{@w{@Q+&j(#j(#b,+b,+o&=b,+j(#w{@CI#S`%CI#w{@Q+&v5.n3.h;#sQ@sQ@h;#n3.v5.sQ@sQ@h;#h;#n3.v5.v5.v5.w{@w{@w{@w{@w{@w{@w{@w{@S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%&r=&r=sX%S`%S`%CI#w{@w{@w{@w{@CI#S`%S`%sX%&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%S`%S`%sX%sX%&r=&r=&r=*r= US+23+OP*x{+[f.u!=HV.OP*OP*OP*OP*OP*OP*OP*lt*lt*aH*aH*aH*aH*aH*aH*aH*GJ@GJ@GJ@GJ@GJ@GJ@GJ@GJ@qK+qK+$' $' qK+SO+ X+ X+qK+$' $' 5,+jM#jM#mO#mO#k4@k4@mO#mO#jM#jM#5,+5,+mO#5,+qK+ X+ X+ X+SO+qK+SO+SO+ X+ X+1<#_($_($zM+$' $' $' $' $' $' $' $' =Z+=Z+dr=dr=dr=dr=o!#o!#qK#iM#dr=^u=^u=^u=m}+xE#dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=dr=$x+$x+tq*Fu+,C+uq*xr*xr*xr*Fu+Fu+&s*&s*Fu+Fu+VD@Be+3]&`E&`E&TO&#d+#d+#d+-.%#d+3]&O4%O4%`E&#d+)A&{h&Nc&sq*6g.6g.>0+mh.,0+sq*,0+u.@,0+sq*mh.sq*,0+mq+Xw&%z& == ==)A&.==3P %z&)A&)A&)A& == ==.==.==>0+jM#mh.1<#Nc&mO#u.@SO+sq*5,+>0+$' mh.$' u.@%b=1.+u!=x{+US+d #v]#M8@ZW+:{+u]#';$US+US+';$", "9, G6.G6.VW.VW.9, hY.8v.VW.G6.hY.hY.G6.VW.8v.x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%O7.x5.x5.x5.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5._r+_r+xX%is@%j.dD.x5._r+O7.is@Vh.Vh.x5.O7.x5.Vh.is@is@is@x5.x5.x5.x5.x5.8'%F6.;K>;xF&FY-b|;|X%c|;c|;d|;e|;1Z-wS=f|;g|;h|;i|;j|;@T=k|;l|;XT=m|;n|;r~&o|;p|;q|;_6&r|;s|;t|;u|;v|;Gw@w|;x|;y|;z|;A|;B|;C|;D|;E|;F|;EV=}Q%h%&h>;!m#]0#nx 97#ew ew ')#')#kI@1f EN#{M YA WA @~ (|@[|@vR@Kv u1$u1$u1$u1$Nt%GJ%GJ%GJ%*L%$B%$B%%B%b|$d.#q<$q<$c.#/0@/0@/0@/0@'8@-8@;8@=p@}r@k.#UN&Eh@`O% i# i# i#m[#qI#'p {1 'p {1 m| WE b^ ~G G|;H|;I|;vm=J|;Kj-R2*Wo@(c#0B U3@K|;L|;M|;]U=c3+h;#n3.D6.p3.:{.T`%[d.A!;Q!;_{.#*&y0.4/*[d.e{+v5.o3.t4.t4.t4.o3.v5.o3.t4.t4.v5.sQ@<(+sQ@n3.w{@w{@w{@Q+&j(#j(#j(#b,+o&=b,+Q+&w{@CI#w{@Q+&j(#sQ@h;#n3.v5.v5.n3.h;#sQ@<(+sQ@sQ@sQ@h;#n3.n3.n3.w{@w{@w{@w{@w{@w{@w{@w{@CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%S`%S`%S`%S`%CI#CI#&r=&r=sX%S`%S`%CI#w{@w{@sX%sX%sX%sX%sX%sX%sX%sX%CI#S`%S`%S`%sX%sX%&r=&r= KL$u{@,C+xr*&s*&s*xr*uq*,C+,C+uq*xr*&s*&s*=^@&s*&s*$' $' $' $' $' $' $' $' 5,+jM#mO#mO#mO#jM#$' qK+Av&&, &, &, &, &, &, &, &, &, &, &, &, &, &, &, -.%-.%-.%M]*M]*/p./p./p./p.M]*-.%<:*<:*-.%M]*-~@zi.US+23+OP*x{+[f.[f.u!=23+23+23+23+23+23+23+FG*lt*aH*aH*aH*aH*aH*aH*aH*zw*zw*zw*zw*zw*GJ@GJ@GJ@qK+$' $' $' $' qK+qK+SO+jM#jM#jM#jM#mO#mO#mO#mO#mO#mO#jM#jM#5,+5,+$' $' $' qK+SO+ X+SO+qK+$' 5,+SO+SO+SO+ X+ X+ X+ X+1<#$' $' qK+qK+SO+SO+SO+ X+dr=dr=dr=dr=dr=dr=dr=dr=/W%&b=dr=^u=o!#o!#^u=m}+yE#iM#&b=l]#=Z+dr=o!#o!#l]#l]#l]#l]#l]#l]#l]#l]#$x+$x+tq*Fu+,C+uq*xr*xr*xr*Fu+Fu+&s*&s*Fu+Fu+VD@Be+`E&`E&`E&TO&#d+#d+#d+-.%#d+`E&3]&O4%3]&`E&TO&~h&X@$%' &, 0, %' x*$>S%>S%{h&0, 0, ~h&>S%{h&&, +y&)A&.==.==)A&.y&.y&.y&%z&%z&%z&)A&)A&)A& ==PB@sq*jM#5,+qK+jM#j(+IV.$' $' 5,+5,+$' SO+qK+jM#ZQ+17*23+US+';$d #u]#:{+:{+:{+u]#';$US+US+';$", "G6.hY.G6.VW.8v.VW.G6.VW.9, 9, G6.G6.9, 9, VW.x5.x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@x5.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%is@dD.dD.x5._r+O7.is@Vh.Vh.x5.O7.x5.Vh.is@is@x5.x5.O7.xX%xX%_r+8'%F6. p7 ra 7u-IX-R<*D8-E8-F[*Mh 8>#ir# p@bP@:} (1 x, 9> x6 j.$xt *E u1$b|$WN%5,*bE%$B%Nt%Nt%Nt%Nt%Nt%Nt%Nt%Nt%u1$u1$Kv Eu vR@$4@<|@:|@[|@:|@(|@@~ WA @~ /|@@~ WA YA 1f kI@')#')#ew (d@g1#(=&ny#h%&h>;52&Km&1X%8/;c%&c%&cu@1Z-2<;(`-9 ;T|;U|;V|;W|;f[;}y=Gy=X|;Y|;Z|;<};`|; 1;.1;gJ@+1;@1;#1;`A=$1;%1;*B@&1;*1;=1;-1;;1;>1;,1;'1;)1;EV=h%&2L==g&87#mx mx ^0#f1#f1#B_#')#kI@1f EN#{M @~ ^|@(|@:|@$4@Kv u1$Nt%u1$u1$u1$Nt%Nt%Nt%GJ%GJ%Nt%u1$u1$&E Kv Eu vR@vR@$4@$4@$4@<|@[|@_|@/|@1r@xK UN&z^=Z(&4!#Rk#Rk#Rk#m[#26 4' S} {1 /0#~1 d0&jH n]%!1;~1;FY%%]-{1;Kj-qR#k1#U^#!x=]1;^1;/1;n_#ws&M|@h;#v5.:^+p3.a,+~Z%[d.A!;Q!;Q!;y0.y0.4/*[d.~Z%n3.v5.t4.t4.D6.D6.t4.v5.t4.:^+D6.v5.h;#h;#n3.w{@w{@w{@w{@Q+&Q+&Q+&Q+&bQ#o&=b,+j(#Q+&Q+&j(#j(#.9.sQ@v5.t4.t4.v5.sQ@.9.<(+<(+<(+sQ@sQ@sQ@h;#h;#w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#S`%S`%S`%S`%sX%sX%&r=&r=sX%S`%S`%CI#w{@w{@CI#CI#CI#CI#CI#CI#CI#CI#w{@w{@CI#CI#S`%S`%S`%sX%):.<(+sQ@<(+):.):..9.sQ@<(+<(+.9.):.):..9.<(+<(+w{@CI#CI#S`%S`%sX%sX%&r=S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%cX-k]#S`%CI#w{@CI#tq*Fu+X`+X`+ME+*Z+y*$c> $.@jk@_|*,C+uq*uq*uq*,C+Fu+Fu+tq*Fu+uq*xr*&s*xr*uq*,C+5,+5,+5,+5,+5,+5,+5,+5,+5,+5,+jM#mO#k4@mO#mO#jM#ZQ.ZQ.Av&&, 0, {h&{h&~h&&, &, &, &, &, &, &, &, <:*<:*<:*-.%-.%M]*M]*M]*-.%-.%<:*#d+#d+<:*-.%>n.zi.';$US+23+23+OP*x{+x{+US+US+US+US+US+US+US+pK+lt*aH*aH*aH*aH*aH*aH*aH*aH*aH*aH*>H*zw*zw*GJ@GJ@$' $' $' $' 5,+5,+5,+5,+k4@k4@k4@mO#mO#mO#mO#mO#5,+5,+5,+$' $' $' qK+qK+SO+SO+SO+SO+qK+$' jM#mO#SO+SO+SO+SO+qK+qK+qK+qK+$' qK+qK+SO+SO+ X+ X+1<#^u=^u=o!#dr=dr==Z+l]#l]#iM#l]#o!#o!#dr==Z+dr=o!#iM#iM#&b=&b=l]#l]#=Z+=Z+iM#iM#iM#iM#iM#iM#iM#iM#tq*tq*Fu+,C+,C+uq*xr*xr*xr*Fu+Fu+&s*&s*Fu+Fu+VD@Xw&`E&`E&TO&TO&TO&#d+#d+#d+#d+TO&`E&`E&3]&3]&3]&~h&X@$X@${h&~h&u3$=|$x*$X@$>S%{h&{h&>S%>S%{h&&, .y&)A&.==.==%z&+y&+y&.y&.y&.y&.y&.y&%z&%z&)A&(-=sq*mO#k4@mO#IV.%u.j(+$' $' 5,+jM#$' SO+ X+qK+-x#x{ u]#u]#d #d #d #';$';$u]#d #';$';$';$';$", "hY.X)@G6.VW.Hu+8v.9, 9, 9, 9, 9, 9, 9, 9, 9, x5.x5.x5.x5.x5.x5.x5.x5.Vh.Vh.Vh.Vh.Vh.x5.O7.xX%x5.x5.x5.x5.x5.x5.x5.x5.O7.xX%xX%x5.Vh.dD.is@xX%xX%x5.is@x5.xX%_r+O7.is@is@is@x5.O7.xX%_r+N7.M7.F6.F6. 4n l j.$7F =E u1$%B%aE%4,*QL%%B%u1$u1$u1$u1$u1$u1$u1$GJ%Nt%u1$&E Kv Eu vR@vR@vR@$4@[|@(|@^|@@~ @~ ^|@^|@@~ YA kI@')#')#')#ew /7 (0#(=&ny#h>;g>;Km&`k&}/;bU=QU=}1;cu@^-;2<;$T=|1;!`-7 ;11;21;31;41;AZ-51;61;71;81;.1;91;01;a1;b1;c1;d1;e1;f1;uJ=g1;h1;i1;xJ=j1;k1;l1;E`-m1;CS=&!;h>;_0#F5@nx vy *p@87#f1#f1#B_#')#kI@a~ EN#{M /|@(|@:|@$4@Kv u1$Nt%GJ%u1$u1$u1$u1$Nt%Nt%Nt%Nt%u1$u1$&E Kv Kv Eu vR@vR@$4@<|@[|@:|@_|@/|@^|@]J 2i R&&Z(&=M%%f#(c#(c#(c#=! 7.#4' 4' {1 4' O^#&p n1;N} o1;X;.Yp&p1;v~-+6*.9 8v 1;#q1;r1;s1;t1;u1;,X+M|@n3.t4.p3.w5.:{.T`%A!;A!;A!;Q!;y0.4/*4/*A!;T`%n3.o3.t4.t4.t4.t4.o3.n3.t4.p3.:^+t4.n3.n3.n3.w{@w{@w{@w{@w{@w{@w{@Q+&bQ#o&=o&=b,+j(#j(#j(#j(#<(+sQ@v5.o3.o3.v5.sQ@<(+<(+<(+<(+<(+<(+<(+<(+<(+CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%w{@w{@CI#S`%S`%sX%&r=&r=w{@w{@CI#S`%S`%sX%&r=&r=CI#CI#CI#CI#CI#CI#CI#CI#Q+&w{@w{@w{@CI#CI#S`%S`%):.<(+sQ@sQ@.9.):..9.sQ@<(+<(+<(+.9..9.<(+<(+<(+S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%w{@w{@w{@CI#S`%sX%sX%sX%CI#CI#CI#CI#CI#CI#CI#CI#k]#!Z%S`%CI#CI#S`%tq*Fu+Nc&X`+*Z+Pw%0@@y*$$.@r-@_|*,C+,C+,C+,C+Fu+tq*tq*tq*,C+xr*&s*&s*xr*,C+Fu+5,+5,+5,+5,+5,+5,+5,+5,+5,+5,+jM#mO#k4@k4@k4@k4@0, 0, 0, {h&{h&~h&~h&~h&&, &, &, &, &, &, &, &, <:*<:*<:*<:*<:*<:*<:*-.%<:*#d+#d+#d+#d+#d+#d+!D+zi.';$';$US+US+23+OP*OP*';$';$';$';$';$';$';$S>+lt*aH*aH*aH*aH*aH*aH*aH*Ij=(k=(k=aH*>H*zw*zw*GJ@5,+5,+5,+5,+5,+jM#jM#mO#k4@k4@mO#mO#jM#5,+5,+$' qK+qK+qK+qK+qK+qK+qK+qK+qK+qK+qK+qK+$' $' 5,+5,+SO+SO+qK+qK+$' 5,+5,+jM#qK+qK+qK+qK+qK+qK+qK+qK+m}+m}+^u=o!#=Z+l]#&b=&b=&b==Z+o!#dr=l]#&b=l]#dr=^u=o!#dr==Z+&b=iM#yE#.X+iM#iM#iM#iM#iM#iM#iM#iM#Fu+Fu+,C+,C+uq*uq*xr*xr*xr*Fu+Fu+&s*&s*Fu+Fu+VD@Xw&`E&TO&TO&TO&TO&TO&TO&3]&3]&`E&TO&TO&TO&`E&`E&0, %' %' ~h&>S%=|$2&$x*$u3$X@$~h&~h&>S%~h&0, Av&Be++y&)A&)A&%z&%z& ==3P +y&+y&+y&.y&.y&%z&%z&kt*,0+IV.j(+k4@j(+k(+mO#1<#$' jM#jM#5,+SO+ X+SO+~~@$.@:{+u]#u]#d #d #';$';$d #';$';$';$';$';$", "hY.X)@G6.VW.Hu+8v.9, 9, 9, 9, 9, 9, 9, 9, 9, x5.x5.x5.x5.x5.x5.x5.x5.Vh.Vh.Vh.Vh.Vh.x5.O7.xX%x5.x5.x5.x5.x5.x5.x5.x5.O7.xX%xX%O7.Vh.Vh.is@O7.N7.xX%O7.O7._r+N7._r+O7.is@is@x5.O7.xX%_r+N7.M7.;g>;7^&NN=Fy@^=&}`-}1;C1;JZ-DQ=X=;D1;E1;F1;G1;H1;I1;J1;BL=K1;L1;M1;N1;sT@O1;P1;Q1;R1;S1;T1;U1;V1;W1;X1;(|;Y1;Z1;`1; 2;.2;9 ;+2;!>;>;;VC&2L=F5@]0#vy vy nx f1#f1#')#')#1f YA %W@4|@(|@:|@$4@Eu u1$Nt%GJ%GJ%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E Kv Eu vR@$4@$4@[|@[|@_|@(|@^|@@~ WA }u Rw#3M#&8 *8 L9 E0 E0 E0 [m %l Vr 7v 7v []#H9 tD&@2;n1;#2;]6 Yp&#]-!1 (7 W:@hh*dW-$2;%2;&2;*2;Hr&Yl@I7.t4.:^+w5.w5.U%+a,+Q!;A!;A!;A!;4/*4/*4/*Q!;k5+t4.t4.t4.t4.o3.n3.n3.h;#o3.:^+:^+t4.v5.n3.v5.Q+&Q+&Q+&Q+&Q+&w{@w{@w{@o&=o&=o&=o&=b,+b,+j(#Q+&n3.n3.h;#h;#h;#h;#n3.n3.<(+<(+<(+<(+<(+<(+<(+<(+CI#CI#CI#CI#CI#CI#CI#CI#sX%sX%sX%sX%sX%sX%sX%sX%CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%w{@w{@CI#S`%S`%sX%&r=&r=w{@w{@CI#S`%S`%sX%&r=&r=CI#CI#CI#CI#CI#CI#CI#CI#Q+&w{@w{@w{@CI#CI#S`%S`%.9.sQ@h;#sQ@.9..9.<(+h;#<(+<(+<(+sQ@sQ@<(+<(+<(+*r=*r=&r=sX%CI#w{@Q+&Q+&S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#CI#S`%sX%&r=&r=&r=w{@w{@w{@w{@w{@w{@w{@w{@vj&PJ*CI#CI#CI#CI#$x+$x+Nc&X`+*Z+Pw%0@@y*$$.@r-@_|*,C+Fu+Fu+Fu+Fu+Fu+,C+xr*&s*=^@wr*wr*&s*xr*uq*jM#jM#jM#jM#jM#jM#jM#jM#5,+5,+5,+jM#jM#mO#k4@IV.%' %' %' >S%>S%~h&~h&~h&&, &, &, &, &, &, &, &, -.%<:*<:*<:*<:*<:*<:*<:*TO&#d+#d+#d+#d+#d+#d+B#@zi.';$US+US+US+23+23+23+';$';$';$';$';$';$';$S>+lt*aH*aH*aH*aH*aH*aH*aH*(k=(k=aH*aH*>H*>H*zw*zw*jM#jM#5,+$' $' 5,+jM#mO#jM#jM#5,+5,+$' qK+qK+SO+SO+SO+SO+SO+qK+qK+qK+qK+5,+5,+5,+5,+$' $' qK+qK+SO+qK+qK+$' 5,+5,+jM#jM#SO+SO+qK+$' jM#mO#k4@k4@m}+m}+^u=o!#=Z+l]#&b=&b=l]#dr=o!#=Z+&b=iM#&b==Z+xE#m}+^u=dr==Z+&b=iM#yE#l]#l]#l]#l]#l]#l]#l]#l]#,C+,C+uq*uq*uq*uq*xr*xr*xr*Fu+Fu+&s*&s*Fu+Fu+VD@+y&TO&TO&TO&TO&TO&`E&`E&#u%O4%`E&#d+<:*<:*<:*<:*ZQ.{h&~h&0, ~h&x*$x*$>S%x*$%' ~h&{h&~h&~h&0, ZQ.Xw&.y&)A&%z&.y&.y& ==3P +y&+y&+y&.y&.y&%z&%z&kt*u.@j(+j(+mO#mO#k4@SO+j4@$' jM#mO#jM#qK+SO+SO+o)@nh.d #d #d #d #d #d #d #US+';$';$';$';$';$", "G6.hY.G6.VW.8v.VW.G6.G6.9, 9, VW.VW.9, 9, G6.x5.x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@x5.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.xX%_r+xX%is@Vh.is@x5.N7.xX%x5.O7._r+N7._r+O7.is@is@x5.x5.O7.xX%xX%_r+#k.2;,2;'2;}(-]_$/e (,@c~ bj&}U$BU=Lj&JB=8f-%=+i:*k:*/o /m 4' `3 d2 /e 4n l 2k @, ds }g Kv b|$/$&QL%%B%u1$u1$u1$u1$u1$u1$u1$u1$u1$u1$&E &E Kv Kv Eu vR@$4@:|@_|@(|@^|@a~ B_#')#')#kI@kI@kI@')#QT@QT@k[#zn#Xm@Xm@Pv#h>;{W=DV='~;z-&JY-}1;C1;K.;V=;+)&)2;!2;~2;{2;]2;^2;/2;(2;_2;:2;<2;[2;}2;|2;12;22;32;42;x5@52;62;72;82;92;02;a2;b2;c2;IO=d2;e2;1.;JY%VC&2L=_0#^0#mx *p@mx ew ew kI@1f YA @~ 3|@2|@_|@[|@vR@&E Nt%GJ%Nt%Nt%Nt%u1$u1$u1$&E &E &E &E &E &E Kv Kv Eu vR@$4@$4@_|@(|@^|@WA YA a~ a~ 8v 4!#&8 Y8 f2;E0 E0 E0 E0 &l ua 7v e5 []##)#i2&en=;T%;`=]6 C';Rq=)G G0 ;! UE@(i*g2;w/;WN.W!;UF+Hr&ws&n4@D6.:^+p3.p3.U%+:{.Q!;Q!;A!;[d.wc.4/*y0.Q!;a,+D6.D6.t4.t4.v5.n3.h;#h;#v5.D6.t4.v5.n3.n3.o3.b,+b,+j(#j(#j(#Q+&Q+&Q+&j(#b,+b,+o&=b,+j(#Q+&w{@v5.n3.h;#sQ@sQ@h;#n3.v5.h;#h;#sQ@sQ@sQ@<(+<(+<(+CI#CI#CI#CI#CI#CI#CI#CI#&r=&r=&r=&r=&r=&r=&r=&r=CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#S`%S`%S`%S`%sX%sX%&r=&r=sX%S`%S`%CI#w{@w{@CI#CI#CI#CI#CI#CI#CI#CI#w{@w{@CI#CI#S`%S`%S`%sX%.9.sQ@h;#h;#<(+.9.<(+h;#<(+<(+sQ@h;#h;#sQ@<(+<(+*r=*r=&r=sX%CI#w{@Q+&Q+&S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%sX%sX%CI#CI#CI#CI#CI#CI#CI#CI#~Z%~Z%CI#CI#S`%S`%$x+$x+X`+X`+ME+*Z+y*$c> $.@jk@_|*Fu+Fu+Fu+Fu+uq*xr*&s*+v=+v=wr*wr*=^@=^@=^@=^@jM#jM#jM#jM#jM#jM#jM#jM#5,+5,+$' $' $' 5,+jM#u.@x*$X@$X@$%' >S%~h&{h&{h&&, &, &, &, &, &, &, &, M]*M]*M]*-.%-.%<:*<:*<:*TO&#d+#d+<:*<:*#d+#d+B#@17*23+23+23+23+23+23+23+US+US+US+US+US+US+US+US+lt*aH*aH*aH*aH*aH*aH*aH*>H*>H*>H*>H*>H*>H*>H*>H*k4@mO#5,+qK+SO+qK+$' 5,+$' $' $' qK+qK+qK+qK+SO+SO+SO+SO+qK+qK+qK+$' $' jM#jM#jM#jM#5,+$' SO+ X+qK+qK+$' $' $' $' 5,+5,+qK+qK+$' 5,+mO#k4@IV.IV.^u=^u=o!#dr=dr==Z+l]#l]#l]#=Z+dr=l]#iM#iM#l]#dr==Z+=Z+=Z+dr=dr=o!#o!#^u=dr=dr=dr=dr=dr=dr=dr=dr=uq*uq*uq*uq*uq*xr*xr*xr*xr*Fu+Fu+&s*&s*Fu+Fu+VD@.y&#d+TO&TO&TO&`E&`E&`E&`E&`E&TO&#d+<:*M]*/p./p.Bv&0, ~h&&, 0, %' >S%0, %' ~h&0, 0, {h&{h&&, ZQ..==3P .==)A&+y&Be++y&%z&.y&.y&.y&.y&%z&%z&)A&(-=u.@IV.k4@$' $' 5,+ X+FI#$' jM#k4@k4@5,+$' $' xu#17*23+US+US+';$d #d #u]#23+US+';$';$';$';$", "9, G6.G6.VW.VW.9, hY.hY.G6.VW.8v.8v.VW.G6.hY.x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%O7.x5.x5.x5.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.is@O7._r+xX%x5.Vh.is@x5.O7.x5.Vh.is@O7.xX%x5.is@is@is@is@x5.x5.x5.x5.x5.#k.;F5@_0#07#87#nx nx xy xy 1f YA @~ /|@1|@||@_|@[|@vR@&E Nt%Nt%Nt%u1$Nt%u1$u1$u1$&E Kv Kv Kv *E *E }g -E -! tG tG sG X:@+~ Y:@]|@/d@/d@/d@;8 4!#&8 *8 f2;E0 E0 E0 E0 O,#&l vb :u #D=Io=P2;[x=uH&Q2;f~ 8C&1^#va c2 A_#wj&X_;~$+,X+r4.U'#ot+J{+Ev+J7.D6.t4.o3.o3.a,+:{._{.Q!;A!;[d.wc.4/*y0._{.e{+o3.t4.t4.t4.o3.v5.v5.h;#v5.v5.n3.sQ@sQ@n3.t4.bQ#bQ#o&=o&=b,+b,+j(#j(#Q+&j(#b,+b,+b,+Q+&w{@S`%h;#h;#n3.n3.n3.n3.h;#h;#n3.n3.n3.h;#sQ@sQ@sQ@<(+S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%S`%S`%S`%S`%CI#CI#&r=&r=sX%S`%S`%CI#w{@w{@sX%sX%sX%sX%sX%sX%sX%sX%CI#S`%S`%S`%sX%sX%&r=&r=<(+sQ@n3.h;#<(+.9.sQ@n3..9.<(+h;#n3.n3.h;#<(+.9.S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%PJ*PJ*S`%sX%&r=&r=Fu+Fu+*Z+ME+X`+X`+$.@$.@c> KL$u{@Fu+Fu+Fu+,C+&s*wr*+v=&u.#x+wr*&s*xr*&s*wr*+v=,0+,0+,0+,0+,0+,0+,0+,0+,0+>0+mh.Nc&Nc&mh.sq*>0+~h&~h&~h&~h&{h&{h&{h&{h&&, &, &, &, &, &, &, &, -~@-~@-~@;n.;n.>n.>n.>n.B#@`b&!D+>n.>n.!D+`b&B#@xE*OP*OP*OP*OP*OP*OP*OP*23+23+23+23+23+23+23+23+lt*lt*lt*lt*lt*lt*lt*lt*x}*x}*x}*S>+pK+FG*lt*lt*IV.mO#$' SO+1<# X+SO+qK+qK+qK+$' $' $' $' 5,+5,+SO+SO+qK+qK+$' $' 5,+5,+$' 5,+jM#mO#jM#5,+$' qK+$' $' $' qK+qK+qK+qK+qK+jM#jM#5,+5,+5,+5,+5,+5,+dr=dr=dr=dr=dr=dr=dr=dr=&b=l]#=Z+&b=yE#iM#l]#o!#iM#iM#&b=l]#dr=o!#^u=^u=o!#o!#o!#o!#o!#o!#o!#o!#xr*xr*xr*xr*xr*xr*xr*xr*xr*Fu+Fu+&s*&s*Fu+Fu+VD@.y&.y&.y&+y&Xw&Xw&Xw&Be+3P .==)A&%z&%z&)A& ==.==Bv&{h&~h&0, 0, >S%~h&ZQ.{h&&, Av&Av&0, {h&&, ZQ.ZQ.ZQ.Av&{h&%' X@$%' {h&{h&{h&{h&0, 0, 0, &, u.@>0+mO#5,+ X+SO+jM#qK+zM+qK+jM#IV.IV.k4@jM#jM#7' xE*23+23+23+US+US+US+US+OP*23+';$d #d #';$", "VW.G6.G6.VW.VW.G6.X)@hY.G6.VW.8v.8v.VW.G6.hY.x5.x5.x5.x5.x5.x5.x5.x5.N7.N7.xX%O7.x5.x5.x5.O7.x5.x5.x5.x5.x5.x5.x5.x5.is@O7._r+xX%x5.Vh.is@x5.is@dD.%j.dD.is@x5.Vh.%j.x5.is@is@is@is@is@Vh.Vh.#k. /,@PH$o5*U2;V2;X7*^ $i$#[!-Tr $:*vn-py=I~#8>#g$#{0@Ri 8> /e O1 5, e{@X:@:|@>8@q<$&E &E &E &E &E &E &E &E Kv Kv Kv Kv Kv Eu Eu Eu [|@:|@:|@[|@:|@^|@QT@8.#h@#XC@QT@kI@1f ')#!)#w! b4#.i#.i#.i#)m#!m#xd#09&%#;|6&3;,3;!B='3;)3;!3;~3;Y-+o=q[ ZA Sr Q@$0C=Ze@~T $Z*Fn= 9.pt+gP.r4.J7.J7.t4.v5.h;#h;#e{+a,+_{.Q!;A!;4|;j9.4/*y0._{.~Z%n3.v5.t4.t4.D6.t4.t4.n3.n3.n3.sQ@.9.<(+n3.D6.+9.+9.bQ#bQ#o&=b,+b,+b,+w{@Q+&j(#j(#j(#w{@CI#sX%.9.sQ@v5.t4.t4.v5.sQ@.9.v5.v5.v5.n3.h;#h;#sQ@sQ@S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%&r=&r=sX%S`%S`%CI#w{@w{@w{@w{@CI#S`%S`%sX%&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%S`%S`%sX%sX%&r=&r=&r=*r=<(+h;#n3.h;#<(+.9.sQ@n3..9.<(+h;#n3.n3.h;#<(+.9.j(#Q+&w{@CI#sX%&r=*r=uG#S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#CI#w{@Q+&Q+&j(#j(#S`%S`%S`%S`%S`%S`%S`%S`%vj&!Z%&r=*r=uG#uG#,C+,C+Pw%*Z+X`+Nc&x{ $.@y*$A<$u{@Fu+Fu+Fu+uq*=^@#x+&u.'0+lh.=^@uq*,C+xr*wr*#x+,0+,0+,0+,0+,0+,0+,0+,0+,0+>0+mh.X`+X`+X`+Nc&mh.ZQ.Av&Av&&, 0, {h&{h&~h&&, &, &, &, &, &, &, &, ]*=}m.}m.-~@;n.;n.>n.>n.`b&!D+>n.;n.;n.>n.!D+/{ x{+x{+x{+x{+x{+x{+OP*OP*OP*OP*OP*OP*OP*OP*OP*OP*lt*lt*lt*lt*lt*lt*lt*lt*q)@q(#9&+x}*pK+FG*lt*lt*j(+k4@$' X+_($_($1<# X+qK+$' $' 5,+jM#jM#mO#mO#SO+qK+qK+$' $' 5,+jM#jM# X+qK+5,+mO#mO#mO#jM#5,+$' $' $' qK+SO+SO+ X+ X+k4@mO#jM#5,+qK+SO+ X+1<#=Z+=Z+dr=dr=dr=dr=o!#o!#&b=&b=l]#iM#yE#iM#=Z+^u=l]#l]#l]#l]#&b=&b=&b=&b=dr=dr=dr=dr=dr=dr=dr=dr=xr*xr*xr*xr*xr*xr*xr*uq*xr*Fu+Fu+&s*&s*Fu+Fu+xr*VD@.y&.y&+y&Xw&Xw&Be+Be+nk._b+3P %z&.y&.y&)A& ==Av&~h&>S%{h&{h&>S%{h&ZQ.&, ZQ.Bv&ZQ.&, 0, &, ZQ.{h&0, 0, ~h&>S%>S%0, ZQ.{h&0, 0, 0, &, &, Av&yi.sq*5,+qK+1<#SO+mO#mO#qK+qK+jM#IV.j(+IV.k4@k4@ZQ+17*23+23+23+OP*OP*OP*OP*OP*23+';$d #d #';$", "Hu+8v.VW.G6.hY.X)@X)@hY.G6.VW.8v.8v.VW.G6.hY.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.is@x5.O7.O7.O7.O7.x5.is@Vh.xX%%0+N7.is@dD.O7.M7.M7.O7.is@is@xX%N7.xX%x5.x5.x5.x5.x5.x5.x5.x5.x5.[{.[{.[{.[{.[{.[{.[{.[{.#k.#k.#k.#Pj '3 => $2@3n /1 Xr t! @~ J~ ;8@<|@$4@Kv u1$Nt%Nt%Nt%u1$Kv Kv Kv Kv Kv Kv Kv Kv :|@YA a~ (|@$4@_|@a~ kI@')#QT@!)#QT@')#')#!)#w! /d@+L@|c#|c#6q# t#Dk&Q8#CV=Ix=.&;dY-<3;<_;[3;o=;}3;|3;13;23;33;43;53;63;73;83;93;03;a3;b3;c3;d3;e3;f3;g3;C@.h3;QC&i3;j3;k3;rz&3<;2Z-y[&l3;u-&m3;[I&K>;-k&=g&87#nx *p@vy G5@G5@YA YA @~ /|@}|@||@vR@Eu Eu Kv u1$Nt%Nt%GJ%u1$&E &E Kv Eu Eu vR@vR@i0$cs ;E uG uG hB e{@_t e{@_t VH (,@/,@+' 36 26 |m 0t@n3;o3;D0 a4#p3;So#Pk#T=#8u-HX-no=+';q3;su*r3;n_;G> 0> [} Tk d:*/i*eO@p!#<(+h;#:{.-1.62.o3.n4@g6@v5.o3.D6.:^+:{.k5+4|;[d.[d.A!;y0.y0.#*&_{.:{.D6.D6.t4.t4.t4.t4.t4.t4.v5.n3.n3.v5.o3.n3.sQ@Q+&j(#o&=bQ#bQ#o&=j(#Q+&j(#w{@S`%CI#w{@w{@S`%&r=h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#n3.n3.n3.n3.*r=&r=sX%S`%w{@Q+&j(#b,+j(#j(#j(#j(#j(#j(#j(#j(#S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%&r=&r=sX%S`%w{@j(#w{@&r=*r=S`%o&=bQ#Q+&*r=sX%S`%S`%CI#w{@w{@Q+&Q+&uG#*r=*r=&r=sX%S`%CI#CI#*r=*r=uG#uG#*r=S`%Q+&j(#.9.<(+<(+sQ@h;#h;#n3.n3.sQ@sQ@h;#h;#n3.n3.n3.v5.S`%S`%S`%S`%S`%S`%S`%S`%Q+&w{@w{@CI#sX%&r=&r=*r=w{@CI#S`%sX%&r=*r=uG#uG#CI#CI#CI#CI#CI#CI#CI#CI#!Z%vj&CI#w{@w{@S`%Fu+,C+Nc&Nc&Nc&mh.nh.zi.zi.wE*VD@xr*xr*&s*&s*=^@=^@wr*=^@+v=+v=wr*lh.-$@#x+,C+,0+ZQ.Bv&Av&{h&>S%{h&&, {h&{h&{h&{h&{h&>S%%' X@$0, 0, 0, {h&{h&{h&{h&{h&Bv&&, {h&&, B9.8P.Av&~h&|m./{ /{ Bj.h~ h~ S%0, ZQ.ZQ.&, 0, {h&0, xE*17*J> zi.nh.zi.17*xE*3<@1.+`%@..=17*zi.zi.k#@,0+$' qK+$' jM#k4@mO#5,+5,+5,+5,+jM#mO#k4@k4@vE*xE*US+';$';$23+OP*US+';$';$US+23+OP*x{+x{+", "8v.8v.VW.9, 9, G6.G6.hY.G6.VW.8v.8v.VW.G6.hY.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.O7.x5.is@is@dD.xX%M7._r+is@dD.x5.N7.N7.O7.Vh.is@O7._r+xX%x5.x5.x5.x5.x5.x5.x5.x5.x5.[{.[{.[{.[{.[{.[{.[{.[{.F6.F6.F6.8'%8'%8'%8'%[{.x5.x5.x5.x5.O7.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+N7.N7.xX%x5.x5._r+%0+`d#2P J].ye#ye#J].2P `d#~(.`d#J].2P `d#`d#J].s[.w7+%0+N7.xX%xX%N7.%0+@9.%0+%0+M7.N7.N7._r+xX%xX%v4.v4.v4.v4.v4.v4.v4.v4.0q.<3+v4.v4.v4.v4.<3+0q.M7.M7.M7.M7.M7.M7.M7.M7._r+N7.N7.N7.M7.%0+%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.@9.@9.$B#$B#%0+%0+M7.M7.<3+<3+<3+0q.0q.q3.q3.q3.<3+<3+<3+0q.0q.q3.q3.q3.$B#%0+%0+M7.M7.%0+%0+$B#%0+$B#@9.@9.@9.%0+M7.N7.N7.M7.%0+$B#@9.$B#%0+M7.$B#$B#$B#$B#$B#$B#$B#$B#@9.$B#%0+M7.M7.%0+$B#@9.%0+%0+$B#$B#$B#$B#%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#N7._r+_r+%0+)Z%'Z%'Z%,X@0q.0q.0q.0q.q3.,H.:(+bp.:(+,H.q3.0q.0q.q3.,H.:(++9.,H.<3+,H.bQ#o&=:(+v4.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+bp.bp.,H.:(+:(+bp.bp.:(+:(+,H.,X@,X@,X@)Z%)Z%)Z%eO@eO@)Z%)Z%)Z%)Z%)Z%,X@,X@,X@p3.p3.p3.w5.w5.u4.u4.u4.w5.w5.w5.w5.w5.w5.w5.w5.+9.+9.+9.+9.+9.+9.+9.+9.o&=+9.bp.bp.bQ#o&=bQ#bp.:(+:(+:(+:(+:(+:(+:(+:(+0q.q3.,H.bp.bp.bp.bp.bp.p3.p3.p3.w5.w5.u4.u4.u4.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.:^+p3.w5.u4.u4.w5.p3.:^+,H.,H.@9.$B#$y#$y#$y#l5+GY*n2.Wh@31.RK.c1&S<+it=s3;t3;u3;v3;PY+uI@/d@:r@;k&BU=CU=xR$zK B_#O~#[n sk-Sv*g{;H~#qI-I,;]e mj#'3 Ri f2 /,@ 9 ')#jt@XA :|@[|@$4@Eu Kv Kv Kv Eu Kv Kv Kv Kv Kv Kv Kv Kv _|@YA a~ _|@vR@[|@^|@WA YA 1f ')#')#')#B_#))#XC@uR@b.#UE@I,#bj# t#GL#Q8#=k*Ck&!;;'$&1Y-w3;zL&RT=N@;x3;y3;/|;z3;A3;B3;C3;D3;E3;oG=F3;G3;H3;I3;J3;K3;T6& M@L3;M3;Rz=6O=N3;A-;O3;d<&E&&]=&bU=F/;)~;>T%K>;-k&=g&87#nx *p@vy G5@G5@WA WA ^|@(|@||@dP@vR@Eu Kv Kv u1$u1$Nt%GJ%u1$u1$&E Kv Kv Eu vR@-! *E xt uG hB hB UH qG y, Xr fw (,@/,@+' +' n| [m QW@P3;o3;Q3;So#MU@}]#R3;S%~h&0, ~h&~h&{h&{h&{h&~h&>S%>S%{h&{h&{h&{h&{h&{h&{h&{h&0, &, Av&&, 0, 0, &, Av&Bj.Bj.Bj.h~ h~ J> nh.nh.nh.zi.17*xE*xE*U*@..=U*@J> nh.zi.4,+,0+$' qK+$' jM#k4@mO#5,+$' $' $' $' $' 5,+5,+xu#17*';$d #';$23+OP*23+';$';$US+23+OP*x{+OP*", "8v.8v.8v.8v.8v.VW.VW.G6.9, 9, VW.VW.9, 9, G6.x5.x5.x5.x5.x5.x5.x5.x5.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.O7.O7.xX%xX%O7.x5.Vh.Vh.dD.x5._r+xX%Vh.%j.is@xX%xX%x5.Vh.Vh.x5.O7.x5.is@x5.x5.x5.x5.x5.x5.x5.x5.8'%8'%8'%8'%8'%8'%8'%8'%[{.[{.[{.[{.8'%8'%8'%8'%xX%O7.O7.O7.O7.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+xX%N7.N7._r+O7.O7._r+M7.^q%`d#2P 2P 2P 2P `d#^q%~(.`d#J].J].`d#`d#2P 91+|5+%0+N7._r+_r+N7.%0+$B#N7.N7.N7.N7.N7.N7.N7.N7.v4.v4.v4.v4.v4.v4.v4.v4.q3.0q.<3+<3+<3+<3+0q.q3.%0+%0+%0+%0+%0+%0+%0+%0+M7.M7.M7.%0+%0+%0+$B#$B#M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.$B#$B#$B#$B#%0+%0+%0+%0+0q.0q.0q.q3.q3.,H.,H.,H.0q.0q.0q.q3.q3.,H.,H.,H.%0+$B#$B#@9.@9.$B#$B#%0+$B#$B#@9.@9.$B#%0+M7.N7.$B#$B#@9.@9.@9.$B#%0+M7.$B#$B#$B#$B#$B#$B#$B#$B#@9.$B#%0+M7.M7.%0+$B#@9.%0+%0+$B#$B#$B#$B#%0+%0+@9.@9.@9.@9.@9.@9.@9.@9.M7.N7.N7.%0+)Z%'Z%'Z%,X@0q.0q.0q.0q.0q.0q.0q.0q.:(+,H.q3.q3.q3.q3.,H.:(+bp.q3.<3+,H.+9.bQ#:(+<3+,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.,H.,H.:(+:(+:(+bp.,H.:(+:(+bp.bp.:(+:(+,H.,X@,X@,X@)Z%)Z%)Z%eO@eO@'Z%'Z%,X@,X@,X@,X@)Z%)Z%p3.p3.p3.w5.w5.u4.u4.u4.w5.w5.w5.w5.w5.w5.w5.w5.+9.+9.+9.+9.+9.+9.+9.+9.bQ#+9.:(+bp.bQ#o&=+9.:(+:(+:(+:(+:(+:(+:(+:(+:(+v4.0q.q3.:(++9.+9.bQ#bQ#p3.p3.p3.w5.w5.u4.u4.u4.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.u4.N7+N7+u4.w5.w5.@9.@9.@9.@9.@9.eO@y}*y}*b #B2*$y#4B&Ie+6;@6;@Zo=T3;U3;V3;.L@D; !(;-> o| /,@]|@a~ kI@a~ WA ')#[`@^m C[*b}*W3;z0@$n=hk&Pn=)3 $2@:m fw ;! YA J~ ;8@^|@/|@_|@[|@$4@vR@vR@vR@Kv Kv Kv Kv Kv Kv Kv Kv :|@WA WA [|@Eu $4@_|@(|@/|@WA a~ 1f 1f B_#))#{Y@(d Y=#j$#UE@{Y@vg#Ad#b3&mg&pv=$w=H`-1Y-MY-;,;f<;w#;X3;Y3;Z3;`3; 4;.4;+4;j&;@4;jJ@#4;b+;$4;l4@%4;&4;/E=hK.#(. @@*4;=L==4;-L=Lu=ff&5/;z-&MY%Nl&U#;>T%K>;7~%=g&87#mx *p@vy G5@G5@@~ ^|@(|@[|@dP@R5@Eu Eu Kv &E &E u1$Nt%Nt%Nt%Nt%u1$&E Kv Eu vR@-! -E ;E UH Yr Yr e{@Xr fw y, VH /,@+' +' 7, ,p B4 a4#-4;;4;CP#[6 >4;,4;'4;)4;!4;+p-h,;mX-mX-~7& U#r4 $2@E> 6J@Wh-~4;Hf.!G=@9.'Z%j(#7&+B<+3W+b}+NR*D6.g6@v5.v5.t4.D6.a,+e{+[d.[d.[d.[d.j9.j9.j9.4|;T`%n3.n3.v5.o3.t4.t4.t4.t4.v5.n3.n3.v5.o3.n3.sQ@b,+b,+j(#j(#j(#j(#b,+b,+j(#w{@CI#w{@j(#b,+j(#w{@v5.v5.v5.v5.v5.v5.v5.v5.n3.h;#h;#sQ@<(+<(+.9..9.j(#Q+&w{@CI#S`%sX%&r=&r=CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%w{@CI#S`%sX%sX%sX%S`%S`%S`%&r=uG#&r=Q+&j(#CI#*r=S`%S`%S`%S`%sX%sX%sX%sX%Q+&Q+&w{@CI#S`%sX%&r=&r=sX%S`%CI#CI#CI#CI#S`%S`%<(+<(+<(+<(+.9..9..9..9.n.;n.>n.`b&B#@`b&!D+B#@`b&!D+!D+>n.!D+!D+`b&{h&{h&{h&{h&{h&{h&{h&0, ~h&Av&ZQ.0, %' X@$0, B9.h~ 7P.7P.oh.oh.y4&y4&y4&oh.oh.oh.oh.oh.oh.oh.oh.x{+x{+OP*OP*23+23+US+US+US+OP*OP*23+';$';$23+x{+G|@7P.y4&oh.Kh+G|@G|@Kh+o{+w5&]@+iS.y4&oh.7P.US+sq*$' 5,+5,+5,+5,+5,+5,+qK+qK+qK+qK+qK+qK+qK+qK+mO#mO#mO#mO#jM#jM#jM#jM#jM#jM#jM#jM#jM#jM#jM#jM#$' $' qK+SO+SO+ X+1<#1<#SO+SO+SO+qK+qK+qK+$' $' l]#l]#l]#l]#&b=&b=&b=&b=l]#l]#l]#l]#l]#l]#l]#l]#yE#yE#&b=l]#l]#=Z+l]#l]#l]#=Z+o!#^u=o!#dr=l]#&b=uq*xr*xr*&s*&s*xr*xr*uq*wr*=^@xr*,C+Fu+Fu+tq*Fu+xr*xr*uq*uq*uq*xr*&s*=^@uq*uq*uq*uq*,C+,C+Fu+u{@>S%~h&~h&~h&{h&{h&0, 0, {h&Av&Bv&Bv&Av&0, &, Av&nh.u]#u]#u]#d #';$US+23+u]#';$US+US+d #u]#d #4,+,0+$' qK+$' jM#k4@mO#5,+qK+qK+SO+SO+SO+SO+ X+[I+zi.d #u]#d #23+OP*23+US+d #';$US+23+23+23+", "8v.8v.8v.Hu+Hu+Hu+Hu+9, 9, 9, 9, 9, 9, 9, 9, x5.x5.x5.x5.x5.x5.x5.x5.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.O7.xX%xX%xX%O7.is@Vh.dD.dD.is@O7.x5.Vh.dD.Vh.O7.x5.is@Vh.Vh.Vh.is@is@is@x5.x5.x5.x5.x5.x5.x5.x5.8'%8'%8'%8'%8'%8'%8'%8'%[{.[{.[{.8'%F6.<;#~;]4;g,-86+)3 r4 /1 _,@Y:@(|@J~ kI@VH @p-jt*ej.^4;=Y=gn=0h tb r4 vo x, fw W:@/|@;8@a~ YA ^|@(|@[|@vR@Eu Kv Kv Kv Kv Kv Kv Kv Kv Kv $4@(|@(|@$4@Kv $4@:|@:|@(|@^|@WA YA a~ kI@QT@w! !1 (d Cv@b.#{Y@h@#FL#d5&F>*+I=J(;/4;1Y-eY-k,;(4;_4;:4;<4;[4;}4;|4;14;24;34;44;54;64;wH=74;Mh@84;hK.94;mL .q@bD=04;b>; C=+-;ff&lp&.u=B-&Nl&GY-E-&K>;-k&2L=_0#]0#*p@vy @p@G5@=p@^|@(|@[|@$4@(0@E'$Eu Kv Kv &E &E u1$u1$Nt%GJ%Nt%u1$&E Kv vR@$4@tG uG UH qG qG qG Xr y, _,@_,@(,@+' 7, 7, 36 :} ua p3;CP#%|#a4;>4;,4;P,#b4;c4;h~;B,;,';E[*6o= U#qa #2@r) kj#0X-y[*Wh@,S#+5-eO@bQ#zI*aR#b}+3W+b}+NR*p3.n4@t4.t4.:^+:^+a,+e{+A!;[d.[d.4|;z#@z#@5/*,^@PJ*sQ@h;#n3.v5.o3.t4.D6.t4.v5.n3.n3.v5.o3.n3.sQ@o&=b,+Q+&w{@w{@Q+&b,+o&=Q+&w{@CI#w{@b,+bQ#o&=j(#v5.v5.v5.v5.v5.v5.v5.v5.n3.n3.h;#sQ@.9.):. $.@$.@jk@ps+Fu+xr*&s*=^@&s*uq*,C+xr*=^@xr*$x+tq*&s*=^@z9.~h&`b&!D+`b&`b&B#@`b&`b&{y%B#@`b&>n.>n.>n.>n.>n.~h&{h&{h&{h&{h&0, 0, 0, 0, &, 0, >S%X@$%' 0, 3<@#mX-C8-^4;MC-(<-DX%%8@x' (1 ,p O9 kI@')#kI@1f WA /|@[|@Eu u1$GJ%Kv Kv Kv Kv Kv Kv Kv Kv u1$$4@<|@Eu Eu [|@_|@:|@/|@@~ YA YA WA YA ')#!)#)1 WH z&#WC@XC@ p@ij#d5&wz&F>*/4;[L=h4;KZ-NY-oR=i4;j4;k4;l4;m4;n4;o4;p4;q4;r4;s4;t4;u4;)$;v4;;P.w4;x4;y4;qE=z4;A4;B4;C4;<*;(y=H7&v=;{/;&)&'6#=3#7~%2L=_0#kf&mx @p@Iz ]Q#1r@W~#_|@[|@$4@Eu E'$E'$Kv Kv &E &E &E &E u1$u1$Nt%Nt%u1$Kv Eu $4@<|@rG Yr 2k 5, x, 5, x, /1 N1 ^1 F> ]1 ]1 (1 *! 7v 8J@}]#sj#$9#D4;E4;P,#F4;G4;H4;RZ-yX-Jg g5 uI@xu :f h5 I4;E~;J4;ng 1B&5;@{q%,X@bQ#aR#NR*7*;1J=5U+B<+u4.%U*D6.:^+p3.p3.:{.k5+A!;[d.[d.4|;z#@z#@5/*,^@PJ*sQ@h;#n3.v5.o3.t4.D6.t4.v5.n3.n3.v5.o3.n3.sQ@o&=j(#Q+&CI#CI#Q+&j(#o&=Q+&w{@CI#w{@b,+bQ#o&=j(#v5.v5.v5.v5.v5.v5.v5.v5.n3.n3.h;#sQ@.9.):. $.@$.@jk@lx@Fu+,C+xr*xr*xr*uq*,C+&s*wr*=^@Fu+Fu+&s*wr*(-=~h&`b&B#@`b&`b&!D+`b&`b&B#@`b&!D+>n.;n.;n.;n.>n.~h&~h&~h&{h&0, 0, &, &, Bv&0, %' X@$>S%0, &, 17*=~@y4&y4&y4&y4&y4&y4&oh.oh.oh.oh.oh.oh.oh.oh.oh.x{+x{+OP*OP*23+23+US+US+';$23+x{+OP*US+';$US+OP*7P.Kh+G|@T_+T_+T_+$(+$(+G|@G|@Kh+Kh+7P.7P.oh.OP*Nc&qK+qK+$' $' 5,+5,+5,+$' $' $' $' $' $' $' $' jM#jM#jM#5,+$' qK+qK+qK+mO#mO#mO#mO#mO#mO#mO#mO#jM#jM#jM#5,+5,+5,+$' $' qK+qK+qK+qK+qK+qK+SO+SO+o!#o!#o!#dr==Z+l]#l]#l]#&b=&b=&b=&b=&b=&b=&b=&b=o!#m}+XT#fX.XT#o!#l]#yE#&b=&b=l]#=Z+l]#iM#.X+/W%xr*xr*xr*uq*uq*xr*xr*xr*tq*tq*Fu+uq*xr*xr*&s*&s*xr*xr*xr*xr*xr*xr*xr*uq*,C+Fu+tq*$x+$x+$x+$x+tq*{h&{h&{h&0, 0, 0, &, &, u3$X@$%' X@$u3$=|$x*$x{ $.@:{+u]#d #d #';$';$';$M8@v]#u]#u]#:{+:{+d #pK+,0+$' qK+$' jM#k4@mO#5,+5,+5,+5,+$' qK+SO+SO+q,@zi.u]#:{+u]#US+23+US+';$M8@h]@v]#:{+u]#:{+", "8v.8v.8v.8v.8v.VW.VW.VW.9, 9, G6.G6.9, 9, VW.x5.x5.x5.x5.x5.x5.x5.x5.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.is@x5.O7.O7.O7.O7.x5.is@x5.x5.x5.x5.x5.x5.x5.x5.is@x5.O7.x5.Vh.Vh.x5.xX%x5.x5.x5.x5.x5.x5.x5.x5.F6.F6.F6.F6.F6.F6.F6.F6.#k.#k.#k.#k.v4.v4.v4.v4._r+_r+_r+xX%xX%xX%xX%O7.xX%xX%xX%xX%xX%xX%xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+x5._r+M7.M7._r+O7.xX%PI.2P 6e.x3&M/.M/.x3&6e.6e.x3&/0.o2$/0.x3&<].x3&2P PI._r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.v4.v4.v4.v4.v4.v4.v4.v4.q3.0q.<3+<3+<3+<3+0q.q3.%0+%0+%0+%0+%0+%0+%0+%0+$B#$B#%0+%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+%0+$B#$B#$B#$B#0q.0q.0q.q3.q3.,H.,H.,H.,H.,H.,H.q3.q3.0q.0q.0q.%0+$B#$B#@9.@9.$B#$B#%0+eO@@9.$B#%0+M7.M7.%0+%0+eO@@9.$B#%0+%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#@9.$B#%0+M7.M7.%0+$B#@9.eO@$B#%0+N7.N7.%0+$B#eO@%0+%0+%0+%0+%0+%0+%0+%0+$B#M7.M7.%0+eO@,X@)Z%eO@#k.<3+q3.,H.,H.q3.0q.v4.q3.q3.,H.:(+:(+,H.q3.q3.v4.<3+0q.q3.:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.,H.0q.0q.0q.q3.q3.,H.,H.,H.,H.:(+:(+bp.bp.:(+:(+,H.,X@,X@,X@)Z%)Z%)Z%eO@eO@@9.@9.$B#$B#$B#$B#%0+%0+u4.u4.u4.w5.w5.p3.p3.p3.w5.w5.w5.w5.w5.w5.w5.w5.0q.0q.0q.0q.0q.0q.0q.0q.+9.:(+,H.:(++9.+9.bp.,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+bp.bp.bp.bp.:(+,H.q3.u4.u4.u4.w5.w5.p3.p3.p3.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.w5.N7+u4.w5.w5.w5.w5.u4.K7.@9.^n#^n#^n#@9.eO@eO@eO@,H.:(+q3.#k.u*={S*ns#v4.Wh@FW-G2*h2;_1;K4;L4;M4;`};N4;1G@D0-]1 WA #d&PH$,p :m p7 g5 .p-^4;g,;pI-jl-c5 f2 x' +' y, /|@WA a~ YA WA /|@:|@vR@&E Nt%Kv Kv Kv Kv Kv Kv Kv Kv GJ%Eu vR@Kv vR@_|@(|@:|@/|@@~ YA YA WA YA kI@QT@&8`%KR=;d@NH#Pv#_0#F5@kf&h5%@p@]Q#%p@.n@yK cN@<|@vR@Eu Kv E'$E'$&E &E &E &E &E &E &E &E u1$u1$Kv Eu $4@[|@:|@r[@Xr x, /1 /1 3' 3' N1 o| F> ]1 Q1 *! #, Vr []#*5;=5;-5;;5;>5;,5;K^#'5;)5;!5;RZ-F8-x[-e@##2@:f r) gn=-_;~5;_k=6'%Yo=l5+b #o&=bQ#NR*B<+:1+:1+:1+jX-q3.h|.:^+:^+p3.p3.:{.k5+[d.[d.[d.[d.j9.j9.j9.4|;T`%n3.n3.v5.o3.t4.t4.t4.t4.v5.n3.n3.v5.o3.n3.sQ@j(#Q+&Q+&w{@w{@Q+&Q+&j(#j(#w{@CI#w{@j(#b,+j(#w{@h;#h;#h;#h;#h;#h;#h;#h;#n3.h;#h;#sQ@<(+<(+.9..9.&r=&r=&r=sX%S`%S`%CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#CI#S`%sX%&r=w{@CI#sX%sX%&r=sX%sX%sX%S`%S`%S`%S`%sX%sX%sX%sX%S`%S`%S`%S`%CI#CI#CI#CI#CI#w{@w{@w{@CI#S`%sX%&r=<(+<(+<(+<(+.9..9..9..9.<(+<(+<(+sQ@sQ@h;#h;#h;#S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%sX%sX%&r=&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%!Z%vj&CI#w{@w{@S`%Fu+,C+ME+ME+ME+X`+$.@x{ x{ r-@ps+tq*Fu+Fu+Fu+,C+,C+uq*xr*#x+#x+xr*uq*=^@+v=PB@{h&`b&B#@`b&>n.;n.>n.`b&`b&!D+>n.;n.;n.;n.>n.>n.>S%>S%~h&{h&0, 0, &, &, B9.0, X@$%' 0, ZQ.Av&zi.=~@y4&y4&oh.oh.7P.7P.7P.oh.oh.oh.oh.oh.oh.oh.oh.x{+x{+OP*OP*23+23+US+US+23+x{+HV.HV.[f.OP*x{+[f.oh.Kh+T_+$(+G|@Kh+G|@T_+xc+$(+T_+G|@Kh+7P.oh.x{+mh.qK+qK+$' 5,+jM#mO#mO#5,+5,+5,+5,+5,+5,+5,+5,+5,+$' $' $' $' qK+qK+qK+jM#jM#jM#jM#jM#jM#jM#jM#jM#jM#jM#jM#jM#jM#jM#jM#$' $' qK+qK+qK+SO+SO+SO+o!#o!#o!#dr=dr=dr=dr==Z+l]#l]#l]#l]#l]#l]#l]#l]#=Z+dr=^u=^u=o!#l]#yE#/W%l]#&b=&b=&b=&b=iM#iM#iM#xr*uq*,C+,C+,C+,C+uq*xr*uq*uq*xr*xr*xr*,C+Fu+tq*xr*xr*&s*&s*&s*xr*uq*,C+,C+,C+,C+Fu+Fu+tq*tq*tq*{h&{h&{h&0, 0, &, &, &, >S%~h&{h&>S%X@$X@$~h&17*nh.d #';$US+';$';$d #u]#h]@:{+d #d #u]#:{+d #pK+,0+$' qK+$' jM#k4@mO#5,+jM#5,+5,+5,+5,+$' $' ~~@J> d #u]#u]#';$US+d #u]#h]@h]@:{+u]#u]#u]#", "8v.8v.VW.9, 9, G6.G6.8v.VW.G6.hY.hY.G6.VW.8v.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.dD.Vh.is@O7.xX%xX%xX%O7.O7.O7.x5.x5.O7.O7.O7.x5.x5.xX%_r+O7.is@Vh.O7.N7.x5.x5.x5.x5.x5.x5.x5.x5.F6.F6.F6.F6.F6.F6.F6.F6.v4.#k.#k.#k.#k.S=l5;I_;(-;%#;{W=Ol&LN#KN#!m#vK kf&JO%h5%lt@]Q#.n@7`@+n@v! ST@Eu Kv &E Kv (0@(0@&E &E &E &E &E &E &E &E &E Kv Eu $4@[|@_|@(|@t! y, /1 N1 N1 ^1 ^1 F> ]1 Q1 d2 `3 Vr vb 7J@Bu=+_;'4;m5;n5;o5;H^#p5;q5;r5;;_;9~;Pn=V3 )3 tb sb Ta-Zx-s5;&Y=t5;e-;r^+Yy&!G=j(#b,+m;+8*;`*;`*;7D%[1+:(+J7.t4.t4.t4.t4.e{+~Z%[d.[d.[d.[d.4/*4/*4/*A!;k5+o3.o3.o3.t4.t4.t4.t4.t4.v5.n3.n3.v5.o3.n3.sQ@w{@w{@Q+&j(#j(#Q+&w{@w{@j(#w{@CI#CI#Q+&Q+&w{@S`%sQ@sQ@sQ@sQ@sQ@sQ@sQ@sQ@h;#h;#h;#h;#h;#h;#sQ@sQ@&r=&r=&r=sX%sX%S`%S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%&r=sX%S`%CI#w{@CI#S`%sX%Q+&w{@CI#S`%&r=sX%S`%CI#S`%S`%S`%S`%CI#CI#CI#CI#w{@CI#CI#S`%sX%&r=&r=*r=CI#S`%sX%sX%&r=sX%sX%S`%<(+<(+<(+<(+sQ@sQ@sQ@sQ@<(+<(+<(+sQ@sQ@h;#h;#h;#S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#!Z%vj&CI#w{@w{@S`%Fu+,C+X`+X`+X`+Nc&x{ nh.nh.h^+_|*Fu+$x+)p#$x+tq*uq*xr*,C++v=lh.=^@xr*=^@wr*kt*0, `b&B#@`b&;n.}m.;n.!D+>n.;n.;n.;n.;n.>n.!D+!D+>S%>S%~h&{h&0, &, &, Av&Av&&, 0, 0, &, Av&&, 17*S%>S%~h&~h&{h&{h&0, 0, 0, &, &, 0, ~h&~h&&, ..=J> 23+23+OP*23+';$u]#:{+u]#';$US+US+d #d #';$FG*,0+$' qK+$' jM#k4@mO#5,+$' $' $' 5,+5,+5,+5,+-x#xE*';$u]#u]#';$d #:{+h]@u]#u]#d #US+US+US+", "$9.8v.VW.G6.hY.X)@X)@8v.VW.G6.hY.hY.G6.VW.8v.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.%j.dD.is@O7.xX%_r+_r+_r+xX%O7.O7.O7.xX%xX%xX%O7.x5.xX%N7.xX%is@is@O7.M7.x5.x5.x5.x5.x5.x5.x5.x5.F6.F6.F6.F6.F6.F6.F6.F6.#k.#k.#k.b@r[@/|@+~ @~ +~ /|@X:@Kv }g Kv }g Kv }g Kv Kv Kv $4@<|@Eu $4@:|@[|@Kv [|@(|@@~ WA a~ ')#))#{Y@{Y@+W@`Z ))#{Y@f@#g@#0.#zd#FG=@b&C5;D5;:5;E5;F5;G5;H5;I5;J5;K5;L5;M5;N5;O5;P5;Q5;R5;S5;T5;U5;V5;W5;X5;Y5;Z5;`5; 6;.6;T-;(-;bz&30&/i&.p@g%&07#vy mx *p@vy Iz %p@7`@}A v! ^Y@QC Kv &E &E Kv (0@R5@&E &E &E &E &E &E &E &E Kv Eu vR@<|@:|@X:@^|@W:@fw 7n F> ]t N1 Xy o| P1 #, ua vb PW@7J@h[#u4 5n +6;@6;G4;#6;)5;$6;%6;&6;9$#*6;'3 r4 Oj -> :1-mX-=6;z-=Z];j!;^0+@=@y}*%0+w{@b,+aR#jX-9*;L0.uz.@k.:^+c3+v5.n3.v5.v5.~Z%!Z%e{+k5+[d.A!;Q!;Q!;_{._{.:{.D6.D6.t4.t4.t4.t4.t4.t4.v5.n3.n3.v5.o3.n3.sQ@S`%w{@Q+&b,+b,+Q+&w{@S`%j(#w{@S`%CI#w{@w{@S`%&r=<(+<(+<(+<(+<(+<(+<(+<(+h;#h;#h;#h;#n3.n3.n3.n3.sX%sX%sX%sX%sX%sX%sX%sX%CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%uG#&r=S`%CI#w{@w{@CI#S`%j(#j(#w{@S`%sX%sX%S`%w{@sX%S`%S`%CI#w{@w{@Q+&Q+&j(#Q+&CI#S`%&r=uG#vu#vu#CI#sX%&r=*r=*r=&r=S`%CI#.9.<(+<(+sQ@h;#h;#n3.n3..9..9..9.<(+<(+sQ@sQ@sQ@S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#CI#CI#CI#CI#w{@w{@CI#CI#CI#CI#CI#CI#CI#CI#.9.<(+CI#w{@w{@S`%Fu+,C+SO+SO+Nc&mh.mh.wE*sq*sq*qK+ X+zM+@u%vC#_($qK+5,+_($mO#p2@mO#$' 5,+jM#sq*&, !D+B#@!D+-~@]*=}m.>n.;n.-~@-~@-~@;n.>n.!D+`b&%' >S%~h&{h&0, &, Av&Av&~h&Av&8P.B9.&, {h&&, 3<@xE*OP*23+23+US+';$';$d #OP*OP*OP*OP*OP*OP*OP*OP*x{+c`*OP*OP*23+23+US+US+M8@:{+';$';$u]#v]#v]#:{+y4&G|@xc+$(+Kh+y4&y4&oh.oh.oh.oh.oh.7P.7P.7P.23+sq*$' 5,+jM#mO#k4@IV.IV.5,+5,+5,+5,+5,+5,+5,+5,+5,+5,+5,+jM#mO#mO#k4@k4@$' $' $' $' $' $' $' $' $' $' $' $' $' $' $' 5,+$' $' $' qK+SO+SO+ X+ X+iM#iM#&b=&b=l]#=Z+=Z+=Z+dr=dr=dr=dr=dr=dr=dr=dr=iM#iM#l]#dr=o!#^u=m}+m}+m}+o!#=Z+&b=l]#o!#xE#Y`+,C+Fu+$x+)p#)p#$x+Fu+,C++X+$x+Fu+xr*&s*=^@&s*&s*xr*&s*=^@=^@&s*xr*,C+Fu+,C+xr*=^@+v=wr*&s*,C+tq*Nc&Nc&%' mh.>S%~h&~h&~h&&, Av&&, 0, ~h&~h&&, Bv&xE*x{+x{+x{+23+';$u]#v]#';$23+OP*23+';$';$US+lt*,0+$' qK+$' jM#k4@mO#5,+SO+qK+qK+$' $' 5,+jM#-x#U*@US+d #u]#d #d #v]#M8@';$US+23+OP*x{+x{+", "zT.P7.6!.5!.5!.$9.$9.9, G6.ts.ts.ts.T}%xx.l=&VW.VW.VW.9, 9, G6.G6.G6.VW.VW.VW.VW.VW.VW.VW.VW.Vh.Vh.Vh.is@is@x5.x5.x5.dD.dD.Vh.x5.O7.xX%_r+N7._r+xX%O7.x5.Vh.dD.%j.Su$x5.x5.x5.x5.x5.x5.x5.x5.<3+v4.6;,6;'6;)6;!6;~6;'2;{6;sR@#($o*$I=$v' xu k8 G> :)@b@r[@r[@qG ;! (,@#A@~J $A@ i#Wr V*#P1 `D#TY@}]#TY@>4;d6;wv@`~;e[#}J=aP=eE=LG=o%;|J=bH=4[;B4 kr#Gz lx QL@5n e6;6`-eg+N|@%U*&o@&o@%U*J7.D6.:^+:^+D6.:{.zI*k5+7&+e{+n3.n3.v5.t4.D6.:^+p3.w5.t4.t4.a,+a,+a,+a,+a,+a,+Q+&j(#j(#b,+b,+o&=o&=bQ#w{@w{@Q+&Q+&j(#b,+b,+o&=v5.v5.v5.v5.v5.v5.v5.v5.sQ@sQ@h;#v5.t4.o3.h;#):.j(#w{@CI#w{@b,+o&=o&=j(#Q+&j(#b,+o&=b,+j(#w{@CI#S`%S`%S`%sX%&r=&r=*r=*r=CI#CI#CI#w{@Q+&Q+&j(#j(#CI#sX%sX%S`%Q+&j(#Q+&CI#sX%&r=&r=S`%Q+&b,+b,+Q+&S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%Q+&Q+&w{@w{@CI#S`%S`%sX%Q+&Q+&w{@w{@CI#S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%sX%CI#CI#CI#CI#CI#CI#CI#CI#Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&w{@sX%&r=sX%Q+&b,+Q+&CI#S`%yE#yE#yE#yE#yE#yE#yE#yE#yE#tq*tq*Fu+ X+Fu+SO+o)@~~@-x#7' 7' -x#~~@o)@q,@7' ]o&]o&ZQ+xu#o)@h^+~h&`b&`b&!D+>n.>n.;n.;n.-~@}m.]*=]*=}m.;n.!D+`b&8P.B9.Bv&ZQ.&, 0, {h&~h&Av&0, >S%%' ~h&0, 0, J> r-@9&+x}*pK+FG*lt*b=+a1+lt*lt*lt*lt*lt*lt*lt*lt*0&+QC#V&$m|.m|.d%$RO+c`*d #';$J> 17*17*17*17*J> OP*OP*OP*OP*OP*OP*OP*OP*M8@:{+';$US+';$d #d #';$yi.k4@k4@k4@k4@k4@k4@k4@5,+qK+ X+SO+$' jM#jM#5,+jM#jM#jM#jM#jM#jM#jM#jM#SO+SO+qK+$' $' 5,+jM#jM#k4@jM#$' $' jM#jM#5,+qK+$' $' qK+qK+SO+SO+SO+ X+=Z+l]#&b=iM#iM#&b=l]#=Z+dr=dr=dr=dr=dr=dr=dr=dr=IV.mO#5,+qK+qK+qK+5,+jM#$' qK+qK+$' jM#jM#$' SO+tq*tq*$x+$x+$x+$x+$x+)p#xr*uq*,C+,C+uq*xr*=^@+v=+X++X+)p#$x+$x+tq*Fu+Fu+Fu+Fu+,C+,C+uq*xr*xr*&s*wr*wr*(-==^@kt*VD@VD@z9.%z&.y&TO&`E&3]&#u%Fc%+d+1.+OP*';$d #';$US+US+';$d #d #';$';$';$';$US+pK+>0+5,+5,+5,+5,+jM#jM#jM#SO+SO+SO+qK+qK+$' $' ~~@$.@u]#d #';$';$d #u]#:{+US+US+';$d #';$23+", "zT.zT.7!.5!.5!.5!.$9.9, 9, T}%ts.T}%xx.M}.4I%xx.VW.VW.9, 9, G6.G6.G6.VW.VW.VW.VW.VW.VW.VW.VW.Vh.Vh.Vh.is@is@x5.x5.x5.dD.Vh.Vh.is@x5.O7.O7.xX%O7.O7.x5.is@is@Vh.dD.dD.is@is@is@is@is@is@is@is@v4.#k.F6.8'%[{.[{.8'%F6.8@/0@/0@>8@'8@=8@J~ XA jt@K7&40&5C#46&a9&a9&40&5C#46&5C#6C#w8&a-;Ov#GL#Dk&8@'8@'8@/0@q<$b|$b|$q<$q<$b|$$B%%B%%B%u1$u1$Kv Eu $4@<|@sG >b@t! +~ Xr _t _,@/,@m[#2i $E i#|m $8 L9 S*#So#04#I^#J^#H6;H6;v_#01#b-;G=N9 |u l.#8q }m >r&sF=9(;pi He+n4@:^+p3.w5.w5.p3.:^+D6.D6.D6.D6.t4.t4.t4.t4.t4.v5.v5.o3.t4.D6.D6.:^+:^+t4.t4.t4.t4.t4.t4.t4.t4.j(#j(#j(#b,+b,+o&=o&=o&=Q+&Q+&Q+&j(#j(#j(#j(#j(#v5.v5.v5.v5.v5.v5.v5.v5.h;#h;#h;#v5.t4.o3.sQ@):.w{@S`%sX%S`%Q+&j(#Q+&w{@CI#w{@Q+&Q+&Q+&CI#S`%sX%S`%S`%S`%sX%sX%&r=&r=&r=CI#w{@w{@Q+&Q+&j(#j(#j(#CI#S`%sX%S`%Q+&j(#Q+&CI#CI#sX%&r=S`%Q+&j(#Q+&w{@S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#CI#CI#CI#w{@w{@w{@w{@w{@CI#CI#CI#CI#S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%CI#CI#CI#CI#CI#CI#CI#CI#w{@w{@w{@w{@w{@w{@w{@w{@w{@S`%&r=S`%Q+&j(#Q+&CI#yE#yE#yE#yE#yE#yE#yE#yE#&b=&b=&b=l]#l]#l]#=Z+KD=o)@GJ@>H*aH*aH*>H*GJ@lC&lC&>H*16.16.aH*GJ@lC&S>+~h&`b&`b&!D+>n.>n.>n.;n.!D+>n.;n.-~@-~@-~@;n.>n.Av&Av&&, &, &, 0, 0, 0, ZQ.0, >S%>S%{h&&, &, k#@wE*GJ@zw*zw*zw*zw*zw*zw*aH*aH*aH*aH*aH*aH*aH*5i=RO+QC#CG#CG#d%$RO+RO+0&+OP*OP*xE*xE*17*zi.>S%x{ 17*23+23+23+23+23+23+23+v]#d #23+23+';$d #d #S>+u.@mO#mO#mO#mO#mO#mO#mO#5,+qK+ X+SO+$' jM#jM#5,+jM#jM#jM#jM#jM#jM#jM#jM#qK+qK+$' $' $' $' 5,+5,+jM#$' SO+SO+$' $' SO+1<#5,+$' $' $' qK+qK+SO+SO+=Z+l]#&b=iM#iM#&b=l]#=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+mO#jM#5,+$' $' $' $' $' $' qK+SO+$' jM#jM#$' X+Fu+Fu+Fu+Fu+,C+,C+,C+,C+&s*xr*uq*,C+uq*xr*&s*=^@tq*tq*tq*tq*$x+$x+$x+$x+,C+,C+,C+uq*uq*uq*uq*uq*&s*&s*&s*&s*xr*xr*VD@VD@%z&.y&#d+TO&`E&3]&3]&3&$U*@US+d #d #US+OP*OP*23+';$';$';$';$';$';$';$S>+>0+5,+5,+$' $' $' $' $' X+ X+SO+SO+SO+qK+qK+o)@x{ d #';$US+US+';$d #u]#US+';$d #d #d #US+", "zT.7!.7!.6!.5!.5!.5!.8v.VW.xx.xx.xx.l=&)1.$;&xx.VW.VW.9, 9, G6.G6.G6.VW.VW.VW.VW.VW.VW.VW.VW.Vh.Vh.Vh.is@is@x5.x5.x5.Vh.Vh.Vh.Vh.is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@ +' +' VH _t _t VH 7, qG qG Yr hB ;E xt cs *E u1$u1$Nt%Nt%u1$Kv vR@<|@Eu Eu vR@<|@:|@/|@@~ c~ &7&K7&a9&K7&&7&b9&&7&K7&K7&a9&40&46&6C#w8&36&30&x~&V6;2X%W6;W6;X6;Gn@Y6;Z6;`6; 7;.7;GX&d+*d+*M=*+7;@7;@7;#7;$7;%7; R=&7;*7;=7;t0*-7;fS$L7&iF%#~ -8@_|@[|@<|@$4@$4@$4@$4@$4@Eu &E Kv Eu Eu Kv u1$&E &E &E &E Kv Eu tG sG rG X:@Y:@]|@]|@]|@VH /,@qI#m[##A@xn#g2 B4 r 9n ;7;y_#>7;,7;)4;c4;a.$~}*P<*O<*~);bH=<;#>r&B4 Wr N,#>r&7!#'7;)7;ie@k~;2b+J7.:^+p3.w5.w5.p3.:^+:^+t4.t4.t4.t4.t4.D6.D6.D6.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.j(#j(#j(#b,+b,+o&=o&=o&=j(#j(#j(#j(#j(#Q+&Q+&Q+&v5.v5.v5.v5.v5.v5.v5.v5.v5.n3.n3.v5.o3.v5.sQ@H*>H*zw*GJ@GJ@GJ@>H*aH*>H*GJ@lC&GJ@pK+~h&`b&!D+!D+!D+>n.>n.>n.{y%B#@`b&>n.;n.;n.;n.;n.~h&~h&{h&{h&0, 0, &, &, ZQ.&, ~h&~h&0, Av&&, k#@k#@>H*zw*GJ@lC& (&p)@p)@aH*aH*aH*aH*aH*aH*aH*5i=RO+QC#t#$t#$0&+0&+RO+d%$u!=[f...=xE*J> nh.x*$y*$J> US+US+US+US+US+US+US+d #23+x{+OP*US+d #';$pK+>0+5,+5,+5,+5,+5,+5,+5,+5,+qK+ X+SO+$' jM#jM#5,+jM#jM#jM#jM#jM#jM#jM#jM#5,+5,+$' $' $' $' qK+qK+qK+ X+1<#1<#SO+SO+1<#zM+jM#jM#5,+5,+$' $' $' qK+=Z+l]#l]#&b=&b=l]#l]#=Z+l]#l]#l]#l]#l]#l]#l]#l]#$' 5,+5,+5,+5,+$' qK+SO+$' qK+SO+qK+5,+jM#qK+ X+,C+,C+uq*xr*xr*&s*=^@=^@=^@&s*xr*uq*uq*uq*xr*xr*uq*,C+Fu+Fu+tq*$x+)p#)p#uq*uq*uq*uq*uq*,C+,C+,C+uq*uq*uq*uq*xr*xr*VD@VD@.y&.y&#d+#d+#d+#d+#d+`b&J> d #u]#d #23+x{+x{+OP*23+23+US+';$';$d #u]#9&+>0+5,+$' qK+qK+SO+ X+ X+1<# X+ X+ X+SO+SO+qK+o)@zi.';$US+23+23+US+';$';$';$d #d #u]#d #';$", "7!.7!.7!.6!.6!.5!.5!.8v.8v.xx.xx.l=&4I%Ay.QI.xx.VW.VW.9, 9, G6.G6.G6.VW.VW.VW.VW.VW.VW.VW.VW.Vh.Vh.Vh.is@is@x5.x5.x5.is@is@is@Vh.dD.dD.%j.%j.Vh.Vh.Vh.is@is@x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7.8'%[{.[{.[{.[{.[{.[{.[{. :} 'p {1 :} 7, VH fw fw Xr qG Yr hB ;E xt wt r_$vR@vR@Eu Eu Kv Kv Kv Kv Kv Eu vR@<|@:|@(|@^|@@~ C@$&7&&7&b9&50&iF%50&=a&b9&b9&&7&Xa&K7&40&40&Qj&Lm&3X%<7;[7;}7;=W=.S=N#*|7;yi&17;27;37;u#*u#*lW&AK=47;57;57;67;uR&(9&CM=77;gO='b*iF%iF%/Y@]Y@ST@[|@<|@$4@Eu Eu Eu Eu vR@vR@Kv u1$&E Kv Eu &E Nt%&E =E u1$&E &E Eu -! tG >b@+~ (7 O9 9 /d@(,@/,@<} =! +' 26 7v 8J@2k=4[;eS-;{;Kg ,7;F8-g~;yn-.{;87;bH=7!#V_=Wr {3 [m eI#B4 T=#97;T~;ag@r^+!<-@~+J7.p3.p3.p3.p3.p3.p3.:^+v5.o3.o3.t4.D6.D6.:^+:^+:^+D6.D6.D6.t4.o3.o3.o3.o3.o3.o3.o3.o3.o3.o3.o3.b,+b,+b,+b,+b,+b,+b,+b,+o&=b,+b,+j(#Q+&Q+&w{@w{@v5.v5.v5.v5.v5.v5.v5.v5.o3.n3.n3.n3.v5.v5.<(+):.CI#S`%&r=sX%CI#w{@CI#sX%S`%S`%S`%S`%sX%sX%&r=&r=S`%S`%S`%S`%S`%S`%sX%sX%*r=*r=&r=&r=&r=&r=&r=&r=w{@CI#sX%S`%w{@Q+&w{@S`%j(#w{@S`%CI#w{@w{@S`%&r=S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%CI#w{@w{@w{@Q+&&r=sX%sX%S`%CI#CI#w{@w{@CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#CI#CI#w{@w{@w{@CI#/W%/W%/W%/W%/W%/W%/W%/W%&b=&b=l]#l]#=Z+=Z+=Z+KD=~~@GJ@GJ@zw*zw*GJ@GJ@GJ@>H*zw*GJ@lC& (& (&GJ@FG*{h&!D+!D+!D+!D+!D+>n.>n.{y%B#@`b&`b&!D+!D+!D+!D+>S%>S%~h&~h&~h&{h&{h&{h&ZQ.&, {h&{h&&, Av&&, k#@4,+zw*GJ@lC& (&p)@p)@|7.aH*aH*aH*aH*aH*aH*aH*5i=RO+t#$h8.g[$kl=0&+d%$V&$[f.[f.U*@xE*J> nh.X@$c> zi.';$';$';$';$';$';$';$23+x{+[f.x{+US+';$';$FG*sq*$' $' $' $' $' $' $' 5,+qK+ X+SO+$' jM#jM#5,+jM#jM#jM#jM#jM#jM#jM#jM#jM#jM#5,+$' $' qK+SO+SO+qK+ X+1<#1<# X+SO+1<#zM+mO#jM#jM#jM#5,+5,+$' $' =Z+=Z+l]#l]#l]#l]#=Z+=Z+&b=&b=&b=&b=&b=&b=&b=&b= X+qK+$' 5,+5,+$' SO+ X+qK+SO+SO+qK+5,+5,+qK+ X+,C+,C+uq*xr*&s*=^@wr*+v==^@=^@&s*xr*uq*uq*uq*uq*,C+,C+,C+Fu+Fu+tq*tq*tq*&s*xr*xr*uq*,C+,C+Fu+Fu+Fu+Fu+,C+,C+uq*xr*VD@kt*.y&.y&#d+<:*<:*-.%-.%;n.17*';$d #';$23+x{+OP*US+OP*OP*23+US+d #u]#:{+q(#>0+$' qK+SO+ X+1<#_($_($1<#1<#1<# X+ X+SO+SO+q,@J> US+US+23+23+US+US+US+d #d #u]#u]#u]#d #", "4!.7!.7!.6!.6!.6!.6!.8v.8v.xx.xx.l=&4I%Ay.QI.xx.VW.VW.9, 9, G6.G6.G6.VW.VW.VW.VW.VW.VW.VW.VW.Vh.Vh.Vh.is@is@x5.x5.x5.x5.x5.is@Vh.dD.%j.%j.%j.dD.dD.Vh.is@is@x5.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%Tw@Tw@[{.[{.[{.[{.[{.[{. v' cq ,8 G0 Z:@1|@Q~#R1*w~->c NX-Fz }n @|#4' ,p (,@Xr UH _t qG UH ;E xt cs cs cs &E Kv vR@$4@vR@Kv u1$GJ%Kv Eu $4@[|@_|@(|@/|@/|@GN (M C@$FN (Y@#~ (Y@/Y@FN FN (M C@$C@$V7@%0@Jz S#ZC%i7;lx&j7;%]*}7;=W=k7;n.!D+!D+!D+!D+!D+!D+!D+!D+`b&`b&B#@B#@B#@B#@{h&{h&~h&~h&>S%>S%>S%>S%&, 0, {h&0, Av&Av&&, wE*r-@ (& (& (&lC&lC&GJ@GJ@aH*aH*aH*aH*aH*aH*aH*5i=RO+t#$c`*kl=c`*RO+';$d #17*17*17*17*0, {h&~h&nh.zi.';$';$';$';$';$';$';$x{+[f.[f.x{+US+';$US+lt*sq*$' $' $' $' $' $' $' 5,+qK+ X+SO+$' jM#jM#5,+5,+5,+5,+5,+5,+5,+5,+5,+jM#jM#5,+$' $' qK+SO+SO+5,+qK+ X+ X+qK+qK+SO+1<#mO#jM#jM#jM#5,+5,+$' $' =Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+&b=&b=&b=&b=&b=&b=&b=&b=1<# X+qK+$' $' qK+SO+ X+qK+SO+ X+SO+$' 5,+SO+1<#tq*Fu+,C+uq*xr*&s*=^@wr*&s*&s*&s*&s*xr*uq*,C+,C+Fu+Fu+Fu+,C+,C+uq*uq*uq*&s*xr*xr*uq*,C+,C+Fu+Fu+Fu+Fu+,C+,C+uq*xr*VD@kt*+y&.y&#d+<:*-.%M]*M]*-~@U*@23+';$US+23+23+';$u]#OP*OP*23+US+d #u]#:{+q(#sq*$' qK+SO+ X+_($_($zM+1<# X+ X+ X+SO+SO+qK+o)@17*US+US+US+US+US+US+23+d #d #d #d #d #d #", "4!.4!.7!.6!.6!.P7.P7.8v.VW.xx.xx.xx.l=&)1.$;&xx.VW.VW.9, 9, G6.G6.G6.VW.VW.VW.VW.VW.VW.VW.VW.Vh.Vh.Vh.is@is@x5.x5.x5.x5.x5.is@is@Vh.Vh.dD.dD.dD.Vh.Vh.is@is@x5.x5.O7.xX%xX%xX%xX%xX%xX%xX%xX%Tw@Tw@8'%F6.F6.F6.8'%8'%b@t! +~ ;! 9 .9 RT@@A@.9 @A@RT@T-@U-@T-@m| /$%[ ]m C7;0>#ql {7&&:*D7;K,;E7;m: ra `h#`h#0.$`h#0.$w&#F7;RZ-G7;o2.B!;5{;o2.[D+B.@h|.p3.:^+:^+:^+:^+p3.w5.t4.t4.t4.t4.t4.D6.D6.D6.:^+:^+D6.D6.t4.o3.o3.o3.v5.v5.v5.v5.v5.v5.v5.v5.o&=o&=o&=b,+b,+j(#j(#j(#j(#j(#j(#j(#j(#Q+&Q+&Q+&v5.v5.v5.v5.v5.v5.v5.v5.v5.h;#sQ@sQ@n3.v5.n3.sQ@o&=j(#Q+&Q+&b,+b,+j(#w{@j(#j(#w{@CI#CI#CI#CI#w{@S`%S`%S`%S`%CI#CI#CI#w{@j(#j(#j(#j(#Q+&Q+&Q+&Q+&j(#w{@S`%S`%w{@w{@CI#sX%j(#w{@S`%CI#w{@w{@S`%&r=S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#w{@w{@w{@w{@w{@w{@w{@w{@j(#Q+&Q+&w{@CI#S`%sX%sX%sX%sX%sX%sX%sX%S`%S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#w{@Q+&w{@S`%sX%S`%w{@yE#yE#yE#yE#yE#yE#yE#yE#yE#yE#yE#iM#iM#&b=&b=!G=~~@GJ@lC& (& (&lC&GJ@GJ@aH*GJ@ (& (&GJ@>H*aH*k#@0, >n.>n.!D+!D+!D+`b&`b&;n.>n.!D+B#@B#@{y%{y%B#@{h&{h&{h&~h&~h&>S%>S%>S%0, ~h&~h&{h&&, &, {h&>S%{**|7.p)@lC&GJ@>H*aH*aH*aH*aH*aH*aH*aH*aH*aH*lt*RO+t#$0&+RO+RO+V&$d #u]#nh.zi.J> 17*&, 0, 0, 0, J> US+US+US+US+US+US+US+OP*x{+x{+OP*';$';$23+b=+sq*$' $' $' $' $' $' $' 5,+qK+ X+SO+$' jM#jM#5,+5,+5,+5,+5,+5,+5,+5,+5,+5,+5,+$' $' $' $' qK+qK+jM#$' qK+qK+$' 5,+qK+ X+jM#jM#5,+5,+$' $' $' qK+l]#=Z+dr=dr=dr=dr==Z+l]#l]#l]#l]#l]#l]#l]#l]#l]#1<#1<# X+SO+SO+SO+SO+ X+qK+ X+ X+SO+$' $' SO+1<#Fu+Fu+Fu+,C+uq*xr*xr*&s*xr*xr*&s*&s*&s*xr*uq*,C+tq*Fu+,C+,C+uq*xr*&s*&s*uq*uq*uq*uq*uq*,C+,C+,C+uq*uq*uq*uq*xr*xr*VD@VD@.y&.y&#d+<:*-.%-.%M]*;n.U*@OP*US+23+OP*23+d #v]#23+23+US+';$';$d #u]#x{ mh.qK+qK+SO+ X+1<#1<#1<#SO+SO+SO+qK+qK+$' $' sq*17*US+';$';$';$';$US+23+d #';$';$US+';$d #", "4!.4!.4!.6!.P7.P7.P7.9, 9, T}%ts.T}%xx.M}.4I%xx.VW.VW.9, 9, G6.G6.G6.VW.VW.VW.VW.VW.VW.VW.VW.Vh.Vh.Vh.is@is@x5.x5.x5.x5.x5.x5.x5.is@is@is@is@Vh.Vh.is@is@is@is@x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.Tw@[{.F6. <,@>8 I~ %W@]8@Ev@uB$T8 /p=Yp D,#uy /0#:} n| /,@fw Yr ds xt hB Xr _,@;! +~ >b@-! *E =E =E *E i0$*E -E tG rG rG rG sG v! cN@yK yK }A }A cN@X~#X~#X~#X~#X~#yK yK yK 7`@Zy Zy Zy $L@bB C'$ S#|r@P7;Ek&!y&!y&&k*Q7;&k*QM&R7;Ag&Ag&Ag&a$$gS$/Y@X~#yK $p@$p@SC V^#j@#RC ;z$-E }g }g *E *E }g -E -E sG -! }g -E -! tG -E *E cs {a 7F (e 6, y, VH /,@36 ,p uR@[`@uR@uR@[`@i@#(} VE ^(#)7&(: Ln=3w=r! Hs*Hs**:*u_;p9&Vg=v, I=$0+%]0 +4@+4@^0 S7;)4;U~;|m*5c@5{;VF+k~;Z];T7;2b+h|.p3.:^+D6.D6.:^+p3.w5.D6.D6.D6.t4.t4.t4.t4.t4.D6.D6.D6.t4.t4.t4.t4.t4.v5.v5.v5.v5.v5.v5.v5.v5.o&=o&=o&=b,+b,+j(#j(#j(#Q+&Q+&Q+&j(#j(#j(#j(#j(#v5.v5.v5.v5.v5.v5.v5.v5.h;#sQ@.9.sQ@n3.o3.o3.v5.bQ#b,+Q+&j(#b,+b,+Q+&CI#b,+j(#w{@CI#S`%CI#w{@w{@S`%S`%S`%CI#CI#w{@w{@w{@b,+b,+j(#j(#Q+&Q+&w{@w{@j(#w{@S`%CI#w{@w{@S`%&r=Q+&CI#S`%S`%w{@Q+&CI#sX%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@CI#CI#CI#CI#CI#S`%S`%sX%sX%sX%sX%&r=&r=sX%sX%sX%sX%sX%sX%sX%sX%CI#CI#CI#CI#CI#CI#CI#CI#w{@w{@w{@w{@w{@w{@w{@w{@CI#Q+&j(#Q+&S`%&r=S`%w{@&b=&b=&b=&b=&b=&b=&b=&b=iM#iM#&b=&b=&b=l]#l]#5;@xu#~~@q,@[I+[I+q,@~~@xu#7' ~~@q,@~~@7' ZQ+vE*k#@&, 0, 0, 0, {h&~h&~h&~h&&, 0, ~h&>S%>S%~h&{h&0, ~h&~h&~h&{h&{h&{h&0, 0, ~h&>S%>S%~h&0, 0, >S%X@$jk@jk@r-@wE*4,+o2@d;+d;+o2@o2@o2@o2@o2@o2@o2@lt*0&+RO+US+d #u]#u]#x{ x{ >S%~h&{h&0, ==)A&)A&0, 17*23+23+23+23+23+23+23+US+23+23+US+d #';$OP*'!=>0+5,+5,+5,+5,+5,+5,+5,+5,+qK+ X+SO+$' jM#jM#5,+sq*sq*sq*sq*sq*sq*sq*sq*mh.mh.sq*sq*sq*sq*>0+>0+,0+sq*mh.mh.sq*>0+mh.X`+>0+sq*sq*sq*mh.mh.Nc&SO+l]#=Z+dr=o!#o!#dr==Z+l]#=Z+=Z+=Z+=Z+=Z+=Z+=Z+=Z+1<#1<#1<#1<#1<# X+SO+qK+SO+ X+1<#SO+$' $' SO+_($,C+uq*uq*uq*uq*uq*uq*uq*,C+uq*xr*&s*=^@&s*xr*uq*z9.z9.z9.z9.VD@VD@VD@VD@_|*_|*_|*z9.z9.z9.z9.z9.5,+5,+5,+5,+$' $' sq*sq*~h&~h&`b&`b&!D+!D+!D+!D+17*J> zi.17*U*@xE*J> x{ zi.zi.zi.zi.zi.zi.zi.zi.mh.mh.mh.Nc&Nc&Nc&Nc&Nc&mh.mh.sq*sq*>0+>0+>0+,0+J> zi.nh.x{ x{ nh.zi.J> zi.J> 17*17*17*zi.", "`^ 4!.4!.6!.P7.P7.P7.9, G6.ts.ts.ts.T}%9K.l=&xx.VW.VW.9, 9, G6.G6.G6.VW.VW.VW.VW.VW.VW.VW.VW.Vh.Vh.Vh.is@is@x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@is@is@is@is@Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Tw@[{.F6.#k.v4.#k.8 0~ Ox@Ox@lI@C&#>p 6U%@' Yp /m (o Zp 36 VH e{@;E ;E e{@VH 36 VE@UE@/d@rG =E 1C%=E *E GD%i0$*E -! tG tG -! -! ^Y@v! cN@cN@}A }A yK W~#X~#X~#yK yK yK cN@cN@:C@Yk@i.#rI@rI@%L@$L@z]&z]&C'$U!&W!&7V$wW$7i&!y&.[&{G$@W@#W@#W@#W@v! v! 6F 6F W^#SC W^#j@#;z$^d ^d xt }g }g *E }g }g -E -! r[@rG tG tG rG rG tG xt 7F i8 (e 6, x, F> 36 ,p 'p /0#i@#UE@b.#b.#Cv@Y=#Jj K1 )7&8C&Q8 >Y-.8;*];Ee +8;5J@~(#66 !d@AN r*$Mj &8@S7;@8;#8;$8;%8;&8;*8;f-;j!;V3*V3*B!;d-;DM+&o@p3.:^+D6.D6.:^+p3.u4.:^+:^+D6.D6.t4.o3.o3.v5.t4.t4.t4.t4.t4.t4.t4.t4.v5.v5.v5.v5.v5.v5.v5.v5.bQ#o&=o&=b,+b,+j(#j(#Q+&w{@w{@Q+&Q+&j(#b,+b,+o&=v5.v5.v5.v5.v5.v5.v5.v5.sQ@<(+):.<(+n3.t4.t4.o3.bQ#b,+Q+&Q+&j(#b,+Q+&CI#j(#Q+&CI#S`%sX%S`%CI#w{@S`%S`%S`%CI#w{@w{@Q+&Q+&w{@CI#CI#S`%S`%sX%sX%&r=j(#w{@S`%CI#w{@w{@S`%&r=Q+&CI#sX%S`%w{@Q+&w{@S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%S`%sX%sX%sX%sX%sX%sX%sX%sX%w{@w{@w{@w{@w{@w{@w{@w{@sX%S`%S`%CI#w{@w{@Q+&Q+&CI#S`%S`%sX%&r=&r=*r=*r=sX%sX%sX%sX%sX%sX%sX%sX%CI#CI#CI#CI#CI#CI#CI#CI#Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&CI#Q+&b,+Q+&sX%&r=sX%w{@l]#l]#l]#l]#l]#l]#l]#l]#&b=l]#l]#l]#=Z+=Z+dr=dr=5,+~~@q,@[I+[I+q,@~~@xu#7' ~~@o)@xu#ZQ+|;@vE*-x#u.@&, 0, 0, {h&~h&~h&~h&{h&~h&>S%>S%~h&0, Av&ZQ.%' %' >S%{h&0, &, ZQ.ZQ.%' %' %' ~h&{h&{h&%' u3$h^+h^+wE*4,+k#@o2@d;+d;+o2@o2@o2@o2@o2@o2@o2@o2@x{+RO+d #:{+v]#v]#$.@x{ ~h&{h&0, 0, )A&)A&%z&{h&xE*OP*OP*OP*OP*OP*OP*OP*';$US+US+';$d #';$OP*'!=>0+5,+5,+5,+5,+5,+5,+5,+5,+qK+ X+SO+$' jM#jM#5,+sq*sq*sq*sq*sq*sq*sq*sq*Nc&Nc&mh.sq*sq*>0+,0+,0+,0+sq*Nc&Nc&sq*sq*Nc&ME+sq*sq*mh.mh.Nc&Nc&Nc&X`+,C+=Z+o!#^u=^u=o!#=Z+l]#dr=dr=dr=dr=dr=dr=dr=dr= X+1<#zM+zM+_($1<#qK+$' SO+ X+1<#SO+qK+$' X+_($xr*xr*xr*xr*xr*uq*uq*uq*tq*,C+xr*&s*=^@=^@&s*xr*(-=(-=kt*VD@VD@z9._|*_|*u{@u{@_|*_|*z9.VD@VD@kt*mO#mO#jM#jM#5,+$' sq*mh.~h&~h&`b&`b&`b&`b&`b&`b&nh.x{ nh.17*U*@..=xE*zi.nh.nh.zi.zi.zi.zi.J> J> Nc&Nc&Nc&mh.mh.mh.mh.mh.sq*sq*>0+>0+,0+,0+,0+,0+zi.nh.x{ $.@$.@x{ nh.zi.J> 17*xE*xE*xE*J> ", "7!.7!.7!.6!.6!.6!.6!.9, 9, T}%T}%T}%T}%4x T}%xx.9, G6.G6.G6.G6.hY.X)@9, 9, 9, VW.8v.8v.Hu+Hu+is@is@is@is@is@is@is@is@x5.x5.x5.x5.x5.x5.x5.x5.x5.is@is@Vh.dD.dD.%j.%j.x5.x5.x5.O7.xX%N7.%0+$B#ve.8'%8;,8;w7;vI@Z' xu :t Yq I~ 3|@]8@EN#r[@36 /m /p=Nj=0C=^p=}n i[#'p (,@qG UH Yr Xr y, z, 'p y, hB uG ;E r_$q_$ds xt wt wt xt xt cs =E ST@ST@ST@ST@ST@v! v! v! cN@}A }A v! v! ST@ST@5G@pI@V~#V~#V~#pI@pI@pI@pI@cB cB cB >&$>&$>&$H=$>&$^A ^Y@ST@v! v! 7G@:C@SC =^$;z$RC 5r Ju ^d .w% w%r_$hy%r_$xt cs +y cs UH ;E hB Yr Yr hB ;E ;E hB 3k MK$ l .l O1 ^e ]1 Q1 i[#i[#j$#j$#C&#Y=#'d@P~#q4&; *RX-'8;/Z@)8;=V@~;+Bd F8&Qo#Dd Dd Cd Y' 29 E0-Ni !8;~8;{8;]8;lj K%=k~;VF+nj*8J.8J.nj*N|@eg+n4@D6.t4.o3.o3.v5.n3.n3.t4.:^+p3.D6.o3.v5.o3.D6.t4.t4.t4.t4.t4.t4.t4.t4.v5.v5.v5.v5.v5.v5.v5.v5.j(#b,+b,+o&=bQ#bQ#+9.+9.o&=o&=o&=b,+b,+j(#j(#j(#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#j(#Q+&j(#bQ#bp.bQ#CI#uG#w{@w{@CI#S`%CI#Q+&b,+o&=&r=&r=sX%S`%S`%CI#w{@w{@CI#CI#w{@CI#CI#sX%&r=*r=*r=&r=S`%CI#CI#S`%&r=*r=w{@w{@CI#S`%S`%sX%&r=&r=S`%S`%S`%S`%S`%S`%S`%S`%j(#Q+&w{@CI#CI#w{@Q+&j(#CI#w{@Q+&Q+&Q+&CI#sX%&r=Q+&j(#Q+&CI#&r=&r=S`%Q+&*r=CI#j(#b,+Q+&CI#S`%S`%b,+o&=bQ#+9.bQ#b,+Q+&CI#Q+&Q+&w{@CI#CI#S`%S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#w{@CI#CI#sX%&r=*r=uG#uG#DI#DI#p!#qK#/W%yE#iM#iM#l]#l]#l]#l]#&b=&b=&b=&b=SO+SO+qK+$' $' qK+SO+SO+5,+5,+5,+5,+5,+5,+5,+5,+u.@u.@u.@u.@u.@,0+,0+,0+X`+X`+Nc&Nc&mh.sq*sq*>0+&, &, 0, 0, {h&~h&~h&~h&X@$%' %' %' >S%>S%~h&~h&{h&{h&{h&{h&{h&{h&{h&{h&Bv&B9.Av&%' %' 0, Av&17*US+US+US+US+J> J> J> J> {h&&, .== ==)A& ==^5&_b+J> 23+OP*OP*23+d #:{+h]@d #d #';$US+';$u]#:{+PS@Nc&SO+qK+jM#IV.IV.mO#5,+mO#mO#mO#mO#jM#jM#jM#jM#6g.&, {h&~h&>S%~h&{h&{h&{h&{h&{h&~h&~h&>S%>S%>S%0, >S%=|$w*$w*$=|$%' {h&>S%~h&0, &, &, 0, {h&sq*)p#&b=dr=dr==Z+l]#dr=o!#&b=&b=&b=&b=&b=l]#l]#l]#SO+SO+ X+ X+ X+ X+SO+SO+qK+qK+qK+SO+ X+1<#1<#1<#xr*xr*xr*xr*xr*xr*xr*xr*Fu+,C+,C+uq*&s*=^@wr*wr*kt*.y&Xw&Be+Be+Xw&.y&%z&.y&.y&.y&.y&.y&.y&.y&VD@qK+7' 7' o)@o)@xu#wE*{**J> J> Bj.Bj.Bj.h~ h~ h~ >S%>S%>S%>S%>S%>S%>S%>S%x*$%' 0, ZQ.Bv&Av&{h&>S%0, >S%X@$X@$~h&0, &, 0, ~h&~h&~h&~h&~h&~h&~h&~h&>S%X@$u3$x*$X@$X@$u3$2&$u3$x*$X@$%' >S%>S%", "7!.7!.7!.6!.6!.6!.6!.VW.9, T}%ts.ts.T}%4x xx.xx.9, G6.G6.G6.G6.hY.X)@9, 9, 9, VW.8v.8v.8v.Hu+Vh.Vh.is@is@is@is@x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@Vh.Vh.Vh.Vh.O7.x5.x5.x5.O7._r+N7.M7.ve.8'% uI@Zk %8@4##ub 7J@:} ,p RT@[`@C&#Ut&U8 k`&S8 [8;p(;}8;~;+.8;3w=j2&fr#>J -h@!d@t) 5q hQ v*@E; |8;18;-_;28;={;K3.*-;k~;@=@QK.Yj@h|.%U*J7.n4@D6.D6.t4.t4.t4.t4.o3.o3.t4.:^+p3.D6.o3.v5.o3.D6.t4.t4.t4.t4.t4.t4.t4.t4.v5.v5.v5.v5.v5.v5.v5.v5.j(#j(#j(#b,+b,+b,+b,+b,+b,+b,+b,+j(#j(#Q+&Q+&Q+&n3.n3.n3.n3.n3.n3.n3.n3.h;#h;#h;#h;#h;#h;#h;#h;#b,+j(#j(#o&=bp.+9.j(#S`%Q+&Q+&CI#CI#CI#w{@j(#b,+S`%S`%CI#CI#CI#CI#w{@w{@sX%S`%CI#w{@w{@w{@CI#S`%sX%S`%CI#w{@w{@CI#S`%sX%w{@w{@CI#CI#CI#CI#S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#j(#Q+&w{@CI#CI#w{@Q+&j(#CI#w{@Q+&Q+&Q+&CI#S`%&r=w{@Q+&Q+&CI#sX%&r=CI#j(#*r=S`%j(#j(#w{@S`%sX%S`%w{@w{@Q+&Q+&w{@CI#S`%sX%CI#CI#w{@w{@w{@CI#CI#S`%CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#S`%sX%sX%&r=*r=*r=.X+/W%/W%/W%/W%qK#qK#qK#iM#iM#iM#iM#iM#iM#&b=&b=qK+qK+$' $' $' qK+SO+ X+qK+qK+qK+qK+qK+qK+qK+qK+>0+>0+>0+>0+,0+,0+,0+,0+sq*sq*sq*>0+>0+>0+>0+>0+0, 0, {h&{h&~h&~h&>S%>S%%' %' >S%>S%~h&~h&~h&{h&0, 0, 0, 0, 0, 0, 0, 0, 0, Av&0, X@$X@$&, ZQ.&, 17*23+23+23+17*17*17*17*{h&0, ==)A&.y&.y&Y(;3P J> US+US+US+';$u]#:{+v]#d #';$US+US+US+d #u]#q)@,0+5,+$' jM#mO#mO#$' X+$' 5,+5,+jM#mO#mO#k4@yi.Av&&, {h&~h&>S%~h&~h&{h&{h&{h&{h&~h&~h&>S%>S%>S%{h&>S%x*$=|$u3$X@$~h&0, >S%>S%{h&{h&{h&~h&>S%Nc&tq*l]#dr=o!#=Z+l]#=Z+dr==Z+=Z+=Z+l]#l]#l]#&b=&b=SO+SO+SO+qK+qK+SO+SO+SO+SO+SO+SO+SO+ X+ X+ X+ X+xr*xr*xr*xr*xr*xr*xr*xr*Fu+Fu+,C+uq*xr*&s*=^@(-=%z&.y&Xw&Be+Be+Xw&.y&%z&%z&%z&%z&%z&%z&%z&%z&{h&r-@-x#-x#o)@o)@-x#4,+jk@17*J> Bj.Bj.Bj.Bj.Bj.Bj.>S%>S%>S%>S%>S%>S%>S%>S%x*$%' ~h&0, 0, {h&>S%%' 0, >S%X@$X@$~h&0, 0, 0, {h&{h&{h&{h&{h&{h&{h&{h&{h&>S%x*$x*$X@$X@$x*$=|$x*$X@$%' >S%>S%>S%", "7!.7!.7!.6!.6!.6!.6!.8v.VW.ts.+Q +Q ts.9K.l=&T}%9, 9, 9, G6.hY.hY.hY.9, 9, VW.VW.VW.8v.8v.8v.dD.Vh.Vh.is@is@x5.x5.O7.x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@x5.x5.x5.x5.O7.O7.x5.is@is@x5.O7.xX%Tw@8'%F6.F6.8'%[{.F6.#k.Tw@Tw@[{.8'%F6.F6.]-5_+o*$xu :t <,@H~ >8 /,@fw e{@Xr ,p cw Z4-gh*^|$@' Zq (o ,p +' 7, n| Xr _t Xr UH cs +y r_$cs ds cs r_$wt xt ds xt wt Jv Jv Jv Cu Cu Du Du Du 5G@5G@5G@5G@5G@5G@5G@6F 6G@6G@6G@6G@6G@6G@6G@6G@6G@6G@6G@6G@^Y@^Y@^Y@^Y@6G@RC RC RC RC ;z$;z$;z$=^$=^$;z$;z$=^$as bs bs ds xt ;E Yr UH ds uG Xr Xr _t _t qG Yr e{@_t /1 0/%4W%F; V3 T/*e@#kj#g$#2k=wf=/m tq=(X%l`&Ri@T8 08;v|*Q%+a8;b8;SY-Kj Kc P3 _g `' Mg Ng q) Hf V' V3 c8;d8;/{;GO*o2.)!=%R+{U=eg+%U*h|.w5.p3.D6.t4.D6.D6.D6.D6.D6.:^+:^+:^+t4.:^+p3.D6.o3.v5.o3.D6.t4.t4.t4.t4.t4.t4.t4.t4.v5.v5.v5.v5.v5.v5.v5.v5.j(#j(#j(#j(#Q+&Q+&Q+&Q+&b,+b,+b,+j(#j(#Q+&Q+&Q+&v5.v5.v5.v5.v5.v5.v5.v5.h;#h;#h;#h;#h;#h;#h;#h;#o&=b,+j(#b,+bQ#+9.bQ#b,+j(#j(#w{@w{@CI#w{@w{@Q+&Q+&Q+&Q+&w{@w{@w{@w{@w{@sX%S`%CI#Q+&j(#j(#j(#j(#CI#w{@w{@Q+&Q+&w{@w{@CI#w{@w{@w{@w{@w{@Q+&Q+&Q+&w{@w{@w{@w{@w{@w{@w{@w{@j(#Q+&w{@CI#CI#w{@Q+&j(#CI#w{@w{@Q+&w{@CI#S`%sX%S`%CI#w{@CI#sX%S`%w{@j(#*r=S`%Q+&Q+&CI#sX%sX%S`%w{@w{@CI#S`%S`%S`%S`%CI#sX%S`%w{@Q+&Q+&w{@CI#S`%CI#CI#CI#CI#CI#CI#CI#CI#w{@w{@w{@w{@w{@w{@w{@w{@S`%S`%S`%sX%sX%sX%sX%sX%.X+.X+.X+/W%/W%qK#qK#qK#/W%.X+.X+yE#iM#&b=&b=&b=xr*xr*&s*&s*xr*uq*Fu+Fu+Fu+Fu+Fu+Fu+Fu+Fu+Fu+Fu+SO+qK+qK+$' $' 5,+jM#jM#mO#mO#mO#mO#jM#jM#jM#,0+~h&~h&~h&~h&>S%>S%>S%>S%>S%~h&~h&~h&{h&{h&0, 0, -.%-.%-.%-.%-.%-.%-.%-.%`E&<:*#d+O4%3]&-.%RD*;n.17*17*17*17*0, 0, 0, 0, %z&)A&j(;c1$p2$p2$L(;j(;17*US+';$u]#:{+:{+:{+u]#';$US+US+23+US+';$d #x}*%b=k4@jM#jM#jM#$' X+zM+qK+qK+$' 5,+mO#k4@IV.6g.&, >n.!D+`b&B#@`b&`b&!D+!D+!D+!D+`b&`b&B#@B#@B#@`b&B#@B#@B#@`b&!D+;n.;n.`b&`b&`b&`b&B#@{y%'W+x*$Fu+=Z+o!#o!#=Z+&b=&b==Z+o!#o!#dr=dr==Z+l]#l]#l]# X+SO+$' 5,+5,+$' SO+ X+ X+ X+ X+ X+SO+SO+SO+SO+uq*uq*uq*uq*uq*uq*uq*uq*tq*tq*Fu+,C+uq*uq*xr*VD@%z&#d+`E&3]&3]&`E&#d+<:*<:*<:*<:*<:*<:*<:*<:*{h&r-@zw*zw* (& (&>H*FG*x}*OP*23+7P.Kh+G|@G|@T_+|m.{h&%z&%z&%z&%z&%z&%z&%z&Xw&Xw&Xw&Xw&Be+Be+Be+Be+>n.B#@'W+{y%`b&>n.>n.!D+!D+!D+!D+!D+!D+!D+!D+!D+.==%z&Be+@d+Be+Be+Be+@d+Xw&Xw&+y&+y&.y&.y&", "zT.zT.zT.P7.P7.P7.P7.8v.VW.ts.+Q +Q ts.9K.l=&T}%VW.8v.VW.G6.hY.hY.9, VW.VW.VW.VW.VW.VW.8v.8v.dD.dD.Vh.is@is@x5.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.Vh.is@is@x5.O7.O7.xX%xX%xX%O7.x5.is@Vh.Vh.Vh.is@[{.[{.8'%8'%8'%8'%F6.8;j8;h7;k8;r*$.' 1k <,@:,@_,@y, qG Xr (,@/0#|n Zq ^|$/|$b:*/o 6v (o 'p ,p ,p 36 VH qG uG xt cs xt ;E ds cs xt ;E uG ds xt Cu Du Du Du Fu Fu 6G@6G@Du Du Du Fu Fu Fu 6G@6G@Fu Fu QC Fu QC Fu Fu Fu Du Du Du Du PC PC PC Du RC RC ;z$;z$=^$as as as =^$=^$=^$=^$=^$=^$Cu as ;E ds hB qG e{@uG UH _t _t _t Xr qG e{@Xr VH x' {|@E0-.E j.@mj#9(-U3 @l y' Q*#Zq J[$Ri@hX=W+-2u-og*3[;&);/|$Tk *! .r o| w' ^e 3) Zk Mg %8@m: Ta-P`-S~;5c@I==*-;=d+2b+]q%=g@n4@p3.J!.oO 78*Q!;a,+:{.D6.:^+:^+p3.w5.w5.w5.t4.:^+p3.D6.o3.v5.o3.D6.t4.t4.t4.t4.t4.t4.t4.t4.o3.o3.o3.o3.o3.o3.o3.o3.o&=o&=b,+b,+j(#Q+&Q+&w{@bQ#bQ#o&=o&=b,+b,+b,+j(#o3.o3.o3.o3.o3.o3.o3.o3.h;#h;#h;#h;#h;#h;#h;#h;#b,+j(#Q+&w{@j(#o&=bQ#+9.b,+j(#Q+&w{@w{@CI#CI#CI#b,+b,+b,+j(#Q+&Q+&w{@w{@CI#w{@Q+&j(#b,+b,+j(#j(#CI#w{@w{@w{@w{@w{@w{@CI#w{@w{@Q+&Q+&j(#b,+b,+b,+Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&w{@w{@w{@w{@Q+&Q+&w{@w{@w{@w{@CI#CI#S`%S`%&r=S`%w{@w{@S`%S`%Q+&b,+*r=sX%w{@w{@S`%sX%sX%S`%b,+j(#w{@CI#S`%CI#Q+&j(#&r=sX%w{@j(#j(#Q+&CI#S`%CI#CI#CI#CI#CI#CI#CI#CI#w{@w{@w{@w{@w{@w{@w{@w{@sX%sX%sX%S`%S`%S`%S`%S`%2p%2p%qK#/W%.X+yE#iM#iM#/W%.X+yE#iM#&b=l]#=Z+dr=&s*&s*&s*&s*xr*uq*,C+Fu+,C+,C+,C+,C+,C+,C+,C+,C+ X+ X+SO+qK+qK+$' 5,+5,+k4@k4@mO#mO#jM#5,+5,+5,+>S%>S%>S%>S%>S%%' %' %' ~h&~h&{h&{h&0, 0, 0, &, M]*M]*M]*M]*M]*M]*M]*M]*3]&#d+TO&O4%O4%<:*-.%`b&&, xE*xE*xE*&, &, &, &, )A& ==Y(;c1$p2$p2$P(;c1$17*US+u]#:{+v]#:{+u]#d #US+US+23+23+23+US+US+pK+%b=mO#5,+5,+5,+$' X+zM+$' $' 5,+5,+jM#jM#mO#u.@{h&!D+`b&`b&`b&`b&`b&`b&!D+!D+!D+`b&`b&B#@B#@B#@B#@B#@!D+;n.-~@-~@}m.}m.>n.>n.!D+`b&B#@{y%3&$x*$,C+dr=^u=o!#l]#iM#iM#&b=dr=dr=dr=dr=dr=dr=dr=dr=SO+qK+5,+mO#mO#5,+qK+SO+1<#1<#1<# X+SO+qK+qK+qK+uq*uq*uq*uq*uq*uq*uq*uq*tq*tq*Fu+Fu+,C+,C+uq*z9.%z&#d+`E&3]&3]&`E&#d+<:*TO&TO&TO&TO&TO&TO&TO&>S%r-@zw*zw*p)@ (&>H*lt*S>+OP*OP*7P.Kh+G|@T_+$(+y$${h&%z&%z&%z&%z&%z&%z&%z&%z&.y&Xw&@d+@d+@d+Be+Xw&!D+`b&{y%B#@!D+>n.!D+B#@>n.>n.>n.>n.>n.>n.>n.>n.3P )A&Be+@d+Be+Xw&Xw&Be+.y&.y&.y&+y&.y&.y&", "zT.zT.zT.P7.P7.P7.P7.8v.VW.ts.+Q +Q ts.9K.l=&T}%8v.Hu+8v.G6.X)@G6.VW.8v.8v.VW.VW.VW.VW.VW.VW.Vh.Vh.Vh.is@is@x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.Vh.is@is@x5.O7.O7.xX%xX%xX%O7.x5.Vh.dD.dD.dD.Vh.[{.[{.[{.8'%F6.F6.F6.F6.v4.#k.#k.#k.Y.(*+f8;l8;m8;n8;o8;p8;v7;w7;$($r*$Oh hp G> _t y, fw _,@VH VH VH _,@kx J[$t|*`q zQ-0C=6v kx 7v ]1 3' x, N1 (1 Q1 ]1 @, j.$7F 7F j.$j.$7F _e RC RC RC RC RC RC RC RC as as as as as as =^$Du PC PC Qw PC Qw PC PC PC PC PC PC PC PC PC Du Du RC ;z$;z$=^$Du Cu Jv Jv Fu Fu Du Du Du Fu QC Fu ;E ml @, 5, Zr (e @, 5, 2k Zr 5, Zr 5, /1 (1 +l Lj QY+sW+tW+q8;&i-x[-9>#J~#Q*#Fz /o hV=H9-*>->n+zq-eE=6v `8 N1 8q /1 kr#e2 C0 -> 6.#lj#9$#CQ-1m*r8;mX.*-;B!;@=@@=@D<&I7.o3.a,+_{.78*bw.#*&s8;wc.:{.:^+:^+p3.p3.w5.u4.u4.t4.:^+p3.D6.o3.v5.o3.D6.t4.t4.t4.t4.t4.t4.t4.t4.o3.o3.o3.o3.o3.o3.o3.o3.+9.bQ#bQ#o&=b,+b,+j(#j(#+9.+9.+9.bQ#bQ#o&=o&=o&=o3.o3.o3.o3.o3.o3.o3.o3.h;#h;#h;#h;#h;#h;#h;#h;#Q+&w{@CI#S`%S`%w{@b,+bQ#j(#j(#j(#Q+&Q+&w{@CI#S`%o&=o&=b,+j(#j(#Q+&Q+&w{@j(#b,+b,+b,+b,+j(#Q+&w{@CI#CI#CI#S`%S`%CI#CI#CI#w{@Q+&Q+&j(#j(#b,+o&=o&=Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&w{@w{@Q+&Q+&Q+&Q+&w{@w{@Q+&w{@w{@CI#CI#S`%S`%S`%&r=S`%w{@w{@CI#CI#w{@j(#&r=S`%w{@w{@S`%sX%S`%CI#j(#Q+&CI#S`%CI#w{@j(#b,+sX%S`%w{@Q+&Q+&w{@CI#S`%CI#CI#CI#CI#CI#CI#CI#CI#Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&S`%S`%S`%S`%S`%CI#CI#CI#qK#qK#/W%.X+.X+yE#iM#iM#yE#iM#&b=l]#=Z+dr=o!#^u=&s*&s*&s*=^@&s*xr*uq*,C+xr*xr*xr*xr*xr*xr*xr*xr* X+ X+SO+SO+qK+qK+$' $' jM#jM#5,+5,+$' qK+qK+SO+%' %' %' >S%>S%>S%>S%>S%~h&~h&{h&{h&0, 0, 0, &, -.%-.%-.%-.%-.%-.%-.%-.%TO&-.%<:*O4%O4%TO&TO&3&$0, 17*0, 0, 0, 0, )A&)A&Y(;t8;t8;j(;P(;P(;L(;j(;17*US+d #:{+:{+u]#d #';$US+US+US+US+US+US+23+FG*u.@5,+qK+qK+$' $' qK+ X+mO#jM#jM#5,+5,+$' $' mh.>S%B#@`b&`b&`b&`b&`b&`b&!D+!D+!D+`b&`b&B#@B#@B#@{y%`b&>n.-~@}m.}m.}m.-~@-~@-~@>n.!D+`b&B#@{y%%' ,C+dr=^u=o!#l]#iM#iM#&b=&b=&b=l]#=Z+o!#^u=m}+m}+SO+qK+5,+jM#jM#5,+qK+SO+1<#1<#1<# X+SO+qK+qK+qK+uq*uq*uq*uq*uq*uq*uq*uq*Fu+Fu+Fu+Fu+,C+,C+,C+_|*%z&#d+`E&3]&3]&`E&#d+<:*`E&`E&`E&`E&`E&`E&`E&%' h^+>H*zw*p)@p)@zw*lt*S>+OP*23+Kh+G|@T_+$(+xc+y$${h&%z&%z&%z&%z&%z&%z&%z&.==)A&.y&Xw&Be+Xw&+y&.y&!D+`b&B#@B#@!D+>n.`b&{y%!D+!D+!D+!D+!D+!D+!D+!D+ ==.y&Be+@d+Xw&+y&+y&Xw&)A&%z&.y&+y&+y&+y&", "&j.&j.&j.H;@H;@H;@H;@9, 9, T}%T}%T}%T}%4x T}%ts.8v.#9.Hu+G6.X)@G6.8v.8v.8v.8v.VW.VW.VW.9, 9, is@is@is@is@is@is@is@is@x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@x5.x5.x5.x5.xX%O7.x5.Vh.Vh.Vh.Vh.Vh.8'%[{.Tw@[{.F6. xu .' x, y, y, _t Xr qG e{@Yr VH /0#6v @p=Z4-6L=^|$py=Jo=#)#[]#e5 vb e5 Q1 /1 /1 5, 2k 6, 2k 6, @, ml ^0@SC SC W^#V^#j@#RC RC RC ;z$;z$;z$=^$as as Cu PC Qw Qw Qw Qw Qw Qw PC PC PC PC PC PC PC Du Du Fu ;z$;z$=^$Du Du Du Du 6G@6G@Fu Fu ^Y@^Y@v! 6F uG j.$6, 3' x, /V#6, x, Zr x, ^1 F> ]1 d2 vb lj#y`+Zi-OY+{e `z@(<-:1-4) Ui-Vi-/i*1x=Sa-9t-A0-s7-Ed#qI#Qk#m[#kr#kr#P1 g2 {3 Ro#Hs&v&#D8;U~;E8;lj TV.o2.b%;nj*= @qt+I1.#:+k5+A!;#*&-3+-3+d7+F8;'5+U%+:^+:^+p3.p3.p3.p3.p3.t4.:^+p3.D6.o3.v5.o3.D6.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.bQ#bQ#bQ#bQ#o&=o&=o&=o&=+9.+9.+9.bQ#bQ#o&=o&=o&=v5.v5.v5.v5.v5.v5.v5.v5.h;#h;#h;#h;#h;#h;#h;#h;#w{@w{@w{@S`%sX%S`%Q+&o&=w{@Q+&Q+&j(#Q+&Q+&CI#CI#j(#j(#j(#j(#j(#Q+&Q+&Q+&b,+b,+b,+b,+j(#Q+&CI#S`%w{@CI#S`%S`%S`%S`%CI#w{@Q+&Q+&Q+&j(#j(#j(#j(#j(#w{@w{@w{@w{@w{@w{@w{@w{@CI#w{@Q+&j(#j(#Q+&w{@CI#Q+&Q+&w{@S`%S`%S`%CI#CI#&r=CI#Q+&Q+&CI#S`%CI#w{@S`%w{@Q+&w{@S`%S`%CI#Q+&CI#S`%S`%S`%S`%CI#w{@w{@Q+&Q+&w{@CI#CI#S`%S`%S`%CI#CI#CI#CI#CI#CI#CI#CI#Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&CI#CI#CI#CI#CI#S`%S`%S`%l]#&b=iM#yE#.X+/W%qK#2p%l]#l]#l]#=Z+dr=o!#o!#^u=uq*xr*&s*=^@=^@&s*xr*xr*=^@=^@=^@=^@=^@=^@=^@=^@qK+qK+qK+qK+qK+qK+qK+qK+qK+qK+qK+qK+SO+SO+SO+SO+>S%>S%>S%>S%~h&~h&~h&~h&>S%~h&~h&~h&{h&{h&0, 0, <:*<:*<:*<:*<:*<:*<:*<:*TO&M]*-.%`E&3]&TO&`E&Y@${h&J> {h&{h&{h&{h&%z&%z&j(;Y(;t8;j(;L(;P(;M(;t8;J> US+';$d #d #';$';$US+US+';$';$d #';$US+23+lt*>0+qK+ X+ X+qK+5,+$' qK+k4@mO#jM#5,+$' qK+SO+X`+X@${y%B#@`b&!D+`b&`b&B#@!D+!D+!D+`b&`b&B#@B#@B#@B#@`b&!D+>n.;n.;n.;n.;n.-~@;n.>n.!D+`b&`b&`b&~h&Fu+=Z+o!#o!#=Z+&b=&b==Z+iM#&b=&b==Z+dr=o!#^u=^u=qK+qK+qK+qK+qK+qK+qK+qK+ X+ X+ X+ X+SO+SO+SO+SO+,C+,C+,C+,C+,C+,C+,C+,C+,C+,C+,C+,C+,C+,C+,C+_|*%z&#d+`E&3]&3]&`E&#d+<:*`E&`E&`E&`E&`E&`E&`E&%' k#@(k=>H*p)@|7.GJ@pK+x}*US+US+G|@G|@T_+$(+$(+y$${h&%z&%z&%z&%z&%z&%z&%z&.== ==%z&.y&+y&.y&)A& ==!D+`b&B#@`b&>n.>n.B#@'W+`b&`b&`b&`b&`b&`b&`b&`b&Xw&Be+@d+Be++y&.y&+y&Xw&)A&%z&+y&Be+Be+Xw&", "&j.&j.&j.H;@H;@H;@H;@hY.G6.xx.l=&l=&xx.=G@+Q ts.Hu+cp.PI.G6.9%.G6.Hu+Hu+8v.8v.8v.VW.9, 9, 9, O7.O7.x5.is@is@Vh.dD.dD.x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@Vh.Vh.Vh.Vh.O7.O7.x5.is@is@is@x5.x5.F6.[{.ve.[{.@O>@z .oY Xb#xc.0q.l5+J3.cf.RX*{+$_*&u8;jO.e8;G8;H8;I8;J8;K8;L8;`7;O7;C8;C> :f /1 fw _t Xr qG Xr _t y, _,@(,@/,@7, /0#>p 6L=Xh-CK-Ij-|6-2g y' z_#e5 (1 t[ Vr #, d2 *! Q1 o| ^1 m[##A@Qk#$A@(t 5F ^t ^0@^0@SC W^#V^#j@#RC ;z$Du Qw Wx Wx Wx Wx Qw Qw Qw +z +z QC QC QC QC QC Fu Du Du Fu Fu Fu Fu 6G@6G@v! v! ST@^Y@@W@#W@#~ yK Yr /V#5, N1 ^1 Zr Zr /1 /1 F> d2 Vr Yk :u *[ _<-q8;Py-is-LP-u7-#i-&5-5X-Wm-A[*M8;%=+fs-VA f%&XC@]J 6h 2i _c#S*#7h `D#7h a4#N8;K^#O8;P8;Q8;R8;S8;)!=1r%QQ=d-;eg+g6@o3.:{.[d.4/*T8;d7+d7+U8;V8;W8;78*p3.:^+:^+:^+:^+D6.D6.t4.:^+p3.D6.o3.v5.o3.D6.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.b,+b,+b,+b,+b,+o&=o&=o&=o&=o&=b,+b,+b,+j(#j(#j(#n3.n3.n3.n3.n3.n3.n3.n3.h;#h;#h;#h;#h;#h;#h;#h;#w{@j(#b,+Q+&S`%sX%w{@j(#S`%CI#Q+&j(#j(#j(#w{@w{@w{@w{@Q+&Q+&Q+&Q+&j(#j(#w{@Q+&j(#j(#j(#Q+&w{@w{@j(#Q+&CI#S`%S`%CI#Q+&j(#j(#j(#Q+&Q+&Q+&Q+&w{@w{@CI#CI#CI#CI#CI#CI#CI#CI#CI#w{@Q+&j(#j(#Q+&w{@CI#j(#Q+&CI#S`%sX%S`%CI#w{@sX%w{@j(#j(#w{@S`%S`%S`%w{@Q+&j(#Q+&CI#CI#Q+&b,+sX%S`%CI#w{@Q+&Q+&w{@w{@bQ#b,+w{@S`%&r=&r=sX%S`%CI#CI#CI#CI#CI#CI#CI#CI#j(#j(#j(#j(#j(#j(#j(#j(#Q+&Q+&w{@CI#CI#S`%sX%sX%l]#l]#&b=iM#.X+/W%qK#2p%l]#l]#=Z+=Z+=Z+=Z+=Z+=Z+,C+uq*xr*=^@=^@wr*=^@=^@=^@=^@=^@=^@=^@=^@=^@=^@jM#5,+5,+$' qK+SO+SO+ X+ X+SO+SO+SO+SO+qK+qK+qK+>S%>S%~h&~h&{h&{h&0, 0, %' %' >S%>S%~h&~h&~h&{h&#d+#d+#d+#d+#d+#d+#d+#d+`E&<:*-.%`E&`E&<:*<:*'W+~h&zi.~h&~h&~h&~h&.y&.y&h;=c1$c1$k$=P(;P(;M(;t8;zi.US+23+23+OP*23+US+US+';$d #u]#u]#u]#';$US+FG*,0+qK+ X+1<#SO+$' $' qK+jM#jM#5,+5,+$' qK+qK+Nc&x*$'W+B#@`b&!D+`b&`b&B#@!D+!D+!D+`b&`b&B#@B#@B#@`b&`b&`b&`b&`b&`b&`b&!D+>n.!D+`b&B#@B#@B#@!D+{h&tq*l]#dr=o!#=Z+l]#=Z+dr=l]#l]#l]#l]#l]#l]#l]#l]#5,+qK+ X+1<#1<# X+qK+5,+SO+SO+SO+SO+ X+ X+ X+ X+,C+,C+,C+,C+,C+,C+,C+,C+uq*uq*uq*uq*uq*uq*uq*z9.%z&#d+`E&3]&3]&`E&#d+<:*#d+#d+#d+#d+#d+#d+#d+~h&d;+16.aH*|7.r,@lC&S>+q(#d #d #T_+T_+T_+T_+T_+*$@>S%+y&+y&+y&+y&+y&+y&+y&)A&%z&%z&%z&%z&)A& == ==!D+`b&`b&!D+>n.>n.{y%3&${y%{y%{y%{y%{y%{y%{y%{y%Gc%>H%mq+Xw&%z&)A&+y&Be+)A&.y&Xw&@d+z$$@d+", "&j.&j.&j.H;@H;@H;@H;@9%.hY.8v.PI.$;&l=&+Q V>.G6.Hu+cp.PI.hY.9%.G6.PI.Hu+Hu+8v.8v.VW.9, 9, 9, _r+[M@O7.{$+Vh.1.&%j.S+&x5.{$+x5.{$+x5.{$+x5.x5.x5.is@is@Vh.dD.dD.%j.%j.O7.O7.x5.is@is@x5.O7.O7.F6.[{.ve.[{.c.:_.#k.%0+4B&Wh@41.V# <|*~G=W6.jt=P[;58;Y8;Z8;`8; 9;xE-T6;t(;.9;^_$s7 /1 G> fw ZA fw ZA fw es r[@>8 ;! S:@w! 'Y@5N=$D=BX-1X-+';+<*%)#no=#X-$)#&[ z_#2k=R3 7J@t[ Vr Vr ua <} g2 7, ]t VH }m _t 8q qG {T#UH /d ;E RC Kv Qw d.#Qw d.#Qw Kv PC vR@^Y@vR@6G@vR@6G@vR@6G@}g Du -E Fu -! 5G@tG 5G@rG 7G@<|@ST@<|@}A _|@t! 2k j8 /1 ]1 o| 3' 3' F> F> *! vb :u *[ #)#y' oo=On=&x-+9;Hg @9;6';Tu*|];b8;D[*]p=/m y&#')#0~ ]|@7.#/c#L9 |6 E0 L9 S*#lr##9;P&;$9;gj.Vr&Kt&e(;Kt&hP.Yj@hP.[M@[M@N7+J!.yy.4|;wc.T8;NX@d7+I'+%9;V_;62.p3.:^+:^+D6.t4.t4.t4.t4.:^+p3.D6.o3.v5.o3.D6.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.t4.w{@w{@Q+&Q+&j(#b,+b,+o&=j(#j(#Q+&Q+&w{@w{@w{@CI#h;#m3.h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#h;#w{@Q+&o&=+9.o&=w{@S`%w{@j(#sX%S`%w{@j(#b,+j(#Q+&Q+&CI#sQ@CI#w{@Q+&Q+&j(#j(#sX%S`%w{@Q+&j(#j(#e6#Q+&b,+j(#Q+&w{@w{@Q+&j(#b,+j(#j(#Q+&Q+&w{@CI#CI#CI#S`%S`%S`%S`%S`%S`%S`%S`%CI#w{@Q+&j(#j(#Q+&w{@CI#j(#Q+&CI#S`%sX%S`%CI#w{@S`%w{@b,+j(#w{@sX%sX%sX%Q+&j(#b,+j(#w{@w{@j(#o&=CI#Q+&b,+bQ#+9.bQ#o&=b,+:(+bQ#w{@&r=uG#*r=sX%S`%CI#CI#CI#CI#CI#CI#CI#CI#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#Q+&w{@CI#sX%sX%&r=.X+.X+yE#yE#yE#yE#yE#iM#l]#l]#l]#l]#&b=&b=&b=&b=Fu+,C+xr*=^@wr*+v=+v=+v=&s*&s*&s*&s*&s*&s*&s*&s*k4@mO#jM#5,+qK+SO+ X+ X+ X+ X+SO+SO+qK+$' $' $' ~h&~h&~h&{h&0, 0, &, &, X@$%' %' %' >S%>S%~h&~h&TO&TO&TO&TO&TO&TO&TO&TO&#u%#d+<:*TO&#d+M]*M]*`b&>S%>S%>S%>S%>S%>S%+y&+y&t3$p2$h;=h;=t3$p2$L(;Y(;~h&J> xE*..=..=U*@17*J> nh.x{ $.@$.@$.@nh.J> 17*u.@sq*X`+ME+Nc&mh.mh.Nc&sq*sq*sq*sq*sq*sq*sq*sq*u3$'W+B#@`b&!D+`b&B#@B#@!D+!D+!D+`b&`b&B#@B#@B#@!D+`b&{y%'W+'W+{y%B#@B#@`b&B#@{y%'W+'W+{y%`b&{h&)p#&b=dr=dr==Z+l]#dr=o!#o!#o!#dr=l]#&b=yE#.X+.X+5,+qK+1<#vC#vC#1<#qK+5,+qK+qK+qK+SO+ X+1<#1<#1<#,C+,C+,C+,C+,C+,C+,C+,C+&s*xr*xr*xr*xr*xr*xr*VD@%z&#d+`E&3]&3]&`E&#d+<:*-.%-.%-.%-.%-.%-.%-.%0, y{+k^.lt*|7.PS@9&+x}*q)@u]#u]#$(+T_+T_+T_+T_+|m.>S%+y&+y&+y&+y&+y&+y&+y&+y&.y&.y&%z&)A& == == ==!D+`b&`b&!D+>n.>n.{y%Y@$'W+'W+'W+'W+'W+'W+'W+'W+t=+WD@>H%Xw&)A&)A&+y&@d+)A&.y&Be+z$$mq+z$$", "P7.P7.P7.P7.P7.P7.P7.6!.6!.P7.P7.9, 9, G6.G6.PI.PI.PI.Hu+8v.8v.VW.VW.VW.hY.X)@hY.8v.Hu+8v.Vh.c+#wH.c+#15*{$+15*~$+w/;sN%OK.sN%OK.sN%OK.sN%sN%x5.is@dD.Vh.x5.O7.is@Vh._r+O7.Vh.dD.is@O7.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7.xX%xX%_r+N7._r+O7.is@Vh._r+xX%O7.x5.x5.O7.xX%_r+O7._r+N7._r+x5.is@x5.xX%x5.is@x5.xX%M7.M7.xX%is@_r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7._r+xX%O7.x5.O7.O7.O7.xX%xX%xX%xX%xX%M7._r+O7.O7.xX%xX%x5.Vh.xX%_r+M7.%0+%0+M7._r+xX%is@O7._r+M7.%0+%0+%0+M7.N7.N7.N7.N7.N7.N7.N7.N7.$B#%0+M7.N7.xX%x5.is@Vh.v4.v4.v4.v4.v4.v4.v4.v4.,H.q3.0q.<3+<3+0q.q3.,H.N7.N7.N7.N7.N7.N7.N7.N7.%0+%0+%0+%0+%0+%0+%0+%0+M7.$B#@9.$B#N7._r+_r+M7.@9.@9.@9.@9.@9.@9.@9.@9.N7.N7.N7.N7.N7.N7.N7.N7.@9.@9.@9.@9.@9.@9.@9.@9.M7.M7.M7.M7.M7.M7.M7.M7.xX%N7.%0+M7._r+xX%N7.M7.v4.v4.<3+<3+<3+0q.0q.0q.bp.:(+,H.0q.<3+v4.v4.<3+$B#%0+M7._r+_r+M7.%0+$B#eO@eO@eO@eO@eO@eO@eO@eO@q3.q3.q3.q3.q3.q3.q3.q3.0q.q3.,H.q3.<3+v4.q3.:(+M7.M7.%0+%0+$B#$B#@9.@9.$B#$B#$B#$B#$B#$B#$B#$B#:(+:(+:(+:(+:(+:(+:(+:(+q3.q3.q3.q3.q3.q3.q3.q3.@9.@9.@9.$B#%0+M7.M7.M7.N7.N7.M7.%0+$B#@9.eO@eO@@9.@9.@9.@9.@9.@9.@9.@9.$B#$B#%0+%0+M7.N7.N7.N7.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.bQ#bQ#+9.+9.bp.:(+:(+,H.j(#bp.q3.:(+,H.<3+q3.+9.,H.,H.q3.q3.0q.<3+<3+<3+,H.,H.,H.,H.,H.,H.,H.,H.q3.,H.bp.+9.+9.bp.,H.q3.bp.bp.bp.bp.bp.bp.bp.bp.q3.,H.,H.:(+:(+bp.bp.+9.:(+:(+,H.,H.,H.q3.q3.q3.u4.m;.-1.-1.-1.-1.yy.-1.`q@72.-1.w5.u4.K7.L7.qt+B2*s~=RQ=g-;q(+7&=&9;@W=M!;*9;=9;-9;;9;>9;,9;a};]&$y6 S%{h&0, 0, {h&>S%%' X@$Be+Xw&Xw&+y&.y&.y&.y&.y&.y&%z& ==cl.cl.Y(;%z&M]*;n.>n.>n.!D+`b&`b&`b&>n.!D+B#@{y%{y%B#@!D+>n..y&.y&.y&.y&.y&.y&.y&.y&%z&+y&Xw&.y& ==.== ==)A&<:*<:*<:*<:*<:*-.%-.%-.%<:*<:*<:*<:*<:*<:*<:*<:*.y&.y&.y&.y&.y&.y&.y&.y&z$$@d+Be+Xw&+y&%z&)A&)A&=^@,C+,C+=^@=^@,C+,C+=^@&s*&s*&s*xr*xr*uq*uq*uq*jM#jM#jM#jM#5,+5,+$' $' zM+_($ X+qK+$' qK+SO+SO+Fu+uq*xr*xr*,C+Fu+,C+xr*)p#Fu+xr*&s*xr*uq*uq*kt*x*$'W+'W+'W+{y%{y%B#@B#@B#@B#@B#@B#@{y%'W+Y@$Y@$nh.9&+:{+q)@v]#:{+u]#d #';$';$';$US+23+23+OP*xE*>S%%z&)A&%z&+y&Xw&+y&.y& == ==)A&)A&%z&.y&.y&.y&%' X@$x*$x*$X@$~h&0, &, 0, {h&{h&~h&~h&>S%>S%%' Xw&+y&+y&.y&.y&%z&%z&)A&+y&.y&%z&+y&@d+mq+", "P7.P7.P7.P7.P7.P7.P7.P7.P7.P7.P7.P7.P7.P7.P7.Hu+8v.8v.8v.8v.VW.VW.VW.VW.G6.X)@hY.8v.Hu+VW.Vh.c+#wH.wH.15*15*w/;w/;w/;OK.OK.OK.OK.OK.OK.OK.OK.x5.is@dD.Vh.x5.O7.is@Vh._r+x5.Vh.dD.is@O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.O7.xX%xX%xX%O7.x5.Vh._r+xX%O7.x5.x5.O7.xX%_r+O7._r+N7._r+x5.is@x5.xX%O7.x5.is@O7.N7.N7._r+x5.xX%xX%xX%xX%xX%xX%xX%xX%_r+_r+N7.N7.N7._r+xX%O7.xX%xX%xX%xX%xX%O7.O7.O7.M7._r+O7.xX%_r+_r+O7.is@xX%_r+M7.%0+%0+M7._r+xX%x5.O7._r+M7.%0+%0+%0+M7.N7.N7.N7.N7.N7.N7.N7.N7.O7.O7.xX%_r+N7.M7.%0+%0+v4.v4.v4.v4.v4.v4.v4.v4.q3.0q.<3+v4.v4.<3+0q.q3.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+%0+%0+%0+%0+%0+M7.$B#@9.$B#N7._r+N7.M7.@9.@9.@9.@9.@9.@9.@9.@9.M7.M7.M7.M7.M7.M7.M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#M7.M7.M7.M7.M7.M7.M7.M7._r+M7.%0+%0+N7._r+N7.%0+v4.v4.<3+<3+<3+0q.0q.0q.bp.:(+q3.0q.<3+v4.v4.<3+$B#%0+M7.N7.N7.M7.%0+$B#@9.@9.@9.@9.@9.@9.@9.@9.q3.q3.q3.q3.q3.q3.q3.q3.<3+q3.q3.0q.v4.v4.0q.,H.M7.M7.%0+%0+$B#$B#@9.@9.$B#$B#$B#$B#$B#$B#$B#$B#q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.$B#$B#$B#$B#$B#%0+%0+%0+N7.N7.M7.%0+$B#@9.eO@eO@@9.@9.@9.@9.@9.@9.@9.@9.@9.$B#$B#%0+%0+M7.M7.M7.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.+9.+9.bp.bp.bp.bp.:(+:(+o&=:(+,H.bp.bp.0q.0q.bp.,H.,H.,H.q3.q3.q3.q3.0q.,H.,H.,H.,H.,H.,H.,H.,H.q3.,H.bp.+9.+9.bp.,H.q3.:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.,H.:(+:(+bp.bp.bp.:(+:(+,H.,H.,H.q3.q3.q3.u4.u4.u4.u4.u4.u4.u4.u4.E6.N7+u4.u4.u4.E6.tF.#:+K7.s2@Fv+%R+5{;I==3K*)9;!9;~9;{9;]9;^9;/9;(9;x};*2 5q E5 so #Ef 84*RY-84*>b Q]$xx=V,;xx=l:;>b p3&! >! t/@iQ y6 {0@Ok#Ok#<9;'_; _;e6;[9;D<*rZ eg+He+=g@eg+J7.w5.72.[d.oO b^*A!;78*7v.oO ,^@Q!;yy.oO [d.zo=[d.62.zI*+9.:(+bp.o&=b,+bQ#bp.bp.+9.bQ#o&=o&=bQ#+9.bp.:^+D6.t4.o3.v5.o3.o3.o3.D6.o3.t4.p3.D6.n3.v5.p3.o&=j(#Q+&j(#bQ#+9.bQ#b,+b,+b,+b,+b,+j(#j(#j(#v5.r4.J{+TF+TF+s4.+T+[(+ :*h;#n3.j(#b,+o&=b,+e6#& =w{@w{@w{@CI#CI#CI#CI#CI#Q+&Q+&Q+&Q+&Q+&Q+&Q+&n3.n3.s4.s4.m3.h;#sQ@CI#CI#Q+&Q+&& =& =pN%pN%pN%& =S%>S%~h&{h&0, &, Av&ZQ.>S%~h&{h&0, 0, {h&~h&>S%Xw&Xw&+y&+y&.y&.y&%z&%z&%z&.y&.y&)A&.==3P ==%z&-.%-.%-.%<:*<:*#d+#d+#d+-.%<:*TO&`E&`E&TO&<:*-.%#d+#d+#d+#d+#d+#d+#d+#d+M]*<:*#d+#d+-.%-.%<:*TO&-.%-.%-.%<:*#d+TO&TO&TO&<:*<:*<:*<:*<:*<:*<:*<:*.y&.y&.y&.y&.y&.y&.y&.y&Be+Be+Xw&+y&+y&.y&%z&kt*VD@Fu+Fu+&s*&s*,C+,C+=^@&s*&s*xr*xr*xr*uq*uq*uq*jM#5,+5,+5,+$' $' qK+qK+_($1<#SO+qK+qK+qK+SO+ X+Fu+uq*xr*xr*,C+Fu+,C+xr*$x+,C+&s*&s*uq*Fu+Fu+u{@X@$'W+'W+'W+{y%{y%B#@B#@'W+{y%{y%B#@B#@B#@B#@*$@nh.u]#:{+v]#:{+u]#d #';$d #d #';$';$US+US+23+17*{h&)A&)A&%z&Be+z$$@d+Be+%z&.y&.y&.y&.y&+y&+y&+y&x*$x*$u3$u3$x*$%' ~h&{h&{h&{h&{h&~h&>S%>S%>S%%' Xw&Xw&Xw&+y&.y&.y&.y&%z&.y&)A&)A&%z&Xw&@d+", "P7.P7.P7.P7.P7.P7.P7.Y6.Y6.H;@P7.P7.6!.5!.5!.9, 9, 9, VW.VW.VW.VW.VW.9, G6.hY.G6.VW.8v.VW.is@c+#wH.15*15*w/;w/;w/;OK.15*15*15*15*15*15*15*15*x5.is@dD.Vh.x5.O7.is@Vh.xX%x5.Vh.Vh.x5.O7.x5.is@x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@is@is@is@is@Vh.is@x5.O7.O7.O7.x5.is@_r+xX%O7.x5.x5.O7.xX%_r+O7._r+N7._r+x5.is@x5.xX%_r+x5.is@is@xX%N7._r+xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.xX%_r+N7.N7.N7._r+_r+N7._r+_r+xX%xX%O7.O7.x5.%0+N7.xX%xX%N7.N7._r+O7._r+N7.N7.M7.M7.N7.N7._r+O7.xX%_r+M7.M7.%0+M7.M7.N7.N7.N7.N7.N7.N7.N7.N7.x5.O7.xX%N7.M7.$B#@9.eO@v4.v4.v4.v4.v4.v4.v4.v4.0q.<3+v4.v4.v4.v4.<3+0q.%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+M7.%0+@9.%0+N7._r+N7.%0+$B#$B#$B#$B#$B#$B#$B#$B#%0+%0+%0+%0+%0+%0+%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.N7.%0+@9.$B#M7.N7.M7.$B#v4.v4.<3+<3+<3+0q.0q.0q.:(+,H.q3.<3+<3+v4.<3+<3+%0+%0+M7.N7.N7.M7.%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#q3.q3.q3.q3.q3.q3.q3.q3.v4.<3+0q.<3+#k.#k.<3+q3.%0+%0+%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#0q.0q.0q.0q.0q.0q.0q.0q.q3.q3.q3.q3.q3.q3.q3.q3.%0+%0+$B#$B#$B#$B#@9.@9.N7.M7.M7.%0+$B#@9.@9.eO@@9.@9.@9.@9.@9.@9.@9.@9.eO@@9.@9.@9.$B#$B#$B#$B#,H.,H.,H.,H.,H.,H.,H.,H.bp.bp.bp.bp.bp.bp.bp.bp.:(+:(+:(+bp.bp.bp.bp.bp.+9.,H.,H.bQ#+9.q3.0q.:(+,H.,H.,H.,H.,H.:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+bp.bp.:(+:(+,H.:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.,H.:(+:(+bp.bp.bp.:(+:(+,H.,H.,H.q3.q3.q3.u4.u4.u4.u4.u4.u4.u4.u4.N7+N7+u4.u4.N7+E6.tF.#:+u4.L7.PK.o4@@=@b%;k==7<;2~;}9;|9;19;29;39;49;59;V4 1' H< 1' s Qg 1u h< Lc cK#[e nQ +A@+A@_9;Fv@If 76+Lu X1@'E Qg 56 T: gr#.<#R: o5&Up dZ-=p Xp Vy=b 6j=3 '3 `h#8h S%~h&0, Av&ZQ.B9.B9.{h&{h&0, &, &, 0, {h&{h&.y&.y&.y&.y&%z&%z&%z&%z& ==%z&+y&.y&)A&.== ==)A&-.%<:*<:*<:*#d+#d+#d+#d+<:*#d+#d+TO&TO&#d+#d+<:*#d+#d+#d+#d+#d+#d+#d+#d+RD*-.%#d+#d+<:*<:*TO&3]&M]*-.%<:*#d+TO&`E&3]&O4%<:*<:*<:*<:*<:*<:*<:*<:*+y&+y&+y&+y&+y&+y&+y&+y&+y&+y&+y&+y&+y&+y&+y&VD@_|*$x+tq*xr*xr*Fu+,C+=^@&s*xr*xr*xr*uq*uq*,C+,C+$' $' $' qK+qK+SO+SO+SO+SO+SO+qK+qK+qK+SO+ X+1<#Fu+uq*xr*xr*,C+Fu+,C+xr*Fu+uq*xr*uq*Fu+)p#)p#lx@X@$'W+'W+{y%{y%B#@B#@B#@'W+{y%B#@B#@`b&!D+>n.h~ x{ u]#:{+:{+u]#d #';$US+d #d #d #d #';$';$';$zi.0, == ==.y&Be+mq+mq+@d+Be+Be+Be+Xw&Xw&Xw&Xw&Xw&u3$u3$=|$u3$x*$X@$%' >S%~h&~h&~h&~h&>S%>S%>S%%' Be+Be+Xw&Xw&Xw&+y&+y&+y&%z&)A& ==)A&+y&Be+", "P7.P7.P7.P7.P7.P7.P7.iI.iI.Y6.H;@6!.5!.$9.$9.hY.hY.G6.9, 9, VW.VW.8v.G6.G6.G6.G6.VW.VW.VW.x5.{$+15*15*w/;w/;w/;OK.OK.15*15*15*15*15*15*15*{$+x5.is@dD.Vh.x5.O7.is@Vh.O7.is@dD.Vh.x5.O7.x5.Vh.x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@is@is@is@is@dD.dD.Vh.is@x5.x5.x5.x5.xX%xX%O7.O7.O7.O7.xX%xX%O7._r+N7._r+x5.is@x5.xX%N7.O7.Vh.Vh.O7._r+N7._r+O7.O7.O7.O7.O7.O7.O7.O7.x5.O7.xX%_r+N7.N7.N7.N7.M7.N7.N7._r+xX%O7.O7.x5.%0+N7._r+_r+M7.%0+N7.xX%N7.N7.N7.N7.N7.N7.N7.N7.xX%_r+_r+N7.M7.M7.M7.M7.N7.N7.N7.N7.N7.N7.N7.N7.%0+%0+%0+M7.M7.M7.M7.N7.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.$B#$B#$B#$B#$B#$B#$B#$B#%0+%0+%0+%0+%0+%0+%0+%0+N7.%0+$B#%0+N7._r+M7.%0+$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.$B#@9.@9.%0+M7.%0+@9.v4.v4.<3+<3+<3+0q.0q.0q.,H.q3.0q.<3+v4.v4.<3+<3+%0+M7.M7.M7.M7.M7.M7.%0+M7.M7.M7.M7.M7.M7.M7.M7.q3.q3.q3.q3.q3.q3.q3.q3.#k.<3+<3+v4.J Ld Qg Ld 1u 56 z0 Q_-)4;d9;e9;BH.v!==d+=d+dN=dN=He+hP.$Z*%U*J7.u4.U%+zo=oO cw._{.oO ;1.A!;4|;Q!;oO oO Q!;[d.A!;U%+bQ#+9.+9.+9.bQ#bQ#bQ#+9.bp.+9.bQ#o&=o&=bQ#+9.bp.w5.p3.:^+D6.t4.t4.D6.D6.D6.o3.t4.p3.D6.n3.v5.p3.o&=j(#Q+&b,+bQ#+9.bQ#o&=+9.bQ#bQ#bQ#o&=o&=b,+o3. :*}>#ot+J{+u5.r4.s4.C6.t4.t4.o&=b,+b,+j(#& =S%~h&{h&0, 0, 0, 0, &, &, &, &, 0, 0, %z&%z&%z&%z&%z&)A&)A&)A&3P )A&+y&Xw&.y& == ==)A&<:*<:*#d+#d+#d+#d+#d+#d+#d+#d+#d+#d+#d+#d+#d+#d+TO&TO&#d+#d+#d+#d+<:*<:*M]*<:*TO&#d+<:*<:*TO&3]&#d+#d+#d+TO&`E&`E&3]&3]&#d+#d+#d+#d+#d+#d+#d+#d+Xw&Xw&Xw&Xw&Xw&Xw&Xw&Xw&%z&%z&%z&.y&+y&+y&+y&_|*u{@)p#)p#uq*xr*Fu+,C+&s*xr*xr*xr*uq*uq*,C+,C+,C+qK+qK+SO+SO+ X+ X+ X+1<#$' $' $' qK+qK+SO+ X+1<#Fu+uq*xr*xr*,C+Fu+,C+xr*tq*,C+uq*,C+$x+)p#$x+ps+X@$'W+{y%{y%B#@B#@`b&`b&`b&`b&`b&`b&!D+>n.>n.S%>S%>S%>S%>S%>S%>S%>S%>S%Be+Be+Be+Be+Xw&Xw&Xw&Xw&.y&%z&)A&%z&Xw&Be+", "P7.P7.P7.P7.P7.P7.P7.iI.iI.Y6.H;@6!.5!.$9.$9.hY.hY.G6.9, 9, VW.VW.8v.hY.G6.9, 9, 9, 9, VW.O7.{$+{$+~$+~$+~$+sN%sN%sN%{$+{$+{$+{$+{$+{$+{$+{$+x5.is@dD.Vh.x5.O7.is@Vh.x5.Vh.dD.Vh.x5.O7.is@dD.x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7.dD.Vh.Vh.Vh.is@x5.O7.O7.O7.O7.xX%xX%xX%xX%O7.O7.O7._r+N7._r+x5.is@x5.xX%N7.O7.Vh.Vh.O7._r+N7._r+xX%xX%xX%xX%xX%xX%xX%xX%x5.O7.xX%_r+N7.N7.N7.N7.N7.N7.N7._r+_r+xX%xX%xX%M7._r+xX%_r+M7.%0+M7._r+N7.N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+N7.N7.M7.M7.N7.N7.N7.N7.N7.N7.N7.N7.eO@@9.$B#%0+M7._r+xX%xX%v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.$B#$B#$B#$B#$B#$B#$B#$B#M7.M7.M7.M7.M7.M7.M7.M7._r+M7.$B#%0+N7.N7.M7.$B#%0+%0+%0+%0+%0+%0+%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.$B#@9.@9.%0+M7.%0+@9.v4.v4.<3+<3+<3+0q.0q.0q.q3.0q.<3+v4.v4.v4.<3+<3+M7.M7.M7.%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.q3.q3.q3.q3.q3.q3.q3.q3.#k.<3+<3+v4. G> ZA G~ 1A IT#n{ X X n{ gP@FT FT 3h BR@n)$d)%d)%d)%*0@2|@Z:@3|@H~ %W@+9 I~ G0 0~ S:@Nx@~)#Q~#y&#c1# ~(;~(;H9 H9 !7&h2&]m U,;i2&^o :n 1z=^o ^o ^o ^o ^o ^o ^o ]p=XH $|*q{ R &l9;W##jX@l .Jf il Qg A6 so -h@`r `r k8 2' Jc Jc w' k8 s7 tt .' f[@Jc Og Qh O3 Lg .U#HX-XY-m9;CH.3@+8J.%R+lX.D<&D<&%U*L7.K7.c3+o3.p3.U%+~Z%J!.K!.:{.62.`q@k5+a,+U%+62.62.U%+:{.:{.U%++9.bQ#bQ#bQ#+9.+9.+9.bQ#bp.+9.bQ#o&=o&=bQ#+9.bp.w5.p3.:^+D6.t4.t4.D6.D6.D6.o3.t4.p3.D6.n3.v5.p3.j(#Q+&w{@Q+&b,+bQ#o&=j(#b,+b,+o&=o&=bQ#bQ#bQ#:^+[(+}>#U'#ot+s4.C6.[(+ :*o3.o3.j(#Q+&w{@w{@n.`b&`b&`b&!D+h~ nh.d #';$US+US+US+23+23+d #d #d #d #d #u]#u]#x{ >S%%z&)A&%z&.y&+y&%z& ==mq+z$$z$$@d+@d+Be+Xw&Xw&X@$X@$%' %' >S%>S%>S%>S%%' %' %' %' >S%>S%>S%>S%Xw&Xw&Xw&Xw&Be+Be+Be+Be+Be++y&.y&+y&Be+@d+", "P7.P7.P7.P7.P7.P7.P7.Y6.Y6.H;@P7.P7.6!.5!.5!.9, 9, 9, VW.VW.VW.VW.VW.hY.G6.VW.VW.G6.G6.VW.8v.x5.~$+~$+~$+sN%sN%1.&1.&{$+{$+{$+{$+{$+{$+{$+{$+x5.is@dD.Vh.x5.O7.is@Vh.is@Vh.dD.Vh.x5.x5.Vh.%j.x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%x5.x5.is@is@is@x5.O7.O7.x5.O7.xX%_r+_r+xX%O7.x5.O7._r+N7._r+x5.is@x5.xX%_r+x5.is@is@xX%N7._r+xX%_r+_r+_r+_r+_r+_r+_r+_r+O7.xX%_r+N7.N7.N7._r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.xX%O7.xX%N7.%0+N7._r+M7.N7.N7._r+_r+N7.N7.M7.M7.N7._r+_r+_r+N7.M7.M7.N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.M7.M7.N7.N7.N7.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.<3+0q.0q.<3+v4.v4.%0+%0+%0+%0+%0+%0+%0+%0+M7.M7.M7.M7.M7.M7.M7.M7._r+M7.%0+%0+N7.N7.%0+@9.%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+%0+N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.N7.%0+@9.$B#M7.N7.M7.$B#v4.v4.<3+<3+<3+0q.0q.0q.0q.<3+v4.v4.v4.v4.<3+<3+N7.M7.%0+%0+%0+%0+M7.N7.M7.M7.M7.M7.M7.M7.M7.M7.q3.q3.q3.q3.q3.q3.q3.q3.v4.<3+0q.<3+#k.#k.<3+q3.$B#$B#$B#$B#%0+%0+%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#:(+:(+:(+:(+:(+:(+:(+:(+q3.q3.q3.q3.q3.q3.q3.q3.@9.@9.@9.@9.eO@eO@eO@eO@%0+%0+%0+%0+$B#$B#$B#$B#@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.eO@eO@)Z%)Z%)Z%,H.,H.,H.,H.,H.,H.,H.,H.bp.bp.bp.bp.bp.bp.bp.bp.,H.,H.,H.,H.,H.:(+:(+:(+:(+0q.q3.+9.bQ#,H.,H.+9.,H.,H.,H.,H.,H.:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.bp.:(+:(+,H.,H.:(+:(+bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.bp.:(+:(+,H.,H.,H.:(+:(+,H.,H.,H.q3.q3.q3.u4.u4.u4.u4.u4.u4.u4.u4.w5.u4.N7+E6.tF.tF.E6.`q@oO b^*7v.U>.*B.$Z*Yj@@=@5{;g-;g1*;!;L%=n9;o9;p9;A(;q9;qW.r9;T6;`7;o@#s9;C8;C8;Ct C> xu xu 4, 4, ET X %S n{ {Z#Pe Lf Oe ^D%^D%0V 0V 0V 7K#Ko=Ko=1M#%W@,P 4|@,P %W@$S#{M ]8@4|@,P %W@$S#EN#K!$I~ va G> :t S-@T} T} T} T} [} [} [} [} [} T} T} T} v[ Sj X-@-[ R1 Kc ]3 4 h2 h2 R1 u[ u[ -[ X-@Q} ` Oh xu :f f[@.;@3) qa P: {(#k%#Ig H0-t9;u9;*-;}~;=d+G&;G&;2b+Yj@eg+J7.h|.J7.I7.o3.w5.U%+T`%62.72.a,+U%+`q@a,+:{.U%+62.62.62.U%+U%+:{.bp.bQ#o&=bQ#+9.bp.+9.o&=bp.+9.bQ#o&=o&=bQ#+9.bp.p3.:^+D6.t4.t4.t4.t4.D6.D6.o3.t4.p3.D6.n3.v5.p3.j(#w{@CI#w{@b,+o&=b,+Q+&Q+&j(#j(#b,+o&=bQ#+9.:^+s4.ot+U'#}>#[(+[(+ :* :*v5.n3.w{@w{@CI#w{@S%%' %' &, 0, {h&{h&{h&{h&0, &, %z&%z&%z&%z&.y&.y&.y&.y&.==%z&+y&+y&.y&%z&.y&+y&`E&TO&TO&TO&#d+#d+#d+#d+TO&#d+#d+<:*<:*#d+#d+TO&`E&`E&TO&#d+#d+<:*-.%-.%`E&3]&O4%`E&<:*-.%-.%#d+O4%3]&`E&TO&#d+<:*-.%M]*TO&TO&TO&TO&TO&TO&TO&TO&.y&.y&.y&.y&.y&.y&.y&.y&)A&)A&)A&%z&.y&.y&+y&+y&VD@Fu+Fu+xr*xr*tq*tq*xr*uq*uq*uq*,C+,C+Fu+Fu+Fu+qK+qK+SO+SO+ X+ X+ X+1<#5,+$' qK+qK+SO+qK+qK+$' Fu+uq*xr*xr*,C+Fu+,C+xr*)p#tq*Fu+tq*$x+tq*uq*(-=%' {y%B#@B#@`b&`b&`b&!D+]*=-~@>n.`b&B#@B#@`b&Bj.J> US+23+23+23+23+US+';$';$';$';$';$d #d #d #nh.x*$+y&%z&%z&+y&+y&%z&.==Be+Be+Be+Xw&Xw&Xw&Xw&Xw&%' %' >S%~h&~h&>S%>S%%' X@$X@$%' %' %' >S%>S%>S%+y&+y&+y&Xw&Xw&Xw&Be+Be+@d+Xw&+y&Xw&@d+z$$", "O~.O~.O~.O~.O~.O~.O~.O~.O~.O~.O~.O~.O~.O~.O~.Hu+8v.8v.8v.8v.VW.VW.VW.X)@G6.8v.VW.G6.hY.VW.Hu+is@is@is@Vh.Vh.dD.dD.dD.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.x5.is@dD.Vh.x5.O7.is@Vh.Vh.dD.dD.is@O7.x5.Vh.Su$x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7._r+xX%O7.is@is@x5.O7.xX%x5.O7.xX%_r+_r+xX%O7.x5.O7._r+N7._r+x5.is@x5.xX%O7.x5.is@O7.N7.N7._r+x5.N7.N7.N7.N7.N7.N7.N7.N7._r+_r+N7.N7.N7._r+xX%O7.xX%xX%_r+_r+N7.M7.%0+%0+xX%O7.x5.O7._r+M7.N7.xX%%0+M7._r+xX%xX%_r+M7.%0+%0+M7._r+xX%xX%_r+N7.M7.N7.N7.N7.N7.N7.N7.N7.N7.xX%xX%xX%_r+N7.N7.M7.M7.v4.v4.v4.v4.v4.v4.v4.v4.v4.<3+0q.q3.q3.0q.<3+v4.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.N7.N7.N7.N7.N7.N7.xX%N7.%0+%0+M7.N7.%0+@9.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7._r+M7.%0+%0+N7._r+N7.%0+v4.v4.<3+<3+<3+0q.0q.0q.<3+v4.v4.#k.#k.v4.<3+<3+N7.M7.%0+$B#$B#%0+M7.N7.%0+%0+%0+%0+%0+%0+%0+%0+q3.q3.q3.q3.q3.q3.q3.q3.<3+q3.q3.0q.v4.v4.0q.,H.@9.@9.$B#$B#%0+%0+M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.q3.q3.q3.q3.q3.)Z%eO@eO@eO@eO@@9.@9.@9.$B#$B#$B#$B#%0+%0+%0+%0+@9.@9.@9.@9.@9.@9.@9.@9.$B#$B#$B#@9.eO@eO@eO@)Z%,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+,H.,H.,H.,H.q3.q3.bp.0q.0q.bp.bp.,H.:(+o&=,H.,H.,H.q3.q3.q3.q3.0q.,H.,H.,H.,H.,H.,H.,H.,H.+9.bp.,H.q3.q3.,H.bp.+9.,H.,H.,H.,H.,H.,H.,H.,H.bp.bp.bp.:(+:(+,H.,H.,H.:(+:(+,H.,H.,H.q3.q3.q3.u4.u4.u4.u4.u4.u4.u4.u4.w5.u4.N7+tF.tF.tF.E6.72.;1.x^#7:.7v.7v.72.p3.c3+`M*= @V3*mX.oP*;O*J~;v9;;[;w9;x9;y9;a};)[;y^-2G@'<;'<;8(;8(;]_$]_$^_$C> #9 g*$9_$Th Th 9_$J}%AD ]@$]@$z9;z9;z9;JT JT ``$Fv@K!$|i&,P at=,P |i&$S#NH$$S#NH$Ox@|i&,P at=3|@TH [r@}C }C [r@ G> G> G> T} T} T} S-@S-@S-@S-@G0 |E@A9;B9;C9;fI#En#c0&,! Lf X >z $S &2@Eh W' K| ~2+q>*b!;^_$0+%F; T/*Mi tb )3 Zk U3 *o=GX-4';D9;u9;5{;1r%%R+lX.XO+0M.hP.$Z*n4@g6@J7.:^+t4.t4.p3.w5.n3.D6.w5.v5.D6.E6.D6.:^+:^+:^+p3.w5.p3.:^+D6.bp.bQ#b,+o&=bp.:(++9.o&=bp.+9.bQ#o&=o&=bQ#+9.bp.:^+D6.t4.o3.v5.o3.o3.o3.D6.o3.t4.p3.D6.n3.v5.p3.b,+Q+&w{@Q+&o&=bQ#o&=j(#j(#j(#j(#j(#b,+b,+b,+o3.r4.TF+U'#Gr& :*[(+C6.s4.v5.n3.w{@w{@w{@Q+&{4%gm#j(#j(#j(#j(#Q+&Q+&Q+&Q+&bQ#bQ#o&=b,+j(#Q+&Q+&h;#o3.C6.C6.C6.v5.v5.j(#j(#b,+b,+{4%{4%,r+,r+,r+{4%0+>0+sq*Nc&ME+X`+X`+Nc&Nc&Nc&Nc&mh.mh.sq*mh.X`+Nc&sq*>0+mh.X`+Nc&sq*>0+sq*Nc&X`+Nc&sq*%' ~h&{h&{h&>S%>S%0, Av&%' %' %' >S%~h&{h&{h&{h&0, 0, {h&{h&{h&{h&{h&~h&0, {h&~h&>S%>S%~h&{h&0, {h&{h&~h&~h&>S%>S%%' %' 0, {h&~h&~h&0, 0, >S%x*$%' %' %' >S%>S%~h&~h&~h&%' >S%{h&0, 0, {h&>S%%' X@$%' >S%>S%{h&{h&0, &, ~h&%' X@$%' ~h&{h&~h&%' >S%>S%>S%~h&{h&0, 0, 0, >S%>S%>S%>S%>S%>S%>S%>S%0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {h&{h&{h&{h&~h&~h&PB@z9.z9.kt*kt*ps+ps+z9.z9.z9._|*_|*u{@u{@u{@u{@mh.mh.mh.Nc&Nc&Nc&X`+X`+>0+sq*mh.Nc&Nc&sq*>0+,0+ X+qK+$' $' SO+ X+SO+$' SO+qK+qK+ X+1<#1<#qK+,0+>S%>S%>S%~h&~h&~h&{h&{h&Av&0, ~h&%' %' >S%{h&xE*xE*OP*x{+x{+OP*US+';$u]#23+23+US+US+';$';$d #nh.u3$X@$>S%%' X@$x*$%' ~h&{h&~h&~h&~h&~h&>S%>S%>S%x*$X@$>S%>S%>S%%' X@$x*$x*$X@$X@$X@$%' >S%>S%>S%{h&~h&~h&~h&>S%%' %' %' X@$>S%~h&>S%%' X@$", "O~.O~.O~.O~.O~.O~.O~.r: r: O~.O~.O~.O~.Lv.Lv.PI.PI.PI.Hu+8v.8v.VW.VW.X)@G6.8v.VW.G6.hY.VW.Hu+is@is@Vh.Vh.Vh.dD.dD.dD.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.x5.is@dD.Vh.x5.O7.is@Vh.dD.dD.dD.is@O7.x5.dD.Su$x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@is@is@is@is@M7.N7.xX%x5.is@x5.O7.xX%x5.O7.xX%_r+_r+xX%O7.x5.O7._r+N7._r+x5.is@x5.xX%x5.is@x5.xX%M7.M7.xX%is@M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.N7.N7._r+xX%O7.x5.x5.O7.xX%_r+M7.%0+$B#$B#O7.x5.is@x5._r+N7._r+xX%%0+M7._r+xX%xX%_r+M7.%0+%0+M7.N7.xX%xX%_r+N7.M7.N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+_r+_r+_r+_r+xX%v4.v4.v4.v4.v4.v4.v4.v4.<3+0q.q3.,H.,H.q3.0q.<3+N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.xX%N7.%0+%0+M7.N7.%0+@9.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.xX%N7.%0+M7._r+xX%N7.M7.v4.v4.<3+<3+<3+0q.0q.0q.<3+v4.#k.#k.#k.v4.<3+<3+_r+M7.%0+$B#$B#%0+M7._r+$B#$B#$B#$B#$B#$B#$B#$B#q3.q3.q3.q3.q3.q3.q3.q3.0q.q3.,H.q3.<3+v4.q3.:(+@9.@9.$B#$B#%0+%0+M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.,X@,X@)Z%eO@eO@@9.$B#$B#$B#$B#$B#$B#%0+%0+%0+%0+@9.@9.@9.@9.@9.@9.@9.@9.%0+%0+$B#$B#@9.eO@eO@eO@,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.bp.:(+:(+,H.q3.q3.0q.0q.+9.q3.<3+,H.:(+q3.bp.j(#,H.,H.q3.q3.0q.<3+<3+<3+,H.,H.,H.,H.,H.,H.,H.,H.+9.bp.,H.q3.q3.,H.bp.+9.<3+<3+<3+<3+<3+<3+<3+<3++9.bp.bp.:(+:(+,H.,H.q3.:(+:(+,H.,H.,H.q3.q3.q3.u4.u4.u4.u4.u4.u4.u4.u4.p3.u4.E6.tF.#:+tF.E6.72.@=.x^##*&4/*Q!;oO K!.*B.L7.0M.0M.XO+v!=*-;k~;>&=E9;F9;G9;H9;I9;J9;m6;a};K9;K9;'<;'<;t(;t(;e[@C8;IT#m>@]M$0_$Tg FR@{L$`~#}E%M%$9m&]@$9'$9'$z9;}M#^C@Q^#.W@K!$PT@K!$.W@Gv@|i&Ox@|i&,P at=,P at=4|@ZA :t .r .r .r G> ,J cq cq cq cq ,J 1k G> G> G> S-@.r .r :t G> 1k ,J cq cq cq ,J ,J 1k G> G> ZA Tn$$`&L9;M9;Ko=+X `;${Z#Cn Ok 4q *2@Dh vd+>| 6$s9;N9;N9;g.@N9;.E Mj Qi 9(-DX%7u-%';fe-72-O4.O9;5{;e-;.+;nj*zH.QK.eg+hP.PK.%U*c3+%U*u4.:^+D6.:^+u4.n3.D6.p3.h;#D6.tF.p3.p3.:^+:^+p3.w5.w5.:^+D6.:(+bQ#b,+o&=bp.:(++9.b,+bp.+9.bQ#o&=o&=bQ#+9.bp.D6.t4.o3.v5.v5.v5.v5.o3.D6.o3.t4.p3.D6.n3.v5.p3.o&=b,+j(#b,+bQ#bp.+9.o&=o&=b,+b,+j(#Q+&Q+&w{@h;#l3.TF+}>#Gn=[(+C6.u5. 9.o3.v5.Q+&Q+&j(#b,+8&+av#+9.+9.bQ#bQ#o&=b,+b,+b,++9.bQ#bQ#o&=j(#Q+&Q+&h;#:^+ :*[(+C6.n3.sQ@S`%S`%b,+b,+{4%{4%,r+,r+,r+{4%93#w{@Q+&Q+&Q+&Q+&w{@CI#b,+Q+&w{@j(#o&=b,+S`%uG#j(#w{@S`%&r=&r=S`%w{@j(#w{@w{@w{@w{@w{@w{@w{@w{@CI#CI#CI#w{@Q+&j(#j(#j(#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#CI#&r=sX%CI#Q+&Q+&Q+&w{@CI#S`%CI#w{@Q+&b,+o&=bQ#bQ#w{@w{@w{@w{@w{@w{@w{@w{@Q+&w{@CI#sX%sX%CI#w{@Q+&CI#CI#CI#CI#CI#CI#CI#CI#l]#iM#yE#yE#&b=l]#iM#.X+.X+dr=^u=l]#iM#l]#l]#tq*X`+Nc&sq*,0+>0+sq*X`+*Z+ME+ME+X`+X`+Nc&mh.mh.mh.sq*Nc&X`+Nc&sq*>0+mh.X`+mh.>0+,0+sq*X`+ME+X`+Nc&%' ~h&0, 0, {h&{h&0, Av&>S%>S%>S%>S%>S%%' %' %' %' %' >S%~h&~h&{h&{h&{h&0, {h&>S%%' %' >S%{h&0, ~h&~h&~h&>S%%' %' X@$X@${h&~h&~h&0, &, 0, %' u3$X@$X@$%' %' >S%~h&~h&~h&%' >S%{h&0, 0, {h&>S%%' X@$%' %' >S%{h&0, 0, &, 0, ~h&%' %' >S%>S%X@$u3$0, 0, 0, {h&{h&{h&{h&{h&>S%>S%>S%>S%>S%>S%>S%>S%&, &, &, &, &, &, &, &, {h&{h&{h&{h&{h&{h&{h&{h&sy=kt*VD@PB@kt*ps+lx@_|*z9.z9._|*_|*u{@u{@u{@ps+sq*sq*sq*mh.mh.Nc&Nc&Nc&sq*mh.Nc&Nc&mh.sq*,0+yi. X+qK+$' $' SO+ X+SO+$' 5,+jM#5,+SO+1<#_($ X+$' mh.>S%>S%~h&~h&{h&{h&{h&{h&>S%%' X@$%' ~h&&, ..=U*@[f.[f.[f.x{+US+d #:{+OP*OP*23+23+US+';$';$';$y*$X@$%' x*$=|$Eo+2&$u3$&, &, 0, 0, {h&~h&~h&~h&u3$x*$X@$%' %' X@$u3$=|$x*$x*$X@$X@$%' %' >S%>S%0, {h&{h&~h&~h&>S%>S%%' %' ~h&{h&{h&>S%%' ", "4% %% ~% ~% d( +h.+h.~% ~% ~% ~% ~% ~% ~% O~.8v.8v.VW.9, 9, G6.hY.hY.8v.8v.8v.VW.VW.VW.VW.VW.is@is@is@is@is@is@is@is@O7.x5.Vh.dD.dD.Vh.x5.O7.is@is@is@is@is@is@is@is@x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.xX%xX%xX%_r+_r+_r+_r+xX%O7.O7.x5.x5.xX%O7.is@Vh.Vh.is@O7.xX%Vh.is@O7.xX%xX%O7.is@Vh.xX%xX%xX%xX%xX%xX%xX%xX%N7.xX%x5.x5.O7.x5.Vh.%j.is@is@is@is@x5.O7.xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+M7.N7.N7._r+xX%xX%O7.O7.Vh.x5.xX%N7.M7.M7.N7.N7.$B#$B#%0+%0+M7.N7.N7._r+M7.N7.N7._r+_r+N7.N7.M7.N7.N7.N7.N7.N7.N7.N7.N7.v4.v4.v4.v4.v4.v4.v4.v4.v4.v4.<3+<3+<3+0q.0q.0q.$B#M7.N7.N7.%0+$B#%0+N7.M7.M7.M7.M7.M7.M7.M7.M7._r+_r+_r+N7.N7.M7.M7.M7.%0+%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+M7.N7.N7._r+xX%xX%xX%_r+_r+M7.%0+$B#@9.@9.xX%_r+_r+N7.N7.M7.M7.%0+<3+<3+<3+<3+<3+<3+<3+<3+q3.q3.q3.q3.q3.q3.q3.q3.M7.M7.M7.M7.M7.M7.M7.M7.)Z%eO@$B#%0+%0+$B#eO@)Z%<3+<3+<3+0q.q3.,H.,H.,H.v4.v4.v4.<3+0q.0q.q3.q3.$B#$B#$B#$B#$B#$B#$B#$B#@9.%0+M7.%0+$B#@9.$B#M7.0q.0q.0q.0q.0q.0q.0q.0q.q3.q3.q3.q3.q3.q3.q3.q3.$B#eO@,X@)Z%@9.$B#eO@)Z%@9.@9.@9.@9.@9.@9.@9.@9.)Z%@9.$B#%0+%0+$B#@9.)Z%M7.%0+$B#@9.eO@eO@eO@eO@:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.q3.0q.0q.q3.,H.:(+,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+bp.bp.bp.+9.+9.+9.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+0q.<3+<3+q3.:(+:(+0q.#k.:(+:(+:(+,H.q3.q3.0q.0q.,H.0q.<3+0q.,H.,H.q3.<3+,H.,H.,H.,H.,H.,H.,H.,H.tF.tF.tF.tF.tF.tF.tF.tF.tF.E6.N7+u4.u4.N7+E6.K!.4/*X8;u!+>c.oO Q!;J!.tF.o3.n4@h|.o4@o4@%R+nj*P4.h2;P9;Q9;R9;S9;I9;T9; |;(3;U9;wD-1G@tv&tv&92-V9;I< fp =l =l ET Uj 7V Lf Pe ^D%^D%^D%h*$h*$0V 0V (V#I~ jq$I~ K!$EN#K!${M jq$I~ $S#%W@Ox@%W@Ox@>8 ,J hp hp 4, 4, s7 s7 wo hp hp hp hp hp hp hp hp y6 z6 z6 z6 s) s) hp hp s) s) hp 4, s7 wo wo V-@(C@:Q#S%%' >S%{h&{h&X@$=|$=|$=|$x*$X@$%' %' %' X@$X@$>S%{h&~h&%' X@$%' ~h&{h&>S%%' >S%{h&0, {h&>S%J> J> J> J> J> J> J> J> J> J> 17*..=1.+3<@17*x{ {h&{h&{h&{h&{h&{h&{h&{h&&, {h&%' x*$x*$X@$%' ~h&17*17*J> zi.zi.nh.x{ x{ nh.nh.nh.nh.nh.nh.x{ x{ o2@k#@4,+wE*4,+o2@jS.y{+jS.k#@r-@r-@h^+wE*wE*h^+KL${**r-@h^+wE*h^+jk@{**4,+wE*wE*h^+r-@r-@jk@jk@4,+4,+4,+4,+4,+4,+4,+4,+d;+d;+d;+o2@k#@4,+4,+4,+..=U*@xE*..=3<@..=17*nh.nh.x{ $.@c> $.@nh.J> &, PN.3P ==.y&+y&Xw&+y&+y&.y&.y&.y&.y&.y&.y&.y&.y&x*$x*$x*$X@$%' %' >S%>S%>S%%' %' >S%~h&>S%x*$;~@o)@o)@o)@~~@~~@xu#xu#xu#o)@o)@o)@o)@o)@o)@o)@o)@*Z+Nc&>0+>0+sq*Nc&Nc&Nc&>0+Nc&ME+X`+>0+u.@,0+wE*17*US+d #u]#u]#d #US+23+';$';$d #d #d #u]#u]#u]#%.@0@@c> x{ x{ x{ c> c> zi.zi.zi.zi.zi.zi.zi.zi.%' X@$u3$=|$=|$u3$X@$%' >S%>S%>S%>S%>S%>S%>S%>S%zi.nh.nh.x{ $.@c> c> c> 17*zi.x{ x{ nh.zi.", "%% ~% ~% ~% ~% d( d( %% %% ~% ~% ~% ~% d( d( 1% VW.9, 9, 9, 9, G6.G6.VW.VW.VW.VW.VW.VW.VW.8v.is@is@is@is@is@is@is@is@O7.x5.Vh.dD.dD.Vh.x5.O7.is@is@is@is@is@is@is@is@x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.xX%xX%xX%xX%xX%xX%xX%O7.x5.x5.x5.is@xX%O7.is@Vh.Vh.is@O7.xX%Vh.is@O7.xX%xX%O7.is@Vh.xX%xX%xX%xX%xX%xX%xX%xX%O7.x5.is@x5.xX%_r+xX%x5.O7.O7.x5.x5.x5.O7.xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%_r+_r+_r+_r+_r+xX%xX%xX%is@x5.xX%N7.M7.M7.N7.N7.M7.M7.M7.M7.N7.N7.N7.N7.N7.N7._r+xX%xX%_r+N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.<3+<3+<3+<3+<3+<3+<3+<3+v4.v4.<3+<3+<3+0q.0q.0q.$B#M7.N7.N7.%0+$B#%0+N7.M7.M7.M7.M7.M7.M7.M7.M7._r+_r+N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+%0+%0+%0+%0+%0+M7.M7.N7.N7.N7.N7._r+_r+_r+_r+N7.M7.M7.%0+$B#$B#_r+_r+_r+N7.M7.M7.M7.%0+<3+<3+<3+<3+<3+<3+<3+<3+0q.0q.0q.0q.0q.0q.0q.0q.M7.M7.M7.M7.M7.M7.M7.M7.@9.@9.$B#$B#$B#$B#@9.@9.0q.0q.0q.0q.q3.q3.q3.q3.v4.v4.v4.<3+0q.0q.0q.q3.$B#$B#$B#$B#$B#$B#$B#$B#@9.%0+M7.%0+$B#@9.$B#M7.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.$B#eO@,X@)Z%@9.$B#@9.)Z%@9.@9.@9.@9.@9.@9.@9.@9.eO@@9.$B#%0+%0+$B#@9.eO@%0+$B#@9.eO@eO@eO@@9.@9.q3.q3.q3.q3.q3.q3.q3.q3.bp.:(+,H.q3.q3.,H.:(+bp.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+bp.bp.+9.+9.+9.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.q3.,H.:(+,H.<3+c.yy._{.-1.K!.w5.u4.$Z*L7.s2@o4@hP.K3.BQ-s};(1;E9;Y9;Z9;`9; 0;]4;$<;.0;Ai+*~;*~;*~;9P@K| `, /n t*@)m !d@fp so X jl X Dn {Z#~~#8V ~~#.<@.<@.<@H~ <@ <@>8 >8 >8 <@H~ .<@.<@H~ H~ :,@,J s) s) hp 4, 4, 4, s7 4, 4, 4, 4, 4, 4, 4, 4, s) s) s) hp hp 4, 4, 4, _g _g _g k8 2' 2' w' v[ {M $S#[e EN#|C Sr W-@4, u*@Z' D^$vI@ 6$o@#]m+k$$Y';TO-Bp-ct-y`+$i-(1-)X-#/;+0;/0+Yo=|o=,1-,1-{v*nj*8J.SW#hP.hP.SW#&o@h|.D6.:^+w5.u4.-1.J!.U%+:{.D6.D6.D6.D6.:^+:^+:^+:^+:^+D6.o3.t4.:^+p3.D6.t4.bp.+9.bQ#bQ#bQ#bQ#+9.bp.bQ#bQ#bQ#o&=o&=o&=b,+b,+o3.o3.o3.o3.o3.o3.o3.o3.D6.D6.D6.t4.t4.t4.t4.t4.j(#j(#j(#b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+o3.C6.U'#ot+ot+s4.C6.+T++T+n3.n3.Q+&Q+&Q+&Q+&& =& =w{@Q+&b,+o&=o&=b,+Q+&w{@b,+j(#Q+&CI#CI#CI#w{@n3.v5.[(+ :*[(+v5.n3.Q+&j(#Q+&j(#{4%e6#qN%R4%qN%& =93#j(#o&=o&=Q+&w{@Q+&b,+Q+&j(#j(#w{@S`%sX%CI#Q+&CI#CI#CI#CI#w{@w{@w{@w{@CI#CI#w{@w{@Q+&Q+&j(#j(#w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@j(#Q+&CI#sX%sX%S`%w{@Q+&CI#CI#CI#w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@Q+&j(#j(#b,+j(#Q+&CI#S`%sX%Q+&Q+&&r=sX%j(#Q+&&r=.X+.X+.X+yE#yE#iM#iM#iM#l]#l]#&b=&b=&b=&b=iM#tq*,0+~h&>S%~h&0, 0, >S%x*$x*$X@$%' >S%>S%>S%%' %' X@$>S%{h&~h&%' X@$>S%~h&&, {h&>S%>S%{h&{h&>S%X@$17*17*17*17*17*17*17*17*J> J> J> xE*..=U*@J> x{ 0, 0, 0, 0, 0, 0, 0, 0, &, 0, >S%X@$X@$%' >S%{h&zi.zi.zi.zi.J> J> J> J> $.@$.@x{ x{ nh.zi.zi.J> k#@k#@4,+wE*wE*4,+o2@d;+d;+4,+r-@r-@h^+wE*wE*r-@h^+h^+wE*wE*h^+r-@jk@{**h^+h^+h^+h^+h^+wE*wE*wE*4,+4,+4,+4,+4,+4,+4,+4,+k#@k#@k#@k#@4,+4,+4,+4,+17*J> J> 17*U*@xE*zi.$.@x{ x{ $.@$.@$.@x{ nh.zi.0, %z&+y&Xw&Xw&+y&.y&%z&.y&.y&.y&.y&.y&.y&.y&.y&X@$X@$X@$%' >S%>S%>S%~h&%' X@$X@$%' >S%>S%u3$2&$jk@[I+q,@q,@o)@o)@o)@~~@o)@o)@o)@o)@o)@o)@o)@o)@ME+mh.,0+,0+sq*Nc&Nc&mh.>0+mh.ME+X`+sq*,0+,0+wE*17*US+US+';$d #';$';$US+';$';$d #d #d #u]#u]#u]#y*$c> x{ nh.nh.nh.x{ $.@nh.nh.nh.nh.nh.nh.nh.nh.~h&>S%%' X@$X@$%' >S%~h&>S%>S%>S%>S%>S%>S%>S%>S%nh.nh.nh.nh.nh.nh.nh.zi.zi.nh.$.@$.@nh.zi.", "0' |% |% |% |% $% $% &) $% $% |% |% 0' 0' +h.n` G6.9, 9, 9, 9, VW.VW.G6.G6.9, 9, VW.8v.8v.Hu+9, 9, 9, 9, 9, 9, 9, 9, VW.9, 9, G6.G6.9, 9, VW.is@is@is@is@is@is@is@is@x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.xX%xX%xX%O7.O7.x5.x5.x5.is@is@is@xX%O7.is@Vh.Vh.is@O7.xX%Vh.is@O7.xX%xX%O7.is@Vh.xX%xX%xX%xX%xX%xX%xX%xX%is@Vh.Vh.x5.N7.%0+%0+M7.N7._r+xX%O7.O7.O7.xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%xX%_r+_r+_r+_r+_r+x5.x5.xX%_r+N7.N7.N7.N7._r+_r+_r+_r+N7.N7.N7.N7._r+_r+xX%O7.O7.xX%_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.0q.0q.0q.0q.0q.0q.0q.0q.v4.v4.<3+<3+<3+0q.0q.0q.$B#M7.N7.N7.%0+$B#%0+N7.M7.M7.M7.M7.M7.M7.M7.M7._r+N7.N7.N7.M7.M7.%0+%0+M7.M7.M7.M7.M7.M7.M7.%0+%0+%0+%0+%0+%0+%0+%0+%0+_r+_r+N7.N7.N7.N7.M7.M7.N7.N7.N7.M7.M7.M7.M7.M7.N7.N7.N7.N7.M7.M7.M7.%0+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+M7.M7.M7.M7.M7.M7.M7.M7.%0+$B#@9.@9.@9.@9.$B#%0+q3.q3.q3.q3.0q.0q.0q.0q.v4.v4.<3+<3+<3+0q.0q.0q.$B#$B#$B#$B#$B#$B#$B#$B#@9.%0+M7.%0+$B#@9.$B#M7.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.q3.q3.q3.q3.q3.$B#eO@)Z%eO@$B#$B#@9.)Z%@9.@9.@9.@9.@9.@9.@9.@9.eO@@9.$B#$B#$B#$B#@9.eO@@9.@9.eO@eO@eO@@9.$B#%0+0q.0q.0q.0q.0q.0q.0q.0q.bp.:(+:(+,H.,H.:(+:(+bp.,H.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+bp.bp.+9.+9.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+bQ#bp.,H.,H.:(+,H.<3+'.#:+#:+I1.I1.L7.L7.L7.V3*@0;#0;@<;$0;%0;&0;*0;=0;,(;-0;;0;>0;,0;Uh#'0;92-S4 z2 n.#*2 B2 *2 x8+C8;`, w*@H< Z' !d@:f t*@wo S-@S-@S-@S-@S-@S-@S-@S-@1k ,J ,J cq cq ,J 1k G> z6 H; H; H; tt tt tt tt Oh Oh Oh Oh Oh Oh Oh Oh Oh Oh Oh xu xu D5 D5 D5 tt tt tt Oh Oh Oh Oh s7 Yq +' R} 36 v[ _m Gn Ri [) E; o$$m.# q ^4+z2 ^4+9P@)0;!0;Wh#18;~0;R~;_{*#P*s~=k~;@=@QK.N|@Yj@s2@Yj@Yj@SW#hP.K7.&o@h|.h|.D6.:^+J!.-1.-1.J!._{.:{.:^+J7.J7.J7.n4@n4@n4@n4@J7.c3+g6@g6@n4@J7.n4@g6@+9.bp.bp.:(+:(+bp.bp.+9.bQ#bQ#bQ#o&=o&=o&=b,+b,+o3.o3.o3.o3.o3.o3.o3.o3.t4.t4.t4.t4.t4.D6.D6.D6.+9.+9.bQ#bQ#bQ#bQ#o&=o&=b,+b,+b,+b,+b,+b,+b,+o3.+T+}>#U'#ot+s4.s4.C6.C6.n3.n3.Q+&Q+&Q+&Q+&& =& =w{@Q+&b,+o&=o&=b,+Q+&w{@j(#j(#Q+&w{@CI#w{@w{@n3.o3.+T++T+[(+D6.t4.Q+&S`%Q+&j(#{4%e6#FU%qN%FU%e6#& =j(#b,+j(#w{@w{@j(#o&=w{@j(#o&=b,+Q+&CI#w{@Q+&Q+&w{@w{@w{@w{@CI#CI#CI#w{@w{@w{@w{@Q+&Q+&Q+&Q+&w{@w{@w{@w{@w{@w{@w{@w{@j(#j(#j(#j(#j(#j(#j(#j(#b,+Q+&S`%&r=&r=CI#j(#bQ#CI#CI#w{@Q+&j(#b,+b,+o&=w{@w{@w{@w{@w{@w{@w{@w{@CI#CI#CI#CI#CI#CI#CI#CI#w{@w{@Q+&Q+&Q+&w{@CI#S`%S`%Q+&j(#S`%S`%Q+&Q+&S`%.X+.X+.X+yE#yE#iM#iM#iM#&b=&b=l]#l]#l]#l]#=Z+uq*0, !D+`b&!D+>n.>n.`b&{y%B#@`b&`b&!D+`b&B#@{y%{y%{y%`b&!D+`b&{y%{y%B#@!D+;n.!D+B#@B#@!D+!D+B#@'W+17*23+23+23+23+23+23+23+23+';$d #';$23+23+US+nh.0, 0, 0, 0, 0, 0, 0, 0, &, 0, ~h&>S%%' >S%{h&0, nh.d #';$US+23+OP*OP*x{+h]@v]#:{+u]#d #US+23+23+FG*zw*GJ@lC&lC&lC&GJ@GJ@aH*GJ@ (& (&lC&GJ@lC& (&(k=aH*>H*GJ@ (&p)@p)@p)@ (& (&lC&lC&GJ@zw*>H*>H*zw*zw*zw*zw*zw*zw*zw*zw*lC&GJ@GJ@GJ@GJ@zw*zw*pK+';$d #u]#d #US+';$u]#h]@:{+u]#u]#d #u]#:{+:{+c> 3&$O4%O4%3]&`E&#d+-.%M]*TO&TO&TO&TO&TO&TO&TO&TO&{y%{y%B#@B#@B#@`b&`b&`b&{y%3&$3&$'W+{y%{y%Y@$2&${**|7.p)@p)@ (& (& (&lC&zw*zw*zw*zw*zw*zw*zw*xu#SO+$' mO#mO#5,+qK+$' 5,+5,+qK+ X+ X+$' 5,+5,+wE*17*23+OP*23+23+US+d #d #';$';$d #d #d #u]#u]#u]#u]#u]#';$US+US+US+';$';$u]#u]#u]#u]#u]#u]#u]#x{ {h&{h&~h&>S%>S%~h&{h&{h&%' %' %' %' %' %' %' %' x{ u]#d #';$US+US+23+OP*u]#:{+h]@v]#d #';$", "8c 0' |% |% $% &) &) &) &) $% |% |% 0' 8c +h._j.hY.G6.9, 9, VW.8v.8v.X)@hY.G6.9, VW.8v.Hu+Hu+9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@x5.x5.O7.O7.xX%xX%is@is@is@is@is@is@is@is@xX%O7.is@Vh.Vh.is@O7.xX%Vh.is@O7.xX%xX%O7.is@Vh.xX%xX%xX%xX%xX%xX%xX%xX%x5.is@is@O7.M7.$B#$B#%0+%0+M7._r+xX%O7.O7.xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.xX%xX%_r+N7.N7.M7.O7.O7.xX%_r+_r+N7.N7.N7.O7.O7.xX%xX%_r+N7.N7.M7.xX%xX%O7.x5.x5.O7.xX%xX%N7.N7.N7.N7.N7.N7.N7.N7.q3.q3.q3.q3.q3.q3.q3.q3.v4.v4.<3+<3+<3+0q.0q.0q.$B#M7.N7.N7.%0+$B#%0+N7.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.N7.M7.M7.%0+%0+%0+N7.M7.M7.M7.M7.%0+%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.xX%xX%_r+N7.N7.M7.%0+%0+M7.M7.M7.N7.N7.N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.<3+<3+<3+<3+<3+<3+<3+<3+v4.v4.v4.v4.v4.v4.v4.v4.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+@9.eO@eO@@9.%0+M7.,H.,H.,H.q3.0q.<3+<3+<3+<3+<3+<3+<3+<3+<3+0q.0q.$B#$B#$B#$B#$B#$B#$B#$B#@9.%0+M7.%0+$B#@9.$B#M7.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.q3.q3.q3.q3.q3.$B#@9.)Z%eO@$B#%0+@9.eO@@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.$B#$B#@9.@9.@9.eO@eO@eO@eO@@9.$B#%0+M7.q3.q3.q3.q3.q3.q3.q3.q3.bp.:(+:(+:(+:(+:(+:(+bp.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+bp.bp.bp.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(++9.:(+q3.,H.:(+:(+q3.<3+,H.,H.,H.,H.,H.,H.q3.q3.:(+q3.0q.q3.,H.:(+,H.0q.,H.,H.,H.,H.,H.,H.,H.,H.w5.w5.w5.w5.w5.w5.w5.w5.E6.E6.N7+N7+N7+N7+E6.`q@yy.cw.ue.ue.cw.72.`q@>'.sF.^C.I1.L7.$Z*$Z*L7.DM+R|*m(;{0;m(;{0;]0;G~;v9;v9;^0;x~;/0;(0;_0;:0;>0;<0;x<;}B+Ai+[0;G]@JC HL-63 8(;hB#e[@~2+^_$k8;k8;Ct xu Oh tt H; v6 W1@W1@D5 xu xu Oh xu D5 :f f[@H; H; H; tt tt tt tt tt tt tt tt tt tt tt tt tt xu xu xu D5 D5 D5 :f :f tt tt Oh Oh Oh Oh Oh Oh p7 f8 Gz f8 9h Y3 +4@z4 }0;|0;)0;Vh#>0;10;20;Kv#30;40;50;60;70;cM*Bk=j!;)!=os%os%SW#L7.K7.u4.$Z*0M.Yj@SW#SW#&o@&o@h|.%U*D6.:^+J!.-1.-1.J!._{.:{.p3.%U*%U*J7.n4@c3+c3+c3+n4@c3+I7.g6@n4@J7.c3+I7.o&=bQ#bp.:(+:(+bp.bQ#o&=bQ#bQ#bQ#o&=o&=o&=b,+b,+:^+:^+:^+:^+:^+:^+:^+:^+v5.o3.o3.t4.D6.D6.:^+:^+bp.bp.+9.bQ#bQ#o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+o3. :*Gr&U'#ot+m3.m3.s4.s4.h;#h;#w{@w{@w{@w{@n.!D+|m.xE*OP*OP*OP*OP*OP*OP*OP*OP*';$u]#u]#';$US+US+';$&, &, &, &, &, &, &, &, &, 0, {h&~h&~h&{h&0, 17*zi.';$US+US+23+23+OP*OP*:{+:{+u]#u]#d #';$';$S>+pK+zw*GJ@lC& (& (& (&p)@zw*lC&p)@ (&GJ@GJ@lC& (&16.(k=>H*lC& (&lC&GJ@zw*lC&lC&GJ@GJ@zw*zw*zw*>H*GJ@GJ@GJ@GJ@GJ@GJ@GJ@GJ@p)@p)@ (&lC&lC&GJ@GJ@zw*';$d #:{+u]#d #d #:{+h]@:{+u]#d #';$d #:{+h]@%.@3&$3]&3]&`E&TO&<:*-.%M]*TO&TO&TO&TO&TO&TO&TO&TO&`b&`b&`b&`b&`b&`b&`b&`b&'W+3&$Y@$Y@$'W+{y%3&$0@@jk@p)@p)@ (& (&lC&lC&lC&zw*zw*zw*zw*zw*zw*zw*zw*qK+jM#mO#mO#5,+$' 5,+jM#$' qK+SO+SO+SO+qK+$' ~~@17*OP*x{+x{+OP*US+d #:{+';$';$d #d #d #u]#u]#u]#';$';$US+23+23+23+23+23+:{+:{+:{+:{+:{+:{+:{+:{+~h&~h&~h&>S%>S%~h&~h&~h&%' %' %' %' %' %' %' x{ x{ u]#d #d #';$';$US+US+:{+h]@M8@v]#d #';$", "8c 0' |% |% $% &) &) $% $% $% |% |% 0' 0' d( _j.hY.G6.9, 9, VW.8v.8v.X)@X)@hY.G6.9, VW.8v.Hu+WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.WW.9, is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@is@x5.x5.O7.O7.O7.is@is@is@is@is@is@is@is@xX%O7.is@Vh.Vh.is@O7.xX%Vh.is@O7.xX%xX%O7.is@Vh.xX%xX%xX%xX%xX%xX%xX%xX%_r+O7.x5.xX%N7.M7.M7._r+%0+M7._r+xX%O7.O7.xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%O7.O7.xX%xX%_r+N7.N7.M7.xX%xX%xX%xX%_r+_r+N7.N7.O7.O7.xX%xX%_r+N7.N7.M7.xX%xX%O7.x5.x5.O7.xX%xX%N7.N7.N7.N7.N7.N7.N7.N7.q3.q3.q3.q3.q3.q3.q3.q3.v4.v4.<3+<3+<3+0q.0q.0q.$B#M7.N7.N7.%0+$B#%0+N7.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.M7.M7.%0+%0+$B#$B#N7.N7.N7.M7.%0+%0+$B#$B#_r+_r+_r+_r+_r+_r+_r+_r+xX%xX%_r+N7.N7.M7.%0+%0+N7.N7.N7.N7.N7._r+_r+_r+%0+%0+%0+%0+M7.M7.M7.M7.<3+<3+<3+<3+<3+<3+<3+<3+v4.v4.v4.v4.v4.v4.v4.v4.M7.M7.M7.M7.M7.M7.M7.M7.N7.M7.$B#@9.@9.$B#M7.N7.,H.,H.,H.q3.0q.<3+<3+<3+0q.0q.<3+<3+<3+<3+<3+<3+$B#$B#$B#$B#$B#$B#$B#$B#@9.%0+M7.%0+$B#@9.$B#M7.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.q3.q3.q3.q3.q3.%0+@9.eO@@9.$B#%0+$B#eO@@9.@9.@9.@9.@9.@9.@9.@9.$B#@9.@9.@9.@9.@9.@9.$B#eO@eO@eO@eO@@9.$B#%0+M7.:(+:(+:(+:(+:(+:(+:(+:(+,H.:(+:(+:(+:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+bp.bp.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+,H.0q.<3+0q.:(+bp.:(+,H.q3.q3.,H.,H.,H.,H.,H.,H.:(+,H.0q.q3.:(+bp.,H.q3.,H.,H.,H.,H.,H.,H.,H.,H.w5.w5.w5.w5.w5.w5.w5.w5.N7+N7+E6.E6.E6.E6.N7+N7+72.K!.>'.>'.K!.E6.E6.tF.*B.#:+L7.K7.K7.K7.K7.hP.80;Qr&Qr&J7;K6;_(;b7;90;00;a0;b0;c0;d0;e0;P=;;0;f0;g0;w};h0;i0;>9;j0;k0;l0;m0;w<;m0;n0;o0;{6;'(;)(#vI@vI@*2 O7;$($$($hB#O7;$($hB#hB#hB#$($O7;{4+C> xu xu xu xu Oh Oh Oh Oh Oh Oh Oh Oh Oh Oh Oh xu D5 D5 D5 :f :f f[@f[@x) x) x) qa qa qa q) Qi ,a p0;#c p0;q0;q0;_ $r0;s0;t0;u0;v0;w0;x0;y0;l=;z0;A0;B0;C0;a7;D0;D0;E0;nE&R<+,X+Ba@pt+ :*&1.+T+%U*0M.h|.&o@&o@h|.p3.p3.:{.U%+J!.-1.yy.oO _{.:{.%U*0M.0M.N|@eg+=g@=g@=g@N|@=g@D<&D<&eg+N|@eg+g6@b,+o&=+9.bp.bp.+9.o&=b,+bQ#bQ#bQ#o&=o&=o&=b,+b,+:^+:^+:^+:^+:^+:^+:^+:^+v5.o3.o3.t4.D6.D6.:^+:^+bQ#bQ#bQ#o&=b,+j(#j(#j(#b,+b,+b,+b,+b,+b,+b,+o3. :*Gr&U'#ot+m3.m3.s4.s4.n3.n3.Q+&Q+&Q+&Q+&& =& =w{@Q+&b,+o&=o&=b,+Q+&w{@w{@w{@w{@Q+&Q+&Q+&Q+&h;#v5.r4.u5.m3.o3.o3.CI#uG#w{@j(#gm#{4%pN%FU%6l%gm#gm#b,+w{@CI#w{@Q+&b,+b,+S`%Q+&o&=bQ#b,+Q+&Q+&j(#b,+j(#j(#Q+&w{@w{@CI#CI#Q+&Q+&Q+&Q+&w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&sX%S`%Q+&j(#b,+b,+Q+&Q+&Q+&Q+&Q+&w{@w{@CI#CI#CI#w{@w{@w{@w{@w{@w{@w{@w{@Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&CI#CI#CI#CI#CI#CI#w{@w{@CI#w{@j(#j(#w{@S`%w{@b,+.X+.X+.X+yE#yE#iM#iM#iM#&b=&b=l]#l]#=Z+dr=dr=&s*x*$'W+{y%B#@{y%{y%{y%{y%B#@B#@`b&`b&B#@{y%3&$Y@$B#@!D+>n.!D+B#@B#@`b&>n.{y%'W+3&${y%>n.-~@;n.h~ 17*23+23+23+23+23+23+23+OP*';$u]#u]#';$US+US+';$0, 0, 0, 0, 0, 0, 0, 0, 0, {h&{h&{h&{h&{h&0, 17*17*23+23+US+US+';$';$';$';$';$';$d #u]#u]#:{+q(#S>+GJ@GJ@lC& (& (&p)@|7.lC& (&p)@ (&GJ@zw*lC&p)@(k=>H*zw*lC&lC&zw*aH*(k=zw*zw*zw*GJ@GJ@lC&lC& (&GJ@GJ@GJ@GJ@GJ@GJ@GJ@GJ@p)@p)@p)@ (&lC&lC&GJ@GJ@23+';$u]#u]#';$';$d #:{+:{+u]#';$';$d #u]#h]@0@@`b&#d+<:*<:*<:*<:*<:*<:*TO&TO&TO&TO&TO&TO&TO&TO&`b&`b&`b&`b&`b&`b&`b&`b&{y%3&$+d+Y@$'W+{y%'W+c> r-@lC&lC&lC&GJ@GJ@zw*zw*zw*zw*zw*zw*zw*zw*zw*zw*$' jM#mO#jM#$' qK+5,+mO#qK+qK+qK+SO+ X+ X+qK+~~@zi.US+OP*OP*OP*US+d #:{+';$';$d #d #d #u]#u]#u]#US+';$US+US+US+23+OP*OP*:{+:{+:{+:{+:{+:{+:{+:{+X@$%' %' %' %' %' %' X@$X@$X@$X@$X@$X@$X@$X@$$.@nh.d #d #u]#u]#:{+:{+:{+:{+v]#h]@v]#d #';$", "0' |% |% |% |% $% $% |% |% |% |% |% |% |% ~% n` G6.9, 9, 9, 9, VW.VW.X)@hY.hY.G6.9, 9, VW.VW.WW.WW.WW.WW.WW.WW.WW.WW.n` WW.WW.1% 1% WW.WW.G6.9, is@is@is@is@is@is@is@Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.is@is@is@x5.x5.O7.O7.is@is@is@x5.x5.x5.O7.O7.xX%O7.is@Vh.Vh.is@O7.xX%Vh.is@O7.xX%xX%O7.is@Vh.xX%xX%xX%xX%xX%xX%xX%xX%N7.xX%O7.O7._r+N7.xX%x5.N7._r+xX%O7.O7.O7.xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+xX%xX%xX%_r+_r+_r+_r+_r+N7._r+xX%xX%xX%xX%_r+N7._r+_r+_r+_r+N7.N7.N7.N7._r+_r+xX%O7.O7.xX%_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.0q.0q.0q.0q.0q.0q.0q.0q.v4.v4.<3+<3+<3+0q.0q.0q.$B#M7.N7.N7.%0+$B#%0+N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+$B#$B#$B#_r+_r+N7.M7.%0+%0+$B#$B#_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.M7.M7._r+_r+_r+_r+_r+N7.N7.N7.$B#$B#%0+%0+%0+M7.M7.M7.<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+$B#$B#%0+M7.M7.q3.q3.q3.q3.0q.0q.0q.0q.0q.0q.0q.<3+<3+<3+v4.v4.$B#$B#$B#$B#$B#$B#$B#$B#@9.%0+M7.%0+$B#@9.$B#M7.0q.0q.0q.0q.0q.0q.0q.0q.q3.q3.q3.q3.q3.q3.q3.q3.%0+$B#eO@@9.%0+M7.$B#eO@@9.@9.@9.@9.@9.@9.@9.@9.$B#$B#@9.eO@eO@@9.$B#$B#@9.@9.eO@eO@eO@@9.$B#%0+:(+:(+:(+:(+:(+:(+:(+:(+q3.q3.,H.:(+:(+,H.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.,H.,H.:(+:(+:(+bp.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+<3+v4.a;,a;'a;)a;!a;~a;{a;]a;e(;Kt&^a;/a;,$@Ba@It&S>.bR#}-.[-.m;.J7.0M.h|.h|.h|.h|.p3.:^+:{.U%+J!.-1.yy.oO _{.:{.J7.N|@N|@N|@eg+eg+eg+eg+0M.eg+=g@eg+0M.0M.N|@=g@b,+o&=o&=bQ#bQ#o&=o&=b,+bQ#bQ#bQ#o&=o&=o&=b,+b,+o3.o3.o3.o3.o3.o3.o3.o3.t4.t4.t4.t4.t4.D6.D6.D6.b,+b,+b,+j(#j(#j(#j(#Q+&b,+b,+b,+b,+b,+b,+b,+o3.+T+}>#U'#ot+s4.s4.C6.C6.v5.v5.j(#j(#j(#j(#e6#e6#w{@Q+&b,+o&=o&=b,+Q+&w{@CI#CI#w{@Q+&j(#Q+&Q+&h;#v5.s4.r4.r4.h;#h;#CI#S`%w{@j(#gm#{4%6l%pN%,r+8&+gm#j(#w{@w{@j(#b,+j(#Q+&S`%w{@b,+b,+Q+&w{@Q+&b,+j(#j(#j(#Q+&Q+&Q+&Q+&w{@Q+&Q+&Q+&Q+&w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@&r=CI#j(#bQ#bQ#b,+w{@S`%j(#j(#Q+&w{@CI#S`%S`%sX%w{@w{@w{@w{@w{@w{@w{@w{@j(#j(#j(#j(#j(#j(#j(#j(#w{@w{@CI#CI#CI#w{@Q+&j(#CI#CI#Q+&b,+w{@*r=S`%o&=.X+.X+.X+yE#yE#iM#iM#iM#&b=&b=l]#l]#l]#l]#=Z+uq*2&$3&${y%{y%'W+3&$'W+{y%{y%{y%B#@B#@B#@{y%'W+3&$B#@!D+>n.>n.`b&B#@`b&>n.{y%'W+3&${y%>n.-~@;n.h~ J> US+US+US+US+US+US+US+23+';$d #';$23+23+US+d #{h&{h&{h&{h&{h&{h&{h&{h&~h&~h&~h&~h&{h&{h&{h&J> 17*23+US+';$d #u]#u]#:{+23+23+US+d #u]#:{+v]#PS@9&+lC&GJ@GJ@GJ@lC& (&p)@ (&|7.|7. (&GJ@zw*lC&p)@zw*zw*GJ@GJ@zw*>H*aH*aH*zw*zw*GJ@lC& (&p)@p)@|7.lC&lC&lC&lC&lC&lC&lC&lC& (& (& (&lC&lC&lC&lC&GJ@x{+US+d #u]#';$US+';$u]#d #d #';$';$';$d #u]#$.@>n.-.%M]*M]*-.%<:*#d+TO&`E&`E&`E&`E&`E&`E&`E&`E&`b&`b&`b&B#@B#@B#@{y%{y%B#@'W+Y@$Y@${y%`b&B#@x{ h^+lC&lC&GJ@GJ@zw*zw*zw*zw*zw*zw*zw*zw*zw*zw*zw*$' 5,+jM#$' qK+SO+5,+mO#qK+$' $' SO+1<#1<# X+o)@nh.d #';$US+US+';$';$d #';$';$d #d #d #u]#u]#u]#';$d #d #d #d #';$US+23+u]#u]#u]#u]#u]#u]#u]#u]#u3$x*$x*$X@$X@$x*$x*$u3$X@$X@$X@$X@$X@$X@$X@$$.@zi.d #d #u]#:{+v]#h]@h]@';$u]#:{+u]#';$US+", "$% |% |% |% |% 0' 0' 8c 8c 0' |% |% $% &) 4% 1% VW.9, 9, 9, 9, G6.G6.hY.G6.G6.G6.G6.G6.G6.G6.WW.WW.WW.WW.WW.WW.WW.WW._j.n` 1% 6% 6% 1% n` hY.9, is@is@is@is@is@is@is@Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.is@is@is@x5.x5.x5.is@x5.x5.x5.O7.xX%xX%xX%xX%O7.is@Vh.Vh.is@O7.xX%Vh.is@O7.xX%xX%O7.is@Vh.xX%xX%xX%xX%xX%xX%xX%xX%xX%O7.is@x5.xX%_r+O7.is@O7.O7.x5.x5.x5.O7.xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+_r+_r+xX%xX%xX%M7.N7.xX%O7.O7.xX%_r+N7.M7.M7.M7.M7.N7.N7.N7.N7.N7.N7._r+xX%xX%_r+N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.<3+<3+<3+<3+<3+<3+<3+<3+v4.v4.<3+<3+<3+0q.0q.0q.$B#M7.N7.N7.%0+$B#%0+N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+$B#$B#$B#$B#_r+_r+N7.M7.%0+$B#$B#@9.%0+%0+%0+%0+%0+%0+%0+%0+M7.M7.N7.N7.N7.N7._r+_r+O7.O7.xX%_r+_r+N7.M7.M7.@9.$B#$B#$B#%0+M7.M7.M7.<3+<3+<3+<3+<3+<3+<3+<3+0q.0q.0q.0q.0q.0q.0q.0q.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+M7.M7.M7.M7.%0+%0+0q.0q.0q.0q.q3.q3.q3.q3.q3.0q.0q.0q.<3+v4.v4.v4.$B#$B#$B#$B#$B#$B#$B#$B#@9.%0+M7.%0+$B#@9.$B#M7.<3+<3+<3+<3+<3+<3+<3+<3+q3.q3.q3.q3.q3.q3.q3.q3.M7.$B#@9.@9.%0+M7.%0+@9.@9.@9.@9.@9.@9.@9.@9.@9.%0+$B#@9.eO@eO@@9.$B#%0+%0+$B#@9.eO@eO@eO@@9.@9.,H.,H.,H.,H.,H.,H.,H.,H.<3+0q.q3.,H.,H.q3.0q.<3+,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.,H.,H.:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+0q.v4.F6..0K.Pk.]f.~t.:^+%U*%U*h|.w5.p3.p3.:^+:{.U%+oO yy.yy.oO #*&Q!;n4@eg+eg+eg+N|@N|@N|@N|@SW#0M.eg+N|@Yj@SW#0M.N|@+9.+9.bQ#o&=o&=bQ#+9.+9.bQ#bQ#bQ#o&=o&=o&=b,+b,+o3.o3.o3.o3.o3.o3.o3.o3.D6.D6.D6.t4.t4.t4.t4.t4.Q+&j(#j(#j(#j(#b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+o3.C6.U'#ot+ot+s4.C6.+T++T+o3.o3.b,+b,+b,+b,+{4%{4%w{@Q+&b,+o&=o&=b,+Q+&w{@S`%CI#w{@j(#j(#j(#Q+&h;#D6.[(++T+s4.sQ@sQ@j(#o&=w{@j(#gm#{4%6l%6l%EU%*T#{4%Q+&w{@Q+&o&=o&=j(#CI#S`%CI#Q+&w{@S`%CI#Q+&o&=Q+&Q+&Q+&Q+&j(#j(#j(#j(#j(#j(#Q+&Q+&w{@w{@CI#CI#w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@Q+&b,+o&=o&=j(#w{@CI#j(#j(#j(#Q+&Q+&Q+&Q+&Q+&w{@w{@w{@w{@w{@w{@w{@w{@Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&w{@w{@CI#w{@Q+&b,+o&=S`%sX%w{@b,+CI#vu#&r=o&=.X+.X+.X+yE#yE#iM#iM#iM#l]#l]#&b=&b=&b=&b=iM#tq*2&$3&$B#@B#@'W+3&${y%`b&{y%{y%B#@`b&!D+`b&`b&B#@`b&!D+;n.>n.`b&B#@!D+;n.>n.`b&{y%B#@!D+>n.`b&*$@zi.';$';$';$';$';$';$';$US+US+US+OP*[f.x{+US+u]#~h&~h&~h&~h&~h&~h&~h&~h&X@$%' >S%~h&~h&{h&~h&zi.nh.d #d #d #u]#u]#u]#u]#US+';$';$d #u]#u]#:{+q(#q(# (&GJ@zw*zw*zw*lC&lC&|7.|7.|7. (&zw*zw*lC&|7.GJ@zw*zw*>H*zw*GJ@GJ@lC& (& (&p)@p)@p)@p)@p)@p)@lC&lC&lC&lC&lC&lC&lC&lC&GJ@GJ@GJ@GJ@lC&lC&lC&lC&x{+US+u]#:{+d #';$';$d #';$';$';$d #';$';$US+17*`b&<:*-.%-.%-.%#d+TO&`E&`E&`E&`E&`E&`E&`E&`E&`E&`b&B#@B#@B#@{y%'W+'W+'W+!D+{y%3&$3&$B#@!D+!D+J> r-@ (& (&lC&lC&GJ@GJ@GJ@lC&lC&lC&lC&lC&lC&lC&lC&$' $' 5,+qK+ X+ X+$' jM#SO+$' $' SO+_($zM+1<#o)@$.@:{+:{+:{+u]#d #US+23+';$';$d #d #d #u]#u]#u]#u]#:{+v]#v]#v]#u]#d #';$d #d #d #d #d #d #d #d #=|$u3$x*$X@$X@$x*$u3$=|$x*$x*$x*$x*$x*$x*$x*$c> nh.d #d #d #u]#u]#u]#u]#OP*US+d #d #US+23+", "&) $% |% |% 0' 8c 8c 7c 9c 8c 0' $% &) &_ f% 6% 8v.VW.9, 9, G6.hY.hY.G6.G6.G6.G6.G6.hY.hY.hY.WW.O~.l` WW.l` WW.l` WW.:j.n` -H.6% R_ 1% m` _j.9, is@is@is@is@is@is@is@Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.Vh.is@is@x5.x5.x5.x5.x5.O7.O7.xX%_r+_r+_r+xX%O7.is@Vh.Vh.is@O7.xX%Vh.is@O7.xX%xX%O7.is@Vh.xX%xX%xX%xX%xX%xX%xX%xX%x5.is@Vh.is@O7._r+xX%x5.is@is@is@is@x5.O7.xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+M7.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7._r+xX%xX%O7.O7.M7.N7.xX%O7.O7.xX%_r+N7.$B#$B#%0+%0+M7.N7.N7._r+M7.N7.N7._r+_r+N7.N7.M7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.v4.N7.v4.N7.v4.N7.v4.N7.<3+M7.<3+%0+0q.%0+$B#M7.N7.N7.%0+$B#%0+N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+$B#$B#$B#@9.xX%_r+N7.M7.%0+$B#@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.%0+%0+M7.N7.N7._r+xX%xX%x5.x5.O7.xX%_r+M7.M7.%0+@9.@9.$B#$B#%0+%0+M7.M7.<3+<3+<3+<3+<3+<3+<3+<3+q3.q3.q3.q3.q3.q3.q3.q3.M7.M7.M7.M7.M7.M7.M7.M7.$B#%0+N7._r+_r+N7.%0+$B#<3+<3+<3+0q.q3.,H.,H.,H.q3.q3.0q.0q.<3+v4.v4.v4.$B#$B#$B#$B#$B#$B#$B#$B#@9.%0+M7.%0+$B#@9.$B#M7.v4.v4.v4.v4.v4.v4.v4.v4.q3.q3.q3.q3.q3.q3.q3.q3.M7.$B#@9.@9.%0+M7.%0+@9.@9.@9.@9.@9.@9.@9.@9.@9.%0+$B#@9.)Z%)Z%@9.$B#%0+M7.%0+$B#@9.eO@eO@eO@eO@q3.q3.q3.q3.q3.q3.q3.q3.#k.v4.0q.q3.q3.0q.v4.#k.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.,H.,H.,H.:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+,H.<3+.m;.{u.4%.)e.{u.:^+J7.%U*h|.w5.p3.:^+:^+:{.U%+J!.-1.yy.oO _{.:{.c3+=g@c3+eg+J7.0M.%U*0M.K7.Yj@J7.0M.&o@hP.h|.%U*,H.:(++9.bQ#bQ#+9.:(+,H.bQ#bQ#bQ#o&=o&=o&=b,+b,+:^+:^+:^+:^+:^+:^+:^+:^+:^+:^+D6.D6.t4.o3.o3.v5.Q+&Q+&j(#b,+b,+o&=o&=bQ#b,+b,+b,+b,+b,+b,+b,+o3.s4.ot+TF+TF+s4.C6.[(+ :*t4.t4.o&=o&=o&=o&=gm#gm#w{@Q+&b,+o&=o&=b,+Q+&w{@sX%S`%w{@j(#b,+j(#Q+&h;#p3.(r+}o=C6.<(+sQ@o&=q3.w{@j(#gm#gm#6l%6l%EU%*T#e6#w{@w{@j(#bQ#bQ#Q+&sX%S`%CI#CI#S`%&r=S`%Q+&o&=w{@w{@Q+&Q+&j(#b,+b,+o&=j(#j(#Q+&Q+&w{@w{@CI#CI#w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@o&=o&=j(#Q+&Q+&w{@w{@Q+&Q+&Q+&j(#j(#b,+o&=bQ#bQ#w{@w{@w{@w{@w{@w{@w{@w{@CI#CI#CI#CI#CI#CI#CI#CI#j(#Q+&w{@w{@w{@j(#o&=bQ#sX%&r=w{@b,+S`%;Z+uG#o&=.X+.X+.X+yE#yE#iM#iM#iM#l]#l]#&b=&b=iM#yE#yE#)p#=|$'W+!D+!D+B#@'W+B#@>n.{y%B#@`b&>n.>n.;n.>n.>n.`b&>n.;n.>n.`b&B#@!D+;n.}m.;n.`b&`b&`b&`b&'W+;~ nh.d #d #d #d #d #d #d #US+US+23+[f.HV.u!=23+x{ >S%>S%>S%>S%>S%>S%>S%>S%x*$X@$%' >S%~h&~h&~h&~h&y*$v]#v]#:{+u]#d #d #';$u]#u]#d #d #d #d #d #x}*q)@ (&GJ@>H*>H*>H*zw*GJ@|7.r,@|7. (&zw*zw*lC&|7.zw*>H*aH*aH*zw*lC&|7.r,@A) A) r,@|7.p)@p)@ (& (&lC&lC&lC&lC&lC&lC&lC&lC&>H*>H*zw*GJ@GJ@lC&lC&9&+OP*';$:{+v]#u]#d #d #u]#23+US+d #d #';$US+x{+..='W+`E&TO&<:*<:*#d+`E&3]&`E&`E&`E&`E&`E&`E&`E&`E&B#@B#@{y%{y%'W+3&$3&$3&$>n.B#@'W+'W+`b&>n.;n.17*q)@q(#q(#q(#9&+9&+x}*x}*x}*x}*x}*x}*x}*x}*x}*x}*h^+sq*sq*Nc&ME+ME+mh.,0+Nc&sq*>0+Nc&*Z+Pw%ME+h^+c> h]@h]@h]@v]#d #US+OP*';$';$d #d #d #u]#u]#u]#:{+v]#h]@M8@h]@v]#u]#d #';$';$';$';$';$';$';$';$0@@u3$X@$%' %' X@$u3$=|$x*$x*$x*$x*$x*$x*$x*$c> x{ u]#d #';$';$US+23+23+[f.23+US+US+23+23+", "0' 0' |% |% $% $% &) |% |% $% $% $% &) &) 4% 6% VW.G6.X)@X)@G6.8v.Hu+9, 9, 9, 9, 9, 9, 9, WW.4% ^{ $% ~% |% d( 8c +h.he :j.Qw.lI.L/.x3&EK%lI.9, is@is@Vh.dD.dD.%j.%j.Vh.is@is@x5.O7.O7.xX%xX%M7.N7._r+xX%O7.x5.is@Vh.x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@is@is@is@is@xX%xX%xX%xX%xX%xX%xX%xX%x5.x5.x5.x5.x5.O7.O7.O7.is@x5.O7.xX%_r+_r+xX%xX%N7._r+xX%O7.x5.Vh.dD.dD.Vh.x5.xX%_r+N7._r+xX%O7.PI.PI.PI.PI.PI.PI.PI.PI.#9.Hu+8v.Hu+#9.#9.PI.8v._r+_r+_r+N7.N7.M7.M7.M7.@9.@9.@9.@9.@9.@9.@9.@9._r+M7.%0+N7.O7.x5.O7.xX%M7._r+O7.xX%N7.N7._r+O7.[3+j}+Hu+l#@[3+(s.|5+aq.#9.aq.|5+aq.#9.j}+cp.|5+#9.#9.cp.cp.cp.[3+[3+[3+|5+|5+[3+[3+cp.#9.#9.#9.$B#$B#%0+%0+M7.N7.N7._r+M7.M7.M7.M7.M7.M7.M7.M7.%0+M7.M7.N7.M7.$B#eO@)Z%@9.@9.@9.@9.@9.@9.@9.@9.M7.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7._r+_r+N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+$B#@9.$B#N7.xX%_r+M7.$B#%0+M7._r+_r+M7.%0+$B#0q.<3+<3+v4.v4.#k.b;,b;'b;)b;!9;!b;@W=~b;{b;]b;w(;^b;f7;/b;(b;_b;:b;S%>S%>S%>S%>S%>S%>S%>S%~h&~h&~h&~h&~h&~h&~h&zi.h~ 7P.Kh+G|@G|@T_+$(+$(+$(+G|@Kh+oh.oh.oh.Kh+/{ B#@TO&TO&#d+#d+<:*<:*<:*`E&`E&TO&#d+#d+<:*-.%>n.J> ';$u]#d #US+23+';$d #u]#d #US+23+23+US+d #9&+lt*>H*GJ@ (& (&lC&GJ@zw*|7.p)@ (&lC&zw*>H*aH*aH*zw*zw*zw*zw*zw*zw*zw*zw*r,@|7.p)@ (&lC&zw*>H*>H*k^.Ij=>H*GJ@lC&GJ@>H*(k=zw*>H*aH*zw*lC&p)@ (&x}*d #Kh+y4&]@+]@+y4&Kh+T_+Kh+oh.y4&oh.Kh+Kh+7P.=~@X@$X@$X@$X@$X@$X@$X@$X@$=|$x*$%' %' X@$X@$>S%{h&%' %' %' %' %' %' %' %' ~h&>S%>S%>S%>S%%' %' x{ M8@m|.d%${'$f+#V&$RO+V&$m|.f+#-V@R~$d%$0&+d%$u]#c> x*$x*$x*$x*$x*$x*$x*${h&~h&~h&>S%%' %' X@$$.@$.@:{+u]#u]#d #';$';$US+u]#u]#u]#d #d #d #';$';${'${'${'${'$R~$R~$R~$R~$m|.d%$RO+d%$m|.{'$m|.US+17*>S%x*$x*$%' ~h&~h&>S%~h&>S%%' X@$X@$%' >S%zi.zi.';$';$23+OP*23+u]#M8@US+';$:{+v]#h]@h]@", "0' 0' |% |% $% $% $% |% |% |% $% $% &) &) 4% i% VW.G6.hY.X)@G6.VW.8v.9, 9, 9, 9, 9, 9, 9, O~.%% &- #% &% |% ~% 0' d( he :j.Qw.lI.L/.x3&u2&lI.ts.Vh.Vh.dD.dD.dD.dD.%j.is@is@is@is@x5.x5.x5.x5.xX%O7.O7.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@is@is@is@is@O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.xX%xX%xX%xX%xX%is@is@x5.xX%xX%xX%O7.O7._r+xX%xX%O7.x5.is@is@Vh.is@x5.O7._r+_r+_r+xX%O7.PI.PI.PI.PI.PI.PI.PI.PI.#9.Hu+8v.Hu+#9.#9.PI.8v.O7.O7.xX%xX%_r+_r+_r+N7.M7.M7.M7.M7.M7.M7.M7.M7.O7._r+N7.N7.xX%O7._r+M7.N7._r+O7.xX%M7.M7.N7.xX%{t.l#@5!.5!.j}+aq.aq.{t.j}+aq.(s.aq.j}+j}+{t.(s.#9.#9.cp.cp.cp.[3+[3+[3+|5+[3+[3+[3+cp.#9.#9.#9.%0+%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+M7.N7._r+_r+_r+N7.M7.$B#$B#$B#$B#$B#$B#$B#$B#M7.M7.M7.M7.M7.M7.M7.M7.%0+M7.N7.N7.N7.N7.M7.%0+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+$B#%0+N7._r+N7.%0+$B#%0+M7.N7.N7.M7.%0+$B#<3+<3+<3+<3+<3+v4.v4.v4.0q.0q.<3+<3+<3+<3+v4.v4.%0+%0+%0+%0+%0+%0+%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#0q.0q.0q.q3.q3.,H.,H.,H.q3.q3.q3.q3.q3.q3.q3.q3.eO@eO@eO@@9.$B#%0+%0+$B#%0+%0+$B#$B#$B#$B#@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.$B#$B#$B#$B#$B#$B#$B#$B#,H.,H.,H.,H.,H.,H.,H.,H.bp.bp.:(+:(+,H.,H.q3.q3.0q.q3.,H.:(+:(+,H.q3.0q.q3.q3.q3.q3.q3.,H.:(+bp.,H.,H.,H.,H.,H.q3.q3.q3.:(+:(+,H.,H.,H.q3.q3.q3.:(+:(+:(+,H.q3.q3.q3.0q.,H.,H.,H.,H.,H.,H.,H.,H.v4.<3+q3.,H.,H.q3.<3+v4.bp.:(+q3.0q.0q.q3.:(+bp.q3.q3.q3.q3.q3.q3.q3.q3.:(+,H.q3.q3.q3.q3.,H.:(+q3.q3.q3.q3.q3.q3.q3.q3.0q.0q.q3.q3.q3.q3.,H.,H.#:+tF.N7+u4.u4.u4.N7+E6.N7+N7+N7+u4.w5.w5.w5.%U*nj*)!=nj*)!=)!=)!=)!=I==]{;`];A+;Y~;g1*kb;8`-8`-P:;@<;lb;mb;nb;&0;ob;pb;%!;{b;qb;~9;rb;sb;tb;ub;vb;wb;xb;yb;zb;Ab;Bb;Cb;Db;Eb;Fb;Gb;Hb;Hb;Hb;Gb;Ib;Jb;Kb;Lb;Mb;Nb;Ob;Ob;Pb;Qb;Rb;Sb;Tb;Ub;Vb;Wb;Xb;Y^*Yb;Zb;`b;4>#0s&G7.Qz.Qz.bn.NE $/.$/.9~.)(.78*J!.72.`q@`q@72.J!.62.J!.J!.J!.J!.J!.J!.J!.J!.:(+bp.+9.bQ#bQ#+9.bp.:(+:(++9.bQ#+9.:(+:(+bp.bQ#+9.+9.+9.+9.+9.+9.+9.+9.o&=bQ#+9.bp.bp.+9.bQ#o&=+9.+9.+9.+9.bp.bp.bp.bp.+9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=D6.t4.v5.n3.n3.v5.t4.D6.n3.n3.n3.v5.v5.o3.t4. :*It&tH.tH.Gn=[(+[(++T++T+t4.t4.o&=o&=o&=o&=gm#gm#b,+b,+b,+b,+b,+b,+b,+b,+j(#j(#j(#j(#j(#Q+&Q+&n3.t4.[(+[(+[(+t4.t4.o&=o&=b,+Q+&S%>S%%' X@$>S%{h&&, &, &, &, &, &, &, &, >S%>S%>S%>S%>S%>S%>S%>S%~h&~h&~h&~h&~h&~h&~h&zi.Bj.G|@G|@G|@G|@T_+T_+T_+Ea+$(+G|@Kh+7P.7P.7P.Bj.B#@TO&TO&#d+#d+#d+<:*<:*TO&TO&#d+#d+#d+#d+<:*!D+J> ';$u]#d #US+23+';$d #d #';$US+23+23+US+';$x}*lt*>H*GJ@lC& (&lC&GJ@GJ@p)@p)@ (&lC&GJ@GJ@zw*zw*zw*zw*zw*zw*zw*zw*zw*zw* (& (& (&lC&lC&lC&GJ@GJ@Ij=(k=zw*lC&lC&lC&zw*>H*GJ@>H*aH*aH*zw*GJ@>H*b=+d #Kh+oh.y4&y4&oh.Kh+T_+Kh+7P.y4&oh.Kh+G|@7P.y4&%' %' %' %' %' %' %' %' u3$X@$>S%>S%%' X@$>S%{h&>S%>S%>S%>S%>S%>S%>S%>S%0, {h&{h&>S%%' X@$x*$c> 5A.aH@9g.}f.cI+bH@Bz$bH@aH@bH@}f.}f.bH@aH@bH@xc+y$$'W+'W+'W+'W+'W+'W+'W+B#@B#@B#@B#@B#@{y%{y%*$@$.@:{+u]#u]#u]#u]#d #d #:{+:{+u]#u]#d #';$';$US+d%$V&$m|.{'$R~$f+#35+-V@m|.d%$0&+RO+V&$V&$d%$OP*17*~h&X@$X@$>S%~h&~h&>S%%' >S%{h&0, 0, 0, ~h&zi.zi.';$';$23+OP*23+u]#M8@';$';$d #u]#u]#u]#", "0' 0' |% |% $% $% $% 0' |% |% |% $% $% &) 4% h% 8v.9, hY.hY.hY.G6.9, 9, 9, 9, 9, 9, 9, 9, P7.Lv.3b &% N~.~% O~.%% r: l` n` mI.kI.<].^q%z^.kI.+Q dD.dD.dD.Vh.Vh.Vh.Vh.is@is@is@is@Vh.Vh.Vh.Vh.is@is@is@is@x5.x5.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5._r+_r+xX%xX%xX%xX%xX%xX%Vh.Vh.is@x5.O7.O7.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7.is@x5.O7.xX%_r+_r+xX%xX%PI.PI.PI.PI.PI.PI.PI.PI.#9.Hu+8v.Hu+#9.#9.PI.8v.x5.x5.O7.O7.xX%xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+is@O7._r+_r+xX%xX%N7.$B#N7._r+xX%_r+%0+$B#$B#M7.j}+$9.6!.6!.l#@j}+j}+l#@j}+aq.(s.aq.j}+j}+{t.(s.#9.#9.cp.cp.cp.[3+[3+[3+[3+[3+[3+cp.cp.cp.#9.#9.M7.M7.M7.M7.M7.%0+%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7._r+xX%O7.x5.x5.O7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.$B#%0+M7.M7.M7.M7.%0+$B#M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7._r+M7.$B#%0+N7.N7.%0+$B#%0+%0+M7.N7.N7.M7.%0+%0+<3+<3+<3+0q.0q.0q.0q.q3.#k.#k.#k.v4.v4.v4.v4.<3+M7.M7.M7.M7.M7.M7.M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#<3+<3+<3+0q.0q.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.eO@eO@@9.@9.@9.$B#$B#$B#$B#$B#%0+%0+%0+%0+M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#,H.,H.,H.,H.,H.,H.,H.,H.bp.:(+:(+:(+,H.,H.,H.,H.q3.q3.,H.:(+:(+,H.q3.q3.0q.q3.,H.,H.:(+:(+,H.,H.bp.bp.:(+,H.q3.0q.0q.<3+:(+:(+,H.,H.,H.q3.q3.q3.:(+:(+,H.,H.,H.q3.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.0q.q3.q3.,H.,H.q3.q3.0q.bp.:(+q3.0q.0q.q3.:(+bp.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.,H.:(+:(+,H.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.0q.0q.0q.0q.<3+<3+N7+N7+u4.u4.u4.N7+E6.tF.E6.E6.N7+N7+N7+u4.u4.&o@SW#8J.SW#8J.8J.8J.8J.v!=V3*z-=K%=&Y=k==@{;S|*J&=fv= c;Wv=.c;.<;+c;@c;Xm {0;k:;>b;#c;$c;%c;&c;}9;*c;=c;Sb;-c;;c;>c;,c;'c;)c;-c;!c;;c;~c;~c;~c;{c;]c;]c;^c;/c;(c;_c;:c;:c;.)(.oO J!.-1.72.72.-1.J!.J!.J!.J!.J!.J!.J!.J!.J!.J!.:(+bp.+9.+9.+9.+9.bp.:(+:(++9.bQ#+9.:(+:(+bp.bQ#+9.+9.+9.+9.+9.+9.+9.+9.o&=bQ#+9.bp.bp.+9.bQ#o&=:(+bp.bp.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=t4.o3.o3.v5.v5.o3.o3.t4.o3.o3.o3.o3.t4.t4.t4.[(+[(+Gr&Gr&Gr&[(++T++T++T+v5.v5.j(#j(#j(#j(#e6#e6#b,+b,+b,+b,+b,+b,+b,+b,+Q+&Q+&Q+&j(#j(#j(#j(#v5.v5.C6.C6.C6.v5.v5.j(#j(#b,+j(#S%~h&>S%X@$X@$%' {h&{h&{h&{h&{h&{h&{h&{h&>S%>S%>S%>S%>S%>S%>S%>S%~h&~h&~h&~h&~h&~h&~h&zi.|m.T_+T_+T_+G|@G|@G|@G|@5A.Ea+$(+T_+G|@Kh+Kh+Bj.{y%`E&TO&TO&#d+#d+#d+<:*<:*<:*#d+#d+#d+#d+TO&B#@J> ';$u]#d #US+23+';$d #';$US+23+23+23+23+US+S>+FG*zw*GJ@lC&lC&lC&lC&GJ@lC&lC&lC&lC&lC&lC&lC&lC&lC&lC&lC&lC&lC&lC&lC&lC&GJ@GJ@GJ@lC& (& (& (&p)@aH*zw*lC& (&p)@ (&GJ@zw*p)@lC&zw*zw*GJ@GJ@aH*a1+';$G|@G|@G|@G|@G|@G|@G|@G|@7P.oh.7P.G|@G|@Kh+oh.~h&~h&~h&~h&~h&~h&~h&~h&X@$>S%~h&~h&%' %' ~h&0, ~h&~h&~h&~h&~h&~h&~h&~h&&, &, {h&~h&%' x*$u3$0@@Ea+Bz$>( }f.cI+}f.aH@}f.aH@Bz$Bz$aH@}f.cI+cI+xc+|m.B#@B#@B#@B#@B#@B#@B#@{y%{y%{y%B#@B#@B#@B#@|m.x{ u]#:{+:{+:{+:{+v]#v]#v]#v]#:{+u]#d #';$US+23+RO+d%$V&${'$R~$35+-V@)g@m|.d%$0&+0&+d%$d%$0&+[f.17*~h&%' %' ~h&{h&{h&~h&x*$>S%&, Bv&Bv&ZQ.0, zi.zi.d #d #US+23+US+u]#h]@d #';$';$US+23+US+", "|% |% |% |% |% |% |% 0' 0' |% |% |% $% $% %% h% Hu+VW.G6.hY.hY.hY.hY.9, 9, 9, 9, 9, 9, 9, P7.Y6.yT.3b zT.O~.6!.7% 5!.6% 9, AX$+Q jI.l=&yc.ts.ve.Vh.Vh.is@x5.x5.O7.O7.x5.is@is@Vh.dD.dD.%j.%j.is@is@is@is@is@is@is@is@x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@is@is@is@is@xX%xX%xX%O7.O7.O7.O7.x5.dD.Vh.is@x5.x5.x5.x5.is@x5.x5.x5.O7.xX%xX%xX%_r+x5.x5.O7.xX%xX%xX%xX%xX%PI.PI.PI.PI.PI.PI.PI.PI.#9.Hu+8v.Hu+#9.#9.PI.8v.O7.O7.O7.xX%xX%_r+_r+_r+xX%xX%xX%xX%xX%xX%xX%xX%x5.xX%N7._r+xX%xX%N7.%0+N7.xX%xX%N7.$B#eO@@9.$B#{t.l#@5!.5!.l#@{t.j}+l#@j}+aq.(s.aq.j}+j}+{t.(s.#9.#9.cp.cp.cp.[3+[3+[3+[3+[3+cp.cp.cp.cp.cp.cp._r+N7.N7.M7.%0+%0+$B#$B#M7.M7.M7.M7.M7.M7.M7.M7.N7._r+_r+xX%O7.O7.O7.O7.N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.@9.$B#%0+%0+%0+%0+$B#@9.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.xX%N7.%0+%0+M7.M7.%0+eO@%0+M7.M7.M7.M7.M7.M7.%0+<3+<3+0q.0q.q3.,H.,H.,H.#k.#k.#k.v4.<3+0q.0q.0q.N7.N7.N7.N7.N7.N7.N7.N7.$B#$B#$B#$B#$B#$B#$B#$B#v4.v4.v4.<3+<3+0q.0q.0q.q3.q3.q3.q3.q3.q3.q3.q3.eO@@9.$B#$B#@9.eO@@9.%0+$B#$B#%0+%0+M7.N7.N7._r+%0+%0+%0+%0+%0+%0+%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.,H.,H.,H.q3.<3+q3.,H.bp.bp.:(+q3.0q.:(+:(+:(+,H.q3.q3.q3.0q.:(+:(+,H.,H.,H.q3.q3.q3.,H.,H.,H.,H.,H.,H.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.q3.,H.,H.,H.,H.,H.,H.q3.bp.:(+q3.0q.0q.q3.:(+bp.q3.q3.q3.q3.q3.q3.q3.q3.0q.q3.:(+bp.bp.:(+q3.0q.0q.0q.0q.0q.0q.0q.0q.0q.q3.q3.0q.0q.<3+v4.v4.#k.w5.w5.w5.u4.u4.N7+E6.tF.E6.E6.E6.E6.N7+N7+N7+N7+K7.K7.K7.hP.hP.hP.hP.%R+zH.V3*V3*V3*s~=z-=K%=7<;v*=h1*h1*r&=.*=kb;kb;8`-S5.r&=h1*h1*h1*v*=v*=9c;+<;0c;ac;ac;bc;cc;cc;cc;2c;2c;2c;2c;2c;2c;2c;Xm /!;_!;;<;4!;dc;YW=ec;ec;fv=fc; (;fv=@c;Wv=@c;2!;4(;Y^*f6;07;2L&gc;cR#h!;]C.IB.8r.bn.8c;6%.$>.28.oO J!.J!.-1.-1.J!.J!.J!.J!.J!.J!.J!.J!.J!.J!.J!.bp.bp.bp.+9.+9.bp.bp.bp.:(++9.bQ#+9.:(+:(+bp.bQ#+9.+9.+9.+9.+9.+9.+9.+9.o&=bQ#+9.bp.bp.+9.bQ#o&=bp.bp.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=o3.o3.o3.o3.o3.o3.o3.o3.t4.D6.D6.D6.D6.t4.t4.+T+C6.U'#}>#}>#+T++T++T+[(+v5.v5.j(#j(#j(#j(#e6#e6#b,+b,+b,+b,+b,+b,+b,+b,+w{@w{@Q+&Q+&j(#b,+b,+t4.v5.C6.C6.C6.v5.v5.j(#j(#b,+j(#& =& =FU%FU%qN%`#=93#CI#w{@w{@Q+&j(#j(#b,+o&=b,+b,+j(#Q+&Q+&w{@w{@j(#j(#j(#j(#j(#j(#j(#j(#w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@Q+&Q+&j(#b,+b,+o&=w{@w{@w{@w{@w{@w{@w{@w{@CI#Q+&j(#Q+&w{@CI#w{@j(#w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@Q+&Q+&j(#b,+b,+j(#Q+&Q+&+X++X+)p#$x+$x+tq*Fu+Fu+)p#tq*,C+uq*xr*uq*,C+Fu+w*$u3$~h&{h&~h&X@$X@$X@$>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%~h&~h&~h&~h&~h&~h&~h&zi.y$$xc+$(+T_+T_+G|@Kh+Kh+xc+xc+xc+$(+$(+$(+$(+*$@{y%`E&`E&TO&TO&#d+#d+#d+-.%-.%<:*#d+#d+TO&`E&{y%J> ';$u]#d #US+23+';$d #US+US+23+23+23+23+US+pK+FG*zw*zw*GJ@lC&lC&lC&lC&>H*>H*zw*zw*GJ@GJ@lC&lC&lC&lC&lC&lC&lC&lC&lC&lC&GJ@GJ@lC&lC&lC& (& (& (&GJ@lC& (&p)@p)@p)@ (&lC&A) p)@ (& (&p)@|7. (&S>+US+G|@$(+xc+xc+$(+G|@Kh+T_+Kh+7P.Kh+T_+T_+G|@7P.{h&{h&{h&{h&{h&{h&{h&{h&%' ~h&0, {h&>S%>S%~h&0, ~h&~h&~h&~h&~h&~h&~h&~h&0, {h&~h&>S%%' X@$x*$c> xc+9g.>( }f.cI+}f.bH@l7 l7 Bz$>( Bz$l7 NM+l7 G|@/{ `b&`b&`b&`b&`b&`b&`b&'W+'W+{y%{y%B#@`b&`b&Bj.x{ u]#:{+:{+v]#h]@h]@M8@h]@v]#:{+u]#d #US+23+23+V&$V&$m|.{'$R~$f+#35+35+R~$m|.d%$d%$d%$d%$0&+u!=17*~h&%' >S%{h&0, {h&>S%x*$%' {h&Av&Av&Av&0, J> nh.u]#u]#d #US+US+u]#v]#u]#d #US+OP*x{+x{+", "|% |% |% |% |% |% |% 0' 0' 0' |% |% |% $% %% h% Hu+VW.9, G6.hY.hY.hY.9, 9, 9, 9, 9, 9, 9, P7.Y6.+) &j.}7.P7./#&5!.Jc@Hu+x5.+Q ve.T}%8'%9K.[{.8'%x5.x5.O7.xX%xX%_r+_r+x5.is@is@Vh.dD.dD.%j.%j.O7.O7.x5.is@Vh.dD.dD.%j.x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7.is@is@is@is@is@is@is@is@O7.O7.x5.x5.is@Vh.Vh.Vh.dD.Vh.is@x5.x5.x5.x5.is@x5.x5.O7.O7.xX%_r+N7.N7.O7.O7.O7.O7.O7.xX%_r+_r+PI.PI.PI.PI.PI.PI.PI.PI.#9.Hu+8v.Hu+#9.#9.PI.8v.xX%_r+_r+_r+N7.N7.M7.M7._r+_r+_r+_r+_r+_r+_r+_r+_r+N7.M7.N7.xX%x5.O7._r+N7.xX%xX%N7.$B#eO@@9.$B#ym.{t.l#@l#@{t.aq.{t.j}+j}+aq.(s.aq.j}+j}+{t.(s.#9.#9.cp.cp.cp.[3+[3+[3+cp.cp.cp.cp.cp.cp.[3+[3+_r+N7.N7.M7.%0+%0+$B#$B#M7.M7.M7.M7.M7.M7.M7.M7.xX%xX%_r+N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.@9.$B#%0+%0+%0+%0+$B#@9.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.xX%N7.%0+%0+M7.M7.%0+eO@M7.M7.M7.%0+%0+M7.M7.M7.<3+<3+0q.0q.q3.,H.,H.,H.v4.v4.<3+0q.0q.q3.,H.,H.N7.N7.N7.N7.N7.N7.N7.N7.$B#$B#$B#$B#$B#$B#$B#$B#v4.v4.v4.<3+<3+0q.0q.0q.q3.q3.q3.q3.q3.q3.q3.q3.eO@$B#M7.%0+eO@)Z%@9.%0+$B#$B#%0+%0+M7.N7.N7._r+%0+%0+%0+%0+%0+%0+%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#,H.,H.,H.,H.,H.,H.,H.,H.<3+<3+<3+0q.0q.0q.0q.0q.,H.,H.,H.q3.q3.,H.,H.,H.0q.q3.:(+bp.bp.,H.q3.<3+0q.q3.q3.q3.,H.:(+:(+:(+:(+:(+,H.,H.,H.q3.q3.q3.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.,H.,H.,H.bp.:(+q3.0q.0q.q3.:(+bp.q3.q3.q3.q3.q3.q3.q3.q3.0q.q3.:(+bp.bp.:(+q3.0q.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.0q.0q.<3+v4.v4.#k.p3.p3.w5.u4.N7+N7+N7+N7+N7+N7+N7+N7+E6.E6.E6.E6.E6.E6.E6.$Z*$Z*$Z*$Z*o4@Yj@nj*nj*nj*8J.v!=v!=v!=I==1!;7<;&Y=@{;S|*S|*;!;P4.;!;@{;S|*U];g1*#^;){;7*=hc;iW=iW=9c;Wv=Wv=Wv=fv=fc;ic;/!;_!;;<;4!;u(;&Y=I==k==k==i%=Bk=Bk=Bk=1{;]{;_:+1{;_k=Bk=Bk=-#;(a;I7;3^;3^;X+-WO+!y+ws&S>.vi@J}.~t.tD Qo+;N ]f.oO J!.J!.62.62.J!.J!.J!.J!.J!.J!.J!.J!.J!.J!.J!.+9.bp.bp.bp.bp.bp.bp.+9.:(++9.bQ#+9.:(+:(+bp.bQ#bp.bp.bp.bp.bp.bp.bp.bp.o&=bQ#+9.bp.bp.+9.bQ#o&=o&=o&=bQ#bQ#bQ#+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=o3.o3.o3.o3.o3.o3.o3.o3.t4.t4.D6.:^+:^+D6.o3.C6.C6.U'#}>#}>#+T++T++T+[(+v5.v5.j(#j(#j(#j(#e6#e6#b,+b,+b,+b,+b,+b,+b,+b,+w{@w{@Q+&Q+&j(#b,+b,+t4.v5.C6.C6.C6.v5.v5.j(#j(#j(#j(#e6#& =FU%qN%qN%93#`#=CI#CI#w{@Q+&Q+&j(#j(#o&=b,+b,+j(#Q+&Q+&w{@w{@j(#j(#j(#j(#j(#j(#j(#j(#w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@Q+&Q+&j(#b,+b,+o&=w{@w{@w{@w{@w{@w{@w{@w{@CI#Q+&b,+j(#CI#S`%w{@j(#w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@Q+&j(#j(#b,+b,+j(#j(#Q+&+X++X+)p#$x+$x+tq*Fu+Fu+)p#tq*,C+uq*xr*uq*,C+Fu+Eo+x*$~h&0, ~h&%' X@$X@$%' %' %' %' %' %' %' %' >S%>S%>S%>S%>S%>S%>S%>S%~h&~h&~h&~h&~h&~h&~h&zi.y$$xc+xc+$(+T_+G|@G|@G|@G|@T_+$(+xc+Ea+Ea+Ea+6j+'W+3]&`E&`E&TO&TO&#d+#d+-.%-.%<:*#d+#d+TO&`E&{y%J> ';$u]#d #US+23+';$d #US+US+US+US+US+US+US+pK+pK+zw*zw*zw*GJ@lC&lC& (&(k=(k=aH*aH*>H*zw*GJ@GJ@lC&lC&lC&lC&lC&lC&lC&lC& (& (& (&lC&lC&lC&GJ@GJ@p)@p)@p)@|7.|7.p)@ (& (&p)@lC&GJ@lC&|7.r,@|7.q(#US+T_+xc+Ea+Ea+xc+T_+Kh+$(+G|@Kh+Kh+T_+$(+T_+Kh+0, 0, 0, 0, 0, 0, 0, 0, >S%{h&0, {h&>S%%' >S%{h&%' %' %' %' %' %' %' %' %' %' %' >S%>S%>S%>S%nh.xc+9g.>( }f.cI+}f.bH@l7 NM+}f.Bz$aH@l7 cI+bH@oh./{ `b&`b&`b&`b&`b&`b&`b&'W+'W+{y%{y%B#@`b&`b&Bj.x{ u]#:{+:{+v]#h]@h]@M8@v]#v]#:{+u]#d #';$US+US+R~$R~$R~$R~${'${'${'${'$-V@R~$m|.m|.m|.m|.d%$OP*J> >S%%' >S%{h&0, ~h&%' %' %' %' %' %' >S%~h&J> nh.u]#:{+u]#';$US+d #:{+:{+d #US+OP*x{+OP*", "$% $% |% |% 0' 0' 0' 8c 8c 0' 0' |% |% |% %% 6% 8v.VW.9, 9, G6.hY.hY.9, 9, 9, 9, 9, 9, 9, P7.^#&|6.}7.}7.*o@*o@/#&/#&_r+x5.ve._;=Tw@[{.ZL.[{.F6.O7.O7.O7.xX%xX%xX%xX%is@is@is@is@Vh.Vh.Vh.Vh._r+_r+xX%x5.is@Vh.dD.%j.x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.x5.is@is@Vh.dD.%j.%j.Vh.Vh.is@x5.O7.O7.x5.x5.x5.O7.O7.xX%_r+_r+N7.N7.O7.O7.x5.x5.O7.xX%_r+N7.PI.PI.PI.PI.PI.PI.PI.PI.#9.Hu+8v.Hu+#9.#9.PI.8v._r+_r+_r+N7.N7.M7.M7.M7.N7.N7.N7.N7.N7.N7.N7.N7.N7.M7.%0+N7.O7.x5.x5.xX%N7._r+xX%_r+%0+$B#$B#M7.bv#aq.j}+j}+{t.aq.{t.j}+j}+aq.(s.aq.j}+j}+{t.(s.#9.#9.cp.cp.cp.[3+[3+[3+#9.#9.cp.cp.cp.[3+[3+[3+M7.M7.M7.M7.M7.%0+%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.O7.xX%N7.M7.%0+$B#%0+%0+N7.N7.N7.N7.N7.N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.$B#%0+M7.M7.M7.M7.%0+$B#M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7._r+M7.$B#%0+N7.N7.%0+$B#N7.M7.%0+%0+%0+%0+M7.N7.<3+<3+<3+0q.0q.0q.0q.q3.0q.0q.0q.0q.q3.q3.q3.q3.M7.M7.M7.M7.M7.M7.M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#<3+<3+<3+0q.0q.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.)Z%%0+N7.%0+)Z%'Z%eO@%0+$B#$B#%0+%0+%0+%0+M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#,H.,H.,H.,H.,H.,H.,H.,H.<3+<3+<3+0q.0q.0q.q3.q3.:(+,H.q3.q3.q3.q3.,H.:(+,H.,H.:(+:(+,H.,H.q3.0q.<3+0q.0q.q3.,H.:(+bp.bp.:(+:(+,H.,H.,H.q3.q3.q3.q3.q3.q3.,H.,H.,H.:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.0q.0q.q3.q3.,H.bp.:(+q3.0q.0q.q3.:(+bp.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.,H.:(+:(+,H.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.0q.0q.0q.0q.<3+<3+p3.w5.u4.u4.N7+u4.u4.w5.u4.u4.u4.N7+N7+N7+E6.E6.72.72.72.N7+72.N7+N7+K7.[M@10*[M@qt+qt+zH.Fv+zH.[D+P|*ak*ak*P|*[D+mX.AH.mX.P|*[D+[D+P|*P|*s~=K3.Bk=@{;;!;;!;P4.P4.&Y=&Y=>W*cM*3K*CK*7<;1!;1!;K3.5{;@=@@=@@=@@=@@=@@=@@=@PP*DM+%R+8J.XO+XO+%R+8J.3^;Vr&H7;&&@$R+,$@^U=^U=8).R>.J}.vx./C bH J#+z0.oO J!.62.U%+U%+62.J!.J!.J!.J!.J!.J!.J!.J!.J!.J!.+9.+9.bp.:(+:(+bp.+9.+9.:(++9.bQ#+9.:(+:(+bp.bQ#bp.bp.bp.bp.bp.bp.bp.bp.o&=bQ#+9.bp.bp.+9.bQ#o&=b,+o&=o&=bQ#bQ#+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.+9.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=v5.o3.o3.t4.t4.o3.o3.v5.n3.v5.t4.D6.:^+D6.o3.C6.[(+Gr&Gr&Gr&[(++T++T++T+v5.v5.j(#j(#j(#j(#e6#e6#b,+b,+b,+b,+b,+b,+b,+b,+Q+&Q+&Q+&j(#j(#j(#j(#v5.v5.C6.C6.C6.v5.v5.j(#j(#Q+&j(#{4%e6#FU%qN%FU%e6#93#CI#CI#w{@w{@w{@w{@Q+&j(#j(#j(#j(#j(#Q+&Q+&Q+&j(#j(#j(#j(#j(#j(#j(#j(#w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@Q+&Q+&Q+&j(#j(#j(#j(#j(#w{@w{@w{@w{@w{@w{@w{@w{@S`%Q+&o&=j(#CI#sX%w{@b,+w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@Q+&Q+&j(#b,+b,+j(#Q+&Q+&)p#)p#$x+$x+$x+$x+tq*tq*$x+tq*Fu+,C+uq*uq*,C+,C+=|$X@${h&0, ~h&>S%>S%~h&%' %' %' %' %' %' %' %' >S%>S%>S%>S%>S%>S%>S%>S%~h&~h&~h&~h&~h&~h&~h&~h&y$$xc+$(+$(+$(+$(+T_+T_+Kh+G|@$(+xc+Ea+Ea+Ea+y$$'W+3]&3]&`E&`E&TO&TO&TO&<:*<:*#d+#d+#d+#d+TO&B#@J> ';$u]#d #US+23+';$d #US+';$d #d #d #d #';$US+S>+zw*zw*zw*zw*GJ@lC& (&(k=aH*aH*>H*>H*zw*zw*GJ@lC&lC&lC&lC&lC&lC&lC&lC&p)@ (& (& (&lC&GJ@GJ@GJ@|7.|7.|7.p)@p)@p)@ (& (&>H*aH*(k=>H*lC& (& (&S>+US+G|@$(+xc+xc+$(+G|@Kh+xc+T_+G|@G|@$(+xc+$(+/{ {h&{h&{h&{h&{h&{h&{h&{h&>S%~h&0, ~h&%' X@$%' ~h&X@$X@$X@$X@$X@$X@$X@$X@$X@$X@$%' %' >S%~h&{h&J> Ea+Bz$>( }f.cI+}f.aH@}f.NM+l7 bH@bH@}f.bH@Bz$7P./{ `b&`b&`b&`b&`b&`b&`b&{y%{y%{y%B#@B#@B#@B#@B#@x{ u]#:{+:{+:{+:{+v]#v]#u]#u]#u]#d #d #d #';$';$35+f+#f+#R~${'$m|.m|.V&$35+R~$m|.m|.R~$R~$m|.US+nh.%' X@$>S%{h&{h&>S%x*$>S%%' x*$u3$u3$x*$X@$x{ nh.:{+v]#:{+d #';$d #u]#u]#u]#d #';$';$';$", "%% %% ~% ~% d( d( d( +h.+h.+h.d( d( ~% ~% ~% WW.9, VW.VW.9, 9, G6.G6.9, 9, 9, 9, 9, 9, 9, P7./#&B.@3@+3@+a.+a.+`M*`M*I1.c+#*$.Aa@*$.1o..Q 1o.8'%x5.x5.x5.x5.is@is@is@is@is@is@is@x5.x5.x5.x5.xX%xX%xX%O7.x5.x5.is@is@x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.O7.xX%O7.x5.is@Vh.dD.dD.%j.is@is@x5.xX%xX%xX%O7.O7.xX%xX%xX%xX%_r+_r+_r+_r+xX%O7.x5.x5.x5.xX%_r+N7.PI.PI.PI.PI.PI.PI.PI.PI.#9.Hu+8v.Hu+#9.#9.PI.8v.xX%xX%xX%_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.xX%_r+M7.N7.xX%O7.xX%N7.N7._r+O7.xX%M7.M7.N7.xX%ym.aq.l#@l#@j}+{t.j}+$9.j}+aq.(s.aq.j}+j}+{t.(s.#9.#9.cp.cp.cp.[3+[3+[3+#9.#9.#9.cp.[3+[3+[3+|5+%0+%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7._r+N7.M7.%0+%0+%0+M7.N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+M7.N7.N7.N7.N7.M7.%0+M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+$B#%0+N7._r+N7.%0+N7.M7.%0+$B#$B#%0+M7.N7.<3+<3+<3+<3+<3+v4.v4.v4.0q.0q.0q.0q.<3+<3+<3+<3+%0+%0+%0+%0+%0+%0+%0+%0+$B#$B#$B#$B#$B#$B#$B#$B#0q.0q.0q.q3.q3.,H.,H.,H.q3.q3.q3.q3.q3.q3.q3.q3.)Z%%0+_r+M7.)Z%DI#)Z%%0+%0+%0+$B#$B#$B#$B#@9.@9.@9.@9.@9.@9.@9.@9.@9.@9.$B#$B#$B#$B#$B#$B#$B#$B#,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.,H.,H.:(+:(+:(+:(+,H.q3.0q.0q.q3.,H.:(+bp.:(+,H.q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.,H.,H.:(+:(+,H.,H.,H.q3.q3.q3.0q.q3.q3.q3.,H.:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.,H.q3.<3+v4.v4.<3+q3.,H.bp.:(+q3.0q.0q.q3.:(+bp.q3.q3.q3.q3.q3.q3.q3.q3.:(+,H.q3.q3.q3.q3.,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+0q.0q.q3.q3.q3.q3.,H.,H.p3.w5.u4.N7+N7+w5.p3.:^+p3.w5.w5.w5.u4.N7+N7+72.b^*b^*b^*72.b^*72.72.N7+u4.&o@u4.&o@h|.Yj@h|.Yj@N|@Yj@SW#SW#0M.N|@Yj@hP.Yj@N|@N|@Yj@o4@s2@SW#QK.@=@VF+5{;)!=v!=o2.s~=V3*v!=)!=VF+k~;k~;k~;VF+QK.K7.N7+N7+N7+N7+N7+N7+E6.tF.u4.:^+D6.p3.w5.p3.J7.4I+nE&4I+d@@ws&!y+Ev+Ba@vi@R>.R>.R>.+=.[-.)e.)e.yy.J!.U%+:{.:{.U%+J!.-1.J!.J!.J!.J!.J!.J!.J!.J!.bQ#+9.bp.:(+:(+bp.+9.bQ#:(++9.bQ#+9.:(+:(+bp.bQ#:(+:(+:(+:(+:(+:(+:(+:(+o&=bQ#+9.bp.bp.+9.bQ#o&=bQ#bQ#bQ#bQ#o&=o&=o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=n3.v5.t4.D6.D6.t4.v5.n3.<(+h;#v5.D6.D6.D6.o3.C6.It&tH.tH.Gn=[(+[(++T++T+t4.t4.o&=o&=o&=o&=gm#gm#b,+b,+b,+b,+b,+b,+b,+b,+j(#j(#j(#j(#j(#Q+&Q+&n3.t4.[(+[(+[(+t4.t4.o&=o&=w{@j(#gm#{4%pN%FU%6l%8&+S%{h&&, %' %' %' %' %' %' %' %' >S%>S%>S%>S%>S%>S%>S%>S%~h&~h&~h&~h&~h&~h&~h&~h&x{ x{ x{ x{ x{ $.@$.@$.@x{ x{ $.@c> $.@x{ zi.J> X@$X@$X@$X@$%' %' >S%>S%>S%>S%~h&~h&~h&~h&{h&{h&J> ';$u]#d #US+23+';$d #';$d #u]#:{+:{+u]#d #';$wE*wE*4,+k#@4,+wE*r-@jk@wE*wE*wE*wE*wE*h^+h^+h^+pK+pK+pK+pK+pK+pK+pK+pK+S>+S>+x}*x}*x}*9&+9&+9&+r,@|7.p)@ (& (& (& (& (&zw*aH*(k=aH*zw*GJ@zw*lt*zi.zi.nh.nh.nh.nh.zi.zi.c> x{ zi.nh.$.@c> x{ nh.{h&{h&{h&{h&{h&{h&{h&{h&%' ~h&{h&>S%X@$x*$X@$%' %' %' %' %' %' %' %' %' %' %' %' >S%>S%>S%>S%nh.5A.aH@9g.}f.cI+bH@Bz$bH@bH@}f.l7 }f.aH@aH@bH@$(+nh.>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%%' %' %' $.@$.@x{ x{ x{ x{ nh.nh.zi.zi.nh.nh.nh.x{ x{ u]#R~$R~$R~$R~${'${'${'${'$R~$m|.V&$V&${'$R~$m|.US+$.@x*$x*$%' ~h&~h&X@$=|$%' %' X@$X@$x*$u3$=|$%.@x{ v]#h]@v]#u]#';$';$u]#u]#u]#:{+v]#v]#v]#", "%% %% ~% ~% d( d( +h.+h.+h.+h.d( d( d( ~% O~.G6.G6.9, VW.VW.VW.9, 9, 9, 9, 9, 9, 9, 9, 9, *o@Jc@lX.B.@3@+a.+`M*T@.T@.L7.c+#*$.Aa@*$.1o..Q 1o.8'%is@is@Vh.dD.dD.%j.%j.Vh.is@is@x5.O7.O7.xX%xX%O7.O7.O7.O7.xX%xX%xX%xX%x5.x5.x5.x5.x5.x5.x5.x5.O7.O7.O7.O7.O7.O7.O7.O7.xX%xX%xX%xX%xX%xX%xX%xX%_r+_r+xX%O7.x5.is@Vh.dD.is@x5.O7.xX%_r+_r+xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+xX%O7.x5.is@x5.O7._r+M7.PI.PI.PI.PI.PI.PI.PI.PI.#9.Hu+8v.Hu+#9.#9.PI.8v.x5.O7.O7.O7.xX%xX%_r+_r+_r+_r+_r+_r+_r+_r+_r+_r+is@O7._r+_r+xX%xX%N7.%0+M7._r+O7.xX%N7.N7._r+O7.(s.j}+$9.5!.$9.l#@$9.5!.j}+aq.(s.aq.j}+j}+{t.(s.#9.#9.cp.cp.cp.[3+[3+[3+#9.#9.#9.cp.[3+[3+|5+|5+$B#$B#%0+%0+M7.N7.N7._r+M7.M7.M7.M7.M7.M7.M7.M7.N7.M7.%0+%0+%0+N7.xX%x5.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7._r+_r+N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+$B#@9.$B#N7.xX%_r+M7._r+M7.%0+$B#$B#%0+M7._r+0q.<3+<3+v4.v4.#k..|-.sF.=G.,$@X+-'X+Ba@]U=^U=6J.It&vi@m;.m;.+=.~t.[-.0K.-1.J!.U%+:{.:{.U%+J!.-1.J!.J!.J!.J!.J!.J!.J!.J!.bQ#+9.bp.,H.,H.bp.+9.bQ#:(++9.bQ#+9.:(+:(+bp.bQ#:(+:(+:(+:(+:(+:(+:(+:(+o&=bQ#+9.bp.bp.+9.bQ#o&=:(+bp.+9.bQ#o&=j(#Q+&Q+&b,+b,+b,+b,+b,+b,+b,+b,+bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=n3.v5.t4.D6.D6.t4.v5.n3.):.<(+n3.t4.D6.D6.o3.C6.pt+ht=Sx&tH. :*[(++T++T+t4.t4.o&=o&=o&=o&=gm#gm#b,+b,+b,+b,+b,+b,+b,+b,+o&=b,+b,+j(#Q+&Q+&w{@h;#t4.[(+[(+[(+t4.t4.o&=o&=CI#j(#8&+gm#6l%pN%EU%av#& =Q+&w{@w{@CI#S`%S`%sX%w{@w{@Q+&Q+&j(#b,+b,+o&=j(#j(#j(#j(#j(#j(#j(#j(#w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@o&=b,+b,+j(#Q+&Q+&w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@sX%Q+&bQ#b,+S`%&r=w{@o&=w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@w{@CI#w{@Q+&Q+&Q+&Q+&w{@CI#Fu+Fu+tq*$x+$x+)p#+X++X+,C+Fu+tq*$x+tq*Fu+uq*&s*~h&{h&0, {h&>S%~h&0, ZQ.>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%~h&~h&~h&~h&~h&~h&~h&~h&nh.nh.nh.x{ $.@c> c> c> c> y*$y*$c> x{ J> U*@3<@x*$X@$X@$X@$%' %' >S%>S%%' %' >S%~h&~h&{h&0, 17*US+';$u]#d #US+23+';$d #d #u]#:{+v]#v]#:{+u]#d #h^+wE*4,+k#@k#@wE*r-@jk@jk@jk@jk@r-@r-@r-@r-@r-@pK+pK+pK+pK+pK+pK+pK+pK+FG*FG*pK+x}*9&+q(#q)@PS@r,@|7.p)@ (&lC&lC&lC& (&|7.lC&zw*zw*lC&lC&zw*aH*wE*zi.zi.zi.zi.zi.zi.zi.c> x{ nh.nh.$.@c> $.@nh.~h&~h&~h&~h&~h&~h&~h&~h&%' >S%~h&>S%x*$u3$x*$X@$~h&~h&~h&~h&~h&~h&~h&~h&~h&~h&~h&>S%%' %' X@$$.@]! bH@Bz$}f.cI+aH@9g.aH@>( aH@l7 l7 aH@Bz$}f.]! nh.>S%>S%>S%>S%>S%>S%>S%{h&~h&~h&>S%%' %' X@$X@$$.@$.@x{ x{ nh.zi.zi.J> J> J> zi.nh.x{ $.@$.@c> d #m|.{'${'$R~$R~$f+#f+#m|.d%$RO+d%$m|.{'$m|.US+c> u3$u3$X@$>S%>S%x*$2&$x*$%' ~h&~h&>S%x*$Eo++C.x{ v]#h]@h]@u]#';$';$d #d #:{+h]@ZW+f!+ZW+", "Ml Lv.O~.O~.Lv.Ml Ml O~.O~.O~.O~.O~.O~.O~.O~.Hu+Hu+8v.8v.VW.9, 9, G6.9, 9, G6.G6.G6.hY.hY.Hf.*o@3@+3@+3@+a.+a.+a.+a.+c+#c+#^C.sF.{N@Gf.8%.#'#2o.Su$%j.dD.Vh.is@x5.O7.O7.x5.is@Vh.dD.%j.Su$Su$Vh.x5.xX%_r+N7._r+xX%O7.O7.x5.is@Vh.is@x5.xX%_r+x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%is@O7.xX%O7.is@is@x5.xX%xX%O7.x5.is@x5.O7._r+M7._r+x5.is@xX%xX%Vh.Vh.O7.M7.M7._r+xX%O7.O7.xX%xX%PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.xX%xX%xX%_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.$B#M7._r+O7.O7._r+M7.$B#$B#%0+%0+%0+M7.M7.N7.N7.{t.{t.{t.{t.{t.{t.{t.{t.{t.j}+j}+aq.ym.ym.{t.$9.cp.|5+w7+w7+[3+cp.[3+w7+#9.#9.#9.cp.[3+[3+|5+|5+x5._r+M7.M7._r+_r+M7.$B#$B#@9.eO@$B#N7.xX%xX%N7.N7.N7.N7.N7.N7.N7.N7.N7.M7.N7.xX%_r+M7.%0+N7._r+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+N7.N7.M7.M7.M7.xX%N7.%0+%0+M7.M7.%0+@9.)Z%M7._r+M7.M7.xX%_r+@9.M7.M7.M7.M7.M7.M7.M7.M7._r+N7.%0+$B#$B#%0+N7._r+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+M7.M7.M7.M7.M7.M7.M7.M7.M7.%0+@9.@9.@9.$B#%0+N7.<3+0q.q3.,H.,H.q3.0q.<3+q3.q3.q3.q3.q3.q3.q3.q3.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#M7.M7.%0+%0+$B#$B#@9.@9.,H.q3.0q.<3+<3+0q.q3.,H.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.:(+:(+,H.,H.,H.q3.q3.,H.,H.,H.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.0q.0q.q3.,H.bp.bp.+9.:(+q3.q3.,H.,H.0q.v4.,H.,H.,H.,H.,H.,H.,H.,H.bp.,H.0q.0q.q3.q3.<3+#k.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.0q.0q.<3+v4.v4.v4.,H.,H.,H.,H.,H.,H.,H.,H.u4.u4.u4.u4.u4.u4.u4.u4.p3.E6.E6.p3.p3.E6.E6.62.b^*|1+!(.x0.oO yy.b^*72.U%+62.u4.N7+N7+u4.%U*J7.w5.w5.J!.w5.J!.w5.J!.w5.K!.N7+-1.N7+K!.tF.`q@u4.w5.h|.h|.h|.h|.h|.h|.h|.n4@J7.%U*&o@&o@&o@&o@u4.;1.;1.|1+b^*!(.oO x0.78*!(.yy.!(.yy.!(.b^*|1+72.D6.n4@J7.J7.%U*h|.u4.u4.p3.w5.J!.U%+a,+a,+62.72.62.:{.a,+a,+U%+62.U%+a,+:{.:{.:{.:{.:{.:{.:{.:{.+9.:(+q3.,H.bp.+9.:(+,H.+9.+9.bQ#bQ#o&=b,+b,+j(#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=j(#Q+&Q+&j(#o&=bQ#bp.bp.+9.bQ#o&=b,+j(#Q+&+9.bp.,H.q3.,H.bp.o&=j(#t4.t4.D6.D6.:^+p3.p3.p3.<(+o3.:^+t4.h;#sQ@t4.gP.C6.U'#U'#U'#C6.C6.C6.C6.o3.o3.b,+b,+b,+b,+{4%{4%bQ#o&=b,+b,+b,+b,+j(#Q+&j(#j(#j(#j(#j(#j(#j(#v5.h;#s4.+T+[(+t4.o3.Q+&w{@CI#CI#S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%{h&{h&{h&{h&{h&{h&{h&{h&u.@Nc&Ic%&c%Pw%mh.>0+>0+;~@Pw%*Z+X`+X`+ME+*Z+Pw%k#@k#@4,+wE*wE*h^+r-@r-@h^+h^+h^+r-@jk@{**{**{**d #';$23+OP*OP*23+';$d #US+';$';$d #d #';$';$US+$.@X@$X@$X@$%' %' %' %' %' %' %' >S%>S%>S%~h&zi.d #d #d #d #d #US+23+OP*d #d #d #d #d #d #d #x}*>H*GJ@p)@lC&>H*aH*zw* (&p)@p)@ (&lC&zw*>H*aH*(k=4,+sq*Nc&ME+*Z+ME+X`+Nc&,0+,0+>0+sq*sq*mh.Nc&Nc&%' %' >S%~h&~h&{h&0, 0, {h&~h&%' X@$X@$%' ~h&{h&%' %' %' >S%>S%>S%>S%>S%~h&>S%%' X@$X@$%' >S%zi.G|@bH@bH@Bz$>( 9g.aH@l7 aH@bH@l7 13+@$+ko.aH@iS.U*@sq*X`+X`+sq*,0+>0+sq*sq*sq*sq*sq*sq*sq*sq*sq*X@$X@$X@$%' %' %' %' %' u3$X@$%' %' X@$X@$%' nh.ZW+-V@f+#R~${'${'$R~$R~$d%$V&$m|.{'$R~$f+#35+M8@y*$u3$u3$u3$u3$u3$u3$u3${h&{h&>S%X@$u3$2&$Eo+7g.%.@ZW+f!+f!+M8@v]#u]#';$';$u]#v]#h]@M8@h]@", "Lv.Lv.O~.O~.Lv.Lv.Ml O~.O~.O~.O~.O~.O~.O~.O~.VW.VW.VW.VW.9, 9, 9, 9, 9, 9, 9, G6.G6.hY.hY.Y6.*o@3@+3@+3@+a.+a.+a.+a.+{$+{$+sF.sF.{N@Gf.N2.eR _;=%j.dD.Vh.is@x5.O7.O7.x5.x5.x5.is@Vh.dD.dD.dD.Vh.is@x5.O7.xX%xX%O7.O7.O7.x5.is@Vh.is@x5.xX%_r+x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%is@O7.xX%O7.is@is@x5.xX%xX%O7.x5.is@x5.O7._r+M7._r+x5.is@xX%xX%Vh.Vh.O7.M7.N7._r+xX%O7.xX%xX%xX%PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.xX%xX%xX%_r+_r+_r+N7.N7._r+_r+_r+_r+_r+_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.%0+%0+M7.M7.N7.N7.N7._r+{t.{t.{t.{t.{t.{t.{t.{t.{t.j}+j}+aq.ym.ym.{t.$9.#9.[3+w7+|5+cp.#9.cp.|5+#9.#9.#9.cp.[3+[3+[3+|5+N7.M7.$B#%0+N7._r+N7.%0+%0+$B#@9.$B#N7.xX%_r+M7.N7.N7.N7.N7.N7.N7.N7.N7.M7.N7.xX%_r+M7.%0+N7._r+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+N7.N7.M7.M7.M7.xX%N7.M7.M7.N7.N7.M7.$B#)Z%M7.N7.%0+M7.xX%_r+$B#M7.M7.M7.M7.M7.M7.M7.M7.N7.N7.M7.%0+%0+M7.N7.N7.<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+M7.M7.M7.M7.M7.M7.M7.M7.xX%N7.M7.$B#@9.@9.$B#%0+<3+0q.q3.,H.,H.q3.0q.<3+q3.q3.q3.q3.q3.q3.q3.q3.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#M7.M7.%0+%0+$B#$B#@9.@9.0q.0q.q3.q3.q3.q3.0q.0q.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.:(+:(+q3.q3.,H.,H.,H.,H.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.0q.q3.,H.:(+bp.bp.,H.q3.q3.bp.+9.:(+,H.,H.,H.,H.,H.,H.,H.,H.,H.:(+q3.<3+0q.q3.,H.0q.v4.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+,H.,H.q3.q3.0q.0q.,H.,H.,H.,H.,H.,H.,H.,H.u4.u4.u4.u4.u4.u4.u4.u4.w5.tF.tF.w5.w5.tF.tF.J!.b^*!(.x0.x0.oO oO yy.72.62.J!.u4.N7+N7+u4.h|.p3.J!.J!.J!.J!.J!.J!.J!.J!.`q@-1.J!.-1.`q@K!.72.J!.J!.w5.J!.w5.J!.w5.J!.w5.U%+:^+J!.u4.-1.u4.-1.J!.b^*|1+|1+|1+|1+!(.!(.!(.|1+|1+|1+|1+|1+!(.!(.yy.u4.&o@&o@h|.h|.h|.w5.w5.p3.w5.-1.J!.U%+:{.62.72.J!.U%+a,+:{.62.J!.62.:{.U%+U%+U%+U%+U%+U%+U%+U%+bQ#bp.:(+bp.bQ#bQ#+9.:(++9.+9.bQ#bQ#bQ#bQ#o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=b,+j(#j(#b,+o&=bQ#bp.+9.+9.bQ#o&=b,+j(#j(#bQ#+9.:(+,H.:(++9.o&=j(#o3.t4.t4.t4.D6.:^+:^+:^+n3.D6.p3.t4.h;#<(+v5.It&C6.U'#U'#U'#C6.C6.C6.C6.o3.o3.b,+b,+b,+b,+{4%{4%bQ#o&=b,+b,+b,+b,+j(#Q+&j(#j(#j(#j(#j(#j(#j(#v5.h;#s4.C6.+T+o3.v5.Q+&w{@CI#CI#S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%~h&~h&~h&~h&~h&~h&~h&~h&,0+Nc&Pw%;~@ME+sq*>0+>0+ME+X`+Nc&mh.mh.Nc&ME+*Z+4,+4,+wE*wE*wE*wE*h^+h^+h^+h^+h^+h^+r-@r-@r-@r-@d #';$23+OP*OP*23+';$d #';$';$d #u]#u]#d #';$zi.%' %' %' %' %' X@$X@$X@$%' %' %' >S%>S%>S%~h&~h&zi.';$d #d #d #';$US+US+d #d #d #d #d #d #d #d #lt*zw*lC&GJ@aH*(k=>H*lC&lC&lC&GJ@zw*>H*aH*aH*7' sq*mh.Nc&ME+ME+ME+X`+Nc&mh.mh.mh.mh.sq*sq*sq*sq*%' %' >S%>S%>S%>S%~h&~h&{h&~h&%' X@$X@$%' ~h&{h&>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%X@$x*$x*$X@$>S%nh.G|@aH@bH@Bz$>( >( aH@l7 l}+>( Bz$l7 13+13+cI+';$o2@sq*X`+X`+sq*>0+>0+mh.>0+>0+>0+>0+>0+>0+>0+>0+~h&>S%>S%>S%>S%%' %' %' X@$X@$%' %' %' %' >S%zi.u]#{'$R~$R~$R~$R~${'${'$R~$R~$R~$R~$R~$f+#f+#v]#y*$u3$u3$u3$u3$u3$u3$u3$%' X@$X@$X@$x*$u3$u3$y*$$.@v]#h]@M8@M8@h]@:{+u]#d #u]#:{+h]@h]@h]@", "H;@P7.P7.P7.P7.H;@Y6.P7.P7.P7.P7.P7.P7.P7.P7.G6.G6.G6.G6.9, 9, 9, 9, VW.9, 9, 9, G6.G6.hY.Y6.*o@}7.}7.}7.*o@*o@*o@*o@Vh.is@8'%8'%8'%[{.q;.Tw@ve.Vh.Vh.is@x5.O7.O7.xX%x5.x5.x5.x5.is@is@is@is@is@Vh.Vh.Vh.Vh.is@O7.O7.x5.x5.is@is@is@O7.xX%xX%x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%is@O7.xX%O7.is@is@x5.xX%xX%O7.x5.is@x5.O7._r+M7.N7.x5.x5._r+xX%Vh.Vh.O7.M7.N7._r+xX%xX%xX%xX%_r+PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.xX%xX%xX%_r+_r+_r+N7.N7.xX%xX%xX%xX%xX%xX%xX%xX%xX%_r+M7.%0+%0+M7._r+xX%M7.N7.N7.N7._r+_r+xX%xX%{t.{t.{t.{t.{t.{t.{t.{t.aq.j}+j}+{t.(s.(s.{t.l#@PI.cp.[3+[3+#9.PI.#9.[3+#9.#9.cp.cp.cp.[3+[3+[3+$B#@9.eO@$B#N7._r+_r+M7.N7.%0+$B#%0+N7._r+M7.%0+N7.N7.N7.N7.N7.N7.N7.N7.M7.N7.xX%_r+M7.%0+N7._r+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+N7.N7.M7.M7.M7.O7._r+M7.N7._r+xX%N7.%0+eO@M7.N7.%0+%0+xX%_r+$B#M7.M7.M7.M7.M7.M7.M7.M7.M7.N7.N7._r+_r+N7.N7.M7.<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+M7.M7.M7.M7.M7.M7.M7.M7.x5.O7._r+M7.%0+$B#$B#$B#<3+0q.q3.,H.,H.q3.0q.<3+q3.q3.q3.q3.q3.q3.q3.q3.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#%0+%0+%0+%0+$B#$B#$B#$B#<3+0q.q3.,H.,H.q3.0q.<3+q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.:(+:(+0q.q3.:(+bp.bp.:(+q3.0q.q3.q3.q3.q3.q3.q3.q3.q3.,H.q3.q3.q3.q3.,H.:(+bp.,H.0q.0q.q3.bp.bQ#+9.bp.,H.,H.,H.,H.,H.,H.,H.,H.q3.0q.v4.<3+,H.:(+q3.0q.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.+9.bp.bp.bp.:(+:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.u4.u4.u4.u4.u4.u4.u4.u4.u4.#:+#:+u4.u4.#:+#:+-1.yy.x0.oO 78*78*oO J!.-1.-1.u4.N7+E6.$Z*K7.&o@u4.-1.yy.yy.yy.yy.yy.yy.yy.b^*oO 78*oO b^*b^*yy.78*yy.-1.yy.-1.yy.-1.yy.-1._{.62.oO -1.yy.-1.oO oO |1+|1+|1+|1+x^#x^#x^#x^#7:.7:.7:.x^#|1+!(.!(.yy.u*=0q.0q.q3.,H.:(+bp.bp.+9.,H.0q.q3.:(+bp.:(+,H.-1.62.U%+U%+J!.-1.J!.U%+62.62.62.62.62.62.62.62.o&=+9.bp.+9.o&=o&=bQ#bp.bQ#bQ#+9.+9.+9.+9.bp.bp.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=b,+b,+b,+b,+o&=bQ#+9.+9.bQ#bQ#o&=b,+j(#j(#o&=bQ#+9.bp.bp.bQ#b,+j(#o3.o3.o3.t4.t4.t4.D6.D6.t4.:^+p3.t4.h;#<(+n3.[(+[(+Gr&Gr&Gr&[(+[(+[(+[(+o3.o3.b,+b,+b,+b,+{4%{4%o&=o&=o&=b,+b,+j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#v5.h;#m3.s4.C6.v5.n3.w{@w{@w{@w{@S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%>S%~h&~h&~h&~h&~h&~h&~h&~h&>S%>S%>S%>S%>S%>S%>S%>S%VD@,C+Fu+Fu+uq*&s*&s*xr*&s*&s*=^@&s*&s*uq*,C+ X+o)@lC&GJ@GJ@GJ@GJ@zw*zw*lC&lC&lC&GJ@GJ@GJ@GJ@pK+';$';$US+23+23+US+';$';$d #d #u]#:{+:{+u]#d #nh.`b&#d+TO&`E&`E&3]&O4%O4%`E&`E&`E&TO&TO&TO&#d+`b&Bj.G|@T_+T_+$(+T_+T_+G|@Kh+Kh+Kh+Kh+Kh+Kh+Kh+US+lt*>H*zw*zw*aH*(k=>H*zw*>H*>H*>H*>H*>H*>H*>H*-x#qK+uq*,C+Fu+tq*Fu+Fu+,C+tq*Fu+,C+,C+uq*xr*&s*kt*%' %' %' %' %' X@$X@$X@${h&~h&%' X@$X@$%' ~h&{h&>S%>S%>S%>S%>S%>S%>S%%' >S%%' X@$X@$X@$X@$%' nh.7P.aH@aH@Bz$>( >( Bz$bH@9g.>( >( aH@l7 NM+cI+u]#k#@$' X+SO+qK+5,+$' qK+jM#jM#jM#jM#jM#jM#jM#,0+%z&%z&%z&.y&+y&+y&Xw&Xw&Xw&Xw&Xw&+y&.y&.y&.y&~h&u!=0&+V&$R~$f+#R~$m|.d%$35+f+#f+#f+#R~$R~${'$u]#c> x*$x*$x*$x*$x*$x*$x*$=|$u3$u3$x*$X@$X@$%' x{ nh.u]#:{+v]#v]#v]#v]#:{+d #u]#:{+v]#v]#v]#", "H;@P7.6!.6!.P7.H;@H;@P7.P7.P7.P7.P7.P7.P7.P7.X)@X)@hY.hY.G6.9, 9, VW.VW.VW.9, 9, 9, G6.G6.H;@P7.}7.zT.}7.P7.*o@P7.*o@hY.Vh.ts.[{.xx.8'%9K.8'%[{.is@is@x5.O7.O7.xX%xX%x5.x5.x5.x5.x5.O7.O7.O7.is@Vh.%j.%j.%j.Vh.x5.O7.is@is@is@x5.x5.O7.O7.xX%x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%is@O7.xX%O7.is@is@x5.xX%xX%O7.x5.is@x5.O7._r+M7.N7.O7.x5._r+_r+is@Vh.xX%N7._r+_r+xX%xX%xX%_r+_r+PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.xX%xX%xX%_r+_r+_r+N7.N7.O7.O7.O7.O7.O7.O7.O7.O7._r+N7.N7.M7.M7.N7.N7._r+N7.N7._r+_r+xX%xX%xX%O7.{t.{t.{t.{t.{t.{t.{t.{t.aq.{t.j}+{t.(s.(s.{t.l#@Hu+#9.[3+cp.PI.Hu+#9.cp.cp.cp.cp.cp.cp.cp.[3+[3+%0+@9.eO@@9.M7.N7.M7.$B#_r+M7.$B#%0+N7.N7.M7.$B#N7.N7.N7.N7.N7.N7.N7.N7.M7.N7.xX%_r+M7.%0+N7._r+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+N7.N7.M7.M7.M7.O7._r+N7.N7.xX%O7._r+M7.eO@M7.N7.$B#%0+_r+_r+%0+N7.N7.N7.N7.N7.N7.N7.N7.%0+M7._r+xX%xX%_r+M7.%0+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+M7.M7.M7.M7.M7.M7.M7.M7.xX%xX%_r+N7.M7.M7.M7.M7.0q.0q.q3.q3.q3.q3.0q.0q.q3.q3.q3.q3.q3.q3.q3.q3.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#%0+%0+%0+%0+$B#$B#$B#$B##k.<3+,H.bp.bp.,H.<3+#k.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.:(+:(+<3+q3.:(+bp.bp.:(+q3.<3+q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.q3.q3.q3.,H.,H.:(+q3.0q.<3+0q.,H.bp.:(+q3.,H.,H.,H.,H.,H.,H.,H.,H.0q.<3+v4.<3+,H.:(+,H.q3.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.bp.bp.bp.bp.bp.bp.bp.:(+,H.,H.,H.,H.,H.,H.,H.,H.u4.u4.u4.u4.u4.u4.u4.u4.N7+*B.*B.N7+N7+*B.*B.72.yy.oO 78*78*78*62.J!.u4.N7+N7+E6.$Z*$Z*$Z*K7.K7.-1.yy.yy.yy.yy.yy.yy.yy.yy.oO _{.78*yy.b^*oO _{.yy.yy.yy.yy.yy.yy.yy.yy.78*78*oO yy.yy.yy.oO 78*yy.yy.b^*b^*;1.cw.cw.7v.ue.7v.7v.;1.b^*yy.oO oO }[#q3.q3.,H.,H.:(+:(+bp.+9.,H.<3+<3+q3.:(+:(+,H.72.J!.U%+62.-1.72.J!.62.J!.J!.J!.J!.J!.J!.J!.J!.o&=+9.:(+bp.bQ#o&=+9.bp.bQ#bQ#+9.+9.bp.:(+:(+,H.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=o&=o&=o&=o&=o&=o&=+9.+9.bQ#bQ#o&=b,+b,+b,+b,+o&=bQ#+9.bQ#bQ#b,+j(#o3.o3.o3.o3.o3.o3.o3.o3.o3.D6.:^+t4.h;#h;#v5. :*[(+Gr&Gr&Gr&[(+[(+[(+[(+o3.o3.b,+b,+b,+b,+{4%{4%b,+o&=bQ#o&=j(#Q+&j(#b,+j(#j(#j(#j(#j(#j(#j(#v5.h;#m3.m3.s4.n3.h;#w{@w{@w{@w{@S%X@$x*$X@$%' >S%%' X@$~h&~h&~h&~h&~h&~h&~h&~h&~h&~h&~h&~h&~h&~h&~h&~h&%' %' %' %' %' %' %' Nc&z9.uq*uq*xr*&s*=^@&s*xr*wr*wr*=^@=^@xr*uq*,C+ X+q,@ (&lC&GJ@GJ@zw*>H*>H*lC&GJ@GJ@zw*zw*>H*aH*aH*';$';$';$US+US+';$';$';$u]#u]#:{+v]#v]#:{+u]#x{ >n.<:*#d+TO&`E&3]&O4%#u%`E&`E&`E&TO&TO&TO&#d+`b&h~ Kh+G|@$(+$(+$(+$(+$(+Kh+Kh+Kh+Kh+Kh+Kh+Kh+US+pK+zw*zw*zw*zw*>H*zw*zw*aH*>H*>H*zw*zw*GJ@GJ@~~@SO+,C+,C+Fu+Fu+Fu+Fu+,C+Fu+Fu+Fu+,C+,C+uq*uq*uq*%' %' X@$X@$x*$u3$u3$u3${h&~h&%' X@$X@$%' ~h&{h&~h&>S%>S%>S%>S%%' %' %' ~h&>S%>S%>S%>S%>S%>S%zi.oh.Bz$aH@Bz$>( >( 9g.aH@l7 bH@9g.9g.aH@bH@aH@23+wE*qK+SO+SO+qK+qK+qK+qK+$' $' $' $' $' $' $' $' %z&.y&.y&+y&Xw&Be+Be+@d+.y&+y&Xw&+y&%z&)A&%z&~h&LL$Cq-d%$R~$35+R~$V&$0&+{'${'${'${'${'${'${'$u]#c> x*$x*$x*$x*$x*$x*$x*$=|$u3$u3$x*$X@$X@$%' x{ x{ u]#:{+:{+:{+:{+u]#u]#u]#u]#:{+:{+:{+:{+", "P7.6!.6!.6!.6!.P7.H;@P7.P7.P7.P7.P7.P7.P7.P7.X)@X)@hY.hY.G6.9, 9, VW.VW.VW.VW.9, 9, 9, G6.H;@P7.zT.N~.zT.O~.P7.O~.P7._j.hY.kI.ts.jI.xx. 8&4I%[{.x5.x5.x5.x5.O7.O7.O7.x5.x5.x5.x5.x5.O7.O7.O7.Vh.dD.%j.Su$%j.dD.is@O7.is@is@x5.x5.O7.O7.O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%is@O7.xX%O7.is@is@x5.xX%xX%O7.x5.is@x5.O7._r+M7.M7.O7.O7.N7._r+is@is@xX%_r+_r+xX%xX%xX%_r+_r+N7.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.xX%xX%xX%_r+_r+_r+N7.N7.O7.O7.O7.O7.O7.O7.O7.O7.$B#M7._r+O7.O7._r+M7.$B#N7.N7._r+_r+xX%xX%xX%O7.{t.{t.{t.{t.{t.{t.{t.{t.(s.{t.l#@j}+aq.(s.aq.j}+Hu+#9.[3+cp.PI.Hu+#9.cp.[3+[3+cp.cp.cp.cp.cp.cp.N7.%0+@9.$B#%0+%0+$B#eO@_r+M7.$B#%0+N7.N7.M7.$B#N7.N7.N7.N7.N7.N7.N7.N7.M7.N7.xX%_r+M7.%0+N7._r+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+N7.N7.M7.M7.M7.xX%_r+M7.N7.xX%O7.xX%N7.@9.N7.N7.@9.$B#_r+xX%M7.N7.N7.N7.N7.N7.N7.N7.N7.%0+M7._r+xX%xX%_r+M7.%0+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+M7.M7.M7.M7.M7.M7.M7.M7.%0+%0+M7.N7._r+_r+_r+_r+q3.q3.0q.0q.0q.0q.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#%0+%0+%0+%0+#k.<3+,H.bp.bp.,H.<3+#k.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.:(+:(+0q.q3.,H.bp.bp.,H.q3.0q.q3.q3.q3.q3.q3.q3.q3.q3.:(+,H.,H.q3.q3.q3.,H.,H.,H.0q.<3+<3+0q.q3.<3+#k.,H.,H.,H.,H.,H.,H.,H.,H.0q.<3+v4.<3+,H.:(+,H.q3.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.u4.u4.u4.u4.u4.u4.u4.u4.N7+*B.*B.N7+N7+*B.*B.N7+-1.-1.J!.62.62.w5.u4.u4.E6.$Z*K7.hP.hP.hP.o4@o4@u4.-1.-1.-1.-1.-1.-1.-1.-1.J!.U%+62.-1.72.J!.U%+yy.yy.yy.yy.yy.yy.yy.yy.78*oO yy.yy.yy.oO 78*78*J!.-1.-1.72.`q@`q@K!.K!.>'.>'.K!.`q@72.-1.J!.62.NR*NR*NR*{S*bp.:(+:(+,H.+9.,H.<3+<3+$B#eO@eO@,H.72.J!.U%+62.-1.72.J!.62.J!.J!.J!.J!.J!.J!.J!.J!.+9.:(+,H.,H.bp.+9.bp.,H.bQ#bQ#+9.+9.bp.:(+:(+,H.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=o&=bQ#bQ#bQ#bQ#o&=o&=bQ#bQ#bQ#o&=o&=o&=o&=b,+b,+o&=o&=bQ#bQ#bQ#o&=o&=o3.o3.o3.o3.o3.o3.o3.o3.v5.o3.o3.v5.v5.v5.t4.}o=[(+Gr&Gr&Gr&[(+[(+[(+[(+o3.o3.b,+b,+b,+b,+{4%{4%j(#o&=+9.bQ#Q+&w{@j(#o&=j(#j(#j(#j(#j(#j(#j(#v5.n3.s4.s4.m3.h;#n3.Q+&Q+&Q+&Q+&& =& =FU%FU%FU%S%X@$u3$x*$%' >S%%' u3$~h&~h&~h&~h&~h&~h&~h&~h&~h&~h&~h&~h&~h&~h&~h&~h&X@$X@$X@$X@$X@$X@$X@$X`+u{@uq*&s*=^@=^@&s*xr*xr*wr*=^@&s*xr*uq*,C+Fu+ X+q,@ (&lC&GJ@GJ@zw*>H*>H*GJ@GJ@zw*zw*>H*aH*aH*aH*';$';$';$d #d #';$';$';$u]#u]#:{+v]#v]#:{+u]#x{ >n.-.%<:*#d+`E&3]&O4%O4%`E&`E&`E&TO&TO&TO&#d+`b&Bj.G|@T_+$(+xc+xc+xc+$(+Kh+Kh+Kh+Kh+Kh+Kh+Kh+US+x}*lC&lC&lC&lC& (&lC&lC&zw*zw*GJ@lC&lC& (&p)@[I+ X+Fu+Fu+,C+,C+,C+,C+Fu+,C+,C+,C+Fu+Fu+tq*tq*tq*%' X@$X@$x*$x*$u3$=|$=|${h&~h&%' X@$X@$%' ~h&{h&~h&~h&~h&>S%%' %' X@$X@$~h&{h&{h&{h&{h&{h&{h&zi.oh.Bz$bH@aH@9g.>( 9g.aH@cI+bH@9g.9g.Bz$aH@aH@US+r-@SO+qK+qK+qK+SO+SO+qK+ X+ X+ X+ X+ X+ X+ X+ X+Xw&Xw&Be+Be+@d+@d+z$$z$$%z&+y&Be++y&)A& ==)A&>S%,].$3.d%$R~$f+#R~$d%$0&+RO+RO+d%$V&$m|.{'$R~$:{+$.@X@$X@$X@$X@$X@$X@$X@$X@$X@$X@$x*$x*$x*$x*$y*$y*$h]@v]#:{+u]#d #';$';$:{+:{+u]#u]#u]#u]#", "P7.6!.5!.5!.6!.P7.P7.P7.P7.P7.P7.P7.P7.P7.P7.G6.G6.G6.G6.9, 9, 9, 9, 8v.8v.VW.VW.9, 9, 9, H;@O~.N~.&% N~.~% O~.~% O~.m` n` lI.kI.lI.~(.j0&`d#T}%is@is@is@x5.x5.x5.x5.x5.x5.x5.x5.is@is@is@is@dD.dD.dD.dD.dD.Vh.is@x5.Vh.is@x5.O7.xX%O7.O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%is@O7.xX%O7.is@is@x5.xX%xX%O7.x5.is@x5.O7._r+M7.M7.O7.O7.N7.N7.x5.is@_r+_r+xX%xX%xX%xX%_r+N7.M7.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.xX%xX%xX%_r+_r+_r+N7.N7.xX%xX%xX%xX%xX%xX%xX%xX%@9.%0+xX%x5.x5.xX%%0+@9.M7.N7.N7.N7._r+_r+xX%xX%{t.{t.{t.{t.{t.{t.{t.{t.ym.{t.l#@l#@{t.(s.aq.{t.PI.cp.[3+[3+#9.PI.#9.[3+[3+[3+[3+cp.cp.cp.#9.#9.xX%N7.%0+%0+M7.M7.$B#)Z%N7.%0+$B#%0+N7._r+M7.%0+N7.N7.N7.N7.N7.N7.N7.N7.M7.N7.xX%_r+M7.%0+N7._r+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+N7.N7.M7.M7.M7._r+M7.%0+M7.xX%O7.xX%N7.$B#N7.M7.@9.@9._r+xX%M7._r+_r+_r+_r+_r+_r+_r+_r+%0+%0+M7.M7.M7.M7.%0+%0+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+M7.M7.M7.M7.M7.M7.M7.M7.eO@@9.%0+N7._r+xX%xX%xX%,H.q3.0q.<3+<3+0q.q3.,H.q3.q3.q3.q3.q3.q3.q3.q3.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#%0+%0+%0+%0+<3+0q.q3.,H.,H.q3.0q.<3+q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.q3.q3.q3.q3.q3.bp.:(+,H.q3.q3.q3.q3.,H.bp.q3.<3+<3+0q.0q.v4.S%{h&%' u3${h&{h&{h&{h&{h&{h&{h&{h&>S%>S%>S%>S%>S%>S%>S%>S%%' %' %' %' %' %' %' Nc&ps+,C+xr*&s*xr*uq*xr*&s*=^@&s*uq*,C+Fu+Fu+Fu+SO+o)@lC&GJ@GJ@GJ@GJ@zw*zw*GJ@zw*zw*zw*zw*>H*>H*>H*';$';$d #u]#u]#d #';$';$d #d #u]#:{+:{+u]#d #nh.!D+<:*<:*#d+TO&`E&`E&3]&`E&`E&`E&TO&TO&TO&#d+`b&/{ T_+$(+xc+xc+xc+$(+$(+Kh+Kh+Kh+Kh+Kh+Kh+Kh+US+q(# (&lC&lC&p)@|7. (&lC&GJ@lC&lC& (& (&p)@p)@cQ#1<#tq*Fu+,C+uq*,C+,C+Fu+uq*,C+Fu+Fu+tq*$x+)p#)p#X@$X@$X@$x*$x*$x*$x*$x*${h&~h&%' X@$X@$%' ~h&{h&{h&{h&~h&>S%%' %' X@$X@$~h&~h&{h&0, 0, {h&~h&zi.7P.aH@}f.}f.aH@Bz$Bz$bH@aH@9g.>( 9g.bH@cI+cI+v]#{**SO+$' $' SO+ X+ X+SO+1<#1<#1<#1<#1<#1<#1<#1<#z$$z$$z$$z$$z$$@d+@d+@d+%z&Xw&z$$Be+%z& ==%z&%' 23+d%$m|.{'${'$m|.V&$d%$0&+RO+d%$V&$m|.R~$f+#v]#$.@X@$X@$X@$X@$X@$X@$X@$>S%>S%%' X@$x*$u3$=|$%.@8' ZW+h]@:{+d #d #d #d #v]#:{+u]#d #d #d #", "6!.6!.5!.5!.6!.6!.P7.P7.P7.P7.P7.P7.P7.P7.P7.VW.VW.VW.VW.9, 9, 9, 9, 8v.8v.8v.VW.VW.9, 9, O~.~% &% #% &% |% ~% |% ~% ;_ l` )y.mI.)y.'K.u2&M/.T}%is@is@is@Vh.Vh.Vh.Vh.x5.x5.x5.is@Vh.dD.dD.dD.%j.dD.Vh.is@x5.x5.is@is@dD.is@x5.xX%xX%xX%O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%is@O7.xX%O7.is@is@x5.xX%xX%O7.x5.is@x5.O7._r+M7.M7.xX%O7.M7.N7.x5.x5._r+xX%xX%xX%O7.xX%_r+N7.M7.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.xX%xX%xX%_r+_r+_r+N7.N7._r+_r+_r+_r+_r+_r+_r+_r+%0+M7._r+xX%xX%_r+M7.%0+%0+%0+M7.M7.N7.N7.N7._r+{t.{t.{t.{t.{t.{t.{t.{t.ym.aq.l#@l#@{t.aq.aq.{t.#9.[3+w7+|5+cp.#9.cp.|5+|5+[3+[3+[3+cp.#9.#9.#9._r+M7.%0+%0+N7._r+M7.$B#%0+$B#@9.$B#N7.xX%_r+M7.N7.N7.N7.N7.N7.N7.N7.N7.M7.N7.xX%_r+M7.%0+N7._r+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+N7.N7.M7.M7.M7.N7.%0+$B#%0+_r+xX%_r+M7.$B#N7.M7.eO@@9._r+xX%N7._r+_r+_r+_r+_r+_r+_r+_r+%0+%0+$B#@9.@9.$B#%0+%0+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+M7.M7.M7.M7.M7.M7.M7.M7.eO@@9.%0+M7.N7.N7.M7.M7.,H.q3.0q.<3+<3+0q.q3.,H.q3.q3.q3.q3.q3.q3.q3.q3.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#@9.@9.$B#$B#%0+%0+M7.M7.0q.0q.q3.q3.q3.q3.0q.0q.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.:(+:(+bp.:(+q3.<3+<3+q3.:(+bp.q3.q3.q3.q3.q3.q3.q3.q3.bp.:(+,H.q3.0q.q3.q3.q3.bp.,H.q3.q3.:(+:(+,H.0q.,H.,H.,H.,H.,H.,H.,H.,H.:(+q3.<3+0q.q3.,H.0q.v4.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.0q.0q.0q.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.u4.u4.u4.u4.u4.u4.u4.u4.w5.tF.tF.w5.w5.tF.tF.w5.tF.E6.N7+N7+N7+K7.$Z*L7.K7.SW#Yj@QK.QK.nj*8J.%R+N7+72.72.72.72.72.72.72.`q@-1.J!.-1.`q@K!.72.J!.b^*b^*b^*b^*b^*b^*b^*b^*oO yy.yy.yy.yy.oO _{.U%+w5.h|.h|.h|.h|.%U*%U*%U*h|.h|.h|.h|.h|.%U*%U*p3.{S*B(*B(*Sp#Sp#Sp#k<.k<.av#k<.w7+ET&'C+vA*6z+$B#J!.U%+a,+:{.62.J!.62.:{.U%+U%+U%+U%+U%+U%+U%+U%++9.bp.,H.:(++9.bQ#bp.,H.+9.+9.bQ#bQ#bQ#bQ#o&=o&=bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=bQ#+9.bp.bp.+9.bQ#o&=o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#bQ#bQ#+9.bp.bp.:(+:^+:^+:^+D6.t4.t4.t4.o3.t4.o3.v5.v5.v5.o3.t4.[(+C6.U'#U'#U'#C6.C6.C6.C6.o3.o3.b,+b,+b,+b,+{4%{4%Q+&bQ#:(++9.w{@S`%Q+&bQ#j(#j(#j(#j(#j(#j(#j(#v5.D6.[(++T+C6.v5.o3.o&=bQ#j(#j(#& =& =FU%FU%qN%93#& =Q+&Q+&j(#j(#j(#j(#j(#b,+b,+b,+b,+b,+b,+b,+b,+CI#w{@j(#b,+o&=o&=b,+b,+j(#w{@S`%w{@b,+bQ#b,+Q+&w{@w{@w{@w{@w{@w{@w{@w{@CI#CI#w{@w{@Q+&Q+&j(#j(#b,+w{@&r=*r=S`%w{@w{@w{@Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&j(#Q+&w{@w{@w{@w{@Q+&j(#o&=j(#CI#w{@j(#b,+j(#Q+&CI#CI#CI#CI#CI#CI#CI#CI#w{@w{@CI#S`%sX%&r=&r=&r=+X+)p#$x+tq*Fu+tq*$x+)p#uq*uq*,C+,C+Fu+Fu+tq*tq*0, X@$=|$x*${h&0, >S%u3${h&{h&{h&{h&{h&{h&{h&{h&X@$X@$X@$X@$X@$X@$X@$X@$%' %' %' %' %' %' %' Nc&lx@,C+xr*uq*Fu+Fu+uq*=^@&s*xr*uq*,C+Fu+,C+uq*$' xu#zw*GJ@GJ@GJ@GJ@lC&lC&zw*zw*zw*zw*GJ@GJ@GJ@GJ@US+';$u]#:{+:{+u]#';$US+';$';$d #u]#u]#d #';$zi.`b&#d+#d+#d+#d+#d+TO&TO&`E&`E&`E&TO&TO&TO&#d+`b&*$@xc+xc+xc+xc+$(+T_+T_+T_+T_+T_+T_+T_+T_+T_+d #q(#lC&zw*GJ@p)@|7. (&zw*lC&lC&lC&lC&lC& (& (&q,@_($tq*Fu+uq*uq*uq*,C+Fu+tq*tq*tq*tq*$x+$x+$x+$x+x*$x*$X@$X@$X@$X@$%' %' {h&~h&%' X@$X@$%' ~h&{h&{h&{h&~h&>S%%' X@$X@$x*$X@$%' >S%~h&~h&>S%%' $.@Kh+bH@cI+cI+}f.aH@bH@bH@Bz$9g.9g.aH@cI+ko.NM+:{+A<$SO+5,+5,+SO+1<# X+SO+1<#1<#1<#1<#1<#1<#1<#1<#mq+mq+z$$@d+Be+Be+Xw&Xw&.y&@d+mq+@d+%z& ==.y&x*$f!+-V@R~$m|.d%$V&$m|.{'$m|.m|.{'${'$R~$f+#f+#v]#$.@X@$X@$X@$X@$X@$X@$X@$>S%%' %' X@$x*$u3$=|$0@@8' M8@h]@:{+u]#:{+:{+v]#v]#:{+u]#';$';$';$", "6!.5!.5!.5!.5!.6!.P7.P7.P7.P7.P7.P7.P7.P7.P7.Hu+Hu+8v.8v.VW.9, 9, G6.8v.8v.8v.VW.VW.VW.9, O~.&% &% &% &% &% ~% ~% ~% R_ -H.lI.mI.mI.lI.<].^q%G6.Vh.Vh.Vh.Vh.dD.dD.dD.O7.x5.is@Vh.dD.%j.Su$Su$Ig.1.&~$+c+#c+#c+#~$+sN%dD.Vh.x5.xX%xX%xX%O7.x5.x5.x5.x5.x5.x5.x5.x5.x5.xX%xX%xX%xX%xX%xX%xX%xX%is@O7.xX%O7.is@is@x5.xX%xX%O7.x5.is@x5.O7._r+M7.%0+xX%xX%M7.N7.x5.x5._r+xX%xX%O7.O7.xX%_r+M7.M7.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.PI.xX%xX%xX%_r+_r+_r+N7.N7.N7.N7.N7.N7.N7.N7.N7.N7.xX%_r+M7.%0+%0+M7._r+xX%$B#%0+%0+%0+M7.M7.N7.N7.{t.{t.{t.{t.{t.{t.{t.{t.bv#aq.l#@$9.j}+aq.aq.aq.cp.|5+w7+w7+[3+cp.[3+w7+|5+|5+[3+[3+cp.#9.#9.#9.M7.%0+$B#M7._r+O7.xX%_r+$B#@9.eO@$B#N7.xX%xX%N7.N7.N7.N7.N7.N7.N7.N7.N7.M7.N7.xX%_r+M7.%0+N7._r+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+N7.N7.M7.M7.M7.%0+$B#@9.$B#N7._r+N7.M7.%0+N7.M7.eO@eO@N7.xX%N7._r+_r+_r+_r+_r+_r+_r+_r+%0+$B#eO@)Z%)Z%eO@$B#%0+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+M7.M7.M7.M7.M7.M7.M7.M7.@9.$B#%0+M7.M7.%0+@9.eO@,H.q3.0q.<3+<3+0q.q3.,H.q3.q3.q3.q3.q3.q3.q3.q3.$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#$B#@9.@9.$B#$B#%0+%0+M7.M7.,H.q3.0q.<3+<3+0q.q3.,H.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.:(+:(+bQ#:(+0q.v4.v4.0q.:(+bQ#q3.q3.q3.q3.q3.q3.q3.q3.bp.bp.,H.q3.0q.0q.q3.q3.bp.,H.q3.:(+bQ#o&=bQ#+9.,H.,H.,H.,H.,H.,H.,H.,H.bp.,H.0q.0q.q3.q3.<3+#k.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.0q.0q.q3.q3.,H.:(+:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.u4.u4.u4.u4.u4.u4.u4.u4.p3.E6.E6.p3.p3.E6.E6.p3.#:+tF.E6.E6.$Z*$Z*L7.I1.K7.SW#0M.N|@N|@0M.8J.hP.N7+72.72.72.72.72.72.72.K!.72.-1.72.K!.K!.`q@-1.72.72.b^*72.b^*72.b^*72.yy.-1.yy.-1.yy.62._{.:{.u4.h|.h|.%U*J7.J7.n4@n4@J7.J7.J7.%U*%U*%U*%U*p3.0q.{n#$b#$b#]n#Sp#av#av#av#k<.ET&'C+|r%|r%6z+q3.bp.:{.a,+a,+U%+62.U%+a,+:{.:{.:{.:{.:{.:{.:{.:{.o&=+9.bp.bp.bQ#o&=bQ#bp.+9.+9.bQ#bQ#o&=b,+b,+j(#D6.D6.D6.D6.D6.D6.bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#bQ#o&=bQ#+9.bp.bp.+9.bQ#o&=o&=o&=o&=o&=o&=bQ#bQ#bQ#+9.+9.+9.+9.+9.bp.,H.,H.p3.p3.p3.:^+D6.D6.t4.t4.p3.D6.o3.v5.v5.v5.v5.n3.C6.C6.C6.C6.C6.C6.v5.v5.o3.o3.b,+b,+b,+b,+{4%{4%Q+&bQ#:(++9.w{@S`%Q+&bQ#j(#j(#j(#j(#j(#j(#j(#j(#:^+ :*t4.v5.v5.t4.bQ#+9.j(#j(#& =& =S%>S%>S%>S%>S%>S%>S%mh.lx@Fu+uq*Fu+$x+$x+,C+=^@&s*xr*uq*,C+,C+uq*&s*jM#-x#>H*zw*GJ@GJ@lC& (& (&>H*zw*zw*GJ@GJ@lC& (& (&US+';$u]#:{+:{+u]#';$US+US+';$';$d #d #';$';$J> B#@B#@#d+`b&#d+`b&#d+!D+`E&{y%`E&B#@TO&B#@#d+`b&y$$Ea+Ea+Ea+xc+$(+T_+G|@T_+T_+T_+T_+T_+T_+T_+d #9&+GJ@aH*zw* (&p)@lC&>H*GJ@GJ@GJ@GJ@GJ@GJ@GJ@~~@zM+$x+Fu+uq*xr*uq*,C+Fu++X++X+)p#$x+$x+tq*Fu+Fu+x*$x*$X@$X@$%' >S%>S%>S%{h&~h&%' X@$X@$%' ~h&{h&,0+>0+sq*mh.Nc&X`+ME+ME+Pw%ME+X`+Nc&Nc&X`+ME+0@@Kh+}f.NM+NM+l7 }f.bH@}f.cI+l7 }f.l7 NM+cI+bH@US+;~@ X+5,+5,+SO+1<#1<#SO+SO+SO+SO+SO+SO+SO+SO+SO+mq+mq+z$$Be+Xw&+y&.y&%z&.y&@d+Gc%z$$.y& ==+y&u3$p] zm.35+V&$RO+d%${'$f+#-V@-V@35+35+35+35+f+#v]#X@$X@$X@$X@$X@$X@$X@$X@$X@$X@$X@$x*$x*$x*$u3$u3$0@@h]@v]#:{+:{+h]@ZW+f!+h]@:{+d #';$US+';$", "6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.H;@Y6.ce ce ce iI.Y6.Y6.Y6.H;@P7.P7.6!.5!.5!.*- 9- D& q& q& Ll N~.*- O~.O~.1% 1% 6% 6% 6% Hu+G6.G6.G6.9, 9, VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.x5.w/;G!;G!;G!;w/;w/;w/;w/;S+&Ig.sN%~$+x5.O7.O7.O7.VW.VW.VW.VW.8v.8v.8v.8v.9, 9, 9, 9, 9, 9, 9, 9, Vh.x5._r+%0+@9.$B#M7.N7.xX%xX%O7.O7.x5.is@is@Vh.cp.Hu+VW.8v.#9.cp.PI.VW.G6.9, VW.8v.Hu+PI.#9.cp.cp.#9.#9.PI.Hu+Hu+8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+xX%xX%xX%_r+_r+_r+N7.N7.N7.%0+M7.O7.x5._r+_r+x5.O7.xX%N7.M7.M7.N7.xX%O7.M7._r+xX%_r+M7.%0+M7._r+cp.#9.Hu+PI.cp.[3+#9.PI.w7+[3+cp.[3+w7+w7+|5+cp.aq.aq.aq.aq.aq.aq.aq.aq.aq.aq.aq.{t.{t.{t.j}+j}+Hu+Hu+PI.cp.[3+|5+w7+ET .#9.#9.#9.#9.#9.#9.#9.PI.#9.#9.cp.cp.#9.#9.PI.w7+[3+PI.Hu+#9.#9.PI.Hu+x5.x5.x5.O7.xX%xX%_r+_r+N7.N7.N7.N7.N7.N7.N7.N7._r+_r+_r+_r+_r+_r+_r+_r+xX%xX%O7.O7.O7._r+M7.$B#v4.0q.q3.0q.v4.v4.<3+q3.q3.q3.q3.q3.q3.q3.q3.q3.#k.v4.v4.<3+0q.0q.q3.q3.<3+0q.q3.,H.,H.q3.0q.<3+$B#N7.O7.xX%M7.$B#@9.@9.M7.M7.M7.M7.M7.M7.M7.M7.<3+<3+<3+<3+<3+<3+<3+<3+#k.v4.v4.<3+0q.0q.q3.q3.@9.@9.@9.@9.@9.@9.@9.@9.M7.M7.M7.M7.M7.M7.M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#%0+@9.)Z%eO@$B#%0+$B#eO@0q.0q.q3.q3.,H.:(+:(+bp.bQ#bp.,H.0q.<3+0q.q3.,H.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+,H.q3.q3.0q.0q.%0+@9.eO@eO@$B#%0+$B#eO@eO@$B#%0+$B#eO@eO@@9.%0+,H.,H.,H.,H.,H.,H.,H.,H.0q.0q.q3.q3.,H.:(+:(+:(+0q.0q.0q.0q.0q.0q.0q.0q.0q.0q.q3.q3.,H.:(+:(+bp.+9.+9.bp.:(+:(+,H.q3.q3.q3.,H.:(+,H.<3+v4.<3+0q.,H.q3.0q.<3+<3+0q.q3.,H.+9.+9.bp.:(+:(+,H.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.:(+:(+:(+D6.u4.#:+#:+N7+p3.p3.u4.u4.$Z*L7.$Z*&o@&o@K7.L7.w5.w5.w5.w5.w5.w5.w5.w5.p3.w5.w5.u4.N7+N7+E6.E6.w5.w5.J!.w5.-1.N7+`q@tF.k5+w5.>'.^C.>'.N7+62.:^+w5.w5.w5.w5.w5.w5.w5.w5.p3.p3.p3.w5.w5.u4.u4.u4.:(+:(+:(+:(+:(+:(+:(+:(+bp.+9.bQ#o&=o&=bQ#+9.bp.+9.bp.bp.:(+:(+,H.q3.q3.+9.:(+q3.0q.0q.,H.+9.o&=bQ#bp.:(+:(++9.bQ#+9.:(+:(++9.o&=bQ#+9.+9.bQ#o3.It&It&It&It&It&It&p3.p3.t4.:^+bp.+9.bQ#o&=8&+bp.+9.:^+p3.w5.p3.D6.o3.v5.v5.o3.D6.:^+:^+D6.o3.v5.o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+o3.o3.o3.o3.o3.o3.o3.o3.v5.o3.o3.t4.t4.o3.o3.v5.v5.v5.v5.v5.v5.v5.j(#j(#w{@Q+&j(#b,+b,+j(#Q+&w{@b,+o&=bQ#o&=j(#Q+&j(#b,+CI#Q+&j(#Q+&CI#CI#w{@j(#j(#t4.bQ#o&=j(#Q+&j(#o&=bQ#b,+j(#o&=+9.bQ#& =sX%o&=b,+b,+j(#Q+&Q+&w{@w{@j(#b,+o&=o&=b,+Q+&CI#S`%CI#CI#CI#w{@Q+&Q+&j(#j(#Q+&o&=bp.bp.o&=j(#b,++9.CI#w{@j(#j(#j(#j(#b,+o&=o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+j(#Q+&Q+&w{@w{@Q+&Q+&Q+&j(#j(#j(#b,+b,+CI#CI#CI#w{@Q+&j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#j(#2p%2p%qK#qK#/W%.X+.X+.X+/W%/W%/W%/W%qK#qK#qK#qK#iM#'m*Yy&1M@1M@1M@Yy&'m*1M@YT#YT#Yy&KD=,S#KD= X+Nc&%' >S%>S%%' X@$x*$u3$x*$X@$>S%~h&{h&~h&>S%%' %z&%z&%z&%z&%z&%z&%z&%z&@d+@d+@d+z$$>H%mq+Xw&kt*u{@Fu+,C+,C+uq*xr*xr*xr*uq*uq*uq*uq*uq*uq*uq*qK+[I+p)@ (& (&lC&GJ@GJ@zw*aH*aH*>H*>H*zw*GJ@GJ@lC&US+u]#h]@M8@h]@v]#v]#h]@u]#:{+u]#';$OP*OP*US+u]#zi.zi.~h&nh.%' x{ X@$$.@X@$nh.{h&xE*Av&xE*0, J> G|@xc+Ea+Ea+xc+xc+5A.{! ]! Ea+$(+G|@Kh+Kh+G|@';$FG*zw*zw*lC& (&p)@|7.|7. (& (&lC&GJ@GJ@zw*zw*-x#$' ,C+Fu+,C+xr*&s*uq*Fu+,C+,C+,C+,C+,C+,C+,C+,C+z$$>H%Gc%>H%z$$z$$mq+Gc%Xw&Xw&Xw&Xw&Be+Be+Be+u{@Fu+,C+,C+,C+uq*uq*xr*xr*,C+,C+,C+uq*uq*uq*xr*sq*x{ $(+$(+$(+$(+$(+$(+$(+T_+$(+xc+xc+xc+T_+G|@23+mh.uq*,C+,C+Fu+tq*tq*tq*&s*xr*xr*uq*,C+,C+Fu+Fu+.y&Xw&Be+Xw&.y&.y&+y&Be+)A&.y&Xw&+y&%z&.y&Be+2&$9Y+{! Ea+T_+G|@Kh+G|@T_+Kh+G|@$(+Ea+5A.Ea+xc+$(+ZQ.)A&Xw&mq+>H%@d++y&)A&%z&+y&Be+Be+Xw&Xw&@d+=|$nh.u]#:{+v]#v]#:{+d #';$u]#u]#u]#u]#u]#u]#", "6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.6!.P7.H;@iI.ce ce ce iI.Y6.H;@H;@P7.P7.P7.P7.6!.7!.zT.0- 6,%6,%6,%6,%zT.zT.H;@P7.9, 9, VW.VW.8v.8v.G6.G6.G6.9, 9, VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.x5.G!;jc;jc;jc;G!;G!;w/;w/;;G.D+.sN%~$+x5.O7.O7.O7.PI.Hu+Hu+8v.8v.VW.VW.9, 8v.8v.8v.8v.8v.8v.8v.8v.is@x5.xX%_r+N7._r+xX%O7.O7.O7.O7.x5.x5.x5.x5.x5.#9.Hu+VW.8v.#9.cp.PI.8v.9, VW.VW.8v.Hu+PI.PI.#9.PI.PI.PI.Hu+Hu+8v.8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+xX%xX%xX%_r+_r+_r+N7.N7._r+%0+M7.O7.x5._r+N7.x5.O7.xX%N7.M7.M7.N7.xX%O7.$B#M7._r+_r+M7.M7._r+O7.cp.#9.Hu+PI.cp.[3+#9.PI.|5+cp.#9.cp.|5+w7+[3+#9.aq.aq.aq.aq.aq.aq.aq.aq.aq.aq.aq.{t.{t.{t.j}+j}+PI.PI.#9.cp.[3+[3+|5+|5+cp.cp.cp.cp.cp.cp.cp.cp.#9.#9.cp.cp.#9.#9.PI.PI.|5+cp.Hu+Hu+#9.cp.#9.PI.O7.O7.O7.xX%_r+_r+_r+N7.M7.M7.M7.M7.M7.M7.M7.M7._r+_r+_r+_r+_r+_r+_r+_r+N7._r+xX%O7.xX%_r+N7.M7.v4.0q.q3.0q.v4.v4.<3+q3.0q.0q.0q.0q.0q.0q.0q.0q.<3+<3+<3+<3+<3+0q.0q.0q.<3+0q.q3.,H.,H.q3.0q.<3+$B#N7._r+_r+%0+$B#$B#%0+M7.M7.M7.M7.M7.M7.M7.M7.<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+<3+0q.0q.0q.@9.@9.@9.@9.@9.@9.@9.@9.M7.M7.M7.M7.M7.M7.M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#%0+$B#eO@@9.%0+M7.$B#eO@,H.,H.,H.,H.q3.q3.q3.q3.bp.:(+,H.q3.0q.0q.q3.q3.,H.,H.,H.,H.,H.,H.,H.,H.:(+:(+:(+,H.q3.q3.q3.0q.M7.$B#eO@@9.%0+M7.$B#@9.eO@$B#%0+$B#eO@eO@@9.%0+,H.,H.,H.,H.,H.,H.,H.,H.0q.q3.q3.q3.,H.:(+:(+:(+q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+q3.,H.:(+,H.<3+v4.<3+q3.,H.q3.0q.<3+<3+0q.q3.,H.:(+:(+,H.,H.,H.,H.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.0q.0q.q3.q3.q3.,H.,H.,H.:^+u4.tF.tF.u4.w5.u4.E6.u4.E6.tF.E6.u4.u4.N7+tF.w5.w5.w5.w5.w5.w5.w5.w5.u4.u4.u4.u4.u4.N7+N7+N7+u4.w5.w5.p3.w5.u4.N7+N7+t4.w5.tF.#:+E6.u4.p3.p3.w5.w5.w5.w5.w5.w5.w5.w5.p3.p3.p3.w5.w5.u4.u4.u4.:(+:(+:(+:(+:(+:(+:(+:(+:(+bp.+9.bQ#bQ#+9.bp.:(+bp.bp.bp.bp.bp.:(+:(+:(++9.bp.,H.q3.q3.:(+bQ#o&=bQ#bp.:(+:(++9.bQ#+9.:(+,H.bp.bQ#bQ#bp.bp.+9.t4.}o=tH.tH.tH.}o=}o=}o=}o=t4.:^+bp.+9.bQ#o&=8&+bp.bQ#D6.p3.p3.p3.:^+t4.o3.o3.t4.:^+p3.p3.:^+t4.o3.o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+o3.o3.o3.o3.o3.o3.o3.o3.v5.o3.o3.t4.t4.o3.o3.v5.b,+b,+b,+b,+b,+b,+b,+b,+Q+&j(#b,+o&=o&=b,+j(#Q+&b,+o&=bQ#o&=j(#Q+&j(#b,+w{@j(#b,+j(#w{@CI#Q+&b,+w{@j(#o&=b,+Q+&Q+&j(#o&=bQ#b,+j(#b,+bQ#bQ#j(#CI#j(#j(#j(#j(#j(#Q+&Q+&Q+&Q+&j(#b,+b,+b,+j(#w{@CI#w{@w{@w{@Q+&j(#j(#j(#b,+w{@b,++9.+9.b,+Q+&j(#o&=w{@Q+&Q+&j(#j(#j(#b,+o&=b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+j(#Q+&Q+&Q+&w{@Q+&Q+&Q+&j(#j(#j(#b,+b,+w{@w{@w{@Q+&Q+&Q+&Q+&Q+&j(#j(#j(#j(#j(#j(#j(#j(#2p%2p%2p%qK#qK#qK#qK#/W%2p%2p%qK#qK#/W%/W%.X+.X+'m*'m*Yy&1M@1M@1M@Yy&'m*Yy&1M@1M@'m*KD=,S#KD=SO+mh.>S%>S%>S%>S%%' X@$x*$x*$%' >S%{h&{h&{h&~h&>S%.y&.y&.y&.y&.y&.y&.y&.y&z$$Be+Xw&Be+@d+@d+Xw&kt*_|*,C+uq*uq*xr*xr*&s*&s*xr*xr*xr*uq*uq*uq*uq*qK+q,@ (& (& (& (&lC&lC&lC&GJ@GJ@GJ@GJ@GJ@zw*zw*zw*23+';$:{+v]#u]#d #d #u]#d #u]#d #US+OP*x{+US+d #zi.zi.zi.nh.x{ x{ x{ $.@$.@$.@nh.zi.zi.zi.zi.zi.T_+xc+Ea+Ea+$(+T_+xc+5A.5A.Ea+$(+G|@Kh+Kh+G|@';$S>+GJ@lC& (& (&p)@|7.|7. (& (& (& (&lC&lC&lC&o)@$' ,C+tq*Fu+uq*xr*,C+Fu+,C+,C+,C+,C+,C+,C+,C+,C+.y&Xw&Be+Xw&.y&.y&+y&Be+Be+Be+Be+Xw&+y&+y&.y&VD@Fu+&b=&b=l]#l]#=Z+=Z+=Z+^u=^u=o!#dr==Z+l]#l]# X+$.@xc+xc+xc+xc+xc+xc+xc+T_+$(+xc+xc+xc+T_+G|@J> sq*uq*uq*uq*,C+Fu+Fu+Fu+,C+,C+,C+Fu+Fu+Fu+Fu+tq*.y&Xw&Be+Be++y&.y&+y&Be+ ==.y&+y&+y&%z&%z&Be+=|$y$$$(+T_+T_+G|@T_+$(+$(+G|@T_+xc+Ea+5A.Ea+Ea+y$$&, %z&Xw&z$$z$$Be++y&%z&.y&Xw&Be+Be++y&+y&Xw&x*$nh.u]#:{+v]#h]@v]#:{+u]#u]#u]#u]#u]#u]#u]#", "H;@H;@H;@H;@H;@H;@H;@6!.6!.6!.6!.6!.6!.6!.6!.5!.6!.P7.H;@H;@H;@H;@P7.6!.6!.P7.P7.P7.P7.H;@&j.zT.0- V[&V[&V[&V[&zT.zT.Y6.Y6.G6.G6.9, 9, 9, VW.G6.G6.G6.9, 9, VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.x5.G!;jc;G!;G!;G!;G!;w/;w/;1.&1.&sN%~$+is@x5.O7.O7.cp.#9.PI.Hu+VW.9, G6.hY.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+O7.O7.x5.x5.is@is@is@Vh.x5.x5.x5.x5.x5.O7.O7.O7.PI.Hu+8v.8v.PI.#9.Hu+8v.8v.8v.8v.8v.Hu+Hu+Hu+Hu+Hu+Hu+Hu+8v.8v.VW.VW.VW.Hu+Hu+Hu+Hu+Hu+Hu+Hu+Hu+xX%xX%xX%_r+_r+_r+N7.N7.xX%M7.M7.O7.O7.N7.N7.x5.O7.xX%N7.M7.M7.N7.xX%O7.eO@%0+N7.N7.N7.N7.xX%is@cp.#9.Hu+PI.cp.[3+#9.PI.[3+#9.PI.#9.[3+[3+cp.PI.aq.aq.aq.aq.aq.aq.aq.aq.aq.aq.aq.{t.{t.{t.j}+j}+cp.cp.cp.cp.cp.cp.cp.cp.[3+[3+[3+[3+[3+[3+[3+[3+[3+cp.cp.#9.#9.PI.PI.Hu+[3+PI.8v.Hu+#9.[3+cp.#9.xX%xX%_r+_r+_r+N7.N7.N7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7._r+xX%xX%xX%_r+_r+v4.0q.q3.0q.v4.v4.<3+q3.<3+<3+<3+<3+<3+<3+<3+<3+0q.0q.0q.<3+<3+<3+<3+<3+<3+0q.0q.q3.q3.0q.0q.<3+$B#M7.N7.M7.$B#$B#N7.xX%M7.M7.M7.M7.M7.M7.M7.M7.<3+<3+<3+<3+<3+<3+<3+<3+0q.0q.0q.<3+<3+<3+<3+<3+$B#$B#$B#$B#$B#$B#$B#$B#M7.M7.M7.M7.M7.M7.M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#N7.%0+@9.$B#M7.N7.%0+$B#bp.:(+:(+,H.q3.0q.<3+<3+q3.,H.,H.,H.,H.q3.0q.<3+q3.q3.q3.q3.q3.q3.q3.q3.:(+:(+,H.,H.,H.q3.q3.q3.M7.$B#eO@@9.%0+M7.$B#@9.eO@$B#%0+$B#eO@eO@@9.%0+,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.,H.,H.,H.:(+:(+,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.q3.q3.0q.0q.0q.q3.,H.:(+bp.bp.+9.q3.,H.:(+,H.0q.<3+0q.,H.,H.q3.q3.0q.0q.q3.q3.,H.0q.0q.0q.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.<3+0q.0q.0q.q3.q3.,H.,H.w5.u4.E6.N7+u4.N7+tF.^C.w5.N7+tF.E6.u4.w5.N7+E6.w5.w5.w5.w5.w5.w5.w5.w5.N7+N7+N7+u4.u4.u4.u4.u4.u4.w5.p3.p3.:^+p3.p3.w5.:^+u4.E6.E6.u4.p3.w5.u4.w5.w5.w5.w5.w5.w5.w5.w5.p3.p3.p3.w5.w5.u4.u4.u4.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+bp.+9.+9.bp.:(+:(+bp.bp.bp.+9.+9.+9.+9.bQ#bQ#+9.:(+:(+:(++9.o&=b,+bQ#bp.:(+:(++9.bQ#+9.:(+q3.:(++9.bp.:(+:(+bp.D6.}o=tH.tH.tH.}o=}o=}o=}o=t4.:^+bp.+9.bQ#o&=8&+bp.o&=t4.:^+:^+p3.:^+:^+D6.D6.:^+:^+p3.p3.:^+:^+D6.o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+t4.t4.t4.t4.t4.t4.t4.t4.v5.o3.o3.t4.t4.o3.o3.v5.o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+o&=bQ#bQ#o&=b,+b,+b,+o&=bQ#o&=j(#Q+&j(#b,+Q+&b,+o&=b,+Q+&Q+&j(#o&=S`%w{@j(#j(#Q+&Q+&b,+bQ#o&=j(#Q+&Q+&b,+bQ#o&=b,+Q+&Q+&Q+&j(#j(#j(#j(#j(#w{@Q+&j(#b,+b,+b,+j(#Q+&Q+&Q+&j(#j(#j(#b,+b,+b,+w{@j(#o&=o&=j(#Q+&Q+&j(#Q+&Q+&Q+&Q+&j(#b,+b,+b,+j(#j(#j(#j(#j(#j(#j(#j(#b,+b,+j(#j(#j(#Q+&Q+&Q+&Q+&Q+&Q+&j(#j(#j(#b,+b,+j(#j(#Q+&Q+&Q+&Q+&w{@w{@j(#j(#j(#j(#j(#j(#j(#j(#2p%2p%2p%2p%2p%p!#p!#p!#DI#DI#p!#qK#/W%yE#iM#iM#'m*Yy&1M@1M@1M@Yy&'m*'m*!G='m*Yy&!G=KD=uC#,S#qK+mh.~h&~h&~h&~h&>S%%' X@$%' >S%~h&{h&{h&{h&{h&~h&Xw&Xw&Xw&Xw&Xw&Xw&Xw&Xw&z$$Xw&.y&.y&+y&Xw&+y&VD@VD@xr*xr*xr*&s*&s*&s*&s*=^@&s*&s*xr*xr*uq*uq*SO+q,@ (& (& (&p)@p)@p)@p)@p)@p)@ (& (&lC&GJ@zw*zw*OP*US+d #d #US+OP*OP*23+US+';$d #US+OP*x{+23+';$zi.~h&>S%>S%>S%%' %' %' X@$x*$x*$x*$x*$X@$%' nh.T_+$(+Ea+xc+G|@Kh+G|@$(+Ea+Ea+$(+T_+G|@G|@G|@';$q(#p)@p)@p)@p)@p)@p)@|7. (& (& (& (&p)@p)@p)@[I+SO+Fu+$x+tq*,C+uq*Fu+$x+,C+,C+,C+,C+,C+,C+,C+,C+)A&.y&+y&.y&)A& ==%z&+y&@d+@d+Be++y&.y&%z&)A&PB@Fu+Fu+,C+,C+uq*uq*uq*xr*#x++v=wr*&s*uq*Fu+$x+Pw%c> Ea+Ea+Ea+Ea+Ea+Ea+Ea+$(+$(+xc+xc+xc+$(+G|@zi.sq*xr*xr*uq*uq*uq*,C+,C+$x+tq*tq*tq*tq*Fu+Fu+Fu+%z&+y&Be+Xw&.y&%z&+y&Xw& ==%z&.y&%z&%z&%z&Xw&u3$S%Xw&Be+Be+Be+Xw&+y&.y&+y&Xw&Be+Xw&.y&%z&.y&%' nh.u]#:{+v]#h]@h]@h]@h]@u]#u]#u]#u]#u]#u]#", "H;@H;@H;@H;@H;@H;@H;@P7.P7.P7.P7.P7.P7.P7.P7.j}+l#@l#@$9.$9.5!.5!.5!.5!.5!.6!.P7.P7.H;@Y6.yT.&j.0- ni z) z) ni zT.&j.iI.Y6.hY.hY.G6.G6.9, 9, G6.G6.G6.9, 9, VW.VW.VW.VW.VW.VW.VW.VW.VW.VW.x5.G!;jc;G!;G!;G!;G!;w/;w/;sN%sN%sN%sN%is@x5.O7.O7.Hu+Hu+8v.VW.9, G6.G6.hY.8v.8v.8v.8v.8v.8v.8v.8v.O7.x5.is@Vh.Vh.is@x5.x5.Vh.is@is@x5.O7.O7.xX%xX%Hu+Hu+8v.8v.Hu+Hu+Hu+8v.PI.PI.Hu+Hu+8v.8v.VW.VW.8v.VW.VW.VW.VW.VW.VW.VW.PI.PI.PI.PI.PI.PI.PI.PI.xX%xX%xX%_r+_r+_r+N7.N7.O7.M7.M7.xX%xX%M7.N7.x5.O7.xX%N7.M7.M7.N7.xX%O7.$B#M7._r+_r+M7.M7._r+O7.cp.#9.Hu+PI.cp.[3+#9.PI.cp.#9.Hu+PI.cp.[3+#9.Hu+aq.aq.aq.aq.aq.aq.aq.aq.aq.aq.aq.{t.{t.{t.j}+j}+|5+[3+[3+[3+cp.#9.#9.#9.|5+|5+|5+|5+|5+|5+|5+|5+|5+[3+cp.#9.PI.PI.Hu+Hu+cp.PI.8v.Hu+#9.[3+[3+cp.N7.N7.N7.N7.N7.N7.N7.N7.%0+%0+%0+%0+%0+%0+%0+%0+M7.M7.M7.M7.M7.M7.M7.M7.$B#%0+M7.N7._r+xX%xX%O7.v4.0q.q3.0q.v4.v4.<3+q3.v4.v4.v4.v4.v4.v4.v4.v4.q3.q3.0q.0q.<3+v4.v4.#k.<3+<3+0q.0q.0q.0q.<3+<3+$B#%0+%0+$B#@9.%0+xX%is@M7.M7.M7.M7.M7.M7.M7.M7.<3+<3+<3+<3+<3+<3+<3+<3+q3.q3.0q.0q.<3+v4.v4.#k.$B#$B#$B#$B#$B#$B#$B#$B#M7.M7.M7.M7.M7.M7.M7.M7.$B#$B#$B#$B#$B#$B#$B#$B#N7.%0+$B#%0+N7._r+M7.$B#,H.,H.,H.q3.0q.0q.0q.<3+<3+0q.,H.:(+:(+q3.0q.v4.q3.q3.q3.q3.q3.q3.q3.q3.,H.,H.,H.,H.,H.,H.q3.q3.$B#eO@)Z%eO@$B#$B#@9.)Z%eO@$B#%0+$B#eO@eO@@9.%0+,H.,H.,H.,H.,H.,H.,H.,H.q3.q3.,H.,H.,H.,H.,H.,H.:(+:(+:(+:(+:(+:(+:(+:(+:(+,H.,H.q3.0q.0q.<3+<3+q3.q3.q3.,H.,H.:(+:(+:(+0q.,H.:(+:(+0q.0q.q3.:(+,H.,H.q3.q3.q3.q3.,H.,H.v4.v4.v4.<3+0q.0q.q3.q3.q3.q3.q3.q3.q3.q3.q3.q3.<3+<3+<3+0q.0q.q3.q3.q3.u4.u4.u4.w5.u4.E6.*B.sF.w5.N7+E6.N7+u4.w5.u4.E6.w5.w5.w5.w5.w5.w5.w5.w5.E6.E6.N7+N7+u4.w5.w5.p3.u4.u4.p3.:^+D6.D6.:^+:^+w5.u4.N7+w5.:^+:^+w5.N7+w5.w5.w5.w5.w5.w5.w5.w5.p3.p3.p3.w5.w5.u4.u4.u4.:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+:(+bp.bp.+9.+9.bQ#o&=o&=o&=bQ#+9.bp.bp.bp.bQ#o&=b,+bQ#bp.:(+:(++9.bQ#+9.:(+0q.,H.bp.bp.,H.,H.bp.D6.It&Sx&Sx&Sx&It&It&It&It&t4.:^+bp.+9.bQ#o&=8&+bp.b,+t4.D6.:^+:^+p3.p3.p3.:^+p3.p3.p3.p3.p3.p3.:^+o&=o&=o&=o&=o&=o&=o&=o&=b,+b,+b,+b,+b,+b,+b,+b,+t4.t4.t4.t4.t4.t4.t4.t4.v5.o3.o3.t4.t4.o3.o3.v5.o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=o&=bQ#bQ#o&=o&=o&=b,+o&=bQ#o&=j(#Q+&j(#b,+j(#b,+bQ#o&=j(#Q+&b,+bQ#&r=S`%w{@Q+&w{@w{@b,+bQ#o&=j(#Q+&w{@j(#o&=+9.bp.w{@w{@Q+&Q+&j(#b,+b,+o&=w{@w{@Q+&j(#j(#b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+b,+CI#w{@j(#j(#Q+&Q+&w{@w{@j(#Q+&w{@Q+&b,+b,+j(#Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&Q+&j(#j(#j(#j(#j(#j(#Q+&Q+&Q+&Q+&Q+&j(#j(#j(#b,+b,+b,+b,+b,+j(#Q+&w{@w{@w{@j(#j(#j(#j(#j(#j(#j(#j(#qK#2p%2p%p!#p!#DI#'Z%'Z%p!#p!#2p%qK#/W%.X+yE#yE#Yy&Yy&1M@1M@1M@Yy&'m*!G=KD=!G='m*!G=KD=uC#uC#$' mh.~h&{h&{h&{h&~h&>S%>S%>S%>S%~h&~h&{h&{h&{h&{h&Xw&Xw&Xw&Xw&Xw&Xw&Xw&Xw&z$$Xw&)A& ==%z&.y&.y&VD@kt*&s*&s*&s*&s*=^@=^@=^@=^@=^@=^@&s*xr*uq*,C+SO+o)@lC& (& (&p)@|7.|7.r,@|7.p)@p)@p)@ (& (&lC&lC&23+';$d #';$OP*x{+x{+OP*23+US+';$US+OP*x{+23+zi.>S%>S%+y&>S%+y&>S%Xw&%' Xw&X@$@d+=|$z$$x*$Xw&>S%|m.$(+xc+$(+Kh+oh.7P.G|@xc+xc+$(+T_+T_+G|@G|@';$q)@|7.|7.|7.|7.p)@p)@p)@GJ@GJ@lC& (& (&p)@|7.cQ#SO+tq*)p#$x+Fu+,C+Fu+$x+,C+,C+,C+,C+,C+,C+,C+,C+.y&Xw&@d+Be++y&.y&+y&Be+Xw&Xw&+y&.y&%z&)A&)A& ==z9.z9.VD@VD@kt*kt*kt*kt*PB@(-=kt*z9.u{@ps+fJ%;~@c> Ea+Ea+Ea+Ea+Ea+Ea+Ea+xc+xc+xc+xc+$(+$(+T_+nh.sq*xr*xr*xr*xr*xr*xr*xr*$x+$x+tq*tq*Fu+,C+,C+uq*)A&.y&+y&.y&)A& ==%z&+y&)A&)A&)A&%z&%z&.y&Xw&x*$S%nh.d #u]#v]#h]@M8@M8@ZW+u]#u]#u]#u]#u]#u]#"}; GabeditSrc250/pixmaps/GabeditMini.xpm0000644000175100017510000001011413130664665020062 0ustar alloucheallouche/* XPM */ static char *gabedit_mini_xpm[]={ "16 16 221 2", "Qt c #ffffff", "#W c #a8b580", "#G c #aba967", "#q c #b3b48a", "#a c #bfd1c3", "bA c #d1e8e8", "a8 c #d7ebeb", "aa c #d9e6dd", "bl c #daeded", ".G c #e1f0f0", "aD c #e3f1f1", "ap c #e7f3f3", "aS c #f6fafa", ".W c #f8fbfb", ".q c #fefefe", "aT c #cee1e1", "#b c #cfe3e3", "bt c #cfe6e6", "a9 c #d0e2e2", ".X c #d5e9e9", "#H c #d8e6e6", "aq c #d9e7e6", ".b c #dcdcdc", "ab c #dee9e9", "#X c #e1eaea", ".r c #e1f0f0", "aE c #eaeeee", "#r c #ecefef", "bm c #eef2f2", ".H c #f8fbfb", ".a c #fefefe", ".# c #ffffff", ".g c #5b5b5e", ".c c #565662", ".Z c #151916", "ah c #192fa9", "aA c #1a27b5", "az c #1b28b6", "aO c #1b2aca", "av c #1d2cb5", "ay c #2328b4", "aP c #2464a5", "#4 c #26786b", "ag c #28439e", "a3 c #2a7da3", "ai c #2e617b", ".0 c #323936", "aN c #3437cb", "a4 c #359e8d", "au c #3d7698", "aj c #408b5c", "am c #4a9044", "ax c #52256d", "ak c #52ab3f", "aw c #543167", "#d c #555506", "#3 c #556fa2", "#e c #585915", "a2 c #587b72", "al c #58ab2f", "#5 c #59b032", "aB c #5a78b0", ".e c #5d5d6d", ".f c #616174", "an c #61896c", "aK c #647256", "aM c #676098", ".d c #6b6b7f", "#N c #6fa04c", ".J c #747676", "bh c #77b89a", "#6 c #7ac125", "#O c #7cb226", "ba c #805507", ".o c #828292", "bg c #82b380", "aL c #847e30", "a. c #87a928", ".n c #8a8aa0", "#x c #8aa31e", ".m c #8e8ea6", "a5 c #8ec79d", "aJ c #8faf9f", ".p c #929289", "aQ c #93babc", ".K c #979999", ".3 c #979f5c", "b. c #97a29c", "#h c #989922", "b# c #996100", ".l c #9999a2", "bi c #9acab0", "bv c #9b9b9b", "ae c #9ca0c6", "#V c #9ca140", "bw c #9ca1a1", "aU c #a0ae9d", "bp c #a12626", "#9 c #a1be27", ".P c #a37320", ".t c #a3afaf", "#7 c #a3c71c", "#F c #a49733", "## c #a4a276", ".T c #a57528", ".4 c #a5871c", "#p c #a59347", ".B c #a77b41", "#I c #a8b2a0", "ar c #a9b3a1", "#c c #a9b7ae", "a# c #aac299", ".A c #ab8955", ".z c #aba07c", "ac c #abb3a2", "#Y c #adb4a3", ".U c #af9563", "#. c #b07b18", ".C c #b08956", ".O c #b0a270", "#8 c #b0c719", ".Q c #b17319", "aF c #b2b4a5", ".S c #b37019", "#i c #b39d18", "#s c #b3b5a5", "bo c #b41d1d", "#y c #b5b719", ".u c #b5c1c1", ".R c #b77218", "#1 c #b9bdce", ".D c #bbb397", "bb c #bbcaca", "aX c #bbccca", "bn c #bcb5b5", "#P c #bdc919", "bf c #bdc926", "#o c #be8a18", "#U c #beb218", "aW c #bebd07", "bu c #bfd5d5", "#L c #c0cdc5", ".Y c #c0d3d3", "#v c #c1c488", ".9 c #c28118", ".5 c #c38b18", "#E c #c3a018", "a1 c #c3c70d", "ad c #c4c406", "as c #c4d1cf", "#u c #c5c506", "#f c #c5cc77", ".2 c #c5d9ab", "aG c #c6c606", "#0 c #c7c707", "#K c #c8c907", ".y c #c8d4cc", ".6 c #c98d18", "#n c #c99118", "#j c #c9a018", ".8 c #ca8918", "aZ c #cad582", "bd c #cadba1", ".7 c #cb8c19", ".1 c #cbdfcf", "bx c #cbe1e1", "#m c #cc9e1f", "#k c #cca51c", "#D c #ccaa19", "#l c #cda827", "af c #cdcef2", "#w c #cdd044", "a6 c #cde5de", "#T c #cfbf1a", "bj c #d0e6e1", ".E c #d1dbd2", "by c #d1e7e7", "bz c #d1e8e8", "aH c #d2d7d5", "#z c #d3c31a", "be c #d3d81c", "#M c #d5e4d0", ".x c #d5e4e3", "#2 c #d6d7f3", "aY c #d6eaea", "a7 c #d7ebeb", "#Q c #d9cb24", "bc c #d9ecec", "bk c #daeded", "bq c #dcdede", ".w c #dcebeb", "aV c #dddc00", "ao c #deece7", "a0 c #dfe00b", "#C c #e0c23f", ".v c #e0efef", ".s c #e1efef", ".F c #e1f0f0", "#g c #e2e328", "at c #e2f0f0", "aC c #e3f1f1", "#A c #e4c72b", ".N c #e6e7de", "#S c #e7ca2b", "#t c #e8e800", ".k c #e8e8e9", "#B c #e9c964", "#Z c #e9e900", "#R c #eacc3e", "#J c #eaea00", ".V c #f3f5f3", "br c #f3f6f0", "bs c #f5f8f5", "aI c #f5f9f9", "aR c #f6fafa", ".I c #f7fafa", ".M c #f8fafa", ".L c #f8fbfb", ".i c #fcfcfc", ".j c #fdfdfd", ".h c #fefefe", "Qt.#.#.a.b.c.d.e.f.g.#.#.#.#.#Qt", ".a.h.i.j.k.l.m.n.o.p.h.h.h.h.h.q", ".r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G", ".H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W", ".X.Y.Z.0.1.2.3.4.5.6.7.8.9#.###a", "#b#c#d#e#f#g#h#i#j#k#l#m#n#o#p#q", "#r#s#t#u#v#w#x#y#z#A#B#C#D#E#F#G", "#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W", "#X#Y#Z#0#1#2#3#4#5#6#7#8#9a.a#aa", "abac#tadaeafagahaiajakalamanaoap", "aqar#J#KasatauavawaxayazaAaBaCaD", "aEaF#taGaHaIaJaKaLaMaNaOaPaQaRaS", "aTaUaVaWaXaYaZa0a1a2a3a4a5a6a7a8", "a9b.b#babbbcbdbebfbgbhbibjbcbkbl", "bmbnbobpbq.I.Ibrbs.L.L.L.L.L.L.W", "btbubvbwbxbybzbzbzbzbzbzbzbzbzbA"}; GabeditSrc250/pixmaps/Cancel.xpm0000644000175100017510000000121013130664665017070 0ustar alloucheallouche/* XPM */ static char*cancel_xpm[]={ "20 20 8 1", "e c #7b2d34", "c c #b5444e", "a c #c46d74", "# c #000000", "d c #bd5a62", "f c #8c343c", ". c None", "b c #9f3c44", "....................", "....................", "....................", "......##......#.....", ".....#ab#....#c#....", ".....#cc#...#dc#....", "......#cb#.#dce#....", "......#cc##dcf#.....", ".......#ccccb#......", ".......#cccc#.......", "......#dccc#........", ".....#dcccc#........", "....#dcf##cf#.......", "...#acf#.#bc#.......", "...#cf#...#cb#......", "....##....#bc#......", "...........##.......", "....................", "....................", "...................."}; GabeditSrc250/pixmaps/Rotate.xpm0000644000175100017510000000142013130664665017144 0ustar alloucheallouche/* XPM */ static char * rotate_xpm[] = { "24 24 4 1", " c None", ". c #000000", "+ c #FFFFFF", "@ c #FF0000", " ", " ", " ... ", " . . ", " . . ", " . . . . ", " ... . ", " . . ", " ....... ", " ... .. ", " .. ++ . .. ", " . @@ . . ", " . @@++ . . ", " . @@++ . . ", " . @@ . . ", " . . . . ", " .. . . . ", " .... . ", " . . ", " . . ", " . . ", " . . ", " ... ", " "}; GabeditSrc250/pixmaps/DeMon.xpm0000644000175100017510000000510413130664665016713 0ustar alloucheallouche/* XPM */ static char * demon_xpm[] = { "22 22 95 2", " c None", ". c #FFFFFF", "+ c #FAD8D8", "@ c #FBD9D9", "# c #FAD9D9", "$ c #F9CDCD", "% c #FBDCDC", "& c #F9C7C7", "* c #FEFDFD", "= c #F7B7B7", "- c #F5A1A1", "; c #F8BDBD", "> c #F8BFBF", ", c #F9CCCC", "' c #F59A9A", ") c #EF5C5C", "! c #F28383", "~ c #F17070", "{ c #FEFEFE", "] c #F8B9B9", "^ c #FAD3D3", "/ c #FBDFDF", "( c #FAD6D6", "_ c #F8C0C0", ": c #F49090", "< c #F8C3C3", "[ c #F17777", "} c #F49494", "| c #F8BCBC", "1 c #F38686", "2 c #F9C9C9", "3 c #F38D8D", "4 c #F27D7D", "5 c #F48F8F", "6 c #F6A5A5", "7 c #F9CECE", "8 c #F17575", "9 c #F7B1B1", "0 c #F06C6C", "a c #F49696", "b c #FAD1D1", "c c #EC3D3D", "d c #F17171", "e c #F7B4B4", "f c #FCE7E7", "g c #F8C1C1", "h c #F7B6B6", "i c #F7B2B2", "j c #F06565", "k c #F8BBBB", "l c #F28282", "m c #FBE0E0", "n c #FCE5E5", "o c #F7B3B3", "p c #F06A6A", "q c #FCEDED", "r c #F7B5B5", "s c #FDF8F8", "t c #FEFBFB", "u c #FDF7F7", "v c #E80A0A", "w c #ED4848", "x c #E81111", "y c #E92121", "z c #F06868", "A c #FCECEC", "B c #ED4B4B", "C c #F7B8B8", "D c #FDF3F3", "E c #FCE9E9", "F c #EE5151", "G c #FDF2F2", "H c #E81616", "I c #E92323", "J c #F49393", "K c #ED4444", "L c #E91D1D", "M c #FACFCF", "N c #EA2424", "O c #FAD0D0", "P c #F49797", "Q c #E92222", "R c #F9CBCB", "S c #F8C2C2", "T c #EA2A2A", "U c #F6AAAA", "V c #F9CACA", "W c #FBE3E3", "X c #EA2C2C", "Y c #F38E8E", "Z c #EA2626", "` c #FAD7D7", " . c #EB2E2E", ".. c #F38A8A", "+. c #EB3030", ". . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . ", ". . . + @ . . . . # $ . % & . . . . . . . . ", ". * = - ; . > , . ' ) . ! ~ { ] ^ . / ( _ . ", ". : < [ ; } | } $ ' 1 2 3 ~ 3 _ 4 @ 5 6 ! 7 ", ". 8 . 9 ; 0 a } ^ ' b c % ~ d . ; e 5 f g h ", ". i 1 j ; k l } m ' + n . ~ o l p q 5 f g r ", ". . s . . . t u . . . . . . . s { . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . v . . . . . . . . ", ". . . . . ] w x y z A . . v . . . . . . . . ", ". . . . . B C D E 0 F . . v . . . . . . . . ", ". . . . . . . . . G H . . v . . $ I J . . . ", ". . . . . . . . . i K . . v . r L i . . . . ", ". . . . . . . . M N O . . v P Q R . . . . . ", ". . . . . . . g N S . . . v T 4 . . . . . . ", ". . . . . . U Q V . . . . v W X Y . . . . . ", ". . . . . : Z ` . . . . . v . n .... . . . ", ". . . . . v v v v v v D . v . . f +.1 . . . ", ". . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . "}; GabeditSrc250/pixmaps/Pdb.xpm0000644000175100017510000000231713130664665016421 0ustar alloucheallouche/* XPM */ static char * pdb_xpm[] = { "32 32 2 1", " c None", ". c #5F71D8", " ", " .... ", " ...... ", " . ... ", " .. . . ", " .... ...... ", " ...... ...... ", " .... ... ", " .... .. ", " .... .. ", " ...... .... . ", " ........ ..... ", " . .... ... ", " .. .... . ", " ... ... . ", " ..... .. ", " .... .. ", " .... . ", " ..... .... . ", " ...... .... . ", " . ... ...... ", " .. .. .... ", " .... .. .. ", " .... . . ", " ..... ", " .... ", " .... ", " .... ", " ..... ", " ... ", " . ", " . "}; GabeditSrc250/pixmaps/Molpro.xpm0000644000175100017510000000127013130664665017161 0ustar alloucheallouche/* XPM */ static char* molpro_xpm[]={ "22 22 5 1", "g c #1515ff", "i c #1313ff", ". c None", "c c #aa0000", "h c #1010ff", "..........cc..........", "........c....c........", "........c....cc.......", ".......c......c.......", "......gh......gh......", ".....iiii....iiiii....", "....ii..ii..ii...ii...", "...ii.c..ii.i..c..i...", "..ii..c..ii.i..c..ii..", "..ii..c...iii..c..ii..", "..ii..c...iii..c..ii..", ".ii..cc...iii..cc..ii.", ".ii..c.....i....c..ii.", ".ii..c.....i....c..ii.", ".ii..c..........c..ii.", ".ii..c..........c..ii.", ".ii..c..........c..ii.", ".ii..c..........c..ii.", ".ii..c..........c..ii.", ".ii..c..........c..ii.", ".ii..c..........c..ii.", ".ii..c..........c..ii."}; GabeditSrc250/pixmaps/Page.xpm0000644000175100017510000000076013130664665016570 0ustar alloucheallouchestatic char *page_xpm[] = { "16 16 4 1", " c None s None", ". c black", "X c white", "o c #808080", " ", " ....... ", " .XXXXX.. ", " .XoooX.X. ", " .XXXXX.... ", " .XooooXoo.o ", " .XXXXXXXX.o ", " .XooooooX.o ", " .XXXXXXXX.o ", " .XooooooX.o ", " .XXXXXXXX.o ", " .XooooooX.o ", " .XXXXXXXX.o ", " ..........o ", " oooooooooo ", " " }; GabeditSrc250/pixmaps/Orca.xpm0000644000175100017510000001156713130664665016607 0ustar alloucheallouche/* XPM */ static char * orca_xpm[] = { "24 24 230 2", " c #FFFFFF", ". c #A7A7A7", "+ c #2F2F2F", "@ c #151515", "# c #3D3D3D", "$ c #C5C5C5", "% c #C7C7C7", "& c #2B2B2B", "* c #343434", "= c #797979", "- c #FEFEFE", "; c #B2B2B2", "> c #363636", ", c #141414", "' c #303030", ") c #CACACA", "! c #FCFCFC", "~ c #3A3A3A", "{ c #DFDFDF", "] c #C6C6C6", "^ c #010101", "/ c #6F6F6F", "( c #CECECE", "_ c #484848", ": c #0D0D0D", "< c #EAEAEA", "[ c #BBBBBB", "} c #000000", "| c #929292", "1 c #737373", "2 c #C8C8C8", "3 c #CBCBCB", "4 c #030303", "5 c #5C5C5C", "6 c #CFCFCF", "7 c #B1B1B1", "8 c #B5B5B5", "9 c #111111", "0 c #828282", "a c #767676", "b c #F5F5F5", "c c #C3C3C3", "d c #0B0B0B", "e c #E5E5E5", "f c #777777", "g c #F1F1F1", "h c #565656", "i c #6C6C6C", "j c #242424", "k c #707070", "l c #FBFBFB", "m c #A1A1A1", "n c #262626", "o c #060606", "p c #636363", "q c #717171", "r c #020202", "s c #F9F9F9", "t c #F0F0F0", "u c #080808", "v c #7A7A7A", "w c #A3A3A3", "x c #B0B0B0", "y c #979797", "z c #FAFAFA", "A c #676767", "B c #DEDEDE", "C c #A4A4A4", "D c #BDBDBD", "E c #B7B7B7", "F c #808080", "G c #D9D9D9", "H c #999999", "I c #0F0F0F", "J c #040404", "K c #121212", "L c #A0A0A0", "M c #FDFDFD", "N c #2A2A2A", "O c #3E3E3E", "P c #898989", "Q c #0E0E0E", "R c #090909", "S c #BABABA", "T c #464646", "U c #787878", "V c #E8E8E8", "W c #E6E6E6", "X c #F8F8F8", "Y c #B3B3B3", "Z c #6B6B6B", "` c #616161", " . c #606060", ".. c #909090", "+. c #EFEFEF", "@. c #9E9E9E", "#. c #292929", "$. c #222222", "%. c #3C3C3C", "&. c #232323", "*. c #FDFEFF", "=. c #FDFEFE", "-. c #FDFCFD", ";. c #EDEDED", ">. c #3F3F3F", ",. c #414141", "'. c #8F8F8F", "). c #333333", "!. c #555555", "~. c #FAFEFC", "{. c #FAF8F9", "]. c #B7B8B8", "^. c #888A89", "/. c #868686", "(. c #353535", "_. c #373737", ":. c #434343", "<. c #3B3B3B", "[. c #383838", "}. c #8E8E8E", "|. c #6A6A6A", "1. c #C4C4C4", "2. c #FDFBFC", "3. c #73777A", "4. c #090B0D", "5. c #21201F", "6. c #ADADAD", "7. c #E9E9E9", "8. c #656565", "9. c #FCFDFE", "0. c #FAFEFB", "a. c #F7F5F8", "b. c #A8ACB1", "c. c #2A414E", "d. c #4C555D", "e. c #808180", "f. c #626262", "g. c #FCFCFD", "h. c #FCFBFC", "i. c #989FA1", "j. c #AECACF", "k. c #EAF4F5", "l. c #9C9A9B", "m. c #171717", "n. c #FAFCFB", "o. c #A4A5A8", "p. c #75827E", "q. c #E3F5F6", "r. c #D8E0E4", "s. c #252526", "t. c #413F40", "u. c #323232", "v. c #0A0A0A", "w. c #BFBFBF", "x. c #E3E3E5", "y. c #50626F", "z. c #5695A9", "A. c #4B8093", "B. c #525C5C", "C. c #363535", "D. c #313431", "E. c #373534", "F. c #2A2B2B", "G. c #111113", "H. c #4D5458", "I. c #505859", "J. c #A3B0B2", "K. c #FCFEFC", "L. c #F8FCF6", "M. c #FAFAF9", "N. c #A5B0B1", "O. c #92999C", "P. c #222524", "Q. c #404145", "R. c #40433E", "S. c #434042", "T. c #343338", "U. c #383E3E", "V. c #2B3030", "W. c #BEBCBE", "X. c #65828C", "Y. c #6F7176", "Z. c #6E9096", "`. c #FEFCFA", " + c #FAFDFA", ".+ c #718691", "++ c #98B4BC", "@+ c #191C1F", "#+ c #373937", "$+ c #3B373A", "%+ c #464B48", "&+ c #767474", "*+ c #121F21", "=+ c #306378", "-+ c #C7CACD", ";+ c #99BEC6", ">+ c #F5F6F7", ",+ c #608588", "'+ c #FCFEFA", ")+ c #FDFDFE", "!+ c #B1BCC0", "~+ c #BCDEE1", "{+ c #6DAFC2", "]+ c #1C4758", "^+ c #4B545B", "/+ c #CCCBCD", "(+ c #456579", "_+ c #A1CAD1", ":+ c #38444A", "<+ c #91989E", "[+ c #F3F8F9", "}+ c #F9FFFE", "|+ c #FBFCFA", "1+ c #F0F5F4", "2+ c #DCE4E3", "3+ c #B2C0C3", "4+ c #A1E1E8", "5+ c #FAFCFC", "6+ c #848586", "7+ c #DBDCE0", "8+ c #FEFDFC", "9+ c #FFFDFF", "0+ c #FEFDFE", "a+ c #FCFFFE", "b+ c #FCFEFE", "c+ c #FEFDFD", "d+ c #F7FDFE", "e+ c #FDFDFB", "f+ c #FEFDFF", "g+ c #FEFEFF", " ", " ", " . + @ # $ % & & * = - ; > , ' ) ! ~ & { ", "] ^ / ( _ : < [ } | 1 } 2 3 4 5 6 7 2 8 ^ 9 0 ", "a ^ b c } . [ } | 1 d e f ^ g h # i j ", "k 4 l 3 } m [ } n o p q r s t u v w } ", "x } y z A 4 B [ } c C } D E } F l { G H ^ I I J ", " v u } K L [ } c M N O P Q } R S ~ T U ", " s V ! - l W X M M ", " - - - - - - - - - M M b Y Z ` ...+.M - ", " - - - - - - M - - l @.#.$.* %.+ #.&.= - ", " - - - *.=.-.-.! ;._ n >.,.%.'.H ).> !.- ", " - - - ~.{.].^./.N (.,.,._.:.<.[.}.|.1.- ", " - - - 2.3.4.5.(.,.,.,.,.,.' 6.7.8.3 l - ", " 9.0.a.b.c.d.e.(.,.,.,.,.,.+ D f.e M M - ", " g.h.i.j.k.l.m.,.,.,.# [.,.&.v b M - - - ", " n.o.p.q.r.s.t.,.,.u.K &.> v.w.M - - - - ", " x.y.z.A.B.C.,.,.D.E.F.G.H.I.J.K.- - - - ", " L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`.- - - ", " -. +.+++@+#+$+%+&+*+=+-+;+>+,+0.- - M - ", " '+)+!+~+{+]+^+/+(+_+:+s <+3 [+-.- - M ", " - - - }+|+1+2+3+4+5+X M 6+7+8+9+- - M ", " 0+a+b+c+d+e+f+ - g+ ", " "}; GabeditSrc250/pixmaps/SaveAs.xpm0000644000175100017510000000337013130664665017076 0ustar alloucheallouche/* XPM */ static char *saveas_xpm[] = { /* width height ncolors chars_per_pixel */ "24 24 66 1", /* colors */ " c #000000", ". c #CDD1D3", "X c #294249", "o c #756020", "O c #D8BE6A", "+ c #2C3D42", "@ c #7AABB6", "# c #45494A", "$ c #EDF2F2", "% c #E1E3DC", "& c #D5E1E4", "* c #1E2A2D", "= c #E5ECED", "- c #385C64", "; c #A8C7CB", ": c #B1CAD0", "> c #F4F4F4", ", c #F2F2F2", "< c #6DA4AE", "1 c #212F32", "2 c #ECECEC", "3 c #EAEAEA", "4 c #E6E6E6", "5 c #E2E2E2", "6 c #F0F2F3", "7 c #2B2B2B", "8 c #859597", "9 c #AAB6B8", "0 c #EBF0F1", "q c #E9EEEF", "w c #4B5C61", "e c #C5D8DC", "r c #828C8D", "t c #B8B8B8", "y c #C6B273", "u c #45676E", "i c #629DA8", "p c #2E3B3D", "a c #36575F", "s c #060605", "d c #8E7D45", "f c #647F82", "g c #8DB6BE", "h c #5C8791", "j c #2B464D", "k c #D5DFE0", "l c #18292D", "z c #A7B4B6", "x c #DCE0E0", "c c #E9EEF0", "v c #F9F9F9", "b c #9EC2C7", "n c #EDEDED", "m c #D6DCDD", "M c #9A918B", "N c #E9E9E9", "B c #E5E5E5", "V c #E3E3E3", "C c #F1F3F4", "Z c #A4ADAF", "A c #7D8A8C", "S c #DFDFDF", "D c #3B5055", "F c #C2C8C9", "G c #D9DBDC", "H c None", /* pixels */ "HHHHHHHHHHHHHHHHHHHHHHHH", "HHHHHHHHHHHHHHHHHHHHHHHH", "HHHHHHHHHHHHHHHHHHH HHHH", "HHHHHHHHHHHHHHHHHH O HHH", "HHHHHHHHHHHHH HH Od HHH", "HHHHHHHHHHH i+ Od HHHH", "HHHHHHHHH e;qi Od HHHHH", "HHHHHHH e;ev6 Od HHHHHH", "HHHHH e;evvv Od HHHHHHH", "HHH @:evvvv Od 1 HHHHHH", "HH g:&vvMvv Od ci HHHHHH", "HH fg$vMvv Od v0i+ HHHHH", "HHH ;=vMvyo %=iii HHHHH", "HHH u@$vMs C=iiaai+ HHHH", "HHHH b=vMC=iiXp-iai HHHH", "HHHH u@0=iiXZnN#iai+ HHH", "HHHHH giia.,,349jiXl HHH", "HHHHH h@iF>DkNVSri1 HHH", "HHHHHH gia,* c #9494AA", ", c #A4A4BC", "' c #ABABC7", ") c #63636D", "! c #7E7E74", "~ c #FDFDFD", "{ c #FAFAFA", "] c #D3D3D3", "^ c #8D8D99", "/ c #818198", "( c #7F7F95", "_ c #808096", ": c #7C7C90", "< c #767676", "[ c #B5B5A4", "} c #DBEDED", "| c #BBCACA", "1 c #97A3A3", "2 c #CFE0E0", "3 c #DAECEC", "4 c #D2E5E4", "5 c #CCDEDE", "6 c #C9DBDA", "7 c #B6BDAF", "8 c #B6A88A", "9 c #AE9268", "0 c #A68351", "a c #AB8A5D", "b c #BEA481", "c c #C6C6B5", "d c #D1E0DB", "e c #DBEDEC", "f c #EDF6F6", "g c #A0A8A8", "h c #686E6E", "i c #C7D0D0", "j c #E1E9E3", "k c #B8B79A", "l c #927838", "m c #9B6C20", "n c #A46A18", "o c #A96918", "p c #A76818", "q c #A2671A", "r c #997230", "s c #A8976E", "t c #D2D5C8", "u c #828282", "v c #363636", "w c #BCBCBC", "x c #F9F9F7", "y c #C4BC99", "z c #987B2C", "A c #A87318", "B c #B47618", "C c #BC7918", "D c #BF7818", "E c #BF7718", "F c #BA7518", "G c #AF7218", "H c #A16F1E", "I c #A5884F", "J c #F4F3EE", "K c #C2E0E0", "L c #AFCCCC", "M c #1C2323", "N c #060808", "O c #485757", "P c #C0DEDE", "Q c #BEDCD6", "R c #BAD8CC", "S c #9AB393", "T c #8D8127", "U c #AA8418", "V c #BF8618", "W c #C68718", "X c #C98918", "Y c #CB8818", "Z c #CB8718", "` c #CA8518", " . c #C47F18", ".. c #B97A18", "+. c #A67518", "@. c #918E5D", "#. c #B5D2CB", "$. c #FBFBFB", "%. c #C5C5C4", "&. c #1C1C13", "*. c #0B0B03", "=. c #45453D", "-. c #E4E4D3", ";. c #E4E485", ">. c #DADA57", ",. c #9C9F47", "'. c #9D8D1A", "). c #B69418", "!. c #C79618", "~. c #CB9718", "{. c #CC9919", "]. c #CC991C", "^. c #CC941A", "/. c #CC9119", "(. c #CA8B18", "_. c #C38618", ":. c #B68318", "<. c #A08434", "[. c #D5CFB5", "}. c #BAD8D7", "|. c #7F907E", "1. c #747402", "2. c #737300", "3. c #68690F", "4. c #A2B175", "5. c #DFE119", "6. c #E9E900", "7. c #8D9816", "8. c #A9A018", "9. c #BEA518", "0. c #CAA618", "a. c #CCA81A", "b. c #CEAF21", "c. c #D0B42E", "d. c #CDAD29", "e. c #CCA11E", "f. c #CC9718", "g. c #C89218", "h. c #BE8C18", "i. c #9F821C", "j. c #A3A775", "k. c #F2F2F2", "l. c #999982", "m. c #DFDF00", "n. c #F9F900", "o. c #ABAB09", "p. c #B9B990", "q. c #D4D436", "r. c #CFCF0B", "s. c #87A219", "t. c #B4B818", "u. c #C3B918", "v. c #CFBF18", "w. c #DCC31D", "x. c #E7C831", "y. c #E9CA6D", "z. c #E5C863", "A. c #D9BE34", "B. c #CDA819", "C. c #CAA018", "D. c #C29A18", "E. c #A38C18", "F. c #AEA966", "G. c #E1EBEB", "H. c #949A80", "I. c #E2E200", "J. c #FAFA00", "K. c #AFB00A", "L. c #B9C1B9", "M. c #D3DDB3", "N. c #C4CE8C", "O. c #669132", "P. c #8BAA19", "Q. c #B2BD1C", "R. c #CDC918", "S. c #E0CB1C", "T. c #EACC31", "U. c #EFCC5F", "V. c #ECCC55", "W. c #E7C62C", "X. c #D2B919", "Y. c #C9AF18", "Z. c #C0A818", "`. c #9E9419", " + c #A5AB6A", ".+ c #D4E4E4", "++ c #8F987E", "@+ c #E3E300", "#+ c #FBFB00", "$+ c #B1B20A", "%+ c #B2C0BD", "&+ c #DCEDED", "*+ c #DDEEEE", "=+ c #7DA978", "-+ c #509C29", ";+ c #75BA2C", ">+ c #AAC818", ",+ c #C8CB1A", "'+ c #DBCC24", ")+ c #E9CC32", "!+ c #EACC2B", "~+ c #E7CB20", "{+ c #D6C71C", "]+ c #C6BF1A", "^+ c #B9B318", "/+ c #929922", "(+ c #AABA8B", "_+ c #ECF0F0", ":+ c #999B82", "<+ c #E1E100", "[+ c #AFAF0A", "}+ c #C5C8C6", "|+ c #F4F6F9", "1+ c #EDEDFA", "2+ c #8C98BE", "3+ c #276D67", "4+ c #2E9E50", "5+ c #5EB924", "6+ c #7CC41D", "7+ c #97C919", "8+ c #B6CB19", "9+ c #C2CB19", "0+ c #C9CB19", "a+ c #BDC822", "b+ c #A8BF28", "c+ c #8EA91B", "d+ c #87A358", "e+ c #DDE6D9", "f+ c #CDE1E1", "g+ c #8C967C", "h+ c #E1E101", "i+ c #ACAC09", "j+ c #757FAC", "k+ c #A1A6E6", "l+ c #AAAAEB", "m+ c #3946AD", "n+ c #162D9D", "o+ c #1C5E8B", "p+ c #36905B", "q+ c #48AA43", "r+ c #59BA33", "s+ c #72C124", "t+ c #7FC11D", "u+ c #89BF19", "v+ c #7FB82A", "w+ c #6DA634", "x+ c #69983D", "y+ c #ACCAB4", "z+ c #D2E8E7", "A+ c #E7EDED", "B+ c #969981", "C+ c #E0E000", "D+ c #AAAA08", "E+ c #9395B5", "F+ c #D5D6F4", "G+ c #E7E7FA", "H+ c #2D5990", "I+ c #1821B0", "J+ c #1920B9", "K+ c #213B9C", "L+ c #315C76", "M+ c #3A856B", "N+ c #40A255", "O+ c #43A53E", "P+ c #42A236", "Q+ c #379049", "R+ c #2D665C", "S+ c #728C97", "T+ c #F2F9F8", "U+ c #F2F9F9", "V+ c #D8E7E6", "W+ c #929A80", "X+ c #B6C2C0", "Y+ c #E1F0F0", "Z+ c #E2F1F1", "`+ c #3B8288", " @ c #183AB3", ".@ c #1819C9", "+@ c #331D9C", "@@ c #6F1531", "#@ c #421676", "$@ c #2529A8", "%@ c #1F31A8", "&@ c #1A30AE", "*@ c #191FBA", "=@ c #1825AA", "-@ c #6A88B0", ";@ c #DCE8E7", ">@ c #91987F", ",@ c #B8C2BF", "'@ c #E5F2F2", ")@ c #E6F3F3", "!@ c #77AC9F", "~@ c #225496", "{@ c #2A2FA4", "]@ c #665E51", "^@ c #825F3B", "/@ c #4234AF", "(@ c #2726CC", "_@ c #1B1BCC", ":@ c #1819CC", "<@ c #1826C2", "[@ c #2353A1", "}@ c #92B7BD", "|@ c #C8C8C7", "1@ c #C7DACA", "2@ c #6F8E52", "3@ c #8A8D24", "4@ c #98980A", "5@ c #7C7C58", "6@ c #6A6AC4", "7@ c #4B4DCC", "8@ c #232BCC", "9@ c #1835CB", "0@ c #186CA9", "a@ c #47998B", "b@ c #D3E5DB", "c@ c #BDD9D9", "d@ c #859479", "e@ c #E4E400", "f@ c #B2B30A", "g@ c #A1B8B5", "h@ c #C4E2E2", "i@ c #C5E2E2", "j@ c #BBD2AC", "k@ c #C4C81E", "l@ c #E6E600", "m@ c #D9D900", "n@ c #8E942A", "o@ c #3755A8", "p@ c #2463BF", "q@ c #1A7CAE", "r@ c #1B9E8D", "s@ c #4BAC68", "t@ c #9DC9AE", "u@ c #F0F2F2", "v@ c #969784", "w@ c #BAB700", "x@ c #D5D000", "y@ c #8F8D0B", "z@ c #C8CAC8", "A@ c #FAFCFC", "B@ c #FBFDFD", "C@ c #E9EAC2", "D@ c #D7D826", "E@ c #F2F200", "F@ c #9EB124", "G@ c #429278", "H@ c #369D7D", "I@ c #4AA872", "J@ c #76BA80", "K@ c #CFE2CA", "L@ c #F6F9F7", "M@ c #FCFEFE", "N@ c #C1DADA", "O@ c #6E7876", "P@ c #7B3100", "Q@ c #9A3D00", "R@ c #582909", "S@ c #9FB3B3", "T@ c #C9E4E4", "U@ c #CAE5E5", "V@ c #C3DED2", "W@ c #B6C95A", "X@ c #D2D505", "Y@ c #C2C911", "Z@ c #9EBC6D", "`@ c #8CBEA3", " # c #8BBFA3", ".# c #A1CBB7", "+# c #BBDAD3", "@# c #F4F4F4", "## c #9F8A8A", "$# c #C30202", "%# c #DD0303", "&# c #9B0F0F", "*# c #CECCCC", "=# c #FEFEFC", "-# c #F5F5E8", ";# c #F9F9F3", "># c #E5EFEF", ",# c #ACB3B3", "'# c #835050", ")# c #945252", "!# c #7B5D5D", "~# c #D1DADA", "{# c #EAF4F4", "]# c #EBF5F5", "^# c #BDDADA", "/# c #A4C0C0", "(# c #A7C2C2", "_# c #A9C5C5", ":# c #C4E1E1", " . + @ # $ % ", " & & & & & * = - ; > , ' ) ! & & & & & & & & ", " & & ~ { * & ] ^ / ( _ : < [ & & & & & & & & ", " } } | 1 2 } 3 4 5 5 6 7 8 9 0 a b c d e } } ", " f f g h i f f f f j k l m n o p q r s t f f ", " & & u v w & & & x y z A B C D E F G H I J & ", " K L M N O P Q R S T U V W X Y Z ` ...+.@.#. ", " $.%.&.*.=.-.;.>.,.'.).!.~.{.].^./.(._.:.<.[. ", " }.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j. ", " k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F. ", " G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. + ", " .+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+ ", " _+:+<+J.[+}+|+1+2+3+4+5+6+7+8+9+0+a+b+c+d+e+ ", " f+g+h+J.i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+z+ ", " A+B+C+J.D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+ ", " V+W+@+#+$+X+Y+Z+`+ @.@+@@@#@$@%@&@*@=@-@Z+Z+ ", " ;@>@I.J.K.,@'@)@!@~@{@]@^@/@(@_@:@<@[@}@)@)@ ", " k.l.m.J.o.|@~ & 1@2@3@4@5@6@7@8@9@0@a@b@& & ", " c@d@e@#+f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@h@i@i@ ", " u@v@w@x@y@z@A@B@C@D@E@e@F@G@H@I@J@K@L@B@B@M@ ", " N@O@P@Q@R@S@T@U@V@W@X@Y@Z@`@ #.#+#U@U@U@U@U@ ", " @###$#%#&#*#* & & =#-#;#& & & & & & & & & & ", " >#,#'#)#!#~#{#]#]#]#]#]#]#]#]#]#]#]#]#]#]#]# ", " i@^#/#(#_#:#i@i@i@i@i@i@i@i@i@i@i@i@i@i@i@i@ "}; GabeditSrc250/pixmaps/VaspMini.xpm0000644000175100017510000000320213130664665017434 0ustar alloucheallouche/* XPM */ static char * vasp_mini_xpm[] = { "16 16 86 1", " c None", ". c #785590", "+ c #854698", "@ c #796292", "# c #794D89", "$ c #786B8E", "% c #8A4487", "& c #896CBA", "* c #8A77CE", "= c #736BC2", "- c #943F97", "; c #8F4789", "> c #975484", ", c #AE2A79", "' c #777C8E", ") c #6D7287", "! c #66537D", "~ c #823DA2", "{ c #8172BE", "] c #6A42CC", "^ c #53528E", "/ c #62629A", "( c #8289C7", "_ c #7B83A7", ": c #9E3696", "< c #925591", "[ c #7D5E7C", "} c #C34370", "| c #A95A8C", "1 c #9F418F", "2 c #8B499A", "3 c #846DAA", "4 c #71709D", "5 c #7A51C7", "6 c #505073", "7 c #5D32A6", "8 c #6B57A3", "9 c #7D5F99", "0 c #9757A2", "a c #817394", "b c #596163", "c c #CB5A67", "d c #A0657D", "e c #65707A", "f c #886BA4", "g c #872E9A", "h c #774AA4", "i c #616586", "j c #5A32A7", "k c #605691", "l c #7B4E8C", "m c #8979A8", "n c #79768F", "o c #636A6C", "p c #9B6873", "q c #AD5989", "r c #964588", "s c #825696", "t c #8743A1", "u c #5B3DA9", "v c #6759AB", "w c #7B4490", "x c #616579", "y c #687580", "z c #666272", "A c #795E85", "B c #8B57A8", "C c #8164B1", "D c #645CBE", "E c #6D3CC5", "F c #6B4F93", "G c #7B54A3", "H c #454751", "I c #765A85", "J c #794D84", "K c #664D77", "L c #8250A3", "M c #717B9A", "N c #694EC4", "O c #7B37C4", "P c #7A5CA8", "Q c #6C5A7D", "R c #805696", "S c #8258A3", "T c #775897", "U c #5F678C", " ", " ", " ", " ", " .+ ", " @#$% &*= ", " -;>,')!~{]^", " /( _:<[}|123456", " 78 90abcdefghi ", " jk lmnopqrst ", " uv wx yzABC ", " DEFGH IJKLM ", " NOP QRST ", " U ", " ", " "}; GabeditSrc250/pixmaps/NWChem.xpm0000644000175100017510000000732513130664665017041 0ustar alloucheallouche/* XPM */ static char * nwchem_xpm[] = { "23 22 165 2", " c #FAFAFA", ". c #F5F6F3", "+ c #DFE5D6", "@ c #C8D3B6", "# c #AEBF92", "$ c #92A96C", "% c #94AB6F", "& c #C0CDAB", "* c #E7EBE0", "= c #EDF0EA", "- c #C7D2B5", "; c #ACBD8F", "> c #91A86A", ", c #799649", "' c #63852B", ") c #5D8023", "! c #5B7F21", "~ c #5E8125", "{ c #789548", "] c #A2B681", "^ c #CED8BE", "/ c #EEF0E9", "( c #F9F9F9", "_ c #C1CBBB", ": c #436427", "< c #517424", "[ c #66872F", "} c #87A15D", "| c #B4C598", "1 c #F1F4ED", "2 c #CCD4C7", "3 c #3C5C29", "4 c #416228", "5 c #507224", "6 c #5A7E21", "7 c #5C8122", "8 c #628825", "9 c #6B9228", "0 c #729B2C", "a c #7AA333", "b c #E5ECD9", "c c #D6DCD2", "d c #406128", "e c #4E7024", "f c #5A7D22", "g c #618624", "h c #688F27", "i c #70982B", "j c #76A02E", "k c #78A22F", "l c #7CA536", "m c #ECF0E4", "n c #DCE1D9", "o c #3F5F28", "p c #547826", "q c #6E962A", "r c #759F2E", "s c #A2BB76", "t c #A4C073", "u c #7DA637", "v c #7FA73A", "w c #F4F6F1", "x c #E2E6E0", "y c #51742B", "z c #A1B382", "A c #81A640", "B c #B9C79F", "C c #739B2E", "D c #85AB43", "E c #F8F9F8", "F c #EBEEEA", "G c #3F5E2C", "H c #8CB04F", "I c #859C5C", "J c #9DBA6B", "K c #789348", "L c #8EB151", "M c #F0F2EF", "N c #436231", "O c #77A12E", "P c #A1B47F", "Q c #739A2E", "R c #9AAB7D", "S c #96B65D", "T c #F2F4F2", "U c #466535", "V c #89AE48", "W c #899E64", "X c #98B762", "Y c #7B974A", "Z c #9DBB6A", "` c #F3F5F3", " . c #4B693A", ".. c #78A22E", "+. c #BFD19E", "@. c #C2D0A8", "#. c #A8B68F", "$. c #759E2E", "%. c #AAC47D", "&. c #F4F5F4", "*. c #506D3F", "=. c #83AA41", "-. c #F4F8EF", ";. c #FBFBFB", ">. c #819A55", ",. c #B3CA8B", "'. c #F7F7F7", "). c #69825B", "!. c #B9CF93", "~. c #FFFFFF", "{. c #CBCFC3", "]. c #739B2D", "^. c #BDD19C", "/. c #7A8F6D", "(. c #7AA331", "_. c #F1F5E9", ":. c #869C5F", "<. c #C6D7AA", "[. c #E8E8E9", "}. c #D4D4D6", "|. c #7F8E77", "1. c #3E5E2C", "2. c #CBDAB0", "3. c #B8C1AA", "4. c #82A93F", "5. c #B1C888", "6. c #EEF2E7", "7. c #EBEBEC", "8. c #C4C3C6", "9. c #BCBBBF", "0. c #979F93", "a. c #466334", "b. c #80A541", "c. c #9EB17E", "d. c #DBDED6", "e. c #F8F8F8", "f. c #F3F3F4", "g. c #CAC9CC", "h. c #ABAEAB", "i. c #546E45", "j. c #85A74B", "k. c #A4B28C", "l. c #BABABA", "m. c #BDBCC0", "n. c #D0CFD2", "o. c #B7B7B9", "p. c #6B7F60", "q. c #79A331", "r. c #8CA959", "s. c #ABB59B", "t. c #CBCACD", "u. c #E8E7E8", "v. c #DEDDDF", "w. c #BDBDC0", "x. c #BBBBBE", "y. c #99A58C", "z. c #B1B7A7", "A. c #CFCED1", "B. c #C1C0C4", "C. c #BFBEC2", "D. c #D4D3D6", "E. c #EFEFEF", "F. c #F0F0F0", "G. c #D8D7DA", "H. c #F1F1F2", " ", " . + @ # $ % & * ", " = - ; > , ' ) ! ! ! ! ! ~ { ] ^ / ( ", " _ : < ! ! ! ! ! ! ! ! ! ! ! ! ! [ } | 1 ", " 2 3 3 4 5 6 ! ! ! ! ! ! ! ! 7 8 9 0 a b ", " c 3 3 3 3 d e f ! ! ! g h i j k k k l m ", " n 3 3 3 3 3 3 o p q r k k k s t u k v w ", " x 3 3 3 3 3 3 3 y k k k k k z A B C D E ", " F G 3 3 3 3 3 3 y k k k k H I J K k L ", " M N 3 3 3 3 3 3 y k k k O P Q R O k S ", " T U 3 3 3 3 3 3 y k k k V W X Y k k Z ", " ` .3 3 3 3 3 3 y k k ..+.@.#.$.k k %. ", " &.*.3 3 3 3 3 3 y k k =.-.;.>.k k k ,. ", " '.).3 3 3 3 3 3 y k k !.~.{.].k k k ^. ", " F /.3 3 3 3 3 y k (._.~.:.k k k k <. ", " [.}.|.1.3 3 3 y k k 2.3.Q k k 4.5.6. ", " 7.8.9.0.a.3 3 y k k O O ..b.c.d.e. ", " f.g.9.h.i.3 y k k k j.k.l.9.m.n.'. ", " '.}.9.o.p.y q.r.s.9.9.m.t.u.( ", " ( v.w.x.y.z.9.9.m.A.7.( ", " [.B.9.9.C.D.E. ", " F.g.G.H. "}; GabeditSrc250/pixmaps/RenderBallStick.xpm0000644000175100017510000000141013130664665020715 0ustar alloucheallouche/* XPM */ static char* render_ballstick_xpm[]={ "24 24 3 1", ". c None", "a c #0000ff", "# c #00c000", "................#####...", "...............#######..", "..............#########.", "..............#########.", "..............#########.", "..............#########.", "..............#########.", ".............#########..", "............#########...", "...........#####........", "..........a####.........", ".........aaa##..........", "........aaaaa...........", ".......aaaaa............", "..aaaaaaaaa.............", ".aaaaaaaaa..............", "aaaaaaaaa...............", "aaaaaaaaa...............", "aaaaaaaaa...............", "aaaaaaaaa...............", "aaaaaaaaa...............", ".aaaaaaa................", "..aaaaa.................", "........................"}; GabeditSrc250/pixmaps/icon1.xpm0000644000175100017510000002522513130664665016730 0ustar alloucheallouche/* XPM */ static char * icon1_xpm[] = { "66 66 117 2", " c None", ". c #FFFFFF", "+ c #E80A0A", "@ c #EB3131", "# c #FEFEFE", "$ c #EB3030", "% c #F8B9B9", "& c #ED4848", "* c #E81111", "= c #E92121", "- c #F06868", "; c #FCECEC", "> c #EC3B3B", ", c #F7B4B4", "' c #F7B1B1", ") c #ED4B4B", "! c #F7B8B8", "~ c #FDF3F3", "{ c #FCE9E9", "] c #F06C6C", "^ c #EE5151", "/ c #FDF9F9", "( c #F16F6F", "_ c #E91A1A", ": c #E91F1F", "< c #F38E8E", "[ c #FEFDFD", "} c #F38787", "| c #EA2828", "1 c #E91919", "2 c #F06666", "3 c #FDF4F4", "4 c #F6ACAC", "5 c #EC4242", "6 c #EC3F3F", "7 c #F6ADAD", "8 c #FDF8F8", "9 c #F17474", "0 c #F59A9A", "a c #EA2727", "b c #FAD4D4", "c c #FDF2F2", "d c #E81616", "e c #F9CDCD", "f c #E92323", "g c #F49393", "h c #F28383", "i c #ED4A4A", "j c #FCE4E4", "k c #FBE3E3", "l c #ED4747", "m c #F49090", "n c #ED4949", "o c #FBDEDE", "p c #FCEEEE", "q c #EF6161", "r c #F17777", "s c #EA2D2D", "t c #F9C6C6", "u c #F8C1C1", "v c #F28181", "w c #F28282", "x c #EE5656", "y c #FBDFDF", "z c #F38585", "A c #F7B2B2", "B c #ED4444", "C c #F7B5B5", "D c #E91D1D", "E c #EA2B2B", "F c #FAD6D6", "G c #EB2F2F", "H c #FAD9D9", "I c #FCE8E8", "J c #F59C9C", "K c #EE5454", "L c #ED4D4D", "M c #F59D9D", "N c #EA2A2A", "O c #FCE7E7", "P c #FDF5F5", "Q c #E81212", "R c #FACFCF", "S c #EA2424", "T c #FAD0D0", "U c #F49797", "V c #E92222", "W c #F9CBCB", "X c #FDF7F7", "Y c #E70B0B", "Z c #F6A8A8", "` c #F8C2C2", " . c #F27D7D", ".. c #FAD5D5", "+. c #EB2E2E", "@. c #F38B8B", "#. c #E70D0D", "$. c #F38C8C", "%. c #F6AAAA", "&. c #F9CACA", "*. c #EA2C2C", "=. c #ED4C4C", "-. c #FAD7D7", ";. c #FAD3D3", ">. c #EF5D5D", ",. c #F27F7F", "'. c #F28080", "). c #EA2626", "!. c #FCE5E5", "~. c #F38A8A", "{. c #F06D6D", "]. c #E91E1E", "^. c #F49595", "/. c #E81010", "(. c #EB3434", "_. c #F17272", ":. c #F38686", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . ", ". . . . . . . . . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . ", ". . . . . . . . . . . + . . . . . . . . + @ # . . . # $ + . . . . . . . . . . . . . . . % & * = - ; . + . . . . . . . . . . . . . . ", ". . . . . . . . . . . + . . . . . . . . + > , . . . ' > + . . . . . . . . . . . . . . . ) ! ~ { ] ^ . + . . . . . . . . . . . . . . ", ". . . . . . / ( _ : < + . [ } | 1 2 3 . + 4 5 . . . 6 7 + . 8 9 : : 9 8 . + 0 a * 6 b . . . . . c d . + . . e f g . . . . . . . . . ", ". . . . . . h i j k l + . m n o p q r . + [ s t . u s [ + . v i k k l w . + x y 3 z 5 . . . . . A B . + . C D A . . . . . . . . . . ", ". . . . . . E F . . b + . G H . . I a . + . J K . L M . + . N F . . b E . + O . . P Q . . . . R S T . + U V W . . . . . . . . . . . ", ". . . . . . * X . . X + . Q + + + + Y . + . 8 = Z = 8 . + . * X . . X * . + . . . . + . . . u S ` . . + N .. . . . . . . . . . . . ", ". . . . . . E F . . ..+ . +.y . . . . . + . . @.#.$.. . + . N F . . b E . + . . . . + . . %.V &.. . . + k *.< . . . . . . . . . . . ", ". . . . . . v =.j j i + . g i -./ ;.>.. + . . . . . . . + . ,.i k k & '.. + . . . . + . m ).-.. . . . + . !.+.~.. . . . . . . . . . ", ". . . . . . 8 {.1 ].< + . [ ^.G /.(.A . + . . . . . . . + . X _.: : _.X . + . . . . + . + + + + + + ~ + . . O $ :.. . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "}; GabeditSrc250/pixmaps/Select.xpm0000644000175100017510000000136213130664665017132 0ustar alloucheallouche/* XPM */ static char * select_xpm[] = { "24 24 2 1", "b c None", ". c #505050", ".....b......b.....b.....", ".....b......b.....b.....", ".....b......b.....b.....", "...bbbbbbbbbbbbbbbbbb...", "...bbbbbbbbbbbbbbbbbb...", "bbbbbbbbbbbbbbbbbbbbbbbb", "...bbbbbbbbbbbbbbbbbb...", "...bbbbbbbbbbbbbbbbbb...", "...bbbbbbbbbbbbbbbbbb...", "...bbbbbbbbbbbbbbbbbb...", "...bbbbbbbbbbbbbbbbbb...", "...bbbbbbbbbbbbbbbbbb...", "bbbbbbbbbbbbbbbbbbbbbbbb", "...bbbbbbbbbbbbbbbbbb...", "...bbbbbbbbbbbbbbbbbb...", "...bbbbbbbbbbbbbbbbbb...", "...bbbbbbbbbbbbbbbbbb...", "...bbbbbbbbbbbbbbbbbb...", "bbbbbbbbbbbbbbbbbbbbbbbb", "...bbbbbbbbbbbbbbbbbb...", "...bbbbbbbbbbbbbbbbbb...", ".....b......b.....b.....", ".....b......b.....b.....", ".....b......b.....b....."}; GabeditSrc250/pixmaps/NBO.xpm0000644000175100017510000000127713130664665016336 0ustar alloucheallouche/* XPM */ static char * nbo_xpm[] = { "23 22 4 1", " c None", ". c #45BA79", "+ c #4550BA", "@ c #BA456E", " ", " ", " ", " ", " ", " .... ", " . . ", " . . ", " + + .... ", " ++ + . . ", " + + + . . ", " + + .... @@@@ ", " + + + @@ @@ ", " + ++ @ @ ", " + + @ @ ", " @ @ ", " @@ @@ ", " @@@@ ", " ", " ", " ", " "}; GabeditSrc250/pixmaps/Knot20.xpm0000644000175100017510000000110213130664665016760 0ustar alloucheallouche/* XPM */ static char * knot_xpm[] = { "20 20 3 1", " c #FFFFFF", ". c #A0522D", "+ c #2E8B57", " .......... +++++++", "............. ++++++", " ............. ++ ", " ............. ", " . ....... ", "++ ++ ....... .", "+++ ++++ ...... ..", "++++ +++++ .... ...", "+++ ++++++ .. ....", "++ ++++++ .....", " + +++++ + .....", " +++++ ++++ ......", " ++++++ +++++ .. ", " +++++ +++++++ ", "+++++ ++++++++++ ", "+++++ +++++++++++++ ", "+++ ++++++++++++", " .. +++++++++++", "........ ++++++++", "........... +++++"}; GabeditSrc250/pixmaps/GamessMini.xpm0000644000175100017510000000064013130664665017745 0ustar alloucheallouche/* XPM */ static char *gamess_mini_xpm[]={ "16 16 3 1", "# c None", ". c None", "a c #585858", "....##..........", "#aaaa#.aa.#a..a#", "#a##a#aaaa#aaaa#", "#a####a##a#a..a#", "#a#aa#a##a#a##a#", "#a##a#a..a#a..a#", "#aaaa#a..a#a..a#", "#.........#...##", "#aaaa#aaaa#aaaa#", "#a...#a##.#a##..", "#a...#a####a###.", "#aaaa#aaaa#aaaa#", "#a...#.##a####a#", "#a#######a####a#", "#aaaa#aaaa#aaaa.", "................"}; GabeditSrc250/pixmaps/Geometry.xpm0000644000175100017510000000610413130664665017505 0ustar alloucheallouche/* XPM */ static char*geometry_xpm[]={ "24 24 115 2", " c None", ". c #9C9900", "+ c #939201", "@ c #9A9700", "# c #37500E", "$ c #1C411C", "% c #327332", "& c #2D6D2D", "* c #999A04", "= c #63B23C", "- c #50BA50", "; c #2B662B", "> c #419C41", ", c #409640", "' c #818100", ") c #000000", "! c #919605", "~ c #569530", "{ c #3F963F", "] c #3A833A", "^ c #337133", "/ c #306B30", "( c #245524", "_ c #337F33", ": c #368136", "< c #337833", "[ c #989500", "} c #858500", "| c #416B1A", "1 c #438D39", "2 c #3E943E", "3 c #2D6F2D", "4 c #368036", "5 c #388538", "6 c #999701", "7 c #999700", "8 c #8B8A00", "9 c #317831", "0 c #347C34", "a c #2F732F", "b c #317631", "c c #378537", "d c #2A5E21", "e c #808705", "f c #8D8C00", "g c #595900", "h c #676700", "i c #585800", "j c #316D31", "k c #2F6D2F", "l c #378637", "m c #47A847", "n c #357D32", "o c #B2B200", "p c #FDFD00", "q c #2F6A2F", "r c #368536", "s c #225822", "t c #B3B300", "u c #FFFF00", "v c #1C431C", "w c #2F6E2F", "x c #357E35", "y c #327432", "z c #2A602A", "A c #2F762F", "B c #337433", "C c #316F31", "D c #B4B400", "E c #336B28", "F c #429A40", "G c #3C913C", "H c #326F32", "I c #6F6E00", "J c #7F8D0A", "K c #417624", "L c #255725", "M c #2C632C", "N c #1B3D1B", "O c #327532", "P c #3A853A", "Q c #235223", "R c #7B7900", "S c #2F682F", "T c #265A26", "U c #265726", "V c #378337", "W c #3E933E", "X c #296229", "Y c #367D36", "Z c #388838", "` c #347834", " . c #3C8B3C", ".. c #367936", "+. c #439543", "@. c #367C36", "#. c #327232", "$. c #5AB05A", "%. c #398839", "&. c #429842", "*. c #367B36", "=. c #99A30E", "-. c #2E632C", ";. c #9B9800", ">. c #8A8900", ",. c #979600", "'. c #E0DF00", "). c #969600", "!. c #949200", "~. c #888700", "{. c #610D00", "]. c #A71A00", "^. c #959300", "/. c #890000", "(. c #D00000", " . ", " . . ", " . ", " + @ ", " . . # ", " . . $ % & ", " . * = - ; > , ' ", " ) ! ~ { ] ^ / ( _ : < [ } ", " ) | 1 2 3 4 5 6 7 8 ", " ) ) ) 9 0 a b c d e f ", " g h i j k l m n ", " o p o q j a r s ", " t u t v w x y ", " t u t z A r B C ", " t u D E F G H / ", " t u o I J K L M N O P Q ", " o u o R S j j T / U V W X ", " o u o C Y Z ` ...+.@.#.$. ", " o u o %.&.*. =.. ", " o u t -. ;.>. ", " ,.'.). 6 !.~. ", " {.].{. . ^. ", " /.(./. . . ", " . "}; GabeditSrc250/pixmaps/PsicodeMini.xpm0000644000175100017510000000130013130664665020106 0ustar alloucheallouche/* XPM */ static char * psicode_mini_xpm[] = { "16 12 27 1", " c None", ". c #333885", "+ c #49488D", "@ c #48498D", "# c #2C3687", "$ c #263083", "% c #323A88", "& c #283284", "* c #3A3F8B", "= c #323785", "- c #454990", "; c #444489", "> c #605995", ", c #4E4989", "' c #353B8B", ") c #515599", "! c #605F9B", "~ c #5A5C9B", "{ c #4B4D90", "] c #363F8E", "^ c #414A94", "/ c #424B92", "( c #404893", "_ c #273283", ": c #2D398D", "< c #37408F", "[ c #323B8B", " ", " .+@# $ ", " % & ", " * = ", " - ;>,' ", " )!~{] ", " ^/( ", " _: ", " < ", " [ ", " # ", " "}; GabeditSrc250/pixmaps/Psicode.xpm0000644000175100017510000000231713130664665017302 0ustar alloucheallouche/* XPM */ static char * psicode_xpm[] = { "22 17 49 1", " c None", ". c #1F2A7E", "+ c #263184", "@ c #2F3A89", "# c #243083", "$ c #222F86", "% c #242E7F", "& c #353F90", "* c #1E297B", "= c #283286", "- c #2C3687", "; c #273285", "> c #2F3887", ", c #2A3588", "' c #343C8A", ") c #2E388A", "! c #1F2B7F", "~ c #202D82", "{ c #373E8B", "] c #303989", "^ c #36347B", "/ c #23328A", "( c #3F458F", "_ c #313885", ": c #72669C", "< c #323681", "[ c #343E91", "} c #494E96", "| c #897FAA", "1 c #45478A", "2 c #61619F", "3 c #756C9D", "4 c #4E559C", "5 c #6D6EA5", "6 c #424A95", "7 c #696AA1", "8 c #2E3888", "9 c #3C4692", "0 c #303B88", "a c #424B94", "b c #2D388B", "c c #1F2A7C", "d c #2C388C", "e c #26348C", "f c #202A7B", "g c #454D9B", "h c #394292", "i c #2E398A", "j c #2A3485", " ", " .+@#$ %& ", " *= - ; ", " > , ", " ' ) !~! ", " { ] ^;/ ", " ( _: <[ ", " }|123_ ", " 45678 ", " 90ab ", " cde ", " 8 ", " fg ", " h ", " i ", " j ", " "}; GabeditSrc250/pixmaps/Insert.xpm0000644000175100017510000000110613130664665017153 0ustar alloucheallouche/* XPM */ static char *insert_xpm[] = { "22 18 4 1", ". c None", "B c #000000", "W c #ffffff", "r c #ff00ff", "......................", "BBBBBBBBBBBBBBBBBBBBBB", "WBWBWBWBWBWBWBWBWBWBBW", "......................", ".........BB...........", ".......BBrB...........", ".....BBrrrB...........", "...BBrrrrrBBBBBBBBBBB.", "BBBrrrrrrrrrrrrrrrrrBB", ".BBBBrrrrrBBBBBBBBBBBB", "...BBBBrrrBBBBBBBBBBBB", ".....BBBBBBB..........", ".......BBBBB..........", ".........BBB..........", "......................", "BBBBBBBBBBBBBBBBBBBBBBB", "WBWBWBWBWBWBWBBWBWBWBWB", "......................."}; GabeditSrc250/pixmaps/Perspective.xpm0000644000175100017510000000173113130664665020204 0ustar alloucheallouche/* XPM */ static char * perspective_xpm[] = { "24 24 17 1", " c None", ". c #000000", "+ c #D20000", "@ c #ECEC00", "# c #FC4203", "$ c #AC0000", "% c #FFFF00", "& c #FF0000", "* c #C4C400", "= c #FFB862", "- c #840000", "; c #FFA940", "> c #666600", ", c #7D7D00", "' c #804000", ") c #FE8263", "! c #737300", " ", " . ", " .+.. ", " .@#+$.. ", " .@%#&&+$.. ", " .@%%#&&&&+$.. ", " .@@%%#&&&&&&+$.. ", " .*@%%=#&&&&&&&&&. ", " .*@%%%=#&&&&&&&&-. ", " .*@%%%%;&&&&&&&&>-. ", " .@%%%%%%=&&&&&&&>,-. ", " .*@%%%%%=&&&&&#>,'-. ", " .*@%%%%;&&&&#>,,'-. ", " .*@%%%;&&&&>,,,--. ", " .*@%%;&&&>,,,'--. ", " .*@%;&+>,,,,'--. ", " .*%;+',,,,'---. ", " .*)'!,,,,'--. ", " .'!,,,,,--. ", " ...,,,'-. ", " ..,-. ", " .. ", " ", " "}; GabeditSrc250/pixmaps/Play.xpm0000644000175100017510000000062013130664665016614 0ustar alloucheallouche/* XPM */ static char * play_xpm[] = { "16 16 2 1", " c None", ". c #000000", " ", " ", " . ", " ... ", " ..... ", " ....... ", " ......... ", " .......... ", " ......... ", " ....... ", " ..... ", " ... ", " . ", " ", " ", " "}; GabeditSrc250/pixmaps/MoveAtom.xpm0000644000175100017510000000142013130664665017435 0ustar alloucheallouche/* XPM */ static char* move_atom_xpm[]={ "24 24 4 1", "# c #c3c3c3", "b c #0000c0", ". c None", "a c #ff0000", "........................", ".#...#####..............", "....#aaaaa#.............", "...#abbbbba#............", "..#abbbbbbba##..........", ".#abbbbbbbbbaa#.........", ".abbbbbbbbbbbaa#........", ".abbbbbbbbbbba.a#.......", ".abbbbbbbbbbba..a#......", ".abbbbbbbbbbbaaa.a#.....", ".abbbbbbbbbbba##aa#.....", "..abbbbbbbbba...#a#.....", "...abbbbbbba.....aa#....", "....abbbbba.....#a#a#...", ".....aaaaa.....#a#.a.#..", ".......a##....#a#..a.#..", ".......aa#####a#...a.#..", ".......a.aaaaa#....a.#..", ".......#a#........a#.#..", "........#a#......a#.#...", ".........#a#....a#.#....", "..........#aaaaa#.#.....", "...........#######......", "........................"}; GabeditSrc250/pixmaps/No.xpm0000644000175100017510000000745713130664665016302 0ustar alloucheallouche/* XPM */ static char* no_xpm[]={ "20 20 185 2", "au c #904339", "aa c #a57872", ".C c #040404", "#m c #d5a9a4", ".o c #a45045", "ad c #924b41", "#9 c #8a2c1f", "#c c #952d22", ".T c #e2c7c3", "aL c #a06a63", "ae c #9d544c", "#d c #8b281e", ".3 c #722217", "#6 c #963427", "#y c #c9958e", "ax c #882f23", ".S c #d6aba5", "#M c #b57168", "#D c #ab5246", ".M c #92372b", "#A c #c9908a", "#l c #dfbcb8", "aX c #060101", "#o c #b5645c", "ac c #080101", ".R c #b97970", "aO c #3d1712", "aS c #915a54", "ao c #a87d77", "a# c #9d6760", ".I c #cd9892", "#b c #9b3628", "aj c #8f3124", ".z c #8e3a2f", ".6 c #c68a83", ".B c #4a160f", ".G c #dfbfbc", ".f c #7e352b", "#S c #973124", "## c #bc7369", "aD c #4b2722", ".E c #ca928b", "aC c #a2736f", ".5 c #5f342e", ".P c #380c07", "aA c #a26961", ".w c #c68d87", "ay c #863027", "#4 c #a04a3f", ".n c #ad6056", "#R c #9e3d33", "aB c #a97a74", "#U c #8a2619", "#q c #9a3325", ".j c #5d3732", "a1 c #80524d", ".H c #dab4b1", "a0 c #8e5f59", "aZ c #73443e", ".F c #d9b3ae", "#E c #9e3b2d", "aV c #966761", "ah c #984037", "aW c #48241f", ".J c #bc7971", ".p c #9a4037", "#3 c #a7564e", ".V c #e2c4c1", "aN c #5c312b", "#u c #782419", "aJ c #853a30", ".N c #883125", "#z c #cb9790", ".9 c #efe2e0", "#k c #dbb6b2", "#H c #882419", "aU c #a27771", ".a c #030303", "an c #9b615a", "aq c #080303", "az c #934a40", "#n c #c4847d", "#7 c #8f2b1e", "#0 c #a66057", ".Q c #120b0b", "av c #8e3c31", ".W c #d1a29c", "#5 c #9b3d34", "aP c #71332c", ".1 c #8b2e22", ".7 c #dab3af", "#I c #822a21", ".Z c #9b3b2e", ".x c #b67067", ".c c #592924", "ab c #5a322f", ".# c #000000", "#O c #bb7972", ".s c #784c47", ".4 c #050000", "#2 c #ab6258", ".h c #070000", "aG c #803a31", "aH c #823a31", "#Y c #804c47", "#W c #8e473d", "#i c #c78e86", "#v c #631f16", ".i c #080808", "#C c #b86b63", "a2 c #532c28", "#t c #802317", "#1 c #ac665f", "#N c #bb7c76", "#f c #791f16", "#X c #9c615b", "ar c #451d16", ".O c #802b1f", "#V c #882b1f", "#a c #a74e42", "#Z c #562621", "#B c #c2837b", "ag c #9b493e", "#G c #912a1c", "aY c #4a211d", "at c #90453d", ".0 c #943327", ".m c #b9756c", "as c #8d443a", ".r c #3d130e", "am c #91443a", "aT c #9b6b64", ".Y c #a95146", ".l c #bf7d74", "aw c #8a362b", "#L c #87473e", ".U c #ecd9d7", ".X c #bc776d", "#K c #83423a", "#x c #bf8078", ".D c #5b3832", ".8 c #e5cbc8", ".K c #a85347", "aR c #874a42", "aQ c #7d3d36", "a. c #8e4137", "ai c #93382c", "#F c #962f21", ".e c #a04e43", "#P c #b1645a", "aM c #a1716c", ".L c #9b4034", ".u c #d1a29e", ".y c #a8564b", ".d c #88443b", ".k c #b6756d", "#e c #802519", "Qt c None", "aI c #82372f", "af c #9c5147", "#j c #d5aaa6", "ap c #9a6b65", "al c #882d21", "#J c #873e34", ".2 c #7e281d", "#g c #3d0d08", "#r c #932c1e", ".A c #853128", ".g c #4b1a14", "ak c #8a281d", "#8 c #8b271a", ".b c #0c0707", "#Q c #a95348", ".q c #88382d", "#. c #cf9e98", "#p c #a44539", ".t c #ca9089", "#h c #92524b", "aF c #803b31", "aK c #915148", "#s c #8c291b", "aE c #54241d", "#T c #90291b", "#w c #a95e54", ".v c #d0a099", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQt.#.#.#.#.#QtQtQtQtQtQtQtQt", "QtQtQtQtQt.a.b.c.d.e.f.g.h.#QtQtQtQtQtQt", "QtQtQtQt.i.j.k.l.m.n.o.p.q.r.#QtQtQtQtQt", "QtQtQtQt.s.t.u.v.w.x.y.p.z.A.B.#QtQtQtQt", "QtQt.C.D.E.F.G.H.I.J.K.L.M.N.O.P.#QtQtQt", "QtQt.Q.R.S.T.U.V.W.X.Y.Z.0.1.2.3.4QtQtQt", "Qt.#.5.6.7.8.9.8#.###a#b#c#d#e#f#g.#QtQt", "Qt.##h#i#j#k#l#m#n#o#p#q#r#s#t#u#v.#QtQt", "Qt.##w#x#y#z#A#B#C#D#E#F#G#H#I#J#K.#QtQt", "Qt.##L#M#N#O.x#P#Q#R#S#T#U#V#W#X#Y.#QtQt", "Qt.##Z#0#1#2#3#4#5#6#7#8#9a.a#aaab.#QtQt", "QtQtacadaeafagahaiajakalamanaoapaqQtQtQt", "QtQt.#arasatauavawaxayazaAaBaCaD.#QtQtQt", "QtQtQt.#aEaFaGaHaIaJaKaLaoaMaN.#QtQtQtQt", "QtQtQtQt.#aOaPaQaRaSaTaUaVaW.#QtQtQtQtQt", "QtQtQtQtQt.#aXaYaZa0a1a2aq.#QtQtQtQtQtQt", "QtQtQtQtQtQtQt.#.#.#.#.#QtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"}; GabeditSrc250/pixmaps/Home.xpm0000644000175100017510000000174113130664665016604 0ustar alloucheallouche/* XPM */ static char* home_xpm[]={ "21 18 33 1", "a c #8e8a8e", "D c #79869e", "n c #9696ae", "C c #a6a2a6", "l c #961408", "p c #595128", "h c #cf5528", "d c #b6b2b6", "j c #ff8e08", "# c #bec3cf", "w c #808000", "k c #413841", "y c #717571", "b c #aeaeb6", "A c #b6aeb6", "o c #616161", "i c #797979", "u c #202020", "c c #aeb2cf", "f c #ae6161", "v c #ffb610", "B c #666666", "r c #ffff00", ". c None", "m c #690808", "x c #000018", "E c #c4c4c4", "e c #be2020", "t c #717986", "z c #202851", "g c #867986", "s c #3d3b3d", "q c #aeb228", ".....................", ".....................", ".....................", ".........#abc...d....", "........#aefccd......", ".......#ghhhfccd.....", "......cihhhjhfbc.....", ".....cklheeeeemn.....", ".....opqqrrrqqqs.....", ".....tqpurvrwxqyn....", ".....nqpzqlwwzqfc....", ".....nqszqhqpzqyc....", ".....nqqqqlqrwryA....", ".....npvvwlpvvqBA....", ".....CgtttaDtttnC....", ".....................", "...................E.", "....................."}; GabeditSrc250/pixmaps/Next.xpm0000644000175100017510000000275013130664665016633 0ustar alloucheallouche/* XPM */ static char *next_xpm[] = { /* width height ncolors chars_per_pixel */ "24 24 48 1", /* colors */ " c #000000", ". c #CBDAC7", "X c #C9D8C5", "o c #5D8554", "O c #87AC7D", "+ c #83AA7C", "@ c #82A87B", "# c #E4EBE2", "$ c #DEE7DC", "% c #D7E3D5", "& c #9ABB8F", "* c #3A5934", "= c #537C49", "- c #B1C7AC", "; c #3B5E31", ": c #D4E0D1", "> c #CEDCCB", ", c #445840", "< c #85A879", "1 c #3F6534", "2 c #749868", "3 c #83AA7A", "4 c #F1F5F0", "5 c #EFF3EE", "6 c #EEF3ED", "7 c #EBF1EA", "8 c #9DBB90", "9 c #749A6B", "0 c #37592F", "q c #86A97C", "w c #80A776", "e c #EDF2EB", "r c #E5ECE3", "t c #E1EADF", "y c #59814F", "u c #FFFFFF", "i c #88AC80", "p c #F4F7F4", "a c #F3F7F3", "s c #7EA476", "d c #759C6D", "f c #84A778", "g c #4B7040", "h c #90B387", "j c #181818", "k c None", "l c #F0F4EF", "z c #759B6C", /* pixels */ "kkkkkkkkkkkkkkkkkkkkkkkk", "kkkkkkkkkkkkkkkkkkkkkkkk", "kkkkkkkkkkkkkkkkkkkkkkkk", "kkkkkkkkkkkkkkkkkkkkkkkk", "kkkkkkkkkkkkkkkkkkkkkkkk", "kkkk kkkkkkkkkkk kkk", "kkkk t kkkkkkkkk tt kkk", "kkkk ul: kkkkkkk uu kkk", "kkkk uael> kkkkk uu kkk", "kkkk up4574X kkk uu kkk", "kkkk u55577rl.j k uu kkk", "kkkk u5557#$%$6- uu kkk", "kkkk 8i+i+ c #F8F7F6", " , c #E6E5E1", " < c #F6F5F4", " 1 c #E4E3DF", " 2 c #F3F3F1", " 3 c #BCBCBB", " 4 c #F1F1EF", " 5 c #7F7F7F", " 6 c #7B7B7B", " 7 c #717171", " 8 c #6F6F6F", " 9 c #696969", " 0 c #676767", " q c #636363", " w c #616161", " e c #5B5B5B", " r c #C5C5C3", " t c #B5B3B0", " y c #555555", " u c #E2E0DC", " i c #F1F0EE", " p c #4F4F4F", " a c #DFDED9", " s c #EFEEEC", " d c #4D4D4D", " f c #EDECEA", " g c #4B4B4B", " h c #EBEAE8", " j c #494949", " k c #FAFAFA", " l c #474747", " z c #454545", " x c #F6F6F6", " c c #F4F4F4", " v c #414141", " b c #F2F2F2", " n c #3F3F3F", " m c #F0F0F0", " M c #646260", " N c #EEEEEE", " B c #3B3B3B", " V c #393939", " C c #EAEAEA", " Z c #373737", " A c #E8E8E8", " S c #353535", " D c #333333", " F c #313131", " G c #E2E2E2", " H c #2F2F2F", " J c #E0E0E0", " K c #2D2D2D", " L c #272727", " P c #D2D2D2", " I c #CECECE", " U c #C6C6C6", " Y c #EAE9E6", " T c #7D7D7B", " R c #F7F7F6", " E c #444443", " W c #CDCBC6", " Q c #B6B6B6", " ! c #B4B4B4", " ~ c #B2B2B2", " ^ c #ACACAC", " / c #AAAAAA", " ( c #A8A8A8", " ) c #A6A6A6", " _ c #CBC9C7", " ` c #A2A2A2", " ' c #A0A0A0", " ] c #9E9E9E", " [ c #E7E6E2", " { c #F7F6F5", " } c #E5E4E0", " | c #F5F4F3", ". c #F4F4F2", ".. c #E3E2DE", ".X c #F2F2F0", ".o c #868686", ".O c #727272", ".+ c #707070", ".@ c #5F5E5C", ".# c #6E6E6E", ".$ c #666666", ".% c #646464", ".& c #606060", ".* c #5E5E5E", ".= c #585858", ".- c #545454", ".; c #E3E1DD", ".: c #505050", ".> c #F0EFED", "., c #4E4E4E", ".< c #DEDDD8", ".1 c #EEEDEB", ".2 c #ECEBE9", ".3 c #4A4A4A", ".4 c #EAE9E7", ".5 c #484848", ".6 c #464646", ".7 c #424242", ".8 c #F3F3F3", ".9 c #404040", ".0 c #646360", ".q c #3E3E3E", ".w c #EFEFEF", ".e c #3C3C3C", ".r c #EDEDED", ".t c #3A3A3A", ".y c #EBEBEB", ".u c #383838", ".i c #E9E9E9", ".p c #363636", ".a c #343434", ".s c #E5E5E5", ".d c #E1E1E1", ".f c #9A9A98", ".g c #2E2E2E", ".h c #504F4C", ".j c #DBDBDB", ".k c #929290", ".l c #262626", ".z c #D5D5D5", ".x c #CBCBCB", ".c c #C9C9C9", ".v c #B5B3B2", ".b c #FAFAF9", ".n c #E9E8E5", ".m c #C3C3C3", ".M c None", ".N c #403F3F", ".B c #BBBBBB", ".V c #DDDCD9", ".C c #060606", ".Z c #B7B7B7", ".A c #B3B3B3", /* pixels */ ".M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M", ".M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M", ".M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M", ".M.M.M.M.M.M.M.M.M.M.M.M .M.M.M.M.M.M.M.M.M.M", ".M.M.M.M.M.M.M.M.M.M.M R.c.- .M.M.M.M.M.M.M", ".M.M.M.M.M.M.M.M.M.M .b > |.X i r.6 .M.M.M", ".M.M.M.M.M.M.M.M.M U {. 4 s.2 Y [ 1 - .M.M.M", ".M.M.M.M.M.M.M.M.M K < 2 i.1 h.n ,.. _ .M.M.M.M", ".M.M.M.M.M.M.M .C ).X.> f.4 ; }.;.V.=.M.M.M.M.M", ".M.M.M.M.M I Q.f T.2 Y [ 1 u a 3 .M.M.M.M", ".M.M.M .x.i.r.i G.v.@.@ = t.< W.N.*.# .M.M", ".M.M :.Z.y k x c b m N.r.k M.h.0 E 0 j.g .M.M", ".M.M ^ / (.B.d.8.r b.w.y C A.i.z v L.p.t .M.M", ".M.M .A . X + ( + P.s.w m A b.j l V.e.u v .M.M", ".M.M 9 %.Z ! ~ / ` ' & P J.m.7 H S.q.9 B .M.M", ".M.M .$ l q $ o O + @ # * 6 D.l.t.e n.t S .M.M", ".M.M e e g.6.3.&.o ` ' ] 5 Z.t.e D V.e .M.M", ".M.M.M d.: y p.6 z., w 6 V B K S.a .M.M.M.M", ".M.M.M.M.M v e y.% 7 8.9 F Z .M.M.M.M.M", ".M.M.M.M.M.M.M.M .5.+.O.t.q .M.M.M.M.M.M.M", ".M.M.M.M.M.M.M.M.M.M.M .M.M.M.M.M.M.M.M", ".M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M", ".M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M", ".M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M" }; GabeditSrc250/pixmaps/Question.xpm0000644000175100017510000001360413130664665017524 0ustar alloucheallouche/* XPM */ static char* question_xpm[]={ "48 48 73 2", ".N c #715929", ".8 c #c09745", ".O c #b99344", "#f c #d2a64c", ".m c #f7e5c0", "#e c #ddbc74", ".4 c #977737", ".9 c #d8b163", ".Y c #bfa16a", ".u c #aa863e", "#. c #927c52", ".0 c #876a31", ".S c #997a3b", ".M c #d8be86", ".n c #f7d48c", ".r c #f7dca5", ".E c #d2a64d", ".L c #d2b06c", ".A c #80632d", ".g c #f7d899", ".h c #f7e2b8", ".v c #d8b66e", ".Z c #19150d", ".D c #a48b5a", ".j c #be9b53", "#a c #a68748", ".d c #9d7d3a", "#g c #705627", ".l c #f7dfaf", ".V c #dcc494", "#d c #221c12", ".t c #937435", "#c c #393939", ".p c #d8b15f", ".i c #d8ba7b", ".a c #a27f3b", ".b c #b89243", ".6 c #d8ac5b", ".o c #f7cf7e", ".5 c #d8b165", ".H c #dcb463", ".U c #c39f55", ".K c #8c6d31", ".# c #000000", ".3 c #7f6941", ".G c #654f24", ".P c #b38d40", ".k c #f7c35a", ".X c #c9ac73", ".c c #d8ab4e", ".q c #6e5526", ".z c #f7c96d", ".J c #c3a466", ".w c #bea363", ".C c #a38e55", ".1 c #c9a45b", ".f c #7c622d", ".2 c #c6a76a", "Qt c None", ".B c #c39f57", ".Q c #d8b56e", ".T c #6b5527", "#b c #1a1a1a", ".R c #d8ac58", ".W c #dab872", ".y c #927335", "## c #735f3b", ".e c #a6823c", ".I c #be9544", ".7 c #bea272", ".F c #82662f", ".x c #947536", ".s c #a8843d", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.#.#.#.#.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.#.a.b.c.d.e.f.#.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.c.g.g.h.g.i.i.i.j.e.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.k.l.m.g.n.k.k.k.o.i.p.e.q.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.k.l.r.k.s.t.t.u.k.k.o.v.p.e.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.w.g.h.k.x.#.#.#.#.y.k.k.z.p.p.A.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.z.m.o.x.#.#QtQtQt.#.B.k.o.c.p.e.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQt.#.C.n.l.c.#.#QtQtQtQt.#.D.k.z.p.c.e.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQt.#.E.o.k.e.#.#QtQtQtQt.#.D.z.z.v.c.F.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQt.#.k.o.k.e.#.#QtQtQtQt.#.D.k.v.v.c.G.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQt.#.H.p.I.F.#.#QtQtQtQt.#.J.z.i.c.e.#.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.#.#.#.#.#QtQtQtQt.K.L.M.p.c.N.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.#.#.#QtQtQtQt.#.O.n.M.c.I.#.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.P.z.M.c.c.#.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.k.n.Q.R.S.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.T.U.V.W.X.Y.Z.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.0.L.Q.1.2.3.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.4.i.5.6.7.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.8.i.9.6#..#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.c.M.p.c##.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.j.i.c.I.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.##a#a.e.A.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.##b#c.#.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt#d.#.#.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.##e.o.n.I.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.o.g.g.c.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.n.n.p.I.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.n.v.c.I.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.##f.p.I#g.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.#.#.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"}; GabeditSrc250/pixmaps/SaveMini.xpm0000644000175100017510000000446413130664665017434 0ustar alloucheallouche/* XPM */ static char* savemini_xpm[]={ "24 24 66 2", ".S c #f4f4f4", ".w c #e1e3dc", ".e c #c5d8dc", ".6 c #a7b4b6", ".4 c #d6dcdd", ".H c #e9e9e9", ".y c #060605", ".c c #629da8", ".Q c #5c8791", ".t c #e5eced", ".h c #f9f9f9", ".a c #d8be6a", ".M c #e6e6e6", ".C c #294249", ".b c #8e7d45", ".3 c #4b5c61", ".2 c #b8b8b8", ".V c #e3e3e3", ".N c #aab6b8", ".J c #cdd1d3", ".u c #c6b273", ".m c #8db6be", ".f c #a8c7cb", ".Z c #6da4ae", ".B c #9ec2c7", ".g c #e9eeef", ".0 c #dce0e0", ".Y c #1e2a2d", ".7 c #d9dbdc", ".x c #45676e", ".# c #000000", ".R c #c2c8c9", ".9 c #2b2b2b", ".z c #f1f3f4", "## c #859597", ".n c #d5e1e4", ".v c #756020", ".l c #212f32", ".1 c #e5e5e5", ".p c #e9eef0", ".I c #45494a", ".A c #36575f", ".G c #ededed", ".k c #b1cad0", ".8 c #7d8a8c", ".s c #ebf0f1", ".o c #9a918b", ".T c #3b5055", ".F c #a4adaf", "#. c #e2e2e2", ".L c #eaeaea", ".O c #2b464d", ".d c #2c3d42", ".E c #385c64", ".X c #828c8d", ".r c #edf2f2", ".K c #f2f2f2", ".W c #dfdfdf", "Qt c None", ".q c #647f82", ".i c #f0f2f3", ".D c #2e3b3d", ".j c #7aabb6", ".U c #d5dfe0", ".P c #18292d", ".5 c #ececec", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.a.#QtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQt.#.#QtQt.#.a.b.#QtQtQt", "QtQtQtQtQtQtQtQtQtQtQt.#.#.c.d.#.#.a.b.#QtQtQtQt", "QtQtQtQtQtQtQtQtQt.#.#.e.f.g.c.#.a.b.#QtQtQtQtQt", "QtQtQtQtQtQtQt.#.#.e.f.e.h.i.#.a.b.#QtQtQtQtQtQt", "QtQtQtQtQt.#.#.e.f.e.h.h.h.#.a.b.#QtQtQtQtQtQtQt", "QtQtQt.#.#.j.k.e.h.h.h.h.#.a.b.#.l.#QtQtQtQtQtQt", "QtQt.#.m.k.n.h.h.o.h.h.#.a.b.#.p.c.#QtQtQtQtQtQt", "QtQt.#.q.m.r.h.o.h.h.#.a.b.#.h.s.c.d.#QtQtQtQtQt", "QtQtQt.#.f.t.h.o.h.u.v.#.#.w.t.c.c.c.#QtQtQtQtQt", "QtQtQt.#.x.j.r.h.o.y.#.z.t.c.c.A.A.c.d.#QtQtQtQt", "QtQtQtQt.#.B.t.h.o.z.t.c.c.C.D.E.c.A.c.#QtQtQtQt", "QtQtQtQt.#.x.j.s.t.c.c.C.F.G.H.I.c.A.c.d.#QtQtQt", "QtQtQtQtQt.#.m.c.c.A.J.K.K.L.M.N.O.c.C.P.#QtQtQt", "QtQtQtQtQt.#.Q.j.c.R.S.T.U.H.V.W.X.c.l.#.#QtQtQt", "QtQtQtQtQtQt.#.m.c.A.K.Y.Z.0.1.2.3.#.#QtQtQtQtQt", "QtQtQtQtQtQt.#.E.c.c.4.5.6.7.8.9.#QtQtQtQtQtQtQt", "QtQtQtQtQtQtQt.#.O.c.A#.##.#.#QtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQt.#.#.#.#.#QtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"}; GabeditSrc250/pixmaps/Book_close.xpm0000644000175100017510000000073213130664665017772 0ustar alloucheallouchestatic char *book_close_xpm[] = { "16 16 7 1", "d c #808080", "c c #e3e3e3", "a c #bdbdbd", "# c #9494ff", "b c #6363ce", "e c #ceceff", ". c None", "................", "................", "...#####........", "..#a#a#a#.......", ".#a#a#a#abbbbbb.", ".#ccccccccccccb.", ".#c#a#a#a#a#a#bd", ".#caeaeaeaeaeabd", ".#c#a#a#a#a#a#bd", ".#caeaeaeaeaeabd", ".#c#a#a#a#a#a#bd", ".#caeaeaeaeaeabd", ".bbbbbbbbbbbbbbd", "..dddddddddddddd", "................", "................"}; GabeditSrc250/pixmaps/RotateZ.xpm0000644000175100017510000000141613130664665017303 0ustar alloucheallouche/* XPM */ static char *rotatez_xpm[]={ "24 24 4 1", ". c None", "# c #000000", "b c #ff0000", "a c #ffffff", "........................", "........................", "........................", ".........#..............", "........#...............", ".......#######..........", "........#.....##........", ".........#.....##.......", ".................#......", ".................#......", "...#......aa.....#......", "...#......bb......#.....", ".........bbaa.....#.....", "...#.....bbaa.....#.....", "...#......bb......#.....", "....#.............#.....", "....#............#......", "....#...........##......", ".....##.........#.......", "......##.....###........", "........##.##...........", "........................", "........................", "........................"}; GabeditSrc250/pixmaps/Orbitals.xpm0000644000175100017510000000562713130664665017502 0ustar alloucheallouche/* XPM */ static char *orbitals_xpm[] = { /* width height num_colors chars_per_pixel */ " 24 24 98 2", /* colors */ ".. c None", ".# c #000420", ".a c #000429", ".b c #000431", ".c c #000439", ".d c #000441", ".e c #00044a", ".f c #00045a", ".g c #000462", ".h c #00046a", ".i c #000473", ".j c #00047b", ".k c #000483", ".l c #00048b", ".m c #000494", ".n c #0004a4", ".o c #0004ac", ".p c #0004b4", ".q c #0004bd", ".r c #0004c5", ".s c #080829", ".t c #080831", ".u c #080839", ".v c #080841", ".w c #08084a", ".x c #08085a", ".y c #080862", ".z c #08086a", ".A c #080883", ".B c #08088b", ".C c #080894", ".D c #08089c", ".E c #0808a4", ".F c #0808ac", ".G c #0808b4", ".H c #0808bd", ".I c #0808c5", ".J c #0808cd", ".K c #080cac", ".L c #1010c5", ".M c #1014c5", ".N c #1818de", ".O c #1818e6", ".P c #200808", ".Q c #2020de", ".R c #290400", ".S c #2928ee", ".T c #310400", ".U c #310808", ".V c #390808", ".W c #3938de", ".X c #3938e6", ".Y c #393ce6", ".Z c #410400", ".0 c #410808", ".1 c #4a0400", ".2 c #4a0808", ".3 c #520400", ".4 c #520808", ".5 c #5a0400", ".6 c #5a0808", ".7 c #620400", ".8 c #620808", ".9 c #6a0400", "#. c #730400", "## c #730808", "#a c #7b0400", "#b c #7b0808", "#c c #830400", "#d c #830808", "#e c #8b0400", "#f c #8b0808", "#g c #940400", "#h c #9c0400", "#i c #9c0808", "#j c #a40400", "#k c #a40808", "#l c #ac0400", "#m c #ac0808", "#n c #ac0c08", "#o c #b40400", "#p c #b40808", "#q c #bd0400", "#r c #bd0808", "#s c #c50400", "#t c #c50808", "#u c #c50c08", "#v c #cd0808", "#w c #cd1818", "#x c #d51410", "#y c #de1410", "#z c #de2420", "#A c #de3031", "#B c #de3431", "#C c #e62829", "#D c #e62c29", "#E c #ee4041", "#F c #f65d5a", /* pixels */ "................................................", "................................................", "................................................", "................................................", ".................t.x.f.w.....4.6.1..............", "...............f.A.B.m.B.u.Z#d#i#e##.0..........", ".............f.l.n.o.p.o.i.1#h#o#l#h#a.Z........", "...........e.j.n.p.r.J.q.j.1#j#s#s#o#h.9........", "...........y.C.o.I.Q.S.Q.B.Z#n#D#z#r#m#c.V......", ".........T.z.C.o.I.M.W.L.A.Z#n#w#u#r#k#c.0......", ".........3.f.h.k.k.j.j.i.g.3#a#a#a#.#..7.R......", ".........1#j.c.c.Z.9.9.7.T.b.e.h.h.g.b.R........", "...........2###g#p#r#t#t#f.b.C.I.q.G.D.i........", "...........5#e#l#s#A#E#C#h.b.K.X.Y.r.o.l.e......", ".........a.7#g#l#s#B#F#y#h.b.F.O.N.r.o.l.e......", ".........c.8#f#l#r#v#x#v#k.b.D.J.J.H.E.k.v......", ".........#.0#b#g#m#r#q#r#d.c.D.H.p.F.C.h........", "...........i.3#a#g#j#l#h.9.d.l.n.n.m.i.d........", ".............l.1#.#a#c#a.Z.c.i.k.j.h.d..........", ".............s.j.U.4.5.4.P#e.w.x.e.8............", ".................v.y.f.....T.6.4................", "................................................", "................................................", "................................................" }; GabeditSrc250/pixmaps/Ok.xpm0000644000175100017510000000246213130664665016266 0ustar alloucheallouche/* XPM */ static char *ok_xpm[] = { /* width height num_colors chars_per_pixel */ " 20 20 47 1", /* colors */ ". c #000000", "# c #0e0f0d", "a c #10120f", "b c #383c34", "c c #393e35", "d c #3e4339", "e c #40453c", "f c #41473d", "g c #42483e", "h c #4c5247", "i c #4e5549", "j c #4f564a", "k c #51574b", "l c #52594c", "m c #555d50", "n c #575e51", "o c #585f52", "p c #5b6255", "q c #606859", "r c #616a5b", "s c #636b5c", "t c #687161", "u c #6a7363", "v c #707a69", "w c #727c6a", "x c #798371", "y c #7b8572", "z c #7c8774", "A c #7e8875", "B c #818c79", "C c #838e7a", "D c #8a9580", "E c #8f9b85", "F c #909c87", "G c #929e88", "H c #94a08a", "I c #95a28b", "J c #97a48d", "K c #99a68e", "L c #9ca992", "M c #9eab93", "N c #aab89e", "O c #adbba1", "P c #b2c1a6", "Q c #b6c6aa", "R c None", "S c #d5e7c7", /* pixels */ "RRRRRRRRRRRRRRRRRRRR", "RRRRRRRRRRRaaaaaaaRR", "RRRRRRRRRR.QQQOMMIaR", "RRRRRRRRRRaQSLIIIAaR", "RRRRRRRRRRaQQIIIIAaR", "RRRRRRRRRRaQIIHIIAaR", "RRRRRRaRRRaQIMIIIAaR", "RRRRRayaRRaQIIIIIAaR", "RRRRaQsaaaaQIIICrvaR", "RRRaQNynnnorstxJPoaR", "RRaQJIIIIJJJJKIwgaRR", "RaQKIIIIIIIIIDqfaRRR", "aQLJIIIIIIIIBpeaRRRR", "RaiFIIIIIIIzmdaRRRRR", "RRaiGIIIIHzlcaRRRRRR", "RRRahFEzyujcaRRRRRRR", "RRRRakj#aaaaRRRRRRRR", "RRRRRabaRRRRRRRRRRRR", "RRRRRRaRRRRRRRRRRRRR", "RRRRRRRRRRRRRRRRRRRR" }; GabeditSrc250/pixmaps/Mopac.xpm0000644000175100017510000000140313130664665016746 0ustar alloucheallouche/* XPM */ static char * mopac_xpm[] = { "24 24 3 1", "a c #005555", "b c #303030", ". c #ff5500", "........................", "....bbb.....bbb.........", "....bb.b...b.bb.........", "....bb..b.b..bb.........", "....bb...b...bb.........", "....bb.......bb.........", "....bb.......bb.........", "........................", "...........bbbbbb.......", ".........bb......bb.....", "........bb........bb....", ".......bb..........bb...", "........bb........bb....", ".........bb......bb.....", "...........bbbbbbb......", "........................", "..............bbbbbbbb..", "..............bb.....bb.", "..............bb......bb", "..............bb.....bb.", "..............bbbbbbbb..", "..............bb........", "..............bb........", "..............bb........"}; GabeditSrc250/pixmaps/Zoom.xpm0000644000175100017510000000141613130664665016637 0ustar alloucheallouche/* XPM */ static char * zoom_xpm[] = { "24 24 4 1", " c None", ". c #000000", "+ c #FFFFFF", "@ c #C0C0C0", " ", " ........ ", " .......... ", " ... .. ", " ... .. ", " .. .. ", " .. .. ", " .. .. ", " .. + .. ", " .. + .. ", " .. + .. ", " .. ++ .. ", " .. +++ .. ", " .. +++ .. ", " ..@+++++ ... ", " .. ..... ", " .............. ", " ....... ..... ", " ..... ", " ..... ", " .... ", " ... ", " ", " "}; GabeditSrc250/pixmaps/DeleteCut.xpm0000644000175100017510000000127413130664665017573 0ustar alloucheallouche/* XPM */ static char *delete_cut_xpm[]={ "22 22 5 1", ". c None", "# c #000000", "c c #808080", "b c #aa0000", "a c #ffffff", ".......######.........", ".......#a#aaa#........", "......#aaa#aaa#.......", ".....#aaaaa#aaa#......", "....#aaaaaaa###a##....", "...#aaaaaaaa#aaa#.....", "..#aaaaaaaa#aaa#......", ".##aaaaaaa#aaa#..b....", "..##aaaaa#aaa#.bb.....", "....#aaa#aaa#.bb......", ".....#ccca##.bb.......", ".....#ccccc.bb........", "...bbbb....bb.....bbb.", "..b...bb..bb...bbbb...", "..b...bbbbbbbbbbb.....", "...bbbb...bbbb........", ".........bb...........", "........bbb...........", ".......b..b...........", "......b...b...........", "......b..b............", "......bbb............."}; GabeditSrc250/pixmaps/Stop.xpm0000644000175100017510000000135513130664665016642 0ustar alloucheallouche/* XPM */ static char *stop_xpm[]={ "24 24 2 1", ". c None", "# c #ff0000", "........######..........", "......###########.......", ".....#############......", "...#################....", "...#################....", "..###################...", ".#####################..", ".#####################..", ".######################.", "#######################.", "#######################.", "#######################.", "#######################.", "#######################.", "#######################.", ".#####################..", ".#####################..", "..###################...", "..##################....", "...#################....", ".....#############......", "......###########.......", ".........######.........", "........................"}; GabeditSrc250/pixmaps/NWChemMini.xpm0000644000175100017510000000457613130664665017663 0ustar alloucheallouche/* XPM */ static char * nwchem_mini_xpm[] = { "14 16 116 2", " c #FAFAFA", ". c #F4F5F1", "+ c #DEE4D4", "@ c #D4DCC6", "# c #ECEFE9", "$ c #C5D1B2", "% c #AABC8C", "& c #91A96A", "* c #749244", "= c #61842A", "- c #5C8022", "; c #5B7F21", "> c #64862D", ", c #89A360", "' c #B5C59C", ") c #DFE5D5", "! c #F8F8F7", "~ c #BBC6B5", "{ c #436427", "] c #527523", "^ c #5D8123", "/ c #769541", "( c #B7CA96", "_ c #C6CFC1", ": c #3C5C29", "< c #426327", "[ c #517324", "} c #5B7E21", "| c #5E8222", "1 c #658C26", "2 c #6D952A", "3 c #759E2E", "4 c #78A22F", "5 c #9FBD6D", "6 c #CDD4C8", "7 c #416128", "8 c #628828", "9 c #739B2C", "0 c #9BB76B", "a c #98B860", "b c #78A230", "c c #A9C37C", "d c #D4DBD1", "e c #678E2D", "f c #79A330", "g c #8FA765", "h c #9AB36D", "i c #799D39", "j c #B4CB8D", "k c #DEE2DB", "l c #3D5D2A", "m c #92B05E", "n c #7FA045", "o c #86A158", "p c #BCD09A", "q c #E3E7E0", "r c #3E5E2B", "s c #96AD6F", "t c #94AE67", "u c #759D2F", "v c #C5D6A8", "w c #E7EAE5", "x c #3F5F2D", "y c #96B65C", "z c #FBFCF9", "A c #95AB6F", "B c #D0DDB8", "C c #F1F2F0", "D c #536F43", "E c #D4E1BC", "F c #E4E6E1", "G c #759B31", "H c #DAE4C8", "I c #E2E6E1", "J c #617952", "K c #7DA536", "L c #F7FAF3", "M c #A0B281", "N c #81A83D", "O c #E8EEDE", "P c #F9F9F9", "Q c #D5D4D7", "R c #B9B9BC", "S c #718367", "T c #81A640", "U c #769F2F", "V c #80A541", "W c #ABBD8C", "X c #EFF2EB", "Y c #DEDDDF", "Z c #BDBCC0", "` c #8A9685", " . c #405F2D", ".. c #85A74B", "+. c #A4B28C", "@. c #BABABC", "#. c #BEBDC1", "$. c #D9D8DA", "%. c #E7E7E8", "&. c #C0BFC3", "*. c #9FA69D", "=. c #829C5D", "-. c #AAB499", ";. c #BCBBBE", ">. c #BFBEC2", ",. c #D7D6D9", "'. c #F2F2F2", "). c #EFEFF0", "!. c #C5C4C7", "~. c #BCBBBF", "{. c #C1C0C4", "]. c #DADADC", "^. c #F4F4F5", "/. c #F5F5F5", "(. c #E1E1E2", "_. c #F6F6F7", " . + @ . ", "# $ % & * = - ; > , ' ) ! ", "~ { ] ; ; ; ; ; ; ; ; ^ / ( ", "_ : : < [ } ; ; | 1 2 3 4 5 ", "6 : : : : 7 8 9 4 4 0 a b c ", "d : : : : : e 4 4 f g h i j ", "k l : : : : e 4 4 m n o 4 p ", "q r : : : : e 4 4 s t u 4 v ", "w x : : : : e 4 y z A 4 4 B ", "C D : : : : e 4 E F G 4 4 H ", " I J : : : e K L M 4 4 N O ", "P Q R S : : e 4 T U V W X ", " P Y Z ` .e 4 ..+.@.#.$.P ", " %.&.*.=.-.;.>.,.'. ", " ).!.~.{.].^. ", " /.(._. "}; GabeditSrc250/pixmaps/ConvertUnit24.xpm0000644000175100017510000000147513130664665020346 0ustar alloucheallouche/* XPM */ static char *convert_unit_xpm[]={ "24 24 7 1", "e c None", ". c None", "d c #000000", "a c #0000c0", "b c #008000", "c c #00ffff", "# c #ff0000", "...........##aabbccbbbdd", "...........##aabbccbbdbb", "...........##aabbccbdbbb", "...........##aabbccdbbbb", "...........##aabbcdccccc", "...........##aabbdcccccc", "...........##aabdbbbbbbb", "...........##aadbbbbbbbb", "...........##adaaaaaaaaa", "...........d#daaaaaaaaaa", "...........dd###########", "...........ddd##########", "...........eeeeeeeeeeeee", "########ddd.............", "#########dd.............", "aaaaaaaad#d.............", "aaaaaaada##.............", "bbbbbbdaa##.............", "bbbbbdbaa##.............", "ccccdbbaa##.............", "cccdcbbaa##.............", "bbdccbbaa##.............", "bdbccbbaa##.............", "dbbccbbaa##............."}; GabeditSrc250/pixmaps/Molcas.xpm0000644000175100017510000001004613130664665017130 0ustar alloucheallouche/* XPM */ static char * molcas_xpm[] = { "22 22 189 2", "Qt c None", "aQ c #000165", "#J c #010065", ".Z c #010066", "#k c #010067", "## c #010165", ".O c #010166", "#l c #020163", "#d c #020164", ".Y c #020166", "aA c #020266", "aR c #020362", ".9 c #030264", "aP c #030364", "aw c #040366", ".c c #050463", "#A c #050464", "#i c #050564", ".U c #060462", "#4 c #060464", ".A c #060560", "#s c #060564", ".f c #060565", "#v c #07075f", "#n c #0a0968", "aB c #0b0a65", "a1 c #0b0c58", "#o c #0d0c67", ".J c #0d0d5f", "#0 c #0e0e57", "av c #0e0e67", ".7 c #0f0e59", ".Q c #0f0e68", ".1 c #100f58", "#K c #111158", "a0 c #121260", "#c c #131366", "ad c #131368", ".5 c #14125d", ".T c #15156a", "aW c #151652", ".i c #161658", "ag c #171655", ".R c #171767", ".l c #1a1b57", ".N c #1f1e6f", "#e c #1f1f6b", ".F c #20206a", ".y c #20215f", "#C c #21215e", "aq c #222159", ".W c #232371", "aS c #24234d", "#H c #26255d", "#Z c #26256c", "aD c #26266d", "aV c #272663", "ah c #27274c", "aa c #28285a", "az c #29286a", "al c #2a295d", "ap c #2e2d62", "a. c #2e2d64", ".s c #2e2e5f", "ac c #2f2e64", "#h c #30305b", ".2 c #38394f", "#8 c #383964", "ax c #393874", ".H c #3c3a63", "#q c #3e3d5e", ".u c #3f3e6a", ".o c #403f5e", ".C c #404075", "aL c #414156", "af c #414264", "aO c #424166", "ab c #43444c", "#X c #444353", "ay c #44436c", "aC c #48477b", "a2 c #494a4f", "#T c #4c4c66", "ai c #4e4e57", ".8 c #4f4e5c", ".r c #4f4f65", ".4 c #504f61", "ar c #505073", ".n c #53537f", "ao c #535472", "au c #545475", ".m c #555370", ".3 c #55555c", ".t c #56567f", "#y c #575664", ".I c #575672", "an c #575878", "aj c #595a72", "#7 c #5a597c", ".P c #5c5b67", ".D c #5c5c69", "#U c #5d5e7d", ".B c #5f5d64", "aE c #5f5e73", "#D c #5f5f7a", "#5 c #64656f", ".w c #666671", ".G c #666675", "aX c #676758", ".0 c #686869", "a5 c #686966", "#w c #696870", "#P c #696a71", ".S c #6a6b7c", ".K c #6b6a74", "as c #6b6a83", "#G c #6b6c84", ".E c #6d6c78", "aG c #6e6e76", "#M c #70716c", "#b c #727275", "#F c #72727c", "aH c #727462", ".v c #757476", "#S c #757684", ".V c #767679", ".6 c #797979", "#Q c #797a6d", ".p c #7c7c78", "aZ c #7c7d78", "#N c #7d7b77", "#x c #7d7e7c", ".h c #7e7e91", ".z c #7f7e7a", "#L c #848482", ".L c #858591", "#a c #878872", "aK c #898a79", "ak c #8a8881", "am c #8b8b79", "#m c #8c8c79", "aT c #8d8b6b", "#V c #8e8e87", "#f c #8e8f86", "aI c #90907a", ".j c #949382", "#6 c #95947f", "ae c #98978b", "#B c #999983", "#3 c #9c9a8a", "a6 c #9c9d75", ".g c #9e9d8d", "#E c #a0a099", "aU c #a1a184", ".x c #a2a199", "#R c #a2a384", "#g c #a3a38a", ".M c #a5a59c", ".q c #a8a79d", "#1 c #a8a880", "at c #a8a986", "#Y c #acac97", ".b c #acaca0", ".X c #adac9e", "#j c #afb087", "#2 c #b0af8f", "#O c #b0af95", "a3 c #baba87", "#9 c #bbba98", "aJ c #bdbd99", ".# c #c1c0a6", ".d c #c1c198", ".k c #c3c1a7", "#p c #c3c49f", "#z c #c4c4a0", "aN c #c9c899", "#. c #c9c89b", "#t c #cecdac", "a# c #cecea1", "aM c #d0d098", "#u c #d1d1ac", "aY c #d3d39a", "a4 c #d5d4a0", "#r c #d7d8a9", "#W c #d8d79f", ".a c #d8d7ad", ".e c #e1e0b2", "#I c #e1e2a8", "aF c #e3e3a9", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQt.aQtQt.b.c.dQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQt.e.f.gQt.h.i.jQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQt.k.l.mQt.n.o.pQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQt.q.r.s.t.u.v.wQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQt.x.y.z.A.B.C.DQtQtQtQtQtQtQtQtQtQtQt", "QtQtQt.h.E.F.G.H.I.J.K.LQtQtQtQtQtQtQtQtQtQt", "Qt.M.N.O.P.Q.R.S.T.U.V.O.W.XQtQtQtQtQtQtQtQt", "Qt.Y.Z.Z.0.1.2.3.4.5.6.7.8.9#.QtQtQtQtQtQtQt", "Qt.O.Z###a#b#c#d#e#f#g#hQt#i#jQtQtQtQtQtQtQt", "Qt.O#k#l#m#n.Z#k#k#o#p#q#r#s#j#tQtQtQtQt#uQt", "Qt.O.Z#v#w#k.Z.Z.Z.O#x#y#z#A#B#C#D#E#F#G#H#I", "Qt.O#J#K#L.O.Z.Z.Z#k#M#N#O#A#P#Q#R#S#T#U#V#W", "Qt.O#d#X#Y#Z.Z.Z.Z#0#1#2#3#4#5#6Qt#7#8#9a.a#", "QtaaabacadaeafagahaiajQtakalamanaoapaqarasat", "Qtauav.Z.ZawaxayazaAaBaCaDaEaFaGaHaIaJaKaLaM", "QtaNaOaP.Z.Z.Z.Z.Z.ZaQaRaSaTQtQtQtQtQtQtQtQt", "QtQtQtaUaV.Z.Z#k#k##aWaXaYQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtaZa0.Oa1a2a3QtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQta4a5a6QtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"}; GabeditSrc250/pixmaps/ScaleBall.xpm0000644000175100017510000000140513130664665017533 0ustar alloucheallouche/* XPM */ static char * scale_ball_xpm[] = { "24 24 3 1", "# c #0000c0", ". c None", "a c #c00000", "........................", "........#######.........", "......###########.......", ".....#############......", "....#######aa######.....", "...######aaaaaa#####....", "..#####aaaa##aa######...", "..#####aa############...", ".######aa#############..", ".######aaa############..", ".########aa###########..", ".#########aaa#########..", ".###########aa########..", ".############aaa######..", ".#############aa######..", "..############aa#####...", "..######aa##aaaa#####...", "...#####aaaaaa######....", "....######aa#######.....", ".....#############......", "......###########.......", "........#######.........", "........................", "........................"}; GabeditSrc250/pixmaps/Translate.xpm0000644000175100017510000000142313130664665017646 0ustar alloucheallouche/* XPM */ static char * translate_xpm[] = { "24 24 4 1", " c None", ". c #000000", "+ c #FFFFFF", "@ c #FF0000", " . ", " ... ", " . . . ", " . ", " . ", " . ", " . ", " . ", " ", " . ++ . ", " . @@ . ", "........ @@++ ........ ", " . @@++ . ", " . @@ . ", " ", " ", " . ", " . ", " . ", " . ", " . . . ", " ... ", " . ", " "}; GabeditSrc250/pixmaps/OrcaMini.xpm0000644000175100017510000000541413130664665017416 0ustar alloucheallouche/* XPM */ static char * orca_mini_xpm[] = { "16 16 137 2", " c #FFFFFF", ". c #F6F6F6", "+ c #CBCBCB", "@ c #BDBDBD", "# c #E4E4E4", "$ c #F8F8F8", "% c #CACACA", "& c #C1C1C1", "* c #D9D9D9", "= c #EFEFEF", "- c #A8A8A8", "; c #525252", "> c #6B6B6B", ", c #5D5D5D", "' c #DDDDDD", ") c #444444", "! c #626262", "~ c #535353", "{ c #DFDFDF", "] c #616161", "^ c #909090", "/ c #E8E8E8", "( c #A3A3A3", "_ c #1A1A1A", ": c #A2A2A2", "< c #E1E1E1", "[ c #404040", "} c #B3B3B3", "| c #3A3A3A", "1 c #6E6E6E", "2 c #474747", "3 c #F0F0F0", "4 c #FBFBFB", "5 c #5A5A5A", "6 c #686868", "7 c #5F5F5F", "8 c #8E8E8E", "9 c #D6D6D6", "0 c #393939", "a c #BEBEBE", "b c #666666", "c c #B9B9B9", "d c #3C3C3C", "e c #D5D5D5", "f c #252525", "g c #515151", "h c #333333", "i c #C3C3C3", "j c #4D4D4D", "k c #7D7D7D", "l c #555555", "m c #AEAEAE", "n c #808080", "o c #434343", "p c #8B8B8B", "q c #707070", "r c #CFCFCF", "s c #F5F5F5", "t c #FEFEFE", "u c #FDFDFD", "v c #929292", "w c #545454", "x c #505050", "y c #828282", "z c #C4C4C4", "A c #FDFEFE", "B c #FDFCFD", "C c #F9F9F9", "D c #A9A9A9", "E c #373737", "F c #757575", "G c #303030", "H c #FCFDFD", "I c #B2B3B4", "J c #6D6F6E", "K c #585858", "L c #414141", "M c #3D3D3D", "N c #494949", "O c #6D6D6D", "P c #848484", "Q c #FBFCFB", "R c #D6D7DA", "S c #3E4B54", "T c #525556", "U c #9D9D9D", "V c #F7F7F7", "W c #C3C6C7", "X c #AFC2C4", "Y c #BFC5C6", "Z c #3F3F3F", "` c #3E3E3E", " . c #2F2F2F", ".. c #424242", "+. c #F1F2F3", "@. c #68808A", "#. c #749FAC", "$. c #656B6C", "%. c #3B3B3B", "&. c #3D3E3D", "*. c #363534", "=. c #1E1F1F", "-. c #36393B", ";. c #5F6667", ">. c #E2E5E5", ",. c #FBFDFB", "'. c #D8DDDE", "). c #94A2A7", "!. c #292B2C", "~. c #3E3F3E", "{. c #464547", "]. c #363B3C", "^. c #5E6C71", "/. c #8FA4AB", "(. c #8B989C", "_. c #CCD7D7", ":. c #FDFEFC", "<. c #DCE1E3", "[. c #A9C3C9", "}. c #426A77", "|. c #3B484F", "1. c #878E93", "2. c #68848C", "3. c #71828A", "4. c #B0BCC0", "5. c #D1D7D8", "6. c #E9EEEF", "7. c #FCFEFE", "8. c #F9FBFA", "9. c #ECF0F0", "0. c #C6DCDF", "a. c #E7F6F8", "b. c #C8C8C9", "c. c #EFEFF1", "d. c #FFFEFE", "e. c #FEFFFF", "f. c #FFFEFF", " ", ". + @ # $ % & * # @ + $ = & . ", "- ; > , ' ) ! ~ { ] > ^ / ( _ @ ", "; : < [ } | 1 2 } [ 3 $ 4 5 , 6 ", "7 8 9 0 a 0 b ~ c d { 3 e f g h ", "i j ) k < l * ! m n o 6 p q r ! ", " 4 s t t t t u r v w x y z t ", " t t t A B C D 2 E j F G g t ", " t t H I J K E L M N O P @ t ", " A Q R S T 0 L L L , U + V t ", " u W X Y Z L ` .0 ..e t t t ", " +.@.#.$.%.&.*.=.-.;.>.t t t ", " ,.'.).!.~.{.].^./.(._.t t ", " :.<.[.}.|.1.2.3.4.5.6.t u ", " t 7.8.9.0.a.4 b.c.d.t t ", " e.t A f. "}; GabeditSrc250/pixmaps/CutBond.xpm0000644000175100017510000000123413130664665017247 0ustar alloucheallouche/* XPM */ static char *cut_bond_xpm[]={ "22 22 3 1", ". c None", "a c #000000", "# c #aa0000", "......................", "......................", "......................", "......................", ".................#....", "...............##.....", "..............##......", "..aaaaaaaaaaa##aaaaaaa", "..aaaaaaaaaa##aaaaaaaa", "...####....##.....###.", "..#...##..##...####...", "..#...###########.....", "...####...####........", ".........##...........", "........###...........", ".......#..#...........", "......#...#...........", "......#..#............", "......###.............", "......................", "......................", "......................"}; GabeditSrc250/pixmaps/Book_parent.xpm0000644000175100017510000000073313130664665020157 0ustar alloucheallouchestatic char *book_parent_xpm[] = { "16 16 7 1", "d c #808080", "c c #e3e3e3", "a c #bdbdbd", "# c #9494ff", "b c #6363ce", "e c #ceceff", ". c None", "................", "................", "...#####........", "..#a#a#a#.......", ".#a#a#a#abbbbbb.", ".#ccccccccccccb.", ".#c#a#a#a#a#a#bd", ".#caeaeaeaeaeabd", ".#c#a#a#a#a#a#bd", ".#caeaeaeaeaeabd", ".#c#a#a#a#a#a#bd", ".#caeaeaeaeaeabd", ".bbbbbbbbbbbbbbd", "..dddddddddddddd", "................", "................"}; GabeditSrc250/pixmaps/Driver.xpm0000644000175100017510000000072613130664665017151 0ustar alloucheallouchestatic char *driver_xpm[] = { "16 16 7 1", "c c #e3e3e3", "a c #bdbdbd", "# c #949494", "b c #636363", "e c #cecece", "r c #ff0000", ". c None", "................", "................", "................", "................", "..#bbbbbbbbbbbb.", ".#caeaeaeaeaeac#", ".#caaaaaaaarrac#", ".#caaaaaaaaaaac#", ".#caaaaaaaaaaac#", ".#abbbbbbbbbbba#", ".#caeaeaeaeaeae.", "..bbbbbbbbbbbbb.", "................", "................", "................", "................"}; GabeditSrc250/pixmaps/Hide.xpm0000644000175100017510000000153113130664665016562 0ustar alloucheallouche/* XPM */ static char *hide_xpm[]={ "24 24 9 1", "c c #000000", "a c #1b1b1b", "d c #1c1c1c", "b c #606060", "# c #6d6d6d", "g c #6e6e6e", "f c #898989", "e c #a4a4a4", ". c #c0c0c0", "........................", "........................", "........................", "........................", "........................", "....#aaaa......aaaa#....", "....bcddd......dddcb....", "....bc............cb....", "....bc............cb....", "....bc............cb....", "....ef............fe....", "........................", "........................", "....ef............fe....", "....bc............cb....", "....bc............cb....", "....bc............cb....", "....bcaaa......aaacb....", "....gdddd......ddddg....", "........................", "........................", "........................", "........................", "........................"}; GabeditSrc250/pixmaps/AdjustH.xpm0000644000175100017510000000153513130664665017257 0ustar alloucheallouche/* XPM */ static char *adjust_h_xpm[]={ "24 24 9 1", "c c #000000", "a c #ff0000", "d c #1c1c1c", "b c #606060", "# c #6d6d6d", "g c #6e6e6e", "f c #898989", "e c #a4a4a4", ". c #c0c0c0", "........................", "........................", "........................", "........................", "........................", "....ccccc......ccccc....", "....ccccc......ccccc....", "....ccccc......ccccc....", ".aa.ccccc......ccccc....", "aaaaccccc......ccccc....", ".aa.cccccccccccccccc....", "....cccccccccccccccc....", "aaaaccccc......ccccc....", "....ccccc......ccccc....", "....ccccc......ccccc....", "....ccccc......ccccc....", "....ccccc......ccccc....", "....ccccc......ccccc....", "....ccccc......ccccc....", "........................", "........................", "........................", "........................", "........................"}; GabeditSrc250/pixmaps/RotateX.xpm0000644000175100017510000000141613130664665017301 0ustar alloucheallouche/* XPM */ static char *rotatex_xpm[]={ "24 24 4 1", ". c None", "# c #000000", "b c #ff0000", "a c #ffffff", "........................", "........................", ".........###............", "........#...#...........", ".......#.....#..........", ".....#.#.#...#..........", "......###.....#.........", ".......#......#.........", "..............#.........", "...............#........", "..........aa...#........", "..........bb...#........", ".........bbaa..#........", ".........bbaa..#........", "..........bb...#........", "...............#........", "...............#........", "...............#........", ".......#......#.........", ".......#......#.........", "........#.....#.........", ".........#...#..........", "..........###...........", "........................"}; GabeditSrc250/pixmaps/MolcasMini.xpm0000644000175100017510000000573013130664665017751 0ustar alloucheallouche/* XPM */ static char *molcas_mini_xpm[]={ "16 16 150 2", "Qt c None", "al c #9a997d", "ab c #cdcca2", ".H c #b1b0a4", ".x c #a8a8a0", ".a c #c2c1a8", ".f c #dddcb2", "ac c #848382", ".r c #a5a49c", ".l c #bab8a4", ".c c #adada1", ".# c #c1c0a7", "at c #9d9e76", "ar c #d5d4a1", ".y c #5e5e85", ".G c #70708b", "am c #7d7e79", ".b c #d8d7ad", ".i c #888890", ".T c #020267", "#s c #060666", "#I c #393965", ".I c #5c5b83", "#d c #767680", "as c #7d7d6f", "#c c #89898e", "#Y c #9e9e8c", "a# c #696a69", "#8 c #70706f", "#9 c #858672", "aa c #a9a986", "a. c #afb090", "ak c #b9b98d", "#f c #bcbd9e", "#7 c #b4b38f", ".S c #a4a392", ".o c #505079", "#Q c #57567a", "aq c #9b9b78", "#e c #949591", ".2 c #121263", ".e c #97968e", "ad c #81817c", ".F c #656586", "#E c #61607b", "#D c #8a8a7b", "#b c #969592", ".d c #7a7a8d", ".z c #636385", "ap c #4c4d5e", ".1 c #2b2b5a", "aj c #777768", "an c #6e6e7c", "ae c #1e1d65", ".h c #6b6a80", ".g c #959496", ".3 c #929284", "#A c #a3a18a", "#g c #010065", ".U c #010066", ".7 c #010067", "ag c #020166", "#4 c #030365", "#x c #040364", ".6 c #040367", ".8 c #050467", "#t c #070663", "ah c #080762", "#3 c #090966", "#y c #0a0a5f", "#0 c #0a0a65", "af c #0b0a66", ".V c #0c0c66", ".K c #0d0c67", "#1 c #0e0d69", ".4 c #0e0e65", "#w c #141369", "#h c #14145f", ".Q c #141462", "#2 c #171668", ".Y c #1d1c63", ".M c #1e1d5e", "#5 c #1e1e66", ".O c #201e63", "#K c #201f62", "ai c #27285e", "#N c #29285d", "#L c #2b2b6f", "#O c #2c2c59", ".D c #313068", ".u c #31306a", ".X c #323265", ".J c #333276", "#J c #34345c", "#u c #39385c", "#P c #3a3a68", "ao c #3a3b68", ".n c #3d3d65", ".L c #434365", ".C c #444369", ".B c #44446f", ".Z c #494970", "#M c #4b4b71", "#i c #4c4c73", "#B c #4d4b75", ".R c #4d4c76", "#R c #4f4e6e", ".p c #4f4e70", "#F c #4f4f6d", ".t c #4f506a", ".A c #515072", ".j c #515178", ".N c #52526a", ".E c #52526f", ".v c #53526d", "#6 c #545364", ".5 c #555571", "#U c #56566b", "#j c #56566f", "#l c #57567c", ".P c #5a5972", "#C c #5a5a6e", "#V c #5b5b70", ".w c #5c5c6e", "#T c #5e5f73", "#W c #616073", "#Z c #616177", "#q c #61617a", "#p c #626275", "## c #626282", "#n c #63636f", "#m c #646473", ".q c #6b6b71", "#. c #6b6b72", "#v c #6f6f83", ".W c #70706e", "#z c #727272", ".k c #767579", "#G c #76757f", ".s c #7a7a85", "#k c #817f7a", ".9 c #828388", ".m c #868589", "#o c #868788", "#a c #8a8a81", ".0 c #8b8b82", "#S c #909081", "#X c #9d9e85", "#H c #a7a790", "#r c #bab996", "QtQtQtQtQtQt.#.aQtQtQtQtQtQtQtQt", "QtQtQt.b.b.c.d.eQtQtQtQtQtQtQtQt", "QtQt.f.g.h.i.j.kQtQtQtQtQtQtQtQt", "QtQt.l.m.n.o.p.qQtQtQtQtQtQtQtQt", "QtQt.r.s.t.u.v.wQtQtQtQtQtQtQtQt", ".x.y.z.A.B.C.D.E.F.G.HQtQtQtQtQt", ".I.J.K.L.M.N.O.P.Q.R.SQtQtQtQtQt", ".T.U.V.W.X.Y.Z.0.1.2.3QtQtQtQtQt", ".T.U.4.5.6.7.8.9#.###a#b#c#d#e#f", ".T#g#h#i.U.U.U#j#k#l#m#n#o#p#q#r", "#s#t#u#v#w#x#y#z#A#B#C#D#E#F#G#H", "#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X", "#Y#Z#0.U#1#2#3#4#5#6#7#8#9a.a#aa", "abacadaeafagahaiajakalQtQtQtQtQt", "QtQtQtamanaoapaqQtQtQtQtQtQtQtQt", "QtQtQtQtarasatQtQtQtQtQtQtQtQtQt"}; GabeditSrc250/pixmaps/InsertFragment.xpm0000644000175100017510000000145013130664665020641 0ustar alloucheallouche/* XPM */ static char * insert_fragment_xpm[] = { "24 24 5 1", " c None", ". c #000000", "+ c #FF0000", "@ c #FFFF00", "f c #cc0000", " ", " ", " .. ", " .++. ", " ffffffffffff ..+++. ", " ffffffffffff .@@.++. ", " fff .@@@@.. ", " fff .@@@@@. ", " fff .@@@@@. ", " fff .@@@@@. ", " fff .@@@@@. ", " ffffffff.@@@@@. ", " fffffff.@@@@@. ", " fff .@@@@@. ", " fff .@@@@@. ", " fff .@@@@@. ", " fff ..@@@. ", " fff....@. ", " fff..... ", " ff.... ", " ff.. ", " f. ", " ", " "}; GabeditSrc250/pixmaps/QChem.xpm0000644000175100017510000000140313130664665016704 0ustar alloucheallouche/* XPM */ static char * qchem_xpm[] = { "24 24 3 1", "a c #00ffff", "# c #303030", ". c #58a8ff", "................#.......", "................##......", "..............###.#.....", ".............#.#...#....", "............#...#...#...", "...........#.....#...#..", "..........#.#..#..#.....", "...........#.##....#....", "........#...#.#...#.....", ".........#.###.#.#......", "......#...###.#.#.......", ".....#.....#...#........", ".....#......#...........", ".....#.......#..........", "......#.................", ".....#.#...#............", "..###...###.............", ".a...#..................", "a.....#.................", "a.....#.................", "a....###................", ".a..aa..................", "..aaa...................", "........................"}; GabeditSrc250/pixmaps/InsertAtom.xpm0000644000175100017510000000142513130664665020000 0ustar alloucheallouche/* XPM */ static char * insert_atom_xpm[] = { "24 24 4 1", " c None", ". c #000000", "+ c #FF0000", "@ c #FFFF00", " ", " ", " .. ", " .++. ", " ..+++. ", " .@@.++. ", " .@@@@.. ", " .@@@@@. ", " .@@@@@. ", " .@@@@@. ", " .@@@@@. ", " .@@@@@. ", " .@@@@@. ", " .@@@@@. ", " .@@@@@. ", " .@@@@@. ", " ..@@@. ", " ....@. ", " ..... ", " .... ", " .. ", " . ", " ", " "}; GabeditSrc250/pixmaps/MolproMini.xpm0000644000175100017510000000077513130664665020007 0ustar alloucheallouche/* XPM */ static char *molpro_mini_xpm[]={ "16 16 9 1", ". c None", "e c #1111ff", "d c #1212ff", "f c #1313ff", "c c #1414ff", "a c #98021e", "b c #9c0219", "g c #a2010e", "# c #aa0000", ".......##.......", "......#..##.....", ".....a....b.....", "....cd....ce....", "...ff.f..f..ff..", "..ffg.ff.f.#.f..", ".ff.#..ff..#.ff.", ".ff.#..ff..#.ff.", ".f..#..ff..#..f.", ".f..#...f..#..f.", ".f..#......#..f.", ".f..#......#..f.", ".f..#......#..f.", ".f..#......#..f.", ".f..#......#..f.", ".f............f."}; GabeditSrc250/pixmaps/ScaleDipole.xpm0000644000175100017510000000142613130664665020100 0ustar alloucheallouche/* XPM */ static char * scale_dipole_xpm[] = { "24 24 4 1", ". c None", "# c #800000", "a c #c00000", "b c #ff0000", "..................###...", ".................#####..", ".................#####..", ".................#####..", "...........aa...bb###...", ".........aaaaaabbb......", ".......aaaa..aabb.......", ".......aa....bbb........", ".......aa...bbb.........", ".......aaa.bbb..........", ".........aabb...........", ".........baaa...........", "........bbb.aa..........", ".......bbb...aaa........", "......bbb.....aa........", ".....bbb......aa........", "....bbb.aa..aaaa........", "...bbb..aaaaaa..........", "..bbb.....aa............", "..bb....................", "........................", "........................", "........................", "........................"}; GabeditSrc250/pixmaps/SelectAll.xpm0000644000175100017510000000144213130664665017562 0ustar alloucheallouche/* XPM */ static char * selectall_xpm[] = { "24 24 5 1", " c None", ". c #000000", "+ c #FFFFFF", "@ c #CCCCCC", "# c #CCCCFF", " .......... ", " .++++++++. ", " .+@@@@@@@. ", " .+@.......... ", " .+@.+++++@@@. ", " .+@.++++@....... ", " .+@.+++@..+++++. ", " .+@.++@.+.+++++. ", " .+@.+@....++##+. ", " .+@.+@.+++++##+. ", " .+@.+@.+++####+. ", " .+@.+@.++###..+. ", " .+@.+@.+####.... ", " ....+@.+####.... ", " .+@.+####..... ", " .+@.+####...... ", " ....+####....... ", " .+++++..... ", " ............ ", " . ... ", " ... ", " ... ", " .. ", " "}; GabeditSrc250/pixmaps/New.xpm0000644000175100017510000000147513130664665016451 0ustar alloucheallouche/* XPM */ static char * new_xpm[] = { "12 14 37 1", " c None", ". c #000000", "+ c #F0F0F0", "@ c #FFFFFF", "# c #CCCCCC", "$ c #F6F6F6", "% c #666666", "& c #F5F5F5", "* c #F7F7F7", "= c #F9F9F9", "- c #EEEEEE", "; c #FAFAFA", "> c #E6E6E6", ", c #DDDDDD", "' c #DBDBDB", ") c #F2F2F2", "! c #FCFCFC", "~ c #F4F4F4", "{ c #FBFBFB", "] c #E5E5E5", "^ c #F8F8F8", "/ c #F1F1F1", "( c #E7E7E7", "_ c #F3F3F3", ": c #EFEFEF", "< c #E1E1E1", "[ c #D8D8D8", "} c #EBEBEB", "| c #DFDFDF", "1 c #E8E8E8", "2 c #DADADA", "3 c #C9C9C9", "4 c #D3D3D3", "5 c #D2D2D2", "6 c #CDCDCD", "7 c #C7C7C7", "8 c #BDBDBD", " ........", " ..+@@@@#.", " .@.$@@@@%.", " .@#.&*=@@%.", ".....-@@;*%.", ".->,');!@~%.", ".@@+@@@{&]%.", ".@@^@@=/(>%.", ".@$&*_:(<[%.", ".@~$&}>|'[%.", ".@1](<2[#3%.", ".@<,'45678%.", ".#%%%%%%%%%.", "............"}; GabeditSrc250/pixmaps/Open.xpm0000644000175100017510000000153113130664665016612 0ustar alloucheallouche/* XPM */ static char * open_xpm[] = { "24 24 9 1", " c None", ". c #020204", "+ c #918571", "@ c #D6BF92", "# c #AAAEA7", "$ c #E6EBE3", "% c #776A50", "& c #D1B68C", "* c #A39371", " ", " ", " ", " ", " ", " ..... ", " ... ...#$$$..... ", " ...$#..#$$$...%*@@. ", " .$$$$$$$...%*@@@&@. ", " .#$$$...%*@@@@@@@&. ", " .+$$.%*@@@@@@@&@@&. ", " .$$.@@@@@@@@@@&&&. ", " .#$.@$@@@@@@@&@&&. ", " .+$.@@@@@@@@&&&&&. ", " .$.@@@@@@@&@&&+%. ", " .#.@@@@@@&&&+%.. ", " .+.@@@@&@+%... ", " ..@@@*%... ", " ..*%... ", " ... ", " ", " ", " ", " "}; GabeditSrc250/pixmaps/Dalton.xpm0000644000175100017510000000121613130664665017132 0ustar alloucheallouche/* XPM */ static char * dalton_xpm[] = { "22 22 2 1", " c None", ". c #0f0e68", " ", " ", " . . . .. ", " . . . . . ", " . . . . . ", " . .. . . ", " . . . . . ", " . . . . . . ", " .. .. .. .. .. .. ", " ", ". ", " . . . . .. . ", " . . . . . . ", " . . . . .. . ", " . . . . . . ", " . . . . .. ", " . . .. . .. ", " ", " ", " ", " ", " "}; GabeditSrc250/pixmaps/O.xpm0000644000175100017510000001174113130664665016113 0ustar alloucheallouche/* XPM */ static char * o_xpm[] = { "24 20 250 2", " c None", ". c #676600", "+ c #838200", "@ c #939200", "# c #ACAB00", "$ c #B0AF00", "% c #B2B200", "& c #B4B200", "* c #A7A600", "= c #9D9C00", "- c #757300", "; c #A9A800", "> c #C8C600", ", c #D9D700", "' c #E5E200", ") c #E7E400", "! c #E7E500", "~ c #E4E200", "{ c #CCCA00", "] c #BEBC00", "^ c #BFBD00", "/ c #575500", "( c #828000", "_ c #C1BF00", ": c #E1DE00", "< c #E6E300", "[ c #E8E400", "} c #E8E500", "| c #E9E500", "1 c #D3D000", "2 c #C5C200", "3 c #7F7C00", "4 c #BEBA00", "5 c #DBD700", "6 c #E1DC00", "7 c #E2DD00", "8 c #E2DE00", "9 c #DED900", "0 c #D0CB00", "a c #C9C500", "b c #6C6A00", "c c #BAB500", "d c #D6D000", "e c #DAD500", "f c #DBD600", "g c #DCD700", "h c #DBD500", "i c #D9D400", "j c #DDD800", "k c #5B5800", "l c #969100", "m c #CEC800", "n c #D4CE00", "o c #D5CF00", "p c #D4CD01", "q c #CEC806", "r c #CEC707", "s c #D2CC03", "t c #D5CE00", "u c #DED700", "v c #E6DF00", "w c #6F6B00", "x c #ACA500", "y c #CDC500", "z c #CEC700", "A c #CFC700", "B c #C8C106", "C c #A39D29", "D c #6E6A5A", "E c #6C685D", "F c #8F8B3B", "G c #C3BC0B", "H c #CEC600", "I c #D6CE00", "J c #E1D800", "K c #DDD400", "L c #797400", "M c #B6AE00", "N c #C7BE00", "O c #C8BF00", "P c #C3BB05", "Q c #837E43", "R c #28279A", "S c #25249C", "T c #292798", "U c #1D1CA4", "V c #6B675A", "W c #BBB20D", "X c #CCC400", "Y c #DAD000", "Z c #DCD200", "` c #878000", " . c #B9B000", ".. c #C0B700", "+. c #C1B800", "@. c #A79F1A", "#. c #322F8E", "$. c #373489", "%. c #9C9425", "&. c #A29A1E", "*. c #5A5665", "=. c #1E1CA2", "-. c #888239", ";. c #BFB503", ">. c #C6BC00", ",. c #DBD000", "'. c #E6DA00", "). c #867F00", "!. c #B4A900", "~. c #BAAF00", "{. c #BBB000", "]. c #898134", "^. c #1D1BA2", "/. c #797243", "(. c #BAB001", "_. c #BAB000", ":. c #9D941E", "<. c #201E9F", "[. c #5D5860", "}. c #B5AB06", "|. c #C0B600", "1. c #D7CA00", "2. c #E3D600", "3. c #837B00", "4. c #ABA000", "5. c #B3A800", "6. c #6D674B", "7. c #1C1AA2", "8. c #908727", "9. c #A59B10", "0. c #2D2A90", "a. c #4D486E", "b. c #ADA207", "c. c #BFB300", "d. c #DBCD00", "e. c #E5D600", "f. c #776F00", "g. c #9D9200", "h. c #ACA000", "i. c #ADA100", "j. c #6B6449", "k. c #1A18A4", "l. c #827930", "m. c #9D9212", "n. c #292693", "o. c #4C466C", "p. c #A79B07", "q. c #AEA200", "r. c #C1B400", "s. c #DDCD00", "t. c #E3D300", "u. c #6B6300", "v. c #8D8200", "w. c #A59800", "x. c #A69900", "y. c #A79900", "z. c #7D7230", "A. c #1715A6", "B. c #5A5359", "C. c #A59803", "D. c #A69901", "E. c #82782B", "F. c #5B5456", "G. c #A29505", "H. c #A79A00", "I. c #AA9D00", "J. c #C8B700", "K. c #DAC900", "L. c #7E7300", "M. c #9C8D00", "N. c #9F9000", "O. c #9F9100", "P. c #A09100", "Q. c #928511", "R. c #3C3677", "S. c #1A18A1", "T. c #5A5255", "U. c #61584D", "V. c #2A278E", "W. c #28248F", "X. c #817524", "Y. c #9F9101", "Z. c #A19200", "`. c #A39500", " + c #B2A200", ".+ c #D1BE00", "++ c #D9C500", "@+ c #7A6E00", "#+ c #8C7E00", "$+ c #968800", "%+ c #998A00", "&+ c #9A8A00", "*+ c #988902", "=+ c #7B6E25", "-+ c #3B3575", ";+ c #1C199C", ">+ c #2B2689", ",+ c #6E6236", "'+ c #958605", ")+ c #9A8B00", "!+ c #9D8E00", "~+ c #AC9B00", "{+ c #C3B000", "]+ c #D3BD00", "^+ c #7D6F00", "/+ c #887900", "(+ c #918100", "_+ c #938300", ":+ c #928102", "<+ c #867611", "[+ c #6F632E", "}+ c #6E622F", "|+ c #7E6F1B", "1+ c #908004", "2+ c #948300", "3+ c #978600", "4+ c #A59300", "5+ c #BCA700", "6+ c #C9B300", "7+ c #C9B200", "8+ c #7D6E00", "9+ c #8A7900", "0+ c #918000", "a+ c #927F00", "b+ c #8F7E00", "c+ c #8F7D00", "d+ c #907E00", "e+ c #968300", "f+ c #9B8800", "g+ c #A79200", "h+ c #B8A100", "i+ c #C0A800", "j+ c #BFA800", "k+ c #887600", "l+ c #917D00", "m+ c #927E00", "n+ c #917E00", "o+ c #978200", "p+ c #988300", "q+ c #9A8500", "r+ c #A48E00", "s+ c #AA9300", "t+ c #B09800", "u+ c #B8A000", "v+ c #8C7700", "w+ c #988100", "x+ c #9A8300", "y+ c #9C8400", "z+ c #A48C00", "A+ c #A78F00", " ", " . + @ # $ $ $ $ % & * = ", " - ; > , ' ) ) ) ) ! ~ , { ] ^ ", " / ( _ : < [ } } | | | } [ ) < : 1 2 ", " 3 4 5 6 7 7 8 8 8 8 8 8 8 7 7 6 9 0 a ", " b c d e f g g g g g g g g g g g f h i e j ", " k l m n n o o o o o p q r s o o o t n t u v ", " w x y z A A A A z B C D E F G A A A A H I J K ", " L M N O O O O O P Q R S T U V W O O O O X Y Z ", " ` ...+.+.+.+.+.@.#.$.%.&.*.=.-.;.+.+.+.>.,.'.", " ).!.~.{.{.{.{.{.].^./.(._.:.<.[.}.{.{.{.|.1.2.", " 3.4.5.!.!.!.!.!.6.7.8.!.!.9.0.a.b.!.!.!.c.d.e.", " f.g.h.i.i.i.i.i.j.k.l.i.i.m.n.o.p.i.i.q.r.s.t.", " u.v.w.x.y.y.y.y.z.A.B.C.D.E.A.F.G.y.H.I.J.K. ", " L.M.N.O.P.P.P.Q.R.S.T.U.V.W.X.Y.Z.`. +.+++ ", " @+#+$+%+%+&+&+*+=+-+;+;+>+,+'+)+!+~+{+]+ ", " ^+/+(+_+_+_+_+:+<+[+}+|+1+2+3+4+5+6+7+ ", " 8+9+0+a+b+c+c+c+c+c+d+e+f+g+h+i+j+ ", " k+l+m+n+o+p+p+p+p+q+r+s+t+u+ ", " v+w+x+x+x+x+y+z+A+ "}; GabeditSrc250/pixmaps/Adf.xpm0000644000175100017510000001126013130664665016403 0ustar alloucheallouche/* XPM */ static char * adf_xpm[] = { "32 32 160 2", " c None", ". c None", "# c #E9E8DF", "$ c #ECDDBB", "% c #ECDDBC", "& c #E8EAE2", "* c #EBDEBE", "= c #ECDCBA", "- c #E9E7DA", "; c #E7EFF2", "> c #E8EBE6", ", c #EBDFC1", "' c #ECDCB9", ") c #E9E6D6", "! c #E7EEF1", "~ c #E9E8DE", "{ c #EFBE64", "] c #BE963A", "^ c #88834F", "/ c #89834F", "( c #BF963B", "_ c #F0C068", ": c #E8EAE5", "< c #F0C372", "[ c #C79A3A", "} c #8C844D", "| c #868250", "1 c #B6923C", "2 c #EEBA5C", "3 c #EAE5D5", "4 c #E8ECEB", "5 c #F0C980", "6 c #CF9E3A", "7 c #A18A42", "8 c #CE982B", "9 c #AE8F3E", "0 c #ECB651", "a c #EAE1CA", "b c #E2AA40", "c c #51726C", "d c #145F8C", "e c #155F8C", "f c #55736A", "g c #E5AC40", "h c #EAB24A", "i c #637763", "j c #16608B", "k c #456E72", "l c #DAA53B", "m c #EFB854", "n c #757D59", "o c #18608A", "p c #34697B", "q c #9F8A43", "r c #376A79", "s c #CE9E39", "t c #EBE0C4", "u c #52726C", "v c #1A6189", "w c #5E7665", "x c #B08F3A", "y c #416D74", "z c #C09432", "A c #2E677E", "B c #E7AE42", "C c #E7EEEF", "D c #E8EAE3", "E c #C09637", "G c #B99236", "H c #BA9235", "I c #DD9D23", "J c #256483", "K c #A98D3E", "L c #376A7A", "M c #226384", "N c #54736A", "O c #91854B", "P c #8C844E", "Q c #948749", "R c #396A79", "S c #787E58", "T c #B39039", "U c #5D7666", "V c #5D7566", "W c #EFCF91", "X c #EBDEC0", "Y c #8E844C", "Z c #968748", "` c #406D75", " . c #30677E", ".. c #5B7567", "+. c #A38B41", "@. c #5C7567", "#. c #EFCF93", "$. c #EEA522", "%. c #BF9433", "&. c #988747", "*. c #17608B", "=. c #BB9334", "-. c #236484", ";. c #AD8E3C", ">. c #33697C", ",. c #2A6680", "'. c #978748", "). c #1D6287", "!. c #978847", "~. c #F0C26E", "{. c #617764", "]. c #AE8E3B", "^. c #496F70", "/. c #C29531", "(. c #A18A43", "_. c #32687C", ":. c #B49138", "<. c #1F6286", "[. c #36697A", "}. c #EAB147", "|. c #E7EEF0", "1. c #E8AF45", "2. c #627763", "3. c #E9B047", "4. c #EDB652", "5. c #707B5C", "6. c #E0A93F", "7. c #F0BC5E", "8. c #838152", "9. c #4F716D", "0. c #D5A23B", "a. c #EAE2CD", "b. c #E8EAE4", "c. c #F0C472", "d. c #CA9C3A", "e. c #988847", "f. c #CC9D3B", "g. c #F0C576", "h. c #E8ECEA", "i. c #F0C87F", "j. c #D2A03B", "k. c #9A8846", "l. c #958748", "m. c #C4993A", "n. c #EFC068", "o. c #E9E8DD", "p. c #E7EDEE", "q. c #EFCE8E", "r. c #F4AD30", "s. c #A88D3F", "t. c #93864A", "u. c #E0A029", "v. c #F0BB5B", "w. c #EAE4D3", "x. c #EAE2CA", "y. c #E8EBE7", "z. c #E8ECE9", "A. c #EBE1C8", "B. c #E8EDEC", "C. c #EAE3D0", "D. c #EBE0C6", "E. c #E9E9E0", "F. c #F1F6F8", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . # $ % # . . . . & * = - ; . . . > , ' ) ! . . . . . ", ". . . . ~ { ] ^ / ( _ # : < [ } | 1 2 3 4 5 6 7 8 9 0 a . . . . ", ". . . ~ b c d d d e f g h i j d d d k l m n o p q d r s t . . . ", ". . . _ u d d d d o v w x d d d d d d y z j d p q d d A B C . . ", ". . D E d d d d d . G H I J d d d d d d K L d M N d d d O = . . ", ". . * P d d d d d d d d Q y d d d R S S T U d d d d d d V W . . ", ". . X Y d d d d d d d d Z ` d d d .........d d d d d d w #.. . ", ". . > $.z %.&.d d d d *.=.-.d d d d d d ;.>./ ,.d '.).d !.* . . ", ". . . ~...d d d d d d {.].d d d d d d ^./.j (._.d :.<.[.}.|.. . ", ". . . D 1.w j d d j 2.3.4.5.o d d e c 6.7.8.K _.d :.9.0.a.. . . ", ". . . . b.c.d.'.e.f.g.: h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.. . . . ", ". . . . . . > a x.y.. . . . z.a.A.b.. . . . B.C.D.E.; . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "}; GabeditSrc250/gl2ps/0000755000175100017510000000000013130743374014524 5ustar allouchealloucheGabeditSrc250/gl2ps/Makefile0000644000175100017510000000041713130664665016173 0ustar allouchealloucheinclude ../CONFIG OBJECTS = gl2ps.o all: compiling CFLAGS = $(COMMONCFLAGS) $(OGLCFLAGS) %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ compiling: $(OBJECTS) clean: @$(RM) *.o #make dependance SRCS = $(OBJECTS:%.o=%.c) dep : gcc -MM $(SRCS) > Dep.mk -include Dep.mk GabeditSrc250/gl2ps/gl2ps.c0000644000175100017510000054207413130665226015732 0ustar alloucheallouche/* $Id: gl2ps.c,v 1.243 2006/11/06 00:53:53 geuzaine Exp $ */ /* * GL2PS, an OpenGL to PostScript Printing Library * Copyright (C) 1999-2006 Christophe Geuzaine * * This program is free software; you can redistribute it and/or * modify it under the terms of either: * * a) the GNU Library General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your * option) any later version; or * * b) the GL2PS License as published by Christophe Geuzaine, 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 either * the GNU Library General Public License or the GL2PS License for * more details. * * You should have received a copy of the GNU Library General Public * License along with this library in the file named "COPYING.LGPL"; * if not, write to the Free Software Foundation, Inc., 675 Mass Ave, * Cambridge, MA 02139, USA. * * You should have received a copy of the GL2PS License with this * library in the file named "COPYING.GL2PS"; if not, I will be glad * to provide one. * * Contributors: * Michael Sweet * Marc Ume * Jean-Francois Remacle * Bart Kaptein * Quy Nguyen-Dai * Sam Buss * Shane Hill * Romain Boman * Rouben Rostamian * Diego Santa Cruz * Shahzad Muzaffar * Lassi Tuura * Guy Barrand * Prabhu Ramachandran * Micha Bieber * Olivier Couet * Shai Ayal * Fabian Wenzel * Ian D. Gay * Cosmin Truta * Baiju Devani * Alexander Danilov * * For the latest info about gl2ps, see http://www.geuz.org/gl2ps/. * Please report all bugs and problems to . */ #include "gl2ps.h" #include #include #include #include #include #include #if defined(GL2PS_HAVE_ZLIB) #include #endif #if defined(GL2PS_HAVE_LIBPNG) #include #endif /********************************************************************* * * Private definitions, data structures and prototypes * *********************************************************************/ /* Magic numbers (assuming that the order of magnitude of window coordinates is 10^3) */ #define GL2PS_EPSILON 5.0e-3F #define GL2PS_ZSCALE 1000.0F #define GL2PS_ZOFFSET 5.0e-2F #define GL2PS_ZOFFSET_LARGE 20.0F #define GL2PS_ZERO(arg) (fabs(arg) < 1.e-20) /* Primitive types */ #define GL2PS_NO_TYPE -1 #define GL2PS_TEXT 1 #define GL2PS_POINT 2 #define GL2PS_LINE 3 #define GL2PS_QUADRANGLE 4 #define GL2PS_TRIANGLE 5 #define GL2PS_PIXMAP 6 #define GL2PS_IMAGEMAP 7 #define GL2PS_IMAGEMAP_WRITTEN 8 #define GL2PS_IMAGEMAP_VISIBLE 9 #define GL2PS_SPECIAL 10 /* BSP tree primitive comparison */ #define GL2PS_COINCIDENT 1 #define GL2PS_IN_FRONT_OF 2 #define GL2PS_IN_BACK_OF 3 #define GL2PS_SPANNING 4 /* 2D BSP tree primitive comparison */ #define GL2PS_POINT_COINCIDENT 0 #define GL2PS_POINT_INFRONT 1 #define GL2PS_POINT_BACK 2 /* Internal feedback buffer pass-through tokens */ #define GL2PS_BEGIN_OFFSET_TOKEN 1 #define GL2PS_END_OFFSET_TOKEN 2 #define GL2PS_BEGIN_BOUNDARY_TOKEN 3 #define GL2PS_END_BOUNDARY_TOKEN 4 #define GL2PS_BEGIN_STIPPLE_TOKEN 5 #define GL2PS_END_STIPPLE_TOKEN 6 #define GL2PS_POINT_SIZE_TOKEN 7 #define GL2PS_LINE_WIDTH_TOKEN 8 #define GL2PS_BEGIN_BLEND_TOKEN 9 #define GL2PS_END_BLEND_TOKEN 10 #define GL2PS_SRC_BLEND_TOKEN 11 #define GL2PS_DST_BLEND_TOKEN 12 #define GL2PS_IMAGEMAP_TOKEN 13 #define GL2PS_DRAW_PIXELS_TOKEN 14 #define GL2PS_TEXT_TOKEN 15 typedef enum { T_UNDEFINED = -1, T_CONST_COLOR = 1, T_VAR_COLOR = 1<<1, T_ALPHA_1 = 1<<2, T_ALPHA_LESS_1 = 1<<3, T_VAR_ALPHA = 1<<4 } GL2PS_TRIANGLE_PROPERTY; typedef GLfloat GL2PSxyz[3]; typedef GLfloat GL2PSplane[4]; typedef struct _GL2PSbsptree2d GL2PSbsptree2d; struct _GL2PSbsptree2d { GL2PSplane plane; GL2PSbsptree2d *front, *back; }; typedef struct { GLint nmax, size, incr, n; char *array; } GL2PSlist; typedef struct _GL2PSbsptree GL2PSbsptree; struct _GL2PSbsptree { GL2PSplane plane; GL2PSlist *primitives; GL2PSbsptree *front, *back; }; typedef struct { GL2PSxyz xyz; GL2PSrgba rgba; } GL2PSvertex; typedef struct { GL2PSvertex vertex[3]; int prop; } GL2PStriangle; typedef struct { GLshort fontsize; char *str, *fontname; /* Note: for a 'special' string, 'alignment' holds the format (PostScript, PDF, etc.) of the special string */ GLint alignment; GLfloat angle; } GL2PSstring; typedef struct { GLsizei width, height; /* Note: for an imagemap, 'type' indicates if it has already been written to the file or not, and 'format' indicates if it is visible or not */ GLenum format, type; GLfloat *pixels; } GL2PSimage; typedef struct _GL2PSimagemap GL2PSimagemap; struct _GL2PSimagemap { GL2PSimage *image; GL2PSimagemap *next; }; typedef struct { GLshort type, numverts; GLushort pattern; char boundary, offset, culled; GLint factor; GLfloat width; GL2PSvertex *verts; union { GL2PSstring *text; GL2PSimage *image; } data; } GL2PSprimitive; typedef struct { #if defined(GL2PS_HAVE_ZLIB) Bytef *dest, *src, *start; uLongf destLen, srcLen; #else int dummy; #endif } GL2PScompress; typedef struct{ GL2PSlist* ptrlist; int gsno, fontno, imno, shno, maskshno, trgroupno; int gsobjno, fontobjno, imobjno, shobjno, maskshobjno, trgroupobjno; } GL2PSpdfgroup; typedef struct { /* General */ GLint format, sort, options, colorsize, colormode, buffersize; char *title, *producer, *filename; GLboolean boundary, blending; GLfloat *feedback, offset[2], lastlinewidth; GLint viewport[4], blendfunc[2], lastfactor; GL2PSrgba *colormap, lastrgba, threshold, bgcolor; GLushort lastpattern; GL2PSvertex lastvertex; GL2PSlist *primitives, *auxprimitives; FILE *stream; GL2PScompress *compress; GLboolean header; /* BSP-specific */ GLint maxbestroot; /* Occlusion culling-specific */ GLboolean zerosurfacearea; GL2PSbsptree2d *imagetree; GL2PSprimitive *primitivetoadd; /* PDF-specific */ int streamlength; GL2PSlist *pdfprimlist, *pdfgrouplist; int *xreflist; int objects_stack; /* available objects */ int extgs_stack; /* graphics state object number */ int font_stack; /* font object number */ int im_stack; /* image object number */ int trgroupobjects_stack; /* xobject numbers */ int shader_stack; /* shader object numbers */ int mshader_stack; /* mask shader object numbers */ /* for image map list */ GL2PSimagemap *imagemap_head; GL2PSimagemap *imagemap_tail; } GL2PScontext; typedef struct { void (*printHeader)(void); void (*printFooter)(void); void (*beginViewport)(GLint viewport[4]); GLint (*endViewport)(void); void (*printPrimitive)(void *data); void (*printFinalPrimitive)(void); const char *file_extension; const char *description; } GL2PSbackend; /* The gl2ps context. gl2ps is not thread safe (we should create a local GL2PScontext during gl2psBeginPage) */ static GL2PScontext *gl2ps = NULL; /* Need to forward-declare this one */ static GLint gl2psPrintPrimitives(void); /********************************************************************* * * Utility routines * *********************************************************************/ static void gl2psMsg(GLint level, const char *fmt, ...) { va_list args; if(!(gl2ps->options & GL2PS_SILENT)){ switch(level){ case GL2PS_INFO : fprintf(stderr, "GL2PS info: "); break; case GL2PS_WARNING : fprintf(stderr, "GL2PS warning: "); break; case GL2PS_ERROR : fprintf(stderr, "GL2PS error: "); break; } va_start(args, fmt); vfprintf(stderr, fmt, args); va_end(args); fprintf(stderr, "\n"); } /* if(level == GL2PS_ERROR) exit(1); */ } static void *gl2psMalloc(size_t size) { void *ptr; if(!size) return(NULL); ptr = malloc(size); if(!ptr){ gl2psMsg(GL2PS_ERROR, "Couldn't allocate requested memory"); exit(1); } return(ptr); } static void *gl2psRealloc(void *ptr, size_t size) { if(!size) return(NULL); ptr = realloc(ptr, size); if(!ptr){ gl2psMsg(GL2PS_ERROR, "Couldn't reallocate requested memory"); exit(1); } return(ptr); } static void gl2psFree(void *ptr) { if(!ptr) return; free(ptr); } static size_t gl2psWriteBigEndian(unsigned long data, size_t bytes) { size_t i; size_t size = sizeof(unsigned long); for(i = 1; i <= bytes; ++i){ fputc(0xff & (data >> (size-i) * 8), gl2ps->stream); } return bytes; } /* zlib compression helper routines */ #if defined(GL2PS_HAVE_ZLIB) static void gl2psSetupCompress(void) { gl2ps->compress = (GL2PScompress*)gl2psMalloc(sizeof(GL2PScompress)); gl2ps->compress->src = NULL; gl2ps->compress->start = NULL; gl2ps->compress->dest = NULL; gl2ps->compress->srcLen = 0; gl2ps->compress->destLen = 0; } static void gl2psFreeCompress(void) { if(!gl2ps->compress) return; gl2psFree(gl2ps->compress->start); gl2psFree(gl2ps->compress->dest); gl2ps->compress->src = NULL; gl2ps->compress->start = NULL; gl2ps->compress->dest = NULL; gl2ps->compress->srcLen = 0; gl2ps->compress->destLen = 0; } static int gl2psAllocCompress(unsigned int srcsize) { gl2psFreeCompress(); if(!gl2ps->compress || !srcsize) return GL2PS_ERROR; gl2ps->compress->srcLen = srcsize; gl2ps->compress->destLen = (int)ceil(1.001 * gl2ps->compress->srcLen + 12); gl2ps->compress->src = (Bytef*)gl2psMalloc(gl2ps->compress->srcLen); gl2ps->compress->start = gl2ps->compress->src; gl2ps->compress->dest = (Bytef*)gl2psMalloc(gl2ps->compress->destLen); return GL2PS_SUCCESS; } static void *gl2psReallocCompress(unsigned int srcsize) { if(!gl2ps->compress || !srcsize) return NULL; if(srcsize < gl2ps->compress->srcLen) return gl2ps->compress->start; gl2ps->compress->srcLen = srcsize; gl2ps->compress->destLen = (int)ceil(1.001 * gl2ps->compress->srcLen + 12); gl2ps->compress->src = (Bytef*)gl2psRealloc(gl2ps->compress->src, gl2ps->compress->srcLen); gl2ps->compress->start = gl2ps->compress->src; gl2ps->compress->dest = (Bytef*)gl2psRealloc(gl2ps->compress->dest, gl2ps->compress->destLen); return gl2ps->compress->start; } static size_t gl2psWriteBigEndianCompress(unsigned long data, size_t bytes) { size_t i; size_t size = sizeof(unsigned long); for(i = 1; i <= bytes; ++i){ *gl2ps->compress->src = (Bytef)(0xff & (data >> (size-i) * 8)); ++gl2ps->compress->src; } return bytes; } static int gl2psDeflate(void) { /* For compatibility with older zlib versions, we use compress(...) instead of compress2(..., Z_BEST_COMPRESSION) */ return compress(gl2ps->compress->dest, &gl2ps->compress->destLen, gl2ps->compress->start, gl2ps->compress->srcLen); } #endif static int gl2psPrintf(const char* fmt, ...) { int ret; va_list args; #if defined(GL2PS_HAVE_ZLIB) unsigned int oldsize = 0; static char buf[1000]; if(gl2ps->options & GL2PS_COMPRESS){ va_start(args, fmt); ret = vsprintf(buf, fmt, args); va_end(args); oldsize = gl2ps->compress->srcLen; gl2ps->compress->start = (Bytef*)gl2psReallocCompress(oldsize + ret); memcpy(gl2ps->compress->start+oldsize, buf, ret); ret = 0; } else{ #endif va_start(args, fmt); ret = vfprintf(gl2ps->stream, fmt, args); va_end(args); #if defined(GL2PS_HAVE_ZLIB) } #endif return ret; } static void gl2psPrintGzipHeader() { #if defined(GL2PS_HAVE_ZLIB) char tmp[10] = {'\x1f', '\x8b', /* magic numbers: 0x1f, 0x8b */ 8, /* compression method: Z_DEFLATED */ 0, /* flags */ 0, 0, 0, 0, /* time */ 2, /* extra flags: max compression */ '\x03'}; /* OS code: 0x03 (Unix) */ if(gl2ps->options & GL2PS_COMPRESS){ gl2psSetupCompress(); /* add the gzip file header */ fwrite(tmp, 10, 1, gl2ps->stream); } #endif } static void gl2psPrintGzipFooter() { #if defined(GL2PS_HAVE_ZLIB) int n; uLong crc, len; char tmp[8]; if(gl2ps->options & GL2PS_COMPRESS){ if(Z_OK != gl2psDeflate()){ gl2psMsg(GL2PS_ERROR, "Zlib deflate error"); } else{ /* determine the length of the header in the zlib stream */ n = 2; /* CMF+FLG */ if(gl2ps->compress->dest[1] & (1<<5)){ n += 4; /* DICTID */ } /* write the data, without the zlib header and footer */ fwrite(gl2ps->compress->dest+n, gl2ps->compress->destLen-(n+4), 1, gl2ps->stream); /* add the gzip file footer */ crc = crc32(0L, gl2ps->compress->start, gl2ps->compress->srcLen); for(n = 0; n < 4; ++n){ tmp[n] = (char)(crc & 0xff); crc >>= 8; } len = gl2ps->compress->srcLen; for(n = 4; n < 8; ++n){ tmp[n] = (char)(len & 0xff); len >>= 8; } fwrite(tmp, 8, 1, gl2ps->stream); } gl2psFreeCompress(); gl2psFree(gl2ps->compress); gl2ps->compress = NULL; } #endif } /* The list handling routines */ static void gl2psListRealloc(GL2PSlist *list, GLint n) { if(!list){ gl2psMsg(GL2PS_ERROR, "Cannot reallocate NULL list"); return; } if(n <= 0) return; if(!list->array){ list->nmax = n; list->array = (char*)gl2psMalloc(list->nmax * list->size); } else{ if(n > list->nmax){ list->nmax = ((n - 1) / list->incr + 1) * list->incr; list->array = (char*)gl2psRealloc(list->array, list->nmax * list->size); } } } static GL2PSlist *gl2psListCreate(GLint n, GLint incr, GLint size) { GL2PSlist *list; if(n < 0) n = 0; if(incr <= 0) incr = 1; list = (GL2PSlist*)gl2psMalloc(sizeof(GL2PSlist)); list->nmax = 0; list->incr = incr; list->size = size; list->n = 0; list->array = NULL; gl2psListRealloc(list, n); return(list); } static void gl2psListReset(GL2PSlist *list) { if(!list) return; list->n = 0; } static void gl2psListDelete(GL2PSlist *list) { if(!list) return; gl2psFree(list->array); gl2psFree(list); } static void gl2psListAdd(GL2PSlist *list, void *data) { if(!list){ gl2psMsg(GL2PS_ERROR, "Cannot add into unallocated list"); return; } list->n++; gl2psListRealloc(list, list->n); memcpy(&list->array[(list->n - 1) * list->size], data, list->size); } static int gl2psListNbr(GL2PSlist *list) { if(!list) return 0; return(list->n); } static void *gl2psListPointer(GL2PSlist *list, GLint index) { if(!list){ gl2psMsg(GL2PS_ERROR, "Cannot point into unallocated list"); return NULL; } if((index < 0) || (index >= list->n)){ gl2psMsg(GL2PS_ERROR, "Wrong list index in gl2psListPointer"); return NULL; } return(&list->array[index * list->size]); } static void gl2psListSort(GL2PSlist *list, int (*fcmp)(const void *a, const void *b)) { if(!list) return; qsort(list->array, list->n, list->size, fcmp); } static void gl2psListAction(GL2PSlist *list, void (*action)(void *data)) { GLint i; for(i = 0; i < gl2psListNbr(list); i++){ (*action)(gl2psListPointer(list, i)); } } static void gl2psListActionInverse(GL2PSlist *list, void (*action)(void *data)) { GLint i; for(i = gl2psListNbr(list); i > 0; i--){ (*action)(gl2psListPointer(list, i-1)); } } #if defined(GL2PS_HAVE_LIBPNG) static void gl2psListRead(GL2PSlist *list, int index, void *data) { if((index < 0) || (index >= list->n)) gl2psMsg(GL2PS_ERROR, "Wrong list index in gl2psListRead"); memcpy(data, &list->array[index * list->size], list->size); } static void gl2psEncodeBase64Block(unsigned char in[3], unsigned char out[4], int len) { static const char cb64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; out[0] = cb64[ in[0] >> 2 ]; out[1] = cb64[ ((in[0] & 0x03) << 4) | ((in[1] & 0xf0) >> 4) ]; out[2] = (len > 1) ? cb64[ ((in[1] & 0x0f) << 2) | ((in[2] & 0xc0) >> 6) ] : '='; out[3] = (len > 2) ? cb64[ in[2] & 0x3f ] : '='; } static void gl2psListEncodeBase64(GL2PSlist *list) { unsigned char *buffer, in[3], out[4]; int i, n, index, len; n = list->n * list->size; buffer = (unsigned char*)gl2psMalloc(n * sizeof(unsigned char)); memcpy(buffer, list->array, n * sizeof(unsigned char)); gl2psListReset(list); index = 0; while(index < n) { len = 0; for(i = 0; i < 3; i++) { if(index < n){ in[i] = buffer[index]; len++; } else{ in[i] = 0; } index++; } if(len) { gl2psEncodeBase64Block(in, out, len); for(i = 0; i < 4; i++) gl2psListAdd(list, &out[i]); } } gl2psFree(buffer); } #endif /* Helpers for rgba colors */ static GLboolean gl2psSameColor(GL2PSrgba rgba1, GL2PSrgba rgba2) { if(!GL2PS_ZERO(rgba1[0] - rgba2[0]) || !GL2PS_ZERO(rgba1[1] - rgba2[1]) || !GL2PS_ZERO(rgba1[2] - rgba2[2])) return GL_FALSE; return GL_TRUE; } static GLboolean gl2psVertsSameColor(const GL2PSprimitive *prim) { int i; for(i = 1; i < prim->numverts; i++){ if(!gl2psSameColor(prim->verts[0].rgba, prim->verts[i].rgba)){ return GL_FALSE; } } return GL_TRUE; } static GLboolean gl2psSameColorThreshold(int n, GL2PSrgba rgba[], GL2PSrgba threshold) { int i; if(n < 2) return GL_TRUE; for(i = 1; i < n; i++){ if(fabs(rgba[0][0] - rgba[i][0]) > threshold[0] || fabs(rgba[0][1] - rgba[i][1]) > threshold[1] || fabs(rgba[0][2] - rgba[i][2]) > threshold[2]) return GL_FALSE; } return GL_TRUE; } static void gl2psSetLastColor(GL2PSrgba rgba) { int i; for(i = 0; i < 3; ++i){ gl2ps->lastrgba[i] = rgba[i]; } } static GLfloat gl2psGetRGB(GL2PSimage *im, GLuint x, GLuint y, GLfloat *red, GLfloat *green, GLfloat *blue) { GLsizei width = im->width; GLsizei height = im->height; GLfloat *pixels = im->pixels; GLfloat *pimag; /* OpenGL image is from down to up, PS image is up to down */ switch(im->format){ case GL_RGBA: pimag = pixels + 4 * (width * (height - 1 - y) + x); break; case GL_RGB: default: pimag = pixels + 3 * (width * (height - 1 - y) + x); break; } *red = *pimag; pimag++; *green = *pimag; pimag++; *blue = *pimag; pimag++; return (im->format == GL_RGBA) ? *pimag : 1.0F; } /* Helper routines for pixmaps */ static GL2PSimage *gl2psCopyPixmap(GL2PSimage *im) { int size; GL2PSimage *image = (GL2PSimage*)gl2psMalloc(sizeof(GL2PSimage)); image->width = im->width; image->height = im->height; image->format = im->format; image->type = im->type; switch(image->format){ case GL_RGBA: size = image->height * image->width * 4 * sizeof(GLfloat); break; case GL_RGB: default: size = image->height * image->width * 3 * sizeof(GLfloat); break; } image->pixels = (GLfloat*)gl2psMalloc(size); memcpy(image->pixels, im->pixels, size); return image; } static void gl2psFreePixmap(GL2PSimage *im) { if(!im) return; gl2psFree(im->pixels); gl2psFree(im); } #if defined(GL2PS_HAVE_LIBPNG) #if !defined(png_jmpbuf) # define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf) #endif static void gl2psUserWritePNG(png_structp png_ptr, png_bytep data, png_size_t length) { unsigned int i; GL2PSlist *png = (GL2PSlist*)png_get_io_ptr(png_ptr); for(i = 0; i < length; i++) gl2psListAdd(png, &data[i]); } static void gl2psUserFlushPNG(png_structp png_ptr) { } static void gl2psConvertPixmapToPNG(GL2PSimage *pixmap, GL2PSlist *png) { png_structp png_ptr; png_infop info_ptr; unsigned char *row_data; GLfloat dr, dg, db; int row, col; if(!(png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL))) return; if(!(info_ptr = png_create_info_struct(png_ptr))){ png_destroy_write_struct(&png_ptr, NULL); return; } if(setjmp(png_jmpbuf(png_ptr))) { png_destroy_write_struct(&png_ptr, &info_ptr); return; } png_set_write_fn(png_ptr, (void *)png, gl2psUserWritePNG, gl2psUserFlushPNG); png_set_compression_level(png_ptr, Z_DEFAULT_COMPRESSION); png_set_IHDR(png_ptr, info_ptr, pixmap->width, pixmap->height, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); png_write_info(png_ptr, info_ptr); row_data = (unsigned char*)gl2psMalloc(3 * pixmap->width * sizeof(unsigned char)); for(row = 0; row < pixmap->height; row++){ for(col = 0; col < pixmap->width; col++){ gl2psGetRGB(pixmap, col, row, &dr, &dg, &db); row_data[3*col] = (unsigned char)(255. * dr); row_data[3*col+1] = (unsigned char)(255. * dg); row_data[3*col+2] = (unsigned char)(255. * db); } png_write_row(png_ptr, (png_bytep)row_data); } gl2psFree(row_data); png_write_end(png_ptr, info_ptr); png_destroy_write_struct(&png_ptr, &info_ptr); } #endif /* Helper routines for text strings */ static GLint gl2psAddText(GLint type, const char *str, const char *fontname, GLshort fontsize, GLint alignment, GLfloat angle) { GLfloat pos[4]; GL2PSprimitive *prim; GLboolean valid; if(!gl2ps || !str || !fontname) return GL2PS_UNINITIALIZED; if(gl2ps->options & GL2PS_NO_TEXT) return GL2PS_SUCCESS; glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID, &valid); if(GL_FALSE == valid) return GL2PS_SUCCESS; /* the primitive is culled */ glGetFloatv(GL_CURRENT_RASTER_POSITION, pos); prim = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); prim->type = type; prim->boundary = 0; prim->numverts = 1; prim->verts = (GL2PSvertex*)gl2psMalloc(sizeof(GL2PSvertex)); prim->verts[0].xyz[0] = pos[0]; prim->verts[0].xyz[1] = pos[1]; prim->verts[0].xyz[2] = pos[2]; prim->culled = 0; prim->offset = 0; prim->pattern = 0; prim->factor = 0; prim->width = 1; glGetFloatv(GL_CURRENT_RASTER_COLOR, prim->verts[0].rgba); prim->data.text = (GL2PSstring*)gl2psMalloc(sizeof(GL2PSstring)); prim->data.text->str = (char*)gl2psMalloc((strlen(str)+1)*sizeof(char)); strcpy(prim->data.text->str, str); prim->data.text->fontname = (char*)gl2psMalloc((strlen(fontname)+1)*sizeof(char)); strcpy(prim->data.text->fontname, fontname); prim->data.text->fontsize = fontsize; prim->data.text->alignment = alignment; prim->data.text->angle = angle; gl2psListAdd(gl2ps->auxprimitives, &prim); glPassThrough(GL2PS_TEXT_TOKEN); return GL2PS_SUCCESS; } static GL2PSstring *gl2psCopyText(GL2PSstring *t) { GL2PSstring *text = (GL2PSstring*)gl2psMalloc(sizeof(GL2PSstring)); text->str = (char*)gl2psMalloc((strlen(t->str)+1)*sizeof(char)); strcpy(text->str, t->str); text->fontname = (char*)gl2psMalloc((strlen(t->fontname)+1)*sizeof(char)); strcpy(text->fontname, t->fontname); text->fontsize = t->fontsize; text->alignment = t->alignment; text->angle = t->angle; return text; } static void gl2psFreeText(GL2PSstring *text) { if(!text) return; gl2psFree(text->str); gl2psFree(text->fontname); gl2psFree(text); } /* Helpers for blending modes */ static GLboolean gl2psSupportedBlendMode(GLenum sfactor, GLenum dfactor) { /* returns TRUE if gl2ps supports the argument combination: only two blending modes have been implemented so far */ if( (sfactor == GL_SRC_ALPHA && dfactor == GL_ONE_MINUS_SRC_ALPHA) || (sfactor == GL_ONE && dfactor == GL_ZERO) ) return GL_TRUE; return GL_FALSE; } static void gl2psAdaptVertexForBlending(GL2PSvertex *v) { /* Transforms vertex depending on the actual blending function - currently the vertex v is considered as source vertex and his alpha value is changed to 1.0 if source blending GL_ONE is active. This might be extended in the future */ if(!v || !gl2ps) return; if(gl2ps->options & GL2PS_NO_BLENDING || !gl2ps->blending){ v->rgba[3] = 1.0F; return; } switch(gl2ps->blendfunc[0]){ case GL_ONE: v->rgba[3] = 1.0F; break; default: break; } } static void gl2psAssignTriangleProperties(GL2PStriangle *t) { /* int i; */ t->prop = T_VAR_COLOR; /* Uncommenting the following lines activates an even more fine grained distinction between triangle types - please don't delete, a remarkable amount of PDF handling code inside this file depends on it if activated */ /* t->prop = T_CONST_COLOR; for(i = 0; i < 3; ++i){ if(!GL2PS_ZERO(t->vertex[0].rgba[i] - t->vertex[1].rgba[i]) || !GL2PS_ZERO(t->vertex[1].rgba[i] - t->vertex[2].rgba[i])){ t->prop = T_VAR_COLOR; break; } } */ if(!GL2PS_ZERO(t->vertex[0].rgba[3] - t->vertex[1].rgba[3]) || !GL2PS_ZERO(t->vertex[1].rgba[3] - t->vertex[2].rgba[3])){ t->prop |= T_VAR_ALPHA; } else{ if(t->vertex[0].rgba[3] < 1) t->prop |= T_ALPHA_LESS_1; else t->prop |= T_ALPHA_1; } } static void gl2psFillTriangleFromPrimitive(GL2PStriangle *t, GL2PSprimitive *p, GLboolean assignprops) { t->vertex[0] = p->verts[0]; t->vertex[1] = p->verts[1]; t->vertex[2] = p->verts[2]; if(GL_TRUE == assignprops) gl2psAssignTriangleProperties(t); } static void gl2psInitTriangle(GL2PStriangle *t) { int i; GL2PSvertex vertex = { {-1.0F, -1.0F, -1.0F}, {-1.0F, -1.0F, -1.0F, -1.0F} }; for(i = 0; i < 3; i++) t->vertex[i] = vertex; t->prop = T_UNDEFINED; } /* Miscellaneous helper routines */ static GL2PSprimitive *gl2psCopyPrimitive(GL2PSprimitive *p) { GL2PSprimitive *prim; if(!p){ gl2psMsg(GL2PS_ERROR, "Trying to copy an empty primitive"); return NULL; } prim = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); prim->type = p->type; prim->numverts = p->numverts; prim->boundary = p->boundary; prim->offset = p->offset; prim->pattern = p->pattern; prim->factor = p->factor; prim->culled = p->culled; prim->width = p->width; prim->verts = (GL2PSvertex*)gl2psMalloc(p->numverts*sizeof(GL2PSvertex)); memcpy(prim->verts, p->verts, p->numverts * sizeof(GL2PSvertex)); switch(prim->type){ case GL2PS_PIXMAP : prim->data.image = gl2psCopyPixmap(p->data.image); break; case GL2PS_TEXT : case GL2PS_SPECIAL : prim->data.text = gl2psCopyText(p->data.text); break; default: break; } return prim; } static GLboolean gl2psSamePosition(GL2PSxyz p1, GL2PSxyz p2) { if(!GL2PS_ZERO(p1[0] - p2[0]) || !GL2PS_ZERO(p1[1] - p2[1]) || !GL2PS_ZERO(p1[2] - p2[2])) return GL_FALSE; return GL_TRUE; } /********************************************************************* * * 3D sorting routines * *********************************************************************/ static GLfloat gl2psComparePointPlane(GL2PSxyz point, GL2PSplane plane) { return(plane[0] * point[0] + plane[1] * point[1] + plane[2] * point[2] + plane[3]); } static GLfloat gl2psPsca(GLfloat *a, GLfloat *b) { return(a[0]*b[0] + a[1]*b[1] + a[2]*b[2]); } static void gl2psPvec(GLfloat *a, GLfloat *b, GLfloat *c) { c[0] = a[1]*b[2] - a[2]*b[1]; c[1] = a[2]*b[0] - a[0]*b[2]; c[2] = a[0]*b[1] - a[1]*b[0]; } static GLfloat gl2psNorm(GLfloat *a) { return (GLfloat)sqrt(a[0]*a[0] + a[1]*a[1] + a[2]*a[2]); } static void gl2psGetNormal(GLfloat *a, GLfloat *b, GLfloat *c) { GLfloat norm; gl2psPvec(a, b, c); if(!GL2PS_ZERO(norm = gl2psNorm(c))){ c[0] = c[0] / norm; c[1] = c[1] / norm; c[2] = c[2] / norm; } else{ /* The plane is still wrong despite our tests in gl2psGetPlane. Let's return a dummy value for now (this is a hack: we should do more intelligent tests in GetPlane) */ c[0] = c[1] = 0.0F; c[2] = 1.0F; } } static void gl2psGetPlane(GL2PSprimitive *prim, GL2PSplane plane) { GL2PSxyz v = {0.0F, 0.0F, 0.0F}, w = {0.0F, 0.0F, 0.0F}; switch(prim->type){ case GL2PS_TRIANGLE : case GL2PS_QUADRANGLE : v[0] = prim->verts[1].xyz[0] - prim->verts[0].xyz[0]; v[1] = prim->verts[1].xyz[1] - prim->verts[0].xyz[1]; v[2] = prim->verts[1].xyz[2] - prim->verts[0].xyz[2]; w[0] = prim->verts[2].xyz[0] - prim->verts[0].xyz[0]; w[1] = prim->verts[2].xyz[1] - prim->verts[0].xyz[1]; w[2] = prim->verts[2].xyz[2] - prim->verts[0].xyz[2]; if((GL2PS_ZERO(v[0]) && GL2PS_ZERO(v[1]) && GL2PS_ZERO(v[2])) || (GL2PS_ZERO(w[0]) && GL2PS_ZERO(w[1]) && GL2PS_ZERO(w[2]))){ plane[0] = plane[1] = 0.0F; plane[2] = 1.0F; plane[3] = -prim->verts[0].xyz[2]; } else{ gl2psGetNormal(v, w, plane); plane[3] = - plane[0] * prim->verts[0].xyz[0] - plane[1] * prim->verts[0].xyz[1] - plane[2] * prim->verts[0].xyz[2]; } break; case GL2PS_LINE : v[0] = prim->verts[1].xyz[0] - prim->verts[0].xyz[0]; v[1] = prim->verts[1].xyz[1] - prim->verts[0].xyz[1]; v[2] = prim->verts[1].xyz[2] - prim->verts[0].xyz[2]; if(GL2PS_ZERO(v[0]) && GL2PS_ZERO(v[1]) && GL2PS_ZERO(v[2])){ plane[0] = plane[1] = 0.0F; plane[2] = 1.0F; plane[3] = -prim->verts[0].xyz[2]; } else{ if(GL2PS_ZERO(v[0])) w[0] = 1.0F; else if(GL2PS_ZERO(v[1])) w[1] = 1.0F; else w[2] = 1.0F; gl2psGetNormal(v, w, plane); plane[3] = - plane[0] * prim->verts[0].xyz[0] - plane[1] * prim->verts[0].xyz[1] - plane[2] * prim->verts[0].xyz[2]; } break; case GL2PS_POINT : case GL2PS_PIXMAP : case GL2PS_TEXT : case GL2PS_SPECIAL : case GL2PS_IMAGEMAP: plane[0] = plane[1] = 0.0F; plane[2] = 1.0F; plane[3] = -prim->verts[0].xyz[2]; break; default : gl2psMsg(GL2PS_ERROR, "Unknown primitive type in BSP tree"); plane[0] = plane[1] = plane[3] = 0.0F; plane[2] = 1.0F; break; } } static void gl2psCutEdge(GL2PSvertex *a, GL2PSvertex *b, GL2PSplane plane, GL2PSvertex *c) { GL2PSxyz v; GLfloat sect; v[0] = b->xyz[0] - a->xyz[0]; v[1] = b->xyz[1] - a->xyz[1]; v[2] = b->xyz[2] - a->xyz[2]; sect = - gl2psComparePointPlane(a->xyz, plane) / gl2psPsca(plane, v); c->xyz[0] = a->xyz[0] + v[0] * sect; c->xyz[1] = a->xyz[1] + v[1] * sect; c->xyz[2] = a->xyz[2] + v[2] * sect; c->rgba[0] = (1 - sect) * a->rgba[0] + sect * b->rgba[0]; c->rgba[1] = (1 - sect) * a->rgba[1] + sect * b->rgba[1]; c->rgba[2] = (1 - sect) * a->rgba[2] + sect * b->rgba[2]; c->rgba[3] = (1 - sect) * a->rgba[3] + sect * b->rgba[3]; } static void gl2psCreateSplitPrimitive(GL2PSprimitive *parent, GL2PSplane plane, GL2PSprimitive *child, GLshort numverts, GLshort *index0, GLshort *index1) { GLshort i; if(parent->type == GL2PS_IMAGEMAP){ child->type = GL2PS_IMAGEMAP; child->data.image = parent->data.image; } else{ if(numverts > 4){ gl2psMsg(GL2PS_WARNING, "%d vertices in polygon", numverts); numverts = 4; } switch(numverts){ case 1 : child->type = GL2PS_POINT; break; case 2 : child->type = GL2PS_LINE; break; case 3 : child->type = GL2PS_TRIANGLE; break; case 4 : child->type = GL2PS_QUADRANGLE; break; default: child->type = GL2PS_NO_TYPE; break; } } child->boundary = 0; /* FIXME: not done! */ child->culled = parent->culled; child->offset = parent->offset; child->pattern = parent->pattern; child->factor = parent->factor; child->width = parent->width; child->numverts = numverts; child->verts = (GL2PSvertex*)gl2psMalloc(numverts * sizeof(GL2PSvertex)); for(i = 0; i < numverts; i++){ if(index1[i] < 0){ child->verts[i] = parent->verts[index0[i]]; } else{ gl2psCutEdge(&parent->verts[index0[i]], &parent->verts[index1[i]], plane, &child->verts[i]); } } } static void gl2psAddIndex(GLshort *index0, GLshort *index1, GLshort *nb, GLshort i, GLshort j) { GLint k; for(k = 0; k < *nb; k++){ if((index0[k] == i && index1[k] == j) || (index1[k] == i && index0[k] == j)) return; } index0[*nb] = i; index1[*nb] = j; (*nb)++; } static GLshort gl2psGetIndex(GLshort i, GLshort num) { return (i < num - 1) ? i + 1 : 0; } static GLint gl2psTestSplitPrimitive(GL2PSprimitive *prim, GL2PSplane plane) { GLint type = GL2PS_COINCIDENT; GLshort i, j; GLfloat d[5]; for(i = 0; i < prim->numverts; i++){ d[i] = gl2psComparePointPlane(prim->verts[i].xyz, plane); } if(prim->numverts < 2){ return 0; } else{ for(i = 0; i < prim->numverts; i++){ j = gl2psGetIndex(i, prim->numverts); if(d[j] > GL2PS_EPSILON){ if(type == GL2PS_COINCIDENT) type = GL2PS_IN_BACK_OF; else if(type != GL2PS_IN_BACK_OF) return 1; if(d[i] < -GL2PS_EPSILON) return 1; } else if(d[j] < -GL2PS_EPSILON){ if(type == GL2PS_COINCIDENT) type = GL2PS_IN_FRONT_OF; else if(type != GL2PS_IN_FRONT_OF) return 1; if(d[i] > GL2PS_EPSILON) return 1; } } } return 0; } static GLint gl2psSplitPrimitive(GL2PSprimitive *prim, GL2PSplane plane, GL2PSprimitive **front, GL2PSprimitive **back) { GLshort i, j, in = 0, out = 0, in0[5], in1[5], out0[5], out1[5]; GLint type; GLfloat d[5]; type = GL2PS_COINCIDENT; for(i = 0; i < prim->numverts; i++){ d[i] = gl2psComparePointPlane(prim->verts[i].xyz, plane); } switch(prim->type){ case GL2PS_POINT : if(d[0] > GL2PS_EPSILON) type = GL2PS_IN_BACK_OF; else if(d[0] < -GL2PS_EPSILON) type = GL2PS_IN_FRONT_OF; else type = GL2PS_COINCIDENT; break; default : for(i = 0; i < prim->numverts; i++){ j = gl2psGetIndex(i, prim->numverts); if(d[j] > GL2PS_EPSILON){ if(type == GL2PS_COINCIDENT) type = GL2PS_IN_BACK_OF; else if(type != GL2PS_IN_BACK_OF) type = GL2PS_SPANNING; if(d[i] < -GL2PS_EPSILON){ gl2psAddIndex(in0, in1, &in, i, j); gl2psAddIndex(out0, out1, &out, i, j); type = GL2PS_SPANNING; } gl2psAddIndex(out0, out1, &out, j, -1); } else if(d[j] < -GL2PS_EPSILON){ if(type == GL2PS_COINCIDENT) type = GL2PS_IN_FRONT_OF; else if(type != GL2PS_IN_FRONT_OF) type = GL2PS_SPANNING; if(d[i] > GL2PS_EPSILON){ gl2psAddIndex(in0, in1, &in, i, j); gl2psAddIndex(out0, out1, &out, i, j); type = GL2PS_SPANNING; } gl2psAddIndex(in0, in1, &in, j, -1); } else{ gl2psAddIndex(in0, in1, &in, j, -1); gl2psAddIndex(out0, out1, &out, j, -1); } } break; } if(type == GL2PS_SPANNING){ *back = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); *front = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); gl2psCreateSplitPrimitive(prim, plane, *back, out, out0, out1); gl2psCreateSplitPrimitive(prim, plane, *front, in, in0, in1); } return type; } static void gl2psDivideQuad(GL2PSprimitive *quad, GL2PSprimitive **t1, GL2PSprimitive **t2) { *t1 = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); *t2 = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); (*t1)->type = (*t2)->type = GL2PS_TRIANGLE; (*t1)->numverts = (*t2)->numverts = 3; (*t1)->culled = (*t2)->culled = quad->culled; (*t1)->offset = (*t2)->offset = quad->offset; (*t1)->pattern = (*t2)->pattern = quad->pattern; (*t1)->factor = (*t2)->factor = quad->factor; (*t1)->width = (*t2)->width = quad->width; (*t1)->verts = (GL2PSvertex*)gl2psMalloc(3 * sizeof(GL2PSvertex)); (*t2)->verts = (GL2PSvertex*)gl2psMalloc(3 * sizeof(GL2PSvertex)); (*t1)->verts[0] = quad->verts[0]; (*t1)->verts[1] = quad->verts[1]; (*t1)->verts[2] = quad->verts[2]; (*t1)->boundary = ((quad->boundary & 1) ? 1 : 0) | ((quad->boundary & 2) ? 2 : 0); (*t2)->verts[0] = quad->verts[0]; (*t2)->verts[1] = quad->verts[2]; (*t2)->verts[2] = quad->verts[3]; (*t1)->boundary = ((quad->boundary & 4) ? 2 : 0) | ((quad->boundary & 4) ? 2 : 0); } static int gl2psCompareDepth(const void *a, const void *b) { GL2PSprimitive *q, *w; GLfloat dq = 0.0F, dw = 0.0F, diff; int i; q = *(GL2PSprimitive**)a; w = *(GL2PSprimitive**)b; for(i = 0; i < q->numverts; i++){ dq += q->verts[i].xyz[2]; } dq /= (GLfloat)q->numverts; for(i = 0; i < w->numverts; i++){ dw += w->verts[i].xyz[2]; } dw /= (GLfloat)w->numverts; diff = dq - dw; if(diff > 0.){ return -1; } else if(diff < 0.){ return 1; } else{ return 0; } } static int gl2psTrianglesFirst(const void *a, const void *b) { GL2PSprimitive *q, *w; q = *(GL2PSprimitive**)a; w = *(GL2PSprimitive**)b; return(q->type < w->type ? 1 : -1); } static GLint gl2psFindRoot(GL2PSlist *primitives, GL2PSprimitive **root) { GLint i, j, count, best = 1000000, index = 0; GL2PSprimitive *prim1, *prim2; GL2PSplane plane; GLint maxp; if(!gl2psListNbr(primitives)){ gl2psMsg(GL2PS_ERROR, "Cannot fint root in empty primitive list"); return 0; } *root = *(GL2PSprimitive**)gl2psListPointer(primitives, 0); if(gl2ps->options & GL2PS_BEST_ROOT){ maxp = gl2psListNbr(primitives); if(maxp > gl2ps->maxbestroot){ maxp = gl2ps->maxbestroot; } for(i = 0; i < maxp; i++){ prim1 = *(GL2PSprimitive**)gl2psListPointer(primitives, i); gl2psGetPlane(prim1, plane); count = 0; for(j = 0; j < gl2psListNbr(primitives); j++){ if(j != i){ prim2 = *(GL2PSprimitive**)gl2psListPointer(primitives, j); count += gl2psTestSplitPrimitive(prim2, plane); } if(count > best) break; } if(count < best){ best = count; index = i; *root = prim1; if(!count) return index; } } /* if(index) gl2psMsg(GL2PS_INFO, "GL2PS_BEST_ROOT was worth it: %d", index); */ return index; } else{ return 0; } } static void gl2psFreeImagemap(GL2PSimagemap *list){ GL2PSimagemap *next; while(list != NULL){ next = list->next; gl2psFree(list->image->pixels); gl2psFree(list->image); gl2psFree(list); list = next; } } static void gl2psFreePrimitive(void *data) { GL2PSprimitive *q; q = *(GL2PSprimitive**)data; gl2psFree(q->verts); if(q->type == GL2PS_TEXT || q->type == GL2PS_SPECIAL){ gl2psFreeText(q->data.text); } else if(q->type == GL2PS_PIXMAP){ gl2psFreePixmap(q->data.image); } gl2psFree(q); } static void gl2psAddPrimitiveInList(GL2PSprimitive *prim, GL2PSlist *list) { GL2PSprimitive *t1, *t2; if(prim->type != GL2PS_QUADRANGLE){ gl2psListAdd(list, &prim); } else{ gl2psDivideQuad(prim, &t1, &t2); gl2psListAdd(list, &t1); gl2psListAdd(list, &t2); gl2psFreePrimitive(&prim); } } static void gl2psFreeBspTree(GL2PSbsptree **tree) { if(*tree){ if((*tree)->back) gl2psFreeBspTree(&(*tree)->back); if((*tree)->primitives){ gl2psListAction((*tree)->primitives, gl2psFreePrimitive); gl2psListDelete((*tree)->primitives); } if((*tree)->front) gl2psFreeBspTree(&(*tree)->front); gl2psFree(*tree); *tree = NULL; } } static GLboolean gl2psGreater(GLfloat f1, GLfloat f2) { if(f1 > f2) return GL_TRUE; else return GL_FALSE; } static GLboolean gl2psLess(GLfloat f1, GLfloat f2) { if(f1 < f2) return GL_TRUE; else return GL_FALSE; } static void gl2psBuildBspTree(GL2PSbsptree *tree, GL2PSlist *primitives) { GL2PSprimitive *prim, *frontprim = NULL, *backprim = NULL; GL2PSlist *frontlist, *backlist; GLint i, index; tree->front = NULL; tree->back = NULL; tree->primitives = gl2psListCreate(1, 2, sizeof(GL2PSprimitive*)); index = gl2psFindRoot(primitives, &prim); gl2psGetPlane(prim, tree->plane); gl2psAddPrimitiveInList(prim, tree->primitives); frontlist = gl2psListCreate(1, 2, sizeof(GL2PSprimitive*)); backlist = gl2psListCreate(1, 2, sizeof(GL2PSprimitive*)); for(i = 0; i < gl2psListNbr(primitives); i++){ if(i != index){ prim = *(GL2PSprimitive**)gl2psListPointer(primitives,i); switch(gl2psSplitPrimitive(prim, tree->plane, &frontprim, &backprim)){ case GL2PS_COINCIDENT: gl2psAddPrimitiveInList(prim, tree->primitives); break; case GL2PS_IN_BACK_OF: gl2psAddPrimitiveInList(prim, backlist); break; case GL2PS_IN_FRONT_OF: gl2psAddPrimitiveInList(prim, frontlist); break; case GL2PS_SPANNING: gl2psAddPrimitiveInList(backprim, backlist); gl2psAddPrimitiveInList(frontprim, frontlist); gl2psFreePrimitive(&prim); break; } } } if(gl2psListNbr(tree->primitives)){ gl2psListSort(tree->primitives, gl2psTrianglesFirst); } if(gl2psListNbr(frontlist)){ gl2psListSort(frontlist, gl2psTrianglesFirst); tree->front = (GL2PSbsptree*)gl2psMalloc(sizeof(GL2PSbsptree)); gl2psBuildBspTree(tree->front, frontlist); } else{ gl2psListDelete(frontlist); } if(gl2psListNbr(backlist)){ gl2psListSort(backlist, gl2psTrianglesFirst); tree->back = (GL2PSbsptree*)gl2psMalloc(sizeof(GL2PSbsptree)); gl2psBuildBspTree(tree->back, backlist); } else{ gl2psListDelete(backlist); } gl2psListDelete(primitives); } static void gl2psTraverseBspTree(GL2PSbsptree *tree, GL2PSxyz eye, GLfloat epsilon, GLboolean (*compare)(GLfloat f1, GLfloat f2), void (*action)(void *data), int inverse) { GLfloat result; if(!tree) return; result = gl2psComparePointPlane(eye, tree->plane); if(GL_TRUE == compare(result, epsilon)){ gl2psTraverseBspTree(tree->back, eye, epsilon, compare, action, inverse); if(inverse){ gl2psListActionInverse(tree->primitives, action); } else{ gl2psListAction(tree->primitives, action); } gl2psTraverseBspTree(tree->front, eye, epsilon, compare, action, inverse); } else if(GL_TRUE == compare(-epsilon, result)){ gl2psTraverseBspTree(tree->front, eye, epsilon, compare, action, inverse); if(inverse){ gl2psListActionInverse(tree->primitives, action); } else{ gl2psListAction(tree->primitives, action); } gl2psTraverseBspTree(tree->back, eye, epsilon, compare, action, inverse); } else{ gl2psTraverseBspTree(tree->front, eye, epsilon, compare, action, inverse); gl2psTraverseBspTree(tree->back, eye, epsilon, compare, action, inverse); } } static void gl2psRescaleAndOffset() { GL2PSprimitive *prim; GLfloat minZ, maxZ, rangeZ, scaleZ; GLfloat factor, units, area, dZ, dZdX, dZdY, maxdZ; int i, j; if(!gl2psListNbr(gl2ps->primitives)) return; /* get z-buffer range */ prim = *(GL2PSprimitive**)gl2psListPointer(gl2ps->primitives, 0); minZ = maxZ = prim->verts[0].xyz[2]; for(i = 1; i < prim->numverts; i++){ if(prim->verts[i].xyz[2] < minZ) minZ = prim->verts[i].xyz[2]; if(prim->verts[i].xyz[2] > maxZ) maxZ = prim->verts[i].xyz[2]; } for(i = 1; i < gl2psListNbr(gl2ps->primitives); i++){ prim = *(GL2PSprimitive**)gl2psListPointer(gl2ps->primitives, i); for(j = 0; j < prim->numverts; j++){ if(prim->verts[j].xyz[2] < minZ) minZ = prim->verts[j].xyz[2]; if(prim->verts[j].xyz[2] > maxZ) maxZ = prim->verts[j].xyz[2]; } } rangeZ = (maxZ - minZ); /* rescale z-buffer coordinate in [0,GL2PS_ZSCALE], to make it of the same order of magnitude as the x and y coordinates */ scaleZ = GL2PS_ZERO(rangeZ) ? GL2PS_ZSCALE : (GL2PS_ZSCALE / rangeZ); /* avoid precision loss (we use floats!) */ if(scaleZ > 100000.F) scaleZ = 100000.F; /* apply offsets */ for(i = 0; i < gl2psListNbr(gl2ps->primitives); i++){ prim = *(GL2PSprimitive**)gl2psListPointer(gl2ps->primitives, i); for(j = 0; j < prim->numverts; j++){ prim->verts[j].xyz[2] = (prim->verts[j].xyz[2] - minZ) * scaleZ; } if((gl2ps->options & GL2PS_SIMPLE_LINE_OFFSET) && (prim->type == GL2PS_LINE)){ if(gl2ps->sort == GL2PS_SIMPLE_SORT){ prim->verts[0].xyz[2] -= GL2PS_ZOFFSET_LARGE; prim->verts[1].xyz[2] -= GL2PS_ZOFFSET_LARGE; } else{ prim->verts[0].xyz[2] -= GL2PS_ZOFFSET; prim->verts[1].xyz[2] -= GL2PS_ZOFFSET; } } else if(prim->offset && (prim->type == GL2PS_TRIANGLE)){ factor = gl2ps->offset[0]; units = gl2ps->offset[1]; area = (prim->verts[1].xyz[0] - prim->verts[0].xyz[0]) * (prim->verts[2].xyz[1] - prim->verts[1].xyz[1]) - (prim->verts[2].xyz[0] - prim->verts[1].xyz[0]) * (prim->verts[1].xyz[1] - prim->verts[0].xyz[1]); dZdX = ((prim->verts[2].xyz[1] - prim->verts[1].xyz[1]) * (prim->verts[1].xyz[2] - prim->verts[0].xyz[2]) - (prim->verts[1].xyz[1] - prim->verts[0].xyz[1]) * (prim->verts[2].xyz[2] - prim->verts[1].xyz[2])) / area; dZdY = ((prim->verts[1].xyz[0] - prim->verts[0].xyz[0]) * (prim->verts[2].xyz[2] - prim->verts[1].xyz[2]) - (prim->verts[2].xyz[0] - prim->verts[1].xyz[0]) * (prim->verts[1].xyz[2] - prim->verts[0].xyz[2])) / area; maxdZ = (GLfloat)sqrt(dZdX * dZdX + dZdY * dZdY); dZ = factor * maxdZ + units; prim->verts[0].xyz[2] += dZ; prim->verts[1].xyz[2] += dZ; prim->verts[2].xyz[2] += dZ; } } } /********************************************************************* * * 2D sorting routines (for occlusion culling) * *********************************************************************/ static GLint gl2psGetPlaneFromPoints(GL2PSxyz a, GL2PSxyz b, GL2PSplane plane) { GLfloat n; plane[0] = b[1] - a[1]; plane[1] = a[0] - b[0]; n = (GLfloat)sqrt(plane[0]*plane[0] + plane[1]*plane[1]); plane[2] = 0.0F; if(!GL2PS_ZERO(n)){ plane[0] /= n; plane[1] /= n; plane[3] = -plane[0]*a[0]-plane[1]*a[1]; return 1; } else{ plane[0] = -1.0F; plane[1] = 0.0F; plane[3] = a[0]; return 0; } } static void gl2psFreeBspImageTree(GL2PSbsptree2d **tree) { if(*tree){ if((*tree)->back) gl2psFreeBspImageTree(&(*tree)->back); if((*tree)->front) gl2psFreeBspImageTree(&(*tree)->front); gl2psFree(*tree); *tree = NULL; } } static GLint gl2psCheckPoint(GL2PSxyz point, GL2PSplane plane) { GLfloat pt_dis; pt_dis = gl2psComparePointPlane(point, plane); if(pt_dis > GL2PS_EPSILON) return GL2PS_POINT_INFRONT; else if(pt_dis < -GL2PS_EPSILON) return GL2PS_POINT_BACK; else return GL2PS_POINT_COINCIDENT; } static void gl2psAddPlanesInBspTreeImage(GL2PSprimitive *prim, GL2PSbsptree2d **tree) { GLint ret = 0; GLint i; GLint offset = 0; GL2PSbsptree2d *head = NULL, *cur = NULL; if((*tree == NULL) && (prim->numverts > 2)){ head = (GL2PSbsptree2d*)gl2psMalloc(sizeof(GL2PSbsptree2d)); for(i = 0; i < prim->numverts-1; i++){ if(!gl2psGetPlaneFromPoints(prim->verts[i].xyz, prim->verts[i+1].xyz, head->plane)){ if(prim->numverts-i > 3){ offset++; } else{ gl2psFree(head); return; } } else{ break; } } head->back = NULL; head->front = NULL; for(i = 2+offset; i < prim->numverts; i++){ ret = gl2psCheckPoint(prim->verts[i].xyz, head->plane); if(ret != GL2PS_POINT_COINCIDENT) break; } switch(ret){ case GL2PS_POINT_INFRONT : cur = head; for(i = 1+offset; i < prim->numverts-1; i++){ if(cur->front == NULL){ cur->front = (GL2PSbsptree2d*)gl2psMalloc(sizeof(GL2PSbsptree2d)); } if(gl2psGetPlaneFromPoints(prim->verts[i].xyz, prim->verts[i+1].xyz, cur->front->plane)){ cur = cur->front; cur->front = NULL; cur->back = NULL; } } if(cur->front == NULL){ cur->front = (GL2PSbsptree2d*)gl2psMalloc(sizeof(GL2PSbsptree2d)); } if(gl2psGetPlaneFromPoints(prim->verts[i].xyz, prim->verts[offset].xyz, cur->front->plane)){ cur->front->front = NULL; cur->front->back = NULL; } else{ gl2psFree(cur->front); cur->front = NULL; } break; case GL2PS_POINT_BACK : for(i = 0; i < 4; i++){ head->plane[i] = -head->plane[i]; } cur = head; for(i = 1+offset; i < prim->numverts-1; i++){ if(cur->front == NULL){ cur->front = (GL2PSbsptree2d*)gl2psMalloc(sizeof(GL2PSbsptree2d)); } if(gl2psGetPlaneFromPoints(prim->verts[i+1].xyz, prim->verts[i].xyz, cur->front->plane)){ cur = cur->front; cur->front = NULL; cur->back = NULL; } } if(cur->front == NULL){ cur->front = (GL2PSbsptree2d*)gl2psMalloc(sizeof(GL2PSbsptree2d)); } if(gl2psGetPlaneFromPoints(prim->verts[offset].xyz, prim->verts[i].xyz, cur->front->plane)){ cur->front->front = NULL; cur->front->back = NULL; } else{ gl2psFree(cur->front); cur->front = NULL; } break; default: gl2psFree(head); return; } (*tree) = head; } } static GLint gl2psCheckPrimitive(GL2PSprimitive *prim, GL2PSplane plane) { GLint i; GLint pos; pos = gl2psCheckPoint(prim->verts[0].xyz, plane); for(i = 1; i < prim->numverts; i++){ pos |= gl2psCheckPoint(prim->verts[i].xyz, plane); if(pos == (GL2PS_POINT_INFRONT | GL2PS_POINT_BACK)) return GL2PS_SPANNING; } if(pos & GL2PS_POINT_INFRONT) return GL2PS_IN_FRONT_OF; else if(pos & GL2PS_POINT_BACK) return GL2PS_IN_BACK_OF; else return GL2PS_COINCIDENT; } static GL2PSprimitive *gl2psCreateSplitPrimitive2D(GL2PSprimitive *parent, GLshort numverts, GL2PSvertex *vertx) { GLint i; GL2PSprimitive *child = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); if(parent->type == GL2PS_IMAGEMAP){ child->type = GL2PS_IMAGEMAP; child->data.image = parent->data.image; } else { switch(numverts){ case 1 : child->type = GL2PS_POINT; break; case 2 : child->type = GL2PS_LINE; break; case 3 : child->type = GL2PS_TRIANGLE; break; case 4 : child->type = GL2PS_QUADRANGLE; break; default: child->type = GL2PS_NO_TYPE; break; /* FIXME */ } } child->boundary = 0; /* FIXME: not done! */ child->culled = parent->culled; child->offset = parent->offset; child->pattern = parent->pattern; child->factor = parent->factor; child->width = parent->width; child->numverts = numverts; child->verts = (GL2PSvertex*)gl2psMalloc(numverts * sizeof(GL2PSvertex)); for(i = 0; i < numverts; i++){ child->verts[i] = vertx[i]; } return child; } static void gl2psSplitPrimitive2D(GL2PSprimitive *prim, GL2PSplane plane, GL2PSprimitive **front, GL2PSprimitive **back) { /* cur will hold the position of the current vertex prev will hold the position of the previous vertex prev0 will hold the position of the vertex number 0 v1 and v2 represent the current and previous vertices, respectively flag is set if the current vertex should be checked against the plane */ GLint cur = -1, prev = -1, i, v1 = 0, v2 = 0, flag = 1, prev0 = -1; /* list of vertices that will go in front and back primitive */ GL2PSvertex *front_list = NULL, *back_list = NULL; /* number of vertices in front and back list */ GLshort front_count = 0, back_count = 0; for(i = 0; i <= prim->numverts; i++){ v1 = i; if(v1 == prim->numverts){ if(prim->numverts < 3) break; v1 = 0; v2 = prim->numverts-1; cur = prev0; } else if(flag){ cur = gl2psCheckPoint(prim->verts[v1].xyz, plane); if(i == 0){ prev0 = cur; } } if(((prev == -1) || (prev == cur) || (prev == 0) || (cur == 0)) && (i < prim->numverts)){ if(cur == GL2PS_POINT_INFRONT){ front_count++; front_list = (GL2PSvertex*)gl2psRealloc(front_list, sizeof(GL2PSvertex)*front_count); front_list[front_count-1] = prim->verts[v1]; } else if(cur == GL2PS_POINT_BACK){ back_count++; back_list = (GL2PSvertex*)gl2psRealloc(back_list, sizeof(GL2PSvertex)*back_count); back_list[back_count-1] = prim->verts[v1]; } else{ front_count++; front_list = (GL2PSvertex*)gl2psRealloc(front_list, sizeof(GL2PSvertex)*front_count); front_list[front_count-1] = prim->verts[v1]; back_count++; back_list = (GL2PSvertex*)gl2psRealloc(back_list, sizeof(GL2PSvertex)*back_count); back_list[back_count-1] = prim->verts[v1]; } flag = 1; } else if((prev != cur) && (cur != 0) && (prev != 0)){ if(v1 != 0){ v2 = v1-1; i--; } front_count++; front_list = (GL2PSvertex*)gl2psRealloc(front_list, sizeof(GL2PSvertex)*front_count); gl2psCutEdge(&prim->verts[v2], &prim->verts[v1], plane, &front_list[front_count-1]); back_count++; back_list = (GL2PSvertex*)gl2psRealloc(back_list, sizeof(GL2PSvertex)*back_count); back_list[back_count-1] = front_list[front_count-1]; flag = 0; } prev = cur; } *front = gl2psCreateSplitPrimitive2D(prim, front_count, front_list); *back = gl2psCreateSplitPrimitive2D(prim, back_count, back_list); gl2psFree(front_list); gl2psFree(back_list); } static GLint gl2psAddInBspImageTree(GL2PSprimitive *prim, GL2PSbsptree2d **tree) { GLint ret = 0; GL2PSprimitive *frontprim = NULL, *backprim = NULL; /* FIXME: until we consider the actual extent of text strings and pixmaps, never cull them. Otherwise the whole string/pixmap gets culled as soon as the reference point is hidden */ if(prim->type == GL2PS_PIXMAP || prim->type == GL2PS_TEXT || prim->type == GL2PS_SPECIAL){ return 1; } if(*tree == NULL){ if((prim->type != GL2PS_IMAGEMAP) && (GL_FALSE == gl2ps->zerosurfacearea)){ gl2psAddPlanesInBspTreeImage(gl2ps->primitivetoadd, tree); } return 1; } else{ switch(gl2psCheckPrimitive(prim, (*tree)->plane)){ case GL2PS_IN_BACK_OF: return gl2psAddInBspImageTree(prim, &(*tree)->back); case GL2PS_IN_FRONT_OF: if((*tree)->front != NULL) return gl2psAddInBspImageTree(prim, &(*tree)->front); else return 0; case GL2PS_SPANNING: gl2psSplitPrimitive2D(prim, (*tree)->plane, &frontprim, &backprim); ret = gl2psAddInBspImageTree(backprim, &(*tree)->back); if((*tree)->front != NULL){ if(gl2psAddInBspImageTree(frontprim, &(*tree)->front)){ ret = 1; } } gl2psFree(frontprim->verts); gl2psFree(frontprim); gl2psFree(backprim->verts); gl2psFree(backprim); return ret; case GL2PS_COINCIDENT: if((*tree)->back != NULL){ gl2ps->zerosurfacearea = GL_TRUE; ret = gl2psAddInBspImageTree(prim, &(*tree)->back); gl2ps->zerosurfacearea = GL_FALSE; if(ret) return ret; } if((*tree)->front != NULL){ gl2ps->zerosurfacearea = GL_TRUE; ret = gl2psAddInBspImageTree(prim, &(*tree)->front); gl2ps->zerosurfacearea = GL_FALSE; if(ret) return ret; } if(prim->type == GL2PS_LINE) return 1; else return 0; } } return 0; } static void gl2psAddInImageTree(void *data) { GL2PSprimitive *prim = *(GL2PSprimitive **)data; gl2ps->primitivetoadd = prim; if(prim->type == GL2PS_IMAGEMAP && prim->data.image->format == GL2PS_IMAGEMAP_VISIBLE){ prim->culled = 1; } else if(!gl2psAddInBspImageTree(prim, &gl2ps->imagetree)){ prim->culled = 1; } else if(prim->type == GL2PS_IMAGEMAP){ prim->data.image->format = GL2PS_IMAGEMAP_VISIBLE; } } /* Boundary construction */ static void gl2psAddBoundaryInList(GL2PSprimitive *prim, GL2PSlist *list) { GL2PSprimitive *b; GLshort i; GL2PSxyz c; c[0] = c[1] = c[2] = 0.0F; for(i = 0; i < prim->numverts; i++){ c[0] += prim->verts[i].xyz[0]; c[1] += prim->verts[i].xyz[1]; } c[0] /= prim->numverts; c[1] /= prim->numverts; for(i = 0; i < prim->numverts; i++){ if(prim->boundary & (GLint)pow(2., i)){ b = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); b->type = GL2PS_LINE; b->offset = prim->offset; b->pattern = prim->pattern; b->factor = prim->factor; b->culled = prim->culled; b->width = prim->width; b->boundary = 0; b->numverts = 2; b->verts = (GL2PSvertex*)gl2psMalloc(2 * sizeof(GL2PSvertex)); #if 0 /* FIXME: need to work on boundary offset... */ v[0] = c[0] - prim->verts[i].xyz[0]; v[1] = c[1] - prim->verts[i].xyz[1]; v[2] = 0.0F; norm = gl2psNorm(v); v[0] /= norm; v[1] /= norm; b->verts[0].xyz[0] = prim->verts[i].xyz[0] +0.1*v[0]; b->verts[0].xyz[1] = prim->verts[i].xyz[1] +0.1*v[1]; b->verts[0].xyz[2] = prim->verts[i].xyz[2]; v[0] = c[0] - prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[0]; v[1] = c[1] - prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[1]; norm = gl2psNorm(v); v[0] /= norm; v[1] /= norm; b->verts[1].xyz[0] = prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[0] +0.1*v[0]; b->verts[1].xyz[1] = prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[1] +0.1*v[1]; b->verts[1].xyz[2] = prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[2]; #else b->verts[0].xyz[0] = prim->verts[i].xyz[0]; b->verts[0].xyz[1] = prim->verts[i].xyz[1]; b->verts[0].xyz[2] = prim->verts[i].xyz[2]; b->verts[1].xyz[0] = prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[0]; b->verts[1].xyz[1] = prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[1]; b->verts[1].xyz[2] = prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[2]; #endif b->verts[0].rgba[0] = 0.0F; b->verts[0].rgba[1] = 0.0F; b->verts[0].rgba[2] = 0.0F; b->verts[0].rgba[3] = 0.0F; b->verts[1].rgba[0] = 0.0F; b->verts[1].rgba[1] = 0.0F; b->verts[1].rgba[2] = 0.0F; b->verts[1].rgba[3] = 0.0F; gl2psListAdd(list, &b); } } } static void gl2psBuildPolygonBoundary(GL2PSbsptree *tree) { GLint i; GL2PSprimitive *prim; if(!tree) return; gl2psBuildPolygonBoundary(tree->back); for(i = 0; i < gl2psListNbr(tree->primitives); i++){ prim = *(GL2PSprimitive**)gl2psListPointer(tree->primitives, i); if(prim->boundary) gl2psAddBoundaryInList(prim, tree->primitives); } gl2psBuildPolygonBoundary(tree->front); } /********************************************************************* * * Feedback buffer parser * *********************************************************************/ static void gl2psAddPolyPrimitive(GLshort type, GLshort numverts, GL2PSvertex *verts, GLint offset, GLushort pattern, GLint factor, GLfloat width, char boundary) { GL2PSprimitive *prim; prim = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); prim->type = type; prim->numverts = numverts; prim->verts = (GL2PSvertex*)gl2psMalloc(numverts * sizeof(GL2PSvertex)); memcpy(prim->verts, verts, numverts * sizeof(GL2PSvertex)); prim->boundary = boundary; prim->offset = offset; prim->pattern = pattern; prim->factor = factor; prim->width = width; prim->culled = 0; /* FIXME: here we should have an option to split stretched tris/quads to enhance SIMPLE_SORT */ gl2psListAdd(gl2ps->primitives, &prim); } static GLint gl2psGetVertex(GL2PSvertex *v, GLfloat *p) { GLint i; v->xyz[0] = p[0]; v->xyz[1] = p[1]; v->xyz[2] = p[2]; if(gl2ps->colormode == GL_COLOR_INDEX && gl2ps->colorsize > 0){ i = (GLint)(p[3] + 0.5); v->rgba[0] = gl2ps->colormap[i][0]; v->rgba[1] = gl2ps->colormap[i][1]; v->rgba[2] = gl2ps->colormap[i][2]; v->rgba[3] = gl2ps->colormap[i][3]; return 4; } else{ v->rgba[0] = p[3]; v->rgba[1] = p[4]; v->rgba[2] = p[5]; v->rgba[3] = p[6]; return 7; } } static void gl2psParseFeedbackBuffer(GLint used) { char flag; GLushort pattern = 0; GLboolean boundary; GLint i, sizeoffloat, count, v, vtot, offset = 0, factor = 0, auxindex = 0; GLfloat lwidth = 1.0F, psize = 1.0F; GLfloat *current; GL2PSvertex vertices[3]; GL2PSprimitive *prim; GL2PSimagemap *node; current = gl2ps->feedback; boundary = gl2ps->boundary = GL_FALSE; while(used > 0){ if(GL_TRUE == boundary) gl2ps->boundary = GL_TRUE; switch((GLint)*current){ case GL_POINT_TOKEN : current ++; used --; i = gl2psGetVertex(&vertices[0], current); current += i; used -= i; gl2psAddPolyPrimitive(GL2PS_POINT, 1, vertices, 0, pattern, factor, psize, 0); break; case GL_LINE_TOKEN : case GL_LINE_RESET_TOKEN : current ++; used --; i = gl2psGetVertex(&vertices[0], current); current += i; used -= i; i = gl2psGetVertex(&vertices[1], current); current += i; used -= i; gl2psAddPolyPrimitive(GL2PS_LINE, 2, vertices, 0, pattern, factor, lwidth, 0); break; case GL_POLYGON_TOKEN : count = (GLint)current[1]; current += 2; used -= 2; v = vtot = 0; while(count > 0 && used > 0){ i = gl2psGetVertex(&vertices[v], current); gl2psAdaptVertexForBlending(&vertices[v]); current += i; used -= i; count --; vtot++; if(v == 2){ if(GL_TRUE == boundary){ if(!count && vtot == 2) flag = 1|2|4; else if(!count) flag = 2|4; else if(vtot == 2) flag = 1|2; else flag = 2; } else flag = 0; gl2psAddPolyPrimitive(GL2PS_TRIANGLE, 3, vertices, offset, pattern, factor, 1, flag); vertices[1] = vertices[2]; } else v ++; } break; case GL_BITMAP_TOKEN : case GL_DRAW_PIXEL_TOKEN : case GL_COPY_PIXEL_TOKEN : current ++; used --; i = gl2psGetVertex(&vertices[0], current); current += i; used -= i; break; case GL_PASS_THROUGH_TOKEN : switch((GLint)current[1]){ case GL2PS_BEGIN_OFFSET_TOKEN : offset = 1; break; case GL2PS_END_OFFSET_TOKEN : offset = 0; break; case GL2PS_BEGIN_BOUNDARY_TOKEN : boundary = GL_TRUE; break; case GL2PS_END_BOUNDARY_TOKEN : boundary = GL_FALSE; break; case GL2PS_END_STIPPLE_TOKEN : pattern = factor = 0; break; case GL2PS_BEGIN_BLEND_TOKEN : gl2ps->blending = GL_TRUE; break; case GL2PS_END_BLEND_TOKEN : gl2ps->blending = GL_FALSE; break; case GL2PS_BEGIN_STIPPLE_TOKEN : current += 2; used -= 2; pattern = (GLushort)current[1]; current += 2; used -= 2; factor = (GLint)current[1]; break; case GL2PS_SRC_BLEND_TOKEN : current += 2; used -= 2; gl2ps->blendfunc[0] = (GLint)current[1]; break; case GL2PS_DST_BLEND_TOKEN : current += 2; used -= 2; gl2ps->blendfunc[1] = (GLint)current[1]; break; case GL2PS_POINT_SIZE_TOKEN : current += 2; used -= 2; psize = current[1]; break; case GL2PS_LINE_WIDTH_TOKEN : current += 2; used -= 2; lwidth = current[1]; break; case GL2PS_IMAGEMAP_TOKEN : prim = (GL2PSprimitive *)gl2psMalloc(sizeof(GL2PSprimitive)); prim->type = GL2PS_IMAGEMAP; prim->boundary = 0; prim->numverts = 4; prim->verts = (GL2PSvertex *)gl2psMalloc(4 * sizeof(GL2PSvertex)); prim->culled = 0; prim->offset = 0; prim->pattern = 0; prim->factor = 0; prim->width = 1; node = (GL2PSimagemap*)gl2psMalloc(sizeof(GL2PSimagemap)); node->image = (GL2PSimage*)gl2psMalloc(sizeof(GL2PSimage)); node->image->type = 0; node->image->format = 0; node->next = NULL; if(gl2ps->imagemap_head == NULL) gl2ps->imagemap_head = node; else gl2ps->imagemap_tail->next = node; gl2ps->imagemap_tail = node; prim->data.image = node->image; current += 2; used -= 2; i = gl2psGetVertex(&prim->verts[0], ¤t[1]); current += i; used -= i; node->image->width = (GLint)current[2]; current += 2; used -= 2; node->image->height = (GLint)current[2]; prim->verts[0].xyz[0] = prim->verts[0].xyz[0] - (int)(node->image->width / 2) + 0.5; prim->verts[0].xyz[1] = prim->verts[0].xyz[1] - (int)(node->image->height / 2) + 0.5; for(i = 1; i < 4; i++){ for(v = 0; v < 3; v++){ prim->verts[i].xyz[v] = prim->verts[0].xyz[v]; prim->verts[i].rgba[v] = prim->verts[0].rgba[v]; } prim->verts[i].rgba[v] = prim->verts[0].rgba[v]; } prim->verts[1].xyz[0] = prim->verts[1].xyz[0] + node->image->width; prim->verts[2].xyz[0] = prim->verts[1].xyz[0]; prim->verts[2].xyz[1] = prim->verts[2].xyz[1] + node->image->height; prim->verts[3].xyz[1] = prim->verts[2].xyz[1]; sizeoffloat = sizeof(GLfloat); v = 2 * sizeoffloat; vtot = node->image->height + node->image->height * ((node->image->width-1)/8); node->image->pixels = (GLfloat*)gl2psMalloc(v + vtot); node->image->pixels[0] = prim->verts[0].xyz[0]; node->image->pixels[1] = prim->verts[0].xyz[1]; for(i = 0; i < vtot; i += sizeoffloat){ current += 2; used -= 2; if((vtot - i) >= 4) memcpy(&(((char*)(node->image->pixels))[i + v]), &(current[2]), sizeoffloat); else memcpy(&(((char*)(node->image->pixels))[i + v]), &(current[2]), vtot - i); } current++; used--; gl2psListAdd(gl2ps->primitives, &prim); break; case GL2PS_DRAW_PIXELS_TOKEN : case GL2PS_TEXT_TOKEN : if(auxindex < gl2psListNbr(gl2ps->auxprimitives)) gl2psListAdd(gl2ps->primitives, gl2psListPointer(gl2ps->auxprimitives, auxindex++)); else gl2psMsg(GL2PS_ERROR, "Wrong number of auxiliary tokens in buffer"); break; } current += 2; used -= 2; break; default : gl2psMsg(GL2PS_WARNING, "Unknown token in buffer"); current ++; used --; break; } } gl2psListReset(gl2ps->auxprimitives); } /********************************************************************* * * PostScript routines * *********************************************************************/ static void gl2psWriteByte(unsigned char byte) { unsigned char h = byte / 16; unsigned char l = byte % 16; gl2psPrintf("%x%x", h, l); } static void gl2psPrintPostScriptPixmap(GLfloat x, GLfloat y, GL2PSimage *im) { GLuint nbhex, nbyte, nrgb, nbits; GLuint row, col, ibyte, icase; GLfloat dr, dg, db, fgrey; unsigned char red = 0, green = 0, blue = 0, b, grey; GLuint width = (GLuint)im->width; GLuint height = (GLuint)im->height; /* FIXME: should we define an option for these? Or just keep the 8-bit per component case? */ int greyscale = 0; /* set to 1 to output greyscale image */ int nbit = 8; /* number of bits per color compoment (2, 4 or 8) */ if((width <= 0) || (height <= 0)) return; gl2psPrintf("gsave\n"); gl2psPrintf("%.2f %.2f translate\n", x, y); gl2psPrintf("%d %d scale\n", width, height); if(greyscale){ /* greyscale */ gl2psPrintf("/picstr %d string def\n", width); gl2psPrintf("%d %d %d\n", width, height, 8); gl2psPrintf("[ %d 0 0 -%d 0 %d ]\n", width, height, height); gl2psPrintf("{ currentfile picstr readhexstring pop }\n"); gl2psPrintf("image\n"); for(row = 0; row < height; row++){ for(col = 0; col < width; col++){ gl2psGetRGB(im, col, row, &dr, &dg, &db); fgrey = (0.30 * dr + 0.59 * dg + 0.11 * db); grey = (unsigned char)(255. * fgrey); gl2psWriteByte(grey); } gl2psPrintf("\n"); } nbhex = width * height * 2; gl2psPrintf("%%%% nbhex digit :%d\n", nbhex); } else if(nbit == 2){ /* color, 2 bits for r and g and b; rgbs following each other */ nrgb = width * 3; nbits = nrgb * nbit; nbyte = nbits/8; if((nbyte * 8) != nbits) nbyte++; gl2psPrintf("/rgbstr %d string def\n", nbyte); gl2psPrintf("%d %d %d\n", width, height, nbit); gl2psPrintf("[ %d 0 0 -%d 0 %d ]\n", width, height, height); gl2psPrintf("{ currentfile rgbstr readhexstring pop }\n"); gl2psPrintf("false 3\n"); gl2psPrintf("colorimage\n"); for(row = 0; row < height; row++){ icase = 1; col = 0; b = 0; for(ibyte = 0; ibyte < nbyte; ibyte++){ if(icase == 1) { if(col < width) { gl2psGetRGB(im, col, row, &dr, &dg, &db); } else { dr = dg = db = 0; } col++; red = (unsigned char)(3. * dr); green = (unsigned char)(3. * dg); blue = (unsigned char)(3. * db); b = red; b = (b<<2) + green; b = (b<<2) + blue; if(col < width) { gl2psGetRGB(im, col, row, &dr, &dg, &db); } else { dr = dg = db = 0; } col++; red = (unsigned char)(3. * dr); green = (unsigned char)(3. * dg); blue = (unsigned char)(3. * db); b = (b<<2) + red; gl2psWriteByte(b); b = 0; icase++; } else if(icase == 2) { b = green; b = (b<<2) + blue; if(col < width) { gl2psGetRGB(im, col, row, &dr, &dg, &db); } else { dr = dg = db = 0; } col++; red = (unsigned char)(3. * dr); green = (unsigned char)(3. * dg); blue = (unsigned char)(3. * db); b = (b<<2) + red; b = (b<<2) + green; gl2psWriteByte(b); b = 0; icase++; } else if(icase == 3) { b = blue; if(col < width) { gl2psGetRGB(im, col, row, &dr, &dg, &db); } else { dr = dg = db = 0; } col++; red = (unsigned char)(3. * dr); green = (unsigned char)(3. * dg); blue = (unsigned char)(3. * db); b = (b<<2) + red; b = (b<<2) + green; b = (b<<2) + blue; gl2psWriteByte(b); b = 0; icase = 1; } } gl2psPrintf("\n"); } } else if(nbit == 4){ /* color, 4 bits for r and g and b; rgbs following each other */ nrgb = width * 3; nbits = nrgb * nbit; nbyte = nbits/8; if((nbyte * 8) != nbits) nbyte++; gl2psPrintf("/rgbstr %d string def\n", nbyte); gl2psPrintf("%d %d %d\n", width, height, nbit); gl2psPrintf("[ %d 0 0 -%d 0 %d ]\n", width, height, height); gl2psPrintf("{ currentfile rgbstr readhexstring pop }\n"); gl2psPrintf("false 3\n"); gl2psPrintf("colorimage\n"); for(row = 0; row < height; row++){ col = 0; icase = 1; for(ibyte = 0; ibyte < nbyte; ibyte++){ if(icase == 1) { if(col < width) { gl2psGetRGB(im, col, row, &dr, &dg, &db); } else { dr = dg = db = 0; } col++; red = (unsigned char)(15. * dr); green = (unsigned char)(15. * dg); gl2psPrintf("%x%x", red, green); icase++; } else if(icase == 2) { blue = (unsigned char)(15. * db); if(col < width) { gl2psGetRGB(im, col, row, &dr, &dg, &db); } else { dr = dg = db = 0; } col++; red = (unsigned char)(15. * dr); gl2psPrintf("%x%x", blue, red); icase++; } else if(icase == 3) { green = (unsigned char)(15. * dg); blue = (unsigned char)(15. * db); gl2psPrintf("%x%x", green, blue); icase = 1; } } gl2psPrintf("\n"); } } else{ /* 8 bit for r and g and b */ nbyte = width * 3; gl2psPrintf("/rgbstr %d string def\n", nbyte); gl2psPrintf("%d %d %d\n", width, height, 8); gl2psPrintf("[ %d 0 0 -%d 0 %d ]\n", width, height, height); gl2psPrintf("{ currentfile rgbstr readhexstring pop }\n"); gl2psPrintf("false 3\n"); gl2psPrintf("colorimage\n"); for(row = 0; row < height; row++){ for(col = 0; col < width; col++){ gl2psGetRGB(im, col, row, &dr, &dg, &db); red = (unsigned char)(255. * dr); gl2psWriteByte(red); green = (unsigned char)(255. * dg); gl2psWriteByte(green); blue = (unsigned char)(255. * db); gl2psWriteByte(blue); } gl2psPrintf("\n"); } } gl2psPrintf("grestore\n"); } static void gl2psPrintPostScriptImagemap(GLfloat x, GLfloat y, GLsizei width, GLsizei height, const unsigned char *imagemap){ int i, size; if((width <= 0) || (height <= 0)) return; size = height + height * (width-1)/8; gl2psPrintf("gsave\n"); gl2psPrintf("%.2f %.2f translate\n", x, y); gl2psPrintf("%d %d scale\n%d %d\ntrue\n", width, height,width, height); gl2psPrintf("[ %d 0 0 -%d 0 %d ] {<", width, height); for(i = 0; i < size; i++){ gl2psWriteByte(*imagemap); imagemap++; } gl2psPrintf(">} imagemask\ngrestore\n"); } static void gl2psPrintPostScriptHeader(void) { time_t now; /* Since compression is not part of the PostScript standard, compressed PostScript files are just gzipped PostScript files ("ps.gz" or "eps.gz") */ gl2psPrintGzipHeader(); time(&now); if(gl2ps->format == GL2PS_PS){ gl2psPrintf("%%!PS-Adobe-3.0\n"); } else{ gl2psPrintf("%%!PS-Adobe-3.0 EPSF-3.0\n"); } gl2psPrintf("%%%%Title: %s\n" "%%%%Creator: GL2PS %d.%d.%d%s, %s\n" "%%%%For: %s\n" "%%%%CreationDate: %s" "%%%%LanguageLevel: 3\n" "%%%%DocumentData: Clean7Bit\n" "%%%%Pages: 1\n", gl2ps->title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION, GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT, gl2ps->producer, ctime(&now)); if(gl2ps->format == GL2PS_PS){ gl2psPrintf("%%%%Orientation: %s\n" "%%%%DocumentMedia: Default %d %d 0 () ()\n", (gl2ps->options & GL2PS_LANDSCAPE) ? "Landscape" : "Portrait", (gl2ps->options & GL2PS_LANDSCAPE) ? (int)gl2ps->viewport[3] : (int)gl2ps->viewport[2], (gl2ps->options & GL2PS_LANDSCAPE) ? (int)gl2ps->viewport[2] : (int)gl2ps->viewport[3]); } gl2psPrintf("%%%%BoundingBox: %d %d %d %d\n" "%%%%EndComments\n", (gl2ps->options & GL2PS_LANDSCAPE) ? (int)gl2ps->viewport[1] : (int)gl2ps->viewport[0], (gl2ps->options & GL2PS_LANDSCAPE) ? (int)gl2ps->viewport[0] : (int)gl2ps->viewport[1], (gl2ps->options & GL2PS_LANDSCAPE) ? (int)gl2ps->viewport[3] : (int)gl2ps->viewport[2], (gl2ps->options & GL2PS_LANDSCAPE) ? (int)gl2ps->viewport[2] : (int)gl2ps->viewport[3]); /* RGB color: r g b C (replace C by G in output to change from rgb to gray) Grayscale: r g b G Font choose: size fontname FC Text string: (string) x y size fontname S?? Rotated text string: (string) angle x y size fontname S??R Point primitive: x y size P Line width: width W Line start: x y LS Line joining last point: x y L Line end: x y LE Flat-shaded triangle: x3 y3 x2 y2 x1 y1 T Smooth-shaded triangle: x3 y3 r3 g3 b3 x2 y2 r2 g2 b2 x1 y1 r1 g1 b1 ST */ gl2psPrintf("%%%%BeginProlog\n" "/gl2psdict 64 dict def gl2psdict begin\n" "0 setlinecap 0 setlinejoin\n" "/tryPS3shading %s def %% set to false to force subdivision\n" "/rThreshold %g def %% red component subdivision threshold\n" "/gThreshold %g def %% green component subdivision threshold\n" "/bThreshold %g def %% blue component subdivision threshold\n", (gl2ps->options & GL2PS_NO_PS3_SHADING) ? "false" : "true", gl2ps->threshold[0], gl2ps->threshold[1], gl2ps->threshold[2]); gl2psPrintf("/BD { bind def } bind def\n" "/C { setrgbcolor } BD\n" "/G { 0.082 mul exch 0.6094 mul add exch 0.3086 mul add neg 1.0 add setgray } BD\n" "/W { setlinewidth } BD\n"); gl2psPrintf("/FC { findfont exch /SH exch def SH scalefont setfont } BD\n" "/SW { dup stringwidth pop } BD\n" "/S { FC moveto show } BD\n" "/SBC{ FC moveto SW -2 div 0 rmoveto show } BD\n" "/SBR{ FC moveto SW neg 0 rmoveto show } BD\n" "/SCL{ FC moveto 0 SH -2 div rmoveto show } BD\n" "/SCC{ FC moveto SW -2 div SH -2 div rmoveto show } BD\n" "/SCR{ FC moveto SW neg SH -2 div rmoveto show } BD\n" "/STL{ FC moveto 0 SH neg rmoveto show } BD\n" "/STC{ FC moveto SW -2 div SH neg rmoveto show } BD\n" "/STR{ FC moveto SW neg SH neg rmoveto show } BD\n"); /* rotated text routines: same nameanem with R appended */ gl2psPrintf("/FCT { FC translate 0 0 } BD\n" "/SR { gsave FCT moveto rotate show grestore } BD\n" "/SBCR{ gsave FCT moveto rotate SW -2 div 0 rmoveto show grestore } BD\n" "/SBRR{ gsave FCT moveto rotate SW neg 0 rmoveto show grestore } BD\n" "/SCLR{ gsave FCT moveto rotate 0 SH -2 div rmoveto show grestore} BD\n"); gl2psPrintf("/SCCR{ gsave FCT moveto rotate SW -2 div SH -2 div rmoveto show grestore} BD\n" "/SCRR{ gsave FCT moveto rotate SW neg SH -2 div rmoveto show grestore} BD\n" "/STLR{ gsave FCT moveto rotate 0 SH neg rmoveto show grestore } BD\n" "/STCR{ gsave FCT moveto rotate SW -2 div SH neg rmoveto show grestore } BD\n" "/STRR{ gsave FCT moveto rotate SW neg SH neg rmoveto show grestore } BD\n"); gl2psPrintf("/P { newpath 0.0 360.0 arc closepath fill } BD\n" "/LS { newpath moveto } BD\n" "/L { lineto } BD\n" "/LE { lineto stroke } BD\n" "/T { newpath moveto lineto lineto closepath fill } BD\n"); /* Smooth-shaded triangle with PostScript level 3 shfill operator: x3 y3 r3 g3 b3 x2 y2 r2 g2 b2 x1 y1 r1 g1 b1 STshfill */ gl2psPrintf("/STshfill {\n" " /b1 exch def /g1 exch def /r1 exch def /y1 exch def /x1 exch def\n" " /b2 exch def /g2 exch def /r2 exch def /y2 exch def /x2 exch def\n" " /b3 exch def /g3 exch def /r3 exch def /y3 exch def /x3 exch def\n" " gsave << /ShadingType 4 /ColorSpace [/DeviceRGB]\n" " /DataSource [ 0 x1 y1 r1 g1 b1 0 x2 y2 r2 g2 b2 0 x3 y3 r3 g3 b3 ] >>\n" " shfill grestore } BD\n"); /* Flat-shaded triangle with middle color: x3 y3 r3 g3 b3 x2 y2 r2 g2 b2 x1 y1 r1 g1 b1 Tm */ gl2psPrintf(/* stack : x3 y3 r3 g3 b3 x2 y2 r2 g2 b2 x1 y1 r1 g1 b1 */ "/Tm { 3 -1 roll 8 -1 roll 13 -1 roll add add 3 div\n" /* r = (r1+r2+r3)/3 */ /* stack : x3 y3 g3 b3 x2 y2 g2 b2 x1 y1 g1 b1 r */ " 3 -1 roll 7 -1 roll 11 -1 roll add add 3 div\n" /* g = (g1+g2+g3)/3 */ /* stack : x3 y3 b3 x2 y2 b2 x1 y1 b1 r g b */ " 3 -1 roll 6 -1 roll 9 -1 roll add add 3 div" /* b = (b1+b2+b3)/3 */ /* stack : x3 y3 x2 y2 x1 y1 r g b */ " C T } BD\n"); /* Split triangle in four sub-triangles (at sides middle points) and call the STnoshfill procedure on each, interpolating the colors in RGB space: x3 y3 r3 g3 b3 x2 y2 r2 g2 b2 x1 y1 r1 g1 b1 STsplit (in procedure comments key: (Vi) = xi yi ri gi bi) */ gl2psPrintf("/STsplit {\n" " 4 index 15 index add 0.5 mul\n" /* x13 = (x1+x3)/2 */ " 4 index 15 index add 0.5 mul\n" /* y13 = (y1+y3)/2 */ " 4 index 15 index add 0.5 mul\n" /* r13 = (r1+r3)/2 */ " 4 index 15 index add 0.5 mul\n" /* g13 = (g1+g3)/2 */ " 4 index 15 index add 0.5 mul\n" /* b13 = (b1+b3)/2 */ " 5 copy 5 copy 25 15 roll\n"); /* at his point, stack = (V3) (V13) (V13) (V13) (V2) (V1) */ gl2psPrintf(" 9 index 30 index add 0.5 mul\n" /* x23 = (x2+x3)/2 */ " 9 index 30 index add 0.5 mul\n" /* y23 = (y2+y3)/2 */ " 9 index 30 index add 0.5 mul\n" /* r23 = (r2+r3)/2 */ " 9 index 30 index add 0.5 mul\n" /* g23 = (g2+g3)/2 */ " 9 index 30 index add 0.5 mul\n" /* b23 = (b2+b3)/2 */ " 5 copy 5 copy 35 5 roll 25 5 roll 15 5 roll\n"); /* stack = (V3) (V13) (V23) (V13) (V23) (V13) (V23) (V2) (V1) */ gl2psPrintf(" 4 index 10 index add 0.5 mul\n" /* x12 = (x1+x2)/2 */ " 4 index 10 index add 0.5 mul\n" /* y12 = (y1+y2)/2 */ " 4 index 10 index add 0.5 mul\n" /* r12 = (r1+r2)/2 */ " 4 index 10 index add 0.5 mul\n" /* g12 = (g1+g2)/2 */ " 4 index 10 index add 0.5 mul\n" /* b12 = (b1+b2)/2 */ " 5 copy 5 copy 40 5 roll 25 5 roll 15 5 roll 25 5 roll\n"); /* stack = (V3) (V13) (V23) (V13) (V12) (V23) (V13) (V1) (V12) (V23) (V12) (V2) */ gl2psPrintf(" STnoshfill STnoshfill STnoshfill STnoshfill } BD\n"); /* Gouraud shaded triangle using recursive subdivision until the difference between corner colors does not exceed the thresholds: x3 y3 r3 g3 b3 x2 y2 r2 g2 b2 x1 y1 r1 g1 b1 STnoshfill */ gl2psPrintf("/STnoshfill {\n" " 2 index 8 index sub abs rThreshold gt\n" /* |r1-r2|>rth */ " { STsplit }\n" " { 1 index 7 index sub abs gThreshold gt\n" /* |g1-g2|>gth */ " { STsplit }\n" " { dup 6 index sub abs bThreshold gt\n" /* |b1-b2|>bth */ " { STsplit }\n" " { 2 index 13 index sub abs rThreshold gt\n" /* |r1-r3|>rht */ " { STsplit }\n" " { 1 index 12 index sub abs gThreshold gt\n" /* |g1-g3|>gth */ " { STsplit }\n" " { dup 11 index sub abs bThreshold gt\n" /* |b1-b3|>bth */ " { STsplit }\n" " { 7 index 13 index sub abs rThreshold gt\n"); /* |r2-r3|>rht */ gl2psPrintf(" { STsplit }\n" " { 6 index 12 index sub abs gThreshold gt\n" /* |g2-g3|>gth */ " { STsplit }\n" " { 5 index 11 index sub abs bThreshold gt\n" /* |b2-b3|>bth */ " { STsplit }\n" " { Tm }\n" /* all colors sufficiently similar */ " ifelse }\n" " ifelse }\n" " ifelse }\n" " ifelse }\n" " ifelse }\n" " ifelse }\n" " ifelse }\n" " ifelse }\n" " ifelse } BD\n"); gl2psPrintf("tryPS3shading\n" "{ /shfill where\n" " { /ST { STshfill } BD }\n" " { /ST { STnoshfill } BD }\n" " ifelse }\n" "{ /ST { STnoshfill } BD }\n" "ifelse\n"); gl2psPrintf("end\n" "%%%%EndProlog\n" "%%%%BeginSetup\n" "/DeviceRGB setcolorspace\n" "gl2psdict begin\n" "%%%%EndSetup\n" "%%%%Page: 1 1\n" "%%%%BeginPageSetup\n"); if(gl2ps->options & GL2PS_LANDSCAPE){ gl2psPrintf("%d 0 translate 90 rotate\n", (int)gl2ps->viewport[3]); } gl2psPrintf("%%%%EndPageSetup\n" "mark\n" "gsave\n" "1.0 1.0 scale\n"); if(gl2ps->options & GL2PS_DRAW_BACKGROUND){ gl2psPrintf("%g %g %g C\n" "newpath %d %d moveto %d %d lineto %d %d lineto %d %d lineto\n" "closepath fill\n", gl2ps->bgcolor[0], gl2ps->bgcolor[1], gl2ps->bgcolor[2], (int)gl2ps->viewport[0], (int)gl2ps->viewport[1], (int)gl2ps->viewport[2], (int)gl2ps->viewport[1], (int)gl2ps->viewport[2], (int)gl2ps->viewport[3], (int)gl2ps->viewport[0], (int)gl2ps->viewport[3]); } } static void gl2psPrintPostScriptColor(GL2PSrgba rgba) { if(!gl2psSameColor(gl2ps->lastrgba, rgba)){ gl2psSetLastColor(rgba); gl2psPrintf("%g %g %g C\n", rgba[0], rgba[1], rgba[2]); } } static void gl2psResetPostScriptColor(void) { gl2ps->lastrgba[0] = gl2ps->lastrgba[1] = gl2ps->lastrgba[2] = -1.; } static void gl2psEndPostScriptLine(void) { int i; if(gl2ps->lastvertex.rgba[0] >= 0.){ gl2psPrintf("%g %g LE\n", gl2ps->lastvertex.xyz[0], gl2ps->lastvertex.xyz[1]); for(i = 0; i < 3; i++) gl2ps->lastvertex.xyz[i] = -1.; for(i = 0; i < 4; i++) gl2ps->lastvertex.rgba[i] = -1.; } } static void gl2psParseStipplePattern(GLushort pattern, GLint factor, int *nb, int array[10]) { int i, n; int on[8] = {0, 0, 0, 0, 0, 0, 0, 0}; int off[8] = {0, 0, 0, 0, 0, 0, 0, 0}; char tmp[16]; /* extract the 16 bits from the OpenGL stipple pattern */ for(n = 15; n >= 0; n--){ tmp[n] = (char)(pattern & 0x01); pattern >>= 1; } /* compute the on/off pixel sequence */ n = 0; for(i = 0; i < 8; i++){ while(n < 16 && !tmp[n]){ off[i]++; n++; } while(n < 16 && tmp[n]){ on[i]++; n++; } if(n >= 15){ i++; break; } } /* store the on/off array from right to left, starting with off pixels. The PostScript specification allows for at most 11 elements in the on/off array, so we limit ourselves to 5 on/off couples (our longest possible array is thus [on4 off4 on3 off3 on2 off2 on1 off1 on0 off0]) */ *nb = 0; for(n = i - 1; n >= 0; n--){ array[(*nb)++] = factor * on[n]; array[(*nb)++] = factor * off[n]; if(*nb == 10) break; } } static int gl2psPrintPostScriptDash(GLushort pattern, GLint factor, char *str) { int len = 0, i, n, array[10]; if(pattern == gl2ps->lastpattern && factor == gl2ps->lastfactor) return 0; gl2ps->lastpattern = pattern; gl2ps->lastfactor = factor; if(!pattern || !factor){ /* solid line */ len += gl2psPrintf("[] 0 %s\n", str); } else{ gl2psParseStipplePattern(pattern, factor, &n, array); len += gl2psPrintf("["); for(i = 0; i < n; i++){ if(i) len += gl2psPrintf(" "); len += gl2psPrintf("%d", array[i]); } len += gl2psPrintf("] 0 %s\n", str); } return len; } static void gl2psPrintPostScriptPrimitive(void *data) { int newline; GL2PSprimitive *prim; prim = *(GL2PSprimitive**)data; if((gl2ps->options & GL2PS_OCCLUSION_CULL) && prim->culled) return; /* Every effort is made to draw lines as connected segments (i.e., using a single PostScript path): this is the only way to get nice line joins and to not restart the stippling for every line segment. So if the primitive to print is not a line we must first finish the current line (if any): */ if(prim->type != GL2PS_LINE) gl2psEndPostScriptLine(); switch(prim->type){ case GL2PS_POINT : gl2psPrintPostScriptColor(prim->verts[0].rgba); gl2psPrintf("%g %g %g P\n", prim->verts[0].xyz[0], prim->verts[0].xyz[1], 0.5 * prim->width); break; case GL2PS_LINE : if(!gl2psSamePosition(gl2ps->lastvertex.xyz, prim->verts[0].xyz) || !gl2psSameColor(gl2ps->lastrgba, prim->verts[0].rgba) || gl2ps->lastlinewidth != prim->width || gl2ps->lastpattern != prim->pattern || gl2ps->lastfactor != prim->factor){ /* End the current line if the new segment does not start where the last one ended, or if the color, the width or the stippling have changed (multi-stroking lines with changing colors is necessary until we use /shfill for lines; unfortunately this means that at the moment we can screw up line stippling for smooth-shaded lines) */ gl2psEndPostScriptLine(); newline = 1; } else{ newline = 0; } if(gl2ps->lastlinewidth != prim->width){ gl2ps->lastlinewidth = prim->width; gl2psPrintf("%g W\n", gl2ps->lastlinewidth); } gl2psPrintPostScriptDash(prim->pattern, prim->factor, "setdash"); gl2psPrintPostScriptColor(prim->verts[0].rgba); gl2psPrintf("%g %g %s\n", prim->verts[0].xyz[0], prim->verts[0].xyz[1], newline ? "LS" : "L"); gl2ps->lastvertex = prim->verts[1]; break; case GL2PS_TRIANGLE : if(!gl2psVertsSameColor(prim)){ gl2psResetPostScriptColor(); gl2psPrintf("%g %g %g %g %g %g %g %g %g %g %g %g %g %g %g ST\n", prim->verts[2].xyz[0], prim->verts[2].xyz[1], prim->verts[2].rgba[0], prim->verts[2].rgba[1], prim->verts[2].rgba[2], prim->verts[1].xyz[0], prim->verts[1].xyz[1], prim->verts[1].rgba[0], prim->verts[1].rgba[1], prim->verts[1].rgba[2], prim->verts[0].xyz[0], prim->verts[0].xyz[1], prim->verts[0].rgba[0], prim->verts[0].rgba[1], prim->verts[0].rgba[2]); } else{ gl2psPrintPostScriptColor(prim->verts[0].rgba); gl2psPrintf("%g %g %g %g %g %g T\n", prim->verts[2].xyz[0], prim->verts[2].xyz[1], prim->verts[1].xyz[0], prim->verts[1].xyz[1], prim->verts[0].xyz[0], prim->verts[0].xyz[1]); } break; case GL2PS_QUADRANGLE : gl2psMsg(GL2PS_WARNING, "There should not be any quad left to print"); break; case GL2PS_PIXMAP : gl2psPrintPostScriptPixmap(prim->verts[0].xyz[0], prim->verts[0].xyz[1], prim->data.image); break; case GL2PS_IMAGEMAP : if(prim->data.image->type != GL2PS_IMAGEMAP_WRITTEN){ gl2psPrintPostScriptColor(prim->verts[0].rgba); gl2psPrintPostScriptImagemap(prim->data.image->pixels[0], prim->data.image->pixels[1], prim->data.image->width, prim->data.image->height, (const unsigned char*)(&(prim->data.image->pixels[2]))); prim->data.image->type = GL2PS_IMAGEMAP_WRITTEN; } break; case GL2PS_TEXT : gl2psPrintPostScriptColor(prim->verts[0].rgba); gl2psPrintf("(%s) ", prim->data.text->str); if(prim->data.text->angle) gl2psPrintf("%g ", prim->data.text->angle); gl2psPrintf("%g %g %d /%s ", prim->verts[0].xyz[0], prim->verts[0].xyz[1], prim->data.text->fontsize, prim->data.text->fontname); switch(prim->data.text->alignment){ case GL2PS_TEXT_C: gl2psPrintf(prim->data.text->angle ? "SCCR\n" : "SCC\n"); break; case GL2PS_TEXT_CL: gl2psPrintf(prim->data.text->angle ? "SCLR\n" : "SCL\n"); break; case GL2PS_TEXT_CR: gl2psPrintf(prim->data.text->angle ? "SCRR\n" : "SCR\n"); break; case GL2PS_TEXT_B: gl2psPrintf(prim->data.text->angle ? "SBCR\n" : "SBC\n"); break; case GL2PS_TEXT_BR: gl2psPrintf(prim->data.text->angle ? "SBRR\n" : "SBR\n"); break; case GL2PS_TEXT_T: gl2psPrintf(prim->data.text->angle ? "STCR\n" : "STC\n"); break; case GL2PS_TEXT_TL: gl2psPrintf(prim->data.text->angle ? "STLR\n" : "STL\n"); break; case GL2PS_TEXT_TR: gl2psPrintf(prim->data.text->angle ? "STRR\n" : "STR\n"); break; case GL2PS_TEXT_BL: default: gl2psPrintf(prim->data.text->angle ? "SR\n" : "S\n"); break; } break; case GL2PS_SPECIAL : /* alignment contains the format for which the special output text is intended */ if(prim->data.text->alignment == GL2PS_PS || prim->data.text->alignment == GL2PS_EPS) gl2psPrintf("%s\n", prim->data.text->str); break; default : break; } } static void gl2psPrintPostScriptFooter(void) { gl2psPrintf("grestore\n" "showpage\n" "cleartomark\n" "%%%%PageTrailer\n" "%%%%Trailer\n" "end\n" "%%%%EOF\n"); gl2psPrintGzipFooter(); } static void gl2psPrintPostScriptBeginViewport(GLint viewport[4]) { GLint index; GLfloat rgba[4]; int x = viewport[0], y = viewport[1], w = viewport[2], h = viewport[3]; glRenderMode(GL_FEEDBACK); if(gl2ps->header){ gl2psPrintPostScriptHeader(); gl2ps->header = GL_FALSE; } gl2psPrintf("gsave\n" "1.0 1.0 scale\n"); if(gl2ps->options & GL2PS_DRAW_BACKGROUND){ if(gl2ps->colormode == GL_RGBA || gl2ps->colorsize == 0){ glGetFloatv(GL_COLOR_CLEAR_VALUE, rgba); } else{ glGetIntegerv(GL_INDEX_CLEAR_VALUE, &index); rgba[0] = gl2ps->colormap[index][0]; rgba[1] = gl2ps->colormap[index][1]; rgba[2] = gl2ps->colormap[index][2]; rgba[3] = 1.0F; } gl2psPrintf("%g %g %g C\n" "newpath %d %d moveto %d %d lineto %d %d lineto %d %d lineto\n" "closepath fill\n", rgba[0], rgba[1], rgba[2], x, y, x+w, y, x+w, y+h, x, y+h); } gl2psPrintf("newpath %d %d moveto %d %d lineto %d %d lineto %d %d lineto\n" "closepath clip\n", x, y, x+w, y, x+w, y+h, x, y+h); } static GLint gl2psPrintPostScriptEndViewport(void) { GLint res; res = gl2psPrintPrimitives(); gl2psPrintf("grestore\n"); return res; } static void gl2psPrintPostScriptFinalPrimitive(void) { /* End any remaining line, if any */ gl2psEndPostScriptLine(); } /* definition of the PostScript and Encapsulated PostScript backends */ static GL2PSbackend gl2psPS = { gl2psPrintPostScriptHeader, gl2psPrintPostScriptFooter, gl2psPrintPostScriptBeginViewport, gl2psPrintPostScriptEndViewport, gl2psPrintPostScriptPrimitive, gl2psPrintPostScriptFinalPrimitive, "ps", "Postscript" }; static GL2PSbackend gl2psEPS = { gl2psPrintPostScriptHeader, gl2psPrintPostScriptFooter, gl2psPrintPostScriptBeginViewport, gl2psPrintPostScriptEndViewport, gl2psPrintPostScriptPrimitive, gl2psPrintPostScriptFinalPrimitive, "eps", "Encapsulated Postscript" }; /********************************************************************* * * LaTeX routines * *********************************************************************/ static void gl2psPrintTeXHeader(void) { char name[256]; time_t now; int i; if(gl2ps->filename && strlen(gl2ps->filename) < 256){ for(i = strlen(gl2ps->filename)-1; i >= 0; i--){ if(gl2ps->filename[i] == '.'){ strncpy(name, gl2ps->filename, i); name[i] = '\0'; break; } } if(i <= 0) strcpy(name, gl2ps->filename); } else{ strcpy(name, "untitled"); } time(&now); fprintf(gl2ps->stream, "%% Title: %s\n" "%% Creator: GL2PS %d.%d.%d%s, %s\n" "%% For: %s\n" "%% CreationDate: %s", gl2ps->title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION, GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT, gl2ps->producer, ctime(&now)); fprintf(gl2ps->stream, "\\setlength{\\unitlength}{1pt}\n" "\\begin{picture}(0,0)\n" "\\includegraphics{%s}\n" "\\end{picture}%%\n" "%s\\begin{picture}(%d,%d)(0,0)\n", name, (gl2ps->options & GL2PS_LANDSCAPE) ? "\\rotatebox{90}{" : "", (int)gl2ps->viewport[2], (int)gl2ps->viewport[3]); } static void gl2psPrintTeXPrimitive(void *data) { GL2PSprimitive *prim; prim = *(GL2PSprimitive**)data; switch(prim->type){ case GL2PS_TEXT : fprintf(gl2ps->stream, "\\fontsize{%d}{0}\n\\selectfont", prim->data.text->fontsize); fprintf(gl2ps->stream, "\\put(%g,%g){\\makebox(0,0)", prim->verts[0].xyz[0], prim->verts[0].xyz[1]); switch(prim->data.text->alignment){ case GL2PS_TEXT_C: fprintf(gl2ps->stream, "{"); break; case GL2PS_TEXT_CL: fprintf(gl2ps->stream, "[l]{"); break; case GL2PS_TEXT_CR: fprintf(gl2ps->stream, "[r]{"); break; case GL2PS_TEXT_B: fprintf(gl2ps->stream, "[b]{"); break; case GL2PS_TEXT_BR: fprintf(gl2ps->stream, "[br]{"); break; case GL2PS_TEXT_T: fprintf(gl2ps->stream, "[t]{"); break; case GL2PS_TEXT_TL: fprintf(gl2ps->stream, "[tl]{"); break; case GL2PS_TEXT_TR: fprintf(gl2ps->stream, "[tr]{"); break; case GL2PS_TEXT_BL: default: fprintf(gl2ps->stream, "[bl]{"); break; } if(prim->data.text->angle) fprintf(gl2ps->stream, "\\rotatebox{%g}{", prim->data.text->angle); fprintf(gl2ps->stream, "\\textcolor[rgb]{%g,%g,%g}{{%s}}", prim->verts[0].rgba[0], prim->verts[0].rgba[1], prim->verts[0].rgba[2], prim->data.text->str); if(prim->data.text->angle) fprintf(gl2ps->stream, "}"); fprintf(gl2ps->stream, "}}\n"); break; case GL2PS_SPECIAL : /* alignment contains the format for which the special output text is intended */ if (prim->data.text->alignment == GL2PS_TEX) fprintf(gl2ps->stream, "%s\n", prim->data.text->str); break; default : break; } } static void gl2psPrintTeXFooter(void) { fprintf(gl2ps->stream, "\\end{picture}%s\n", (gl2ps->options & GL2PS_LANDSCAPE) ? "}" : ""); } static void gl2psPrintTeXBeginViewport(GLint viewport[4]) { glRenderMode(GL_FEEDBACK); if(gl2ps->header){ gl2psPrintTeXHeader(); gl2ps->header = GL_FALSE; } } static GLint gl2psPrintTeXEndViewport(void) { return gl2psPrintPrimitives(); } static void gl2psPrintTeXFinalPrimitive(void) { } /* definition of the LaTeX backend */ static GL2PSbackend gl2psTEX = { gl2psPrintTeXHeader, gl2psPrintTeXFooter, gl2psPrintTeXBeginViewport, gl2psPrintTeXEndViewport, gl2psPrintTeXPrimitive, gl2psPrintTeXFinalPrimitive, "tex", "LaTeX text" }; /********************************************************************* * * PDF routines * *********************************************************************/ static int gl2psPrintPDFCompressorType(void) { #if defined(GL2PS_HAVE_ZLIB) if(gl2ps->options & GL2PS_COMPRESS){ return fprintf(gl2ps->stream, "/Filter [/FlateDecode]\n"); } #endif return 0; } static int gl2psPrintPDFStrokeColor(GL2PSrgba rgba) { int i, offs = 0; gl2psSetLastColor(rgba); for(i = 0; i < 3; ++i){ if(GL2PS_ZERO(rgba[i])) offs += gl2psPrintf("%.0f ", 0.); else if(rgba[i] < 1e-4 || rgba[i] > 1e6) /* avoid %e formatting */ offs += gl2psPrintf("%f ", rgba[i]); else offs += gl2psPrintf("%g ", rgba[i]); } offs += gl2psPrintf("RG\n"); return offs; } static int gl2psPrintPDFFillColor(GL2PSrgba rgba) { int i, offs = 0; for(i = 0; i < 3; ++i){ if(GL2PS_ZERO(rgba[i])) offs += gl2psPrintf("%.0f ", 0.); else if(rgba[i] < 1e-4 || rgba[i] > 1e6) /* avoid %e formatting */ offs += gl2psPrintf("%f ", rgba[i]); else offs += gl2psPrintf("%g ", rgba[i]); } offs += gl2psPrintf("rg\n"); return offs; } static int gl2psPrintPDFLineWidth(GLfloat lw) { if(GL2PS_ZERO(lw)) return gl2psPrintf("%.0f w\n", 0.); else if(lw < 1e-4 || lw > 1e6) /* avoid %e formatting */ return gl2psPrintf("%f w\n", lw); else return gl2psPrintf("%g w\n", lw); } static void gl2psPutPDFText(GL2PSstring *text, int cnt, GLfloat x, GLfloat y) { gl2ps->streamlength += gl2psPrintf("BT\n" "/F%d %d Tf\n" "%f %f Td\n" "(%s) Tj\n" "ET\n", cnt, text->fontsize, x, y, text->str); } static void gl2psPutPDFImage(GL2PSimage *image, int cnt, GLfloat x, GLfloat y) { gl2ps->streamlength += gl2psPrintf("q\n" "%d 0 0 %d %f %f cm\n" "/Im%d Do\n" "Q\n", (int)image->width, (int)image->height, x, y, cnt); } static void gl2psPDFstacksInit(void) { gl2ps->objects_stack = 7 /* FIXED_XREF_ENTRIES */ + 1; gl2ps->extgs_stack = 0; gl2ps->font_stack = 0; gl2ps->im_stack = 0; gl2ps->trgroupobjects_stack = 0; gl2ps->shader_stack = 0; gl2ps->mshader_stack = 0; } static void gl2psPDFgroupObjectInit(GL2PSpdfgroup *gro) { if(!gro) return; gro->ptrlist = NULL; gro->fontno = gro->gsno = gro->imno = gro->maskshno = gro->shno = gro->trgroupno = gro->fontobjno = gro->imobjno = gro->shobjno = gro->maskshobjno = gro->gsobjno = gro->trgroupobjno = -1; } /* Build up group objects and assign name and object numbers */ static void gl2psPDFgroupListInit(void) { int i; GL2PSprimitive *p = NULL; GL2PSpdfgroup gro; int lasttype = GL2PS_NO_TYPE; GL2PSrgba lastrgba = {-1.0F, -1.0F, -1.0F, -1.0F}; GLushort lastpattern = 0; GLint lastfactor = 0; GLfloat lastwidth = 1; GL2PStriangle lastt, tmpt; int lastTriangleWasNotSimpleWithSameColor = 0; if(!gl2ps->pdfprimlist) return; gl2ps->pdfgrouplist = gl2psListCreate(500, 500, sizeof(GL2PSpdfgroup)); gl2psInitTriangle(&lastt); for(i = 0; i < gl2psListNbr(gl2ps->pdfprimlist); ++i){ p = *(GL2PSprimitive**)gl2psListPointer(gl2ps->pdfprimlist, i); switch(p->type){ case GL2PS_PIXMAP: gl2psPDFgroupObjectInit(&gro); gro.ptrlist = gl2psListCreate(1, 2, sizeof(GL2PSprimitive*)); gro.imno = gl2ps->im_stack++; gl2psListAdd(gro.ptrlist, &p); gl2psListAdd(gl2ps->pdfgrouplist, &gro); break; case GL2PS_TEXT: gl2psPDFgroupObjectInit(&gro); gro.ptrlist = gl2psListCreate(1, 2, sizeof(GL2PSprimitive*)); gro.fontno = gl2ps->font_stack++; gl2psListAdd(gro.ptrlist, &p); gl2psListAdd(gl2ps->pdfgrouplist, &gro); break; case GL2PS_LINE: if(lasttype != p->type || lastwidth != p->width || lastpattern != p->pattern || lastfactor != p->factor || !gl2psSameColor(p->verts[0].rgba, lastrgba)){ gl2psPDFgroupObjectInit(&gro); gro.ptrlist = gl2psListCreate(1, 2, sizeof(GL2PSprimitive*)); gl2psListAdd(gro.ptrlist, &p); gl2psListAdd(gl2ps->pdfgrouplist, &gro); } else{ gl2psListAdd(gro.ptrlist, &p); } lastpattern = p->pattern; lastfactor = p->factor; lastwidth = p->width; lastrgba[0] = p->verts[0].rgba[0]; lastrgba[1] = p->verts[0].rgba[1]; lastrgba[2] = p->verts[0].rgba[2]; break; case GL2PS_POINT: if(lasttype != p->type || lastwidth != p->width || !gl2psSameColor(p->verts[0].rgba, lastrgba)){ gl2psPDFgroupObjectInit(&gro); gro.ptrlist = gl2psListCreate(1,2,sizeof(GL2PSprimitive*)); gl2psListAdd(gro.ptrlist, &p); gl2psListAdd(gl2ps->pdfgrouplist, &gro); } else{ gl2psListAdd(gro.ptrlist, &p); } lastwidth = p->width; lastrgba[0] = p->verts[0].rgba[0]; lastrgba[1] = p->verts[0].rgba[1]; lastrgba[2] = p->verts[0].rgba[2]; break; case GL2PS_TRIANGLE: gl2psFillTriangleFromPrimitive(&tmpt, p, GL_TRUE); lastTriangleWasNotSimpleWithSameColor = !(tmpt.prop & T_CONST_COLOR && tmpt.prop & T_ALPHA_1) || !gl2psSameColor(tmpt.vertex[0].rgba, lastt.vertex[0].rgba); if(lasttype == p->type && tmpt.prop == lastt.prop && lastTriangleWasNotSimpleWithSameColor){ /* TODO Check here for last alpha */ gl2psListAdd(gro.ptrlist, &p); } else{ gl2psPDFgroupObjectInit(&gro); gro.ptrlist = gl2psListCreate(1, 2, sizeof(GL2PSprimitive*)); gl2psListAdd(gro.ptrlist, &p); gl2psListAdd(gl2ps->pdfgrouplist, &gro); } lastt = tmpt; break; default: break; } lasttype = p->type; } } static void gl2psSortOutTrianglePDFgroup(GL2PSpdfgroup *gro) { GL2PStriangle t; GL2PSprimitive *prim = NULL; if(!gro) return; if(!gl2psListNbr(gro->ptrlist)) return; prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, 0); if(prim->type != GL2PS_TRIANGLE) return; gl2psFillTriangleFromPrimitive(&t, prim, GL_TRUE); if(t.prop & T_CONST_COLOR && t.prop & T_ALPHA_LESS_1){ gro->gsno = gl2ps->extgs_stack++; gro->gsobjno = gl2ps->objects_stack ++; } else if(t.prop & T_CONST_COLOR && t.prop & T_VAR_ALPHA){ gro->gsno = gl2ps->extgs_stack++; gro->gsobjno = gl2ps->objects_stack++; gro->trgroupno = gl2ps->trgroupobjects_stack++; gro->trgroupobjno = gl2ps->objects_stack++; gro->maskshno = gl2ps->mshader_stack++; gro->maskshobjno = gl2ps->objects_stack++; } else if(t.prop & T_VAR_COLOR && t.prop & T_ALPHA_1){ gro->shno = gl2ps->shader_stack++; gro->shobjno = gl2ps->objects_stack++; } else if(t.prop & T_VAR_COLOR && t.prop & T_ALPHA_LESS_1){ gro->gsno = gl2ps->extgs_stack++; gro->gsobjno = gl2ps->objects_stack++; gro->shno = gl2ps->shader_stack++; gro->shobjno = gl2ps->objects_stack++; } else if(t.prop & T_VAR_COLOR && t.prop & T_VAR_ALPHA){ gro->gsno = gl2ps->extgs_stack++; gro->gsobjno = gl2ps->objects_stack++; gro->shno = gl2ps->shader_stack++; gro->shobjno = gl2ps->objects_stack++; gro->trgroupno = gl2ps->trgroupobjects_stack++; gro->trgroupobjno = gl2ps->objects_stack++; gro->maskshno = gl2ps->mshader_stack++; gro->maskshobjno = gl2ps->objects_stack++; } } /* Main stream data */ static void gl2psPDFgroupListWriteMainStream(void) { int i, j, lastel; GL2PSprimitive *prim = NULL, *prev = NULL; GL2PSpdfgroup *gro; GL2PStriangle t; if(!gl2ps->pdfgrouplist) return; for(i = 0; i < gl2psListNbr(gl2ps->pdfgrouplist); ++i){ gro = (GL2PSpdfgroup*)gl2psListPointer(gl2ps->pdfgrouplist, i); lastel = gl2psListNbr(gro->ptrlist) - 1; if(lastel < 0) continue; prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, 0); switch(prim->type){ case GL2PS_POINT: gl2ps->streamlength += gl2psPrintf("1 J\n"); gl2ps->streamlength += gl2psPrintPDFLineWidth(prim->width); gl2ps->streamlength += gl2psPrintPDFStrokeColor(prim->verts[0].rgba); for(j = 0; j <= lastel; ++j){ prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, j); gl2ps->streamlength += gl2psPrintf("%f %f m %f %f l\n", prim->verts[0].xyz[0], prim->verts[0].xyz[1], prim->verts[0].xyz[0], prim->verts[0].xyz[1]); } gl2ps->streamlength += gl2psPrintf("S\n"); gl2ps->streamlength += gl2psPrintf("0 J\n"); break; case GL2PS_LINE: /* We try to use as few paths as possible to draw lines, in order to get nice stippling even when the individual segments are smaller than the stipple */ gl2ps->streamlength += gl2psPrintPDFLineWidth(prim->width); gl2ps->streamlength += gl2psPrintPDFStrokeColor(prim->verts[0].rgba); gl2ps->streamlength += gl2psPrintPostScriptDash(prim->pattern, prim->factor, "d"); /* start new path */ gl2ps->streamlength += gl2psPrintf("%f %f m\n", prim->verts[0].xyz[0], prim->verts[0].xyz[1]); for(j = 1; j <= lastel; ++j){ prev = prim; prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, j); if(!gl2psSamePosition(prim->verts[0].xyz, prev->verts[1].xyz)){ /* the starting point of the new segment does not match the end point of the previous line, so we end the current path and start a new one */ gl2ps->streamlength += gl2psPrintf("%f %f l\n", prev->verts[1].xyz[0], prev->verts[1].xyz[1]); gl2ps->streamlength += gl2psPrintf("%f %f m\n", prim->verts[0].xyz[0], prim->verts[0].xyz[1]); } else{ /* the two segements are connected, so we just append to the current path */ gl2ps->streamlength += gl2psPrintf("%f %f l\n", prim->verts[0].xyz[0], prim->verts[0].xyz[1]); } } /* end last path */ gl2ps->streamlength += gl2psPrintf("%f %f l\n", prim->verts[1].xyz[0], prim->verts[1].xyz[1]); gl2ps->streamlength += gl2psPrintf("S\n"); break; case GL2PS_TRIANGLE: gl2psFillTriangleFromPrimitive(&t, prim, GL_TRUE); gl2psSortOutTrianglePDFgroup(gro); /* No alpha and const color: Simple PDF draw orders */ if(t.prop & T_CONST_COLOR && t.prop & T_ALPHA_1){ gl2ps->streamlength += gl2psPrintPDFFillColor(t.vertex[0].rgba); for(j = 0; j <= lastel; ++j){ prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, j); gl2psFillTriangleFromPrimitive(&t, prim, GL_FALSE); gl2ps->streamlength += gl2psPrintf("%f %f m\n" "%f %f l\n" "%f %f l\n" "h f\n", t.vertex[0].xyz[0], t.vertex[0].xyz[1], t.vertex[1].xyz[0], t.vertex[1].xyz[1], t.vertex[2].xyz[0], t.vertex[2].xyz[1]); } } /* Const alpha < 1 and const color: Simple PDF draw orders and an extra extended Graphics State for the alpha const */ else if(t.prop & T_CONST_COLOR && t.prop & T_ALPHA_LESS_1){ gl2ps->streamlength += gl2psPrintf("q\n" "/GS%d gs\n", gro->gsno); gl2ps->streamlength += gl2psPrintPDFFillColor(prim->verts[0].rgba); for(j = 0; j <= lastel; ++j){ prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, j); gl2psFillTriangleFromPrimitive(&t, prim, GL_FALSE); gl2ps->streamlength += gl2psPrintf("%f %f m\n" "%f %f l\n" "%f %f l\n" "h f\n", t.vertex[0].xyz[0], t.vertex[0].xyz[1], t.vertex[1].xyz[0], t.vertex[1].xyz[1], t.vertex[2].xyz[0], t.vertex[2].xyz[1]); } gl2ps->streamlength += gl2psPrintf("Q\n"); } /* Variable alpha and const color: Simple PDF draw orders and an extra extended Graphics State + Xobject + Shader object for the alpha mask */ else if(t.prop & T_CONST_COLOR && t.prop & T_VAR_ALPHA){ gl2ps->streamlength += gl2psPrintf("q\n" "/GS%d gs\n" "/TrG%d Do\n", gro->gsno, gro->trgroupno); gl2ps->streamlength += gl2psPrintPDFFillColor(prim->verts[0].rgba); for(j = 0; j <= lastel; ++j){ prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, j); gl2psFillTriangleFromPrimitive(&t, prim, GL_FALSE); gl2ps->streamlength += gl2psPrintf("%f %f m\n" "%f %f l\n" "%f %f l\n" "h f\n", t.vertex[0].xyz[0], t.vertex[0].xyz[1], t.vertex[1].xyz[0], t.vertex[1].xyz[1], t.vertex[2].xyz[0], t.vertex[2].xyz[1]); } gl2ps->streamlength += gl2psPrintf("Q\n"); } /* Variable color and no alpha: Shader Object for the colored triangle(s) */ else if(t.prop & T_VAR_COLOR && t.prop & T_ALPHA_1){ gl2ps->streamlength += gl2psPrintf("/Sh%d sh\n", gro->shno); } /* Variable color and const alpha < 1: Shader Object for the colored triangle(s) and an extra extended Graphics State for the alpha const */ else if(t.prop & T_VAR_COLOR && t.prop & T_ALPHA_LESS_1){ gl2ps->streamlength += gl2psPrintf("q\n" "/GS%d gs\n" "/Sh%d sh\n" "Q\n", gro->gsno, gro->shno); } /* Variable alpha and color: Shader Object for the colored triangle(s) and an extra extended Graphics State + Xobject + Shader object for the alpha mask */ else if(t.prop & T_VAR_COLOR && t.prop & T_VAR_ALPHA){ gl2ps->streamlength += gl2psPrintf("q\n" "/GS%d gs\n" "/TrG%d Do\n" "/Sh%d sh\n" "Q\n", gro->gsno, gro->trgroupno, gro->shno); } break; case GL2PS_PIXMAP: for(j = 0; j <= lastel; ++j){ prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, j); gl2psPutPDFImage(prim->data.image, gro->imno, prim->verts[0].xyz[0], prim->verts[0].xyz[1]); } break; case GL2PS_TEXT: for(j = 0; j <= lastel; ++j){ prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, j); gl2ps->streamlength += gl2psPrintPDFFillColor(prim->verts[0].rgba); gl2psPutPDFText(prim->data.text, gro->fontno, prim->verts[0].xyz[0], prim->verts[0].xyz[1]); } break; default: break; } } } /* Graphics State names */ static int gl2psPDFgroupListWriteGStateResources(void) { GL2PSpdfgroup *gro; int offs = 0; int i; offs += fprintf(gl2ps->stream, "/ExtGState\n" "<<\n" "/GSa 7 0 R\n"); for(i = 0; i < gl2psListNbr(gl2ps->pdfgrouplist); ++i){ gro = (GL2PSpdfgroup*)gl2psListPointer(gl2ps->pdfgrouplist, i); if(gro->gsno >= 0) offs += fprintf(gl2ps->stream, "/GS%d %d 0 R\n", gro->gsno, gro->gsobjno); } offs += fprintf(gl2ps->stream, ">>\n"); return offs; } /* Main Shader names */ static int gl2psPDFgroupListWriteShaderResources(void) { GL2PSpdfgroup *gro; int offs = 0; int i; offs += fprintf(gl2ps->stream, "/Shading\n" "<<\n"); for(i = 0; i < gl2psListNbr(gl2ps->pdfgrouplist); ++i){ gro = (GL2PSpdfgroup*)gl2psListPointer(gl2ps->pdfgrouplist, i); if(gro->shno >= 0) offs += fprintf(gl2ps->stream, "/Sh%d %d 0 R\n", gro->shno, gro->shobjno); if(gro->maskshno >= 0) offs += fprintf(gl2ps->stream, "/TrSh%d %d 0 R\n", gro->maskshno, gro->maskshobjno); } offs += fprintf(gl2ps->stream,">>\n"); return offs; } /* Images & Mask Shader XObject names */ static int gl2psPDFgroupListWriteXObjectResources(void) { int i; GL2PSprimitive *p = NULL; GL2PSpdfgroup *gro; int offs = 0; offs += fprintf(gl2ps->stream, "/XObject\n" "<<\n"); for(i = 0; i < gl2psListNbr(gl2ps->pdfgrouplist); ++i){ gro = (GL2PSpdfgroup*)gl2psListPointer(gl2ps->pdfgrouplist, i); if(!gl2psListNbr(gro->ptrlist)) continue; p = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, 0); switch(p->type){ case GL2PS_PIXMAP: gro->imobjno = gl2ps->objects_stack++; if(GL_RGBA == p->data.image->format) /* reserve one object for image mask */ gl2ps->objects_stack++; offs += fprintf(gl2ps->stream, "/Im%d %d 0 R\n", gro->imno, gro->imobjno); case GL2PS_TRIANGLE: if(gro->trgroupno >=0) offs += fprintf(gl2ps->stream, "/TrG%d %d 0 R\n", gro->trgroupno, gro->trgroupobjno); break; default: break; } } offs += fprintf(gl2ps->stream,">>\n"); return offs; } /* Font names */ static int gl2psPDFgroupListWriteFontResources(void) { int i; GL2PSpdfgroup *gro; int offs = 0; offs += fprintf(gl2ps->stream, "/Font\n<<\n"); for(i = 0; i < gl2psListNbr(gl2ps->pdfgrouplist); ++i){ gro = (GL2PSpdfgroup*)gl2psListPointer(gl2ps->pdfgrouplist, i); if(gro->fontno < 0) continue; gro->fontobjno = gl2ps->objects_stack++; offs += fprintf(gl2ps->stream, "/F%d %d 0 R\n", gro->fontno, gro->fontobjno); } offs += fprintf(gl2ps->stream, ">>\n"); return offs; } static void gl2psPDFgroupListDelete(void) { int i; GL2PSpdfgroup *gro = NULL; if(!gl2ps->pdfgrouplist) return; for(i = 0; i < gl2psListNbr(gl2ps->pdfgrouplist); ++i){ gro = (GL2PSpdfgroup*)gl2psListPointer(gl2ps->pdfgrouplist,i); gl2psListDelete(gro->ptrlist); } gl2psListDelete(gl2ps->pdfgrouplist); gl2ps->pdfgrouplist = NULL; } /* Print 1st PDF object - file info */ static int gl2psPrintPDFInfo(void) { int offs; time_t now; struct tm *newtime; time(&now); newtime = gmtime(&now); offs = fprintf(gl2ps->stream, "1 0 obj\n" "<<\n" "/Title (%s)\n" "/Creator (GL2PS %d.%d.%d%s, %s)\n" "/Producer (%s)\n", gl2ps->title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION, GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT, gl2ps->producer); if(!newtime){ offs += fprintf(gl2ps->stream, ">>\n" "endobj\n"); return offs; } offs += fprintf(gl2ps->stream, "/CreationDate (D:%d%02d%02d%02d%02d%02d)\n" ">>\n" "endobj\n", newtime->tm_year+1900, newtime->tm_mon+1, newtime->tm_mday, newtime->tm_hour, newtime->tm_min, newtime->tm_sec); return offs; } /* Create catalog and page structure - 2nd and 3th PDF object */ static int gl2psPrintPDFCatalog(void) { return fprintf(gl2ps->stream, "2 0 obj\n" "<<\n" "/Type /Catalog\n" "/Pages 3 0 R\n" ">>\n" "endobj\n"); } static int gl2psPrintPDFPages(void) { return fprintf(gl2ps->stream, "3 0 obj\n" "<<\n" "/Type /Pages\n" "/Kids [6 0 R]\n" "/Count 1\n" ">>\n" "endobj\n"); } /* Open stream for data - graphical objects, fonts etc. PDF object 4 */ static int gl2psOpenPDFDataStream(void) { int offs = 0; offs += fprintf(gl2ps->stream, "4 0 obj\n" "<<\n" "/Length 5 0 R\n" ); offs += gl2psPrintPDFCompressorType(); offs += fprintf(gl2ps->stream, ">>\n" "stream\n"); return offs; } /* Stream setup - Graphics state, fill background if allowed */ static int gl2psOpenPDFDataStreamWritePreface(void) { int offs; offs = gl2psPrintf("/GSa gs\n"); if(gl2ps->options & GL2PS_DRAW_BACKGROUND){ offs += gl2psPrintPDFFillColor(gl2ps->bgcolor); offs += gl2psPrintf("%d %d %d %d re\n", (int)gl2ps->viewport[0], (int)gl2ps->viewport[1], (int)gl2ps->viewport[2], (int)gl2ps->viewport[3]); offs += gl2psPrintf("f\n"); } return offs; } /* Use the functions above to create the first part of the PDF*/ static void gl2psPrintPDFHeader(void) { int offs = 0; gl2ps->pdfprimlist = gl2psListCreate(500, 500, sizeof(GL2PSprimitive*)); gl2psPDFstacksInit(); gl2ps->xreflist = (int*)gl2psMalloc(sizeof(int) * gl2ps->objects_stack); #if defined(GL2PS_HAVE_ZLIB) if(gl2ps->options & GL2PS_COMPRESS){ gl2psSetupCompress(); } #endif gl2ps->xreflist[0] = 0; offs += fprintf(gl2ps->stream, "%%PDF-1.4\n"); gl2ps->xreflist[1] = offs; offs += gl2psPrintPDFInfo(); gl2ps->xreflist[2] = offs; offs += gl2psPrintPDFCatalog(); gl2ps->xreflist[3] = offs; offs += gl2psPrintPDFPages(); gl2ps->xreflist[4] = offs; offs += gl2psOpenPDFDataStream(); gl2ps->xreflist[5] = offs; /* finished in gl2psPrintPDFFooter */ gl2ps->streamlength = gl2psOpenPDFDataStreamWritePreface(); } /* The central primitive drawing */ static void gl2psPrintPDFPrimitive(void *data) { GL2PSprimitive *prim = *(GL2PSprimitive**)data; if((gl2ps->options & GL2PS_OCCLUSION_CULL) && prim->culled) return; prim = gl2psCopyPrimitive(prim); /* deep copy */ gl2psListAdd(gl2ps->pdfprimlist, &prim); } /* close stream and ... */ static int gl2psClosePDFDataStream(void) { int offs = 0; #if defined(GL2PS_HAVE_ZLIB) if(gl2ps->options & GL2PS_COMPRESS){ if(Z_OK != gl2psDeflate()) gl2psMsg(GL2PS_ERROR, "Zlib deflate error"); else fwrite(gl2ps->compress->dest, gl2ps->compress->destLen, 1, gl2ps->stream); gl2ps->streamlength += gl2ps->compress->destLen; offs += gl2ps->streamlength; gl2psFreeCompress(); } #endif offs += fprintf(gl2ps->stream, "endstream\n" "endobj\n"); return offs; } /* ... write the now known length object */ static int gl2psPrintPDFDataStreamLength(int val) { return fprintf(gl2ps->stream, "5 0 obj\n" "%d\n" "endobj\n", val); } /* Put the info created before in PDF objects */ static int gl2psPrintPDFOpenPage(void) { int offs; /* Write fixed part */ offs = fprintf(gl2ps->stream, "6 0 obj\n" "<<\n" "/Type /Page\n" "/Parent 3 0 R\n" "/MediaBox [%d %d %d %d]\n", (int)gl2ps->viewport[0], (int)gl2ps->viewport[1], (int)gl2ps->viewport[2], (int)gl2ps->viewport[3]); if(gl2ps->options & GL2PS_LANDSCAPE) offs += fprintf(gl2ps->stream, "/Rotate -90\n"); offs += fprintf(gl2ps->stream, "/Contents 4 0 R\n" "/Resources\n" "<<\n" "/ProcSet [/PDF /Text /ImageB /ImageC] %%/ImageI\n"); return offs; /* End fixed part, proceeds in gl2psPDFgroupListWriteVariableResources() */ } static int gl2psPDFgroupListWriteVariableResources(void) { int offs = 0; /* a) Graphics States for shader alpha masks*/ offs += gl2psPDFgroupListWriteGStateResources(); /* b) Shader and shader masks */ offs += gl2psPDFgroupListWriteShaderResources(); /* c) XObjects (Images & Shader Masks) */ offs += gl2psPDFgroupListWriteXObjectResources(); /* d) Fonts */ offs += gl2psPDFgroupListWriteFontResources(); /* End resources and page */ offs += fprintf(gl2ps->stream, ">>\n" ">>\n" "endobj\n"); return offs; } /* Standard Graphics State */ static int gl2psPrintPDFGSObject(void) { return fprintf(gl2ps->stream, "7 0 obj\n" "<<\n" "/Type /ExtGState\n" "/SA false\n" "/SM 0.02\n" "/OP false\n" "/op false\n" "/OPM 0\n" "/BG2 /Default\n" "/UCR2 /Default\n" "/TR2 /Default\n" ">>\n" "endobj\n"); } /* Put vertex' edge flag (8bit) and coordinates (32bit) in shader stream */ static int gl2psPrintPDFShaderStreamDataCoord(GL2PSvertex *vertex, size_t (*action)(unsigned long data, size_t size), GLfloat dx, GLfloat dy, GLfloat xmin, GLfloat ymin) { int offs = 0; unsigned long imap; GLfloat diff; double dmax = ~1UL; char edgeflag = 0; /* FIXME: temp bux fix for 64 bit archs: */ if(sizeof(unsigned long) == 8) dmax = dmax - 2048.; offs += (*action)(edgeflag, 1); /* The Shader stream in PDF requires to be in a 'big-endian' order */ if(GL2PS_ZERO(dx*dy)){ offs += (*action)(0, 4); offs += (*action)(0, 4); } else{ diff = (vertex->xyz[0] - xmin) / dx; if(diff > 1) diff = 1.0F; else if(diff < 0) diff = 0.0F; imap = (unsigned long)(diff * dmax); offs += (*action)(imap, 4); diff = (vertex->xyz[1] - ymin) / dy; if(diff > 1) diff = 1.0F; else if(diff < 0) diff = 0.0F; imap = (unsigned long)(diff * dmax); offs += (*action)(imap, 4); } return offs; } /* Put vertex' rgb value (8bit for every component) in shader stream */ static int gl2psPrintPDFShaderStreamDataRGB(GL2PSvertex *vertex, size_t (*action)(unsigned long data, size_t size)) { int offs = 0; unsigned long imap; double dmax = ~1UL; /* FIXME: temp bux fix for 64 bit archs: */ if(sizeof(unsigned long) == 8) dmax = dmax - 2048.; imap = (unsigned long)((vertex->rgba[0]) * dmax); offs += (*action)(imap, 1); imap = (unsigned long)((vertex->rgba[1]) * dmax); offs += (*action)(imap, 1); imap = (unsigned long)((vertex->rgba[2]) * dmax); offs += (*action)(imap, 1); return offs; } /* Put vertex' alpha (8/16bit) in shader stream */ static int gl2psPrintPDFShaderStreamDataAlpha(GL2PSvertex *vertex, size_t (*action)(unsigned long data, size_t size), int sigbyte) { int offs = 0; unsigned long imap; double dmax = ~1UL; /* FIXME: temp bux fix for 64 bit archs: */ if(sizeof(unsigned long) == 8) dmax = dmax - 2048.; if(sigbyte != 8 && sigbyte != 16) sigbyte = 8; sigbyte /= 8; imap = (unsigned long)((vertex->rgba[3]) * dmax); offs += (*action)(imap, sigbyte); return offs; } /* Put a triangles raw data in shader stream */ static int gl2psPrintPDFShaderStreamData(GL2PStriangle *triangle, GLfloat dx, GLfloat dy, GLfloat xmin, GLfloat ymin, size_t (*action)(unsigned long data, size_t size), int gray) { int i, offs = 0; GL2PSvertex v; if(gray && gray != 8 && gray != 16) gray = 8; for(i = 0; i < 3; ++i){ offs += gl2psPrintPDFShaderStreamDataCoord(&triangle->vertex[i], action, dx, dy, xmin, ymin); if(gray){ v = triangle->vertex[i]; offs += gl2psPrintPDFShaderStreamDataAlpha(&v, action, gray); } else{ offs += gl2psPrintPDFShaderStreamDataRGB(&triangle->vertex[i], action); } } return offs; } static void gl2psPDFRectHull(GLfloat *xmin, GLfloat *xmax, GLfloat *ymin, GLfloat *ymax, GL2PStriangle *triangles, int cnt) { int i, j; *xmin = triangles[0].vertex[0].xyz[0]; *xmax = triangles[0].vertex[0].xyz[0]; *ymin = triangles[0].vertex[0].xyz[1]; *ymax = triangles[0].vertex[0].xyz[1]; for(i = 0; i < cnt; ++i){ for(j = 0; j < 3; ++j){ if(*xmin > triangles[i].vertex[j].xyz[0]) *xmin = triangles[i].vertex[j].xyz[0]; if(*xmax < triangles[i].vertex[j].xyz[0]) *xmax = triangles[i].vertex[j].xyz[0]; if(*ymin > triangles[i].vertex[j].xyz[1]) *ymin = triangles[i].vertex[j].xyz[1]; if(*ymax < triangles[i].vertex[j].xyz[1]) *ymax = triangles[i].vertex[j].xyz[1]; } } } /* Writes shaded triangle gray == 0 means write RGB triangles gray == 8 8bit-grayscale (for alpha masks) gray == 16 16bit-grayscale (for alpha masks) */ static int gl2psPrintPDFShader(int obj, GL2PStriangle *triangles, int size, int gray) { int i, offs = 0, vertexbytes, done = 0; GLfloat xmin, xmax, ymin, ymax; switch(gray){ case 0: vertexbytes = 1+4+4+1+1+1; break; case 8: vertexbytes = 1+4+4+1; break; case 16: vertexbytes = 1+4+4+2; break; default: gray = 8; vertexbytes = 1+4+4+1; break; } gl2psPDFRectHull(&xmin, &xmax, &ymin, &ymax, triangles, size); offs += fprintf(gl2ps->stream, "%d 0 obj\n" "<< " "/ShadingType 4 " "/ColorSpace %s " "/BitsPerCoordinate 32 " "/BitsPerComponent %d " "/BitsPerFlag 8 " "/Decode [%f %f %f %f 0 1 %s] ", obj, (gray) ? "/DeviceGray" : "/DeviceRGB", (gray) ? gray : 8, xmin, xmax, ymin, ymax, (gray) ? "" : "0 1 0 1"); #if defined(GL2PS_HAVE_ZLIB) if(gl2ps->options & GL2PS_COMPRESS){ gl2psAllocCompress(vertexbytes * size * 3); for(i = 0; i < size; ++i) gl2psPrintPDFShaderStreamData(&triangles[i], xmax-xmin, ymax-ymin, xmin, ymin, gl2psWriteBigEndianCompress, gray); if(Z_OK == gl2psDeflate() && 23 + gl2ps->compress->destLen < gl2ps->compress->srcLen){ offs += gl2psPrintPDFCompressorType(); offs += fprintf(gl2ps->stream, "/Length %d " ">>\n" "stream\n", (int)gl2ps->compress->destLen); offs += gl2ps->compress->destLen * fwrite(gl2ps->compress->dest, gl2ps->compress->destLen, 1, gl2ps->stream); done = 1; } gl2psFreeCompress(); } #endif if(!done){ /* no compression, or too long after compression, or compress error -> write non-compressed entry */ offs += fprintf(gl2ps->stream, "/Length %d " ">>\n" "stream\n", vertexbytes * 3 * size); for(i = 0; i < size; ++i) offs += gl2psPrintPDFShaderStreamData(&triangles[i], xmax-xmin, ymax-ymin, xmin, ymin, gl2psWriteBigEndian, gray); } offs += fprintf(gl2ps->stream, "\nendstream\n" "endobj\n"); return offs; } /* Writes a XObject for a shaded triangle mask */ static int gl2psPrintPDFShaderMask(int obj, int childobj) { int offs = 0, len; offs += fprintf(gl2ps->stream, "%d 0 obj\n" "<<\n" "/Type /XObject\n" "/Subtype /Form\n" "/BBox [ %d %d %d %d ]\n" "/Group \n<<\n/S /Transparency /CS /DeviceRGB\n" ">>\n", obj, (int)gl2ps->viewport[0], (int)gl2ps->viewport[1], (int)gl2ps->viewport[2], (int)gl2ps->viewport[3]); len = (childobj>0) ? strlen("/TrSh sh\n") + (int)log10((double)childobj)+1 : strlen("/TrSh0 sh\n"); offs += fprintf(gl2ps->stream, "/Length %d\n" ">>\n" "stream\n", len); offs += fprintf(gl2ps->stream, "/TrSh%d sh\n", childobj); offs += fprintf(gl2ps->stream, "endstream\n" "endobj\n"); return offs; } /* Writes a Extended graphics state for a shaded triangle mask if simplealpha ist true the childobj argument is ignored and a /ca statement will be written instead */ static int gl2psPrintPDFShaderExtGS(int obj, int childobj) { int offs = 0; offs += fprintf(gl2ps->stream, "%d 0 obj\n" "<<\n", obj); offs += fprintf(gl2ps->stream, "/SMask << /S /Alpha /G %d 0 R >> ", childobj); offs += fprintf(gl2ps->stream, ">>\n" "endobj\n"); return offs; } /* a simple graphics state */ static int gl2psPrintPDFShaderSimpleExtGS(int obj, GLfloat alpha) { int offs = 0; offs += fprintf(gl2ps->stream, "%d 0 obj\n" "<<\n" "/ca %g" ">>\n" "endobj\n", obj, alpha); return offs; } /* Similar groups of functions for pixmaps and text */ static int gl2psPrintPDFPixmapStreamData(GL2PSimage *im, size_t (*action)(unsigned long data, size_t size), int gray) { int x, y; GLfloat r, g, b, a; if(im->format != GL_RGBA && gray) return 0; if(gray && gray !=8 && gray != 16) gray = 8; gray /= 8; for(y = 0; y < im->height; ++y){ for(x = 0; x < im->width; ++x){ a = gl2psGetRGB(im, x, y, &r, &g, &b); if(im->format == GL_RGBA && gray){ (*action)((unsigned long)(a*255) << 24, gray); } else{ (*action)((unsigned long)(r*255) << 24, 1); (*action)((unsigned long)(g*255) << 24, 1); (*action)((unsigned long)(b*255) << 24, 1); } } } switch(gray){ case 0: return 3 * im->width * im->height; case 1: return im->width * im->height; case 2: return 2 * im->width * im->height; default: return 3 * im->width * im->height; } } static int gl2psPrintPDFPixmap(int obj, int childobj, GL2PSimage *im, int gray) { int offs = 0, done = 0, sigbytes = 3; if(gray && gray !=8 && gray != 16) gray = 8; if(gray) sigbytes = gray / 8; offs += fprintf(gl2ps->stream, "%d 0 obj\n" "<<\n" "/Type /XObject\n" "/Subtype /Image\n" "/Width %d\n" "/Height %d\n" "/ColorSpace %s \n" "/BitsPerComponent 8\n", obj, (int)im->width, (int)im->height, (gray) ? "/DeviceGray" : "/DeviceRGB" ); if(GL_RGBA == im->format && gray == 0){ offs += fprintf(gl2ps->stream, "/SMask %d 0 R\n", childobj); } #if defined(GL2PS_HAVE_ZLIB) if(gl2ps->options & GL2PS_COMPRESS){ gl2psAllocCompress((int)(im->width * im->height * sigbytes)); gl2psPrintPDFPixmapStreamData(im, gl2psWriteBigEndianCompress, gray); if(Z_OK == gl2psDeflate() && 23 + gl2ps->compress->destLen < gl2ps->compress->srcLen){ offs += gl2psPrintPDFCompressorType(); offs += fprintf(gl2ps->stream, "/Length %d " ">>\n" "stream\n", (int)gl2ps->compress->destLen); offs += gl2ps->compress->destLen * fwrite(gl2ps->compress->dest, gl2ps->compress->destLen, 1, gl2ps->stream); done = 1; } gl2psFreeCompress(); } #endif if(!done){ /* no compression, or too long after compression, or compress error -> write non-compressed entry */ offs += fprintf(gl2ps->stream, "/Length %d " ">>\n" "stream\n", (int)(im->width * im->height * sigbytes)); offs += gl2psPrintPDFPixmapStreamData(im, gl2psWriteBigEndian, gray); } offs += fprintf(gl2ps->stream, "\nendstream\n" "endobj\n"); return offs; } static int gl2psPrintPDFText(int obj, GL2PSstring *s, int fontnumber) { int offs = 0; offs += fprintf(gl2ps->stream, "%d 0 obj\n" "<<\n" "/Type /Font\n" "/Subtype /Type1\n" "/Name /F%d\n" "/BaseFont /%s\n" "/Encoding /MacRomanEncoding\n" ">>\n" "endobj\n", obj, fontnumber, s->fontname); return offs; } /* Write the physical objects */ static int gl2psPDFgroupListWriteObjects(int entryoffs) { int i,j; GL2PSprimitive *p = NULL; GL2PSpdfgroup *gro; int offs = entryoffs; GL2PStriangle *triangles; int size = 0; if(!gl2ps->pdfgrouplist) return offs; for(i = 0; i < gl2psListNbr(gl2ps->pdfgrouplist); ++i){ gro = (GL2PSpdfgroup*)gl2psListPointer(gl2ps->pdfgrouplist, i); if(!gl2psListNbr(gro->ptrlist)) continue; p = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, 0); switch(p->type){ case GL2PS_POINT: break; case GL2PS_LINE: break; case GL2PS_TRIANGLE: size = gl2psListNbr(gro->ptrlist); triangles = (GL2PStriangle*)gl2psMalloc(sizeof(GL2PStriangle) * size); for(j = 0; j < size; ++j){ p = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, j); gl2psFillTriangleFromPrimitive(&triangles[j], p, GL_TRUE); } if(triangles[0].prop & T_VAR_COLOR){ gl2ps->xreflist[gro->shobjno] = offs; offs += gl2psPrintPDFShader(gro->shobjno, triangles, size, 0); } if(triangles[0].prop & T_ALPHA_LESS_1){ gl2ps->xreflist[gro->gsobjno] = offs; offs += gl2psPrintPDFShaderSimpleExtGS(gro->gsobjno, triangles[0].vertex[0].rgba[3]); } if(triangles[0].prop & T_VAR_ALPHA){ gl2ps->xreflist[gro->gsobjno] = offs; offs += gl2psPrintPDFShaderExtGS(gro->gsobjno, gro->trgroupobjno); gl2ps->xreflist[gro->trgroupobjno] = offs; offs += gl2psPrintPDFShaderMask(gro->trgroupobjno, gro->maskshno); gl2ps->xreflist[gro->maskshobjno] = offs; offs += gl2psPrintPDFShader(gro->maskshobjno, triangles, size, 8); } gl2psFree(triangles); break; case GL2PS_PIXMAP: gl2ps->xreflist[gro->imobjno] = offs; offs += gl2psPrintPDFPixmap(gro->imobjno, gro->imobjno+1, p->data.image, 0); if(p->data.image->format == GL_RGBA){ gl2ps->xreflist[gro->imobjno+1] = offs; offs += gl2psPrintPDFPixmap(gro->imobjno+1, -1, p->data.image, 8); } break; case GL2PS_TEXT: gl2ps->xreflist[gro->fontobjno] = offs; offs += gl2psPrintPDFText(gro->fontobjno,p->data.text,gro->fontno); break; case GL2PS_SPECIAL : /* alignment contains the format for which the special output text is intended */ if(p->data.text->alignment == GL2PS_PDF) offs += fprintf(gl2ps->stream, "%s\n", p->data.text->str); break; default: break; } } return offs; } /* All variable data has been written at this point and all required functioninality has been gathered, so we can write now file footer with cross reference table and trailer */ static void gl2psPrintPDFFooter(void) { int i, offs; gl2psPDFgroupListInit(); gl2psPDFgroupListWriteMainStream(); offs = gl2ps->xreflist[5] + gl2ps->streamlength; offs += gl2psClosePDFDataStream(); gl2ps->xreflist[5] = offs; offs += gl2psPrintPDFDataStreamLength(gl2ps->streamlength); gl2ps->xreflist[6] = offs; gl2ps->streamlength = 0; offs += gl2psPrintPDFOpenPage(); offs += gl2psPDFgroupListWriteVariableResources(); gl2ps->xreflist = (int*)gl2psRealloc(gl2ps->xreflist, sizeof(int) * (gl2ps->objects_stack + 1)); gl2ps->xreflist[7] = offs; offs += gl2psPrintPDFGSObject(); gl2ps->xreflist[8] = offs; gl2ps->xreflist[gl2ps->objects_stack] = gl2psPDFgroupListWriteObjects(gl2ps->xreflist[8]); /* Start cross reference table. The file has to been opened in binary mode to preserve the 20 digit string length! */ fprintf(gl2ps->stream, "xref\n" "0 %d\n" "%010d 65535 f \n", gl2ps->objects_stack, 0); for(i = 1; i < gl2ps->objects_stack; ++i) fprintf(gl2ps->stream, "%010d 00000 n \n", gl2ps->xreflist[i]); fprintf(gl2ps->stream, "trailer\n" "<<\n" "/Size %d\n" "/Info 1 0 R\n" "/Root 2 0 R\n" ">>\n" "startxref\n%d\n" "%%%%EOF\n", gl2ps->objects_stack, gl2ps->xreflist[gl2ps->objects_stack]); /* Free auxiliary lists and arrays */ gl2psFree(gl2ps->xreflist); gl2psListDelete(gl2ps->pdfprimlist); gl2psPDFgroupListDelete(); #if defined(GL2PS_HAVE_ZLIB) if(gl2ps->options & GL2PS_COMPRESS){ gl2psFreeCompress(); gl2psFree(gl2ps->compress); gl2ps->compress = NULL; } #endif } /* PDF begin viewport */ static void gl2psPrintPDFBeginViewport(GLint viewport[4]) { int offs = 0; GLint index; GLfloat rgba[4]; int x = viewport[0], y = viewport[1], w = viewport[2], h = viewport[3]; glRenderMode(GL_FEEDBACK); if(gl2ps->header){ gl2psPrintPDFHeader(); gl2ps->header = GL_FALSE; } offs += gl2psPrintf("q\n"); if(gl2ps->options & GL2PS_DRAW_BACKGROUND){ if(gl2ps->colormode == GL_RGBA || gl2ps->colorsize == 0){ glGetFloatv(GL_COLOR_CLEAR_VALUE, rgba); } else{ glGetIntegerv(GL_INDEX_CLEAR_VALUE, &index); rgba[0] = gl2ps->colormap[index][0]; rgba[1] = gl2ps->colormap[index][1]; rgba[2] = gl2ps->colormap[index][2]; rgba[3] = 1.0F; } offs += gl2psPrintPDFFillColor(rgba); offs += gl2psPrintf("%d %d %d %d re\n" "W\n" "f\n", x, y, w, h); } else{ offs += gl2psPrintf("%d %d %d %d re\n" "W\n" "n\n", x, y, w, h); } gl2ps->streamlength += offs; } static GLint gl2psPrintPDFEndViewport(void) { GLint res; res = gl2psPrintPrimitives(); gl2ps->streamlength += gl2psPrintf("Q\n"); return res; } static void gl2psPrintPDFFinalPrimitive(void) { } /* definition of the PDF backend */ static GL2PSbackend gl2psPDF = { gl2psPrintPDFHeader, gl2psPrintPDFFooter, gl2psPrintPDFBeginViewport, gl2psPrintPDFEndViewport, gl2psPrintPDFPrimitive, gl2psPrintPDFFinalPrimitive, "pdf", "Portable Document Format" }; /********************************************************************* * * SVG routines * *********************************************************************/ static void gl2psSVGGetCoordsAndColors(int n, GL2PSvertex *verts, GL2PSxyz *xyz, GL2PSrgba *rgba) { int i, j; for(i = 0; i < n; i++){ xyz[i][0] = verts[i].xyz[0]; xyz[i][1] = gl2ps->viewport[3] - verts[i].xyz[1]; xyz[i][2] = 0.0F; for(j = 0; j < 4; j++) rgba[i][j] = verts[i].rgba[j]; } } static void gl2psSVGGetColorString(GL2PSrgba rgba, char str[32]) { int r = (int)(255. * rgba[0]); int g = (int)(255. * rgba[1]); int b = (int)(255. * rgba[2]); int rc = (r < 0) ? 0 : (r > 255) ? 255 : r; int gc = (g < 0) ? 0 : (g > 255) ? 255 : g; int bc = (b < 0) ? 0 : (b > 255) ? 255 : b; sprintf(str, "#%2.2x%2.2x%2.2x", rc, gc, bc); } static void gl2psPrintSVGHeader(void) { int x, y, width, height; char col[32]; time_t now; time(&now); if (gl2ps->options & GL2PS_LANDSCAPE){ x = (int)gl2ps->viewport[1]; y = (int)gl2ps->viewport[0]; width = (int)gl2ps->viewport[3]; height = (int)gl2ps->viewport[2]; } else{ x = (int)gl2ps->viewport[0]; y = (int)gl2ps->viewport[1]; width = (int)gl2ps->viewport[2]; height = (int)gl2ps->viewport[3]; } /* Compressed SVG files (.svgz) are simply gzipped SVG files */ gl2psPrintGzipHeader(); gl2psPrintf("\n"); gl2psPrintf("\n", width, height, x, y, width, height); gl2psPrintf("%s\n", gl2ps->title); gl2psPrintf("\n"); gl2psPrintf("Creator: GL2PS %d.%d.%d%s, %s\n" "For: %s\n" "CreationDate: %s", GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION, GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT, gl2ps->producer, ctime(&now)); gl2psPrintf("\n"); gl2psPrintf("\n"); gl2psPrintf("\n"); if(gl2ps->options & GL2PS_DRAW_BACKGROUND){ gl2psSVGGetColorString(gl2ps->bgcolor, col); gl2psPrintf("\n", col, (int)gl2ps->viewport[0], (int)gl2ps->viewport[1], (int)gl2ps->viewport[2], (int)gl2ps->viewport[1], (int)gl2ps->viewport[2], (int)gl2ps->viewport[3], (int)gl2ps->viewport[0], (int)gl2ps->viewport[3]); } gl2psPrintf("\n"); } static void gl2psPrintSVGSmoothTriangle(GL2PSxyz xyz[3], GL2PSrgba rgba[3]) { int i; GL2PSxyz xyz2[3]; GL2PSrgba rgba2[3]; char col[32]; /* Apparently there is no easy way to do Gouraud shading in SVG without explicitly pre-defining gradients, so for now we just do recursive subdivision */ if(gl2psSameColorThreshold(3, rgba, gl2ps->threshold)){ gl2psSVGGetColorString(rgba[0], col); gl2psPrintf("\n", xyz[0][0], xyz[0][1], xyz[1][0], xyz[1][1], xyz[2][0], xyz[2][1]); } else{ /* subdivide into 4 subtriangles */ for(i = 0; i < 3; i++){ xyz2[0][i] = xyz[0][i]; xyz2[1][i] = 0.5 * (xyz[0][i] + xyz[1][i]); xyz2[2][i] = 0.5 * (xyz[0][i] + xyz[2][i]); } for(i = 0; i < 4; i++){ rgba2[0][i] = rgba[0][i]; rgba2[1][i] = 0.5 * (rgba[0][i] + rgba[1][i]); rgba2[2][i] = 0.5 * (rgba[0][i] + rgba[2][i]); } gl2psPrintSVGSmoothTriangle(xyz2, rgba2); for(i = 0; i < 3; i++){ xyz2[0][i] = 0.5 * (xyz[0][i] + xyz[1][i]); xyz2[1][i] = xyz[1][i]; xyz2[2][i] = 0.5 * (xyz[1][i] + xyz[2][i]); } for(i = 0; i < 4; i++){ rgba2[0][i] = 0.5 * (rgba[0][i] + rgba[1][i]); rgba2[1][i] = rgba[1][i]; rgba2[2][i] = 0.5 * (rgba[1][i] + rgba[2][i]); } gl2psPrintSVGSmoothTriangle(xyz2, rgba2); for(i = 0; i < 3; i++){ xyz2[0][i] = 0.5 * (xyz[0][i] + xyz[2][i]); xyz2[1][i] = xyz[2][i]; xyz2[2][i] = 0.5 * (xyz[1][i] + xyz[2][i]); } for(i = 0; i < 4; i++){ rgba2[0][i] = 0.5 * (rgba[0][i] + rgba[2][i]); rgba2[1][i] = rgba[2][i]; rgba2[2][i] = 0.5 * (rgba[1][i] + rgba[2][i]); } gl2psPrintSVGSmoothTriangle(xyz2, rgba2); for(i = 0; i < 3; i++){ xyz2[0][i] = 0.5 * (xyz[0][i] + xyz[1][i]); xyz2[1][i] = 0.5 * (xyz[1][i] + xyz[2][i]); xyz2[2][i] = 0.5 * (xyz[0][i] + xyz[2][i]); } for(i = 0; i < 4; i++){ rgba2[0][i] = 0.5 * (rgba[0][i] + rgba[1][i]); rgba2[1][i] = 0.5 * (rgba[1][i] + rgba[2][i]); rgba2[2][i] = 0.5 * (rgba[0][i] + rgba[2][i]); } gl2psPrintSVGSmoothTriangle(xyz2, rgba2); } } static void gl2psPrintSVGDash(GLushort pattern, GLint factor) { int i, n, array[10]; if(!pattern || !factor) return; /* solid line */ gl2psParseStipplePattern(pattern, factor, &n, array); gl2psPrintf("stroke-dasharray=\""); for(i = 0; i < n; i++){ if(i) gl2psPrintf(","); gl2psPrintf("%d", array[i]); } gl2psPrintf("\" "); } static void gl2psEndSVGLine(void) { int i; if(gl2ps->lastvertex.rgba[0] >= 0.){ gl2psPrintf("%g,%g\"/>\n", gl2ps->lastvertex.xyz[0], gl2ps->viewport[3] - gl2ps->lastvertex.xyz[1]); for(i = 0; i < 3; i++) gl2ps->lastvertex.xyz[i] = -1.; for(i = 0; i < 4; i++) gl2ps->lastvertex.rgba[i] = -1.; } } static void gl2psPrintSVGPixmap(GLfloat x, GLfloat y, GL2PSimage *pixmap) { #if defined(GL2PS_HAVE_LIBPNG) GL2PSlist *png; unsigned char c; int i; /* The only image types supported by the SVG standard are JPEG, PNG and SVG. Here we choose PNG, and since we want to embed the image directly in the SVG stream (and not link to an external image file), we need to encode the pixmap into PNG in memory, then encode it into base64. */ png = gl2psListCreate(pixmap->width * pixmap->height * 3, 1000, sizeof(unsigned char)); gl2psConvertPixmapToPNG(pixmap, png); gl2psListEncodeBase64(png); gl2psPrintf("height, pixmap->width, pixmap->height); gl2psPrintf("xlink:href=\"data:image/png;base64,"); for(i = 0; i < gl2psListNbr(png); i++){ gl2psListRead(png, i, &c); gl2psPrintf("%c", c); } gl2psPrintf("\"/>\n"); gl2psListDelete(png); #else gl2psMsg(GL2PS_WARNING, "GL2PS has to be compiled with PNG support in " "order to embed images in SVG streams"); #endif } static void gl2psPrintSVGPrimitive(void *data) { GL2PSprimitive *prim; GL2PSxyz xyz[4]; GL2PSrgba rgba[4]; char col[32]; int newline; prim = *(GL2PSprimitive**)data; if((gl2ps->options & GL2PS_OCCLUSION_CULL) && prim->culled) return; /* We try to draw connected lines as a single path to get nice line joins and correct stippling. So if the primitive to print is not a line we must first finish the current line (if any): */ if(prim->type != GL2PS_LINE) gl2psEndSVGLine(); gl2psSVGGetCoordsAndColors(prim->numverts, prim->verts, xyz, rgba); switch(prim->type){ case GL2PS_POINT : gl2psSVGGetColorString(rgba[0], col); gl2psPrintf("\n", xyz[0][0], xyz[0][1], 0.5 * prim->width); break; case GL2PS_LINE : if(!gl2psSamePosition(gl2ps->lastvertex.xyz, prim->verts[0].xyz) || !gl2psSameColor(gl2ps->lastrgba, prim->verts[0].rgba) || gl2ps->lastlinewidth != prim->width || gl2ps->lastpattern != prim->pattern || gl2ps->lastfactor != prim->factor){ /* End the current line if the new segment does not start where the last one ended, or if the color, the width or the stippling have changed (we will need to use multi-point gradients for smooth-shaded lines) */ gl2psEndSVGLine(); newline = 1; } else{ newline = 0; } gl2ps->lastvertex = prim->verts[1]; gl2psSetLastColor(prim->verts[0].rgba); gl2ps->lastlinewidth = prim->width; gl2ps->lastpattern = prim->pattern; gl2ps->lastfactor = prim->factor; if(newline){ gl2psSVGGetColorString(rgba[0], col); gl2psPrintf("width); if(rgba[0][3] < 1.0F) gl2psPrintf("stroke-opacity=\"%g\" ", rgba[0][3]); gl2psPrintSVGDash(prim->pattern, prim->factor); gl2psPrintf("points=\"%g,%g ", xyz[0][0], xyz[0][1]); } else{ gl2psPrintf("%g,%g ", xyz[0][0], xyz[0][1]); } break; case GL2PS_TRIANGLE : gl2psPrintSVGSmoothTriangle(xyz, rgba); break; case GL2PS_QUADRANGLE : gl2psMsg(GL2PS_WARNING, "There should not be any quad left to print"); break; case GL2PS_PIXMAP : gl2psPrintSVGPixmap(xyz[0][0], xyz[0][1], prim->data.image); break; case GL2PS_TEXT : gl2psSVGGetColorString(prim->verts[0].rgba, col); gl2psPrintf("%s\n", col, xyz[0][0], xyz[0][1], prim->data.text->fontsize, prim->data.text->fontname, prim->data.text->str); break; case GL2PS_SPECIAL : /* alignment contains the format for which the special output text is intended */ if(prim->data.text->alignment == GL2PS_SVG) gl2psPrintf("%s\n", prim->data.text->str); break; default : break; } } static void gl2psPrintSVGFooter(void) { gl2psPrintf("\n"); gl2psPrintf("\n"); gl2psPrintGzipFooter(); } static void gl2psPrintSVGBeginViewport(GLint viewport[4]) { GLint index; char col[32]; GLfloat rgba[4]; int x = viewport[0], y = viewport[1], w = viewport[2], h = viewport[3]; glRenderMode(GL_FEEDBACK); if(gl2ps->header){ gl2psPrintSVGHeader(); gl2ps->header = GL_FALSE; } if(gl2ps->options & GL2PS_DRAW_BACKGROUND){ if(gl2ps->colormode == GL_RGBA || gl2ps->colorsize == 0){ glGetFloatv(GL_COLOR_CLEAR_VALUE, rgba); } else{ glGetIntegerv(GL_INDEX_CLEAR_VALUE, &index); rgba[0] = gl2ps->colormap[index][0]; rgba[1] = gl2ps->colormap[index][1]; rgba[2] = gl2ps->colormap[index][2]; rgba[3] = 1.0F; } gl2psSVGGetColorString(rgba, col); gl2psPrintf("\n", col, x, gl2ps->viewport[3] - y, x + w, gl2ps->viewport[3] - y, x + w, gl2ps->viewport[3] - (y + h), x, gl2ps->viewport[3] - (y + h)); } gl2psPrintf("\n", x, y, w, h); gl2psPrintf(" \n", x, gl2ps->viewport[3] - y, x + w, gl2ps->viewport[3] - y, x + w, gl2ps->viewport[3] - (y + h), x, gl2ps->viewport[3] - (y + h)); gl2psPrintf("\n"); gl2psPrintf("\n", x, y, w, h); } static GLint gl2psPrintSVGEndViewport(void) { GLint res; res = gl2psPrintPrimitives(); gl2psPrintf("\n"); return res; } static void gl2psPrintSVGFinalPrimitive(void) { /* End any remaining line, if any */ gl2psEndSVGLine(); } /* definition of the SVG backend */ static GL2PSbackend gl2psSVG = { gl2psPrintSVGHeader, gl2psPrintSVGFooter, gl2psPrintSVGBeginViewport, gl2psPrintSVGEndViewport, gl2psPrintSVGPrimitive, gl2psPrintSVGFinalPrimitive, "svg", "Scalable Vector Graphics" }; /********************************************************************* * * PGF routines * *********************************************************************/ static void gl2psPrintPGFColor(GL2PSrgba rgba) { if(!gl2psSameColor(gl2ps->lastrgba, rgba)){ gl2psSetLastColor(rgba); fprintf(gl2ps->stream, "\\color[rgb]{%f,%f,%f}\n", rgba[0], rgba[1], rgba[2]); } } static void gl2psPrintPGFHeader(void) { time_t now; time(&now); fprintf(gl2ps->stream, "%% Title: %s\n" "%% Creator: GL2PS %d.%d.%d%s, %s\n" "%% For: %s\n" "%% CreationDate: %s", gl2ps->title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION, GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT, gl2ps->producer, ctime(&now)); fprintf(gl2ps->stream, "\\begin{pgfpicture}\n"); if(gl2ps->options & GL2PS_DRAW_BACKGROUND){ gl2psPrintPGFColor(gl2ps->bgcolor); fprintf(gl2ps->stream, "\\pgfpathrectanglecorners{" "\\pgfpoint{%dpt}{%dpt}}{\\pgfpoint{%dpt}{%dpt}}\n" "\\pgfusepath{fill}\n", (int)gl2ps->viewport[0], (int)gl2ps->viewport[1], (int)gl2ps->viewport[2], (int)gl2ps->viewport[3]); } } static void gl2psPrintPGFDash(GLushort pattern, GLint factor) { int i, n, array[10]; if(pattern == gl2ps->lastpattern && factor == gl2ps->lastfactor) return; gl2ps->lastpattern = pattern; gl2ps->lastfactor = factor; if(!pattern || !factor){ /* solid line */ fprintf(gl2ps->stream, "\\pgfsetdash{}{0pt}\n"); } else{ gl2psParseStipplePattern(pattern, factor, &n, array); fprintf(gl2ps->stream, "\\pgfsetdash{"); for(i = 0; i < n; i++) fprintf(gl2ps->stream, "{%dpt}", array[i]); fprintf(gl2ps->stream, "}{0pt}\n"); } } static const char *gl2psPGFTextAlignment(int align) { switch(align){ case GL2PS_TEXT_C : return "center"; case GL2PS_TEXT_CL : return "west"; case GL2PS_TEXT_CR : return "east"; case GL2PS_TEXT_B : return "south"; case GL2PS_TEXT_BR : return "south east"; case GL2PS_TEXT_T : return "north"; case GL2PS_TEXT_TL : return "north west"; case GL2PS_TEXT_TR : return "north east"; case GL2PS_TEXT_BL : default : return "south west"; } } static void gl2psPrintPGFPrimitive(void *data) { GL2PSprimitive *prim; prim = *(GL2PSprimitive**)data; switch(prim->type){ case GL2PS_POINT : /* Points in openGL are rectangular */ gl2psPrintPGFColor(prim->verts[0].rgba); fprintf(gl2ps->stream, "\\pgfpathrectangle{\\pgfpoint{%fpt}{%fpt}}" "{\\pgfpoint{%fpt}{%fpt}}\n\\pgfusepath{fill}\n", prim->verts[0].xyz[0]-0.5*prim->width, prim->verts[0].xyz[1]-0.5*prim->width, prim->width,prim->width); break; case GL2PS_LINE : gl2psPrintPGFColor(prim->verts[0].rgba); if(gl2ps->lastlinewidth != prim->width){ gl2ps->lastlinewidth = prim->width; fprintf(gl2ps->stream, "\\pgfsetlinewidth{%fpt}\n", gl2ps->lastlinewidth); } gl2psPrintPGFDash(prim->pattern, prim->factor); fprintf(gl2ps->stream, "\\pgfpathmoveto{\\pgfpoint{%fpt}{%fpt}}\n" "\\pgflineto{\\pgfpoint{%fpt}{%fpt}}\n" "\\pgfusepath{stroke}\n", prim->verts[1].xyz[0], prim->verts[1].xyz[1], prim->verts[0].xyz[0], prim->verts[0].xyz[1]); break; case GL2PS_TRIANGLE : if(gl2ps->lastlinewidth != 0){ gl2ps->lastlinewidth = 0; fprintf(gl2ps->stream, "\\pgfsetlinewidth{0.01pt}\n"); } gl2psPrintPGFColor(prim->verts[0].rgba); fprintf(gl2ps->stream, "\\pgfpathmoveto{\\pgfpoint{%fpt}{%fpt}}\n" "\\pgflineto{\\pgfpoint{%fpt}{%fpt}}\n" "\\pgflineto{\\pgfpoint{%fpt}{%fpt}}\n" "\\pgfpathclose\n" "\\pgfusepath{fill,stroke}\n", prim->verts[2].xyz[0], prim->verts[2].xyz[1], prim->verts[1].xyz[0], prim->verts[1].xyz[1], prim->verts[0].xyz[0], prim->verts[0].xyz[1]); break; case GL2PS_TEXT : fprintf(gl2ps->stream, "{\n\\pgftransformshift{\\pgfpoint{%fpt}{%fpt}}\n", prim->verts[0].xyz[0], prim->verts[0].xyz[1]); if(prim->data.text->angle) fprintf(gl2ps->stream, "\\pgftransformrotate{%f}{", prim->data.text->angle); fprintf(gl2ps->stream, "\\pgfnode{rectangle}{%s}{\\fontsize{%d}{0}\\selectfont", gl2psPGFTextAlignment(prim->data.text->alignment), prim->data.text->fontsize); fprintf(gl2ps->stream, "\\textcolor[rgb]{%g,%g,%g}{{%s}}", prim->verts[0].rgba[0], prim->verts[0].rgba[1], prim->verts[0].rgba[2], prim->data.text->str); fprintf(gl2ps->stream, "}{}{\\pgfusepath{discard}}}\n"); break; case GL2PS_SPECIAL : /* alignment contains the format for which the special output text is intended */ if (prim->data.text->alignment == GL2PS_PGF) fprintf(gl2ps->stream, "%s\n", prim->data.text->str); break; default : break; } } static void gl2psPrintPGFFooter(void) { fprintf(gl2ps->stream, "\\end{pgfpicture}\n"); } static void gl2psPrintPGFBeginViewport(GLint viewport[4]) { GLint index; GLfloat rgba[4]; int x = viewport[0], y = viewport[1], w = viewport[2], h = viewport[3]; glRenderMode(GL_FEEDBACK); if(gl2ps->header){ gl2psPrintPGFHeader(); gl2ps->header = GL_FALSE; } fprintf(gl2ps->stream, "\\begin{pgfscope}\n"); if(gl2ps->options & GL2PS_DRAW_BACKGROUND){ if(gl2ps->colormode == GL_RGBA || gl2ps->colorsize == 0){ glGetFloatv(GL_COLOR_CLEAR_VALUE, rgba); } else{ glGetIntegerv(GL_INDEX_CLEAR_VALUE, &index); rgba[0] = gl2ps->colormap[index][0]; rgba[1] = gl2ps->colormap[index][1]; rgba[2] = gl2ps->colormap[index][2]; rgba[3] = 1.0F; } gl2psPrintPGFColor(rgba); fprintf(gl2ps->stream, "\\pgfpathrectangle{\\pgfpoint{%dpt}{%dpt}}" "{\\pgfpoint{%dpt}{%dpt}}\n" "\\pgfusepath{fill}\n", x, y, w, h); } fprintf(gl2ps->stream, "\\pgfpathrectangle{\\pgfpoint{%dpt}{%dpt}}" "{\\pgfpoint{%dpt}{%dpt}}\n" "\\pgfusepath{clip}\n", x, y, w, h); } static GLint gl2psPrintPGFEndViewport(void) { GLint res; res = gl2psPrintPrimitives(); fprintf(gl2ps->stream, "\\end{pgfscope}\n"); return res; } static void gl2psPrintPGFFinalPrimitive(void) { } /* definition of the PGF backend */ static GL2PSbackend gl2psPGF = { gl2psPrintPGFHeader, gl2psPrintPGFFooter, gl2psPrintPGFBeginViewport, gl2psPrintPGFEndViewport, gl2psPrintPGFPrimitive, gl2psPrintPGFFinalPrimitive, "tex", "PGF Latex Graphics" }; /********************************************************************* * * General primitive printing routine * *********************************************************************/ /* Warning: the ordering of the backends must match the format #defines in gl2ps.h */ static GL2PSbackend *gl2psbackends[] = { &gl2psPS, /* 0 */ &gl2psEPS, /* 1 */ &gl2psTEX, /* 2 */ &gl2psPDF, /* 3 */ &gl2psSVG, /* 4 */ &gl2psPGF /* 5 */ }; static void gl2psComputeTightBoundingBox(void *data) { GL2PSprimitive *prim; int i; prim = *(GL2PSprimitive**)data; for(i = 0; i < prim->numverts; i++){ if(prim->verts[i].xyz[0] < gl2ps->viewport[0]) gl2ps->viewport[0] = (GLint)prim->verts[i].xyz[0]; if(prim->verts[i].xyz[0] > gl2ps->viewport[2]) gl2ps->viewport[2] = (GLint)(prim->verts[i].xyz[0] + 0.5F); if(prim->verts[i].xyz[1] < gl2ps->viewport[1]) gl2ps->viewport[1] = (GLint)prim->verts[i].xyz[1]; if(prim->verts[i].xyz[1] > gl2ps->viewport[3]) gl2ps->viewport[3] = (GLint)(prim->verts[i].xyz[1] + 0.5F); } } static GLint gl2psPrintPrimitives(void) { GL2PSbsptree *root; GL2PSxyz eye = {0.0F, 0.0F, 100.0F * GL2PS_ZSCALE}; GLint used; used = glRenderMode(GL_RENDER); if(used < 0){ gl2psMsg(GL2PS_INFO, "OpenGL feedback buffer overflow"); return GL2PS_OVERFLOW; } if(used > 0) gl2psParseFeedbackBuffer(used); gl2psRescaleAndOffset(); if(gl2ps->header){ if(gl2psListNbr(gl2ps->primitives) && (gl2ps->options & GL2PS_TIGHT_BOUNDING_BOX)){ gl2ps->viewport[0] = gl2ps->viewport[1] = 100000; gl2ps->viewport[2] = gl2ps->viewport[3] = -100000; gl2psListAction(gl2ps->primitives, gl2psComputeTightBoundingBox); } (gl2psbackends[gl2ps->format]->printHeader)(); gl2ps->header = GL_FALSE; } if(!gl2psListNbr(gl2ps->primitives)){ /* empty feedback buffer and/or nothing else to print */ return GL2PS_NO_FEEDBACK; } switch(gl2ps->sort){ case GL2PS_NO_SORT : gl2psListAction(gl2ps->primitives, gl2psbackends[gl2ps->format]->printPrimitive); gl2psListAction(gl2ps->primitives, gl2psFreePrimitive); /* reset the primitive list, waiting for the next viewport */ gl2psListReset(gl2ps->primitives); break; case GL2PS_SIMPLE_SORT : gl2psListSort(gl2ps->primitives, gl2psCompareDepth); if(gl2ps->options & GL2PS_OCCLUSION_CULL){ gl2psListActionInverse(gl2ps->primitives, gl2psAddInImageTree); gl2psFreeBspImageTree(&gl2ps->imagetree); } gl2psListAction(gl2ps->primitives, gl2psbackends[gl2ps->format]->printPrimitive); gl2psListAction(gl2ps->primitives, gl2psFreePrimitive); /* reset the primitive list, waiting for the next viewport */ gl2psListReset(gl2ps->primitives); break; case GL2PS_BSP_SORT : root = (GL2PSbsptree*)gl2psMalloc(sizeof(GL2PSbsptree)); gl2psBuildBspTree(root, gl2ps->primitives); if(GL_TRUE == gl2ps->boundary) gl2psBuildPolygonBoundary(root); if(gl2ps->options & GL2PS_OCCLUSION_CULL){ gl2psTraverseBspTree(root, eye, -GL2PS_EPSILON, gl2psLess, gl2psAddInImageTree, 1); gl2psFreeBspImageTree(&gl2ps->imagetree); } gl2psTraverseBspTree(root, eye, GL2PS_EPSILON, gl2psGreater, gl2psbackends[gl2ps->format]->printPrimitive, 0); gl2psFreeBspTree(&root); /* reallocate the primitive list (it's been deleted by gl2psBuildBspTree) in case there is another viewport */ gl2ps->primitives = gl2psListCreate(500, 500, sizeof(GL2PSprimitive*)); break; } gl2psbackends[gl2ps->format]->printFinalPrimitive(); return GL2PS_SUCCESS; } /********************************************************************* * * Public routines * *********************************************************************/ GL2PSDLL_API GLint gl2psBeginPage(const char *title, const char *producer, GLint viewport[4], GLint format, GLint sort, GLint options, GLint colormode, GLint colorsize, GL2PSrgba *colormap, GLint nr, GLint ng, GLint nb, GLint buffersize, FILE *stream, const char *filename) { GLint index; int i; if(gl2ps){ gl2psMsg(GL2PS_ERROR, "gl2psBeginPage called in wrong program state"); return GL2PS_ERROR; } gl2ps = (GL2PScontext*)gl2psMalloc(sizeof(GL2PScontext)); if(format >= 0 && format < (GLint)(sizeof(gl2psbackends)/sizeof(gl2psbackends[0]))){ gl2ps->format = format; } else { gl2psMsg(GL2PS_ERROR, "Unknown output format: %d", format); gl2psFree(gl2ps); gl2ps = NULL; return GL2PS_ERROR; } switch(sort){ case GL2PS_NO_SORT : case GL2PS_SIMPLE_SORT : case GL2PS_BSP_SORT : gl2ps->sort = sort; break; default : gl2psMsg(GL2PS_ERROR, "Unknown sorting algorithm: %d", sort); gl2psFree(gl2ps); gl2ps = NULL; return GL2PS_ERROR; } if(stream){ gl2ps->stream = stream; } else{ gl2psMsg(GL2PS_ERROR, "Bad file pointer"); gl2psFree(gl2ps); gl2ps = NULL; return GL2PS_ERROR; } gl2ps->header = GL_TRUE; gl2ps->maxbestroot = 10; gl2ps->options = options; gl2ps->compress = NULL; gl2ps->imagemap_head = NULL; gl2ps->imagemap_tail = NULL; if(gl2ps->options & GL2PS_USE_CURRENT_VIEWPORT){ glGetIntegerv(GL_VIEWPORT, gl2ps->viewport); } else{ for(i = 0; i < 4; i++){ gl2ps->viewport[i] = viewport[i]; } } if(!gl2ps->viewport[2] || !gl2ps->viewport[3]){ gl2psMsg(GL2PS_ERROR, "Incorrect viewport (x=%d, y=%d, width=%d, height=%d)", gl2ps->viewport[0], gl2ps->viewport[1], gl2ps->viewport[2], gl2ps->viewport[3]); gl2psFree(gl2ps); gl2ps = NULL; return GL2PS_ERROR; } gl2ps->threshold[0] = nr ? 1.0F/(GLfloat)nr : 0.064F; gl2ps->threshold[1] = ng ? 1.0F/(GLfloat)ng : 0.034F; gl2ps->threshold[2] = nb ? 1.0F/(GLfloat)nb : 0.100F; gl2ps->colormode = colormode; gl2ps->buffersize = buffersize > 0 ? buffersize : 2048 * 2048; for(i = 0; i < 3; i++){ gl2ps->lastvertex.xyz[i] = -1.0F; } for(i = 0; i < 4; i++){ gl2ps->lastvertex.rgba[i] = -1.0F; gl2ps->lastrgba[i] = -1.0F; } gl2ps->lastlinewidth = -1.0F; gl2ps->lastpattern = 0; gl2ps->lastfactor = 0; gl2ps->imagetree = NULL; gl2ps->primitivetoadd = NULL; gl2ps->zerosurfacearea = GL_FALSE; gl2ps->pdfprimlist = NULL; gl2ps->pdfgrouplist = NULL; gl2ps->xreflist = NULL; /* get default blending mode from current OpenGL state (enabled by default for SVG) */ gl2ps->blending = (gl2ps->format == GL2PS_SVG) ? GL_TRUE : glIsEnabled(GL_BLEND); glGetIntegerv(GL_BLEND_SRC, &gl2ps->blendfunc[0]); glGetIntegerv(GL_BLEND_DST, &gl2ps->blendfunc[1]); if(gl2ps->colormode == GL_RGBA){ gl2ps->colorsize = 0; gl2ps->colormap = NULL; glGetFloatv(GL_COLOR_CLEAR_VALUE, gl2ps->bgcolor); } else if(gl2ps->colormode == GL_COLOR_INDEX){ if(!colorsize || !colormap){ gl2psMsg(GL2PS_ERROR, "Missing colormap for GL_COLOR_INDEX rendering"); gl2psFree(gl2ps); gl2ps = NULL; return GL2PS_ERROR; } gl2ps->colorsize = colorsize; gl2ps->colormap = (GL2PSrgba*)gl2psMalloc(gl2ps->colorsize * sizeof(GL2PSrgba)); memcpy(gl2ps->colormap, colormap, gl2ps->colorsize * sizeof(GL2PSrgba)); glGetIntegerv(GL_INDEX_CLEAR_VALUE, &index); gl2ps->bgcolor[0] = gl2ps->colormap[index][0]; gl2ps->bgcolor[1] = gl2ps->colormap[index][1]; gl2ps->bgcolor[2] = gl2ps->colormap[index][2]; gl2ps->bgcolor[3] = 1.0F; } else{ gl2psMsg(GL2PS_ERROR, "Unknown color mode in gl2psBeginPage"); gl2psFree(gl2ps); gl2ps = NULL; return GL2PS_ERROR; } if(!title){ gl2ps->title = (char*)gl2psMalloc(sizeof(char)); gl2ps->title[0] = '\0'; } else{ gl2ps->title = (char*)gl2psMalloc((strlen(title)+1)*sizeof(char)); strcpy(gl2ps->title, title); } if(!producer){ gl2ps->producer = (char*)gl2psMalloc(sizeof(char)); gl2ps->producer[0] = '\0'; } else{ gl2ps->producer = (char*)gl2psMalloc((strlen(producer)+1)*sizeof(char)); strcpy(gl2ps->producer, producer); } if(!filename){ gl2ps->filename = (char*)gl2psMalloc(sizeof(char)); gl2ps->filename[0] = '\0'; } else{ gl2ps->filename = (char*)gl2psMalloc((strlen(filename)+1)*sizeof(char)); strcpy(gl2ps->filename, filename); } gl2ps->primitives = gl2psListCreate(500, 500, sizeof(GL2PSprimitive*)); gl2ps->auxprimitives = gl2psListCreate(100, 100, sizeof(GL2PSprimitive*)); gl2ps->feedback = (GLfloat*)gl2psMalloc(gl2ps->buffersize * sizeof(GLfloat)); glFeedbackBuffer(gl2ps->buffersize, GL_3D_COLOR, gl2ps->feedback); glRenderMode(GL_FEEDBACK); return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psEndPage(void) { GLint res; if(!gl2ps) return GL2PS_UNINITIALIZED; res = gl2psPrintPrimitives(); if(res != GL2PS_OVERFLOW) (gl2psbackends[gl2ps->format]->printFooter)(); fflush(gl2ps->stream); gl2psListDelete(gl2ps->primitives); gl2psListDelete(gl2ps->auxprimitives); gl2psFreeImagemap(gl2ps->imagemap_head); gl2psFree(gl2ps->colormap); gl2psFree(gl2ps->title); gl2psFree(gl2ps->producer); gl2psFree(gl2ps->filename); gl2psFree(gl2ps->feedback); gl2psFree(gl2ps); gl2ps = NULL; return res; } GL2PSDLL_API GLint gl2psBeginViewport(GLint viewport[4]) { if(!gl2ps) return GL2PS_UNINITIALIZED; (gl2psbackends[gl2ps->format]->beginViewport)(viewport); return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psEndViewport(void) { GLint res; if(!gl2ps) return GL2PS_UNINITIALIZED; res = (gl2psbackends[gl2ps->format]->endViewport)(); return res; } GL2PSDLL_API GLint gl2psTextOpt(const char *str, const char *fontname, GLshort fontsize, GLint alignment, GLfloat angle) { return gl2psAddText(GL2PS_TEXT, str, fontname, fontsize, alignment, angle); } GL2PSDLL_API GLint gl2psText(const char *str, const char *fontname, GLshort fontsize) { return gl2psAddText(GL2PS_TEXT, str, fontname, fontsize, GL2PS_TEXT_BL, 0.0F); } GL2PSDLL_API GLint gl2psSpecial(GLint format, const char *str) { return gl2psAddText(GL2PS_SPECIAL, str, "", 0, format, 0.0F); } GL2PSDLL_API GLint gl2psDrawPixels(GLsizei width, GLsizei height, GLint xorig, GLint yorig, GLenum format, GLenum type, const void *pixels) { int size, i; GLfloat pos[4], *piv; GL2PSprimitive *prim; GLboolean valid; if(!gl2ps || !pixels) return GL2PS_UNINITIALIZED; if((width <= 0) || (height <= 0)) return GL2PS_ERROR; if(gl2ps->options & GL2PS_NO_PIXMAP) return GL2PS_SUCCESS; if((format != GL_RGB && format != GL_RGBA) || type != GL_FLOAT){ gl2psMsg(GL2PS_ERROR, "gl2psDrawPixels only implemented for " "GL_RGB/GL_RGBA, GL_FLOAT pixels"); return GL2PS_ERROR; } glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID, &valid); if(GL_FALSE == valid) return GL2PS_SUCCESS; /* the primitive is culled */ glGetFloatv(GL_CURRENT_RASTER_POSITION, pos); prim = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); prim->type = GL2PS_PIXMAP; prim->boundary = 0; prim->numverts = 1; prim->verts = (GL2PSvertex*)gl2psMalloc(sizeof(GL2PSvertex)); prim->verts[0].xyz[0] = pos[0] + xorig; prim->verts[0].xyz[1] = pos[1] + yorig; prim->verts[0].xyz[2] = pos[2]; prim->culled = 0; prim->offset = 0; prim->pattern = 0; prim->factor = 0; prim->width = 1; glGetFloatv(GL_CURRENT_RASTER_COLOR, prim->verts[0].rgba); prim->data.image = (GL2PSimage*)gl2psMalloc(sizeof(GL2PSimage)); prim->data.image->width = width; prim->data.image->height = height; prim->data.image->format = format; prim->data.image->type = type; switch(format){ case GL_RGBA: if(gl2ps->options & GL2PS_NO_BLENDING || !gl2ps->blending){ /* special case: blending turned off */ prim->data.image->format = GL_RGB; size = height * width * 3; prim->data.image->pixels = (GLfloat*)gl2psMalloc(size * sizeof(GLfloat)); piv = (GLfloat*)pixels; for(i = 0; i < size; ++i, ++piv){ prim->data.image->pixels[i] = *piv; if(!((i+1)%3)) ++piv; } } else{ size = height * width * 4; prim->data.image->pixels = (GLfloat*)gl2psMalloc(size * sizeof(GLfloat)); memcpy(prim->data.image->pixels, pixels, size * sizeof(GLfloat)); } break; case GL_RGB: default: size = height * width * 3; prim->data.image->pixels = (GLfloat*)gl2psMalloc(size * sizeof(GLfloat)); memcpy(prim->data.image->pixels, pixels, size * sizeof(GLfloat)); break; } gl2psListAdd(gl2ps->auxprimitives, &prim); glPassThrough(GL2PS_DRAW_PIXELS_TOKEN); return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psDrawImageMap(GLsizei width, GLsizei height, const GLfloat position[3], const unsigned char *imagemap){ int size, i; int sizeoffloat = sizeof(GLfloat); if(!gl2ps || !imagemap) return GL2PS_UNINITIALIZED; if((width <= 0) || (height <= 0)) return GL2PS_ERROR; size = height + height * ((width-1)/8); glPassThrough(GL2PS_IMAGEMAP_TOKEN); glBegin(GL_POINTS); glVertex3f(position[0], position[1],position[2]); glEnd(); glPassThrough((GLfloat)width); glPassThrough((GLfloat)height); for(i = 0; i < size; i += sizeoffloat){ float *value = (float*)imagemap; glPassThrough(*value); imagemap += sizeoffloat; } return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psEnable(GLint mode) { GLint tmp; if(!gl2ps) return GL2PS_UNINITIALIZED; switch(mode){ case GL2PS_POLYGON_OFFSET_FILL : glPassThrough(GL2PS_BEGIN_OFFSET_TOKEN); glGetFloatv(GL_POLYGON_OFFSET_FACTOR, &gl2ps->offset[0]); glGetFloatv(GL_POLYGON_OFFSET_UNITS, &gl2ps->offset[1]); break; case GL2PS_POLYGON_BOUNDARY : glPassThrough(GL2PS_BEGIN_BOUNDARY_TOKEN); break; case GL2PS_LINE_STIPPLE : glPassThrough(GL2PS_BEGIN_STIPPLE_TOKEN); glGetIntegerv(GL_LINE_STIPPLE_PATTERN, &tmp); glPassThrough((GLfloat)tmp); glGetIntegerv(GL_LINE_STIPPLE_REPEAT, &tmp); glPassThrough((GLfloat)tmp); break; case GL2PS_BLEND : glPassThrough(GL2PS_BEGIN_BLEND_TOKEN); break; default : gl2psMsg(GL2PS_WARNING, "Unknown mode in gl2psEnable: %d", mode); return GL2PS_WARNING; } return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psDisable(GLint mode) { if(!gl2ps) return GL2PS_UNINITIALIZED; switch(mode){ case GL2PS_POLYGON_OFFSET_FILL : glPassThrough(GL2PS_END_OFFSET_TOKEN); break; case GL2PS_POLYGON_BOUNDARY : glPassThrough(GL2PS_END_BOUNDARY_TOKEN); break; case GL2PS_LINE_STIPPLE : glPassThrough(GL2PS_END_STIPPLE_TOKEN); break; case GL2PS_BLEND : glPassThrough(GL2PS_END_BLEND_TOKEN); break; default : gl2psMsg(GL2PS_WARNING, "Unknown mode in gl2psDisable: %d", mode); return GL2PS_WARNING; } return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psPointSize(GLfloat value) { if(!gl2ps) return GL2PS_UNINITIALIZED; glPassThrough(GL2PS_POINT_SIZE_TOKEN); glPassThrough(value); return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psLineWidth(GLfloat value) { if(!gl2ps) return GL2PS_UNINITIALIZED; glPassThrough(GL2PS_LINE_WIDTH_TOKEN); glPassThrough(value); return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psBlendFunc(GLenum sfactor, GLenum dfactor) { if(!gl2ps) return GL2PS_UNINITIALIZED; if(GL_FALSE == gl2psSupportedBlendMode(sfactor, dfactor)) return GL2PS_WARNING; glPassThrough(GL2PS_SRC_BLEND_TOKEN); glPassThrough((GLfloat)sfactor); glPassThrough(GL2PS_DST_BLEND_TOKEN); glPassThrough((GLfloat)dfactor); return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psSetOptions(GLint options) { if(!gl2ps) return GL2PS_UNINITIALIZED; gl2ps->options = options; return GL2PS_SUCCESS; } GL2PSDLL_API const char *gl2psGetFileExtension(GLint format) { if(format >= 0 && format < (GLint)(sizeof(gl2psbackends)/sizeof(gl2psbackends[0]))) return gl2psbackends[format]->file_extension; else return "Unknown format"; } GL2PSDLL_API const char *gl2psGetFormatDescription(GLint format) { if(format >= 0 && format < (GLint)(sizeof(gl2psbackends)/sizeof(gl2psbackends[0]))) return gl2psbackends[format]->description; else return "Unknown format"; } GabeditSrc250/gl2ps/Dep.mk0000644000175100017510000000003113130664665015564 0ustar alloucheallouchegl2ps.o: gl2ps.c gl2ps.h GabeditSrc250/gl2ps/gl2ps.h0000644000175100017510000001460113130665226015725 0ustar alloucheallouche/* $Id: gl2ps.h,v 1.113 2006/11/06 00:48:06 geuzaine Exp $ */ /* * GL2PS, an OpenGL to PostScript Printing Library * Copyright (C) 1999-2006 Christophe Geuzaine * * This program is free software; you can redistribute it and/or * modify it under the terms of either: * * a) the GNU Library General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your * option) any later version; or * * b) the GL2PS License as published by Christophe Geuzaine, 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 either * the GNU Library General Public License or the GL2PS License for * more details. * * You should have received a copy of the GNU Library General Public * License along with this library in the file named "COPYING.LGPL"; * if not, write to the Free Software Foundation, Inc., 675 Mass Ave, * Cambridge, MA 02139, USA. * * You should have received a copy of the GL2PS License with this * library in the file named "COPYING.GL2PS"; if not, I will be glad * to provide one. * * For the latest info about gl2ps, see http://www.geuz.org/gl2ps/. * Please report all bugs and problems to . */ #ifndef __GL2PS_H__ #define __GL2PS_H__ #include #include /* Define GL2PSDLL at compile time to build a Windows DLL */ #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) # if defined(_MSC_VER) # pragma warning(disable:4115) # endif # include # if defined(GL2PSDLL) # if defined(GL2PSDLL_EXPORTS) # define GL2PSDLL_API __declspec(dllexport) # else # define GL2PSDLL_API __declspec(dllimport) # endif # else # define GL2PSDLL_API # endif #else # define GL2PSDLL_API #endif #if defined(__APPLE__) || defined(HAVE_OPENGL_GL_H) # include #else # include #endif /* Support for compressed PostScript/PDF/SVG and for embedded PNG images in SVG */ #if defined(HAVE_ZLIB) || defined(HAVE_LIBZ) # define GL2PS_HAVE_ZLIB # if defined(HAVE_LIBPNG) || defined(HAVE_PNG) # define GL2PS_HAVE_LIBPNG # endif #endif /* Version number */ #define GL2PS_MAJOR_VERSION 1 #define GL2PS_MINOR_VERSION 3 #define GL2PS_PATCH_VERSION 2 #define GL2PS_EXTRA_VERSION "" #define GL2PS_VERSION (GL2PS_MAJOR_VERSION + \ 0.01 * GL2PS_MINOR_VERSION + \ 0.0001 * GL2PS_PATCH_VERSION) #define GL2PS_COPYRIGHT "(C) 1999-2006 Christophe Geuzaine (geuz@geuz.org)" /* Output file formats (the values and the ordering are important!) */ #define GL2PS_PS 0 #define GL2PS_EPS 1 #define GL2PS_TEX 2 #define GL2PS_PDF 3 #define GL2PS_SVG 4 #define GL2PS_PGF 5 /* Sorting algorithms */ #define GL2PS_NO_SORT 1 #define GL2PS_SIMPLE_SORT 2 #define GL2PS_BSP_SORT 3 /* Message levels and error codes */ #define GL2PS_SUCCESS 0 #define GL2PS_INFO 1 #define GL2PS_WARNING 2 #define GL2PS_ERROR 3 #define GL2PS_NO_FEEDBACK 4 #define GL2PS_OVERFLOW 5 #define GL2PS_UNINITIALIZED 6 /* Options for gl2psBeginPage */ #define GL2PS_NONE 0 #define GL2PS_DRAW_BACKGROUND (1<<0) #define GL2PS_SIMPLE_LINE_OFFSET (1<<1) #define GL2PS_SILENT (1<<2) #define GL2PS_BEST_ROOT (1<<3) #define GL2PS_OCCLUSION_CULL (1<<4) #define GL2PS_NO_TEXT (1<<5) #define GL2PS_LANDSCAPE (1<<6) #define GL2PS_NO_PS3_SHADING (1<<7) #define GL2PS_NO_PIXMAP (1<<8) #define GL2PS_USE_CURRENT_VIEWPORT (1<<9) #define GL2PS_COMPRESS (1<<10) #define GL2PS_NO_BLENDING (1<<11) #define GL2PS_TIGHT_BOUNDING_BOX (1<<12) /* Arguments for gl2psEnable/gl2psDisable */ #define GL2PS_POLYGON_OFFSET_FILL 1 #define GL2PS_POLYGON_BOUNDARY 2 #define GL2PS_LINE_STIPPLE 3 #define GL2PS_BLEND 4 /* Text alignment (o=raster position; default mode is BL): +---+ +---+ +---+ +---+ +---+ +---+ +-o-+ o---+ +---o | o | o | | o | | | | | | | | | | | | +---+ +---+ +---+ +-o-+ o---+ +---o +---+ +---+ +---+ C CL CR B BL BR T TL TR */ #define GL2PS_TEXT_C 1 #define GL2PS_TEXT_CL 2 #define GL2PS_TEXT_CR 3 #define GL2PS_TEXT_B 4 #define GL2PS_TEXT_BL 5 #define GL2PS_TEXT_BR 6 #define GL2PS_TEXT_T 7 #define GL2PS_TEXT_TL 8 #define GL2PS_TEXT_TR 9 typedef GLfloat GL2PSrgba[4]; #if defined(__cplusplus) extern "C" { #endif GL2PSDLL_API GLint gl2psBeginPage(const char *title, const char *producer, GLint viewport[4], GLint format, GLint sort, GLint options, GLint colormode, GLint colorsize, GL2PSrgba *colormap, GLint nr, GLint ng, GLint nb, GLint buffersize, FILE *stream, const char *filename); GL2PSDLL_API GLint gl2psEndPage(void); GL2PSDLL_API GLint gl2psSetOptions(GLint options); GL2PSDLL_API GLint gl2psBeginViewport(GLint viewport[4]); GL2PSDLL_API GLint gl2psEndViewport(void); GL2PSDLL_API GLint gl2psText(const char *str, const char *fontname, GLshort fontsize); GL2PSDLL_API GLint gl2psTextOpt(const char *str, const char *fontname, GLshort fontsize, GLint align, GLfloat angle); GL2PSDLL_API GLint gl2psSpecial(GLint format, const char *str); GL2PSDLL_API GLint gl2psDrawPixels(GLsizei width, GLsizei height, GLint xorig, GLint yorig, GLenum format, GLenum type, const void *pixels); GL2PSDLL_API GLint gl2psEnable(GLint mode); GL2PSDLL_API GLint gl2psDisable(GLint mode); GL2PSDLL_API GLint gl2psPointSize(GLfloat value); GL2PSDLL_API GLint gl2psLineWidth(GLfloat value); GL2PSDLL_API GLint gl2psBlendFunc(GLenum sfactor, GLenum dfactor); /* undocumented */ GL2PSDLL_API GLint gl2psDrawImageMap(GLsizei width, GLsizei height, const GLfloat position[3], const unsigned char *imagemap); GL2PSDLL_API const char *gl2psGetFileExtension(GLint format); GL2PSDLL_API const char *gl2psGetFormatDescription(GLint format); #if defined(__cplusplus) } #endif #endif /* __GL2PS_H__ */ GabeditSrc250/License0000644000175100017510000000240113130664665015004 0ustar alloucheallouche------------------------------------------------------- LICENSE FOR GABEDIT ------------------------------------------------------- Copyright (c) 2002-2011 Abdul-Rahman Allouche . All rights reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Gabedit), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. GabeditSrc250/platforms/0000755000175100017510000000000013130664665015511 5ustar allouchealloucheGabeditSrc250/platforms/CONFIG.win32Portable22_GLExt0000644000175100017510000000221613130664665022243 0ustar alloucheallouche# wibdows config (with MinGW) CC = gcc -mms-bitfields GTKDIR = C:/GnuPrograms/gtk22 GTKGLEXT = C:/GtkGLExt #GTKLIB = `pkg-config gtk+-2.0 --libs` GTKLIB = -L$(GTKDIR)/lib -lintl -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lcairo -lpangocairo-1.0 -L$(GTKGLEXT)/lib -lgdkglext-win32-1.0 -lgtkglext-win32-1.0 #GTKCFLAGS = `pkg-config gtk+-2.0 --cflags` GTKCFLAGS = -I$(GTKDIR)/include -I$(GTKDIR)/include/gtk-2.0 -I$(GTKDIR)/lib/gtk-2.0/include -I$(GTKDIR)/include/atk-1.0 -I$(GTKDIR)/include/pango-1.0 -I$(GTKDIR)/include/glib-2.0 -I$(GTKDIR)/lib/glib-2.0/include -I$(GTKDIR)/include/cairo -I$(GTKGLEXT)/include/gtkglext-1.0 -I$(GTKGLEXT)/lib/gtkglext-1.0/include MKDIR = mkdir MAKE = mingw32-make RM = del RMTMP = del /S/Q tmp OGLLIB = -lopengl32 -lglu32 OGLCFLAGS=-IE: GDKGL = gdkgl-win32 JPEGLIB = WIN32LIB = -lwsock32 -lcomdlg32 X11LIB = PTHREADLIB = enable_omp = 1 ifeq ($(enable_omp),1) OMPLIB=-L/usr/lib -lgomp OMPCFLAGS=-DENABLE_OMP -fopenmp endif COMMONCFLAGS = -Wall -O2 -DENABLE_DEPRECATED $(OMPCFLAGS) -Wformat-security -Wno-unused-variable GabeditSrc250/platforms/CONFIG.win32Local0000644000175100017510000000214613130664665020320 0ustar alloucheallouche# wibdows config (with MinGW) CC = gcc -mms-bitfields #GTKLIB = `pkg-config gtk+-2.0 --libs` GTKLIB = -LE:/allouche/Programs/gtk/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lcairo -lpangocairo-1.0 #GTKCFLAGS = `pkg-config gtk+-2.0 --cflags` GTKCFLAGS = -IE:/allouche/Programs/gtk/include/gtk-2.0 -IE:/allouche/Programs/gtk/lib/gtk-2.0/include -IE:/allouche/Programs/gtk/include/atk-1.0 -IE:/allouche/Programs/gtk/include/pango-1.0 -IE:/allouche/Programs/gtk/include/glib-2.0 -IE:/allouche/Programs/gtk/lib/glib-2.0/include IE:/allouche/Programs/gtk/include/cairo MKDIR = mkdir MAKE = mingw32-make RM = del RMTMP = del /S/Q tmp OGLLIB = -lopengl32 -lglu32 OGLCFLAGS=-IE: GDKGL = gdkgl-win32 JPEGLIB = WIN32LIB = -lwsock32 -lcomdlg32 X11LIB = PTHREADLIB = enable_omp = 0 ifeq ($(enable_omp),1) OMPLIB=-L/usr/lib -lgomp OMPCFLAGS=-DENABLE_OMP -fopenmp endif #DRAWGEOMGL= DRAWGEOMGL=-DDRAWGEOMGL COMMONCFLAGS = -Wall -O2 -DENABLE_DEPRECATED $(OMPCFLAGS) $(DRAWGEOMGL) -Wformat-security -Wno-unused-variable GabeditSrc250/platforms/CONFIG.MacOSX110000644000175100017510000000414413130664665017637 0ustar alloucheallouche# unix (Mac OSX, linux, aix, hp, dec ...) config # PKG_CONFIG_PATH = "/usr/local/lib/pkgconfig:/usr/lib/pkgconfig" # GTKLIB = -Wl,--export-dynamic -L/usr/local/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 # GTKCFLAGS = -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include -I/usr/X11R6/include -I/usr/local/include/atk-1.0 -I/usr/local/include/pango-1.0 -I/usr/include/freetype2 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include GTKLIB = `pkg-config gtk+-2.0 --libs` -lpangox-1.0 `pkg-config gtkglext-1.0 --libs` GTKCFLAGS = `pkg-config gtk+-2.0 --cflags` `pkg-config gtkglext-1.0 --cflags` OGLLIB=-L/usr/X11R6/lib -lGL -L/usr/X11R6/lib -lGLU OGLCFLAGS=-I/usr/X11R6/include GDKGL=gdkgl LIBPTHREAD = -lpthread RM = rm -f RMTMP = rm -f tmp/* MKDIR = mkdir -p MAKE = make WIN32LIB = X11LIB = -lX11 CC = gcc COMMONCFLAGS = -Wall -O2 # unix (Mac OSX, linux, aix, hp, dec ...) config # PKG_CONFIG_PATH = "/usr/local/lib/pkgconfig:/usr/lib/pkgconfig" # GTKLIB = -Wl,--export-dynamic -L/usr/local/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 # GTKCFLAGS = -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include -I/usr/X11R6/include -I/usr/local/include/atk-1.0 -I/usr/local/include/pango-1.0 -I/usr/include/freetype2 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include GTKLIB = `pkg-config gtk+-2.0 --libs` -lpangox-1.0 `pkg-config gtkglext-1.0 --libs` GTKCFLAGS = `pkg-config gtk+-2.0 --cflags` `pkg-config gtkglext-1.0 --cflags` OGLLIB=-L/usr/X11R6/lib -lGL -L/usr/X11R6/lib -lGLU OGLCFLAGS=-I/usr/X11R6/include GDKGL=gdkgl LIBPTHREAD = -lpthread RM = rm -f MKDIR = mkdir -p MAKE = make WIN32LIB = X11LIB = -lX11 CC = gcc enable_omp = 0 ifeq ($(enable_omp),1) OMPLIB=-L/usr/lib -lgomp OMPCFLAGS=-DENABLE_OMP -fopenmp endif #DRAWGEOMGL= DRAWGEOMGL=-DDRAWGEOMGL COMMONCFLAGS = -Wall -O2 -DENABLE_DEPRECATED $(OMPCFLAGS) $(DRAWGEOMGL) -Wformat-security -Wno-unused-variable GabeditSrc250/platforms/Makefile0000644000175100017510000000403013130664665017146 0ustar alloucheallouche include CONFIG COMMON = src/Common/*.o CURVE = src/Spectrum/*.o FILES = src/Files/*.o GAMESS = src/Gamess/*.o GAUSS = src/Gaussian/*.o GEOM = src/Geometry/*.o MODELS = src/MolecularMechanics/*.o MOLCAS = src/Molcas/*.o MOLPRO = src/Molpro/*.o MOPAC = src/Mopac/*.o MPQC = src/MPQC/*.o MULTIGRID = src/MultiGrid/*.o NETWORK = src/NetWork/*.o OPENGL = src/Display/*.o FIREFLY = src/FireFly/*.o ORCA = src/Orca/*.o QCHEM = src/QChem/*.o SEMIEMP = src/SemiEmpirical/*.o UTILS = src/Utils/*.o SYMMETRY = src/Symmetry/*.o VIBCORR = src/VibrationalCorrections/*.o IDC = src/IsotopeDistribution/*.o OBJECTS = \ $(COMMON) $(CURVE) $(FILES) $(GAMESS) $(GAUSS) $(GEOM) $(MODELS) \ $(MOLCAS) $(MOLPRO) $(MOPAC) $(MPQC) $(MULTIGRID) $(NETWORK) \ $(OPENGL) $(FIREFLY) $(ORCA) $(QCHEM) $(SEMIEMP) $(UTILS) \ $(SYMMETRY) $(VIBCORR) $(IDC) SUBDIRS = \ src/Display src/Common src/Files src/Gaussian \ src/Geometry src/Spectrum src/MolecularMechanics src/Molpro src/Molcas \ src/MPQC src/Gamess src/Orca src/QChem src/Mopac src/NetWork src/Utils \ src/Symmetry src/FireFly src/MultiGrid src/SemiEmpirical \ src/VibrationalCorrections src/IsotopeDistribution ifneq ($(external_gl2ps),1) GL2PS = gl2ps/*.o OBJECTS += $(GL2PS) SUBDIRS += gl2ps else OBJECTS += -lgl2ps endif TARGETS = all clean dep .PHONY: $(SUBDIRS) $(TARGETS): $(SUBDIRS) $(SUBDIRS): @$(MAKE) --directory=$@ $(MAKECMDGOALS) all: gabedit gabedit: $(SUBDIRS) mkdir tmp cp $(OBJECTS) tmp $(CC) $(LDFLAGS) tmp/*.o -o gabedit $(X11LIB) $(GTKLIB) $(OGLLIB) $(JPEGLIB) $(LIBPTHREAD) $(WIN32LIB) $(OMPLIB) -g @$(RMTMP) > ptmp rmdir tmp @$(RM) ptmp clean: @$(RM) gabedit @$(RM) gabedit.exe @$(RM) *.com @$(RM) p @$(RM) pp @$(RM) p.c @$(RM) *.gab @$(RM) *.inp @$(RM) *.mop @$(RM) *.log @$(RM) *.out @$(RM) *.pun @$(RM) *.dat @$(RM) *.arc @$(RM) *.aux @$(RM) *.cmd @$(RM) *.chk @$(RM) *.sh @$(RM) pm6*.* GabeditSrc250/platforms/CONFIG.linuxHardeningFlags0000644000175100017510000000264413130664665022342 0ustar alloucheallouche# unix (Mac OSX, linux, aix, hp, dec ...) config # PKG_CONFIG_PATH = "/usr/local/lib/pkgconfig:/usr/lib/pkgconfig" # GTKLIB = -Wl,--export-dynamic -L/usr/local/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 # GTKCFLAGS = -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include -I/usr/X11R6/include -I/usr/local/include/atk-1.0 -I/usr/local/include/pango-1.0 -I/usr/include/freetype2 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include GTKLIB = `pkg-config gtk+-2.0 --libs` -lpangox-1.0 `pkg-config gtkglext-1.0 --libs` GTKCFLAGS = `pkg-config gtk+-2.0 --cflags` `pkg-config gtkglext-1.0 --cflags` #OGLLIB=-L/usr/X11R6/lib -lGL -L/usr/X11R6/lib -lGLU OGLLIB=-L/usr/lib -lGL -L/usr/lib -lGLU #OGLCFLAGS=-I/usr/X11R6/include OGLCFLAGS=-I/usr/include LIBPTHREAD = -lpthread RM = rm -f RMTMP = rm -f tmp/* MAKE = make MKDIR = mkdir -p WIN32LIB = X11LIB = -lX11 CC = gcc enable_omp = 1 ifeq ($(enable_omp),1) OMPLIB=-L/usr/lib -lgomp OMPCFLAGS=-DENABLE_OMP -fopenmp endif #DRAWGEOMGL= DRAWGEOMGL=-DDRAWGEOMGL #COMMONCFLAGS = -Wall -O2 -DENABLE_DEPRECATED $(OMPCFLAGS) $(DRAWGEOMGL) COMMONCFLAGS = -Wformat -fstack-protector --param=ssp-buffer-size=4 -Werror=format-security -D_FORTIFY_SOURCE=2 -O2 -DENABLE_DEPRECATED $(OMPCFLAGS) $(DRAWGEOMGL) -Wformat-security -Wno-unused-variable LDFLAGS = -Wl,-z,relro GabeditSrc250/platforms/CONFIG.MacPorts0000644000175100017510000000222713130664665020133 0ustar alloucheallouche GTKLIB = -L/opt/local/lib -lintl -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 -lfreetype -lz -lfontconfig -lpng16 -lXrender -lpixman-1 -lX11 -lgtkglext-x11-1.0 -lgdkglext-x11-1.0 GTKCFLAGS = -I/opt/local/include/gtk-2.0 -I/opt/local/lib/gtk-2.0/include -I/opt/local/include/atk-1.0 -I/opt/local/include/cairo -I/opt/local/include/pango-1.0 -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -I/opt/local/include/freetype2 -I/opt/local/include -I/opt/local/include/pixman-1 -I/opt/local/include/libpng15 -I/opt/local/include/gtkglext-1.0 -I/opt/local/lib/gtkglext-1.0/include OGLLIB=-L/usr/X11/lib -lGL -L/usr/X11/lib -lGLU OGLCFLAGS=-I/usr/X11/include GDKGL=gdkgl LIBPTHREAD = -lpthread RM = rm -f RMTMP = rm -f tmp/* MAKE = make MKDIR = mkdir -p WIN32LIB = X11LIB = -lX11 CC = gcc -I/usr/X11/include enable_omp = 0 ifeq ($(enable_omp),1) OMPLIB=-L/usr/lib -lgomp OMPCFLAGS=-DENABLE_OMP -fopenmp endif #DRAWGEOMGL= DRAWGEOMGL=-DDRAWGEOMGL COMMONCFLAGS = -Wall -O2 -DENABLE_DEPRECATED $(OMPCFLAGS) $(DRAWGEOMGL) -Wformat-security -Wno-unused-variable GabeditSrc250/platforms/CONFIG.linux640000644000175100017510000000352513130664665017716 0ustar alloucheallouche# unix (Mac OSX, linux, aix, hp, dec ...) config # PKG_CONFIG_PATH = "/usr/local/lib/pkgconfig:/usr/lib/pkgconfig" # GTKLIB = -Wl,--export-dynamic -L/usr/local/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 # GTKCFLAGS = -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include -I/usr/X11R6/include -I/usr/local/include/atk-1.0 -I/usr/local/include/pango-1.0 -I/usr/include/freetype2 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include #GTKLIB = `pkg-config gtk+-2.0 --libs` -lpangox-1.0 `pkg-config gtkglext-1.0 --libs` #GTKCFLAGS = `pkg-config gtk+-2.0 --cflags` `pkg-config gtkglext-1.0 --cflags` GTKLIB = `pkg-config gtk+-2.0 --libs` -lpangox-1.0 -Wl,--export-dynamic -L/home/theochem/allouche/gtkglext-1.2.0/lib -lgtkglext-x11-1.0 -lGLU -lGL -lgtk-x11-2.0 -lpangox-1.0 -lX11 -lgdk-x11-2.0 -latk-1.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype -lz -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 GTKCFLAGS = `pkg-config gtk+-2.0 --cflags` -I/home/theochem/allouche/gtkglext-1.2.0/include/gtkglext-1.0 #OGLLIB=-L/usr/X11R6/lib -lGL -L/usr/X11R6/lib -lGLU OGLLIB=-L/usr/lib -lGL -L/usr/lib -lGLU #OGLCFLAGS=-I/usr/X11R6/include OGLCFLAGS=-I/usr/include LIBPTHREAD = -lpthread RM = rm -f RMTMP = rm -f tmp/* MAKE = make MKDIR = mkdir -p WIN32LIB = X11LIB = -lX11 CC = gcc enable_omp = 1 ifeq ($(enable_omp),1) OMPLIB=-L/usr/lib -lgomp OMPCFLAGS=-DENABLE_OMP -fopenmp endif #DRAWGEOMGL= DRAWGEOMGL=-DDRAWGEOMGL #COMMONCFLAGS = -Wall -O2 -DENABLE_DEPRECATED $(OMPCFLAGS) $(DRAWGEOMGL) COMMONCFLAGS = -Wformat -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -O2 -DENABLE_DEPRECATED $(OMPCFLAGS) $(DRAWGEOMGL) -Wformat-security -Wno-unused-variable LDFLAGS = -Wl,-z,relro GabeditSrc250/platforms/CONFIG.unix0000644000175100017510000000234713130664665017371 0ustar alloucheallouche# unix (Mac OSX, linux, aix, hp, dec ...) config # PKG_CONFIG_PATH = "/usr/local/lib/pkgconfig:/usr/lib/pkgconfig" # GTKLIB = -Wl,--export-dynamic -L/usr/local/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 # GTKCFLAGS = -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include -I/usr/X11R6/include -I/usr/local/include/atk-1.0 -I/usr/local/include/pango-1.0 -I/usr/include/freetype2 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include GTKLIB = `pkg-config gtk+-2.0 --libs` -lpangox-1.0 `pkg-config gtkglext-1.0 --libs` GTKCFLAGS = `pkg-config gtk+-2.0 --cflags` `pkg-config gtkglext-1.0 --cflags` #OGLLIB=-L/usr/X11R6/lib -lGL -L/usr/X11R6/lib -lGLU OGLLIB=-L/usr/lib -lGL -L/usr/lib -lGLU #OGLCFLAGS=-I/usr/X11R6/include OGLCFLAGS=-I/usr/include LIBPTHREAD = -lpthread RM = rm -f RMTMP = rm -f tmp/* MAKE = make MKDIR = mkdir -p WIN32LIB = X11LIB = -lX11 CC = gcc enable_omp = 1 ifeq ($(enable_omp),1) OMPLIB=-L/usr/lib -lgomp OMPCFLAGS=-DENABLE_OMP -fopenmp endif #DRAWGEOMGL= DRAWGEOMGL=-DDRAWGEOMGL COMMONCFLAGS = -Wall -O2 -DENABLE_DEPRECATED $(OMPCFLAGS) $(DRAWGEOMGL) -Wformat-security -Wno-unused-variable GabeditSrc250/platforms/CONFIG.win32Portable0000644000175100017510000000232413130664665021034 0ustar alloucheallouche# windows config (with MinGW) CC = gcc -mms-bitfields GTKDIR = C:/GnuPrograms/gtk216 GTKGLEXT = C:/GnuPrograms/GtkGLExt #GTKLIB = `pkg-config gtk+-2.0 --libs` GTKLIB = -L$(GTKDIR)/lib -lintl -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lcairo -lpangocairo-1.0 -L$(GTKGLEXT)/lib -lgdkglext-win32-1.0 -lgtkglext-win32-1.0 #GTKCFLAGS = `pkg-config gtk+-2.0 --cflags` GTKCFLAGS = -I$(GTKDIR)/include -I$(GTKDIR)/include/gtk-2.0 -I$(GTKDIR)/lib/gtk-2.0/include -I$(GTKDIR)/include/atk-1.0 -I$(GTKDIR)/include/pango-1.0 -I$(GTKDIR)/include/glib-2.0 -I$(GTKDIR)/lib/glib-2.0/include -I$(GTKDIR)/include/cairo -I$(GTKGLEXT)/include/gtkglext-1.0 -I$(GTKGLEXT)/lib/gtkglext-1.0/include MKDIR = mkdir MAKE = mingw32-make RM = del RMTMP = del /S/Q tmp OGLLIB = -lopengl32 -lglu32 OGLCFLAGS=-IE: GDKGL = gdkgl-win32 JPEGLIB = WIN32LIB = -lwsock32 -lcomdlg32 X11LIB = LIBPTHREAD = enable_omp = 0 ifeq ($(enable_omp),1) OMPLIB=-L/usr/lib -lgomp OMPCFLAGS=-DENABLE_OMP -fopenmp endif #DRAWGEOMGL= DRAWGEOMGL=-DDRAWGEOMGL COMMONCFLAGS = -Wall -O2 -DENABLE_DEPRECATED $(OMPCFLAGS) $(DRAWGEOMGL) -Wformat-security -Wno-unused-variable GabeditSrc250/platforms/CONFIG.win32Portable220000644000175100017510000000231013130664665021173 0ustar alloucheallouche# wibdows config (with MinGW) CC = gcc -mms-bitfields GTKDIR = C:/GnuPrograms/gtk22 GTKGLEXT = C:/GtkGLExt #GTKLIB = `pkg-config gtk+-2.0 --libs` GTKLIB = -L$(GTKDIR)/lib -lintl -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lcairo -lpangocairo-1.0 -L$(GTKGLEXT)/lib -lgdkglext-win32-1.0 -lgtkglext-win32-1.0 #GTKCFLAGS = `pkg-config gtk+-2.0 --cflags` GTKCFLAGS = -I$(GTKDIR)/include -I$(GTKDIR)/include/gtk-2.0 -I$(GTKDIR)/lib/gtk-2.0/include -I$(GTKDIR)/include/atk-1.0 -I$(GTKDIR)/include/pango-1.0 -I$(GTKDIR)/include/glib-2.0 -I$(GTKDIR)/lib/glib-2.0/include -I$(GTKDIR)/include/cairo -I$(GTKGLEXT)/include/gtkglext-1.0 -I$(GTKGLEXT)/lib/gtkglext-1.0/include MKDIR = mkdir MAKE = mingw32-make RM = del RMTMP = del /S/Q tmp OGLLIB = -lopengl32 -lglu32 OGLCFLAGS=-IE: GDKGL = gdkgl-win32 JPEGLIB = WIN32LIB = -lwsock32 -lcomdlg32 X11LIB = LIBPTHREAD = enable_omp = 1 ifeq ($(enable_omp),1) OMPLIB=-L/usr/lib -lgomp OMPCFLAGS=-DENABLE_OMP -fopenmp endif #DRAWGEOMGL= DRAWGEOMGL=-DDRAWGEOMGL COMMONCFLAGS = -Wall -O2 -DENABLE_DEPRECATED $(OMPCFLAGS) $(DRAWGEOMGL) -Wformat-security -Wno-unused-variable GabeditSrc250/platforms/CONFIG.linux0000644000175100017510000000234713130664665017545 0ustar alloucheallouche# unix (Mac OSX, linux, aix, hp, dec ...) config # PKG_CONFIG_PATH = "/usr/local/lib/pkgconfig:/usr/lib/pkgconfig" # GTKLIB = -Wl,--export-dynamic -L/usr/local/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 # GTKCFLAGS = -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include -I/usr/X11R6/include -I/usr/local/include/atk-1.0 -I/usr/local/include/pango-1.0 -I/usr/include/freetype2 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include GTKLIB = `pkg-config gtk+-2.0 --libs` -lpangox-1.0 `pkg-config gtkglext-1.0 --libs` GTKCFLAGS = `pkg-config gtk+-2.0 --cflags` `pkg-config gtkglext-1.0 --cflags` #OGLLIB=-L/usr/X11R6/lib -lGL -L/usr/X11R6/lib -lGLU OGLLIB=-L/usr/lib -lGL -L/usr/lib -lGLU #OGLCFLAGS=-I/usr/X11R6/include OGLCFLAGS=-I/usr/include LIBPTHREAD = -lpthread RM = rm -f RMTMP = rm -f tmp/* MAKE = make MKDIR = mkdir -p WIN32LIB = X11LIB = -lX11 CC = gcc enable_omp = 1 ifeq ($(enable_omp),1) OMPLIB=-L/usr/lib -lgomp OMPCFLAGS=-DENABLE_OMP -fopenmp endif #DRAWGEOMGL= DRAWGEOMGL=-DDRAWGEOMGL COMMONCFLAGS = -Wall -O2 -DENABLE_DEPRECATED $(OMPCFLAGS) $(DRAWGEOMGL) -Wformat-security -Wno-unused-variable GabeditSrc250/platforms/CONFIG.win32Server0000644000175100017510000000203713130664665020533 0ustar alloucheallouche# wibdows config (with MinGW) CC = gcc -mms-bitfields #GTKLIB = `pkg-config gtk+-2.0 --libs` GTKLIB = -LZ:/Programs/gtk/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lcairo -lpangocairo-1.0 #GTKCFLAGS = `pkg-config gtk+-2.0 --cflags` GTKCFLAGS = -IZ:/Programs/gtk/include/gtk-2.0 -IZ:/Programs/gtk/lib/gtk-2.0/include -IZ:/Programs/gtk/include/atk-1.0 -IZ:/Programs/gtk/include/pango-1.0 -IZ:/Programs/gtk/include/glib-2.0 -IZ:/Programs/gtk/lib/glib-2.0/include -IZ:/Programs/gtk/include/cairo MKDIR = mkdir MAKE = mingw32-make RM = del RMTMP = del /S/Q tmp OGLLIB = -lopengl32 -lglu32 OGLCFLAGS=-IE: GDKGL = gdkgl-win32 JPEGLIB = WIN32LIB = -lwsock32 -lcomdlg32 X11LIB = PTHREADLIB = enable_omp = 0 ifeq ($(enable_omp),1) OMPLIB=-L/usr/lib -lgomp OMPCFLAGS=-DENABLE_OMP -fopenmp endif #DRAWGEOMGL= DRAWGEOMGL=-DDRAWGEOMGL COMMONCFLAGS = -Wall -O2 -DENABLE_DEPRECATED $(OMPCFLAGS) $(DRAWGEOMGL) -Wformat-security -Wno-unused-variable GabeditSrc250/platforms/CONFIG.win320000644000175100017510000000214513130664665017344 0ustar alloucheallouche# wibdows config (with MinGW) CC = gcc -mms-bitfields #GTKLIB = `pkg-config gtk+-2.0 --libs` GTKLIB = -LE:/allouche/Programs/gtk/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lcairo -lpangocairo-1.0 #GTKCFLAGS = `pkg-config gtk+-2.0 --cflags` GTKCFLAGS = -IE:/allouche/Programs/gtk/include/gtk-2.0 -IE:/allouche/Programs/gtk/lib/gtk-2.0/include -IE:/allouche/Programs/gtk/include/atk-1.0 -IE:/allouche/Programs/gtk/include/pango-1.0 -IE:/allouche/Programs/gtk/include/glib-2.0 -IE:/allouche/Programs/gtk/lib/glib-2.0/include IE:/allouche/Programs/gtk/include/cairo MKDIR = mkdir MAKE = mingw32-make RM = del RMTMP = del /S/Q tmp OGLLIB = -lopengl32 -lglu32 OGLCFLAGS=-IE: GDKGL = gdkgl-win32 JPEGLIB = WIN32LIB = -lwsock32 -lcomdlg32 X11LIB = PTHREADLIB = enable_omp = 0 ifeq ($(enable_omp),1) OMPLIB=-L/usr/lib -lgomp OMPCFLAGS=-DENABLE_OMP -fopenmp endif #DRAWGEOMGL= DRAWGEOMGL=-DDRAWGEOMGL COMMONCFLAGS = -Wall -O2 -DENABLE_DEPRECATED $(OMPCFLAGS) $(DRAWGEOMGL) -Wformat-security -Wno-unused-variable GabeditSrc250/platforms/CONFIG640000644000175100017510000000352513130664665016560 0ustar alloucheallouche# unix (Mac OSX, linux, aix, hp, dec ...) config # PKG_CONFIG_PATH = "/usr/local/lib/pkgconfig:/usr/lib/pkgconfig" # GTKLIB = -Wl,--export-dynamic -L/usr/local/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 # GTKCFLAGS = -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include -I/usr/X11R6/include -I/usr/local/include/atk-1.0 -I/usr/local/include/pango-1.0 -I/usr/include/freetype2 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include #GTKLIB = `pkg-config gtk+-2.0 --libs` -lpangox-1.0 `pkg-config gtkglext-1.0 --libs` #GTKCFLAGS = `pkg-config gtk+-2.0 --cflags` `pkg-config gtkglext-1.0 --cflags` GTKLIB = `pkg-config gtk+-2.0 --libs` -lpangox-1.0 -Wl,--export-dynamic -L/home/theochem/allouche/gtkglext-1.2.0/lib -lgtkglext-x11-1.0 -lGLU -lGL -lgtk-x11-2.0 -lpangox-1.0 -lX11 -lgdk-x11-2.0 -latk-1.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype -lz -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 GTKCFLAGS = `pkg-config gtk+-2.0 --cflags` -I/home/theochem/allouche/gtkglext-1.2.0/include/gtkglext-1.0 #OGLLIB=-L/usr/X11R6/lib -lGL -L/usr/X11R6/lib -lGLU OGLLIB=-L/usr/lib -lGL -L/usr/lib -lGLU #OGLCFLAGS=-I/usr/X11R6/include OGLCFLAGS=-I/usr/include LIBPTHREAD = -lpthread RM = rm -f RMTMP = rm -f tmp/* MAKE = make MKDIR = mkdir -p WIN32LIB = X11LIB = -lX11 CC = gcc enable_omp = 1 ifeq ($(enable_omp),1) OMPLIB=-L/usr/lib -lgomp OMPCFLAGS=-DENABLE_OMP -fopenmp endif #DRAWGEOMGL= DRAWGEOMGL=-DDRAWGEOMGL #COMMONCFLAGS = -Wall -O2 -DENABLE_DEPRECATED $(OMPCFLAGS) $(DRAWGEOMGL) COMMONCFLAGS = -Wformat -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -O2 -DENABLE_DEPRECATED $(OMPCFLAGS) $(DRAWGEOMGL) -Wformat-security -Wno-unused-variable LDFLAGS = -Wl,-z,relro GabeditSrc250/ChangeLog0000644000175100017510000005367313130664665015272 0ustar alloucheallouche03 April 2017 Bug fixed for set center to origin 30 March 2017 The format of .hess and .out files of Orca4 are slightly different from them of Orca3. Gabedit can now read .hess and .out file of Orca4 (and Orca3) 08 February 2017 Energy, geometry optimization, MD, MD Conformations search by an external (generic) program are now supported. Gabedit creates an input file for the external program, this program compute energy, dipole, gradients or optimize the geometry. This program must produce an output file supported by Gabedit. The input file for the external program (or script) created by gabedit contains : First line is an integer : 0 for energy, 1 for gradients and 2 for optimization Second line contains the text "Geometry" third line number of atoms, charge and multiplicity of the molecule. From forth line, symbol, mmtype, pdftype, esiduname, interger, charge, interger, integer, x y z and connectivities (xyz in Ang) The external program must produce an output file with : energy in atomic unit(au) in first line dipole in au in the second line gradients (in au) in next lines if gradients are required Geometry in next lines if the geometry optimisation is required. As examples, see : The script runDFTBPGabedit (page web of gabedit) as an example The script runGamessPM3 is another example (page web of gabedit). 01 February 2017 Energy, geometry optimisation, MD, MD Conformations search by MMFF94, MMFF94s, UFF and Ghemical potentials are now supported via openbabel. obgradient, obopt programs and 2.3.2 folder parameters are needed and to be installed in C:\OpenBabel under windows of $HOME/OpenBabel under unix (MacOS and Linux). The location of this folder can be changed but the directory must be changed via Preferences/Other gabedit window. OpenBabel directory can be download from Gabedit web page for each OS. 24 January 2017 Compute the type of conformer for a saccharide (1C4, 4C1, ....) Compute the anharmonic spectrum by QM/MMFF94 method using iGVPT2 program. Read the harmonic and anharmonic spectra from an iGVPT2 output file. 25 August 2016 DeMon2k is now supported by Gabedit. Gabedit can create input files, run demon and visualize the results using the molden file created by demon2k 27 April 2016 Gabedit can now read the geometry from POSCAR and from vasprun.xml 25 April 2016 Save geometry in POSCAR Scale cell 1 April 2016 Tools for VASP : Read dielectric function from a VASP xml file and compute optic properties Optic, read data from vasprun.xml and plot DOS, pDOS and, Bands structures 8 September 2015 Gabedit can not read the hessian from .hess orca file. After reading of the hessian, Gabedit compute frequencies, modes and effective masses 30 June 2015 Export in CChemI : update Tv accepted (used by Gaussian and Mopac for periodic system) Using Tv, Gabedit can generate other cells 1 June 2015 QFF tools are implemented : Display/Vibration + main menu Tools/QFF 11 march 2015 bug fixed : geometry in Display window if ECP used 13 february 2015 read geometries (Opt or Dyn) from VASP OUTCAR file 15 May 2014 Bug fixed to read dummy atom from molpro output file 07 March 2014 Bug fixed to read the last geometry from mopac output file(no bug with the first geometry, no bugs if aux file) 25 October 2013 new tool to remove half cube grid remove implicit declaration warning 24 October 2013 new tool to compute the integral of the function on the grid 30 September 2013 run orca from Draw geometry : bug fixe (new input format with orca, without params) 19 August 2013 read fchk file with d,f,.. orbitals bug fixed (There was no bug for reading from a .log file) PM7 added to list of Mopac hamiltonian 24 July 2013 Gabedit can now calculate the lambda diagnostic for CT (see Peach et al. J. Chem. Phys. 128, 044118 (2008)) 18 July 2013 Gabedit can now symmetrize a molecule (see Largent, RJ, Polik, WF, Schmidt, JR, J. Comput Chem. 33 (2012) 1637-1642) 08 July 2013 new parsers to read : UV-Visible spectrum from a Gamess unrestricted TDDFT calculation Raman spectrum from a QChem output file Anharmonic IR spectrum(VT2) from a Gaussian (D01) output file Anharmonic IR spectrum(VSCF, VSCF-PT2) from a Gamess output file 02 May 2013 bug fixed : analytical gradient for PairWize potential with OMP 02 April 2013 bug fixed : set distance, angle, dihedral in DragGeomCairo bug fixed bug fixed : analytical gradient for PairWize potential 05 March 2013 bug fixed : read geometries convergence with non scf method from a molpro log files New DFT functionals in Gaussian interface 16 September 2012 bug fixed : read personal fragment under windows 14 September 2012 set molecule in the standard orientation Align selected and not selected fragments 05 September 2012 Bug fixed : reading of the number occuped beta orbitals from a fchk file. 25 July 2012 Bug fixed : read orbitals with ECP from a GAMESS-US output file 20 July 2012 Analysis of Spatial Extent in Charge-Transfer Excitations implemented (See Le Bahers et al., J. Chem. Theory Comput. 2011, 7, 2498–2506) 19 July 2012 NCI (non-covalent interactions index) analysis implemented (see Johnson et al., J. Am. Chem. Soc. 132, 6498 (2010)) Dummy atom in an orca input file bug fixed Read orbitals&Geometry from an orca ouput file with a dummy atom, bug fixed Insert a non-bonded atom in "Draw geometry window" bug fixed 07 July 2012 : Psi4 partially supported : input file, geometries, frequencies, UV Spectrum 20 June 2012 : Bug fixed : computing of double&triple bonds 10 June 2012 : Warning with -Wformat have been fixed 29 March 2012 : Several Filters (Gaussian, Blackman, Blackman-Harris,...) implemented in XYPlot window (not fully tested) 08 Marsh 2012 : read gamess geometries in Display window : bug fixed 02 Marsh 2012 : NBO basis (file .31) : read any type of orbitals 27 February 2012 : NBO basis (file .31) : read geometry 06 October 2011 : Orca input file : constraint removed if no fixed atom. 03 October 2011 : Bug fixed for saving geometry in mol format 15 September 2011 : Bug fixed for reading orbitals from a ORCA output file Bug fixed for drawing colorcoded planes (under windows OS) 13 Jyly 2011 : NWChem is now supported Geometry and charges can be read from a aimall sum file 10 June 2011 : Bug fixed for animated vibration/threshold Bug fixed : orbitals molpro (define NOrb) 1 June 2011 : Group of the third atom can be rotated in Draw Geom window. 30 April 2011 : pair radial distribution RMSD for a trajectory Reading dipole from a ADMP output file and computing of auto correlation dipole function (not fully tested) 7 April 2011 : Fourier Transformation in GabexitXYPlot window (not fully tested) 5 April 2011 : Orthonormalization of Mopac MO (only normalisation on old versions) 10 Mars 2011 : Local rotation bug fixed Screen capture (using png or tif) under window bug fixed 22 February 2011 : Show cell in Display window Bug : Update coordinates after a move fragment 20 Junuary 2011 : Read beta orbitals from fchk file : Bug fixed Rotation of a fragment by mouse : bug fixed 22 December 2010 : new tools for select atoms : multiple selection 20 December 2010 : Atoms can be fixed dunring MD Screen capture of geometry drawing window in ppm or bmp : A bug were fixed 02 December 2010 : Multigrid method : multipolaire developpement at the center of charge. Multipole order 3 is now used. Comformational search with semi-emperical : A bug is fixed. 08 November 2010 : add Space Fill option to "Draw Geom"" window. 02 November 2010 : Migration to OpenGL for "Draw Geom" window. Remove DRAWGEOMGL variable from CONFIG file to obtain a "Draw Geom" with old style(Cairo). 25 October 2010 : Bug fixed : Gabedit can now read the partial charges from Gamess (FireFly) output file 18 October 2010 : Bug fixed : conversion from Hartree/Bohr to kcal/Ang for FireFly gradient 9 October 2010 : The center of the molecule is not changed after insertion of atoms. 16 September 2010 : Bussi thermostat implemented( velocity scaling) G. Bussi and M. Parrinello, "Stochastic Thermostats: Comparison of Local and Global Schemes", Computer Physics Communications, 179, 26-29 (2008) 10 September 2010 : Andersen thermostat changed. 11 July 2010 : Parallelization using OpenMP. Parallelized Code : - Computing of Grid for Orbitals, Electronic density, Electrostatic potential (Multigrid Method) - Computing of AIM charges - Computing of Coulomb integral - Computing of Spatial overlap - Computing of MM potential and its gradients - Computing of NMR spectra 1 July 2010 : migration from gtkglarea to GtkGLExt 08 Jun 2010 : Text with rotation in XYPlot and ContoursPlot windows. One can add margins in XYPlot and ContoursPlot windows. One can add images (from file or clipboard) in the ContoursPlot window. 06 Jun 2010 : Read orbitals, geometry and normal modes from a fchk Gaussian file. Read grid from a openDX file. One can add images (from file or clipboard) in the XYPlot window. Bug fixed : screen capture of opengl window in png and tif files format. 05 May 2010 : Read orbitals from the new mopac aux file format (including the compressed format). New themes for the XYPlot and ContourPlot windows. 01 May 2010 : One can add texts (and change it) in the XYPlot and ContoursPlot windows. One can add lines (and change it) in the XYPlot and ContoursPlot windows. Save all data in a Gabedit file format on the XYPlot and ContoursPlot windows Read data from a Gabedit file format on the XYPlot and ContoursPlot windows The legend options can be changed by a double click on the legends 28 April 2010 : The opacity for surface in openGL windows can be changed The label bug under XYPlot window (with gtk2.18) is fixed 5 April 2010 : The bond lengths can be fixed during a MD simulation. 1 April 2010 : Partial optimisation is now available with the MM potential 29 March 2010 : Computing of spatial overlap matrix . A contours plotting tool have been implemented. 22 March 2010 : Bug fixed : reading correctly the geometries with a Pd or a Cd from aux file Add a tool for Optimizing geometry using/Sparkle from the Draw Geom window New fast method for compute NMR spectrum 24 February 2010 : Bug fixed : if disk is not C: (under window) for run Gamess or FireFly 10 February 2010 : Add PM6-DH2 to list of openmopac methods 09 February 2010 : Add tif format to list of image formats supported by gabedit 01 February 2010 : Bug to Add hydrogen with a NH2-terminal from a pdb template has fixed 15 January 2010 : In animation Geom. Conv. tools of OpenGL window : If ONIOM is in keyword, the HW and OW are writeen at "Low" layer in Gaussian input file. The MM type are now readed from a Gabedit file (in GEOMS format) 11 January 2010 : Gabedit can read geometries from a IRC Gamess, PCGamess(Firefly) file. 22 December 2009 : In Draw geometry window, numbers of atoms are not changed after editing of atoms. By default, only one surface is showed in Display Window(this can changed by the users). 10 December 2009 : Bug fixed with error message after MOLECULAR ORBITALS from Gamess Bug fixed for CltrZ and u : The geometry in xyz is now apdate after this operation. Bug fixed for change by Measure window : The geometry in xyz is now apdate after this operation. If f key is pressed, the selection is free even if one click on an atom. If g key is pressed, the group attached to cliked atom is selected 9 December 2009 : Bug fixed for reading dipole with "field-independent" basis from a gaussian output file 11 November 2009 : the n,p, f and l keys can be used for selecting a geometry on the "Geom.Conv" window. 9 November 2009 : Computing of the electrophilic, nucleophilic and radical susceptibilities for a molecule. 23 October 2009 : Implementation of a tool to predict the masses and abundances of the isotopes for a given molecule. Atomic weights and isotopic compositions for All Elements are taken from http://physics.nist.gov/PhysRefData/Compositions/ 21 October 2009 : Bug fixed for creation of an orca input file with constraints. 19 October 2009 : Bug fixed for reading beta orbitals form orca output file. 13 September 2009 : Computing of AIM charges [See W. Tang et al J. Phys. Cond.. Matt. 21, 084204(09)] 3 September 2009 : Copy images to clipboard. 21 August 2009 : Computing of the coulomb integral, analytically with GTF and numerically with GTF and STF. 19 August 2009 : The scale for the vibration vectors can be negative. The threshold for the vibration vectors can be changed. Gabedit can now read the raman activity from a Gamess or PCGamess output file. The vibration vectors are added to the povray file. 23 July 2009 : Gabedit can create a pov file and run povray interactively. The povray and the opengl cameras are identical. Show the MO coefficients. Draw the DOS (the density of states) Square a grid. (phi^2) Apply a restriction to grid. 20 July 2009 : Show coefficents of orbitals. Draw the density of states. 11 July 2009 : Orca 2.7 is now supported. 26 May 2009 : Implementation of reaction path calculation with openmopac Translation and rotation are removed at beginning of a MD simulation. 18 May 2009 : Gabedit can create a input file for the 7.4 version of molcas : xyz, zmat, Full symmetry, .... Migration from m2msi to grid format for molcas Bug fixed for computing of electronic density if orbitals (from molden file) not sorted by occupation number. 13 April 2009 : New capping possibility for the polypeptide builder. A undo is implemented for the polypeptide builder. 2 April 2009 : Gabedit can read the esp charges from Gaussian. Gabedit read the esp charges. If they are not available, Gabedit read the natural charges. If they are not available, Gabedit read the Mullekan charges. 20 march 2009 : Gabedit can read the normal modes from a molpro 2008 out file. Gabedit can read the first and last geometries from a gaussian out file with a "nosymm" calculation. The problem of connectivity after the change of number of center (in XYZ geometry editor) is corrected. 19 February 2009 : Undo / Redo have been implemented for the draw window. 17 February 2009 : The user can set the value of the distance, bond angle or dihedral angle in the Mesure notebook. 3 color map types are implemented for the opengl window. 07 February 2009 : The user has complete control over the bonds displayed in a drawing. The drawing of the molecule atom by atom have been simplified. The drawing of the molecule fragment by fragment have been simplified. Gabedit read connectivities from gabedit, hin, pdb, mol2 and mol files. 18 January 2009 : A bug is fixed : the beta orbitals from a MOPAC UHF calculation are normalized correctely. No problem with the old versions of Gabedit for the Alpha orbitals from MOPAC. 14 January 2009 : The bug for generation of Geometry with SYMMETRY for input file of Gamess or PCGamess has been fixed. The bug for read geometrie during a MD Conformation search with PCGamess has fixed. 10 December 2008 : All deprecated Gdk, Gtk and pango functions has removed. The stick&ball can be scaled in the Display window. The user can change the order of atoms by changing the number of atom in the Geometry editor. The bug during read of geometries from a molpro log file is fixed. 30 November 2008 : The background color of the Draw and Display windows are saved at the end of session. They are restored in the next session. The .dat Gamess file is copied in the directory of the input file at the end of the run. One can run guassian under windows (locally) without runWg03.bat file (but not tested. I have not gaussian under windows). 11 November 2008 : A Molecular dynamics conformational search is implemented using a PM6/MOPAC or AM1/PCGamess method. One can optimize, calculate the ESP fit charges and energy by MOPAC or PCGamess by one click from the "Draw Geometry" window. 2 November 2008 : Increase speed of selection on the XYplot window. The identical molecular structures are removed after a Molecular dynamics conformational search. 24 july 2008 : Migration from GDK drawing functions to Cairo: Cross-device Rendering for Vector Graphics. Cairo is now used for the XYplot gabedit widget(used by gabedit for draw spectrums). Cairo is now used for the geometry drawing window. Geometry can be exported in eps, ps, pdf or svg file. The curves of XYplot window can be exported in eps, ps, pdf or svg file. New tool for compute distance between 2 points on XYPlot window. "Control+left button" can be used for do a zoom on XYPlot window. 10 july 2008 : A Molecular dynamics conformational search is implemented using a MM potential (Amber 99). During the production stage Gabedit selects a number geometries. At the end of the molecular dynamic simulation, each selected geometry is optimized. Finaly the geometries are sorted by energy and saved in a file. The very similar geometries can be removed by Gabedit. Gabedit can also optimize these geometries, interactively, using Mopac or PCGamess. Gabedit can also creates input files for Mopac, PCGamess or Gaussian for a post processing. 25 june 2008 : Gabedit load the eps charges from a Mopac output file(last geometry) if one is available 24 june 2008 : Under unix, the user can run gamess without any changes to the scripts of gamess. 18 june 2008 : The user can set a title for the openGL window (Set/Title) Gabedit can create slides for several orbitals by one click(Orbitals/Slideshow). 25 may 2008 : The user can change the coordinates of atoms directly from the list of atoms. The user can change bond, angles and dihedral in the Z-matrix editor of atoms directly from the list of atoms. Gabedit recalculate the bond, angle and diedral angle value considering the new atomic connectivity index. 19 may 2008 : The bug due to not ordering atoms in a molden (from molpro) file has been corrected. 6 may 2008 : Gabedit can export the opengl window in eps, ps, pdf, svg file. 28 April 2008 : New windows for ECD spectrum. New windows for read NMR spectrum from a text file. 11 february 2008 : MEP can be calculated from the charges of atoms 21 junary 2008 : Gabedit can read the natural orbitals from Gaussian output file 13 December 2007 : The MEP (Molecular electrostatic potential) can be calculated by Gabedit MEP can be calculated by Multipole approximaiton MEP can be calculated by solving the poisson equation using Multigrid (V-cycle) or Congugate gradient methods The surface for any function can be color mapped by the MEP 20 November 2007 : Gabedit can show the SAS 7 November 2007 : Cartoon mode fro draw geometry New algorithm for compute NMR spectrum Export of XY plot in svg format 26 octobre 2007 : Export of XY plot in svg format 2 September 2007 : Gabedit can read Q-Chem grid file Gabedit can create an input output file of Q-Chem 15 March 2007 : Gabedit can create an input output file of Q-Chem 1 March 2007 : Gabedit can read the output file of Q-Chem(Orbitals+Vibration+IR+UV) 20 February 2007 : Gabedit can read the output file of PCGAMESS(Orbitals+Vibration+IR+UV) 9 February 2007 : Gtkplot library has removed. New windows for draw IR, Raman and UV/Visible spectrum. 10 November 2006 : Implementation of an "Unit conversion utility". 10 September 2006 : Read the MD trajectory from a Gaussian output file. 17 June 2006 : ELF : Compute Electron Localized function using the MO 30 May 2006 : Contours for nagative values in dotted lines 18 May 2006 : Compute Amber types of atoms using the symbols and the bonds types Show multiple bonds type in Geometry draw window Save correct bonds type in .hin file Read Localized orbitals from GAMESS output file (RHF ou UHF) Show multiple bonds in OpenGL, including with stick mode. Create Povray geometry with multiple bonds. The ability to select and freeze atomic positions during energy minimizations(including the generation of appropriate keywords in the GAMESS and Gaussian input file). The ability to select and set the ONIOM Layer. 21 April 2006 : Show/Hide hydrogen atoms. Show symbols/distances in OpenGL window. Find and show the cycles of a molecule. 6 June 2006 : Read and show the geometries for a Gaussian (03) Molcecular dynamique calculation. 1 January 2005 Migration from Gtk+1.2 to Gtk+2. All deprecated functions and widgets has removed. Gabedit is now a GUI for MPQC software. Gabedit is now a GUI for Molcas. The M2MSI ascii file (File generated by Molcas)(Orbitals and density ) is now supported. Gabedit can display the hydrogen bonds. You can build a nanotube. You can now visualize the geometry convergence using a Dalton output file. You can now read (and animate) the normal modes from a Dalton output file. ssh protocole is now supported. You can generate the initial structures of PolyPeptide, NucleicAcid and PolySaccharide. You can optmize the geometry using MM calculation. The ADF tape 41 file(text format)(Orbitals and density ) is now supported. The difference between 2 densities is now supported. I added a window for facility the use of Open Babel. I added a window for draw Infra Red and Raman spectrums. Molpro2002 is now supported. Gaussian03 is now supported. Gabedit can now create an isosurface colorcoded with another grid. You can also visualize the geometry convergence using a Molden or a Gabedit file. you can now read frequencies and normal modes from an ADF(version 2004) output file you can now create a MNG (or GIF) animated file (for vibration and rotation). Gabedit can now create a povray file for geometry, surfaces (including colorcoded surfaces), contours (colorcoded), colorcoded planes. Gabedit can now visualize several surfaces. Gabedit can now animate the contours and the colorcoded planes. You can now read normal modes of imaginary frequencies from a Molpro output file You can now visualize the geometry convergences, loaded from a Gabedit, Gaussian, Molpro, MPQC, XYZ or Molden file. You can also create a MNG (or GIF) animated file from this visualisation. GabeditSrc250/utils/0000755000175100017510000000000013130664665014642 5ustar allouchealloucheGabeditSrc250/utils/Molcas/0000755000175100017510000000000013130665226016052 5ustar allouchealloucheGabeditSrc250/utils/Molcas/createMolcasLibFunctionForGabedit.c0000644000175100017510000002034313130665226024706 0ustar alloucheallouche/**************************************************************************** * program for creategabedit function for create default molcasbasis file * createMolcasLibFileForGabedit and enter for create the molcaslib.cc file * for Gabedit. *****************************************************************************/ #include #include #include #include #include #include #define NBASIS 120 #define BSIZE 1024 typedef struct _Atom { char symb[10]; int nbas; char basisName[NBASIS][BSIZE]; char author[NBASIS][BSIZE]; char primitive[NBASIS][BSIZE]; char contraction[NBASIS][BSIZE]; char ecpType[NBASIS][BSIZE]; }Atom; /***********************************************************************************/ #define NROW 18 #define NCOL 10 char *SymbAtoms[18][10]={ {"H" ,"Li","Na","K" ,"Rb","Cs","Fr","00","00","00"}, {"00","Be","Mg","Ca","Sr","Ba","Ra","00","X","00"}, {"00","00","00","Sc","Y" ,"La","Ac","00","00","00"}, {"00","00","00","Ti","Zr","Hf","00","00","00","00"}, {"00","00","00","V" ,"Nb","Ta","00","Ce","Th","00"}, {"00","00","00","Cr","Mo","W" ,"00","Pr","Pa","00"}, {"00","00","00","Mn","Tc","Re","00","Nd","U" ,"00"}, {"00","00","00","Fe","Ru","Os","00","Pm","Np","00"}, {"00","00","00","Co","Rh","Ir","00","Sm","Pu","00"}, {"00","00","00","Ni","Pd","Pt","00","Eu","Am","00"}, {"00","00","00","Cu","Ag","Au","00","Gd","Cm","00"}, {"00","00","00","Zn","Cd","Hg","00","Tb","Bk","00"}, {"00","B" ,"Al","Ga","In","Tl","00","Dy","Cf","00"}, {"00","C" ,"Si","Ge","Sn","Pb","00","Ho","Es","00"}, {"00","N" ,"P" ,"As","Sb","Bi","00","Er","Fm","00"}, {"00","O" ,"S" ,"Se","Te","Po","00","Tm","Md","00"}, {"00","F" ,"Cl","Br","I" ,"At","00","Yb","No","00"}, {"He","Ne","Ar","Kr","Xe","Rn","00","Lu","Lr","00"}, }; /***********************************************************************************/ char** createListFiles(char* dirname, int* nFiles) { DIR* dir; struct stat st; struct dirent *File; char** allName = NULL; *nFiles = 0; dir = opendir(dirname); if(dir) { File = readdir(dir); while(File) { if( strlen(File->d_name)>0 && File->d_name[0] != '.' ) { char all_name[BSIZE]; sprintf(all_name,"%s/%s",dirname,File->d_name); stat(all_name,&st); if(!(st.st_mode & S_IFDIR)) { allName = realloc(allName, (*nFiles+1)*sizeof(char*)); allName[*nFiles] = malloc(BSIZE*sizeof(char)); sprintf(allName[*nFiles],all_name); (*nFiles)++; } } File = readdir(dir); } closedir(dir); } return allName; } /***********************************************************************************/ void initBasis(Atom* atom, char* symb) { atom->nbas = 0; sprintf(atom->symb,"%s",symb); } /***********************************************************************************/ void AddBasisForAnAtomFromAFile(Atom* atom, FILE* file) { char buffer[BSIZE]; char buffer2[BSIZE]; char symb[BSIZE]; char tmp[BSIZE]; int nbas; int i; int n; int len=0; int k; sprintf(symb,"/%s.",atom->symb); nbas = atom->nbas; /* printf("symb = %s\n",symb);*/ while(!feof(file)) { if(!fgets(buffer,BSIZE,file)) return; if(!strstr(buffer,symb)) continue; if(buffer[0]=='*') continue; len = strlen(buffer); k = 0; for(i=0; ibasisName[nbas], atom->author[nbas],atom->primitive[nbas],atom->contraction[nbas], atom->ecpType[nbas]); /* printf("n = %d\n",n);*/ if(n<6) sprintf(atom->ecpType[nbas],"UNK"); if(n<5) sprintf(atom->contraction[nbas],"UNK"); if(n<4) sprintf(atom->primitive[nbas],"UNK"); if(n<3) sprintf(atom->author[nbas],"UNK"); if(n<2) continue; atom->nbas++; nbas = atom->nbas; } } /***********************************************************************************/ void swap(char* x, char* y) { char buffer[BSIZE]; sprintf(buffer,"%s",x); sprintf(x,"%s",y); sprintf(y,"%s",buffer); } /***********************************************************************************/ void sortBasisForAnAtom(Atom* atom) { int nbas = 0; int i; int j; int k; nbas = atom->nbas; for(i=0; ibasisName[i],"ECP")) continue; k = -1; for(j=i+1; jbasisName[j],"ECP")) { k = j; break;} if(k != -1) { swap(atom->basisName[i],atom->basisName[k]); swap(atom->author[i],atom->author[k]); swap(atom->primitive[i],atom->primitive[k]); swap(atom->contraction[i],atom->contraction[k]); swap(atom->ecpType[i],atom->ecpType[k]); } } } /***********************************************************************************/ void printBasisForAnAtom(Atom* atom) { int nbas = 0; int i; nbas = atom->nbas; if(nbas>0) printf("Basis List for atom %s\n",atom->symb); else printf("No Basis available for %s atom \n",atom->symb); printf("-------------------------------\n"); for(i=0; isymb); printf("%s.",atom->basisName[i]); if(strstr(atom->author[i],"UNK")) printf("."); else printf("%s.",atom->author[i]); if(strstr(atom->primitive[i],"UNK")) printf("."); else printf("%s.",atom->primitive[i]); if(strstr(atom->contraction[i],"UNK")) printf("."); else printf("%s.",atom->contraction[i]); if(strstr(atom->ecpType[i],"UNK")) printf("."); else printf("%s.",atom->ecpType[i]); printf("\n"); } printf("============================================================\n"); } /***********************************************************************************/ void getBasisForAnAtom(Atom* atom, int nFiles, char** allFiles) { FILE* fin; int i; for(i=0;i0) nAtoms++; } file = fopen("molcasbasis.cc","w"); if(!file) return 1; fprintf(file,"gboolean create_libmolcas_file(gchar* filename)\n"); fprintf(file,"{\n"); fprintf(file,"\tFILE* file = fopen(filename,\"w\");\n\n"); fprintf(file,"\tif(file==NULL)\n"); fprintf(file,"\t{\n"); fprintf(file,"\t\treturn FALSE;\n"); fprintf(file,"\t}\n"); fprintf(file,"\tfprintf(file,\"Natoms = %d\\n\");\n",nAtoms); for(i=0;i molcaslib.c * 2-> createMolcasLibFileForGabedit.c * 3-> createMolcasLibFunctionForGabedit.c * * 1) molcaslib.c is a program for obtain the list of basis available in Molcas software. * For this : put molcaslib.c in the server where Molcas is installed. * Compile this program : cc -o molcaslib molcaslib.c * Type the following order : ./molcaslib and enter for obtain all basis for all atoms * Type the following order : ./molcaslib SymbolOfAtom and enter for obtain all basis 'SymbolOfAtom' atom * For example type molcaslib H and enter for obtain all basis H atom * * 1) * createMolcasLibFileForGabedit.c is a program for create molcasbasis file. * For this : put createMolcasLibFileForGabedit.c in the server where Molcas is installed. * Compile this program : cc -o createMolcasLibFileForGabedit createMolcasLibFileForGabedit.c * Type the following order : ./createMolcasLibFileForGabedit * createMolcasLibFileForGabedit.c create molcasbasis file. * Put this file (molcasbasis) in .gabedit.1.2.x directroy * .gabedit.1.2.x is a directory created by gabedit at your local station at your home directory * x is the number of micro version of gabedit (x=0, 1, 2, 3, 4, 5, 6, 7, 8 or 9) * * * 2) * createMolcasLibFunctionForGabedit.c is a program for create a function of MolcasLib.c file * this file is util only for Gabedit developers ***************************************************************************************************/ GabeditSrc250/utils/Molcas/molcaslib.c0000644000175100017510000001516513130665226020173 0ustar alloucheallouche/**************************************************************************** * program for get list of basis available for an atoms using Molcas pacckage * molcaslib H and enter for obtain all basis for H atom * molcaslib and enter for obtain all basis for all atoms *****************************************************************************/ #include #include #include #include #include #include #define NATOMS 120 #define BSIZE 1024 typedef struct _Atom { char symb[10]; int nbas; char basisName[NATOMS][BSIZE]; char author[NATOMS][BSIZE]; char primitive[NATOMS][BSIZE]; char contraction[NATOMS][BSIZE]; char ecpType[NATOMS][BSIZE]; }Atom; /***********************************************************************************/ #define NROW 18 #define NCOL 10 char *SymbAtoms[18][10]={ {"H" ,"Li","Na","K" ,"Rb","Cs","Fr","00","00","00"}, {"00","Be","Mg","Ca","Sr","Ba","Ra","00","X","00"}, {"00","00","00","Sc","Y" ,"La","Ac","00","00","00"}, {"00","00","00","Ti","Zr","Hf","00","00","00","00"}, {"00","00","00","V" ,"Nb","Ta","00","Ce","Th","00"}, {"00","00","00","Cr","Mo","W" ,"00","Pr","Pa","00"}, {"00","00","00","Mn","Tc","Re","00","Nd","U" ,"00"}, {"00","00","00","Fe","Ru","Os","00","Pm","Np","00"}, {"00","00","00","Co","Rh","Ir","00","Sm","Pu","00"}, {"00","00","00","Ni","Pd","Pt","00","Eu","Am","00"}, {"00","00","00","Cu","Ag","Au","00","Gd","Cm","00"}, {"00","00","00","Zn","Cd","Hg","00","Tb","Bk","00"}, {"00","B" ,"Al","Ga","In","Tl","00","Dy","Cf","00"}, {"00","C" ,"Si","Ge","Sn","Pb","00","Ho","Es","00"}, {"00","N" ,"P" ,"As","Sb","Bi","00","Er","Fm","00"}, {"00","O" ,"S" ,"Se","Te","Po","00","Tm","Md","00"}, {"00","F" ,"Cl","Br","I" ,"At","00","Yb","No","00"}, {"He","Ne","Ar","Kr","Xe","Rn","00","Lu","Lr","00"}, }; /***********************************************************************************/ char** createListFiles(char* dirname, int* nFiles) { DIR* dir; struct stat st; struct dirent *File; char** allName = NULL; *nFiles = 0; dir = opendir(dirname); if(dir) { File = readdir(dir); while(File) { if( strlen(File->d_name)>0 && File->d_name[0] != '.' ) { char all_name[BSIZE]; sprintf(all_name,"%s/%s",dirname,File->d_name); stat(all_name,&st); if(!(st.st_mode & S_IFDIR)) { allName = realloc(allName, (*nFiles+1)*sizeof(char*)); allName[*nFiles] = malloc(BSIZE*sizeof(char)); sprintf(allName[*nFiles],all_name); (*nFiles)++; } } File = readdir(dir); } closedir(dir); } return allName; } /***********************************************************************************/ void initBasis(Atom* atom, char* symb) { atom->nbas = 0; sprintf(atom->symb,"%s",symb); } /***********************************************************************************/ void AddBasisForAnAtomFromAFile(Atom* atom, FILE* file) { char buffer[BSIZE]; char buffer2[BSIZE]; char symb[BSIZE]; char tmp[BSIZE]; int nbas; int i; int n; int len=0; int k; sprintf(symb,"/%s.",atom->symb); nbas = atom->nbas; /* printf("symb = %s\n",symb);*/ while(!feof(file)) { if(!fgets(buffer,BSIZE,file)) return; if(!strstr(buffer,symb)) continue; if(buffer[0]=='*') continue; len = strlen(buffer); k = 0; for(i=0; ibasisName[nbas], atom->author[nbas],atom->primitive[nbas],atom->contraction[nbas], atom->ecpType[nbas]); /* printf("n = %d\n",n);*/ if(n<6) sprintf(atom->ecpType[nbas],"UNK"); if(n<5) sprintf(atom->contraction[nbas],"UNK"); if(n<4) sprintf(atom->primitive[nbas],"UNK"); if(n<3) sprintf(atom->author[nbas],"UNK"); if(n<2) continue; atom->nbas++; nbas = atom->nbas; } } /***********************************************************************************/ void printBasisForAnAtom(Atom* atom) { int nbas = 0; int i; nbas = atom->nbas; if(nbas>0) printf("Basis List for atom %s\n",atom->symb); else printf("No Basis available for %s atom \n",atom->symb); printf("-------------------------------\n"); for(i=0; isymb); printf("%s.",atom->basisName[i]); if(strstr(atom->author[i],"UNK")) printf("."); else printf("%s.",atom->author[i]); if(strstr(atom->primitive[i],"UNK")) printf("."); else printf("%s.",atom->primitive[i]); if(strstr(atom->contraction[i],"UNK")) printf("."); else printf("%s.",atom->contraction[i]); if(strstr(atom->ecpType[i],"UNK")) printf("."); else printf("%s.",atom->ecpType[i]); printf("\n"); } printf("============================================================\n"); } /***********************************************************************************/ void getBasisForAnAtom(Atom* atom, int nFiles, char** allFiles) { FILE* fin; FILE* fout; int i; for(i=0;i=2) { char symb[BSIZE]; sprintf(symb,argv[1]); if(strlen(symb)>1) for(i=1;i #include #include #include #include #include #define NBASIS 120 #define BSIZE 1024 typedef struct _Atom { char symb[10]; int nbas; char basisName[NBASIS][BSIZE]; char author[NBASIS][BSIZE]; char primitive[NBASIS][BSIZE]; char contraction[NBASIS][BSIZE]; char ecpType[NBASIS][BSIZE]; }Atom; /***********************************************************************************/ #define NROW 18 #define NCOL 10 char *SymbAtoms[18][10]={ {"H" ,"Li","Na","K" ,"Rb","Cs","Fr","00","00","00"}, {"00","Be","Mg","Ca","Sr","Ba","Ra","00","X","00"}, {"00","00","00","Sc","Y" ,"La","Ac","00","00","00"}, {"00","00","00","Ti","Zr","Hf","00","00","00","00"}, {"00","00","00","V" ,"Nb","Ta","00","Ce","Th","00"}, {"00","00","00","Cr","Mo","W" ,"00","Pr","Pa","00"}, {"00","00","00","Mn","Tc","Re","00","Nd","U" ,"00"}, {"00","00","00","Fe","Ru","Os","00","Pm","Np","00"}, {"00","00","00","Co","Rh","Ir","00","Sm","Pu","00"}, {"00","00","00","Ni","Pd","Pt","00","Eu","Am","00"}, {"00","00","00","Cu","Ag","Au","00","Gd","Cm","00"}, {"00","00","00","Zn","Cd","Hg","00","Tb","Bk","00"}, {"00","B" ,"Al","Ga","In","Tl","00","Dy","Cf","00"}, {"00","C" ,"Si","Ge","Sn","Pb","00","Ho","Es","00"}, {"00","N" ,"P" ,"As","Sb","Bi","00","Er","Fm","00"}, {"00","O" ,"S" ,"Se","Te","Po","00","Tm","Md","00"}, {"00","F" ,"Cl","Br","I" ,"At","00","Yb","No","00"}, {"He","Ne","Ar","Kr","Xe","Rn","00","Lu","Lr","00"}, }; /***********************************************************************************/ char** createListFiles(char* dirname, int* nFiles) { DIR* dir; struct stat st; struct dirent *File; char** allName = NULL; *nFiles = 0; dir = opendir(dirname); if(dir) { File = readdir(dir); while(File) { if( strlen(File->d_name)>0 && File->d_name[0] != '.' ) { char all_name[BSIZE]; sprintf(all_name,"%s/%s",dirname,File->d_name); stat(all_name,&st); if(!(st.st_mode & S_IFDIR)) { allName = realloc(allName, (*nFiles+1)*sizeof(char*)); allName[*nFiles] = malloc(BSIZE*sizeof(char)); sprintf(allName[*nFiles],all_name); (*nFiles)++; } } File = readdir(dir); } closedir(dir); } return allName; } /***********************************************************************************/ void initBasis(Atom* atom, char* symb) { atom->nbas = 0; sprintf(atom->symb,"%s",symb); } /***********************************************************************************/ void AddBasisForAnAtomFromAFile(Atom* atom, FILE* file) { char buffer[BSIZE]; char buffer2[BSIZE]; char symb[BSIZE]; char tmp[BSIZE]; int nbas; int i; int n; int len=0; int k; sprintf(symb,"/%s.",atom->symb); nbas = atom->nbas; /* printf("symb = %s\n",symb);*/ while(!feof(file)) { if(!fgets(buffer,BSIZE,file)) return; if(!strstr(buffer,symb)) continue; if(buffer[0]=='*') continue; len = strlen(buffer); k = 0; for(i=0; ibasisName[nbas], atom->author[nbas],atom->primitive[nbas],atom->contraction[nbas], atom->ecpType[nbas]); /* printf("n = %d\n",n);*/ if(n<6) sprintf(atom->ecpType[nbas],"UNK"); if(n<5) sprintf(atom->contraction[nbas],"UNK"); if(n<4) sprintf(atom->primitive[nbas],"UNK"); if(n<3) sprintf(atom->author[nbas],"UNK"); if(n<2) continue; atom->nbas++; nbas = atom->nbas; } } /***********************************************************************************/ void swap(char* x, char* y) { char buffer[BSIZE]; sprintf(buffer,"%s",x); sprintf(x,"%s",y); sprintf(y,"%s",buffer); } /***********************************************************************************/ void sortBasisForAnAtom(Atom* atom) { int nbas = 0; int i; int j; int k; nbas = atom->nbas; for(i=0; ibasisName[i],"ECP")) continue; k = -1; for(j=i+1; jbasisName[j],"ECP")) { k = j; break;} if(k != -1) { swap(atom->basisName[i],atom->basisName[k]); swap(atom->author[i],atom->author[k]); swap(atom->primitive[i],atom->primitive[k]); swap(atom->contraction[i],atom->contraction[k]); swap(atom->ecpType[i],atom->ecpType[k]); } } } /***********************************************************************************/ void printBasisForAnAtom(Atom* atom) { int nbas = 0; int i; nbas = atom->nbas; if(nbas>0) printf("Basis List for atom %s\n",atom->symb); else printf("No Basis available for %s atom \n",atom->symb); printf("-------------------------------\n"); for(i=0; isymb); printf("%s.",atom->basisName[i]); if(strstr(atom->author[i],"UNK")) printf("."); else printf("%s.",atom->author[i]); if(strstr(atom->primitive[i],"UNK")) printf("."); else printf("%s.",atom->primitive[i]); if(strstr(atom->contraction[i],"UNK")) printf("."); else printf("%s.",atom->contraction[i]); if(strstr(atom->ecpType[i],"UNK")) printf("."); else printf("%s.",atom->ecpType[i]); printf("\n"); } printf("============================================================\n"); } /***********************************************************************************/ void getBasisForAnAtom(Atom* atom, int nFiles, char** allFiles) { FILE* fin; int i; for(i=0;i0) nAtoms++; } file = fopen("molcasbasis","w"); if(!file) return 1; fprintf(file,"Natoms = %d\n",nAtoms); for(i=0;i #include #include #include #define NATOMS 120 #define BSIZE 1024 #define MAXNAME 6 #define MAXATOMTYPE 4 #define MAXRESIDUENAME 4 #define MAXSYMBOL 2 #define FALSE 0 #define TRUE 1 /**********************************************/ char* strup (char *str) { register unsigned char *s; if( !str) return NULL; s = (unsigned char *) str; while (*s) { if (islower (*s)) *s = toupper (*s); s++; } return (char *) str; } /**********************************************/ void delete_last_spaces(char* str) { char *s; if(str == NULL) return; if (!*str) return; for (s = str + strlen (str) - 1; s >= str && isspace ((unsigned char)*s); s--) *s = '\0'; } /**********************************************/ void delete_first_spaces(char* str) { char *start; int i; int lenSpace = 0; if(str == NULL) return; if (!*str) return; for (start = str; *start && isspace (*start); start++)lenSpace++; for(i=0;i<(int)(strlen(str)-lenSpace);i++) str[i] = str[i+lenSpace]; str[strlen(str)-lenSpace] = '\0'; } /*************************************************************************************/ static int read_atom_hin_file(char* t,char* listFields[]) { int taille = BSIZE; char dump[BSIZE]; int i; sscanf(t,"%s",dump); strup(dump); if(strcmp(dump,"ATOM")!=0) { if(strcmp(dump,"RES")==0) { sscanf(t,"%s %s %s",dump,dump,listFields[1]); sprintf(listFields[0],"Unknown"); } else return FALSE; } else { /* 0 -> Atom Type PDB Style*/ /* 1 -> Atom Symbol*/ /* 2 -> Atom Type Amber*/ /* 3 -> Atom Charge*/ /* 4 -> x*/ /* 5 -> y*/ /* 6 -> z*/ sscanf(t,"%s %s %s %s %s %s %s %s %s %s",dump,dump,listFields[0],listFields[1],listFields[2],dump,listFields[3],listFields[4],listFields[5],listFields[6]); } for(i=0;i<6;i++) { delete_last_spaces(listFields[i]); delete_first_spaces(listFields[i]); } return TRUE; } int main(int argc,char* argv[]) { FILE* fin; FILE* fout; char symb[10]; char** pdb; char** mm; float* charge; char t[BSIZE]; char dum1[100]; char dum2[100]; char dum3[100]; char* filename = NULL; int Natoms = 0; float C[3]; int i; char name[100]; char *listFields[8]; sprintf(name,"ToChange"); if(argc<2) filename = strdup("p.hin"); else filename = strdup(argv[1]); printf("FileName = %s\n",filename); fin = fopen(filename,"r"); if(!fin) { printf("I can not open %s\n",filename); return 1; } Natoms = 0; while(fgets(t,BSIZE,fin)) { strup(t); if(strstr(t,"ATOM"))Natoms++; if(strstr(t,"RES") && strstr(name,"ToChange")) { printf("t = %s\n",t); if(3==sscanf(t,"%s %s %s",dum1,dum3,dum2)) sprintf(name,dum2); } } fclose(fin); if(Natoms<=0) { printf("Error : Natoms <=0\n"); return 1; } pdb = (char**)malloc(Natoms*sizeof(char*)); mm = (char**)malloc(Natoms*sizeof(char*)); charge = (float*)malloc(Natoms*sizeof(float)); for(i=0;i Atom Type PDB Style*/ /* 1 -> Atom Symbol*/ /* 2 -> Atom Type Amber*/ /* 3 -> Atom Charge*/ /* 4 -> x*/ /* 5 -> y*/ /* 6 -> z*/ printf("t=%s\n",t); i++; sprintf(pdb[i],"%s",listFields[0]); sprintf(mm[i],"%s",listFields[2]); C[0] = atof(listFields[4]); C[1] = atof(listFields[5]); C[2] = atof(listFields[6]); charge[i] = atof(listFields[3]); fprintf(fout,"\t\tSetAtom(&F.Atoms[ %d ] , \"%s\",%0.6ff,%0.6ff,%0.6ff,%0.6ff);\n",i,pdb[i],C[0],C[1],C[2],charge[i]); } /* fprintf(fout,"\t\tF.atomToDelete =%d;\n",1); fprintf(fout,"\t\tF.atomToBondTo =%d;\n",2); fprintf(fout,"\t\tF.angleAtom =%d;\n",3); */ fprintf(fout,"\t}\n"); fprintf(fout,"\n\tfprintf(fout,\"%s\\n\")\n\n",name); fprintf(fout,"\tfprintf(fout,\"Begin %s Residue\\n\")\n",name); for(i=0;i #include #include #define NATOMS 120 #define BSIZE 1024 int main(int argc,char* argv[]) { FILE* fin; FILE* fout; char* symb = malloc(2*sizeof(char)); char t[BSIZE]; char* filename = NULL; int Natoms = 0; float C[3]; int i; char* name = malloc(100*sizeof(char)); if(argc<2) filename = strdup("p.xyz"); else filename = strdup(argv[1]); printf("FileName = %s\n",filename); fin = fopen(filename,"r"); if(!fin) { printf("I can not open %s\n",filename); return 1; } if(fgets(t,BSIZE,fin)) { if(sscanf(t,"%d",&Natoms) != 1) { printf("Error : readding of data file\n"); return 1; } if(Natoms<=0) { printf("Error : Natoms <=0\n"); return 1; } } fgets(t,BSIZE,fin); /* sscanf(t,"%s",name);*/ sscanf(filename,"%s",name); fout = fopen("Fragment.cc","a"); if(!fout) { printf("I can not open Fragment.cc\n"); return 1; } fprintf(fout,"\telse if ( !strcmp(Name, \"%s\" ) )\n",name); fprintf(fout,"\t{\n"); fprintf(fout,"\t\tF.NAtoms = %d;\n",Natoms); fprintf(fout,"\t\tF.Atoms = g_malloc(F.NAtoms*sizeof(Atom));\n"); i = -1; while(!feof(fin)) { if(!fgets(t,BSIZE,fin)) break; if(sscanf(t,"%s %f %f %f",symb,&C[0],&C[1],&C[2]) != 4) { printf("Error : readding of data file\n"); printf("Line : %s\n",t); break; } i++; fprintf(fout,"\t\tSetAtom(&F.Atoms[ %d ] , \"%s\",%0.6ff,%0.6ff,%0.6ff);\n",i,symb,C[0],C[1],C[2]); } fprintf(fout,"\t\tF.atomToDelete =%d;\n",1); fprintf(fout,"\t\tF.atomToBondTo =%d;\n",2); fprintf(fout,"\t\tF.angleAtom =%d;\n",3); fprintf(fout,"\t}\n"); fclose(fin); fclose(fout); return 0; } GabeditSrc250/utils/Fragments/ROH.hin0000644000175100017510000000366513130664665017732 0ustar allouchealloucheforcefield Amber99 sys 0 0 1 view 40 0.1272 55 15 0.247224 0.3713666 0.8949677 -0.8641704 0.5022867 0.0302929 -0.4382806 -0.7808937 0.4451014 6.191 0.64575 -54.754 seed -1108 mol 1 res 1 ARG 1 - - ATOM 1 HA H H1 - -0.013000 2.973846 -0.251038 -1.588962 1 4 s ATOM 2 HG2 H HC - 0.078100 0.511846 0.259962 -1.432962 1 8 s ATOM 3 HB1 H HC - 0.162200 1.406846 -1.903038 -0.627962 1 10 s ATOM 4 CA C CT - 0.613500 2.974846 -0.436038 -0.514962 4 1 s 5 s 10 s 14 s ATOM 5 N N N - -0.687400 4.034846 -1.390038 -0.256962 2 4 s 20 s ATOM 6 HD1 H H1 - 0.055100 -1.024154 -1.432038 -0.464962 1 13 s ATOM 7 HE H H - 0.383700 -1.655154 1.355962 -0.610962 1 12 s ATOM 8 CG C CT - -0.121200 0.536846 0.043962 -0.364962 4 2 s 10 s 13 s 16 s ATOM 9 HH21 H H - 0.511600 -3.760154 2.046962 -0.601962 1 15 s ATOM 10 CB C CT - -0.426200 1.620846 -0.988038 -0.076962 4 3 s 4 s 8 s 23 s ATOM 11 OH O OH - -0.747600 2.518846 1.822962 -0.101962 2 14 s 17 s ATOM 12 NE N N2 - -0.707500 -1.898154 0.469962 -0.191962 3 7 s 13 s 18 s ATOM 13 CD C CT - 0.185000 -0.817154 -0.507038 0.072038 4 6 s 8 s 12 s 26 s ATOM 14 C C C - 0.683200 3.211846 0.864962 0.239038 3 4 s 11 s 22 d ATOM 15 NH2 N N2 - -1.121400 -4.064154 1.180962 -0.181962 3 9 s 18 s 19 s ATOM 16 HG1 H HC - 0.126700 0.749846 0.959962 0.186038 1 8 s ATOM 17 HO H HO - 0.544600 2.749846 2.720962 0.195038 1 11 s ATOM 18 CZ C CA - 1.082900 -3.174154 0.232962 0.098038 3 12 s 15 s 21 s ATOM 19 HH22 H H - 0.514900 -5.041154 1.029962 0.026038 1 15 s ATOM 20 H H H - 0.362500 4.072846 -1.591038 0.731038 1 5 s ATOM 21 NH1 N N2 - -0.981100 -3.572154 -0.910038 0.650038 3 18 s 24 s 25 s ATOM 22 O O O - -0.590800 4.221846 1.001962 0.965038 1 14 d ATOM 23 HB2 H HC - 0.097600 1.644846 -1.202038 0.991038 1 10 s ATOM 24 HH11 H H - 0.452300 -2.894154 -1.627038 0.862038 1 21 s ATOM 25 HH12 H H - 0.483000 -4.549154 -1.055038 0.857038 1 21 s ATOM 26 HD2 H H1 - 0.059300 -0.780154 -0.699038 1.145038 1 13 s endres 1 endmol 1 GabeditSrc250/utils/Fragments/createFragmentPDB.c0000644000175100017510000001077113130665226022211 0ustar alloucheallouche/* Program for read a pdb file and create c function for create a Fragment */ #include #include #include #include #define NATOMS 120 #define BSIZE 1024 #define MAXNAME 6 #define MAXATOMTYPE 4 #define MAXRESIDUENAME 4 #define MAXSYMBOL 2 #define FALSE 0 #define TRUE 1 /**********************************************/ void delete_last_spaces(char* str) { char *s; if(str == NULL) return; if (!*str) return; for (s = str + strlen (str) - 1; s >= str && isspace ((unsigned char)*s); s--) *s = '\0'; } /**********************************************/ void delete_first_spaces(char* str) { char *start; int i; int lenSpace = 0; if(str == NULL) return; if (!*str) return; for (start = str; *start && isspace (*start); start++)lenSpace++; for(i=0;i<(int)(strlen(str)-lenSpace);i++) str[i] = str[i+lenSpace]; str[strlen(str)-lenSpace] = '\0'; } /*************************************************************************************/ static int read_atom_pdb_file(char* line,char* listFields[]) { int i; int k = 0; if(strlen(line)<54) return FALSE; /* 0 -> Atom Type */ k = 0; for(i=0;i Residue Name */ k = 1; for(i=0;i Residue Number */ k = 2; for(i=0;i<4;i++) listFields[k][i] = line[23+i-1]; listFields[k][4] = '\0'; /* 3-> x */ k = 3; for(i=0;i<8;i++) listFields[k][i] = line[31+i-1]; listFields[k][8] = '\0'; /* 4-> y */ k = 4; for(i=0;i<8;i++) listFields[k][i] = line[39+i-1]; listFields[k][8] = '\0'; /* 5-> z */ k = 5; for(i=0;i<8;i++) listFields[k][i] = line[47+i-1]; listFields[k][8] = '\0'; /* 6-> Symbol */ k = 6; if(strlen(line)>=78) { for(i=0;i<2;i++) { listFields[k][i] = line[76+i]; } listFields[k][2] = '\0'; if(listFields[k][1]==' ') listFields[k][1] = '\0'; if(listFields[k][0]==' ') listFields[k][0] = '\0'; } else listFields[k][0] = '\0'; /* 7-> Charge */ k = 7; if(strlen(line)>=80) { for(i=0;i<(int)strlen(line)-79+1;i++) listFields[k][i] = line[79+i-1]; listFields[k][strlen(line)-79+1] = '\0'; if(listFields[k][strlen(line)-79]=='\n') listFields[k][strlen(line)-79]='\0'; } else listFields[k][0] = '\0'; for(i=0;i<8;i++) { delete_last_spaces(listFields[i]); delete_first_spaces(listFields[i]); } return TRUE; } int main(int argc,char* argv[]) { FILE* fin; FILE* fout; char symb[10]; char pdb[10]; char mm[10]; char t[BSIZE]; char* filename = NULL; int Natoms = 0; float C[3]; float charge; int i; char name[100]; char *listFields[8]; if(argc<2) filename = strdup("p.pdb"); else filename = strdup(argv[1]); printf("FileName = %s\n",filename); fin = fopen(filename,"r"); if(!fin) { printf("I can not open %s\n",filename); return 1; } Natoms = 0; while(fgets(t,BSIZE,fin)) { if(strstr(t,"ATOM"))Natoms++; } fclose(fin); if(Natoms<=0) { printf("Error : Natoms <=0\n"); return 1; } printf("Natoms = %d\n",Natoms); fin = fopen(filename,"r"); if(!fin) { printf("I can not open %s\n",filename); return 1; } sprintf(name,"ToChange"); printf("End sprintfName\n"); fout = fopen("Fragment.cc","a"); if(!fout) { printf("I can not open Fragment.cc\n"); return 1; } fprintf(fout,"\telse if ( !strcmp(Name, \"%s\" ) )\n",name); fprintf(fout,"\t{\n"); fprintf(fout,"\t\tF.NAtoms = %d;\n",Natoms); fprintf(fout,"\t\tF.Atoms = g_malloc(F.NAtoms*sizeof(Atom));\n"); printf("End fout\n"); for(i=0;i<8;i++) listFields[i] = (char*)malloc(100*sizeof(char)); i = -1; while(fgets(t,BSIZE,fin)) { if(!strstr(t,"ATOM")) continue; if(!read_atom_pdb_file(t,listFields)) continue; /* 0 -> Atom Type 1-> Residue Name 2-> Residue Number * 3-> x 4-> y 5-> z 6-> Symbol 7-> Charge */ printf("t=%s\n",t); i++; sprintf(pdb,"%s",listFields[0]); C[0] = atof(listFields[3]); C[1] = atof(listFields[4]); C[2] = atof(listFields[5]); charge = atof(listFields[7]); fprintf(fout,"\t\tSetAtom(&F.Atoms[ %d ] , \"%s\",%0.6ff,%0.6ff,%0.6ff,%0.6ff);\n",i,pdb,C[0],C[1],C[2],charge); } fprintf(fout,"\t\tF.atomToDelete =%d;\n",1); fprintf(fout,"\t\tF.atomToBondTo =%d;\n",2); fprintf(fout,"\t\tF.angleAtom =%d;\n",3); fprintf(fout,"\t}\n"); fclose(fin); fclose(fout); return 0; } GabeditSrc250/utils/Fragments/xf0000644000175100017510000000040413130664665017126 0ustar alloucheallouche./createFragment aspirin.xyz ./createFragment caffeine.xyz ./createFragment heroine.xyz ./createFragment lsd.xyz ./createFragment methadone.xyz ./createFragment morphine.xyz ./createFragment nicotine.xyz ./createFragment valium.xyz ./createFragment viagra.xyz GabeditSrc250/utils/xFind0000644000175100017510000000011513130664665015632 0ustar alloucheallouchefind . -name '*.c' -exec grep -n -H sprintf '{}' \; | grep --invert-match \" GabeditSrc250/utils/format.txt0000644000175100017510000000305713130664665016700 0ustar alloucheallouche[GEOMS] numberOfGeometries numberOfLabels nameLabel1 UnitLabel1 nValue1 /* Example : (Dipole D 3) or (Energy eV 1)*/ nameLabel2 UnitLabel2 nValue2 /* (Dipole D 3) or (Energy eV 1)*/ ..... ..... Value1_1 Value1_2 .... /* begin geometry number 1 */ Value2_1 Value2_2 .... /* nValue2 values */ .... .... numberOfAtomsBygeometry1 Symbol1 MMType1 PDBType1 ResiduName1 ResidueNumber1 Charge1 Layer1 X1 Y1 Z1 VX1 VY1 VZ1 /* Ang, Layer = 0, 1, or 2 (HIGHT MEDIUM LOWER), VX1 VY1 VZ1 are optionals */ Symbol2 MMType2 PDBType2 ResiduName2 ResidueNumber2 Charge2 Layer2 X2 Y2 Z2 VX2 VY2 VZ2 .... .... .... Value1 .... /* begin geometry number 2 */ Value2 .... .... .... numberOfAtomsBygeometry1 Symbol1 MMType1 PDBType1 ResiduName1 ResidueNumber1 Charge1 Layer1 X1 Y1 Z1 VX1 VY1 VZ1 /* ResiduNumber = 1,2, ...., X, Y and Z in Ang, Layer = 0, 1, or 2 (HIGHT MEDIUM LOWER) Symbol2 MMType2 PDBType2 ResiduName2 ResidueNumber2 Charge2 Layer2 X2 Y2 Z2 VX2 VY2 VZ2 .... .... .... ...... ...... [MD] numberOfGeometries nAtoms time(fs) TotalEnery(Kcal/mol) Kinetic Potential /* begin geometry number 1 */ Symbol1 X1 Y1 Z1 VX1 VY1 VZ1 Charge1 mmType1 pdbType1 residueName1 residueNumber1 /*Coord in Ang, Velocity in AKMA */ Symbol2 X2 Y2 Z2 VX2 VY2 VZ2 Charge2 mmType2 pdbType2 residueName2 ..... ..... nAtoms time(fs) TotalEnery(Kcal/mol) Kinetic Potential /* begin geometry number 2 */ Symbol1 X1 Y1 Z1 VX1 VY1 VZ1 Charge1 mmType1 pdbType1 residueName1 residueNumber1 /*Coord in Ang, Velocity in AKMA */ Symbol2 X2 Y2 Z2 VX2 VY2 VZ2 Charge2 mmType2 pdbType2 residueName2 ..... ..... GabeditSrc250/utils/MolecularMechanics/0000755000175100017510000000000013130665226020372 5ustar allouchealloucheGabeditSrc250/utils/MolecularMechanics/createTPLfile.c0000644000175100017510000001137413130665226023227 0ustar alloucheallouche#include #include #include #include /**********************************************************************/ int getAmberTypes(char* gromacsType, char* amberType) { char dump[1024]; int len = 1024; int n; char t1[100]; FILE* file; file = fopen("ffamber99nb.itp","r"); if(file == NULL) { printf("file ffamber99nb.itp not found\n"); return 0; } fgets(dump,len,file); n = 0; while(!feof(file)) { if(fgets(dump,len,file)) { if(strstr(dump,"[ atomtypes ]")) continue; if(dump[0]==';') continue; if(dump[0]=='[') continue; } sscanf(dump,"%s %s",t1,amberType); if(!strcmp(gromacsType,t1)) { fclose(file); return 1; } } return 0; } /**********************************************************************/ void delete_fl(char* str) { int j; for(j=0;j\n"); printf("#include \n"); printf("#include \n"); printf("#include \n"); } /**********************************************************************/ void printTitle() { printf("void createTitleResidueTpl(FILE* fout)\n"); printf("{\n"); printf("\tfprintf(fout,\"Begin Title\\n\");\n"); printf("\tfprintf(fout,\"\tResidue : PDB type atom Amber type atom charge of atom\\n\");\n"); printf("\tfprintf(fout,\"End\\n\");\n"); printf("}\n"); } /**********************************************************************/ char** printListResidue(FILE* file,int*nResidue, int ifNucleic) { char** t = (char**)malloc(sizeof(char*)); char dump[1024]; int len = 1024; int i; int j; int n; fgets(dump,len,file); n = 0; while(!feof(file)) { if(fgets(dump,len,file)) { if(strstr(dump,"[ bondedtypes ]")) continue; if(!(dump[0]=='[' && dump[1]==' ')) continue; } else break; t = realloc(t,(n+1)*sizeof(char*)); t[n] = (char*)malloc(100*sizeof(char*)); sscanf(dump,"[ %s",t[n]); n++; } if(n==0) free(t); printf("void createListResidueTpl(FILE* fout)\n"); printf("{\n"); printf("\tfprintf(fout,\"%s\\n\");\n","Begin Residue List"); for(i=0;i #include #include #include #include typedef struct _AmberParameters AmberParameters; typedef struct _AmberAtomTypes AmberAtomTypes; typedef struct _AmberBondStretchTerms AmberBondStretchTerms; typedef struct _AmberAngleBendTerms AmberAngleBendTerms; typedef struct _AmberDihedralAngleTerms AmberDihedralAngleTerms; typedef struct _AmberImproperTorsionTerms AmberImproperTorsionTerms; typedef struct _AmberNonBondedTerms AmberNonBondedTerms; typedef struct _AmberHydrogenBondedTerms AmberHydrogenBondedTerms; /************************************/ struct _AmberAtomTypes { gchar* name; gint number; gdouble masse; gdouble polarisability; gchar* c; }; /************************************/ struct _AmberBondStretchTerms { gint numbers[2]; gdouble equilibriumDistance; gdouble forceConstant; gchar* c; }; /************************************/ struct _AmberAngleBendTerms { gint numbers[3]; gdouble equilibriumAngle; gdouble forceConstant; gchar* c; }; /************************************/ struct _AmberDihedralAngleTerms { gint numbers[4]; gint nSomme; gdouble* divisor; gdouble* barrier; gdouble* phase; gdouble* n; gchar* c; }; /************************************/ struct _AmberImproperTorsionTerms { gint numbers[4]; gdouble barrier; gdouble phase; gdouble n; gchar* c; }; /************************************/ struct _AmberNonBondedTerms { gint number; gdouble r; gdouble epsilon; gchar* c; }; /************************************/ struct _AmberHydrogenBondedTerms { gint numbers[2]; gdouble c; gdouble d; gchar* cc; }; /************************************/ struct _AmberParameters { gint numberOfTypes; AmberAtomTypes* atomTypes; gint numberOfStretchTerms; AmberBondStretchTerms* bondStretchTerms; gint numberOfBendTerms; AmberAngleBendTerms* angleBendTerms; gint numberOfDihedralTerms; AmberDihedralAngleTerms* dihedralAngleTerms; gint numberOfImproperTorsionTerms; AmberImproperTorsionTerms* improperTorsionTerms; gint numberOfNonBonded; AmberNonBondedTerms* nonBondedTerms; gint numberOfHydrogenBonded; AmberHydrogenBondedTerms* hydrogenBondedTerms; }; /************************************/ static gchar atomTypesTitle[] = "Begin INPUT FOR ATOM TYPES, MASSE AND POLARISABILITIES"; static gchar bondStretchTitle[] = "Begin INPUT FOR BOND LENGTH PARAMETERS"; static gchar angleBendTitle[] = "Begin INPUT FOR BOND ANGLE PARAMETERS"; static gchar hydrogenBondedTitle[] = "Begin INPUT FOR H-BOND 10-12 POTENTIAL PARAMETERS"; static gchar improperTorsionTitle[] ="Begin INPUT FOR IMPROPER DIHEDRAL PARAMETERS"; static gchar nonBondedTitle[] ="Begin INPUT FOR THE NON-BONDED 6-12 POTENTIAL PARAMETERS"; static gchar nonBondedEquivTitle[] ="Begin INPUT FOR EQUIVALENCING ATOM TYPES FOR THE NON-BONDED 6-12 POTENTIAL PARAMETERS"; static gchar dihedralAngleTitle[] = "Begin INPUT FOR DIHEDRAL PARAMETERS"; /**********************************************************************/ AmberParameters newAmberParameters() { AmberParameters amberParameters; amberParameters.numberOfTypes = 0; amberParameters.atomTypes = NULL; amberParameters.numberOfStretchTerms = 0; amberParameters.bondStretchTerms = NULL; amberParameters.numberOfBendTerms = 0; amberParameters.angleBendTerms = NULL; amberParameters.numberOfDihedralTerms = 0; amberParameters.dihedralAngleTerms = NULL; amberParameters.numberOfImproperTorsionTerms = 0; amberParameters.improperTorsionTerms = NULL; amberParameters.numberOfNonBonded = 0; amberParameters.nonBondedTerms = NULL; amberParameters.numberOfHydrogenBonded = 0; amberParameters.hydrogenBondedTerms = NULL; return amberParameters; } /**********************************************************************/ void freeAmberParameters(AmberParameters* amberParameters) { gint i; for(i=0;inumberOfTypes;i++) if(amberParameters->atomTypes[i].name) g_free(amberParameters->atomTypes[i].name); amberParameters->numberOfTypes = 0; if(amberParameters->atomTypes ) g_free(amberParameters->atomTypes ); amberParameters->atomTypes = NULL; amberParameters->numberOfStretchTerms = 0; if(amberParameters->bondStretchTerms) g_free(amberParameters->bondStretchTerms); amberParameters->bondStretchTerms = NULL; amberParameters->numberOfBendTerms = 0; if(amberParameters->angleBendTerms) g_free(amberParameters->angleBendTerms); amberParameters->angleBendTerms = NULL; for(i=0;inumberOfDihedralTerms;i++) { if(amberParameters->dihedralAngleTerms[i].divisor) g_free(amberParameters->dihedralAngleTerms[i].divisor); if(amberParameters->dihedralAngleTerms[i].barrier) g_free(amberParameters->dihedralAngleTerms[i].barrier); if(amberParameters->dihedralAngleTerms[i].phase) g_free(amberParameters->dihedralAngleTerms[i].phase); if(amberParameters->dihedralAngleTerms[i].n) g_free(amberParameters->dihedralAngleTerms[i].n); } amberParameters->numberOfDihedralTerms = 0; if(amberParameters->dihedralAngleTerms) g_free(amberParameters->dihedralAngleTerms); amberParameters->dihedralAngleTerms = NULL; amberParameters->numberOfImproperTorsionTerms = 0; if(amberParameters->improperTorsionTerms) g_free(amberParameters->improperTorsionTerms); amberParameters->improperTorsionTerms = NULL; amberParameters->numberOfNonBonded = 0; if(amberParameters->nonBondedTerms) g_free(amberParameters->nonBondedTerms); amberParameters->nonBondedTerms = NULL; amberParameters->numberOfHydrogenBonded = 0; if(amberParameters->hydrogenBondedTerms) g_free(amberParameters->hydrogenBondedTerms); amberParameters->hydrogenBondedTerms = NULL; } /**********************************************************************/ gint getNumberType(AmberParameters* amberParameters, gchar* type) { gint i; gint nTypes = amberParameters->numberOfTypes; AmberAtomTypes* types = amberParameters->atomTypes; gint len = strlen(type); if(strcmp(type,"X")==0) return -1; for(i=0;inumberOfTypes = n; amberParameters->atomTypes = types; } /* printing for test*/ /* printf("umber of types = %d \n",amberParameters->numberOfTypes); for(n=0;nnumberOfTypes;n++) { printf("%s\t %d\t", amberParameters->atomTypes[n].name, amberParameters->atomTypes[n].number ); } printf("\n"); */ return TRUE; } /**********************************************************************/ gboolean readAmberBondStretchTerms(AmberParameters* amberParameters,FILE* file) { gchar t[1024]; gchar dump1[1024]; gchar dump2[1024]; gint len = 1024; gboolean Ok = FALSE; gint n = 0; AmberBondStretchTerms* terms = NULL; /* Search Begin INPUT FOR ATOM TYPES */ while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,bondStretchTitle)) { Ok = TRUE; break; } } } if(!Ok) return FALSE; terms = g_malloc(sizeof(AmberBondStretchTerms)); n = 0; Ok = FALSE; while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,"End")) { Ok = TRUE; break; } } else { Ok = FALSE; break; } dump1[2]='\0'; dump2[2]='\0'; sscanf(t,"%c%c-%c%c %lf %lf",&dump1[0],&dump1[1],&dump2[0],&dump2[1], &terms[n].forceConstant, &terms[n].equilibriumDistance); if(strlen(t)>28) terms[n].c = g_strdup(t+28); else terms[n].c = g_strdup(" "); terms[n].c[strlen(terms[n].c)-1]='\0'; if(dump1[1]==' ') dump1[1]='\0'; if(dump2[1]==' ') dump2[1]='\0'; terms[n].numbers[0] = getNumberType(amberParameters,dump1); terms[n].numbers[1] = getNumberType(amberParameters,dump2); n++; terms = g_realloc(terms,(n+1)*sizeof(AmberBondStretchTerms)); } if(n==0 || !Ok ) g_free(terms); else { amberParameters->numberOfStretchTerms = n; amberParameters->bondStretchTerms = terms; } /* printing for test*/ /* printf("number of bonds = %d \n",amberParameters->numberOfStretchTerms); for(n=0;nnumberOfStretchTerms;n++) { printf("%d %d %f %f\n", amberParameters->bondStretchTerms[n].numbers[0], amberParameters->bondStretchTerms[n].numbers[1], amberParameters->bondStretchTerms[n].forceConstant, amberParameters->bondStretchTerms[n].equilibriumDistance ); } printf("\n"); */ return TRUE; } /**********************************************************************/ gboolean readAmberAngleBendTerms(AmberParameters* amberParameters,FILE* file) { gchar t[1024]; gchar dump1[10]; gchar dump2[10]; gchar dump3[10]; gint len = 1024; gboolean Ok = FALSE; gint n = 0; AmberAngleBendTerms* terms = NULL; /* Search Begin INPUT FOR ATOM TYPES */ while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,angleBendTitle)) { Ok = TRUE; break; } } } if(!Ok) return FALSE; terms = g_malloc(sizeof(AmberAngleBendTerms)); n = 0; Ok = FALSE; while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,"End")) { Ok = TRUE; break; } } else { Ok = FALSE; break; } dump1[2]='\0'; dump2[2]='\0'; dump3[2]='\0'; sscanf(t,"%c%c-%c%c-%c%c %lf %lf", &dump1[0],&dump1[1],&dump2[0],&dump2[1],&dump3[0],&dump3[1], &terms[n].forceConstant, &terms[n].equilibriumAngle); if(strlen(t)>32) terms[n].c = g_strdup(t+32); else terms[n].c = g_strdup(" "); terms[n].c[strlen(terms[n].c)-1]='\0'; if(dump1[1]==' ') dump1[1]='\0'; if(dump2[1]==' ') dump2[1]='\0'; if(dump3[1]==' ') dump3[1]='\0'; terms[n].numbers[0] = getNumberType(amberParameters,dump1); terms[n].numbers[1] = getNumberType(amberParameters,dump2); terms[n].numbers[2] = getNumberType(amberParameters,dump3); n++; terms = g_realloc(terms,(n+1)*sizeof(AmberAngleBendTerms)); } if(n==0 || !Ok ) g_free(terms); else { amberParameters->numberOfBendTerms = n; amberParameters->angleBendTerms = terms; } /* printing for test*/ /* printf("number of bonds = %d \n",amberParameters->numberOfBendTerms); for(n=0;nnumberOfBendTerms;n++) { printf("%d %d %d %f %f\n", amberParameters->angleBendTerms[n].numbers[0], amberParameters->angleBendTerms[n].numbers[1], amberParameters->angleBendTerms[n].numbers[2], amberParameters->angleBendTerms[n].forceConstant, amberParameters->angleBendTerms[n].equilibriumAngle ); } printf("\n"); */ return TRUE; } /**********************************************************************/ gboolean readAmberDihedralAngleTerms(AmberParameters* amberParameters,FILE* file) { gchar t[1024]; gchar dump1[10]; gchar dump2[10]; gchar dump3[10]; gchar dump4[10]; gint len = 1024; gboolean Ok = FALSE; gint n = 0; AmberDihedralAngleTerms* terms = NULL; gdouble divisor = 1; gdouble barrier = 0; gdouble phase = 0; gdouble nN = 0; /* Search Begin INPUT FOR DIHEDRAL PARAMETERS */ while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,dihedralAngleTitle)) { Ok = TRUE; break; } } } if(!Ok) return FALSE; terms = g_malloc(sizeof(AmberDihedralAngleTerms)); n = 0; Ok = FALSE; while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,"End")) { Ok = TRUE; break; } } else { Ok = FALSE; break; } terms[n].nSomme = 1; terms[n].divisor = g_malloc(sizeof(gdouble)); terms[n].barrier = g_malloc(sizeof(gdouble)); terms[n].phase = g_malloc(sizeof(gdouble)); terms[n].n = g_malloc(sizeof(gdouble)); dump1[2]='\0'; dump2[2]='\0'; dump3[2]='\0'; dump4[2]='\0'; sscanf(t,"%c%c-%c%c-%c%c-%c%c %lf %lf %lf %lf", &dump1[0],&dump1[1], &dump2[0],&dump2[1], &dump3[0],&dump3[1], &dump4[0],&dump4[1], &divisor, &barrier, &phase, &nN); terms[n].divisor[0] = divisor; terms[n].barrier[0] = barrier; terms[n].phase[0] = phase; terms[n].n[0] = fabs(nN); if(strlen(t)>60) terms[n].c = g_strdup(t+60); else terms[n].c = g_strdup(" "); terms[n].c[strlen(terms[n].c)-1]='\0'; if(dump1[1]==' ') dump1[1]='\0'; if(dump2[1]==' ') dump2[1]='\0'; if(dump3[1]==' ') dump3[1]='\0'; if(dump4[1]==' ') dump4[1]='\0'; terms[n].numbers[0] = getNumberType(amberParameters,dump1); terms[n].numbers[1] = getNumberType(amberParameters,dump2); terms[n].numbers[2] = getNumberType(amberParameters,dump3); terms[n].numbers[3] = getNumberType(amberParameters,dump4); Ok = TRUE; while(!feof(file) && nN<0) { if(!fgets(t,len,file)) { Ok = FALSE; break; } terms[n].nSomme++; terms[n].divisor = g_realloc(terms[n].divisor,terms[n].nSomme*sizeof(gdouble)); terms[n].barrier = g_realloc(terms[n].barrier,terms[n].nSomme*sizeof(gdouble)); terms[n].phase = g_realloc(terms[n].phase,terms[n].nSomme*sizeof(gdouble)); terms[n].n = g_realloc(terms[n].n,terms[n].nSomme*sizeof(gdouble)); sscanf(t,"%c%c-%c%c-%c%c-%c%c %lf %lf %lf %lf", &dump1[0],&dump1[1], &dump2[0],&dump2[1], &dump3[0],&dump3[1], &dump4[0],&dump4[1], &divisor, &barrier, &phase, &nN); terms[n].divisor[terms[n].nSomme-1] = divisor; terms[n].barrier[terms[n].nSomme-1] = barrier; terms[n].phase[terms[n].nSomme-1] = phase; terms[n].n[terms[n].nSomme-1] = fabs(nN); } if(!Ok) break; n++; terms = g_realloc(terms,(n+1)*sizeof(AmberDihedralAngleTerms)); } if(n==0 || !Ok ) g_free(terms); else { amberParameters->numberOfDihedralTerms = n; amberParameters->dihedralAngleTerms = terms; } /* printing for test*/ /* printf("number of dihedral torsion terms = %d \n", amberParameters->numberOfDihedralTerms); for(n=0;nnumberOfDihedralTerms;n++) { gint j; printf("%d %d %d %d \t", amberParameters->dihedralAngleTerms[n].numbers[0], amberParameters->dihedralAngleTerms[n].numbers[1], amberParameters->dihedralAngleTerms[n].numbers[2], amberParameters->dihedralAngleTerms[n].numbers[3] ); for(j=0;jdihedralAngleTerms[n].nSomme;j++) { printf("%f %f %f %f\t", amberParameters->dihedralAngleTerms[n].divisor[j], amberParameters->dihedralAngleTerms[n].barrier[j], amberParameters->dihedralAngleTerms[n].phase[j], amberParameters->dihedralAngleTerms[n].n[j] ); } printf("\n"); } printf("\n"); */ return TRUE; } /**********************************************************************/ gboolean readAmberImproperTorsionTerms(AmberParameters* amberParameters,FILE* file) { gchar t[1024]; gchar dump1[10]; gchar dump2[10]; gchar dump3[10]; gchar dump4[10]; gint len = 1024; gboolean Ok = FALSE; gint n = 0; AmberImproperTorsionTerms* terms = NULL; /* Search Begin INPUT FOR ATOM TYPES */ while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,improperTorsionTitle)) { Ok = TRUE; break; } } } if(!Ok) return FALSE; terms = g_malloc(sizeof(AmberImproperTorsionTerms)); n = 0; Ok = FALSE; while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,"End")) { Ok = TRUE; break; } } else { Ok = FALSE; break; } dump1[2]='\0'; dump2[2]='\0'; dump3[2]='\0'; dump4[2]='\0'; sscanf(t,"%c%c-%c%c-%c%c-%c%c %lf %lf %lf", &dump1[0],&dump1[1], &dump2[0],&dump2[1], &dump3[0],&dump3[1], &dump4[0],&dump4[1], &terms[n].barrier, &terms[n].phase, &terms[n].n); if(strlen(t)>60) terms[n].c = g_strdup(t+60); else terms[n].c = g_strdup(" "); terms[n].c[strlen(terms[n].c)-1]='\0'; if(dump1[1]==' ') dump1[1]='\0'; if(dump2[1]==' ') dump2[1]='\0'; if(dump3[1]==' ') dump3[1]='\0'; if(dump4[1]==' ') dump4[1]='\0'; terms[n].numbers[0] = getNumberType(amberParameters,dump1); terms[n].numbers[1] = getNumberType(amberParameters,dump2); terms[n].numbers[2] = getNumberType(amberParameters,dump3); terms[n].numbers[3] = getNumberType(amberParameters,dump4); n++; terms = g_realloc(terms,(n+1)*sizeof(AmberImproperTorsionTerms)); } if(n==0 || !Ok ) g_free(terms); else { amberParameters->numberOfImproperTorsionTerms = n; amberParameters->improperTorsionTerms = terms; } /* printing for test*/ /* printf("number of improper torsion terms = %d \n", amberParameters->numberOfImproperTorsionTerms); for(n=0;nnumberOfImproperTorsionTerms;n++) { printf("%d %d %d %d %f %f %f\n", amberParameters->improperTorsionTerms[n].numbers[0], amberParameters->improperTorsionTerms[n].numbers[1], amberParameters->improperTorsionTerms[n].numbers[2], amberParameters->improperTorsionTerms[n].numbers[3], amberParameters->improperTorsionTerms[n].barrier, amberParameters->improperTorsionTerms[n].phase, amberParameters->improperTorsionTerms[n].n ); } printf("\n"); */ return TRUE; } /**********************************************************************/ gboolean readAmberHydrogenBondedTerms(AmberParameters* amberParameters,FILE* file) { gchar t[1024]; gchar dump1[10]; gchar dump2[10]; gint len = 1024; gboolean Ok = FALSE; gint n = 0; AmberHydrogenBondedTerms* terms = NULL; /* Search Begin INPUT FOR ATOM TYPES */ while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,hydrogenBondedTitle)) { Ok = TRUE; break; } } } if(!Ok) return FALSE; terms = g_malloc(sizeof(AmberHydrogenBondedTerms)); n = 0; Ok = FALSE; while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,"End")) { Ok = TRUE; break; } } else { Ok = FALSE; break; } dump1[2]='\0'; dump2[2]='\0'; sscanf(t,"%c%c-%c%c %lf %lf",&dump1[0],&dump1[1],&dump2[0],&dump2[1], &terms[n].c, &terms[n].d); if(strlen(t)>31) terms[n].cc = g_strdup(t+31); else terms[n].cc = g_strdup(" "); terms[n].cc[strlen(terms[n].cc)-1]='\0'; if(dump1[1]==' ') dump1[1]='\0'; if(dump2[1]==' ') dump2[1]='\0'; terms[n].numbers[0] = getNumberType(amberParameters,dump1); terms[n].numbers[1] = getNumberType(amberParameters,dump2); n++; terms = g_realloc(terms,(n+1)*sizeof(AmberHydrogenBondedTerms)); } if(n==0 || !Ok ) g_free(terms); else { amberParameters->numberOfHydrogenBonded = n; amberParameters->hydrogenBondedTerms = terms; } /* printing for test*/ /* printf("number of hydrogen bonds terms = %d \n",amberParameters->numberOfHydrogenBonded); for(n=0;nnumberOfHydrogenBonded;n++) { printf("%d %d %f %f\n", amberParameters->hydrogenBondedTerms[n].numbers[0], amberParameters->hydrogenBondedTerms[n].numbers[1], amberParameters->hydrogenBondedTerms[n].c, amberParameters->hydrogenBondedTerms[n].d ); } printf("\n"); */ return TRUE; } /**********************************************************************/ gboolean readAmberNonBondedTerms(AmberParameters* amberParameters,FILE* file) { gchar t[1024]; gchar dump1[1024]; gchar dump2[1024]; gint len = 1024; gboolean Ok = FALSE; gint n = 0; AmberNonBondedTerms* terms = NULL; gint nLigneEquiv = 0; gint* nTypes = NULL; gint **matrixNumbers = NULL; gchar** strLines = NULL; gint i; gint j; /* Search Equivalence */ Ok = FALSE; while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,nonBondedEquivTitle)) { Ok = TRUE; break; } } } if(Ok) { /* */ strLines = g_malloc(sizeof(gint*)); nLigneEquiv = 0; while(!feof(file)) { if(fgets(t,len,file)) { if(strstr(t,"End")) { Ok = TRUE; break; } strLines[nLigneEquiv] = g_strdup(t); nLigneEquiv++; strLines = g_realloc(strLines,(nLigneEquiv+1)*sizeof(gint*)); } else { Ok = FALSE; break; } } } if(nLigneEquiv>0) { gchar name[10]; gchar* pos; strLines = g_realloc(strLines,(nLigneEquiv)*sizeof(gint*)); nTypes = g_malloc(nLigneEquiv*sizeof(gint)); matrixNumbers = g_malloc(sizeof(gint*)); for(i=0;i41) terms[n].c = g_strdup(t+41); else terms[n].c = g_strdup(" "); terms[n].c[strlen(terms[n].c)-1]='\0'; if(dump1[1]==' ') dump1[1]='\0'; terms[n].number = getNumberType(amberParameters,dump1); n++; terms = g_realloc(terms,(n+1)*sizeof(AmberNonBondedTerms)); /* equivalence */ if(nLigneEquiv>0) { gint numberOld = terms[n-1].number; gint numberLine = -1; for(i=0;i-1 ) { terms[n].number = matrixNumbers[numberLine][j]; terms[n].r = terms[n-1].r; terms[n].epsilon = terms[n-1].epsilon; terms[n].c = g_strdup(terms[n-1].c); n++; terms = g_realloc(terms,(n+1)*sizeof(AmberNonBondedTerms)); } } } } } if(nLigneEquiv>0) { for(i=0;inumberOfNonBonded = n; amberParameters->nonBondedTerms = terms; } /* printing for test*/ /* printf("number of non bended terms = %d \n",amberParameters->numberOfNonBonded); for(n=0;nnumberOfNonBonded;n++) { printf("%d %f %f\n", amberParameters->nonBondedTerms[n].number, amberParameters->nonBondedTerms[n].r, amberParameters->nonBondedTerms[n].epsilon ); } printf("\n"); */ return TRUE; } /**********************************************************************/ void readAmberParameters(AmberParameters* amberParameters) { FILE* file; file = fopen("amber.prm","r"); if(file == NULL) printf("file amber.prm not found\n"); else { readAmberTypes(amberParameters,file); readAmberBondStretchTerms(amberParameters,file); readAmberAngleBendTerms(amberParameters,file); readAmberDihedralAngleTerms(amberParameters,file); readAmberImproperTorsionTerms(amberParameters,file); readAmberHydrogenBondedTerms(amberParameters,file); readAmberNonBondedTerms(amberParameters,file); fclose(file); } } /**********************************************************************/ gchar* getSymbol(gchar* name) { gchar* t; if(strlen(name)==1) return name; if(strcmp(name,"C0")==0) return "Ca"; if(strcmp(name,"CU")==0) return "Cu"; if(strcmp(name,"FE")==0) return "Fe"; if(strcmp(name,"MG")==0) return "Mg"; if(strcmp(name,"IM")==0) return "Cl"; if(strcmp(name,"IB")==0) return "I"; if(strcmp(name,"Li")==0) return "Li"; if(strcmp(name,"Na")==0) return "Na"; if(strcmp(name,"IP")==0) return "Na"; if(strcmp(name,"Cs")==0) return "Cs"; if(strcmp(name,"Rb")==0) return "Rb"; if(strcmp(name,"Zn")==0) return "Zn"; if(strcmp(name,"Cl")==0) return "Cl"; if(strcmp(name,"Br")==0) return "Br"; t = g_strdup_printf("%c",name[0]); return t; } /**********************************************************************/ void printfMmCFileBond(FILE* file,AmberParameters* amberParameters) { gint i; fprintf(file,"\tfprintf(fout,\"%s\\n\");\n",bondStretchTitle); for(i=0;inumberOfStretchTerms;i++) { fprintf(file,"\tfprintf(fout,\"%d\t%d\t%6.1f\t%7.4f\t\t%s\\n\");\n", amberParameters->bondStretchTerms[i].numbers[0]+1, amberParameters->bondStretchTerms[i].numbers[1]+1, amberParameters->bondStretchTerms[i].forceConstant, amberParameters->bondStretchTerms[i].equilibriumDistance, amberParameters->bondStretchTerms[i].c ); } fprintf(file,"\tfprintf(fout,\"End\\n\");\n"); } /**********************************************************************/ void printfMmCFileBend(FILE* file,AmberParameters* amberParameters) { gint n; fprintf(file,"\tfprintf(fout,\"%s\\n\");\n",angleBendTitle); for(n=0;nnumberOfBendTerms;n++) { fprintf(file,"\tfprintf(fout,\"%d\t%d\t%d\t%6.3f\t%6.2f\t\t%s\\n\");\n", amberParameters->angleBendTerms[n].numbers[0]+1, amberParameters->angleBendTerms[n].numbers[1]+1, amberParameters->angleBendTerms[n].numbers[2]+1, amberParameters->angleBendTerms[n].forceConstant, amberParameters->angleBendTerms[n].equilibriumAngle, amberParameters->angleBendTerms[n].c ); } fprintf(file,"\tfprintf(fout,\"End\\n\");\n"); } /**********************************************************************/ void printfMmCFileHydrogenBonded(FILE* file,AmberParameters* amberParameters) { gint n; fprintf(file,"\tfprintf(fout,\"%s\\n\");\n",hydrogenBondedTitle); for(n=0;nnumberOfHydrogenBonded;n++) { fprintf(file,"\tfprintf(fout,\"%d\t%d\t%8.1f\t%8.1f\t\t%s\\n\");\n", amberParameters->hydrogenBondedTerms[n].numbers[0]+1, amberParameters->hydrogenBondedTerms[n].numbers[1]+1, amberParameters->hydrogenBondedTerms[n].c, amberParameters->hydrogenBondedTerms[n].d, amberParameters->hydrogenBondedTerms[n].cc ); } fprintf(file,"\tfprintf(fout,\"End\\n\");\n"); } /**********************************************************************/ void printfMmCFileimproperTorsion(FILE* file,AmberParameters* amberParameters) { gint n; fprintf(file,"\tfprintf(fout,\"%s\\n\");\n",improperTorsionTitle); for(n=0;nnumberOfImproperTorsionTerms;n++) { fprintf(file,"\tfprintf(fout,\"%d\t%d\t%d\t%d\t%6.3f\t%6.2f\t%4.1f\t\t%s\\n\");\n", amberParameters->improperTorsionTerms[n].numbers[0]+1, amberParameters->improperTorsionTerms[n].numbers[1]+1, amberParameters->improperTorsionTerms[n].numbers[2]+1, amberParameters->improperTorsionTerms[n].numbers[3]+1, amberParameters->improperTorsionTerms[n].barrier, amberParameters->improperTorsionTerms[n].phase, amberParameters->improperTorsionTerms[n].n, amberParameters->improperTorsionTerms[n].c ); } fprintf(file,"\tfprintf(fout,\"End\\n\");\n"); } /**********************************************************************/ void printfMmCFileNonBonded(FILE* file,AmberParameters* amberParameters) { gint n; fprintf(file,"\tfprintf(fout,\"%s\\n\");\n",nonBondedTitle); for(n=0;nnumberOfNonBonded;n++) { fprintf(file,"\tfprintf(fout,\"%d\t%8.4f\t%8.4f\t\t%s\\n\");\n", amberParameters->nonBondedTerms[n].number+1, amberParameters->nonBondedTerms[n].r, amberParameters->nonBondedTerms[n].epsilon, amberParameters->nonBondedTerms[n].c ); } fprintf(file,"\tfprintf(fout,\"End\\n\");\n"); } /**********************************************************************/ void printfMmCFileDihedralAngle(FILE* file,AmberParameters* amberParameters) { gint n; gdouble nn; fprintf(file,"\tfprintf(fout,\"%s\\n\");\n",dihedralAngleTitle); for(n=0;nnumberOfDihedralTerms;n++) { gint j; for(j=0;jdihedralAngleTerms[n].nSomme;j++) { if(j==amberParameters->dihedralAngleTerms[n].nSomme-1) nn = amberParameters->dihedralAngleTerms[n].n[j]; else nn = -amberParameters->dihedralAngleTerms[n].n[j]; fprintf(file,"\tfprintf(fout,\"%d\t%d\t%d\t%d\t%4.1f\t%6.3f\t%6.2f\t%4.1f\t\t%s\\n\");\n", amberParameters->dihedralAngleTerms[n].numbers[0]+1, amberParameters->dihedralAngleTerms[n].numbers[1]+1, amberParameters->dihedralAngleTerms[n].numbers[2]+1, amberParameters->dihedralAngleTerms[n].numbers[3]+1, amberParameters->dihedralAngleTerms[n].divisor[j], amberParameters->dihedralAngleTerms[n].barrier[j], amberParameters->dihedralAngleTerms[n].phase[j], nn, amberParameters->dihedralAngleTerms[n].c ); } } fprintf(file,"\tfprintf(fout,\"End\\n\");\n"); } /**********************************************************************/ void printfMmCFileAtomTypes(FILE* file,AmberParameters* amberParameters) { gint i; fprintf(file,"\tfprintf(fout,\"%s\\n\");\n",atomTypesTitle); for(i=0;inumberOfTypes;i++) { fprintf(file,"\tfprintf(fout,\"%s\t%s\t%d\t%6.3f\t%6.3f\t\t%s\\n\");\n", amberParameters->atomTypes[i].name, getSymbol(amberParameters->atomTypes[i].name), amberParameters->atomTypes[i].number+1, amberParameters->atomTypes[i].masse, amberParameters->atomTypes[i].polarisability, amberParameters->atomTypes[i].c ); } fprintf(file,"\tfprintf(fout,\"End\\n\");\n"); } /**********************************************************************/ void printfMmCFileTitle(FILE* file) { fprintf(file,"\tfprintf(fout,\"Begin Title\\n\");\n"); fprintf(file,"\tfprintf(fout,\"\tAtom Types : Ty(Type) Symbol Numero Masse(C12 UMA) Polarisablities(Ang**3) \\n\");\n"); fprintf(file,"\tfprintf(fout,\"\tBond Length : N1-N2 Force(Kcal/mol/A**2) Re\\n\");\n"); fprintf(file,"\tfprintf(fout,\"\tBond Angle : N1-N2-N3 Force(Kcal/mol/rad**2) Angle(Deg) \\n\");\n"); fprintf(file,"\tfprintf(fout,\"\tDihedral : N1-N2-N3-N4 Idiv Pk Phase(Deg) Pn \\n\");\n"); fprintf(file,"\tfprintf(fout,\"\t E = Pk/Idiv*(1 + cos(P,*Phi - Phase)\\n\");\n"); fprintf(file,"\tfprintf(fout,\"\t Pk = Barrier/2 Kcal/mol\\n\");\n"); fprintf(file,"\tfprintf(fout,\"\t Idiv barrier is divised by Idiv\\n\");\n"); fprintf(file,"\tfprintf(fout,\"\t Pn = periodicity fo the torional barrier\\n\");\n"); fprintf(file,"\tfprintf(fout,\"\t if Pn<0 the tosional potential is \\n\");\n"); fprintf(file,"\tfprintf(fout,\"\t assumed to have more than one term\\n\");\n"); fprintf(file,"\tfprintf(fout,\"\t if Ni=0 => N is a number for any one Type\\n\");\n"); fprintf(file,"\tfprintf(fout,\"\tImproper Dihedral : N1-N2-N3-N4 Idiv Pk Phase(Deg) Pn \\n\");\n"); fprintf(file,"\tfprintf(fout,\"\tH-Bond : N1-N2 A(coef. 1/r**12) B(coef. -B/r**10)\\n\");\n"); fprintf(file,"\tfprintf(fout,\"End\\n\");\n"); } /**********************************************************************/ void printfMmCFile(AmberParameters* amberParameters) { FILE* file; file = fopen("createMMFile.fc","w"); if(!file) { printf("I can not open createMMFile.fc\n"); return; } fprintf(file,"gboolean createMMFile(gchar* filename)\n"); fprintf(file,"{\n"); fprintf(file,"\tFILE* fout = fopen(filename,\"w\");\n\n"); fprintf(file,"\tif(fout==NULL)\n"); fprintf(file,"\t{\n"); fprintf(file,"\t\treturn FALSE;\n"); fprintf(file,"\t}\n"); // fprintf(file,"\tfprintf(fout,\"Natoms = %d\\n\");\n",natoms); printfMmCFileTitle(file); printfMmCFileAtomTypes(file,amberParameters); printfMmCFileBond(file,amberParameters); printfMmCFileBend(file,amberParameters); printfMmCFileDihedralAngle(file,amberParameters); printfMmCFileimproperTorsion(file,amberParameters); printfMmCFileHydrogenBonded(file,amberParameters); printfMmCFileNonBonded(file,amberParameters); fprintf(file,"\tfclose(fout);\n"); fprintf(file,"\treturn TRUE;\n"); fprintf(file,"}\n"); fclose(file); } int main() { AmberParameters amberParameters; readAmberParameters(&amberParameters); printfMmCFile(&amberParameters); return 0; } GabeditSrc250/utils/MolecularMechanics/createMMFile.fc0000644000175100017510000013403513130664665023215 0ustar alloucheallouchegboolean createMMFile(gchar* filename) { FILE* fout = fopen(filename,"w"); if(fout==NULL) { return FALSE; } fprintf(fout,"Begin Title\n"); fprintf(fout," Atom Types : Ty(Type) Symbol Numero Masse(C12 UMA) Polarisablities(Ang**3) \n"); fprintf(fout," Bond Length : N1-N2 Force(Kcal/mol/A**2) Re\n"); fprintf(fout," Bond Angle : N1-N2-N3 Force(Kcal/mol/rad**2) Angle(Deg) \n"); fprintf(fout," Dihedral : N1-N2-N3-N4 Idiv Pk Phase(Deg) Pn \n"); fprintf(fout," E = Pk/Idiv*(1 + cos(P,*Phi - Phase)\n"); fprintf(fout," Pk = Barrier/2 Kcal/mol\n"); fprintf(fout," Idiv barrier is divised by Idiv\n"); fprintf(fout," Pn = periodicity fo the torional barrier\n"); fprintf(fout," if Pn<0 the tosional potential is \n"); fprintf(fout," assumed to have more than one term\n"); fprintf(fout," if Ni=0 => N is a number for any one Type\n"); fprintf(fout," Improper Dihedral : N1-N2-N3-N4 Idiv Pk Phase(Deg) Pn \n"); fprintf(fout," H-Bond : N1-N2 A(coef. 1/r**12) B(coef. -B/r**10)\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin INPUT FOR ATOM TYPES, MASSE AND POLARISABILITIES\n"); fprintf(fout,"C C 1 12.010 0.616 sp2 C carbonyl group \n"); fprintf(fout,"CA C 2 12.010 0.360 sp2 C pure aromatic (benzene)\n"); fprintf(fout,"CB C 3 12.010 0.360 sp2 aromatic C, 5&6 membered ring junction\n"); fprintf(fout,"CC C 4 12.010 0.360 sp2 aromatic C, 5 memb. ring HIS\n"); fprintf(fout,"CD C 5 12.010 0.360 sp2 C atom in the middle of: C=CD-CD=C\n"); fprintf(fout,"CK C 6 12.010 0.360 sp2 C 5 memb.ring in purines\n"); fprintf(fout,"CM C 7 12.010 0.360 sp2 C pyrimidines in pos. 5 & 6\n"); fprintf(fout,"CN C 8 12.010 0.360 sp2 C aromatic 5&6 memb.ring junct.(TRP)\n"); fprintf(fout,"CQ C 9 12.010 0.360 sp2 C in 5 mem.ring of purines between 2 N\n"); fprintf(fout,"CR C 10 12.010 0.360 sp2 arom as CQ but in HIS\n"); fprintf(fout,"CT C 11 12.010 0.878 sp3 aliphatic C\n"); fprintf(fout,"CV C 12 12.010 0.360 sp2 arom. 5 memb.ring w/1 N and 1 H (HIS)\n"); fprintf(fout,"CW C 13 12.010 0.360 sp2 arom. 5 memb.ring w/1 N-H and 1 H (HIS)\n"); fprintf(fout,"C* C 14 12.010 0.360 sp2 arom. 5 memb.ring w/1 subst. (TRP)\n"); fprintf(fout,"CY C 15 12.010 0.360 nitrile C (Howard et al.JCC,16,243,1995)\n"); fprintf(fout,"CZ C 16 12.010 0.360 sp C (Howard et al.JCC,16,243,1995)\n"); fprintf(fout,"C0 Ca 17 40.080 0.000 calcium\n"); fprintf(fout,"H H 18 1.008 0.161 H bonded to nitrogen atoms\n"); fprintf(fout,"HC H 19 1.008 0.135 H aliph. bond. to C without electrwd.group\n"); fprintf(fout,"H1 H 20 1.008 0.135 H aliph. bond. to C with 1 electrwd. group\n"); fprintf(fout,"H2 H 21 1.008 0.135 H aliph. bond. to C with 2 electrwd.groups\n"); fprintf(fout,"H3 H 22 1.008 0.135 H aliph. bond. to C with 3 eletrwd.groups\n"); fprintf(fout,"HA H 23 1.008 0.167 H arom. bond. to C without elctrwd. groups\n"); fprintf(fout,"H4 H 24 1.008 0.167 H arom. bond. to C with 1 electrwd. group\n"); fprintf(fout,"H5 H 25 1.008 0.167 H arom.at C with 2 elctrwd. gr,+HCOO group\n"); fprintf(fout,"HO H 26 1.008 0.135 hydroxyl group\n"); fprintf(fout,"HS H 27 1.008 0.135 hydrogen bonded to sulphur (pol?)\n"); fprintf(fout,"HW H 28 1.008 0.000 H in TIP3P water\n"); fprintf(fout,"HP H 29 1.008 0.135 H bonded to C next to positively charged gr\n"); fprintf(fout,"HZ H 30 1.008 0.161 H bond sp C (Howard et al.JCC,16,243,1995)\n"); fprintf(fout,"F F 31 19.000 0.320 fluorine\n"); fprintf(fout,"Cl Cl 32 35.450 1.910 chlorine (Applequist)\n"); fprintf(fout,"Br Br 33 79.900 2.880 bromine (Applequist)\n"); fprintf(fout,"I I 34 126.900 4.690 iodine (Applequist)\n"); fprintf(fout,"IM Cl 35 35.450 3.235 assumed to be Cl- (ion minus)\n"); fprintf(fout,"IB I 36 131.000 0.000 'big ion w/ waters' for vacuum (Na+, 6H2O)\n"); fprintf(fout,"MG Mg 37 24.305 0.120 magnesium\n"); fprintf(fout,"N N 38 14.010 0.530 sp2 nitrogen in amide groups\n"); fprintf(fout,"NA N 39 14.010 0.530 sp2 N in 5 memb.ring w/H atom (HIS)\n"); fprintf(fout,"NB N 40 14.010 0.530 sp2 N in 5 memb.ring w/LP (HIS,ADE,GUA)\n"); fprintf(fout,"NC N 41 14.010 0.530 sp2 N in 6 memb.ring w/LP (ADE,GUA)\n"); fprintf(fout,"N2 N 42 14.010 0.530 sp2 N in amino groups\n"); fprintf(fout,"N3 N 43 14.010 0.530 sp3 N for charged amino groups (Lys, etc)\n"); fprintf(fout,"NT N 44 14.010 0.530 sp3 N for amino groups amino groups \n"); fprintf(fout,"N* N 45 14.010 0.530 sp2 N \n"); fprintf(fout,"NY N 46 14.010 0.530 nitrile N (Howard et al.JCC,16,243,1995)\n"); fprintf(fout,"O O 47 16.000 0.434 carbonyl group oxygen\n"); fprintf(fout,"O2 O 48 16.000 0.434 carboxyl and phosphate group oxygen\n"); fprintf(fout,"OW O 49 16.000 0.000 oxygen in TIP3P water\n"); fprintf(fout,"OH O 50 16.000 0.465 oxygen in hydroxyl group\n"); fprintf(fout,"OS O 51 16.000 0.465 ether and ester oxygen\n"); fprintf(fout,"P P 52 30.970 1.538 phosphate,pol:JACS,112,8543,90,K.J.Miller\n"); fprintf(fout,"S S 53 32.060 2.900 S in disulfide linkage,pol:JPC,102,2399,98\n"); fprintf(fout,"SH S 54 32.060 2.900 S in cystine\n"); fprintf(fout,"CU Cu 55 63.550 0.000 copper\n"); fprintf(fout,"FE Fe 56 55.000 0.000 iron\n"); fprintf(fout,"Li Li 57 6.940 0.029 lithium, ions pol:J.PhysC,11,1541,(1978)\n"); fprintf(fout,"IP Na 58 22.990 0.250 assumed to be Na+ (ion plus)\n"); fprintf(fout,"Na Na 59 22.990 0.250 Na+, ions pol:J.PhysC,11,1541,(1978)\n"); fprintf(fout,"K K 60 39.100 1.060 potassium\n"); fprintf(fout,"Rb Rb 61 85.470 0.000 rubidium\n"); fprintf(fout,"Cs Cs 62 132.910 0.000 cesium\n"); fprintf(fout,"Zn Zn 63 65.400 0.000 Zn2+ \n"); fprintf(fout,"End\n"); fprintf(fout,"Begin INPUT FOR BOND LENGTH PARAMETERS\n"); fprintf(fout,"49 28 553.0 0.9572 TIP3P water\n"); fprintf(fout,"28 28 553.0 1.5136 TIP3P water\n"); fprintf(fout,"1 1 310.0 1.5250 Junmei et al, 1999\n"); fprintf(fout,"1 2 469.0 1.4090 JCC,7,(1986),230; (not used any more in TYR)\n"); fprintf(fout,"1 3 447.0 1.4190 JCC,7,(1986),230; GUA\n"); fprintf(fout,"1 7 410.0 1.4440 JCC,7,(1986),230; THY,URA\n"); fprintf(fout,"1 11 317.0 1.5220 JCC,7,(1986),230; AA\n"); fprintf(fout,"1 38 490.0 1.3350 JCC,7,(1986),230; AA\n"); fprintf(fout,"1 45 424.0 1.3830 JCC,7,(1986),230; CYT,URA\n"); fprintf(fout,"1 39 418.0 1.3880 JCC,7,(1986),230; GUA.URA\n"); fprintf(fout,"1 41 457.0 1.3580 JCC,7,(1986),230; CYT\n"); fprintf(fout,"1 47 570.0 1.2290 JCC,7,(1986),230; AA,CYT,GUA,THY,URA\n"); fprintf(fout,"1 48 656.0 1.2500 JCC,7,(1986),230; GLU,ASP\n"); fprintf(fout,"1 50 450.0 1.3640 JCC,7,(1986),230; (not used any more for TYR) \n"); fprintf(fout,"1 51 450.0 1.3230 Junmei et al, 1999\n"); fprintf(fout,"1 24 367.0 1.0800 Junmei et al, 1999\n"); fprintf(fout,"1 25 367.0 1.0800 Junmei et al, 1999\n"); fprintf(fout,"2 2 469.0 1.4000 JCC,7,(1986),230; BENZENE,PHE,TRP,TYR\n"); fprintf(fout,"2 3 469.0 1.4040 JCC,7,(1986),230; ADE,TRP\n"); fprintf(fout,"2 7 427.0 1.4330 JCC,7,(1986),230; CYT\n"); fprintf(fout,"2 8 469.0 1.4000 JCC,7,(1986),230; TRP\n"); fprintf(fout,"2 11 317.0 1.5100 JCC,7,(1986),230; PHE,TYR\n"); fprintf(fout,"2 23 367.0 1.0800 changed from 340. bsd on C6H6 nmodes; PHE,TRP,TYR\n"); fprintf(fout,"2 24 367.0 1.0800 changed from 340. bsd on C6H6 nmodes; no assigned\n"); fprintf(fout,"2 42 481.0 1.3400 JCC,7,(1986),230; ARG,CYT,GUA\n"); fprintf(fout,"2 39 427.0 1.3810 JCC,7,(1986),230; GUA\n"); fprintf(fout,"2 41 483.0 1.3390 JCC,7,(1986),230; ADE,CYT,GUA\n"); fprintf(fout,"2 50 450.0 1.3640 substituted for C-OH in tyr \n"); fprintf(fout,"3 3 520.0 1.3700 JCC,7,(1986),230; ADE,GUA\n"); fprintf(fout,"3 45 436.0 1.3740 JCC,7,(1986),230; ADE,GUA\n"); fprintf(fout,"3 40 414.0 1.3910 JCC,7,(1986),230; ADE,GUA\n"); fprintf(fout,"3 41 461.0 1.3540 JCC,7,(1986),230; ADE,GUA\n"); fprintf(fout,"5 23 367.0 1.0800 Junmei et al, 1999 \n"); fprintf(fout,"5 5 469.0 1.4000 Junmei et al, 1999\n"); fprintf(fout,"5 7 549.0 1.3500 Junmei et al, 1999\n"); fprintf(fout,"5 11 317.0 1.5100 Junmei et al, 1999\n"); fprintf(fout,"6 25 367.0 1.0800 changed from 340. bsd on C6H6 nmodes; ADE,GUA\n"); fprintf(fout,"6 45 440.0 1.3710 JCC,7,(1986),230; ADE,GUA\n"); fprintf(fout,"6 40 529.0 1.3040 JCC,7,(1986),230; ADE,GUA\n"); fprintf(fout,"7 7 549.0 1.3500 JCC,7,(1986),230; CYT,THY,URA\n"); fprintf(fout,"7 11 317.0 1.5100 JCC,7,(1986),230; THY\n"); fprintf(fout,"7 23 367.0 1.0800 changed from 340. bsd on C6H6 nmodes; CYT,URA\n"); fprintf(fout,"7 24 367.0 1.0800 changed from 340. bsd on C6H6 nmodes; CYT,URA\n"); fprintf(fout,"7 25 367.0 1.0800 changed from 340. bsd on C6H6 nmodes; not assigned\n"); fprintf(fout,"7 45 448.0 1.3650 JCC,7,(1986),230; CYT,THY,URA\n"); fprintf(fout,"7 51 480.0 1.2400 Junmei et al, 1999\n"); fprintf(fout,"9 25 367.0 1.0800 changed from 340. bsd on C6H6 nmodes; ADE\n"); fprintf(fout,"9 41 502.0 1.3240 JCC,7,(1986),230; ADE\n"); fprintf(fout,"11 11 310.0 1.5260 JCC,7,(1986),230; AA, SUGARS\n"); fprintf(fout,"11 19 340.0 1.0900 changed from 331 bsd on NMA nmodes; AA, SUGARS\n"); fprintf(fout,"11 20 340.0 1.0900 changed from 331 bsd on NMA nmodes; AA, RIBOSE\n"); fprintf(fout,"11 21 340.0 1.0900 changed from 331 bsd on NMA nmodes; SUGARS\n"); fprintf(fout,"11 22 340.0 1.0900 changed from 331 bsd on NMA nmodes; not assigned\n"); fprintf(fout,"11 29 340.0 1.0900 changed from 331; AA-lysine, methyl ammonium cation\n"); fprintf(fout,"11 45 337.0 1.4750 JCC,7,(1986),230; ADE,CYT,GUA,THY,URA\n"); fprintf(fout,"11 42 337.0 1.4630 JCC,7,(1986),230; ARG\n"); fprintf(fout,"11 50 320.0 1.4100 JCC,7,(1986),230; SUGARS\n"); fprintf(fout,"11 51 320.0 1.4100 JCC,7,(1986),230; NUCLEIC ACIDS\n"); fprintf(fout,"14 19 367.0 1.0800 changed from 340. bsd on C6H6 nmodes, not needed AA\n"); fprintf(fout,"14 3 388.0 1.4590 JCC,7,(1986),230; TRP\n"); fprintf(fout,"14 11 317.0 1.4950 JCC,7,(1986),230; TRP\n"); fprintf(fout,"14 13 546.0 1.3520 JCC,7,(1986),230; TRP\n"); fprintf(fout,"3 8 447.0 1.4190 JCC,7,(1986),230; TRP\n"); fprintf(fout,"4 11 317.0 1.5040 JCC,7,(1986),230; HIS\n"); fprintf(fout,"4 12 512.0 1.3750 JCC,7,(1986),230; HIS(delta)\n"); fprintf(fout,"4 13 518.0 1.3710 JCC,7,(1986),230; HIS(epsilon)\n"); fprintf(fout,"4 39 422.0 1.3850 JCC,7,(1986),230; HIS\n"); fprintf(fout,"4 40 410.0 1.3940 JCC,7,(1986),230; HIS\n"); fprintf(fout,"8 39 428.0 1.3800 JCC,7,(1986),230; TRP\n"); fprintf(fout,"10 25 367.0 1.0800 changed from 340. bsd on C6H6 nmodes;HIS\n"); fprintf(fout,"10 39 477.0 1.3430 JCC,7,(1986),230; HIS\n"); fprintf(fout,"10 40 488.0 1.3350 JCC,7,(1986),230; HIS\n"); fprintf(fout,"11 38 337.0 1.4490 JCC,7,(1986),230; AA\n"); fprintf(fout,"11 43 367.0 1.4710 JCC,7,(1986),230; LYS\n"); fprintf(fout,"11 44 367.0 1.4710 for neutral amines \n"); fprintf(fout,"11 53 227.0 1.8100 changed from 222.0 based on dimethylS nmodes\n"); fprintf(fout,"11 54 237.0 1.8100 changed from 222.0 based on methanethiol nmodes\n"); fprintf(fout,"11 15 400.0 1.4580 Howard et al JCC.16,243,1995\n"); fprintf(fout,"11 16 400.0 1.4590 Howard et al JCC,16,243,1995\n"); fprintf(fout,"12 24 367.0 1.0800 changed from 340. bsd on C6H6 nmodes; HIS\n"); fprintf(fout,"12 40 410.0 1.3940 JCC,7,(1986),230; HIS\n"); fprintf(fout,"13 24 367.0 1.0800 changed from 340. bsd on C6H6 nmodes;HIS(epsilon,+)\n"); fprintf(fout,"13 39 427.0 1.3810 JCC,7,(1986),230; HIS,TRP\n"); fprintf(fout,"15 46 600.0 1.1500 Howard et al JCC,16,243,1995\n"); fprintf(fout,"16 16 600.0 1.2060 Howard et al JCC,16,243,1995\n"); fprintf(fout,"16 30 400.0 1.0560 Howard et al JCC,16,243,1995\n"); fprintf(fout,"48 52 525.0 1.4800 JCC,7,(1986),230; NA PHOSPHATES\n"); fprintf(fout,"50 52 230.0 1.6100 JCC,7,(1986),230; NA PHOSPHATES\n"); fprintf(fout,"51 52 230.0 1.6100 JCC,7,(1986),230; NA PHOSPHATES\n"); fprintf(fout,"18 42 434.0 1.0100 JCC,7,(1986),230; ADE,CYT,GUA,ARG\n"); fprintf(fout,"18 45 434.0 1.0100 for plain unmethylated bases ADE,CYT,GUA,ARG\n"); fprintf(fout,"18 39 434.0 1.0100 JCC,7,(1986),230; GUA,URA,HIS\n"); fprintf(fout,"18 38 434.0 1.0100 JCC,7,(1986),230; AA\n"); fprintf(fout,"18 43 434.0 1.0100 JCC,7,(1986),230; LYS \n"); fprintf(fout,"18 44 434.0 1.0100 for neutral amines \n"); fprintf(fout,"26 50 553.0 0.9600 JCC,7,(1986),230; SUGARS,SER,TYR\n"); fprintf(fout,"26 51 553.0 0.9600 JCC,7,(1986),230; NUCLEOTIDE ENDS\n"); fprintf(fout,"27 54 274.0 1.3360 JCC,7,(1986),230; CYS\n"); fprintf(fout,"53 53 166.0 2.0380 JCC,7,(1986),230; CYX (SCHERAGA)\n"); fprintf(fout,"31 11 367.0 1.3800 JCC,13,(1992),963;CF4; R0=1.332 FOR CHF3\n"); fprintf(fout,"32 11 232.0 1.7660 6-31g* opt\n"); fprintf(fout,"33 11 159.0 1.9440 Junmei et al,99 \n"); fprintf(fout,"34 11 148.0 2.1660 Junmei et al,99 \n"); fprintf(fout,"31 2 386.0 1.3590 Junmei et al,99 \n"); fprintf(fout,"32 2 193.0 1.7270 Junmei et al,99 \n"); fprintf(fout,"34 2 171.0 2.0750 Junmei et al,99 \n"); fprintf(fout,"33 2 172.0 1.8900 Junmei et al,99\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin INPUT FOR BOND ANGLE PARAMETERS\n"); fprintf(fout,"28 49 28 100.000 104.52 TIP3P water\n"); fprintf(fout,"28 28 49 0.000 127.74 (found in crystallographic water with 3 bonds)\n"); fprintf(fout,"1 1 47 80.000 120.00 Junmei et al, 1999 acrolein\n"); fprintf(fout,"1 1 50 80.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"2 1 2 63.000 120.00 changed from 85.0 bsd on C6H6 nmodes; AA\n"); fprintf(fout,"2 1 50 70.000 120.00 AA (not used in tyr)\n"); fprintf(fout,"3 1 39 70.000 111.30 NA\n"); fprintf(fout,"3 1 47 80.000 128.80 \n"); fprintf(fout,"7 1 39 70.000 114.10 \n"); fprintf(fout,"7 1 47 80.000 125.30 \n"); fprintf(fout,"11 1 47 80.000 120.40 \n"); fprintf(fout,"11 1 48 70.000 117.00 \n"); fprintf(fout,"11 1 38 70.000 116.60 AA general\n"); fprintf(fout,"11 1 11 63.000 117.00 Junmei et al, 1999\n"); fprintf(fout,"11 1 51 80.000 115.00 Junmei et al, 1999\n"); fprintf(fout,"11 1 50 80.000 110.00 Junmei et al, 1999\n"); fprintf(fout,"45 1 39 70.000 115.40 \n"); fprintf(fout,"45 1 41 70.000 118.60 \n"); fprintf(fout,"45 1 47 80.000 120.90 \n"); fprintf(fout,"39 1 47 80.000 120.60 \n"); fprintf(fout,"41 1 47 80.000 122.50 \n"); fprintf(fout,"38 1 47 80.000 122.90 AA general\n"); fprintf(fout,"47 1 47 80.000 126.00 AA COO- terminal residues\n"); fprintf(fout,"47 1 50 80.000 120.00 (check with Junmei for: theta0:120.0?)\n"); fprintf(fout,"47 1 51 80.000 125.00 Junmei et al, 1999\n"); fprintf(fout,"48 1 48 80.000 126.00 AA GLU (SCH JPC 79,2379)\n"); fprintf(fout,"24 1 1 50.000 120.00 Junmei et al, 1999 \n"); fprintf(fout,"24 1 7 50.000 115.00 Junmei et al, 1999 \n"); fprintf(fout,"24 1 11 50.000 115.00 Junmei et al, 1999\n"); fprintf(fout,"24 1 47 50.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"24 1 50 50.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"25 1 38 50.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"25 1 47 50.000 119.00 Junmei et al, 1999\n"); fprintf(fout,"25 1 50 50.000 107.00 Junmei et al, 1999\n"); fprintf(fout,"25 1 51 50.000 107.00 Junmei et al, 1999\n"); fprintf(fout,"1 2 2 63.000 120.00 changed from 85.0 bsd on C6H6 nmodes\n"); fprintf(fout,"1 2 23 50.000 120.00 AA (not used in tyr)\n"); fprintf(fout,"2 2 2 63.000 120.00 changed from 85.0 bsd on C6H6 nmodes\n"); fprintf(fout,"2 2 3 63.000 120.00 changed from 85.0 bsd on C6H6 nmodes\n"); fprintf(fout,"2 2 11 70.000 120.00 \n"); fprintf(fout,"2 2 23 50.000 120.00 \n"); fprintf(fout,"2 2 24 50.000 120.00 \n"); fprintf(fout,"2 2 50 70.000 120.00 replacement in tyr\n"); fprintf(fout,"2 2 8 63.000 120.00 changed from 85.0 bsd on C6H6 nmodes; AA trp\n"); fprintf(fout,"3 2 23 50.000 120.00 \n"); fprintf(fout,"3 2 24 50.000 120.00 \n"); fprintf(fout,"3 2 42 70.000 123.50 \n"); fprintf(fout,"3 2 41 70.000 117.30 \n"); fprintf(fout,"7 2 42 70.000 120.10 \n"); fprintf(fout,"7 2 41 70.000 121.50 \n"); fprintf(fout,"8 2 23 50.000 120.00 AA trp\n"); fprintf(fout,"39 2 41 70.000 123.30 \n"); fprintf(fout,"42 2 39 70.000 116.00 \n"); fprintf(fout,"42 2 41 70.000 119.30 \n"); fprintf(fout,"42 2 42 70.000 120.00 AA arg\n"); fprintf(fout,"31 2 2 70.000 121.00 Junmei et al,99 \n"); fprintf(fout,"32 2 2 70.000 118.80 Junmei et al,99 \n"); fprintf(fout,"33 2 2 70.000 118.80 Junmei et al,99\n"); fprintf(fout,"34 2 2 70.000 118.80 Junmei et al,99 \n"); fprintf(fout,"1 3 3 63.000 119.20 changed from 85.0 bsd on C6H6 nmodes; NA gua\n"); fprintf(fout,"1 3 40 70.000 130.00 \n"); fprintf(fout,"2 3 3 63.000 117.30 changed from 85.0 bsd on C6H6 nmodes; NA ade\n"); fprintf(fout,"2 3 40 70.000 132.40 \n"); fprintf(fout,"3 3 45 70.000 106.20 \n"); fprintf(fout,"3 3 40 70.000 110.40 \n"); fprintf(fout,"3 3 41 70.000 127.70 \n"); fprintf(fout,"14 3 2 63.000 134.90 changed from 85.0 bsd on C6H6 nmodes; AA trp\n"); fprintf(fout,"14 3 8 63.000 108.80 changed from 85.0 bsd on C6H6 nmodes; AA trp\n"); fprintf(fout,"2 3 8 63.000 116.20 changed from 85.0 bsd on C6H6 nmodes; AA trp\n"); fprintf(fout,"45 3 41 70.000 126.20 \n"); fprintf(fout,"5 5 7 63.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"5 5 11 70.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"7 5 11 70.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"23 5 23 35.000 119.00 Junmei et al, 1999\n"); fprintf(fout,"23 5 5 50.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"23 5 7 50.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"25 6 45 50.000 123.05 \n"); fprintf(fout,"25 6 40 50.000 123.05 \n"); fprintf(fout,"45 6 40 70.000 113.90 \n"); fprintf(fout,"1 7 7 63.000 120.70 changed from 85.0 bsd on C6H6 nmodes; NA thy\n"); fprintf(fout,"1 7 11 70.000 119.70 \n"); fprintf(fout,"1 7 23 50.000 119.70 \n"); fprintf(fout,"1 7 24 50.000 119.70 \n"); fprintf(fout,"2 7 7 63.000 117.00 changed from 85.0 bsd on C6H6 nmodes; NA cyt\n"); fprintf(fout,"2 7 23 50.000 123.30 \n"); fprintf(fout,"2 7 24 50.000 123.30 \n"); fprintf(fout,"7 7 11 70.000 119.70 \n"); fprintf(fout,"7 7 23 50.000 119.70 \n"); fprintf(fout,"7 7 24 50.000 119.70 \n"); fprintf(fout,"7 7 45 70.000 121.20 \n"); fprintf(fout,"7 7 51 80.000 125.00 Junmei et al, 1999\n"); fprintf(fout,"24 7 45 50.000 119.10 \n"); fprintf(fout,"24 7 51 50.000 113.00 Junmei et al, 1999\n"); fprintf(fout,"23 7 23 35.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"23 7 5 50.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"23 7 11 50.000 120.00 Junmei et al, 1999\n"); fprintf(fout,"41 9 41 70.000 129.10 \n"); fprintf(fout,"25 9 41 50.000 115.45 \n"); fprintf(fout,"20 11 20 35.000 109.50 \n"); fprintf(fout,"20 11 45 50.000 109.50 changed based on NMA nmodes\n"); fprintf(fout,"20 11 50 50.000 109.50 changed based on NMA nmodes \n"); fprintf(fout,"20 11 51 50.000 109.50 changed based on NMA nmodes \n"); fprintf(fout,"20 11 7 50.000 109.50 Junmei et al, 1999 \n"); fprintf(fout,"20 11 15 50.000 110.00 Junmei et al, 1999\n"); fprintf(fout,"20 11 16 50.000 110.00 Junmei et al, 1999\n"); fprintf(fout,"20 11 38 50.000 109.50 AA general changed based on NMA nmodes\n"); fprintf(fout,"20 11 53 50.000 109.50 AA cys changed based on NMA nmodes\n"); fprintf(fout,"20 11 54 50.000 109.50 AA cyx changed based on NMA nmodes\n"); fprintf(fout,"20 11 42 50.000 109.50 AA arg changed based on NMA nmodes\n"); fprintf(fout,"20 11 44 50.000 109.50 neutral amines \n"); fprintf(fout,"21 11 21 35.000 109.50 AA lys\n"); fprintf(fout,"21 11 45 50.000 109.50 changed based on NMA nmodes\n"); fprintf(fout,"21 11 51 50.000 109.50 changed based on NMA nmodes\n"); fprintf(fout,"29 11 29 35.000 109.50 AA lys, ch3nh4+\n"); fprintf(fout,"29 11 43 50.000 109.50 AA lys, ch3nh3+, changed based on NMA nmodes\n"); fprintf(fout,"19 11 19 35.000 109.50 \n"); fprintf(fout,"19 11 7 50.000 109.50 changed based on NMA nmodes\n"); fprintf(fout,"19 11 5 50.000 109.50 Junmei et al, 1999\n"); fprintf(fout,"19 11 16 50.000 110.00 Junmei et al, 1999\n"); fprintf(fout,"1 11 20 50.000 109.50 AA general changed based on NMA nmodes\n"); fprintf(fout,"1 11 29 50.000 109.50 AA zwitterion changed based on NMA nmodes\n"); fprintf(fout,"1 11 19 50.000 109.50 AA gln changed based on NMA nmodes\n"); fprintf(fout,"1 11 38 63.000 110.10 AA general\n"); fprintf(fout,"1 11 43 80.000 111.20 AA amino terminal residues\n"); fprintf(fout,"1 11 11 63.000 111.10 AA general\n"); fprintf(fout,"1 11 51 60.000 109.50 Junmei et al, 1999\n"); fprintf(fout,"2 11 19 50.000 109.50 AA tyr changed based on NMA nmodes\n"); fprintf(fout,"4 11 11 63.000 113.10 AA his\n"); fprintf(fout,"4 11 19 50.000 109.50 AA his changed based on NMA nmodes\n"); fprintf(fout,"7 11 11 63.000 111.00 Junmei et al, 1999 (last change: Mar24,99)\n"); fprintf(fout,"7 11 51 50.000 109.50 Junmei et al, 1999\n"); fprintf(fout,"11 11 11 40.000 109.50 \n"); fprintf(fout,"11 11 19 50.000 109.50 changed based on NMA nmodes\n"); fprintf(fout,"11 11 20 50.000 109.50 changed based on NMA nmodes\n"); fprintf(fout,"11 11 21 50.000 109.50 changed based on NMA nmodes\n"); fprintf(fout,"11 11 29 50.000 109.50 changed based on NMA nmodes\n"); fprintf(fout,"11 11 45 50.000 109.50 \n"); fprintf(fout,"11 11 50 50.000 109.50 \n"); fprintf(fout,"11 11 51 50.000 109.50 \n"); fprintf(fout,"11 11 53 50.000 114.70 AA cyx (SCHERAGA JPC 79,1428)\n"); fprintf(fout,"11 11 54 50.000 108.60 AA cys\n"); fprintf(fout,"11 11 2 63.000 114.00 AA phe tyr (SCH JPC 79,2379)\n"); fprintf(fout,"11 11 42 80.000 111.20 AA arg (JCP 76, 1439)\n"); fprintf(fout,"11 11 38 80.000 109.70 AA ala, general (JACS 94, 2657)\n"); fprintf(fout,"11 11 43 80.000 111.20 AA lys (JCP 76, 1439)\n"); fprintf(fout,"11 11 44 80.000 111.20 neutral amines \n"); fprintf(fout,"11 11 15 63.000 110.00 Junmei et al, 1999 \n"); fprintf(fout,"11 11 16 63.000 110.00 Junmei et al, 1999\n"); fprintf(fout,"14 11 11 63.000 115.60 AA trp\n"); fprintf(fout,"14 11 19 50.000 109.50 AA trp changed based on NMA nmodes\n"); fprintf(fout,"51 11 51 160.000 101.00 Junmei et al, 1999\n"); fprintf(fout,"51 11 15 50.000 110.00 Junmei et al, 1999\n"); fprintf(fout,"51 11 16 50.000 110.00 Junmei et al, 1999\n"); fprintf(fout,"51 11 16 50.000 110.00 Junmei et al, 1999\n"); fprintf(fout,"51 11 15 50.000 110.00 Junmei et al, 1999\n"); fprintf(fout,"51 11 45 50.000 109.50 \n"); fprintf(fout,"31 11 31 77.000 109.10 JCC,13,(1992),963;\n"); fprintf(fout,"31 11 20 50.000 109.50 JCC,13,(1992),963;\n"); fprintf(fout,"31 11 11 50.000 109.00 \n"); fprintf(fout,"31 11 21 50.000 109.50 \n"); fprintf(fout,"32 11 11 50.000 108.50 (6-31g* opt value)\n"); fprintf(fout,"32 11 20 50.000 108.50 (6-31g* opt value) \n"); fprintf(fout,"33 11 11 50.000 108.00 Junmei et al 99 \n"); fprintf(fout,"33 11 20 50.000 106.50 Junmei et al 99 \n"); fprintf(fout,"34 11 11 50.000 106.00 Junmei et al,99 \n"); fprintf(fout,"11 4 39 70.000 120.00 AA his\n"); fprintf(fout,"11 4 12 70.000 120.00 AA his\n"); fprintf(fout,"11 4 40 70.000 120.00 AA his\n"); fprintf(fout,"12 4 39 70.000 120.00 AA his\n"); fprintf(fout,"13 4 39 70.000 120.00 AA his\n"); fprintf(fout,"13 4 40 70.000 120.00 AA his\n"); fprintf(fout,"11 4 13 70.000 120.00 AA his\n"); fprintf(fout,"25 10 39 50.000 120.00 AA his\n"); fprintf(fout,"25 10 40 50.000 120.00 AA his\n"); fprintf(fout,"39 10 39 70.000 120.00 AA his\n"); fprintf(fout,"39 10 40 70.000 120.00 AA his\n"); fprintf(fout,"4 12 24 50.000 120.00 AA his\n"); fprintf(fout,"4 12 40 70.000 120.00 AA his\n"); fprintf(fout,"24 12 40 50.000 120.00 AA his\n"); fprintf(fout,"4 13 24 50.000 120.00 AA his\n"); fprintf(fout,"4 13 39 70.000 120.00 AA his\n"); fprintf(fout,"14 13 24 50.000 120.00 AA trp\n"); fprintf(fout,"14 13 39 70.000 108.70 AA trp\n"); fprintf(fout,"24 13 39 50.000 120.00 AA his\n"); fprintf(fout,"3 14 11 70.000 128.60 AA trp\n"); fprintf(fout,"3 14 13 63.000 106.40 changed from 85.0 bsd on C6H6 nmodes; AA trp\n"); fprintf(fout,"11 14 13 70.000 125.00 AA trp\n"); fprintf(fout,"2 8 3 63.000 122.70 changed from 85.0 bsd on C6H6 nmodes; AA trp\n"); fprintf(fout,"2 8 39 70.000 132.80 AA trp\n"); fprintf(fout,"3 8 39 70.000 104.40 AA trp\n"); fprintf(fout,"11 15 46 80.000 180.00 Junmei et al, 1999\n"); fprintf(fout,"11 16 16 80.000 180.00 Junmei et al, 1999\n"); fprintf(fout,"16 16 30 50.000 180.00 Junmei et al, 1999\n"); fprintf(fout,"1 38 11 50.000 121.90 AA general\n"); fprintf(fout,"1 38 18 50.000 120.00 AA general, gln, asn,changed based on NMA nmodes\n"); fprintf(fout,"11 38 18 50.000 118.04 AA general, changed based on NMA nmodes\n"); fprintf(fout,"11 38 11 50.000 118.00 AA pro (DETAR JACS 99,1232)\n"); fprintf(fout,"18 38 18 35.000 120.00 ade,cyt,gua,gln,asn **\n"); fprintf(fout,"1 45 7 70.000 121.60 \n"); fprintf(fout,"1 45 11 70.000 117.60 \n"); fprintf(fout,"1 45 18 50.000 119.20 changed based on NMA nmodes\n"); fprintf(fout,"3 45 6 70.000 105.40 \n"); fprintf(fout,"3 45 11 70.000 125.80 \n"); fprintf(fout,"3 45 18 50.000 125.80 for unmethylated n.a. bases,chngd bsd NMA nmodes\n"); fprintf(fout,"6 45 11 70.000 128.80 \n"); fprintf(fout,"6 45 18 50.000 128.80 for unmethylated n.a. bases,chngd bsd NMA nmodes\n"); fprintf(fout,"7 45 11 70.000 121.20 \n"); fprintf(fout,"7 45 18 50.000 121.20 for unmethylated n.a. bases,chngd bsd NMA nmodes\n"); fprintf(fout,"2 42 18 50.000 120.00 \n"); fprintf(fout,"2 42 11 50.000 123.20 AA arg\n"); fprintf(fout,"11 42 18 50.000 118.40 AA arg\n"); fprintf(fout,"18 42 18 35.000 120.00 \n"); fprintf(fout,"11 43 18 50.000 109.50 AA lys, changed based on NMA nmodes\n"); fprintf(fout,"11 43 11 50.000 109.50 AA pro/nt\n"); fprintf(fout,"18 43 18 35.000 109.50 AA lys, AA(end)\n"); fprintf(fout,"11 44 18 50.000 109.50 neutral amines \n"); fprintf(fout,"11 44 11 50.000 109.50 neutral amines \n"); fprintf(fout,"18 44 18 35.000 109.50 neutral amines \n"); fprintf(fout,"1 39 1 70.000 126.40 \n"); fprintf(fout,"1 39 2 70.000 125.20 \n"); fprintf(fout,"1 39 18 50.000 116.80 changed based on NMA nmodes\n"); fprintf(fout,"2 39 18 50.000 118.00 changed based on NMA nmodes\n"); fprintf(fout,"4 39 10 70.000 120.00 AA his\n"); fprintf(fout,"4 39 18 50.000 120.00 AA his, changed based on NMA nmodes\n"); fprintf(fout,"10 39 13 70.000 120.00 AA his\n"); fprintf(fout,"10 39 18 50.000 120.00 AA his, changed based on NMA nmodes\n"); fprintf(fout,"13 39 18 50.000 120.00 AA his, changed based on NMA nmodes\n"); fprintf(fout,"8 39 13 70.000 111.60 AA trp\n"); fprintf(fout,"8 39 18 50.000 123.10 AA trp, changed based on NMA nmodes\n"); fprintf(fout,"3 40 6 70.000 103.80 \n"); fprintf(fout,"4 40 10 70.000 117.00 AA his\n"); fprintf(fout,"10 40 12 70.000 117.00 AA his\n"); fprintf(fout,"1 41 2 70.000 120.50 \n"); fprintf(fout,"2 41 3 70.000 112.20 \n"); fprintf(fout,"2 41 9 70.000 118.60 \n"); fprintf(fout,"3 41 9 70.000 111.00 \n"); fprintf(fout,"1 50 26 50.000 113.00 (not used in tyr anymore)\n"); fprintf(fout,"2 50 26 50.000 113.00 replacement in tyr\n"); fprintf(fout,"11 50 26 55.000 108.50 \n"); fprintf(fout,"26 50 52 45.000 108.50 \n"); fprintf(fout,"1 51 11 60.000 117.00 Junmei et al, 1999\n"); fprintf(fout,"7 51 11 60.000 117.00 Junmei et al, 1999\n"); fprintf(fout,"11 51 11 60.000 109.50 \n"); fprintf(fout,"11 51 52 100.000 120.50 \n"); fprintf(fout,"52 51 52 100.000 120.50 \n"); fprintf(fout,"48 52 50 45.000 108.23 \n"); fprintf(fout,"48 52 48 140.000 119.90 \n"); fprintf(fout,"48 52 51 100.000 108.23 \n"); fprintf(fout,"50 52 51 45.000 102.60 \n"); fprintf(fout,"51 52 51 45.000 102.60 \n"); fprintf(fout,"11 53 11 62.000 98.90 AA met\n"); fprintf(fout,"11 53 53 68.000 103.70 AA cyx (SCHERAGA JPC 79,1428)\n"); fprintf(fout,"11 54 27 43.000 96.00 changed from 44.0 based on methanethiol nmodes\n"); fprintf(fout,"27 54 27 35.000 92.07 AA cys\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin INPUT FOR DIHEDRAL PARAMETERS\n"); fprintf(fout,"0 1 1 0 4.0 14.500 180.00 2.0 Junmei et al, 1999\n"); fprintf(fout,"0 1 2 0 4.0 14.500 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 1 3 0 4.0 12.000 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 1 7 0 4.0 8.700 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 1 11 0 6.0 0.000 0.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 1 38 0 4.0 10.000 180.00 2.0 AA,NMA\n"); fprintf(fout,"0 1 45 0 4.0 5.800 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 1 39 0 4.0 5.400 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 1 41 0 2.0 8.000 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 1 47 0 4.0 11.200 180.00 2.0 Junmei et al, 1999\n"); fprintf(fout,"0 1 50 0 2.0 4.600 180.00 2.0 Junmei et al, 1999\n"); fprintf(fout,"0 1 51 0 2.0 5.400 180.00 2.0 Junmei et al, 1999\n"); fprintf(fout,"0 2 2 0 4.0 14.500 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 2 3 0 4.0 14.000 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 2 7 0 4.0 10.200 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 2 8 0 4.0 14.500 180.00 2.0 reinterpolated 93'\n"); fprintf(fout,"0 2 11 0 6.0 0.000 0.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 2 42 0 4.0 9.600 180.00 2.0 reinterpolated 93'\n"); fprintf(fout,"0 2 39 0 4.0 6.000 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 2 41 0 2.0 9.600 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 2 50 0 2.0 1.800 180.00 2.0 Junmei et al, 99\n"); fprintf(fout,"0 3 3 0 4.0 21.800 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 3 8 0 4.0 12.000 180.00 2.0 reinterpolated 93'\n"); fprintf(fout,"0 3 45 0 4.0 6.600 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 3 40 0 2.0 5.100 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 3 41 0 2.0 8.300 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 4 11 0 6.0 0.000 0.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 4 12 0 4.0 20.600 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 4 13 0 4.0 21.500 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 4 39 0 4.0 5.600 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 4 40 0 2.0 4.800 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 5 5 0 4.0 4.000 180.00 2.0 Junmei et al, 1999\n"); fprintf(fout,"0 5 11 0 6.0 0.000 0.00 2.0 Junmei et al, 1999\n"); fprintf(fout,"0 5 7 0 4.0 26.600 180.00 2.0 Junmei et al, 1999\n"); fprintf(fout,"0 6 45 0 4.0 6.800 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 6 40 0 2.0 20.000 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 7 7 0 4.0 26.600 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 7 11 0 6.0 0.000 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"0 7 45 0 4.0 7.400 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 7 51 0 2.0 2.100 180.00 2.0 Junmei et al, 1999\n"); fprintf(fout,"0 8 39 0 4.0 6.100 180.00 2.0 reinterpolated 93'\n"); fprintf(fout,"0 9 41 0 2.0 13.600 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 11 0 9.0 1.400 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 15 0 3.0 0.000 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"0 11 16 0 3.0 0.000 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"0 11 38 0 6.0 0.000 0.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 45 0 6.0 0.000 0.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 42 0 6.0 0.000 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 44 0 6.0 1.800 0.00 3.0 Junmei et al, 1999\n"); fprintf(fout,"0 11 43 0 9.0 1.400 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 50 0 3.0 0.500 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 51 0 3.0 1.150 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 53 0 3.0 1.000 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 54 0 3.0 0.750 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"0 14 3 0 4.0 6.700 180.00 2.0 intrpol.bsd.onC6H6aa\n"); fprintf(fout,"0 14 11 0 6.0 0.000 0.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 14 13 0 4.0 26.100 180.00 2.0 intrpol.bsd.on C6H6\n"); fprintf(fout,"0 10 39 0 4.0 9.300 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 10 40 0 2.0 10.000 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 12 40 0 2.0 4.800 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 13 39 0 4.0 6.000 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 50 52 0 3.0 0.750 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"0 51 52 0 3.0 0.750 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"38 11 1 38 1.0 1.700 180.00 -1.0 \n"); fprintf(fout,"38 11 1 38 1.0 2.000 180.00 2.0 \n"); fprintf(fout,"1 38 11 1 1.0 0.850 180.00 -2.0 \n"); fprintf(fout,"1 38 11 1 1.0 0.800 0.00 1.0 \n"); fprintf(fout,"11 11 38 1 1.0 0.500 180.00 -4.0 phi,psi,parm94\n"); fprintf(fout,"11 11 38 1 1.0 0.150 180.00 -3.0 phi,psi,parm94\n"); fprintf(fout,"11 11 38 1 1.0 0.530 0.00 1.0 phi,psi,parm94\n"); fprintf(fout,"11 11 1 38 1.0 0.100 0.00 -4.0 phi,psi,parm94\n"); fprintf(fout,"11 11 1 38 1.0 0.070 0.00 2.0 phi,psi,parm94\n"); fprintf(fout,"18 38 1 47 1.0 2.500 180.00 -2.0 JCC,7,(1986),230\n"); fprintf(fout,"18 38 1 47 1.0 2.000 0.00 1.0 JCC,7,(1986),230\n"); fprintf(fout,"11 53 53 11 1.0 3.500 0.00 -2.0 JCC,7,(1986),230\n"); fprintf(fout,"11 53 53 11 1.0 0.600 0.00 3.0 JCC,7,(1986),230\n"); fprintf(fout,"50 52 51 11 1.0 0.250 0.00 -3.0 JCC,7,(1986),230\n"); fprintf(fout,"50 52 51 11 1.0 1.200 0.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"51 52 51 11 1.0 0.250 0.00 -3.0 JCC,7,(1986),230\n"); fprintf(fout,"51 52 51 11 1.0 1.200 0.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"20 11 1 47 1.0 0.800 0.00 -1.0 Junmei et al, 1999\n"); fprintf(fout,"20 11 1 47 1.0 0.080 180.00 3.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 1 47 1.0 0.800 0.00 -1.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 1 47 1.0 0.080 180.00 3.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 11 19 1.0 0.150 0.00 3.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 11 11 1.0 0.160 0.00 3.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 7 7 1.0 0.380 180.00 -3.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 7 7 1.0 1.150 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"26 50 11 11 1.0 0.160 0.00 -3.0 Junmei et al, 1999\n"); fprintf(fout,"26 50 11 11 1.0 0.250 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"26 50 1 47 1.0 2.300 180.00 -2.0 Junmei et al, 1999\n"); fprintf(fout,"26 50 1 47 1.0 1.900 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"7 7 1 47 1.0 2.175 180.00 -2.0 Junmei et al, 1999\n"); fprintf(fout,"7 7 1 47 1.0 0.300 0.00 3.0 Junmei et al, 1999\n"); fprintf(fout,"11 7 7 11 1.0 6.650 180.00 -2.0 Junmei et al, 1999\n"); fprintf(fout,"11 7 7 11 1.0 1.900 180.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"11 11 11 11 1.0 0.180 0.00 -3.0 Junmei et al, 1999\n"); fprintf(fout,"11 11 11 11 1.0 0.250 180.00 -2.0 Junmei et al, 1999\n"); fprintf(fout,"11 11 11 11 1.0 0.200 180.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"11 11 44 11 1.0 0.300 0.00 -3.0 Junmei et al, 1999\n"); fprintf(fout,"11 11 44 11 1.0 0.480 180.00 2.0 Junmei et al, 1999\n"); fprintf(fout,"11 11 51 11 1.0 0.383 0.00 -3.0 \n"); fprintf(fout,"11 11 51 11 1.0 0.100 180.00 2.0 \n"); fprintf(fout,"11 11 51 1 1.0 0.383 0.00 -3.0 Junmei et al, 1999\n"); fprintf(fout,"11 11 51 1 1.0 0.800 180.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"11 51 11 51 1.0 0.100 0.00 -3.0 Junmei et al, 1999\n"); fprintf(fout,"11 51 11 51 1.0 0.850 180.00 -2.0 Junmei et al, 1999\n"); fprintf(fout,"11 51 11 51 1.0 1.350 180.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"11 51 11 45 1.0 0.383 0.00 -3.0 parm98.dat, TC,PC,PAK\n"); fprintf(fout,"11 51 11 45 1.0 0.650 0.00 2.0 parm98.dat, TC,PC,PAK\n"); fprintf(fout,"11 16 16 30 1.0 0.000 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"47 1 51 11 1.0 2.700 180.00 -2.0 Junmei et al, 1999\n"); fprintf(fout,"47 1 51 11 1.0 1.400 180.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"51 11 45 6 1.0 0.000 0.00 -2.0 parm98, TC,PC,PAK\n"); fprintf(fout,"51 11 45 6 1.0 2.500 0.00 1.0 parm98, TC,PC,PAK\n"); fprintf(fout,"51 11 45 7 1.0 0.000 0.00 -2.0 parm98, TC,PC,PAK\n"); fprintf(fout,"51 11 45 7 1.0 2.500 0.00 1.0 parm98, TC,PC,PAK\n"); fprintf(fout,"51 11 11 51 1.0 0.144 0.00 -3.0 parm98, TC,PC,PAK\n"); fprintf(fout,"51 11 11 51 1.0 1.175 0.00 2.0 parm98, TC,PC,PAK\n"); fprintf(fout,"51 11 11 50 1.0 0.144 0.00 -3.0 parm98, TC,PC,PAK\n"); fprintf(fout,"51 11 11 50 1.0 1.175 0.00 2.0 parm98, TC,PC,PAK\n"); fprintf(fout,"50 11 11 50 1.0 0.144 0.00 -3.0 parm98, TC,PC,PAK\n"); fprintf(fout,"50 11 11 50 1.0 1.175 0.00 2.0 parm98, TC,PC,PAK\n"); fprintf(fout,"31 11 11 31 1.0 1.200 180.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"32 11 11 32 1.0 0.450 180.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"33 11 11 33 1.0 0.000 180.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"20 11 11 51 1.0 0.250 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"20 11 11 50 1.0 0.250 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"20 11 11 31 1.0 0.190 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"20 11 11 32 1.0 0.250 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"20 11 11 33 1.0 0.550 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 11 51 1.0 0.250 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 11 50 1.0 0.250 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 11 31 1.0 0.190 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 11 32 1.0 0.250 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"19 11 11 33 1.0 0.550 0.00 1.0 Junmei et al, 1999\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin INPUT FOR IMPROPER DIHEDRAL PARAMETERS\n"); fprintf(fout,"0 0 1 47 10.500 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 48 1 48 10.500 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 0 38 18 1.000 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 0 42 18 1.000 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 0 39 18 1.000 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 42 2 42 10.500 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 11 38 11 1.000 180.00 2.0 JCC,7,(1986),230\n"); fprintf(fout,"0 0 2 23 1.100 180.00 2.0 bsd.on C6H6 nmodes\n"); fprintf(fout,"0 0 13 24 1.100 180.00 2.0 \n"); fprintf(fout,"0 0 10 25 1.100 180.00 2.0 \n"); fprintf(fout,"0 0 12 24 1.100 180.00 2.0 \n"); fprintf(fout,"0 0 9 25 1.100 180.00 2.0 \n"); fprintf(fout,"0 0 6 25 1.100 180.00 2.0 \n"); fprintf(fout,"0 0 7 24 1.100 180.00 2.0 \n"); fprintf(fout,"0 0 7 23 1.100 180.00 2.0 \n"); fprintf(fout,"0 0 2 24 1.100 180.00 2.0 bsd.on C6H6 nmodes \n"); fprintf(fout,"0 0 2 25 1.100 180.00 2.0 bsd.on C6H6 nmodes\n"); fprintf(fout,"6 3 45 11 1.000 180.00 2.0 \n"); fprintf(fout,"7 1 45 11 1.000 180.00 2.0 dac guess, 9/94\n"); fprintf(fout,"7 1 7 11 1.100 180.00 2.0 \n"); fprintf(fout,"11 47 1 50 10.500 180.00 2.0 \n"); fprintf(fout,"39 12 4 11 1.100 180.00 2.0 \n"); fprintf(fout,"40 13 4 11 1.100 180.00 2.0 \n"); fprintf(fout,"39 13 4 11 1.100 180.00 2.0 \n"); fprintf(fout,"13 3 14 11 1.100 180.00 2.0 \n"); fprintf(fout,"2 2 2 11 1.100 180.00 2.0 \n"); fprintf(fout,"1 7 7 11 1.100 180.00 2.0 dac guess, 9/94\n"); fprintf(fout,"41 7 2 42 1.100 180.00 2.0 dac guess, 9/94\n"); fprintf(fout,"3 41 2 42 1.100 180.00 2.0 dac, 10/94\n"); fprintf(fout,"39 41 2 42 1.100 180.00 2.0 dac, 10/94\n"); fprintf(fout,"2 2 1 50 1.100 180.00 2.0 (not used in tyr!)\n"); fprintf(fout,"2 2 2 50 1.100 180.00 2.0 in tyr\n"); fprintf(fout,"25 47 1 50 1.100 180.00 2.0 Junmei et al.1999\n"); fprintf(fout,"25 47 1 51 1.100 180.00 2.0 \n"); fprintf(fout,"7 11 7 23 1.100 180.00 2.0 Junmei et al.1999\n"); fprintf(fout,"2 2 2 33 1.100 180.00 2.0 Junmei et al.1999\n"); fprintf(fout,"7 24 1 47 1.100 180.00 2.0 Junmei et al.1999\n"); fprintf(fout,"1 11 38 18 1.100 180.00 2.0 Junmei et al.1999\n"); fprintf(fout,"1 11 38 47 1.100 180.00 2.0 Junmei et al.1999\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin INPUT FOR H-BOND 10-12 POTENTIAL PARAMETERS\n"); fprintf(fout,"18 40 7557.0 2385.0 \n"); fprintf(fout,"18 41 10238.0 3071.0 \n"); fprintf(fout,"18 47 7557.0 2385.0 \n"); fprintf(fout,"18 48 4019.0 1409.0 \n"); fprintf(fout,"18 50 7557.0 2385.0 \n"); fprintf(fout,"18 53 265720.0 35429.0 \n"); fprintf(fout,"18 54 265720.0 35429.0 \n"); fprintf(fout,"26 40 7557.0 2385.0 \n"); fprintf(fout,"26 47 7557.0 2385.0 \n"); fprintf(fout,"26 48 4019.0 1409.0 \n"); fprintf(fout,"26 50 7557.0 2385.0 \n"); fprintf(fout,"26 53 265720.0 35429.0 \n"); fprintf(fout,"26 54 265720.0 35429.0 \n"); fprintf(fout,"27 40 14184.0 3082.0 \n"); fprintf(fout,"27 47 14184.0 3082.0 \n"); fprintf(fout,"27 48 4019.0 1409.0 \n"); fprintf(fout,"27 50 14184.0 3082.0 \n"); fprintf(fout,"27 53 265720.0 35429.0 \n"); fprintf(fout,"27 54 265720.0 35429.0 \n"); fprintf(fout,"21 40 4019.0 1409.0 \n"); fprintf(fout,"21 47 10238.0 3071.0 \n"); fprintf(fout,"21 48 4019.0 1409.0 \n"); fprintf(fout,"21 50 4019.0 1409.0 \n"); fprintf(fout,"21 53 7557.0 2385.0 \n"); fprintf(fout,"21 54 7557.0 2385.0 \n"); fprintf(fout,"22 40 4019.0 1409.0 \n"); fprintf(fout,"22 47 4019.0 1409.0 \n"); fprintf(fout,"22 48 4019.0 1409.0 \n"); fprintf(fout,"22 50 4019.0 1409.0 \n"); fprintf(fout,"22 53 7557.0 2385.0 \n"); fprintf(fout,"22 54 7557.0 2385.0 \n"); fprintf(fout,"End\n"); fprintf(fout,"Begin INPUT FOR THE NON-BONDED 6-12 POTENTIAL PARAMETERS\n"); fprintf(fout,"18 0.6000 0.0157 Ferguson base pair geom.\n"); fprintf(fout,"26 0.0000 0.0000 OPLS Jorgensen, JACS,110,(1988),1657\n"); fprintf(fout,"27 0.6000 0.0157 W. Cornell CH3SH --> CH3OH FEP\n"); fprintf(fout,"19 1.4870 0.0157 OPLS\n"); fprintf(fout,"20 1.3870 0.0157 Veenstra et al JCC,8,(1992),963 \n"); fprintf(fout,"21 1.2870 0.0157 Veenstra et al JCC,8,(1992),963 \n"); fprintf(fout,"22 1.1870 0.0157 Veenstra et al JCC,8,(1992),963 \n"); fprintf(fout,"29 1.1000 0.0157 Veenstra et al JCC,8,(1992),963\n"); fprintf(fout,"23 1.4590 0.0150 Spellmeyer \n"); fprintf(fout,"24 1.4090 0.0150 Spellmeyer, one electrowithdr. neighbor\n"); fprintf(fout,"25 1.3590 0.0150 Spellmeyer, two electrowithdr. neighbor\n"); fprintf(fout,"28 0.0000 0.0000 TIP3P water model\n"); fprintf(fout,"30 1.4590 0.0150 H bonded to sp C (Howard et al JCC 16)\n"); fprintf(fout,"47 1.6612 0.2100 OPLS\n"); fprintf(fout,"48 1.6612 0.2100 OPLS\n"); fprintf(fout,"49 1.7683 0.1520 TIP3P water model\n"); fprintf(fout,"50 1.7210 0.2104 OPLS \n"); fprintf(fout,"51 1.6837 0.1700 OPLS ether\n"); fprintf(fout,"14 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"2 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"3 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"4 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"5 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"6 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"7 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"8 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"9 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"10 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"12 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"13 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"15 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"16 1.9080 0.0860 Spellmeyer\n"); fprintf(fout,"11 1.9080 0.1094 Spellmeyer\n"); fprintf(fout,"1 1.9080 0.0860 OPLS\n"); fprintf(fout,"38 1.8240 0.1700 OPLS\n"); fprintf(fout,"39 1.8240 0.1700 OPLS\n"); fprintf(fout,"42 1.8240 0.1700 OPLS\n"); fprintf(fout,"45 1.8240 0.1700 OPLS\n"); fprintf(fout,"41 1.8240 0.1700 OPLS\n"); fprintf(fout,"40 1.8240 0.1700 OPLS\n"); fprintf(fout,"43 1.8240 0.1700 OPLS\n"); fprintf(fout,"44 1.8240 0.1700 OPLS\n"); fprintf(fout,"46 1.8240 0.1700 OPLS\n"); fprintf(fout,"46 1.8240 0.1700 N in nitrile\n"); fprintf(fout,"38 1.8240 0.1700 N in nitrile\n"); fprintf(fout,"39 1.8240 0.1700 N in nitrile\n"); fprintf(fout,"42 1.8240 0.1700 N in nitrile\n"); fprintf(fout,"45 1.8240 0.1700 N in nitrile\n"); fprintf(fout,"41 1.8240 0.1700 N in nitrile\n"); fprintf(fout,"40 1.8240 0.1700 N in nitrile\n"); fprintf(fout,"43 1.8240 0.1700 N in nitrile\n"); fprintf(fout,"44 1.8240 0.1700 N in nitrile\n"); fprintf(fout,"53 2.0000 0.2500 W. Cornell CH3SH and CH3SCH3 FEP's\n"); fprintf(fout,"54 2.0000 0.2500 W. Cornell CH3SH and CH3SCH3 FEP's\n"); fprintf(fout,"52 2.1000 0.2000 JCC,7,(1986),230; \n"); fprintf(fout,"35 2.4700 0.1000 Cl- Smith & Dang, JCP 1994,100:5,3757\n"); fprintf(fout,"57 1.1370 0.0183 Li+ Aqvist JPC 1990,94,8021. (adapted)\n"); fprintf(fout,"58 1.8680 0.0028 Na+ Aqvist JPC 1990,94,8021. (adapted)\n"); fprintf(fout,"59 1.8680 0.0028 Na+ Aqvist JPC 1990,94,8021. (adapted)\n"); fprintf(fout,"60 2.6580 0.0003 K+ Aqvist JPC 1990,94,8021. (adapted)\n"); fprintf(fout,"61 2.9560 0.0002 Rb+ Aqvist JPC 1990,94,8021. (adapted)\n"); fprintf(fout,"62 3.3950 0.0001 Cs+ Aqvist JPC 1990,94,8021. (adapted)\n"); fprintf(fout,"37 0.7926 0.8947 Mg2+ Aqvist JPC 1990,94,8021.(adapted)\n"); fprintf(fout,"17 1.7131 0.4598 Ca2+ Aqvist JPC 1990,94,8021.(adapted)\n"); fprintf(fout,"63 1.1000 0.0125 Zn2+, Merz,PAK, JACS,113,8262,(1991) \n"); fprintf(fout,"31 1.7500 0.0610 Gough et al. JCC 13,(1992),963.\n"); fprintf(fout,"32 1.9480 0.2650 Fox, JPCB,102,8070,(98),flex.mdl CHCl3\n"); fprintf(fout,"33 2.2200 0.3200 Junmei(?)\n"); fprintf(fout,"34 2.3500 0.4000 JCC,7,(1986),230; \n"); fprintf(fout,"36 5.0000 0.1000 solvated ion for vacuum approximation\n"); fprintf(fout,"End\n"); fclose(fout); return TRUE; } GabeditSrc250/utils/MolecularMechanics/amber.prm0000644000175100017510000011713213130664665022213 0ustar allouchealloucheBegin Title Atom Types : Ty(Type) Masse(C12 UMA) Polarisablities(Ang**3) Bond Length : Ty-Ty Force(Kcal/mol/A**2) Re Bond Angle : Ty-Ty-Ty Force(Kcal/mol/rad**2) Angle(Deg) Dihedral : Ty-Ty-Ty-Ty Idiv Pk Phase(Deg) Pn E = Pk/Idiv*(1 + cos(P,*Phi - Phase) Pk = Barrier/2 Kcal/mol Idiv bairrier is divised by Idiv Pn = periodicity fo the torional barrier if Pn<0 the tosional potential is assumed to have more than one term if Ty=X => Ty is any one Type Improper Dihedral : Ty-Ty-Ty-Ty Idiv Pk Phase(Deg) Pn H-Bond : Ty-Ty A(coef. 1/r**12) B(coef. -B/r**10) End Title Begin INPUT FOR ATOM TYPES, MASSE AND POLARISABILITIES C 12.01 0.616 sp2 C carbonyl group CA 12.01 0.360 sp2 C pure aromatic (benzene) CB 12.01 0.360 sp2 aromatic C, 5&6 membered ring junction CC 12.01 0.360 sp2 aromatic C, 5 memb. ring HIS CD 12.01 0.360 sp2 C atom in the middle of: C=CD-CD=C CK 12.01 0.360 sp2 C 5 memb.ring in purines CM 12.01 0.360 sp2 C pyrimidines in pos. 5 & 6 CN 12.01 0.360 sp2 C aromatic 5&6 memb.ring junct.(TRP) CQ 12.01 0.360 sp2 C in 5 mem.ring of purines between 2 N CR 12.01 0.360 sp2 arom as CQ but in HIS CT 12.01 0.878 sp3 aliphatic C CV 12.01 0.360 sp2 arom. 5 memb.ring w/1 N and 1 H (HIS) CW 12.01 0.360 sp2 arom. 5 memb.ring w/1 N-H and 1 H (HIS) C* 12.01 0.360 sp2 arom. 5 memb.ring w/1 subst. (TRP) CY 12.01 0.360 nitrile C (Howard et al.JCC,16,243,1995) CZ 12.01 0.360 sp C (Howard et al.JCC,16,243,1995) C0 40.08 0.000 calcium H 1.008 0.161 H bonded to nitrogen atoms HC 1.008 0.135 H aliph. bond. to C without electrwd.group H1 1.008 0.135 H aliph. bond. to C with 1 electrwd. group H2 1.008 0.135 H aliph. bond. to C with 2 electrwd.groups H3 1.008 0.135 H aliph. bond. to C with 3 eletrwd.groups HA 1.008 0.167 H arom. bond. to C without elctrwd. groups H4 1.008 0.167 H arom. bond. to C with 1 electrwd. group H5 1.008 0.167 H arom.at C with 2 elctrwd. gr,+HCOO group HO 1.008 0.135 hydroxyl group HS 1.008 0.135 hydrogen bonded to sulphur (pol?) HW 1.008 0.000 H in TIP3P water HP 1.008 0.135 H bonded to C next to positively charged gr HZ 1.008 0.161 H bond sp C (Howard et al.JCC,16,243,1995) F 19.00 0.320 fluorine Cl 35.45 1.910 chlorine (Applequist) Br 79.90 2.880 bromine (Applequist) I 126.9 4.690 iodine (Applequist) IM 35.45 3.235 assumed to be Cl- (ion minus) IB 131.0 0.000 'big ion w/ waters' for vacuum (Na+, 6H2O) MG 24.305 0.120 magnesium N 14.01 0.530 sp2 nitrogen in amide groups NA 14.01 0.530 sp2 N in 5 memb.ring w/H atom (HIS) NB 14.01 0.530 sp2 N in 5 memb.ring w/LP (HIS,ADE,GUA) NC 14.01 0.530 sp2 N in 6 memb.ring w/LP (ADE,GUA) N2 14.01 0.530 sp2 N in amino groups N3 14.01 0.530 sp3 N for charged amino groups (Lys, etc) NT 14.01 0.530 sp3 N for amino groups amino groups N* 14.01 0.530 sp2 N NY 14.01 0.530 nitrile N (Howard et al.JCC,16,243,1995) O 16.00 0.434 carbonyl group oxygen O2 16.00 0.434 carboxyl and phosphate group oxygen OW 16.00 0.000 oxygen in TIP3P water OH 16.00 0.465 oxygen in hydroxyl group OS 16.00 0.465 ether and ester oxygen P 30.97 1.538 phosphate,pol:JACS,112,8543,90,K.J.Miller S 32.06 2.900 S in disulfide linkage,pol:JPC,102,2399,98 SH 32.06 2.900 S in cystine CU 63.55 0.000 copper FE 55.00 0.000 iron Li 6.94 0.029 lithium, ions pol:J.PhysC,11,1541,(1978) IP 22.99 0.250 assumed to be Na+ (ion plus) Na 22.99 0.250 Na+, ions pol:J.PhysC,11,1541,(1978) K 39.10 1.060 potassium Rb 85.47 0.000 rubidium Cs 132.91 0.000 cesium Zn 65.4 0.000 Zn2+ End Begin INPUT FOR BOND LENGTH PARAMETERS OW-HW 553.0 0.9572 ! TIP3P water HW-HW 553.0 1.5136 TIP3P water C -C 310.0 1.525 Junmei et al, 1999 C -CA 469.0 1.409 JCC,7,(1986),230; (not used any more in TYR) C -CB 447.0 1.419 JCC,7,(1986),230; GUA C -CM 410.0 1.444 JCC,7,(1986),230; THY,URA C -CT 317.0 1.522 JCC,7,(1986),230; AA C -N 490.0 1.335 JCC,7,(1986),230; AA C -N* 424.0 1.383 JCC,7,(1986),230; CYT,URA C -NA 418.0 1.388 JCC,7,(1986),230; GUA.URA C -NC 457.0 1.358 JCC,7,(1986),230; CYT C -O 570.0 1.229 JCC,7,(1986),230; AA,CYT,GUA,THY,URA C -O2 656.0 1.250 JCC,7,(1986),230; GLU,ASP C -OH 450.0 1.364 JCC,7,(1986),230; (not used any more for TYR) C -OS 450.0 1.323 Junmei et al, 1999 C -H4 367.0 1.080 Junmei et al, 1999 C -H5 367.0 1.080 Junmei et al, 1999 CA-CA 469.0 1.400 JCC,7,(1986),230; BENZENE,PHE,TRP,TYR CA-CB 469.0 1.404 JCC,7,(1986),230; ADE,TRP CA-CM 427.0 1.433 JCC,7,(1986),230; CYT CA-CN 469.0 1.400 JCC,7,(1986),230; TRP CA-CT 317.0 1.510 JCC,7,(1986),230; PHE,TYR CA-HA 367.0 1.080 changed from 340. bsd on C6H6 nmodes; PHE,TRP,TYR CA-H4 367.0 1.080 changed from 340. bsd on C6H6 nmodes; no assigned CA-N2 481.0 1.340 JCC,7,(1986),230; ARG,CYT,GUA CA-NA 427.0 1.381 JCC,7,(1986),230; GUA CA-NC 483.0 1.339 JCC,7,(1986),230; ADE,CYT,GUA CA-OH 450.0 1.364 substituted for C-OH in tyr CB-CB 520.0 1.370 JCC,7,(1986),230; ADE,GUA CB-N* 436.0 1.374 JCC,7,(1986),230; ADE,GUA CB-NB 414.0 1.391 JCC,7,(1986),230; ADE,GUA CB-NC 461.0 1.354 JCC,7,(1986),230; ADE,GUA CD-HA 367.0 1.080 Junmei et al, 1999 CD-CD 469.0 1.400 Junmei et al, 1999 CD-CM 549.0 1.350 Junmei et al, 1999 CD-CT 317.0 1.510 Junmei et al, 1999 CK-H5 367.0 1.080 changed from 340. bsd on C6H6 nmodes; ADE,GUA CK-N* 440.0 1.371 JCC,7,(1986),230; ADE,GUA CK-NB 529.0 1.304 JCC,7,(1986),230; ADE,GUA CM-CM 549.0 1.350 JCC,7,(1986),230; CYT,THY,URA CM-CT 317.0 1.510 JCC,7,(1986),230; THY CM-HA 367.0 1.080 changed from 340. bsd on C6H6 nmodes; CYT,URA CM-H4 367.0 1.080 changed from 340. bsd on C6H6 nmodes; CYT,URA CM-H5 367.0 1.080 changed from 340. bsd on C6H6 nmodes; not assigned CM-N* 448.0 1.365 JCC,7,(1986),230; CYT,THY,URA CM-OS 480.0 1.240 Junmei et al, 1999 CQ-H5 367.0 1.080 changed from 340. bsd on C6H6 nmodes; ADE CQ-NC 502.0 1.324 JCC,7,(1986),230; ADE CT-CT 310.0 1.526 JCC,7,(1986),230; AA, SUGARS CT-HC 340.0 1.090 changed from 331 bsd on NMA nmodes; AA, SUGARS CT-H1 340.0 1.090 changed from 331 bsd on NMA nmodes; AA, RIBOSE CT-H2 340.0 1.090 changed from 331 bsd on NMA nmodes; SUGARS CT-H3 340.0 1.090 changed from 331 bsd on NMA nmodes; not assigned CT-HP 340.0 1.090 changed from 331; AA-lysine, methyl ammonium cation CT-N* 337.0 1.475 JCC,7,(1986),230; ADE,CYT,GUA,THY,URA CT-N2 337.0 1.463 JCC,7,(1986),230; ARG CT-OH 320.0 1.410 JCC,7,(1986),230; SUGARS CT-OS 320.0 1.410 JCC,7,(1986),230; NUCLEIC ACIDS C*-HC 367.0 1.080 changed from 340. bsd on C6H6 nmodes, not needed AA C*-CB 388.0 1.459 JCC,7,(1986),230; TRP C*-CT 317.0 1.495 JCC,7,(1986),230; TRP C*-CW 546.0 1.352 JCC,7,(1986),230; TRP CB-CN 447.0 1.419 JCC,7,(1986),230; TRP CC-CT 317.0 1.504 JCC,7,(1986),230; HIS CC-CV 512.0 1.375 JCC,7,(1986),230; HIS(delta) CC-CW 518.0 1.371 JCC,7,(1986),230; HIS(epsilon) CC-NA 422.0 1.385 JCC,7,(1986),230; HIS CC-NB 410.0 1.394 JCC,7,(1986),230; HIS CN-NA 428.0 1.380 JCC,7,(1986),230; TRP CR-H5 367.0 1.080 changed from 340. bsd on C6H6 nmodes;HIS CR-NA 477.0 1.343 JCC,7,(1986),230; HIS CR-NB 488.0 1.335 JCC,7,(1986),230; HIS CT-N 337.0 1.449 JCC,7,(1986),230; AA CT-N3 367.0 1.471 JCC,7,(1986),230; LYS CT-NT 367.0 1.471 for neutral amines CT-S 227.0 1.810 changed from 222.0 based on dimethylS nmodes CT-SH 237.0 1.810 changed from 222.0 based on methanethiol nmodes CT-CY 400.0 1.458 Howard et al JCC.16,243,1995 CT-CZ 400.0 1.459 Howard et al JCC,16,243,1995 CV-H4 367.0 1.080 changed from 340. bsd on C6H6 nmodes; HIS CV-NB 410.0 1.394 JCC,7,(1986),230; HIS CW-H4 367.0 1.080 changed from 340. bsd on C6H6 nmodes;HIS(epsilon,+) CW-NA 427.0 1.381 JCC,7,(1986),230; HIS,TRP CY-NY 600.0 1.150 Howard et al JCC,16,243,1995 CZ-CZ 600.0 1.206 Howard et al JCC,16,243,1995 CZ-HZ 400.0 1.056 Howard et al JCC,16,243,1995 O2-P 525.0 1.480 JCC,7,(1986),230; NA PHOSPHATES OH-P 230.0 1.610 JCC,7,(1986),230; NA PHOSPHATES OS-P 230.0 1.610 JCC,7,(1986),230; NA PHOSPHATES H -N2 434.0 1.010 JCC,7,(1986),230; ADE,CYT,GUA,ARG H -N* 434.0 1.010 for plain unmethylated bases ADE,CYT,GUA,ARG H -NA 434.0 1.010 JCC,7,(1986),230; GUA,URA,HIS H -N 434.0 1.010 JCC,7,(1986),230; AA H -N3 434.0 1.010 JCC,7,(1986),230; LYS H -NT 434.0 1.010 for neutral amines HO-OH 553.0 0.960 JCC,7,(1986),230; SUGARS,SER,TYR HO-OS 553.0 0.960 JCC,7,(1986),230; NUCLEOTIDE ENDS HS-SH 274.0 1.336 JCC,7,(1986),230; CYS S -S 166.0 2.038 JCC,7,(1986),230; CYX (SCHERAGA) F -CT 367.0 1.380 JCC,13,(1992),963;CF4; R0=1.332 FOR CHF3 Cl-CT 232.0 1.766 6-31g* opt Br-CT 159.0 1.944 Junmei et al,99 I -CT 148.0 2.166 Junmei et al,99 F -CA 386.0 1.359 Junmei et al,99 Cl-CA 193.0 1.727 Junmei et al,99 I -CA 171.0 2.075 Junmei et al,99 Br-CA 172.0 1.890 Junmei et al,99 End Begin INPUT FOR BOND ANGLE PARAMETERS HW-OW-HW 100. 104.52 TIP3P water HW-HW-OW 0. 127.74 (found in crystallographic water with 3 bonds) C -C -O 80.0 120.00 Junmei et al, 1999 acrolein C -C -OH 80.0 120.00 Junmei et al, 1999 CA-C -CA 63.0 120.00 changed from 85.0 bsd on C6H6 nmodes; AA CA-C -OH 70.0 120.00 AA (not used in tyr) CB-C -NA 70.0 111.30 NA CB-C -O 80.0 128.80 CM-C -NA 70.0 114.10 CM-C -O 80.0 125.30 CT-C -O 80.0 120.40 CT-C -O2 70.0 117.00 CT-C -N 70.0 116.60 AA general CT-C -CT 63.0 117.00 Junmei et al, 1999 CT-C -OS 80.0 115.00 Junmei et al, 1999 CT-C -OH 80.0 110.00 Junmei et al, 1999 N*-C -NA 70.0 115.40 N*-C -NC 70.0 118.60 N*-C -O 80.0 120.90 NA-C -O 80.0 120.60 NC-C -O 80.0 122.50 N -C -O 80.0 122.90 AA general O -C -O 80.0 126.00 AA COO- terminal residues O -C -OH 80.0 120.00 (check with Junmei for: theta0:120.0?) O -C -OS 80.0 125.00 Junmei et al, 1999 O2-C -O2 80.0 126.00 AA GLU (SCH JPC 79,2379) H4-C -C 50.0 120.00 Junmei et al, 1999 H4-C -CM 50.0 115.00 Junmei et al, 1999 H4-C -CT 50.0 115.00 Junmei et al, 1999 H4-C -O 50.0 120.00 Junmei et al, 1999 H4-C -OH 50.0 120.00 Junmei et al, 1999 H5-C -N 50.0 120.00 Junmei et al, 1999 H5-C -O 50.0 119.00 Junmei et al, 1999 H5-C -OH 50.0 107.00 Junmei et al, 1999 H5-C -OS 50.0 107.00 Junmei et al, 1999 C -CA-CA 63.0 120.00 changed from 85.0 bsd on C6H6 nmodes C -CA-HA 50.0 120.00 AA (not used in tyr) CA-CA-CA 63.0 120.00 changed from 85.0 bsd on C6H6 nmodes CA-CA-CB 63.0 120.00 changed from 85.0 bsd on C6H6 nmodes CA-CA-CT 70.0 120.00 CA-CA-HA 50.0 120.00 CA-CA-H4 50.0 120.00 CA-CA-OH 70.0 120.00 replacement in tyr CA-CA-CN 63.0 120.00 changed from 85.0 bsd on C6H6 nmodes; AA trp CB-CA-HA 50.0 120.00 CB-CA-H4 50.0 120.00 CB-CA-N2 70.0 123.50 CB-CA-NC 70.0 117.30 CM-CA-N2 70.0 120.10 CM-CA-NC 70.0 121.50 CN-CA-HA 50.0 120.00 AA trp NA-CA-NC 70.0 123.30 N2-CA-NA 70.0 116.00 N2-CA-NC 70.0 119.30 N2-CA-N2 70.0 120.00 AA arg F -CA-CA 70.0 121.00 Junmei et al,99 Cl-CA-CA 70.0 118.80 Junmei et al,99 Br-CA-CA 70.0 118.80 Junmei et al,99 I -CA-CA 70.0 118.80 Junmei et al,99 C -CB-CB 63.0 119.20 changed from 85.0 bsd on C6H6 nmodes; NA gua C -CB-NB 70.0 130.00 CA-CB-CB 63.0 117.30 changed from 85.0 bsd on C6H6 nmodes; NA ade CA-CB-NB 70.0 132.40 CB-CB-N* 70.0 106.20 CB-CB-NB 70.0 110.40 CB-CB-NC 70.0 127.70 C*-CB-CA 63.0 134.90 changed from 85.0 bsd on C6H6 nmodes; AA trp C*-CB-CN 63.0 108.80 changed from 85.0 bsd on C6H6 nmodes; AA trp CA-CB-CN 63.0 116.20 changed from 85.0 bsd on C6H6 nmodes; AA trp N*-CB-NC 70.0 126.20 CD-CD-CM 63.0 120.00 Junmei et al, 1999 CD-CD-CT 70.0 120.00 Junmei et al, 1999 CM-CD-CT 70.0 120.00 Junmei et al, 1999 HA-CD-HA 35.0 119.00 Junmei et al, 1999 HA-CD-CD 50.0 120.00 Junmei et al, 1999 HA-CD-CM 50.0 120.00 Junmei et al, 1999 H5-CK-N* 50.0 123.05 H5-CK-NB 50.0 123.05 N*-CK-NB 70.0 113.90 C -CM-CM 63.0 120.70 changed from 85.0 bsd on C6H6 nmodes; NA thy C -CM-CT 70.0 119.70 C -CM-HA 50.0 119.70 C -CM-H4 50.0 119.70 CA-CM-CM 63.0 117.00 changed from 85.0 bsd on C6H6 nmodes; NA cyt CA-CM-HA 50.0 123.30 CA-CM-H4 50.0 123.30 CM-CM-CT 70.0 119.70 CM-CM-HA 50.0 119.70 CM-CM-H4 50.0 119.70 CM-CM-N* 70.0 121.20 CM-CM-OS 80.0 125.00 Junmei et al, 1999 H4-CM-N* 50.0 119.10 H4-CM-OS 50.0 113.00 Junmei et al, 1999 HA-CM-HA 35.0 120.00 Junmei et al, 1999 HA-CM-CD 50.0 120.00 Junmei et al, 1999 HA-CM-CT 50.0 120.00 Junmei et al, 1999 NC-CQ-NC 70.0 129.10 H5-CQ-NC 50.0 115.45 H1-CT-H1 35.0 109.50 H1-CT-N* 50.0 109.50 changed based on NMA nmodes H1-CT-OH 50.0 109.50 changed based on NMA nmodes H1-CT-OS 50.0 109.50 changed based on NMA nmodes H1-CT-CM 50.0 109.50 Junmei et al, 1999 H1-CT-CY 50.0 110.00 Junmei et al, 1999 H1-CT-CZ 50.0 110.00 Junmei et al, 1999 H1-CT-N 50.0 109.50 AA general changed based on NMA nmodes H1-CT-S 50.0 109.50 AA cys changed based on NMA nmodes H1-CT-SH 50.0 109.50 AA cyx changed based on NMA nmodes H1-CT-N2 50.0 109.50 AA arg changed based on NMA nmodes H1-CT-NT 50.0 109.50 neutral amines H2-CT-H2 35.0 109.50 AA lys H2-CT-N* 50.0 109.50 changed based on NMA nmodes H2-CT-OS 50.0 109.50 changed based on NMA nmodes HP-CT-HP 35.0 109.50 AA lys, ch3nh4+ HP-CT-N3 50.0 109.50 AA lys, ch3nh3+, changed based on NMA nmodes HC-CT-HC 35.0 109.50 HC-CT-CM 50.0 109.50 changed based on NMA nmodes HC-CT-CD 50.0 109.50 Junmei et al, 1999 HC-CT-CZ 50.0 110.00 Junmei et al, 1999 C -CT-H1 50.0 109.50 AA general changed based on NMA nmodes C -CT-HP 50.0 109.50 AA zwitterion changed based on NMA nmodes C -CT-HC 50.0 109.50 AA gln changed based on NMA nmodes C -CT-N 63.0 110.10 AA general C -CT-N3 80.0 111.20 AA amino terminal residues C -CT-CT 63.0 111.10 AA general C -CT-OS 60.0 109.50 Junmei et al, 1999 CA-CT-HC 50.0 109.50 AA tyr changed based on NMA nmodes CC-CT-CT 63.0 113.10 AA his CC-CT-HC 50.0 109.50 AA his changed based on NMA nmodes CM-CT-CT 63.0 111.00 Junmei et al, 1999 (last change: Mar24,99) CM-CT-OS 50.0 109.50 Junmei et al, 1999 CT-CT-CT 40.0 109.50 CT-CT-HC 50.0 109.50 changed based on NMA nmodes CT-CT-H1 50.0 109.50 changed based on NMA nmodes CT-CT-H2 50.0 109.50 changed based on NMA nmodes CT-CT-HP 50.0 109.50 changed based on NMA nmodes CT-CT-N* 50.0 109.50 CT-CT-OH 50.0 109.50 CT-CT-OS 50.0 109.50 CT-CT-S 50.0 114.70 AA cyx (SCHERAGA JPC 79,1428) CT-CT-SH 50.0 108.60 AA cys CT-CT-CA 63.0 114.00 AA phe tyr (SCH JPC 79,2379) CT-CT-N2 80.0 111.20 AA arg (JCP 76, 1439) CT-CT-N 80.0 109.70 AA ala, general (JACS 94, 2657) CT-CT-N3 80.0 111.20 AA lys (JCP 76, 1439) CT-CT-NT 80.0 111.20 neutral amines CT-CT-CY 63.0 110.00 Junmei et al, 1999 CT-CT-CZ 63.0 110.00 Junmei et al, 1999 C*-CT-CT 63.0 115.60 AA trp C*-CT-HC 50.0 109.50 AA trp changed based on NMA nmodes OS-CT-OS 160.0 101.00 Junmei et al, 1999 OS-CT-CY 50.0 110.00 Junmei et al, 1999 OS-CT-CZ 50.0 110.00 Junmei et al, 1999 OS-CT-CZ 50.0 110.00 Junmei et al, 1999 OS-CT-CY 50.0 110.00 Junmei et al, 1999 OS-CT-N* 50.0 109.50 F -CT-F 77.0 109.10 JCC,13,(1992),963; F -CT-H1 50.0 109.50 JCC,13,(1992),963; F -CT-CT 50.0 109.00 F -CT-H2 50.0 109.50 Cl-CT-CT 50.0 108.50 (6-31g* opt value) Cl-CT-H1 50.0 108.50 (6-31g* opt value) Br-CT-CT 50.0 108.00 Junmei et al 99 Br-CT-H1 50.0 106.50 Junmei et al 99 I -CT-CT 50.0 106.00 Junmei et al,99 CT-CC-NA 70.0 120.00 AA his CT-CC-CV 70.0 120.00 AA his CT-CC-NB 70.0 120.00 AA his CV-CC-NA 70.0 120.00 AA his CW-CC-NA 70.0 120.00 AA his CW-CC-NB 70.0 120.00 AA his CT-CC-CW 70.0 120.00 AA his H5-CR-NA 50.0 120.00 AA his H5-CR-NB 50.0 120.00 AA his NA-CR-NA 70.0 120.00 AA his NA-CR-NB 70.0 120.00 AA his CC-CV-H4 50.0 120.00 AA his CC-CV-NB 70.0 120.00 AA his H4-CV-NB 50.0 120.00 AA his CC-CW-H4 50.0 120.00 AA his CC-CW-NA 70.0 120.00 AA his C*-CW-H4 50.0 120.00 AA trp C*-CW-NA 70.0 108.70 AA trp H4-CW-NA 50.0 120.00 AA his CB-C*-CT 70.0 128.60 AA trp CB-C*-CW 63.0 106.40 changed from 85.0 bsd on C6H6 nmodes; AA trp CT-C*-CW 70.0 125.00 AA trp CA-CN-CB 63.0 122.70 changed from 85.0 bsd on C6H6 nmodes; AA trp CA-CN-NA 70.0 132.80 AA trp CB-CN-NA 70.0 104.40 AA trp CT-CY-NY 80.0 180.00 Junmei et al, 1999 CT-CZ-CZ 80.0 180.00 Junmei et al, 1999 CZ-CZ-HZ 50.0 180.00 Junmei et al, 1999 C -N -CT 50.0 121.90 AA general C -N -H 50.0 120.00 AA general, gln, asn,changed based on NMA nmodes CT-N -H 50.0 118.04 AA general, changed based on NMA nmodes CT-N -CT 50.0 118.00 AA pro (DETAR JACS 99,1232) H -N -H 35.0 120.00 ade,cyt,gua,gln,asn ** C -N*-CM 70.0 121.60 C -N*-CT 70.0 117.60 C -N*-H 50.0 119.20 changed based on NMA nmodes CB-N*-CK 70.0 105.40 CB-N*-CT 70.0 125.80 CB-N*-H 50.0 125.80 for unmethylated n.a. bases,chngd bsd NMA nmodes CK-N*-CT 70.0 128.80 CK-N*-H 50.0 128.80 for unmethylated n.a. bases,chngd bsd NMA nmodes CM-N*-CT 70.0 121.20 CM-N*-H 50.0 121.20 for unmethylated n.a. bases,chngd bsd NMA nmodes CA-N2-H 50.0 120.00 CA-N2-CT 50.0 123.20 AA arg CT-N2-H 50.0 118.40 AA arg H -N2-H 35.0 120.00 CT-N3-H 50.0 109.50 AA lys, changed based on NMA nmodes CT-N3-CT 50.0 109.50 AA pro/nt H -N3-H 35.0 109.50 AA lys, AA(end) CT-NT-H 50.0 109.50 neutral amines CT-NT-CT 50.0 109.50 neutral amines H -NT-H 35.0 109.50 neutral amines C -NA-C 70.0 126.40 C -NA-CA 70.0 125.20 C -NA-H 50.0 116.80 changed based on NMA nmodes CA-NA-H 50.0 118.00 changed based on NMA nmodes CC-NA-CR 70.0 120.00 AA his CC-NA-H 50.0 120.00 AA his, changed based on NMA nmodes CR-NA-CW 70.0 120.00 AA his CR-NA-H 50.0 120.00 AA his, changed based on NMA nmodes CW-NA-H 50.0 120.00 AA his, changed based on NMA nmodes CN-NA-CW 70.0 111.60 AA trp CN-NA-H 50.0 123.10 AA trp, changed based on NMA nmodes CB-NB-CK 70.0 103.80 CC-NB-CR 70.0 117.00 AA his CR-NB-CV 70.0 117.00 AA his C -NC-CA 70.0 120.50 CA-NC-CB 70.0 112.20 CA-NC-CQ 70.0 118.60 CB-NC-CQ 70.0 111.00 C -OH-HO 50.0 113.00 (not used in tyr anymore) CA-OH-HO 50.0 113.00 replacement in tyr CT-OH-HO 55.0 108.50 HO-OH-P 45.0 108.50 C -OS-CT 60.0 117.00 Junmei et al, 1999 CM-OS-CT 60.0 117.00 Junmei et al, 1999 CT-OS-CT 60.0 109.50 CT-OS-P 100.0 120.50 P -OS-P 100.0 120.50 O2-P -OH 45.0 108.23 O2-P -O2 140.0 119.90 O2-P -OS 100.0 108.23 OH-P -OS 45.0 102.60 OS-P -OS 45.0 102.60 CT-S -CT 62.0 98.90 AA met CT-S -S 68.0 103.70 AA cyx (SCHERAGA JPC 79,1428) CT-SH-HS 43.0 96.00 changed from 44.0 based on methanethiol nmodes HS-SH-HS 35.0 92.07 AA cys End Begin INPUT FOR DIHEDRAL PARAMETERS X -C -C -X 4 14.50 180.0 2. Junmei et al, 1999 X -C -CA-X 4 14.50 180.0 2. intrpol.bsd.on C6H6 X -C -CB-X 4 12.00 180.0 2. intrpol.bsd.on C6H6 X -C -CM-X 4 8.70 180.0 2. intrpol.bsd.on C6H6 X -C -CT-X 6 0.00 0.0 2. JCC,7,(1986),230 X -C -N -X 4 10.00 180.0 2. AA,NMA X -C -N*-X 4 5.80 180.0 2. JCC,7,(1986),230 X -C -NA-X 4 5.40 180.0 2. JCC,7,(1986),230 X -C -NC-X 2 8.00 180.0 2. JCC,7,(1986),230 X -C -O -X 4 11.20 180.0 2. Junmei et al, 1999 X -C -OH-X 2 4.60 180.0 2. Junmei et al, 1999 X -C -OS-X 2 5.40 180.0 2. Junmei et al, 1999 X -CA-CA-X 4 14.50 180.0 2. intrpol.bsd.on C6H6 X -CA-CB-X 4 14.00 180.0 2. intrpol.bsd.on C6H6 X -CA-CM-X 4 10.20 180.0 2. intrpol.bsd.on C6H6 X -CA-CN-X 4 14.50 180.0 2. reinterpolated 93' X -CA-CT-X 6 0.00 0.0 2. JCC,7,(1986),230 X -CA-N2-X 4 9.60 180.0 2. reinterpolated 93' X -CA-NA-X 4 6.00 180.0 2. JCC,7,(1986),230 X -CA-NC-X 2 9.60 180.0 2. JCC,7,(1986),230 X -CA-OH-X 2 1.80 180.0 2. Junmei et al, 99 X -CB-CB-X 4 21.80 180.0 2. intrpol.bsd.on C6H6 X -CB-CN-X 4 12.00 180.0 2. reinterpolated 93' X -CB-N*-X 4 6.60 180.0 2. JCC,7,(1986),230 X -CB-NB-X 2 5.10 180.0 2. JCC,7,(1986),230 X -CB-NC-X 2 8.30 180.0 2. JCC,7,(1986),230 X -CC-CT-X 6 0.00 0.0 2. JCC,7,(1986),230 X -CC-CV-X 4 20.60 180.0 2. intrpol.bsd.on C6H6 X -CC-CW-X 4 21.50 180.0 2. intrpol.bsd.on C6H6 X -CC-NA-X 4 5.60 180.0 2. JCC,7,(1986),230 X -CC-NB-X 2 4.80 180.0 2. JCC,7,(1986),230 X -CD-CD-X 4 4.00 180.0 2. Junmei et al, 1999 X -CD-CT-X 6 0.00 0.0 2. Junmei et al, 1999 X -CD-CM-X 4 26.60 180.0 2. Junmei et al, 1999 X -CK-N*-X 4 6.80 180.0 2. JCC,7,(1986),230 X -CK-NB-X 2 20.00 180.0 2. JCC,7,(1986),230 X -CM-CM-X 4 26.60 180.0 2. intrpol.bsd.on C6H6 X -CM-CT-X 6 0.00 0.0 3. JCC,7,(1986),230 X -CM-N*-X 4 7.40 180.0 2. JCC,7,(1986),230 X -CM-OS-X 2 2.10 180.0 2. Junmei et al, 1999 X -CN-NA-X 4 6.10 180.0 2. reinterpolated 93' X -CQ-NC-X 2 13.60 180.0 2. JCC,7,(1986),230 X -CT-CT-X 9 1.40 0.0 3. JCC,7,(1986),230 X -CT-CY-X 3 0.00 0.0 1. Junmei et al, 1999 X -CT-CZ-X 3 0.00 0.0 1. Junmei et al, 1999 X -CT-N -X 6 0.00 0.0 2. JCC,7,(1986),230 X -CT-N*-X 6 0.00 0.0 2. JCC,7,(1986),230 X -CT-N2-X 6 0.00 0.0 3. JCC,7,(1986),230 X -CT-NT-X 6 1.80 0.0 3. Junmei et al, 1999 X -CT-N3-X 9 1.40 0.0 3. JCC,7,(1986),230 X -CT-OH-X 3 0.50 0.0 3. JCC,7,(1986),230 X -CT-OS-X 3 1.15 0.0 3. JCC,7,(1986),230 X -CT-S -X 3 1.00 0.0 3. JCC,7,(1986),230 X -CT-SH-X 3 0.75 0.0 3. JCC,7,(1986),230 X -C*-CB-X 4 6.70 180.0 2. intrpol.bsd.onC6H6aa X -C*-CT-X 6 0.00 0.0 2. JCC,7,(1986),230 X -C*-CW-X 4 26.10 180.0 2. intrpol.bsd.on C6H6 X -CR-NA-X 4 9.30 180.0 2. JCC,7,(1986),230 X -CR-NB-X 2 10.00 180.0 2. JCC,7,(1986),230 X -CV-NB-X 2 4.80 180.0 2. JCC,7,(1986),230 X -CW-NA-X 4 6.00 180.0 2. JCC,7,(1986),230 X -OH-P -X 3 0.75 0.0 3. JCC,7,(1986),230 X -OS-P -X 3 0.75 0.0 3. JCC,7,(1986),230 N -CT-C -N 1 1.700 180.000 -1. N -CT-C -N 1 2.000 180.000 2. C -N -CT-C 1 0.850 180.000 -2. C -N -CT-C 1 0.800 0.000 1. CT-CT-N -C 1 0.50 180.0 -4. phi,psi,parm94 CT-CT-N -C 1 0.15 180.0 -3. phi,psi,parm94 CT-CT-N -C 1 0.53 0.0 1. phi,psi,parm94 CT-CT-C -N 1 0.100 0.0 -4. phi,psi,parm94 CT-CT-C -N 1 0.07 0.0 2. phi,psi,parm94 H -N -C -O 1 2.50 180.0 -2. JCC,7,(1986),230 H -N -C -O 1 2.00 0.0 1. J.C.cistrans-NMA DE CT-S -S -CT 1 3.50 0.0 -2. JCC,7,(1986),230 CT-S -S -CT 1 0.60 0.0 3. JCC,7,(1986),230 OH-P -OS-CT 1 0.25 0.0 -3. JCC,7,(1986),230 OH-P -OS-CT 1 1.20 0.0 2. gg> ene.631g*/mp2 OS-P -OS-CT 1 0.25 0.0 -3. JCC,7,(1986),230 OS-P -OS-CT 1 1.20 0.0 2. gg> ene.631g*/mp2 H1-CT-C -O 1 0.80 0.0 -1. Junmei et al, 1999 H1-CT-C -O 1 0.08 180.0 3. Junmei et al, 1999 HC-CT-C -O 1 0.80 0.0 -1. Junmei et al, 1999 HC-CT-C -O 1 0.08 180.0 3. Junmei et al, 1999 HC-CT-CT-HC 1 0.15 0.0 3. Junmei et al, 1999 HC-CT-CT-CT 1 0.16 0.0 3. Junmei et al, 1999 HC-CT-CM-CM 1 0.38 180.0 -3. Junmei et al, 1999 HC-CT-CM-CM 1 1.15 0.0 1. Junmei et al, 1999 HO-OH-CT-CT 1 0.16 0.0 -3. Junmei et al, 1999 HO-OH-CT-CT 1 0.25 0.0 1. Junmei et al, 1999 HO-OH-C -O 1 2.30 180.0 -2. Junmei et al, 1999 HO-OH-C -O 1 1.90 0.0 1. Junmei et al, 1999 CM-CM-C -O 1 2.175 180.0 -2. Junmei et al, 1999 CM-CM-C -O 1 0.30 0.0 3. Junmei et al, 1999 CT-CM-CM-CT 1 6.65 180.0 -2. Junmei et al, 1999 CT-CM-CM-CT 1 1.90 180.0 1. Junmei et al, 1999 CT-CT-CT-CT 1 0.18 0.0 -3. Junmei et al, 1999 CT-CT-CT-CT 1 0.25 180.0 -2. Junmei et al, 1999 CT-CT-CT-CT 1 0.20 180.0 1. Junmei et al, 1999 CT-CT-NT-CT 1 0.30 0.0 -3. Junmei et al, 1999 CT-CT-NT-CT 1 0.48 180.0 2. Junmei et al, 1999 CT-CT-OS-CT 1 0.383 0.0 -3. CT-CT-OS-CT 1 0.1 180.0 2. CT-CT-OS-C 1 0.383 0.0 -3. Junmei et al, 1999 CT-CT-OS-C 1 0.80 180.0 1. Junmei et al, 1999 CT-OS-CT-OS 1 0.10 0.0 -3. Junmei et al, 1999 CT-OS-CT-OS 1 0.85 180.0 -2. Junmei et al, 1999 CT-OS-CT-OS 1 1.35 180.0 1. Junmei et al, 1999 CT-OS-CT-N* 1 0.383 0.0 -3. parm98.dat, TC,PC,PAK CT-OS-CT-N* 1 0.65 0.0 2. Piotr et al. CT-CZ-CZ-HZ 1 0.00 0.0 1. Junmei et al, 1999 O -C -OS-CT 1 2.70 180.0 -2. Junmei et al, 1999 O -C -OS-CT 1 1.40 180.0 1. Junmei et al, 1999 OS-CT-N*-CK 1 0.00 000.0 -2. parm98, TC,PC,PAK OS-CT-N*-CK 1 2.50 0.0 1. parm98, TC,PC,PAK OS-CT-N*-CM 1 0.00 000.0 -2. parm98, TC,PC,PAK OS-CT-N*-CM 1 2.50 0.0 1. parm98, TC,PC,PAK OS-CT-CT-OS 1 0.144 0.0 -3. parm98, TC,PC,PAK OS-CT-CT-OS 1 1.175 0.0 2. Piotr et al. OS-CT-CT-OH 1 0.144 0.0 -3. parm98, TC,PC,PAK OS-CT-CT-OH 1 1.175 0.0 2. parm98, TC,PC,PAK OH-CT-CT-OH 1 0.144 0.0 -3. parm98, TC,PC,PAK OH-CT-CT-OH 1 1.175 0.0 2. parm98, TC,PC,PAK F -CT-CT-F 1 1.20 180.0 1. Junmei et al, 1999 Cl-CT-CT-Cl 1 0.45 180.0 1. Junmei et al, 1999 Br-CT-CT-Br 1 0.00 180.0 1. Junmei et al, 1999 H1-CT-CT-OS 1 0.25 0.0 1. Junmei et al, 1999 H1-CT-CT-OH 1 0.25 0.0 1. Junmei et al, 1999 H1-CT-CT-F 1 0.19 0.0 1. Junmei et al, 1999 H1-CT-CT-Cl 1 0.25 0.0 1. Junmei et al, 1999 H1-CT-CT-Br 1 0.55 0.0 1. Junmei et al, 1999 HC-CT-CT-OS 1 0.25 0.0 1. Junmei et al, 1999 HC-CT-CT-OH 1 0.25 0.0 1. Junmei et al, 1999 HC-CT-CT-F 1 0.19 0.0 1. Junmei et al, 1999 HC-CT-CT-Cl 1 0.25 0.0 1. Junmei et al, 1999 HC-CT-CT-Br 1 0.55 0.0 1. Junmei et al, 1999 End Begin INPUT FOR IMPROPER DIHEDRAL PARAMETERS X -X -C -O 10.5 180. 2. JCC,7,(1986),230 X -O2-C -O2 10.5 180. 2. JCC,7,(1986),230 X -X -N -H 1.0 180. 2. JCC,7,(1986),230 X -X -N2-H 1.0 180. 2. JCC,7,(1986),230 X -X -NA-H 1.0 180. 2. JCC,7,(1986),230 X -N2-CA-N2 10.5 180. 2. JCC,7,(1986),230 X -CT-N -CT 1.0 180. 2. JCC,7,(1986),230 X -X -CA-HA 1.1 180. 2. bsd.on C6H6 nmodes X -X -CW-H4 1.1 180. 2. X -X -CR-H5 1.1 180. 2. X -X -CV-H4 1.1 180. 2. X -X -CQ-H5 1.1 180. 2. X -X -CK-H5 1.1 180. 2. X -X -CM-H4 1.1 180. 2. X -X -CM-HA 1.1 180. 2. X -X -CA-H4 1.1 180. 2. bsd.on C6H6 nmodes X -X -CA-H5 1.1 180. 2. bsd.on C6H6 nmodes CK-CB-N*-CT 1.0 180. 2. CM-C -N*-CT 1.0 180. 2. dac guess, 9/94 CM-C -CM-CT 1.1 180. 2. CT-O -C -OH 10.5 180. 2. NA-CV-CC-CT 1.1 180. 2. NB-CW-CC-CT 1.1 180. 2. NA-CW-CC-CT 1.1 180. 2. CW-CB-C*-CT 1.1 180. 2. CA-CA-CA-CT 1.1 180. 2. C -CM-CM-CT 1.1 180. 2. dac guess, 9/94 NC-CM-CA-N2 1.1 180. 2. dac guess, 9/94 CB-NC-CA-N2 1.1 180. 2. dac, 10/94 NA-NC-CA-N2 1.1 180. 2. dac, 10/94 CA-CA-C -OH 1.1 180. 2. (not used in tyr!) CA-CA-CA-OH 1.1 180. 2. in tyr H5-O -C -OH 1.1 180. 2. Junmei et al.1999 H5-O -C -OS 1.1 180. 2. CM-CT-CM-HA 1.1 180. 2. Junmei et al.1999 CA-CA-CA-Br 1.1 180. 2. Junmei et al.1999 CM-H4-C -O 1.1 180. 2. Junmei et al.1999 C -CT-N -H 1.1 180. 2. Junmei et al.1999 C -CT-N -O 1.1 180. 2. Junmei et al.1999 End Begin INPUT FOR H-BOND 10-12 POTENTIAL PARAMETERS H -NB 7557.00 2385.00 H -NC 10238.00 3071.00 H -O 7557.00 2385.00 H -O2 4019.00 1409.00 H -OH 7557.00 2385.00 H -S 265720.00 35429.00 H -SH 265720.00 35429.00 HO-NB 7557.00 2385.00 HO-O 7557.00 2385.00 HO-O2 4019.00 1409.00 HO-OH 7557.00 2385.00 HO-S 265720.00 35429.00 HO-SH 265720.00 35429.00 HS-NB 14184.00 3082.00 HS-O 14184.00 3082.00 HS-O2 4019.00 1409.00 HS-OH 14184.00 3082.00 HS-S 265720.00 35429.00 HS-SH 265720.00 35429.00 H2-NB 4019.00 1409.00 H2-O 10238.00 3071.00 H2-O2 4019.00 1409.00 H2-OH 4019.00 1409.00 H2-S 7557.00 2385.00 H2-SH 7557.00 2385.00 H3-NB 4019.00 1409.00 H3-O 4019.00 1409.00 H3-O2 4019.00 1409.00 H3-OH 4019.00 1409.00 H3-S 7557.00 2385.00 H3-SH 7557.00 2385.00 End Begin INPUT FOR EQUIVALENCING ATOM TYPES FOR THE NON-BONDED 6-12 POTENTIAL PARAMETERS N NA N2 N* NC NB N3 NT NP NO NY C* CA CB CC CD CK CM CN CQ CR CV CW CX CY CZ End Begin INPUT FOR THE NON-BONDED 6-12 POTENTIAL PARAMETERS H 0.6000 0.0157 !Ferguson base pair geom. HO 0.0000 0.0000 OPLS Jorgensen, JACS,110,(1988),1657 HS 0.6000 0.0157 W. Cornell CH3SH --> CH3OH FEP HC 1.4870 0.0157 OPLS H1 1.3870 0.0157 Veenstra et al JCC,8,(1992),963 H2 1.2870 0.0157 Veenstra et al JCC,8,(1992),963 H3 1.1870 0.0157 Veenstra et al JCC,8,(1992),963 HP 1.1000 0.0157 Veenstra et al JCC,8,(1992),963 HA 1.4590 0.0150 Spellmeyer H4 1.4090 0.0150 Spellmeyer, one electrowithdr. neighbor H5 1.3590 0.0150 Spellmeyer, two electrowithdr. neighbor HW 0.0000 0.0000 TIP3P water model HZ 1.4590 0.0150 H bonded to sp C (Howard et al JCC 16) O 1.6612 0.2100 OPLS O2 1.6612 0.2100 OPLS OW 1.7683 0.1520 TIP3P water model OH 1.7210 0.2104 OPLS OS 1.6837 0.1700 OPLS ether C* 1.9080 0.0860 Spellmeyer CT 1.9080 0.1094 Spellmeyer C 1.9080 0.0860 OPLS N 1.8240 0.1700 OPLS NY 1.8240 0.1700 N in nitrile S 2.0000 0.2500 W. Cornell CH3SH and CH3SCH3 FEP's SH 2.0000 0.2500 W. Cornell CH3SH and CH3SCH3 FEP's P 2.1000 0.2000 JCC,7,(1986),230; IM 2.47 0.1 Cl- Smith & Dang, JCP 1994,100:5,3757 Li 1.1370 0.0183 Li+ Aqvist JPC 1990,94,8021. (adapted) IP 1.8680 0.00277 Na+ Aqvist JPC 1990,94,8021. (adapted) Na 1.8680 0.00277 Na+ Aqvist JPC 1990,94,8021. (adapted) K 2.6580 0.000328 K+ Aqvist JPC 1990,94,8021. (adapted) Rb 2.9560 0.00017 Rb+ Aqvist JPC 1990,94,8021. (adapted) Cs 3.3950 0.0000806 Cs+ Aqvist JPC 1990,94,8021. (adapted) MG 0.7926 0.8947 Mg2+ Aqvist JPC 1990,94,8021.(adapted) C0 1.7131 0.459789 Ca2+ Aqvist JPC 1990,94,8021.(adapted) Zn 1.10 0.0125 Zn2+, Merz,PAK, JACS,113,8262,(1991) F 1.75 0.061 Gough et al. JCC 13,(1992),963. Cl 1.948 0.265 Fox, JPCB,102,8070,(98),flex.mdl CHCl3 Br 2.22 0.320 Junmei(?) I 2.35 0.40 JCC,7,(1986),230; IB 5.0 0.1 solvated ion for vacuum approximation End Begin INPUT FOR THE NON-BONDED 6-12 POTENTIAL PARAMETERS TYPE OF POTENTIAL : 6-12 potentials coefficients A(A/r**12) and C(C/r**6) HH 0.0000 1.000 End GabeditSrc250/utils/MolecularMechanics/CC.c0000644000175100017510000033114313130665226021030 0ustar alloucheallouche#include #include #include #include /************************************************************/ void createTitleResidueTpl(FILE* fout) { fprintf(fout,"Begin Title\n"); fprintf(fout," Residue : PDB type atom Amber type atom charge of atom\n"); fprintf(fout,"End\n"); } /************************************************************/ void createListResidueTpl(FILE* fout) { fprintf(fout,"Begin Residue List\n"); fprintf(fout,"HOH\n"); fprintf(fout,"T3P\n"); fprintf(fout,"T3H\n"); fprintf(fout,"T4P\n"); fprintf(fout,"T4E\n"); fprintf(fout,"T5P\n"); fprintf(fout,"IB+\n"); fprintf(fout,"Ca+\n"); fprintf(fout,"Cl-\n"); fprintf(fout,"Na+\n"); fprintf(fout,"Mg+\n"); fprintf(fout,"K+\n"); fprintf(fout,"Rb+\n"); fprintf(fout,"Cs+\n"); fprintf(fout,"Li+\n"); fprintf(fout,"Zn+\n"); fprintf(fout,"Sr+\n"); fprintf(fout,"Ba+\n"); fprintf(fout,"URE\n"); fprintf(fout,"ACE\n"); fprintf(fout,"NME\n"); fprintf(fout,"NHE\n"); fprintf(fout,"NH2\n"); fprintf(fout,"ALA\n"); fprintf(fout,"GLY\n"); fprintf(fout,"SER\n"); fprintf(fout,"THR\n"); fprintf(fout,"LEU\n"); fprintf(fout,"ILE\n"); fprintf(fout,"VAL\n"); fprintf(fout,"ASN\n"); fprintf(fout,"GLN\n"); fprintf(fout,"ARG\n"); fprintf(fout,"HID\n"); fprintf(fout,"HIE\n"); fprintf(fout,"HIP\n"); fprintf(fout,"TRP\n"); fprintf(fout,"PHE\n"); fprintf(fout,"TYR\n"); fprintf(fout,"GLU\n"); fprintf(fout,"ASP\n"); fprintf(fout,"LYP\n"); fprintf(fout,"ORN\n"); fprintf(fout,"DAB\n"); fprintf(fout,"LYN\n"); fprintf(fout,"PRO\n"); fprintf(fout,"HYP\n"); fprintf(fout,"CYN\n"); fprintf(fout,"CYM\n"); fprintf(fout,"CYX\n"); fprintf(fout,"CYS2\n"); fprintf(fout,"MET\n"); fprintf(fout,"ASH\n"); fprintf(fout,"GLH\n"); fprintf(fout,"CALA\n"); fprintf(fout,"CGLY\n"); fprintf(fout,"CSER\n"); fprintf(fout,"CTHR\n"); fprintf(fout,"CLEU\n"); fprintf(fout,"CILE\n"); fprintf(fout,"CVAL\n"); fprintf(fout,"CASN\n"); fprintf(fout,"CGLN\n"); fprintf(fout,"CARG\n"); fprintf(fout,"CHID\n"); fprintf(fout,"CHIE\n"); fprintf(fout,"CHIP\n"); fprintf(fout,"CTRP\n"); fprintf(fout,"CPHE\n"); fprintf(fout,"CTYR\n"); fprintf(fout,"CGLU\n"); fprintf(fout,"CASP\n"); fprintf(fout,"CLYP\n"); fprintf(fout,"CPRO\n"); fprintf(fout,"CCYN\n"); fprintf(fout,"CCYX\n"); fprintf(fout,"CMET\n"); fprintf(fout,"NALA\n"); fprintf(fout,"NGLY\n"); fprintf(fout,"NSER\n"); fprintf(fout,"NTHR\n"); fprintf(fout,"NLEU\n"); fprintf(fout,"NILE\n"); fprintf(fout,"NVAL\n"); fprintf(fout,"NASN\n"); fprintf(fout,"NGLN\n"); fprintf(fout,"NARG\n"); fprintf(fout,"NHID\n"); fprintf(fout,"NHIE\n"); fprintf(fout,"NHIP\n"); fprintf(fout,"NTRP\n"); fprintf(fout,"NPHE\n"); fprintf(fout,"NTYR\n"); fprintf(fout,"NGLU\n"); fprintf(fout,"NASP\n"); fprintf(fout,"NLYP\n"); fprintf(fout,"NPRO\n"); fprintf(fout,"NCYN\n"); fprintf(fout,"NCYX\n"); fprintf(fout,"NMET\n"); fprintf(fout,"DA5\n"); fprintf(fout,"DA\n"); fprintf(fout,"DA3\n"); fprintf(fout,"DAN\n"); fprintf(fout,"RA5\n"); fprintf(fout,"RA\n"); fprintf(fout,"RA3\n"); fprintf(fout,"RAN\n"); fprintf(fout,"DT5\n"); fprintf(fout,"DT\n"); fprintf(fout,"DT3\n"); fprintf(fout,"DTN\n"); fprintf(fout,"RU5\n"); fprintf(fout,"RU\n"); fprintf(fout,"RU3\n"); fprintf(fout,"RUN\n"); fprintf(fout,"DG5\n"); fprintf(fout,"DG\n"); fprintf(fout,"DG3\n"); fprintf(fout,"DGN\n"); fprintf(fout,"RG5\n"); fprintf(fout,"RG\n"); fprintf(fout,"RG3\n"); fprintf(fout,"RGN\n"); fprintf(fout,"DC5\n"); fprintf(fout,"DC\n"); fprintf(fout,"DC3\n"); fprintf(fout,"DCN\n"); fprintf(fout,"RC5\n"); fprintf(fout,"RC\n"); fprintf(fout,"RC3\n"); fprintf(fout,"RCN\n"); fprintf(fout,"End\n"); } /************************************************************/ void createResidueTpl(FILE* fout) { fprintf(fout,"Begin HOH Residue\n"); fprintf(fout,"OW OW -0.834\n"); fprintf(fout,"HW1 HW 0.417 \n"); fprintf(fout,"HW2 HW 0.417 \n"); fprintf(fout,"End\n"); fprintf(fout,"Begin T3P Residue\n"); fprintf(fout,"OW OW -0.834\n"); fprintf(fout,"HW1 HW 0.417 \n"); fprintf(fout,"HW2 HW 0.417 \n"); fprintf(fout,"End\n"); fprintf(fout,"Begin T3H Residue\n"); fprintf(fout,"OW OW -0.834\n"); fprintf(fout,"HW1 HW 0.417 \n"); fprintf(fout,"HW2 HW 0.417 \n"); fprintf(fout,"End\n"); fprintf(fout,"Begin T4P Residue\n"); fprintf(fout,"OW OW 0.000 \n"); fprintf(fout,"HW2 HW 0.520 \n"); fprintf(fout,"HW3 HW 0.520 \n"); fprintf(fout,"MW4 MW -1.040\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin T4E Residue\n"); fprintf(fout,"OW OW 0.000 \n"); fprintf(fout,"HW1 HW 0.52422\n"); fprintf(fout,"HW2 HW 0.52422\n"); fprintf(fout,"MW MW -1.04844\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin T5P Residue\n"); fprintf(fout,"OW OW 0.000 \n"); fprintf(fout,"HW1 HW 0.241 \n"); fprintf(fout,"HW2 HW 0.241 \n"); fprintf(fout,"LP1 MW -0.241\n"); fprintf(fout,"LP2 MW -0.241\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin IB+ Residue\n"); fprintf(fout,"IB IB 1.00000\n"); fprintf(fout,"IB IB 1.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Ca+ Residue\n"); fprintf(fout,"Ca Ca 2.00000\n"); fprintf(fout,"Ca Ca 2.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Cl- Residue\n"); fprintf(fout,"Cl Cl -1.00000\n"); fprintf(fout,"Cl Cl -1.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Na+ Residue\n"); fprintf(fout,"Na Na 1.00000\n"); fprintf(fout,"Na Na 1.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Mg+ Residue\n"); fprintf(fout,"Mg Mg 2.00000\n"); fprintf(fout,"Mg Mg 2.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin K+ Residue\n"); fprintf(fout,"K K 1.00000\n"); fprintf(fout,"K K 1.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Rb+ Residue\n"); fprintf(fout,"Rb Rb 1.00000\n"); fprintf(fout,"Rb Rb 1.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Cs+ Residue\n"); fprintf(fout,"CS Cs 1.00000\n"); fprintf(fout,"CS Cs 1.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Li+ Residue\n"); fprintf(fout,"Li Li 1.00000\n"); fprintf(fout,"Li Li 1.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Zn+ Residue\n"); fprintf(fout,"Zn Zn 2.00000\n"); fprintf(fout,"Zn Zn 2.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Sr+ Residue\n"); fprintf(fout,"Sr Sr 2.00000\n"); fprintf(fout,"Sr Sr 2.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin Ba+ Residue\n"); fprintf(fout,"Ba Ba 2.00000\n"); fprintf(fout,"Ba Ba 2.00000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin URE Residue\n"); fprintf(fout,"C C 0.880229\n"); fprintf(fout,"O O -0.613359\n"); fprintf(fout,"N1 N -0.923545\n"); fprintf(fout,"H11 H 0.395055\n"); fprintf(fout,"H12 H 0.395055\n"); fprintf(fout,"N2 N -0.923545\n"); fprintf(fout,"H21 H 0.395055\n"); fprintf(fout,"H22 H 0.395055\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin ACE Residue\n"); fprintf(fout,"HH31 HC 0.11230\n"); fprintf(fout,"CH3 CT -0.36620\n"); fprintf(fout,"HH32 HC 0.11230\n"); fprintf(fout,"HH33 HC 0.11230\n"); fprintf(fout,"C C 0.59720\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NME Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CH3 CT -0.14900\n"); fprintf(fout,"HH31 H1 0.09760\n"); fprintf(fout,"HH32 H1 0.09760\n"); fprintf(fout,"HH33 H1 0.09760\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NHE Residue\n"); fprintf(fout,"N N -0.46300\n"); fprintf(fout,"H1 H 0.23150\n"); fprintf(fout,"H2 H 0.23150\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NH2 Residue\n"); fprintf(fout,"N N -0.46300\n"); fprintf(fout,"H1 H 0.23150\n"); fprintf(fout,"H2 H 0.23150\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin ALA Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT 0.03370\n"); fprintf(fout,"HA H1 0.08230\n"); fprintf(fout,"CB CT -0.18250\n"); fprintf(fout,"HB1 HC 0.06030\n"); fprintf(fout,"HB2 HC 0.06030\n"); fprintf(fout,"HB3 HC 0.06030\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin GLY Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.02520\n"); fprintf(fout,"HA1 H1 0.06980\n"); fprintf(fout,"HA2 H1 0.06980\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin SER Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.02490\n"); fprintf(fout,"HA H1 0.08430\n"); fprintf(fout,"CB CT 0.21170\n"); fprintf(fout,"HB1 H1 0.03520\n"); fprintf(fout,"HB2 H1 0.03520\n"); fprintf(fout,"OG OH -0.65460\n"); fprintf(fout,"HG HO 0.42750\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin THR Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.03890\n"); fprintf(fout,"HA H1 0.10070\n"); fprintf(fout,"CB CT 0.36540\n"); fprintf(fout,"HB H1 0.00430\n"); fprintf(fout,"CG2 CT -0.24380\n"); fprintf(fout,"HG21 HC 0.06420\n"); fprintf(fout,"HG22 HC 0.06420\n"); fprintf(fout,"HG23 HC 0.06420\n"); fprintf(fout,"OG1 OH -0.67610\n"); fprintf(fout,"HG1 HO 0.41020\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin LEU Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.05180\n"); fprintf(fout,"HA H1 0.09220\n"); fprintf(fout,"CB CT -0.11020\n"); fprintf(fout,"HB1 HC 0.04570\n"); fprintf(fout,"HB2 HC 0.04570\n"); fprintf(fout,"CG CT 0.35310\n"); fprintf(fout,"HG HC -0.03610\n"); fprintf(fout,"CD1 CT -0.41210\n"); fprintf(fout,"HD11 HC 0.10000\n"); fprintf(fout,"HD12 HC 0.10000\n"); fprintf(fout,"HD13 HC 0.10000\n"); fprintf(fout,"CD2 CT -0.41210\n"); fprintf(fout,"HD21 HC 0.10000\n"); fprintf(fout,"HD22 HC 0.10000\n"); fprintf(fout,"HD23 HC 0.10000\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin ILE Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.05970\n"); fprintf(fout,"HA H1 0.08690\n"); fprintf(fout,"CB CT 0.13030\n"); fprintf(fout,"HB HC 0.01870\n"); fprintf(fout,"CG2 CT -0.32040\n"); fprintf(fout,"HG21 HC 0.08820\n"); fprintf(fout,"HG22 HC 0.08820\n"); fprintf(fout,"HG23 HC 0.08820\n"); fprintf(fout,"CG1 CT -0.04300\n"); fprintf(fout,"HG11 HC 0.02360\n"); fprintf(fout,"HG12 HC 0.02360\n"); fprintf(fout,"CD CT -0.06600\n"); fprintf(fout,"HD1 HC 0.01860\n"); fprintf(fout,"HD2 HC 0.01860\n"); fprintf(fout,"HD3 HC 0.01860\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin VAL Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.08750\n"); fprintf(fout,"HA H1 0.09690\n"); fprintf(fout,"CB CT 0.29850\n"); fprintf(fout,"HB HC -0.02970\n"); fprintf(fout,"CG1 CT -0.31920\n"); fprintf(fout,"HG11 HC 0.07910\n"); fprintf(fout,"HG12 HC 0.07910\n"); fprintf(fout,"HG13 HC 0.07910\n"); fprintf(fout,"CG2 CT -0.31920\n"); fprintf(fout,"HG21 HC 0.07910\n"); fprintf(fout,"HG22 HC 0.07910\n"); fprintf(fout,"HG23 HC 0.07910\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin ASN Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT 0.01430\n"); fprintf(fout,"HA H1 0.10480\n"); fprintf(fout,"CB CT -0.20410\n"); fprintf(fout,"HB1 HC 0.07970\n"); fprintf(fout,"HB2 HC 0.07970\n"); fprintf(fout,"CG C 0.71300\n"); fprintf(fout,"OD1 O -0.59310\n"); fprintf(fout,"ND2 N -0.91910\n"); fprintf(fout,"HD21 H 0.41960\n"); fprintf(fout,"HD22 H 0.41960\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin GLN Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.00310\n"); fprintf(fout,"HA H1 0.08500\n"); fprintf(fout,"CB CT -0.00360\n"); fprintf(fout,"HB1 HC 0.01710\n"); fprintf(fout,"HB2 HC 0.01710\n"); fprintf(fout,"CG CT -0.06450\n"); fprintf(fout,"HG1 HC 0.03520\n"); fprintf(fout,"HG2 HC 0.03520\n"); fprintf(fout,"CD C 0.69510\n"); fprintf(fout,"OE1 O -0.60860\n"); fprintf(fout,"NE2 N -0.94070\n"); fprintf(fout,"HE21 H 0.42510\n"); fprintf(fout,"HE22 H 0.42510\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin ARG Residue\n"); fprintf(fout,"N N -0.34790\n"); fprintf(fout,"H H 0.27470\n"); fprintf(fout,"CA CT -0.26370\n"); fprintf(fout,"HA H1 0.15600\n"); fprintf(fout,"CB CT -0.00070\n"); fprintf(fout,"HB1 HC 0.03270\n"); fprintf(fout,"HB2 HC 0.03270\n"); fprintf(fout,"CG CT 0.03900\n"); fprintf(fout,"HG1 HC 0.02850\n"); fprintf(fout,"HG2 HC 0.02850\n"); fprintf(fout,"CD CT 0.04860\n"); fprintf(fout,"HD1 H1 0.06870\n"); fprintf(fout,"HD2 H1 0.06870\n"); fprintf(fout,"NE N2 -0.52950\n"); fprintf(fout,"HE H 0.34560\n"); fprintf(fout,"CZ CA 0.80760\n"); fprintf(fout,"NH1 N2 -0.86270\n"); fprintf(fout,"HH11 H 0.44780\n"); fprintf(fout,"HH12 H 0.44780\n"); fprintf(fout,"NH2 N2 -0.86270\n"); fprintf(fout,"HH21 H 0.44780\n"); fprintf(fout,"HH22 H 0.44780\n"); fprintf(fout,"C C 0.73410\n"); fprintf(fout,"O O -0.58940\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HID Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT 0.01880\n"); fprintf(fout,"HA H1 0.08810\n"); fprintf(fout,"CB CT -0.04620\n"); fprintf(fout,"HB1 HC 0.04020\n"); fprintf(fout,"HB2 HC 0.04020\n"); fprintf(fout,"CG CC -0.02660\n"); fprintf(fout,"ND1 NA -0.38110\n"); fprintf(fout,"HD1 H 0.36490\n"); fprintf(fout,"CE1 CR 0.20570\n"); fprintf(fout,"HE1 H5 0.13920\n"); fprintf(fout,"NE2 NB -0.57270\n"); fprintf(fout,"CD2 CV 0.12920\n"); fprintf(fout,"HD2 H4 0.11470\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HIE Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.05810\n"); fprintf(fout,"HA H1 0.13600\n"); fprintf(fout,"CB CT -0.00740\n"); fprintf(fout,"HB1 HC 0.03670\n"); fprintf(fout,"HB2 HC 0.03670\n"); fprintf(fout,"CG CC 0.18680\n"); fprintf(fout,"ND1 NB -0.54320\n"); fprintf(fout,"CE1 CR 0.16350\n"); fprintf(fout,"HE1 H5 0.14350\n"); fprintf(fout,"NE2 NA -0.27950\n"); fprintf(fout,"HE2 H 0.33390\n"); fprintf(fout,"CD2 CW -0.22070\n"); fprintf(fout,"HD2 H4 0.18620\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HIP Residue\n"); fprintf(fout,"N N -0.34790\n"); fprintf(fout,"H H 0.27470\n"); fprintf(fout,"CA CT -0.13540\n"); fprintf(fout,"HA H1 0.12120\n"); fprintf(fout,"CB CT -0.04140\n"); fprintf(fout,"HB1 HC 0.08100\n"); fprintf(fout,"HB2 HC 0.08100\n"); fprintf(fout,"CG CC -0.00120\n"); fprintf(fout,"ND1 NA -0.15130\n"); fprintf(fout,"HD1 H 0.38660\n"); fprintf(fout,"CE1 CR -0.01700\n"); fprintf(fout,"HE1 H5 0.26810\n"); fprintf(fout,"NE2 NA -0.17180\n"); fprintf(fout,"HE2 H 0.39110\n"); fprintf(fout,"CD2 CW -0.11410\n"); fprintf(fout,"HD2 H4 0.23170\n"); fprintf(fout,"C C 0.73410\n"); fprintf(fout,"O O -0.58940\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin TRP Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.02750\n"); fprintf(fout,"HA H1 0.11230\n"); fprintf(fout,"CB CT -0.00500\n"); fprintf(fout,"HB1 HC 0.03390\n"); fprintf(fout,"HB2 HC 0.03390\n"); fprintf(fout,"CG C* -0.14150\n"); fprintf(fout,"CD1 CW -0.16380\n"); fprintf(fout,"HD1 H4 0.20620\n"); fprintf(fout,"NE1 NA -0.34180\n"); fprintf(fout,"HE1 H 0.34120\n"); fprintf(fout,"CE2 CN 0.13800\n"); fprintf(fout,"CZ2 CA -0.26010\n"); fprintf(fout,"HZ2 HA 0.15720\n"); fprintf(fout,"CH2 CA -0.11340\n"); fprintf(fout,"HH2 HA 0.14170\n"); fprintf(fout,"CZ3 CA -0.19720\n"); fprintf(fout,"HZ3 HA 0.14470\n"); fprintf(fout,"CE3 CA -0.23870\n"); fprintf(fout,"HE3 HA 0.17000\n"); fprintf(fout,"CD2 CB 0.12430\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin PHE Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.00240\n"); fprintf(fout,"HA H1 0.09780\n"); fprintf(fout,"CB CT -0.03430\n"); fprintf(fout,"HB1 HC 0.02950\n"); fprintf(fout,"HB2 HC 0.02950\n"); fprintf(fout,"CG CA 0.01180\n"); fprintf(fout,"CD1 CA -0.12560\n"); fprintf(fout,"HD1 HA 0.13300\n"); fprintf(fout,"CE1 CA -0.17040\n"); fprintf(fout,"HE1 HA 0.14300\n"); fprintf(fout,"CZ CA -0.10720\n"); fprintf(fout,"HZ HA 0.12970\n"); fprintf(fout,"CE2 CA -0.17040\n"); fprintf(fout,"HE2 HA 0.14300\n"); fprintf(fout,"CD2 CA -0.12560\n"); fprintf(fout,"HD2 HA 0.13300\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin TYR Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.00140\n"); fprintf(fout,"HA H1 0.08760\n"); fprintf(fout,"CB CT -0.01520\n"); fprintf(fout,"HB1 HC 0.02950\n"); fprintf(fout,"HB2 HC 0.02950\n"); fprintf(fout,"CG CA -0.00110\n"); fprintf(fout,"CD1 CA -0.19060\n"); fprintf(fout,"HD1 HA 0.16990\n"); fprintf(fout,"CE1 CA -0.23410\n"); fprintf(fout,"HE1 HA 0.16560\n"); fprintf(fout,"CZ C 0.32260\n"); fprintf(fout,"OH OH -0.55790\n"); fprintf(fout,"HH HO 0.39920\n"); fprintf(fout,"CE2 CA -0.23410\n"); fprintf(fout,"HE2 HA 0.16560\n"); fprintf(fout,"CD2 CA -0.19060\n"); fprintf(fout,"HD2 HA 0.16990\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin GLU Residue\n"); fprintf(fout,"N N -0.51630\n"); fprintf(fout,"H H 0.29360\n"); fprintf(fout,"CA CT 0.03970\n"); fprintf(fout,"HA H1 0.11050\n"); fprintf(fout,"CB CT 0.05600\n"); fprintf(fout,"HB1 HC -0.01730\n"); fprintf(fout,"HB2 HC -0.01730\n"); fprintf(fout,"CG CT 0.01360\n"); fprintf(fout,"HG1 HC -0.04250\n"); fprintf(fout,"HG2 HC -0.04250\n"); fprintf(fout,"CD C 0.80540\n"); fprintf(fout,"OE1 O2 -0.81880\n"); fprintf(fout,"OE2 O2 -0.81880\n"); fprintf(fout,"C C 0.53660\n"); fprintf(fout,"O O -0.58190\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin ASP Residue\n"); fprintf(fout,"N N -0.51630\n"); fprintf(fout,"H H 0.29360\n"); fprintf(fout,"CA CT 0.03810\n"); fprintf(fout,"HA H1 0.08800\n"); fprintf(fout,"CB CT -0.03030\n"); fprintf(fout,"HB1 HC -0.01220\n"); fprintf(fout,"HB2 HC -0.01220\n"); fprintf(fout,"CG C 0.79940\n"); fprintf(fout,"OD1 O2 -0.80140\n"); fprintf(fout,"OD2 O2 -0.80140\n"); fprintf(fout,"C C 0.53660\n"); fprintf(fout,"O O -0.58190\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin LYP Residue\n"); fprintf(fout,"N N -0.34790\n"); fprintf(fout,"H H 0.27470\n"); fprintf(fout,"CA CT -0.24000\n"); fprintf(fout,"HA H1 0.14260\n"); fprintf(fout,"CB CT -0.00940\n"); fprintf(fout,"HB1 HC 0.03620\n"); fprintf(fout,"HB2 HC 0.03620\n"); fprintf(fout,"CG CT 0.01870\n"); fprintf(fout,"HG1 HC 0.01030\n"); fprintf(fout,"HG2 HC 0.01030\n"); fprintf(fout,"CD CT -0.04790\n"); fprintf(fout,"HD1 HC 0.06210\n"); fprintf(fout,"HD2 HC 0.06210\n"); fprintf(fout,"CE CT -0.01430\n"); fprintf(fout,"HE1 HP 0.11350\n"); fprintf(fout,"HE2 HP 0.11350\n"); fprintf(fout,"NZ N3 -0.38540\n"); fprintf(fout,"HZ1 H 0.34000\n"); fprintf(fout,"HZ2 H 0.34000\n"); fprintf(fout,"HZ3 H 0.34000\n"); fprintf(fout,"C C 0.73410\n"); fprintf(fout,"O O -0.58940\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin ORN Residue\n"); fprintf(fout,"N N -0.34790\n"); fprintf(fout,"H H 0.27470\n"); fprintf(fout,"CA CT -0.24000\n"); fprintf(fout,"HA H1 0.14260\n"); fprintf(fout,"CB CT 0.00990\n"); fprintf(fout,"HB1 HC 0.03620\n"); fprintf(fout,"HB2 HC 0.03620\n"); fprintf(fout,"CG CT -0.02790\n"); fprintf(fout,"HG1 HC 0.06210\n"); fprintf(fout,"HG2 HC 0.06210\n"); fprintf(fout,"CD CT -0.01430\n"); fprintf(fout,"HD1 HP 0.11350\n"); fprintf(fout,"HD2 HP 0.11350\n"); fprintf(fout,"NE N3 -0.38540\n"); fprintf(fout,"HE1 H 0.34000\n"); fprintf(fout,"HE2 H 0.34000\n"); fprintf(fout,"HE3 H 0.34000\n"); fprintf(fout,"C C 0.73410\n"); fprintf(fout,"O O -0.58940\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DAB Residue\n"); fprintf(fout,"N N -0.34790\n"); fprintf(fout,"H H 0.27470\n"); fprintf(fout,"CA CT -0.24000\n"); fprintf(fout,"HA H1 0.14260\n"); fprintf(fout,"CB CT 0.02920\n"); fprintf(fout,"HB1 HC 0.07470\n"); fprintf(fout,"HB2 HC 0.07470\n"); fprintf(fout,"CG CT -0.01430\n"); fprintf(fout,"HG1 HP 0.11350\n"); fprintf(fout,"HG2 HP 0.11350\n"); fprintf(fout,"ND N3 -0.38540\n"); fprintf(fout,"HD1 H 0.34000\n"); fprintf(fout,"HD2 H 0.34000\n"); fprintf(fout,"HD3 H 0.34000\n"); fprintf(fout,"C C 0.73410\n"); fprintf(fout,"O O -0.58940\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin LYN Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.07206\n"); fprintf(fout,"HA H1 0.09940\n"); fprintf(fout,"CB CT -0.04845\n"); fprintf(fout,"HB1 HC 0.03400\n"); fprintf(fout,"HB2 HC 0.03400\n"); fprintf(fout,"CG CT 0.06612\n"); fprintf(fout,"HG1 HC 0.01041\n"); fprintf(fout,"HG2 HC 0.01041\n"); fprintf(fout,"CD CT -0.03768\n"); fprintf(fout,"HD1 HC 0.01155\n"); fprintf(fout,"HD2 HC 0.01155\n"); fprintf(fout,"CE CT 0.32604\n"); fprintf(fout,"HE1 HP -0.03358\n"); fprintf(fout,"HE2 HP -0.03358\n"); fprintf(fout,"NZ N3 -1.03581\n"); fprintf(fout,"HZ1 H 0.38604\n"); fprintf(fout,"HZ2 H 0.38604\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin PRO Residue\n"); fprintf(fout,"N N -0.25480\n"); fprintf(fout,"CD CT 0.01920\n"); fprintf(fout,"HD1 H1 0.03910\n"); fprintf(fout,"HD2 H1 0.03910\n"); fprintf(fout,"CG CT 0.01890\n"); fprintf(fout,"HG1 HC 0.02130\n"); fprintf(fout,"HG2 HC 0.02130\n"); fprintf(fout,"CB CT -0.00700\n"); fprintf(fout,"HB1 HC 0.02530\n"); fprintf(fout,"HB2 HC 0.02530\n"); fprintf(fout,"CA CT -0.02660\n"); fprintf(fout,"HA H1 0.06410\n"); fprintf(fout,"C C 0.58960\n"); fprintf(fout,"O O -0.57480\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin HYP Residue\n"); fprintf(fout,"N N -0.25480\n"); fprintf(fout,"CD2 CT 0.05950\n"); fprintf(fout,"HD21 H1 0.07000\n"); fprintf(fout,"HD22 H1 0.07000\n"); fprintf(fout,"CG CT 0.04000\n"); fprintf(fout,"HG H1 0.04160\n"); fprintf(fout,"OD1 OH -0.61340\n"); fprintf(fout,"HD1 HO 0.38510\n"); fprintf(fout,"CB CT 0.02030\n"); fprintf(fout,"HB1 HC 0.04260\n"); fprintf(fout,"HB2 HC 0.04260\n"); fprintf(fout,"CA CT 0.00470\n"); fprintf(fout,"HA H1 0.07700\n"); fprintf(fout,"C C 0.58960\n"); fprintf(fout,"O O -0.57480\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CYN Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT 0.02130\n"); fprintf(fout,"HA H1 0.11240\n"); fprintf(fout,"CB CT -0.12310\n"); fprintf(fout,"HB1 H1 0.11120\n"); fprintf(fout,"HB2 H1 0.11120\n"); fprintf(fout,"SG SH -0.31190\n"); fprintf(fout,"HG HS 0.19330\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CYM Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.03510\n"); fprintf(fout,"HA H1 0.05080\n"); fprintf(fout,"CB CT -0.24130\n"); fprintf(fout,"HB1 H1 0.11220\n"); fprintf(fout,"HB2 H1 0.11220\n"); fprintf(fout,"SG SH -0.88440\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CYX Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT 0.04290\n"); fprintf(fout,"HA H1 0.07660\n"); fprintf(fout,"CB CT -0.07900\n"); fprintf(fout,"HB1 H1 0.09100\n"); fprintf(fout,"HB2 H1 0.09100\n"); fprintf(fout,"SG S -0.10810\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CYS2 Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT 0.04290\n"); fprintf(fout,"HA H1 0.07660\n"); fprintf(fout,"CB CT -0.07900\n"); fprintf(fout,"HB1 H1 0.09100\n"); fprintf(fout,"HB2 H1 0.09100\n"); fprintf(fout,"SG S -0.10810\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin MET Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT -0.02370\n"); fprintf(fout,"HA H1 0.08800\n"); fprintf(fout,"CB CT 0.03420\n"); fprintf(fout,"HB1 HC 0.02410\n"); fprintf(fout,"HB2 HC 0.02410\n"); fprintf(fout,"CG CT 0.00180\n"); fprintf(fout,"HG1 H1 0.04400\n"); fprintf(fout,"HG2 H1 0.04400\n"); fprintf(fout,"SD S -0.27370\n"); fprintf(fout,"CE CT -0.05360\n"); fprintf(fout,"HE1 H1 0.06840\n"); fprintf(fout,"HE2 H1 0.06840\n"); fprintf(fout,"HE3 H1 0.06840\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin ASH Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT 0.03410\n"); fprintf(fout,"HA H1 0.08640\n"); fprintf(fout,"CB CT -0.03160\n"); fprintf(fout,"HB1 HC 0.04880\n"); fprintf(fout,"HB2 HC 0.04880\n"); fprintf(fout,"CG C 0.64620\n"); fprintf(fout,"OD1 O -0.55540\n"); fprintf(fout,"OD2 OH -0.63760\n"); fprintf(fout,"HD2 HO 0.47470\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin GLH Residue\n"); fprintf(fout,"N N -0.41570\n"); fprintf(fout,"H H 0.27190\n"); fprintf(fout,"CA CT 0.01450\n"); fprintf(fout,"HA H1 0.07790\n"); fprintf(fout,"CB CT -0.00710\n"); fprintf(fout,"HB1 HC 0.02560\n"); fprintf(fout,"HB2 HC 0.02560\n"); fprintf(fout,"CG CT -0.01740\n"); fprintf(fout,"HG1 HC 0.04300\n"); fprintf(fout,"HG2 HC 0.04300\n"); fprintf(fout,"CD C 0.68010\n"); fprintf(fout,"OE1 O -0.58380\n"); fprintf(fout,"OE2 OH -0.65110\n"); fprintf(fout,"HE2 HO 0.46410\n"); fprintf(fout,"C C 0.59730\n"); fprintf(fout,"O O -0.56790\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CALA Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.17470\n"); fprintf(fout,"HA H1 0.10670\n"); fprintf(fout,"CB CT -0.20930\n"); fprintf(fout,"HB1 HC 0.07640\n"); fprintf(fout,"HB2 HC 0.07640\n"); fprintf(fout,"HB3 HC 0.07640\n"); fprintf(fout,"C C 0.77310\n"); fprintf(fout,"OC1 O2 -0.80550\n"); fprintf(fout,"OC2 O2 -0.80550\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CGLY Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.24930\n"); fprintf(fout,"HA1 H1 0.10560\n"); fprintf(fout,"HA2 H1 0.10560\n"); fprintf(fout,"C C 0.72310\n"); fprintf(fout,"OC1 O2 -0.78550\n"); fprintf(fout,"OC2 O2 -0.78550\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CSER Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.27220\n"); fprintf(fout,"HA H1 0.13040\n"); fprintf(fout,"CB CT 0.11230\n"); fprintf(fout,"HB1 H1 0.08130\n"); fprintf(fout,"HB2 H1 0.08130\n"); fprintf(fout,"OG OH -0.65140\n"); fprintf(fout,"HG HO 0.44740\n"); fprintf(fout,"C C 0.81130\n"); fprintf(fout,"OC1 O2 -0.81320\n"); fprintf(fout,"OC2 O2 -0.81320\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CTHR Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.24200\n"); fprintf(fout,"HA H1 0.12070\n"); fprintf(fout,"CB CT 0.30250\n"); fprintf(fout,"HB H1 0.00780\n"); fprintf(fout,"CG2 CT -0.18530\n"); fprintf(fout,"HG21 HC 0.05860\n"); fprintf(fout,"HG22 HC 0.05860\n"); fprintf(fout,"HG23 HC 0.05860\n"); fprintf(fout,"OG1 OH -0.64960\n"); fprintf(fout,"HG1 HO 0.41190\n"); fprintf(fout,"C C 0.78100\n"); fprintf(fout,"OC1 O2 -0.80440\n"); fprintf(fout,"OC2 O2 -0.80440\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CLEU Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.28470\n"); fprintf(fout,"HA H1 0.13460\n"); fprintf(fout,"CB CT -0.24690\n"); fprintf(fout,"HB1 HC 0.09740\n"); fprintf(fout,"HB2 HC 0.09740\n"); fprintf(fout,"CG CT 0.37060\n"); fprintf(fout,"HG HC -0.03740\n"); fprintf(fout,"CD1 CT -0.41630\n"); fprintf(fout,"HD11 HC 0.10380\n"); fprintf(fout,"HD12 HC 0.10380\n"); fprintf(fout,"HD13 HC 0.10380\n"); fprintf(fout,"CD2 CT -0.41630\n"); fprintf(fout,"HD21 HC 0.10380\n"); fprintf(fout,"HD22 HC 0.10380\n"); fprintf(fout,"HD23 HC 0.10380\n"); fprintf(fout,"C C 0.83260\n"); fprintf(fout,"OC1 O2 -0.81990\n"); fprintf(fout,"OC2 O2 -0.81990\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CILE Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.31000\n"); fprintf(fout,"HA H1 0.13750\n"); fprintf(fout,"CB CT 0.03630\n"); fprintf(fout,"HB HC 0.07660\n"); fprintf(fout,"CG2 CT -0.34980\n"); fprintf(fout,"HG21 HC 0.10210\n"); fprintf(fout,"HG22 HC 0.10210\n"); fprintf(fout,"HG23 HC 0.10210\n"); fprintf(fout,"CG1 CT -0.03230\n"); fprintf(fout,"HG11 HC 0.03210\n"); fprintf(fout,"HG12 HC 0.03210\n"); fprintf(fout,"CD CT -0.06990\n"); fprintf(fout,"HD1 HC 0.01960\n"); fprintf(fout,"HD2 HC 0.01960\n"); fprintf(fout,"HD3 HC 0.01960\n"); fprintf(fout,"C C 0.83430\n"); fprintf(fout,"OC1 O2 -0.81900\n"); fprintf(fout,"OC2 O2 -0.81900\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CVAL Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.34380\n"); fprintf(fout,"HA H1 0.14380\n"); fprintf(fout,"CB CT 0.19400\n"); fprintf(fout,"HB HC 0.03080\n"); fprintf(fout,"CG1 CT -0.30640\n"); fprintf(fout,"HG11 HC 0.08360\n"); fprintf(fout,"HG12 HC 0.08360\n"); fprintf(fout,"HG13 HC 0.08360\n"); fprintf(fout,"CG2 CT -0.30640\n"); fprintf(fout,"HG21 HC 0.08360\n"); fprintf(fout,"HG22 HC 0.08360\n"); fprintf(fout,"HG23 HC 0.08360\n"); fprintf(fout,"C C 0.83500\n"); fprintf(fout,"OC1 O2 -0.81730\n"); fprintf(fout,"OC2 O2 -0.81730\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CASN Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.20800\n"); fprintf(fout,"HA H1 0.13580\n"); fprintf(fout,"CB CT -0.22990\n"); fprintf(fout,"HB1 HC 0.10230\n"); fprintf(fout,"HB2 HC 0.10230\n"); fprintf(fout,"CG C 0.71530\n"); fprintf(fout,"OD1 O -0.60100\n"); fprintf(fout,"ND2 N -0.90840\n"); fprintf(fout,"HD21 H 0.41500\n"); fprintf(fout,"HD22 H 0.41500\n"); fprintf(fout,"C C 0.80500\n"); fprintf(fout,"OC1 O2 -0.81470\n"); fprintf(fout,"OC2 O2 -0.81470\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CGLN Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.22480\n"); fprintf(fout,"HA H1 0.12320\n"); fprintf(fout,"CB CT -0.06640\n"); fprintf(fout,"HB1 HC 0.04520\n"); fprintf(fout,"HB2 HC 0.04520\n"); fprintf(fout,"CG CT -0.02100\n"); fprintf(fout,"HG1 HC 0.02030\n"); fprintf(fout,"HG2 HC 0.02030\n"); fprintf(fout,"CD C 0.70930\n"); fprintf(fout,"OE1 O -0.60980\n"); fprintf(fout,"NE2 N -0.95740\n"); fprintf(fout,"HE21 H 0.43040\n"); fprintf(fout,"HE22 H 0.43040\n"); fprintf(fout,"C C 0.77750\n"); fprintf(fout,"OC1 O2 -0.80420\n"); fprintf(fout,"OC2 O2 -0.80420\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CARG Residue\n"); fprintf(fout,"N N -0.34810\n"); fprintf(fout,"H H 0.27640\n"); fprintf(fout,"CA CT -0.30680\n"); fprintf(fout,"HA H1 0.14470\n"); fprintf(fout,"CB CT -0.03740\n"); fprintf(fout,"HB1 HC 0.03710\n"); fprintf(fout,"HB2 HC 0.03710\n"); fprintf(fout,"CG CT 0.07440\n"); fprintf(fout,"HG1 HC 0.01850\n"); fprintf(fout,"HG2 HC 0.01850\n"); fprintf(fout,"CD CT 0.11140\n"); fprintf(fout,"HD1 H1 0.04680\n"); fprintf(fout,"HD2 H1 0.04680\n"); fprintf(fout,"NE N2 -0.55640\n"); fprintf(fout,"HE H 0.34790\n"); fprintf(fout,"CZ CA 0.83680\n"); fprintf(fout,"NH1 N2 -0.87370\n"); fprintf(fout,"HH11 H 0.44930\n"); fprintf(fout,"HH12 H 0.44930\n"); fprintf(fout,"NH2 N2 -0.87370\n"); fprintf(fout,"HH21 H 0.44930\n"); fprintf(fout,"HH22 H 0.44930\n"); fprintf(fout,"C C 0.85570\n"); fprintf(fout,"OC1 O2 -0.82660\n"); fprintf(fout,"OC2 O2 -0.82660\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CHID Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.17390\n"); fprintf(fout,"HA H1 0.11000\n"); fprintf(fout,"CB CT -0.10460\n"); fprintf(fout,"HB1 HC 0.05650\n"); fprintf(fout,"HB2 HC 0.05650\n"); fprintf(fout,"CG CC 0.02930\n"); fprintf(fout,"ND1 NA -0.38920\n"); fprintf(fout,"HD1 H 0.37550\n"); fprintf(fout,"CE1 CR 0.19250\n"); fprintf(fout,"HE1 H5 0.14180\n"); fprintf(fout,"NE2 NB -0.56290\n"); fprintf(fout,"CD2 CV 0.10010\n"); fprintf(fout,"HD2 H4 0.12410\n"); fprintf(fout,"C C 0.76150\n"); fprintf(fout,"OC1 O2 -0.80160\n"); fprintf(fout,"OC2 O2 -0.80160\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CHIE Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.26990\n"); fprintf(fout,"HA H1 0.16500\n"); fprintf(fout,"CB CT -0.10680\n"); fprintf(fout,"HB1 HC 0.06200\n"); fprintf(fout,"HB2 HC 0.06200\n"); fprintf(fout,"CG CC 0.27240\n"); fprintf(fout,"ND1 NB -0.55170\n"); fprintf(fout,"CE1 CR 0.15580\n"); fprintf(fout,"HE1 H5 0.14480\n"); fprintf(fout,"NE2 NA -0.26700\n"); fprintf(fout,"HE2 H 0.33190\n"); fprintf(fout,"CD2 CW -0.25880\n"); fprintf(fout,"HD2 H4 0.19570\n"); fprintf(fout,"C C 0.79160\n"); fprintf(fout,"OC1 O2 -0.80650\n"); fprintf(fout,"OC2 O2 -0.80650\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CHIP Residue\n"); fprintf(fout,"N N -0.34810\n"); fprintf(fout,"H H 0.27640\n"); fprintf(fout,"CA CT -0.14450\n"); fprintf(fout,"HA H1 0.11150\n"); fprintf(fout,"CB CT -0.08000\n"); fprintf(fout,"HB1 HC 0.08680\n"); fprintf(fout,"HB2 HC 0.08680\n"); fprintf(fout,"CG CC 0.02980\n"); fprintf(fout,"ND1 NA -0.15010\n"); fprintf(fout,"HD1 H 0.38830\n"); fprintf(fout,"CE1 CR -0.02510\n"); fprintf(fout,"HE1 H5 0.26940\n"); fprintf(fout,"NE2 NA -0.16830\n"); fprintf(fout,"HE2 H 0.39130\n"); fprintf(fout,"CD2 CW -0.12560\n"); fprintf(fout,"HD2 H4 0.23360\n"); fprintf(fout,"C C 0.80320\n"); fprintf(fout,"OC1 O2 -0.81770\n"); fprintf(fout,"OC2 O2 -0.81770\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CTRP Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.20840\n"); fprintf(fout,"HA H1 0.12720\n"); fprintf(fout,"CB CT -0.07420\n"); fprintf(fout,"HB1 HC 0.04970\n"); fprintf(fout,"HB2 HC 0.04970\n"); fprintf(fout,"CG C* -0.07960\n"); fprintf(fout,"CD1 CW -0.18080\n"); fprintf(fout,"HD1 H4 0.20430\n"); fprintf(fout,"NE1 NA -0.33160\n"); fprintf(fout,"HE1 H 0.34130\n"); fprintf(fout,"CE2 CN 0.12220\n"); fprintf(fout,"CZ2 CA -0.25940\n"); fprintf(fout,"HZ2 HA 0.15670\n"); fprintf(fout,"CH2 CA -0.10200\n"); fprintf(fout,"HH2 HA 0.14010\n"); fprintf(fout,"CZ3 CA -0.22870\n"); fprintf(fout,"HZ3 HA 0.15070\n"); fprintf(fout,"CE3 CA -0.18370\n"); fprintf(fout,"HE3 HA 0.14910\n"); fprintf(fout,"CD2 CB 0.10780\n"); fprintf(fout,"C C 0.76580\n"); fprintf(fout,"OC1 O2 -0.80110\n"); fprintf(fout,"OC2 O2 -0.80110\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CPHE Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.18250\n"); fprintf(fout,"HA H1 0.10980\n"); fprintf(fout,"CB CT -0.09590\n"); fprintf(fout,"HB1 HC 0.04430\n"); fprintf(fout,"HB2 HC 0.04430\n"); fprintf(fout,"CG CA 0.05520\n"); fprintf(fout,"CD1 CA -0.13000\n"); fprintf(fout,"HD1 HA 0.14080\n"); fprintf(fout,"CE1 CA -0.18470\n"); fprintf(fout,"HE1 HA 0.14610\n"); fprintf(fout,"CZ CA -0.09440\n"); fprintf(fout,"HZ HA 0.12800\n"); fprintf(fout,"CE2 CA -0.18470\n"); fprintf(fout,"HE2 HA 0.14610\n"); fprintf(fout,"CD2 CA -0.13000\n"); fprintf(fout,"HD2 HA 0.14080\n"); fprintf(fout,"C C 0.76600\n"); fprintf(fout,"OC1 O2 -0.80260\n"); fprintf(fout,"OC2 O2 -0.80260\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CTYR Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.20150\n"); fprintf(fout,"HA H1 0.10920\n"); fprintf(fout,"CB CT -0.07520\n"); fprintf(fout,"HB1 HC 0.04900\n"); fprintf(fout,"HB2 HC 0.04900\n"); fprintf(fout,"CG CA 0.02430\n"); fprintf(fout,"CD1 CA -0.19220\n"); fprintf(fout,"HD1 HA 0.17800\n"); fprintf(fout,"CE1 CA -0.24580\n"); fprintf(fout,"HE1 HA 0.16730\n"); fprintf(fout,"CZ C 0.33950\n"); fprintf(fout,"OH OH -0.56430\n"); fprintf(fout,"HH HO 0.40170\n"); fprintf(fout,"CE2 CA -0.24580\n"); fprintf(fout,"HE2 HA 0.16730\n"); fprintf(fout,"CD2 CA -0.19220\n"); fprintf(fout,"HD2 HA 0.17800\n"); fprintf(fout,"C C 0.78170\n"); fprintf(fout,"OC1 O2 -0.80700\n"); fprintf(fout,"OC2 O2 -0.80700\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CGLU Residue\n"); fprintf(fout,"N N -0.51920\n"); fprintf(fout,"H H 0.30550\n"); fprintf(fout,"CA CT -0.20590\n"); fprintf(fout,"HA H1 0.13990\n"); fprintf(fout,"CB CT 0.00710\n"); fprintf(fout,"HB1 HC -0.00780\n"); fprintf(fout,"HB2 HC -0.00780\n"); fprintf(fout,"CG CT 0.06750\n"); fprintf(fout,"HG1 HC -0.05480\n"); fprintf(fout,"HG2 HC -0.05480\n"); fprintf(fout,"CD C 0.81830\n"); fprintf(fout,"OE1 O2 -0.82200\n"); fprintf(fout,"OE2 O2 -0.82200\n"); fprintf(fout,"C C 0.74200\n"); fprintf(fout,"OC1 O2 -0.79300\n"); fprintf(fout,"OC2 O2 -0.79300\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CASP Residue\n"); fprintf(fout,"N N -0.51920\n"); fprintf(fout,"H H 0.30550\n"); fprintf(fout,"CA CT -0.18170\n"); fprintf(fout,"HA H1 0.10460\n"); fprintf(fout,"CB CT -0.06770\n"); fprintf(fout,"HB1 HC -0.02120\n"); fprintf(fout,"HB2 HC -0.02120\n"); fprintf(fout,"CG C 0.88510\n"); fprintf(fout,"OD1 O2 -0.81620\n"); fprintf(fout,"OD2 O2 -0.81620\n"); fprintf(fout,"C C 0.72560\n"); fprintf(fout,"OC1 O2 -0.78870\n"); fprintf(fout,"OC2 O2 -0.78870\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CLYP Residue\n"); fprintf(fout,"N N -0.34810\n"); fprintf(fout,"H H 0.27640\n"); fprintf(fout,"CA CT -0.29030\n"); fprintf(fout,"HA H1 0.14380\n"); fprintf(fout,"CB CT -0.05380\n"); fprintf(fout,"HB1 HC 0.04820\n"); fprintf(fout,"HB2 HC 0.04820\n"); fprintf(fout,"CG CT 0.02270\n"); fprintf(fout,"HG1 HC 0.01340\n"); fprintf(fout,"HG2 HC 0.01340\n"); fprintf(fout,"CD CT -0.03920\n"); fprintf(fout,"HD1 HC 0.06110\n"); fprintf(fout,"HD2 HC 0.06110\n"); fprintf(fout,"CE CT -0.01760\n"); fprintf(fout,"HE1 HP 0.11210\n"); fprintf(fout,"HE2 HP 0.11210\n"); fprintf(fout,"NZ N3 -0.37410\n"); fprintf(fout,"HZ1 H 0.33740\n"); fprintf(fout,"HZ2 H 0.33740\n"); fprintf(fout,"HZ3 H 0.33740\n"); fprintf(fout,"C C 0.84880\n"); fprintf(fout,"OC1 O2 -0.82520\n"); fprintf(fout,"OC2 O2 -0.82520\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CPRO Residue\n"); fprintf(fout,"N N -0.28020\n"); fprintf(fout,"CD CT 0.04340\n"); fprintf(fout,"HD1 H1 0.03310\n"); fprintf(fout,"HD2 H1 0.03310\n"); fprintf(fout,"CG CT 0.04660\n"); fprintf(fout,"HG1 HC 0.01720\n"); fprintf(fout,"HG2 HC 0.01720\n"); fprintf(fout,"CB CT -0.05430\n"); fprintf(fout,"HB1 HC 0.03810\n"); fprintf(fout,"HB2 HC 0.03810\n"); fprintf(fout,"CA CT -0.13360\n"); fprintf(fout,"HA H1 0.07760\n"); fprintf(fout,"C C 0.66310\n"); fprintf(fout,"OC1 O2 -0.76970\n"); fprintf(fout,"OC2 O2 -0.76970\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CCYN Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.16350\n"); fprintf(fout,"HA H1 0.13960\n"); fprintf(fout,"CB CT -0.19960\n"); fprintf(fout,"HB1 H1 0.14370\n"); fprintf(fout,"HB2 H1 0.14370\n"); fprintf(fout,"SG SH -0.31020\n"); fprintf(fout,"HG HS 0.20680\n"); fprintf(fout,"C C 0.74970\n"); fprintf(fout,"OC1 O2 -0.79810\n"); fprintf(fout,"OC2 O2 -0.79810\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CCYX Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.13180\n"); fprintf(fout,"HA H1 0.09380\n"); fprintf(fout,"CB CT -0.19430\n"); fprintf(fout,"HB1 H1 0.12280\n"); fprintf(fout,"HB2 H1 0.12280\n"); fprintf(fout,"SG S -0.05290\n"); fprintf(fout,"C C 0.76180\n"); fprintf(fout,"OC1 O2 -0.80410\n"); fprintf(fout,"OC2 O2 -0.80410\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin CMET Residue\n"); fprintf(fout,"N N -0.38210\n"); fprintf(fout,"H H 0.26810\n"); fprintf(fout,"CA CT -0.25970\n"); fprintf(fout,"HA H1 0.12770\n"); fprintf(fout,"CB CT -0.02360\n"); fprintf(fout,"HB1 HC 0.04800\n"); fprintf(fout,"HB2 HC 0.04800\n"); fprintf(fout,"CG CT 0.04920\n"); fprintf(fout,"HG1 H1 0.03170\n"); fprintf(fout,"HG2 H1 0.03170\n"); fprintf(fout,"SD S -0.26920\n"); fprintf(fout,"CE CT -0.03760\n"); fprintf(fout,"HE1 H1 0.06250\n"); fprintf(fout,"HE2 H1 0.06250\n"); fprintf(fout,"HE3 H1 0.06250\n"); fprintf(fout,"C C 0.80130\n"); fprintf(fout,"OC1 O2 -0.81050\n"); fprintf(fout,"OC2 O2 -0.81050\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NALA Residue\n"); fprintf(fout,"N N3 0.14140\n"); fprintf(fout,"H1 H 0.19970\n"); fprintf(fout,"H2 H 0.19970\n"); fprintf(fout,"H3 H 0.19970\n"); fprintf(fout,"CA CT 0.09620\n"); fprintf(fout,"HA HP 0.08890\n"); fprintf(fout,"CB CT -0.05970\n"); fprintf(fout,"HB1 HC 0.03000\n"); fprintf(fout,"HB2 HC 0.03000\n"); fprintf(fout,"HB3 HC 0.03000\n"); fprintf(fout,"C C 0.61630\n"); fprintf(fout,"O O -0.57220\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NGLY Residue\n"); fprintf(fout,"N N3 0.29430\n"); fprintf(fout,"H1 H 0.16420\n"); fprintf(fout,"H2 H 0.16420\n"); fprintf(fout,"H3 H 0.16420\n"); fprintf(fout,"CA CT -0.01000\n"); fprintf(fout,"HA1 HP 0.08950\n"); fprintf(fout,"HA2 HP 0.08950\n"); fprintf(fout,"C C 0.61630\n"); fprintf(fout,"O O -0.57220\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NSER Residue\n"); fprintf(fout,"N N3 0.18490\n"); fprintf(fout,"H1 H 0.18980\n"); fprintf(fout,"H2 H 0.18980\n"); fprintf(fout,"H3 H 0.18980\n"); fprintf(fout,"CA CT 0.05670\n"); fprintf(fout,"HA HP 0.07820\n"); fprintf(fout,"CB CT 0.25960\n"); fprintf(fout,"HB1 H1 0.02730\n"); fprintf(fout,"HB2 H1 0.02730\n"); fprintf(fout,"OG OH -0.67140\n"); fprintf(fout,"HG HO 0.42390\n"); fprintf(fout,"C C 0.61630\n"); fprintf(fout,"O O -0.57220\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NTHR Residue\n"); fprintf(fout,"N N3 0.18120\n"); fprintf(fout,"H1 H 0.19340\n"); fprintf(fout,"H2 H 0.19340\n"); fprintf(fout,"H3 H 0.19340\n"); fprintf(fout,"CA CT 0.00340\n"); fprintf(fout,"HA HP 0.10870\n"); fprintf(fout,"CB CT 0.45140\n"); fprintf(fout,"HB H1 -0.03230\n"); fprintf(fout,"CG2 CT -0.25540\n"); fprintf(fout,"HG21 HC 0.06270\n"); fprintf(fout,"HG22 HC 0.06270\n"); fprintf(fout,"HG23 HC 0.06270\n"); fprintf(fout,"OG1 OH -0.67640\n"); fprintf(fout,"HG1 HO 0.40700\n"); fprintf(fout,"C C 0.61630\n"); fprintf(fout,"O O -0.57220\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NLEU Residue\n"); fprintf(fout,"N N3 0.10100\n"); fprintf(fout,"H1 H 0.21480\n"); fprintf(fout,"H2 H 0.21480\n"); fprintf(fout,"H3 H 0.21480\n"); fprintf(fout,"CA CT 0.01040\n"); fprintf(fout,"HA HP 0.10530\n"); fprintf(fout,"CB CT -0.02440\n"); fprintf(fout,"HB1 HC 0.02560\n"); fprintf(fout,"HB2 HC 0.02560\n"); fprintf(fout,"CG CT 0.34210\n"); fprintf(fout,"HG HC -0.03800\n"); fprintf(fout,"CD1 CT -0.41060\n"); fprintf(fout,"HD11 HC 0.09800\n"); fprintf(fout,"HD12 HC 0.09800\n"); fprintf(fout,"HD13 HC 0.09800\n"); fprintf(fout,"CD2 CT -0.41040\n"); fprintf(fout,"HD21 HC 0.09800\n"); fprintf(fout,"HD22 HC 0.09800\n"); fprintf(fout,"HD23 HC 0.09800\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NILE Residue\n"); fprintf(fout,"N N3 0.03110\n"); fprintf(fout,"H1 H 0.23290\n"); fprintf(fout,"H2 H 0.23290\n"); fprintf(fout,"H3 H 0.23290\n"); fprintf(fout,"CA CT 0.02570\n"); fprintf(fout,"HA HP 0.10310\n"); fprintf(fout,"CB CT 0.18850\n"); fprintf(fout,"HB HC 0.02130\n"); fprintf(fout,"CG2 CT -0.37200\n"); fprintf(fout,"HG21 HC 0.09470\n"); fprintf(fout,"HG22 HC 0.09470\n"); fprintf(fout,"HG23 HC 0.09470\n"); fprintf(fout,"CG1 CT -0.03870\n"); fprintf(fout,"HG11 HC 0.02010\n"); fprintf(fout,"HG12 HC 0.02010\n"); fprintf(fout,"CD CT -0.09080\n"); fprintf(fout,"HD1 HC 0.02260\n"); fprintf(fout,"HD2 HC 0.02260\n"); fprintf(fout,"HD3 HC 0.02260\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NVAL Residue\n"); fprintf(fout,"N N3 0.05770\n"); fprintf(fout,"H1 H 0.22720\n"); fprintf(fout,"H2 H 0.22720\n"); fprintf(fout,"H3 H 0.22720\n"); fprintf(fout,"CA CT -0.00540\n"); fprintf(fout,"HA HP 0.10930\n"); fprintf(fout,"CB CT 0.31960\n"); fprintf(fout,"HB HC -0.02210\n"); fprintf(fout,"CG1 CT -0.31290\n"); fprintf(fout,"HG11 HC 0.07350\n"); fprintf(fout,"HG12 HC 0.07350\n"); fprintf(fout,"HG13 HC 0.07350\n"); fprintf(fout,"CG2 CT -0.31290\n"); fprintf(fout,"HG21 HC 0.07350\n"); fprintf(fout,"HG22 HC 0.07350\n"); fprintf(fout,"HG23 HC 0.07350\n"); fprintf(fout,"C C 0.61630\n"); fprintf(fout,"O O -0.57220\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NASN Residue\n"); fprintf(fout,"N N3 0.18010\n"); fprintf(fout,"H1 H 0.19210\n"); fprintf(fout,"H2 H 0.19210\n"); fprintf(fout,"H3 H 0.19210\n"); fprintf(fout,"CA CT 0.03680\n"); fprintf(fout,"HA HP 0.12310\n"); fprintf(fout,"CB CT -0.02830\n"); fprintf(fout,"HB1 HC 0.05150\n"); fprintf(fout,"HB2 HC 0.05150\n"); fprintf(fout,"CG C 0.58330\n"); fprintf(fout,"OD1 O -0.57440\n"); fprintf(fout,"ND2 N -0.86340\n"); fprintf(fout,"HD21 H 0.40970\n"); fprintf(fout,"HD22 H 0.40970\n"); fprintf(fout,"C C 0.61630\n"); fprintf(fout,"O O -0.57220\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NGLN Residue\n"); fprintf(fout,"N N3 0.14930\n"); fprintf(fout,"H1 H 0.19960\n"); fprintf(fout,"H2 H 0.19960\n"); fprintf(fout,"H3 H 0.19960\n"); fprintf(fout,"CA CT 0.05360\n"); fprintf(fout,"HA HP 0.10150\n"); fprintf(fout,"CB CT 0.06510\n"); fprintf(fout,"HB1 HC 0.00500\n"); fprintf(fout,"HB2 HC 0.00500\n"); fprintf(fout,"CG CT -0.09030\n"); fprintf(fout,"HG1 HC 0.03310\n"); fprintf(fout,"HG2 HC 0.03310\n"); fprintf(fout,"CD C 0.73540\n"); fprintf(fout,"OE1 O -0.61330\n"); fprintf(fout,"NE2 N -1.00310\n"); fprintf(fout,"HE21 H 0.44290\n"); fprintf(fout,"HE22 H 0.44290\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NARG Residue\n"); fprintf(fout,"N N3 0.13050\n"); fprintf(fout,"H1 H 0.20830\n"); fprintf(fout,"H2 H 0.20830\n"); fprintf(fout,"H3 H 0.20830\n"); fprintf(fout,"CA CT -0.02230\n"); fprintf(fout,"HA HP 0.12420\n"); fprintf(fout,"CB CT 0.01180\n"); fprintf(fout,"HB1 HC 0.02260\n"); fprintf(fout,"HB2 HC 0.02260\n"); fprintf(fout,"CG CT 0.02360\n"); fprintf(fout,"HG1 HC 0.03090\n"); fprintf(fout,"HG2 HC 0.03090\n"); fprintf(fout,"CD CT 0.09350\n"); fprintf(fout,"HD1 H1 0.05270\n"); fprintf(fout,"HD2 H1 0.05270\n"); fprintf(fout,"NE N2 -0.56500\n"); fprintf(fout,"HE H 0.35920\n"); fprintf(fout,"CZ CA 0.82810\n"); fprintf(fout,"NH1 N2 -0.86930\n"); fprintf(fout,"HH11 H 0.44940\n"); fprintf(fout,"HH12 H 0.44940\n"); fprintf(fout,"NH2 N2 -0.86930\n"); fprintf(fout,"HH21 H 0.44940\n"); fprintf(fout,"HH22 H 0.44940\n"); fprintf(fout,"C C 0.72140\n"); fprintf(fout,"O O -0.60130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NHID Residue\n"); fprintf(fout,"N N3 0.15420\n"); fprintf(fout,"H1 H 0.19630\n"); fprintf(fout,"H2 H 0.19630\n"); fprintf(fout,"H3 H 0.19630\n"); fprintf(fout,"CA CT 0.09640\n"); fprintf(fout,"HA HP 0.09580\n"); fprintf(fout,"CB CT 0.02590\n"); fprintf(fout,"HB1 HC 0.02090\n"); fprintf(fout,"HB2 HC 0.02090\n"); fprintf(fout,"CG CC -0.03990\n"); fprintf(fout,"ND1 NA -0.38190\n"); fprintf(fout,"HD1 H 0.36320\n"); fprintf(fout,"CE1 CR 0.21270\n"); fprintf(fout,"HE1 H5 0.13850\n"); fprintf(fout,"NE2 NB -0.57110\n"); fprintf(fout,"CD2 CV 0.10460\n"); fprintf(fout,"HD2 H4 0.12990\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NHIE Residue\n"); fprintf(fout,"N N3 0.14720\n"); fprintf(fout,"H1 H 0.20160\n"); fprintf(fout,"H2 H 0.20160\n"); fprintf(fout,"H3 H 0.20160\n"); fprintf(fout,"CA CT 0.02360\n"); fprintf(fout,"HA HP 0.13800\n"); fprintf(fout,"CB CT 0.04890\n"); fprintf(fout,"HB1 HC 0.02230\n"); fprintf(fout,"HB2 HC 0.02230\n"); fprintf(fout,"CG CC 0.17400\n"); fprintf(fout,"ND1 NB -0.55790\n"); fprintf(fout,"CE1 CR 0.18040\n"); fprintf(fout,"HE1 H5 0.13970\n"); fprintf(fout,"NE2 NA -0.27810\n"); fprintf(fout,"HE2 H 0.33240\n"); fprintf(fout,"CD2 CW -0.23490\n"); fprintf(fout,"HD2 H4 0.19630\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NHIP Residue\n"); fprintf(fout,"N N3 0.25600\n"); fprintf(fout,"H1 H 0.17040\n"); fprintf(fout,"H2 H 0.17040\n"); fprintf(fout,"H3 H 0.17040\n"); fprintf(fout,"CA CT 0.05810\n"); fprintf(fout,"HA HP 0.10470\n"); fprintf(fout,"CB CT 0.04840\n"); fprintf(fout,"HB1 HC 0.05310\n"); fprintf(fout,"HB2 HC 0.05310\n"); fprintf(fout,"CG CC -0.02360\n"); fprintf(fout,"ND1 NA -0.15100\n"); fprintf(fout,"HD1 H 0.38210\n"); fprintf(fout,"CE1 CR -0.00110\n"); fprintf(fout,"HE1 H5 0.26450\n"); fprintf(fout,"NE2 NA -0.17390\n"); fprintf(fout,"HE2 H 0.39210\n"); fprintf(fout,"CD2 CW -0.14330\n"); fprintf(fout,"HD2 H4 0.24950\n"); fprintf(fout,"C C 0.72140\n"); fprintf(fout,"O O -0.60130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NTRP Residue\n"); fprintf(fout,"N N3 0.19130\n"); fprintf(fout,"H1 H 0.18880\n"); fprintf(fout,"H2 H 0.18880\n"); fprintf(fout,"H3 H 0.18880\n"); fprintf(fout,"CA CT 0.04210\n"); fprintf(fout,"HA HP 0.11620\n"); fprintf(fout,"CB CT 0.05430\n"); fprintf(fout,"HB1 HC 0.02220\n"); fprintf(fout,"HB2 HC 0.02220\n"); fprintf(fout,"CG C* -0.16540\n"); fprintf(fout,"CD1 CW -0.17880\n"); fprintf(fout,"HD1 H4 0.21950\n"); fprintf(fout,"NE1 NA -0.34440\n"); fprintf(fout,"HE1 H 0.34120\n"); fprintf(fout,"CE2 CN 0.15750\n"); fprintf(fout,"CZ2 CA -0.27100\n"); fprintf(fout,"HZ2 HA 0.15890\n"); fprintf(fout,"CH2 CA -0.10800\n"); fprintf(fout,"HH2 HA 0.14110\n"); fprintf(fout,"CZ3 CA -0.20340\n"); fprintf(fout,"HZ3 HA 0.14580\n"); fprintf(fout,"CE3 CA -0.22650\n"); fprintf(fout,"HE3 HA 0.16460\n"); fprintf(fout,"CD2 CB 0.11320\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NPHE Residue\n"); fprintf(fout,"N N3 0.17370\n"); fprintf(fout,"H1 H 0.19210\n"); fprintf(fout,"H2 H 0.19210\n"); fprintf(fout,"H3 H 0.19210\n"); fprintf(fout,"CA CT 0.07330\n"); fprintf(fout,"HA HP 0.10410\n"); fprintf(fout,"CB CT 0.03300\n"); fprintf(fout,"HB1 HC 0.01040\n"); fprintf(fout,"HB2 HC 0.01040\n"); fprintf(fout,"CG CA 0.00310\n"); fprintf(fout,"CD1 CA -0.13920\n"); fprintf(fout,"HD1 HA 0.13740\n"); fprintf(fout,"CE1 CA -0.16020\n"); fprintf(fout,"HE1 HA 0.14330\n"); fprintf(fout,"CZ CA -0.12080\n"); fprintf(fout,"HZ HA 0.13290\n"); fprintf(fout,"CE2 CA -0.16030\n"); fprintf(fout,"HE2 HA 0.14330\n"); fprintf(fout,"CD2 CA -0.13910\n"); fprintf(fout,"HD2 HA 0.13740\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NTYR Residue\n"); fprintf(fout,"N N3 0.19400\n"); fprintf(fout,"H1 H 0.18730\n"); fprintf(fout,"H2 H 0.18730\n"); fprintf(fout,"H3 H 0.18730\n"); fprintf(fout,"CA CT 0.05700\n"); fprintf(fout,"HA HP 0.09830\n"); fprintf(fout,"CB CT 0.06590\n"); fprintf(fout,"HB1 HC 0.01020\n"); fprintf(fout,"HB2 HC 0.01020\n"); fprintf(fout,"CG CA -0.02050\n"); fprintf(fout,"CD1 CA -0.20020\n"); fprintf(fout,"HD1 HA 0.17200\n"); fprintf(fout,"CE1 CA -0.22390\n"); fprintf(fout,"HE1 HA 0.16500\n"); fprintf(fout,"CZ C 0.31390\n"); fprintf(fout,"OH OH -0.55780\n"); fprintf(fout,"HH HO 0.40010\n"); fprintf(fout,"CE2 CA -0.22390\n"); fprintf(fout,"HE2 HA 0.16500\n"); fprintf(fout,"CD2 CA -0.20020\n"); fprintf(fout,"HD2 HA 0.17200\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NGLU Residue\n"); fprintf(fout,"N N3 0.00170\n"); fprintf(fout,"H1 H 0.23910\n"); fprintf(fout,"H2 H 0.23910\n"); fprintf(fout,"H3 H 0.23910\n"); fprintf(fout,"CA CT 0.05880\n"); fprintf(fout,"HA HP 0.12020\n"); fprintf(fout,"CB CT 0.09090\n"); fprintf(fout,"HB1 HC -0.02320\n"); fprintf(fout,"HB2 HC -0.02320\n"); fprintf(fout,"CG CT -0.02360\n"); fprintf(fout,"HG1 HC -0.03150\n"); fprintf(fout,"HG2 HC -0.03150\n"); fprintf(fout,"CD C 0.80870\n"); fprintf(fout,"OE1 O2 -0.81890\n"); fprintf(fout,"OE2 O2 -0.81890\n"); fprintf(fout,"C C 0.56210\n"); fprintf(fout,"O O -0.58890\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NASP Residue\n"); fprintf(fout,"N N3 0.07820\n"); fprintf(fout,"H1 H 0.22000\n"); fprintf(fout,"H2 H 0.22000\n"); fprintf(fout,"H3 H 0.22000\n"); fprintf(fout,"CA CT 0.02920\n"); fprintf(fout,"HA HP 0.11410\n"); fprintf(fout,"CB CT -0.02350\n"); fprintf(fout,"HB1 HC -0.01690\n"); fprintf(fout,"HB2 HC -0.01690\n"); fprintf(fout,"CG C 0.81940\n"); fprintf(fout,"OD1 O2 -0.80840\n"); fprintf(fout,"OD2 O2 -0.80840\n"); fprintf(fout,"C C 0.56210\n"); fprintf(fout,"O O -0.58890\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NLYP Residue\n"); fprintf(fout,"N N3 0.09660\n"); fprintf(fout,"H1 H 0.21650\n"); fprintf(fout,"H2 H 0.21650\n"); fprintf(fout,"H3 H 0.21650\n"); fprintf(fout,"CA CT -0.00150\n"); fprintf(fout,"HA HP 0.11800\n"); fprintf(fout,"CB CT 0.02120\n"); fprintf(fout,"HB1 HC 0.02830\n"); fprintf(fout,"HB2 HC 0.02830\n"); fprintf(fout,"CG CT -0.00480\n"); fprintf(fout,"HG1 HC 0.01210\n"); fprintf(fout,"HG2 HC 0.01210\n"); fprintf(fout,"CD CT -0.06080\n"); fprintf(fout,"HD1 HC 0.06330\n"); fprintf(fout,"HD2 HC 0.06330\n"); fprintf(fout,"CE CT -0.01810\n"); fprintf(fout,"HE1 HP 0.11710\n"); fprintf(fout,"HE2 HP 0.11710\n"); fprintf(fout,"NZ N3 -0.37640\n"); fprintf(fout,"HZ1 H 0.33820\n"); fprintf(fout,"HZ2 H 0.33820\n"); fprintf(fout,"HZ3 H 0.33820\n"); fprintf(fout,"C C 0.72140\n"); fprintf(fout,"O O -0.60130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NPRO Residue\n"); fprintf(fout,"N N3 -0.20200\n"); fprintf(fout,"H1 H 0.31200\n"); fprintf(fout,"H2 H 0.31200\n"); fprintf(fout,"CD CT -0.01200\n"); fprintf(fout,"HD1 HP 0.10000\n"); fprintf(fout,"HD2 HP 0.10000\n"); fprintf(fout,"CG CT -0.12100\n"); fprintf(fout,"HG1 HC 0.10000\n"); fprintf(fout,"HG2 HC 0.10000\n"); fprintf(fout,"CB CT -0.11500\n"); fprintf(fout,"HB1 HC 0.10000\n"); fprintf(fout,"HB2 HC 0.10000\n"); fprintf(fout,"CA CT 0.10000\n"); fprintf(fout,"HA HP 0.10000\n"); fprintf(fout,"C C 0.52600\n"); fprintf(fout,"O O -0.50000\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NCYN Residue\n"); fprintf(fout,"N N3 0.13250\n"); fprintf(fout,"H1 H 0.20230\n"); fprintf(fout,"H2 H 0.20230\n"); fprintf(fout,"H3 H 0.20230\n"); fprintf(fout,"CA CT 0.09270\n"); fprintf(fout,"HA HP 0.14110\n"); fprintf(fout,"CB CT -0.11950\n"); fprintf(fout,"HB1 H1 0.11880\n"); fprintf(fout,"HB2 H1 0.11880\n"); fprintf(fout,"SG SH -0.32980\n"); fprintf(fout,"HG HS 0.19750\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NCYX Residue\n"); fprintf(fout,"N N3 0.20690\n"); fprintf(fout,"H1 H 0.18150\n"); fprintf(fout,"H2 H 0.18150\n"); fprintf(fout,"H3 H 0.18150\n"); fprintf(fout,"CA CT 0.10550\n"); fprintf(fout,"HA HP 0.09220\n"); fprintf(fout,"CB CT -0.02770\n"); fprintf(fout,"HB1 H1 0.06800\n"); fprintf(fout,"HB2 H1 0.06800\n"); fprintf(fout,"SG S -0.09840\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin NMET Residue\n"); fprintf(fout,"N N3 0.15920\n"); fprintf(fout,"H1 H 0.19840\n"); fprintf(fout,"H2 H 0.19840\n"); fprintf(fout,"H3 H 0.19840\n"); fprintf(fout,"CA CT 0.02210\n"); fprintf(fout,"HA HP 0.11160\n"); fprintf(fout,"CB CT 0.08650\n"); fprintf(fout,"HB1 HC 0.01250\n"); fprintf(fout,"HB2 HC 0.01250\n"); fprintf(fout,"CG CT 0.03340\n"); fprintf(fout,"HG1 H1 0.02920\n"); fprintf(fout,"HG2 H1 0.02920\n"); fprintf(fout,"SD S -0.27740\n"); fprintf(fout,"CE CT -0.03410\n"); fprintf(fout,"HE1 H1 0.05970\n"); fprintf(fout,"HE2 H1 0.05970\n"); fprintf(fout,"HE3 H1 0.05970\n"); fprintf(fout,"C C 0.61230\n"); fprintf(fout,"O O -0.57130\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DA5 Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.04310\n"); fprintf(fout,"H1' H2 0.18380\n"); fprintf(fout,"N9 N* -0.02680\n"); fprintf(fout,"C8 CK 0.16070\n"); fprintf(fout,"H8 H5 0.18770\n"); fprintf(fout,"N7 NB -0.61750\n"); fprintf(fout,"C5 CB 0.07250\n"); fprintf(fout,"C6 CA 0.68970\n"); fprintf(fout,"N6 N2 -0.91230\n"); fprintf(fout,"H61 H 0.41670\n"); fprintf(fout,"H62 H 0.41670\n"); fprintf(fout,"N1 NC -0.76240\n"); fprintf(fout,"C2 CQ 0.57160\n"); fprintf(fout,"H2 H5 0.05980\n"); fprintf(fout,"N3 NC -0.74170\n"); fprintf(fout,"C4 CB 0.38000\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OS -0.52320\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DA Residue\n"); fprintf(fout,"N N -0.34790\n"); fprintf(fout,"H H 0.27470\n"); fprintf(fout,"CA CT -0.24000\n"); fprintf(fout,"HA H1 0.14260\n"); fprintf(fout,"CB CT 0.02920\n"); fprintf(fout,"HB1 HC 0.07470\n"); fprintf(fout,"HB2 HC 0.07470\n"); fprintf(fout,"CG CT -0.01430\n"); fprintf(fout,"HG1 HP 0.11350\n"); fprintf(fout,"HG2 HP 0.11350\n"); fprintf(fout,"ND N3 -0.38540\n"); fprintf(fout,"HD1 H 0.34000\n"); fprintf(fout,"HD2 H 0.34000\n"); fprintf(fout,"HD3 H 0.34000\n"); fprintf(fout,"C C 0.73410\n"); fprintf(fout,"O O -0.58940\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DA3 Residue\n"); fprintf(fout,"P P 1.16590\n"); fprintf(fout,"O1P O2 -0.77610\n"); fprintf(fout,"O2P O2 -0.77610\n"); fprintf(fout,"O5' OS -0.49540\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.04310\n"); fprintf(fout,"H1' H2 0.18380\n"); fprintf(fout,"N9 N* -0.02680\n"); fprintf(fout,"C8 CK 0.16070\n"); fprintf(fout,"H8 H5 0.18770\n"); fprintf(fout,"N7 NB -0.61750\n"); fprintf(fout,"C5 CB 0.07250\n"); fprintf(fout,"C6 CA 0.68970\n"); fprintf(fout,"N6 N2 -0.91230\n"); fprintf(fout,"H61 H 0.41670\n"); fprintf(fout,"H62 H 0.41670\n"); fprintf(fout,"N1 NC -0.76240\n"); fprintf(fout,"C2 CQ 0.57160\n"); fprintf(fout,"H2 H5 0.05980\n"); fprintf(fout,"N3 NC -0.74170\n"); fprintf(fout,"C4 CB 0.38000\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OH -0.65490\n"); fprintf(fout,"H3T HO 0.43960\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DAN Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.04310\n"); fprintf(fout,"H1' H2 0.18380\n"); fprintf(fout,"N9 N* -0.02680\n"); fprintf(fout,"C8 CK 0.16070\n"); fprintf(fout,"H8 H5 0.18770\n"); fprintf(fout,"N7 NB -0.61750\n"); fprintf(fout,"C5 CB 0.07250\n"); fprintf(fout,"C6 CA 0.68970\n"); fprintf(fout,"N6 N2 -0.91230\n"); fprintf(fout,"H61 H 0.41670\n"); fprintf(fout,"H62 H 0.41670\n"); fprintf(fout,"N1 NC -0.76240\n"); fprintf(fout,"C2 CQ 0.57160\n"); fprintf(fout,"H2 H5 0.05980\n"); fprintf(fout,"N3 NC -0.74170\n"); fprintf(fout,"C4 CB 0.38000\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OH -0.65490\n"); fprintf(fout,"H3T HO 0.43960\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RA5 Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.03940\n"); fprintf(fout,"H1' H2 0.20070\n"); fprintf(fout,"N9 N* -0.02510\n"); fprintf(fout,"C8 CK 0.20060\n"); fprintf(fout,"H8 H5 0.15530\n"); fprintf(fout,"N7 NB -0.60730\n"); fprintf(fout,"C5 CB 0.05150\n"); fprintf(fout,"C6 CA 0.70090\n"); fprintf(fout,"N6 N2 -0.90190\n"); fprintf(fout,"H61 H 0.41150\n"); fprintf(fout,"H62 H 0.41150\n"); fprintf(fout,"N1 NC -0.76150\n"); fprintf(fout,"C2 CQ 0.58750\n"); fprintf(fout,"H2 H5 0.04730\n"); fprintf(fout,"N3 NC -0.69970\n"); fprintf(fout,"C4 CB 0.30530\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OS -0.52460\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RA Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.03940\n"); fprintf(fout,"H1' H2 0.20070\n"); fprintf(fout,"N9 N* -0.02510\n"); fprintf(fout,"C8 CK 0.20060\n"); fprintf(fout,"H8 H5 0.15530\n"); fprintf(fout,"N7 NB -0.60730\n"); fprintf(fout,"C5 CB 0.05150\n"); fprintf(fout,"C6 CA 0.70090\n"); fprintf(fout,"N6 N2 -0.90190\n"); fprintf(fout,"H61 H 0.41150\n"); fprintf(fout,"H62 H 0.41150\n"); fprintf(fout,"N1 NC -0.76150\n"); fprintf(fout,"C2 CQ 0.58750\n"); fprintf(fout,"H2 H5 0.04730\n"); fprintf(fout,"N3 NC -0.69970\n"); fprintf(fout,"C4 CB 0.30530\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OS -0.52460\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RA3 Residue\n"); fprintf(fout,"P P 1.16620\n"); fprintf(fout,"O1P O2 -0.77600\n"); fprintf(fout,"O2P O2 -0.77600\n"); fprintf(fout,"O5' OS -0.49890\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.03940\n"); fprintf(fout,"H1' H2 0.20070\n"); fprintf(fout,"N9 N* -0.02510\n"); fprintf(fout,"C8 CK 0.20060\n"); fprintf(fout,"H8 H5 0.15530\n"); fprintf(fout,"N7 NB -0.60730\n"); fprintf(fout,"C5 CB 0.05150\n"); fprintf(fout,"C6 CA 0.70090\n"); fprintf(fout,"N6 N2 -0.90190\n"); fprintf(fout,"H61 H 0.41150\n"); fprintf(fout,"H62 H 0.41150\n"); fprintf(fout,"N1 NC -0.76150\n"); fprintf(fout,"C2 CQ 0.58750\n"); fprintf(fout,"H2 H5 0.04730\n"); fprintf(fout,"N3 NC -0.69970\n"); fprintf(fout,"C4 CB 0.30530\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OH -0.65410\n"); fprintf(fout,"H3T HO 0.43760\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RAN Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.03940\n"); fprintf(fout,"H1' H2 0.20070\n"); fprintf(fout,"N9 N* -0.02510\n"); fprintf(fout,"C8 CK 0.20060\n"); fprintf(fout,"H8 H5 0.15530\n"); fprintf(fout,"N7 NB -0.60730\n"); fprintf(fout,"C5 CB 0.05150\n"); fprintf(fout,"C6 CA 0.70090\n"); fprintf(fout,"N6 N2 -0.90190\n"); fprintf(fout,"H61 H 0.41150\n"); fprintf(fout,"H62 H 0.41150\n"); fprintf(fout,"N1 NC -0.76150\n"); fprintf(fout,"C2 CQ 0.58750\n"); fprintf(fout,"H2 H5 0.04730\n"); fprintf(fout,"N3 NC -0.69970\n"); fprintf(fout,"C4 CB 0.30530\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OH -0.65410\n"); fprintf(fout,"H3T HO 0.43760\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DT5 Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.06800\n"); fprintf(fout,"H1' H2 0.18040\n"); fprintf(fout,"N1 N* -0.02390\n"); fprintf(fout,"C6 CM -0.22090\n"); fprintf(fout,"H6 H4 0.26070\n"); fprintf(fout,"C5 CM 0.00250\n"); fprintf(fout,"C7 CT -0.22690\n"); fprintf(fout,"H71 HC 0.07700\n"); fprintf(fout,"H72 HC 0.07700\n"); fprintf(fout,"H73 HC 0.07700\n"); fprintf(fout,"C4 C 0.51940\n"); fprintf(fout,"O4 O -0.55630\n"); fprintf(fout,"N3 NA -0.43400\n"); fprintf(fout,"H3 H 0.34200\n"); fprintf(fout,"C2 C 0.56770\n"); fprintf(fout,"O O -0.58810\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OS -0.52320\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DT Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.06800\n"); fprintf(fout,"H1' H2 0.18040\n"); fprintf(fout,"N1 N* -0.02390\n"); fprintf(fout,"C6 CM -0.22090\n"); fprintf(fout,"H6 H4 0.26070\n"); fprintf(fout,"C5 CM 0.00250\n"); fprintf(fout,"C7 CT -0.22690\n"); fprintf(fout,"H71 HC 0.07700\n"); fprintf(fout,"H72 HC 0.07700\n"); fprintf(fout,"H73 HC 0.07700\n"); fprintf(fout,"C4 C 0.51940\n"); fprintf(fout,"O4 O -0.55630\n"); fprintf(fout,"N3 NA -0.43400\n"); fprintf(fout,"H3 H 0.34200\n"); fprintf(fout,"C2 C 0.56770\n"); fprintf(fout,"O O -0.58810\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OS -0.52320\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DT3 Residue\n"); fprintf(fout,"P P 1.16590\n"); fprintf(fout,"O1P O2 -0.77610\n"); fprintf(fout,"O2P O2 -0.77610\n"); fprintf(fout,"O5' OS -0.49540\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.06800\n"); fprintf(fout,"H1' H2 0.18040\n"); fprintf(fout,"N1 N* -0.02390\n"); fprintf(fout,"C6 CM -0.22090\n"); fprintf(fout,"H6 H4 0.26070\n"); fprintf(fout,"C5 CM 0.00250\n"); fprintf(fout,"C7 CT -0.22690\n"); fprintf(fout,"H71 HC 0.07700\n"); fprintf(fout,"H72 HC 0.07700\n"); fprintf(fout,"H73 HC 0.07700\n"); fprintf(fout,"C4 C 0.51940\n"); fprintf(fout,"O4 O -0.55630\n"); fprintf(fout,"N3 NA -0.43400\n"); fprintf(fout,"H3 H 0.34200\n"); fprintf(fout,"C2 C 0.56770\n"); fprintf(fout,"O O -0.58810\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OH -0.65490\n"); fprintf(fout,"H3T HO 0.43960\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DTN Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.06800\n"); fprintf(fout,"H1' H2 0.18040\n"); fprintf(fout,"N1 N* -0.02390\n"); fprintf(fout,"C6 CM -0.22090\n"); fprintf(fout,"H6 H4 0.26070\n"); fprintf(fout,"C5 CM 0.00250\n"); fprintf(fout,"C7 CT -0.22690\n"); fprintf(fout,"H71 HC 0.07700\n"); fprintf(fout,"H72 HC 0.07700\n"); fprintf(fout,"H73 HC 0.07700\n"); fprintf(fout,"C4 C 0.51940\n"); fprintf(fout,"O4 O -0.55630\n"); fprintf(fout,"N3 NA -0.43400\n"); fprintf(fout,"H3 H 0.34200\n"); fprintf(fout,"C2 C 0.56770\n"); fprintf(fout,"O O -0.58810\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OH -0.65490\n"); fprintf(fout,"H3T HO 0.43960\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RU5 Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.06740\n"); fprintf(fout,"H1' H2 0.18240\n"); fprintf(fout,"N1 N* 0.04180\n"); fprintf(fout,"C6 CM -0.11260\n"); fprintf(fout,"H6 H4 0.21880\n"); fprintf(fout,"C5 CM -0.36350\n"); fprintf(fout,"H5 HA 0.18110\n"); fprintf(fout,"C4 C 0.59520\n"); fprintf(fout,"O4 O -0.57610\n"); fprintf(fout,"N3 NA -0.35490\n"); fprintf(fout,"H3 H 0.31540\n"); fprintf(fout,"C2 C 0.46870\n"); fprintf(fout,"O O -0.54770\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OS -0.52460\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RU Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.06740\n"); fprintf(fout,"H1' H2 0.18240\n"); fprintf(fout,"N1 N* 0.04180\n"); fprintf(fout,"C6 CM -0.11260\n"); fprintf(fout,"H6 H4 0.21880\n"); fprintf(fout,"C5 CM -0.36350\n"); fprintf(fout,"H5 HA 0.18110\n"); fprintf(fout,"C4 C 0.59520\n"); fprintf(fout,"O4 O -0.57610\n"); fprintf(fout,"N3 NA -0.35490\n"); fprintf(fout,"H3 H 0.31540\n"); fprintf(fout,"C2 C 0.46870\n"); fprintf(fout,"O O -0.54770\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OS -0.52460\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RU3 Residue\n"); fprintf(fout,"P P 1.16620\n"); fprintf(fout,"O1P O2 -0.77600\n"); fprintf(fout,"O2P O2 -0.77600\n"); fprintf(fout,"O5' OS -0.49890\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.06740\n"); fprintf(fout,"H1' H2 0.18240\n"); fprintf(fout,"N1 N* 0.04180\n"); fprintf(fout,"C6 CM -0.11260\n"); fprintf(fout,"H6 H4 0.21880\n"); fprintf(fout,"C5 CM -0.36350\n"); fprintf(fout,"H5 HA 0.18110\n"); fprintf(fout,"C4 C 0.59520\n"); fprintf(fout,"O4 O -0.57610\n"); fprintf(fout,"N3 NA -0.35490\n"); fprintf(fout,"H3 H 0.31540\n"); fprintf(fout,"C2 C 0.46870\n"); fprintf(fout,"O O -0.54770\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OH -0.65410\n"); fprintf(fout,"H3T HO 0.43760\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RUN Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.06740\n"); fprintf(fout,"H1' H2 0.18240\n"); fprintf(fout,"N1 N* 0.04180\n"); fprintf(fout,"C6 CM -0.11260\n"); fprintf(fout,"H6 H4 0.21880\n"); fprintf(fout,"C5 CM -0.36350\n"); fprintf(fout,"H5 HA 0.18110\n"); fprintf(fout,"C4 C 0.59520\n"); fprintf(fout,"O4 O -0.57610\n"); fprintf(fout,"N3 NA -0.35490\n"); fprintf(fout,"H3 H 0.31540\n"); fprintf(fout,"C2 C 0.46870\n"); fprintf(fout,"O O -0.54770\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OH -0.65410\n"); fprintf(fout,"H3T HO 0.43760\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DG5 Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.03580\n"); fprintf(fout,"H1' H2 0.17460\n"); fprintf(fout,"N9 N* 0.05770\n"); fprintf(fout,"C8 CK 0.07360\n"); fprintf(fout,"H8 H5 0.19970\n"); fprintf(fout,"N7 NB -0.57250\n"); fprintf(fout,"C5 CB 0.19910\n"); fprintf(fout,"C6 C 0.49180\n"); fprintf(fout,"O6 O -0.56990\n"); fprintf(fout,"N1 NA -0.50530\n"); fprintf(fout,"H1 H 0.35200\n"); fprintf(fout,"C2 CA 0.74320\n"); fprintf(fout,"N2 N2 -0.92300\n"); fprintf(fout,"H21 H 0.42350\n"); fprintf(fout,"H22 H 0.42350\n"); fprintf(fout,"N3 NC -0.66360\n"); fprintf(fout,"C4 CB 0.18140\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OS -0.52320\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DG Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.03580\n"); fprintf(fout,"H1' H2 0.17460\n"); fprintf(fout,"N9 N* 0.05770\n"); fprintf(fout,"C8 CK 0.07360\n"); fprintf(fout,"H8 H5 0.19970\n"); fprintf(fout,"N7 NB -0.57250\n"); fprintf(fout,"C5 CB 0.19910\n"); fprintf(fout,"C6 C 0.49180\n"); fprintf(fout,"O6 O -0.56990\n"); fprintf(fout,"N1 NA -0.50530\n"); fprintf(fout,"H1 H 0.35200\n"); fprintf(fout,"C2 CA 0.74320\n"); fprintf(fout,"N2 N2 -0.92300\n"); fprintf(fout,"H21 H 0.42350\n"); fprintf(fout,"H22 H 0.42350\n"); fprintf(fout,"N3 NC -0.66360\n"); fprintf(fout,"C4 CB 0.18140\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OS -0.52320\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DG3 Residue\n"); fprintf(fout,"P P 1.16590\n"); fprintf(fout,"O1P O2 -0.77610\n"); fprintf(fout,"O2P O2 -0.77610\n"); fprintf(fout,"O5' OS -0.49540\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.03580\n"); fprintf(fout,"H1' H2 0.17460\n"); fprintf(fout,"N9 N* 0.05770\n"); fprintf(fout,"C8 CK 0.07360\n"); fprintf(fout,"H8 H5 0.19970\n"); fprintf(fout,"N7 NB -0.57250\n"); fprintf(fout,"C5 CB 0.19910\n"); fprintf(fout,"C6 C 0.49180\n"); fprintf(fout,"O6 O -0.56990\n"); fprintf(fout,"N1 NA -0.50530\n"); fprintf(fout,"H1 H 0.35200\n"); fprintf(fout,"C2 CA 0.74320\n"); fprintf(fout,"N2 N2 -0.92300\n"); fprintf(fout,"H21 H 0.42350\n"); fprintf(fout,"H22 H 0.42350\n"); fprintf(fout,"N3 NC -0.66360\n"); fprintf(fout,"C4 CB 0.18140\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OH -0.65490\n"); fprintf(fout,"H3T HO 0.43960\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DGN Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT 0.03580\n"); fprintf(fout,"H1' H2 0.17460\n"); fprintf(fout,"N9 N* 0.05770\n"); fprintf(fout,"C8 CK 0.07360\n"); fprintf(fout,"H8 H5 0.19970\n"); fprintf(fout,"N7 NB -0.57250\n"); fprintf(fout,"C5 CB 0.19910\n"); fprintf(fout,"C6 C 0.49180\n"); fprintf(fout,"O6 O -0.56990\n"); fprintf(fout,"N1 NA -0.50530\n"); fprintf(fout,"H1 H 0.35200\n"); fprintf(fout,"C2 CA 0.74320\n"); fprintf(fout,"N2 N2 -0.92300\n"); fprintf(fout,"H21 H 0.42350\n"); fprintf(fout,"H22 H 0.42350\n"); fprintf(fout,"N3 NC -0.66360\n"); fprintf(fout,"C4 CB 0.18140\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OH -0.65490\n"); fprintf(fout,"H3T HO 0.43960\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RG5 Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.01910\n"); fprintf(fout,"H1' H2 0.20060\n"); fprintf(fout,"N9 N* 0.04920\n"); fprintf(fout,"C8 CK 0.13740\n"); fprintf(fout,"H8 H5 0.16400\n"); fprintf(fout,"N7 NB -0.57090\n"); fprintf(fout,"C5 CB 0.17440\n"); fprintf(fout,"C6 C 0.47700\n"); fprintf(fout,"O6 O -0.55970\n"); fprintf(fout,"N1 NA -0.47870\n"); fprintf(fout,"H1 H 0.34240\n"); fprintf(fout,"C2 CA 0.76570\n"); fprintf(fout,"N2 N2 -0.96720\n"); fprintf(fout,"H21 H 0.43640\n"); fprintf(fout,"H22 H 0.43640\n"); fprintf(fout,"N3 NC -0.63230\n"); fprintf(fout,"C4 CB 0.12220\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OS -0.52460\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RG Residue\n"); fprintf(fout,"N N -0.34790\n"); fprintf(fout,"H H 0.27470\n"); fprintf(fout,"CA CT -0.26370\n"); fprintf(fout,"HA H1 0.15600\n"); fprintf(fout,"CB CT -0.00070\n"); fprintf(fout,"HB1 HC 0.03270\n"); fprintf(fout,"HB2 HC 0.03270\n"); fprintf(fout,"CG CT 0.03900\n"); fprintf(fout,"HG1 HC 0.02850\n"); fprintf(fout,"HG2 HC 0.02850\n"); fprintf(fout,"CD CT 0.04860\n"); fprintf(fout,"HD1 H1 0.06870\n"); fprintf(fout,"HD2 H1 0.06870\n"); fprintf(fout,"NE N2 -0.52950\n"); fprintf(fout,"HE H 0.34560\n"); fprintf(fout,"CZ CA 0.80760\n"); fprintf(fout,"NH1 N2 -0.86270\n"); fprintf(fout,"HH11 H 0.44780\n"); fprintf(fout,"HH12 H 0.44780\n"); fprintf(fout,"NH2 N2 -0.86270\n"); fprintf(fout,"HH21 H 0.44780\n"); fprintf(fout,"HH22 H 0.44780\n"); fprintf(fout,"C C 0.73410\n"); fprintf(fout,"O O -0.58940\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RG3 Residue\n"); fprintf(fout,"P P 1.16620\n"); fprintf(fout,"O1P O2 -0.77600\n"); fprintf(fout,"O2P O2 -0.77600\n"); fprintf(fout,"O5' OS -0.49890\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.01910\n"); fprintf(fout,"H1' H2 0.20060\n"); fprintf(fout,"N9 N* 0.04920\n"); fprintf(fout,"C8 CK 0.13740\n"); fprintf(fout,"H8 H5 0.16400\n"); fprintf(fout,"N7 NB -0.57090\n"); fprintf(fout,"C5 CB 0.17440\n"); fprintf(fout,"C6 C 0.47700\n"); fprintf(fout,"O6 O -0.55970\n"); fprintf(fout,"N1 NA -0.47870\n"); fprintf(fout,"H1 H 0.34240\n"); fprintf(fout,"C2 CA 0.76570\n"); fprintf(fout,"N2 N2 -0.96720\n"); fprintf(fout,"H21 H 0.43640\n"); fprintf(fout,"H22 H 0.43640\n"); fprintf(fout,"N3 NC -0.63230\n"); fprintf(fout,"C4 CB 0.12220\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OH -0.65410\n"); fprintf(fout,"H3T HO 0.43760\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RGN Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.01910\n"); fprintf(fout,"H1' H2 0.20060\n"); fprintf(fout,"N9 N* 0.04920\n"); fprintf(fout,"C8 CK 0.13740\n"); fprintf(fout,"H8 H5 0.16400\n"); fprintf(fout,"N7 NB -0.57090\n"); fprintf(fout,"C5 CB 0.17440\n"); fprintf(fout,"C6 C 0.47700\n"); fprintf(fout,"O6 O -0.55970\n"); fprintf(fout,"N1 NA -0.47870\n"); fprintf(fout,"H1 H 0.34240\n"); fprintf(fout,"C2 CA 0.76570\n"); fprintf(fout,"N2 N2 -0.96720\n"); fprintf(fout,"H21 H 0.43640\n"); fprintf(fout,"H22 H 0.43640\n"); fprintf(fout,"N3 NC -0.63230\n"); fprintf(fout,"C4 CB 0.12220\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OH -0.65410\n"); fprintf(fout,"H3T HO 0.43760\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DC5 Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT -0.01160\n"); fprintf(fout,"H1' H2 0.19630\n"); fprintf(fout,"N1 N* -0.03390\n"); fprintf(fout,"C6 CM -0.01830\n"); fprintf(fout,"H6 H4 0.22930\n"); fprintf(fout,"C5 CM -0.52220\n"); fprintf(fout,"H5 HA 0.18630\n"); fprintf(fout,"C4 CA 0.84390\n"); fprintf(fout,"N4 N2 -0.97730\n"); fprintf(fout,"H41 H 0.43140\n"); fprintf(fout,"H42 H 0.43140\n"); fprintf(fout,"N3 NC -0.77480\n"); fprintf(fout,"C2 C 0.79590\n"); fprintf(fout,"O O -0.65480\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OS -0.52320\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DC Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT -0.01160\n"); fprintf(fout,"H1' H2 0.19630\n"); fprintf(fout,"N1 N* -0.03390\n"); fprintf(fout,"C6 CM -0.01830\n"); fprintf(fout,"H6 H4 0.22930\n"); fprintf(fout,"C5 CM -0.52220\n"); fprintf(fout,"H5 HA 0.18630\n"); fprintf(fout,"C4 CA 0.84390\n"); fprintf(fout,"N4 N2 -0.97730\n"); fprintf(fout,"H41 H 0.43140\n"); fprintf(fout,"H42 H 0.43140\n"); fprintf(fout,"N3 NC -0.77480\n"); fprintf(fout,"C2 C 0.79590\n"); fprintf(fout,"O O -0.65480\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OS -0.52320\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DC3 Residue\n"); fprintf(fout,"P P 1.16590\n"); fprintf(fout,"O1P O2 -0.77610\n"); fprintf(fout,"O2P O2 -0.77610\n"); fprintf(fout,"O5' OS -0.49540\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT -0.01160\n"); fprintf(fout,"H1' H2 0.19630\n"); fprintf(fout,"N1 N* -0.03390\n"); fprintf(fout,"C6 CM -0.01830\n"); fprintf(fout,"H6 H4 0.22930\n"); fprintf(fout,"C5 CM -0.52220\n"); fprintf(fout,"H5 HA 0.18630\n"); fprintf(fout,"C4 CA 0.84390\n"); fprintf(fout,"N4 N2 -0.97730\n"); fprintf(fout,"H41 H 0.43140\n"); fprintf(fout,"H42 H 0.43140\n"); fprintf(fout,"N3 NC -0.77480\n"); fprintf(fout,"C2 C 0.79590\n"); fprintf(fout,"O O -0.65480\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OH -0.65490\n"); fprintf(fout,"H3T HO 0.43960\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin DCN Residue\n"); fprintf(fout,"H5T HO 0.44220\n"); fprintf(fout,"O5' OH -0.63180\n"); fprintf(fout,"C5' CT -0.00690\n"); fprintf(fout,"H5'1 H1 0.07540\n"); fprintf(fout,"H5'2 H1 0.07540\n"); fprintf(fout,"C4' CT 0.16290\n"); fprintf(fout,"H4' H1 0.11760\n"); fprintf(fout,"O4' OS -0.36910\n"); fprintf(fout,"C1' CT -0.01160\n"); fprintf(fout,"H1' H2 0.19630\n"); fprintf(fout,"N1 N* -0.03390\n"); fprintf(fout,"C6 CM -0.01830\n"); fprintf(fout,"H6 H4 0.22930\n"); fprintf(fout,"C5 CM -0.52220\n"); fprintf(fout,"H5 HA 0.18630\n"); fprintf(fout,"C4 CA 0.84390\n"); fprintf(fout,"N4 N2 -0.97730\n"); fprintf(fout,"H41 H 0.43140\n"); fprintf(fout,"H42 H 0.43140\n"); fprintf(fout,"N3 NC -0.77480\n"); fprintf(fout,"C2 C 0.79590\n"); fprintf(fout,"O O -0.65480\n"); fprintf(fout,"C3' CT 0.07130\n"); fprintf(fout,"H3' H1 0.09850\n"); fprintf(fout,"C2' CT -0.08540\n"); fprintf(fout,"H2'1 HC 0.07180\n"); fprintf(fout,"H2'2 HC 0.07180\n"); fprintf(fout,"O3' OH -0.65490\n"); fprintf(fout,"H3T HO 0.43960\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RC5 Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.00660\n"); fprintf(fout,"H1' H2 0.20290\n"); fprintf(fout,"N1 N* -0.04840\n"); fprintf(fout,"C6 CM 0.00530\n"); fprintf(fout,"H6 H4 0.19580\n"); fprintf(fout,"C5 CM -0.52150\n"); fprintf(fout,"H5 HA 0.19280\n"); fprintf(fout,"C4 CA 0.81850\n"); fprintf(fout,"N4 N2 -0.95300\n"); fprintf(fout,"H41 H 0.42340\n"); fprintf(fout,"H42 H 0.42340\n"); fprintf(fout,"N3 NC -0.75840\n"); fprintf(fout,"C2 C 0.75380\n"); fprintf(fout,"O O -0.62520\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OS -0.52460\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RC Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.00660\n"); fprintf(fout,"H1' H2 0.20290\n"); fprintf(fout,"N1 N* -0.04840\n"); fprintf(fout,"C6 CM 0.00530\n"); fprintf(fout,"H6 H4 0.19580\n"); fprintf(fout,"C5 CM -0.52150\n"); fprintf(fout,"H5 HA 0.19280\n"); fprintf(fout,"C4 CA 0.81850\n"); fprintf(fout,"N4 N2 -0.95300\n"); fprintf(fout,"H41 H 0.42340\n"); fprintf(fout,"H42 H 0.42340\n"); fprintf(fout,"N3 NC -0.75840\n"); fprintf(fout,"C2 C 0.75380\n"); fprintf(fout,"O O -0.62520\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OS -0.52460\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RC3 Residue\n"); fprintf(fout,"P P 1.16620\n"); fprintf(fout,"O1P O2 -0.77600\n"); fprintf(fout,"O2P O2 -0.77600\n"); fprintf(fout,"O5' OS -0.49890\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.00660\n"); fprintf(fout,"H1' H2 0.20290\n"); fprintf(fout,"N1 N* -0.04840\n"); fprintf(fout,"C6 CM 0.00530\n"); fprintf(fout,"H6 H4 0.19580\n"); fprintf(fout,"C5 CM -0.52150\n"); fprintf(fout,"H5 HA 0.19280\n"); fprintf(fout,"C4 CA 0.81850\n"); fprintf(fout,"N4 N2 -0.95300\n"); fprintf(fout,"H41 H 0.42340\n"); fprintf(fout,"H42 H 0.42340\n"); fprintf(fout,"N3 NC -0.75840\n"); fprintf(fout,"C2 C 0.75380\n"); fprintf(fout,"O O -0.62520\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OH -0.65410\n"); fprintf(fout,"H3T HO 0.43760\n"); fprintf(fout,"End\n"); fprintf(fout,"Begin RCN Residue\n"); fprintf(fout,"H5T HO 0.42950\n"); fprintf(fout,"O5' OH -0.62230\n"); fprintf(fout,"C5' CT 0.05580\n"); fprintf(fout,"H5'1 H1 0.06790\n"); fprintf(fout,"H5'2 H1 0.06790\n"); fprintf(fout,"C4' CT 0.10650\n"); fprintf(fout,"H4' H1 0.11740\n"); fprintf(fout,"O4' OS -0.35480\n"); fprintf(fout,"C1' CT 0.00660\n"); fprintf(fout,"H1' H2 0.20290\n"); fprintf(fout,"N1 N* -0.04840\n"); fprintf(fout,"C6 CM 0.00530\n"); fprintf(fout,"H6 H4 0.19580\n"); fprintf(fout,"C5 CM -0.52150\n"); fprintf(fout,"H5 HA 0.19280\n"); fprintf(fout,"C4 CA 0.81850\n"); fprintf(fout,"N4 N2 -0.95300\n"); fprintf(fout,"H41 H 0.42340\n"); fprintf(fout,"H42 H 0.42340\n"); fprintf(fout,"N3 NC -0.75840\n"); fprintf(fout,"C2 C 0.75380\n"); fprintf(fout,"O O -0.62520\n"); fprintf(fout,"C3' CT 0.20220\n"); fprintf(fout,"H3' H1 0.06150\n"); fprintf(fout,"C2' CT 0.06700\n"); fprintf(fout,"H2'1 H1 0.09720\n"); fprintf(fout,"O2' OH -0.61390\n"); fprintf(fout,"HO'2 HO 0.41860\n"); fprintf(fout,"O3' OH -0.65410\n"); fprintf(fout,"H3T HO 0.43760\n"); fprintf(fout,"End\n"); } /************************************************************/ int main() { FILE* fout = fopen("TEST.TPL","w"); if(!fout) return 1; createTitleResidueTpl(fout); createListResidueTpl(fout); createResidueTpl(fout); return 0; } GabeditSrc250/utils/examples/0000755000175100017510000000000013130664665016460 5ustar allouchealloucheGabeditSrc250/utils/examples/exampleCartezian.gab0000644000175100017510000006440713130664665022442 0ustar alloucheallouche[Gabedit Format] Cart [Atoms] Angs LI 1 3 0.0000000000 0.0000000000 -0.1328882996 H 2 1 0.0000000000 0.0000000000 0.9151117004 [Basis] 1 0 s 3 1.00 0.1732897100D+03 0.8707510473D-01 0.4783443600D+02 0.2740009468D+00 0.1475362700D+02 0.7226955624D+00 s 1 1.00 0.5052147000D+01 0.1000000000D+01 s 1 1.00 0.1901550000D+01 0.1000000000D+01 s 1 1.00 0.7755150000D+00 0.1000000000D+01 s 1 1.00 0.3363550000D+00 0.1000000000D+01 s 1 1.00 0.1516590000D+00 0.1000000000D+01 s 1 1.00 0.6929600000D-01 0.1000000000D+01 p 1 1.00 0.3778640000D+00 0.1000000000D+01 p 1 1.00 0.1595540000D+00 0.1000000000D+01 d 1 1.00 0.5604930000D+00 0.1000000000D+01 d 1 1.00 0.2373780000D+00 0.1000000000D+01 f 1 1.00 0.4684260000D+00 0.1000000000D+01 2 0 s 3 1.00 0.1300773000D+02 0.3349479615D-01 0.1962079000D+01 0.2347283746D+00 0.4445290000D+00 0.8137560656D+00 s 1 1.00 0.1219492000D+00 0.1000000000D+01 p 1 1.00 0.1100000000D+01 0.1000000000D+01 [MO] Ene= -2.4212 Spin= Alpha Occup= 2.000000 1 0.112340 2 0.276323 3 0.346448 4 0.364104 5 0.030505 6 0.018864 7 -0.004736 8 0.000000 9 0.000000 10 -0.015467 11 0.000000 12 0.000000 13 0.000844 14 0.000071 15 0.000071 16 -0.000141 17 0.000000 18 0.000000 19 0.000000 20 0.000436 21 0.000436 22 -0.000871 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 -0.000040 29 0.000000 30 0.000000 31 0.000297 32 0.000000 33 0.000000 34 0.000297 35 0.000000 36 0.028958 37 -0.002051 38 0.000000 39 0.000000 40 -0.005596 Ene= -0.3158 Spin= Alpha Occup= 2.000000 1 -0.020099 2 -0.056030 3 -0.068570 4 -0.165984 5 0.049901 6 -0.161527 7 0.254619 8 0.000000 9 0.000000 10 0.113328 11 0.000000 12 0.000000 13 0.026886 14 -0.001695 15 -0.001695 16 0.003390 17 0.000000 18 0.000000 19 0.000000 20 0.002796 21 0.002796 22 -0.005591 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 -0.000035 29 0.000000 30 0.000000 31 0.000264 32 0.000000 33 0.000000 34 0.000264 35 0.000000 36 0.440380 37 0.517971 38 0.000000 39 0.000000 40 -0.008561 Ene= 0.0611 Spin= Alpha Occup= 0.000000 1 -0.007360 2 -0.028669 3 0.007306 4 -0.182387 5 0.327843 6 -0.713830 7 2.006495 8 0.000000 9 0.000000 10 -0.065302 11 0.000000 12 0.000000 13 0.038416 14 0.003528 15 0.003528 16 -0.007057 17 0.000000 18 0.000000 19 0.000000 20 -0.012435 21 -0.012435 22 0.024871 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.000090 29 0.000000 30 0.000000 31 -0.000675 32 0.000000 33 0.000000 34 -0.000675 35 0.000000 36 -0.127168 37 -0.997257 38 0.000000 39 0.000000 40 0.005712 Ene= 0.2289 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 -0.125784 10 0.000000 11 0.000000 12 1.094662 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.018026 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 -0.068706 26 0.000000 27 -0.000081 28 0.000000 29 0.000000 30 -0.000403 31 0.000000 32 0.000000 33 0.001611 34 0.000000 35 0.000000 36 0.000000 37 0.000000 38 0.000000 39 0.006415 40 0.000000 Ene= 0.2289 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 -0.125784 9 0.000000 10 0.000000 11 1.094662 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.018026 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 -0.068706 25 0.000000 26 -0.000081 27 0.000000 28 0.000000 29 -0.000403 30 0.000000 31 0.000000 32 0.001611 33 0.000000 34 0.000000 35 0.000000 36 0.000000 37 0.000000 38 0.006415 39 0.000000 40 0.000000 Ene= 0.3337 Spin= Alpha Occup= 0.000000 1 0.024650 2 0.025601 3 0.254511 4 -0.463032 5 1.933139 6 -3.823420 7 2.760136 8 0.000000 9 0.000000 10 -0.102530 11 0.000000 12 0.000000 13 0.901314 14 -0.002301 15 -0.002301 16 0.004602 17 0.000000 18 0.000000 19 0.000000 20 0.007733 21 0.007733 22 -0.015467 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.000223 29 0.000000 30 0.000000 31 -0.001670 32 0.000000 33 0.000000 34 -0.001670 35 0.000000 36 -0.126629 37 -0.669738 38 0.000000 39 0.000000 40 0.016972 Ene= 0.4300 Spin= Alpha Occup= 0.000000 1 0.010264 2 0.006100 3 0.126538 4 -0.276776 5 1.131787 6 -2.909332 7 -0.720835 8 0.000000 9 0.000000 10 0.172277 11 0.000000 12 0.000000 13 -2.033841 14 -0.003124 15 -0.003124 16 0.006249 17 0.000000 18 0.000000 19 0.000000 20 0.011859 21 0.011859 22 -0.023718 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 -0.000535 29 0.000000 30 0.000000 31 0.004015 32 0.000000 33 0.000000 34 0.004015 35 0.000000 36 -0.089421 37 3.438120 38 0.000000 39 0.000000 40 0.028428 Ene= 0.5845 Spin= Alpha Occup= 0.000000 1 0.006614 2 0.004444 3 0.076850 4 -0.152934 5 0.608147 6 -0.863406 7 1.249485 8 0.000000 9 0.000000 10 0.321713 11 0.000000 12 0.000000 13 0.150632 14 0.017690 15 0.017690 16 -0.035381 17 0.000000 18 0.000000 19 0.000000 20 -0.092118 21 -0.092118 22 0.184236 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.000113 29 0.000000 30 0.000000 31 -0.000846 32 0.000000 33 0.000000 34 -0.000846 35 0.000000 36 0.365386 37 -1.474233 38 0.000000 39 0.000000 40 -0.007882 Ene= 0.6463 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.050792 9 0.000000 10 0.000000 11 0.016873 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 -0.224041 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 1.150493 25 0.000000 26 0.000051 27 0.000000 28 0.000000 29 0.000254 30 0.000000 31 0.000000 32 -0.001015 33 0.000000 34 0.000000 35 0.000000 36 0.000000 37 0.000000 38 -0.001814 39 0.000000 40 0.000000 Ene= 0.6463 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.050792 10 0.000000 11 0.000000 12 0.016873 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -0.224041 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 1.150493 26 0.000000 27 0.000051 28 0.000000 29 0.000000 30 0.000254 31 0.000000 32 0.000000 33 -0.001015 34 0.000000 35 0.000000 36 0.000000 37 0.000000 38 0.000000 39 -0.001814 40 0.000000 Ene= 0.6625 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 -0.239239 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 1.161143 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 -0.024231 36 0.000000 37 0.000000 38 0.000000 39 0.000000 40 0.000000 Ene= 0.6625 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 -0.039873 15 0.039873 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.193524 21 -0.193524 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 -0.004038 32 0.000000 33 0.000000 34 0.004038 35 0.000000 36 0.000000 37 0.000000 38 0.000000 39 0.000000 40 0.000000 Ene= 0.9660 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 -1.650070 10 0.000000 11 0.000000 12 1.248107 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.026708 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.025075 26 0.000000 27 0.000043 28 0.000000 29 0.000000 30 0.000216 31 0.000000 32 0.000000 33 -0.000865 34 0.000000 35 0.000000 36 0.000000 37 0.000000 38 0.000000 39 -0.019871 40 0.000000 Ene= 0.9660 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 -1.650070 9 0.000000 10 0.000000 11 1.248107 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.026708 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.025075 25 0.000000 26 0.000043 27 0.000000 28 0.000000 29 0.000216 30 0.000000 31 0.000000 32 -0.000865 33 0.000000 34 0.000000 35 0.000000 36 0.000000 37 0.000000 38 -0.019871 39 0.000000 40 0.000000 Ene= 1.0847 Spin= Alpha Occup= 0.000000 1 0.007172 2 0.043700 3 -0.056072 4 0.347711 5 -0.331364 6 -0.934717 7 -1.424801 8 0.000000 9 0.000000 10 1.853937 11 0.000000 12 0.000000 13 -3.118748 14 -0.015375 15 -0.015375 16 0.030750 17 0.000000 18 0.000000 19 0.000000 20 0.096019 21 0.096019 22 -0.192037 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.000895 29 0.000000 30 0.000000 31 -0.006710 32 0.000000 33 0.000000 34 -0.006710 35 0.000000 36 0.252217 37 2.800408 38 0.000000 39 0.000000 40 0.094960 Ene= 1.2734 Spin= Alpha Occup= 0.000000 1 0.032729 2 0.218264 3 -0.366729 4 2.720798 5 -6.446926 6 6.184161 7 -1.502539 8 0.000000 9 0.000000 10 -0.079006 11 0.000000 12 0.000000 13 0.859931 14 0.022790 15 0.022790 16 -0.045581 17 0.000000 18 0.000000 19 0.000000 20 -0.062900 21 -0.062900 22 0.125801 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 -0.002595 29 0.000000 30 0.000000 31 0.019459 32 0.000000 33 0.000000 34 0.019459 35 0.000000 36 -0.437548 37 -0.877829 38 0.000000 39 0.000000 40 -0.131125 Ene= 1.4909 Spin= Alpha Occup= 0.000000 1 0.018058 2 0.118470 3 -0.173011 4 1.202447 5 -2.330006 6 1.300113 7 -0.450825 8 0.000000 9 0.000000 10 -0.536454 11 0.000000 12 0.000000 13 -0.131307 14 -0.040176 15 -0.040176 16 0.080352 17 0.000000 18 0.000000 19 0.000000 20 0.074655 21 0.074655 22 -0.149310 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.007475 29 0.000000 30 0.000000 31 -0.056060 32 0.000000 33 0.000000 34 -0.056060 35 0.000000 36 0.918649 37 -0.096895 38 0.000000 39 0.000000 40 0.242292 Ene= 1.8765 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 -0.031964 10 0.000000 11 0.000000 12 0.001771 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.046610 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 -0.041939 26 0.000000 27 -0.010219 28 0.000000 29 0.000000 30 -0.051094 31 0.000000 32 0.000000 33 0.204375 34 0.000000 35 0.000000 36 0.000000 37 0.000000 38 0.000000 39 0.056633 40 0.000000 Ene= 1.8765 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 -0.031964 9 0.000000 10 0.000000 11 0.001771 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.046610 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 -0.041939 25 0.000000 26 -0.010219 27 0.000000 28 0.000000 29 -0.051094 30 0.000000 31 0.000000 32 0.204375 33 0.000000 34 0.000000 35 0.000000 36 0.000000 37 0.000000 38 0.056633 39 0.000000 40 0.000000 Ene= 1.9215 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 -0.079737 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 0.073800 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.998398 36 0.000000 37 0.000000 38 0.000000 39 0.000000 40 0.000000 Ene= 1.9215 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 -0.013290 15 0.013290 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.012300 21 -0.012300 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.166400 32 0.000000 33 0.000000 34 -0.166400 35 0.000000 36 0.000000 37 0.000000 38 0.000000 39 0.000000 40 0.000000 Ene= 1.9252 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 -0.013608 28 0.000000 29 0.000000 30 0.204124 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 36 0.000000 37 0.000000 38 0.000000 39 0.000000 40 0.000000 Ene= 1.9252 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.013608 27 0.000000 28 0.000000 29 -0.204124 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 36 0.000000 37 0.000000 38 0.000000 39 0.000000 40 0.000000 Ene= 2.1719 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 -0.003551 10 0.000000 11 0.000000 12 -0.039591 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 1.384398 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 -0.930013 26 0.000000 27 0.001495 28 0.000000 29 0.000000 30 0.007476 31 0.000000 32 0.000000 33 -0.029902 34 0.000000 35 0.000000 36 0.000000 37 0.000000 38 0.000000 39 0.184938 40 0.000000 Ene= 2.1719 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 -0.003551 9 0.000000 10 0.000000 11 -0.039591 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 1.384398 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 -0.930013 25 0.000000 26 0.001495 27 0.000000 28 0.000000 29 0.007476 30 0.000000 31 0.000000 32 -0.029902 33 0.000000 34 0.000000 35 0.000000 36 0.000000 37 0.000000 38 0.184938 39 0.000000 40 0.000000 Ene= 2.2136 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 1.443376 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 -0.890633 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.051139 36 0.000000 37 0.000000 38 0.000000 39 0.000000 40 0.000000 Ene= 2.2136 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.240563 15 -0.240563 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 -0.148439 21 0.148439 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.008523 32 0.000000 33 0.000000 34 -0.008523 35 0.000000 36 0.000000 37 0.000000 38 0.000000 39 0.000000 40 0.000000 Ene= 2.2141 Spin= Alpha Occup= 0.000000 1 -0.000693 2 0.011183 3 -0.059230 4 0.214032 5 -0.103560 6 -0.899469 7 -0.644171 8 0.000000 9 0.000000 10 0.141964 11 0.000000 12 0.000000 13 -1.255976 14 -0.125907 15 -0.125907 16 0.251814 17 0.000000 18 0.000000 19 0.000000 20 0.133569 21 0.133569 22 -0.267139 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 -0.009485 29 0.000000 30 0.000000 31 0.071138 32 0.000000 33 0.000000 34 0.071138 35 0.000000 36 0.591071 37 1.494880 38 0.000000 39 0.000000 40 -0.090623 Ene= 2.9241 Spin= Alpha Occup= 0.000000 1 -0.012148 2 -0.028068 3 -0.118863 4 0.170640 5 -0.681525 6 2.167084 7 -0.011482 8 0.000000 9 0.000000 10 0.207028 11 0.000000 12 0.000000 13 1.498373 14 -0.026514 15 -0.026514 16 0.053028 17 0.000000 18 0.000000 19 0.000000 20 -0.100832 21 -0.100832 22 0.201665 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.019465 29 0.000000 30 0.000000 31 -0.145987 32 0.000000 33 0.000000 34 -0.145987 35 0.000000 36 -2.158967 37 -0.835785 38 0.000000 39 0.000000 40 -0.483479 Ene= 3.4950 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 -0.289883 9 0.000000 10 0.000000 11 -0.061971 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 -0.559107 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 -0.130717 25 0.000000 26 0.007724 27 0.000000 28 0.000000 29 0.038622 30 0.000000 31 0.000000 32 -0.154488 33 0.000000 34 0.000000 35 0.000000 36 0.000000 37 0.000000 38 1.381831 39 0.000000 40 0.000000 Ene= 3.4950 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 -0.289883 10 0.000000 11 0.000000 12 -0.061971 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -0.559107 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 -0.130717 26 0.000000 27 0.007724 28 0.000000 29 0.000000 30 0.038622 31 0.000000 32 0.000000 33 -0.154488 34 0.000000 35 0.000000 36 0.000000 37 0.000000 38 0.000000 39 1.381831 40 0.000000 Ene= 3.9420 Spin= Alpha Occup= 0.000000 1 -0.115717 2 0.146544 3 -3.013616 4 6.979968 5 -7.168098 6 3.616367 7 -1.013931 8 0.000000 9 0.000000 10 -0.486196 11 0.000000 12 0.000000 13 -0.108126 14 0.030910 15 0.030910 16 -0.061819 17 0.000000 18 0.000000 19 0.000000 20 0.017021 21 0.017021 22 -0.034042 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 -0.004855 29 0.000000 30 0.000000 31 0.036412 32 0.000000 33 0.000000 34 0.036412 35 0.000000 36 0.948610 37 -0.100087 38 0.000000 39 0.000000 40 -0.193062 Ene= 4.9317 Spin= Alpha Occup= 0.000000 1 -0.021435 2 -0.022172 3 -0.335981 4 -0.550995 5 2.718431 6 0.099833 7 -0.145220 8 0.000000 9 0.000000 10 2.764828 11 0.000000 12 0.000000 13 -0.101664 14 -0.179081 15 -0.179081 16 0.358162 17 0.000000 18 0.000000 19 0.000000 20 -0.024358 21 -0.024358 22 0.048716 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.016896 29 0.000000 30 0.000000 31 -0.126719 32 0.000000 33 0.000000 34 -0.126719 35 0.000000 36 -3.924630 37 0.386409 38 0.000000 39 0.000000 40 1.921912 Ene= 11.6893 Spin= Alpha Occup= 0.000000 1 -0.068832 2 -2.594700 3 5.488423 4 -5.600734 5 3.899953 6 -2.067511 7 0.561595 8 0.000000 9 0.000000 10 -0.131314 11 0.000000 12 0.000000 13 0.001711 14 0.008976 15 0.008976 16 -0.017952 17 0.000000 18 0.000000 19 0.000000 20 -0.000682 21 -0.000682 22 0.001363 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 -0.000549 29 0.000000 30 0.000000 31 0.004117 32 0.000000 33 0.000000 34 0.004117 35 0.000000 36 0.144857 37 0.033260 38 0.000000 39 0.000000 40 -0.128477 Ene= 50.9041 Spin= Alpha Occup= 0.000000 1 1.779415 2 -3.183143 3 3.456294 4 -2.873184 5 1.950292 6 -1.034469 7 0.284799 8 0.000000 9 0.000000 10 -0.042709 11 0.000000 12 0.000000 13 -0.000066 14 0.003102 15 0.003102 16 -0.006205 17 0.000000 18 0.000000 19 0.000000 20 -0.000626 21 -0.000626 22 0.001252 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 -0.000140 29 0.000000 30 0.000000 31 0.001051 32 0.000000 33 0.000000 34 0.001051 35 0.000000 36 0.039438 37 0.020629 38 0.000000 39 0.000000 40 -0.047607 [AO] Atom= H Ene= -0.4993 Spin= Alpha Occup= 1.000000 1 0.587784 2 0.501104 3 0.000000 4 0.000000 5 0.000000 Atom = Li Ene= -2.4538 Spin= Alpha Occup= 2.000000 1 0.112811 2 0.277397 3 0.349454 4 0.360712 5 0.035676 6 0.023031 7 -0.006019 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 Atom = Li Ene= -0.1907 Spin= Alpha Occup= 1.000000 1 -0.018813 2 -0.056964 3 -0.047477 4 -0.223595 5 0.186099 6 -0.488515 7 1.369326 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 [FREQ] 3664.260500 [INT] 39.868300 25.949900 [FR-COORD] Li 0.000000 0.000000 0.495108 H 0.000000 0.000000 -1.485325 [FR-NORM-COORD] vibration 1 0.000000 0.000000 0.140000 0.000000 0.000000 -0.990000 GabeditSrc250/utils/examples/exampleGeoConv.gab0000644000175100017510000000170613130664665022053 0ustar alloucheallouche [Gabedit Format] [GEOCONV] energy -0.39712144737480557E+02 -0.39726781493586287E+02 -0.39726863372967564E+02 max-force 0.0808598 0.0046851 0.0002121 rms-force 0.0284553 0.0014464 0.0000744 [GEOMETRIES] 5 C 0.0000000 0.0000000 0.0000000 H 0.0000000 0.0000000 1.0500000 H 1.0370900 0.0000000 -0.3666670 H -0.5421150 -0.9389710 -0.3833330 H -0.5656850 0.9797960 -0.4000000 5 C -0.0107729 0.0065459 -0.0148069 H -0.0170856 0.0107346 1.0676263 H 1.0087956 0.0111409 -0.3862514 H -0.5286728 -0.8720898 -0.3850459 H -0.5229743 0.8844933 -0.3815221 5 C -0.0143300 0.0084062 -0.0200280 H -0.0140264 0.0079137 1.0628683 H 1.0065522 0.0078516 -0.3808793 H -0.5241763 -0.8761719 -0.3808191 H -0.5247295 0.8928254 -0.3811419 GabeditSrc250/utils/examples/exampleSpheric.gab0000644000175100017510000015203113130664665022106 0ustar alloucheallouche[Gabedit Format] Sphe [Atoms] Angs Li 1 3 0.000000 0.000000 0.262000 H 2 1 0.000000 0.000000 -0.786000 [Basis] 1 0 S 3 1.0 173.289703 0.087075 47.834435 0.274001 14.753627 0.722696 S 1 1.0 5.052147 1.000000 S 1 1.0 1.901550 1.000000 S 1 1.0 0.775515 1.000000 S 1 1.0 0.336355 1.000000 S 1 1.0 0.151659 1.000000 S 1 1.0 0.069296 1.000000 P 1 1.0 0.377864 1.000000 P 1 1.0 0.159554 1.000000 D 1 1.0 0.560493 1.000000 D 1 1.0 0.237378 1.000000 F 1 1.0 0.468426 1.000000 2 0 S 3 1.0 13.007730 0.033495 1.962079 0.234728 0.444529 0.813756 S 1 1.0 0.121949 1.000000 P 1 1.0 1.100000 1.000000 [MO] Ene= -2.421200 Spin= Alpha Occup= 1.000000 1 0.112340 2 0.276320 3 0.346450 4 0.364100 5 0.030510 6 0.018860 7 -0.004740 8 0.000000 9 0.000000 10 0.015470 11 0.000000 12 0.000000 13 -0.000840 14 -0.000730 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -0.004530 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.002300 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.028960 32 -0.002050 33 0.000000 34 0.000000 35 0.005600 Ene= -0.315850 Spin= Alpha Occup= 1.000000 1 -0.020100 2 -0.056030 3 -0.068570 4 -0.165980 5 0.049900 6 -0.161530 7 0.254620 8 0.000000 9 0.000000 10 -0.113330 11 0.000000 12 0.000000 13 -0.026890 14 0.017620 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -0.029050 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.002040 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.440380 32 0.517970 33 0.000000 34 0.000000 35 0.008560 Ene= 0.061150 Spin= Alpha Occup= 0.000000 1 -0.007360 2 -0.028670 3 0.007310 4 -0.182390 5 0.327840 6 -0.713830 7 2.006500 8 0.000000 9 0.000000 10 0.065300 11 0.000000 12 0.000000 13 -0.038420 14 -0.036670 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.129230 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 -0.005230 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 -0.127170 32 -0.997260 33 0.000000 34 0.000000 35 -0.005710 Ene= 0.228860 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 -0.125780 9 0.000000 10 0.000000 11 1.094660 12 0.000000 13 0.000000 14 0.000000 15 -0.018030 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.068710 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.007640 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.006410 34 0.000000 35 0.000000 Ene= 0.228860 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 -0.125780 10 0.000000 11 0.000000 12 1.094660 13 0.000000 14 0.000000 15 0.000000 16 -0.018030 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 0.068710 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.007640 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.006410 35 0.000000 Ene= 0.333710 Spin= Alpha Occup= 0.000000 1 -0.024650 2 -0.025600 3 -0.254510 4 0.463030 5 -1.933140 6 3.823420 7 -2.760140 8 0.000000 9 0.000000 10 -0.102530 11 0.000000 12 0.000000 13 0.901310 14 -0.023910 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.080370 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.012940 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.126630 32 0.669740 33 0.000000 34 0.000000 35 0.016970 Ene= 0.429970 Spin= Alpha Occup= 0.000000 1 0.010260 2 0.006100 3 0.126540 4 -0.276780 5 1.131790 6 -2.909330 7 -0.720830 8 0.000000 9 0.000000 10 -0.172280 11 0.000000 12 0.000000 13 2.033840 14 0.032470 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -0.123240 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.031100 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 -0.089420 32 3.438120 33 0.000000 34 0.000000 35 -0.028430 Ene= 0.584480 Spin= Alpha Occup= 0.000000 1 -0.006610 2 -0.004440 3 -0.076850 4 0.152930 5 -0.608150 6 0.863400 7 -1.249490 8 0.000000 9 0.000000 10 0.321710 11 0.000000 12 0.000000 13 0.150630 14 0.183840 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -0.957320 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.006550 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 -0.365390 32 1.474230 33 0.000000 34 0.000000 35 -0.007880 Ene= 0.646340 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 -0.050790 9 0.000000 10 0.000000 11 -0.016870 12 0.000000 13 0.000000 14 0.000000 15 -0.224040 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 1.150490 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.004810 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.001810 34 0.000000 35 0.000000 Ene= 0.646340 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 -0.050790 10 0.000000 11 0.000000 12 -0.016870 13 0.000000 14 0.000000 15 0.000000 16 -0.224040 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 1.150490 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.004810 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.001810 35 0.000000 Ene= 0.662460 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 -0.239240 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 1.161140 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.024230 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 Ene= 0.662460 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 -0.239240 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 1.161140 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.024230 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 Ene= 0.965950 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 1.650070 9 0.000000 10 0.000000 11 -1.248110 12 0.000000 13 0.000000 14 0.000000 15 0.026710 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.025070 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.004100 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.019870 34 0.000000 35 0.000000 Ene= 0.965950 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 1.650070 10 0.000000 11 0.000000 12 -1.248110 13 0.000000 14 0.000000 15 0.000000 16 0.026710 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 0.025070 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.004100 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.019870 35 0.000000 Ene= 1.084750 Spin= Alpha Occup= 0.000000 1 0.007170 2 0.043700 3 -0.056070 4 0.347710 5 -0.331370 6 -0.934720 7 -1.424800 8 0.000000 9 0.000000 10 -1.853940 11 0.000000 12 0.000000 13 3.118750 14 0.159780 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -0.997860 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 -0.051980 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.252220 32 2.800410 33 0.000000 34 0.000000 35 -0.094960 Ene= 1.273370 Spin= Alpha Occup= 0.000000 1 -0.032730 2 -0.218260 3 0.366730 4 -2.720800 5 6.446930 6 -6.184160 7 1.502540 8 0.000000 9 0.000000 10 -0.079010 11 0.000000 12 0.000000 13 0.859930 14 0.236850 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -0.653680 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 -0.150730 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.437550 32 0.877830 33 0.000000 34 0.000000 35 -0.131120 Ene= 1.490910 Spin= Alpha Occup= 0.000000 1 -0.018060 2 -0.118470 3 0.173010 4 -1.202450 5 2.330010 6 -1.300110 7 0.450820 8 0.000000 9 0.000000 10 -0.536450 11 0.000000 12 0.000000 13 -0.131310 14 -0.417520 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.775840 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.434240 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 -0.918650 32 0.096900 33 0.000000 34 0.000000 35 0.242290 Ene= 1.876500 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 -0.031960 9 0.000000 10 0.000000 11 0.001770 12 0.000000 13 0.000000 14 0.000000 15 -0.046610 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.041940 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.969440 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.056630 34 0.000000 35 0.000000 Ene= 1.876500 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 -0.031960 10 0.000000 11 0.000000 12 0.001770 13 0.000000 14 0.000000 15 0.000000 16 -0.046610 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 0.041940 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.969440 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.056630 35 0.000000 Ene= 1.921540 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.079740 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 -0.073800 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.998400 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 Ene= 1.921540 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.079740 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 -0.073800 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.998400 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 Ene= 1.925170 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 1.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 Ene= 1.925170 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 1.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 Ene= 2.171920 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.003550 10 0.000000 11 0.000000 12 0.039590 13 0.000000 14 0.000000 15 0.000000 16 1.384400 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 -0.930010 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.141840 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 -0.184940 35 0.000000 Ene= 2.171920 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.003550 9 0.000000 10 0.000000 11 0.039590 12 0.000000 13 0.000000 14 0.000000 15 1.384400 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 -0.930010 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.141840 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 -0.184940 34 0.000000 35 0.000000 Ene= 2.213610 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 1.443380 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 -0.890630 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 -0.051140 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 Ene= 2.213610 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 1.443380 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 -0.890630 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 -0.051140 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 Ene= 2.214100 Spin= Alpha Occup= 0.000000 1 -0.000690 2 0.011180 3 -0.059230 4 0.214030 5 -0.103560 6 -0.899470 7 -0.644170 8 0.000000 9 0.000000 10 -0.141960 11 0.000000 12 0.000000 13 1.255980 14 1.308470 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -1.388090 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.551040 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.591070 32 1.494880 33 0.000000 34 0.000000 35 0.090620 Ene= 2.924120 Spin= Alpha Occup= 0.000000 1 -0.012150 2 -0.028070 3 -0.118860 4 0.170640 5 -0.681530 6 2.167080 7 -0.011480 8 0.000000 9 0.000000 10 -0.207030 11 0.000000 12 0.000000 13 -1.498370 14 0.275540 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 1.047880 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 -1.130810 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 -2.158970 32 -0.835780 33 0.000000 34 0.000000 35 0.483480 Ene= 3.494970 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 -0.289880 10 0.000000 11 0.000000 12 -0.061970 13 0.000000 14 0.000000 15 0.000000 16 0.559110 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 0.130720 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 -0.732800 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 1.381830 35 0.000000 Ene= 3.494970 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 -0.289880 9 0.000000 10 0.000000 11 -0.061970 12 0.000000 13 0.000000 14 0.000000 15 0.559110 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.130720 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 -0.732800 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 1.381830 34 0.000000 35 0.000000 Ene= 3.942030 Spin= Alpha Occup= 0.000000 1 0.115720 2 -0.146540 3 3.013620 4 -6.979970 5 7.168100 6 -3.616370 7 1.013930 8 0.000000 9 0.000000 10 -0.486200 11 0.000000 12 0.000000 13 -0.108130 14 0.321220 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.176890 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 -0.282040 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 -0.948610 32 0.100090 33 0.000000 34 0.000000 35 -0.193060 Ene= 4.931740 Spin= Alpha Occup= 0.000000 1 0.021430 2 0.022170 3 0.335980 4 0.551000 5 -2.718430 6 -0.099830 7 0.145220 8 0.000000 9 0.000000 10 2.764830 11 0.000000 12 0.000000 13 -0.101660 14 -1.861070 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -0.253140 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.981560 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 3.924630 32 -0.386410 33 0.000000 34 0.000000 35 1.921910 Ene= 11.689320 Spin= Alpha Occup= 0.000000 1 0.068830 2 2.594700 3 -5.488420 4 5.600730 5 -3.899950 6 2.067510 7 -0.561600 8 0.000000 9 0.000000 10 -0.131310 11 0.000000 12 0.000000 13 0.001710 14 0.093280 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -0.007080 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 -0.031890 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 -0.144860 32 -0.033260 33 0.000000 34 0.000000 35 -0.128480 Ene= 50.904099 Spin= Alpha Occup= 0.000000 1 1.779420 2 -3.183140 3 3.456290 4 -2.873180 5 1.950290 6 -1.034470 7 0.284800 8 0.000000 9 0.000000 10 0.042710 11 0.000000 12 0.000000 13 0.000070 14 -0.032240 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.006510 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.008140 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.039440 32 0.020630 33 0.000000 34 0.000000 35 0.047610 Ene= -2.421200 Spin= Beta Occup= 1.000000 1 0.112340 2 0.276320 3 0.346450 4 0.364100 5 0.030510 6 0.018860 7 -0.004740 8 0.000000 9 0.000000 10 0.015470 11 0.000000 12 0.000000 13 -0.000840 14 -0.000730 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -0.004530 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.002300 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.028960 32 -0.002050 33 0.000000 34 0.000000 35 0.005600 Ene= -0.315850 Spin= Beta Occup= 1.000000 1 -0.020100 2 -0.056030 3 -0.068570 4 -0.165980 5 0.049900 6 -0.161530 7 0.254620 8 0.000000 9 0.000000 10 -0.113330 11 0.000000 12 0.000000 13 -0.026890 14 0.017620 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -0.029050 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.002040 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.440380 32 0.517970 33 0.000000 34 0.000000 35 0.008560 Ene= 0.061150 Spin= Beta Occup= 0.000000 1 -0.007360 2 -0.028670 3 0.007310 4 -0.182390 5 0.327840 6 -0.713830 7 2.006500 8 0.000000 9 0.000000 10 0.065300 11 0.000000 12 0.000000 13 -0.038420 14 -0.036670 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.129230 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 -0.005230 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 -0.127170 32 -0.997260 33 0.000000 34 0.000000 35 -0.005710 Ene= 0.228860 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 -0.125780 9 0.000000 10 0.000000 11 1.094660 12 0.000000 13 0.000000 14 0.000000 15 -0.018030 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.068710 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.007640 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.006410 34 0.000000 35 0.000000 Ene= 0.228860 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 -0.125780 10 0.000000 11 0.000000 12 1.094660 13 0.000000 14 0.000000 15 0.000000 16 -0.018030 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 0.068710 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.007640 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.006410 35 0.000000 Ene= 0.333710 Spin= Beta Occup= 0.000000 1 -0.024650 2 -0.025600 3 -0.254510 4 0.463030 5 -1.933140 6 3.823420 7 -2.760140 8 0.000000 9 0.000000 10 -0.102530 11 0.000000 12 0.000000 13 0.901310 14 -0.023910 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.080370 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.012940 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.126630 32 0.669740 33 0.000000 34 0.000000 35 0.016970 Ene= 0.429970 Spin= Beta Occup= 0.000000 1 0.010260 2 0.006100 3 0.126540 4 -0.276780 5 1.131790 6 -2.909330 7 -0.720830 8 0.000000 9 0.000000 10 -0.172280 11 0.000000 12 0.000000 13 2.033840 14 0.032470 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -0.123240 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.031100 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 -0.089420 32 3.438120 33 0.000000 34 0.000000 35 -0.028430 Ene= 0.584480 Spin= Beta Occup= 0.000000 1 -0.006610 2 -0.004440 3 -0.076850 4 0.152930 5 -0.608150 6 0.863400 7 -1.249490 8 0.000000 9 0.000000 10 0.321710 11 0.000000 12 0.000000 13 0.150630 14 0.183840 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -0.957320 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.006550 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 -0.365390 32 1.474230 33 0.000000 34 0.000000 35 -0.007880 Ene= 0.646340 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 -0.050790 9 0.000000 10 0.000000 11 -0.016870 12 0.000000 13 0.000000 14 0.000000 15 -0.224040 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 1.150490 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.004810 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.001810 34 0.000000 35 0.000000 Ene= 0.646340 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 -0.050790 10 0.000000 11 0.000000 12 -0.016870 13 0.000000 14 0.000000 15 0.000000 16 -0.224040 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 1.150490 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.004810 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.001810 35 0.000000 Ene= 0.662460 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 -0.239240 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 1.161140 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.024230 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 Ene= 0.662460 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 -0.239240 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 1.161140 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.024230 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 Ene= 0.965950 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 1.650070 9 0.000000 10 0.000000 11 -1.248110 12 0.000000 13 0.000000 14 0.000000 15 0.026710 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.025070 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.004100 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.019870 34 0.000000 35 0.000000 Ene= 0.965950 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 1.650070 10 0.000000 11 0.000000 12 -1.248110 13 0.000000 14 0.000000 15 0.000000 16 0.026710 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 0.025070 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.004100 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.019870 35 0.000000 Ene= 1.084750 Spin= Beta Occup= 0.000000 1 0.007170 2 0.043700 3 -0.056070 4 0.347710 5 -0.331370 6 -0.934720 7 -1.424800 8 0.000000 9 0.000000 10 -1.853940 11 0.000000 12 0.000000 13 3.118750 14 0.159780 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -0.997860 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 -0.051980 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.252220 32 2.800410 33 0.000000 34 0.000000 35 -0.094960 Ene= 1.273370 Spin= Beta Occup= 0.000000 1 -0.032730 2 -0.218260 3 0.366730 4 -2.720800 5 6.446930 6 -6.184160 7 1.502540 8 0.000000 9 0.000000 10 -0.079010 11 0.000000 12 0.000000 13 0.859930 14 0.236850 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -0.653680 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 -0.150730 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.437550 32 0.877830 33 0.000000 34 0.000000 35 -0.131120 Ene= 1.490910 Spin= Beta Occup= 0.000000 1 -0.018060 2 -0.118470 3 0.173010 4 -1.202450 5 2.330010 6 -1.300110 7 0.450820 8 0.000000 9 0.000000 10 -0.536450 11 0.000000 12 0.000000 13 -0.131310 14 -0.417520 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.775840 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.434240 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 -0.918650 32 0.096900 33 0.000000 34 0.000000 35 0.242290 Ene= 1.876500 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 -0.031960 9 0.000000 10 0.000000 11 0.001770 12 0.000000 13 0.000000 14 0.000000 15 -0.046610 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.041940 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.969440 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.056630 34 0.000000 35 0.000000 Ene= 1.876500 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 -0.031960 10 0.000000 11 0.000000 12 0.001770 13 0.000000 14 0.000000 15 0.000000 16 -0.046610 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 0.041940 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.969440 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.056630 35 0.000000 Ene= 1.921540 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.079740 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 -0.073800 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.998400 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 Ene= 1.921540 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.079740 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 -0.073800 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.998400 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 Ene= 1.925170 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 1.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 Ene= 1.925170 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 1.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 Ene= 2.171920 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.003550 10 0.000000 11 0.000000 12 0.039590 13 0.000000 14 0.000000 15 0.000000 16 1.384400 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 -0.930010 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.141840 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 -0.184940 35 0.000000 Ene= 2.171920 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.003550 9 0.000000 10 0.000000 11 0.039590 12 0.000000 13 0.000000 14 0.000000 15 1.384400 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 -0.930010 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.141840 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 -0.184940 34 0.000000 35 0.000000 Ene= 2.213610 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 1.443380 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 -0.890630 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 -0.051140 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 Ene= 2.213610 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 1.443380 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 -0.890630 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 -0.051140 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000000 Ene= 2.214100 Spin= Beta Occup= 0.000000 1 -0.000690 2 0.011180 3 -0.059230 4 0.214030 5 -0.103560 6 -0.899470 7 -0.644170 8 0.000000 9 0.000000 10 -0.141960 11 0.000000 12 0.000000 13 1.255980 14 1.308470 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -1.388090 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.551040 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.591070 32 1.494880 33 0.000000 34 0.000000 35 0.090620 Ene= 2.924120 Spin= Beta Occup= 0.000000 1 -0.012150 2 -0.028070 3 -0.118860 4 0.170640 5 -0.681530 6 2.167080 7 -0.011480 8 0.000000 9 0.000000 10 -0.207030 11 0.000000 12 0.000000 13 -1.498370 14 0.275540 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 1.047880 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 -1.130810 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 -2.158970 32 -0.835780 33 0.000000 34 0.000000 35 0.483480 Ene= 3.494970 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 -0.289880 10 0.000000 11 0.000000 12 -0.061970 13 0.000000 14 0.000000 15 0.000000 16 0.559110 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 0.130720 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 -0.732800 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 0.000000 34 1.381830 35 0.000000 Ene= 3.494970 Spin= Beta Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 -0.289880 9 0.000000 10 0.000000 11 -0.061970 12 0.000000 13 0.000000 14 0.000000 15 0.559110 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.130720 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 -0.732800 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.000000 32 0.000000 33 1.381830 34 0.000000 35 0.000000 Ene= 3.942030 Spin= Beta Occup= 0.000000 1 0.115720 2 -0.146540 3 3.013620 4 -6.979970 5 7.168100 6 -3.616370 7 1.013930 8 0.000000 9 0.000000 10 -0.486200 11 0.000000 12 0.000000 13 -0.108130 14 0.321220 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.176890 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 -0.282040 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 -0.948610 32 0.100090 33 0.000000 34 0.000000 35 -0.193060 Ene= 4.931740 Spin= Beta Occup= 0.000000 1 0.021430 2 0.022170 3 0.335980 4 0.551000 5 -2.718430 6 -0.099830 7 0.145220 8 0.000000 9 0.000000 10 2.764830 11 0.000000 12 0.000000 13 -0.101660 14 -1.861070 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -0.253140 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.981560 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 3.924630 32 -0.386410 33 0.000000 34 0.000000 35 1.921910 Ene= 11.689320 Spin= Beta Occup= 0.000000 1 0.068830 2 2.594700 3 -5.488420 4 5.600730 5 -3.899950 6 2.067510 7 -0.561600 8 0.000000 9 0.000000 10 -0.131310 11 0.000000 12 0.000000 13 0.001710 14 0.093280 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 -0.007080 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 -0.031890 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 -0.144860 32 -0.033260 33 0.000000 34 0.000000 35 -0.128480 Ene= 50.904099 Spin= Beta Occup= 0.000000 1 1.779420 2 -3.183140 3 3.456290 4 -2.873180 5 1.950290 6 -1.034470 7 0.284800 8 0.000000 9 0.000000 10 0.042710 11 0.000000 12 0.000000 13 0.000070 14 -0.032240 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.006510 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.008140 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 31 0.039440 32 0.020630 33 0.000000 34 0.000000 35 0.047610 [AO] Atom= H Ene= -0.4993 Spin= Alpha Occup= 1.000000 1 0.587784 2 0.501104 3 0.000000 4 0.000000 5 0.000000 Atom = Li Ene= -2.464020 Spin= Alpha Occup= 2.000000 1 0.113160 2 0.278690 3 0.350600 4 0.359460 5 0.033900 6 0.023490 7 -0.007110 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 Atom = Li Ene= -0.190750 Spin= Alpha Occup= 1.000000 1 -0.018640 2 -0.056540 3 -0.046970 4 -0.222880 5 0.185900 6 -0.487270 7 1.368470 8 0.000000 9 0.000000 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.000000 15 0.000000 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.000000 21 0.000000 22 0.000000 23 0.000000 24 0.000000 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000000 30 0.000000 [FREQ] 3664.260500 [INT] 39.868300 25.949900 [FR-COORD] Li 0.000000 0.000000 0.495108 H 0.000000 0.000000 -1.485325 [FR-NORM-COORD] vibration 1 0.000000 0.000000 0.140000 0.000000 0.000000 -0.990000 GabeditSrc250/utils/Others/0000755000175100017510000000000013130665226016100 5ustar allouchealloucheGabeditSrc250/utils/Others/gabedit64.bat0000644000175100017510000000012013130664665020340 0ustar allouchealloucheset path=%path%;"C:\Program Files\Microsoft HPC Pack 2008 R2\Bin" gabedit.exe GabeditSrc250/utils/Others/gabeditRunGamess.csh0000644000175100017510000001306713130664665022040 0ustar alloucheallouche#!./csh -f # 03 Feb 05 - A.R. ALLOUCHE # set TARGET=sockets # set JOB=$1 set VERNO=$2 set NCPUS=1 set NNODES=1 set SCR=$PWD\\scratch set SCK=$PWD\\temp set HOSTLIST=$3 if ((-x $PWD/temp) && (-x $PWD/scratch)) then else echo " Error: /temp and /scratch folders are missing " echo " please create them in WinGAMESS' root folder;" echo " gabeditRunScriptGamess.csh exiting .. " exit endif if (null$VERNO == null) set VERNO=05 if (null$NNODES == null) set NNODES=1 if ($JOB:r.inp == $JOB) set JOB=$JOB:r # file assignments. unset echo setenv GMSPATH $PWD setenv GMSJOBNAME $JOB setenv master $HOSTLIST setenv ERICFMT $GMSPATH/ericfmt.dat setenv EXTBAS /dev/null setenv IRCDATA $SCK/$JOB.irc setenv INPUT $SCR/$JOB.F05 setenv PUNCH $SCK/$JOB.dat setenv AOINTS $SCR/$JOB.F08 setenv MOINTS $SCR/$JOB.F09 setenv DICTNRY $SCR/$JOB.F10 setenv DRTFILE $SCR/$JOB.F11 setenv CIVECTR $SCR/$JOB.F12 setenv CASINTS $SCR/$JOB.F13 setenv CIINTS $SCR/$JOB.F14 setenv WORK15 $SCR/$JOB.F15 setenv WORK16 $SCR/$JOB.F16 setenv CSFSAVE $SCR/$JOB.F17 setenv FOCKDER $SCR/$JOB.F18 setenv WORK19 $SCR/$JOB.F19 setenv DASORT $SCR/$JOB.F20 setenv DFTINTS $SCR/$JOB.F21 setenv DFTGRID $SCR/$JOB.F22 setenv JKFILE $SCR/$JOB.F23 setenv ORDINT $SCR/$JOB.F24 setenv EFPIND $SCR/$JOB.F25 setenv PCMDATA $SCR/$JOB.F26 setenv PCMINTS $SCR/$JOB.F27 setenv SVPWRK1 $SCR/$JOB.F26 setenv SVPWRK2 $SCR/$JOB.F27 setenv MLTPL $SCR/$JOB.F28 setenv MLTPLT $SCR/$JOB.F29 setenv DAFL30 $SCR/$JOB.F30 setenv SOINTX $SCR/$JOB.F31 setenv SOINTY $SCR/$JOB.F32 setenv SOINTZ $SCR/$JOB.F33 setenv SORESC $SCR/$JOB.F34 setenv SIMEN $SCK/$JOB.simen setenv SIMCOR $SCK/$JOB.simcor setenv GCILIST $SCR/$JOB.F37 setenv HESSIAN $SCR/$JOB.F38 setenv SOCCDAT $SCR/$JOB.F40 setenv AABB41 $SCR/$JOB.F41 setenv BBAA42 $SCR/$JOB.F42 setenv BBBB43 $SCR/$JOB.F43 setenv MCQD50 $SCR/$JOB.F50 setenv MCQD51 $SCR/$JOB.F51 setenv MCQD52 $SCR/$JOB.F52 setenv MCQD53 $SCR/$JOB.F53 setenv MCQD54 $SCR/$JOB.F54 setenv MCQD55 $SCR/$JOB.F55 setenv MCQD56 $SCR/$JOB.F56 setenv MCQD57 $SCR/$JOB.F57 setenv MCQD58 $SCR/$JOB.F58 setenv MCQD59 $SCR/$JOB.F59 setenv MCQD60 $SCR/$JOB.F60 setenv MCQD61 $SCR/$JOB.F61 setenv MCQD62 $SCR/$JOB.F62 setenv MCQD63 $SCR/$JOB.F63 setenv MCQD64 $SCR/$JOB.F64 setenv NMRINT1 $SCR/$JOB.F61 setenv NMRINT2 $SCR/$JOB.F62 setenv NMRINT3 $SCR/$JOB.F63 setenv NMRINT4 $SCR/$JOB.F64 setenv NMRINT5 $SCR/$JOB.F65 setenv NMRINT6 $SCR/$JOB.F66 setenv DCPHFH2 $SCR/$JOB.F67 setenv DCPHF21 $SCR/$JOB.F68 setenv GVVPT $SCR/$JOB.F69 setenv CCREST $SCR/$JOB.F70 setenv CCDIIS $SCR/$JOB.F71 setenv CCINTS $SCR/$JOB.F72 setenv CCT1AMP $SCR/$JOB.F73 setenv CCT2AMP $SCR/$JOB.F74 setenv CCT3AMP $SCR/$JOB.F75 setenv CCVM $SCR/$JOB.F76 setenv CCVE $SCR/$JOB.F77 setenv CCQUADS $SCR/$JOB.F78 setenv QUADSVO $SCR/$JOB.F79 setenv EOMSTAR $SCR/$JOB.F80 setenv EOMVEC1 $SCR/$JOB.F81 setenv EOMVEC2 $SCR/$JOB.F82 setenv EOMHC1 $SCR/$JOB.F83 setenv EOMHC2 $SCR/$JOB.F84 setenv EOMHHHH $SCR/$JOB.F85 setenv EOMPPPP $SCR/$JOB.F86 setenv EOMRAMP $SCR/$JOB.F87 setenv EOMRTMP $SCR/$JOB.F88 setenv EOMDG12 $SCR/$JOB.F89 setenv MMPP $SCR/$JOB.F90 setenv MMHPP $SCR/$JOB.F91 setenv MMCIVEC $SCR/$JOB.F92 setenv MMCIVC1 $SCR/$JOB.F93 setenv MMCIITR $SCR/$JOB.F94 setenv EOMVL1 $SCR/$JOB.F95 setenv EOMVL2 $SCR/$JOB.F96 setenv EOMLVEC $SCR/$JOB.F97 setenv EOMHL1 $SCR/$JOB.F98 setenv EOMHL2 $SCR/$JOB.F99 setenv OLI201 $SCR/$JOB.F201 setenv OLI202 $SCR/$JOB.F202 setenv OLI203 $SCR/$JOB.F203 setenv OLI204 $SCR/$JOB.F204 setenv OLI205 $SCR/$JOB.F205 setenv OLI206 $SCR/$JOB.F206 setenv OLI207 $SCR/$JOB.F207 setenv OLI208 $SCR/$JOB.F208 setenv OLI209 $SCR/$JOB.F209 setenv OLI210 $SCR/$JOB.F210 setenv OLI211 $SCR/$JOB.F211 setenv OLI212 $SCR/$JOB.F212 setenv OLI213 $SCR/$JOB.F213 setenv OLI214 $SCR/$JOB.F214 setenv OLI215 $SCR/$JOB.F215 setenv OLI216 $SCR/$JOB.F216 setenv OLI217 $SCR/$JOB.F217 setenv OLI218 $SCR/$JOB.F218 setenv OLI219 $SCR/$JOB.F219 setenv OLI220 $SCR/$JOB.F220 setenv OLI221 $SCR/$JOB.F221 setenv OLI222 $SCR/$JOB.F222 setenv OLI223 $SCR/$JOB.F223 setenv OLI224 $SCR/$JOB.F224 setenv OLI225 $SCR/$JOB.F225 setenv OLI226 $SCR/$JOB.F226 setenv OLI227 $SCR/$JOB.F227 setenv OLI228 $SCR/$JOB.F228 setenv OLI229 $SCR/$JOB.F229 setenv OLI230 $SCR/$JOB.F230 setenv OLI231 $SCR/$JOB.F231 setenv OLI232 $SCR/$JOB.F232 setenv OLI233 $SCR/$JOB.F233 setenv OLI234 $SCR/$JOB.F234 setenv OLI235 $SCR/$JOB.F235 setenv OLI236 $SCR/$JOB.F236 setenv OLI237 $SCR/$JOB.F237 setenv OLI238 $SCR/$JOB.F238 setenv OLI239 $SCR/$JOB.F239 setenv VB2000PATH $GMSPATH/VB2000 # if ((-x $GMSPATH/gamess.$VERNO.exe) && (-x $GMSPATH/ddikick.exe)) then else echo The GAMESS executable gamess.$VERNO.exe or else echo the DDIKICK executable ddikick.exe echo could not be found in directory $GMSPATH, echo or else they did not properly link to executable permission. exit 8 endif # # OK, now we are ready to execute! # The kickoff program initiates GAMESS process(es) on all CPUs/nodes. # if ((-x $GMSPATH/gamess.$VERNO.exe) && (-x $GMSPATH/ddikick.exe)) then set echo $GMSPATH/ddikick.exe $GMSPATH/gamess.$VERNO.exe $JOB \ -ddi $NNODES $NCPUS $HOSTLIST \ -scr $SCR < /dev/null unset echo else echo The GAMESS executable gamess.$VERNO.exe or else echo the DDIKICK executable ddikick.exe echo could not be found in directory $GMSPATH, echo or else they did not properly link to executable permission. exit 8 endif echo ----- accounting info ----- exit GabeditSrc250/utils/Others/createH.c0000644000175100017510000000155113130665226017621 0ustar alloucheallouche#include #include #include /**********************************************/ int main(int argc,char* argv[]) { FILE* p1; FILE* p2; char* filename = NULL; char* p1name = "p1"; char* p2name = "p2"; int i; if(argc<2) { printf("vous devez fournir un nom de fichier\n"); return 1; } else filename = strdup(argv[1]); for(i=0;i #include #include #include #define MAXATOMS 200 #define MAXISO 20 #define BSIZE 1024 double masses[MAXATOMS][MAXISO]; int imasses[MAXATOMS][MAXISO]; double abands[MAXATOMS][MAXISO]; char symbols[MAXATOMS][10]; int z[MAXATOMS]; int nIso[MAXATOMS]; double sumAband[MAXATOMS]; /**********************************************/ void str_delete_n(char* str) { char *s; if(str == NULL) return; if (!*str) return; for (s = str + strlen (str) - 1; s >= str && ((unsigned char)*s)=='\n'; s--) *s = '\0'; } /**********************************************/ void delete_last_spaces(char* str) { char *s; if(str == NULL) return; if (!*str) return; for (s = str + strlen (str) - 1; s >= str && isspace ((unsigned char)*s); s--) *s = '\0'; } /**********************************************/ void delete_first_spaces(char* str) { unsigned char *start; int i; int lenSpace = 0; if(str == NULL) return; if (!*str) return; for (start = str; *start && isspace (*start); start++)lenSpace++; for(i=0;i<(int)(strlen(str)-lenSpace);i++) str[i] = str[i+lenSpace]; str[strlen(str)-lenSpace] = '\0'; } /**********************************************/ void add_setProp(char* str) { unsigned char *start; int i; int l; int k = 0; char dump[BSIZE]; if(str == NULL) return; if (!*str) return; for(i=0, l=0;i<(int)(strlen(str));i++) { if(str[i]==' ') { if(k==0) { dump[l]='"'; l++; dump[l]=','; l++; } else { dump[l]=','; l++; } k++; } dump[l]=str[i]; l++; } dump[l]='\0'; str[l]='\0'; for(l=0;l<(int)(strlen(dump));l++) str[l] = dump[l]; } /**********************************************/ void swapReals(double* a, double* b) { double c; c = *a; *a = *b; *b = c; } /**********************************************/ void swapInts(int* a, int* b) { int c; c = *a; *a = *b; *b = c; } /**********************************************/ int main(int argc,char* argv[]) { FILE* fin; FILE* fout; char t[BSIZE]; char* filename = NULL; int Z; char symb[100]; char sdum[100]; double rcov; double rbo; double rvdw; int maxvalance; double mass; double aband; double elNeg; double red; double green; double blue; int n = 0; int i = 0; int j = 0; char* token; int end; double ptot = 0; int imass; int is; if(argc<2) filename = strdup("isotopNIST.txt"); else filename = strdup(argv[1]); printf("Input file = %s\n",filename); printf("Output file = %s\n","p.c"); fin = fopen(filename,"r"); if(!fin) { printf("I can not open %s\n",filename); return 1; } fout = fopen("p.c","w"); if(!fout) { printf("I can not open p.c\n"); return 1; } n = 0; while(!feof(fin)) { end = 1; while(!feof(fin)) { if(!fgets(t,BSIZE,fin)) break; i = sscanf(t,"%d %s", &Z, sdum); if(i==2 && strlen(sdum)<4 && strlen(sdum)>0 && Z>0) { end = 0; break; } } if(end != 0) break; str_delete_n(t); token = strtok(t," "); Z = 0; if(token) Z = atoi(token); token = strtok(NULL, " "); sprintf(symb,"%s",token); token = strtok(NULL, " "); imass = 0; if(token) imass = atoi(token); token = strtok(NULL, "("); mass = 1.0; if(token) mass = atof(token); if(token && strstr(token,"[")) mass = imass; token = strtok(NULL, " "); token = strtok(NULL, "("); aband = 0; if(token) aband = atof(token); if(token && strstr(token,"[")) aband = 0.0; n++; end = 1; ptot = aband; is = 0; masses[n-1][is] = mass; imasses[n-1][is] = imass; abands[n-1][is] = aband; z[n-1] = Z; sprintf(symbols[n-1],"%s",symb); nIso[n-1] = is+1; while(!feof(fin)) { if(!fgets(t,BSIZE,fin)) break; delete_first_spaces(t); delete_last_spaces(t); str_delete_n(t); i = sscanf(t,"%s", sdum); if(i!=1 || strlen(sdum)>3 || strlen(sdum)<1 ) { end = 0; break; } token = strtok(t," "); if(n==1) token = strtok(NULL, " "); imass = 0; if(token) imass = atoi(token); token = strtok(NULL, "("); mass = 1.0; if(token) mass = atof(token); if(token && strstr(token,"[")) mass = imass; token = strtok(NULL, " "); token = strtok(NULL, "("); aband = 0; if(token) aband = atof(token); if(token && strstr(token,"[")) aband = 0.0; ptot += aband; is++; masses[n-1][is] = mass; imasses[n-1][is] = imass; abands[n-1][is] = aband; nIso[n-1] = is+1; } sumAband[n-1] = ptot; if(end !=0) {n--; break;} } printf("n = %d\n", n); for(i=0;i1e-3) { if(fabs(sumAband[i])<1e-8) { printf(" ===================> Warning ptot != 100 ptot = %f\n",sumAband[i]); for(j=0;j After correction ptot = %f\n",sumAband[i]); } else printf(" ERRRRRRRRRRRRRRRRRR> Warning ptot != 100 ptot = %f\n",sumAband[i]); } } /* sorting by iso abandance */ for(i=0;iabands[i][m]) m = k; if(m!=j) { swapReals(&abands[i][m], &abands[i][j]); swapReals(&masses[i][m], &masses[i][j]); swapInts(&imasses[i][m], &imasses[i][j]); } } sumAband[i] = 0; for(j=0;j1e-3) printf(" ===================> Warning ptot != 100 ptot = %f\n",sumAband[i]); } for(i=0;i #include #include #define NATOMS 120 #define BSIZE 1024 /**********************************************/ void str_delete_n(char* str) { char *s; if(str == NULL) return; if (!*str) return; for (s = str + strlen (str) - 1; s >= str && ((unsigned char)*s)=='\n'; s--) *s = '\0'; } /**********************************************/ void delete_last_spaces(char* str) { char *s; if(str == NULL) return; if (!*str) return; for (s = str + strlen (str) - 1; s >= str && isspace ((unsigned char)*s); s--) *s = '\0'; } /**********************************************/ void delete_first_spaces(char* str) { unsigned char *start; int i; int lenSpace = 0; if(str == NULL) return; if (!*str) return; for (start = str; *start && isspace (*start); start++)lenSpace++; for(i=0;i<(int)(strlen(str)-lenSpace);i++) str[i] = str[i+lenSpace]; str[strlen(str)-lenSpace] = '\0'; } /**********************************************/ void add_setProp(char* str) { unsigned char *start; int i; int l; int k = 0; char dump[BSIZE]; if(str == NULL) return; if (!*str) return; for(i=0, l=0;i<(int)(strlen(str));i++) { if(str[i]==' ') { if(k==0) { dump[l]='"'; l++; dump[l]=','; l++; } else { dump[l]=','; l++; } k++; } dump[l]=str[i]; l++; } dump[l]='\0'; str[l]='\0'; for(l=0;l<(int)(strlen(dump));l++) str[l] = dump[l]; } /**********************************************/ int main(int argc,char* argv[]) { FILE* fin; FILE* fout; char t[BSIZE]; char* filename = NULL; if(argc<2) filename = strdup("p"); else filename = strdup(argv[1]); printf("Input file = %s\n",filename); printf("Output file = %s\n","p.c"); fin = fopen(filename,"r"); if(!fin) { printf("I can not open %s\n",filename); return 1; } fout = fopen("p.c","w"); if(!fout) { printf("I can not open Fragment.c\n"); return 1; } while(!feof(fin)) { if(!fgets(t,BSIZE,fin)) break; delete_first_spaces(t); delete_last_spaces(t); str_delete_n(t); add_setProp(t); fprintf(fout,"\tsetPropForOneAtom(\"%s);\n",t); } fclose(fin); fclose(fout); return 0; } GabeditSrc250/utils/Others/isotopNIST.txt0000644000175100017510000006610413130664665020671 0ustar allouchealloucheAtomic Weights and Isotopic Compositions for All Elements from http://physics.nist.gov/PhysRefData/Compositions/ _________________________________________________________________________ Relative Isotopic Standard Isotope Atomic Mass Composition Atomic Weight Notes _________________________________________________________________________ 1 H 1 1.0078250321(4) 99.9885(70) 1.00794(7) g,m,r,c,w D 2 2.0141017780(4) 0.0115(70) T 3 3.0160492675(11) _________________________________________________________________________ 2 He 3 3.0160293097(9) 0.000137(3) 4.002602(2) g,r,a 4 4.0026032497(10) 99.999863(3) _________________________________________________________________________ 3 Li 6 6.0151223(5) 7.59(4) 6.941(2) g,m,r,b,d 7 7.0160040(5) 92.41(4) _________________________________________________________________________ 4 Be 9 9.0121821(4) 100 9.012182(3) _________________________________________________________________________ 5 B 10 10.0129370(4) 19.9(7) 10.811(7) g,m,r 11 11.0093055(5) 80.1(7) _________________________________________________________________________ 6 C 12 12.0000000(0) 98.93(8) 12.0107(8) g,r 13 13.0033548378(10) 1.07(8) 14 14.003241988(4) _________________________________________________________________________ 7 N 14 14.0030740052(9) 99.632(7) 14.0067(2) g,r,e 15 15.0001088984(9) 0.368(7) _________________________________________________________________________ 8 O 16 15.9949146221(15) 99.757(16) 15.9994(3) g,r 17 16.99913150(22) 0.038(1) 18 17.9991604(9) 0.205(14) _________________________________________________________________________ 9 F 19 18.99840320(7) 100 18.9984032(5) _________________________________________________________________________ 10 Ne 20 19.9924401759(20) 90.48(3) 20.1797(6) g,m,r,a 21 20.99384674(4) 0.27(1) 22 21.99138551(23) 9.25(3) _________________________________________________________________________ 11 Na 23 22.98976967(23) 100 22.989770(2) _________________________________________________________________________ 12 Mg 24 23.98504190(20) 78.99(4) 24.3050(6) 25 24.98583702(20) 10.00(1) 26 25.98259304(21) 11.01(3) _________________________________________________________________________ 13 Al 27 26.98153844(14) 100 26.981538(2) _________________________________________________________________________ 14 Si 28 27.9769265327(20) 92.2297(7) 28.0855(3) r 29 28.97649472(3) 4.6832(5) 30 29.97377022(5) 3.0872(5) _________________________________________________________________________ 15 P 31 30.97376151(20) 100 30.973761(2) _________________________________________________________________________ 16 S 32 31.97207069(12) 94.93(31) 32.065(5) g,r 33 32.97145850(12) 0.76(2) 34 33.96786683(11) 4.29(28) 36 35.96708088(25) 0.02(1) _________________________________________________________________________ 17 Cl 35 34.96885271(4) 75.78(4) 35.453(2) m 37 36.96590260(5) 24.22(4) _________________________________________________________________________ 18 Ar 36 35.96754628(27) 0.3365(30) 39.948(1) g,r,a 38 37.9627322(5) 0.0632(5) 40 39.962383123(3) 99.6003(30) _________________________________________________________________________ 19 K 39 38.9637069(3) 93.2581(44) 39.0983(1) 40 39.96399867(29) 0.0117(1) 41 40.96182597(28) 6.7302(44) _________________________________________________________________________ 20 Ca 40 39.9625912(3) 96.941(156) 40.078(4) g,r,f 42 41.9586183(4) 0.647(23) 43 42.9587668(5) 0.135(10) 44 43.9554811(9) 2.086(110) 46 45.9536928(25) 0.004(3) 48 47.952534(4) 0.187(21) _________________________________________________________________________ 21 Sc 45 44.9559102(12) 100 44.955910(8) _________________________________________________________________________ 22 Ti 46 45.9526295(12) 8.25(3) 47.867(1) 47 46.9517638(10) 7.44(2) 48 47.9479471(10) 73.72(3) 49 48.9478708(10) 5.41(2) 50 49.9447921(11) 5.18(2) _________________________________________________________________________ 23 V 50 49.9471628(14) 0.250(4) 50.9415(1) 51 50.9439637(14) 99.750(4) _________________________________________________________________________ 24 Cr 50 49.9460496(14) 4.345(13) 51.9961(6) 52 51.9405119(15) 83.789(18) 53 52.9406538(15) 9.501(17) 54 53.9388849(15) 2.365(7) _________________________________________________________________________ 25 Mn 55 54.9380496(14) 100 54.938049(9) _________________________________________________________________________ 26 Fe 54 53.9396148(14) 5.845(35) 55.845(2) 56 55.9349421(15) 91.754(36) 57 56.9353987(15) 2.119(10) 58 57.9332805(15) 0.282(4) _________________________________________________________________________ 27 Co 59 58.9332002(15) 100 58.933200(9) _________________________________________________________________________ 28 Ni 58 57.9353479(15) 68.0769(89) 58.6934(2) 60 59.9307906(15) 26.2231(77) 61 60.9310604(15) 1.1399(6) 62 61.9283488(15) 3.6345(17) 64 63.9279696(16) 0.9256(9) _________________________________________________________________________ 29 Cu 63 62.9296011(15) 69.17(3) 63.546(3) r 65 64.9277937(19) 30.83(3) _________________________________________________________________________ 30 Zn 64 63.9291466(18) 48.63(60) 65.409(4) 66 65.9260368(16) 27.90(27) 67 66.9271309(17) 4.10(13) 68 67.9248476(17) 18.75(51) 70 69.925325(4) 0.62(3) _________________________________________________________________________ 31 Ga 69 68.925581(3) 60.108(9) 69.723(1) m 71 70.9247050(19) 39.892(9) _________________________________________________________________________ 32 Ge 70 69.9242504(19) 20.84(87) 72.64(1) h 72 71.9220762(16) 27.54(34) 73 72.9234594(16) 7.73(5) 74 73.9211782(16) 36.28(73) 76 75.9214027(16) 7.61(38) _________________________________________________________________________ 33 As 75 74.9215964(18) 100 74.92160(2) _________________________________________________________________________ 34 Se 74 73.9224766(16) 0.89(4) 78.96(3) r 76 75.9192141(16) 9.37(29) 77 76.9199146(16) 7.63(16) 78 77.9173095(16) 23.77(28) 80 79.9165218(20) 49.61(41) 82 81.9167000(22) 8.73(22) _________________________________________________________________________ 35 Br 79 78.9183376(20) 50.69(7) 79.904(1) 81 80.916291(3) 49.31(7) _________________________________________________________________________ 36 Kr 78 77.920386(7) 0.35(1) 83.798(2) g,m,a 80 79.916378(4) 2.28(6) 82 81.9134846(28) 11.58(14) 83 82.914136(3) 11.49(6) 84 83.911507(3) 57.00(4) 86 85.9106103(12) 17.30(22) _________________________________________________________________________ 37 Rb 85 84.9117893(25) 72.17(2) 85.4678(3) g 87 86.9091835(27) 27.83(2) _________________________________________________________________________ 38 Sr 84 83.913425(4) 0.56(1) 87.62(1) g,r,f 86 85.9092624(24) 9.86(1) 87 86.9088793(24) 7.00(1) 88 87.9056143(24) 82.58(1) _________________________________________________________________________ 39 Y 89 88.9058479(25) 100 88.90585(2) _________________________________________________________________________ 40 Zr 90 89.9047037(23) 51.45(40) 91.224(2) g 91 90.9056450(23) 11.22(5) 92 91.9050401(23) 17.15(8) 94 93.9063158(25) 17.38(28) 96 95.908276(3) 2.80(9) _________________________________________________________________________ 41 Nb 93 92.9063775(24) 100 92.90638(2) _________________________________________________________________________ 42 Mo 92 91.906810(4) 14.84(35) 95.94(2) g 94 93.9050876(20) 9.25(12) 95 94.9058415(20) 15.92(13) 96 95.9046789(20) 16.68(2) 97 96.9060210(20) 9.55(8) 98 97.9054078(20) 24.13(31) 100 99.907477(6) 9.63(23) _________________________________________________________________________ 43 Tc 97 96.906365(5) [98] 98 97.907216(4) 99 98.9062546(21) _________________________________________________________________________ 44 Ru 96 95.907598(8) 5.54(14) 101.07(2) g 98 97.905287(7) 1.87(3) 99 98.9059393(21) 12.76(14) 100 99.9042197(22) 12.60(7) 101 100.9055822(22) 17.06(2) 102 101.9043495(22) 31.55(14) 104 103.905430(4) 18.62(27) _________________________________________________________________________ 45 Rh 103 102.905504(3) 100 102.90550(2) _________________________________________________________________________ 46 Pd 102 101.905608(3) 1.02(1) 106.42(1) g,r 104 103.904035(5) 11.14(8) 105 104.905084(5) 22.33(8) 106 105.903483(5) 27.33(3) 108 107.903894(4) 26.46(9) 110 109.905152(12) 11.72(9) _________________________________________________________________________ 47 Ag 107 106.905093(6) 51.839(8) 107.8682(2) g 109 108.904756(3) 48.161(8) _________________________________________________________________________ 48 Cd 106 105.906458(6) 1.25(6) 112.411(8) g 108 107.904183(6) 0.89(3) 110 109.903006(3) 12.49(18) 111 110.904182(3) 12.80(12) 112 111.9027572(30) 24.13(21) 113 112.9044009(30) 12.22(12) 114 113.9033581(30) 28.73(42) 116 115.904755(3) 7.49(18) _________________________________________________________________________ 49 In 113 112.904061(4) 4.29(5) 114.818(3) 115 114.903878(5) 95.71(5) _________________________________________________________________________ 50 Sn 112 111.904821(5) 0.97(1) 118.710(7) g 114 113.902782(3) 0.66(1) 115 114.903346(3) 0.34(1) 116 115.901744(3) 14.54(9) 117 116.902954(3) 7.68(7) 118 117.901606(3) 24.22(9) 119 118.903309(3) 8.59(4) 120 119.9021966(27) 32.58(9) 122 121.9034401(29) 4.63(3) 124 123.9052746(15) 5.79(5) _________________________________________________________________________ 51 Sb 121 120.9038180(24) 57.21(5) 121.760(1) g 123 122.9042157(22) 42.79(5) _________________________________________________________________________ 52 Te 120 119.904020(11) 0.09(1) 127.60(3) g,h 122 121.9030471(20) 2.55(12) 123 122.9042730(19) 0.89(3) 124 123.9028195(16) 4.74(14) 125 124.9044247(20) 7.07(15) 126 125.9033055(20) 18.84(25) 128 127.9044614(19) 31.74(8) 130 129.9062228(21) 34.08(62) _________________________________________________________________________ 53 I 127 126.904468(4) 100 126.90447(3) _________________________________________________________________________ 54 Xe 124 123.9058958(21) 0.09(1) 131.293(6) g,m 126 125.904269(7) 0.09(1) 128 127.9035304(15) 1.92(3) 129 128.9047795(9) 26.44(24) 130 129.9035079(10) 4.08(2) 131 130.9050819(10) 21.18(3) 132 131.9041545(12) 26.89(6) 134 133.9053945(9) 10.44(10) 136 135.907220(8) 8.87(16) _________________________________________________________________________ 55 Cs 133 132.905447(3) 100 132.90545(2) _________________________________________________________________________ 56 Ba 130 129.906310(7) 0.106(1) 137.327(7) 132 131.905056(3) 0.101(1) 134 133.904503(3) 2.417(18) 135 134.905683(3) 6.592(12) 136 135.904570(3) 7.854(24) 137 136.905821(3) 11.232(24) 138 137.905241(3) 71.698(42) _________________________________________________________________________ 57 La 138 137.907107(4) 0.090(1) 138.9055(2) g 139 138.906348(3) 99.910(1) _________________________________________________________________________ 58 Ce 136 135.907140(50) 0.185(2) 140.116(1) g,f 138 137.905986(11) 0.251(2) 140 139.905434(3) 88.450(51) 142 141.909240(4) 11.114(51) _________________________________________________________________________ 59 Pr 141 140.907648(3) 100 140.90765(2) _________________________________________________________________________ 60 Nd 142 141.907719(3) 27.2(5) 144.24(3) g,f 143 142.909810(3) 12.2(2) 144 143.910083(3) 23.8(3) 145 144.912569(3) 8.3(1) 146 145.913112(3) 17.2(3) 148 147.916889(3) 5.7(1) 150 149.920887(4) 5.6(2) _________________________________________________________________________ 61 Pm 145 144.912744(4) [145] 147 146.915134(3) _________________________________________________________________________ 62 Sm 144 143.911995(4) 3.07(7) 150.36(3) g 147 146.914893(3) 14.99(18) 148 147.914818(3) 11.24(10) 149 148.917180(3) 13.82(7) 150 149.917271(3) 7.38(1) 152 151.919728(3) 26.75(16) 154 153.922205(3) 22.75(29) _________________________________________________________________________ 63 Eu 151 150.919846(3) 47.81(3) 151.964(1) g 153 152.921226(3) 52.19(3) _________________________________________________________________________ 64 Gd 152 151.919788(3) 0.20(1) 157.25(3) g 154 153.920862(3) 2.18(3) 155 154.922619(3) 14.80(12) 156 155.922120(3) 20.47(9) 157 156.923957(3) 15.65(2) 158 157.924101(3) 24.84(7) 160 159.927051(3) 21.86(19) _________________________________________________________________________ 65 Tb 159 158.925343(3) 100 158.92534(2) _________________________________________________________________________ 66 Dy 156 155.924278(7) 0.06(1) 162.500(1) g 158 157.924405(4) 0.10(1) 160 159.925194(3) 2.34(8) 161 160.926930(3) 18.91(24) 162 161.926795(3) 25.51(26) 163 162.928728(3) 24.90(16) 164 163.929171(3) 28.18(37) _________________________________________________________________________ 67 Ho 165 164.930319(3) 100 164.93032(2) _________________________________________________________________________ 68 Er 162 161.928775(4) 0.14(1) 167.259(3) g 164 163.929197(4) 1.61(3) 166 165.930290(3) 33.61(35) 167 166.932045(3) 22.93(17) 168 167.932368(3) 26.78(26) 170 169.935460(3) 14.93(27) _________________________________________________________________________ 69 Tm 169 168.934211(3) 100 168.93421(2) _________________________________________________________________________ 70 Yb 168 167.933894(5) 0.13(1) 173.04(3) g 170 169.934759(3) 3.04(15) 171 170.936322(3) 14.28(57) 172 171.9363777(30) 21.83(67) 173 172.9382068(30) 16.13(27) 174 173.9388581(30) 31.83(92) 176 175.942568(3) 12.76(41) _________________________________________________________________________ 71 Lu 175 174.9407679(28) 97.41(2) 174.967(1) g 176 175.9426824(28) 2.59(2) _________________________________________________________________________ 72 Hf 174 173.940040(3) 0.16(1) 178.49(2) f 176 175.9414018(29) 5.26(7) 177 176.9432200(27) 18.60(9) 178 177.9436977(27) 27.28(7) 179 178.9458151(27) 13.62(2) 180 179.9465488(27) 35.08(16) _________________________________________________________________________ 73 Ta 180 179.947466(3) 0.012(2) 180.9479(1) 181 180.947996(3) 99.988(2) _________________________________________________________________________ 74 W 180 179.946706(5) 0.12(1) 183.84(1) 182 181.948206(3) 26.50(16) 183 182.9502245(29) 14.31(4) 184 183.9509326(29) 30.64(2) 186 185.954362(3) 28.43(19) _________________________________________________________________________ 75 Re 185 184.9529557(30) 37.40(2) 186.207(1) 187 186.9557508(30) 62.60(2) _________________________________________________________________________ 76 Os 184 183.952491(3) 0.02(1) 190.23(3) g,r,f 186 185.953838(3) 1.59(3) 187 186.9557479(30) 1.96(2) 188 187.9558360(30) 13.24(8) 189 188.9581449(30) 16.15(5) 190 189.958445(3) 26.26(2) 192 191.961479(4) 40.78(19) _________________________________________________________________________ 77 Ir 191 190.960591(3) 37.3(2) 192.217(3) 193 192.962924(3) 62.7(2) _________________________________________________________________________ 78 Pt 190 189.959930(7) 0.014(1) 195.078(2) 192 191.961035(4) 0.782(7) 194 193.962664(3) 32.967(99) 195 194.964774(3) 33.832(10) 196 195.964935(3) 25.242(41) 198 197.967876(4) 7.163(55) _________________________________________________________________________ 79 Au 197 196.966552(3) 100 196.96655(2) _________________________________________________________________________ 80 Hg 196 195.965815(4) 0.15(1) 200.59(2) 198 197.966752(3) 9.97(20) 199 198.968262(3) 16.87(22) 200 199.968309(3) 23.10(19) 201 200.970285(3) 13.18(9) 202 201.970626(3) 29.86(26) 204 203.973476(3) 6.87(15) _________________________________________________________________________ 81 Tl 203 202.972329(3) 29.524(14) 204.3833(2) 205 204.974412(3) 70.476(14) _________________________________________________________________________ 82 Pb 204 203.973029(3) 1.4(1) 207.2(1) g,r,f 206 205.974449(3) 24.1(1) 207 206.975881(3) 22.1(1) 208 207.976636(3) 52.4(1) _________________________________________________________________________ 83 Bi 209 208.980383(3) 100 208.98038(2) _________________________________________________________________________ 84 Po 209 208.982416(3) [209] 210 209.982857(3) _________________________________________________________________________ 85 At 210 209.987131(9) [210] 211 210.987481(4) _________________________________________________________________________ 86 Rn 211 210.990585(8) [222] 220 220.0113841(29) 222 222.0175705(27) _________________________________________________________________________ 87 Fr 223 223.0197307(29) [223] _________________________________________________________________________ 88 Ra 223 223.018497(3) [226] 224 224.0202020(29) 226 226.0254026(27) 228 228.0310641(27) _________________________________________________________________________ 89 Ac 227 227.0277470(29) [227] _________________________________________________________________________ 90 Th 230 230.0331266(22) 0.0 232.0381(1) g Allouche 232 232.0380504(22) 100 _________________________________________________________________________ 91 Pa 231 231.0358789(28) 100 231.03588(2) _________________________________________________________________________ 92 U 233 233.039628(3) 0.0 238.02891(3) g,m,r,d,f Allouche 234 234.0409456(21) 0.0055(2) 235 235.0439231(21) 0.7200(51) 236 236.0455619(21) 238 238.0507826(21) 99.2745(106) _________________________________________________________________________ 93 Np 237 237.0481673(21) [237] 239 239.0529314(23) _________________________________________________________________________ 94 Pu 238 238.0495534(21) [244] 239 239.0521565(21) 240 240.0538075(21) 241 241.0568453(21) 242 242.0587368(21) 244 244.064198(5) _________________________________________________________________________ 95 Am 241 241.0568229(21) [243] 243 243.0613727(23) _________________________________________________________________________ 96 Cm 243 243.0613822(24) [247] 244 244.0627463(21) 245 245.0654856(29) 246 246.0672176(24) 247 247.070347(5) 248 248.072342(5) _________________________________________________________________________ 97 Bk 247 247.070299(6) [247] 249 249.074980(3) _________________________________________________________________________ 98 Cf 249 249.074847(3) [251] 250 250.0764000(24) 251 251.079580(5) 252 252.081620(5) _________________________________________________________________________ 99 Es 252 252.082970(50) [252] _________________________________________________________________________ 100 Fm 257 257.095099(7) [257] _________________________________________________________________________ 101 Md 256 256.094050(60) [258] 258 258.098425(5) _________________________________________________________________________ 102 No 259 259.10102(11)# [259] _________________________________________________________________________ 103 Lr 262 262.10969(32)# [262] _________________________________________________________________________ 104 Rf 261 261.10875(11)# [261] _________________________________________________________________________ 105 Db 262 262.11415(20)# [262] _________________________________________________________________________ 106 Sg 266 266.12193(31)# [266] _________________________________________________________________________ 107 Bh 264 264.12473(30)# [264] _________________________________________________________________________ 108 Hs 277 [277] _________________________________________________________________________ 109 Mt 268 268.13882(34)# [268] _________________________________________________________________________ 110 Uun 281 [281] _________________________________________________________________________ 111 Uuu 272 272.15348(36)# [272] _________________________________________________________________________ 112 Uub 285 [285] _________________________________________________________________________ _________________________________________________________________________ 114 Uuq 289 [289] _________________________________________________________________________ _________________________________________________________________________ 116 Uuh 292 [292] _________________________________________________________________________ GabeditSrc250/utils/Others/addInclude.c0000644000175100017510000000172513130665226020305 0ustar alloucheallouche#include #include #include /**********************************************/ void str_delete_n(char* str) { char *s; if(str == NULL) return; if (!*str) return; for (s = str + strlen (str) - 1; s >= str && ((unsigned char)*s)=='\n'; s--) *s = '\0'; } #define BSIZE 1024 /**********************************************/ int main(int argc,char* argv[]) { FILE* fin; FILE* fout; char t[BSIZE]; char* filename = NULL; if(argc<2) filename = strdup("p"); else filename = strdup(argv[1]); printf("Input file = %s\n",filename); printf("Output file = %s\n","p.c"); fin = fopen(filename,"r"); if(!fin) { printf("I can not open %s\n",filename); return 1; } fout = fopen("p.c","w"); if(!fout) { printf("I can not open Fragment.c\n"); return 1; } while(!feof(fin)) { if(!fgets(t,BSIZE,fin)) break; str_delete_n(t); fprintf(fout,"#include \"../../pixmaps/%s\"\n",t); } fclose(fin); fclose(fout); return 0; } GabeditSrc250/utils/Others/createFuncFromFile.c0000644000175100017510000000402613130665226021751 0ustar alloucheallouche#include #include #include #define BSIZE 1024 /***********************************************************************************/ void str_delete_n(char* str) { char *s; if(str == NULL) return; if (!*str) return; for (s = str + strlen (str) - 1; s >= str && ((unsigned char)*s)=='\n'; s--) *s = '\0'; } /**********************************************/ void delete_last_spaces(char* str) { char *s; if(str == NULL) return; if (!*str) return; for (s = str + strlen (str) - 1; s >= str && isspace ((unsigned char)*s); s--) *s = '\0'; } /**********************************************/ void delete_first_spaces(char* str) { unsigned char *start; int i; int lenSpace = 0; if(str == NULL) return; if (!*str) return; for (start = str; *start && isspace (*start); start++)lenSpace++; for(i=0;i<(int)(strlen(str)-lenSpace);i++) str[i] = str[i+lenSpace]; str[strlen(str)-lenSpace] = '\0'; } /***********************************************************************************/ void createMPQCFunction(char* inputFile, char* outputFile) { FILE* file; FILE* fin; char t[BSIZE]; fin = fopen(inputFile,"r"); if(!fin) { printf("Je n'ai pas pu ouvrir le fichier p\n"); return; } file = fopen(outputFile,"w"); if(!file) return; fprintf(file,"gboolean myFunction(gchar* filename)\n"); fprintf(file,"{\n"); fprintf(file,"\tFILE* file = fopen(filename,\"w\");\n\n"); fprintf(file,"\tif(file==NULL)\n"); fprintf(file,"\t{\n"); fprintf(file,"\t\treturn FALSE;\n"); fprintf(file,"\t}\n"); while(!feof(fin)) { fgets(t,BSIZE,fin); str_delete_n(t); delete_first_spaces(t); delete_last_spaces(t); fprintf(file,"\tfprintf(file,\"%s\\n\");\n",t); } fprintf(file,"\tfclose(file);\n"); fprintf(file,"\treturn TRUE;\n"); fprintf(file,"}\n"); fclose(file); } /***********************************************************************************/ int main(int argc,char* argv[]) { char* inputFile = "p"; char* outputFile = "p.c"; createMPQCFunction(inputFile, outputFile); return 0; } GabeditSrc250/utils/Others/cNano.c0000644000175100017510000000166113130665226017306 0ustar alloucheallouche#include #include #include #define BSIZE 1024 /**********************************************/ int main(int argc,char* argv[]) { FILE* fin; FILE* fout; char t[BSIZE]; char* filename = NULL; float x,y,z; int n = 0; if(argc<2) filename = strdup("p"); else filename = strdup(argv[1]); printf("Input file = %s\n",filename); printf("Output file = %s\n","p.xyz"); fin = fopen(filename,"r"); if(!fin) { printf("I can not open %s\n",filename); return 1; } fout = fopen("p.xyz","w"); if(!fout) { printf("I can not open Fragment.c\n"); return 1; } n = 0; while(!feof(fin)) { if(!fgets(t,BSIZE,fin)) break; n++; } fclose(fin); fin = fopen(filename,"r"); fprintf(fout,"%d\n",n); fprintf(fout," \n",n); while(!feof(fin)) { if(!fgets(t,BSIZE,fin)) break; sscanf(t,"%d %f %f %f",&n, &x, &y, &z); fprintf(fout,"C %f %f %f\n",x,y,z); } fclose(fin); fclose(fout); return 0; } GabeditSrc250/utils/Others/gtkrc0000644000175100017510000001254113130664665017146 0ustar alloucheallouche # pixmap_path "

:::..." # pixmap_path "/usr/include/X11R6/pixmaps:/home/imain/pixmaps" # # style [= ] # { #

q c #968478", ",q c #998C84", "'q c #95897D", ")q c #928477", "!q c #908070", "~q c #867764", "{q c #76664F", "]q c #604E36", "^q c #59452D", "/q c #57432A", "(q c #4E3D23", "_q c #503F25", ":q c #543C22", "r c #8A7365", ",r c #91796D", "'r c #988074", ")r c #99857C", "!r c #93877B", "~r c #82715F", "{r c #7B6A56", "]r c #72604C", "^r c #65533D", "/r c #5B472F", "(r c #4E3C24", "_r c #51391F", ":r c #533B21", "s c #866F61", ",s c #957D73", "'s c #9B8379", ")s c #9B877E", "!s c #9B8E86", "~s c #978B7F", "{s c #8E8171", "]s c #877767", "^s c #7C6D5A", "/s c #766551", "(s c #64523C", "_s c #57452D", ":s c #4F3D25", "t c #6A6569", ",t c #676364", "'t c #474344", ")t c #3E3A39", "!t c #353432", "~t c #3D3C3A", "{t c #464742", "]t c #1E211A", "^t c #151712", "/t c #171914", "(t c #181A15", "_t c #191A15", ":t c #1D1C17", "u c #72656F", ",u c #6B5F69", "'u c #4A4049", ")u c #4B444B", "!u c #403940", "~u c #4A4448", "{u c #6E696D", "]u c #726D71", "^u c #565155", "/u c #464243", "(u c #3C3B39", "_u c #41403E", ":u c #31322C", "v c #D1BCB9", ",v c #C9B6B2", "'v c #C0AEAC", ")v c #BDAEAB", "!v c #C5B7B6", "~v c #CCC0C0", "{v c #BEB3B7", "]v c #92898E", "^v c #7F757D", "/v c #675D65", "(v c #594F58", "_v c #675B65", ":v c #645864", "w c #CBB7B0", ",w c #CDB6B0", "'w c #CFB8B2", ")w c #CFB7B3", "!w c #D0BBB6", "~w c #D0BDB9", "{w c #CBB9B5", "]w c #C4B5B2", "^w c #C2B7B5", "/w c #C9BFBE", "(w c #CDC7C7", "_w c #C4BEC2", ":w c #B4AFB5", "x c #AF9E97", ",x c #AF9E94", "'x c #B19F95", ")x c #B3A197", "!x c #B5A399", "~x c #B6A49A", "{x c #BFABA2", "]x c #C6AFA7", "^x c #CFB8B0", "/x c #D1BAB2", "(x c #D0B7B0", "_x c #D3BCB6", ":x c #CCB7B2", "y c #41392C", ",y c #2E2619", "'y c #2D251A", ")y c #2E261B", "!y c #372E25", "~y c #312821", "{y c #393029", "]y c #483D37", "^y c #675956", "/y c #776966", "(y c #8A7C79", "_y c #A7A29C", ":y c #AEA19B", "z c #1F1A14", ",z c #1E170F", "'z c #221912", ")z c #342A20", "!z c #3F352B", "~z c #372D23", "{z c #30261C", "]z c #2F251C", "^z c #32281F", "/z c #342923", "(z c #3D322C", "_z c #433832", ":z c #3F3430", "A c #4A3321", ",A c #493325", "'A c #4C3A2C", ")A c #343122", "!A c #111811", "~A c #0E1410", "{A c #0E1211", "]A c #0E1213", "^A c #0F1012", "/A c #0E0F13", "(A c #070A11", "_A c #0A0D14", ":A c #0C0F16", "B c #968A8C", ",B c #9A8B8E", "'B c #998D8F", ")B c #988C8E", "!B c #969090", "~B c #93867D", "{B c #766958", "]B c #6A5D4A", "^B c #52432C", "/B c #504027", "(B c #4E3A1F", "_B c #4B361B", ":B c #563A22", "C c #A0A7AF", ",C c #A3AAB4", "'C c #99A0AA", ")C c #9198A2", "!C c #A4A8B3", "~C c #BABEC7", "{C c #A9ACB5", "]C c #8A8D94", "^C c #8D9097", "/C c #9FA2A7", "(C c #949599", "_C c #6A6B6D", ":C c #6E6F71", "D c #9A9182", ",D c #989181", "'D c #9C9286", ")D c #979589", "!D c #A8A699", "~D c #A6A497", "{D c #A4A19C", "]D c #B2A698", "^D c #B3A18D", "/D c #B8A48C", "(D c #BCA890", "_D c #BEAC96", ":D c #C2B09C", "E c #0F0F05", ",E c #141408", "'E c #1A170E", ")E c #1D1910", "!E c #2E2422", "~E c #352727", "{E c #342427", "]E c #39262A", "^E c #4F393C", "/E c #62494C", "(E c #614748", "_E c #6D5150", ":E c #694B4B", "F c #9E8B87", ",F c #988A8A", "'F c #8B7E75", ")F c #817567", "!F c #7A6E5E", "~F c #6E6150", "{F c #5F533D", "]F c #54452E", "^F c #4E3E25", "/F c #503B1E", "(F c #563A24", "_F c #503820", ":F c #4C361F", "G c #5F5F61", ",G c #4B4B4B", "'G c #323031", ")G c #302C2B", "!G c #3B3535", "~G c #3F3438", "{G c #372C30", "]G c #302529", "^G c #2B2122", "/G c #251B19", "(G c #2C231E", "_G c #40332A", ":G c #4B3B2E", "H c #D1CAC4", ",H c #D0CBC8", "'H c #D1CDCC", ")H c #CFCECC", "!H c #CDCDCD", "~H c #CBCBCB", "{H c #C9C9CB", "]H c #C8C9CD", "^H c #C3C8CE", "/H c #BFC3CC", "(H c #B9C0C8", "_H c #C6CDD5", ":H c #D5DCE4", "I c #CBB9B7", ",I c #C8B6B2", "'I c #C9B8B1", ")I c #D0BFB5", "!I c #CFBEB4", "~I c #BFAFA2", "{I c #A8988B", "]I c #988879", "^I c #9F8C86", "/I c #A99891", "(I c #A2908C", "_I c #A5A396", ":I c #A9A59A", "J c #25221B", ",J c #1A1914", "'J c #100F0A", ")J c #0F0E0A", "!J c #0E0D09", "~J c #171C16", "{J c #161B15", "]J c #181A17", "^J c #242223", "/J c #312C30", "(J c #372E33", "_J c #34292F", ":J c #4C3C46", "K c #91949D", ",K c #7D8087", "'K c #7C7B81", ")K c #6A696F", "!K c #7A787D", "~K c #797478", "{K c #6C666A", "]K c #666062", "^K c #544B4E", "/K c #4F4448", "(K c #4D3C44", "_K c #4A363F", ":K c #463339", "L c #A9A490", ",L c #ABA291", "'L c #ADA191", ")L c #B6A999", "!L c #B7AA9A", "~L c #BFADA1", "{L c #C4B0A5", "]L c #C1ADA2", "^L c #C4B0A7", "/L c #CBB8B1", "(L c #C6B9B3", "_L c #CABFBB", ":L c #D0C5C3", "M c #110E09", ",M c #130F0C", "'M c #14100D", ")M c #151110", "!M c #120E0D", "~M c #181415", "{M c #1B191A", "]M c #232524", "^M c #151918", "/M c #222423", "(M c #18191B", "_M c #020106", ":M c #272229", "N c #ADAEB3", ",N c #8E8D92", "'N c #6C676D", ")N c #625D61", "!N c #716B6F", "~N c #7C7376", "{N c #6A5F63", "]N c #504446", "^N c #614E52", "/N c #4B3739", "(N c #493335", "_N c #523D38", ":N c #543D35", "O c #988380", ",O c #84716D", "'O c #A08D89", ")O c #A7A29E", "!O c #ABA195", "~O c #ADA193", "{O c #AEA093", "]O c #B0A393", "^O c #ACA18F", "/O c #ADA290", "(O c #BCABA1", "_O c #C0AFA7", ":O c #C6B3AC", "P c #191516", ",P c #19171A", "'P c #201F24", ")P c #131218", "!P c #100D16", "~P c #24212A", "{P c #302A36", "]P c #413B49", "^P c #675F6E", "/P c #786F80", "(P c #524757", "_P c #352937", ":P c #706470", "